KnVzcl8yNC50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjAuICBMYXN0IGNoYW5nZTogMjAwNiBBcHIgMjQKCgkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgoKCQkJICAgICBJbnNlcnRpbmcgcXVpY2tseQoKCldoZW4gZW50ZXJpbmcgdGV4dCwgVmltIG9mZmVycyB2YXJpb3VzIHdheXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Yga2V5c3Ryb2tlcwphbmQgYXZvaWQgdHlwaW5nIG1pc3Rha2VzLiAgVXNlIEluc2VydCBtb2RlIGNvbXBsZXRpb24gdG8gcmVwZWF0IHByZXZpb3VzbHkKdHlwZWQgd29yZHMuICBBYmJyZXZpYXRlIGxvbmcgd29yZHMgdG8gc2hvcnQgb25lcy4gIFR5cGUgY2hhcmFjdGVycyB0aGF0CmFyZW4ndCBvbiB5b3VyIGtleWJvYXJkLgoKfDI0LjF8CU1ha2luZyBjb3JyZWN0aW9ucwp8MjQuMnwJU2hvd2luZyBtYXRjaGVzCnwyNC4zfAlDb21wbGV0aW9uCnwyNC40fAlSZXBlYXRpbmcgYW4gaW5zZXJ0CnwyNC41fAlDb3B5aW5nIGZyb20gYW5vdGhlciBsaW5lCnwyNC42fAlJbnNlcnRpbmcgYSByZWdpc3Rlcgp8MjQuN3wJQWJicmV2aWF0aW9ucwp8MjQuOHwJRW50ZXJpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzCnwyNC45fAlEaWdyYXBocwp8MjQuMTB8CU5vcm1hbCBtb2RlIGNvbW1hbmRzCgogICAgIE5leHQgY2hhcHRlcjogfHVzcl8yNS50eHR8ICBFZGl0aW5nIGZvcm1hdHRlZCB0ZXh0CiBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzIzLnR4dHwgIEVkaXRpbmcgb3RoZXIgZmlsZXMKVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqMjQuMSoJTWFraW5nIGNvcnJlY3Rpb25zCgpUaGUgPEJTPiBrZXkgd2FzIGFscmVhZHkgbWVudGlvbmVkLiAgSXQgZGVsZXRlcyB0aGUgY2hhcmFjdGVyIGp1c3QgYmVmb3JlIHRoZQpjdXJzb3IuICBUaGUgPERlbD4ga2V5IGRvZXMgdGhlIHNhbWUgZm9yIHRoZSBjaGFyYWN0ZXIgdW5kZXIgKGFmdGVyKSB0aGUKY3Vyc29yLgogICBXaGVuIHlvdSB0eXBlZCBhIHdob2xlIHdvcmQgd3JvbmcsIHVzZSBDVFJMLVc6CgoJVGhlIGhvcnNlIGhhZCBmYWxsZW4gdG8gdGhlIHNreSB+CgkJCQkgICAgICAgQ1RSTC1XCglUaGUgaG9yc2UgaGFkIGZhbGxlbiB0byB0aGUgfgoKSWYgeW91IHJlYWxseSBtZXNzZWQgdXAgYSBsaW5lIGFuZCB3YW50IHRvIHN0YXJ0IG92ZXIsIHVzZSBDVFJMLVUgdG8gZGVsZXRlCml0LiAgVGhpcyBrZWVwcyB0aGUgdGV4dCBhZnRlciB0aGUgY3Vyc29yIGFuZCB0aGUgaW5kZW50LiAgT25seSB0aGUgdGV4dCBmcm9tCnRoZSBmaXJzdCBub24tYmxhbmsgdG8gdGhlIGN1cnNvciBpcyBkZWxldGVkLiAgV2l0aCB0aGUgY3Vyc29yIG9uIHRoZSAiZiIgb2YKImZhbGxlbiIgaW4gdGhlIG5leHQgbGluZSBwcmVzc2luZyBDVFJMLVUgZG9lcyB0aGlzOgoKCVRoZSBob3JzZSBoYWQgZmFsbGVuIHRvIHRoZSB+CgkJICAgICAgQ1RSTC1VCglmYWxsZW4gdG8gdGhlIH4KCldoZW4geW91IHNwb3QgYSBtaXN0YWtlIGEgZmV3IHdvcmRzIGJhY2ssIHlvdSBuZWVkIHRvIG1vdmUgdGhlIGN1cnNvciB0aGVyZSB0bwpjb3JyZWN0IGl0LiAgRm9yIGV4YW1wbGUsIHlvdSB0eXBlZCB0aGlzOgoKCVRoZSBob3JzZSBoYWQgZm9sbGVuIHRvIHRoZSBncm91bmQgfgoKWW91IG5lZWQgdG8gY2hhbmdlICJmb2xsZW4iIHRvICJmYWxsZW4iLiAgV2l0aCB0aGUgY3Vyc29yIGF0IHRoZSBlbmQsIHlvdQp3b3VsZCB0eXBlIHRoaXMgdG8gY29ycmVjdCBpdDogPgoKCQkJCQk8RXNjPjRibHJhQQoKPAlnZXQgb3V0IG9mIEluc2VydCBtb2RlCQk8RXNjPgoJZm91ciB3b3JkcyBiYWNrCQkJICAgICA0YgoJbW92ZSBvbiB0b3Agb2YgdGhlICJvIgkJICAgICAgIGwKCXJlcGxhY2Ugd2l0aCAiYSIJCQlyYQoJcmVzdGFydCBJbnNlcnQgbW9kZQkJCSAgQQoKQW5vdGhlciB3YXkgdG8gZG8gdGhpczogPgoKCQk8Qy1MZWZ0PjxDLUxlZnQ+PEMtTGVmdD48Qy1MZWZ0PjxSaWdodD48RGVsPmE8RW5kPgoKPAlmb3VyIHdvcmRzIGJhY2sJCSAgICAgPEMtTGVmdD48Qy1MZWZ0PjxDLUxlZnQ+PEMtTGVmdD4KCW1vdmUgb24gdG9wIG9mIHRoZSAibyIJCQk8UmlnaHQ+CglkZWxldGUgdGhlICJvIgkJCQkgICAgICAgPERlbD4KCWluc2VydCBhbiAiYSIJCQkJCSAgICBhCglnbyB0byBlbmQgb2YgdGhlIGxpbmUJCQkJICAgICA8RW5kPgoKVGhpcyB1c2VzIHNwZWNpYWwga2V5cyB0byBtb3ZlIGFyb3VuZCwgd2hpbGUgcmVtYWluaW5nIGluIEluc2VydCBtb2RlLiAgVGhpcwpyZXNlbWJsZXMgd2hhdCB5b3Ugd291bGQgZG8gaW4gYSBtb2RlbGVzcyBlZGl0b3IuICBJdCdzIGVhc2llciB0byByZW1lbWJlciwKYnV0IHRha2VzIG1vcmUgdGltZSAoeW91IGhhdmUgdG8gbW92ZSB5b3VyIGhhbmQgZnJvbSB0aGUgbGV0dGVycyB0byB0aGUgY3Vyc29yCmtleXMsIGFuZCB0aGUgPEVuZD4ga2V5IGlzIGhhcmQgdG8gcHJlc3Mgd2l0aG91dCBsb29raW5nIGF0IHRoZSBrZXlib2FyZCkuCiAgIFRoZXNlIHNwZWNpYWwga2V5cyBhcmUgbW9zdCB1c2VmdWwgd2hlbiB3cml0aW5nIGEgbWFwcGluZyB0aGF0IGRvZXNuJ3QKbGVhdmUgSW5zZXJ0IG1vZGUuICBUaGUgZXh0cmEgdHlwaW5nIGRvZXNuJ3QgbWF0dGVyIHRoZW4uCiAgIEFuIG92ZXJ2aWV3IG9mIHRoZSBrZXlzIHlvdSBjYW4gdXNlIGluIEluc2VydCBtb2RlOgoKCTxDLUhvbWU+CXRvIHN0YXJ0IG9mIHRoZSBmaWxlCgk8UGFnZVVwPglhIHdob2xlIHNjcmVlbmZ1bCB1cAoJPEhvbWU+CQl0byBzdGFydCBvZiBsaW5lCgk8Uy1MZWZ0PglvbmUgd29yZCBsZWZ0Cgk8Qy1MZWZ0PglvbmUgd29yZCBsZWZ0Cgk8Uy1SaWdodD4Jb25lIHdvcmQgcmlnaHQKCTxDLVJpZ2h0PglvbmUgd29yZCByaWdodAoJPEVuZD4JCXRvIGVuZCBvZiB0aGUgbGluZQoJPFBhZ2VEb3duPglhIHdob2xlIHNjcmVlbmZ1bCBkb3duCgk8Qy1FbmQ+CQl0byBlbmQgb2YgdGhlIGZpbGUKClRoZXJlIGFyZSBhIGZldyBtb3JlLCBzZWUgfGlucy1zcGVjaWFsLXNwZWNpYWx8LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioyNC4yKglTaG93aW5nIG1hdGNoZXMKCldoZW4geW91IHR5cGUgYSApIGl0IHdvdWxkIGJlIG5pY2UgdG8gc2VlIHdpdGggd2hpY2ggKCBpdCBtYXRjaGVzLiAgVG8gbWFrZQpWaW0gZG8gdGhhdCB1c2UgdGhpcyBjb21tYW5kOiA+CgoJOnNldCBzaG93bWF0Y2gKCldoZW4geW91IG5vdyB0eXBlIGEgdGV4dCBsaWtlICIoZXhhbXBsZSkiLCBhcyBzb29uIGFzIHlvdSB0eXBlIHRoZSApIFZpbSB3aWxsCmJyaWVmbHkgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBtYXRjaGluZyAoLCBrZWVwIGl0IHRoZXJlIGZvciBoYWxmIGEgc2Vjb25kLAphbmQgbW92ZSBiYWNrIHRvIHdoZXJlIHlvdSB3ZXJlIHR5cGluZy4KICAgSW4gY2FzZSB0aGVyZSBpcyBubyBtYXRjaGluZyAoLCBWaW0gd2lsbCBiZWVwLiAgVGhlbiB5b3Uga25vdyB0aGF0IHlvdQptaWdodCBoYXZlIGZvcmdvdHRlbiB0aGUgKCBzb21ld2hlcmUsIG9yIHR5cGVkIGEgKSB0b28gbWFueS4KICAgVGhlIG1hdGNoIHdpbGwgYWxzbyBiZSBzaG93biBmb3IgW10gYW5kIHt9IHBhaXJzLiAgWW91IGRvbid0IGhhdmUgdG8gd2FpdAp3aXRoIHR5cGluZyB0aGUgbmV4dCBjaGFyYWN0ZXIsIGFzIHNvb24gYXMgVmltIHNlZXMgaXQgdGhlIGN1cnNvciB3aWxsIG1vdmUKYmFjayBhbmQgaW5zZXJ0aW5nIGNvbnRpbnVlcyBhcyBiZWZvcmUuCiAgIFlvdSBjYW4gY2hhbmdlIHRoZSB0aW1lIFZpbSB3YWl0cyB3aXRoIHRoZSAnbWF0Y2h0aW1lJyBvcHRpb24uICBGb3IKZXhhbXBsZSwgdG8gbWFrZSBWaW0gd2FpdCBvbmUgYW5kIGEgaGFsZiBzZWNvbmQ6ID4KCgk6c2V0IG1hdGNodGltZT0xNQoKVGhlIHRpbWUgaXMgc3BlY2lmaWVkIGluIHRlbnRocyBvZiBhIHNlY29uZC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqMjQuMyoJQ29tcGxldGlvbgoKVmltIGNhbiBhdXRvbWF0aWNhbGx5IGNvbXBsZXRlIHdvcmRzIG9uIGluc2VydGlvbi4gIFlvdSB0eXBlIHRoZSBmaXJzdCBwYXJ0IG9mCmEgd29yZCwgcHJlc3MgQ1RSTC1QLCBhbmQgVmltIGd1ZXNzZXMgdGhlIHJlc3QuCiAgIFN1cHBvc2UsIGZvciBleGFtcGxlLCB0aGF0IHlvdSBhcmUgY3JlYXRpbmcgYSBDIHByb2dyYW0gYW5kIHdhbnQgdG8gdHlwZSBpbgp0aGUgZm9sbG93aW5nOgoKCXRvdGFsID0gY2hfYXJyYXlbMF0gKyBjaF9hcnJheVsxXSArIGNoX2FycmF5WzJdOyB+CgpZb3Ugc3RhcnQgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZzoKCgl0b3RhbCA9IGNoX2FycmF5WzBdICsgY2hfIH4KCkF0IHRoaXMgcG9pbnQsIHlvdSB0ZWxsIFZpbSB0byBjb21wbGV0ZSB0aGUgd29yZCB1c2luZyB0aGUgY29tbWFuZCBDVFJMLVAuClZpbSBzZWFyY2hlcyBmb3IgYSB3b3JkIHRoYXQgc3RhcnRzIHdpdGggd2hhdCdzIGluIGZyb250IG9mIHRoZSBjdXJzb3IuICBJbgp0aGlzIGNhc2UsIGl0IGlzICJjaF8iLCB3aGljaCBtYXRjaGVzIHdpdGggdGhlIHdvcmQgY2hfYXJyYXkuICBTbyB0eXBpbmcKQ1RSTC1QIGdpdmVzIHlvdSB0aGUgZm9sbG93aW5nOgoKCXRvdGFsID0gY2hfYXJyYXlbMF0gKyBjaF9hcnJheSB+CgpBZnRlciBhIGxpdHRsZSBtb3JlIHR5cGluZywgeW91IGdldCB0aGlzIChlbmRpbmcgaW4gYSBzcGFjZSk6CgoJdG90YWwgPSBjaF9hcnJheVswXSArIGNoX2FycmF5WzFdICsgIH4KCklmIHlvdSBub3cgdHlwZSBDVFJMLVAgVmltIHdpbGwgc2VhcmNoIGFnYWluIGZvciBhIHdvcmQgdGhhdCBjb21wbGV0ZXMgdGhlCndvcmQgYmVmb3JlIHRoZSBjdXJzb3IuICBTaW5jZSB0aGVyZSBpcyBub3RoaW5nIGluIGZyb250IG9mIHRoZSBjdXJzb3IsIGl0CmZpbmRzIHRoZSBmaXJzdCB3b3JkIGJhY2t3YXJkcywgd2hpY2ggaXMgImNoX2FycmF5Ii4gIFR5cGluZyBDVFJMLVAgYWdhaW4KZ2l2ZXMgeW91IHRoZSBuZXh0IHdvcmQgdGhhdCBtYXRjaGVzLCBpbiB0aGlzIGNhc2UgInRvdGFsIi4gIEEgdGhpcmQgQ1RSTC1QCnNlYXJjaGVzIGZ1cnRoZXIgYmFjay4gIElmIHRoZXJlIGlzIG5vdGhpbmcgZWxzZSwgaXQgY2F1c2VzIHRoZSBlZGl0b3IgdG8gcnVuCm91dCBvZiB3b3Jkcywgc28gaXQgcmV0dXJucyB0byB0aGUgb3JpZ2luYWwgdGV4dCwgd2hpY2ggaXMgbm90aGluZy4gIEEgZm91cnRoCkNUUkwtUCBjYXVzZXMgdGhlIGVkaXRvciB0byBzdGFydCBvdmVyIGFnYWluIHdpdGggImNoX2FycmF5Ii4KClRvIHNlYXJjaCBmb3J3YXJkLCB1c2UgQ1RSTC1OLiAgU2luY2UgdGhlIHNlYXJjaCB3cmFwcyBhcm91bmQgdGhlIGVuZCBvZiB0aGUKZmlsZSwgQ1RSTC1OIGFuZCBDVFJMLVAgd2lsbCBmaW5kIHRoZSBzYW1lIG1hdGNoZXMsIGJ1dCBpbiBhIGRpZmZlcmVudApzZXF1ZW5jZS4gIEhpbnQ6IENUUkwtTiBpcyBOZXh0LW1hdGNoIGFuZCBDVFJMLVAgaXMgUHJldmlvdXMtbWF0Y2guCgpUaGUgVmltIGVkaXRvciBnb2VzIHRocm91Z2ggYSBsb3Qgb2YgZWZmb3J0IHRvIGZpbmQgd29yZHMgdG8gY29tcGxldGUuICBCeQpkZWZhdWx0LCBpdCBzZWFyY2hlcyB0aGUgZm9sbG93aW5nIHBsYWNlczoKCgkxLiBDdXJyZW50IGZpbGUKCTIuIEZpbGVzIGluIG90aGVyIHdpbmRvd3MKCTMuIE90aGVyIGxvYWRlZCBmaWxlcyAoaGlkZGVuIGJ1ZmZlcnMpCgk0LiBGaWxlcyB3aGljaCBhcmUgbm90IGxvYWRlZCAoaW5hY3RpdmUgYnVmZmVycykKCTUuIFRhZyBmaWxlcwoJNi4gQWxsIGZpbGVzICNpbmNsdWRlZCBieSB0aGUgY3VycmVudCBmaWxlCgoKT1BUSU9OUwoKWW91IGNhbiBjdXN0b21pemUgdGhlIHNlYXJjaCBvcmRlciB3aXRoIHRoZSAnY29tcGxldGUnIG9wdGlvbi4KClRoZSAnaWdub3JlY2FzZScgb3B0aW9uIGlzIHVzZWQuICBXaGVuIGl0IGlzIHNldCwgY2FzZSBkaWZmZXJlbmNlcyBhcmUgaWdub3JlZAp3aGVuIHNlYXJjaGluZyBmb3IgbWF0Y2hlcy4KCkEgc3BlY2lhbCBvcHRpb24gZm9yIGNvbXBsZXRpb24gaXMgJ2luZmVyY2FzZScuICBUaGlzIGlzIHVzZWZ1bCB0byBmaW5kCm1hdGNoZXMgd2hpbGUgaWdub3JpbmcgY2FzZSAoJ2lnbm9yZWNhc2UnIG11c3QgYmUgc2V0KSBidXQgc3RpbGwgdXNpbmcgdGhlCmNhc2Ugb2YgdGhlIHdvcmQgdHlwZWQgc28gZmFyLiAgVGh1cyBpZiB5b3UgdHlwZSAiRm9yIiBhbmQgVmltIGZpbmRzIGEgbWF0Y2gKImZvcnR1bmF0ZWx5IiwgaXQgd2lsbCByZXN1bHQgaW4gIkZvcnR1bmF0ZWx5Ii4KCgpDT01QTEVUSU5HIFNQRUNJRklDIElURU1TCgpJZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgbG9va2luZyBmb3IsIHlvdSBjYW4gdXNlIHRoZXNlIGNvbW1hbmRzIHRvIGNvbXBsZXRlCndpdGggYSBjZXJ0YWluIHR5cGUgb2YgaXRlbToKCglDVFJMLVggQ1RSTC1GCQlmaWxlIG5hbWVzCglDVFJMLVggQ1RSTC1MCQl3aG9sZSBsaW5lcwoJQ1RSTC1YIENUUkwtRAkJbWFjcm8gZGVmaW5pdGlvbnMgKGFsc28gaW4gaW5jbHVkZWQgZmlsZXMpCglDVFJMLVggQ1RSTC1JCQljdXJyZW50IGFuZCBpbmNsdWRlZCBmaWxlcwoJQ1RSTC1YIENUUkwtSwkJd29yZHMgZnJvbSBhIGRpY3Rpb25hcnkKCUNUUkwtWCBDVFJMLVQJCXdvcmRzIGZyb20gYSB0aGVzYXVydXMKCUNUUkwtWCBDVFJMLV0JCXRhZ3MKCUNUUkwtWCBDVFJMLVYJCVZpbSBjb21tYW5kIGxpbmUKCkFmdGVyIGVhY2ggb2YgdGhlbSBDVFJMLU4gY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgbmV4dCBtYXRjaCwgQ1RSTC1QIHRvIGZpbmQKdGhlIHByZXZpb3VzIG1hdGNoLgogICBNb3JlIGluZm9ybWF0aW9uIGZvciBlYWNoIG9mIHRoZXNlIGNvbW1hbmRzIGhlcmU6IHxpbnMtY29tcGxldGlvbnwuCgoKQ09NUExFVElORyBGSUxFIE5BTUVTCgpMZXQncyB0YWtlIENUUkwtWCBDVFJMLUYgYXMgYW4gZXhhbXBsZS4gIFRoaXMgd2lsbCBmaW5kIGZpbGUgbmFtZXMuICBJdCBzY2Fucwp0aGUgY3VycmVudCBkaXJlY3RvcnkgZm9yIGZpbGVzIGFuZCBkaXNwbGF5cyBlYWNoIG9uZSB0aGF0IG1hdGNoZXMgdGhlIHdvcmQgaW4KZnJvbnQgb2YgdGhlIGN1cnNvci4KICAgU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHRoYXQgeW91IGhhdmUgdGhlIGZvbGxvd2luZyBmaWxlcyBpbiB0aGUgY3VycmVudApkaXJlY3Rvcnk6CgoJbWFpbi5jICBzdWJfY291bnQuYyAgc3ViX2RvbmUuYyAgc3ViX2V4aXQuYwoKTm93IGVudGVyIEluc2VydCBtb2RlIGFuZCBzdGFydCB0eXBpbmc6CgoJVGhlIGV4aXQgY29kZSBpcyBpbiB0aGUgZmlsZSBzdWIgfgoKQXQgdGhpcyBwb2ludCwgeW91IGVudGVyIHRoZSBjb21tYW5kIENUUkwtWCBDVFJMLUYuICBWaW0gbm93IGNvbXBsZXRlcyB0aGUKY3VycmVudCB3b3JkICJzdWIiIGJ5IGxvb2tpbmcgYXQgdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFRoZQpmaXJzdCBtYXRjaCBpcyBzdWJfY291bnQuYy4gIFRoaXMgaXMgbm90IHRoZSBvbmUgeW91IHdhbnQsIHNvIHlvdSBtYXRjaCB0aGUKbmV4dCBmaWxlIGJ5IHR5cGluZyBDVFJMLU4uICBUaGlzIG1hdGNoIGlzIHN1Yl9kb25lLmMuICBUeXBpbmcgQ1RSTC1OIGFnYWluCnRha2VzIHlvdSB0byBzdWJfZXhpdC5jLiAgVGhlIHJlc3VsdHM6CgoJVGhlIGV4aXQgY29kZSBpcyBpbiB0aGUgZmlsZSBzdWJfZXhpdC5jIH4KCklmIHRoZSBmaWxlIG5hbWUgc3RhcnRzIHdpdGggLyAoVW5peCkgb3IgQzpcIChNUy1XaW5kb3dzKSB5b3UgY2FuIGZpbmQgYWxsCmZpbGVzIGluIHRoZSBmaWxlIHN5c3RlbS4gIEZvciBleGFtcGxlLCB0eXBlICIvdSIgYW5kIENUUkwtWCBDVFJMLUYuICBUaGlzCndpbGwgbWF0Y2ggIi91c3IiICh0aGlzIGlzIG9uIFVuaXgpOgoKCXRoZSBmaWxlIGlzIGZvdW5kIGluIC91c3IvIH4KCklmIHlvdSBub3cgcHJlc3MgQ1RSTC1OIHlvdSBnbyBiYWNrIHRvICIvdSIuICBJbnN0ZWFkLCB0byBhY2NlcHQgdGhlICIvdXNyLyIKYW5kIGdvIG9uZSBkaXJlY3RvcnkgbGV2ZWwgZGVlcGVyLCB1c2UgQ1RSTC1YIENUUkwtRiBhZ2FpbjoKCgl0aGUgZmlsZSBpcyBmb3VuZCBpbiAvdXNyL1gxMVI2LyB+CgpUaGUgcmVzdWx0cyBkZXBlbmQgb24gd2hhdCBpcyBmb3VuZCBpbiB5b3VyIGZpbGUgc3lzdGVtLCBvZiBjb3Vyc2UuICBUaGUKbWF0Y2hlcyBhcmUgc29ydGVkIGFscGhhYmV0aWNhbGx5LgoKCkNPTVBMRVRJTkcgSU4gU09VUkNFIENPREUKClNvdXJjZSBjb2RlIGZpbGVzIGFyZSB3ZWxsIHN0cnVjdHVyZWQuICBUaGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRvCmNvbXBsZXRpb24gaW4gYW4gaW50ZWxsaWdlbnQgd2F5LiAgSW4gVmltIHRoaXMgaXMgY2FsbGVkIE9tbmkgY29tcGxldGlvbi4gIEluCnNvbWUgb3RoZXIgZWRpdG9ycyBpdCdzIGNhbGxlZCBpbnRlbGxpc2Vuc2UsIGJ1dCB0aGF0IGlzIGEgdHJhZGVtYXJrLgoKVGhlIGtleSB0byBPbW5pIGNvbXBsZXRpb24gaXMgQ1RSTC1YIENUUkwtTy4gIE9idmlvdXNseSB0aGUgTyBzdGFuZHMgZm9yIE9tbmkKaGVyZSwgc28gdGhhdCB5b3UgY2FuIHJlbWVtYmVyIGl0IGVhc2llci4gIExldCdzIHVzZSBhbiBleGFtcGxlIGZvciBlZGl0aW5nIEMKc291cmNlOgoKCXsgfgoJICAgIHN0cnVjdCBmb28gKnA7IH4KCSAgICBwLT4gfgoKVGhlIGN1cnNvciBpcyBhZnRlciAicC0+Ii4gIE5vdyB0eXBlIENUUkwtWCBDVFJMLU8uICBWaW0gd2lsbCBvZmZlciB5b3UgYSBsaXN0Cm9mIGFsdGVybmF0aXZlcywgd2hpY2ggYXJlIHRoZSBpdGVtcyB0aGF0ICJzdHJ1Y3QgZm9vIiBjb250YWlucy4gIFRoYXQgaXMKcXVpdGUgZGlmZmVyZW50IGZyb20gdXNpbmcgQ1RSTC1QLCB3aGljaCB3b3VsZCBjb21wbGV0ZSBhbnkgd29yZCwgd2hpbGUgb25seQptZW1iZXJzIG9mICJzdHJ1Y3QgZm9vIiBhcmUgdmFsaWQgaGVyZS4KCkZvciBPbW5pIGNvbXBsZXRpb24gdG8gd29yayB5b3UgbWF5IG5lZWQgdG8gZG8gc29tZSBzZXR1cC4gIEZvciBDIGNvZGUgeW91Cm5lZWQgdG8gY3JlYXRlIGEgdGFncyBmaWxlIGFuZCBzZXQgdGhlICd0YWdzJyBvcHRpb24uICBUaGF0IGlzIGV4cGxhaW5lZAp8ZnQtYy1vbW5pfC4gIEZvciBvdGhlciBmaWxldHlwZXMgeW91IG1heSBuZWVkIHRvIGRvIHNvbWV0aGluZyBzaW1pbGFyLCBsb29rCmJlbG93IHxjb21wbC1vbW5pLWZpbGV0eXBlc3wuICBJdCBvbmx5IHdvcmtzIGZvciBzcGVjaWZpYyBmaWxldHlwZXMuICBDaGVjawp0aGUgdmFsdWUgb2YgdGhlICdvbW5pZnVuYycgb3B0aW9uIHRvIGZpbmQgb3V0IGlmIGl0IHdvdWxkIHdvcmsuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKjI0LjQqCVJlcGVhdGluZyBhbiBpbnNlcnQKCklmIHlvdSBwcmVzcyBDVFJMLUEsIHRoZSBlZGl0b3IgaW5zZXJ0cyB0aGUgdGV4dCB5b3UgdHlwZWQgdGhlIGxhc3QgdGltZSB5b3UKd2VyZSBpbiBJbnNlcnQgbW9kZS4KICAgQXNzdW1lLCBmb3IgZXhhbXBsZSwgdGhhdCB5b3UgaGF2ZSBhIGZpbGUgdGhhdCBiZWdpbnMgd2l0aCB0aGUgZm9sbG93aW5nOgoKCSJmaWxlLmgiIH4KCS8qIE1haW4gcHJvZ3JhbSBiZWdpbnMgKi8gfgoKWW91IGVkaXQgdGhpcyBmaWxlIGJ5IGluc2VydGluZyAiI2luY2x1ZGUgIiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaXJzdApsaW5lOgoKCSNpbmNsdWRlICJmaWxlLmgiIH4KCS8qIE1haW4gcHJvZ3JhbSBiZWdpbnMgKi8gfgoKWW91IGdvIGRvd24gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lIHVzaW5nIHRoZSBjb21tYW5kcyAial4iLiAgWW91Cm5vdyBzdGFydCB0byBpbnNlcnQgYSBuZXcgIiNpbmNsdWRlIiBsaW5lLiAgU28geW91IHR5cGU6ID4KCglpIENUUkwtQQoKVGhlIHJlc3VsdCBpcyBhcyBmb2xsb3dzOgoKCSNpbmNsdWRlICJmaWxlLmgiIH4KCSNpbmNsdWRlIC8qIE1haW4gcHJvZ3JhbSBiZWdpbnMgKi8gfgoKVGhlICIjaW5jbHVkZSAiIHdhcyBpbnNlcnRlZCBiZWNhdXNlIENUUkwtQSBpbnNlcnRzIHRoZSB0ZXh0IG9mIHRoZSBwcmV2aW91cwppbnNlcnQuICBOb3cgeW91IHR5cGUgICJtYWluLmgiPEVudGVyPiAgdG8gZmluaXNoIHRoZSBsaW5lOgoKCgkjaW5jbHVkZSAiZmlsZS5oIiB+CgkjaW5jbHVkZSAibWFpbi5oIiB+CgkvKiBNYWluIHByb2dyYW0gYmVnaW5zICovIH4KClRoZSBDVFJMLUAgY29tbWFuZCBkb2VzIGEgQ1RSTC1BIGFuZCB0aGVuIGV4aXRzIEluc2VydCBtb2RlLiAgVGhhdCdzIGEgcXVpY2sKd2F5IG9mIGRvaW5nIGV4YWN0bHkgdGhlIHNhbWUgaW5zZXJ0aW9uIGFnYWluLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioyNC41KglDb3B5aW5nIGZyb20gYW5vdGhlciBsaW5lCgpUaGUgQ1RSTC1ZIGNvbW1hbmQgaW5zZXJ0cyB0aGUgY2hhcmFjdGVyIGFib3ZlIHRoZSBjdXJzb3IuICBUaGlzIGlzIHVzZWZ1bAp3aGVuIHlvdSBhcmUgZHVwbGljYXRpbmcgYSBwcmV2aW91cyBsaW5lLiAgRm9yIGV4YW1wbGUsIHlvdSBoYXZlIHRoaXMgbGluZSBvZgpDIGNvZGU6CgoJYl9hcnJheVtpXS0+c19uZXh0ID0gYV9hcnJheVtpXS0+c19uZXh0OyB+CgpOb3cgeW91IG5lZWQgdG8gdHlwZSB0aGUgc2FtZSBsaW5lLCBidXQgd2l0aCAic19wcmV2IiBpbnN0ZWFkIG9mICJzX25leHQiLgpTdGFydCB0aGUgbmV3IGxpbmUsIGFuZCBwcmVzcyBDVFJMLVkgMTQgdGltZXMsIHVudGlsIHlvdSBhcmUgYXQgdGhlICJuIiBvZgoibmV4dCI6CgoJYl9hcnJheVtpXS0+c19uZXh0ID0gYV9hcnJheVtpXS0+c19uZXh0OyB+CgliX2FycmF5W2ldLT5zXyB+CgpOb3cgeW91IHR5cGUgInByZXYiOgoKCWJfYXJyYXlbaV0tPnNfbmV4dCA9IGFfYXJyYXlbaV0tPnNfbmV4dDsgfgoJYl9hcnJheVtpXS0+c19wcmV2IH4KCkNvbnRpbnVlIHByZXNzaW5nIENUUkwtWSB1bnRpbCB0aGUgZm9sbG93aW5nICJuZXh0IjoKCgliX2FycmF5W2ldLT5zX25leHQgPSBhX2FycmF5W2ldLT5zX25leHQ7IH4KCWJfYXJyYXlbaV0tPnNfcHJldiA9IGFfYXJyYXlbaV0tPnNfIH4KCk5vdyB0eXBlICJwcmV2OyIgdG8gZmluaXNoIGl0IG9mZi4KClRoZSBDVFJMLUUgY29tbWFuZCBhY3RzIGxpa2UgQ1RSTC1ZIGV4Y2VwdCBpdCBpbnNlcnRzIHRoZSBjaGFyYWN0ZXIgYmVsb3cgdGhlCmN1cnNvci4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqMjQuNioJSW5zZXJ0aW5nIGEgcmVnaXN0ZXIKClRoZSBjb21tYW5kIENUUkwtUiB7cmVnaXN0ZXJ9IGluc2VydHMgdGhlIGNvbnRlbnRzIG9mIHRoZSByZWdpc3Rlci4gIFRoaXMgaXMKdXNlZnVsIHRvIGF2b2lkIGhhdmluZyB0byB0eXBlIGEgbG9uZyB3b3JkLiAgRm9yIGV4YW1wbGUsIHlvdSBuZWVkIHRvIHR5cGUKdGhpczoKCglyID0gVmVyeUxvbmdGdW5jdGlvbihhKSArIFZlcnlMb25nRnVuY3Rpb24oYikgKyBWZXJ5TG9uZ0Z1bmN0aW9uKGMpIH4KClRoZSBmdW5jdGlvbiBuYW1lIGlzIGRlZmluZWQgaW4gYSBkaWZmZXJlbnQgZmlsZS4gIEVkaXQgdGhhdCBmaWxlIGFuZCBtb3ZlIHRoZQpjdXJzb3Igb24gdG9wIG9mIHRoZSBmdW5jdGlvbiBuYW1lIHRoZXJlLCBhbmQgeWFuayBpdCBpbnRvIHJlZ2lzdGVyIHY6ID4KCgkidnlpdwoKInYgaXMgdGhlIHJlZ2lzdGVyIHNwZWNpZmljYXRpb24sICJ5aXciIGlzIHlhbmstaW5uZXItd29yZC4gIE5vdyBlZGl0IHRoZSBmaWxlCndoZXJlIHRoZSBuZXcgbGluZSBpcyB0byBiZSBpbnNlcnRlZCwgYW5kIHR5cGUgdGhlIGZpcnN0IGxldHRlcnM6CgoJciA9IH4KCk5vdyB1c2UgQ1RSTC1SIHYgdG8gaW5zZXJ0IHRoZSBmdW5jdGlvbiBuYW1lOgoKCXIgPSBWZXJ5TG9uZ0Z1bmN0aW9uIH4KCllvdSBjb250aW51ZSB0byB0eXBlIHRoZSBjaGFyYWN0ZXJzIGluIGJldHdlZW4gdGhlIGZ1bmN0aW9uIG5hbWUsIGFuZCB1c2UKQ1RSTC1SIHYgdHdvIHRpbWVzIG1vcmUuCiAgIFlvdSBjb3VsZCBoYXZlIGRvbmUgdGhlIHNhbWUgd2l0aCBjb21wbGV0aW9uLiAgVXNpbmcgYSByZWdpc3RlciBpcyB1c2VmdWwKd2hlbiB0aGVyZSBhcmUgbWFueSB3b3JkcyB0aGF0IHN0YXJ0IHdpdGggdGhlIHNhbWUgY2hhcmFjdGVycy4KCklmIHRoZSByZWdpc3RlciBjb250YWlucyBjaGFyYWN0ZXJzIHN1Y2ggYXMgPEJTPiBvciBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMsCnRoZXkgYXJlIGludGVycHJldGVkIGFzIGlmIHRoZXkgaGFkIGJlZW4gdHlwZWQgZnJvbSB0aGUga2V5Ym9hcmQuICBJZiB5b3UgZG8Kbm90IHdhbnQgdGhpcyB0byBoYXBwZW4gKHlvdSByZWFsbHkgd2FudCB0aGUgPEJTPiB0byBiZSBpbnNlcnRlZCBpbiB0aGUgdGV4dCksCnVzZSB0aGUgY29tbWFuZCBDVFJMLVIgQ1RSTC1SIHtyZWdpc3Rlcn0uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKjI0LjcqCUFiYnJldmlhdGlvbnMKCkFuIGFiYnJldmlhdGlvbiBpcyBhIHNob3J0IHdvcmQgdGhhdCB0YWtlcyB0aGUgcGxhY2Ugb2YgYSBsb25nIG9uZS4gIEZvcgpleGFtcGxlLCAiYWQiIHN0YW5kcyBmb3IgImFkdmVydGlzZW1lbnQiLiAgVmltIGVuYWJsZXMgeW91IHRvIHR5cGUgYW4KYWJicmV2aWF0aW9uIGFuZCB0aGVuIHdpbGwgYXV0b21hdGljYWxseSBleHBhbmQgaXQgZm9yIHlvdS4KICAgVG8gdGVsbCBWaW0gdG8gZXhwYW5kICJhZCIgaW50byAiYWR2ZXJ0aXNlbWVudCIgZXZlcnkgdGltZSB5b3UgaW5zZXJ0IGl0LAp1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CgoJOmlhYmJyZXYgYWQgYWR2ZXJ0aXNlbWVudAoKTm93LCB3aGVuIHlvdSB0eXBlICJhZCIsIHRoZSB3aG9sZSB3b3JkICJhZHZlcnRpc2VtZW50IiB3aWxsIGJlIGluc2VydGVkIGludG8KdGhlIHRleHQuICBUaGlzIGlzIHRyaWdnZXJlZCBieSB0eXBpbmcgYSBjaGFyYWN0ZXIgdGhhdCBjYW4ndCBiZSBwYXJ0IG9mIGEKd29yZCwgZm9yIGV4YW1wbGUgYSBzcGFjZToKCglXaGF0IElzIEVudGVyZWQJCVdoYXQgWW91IFNlZQoJSSBzYXcgdGhlIGEJCUkgc2F3IHRoZSBhIH4KCUkgc2F3IHRoZSBhZAkJSSBzYXcgdGhlIGFkIH4KCUkgc2F3IHRoZSBhZDxTcGFjZT4JSSBzYXcgdGhlIGFkdmVydGlzZW1lbnQ8U3BhY2U+IH4KClRoZSBleHBhbnNpb24gZG9lc24ndCBoYXBwZW4gd2hlbiB0eXBpbmcganVzdCAiYWQiLiAgVGhhdCBhbGxvd3MgeW91IHRvIHR5cGUgYQp3b3JkIGxpa2UgImFkZCIsIHdoaWNoIHdpbGwgbm90IGdldCBleHBhbmRlZC4gIE9ubHkgd2hvbGUgd29yZHMgYXJlIGNoZWNrZWQKZm9yIGFiYnJldmlhdGlvbnMuCgoKQUJCUkVWSUFUSU5HIFNFVkVSQUwgV09SRFMKCkl0IGlzIHBvc3NpYmxlIHRvIGRlZmluZSBhbiBhYmJyZXZpYXRpb24gdGhhdCByZXN1bHRzIGluIG11bHRpcGxlIHdvcmRzLiAgRm9yCmV4YW1wbGUsIHRvIGRlZmluZSAiSkIiIGFzICJKYWNrIEJlbm55IiwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgoKCTppYWJicmV2IEpCIEphY2sgQmVubnkKCkFzIGEgcHJvZ3JhbW1lciwgSSB1c2UgdHdvIHJhdGhlciB1bnVzdWFsIGFiYnJldmlhdGlvbnM6ID4KCgk6aWFiYnJldiAjYiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJOmlhYmJyZXYgI2UgPFNwYWNlPioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpUaGVzZSBhcmUgdXNlZCBmb3IgY3JlYXRpbmcgYm94ZWQgY29tbWVudHMuICBUaGUgY29tbWVudCBzdGFydHMgd2l0aCAjYiwgd2hpY2gKZHJhd3MgdGhlIHRvcCBsaW5lLiAgSSB0aGVuIHR5cGUgdGhlIGNvbW1lbnQgdGV4dCBhbmQgdXNlICNlIHRvIGRyYXcgdGhlCmJvdHRvbSBsaW5lLgogICBOb3RpY2UgdGhhdCB0aGUgI2UgYWJicmV2aWF0aW9uIGJlZ2lucyB3aXRoIGEgc3BhY2UuICBJbiBvdGhlciB3b3JkcywgdGhlCmZpcnN0IHR3byBjaGFyYWN0ZXJzIGFyZSBzcGFjZS1zdGFyLiAgVXN1YWxseSBWaW0gaWdub3JlcyBzcGFjZXMgYmV0d2VlbiB0aGUKYWJicmV2aWF0aW9uIGFuZCB0aGUgZXhwYW5zaW9uLiAgVG8gYXZvaWQgdGhhdCBwcm9ibGVtLCBJIHNwZWxsIHNwYWNlIGFzIHNldmVuCmNoYXJhY3RlcnM6IDwsIFMsIHAsIGEsIGMsIGUsID4uCgoJTm90ZToKCSI6aWFiYnJldiIgaXMgYSBsb25nIHdvcmQgdG8gdHlwZS4gICI6aWFiIiB3b3JrcyBqdXN0IGFzIHdlbGwuCglUaGF0J3MgYWJicmV2aWF0aW5nIHRoZSBhYmJyZXZpYXRlIGNvbW1hbmQhCgoKRklYSU5HIFRZUElORyBNSVNUQUtFUwoKSXQncyB2ZXJ5IGNvbW1vbiB0byBtYWtlIHRoZSBzYW1lIHR5cGluZyBtaXN0YWtlIGV2ZXJ5IHRpbWUuICBGb3IgZXhhbXBsZSwKdHlwaW5nICJ0ZWgiIGluc3RlYWQgb2YgInRoZSIuICBZb3UgY2FuIGZpeCB0aGlzIHdpdGggYW4gYWJicmV2aWF0aW9uOiA+CgoJOmFiYnJldmlhdGUgdGVoIHRoZQoKWW91IGNhbiBhZGQgYSB3aG9sZSBsaXN0IG9mIHRoZXNlLiAgQWRkIG9uZSBlYWNoIHRpbWUgeW91IGRpc2NvdmVyIGEgY29tbW9uCm1pc3Rha2UuCgoKTElTVElORyBBQkJSRVZJQVRJT05TCgpUaGUgIjphYmJyZXZpYXRlIiBjb21tYW5kIGxpc3RzIHRoZSBhYmJyZXZpYXRpb25zOgoKCTphYmJyZXZpYXRlCglpICAjZQkJICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoJaSAgI2IJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJaSAgSkIJCSBKYWNrIEJlbm55CglpICBhZAkJIGFkdmVydGlzZW1lbnQKCSEgIHRlaAkJIHRoZQoKVGhlICJpIiBpbiB0aGUgZmlyc3QgY29sdW1uIGluZGljYXRlcyBJbnNlcnQgbW9kZS4gIFRoZXNlIGFiYnJldmlhdGlvbnMgYXJlCm9ubHkgYWN0aXZlIGluIEluc2VydCBtb2RlLiAgT3RoZXIgcG9zc2libGUgY2hhcmFjdGVycyBhcmU6CgoJYwlDb21tYW5kLWxpbmUgbW9kZQkJCTpjYWJicmV2CgkhCWJvdGggSW5zZXJ0IGFuZCBDb21tYW5kLWxpbmUgbW9kZQk6YWJicmV2aWF0ZQoKU2luY2UgYWJicmV2aWF0aW9ucyBhcmUgbm90IG9mdGVuIHVzZWZ1bCBpbiBDb21tYW5kLWxpbmUgbW9kZSwgeW91IHdpbGwgbW9zdGx5CnVzZSB0aGUgIjppYWJicmV2IiBjb21tYW5kLiAgVGhhdCBhdm9pZHMsIGZvciBleGFtcGxlLCB0aGF0ICJhZCIgZ2V0cyBleHBhbmRlZAp3aGVuIHR5cGluZyBhIGNvbW1hbmQgbGlrZTogPgoKCTplZGl0IGFkCgoKREVMRVRJTkcgQUJCUkVWSUFUSU9OUwoKVG8gZ2V0IHJpZCBvZiBhbiBhYmJyZXZpYXRpb24sIHVzZSB0aGUgIjp1bmFiYnJldmlhdGUiIGNvbW1hbmQuICBTdXBwb3NlIHlvdQpoYXZlIHRoZSBmb2xsb3dpbmcgYWJicmV2aWF0aW9uOiA+CgoJOmFiYnJldmlhdGUgQGYgZnJlc2gKCllvdSBjYW4gcmVtb3ZlIGl0IHdpdGggdGhpcyBjb21tYW5kOiA+CgoJOnVuYWJicmV2aWF0ZSBAZgoKV2hpbGUgeW91IHR5cGUgdGhpcywgeW91IHdpbGwgbm90aWNlIHRoYXQgQGYgaXMgZXhwYW5kZWQgdG8gImZyZXNoIi4gIERvbid0CndvcnJ5IGFib3V0IHRoaXMsIFZpbSB1bmRlcnN0YW5kcyBpdCBhbnl3YXkgKGV4Y2VwdCB3aGVuIHlvdSBoYXZlIGFuCmFiYnJldmlhdGlvbiBmb3IgImZyZXNoIiwgYnV0IHRoYXQncyB2ZXJ5IHVubGlrZWx5KS4KICAgVG8gcmVtb3ZlIGFsbCB0aGUgYWJicmV2aWF0aW9uczogPgoKCTphYmNsZWFyCgoiOnVuYWJicmV2aWF0ZSIgYW5kICI6YWJjbGVhciIgYWxzbyBjb21lIGluIHRoZSB2YXJpYW50cyBmb3IgSW5zZXJ0IG1vZGUKKCI6aXVuYWJicmV2aWF0ZSBhbmQgIjppYWJjbGVhciIpIGFuZCBDb21tYW5kLWxpbmUgbW9kZSAoIjpjdW5hYmJyZXZpYXRlIiBhbmQKIjpjYWJjbGVhciIpLgoKClJFTUFQUElORyBBQkJSRVZJQVRJT05TCgpUaGVyZSBpcyBvbmUgdGhpbmcgdG8gd2F0Y2ggb3V0IGZvciB3aGVuIGRlZmluaW5nIGFuIGFiYnJldmlhdGlvbjogVGhlCnJlc3VsdGluZyBzdHJpbmcgc2hvdWxkIG5vdCBiZSBtYXBwZWQuICBGb3IgZXhhbXBsZTogPgoKCTphYmJyZXZpYXRlIEBhIGFkZGVyCgk6aW1hcCBkZCBkaXNrLWRvb3IKCldoZW4geW91IG5vdyB0eXBlIEBhLCB5b3Ugd2lsbCBnZXQgImFkaXNrLWRvb3JlciIuICBUaGF0J3Mgbm90IHdoYXQgeW91IHdhbnQuClRvIGF2b2lkIHRoaXMsIHVzZSB0aGUgIjpub3JlYWJicmV2IiBjb21tYW5kLiAgSXQgZG9lcyB0aGUgc2FtZSBhcwoiOmFiYnJldmlhdGUiLCBidXQgYXZvaWRzIHRoYXQgdGhlIHJlc3VsdGluZyBzdHJpbmcgaXMgdXNlZCBmb3IgbWFwcGluZ3M6ID4KCgk6bm9yZWFiYnJldiBAYSBhZGRlcgoKRm9ydHVuYXRlbHksIGl0J3MgdW5saWtlbHkgdGhhdCB0aGUgcmVzdWx0IG9mIGFuIGFiYnJldmlhdGlvbiBpcyBtYXBwZWQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKjI0LjgqCUVudGVyaW5nIHNwZWNpYWwgY2hhcmFjdGVycwoKVGhlIENUUkwtViBjb21tYW5kIGlzIHVzZWQgdG8gaW5zZXJ0IHRoZSBuZXh0IGNoYXJhY3RlciBsaXRlcmFsbHkuICBJbiBvdGhlcgp3b3JkcywgYW55IHNwZWNpYWwgbWVhbmluZyB0aGUgY2hhcmFjdGVyIGhhcywgaXQgd2lsbCBiZSBpZ25vcmVkLiAgRm9yCmV4YW1wbGU6ID4KCglDVFJMLVYgPEVzYz4KCkluc2VydHMgYW4gZXNjYXBlIGNoYXJhY3Rlci4gIFRodXMgeW91IGRvbid0IGxlYXZlIEluc2VydCBtb2RlLiAgKERvbid0IHR5cGUKdGhlIHNwYWNlIGFmdGVyIENUUkwtViwgaXQncyBvbmx5IHRvIG1ha2UgdGhpcyBlYXNpZXIgdG8gcmVhZCkuCgoJTm90ZToKCU9uIE1TLVdpbmRvd3MgQ1RSTC1WIGlzIHVzZWQgdG8gcGFzdGUgdGV4dC4gIFVzZSBDVFJMLVEgaW5zdGVhZCBvZgoJQ1RSTC1WLiAgT24gVW5peCwgb24gdGhlIG90aGVyIGhhbmQsIENUUkwtUSBkb2VzIG5vdCB3b3JrIG9uIHNvbWUKCXRlcm1pbmFscywgYmVjYXVzZSBpdCBoYXMgYSBzcGVjaWFsIG1lYW5pbmcuCgpZb3UgY2FuIGFsc28gdXNlIHRoZSBjb21tYW5kIENUUkwtViB7ZGlnaXRzfSB0byBpbnNlcnQgYSBjaGFyYWN0ZXIgd2l0aCB0aGUKZGVjaW1hbCBudW1iZXIge2RpZ2l0c30uICBGb3IgZXhhbXBsZSwgdGhlIGNoYXJhY3RlciBudW1iZXIgMTI3IGlzIHRoZSA8RGVsPgpjaGFyYWN0ZXIgKGJ1dCBub3QgbmVjZXNzYXJpbHkgdGhlIDxEZWw+IGtleSEpLiAgVG8gaW5zZXJ0IDxEZWw+IHR5cGU6ID4KCglDVFJMLVYgMTI3CgpZb3UgY2FuIGVudGVyIGNoYXJhY3RlcnMgdXAgdG8gMjU1IHRoaXMgd2F5LiAgV2hlbiB5b3UgdHlwZSBmZXdlciB0aGFuIHR3bwpkaWdpdHMsIGEgbm9uLWRpZ2l0IHdpbGwgdGVybWluYXRlIHRoZSBjb21tYW5kLiAgVG8gYXZvaWQgdGhlIG5lZWQgb2YgdHlwaW5nIGEKbm9uLWRpZ2l0LCBwcmVwZW5kIG9uZSBvciB0d28gemVyb3MgdG8gbWFrZSB0aHJlZSBkaWdpdHMuCiAgIEFsbCB0aGUgbmV4dCBjb21tYW5kcyBpbnNlcnQgYSA8VGFiPiBhbmQgdGhlbiBhIGRvdDoKCglDVFJMLVYgOS4KCUNUUkwtViAwOS4KCUNUUkwtViAwMDkuCgpUbyBlbnRlciBhIGNoYXJhY3RlciBpbiBoZXhhZGVjaW1hbCwgdXNlIGFuICJ4IiBhZnRlciB0aGUgQ1RSTC1WOiA+CgoJQ1RSTC1WIHg3ZgoKVGhpcyBhbHNvIGdvZXMgdXAgdG8gY2hhcmFjdGVyIDI1NSAoQ1RSTC1WIHhmZikuICBZb3UgY2FuIHVzZSAibyIgdG8gdHlwZSBhCmNoYXJhY3RlciBhcyBhbiBvY3RhbCBudW1iZXIgYW5kIHR3byBtb3JlIG1ldGhvZHMgYWxsb3cgeW91IHRvIHR5cGUgdXAgdG8KYSAxNiBiaXQgYW5kIGEgMzIgYml0IG51bWJlciAoZS5nLiwgZm9yIGEgVW5pY29kZSBjaGFyYWN0ZXIpOiA+CgoJQ1RSTC1WIG8xMjMKCUNUUkwtViB1MTIzNAoJQ1RSTC1WIFUxMjM0NTY3OAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioyNC45KglEaWdyYXBocwoKU29tZSBjaGFyYWN0ZXJzIGFyZSBub3Qgb24gdGhlIGtleWJvYXJkLiAgRm9yIGV4YW1wbGUsIHRoZSBjb3B5cmlnaHQgY2hhcmFjdGVyCiipKS4gIFRvIHR5cGUgdGhlc2UgY2hhcmFjdGVycyBpbiBWaW0sIHlvdSB1c2UgZGlncmFwaHMsIHdoZXJlIHR3byBjaGFyYWN0ZXJzCnJlcHJlc2VudCBvbmUuICBUbyBlbnRlciBhIKksIGZvciBleGFtcGxlLCB5b3UgcHJlc3MgdGhyZWUga2V5czogPgoKCUNUUkwtSyBDbwoKVG8gZmluZCBvdXQgd2hhdCBkaWdyYXBocyBhcmUgYXZhaWxhYmxlLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CgoJOmRpZ3JhcGhzCgpWaW0gd2lsbCBkaXNwbGF5IHRoZSBkaWdyYXBoIHRhYmxlLiAgSGVyZSBhcmUgdGhyZWUgbGluZXMgb2YgaXQ6CgogIEFDIH5fIDE1OSAgTlMgfCAgMTYwICAhSSChICAxNjEgIEN0IKIgIDE2MiAgUGQgoyAgMTYzICBDdSCkICAxNjQgIFllIKUgIDE2NSB+CiAgQkIgpiAgMTY2ICBTRSCnICAxNjcgICc6IKggIDE2OCAgQ28gqSAgMTY5ICAtYSCqICAxNzAgIDw8IKsgIDE3MSAgTk8grCAgMTcyIH4KICAtLSCtICAxNzMgIFJnIK4gIDE3NCAgJ20gryAgMTc1ICBERyCwICAxNzYgICstILEgIDE3NyAgMlMgsiAgMTc4ICAzUyCzICAxNzkgfgoKVGhpcyBzaG93cywgZm9yIGV4YW1wbGUsIHRoYXQgdGhlIGRpZ3JhcGggeW91IGdldCBieSB0eXBpbmcgQ1RSTC1LIFBkIGlzIHRoZQpjaGFyYWN0ZXIgKKMpLiAgVGhpcyBpcyBjaGFyYWN0ZXIgbnVtYmVyIDE2MyAoZGVjaW1hbCkuCiAgIFBkIGlzIHNob3J0IGZvciBQb3VuZC4gIE1vc3QgZGlncmFwaHMgYXJlIHNlbGVjdGVkIHRvIGdpdmUgeW91IGEgaGludCBhYm91dAp0aGUgY2hhcmFjdGVyIHRoZXkgd2lsbCBwcm9kdWNlLiAgSWYgeW91IGxvb2sgdGhyb3VnaCB0aGUgbGlzdCB5b3Ugd2lsbAp1bmRlcnN0YW5kIHRoZSBsb2dpYy4KICAgWW91IGNhbiBleGNoYW5nZSB0aGUgZmlyc3QgYW5kIHNlY29uZCBjaGFyYWN0ZXIsIGlmIHRoZXJlIGlzIG5vIGRpZ3JhcGggZm9yCnRoYXQgY29tYmluYXRpb24uICBUaHVzIENUUkwtSyBkUCBhbHNvIHdvcmtzLiAgU2luY2UgdGhlcmUgaXMgbm8gZGlncmFwaCBmb3IKImRQIiBWaW0gd2lsbCBhbHNvIHNlYXJjaCBmb3IgYSAiUGQiIGRpZ3JhcGguCgoJTm90ZToKCVRoZSBkaWdyYXBocyBkZXBlbmQgb24gdGhlIGNoYXJhY3RlciBzZXQgdGhhdCBWaW0gYXNzdW1lcyB5b3UgYXJlCgl1c2luZy4gIE9uIE1TLURPUyB0aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSBNUy1XaW5kb3dzLiAgQWx3YXlzIHVzZQoJIjpkaWdyYXBocyIgdG8gZmluZCBvdXQgd2hpY2ggZGlncmFwaHMgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUuCgpZb3UgY2FuIGRlZmluZSB5b3VyIG93biBkaWdyYXBocy4gIEV4YW1wbGU6ID4KCgk6ZGlncmFwaCBhIiDkCgpUaGlzIGRlZmluZXMgdGhhdCBDVFJMLUsgYSIgaW5zZXJ0cyBhbiDkIGNoYXJhY3Rlci4gIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZQpjaGFyYWN0ZXIgd2l0aCBhIGRlY2ltYWwgbnVtYmVyLiAgVGhpcyBkZWZpbmVzIHRoZSBzYW1lIGRpZ3JhcGg6ID4KCgk6ZGlncmFwaCBhIiAyMjgKCk1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGlncmFwaHMgaGVyZTogfGRpZ3JhcGhzfAogICBBbm90aGVyIHdheSB0byBpbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXJzIGlzIHdpdGggYSBrZXltYXAuICBNb3JlIGFib3V0IHRoYXQKaGVyZTogfDQ1LjV8Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKjI0LjEwKglOb3JtYWwgbW9kZSBjb21tYW5kcwoKSW5zZXJ0IG1vZGUgb2ZmZXJzIGEgbGltaXRlZCBudW1iZXIgb2YgY29tbWFuZHMuICBJbiBOb3JtYWwgbW9kZSB5b3UgaGF2ZSBtYW55Cm1vcmUuICBXaGVuIHlvdSB3YW50IHRvIHVzZSBvbmUsIHlvdSB1c3VhbGx5IGxlYXZlIEluc2VydCBtb2RlIHdpdGggPEVzYz4sCmV4ZWN1dGUgdGhlIE5vcm1hbCBtb2RlIGNvbW1hbmQsIGFuZCByZS1lbnRlciBJbnNlcnQgbW9kZSB3aXRoICJpIiBvciAiYSIuCiAgIFRoZXJlIGlzIGEgcXVpY2tlciB3YXkuICBXaXRoIENUUkwtTyB7Y29tbWFuZH0geW91IGNhbiBleGVjdXRlIGFueSBOb3JtYWwKbW9kZSBjb21tYW5kIGZyb20gSW5zZXJ0IG1vZGUuICBGb3IgZXhhbXBsZSwgdG8gZGVsZXRlIGZyb20gdGhlIGN1cnNvciB0byB0aGUKZW5kIG9mIHRoZSBsaW5lOiA+CgoJQ1RSTC1PIEQKCllvdSBjYW4gZXhlY3V0ZSBvbmx5IG9uZSBOb3JtYWwgbW9kZSBjb21tYW5kIHRoaXMgd2F5LiAgQnV0IHlvdSBjYW4gc3BlY2lmeSBhCnJlZ2lzdGVyIG9yIGEgY291bnQuICBBIG1vcmUgY29tcGxpY2F0ZWQgZXhhbXBsZTogPgoKCUNUUkwtTyAiZzNkdwoKVGhpcyBkZWxldGVzIHVwIHRvIHRoZSB0aGlyZCB3b3JkIGludG8gcmVnaXN0ZXIgZy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKTmV4dCBjaGFwdGVyOiB8dXNyXzI1LnR4dHwgIEVkaXRpbmcgZm9ybWF0dGVkIHRleHQKCkNvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgo=