KnVzcl8yNC50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjMuICBMYXN0IGNoYW5nZTogMjAwNiBKdWwgMjMKCgkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgoKCQkJICAgICBJbnNlcnRpbmcgcXVpY2tseQoKCldoZW4gZW50ZXJpbmcgdGV4dCwgVmltIG9mZmVycyB2YXJpb3VzIHdheXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Yga2V5c3Ryb2tlcwphbmQgYXZvaWQgdHlwaW5nIG1pc3Rha2VzLiAgVXNlIEluc2VydCBtb2RlIGNvbXBsZXRpb24gdG8gcmVwZWF0IHByZXZpb3VzbHkKdHlwZWQgd29yZHMuICBBYmJyZXZpYXRlIGxvbmcgd29yZHMgdG8gc2hvcnQgb25lcy4gIFR5cGUgY2hhcmFjdGVycyB0aGF0CmFyZW4ndCBvbiB5b3VyIGtleWJvYXJkLgoKfDI0LjF8CU1ha2luZyBjb3JyZWN0aW9ucwp8MjQuMnwJU2hvd2luZyBtYXRjaGVzCnwyNC4zfAlDb21wbGV0aW9uCnwyNC40fAlSZXBlYXRpbmcgYW4gaW5zZXJ0CnwyNC41fAlDb3B5aW5nIGZyb20gYW5vdGhlciBsaW5lCnwyNC42fAlJbnNlcnRpbmcgYSByZWdpc3Rlcgp8MjQuN3wJQWJicmV2aWF0aW9ucwp8MjQuOHwJRW50ZXJpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzCnwyNC45fAlEaWdyYXBocwp8MjQuMTB8CU5vcm1hbCBtb2RlIGNvbW1hbmRzCgogICAgIE5leHQgY2hhcHRlcjogfHVzcl8yNS50eHR8ICBFZGl0aW5nIGZvcm1hdHRlZCB0ZXh0CiBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzIzLnR4dHwgIEVkaXRpbmcgb3RoZXIgZmlsZXMKVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqMjQuMSoJTWFraW5nIGNvcnJlY3Rpb25zCgpUaGUgPEJTPiBrZXkgd2FzIGFscmVhZHkgbWVudGlvbmVkLiAgSXQgZGVsZXRlcyB0aGUgY2hhcmFjdGVyIGp1c3QgYmVmb3JlIHRoZQpjdXJzb3IuICBUaGUgPERlbD4ga2V5IGRvZXMgdGhlIHNhbWUgZm9yIHRoZSBjaGFyYWN0ZXIgdW5kZXIgKGFmdGVyKSB0aGUKY3Vyc29yLgogICBXaGVuIHlvdSB0eXBlZCBhIHdob2xlIHdvcmQgd3JvbmcsIHVzZSBDVFJMLVc6CgoJVGhlIGhvcnNlIGhhZCBmYWxsZW4gdG8gdGhlIHNreSB+CgkJCQkgICAgICAgQ1RSTC1XCglUaGUgaG9yc2UgaGFkIGZhbGxlbiB0byB0aGUgfgoKSWYgeW91IHJlYWxseSBtZXNzZWQgdXAgYSBsaW5lIGFuZCB3YW50IHRvIHN0YXJ0IG92ZXIsIHVzZSBDVFJMLVUgdG8gZGVsZXRlCml0LiAgVGhpcyBrZWVwcyB0aGUgdGV4dCBhZnRlciB0aGUgY3Vyc29yIGFuZCB0aGUgaW5kZW50LiAgT25seSB0aGUgdGV4dCBmcm9tCnRoZSBmaXJzdCBub24tYmxhbmsgdG8gdGhlIGN1cnNvciBpcyBkZWxldGVkLiAgV2l0aCB0aGUgY3Vyc29yIG9uIHRoZSAiZiIgb2YKImZhbGxlbiIgaW4gdGhlIG5leHQgbGluZSBwcmVzc2luZyBDVFJMLVUgZG9lcyB0aGlzOgoKCVRoZSBob3JzZSBoYWQgZmFsbGVuIHRvIHRoZSB+CgkJICAgICAgQ1RSTC1VCglmYWxsZW4gdG8gdGhlIH4KCldoZW4geW91IHNwb3QgYSBtaXN0YWtlIGEgZmV3IHdvcmRzIGJhY2ssIHlvdSBuZWVkIHRvIG1vdmUgdGhlIGN1cnNvciB0aGVyZSB0bwpjb3JyZWN0IGl0LiAgRm9yIGV4YW1wbGUsIHlvdSB0eXBlZCB0aGlzOgoKCVRoZSBob3JzZSBoYWQgZm9sbGVuIHRvIHRoZSBncm91bmQgfgoKWW91IG5lZWQgdG8gY2hhbmdlICJmb2xsZW4iIHRvICJmYWxsZW4iLiAgV2l0aCB0aGUgY3Vyc29yIGF0IHRoZSBlbmQsIHlvdQp3b3VsZCB0eXBlIHRoaXMgdG8gY29ycmVjdCBpdDogPgoKCQkJCQk8RXNjPjRibHJhQQoKPAlnZXQgb3V0IG9mIEluc2VydCBtb2RlCQk8RXNjPgoJZm91ciB3b3JkcyBiYWNrCQkJICAgICA0YgoJbW92ZSBvbiB0b3Agb2YgdGhlICJvIgkJICAgICAgIGwKCXJlcGxhY2Ugd2l0aCAiYSIJCQlyYQoJcmVzdGFydCBJbnNlcnQgbW9kZQkJCSAgQQoKQW5vdGhlciB3YXkgdG8gZG8gdGhpczogPgoKCQk8Qy1MZWZ0PjxDLUxlZnQ+PEMtTGVmdD48Qy1MZWZ0PjxSaWdodD48RGVsPmE8RW5kPgoKPAlmb3VyIHdvcmRzIGJhY2sJCSAgICAgPEMtTGVmdD48Qy1MZWZ0PjxDLUxlZnQ+PEMtTGVmdD4KCW1vdmUgb24gdG9wIG9mIHRoZSAibyIJCQk8UmlnaHQ+CglkZWxldGUgdGhlICJvIgkJCQkgICAgICAgPERlbD4KCWluc2VydCBhbiAiYSIJCQkJCSAgICBhCglnbyB0byBlbmQgb2YgdGhlIGxpbmUJCQkJICAgICA8RW5kPgoKVGhpcyB1c2VzIHNwZWNpYWwga2V5cyB0byBtb3ZlIGFyb3VuZCwgd2hpbGUgcmVtYWluaW5nIGluIEluc2VydCBtb2RlLiAgVGhpcwpyZXNlbWJsZXMgd2hhdCB5b3Ugd291bGQgZG8gaW4gYSBtb2RlbGVzcyBlZGl0b3IuICBJdCdzIGVhc2llciB0byByZW1lbWJlciwKYnV0IHRha2VzIG1vcmUgdGltZSAoeW91IGhhdmUgdG8gbW92ZSB5b3VyIGhhbmQgZnJvbSB0aGUgbGV0dGVycyB0byB0aGUgY3Vyc29yCmtleXMsIGFuZCB0aGUgPEVuZD4ga2V5IGlzIGhhcmQgdG8gcHJlc3Mgd2l0aG91dCBsb29raW5nIGF0IHRoZSBrZXlib2FyZCkuCiAgIFRoZXNlIHNwZWNpYWwga2V5cyBhcmUgbW9zdCB1c2VmdWwgd2hlbiB3cml0aW5nIGEgbWFwcGluZyB0aGF0IGRvZXNuJ3QKbGVhdmUgSW5zZXJ0IG1vZGUuICBUaGUgZXh0cmEgdHlwaW5nIGRvZXNuJ3QgbWF0dGVyIHRoZW4uCiAgIEFuIG92ZXJ2aWV3IG9mIHRoZSBrZXlzIHlvdSBjYW4gdXNlIGluIEluc2VydCBtb2RlOgoKCTxDLUhvbWU+CXRvIHN0YXJ0IG9mIHRoZSBmaWxlCgk8UGFnZVVwPglhIHdob2xlIHNjcmVlbmZ1bCB1cAoJPEhvbWU+CQl0byBzdGFydCBvZiBsaW5lCgk8Uy1MZWZ0PglvbmUgd29yZCBsZWZ0Cgk8Qy1MZWZ0PglvbmUgd29yZCBsZWZ0Cgk8Uy1SaWdodD4Jb25lIHdvcmQgcmlnaHQKCTxDLVJpZ2h0PglvbmUgd29yZCByaWdodAoJPEVuZD4JCXRvIGVuZCBvZiB0aGUgbGluZQoJPFBhZ2VEb3duPglhIHdob2xlIHNjcmVlbmZ1bCBkb3duCgk8Qy1FbmQ+CQl0byBlbmQgb2YgdGhlIGZpbGUKClRoZXJlIGFyZSBhIGZldyBtb3JlLCBzZWUgfGlucy1zcGVjaWFsLXNwZWNpYWx8LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioyNC4yKglTaG93aW5nIG1hdGNoZXMKCldoZW4geW91IHR5cGUgYSApIGl0IHdvdWxkIGJlIG5pY2UgdG8gc2VlIHdpdGggd2hpY2ggKCBpdCBtYXRjaGVzLiAgVG8gbWFrZQpWaW0gZG8gdGhhdCB1c2UgdGhpcyBjb21tYW5kOiA+CgoJOnNldCBzaG93bWF0Y2gKCldoZW4geW91IG5vdyB0eXBlIGEgdGV4dCBsaWtlICIoZXhhbXBsZSkiLCBhcyBzb29uIGFzIHlvdSB0eXBlIHRoZSApIFZpbSB3aWxsCmJyaWVmbHkgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBtYXRjaGluZyAoLCBrZWVwIGl0IHRoZXJlIGZvciBoYWxmIGEgc2Vjb25kLAphbmQgbW92ZSBiYWNrIHRvIHdoZXJlIHlvdSB3ZXJlIHR5cGluZy4KICAgSW4gY2FzZSB0aGVyZSBpcyBubyBtYXRjaGluZyAoLCBWaW0gd2lsbCBiZWVwLiAgVGhlbiB5b3Uga25vdyB0aGF0IHlvdQptaWdodCBoYXZlIGZvcmdvdHRlbiB0aGUgKCBzb21ld2hlcmUsIG9yIHR5cGVkIGEgKSB0b28gbWFueS4KICAgVGhlIG1hdGNoIHdpbGwgYWxzbyBiZSBzaG93biBmb3IgW10gYW5kIHt9IHBhaXJzLiAgWW91IGRvbid0IGhhdmUgdG8gd2FpdAp3aXRoIHR5cGluZyB0aGUgbmV4dCBjaGFyYWN0ZXIsIGFzIHNvb24gYXMgVmltIHNlZXMgaXQgdGhlIGN1cnNvciB3aWxsIG1vdmUKYmFjayBhbmQgaW5zZXJ0aW5nIGNvbnRpbnVlcyBhcyBiZWZvcmUuCiAgIFlvdSBjYW4gY2hhbmdlIHRoZSB0aW1lIFZpbSB3YWl0cyB3aXRoIHRoZSAnbWF0Y2h0aW1lJyBvcHRpb24uICBGb3IKZXhhbXBsZSwgdG8gbWFrZSBWaW0gd2FpdCBvbmUgYW5kIGEgaGFsZiBzZWNvbmQ6ID4KCgk6c2V0IG1hdGNodGltZT0xNQoKVGhlIHRpbWUgaXMgc3BlY2lmaWVkIGluIHRlbnRocyBvZiBhIHNlY29uZC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqMjQuMyoJQ29tcGxldGlvbgoKVmltIGNhbiBhdXRvbWF0aWNhbGx5IGNvbXBsZXRlIHdvcmRzIG9uIGluc2VydGlvbi4gIFlvdSB0eXBlIHRoZSBmaXJzdCBwYXJ0IG9mCmEgd29yZCwgcHJlc3MgQ1RSTC1QLCBhbmQgVmltIGd1ZXNzZXMgdGhlIHJlc3QuCiAgIFN1cHBvc2UsIGZvciBleGFtcGxlLCB0aGF0IHlvdSBhcmUgY3JlYXRpbmcgYSBDIHByb2dyYW0gYW5kIHdhbnQgdG8gdHlwZSBpbgp0aGUgZm9sbG93aW5nOgoKCXRvdGFsID0gY2hfYXJyYXlbMF0gKyBjaF9hcnJheVsxXSArIGNoX2FycmF5WzJdOyB+CgpZb3Ugc3RhcnQgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZzoKCgl0b3RhbCA9IGNoX2FycmF5WzBdICsgY2hfIH4KCkF0IHRoaXMgcG9pbnQsIHlvdSB0ZWxsIFZpbSB0byBjb21wbGV0ZSB0aGUgd29yZCB1c2luZyB0aGUgY29tbWFuZCBDVFJMLVAuClZpbSBzZWFyY2hlcyBmb3IgYSB3b3JkIHRoYXQgc3RhcnRzIHdpdGggd2hhdCdzIGluIGZyb250IG9mIHRoZSBjdXJzb3IuICBJbgp0aGlzIGNhc2UsIGl0IGlzICJjaF8iLCB3aGljaCBtYXRjaGVzIHdpdGggdGhlIHdvcmQgY2hfYXJyYXkuICBTbyB0eXBpbmcKQ1RSTC1QIGdpdmVzIHlvdSB0aGUgZm9sbG93aW5nOgoKCXRvdGFsID0gY2hfYXJyYXlbMF0gKyBjaF9hcnJheSB+CgpBZnRlciBhIGxpdHRsZSBtb3JlIHR5cGluZywgeW91IGdldCB0aGlzIChlbmRpbmcgaW4gYSBzcGFjZSk6CgoJdG90YWwgPSBjaF9hcnJheVswXSArIGNoX2FycmF5WzFdICsgIH4KCklmIHlvdSBub3cgdHlwZSBDVFJMLVAgVmltIHdpbGwgc2VhcmNoIGFnYWluIGZvciBhIHdvcmQgdGhhdCBjb21wbGV0ZXMgdGhlCndvcmQgYmVmb3JlIHRoZSBjdXJzb3IuICBTaW5jZSB0aGVyZSBpcyBub3RoaW5nIGluIGZyb250IG9mIHRoZSBjdXJzb3IsIGl0CmZpbmRzIHRoZSBmaXJzdCB3b3JkIGJhY2t3YXJkcywgd2hpY2ggaXMgImNoX2FycmF5Ii4gIFR5cGluZyBDVFJMLVAgYWdhaW4KZ2l2ZXMgeW91IHRoZSBuZXh0IHdvcmQgdGhhdCBtYXRjaGVzLCBpbiB0aGlzIGNhc2UgInRvdGFsIi4gIEEgdGhpcmQgQ1RSTC1QCnNlYXJjaGVzIGZ1cnRoZXIgYmFjay4gIElmIHRoZXJlIGlzIG5vdGhpbmcgZWxzZSwgaXQgY2F1c2VzIHRoZSBlZGl0b3IgdG8gcnVuCm91dCBvZiB3b3Jkcywgc28gaXQgcmV0dXJucyB0byB0aGUgb3JpZ2luYWwgdGV4dCwgd2hpY2ggaXMgbm90aGluZy4gIEEgZm91cnRoCkNUUkwtUCBjYXVzZXMgdGhlIGVkaXRvciB0byBzdGFydCBvdmVyIGFnYWluIHdpdGggImNoX2FycmF5Ii4KClRvIHNlYXJjaCBmb3J3YXJkLCB1c2UgQ1RSTC1OLiAgU2luY2UgdGhlIHNlYXJjaCB3cmFwcyBhcm91bmQgdGhlIGVuZCBvZiB0aGUKZmlsZSwgQ1RSTC1OIGFuZCBDVFJMLVAgd2lsbCBmaW5kIHRoZSBzYW1lIG1hdGNoZXMsIGJ1dCBpbiBhIGRpZmZlcmVudApzZXF1ZW5jZS4gIEhpbnQ6IENUUkwtTiBpcyBOZXh0LW1hdGNoIGFuZCBDVFJMLVAgaXMgUHJldmlvdXMtbWF0Y2guCgpUaGUgVmltIGVkaXRvciBnb2VzIHRocm91Z2ggYSBsb3Qgb2YgZWZmb3J0IHRvIGZpbmQgd29yZHMgdG8gY29tcGxldGUuICBCeQpkZWZhdWx0LCBpdCBzZWFyY2hlcyB0aGUgZm9sbG93aW5nIHBsYWNlczoKCgkxLiBDdXJyZW50IGZpbGUKCTIuIEZpbGVzIGluIG90aGVyIHdpbmRvd3MKCTMuIE90aGVyIGxvYWRlZCBmaWxlcyAoaGlkZGVuIGJ1ZmZlcnMpCgk0LiBGaWxlcyB3aGljaCBhcmUgbm90IGxvYWRlZCAoaW5hY3RpdmUgYnVmZmVycykKCTUuIFRhZyBmaWxlcwoJNi4gQWxsIGZpbGVzICNpbmNsdWRlZCBieSB0aGUgY3VycmVudCBmaWxlCgoKT1BUSU9OUwoKWW91IGNhbiBjdXN0b21pemUgdGhlIHNlYXJjaCBvcmRlciB3aXRoIHRoZSAnY29tcGxldGUnIG9wdGlvbi4KClRoZSAnaWdub3JlY2FzZScgb3B0aW9uIGlzIHVzZWQuICBXaGVuIGl0IGlzIHNldCwgY2FzZSBkaWZmZXJlbmNlcyBhcmUgaWdub3JlZAp3aGVuIHNlYXJjaGluZyBmb3IgbWF0Y2hlcy4KCkEgc3BlY2lhbCBvcHRpb24gZm9yIGNvbXBsZXRpb24gaXMgJ2luZmVyY2FzZScuICBUaGlzIGlzIHVzZWZ1bCB0byBmaW5kCm1hdGNoZXMgd2hpbGUgaWdub3JpbmcgY2FzZSAoJ2lnbm9yZWNhc2UnIG11c3QgYmUgc2V0KSBidXQgc3RpbGwgdXNpbmcgdGhlCmNhc2Ugb2YgdGhlIHdvcmQgdHlwZWQgc28gZmFyLiAgVGh1cyBpZiB5b3UgdHlwZSAiRm9yIiBhbmQgVmltIGZpbmRzIGEgbWF0Y2gKImZvcnR1bmF0ZWx5IiwgaXQgd2lsbCByZXN1bHQgaW4gIkZvcnR1bmF0ZWx5Ii4KCgpDT01QTEVUSU5HIFNQRUNJRklDIElURU1TCgpJZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgbG9va2luZyBmb3IsIHlvdSBjYW4gdXNlIHRoZXNlIGNvbW1hbmRzIHRvIGNvbXBsZXRlCndpdGggYSBjZXJ0YWluIHR5cGUgb2YgaXRlbToKCglDVFJMLVggQ1RSTC1GCQlmaWxlIG5hbWVzCglDVFJMLVggQ1RSTC1MCQl3aG9sZSBsaW5lcwoJQ1RSTC1YIENUUkwtRAkJbWFjcm8gZGVmaW5pdGlvbnMgKGFsc28gaW4gaW5jbHVkZWQgZmlsZXMpCglDVFJMLVggQ1RSTC1JCQljdXJyZW50IGFuZCBpbmNsdWRlZCBmaWxlcwoJQ1RSTC1YIENUUkwtSwkJd29yZHMgZnJvbSBhIGRpY3Rpb25hcnkKCUNUUkwtWCBDVFJMLVQJCXdvcmRzIGZyb20gYSB0aGVzYXVydXMKCUNUUkwtWCBDVFJMLV0JCXRhZ3MKCUNUUkwtWCBDVFJMLVYJCVZpbSBjb21tYW5kIGxpbmUKCkFmdGVyIGVhY2ggb2YgdGhlbSBDVFJMLU4gY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgbmV4dCBtYXRjaCwgQ1RSTC1QIHRvIGZpbmQKdGhlIHByZXZpb3VzIG1hdGNoLgogICBNb3JlIGluZm9ybWF0aW9uIGZvciBlYWNoIG9mIHRoZXNlIGNvbW1hbmRzIGhlcmU6IHxpbnMtY29tcGxldGlvbnwuCgoKQ09NUExFVElORyBGSUxFIE5BTUVTCgpMZXQncyB0YWtlIENUUkwtWCBDVFJMLUYgYXMgYW4gZXhhbXBsZS4gIFRoaXMgd2lsbCBmaW5kIGZpbGUgbmFtZXMuICBJdCBzY2Fucwp0aGUgY3VycmVudCBkaXJlY3RvcnkgZm9yIGZpbGVzIGFuZCBkaXNwbGF5cyBlYWNoIG9uZSB0aGF0IG1hdGNoZXMgdGhlIHdvcmQgaW4KZnJvbnQgb2YgdGhlIGN1cnNvci4KICAgU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHRoYXQgeW91IGhhdmUgdGhlIGZvbGxvd2luZyBmaWxlcyBpbiB0aGUgY3VycmVudApkaXJlY3Rvcnk6CgoJbWFpbi5jICBzdWJfY291bnQuYyAgc3ViX2RvbmUuYyAgc3ViX2V4aXQuYwoKTm93IGVudGVyIEluc2VydCBtb2RlIGFuZCBzdGFydCB0eXBpbmc6CgoJVGhlIGV4aXQgY29kZSBpcyBpbiB0aGUgZmlsZSBzdWIgfgoKQXQgdGhpcyBwb2ludCwgeW91IGVudGVyIHRoZSBjb21tYW5kIENUUkwtWCBDVFJMLUYuICBWaW0gbm93IGNvbXBsZXRlcyB0aGUKY3VycmVudCB3b3JkICJzdWIiIGJ5IGxvb2tpbmcgYXQgdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFRoZQpmaXJzdCBtYXRjaCBpcyBzdWJfY291bnQuYy4gIFRoaXMgaXMgbm90IHRoZSBvbmUgeW91IHdhbnQsIHNvIHlvdSBtYXRjaCB0aGUKbmV4dCBmaWxlIGJ5IHR5cGluZyBDVFJMLU4uICBUaGlzIG1hdGNoIGlzIHN1Yl9kb25lLmMuICBUeXBpbmcgQ1RSTC1OIGFnYWluCnRha2VzIHlvdSB0byBzdWJfZXhpdC5jLiAgVGhlIHJlc3VsdHM6CgoJVGhlIGV4aXQgY29kZSBpcyBpbiB0aGUgZmlsZSBzdWJfZXhpdC5jIH4KCklmIHRoZSBmaWxlIG5hbWUgc3RhcnRzIHdpdGggLyAoVW5peCkgb3IgQzpcIChNUy1XaW5kb3dzKSB5b3UgY2FuIGZpbmQgYWxsCmZpbGVzIGluIHRoZSBmaWxlIHN5c3RlbS4gIEZvciBleGFtcGxlLCB0eXBlICIvdSIgYW5kIENUUkwtWCBDVFJMLUYuICBUaGlzCndpbGwgbWF0Y2ggIi91c3IiICh0aGlzIGlzIG9uIFVuaXgpOgoKCXRoZSBmaWxlIGlzIGZvdW5kIGluIC91c3IvIH4KCklmIHlvdSBub3cgcHJlc3MgQ1RSTC1OIHlvdSBnbyBiYWNrIHRvICIvdSIuICBJbnN0ZWFkLCB0byBhY2NlcHQgdGhlICIvdXNyLyIKYW5kIGdvIG9uZSBkaXJlY3RvcnkgbGV2ZWwgZGVlcGVyLCB1c2UgQ1RSTC1YIENUUkwtRiBhZ2FpbjoKCgl0aGUgZmlsZSBpcyBmb3VuZCBpbiAvdXNyL1gxMVI2LyB+CgpUaGUgcmVzdWx0cyBkZXBlbmQgb24gd2hhdCBpcyBmb3VuZCBpbiB5b3VyIGZpbGUgc3lzdGVtLCBvZiBjb3Vyc2UuICBUaGUKbWF0Y2hlcyBhcmUgc29ydGVkIGFscGhhYmV0aWNhbGx5LgoKCkNPTVBMRVRJTkcgSU4gU09VUkNFIENPREUKClNvdXJjZSBjb2RlIGZpbGVzIGFyZSB3ZWxsIHN0cnVjdHVyZWQuICBUaGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRvCmNvbXBsZXRpb24gaW4gYW4gaW50ZWxsaWdlbnQgd2F5LiAgSW4gVmltIHRoaXMgaXMgY2FsbGVkIE9tbmkgY29tcGxldGlvbi4gIEluCnNvbWUgb3RoZXIgZWRpdG9ycyBpdCdzIGNhbGxlZCBpbnRlbGxpc2Vuc2UsIGJ1dCB0aGF0IGlzIGEgdHJhZGVtYXJrLgoKVGhlIGtleSB0byBPbW5pIGNvbXBsZXRpb24gaXMgQ1RSTC1YIENUUkwtTy4gIE9idmlvdXNseSB0aGUgTyBzdGFuZHMgZm9yIE9tbmkKaGVyZSwgc28gdGhhdCB5b3UgY2FuIHJlbWVtYmVyIGl0IGVhc2llci4gIExldCdzIHVzZSBhbiBleGFtcGxlIGZvciBlZGl0aW5nIEMKc291cmNlOgoKCXsgfgoJICAgIHN0cnVjdCBmb28gKnA7IH4KCSAgICBwLT4gfgoKVGhlIGN1cnNvciBpcyBhZnRlciAicC0+Ii4gIE5vdyB0eXBlIENUUkwtWCBDVFJMLU8uICBWaW0gd2lsbCBvZmZlciB5b3UgYSBsaXN0Cm9mIGFsdGVybmF0aXZlcywgd2hpY2ggYXJlIHRoZSBpdGVtcyB0aGF0ICJzdHJ1Y3QgZm9vIiBjb250YWlucy4gIFRoYXQgaXMKcXVpdGUgZGlmZmVyZW50IGZyb20gdXNpbmcgQ1RSTC1QLCB3aGljaCB3b3VsZCBjb21wbGV0ZSBhbnkgd29yZCwgd2hpbGUgb25seQptZW1iZXJzIG9mICJzdHJ1Y3QgZm9vIiBhcmUgdmFsaWQgaGVyZS4KCkZvciBPbW5pIGNvbXBsZXRpb24gdG8gd29yayB5b3UgbWF5IG5lZWQgdG8gZG8gc29tZSBzZXR1cC4gIEF0IGxlYXN0IG1ha2Ugc3VyZQpmaWxldHlwZSBwbHVnaW5zIGFyZSBlbmFibGVkLiAgWW91ciB2aW1yYyBmaWxlIHNob3VsZCBjb250YWluIGEgbGluZSBsaWtlCnRoaXM6ID4KCWZpbGV0eXBlIHBsdWdpbiBvbgpPcjogPgoJZmlsZXR5cGUgcGx1Z2luIGluZGVudCBvbgoKRm9yIEMgY29kZSB5b3UgbmVlZCB0byBjcmVhdGUgYSB0YWdzIGZpbGUgYW5kIHNldCB0aGUgJ3RhZ3MnIG9wdGlvbi4gIFRoYXQgaXMKZXhwbGFpbmVkIHxmdC1jLW9tbml8LiAgRm9yIG90aGVyIGZpbGV0eXBlcyB5b3UgbWF5IG5lZWQgdG8gZG8gc29tZXRoaW5nCnNpbWlsYXIsIGxvb2sgYmVsb3cgfGNvbXBsLW9tbmktZmlsZXR5cGVzfC4gIEl0IG9ubHkgd29ya3MgZm9yIHNwZWNpZmljCmZpbGV0eXBlcy4gIENoZWNrIHRoZSB2YWx1ZSBvZiB0aGUgJ29tbmlmdW5jJyBvcHRpb24gdG8gZmluZCBvdXQgaWYgaXQgd291bGQKd29yay4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqMjQuNCoJUmVwZWF0aW5nIGFuIGluc2VydAoKSWYgeW91IHByZXNzIENUUkwtQSwgdGhlIGVkaXRvciBpbnNlcnRzIHRoZSB0ZXh0IHlvdSB0eXBlZCB0aGUgbGFzdCB0aW1lIHlvdQp3ZXJlIGluIEluc2VydCBtb2RlLgogICBBc3N1bWUsIGZvciBleGFtcGxlLCB0aGF0IHlvdSBoYXZlIGEgZmlsZSB0aGF0IGJlZ2lucyB3aXRoIHRoZSBmb2xsb3dpbmc6CgoJImZpbGUuaCIgfgoJLyogTWFpbiBwcm9ncmFtIGJlZ2lucyAqLyB+CgpZb3UgZWRpdCB0aGlzIGZpbGUgYnkgaW5zZXJ0aW5nICIjaW5jbHVkZSAiIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0CmxpbmU6CgoJI2luY2x1ZGUgImZpbGUuaCIgfgoJLyogTWFpbiBwcm9ncmFtIGJlZ2lucyAqLyB+CgpZb3UgZ28gZG93biB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUgdXNpbmcgdGhlIGNvbW1hbmRzICJqXiIuICBZb3UKbm93IHN0YXJ0IHRvIGluc2VydCBhIG5ldyAiI2luY2x1ZGUiIGxpbmUuICBTbyB5b3UgdHlwZTogPgoKCWkgQ1RSTC1BCgpUaGUgcmVzdWx0IGlzIGFzIGZvbGxvd3M6CgoJI2luY2x1ZGUgImZpbGUuaCIgfgoJI2luY2x1ZGUgLyogTWFpbiBwcm9ncmFtIGJlZ2lucyAqLyB+CgpUaGUgIiNpbmNsdWRlICIgd2FzIGluc2VydGVkIGJlY2F1c2UgQ1RSTC1BIGluc2VydHMgdGhlIHRleHQgb2YgdGhlIHByZXZpb3VzCmluc2VydC4gIE5vdyB5b3UgdHlwZSAgIm1haW4uaCI8RW50ZXI+ICB0byBmaW5pc2ggdGhlIGxpbmU6CgoKCSNpbmNsdWRlICJmaWxlLmgiIH4KCSNpbmNsdWRlICJtYWluLmgiIH4KCS8qIE1haW4gcHJvZ3JhbSBiZWdpbnMgKi8gfgoKVGhlIENUUkwtQCBjb21tYW5kIGRvZXMgYSBDVFJMLUEgYW5kIHRoZW4gZXhpdHMgSW5zZXJ0IG1vZGUuICBUaGF0J3MgYSBxdWljawp3YXkgb2YgZG9pbmcgZXhhY3RseSB0aGUgc2FtZSBpbnNlcnRpb24gYWdhaW4uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKjI0LjUqCUNvcHlpbmcgZnJvbSBhbm90aGVyIGxpbmUKClRoZSBDVFJMLVkgY29tbWFuZCBpbnNlcnRzIHRoZSBjaGFyYWN0ZXIgYWJvdmUgdGhlIGN1cnNvci4gIFRoaXMgaXMgdXNlZnVsCndoZW4geW91IGFyZSBkdXBsaWNhdGluZyBhIHByZXZpb3VzIGxpbmUuICBGb3IgZXhhbXBsZSwgeW91IGhhdmUgdGhpcyBsaW5lIG9mCkMgY29kZToKCgliX2FycmF5W2ldLT5zX25leHQgPSBhX2FycmF5W2ldLT5zX25leHQ7IH4KCk5vdyB5b3UgbmVlZCB0byB0eXBlIHRoZSBzYW1lIGxpbmUsIGJ1dCB3aXRoICJzX3ByZXYiIGluc3RlYWQgb2YgInNfbmV4dCIuClN0YXJ0IHRoZSBuZXcgbGluZSwgYW5kIHByZXNzIENUUkwtWSAxNCB0aW1lcywgdW50aWwgeW91IGFyZSBhdCB0aGUgIm4iIG9mCiJuZXh0IjoKCgliX2FycmF5W2ldLT5zX25leHQgPSBhX2FycmF5W2ldLT5zX25leHQ7IH4KCWJfYXJyYXlbaV0tPnNfIH4KCk5vdyB5b3UgdHlwZSAicHJldiI6CgoJYl9hcnJheVtpXS0+c19uZXh0ID0gYV9hcnJheVtpXS0+c19uZXh0OyB+CgliX2FycmF5W2ldLT5zX3ByZXYgfgoKQ29udGludWUgcHJlc3NpbmcgQ1RSTC1ZIHVudGlsIHRoZSBmb2xsb3dpbmcgIm5leHQiOgoKCWJfYXJyYXlbaV0tPnNfbmV4dCA9IGFfYXJyYXlbaV0tPnNfbmV4dDsgfgoJYl9hcnJheVtpXS0+c19wcmV2ID0gYV9hcnJheVtpXS0+c18gfgoKTm93IHR5cGUgInByZXY7IiB0byBmaW5pc2ggaXQgb2ZmLgoKVGhlIENUUkwtRSBjb21tYW5kIGFjdHMgbGlrZSBDVFJMLVkgZXhjZXB0IGl0IGluc2VydHMgdGhlIGNoYXJhY3RlciBiZWxvdyB0aGUKY3Vyc29yLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioyNC42KglJbnNlcnRpbmcgYSByZWdpc3RlcgoKVGhlIGNvbW1hbmQgQ1RSTC1SIHtyZWdpc3Rlcn0gaW5zZXJ0cyB0aGUgY29udGVudHMgb2YgdGhlIHJlZ2lzdGVyLiAgVGhpcyBpcwp1c2VmdWwgdG8gYXZvaWQgaGF2aW5nIHRvIHR5cGUgYSBsb25nIHdvcmQuICBGb3IgZXhhbXBsZSwgeW91IG5lZWQgdG8gdHlwZQp0aGlzOgoKCXIgPSBWZXJ5TG9uZ0Z1bmN0aW9uKGEpICsgVmVyeUxvbmdGdW5jdGlvbihiKSArIFZlcnlMb25nRnVuY3Rpb24oYykgfgoKVGhlIGZ1bmN0aW9uIG5hbWUgaXMgZGVmaW5lZCBpbiBhIGRpZmZlcmVudCBmaWxlLiAgRWRpdCB0aGF0IGZpbGUgYW5kIG1vdmUgdGhlCmN1cnNvciBvbiB0b3Agb2YgdGhlIGZ1bmN0aW9uIG5hbWUgdGhlcmUsIGFuZCB5YW5rIGl0IGludG8gcmVnaXN0ZXIgdjogPgoKCSJ2eWl3CgoidiBpcyB0aGUgcmVnaXN0ZXIgc3BlY2lmaWNhdGlvbiwgInlpdyIgaXMgeWFuay1pbm5lci13b3JkLiAgTm93IGVkaXQgdGhlIGZpbGUKd2hlcmUgdGhlIG5ldyBsaW5lIGlzIHRvIGJlIGluc2VydGVkLCBhbmQgdHlwZSB0aGUgZmlyc3QgbGV0dGVyczoKCglyID0gfgoKTm93IHVzZSBDVFJMLVIgdiB0byBpbnNlcnQgdGhlIGZ1bmN0aW9uIG5hbWU6CgoJciA9IFZlcnlMb25nRnVuY3Rpb24gfgoKWW91IGNvbnRpbnVlIHRvIHR5cGUgdGhlIGNoYXJhY3RlcnMgaW4gYmV0d2VlbiB0aGUgZnVuY3Rpb24gbmFtZSwgYW5kIHVzZQpDVFJMLVIgdiB0d28gdGltZXMgbW9yZS4KICAgWW91IGNvdWxkIGhhdmUgZG9uZSB0aGUgc2FtZSB3aXRoIGNvbXBsZXRpb24uICBVc2luZyBhIHJlZ2lzdGVyIGlzIHVzZWZ1bAp3aGVuIHRoZXJlIGFyZSBtYW55IHdvcmRzIHRoYXQgc3RhcnQgd2l0aCB0aGUgc2FtZSBjaGFyYWN0ZXJzLgoKSWYgdGhlIHJlZ2lzdGVyIGNvbnRhaW5zIGNoYXJhY3RlcnMgc3VjaCBhcyA8QlM+IG9yIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycywKdGhleSBhcmUgaW50ZXJwcmV0ZWQgYXMgaWYgdGhleSBoYWQgYmVlbiB0eXBlZCBmcm9tIHRoZSBrZXlib2FyZC4gIElmIHlvdSBkbwpub3Qgd2FudCB0aGlzIHRvIGhhcHBlbiAoeW91IHJlYWxseSB3YW50IHRoZSA8QlM+IHRvIGJlIGluc2VydGVkIGluIHRoZSB0ZXh0KSwKdXNlIHRoZSBjb21tYW5kIENUUkwtUiBDVFJMLVIge3JlZ2lzdGVyfS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqMjQuNyoJQWJicmV2aWF0aW9ucwoKQW4gYWJicmV2aWF0aW9uIGlzIGEgc2hvcnQgd29yZCB0aGF0IHRha2VzIHRoZSBwbGFjZSBvZiBhIGxvbmcgb25lLiAgRm9yCmV4YW1wbGUsICJhZCIgc3RhbmRzIGZvciAiYWR2ZXJ0aXNlbWVudCIuICBWaW0gZW5hYmxlcyB5b3UgdG8gdHlwZSBhbgphYmJyZXZpYXRpb24gYW5kIHRoZW4gd2lsbCBhdXRvbWF0aWNhbGx5IGV4cGFuZCBpdCBmb3IgeW91LgogICBUbyB0ZWxsIFZpbSB0byBleHBhbmQgImFkIiBpbnRvICJhZHZlcnRpc2VtZW50IiBldmVyeSB0aW1lIHlvdSBpbnNlcnQgaXQsCnVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KCgk6aWFiYnJldiBhZCBhZHZlcnRpc2VtZW50CgpOb3csIHdoZW4geW91IHR5cGUgImFkIiwgdGhlIHdob2xlIHdvcmQgImFkdmVydGlzZW1lbnQiIHdpbGwgYmUgaW5zZXJ0ZWQgaW50bwp0aGUgdGV4dC4gIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IHR5cGluZyBhIGNoYXJhY3RlciB0aGF0IGNhbid0IGJlIHBhcnQgb2YgYQp3b3JkLCBmb3IgZXhhbXBsZSBhIHNwYWNlOgoKCVdoYXQgSXMgRW50ZXJlZAkJV2hhdCBZb3UgU2VlCglJIHNhdyB0aGUgYQkJSSBzYXcgdGhlIGEgfgoJSSBzYXcgdGhlIGFkCQlJIHNhdyB0aGUgYWQgfgoJSSBzYXcgdGhlIGFkPFNwYWNlPglJIHNhdyB0aGUgYWR2ZXJ0aXNlbWVudDxTcGFjZT4gfgoKVGhlIGV4cGFuc2lvbiBkb2Vzbid0IGhhcHBlbiB3aGVuIHR5cGluZyBqdXN0ICJhZCIuICBUaGF0IGFsbG93cyB5b3UgdG8gdHlwZSBhCndvcmQgbGlrZSAiYWRkIiwgd2hpY2ggd2lsbCBub3QgZ2V0IGV4cGFuZGVkLiAgT25seSB3aG9sZSB3b3JkcyBhcmUgY2hlY2tlZApmb3IgYWJicmV2aWF0aW9ucy4KCgpBQkJSRVZJQVRJTkcgU0VWRVJBTCBXT1JEUwoKSXQgaXMgcG9zc2libGUgdG8gZGVmaW5lIGFuIGFiYnJldmlhdGlvbiB0aGF0IHJlc3VsdHMgaW4gbXVsdGlwbGUgd29yZHMuICBGb3IKZXhhbXBsZSwgdG8gZGVmaW5lICJKQiIgYXMgIkphY2sgQmVubnkiLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CgoJOmlhYmJyZXYgSkIgSmFjayBCZW5ueQoKQXMgYSBwcm9ncmFtbWVyLCBJIHVzZSB0d28gcmF0aGVyIHVudXN1YWwgYWJicmV2aWF0aW9uczogPgoKCTppYWJicmV2ICNiIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgk6aWFiYnJldiAjZSA8U3BhY2U+KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KClRoZXNlIGFyZSB1c2VkIGZvciBjcmVhdGluZyBib3hlZCBjb21tZW50cy4gIFRoZSBjb21tZW50IHN0YXJ0cyB3aXRoICNiLCB3aGljaApkcmF3cyB0aGUgdG9wIGxpbmUuICBJIHRoZW4gdHlwZSB0aGUgY29tbWVudCB0ZXh0IGFuZCB1c2UgI2UgdG8gZHJhdyB0aGUKYm90dG9tIGxpbmUuCiAgIE5vdGljZSB0aGF0IHRoZSAjZSBhYmJyZXZpYXRpb24gYmVnaW5zIHdpdGggYSBzcGFjZS4gIEluIG90aGVyIHdvcmRzLCB0aGUKZmlyc3QgdHdvIGNoYXJhY3RlcnMgYXJlIHNwYWNlLXN0YXIuICBVc3VhbGx5IFZpbSBpZ25vcmVzIHNwYWNlcyBiZXR3ZWVuIHRoZQphYmJyZXZpYXRpb24gYW5kIHRoZSBleHBhbnNpb24uICBUbyBhdm9pZCB0aGF0IHByb2JsZW0sIEkgc3BlbGwgc3BhY2UgYXMgc2V2ZW4KY2hhcmFjdGVyczogPCwgUywgcCwgYSwgYywgZSwgPi4KCglOb3RlOgoJIjppYWJicmV2IiBpcyBhIGxvbmcgd29yZCB0byB0eXBlLiAgIjppYWIiIHdvcmtzIGp1c3QgYXMgd2VsbC4KCVRoYXQncyBhYmJyZXZpYXRpbmcgdGhlIGFiYnJldmlhdGUgY29tbWFuZCEKCgpGSVhJTkcgVFlQSU5HIE1JU1RBS0VTCgpJdCdzIHZlcnkgY29tbW9uIHRvIG1ha2UgdGhlIHNhbWUgdHlwaW5nIG1pc3Rha2UgZXZlcnkgdGltZS4gIEZvciBleGFtcGxlLAp0eXBpbmcgInRlaCIgaW5zdGVhZCBvZiAidGhlIi4gIFlvdSBjYW4gZml4IHRoaXMgd2l0aCBhbiBhYmJyZXZpYXRpb246ID4KCgk6YWJicmV2aWF0ZSB0ZWggdGhlCgpZb3UgY2FuIGFkZCBhIHdob2xlIGxpc3Qgb2YgdGhlc2UuICBBZGQgb25lIGVhY2ggdGltZSB5b3UgZGlzY292ZXIgYSBjb21tb24KbWlzdGFrZS4KCgpMSVNUSU5HIEFCQlJFVklBVElPTlMKClRoZSAiOmFiYnJldmlhdGUiIGNvbW1hbmQgbGlzdHMgdGhlIGFiYnJldmlhdGlvbnM6CgoJOmFiYnJldmlhdGUKCWkgICNlCQkgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCglpICAjYgkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCglpICBKQgkJIEphY2sgQmVubnkKCWkgIGFkCQkgYWR2ZXJ0aXNlbWVudAoJISAgdGVoCQkgdGhlCgpUaGUgImkiIGluIHRoZSBmaXJzdCBjb2x1bW4gaW5kaWNhdGVzIEluc2VydCBtb2RlLiAgVGhlc2UgYWJicmV2aWF0aW9ucyBhcmUKb25seSBhY3RpdmUgaW4gSW5zZXJ0IG1vZGUuICBPdGhlciBwb3NzaWJsZSBjaGFyYWN0ZXJzIGFyZToKCgljCUNvbW1hbmQtbGluZSBtb2RlCQkJOmNhYmJyZXYKCSEJYm90aCBJbnNlcnQgYW5kIENvbW1hbmQtbGluZSBtb2RlCTphYmJyZXZpYXRlCgpTaW5jZSBhYmJyZXZpYXRpb25zIGFyZSBub3Qgb2Z0ZW4gdXNlZnVsIGluIENvbW1hbmQtbGluZSBtb2RlLCB5b3Ugd2lsbCBtb3N0bHkKdXNlIHRoZSAiOmlhYmJyZXYiIGNvbW1hbmQuICBUaGF0IGF2b2lkcywgZm9yIGV4YW1wbGUsIHRoYXQgImFkIiBnZXRzIGV4cGFuZGVkCndoZW4gdHlwaW5nIGEgY29tbWFuZCBsaWtlOiA+CgoJOmVkaXQgYWQKCgpERUxFVElORyBBQkJSRVZJQVRJT05TCgpUbyBnZXQgcmlkIG9mIGFuIGFiYnJldmlhdGlvbiwgdXNlIHRoZSAiOnVuYWJicmV2aWF0ZSIgY29tbWFuZC4gIFN1cHBvc2UgeW91CmhhdmUgdGhlIGZvbGxvd2luZyBhYmJyZXZpYXRpb246ID4KCgk6YWJicmV2aWF0ZSBAZiBmcmVzaAoKWW91IGNhbiByZW1vdmUgaXQgd2l0aCB0aGlzIGNvbW1hbmQ6ID4KCgk6dW5hYmJyZXZpYXRlIEBmCgpXaGlsZSB5b3UgdHlwZSB0aGlzLCB5b3Ugd2lsbCBub3RpY2UgdGhhdCBAZiBpcyBleHBhbmRlZCB0byAiZnJlc2giLiAgRG9uJ3QKd29ycnkgYWJvdXQgdGhpcywgVmltIHVuZGVyc3RhbmRzIGl0IGFueXdheSAoZXhjZXB0IHdoZW4geW91IGhhdmUgYW4KYWJicmV2aWF0aW9uIGZvciAiZnJlc2giLCBidXQgdGhhdCdzIHZlcnkgdW5saWtlbHkpLgogICBUbyByZW1vdmUgYWxsIHRoZSBhYmJyZXZpYXRpb25zOiA+CgoJOmFiY2xlYXIKCiI6dW5hYmJyZXZpYXRlIiBhbmQgIjphYmNsZWFyIiBhbHNvIGNvbWUgaW4gdGhlIHZhcmlhbnRzIGZvciBJbnNlcnQgbW9kZQooIjppdW5hYmJyZXZpYXRlIGFuZCAiOmlhYmNsZWFyIikgYW5kIENvbW1hbmQtbGluZSBtb2RlICgiOmN1bmFiYnJldmlhdGUiIGFuZAoiOmNhYmNsZWFyIikuCgoKUkVNQVBQSU5HIEFCQlJFVklBVElPTlMKClRoZXJlIGlzIG9uZSB0aGluZyB0byB3YXRjaCBvdXQgZm9yIHdoZW4gZGVmaW5pbmcgYW4gYWJicmV2aWF0aW9uOiBUaGUKcmVzdWx0aW5nIHN0cmluZyBzaG91bGQgbm90IGJlIG1hcHBlZC4gIEZvciBleGFtcGxlOiA+CgoJOmFiYnJldmlhdGUgQGEgYWRkZXIKCTppbWFwIGRkIGRpc2stZG9vcgoKV2hlbiB5b3Ugbm93IHR5cGUgQGEsIHlvdSB3aWxsIGdldCAiYWRpc2stZG9vcmVyIi4gIFRoYXQncyBub3Qgd2hhdCB5b3Ugd2FudC4KVG8gYXZvaWQgdGhpcywgdXNlIHRoZSAiOm5vcmVhYmJyZXYiIGNvbW1hbmQuICBJdCBkb2VzIHRoZSBzYW1lIGFzCiI6YWJicmV2aWF0ZSIsIGJ1dCBhdm9pZHMgdGhhdCB0aGUgcmVzdWx0aW5nIHN0cmluZyBpcyB1c2VkIGZvciBtYXBwaW5nczogPgoKCTpub3JlYWJicmV2IEBhIGFkZGVyCgpGb3J0dW5hdGVseSwgaXQncyB1bmxpa2VseSB0aGF0IHRoZSByZXN1bHQgb2YgYW4gYWJicmV2aWF0aW9uIGlzIG1hcHBlZC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqMjQuOCoJRW50ZXJpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzCgpUaGUgQ1RSTC1WIGNvbW1hbmQgaXMgdXNlZCB0byBpbnNlcnQgdGhlIG5leHQgY2hhcmFjdGVyIGxpdGVyYWxseS4gIEluIG90aGVyCndvcmRzLCBhbnkgc3BlY2lhbCBtZWFuaW5nIHRoZSBjaGFyYWN0ZXIgaGFzLCBpdCB3aWxsIGJlIGlnbm9yZWQuICBGb3IKZXhhbXBsZTogPgoKCUNUUkwtViA8RXNjPgoKSW5zZXJ0cyBhbiBlc2NhcGUgY2hhcmFjdGVyLiAgVGh1cyB5b3UgZG9uJ3QgbGVhdmUgSW5zZXJ0IG1vZGUuICAoRG9uJ3QgdHlwZQp0aGUgc3BhY2UgYWZ0ZXIgQ1RSTC1WLCBpdCdzIG9ubHkgdG8gbWFrZSB0aGlzIGVhc2llciB0byByZWFkKS4KCglOb3RlOgoJT24gTVMtV2luZG93cyBDVFJMLVYgaXMgdXNlZCB0byBwYXN0ZSB0ZXh0LiAgVXNlIENUUkwtUSBpbnN0ZWFkIG9mCglDVFJMLVYuICBPbiBVbml4LCBvbiB0aGUgb3RoZXIgaGFuZCwgQ1RSTC1RIGRvZXMgbm90IHdvcmsgb24gc29tZQoJdGVybWluYWxzLCBiZWNhdXNlIGl0IGhhcyBhIHNwZWNpYWwgbWVhbmluZy4KCllvdSBjYW4gYWxzbyB1c2UgdGhlIGNvbW1hbmQgQ1RSTC1WIHtkaWdpdHN9IHRvIGluc2VydCBhIGNoYXJhY3RlciB3aXRoIHRoZQpkZWNpbWFsIG51bWJlciB7ZGlnaXRzfS4gIEZvciBleGFtcGxlLCB0aGUgY2hhcmFjdGVyIG51bWJlciAxMjcgaXMgdGhlIDxEZWw+CmNoYXJhY3RlciAoYnV0IG5vdCBuZWNlc3NhcmlseSB0aGUgPERlbD4ga2V5ISkuICBUbyBpbnNlcnQgPERlbD4gdHlwZTogPgoKCUNUUkwtViAxMjcKCllvdSBjYW4gZW50ZXIgY2hhcmFjdGVycyB1cCB0byAyNTUgdGhpcyB3YXkuICBXaGVuIHlvdSB0eXBlIGZld2VyIHRoYW4gdHdvCmRpZ2l0cywgYSBub24tZGlnaXQgd2lsbCB0ZXJtaW5hdGUgdGhlIGNvbW1hbmQuICBUbyBhdm9pZCB0aGUgbmVlZCBvZiB0eXBpbmcgYQpub24tZGlnaXQsIHByZXBlbmQgb25lIG9yIHR3byB6ZXJvcyB0byBtYWtlIHRocmVlIGRpZ2l0cy4KICAgQWxsIHRoZSBuZXh0IGNvbW1hbmRzIGluc2VydCBhIDxUYWI+IGFuZCB0aGVuIGEgZG90OgoKCUNUUkwtViA5LgoJQ1RSTC1WIDA5LgoJQ1RSTC1WIDAwOS4KClRvIGVudGVyIGEgY2hhcmFjdGVyIGluIGhleGFkZWNpbWFsLCB1c2UgYW4gIngiIGFmdGVyIHRoZSBDVFJMLVY6ID4KCglDVFJMLVYgeDdmCgpUaGlzIGFsc28gZ29lcyB1cCB0byBjaGFyYWN0ZXIgMjU1IChDVFJMLVYgeGZmKS4gIFlvdSBjYW4gdXNlICJvIiB0byB0eXBlIGEKY2hhcmFjdGVyIGFzIGFuIG9jdGFsIG51bWJlciBhbmQgdHdvIG1vcmUgbWV0aG9kcyBhbGxvdyB5b3UgdG8gdHlwZSB1cCB0bwphIDE2IGJpdCBhbmQgYSAzMiBiaXQgbnVtYmVyIChlLmcuLCBmb3IgYSBVbmljb2RlIGNoYXJhY3Rlcik6ID4KCglDVFJMLVYgbzEyMwoJQ1RSTC1WIHUxMjM0CglDVFJMLVYgVTEyMzQ1Njc4Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKjI0LjkqCURpZ3JhcGhzCgpTb21lIGNoYXJhY3RlcnMgYXJlIG5vdCBvbiB0aGUga2V5Ym9hcmQuICBGb3IgZXhhbXBsZSwgdGhlIGNvcHlyaWdodCBjaGFyYWN0ZXIKKKkpLiAgVG8gdHlwZSB0aGVzZSBjaGFyYWN0ZXJzIGluIFZpbSwgeW91IHVzZSBkaWdyYXBocywgd2hlcmUgdHdvIGNoYXJhY3RlcnMKcmVwcmVzZW50IG9uZS4gIFRvIGVudGVyIGEgqSwgZm9yIGV4YW1wbGUsIHlvdSBwcmVzcyB0aHJlZSBrZXlzOiA+CgoJQ1RSTC1LIENvCgpUbyBmaW5kIG91dCB3aGF0IGRpZ3JhcGhzIGFyZSBhdmFpbGFibGUsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KCgk6ZGlncmFwaHMKClZpbSB3aWxsIGRpc3BsYXkgdGhlIGRpZ3JhcGggdGFibGUuICBIZXJlIGFyZSB0aHJlZSBsaW5lcyBvZiBpdDoKCiAgQUMgfl8gMTU5ICBOUyB8ICAxNjAgICFJIKEgIDE2MSAgQ3QgoiAgMTYyICBQZCCjICAxNjMgIEN1IKQgIDE2NCAgWWUgpSAgMTY1IH4KICBCQiCmICAxNjYgIFNFIKcgIDE2NyAgJzogqCAgMTY4ICBDbyCpICAxNjkgIC1hIKogIDE3MCAgPDwgqyAgMTcxICBOTyCsICAxNzIgfgogIC0tIK0gIDE3MyAgUmcgriAgMTc0ICAnbSCvICAxNzUgIERHILAgIDE3NiAgKy0gsSAgMTc3ICAyUyCyICAxNzggIDNTILMgIDE3OSB+CgpUaGlzIHNob3dzLCBmb3IgZXhhbXBsZSwgdGhhdCB0aGUgZGlncmFwaCB5b3UgZ2V0IGJ5IHR5cGluZyBDVFJMLUsgUGQgaXMgdGhlCmNoYXJhY3RlciAooykuICBUaGlzIGlzIGNoYXJhY3RlciBudW1iZXIgMTYzIChkZWNpbWFsKS4KICAgUGQgaXMgc2hvcnQgZm9yIFBvdW5kLiAgTW9zdCBkaWdyYXBocyBhcmUgc2VsZWN0ZWQgdG8gZ2l2ZSB5b3UgYSBoaW50IGFib3V0CnRoZSBjaGFyYWN0ZXIgdGhleSB3aWxsIHByb2R1Y2UuICBJZiB5b3UgbG9vayB0aHJvdWdoIHRoZSBsaXN0IHlvdSB3aWxsCnVuZGVyc3RhbmQgdGhlIGxvZ2ljLgogICBZb3UgY2FuIGV4Y2hhbmdlIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNoYXJhY3RlciwgaWYgdGhlcmUgaXMgbm8gZGlncmFwaCBmb3IKdGhhdCBjb21iaW5hdGlvbi4gIFRodXMgQ1RSTC1LIGRQIGFsc28gd29ya3MuICBTaW5jZSB0aGVyZSBpcyBubyBkaWdyYXBoIGZvcgoiZFAiIFZpbSB3aWxsIGFsc28gc2VhcmNoIGZvciBhICJQZCIgZGlncmFwaC4KCglOb3RlOgoJVGhlIGRpZ3JhcGhzIGRlcGVuZCBvbiB0aGUgY2hhcmFjdGVyIHNldCB0aGF0IFZpbSBhc3N1bWVzIHlvdSBhcmUKCXVzaW5nLiAgT24gTVMtRE9TIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIE1TLVdpbmRvd3MuICBBbHdheXMgdXNlCgkiOmRpZ3JhcGhzIiB0byBmaW5kIG91dCB3aGljaCBkaWdyYXBocyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZS4KCllvdSBjYW4gZGVmaW5lIHlvdXIgb3duIGRpZ3JhcGhzLiAgRXhhbXBsZTogPgoKCTpkaWdyYXBoIGEiIOQKClRoaXMgZGVmaW5lcyB0aGF0IENUUkwtSyBhIiBpbnNlcnRzIGFuIOQgY2hhcmFjdGVyLiAgWW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlCmNoYXJhY3RlciB3aXRoIGEgZGVjaW1hbCBudW1iZXIuICBUaGlzIGRlZmluZXMgdGhlIHNhbWUgZGlncmFwaDogPgoKCTpkaWdyYXBoIGEiIDIyOAoKTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBkaWdyYXBocyBoZXJlOiB8ZGlncmFwaHN8CiAgIEFub3RoZXIgd2F5IHRvIGluc2VydCBzcGVjaWFsIGNoYXJhY3RlcnMgaXMgd2l0aCBhIGtleW1hcC4gIE1vcmUgYWJvdXQgdGhhdApoZXJlOiB8NDUuNXwKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqMjQuMTAqCU5vcm1hbCBtb2RlIGNvbW1hbmRzCgpJbnNlcnQgbW9kZSBvZmZlcnMgYSBsaW1pdGVkIG51bWJlciBvZiBjb21tYW5kcy4gIEluIE5vcm1hbCBtb2RlIHlvdSBoYXZlIG1hbnkKbW9yZS4gIFdoZW4geW91IHdhbnQgdG8gdXNlIG9uZSwgeW91IHVzdWFsbHkgbGVhdmUgSW5zZXJ0IG1vZGUgd2l0aCA8RXNjPiwKZXhlY3V0ZSB0aGUgTm9ybWFsIG1vZGUgY29tbWFuZCwgYW5kIHJlLWVudGVyIEluc2VydCBtb2RlIHdpdGggImkiIG9yICJhIi4KICAgVGhlcmUgaXMgYSBxdWlja2VyIHdheS4gIFdpdGggQ1RSTC1PIHtjb21tYW5kfSB5b3UgY2FuIGV4ZWN1dGUgYW55IE5vcm1hbAptb2RlIGNvbW1hbmQgZnJvbSBJbnNlcnQgbW9kZS4gIEZvciBleGFtcGxlLCB0byBkZWxldGUgZnJvbSB0aGUgY3Vyc29yIHRvIHRoZQplbmQgb2YgdGhlIGxpbmU6ID4KCglDVFJMLU8gRAoKWW91IGNhbiBleGVjdXRlIG9ubHkgb25lIE5vcm1hbCBtb2RlIGNvbW1hbmQgdGhpcyB3YXkuICBCdXQgeW91IGNhbiBzcGVjaWZ5IGEKcmVnaXN0ZXIgb3IgYSBjb3VudC4gIEEgbW9yZSBjb21wbGljYXRlZCBleGFtcGxlOiA+CgoJQ1RSTC1PICJnM2R3CgpUaGlzIGRlbGV0ZXMgdXAgdG8gdGhlIHRoaXJkIHdvcmQgaW50byByZWdpc3RlciBnLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpOZXh0IGNoYXB0ZXI6IHx1c3JfMjUudHh0fCAgRWRpdGluZyBmb3JtYXR0ZWQgdGV4dAoKQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6Cg==