From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Andrew Burgess To: git-commits@fedoraproject.org Subject: [rpms/gdb] gdb-17.2-rebase-f44: Convert RPM suggestion feature into a Python extension Date: Sun, 28 Jun 2026 00:01:56 GMT Message-ID: <178260491640.1.18352866082687228845.rpms-gdb-8d5adc72d172@fedoraproject.org> List-ID: X-Git-Repo: rpms/gdb X-Git-Branch: gdb-17.2-rebase-f44 X-Git-Rev: 8d5adc72d172051b5eae90a9ab35956c020bd7a0 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvZ2RiCiAgICAgICAgICAgIEJyYW5jaCA6IGdkYi0xNy4yLXJlYmFzZS1mNDQK ICAgICAgICAgICAgQ29tbWl0IDogOGQ1YWRjNzJkMTcyMDUxYjVlYWU5MGE5YWIzNTk1NmMwMjBi ZDdhMAogICAgICAgICAgICBBdXRob3IgOiBBbmRyZXcgQnVyZ2VzcyA8YWJ1cmdlc3NAcmVkaGF0 LmNvbT4KICAgICAgICAgICAgRGF0ZSAgIDogMjAyNC0xMi0xMFQxNjo1NToyMCswMDowMAogICAg ICAgICAgICBTdGF0cyAgOiArMTA3MzEvLTE3MDkgaW4gMTMgZmlsZShzKQogICAgICAgICAgICBV UkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL2dkYi9jLzhkNWFkYzcy ZDE3MjA1MWI1ZWFlOTBhOWFiMzU5NTZjMDIwYmQ3YTA/YnJhbmNoPWdkYi0xNy4yLXJlYmFzZS1m NDQKCiAgICAgICAgICAgIExvZzoKICAgICAgICAgICAgQ29udmVydCBSUE0gc3VnZ2VzdGlvbiBm ZWF0dXJlIGludG8gYSBQeXRob24gZXh0ZW5zaW9uCgpUaGlzIGNvbW1pdCBjb252ZXJ0cyB0aGUg UlBNIHN1Z2dlc3Rpb24gZmVhdHVyZSBpbnRvIGEgUHl0aG9uCmV4dGVuc2lvbi4gIFRoZSBwYXRj aGVzIHdoaWNoIGNoYW5nZWQgR0RCIGl0c2VsZiBhcmUgYWxsIGdvbmUgbm93LgpPbmUgb2YgdGhl IHBhdGNoZXMgYXBwZWFycyBpbiB0aGUgJ2dpdCBkaWZmJyBhcyBhIHJlbmFtZSwgSSd2ZQpyZXRh aW5lZCBvbmx5IHRoZSB0ZXN0cyB3aXRoaW4gdGhhdCBwYXRjaC4KClRoZSBvbGQgUlBNIHN1Z2dl c3Rpb24gZmVhdHVyZSBkaWRuJ3QgaGF2ZSBtYW55IHRlc3RzIHNvIGl0J3MgaGFyZCB0bwprbm93 IGZvciBzdXJlIGlmIHRoZSBuZXcgUHl0aG9uIHNjcmlwdCBjb3ZlcnMgYWxsIG9mIHRoZSBzYW1l IGNhc2VzLApidXQgaG9wZWZ1bGx5IEkgZ290IG1vc3Qgb2YgdGhlbSwgYW5kIHdlIGNhbiBhbHdh eXMgaW1wcm92ZSB0aGUgUHl0aG9uCnNjcmlwdCBsYXRlciBpZiBJJ3ZlIG1pc3NlZCBzb21lIGNh c2VzLgoKSSd2ZSBhZGRlZCBhIGJ1bmNoIG9mIG5ldyBHREIgY29tbWFuZHMgdG8gY29udHJvbCBS UE0gc3VnZ2VzdGlvbnMsCnRoZXNlIGFyZToKCiAgc2V0IHJwbS1zdWdnZXN0aW9uIGVuYWJsZWQg b258b2ZmCiAgICAgIC0gQWxsb3dzIFJQTSBzdWdnZXN0aW9uIHRvIGJlIHR1cm5lZCBvbi9vZmYu CgogIHNob3cgcnBtLXN1Z2dlc3Rpb24gZW5hYmxlZAogICAgICAtIElzIFJQTSBjdXJyZW50bHkg dHVybmVkIG9uIG9yIG9mZj8KCiAgc2V0IHJwbS1zdWdnZXN0aW9uIGJ1aWxkLWlkLW1vZGUgZmFz dHxzbG93CiAgICAgIC0gSG93IHRvIHN1Z2dlc3Rpb24gUlBNcyBiYXNlZCBvbiBhIGJ1aWxkLWlk LiAgRmFzdCBtb2RlIGdpdmVzIGEKICAgICAgICBjb21tYW5kIGJhc2VkIG9uIHRoZSBidWlsZC1p ZCBpdHNlbGYsIHNsb3cgbW9kZSB0cmllcyB0bwogICAgICAgIHJlc29sdmUgdGhlIGJ1aWxkLWlk IHRvIGFuIGFjdHVhbCBwYWNrYWdlLiAgVGhlICdmYXN0JyBtb2RlIGlzCiAgICAgICAgdGhlIGRl ZmF1bHQgYXMgdGhpcyBtYXRjaGVzIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuCgogIHNob3cgcnBt LXN1Z2dlc3Rpb24gYnVpbGQtaWQtbW9kZQogICAgICAtIEhvdyBhcmUgd2UgaGFuZGxpbmcgYnVp bGQtaWQgYmFzZWQgUlBNIHN1Z2dlc3Rpb25zPwoKICBpbmZvIHJwbS1zdWdnZXN0aW9ucwogICAg ICAtIFNob3cgYWxsIFJQTSBzdWdnZXN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtYWRlIGluIHRoaXMg c2Vzc2lvbi4KICAgICAgICBVc2VmdWwgaWYgeW91IG1pZ2h0IGhhdmUgbWlzc2VkIG9uZS4KClRo ZXNlIGFyZSBhbGwgZG9jdW1lbnRlZCBpbiB0aGUgR0RCIG1hbnVhbC4KClRoZXJlIGFyZSByYXRo ZXIgYSBsb3Qgb2YgYmFjay1wb3J0cyByZXF1aXJlZCB0byBzdXBwb3J0IHRoaXMgY2hhbmdlLApi dXQgdGhlc2Ugc2hvdWxkIGFsbCBkcm9wIG91dCB3aGVuIHdlIHJlYmFzZSB0byBHREIgMTYuICBJ J3ZlIG1hZGUKdGhpcyBjaGFuZ2Ugbm93IHRob3VnaCBzbyB0aGF0IHRoZSBSUE0gc3VnZ2VzdGlv biBzY3JpcHQgY2FuIGJlIHJlYWR5LAphbmQgZXZlbiB0ZXN0ZWQgYWhlYWQgb2YgdGhlIEdEQiAx NiByZWxlYXNlIGFuZCByZWJhc2UuICBXZSBtaWdodCB3YW50CnRvIHBvcnQgdGhlIFJQTSBzdWdn ZXN0aW9uIFB5dGhvbiBzY3JpcHQgdG8gb3RoZXIgRmVkb3JhIGJyYW5jaGVzIHdoZW4KdGhhdCBo YXBwZW5zIGFzIHRoZSBvbGQgQysrIGJhc2VkIFJQTSBzdWdnZXN0aW9uIGNoYW5nZXMgYXJlIGdv aW5nIHRvCmNvbmZsaWN0IGhvcnJpYmx5IHdoZW4gd2UgdHJ5IHRvIHJlYmFzZSB0byBHREIgMTYu CgotLS0KZGlmZiAtLWdpdCBhL19nZGIuc3BlYy5QYXRjaC5pbmNsdWRlIGIvX2dkYi5zcGVjLlBh dGNoLmluY2x1ZGUKaW5kZXggMGY2Y2FjMS4uYTg4ZjM2ZCAxMDA2NDQKLS0tIGEvX2dkYi5zcGVj LlBhdGNoLmluY2x1ZGUKKysrIGIvX2dkYi5zcGVjLlBhdGNoLmluY2x1ZGUKQEAgLTE0LDYzICsx NCw0OCBAQCBQYXRjaDAwMzogZ2RiLTYuNS1iejIxODM3OS1wcGMtc29saWItdHJhbXBvbGluZS10 ZXN0LnBhdGNoCiAjPWZlZG9yYXRlc3QKIFBhdGNoMDA0OiBnZGItNi42LWJ6MjM3NTcyLXBwYy1h dG9taWMtc2VxdWVuY2UtdGVzdC5wYXRjaAogCi0jIE5ldyBsb2NhdGluZyBvZiB0aGUgbWF0Y2hp bmcgYmluYXJpZXMgZnJvbSB0aGUgcHVyZSBjb3JlIGZpbGUgKGJ1aWxkLWlkKS4KLSM9cHVzaCtq YW4KLVBhdGNoMDA1OiBnZGItNi42LWJ1aWxkaWQtbG9jYXRlLnBhdGNoCi0KLSMgRml4IGxvYWRp bmcgb2YgY29yZSBmaWxlcyB3aXRob3V0IGJ1aWxkLWlkcyBidXQgd2l0aCBidWlsZC1pZHMgaW4g ZXhlY3V0YWJsZXMuCi0jIExvYWQgc3RyaWN0bHkgYnVpbGQtaWQtY2hlY2tlZCBjb3JlIGZpbGVz IG9ubHkgaWYgbm8gZXhlY3V0YWJsZSBpcyBzcGVjaWZpZWQKLSMgKEphbiBLcmF0b2NodmlsLCBS SCBCWiAxMzM5ODYyKS4KLSM9cHVzaCtqYW4KLVBhdGNoMDA2OiBnZGItNi42LWJ1aWxkaWQtbG9j YXRlLXNvbGliLW1pc3NpbmctaWRzLnBhdGNoCi0KICMgVGVzdCBnY29yZSBtZW1vcnkgYW5kIHRp bWUgcmVxdWlyZW1lbnRzIGZvciBsYXJnZSBpbmZlcmlvcnMuCiAjPWZlZG9yYXRlc3QKLVBhdGNo MDA3OiBnZGItNi41LWdjb3JlLWJ1ZmZlci1saW1pdC10ZXN0LnBhdGNoCitQYXRjaDAwNTogZ2Ri LTYuNS1nY29yZS1idWZmZXItbGltaXQtdGVzdC5wYXRjaAogCiAjIFRlc3QgR0NPUkUgZm9yIHNo bWlkIDAgc2hhcmVkIG1lbW9yeSBtYXBwaW5ncy4KICM9ZmVkb3JhdGVzdDogQnV0IGl0IGlzIGJy b2tlbiBhbnl3YXksIHNvbWV0aW1lcyB0aGUgY2FzZSBiZWluZyB0ZXN0ZWQgaXMgbm90IHJlcHJv ZHVjaWJsZS4KLVBhdGNoMDA4OiBnZGItNi4zLW1hcHBpbmctemVyby1pbm9kZS10ZXN0LnBhdGNo CitQYXRjaDAwNjogZ2RiLTYuMy1tYXBwaW5nLXplcm8taW5vZGUtdGVzdC5wYXRjaAogCiAjIEZp eCByZXNvbHZpbmcgb2YgdmFyaWFibGVzIGF0IGxvY2F0aW9ucyBsaXN0cyBpbiBwcmVsaW5rZWQg bGlicyAoQlogNDY2OTAxKS4KICM9ZmVkb3JhdGVzdAotUGF0Y2gwMDk6IGdkYi02LjgtYno0NjY5 MDEtYmFja3RyYWNlLWZ1bGwtcHJlbGlua2VkLnBhdGNoCitQYXRjaDAwNzogZ2RiLTYuOC1iejQ2 NjkwMS1iYWNrdHJhY2UtZnVsbC1wcmVsaW5rZWQucGF0Y2gKIAogIyBGaXggZm9sbG93LWV4ZWMg Zm9yIEMrKyBwcm9ncmFtcyAoYnVncmVwb3J0ZWQgYnkgTWFydGluIFN0cmFuc2t5KS4KICM9ZmVk b3JhdGVzdAotUGF0Y2gwMTA6IGdkYi1hcmNoZXItbmV4dC1vdmVyLXRocm93LWN4eC1leGVjLnBh dGNoCitQYXRjaDAwODogZ2RiLWFyY2hlci1uZXh0LW92ZXItdGhyb3ctY3h4LWV4ZWMucGF0Y2gK IAogIyBbZGVsYXllZC1zeW1maWxlXSBUZXN0IGEgYmFja3RyYWNlIHJlZ3Jlc3Npb24gb24gQ0ZJ cyB3aXRob3V0IERJRSAoQlogNjE0NjA0KS4KICM9ZmVkb3JhdGVzdAotUGF0Y2gwMTE6IGdkYi10 ZXN0LWJ0LWNmaS13aXRob3V0LWRpZS5wYXRjaAorUGF0Y2gwMDk6IGdkYi10ZXN0LWJ0LWNmaS13 aXRob3V0LWRpZS5wYXRjaAogCiAjIFRlc3RjYXNlIGZvciBgU2V0dGluZyBzb2xpYi1hYnNvbHV0 ZS1wcmVmaXggYnJlYWtzIHZEU08nIChCWiA4MTgzNDMpLgogIz1mZWRvcmF0ZXN0Ci1QYXRjaDAx MjogZ2RiLXJoYnotODE4MzQzLXNldC1zb2xpYi1hYnNvbHV0ZS1wcmVmaXgtdGVzdGNhc2UucGF0 Y2gKLQotIyBGaXggJ2dkYiBnaXZlcyBoaWdobHkgbWlzbGVhZGluZyBlcnJvciB3aGVuIGRlYnVn aW5mbyBwa2cgaXMgcHJlc2VudCwKLSMgYnV0IG5vdCBjb3JyZXNwb25kaW5nIGJpbmFyeSBwa2cn IChSSCBCWiA5ODExNTQpLgotIz1wdXNoK2phbgotUGF0Y2gwMTM6IGdkYi02LjYtYnVpbGRpZC1s b2NhdGUtbWlzbGVhZGluZy13YXJuaW5nLW1pc3NpbmctZGVidWdpbmZvLXJoYno5ODExNTQucGF0 Y2gKK1BhdGNoMDEwOiBnZGItcmhiei04MTgzNDMtc2V0LXNvbGliLWFic29sdXRlLXByZWZpeC10 ZXN0Y2FzZS5wYXRjaAogCiAjIFRlc3RjYXNlIGZvciAnW1NBUF0gUmVjdXJzaXZlIGRsb3BlbiBj YXVzZXMgU0FQIEhBTkEgaW5zdGFsbGVyIHRvCiAjIGNyYXNoLicgKFJIIEJaIDExNTYxOTIpLgog Iz1mZWRvcmF0ZXN0Ci1QYXRjaDAxNDogZ2RiLXJoYnoxMTU2MTkyLXJlY3Vyc2l2ZS1kbG9wZW4t dGVzdC5wYXRjaAorUGF0Y2gwMTE6IGdkYi1yaGJ6MTE1NjE5Mi1yZWN1cnNpdmUtZGxvcGVuLXRl c3QucGF0Y2gKIAogIyBGaXggJ2BjYXRjaCBzeXNjYWxsJyBkb2Vzbid0IHdvcmsgZm9yIHBhcmVu dCBhZnRlciBgZm9yaycgaXMgY2FsbGVkJwogIyAoUGhpbGlwcGUgV2Fyb3F1aWVycywgUkggQlog MTE0OTIwNSkuCiAjPWZlZG9yYXRlc3QKLVBhdGNoMDE1OiBnZGItcmhiejExNDkyMDUtY2F0Y2gt c3lzY2FsbC1hZnRlci1mb3JrLXRlc3QucGF0Y2gKK1BhdGNoMDEyOiBnZGItcmhiejExNDkyMDUt Y2F0Y2gtc3lzY2FsbC1hZnRlci1mb3JrLXRlc3QucGF0Y2gKIAogIyBGaXggJ1twcGM2NF0gYW5k IFtzMzkweF0gd3JvbmcgcHJvbG9ndWUgc2tpcCBvbiAtTzIgLWcgY29kZScgKEphbgogIyBLcmF0 b2NodmlsLCBSSCBCWiAxMDg0NDA0KS4KICM9ZmVkb3JhdGVzdAotUGF0Y2gwMTY6IGdkYi1yaGJ6 MTA4NDQwNC1wcGM2NC1zMzkweC13cm9uZy1wcm9sb2d1ZS1za2lwLU8yLWctM29mMy5wYXRjaAor UGF0Y2gwMTM6IGdkYi1yaGJ6MTA4NDQwNC1wcGM2NC1zMzkweC13cm9uZy1wcm9sb2d1ZS1za2lw LU8yLWctM29mMy5wYXRjaAogCiAjIFthYXJjaDY0XSBGaXggaGFyZHdhcmUgd2F0Y2hwb2ludHMg KFJIIEJaIDEyNjE1NjQpLgogIz1mZWRvcmF0ZXN0Ci1QYXRjaDAxNzogZ2RiLXJoYnoxMjYxNTY0 LWFhcmNoNjQtaHctd2F0Y2hwb2ludC10ZXN0LnBhdGNoCitQYXRjaDAxNDogZ2RiLXJoYnoxMjYx NTY0LWFhcmNoNjQtaHctd2F0Y2hwb2ludC10ZXN0LnBhdGNoCiAKICMgVXBkYXRlIGdkYi1hZGQt aW5kZXguc2ggc3VjaCB0aGF0LCB3aGVuIHRoZSBHREIgZW52aXJvbm1lbnQKICMgdmFyaWFibGUg aXMgbm90IHNldCwgdGhlIHNjcmlwdCBpcyBzbWFydGVyIHRoYW4ganVzdCBsb29raW5nIGZvcgpA QCAtODQsMTQgKzY5LDQ3IEBAIFBhdGNoMDE3OiBnZGItcmhiejEyNjE1NjQtYWFyY2g2NC1ody13 YXRjaHBvaW50LXRlc3QucGF0Y2gKICMgICBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kv Q2hhbmdlcy9NaW5pbWFsX0dEQl9pbl9idWlsZHJvb3QKICMKICM9ZmVkb3JhCi1QYXRjaDAxODog Z2RiLWFkZC1pbmRleC5wYXRjaAorUGF0Y2gwMTU6IGdkYi1hZGQtaW5kZXgucGF0Y2gKIAotIyBC YWNrcG9ydCB1cHN0cmVhbSBjb21taXQgN2RiNzk1YmM2N2EuCi1QYXRjaDAxOTogZ2RiLXJlbW92 ZS11c2Utb2YtcHktaXNhc2NpaQorIyBCYWNrcG9ydCBvZiB1cHN0cmVhbSBjb21taXQgMzZmYjIw ZmE5MzQ4NGIxMDRkLiAgVGhpcyBpcyBub3QgcmVhbGx5CisjIHJlbGV2YW50IGZvciBvdXIgYnJh bmNoLCBidXQgbGF0ZXIgY29tbWl0cyB0aGF0IGFyZSBpbXBvcnRhbnQsIGFuZAorIyB3aGljaCB3 ZSB3YW50IHRvIGJhY2twb3J0LCBjb25mbGljdCB1bmxlc3MgdGhlIGNsZWFudXAgaW4gdGhpcwor IyBwYXRjaCBpcyBpbiBwbGFjZS4KKyMKKyMgVGhpcyBjb21taXQgd2lsbCBiZSBwYXJ0IG9mIEdE QiAxNiwgc28gdGhpcyBiYWNrLXBvcnQgc2hvdWxkIGRyb3AKKyMgb3V0IHdoZW4gd2UgcmViYXNl IG9udG8gR0RCIDE2LgorIworIyBnZGI6IHJlbW92ZSBRTlggTmV1dHJpbm8gc3VwcG9ydAorIwor IyBSZW1vdmUgdGhlIHN1cHBvcnQgZm9yIHRoZSBRTlggTmV1dHJpbm8gT1MgKHRkZXAgYW5kIG5h dGl2ZSBiaXRzKS4gIFRoaXMKKyMgaGFzIGJlZW4gdW5tYWludGFpbmVkIGZvciB5ZWFycywgYW5k IHdlIGRvbid0IGhhdmUgYSB3YXkgdG8gc2VlIGlmIGl0CisjIHdvcmtzIChvciBldmVuIGJ1aWxk cywgZm9yIHRoZSBuYXRpdmUgcGFydHMpLiAgV2l0aG91dCBzb21lYm9keSBhY3RpdmVseQorIyBt YWludGFpbmluZyBpdCwgdGhpcyBpcyBqdXN0IGEgYnVyZGVuIGZvciBkZXZlbG9wZXJzLCBlc3Bl Y2lhbGx5IHRoYXQKKyMgdGhpcyBwb3J0IGRvZXMgYSBmZXcgd2VpcmQgdW5pcXVlIHRoaW5ncyB0 aGF0IHJlcXVpcmUgcmVhc29uaW5nIGFib3V0CisjIHdoZW4gZG9pbmcgYmlnIGNoYW5nZS4KKyMK KyMgU3VwcG9ydCBmb3IgR0RCc2VydmVyIHdhcyByZW1vdmVkIGluIDIwMjAsIGNvbW1pdCA2MTNm MTQ5YTkwZDYKKyMgKCJnZGJzZXJ2ZXI6IHJlbW92ZSBzdXBwb3J0IGZvciBOZXV0cmlubyIpLgor IworIyBDaGFuZ2UtSWQ6IEk0ZTI1ZWMyNmFiMDY2MzY2MjlhZGViZDAyY2ViMTYxZWUzMWMyMzJk CisjIEFwcHJvdmVkLWJ5OiBLZXZpbiBCdWV0dG5lciA8a2V2aW5iQHJlZGhhdC5jb20+CitQYXRj aDAxNjogZ2RiLXJlbW92ZS1xbngtbmV1dHJpbm8tc3VwcG9ydC5wYXRjaAorCisjIEJhY2twb3J0 IHBhdGNoZXMgcmVsYXRlZCB0byBidWlsZC1pZCB1c2FnZSB3aGVuIG9wZW5pbmcgYSBjb3JlCisj IGZpbGUsIGFuZCBhbHNvIGltcHJvdmluZyBnZW5lcmFsIGJ1aWxkLWlkIGJhc2VkIGxvb2t1cC4g IFRoZXNlIHdpbGwKKyMgYWxsIGRyb3Agb3V0IHdoZW4gcmViYXNpbmcgdG8gR0RCIDE2LgorUGF0 Y2gwMTc6IGdkYi1iYWNrcG9ydC1idWlsZGlkLXJlbGF0ZWQtY2hhbmdlcy5wYXRjaAogCiAjIE5v dCBhIGJhY2twb3J0LiAgQWRkIGEgbmV3IHNjcmlwdCB3aGljaCBob29rcyBpbnRvIEdEQiBhbmQg c3VnZ2VzdHMKICMgUlBNcyB0byBpbnN0YWxsIHdoZW4gR0RCIGZpbmRzIGFuIG9iamZpbGUgd2l0 aCBubyBkZWJ1ZyBpbmZvLgotUGF0Y2gwMjA6IGdkYi1hZGQtcnBtLXN1Z2dlc3Rpb24tc2NyaXB0 LnBhdGNoCitQYXRjaDAxODogZ2RiLWFkZC1ycG0tc3VnZ2VzdGlvbi1zY3JpcHQucGF0Y2gKKwor IyBOb3QgYSBiYWNrcG9ydC4gIEFkZCBhIG5ldyBzY3JpcHQgd2hpY2ggZGVmaW5lcyBhIHNldHRp bmcgd2hpY2ggaXMKKyMgZGVwcmVjYXRlZCwgYnV0IHdlIGRvbid0IHdhbnQgdG8gcmVtb3ZlIGl0 IGZyb20gRmVkb3JhIEdEQiBqdXN0IHlldC4KK1BhdGNoMDE5OiBnZGItYWRkLWRlcHJlY2F0ZWQt c2V0dGluZ3MtcHktc2NyaXB0LnBhdGNoCisKKyMgVGVzdHMgYW5kIHRlc3QgdXBkYXRlcyByZWxh dGVkIHRvIHRoZSBycG0gc3VnZ2VzdGlvbiBmZWF0dXJlLgorUGF0Y2gwMjA6IGdkYi02LjYtYnVp bGRpZC1sb2NhdGUtdGVzdHMucGF0Y2gKIAogCiBQYXRjaDAyMTogZ2RiLWNhdGNocG9pbnQtcmUt c2V0LnBhdGNoCgpkaWZmIC0tZ2l0IGEvX3BhdGNoX29yZGVyIGIvX3BhdGNoX29yZGVyCmluZGV4 IGQyYWZlYWIuLjEyZTAwMmQgMTAwNjQ0Ci0tLSBhL19wYXRjaF9vcmRlcgorKysgYi9fcGF0Y2hf b3JkZXIKQEAgLTIsMjAgKzIsMjAgQEAgZ2RiLTYuMy1yaC10ZXN0dmVyc2lvbi0yMDA0MTIwMi5w YXRjaAogZ2RiLTYuMy1nc3RhY2stMjAwNTA0MTEucGF0Y2gKIGdkYi02LjUtYnoyMTgzNzktcHBj LXNvbGliLXRyYW1wb2xpbmUtdGVzdC5wYXRjaAogZ2RiLTYuNi1iejIzNzU3Mi1wcGMtYXRvbWlj LXNlcXVlbmNlLXRlc3QucGF0Y2gKLWdkYi02LjYtYnVpbGRpZC1sb2NhdGUucGF0Y2gKLWdkYi02 LjYtYnVpbGRpZC1sb2NhdGUtc29saWItbWlzc2luZy1pZHMucGF0Y2gKIGdkYi02LjUtZ2NvcmUt YnVmZmVyLWxpbWl0LXRlc3QucGF0Y2gKIGdkYi02LjMtbWFwcGluZy16ZXJvLWlub2RlLXRlc3Qu cGF0Y2gKIGdkYi02LjgtYno0NjY5MDEtYmFja3RyYWNlLWZ1bGwtcHJlbGlua2VkLnBhdGNoCiBn ZGItYXJjaGVyLW5leHQtb3Zlci10aHJvdy1jeHgtZXhlYy5wYXRjaAogZ2RiLXRlc3QtYnQtY2Zp LXdpdGhvdXQtZGllLnBhdGNoCiBnZGItcmhiei04MTgzNDMtc2V0LXNvbGliLWFic29sdXRlLXBy ZWZpeC10ZXN0Y2FzZS5wYXRjaAotZ2RiLTYuNi1idWlsZGlkLWxvY2F0ZS1taXNsZWFkaW5nLXdh cm5pbmctbWlzc2luZy1kZWJ1Z2luZm8tcmhiejk4MTE1NC5wYXRjaAogZ2RiLXJoYnoxMTU2MTky LXJlY3Vyc2l2ZS1kbG9wZW4tdGVzdC5wYXRjaAogZ2RiLXJoYnoxMTQ5MjA1LWNhdGNoLXN5c2Nh bGwtYWZ0ZXItZm9yay10ZXN0LnBhdGNoCiBnZGItcmhiejEwODQ0MDQtcHBjNjQtczM5MHgtd3Jv bmctcHJvbG9ndWUtc2tpcC1PMi1nLTNvZjMucGF0Y2gKIGdkYi1yaGJ6MTI2MTU2NC1hYXJjaDY0 LWh3LXdhdGNocG9pbnQtdGVzdC5wYXRjaAogZ2RiLWFkZC1pbmRleC5wYXRjaAotZ2RiLXJlbW92 ZS11c2Utb2YtcHktaXNhc2NpaQorZ2RiLXJlbW92ZS1xbngtbmV1dHJpbm8tc3VwcG9ydC5wYXRj aAorZ2RiLWJhY2twb3J0LWJ1aWxkaWQtcmVsYXRlZC1jaGFuZ2VzLnBhdGNoCiBnZGItYWRkLXJw bS1zdWdnZXN0aW9uLXNjcmlwdC5wYXRjaAorZ2RiLWFkZC1kZXByZWNhdGVkLXNldHRpbmdzLXB5 LXNjcmlwdC5wYXRjaAorZ2RiLTYuNi1idWlsZGlkLWxvY2F0ZS10ZXN0cy5wYXRjaAogZ2RiLWNh dGNocG9pbnQtcmUtc2V0LnBhdGNoCgpkaWZmIC0tZ2l0IGEvZ2RiLTYuNi1idWlsZGlkLWxvY2F0 ZS1taXNsZWFkaW5nLXdhcm5pbmctbWlzc2luZy1kZWJ1Z2luZm8tcmhiejk4MTE1NC5wYXRjaCBi L2dkYi02LjYtYnVpbGRpZC1sb2NhdGUtbWlzbGVhZGluZy13YXJuaW5nLW1pc3NpbmctZGVidWdp bmZvLXJoYno5ODExNTQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NWNi NmEuLjAwMDAwMDAKLS0tIGEvZ2RiLTYuNi1idWlsZGlkLWxvY2F0ZS1taXNsZWFkaW5nLXdhcm5p bmctbWlzc2luZy1kZWJ1Z2luZm8tcmhiejk4MTE1NC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0x LDEyOSArMCwwIEBACi1Gcm9tIEZFRE9SQV9QQVRDSEVTIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAw MQotRnJvbTogRmVkb3JhIEdEQiBwYXRjaGVzIDxpbnZhbGlkQGVtYWlsLmNvbT4KLURhdGU6IEZy aSwgMjcgT2N0IDIwMTcgMjE6MDc6NTAgKzAyMDAKLVN1YmplY3Q6IAotIGdkYi02LjYtYnVpbGRp ZC1sb2NhdGUtbWlzbGVhZGluZy13YXJuaW5nLW1pc3NpbmctZGVidWdpbmZvLXJoYno5ODExNTQu cGF0Y2gKLQotOzsgRml4ICdnZGIgZ2l2ZXMgaGlnaGx5IG1pc2xlYWRpbmcgZXJyb3Igd2hlbiBk ZWJ1Z2luZm8gcGtnIGlzIHByZXNlbnQsCi07OyBidXQgbm90IGNvcnJlc3BvbmRpbmcgYmluYXJ5 IHBrZycgKFJIIEJaIDk4MTE1NCkuCi07Oz1wdXNoK2phbgotCi1Db21tZW50cyBieSBTZXJnaW8g RHVyaWdhbiBKdW5pb3IgPHNlcmdpb2RqQHJlZGhhdC5jb20+OgotCi0gIFRoaXMgaXMgdGhlIGZp eCBmb3IgUkggQlogIzk4MTE1NAotCi0gIEl0IGlzIG1haW5seSBhIHRlc3RjYXNlIGFkZGl0aW9u LCBidXQgYSBtaW5vciBmaXggaW4gdGhlIGdkYi9idWlsZC1pZC5jCi0gIGZpbGUgd2FzIGFsc28g bmVlZGVkLgotCi0gIGdkYi9idWlsZC1pZC5jIHdhcyBhZGRlZCBieToKLQotICBjb21taXQgZGMy OTRiZTU0Yzk2NDE0MDM1ZWVkN2Q1M2RhZmRlYTBhNmYzMWE3MgotICBBdXRob3I6IFRvbSBUcm9t ZXkgPHRyb21leUByZWRoYXQuY29tPgotICBEYXRlOiAgIFR1ZSBPY3QgOCAxOTo1NjoxNSAyMDEz ICswMDAwCi0KLSAgYW5kIGhhZCBhIGxpdHRsZSB0aGlua28gdGhlcmUuICBUaGUgdmFyaWFibGUg J2ZpbGVuYW1lJyBuZWVkcyB0byBiZSBzZXQgdG8KLSAgTlVMTCBhZnRlciBpdCBpcyBmcmVlJ2Qs IG90aGVyd2lzZSB0aGUgY29kZSBiZWxvdyB0aGlua3MgdGhhdCBpdCBpcyBzdGlsbAotICB2YWxp ZCBhbmQgZG9lc24ndCBwcmludCB0aGUgbmVjZXNzYXJ5IHdhcm5pbmcgKCJUcnk6IHl1bSBpbnN0 YWxsIC4uLiIpLgotCi1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9yaGJ6OTgx MTU0LW1pc2xlYWRpbmcteXVtLWluc3RhbGwtd2FybmluZy5leHAgYi9nZGIvdGVzdHN1aXRlL2dk Yi5iYXNlL3JoYno5ODExNTQtbWlzbGVhZGluZy15dW0taW5zdGFsbC13YXJuaW5nLmV4cAotbmV3 IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2Ri LmJhc2Uvcmhiejk4MTE1NC1taXNsZWFkaW5nLXl1bS1pbnN0YWxsLXdhcm5pbmcuZXhwCi1AQCAt MCwwICsxLDk3IEBACi0rIyAgIENvcHlyaWdodCAoQykgMjAxNCAgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCi0rCi0rIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsjIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2Us IG9yCi0rIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKyMKLSsjIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKLSsjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0rIwotKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotKwotK3N0YW5k YXJkX3Rlc3RmaWxlICJub3JtYWwuYyIKLSsKLStpZiB7IFtwcmVwYXJlX2Zvcl90ZXN0aW5nICR7 dGVzdGZpbGV9LmV4cCAke3Rlc3RmaWxlfSAke3NyY2ZpbGV9XSB9IHsKLSsgICAgcmV0dXJuIC0x Ci0rfQotKwotKyMgR2V0IHRoZSBidWlsZC1pZCBvZiB0aGUgZmlsZQotK3NldCBidWlsZF9pZF9k ZWJ1Z19maWxlIFtidWlsZF9pZF9kZWJ1Z19maWxlbmFtZV9nZXQgJGJpbmZpbGVdCi0rcmVnc3Vi IC1hbGwgIi5kZWJ1ZyQiICRidWlsZF9pZF9kZWJ1Z19maWxlICIiIGJ1aWxkX2lkX3dpdGhvdXRf ZGVidWcKLSsKLSsjIFJ1biB0byBtYWluCi0raWYgeyAhW3J1bnRvX21haW5dIH0gewotKyAgICBy ZXR1cm4gLTEKLSt9Ci0rCi0rIyBXZSBmaXJzdCBuZWVkIHRvIGdlbmVyYXRlIGEgY29yZWZpbGUK LStzZXQgZXNjYXBlZGZpbGVuYW1lIFtzdHJpbmdfdG9fcmVnZXhwIFtzdGFuZGFyZF9vdXRwdXRf ZmlsZSBnY29yZS50ZXN0XV0KLStzZXQgY29yZV9zdXBwb3J0ZWQgMAotK2dkYl90ZXN0X211bHRp cGxlICJnY29yZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgZ2NvcmUudGVzdF0iIFwKLSsJInNhdmUg YSBjb3JlZmlsZSIgXAotK3sKLSsgIC1yZSAiU2F2ZWQgY29yZWZpbGUgJHtlc2NhcGVkZmlsZW5h bWV9XFtcclxuXF0rJGdkYl9wcm9tcHQgJCIgewotKyAgICBwYXNzICJzYXZlIGEgY29yZWZpbGUi Ci0rICAgIGdsb2JhbCBjb3JlX3N1cHBvcnRlZAotKyAgICBzZXQgY29yZV9zdXBwb3J0ZWQgMQot KyAgfQotKyAgLXJlICJDYW4ndCBjcmVhdGUgYSBjb3JlZmlsZVxbXHJcblxdKyRnZGJfcHJvbXB0 ICQiIHsKLSsgICAgdW5zdXBwb3J0ZWQgInNhdmUgYSBjb3JlZmlsZSIKLSsgICAgZ2xvYmFsIGNv cmVfc3VwcG9ydGVkCi0rICAgIHNldCBjb3JlX3N1cHBvcnRlZCAwCi0rICB9Ci0rfQotKwotK2lm IHshJGNvcmVfc3VwcG9ydGVkfSB7Ci0rICByZXR1cm4gLTEKLSt9Ci0rCi0rIyBNb3ZlIHRoZSBi aW5maWxlIHRvIGEgdGVtcG9yYXJ5IG5hbWUKLStyZW1vdGVfZXhlYyBidWlsZCAibXYgJGJpbmZp bGUgJHtiaW5maWxlfS5vbGQiCi0rCi0rIyBSZWluaXRpYWxpemUgR0RCIGFuZCBzZWUgaWYgd2Ug Z2V0IGEgeXVtL2RuZiB3YXJuaW5nCi0rZ2RiX2V4aXQKLStnZGJfc3RhcnQKLStnZGJfcmVpbml0 aWFsaXplX2RpciAkc3JjZGlyLyRzdWJkaXIKLSsKLSt3aXRoX3Rlc3RfcHJlZml4ICJmaXJzdCBy dW46IiB7Ci0rICAgIGdkYl90ZXN0ICJzZXQgYnVpbGQtaWQtdmVyYm9zZSAxIiAiIiBcCi0rCSJz ZXQgYnVpbGQtaWQtdmVyYm9zZSIKLSsKLSsgICAgZ2RiX3Rlc3QgInNldCBkZWJ1Zy1maWxlLWRp cmVjdG9yeSBbZmlsZSBkaXJuYW1lIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSBnY29yZS50ZXN0XV0i ICIiIFwKLSsJInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIKLSsKLSsgICAgZ2RiX3Rlc3QgImNv cmUtZmlsZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgZ2NvcmUudGVzdF0iIFwKLSsJIk1pc3Npbmcg c2VwYXJhdGUgZGVidWdpbmZvIGZvciB0aGUgbWFpbiBleGVjdXRhYmxlIGZpbGVcclxuVHJ5OiAo eXVtfGRuZikgLS1lbmFibGVyZXBvPSdcXCpkZWJ1Z1xcKicgaW5zdGFsbCBbc3RhbmRhcmRfb3V0 cHV0X2ZpbGUgJGJ1aWxkX2lkX3dpdGhvdXRfZGVidWddXHJcbi4qIiBcCi0rCSJ0ZXN0IGZpcnN0 IHl1bS9kbmYgd2FybmluZyIKLSt9Ci0rCi0rIyBOb3cgd2UgZGVmaW5lIGFuZCBjcmVhdGUgb3Vy IC5idWlsZC1pZAotK2ZpbGUgbWtkaXIgW2ZpbGUgZGlybmFtZSBbc3RhbmRhcmRfb3V0cHV0X2Zp bGUgJHtidWlsZF9pZF93aXRob3V0X2RlYnVnfV1dCi0rIyBDYW5ub3QgdXNlICJmaWxlIGxpbmsi IChmcm9tIFRDTCkgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGUgdGFyZ2V0IGZpbGUgdG8KLSsjIGV4 aXN0LgotK3JlbW90ZV9leGVjIGJ1aWxkICJsbiAtcyAkYmluZmlsZSBbc3RhbmRhcmRfb3V0cHV0 X2ZpbGUgJHtidWlsZF9pZF93aXRob3V0X2RlYnVnfV0iCi0rCi0rIyBSZWluaXRpYWxpemUgR0RC IHRvIGdldCB0aGUgc2Vjb25kIHl1bS9kbmYgd2FybmluZwotK2dkYl9leGl0Ci0rZ2RiX3N0YXJ0 Ci0rZ2RiX3JlaW5pdGlhbGl6ZV9kaXIgJHNyY2Rpci8kc3ViZGlyCi0rCi0rd2l0aF90ZXN0X3By ZWZpeCAic2Vjb25kIHJ1bjoiIHsKLSsgICAgZ2RiX3Rlc3QgInNldCBidWlsZC1pZC12ZXJib3Nl IDEiICIiIFwKLSsJInNldCBidWlsZC1pZC12ZXJib3NlIgotKwotKyAgICBnZGJfdGVzdCAic2V0 IGRlYnVnLWZpbGUtZGlyZWN0b3J5IFtmaWxlIGRpcm5hbWUgW3N0YW5kYXJkX291dHB1dF9maWxl IGdjb3JlLnRlc3RdXSIgIiIgXAotKwkic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5IgotKwotKyAg ICBnZGJfdGVzdCAiY29yZS1maWxlIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSBnY29yZS50ZXN0XSIg XAotKwkiTWlzc2luZyBzZXBhcmF0ZSBkZWJ1Z2luZm8gZm9yIHRoZSBtYWluIGV4ZWN1dGFibGUg ZmlsZVxyXG5Ucnk6ICh5dW18ZG5mKSAtLWVuYWJsZXJlcG89J1xcKmRlYnVnXFwqJyBpbnN0YWxs ICRiaW5maWxlXHJcbi4qIiBcCi0rCSJ0ZXN0IHNlY29uZCB5dW0vZG5mIHdhcm5pbmciCi0rfQot KwotKyMgTGVhdmluZyB0aGUgbGluayB0aGVyZSB3aWxsIGNhdXNlIGJyZWFrYWdlIGluIHRoZSBu ZXh0IHJ1bi4KLStyZW1vdGVfZXhlYyBidWlsZCAicm0gLWYgW3N0YW5kYXJkX291dHB1dF9maWxl ICR7YnVpbGRfaWRfd2l0aG91dF9kZWJ1Z31dIgoKZGlmZiAtLWdpdCBhL2dkYi02LjYtYnVpbGRp ZC1sb2NhdGUtc29saWItbWlzc2luZy1pZHMucGF0Y2ggYi9nZGItNi42LWJ1aWxkaWQtbG9jYXRl LXNvbGliLW1pc3NpbmctaWRzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4 OTdmNjkxLi4wMDAwMDAwCi0tLSBhL2dkYi02LjYtYnVpbGRpZC1sb2NhdGUtc29saWItbWlzc2lu Zy1pZHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNjIgKzAsMCBAQAotRnJvbSBGRURPUkFf UEFUQ0hFUyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEZlZG9yYSBHREIgcGF0Y2hl cyA8aW52YWxpZEBlbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI3IE9jdCAyMDE3IDIxOjA3OjUwICsw MjAwCi1TdWJqZWN0OiBnZGItNi42LWJ1aWxkaWQtbG9jYXRlLXNvbGliLW1pc3NpbmctaWRzLnBh dGNoCi0KLTs7IEZpeCBsb2FkaW5nIG9mIGNvcmUgZmlsZXMgd2l0aG91dCBidWlsZC1pZHMgYnV0 IHdpdGggYnVpbGQtaWRzIGluIGV4ZWN1dGFibGVzLgotOzsgTG9hZCBzdHJpY3RseSBidWlsZC1p ZC1jaGVja2VkIGNvcmUgZmlsZXMgb25seSBpZiBubyBleGVjdXRhYmxlIGlzIHNwZWNpZmllZAot OzsgKEphbiBLcmF0b2NodmlsLCBSSCBCWiAxMzM5ODYyKS4KLTs7PXB1c2gramFuCi0KLWdkYiBy ZXR1cm5zIGFuIGluY29ycmVjdCBiYWNrIHRyYWNlIHdoZW4gYXBwbHlpbmcgYSBkZWJ1Z2luZm8K LWh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTMzOTg2MgotCi1k aWZmIC0tZ2l0IGEvZ2RiL3NvbGliLXN2cjQuYyBiL2dkYi9zb2xpYi1zdnI0LmMKLS0tLSBhL2dk Yi9zb2xpYi1zdnI0LmMKLSsrKyBiL2dkYi9zb2xpYi1zdnI0LmMKLUBAIC0zNDcsMTEgKzM0Nywx MyBAQCBsbV9hZGRyX2NoZWNrIChjb25zdCBzb2xpYiAmc28sIGJmZCAqYWJmZCkKLSAKLSBzdHJ1 Y3Qgc3ZyNF9zbwotIHsKLS0gIHN2cjRfc28gKGNvbnN0IGNoYXIgKm5hbWUsIGxtX2luZm9fc3Zy NF91cCBsbV9pbmZvKQotLSAgICA6IG5hbWUgKG5hbWUpLCBsbV9pbmZvIChzdGQ6Om1vdmUgKGxt X2luZm8pKQotKyAgc3ZyNF9zbyAoY29uc3QgY2hhciAqbmFtZSwgbG1faW5mb19zdnI0X3VwIGxt X2luZm8sIGNvbnN0IGNoYXIgKm9yaWdfbmFtZSA9IG51bGxwdHIpCi0rICAgIDogbmFtZSAobmFt ZSksIG9yaWdpbmFsX25hbWUgKG9yaWdfbmFtZSA9PSBudWxscHRyID8gbmFtZSA6IG9yaWdfbmFt ZSksCi0rICAgIGxtX2luZm8gKHN0ZDo6bW92ZSAobG1faW5mbykpCi0gICB7fQotIAotICAgc3Rk OjpzdHJpbmcgbmFtZTsKLSsgIHN0ZDo6c3RyaW5nIG9yaWdpbmFsX25hbWU7Ci0gICBsbV9pbmZv X3N2cjRfdXAgbG1faW5mbzsKLSB9OwotIAotQEAgLTEwMDIsNiArMTAwNCw3IEBAIHNvX2xpc3Rf ZnJvbV9zdnI0X3NvcyAoY29uc3Qgc3RkOjp2ZWN0b3I8c3ZyNF9zbz4gJnNvcykKLSAKLSAgICAg ICBuZXdvYmotPnNvX25hbWUgPSBzby5uYW1lOwotICAgICAgIG5ld29iai0+c29fb3JpZ2luYWxf bmFtZSA9IHNvLm5hbWU7Ci0rICAgICAgbmV3b2JqLT5zb19vcmlnaW5hbF9uYW1lID0gc28ub3Jp Z2luYWxfbmFtZTsKLSAgICAgICBuZXdvYmotPmxtX2luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPGxt X2luZm9fc3ZyND4gKCpzby5sbV9pbmZvKTsKLSAKLSAgICAgICBkc3QucHVzaF9iYWNrICgqbmV3 b2JqKTsKLUBAIC0xMjYzLDExICsxMjY2LDI4IEBAIHN2cjRfcmVhZF9zb19saXN0IChzdnI0X2lu Zm8gKmluZm8sIENPUkVfQUREUiBsbSwgQ09SRV9BRERSIHByZXZfbG0sCi0gCSAgY29udGludWU7 Ci0gCX0KLSAKLSsgICAgICAvKiBQcmVzZXJ2ZSBvcmlnaW5hbCBuYW1lIHNpbmNlIG5hbWUgbWF5 IGJlIGNoYW5nZWQgYmVsb3cuICAqLwotKyAgICAgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNo YXI+IG9yaWdpbmFsX25hbWUgPSBtYWtlX3VuaXF1ZV94c3RyZHVwIChuYW1lLmdldCAoKSk7Ci0g CXsKLS0JICBzdHJ1Y3QgYmZkX2J1aWxkX2lkICpidWlsZF9pZDsKLSsJICBzdHJ1Y3QgYmZkX2J1 aWxkX2lkICpidWlsZF9pZCA9IG51bGxwdHI7Ci0gCi0tCSAgYnVpbGRfaWQgPSBidWlsZF9pZF9h ZGRyX2dldCAobGktPmxfbGQpOwotLQkgIGlmIChidWlsZF9pZCAhPSBOVUxMKQotKwkgIC8qIElu IHRoZSBjYXNlIHRoZSBtYWluIGV4ZWN1dGFibGUgd2FzIGZvdW5kIGFjY29yZGluZyB0byBpdHMg YnVpbGQtaWQKLSsJICAgICAoZnJvbSBhIGNvcmUgZmlsZSkgcHJldmVudCBsb2FkaW5nIGEgZGlm ZmVyZW50IGJ1aWxkIG9mIGEgbGlicmFyeQotKwkgICAgIHdpdGggYWNjaWRlbnRhbGx5IHRoZSBz YW1lIFNPX05BTUUuCi0rCi0rCSAgICAgSXQgc3VwcHJlc3NlcyBib2d1cyBiYWNrdHJhY2VzIChh bmQgcHJpbnRzICI/PyIgdGhlcmUgaW5zdGVhZCkgaWYKLSsJICAgICB0aGUgb24tZGlzayBmaWxl cyBubyBsb25nZXIgbWF0Y2ggdGhlIHJ1bm5pbmcgcHJvZ3JhbSB2ZXJzaW9uLgotKwkgICAgIElm IHRoZSBtYWluIGV4ZWN1dGFibGUgd2FzIG5vdCBsb2FkZWQgYWNjb3JkaW5nIHRvIGl0cyBidWls ZC1pZCBkbwotKwkgICAgIG5vdCBkbyBhbnkgYnVpbGQtaWQgY2hlY2tpbmcgb2YgdGhlIGxpYnJh cmllcy4gIFRoZXJlIG1heSBiZSBtaXNzaW5nCi0rCSAgICAgYnVpbGQtaWRzIGR1bXBlZCBpbiB0 aGUgY29yZSBmaWxlIGFuZCB3ZSB3b3VsZCBtYXAgYWxsIHRoZSBsaWJyYXJpZXMKLSsJICAgICB0 byB0aGUgb25seSBleGlzdGluZyBmaWxlIGxvYWRlZCB0aGF0IHRpbWUgLSB0aGUgZXhlY3V0YWJs ZS4gICovCi0rCSAgaWYgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+c3ltZmlsZV9vYmplY3RfZmls ZSAhPSBOVUxMCi0rCSAgICAgICYmIChjdXJyZW50X3Byb2dyYW1fc3BhY2UtPnN5bWZpbGVfb2Jq ZWN0X2ZpbGUtPmZsYWdzCi0rCQkgICYgT0JKRl9CVUlMRF9JRF9DT1JFX0xPQURFRCkgIT0gMCkK LSsJICAgIGJ1aWxkX2lkID0gYnVpbGRfaWRfYWRkcl9nZXQgKGxpLT5sX2xkKTsKLSsKLSsKLSsJ ICBpZiAoYnVpbGRfaWQgIT0gbnVsbHB0cikKLSAJICAgIHsKLSAJICAgICAgY2hhciAqYmlkX25h bWUsICpidWlsZF9pZF9maWxlbmFtZTsKLSAKLUBAIC0xMjgwLDIzICsxMzAwLDcgQEAgc3ZyNF9y ZWFkX3NvX2xpc3QgKHN2cjRfaW5mbyAqaW5mbywgQ09SRV9BRERSIGxtLCBDT1JFX0FERFIgcHJl dl9sbSwKLSAJCSAgeGZyZWUgKGJpZF9uYW1lKTsKLSAJCX0KLSAJICAgICAgZWxzZQotLQkJewot LQkJICBkZWJ1Z19wcmludF9taXNzaW5nIChuYW1lLmdldCAoKSwgYnVpbGRfaWRfZmlsZW5hbWUp OwotLQotLQkJICAvKiBJbiB0aGUgY2FzZSB0aGUgbWFpbiBleGVjdXRhYmxlIHdhcyBmb3VuZCBh Y2NvcmRpbmcgdG8KLS0JCSAgICAgaXRzIGJ1aWxkLWlkIChmcm9tIGEgY29yZSBmaWxlKSBwcmV2 ZW50IGxvYWRpbmcKLS0JCSAgICAgYSBkaWZmZXJlbnQgYnVpbGQgb2YgYSBsaWJyYXJ5IHdpdGgg YWNjaWRlbnRhbGx5IHRoZQotLQkJICAgICBzYW1lIFNPX05BTUUuCi0tCi0tCQkgICAgIEl0IHN1 cHByZXNzZXMgYm9ndXMgYmFja3RyYWNlcyAoYW5kIHByaW50cyAiPz8iIHRoZXJlCi0tCQkgICAg IGluc3RlYWQpIGlmIHRoZSBvbi1kaXNrIGZpbGVzIG5vIGxvbmdlciBtYXRjaCB0aGUKLS0JCSAg ICAgcnVubmluZyBwcm9ncmFtIHZlcnNpb24uICAqLwotLQotLQkJICBpZiAoY3VycmVudF9wcm9n cmFtX3NwYWNlLT5zeW1maWxlX29iamVjdF9maWxlICE9IE5VTEwKLS0JCSAgICAgICYmIChjdXJy ZW50X3Byb2dyYW1fc3BhY2UtPnN5bWZpbGVfb2JqZWN0X2ZpbGUtPmZsYWdzCi0tCQkJICAmIE9C SkZfQlVJTERfSURfQ09SRV9MT0FERUQpICE9IDApCi0tCQkgICAgbmFtZSA9IG1ha2VfdW5pcXVl X3hzdHJkdXAgKCIiKTsKLS0JCX0KLSsJCWRlYnVnX3ByaW50X21pc3NpbmcgKG5hbWUuZ2V0ICgp LCBidWlsZF9pZF9maWxlbmFtZSk7Ci0gCi0gCSAgICAgIHhmcmVlIChidWlsZF9pZF9maWxlbmFt ZSk7Ci0gCSAgICAgIHhmcmVlIChidWlsZF9pZCk7Ci1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0 ZS9nZGIuYmFzZS9nY29yZS1idWlsZGlkLWV4ZWMtYnV0LW5vdC1zb2xpYi1saWIuYyBiL2dkYi90 ZXN0c3VpdGUvZ2RiLmJhc2UvZ2NvcmUtYnVpbGRpZC1leGVjLWJ1dC1ub3Qtc29saWItbGliLmMK LW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nZGIvdGVzdHN1aXRl L2dkYi5iYXNlL2djb3JlLWJ1aWxkaWQtZXhlYy1idXQtbm90LXNvbGliLWxpYi5jCi1AQCAtMCww ICsxLDIxIEBACi0rLyogQ29weXJpZ2h0IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCi0rCi0rICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgotKwotKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 Ci0rICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKLSsgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCi0rCi0rICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rICAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsgICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQotKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLSsKLSt2b2lkCi0rbGliICh2b2lkKQotK3sKLSt9 Ci1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9nY29yZS1idWlsZGlkLWV4ZWMt YnV0LW5vdC1zb2xpYi1tYWluLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2djb3JlLWJ1aWxk aWQtZXhlYy1idXQtbm90LXNvbGliLW1haW4uYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAv ZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ2NvcmUtYnVpbGRpZC1leGVj LWJ1dC1ub3Qtc29saWItbWFpbi5jCi1AQCAtMCwwICsxLDI1IEBACi0rLyogQ29weXJpZ2h0IDIw MTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rICAgVGhpcyBmaWxlIGlzIHBh cnQgb2YgR0RCLgotKwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsgICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgotKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rICAgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCi0rICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKLSsgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KLSsKLSsgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyAgIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8K LSsKLStleHRlcm4gdm9pZCBsaWIgKHZvaWQpOwotKwotK2ludAotK21haW4gKHZvaWQpCi0rewot KyAgbGliICgpOwotKyAgcmV0dXJuIDA7Ci0rfQotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUv Z2RiLmJhc2UvZ2NvcmUtYnVpbGRpZC1leGVjLWJ1dC1ub3Qtc29saWIuZXhwIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIuYmFzZS9nY29yZS1idWlsZGlkLWV4ZWMtYnV0LW5vdC1zb2xpYi5leHAKLW5ldyBm aWxlIG1vZGUgMTAwNjQ0Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5i YXNlL2djb3JlLWJ1aWxkaWQtZXhlYy1idXQtbm90LXNvbGliLmV4cAotQEAgLTAsMCArMSwxMDQg QEAKLSsjIENvcHlyaWdodCAyMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKwot KyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKLSsjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rIyBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCi0rIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyMK LSsjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCi0rIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSsKLStyZXF1aXJlIGFsbG93X3NobGliX3Rl c3RzCi0rCi0rc2V0IHRlc3RmaWxlICJnY29yZS1idWlsZGlkLWV4ZWMtYnV0LW5vdC1zb2xpYiIK LStzZXQgc3JjbWFpbmZpbGUgJHt0ZXN0ZmlsZX0tbWFpbi5jCi0rc2V0IHNyY2xpYmZpbGUgJHt0 ZXN0ZmlsZX0tbGliLmMKLStzZXQgbGliZmlsZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJHt0ZXN0 ZmlsZX0tbGliLnNvXQotK3NldCBvYmpmaWxlIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAke3Rlc3Rm aWxlfS1tYWluLm9dCi0rc2V0IGV4ZWN1dGFibGUgJHt0ZXN0ZmlsZX0tbWFpbgotK3NldCBiaW5m aWxlIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAke2V4ZWN1dGFibGV9XQotK3NldCBnY29yZWZpbGUg W3N0YW5kYXJkX291dHB1dF9maWxlICR7ZXhlY3V0YWJsZX0uZ2NvcmVdCi0rc2V0IG91dGRpciBb ZmlsZSBkaXJuYW1lICRiaW5maWxlXQotKwotK2lmIHsgW2dkYl9jb21waWxlX3NobGliICR7c3Jj ZGlyfS8ke3N1YmRpcn0vJHtzcmNsaWJmaWxlfSAke2xpYmZpbGV9ICJkZWJ1ZyBhZGRpdGlvbmFs X2ZsYWdzPS1XbCwtLWJ1aWxkLWlkIl0gIT0gIiIKLSsgICAgIHx8IFtnZGJfY29tcGlsZSAke3Ny Y2Rpcn0vJHtzdWJkaXJ9LyR7c3JjbWFpbmZpbGV9ICR7b2JqZmlsZX0gb2JqZWN0IHtkZWJ1Z31d ICE9ICIiIH0gewotKyAgICAgdW5zdXBwb3J0ZWQgIi1XbCwtLWJ1aWxkLWlkIGNvbXBpbGF0aW9u IGZhaWxlZCIKLSsgICAgIHJldHVybiAtMQotK30KLStzZXQgb3B0cyBbbGlzdCBkZWJ1ZyBzaGxp Yj0ke2xpYmZpbGV9ICJhZGRpdGlvbmFsX2ZsYWdzPS1XbCwtLWJ1aWxkLWlkIl0KLStpZiB7IFtn ZGJfY29tcGlsZSAke29iamZpbGV9ICR7YmluZmlsZX0gZXhlY3V0YWJsZSAkb3B0c10gIT0gIiIg fSB7Ci0rICAgICB1bnN1cHBvcnRlZCAiLVdsLC0tYnVpbGQtaWQgY29tcGlsYXRpb24gZmFpbGVk IgotKyAgICAgcmV0dXJuIC0xCi0rfQotKwotK2NsZWFuX3Jlc3RhcnQgJGV4ZWN1dGFibGUKLStn ZGJfbG9hZF9zaGxpYiAkbGliZmlsZQotKwotKyMgRG9lcyB0aGlzIGdkYiBzdXBwb3J0IGdjb3Jl PwotK3NldCB0ZXN0ICJoZWxwIGdjb3JlIgotK2dkYl90ZXN0X211bHRpcGxlICR0ZXN0ICR0ZXN0 IHsKLSsgICAgLXJlICJVbmRlZmluZWQgY29tbWFuZDogLmdjb3JlLipcclxuJGdkYl9wcm9tcHQg JCIgewotKwkjIGdjb3JlIGNvbW1hbmQgbm90IHN1cHBvcnRlZCAtLSBub3RoaW5nIHRvIHRlc3Qg aGVyZS4KLSsJdW5zdXBwb3J0ZWQgImdkYiBkb2VzIG5vdCBzdXBwb3J0IGdjb3JlIG9uIHRoaXMg dGFyZ2V0IgotKwlyZXR1cm4gLTE7Ci0rICAgIH0KLSsgICAgLXJlICJTYXZlIGEgY29yZSBmaWxl IC4qXHJcbiRnZGJfcHJvbXB0ICQiIHsKLSsJcGFzcyAkdGVzdAotKyAgICB9Ci0rfQotKwotK2lm IHsgIVtydW50byBsaWJdIH0gdGhlbiB7Ci0rICAgIHJldHVybiAtMQotK30KLSsKLStzZXQgZXNj YXBlZGZpbGVuYW1lIFtzdHJpbmdfdG9fcmVnZXhwICR7Z2NvcmVmaWxlfV0KLSsKLStzZXQgdGVz dCAic2F2ZSBhIGNvcmVmaWxlIgotK2dkYl90ZXN0X211bHRpcGxlICJnY29yZSAke2djb3JlZmls ZX0iICR0ZXN0IHsKLSsgICAgLXJlICJTYXZlZCBjb3JlZmlsZSAke2VzY2FwZWRmaWxlbmFtZX1c clxuJGdkYl9wcm9tcHQgJCIgewotKwlwYXNzICR0ZXN0Ci0rICAgIH0KLSsgICAgLXJlICJDYW4n dCBjcmVhdGUgYSBjb3JlZmlsZVxyXG4kZ2RiX3Byb21wdCAkIiB7Ci0rCXVuc3VwcG9ydGVkICR0 ZXN0Ci0rCXJldHVybiAtMQotKyAgICB9Ci0rfQotKwotKyMgTm93IHJlc3RhcnQgZ2RiIGFuZCBs b2FkIHRoZSBjb3JlZmlsZS4KLSsKLStjbGVhbl9yZXN0YXJ0ICRleGVjdXRhYmxlCi0rZ2RiX2xv YWRfc2hsaWIgJGxpYmZpbGUKLSsKLStzZXQgYnVpbGRpZCBbYnVpbGRfaWRfZGVidWdfZmlsZW5h bWVfZ2V0ICRsaWJmaWxlXQotKwotK3JlZ3N1YiB7XC5kZWJ1ZyR9ICRidWlsZGlkIHt9IGJ1aWxk aWQKLSsKLStzZXQgZGVidWdkaXIgW3N0YW5kYXJkX291dHB1dF9maWxlICR7dGVzdGZpbGV9LWRl YnVnZGlyXQotK2ZpbGUgZGVsZXRlIC1mb3JjZSAtLSAkZGVidWdkaXIKLSsKLStmaWxlIG1rZGly ICRkZWJ1Z2Rpci9bZmlsZSBkaXJuYW1lICRsaWJmaWxlXQotK2ZpbGUgY29weSAkbGliZmlsZSAk ZGVidWdkaXIvJHtsaWJmaWxlfQotKwotK2ZpbGUgbWtkaXIgJGRlYnVnZGlyL1tmaWxlIGRpcm5h bWUgJGJ1aWxkaWRdCi0rZmlsZSBjb3B5ICRsaWJmaWxlICRkZWJ1Z2Rpci8ke2J1aWxkaWR9Ci0r Ci0rcmVtb3RlX2V4ZWMgYnVpbGQgImxuIC1zIC9saWIgICAgICAgJHtkZWJ1Z2Rpcn0vIgotK3Jl bW90ZV9leGVjIGJ1aWxkICJsbiAtcyAvbGliNjQgICAgICR7ZGVidWdkaXJ9LyIKLSsjIC91c3Ig aXMgbm90IG5lZWRlZCwgYWxsIHRoZSBsaWJzIGFyZSBpbiAvbGliNjQ6IGxpYm0uc28uNiBsaWJj LnNvLjYgbGQtbGludXgteDg2LTY0LnNvLjIKLSsKLStnZGJfdGVzdF9ub19vdXRwdXQgInNldCBz b2xpYi1hYnNvbHV0ZS1wcmVmaXggJGRlYnVnZGlyIiBcCi0rICAgICJzZXQgc29saWItYWJzb2x1 dGUtcHJlZml4IgotKwotK2dkYl90ZXN0X25vX291dHB1dCAic2V0IGRlYnVnLWZpbGUtZGlyZWN0 b3J5ICRkZWJ1Z2RpciIgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIKLSsKLStnZGJfdGVzdCAi Y29yZSAke2djb3JlZmlsZX0iICJDb3JlIHdhcyBnZW5lcmF0ZWQgYnkgLioiICJyZS1sb2FkIGdl bmVyYXRlZCBjb3JlZmlsZSIKLSsKLStnZGJfdGVzdCAiZnJhbWUiICIjMCBcW15cclxuXF0qIGxp YiAuKiIgImxpYnJhcnkgZ290IGxvYWRlZCIKLSsKLStnZGJfdGVzdCAiYnQiCi0rZ2RiX3Rlc3Qg ImluZm8gc2hhcmVkIgoKZGlmZiAtLWdpdCBhL2dkYi02LjYtYnVpbGRpZC1sb2NhdGUtdGVzdHMu cGF0Y2ggYi9nZGItNi42LWJ1aWxkaWQtbG9jYXRlLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYWU0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9nZGItNi42 LWJ1aWxkaWQtbG9jYXRlLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjM3IEBACitGcm9tIEZFRE9S QV9QQVRDSEVTIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVkb3JhIEdEQiBwYXRj aGVzIDxpbnZhbGlkQGVtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjcgT2N0IDIwMTcgMjE6MDc6NTAg KzAyMDAKK1N1YmplY3Q6IGdkYi02LjYtYnVpbGRpZC1sb2NhdGUtdGVzdHMucGF0Y2gKKworOzsg VGVzdHMgYW5kIHRlc3QgdXBkYXRlcyByZWxhdGVkIHRvIHRoZSBycG0gc3VnZ2VzdGlvbiBmZWF0 dXJlLgorCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9nY29yZS1idWlsZGlk LWV4ZWMtYnV0LW5vdC1zb2xpYi1saWIuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ2NvcmUt YnVpbGRpZC1leGVjLWJ1dC1ub3Qtc29saWItbGliLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Cist LS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2djb3JlLWJ1aWxkaWQt ZXhlYy1idXQtbm90LXNvbGliLWxpYi5jCitAQCAtMCwwICsxLDIxIEBACisrLyogQ29weXJpZ2h0 IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBmaWxlIGlz IHBhcnQgb2YgR0RCLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKysKKyt2b2lkCisrbGliICh2b2lkKQorK3sKKyt9CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3Rz dWl0ZS9nZGIuYmFzZS9nY29yZS1idWlsZGlkLWV4ZWMtYnV0LW5vdC1zb2xpYi1tYWluLmMgYi9n ZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2djb3JlLWJ1aWxkaWQtZXhlYy1idXQtbm90LXNvbGliLW1h aW4uYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi90ZXN0 c3VpdGUvZ2RiLmJhc2UvZ2NvcmUtYnVpbGRpZC1leGVjLWJ1dC1ub3Qtc29saWItbWFpbi5jCitA QCAtMCwwICsxLDI1IEBACisrLyogQ29weXJpZ2h0IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisrCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorKworKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysg ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKytleHRlcm4gdm9pZCBsaWIgKHZv aWQpOworKworK2ludAorK21haW4gKHZvaWQpCisreworKyAgbGliICgpOworKyAgcmV0dXJuIDA7 CisrfQorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ2NvcmUtYnVpbGRpZC1l eGVjLWJ1dC1ub3Qtc29saWIuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9nY29yZS1idWls ZGlkLWV4ZWMtYnV0LW5vdC1zb2xpYi5leHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rl di9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2djb3JlLWJ1aWxkaWQtZXhlYy1i dXQtbm90LXNvbGliLmV4cAorQEAgLTAsMCArMSwxMDQgQEAKKysjIENvcHlyaWdodCAyMDE2IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKysKKytyZXF1aXJlIGFsbG93X3NobGliX3Rlc3RzCisrCisrc2V0IHRlc3RmaWxlICJn Y29yZS1idWlsZGlkLWV4ZWMtYnV0LW5vdC1zb2xpYiIKKytzZXQgc3JjbWFpbmZpbGUgJHt0ZXN0 ZmlsZX0tbWFpbi5jCisrc2V0IHNyY2xpYmZpbGUgJHt0ZXN0ZmlsZX0tbGliLmMKKytzZXQgbGli ZmlsZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJHt0ZXN0ZmlsZX0tbGliLnNvXQorK3NldCBvYmpm aWxlIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAke3Rlc3RmaWxlfS1tYWluLm9dCisrc2V0IGV4ZWN1 dGFibGUgJHt0ZXN0ZmlsZX0tbWFpbgorK3NldCBiaW5maWxlIFtzdGFuZGFyZF9vdXRwdXRfZmls ZSAke2V4ZWN1dGFibGV9XQorK3NldCBnY29yZWZpbGUgW3N0YW5kYXJkX291dHB1dF9maWxlICR7 ZXhlY3V0YWJsZX0uZ2NvcmVdCisrc2V0IG91dGRpciBbZmlsZSBkaXJuYW1lICRiaW5maWxlXQor KworK2lmIHsgW2dkYl9jb21waWxlX3NobGliICR7c3JjZGlyfS8ke3N1YmRpcn0vJHtzcmNsaWJm aWxlfSAke2xpYmZpbGV9ICJkZWJ1ZyBhZGRpdGlvbmFsX2ZsYWdzPS1XbCwtLWJ1aWxkLWlkIl0g IT0gIiIKKysgICAgIHx8IFtnZGJfY29tcGlsZSAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7c3JjbWFp bmZpbGV9ICR7b2JqZmlsZX0gb2JqZWN0IHtkZWJ1Z31dICE9ICIiIH0geworKyAgICAgdW5zdXBw b3J0ZWQgIi1XbCwtLWJ1aWxkLWlkIGNvbXBpbGF0aW9uIGZhaWxlZCIKKysgICAgIHJldHVybiAt MQorK30KKytzZXQgb3B0cyBbbGlzdCBkZWJ1ZyBzaGxpYj0ke2xpYmZpbGV9ICJhZGRpdGlvbmFs X2ZsYWdzPS1XbCwtLWJ1aWxkLWlkIl0KKytpZiB7IFtnZGJfY29tcGlsZSAke29iamZpbGV9ICR7 YmluZmlsZX0gZXhlY3V0YWJsZSAkb3B0c10gIT0gIiIgfSB7CisrICAgICB1bnN1cHBvcnRlZCAi LVdsLC0tYnVpbGQtaWQgY29tcGlsYXRpb24gZmFpbGVkIgorKyAgICAgcmV0dXJuIC0xCisrfQor KworK2NsZWFuX3Jlc3RhcnQgJGV4ZWN1dGFibGUKKytnZGJfbG9hZF9zaGxpYiAkbGliZmlsZQor KworKyMgRG9lcyB0aGlzIGdkYiBzdXBwb3J0IGdjb3JlPworK3NldCB0ZXN0ICJoZWxwIGdjb3Jl IgorK2dkYl90ZXN0X211bHRpcGxlICR0ZXN0ICR0ZXN0IHsKKysgICAgLXJlICJVbmRlZmluZWQg Y29tbWFuZDogLmdjb3JlLipcclxuJGdkYl9wcm9tcHQgJCIgeworKwkjIGdjb3JlIGNvbW1hbmQg bm90IHN1cHBvcnRlZCAtLSBub3RoaW5nIHRvIHRlc3QgaGVyZS4KKysJdW5zdXBwb3J0ZWQgImdk YiBkb2VzIG5vdCBzdXBwb3J0IGdjb3JlIG9uIHRoaXMgdGFyZ2V0IgorKwlyZXR1cm4gLTE7Cisr ICAgIH0KKysgICAgLXJlICJTYXZlIGEgY29yZSBmaWxlIC4qXHJcbiRnZGJfcHJvbXB0ICQiIHsK KysJcGFzcyAkdGVzdAorKyAgICB9CisrfQorKworK2lmIHsgIVtydW50byBsaWJdIH0gdGhlbiB7 CisrICAgIHJldHVybiAtMQorK30KKysKKytzZXQgZXNjYXBlZGZpbGVuYW1lIFtzdHJpbmdfdG9f cmVnZXhwICR7Z2NvcmVmaWxlfV0KKysKKytzZXQgdGVzdCAic2F2ZSBhIGNvcmVmaWxlIgorK2dk Yl90ZXN0X211bHRpcGxlICJnY29yZSAke2djb3JlZmlsZX0iICR0ZXN0IHsKKysgICAgLXJlICJT YXZlZCBjb3JlZmlsZSAke2VzY2FwZWRmaWxlbmFtZX1cclxuJGdkYl9wcm9tcHQgJCIgeworKwlw YXNzICR0ZXN0CisrICAgIH0KKysgICAgLXJlICJDYW4ndCBjcmVhdGUgYSBjb3JlZmlsZVxyXG4k Z2RiX3Byb21wdCAkIiB7CisrCXVuc3VwcG9ydGVkICR0ZXN0CisrCXJldHVybiAtMQorKyAgICB9 CisrfQorKworKyMgTm93IHJlc3RhcnQgZ2RiIGFuZCBsb2FkIHRoZSBjb3JlZmlsZS4KKysKKytj bGVhbl9yZXN0YXJ0ICRleGVjdXRhYmxlCisrZ2RiX2xvYWRfc2hsaWIgJGxpYmZpbGUKKysKKytz ZXQgYnVpbGRpZCBbYnVpbGRfaWRfZGVidWdfZmlsZW5hbWVfZ2V0ICRsaWJmaWxlXQorKworK3Jl Z3N1YiB7XC5kZWJ1ZyR9ICRidWlsZGlkIHt9IGJ1aWxkaWQKKysKKytzZXQgZGVidWdkaXIgW3N0 YW5kYXJkX291dHB1dF9maWxlICR7dGVzdGZpbGV9LWRlYnVnZGlyXQorK2ZpbGUgZGVsZXRlIC1m b3JjZSAtLSAkZGVidWdkaXIKKysKKytmaWxlIG1rZGlyICRkZWJ1Z2Rpci9bZmlsZSBkaXJuYW1l ICRsaWJmaWxlXQorK2ZpbGUgY29weSAkbGliZmlsZSAkZGVidWdkaXIvJHtsaWJmaWxlfQorKwor K2ZpbGUgbWtkaXIgJGRlYnVnZGlyL1tmaWxlIGRpcm5hbWUgJGJ1aWxkaWRdCisrZmlsZSBjb3B5 ICRsaWJmaWxlICRkZWJ1Z2Rpci8ke2J1aWxkaWR9CisrCisrcmVtb3RlX2V4ZWMgYnVpbGQgImxu IC1zIC9saWIgICAgICAgJHtkZWJ1Z2Rpcn0vIgorK3JlbW90ZV9leGVjIGJ1aWxkICJsbiAtcyAv bGliNjQgICAgICR7ZGVidWdkaXJ9LyIKKysjIC91c3IgaXMgbm90IG5lZWRlZCwgYWxsIHRoZSBs aWJzIGFyZSBpbiAvbGliNjQ6IGxpYm0uc28uNiBsaWJjLnNvLjYgbGQtbGludXgteDg2LTY0LnNv LjIKKysKKytnZGJfdGVzdF9ub19vdXRwdXQgInNldCBzb2xpYi1hYnNvbHV0ZS1wcmVmaXggJGRl YnVnZGlyIiBcCisrICAgICJzZXQgc29saWItYWJzb2x1dGUtcHJlZml4IgorKworK2dkYl90ZXN0 X25vX291dHB1dCAic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5ICRkZWJ1Z2RpciIgInNldCBkZWJ1 Zy1maWxlLWRpcmVjdG9yeSIKKysKKytnZGJfdGVzdCAiY29yZSAke2djb3JlZmlsZX0iICJDb3Jl IHdhcyBnZW5lcmF0ZWQgYnkgLioiICJyZS1sb2FkIGdlbmVyYXRlZCBjb3JlZmlsZSIKKysKKytn ZGJfdGVzdCAiZnJhbWUiICIjMCBcW15cclxuXF0qIGxpYiAuKiIgImxpYnJhcnkgZ290IGxvYWRl ZCIKKysKKytnZGJfdGVzdCAiYnQiCisrZ2RiX3Rlc3QgImluZm8gc2hhcmVkIgorZGlmZiAtLWdp dCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvcmhiejk4MTE1NC1taXNsZWFkaW5nLXl1bS1pbnN0 YWxsLXdhcm5pbmcuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9yaGJ6OTgxMTU0LW1pc2xl YWRpbmcteXVtLWluc3RhbGwtd2FybmluZy5leHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0g L2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3JoYno5ODExNTQtbWlzbGVh ZGluZy15dW0taW5zdGFsbC13YXJuaW5nLmV4cAorQEAgLTAsMCArMSw2MCBAQAorKyMgQ29weXJp Z2h0IChDKSAyMDE0ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisrIyBDcmVhdGUgYSBjb3JlIGZpbGUsIHRoZW4gaGlk ZSB0aGUgZXhlY3V0YWJsZS4gIFJlc3RhcnQgR0RCIGFuZCBsb2FkCisrIyB0aGUgY29yZSBmaWxl LiAgQ2hlY2sgR0RCIGdpdmVzIGEgbWVzc2FnZSBzdWdnZXN0aW5nIGEgJ2RuZicgY29tbWFuZAor KyMgdG8gdHJ5IGFuZCBpbnN0YWxsIHRoZSBleGVjdXRhYmxlIGJhc2VkIG9uIGl0cyBidWlsZC1p ZC4KKysKKytzdGFuZGFyZF90ZXN0ZmlsZSAibm9ybWFsLmMiCisrCisraWYgeyBbcHJlcGFyZV9m b3JfdGVzdGluZyAke3Rlc3RmaWxlfS5leHAgJHt0ZXN0ZmlsZX0gJHtzcmNmaWxlfV0gfSB7Cisr ICAgIHJldHVybiAtMQorK30KKysKKysjIEdldCB0aGUgYnVpbGQtaWQgb2YgdGhlIGZpbGUuCisr c2V0IGJ1aWxkX2lkX2RlYnVnX2ZpbGUgW2J1aWxkX2lkX2RlYnVnX2ZpbGVuYW1lX2dldCAkYmlu ZmlsZV0KKytyZWdzdWIgLWFsbCAiLmRlYnVnJCIgJGJ1aWxkX2lkX2RlYnVnX2ZpbGUgIiIgYnVp bGRfaWRfd2l0aG91dF9kZWJ1ZworKworKyMgUnVuIHRvIG1haW4uCisraWYgeyAhW3J1bnRvX21h aW5dIH0geworKyAgICByZXR1cm4gLTEKKyt9CisrCisrIyBXZSBmaXJzdCBuZWVkIHRvIGdlbmVy YXRlIGEgY29yZWZpbGUuCisrc2V0IGNvcmVmaWxlbmFtZSAiW3N0YW5kYXJkX291dHB1dF9maWxl IGdjb3JlLnRlc3RdIgorK2lmIHsgIVtnZGJfZ2NvcmVfY21kICIkY29yZWZpbGVuYW1lIiAic2F2 ZSBjb3JlZmlsZSJdIH0geworKyAgICB1bnRlc3RlZCAiY291bGQgbm90IGdlbmVyYXRlIGEgY29y ZWZpbGUiCisrICAgIHJldHVybiAtMQorK30KKysKKysjIE1vdmUgdGhlIGJpbmZpbGUgdG8gYSB0 ZW1wb3JhcnkgbmFtZS4KKytyZW1vdGVfZXhlYyBidWlsZCAibXYgJGJpbmZpbGUgJHtiaW5maWxl fS5vbGQiCisrCisrIyBSZWluaXRpYWxpemUgR0RCIGFuZCBzZWUgaWYgd2UgZ2V0IGEgZG5mIHN1 Z2dlc3Rpb24uCisrY2xlYW5fcmVzdGFydAorKworK2dkYl90ZXN0ICJzZXQgYnVpbGQtaWQtdmVy Ym9zZSAxIiAiIiBcCisrICAgICJzZXQgYnVpbGQtaWQtdmVyYm9zZSIKKysKKysjIEdEQiBvbmx5 IG1ha2VzIGJ1aWxkLWlkIGJhc2VkIFJQTSBzdWdnZXN0aW9ucyBpZiAvdXNyL2xpYiBpcyBpbgor KyMgdGhlIGRlYnVnLWZpbGUtZGlyZWN0b3J5IGxpc3QsIHRoZSByZWFzb24gYmVpbmcgdGhhdCBz eXN0ZW0gUlBNcworKyMgd2lsbCBhbHdheXMgaW5zdGFsbCB1bmRlciB0aGlzIGxvY2F0aW9uLiAg SWYgR0RCIGlzIG5vdCBsb29raW5nCisrIyBoZXJlIHRoZW4gdGhlcmUncyBubyBwb2ludCBtYWtp bmcgc3VnZ2VzdGlvbnMuCisrZ2RiX3Rlc3QgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSAvdXNy L2xpYi8iICIiIFwKKysgICAgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIKKysKKytnZGJfdGVz dCAiY29yZS1maWxlIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSBnY29yZS50ZXN0XSIgXAorKyAgICAi TWlzc2luZyBmaWxlXFwoc1xcKSwgdHJ5OiBkbmYgLS1lbmFibGVyZXBvPSdcXCpkZWJ1Z1xcKicg aW5zdGFsbCBbc3RyaW5nX3RvX3JlZ2V4cCAvdXNyL2xpYi8kYnVpbGRfaWRfd2l0aG91dF9kZWJ1 Z10gW3N0cmluZ190b19yZWdleHAgL3Vzci9saWIvZGVidWcvJGJ1aWxkX2lkX2RlYnVnX2ZpbGVd IiBcCisrICAgICJ0ZXN0IGZpcnN0IHl1bS9kbmYgd2FybmluZyIKCmRpZmYgLS1naXQgYS9nZGIt Ni42LWJ1aWxkaWQtbG9jYXRlLnBhdGNoIGIvZ2RiLTYuNi1idWlsZGlkLWxvY2F0ZS5wYXRjaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQwN2I0My4uMDAwMDAwMAotLS0gYS9nZGIt Ni42LWJ1aWxkaWQtbG9jYXRlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTE5NCArMCwwIEBA Ci1Gcm9tIEZFRE9SQV9QQVRDSEVTIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRmVk b3JhIEdEQiBwYXRjaGVzIDxpbnZhbGlkQGVtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjcgT2N0IDIw MTcgMjE6MDc6NTAgKzAyMDAKLVN1YmplY3Q6IGdkYi02LjYtYnVpbGRpZC1sb2NhdGUucGF0Y2gK LQotOzsgTmV3IGxvY2F0aW5nIG9mIHRoZSBtYXRjaGluZyBiaW5hcmllcyBmcm9tIHRoZSBwdXJl IGNvcmUgZmlsZSAoYnVpbGQtaWQpLgotOzs9cHVzaCtqYW4KLQotZGlmZiAtLWdpdCBhL2dkYi9i dWlsZC1pZC5jIGIvZ2RiL2J1aWxkLWlkLmMKLS0tLSBhL2dkYi9idWlsZC1pZC5jCi0rKysgYi9n ZGIvYnVpbGQtaWQuYwotQEAgLTIzLDkgKzIzLDY3IEBACi0gI2luY2x1ZGUgImdkYnN1cHBvcnQv Z2RiX3ZlY3MuaCIKLSAjaW5jbHVkZSAic3ltZmlsZS5oIgotICNpbmNsdWRlICJvYmpmaWxlcy5o IgotKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgotKyNpbmNsdWRlICJlbGYtYmZkLmgiCi0rI2luY2x1 ZGUgImVsZi9jb21tb24uaCIKLSsjaW5jbHVkZSAiZWxmL2V4dGVybmFsLmgiCi0rI2luY2x1ZGUg ImVsZi9pbnRlcm5hbC5oIgotICNpbmNsdWRlICJmaWxlbmFtZXMuaCIKLSsjaW5jbHVkZSAiZ2Ri X2JmZC5oIgotICNpbmNsdWRlICJnZGJjb3JlLmgiCi0rI2luY2x1ZGUgImNsaS9jbGktY21kcy5o IgotICNpbmNsdWRlICJjbGkvY2xpLXN0eWxlLmgiCi0rI2luY2x1ZGUgImluZmVyaW9yLmgiCi0r I2luY2x1ZGUgIm9iamZpbGVzLmgiCi0rI2luY2x1ZGUgIm9ic2VydmFibGUuaCIKLSsjaW5jbHVk ZSAic3ltZmlsZS5oIgotKwotKyNkZWZpbmUgQlVJTERfSURfVkVSQk9TRV9OT05FIDAKLSsjZGVm aW5lIEJVSUxEX0lEX1ZFUkJPU0VfRklMRU5BTUVTIDEKLSsjZGVmaW5lIEJVSUxEX0lEX1ZFUkJP U0VfQklOQVJZX1BBUlNFIDIKLStzdGF0aWMgaW50IGJ1aWxkX2lkX3ZlcmJvc2UgPSBCVUlMRF9J RF9WRVJCT1NFX0ZJTEVOQU1FUzsKLStzdGF0aWMgdm9pZAotK3Nob3dfYnVpbGRfaWRfdmVyYm9z ZSAoc3RydWN0IHVpX2ZpbGUgKmZpbGUsIGludCBmcm9tX3R0eSwKLSsJCSAgICAgICBzdHJ1Y3Qg Y21kX2xpc3RfZWxlbWVudCAqYywgY29uc3QgY2hhciAqdmFsdWUpCi0rewotKyAgZ2RiX3ByaW50 ZiAoZmlsZSwgXygiVmVyYm9zaXR5IGxldmVsIG9mIHRoZSBidWlsZC1pZCBsb2NhdG9yIGlzICVz LlxuIiksCi0rCSAgICAgIHZhbHVlKTsKLSt9Ci0rLyogTG9jYXRlIE5UX0dOVV9CVUlMRF9JRCBh bmQgcmV0dXJuIGl0cyBtYXRjaGluZyBkZWJ1ZyBmaWxlbmFtZS4KLSsgICBGSVhNRTogTk9URSBk ZWNvZGluZyBzaG91bGQgYmUgdW5pZmllZCB3aXRoIHRoZSBCRkQgY29yZSBub3RlcyBkZWNvZGlu Zy4gICovCi0rCi0rc3RhdGljIHN0cnVjdCBiZmRfYnVpbGRfaWQgKgotK2J1aWxkX2lkX2J1Zl9n ZXQgKGJmZCAqdGVtcGwsIGdkYl9ieXRlICpidWYsIGJmZF9zaXplX3R5cGUgc2l6ZSkKLSt7Ci0r ICBiZmRfYnl0ZSAqcDsKLSsKLSsgIHAgPSBidWY7Ci0rICB3aGlsZSAocCA8IGJ1ZiArIHNpemUp Ci0rICAgIHsKLSsgICAgICAvKiBGSVhNRTogYmFkIGFsaWdubWVudCBhc3N1bXB0aW9uLiAgKi8K LSsgICAgICBFbGZfRXh0ZXJuYWxfTm90ZSAqeG5wID0gKEVsZl9FeHRlcm5hbF9Ob3RlICopIHA7 Ci0rICAgICAgc2l6ZV90IG5hbWVzeiA9IEhfR0VUXzMyICh0ZW1wbCwgeG5wLT5uYW1lc3opOwot KyAgICAgIHNpemVfdCBkZXNjc3ogPSBIX0dFVF8zMiAodGVtcGwsIHhucC0+ZGVzY3N6KTsKLSsg ICAgICBiZmRfYnl0ZSAqZGVzY2RhdGEgPSAoZ2RiX2J5dGUgKikgeG5wLT5uYW1lICsgQkZEX0FM SUdOIChuYW1lc3osIDQpOwotKwotKyAgICAgIGlmIChIX0dFVF8zMiAodGVtcGwsIHhucC0+dHlw ZSkgPT0gTlRfR05VX0JVSUxEX0lECi0rCSAgJiYgbmFtZXN6ID09IHNpemVvZiAiR05VIgotKwkg ICYmIG1lbWNtcCAoeG5wLT5uYW1lLCAiR05VIiwgc2l6ZW9mICJHTlUiKSA9PSAwKQotKwl7Ci0r CSAgc2l6ZV90IHN6ID0gZGVzY3N6OwotKwkgIGdkYl9ieXRlICpkYXRhID0gKGdkYl9ieXRlICop IGRlc2NkYXRhOwotKwkgIHN0cnVjdCBiZmRfYnVpbGRfaWQgKnJldHZhbDsKLSsKLSsJICByZXR2 YWwgPSAoc3RydWN0IGJmZF9idWlsZF9pZCAqKSB4bWFsbG9jIChzaXplb2YgKnJldHZhbCAtIDEg KyBzeik7Ci0rCSAgcmV0dmFsLT5zaXplID0gc3o7Ci0rCSAgbWVtY3B5IChyZXR2YWwtPmRhdGEs IGRhdGEsIHN6KTsKLSsKLSsJICByZXR1cm4gcmV0dmFsOwotKwl9Ci0rICAgICAgcCA9IGRlc2Nk YXRhICsgQkZEX0FMSUdOIChkZXNjc3osIDQpOwotKyAgICB9Ci0rICByZXR1cm4gTlVMTDsKLSt9 Ci0gCi0gLyogU2VlIGJ1aWxkLWlkLmguICAqLwotIAotQEAgLTQ5LDYgKzEwNywzNDkgQEAgYnVp bGRfaWRfYmZkX2dldCAoYmZkICphYmZkKQotICAgcmV0dXJuIE5VTEw7Ci0gfQotIAotKy8qIENv cmUgZmlsZXMgbWF5IGhhdmUgbWlzc2luZyAoY29ycnVwdCkgU0hEUiBidXQgUERIUiBpcyBjb3Jy ZWN0IHRoZXJlLgotKyAgIGJmZF9lbGZfYmZkX2Zyb21fcmVtb3RlX21lbW9yeSAoKSBoYXMgdG9v IG11Y2ggb3ZlcmhlYWQgYnkKLSsgICBhbGxvY2F0aW5nL3JlYWRpbmcgYWxsIHRoZSBhdmFpbGFi bGUgRUxGIFBUX0xPQURzLiAgKi8KLSsKLStzdGF0aWMgc3RydWN0IGJmZF9idWlsZF9pZCAqCi0r YnVpbGRfaWRfcGhkcl9nZXQgKGJmZCAqdGVtcGwsIGJmZF92bWEgbG9hZGJhc2UsIHVuc2lnbmVk IGVfcGhudW0sCi0rCQkgICBFbGZfSW50ZXJuYWxfUGhkciAqaV9waGRyKQotK3sKLSsgIGludCBp OwotKyAgc3RydWN0IGJmZF9idWlsZF9pZCAqcmV0dmFsID0gTlVMTDsKLSsKLSsgIGZvciAoaSA9 IDA7IGkgPCBlX3BobnVtOyBpKyspCi0rICAgIGlmIChpX3BoZHJbaV0ucF90eXBlID09IFBUX05P VEUgJiYgaV9waGRyW2ldLnBfZmlsZXN6ID4gMCkKLSsgICAgICB7Ci0rCUVsZl9JbnRlcm5hbF9Q aGRyICpoZHIgPSAmaV9waGRyW2ldOwotKwlnZGJfYnl0ZSAqYnVmOwotKwlpbnQgZXJyOwotKwot KwlidWYgPSAoZ2RiX2J5dGUgKikgeG1hbGxvYyAoaGRyLT5wX2ZpbGVzeik7Ci0rCWVyciA9IHRh cmdldF9yZWFkX21lbW9yeSAobG9hZGJhc2UgKyBpX3BoZHJbaV0ucF92YWRkciwgYnVmLAotKwkJ CQkgIGhkci0+cF9maWxlc3opOwotKwlpZiAoZXJyID09IDApCi0rCSAgcmV0dmFsID0gYnVpbGRf aWRfYnVmX2dldCAodGVtcGwsIGJ1ZiwgaGRyLT5wX2ZpbGVzeik7Ci0rCWVsc2UKLSsJICByZXR2 YWwgPSBOVUxMOwotKwl4ZnJlZSAoYnVmKTsKLSsJaWYgKHJldHZhbCAhPSBOVUxMKQotKwkgIGJy ZWFrOwotKyAgICAgIH0KLSsgIHJldHVybiByZXR2YWw7Ci0rfQotKwotKy8qIEZpcnN0IHdlIHZh bGlkYXRlIHRoZSBmaWxlIGJ5IHJlYWRpbmcgaW4gdGhlIEVMRiBoZWFkZXIgYW5kIGNoZWNraW5n Ci0rICAgdGhlIG1hZ2ljIG51bWJlci4gICovCi0rCi0rc3RhdGljIGlubGluZSBiZmRfYm9vbGVh bgotK2VsZl9maWxlX3AgKEVsZjY0X0V4dGVybmFsX0VoZHIgKnhfZWhkcnA2NCkKLSt7Ci0rICBn ZGJfYXNzZXJ0IChzaXplb2YgKEVsZjY0X0V4dGVybmFsX0VoZHIpID49IHNpemVvZiAoRWxmMzJf RXh0ZXJuYWxfRWhkcikpOwotKyAgZ2RiX2Fzc2VydCAob2Zmc2V0b2YgKEVsZjY0X0V4dGVybmFs X0VoZHIsIGVfaWRlbnQpCi0rCSAgICAgID09IG9mZnNldG9mIChFbGYzMl9FeHRlcm5hbF9FaGRy LCBlX2lkZW50KSk7Ci0rICBnZGJfYXNzZXJ0IChzaXplb2YgKCgoRWxmNjRfRXh0ZXJuYWxfRWhk ciAqKSAwKS0+ZV9pZGVudCkKLSsJICAgICAgPT0gc2l6ZW9mICgoKEVsZjMyX0V4dGVybmFsX0Vo ZHIgKikgMCktPmVfaWRlbnQpKTsKLSsKLSsgIHJldHVybiAoKHhfZWhkcnA2NC0+ZV9pZGVudFtF SV9NQUcwXSA9PSBFTEZNQUcwKQotKwkgICYmICh4X2VoZHJwNjQtPmVfaWRlbnRbRUlfTUFHMV0g PT0gRUxGTUFHMSkKLSsJICAmJiAoeF9laGRycDY0LT5lX2lkZW50W0VJX01BRzJdID09IEVMRk1B RzIpCi0rCSAgJiYgKHhfZWhkcnA2NC0+ZV9pZGVudFtFSV9NQUczXSA9PSBFTEZNQUczKSk7Ci0r fQotKwotKy8qIFRyYW5zbGF0ZSBhbiBFTEYgZmlsZSBoZWFkZXIgaW4gZXh0ZXJuYWwgZm9ybWF0 IGludG8gYW4gRUxGIGZpbGUgaGVhZGVyIGluCi0rICAgaW50ZXJuYWwgZm9ybWF0LiAgKi8KLSsK LSsjZGVmaW5lIEhfR0VUX1dPUkQoYmZkLCBwdHIpIChpczY0ID8gSF9HRVRfNjQgKGJmZCwgKHB0 cikpCQlcCi0rCQkJCSAgIDogSF9HRVRfMzIgKGJmZCwgKHB0cikpKQotKyNkZWZpbmUgSF9HRVRf U0lHTkVEX1dPUkQoYmZkLCBwdHIpIChpczY0ID8gSF9HRVRfUzY0IChiZmQsIChwdHIpKQlcCi0r CQkJCQkgIDogSF9HRVRfUzMyIChiZmQsIChwdHIpKSkKLSsKLStzdGF0aWMgdm9pZAotK2VsZl9z d2FwX2VoZHJfaW4gKGJmZCAqYWJmZCwKLSsJCSAgY29uc3QgRWxmNjRfRXh0ZXJuYWxfRWhkciAq c3JjNjQsCi0rCQkgIEVsZl9JbnRlcm5hbF9FaGRyICpkc3QpCi0rewotKyAgaW50IGlzNjQgPSBi ZmRfZ2V0X2FyY2hfc2l6ZSAoYWJmZCkgPT0gNjQ7Ci0rI2RlZmluZSBTUkMoZmllbGQpIChpczY0 ID8gc3JjNjQtPmZpZWxkIFwKLSsJCQkgOiAoKGNvbnN0IEVsZjMyX0V4dGVybmFsX0VoZHIgKikg c3JjNjQpLT5maWVsZCkKLSsKLSsgIGludCBzaWduZWRfdm1hID0gZ2V0X2VsZl9iYWNrZW5kX2Rh dGEgKGFiZmQpLT5zaWduX2V4dGVuZF92bWE7Ci0rICBtZW1jcHkgKGRzdC0+ZV9pZGVudCwgU1JD IChlX2lkZW50KSwgRUlfTklERU5UKTsKLSsgIGRzdC0+ZV90eXBlID0gSF9HRVRfMTYgKGFiZmQs IFNSQyAoZV90eXBlKSk7Ci0rICBkc3QtPmVfbWFjaGluZSA9IEhfR0VUXzE2IChhYmZkLCBTUkMg KGVfbWFjaGluZSkpOwotKyAgZHN0LT5lX3ZlcnNpb24gPSBIX0dFVF8zMiAoYWJmZCwgU1JDIChl X3ZlcnNpb24pKTsKLSsgIGlmIChzaWduZWRfdm1hKQotKyAgICBkc3QtPmVfZW50cnkgPSBIX0dF VF9TSUdORURfV09SRCAoYWJmZCwgU1JDIChlX2VudHJ5KSk7Ci0rICBlbHNlCi0rICAgIGRzdC0+ ZV9lbnRyeSA9IEhfR0VUX1dPUkQgKGFiZmQsIFNSQyAoZV9lbnRyeSkpOwotKyAgZHN0LT5lX3Bo b2ZmID0gSF9HRVRfV09SRCAoYWJmZCwgU1JDIChlX3Bob2ZmKSk7Ci0rICBkc3QtPmVfc2hvZmYg PSBIX0dFVF9XT1JEIChhYmZkLCBTUkMgKGVfc2hvZmYpKTsKLSsgIGRzdC0+ZV9mbGFncyA9IEhf R0VUXzMyIChhYmZkLCBTUkMgKGVfZmxhZ3MpKTsKLSsgIGRzdC0+ZV9laHNpemUgPSBIX0dFVF8x NiAoYWJmZCwgU1JDIChlX2Voc2l6ZSkpOwotKyAgZHN0LT5lX3BoZW50c2l6ZSA9IEhfR0VUXzE2 IChhYmZkLCBTUkMgKGVfcGhlbnRzaXplKSk7Ci0rICBkc3QtPmVfcGhudW0gPSBIX0dFVF8xNiAo YWJmZCwgU1JDIChlX3BobnVtKSk7Ci0rICBkc3QtPmVfc2hlbnRzaXplID0gSF9HRVRfMTYgKGFi ZmQsIFNSQyAoZV9zaGVudHNpemUpKTsKLSsgIGRzdC0+ZV9zaG51bSA9IEhfR0VUXzE2IChhYmZk LCBTUkMgKGVfc2hudW0pKTsKLSsgIGRzdC0+ZV9zaHN0cm5keCA9IEhfR0VUXzE2IChhYmZkLCBT UkMgKGVfc2hzdHJuZHgpKTsKLSsKLSsjdW5kZWYgU1JDCi0rfQotKwotKy8qIFRyYW5zbGF0ZSBh biBFTEYgcHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cnkgaW4gZXh0ZXJuYWwgZm9ybWF0IGludG8g YW4KLSsgICBFTEYgcHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cnkgaW4gaW50ZXJuYWwgZm9ybWF0 LiAgKi8KLSsKLStzdGF0aWMgdm9pZAotK2VsZl9zd2FwX3BoZHJfaW4gKGJmZCAqYWJmZCwKLSsJ CSAgY29uc3QgRWxmNjRfRXh0ZXJuYWxfUGhkciAqc3JjNjQsCi0rCQkgIEVsZl9JbnRlcm5hbF9Q aGRyICpkc3QpCi0rewotKyAgaW50IGlzNjQgPSBiZmRfZ2V0X2FyY2hfc2l6ZSAoYWJmZCkgPT0g NjQ7Ci0rI2RlZmluZSBTUkMoZmllbGQpIChpczY0ID8gc3JjNjQtPmZpZWxkCQkJCQlcCi0rCQkJ IDogKChjb25zdCBFbGYzMl9FeHRlcm5hbF9QaGRyICopIHNyYzY0KS0+ZmllbGQpCi0rCi0rICBp bnQgc2lnbmVkX3ZtYSA9IGdldF9lbGZfYmFja2VuZF9kYXRhIChhYmZkKS0+c2lnbl9leHRlbmRf dm1hOwotKwotKyAgZHN0LT5wX3R5cGUgPSBIX0dFVF8zMiAoYWJmZCwgU1JDIChwX3R5cGUpKTsK LSsgIGRzdC0+cF9mbGFncyA9IEhfR0VUXzMyIChhYmZkLCBTUkMgKHBfZmxhZ3MpKTsKLSsgIGRz dC0+cF9vZmZzZXQgPSBIX0dFVF9XT1JEIChhYmZkLCBTUkMgKHBfb2Zmc2V0KSk7Ci0rICBpZiAo c2lnbmVkX3ZtYSkKLSsgICAgewotKyAgICAgIGRzdC0+cF92YWRkciA9IEhfR0VUX1NJR05FRF9X T1JEIChhYmZkLCBTUkMgKHBfdmFkZHIpKTsKLSsgICAgICBkc3QtPnBfcGFkZHIgPSBIX0dFVF9T SUdORURfV09SRCAoYWJmZCwgU1JDIChwX3BhZGRyKSk7Ci0rICAgIH0KLSsgIGVsc2UKLSsgICAg ewotKyAgICAgIGRzdC0+cF92YWRkciA9IEhfR0VUX1dPUkQgKGFiZmQsIFNSQyAocF92YWRkcikp OwotKyAgICAgIGRzdC0+cF9wYWRkciA9IEhfR0VUX1dPUkQgKGFiZmQsIFNSQyAocF9wYWRkcikp OwotKyAgICB9Ci0rICBkc3QtPnBfZmlsZXN6ID0gSF9HRVRfV09SRCAoYWJmZCwgU1JDIChwX2Zp bGVzeikpOwotKyAgZHN0LT5wX21lbXN6ID0gSF9HRVRfV09SRCAoYWJmZCwgU1JDIChwX21lbXN6 KSk7Ci0rICBkc3QtPnBfYWxpZ24gPSBIX0dFVF9XT1JEIChhYmZkLCBTUkMgKHBfYWxpZ24pKTsK LSsKLSsjdW5kZWYgU1JDCi0rfQotKwotKyN1bmRlZiBIX0dFVF9TSUdORURfV09SRAotKyN1bmRl ZiBIX0dFVF9XT1JECi0rCi0rc3RhdGljIEVsZl9JbnRlcm5hbF9QaGRyICoKLStlbGZfZ2V0X3Bo ZHIgKGJmZCAqdGVtcGwsIGJmZF92bWEgZWhkcl92bWEsIHVuc2lnbmVkICplX3BobnVtX3BvaW50 ZXIsCi0rICAgICAgICAgICAgICBiZmRfdm1hICpsb2FkYmFzZV9wb2ludGVyKQotK3sKLSsgIC8q IHNpemVvZiAoRWxmNjRfRXh0ZXJuYWxfRWhkcikgPj0gc2l6ZW9mIChFbGYzMl9FeHRlcm5hbF9F aGRyKSAgKi8KLSsgIEVsZjY0X0V4dGVybmFsX0VoZHIgeF9laGRyNjQ7CS8qIEVsZiBmaWxlIGhl YWRlciwgZXh0ZXJuYWwgZm9ybSAqLwotKyAgRWxmX0ludGVybmFsX0VoZHIgaV9laGRyOwkvKiBF bGYgZmlsZSBoZWFkZXIsIGludGVybmFsIGZvcm0gKi8KLSsgIGJmZF9zaXplX3R5cGUgeF9waGRy c19zaXplOwotKyAgZ2RiX2J5dGUgKnhfcGhkcnNfcHRyOwotKyAgRWxmX0ludGVybmFsX1BoZHIg KmlfcGhkcnM7Ci0rICBpbnQgZXJyOwotKyAgdW5zaWduZWQgaW50IGk7Ci0rICBiZmRfdm1hIGxv YWRiYXNlOwotKyAgaW50IGxvYWRiYXNlX3NldDsKLSsKLSsgIGdkYl9hc3NlcnQgKHRlbXBsICE9 IE5VTEwpOwotKyAgZ2RiX2Fzc2VydCAoc2l6ZW9mIChFbGY2NF9FeHRlcm5hbF9FaGRyKSA+PSBz aXplb2YgKEVsZjMyX0V4dGVybmFsX0VoZHIpKTsKLSsKLSsgIC8qIFJlYWQgaW4gdGhlIEVMRiBo ZWFkZXIgaW4gZXh0ZXJuYWwgZm9ybWF0LiAgKi8KLSsgIGVyciA9IHRhcmdldF9yZWFkX21lbW9y eSAoZWhkcl92bWEsIChiZmRfYnl0ZSAqKSAmeF9laGRyNjQsIHNpemVvZiB4X2VoZHI2NCk7Ci0r ICBpZiAoZXJyKQotKyAgICB7Ci0rICAgICAgaWYgKGJ1aWxkX2lkX3ZlcmJvc2UgPj0gQlVJTERf SURfVkVSQk9TRV9CSU5BUllfUEFSU0UpCi0rICAgICAgICB3YXJuaW5nIChfKCJidWlsZC1pZDog RXJyb3IgcmVhZGluZyBFTEYgaGVhZGVyIGF0IGFkZHJlc3MgMHglbHgiKSwKLSsJCSAodW5zaWdu ZWQgbG9uZykgZWhkcl92bWEpOwotKyAgICAgIHJldHVybiBOVUxMOwotKyAgICB9Ci0rCi0rICAv KiBOb3cgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSB2YWxpZCBFTEYgZmlsZSwgYW5kIG9uZSB0 aGF0IEJGRCBjYW4KLSsgICAgIG1ha2UgdXNlIG9mLiAgVGhlIG1hZ2ljIG51bWJlciBtdXN0IG1h dGNoLCB0aGUgYWRkcmVzcyBzaXplICgnY2xhc3MnKQotKyAgICAgYW5kIGJ5dGUtc3dhcHBpbmcg bXVzdCBtYXRjaCBvdXIgWFZFQyBlbnRyeS4gICovCi0rCi0rICBpZiAoISBlbGZfZmlsZV9wICgm eF9laGRyNjQpCi0rICAgICAgfHwgeF9laGRyNjQuZV9pZGVudFtFSV9WRVJTSU9OXSAhPSBFVl9D VVJSRU5UCi0rICAgICAgfHwgISgoYmZkX2dldF9hcmNoX3NpemUgKHRlbXBsKSA9PSA2NAotKyAg ICAgICAgICAgICYmIHhfZWhkcjY0LmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTNjQpCi0r ICAgICAgICAgICB8fCAoYmZkX2dldF9hcmNoX3NpemUgKHRlbXBsKSA9PSAzMgotKwkgICAgICAg JiYgeF9laGRyNjQuZV9pZGVudFtFSV9DTEFTU10gPT0gRUxGQ0xBU1MzMikpKQotKyAgICB7Ci0r ICAgICAgaWYgKGJ1aWxkX2lkX3ZlcmJvc2UgPj0gQlVJTERfSURfVkVSQk9TRV9CSU5BUllfUEFS U0UpCi0rICAgICAgICB3YXJuaW5nIChfKCJidWlsZC1pZDogVW5yZWNvZ25pemVkIEVMRiBoZWFk ZXIgYXQgYWRkcmVzcyAweCVseCIpLAotKwkJICh1bnNpZ25lZCBsb25nKSBlaGRyX3ZtYSk7Ci0r ICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0KLSsKLSsgIC8qIENoZWNrIHRoYXQgZmlsZSdzIGJ5 dGUgb3JkZXIgbWF0Y2hlcyB4dmVjJ3MgKi8KLSsgIHN3aXRjaCAoeF9laGRyNjQuZV9pZGVudFtF SV9EQVRBXSkKLSsgICAgewotKyAgICBjYXNlIEVMRkRBVEEyTVNCOgkJLyogQmlnLWVuZGlhbiAq LwotKyAgICAgIGlmICghIGJmZF9oZWFkZXJfYmlnX2VuZGlhbiAodGVtcGwpKQotKwl7Ci0rCSAg aWYgKGJ1aWxkX2lkX3ZlcmJvc2UgPj0gQlVJTERfSURfVkVSQk9TRV9CSU5BUllfUEFSU0UpCi0r CSAgICB3YXJuaW5nIChfKCJidWlsZC1pZDogVW5yZWNvZ25pemVkICIKLSsJCSAgICAgICAiYmln LWVuZGlhbiBFTEYgaGVhZGVyIGF0IGFkZHJlc3MgMHglbHgiKSwKLSsJCSAgICAgKHVuc2lnbmVk IGxvbmcpIGVoZHJfdm1hKTsKLSsJICByZXR1cm4gTlVMTDsKLSsJfQotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIEVMRkRBVEEyTFNCOgkJLyogTGl0dGxlLWVuZGlhbiAqLwotKyAgICAgIGlmICgh IGJmZF9oZWFkZXJfbGl0dGxlX2VuZGlhbiAodGVtcGwpKQotKwl7Ci0rCSAgaWYgKGJ1aWxkX2lk X3ZlcmJvc2UgPj0gQlVJTERfSURfVkVSQk9TRV9CSU5BUllfUEFSU0UpCi0rCSAgICB3YXJuaW5n IChfKCJidWlsZC1pZDogVW5yZWNvZ25pemVkICIKLSsJCSAgICAgICAibGl0dGxlLWVuZGlhbiBF TEYgaGVhZGVyIGF0IGFkZHJlc3MgMHglbHgiKSwKLSsJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGVo ZHJfdm1hKTsKLSsJICByZXR1cm4gTlVMTDsKLSsJfQotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IEVMRkRBVEFOT05FOgkJLyogTm8gZGF0YSBlbmNvZGluZyBzcGVjaWZpZWQgKi8KLSsgICAgZGVm YXVsdDoJCQkvKiBVbmtub3duIGRhdGEgZW5jb2Rpbmcgc3BlY2lmaWVkICovCi0rICAgICAgaWYg KGJ1aWxkX2lkX3ZlcmJvc2UgPj0gQlVJTERfSURfVkVSQk9TRV9CSU5BUllfUEFSU0UpCi0rCXdh cm5pbmcgKF8oImJ1aWxkLWlkOiBVbnJlY29nbml6ZWQgIgotKwkJICAgIkVMRiBoZWFkZXIgZW5k aWFuaXR5IGF0IGFkZHJlc3MgMHglbHgiKSwKLSsJCSAodW5zaWduZWQgbG9uZykgZWhkcl92bWEp OwotKyAgICAgIHJldHVybiBOVUxMOwotKyAgICB9Ci0rCi0rICBlbGZfc3dhcF9laGRyX2luICh0 ZW1wbCwgJnhfZWhkcjY0LCAmaV9laGRyKTsKLSsKLSsgIC8qIFRoZSBmaWxlIGhlYWRlciB0ZWxs cyB3aGVyZSB0byBmaW5kIHRoZSBwcm9ncmFtIGhlYWRlcnMuCi0rICAgICBUaGVzZSBhcmUgd2hh dCB3ZSB1c2UgdG8gYWN0dWFsbHkgY2hvb3NlIHdoYXQgdG8gcmVhZC4gICovCi0rCi0rICBpZiAo aV9laGRyLmVfcGhlbnRzaXplICE9IChiZmRfZ2V0X2FyY2hfc2l6ZSAodGVtcGwpID09IDY0Ci0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNpemVvZiAoRWxmNjRfRXh0ZXJuYWxfUGhk cikKLSsJCQkgICAgIDogc2l6ZW9mIChFbGYzMl9FeHRlcm5hbF9QaGRyKSkKLSsgICAgICB8fCBp X2VoZHIuZV9waG51bSA9PSAwKQotKyAgICB7Ci0rICAgICAgaWYgKGJ1aWxkX2lkX3ZlcmJvc2Ug Pj0gQlVJTERfSURfVkVSQk9TRV9CSU5BUllfUEFSU0UpCi0rCXdhcm5pbmcgKF8oImJ1aWxkLWlk OiBJbnZhbGlkIEVMRiBwcm9ncmFtIGhlYWRlcnMgZnJvbSB0aGUgRUxGIGhlYWRlciAiCi0rCQkg ICAiYXQgYWRkcmVzcyAweCVseCIpLCAodW5zaWduZWQgbG9uZykgZWhkcl92bWEpOwotKyAgICAg IHJldHVybiBOVUxMOwotKyAgICB9Ci0rCi0rICB4X3BoZHJzX3NpemUgPSAoYmZkX2dldF9hcmNo X3NpemUgKHRlbXBsKSA9PSA2NCA/IHNpemVvZiAoRWxmNjRfRXh0ZXJuYWxfUGhkcikKLSsJCQkJ CQk6IHNpemVvZiAoRWxmMzJfRXh0ZXJuYWxfUGhkcikpOwotKwotKyAgaV9waGRycyA9IChFbGZf SW50ZXJuYWxfUGhkciAqKSB4bWFsbG9jIChpX2VoZHIuZV9waG51bSAqIChzaXplb2YgKmlfcGhk cnMgKyB4X3BoZHJzX3NpemUpKTsKLSsgIHhfcGhkcnNfcHRyID0gKGdkYl9ieXRlICopICZpX3Bo ZHJzW2lfZWhkci5lX3BobnVtXTsKLSsgIGVyciA9IHRhcmdldF9yZWFkX21lbW9yeSAoZWhkcl92 bWEgKyBpX2VoZHIuZV9waG9mZiwgKGJmZF9ieXRlICopIHhfcGhkcnNfcHRyLAotKwkJCSAgICBp X2VoZHIuZV9waG51bSAqIHhfcGhkcnNfc2l6ZSk7Ci0rICBpZiAoZXJyKQotKyAgICB7Ci0rICAg ICAgZnJlZSAoaV9waGRycyk7Ci0rICAgICAgaWYgKGJ1aWxkX2lkX3ZlcmJvc2UgPj0gQlVJTERf SURfVkVSQk9TRV9CSU5BUllfUEFSU0UpCi0rICAgICAgICB3YXJuaW5nIChfKCJidWlsZC1pZDog RXJyb3IgcmVhZGluZyAiCi0rCQkgICAiRUxGIHByb2dyYW0gaGVhZGVycyBhdCBhZGRyZXNzIDB4 JWx4IiksCi0rCQkgKHVuc2lnbmVkIGxvbmcpIChlaGRyX3ZtYSArIGlfZWhkci5lX3Bob2ZmKSk7 Ci0rICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0KLSsKLSsgIGxvYWRiYXNlID0gZWhkcl92bWE7 Ci0rICBsb2FkYmFzZV9zZXQgPSAwOwotKyAgZm9yIChpID0gMDsgaSA8IGlfZWhkci5lX3BobnVt OyArK2kpCi0rICAgIHsKLSsgICAgICBlbGZfc3dhcF9waGRyX2luICh0ZW1wbCwgKEVsZjY0X0V4 dGVybmFsX1BoZHIgKikKLSsJCQkgICAgICAgKHhfcGhkcnNfcHRyICsgaSAqIHhfcGhkcnNfc2l6 ZSksICZpX3BoZHJzW2ldKTsKLSsgICAgICAvKiBJQS02NCB2RFNPIG1heSBoYXZlIHR3byBtYXBw aW5ncyBmb3Igb25lIHNlZ21lbnQsIHdoZXJlIG9uZSBtYXBwaW5nCi0rCSBpcyBleGVjdXRhYmxl IG9ubHksIGFuZCBvbmUgaXMgcmVhZCBvbmx5LiAgV2UgbXVzdCBub3QgdXNlIHRoZQotKwkgZXhl Y3V0YWJsZSBvbmUgKFBGX1IgaXMgdGhlIGZpcnN0IG9uZSwgUEZfWCB0aGUgc2Vjb25kIG9uZSku ICAqLwotKyAgICAgIGlmIChpX3BoZHJzW2ldLnBfdHlwZSA9PSBQVF9MT0FEICYmIChpX3BoZHJz W2ldLnBfZmxhZ3MgJiBQRl9SKSkKLSsJewotKwkgIC8qIE9ubHkgdGhlIGZpcnN0IFBUX0xPQUQg c2VnbWVudCBpbmRpY2F0ZXMgdGhlIGZpbGUgYmlhcy4KLSsJICAgICBOZXh0IHNlZ21lbnRzIG1h eSBoYXZlIFBfVkFERFIgYXJiaXRyYXJpbHkgaGlnaGVyLgotKwkgICAgIElmIHRoZSBmaXJzdCBz ZWdtZW50IGhhcyBQX1ZBRERSIHplcm8gYW55IG5leHQgc2VnbWVudCBtdXN0IG5vdAotKwkgICAg IGNvbmZ1c2UgdXMsIHRoZSBmaXJzdCBvbmUgc2V0cyBMT0FEQkFTRSBjZXJ0YWlubHkgZW5vdWdo LiAgKi8KLSsJICBpZiAoIWxvYWRiYXNlX3NldCAmJiBpX3BoZHJzW2ldLnBfb2Zmc2V0ID09IDAp Ci0rCSAgICB7Ci0rCSAgICAgIGxvYWRiYXNlID0gZWhkcl92bWEgLSBpX3BoZHJzW2ldLnBfdmFk ZHI7Ci0rCSAgICAgIGxvYWRiYXNlX3NldCA9IDE7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwot KyAgaWYgKGJ1aWxkX2lkX3ZlcmJvc2UgPj0gQlVJTERfSURfVkVSQk9TRV9CSU5BUllfUEFSU0Up Ci0rICAgIHdhcm5pbmcgKF8oImJ1aWxkLWlkOiBGb3VuZCBFTEYgaGVhZGVyIGF0IGFkZHJlc3Mg MHglbHgsIGxvYWRiYXNlIDB4JWx4IiksCi0rCSAgICAgKHVuc2lnbmVkIGxvbmcpIGVoZHJfdm1h LCAodW5zaWduZWQgbG9uZykgbG9hZGJhc2UpOwotKwotKyAgKmVfcGhudW1fcG9pbnRlciA9IGlf ZWhkci5lX3BobnVtOwotKyAgKmxvYWRiYXNlX3BvaW50ZXIgPSBsb2FkYmFzZTsKLSsgIHJldHVy biBpX3BoZHJzOwotK30KLSsKLSsvKiBCVUlMRF9JRF9BRERSX0dFVCBnZXRzIEFERFIgbG9jYXRl ZCBzb21ld2hlcmUgaW4gdGhlIG9iamVjdC4KLSsgICBGaW5kIHRoZSBmaXJzdCBzZWN0aW9uIGJl Zm9yZSBBRERSIGNvbnRhaW5pbmcgYW4gRUxGIGhlYWRlci4KLSsgICBXZSByZWx5IG9uIHRoZSBm YWN0IHRoZSBzZWN0aW9ucyBmcm9tIG11bHRpcGxlIGZpbGVzIGRvIG5vdCBtaXguCi0rICAgRklY TUU6IFdlIHNob3VsZCBjaGVjayBBRERSIGlzIGNvbnRhaW5lZCBfaW5zaWRlXyB0aGUgc2VjdGlv biB3aXRoIHBvc3NpYmx5Ci0rICAgbWlzc2luZyBjb250ZW50IChQX0ZJTEVTWiA8IFBfTUVNU1op LiAgVGhlc2Ugb21pdHRlZCBzZWN0aW9ucyBhcmUgY3VycmVudGx5Ci0rICAgaGlkZGVuIGJ5IF9C RkRfRUxGX01BS0VfU0VDVElPTl9GUk9NX1BIRFIuICAqLwotKwotK3N0YXRpYyBDT1JFX0FERFIg YnVpbGRfaWRfYWRkcjsKLStzdHJ1Y3QgYnVpbGRfaWRfYWRkcl9zZWN0Ci0rICB7Ci0rICAgIHN0 cnVjdCBidWlsZF9pZF9hZGRyX3NlY3QgKm5leHQ7Ci0rICAgIGFzZWN0aW9uICpzZWN0OwotKyAg fTsKLStzdGF0aWMgc3RydWN0IGJ1aWxkX2lkX2FkZHJfc2VjdCAqYnVpbGRfaWRfYWRkcl9zZWN0 OwotKwotK3N0YXRpYyB2b2lkIGJ1aWxkX2lkX2FkZHJfY2FuZGlkYXRlIChiZmQgKmFiZmQsIGFz ZWN0aW9uICpzZWN0LCB2b2lkICpvYmopCi0rewotKyAgaWYgKGJ1aWxkX2lkX2FkZHIgPj0gYmZk X3NlY3Rpb25fdm1hIChzZWN0KSkKLSsgICAgewotKyAgICAgIHN0cnVjdCBidWlsZF9pZF9hZGRy X3NlY3QgKmNhbmRpZGF0ZTsKLSsKLSsgICAgICBjYW5kaWRhdGUgPSAoc3RydWN0IGJ1aWxkX2lk X2FkZHJfc2VjdCAqKSB4bWFsbG9jIChzaXplb2YgKmNhbmRpZGF0ZSk7Ci0rICAgICAgY2FuZGlk YXRlLT5uZXh0ID0gYnVpbGRfaWRfYWRkcl9zZWN0OwotKyAgICAgIGJ1aWxkX2lkX2FkZHJfc2Vj dCA9IGNhbmRpZGF0ZTsKLSsgICAgICBjYW5kaWRhdGUtPnNlY3QgPSBzZWN0OwotKyAgICB9Ci0r fQotKwotK3N0cnVjdCBiZmRfYnVpbGRfaWQgKgotK2J1aWxkX2lkX2FkZHJfZ2V0IChDT1JFX0FE RFIgYWRkcikKLSt7Ci0rICBzdHJ1Y3QgYnVpbGRfaWRfYWRkcl9zZWN0ICpjYW5kaWRhdGU7Ci0r ICBzdHJ1Y3QgYmZkX2J1aWxkX2lkICpyZXR2YWwgPSBOVUxMOwotKyAgRWxmX0ludGVybmFsX1Bo ZHIgKmlfcGhkciA9IE5VTEw7Ci0rICBiZmRfdm1hIGxvYWRiYXNlID0gMDsKLSsgIHVuc2lnbmVk IGVfcGhudW0gPSAwOwotKwotKyAgaWYgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+Y29yZV9iZmQg KCkgPT0gTlVMTCkKLSsgICAgcmV0dXJuIE5VTEw7Ci0rCi0rICBidWlsZF9pZF9hZGRyID0gYWRk cjsKLSsgIGdkYl9hc3NlcnQgKGJ1aWxkX2lkX2FkZHJfc2VjdCA9PSBOVUxMKTsKLSsgIGJmZF9t YXBfb3Zlcl9zZWN0aW9ucyAoY3VycmVudF9wcm9ncmFtX3NwYWNlLT5jb3JlX2JmZCAoKSwKLSsJ CQkgYnVpbGRfaWRfYWRkcl9jYW5kaWRhdGUsIE5VTEwpOwotKwotKyAgLyogU2VjdGlvbnMgYXJl IHNvcnRlZCBpbiB0aGUgaGlnaC10by1sb3cgVk1BcyBvcmRlci4KLSsgICAgIFN0b3AgdGhlIHNl YXJjaCBvbiB0aGUgZmlyc3QgRUxGIGhlYWRlciB3ZSBmaW5kLgotKyAgICAgRG8gbm90IGNvbnRp bnVlIHRoZSBzZWFyY2ggZXZlbiBpZiBpdCBkb2VzIG5vdCBjb250YWluIE5UX0dOVV9CVUlMRF9J RC4gICovCi0rCi0rICBmb3IgKGNhbmRpZGF0ZSA9IGJ1aWxkX2lkX2FkZHJfc2VjdDsgY2FuZGlk YXRlICE9IE5VTEw7Ci0rICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS0+bmV4dCkKLSsgICAg ewotKyAgICAgIGlfcGhkciA9IGVsZl9nZXRfcGhkciAoY3VycmVudF9wcm9ncmFtX3NwYWNlLT5j b3JlX2JmZCAoKSwKLSsJCQkgICAgIGJmZF9zZWN0aW9uX3ZtYSAoY2FuZGlkYXRlLT5zZWN0KSwK LSsJCQkgICAgICZlX3BobnVtLCAmbG9hZGJhc2UpOwotKyAgICAgIGlmIChpX3BoZHIgIT0gTlVM TCkKLSsJYnJlYWs7Ci0rICAgIH0KLSsKLSsgIGlmIChpX3BoZHIgIT0gTlVMTCkKLSsgICAgewot KyAgICAgIHJldHZhbCA9IGJ1aWxkX2lkX3BoZHJfZ2V0IChjdXJyZW50X3Byb2dyYW1fc3BhY2Ut PmNvcmVfYmZkICgpLCBsb2FkYmFzZSwgZV9waG51bSwgaV9waGRyKTsKLSsgICAgICB4ZnJlZSAo aV9waGRyKTsKLSsgICAgfQotKwotKyAgd2hpbGUgKGJ1aWxkX2lkX2FkZHJfc2VjdCAhPSBOVUxM KQotKyAgICB7Ci0rICAgICAgY2FuZGlkYXRlID0gYnVpbGRfaWRfYWRkcl9zZWN0OwotKyAgICAg IGJ1aWxkX2lkX2FkZHJfc2VjdCA9IGNhbmRpZGF0ZS0+bmV4dDsKLSsgICAgICB4ZnJlZSAoY2Fu ZGlkYXRlKTsKLSsgICAgfQotKwotKyAgcmV0dXJuIHJldHZhbDsKLSt9Ci0rCi0gLyogU2VlIGJ1 aWxkLWlkLmguICAqLwotIAotIGludAotQEAgLTczLDYzICs0NzQsMTY2IEBAIGJ1aWxkX2lkX3Zl cmlmeSAoYmZkICphYmZkLCBzaXplX3QgY2hlY2tfbGVuLCBjb25zdCBiZmRfYnl0ZSAqY2hlY2sp Ci0gICByZXR1cm4gcmV0dmFsOwotIH0KLSAKLStzdGF0aWMgY2hhciAqCi0rbGlua19yZXNvbHZl IChjb25zdCBjaGFyICpzeW1saW5rLCBpbnQgbGV2ZWwpCi0rewotKyAgY2hhciBidWZbUEFUSF9N QVggKyAxXSwgKnJldHZhbDsKLSsgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+IHRhcmdl dDsKLSsgIHNzaXplX3QgZ290OwotKwotKyAgaWYgKGxldmVsID4gMTApCi0rICAgIHJldHVybiB4 c3RyZHVwIChzeW1saW5rKTsKLSsKLSsgIGdvdCA9IHJlYWRsaW5rIChzeW1saW5rLCBidWYsIHNp emVvZiAoYnVmKSk7Ci0rICBpZiAoZ290IDwgMCB8fCBnb3QgPj0gc2l6ZW9mIChidWYpKQotKyAg ICByZXR1cm4geHN0cmR1cCAoc3ltbGluayk7Ci0rICBidWZbZ290XSA9ICdcMCc7Ci0rCi0rICBp ZiAoSVNfQUJTT0xVVEVfUEFUSCAoYnVmKSkKLSsgICAgdGFyZ2V0ID0gbWFrZV91bmlxdWVfeHN0 cmR1cCAoYnVmKTsKLSsgIGVsc2UKLSsgICAgewotKyAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGRp ciAobGRpcm5hbWUgKHN5bWxpbmspKTsKLSsKLSsgICAgICB0YXJnZXQgPSB4c3RycHJpbnRmICgi JXMiCi0rI2lmbmRlZiBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQotKwkJCSAgICIvIgotKyNl bHNlIC8qIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNICovCi0rCQkJICAgIlxcIgotKyNlbmRp ZiAvKiBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSAqLwotKwkJCSAgICIlcyIsIGRpci5jX3N0 cigpLCBidWYpOwotKyAgICB9Ci0rCi0rICByZXR2YWwgPSBsaW5rX3Jlc29sdmUgKHRhcmdldC5n ZXQgKCksIGxldmVsICsgMSk7Ci0rICByZXR1cm4gcmV0dmFsOwotK30KLSsKLSAvKiBIZWxwZXIg Zm9yIGJ1aWxkX2lkX3RvX2RlYnVnX2JmZC4gIExJTksgaXMgYSBwYXRoIHRvIGEgcG90ZW50aWFs Ci0gICAgYnVpbGQtaWQtYmFzZWQgc2VwYXJhdGUgZGVidWcgZmlsZSwgcG90ZW50aWFsbHkgYSBz eW1saW5rIHRvIHRoZSByZWFsIGZpbGUuCi0gICAgSWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBtYXRj aGVzIEJVSUxEX0lELCByZXR1cm4gYSBCRkQgcmVmZXJlbmNlIHRvIGl0LiAgKi8KLSAKLSBzdGF0 aWMgZ2RiX2JmZF9yZWZfcHRyCi0tYnVpbGRfaWRfdG9fZGVidWdfYmZkXzEgKGNvbnN0IHN0ZDo6 c3RyaW5nICZsaW5rLCBzaXplX3QgYnVpbGRfaWRfbGVuLAotLQkJCSBjb25zdCBiZmRfYnl0ZSAq YnVpbGRfaWQpCi0rYnVpbGRfaWRfdG9fZGVidWdfYmZkXzEgKGNvbnN0IHN0ZDo6c3RyaW5nICZv cmlnX2xpbmssIHNpemVfdCBidWlsZF9pZF9sZW4sCi0rCQkJIGNvbnN0IGJmZF9ieXRlICpidWls ZF9pZCwgY2hhciAqKmxpbmtfcmV0dXJuKQotIHsKLSsgIGdkYl9iZmRfcmVmX3B0ciByZXRfYmZk ID0ge307Ci0rICBzdGQ6OnN0cmluZyByZXRfbGluazsKLSsKLSAgIGlmIChzZXBhcmF0ZV9kZWJ1 Z19maWxlX2RlYnVnKQotICAgICB7Ci0tICAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgXygi ICBUcnlpbmcgJXMuLi4iKSwgbGluay5jX3N0ciAoKSk7Ci0tICAgICAgZ2RiX2ZsdXNoIChnZGJf c3RkbG9nKTsKLSsgICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCBfKCIgIFRyeWluZyAlcy4u LiIpLCBvcmlnX2xpbmsuY19zdHIgKCkpOwotKyAgICAgIGdkYl9mbHVzaCAoZ2RiX3N0ZG91dCk7 Ci0gICAgIH0KLSAKLS0gIC8qIGxyZWFscGF0aCgpIGlzIGV4cGVuc2l2ZSBldmVuIGZvciB0aGUg dXN1YWxseSBub24tZXhpc3RlbnQgZmlsZXMuICAqLwotLSAgZ2RiOjp1bmlxdWVfeG1hbGxvY19w dHI8Y2hhcj4gZmlsZW5hbWVfaG9sZGVyOwotLSAgY29uc3QgY2hhciAqZmlsZW5hbWUgPSBudWxs cHRyOwotLSAgaWYgKGlzX3RhcmdldF9maWxlbmFtZSAobGluaykpCi0tICAgIGZpbGVuYW1lID0g bGluay5jX3N0ciAoKTsKLS0gIGVsc2UgaWYgKGFjY2VzcyAobGluay5jX3N0ciAoKSwgRl9PSykg PT0gMCkKLSsgIGZvciAodW5zaWduZWQgc2Vxbm8gPSAwOzsgc2Vxbm8rKykKLSAgICAgewotLSAg ICAgIGZpbGVuYW1lX2hvbGRlci5yZXNldCAobHJlYWxwYXRoIChsaW5rLmNfc3RyICgpKSk7Ci0t ICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZV9ob2xkZXIuZ2V0ICgpOwotLSAgICB9Ci0rICAgICAg c3RkOjpzdHJpbmcgbGluayA9IG9yaWdfbGluazsKLSAKLS0gIGlmIChmaWxlbmFtZSA9PSBOVUxM KQotLSAgICB7Ci0tICAgICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCi0tCWdkYl9w cmludGYgKGdkYl9zdGRsb2csCi0tCQkgICAgXygiIG5vLCB1bmFibGUgdG8gY29tcHV0ZSByZWFs IHBhdGhcbiIpKTsKLSsgICAgICBpZiAoc2Vxbm8gPiAwKQotKwl7Ci0rCSAgLyogVGhlcmUgY2Fu IGJlIG11bHRpcGxlIGJ1aWxkLWlkIHN5bWxpbmtzIHBvaW50aW5nIHRvIHJlYWwgZmlsZXMKLSsJ ICAgICB3aXRoIHRoZSBzYW1lIGJ1aWxkLWlkIChzdWNoIGFzIGhhcmQgbGlua3MpLiAgU29tZSBv ZiB0aGUgcmVhbAotKwkgICAgIGZpbGVzIG1heSBub3QgYmUgaW5zdGFsbGVkLiAgKi8KLSAKLS0g ICAgICByZXR1cm4ge307Ci0tICAgIH0KLSsJICBzdHJpbmdfYXBwZW5kZiAobGluaywgIi4ldSIs IHNlcW5vKTsKLSsJfQotIAotLSAgLyogV2UgZXhwZWN0IHRvIGJlIHNpbGVudCBvbiB0aGUgbm9u LWV4aXN0aW5nIGZpbGVzLiAgKi8KLS0gIGdkYl9iZmRfcmVmX3B0ciBkZWJ1Z19iZmQgPSBnZGJf YmZkX29wZW4gKGZpbGVuYW1lLCBnbnV0YXJnZXQpOwotKyAgICAgIHJldF9saW5rID0gbGluazsK LSAKLS0gIGlmIChkZWJ1Z19iZmQgPT0gTlVMTCkKLS0gICAgewotLSAgICAgIGlmIChzZXBhcmF0 ZV9kZWJ1Z19maWxlX2RlYnVnKQotLQlnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCBfKCIgbm8sIHVu YWJsZSB0byBvcGVuLlxuIikpOwotKyAgICAgIHN0cnVjdCBzdGF0IHN0YXRidWZfdHJhc2g7Ci0r Ci0rICAgICAgLyogYGFjY2VzcycgYXV0b21hdGljYWxseSBkZXJlZmVyZW5jZXMgTElOSy4gICov Ci0rICAgICAgaWYgKGxzdGF0IChsaW5rLmNfc3RyICgpLCAmc3RhdGJ1Zl90cmFzaCkgIT0gMCkK LSsJewotKwkgIC8qIFN0b3AgaW5jcmVhc2luZyBTRVFOTy4gICovCi0rCSAgYnJlYWs7Ci0rCX0K LSsKLSsgICAgICAvKiBscmVhbHBhdGgoKSBpcyBleHBlbnNpdmUgZXZlbiBmb3IgdGhlIHVzdWFs bHkgbm9uLWV4aXN0ZW50IGZpbGVzLiAgKi8KLSsgICAgICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0 cjxjaGFyPiBmaWxlbmFtZV9ob2xkZXI7Ci0rICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUgPSBu dWxscHRyOwotKyAgICAgIGlmIChzdGFydHN3aXRoIChsaW5rLCBUQVJHRVRfU1lTUk9PVF9QUkVG SVgpKQotKwlmaWxlbmFtZSA9IGxpbmsuY19zdHIgKCk7Ci0rICAgICAgZWxzZSBpZiAoYWNjZXNz IChsaW5rLmNfc3RyICgpLCBGX09LKSA9PSAwKQotKwl7Ci0rCSAgZmlsZW5hbWVfaG9sZGVyLnJl c2V0IChscmVhbHBhdGggKGxpbmsuY19zdHIgKCkpKTsKLSsJICBmaWxlbmFtZSA9IGZpbGVuYW1l X2hvbGRlci5nZXQgKCk7Ci0rCX0KLSsKLSsgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKLSsJ ewotKwkgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQotKwkgICAgZ2RiX3ByaW50ZiAo Z2RiX3N0ZGxvZywKLSsJICAgICAgICAgICAgICAgICAgICAgICBfKCIgbm8sIHVuYWJsZSB0byBj b21wdXRlIHJlYWwgcGF0aFxuIikpOwotKwotKwkgIGNvbnRpbnVlOwotKwl9Ci0rCi0rICAgICAg LyogV2UgZXhwZWN0IHRvIGJlIHNpbGVudCBvbiB0aGUgbm9uLWV4aXN0aW5nIGZpbGVzLiAgKi8K LSsgICAgICBnZGJfYmZkX3JlZl9wdHIgZGVidWdfYmZkID0gZ2RiX2JmZF9vcGVuIChmaWxlbmFt ZSwgZ251dGFyZ2V0KTsKLSAKLS0gICAgICByZXR1cm4ge307Ci0rICAgICAgaWYgKGRlYnVnX2Jm ZCA9PSBOVUxMKQotKwl7Ci0rCSAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCi0rCSAg ICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCBfKCIgbm8sIHVuYWJsZSB0byBvcGVuLlxuIikpOwot KwotKwkgIGNvbnRpbnVlOwotKwl9Ci0rCi0rICAgICAgaWYgKCFidWlsZF9pZF92ZXJpZnkgKGRl YnVnX2JmZC5nZXQoKSwgYnVpbGRfaWRfbGVuLCBidWlsZF9pZCkpCi0rCXsKLSsJICBpZiAoc2Vw YXJhdGVfZGVidWdfZmlsZV9kZWJ1ZykKLSsJICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csCi0r CSAgICAgICAgICAgICAgICBfKCIgbm8sIGJ1aWxkLWlkIGRvZXMgbm90IG1hdGNoLlxuIikpOwot KwotKwkgIGNvbnRpbnVlOwotKwl9Ci0rCi0rICAgICAgcmV0X2JmZCA9IGRlYnVnX2JmZDsKLSsg ICAgICBicmVhazsKLSAgICAgfQotIAotLSAgaWYgKCFidWlsZF9pZF92ZXJpZnkgKGRlYnVnX2Jm ZC5nZXQoKSwgYnVpbGRfaWRfbGVuLCBidWlsZF9pZCkpCi0rICBzdGQ6OnN0cmluZyBsaW5rX2Fs bDsKLSsKLSsgIGlmIChyZXRfYmZkICE9IE5VTEwpCi0gICAgIHsKLSAgICAgICBpZiAoc2VwYXJh dGVfZGVidWdfZmlsZV9kZWJ1ZykKLS0JZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgXygiIG5vLCBi dWlsZC1pZCBkb2VzIG5vdCBtYXRjaC5cbiIpKTsKLS0KLS0gICAgICByZXR1cm4ge307Ci0rCWdk Yl9wcmludGYgKGdkYl9zdGRsb2csIF8oIiB5ZXMhXG4iKSk7Ci0rICAgIH0KLSsgIGVsc2UKLSsg ICAgewotKyAgICAgIC8qIElmIG5vbmUgb2YgdGhlIHJlYWwgZmlsZXMgaXMgZm91bmQgcmVwb3J0 IGFzIG1pc3NpbmcgZmlsZQotKwkgYWx3YXlzIHRoZSBub24tLiV1LXN1ZmZpeGVkIGZpbGUuICAq LwotKyAgICAgIHN0ZDo6c3RyaW5nIGxpbmswID0gb3JpZ19saW5rOwotKwotKyAgICAgIC8qIElm IHRoZSBzeW1saW5rIGhhcyB0YXJnZXQgcmVxdWVzdCB0byBpbnN0YWxsIHRoZSB0YXJnZXQuCi0r CSBCQVNFLWRlYnVnaW5mby5ycG0gY29udGFpbnMgdGhlIHN5bWxpbmsgYnV0IEJBU0UucnBtIG1h eSBiZSBtaXNzaW5nLgotKwkgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNn aT9pZD05ODExNTQgICovCi0rICAgICAgc3RkOjpzdHJpbmcgbGluazBfcmVzb2x2ZWQgKGxpbmtf cmVzb2x2ZSAobGluazAuY19zdHIgKCksIDApKTsKLSsKLSsgICAgICBpZiAobGlua19hbGwuZW1w dHkgKCkpCi0rCWxpbmtfYWxsID0gbGluazBfcmVzb2x2ZWQ7Ci0rICAgICAgZWxzZQotKwl7Ci0r CSAgLyogVXNlIHdoaXRlc3BhY2UgaW5zdGVhZCBvZiBESVJOQU1FX1NFUEFSQVRPUiB0byBiZSBj b21wYXRpYmxlIHdpdGgKLSsJICAgICBpdHMgcG9zc2libGUgdXNlIGFzIGFuIGFyZ3VtZW50IGZv ciBpbnN0YWxsYXRpb24gY29tbWFuZC4gICovCi0rCSAgbGlua19hbGwgKz0gIiAiICsgbGluazBf cmVzb2x2ZWQ7Ci0rCX0KLSAgICAgfQotIAotLSAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVi dWcpCi0tICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csIF8oIiB5ZXMhXG4iKSk7Ci0rICBpZiAo bGlua19yZXR1cm4gIT0gTlVMTCkKLSsgICAgewotKyAgICAgIGlmIChyZXRfYmZkICE9IE5VTEwp Ci0rCXsKLSsJICAqbGlua19yZXR1cm4gPSB4c3RyZHVwIChyZXRfbGluay5jX3N0ciAoKSk7Ci0r CX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICAqbGlua19yZXR1cm4gPSB4c3RyZHVwIChsaW5rX2Fs bC5jX3N0ciAoKSk7Ci0rCX0KLSsgICAgfQotIAotLSAgcmV0dXJuIGRlYnVnX2JmZDsKLSsgIHJl dHVybiByZXRfYmZkOwotIH0KLSAKLSAvKiBDb21tb24gY29kZSBmb3IgZmluZGluZyBCRkRzIG9m IGEgZ2l2ZW4gYnVpbGQtaWQuICBUaGlzIGZ1bmN0aW9uCi1AQCAtMTM4LDcgKzY0Miw3IEBAIGJ1 aWxkX2lkX3RvX2RlYnVnX2JmZF8xIChjb25zdCBzdGQ6OnN0cmluZyAmbGluaywgc2l6ZV90IGJ1 aWxkX2lkX2xlbiwKLSAKLSBzdGF0aWMgZ2RiX2JmZF9yZWZfcHRyCi0gYnVpbGRfaWRfdG9fYmZk X3N1ZmZpeCAoc2l6ZV90IGJ1aWxkX2lkX2xlbiwgY29uc3QgYmZkX2J5dGUgKmJ1aWxkX2lkLAot LQkJCWNvbnN0IGNoYXIgKnN1ZmZpeCkKLSsJCQljb25zdCBjaGFyICpzdWZmaXgsIGNoYXIgKips aW5rX3JldHVybikKLSB7Ci0gICAvKiBLZWVwIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgc28gdGhh dCBERUJVR19GSUxFX0RJUkVDVE9SWSBiZWluZyAiIiB3aWxsCi0gICAgICBjYXVzZSAiLy5idWls ZC1pZC8uLi4iIGxvb2t1cHMuICAqLwotQEAgLTE2MSwxNiArNjY1LDE3IEBAIGJ1aWxkX2lkX3Rv X2JmZF9zdWZmaXggKHNpemVfdCBidWlsZF9pZF9sZW4sIGNvbnN0IGJmZF9ieXRlICpidWlsZF9p ZCwKLSAgICAgICBpZiAoc2l6ZSA+IDApCi0gCXsKLSAJICBzaXplLS07Ci0tCSAgc3RyaW5nX2Fw cGVuZGYgKGxpbmssICIlMDJ4LyIsICh1bnNpZ25lZCkgKmRhdGErKyk7Ci0rCSAgc3RyaW5nX2Fw cGVuZGYgKGxpbmssICIlMDJ4IiwgKHVuc2lnbmVkKSAqZGF0YSsrKTsKLSAJfQotLQotKyAgICAg IGlmIChzaXplID4gMCkKLSsJbGluayArPSAiLyI7Ci0gICAgICAgd2hpbGUgKHNpemUtLSA+IDAp Ci0gCXN0cmluZ19hcHBlbmRmIChsaW5rLCAiJTAyeCIsICh1bnNpZ25lZCkgKmRhdGErKyk7Ci0g Ci0gICAgICAgbGluayArPSBzdWZmaXg7Ci0gCi0gICAgICAgZ2RiX2JmZF9yZWZfcHRyIGRlYnVn X2JmZAotLQk9IGJ1aWxkX2lkX3RvX2RlYnVnX2JmZF8xIChsaW5rLCBidWlsZF9pZF9sZW4sIGJ1 aWxkX2lkKTsKLSsJPSBidWlsZF9pZF90b19kZWJ1Z19iZmRfMSAobGluaywgYnVpbGRfaWRfbGVu LCBidWlsZF9pZCwgbGlua19yZXR1cm4pOwotICAgICAgIGlmIChkZWJ1Z19iZmQgIT0gTlVMTCkK LSAJcmV0dXJuIGRlYnVnX2JmZDsKLSAKLUBAIC0xODEsNyArNjg2LDcgQEAgYnVpbGRfaWRfdG9f YmZkX3N1ZmZpeCAoc2l6ZV90IGJ1aWxkX2lkX2xlbiwgY29uc3QgYmZkX2J5dGUgKmJ1aWxkX2lk LAotICAgICAgIGlmICghZ2RiX3N5c3Jvb3QuZW1wdHkgKCkpCi0gCXsKLSAJICBsaW5rID0gZ2Ri X3N5c3Jvb3QgKyBsaW5rOwotLQkgIGRlYnVnX2JmZCA9IGJ1aWxkX2lkX3RvX2RlYnVnX2JmZF8x IChsaW5rLCBidWlsZF9pZF9sZW4sIGJ1aWxkX2lkKTsKLSsJICBkZWJ1Z19iZmQgPSBidWlsZF9p ZF90b19kZWJ1Z19iZmRfMSAobGluaywgYnVpbGRfaWRfbGVuLCBidWlsZF9pZCwgTlVMTCk7Ci0g CSAgaWYgKGRlYnVnX2JmZCAhPSBOVUxMKQotIAkgICAgcmV0dXJuIGRlYnVnX2JmZDsKLSAJfQot QEAgLTE5MCwyMCArNjk1LDE3OCBAQCBidWlsZF9pZF90b19iZmRfc3VmZml4IChzaXplX3QgYnVp bGRfaWRfbGVuLCBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQsCi0gICByZXR1cm4ge307Ci0gfQot IAotK2NoYXIgKgotK2J1aWxkX2lkX3RvX2ZpbGVuYW1lIChjb25zdCBzdHJ1Y3QgYmZkX2J1aWxk X2lkICpidWlsZF9pZCwgY2hhciAqKmxpbmtfcmV0dXJuKQotK3sKLSsgIGdkYl9iZmRfcmVmX3B0 ciBhYmZkOwotKyAgY2hhciAqcmVzdWx0OwotKwotKyAgYWJmZCA9IGJ1aWxkX2lkX3RvX2V4ZWNf YmZkIChidWlsZF9pZC0+c2l6ZSwgYnVpbGRfaWQtPmRhdGEsIGxpbmtfcmV0dXJuKTsKLSsgIGlm IChhYmZkID09IE5VTEwpCi0rICAgIHJldHVybiBOVUxMOwotKwotKyAgcmVzdWx0ID0geHN0cmR1 cCAoYmZkX2dldF9maWxlbmFtZSAoYWJmZC5nZXQgKCkpKTsKLSsgIHJldHVybiByZXN1bHQ7Ci0r fQotKwotKy8qIFRoaXMgTUlTU0lOR19GSUxFUEFJUl9IQVNIIHRyYWNrZXIgaXMgdXNlZCBvbmx5 IGZvciB0aGUgZHVwbGljaXRlIG1lc3NhZ2VzCi0rICAgICB5dW0gLS1lbmFibGVyZXBvPScqZGVi dWcqJyBpbnN0YWxsIC4uLgotKyAgIGF2b2lkYW5jZS4gICovCi0rCi0rc3RydWN0IG1pc3Npbmdf ZmlsZXBhaXIKLSsgIHsKLSsgICAgY2hhciAqYmluYXJ5OwotKyAgICBjaGFyICpkZWJ1ZzsKLSsg ICAgY2hhciBkYXRhWzFdOwotKyAgfTsKLSsKLStzdGF0aWMgc3RydWN0IGh0YWIgKm1pc3Npbmdf ZmlsZXBhaXJfaGFzaDsKLStzdGF0aWMgc3RydWN0IG9ic3RhY2sgbWlzc2luZ19maWxlcGFpcl9v YnN0YWNrOwotKwotK3N0YXRpYyB2b2lkICoKLSttaXNzaW5nX2ZpbGVwYWlyX3hjYWxsb2MgKHNp emVfdCBubWVtYiwgc2l6ZV90IG5tZW1iX3NpemUpCi0rewotKyAgdm9pZCAqcmV0dmFsOwotKyAg c2l6ZV90IHNpemUgPSBubWVtYiAqIG5tZW1iX3NpemU7Ci0rCi0rICByZXR2YWwgPSBvYnN0YWNr X2FsbG9jICgmbWlzc2luZ19maWxlcGFpcl9vYnN0YWNrLCBzaXplKTsKLSsgIG1lbXNldCAocmV0 dmFsLCAwLCBzaXplKTsKLSsgIHJldHVybiByZXR2YWw7Ci0rfQotKwotK3N0YXRpYyBoYXNodmFs X3QKLSttaXNzaW5nX2ZpbGVwYWlyX2hhc2hfZnVuYyAoY29uc3Qgc3RydWN0IG1pc3NpbmdfZmls ZXBhaXIgKmVsZW0pCi0rewotKyAgaGFzaHZhbF90IHJldHZhbCA9IDA7Ci0rCi0rICByZXR2YWwg Xj0gaHRhYl9oYXNoX3N0cmluZyAoZWxlbS0+YmluYXJ5KTsKLSsgIGlmIChlbGVtLT5kZWJ1ZyAh PSBOVUxMKQotKyAgICByZXR2YWwgXj0gaHRhYl9oYXNoX3N0cmluZyAoZWxlbS0+ZGVidWcpOwot KwotKyAgcmV0dXJuIHJldHZhbDsKLSt9Ci0rCi0rc3RhdGljIGludAotK21pc3NpbmdfZmlsZXBh aXJfZXEgKGNvbnN0IHN0cnVjdCBtaXNzaW5nX2ZpbGVwYWlyICplbGVtMSwKLSsJCSAgICAgICBj b25zdCBzdHJ1Y3QgbWlzc2luZ19maWxlcGFpciAqZWxlbTIpCi0rewotKyAgcmV0dXJuIHN0cmNt cCAoZWxlbTEtPmJpbmFyeSwgZWxlbTItPmJpbmFyeSkgPT0gMAotKyAgICAgICAgICYmICgoZWxl bTEtPmRlYnVnID09IE5VTEwpID09IChlbGVtMi0+ZGVidWcgPT0gTlVMTCkpCi0rICAgICAgICAg JiYgKGVsZW0xLT5kZWJ1ZyA9PSBOVUxMIHx8IHN0cmNtcCAoZWxlbTEtPmRlYnVnLCBlbGVtMi0+ ZGVidWcpID09IDApOwotK30KLSsKLStzdGF0aWMgdm9pZAotK21pc3NpbmdfZmlsZXBhaXJfY2hh bmdlICh2b2lkKQotK3sKLSsgIGlmIChtaXNzaW5nX2ZpbGVwYWlyX2hhc2ggIT0gTlVMTCkKLSsg ICAgewotKyAgICAgIG9ic3RhY2tfZnJlZSAoJm1pc3NpbmdfZmlsZXBhaXJfb2JzdGFjaywgTlVM TCk7Ci0rICAgICAgLyogQWxsIHRoZWlyIG1lbW9yeSBjYW1lIGp1c3QgZnJvbSBtaXNzaW5nX2Zp bGVwYWlyX09CU1RBQ0suICAqLwotKyAgICAgIG1pc3NpbmdfZmlsZXBhaXJfaGFzaCA9IE5VTEw7 Ci0rICAgIH0KLSt9Ci0rCi0rc3RhdGljIHZvaWQKLStkZWJ1Z19wcmludF9leGVjdXRhYmxlX2No YW5nZWQgKHN0cnVjdCBwcm9ncmFtX3NwYWNlICpwc3BhY2UsIGJvb2wgcmVsb2FkX3ApCi0rewot KyAgbWlzc2luZ19maWxlcGFpcl9jaGFuZ2UgKCk7Ci0rfQotKwotKy8qIE5vdGlmeSB1c2VyIHRo ZSBmaWxlIEJJTkFSWSB3aXRoIChwb3NzaWJseSBOVUxMKSBhc3NvY2lhdGVkIHNlcGFyYXRlIGRl YnVnCi0rICAgaW5mb3JtYXRpb24gZmlsZSBERUJVRyBpcyBtaXNzaW5nLiAgREVCVUcgbWF5IG9y IG1heSBub3QgYmUgdGhlIGJ1aWxkLWlkCi0rICAgZmlsZSBzdWNoIGFzIHdvdWxkIGJlOgotKyAg ICAgL3Vzci9saWIvZGVidWcvLmJ1aWxkLWlkL2RkL2IxZDJjZTYzMjcyMWM0N2JiOWU4Njc5ZjM2 OWUyMjk1Y2U3MWJlLmRlYnVnCi0rICAgKi8KLSsKLSt2b2lkCi0rZGVidWdfcHJpbnRfbWlzc2lu ZyAoY29uc3QgY2hhciAqYmluYXJ5LCBjb25zdCBjaGFyICpkZWJ1ZykKLSt7Ci0rICBzaXplX3Qg YmluYXJ5X2xlbjAgPSBzdHJsZW4gKGJpbmFyeSkgKyAxOwotKyAgc2l6ZV90IGRlYnVnX2xlbjAg PSBkZWJ1ZyA/IHN0cmxlbiAoZGVidWcpICsgMSA6IDA7Ci0rICBzdHJ1Y3QgbWlzc2luZ19maWxl cGFpciBtaXNzaW5nX2ZpbGVwYWlyX2ZpbmQ7Ci0rICBzdHJ1Y3QgbWlzc2luZ19maWxlcGFpciAq bWlzc2luZ19maWxlcGFpcjsKLSsgIHN0cnVjdCBtaXNzaW5nX2ZpbGVwYWlyICoqc2xvdDsKLSsK LSsgIGlmIChidWlsZF9pZF92ZXJib3NlIDwgQlVJTERfSURfVkVSQk9TRV9GSUxFTkFNRVMpCi0r ICAgIHJldHVybjsKLSsKLSsgIGlmIChtaXNzaW5nX2ZpbGVwYWlyX2hhc2ggPT0gTlVMTCkKLSsg ICAgewotKyAgICAgIG9ic3RhY2tfaW5pdCAoJm1pc3NpbmdfZmlsZXBhaXJfb2JzdGFjayk7Ci0r ICAgICAgbWlzc2luZ19maWxlcGFpcl9oYXNoID0gaHRhYl9jcmVhdGVfYWxsb2MgKDY0LAotKwko aGFzaHZhbF90ICgqKSAoY29uc3Qgdm9pZCAqKSkgbWlzc2luZ19maWxlcGFpcl9oYXNoX2Z1bmMs Ci0rCShpbnQgKCopIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpIG1pc3NpbmdfZmlsZXBh aXJfZXEsIE5VTEwsCi0rCW1pc3NpbmdfZmlsZXBhaXJfeGNhbGxvYywgTlVMTCk7Ci0rICAgIH0K LSsKLSsgIC8qIFVzZSBNSVNTSU5HX0ZJTEVQQUlSX0ZJTkQgZmlyc3QgaW5zdGVhZCBvZiBjYWxs aW5nIG9ic3RhY2tfYWxsb2Mgd2l0aAotKyAgICAgb2JzdGFja19mcmVlIGluIHRoZSBjYXNlIG9m IGEgKHJhcmUpIG1hdGNoLiAgVGhlIHByb2JsZW0gaXMgQUxMT0NfRiBmb3IKLSsgICAgIE1JU1NJ TkdfRklMRVBBSVJfSEFTSCBhbGxvY2F0ZXMgZnJvbSBNSVNTSU5HX0ZJTEVQQUlSX09CU1RBQ0sg bWFpbnRlbmFuY2UKLSsgICAgIHN0cnVjdHVyZXMgZm9yIE1JU1NJTkdfRklMRVBBSVJfSEFTSC4g IENhbGxpbmcgb2JzdGFja19mcmVlIHdvdWxkIHBvc3NpYmx5Ci0rICAgICBub3QgdG8gZnJlZSBv bmx5IE1JU1NJTkdfRklMRVBBSVIgYnV0IGFsc28gc29tZSBzdWNoIHN0cnVjdHVyZXMgKGFsbG9j YXRlZAotKyAgICAgZHVyaW5nIHRoZSBodGFiX2ZpbmRfc2xvdCBjYWxsKS4gICovCi0rCi0rICBt aXNzaW5nX2ZpbGVwYWlyX2ZpbmQuYmluYXJ5ID0gKGNoYXIgKikgYmluYXJ5OwotKyAgbWlzc2lu Z19maWxlcGFpcl9maW5kLmRlYnVnID0gKGNoYXIgKikgZGVidWc7Ci0rICBzbG90ID0gKHN0cnVj dCBtaXNzaW5nX2ZpbGVwYWlyICoqKSBodGFiX2ZpbmRfc2xvdCAobWlzc2luZ19maWxlcGFpcl9o YXNoLAotKwkJCQkJCSAgICAgICZtaXNzaW5nX2ZpbGVwYWlyX2ZpbmQsCi0rCQkJCQkJICAgICAg SU5TRVJUKTsKLSsKLSsgIC8qIFdoaWxlIGl0IG1heSBiZSBzdGlsbCBwcmludGVkIGR1cGxpY2l0 ZWx5IHdpdGggdGhlIG1pc3NpbmcgZGVidWdpbmZvIGZpbGUKLSsgICAqIGl0IGlzIGR1ZSB0byBv bmNlIHByaW50aW5nIGFib3V0IHRoZSBiaW5hcnkgZmlsZSBidWlsZC1pZCBsaW5rIGFuZCBvbmNl Ci0rICAgKiBhYm91dCB0aGUgLmRlYnVnIGZpbGUgYnVpbGQtaWQgbGluayBhcyBib3RoIHRoZSBi dWlsZC1pZCBzeW1saW5rcyBhcmUKLSsgICAqIGxvY2F0ZWQgaW4gdGhlIGRlYnVnaW5mbyBwYWNr YWdlLiAgKi8KLSsKLSsgIGlmICgqc2xvdCAhPSBOVUxMKQotKyAgICByZXR1cm47Ci0rCi0rICBt aXNzaW5nX2ZpbGVwYWlyID0gKHN0cnVjdCBtaXNzaW5nX2ZpbGVwYWlyICopIG9ic3RhY2tfYWxs b2MgKCZtaXNzaW5nX2ZpbGVwYWlyX29ic3RhY2ssCi0rCQkJCQkJCQlzaXplb2YgKCptaXNzaW5n X2ZpbGVwYWlyKSAtIDEKLSsJCQkJCQkJCSsgYmluYXJ5X2xlbjAgKyBkZWJ1Z19sZW4wKTsKLSsg IG1pc3NpbmdfZmlsZXBhaXItPmJpbmFyeSA9IG1pc3NpbmdfZmlsZXBhaXItPmRhdGE7Ci0rICBt ZW1jcHkgKG1pc3NpbmdfZmlsZXBhaXItPmJpbmFyeSwgYmluYXJ5LCBiaW5hcnlfbGVuMCk7Ci0r ICBpZiAoZGVidWcgIT0gTlVMTCkKLSsgICAgewotKyAgICAgIG1pc3NpbmdfZmlsZXBhaXItPmRl YnVnID0gbWlzc2luZ19maWxlcGFpci0+YmluYXJ5ICsgYmluYXJ5X2xlbjA7Ci0rICAgICAgbWVt Y3B5IChtaXNzaW5nX2ZpbGVwYWlyLT5kZWJ1ZywgZGVidWcsIGRlYnVnX2xlbjApOwotKyAgICB9 Ci0rICBlbHNlCi0rICAgIG1pc3NpbmdfZmlsZXBhaXItPmRlYnVnID0gTlVMTDsKLSsKLSsgICpz bG90ID0gbWlzc2luZ19maWxlcGFpcjsKLSsKLSsgIC8qIFdlIGRvIG5vdCBjb2xsZWN0IGFuZCBm bHVzaCB0aGVzZSBtZXNzYWdlcyBhcyBlYWNoIHN1Y2ggbWVzc2FnZQotKyAgICAgYWxyZWFkeSBy ZXF1aXJlcyBpdHMgb3duIHNlcGFyYXRlIGxpbmVzLiAgKi8KLSsKLSsgIGdkYl9wcmludGYgKGdk Yl9zdGRsb2csCi0rCSAgICAgIF8oIk1pc3Npbmcgc2VwYXJhdGUgZGVidWdpbmZvIGZvciAlcy5c biIpLCBiaW5hcnkpOwotKyAgaWYgKGRlYnVnICE9IE5VTEwpCi0rICAgIHsKLSsgICAgICBnZGJf cHJpbnRmIChnZGJfc3RkbG9nLCBfKCJUcnk6ICVzICVzXG4iKSwKLSsjaWZkZWYgRE5GX0RFQlVH SU5GT19JTlNUQUxMCi0rCQkgICJkbmYiCi0rI2Vsc2UKLSsJCSAgInl1bSIKLSsjZW5kaWYKLSsJ CSAgIiAtLWVuYWJsZXJlcG89JypkZWJ1ZyonIGluc3RhbGwiLCBkZWJ1Zyk7Ci0rICAgIH0KLSt9 Ci0rCi0gLyogU2VlIGJ1aWxkLWlkLmguICAqLwotIAotIGdkYl9iZmRfcmVmX3B0cgotIGJ1aWxk X2lkX3RvX2RlYnVnX2JmZCAoc2l6ZV90IGJ1aWxkX2lkX2xlbiwgY29uc3QgYmZkX2J5dGUgKmJ1 aWxkX2lkKQotIHsKLS0gIHJldHVybiBidWlsZF9pZF90b19iZmRfc3VmZml4IChidWlsZF9pZF9s ZW4sIGJ1aWxkX2lkLCAiLmRlYnVnIik7Ci0rICByZXR1cm4gYnVpbGRfaWRfdG9fYmZkX3N1ZmZp eCAoYnVpbGRfaWRfbGVuLCBidWlsZF9pZCwgIi5kZWJ1ZyIsIG51bGxwdHIpOwotIH0KLSAKLSAv KiBTZWUgYnVpbGQtaWQuaC4gICovCi0gCi0gZ2RiX2JmZF9yZWZfcHRyCi0tYnVpbGRfaWRfdG9f ZXhlY19iZmQgKHNpemVfdCBidWlsZF9pZF9sZW4sIGNvbnN0IGJmZF9ieXRlICpidWlsZF9pZCkK LStidWlsZF9pZF90b19leGVjX2JmZCAoc2l6ZV90IGJ1aWxkX2lkX2xlbiwgY29uc3QgYmZkX2J5 dGUgKmJ1aWxkX2lkLAotKwkJICAgICAgY2hhciAqKmxpbmtfcmV0dXJuKQotIHsKLS0gIHJldHVy biBidWlsZF9pZF90b19iZmRfc3VmZml4IChidWlsZF9pZF9sZW4sIGJ1aWxkX2lkLCAiIik7Ci0r ICByZXR1cm4gYnVpbGRfaWRfdG9fYmZkX3N1ZmZpeCAoYnVpbGRfaWRfbGVuLCBidWlsZF9pZCwg IiIsIGxpbmtfcmV0dXJuKTsKLSB9Ci0gCi0gLyogU2VlIGJ1aWxkLWlkLmguICAqLwotQEAgLTIy NCw2ICs4ODcsNyBAQCBmaW5kX3NlcGFyYXRlX2RlYnVnX2ZpbGVfYnlfYnVpbGRpZCAoc3RydWN0 IG9iamZpbGUgKm9iamZpbGUsCi0gCi0gICAgICAgZ2RiX2JmZF9yZWZfcHRyIGFiZmQgKGJ1aWxk X2lkX3RvX2RlYnVnX2JmZCAoYnVpbGRfaWQtPnNpemUsCi0gCQkJCQkJICAgYnVpbGRfaWQtPmRh dGEpKTsKLSsKLSAgICAgICAvKiBQcmV2ZW50IGxvb3Bpbmcgb24gYSBzdHJpcHBlZCAuZGVidWcg ZmlsZS4gICovCi0gICAgICAgaWYgKGFiZmQgIT0gTlVMTAotIAkgICYmIGZpbGVuYW1lX2NtcCAo YmZkX2dldF9maWxlbmFtZSAoYWJmZC5nZXQgKCkpLAotQEAgLTI0MywzICs5MDcsMjIgQEAgZmlu ZF9zZXBhcmF0ZV9kZWJ1Z19maWxlX2J5X2J1aWxkaWQgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxl LAotIAotICAgcmV0dXJuIHN0ZDo6c3RyaW5nICgpOwotIH0KLSsKLSt2b2lkIF9pbml0aWFsaXpl X2J1aWxkX2lkICgpOwotKwotK3ZvaWQKLStfaW5pdGlhbGl6ZV9idWlsZF9pZCAoKQotK3sKLSsg IGFkZF9zZXRzaG93X3ppbnRlZ2VyX2NtZCAoImJ1aWxkLWlkLXZlcmJvc2UiLCBub19jbGFzcywg JmJ1aWxkX2lkX3ZlcmJvc2UsCi0rCQkJICAgIF8oIlwKLStTZXQgZGVidWdnaW5nIGxldmVsIG9m IHRoZSBidWlsZC1pZCBsb2NhdG9yLiIpLCBfKCJcCi0rU2hvdyBkZWJ1Z2dpbmcgbGV2ZWwgb2Yg dGhlIGJ1aWxkLWlkIGxvY2F0b3IuIiksIF8oIlwKLStMZXZlbCAxIChkZWZhdWx0KSBlbmFibGVz IHByaW50aW5nIHRoZSBtaXNzaW5nIGRlYnVnIGZpbGVuYW1lcyxcblwKLStsZXZlbCAyIGFsc28g cHJpbnRzIHRoZSBwYXJzaW5nIG9mIGJpbmFyaWVzIHRvIGZpbmQgdGhlIGlkZW50aWZpY2F0b3Jz LiIpLAotKwkJCSAgICBOVUxMLAotKwkJCSAgICBzaG93X2J1aWxkX2lkX3ZlcmJvc2UsCi0rCQkJ ICAgICZzZXRsaXN0LCAmc2hvd2xpc3QpOwotKwotKyAgZ2RiOjpvYnNlcnZlcnM6OmV4ZWN1dGFi bGVfY2hhbmdlZC5hdHRhY2ggKGRlYnVnX3ByaW50X2V4ZWN1dGFibGVfY2hhbmdlZCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbGQtaWQiKTsKLSt9 Ci1kaWZmIC0tZ2l0IGEvZ2RiL2J1aWxkLWlkLmggYi9nZGIvYnVpbGQtaWQuaAotLS0tIGEvZ2Ri L2J1aWxkLWlkLmgKLSsrKyBiL2dkYi9idWlsZC1pZC5oCi1AQCAtNDAsMTIgKzQwLDE2IEBAIGV4 dGVybiBpbnQgYnVpbGRfaWRfdmVyaWZ5IChiZmQgKmFiZmQsCi0gZXh0ZXJuIGdkYl9iZmRfcmVm X3B0ciBidWlsZF9pZF90b19kZWJ1Z19iZmQgKHNpemVfdCBidWlsZF9pZF9sZW4sCi0gCQkJCQkg ICAgICBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQpOwotIAotK2V4dGVybiBjaGFyICpidWlsZF9p ZF90b19maWxlbmFtZSAoY29uc3Qgc3RydWN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQsCi0rCQkJ CSAgIGNoYXIgKipsaW5rX3JldHVybik7Ci0rCi0gLyogRmluZCBhbmQgb3BlbiBhIEJGRCBmb3Ig YW4gZXhlY3V0YWJsZSBmaWxlIGdpdmVuIGEgYnVpbGQtaWQuICBJZiBubyBCRkQKLSAgICBjYW4g YmUgZm91bmQsIHJldHVybiBOVUxMLiAgVGhlIHJldHVybmVkIHJlZmVyZW5jZSB0byB0aGUgQkZE IG11c3QgYmUKLSAgICByZWxlYXNlZCBieSB0aGUgY2FsbGVyLiAgKi8KLSAKLSBleHRlcm4gZ2Ri X2JmZF9yZWZfcHRyIGJ1aWxkX2lkX3RvX2V4ZWNfYmZkIChzaXplX3QgYnVpbGRfaWRfbGVuLAot LQkJCQkJICAgICBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQpOwotKwkJCQkJICAgICBjb25zdCBi ZmRfYnl0ZSAqYnVpbGRfaWQsCi0rCQkJCQkgICAgIGNoYXIgKipsaW5rX3JldHVybik7Ci0gCi0g LyogRmluZCB0aGUgc2VwYXJhdGUgZGVidWcgZmlsZSBmb3IgT0JKRklMRSwgYnkgdXNpbmcgdGhl IGJ1aWxkLWlkCi0gICAgYXNzb2NpYXRlZCB3aXRoIE9CSkZJTEUncyBCRkQuICBJZiBzdWNjZXNz ZnVsLCByZXR1cm5zIHRoZSBmaWxlIG5hbWUgZm9yIHRoZQotZGlmZiAtLWdpdCBhL2dkYi9jb3Jl bG93LmMgYi9nZGIvY29yZWxvdy5jCi0tLS0gYS9nZGIvY29yZWxvdy5jCi0rKysgYi9nZGIvY29y ZWxvdy5jCi1AQCAtMjEsNiArMjEsOSBAQAotICNpbmNsdWRlIDxzaWduYWwuaD4KLSAjaW5jbHVk ZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSAiZnJhbWUuaCIKLSsjaW5jbHVkZSAiYXV4di5oIgotKyNp bmNsdWRlICJidWlsZC1pZC5oIgotKyNpbmNsdWRlICJlbGYvY29tbW9uLmgiCi0gI2luY2x1ZGUg ImluZmVyaW9yLmgiCi0gI2luY2x1ZGUgImluZnJ1bi5oIgotICNpbmNsdWRlICJzeW10YWIuaCIK LUBAIC0zODMsNiArMzg2LDggQEAgYWRkX3RvX3RocmVhZF9saXN0IChhc2VjdGlvbiAqYXNlY3Qs IGFzZWN0aW9uICpyZWdfc2VjdCwgaW5mZXJpb3IgKmluZikKLSAgICAgc3dpdGNoX3RvX3RocmVh ZCAodGhyKTsJCQkvKiBZZXMsIG1ha2UgaXQgY3VycmVudC4gICovCi0gfQotIAotK3N0YXRpYyBi b29sIGJ1aWxkX2lkX2NvcmVfbG9hZHMgPSB0cnVlOwotKwotIC8qIElzc3VlIGEgbWVzc2FnZSBz YXlpbmcgd2UgaGF2ZSBubyBjb3JlIHRvIGRlYnVnLCBpZiBGUk9NX1RUWS4gICovCi0gCi0gc3Rh dGljIHZvaWQKLUBAIC01NzAsOCArNTc1LDEwIEBAIGxvY2F0ZV9leGVjX2Zyb21fY29yZWZpbGVf YnVpbGRfaWQgKGJmZCAqYWJmZCwgaW50IGZyb21fdHR5KQotICAgaWYgKGJ1aWxkX2lkID09IG51 bGxwdHIpCi0gICAgIHJldHVybjsKLSAKLSsgIGNoYXIgKmJ1aWxkX2lkX2ZpbGVuYW1lOwotICAg Z2RiX2JmZF9yZWZfcHRyIGV4ZWNiZmQKLS0gICAgPSBidWlsZF9pZF90b19leGVjX2JmZCAoYnVp bGRfaWQtPnNpemUsIGJ1aWxkX2lkLT5kYXRhKTsKLSsgICAgPSBidWlsZF9pZF90b19leGVjX2Jm ZCAoYnVpbGRfaWQtPnNpemUsIGJ1aWxkX2lkLT5kYXRhLAotKwkJCSAgICAmYnVpbGRfaWRfZmls ZW5hbWUpOwotIAotICAgaWYgKGV4ZWNiZmQgPT0gbnVsbHB0cikKLSAgICAgewotQEAgLTU5OSw3 ICs2MDYsMTIgQEAgbG9jYXRlX2V4ZWNfZnJvbV9jb3JlZmlsZV9idWlsZF9pZCAoYmZkICphYmZk LCBpbnQgZnJvbV90dHkpCi0gICAgICAgZXhlY19maWxlX2F0dGFjaCAoYmZkX2dldF9maWxlbmFt ZSAoZXhlY2JmZC5nZXQgKCkpLCBmcm9tX3R0eSk7Ci0gICAgICAgc3ltYm9sX2ZpbGVfYWRkX21h aW4gKGJmZF9nZXRfZmlsZW5hbWUgKGV4ZWNiZmQuZ2V0ICgpKSwKLSAJCQkgICAgc3ltZmlsZV9h ZGRfZmxhZyAoZnJvbV90dHkgPyBTWU1GSUxFX1ZFUkJPU0UgOiAwKSk7Ci0rICAgICAgaWYgKGN1 cnJlbnRfcHJvZ3JhbV9zcGFjZS0+c3ltZmlsZV9vYmplY3RfZmlsZSAhPSBOVUxMKQotKwljdXJy ZW50X3Byb2dyYW1fc3BhY2UtPnN5bWZpbGVfb2JqZWN0X2ZpbGUtPmZsYWdzIHw9Ci0rCSAgT0JK Rl9CVUlMRF9JRF9DT1JFX0xPQURFRDsKLSAgICAgfQotKyAgZWxzZQotKyAgICBkZWJ1Z19wcmlu dF9taXNzaW5nIChCVUlMRF9JRF9NQUlOX0VYRUNVVEFCTEVfRklMRU5BTUUsIGJ1aWxkX2lkX2Zp bGVuYW1lKTsKLSB9Ci0gCi0gLyogU2VlIGdkYmNvcmUuaC4gICovCi1AQCAtMTUyNCw0ICsxNTM2 LDExIEBAIF9pbml0aWFsaXplX2NvcmVsb3cgKCkKLSAJICAgbWFpbnRlbmFuY2VfcHJpbnRfY29y ZV9maWxlX2JhY2tlZF9tYXBwaW5ncywKLSAJICAgXygiUHJpbnQgY29yZSBmaWxlJ3MgZmlsZS1i YWNrZWQgbWFwcGluZ3MuIiksCi0gCSAgICZtYWludGVuYW5jZXByaW50bGlzdCk7Ci0rCi0rICBh ZGRfc2V0c2hvd19ib29sZWFuX2NtZCAoImJ1aWxkLWlkLWNvcmUtbG9hZHMiLCBjbGFzc19maWxl cywKLSsJCQkgICAmYnVpbGRfaWRfY29yZV9sb2FkcywgXygiXAotK1NldCB3aGV0aGVyIENPUkUt RklMRSBsb2FkcyB0aGUgYnVpbGQtaWQgYXNzb2NpYXRlZCBmaWxlcyBhdXRvbWF0aWNhbGx5LiIp LCBfKCJcCi0rU2hvdyB3aGV0aGVyIENPUkUtRklMRSBsb2FkcyB0aGUgYnVpbGQtaWQgYXNzb2Np YXRlZCBmaWxlcyBhdXRvbWF0aWNhbGx5LiIpLAotKwkJCSAgIE5VTEwsIE5VTEwsIE5VTEwsCi0r CQkJICAgJnNldGxpc3QsICZzaG93bGlzdCk7Ci0gfQotZGlmZiAtLWdpdCBhL2dkYi9kb2MvZ2Ri LnRleGluZm8gYi9nZGIvZG9jL2dkYi50ZXhpbmZvCi0tLS0gYS9nZGIvZG9jL2dkYi50ZXhpbmZv Ci0rKysgYi9nZGIvZG9jL2dkYi50ZXhpbmZvCi1AQCAtMjI0ODcsNiArMjI0ODcsMjcgQEAgaW5m b3JtYXRpb24gZmlsZXMuCi0gCi0gQGVuZCB0YWJsZQotIAotK1lvdSBjYW4gYWxzbyBhZGp1c3Qg dGhlIGN1cnJlbnQgdmVyYm9zaXR5IG9mIHRoZSBAZGZue2J1aWxkIGlkfSBsb2NhdGluZy4KLSsK LStAdGFibGUgQGNvZGUKLSsKLStAa2luZGV4IHNldCBidWlsZC1pZC12ZXJib3NlCi0rQGl0ZW0g c2V0IGJ1aWxkLWlkLXZlcmJvc2UgMAotK05vIGFkZGl0aW9uYWwgbWVzc2FnZXMgYXJlIHByaW50 ZWQuCi0rCi0rQGl0ZW0gc2V0IGJ1aWxkLWlkLXZlcmJvc2UgMQotK01pc3Npbmcgc2VwYXJhdGUg ZGVidWcgZmlsZW5hbWVzIGFyZSBwcmludGVkLgotKwotK0BpdGVtIHNldCBidWlsZC1pZC12ZXJi b3NlIDIKLStNaXNzaW5nIHNlcGFyYXRlIGRlYnVnIGZpbGVuYW1lcyBhcmUgcHJpbnRlZCBhbmQg YWxzbyBhbGwgdGhlIHBhcnNpbmcgb2YgdGhlCi0rYmluYXJpZXMgdG8gZmluZCB0aGVpciBAZGZu e2J1aWxkIGlkfSBjb250ZW50IGlzIHByaW50ZWQuCi0rCi0rQGtpbmRleCBzaG93IGJ1aWxkLWlk LXZlcmJvc2UKLStAaXRlbSBzaG93IGJ1aWxkLWlkLXZlcmJvc2UKLStTaG93IHRoZSBjdXJyZW50 IHZlcmJvc2l0eSB2YWx1ZSBmb3IgdGhlIEBkZm57YnVpbGQgaWR9IGNvbnRlbnQgbG9jYXRpbmcu Ci0rCi0rQGVuZCB0YWJsZQotKwotIEBjaW5kZXggQGNvZGV7LmdudV9kZWJ1Z2xpbmt9IHNlY3Rp b25zCi0gQGNpbmRleCBkZWJ1ZyBsaW5rIHNlY3Rpb25zCi0gQSBkZWJ1ZyBsaW5rIGlzIGEgc3Bl Y2lhbCBzZWN0aW9uIG9mIHRoZSBleGVjdXRhYmxlIGZpbGUgbmFtZWQKLWRpZmYgLS1naXQgYS9n ZGIvb2JqZmlsZXMuaCBiL2dkYi9vYmpmaWxlcy5oCi0tLS0gYS9nZGIvb2JqZmlsZXMuaAotKysr IGIvZ2RiL29iamZpbGVzLmgKLUBAIC04NzcsNiArODc3LDEwIEBAIHN0cnVjdCBvYmpmaWxlCi0g ICBib29sIG9iamVjdF9mb3JtYXRfaGFzX2NvcHlfcmVsb2NzID0gZmFsc2U7Ci0gfTsKLSAKLSsv KiBUaGlzIGZpbGUgd2FzIGxvYWRlZCBhY2NvcmRpbmcgdG8gdGhlIEJVSUxEX0lEX0NPUkVfTE9B RFMgcnVsZXMuICAqLwotKwotKyNkZWZpbmUgT0JKRl9CVUlMRF9JRF9DT1JFX0xPQURFRCBzdGF0 aWNfY2FzdDxlbnVtIG9iamZpbGVfZmxhZz4oMSA8PCAxMikKLSsKLSAvKiBBIGRlbGV0ZXIgZm9y IG9iamZpbGUuICAqLwotIAotIHN0cnVjdCBvYmpmaWxlX2RlbGV0ZXIKLWRpZmYgLS1naXQgYS9n ZGIvc29saWItc3ZyNC5jIGIvZ2RiL3NvbGliLXN2cjQuYwotLS0tIGEvZ2RiL3NvbGliLXN2cjQu YwotKysrIGIvZ2RiL3NvbGliLXN2cjQuYwotQEAgLTQ0LDYgKzQ0LDcgQEAKLSAjaW5jbHVkZSAi YXV4di5oIgotICNpbmNsdWRlICJnZGJfYmZkLmgiCi0gI2luY2x1ZGUgInByb2JlLmgiCi0rI2lu Y2x1ZGUgImJ1aWxkLWlkLmgiCi0gCi0gI2luY2x1ZGUgPG1hcD4KLSAKLUBAIC0xMjYyLDYgKzEy NjMsNDYgQEAgc3ZyNF9yZWFkX3NvX2xpc3QgKHN2cjRfaW5mbyAqaW5mbywgQ09SRV9BRERSIGxt LCBDT1JFX0FERFIgcHJldl9sbSwKLSAJICBjb250aW51ZTsKLSAJfQotIAotKwl7Ci0rCSAgc3Ry dWN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQ7Ci0rCi0rCSAgYnVpbGRfaWQgPSBidWlsZF9pZF9h ZGRyX2dldCAobGktPmxfbGQpOwotKwkgIGlmIChidWlsZF9pZCAhPSBOVUxMKQotKwkgICAgewot KwkgICAgICBjaGFyICpiaWRfbmFtZSwgKmJ1aWxkX2lkX2ZpbGVuYW1lOwotKwotKwkgICAgICAv KiBNaXNzaW5nIHRoZSBidWlsZC1pZCBtYXRjaGluZyBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIGZpbGUK LSsJCSB3b3VsZCBiZSBoYW5kbGVkIHdoaWxlIFNPX05BTUUgZ2V0cyBsb2FkZWQuICAqLwotKwkg ICAgICBiaWRfbmFtZSA9IGJ1aWxkX2lkX3RvX2ZpbGVuYW1lIChidWlsZF9pZCwgJmJ1aWxkX2lk X2ZpbGVuYW1lKTsKLSsJICAgICAgaWYgKGJpZF9uYW1lICE9IE5VTEwpCi0rCQl7Ci0rCQkgIG5h bWUgPSBtYWtlX3VuaXF1ZV94c3RyZHVwIChiaWRfbmFtZSk7Ci0rCQkgIHhmcmVlIChiaWRfbmFt ZSk7Ci0rCQl9Ci0rCSAgICAgIGVsc2UKLSsJCXsKLSsJCSAgZGVidWdfcHJpbnRfbWlzc2luZyAo bmFtZS5nZXQgKCksIGJ1aWxkX2lkX2ZpbGVuYW1lKTsKLSsKLSsJCSAgLyogSW4gdGhlIGNhc2Ug dGhlIG1haW4gZXhlY3V0YWJsZSB3YXMgZm91bmQgYWNjb3JkaW5nIHRvCi0rCQkgICAgIGl0cyBi dWlsZC1pZCAoZnJvbSBhIGNvcmUgZmlsZSkgcHJldmVudCBsb2FkaW5nCi0rCQkgICAgIGEgZGlm ZmVyZW50IGJ1aWxkIG9mIGEgbGlicmFyeSB3aXRoIGFjY2lkZW50YWxseSB0aGUKLSsJCSAgICAg c2FtZSBTT19OQU1FLgotKwotKwkJICAgICBJdCBzdXBwcmVzc2VzIGJvZ3VzIGJhY2t0cmFjZXMg KGFuZCBwcmludHMgIj8/IiB0aGVyZQotKwkJICAgICBpbnN0ZWFkKSBpZiB0aGUgb24tZGlzayBm aWxlcyBubyBsb25nZXIgbWF0Y2ggdGhlCi0rCQkgICAgIHJ1bm5pbmcgcHJvZ3JhbSB2ZXJzaW9u LiAgKi8KLSsKLSsJCSAgaWYgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+c3ltZmlsZV9vYmplY3Rf ZmlsZSAhPSBOVUxMCi0rCQkgICAgICAmJiAoY3VycmVudF9wcm9ncmFtX3NwYWNlLT5zeW1maWxl X29iamVjdF9maWxlLT5mbGFncwotKwkJCSAgJiBPQkpGX0JVSUxEX0lEX0NPUkVfTE9BREVEKSAh PSAwKQotKwkJICAgIG5hbWUgPSBtYWtlX3VuaXF1ZV94c3RyZHVwICgiIik7Ci0rCQl9Ci0rCi0r CSAgICAgIHhmcmVlIChidWlsZF9pZF9maWxlbmFtZSk7Ci0rCSAgICAgIHhmcmVlIChidWlsZF9p ZCk7Ci0rCSAgICB9Ci0rCX0KLSsKLSAgICAgICAvKiBJZiB0aGlzIGVudHJ5IGhhcyBubyBuYW1l LCBvciBpdHMgbmFtZSBtYXRjaGVzIHRoZSBuYW1lCi0gCSBmb3IgdGhlIG1haW4gZXhlY3V0YWJs ZSwgZG9uJ3QgaW5jbHVkZSBpdCBpbiB0aGUgbGlzdC4gICovCi0gICAgICAgaWYgKCpuYW1lID09 ICdcMCcgfHwgbWF0Y2hfbWFpbiAobmFtZS5nZXQgKCkpKQotZGlmZiAtLWdpdCBhL2dkYi9zeW1m aWxlLmggYi9nZGIvc3ltZmlsZS5oCi0tLS0gYS9nZGIvc3ltZmlsZS5oCi0rKysgYi9nZGIvc3lt ZmlsZS5oCi1AQCAtMzYzLDYgKzM2MywxMSBAQCB2b2lkIG1hcF9zeW1ib2xfZmlsZW5hbWVzIChn ZGI6OmZ1bmN0aW9uX3ZpZXc8c3ltYm9sX2ZpbGVuYW1lX2Z0eXBlPiBmdW4sCi0gICAgb3B0aW9u YWwgb2Zmc2V0IHRvIGFwcGx5IHRvIGVhY2ggc2VjdGlvbi4gICovCi0gZXh0ZXJuIHZvaWQgZ2Vu ZXJpY19sb2FkIChjb25zdCBjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpOwotIAotKy8qIGJ1aWxk LWlkIHN1cHBvcnQuICAqLwotK2V4dGVybiBzdHJ1Y3QgYmZkX2J1aWxkX2lkICpidWlsZF9pZF9h ZGRyX2dldCAoQ09SRV9BRERSIGFkZHIpOwotK2V4dGVybiB2b2lkIGRlYnVnX3ByaW50X21pc3Np bmcgKGNvbnN0IGNoYXIgKmJpbmFyeSwgY29uc3QgY2hhciAqZGVidWcpOwotKyNkZWZpbmUgQlVJ TERfSURfTUFJTl9FWEVDVVRBQkxFX0ZJTEVOQU1FIF8oInRoZSBtYWluIGV4ZWN1dGFibGUgZmls ZSIpCi0rCi0gLyogRnJvbSBtaW5pZGVidWcuYy4gICovCi0gCi0gZXh0ZXJuIGdkYl9iZmRfcmVm X3B0ciBmaW5kX3NlcGFyYXRlX2RlYnVnX2ZpbGVfaW5fc2VjdGlvbiAoc3RydWN0IG9iamZpbGUg Kik7Ci1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9jb3JlZmlsZS5leHAgYi9n ZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2NvcmVmaWxlLmV4cAotLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9n ZGIuYmFzZS9jb3JlZmlsZS5leHAKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvY29yZWZp bGUuZXhwCi1AQCAtMzQ3LDMgKzM0NywzMyBAQCBnZGJfdGVzdF9tdWx0aXBsZSAiY29yZS1maWxl ICRjb3JlZmlsZSIgJHRlc3QgewotIAlwYXNzICR0ZXN0Ci0gICAgIH0KLSB9Ci0rCi0rCi0rIyBU ZXN0IGF1dG8tbG9hZGluZyBvZiBiaW5hcnkgZmlsZXMgdGhyb3VnaCBidWlsZC1pZCBmcm9tIHRo ZSBjb3JlIGZpbGUuCi0rc2V0IGJ1aWxkaWQgW2J1aWxkX2lkX2RlYnVnX2ZpbGVuYW1lX2dldCAk YmluZmlsZV0KLStzZXQgd2hvbGV0ZXN0ICJiaW5maWxlIGZvdW5kIGJ5IGJ1aWxkLWlkIgotK2lm IHskYnVpbGRpZCA9PSAiIn0gewotKyAgICB1bnRlc3RlZCAiJHdob2xldGVzdCAoYmluYXJ5IGhh cyBubyBidWlsZC1pZCkiCi0rfSBlbHNlIHsKLSsgICAgZ2RiX2V4aXQKLSsgICAgZ2RiX3N0YXJ0 Ci0rCi0rICAgIHJlZ3N1YiB7XC5kZWJ1ZyR9ICRidWlsZGlkIHt9IGJ1aWxkaWQKLSsgICAgc2V0 IGRlYnVnZGlyIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAke3Rlc3RmaWxlfS1kZWJ1Z2Rpcl0KLSsg ICAgZmlsZSBkZWxldGUgLWZvcmNlIC0tICRkZWJ1Z2RpcgotKyAgICBmaWxlIG1rZGlyICRkZWJ1 Z2Rpci9bZmlsZSBkaXJuYW1lICRidWlsZGlkXQotKyAgICBmaWxlIGNvcHkgJGJpbmZpbGUgJGRl YnVnZGlyLyRidWlsZGlkCi0rCi0rICAgIHNldCB0ZXN0ICJzaG93IGRlYnVnLWZpbGUtZGlyZWN0 b3J5IgotKyAgICBnZGJfdGVzdF9tdWx0aXBsZSAkdGVzdCAkdGVzdCB7Ci0rCS1yZSAiVGhlIGRp cmVjdG9yeSB3aGVyZSBzZXBhcmF0ZSBkZWJ1ZyBzeW1ib2xzIGFyZSBzZWFyY2hlZCBmb3IgaXMg XCIoLiopXCJcXC5cclxuJGdkYl9wcm9tcHQgJCIgewotKwkgICAgc2V0IGRlYnVnZGlyX29yaWcg JGV4cGVjdF9vdXQoMSxzdHJpbmcpCi0rCSAgICBwYXNzICR0ZXN0Ci0rCX0KLSsgICAgfQotKyAg ICBnZGJfdGVzdF9ub19vdXRwdXQgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSAkZGVidWdkaXI6 JGRlYnVnZGlyX29yaWciICJzZXQgZGVidWctZmlsZS1kaXJlY3RvcnkiCi0rICAgIGdkYl90ZXN0 ICJzaG93IGJ1aWxkLWlkLWNvcmUtbG9hZHMiIHtXaGV0aGVyIENPUkUtRklMRSBsb2FkcyB0aGUg YnVpbGQtaWQgYXNzb2NpYXRlZCBmaWxlcyBhdXRvbWF0aWNhbGx5IGlzIG9uXC59Ci0rICAgIGdk Yl90ZXN0ICJjb3JlLWZpbGUgJGNvcmVmaWxlIiAiXHJcblByb2dyYW0gdGVybWluYXRlZCB3aXRo IC4qIiAiY29yZS1maWxlIHdpdGhvdXQgZXhlY3V0YWJsZSIKLSsgICAgZ2RiX3Rlc3QgImluZm8g ZmlsZXMiICJMb2NhbCBleGVjIGZpbGU6XHJcblxbIFx0XF0qYFtzdHJpbmdfdG9fcmVnZXhwICRk ZWJ1Z2Rpci8kYnVpbGRpZF0nLCBmaWxlIHR5cGUgLioiCi0rICAgIHBhc3MgJHdob2xldGVzdAot K30KLWRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2dkYmluaXQtaGlzdG9yeS5l eHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2dkYmluaXQtaGlzdG9yeS5leHAKLS0tLSBhL2dk Yi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ2RiaW5pdC1oaXN0b3J5LmV4cAotKysrIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIuYmFzZS9nZGJpbml0LWhpc3RvcnkuZXhwCi1AQCAtMTc5LDcgKzE3OSw4IEBAIHBy b2MgdGVzdF9lbXB0eV9oaXN0b3J5X2ZpbGVuYW1lIHsgfSB7Ci0gICAgIGdsb2JhbCBlbnYKLSAg ICAgZ2xvYmFsIGdkYl9wcm9tcHQKLSAKLS0gICAgc2V0IGNvbW1vbl9oaXN0b3J5IFtsaXN0ICJz ZXQgaGVpZ2h0IDAiICJzZXQgd2lkdGggMCJdCi0rICAgIHNldCBjb21tb25faGlzdG9yeSBbbGlz dCAic2V0IGhlaWdodCAwIiAic2V0IHdpZHRoIDAiIFwKLSsJCQkgICAgInNldCBidWlsZC1pZC12 ZXJib3NlIDAiXQotIAotICAgICBzZXQgdGVzdF9kaXIgW3N0YW5kYXJkX291dHB1dF9maWxlIGhp c3RvcnlfdGVzdF0KLSAgICAgcmVtb3RlX2V4ZWMgaG9zdCAibWtkaXIgLXAgJHRlc3RfZGlyIgot ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvbmV3LXVpLXBlbmRpbmctaW5wdXQu ZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9uZXctdWktcGVuZGluZy1pbnB1dC5leHAKLS0t LSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvbmV3LXVpLXBlbmRpbmctaW5wdXQuZXhwCi0rKysg Yi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL25ldy11aS1wZW5kaW5nLWlucHV0LmV4cAotQEAgLTYw LDYgKzYwLDkgQEAgcHJvYyB0ZXN0X2NvbW1hbmRfbGluZV9uZXdfdWlfcGVuZGluZ19pbnB1dCB7 fSB7Ci0gICAgIHNldCBicGxpbmUgW2dkYl9nZXRfbGluZV9udW1iZXIgInNldCBicmVha3BvaW50 IGhlcmUiXQotIAotICAgICBzZXQgb3B0aW9ucyAiIgotKyAgICBhcHBlbmQgb3B0aW9ucyAiIC1p ZXggXCJzZXQgaGVpZ2h0IDBcIiIKLSsgICAgYXBwZW5kIG9wdGlvbnMgIiAtaWV4IFwic2V0IHdp ZHRoIDBcIiIKLSsgICAgYXBwZW5kIG9wdGlvbnMgIiAtaWV4IFwic2V0IGJ1aWxkLWlkLXZlcmJv c2UgMFwiIgotICAgICBhcHBlbmQgb3B0aW9ucyAiIC1pZXggXCJuZXctdWkgY29uc29sZSAkZXh0 cmFfdHR5X25hbWVcIiIKLSAgICAgYXBwZW5kIG9wdGlvbnMgIiAtZXggXCJiICRicGxpbmVcIiIK LSAgICAgYXBwZW5kIG9wdGlvbnMgIiAtZXggXCJydW5cIiIKLWRpZmYgLS1naXQgYS9nZGIvdGVz dHN1aXRlL2xpYi9nZGIuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAotLS0tIGEvZ2Ri L3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAotKysrIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAot QEAgLTIzOCw3ICsyMzgsOCBAQCBpZiAhW2luZm8gZXhpc3RzIElOVEVSTkFMX0dEQkZMQUdTXSB7 Ci0gCQkgICAiLW54IiBcCi0gCQkgICAiLXEiIFwKLSAJCSAgIHstaWV4ICJzZXQgaGVpZ2h0IDAi fSBcCi0tCQkgICB7LWlleCAic2V0IHdpZHRoIDAifV1dCi0rCQkgICB7LWlleCAic2V0IHdpZHRo IDAifSBcCi0rCQkgICB7LWlleCAic2V0IGJ1aWxkLWlkLXZlcmJvc2UgMCJ9XV0KLSAKLSAgICAg IyBJZiBERUJVR0lORk9EX1VSTFMgaXMgc2V0LCBnZGIgd2lsbCB0cnkgdG8gZG93bmxvYWQgc291 cmNlcyBhbmQKLSAgICAgIyBkZWJ1ZyBpbmZvIGZvciBmLmkuIHN5c3RlbSBsaWJyYXJpZXMuICBQ cmV2ZW50IHRoaXMuCi1AQCAtMjQ5Myw2ICsyNDk0LDE3IEBAIHByb2MgZGVmYXVsdF9nZGJfc3Rh cnQgeyB9IHsKLSAJfQotICAgICB9Ci0gCi0rICAgICMgVHVybiBvZmYgdGhlIG1pc3Npbmcgd2Fy bmluZ3MgYXMgdGhlIHRlc3RzdWl0ZSBkb2VzIG5vdCBleHBlY3QgaXQuCi0rICAgIHNlbmRfZ2Ri ICJzZXQgYnVpbGQtaWQtdmVyYm9zZSAwXG4iCi0rICAgIGdkYl9leHBlY3QgMTAgewotKwktcmUg IiRnZGJfcHJvbXB0ICQiIHsKLSsJICAgIHZlcmJvc2UgIkRpc2FibGVkIHRoZSBtaXNzaW5nIGRl YnVnIGluZm9zIHdhcm5pbmdzLiIgMgotKwl9Ci0rCXRpbWVvdXQgewotKwkgICAgd2FybmluZyAi Q291bGQgbm90IGRpc2FibGUgdGhlIG1pc3NpbmcgZGVidWcgaW5mb3Mgd2FybmluZ3MuLiIKLSsJ fQotKyAgICB9Ci0rCi0gICAgIGdkYl9kZWJ1Z19pbml0Ci0gICAgIHJldHVybiAwCi0gfQotZGlm ZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvbGliL21pLXN1cHBvcnQuZXhwIGIvZ2RiL3Rlc3RzdWl0 ZS9saWIvbWktc3VwcG9ydC5leHAKLS0tLSBhL2dkYi90ZXN0c3VpdGUvbGliL21pLXN1cHBvcnQu ZXhwCi0rKysgYi9nZGIvdGVzdHN1aXRlL2xpYi9taS1zdXBwb3J0LmV4cAotQEAgLTMyMSw2ICsz MjEsMTYgQEAgcHJvYyBkZWZhdWx0X21pX2dkYl9zdGFydCB7IHsgZmxhZ3Mge30gfSB9IHsKLSAJ ICAgIHdhcm5pbmcgIkNvdWxkbid0IHNldCB0aGUgd2lkdGggdG8gMC4iCi0gCX0KLSAgICAgfQot KyAgICAjIFR1cm4gb2ZmIHRoZSBtaXNzaW5nIHdhcm5pbmdzIGFzIHRoZSB0ZXN0c3VpdGUgZG9l cyBub3QgZXhwZWN0IGl0LgotKyAgICBzZW5kX2dkYiAiMTkwLWdkYi1zZXQgYnVpbGQtaWQtdmVy Ym9zZSAwXG4iCi0rICAgIGdkYl9leHBlY3QgMTAgewotKwktcmUgIi4qMTkwLWdkYi1zZXQgYnVp bGQtaWQtdmVyYm9zZSAwXHJcbjE5MFxcXF5kb25lXHJcbiRtaV9nZGJfcHJvbXB0JCIgewotKwkg ICAgdmVyYm9zZSAiRGlzYWJsZWQgdGhlIG1pc3NpbmcgZGVidWcgaW5mb3Mgd2FybmluZ3MuIiAy Ci0rCX0KLSsJdGltZW91dCB7Ci0rCSAgICB3YXJuaW5nICJDb3VsZCBub3QgZGlzYWJsZSB0aGUg bWlzc2luZyBkZWJ1ZyBpbmZvcyB3YXJuaW5ncy4uIgotKwl9Ci0rICAgIH0KLSAKLSAgICAgaWYg eyAkc2VwYXJhdGVfaW5mZXJpb3JfcHR5IH0gewotIAltaV9jcmVhdGVfaW5mZXJpb3JfcHR5Cgpk aWZmIC0tZ2l0IGEvZ2RiLWFkZC1kZXByZWNhdGVkLXNldHRpbmdzLXB5LXNjcmlwdC5wYXRjaCBi L2dkYi1hZGQtZGVwcmVjYXRlZC1zZXR0aW5ncy1weS1zY3JpcHQucGF0Y2gKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVlMmVhZgotLS0gL2Rldi9udWxsCisrKyBiL2dkYi1h ZGQtZGVwcmVjYXRlZC1zZXR0aW5ncy1weS1zY3JpcHQucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAor RnJvbSBGRURPUkFfUEFUQ0hFUyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJl dyBCdXJnZXNzIDxhYnVyZ2Vzc0ByZWRoYXQuY29tPgorRGF0ZTogVHVlLCAxOSBOb3YgMjAyNCAx Mzo1Njo1NiArMDAwMAorU3ViamVjdDogZ2RiLWFkZC1kZXByZWNhdGVkLXNldHRpbmdzLXB5LXNj cmlwdC5wYXRjaAorCis7OyBOb3QgYSBiYWNrcG9ydC4gIEFkZCBhIG5ldyBzY3JpcHQgd2hpY2gg ZGVmaW5lcyBhIHNldHRpbmcgd2hpY2ggaXMKKzs7IGRlcHJlY2F0ZWQsIGJ1dCB3ZSBkb24ndCB3 YW50IHRvIHJlbW92ZSBpdCBmcm9tIEZlZG9yYSBHREIganVzdCB5ZXQuCisKK2dkYjogYWRkIHNj cmlwdCB3aGljaCBkZWZpbmVzIGEgZGVwcmVjYXRlZCBzZXR0aW5ncworCitUaGUgYnVpbGQtaWQt Y29yZS1sb2FkIHNldHRpbmcgaGFzIG5vdCBiZWVuIHVzZWZ1bCBzaW5jZSAyMDIwLCBidXQgaXRz Citub3QgY2xlYXIgd2hlbiBpdCB3aWxsIGJlIE9LIHRvIHJlbW92ZSB0aGlzIGZyb20gR0RCLgor CitSYXRoZXIgdGhhbiBkZWZpbmluZyB0aGlzIHNldHRpbmcgaW4gQysrIGNvZGUsIGxldHMganVz dCBjcmVhdGUgaXQKK3VzaW5nIHRoaXMgUHl0aG9uIHNjcmlwdCwgdGhpcyBoZWxwcyBrZWVwIHRo ZSBGZWRvcmEgc3R1ZmYgb3V0IG9mIGNvcmUKK0dEQi4KKworZGlmZiAtLWdpdCBhL2dkYi9kYXRh LWRpcmVjdG9yeS9NYWtlZmlsZS5pbiBiL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgor LS0tIGEvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluCisrKysgYi9nZGIvZGF0YS1kaXJl Y3RvcnkvTWFrZWZpbGUuaW4KK0BAIC04Niw2ICs4Niw3IEBAIFBZVEhPTl9GSUxFX0xJU1QgPSBc CisgCWdkYi91bndpbmRlci5weSBcCisgCWdkYi94bWV0aG9kLnB5IFwKKyAJZ2RiL2NvbW1hbmQv X19pbml0X18ucHkgXAorKwlnZGIvY29tbWFuZC9kZXByZWNhdGVkLXNldHRpbmdzLnB5IFwKKyAJ Z2RiL2NvbW1hbmQvZXhwbG9yZS5weSBcCisgCWdkYi9jb21tYW5kL2ZyYW1lX2ZpbHRlcnMucHkg XAorIAlnZGIvY29tbWFuZC9taXNzaW5nX2ZpbGVzLnB5IFwKK2RpZmYgLS1naXQgYS9nZGIvcHl0 aG9uL2xpYi9nZGIvY29tbWFuZC9kZXByZWNhdGVkLXNldHRpbmdzLnB5IGIvZ2RiL3B5dGhvbi9s aWIvZ2RiL2NvbW1hbmQvZGVwcmVjYXRlZC1zZXR0aW5ncy5weQorbmV3IGZpbGUgbW9kZSAxMDA2 NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi9weXRob24vbGliL2dkYi9jb21tYW5kL2RlcHJl Y2F0ZWQtc2V0dGluZ3MucHkKK0BAIC0wLDAgKzEsMzUgQEAKKytpbXBvcnQgZ2RiCisrCisrIyBU aGlzIHNldHRpbmcgd2FzIGFkZGVkIHRvIEZlZG9yYSBHREIgYmFjayBpbiAyMDA3LiAgSXQgY29u dHJvbGxlZAorKyMgd2hldGhlciBHREIgd291bGQgdXNlIHRoZSBidWlsZC1pZCBleHRyYWN0ZWQg ZnJvbSBhIGNvcmUgZmlsZSB0bworKyMgYXV0by1sb2FkIHRoZSBleGVjdXRhYmxlIGlmIHRoZSB1 c2VyIGhhZCBub3QgYWxyZWFkeSBsb2FkZWQgYW4KKysjIGV4ZWN1dGFibGUuCisrIworKyMgSW4g MjAyMCB0aGlzIHNldHRpbmcgd2FzIGVmZmVjdGl2ZWx5IGRlcHJlY2F0ZWQgYXMgdGhlIG9ubHkg dXNlIG9mCisrIyB0aGUgc2V0dGluZydzIHZhbHVlIHdhcyByZW1vdmVkLiAgQWZ0ZXIgdGhpcyBH REIgd291bGQgYWx3YXlzCisrIyBhdXRvLWxvYWQgYW4gZXhlY3V0YWJsZSBiYXNlZCBvbiB0aGUg YnVpbGQtaWQgaWYgbm8gZXhlY3V0YWJsZSB3YXMKKysjIGFscmVhZHkgbG9hZGVkLgorKyMKKysj IEZvciBub3cgd2UgbWFpbnRhaW4gdGhpcyBzZXR0aW5nIGZvciBiYWNrd2FyZCBjb21wYXRpYmls aXR5IHJlYXNvbnMuCisrCisrY2xhc3MgYnVpbGRfaWRfY29yZV9sb2FkKGdkYi5QYXJhbWV0ZXIp OgorKyAgICAiIiJUaGlzIHNldHRpbmcgaXMgZGVwcmVjYXRlZC4gIENoYW5naW5nIGl0IHdpbGwg aGF2ZSBubyBlZmZlY3QuCisrICAgIFRoaXMgaXMgbWFpbnRhaW5lZCBvbmx5IGZvciBiYWNrd2Fy ZHMgY29tcGF0aWJpbGl0eS4KKysKKysgICAgV2hlbiBvcGVuaW5nIGEgY29yZS1maWxlLCBhbmQg bm8gZXhlY3V0YWJsZSBpcyBsb2FkZWQsIEdEQiB3aWxsCisrICAgIGFsd2F5cyB0cnkgdG8gYXV0 by1sb2FkIGEgc3VpdGFibGUgZXhlY3V0YWJsZSB1c2luZyB0aGUgYnVpbGQtaWQKKysgICAgZXh0 cmFjdGVkIGZyb20gdGhlIGNvcmUgZmlsZSAoaWYgYSBzdWl0YWJsZSBidWlsZC1pZCBjYW4gYmUK KysgICAgZm91bmQpLiIiIgorKworKyAgICBkZWYgX19pbml0X18oc2VsZik6CisrICAgICAgICBz ZWxmLnNldF9kb2MgPSAiVGhpcyBzZXR0aW5nIGlzIGRlcHJlY2F0ZWQgYW5kIGhhcyBubyBlZmZl Y3QuIgorKyAgICAgICAgc2VsZi5zaG93X2RvYyA9ICJUaGlzIHNldHRpbmcgaXMgZGVwcmVjYXRl ZCBhbmQgaGFzIG5vIGVmZmVjdC4iCisrICAgICAgICBzZWxmLnZhbHVlID0gVHJ1ZQorKworKyAg ICAgICAgc3VwZXIoKS5fX2luaXRfXygiYnVpbGQtaWQtY29yZS1sb2FkIiwgZ2RiLkNPTU1BTkRf REFUQSwgZ2RiLlBBUkFNX0JPT0xFQU4pCisrICAgIGRlZiB2YWxpZGF0ZShzZWxmKToKKysgICAg ICAgIHJldHVybiBUcnVlCisrICAgIGRlZiBnZXRfc2V0X3N0cmluZyhzZWxmKToKKysgICAgICAg IHJhaXNlIGdkYi5HZGJFcnJvcigiVGhlICdidWlsZC1pZC1jb3JlLWxvYWQnIHNldHRpbmcgaXMg ZGVwcmVjYXRlZC4iKQorKworK2J1aWxkX2lkX2NvcmVfbG9hZCgpCgpkaWZmIC0tZ2l0IGEvZ2Ri LWFkZC1ycG0tc3VnZ2VzdGlvbi1zY3JpcHQucGF0Y2ggYi9nZGItYWRkLXJwbS1zdWdnZXN0aW9u LXNjcmlwdC5wYXRjaAppbmRleCA3MzFhZWFhLi4yZWYyZWI0IDEwMDY0NAotLS0gYS9nZGItYWRk LXJwbS1zdWdnZXN0aW9uLXNjcmlwdC5wYXRjaAorKysgYi9nZGItYWRkLXJwbS1zdWdnZXN0aW9u LXNjcmlwdC5wYXRjaApAQCAtMTQsMTkgKzE0LDE0MiBAQCBzdWdnZXN0cyBkZWJ1Z2luZm8gUlBN cyB0byBpbnN0YWxsLgogZGlmZiAtLWdpdCBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5p biBiL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgogLS0tIGEvZ2RiL2RhdGEtZGlyZWN0 b3J5L01ha2VmaWxlLmluCiArKysgYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KLUBA IC04OSw2ICs4OSw3IEBAIFBZVEhPTl9GSUxFX0xJU1QgPSBcCi0gCWdkYi9jb21tYW5kL21pc3Np bmdfZGVidWcucHkgXAorQEAgLTkxLDYgKzkxLDcgQEAgUFlUSE9OX0ZJTEVfTElTVCA9IFwKKyAJ Z2RiL2NvbW1hbmQvbWlzc2luZ19maWxlcy5weSBcCiAgCWdkYi9jb21tYW5kL3ByZXR0eV9wcmlu dGVycy5weSBcCiAgCWdkYi9jb21tYW5kL3Byb21wdC5weSBcCiArCWdkYi9jb21tYW5kL3JwbS1z dWdnZXN0aW9ucy5weSBcCiAgCWdkYi9jb21tYW5kL3R5cGVfcHJpbnRlcnMucHkgXAogIAlnZGIv Y29tbWFuZC91bndpbmRlcnMucHkgXAogIAlnZGIvY29tbWFuZC94bWV0aG9kcy5weSBcCitkaWZm IC0tZ2l0IGEvZ2RiL2RvYy9nZGIudGV4aW5mbyBiL2dkYi9kb2MvZ2RiLnRleGluZm8KKy0tLSBh L2dkYi9kb2MvZ2RiLnRleGluZm8KKysrKyBiL2dkYi9kb2MvZ2RiLnRleGluZm8KK0BAIC0xODYs NiArMTg2LDcgQEAKKyAqIFRyYWNlIEZpbGUgRm9ybWF0OjoJCUB2YWx1ZXtHREJOfSB0cmFjZSBm aWxlIGZvcm1hdAorICogSW5kZXggU2VjdGlvbiBGb3JtYXQ6OiAgICAgICAgLmdkYl9pbmRleCBz ZWN0aW9uIGZvcm1hdAorICogRGVidWdpbmZvZDo6ICAgICAgICAgICAgICAgICAgRG93bmxvYWQg ZGVidWdnaW5nIHJlc291cmNlcyB3aXRoIEBjb2Rle2RlYnVnaW5mb2R9CisrKiBSUE0gU3VnZ2Vz dGlvbnM6OgkJUlBNIFN1Z2dlc3Rpb25zIGZyb20gR0RCCisgKiBNYW4gUGFnZXM6OiAgICAgICAg ICAgICAgICAgICBNYW51YWwgcGFnZXMKKyAqIENvcHlpbmc6OiAgICAgICAgICAgICAgICAgICAg IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHNheXMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGhvdyB5b3UgY2FuIGNvcHkgYW5kIHNoYXJlIEB2YWx1ZXtHREJOfQorQEAgLTUw MzQxLDYgKzUwMzQyLDExMSBAQAorIAorIEBlbmQgdGFibGUKKyAKKytAbm9kZSBSUE0gU3VnZ2Vz dGlvbnMKKytAYXBwZW5kaXggUmVjZWl2aW5nIFJQTSBpbnN0YWxsYXRpb24gc3VnZ2VzdGlvbnMK KytAY2luZGV4IHJwbSBzdWdnZXN0aW9ucworKworK1doZW4gQHZhbHVle0dEQk59IGxvYWRzIGFu IGV4ZWN1dGFibGUsIG9yIHNoYXJlZCBsaWJyYXJ5LCBhbmQgY2Fubm90CisrZmluZCB0aGUgY29y cmVzcG9uZGluZyBkZWJ1ZyBpbmZvcm1hdGlvbiwgQHZhbHVle0dEQk59IHdpbGwgY2hlY2sgdG8K KytzZWUgaWYgYW4gUlBNIGlzIGF2YWlsYWJsZSB3aGljaCBjb3VsZCBwcm92aWRlIHRoZSBtaXNz aW5nIGRlYnVnCisraW5mb3JtYXRpb24uICBJZiBhIHN1aXRhYmxlIFJQTSBpcyBmb3VuZCB0aGVu IEB2YWx1ZXtHREJOfSB3aWxsIHByaW50CisrYSBoaW50IGJlZm9yZSB0aGUgbmV4dCBwcm9tcHQg aXMgZGlzcGxheWVkOgorKworK0BzbWFsbGV4YW1wbGUKKysoQHZhbHVle0dEQlB9KSBmaWxlIC9i aW4vbHMKKytSZWFkaW5nIHN5bWJvbHMgZnJvbSAvYmluL2xzLi4uCisrUmVhZGluZyBzeW1ib2xz IGZyb20gLmdudV9kZWJ1Z2RhdGEgZm9yIC91c3IvYmluL2xzLi4uCisrKE5vIGRlYnVnZ2luZyBz eW1ib2xzIGZvdW5kIGluIC5nbnVfZGVidWdkYXRhIGZvciAvdXNyL2Jpbi9scykKKytNaXNzaW5n IHJwbXMsIHRyeTogZG5mIC0tZW5hYmxlcmVwbz0nKmRlYnVnKicgaW5zdGFsbCBjb3JldXRpbHMt ZGVidWdpbmZvLTkuMy03LmZjMzkueDg2XzY0CisrKEB2YWx1ZXtHREJQfSkKKytAZW5kIHNtYWxs ZXhhbXBsZQorKworK0luIHRoaXMgY2FzZSwgaW5zdGFsbGluZyBAZmlsZXtjb3JldXRpbHMtZGVi dWdpbmZvLTkuMy03LmZjMzkueDg2XzY0fQorK3dpbGwgcHJvdmlkZSB0aGUgbWlzc2luZyBkZWJ1 ZyBpbmZvcm1hdGlvbiBmb3IgQGZpbGV7L2Jpbi9sc30uICBJdCBpcworK3VwIHRvIHlvdSB0byBp bnN0YWxsIHRoZSBzdWdnZXN0ZWQgcGFja2FnZSwgaWYgcG9zc2libGUsIGFuZCBhZnRlcgorK3Ro YXQgcmVsb2FkIHRoZSBleGVjdXRhYmxlIGluIEB2YWx1ZXtHREJOfSBzbyB0aGF0IHRoZSBuZXds eSBpbnN0YWxsZWQKKytkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQuCisrCisrVGhlIFJQ TSBzdWdnZXN0aW9uIGZlYXR1cmUgY2FuIGJlIGRpc2FibGVkOgorKworK0B0YWJsZSBAY29kZQor K0BraW5kZXggc2V0IHJwbS1zdWdnZXN0aW9uIGVuYWJsZWQKKytAa2luZGV4IHNob3cgcnBtLXN1 Z2dlc3Rpb24gZW5hYmxlZAorK0BjaW5kZXggcnBtIHN1Z2dlc3Rpb25zLCBkaXNhYmxpbmcKKytA aXRlbSBzZXQgcnBtLXN1Z2dlc3Rpb24gZW5hYmxlZCBAcntbfW9uQHJ7fH1vZmZAcntdfQorK0Bp dGVteCBzaG93IHJwbS1zdWdnZXN0aW9uIGVuYWJsZWQKKytXaGVuIEBzYW1we29ufSBAdmFsdWV7 R0RCTn0gd2lsbCBtYWtlIFJQTSBzdWdnZXN0aW9ucyB3aGVyZSBwb3NzaWJsZS4KKytXaGVuIEBz YW1we29mZn0gYWxsIFJQTSBzdWdnZXN0aW9uIHdpbGwgYmUgZGlzYWJsZWQuCisrQGVuZCB0YWJs ZQorKworK1doZW4gb3BlbmluZyBhIGNvcmUgZmlsZSAoQHB4cmVme2NvcmUtZmlsZSBjb21tYW5k fSksIGl0IG1heSBiZSB0aGUKKytjYXNlIHRoYXQgbm90IG9ubHkgaXMgdGhlIGRlYnVnIGluZm9y bWF0aW9uIG1pc3NpbmcsIGJ1dCB0aGUKKytjb3JyZXNwb25kaW5nIGV4ZWN1dGFibGUgaXRzZWxm IGlzIG1pc3NpbmcuICBGb3IgZXhhbXBsZSwgaWYgYSBjb3JlCisrZmlsZSBpcyBjb3BpZWQgZnJv bSBvbmUgbWFjaGluZSB0byBhbm90aGVyIGluIG9yZGVyIHRvIGRlYnVnLgorKworK0luIHRoaXMg Y2FzZSBAdmFsdWV7R0RCTn0gaXMgYWJsZSB0byBzdWdnZXN0IGEgY29tbWFuZCB3aGljaCB3aWxs CisraW5zdGFsbCB0aGUgbWlzc2luZyBleGVjdXRhYmxlIGJhc2VkIG9uIHRoZSBidWlsZC1pZCBv ZiB0aGUKKytleGVjdXRhYmxlLiAgRm9yIGV4YW1wbGU6CisrCisrQHNtYWxsZXhhbXBsZQorKyhA dmFsdWV7R0RCUH0pIGNvcmUtZmlsZSAvdG1wL2NvcmUuNTQ4OQorK3dhcm5pbmc6IENhbid0IG9w ZW4gZmlsZSAvdXNyL2Jpbi9zbCBkdXJpbmcgZmlsZS1iYWNrZWQgbWFwcGluZyBub3RlIHByb2Nl c3NpbmcKKytbTmV3IExXUCA1NDg5XQorK0NvcmUgd2FzIGdlbmVyYXRlZCBieSBgc2wnLgorK1By b2dyYW0gdGVybWluYXRlZCB3aXRoIHNpZ25hbCBTSUdRVUlULCBRdWl0LgorKyMwICAweDAwMDA3 ZjFiNDFjZWQxYTcgaW4gPz8gKCkKKytNaXNzaW5nIGZpbGUocyksIHRyeTogZG5mIC0tZW5hYmxl cmVwbz0nKmRlYnVnKicgaW5zdGFsbCAvdXNyL2xpYi8uYnVpbGQtaWQvMzMvMmYxYThlNTY2OTM5 NjBlM2JlYjJkNzBjZDc5ZGRmZWM0NTFjYzMgL3Vzci9saWIvZGVidWcvLmJ1aWxkLWlkLzMzLzJm MWE4ZTU2NjkzOTYwZTNiZWIyZDcwY2Q3OWRkZmVjNDUxY2MzLmRlYnVnCisrKEB2YWx1ZXtHREJQ fSkKKytAZW5kIHNtYWxsZXhhbXBsZQorKworK1RoZSBjb3JlIGZpbGUgd2FzIGdlbmVyYXRlZCBm cm9tIHRoZSBAZmlsZXsvdXNyL2Jpbi9zbH0gYmluYXJ5LCB3aGljaAorK2lzIG5vdCBwcmVzZW50 IG9uIHRoZSBtYWNoaW5lIG9wZW5pbmcgdGhlIGNvcmUgZmlsZS4gIEB2YWx1ZXtHREJOfSBoYXMK KytzdWdnZXN0ZWQgYSBjb21tYW5kLCBiYXNlZCBvbiB0aGUgYnVpbGQtaWQgb2YgdGhlIGJpbmFy eSwgd2hpY2ggd2FzCisrZXh0cmFjdGVkIGZyb20gdGhlIGNvcmUgZmlsZSwgdGhhdCB3b3VsZCBp bnN0YWxsIGJvdGggdGhlIG1pc3NpbmcKKytiaW5hcnksIGFuZCB0aGUgY29ycmVzcG9uZGluZyBk ZWJ1ZyBpbmZvcm1hdGlvbi4KKysKKytVbmZvcnR1bmF0ZWx5LCBAdmFsdWV7R0RCTn0gZG9lc24n dCBrbm93IGlmIHRoZSBzdWdnZXN0ZWQgY29tbWFuZCB3aWxsCisrYWN0dWFsbHkgZmluZCBhIG1h dGNoaW5nIFJQTSBvciBub3QuICBRdWVyeWluZyB0aGUgUlBNIGRhdGFiYXNlIHRvIHNlZQorK3do aWNoIHBhY2thZ2VzLCBpZiBhbnksIHdpbGwgcHJvdmlkZSBhIGZpbGUgd2l0aCB0aGUgZ2l2ZW4g YnVpbGQtaWQsCisraXMgcmF0aGVyIHNsb3cuICBBcyBAZmlsZXsvdXNyL2Jpbi9zbH0gaXMgYXZh aWxhYmxlIGluIGFuIFJQTSwgdGhlbgorK3RoZSBhYm92ZSBjb21tYW5kIHdpbGwgc3VjY2VlZC4K KysKKytJdCBpcyBwb3NzaWJsZSB0byBoYXZlIEB2YWx1ZXtHREJOfSBjaGVjayB0byBzZWUgaWYg dGhlcmUgaXMgYSBwYWNrYWdlCisrYXZhaWxhYmxlIGJlZm9yZSBtYWtpbmcgdGhlIHN1Z2dlc3Rp b24sIGJ1dCB0aGlzIGlzIHNpZ25pZmljYW50bHkKKytzbG93ZXIuICBUbyBlbmFibGUgdGhpcyBt b2RlIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisrCisrQHRhYmxlIEBjb2RlCisrQGtpbmRl eCBzZXQgcnBtLXN1Z2dlc3Rpb24gYnVpbGQtaWQtbW9kZQorK0BraW5kZXggc2hvdyBycG0tc3Vn Z2VzdGlvbiBidWlsZC1pZC1tb2RlCisrQGNpbmRleCBycG0gc3VnZ2VzdGlvbnMsIGJ1aWxkLWlk LW1vZGUKKytAaXRlbSBzZXQgcnBtLXN1Z2dlc3Rpb24gYnVpbGQtaWQtbW9kZSBAcntbfWZhc3RA cnt8fXNsb3dAcntdfQorK0BpdGVteCBzaG93IHJwbS1zdWdnZXN0aW9uIGJ1aWxkLWlkLW1vZGUK KytXaGVuIHNldCB0byBAc2FtcHtmYXN0fSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQsIEB2YWx1ZXtH REJOfSB3aWxsIG9mZmVyCisrc3VnZ2VzdGlvbnMgYmFzZWQgb24gdGhlIGJ1aWxkLWlkIG9mIGFu eSBtaXNzaW5nIGV4ZWN1dGFibGVzIG9yIHNoYXJlZAorK2xpYnJhcmllcyB3aGlsZSBvcGVuaW5n IGEgY29yZSBmaWxlLiAgVGhpcyBpcyBmYXN0LCBidXQgQHZhbHVle0dEQk59CisraGFzIG5vdCBj aGVja2VkIGlmIHRoZXJlIGlzIGEgcGFja2FnZSBhdmFpbGFibGUgdGhhdCBjYW4gc3VwcGx5IHRo ZQorK3JlcXVpcmVkIGZpbGUsIHNvIHJ1bm5pbmcgdGhlIHN1Z2dlc3RlZCBjb21tYW5kIG1pZ2h0 IG5vdCBpbnN0YWxsIGFueQorK3BhY2thZ2VzLgorKworK1doZW4gc2V0IHRvIEBzYW1we3Nsb3d9 LCBlYWNoIHRpbWUgQHZhbHVle0dEQk59IGVuY291bnRlcnMgYW4KKytleGVjdXRhYmxlLCBvciBz aGFyZWQgbGlicmFyeSwgdGhhdCBpcyBtaXNzaW5nLCBAdmFsdWV7R0RCTn0gd2lsbAorK2NoZWNr IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBSUE0gYXZhaWxhYmxlIHRoYXQgd2lsbCBzdXBwbHkgdGhl IG1pc3NpbmcKKytiaW5hcnkuICBJZiBhIHN1aXRhYmxlIFJQTSBpcyBmb3VuZCB0aGVuIEB2YWx1 ZXtHREJOfSB3aWxsIG9mZmVyIGEKKytjb21tYW5kIHdoaWNoIHdpbGwgaW5zdGFsbCB0aGUgbWlz c2luZyBSUE0uICBJZiBubyBzdWl0YWJsZSBSUE0gaXMKKytmb3VuZCB0aGVuIEB2YWx1ZXtHREJO fSB3aWxsIG1ha2Ugbm8gc3VnZ2VzdGlvbnMuCisrQGVuZCB0YWJsZQorKworK0l0IGlzIHBvc3Np YmxlIHRvIHJldmlldyBhbGwgb2YgdGhlIHByZXZpb3VzIFJQTSBzdWdnZXN0aW9ucyB0aGF0Cisr QHZhbHVle0dEQk59IGhhcyBtYWRlIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKysKKytA dGFibGUgQGNvZGUKKytAa2luZGV4IGluZm8gcnBtLXN1Z2dlc3Rpb25zCisrQGNpbmRleCBycG0g c3VnZ2VzdGlvbnMsIGxpc3RpbmcKKytAaXRlbSBpbmZvIHJwbS1zdWdnZXN0aW9ucworK0xpc3Qg YWxsIG9mIHRoZSBSUE0gc3VnZ2VzdGlvbnMgQHZhbHVle0dEQk59IGhhcyBtYWRlIHNpbmNlIHRo ZQorK2V4ZWN1dGFibGUgd2FzIGxhc3QgY2hhbmdlZC4KKytAZW5kIHRhYmxlCisrCisgQG5vZGUg TWFuIFBhZ2VzCisgQGFwcGVuZGl4IE1hbnVhbCBwYWdlcworIEBjaW5kZXggTWFuIHBhZ2VzCiBk aWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvcnBtLXN1Z2dlc3Rpb25zLnB5 IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvcnBtLXN1Z2dlc3Rpb25zLnB5CiBuZXcgZmls ZSBtb2RlIDEwMDY0NAogLS0tIC9kZXYvbnVsbAogKysrIGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2Nv bW1hbmQvcnBtLXN1Z2dlc3Rpb25zLnB5Ci1AQCAtMCwwICsxLDEzNCBAQAorQEAgLTAsMCArMSw1 NTIgQEAKICsjIENvcHlyaWdodCAyMDIzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgog KwogKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKQEAgLTQyLDkgKzE2NSwxOSBAQCBuZXcgZmlsZSBtb2RlIDEwMDY0 NAogKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKICsjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogKwotK2ltcG9ydCBzeXMKICtpbXBvcnQg Z2RiCiAraW1wb3J0IGdkYi5taXNzaW5nX2RlYnVnCisraW1wb3J0IGdkYi5taXNzaW5nX29iamZp bGUKKysKKysjIFRoZXNlIG1vZHVsZXMgYXJlIGFsbCBzeXN0ZW0gbW9kdWxlcywgYW5kIHNob3Vs ZCBiZSBhdmFpbGFibGUgb24gYW55CisrIyBjb3JyZWN0bHkgc2V0dXAgUHl0aG9uIGluc3RhbGwu CisraW1wb3J0IHN5cworK2ltcG9ydCBvcworK2ltcG9ydCBzdWJwcm9jZXNzCisraW1wb3J0IHJl CisrZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAorK2ltcG9ydCB0aW1lCisrCiArdHJ5Ogog KyAgICBpbXBvcnQgcnBtCiArZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3I6CkBAIC02OCw2ICsy MDEsMTEgQEAgbmV3IGZpbGUgbW9kZSAxMDA2NDQKICsgICAgICAgIGdkYi5ldmVudHMuYmVmb3Jl X3Byb21wdC5kaXNjb25uZWN0KGJlZm9yZV9wcm9tcHQpCiArCiArICAgIGdkYi5ldmVudHMuYmVm b3JlX3Byb21wdC5jb25uZWN0KGJlZm9yZV9wcm9tcHQpCisrCisrICAgICMgSW1wbGVtZW50ICdp bmZvIHJwbS1zdWdnZXN0aW9ucycgd2hlbiB0aGUgJ3JwbScgbW9kdWxlIGlzIG5vdAorKyAgICAj IGF2YWlsYWJsZS4gIEp1c3QgdGhyb3dzIGFuIGVycm9yLgorKyAgICBkZWYgaW5mb19ycG1fc3Vn Z2VzdGlvbnMoKToKKysgICAgICAgIHJhaXNlIGdkYi5HZGJFcnJvcigicnBtLXN1Z2dlc3Rpb25z IGFyZSBkaXNhYmxlZCBhcyB0aGUgUHl0aG9uICdycG0nIG1vZHVsZSBpcyBub3QgaW5zdGFsbGVk IikKICtlbHNlOgogKyAgICAjIFRyYWNrIGFsbCB0aGUgUlBNcyBzdWdnZXN0ZWQgZHVyaW5nIGEg c2luZ2xlIGRlYnVnIHNlc3Npb24gc28gd2UKICsgICAgIyBkb24ndCBzdWdnZXN0IHRoZSBzYW1l IFJQTSB0d2ljZS4gIFRoaXMgaXMgb25seSBjbGVhcmVkIHdoZW4gdGhlCkBAIC04MCw2ICsyMTgs OTQgQEAgbmV3IGZpbGUgbW9kZSAxMDA2NDQKICsgICAgIyB0aGUgcHJvbXB0IGlzIHNob3duLgog KyAgICBfX3N1Z2dlc3RfcnBtcyA9IHt9CiArCisrICAgICMgVHJhY2sgYWxsIHRoZSBidWlsZC1p ZHMgc3VnZ2VzdGVkIGR1cmluZyBhIHNpbmdsZSBkZWJ1ZyBzZXNzaW9uIHNvIHdlCisrICAgICMg ZG9uJ3Qgc3VnZ2VzdCBpbnN0YWxsaW5nIHVzaW5nIHRoZSBzYW1lIGJ1aWxkLWlkIHR3aWNlLiAg VGhpcyBpcyBvbmx5CisrICAgICMgY2xlYXJlZCB3aGVuIHRoZSBtYWluIGV4ZWN1dGFibGUgaXMg Y2hhbmdlZC4KKysgICAgX19taXNzaW5nX2J1aWxkX2lkcyA9IHt9CisrCisrICAgICMgVHJhY2sg YW55IGJ1aWxkLWlkcyB0aGF0IGhhdmUgYmVlbiBkaXNjb3ZlcmVkIG1pc3Npbmcgc2luY2UgdGhl IGxhc3QKKysgICAgIyB0aW1lIHRoZSBwcm9tcHQgd2FzIGRpc3BsYXllZC4gIEJ1aWxkLWlkcyBp biBoZXJlIGFyZSBhbHNvIHByZXNlbnQgaW4KKysgICAgIyB0aGUgX19NSVNTSU5HX0JVSUxEX0lE UyBkaWN0aW9uYXJ5LCBidXQgdGhpcyBkaWN0aW9uYXJ5IGlzIGNsZWFyZWQKKysgICAgIyBlYWNo IHRpbWUgdGhlIHByb21wdCBpcyBzaG93bi4KKysgICAgX19zdWdnZXN0X2J1aWxkX2lkcyA9IHt9 CisrCisrICAgICMgVGhlIGJ1aWxkLWlkIHRvIFJQTSBsb29rdXAgaXMgdmVyeSBzbG93LiAgVGhp cyBjYWNoZSBtYXBzCisrICAgICMgYnVpbGQtaWRzIHRvIHRoZSBzZXQgb2YgUlBNIHdlIGNhbiBz dWdnZXN0IGluc3RhbGxpbmcuICBUaGUga2V5CisrICAgICMgaXMgdGhlIGJ1aWxkLWlkIHN0cmlu ZywgYW5kIHRoZSB2YWx1ZSBpcyBhIGxpc3Qgb2YgUlBNIG5hbWVzLCBvcgorKyAgICAjIE5vbmUg aWYgdGhlcmUgd2FzIGFuIGVycm9yIHdpdGggdGhlIGJ1aWxkLWlkIHRvIFJQTSBsb29rdXAuCisr ICAgICMKKysgICAgIyBUaGlzIGNhY2hlIGlzIG5ldmVyIGNsZWFyZWQsIGV2ZW4gd2hlbiB0aGUg ZXhlY3V0YWJsZSBpcworKyAgICAjIGNoYW5nZWQuICBUaGUgYnVpbGQtaWRzIHNob3VsZCBiZSB1 bmlxdWUsIHNvIGEgYnVpbGQtaWQgbG9va3VwCisrICAgICMgc2hvdWxkIGJlIGdvb2QgZm9yIHRo ZSBsaWZldGltZSBvZiB0aGUgc2Vzc2lvbi4KKysgICAgX19idWlsZF9pZF9sb29rdXBfY2FjaGUg PSB7fQorKworKyAgICAjIFdoZW4gc2VhcmNoaW5nIGZvciBhbiBSUE0gZ2l2ZW4gYSBidWlsZC1p ZCwgaWYgdGhlIHNlYXJjaCB0YWtlcworKyAgICAjIHRvbyBsb25nLCB0aGVuIGEgbWVzc2FnZSBp cyBwcmludGVkIHRvIHRoZSB1c2VyLiAgV2Ugb25seSBwcmludAorKyAgICAjIHRoZSBtZXNzYWdl IG9uY2UgYmV0d2VlbiBlYWNoIEdEQiBwcm9tcHQuICBUaGlzIGZsYWcgaXMgc2V0IFRydWUKKysg ICAgIyB3aGVuIHRoZSBtZXNzYWdlIGlzIHByaW50ZWQsIGFuZCByZXNldCB0byBGYWxzZSB3aGVu IGEgcHJvbXB0IGlzCisrICAgICMgZGlzcGxheWVkLgorKyAgICBfX3NlYXJjaGluZ19tZXNzYWdl X3ByaW50ZWQgPSBGYWxzZQorKworKyAgICAjIEFkZCBhIHN1Z2dlc3Rpb24gdG8gaW5zdGFsbCBS UE1fTkFNRSAodGhlIGZ1bGwgbmFtZSBvZiBhbiBSUE0pCisrICAgICMgdG8gdGhlIGxpc3Qgb2Yg c3VnZ2VzdGlvbnMgdG8gbWFrZSB0aGUgbmV4dCB0aW1lIGEgcHJvbXB0IGlzCisrICAgICMgZGlz cGxheWVkLgorKyAgICBkZWYgYWRkX3JwbV9zdWdnZXN0aW9uKHJwbV9uYW1lKToKKysgICAgICAg IGdsb2JhbCBfX21pc3NpbmdfcnBtcworKyAgICAgICAgZ2xvYmFsIF9fc3VnZ2VzdF9ycG1zCisr CisrICAgICAgICBpZiBub3QgcnBtX25hbWUgaW4gX19taXNzaW5nX3JwbXM6CisrICAgICAgICAg ICAgX19zdWdnZXN0X3JwbXNbcnBtX25hbWVdID0gVHJ1ZQorKyAgICAgICAgICAgIF9fbWlzc2lu Z19ycG1zW3JwbV9uYW1lXSA9IFRydWUKKysKKysgICAgIyBSZXR1cm4gVHJ1ZSBpZiBSUE1fTkFN RSBpcyBpbnN0YWxsZWQsIHdoZXJlIFJQTV9OQU1FIGlzIHRoZSBmdWxsCisrICAgICMgbmFtZSBv ZiBhbiBSUE0uCisrICAgIGRlZiBpc19ycG1faW5zdGFsbGVkKHRzLCBycG1fbmFtZSk6CisrICAg ICAgICByZXMgPSB0cy5kYk1hdGNoKHJwbS5SUE1EQklfTEFCRUwsIHJwbV9uYW1lKQorKyAgICAg ICAgcmV0dXJuIGxlbihyZXMpID4gMAorKworKyAgICAjIEFkZCBhIHN1Z2dlc3Rpb24gdG8gaW5z dGFsbCBSUE1zIGJhc2VkIG9uIEJVSUxEX0lELCBhIHN0cmluZworKyAgICAjIGNvbnRhaW5pbmcg YSBidWlsZC1pZCwgdG8gdGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMgdG8gbWFrZSB0aGUgbmV4dAor KyAgICAjIHRpbWUgYSBwcm9tcHQgaXMgZGlzcGxheWVkLgorKyAgICBkZWYgYWRkX2J1aWxkX2lk X3N1Z2dlc3Rpb24oYnVpbGRfaWQpOgorKyAgICAgICAgZ2xvYmFsIF9fbWlzc2luZ19idWlsZF9p ZHMKKysgICAgICAgIGdsb2JhbCBfX3N1Z2dlc3RfYnVpbGRfaWRzCisrCisrICAgICAgICBpZiBu b3QgYnVpbGRfaWQgaW4gX19taXNzaW5nX2J1aWxkX2lkczoKKysgICAgICAgICAgICBfX3N1Z2dl c3RfYnVpbGRfaWRzW2J1aWxkX2lkXSA9IFRydWUKKysgICAgICAgICAgICBfX21pc3NpbmdfYnVp bGRfaWRzW2J1aWxkX2lkXSA9IFRydWUKKysKKysgICAgIyBSZXR1cm4gdHJ1ZSBpZiAnL3Vzci9s aWInIGlzIGluIHRoZSBkZWJ1Zy1maWxlLWRpcmVjdG9yeSBsaXN0LgorKyAgICAjIFN5c3RlbSBw YWNrYWdlcyBpbnN0YWxsIHRoZWlyIGRlYnVnIGluZm9ybWF0aW9uIGludG8gL3Vzci9saWIsCisr ICAgICMgc28gaWYgR0RCIGlzbid0IGxvb2tpbmcgaW4gdGhhdCBkaXJlY3RvcnksIHRoZW4gdGhl cmUncyBubworKyAgICAjIHJlYXNvbiB0byB0cnkgYW5kIGZpZ3VyZSBvdXQgYSBzdWl0YWJsZSBS UE0gdG8gaW5zdGFsbC4KKysgICAgZGVmIHVzaW5nX3N1aXRhYmxlX2RlYnVnX2ZpbGVfZGlyZWN0 b3J5KCk6CisrICAgICAgICBkZWJ1Z19maWxlX2RpcmVjdG9yaWVzID0gZ2RiLnBhcmFtZXRlcigi ZGVidWctZmlsZS1kaXJlY3RvcnkiKQorKyAgICAgICAgZm9yIGQgaW4gZGVidWdfZmlsZV9kaXJl Y3Rvcmllcy5zcGxpdChvcy5wYXRoc2VwKToKKysgICAgICAgICAgICBpZiBkWzo4XSA9PSAiL3Vz ci9saWIiOgorKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorKyAgICAgICAgcmV0dXJuIEZh bHNlCisrCisrICAgICMgUmV0dXJuIFRydWUgaWYgcnBtLXN1Z2dlc3Rpb24gaXMgZGlzYWJsZWQg Zm9yIGFueSByZWFzb24uCisrICAgIGRlZiBycG1fc3VnZ2VzdGlvbl9pc19kaXNhYmxlZCgpOgor KyAgICAgICAgZ2xvYmFsIHBhcmFtX2J1aWxkX2lkX3ZlcmJvc2UKKysKKysgICAgICAgICMgSWYg L3Vzci9saWIvIGlzIG5vdCBiZWluZyB1c2VkIHRvIGZpbmQgZGVidWcgaW5mb3JtYXRpb24KKysg ICAgICAgICMgdGhlbiB0aGVyZSdzIG5vIHBvaW50IG9mZmVyaW5nIGFueSBSUE1zIGFzIEdEQiB3 b3VsZCBub3QKKysgICAgICAgICMgZmluZCB0aGUgbmV3bHkgaW5zdGFsbGVkIGNvbnRlbnQuCisr ICAgICAgICBpZiBub3QgdXNpbmdfc3VpdGFibGVfZGVidWdfZmlsZV9kaXJlY3RvcnkoKToKKysg ICAgICAgICAgICByZXR1cm4gVHJ1ZQorKworKyAgICAgICAgIyBGb3IgYmFja3dhcmRzIGNvbXBh dGliaWxpdHksIGlmIGJ1aWxkLWlkLXZlcmJvc2UgaXMgc2V0IHRvCisrICAgICAgICAjIHplcm8s IHRoZW4gZGlzYWJsZSBSUE0gc3VnZ2VzdGlvbi4KKysgICAgICAgIGlmIHBhcmFtX2J1aWxkX2lk X3ZlcmJvc2UudmFsdWUgPT0gMDoKKysgICAgICAgICAgICByZXR1cm4gVHJ1ZQorKworKyAgICAg ICAgIyBJcyAncnBtLXN1Z2dlc3Rpb24gZW5hYmxlZCcgc2V0IHRvICdvZmYnPworKyAgICAgICAg aWYgbm90IHBhcmFtX3JwbV9zdWdnZXN0aW9uX2VuYWJsZWQudmFsdWU6CisrICAgICAgICAgICAg cmV0dXJuIFRydWUKKysKKysgICAgICAgIHJldHVybiBGYWxzZQorKwogKwogKyAgICAjIExvb2t1 cCBSUE1zIHRoYXQgbWlnaHQgcHJvdmlkZSB0aGUgZGVidWcgaW5mb3JtYXRpb24gZm9yIEZJTEVO QU1FLAogKyAgICAjIHdoaWNoIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gYW4g b2JqZWN0IGZpbGUgR0RCIGNvdWxkCkBAIC04OCw1OSArMzE0LDI0MyBAQCBuZXcgZmlsZSBtb2Rl IDEwMDY0NAogKyAgICAjIElmIGEgcG9zc2libGUgUlBNIGlzIGZvdW5kIHRoZW4gdGhpcyBpcyBh ZGRlZCB0byB0aGUgZ2xvYmFscwogKyAgICAjIF9fTUlTU0lOR19SUE1TIGFuZCBfX1NVR0dFU1Rf UlBNUywgd2hpY2ggYXJlIHVzZWQgZWxzZXdoZXJlIGluIHRoaXMKICsgICAgIyBzY3JpcHQuCi0r ICAgIGRlZiBmaW5kX3N1Z2dlc3Rpb25zKGZpbGVuYW1lKToKLSsgICAgICAgIHRzID0gcnBtLlRy YW5zYWN0aW9uU2V0KCkKKysgICAgZGVmIGZpbmRfZGVidWdfc3VnZ2VzdGlvbnMoZmlsZW5hbWUp OgorKyAgICAgICAgaWYgcnBtX3N1Z2dlc3Rpb25faXNfZGlzYWJsZWQoKToKKysgICAgICAgICAg ICByZXR1cm4KICsKKysgICAgICAgIHRzID0gcnBtLlRyYW5zYWN0aW9uU2V0KCkKICsgICAgICAg IG1pID0gdHMuZGJNYXRjaChycG0uUlBNREJJX0JBU0VOQU1FUywgZmlsZW5hbWUpCiArICAgICAg ICBmb3IgaCBpbiBtaToKICsgICAgICAgICAgICAjIEJ1aWxkIHRoZSBkZWJ1Z2luZm8gcGFja2Fn ZSBuYW1lLgogKyAgICAgICAgICAgIG9iaiA9IGguZm9ybWF0KCIle25hbWV9LWRlYnVnaW5mby0l e3ZlcnNpb259LSV7cmVsZWFzZX0uJXthcmNofSIpCisrICAgICAgICAgICAgcnBtX25hbWUgPSBz dHIob2JqKQogKwogKyAgICAgICAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwYWNrYWdlIGlz IGluc3RhbGxlZC4KLSsgICAgICAgICAgICBtaTIgPSB0cy5kYk1hdGNoKHJwbS5SUE1EQklfTEFC RUwsIHN0cihvYmopKQotKyAgICAgICAgICAgIGlmIGxlbihtaTIpID4gMDoKKysgICAgICAgICAg ICBpZiBpc19ycG1faW5zdGFsbGVkKHRzLCBycG1fbmFtZSk6CiArICAgICAgICAgICAgICAgIGNv bnRpbnVlCiArCi0rICAgICAgICAgICAgIyBOb3cgYnVpbGQgdGhlIG5hbWUgb2YgdGhlIHBhY2th Z2UgRklMRU5BTUUgY2FtZSBmcm9tLgotKyAgICAgICAgICAgIG9iaiA9IGguZm9ybWF0KCIle25h bWV9LSV7dmVyc2lvbn0tJXtyZWxlYXNlfS4le2FyY2h9IikKLSsgICAgICAgICAgICBycG1fbmFt ZSA9IHN0cihvYmopCi0rICAgICAgICAgICAgaWYgbm90IHJwbV9uYW1lIGluIF9fbWlzc2luZ19y cG1zOgotKyAgICAgICAgICAgICAgICBfX3N1Z2dlc3RfcnBtc1tycG1fbmFtZV0gPSBUcnVlCi0r ICAgICAgICAgICAgICAgIF9fbWlzc2luZ19ycG1zW3JwbV9uYW1lXSA9IFRydWUKKysgICAgICAg ICAgICBhZGRfcnBtX3N1Z2dlc3Rpb24ocnBtX25hbWUpCisrCisrCisrICAgICMgUmV0dXJuIGEg c3RyaW5nIHdoaWNoIGlzIHRoZSBmaWxlbmFtZSBvZiB0aGUgZmlsZW5hbWUKKysgICAgIyBjb3Jy ZXNwb25kaW5nIHRvIEJVSUxEX0lEIGluIG9uZSBvZiB0aGUgdHdvIGxvY2F0aW9ucyB1bmRlcgor KyAgICAjIC91c3IvbGliLgorKyAgICAjCisrICAgICMgV2hlbiBERUJVR19QIGlzIFRydWUsIHJl dHVybiBhIGZpbGVuYW1lIHdpdGhpbjoKKysgICAgIyAvdXNyL2xpYi9kZWJ1Zy8uYnVpbGQtaWQv IGFuZCB3aGVuIERFQlVHX1AgaXMgRmFsc2UsIHJldHVybiBhCisrICAgICMgZmlsZW5hbWUgd2l0 aGluOiAvdXNyL2xpYi8uYnVpbGQtaWQvLgorKyAgICAjCisrICAgICMgVGhlIFNVRkZJWCBzdHJp bmcgaXMgYXBwZW5kZWQgdG8gdGhlIGdlbmVyYXRlZCBmaWxlbmFtZS4KKysgICAgZGVmIGJ1aWxk X2lkX3RvX3Vzcl9saWJfZmlsZW5hbWUoYnVpbGRfaWQsIGRlYnVnX3AsIHN1ZmZpeCA9ICIiKToK KysgICAgICAgIGtleSA9IGJ1aWxkX2lkWzoyXQorKyAgICAgICAgcnN0ID0gYnVpbGRfaWRbMjpd CisrCisrICAgICAgICBmaWxlbmFtZSA9ICcvdXNyL2xpYicKKysgICAgICAgIGlmIGRlYnVnX3A6 CisrICAgICAgICAgICAgZmlsZW5hbWUgKz0gJy9kZWJ1ZycKKysgICAgICAgIGZpbGVuYW1lICs9 ICcvLmJ1aWxkLWlkLycgKyBrZXkgKyAnLycgKyByc3QgKyBzdWZmaXgKKysKKysgICAgICAgIHJl dHVybiBmaWxlbmFtZQorKworKyAgICAjIEEgcmVnZXhwIG9iamVjdCB1c2VkIHRvIG1hdGNoIGFn YWluc3QgdGhlIG91dHB1dCBvZiBgZG5mYC4gIFRoaXMKKysgICAgIyBpcyBpbml0aWFsaXNlZCB0 aGUgZmlyc3QgdGltZSBpdCBpcyBuZWVkZWQuCisrICAgIGZpbmRfb2JqZmlsZV9zdWdnZXN0aW9u c19yZSA9IE5vbmUKKysKKysgICAgIyBHaXZlbiBCVUlMRF9JRCwgYSBzdHJpbmcgY29udGFpbmlu ZyBhIGJ1aWxkLWlkLCBydW4gYSBgZG5mYAorKyAgICAjIGNvbW1hbmQgdG8gZmlndXJlIG91dCBp ZiBhbnkgUlBNcyBjYW4gcHJvdmlkZSBhIGZpbGUgd2l0aCB0aGF0CisrICAgICMgYnVpbGQtaWQu CisrICAgICMKKysgICAgIyBJZiBhbnkgc3VpdGFibGUgUlBNcyBhcmUgZm91bmQgdGhlbiBgYWRk X3JwbV9zdWdnZXN0aW9uYCBpcyBjYWxsZWQKKysgICAgIyB0byByZWdpc3RlciB0aGUgc3VnZ2Vz dGlvbi4KKysgICAgIworKyAgICAjIFRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IHNsb3csIHdoaWNo IGlzIGEgc2hhbWUsIGFzIHRoZSByZXN1bHRzCisrICAgICMgcmV0dXJuZWQgYXJlIG11Y2ggbmlj ZXIgdGhhbiBqdXN0IHRlbGxpbmcgdGhlIHVzZXIgdG8gdHJ5IHRoZQorKyAgICAjIGxvb2t1cCBj b21tYW5kIGZvciB0aGVtc2VsdmVzLgorKyAgICBkZWYgZmluZF9vYmpmaWxlX3N1Z2dlc3Rpb25z X2luX3RocmVhZChidWlsZF9pZCk6CisrICAgICAgICBnbG9iYWwgZmluZF9vYmpmaWxlX3N1Z2dl c3Rpb25zX3JlCisrCisrICAgICAgICBpZiBmaW5kX29iamZpbGVfc3VnZ2VzdGlvbnNfcmUgaXMg Tm9uZToKKysgICAgICAgICAgICBmaW5kX29iamZpbGVfc3VnZ2VzdGlvbnNfcmUgPSByZS5jb21w aWxlKCJeKC4qKS1kZWJ1Z2luZm8tKC4qKSA6IERlYnVnIGluZm9ybWF0aW9uIGZvciBwYWNrYWdl ICguKikkIikKKysKKysgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKFsnZG5mJywgIi0t ZW5hYmxlcmVwbz0qZGVidWcqIiwgJy0tbm9ncGdjaGVjaycsICctQycsICdwcm92aWRlcycsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfaWRfdG9fdXNyX2xpYl9maWxl bmFtZShidWlsZF9pZCwgVHJ1ZSldLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgdGltZW91dD0zMCkKKysKKysgICAgICAgIGxpbmVzID0gcmVz dWx0LnN0ZG91dC5kZWNvZGUoJ3V0Zi04Jykuc3BsaXRsaW5lcygpCisrICAgICAgICB0cyA9IHJw bS5UcmFuc2FjdGlvblNldCgpCisrCisrICAgICAgICBmb3IgbCBpbiBsaW5lczoKKysgICAgICAg ICAgICBtID0gZmluZF9vYmpmaWxlX3N1Z2dlc3Rpb25zX3JlLm1hdGNoKGwpCisrICAgICAgICAg ICAgaWYgbm90IG06CisrICAgICAgICAgICAgICAgIGNvbnRpbnVlCisrICAgICAgICAgICAgaWYg bS5ncm91cCgxKSAhPSBtLmdyb3VwKDMpOgorKyAgICAgICAgICAgICAgICByZXR1cm4KKysKKysg ICAgICAgICAgICBtYWluX3JwbSA9IG0uZ3JvdXAoMSkgKyAnLScgKyBtLmdyb3VwKDIpCisrICAg ICAgICAgICAgZGJnX3JwbSA9IG0uZ3JvdXAoMSkgKyAnLWRlYnVnaW5mby0nICsgbS5ncm91cCgy KQorKworKyAgICAgICAgICAgIGlmIG5vdCBpc19ycG1faW5zdGFsbGVkKHRzLCBtYWluX3JwbSk6 CisrICAgICAgICAgICAgICAgIGFkZF9ycG1fc3VnZ2VzdGlvbihtYWluX3JwbSkKKysKKysgICAg ICAgICAgICBpZiBub3QgaXNfcnBtX2luc3RhbGxlZCh0cywgZGJnX3JwbSk6CisrICAgICAgICAg ICAgICAgIGFkZF9ycG1fc3VnZ2VzdGlvbihkYmdfcnBtKQorKworKyAgICAgICAgcmV0dXJuCiAr CisrICAgICMgQ2FsbCBgZmluZF9vYmpmaWxlX3N1Z2dlc3Rpb25zX2luX3RocmVhZGAgaXMgYSBz ZXBhcmF0ZSB0aHJlYWQsCisrICAgICMgdGhlbiB3YWl0IGZvciB0aGUgdGhyZWFkIHRvIGNvbXBs ZXRlLiAgRG9uJ3QgdG91Y2ggYW55IHNoYXJlZAorKyAgICAjIHN0YXRlIHdoaWxlIHdhaXRpbmcg Zm9yIHRoZSB0aHJlYWQgdG8gY29tcGxldGUuICBUaGVyZSdzIG5vCisrICAgICMgbG9ja2luZyBv biBhbnkgb2Ygb3VyIGNhY2hlcywgYW5kIHRoZSB3b3JrZXIgdGhyZWFkIHdpbGwgYWRkIFJQTQor KyAgICAjIHN1Z2dlc3Rpb25zIGFzIGl0IHdhbnRzLgorKyAgICAjCisrICAgICMgSWYgdGhyZSB0 aHJlYWQgdGFrZXMgdG9vIGxvbmcgdG8gY29tcGxldGUgdGhlbiBwcmludCBhIG1lc3NhZ2UKKysg ICAgIyB0byB0aGUgdXNlciB0ZWxsaW5nIHRoZW0gd2hhdCdzIGdvaW5nIG9uLgorKyAgICBkZWYg ZmluZF9vYmpmaWxlX3N1Z2dlc3Rpb25zX3Nsb3dfY29yZShidWlsZF9pZCk6CisrICAgICAgICBn bG9iYWwgX19zZWFyY2hpbmdfbWVzc2FnZV9wcmludGVkCisrCisrICAgICAgICB0aHJlYWQgPSBU aHJlYWQodGFyZ2V0ID0gZmluZF9vYmpmaWxlX3N1Z2dlc3Rpb25zX2luX3RocmVhZCwgYXJncyA9 IChidWlsZF9pZCwgKSkKKysgICAgICAgIHRocmVhZC5zdGFydCgpCisrICAgICAgICBzdGFydCA9 IHRpbWUudGltZV9ucygpCisrCisrICAgICAgICB3aGlsZSB0aHJlYWQuaXNfYWxpdmUgKCk6Cisr ICAgICAgICAgICAgdGltZS5zbGVlcCgwLjA1KQorKyAgICAgICAgICAgIG5vdyA9IHRpbWUudGlt ZV9ucyAoKQorKyAgICAgICAgICAgIGlmIG5vdCBfX3NlYXJjaGluZ19tZXNzYWdlX3ByaW50ZWQg YW5kIChub3cgLSBzdGFydCA+IDEwMDAwMDAwMDApOgorKyAgICAgICAgICAgICAgICBwcmludCgi U2VhcmNoaW5nIGZvciBwYWNrYWdlcyB0byBpbnN0YWxsIHRoYXQgY291bGQgaW1wcm92ZSBkZWJ1 Z2dpbmcuLi4iKQorKyAgICAgICAgICAgICAgICBfX3NlYXJjaGluZ19tZXNzYWdlX3ByaW50ZWQg PSBUcnVlCisrCisrICAgICAgICB0aHJlYWQuam9pbigpCisrCisrCisrICAgICMgR2l2ZW4gQlVJ TERfSUQsIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBidWlsZC1pZCwgbG9va3VwIHN1aXRhYmxlCisr ICAgICMgUlBNcyB0aGF0IGNvdWxkIGJlIGluc3RhbGxlZCB0byBwcm92aWRlIGEgZmlsZSB3aXRo IHRoZSByZXF1aXJlZAorKyAgICAjIGJ1aWxkLWlkLgorKyAgICAjCisrICAgICMgQW55IHN1aXRh YmxlIFJQTXMgYXJlIHJlY29yZGVkIGJ5IGNhbGxpbmcgYGFkZF9ycG1fc3VnZ2VzdGlvbmAsIGFu ZAorKyAgICAjIHdpbGwgYmUgcHJpbnRlZCBiZWZvcmUgdGhlIG5leHQgcHJvbXB0LgorKyAgICBk ZWYgZmluZF9vYmpmaWxlX3N1Z2dlc3Rpb25zX3Nsb3coYnVpbGRfaWQpOgorKyAgICAgICAgZ2xv YmFsIF9fYnVpbGRfaWRfbG9va3VwX2NhY2hlCisrICAgICAgICBnbG9iYWwgX19zdWdnZXN0X3Jw bXMKKysKKysgICAgICAgICMgVGhlIGNvZGUgdG8gbG9va3VwIGFuIFJQTSBnaXZlbiBvbmx5IGEg YnVpbGQtaWQgaXMgcHJldHR5CisrICAgICAgICAjIHNsb3cuICBDYWNoZSB0aGUgcmVzdWx0cyB0 byB0cnkgYW5kIHJlZHVjZSB0aGUgVUkgZGVsYXlzLgorKyAgICAgICAgaWYgYnVpbGRfaWQgaW4g X19idWlsZF9pZF9sb29rdXBfY2FjaGU6CisrICAgICAgICAgICAgcnBtcyA9IF9fYnVpbGRfaWRf bG9va3VwX2NhY2hlW2J1aWxkX2lkXQorKyAgICAgICAgICAgIGlmIHJwbXMgaXMgbm90IE5vbmU6 CisrICAgICAgICAgICAgICAgIGZvciByIGluIHJwbXM6CisrICAgICAgICAgICAgICAgICAgICBh ZGRfcnBtX3N1Z2dlc3Rpb24ocikKKysgICAgICAgICAgICByZXR1cm4KKysKKysgICAgICAgICMg TWFrZSBzdXJlIHRoZSBjYWNoZSBlbnRyeSBleGlzdHMgYmVmb3JlIHdlIGRvIHRoZSBsb29rdXAu CisrICAgICAgICAjIElmLCBmb3IgYW55IHJlYXNvbiwgdGhlIGxvb2t1cCByYWlzZXMgYW4gZXhj ZXB0aW9uLCB0aGVuCisrICAgICAgICAjIGhhdmluZyBhIGNhY2hlIGVudHJ5IHdpbGwgcHJldmVu dCB1cyByZXRyeWluZyB0aGlzIGxvb2t1cCBpbgorKyAgICAgICAgIyB0aGUgZnV0dXJlLgorKyAg ICAgICAgX19idWlsZF9pZF9sb29rdXBfY2FjaGVbYnVpbGRfaWRdID0gTm9uZQorKworKyAgICAg ICAgIyBOb3cgZG8gdGhlIGxvb2t1cC4gIFRoaXMgaXMgdGhlIHNsb3cgcGFydC4KKysgICAgICAg IGZpbmRfb2JqZmlsZV9zdWdnZXN0aW9uc19zbG93X2NvcmUoYnVpbGRfaWQpCisrCisrICAgICAg ICAjIEZpbGwgaW4gdGhlIGNhY2hlLCBmb3IgYSBnaXZlbiBidWlsZC1pZCB3aGljaCBSUE1zIHdl cmUKKysgICAgICAgICMgc3VnZ2VzdGVkLgorKyAgICAgICAgcnBtcyA9IFtdCisrICAgICAgICBm b3IgciBpbiBfX3N1Z2dlc3RfcnBtczoKKysgICAgICAgICAgICBycG1zLmFwcGVuZChyKQorKyAg ICAgICAgX19idWlsZF9pZF9sb29rdXBfY2FjaGVbYnVpbGRfaWRdID0gcnBtcworKworKworKyAg ICAjIEdpdmVuIEJVSUxEX0lELCBhIHN0cmluZyBjb250YWluaW5nIGEgYnVpbGQtaWQsIGp1c3Qg cmVjb3JkIHRoYXQgd2UKKysgICAgIyBzaG91bGQgYWR2aXNlIHRoZSB1c2VyIHRvIHRyeSBpbnN0 YWxsaW5nIFJQTXMgYmFzZWQgb24gdGhpcyBidWlsZC1pZC4KKysgICAgZGVmIGZpbmRfb2JqZmls ZV9zdWdnZXN0aW9uc19mYXN0KGJ1aWxkX2lkKToKKysgICAgICAgIGFkZF9idWlsZF9pZF9zdWdn ZXN0aW9uKGJ1aWxkX2lkKQorKworKyAgICAjIEdpdmVuIEJVSUxEX0lELCBhIHN0cmluZyBjb250 YWluaW5nIGEgYnVpbGQtaWQsIHdoaWNoIEdEQiBoYXMgZmFpbGVkCisrICAgICMgdG8gZmluZCwg cG9zc2libHkgcmVjb3JkIHNvbWUgaW5mb3JtYXRpb24gc28gdGhhdCB3ZSBjYW4sIGF0IHRoZSBu ZXh0CisrICAgICMgcHJvbXB0LCBnaXZlIHNvbWUgUlBNIGluc3RhbGxhdGlvbiBhZHZpY2UgdG8g dGhlIHVzZXIuCisrICAgICMKKysgICAgIyBXZSBoYXZlIHR3byBkaWZmZXJlbnQgc3RyYXRlZ2ll cyBmb3IgUlBNIGxvb2t1cCBiYXNlZCBvbiBhIGJ1aWxkLWlkLAorKyAgICAjIG9uZSBhcHByb2Fj aCBpcyB0aGF0IHdlIGFjdHVhbGx5IGxvb2t1cCB0aGUgUlBNcyBhbmQgb25seSBzdWdnZXN0Cisr ICAgICMgc29tZXRoaW5nIGlmIHRoZXJlIGlzIGEgc3VpdGFibGUgUlBNLiAgSG93ZXZlciwgdGhp cyBpcyBwcmV0dHkgc2xvdywKKysgICAgIyBhbmQgdXNlcnMgd2lsbCBwcm9iYWJseSBmaW5kIHRo aXMgYW5ub3lpbmcuCisrICAgICMKKysgICAgIyBTbyB3ZSBhbHNvIGhhdmUgYSBmYXN0IHdheS4g IFdpdGggdGhpcyBhcHByb2FjaCB3ZSBqdXN0IHJlY29yZCB0aGUKKysgICAgIyBidWlsZC1pZCB0 aGF0IHdhcyBtaXNzaW5nIGFuZCB0ZWxsIHRoZSB1c2VyIHRvIHRyeSBpbnN0YWxsaW5nIGJhc2Vk IG9uCisrICAgICMgdGhlIGJ1aWxkLWlkLiAgVGhlIGRvd25zaWRlIHdpdGggdGhpcyBpcyB0aGF0 IGlmIHRoZXJlIGlzIG5vIFJQTSBmb3IKKysgICAgIyB0aGF0IGJ1aWxkLWlkLCB0aGVuIHRoZSB1 c2VyIHdpbGwgdHJ5IHRoZSBjb21tYW5kLCBidXQgbm90aGluZyB3aWxsCisrICAgICMgaW5zdGFs bC4KKysgICAgZGVmIGZpbmRfb2JqZmlsZV9zdWdnZXN0aW9ucyhidWlsZF9pZCk6CisrICAgICAg ICBpZiBycG1fc3VnZ2VzdGlvbl9pc19kaXNhYmxlZCgpOgorKyAgICAgICAgICAgIHJldHVybgor KworKyAgICAgICAgaWYgcGFyYW1fcnBtX3N1Z2dlc3Rpb25fYnVpbGRfaWRfbW9kZS5mYXN0X21v ZGUoKToKKysgICAgICAgICAgICBmaW5kX29iamZpbGVfc3VnZ2VzdGlvbnNfZmFzdChidWlsZF9p ZCkKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgZmluZF9vYmpmaWxlX3N1Z2dlc3Rpb25z X3Nsb3coYnVpbGRfaWQpCiArCiArICAgICMgQSBtaXNzaW5nIGRlYnVnIGhhbmRsZXIgY2xhc3Mu ICBKdXN0IGZvcndhcmRzIHRoZSBuYW1lIG9mIHRoZQogKyAgICAjIG9iamZpbGUgZm9yIHdoaWNo IHdlIGFyZSBtaXNzaW5nIGRlYnVnIGluZm9ybWF0aW9uIHRvCi0rICAgICMgZmluZF9zdWdnZXN0 aW9ucy4KLSsgICAgY2xhc3MgUlBNU3VnZ2VzdGlvbkhhbmRsZXIoZ2RiLm1pc3NpbmdfZGVidWcu TWlzc2luZ0RlYnVnSGFuZGxlcik6CisrICAgICMgZmluZF9kZWJ1Z19zdWdnZXN0aW9ucy4KKysg ICAgY2xhc3MgUlBNX01pc3NpbmdEZWJ1Z0hhbmRsZXIoZ2RiLm1pc3NpbmdfZGVidWcuTWlzc2lu Z0RlYnVnSGFuZGxlcik6CiArICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CiArICAgICAgICAg ICAgc3VwZXIoKS5fX2luaXRfXygicnBtLXN1Z2dlc3Rpb25zIikKICsKICsgICAgICAgIGRlZiBf X2NhbGxfXyhzZWxmLCBvYmpmaWxlKToKLSsgICAgICAgICAgICAjIFRyYWRpdGlvbmFsbHkgdGhl ICdidWlsZC1pZC12ZXJib3NlJyBwYXJhbWV0ZXIgaXMgd2hhdAotKyAgICAgICAgICAgICMgY29u dHJvbGxlZCBhbGwgUlBNIHN1Z2dlc3Rpb24uICBNYXliZSBvbmNlIGFsbCB0aGUgUlBNCi0rICAg ICAgICAgICAgIyBzdWdnZXN0aW9uIGlzIHBlcmZvcm1lZCB2aWEgUHl0aG9uIGV4dGVuc2lvbnMg dGhlbiB3ZSBtaWdodAotKyAgICAgICAgICAgICMgY29uc2lkZXIgcmVuYW1pbmcgdGhpcyBwYXJh bWV0ZXIgdG8gc29tZXRoaW5nIGVsc2UsIGJ1dCBmb3IKLSsgICAgICAgICAgICAjIG5vdywgZm9y IGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIEkndmUgcmV0YWluZWQgdGhpcyBuYW1lLgotKyAgICAg ICAgICAgIGlmIGdkYi5wYXJhbWV0ZXIoImJ1aWxkLWlkLXZlcmJvc2UiKSA+IDA6Ci0rICAgICAg ICAgICAgICAgIGZpbmRfc3VnZ2VzdGlvbnMob2JqZmlsZS5maWxlbmFtZSkKLSsgICAgICAgICAg ICAgICAgcmV0dXJuIEZhbHNlCi0rICAgICAgICAgICAgcmV0dXJuIE5vbmUKKysgICAgICAgICAg ICBmaW5kX2RlYnVnX3N1Z2dlc3Rpb25zKG9iamZpbGUuZmlsZW5hbWUpCisrICAgICAgICAgICAg cmV0dXJuIEZhbHNlCisrCisrICAgICMgQSBtaXNzaW5nIG9iamZpbGUgaGFuZGxlciBjbGFzcy4g IEp1c3QgZm9yd2FyZHMgdGhlIGJ1aWxkLWlkIG9mCisrICAgICMgdGhlIG9iamZpbGUgdGhhdCBp cyBtaXNzaW5nIHRvIGZpbmRfb2JqZmlsZV9zdWdnZXN0aW9ucy4KKysgICAgY2xhc3MgUlBNX01p c3NpbmdPYmpmaWxlSGFuZGxlcihnZGIubWlzc2luZ19vYmpmaWxlLk1pc3NpbmdPYmpmaWxlSGFu ZGxlcik6CisrICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisrICAgICAgICAgICAgc3VwZXIo KS5fX2luaXRfXygicnBtLXN1Z2dlc3Rpb25zIikKICsKKysgICAgICAgIGRlZiBfX2NhbGxfXyhz ZWxmLCBwc3BhY2UsIGJ1aWxkX2lkLCBmaWxlbmFtZSk6CisrICAgICAgICAgICAgZmluZF9vYmpm aWxlX3N1Z2dlc3Rpb25zKGJ1aWxkX2lkKQorKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorKwor KyAgICAjIFRha2UgYSBub24tZW1wdHkgbGlzdCBvZiBSUE0gbmFtZXMgYW5kIHByaW50IGEgY29t bWFuZCBsaW5lIGEKKysgICAgIyB1c2VyIGNvdWxkIHJ1biB0byBpbnN0YWxsIHRoZXNlIFJQTXMu CisrICAgIGRlZiBwcmludF9ycG1fc3VnZ2VzdGlvbnMocnBtX25hbWVfbGlzdCk6CisrICAgICAg ICBwcmludCgiTWlzc2luZyBycG1zLCB0cnk6IGRuZiAtLWVuYWJsZXJlcG89JypkZWJ1ZyonIGlu c3RhbGwgIiArICcgJy5qb2luKHJwbV9uYW1lX2xpc3QpKQorKworKyAgICAjIFRha2UgYSBub24t ZW1wdHkgbGlzdCBvZiBidWlsZC1pZCBzdHJpbmdzIGFuZCBwcmludCBhIHNlcmllcyBvZgorKyAg ICAjIGxpbmVzIHRoYXQgYSB1c2VyIGNvdWxkIHJ1biB0byBpbnN0bGwgdGhlIFJQTXMgdGhhdCBw cm92aWRlCisrICAgICMgZmlsZXMgd2l0aCB0aGlzIGJ1aWxkLWlkLgorKyAgICAjCisrICAgICMg VGhlIHByaW50ZWQgY29tbWFuZHMgd2lsbCBhbHNvIGluc3RhbGwgdGhlIGNvcnJlc3BvbmRpbmcg ZGVidWcKKysgICAgIyBwYWNrYWdlcyBmb3IgdGhlIGV4ZWN1dGFibGUgd2l0aCB0aGUgZ2l2ZW4g YnVpbGQtaWQuCisrICAgIGRlZiBwcmludF9idWlsZF9pZF9zdWdnZXN0aW9ucyhidWlsZF9pZF9s aXN0KToKKysgICAgICAgIGZvciBidWlsZF9pZCBpbiBidWlsZF9pZF9saXN0OgorKyAgICAgICAg ICAgIHByaW50KCJNaXNzaW5nIGZpbGUocyksIHRyeTogZG5mIC0tZW5hYmxlcmVwbz0nKmRlYnVn KicgaW5zdGFsbCAiCisrICAgICAgICAgICAgICAgICAgKyBidWlsZF9pZF90b191c3JfbGliX2Zp bGVuYW1lKGJ1aWxkX2lkLCBGYWxzZSkKKysgICAgICAgICAgICAgICAgICArICcgJworKyAgICAg ICAgICAgICAgICAgICsgYnVpbGRfaWRfdG9fdXNyX2xpYl9maWxlbmFtZShidWlsZF9pZCwgVHJ1 ZSwgIi5kZWJ1ZyIpKQogKwogKyAgICAjIENhbGxlZCBiZWZvcmUgR0RCIGRpc3BsYXlzIGl0cyBw cm9tcHQuICBJZiB0aGUgZ2xvYmFsIF9fU1VHR0VTVF9SUE1TCi0rICAgICMgZGljdGlvbmFyeSBp cyBub3QgZW1wdHksIHRoZW4gdGhpcyBob29rIHByaW50cyB0cmVhdHMgdGhlIGtleXMgb2YKLSsg ICAgIyB0aGlzIGRpY3Rpb25hcnkgYXMgc3RyaW5ncyB3aGljaCBhcmUgdGhlIG5hbWVzIG9mIFJQ TXMuICBUaGlzIGhvb2sKLSsgICAgIyBmb3JtYXRzIGVhY2ggUlBNIG5hbWUgaW50byBhIHN1Z2dl c3RlZCBkZWJ1Z2luZm8taW5zdGFsbCBjb21tYW5kIGFuZAotKyAgICAjIHN1Z2dlc3RzIHRoaXMg dG8gdGhlIHVzZXIuCisrICAgICMgZGljdGlvbmFyeSBpcyBub3QgZW1wdHksIHRoZW4gdGhpcyBo b29rIHByaW50cyB0aGUga2V5cyBvZiB0aGlzCisrICAgICMgZGljdGlvbmFyeSBhcyBzdHJpbmdz IHdoaWNoIGFyZSB0aGUgbmFtZXMgb2YgUlBNcy4gIFRoaXMgaG9vayBmb3JtYXRzCisrICAgICMg ZWFjaCBSUE0gbmFtZSBpbnRvIGEgc3VnZ2VzdGVkICdkbmYgaW5zdGFsbCcgY29tbWFuZCBhbmQg c3VnZ2VzdHMgdGhpcworKyAgICAjIHRvIHRoZSB1c2VyLgorKyAgICAjCisrICAgICMgQWRkaXRp b25hbGx5LCBpZiB0aGUgZ2xvYmFsIF9fU1VHR0VTVF9CVUlMRF9JRFMgZGljdGlvbmFyeSBpcyBu b3QKKysgICAgIyBlbXB0eSwgdGhlbiB0aGlzIGhvb2sgdXNlcyB0aGUga2V5cyBvZiB0aGlzIGRp Y3Rpb25hcnkgYXMgYnVpbGQtaWRzCisrICAgICMgdGhhdCB3ZXJlIGZvdW5kIHRvIGJlIG1pc3Np bmcsIGFuZCBmb3JtYXRzIHRoZXNlIGludG8gc29tZSBmaWxlIGJhc2VkCisrICAgICMgJ2RuZiBp bnN0YWxsJyBzdWdnZXN0aW9ucyB0byB0aGUgdXNlci4KICsgICAgZGVmIGJlZm9yZV9wcm9tcHQo KToKICsgICAgICAgIGdsb2JhbCBfX3N1Z2dlc3RfcnBtcworKyAgICAgICAgZ2xvYmFsIF9fc3Vn Z2VzdF9idWlsZF9pZHMKKysgICAgICAgIGdsb2JhbCBfX3NlYXJjaGluZ19tZXNzYWdlX3ByaW50 ZWQKKysKKysgICAgICAgICMgV2UgYWxsb3cgdGhlIHNlYXJjaGluZyBtZXNzYWdlIHRvIGJlIHBy aW50ZWQganVzdCBvbmNlCisrICAgICAgICAjIGJldHdlZW4gcHJvbXB0cy4KKysgICAgICAgIF9f c2VhcmNoaW5nX21lc3NhZ2VfcHJpbnRlZCA9IEZhbHNlCiArCiArICAgICAgICBpZiBsZW4oX19z dWdnZXN0X3JwbXMpID4gMDoKLSsgICAgICAgICAgICBmb3IgcCBpbiBfX3N1Z2dlc3RfcnBtcy5r ZXlzKCk6Ci0rICAgICAgICAgICAgICAgIHByaW50KCJNaXNzaW5nIGRlYnVnaW5mbywgdHJ5OiBk bmYgZGVidWdpbmZvLWluc3RhbGwgIiArIHApCisrICAgICAgICAgICAgcHJpbnRfcnBtX3N1Z2dl c3Rpb25zKF9fc3VnZ2VzdF9ycG1zLmtleXMoKSkKICsgICAgICAgICAgICBfX3N1Z2dlc3RfcnBt cyA9IHt9CiArCisrICAgICAgICBpZiBsZW4oX19zdWdnZXN0X2J1aWxkX2lkcykgPiAwOgorKyAg ICAgICAgICAgIHByaW50X2J1aWxkX2lkX3N1Z2dlc3Rpb25zKF9fc3VnZ2VzdF9idWlsZF9pZHMu a2V5cygpKQorKyAgICAgICAgICAgIF9fc3VnZ2VzdF9idWlsZF9pZHMgPSB7fQogKwogKyAgICAj IENhbGxlZCB3aGVuIHRoZSBleGVjdXRhYmxlIHdpdGhpbiBhIHByb2dybSBzcGFjZSBpcyBjaGFu Z2VkLiAgQ2xlYXIKICsgICAgIyB0aGUgbGlzdHMgb2YgUlBNIHN1Z2dlc3Rpb25zLiAgV2Ugb25s eSBjbGVhciB0aGUgcHJldmlvdXMgc3VnZ2VzdGlvbgpAQCAtMTQ5LDE4ICs1NTksMTYyIEBAIG5l dyBmaWxlIG1vZGUgMTAwNjQ0CiArICAgIGRlZiBleGVjdXRhYmxlX2NoYW5nZWRfaGFuZGxlcihl dmVudCk6CiArICAgICAgICBnbG9iYWwgX19taXNzaW5nX3JwbXMKICsgICAgICAgIGdsb2JhbCBf X3N1Z2dlc3RfcnBtcworKyAgICAgICAgZ2xvYmFsIF9fc3VnZ2VzdF9idWlsZF9pZHMKKysgICAg ICAgIGdsb2JhbCBfX21pc3NpbmdfYnVpbGRfaWRzCiArCiArICAgICAgICBpZiBub3QgZXZlbnQu cmVsb2FkOgogKyAgICAgICAgICAgIF9fbWlzc2luZ19ycG1zID0ge30KICsgICAgICAgICAgICBf X3N1Z2dlc3RfcnBtcyA9IHt9CisrICAgICAgICAgICAgX19taXNzaW5nX2J1aWxkX2lkcyA9IHt9 CisrICAgICAgICAgICAgX19zdWdnZXN0X2J1aWxkX2lkcyA9IHt9CiArCiArCiArICAgICMgQXR0 YWNoIHRvIHRoZSByZXF1aXJlZCBHREIgZXZlbnRzLgogKyAgICBnZGIuZXZlbnRzLmV4ZWN1dGFi bGVfY2hhbmdlZC5jb25uZWN0KGV4ZWN1dGFibGVfY2hhbmdlZF9oYW5kbGVyKQogKyAgICBnZGIu ZXZlbnRzLmJlZm9yZV9wcm9tcHQuY29ubmVjdChiZWZvcmVfcHJvbXB0KQogKwotKyAgICAjIFJl Z2lzdGVyIHRoZSBtaXNzaW5nIGRlYnVnIGhhbmRsZXIgd2l0aCBHREIuCi0rICAgIGdkYi5taXNz aW5nX2RlYnVnLnJlZ2lzdGVyX2hhbmRsZXIoTm9uZSwgUlBNU3VnZ2VzdGlvbkhhbmRsZXIoKSkK KysgICAgIyBSZWdpc3RlciB0aGUgbWlzc2luZyBkZWJ1ZyBhbmQgbWlzc2luZyBvYmpmaWxlIGhh bmRsZXJzIHdpdGggR0RCLgorKyAgICBnZGIubWlzc2luZ19kZWJ1Zy5yZWdpc3Rlcl9oYW5kbGVy KE5vbmUsIFJQTV9NaXNzaW5nRGVidWdIYW5kbGVyKCkpCisrICAgIGdkYi5taXNzaW5nX29iamZp bGUucmVnaXN0ZXJfaGFuZGxlcihOb25lLCBSUE1fTWlzc2luZ09iamZpbGVIYW5kbGVyKCkpCisr CisrICAgICMgSW1wbGVtZW50IHRoZSBjb3JlIG9mICdpbmZvIHJwbS1zdWdnZXN0aW9ucycuICBS ZXByaW50IGFsbCBycG0KKysgICAgIyBzdWdnZXN0aW9ucy4KKysgICAgZGVmIGluZm9fcnBtX3N1 Z2dlc3Rpb25zKCk6CisrICAgICAgICBnbG9iYWwgX19taXNzaW5nX3JwbXMKKysgICAgICAgIGds b2JhbCBfX21pc3NpbmdfYnVpbGRfaWRzCisrCisrICAgICAgICBpZiBsZW4oX19taXNzaW5nX3Jw bXMpID09IDAgYW5kIGxlbihfX21pc3NpbmdfYnVpbGRfaWRzKSA9PSAwOgorKyAgICAgICAgICAg IHByaW50KCJObyBSUE0gc3VnZ2VzdGlvbnMgaGF2ZSBiZWVuIG1hZGUgc28gZmFyLiIpCisrICAg ICAgICAgICAgcmV0dXJuCisrCisrICAgICAgICBpZiBsZW4oX19taXNzaW5nX3JwbXMpID4gMDoK KysgICAgICAgICAgICBwcmludF9ycG1fc3VnZ2VzdGlvbnMoX19taXNzaW5nX3JwbXMua2V5cygp KQorKyAgICAgICAgaWYgbGVuKF9fbWlzc2luZ19idWlsZF9pZHMpID4gMDoKKysgICAgICAgICAg ICBwcmludF9idWlsZF9pZF9zdWdnZXN0aW9ucyhfX21pc3NpbmdfYnVpbGRfaWRzLmtleXMoKSkK KysKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworKyMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIG91dHNpZGUgdGhlICdl bHNlJyBibG9jayBvZiB0aGUgYXR0ZW1wdCB0byAjCisrIyBsb2FkIHRoZSAncnBtJyBtb2R1bGUu ICBOb3RoaW5nIGFmdGVyIHRoaXMgcG9pbnQgZGVwZW5kcyBvbiB0aGUgICMKKysjICdycG0nIG1v ZHVsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisrCisrIyBUaGUgJ3NldCBycG0tc3VnZ2VzdGlvbicgcHJlZml4IGNv bW1hbmQuCisrY2xhc3MgcnBtX3N1Z2dlc3Rpb25fc2V0X3ByZWZpeChnZGIuQ29tbWFuZCk6Cisr ICAgICIiIlByZWZpeCBjb21tYW5kIGZvciAnc2V0JyBycG0tc3VnZ2VzdGlvbiByZWxhdGVkIGNv bW1hbmRzLiIiIgorKworKyAgICBkZWYgX19pbml0X18oc2VsZik6CisrICAgICAgICBzdXBlcigp Ll9faW5pdF9fKCJzZXQgcnBtLXN1Z2dlc3Rpb24iLCBnZGIuQ09NTUFORF9OT05FLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICBnZGIuQ09NUExFVEVfTk9ORSwgVHJ1ZSkKKysKKysjIFRoZSAn c2hvdyBycG0tc3VnZ2VzdGlvbicgcHJlZml4IGNvbW1hbmQuCisrY2xhc3MgcnBtX3N1Z2dlc3Rp b25fc2hvd19wcmVmaXgoZ2RiLkNvbW1hbmQpOgorKyAgICAiIiJQcmVmaXggY29tbWFuZCBmb3Ig J3Nob3cnIHJwbS1zdWdnZXN0aW9uIHJlbGF0ZWQgY29tbWFuZHMuIiIiCisrCisrICAgIGRlZiBf X2luaXRfXyhzZWxmKToKKysgICAgICAgIHN1cGVyKCkuX19pbml0X18oInNob3cgcnBtLXN1Z2dl c3Rpb24iLCBnZGIuQ09NTUFORF9OT05FLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBnZGIu Q09NUExFVEVfTk9ORSwgVHJ1ZSkKKysKKysjIFRoZSAnc2V0L3Nob3cgcnBtLXN1Z2dlc3Rpb24g ZW5hYmxlZCcgY29tbWFuZC4KKytjbGFzcyBycG1fc3VnZ2VzdGlvbl9lbmFibGVkKGdkYi5QYXJh bWV0ZXIpOgorKyAgICAiIiIKKysgICAgV2hlbiAnb24nIEdEQiB3aWxsIHNlYXJjaCBmb3IgUlBN UyB0aGF0IG1pZ2h0IHByb3ZpZGUgYWRkaXRpb25hbAorKyAgICBkZWJ1ZyBpbmZvcm1hdGlvbiwg b3IgcHJvdmlkZSBtaXNzaW5nIGV4ZWN1dGFibGVzIG9yIHNoYXJlZAorKyAgICBsaWJyYXJpZXMg KHdoZW4gb3BlbmluZyBhIGNvcmUgZmlsZSksIGFuZCB3aWxsIG1ha2Ugc3VnZ2VzdGlvbnMKKysg ICAgYWJvdXQgd2hhdCBzaG91bGQgYmUgaW5zdGFsbGVkLgorKworKyAgICBXaGVuICdvZmYnIEdE QiB3aWxsIG5vdCBtYWtlIHRoZXNlIHN1Z2dlc3Rpb25zLgorKyAgICAiIiIKKysKKysgICAgc2V0 X2RvYyA9ICJTZXQgd2hldGhlciB0byBwZXJmb3JtIHJwbS1zdWdnZXN0aW9uLiIKKysgICAgc2hv d19kb2MgPSAiU2hvdyB3aGV0aGVyIHJwbS1zdWdnZXN0aW9uIGlzIGVuYWJsZWQuIgorKworKyAg ICBkZWYgX19pbml0X18oc2VsZik6CisrICAgICAgICBzdXBlcigpLl9faW5pdF9fKCJycG0tc3Vn Z2VzdGlvbiBlbmFibGVkIiwgZ2RiLkNPTU1BTkRfTk9ORSwgZ2RiLlBBUkFNX0JPT0xFQU4pCisr ICAgICAgICBzZWxmLnZhbHVlID0gVHJ1ZQorKworKyMgVGhlICdzZXQvc2hvdyBycG0tc3VnZ2Vz dGlvbiBlbmFibGVkJyBjb21tYW5kLgorK2NsYXNzIHJwbV9zdWdnZXN0aW9uX2J1aWxkX2lkX21v ZGUoZ2RiLlBhcmFtZXRlcik6CisrICAgICIiIgorKyAgICBXaGVuIHNldCB0byAnZmFzdCcgKHRo ZSBkZWZhdWx0KSwgR0RCIGRvZXNuJ3QgdHJ5IHRvIG1hcCBhIGJ1aWxkLWlkIHRvCisrICAgIGFu IGFjdHVhbCBSUE0sIGluc3RlYWQsIEdEQiBqdXN0IHN1Z2dlc3RzIGEgY29tbWFuZCBiYXNlZCBv biB0aGUKKysgICAgYnVpbGQtaWQgd2hpY2ggbWlnaHQgaW5zdGFsbCBzb21lIFJQTXMsIGlmIHRo ZXJlIGFyZSBhbnkgUlBNcyB0aGF0CisrICAgIHN1cHBseSB0aGF0IGJ1aWxkLWlkLiAgSG93ZXZl ciwgaXQgaXMgZXF1YWxseSBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZSBubworKyAgICBzdWl0YWJs ZSBSUE1zLCBhbmQgbm90aGluZyB3aWxsIGluc3RhbGwuICBUaGlzIGFwcHJvYWNoIGhhcyBhbG1v c3QgemVybworKyAgICBvdmVyaGVhZC4KKysKKysgICAgV2hlbiBzZXQgdG8gJ3Nsb3cnLCBHREIg Zmlyc3QgZG9lcyB0aGUgYnVpbGQtaWQgdG8gUlBNIGNoZWNrIGl0c2VsZiwgYW5kCisrICAgIG9u bHkgaWYgc29tZXRoaW5nIGlzIGZvdW5kIGFyZSBSUE1zIGluc3RhbGxhdGlvbiBjb21tYW5kcyBz dWdnZXN0ZWQuCisrICAgIFRoZSBzdWdnZXN0ZWQgY29tbWFuZCB3aWxsIGluY2x1ZGUgdGhlIG5h bWUgb2YgdGhlIFJQTSB0byBpbnN0YWxsLiAgVGhpcworKyAgICBhcHByb2FjaCBpcyBjb25zaWRl cmFibHkgc2xvd2VyIGFzIHF1ZXJ5aW5nIHRoZSBSUE0gZGF0YWJhc2UgZm9yIHRoZSBSUE0KKysg ICAgdGhhdCBzdXBwbGllcyBhIHNwZWNpZmljIGZpbGUgaXMgc2xvdy4KKysgICAgIiIiCisrCisr ICAgIHNldF9kb2MgPSAiU2V0IGhvdyBidWlsZC1pZCBiYXNlZCBycG0gc3VnZ2VzdGlvbnMgc2hv dWxkIGJlIHBlcmZvcm1lZC4iCisrICAgIHNob3dfZG9jID0gIlNob3cgaG93IGJ1aWxkLWlkIGJh c2VkIHJwbSBzdWdnZXN0aW9ucyBzaG91ZCBiZSBwZXJmb3JtZWQuIgorKworKyAgICBkZWYgX19p bml0X18oc2VsZik6CisrICAgICAgICBzdXBlcigpLl9faW5pdF9fKCJycG0tc3VnZ2VzdGlvbiBi dWlsZC1pZC1tb2RlIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfTk9O RSwgZ2RiLlBBUkFNX0VOVU0sIFsiZmFzdCIsICJzbG93Il0pCisrICAgICAgICBzZWxmLnZhbHVl ID0gImZhc3QiCisrCisrICAgIGRlZiBmYXN0X21vZGUoc2VsZik6CisrICAgICAgICByZXR1cm4g c2VsZi52YWx1ZSA9PSAiZmFzdCIKKysKKysjIFRoZSAnaW5mbyBycG0tc3VnZ2VzdGlvbnMnIGNv bW1hbmQuCisrY2xhc3MgcnBtX3N1Z2dlc3Rpb25faW5mbyhnZGIuQ29tbWFuZCk6CisrICAgICIi IlJlbGlzdCBhbnkgUlBNIGluc3RhbGxhdGlvbiBzdWdnZXN0aW9ucyB0aGF0IGhhdmUgYmVlbiBt YWRlCisrICAgIHNpbmNlIHRoZSBleGVjdXRhYmxlIHdhcyBsYXN0IGNoYW5nZWQuIiIiCisrICAg IGRlZiBfX2luaXRfXyhzZWxmKToKKysgICAgICAgIHN1cGVyKCkuX19pbml0X18oImluZm8gcnBt LXN1Z2dlc3Rpb25zIiwgZ2RiLkNPTU1BTkRfTk9ORSwgZ2RiLkNPTVBMRVRFX05PTkUpCisrCisr ICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJncywgZnJvbV90dHkpOgorKyAgICAgICAgaWYgYXJncyAh PSAiIjoKKysgICAgICAgICAgICByYWlzZSBnZGIuR2RiRXJyb3IoInVuZXhwZWN0ZWQgYXJndW1l bnRzOiAlcyIgJSBhcmdzKQorKworKyAgICAgICAgaW5mb19ycG1fc3VnZ2VzdGlvbnMgKCkKKysK KysKKysjIENyZWF0ZSB0aGUgJ3NldC9zaG93IHJwbS1zdWdnZXN0aW9uJyBjb21tYW5kcy4KKyty cG1fc3VnZ2VzdGlvbl9zZXRfcHJlZml4KCkKKytycG1fc3VnZ2VzdGlvbl9zaG93X3ByZWZpeCgp CisrcGFyYW1fcnBtX3N1Z2dlc3Rpb25fZW5hYmxlZCA9IHJwbV9zdWdnZXN0aW9uX2VuYWJsZWQo KQorK3BhcmFtX3JwbV9zdWdnZXN0aW9uX2J1aWxkX2lkX21vZGUgPSBycG1fc3VnZ2VzdGlvbl9i dWlsZF9pZF9tb2RlKCkKKysKKysjIENyZWF0ZSB0aGUgJ2luZm8gcnBtLXN1Z2dlc3Rpb25zJyBj b21tYW5kcy4KKytycG1fc3VnZ2VzdGlvbl9pbmZvKCkKKysKKysjIENyZWF0ZSB0aGUgJ2J1aWxk LWlkLXZlcmJvc2UnIHBhcmFtZXRlci4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYW4KKysjIGlu dGVnZXIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gIEl0IHdvdWxkIGJlIG5p Y2UgdG8KKysjIGNvbnZlcnQgdGhpcyB0byBhIGJvb2xlYW4sIGJ1dCBpdCdzIG5vdCBjbGVhciBp ZiB0aGF0IHdpbGwgYnJlYWsKKysjIGV4aXN0aW5nIHVzZXJzIHVzZXMgb2YgdGhpcyBmbGFnLgor KworK2NsYXNzIGJ1aWxkX2lkX3ZlcmJvc2UoZ2RiLlBhcmFtZXRlcik6CisrICAgICIiIgorKyAg ICBMZXZlbCAwIGRpc2FibGUgcHJpbnRpbmcgdGhlIG1pc3NpbmcgZGVidWcgZmlsZXNuYW1lLAor KyAgICBMZXZlbCAxIChkZWZhdWx0KSBlbmFibGVzIHByaW50aW5nIHRoZSBtaXNzaW5nIGRlYnVn IGZpbGVuYW1lcywKKysgICAgIiIiCisrCisrICAgIHNldF9kb2MgPSAiU2V0IGRlYnVnZ2luZyBs ZXZlbCBvZiB0aGUgYnVpbGQtaWQgbG9jYXRvci4iCisrICAgIHNob3dfZG9jID0gIlNob3cgZGVi dWdnaW5nIGxldmVsIG9mIHRoZSBidWlsZC1pZCBsb2NhdG9yLiIKKysKKysgICAgZGVmIF9faW5p dF9fKHNlbGYpOgorKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygiYnVpbGQtaWQtdmVyYm9zZSIs IGdkYi5DT01NQU5EX05PTkUsIGdkYi5QQVJBTV9aSU5URUdFUikKKysgICAgICAgIHNlbGYudmFs dWUgPSAxCisrCisrcGFyYW1fYnVpbGRfaWRfdmVyYm9zZSA9IGJ1aWxkX2lkX3ZlcmJvc2UoKQor ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ2RiaW5pdC1oaXN0b3J5LmV4cCBi L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ2RiaW5pdC1oaXN0b3J5LmV4cAorLS0tIGEvZ2RiL3Rl c3RzdWl0ZS9nZGIuYmFzZS9nZGJpbml0LWhpc3RvcnkuZXhwCisrKysgYi9nZGIvdGVzdHN1aXRl L2dkYi5iYXNlL2dkYmluaXQtaGlzdG9yeS5leHAKK0BAIC0xNzksNyArMTc5LDggQEAgcHJvYyB0 ZXN0X2VtcHR5X2hpc3RvcnlfZmlsZW5hbWUgeyB9IHsKKyAgICAgZ2xvYmFsIGVudgorICAgICBn bG9iYWwgZ2RiX3Byb21wdAorIAorLSAgICBzZXQgY29tbW9uX2hpc3RvcnkgW2xpc3QgInNldCBo ZWlnaHQgMCIgInNldCB3aWR0aCAwIl0KKysgICAgc2V0IGNvbW1vbl9oaXN0b3J5IFtsaXN0ICJz ZXQgaGVpZ2h0IDAiICJzZXQgd2lkdGggMCIgXAorKwkJCSAgICAic2V0IGJ1aWxkLWlkLXZlcmJv c2UgMCJdCisgCisgICAgIHNldCB0ZXN0X2RpciBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgaGlzdG9y eV90ZXN0XQorICAgICByZW1vdGVfZXhlYyBob3N0ICJta2RpciAtcCAkdGVzdF9kaXIiCiBkaWZm IC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3NpbmctZGVidWcucHkgYi9n ZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktbWlzc2luZy1kZWJ1Zy5weQogLS0tIGEvZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3NpbmctZGVidWcucHkKICsrKyBiL2dkYi90ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLWRlYnVnLnB5CkBAIC0xNzgsMyArNzMyLDc1IEBAIGRp ZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktbWlzc2luZy1kZWJ1Zy5weSBi L2dkYi90ZXN0c3VpdGUvZ2RiLnB5CiAgIyBBIGdsb2JhbCBsb2cgdGhhdCBpcyBmaWxsZWQgaW4g YnkgaW5zdGFuY2VzIG9mIHRoZSBMT0dfSEFORExFUiBjbGFzcwogICMgd2hlbiB0aGV5IGFyZSBj YWxsZWQuCiAgaGFuZGxlcl9jYWxsX2xvZyA9IFtdCitAQCAtMTE4LDQgKzEyNSw3IEBAIGRlZiBy ZWdpc3RlcihuYW1lLCBsb2N1cz1Ob25lKToKKyByaGFuZGxlciA9IGV4Y2VwdGlvbl9oYW5kbGVy KCkKKyBoYW5kbGVyX29iaiA9IGhhbmRsZXIoKQorIAorKyMgRGlzY2FyZCB0aGUgcnBtLXN1Z2dl c3Rpb24gaGFuZGxlci4KKytnZGIubWlzc2luZ19maWxlX2hhbmRsZXJzID0gW10KKysKKyBwcmlu dCgiU3VjY2VzcyIpCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1p c3Npbmctb2JqZmlsZS5weSBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9i amZpbGUucHkKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZp bGUucHkKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUu cHkKK0BAIC0xNjQsNCArMTY0LDcgQEAgZGVmIHJlZ2lzdGVyKG5hbWUsIGxvY3VzPU5vbmUpOgor IHJoYW5kbGVyID0gZXhjZXB0aW9uX2hhbmRsZXIoKQorIGhhbmRsZXJfb2JqID0gaGFuZGxlcigp CisgCisrIyBEaXNjYXJkIHRoZSBycG0tc3VnZ2VzdGlvbiBoYW5kbGVyLgorK2dkYi5taXNzaW5n X2ZpbGVfaGFuZGxlcnMgPSBbXQorKworIHByaW50KCJTdWNjZXNzIikKK2RpZmYgLS1naXQgYS9n ZGIvdGVzdHN1aXRlL2xpYi9nZGIuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAorLS0t IGEvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAorKysrIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2Ri LmV4cAorQEAgLTIzOCw3ICsyMzgsOCBAQCBpZiAhW2luZm8gZXhpc3RzIElOVEVSTkFMX0dEQkZM QUdTXSB7CisgCQkgICAiLW54IiBcCisgCQkgICAiLXEiIFwKKyAJCSAgIHstaWV4ICJzZXQgaGVp Z2h0IDAifSBcCistCQkgICB7LWlleCAic2V0IHdpZHRoIDAifV1dCisrCQkgICB7LWlleCAic2V0 IHdpZHRoIDAifSBcCisrCQkgICB7LWlleCAic2V0IGJ1aWxkLWlkLXZlcmJvc2UgMCJ9XV0KKyAK KyAgICAgIyBJZiBERUJVR0lORk9EX1VSTFMgaXMgc2V0LCBnZGIgd2lsbCB0cnkgdG8gZG93bmxv YWQgc291cmNlcyBhbmQKKyAgICAgIyBkZWJ1ZyBpbmZvIGZvciBmLmkuIHN5c3RlbSBsaWJyYXJp ZXMuICBQcmV2ZW50IHRoaXMuCitAQCAtMjQ5Myw2ICsyNDk0LDE4IEBAIHByb2MgZGVmYXVsdF9n ZGJfc3RhcnQgeyB9IHsKKyAJfQorICAgICB9CisgCisrICAgICMgVHVybiBvZmYgdGhlIG1pc3Np bmcgZGVidWcgaW5mbyBtZXNzYWdlcyBhcyB0aGUgdGVzdHN1aXRlIGRvZXMKKysgICAgIyBub3Qg ZXhwZWN0IHRoZW0uCisrICAgIHNlbmRfZ2RiICJzZXQgYnVpbGQtaWQtdmVyYm9zZSAwXG4iCisr ICAgIGdkYl9leHBlY3QgMTAgeworKwktcmUgIiRnZGJfcHJvbXB0ICQiIHsKKysJICAgIHZlcmJv c2UgIkRpc2FibGVkIHRoZSBtaXNzaW5nIGRlYnVnIGluZm8gbWVzc2FnZXMuIiAyCisrCX0KKysJ dGltZW91dCB7CisrCSAgICB3YXJuaW5nICJDb3VsZCBub3QgZGlzYWJsZSB0aGUgbWlzc2luZyBk ZWJ1ZyBpbmZvIG1lc3NhZ2VzLiIKKysJfQorKyAgICB9CisrCisgICAgIGdkYl9kZWJ1Z19pbml0 CisgICAgIHJldHVybiAwCisgfQorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvbGliL21pLXN1 cHBvcnQuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvbWktc3VwcG9ydC5leHAKKy0tLSBhL2dkYi90 ZXN0c3VpdGUvbGliL21pLXN1cHBvcnQuZXhwCisrKysgYi9nZGIvdGVzdHN1aXRlL2xpYi9taS1z dXBwb3J0LmV4cAorQEAgLTMyMSw2ICszMjEsMTcgQEAgcHJvYyBkZWZhdWx0X21pX2dkYl9zdGFy dCB7IHsgZmxhZ3Mge30gfSB9IHsKKyAJICAgIHdhcm5pbmcgIkNvdWxkbid0IHNldCB0aGUgd2lk dGggdG8gMC4iCisgCX0KKyAgICAgfQorKyAgICAjIFR1cm4gb2ZmIHRoZSBtaXNzaW5nIGRlYnVn IGluZm8gbWVzc2FnZXMgYXMgdGhlIHRlc3RzdWl0ZSBkb2VzCisrICAgICMgbm90IGV4cGVjdCB0 aGVtLgorKyAgICBzZW5kX2dkYiAiMTkwLWdkYi1zZXQgYnVpbGQtaWQtdmVyYm9zZSAwXG4iCisr ICAgIGdkYl9leHBlY3QgMTAgeworKwktcmUgIi4qMTkwLWdkYi1zZXQgYnVpbGQtaWQtdmVyYm9z ZSAwXHJcbjE5MFxcXF5kb25lXHJcbiRtaV9nZGJfcHJvbXB0JCIgeworKwkgICAgdmVyYm9zZSAi RGlzYWJsZWQgdGhlIG1pc3NpbmcgZGVidWcgaW5mbyBtZXNzYWdlcy4iIDIKKysJfQorKwl0aW1l b3V0IHsKKysJICAgIHdhcm5pbmcgIkNvdWxkIG5vdCBkaXNhYmxlIHRoZSBtaXNzaW5nIGRlYnVn IGluZm8gbWVzc2FnZXMuIgorKwl9CisrICAgIH0KKyAKKyAgICAgaWYgeyAkc2VwYXJhdGVfaW5m ZXJpb3JfcHR5IH0geworIAltaV9jcmVhdGVfaW5mZXJpb3JfcHR5CgpkaWZmIC0tZ2l0IGEvZ2Ri LWJhY2twb3J0LWJ1aWxkaWQtcmVsYXRlZC1jaGFuZ2VzLnBhdGNoIGIvZ2RiLWJhY2twb3J0LWJ1 aWxkaWQtcmVsYXRlZC1jaGFuZ2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjRkZDJkOGIKLS0tIC9kZXYvbnVsbAorKysgYi9nZGItYmFja3BvcnQtYnVpbGRpZC1y ZWxhdGVkLWNoYW5nZXMucGF0Y2gKQEAgLTAsMCArMSw2NzUzIEBACitGcm9tIEZFRE9SQV9QQVRD SEVTIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmV3IEJ1cmdlc3MgPGFidXJn ZXNzQHJlZGhhdC5jb20+CitEYXRlOiBXZWQsIDMxIEp1bCAyMDI0IDE1OjU4OjIwICswMTAwCitT dWJqZWN0OiBnZGItYmFja3BvcnQtYnVpbGRpZC1yZWxhdGVkLWNoYW5nZXMucGF0Y2gKKworOzsg QmFja3BvcnQgcGF0Y2hlcyByZWxhdGVkIHRvIGJ1aWxkLWlkIHVzYWdlIHdoZW4gb3BlbmluZyBh IGNvcmUKKzs7IGZpbGUsIGFuZCBhbHNvIGltcHJvdmluZyBnZW5lcmFsIGJ1aWxkLWlkIGJhc2Vk IGxvb2t1cC4gIFRoZXNlIHdpbGwKKzs7IGFsbCBkcm9wIG91dCB3aGVuIHJlYmFzaW5nIHRvIEdE QiAxNi4KKworYmFja3BvcnQgdGhlIGZvbGxvd2luZyBwYXRjaGVzIHJlbGF0ZWQgdG8gYnVpbGQt aWQgdXNhZ2UKKworVGhpcyBvbmUgcGF0Y2ggYmFja3BvcnRzIHRoZSBmb2xsb3dpbmcgdXBzdHJl YW0gY29tbWl0czoKKworICAqIDE5NTc5NWIwZmQ0IGdkYjogZml4IGEgdGFyZ2V0OiBwcmVmaXgg aXNzdWUgaW4gZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlCisgICogZWE0Yzk2OGNlNTQgZ2RiOiBh dm9pZCAnLy8nIGluIGZpbGVuYW1lcyB3aGVuIHNlYXJjaGluZyBmb3IgZGVidWdpbmZvCisgICog MjI4MzZjYTg4NTkgZ2RiOiBjaGVjayBmb3IgbXVsdGlwbGUgbWF0Y2hpbmcgYnVpbGQtaWQgZmls ZXMKKyAgKiA2ZDQ1YWY5NmVhNSBnZGJzZXJ2ZXI6IGFkZCBnZGJzZXJ2ZXIgc3VwcG9ydCBmb3Ig dkZpbGU6OnN0YXQgcGFja2V0CisgICogMzA1NWUzZDJmMTMgZ2RiOiBhZGQgR0RCIHNpZGUgdGFy Z2V0X29wczo6ZmlsZWlvX3N0YXQgaW1wbGVtZW50YXRpb24KKyAgKiAwOGExMTVjYzFjNCBnZGI6 IGFkZCB0YXJnZXRfZmlsZWlvX3N0YXQsIGJ1dCBubyBpbXBsZW1lbnRhdGlvbnMgeWV0CisgICog YzdlMzhlZTQ3YzkgZ2RiOiBhdm9pZCBkdXBsaWNhdGUgc2VhcmNoIGluIGJ1aWxkX2lkX3RvX2Jm ZF9zdWZmaXgKKyAgKiAxMGFjN2U4MGMwMSBnZGI6IHJlbW92ZSBmaW5kX2FuZF9vcGVuX3NvbGli IHNvX2xpc3QgbWV0aG9kCisgICogM2UzNWI0ZGVhZTIgZ2RiL3Rlc3RzdWl0ZTogdGVzdHMgZm9y IGRlYnVnIGxvb2t1cCB3aXRoaW4gdGhlIHN5c3Jvb3QKKyAgKiA2ZGZkMDcyMjJjMCBnZGI6IGNv bnZlcnQgc2VwYXJhdGUtZGVidWctZmlsZSB0byBuZXcoaXNoKSBkZWJ1ZyBzY2hlbWUKKyAgKiA1 Y2FiYzgwOThlNiBnZGIvcHl0aG9uOiBpbXBsZW1lbnQgUHl0aG9uIGZpbmRfZXhlY19ieV9idWls ZF9pZCBob29rCisgICogZWYxYTQxZjIwYjcgZ2RiOiBhZGQgZXh0ZW5zaW9uIGhvb2sgZXh0X2xh bmdfZmluZF9vYmpmaWxlX2Zyb21fYnVpbGRpZAorICAqIDYyOWJjYzY4ZDc5IGdkYjogcmVuYW1l IGV4dF9sYW5nX21pc3NpbmdfZGVidWdpbmZvX3Jlc3VsdAorICAqIDczZDczMTJmZjYxIGdkYjog dXNlIG1hcHBlZCBmaWxlIGluZm9ybWF0aW9uIHRvIGltcHJvdmUgZGVidWdpbmZvZCB0ZXh0Cisg ICogNWRkZDBkN2VlZmIgZ2RiL3B5dGhvbjogYXZvaWQgZGVwZW5kaW5nIG9uIHRoZSBjdXJzZXMg bGlicmFyeQorICAqIDgzNThkMzliNGYwIGdkYjogdW5pZnkgYnVpbGQtaWQgdG8gb2JqZmlsZSBs b29rdXAgY29kZQorICAqIGZhODI2YTRiYmU5IGdkYjogaW1wcm92ZSBzaGFyZWQgbGlicmFyeSBi dWlsZC1pZCBjaGVjayBmb3IgY29yZS1maWxlcworICAqIGE0N2E2NzljNzY5IGdkYi9jb3JlZmls ZTogaW1wcm92ZSBmaWxlIGJhY2tlZCBtYXBwaW5nIGhhbmRsaW5nCisgICogNTIyODc1ZjY3OWIg Z2RiL2NvcmVmaWxlOiBkb24ndCBwcmV0ZW5kIHVuYXZhaWxhYmxlIHNlY3Rpb25zIGFyZSByZWFk YWJsZQorICAqIDk3ODMyNDcxODk5IGdkYi9idWlsZC1pZDogcHJvdGVjdCBhZ2FpbnN0IHdlaXJk bHkgc2hvcnQgYnVpbGQtaWRzCisgICogOTU0M2MzNzYyMGMgZ2RiL3Rlc3RzdWl0ZTogbWFrZSBn ZGJfZ251X3N0cmlwX2RlYnVnIGNvbnNpc3RlbnQKKyAgKiBmYzI0MGJiMTQzYyBnZGIvZmlsZWlv OiBmaXggZXJybm8gZm9yIHBhY2tldHMgd2hlcmUgYW4gYXR0YWNobWVudCBpcyBleHBlY3RlZAor ICAqIGRmMDQ0NWIzNzBmIGdkYi90ZXN0c3VpdGU6IGZpeCB0eXBvICd1bnN1cHBvcnQnIHRvICd1 bnN1cHBvcnRlZCcKKworSSd2ZSBtZXJnZWQgdGhlc2UgaW50byBhIHNpbmdsZSAobGFyZ2UpIHBh dGNoIGFzIHRoZXNlIGFsbCBtZXJnZWQKK3dpdGhvdXQgYW55IGNoYW5nZXMgKGkuZS4gdGhlc2Ug cmVwcmVzZW50IGV4YWN0bHkgdGhlIHVwc3RyZWFtIGNvZGUpLAorYW5kIGFsbCBvZiB0aGVzZSB3 aWxsIGJlIGluY2x1ZGVkIGluIEdEQiAxNiwgYW5kIHNvIHNob3VsZCBhbGwgZHJvcAorb3V0IHRv Z2V0aGVyIHdoZW4gd2UgcmViYXNlIHRvIEdEQiAxNiAodGhlIG5leHQgcmViYXNlKS4KKworQWxs IG9mIHRoZXNlIHBhdGNoZXMgcmVsYXRlIHRvIGVpdGhlciBidWlsZC1pZCB1c2FnZSB3aGVuIG9w ZW5pbmcgYQorY29yZSBmaWxlLCBvciBpbXByb3ZpbmcgR0RCJ3MgYnVpbGQtaWQgYmFzZWQgZGVi dWcgbG9va3VwLgorCitkaWZmIC0tZ2l0IGEvZ2RiL05FV1MgYi9nZGIvTkVXUworLS0tIGEvZ2Ri L05FV1MKKysrKyBiL2dkYi9ORVdTCitAQCAtMSw2ICsxLDM2IEBACisgCQlXaGF0IGhhcyBjaGFu Z2VkIGluIEdEQj8KKyAJICAgICAoT3JnYW5pemVkIHJlbGVhc2UgYnkgcmVsZWFzZSkKKyAKKysq KiogQ2hhbmdlIHNpbmNlIEdEQiAxNQorKworKyogUHl0aG9uIEFQSQorKworKyAgKiogTmV3IG1v ZHVsZSBnZGIubWlzc2luZ19vYmpmaWxlIHRoYXQgZmFjaWxpdGF0ZXMgZGVhbGluZyB3aXRoCisr ICAgICBtaXNzaW5nIG9iamZpbGVzIHdoZW4gb3BlbmluZyBhIGNvcmUtZmlsZS4KKysKKysgICoq IE5ldyBmdW5jdGlvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIgdGhhdCBj YW4KKysgICAgIHJlZ2lzdGVyIGFuIGluc3RhbmNlIG9mIGEgc3ViLWNsYXNzIG9mCisrICAgICBn ZGIubWlzc2luZ19kZWJ1Zy5NaXNzaW5nT2JqZmlsZUhhbmRsZXIgYXMgYSBoYW5kbGVyIGZvciBt aXNzaW5nCisrICAgICBvYmpmaWxlcy4KKysKKysgICoqIE5ldyBjbGFzcyBnZGIubWlzc2luZ19v YmpmaWxlLk1pc3NpbmdPYmpmaWxlSGFuZGxlciB3aGljaCBjYW4gYmUKKysgICAgIHN1Yi1jbGFz c2VkIHRvIGNyZWF0ZSBoYW5kbGVycyBmb3IgbWlzc2luZyBvYmpmaWxlcy4KKysKKysqIE5ldyBj b21tYW5kcworKworK2luZm8gbWlzc2luZy1vYmpmaWxlLWhhbmRsZXJzCisrICBMaXN0IGFsbCB0 aGUgcmVnaXN0ZXJlZCBtaXNzaW5nLW9iamZpbGUgaGFuZGxlcnMuCisrCisrZW5hYmxlIG1pc3Np bmctb2JqZmlsZS1oYW5kbGVyIExPQ1VTIEhBTkRMRVIKKytkaXNhYmxlIG1pc3Npbmctb2JqZmls ZS1oYW5kbGVyIExPQ1VTIEhBTkRMRVIKKysgIEVuYWJsZSBvciBkaXNhYmxlIGEgbWlzc2luZy1v YmpmaWxlIGhhbmRsZXIgd2l0aCBhIG5hbWUgbWF0Y2hpbmcgdGhlCisrICByZWd1bGFyIGV4cHJl c3Npb24gSEFORExFUiwgaW4gTE9DVVMuCisrCisrICBMT0NVUyBjYW4gYmUgJ2dsb2JhbCcgdG8g b3BlcmF0ZSBvbiBnbG9iYWwgbWlzc2luZy1vYmpmaWxlIGhhbmRsZXIsCisrICAncHJvZ3NwYWNl JyB0byBvcGVyYXRlIG9uIGhhbmRsZXJzIHdpdGhpbiB0aGUgY3VycmVudCBwcm9ncmFtIHNwYWNl LAorKyAgb3IgY2FuIGJlIGEgcmVndWxhciBleHByZXNzaW9uIHdoaWNoIGlzIG1hdGNoZWQgYWdh aW5zdCB0aGUgZmlsZW5hbWUKKysgIG9mIHRoZSBwcmltYXJ5IGV4ZWN1dGFibGUgaW4gZWFjaCBw cm9ncmFtIHNwYWNlLgorKworICoqKiBDaGFuZ2VzIGluIEdEQiAxNQorIAorICogVGhlIE1QWCBj b21tYW5kcyAic2hvdy9zZXQgbXB4IGJvdW5kIiBoYXZlIGJlZW4gZGVwcmVjYXRlZCwgYXMgSW50 ZWwKK0BAIC0yMTIsNiArMjQyLDExIEBAIHFJc0FkZHJlc3NUYWdnZWQKKyAgIGZpbGUgaXMgYWJv dXQsIHRoaXMgbmV3IHBhY2tldCBwcm92aWRlcyBhIG1vcmUgZ2VuZXJpYyB3YXkgdG8gcGVyZm9y bSBzdWNoCisgICBhIGNoZWNrLgorIAorK3ZGaWxlOnN0YXQKKysgIFJldHVybiBpbmZvcm1hdGlv biBhYm91dCBmaWxlcyBvbiB0aGUgcmVtb3RlIHN5c3RlbS4gIExpa2UKKysgIHZGaWxlOmZzdGF0 IGJ1dCB0YWtlcyBhIGZpbGVuYW1lIHJhdGhlciB0aGFuIGFuIG9wZW4gZmlsZQorKyAgZGVzY3Jp cHRvci4KKysKKyAqKiogQ2hhbmdlcyBpbiBHREIgMTQKKyAKKyAqIEdEQiBub3cgc3VwcG9ydHMg dGhlIEFBcmNoNjQgU2NhbGFibGUgTWF0cml4IEV4dGVuc2lvbiAyIChTTUUyKSwgd2hpY2gKK2Rp ZmYgLS1naXQgYS9nZGIvYnVpbGQtaWQuYyBiL2dkYi9idWlsZC1pZC5jCistLS0gYS9nZGIvYnVp bGQtaWQuYworKysrIGIvZ2RiL2J1aWxkLWlkLmMKK0BAIC0yNiw2ICsyNiw5IEBACisgI2luY2x1 ZGUgImZpbGVuYW1lcy5oIgorICNpbmNsdWRlICJnZGJjb3JlLmgiCisgI2luY2x1ZGUgImNsaS9j bGktc3R5bGUuaCIKKysjaW5jbHVkZSAiZ2Ric3VwcG9ydC9zY29wZWRfZmQuaCIKKysjaW5jbHVk ZSAiZGVidWdpbmZvZC1zdXBwb3J0LmgiCisrI2luY2x1ZGUgImV4dGVuc2lvbi5oIgorIAorIC8q IFNlZSBidWlsZC1pZC5oLiAgKi8KKyAKK0BAIC03Myw3MyArNzYsMTc3IEBAIGJ1aWxkX2lkX3Zl cmlmeSAoYmZkICphYmZkLCBzaXplX3QgY2hlY2tfbGVuLCBjb25zdCBiZmRfYnl0ZSAqY2hlY2sp CisgICByZXR1cm4gcmV0dmFsOworIH0KKyAKKy0vKiBIZWxwZXIgZm9yIGJ1aWxkX2lkX3RvX2Rl YnVnX2JmZC4gIExJTksgaXMgYSBwYXRoIHRvIGEgcG90ZW50aWFsCistICAgYnVpbGQtaWQtYmFz ZWQgc2VwYXJhdGUgZGVidWcgZmlsZSwgcG90ZW50aWFsbHkgYSBzeW1saW5rIHRvIHRoZSByZWFs IGZpbGUuCistICAgSWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBtYXRjaGVzIEJVSUxEX0lELCByZXR1 cm4gYSBCRkQgcmVmZXJlbmNlIHRvIGl0LiAgKi8KKysvKiBIZWxwZXIgZm9yIGJ1aWxkX2lkX3Rv X2RlYnVnX2JmZC4gIE9SSUdJTkFMX0xJTksgd2l0aCBTVUZGSVggYXBwZW5kZWQgaXMKKysgICBh IHBhdGggdG8gYSBwb3RlbnRpYWwgYnVpbGQtaWQtYmFzZWQgc2VwYXJhdGUgZGVidWcgZmlsZSwg cG90ZW50aWFsbHkgYQorKyAgIHN5bWxpbmsgdG8gdGhlIHJlYWwgZmlsZS4gIElmIHRoZSBmaWxl IGV4aXN0cyBhbmQgbWF0Y2hlcyBCVUlMRF9JRCwKKysgICByZXR1cm4gYSBCRkQgcmVmZXJlbmNl IHRvIGl0LiAgKi8KKyAKKyBzdGF0aWMgZ2RiX2JmZF9yZWZfcHRyCistYnVpbGRfaWRfdG9fZGVi dWdfYmZkXzEgKGNvbnN0IHN0ZDo6c3RyaW5nICZsaW5rLCBzaXplX3QgYnVpbGRfaWRfbGVuLAor LQkJCSBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQpCisrYnVpbGRfaWRfdG9fZGVidWdfYmZkXzEg KGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbF9saW5rLAorKwkJCSBzaXplX3QgYnVpbGRfaWRf bGVuLCBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQsCisrCQkJIGNvbnN0IGNoYXIgKnN1ZmZpeCkK KyB7CistICBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1ZykKKysgIHRyaWJvb2wgc3VwcG9y dHNfdGFyZ2V0X3N0YXQgPSBUUklCT09MX1VOS05PV047CisrCisrICAvKiBEcm9wIHRoZSAndGFy Z2V0OicgcHJlZml4IGlmIHRoZSB0YXJnZXQgZmlsZXN5c3RlbSBpcyBsb2NhbC4gICovCisrICBz dGQ6OnN0cmluZ192aWV3IG9yaWdpbmFsX2xpbmtfdmlldyAob3JpZ2luYWxfbGluayk7CisrICBp ZiAoaXNfdGFyZ2V0X2ZpbGVuYW1lIChvcmlnaW5hbF9saW5rKSAmJiB0YXJnZXRfZmlsZXN5c3Rl bV9pc19sb2NhbCAoKSkKKysgICAgb3JpZ2luYWxfbGlua192aWV3CisrICAgICAgPSBvcmlnaW5h bF9saW5rX3ZpZXcuc3Vic3RyIChzdHJsZW4gKFRBUkdFVF9TWVNST09UX1BSRUZJWCkpOworKwor KyAgLyogVGhlIHVwcGVyIGJvdW5kIG9mICcxMCcgaGVyZSBpcyBjb21wbGV0ZWx5IGFyYml0cmFy eS4gIFRoZSBsb29wIHNob3VsZAorKyAgICAgdGVybWluYXRlIHZpYSAnYnJlYWsnIHdoZW4gZWl0 aGVyIChhKSBhIHJlYWRhYmxlIHN5bWxpbmsgaXMgZm91bmQsIG9yCisrICAgICAoYikgYSBub24t ZXhpc3RpbmcgZW50cnkgaXMgZm91bmQuCisrCisrICAgICBIb3dldmVyLCBmb3IgcmVtb3RlIHRh cmdldHMsIHdlIHJlbHkgb24gdGhlIHJlbW90ZSByZXR1cm5pbmcgc2FuZQorKyAgICAgZXJyb3Ig Y29kZXMuICBJZiBhIHJlbW90ZSBzZW5kcyBiYWNrIHRoZSB3cm9uZyBlcnJvciBjb2RlIHRoZW4g aXQKKysgICAgIG1pZ2h0IHRyaWNrIEdEQiBpbnRvIHRoaW5raW5nIHRoYXQgdGhlIHN5bWxpbmsg ZXhpc3RzLCBidXQgcG9pbnRzIHRvIGEKKysgICAgIG1pc3NpbmcgZmlsZSwgaW4gd2hpY2ggY2Fz ZSBHREIgd2lsbCB0cnkgdGhlIG5leHQgc2Vxbm8uICBXZSBkb24ndAorKyAgICAgd2FudCBhIGJy b2tlbiByZW1vdGUgdG8gY2F1c2UgR0RCIHRvIHNwaW4gaGVyZSBmb3JldmVyLCBoZW5jZSBhIGZp eGVkCisrICAgICB1cHBlciBib3VuZC4gICovCisrCisrICBmb3IgKHVuc2lnbmVkIHNlcW5vID0g MDsgc2Vxbm8gPCAxMDsgc2Vxbm8rKykKKyAgICAgeworLSAgICAgIGdkYl9wcmludGYgKGdkYl9z dGRsb2csIF8oIiAgVHJ5aW5nICVzLi4uIiksIGxpbmsuY19zdHIgKCkpOworLSAgICAgIGdkYl9m bHVzaCAoZ2RiX3N0ZGxvZyk7CistICAgIH0KKysgICAgICBzdGQ6OnN0cmluZyBsaW5rIChvcmln aW5hbF9saW5rX3ZpZXcpOworIAorLSAgLyogbHJlYWxwYXRoKCkgaXMgZXhwZW5zaXZlIGV2ZW4g Zm9yIHRoZSB1c3VhbGx5IG5vbi1leGlzdGVudCBmaWxlcy4gICovCistICBnZGI6OnVuaXF1ZV94 bWFsbG9jX3B0cjxjaGFyPiBmaWxlbmFtZV9ob2xkZXI7CistICBjb25zdCBjaGFyICpmaWxlbmFt ZSA9IG51bGxwdHI7CistICBpZiAoaXNfdGFyZ2V0X2ZpbGVuYW1lIChsaW5rKSkKKy0gICAgZmls ZW5hbWUgPSBsaW5rLmNfc3RyICgpOworLSAgZWxzZSBpZiAoYWNjZXNzIChsaW5rLmNfc3RyICgp LCBGX09LKSA9PSAwKQorLSAgICB7CistICAgICAgZmlsZW5hbWVfaG9sZGVyLnJlc2V0IChscmVh bHBhdGggKGxpbmsuY19zdHIgKCkpKTsKKy0gICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lX2hvbGRl ci5nZXQgKCk7CistICAgIH0KKysgICAgICBpZiAoc2Vxbm8gPiAwKQorKwlzdHJpbmdfYXBwZW5k ZiAobGluaywgIi4ldSIsIHNlcW5vKTsKKyAKKy0gIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorLSAg ICB7CistICAgICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCistCWdkYl9wcmludGYg KGdkYl9zdGRsb2csCistCQkgICAgXygiIG5vLCB1bmFibGUgdG8gY29tcHV0ZSByZWFsIHBhdGhc biIpKTsKKysgICAgICBsaW5rICs9IHN1ZmZpeDsKKyAKKy0gICAgICByZXR1cm4ge307CistICAg IH0KKysgICAgICBzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnX3ByaW50ZiAoIlRyeWluZyAlcy4u LiIsIGxpbmsuY19zdHIgKCkpOworIAorLSAgLyogV2UgZXhwZWN0IHRvIGJlIHNpbGVudCBvbiB0 aGUgbm9uLWV4aXN0aW5nIGZpbGVzLiAgKi8KKy0gIGdkYl9iZmRfcmVmX3B0ciBkZWJ1Z19iZmQg PSBnZGJfYmZkX29wZW4gKGZpbGVuYW1lLCBnbnV0YXJnZXQpOworKyAgICAgIGdkYjo6dW5pcXVl X3htYWxsb2NfcHRyPGNoYXI+IGZpbGVuYW1lX2hvbGRlcjsKKysgICAgICBjb25zdCBjaGFyICpm aWxlbmFtZSA9IG51bGxwdHI7CisrICAgICAgaWYgKGlzX3RhcmdldF9maWxlbmFtZSAobGluaykp CisrCXsKKysJICBnZGJfYXNzZXJ0IChsaW5rLmxlbmd0aCAoKSA+PSBzdHJsZW4gKFRBUkdFVF9T WVNST09UX1BSRUZJWCkpOworKwkgIGNvbnN0IGNoYXIgKmxpbmtfb25fdGFyZ2V0CisrCSAgICA9 IGxpbmsuY19zdHIgKCkgKyBzdHJsZW4gKFRBUkdFVF9TWVNST09UX1BSRUZJWCk7CisrCisrCSAg ZmlsZWlvX2Vycm9yIHRhcmdldF9lcnJubzsKKysJICBpZiAoc3VwcG9ydHNfdGFyZ2V0X3N0YXQg IT0gVFJJQk9PTF9GQUxTRSkKKysJICAgIHsKKysJICAgICAgc3RydWN0IHN0YXQgc2I7CisrCSAg ICAgIGludCByZXMgPSB0YXJnZXRfZmlsZWlvX3N0YXQgKG51bGxwdHIsIGxpbmtfb25fdGFyZ2V0 LCAmc2IsCisrCQkJCQkgICAgJnRhcmdldF9lcnJubyk7CisrCisrCSAgICAgIGlmIChyZXMgIT0g MCAmJiB0YXJnZXRfZXJybm8gIT0gRklMRUlPX0VOT1NZUykKKysJCXsKKysJCSAgc2VwYXJhdGVf ZGVidWdfZmlsZV9kZWJ1Z19wcmludGYgKCJwYXRoIGRvZXNuJ3QgZXhpc3QiKTsKKysJCSAgYnJl YWs7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKHJlcyAhPSAwICYmIHRhcmdldF9lcnJubyA9PSBG SUxFSU9fRU5PU1lTKQorKwkJc3VwcG9ydHNfdGFyZ2V0X3N0YXQgPSBUUklCT09MX0ZBTFNFOwor KwkgICAgICBlbHNlCisrCQl7CisrCQkgIHN1cHBvcnRzX3RhcmdldF9zdGF0ID0gVFJJQk9PTF9U UlVFOworKwkJICBmaWxlbmFtZSA9IGxpbmsuY19zdHIgKCk7CisrCQl9CisrCSAgICB9CisrCisr CSAgaWYgKHN1cHBvcnRzX3RhcmdldF9zdGF0ID09IFRSSUJPT0xfRkFMU0UpCisrCSAgICB7Cisr CSAgICAgIGdkYl9hc3NlcnQgKGZpbGVuYW1lID09IG51bGxwdHIpOworKworKwkgICAgICAvKiBD b25uZWN0aW5nIHRvIGEgdGFyZ2V0IHRoYXQgZG9lc24ndCBzdXBwb3J0ICdzdGF0Jy4gIFRyeQor KwkJICdyZWFkbGluaycgYXMgYW4gYWx0ZXJuYXRpdmUuICBUaGlzIGlzbid0IGlkZWFsLCBidXQg aXMKKysJCSBtYXliZSBiZXR0ZXIgdGhhbiBub3RoaW5nLiAgUmV0dXJucyBFSU5WQUwgaWYgdGhl IHBhdGgKKysJCSBpc24ndCBhIHN5bWJvbGljIGxpbmssIHdoaWNoIGhpbnRzIHRoYXQgdGhlIHBh dGggaXMKKysJCSBhdmFpbGFibGUgLS0gdGhlcmUgYXJlIG90aGVyIGVycm9ycyBlLmcuIEVOT0VO VCBmb3Igd2hlbgorKwkJIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3QsIGJ1dCB3ZSBqdXN0IGFzc3Vt ZSB0aGF0IGFueXRoaW5nCisrCQkgb3RoZXIgdGhhbiBFSU5WQUwgaW5kaWNhdGVzIHRoZSBwYXRo IGRvZXNuJ3QgZXhpc3QuICAqLworKwkgICAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBs aW5rX3RhcmdldAorKwkJPSB0YXJnZXRfZmlsZWlvX3JlYWRsaW5rIChudWxscHRyLCBsaW5rX29u X3RhcmdldCwKKysJCQkJCSAgJnRhcmdldF9lcnJubyk7CisrCSAgICAgIGlmIChsaW5rX3Rhcmdl dC5oYXNfdmFsdWUgKCkKKysJCSAgfHwgdGFyZ2V0X2Vycm5vID09IEZJTEVJT19FSU5WQUwpCisr CQlmaWxlbmFtZSA9IGxpbmsuY19zdHIgKCk7CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgc2Vw YXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYgKCJwYXRoIGRvZXNuJ3QgZXhpc3QiKTsKKysJ CSAgYnJlYWs7CisrCQl9CisrCSAgICB9CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBzdHJ1 Y3Qgc3RhdCBidWY7CisrCisrCSAgLyogVGhlIGBhY2Nlc3MnIGNhbGwgYmVsb3cgYXV0b21hdGlj YWxseSBkZXJlZmVyZW5jZXMgTElOSywgYnV0CisrCSAgICAgd2Ugd2FudCB0byBzdG9wIGluY3Jl bWVudGluZyBTRVFOTyBvbmNlIHdlIGZpbmQgYSBzeW1saW5rCisrCSAgICAgdGhhdCBkb2Vzbid0 IGV4aXN0LiAgKi8KKysJICBpZiAobHN0YXQgKGxpbmsuY19zdHIgKCksICZidWYpICE9IDApCisr CSAgICB7CisrCSAgICAgIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgicGF0aCBk b2Vzbid0IGV4aXN0Iik7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKworKwkgIC8qIENhbiBM SU5LIGJlIGFjY2Vzc2VkLCBvciBpZiBMSU5LIGlzIGEgc3ltbGluaywgY2FuIHRoZSBmaWxlCisr CSAgICAgcG9pbnRlZCB0b28gYmUgYWNjZXNzZWQ/ICBEbyB0aGlzIGFzIGxyZWFscGF0aCgpIGlz CisrCSAgICAgZXhwZW5zaXZlLCBldmVuIGZvciB0aGUgdXN1YWxseSBub24tZXhpc3RlbnQgZmls ZXMuICAqLworKwkgIGlmIChhY2Nlc3MgKGxpbmsuY19zdHIgKCksIEZfT0spID09IDApCisrCSAg ICB7CisrCSAgICAgIGZpbGVuYW1lX2hvbGRlci5yZXNldCAobHJlYWxwYXRoIChsaW5rLmNfc3Ry ICgpKSk7CisrCSAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVfaG9sZGVyLmdldCAoKTsKKysJICAg IH0KKysJfQorIAorLSAgaWYgKGRlYnVnX2JmZCA9PSBOVUxMKQorLSAgICB7CistICAgICAgaWYg KHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCistCWdkYl9wcmludGYgKGdkYl9zdGRsb2csIF8o IiBubywgdW5hYmxlIHRvIG9wZW4uXG4iKSk7CisrICAgICAgaWYgKGZpbGVuYW1lID09IG51bGxw dHIpCisrCXsKKysJICBzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnX3ByaW50ZiAoInVuYWJsZSB0 byBjb21wdXRlIHJlYWwgcGF0aCIpOworKwkgIGNvbnRpbnVlOworKwl9CisgCistICAgICAgcmV0 dXJuIHt9OworLSAgICB9CisrICAgICAgLyogV2UgZXhwZWN0IHRvIGJlIHNpbGVudCBvbiB0aGUg bm9uLWV4aXN0aW5nIGZpbGVzLiAgKi8KKysgICAgICBnZGJfYmZkX3JlZl9wdHIgZGVidWdfYmZk ID0gZ2RiX2JmZF9vcGVuIChmaWxlbmFtZSwgZ251dGFyZ2V0KTsKKyAKKy0gIGlmICghYnVpbGRf aWRfdmVyaWZ5IChkZWJ1Z19iZmQuZ2V0KCksIGJ1aWxkX2lkX2xlbiwgYnVpbGRfaWQpKQorLSAg ICB7CistICAgICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCistCWdkYl9wcmludGYg KGdkYl9zdGRsb2csIF8oIiBubywgYnVpbGQtaWQgZG9lcyBub3QgbWF0Y2guXG4iKSk7CisrICAg ICAgaWYgKGRlYnVnX2JmZCA9PSBOVUxMKQorKwl7CisrCSAgc2VwYXJhdGVfZGVidWdfZmlsZV9k ZWJ1Z19wcmludGYgKCJ1bmFibGUgdG8gb3BlbiBgJXNgIiwgZmlsZW5hbWUpOworKwkgIGNvbnRp bnVlOworKwl9CisgCistICAgICAgcmV0dXJuIHt9OworLSAgICB9CisrICAgICAgaWYgKCFidWls ZF9pZF92ZXJpZnkgKGRlYnVnX2JmZC5nZXQoKSwgYnVpbGRfaWRfbGVuLCBidWlsZF9pZCkpCisr CXsKKysJICBzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnX3ByaW50ZiAoImJ1aWxkLWlkIGRvZXMg bm90IG1hdGNoIik7CisrCSAgY29udGludWU7CisrCX0KKyAKKy0gIGlmIChzZXBhcmF0ZV9kZWJ1 Z19maWxlX2RlYnVnKQorLSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCBfKCIgeWVzIVxuIikp OworKyAgICAgIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgiZm91bmQgYSBtYXRj aCIpOworKyAgICAgIHJldHVybiBkZWJ1Z19iZmQ7CisrICAgIH0KKyAKKy0gIHJldHVybiBkZWJ1 Z19iZmQ7CisrICBzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnX3ByaW50ZiAoIm5vIHN1aXRhYmxl IGZpbGUgZm91bmQiKTsKKysgIHJldHVybiB7fTsKKyB9CisgCisgLyogQ29tbW9uIGNvZGUgZm9y IGZpbmRpbmcgQkZEcyBvZiBhIGdpdmVuIGJ1aWxkLWlkLiAgVGhpcyBmdW5jdGlvbgorICAgIHdv cmtzIHdpdGggYm90aCBkZWJ1Z2luZm8gZmlsZXMgKFNVRkZJWCA9PSAiLmRlYnVnIikgYW5kIGV4 ZWN1dGFibGUKKy0gICBmaWxlcyAoU1VGRklYID09ICIiKS4gICovCisrICAgZmlsZXMgKFNVRkZJ WCA9PSAiIikuCisrCisrICAgVGhlIGJ1aWxkLWlkIHdpbGwgYmUgc3BsaXQgaW50byBhIHNpbmds ZSBieXRlIHN1Yi1kaXJlY3RvcnksIGZvbGxvd2VkIGJ5CisrICAgdGhlIHJlbWFpbmluZyBidWls ZC1pZCBieXRlcyBhcyB0aGUgZmlsZW5hbWUsIGkuZS4gd2UgdXNlIHRoZSBsb29rdXAKKysgICBm b3JtYXQ6IGAuYnVpbGQtaWQveHgveXkuLi4uenpgLiAgQXMgYSBjb25zZXF1ZW5jZSwgaWYgQlVJ TERfSURfTEVOIGlzCisrICAgbGVzcyB0aGFuIDIgKGJ5dGVzKSwgbm8gcmVzdWx0cyB3aWxsIGJl IGZvdW5kIGFzIHRoZXJlIGFyZSBub3QgZW5vdWdoCisrICAgYnl0ZXMgdG8gZm9ybSB0aGUgYHl5 Li4uLnp6YCBwYXJ0IG9mIHRoZSBsb29rdXAgZmlsZW5hbWUuICAqLworIAorIHN0YXRpYyBnZGJf YmZkX3JlZl9wdHIKKyBidWlsZF9pZF90b19iZmRfc3VmZml4IChzaXplX3QgYnVpbGRfaWRfbGVu LCBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQsCisgCQkJY29uc3QgY2hhciAqc3VmZml4KQorIHsK KysgIFNFUEFSQVRFX0RFQlVHX0ZJTEVfU0NPUEVEX0RFQlVHX0VOVEVSX0VYSVQ7CisrCisrICBp ZiAoYnVpbGRfaWRfbGVuIDwgMikKKysgICAgeworKyAgICAgIC8qIFplcm8gbGVuZ3RoIGJ1aWxk LWlkcyBhcmUgaWdub3JlZCBieSBiZmQuICAqLworKyAgICAgIGdkYl9hc3NlcnQgKGJ1aWxkX2lk X2xlbiA+IDApOworKyAgICAgIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmCisrCSgi SWdub3Jpbmcgc2hvcnQgYnVpbGQtaWQgYCVzJyBmb3IgYnVpbGQtaWQgYmFzZWQgbG9va3VwIiwK KysJIGJpbjJoZXggKGJ1aWxkX2lkLCBidWlsZF9pZF9sZW4pLmNfc3RyICgpKTsKKysgICAgICBy ZXR1cm4ge307CisrICAgIH0KKysKKyAgIC8qIEtlZXAgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBz byB0aGF0IERFQlVHX0ZJTEVfRElSRUNUT1JZIGJlaW5nICIiIHdpbGwKKyAgICAgIGNhdXNlICIv LmJ1aWxkLWlkLy4uLiIgbG9va3Vwcy4gICovCisgCitAQCAtMTU4LDMwICsyNjUsMzMgQEAgYnVp bGRfaWRfdG9fYmZkX3N1ZmZpeCAoc2l6ZV90IGJ1aWxkX2lkX2xlbiwgY29uc3QgYmZkX2J5dGUg KmJ1aWxkX2lkLAorICAgICAgIHN0ZDo6c3RyaW5nIGxpbmsgPSBkZWJ1Z2Rpci5nZXQgKCk7Cisg ICAgICAgbGluayArPSAiLy5idWlsZC1pZC8iOworIAorLSAgICAgIGlmIChzaXplID4gMCkKKy0J eworLQkgIHNpemUtLTsKKy0JICBzdHJpbmdfYXBwZW5kZiAobGluaywgIiUwMngvIiwgKHVuc2ln bmVkKSAqZGF0YSsrKTsKKy0JfQorKyAgICAgIGdkYl9hc3NlcnQgKHNpemUgPiAxKTsKKysgICAg ICBzaXplLS07CisrICAgICAgc3RyaW5nX2FwcGVuZGYgKGxpbmssICIlMDJ4LyIsICh1bnNpZ25l ZCkgKmRhdGErKyk7CisgCisgICAgICAgd2hpbGUgKHNpemUtLSA+IDApCisgCXN0cmluZ19hcHBl bmRmIChsaW5rLCAiJTAyeCIsICh1bnNpZ25lZCkgKmRhdGErKyk7CisgCistICAgICAgbGluayAr PSBzdWZmaXg7CistCisgICAgICAgZ2RiX2JmZF9yZWZfcHRyIGRlYnVnX2JmZAorLQk9IGJ1aWxk X2lkX3RvX2RlYnVnX2JmZF8xIChsaW5rLCBidWlsZF9pZF9sZW4sIGJ1aWxkX2lkKTsKKysJPSBi dWlsZF9pZF90b19kZWJ1Z19iZmRfMSAobGluaywgYnVpbGRfaWRfbGVuLCBidWlsZF9pZCwgc3Vm Zml4KTsKKyAgICAgICBpZiAoZGVidWdfYmZkICE9IE5VTEwpCisgCXJldHVybiBkZWJ1Z19iZmQ7 CisgCisgICAgICAgLyogVHJ5IHRvIGxvb2sgdW5kZXIgdGhlIHN5c3Jvb3QgYXMgd2VsbC4gIElm IHRoZSBzeXNyb290IGlzCisgCSAiL3RoZS9zeXNyb290IiwgaXQgd2lsbCBnaXZlCistCSAiL3Ro ZS9zeXNyb290L3Vzci9saWIvZGVidWcvLmJ1aWxkLWlkL2FiL2NkZWYuZGVidWciLiAgKi8KKysJ ICIvdGhlL3N5c3Jvb3QvdXNyL2xpYi9kZWJ1Zy8uYnVpbGQtaWQvYWIvY2RlZi5kZWJ1ZyIuCisr CisrCSBJZiB0aGUgc3lzcm9vdCBpcyAndGFyZ2V0OicgYW5kIHRoZSB0YXJnZXQgZmlsZXN5c3Rl bSBpcyBsb2NhbCB0bworKwkgR0RCIHRoZW4gJ3RhcmdldDovcGF0aC90by9jaGVjaycgYmVjb21l cyAnL3BhdGgvdG8vY2hlY2snIHdoaWNoCisrCSB3ZSBqdXN0IGNoZWNrZWQgYWJvdmUuICAqLwor IAorLSAgICAgIGlmICghZ2RiX3N5c3Jvb3QuZW1wdHkgKCkpCisrICAgICAgaWYgKCFnZGJfc3lz cm9vdC5lbXB0eSAoKQorKwkgICYmIChnZGJfc3lzcm9vdCAhPSBUQVJHRVRfU1lTUk9PVF9QUkVG SVgKKysJICAgICAgfHwgIXRhcmdldF9maWxlc3lzdGVtX2lzX2xvY2FsICgpKSkKKyAJeworIAkg IGxpbmsgPSBnZGJfc3lzcm9vdCArIGxpbms7CistCSAgZGVidWdfYmZkID0gYnVpbGRfaWRfdG9f ZGVidWdfYmZkXzEgKGxpbmssIGJ1aWxkX2lkX2xlbiwgYnVpbGRfaWQpOworKwkgIGRlYnVnX2Jm ZCA9IGJ1aWxkX2lkX3RvX2RlYnVnX2JmZF8xIChsaW5rLCBidWlsZF9pZF9sZW4sIGJ1aWxkX2lk LAorKwkJCQkJICAgICAgIHN1ZmZpeCk7CisgCSAgaWYgKGRlYnVnX2JmZCAhPSBOVUxMKQorIAkg ICAgcmV0dXJuIGRlYnVnX2JmZDsKKyAJfQorQEAgLTE5OCw5ICszMDgsMTEgQEAgYnVpbGRfaWRf dG9fZGVidWdfYmZkIChzaXplX3QgYnVpbGRfaWRfbGVuLCBjb25zdCBiZmRfYnl0ZSAqYnVpbGRf aWQpCisgICByZXR1cm4gYnVpbGRfaWRfdG9fYmZkX3N1ZmZpeCAoYnVpbGRfaWRfbGVuLCBidWls ZF9pZCwgIi5kZWJ1ZyIpOworIH0KKyAKKy0vKiBTZWUgYnVpbGQtaWQuaC4gICovCisrLyogRmlu ZCBhbmQgb3BlbiBhIEJGRCBmb3IgYW4gZXhlY3V0YWJsZSBmaWxlIGdpdmVuIGEgYnVpbGQtaWQu ICBJZiBubyBCRkQKKysgICBjYW4gYmUgZm91bmQsIHJldHVybiBOVUxMLiAgVGhlIHJldHVybmVk IHJlZmVyZW5jZSB0byB0aGUgQkZEIG11c3QgYmUKKysgICByZWxlYXNlZCBieSB0aGUgY2FsbGVy LiAgKi8KKyAKKy1nZGJfYmZkX3JlZl9wdHIKKytzdGF0aWMgZ2RiX2JmZF9yZWZfcHRyCisgYnVp bGRfaWRfdG9fZXhlY19iZmQgKHNpemVfdCBidWlsZF9pZF9sZW4sIGNvbnN0IGJmZF9ieXRlICpi dWlsZF9pZCkKKyB7CisgICByZXR1cm4gYnVpbGRfaWRfdG9fYmZkX3N1ZmZpeCAoYnVpbGRfaWRf bGVuLCBidWlsZF9pZCwgIiIpOworQEAgLTIxNywxMCArMzI5LDkgQEAgZmluZF9zZXBhcmF0ZV9k ZWJ1Z19maWxlX2J5X2J1aWxkaWQgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLAorICAgYnVpbGRf aWQgPSBidWlsZF9pZF9iZmRfZ2V0IChvYmpmaWxlLT5vYmZkLmdldCAoKSk7CisgICBpZiAoYnVp bGRfaWQgIT0gTlVMTCkKKyAgICAgeworLSAgICAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2Rl YnVnKQorLQlnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAorLQkJICAgIF8oIlxuTG9va2luZyBmb3Ig c2VwYXJhdGUgZGVidWcgaW5mbyAoYnVpbGQtaWQpIGZvciAiCistCQkgICAgICAiJXNcbiIpLCBv YmpmaWxlX25hbWUgKG9iamZpbGUpKTsKKysgICAgICBTRVBBUkFURV9ERUJVR19GSUxFX1NDT1BF RF9ERUJVR19TVEFSVF9FTkQKKysJKCJsb29raW5nIGZvciBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIChi dWlsZC1pZCkgZm9yICVzIiwKKysJIG9iamZpbGVfbmFtZSAob2JqZmlsZSkpOworIAorICAgICAg IGdkYl9iZmRfcmVmX3B0ciBhYmZkIChidWlsZF9pZF90b19kZWJ1Z19iZmQgKGJ1aWxkX2lkLT5z aXplLAorIAkJCQkJCSAgIGJ1aWxkX2lkLT5kYXRhKSk7CitAQCAtMjI5LDkgKzM0MCw5IEBAIGZp bmRfc2VwYXJhdGVfZGVidWdfZmlsZV9ieV9idWlsZGlkIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmls ZSwKKyAJICAmJiBmaWxlbmFtZV9jbXAgKGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQuZ2V0ICgpKSwK KyAJCQkgICBvYmpmaWxlX25hbWUgKG9iamZpbGUpKSA9PSAwKQorIAl7CistCSAgaWYgKHNlcGFy YXRlX2RlYnVnX2ZpbGVfZGVidWcpCistCSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCAiXCIl c1wiOiBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIGZpbGUgaGFzIG5vICIKKy0JCQkiZGVidWcgaW5mbyIs IGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQuZ2V0ICgpKSk7CisrCSAgc2VwYXJhdGVfZGVidWdfZmls ZV9kZWJ1Z19wcmludGYKKysJICAgICgiXCIlc1wiOiBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIGZpbGUg aGFzIG5vIGRlYnVnIGluZm8iLAorKwkgICAgIGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQuZ2V0ICgp KSk7CisgCSAgd2FybmluZ3MtPndhcm4gKF8oIlwiJXBzXCI6IHNlcGFyYXRlIGRlYnVnIGluZm8g ZmlsZSBoYXMgbm8gIgorIAkJCSAgICAiZGVidWcgaW5mbyIpLAorIAkJCSAgc3R5bGVkX3N0cmlu ZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLAorQEAgLTI0MywzICszNTQsNzggQEAgZmluZF9z ZXBhcmF0ZV9kZWJ1Z19maWxlX2J5X2J1aWxkaWQgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLAor IAorICAgcmV0dXJuIHN0ZDo6c3RyaW5nICgpOworIH0KKysKKysvKiBTZWUgYnVpbGQtaWQuaC4g ICovCisrCisrZ2RiX2JmZF9yZWZfcHRyCisrZmluZF9vYmpmaWxlX2J5X2J1aWxkX2lkIChwcm9n cmFtX3NwYWNlICpwc3BhY2UsCisrCQkJICBjb25zdCBiZmRfYnVpbGRfaWQgKmJ1aWxkX2lkLAor KwkJCSAgY29uc3QgY2hhciAqZXhwZWN0ZWRfZmlsZW5hbWUpCisreworKyAgZ2RiX2JmZF9yZWZf cHRyIGFiZmQ7CisrCisrICBmb3IgKHVuc2lnbmVkIGF0dGVtcHQgPSAwLCBtYXhfYXR0ZW1wdHMg PSAxOworKyAgICAgICBhdHRlbXB0IDwgbWF4X2F0dGVtcHRzICYmIGFiZmQgPT0gbnVsbHB0cjsK KysgICAgICAgKythdHRlbXB0KQorKyAgICB7CisrICAgICAgLyogVHJ5IHRvIGZpbmQgdGhlIGV4 ZWN1dGFibGUgKG9yIHNoYXJlZCBvYmplY3QpIGJ5IGxvb2tpbmcgZm9yIGEKKysJIChzeW0pbGlu ayBvbiBkaXNrIGZyb20gdGhlIGJ1aWxkLWlkIHRvIHRoZSBvYmplY3QgZmlsZS4gICovCisrICAg ICAgYWJmZCA9IGJ1aWxkX2lkX3RvX2V4ZWNfYmZkIChidWlsZF9pZC0+c2l6ZSwgYnVpbGRfaWQt PmRhdGEpOworKworKyAgICAgIGlmIChhYmZkICE9IG51bGxwdHIgfHwgYXR0ZW1wdCA+IDApCisr CWJyZWFrOworKworKyAgICAgIC8qIEF0dGVtcHQgdG8gcXVlcnkgZGVidWdpbmZvZCBmb3IgdGhl IGV4ZWN1dGFibGUuICBUaGlzIHdpbGwgb25seQorKwkgZ2V0IHJ1biBkdXJpbmcgdGhlIGZpcnN0 IGF0dGVtcHQsIGlmIGFuIGV4dGVuc2lvbiBsYW5ndWFnZSBob29rCisrCSAoc2VlIGJlbG93KSBh c2tlZCBmb3IgYSBzZWNvbmQgYXR0ZW1wdCB0aGVuIHdlIHdpbGwgaGF2ZSBhbHJlYWR5CisrCSBi cm9rZW4gb3V0IG9mIHRoZSBsb29wIGFib3ZlLiAgKi8KKysgICAgICBnZGI6OnVuaXF1ZV94bWFs bG9jX3B0cjxjaGFyPiBwYXRoOworKyAgICAgIHNjb3BlZF9mZCBmZCA9IGRlYnVnaW5mb2RfZXhl Y19xdWVyeSAoYnVpbGRfaWQtPmRhdGEsIGJ1aWxkX2lkLT5zaXplLAorKwkJCQkJICAgIGV4cGVj dGVkX2ZpbGVuYW1lLCAmcGF0aCk7CisrICAgICAgaWYgKGZkLmdldCAoKSA+PSAwKQorKwl7Cisr CSAgYWJmZCA9IGdkYl9iZmRfb3BlbiAocGF0aC5nZXQgKCksIGdudXRhcmdldCk7CisrCisrCSAg aWYgKGFiZmQgPT0gbnVsbHB0cikKKysJICAgIHdhcm5pbmcgKF8oIlwiJXBzXCIgZnJvbSBkZWJ1 Z2luZm9kIGNhbm5vdCBiZSBvcGVuZWQgYXMgYmZkOiAlcyIpLAorKwkJICAgICBzdHlsZWRfc3Ry aW5nIChmaWxlX25hbWVfc3R5bGUuc3R5bGUgKCksIHBhdGguZ2V0ICgpKSwKKysJCSAgICAgZ2Ri X2JmZF9lcnJtc2cgKGJmZF9nZXRfZXJyb3IgKCksIG51bGxwdHIpLmNfc3RyICgpKTsKKysJICBl bHNlIGlmICghYnVpbGRfaWRfdmVyaWZ5IChhYmZkLmdldCAoKSwgYnVpbGRfaWQtPnNpemUsCisr CQkJCSAgICAgYnVpbGRfaWQtPmRhdGEpKQorKwkgICAgYWJmZCA9IG51bGxwdHI7CisrCX0KKysK KysgICAgICBpZiAoYWJmZCAhPSBudWxscHRyKQorKwlicmVhazsKKysKKysgICAgICBleHRfbGFu Z19taXNzaW5nX2ZpbGVfcmVzdWx0IGV4dF9yZXN1bHQKKysJPSBleHRfbGFuZ19maW5kX29iamZp bGVfZnJvbV9idWlsZGlkIChwc3BhY2UsIGJ1aWxkX2lkLAorKwkJCQkJICAgICAgZXhwZWN0ZWRf ZmlsZW5hbWUpOworKyAgICAgIGlmICghZXh0X3Jlc3VsdC5maWxlbmFtZSAoKS5lbXB0eSAoKSkK KysJeworKwkgIC8qIFRoZSBleHRlbnNpb24gaWRlbnRpZmllZCB0aGUgZmlsZSBmb3IgdXMuICAq LworKwkgIGFiZmQgPSBnZGJfYmZkX29wZW4gKGV4dF9yZXN1bHQuZmlsZW5hbWUgKCkuY19zdHIg KCksIGdudXRhcmdldCk7CisrCSAgaWYgKGFiZmQgPT0gbnVsbHB0cikKKysJICAgIHsKKysJICAg ICAgd2FybmluZyAoXygiXCIlcHNcIiBmcm9tIGV4dGVuc2lvbiBjYW5ub3QgYmUgb3BlbmVkIGFz IGJmZDogJXMiKSwKKysJCSAgICAgICBzdHlsZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5 bGUgKCksCisrCQkJCSAgICAgIGV4dF9yZXN1bHQuZmlsZW5hbWUgKCkuY19zdHIgKCkpLAorKwkJ ICAgICAgIGdkYl9iZmRfZXJybXNnIChiZmRfZ2V0X2Vycm9yICgpLCBudWxscHRyKS5jX3N0ciAo KSk7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKworKwkgIC8qIElmIHRoZSBleHRlbnNpb24g Z2F2ZSB1cyBhIHBhdGggdG8gYSBmaWxlIHRoZW4gd2UgYWx3YXlzCisrCSAgICAgYXNzdW1lIHRo YXQgaXQgaXMgdGhlIGNvcnJlY3QgZmlsZSwgd2UgZG8gbm8gYWRkaXRpb25hbCBjaGVjaworKwkg ICAgIG9mIGl0cyBidWlsZC1pZC4gICovCisrCX0KKysgICAgICBlbHNlIGlmIChleHRfcmVzdWx0 LnRyeV9hZ2FpbiAoKSkKKysJeworKwkgIC8qIFRoZSBleHRlbnNpb24gbWlnaHQgaGF2ZSBpbnN0 YWxsZWQgdGhlIGZpbGUgaW4gdGhlIGV4cGVjdGVkCisrCSAgICAgbG9jYXRpb24sIHdlIHNob3Vs ZCB0cnkgYWdhaW4uICAqLworKwkgIG1heF9hdHRlbXB0cyA9IDI7CisrCSAgY29udGludWU7Cisr CX0KKysgICAgfQorKworKyAgcmV0dXJuIGFiZmQ7CisrfQorZGlmZiAtLWdpdCBhL2dkYi9idWls ZC1pZC5oIGIvZ2RiL2J1aWxkLWlkLmgKKy0tLSBhL2dkYi9idWlsZC1pZC5oCisrKysgYi9nZGIv YnVpbGQtaWQuaAorQEAgLTQwLDEzICs0MCw2IEBAIGV4dGVybiBpbnQgYnVpbGRfaWRfdmVyaWZ5 IChiZmQgKmFiZmQsCisgZXh0ZXJuIGdkYl9iZmRfcmVmX3B0ciBidWlsZF9pZF90b19kZWJ1Z19i ZmQgKHNpemVfdCBidWlsZF9pZF9sZW4sCisgCQkJCQkgICAgICBjb25zdCBiZmRfYnl0ZSAqYnVp bGRfaWQpOworIAorLS8qIEZpbmQgYW5kIG9wZW4gYSBCRkQgZm9yIGFuIGV4ZWN1dGFibGUgZmls ZSBnaXZlbiBhIGJ1aWxkLWlkLiAgSWYgbm8gQkZECistICAgY2FuIGJlIGZvdW5kLCByZXR1cm4g TlVMTC4gIFRoZSByZXR1cm5lZCByZWZlcmVuY2UgdG8gdGhlIEJGRCBtdXN0IGJlCistICAgcmVs ZWFzZWQgYnkgdGhlIGNhbGxlci4gICovCistCistZXh0ZXJuIGdkYl9iZmRfcmVmX3B0ciBidWls ZF9pZF90b19leGVjX2JmZCAoc2l6ZV90IGJ1aWxkX2lkX2xlbiwKKy0JCQkJCSAgICAgY29uc3Qg YmZkX2J5dGUgKmJ1aWxkX2lkKTsKKy0KKyAvKiBGaW5kIHRoZSBzZXBhcmF0ZSBkZWJ1ZyBmaWxl IGZvciBPQkpGSUxFLCBieSB1c2luZyB0aGUgYnVpbGQtaWQKKyAgICBhc3NvY2lhdGVkIHdpdGgg T0JKRklMRSdzIEJGRC4gIElmIHN1Y2Nlc3NmdWwsIHJldHVybnMgdGhlIGZpbGUgbmFtZSBmb3Ig dGhlCisgICAgc2VwYXJhdGUgZGVidWcgZmlsZSwgb3RoZXJ3aXNlLCByZXR1cm4gYW4gZW1wdHkg c3RyaW5nLgorQEAgLTYwLDYgKzUzLDIyIEBAIGV4dGVybiBnZGJfYmZkX3JlZl9wdHIgYnVpbGRf aWRfdG9fZXhlY19iZmQgKHNpemVfdCBidWlsZF9pZF9sZW4sCisgZXh0ZXJuIHN0ZDo6c3RyaW5n IGZpbmRfc2VwYXJhdGVfZGVidWdfZmlsZV9ieV9idWlsZGlkCisgICAoc3RydWN0IG9iamZpbGUg Km9iamZpbGUsIGRlZmVycmVkX3dhcm5pbmdzICp3YXJuaW5ncyk7CisgCisrLyogRmluZCBhbiBv YmpmaWxlIChleGVjdXRhYmxlIG9yIHNoYXJlZCBsaWJyYXJ5KSB0aGF0IG1hdGNoZXMgQlVJTERf SUQuCisrICAgVGhpcyBpcyBkb25lIGJ5IGZpcnN0IGNoZWNraW5nIGluIHRoZSBkZWJ1Zy1maWxl LWRpcmVjdG9yeSBmb3IgYQorKyAgIHN1aXRhYmxlIC5idWlsZC1pZC8gc3ViLWRpcmVjdG9yeSwg YW5kIGxvb2tpbmcgZm9yIGEgZmlsZSB3aXRoIHRoZQorKyAgIHJlcXVpcmVkIGJ1aWxkLWlkICh1 c3VhbGx5IGEgc3ltYm9saWMgbGluayBvciBoYXJkIGxpbmsgdG8gdGhlIGFjdHVhbAorKyAgIGZp bGUpLgorKworKyAgIElmIHRoYXQgZG9lc24ndCBmaW5kIHVzIGEgZmlsZSB0aGVuIHdlIGNhbGwg dG8gZGVidWdpbmZvZCB0byBzZWUgaWYgaXQKKysgICBjYW4gcHJvdmlkZSB0aGUgcmVxdWlyZWQg ZmlsZS4KKysKKysgICBFWFBFQ1RFRF9GSUxFTkFNRSBpcyB1c2VkIGluIG91dHB1dCBtZXNzYWdl cyBmcm9tIGRlYnVnaW5mb2QsIHRoaXMKKysgICBzaG91bGQgYmUgdGhlIGZpbGUgd2Ugd2VyZSBs b29raW5nIGZvciBidXQgY291bGRuJ3QgZmluZC4gICovCisrCisrZXh0ZXJuIGdkYl9iZmRfcmVm X3B0ciBmaW5kX29iamZpbGVfYnlfYnVpbGRfaWQKKysgIChzdHJ1Y3QgcHJvZ3JhbV9zcGFjZSAq cHNwYWNlLCBjb25zdCBiZmRfYnVpbGRfaWQgKmJ1aWxkX2lkLAorKyAgIGNvbnN0IGNoYXIgKmV4 cGVjdGVkX2ZpbGVuYW1lKTsKKysKKyAvKiBSZXR1cm4gYW4gaGV4LXN0cmluZyByZXByZXNlbnRh dGlvbiBvZiBCVUlMRF9JRC4gICovCisgCisgc3RhdGljIGlubGluZSBzdGQ6OnN0cmluZworZGlm ZiAtLWdpdCBhL2dkYi9jb3JlbG93LmMgYi9nZGIvY29yZWxvdy5jCistLS0gYS9nZGIvY29yZWxv dy5jCisrKysgYi9nZGIvY29yZWxvdy5jCitAQCAtNDcsMTcgKzQ3LDEzMCBAQAorICNpbmNsdWRl ICJnZGJzdXBwb3J0L3BhdGhzdHVmZi5oIgorICNpbmNsdWRlICJnZGJzdXBwb3J0L3Njb3BlZF9m ZC5oIgorICNpbmNsdWRlICJnZGJzdXBwb3J0L3g4Ni14c3RhdGUuaCIKKy0jaW5jbHVkZSAiZGVi dWdpbmZvZC1zdXBwb3J0LmgiCisgI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisgI2luY2x1ZGUg PHVub3JkZXJlZF9zZXQ+CisgI2luY2x1ZGUgImNsaS9jbGktY21kcy5oIgorICNpbmNsdWRlICJ4 bWwtdGRlc2MuaCIKKyAjaW5jbHVkZSAibWVtdGFnLmgiCisrI2luY2x1ZGUgImNsaS9jbGktc3R5 bGUuaCIKKyAKKyAjaWZuZGVmIE9fTEFSR0VGSUxFCisgI2RlZmluZSBPX0xBUkdFRklMRSAwCisg I2VuZGlmCisgCisrLyogQSBtZW1fcmFuZ2UgYW5kIHRoZSBidWlsZC1pZCBhc3NvY2lhdGVkIHdp dGggdGhlIGZpbGUgbWFwcGVkIGludG8gdGhlCisrICAgZ2l2ZW4gcmFuZ2UuICAqLworKworK3N0 cnVjdCBtZW1fcmFuZ2VfYW5kX2J1aWxkX2lkCisreworKyAgbWVtX3JhbmdlX2FuZF9idWlsZF9p ZCAobWVtX3JhbmdlICYmciwgY29uc3QgYmZkX2J1aWxkX2lkICppZCkKKysgICAgOiByYW5nZSAo ciksCisrICAgICAgYnVpbGRfaWQgKGlkKQorKyAgeyAvKiBOb3RoaW5nLiAgKi8gfQorKworKyAg LyogQSByYW5nZSBvZiBtZW1vcnkgYWRkcmVzc2VzLiAgKi8KKysgIG1lbV9yYW5nZSByYW5nZTsK KysKKysgIC8qIFRoZSBidWlsZC1pZCBvZiB0aGUgZmlsZSBtYXBwZWQgaW50byBSQU5HRS4gICov CisrICBjb25zdCBiZmRfYnVpbGRfaWQgKmJ1aWxkX2lkOworK307CisrCisrLyogQW4gaW5zdGFu Y2Ugb2YgdGhpcyBjbGFzcyBpcyBjcmVhdGVkIHdpdGhpbiB0aGUgY29yZV90YXJnZXQgYW5kIGlz IHVzZWQKKysgICB0byBob2xkIGFsbCB0aGUgaW5mb3JtYXRpb24gdGhhdCByZWxhdGluZyB0byBt YXBwZWQgZmlsZXMsIHRoZWlyIGFkZHJlc3MKKysgICByYW5nZXMsIGFuZCB0aGVpciBjb3JyZXNw b25kaW5nIGJ1aWxkLWlkcy4gICovCisrCisrc3RydWN0IG1hcHBlZF9maWxlX2luZm8KKyt7Cisr ICAvKiBTZWUgY29tbWVudCBvbiBmdW5jdGlvbiBkZWZpbml0aW9uLiAgKi8KKysKKysgIHZvaWQg YWRkIChjb25zdCBjaGFyICpzb25hbWUsIGNvbnN0IGNoYXIgKmV4cGVjdGVkX2ZpbGVuYW1lLAor KwkgICAgY29uc3QgY2hhciAqYWN0dWFsX2ZpbGVuYW1lLCBzdGQ6OnZlY3RvcjxtZW1fcmFuZ2U+ ICYmcmFuZ2VzLAorKwkgICAgY29uc3QgYmZkX2J1aWxkX2lkICpidWlsZF9pZCk7CisrCisrICAv KiBTZWUgY29tbWVudCBvbiBmdW5jdGlvbiBkZWZpbml0aW9uLiAgKi8KKysKKysgIHN0ZDo6b3B0 aW9uYWwgPGNvcmVfdGFyZ2V0X21hcHBlZF9maWxlX2luZm8+CisrICBsb29rdXAgKGNvbnN0IGNo YXIgKmZpbGVuYW1lLCBjb25zdCBzdGQ6Om9wdGlvbmFsPENPUkVfQUREUj4gJmFkZHIpOworKwor K3ByaXZhdGU6CisrCisrICAvKiBIZWxwZXIgZm9yIDo6bG9va3VwLiAgQlVJTERfSUQgaXMgYSBi dWlsZC1pZCB0aGF0IHdhcyBmb3VuZCBpbgorKyAgICAgb25lIG9mIHRoZSBkYXRhIHN0cnVjdHVy ZXMgd2l0aGluIHRoaXMgY2xhc3MuICBMb29rdXAgdGhlCisrICAgICBjb3JyZXNwb25kaW5nIGZp bGVuYW1lIGluIG1fYnVpbGRfaWRfdG9fZmlsZW5hbWVfbWFwIGFuZCByZXR1cm4gYSBwYWlyCisr ICAgICBjb250YWluaW5nIHRoZSBidWlsZC1pZCBhbmQgZmlsZW5hbWUuCisrCisrICAgICBJZiBu byBjb3JyZXNwb25kaW5nIGZpbGVuYW1lIGlzIGZvdW5kIGluIG1fYnVpbGRfaWRfdG9fZmlsZW5h bWVfbWFwCisrICAgICB0aGVuIHRoZSByZXR1cm5lZCBwYWlyIGNvbnRhaW5zIEJVSUxEX0lEIGFu ZCBhbiBlbXB0eSBzdHJpbmcuCisrCisrICAgICBJZiBCVUlMRF9JRCBpcyBudWxscHRyIHRoZW4g dGhlIHJldHVybmVkIHBhaXIgY29udGFpbnMgbnVsbHB0ciBhbmQgYW4KKysgICAgIGVtcHR5IHN0 cmluZy4gICovCisrCisrICBzdHJ1Y3QgY29yZV90YXJnZXRfbWFwcGVkX2ZpbGVfaW5mbworKyAg bWFrZV9yZXN1bHQgKGNvbnN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQpCisrICB7CisrICAgIGlm IChidWlsZF9pZCAhPSBudWxscHRyKQorKyAgICAgIHsKKysgICAgICBhdXRvIGl0ID0gbV9idWls ZF9pZF90b19maWxlbmFtZV9tYXAuZmluZCAoYnVpbGRfaWQpOworKyAgICAgIGlmIChpdCAhPSBt X2J1aWxkX2lkX3RvX2ZpbGVuYW1lX21hcC5lbmQgKCkpCisrCXJldHVybiB7IGJ1aWxkX2lkLCBp dC0+c2Vjb25kIH07CisrICAgIH0KKysKKysgICAgcmV0dXJuIHsgYnVpbGRfaWQsIHt9IH07Cisr ICB9CisrCisrICAvKiBBIHR5cGUgdGhhdCBtYXBzIGEgc3RyaW5nIHRvIGEgYnVpbGQtaWQuICAq LworKyAgdXNpbmcgc3RyaW5nX3RvX2J1aWxkX2lkX21hcAorKyAgICA9IHN0ZDo6dW5vcmRlcmVk X21hcDxzdGQ6OnN0cmluZywgY29uc3QgYmZkX2J1aWxkX2lkICo+OworKworKyAgLyogQSB0eXBl IHRoYXQgbWFwcyBhIGJ1aWxkLWlkIHRvIGEgc3RyaW5nLiAgKi8KKysgIHVzaW5nIGJ1aWxkX2lk X3RvX3N0cmluZ19tYXAKKysgICAgPSBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgYmZkX2J1aWxk X2lkICosIHN0ZDo6c3RyaW5nPjsKKysKKysgIC8qIFdoZW4gbG9hZGluZyBhIGNvcmUgZmlsZSwg dGhlIGJ1aWxkLWlkcyBhcmUgZXh0cmFjdGVkIGJhc2VkIG9uIHRoZQorKyAgICAgZmlsZSBiYWNr ZWQgbWFwcGluZ3MuICBUaGlzIG1hcCBhc3NvY2lhdGVzIHRoZSBuYW1lIG9mIGEgZmlsZSB0aGF0 IHdhcworKyAgICAgbWFwcGVkIGludG8gdGhlIGNvcmUgZmlsZSB3aXRoIHRoZSBjb3JyZXNwb25k aW5nIGJ1aWxkLWlkLiAgVGhlCisrICAgICBidWlsZC1pZCBwb2ludGVycyBpbiB0aGlzIG1hcCB3 aWxsIG5ldmVyIGJlIG51bGxwdHIgYXMgd2Ugb25seSByZWNvcmQKKysgICAgIGZpbGVzIGlmIHRo ZXkgaGF2ZSBhIGJ1aWxkLWlkLiAgKi8KKysKKysgIHN0cmluZ190b19idWlsZF9pZF9tYXAgbV9m aWxlbmFtZV90b19idWlsZF9pZF9tYXA7CisrCisrICAvKiBNYXAgYSBidWlsZC1pZCBwb2ludGVy IGJhY2sgdG8gdGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCB3YXMgbWFwcGVkCisrICAgICBpbnRv IHRoZSBpbmZlcmlvcidzIGFkZHJlc3Mgc3BhY2UuICBJZiB3ZSBsb29rdXAgYSBtYXRjaGluZyBi dWlsZC1pZAorKyAgICAgdXNpbmcgZWl0aGVyIGEgc29uYW1lIG9yIGFuIGFkZHJlc3MgdGhlbiB0 aGlzIG1hcCBhbGxvd3MgdXMgdG8gYWxzbworKyAgICAgcHJvdmlkZSBhIGZ1bGwgcGF0aCB0byBh IGZpbGUgd2l0aCBhIG1hdGNoaW5nIGJ1aWxkLWlkLiAgKi8KKysKKysgIGJ1aWxkX2lkX3RvX3N0 cmluZ19tYXAgbV9idWlsZF9pZF90b19maWxlbmFtZV9tYXA7CisrCisrICAvKiBJZiB0aGUgZmls ZSB0aGF0IHdhcyBtYXBwZWQgaW50byB0aGUgY29yZSBmaWxlIHdhcyBhIHNoYXJlZCBsaWJyYXJ5 CisrICAgICB0aGVuIGl0IG1pZ2h0IGhhdmUgYSBEVF9TT05BTUUgdGFnIGluIGl0cyAuZHluYW1p YyBzZWN0aW9uLCB0aGlzIHRhZworKyAgICAgY29udGFpbnMgdGhlIG5hbWUgb2YgYSBzaGFyZWQg b2JqZWN0LiAgV2hlbiBvcGVuaW5nIGEgc2hhcmVkIGxpYnJhcnksCisrICAgICBpZiBpdCdzIGJh c2VuYW1lIGFwcGVhcnMgaW4gdGhpcyBtYXAgdGhlbiB3ZSBjYW4gdXNlIHRoZSBjb3JyZXNwb25k aW5nCisrICAgICBidWlsZC1pZC4KKysKKysgICAgIEluIHRoZSByYXJlIGNhc2UgdGhhdCB0d28g ZGlmZmVyZW50IGZpbGVzIGhhdmUgdGhlIHNhbWUgRFRfU09OQU1FCisrICAgICB2YWx1ZSB0aGVu IHRoZSBidWlsZC1pZCBwb2ludGVyIGluIHRoaXMgbWFwIHdpbGwgYmUgbnVsbHB0ciwgdGhpcwor KyAgICAgaW5kaWNhdGVzIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gZmluZCBhIGJ1aWxkLWlk IGJhc2VkIG9uIHRoZSBnaXZlbgorKyAgICAgRFRfU09OQU1FIHZhbHVlLiAgKi8KKysKKysgIHN0 cmluZ190b19idWlsZF9pZF9tYXAgbV9zb25hbWVfdG9fYnVpbGRfaWRfbWFwOworKworKyAgLyog VGhpcyB2ZWN0b3IgbWFwcyBtZW1vcnkgcmFuZ2VzIG9udG8gYW4gYXNzb2NpYXRlZCBidWlsZC1p ZC4gIFRoZQorKyAgICAgcmFuZ2VzIGFyZSB0aG9zZSBvZiB0aGUgZmlsZXMgbWFwcGVkIGludG8g dGhlIGNvcmUgZmlsZS4KKysKKysgICAgIEVudHJpZXMgaW4gdGhpcyB2ZWN0b3IgbXVzdCBub3Qg b3ZlcmxhcCwgYW5kIGFyZSBzb3J0ZWQgYmUgaW5jcmVhc2luZworKyAgICAgbWVtb3J5IGFkZHJl c3MuICBXaXRoaW4gZWFjaCBlbnRyeSB0aGUgYnVpbGQtaWQgcG9pbnRlciB3aWxsIG5vdCBiZQor KyAgICAgbnVsbHB0ci4KKysKKysgICAgIFdoaWxlIGJ1aWxkaW5nIHRoaXMgdmVjdG9yIHRoZSBl bnRyaWVzIGFyZSBub3Qgc29ydGVkLCB0aGV5IGFyZQorKyAgICAgc29ydGVkIG9uY2UgYWZ0ZXIg dGhlIHRhYmxlIGhhcyBmaW5pc2hlZCBiZWluZyBidWlsdC4gICovCisrCisrICBzdGQ6OnZlY3Rv cjxtZW1fcmFuZ2VfYW5kX2J1aWxkX2lkPiBtX2FkZHJlc3NfdG9fYnVpbGRfaWRfbGlzdDsKKysK KysgIC8qIEZhbHNlIGlmIGFkZHJlc3NfdG9fYnVpbGRfaWRfbGlzdCBpcyB1bnNvcnRlZCwgb3Ro ZXJ3aXNlIHRydWUuICAqLworKworKyAgYm9vbCBtX2FkZHJlc3NfdG9fYnVpbGRfaWRfbGlzdF9z b3J0ZWQgPSBmYWxzZTsKKyt9OworKworIC8qIFRoZSBjb3JlIGZpbGUgdGFyZ2V0LiAgKi8KKyAK KyBzdGF0aWMgY29uc3QgdGFyZ2V0X2luZm8gY29yZV90YXJnZXRfaW5mbyA9IHsKK0BAIC0xMzQs NiArMjQ3LDM0IEBAIGNsYXNzIGNvcmVfdGFyZ2V0IGZpbmFsIDogcHVibGljIHByb2Nlc3Nfc3Ry YXR1bV90YXJnZXQKKyAgIC8qIFNlZSBkZWZpbml0aW9uLiAgKi8KKyAgIHZvaWQgaW5mb19wcm9j X21hcHBpbmdzIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCk7CisgCisrICBzdGQ6Om9wdGlvbmFs IDxjb3JlX3RhcmdldF9tYXBwZWRfZmlsZV9pbmZvPgorKyAgbG9va3VwX21hcHBlZF9maWxlX2lu Zm8gKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorKwkJCSAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q09S RV9BRERSPiAmYWRkcikKKysgIHsKKysgICAgcmV0dXJuIG1fbWFwcGVkX2ZpbGVfaW5mby5sb29r dXAgKGZpbGVuYW1lLCBhZGRyKTsKKysgIH0KKysKKysgIC8qIFJldHVybiBhIHN0cmluZyBjb250 YWluaW5nIHRoZSBleHBlY3RlZCBleGVjdXRhYmxlIGZpbGVuYW1lIG9idGFpbmVkCisrICAgICBm cm9tIHRoZSBtYXBwZWQgZmlsZSBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGNvcmUgZmlsZS4gIFRo ZSBmaWxlbmFtZQorKyAgICAgcmV0dXJuZWQgd2lsbCBiZSBmb3IgdGhlIG1hcHBlZCBmaWxlIHdo b3NlIEVMRiBoZWFkZXJzIGFyZSBtYXBwZWQgYXQKKysgICAgIHRoZSBsb3dlc3QgYWRkcmVzcyAo aS5lLiB3aGljaCBHREIgZW5jb3VudGVycyBmaXJzdCkuCisrCisrICAgICBJZiBubyBzdWl0YWJs ZSBmaWxlbmFtZSBjYW4gYmUgZm91bmQgdGhlbiB0aGUgcmV0dXJuZWQgc3RyaW5nIHdpbGwgYmUK KysgICAgIGVtcHR5LgorKworKyAgICAgSWYgdGhlcmUgYXJlIG5vIGJ1aWxkLWlkcyBlbWJlZGRl ZCBpbnRvIHRoZSBjb3JlIGZpbGUgdGhlbiB0aGUKKysgICAgIHJldHVybmVkIHN0cmluZyB3aWxs IGJlIGVtcHR5LgorKworKyAgICAgSWYgYSBub24tZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIHRo ZW4gdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlCisrICAgICBuYW1lZCBmaWxlIGV4aXN0 cyBvbiBkaXNrLCBvciBpZiBpdCBkb2VzIGV4aXN0IG9uIGRpc2ssIHRoZW4gdGhlCisrICAgICBv bi1kaXNrIGZpbGUgbWlnaHQgaGF2ZSBhIGRpZmZlcmVudCBidWlsZC1pZCB0byB0aGUgZGVzaXJl ZAorKyAgICAgYnVpbGQtaWQuICAqLworKyAgY29uc3Qgc3RkOjpzdHJpbmcgJgorKyAgZXhwZWN0 ZWRfZXhlY19maWxlbmFtZSAoKSBjb25zdAorKyAgeworKyAgICByZXR1cm4gbV9leHBlY3RlZF9l eGVjX2ZpbGVuYW1lOworKyAgfQorKworIHByaXZhdGU6IC8qIHBlci1jb3JlIGRhdGEgKi8KKyAK KyAgIC8qIEdldCByaWQgb2YgdGhlIGNvcmUgaW5mZXJpb3IuICAqLworQEAgLTE1NiwxOSArMjk3 LDIzIEBAIGNsYXNzIGNvcmVfdGFyZ2V0IGZpbmFsIDogcHVibGljIHByb2Nlc3Nfc3RyYXR1bV90 YXJnZXQKKyAgICAgIHN0aWxsIGJlIHVzZWZ1bC4gICovCisgICBzdGQ6OnZlY3RvcjxtZW1fcmFu Z2U+IG1fY29yZV91bmF2YWlsYWJsZV9tYXBwaW5nczsKKyAKKy0gIC8qIEJ1aWxkIG1fY29yZV9m aWxlX21hcHBpbmdzLiAgQ2FsbGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yLiAgKi8KKy0gIHZvaWQg YnVpbGRfZmlsZV9tYXBwaW5ncyAoKTsKKysgIC8qIERhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMg aW5mb3JtYXRpb24gbWFwcGluZyBmaWxlbmFtZXMgYW5kIGFkZHJlc3MKKysgICAgIHJhbmdlcyB0 byB0aGUgY29ycmVzcG9uZGluZyBidWlsZC1pZHMgYXMgd2VsbCBhcyB0aGUgcmV2ZXJzZSBidWls ZC1pZAorKyAgICAgdG8gZmlsZW5hbWUgbWFwcGluZy4gICovCisrICBtYXBwZWRfZmlsZV9pbmZv IG1fbWFwcGVkX2ZpbGVfaW5mbzsKKyAKKy0gIC8qIEhlbHBlciBtZXRob2QgZm9yIHhmZXJfcGFy dGlhbC4gICovCistICBlbnVtIHRhcmdldF94ZmVyX3N0YXR1cyB4ZmVyX21lbW9yeV92aWFfbWFw cGluZ3MgKGdkYl9ieXRlICpyZWFkYnVmLAorLQkJCQkJCSAgICBjb25zdCBnZGJfYnl0ZSAqd3Jp dGVidWYsCistCQkJCQkJICAgIFVMT05HRVNUIG9mZnNldCwKKy0JCQkJCQkgICAgVUxPTkdFU1Qg bGVuLAorLQkJCQkJCSAgICBVTE9OR0VTVCAqeGZlcmVkX2xlbik7CisrICAvKiBCdWlsZCBtX2Nv cmVfZmlsZV9tYXBwaW5ncyBhbmQgbV9tYXBwZWRfZmlsZV9pbmZvLiAgQ2FsbGVkIGZyb20gdGhl CisrICAgICBjb25zdHJ1Y3Rvci4gICovCisrICB2b2lkIGJ1aWxkX2ZpbGVfbWFwcGluZ3MgKCk7 CisgCisgICAvKiBGSVhNRToga2V0dGVuaXMvMjAwMzEwMjM6IEV2ZW50dWFsbHkgdGhpcyBmaWVs ZCBzaG91bGQKKyAgICAgIGRpc2FwcGVhci4gICovCisgICBzdHJ1Y3QgZ2RiYXJjaCAqbV9jb3Jl X2dkYmFyY2ggPSBOVUxMOworKworKyAgLyogSWYgbm90IGVtcHR5IHRoZW4gdGhpcyBjb250YWlu cyB0aGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSBkaXNjb3ZlcmVkCisrICAgICB3aGVuIHByb2Nl c3NpbmcgdGhlIG1lbW9yeS1tYXBwZWQgZmlsZSBpbmZvcm1hdGlvbi4gIFRoaXMgd2lsbCBvbmx5 CisrICAgICBiZSBzZXQgaWYgd2UgZmluZCBhIG1hcHBlZCB3aXRoIGEgc3VpdGFibGUgYnVpbGQt aWQuICAqLworKyAgc3RkOjpzdHJpbmcgbV9leHBlY3RlZF9leGVjX2ZpbGVuYW1lOworIH07Cisg CisgY29yZV90YXJnZXQ6OmNvcmVfdGFyZ2V0ICgpCitAQCAtMjE2LDkgKzM2MSw1MSBAQCBjb3Jl X3RhcmdldDo6Y29yZV90YXJnZXQgKCkKKyB2b2lkCisgY29yZV90YXJnZXQ6OmJ1aWxkX2ZpbGVf bWFwcGluZ3MgKCkKKyB7CisrICAvKiBUeXBlIGhvbGRpbmcgaW5mb3JtYXRpb24gYWJvdXQgYSBz aW5nbGUgZmlsZSBtYXBwZWQgaW50byB0aGUgaW5mZXJpb3IKKysgICAgIGF0IHRoZSBwb2ludCB3 aGVuIHRoZSBjb3JlIGZpbGUgd2FzIGNyZWF0ZWQuICBBc3NvY2lhdGVzIGEgYnVpbGQtaWQKKysg ICAgIHdpdGggdGhlIGxpc3Qgb2YgcmVnaW9ucyB0aGUgZmlsZSBpcyBtYXBwZWQgaW50by4gICov CisrICBzdHJ1Y3QgbWFwcGVkX2ZpbGUKKysgIHsKKysgICAgLyogVHlwZSBmb3IgYSByZWdpb24g b2YgYSBmaWxlIHRoYXQgd2FzIG1hcHBlZCBpbnRvIHRoZSBpbmZlcmlvciB3aGVuCisrICAgICAg IHRoZSBjb3JlIGZpbGUgd2FzIGdlbmVyYXRlZC4gICovCisrICAgIHN0cnVjdCByZWdpb24KKysg ICAgeworKyAgICAgIC8qIENvbnN0cnVjdG9yLiAgIFNlZSBtZW1iZXIgdmFyaWFibGVzIGZvciBh cmd1bWVudCBkZXNjcmlwdGlvbnMuICAqLworKyAgICAgIHJlZ2lvbiAoQ09SRV9BRERSIHN0YXJ0 XywgQ09SRV9BRERSIGVuZF8sIENPUkVfQUREUiBmaWxlX29mc18pCisrCTogc3RhcnQgKHN0YXJ0 XyksCisrCSAgZW5kIChlbmRfKSwKKysJICBmaWxlX29mcyAoZmlsZV9vZnNfKQorKyAgICAgIHsg LyogTm90aGluZy4gICovIH0KKysKKysgICAgICAvKiBUaGUgaW5mZXJpb3IgYWRkcmVzcyBmb3Ig dGhlIHN0YXJ0IG9mIHRoZSBtYXBwZWQgcmVnaW9uLiAgKi8KKysgICAgICBDT1JFX0FERFIgc3Rh cnQ7CisrCisrICAgICAgLyogVGhlIGluZmVyaW9yIGFkZHJlc3MgaW1tZWRpYXRlbHkgYWZ0ZXIg dGhlIG1hcHBlZCByZWdpb24uICAqLworKyAgICAgIENPUkVfQUREUiBlbmQ7CisrCisrICAgICAg LyogVGhlIG9mZnNldCB3aXRoaW4gdGhlIG1hcHBlZCBmaWxlIGZvciB0aGlzIGNvbnRlbnQuICAq LworKyAgICAgIENPUkVfQUREUiBmaWxlX29mczsKKysgICAgfTsKKysKKysgICAgLyogSWYgbm90 IG51bGxwdHIsIHRoZW4gdGhpcyBpcyB0aGUgYnVpbGQtaWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMK KysgICAgICAgZmlsZS4gICovCisrICAgIGNvbnN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQgPSBu dWxscHRyOworKworKyAgICAvKiBJZiB0cnVlIHRoZW4gd2UgaGF2ZSBzZWVuIG11bHRpcGxlIGRp ZmZlcmVudCBidWlsZC1pZHMgYXNzb2NpYXRlZAorKyAgICAgICB3aXRoIHRoZSBzYW1lIGZpbGVu YW1lLiAgVGhlIGJ1aWxkX2lkIGZpZWxkIHdpbGwgaGF2ZSBiZWVuIHNldCBiYWNrCisrICAgICAg IHRvIG51bGxwdHIsIGFuZCB3ZSBzaG91bGQgbm90IHNldCBidWlsZF9pZCBpbiBmdXR1cmUuICAq LworKyAgICBib29sIGlnbm9yZV9idWlsZF9pZF9wID0gZmFsc2U7CisrCisrICAgIC8qIEFsbCB0 aGUgbWFwcGVkIHJlZ2lvbnMgb2YgdGhpcyBmaWxlLiAgKi8KKysgICAgc3RkOjp2ZWN0b3I8cmVn aW9uPiByZWdpb25zOworKyAgfTsKKysKKyAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmlu Zywgc3RydWN0IGJmZCAqPiBiZmRfbWFwOworICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3Ry aW5nPiB1bmF2YWlsYWJsZV9wYXRoczsKKyAKKysgIC8qIEFsbCBmaWxlcyBtYXBwZWQgaW50byB0 aGUgY29yZSBmaWxlLiAgVGhlIGtleSBpcyB0aGUgZmlsZW5hbWUuICAqLworKyAgc3RkOjp1bm9y ZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBtYXBwZWRfZmlsZT4gbWFwcGVkX2ZpbGVzOworKworICAg LyogU2VlIGxpbnV4X3JlYWRfY29yZV9maWxlX21hcHBpbmdzKCkgaW4gbGludXgtdGRlcC5jIGZv ciBhbiBleGFtcGxlCisgICAgICByZWFkX2NvcmVfZmlsZV9tYXBwaW5ncyBtZXRob2QuICAqLwor ICAgZ2RiYXJjaF9yZWFkX2NvcmVfZmlsZV9tYXBwaW5ncyAobV9jb3JlX2dkYmFyY2gsCitAQCAt MjM5LDg3ICs0MjYsMjA2IEBAIGNvcmVfdGFyZ2V0OjpidWlsZF9maWxlX21hcHBpbmdzICgpCisg CSAgIHdlZWQgb3V0IG5vbi1maWxlLWJhY2tlZCBtYXBwaW5ncy4gICovCisgCWdkYl9hc3NlcnQg KGZpbGVuYW1lICE9IG51bGxwdHIpOworIAorLQlpZiAodW5hdmFpbGFibGVfcGF0aHMuZmluZCAo ZmlsZW5hbWUpICE9IHVuYXZhaWxhYmxlX3BhdGhzLmVuZCAoKSkKKy0JICB7CistCSAgICAvKiBX ZSBoYXZlIGFscmVhZHkgc2VlbiBzb21lIG1hcHBpbmcgZm9yIEZJTEVOQU1FIGJ1dCBmYWlsZWQg dG8KKy0JICAgICAgIGZpbmQvb3BlbiB0aGUgZmlsZS4gIFRoZXJlIGlzIG5vIHBvaW50IGluIHRy eWluZyB0aGUgc2FtZQorLQkgICAgICAgdGhpbmcgYWdhaW4gc28ganVzdCByZWNvcmQgdGhhdCB0 aGUgcmFuZ2UgW3N0YXJ0LCBlbmQpIGlzCistCSAgICAgICB1bmF2YWlsYWJsZS4gICovCistCSAg ICBtX2NvcmVfdW5hdmFpbGFibGVfbWFwcGluZ3MuZW1wbGFjZV9iYWNrIChzdGFydCwgZW5kIC0g c3RhcnQpOworLQkgICAgcmV0dXJuOworLQkgIH0KKy0KKy0Jc3RydWN0IGJmZCAqYmZkID0gYmZk X21hcFtmaWxlbmFtZV07CistCWlmIChiZmQgPT0gbnVsbHB0cikKKysJLyogQWRkIHRoaXMgbWFw cGVkIHJlZ2lvbiB0byB0aGUgZGF0YSBmb3IgRklMRU5BTUUuICAqLworKwltYXBwZWRfZmlsZSAm ZmlsZV9kYXRhID0gbWFwcGVkX2ZpbGVzW2ZpbGVuYW1lXTsKKysJZmlsZV9kYXRhLnJlZ2lvbnMu ZW1wbGFjZV9iYWNrIChzdGFydCwgZW5kLCBmaWxlX29mcyk7CisrCWlmIChidWlsZF9pZCAhPSBu dWxscHRyICYmICFmaWxlX2RhdGEuaWdub3JlX2J1aWxkX2lkX3ApCisgCSAgeworLQkgICAgLyog VXNlIGV4ZWNfZmlsZV9maW5kKCkgdG8gZG8gc3lzcm9vdCBleHBhbnNpb24uICBJdCdsbAorLQkg ICAgICAgYWxzbyBzdHJpcCB0aGUgcG90ZW50aWFsIHN5c3Jvb3QgInRhcmdldDoiIHByZWZpeC4g IElmCistCSAgICAgICB0aGVyZSBpcyBubyBzeXNyb290LCBhbiBlcXVpdmFsZW50IChwb3NzaWJs eSBtb3JlCistCSAgICAgICBjYW5vbmljYWwpIHBhdGhuYW1lIHdpbGwgYmUgcHJvdmlkZWQuICAq LworLQkgICAgZ2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8Y2hhcj4gZXhwYW5kZWRfZm5hbWUKKy0J ICAgICAgPSBleGVjX2ZpbGVfZmluZCAoZmlsZW5hbWUsIE5VTEwpOworLQorLQkgICAgaWYgKGV4 cGFuZGVkX2ZuYW1lID09IG51bGxwdHIgJiYgYnVpbGRfaWQgIT0gbnVsbHB0cikKKy0JICAgICAg ZGVidWdpbmZvZF9leGVjX3F1ZXJ5IChidWlsZF9pZC0+ZGF0YSwgYnVpbGRfaWQtPnNpemUsCist CQkJCSAgICAgZmlsZW5hbWUsICZleHBhbmRlZF9mbmFtZSk7CistCistCSAgICBpZiAoZXhwYW5k ZWRfZm5hbWUgPT0gbnVsbHB0cikKKysJICAgIGlmIChmaWxlX2RhdGEuYnVpbGRfaWQgPT0gbnVs bHB0cikKKysJICAgICAgZmlsZV9kYXRhLmJ1aWxkX2lkID0gYnVpbGRfaWQ7CisrCSAgICBlbHNl IGlmICghYnVpbGRfaWRfZXF1YWwgKGJ1aWxkX2lkLCBmaWxlX2RhdGEuYnVpbGRfaWQpKQorIAkg ICAgICB7CistCQltX2NvcmVfdW5hdmFpbGFibGVfbWFwcGluZ3MuZW1wbGFjZV9iYWNrIChzdGFy dCwgZW5kIC0gc3RhcnQpOworLQkJdW5hdmFpbGFibGVfcGF0aHMuaW5zZXJ0IChmaWxlbmFtZSk7 CistCQl3YXJuaW5nIChfKCJDYW4ndCBvcGVuIGZpbGUgJXMgZHVyaW5nIGZpbGUtYmFja2VkIG1h cHBpbmcgIgorLQkJCSAgICJub3RlIHByb2Nlc3NpbmciKSwKKy0JCQkgZmlsZW5hbWUpOworLQkJ cmV0dXJuOworKwkJd2FybmluZyAoXygiTXVsdGlwbGUgYnVpbGQtaWRzIGZvdW5kIGZvciAlcHMi KSwKKysJCQkgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLCBmaWxlbmFt ZSkpOworKwkJZmlsZV9kYXRhLmJ1aWxkX2lkID0gbnVsbHB0cjsKKysJCWZpbGVfZGF0YS5pZ25v cmVfYnVpbGRfaWRfcCA9IHRydWU7CisgCSAgICAgIH0KKysJICB9CisrICAgICAgfSk7CisgCist CSAgICBiZmQgPSBiZmRfb3BlbnIgKGV4cGFuZGVkX2ZuYW1lLmdldCAoKSwgImJpbmFyeSIpOwor KyAgLyogR2V0IHRoZSBidWlsZC1pZCBvZiB0aGUgY29yZSBmaWxlLiAgKi8KKysgIGNvbnN0IGJm ZF9idWlsZF9pZCAqY29yZV9idWlsZF9pZAorKyAgICA9IGJ1aWxkX2lkX2JmZF9nZXQgKGN1cnJl bnRfcHJvZ3JhbV9zcGFjZS0+Y29yZV9iZmQgKCkpOworIAorLQkgICAgaWYgKGJmZCA9PSBudWxs cHRyIHx8ICFiZmRfY2hlY2tfZm9ybWF0IChiZmQsIGJmZF9vYmplY3QpKQorLQkgICAgICB7Cist CQltX2NvcmVfdW5hdmFpbGFibGVfbWFwcGluZ3MuZW1wbGFjZV9iYWNrIChzdGFydCwgZW5kIC0g c3RhcnQpOworLQkJdW5hdmFpbGFibGVfcGF0aHMuaW5zZXJ0IChmaWxlbmFtZSk7CistCQl3YXJu aW5nIChfKCJDYW4ndCBvcGVuIGZpbGUgJXMgd2hpY2ggd2FzIGV4cGFuZGVkIHRvICVzICIKKysg IGZvciAoY29uc3QgYXV0byAmaXRlciA6IG1hcHBlZF9maWxlcykKKysgICAgeworKyAgICAgIGNv bnN0IHN0ZDo6c3RyaW5nICZmaWxlbmFtZSA9IGl0ZXIuZmlyc3Q7CisrICAgICAgY29uc3QgbWFw cGVkX2ZpbGUgJmZpbGVfZGF0YSA9IGl0ZXIuc2Vjb25kOworKworKyAgICAgIC8qIElmIHRoaXMg bWFwcGVkIGZpbGUgaGFzIHRoZSBzYW1lIGJ1aWxkLWlkIGFzIHdhcyBkaXNjb3ZlcmVkIGZvcgor KwkgdGhlIGNvcmUtZmlsZSBpdHNlbGYsIHRoZW4gd2UgYXNzdW1lIHRoaXMgaXMgdGhlIG1haW4K KysJIGV4ZWN1dGFibGUuICBSZWNvcmQgdGhlIGZpbGVuYW1lIGFzIHdlIGNhbiB1c2UgdGhpcyBs YXRlci4gICovCisrICAgICAgaWYgKGZpbGVfZGF0YS5idWlsZF9pZCAhPSBudWxscHRyCisrCSAg JiYgbV9leHBlY3RlZF9leGVjX2ZpbGVuYW1lLmVtcHR5ICgpCisrCSAgJiYgYnVpbGRfaWRfZXF1 YWwgKGZpbGVfZGF0YS5idWlsZF9pZCwgY29yZV9idWlsZF9pZCkpCisrCW1fZXhwZWN0ZWRfZXhl Y19maWxlbmFtZSA9IGZpbGVuYW1lOworKworKyAgICAgIC8qIFVzZSBleGVjX2ZpbGVfZmluZCgp IHRvIGRvIHN5c3Jvb3QgZXhwYW5zaW9uLiAgSXQnbGwKKysJIGFsc28gc3RyaXAgdGhlIHBvdGVu dGlhbCBzeXNyb290ICJ0YXJnZXQ6IiBwcmVmaXguICBJZgorKwkgdGhlcmUgaXMgbm8gc3lzcm9v dCwgYW4gZXF1aXZhbGVudCAocG9zc2libHkgbW9yZQorKwkgY2Fub25pY2FsKSBwYXRobmFtZSB3 aWxsIGJlIHByb3ZpZGVkLiAgKi8KKysgICAgICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFy PiBleHBhbmRlZF9mbmFtZQorKwk9IGV4ZWNfZmlsZV9maW5kIChmaWxlbmFtZS5jX3N0ciAoKSwg bnVsbHB0cik7CisrCisrICAgICAgYm9vbCBidWlsZF9pZF9taXNtYXRjaCA9IGZhbHNlOworKyAg ICAgIGlmIChleHBhbmRlZF9mbmFtZSAhPSBudWxscHRyICYmIGZpbGVfZGF0YS5idWlsZF9pZCAh PSBudWxscHRyKQorKwl7CisrCSAgLyogV2UgdGVtcG9yYXJpbHkgb3BlbiB0aGUgYmZkIGFzIGEg c3RydWN0dXJlZCB0YXJnZXQsIHRoaXMKKysJICAgICBhbGxvd3MgdXMgdG8gcmVhZCB0aGUgYnVp bGQtaWQgZnJvbSB0aGUgYmZkIGlmIHRoZXJlIGlzIG9uZS4KKysJICAgICBGb3IgdGhpcyB0YXNr IGl0J3MgT0sgaWYgd2UgcmV1c2UgYW4gYWxyZWFkeSBvcGVuIGJmZCBvYmplY3QsCisrCSAgICAg c28gd2UgbWFrZSB0aGlzIGNhbGwgdGhyb3VnaCBHREIncyBiZmQgY2FjaGUuICBPbmNlIHdlJ3Zl CisrCSAgICAgY2hlY2tlZCB0aGUgYnVpbGQtaWQgKGlmIHRoZXJlIGlzIG9uZSkgd2UnbGwgZHJv cCB0aGlzCisrCSAgICAgcmVmZXJlbmNlIGFuZCByZS1vcGVuIHRoZSBiZmQgdXNpbmcgdGhlICJi aW5hcnkiIHRhcmdldC4gICovCisrCSAgZ2RiX2JmZF9yZWZfcHRyIHRtcF9iZmQKKysJICAgID0g Z2RiX2JmZF9vcGVuIChleHBhbmRlZF9mbmFtZS5nZXQgKCksIGdudXRhcmdldCk7CisrCisrCSAg aWYgKHRtcF9iZmQgIT0gbnVsbHB0cgorKwkgICAgICAmJiBiZmRfY2hlY2tfZm9ybWF0ICh0bXBf YmZkLmdldCAoKSwgYmZkX29iamVjdCkKKysJICAgICAgJiYgYnVpbGRfaWRfYmZkX2dldCAodG1w X2JmZC5nZXQgKCkpICE9IG51bGxwdHIpCisrCSAgICB7CisrCSAgICAgIC8qIFRoZSBuZXdseSBv cGVuZWQgVE1QX0JGRCBoYXMgYSBidWlsZC1pZCwgYW5kIHRoaXMgbWFwcGVkCisrCQkgZmlsZSBo YXMgYSBidWlsZC1pZCBleHRyYWN0ZWQgZnJvbSB0aGUgY29yZS1maWxlLiAgQ2hlY2sKKysJCSB0 aGUgYnVpbGQtaWQncyBtYXRjaCwgYW5kIGlmIG5vdCwgcmVqZWN0IFRNUF9CRkQuICAqLworKwkg ICAgICBjb25zdCBzdHJ1Y3QgYmZkX2J1aWxkX2lkICpmb3VuZAorKwkJPSBidWlsZF9pZF9iZmRf Z2V0ICh0bXBfYmZkLmdldCAoKSk7CisrCSAgICAgIGlmICghYnVpbGRfaWRfZXF1YWwgKGZvdW5k LCBmaWxlX2RhdGEuYnVpbGRfaWQpKQorKwkJYnVpbGRfaWRfbWlzbWF0Y2ggPSB0cnVlOworKwkg ICAgfQorKwl9CisrCisrICAgICAgZ2RiX2JmZF9yZWZfcHRyIGFiZmQ7CisrICAgICAgaWYgKGV4 cGFuZGVkX2ZuYW1lICE9IG51bGxwdHIgJiYgIWJ1aWxkX2lkX21pc21hdGNoKQorKwl7CisrCSAg c3RydWN0IGJmZCAqYiA9IGJmZF9vcGVuciAoZXhwYW5kZWRfZm5hbWUuZ2V0ICgpLCAiYmluYXJ5 Iik7CisrCSAgYWJmZCA9IGdkYl9iZmRfcmVmX3B0cjo6bmV3X3JlZmVyZW5jZSAoYik7CisrCX0K KysKKysgICAgICBpZiAoKGV4cGFuZGVkX2ZuYW1lID09IG51bGxwdHIKKysJICAgfHwgYWJmZCA9 PSBudWxscHRyCisrCSAgIHx8ICFiZmRfY2hlY2tfZm9ybWF0IChhYmZkLmdldCAoKSwgYmZkX29i amVjdCkpCisrCSAgJiYgZmlsZV9kYXRhLmJ1aWxkX2lkICE9IG51bGxwdHIpCisrCXsKKysJICBh YmZkID0gZmluZF9vYmpmaWxlX2J5X2J1aWxkX2lkIChjdXJyZW50X3Byb2dyYW1fc3BhY2UsCisr CQkJCQkgICBmaWxlX2RhdGEuYnVpbGRfaWQsCisrCQkJCQkgICBmaWxlbmFtZS5jX3N0ciAoKSk7 CisrCisrCSAgaWYgKGFiZmQgIT0gbnVsbHB0cikKKysJICAgIHsKKysJICAgICAgLyogVGhlIGZp bmRfb2JqZmlsZV9ieV9idWlsZF9pZCB3aWxsIGhhdmUgb3BlbmVkIEFCRkQgdXNpbmcKKysJCSB0 aGUgR05VVEFSR0VUIGdsb2JhbCBiZmQgdHlwZSwgaG93ZXZlciwgd2UgbmVlZCB0aGUgYmZkCisr CQkgb3BlbmVkIGFzIHRoZSBiaW5hcnkgdHlwZSAoc2VlIHRoZSBmdW5jdGlvbidzIGhlYWRlcgor KwkJIGNvbW1lbnQpLCBzbyBub3cgd2UgcmVvcGVuIEFCRkQgd2l0aCB0aGUgZGVzaXJlZCBiaW5h cnkKKysJCSB0eXBlLiAgKi8KKysJICAgICAgZXhwYW5kZWRfZm5hbWUKKysJCT0gbWFrZV91bmlx dWVfeHN0cmR1cCAoYmZkX2dldF9maWxlbmFtZSAoYWJmZC5nZXQgKCkpKTsKKysJICAgICAgc3Ry dWN0IGJmZCAqYiA9IGJmZF9vcGVuciAoZXhwYW5kZWRfZm5hbWUuZ2V0ICgpLCAiYmluYXJ5Iik7 CisrCSAgICAgIGdkYl9hc3NlcnQgKGIgIT0gbnVsbHB0cik7CisrCSAgICAgIGFiZmQgPSBnZGJf YmZkX3JlZl9wdHI6Om5ld19yZWZlcmVuY2UgKGIpOworKwkgICAgfQorKwl9CisrCisrICAgICAg c3RkOjp2ZWN0b3I8bWVtX3JhbmdlPiByYW5nZXM7CisrICAgICAgZm9yIChjb25zdCBtYXBwZWRf ZmlsZTo6cmVnaW9uICZyZWdpb24gOiBmaWxlX2RhdGEucmVnaW9ucykKKysJcmFuZ2VzLmVtcGxh Y2VfYmFjayAocmVnaW9uLnN0YXJ0LCByZWdpb24uZW5kIC0gcmVnaW9uLnN0YXJ0KTsKKysKKysg ICAgICBpZiAoZXhwYW5kZWRfZm5hbWUgPT0gbnVsbHB0cgorKwkgIHx8IGFiZmQgPT0gbnVsbHB0 cgorKwkgIHx8ICFiZmRfY2hlY2tfZm9ybWF0IChhYmZkLmdldCAoKSwgYmZkX29iamVjdCkpCisr CXsKKysJICAvKiBJZiBBQkZEIHdhcyBvcGVuZWQsIGJ1dCB0aGUgd3JvbmcgZm9ybWF0LCBjbG9z ZSBpdCBub3cuICAqLworKwkgIGFiZmQgPSBudWxscHRyOworKworKwkgIC8qIFJlY29yZCBhbGwg cmVnaW9ucyBmb3IgdGhpcyBmaWxlIGFzIHVuYXZhaWxhYmxlLiAgKi8KKysJICBmb3IgKGNvbnN0 IG1hcHBlZF9maWxlOjpyZWdpb24gJnJlZ2lvbiA6IGZpbGVfZGF0YS5yZWdpb25zKQorKwkgICAg bV9jb3JlX3VuYXZhaWxhYmxlX21hcHBpbmdzLmVtcGxhY2VfYmFjayAocmVnaW9uLnN0YXJ0LAor KwkJCQkJCSAgICAgIHJlZ2lvbi5lbmQKKysJCQkJCQkgICAgICAtIHJlZ2lvbi5zdGFydCk7Cisr CisrCSAgLyogQW5kIGdpdmUgdGhlIHVzZXIgYW4gYXBwcm9wcmlhdGUgd2FybmluZy4gICovCisr CSAgaWYgKGJ1aWxkX2lkX21pc21hdGNoKQorKwkgICAgeworKwkgICAgICBpZiAoZXhwYW5kZWRf Zm5hbWUgPT0gbnVsbHB0cgorKwkJICB8fCBmaWxlbmFtZSA9PSBleHBhbmRlZF9mbmFtZS5nZXQg KCkpCisrCQl3YXJuaW5nIChfKCJGaWxlICVwcyBkb2Vzbid0IG1hdGNoIGJ1aWxkLWlkIGZyb20g Y29yZS1maWxlICIKKysJCQkgICAiZHVyaW5nIGZpbGUtYmFja2VkIG1hcHBpbmcgcHJvY2Vzc2lu ZyIpLAorKwkJCSBzdHlsZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5bGUgKCksCisrCQkJ CQlmaWxlbmFtZS5jX3N0ciAoKSkpOworKwkgICAgICBlbHNlCisrCQl3YXJuaW5nIChfKCJGaWxl ICVwcyB3aGljaCB3YXMgZXhwYW5kZWQgdG8gJXBzLCBkb2Vzbid0IG1hdGNoICIKKysJCQkgICAi YnVpbGQtaWQgZnJvbSBjb3JlLWZpbGUgZHVyaW5nIGZpbGUtYmFja2VkICIKKysJCQkgICAibWFw cGluZyBwcm9jZXNzaW5nIiksCisrCQkJIHN0eWxlZF9zdHJpbmcgKGZpbGVfbmFtZV9zdHlsZS5z dHlsZSAoKSwKKysJCQkJCWZpbGVuYW1lLmNfc3RyICgpKSwKKysJCQkgc3R5bGVkX3N0cmluZyAo ZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLAorKwkJCQkJZXhwYW5kZWRfZm5hbWUuZ2V0ICgpKSk7 CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoZXhwYW5kZWRfZm5hbWUg PT0gbnVsbHB0cgorKwkJICB8fCBmaWxlbmFtZSA9PSBleHBhbmRlZF9mbmFtZS5nZXQgKCkpCisr CQl3YXJuaW5nIChfKCJDYW4ndCBvcGVuIGZpbGUgJXBzIGR1cmluZyBmaWxlLWJhY2tlZCBtYXBw aW5nICIKKysJCQkgICAibm90ZSBwcm9jZXNzaW5nIiksCisrCQkJIHN0eWxlZF9zdHJpbmcgKGZp bGVfbmFtZV9zdHlsZS5zdHlsZSAoKSwKKysJCQkJCWZpbGVuYW1lLmNfc3RyICgpKSk7CisrCSAg ICAgIGVsc2UKKysJCXdhcm5pbmcgKF8oIkNhbid0IG9wZW4gZmlsZSAlcHMgd2hpY2ggd2FzIGV4 cGFuZGVkIHRvICVwcyAiCisgCQkJICAgImR1cmluZyBmaWxlLWJhY2tlZCBtYXBwaW5nIG5vdGUg cHJvY2Vzc2luZyIpLAorLQkJCSBmaWxlbmFtZSwgZXhwYW5kZWRfZm5hbWUuZ2V0ICgpKTsKKysJ CQkgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLAorKwkJCQkJZmlsZW5h bWUuY19zdHIgKCkpLAorKwkJCSBzdHlsZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5bGUg KCksCisrCQkJCQlleHBhbmRlZF9mbmFtZS5nZXQgKCkpKTsKKysJICAgIH0KKysJfQorKyAgICAg IGVsc2UKKysJeworKwkgIC8qIEVuc3VyZSB0aGF0IHRoZSBiZmQgd2lsbCBiZSBjbG9zZWQgd2hl biBjb3JlX2JmZCBpcyBjbG9zZWQuCisrCSAgICAgVGhpcyBjYW4gYmUgY2hlY2tlZCBiZWZvcmUv YWZ0ZXIgYSBjb3JlIGZpbGUgZGV0YWNoIHZpYSAibWFpbnQKKysJICAgICBpbmZvIGJmZHMiLiAg Ki8KKysJICBnZGJfYmZkX3JlY29yZF9pbmNsdXNpb24gKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+ Y29yZV9iZmQgKCksCisrCQkJCSAgICBhYmZkLmdldCAoKSk7CisrCisrCSAgLyogQ3JlYXRlIHNl Y3Rpb25zIGZvciBlYWNoIG1hcHBlZCByZWdpb24uICAqLworKwkgIGZvciAoY29uc3QgbWFwcGVk X2ZpbGU6OnJlZ2lvbiAmcmVnaW9uIDogZmlsZV9kYXRhLnJlZ2lvbnMpCisrCSAgICB7CisrCSAg ICAgIC8qIE1ha2UgbmV3IEJGRCBzZWN0aW9uLiAgQWxsIHNlY3Rpb25zIGhhdmUgdGhlIHNhbWUg bmFtZSwKKysJCSB3aGljaCBpcyBwZXJtaXR0ZWQgYnkgYmZkX21ha2Vfc2VjdGlvbl9hbnl3YXko KS4gICovCisrCSAgICAgIGFzZWN0aW9uICpzZWMgPSBiZmRfbWFrZV9zZWN0aW9uX2FueXdheSAo YWJmZC5nZXQgKCksICJsb2FkIik7CisrCSAgICAgIGlmIChzZWMgPT0gbnVsbHB0cikKKysJCWVy cm9yIChfKCJDYW4ndCBtYWtlIHNlY3Rpb24iKSk7CisrCSAgICAgIHNlYy0+ZmlsZXBvcyA9IHJl Z2lvbi5maWxlX29mczsKKysJICAgICAgYmZkX3NldF9zZWN0aW9uX2ZsYWdzIChzZWMsIFNFQ19S RUFET05MWSB8IFNFQ19IQVNfQ09OVEVOVFMpOworKwkgICAgICBiZmRfc2V0X3NlY3Rpb25fc2l6 ZSAoc2VjLCByZWdpb24uZW5kIC0gcmVnaW9uLnN0YXJ0KTsKKysJICAgICAgYmZkX3NldF9zZWN0 aW9uX3ZtYSAoc2VjLCByZWdpb24uc3RhcnQpOworKwkgICAgICBiZmRfc2V0X3NlY3Rpb25fbG1h IChzZWMsIHJlZ2lvbi5zdGFydCk7CisrCSAgICAgIGJmZF9zZXRfc2VjdGlvbl9hbGlnbm1lbnQg KHNlYywgMik7CisrCisrCSAgICAgIC8qIFNldCB0YXJnZXRfc2VjdGlvbiBmaWVsZHMuICAqLwor KwkgICAgICBtX2NvcmVfZmlsZV9tYXBwaW5ncy5lbXBsYWNlX2JhY2sgKHJlZ2lvbi5zdGFydCwg cmVnaW9uLmVuZCwgc2VjKTsKKysJICAgIH0KKysJfQorIAorLQkJaWYgKGJmZCAhPSBudWxscHRy KQorLQkJICBiZmRfY2xvc2UgKGJmZCk7CistCQlyZXR1cm47CistCSAgICAgIH0KKy0JICAgIC8q IEVuc3VyZSB0aGF0IHRoZSBiZmQgd2lsbCBiZSBjbG9zZWQgd2hlbiBjb3JlX2JmZCBpcyBjbG9z ZWQuIAorLQkgICAgICAgVGhpcyBjYW4gYmUgY2hlY2tlZCBiZWZvcmUvYWZ0ZXIgYSBjb3JlIGZp bGUgZGV0YWNoIHZpYQorLQkgICAgICAgIm1haW50IGluZm8gYmZkcyIuICAqLworLQkgICAgZ2Ri X2JmZF9yZWNvcmRfaW5jbHVzaW9uIChjdXJyZW50X3Byb2dyYW1fc3BhY2UtPmNvcmVfYmZkICgp LCBiZmQpOworLQkgICAgYmZkX21hcFtmaWxlbmFtZV0gPSBiZmQ7CistCSAgfQorKyAgICAgIC8q IElmIHRoaXMgaXMgYSBiZmQgd2l0aCBhIGJ1aWxkLWlkIHRoZW4gcmVjb3JkIHRoZSBmaWxlbmFt ZSwKKysJIG9wdGlvbmFsIHNvbmFtZSAoRFRfU09OQU1FIC5keW5hbWljIGF0dHJpYnV0ZSksIGFu ZCB0aGUgcmFuZ2Ugb2YKKysJIGFkZHJlc3NlcyBhdCB3aGljaCB0aGlzIGJmZCBpcyBtYXBwZWQu ICBUaGlzIGluZm9ybWF0aW9uIGNhbiBiZQorKwkgdXNlZCB0byBwZXJmb3JtIGJ1aWxkLWlkIGNo ZWNraW5nIHdoZW4gbG9hZGluZyB0aGUgc2hhcmVkCisrCSBsaWJyYXJpZXMuICAqLworKyAgICAg IGlmIChmaWxlX2RhdGEuYnVpbGRfaWQgIT0gbnVsbHB0cikKKysJeworKwkgIG5vcm1hbGl6ZV9t ZW1fcmFuZ2VzICgmcmFuZ2VzKTsKKyAKKy0JLyogTWFrZSBuZXcgQkZEIHNlY3Rpb24uICBBbGwg c2VjdGlvbnMgaGF2ZSB0aGUgc2FtZSBuYW1lLAorLQkgICB3aGljaCBpcyBwZXJtaXR0ZWQgYnkg YmZkX21ha2Vfc2VjdGlvbl9hbnl3YXkoKS4gICovCistCWFzZWN0aW9uICpzZWMgPSBiZmRfbWFr ZV9zZWN0aW9uX2FueXdheSAoYmZkLCAibG9hZCIpOworLQlpZiAoc2VjID09IG51bGxwdHIpCist CSAgZXJyb3IgKF8oIkNhbid0IG1ha2Ugc2VjdGlvbiIpKTsKKy0Jc2VjLT5maWxlcG9zID0gZmls ZV9vZnM7CistCWJmZF9zZXRfc2VjdGlvbl9mbGFncyAoc2VjLCBTRUNfUkVBRE9OTFkgfCBTRUNf SEFTX0NPTlRFTlRTKTsKKy0JYmZkX3NldF9zZWN0aW9uX3NpemUgKHNlYywgZW5kIC0gc3RhcnQp OworLQliZmRfc2V0X3NlY3Rpb25fdm1hIChzZWMsIHN0YXJ0KTsKKy0JYmZkX3NldF9zZWN0aW9u X2xtYSAoc2VjLCBzdGFydCk7CistCWJmZF9zZXRfc2VjdGlvbl9hbGlnbm1lbnQgKHNlYywgMik7 CistCistCS8qIFNldCB0YXJnZXRfc2VjdGlvbiBmaWVsZHMuICAqLworLQltX2NvcmVfZmlsZV9t YXBwaW5ncy5lbXBsYWNlX2JhY2sgKHN0YXJ0LCBlbmQsIHNlYyk7CistCistCS8qIElmIHRoaXMg aXMgYSBiZmQgb2YgYSBzaGFyZWQgbGlicmFyeSwgcmVjb3JkIGl0cyBzb25hbWUKKy0JICAgYW5k IGJ1aWxkIGlkLiAgKi8KKy0JaWYgKGJ1aWxkX2lkICE9IG51bGxwdHIpCistCSAgeworLQkgICAg Z2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8Y2hhcj4gc29uYW1lCistCSAgICAgID0gZ2RiX2JmZF9y ZWFkX2VsZl9zb25hbWUgKGJmZC0+ZmlsZW5hbWUpOworLQkgICAgaWYgKHNvbmFtZSAhPSBudWxs cHRyKQorLQkgICAgICBzZXRfY2JmZF9zb25hbWVfYnVpbGRfaWQgKGN1cnJlbnRfcHJvZ3JhbV9z cGFjZS0+Y2JmZCwKKy0JCQkJCXNvbmFtZS5nZXQgKCksIGJ1aWxkX2lkKTsKKy0JICB9CistICAg ICAgfSk7CisrCSAgY29uc3QgY2hhciAqYWN0dWFsX2ZpbGVuYW1lID0gbnVsbHB0cjsKKysJICBn ZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBzb25hbWU7CisrCSAgaWYgKGFiZmQgIT0gbnVs bHB0cikKKysJICAgIHsKKysJICAgICAgYWN0dWFsX2ZpbGVuYW1lID0gYmZkX2dldF9maWxlbmFt ZSAoYWJmZC5nZXQgKCkpOworKwkgICAgICBzb25hbWUgPSBnZGJfYmZkX3JlYWRfZWxmX3NvbmFt ZSAoYWN0dWFsX2ZpbGVuYW1lKTsKKysJICAgIH0KKysKKysJICBtX21hcHBlZF9maWxlX2luZm8u YWRkIChzb25hbWUuZ2V0ICgpLCBmaWxlbmFtZS5jX3N0ciAoKSwKKysJCQkJICBhY3R1YWxfZmls ZW5hbWUsIHN0ZDo6bW92ZSAocmFuZ2VzKSwKKysJCQkJICBmaWxlX2RhdGEuYnVpbGRfaWQpOwor Kwl9CisrICAgIH0KKyAKKyAgIG5vcm1hbGl6ZV9tZW1fcmFuZ2VzICgmbV9jb3JlX3VuYXZhaWxh YmxlX21hcHBpbmdzKTsKKyB9CitAQCAtNTY0LDM2ICs4NzAsMzEgQEAgcmVuYW1lX3ZtY29yZV9p ZGxlX3JlZ19zZWN0aW9ucyAoYmZkICphYmZkLCBpbmZlcmlvciAqaW5mKQorICAgIEJGRCBBQkZE LiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorLWxvY2F0ZV9leGVjX2Zyb21fY29yZWZpbGVfYnVpbGRf aWQgKGJmZCAqYWJmZCwgaW50IGZyb21fdHR5KQorK2xvY2F0ZV9leGVjX2Zyb21fY29yZWZpbGVf YnVpbGRfaWQgKGJmZCAqYWJmZCwgY29yZV90YXJnZXQgKnRhcmdldCwKKysJCQkJICAgIGludCBm cm9tX3R0eSkKKyB7CisgICBjb25zdCBiZmRfYnVpbGRfaWQgKmJ1aWxkX2lkID0gYnVpbGRfaWRf YmZkX2dldCAoYWJmZCk7CisgICBpZiAoYnVpbGRfaWQgPT0gbnVsbHB0cikKKyAgICAgcmV0dXJu OworIAorLSAgZ2RiX2JmZF9yZWZfcHRyIGV4ZWNiZmQKKy0gICAgPSBidWlsZF9pZF90b19leGVj X2JmZCAoYnVpbGRfaWQtPnNpemUsIGJ1aWxkX2lkLT5kYXRhKTsKKysgIC8qIFRoZSBmaWxlbmFt ZSB1c2VkIGZvciB0aGUgZmluZF9vYmpmaWxlX2J5X2J1aWxkX2lkIGNhbGwuICAqLworKyAgc3Rk OjpzdHJpbmcgZmlsZW5hbWU7CisgCistICBpZiAoZXhlY2JmZCA9PSBudWxscHRyKQorKyAgaWYg KCF0YXJnZXQtPmV4cGVjdGVkX2V4ZWNfZmlsZW5hbWUgKCkuZW1wdHkgKCkpCisrICAgIGZpbGVu YW1lID0gdGFyZ2V0LT5leHBlY3RlZF9leGVjX2ZpbGVuYW1lICgpOworKyAgZWxzZQorICAgICB7 CistICAgICAgLyogQXR0ZW1wdCB0byBxdWVyeSBkZWJ1Z2luZm9kIGZvciB0aGUgZXhlY3V0YWJs ZS4gICovCistICAgICAgZ2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8Y2hhcj4gZXhlY3BhdGg7Cist ICAgICAgc2NvcGVkX2ZkIGZkID0gZGVidWdpbmZvZF9leGVjX3F1ZXJ5IChidWlsZF9pZC0+ZGF0 YSwgYnVpbGRfaWQtPnNpemUsCistCQkJCQkgICAgYWJmZC0+ZmlsZW5hbWUsICZleGVjcGF0aCk7 CistCistICAgICAgaWYgKGZkLmdldCAoKSA+PSAwKQorLQl7CistCSAgZXhlY2JmZCA9IGdkYl9i ZmRfb3BlbiAoZXhlY3BhdGguZ2V0ICgpLCBnbnV0YXJnZXQpOworLQorLQkgIGlmIChleGVjYmZk ID09IG51bGxwdHIpCistCSAgICB3YXJuaW5nIChfKCJcIiVzXCIgZnJvbSBkZWJ1Z2luZm9kIGNh bm5vdCBiZSBvcGVuZWQgYXMgYmZkOiAlcyIpLAorLQkJICAgICBleGVjcGF0aC5nZXQgKCksCist CQkgICAgIGdkYl9iZmRfZXJybXNnIChiZmRfZ2V0X2Vycm9yICgpLCBudWxscHRyKS5jX3N0ciAo KSk7CistCSAgZWxzZSBpZiAoIWJ1aWxkX2lkX3ZlcmlmeSAoZXhlY2JmZC5nZXQgKCksIGJ1aWxk X2lkLT5zaXplLAorLQkJCQkgICAgIGJ1aWxkX2lkLT5kYXRhKSkKKy0JICAgIGV4ZWNiZmQucmVz ZXQgKG51bGxwdHIpOworLQl9CisrICAgICAgLyogV2UgZGlkbid0IGZpbmQgYW4gZXhlY3V0YWJs ZSBuYW1lIGZyb20gdGhlIG1hcHBlZCBmaWxlCisrCSBpbmZvcm1hdGlvbiwgc28gYXMgYSBzdGFu ZC1pbiBidWlsZCBhIHN0cmluZyBiYXNlZCBvbiB0aGUKKysJIGJ1aWxkLWlkLiAgKi8KKysgICAg ICBzdGQ6OnN0cmluZyBidWlsZF9pZF9oZXhfc3RyID0gYmluMmhleCAoYnVpbGRfaWQtPmRhdGEs IGJ1aWxkX2lkLT5zaXplKTsKKysgICAgICBmaWxlbmFtZSA9IHN0cmluZ19wcmludGYgKCJ3aXRo IGJ1aWxkLWlkICVzIiwgYnVpbGRfaWRfaGV4X3N0ci5jX3N0ciAoKSk7CisgICAgIH0KKyAKKysg IGdkYl9iZmRfcmVmX3B0ciBleGVjYmZkCisrICAgID0gZmluZF9vYmpmaWxlX2J5X2J1aWxkX2lk IChjdXJyZW50X3Byb2dyYW1fc3BhY2UsIGJ1aWxkX2lkLAorKwkJCQlmaWxlbmFtZS5jX3N0ciAo KSk7CisrCisgICBpZiAoZXhlY2JmZCAhPSBudWxscHRyKQorICAgICB7CisgICAgICAgZXhlY19m aWxlX2F0dGFjaCAoYmZkX2dldF9maWxlbmFtZSAoZXhlY2JmZC5nZXQgKCkpLCBmcm9tX3R0eSk7 CitAQCAtNzI0LDcgKzEwMjUsNyBAQCBjb3JlX3RhcmdldF9vcGVuIChjb25zdCBjaGFyICphcmcs IGludCBmcm9tX3R0eSkKKyAKKyAgIGlmIChjdXJyZW50X3Byb2dyYW1fc3BhY2UtPmV4ZWNfYmZk ICgpID09IG51bGxwdHIpCisgICAgIGxvY2F0ZV9leGVjX2Zyb21fY29yZWZpbGVfYnVpbGRfaWQg KGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+Y29yZV9iZmQgKCksCistCQkJCQlmcm9tX3R0eSk7Cisr CQkJCQl0YXJnZXQsIGZyb21fdHR5KTsKKyAKKyAgIHBvc3RfY3JlYXRlX2luZmVyaW9yIChmcm9t X3R0eSk7CisgCitAQCAtOTYzLDU1ICsxMjY0LDYgQEAgY29yZV90YXJnZXQ6OmZpbGVzX2luZm8g KCkKKyAgIHByaW50X3NlY3Rpb25faW5mbyAoJm1fY29yZV9zZWN0aW9uX3RhYmxlLCBjdXJyZW50 X3Byb2dyYW1fc3BhY2UtPmNvcmVfYmZkICgpKTsKKyB9CisgDAorLS8qIEhlbHBlciBtZXRob2Qg Zm9yIGNvcmVfdGFyZ2V0Ojp4ZmVyX3BhcnRpYWwuICAqLworLQorLWVudW0gdGFyZ2V0X3hmZXJf c3RhdHVzCistY29yZV90YXJnZXQ6OnhmZXJfbWVtb3J5X3ZpYV9tYXBwaW5ncyAoZ2RiX2J5dGUg KnJlYWRidWYsCistCQkJCSAgICAgICBjb25zdCBnZGJfYnl0ZSAqd3JpdGVidWYsCistCQkJCSAg ICAgICBVTE9OR0VTVCBvZmZzZXQsIFVMT05HRVNUIGxlbiwKKy0JCQkJICAgICAgIFVMT05HRVNU ICp4ZmVyZWRfbGVuKQorLXsKKy0gIGVudW0gdGFyZ2V0X3hmZXJfc3RhdHVzIHhmZXJfc3RhdHVz OworLQorLSAgeGZlcl9zdGF0dXMgPSAoc2VjdGlvbl90YWJsZV94ZmVyX21lbW9yeV9wYXJ0aWFs CistCQkgICAocmVhZGJ1Ziwgd3JpdGVidWYsCistCQkgICAgb2Zmc2V0LCBsZW4sIHhmZXJlZF9s ZW4sCistCQkgICAgbV9jb3JlX2ZpbGVfbWFwcGluZ3MpKTsKKy0KKy0gIGlmICh4ZmVyX3N0YXR1 cyA9PSBUQVJHRVRfWEZFUl9PSyB8fCBtX2NvcmVfdW5hdmFpbGFibGVfbWFwcGluZ3MuZW1wdHkg KCkpCistICAgIHJldHVybiB4ZmVyX3N0YXR1czsKKy0KKy0gIC8qIFRoZXJlIGFyZSBpbnN0YW5j ZXMgLSBlLmcuIHdoZW4gZGVidWdnaW5nIHdpdGhpbiBhIGRvY2tlcgorLSAgICAgY29udGFpbmVy IHVzaW5nIHRoZSBBVUZTIHN0b3JhZ2UgZHJpdmVyIC0gd2hlcmUgdGhlIHBhdGhuYW1lcworLSAg ICAgb2J0YWluZWQgZnJvbSB0aGUgbm90ZSBzZWN0aW9uIGFyZSBpbmNvcnJlY3QuICBEZXNwaXRl IHRoZSBwYXRoCistICAgICBiZWluZyB3cm9uZywganVzdCBrbm93aW5nIHRoZSBzdGFydCBhbmQg ZW5kIGFkZHJlc3NlcyBvZiB0aGUKKy0gICAgIG1hcHBpbmdzIGlzIHN0aWxsIHVzZWZ1bDsgd2Ug Y2FuIGF0dGVtcHQgYW4gYWNjZXNzIG9mIHRoZSBmaWxlCistICAgICBzdHJhdHVtIGNvbnN0cmFp bmVkIHRvIHRoZSBhZGRyZXNzIHJhbmdlcyBjb3JyZXNwb25kaW5nIHRvIHRoZQorLSAgICAgdW5h dmFpbGFibGUgbWFwcGluZ3MuICAqLworLQorLSAgVUxPTkdFU1QgbWVtYWRkciA9IG9mZnNldDsK Ky0gIFVMT05HRVNUIG1lbWVuZCA9IG9mZnNldCArIGxlbjsKKy0KKy0gIGZvciAoY29uc3QgYXV0 byAmbXIgOiBtX2NvcmVfdW5hdmFpbGFibGVfbWFwcGluZ3MpCistICAgIHsKKy0gICAgICBpZiAo bXIuY29udGFpbnMgKG1lbWFkZHIpKQorLQl7CistCSAgaWYgKCFtci5jb250YWlucyAobWVtZW5k KSkKKy0JICAgIGxlbiA9IG1yLnN0YXJ0ICsgbXIubGVuZ3RoIC0gbWVtYWRkcjsKKy0KKy0JICB4 ZmVyX3N0YXR1cyA9IHRoaXMtPmJlbmVhdGggKCktPnhmZXJfcGFydGlhbCAoVEFSR0VUX09CSkVD VF9NRU1PUlksCistCQkJCQkJCU5VTEwsCistCQkJCQkJCXJlYWRidWYsCistCQkJCQkJCXdyaXRl YnVmLAorLQkJCQkJCQlvZmZzZXQsCistCQkJCQkJCWxlbiwKKy0JCQkJCQkJeGZlcmVkX2xlbik7 CistCSAgYnJlYWs7CistCX0KKy0gICAgfQorLQorLSAgcmV0dXJuIHhmZXJfc3RhdHVzOworLX0K KyAKKyBlbnVtIHRhcmdldF94ZmVyX3N0YXR1cworIGNvcmVfdGFyZ2V0Ojp4ZmVyX3BhcnRpYWwg KGVudW0gdGFyZ2V0X29iamVjdCBvYmplY3QsIGNvbnN0IGNoYXIgKmFubmV4LAorQEAgLTEwMzks MjYgKzEyOTEsNzIgQEAgY29yZV90YXJnZXQ6OnhmZXJfcGFydGlhbCAoZW51bSB0YXJnZXRfb2Jq ZWN0IG9iamVjdCwgY29uc3QgY2hhciAqYW5uZXgsCisgCWlmICh4ZmVyX3N0YXR1cyA9PSBUQVJH RVRfWEZFUl9PSykKKyAJICByZXR1cm4gVEFSR0VUX1hGRVJfT0s7CisgCistCS8qIENoZWNrIGZp bGUgYmFja2VkIG1hcHBpbmdzLiAgSWYgdGhleSdyZSBhdmFpbGFibGUsIHVzZQorLQkgICBjb3Jl IGZpbGUgcHJvdmlkZWQgbWFwcGluZ3MgKGUuZy4gZnJvbSAubm90ZS5saW51eGNvcmUuZmlsZQor LQkgICBvciB0aGUgbGlrZSkgYXMgdGhpcyBzaG91bGQgcHJvdmlkZSBhIG1vcmUgYWNjdXJhdGUK Ky0JICAgcmVzdWx0LiAgSWYgbm90LCBjaGVjayB0aGUgc3RyYXR1bSBiZW5lYXRoIHVzLCB3aGlj aCBzaG91bGQKKy0JICAgYmUgdGhlIGZpbGUgc3RyYXR1bS4KKysJLyogQ2hlY2sgZmlsZSBiYWNr ZWQgbWFwcGluZ3MuICBJZiB0aGV5J3JlIGF2YWlsYWJsZSwgdXNlIGNvcmUgZmlsZQorKwkgICBw cm92aWRlZCBtYXBwaW5ncyAoZS5nLiBmcm9tIC5ub3RlLmxpbnV4Y29yZS5maWxlIG9yIHRoZSBs aWtlKQorKwkgICBhcyB0aGlzIHNob3VsZCBwcm92aWRlIGEgbW9yZSBhY2N1cmF0ZSByZXN1bHQu ICAqLworKwlpZiAoIW1fY29yZV9maWxlX21hcHBpbmdzLmVtcHR5ICgpKQorKwkgIHsKKysJICAg IHhmZXJfc3RhdHVzID0gc2VjdGlvbl90YWJsZV94ZmVyX21lbW9yeV9wYXJ0aWFsCisrCQkJICAg IChyZWFkYnVmLCB3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4sIHhmZXJlZF9sZW4sCisrCQkJICAgICBt X2NvcmVfZmlsZV9tYXBwaW5ncyk7CisrCSAgICBpZiAoeGZlcl9zdGF0dXMgPT0gVEFSR0VUX1hG RVJfT0spCisrCSAgICAgIHJldHVybiB4ZmVyX3N0YXR1czsKKysJICB9CisgCistCSAgIFdlIGFs c28gY2hlY2sgdW5hdmFpbGFibGUgbWFwcGluZ3MgZHVlIHRvIERvY2tlci9BVUZTIGRyaXZlcgor LQkgICBpc3N1ZXMuICAqLworLQlpZiAoIW1fY29yZV9maWxlX21hcHBpbmdzLmVtcHR5ICgpCist CSAgICB8fCAhbV9jb3JlX3VuYXZhaWxhYmxlX21hcHBpbmdzLmVtcHR5ICgpKQorKwkvKiBJZiB0 aGUgYWNjZXNzIGlzIHdpdGhpbiBhbiB1bmF2YWlsYWJsZSBmaWxlIG1hcHBpbmcgdGhlbiB3ZSB0 cnkKKysJICAgdG8gY2hlY2sgaW4gdGhlIHN0cmF0dW0gYmVsb3cgKHRoZSBleGVjdXRhYmxlIHN0 cmF0dW0pLiAgVGhlCisrCSAgIHRoaW5raW5nIGhlcmUgaXMgdGhhdCBpZiB0aGUgbWFwcGluZyB3 YXMgcmVhZC93cml0ZSB0aGVuIHRoZQorKwkgICBjb250ZW50cyB3b3VsZCBoYXZlIGJlZW4gd3Jp dHRlbiBpbnRvIHRoZSBjb3JlIGZpbGUgYW5kIHRoZQorKwkgICBhY2Nlc3Mgd291bGQgaGF2ZSBi ZWVuIHNhdGlzZmllZCBieSBtX2NvcmVfc2VjdGlvbl90YWJsZS4KKysKKysJICAgQnV0IGlmIHRo ZSBhY2Nlc3MgaGFzIG5vdCB5ZXQgYmVlbiByZXNvbHZlZCB0aGVuIHdlIGNhbiBhc3N1bWUKKysJ ICAgdGhlIGFjY2VzcyBpcyByZWFkLW9ubHkuICBJZiB0aGUgZXhlY3V0YWJsZSB3YXMgbm90IGZv dW5kCisrCSAgIGR1cmluZyB0aGUgbWFwcGVkIGZpbGUgY2hlY2sgdGhlbiB3ZSdsbCBoYXZlIGFu IHVuYXZhaWxhYmxlCisrCSAgIG1hcHBpbmcgZW50cnksIGhvd2V2ZXIsIGlmIHRoZSB1c2VyIGhh cyBwcm92aWRlZCB0aGUgZXhlY3V0YWJsZQorKwkgICAobWF5YmUgaW4gYSBkaWZmZXJlbnQgbG9j YXRpb24pIHRoZW4gd2UgbWlnaHQgYmUgYWJsZSB0bworKwkgICByZXNvbHZlIHRoZSBhY2Nlc3Mg ZnJvbSB0aGVyZS4KKysKKysJICAgSWYgdGhhdCBmYWlscywgYnV0IHRoZSBhY2Nlc3MgaXMgd2l0 aGluIGFuIHVuYXZhaWxhYmxlIHJlZ2lvbiwKKysJICAgdGhlbiB0aGUgYWNjZXNzIGl0c2VsZiBz aG91bGQgZmFpbC4gICovCisrCWZvciAoY29uc3QgYXV0byAmbXIgOiBtX2NvcmVfdW5hdmFpbGFi bGVfbWFwcGluZ3MpCisgCSAgeworLQkgICAgeGZlcl9zdGF0dXMgPSB4ZmVyX21lbW9yeV92aWFf bWFwcGluZ3MgKHJlYWRidWYsIHdyaXRlYnVmLCBvZmZzZXQsCisrCSAgICBpZiAobXIuY29udGFp bnMgKG9mZnNldCkpCisrCSAgICAgIHsKKysJCWlmICghbXIuY29udGFpbnMgKG9mZnNldCArIGxl bikpCisrCQkgIGxlbiA9IG1yLnN0YXJ0ICsgbXIubGVuZ3RoIC0gb2Zmc2V0OworKworKwkJeGZl cl9zdGF0dXMKKysJCSAgPSB0aGlzLT5iZW5lYXRoICgpLT54ZmVyX3BhcnRpYWwgKFRBUkdFVF9P QkpFQ1RfTUVNT1JZLAorKwkJCQkJCSAgICBudWxscHRyLCByZWFkYnVmLAorKwkJCQkJCSAgICB3 cml0ZWJ1Ziwgb2Zmc2V0LAorIAkJCQkJCSAgICBsZW4sIHhmZXJlZF9sZW4pOworKwkJaWYgKHhm ZXJfc3RhdHVzID09IFRBUkdFVF9YRkVSX09LKQorKwkJICByZXR1cm4gVEFSR0VUX1hGRVJfT0s7 CisrCisrCQlyZXR1cm4gVEFSR0VUX1hGRVJfRV9JTzsKKysJICAgICAgfQorKwkgIH0KKysKKysJ LyogVGhlIGZvbGxvd2luZyBpcyBhY3RpbmcgYXMgYSBmYWxsYmFjayBpbiBjYXNlIHdlIGVuY291 bnRlciBhCisrCSAgIHNpdHVhdGlvbiB3aGVyZSB0aGUgY29yZSBmaWxlIGlzIGxhY2tpbmcgYW5k IG1hcHBlZCBmaWxlCisrCSAgIGluZm9ybWF0aW9uLiAgSGVyZSB3ZSBxdWVyeSB0aGUgZXhlYyBm aWxlIHN0cmF0dW0gdG8gc2VlIGlmIGl0CisrCSAgIGNhbiByZXNvbHZlIHRoZSBhY2Nlc3MuICBE b2luZyB0aGlzIHdoZW4gd2UgYXJlIG1pc3NpbmcgbWFwcGVkCisrCSAgIGZpbGUgaW5mb3JtYXRp b24gbWlnaHQgYmUgdGhlIGJlc3Qgd2UgY2FuIGRvLCBidXQgdGhlcmUgYXJlCisrCSAgIGNlcnRh aW5seSBjYXNlcyB0aGlzIHdpbGwgZ2V0IHdyb25nLCBlLmcuIGlmIGFuIGluZmVyaW9yIGNyZWF0 ZWQKKysJICAgYSB6ZXJvIGluaXRpYWxpc2VkIG1hcHBpbmcgb3ZlciB0aGUgdG9wIG9mIHNvbWUg ZGF0YSB0aGF0IGV4aXN0cworKwkgICB3aXRoaW4gdGhlIGV4ZWN1dGFibGUgdGhlbiB0aGlzIHdp bGwgcmV0dXJuIHRoZSBleGVjdXRhYmxlIGRhdGEKKysJICAgcmF0aGVyIHRoYW4gdGhlIHplcm8g ZGF0YS4gIE1heWJlIHdlIHNob3VsZCBqdXN0IGRyb3AgdGhpcworKwkgICBibG9jaz8gICovCisr CWlmIChtX2NvcmVfZmlsZV9tYXBwaW5ncy5lbXB0eSAoKQorKwkgICAgJiYgbV9jb3JlX3VuYXZh aWxhYmxlX21hcHBpbmdzLmVtcHR5ICgpKQorKwkgIHsKKysJICAgIHhmZXJfc3RhdHVzCisrCSAg ICAgID0gdGhpcy0+YmVuZWF0aCAoKS0+eGZlcl9wYXJ0aWFsIChvYmplY3QsIGFubmV4LCByZWFk YnVmLAorKwkJCQkJCXdyaXRlYnVmLCBvZmZzZXQsIGxlbiwKKysJCQkJCQl4ZmVyZWRfbGVuKTsK KysJICAgIGlmICh4ZmVyX3N0YXR1cyA9PSBUQVJHRVRfWEZFUl9PSykKKysJICAgICAgcmV0dXJu IFRBUkdFVF9YRkVSX09LOworIAkgIH0KKy0JZWxzZQorLQkgIHhmZXJfc3RhdHVzID0gdGhpcy0+ YmVuZWF0aCAoKS0+eGZlcl9wYXJ0aWFsIChvYmplY3QsIGFubmV4LCByZWFkYnVmLAorLQkJCQkJ CQl3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4sCistCQkJCQkJCXhmZXJlZF9sZW4pOworLQlpZiAoeGZl cl9zdGF0dXMgPT0gVEFSR0VUX1hGRVJfT0spCistCSAgcmV0dXJuIFRBUkdFVF9YRkVSX09LOwor IAorIAkvKiBGaW5hbGx5LCBhdHRlbXB0IHRvIGFjY2VzcyBkYXRhIGluIGNvcmUgZmlsZSBzZWN0 aW9ucyB3aXRoCisgCSAgIG5vIGNvbnRlbnRzLiAgVGhlc2Ugd2lsbCB0eXBpY2FsbHkgcmVhZCBh cyBhbGwgemVyby4gICovCitAQCAtMTUxNSw2ICsxODEzLDE4MiBAQCBtYWludGVuYW5jZV9wcmlu dF9jb3JlX2ZpbGVfYmFja2VkX21hcHBpbmdzIChjb25zdCBjaGFyICphcmdzLCBpbnQgZnJvbV90 dHkpCisgICAgIHRhcmctPmluZm9fcHJvY19tYXBwaW5ncyAodGFyZy0+Y29yZV9nZGJhcmNoICgp KTsKKyB9CisgCisrLyogQWRkIG1vcmUgZGV0YWlscyBkaXNjb3ZlcmVkIHdoaWxlIHByb2Nlc3Np bmcgdGhlIGNvcmUtZmlsZSdzIG1hcHBlZCBmaWxlCisrICAgaW5mb3JtYXRpb24sIHdlJ3JlIGJ1 aWxkaW5nIG1hcHMgYmV0d2VlbiBmaWxlbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nCisrICAg YnVpbGQtaWRzLCBiZXR3ZWVuIGFkZHJlc3MgcmFuZ2VzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBi dWlsZC1pZHMsIGFuZAorKyAgIGFsc28gYSByZXZlcnNlIG1hcCBiZXR3ZWVuIGJ1aWxkLWlkIGFu ZCB0aGUgY29ycmVzcG9uZGluZyBmaWxlbmFtZS4KKysKKysgICBTT05BTUUgaXMgdGhlIERUX1NP TkFNRSBhdHRyaWJ1dGUgZXh0cmFjdGVkIGZyb20gdGhlIC5keW5hbWljIHNlY3Rpb24gb2YKKysg ICBhIHNoYXJlZCBsaWJyYXJ5IHRoYXQgd2FzIG1hcHBlZCBpbnRvIHRoZSBjb3JlIGZpbGUuICBU aGlzIGNhbiBiZQorKyAgIG51bGxwdHIgaWYgdGhlIG1hcHBlZCBmaWxlcyB3YXMgbm90IGEgc2hh cmVkIGxpYnJhcnksIG9yIGRpZG4ndCBoYXZlIGEKKysgICBEVF9TT05BTUUgYXR0cmlidXRlLgor KworKyAgIEVYUEVDVEVEX0ZJTEVOQU1FIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgd2Fz IG1hcHBlZCBpbnRvIHRoZQorKyAgIGluZmVyaW9yIGFzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb3Jl IGZpbGUsIHRoaXMgc2hvdWxkIG5ldmVyIGJlIG51bGxwdHIuCisrCisrICAgQUNUVUFMX0ZJTEVO QU1FIGlzIHRoZSBuYW1lIG9mIHRoZSBhY3R1YWwgZmlsZSBHREIgZm91bmQgdG8gcHJvdmlkZSB0 aGUKKysgICBtYXBwZWQgZmlsZSBpbmZvcm1hdGlvbiwgdGhpcyBjYW4gYmUgbnVsbHB0ciBpZiBH REIgZmFpbGVkIHRvIGZpbmQgYQorKyAgIHN1aXRhYmxlIGZpbGUuICBUaGlzIG1pZ2h0IGJlIGRp ZmZlcmVudCB0byBFWFBFQ1RFRF9GSUxFTkFNRSwgZS5nLiBHREIKKysgICBtaWdodCBoYXZlIGRv d25sb2FkZWQgdGhlIGZpbGUgZnJvbSBkZWJ1Z2luZm9kIGFuZCBzbyBBQ1RVQUxfRklMRU5BTUUK KysgICB3aWxsIGJlIGEgZmlsZSBpbiB0aGUgZGVidWdpbmZvZCBjbGllbnQgY2FjaGUuCisrCisr ICAgUkFOR0VTIGlzIHRoZSBsaXN0IG9mIG1lbW9yeSByYW5nZXMgYXQgd2hpY2ggdGhpcyBmaWxl IHdhcyBtYXBwZWQgaW50bworKyAgIHRoZSBpbmZlcmlvci4KKysKKysgICBCVUlMRF9JRCBpcyB0 aGUgYnVpbGQtaWQgZm9yIHRoaXMgbWFwcGVkIGZpbGUsIHRoaXMgd2lsbCBuZXZlciBiZQorKyAg IG51bGxwdHIuICBOb3QgZXZlcnkgbWFwcGVkIGZpbGUgd2lsbCBoYXZlIGEgYnVpbGQtaWQsIGJ1 dCB0aGVyZSdzIG5vCisrICAgcG9pbnQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIHdlIGZhaWxl ZCB0byBmaW5kIGEgYnVpbGQtaWQ7IHRoaXMKKysgICBzdHJ1Y3R1cmUgb25seSBleGlzdHMgc28g d2UgY2FuIGxvb2t1cCBmaWxlcyBiYXNlZCBvbiB0aGVpciBidWlsZC1pZC4gICovCisrCisrdm9p ZAorK21hcHBlZF9maWxlX2luZm86OmFkZCAoY29uc3QgY2hhciAqc29uYW1lLAorKwkJICAgICAg IGNvbnN0IGNoYXIgKmV4cGVjdGVkX2ZpbGVuYW1lLAorKwkJICAgICAgIGNvbnN0IGNoYXIgKmFj dHVhbF9maWxlbmFtZSwKKysJCSAgICAgICBzdGQ6OnZlY3RvcjxtZW1fcmFuZ2U+ICYmcmFuZ2Vz LAorKwkJICAgICAgIGNvbnN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQpCisreworKyAgZ2RiX2Fz c2VydCAoYnVpbGRfaWQgIT0gbnVsbHB0cik7CisrICBnZGJfYXNzZXJ0IChleHBlY3RlZF9maWxl bmFtZSAhPSBudWxscHRyKTsKKysKKysgIGlmIChzb25hbWUgIT0gbnVsbHB0cikKKysgICAgewor KyAgICAgIC8qIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBlbnRyeSB3aXRoIHRoaXMgU09OQU1FIHRo ZW4gdGhpcyBpbmRpY2F0ZXMKKysJIHRoYXQgdGhlIGluZmVyaW9yIGhhcyB0d28gZmlsZXMgbWFw cGVkIGludG8gbWVtb3J5IHdpdGggZGlmZmVyZW50CisrCSBmaWxlIG5hbWVzIChhbmQgbW9zdCBs aWtlbHkgZGlmZmVyZW50IGJ1aWxkLWlkcyksIGJ1dCB3aXRoIHRoZQorKwkgc2FtZSBEVF9TT05B TUUgYXR0cmlidXRlLiAgSW4gdGhpcyBjYXNlIHdlIGNhbid0IHVzZSB0aGUKKysJIERUX1NPTkFN RSB0byBmaWd1cmUgb3V0IHRoZSBleHBlY3RlZCBidWlsZC1pZCBvZiBhIHNoYXJlZAorKwkgbGli cmFyeSwgc28gcG9pc29uIHRoZSBlbnRyeSBmb3IgdGhpcyBTT05BTUUgYnkgc2V0dGluZyB0aGUg ZW50cnkKKysJIHRvIG51bGxwdHIuICAqLworKyAgICAgIGF1dG8gaXQgPSBtX3NvbmFtZV90b19i dWlsZF9pZF9tYXAuZmluZCAoc29uYW1lKTsKKysgICAgICBpZiAoaXQgIT0gbV9zb25hbWVfdG9f YnVpbGRfaWRfbWFwLmVuZCAoKQorKwkgICYmIGl0LT5zZWNvbmQgIT0gbnVsbHB0cgorKwkgICYm ICFidWlsZF9pZF9lcXVhbCAoaXQtPnNlY29uZCwgYnVpbGRfaWQpKQorKwltX3NvbmFtZV90b19i dWlsZF9pZF9tYXBbc29uYW1lXSA9IG51bGxwdHI7CisrICAgICAgZWxzZQorKwltX3NvbmFtZV90 b19idWlsZF9pZF9tYXBbc29uYW1lXSA9IGJ1aWxkX2lkOworKyAgICB9CisrCisrICAvKiBXaGVu IHRoZSBjb3JlIGZpbGUgaXMgaW5pdGlhbGx5IG9wZW5lZCBhbmQgdGhlIG1hcHBlZCBmaWxlcyBh cmUKKysgICAgIHBhcnNlZCwgd2UgZ3JvdXAgdGhlIGJ1aWxkLWlkIGluZm9ybWF0aW9uIGJhc2Vk IG9uIHRoZSBmaWxlIG5hbWUuICBBcworKyAgICAgYSBjb25zZXF1ZW5jZSwgd2Ugc2hvdWxkIHNl ZSBlYWNoIEVYUEVDVEVEX0ZJTEVOQU1FIHZhbHVlIGV4YWN0bHkKKysgICAgIG9uY2UuICBUaGlz IG1lYW5zIHRoYXQgZWFjaCBpbnNlcnRpb24gc2hvdWxkIGFsd2F5cyBzdWNjZWVkLiAgKi8KKysg IGNvbnN0IGF1dG8gW2l0LCBpbnNlcnRlZF0KKysgICAgPSBtX2ZpbGVuYW1lX3RvX2J1aWxkX2lk X21hcC5lbXBsYWNlIChleHBlY3RlZF9maWxlbmFtZSwgYnVpbGRfaWQpOworKyAgZ2RiX2Fzc2Vy dCAoaW5zZXJ0ZWQpOworKworKyAgLyogU2V0dXAgdGhlIHJldmVyc2UgYnVpbGQtaWQgdG8gZmls ZSBuYW1lIG1hcC4gICovCisrICBpZiAoYWN0dWFsX2ZpbGVuYW1lICE9IG51bGxwdHIpCisrICAg IG1fYnVpbGRfaWRfdG9fZmlsZW5hbWVfbWFwLmVtcGxhY2UgKGJ1aWxkX2lkLCBhY3R1YWxfZmls ZW5hbWUpOworKworKyAgLyogU2V0dXAgdGhlIGxpc3Qgb2YgbWVtb3J5IHJhbmdlIHRvIGJ1aWxk LWlkIG9iamVjdHMuICAqLworKyAgZm9yIChtZW1fcmFuZ2UgJnIgOiByYW5nZXMpCisrICAgIG1f YWRkcmVzc190b19idWlsZF9pZF9saXN0LmVtcGxhY2VfYmFjayAoc3RkOjptb3ZlIChyKSwgYnVp bGRfaWQpOworKworKyAgLyogQXQgdGhpcyBwb2ludCB0aGUgbV9hZGRyZXNzX3RvX2J1aWxkX2lk X2xpc3QgaXMgdW5zb3J0ZWQgKHdlIGp1c3QKKysgICAgIGFkZGVkIHNvbWUgZW50cmllcyB0byB0 aGUgZW5kIG9mIHRoZSBsaXN0KS4gIEFsbCBlbnRyaWVzIHNob3VsZCBiZQorKyAgICAgYWRkZWQg YmVmb3JlIGFueSBsb29rLXVwcyBhcmUgcGVyZm9ybWVkLCBhbmQgdGhlIGxpc3QgaXMgb25seSBz b3J0ZWQKKysgICAgIHdoZW4gdGhlIGZpcnN0IGxvb2stdXAgaXMgcGVyZm9ybWVkLiAgKi8KKysg IGdkYl9hc3NlcnQgKCFtX2FkZHJlc3NfdG9fYnVpbGRfaWRfbGlzdF9zb3J0ZWQpOworK30KKysK KysvKiBGSUxFTkFNRSBpcyB0aGUgbmFtZSBvZiBhIGZpbGUgR0RCIGlzIHRyeWluZyB0byBsb2Fk LCBhbmQgQUREUiBpcworKyAgIChvcHRpb25hbGx5KSBhbiBhZGRyZXNzIHdpdGhpbiB0aGUgZmls ZSBpbiB0aGUgaW5mZXJpb3IncyBhZGRyZXNzIHNwYWNlLgorKworKyAgIFNlYXJjaCB0aHJvdWdo IHRoZSBpbmZvcm1hdGlvbiBnYXRoZXJlZCBmcm9tIHRoZSBjb3JlLWZpbGUncyBtYXBwZWQgZmls ZQorKyAgIGluZm9ybWF0aW9uIGxvb2tpbmcgZm9yIGEgZmlsZSBuYW1lZCBGSUxFTkFNRSwgb3Ig Zm9yIGEgZmlsZSB0aGF0IGNvdmVycworKyAgIEFERFIuICBJZiBhIG1hdGNoIGlzIGZvdW5kIHRo ZW4gcmV0dXJuIHRoZSBidWlsZC1pZCBmb3IgdGhlIGZpbGUgYWxvbmcKKysgICB3aXRoIHRoZSBs b2NhdGlvbiB3aGVyZSBHREIgZm91bmQgdGhlIG1hcHBlZCBmaWxlLgorKworKyAgIFRoZSBsb2Nh dGlvbiBvZiB0aGUgbWFwcGVkIGZpbGUgbWlnaHQgYmUgdGhlIGVtcHR5IHN0cmluZyBpZiBHREIg d2FzCisrICAgdW5hYmxlIHRvIGZpbmQgdGhlIG1hcHBlZCBmaWxlLgorKworKyAgIElmIG5vIGJ1 aWxkLWlkIGNhbiBiZSBmb3VuZCBmb3IgRklMRU5BTUUgdGhlbiBHREIgd2lsbCByZXR1cm4gYSBw YWlyCisrICAgY29udGFpbmluZyBudWxscHRyIChmb3IgdGhlIGJ1aWxkLWlkKSBhbmQgYW4gZW1w dHkgc3RyaW5nIGZvciB0aGUgZmlsZQorKyAgIG5hbWUuICAqLworKworK3N0ZDo6b3B0aW9uYWwg PGNvcmVfdGFyZ2V0X21hcHBlZF9maWxlX2luZm8+CisrbWFwcGVkX2ZpbGVfaW5mbzo6bG9va3Vw IChjb25zdCBjaGFyICpmaWxlbmFtZSwKKysJCQkgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q09SRV9B RERSPiAmYWRkcikKKyt7CisrICBpZiAoZmlsZW5hbWUgIT0gbnVsbHB0cikKKysgICAgeworKyAg ICAgIC8qIElmIHRoZXJlJ3MgYSBtYXRjaGluZyBlbnRyeSBpbiBtX2ZpbGVuYW1lX3RvX2J1aWxk X2lkX21hcCB0aGVuIHRoZQorKwkgYXNzb2NpYXRlZCBidWlsZC1pZCB3aWxsIG5vdCBiZSBudWxs cHRyLCBhbmQgY2FuIGJlIHVzZWQgdG8KKysJIHZhbGlkYXRlIHRoYXQgRklMRU5BTUUgaXMgY29y cmVjdC4gICovCisrICAgICAgYXV0byBpdCA9IG1fZmlsZW5hbWVfdG9fYnVpbGRfaWRfbWFwLmZp bmQgKGZpbGVuYW1lKTsKKysgICAgICBpZiAoaXQgIT0gbV9maWxlbmFtZV90b19idWlsZF9pZF9t YXAuZW5kICgpKQorKwlyZXR1cm4gbWFrZV9yZXN1bHQgKGl0LT5zZWNvbmQpOworKyAgICB9Cisr CisrICBpZiAoYWRkci5oYXNfdmFsdWUgKCkpCisrICAgIHsKKysgICAgICAvKiBPbiB0aGUgZmly c3QgbG9va3VwLCBzb3J0IHRoZSBhZGRyZXNzX3RvX2J1aWxkX2lkX2xpc3QuICAqLworKyAgICAg IGlmICghbV9hZGRyZXNzX3RvX2J1aWxkX2lkX2xpc3Rfc29ydGVkKQorKwl7CisrCSAgc3RkOjpz b3J0IChtX2FkZHJlc3NfdG9fYnVpbGRfaWRfbGlzdC5iZWdpbiAoKSwKKysJCSAgICAgbV9hZGRy ZXNzX3RvX2J1aWxkX2lkX2xpc3QuZW5kICgpLAorKwkJICAgICBbXSAoY29uc3QgbWVtX3Jhbmdl X2FuZF9idWlsZF9pZCAmYSwKKysJCQkgY29uc3QgbWVtX3JhbmdlX2FuZF9idWlsZF9pZCAmYikg eworKwkJICAgICAgIHJldHVybiBhLnJhbmdlIDwgYi5yYW5nZTsKKysJCSAgICAgfSk7CisrCSAg bV9hZGRyZXNzX3RvX2J1aWxkX2lkX2xpc3Rfc29ydGVkID0gdHJ1ZTsKKysJfQorKworKyAgICAg IC8qIExvb2sgZm9yIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSByYW5nZSdzIHN0YXJ0IGFkZHJlc3Mg aXMgbm90IGxlc3MKKysJIHRoYW4sIG9yIGVxdWFsIHRvbywgdGhlIGFkZHJlc3MgQUREUi4gIElm IHdlIGZpbmQgc3VjaCBhbiBlbnRyeSwKKysJIHRoZW4gdGhlIHByZXZpb3VzIGVudHJ5J3MgcmFu Z2UgbWlnaHQgY29udGFpbiBBRERSLiAgSWYgaXQgZG9lcworKwkgdGhlbiB0aGF0IHByZXZpb3Vz IGVudHJ5J3MgYnVpbGQtaWQgY2FuIGJlIHVzZWQuICAqLworKyAgICAgIGF1dG8gaXQgPSBzdGQ6 Omxvd2VyX2JvdW5kCisrCShtX2FkZHJlc3NfdG9fYnVpbGRfaWRfbGlzdC5iZWdpbiAoKSwKKysJ IG1fYWRkcmVzc190b19idWlsZF9pZF9saXN0LmVuZCAoKSwKKysJICphZGRyLAorKwkgW10gKGNv bnN0IG1lbV9yYW5nZV9hbmRfYnVpbGRfaWQgJmEsCisrCSAgICAgY29uc3QgQ09SRV9BRERSICZi KSB7CisrCSAgcmV0dXJuIGEucmFuZ2Uuc3RhcnQgPD0gYjsKKysJfSk7CisrCisrICAgICAgaWYg KGl0ICE9IG1fYWRkcmVzc190b19idWlsZF9pZF9saXN0LmJlZ2luICgpKQorKwl7CisrCSAgLS1p dDsKKysKKysJICBpZiAoaXQtPnJhbmdlLmNvbnRhaW5zICgqYWRkcikpCisrCSAgICByZXR1cm4g bWFrZV9yZXN1bHQgKGl0LT5idWlsZF9pZCk7CisrCX0KKysgICAgfQorKworKyAgaWYgKGZpbGVu YW1lICE9IG51bGxwdHIpCisrICAgIHsKKysgICAgICAvKiBJZiB0aGUgYmFzZW5hbWUgb2YgRklM RU5BTUUgYXBwZWFycyBpbiBtX3NvbmFtZV90b19idWlsZF9pZF9tYXAKKysJIHRoZW4gd2hlbiB0 aGUgbWFwcGVkIGZpbGVzIHdlcmUgcHJvY2Vzc2VkLCB3ZSBzYXcgYSBmaWxlIHdpdGggYQorKwkg RFRfU09OQU1FIGF0dHJpYnV0ZSBjb3JyZXNwb25kaW5nIHRvIEZJTEVOQU1FLCB1c2UgdGhhdCBi dWlsZC1pZAorKwkgdG8gdmFsaWRhdGUgRklMRU5BTUUuCisrCisrCSBIb3dldmVyLCB0aGUgYnVp bGQtaWQgaW4gdGhpcyBtYXAgbWlnaHQgYmUgbnVsbHB0ciBpZiB3ZSBzYXcKKysJIG11bHRpcGxl IG1hcHBlZCBmaWxlcyB3aXRoIHRoZSBzYW1lIERUX1NPTkFNRSBhdHRyaWJ1dGUgKHRob3VnaAor KwkgdGhpcyBzaG91bGQgYmUgcHJldHR5IHJhcmUpLiAgKi8KKysgICAgICBhdXRvIGl0CisrCT0g bV9zb25hbWVfdG9fYnVpbGRfaWRfbWFwLmZpbmQgKGxiYXNlbmFtZSAoZmlsZW5hbWUpKTsKKysg ICAgICBpZiAoaXQgIT0gbV9zb25hbWVfdG9fYnVpbGRfaWRfbWFwLmVuZCAoKQorKwkgICYmIGl0 LT5zZWNvbmQgIT0gbnVsbHB0cikKKysJcmV0dXJuIG1ha2VfcmVzdWx0IChpdC0+c2Vjb25kKTsK KysgICAgfQorKworKyAgcmV0dXJuIHt9OworK30KKysKKysvKiBTZWUgZ2RiY29yZS5oLiAgKi8K KysKKytzdGQ6Om9wdGlvbmFsIDxjb3JlX3RhcmdldF9tYXBwZWRfZmlsZV9pbmZvPgorK2NvcmVf dGFyZ2V0X2ZpbmRfbWFwcGVkX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorKwkJCSAgICAg IHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPiBhZGRyKQorK3sKKysgIGNvcmVfdGFyZ2V0ICp0YXJn ID0gZ2V0X2N1cnJlbnRfY29yZV90YXJnZXQgKCk7CisrICBpZiAodGFyZyA9PSBudWxscHRyIHx8 IGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+Y2JmZC5nZXQgKCkgPT0gbnVsbHB0cikKKysgICAgcmV0 dXJuIHt9OworKworKyAgcmV0dXJuIHRhcmctPmxvb2t1cF9tYXBwZWRfZmlsZV9pbmZvIChmaWxl bmFtZSwgYWRkcik7CisrfQorKworIHZvaWQgX2luaXRpYWxpemVfY29yZWxvdyAoKTsKKyB2b2lk CisgX2luaXRpYWxpemVfY29yZWxvdyAoKQorZGlmZiAtLWdpdCBhL2dkYi9kYXRhLWRpcmVjdG9y eS9NYWtlZmlsZS5pbiBiL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgorLS0tIGEvZ2Ri L2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluCisrKysgYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFr ZWZpbGUuaW4KK0BAIC03Nyw2ICs3Nyw4IEBAIFBZVEhPTl9GSUxFX0xJU1QgPSBcCisgCWdkYi9G cmFtZUl0ZXJhdG9yLnB5IFwKKyAJZ2RiL2ZyYW1lcy5weSBcCisgCWdkYi9taXNzaW5nX2RlYnVn LnB5IFwKKysJZ2RiL21pc3Npbmdfb2JqZmlsZS5weSBcCisrCWdkYi9taXNzaW5nX2ZpbGVzLnB5 IFwKKyAJZ2RiL3ByaW50aW5nLnB5IFwKKyAJZ2RiL3Byb21wdC5weSBcCisgCWdkYi9zdHlsaW5n LnB5IFwKK0BAIC04Niw3ICs4OCw3IEBAIFBZVEhPTl9GSUxFX0xJU1QgPSBcCisgCWdkYi9jb21t YW5kL19faW5pdF9fLnB5IFwKKyAJZ2RiL2NvbW1hbmQvZXhwbG9yZS5weSBcCisgCWdkYi9jb21t YW5kL2ZyYW1lX2ZpbHRlcnMucHkgXAorLQlnZGIvY29tbWFuZC9taXNzaW5nX2RlYnVnLnB5IFwK KysJZ2RiL2NvbW1hbmQvbWlzc2luZ19maWxlcy5weSBcCisgCWdkYi9jb21tYW5kL3ByZXR0eV9w cmludGVycy5weSBcCisgCWdkYi9jb21tYW5kL3Byb21wdC5weSBcCisgCWdkYi9jb21tYW5kL3R5 cGVfcHJpbnRlcnMucHkgXAorZGlmZiAtLWdpdCBhL2dkYi9kZWJ1Z2luZm9kLXN1cHBvcnQuYyBi L2dkYi9kZWJ1Z2luZm9kLXN1cHBvcnQuYworLS0tIGEvZ2RiL2RlYnVnaW5mb2Qtc3VwcG9ydC5j CisrKysgYi9nZGIvZGVidWdpbmZvZC1zdXBwb3J0LmMKK0BAIC00MDksNyArNDA5LDcgQEAgZGVi dWdpbmZvZF9leGVjX3F1ZXJ5IChjb25zdCB1bnNpZ25lZCBjaGFyICpidWlsZF9pZCwKKyAgIHN0 ZDo6b3B0aW9uYWw8dGFyZ2V0X3Rlcm1pbmFsOjpzY29wZWRfcmVzdG9yZV90ZXJtaW5hbF9zdGF0 ZT4gdGVybV9zdGF0ZTsKKyAKKyAgIHsKKy0gICAgdXNlcl9kYXRhIGRhdGEgKCJleGVjdXRhYmxl IGZvciIsIGZpbGVuYW1lKTsKKysgICAgdXNlcl9kYXRhIGRhdGEgKCJmaWxlIiwgZmlsZW5hbWUp OworIAorICAgICBkZWJ1Z2luZm9kX3NldF91c2VyX2RhdGEgKGMsICZkYXRhKTsKKyAgICAgaWYg KHRhcmdldF9zdXBwb3J0c190ZXJtaW5hbF9vdXJzICgpKQorQEAgLTQyMyw3ICs0MjMsNyBAQCBk ZWJ1Z2luZm9kX2V4ZWNfcXVlcnkgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1aWxkX2lkLAorICAg ICBkZWJ1Z2luZm9kX3NldF91c2VyX2RhdGEgKGMsIG51bGxwdHIpOworICAgfQorIAorLSAgcHJp bnRfb3V0Y29tZSAoZmQuZ2V0ICgpLCAiZXhlY3V0YWJsZSBmb3IiLCBmaWxlbmFtZSk7CisrICBw cmludF9vdXRjb21lIChmZC5nZXQgKCksICJmaWxlIiwgZmlsZW5hbWUpOworIAorICAgaWYgKGZk LmdldCAoKSA+PSAwKQorICAgICBkZXN0bmFtZS0+cmVzZXQgKGRuYW1lKTsKK2RpZmYgLS1naXQg YS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIvZ2RiL2RvYy9nZGIudGV4aW5mbworLS0tIGEvZ2RiL2Rv Yy9nZGIudGV4aW5mbworKysrIGIvZ2RiL2RvYy9nZGIudGV4aW5mbworQEAgLTIxNzg2LDYgKzIx Nzg2LDcgQEAKKyBAYyAoZWcgcm9vdGVkIGluIHZhbCBvZiBlbnYgdmFyIEdEQlNZTVMpIGNvdWxk IGV4aXN0IGZvciBtYXBwYWJsZSBzeW1ib2wKKyBAYyBmaWxlcy4KKyAKKytAYW5jaG9ye2NvcmUt ZmlsZSBjb21tYW5kfQorIEBraW5kZXggY29yZS1maWxlCisgQGl0ZW0gY29yZS1maWxlIEBye1t9 QHZhcntmaWxlbmFtZX1AcntdfQorIEBpdGVteCBjb3JlCitAQCAtMjQ1MzQsNiArMjQ1MzUsMTAg QEAKKyBAdGFiIEBjb2Rle3ZGaWxlOmZzdGF0fQorIEB0YWIgSG9zdCBJL08KKyAKKytAaXRlbSBA Y29kZXtob3N0aW8tc3RhdC1wYWNrZXR9CisrQHRhYiBAY29kZXt2RmlsZTpzdGF0fQorK0B0YWIg SG9zdCBJL08KKysKKyBAaXRlbSBAY29kZXtob3N0aW8tc2V0ZnMtcGFja2V0fQorIEB0YWIgQGNv ZGV7dkZpbGU6c2V0ZnN9CisgQHRhYiBIb3N0IEkvTworQEAgLTQ2Mjg5LDYgKzQ2Mjk0LDEzIEBA CisgSWYgYW4gZXJyb3Igb2NjdXJzIHRoZSByZXR1cm4gdmFsdWUgaXMgLTEuICBUaGUgZm9ybWF0 IG9mIHRoZQorIHJldHVybmVkIGJpbmFyeSBhdHRhY2htZW50IGlzIGFzIGRlc2NyaWJlZCBpbiBA cmVme3N0cnVjdCBzdGF0fS4KKyAKKytAaXRlbSB2RmlsZTpzdGF0OiBAdmFye2ZpbGVuYW1lfQor K0dldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZSBAdmFye2ZpbGVuYW1lfSBvbiB0aGUgdGFy Z2V0LgorK09uIHN1Y2Nlc3MgdGhlIGluZm9ybWF0aW9uIGlzIHJldHVybmVkIGFzIGEgYmluYXJ5 IGF0dGFjaG1lbnQKKythbmQgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgc2l6ZSBvZiB0aGlzIGF0 dGFjaG1lbnQgaW4gYnl0ZXMuCisrSWYgYW4gZXJyb3Igb2NjdXJzIHRoZSByZXR1cm4gdmFsdWUg aXMgLTEuICBUaGUgZm9ybWF0IG9mIHRoZQorK3JldHVybmVkIGJpbmFyeSBhdHRhY2htZW50IGlz IGFzIGRlc2NyaWJlZCBpbiBAcmVme3N0cnVjdCBzdGF0fS4KKysKKyBAaXRlbSB2RmlsZTp1bmxp bms6IEB2YXJ7ZmlsZW5hbWV9CisgRGVsZXRlIHRoZSBmaWxlIGF0IEB2YXJ7ZmlsZW5hbWV9IG9u IHRoZSB0YXJnZXQuICBSZXR1cm4gMCwKKyBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnMuICBUaGUg QHZhcntmaWxlbmFtZX0gaXMgYSBzdHJpbmcuCitkaWZmIC0tZ2l0IGEvZ2RiL2RvYy9weXRob24u dGV4aSBiL2dkYi9kb2MvcHl0aG9uLnRleGkKKy0tLSBhL2dkYi9kb2MvcHl0aG9uLnRleGkKKysr KyBiL2dkYi9kb2MvcHl0aG9uLnRleGkKK0BAIC0yMzEsNiArMjMxLDcgQEAKKyAqIFRVSSBXaW5k b3dzIEluIFB5dGhvbjo6ICAgICAgIEltcGxlbWVudGluZyBuZXcgVFVJIHdpbmRvd3MuCisgKiBE aXNhc3NlbWJseSBJbiBQeXRob246OiAgICAgICBJbnN0cnVjdGlvbiBEaXNhc3NlbWJseSBJbiBQ eXRob24KKyAqIE1pc3NpbmcgRGVidWcgSW5mbyBJbiBQeXRob246OiBIYW5kbGUgbWlzc2luZyBk ZWJ1ZyBpbmZvIGZyb20gUHl0aG9uLgorKyogTWlzc2luZyBPYmpmaWxlcyBJbiBQeXRob246OiAg SGFuZGxlIG9iamZpbGVzIGZyb20gUHl0aG9uLgorIEBlbmQgbWVudQorIAorIEBub2RlIEJhc2lj IFB5dGhvbgorQEAgLTUzNzAsMTAgKzUzNzEsMTEgQEAKKyBvYmplY3RzLiAgQHhyZWZ7RnJhbWUg RmlsdGVyIEFQSX0sIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIEBlbmQgZGVmdmFyCisgCistQGRl ZnZhciBQcm9nc3BhY2UubWlzc2luZ19kZWJ1Z19oYW5kbGVycworLVRoZSBAY29kZXttaXNzaW5n X2RlYnVnX2hhbmRsZXJzfSBhdHRyaWJ1dGUgaXMgYSBsaXN0IG9mIHRoZSBtaXNzaW5nCistZGVi dWcgaGFuZGxlciBvYmplY3RzIGZvciB0aGlzIHByb2dyYW0gc3BhY2UuICBAeHJlZntNaXNzaW5n IERlYnVnCistSW5mbyBJbiBQeXRob259LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKytAZGVmdmFy IFByb2dzcGFjZS5taXNzaW5nX2ZpbGVfaGFuZGxlcnMKKytUaGUgQGNvZGV7bWlzc2luZ19maWxl X2hhbmRsZXJzfSBhdHRyaWJ1dGUgaXMgYSBsaXN0IG9mIHR1cGxlcy4gIEVhY2gKKyt0dXBsZSBo b2xkcyBhIG1pc3NpbmctZmlsZSBoYW5kbGVyIG9iamVjdCBmb3IgdGhpcyBwcm9ncmFtIHNwYWNl LiAgRm9yCisrbW9yZSBpbmZvcm1hdGlvbiwgQHB4cmVme01pc3NpbmcgRGVidWcgSW5mbyBJbiBQ eXRob259LCBhbmQKKytAcmVme01pc3NpbmcgT2JqZmlsZXMgSW4gUHl0aG9ufS4KKyBAZW5kIGRl ZnZhcgorIAorIEEgcHJvZ3JhbSBzcGFjZSBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorQEAg LTU1NDksNiArNTU1MSw3IEBACisgQGNvZGV7Z2RiLk9iamZpbGUuYWRkX3NlcGFyYXRlX2RlYnVn X2ZpbGV9IG1ldGhvZCwgZGVzY3JpYmVkIGJlbG93LgorIEBlbmQgZGVmdmFyCisgCisrQGFuY2hv cntPYmpmaWxlLmJ1aWxkX2lkfQorIEBkZWZ2YXIgT2JqZmlsZS5idWlsZF9pZAorIFRoZSBidWls ZCBJRCBvZiB0aGUgb2JqZmlsZSBhcyBhIHN0cmluZy4KKyBJZiB0aGUgb2JqZmlsZSBkb2VzIG5v dCBoYXZlIGEgYnVpbGQgSUQgdGhlbiB0aGUgdmFsdWUgaXMgQGNvZGV7Tm9uZX0uCitAQCAtODEz Nyw2ICs4MTQwLDE4OSBAQAorIGZvciB0aGlzIG9iamZpbGUuCisgQGVuZCBkZWZ1bgorIAorK0Bu b2RlIE1pc3NpbmcgT2JqZmlsZXMgSW4gUHl0aG9uCisrQHN1YnN1YnNlY3Rpb24gTWlzc2luZyBP YmpmaWxlcyBJbiBQeXRob24KKytAY2luZGV4IHB5dGhvbiwgaGFuZGxlIG1pc3Npbmcgb2JqZmls ZXMKKysKKytXaGVuIEB2YWx1ZXtHREJOfSBvcGVucyBhIGNvcmUgZmlsZSwgZm9yIGV4YW1wbGUg d2l0aCB0aGUKKytAa2Jke2NvcmUtZmlsZX0gY29tbWFuZCAoQHB4cmVme2NvcmUtZmlsZSBjb21t YW5kfSksIEB2YWx1ZXtHREJOfSB3aWxsCisrYXR0ZW1wdCB0byBsb2FkIHRoZSBjb3JyZXNwb25k aW5nIGV4ZWN1dGFibGUgYW5kIHNoYXJlZCBsaWJyYXJpZXMuCisrT2Z0ZW4gdGhlc2UgZmlsZXMg Y2FuIGJlIGZvdW5kIG9uIHRoZSBsb2NhbCBtYWNoaW5lLCBidXQgc29tZXRpbWVzCisrdGhlc2Ug ZmlsZXMgY2Fubm90IGJlIGZvdW5kLCBpbiB3aGljaCBjYXNlIHRoZSBkZWJ1Z2dpbmcgZXhwZXJp ZW5jZQorK3dpbGwgYmUgcmVzdHJpY3RlZC4KKysKKytJZiBAdmFsdWV7R0RCTn0gZmFpbHMgdG8g bG9jYXRlIGEgcGFydGljdWxhciBmaWxlIHRoZW4gdGhlcmUgaXMgYW4KKytvcHBvcnR1bml0eSBm b3IgYSBQeXRob24gZXh0ZW5zaW9uIHRvIHN0ZXAgaW4uICBBIFB5dGhvbiBleHRlbnNpb24gY2Fu CisrcG90ZW50aWFsbHkgbG9jYXRlIHRoZSBtaXNzaW5nIGZpbGUgdXNpbmcgc29tZSBwbGF0Zm9y bS0gb3IKKytwcm9qZWN0LXNwZWNpZmljIHN0ZXBzLCBhbmQgaW5mb3JtIEB2YWx1ZXtHREJOfSBv ZiBpdHMgbG9jYXRpb24uICBPciBhCisrUHl0aG9uIGV4dGVuc2lvbiBtaWdodCBwcm92aWRlIHNv bWUgcGxhdGZvcm0tIG9yIHByb2plY3Qtc3BlY2lmaWMKKythZHZpY2UgdG8gdGhlIHVzZXIgYWJv dXQgaG93IHRvIG9idGFpbiB0aGUgbWlzc2luZyBmaWxlLgorKworK0EgbWlzc2luZy1vYmpmaWxl IFB5dGhvbiBleHRlbnNpb24gY29uc2lzdHMgb2YgYSBoYW5kbGVyIG9iamVjdCB3aGljaAorK2hh cyB0aGUgQGNvZGV7bmFtZX0gYW5kIEBjb2Rle2VuYWJsZWR9IGF0dHJpYnV0ZXMsIGFuZCBpbXBs ZW1lbnRzIHRoZQorK0Bjb2Rle19fY2FsbF9ffSBtZXRob2QuICBXaGVuIEB2YWx1ZXtHREJOfSBl bmNvdW50ZXJzIGEgc2l0dWF0aW9uCisrd2hlcmUgYSBmaWxlIGNhbm5vdCBiZSBmb3VuZCwgYnV0 IHRoZSBidWlsZC1pZCAoQHB4cmVme2J1aWxkIElEfSkgZm9yCisrdGhlIG1pc3NpbmcgZmlsZSBp cyBrbm93biwgdGhlbiB0aGUgQGNvZGV7X19jYWxsX199IG1ldGhvZCBpcyBpbnZva2VkCisrdG8g dHJ5IGFuZCBmaW5kIHRoZSBmaWxlLiAgRnVsbCBkZXRhaWxzIG9mIGhvdyBoYW5kbGVycyBhcmUg d3JpdHRlbgorK2NhbiBiZSBmb3VuZCBiZWxvdy4KKysKKytAc3ViaGVhZGluZyBUaGUgQGNvZGV7 Z2RiLm1pc3Npbmdfb2JqZmlsZX0gTW9kdWxlCisrCisrQHZhbHVle0dEQk59IGNvbWVzIHdpdGgg YSBAY29kZXtnZGIubWlzc2luZ19vYmpmaWxlfSBtb2R1bGUgd2hpY2gKKytjb250YWlucyB0aGUg Zm9sbG93aW5nIGNsYXNzIGFuZCBnbG9iYWwgZnVuY3Rpb246CisrCisrQGRlZnRwe2NsYXNzfSBn ZGIubWlzc2luZ19vYmpmaWxlLk1pc3NpbmdPYmpmaWxlSGFuZGxlcgorKworK0Bjb2Rle01pc3Np bmdPYmpmaWxlSGFuZGxlcn0gaXMgYSBiYXNlIGNsYXNzIGZyb20gd2hpY2ggdXNlci1jcmVhdGVk CisraGFuZGxlcnMgY2FuIGRlcml2ZSwgdGhvdWdoIGl0IGlzIG5vdCByZXF1aXJlZCB0aGF0IGhh bmRsZXJzIGRlcml2ZQorK2Zyb20gdGhpcyBjbGFzcywgc28gbG9uZyBhcyBhbnkgdXNlciBjcmVh dGVkIGhhbmRsZXIgaGFzIHRoZQorK0Bjb2Rle25hbWV9IGFuZCBAY29kZXtlbmFibGVkfSBhdHRy aWJ1dGVzLCBhbmQgaW1wbGVtZW50cyB0aGUKKytAY29kZXtfX2NhbGxfX30gbWV0aG9kLgorKwor K0BkZWZ1biBNaXNzaW5nT2JqZmlsZUhhbmRsZXIuX19pbml0X18gKG5hbWUpCisrVGhlIEB2YXJ7 bmFtZX0gaXMgYSBzdHJpbmcgdXNlZCB0byByZWZlcmVuY2UgdGhpcyBtaXNzaW5nLW9iamZpbGUK KytoYW5kbGVyIHdpdGhpbiBzb21lIEB2YWx1ZXtHREJOfSBjb21tYW5kcy4gIFZhbGlkIG5hbWVz IGNvbnNpc3Qgb2YgdGhlCisrY2hhcmFjdGVycyBAc2FtcHtbLV9hLXpBLVowLTldfSwgY3JlYXRp bmcgYSBoYW5kbGVyIHdpdGggYW4gaW52YWxpZAorK25hbWUgcmFpc2VzIGEgQGNvZGV7VmFsdWVF cnJvcn0gZXhjZXB0aW9uLgorK0BlbmQgZGVmdW4KKysKKytAZGVmdW4gTWlzc2luZ09iamZpbGVI YW5kbGVyLl9fY2FsbF9fIChwc3BhY2UsIGJ1aWxkX2lkLCBmaWxlbmFtZSkKKysKKytTdWItY2xh c3NlcyBtdXN0IG92ZXJyaWRlIHRoZSBAY29kZXtfX2NhbGxfX30gbWV0aG9kLiAgVGhlCisrQHZh cntwc3BhY2V9IGFyZ3VtZW50IHdpbGwgYmUgYSBAY29kZXtnZGIuUHJvZ3NwYWNlfQorKyhAcHhy ZWZ7UHJvZ3NwYWNlcyBJbiBQeXRob259KSwgdGhpcyBpcyB0aGUgcHJvZ3JhbSBzcGFjZSBpbiB3 aGljaAorK0B2YWx1ZXtHREJOfSBpcyBsb29raW5nIGZvciB0aGUgbWlzc2luZyBmaWxlLgorKwor K1RoZSBAdmFye2J1aWxkX2lkfSBhcmd1bWVudCBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBi dWlsZC1pZCBvZiB0aGUKKytmaWxlIHRoYXQgaXMgbWlzc2luZywgdGhpcyB3aWxsIGJlIGluIHRo ZSBzYW1lIGZvcm1hdCBhcyByZXR1cm5lZCBieQorK0Bjb2Rle09iamZpbGUuYnVpbGRfaWR9IChA cHhyZWZ7T2JqZmlsZS5idWlsZF9pZH0pLgorKworK1RoZSBAdmFye2ZpbGVuYW1lfSBhcmd1bWVu dCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0CisrQHZhbHVle0dEQk59IGlzIGxv b2tpbmcgZm9yLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCB0byBhbGxvdworK2hhbmRs ZXJzIHRvIGdlbmVyYXRlIGluZm9ybWF0aXZlIG1lc3NhZ2VzIGZvciB0aGUgdXNlci4gIEEgaGFu ZGxlciBpcworK25vdCByZXF1aXJlZCB0byBwbGFjZSB0aGUgbWlzc2luZyBmaWxlIGF0IHRoaXMg bG9jYXRpb24uICBUaGVyZSBtaWdodAorK2FscmVhZHkgYmUgYSBmaWxlIHByZXNlbnQgYXQgdGhp cyBsb2NhdGlvbiwgYnV0IGl0IG1pZ2h0IG5vdCBtYXRjaCB0aGUKKytyZXF1aXJlZCBidWlsZC1p ZCwgaW4gd2hpY2ggY2FzZSBAdmFsdWV7R0RCTn0gd2lsbCBoYXZlIGlnbm9yZWQgaXQuCisrSW4g c29tZSBsaW1pdGVkIGNhc2VzIEB2YWx1ZXtHREJOfSBtaWdodCBub3QgYmUgYWJsZSB0byBlc3Rh Ymxpc2ggdGhlCisrQHZhcntmaWxlbmFtZX0gb2YgdGhlIGZpbGUgaXQgaXMgc2VhcmNoaW5nIGZv ciwgaW4gdGhpcyBjYXNlCisrQHZhbHVle0dEQk59IHdpbGwgdXNlIGEgc3RyaW5nIEBzYW1we3dp dGggYnVpbGQtaWQgQHZhcntidWlsZF9pZH19IGFzIGEKKytyZXBsYWNlbWVudC4KKysKKytUaGUg cmV0dXJuIHZhbHVlIGZyb20gdGhlIEBjb2Rle19fY2FsbF9ffSBtZXRob2QgaW5kaWNhdGVzIHdo YXQKKytAdmFsdWV7R0RCTn0gc2hvdWxkIGRvIG5leHQuICBUaGUgcG9zc2libGUgcmV0dXJuIHZh bHVlcyBhcmU6CisrCisrQGl0ZW1pemUgQGJ1bGxldAorK0BpdGVtIEBjb2Rle05vbmV9CisrCisr VGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGlzIGhhbmRsZXIgY291bGQgbm90IGxvY2F0ZSB0aGUgbWlz c2luZyBmaWxlIGFuZAorK0B2YWx1ZXtHREJOfSBzaG91bGQgY2FsbCBhbnkgb3RoZXIgcmVnaXN0 ZXJlZCBoYW5kbGVycy4KKysKKytAaXRlbSBAY29kZXtUcnVlfQorKworK1RoaXMgaW5kaWNhdGVz IHRoYXQgdGhpcyBoYW5kbGVyIGhhcyBpbnN0YWxsZWQgdGhlIG1pc3NpbmcgZmlsZSBpbnRvIGEK Kytsb2NhdGlvbiB3aGVyZSBAdmFsdWV7R0RCTn0gd291bGQgbm9ybWFsbHkgZXhwZWN0IHRvIGZp bmQgaXQuICBUaGUKKytvbmx5IGxvY2F0aW9uIGluIHdoaWNoIEB2YWx1ZXtHREJOfSB3aWxsIGxv b2sgaXMgd2l0aGluIHRoZQorK0BmaWxley5idWlsZC1pZH0gc3ViLWRpcmVjdG9yeSB3aXRoaW4g dGhlIEB2YXJ7ZGVidWctZmlsZS1kaXJlY3Rvcnl9CisrKEBweHJlZntkZWJ1Zy1maWxlLWRpcmVj dG9yeX0pLgorKworK0B2YWx1ZXtHREJOfSB3aWxsIHJlcGVhdCB0aGUgbm9ybWFsIGxvb2t1cCBw cm9jZXNzLCB3aGljaCBzaG91bGQgbm93CisrZmluZCB0aGUgcHJldmlvdXNseSBtaXNzaW5nIGZp bGUuCisrCisrSWYgQHZhbHVle0dEQk59IHN0aWxsIGRvZXNuJ3QgZmluZCBmaWxlIGFmdGVyIHRo aXMgc2Vjb25kIGF0dGVtcHQsCisrdGhlbiB0aGUgUHl0aG9uIG1pc3Npbmctb2JqZmlsZSBoYW5k bGVycyBhcmUgbm90IGludm9rZWQgYSBzZWNvbmQKKyt0aW1lLCB0aGlzIHByZXZlbnRzIGEgYmFk bHkgYmVoYXZlZCBoYW5kbGVyIGNhdXNpbmcgQHZhbHVle0dEQk59IHRvCisrZ2V0IHN0dWNrIGlu IGEgbG9vcC4gIEB2YWx1ZXtHREJOfSB3aWxsIGNvbnRpbnVlIHdpdGhvdXQgdGhlIG1pc3NpbmcK KytmaWxlLCB0aG91Z2ggdGhpcyB3aWxsIGRlZ3JhZGUgdGhlIGRlYnVnZ2luZyBleHBlcmllbmNl LgorKworK0BpdGVtIEBjb2Rle0ZhbHNlfQorKworK1RoaXMgaW5kaWNhdGVzIHRoYXQgdGhpcyBo YW5kbGVyIGhhcyBkb25lIGV2ZXJ5dGhpbmcgdGhhdCBpdCBpbnRlbmRzCisrdG8gZG8gYnV0IHRo ZSBtaXNzaW5nIGZpbGUgY291bGQgbm90IGJlIGZvdW5kLiAgQHZhbHVle0dEQk59IHdpbGwgbm90 CisrY2FsbCBhbnkgb3RoZXIgcmVnaXN0ZXJlZCBoYW5kbGVycyB0byBsb29rIGZvciB0aGUgbWlz c2luZyBmaWxlLgorK0B2YWx1ZXtHREJOfSB3aWxsIGNvbnRpbnVlIHdpdGhvdXQgdGhlIG1pc3Np bmcgZmlsZSwgdGhvdWdoIHRoaXMgd2lsbAorK2RlZ3JhZGUgdGhlIGRlYnVnZ2luZyBleHBlcmll bmNlLgorKworK0BpdGVtIEEgc3RyaW5nCisrCisrVGhlIHJldHVybmVkIHN0cmluZyBzaG91bGQg Y29udGFpbiBhIGZpbGVuYW1lLiAgQHZhbHVle0dEQk59IHdpbGwgbm90CisrY2FsbCBhbnkgZnVy dGhlciByZWdpc3RlcmVkIGhhbmRsZXJzLCBhbmQgd2lsbCBpbnN0ZWFkIHVzZSB0aGUKKytyZXR1 cm5lZCBmaWxlbmFtZSBhcyB0aGUgbWlzc2luZyBmaWxlLgorK0BlbmQgaXRlbWl6ZQorKworK0lu dm9raW5nIHRoZSBAY29kZXtfX2NhbGxfX30gbWV0aG9kIGZyb20gdGhpcyBiYXNlIGNsYXNzIHdp bGwgcmFpc2UgYQorK0Bjb2Rle05vdEltcGxlbWVudGVkRXJyb3J9IGV4Y2VwdGlvbi4KKytAZW5k IGRlZnVuCisrCisrQGRlZnZhciBNaXNzaW5nT2JqZmlsZUhhbmRsZXIubmFtZQorK0EgcmVhZC1v bmx5IGF0dHJpYnV0ZSB3aGljaCBpcyBhIHN0cmluZywgdGhlIG5hbWUgb2YgdGhpcyBoYW5kbGVy CisrcGFzc2VkIHRvIHRoZSBAY29kZXtfX2luaXRfX30gbWV0aG9kLgorK0BlbmQgZGVmdmFyCisr CisrQGRlZnZhciBNaXNzaW5nT2JqZmlsZUhhbmRsZXIuZW5hYmxlZAorK0EgbW9kaWZpYWJsZSBh dHRyaWJ1dGUgY29udGFpbmluZyBhIGJvb2xlYW47IHdoZW4gQGNvZGV7VHJ1ZX0sIHRoZQorK2hh bmRsZXIgaXMgZW5hYmxlZCwgYW5kIHdpbGwgYmUgdXNlZCBieSBAdmFsdWV7R0RCTn0uICBXaGVu CisrQGNvZGV7RmFsc2V9LCB0aGUgaGFuZGxlciBoYXMgYmVlbiBkaXNhYmxlZCwgYW5kIHdpbGwg bm90IGJlIHVzZWQuCisrQGVuZCBkZWZ2YXIKKytAZW5kIGRlZnRwCisrCisrQGRlZnVuIGdkYi5t aXNzaW5nX29iamZpbGUucmVnaXN0ZXJfaGFuZGxlciAobG9jdXMsIGhhbmRsZXIsIHJlcGxhY2U9 QGNvZGV7RmFsc2V9KQorK1JlZ2lzdGVyIGEgbmV3IG1pc3Npbmctb2JqZmlsZSBoYW5kbGVyIHdp dGggQHZhbHVle0dEQk59LgorKworK0B2YXJ7aGFuZGxlcn0gaXMgYW4gaW5zdGFuY2Ugb2YgYSBz dWItY2xhc3Mgb2YKKytAY29kZXtNaXNzaW5nT2JqZmlsZUhhbmRsZXJ9LCBvciBhdCBsZWFzdCBh biBpbnN0YW5jZSBvZiBhbiBvYmplY3QgdGhhdAorK2hhcyB0aGUgc2FtZSBhdHRyaWJ1dGVzIGFu ZCBtZXRob2RzIGFzIEBjb2Rle01pc3NpbmdPYmpmaWxlSGFuZGxlcn0uCisrCisrQHZhcntsb2N1 c30gc3BlY2lmaWVzIHRvIHdoaWNoIGhhbmRsZXIgbGlzdCB0byBwcmVwZW5kIEB2YXJ7aGFuZGxl cn0uCisrSXQgY2FuIGJlIGVpdGhlciBhIEBjb2Rle2dkYi5Qcm9nc3BhY2V9IChAcHhyZWZ7UHJv Z3NwYWNlcyBJbiBQeXRob259KQorK29yIEBjb2Rle05vbmV9LCBpbiB3aGljaCBjYXNlIHRoZSBo YW5kbGVyIGlzIHJlZ2lzdGVyZWQgZ2xvYmFsbHkuICBUaGUKKytuZXdseSByZWdpc3RlcmVkIEB2 YXJ7aGFuZGxlcn0gd2lsbCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBoYW5kbGVyCisrZnJv bSB0aGUgc2FtZSBsb2N1cy4gIFR3byBoYW5kbGVycyBpbiB0aGUgc2FtZSBsb2N1cyBjYW5ub3Qg aGF2ZSB0aGUKKytzYW1lIG5hbWUsIGFuIGF0dGVtcHQgdG8gYWRkIGEgaGFuZGxlciB3aXRoIGFu IGFscmVhZHkgZXhpc3RpbmcgbmFtZQorK3JhaXNlcyBhbiBleGNlcHRpb24gdW5sZXNzIEB2YXJ7 cmVwbGFjZX0gaXMgQGNvZGV7VHJ1ZX0sIGluIHdoaWNoIGNhc2UKKyt0aGUgb2xkIGhhbmRsZXIg aXMgZGVsZXRlZCBhbmQgdGhlIG5ldyBoYW5kbGVyIGlzIHByZXBlbmRlZCB0byB0aGUKKytzZWxl Y3RlZCBoYW5kbGVyIGxpc3QuCisrCisrQHZhbHVle0dEQk59IGZpcnN0IGNhbGxzIHRoZSBoYW5k bGVycyBmb3IgdGhlIGN1cnJlbnQgcHJvZ3JhbSBzcGFjZSwKKythbmQgdGhlbiB0aGUgZ2xvYmFs bHkgcmVnaXN0ZXJlZCBoYW5kbGVycy4gIEFzIHNvb24gYXMgYSBoYW5kbGVyCisrcmV0dXJucyBh IHZhbHVlIG90aGVyIHRoYW4gQGNvZGV7Tm9uZX0sIG5vIGZ1cnRoZXIgaGFuZGxlcnMgYXJlCisr Y2FsbGVkLgorK0BlbmQgZGVmdW4KKysKKytAc3ViaGVhZGluZyBNYW5hZ2luZyBNaXNzaW5nLU9i amZpbGUgSGFuZGxlcnMKKysKKytAdmFsdWV7R0RCTn0gZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNv bW1hbmRzIHRvIG1hbmFnZSByZWdpc3RlcmVkCisrbWlzc2luZy1vYmpmaWxlIGhhbmRsZXJzOgor KworK0B0YWJsZSBAY29kZQorKworK0BraW5kZXggaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxl cnMKKytAaXRlbSBpbmZvIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVycyBAcntbfSBAdmFye2xvY3Vz fSBAcntbfSBAdmFye25hbWUtcmVnZXhwfSBAcntdfSBAcntdfQorK0xpc3RzIGFsbCByZWdpc3Rl cmVkIG1pc3Npbmctb2JqZmlsZSBoYW5kbGVycy4gIEFyZ3VtZW50cyBAdmFye2xvY3VzfQorK2Fu ZCBAdmFye25hbWUtcmVnZXhwfSBhcmUgYm90aCBvcHRpb25hbCBhbmQgY2FuIGJlIHVzZWQgdG8g ZmlsdGVyCisrd2hpY2ggaGFuZGxlcnMgYXJlIGxpc3RlZC4KKysKKytUaGUgQHZhcntsb2N1c30g YXJndW1lbnQgc2hvdWxkIGJlIGVpdGhlciBAa2Jke2dsb2JhbH0sCisrQGtiZHtwcm9nc3BhY2V9 LCBvciB0aGUgbmFtZSBvZiBhbiBvYmplY3QgZmlsZS4gIE9ubHkgaGFuZGxlcnMKKytyZWdpc3Rl cmVkIGZvciB0aGUgc3BlY2lmaWVkIGxvY3VzIHdpbGwgYmUgbGlzdGVkLgorKworK1RoZSBAdmFy e25hbWUtcmVnZXhwfSBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIG1hdGNoIGFnYWlu c3QKKytoYW5kbGVyIG5hbWVzLgorKworK0BraW5kZXggZGlzYWJsZSBtaXNzaW5nLW9iamZpbGUt aGFuZGxlcgorK0BpdGVtIGRpc2FibGUgbWlzc2luZy1vYmpmaWxlLWhhbmRsZXIgQHJ7W30gQHZh cntsb2N1c30gQHJ7W30gQHZhcntuYW1lLXJlZ2V4cH0gQHJ7XX0gQHJ7XX0KKytUaGUgQHZhcnts b2N1c30gYW5kIEB2YXJ7bmFtZS1yZWdleHB9IGFyZSBpbnRlcnByZXRlZCBhcyBpbiBAa2Jke2lu Zm8KKyttaXNzaW5nLW9iamZpbGUtaGFuZGxlcnN9IGFib3ZlLCBidXQgaW5zdGVhZCBvZiBsaXN0 aW5nIHRoZSBtYXRjaGluZworK2hhbmRsZXJzLCBhbGwgb2YgdGhlIG1hdGNoaW5nIGhhbmRsZXJz IGFyZSBkaXNhYmxlZC4gIFRoZQorK0Bjb2Rle2VuYWJsZWR9IGZpZWxkIG9mIGVhY2ggbWF0Y2hp bmcgaGFuZGxlciBpcyBzZXQgdG8gQGNvZGV7RmFsc2V9LgorKworK0BraW5kZXggZW5hYmxlIG1p c3Npbmctb2JqZmlsZS1oYW5kbGVyCisrQGl0ZW0gZW5hYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5k bGVyIEBye1t9IEB2YXJ7bG9jdXN9IEBye1t9IEB2YXJ7bmFtZS1yZWdleHB9IEBye119IEBye119 CisrVGhlIEB2YXJ7bG9jdXN9IGFuZCBAdmFye25hbWUtcmVnZXhwfSBhcmUgaW50ZXJwcmV0ZWQg YXMgaW4gQGtiZHtpbmZvCisrbWlzc2luZy1vYmpmaWxlLWhhbmRsZXJzfSBhYm92ZSwgYnV0IGlu c3RlYWQgb2YgbGlzdGluZyB0aGUgbWF0Y2hpbmcKKytoYW5kbGVycywgYWxsIG9mIHRoZSBtYXRj aGluZyBoYW5kbGVycyBhcmUgZW5hYmxlZC4gIFRoZQorK0Bjb2Rle2VuYWJsZWR9IGZpZWxkIG9m IGVhY2ggbWF0Y2hpbmcgaGFuZGxlciBpcyBzZXQgdG8gQGNvZGV7VHJ1ZX0uCisrQGVuZCB0YWJs ZQorKworIEBub2RlIFB5dGhvbiBBdXRvLWxvYWRpbmcKKyBAc3Vic2VjdGlvbiBQeXRob24gQXV0 by1sb2FkaW5nCisgQGNpbmRleCBQeXRob24gYXV0by1sb2FkaW5nCitkaWZmIC0tZ2l0IGEvZ2Ri L2V4dGVuc2lvbi1wcml2LmggYi9nZGIvZXh0ZW5zaW9uLXByaXYuaAorLS0tIGEvZ2RiL2V4dGVu c2lvbi1wcml2LmgKKysrKyBiL2dkYi9leHRlbnNpb24tcHJpdi5oCitAQCAtMjg3LDkgKzI4Nywy MiBAQCBzdHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX29wcworICAgLyogR2l2ZSBleHRlbnNpb24g bGFuZ3VhZ2VzIGEgY2hhbmNlIHRvIGRlYWwgd2l0aCBtaXNzaW5nIGRlYnVnCisgICAgICBpbmZv cm1hdGlvbi4gIE9CSkZJTEUgaXMgdGhlIGZpbGUgZm9yIHdoaWNoIEdEQiB3YXMgdW5hYmxlIHRv IGZpbmQKKyAgICAgIGFueSBkZWJ1ZyBpbmZvcm1hdGlvbi4gICovCistICBleHRfbGFuZ19taXNz aW5nX2RlYnVnaW5mb19yZXN1bHQKKysgIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQKKyAg ICAgKCpoYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8pIChjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9uX2xh bmd1YWdlX2RlZm4gKiwKKyAJCQkJIHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKTsKKysKKysgIC8q IEdpdmUgZXh0ZW5zaW9uIGxhbmd1YWdlcyBhIGNoYW5jZSB0byBkZWFsIHdpdGggbWlzc2luZyBv YmpmaWxlcy4KKysgICAgIFBTUEFDRSBpcyB0aGUgcHJvZ3JhbSBzcGFjZSBpbiB3aGljaCBHREIg aXMgc2VhcmNoaW5nIGZvciBhIG1pc3NpbmcKKysgICAgIG9iamZpbGUsIGFuZCB3aWxsIG5vdCBi ZSBOVUxMLiAgQlVJTERfSUQgaXMgdGhlIGJ1aWxkLWlkIG9mIHRoZQorKyAgICAgb2JqZmlsZSB3 ZSdyZSBsb29raW5nIGZvciwgYW5kIHdpbGwgbm90IGJlIE5VTEwuICBGSUxFTkFNRSBpcyB0aGUg bmFtZQorKyAgICAgb2YgdGhlIGZpbGUgd2UncmUgbG9va2luZyBmb3IsIGFuZCB3aWxsIG5vdCBi ZSBOVUxMLiAgU2VlCisrICAgICBleHRfbGFuZ19maW5kX29iamZpbGVfZnJvbV9idWlsZGlkIGZv ciBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKysgICAgIGFib3V0IHRoZSBtZWFuaW5nIG9m IEZJTEVOQU1FLiAgKi8KKysgIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQKKysgICAgKCpm aW5kX29iamZpbGVfZnJvbV9idWlsZGlkKSAoY29uc3Qgc3RydWN0IGV4dGVuc2lvbl9sYW5ndWFn ZV9kZWZuICosCisrCQkJCSAgcHJvZ3JhbV9zcGFjZSAqcHNwYWNlLAorKwkJCQkgIGNvbnN0IHN0 cnVjdCBiZmRfYnVpbGRfaWQgKmJ1aWxkX2lkLAorKwkJCQkgIGNvbnN0IGNoYXIgKmZpbGVuYW1l KTsKKyB9OworIAorIC8qIFN0YXRlIG5lY2Vzc2FyeSB0byByZXN0b3JlIGEgc2lnbmFsIGhhbmRs ZXIgdG8gaXRzIHByZXZpb3VzIHZhbHVlLiAgKi8KK2RpZmYgLS1naXQgYS9nZGIvZXh0ZW5zaW9u LmMgYi9nZGIvZXh0ZW5zaW9uLmMKKy0tLSBhL2dkYi9leHRlbnNpb24uYworKysrIGIvZ2RiL2V4 dGVuc2lvbi5jCitAQCAtMTA0MCw3ICsxMDQwLDcgQEAgZXh0X2xhbmdfcHJpbnRfaW5zbiAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gsIENPUkVfQUREUiBhZGRyZXNzLAorIAorIC8qIFNlZSBleHRl bnNpb24uaC4gICovCisgCistZXh0X2xhbmdfbWlzc2luZ19kZWJ1Z2luZm9fcmVzdWx0CisrZXh0 X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdAorIGV4dF9sYW5nX2hhbmRsZV9taXNzaW5nX2RlYnVn aW5mbyAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUpCisgeworICAgZm9yIChjb25zdCBzdHJ1Y3Qg ZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKmV4dGxhbmcgOiBleHRlbnNpb25fbGFuZ3VhZ2VzKQor QEAgLTEwNDgsNyArMTA0OCw3IEBAIGV4dF9sYW5nX2hhbmRsZV9taXNzaW5nX2RlYnVnaW5mbyAo c3RydWN0IG9iamZpbGUgKm9iamZpbGUpCisgICAgICAgaWYgKGV4dGxhbmctPm9wcyA9PSBudWxs cHRyCisgCSAgfHwgZXh0bGFuZy0+b3BzLT5oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8gPT0gbnVs bHB0cikKKyAJY29udGludWU7CistICAgICAgZXh0X2xhbmdfbWlzc2luZ19kZWJ1Z2luZm9fcmVz dWx0IHJlc3VsdAorKyAgICAgIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgcmVzdWx0Cisg CT0gZXh0bGFuZy0+b3BzLT5oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8gKGV4dGxhbmcsIG9iamZp bGUpOworICAgICAgIGlmICghcmVzdWx0LmZpbGVuYW1lICgpLmVtcHR5ICgpIHx8IHJlc3VsdC50 cnlfYWdhaW4gKCkpCisgCXJldHVybiByZXN1bHQ7CitAQCAtMTA1Nyw2ICsxMDU3LDI4IEBAIGV4 dF9sYW5nX2hhbmRsZV9taXNzaW5nX2RlYnVnaW5mbyAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUp CisgICByZXR1cm4ge307CisgfQorIAorKy8qIFNlZSBleHRlbnNpb24uaC4gICovCisrCisrZXh0 X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdAorK2V4dF9sYW5nX2ZpbmRfb2JqZmlsZV9mcm9tX2J1 aWxkaWQgKHByb2dyYW1fc3BhY2UgKnBzcGFjZSwKKysJCQkJICAgIGNvbnN0IHN0cnVjdCBiZmRf YnVpbGRfaWQgKmJ1aWxkX2lkLAorKwkJCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpCisrewor KyAgZm9yIChjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKmV4dGxhbmcgOiBl eHRlbnNpb25fbGFuZ3VhZ2VzKQorKyAgICB7CisrICAgICAgaWYgKGV4dGxhbmctPm9wcyA9PSBu dWxscHRyCisrCSAgfHwgZXh0bGFuZy0+b3BzLT5maW5kX29iamZpbGVfZnJvbV9idWlsZGlkID09 IG51bGxwdHIpCisrCWNvbnRpbnVlOworKyAgICAgIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1 bHQgcmVzdWx0CisrCT0gZXh0bGFuZy0+b3BzLT5maW5kX29iamZpbGVfZnJvbV9idWlsZGlkIChl eHRsYW5nLCBwc3BhY2UsIGJ1aWxkX2lkLAorKwkJCQkJCSAgIGZpbGVuYW1lKTsKKysgICAgICBp ZiAoIXJlc3VsdC5maWxlbmFtZSAoKS5lbXB0eSAoKSB8fCByZXN1bHQudHJ5X2FnYWluICgpKQor KwlyZXR1cm4gcmVzdWx0OworKyAgICB9CisrCisrICByZXR1cm4ge307CisrfQorKworIC8qIENh bGxlZCB2aWEgYW4gb2JzZXJ2ZXIgYmVmb3JlIGdkYiBwcmludHMgaXRzIHByb21wdC4KKyAgICBJ dGVyYXRlIG92ZXIgdGhlIGV4dGVuc2lvbiBsYW5ndWFnZXMgZ2l2aW5nIHRoZW0gYSBjaGFuY2Ug dG8KKyAgICBjaGFuZ2UgdGhlIHByb21wdC4gIFRoZSBmaXJzdCBvbmUgdG8gY2hhbmdlIHRoZSBw cm9tcHQgd2lucywKK2RpZmYgLS1naXQgYS9nZGIvZXh0ZW5zaW9uLmggYi9nZGIvZXh0ZW5zaW9u LmgKKy0tLSBhL2dkYi9leHRlbnNpb24uaAorKysrIGIvZ2RiL2V4dGVuc2lvbi5oCitAQCAtMzYs NiArMzYsNyBAQCBzdHJ1Y3QgdWlfZmlsZTsKKyBzdHJ1Y3QgdWlfb3V0OworIHN0cnVjdCB2YWx1 ZTsKKyBzdHJ1Y3QgdmFsdWVfcHJpbnRfb3B0aW9uczsKKytzdHJ1Y3QgcHJvZ3JhbV9zcGFjZTsK KyAKKyAvKiBBIGZ1bmN0aW9uIHRvIGxvYWQgYW5kIHByb2Nlc3MgYSBzY3JpcHQgZmlsZS4KKyAg ICBUaGUgZmlsZSBoYXMgYmVlbiBvcGVuZWQgYW5kIGlzIHJlYWR5IHRvIGJlIHJlYWQgZnJvbSB0 aGUgYmVnaW5uaW5nLgorQEAgLTM1OCwyMyArMzU5LDIzIEBAIGV4dGVybiBzdGQ6Om9wdGlvbmFs PGludD4gZXh0X2xhbmdfcHJpbnRfaW5zbgorICAgIGl0LiAgQW5kIHRoZSB0aGlyZCBvcHRpb24g aXMgZm9yIHRoZSBleHRlbnNpb24gdG8ganVzdCByZXR1cm4gYSBudWxsCisgICAgcmVzdWx0LCBp bmRpY2F0aW9uIHRoZXJlIGlzIG5vdGhpbmcgdGhlIGV4dGVuc2lvbiBjYW4gZG8gdG8gcHJvdmlk ZSB0aGUKKyAgICBtaXNzaW5nIGRlYnVnIGluZm9ybWF0aW9uLiAgKi8KKy1zdHJ1Y3QgZXh0X2xh bmdfbWlzc2luZ19kZWJ1Z2luZm9fcmVzdWx0Cisrc3RydWN0IGV4dF9sYW5nX21pc3NpbmdfZmls ZV9yZXN1bHQKKyB7CisgICAvKiBEZWZhdWx0IHJlc3VsdC4gIFRoZSBleHRlbnNpb24gd2FzIHVu YWJsZSB0byBwcm92aWRlIHRoZSBtaXNzaW5nIGRlYnVnCisgICAgICBpbmZvLiAgKi8KKy0gIGV4 dF9sYW5nX21pc3NpbmdfZGVidWdpbmZvX3Jlc3VsdCAoKQorKyAgZXh0X2xhbmdfbWlzc2luZ19m aWxlX3Jlc3VsdCAoKQorICAgeyAvKiBOb3RoaW5nLiAgKi8gfQorIAorICAgLyogV2hlbiBUUllf QUdBSU4gaXMgdHJ1ZSBHREIgc2hvdWxkIHRyeSBzZWFyY2hpbmcgYWdhaW4sIHRoZSBleHRlbnNp b24KKyAgICAgIG1heSBoYXZlIGluc3RhbGxlZCB0aGUgbWlzc2luZyBkZWJ1ZyBpbmZvIGludG8g YSBzdWl0YWJsZSBsb2NhdGlvbi4KKyAgICAgIFdoZW4gVFJZX0FHQUlOIGlzIGZhbHNlIHRoaXMg aXMgZXF1aXZhbGVudCB0byB0aGUgZGVmYXVsdCwgbm8KKyAgICAgIGFyZ3VtZW50LCBjb25zdHJ1 Y3Rvci4gICovCistICBleHRfbGFuZ19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQgKGJvb2wgdHJ5 X2FnYWluKQorKyAgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCAoYm9vbCB0cnlfYWdhaW4p CisgICAgIDogbV90cnlfYWdhaW4gKHRyeV9hZ2FpbikKKyAgIHsgLyogTm90aGluZy4gICovIH0K KyAKKyAgIC8qIExvb2sgaW4gRklMRU5BTUUgZm9yIHRoZSBtaXNzaW5nIGRlYnVnIGluZm8uICAq LworLSAgZXh0X2xhbmdfbWlzc2luZ19kZWJ1Z2luZm9fcmVzdWx0IChzdGQ6OnN0cmluZyAmJmZp bGVuYW1lKQorKyAgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCAoc3RkOjpzdHJpbmcgJiZm aWxlbmFtZSkKKyAgICAgOiBtX2ZpbGVuYW1lIChzdGQ6Om1vdmUgKGZpbGVuYW1lKSkKKyAgIHsg LyogTm90aGluZy4gICovIH0KKyAKK0BAIC00MDQsOSArNDA1LDI4IEBAIHN0cnVjdCBleHRfbGFu Z19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQKKyAKKyAvKiBDYWxsZWQgd2hlbiBHREIgZmFpbGVk IHRvIGZpbmQgYW55IGRlYnVnIGluZm9ybWF0aW9uIGZvciBPQkpGSUxFLiAgKi8KKyAKKy1leHRl cm4gZXh0X2xhbmdfbWlzc2luZ19kZWJ1Z2luZm9fcmVzdWx0IGV4dF9sYW5nX2hhbmRsZV9taXNz aW5nX2RlYnVnaW5mbworK2V4dGVybiBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0IGV4dF9s YW5nX2hhbmRsZV9taXNzaW5nX2RlYnVnaW5mbworICAgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxl KTsKKyAKKysvKiBDYWxsZWQgd2hlbiBHREIgb3BlbnMgYSBjb3JlLWZpbGUgdG8gZmluZCBhbnkg b2JqZWN0IGZpbGVzIGZvciB3aGljaCBhCisrICAgYnVpbGQtaWQgY291bGQgYmUgZXh0cmFjdGVk IGZyb20gdGhlIGNvcmUtZmlsZSwgYnV0IHRoZSBtYXRjaGluZyBmaWxlCisrICAgY291bGQgbm90 IG90aGVyd2lzZSBiZSBmb3VuZCBieSBHREIuCisrCisrICAgUFNQQUNFIGlzIHRoZSBwcm9ncmFt IHNwYWNlIGluIHdoaWNoIEdEQiBpcyBvcGVuaW5nIHRoZSBjb3JlLWZpbGUgYW5kCisrICAgaXMg bG9va2luZyBmb3IgYSBtaXNzaW5nIG9iamVjdCBmaWxlLiAgQlVJTERfSUQgaXMgdGhlIGJ1aWxk LWlkIG9mIHRoZQorKyAgIGZpbGUgYmVpbmcgbG9va2VkIGZvciwgYW5kIHdpbGwgbm90IGJlIE5V TEwuICBGSUxFTkFNRSBpcyB0aGUgbmFtZSBvZgorKyAgIHRoZSBmaWxlIEdEQiBpcyBsb29raW5n IGZvciwgdGhpcyB3aWxsIG5vdCBiZSBOVUxMLiAgVGhlIEZJTEVOQU1FIGlzCisrICAgcHJvdmlk ZWQgb25seSBmb3IgY3JlYXRpbmcgaGVscGZ1bCBtZXNzYWdlcyBmb3IgdGhlIHVzZXIuICBGSUxF TkFNRQorKyAgIG1pZ2h0IGFscmVhZHkgZXhpc3Qgb24gZGlzayBidXQgaGF2ZSB0aGUgd3Jvbmcg YnVpbGQtaWQsIG9mIEZJTEVOQU1FCisrICAgbWlnaHQgbm90IGV4aXN0IG9uIGRpc2suICBJZiB0 aGUgbWlzc2luZyBvYmpmaWxlIGNhbiBiZSBmb3VuZCB0aGVuIGl0CisrICAgZG9lcyBub3QgaGF2 ZSB0byBiZSBwbGFjZWQgYXQgdGhlIGxvY2F0aW9uIEZJTEVOQU1FLgorKworKyAgIFRoZSByZXR1 cm5lZCBvYmplY3QgaW5kaWNhdGVzIGlmIHRoZSBmaWxlIGNvdWxkIGJlIGZvdW5kIG9yIG5vdC4g ICovCisrCisrZXh0ZXJuIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgZXh0X2xhbmdfZmlu ZF9vYmpmaWxlX2Zyb21fYnVpbGRpZAorKyAgKHByb2dyYW1fc3BhY2UgKnBzcGFjZSwgY29uc3Qg c3RydWN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQsCisrICAgY29uc3QgY2hhciAqZmlsZW5hbWUp OworKworICNpZiBHREJfU0VMRl9URVNUCisgbmFtZXNwYWNlIHNlbGZ0ZXN0cyB7CisgZXh0ZXJu IHZvaWQgKCpob29rX3NldF9hY3RpdmVfZXh0X2xhbmcpICgpOworZGlmZiAtLWdpdCBhL2dkYi9n ZGJjb3JlLmggYi9nZGIvZ2RiY29yZS5oCistLS0gYS9nZGIvZ2RiY29yZS5oCisrKysgYi9nZGIv Z2RiY29yZS5oCitAQCAtMTk2LDQgKzE5Niw3MCBAQCBjbGFzcyB0aHJlYWRfc2VjdGlvbl9uYW1l CisgICBzdGQ6OnN0cmluZyBtX3N0b3JhZ2U7CisgfTsKKyAKKysvKiBUeXBlIHJldHVybmVkIGZy b20gY29yZV90YXJnZXRfZmluZF9tYXBwZWRfZmlsZS4gIEhvbGRzIGluZm9ybWF0aW9uCisrICAg YWJvdXQgYSBtYXBwZWQgZmlsZSB0aGF0IHdhcyBwcm9jZXNzZWQgd2hlbiBhIGNvcmUgZmlsZSB3 YXMgaW5pdGlhbGx5CisrICAgbG9hZGVkLiAgKi8KKytzdHJ1Y3QgY29yZV90YXJnZXRfbWFwcGVk X2ZpbGVfaW5mbworK3sKKysgIC8qIENvbnN0cnVjdG9yLiAgQlVJTERfSUQgaXMgbm90IG51bGxw dHIsIGFuZCBpcyB0aGUgYnVpbGQtaWQgZm9yIHRoZQorKyAgICAgbWFwcGVkIGZpbGUuICBGSUxF TkFNRSBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdGhhdCBHREIgbG9hZGVkIHRvCisrICAg ICBwcm92aWRlIHRoZSBtYXBwZWQgZmlsZS4gIFRoaXMgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20g dGhlIG5hbWUgb2YgdGhlCisrICAgICBtYXBwZWQgZmlsZSBtZW50aW9uZWQgaW4gdGhlIGNvcmUg ZmlsZSwgZS5nLiBpZiBHREIgZG93bmxvYWRzIGEgZmlsZQorKyAgICAgZnJvbSBkZWJ1Z2luZm9k IHRoZW4gRklMRU5BTUUgd291bGQgcG9pbnQgaW50byB0aGUgZGVidWdpbmZvZCBjbGllbnQKKysg ICAgIGNhY2hlLiAgVGhlIEZJTEVOQU1FIGNhbiBiZSB0aGUgZW1wdHkgc3RyaW5nIGlmIEdEQiB3 YXMgdW5hYmxlIHRvIGZpbmQKKysgICAgIGEgZmlsZSB0byBwcm92aWRlIHRoZSBtYXBwZWQgZmls ZS4gICovCisrCisrICBjb3JlX3RhcmdldF9tYXBwZWRfZmlsZV9pbmZvIChjb25zdCBiZmRfYnVp bGRfaWQgKmJ1aWxkX2lkLAorKwkJCQljb25zdCBzdGQ6OnN0cmluZyBmaWxlbmFtZSkKKysgICAg OiBtX2J1aWxkX2lkIChidWlsZF9pZCksCisrICAgICAgbV9maWxlbmFtZSAoZmlsZW5hbWUpCisr ICB7CisrICAgIGdkYl9hc3NlcnQgKG1fYnVpbGRfaWQgIT0gbnVsbHB0cik7CisrICB9CisrCisr ICAvKiBUaGUgYnVpbGQtaWQgZm9yIHRoaXMgbWFwcGVkIGZpbGUuICAqLworKworKyAgY29uc3Qg YmZkX2J1aWxkX2lkICoKKysgIGJ1aWxkX2lkICgpIGNvbnN0CisrICB7CisrICAgIHJldHVybiBt X2J1aWxkX2lkOworKyAgfQorKworKyAgLyogVGhlIGZpbGUgR0RCIHVzZWQgdG8gcHJvdmlkZSB0 aGlzIG1hcHBlZCBmaWxlLiAgKi8KKysKKysgIGNvbnN0IHN0ZDo6c3RyaW5nICYKKysgIGZpbGVu YW1lICgpIGNvbnN0CisrICB7CisrICAgIHJldHVybiBtX2ZpbGVuYW1lOworKyAgfQorKworK3By aXZhdGU6CisrICBjb25zdCBiZmRfYnVpbGRfaWQgKm1fYnVpbGRfaWQgPSBudWxscHRyOworKyAg Y29uc3Qgc3RkOjpzdHJpbmcgbV9maWxlbmFtZTsKKyt9OworKworKy8qIElmIHRoZSBjdXJyZW50 IGluZmVyaW9yIGhhcyBhIGNvcmVfdGFyZ2V0IGZvciBpdHMgcHJvY2VzcyB0YXJnZXQsIHRoZW4K KysgICBsb29rdXAgaW5mb3JtYXRpb24gYWJvdXQgYSBtYXBwZWQgZmlsZSB0aGF0IHdhcyBkaXNj b3ZlcmVkIHdoZW4gdGhlCisrICAgY29yZSBmaWxlIHdhcyBsb2FkZWQuCisrCisrICAgVGhlIEZJ TEVOQU1FIGlzIHRoZSBmaWxlIHdlJ3JlIGxvb2tpbmcgZm9yLiAgVGhlIEFERFIsIGlmIHByb3Zp ZGVkLCBpcyBhCisrICAgbWFwcGVkIGFkZHJlc3Mgd2l0aGluIHRoZSBpbmZlcmlvciB3aGljaCBp cyBrbm93biB0byBiZSBwYXJ0IG9mIHRoZSBmaWxlCisrICAgd2UgYXJlIGxvb2tpbmcgZm9yLgor KworKyAgIEFzIGFuIGV4YW1wbGUsIHdoZW4gbG9hZGluZyBzaGFyZWQgbGlicmFyaWVzIHRoaXMg ZnVuY3Rpb24gY2FuIGJlCisrICAgY2FsbGVkLCBpbiB0aGF0IGNhc2UgRklMRU5BTUUgd2lsbCBi ZSB0aGUgbmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJhcnkKKysgICB0aGF0IEdEQiBpcyB0cnlpbmcg dG8gbG9hZCBhbmQgQUREUiB3aWxsIGJlIGFuIGluZmVyaW9yIGFkZHJlc3Mgd2hpY2ggaXMKKysg ICBwYXJ0IG9mIHRoZSBzaGFyZWQgbGlicmFyeSB3ZSBhcmUgbG9va2luZyBmb3IuCisrCisrICAg VGhpcyBmdW5jdGlvbiBsb29rcyBmb3IgYSBtYXBwZWQgZmlsZSB3aGljaCBtYXRjaGVzIEZJTEVO QU1FIGFuZC9vcgorKyAgIHdoaWNoIGNvdmVycyBBRERSIGFuZCByZXR1cm5zIGluZm9ybWF0aW9u IGFib3V0IHRoYXQgZmlsZS4KKysKKysgICBUaGUgcmV0dXJuZWQgaW5mb3JtYXRpb24gaW5jbHVk ZXMgdGhlIG5hbWUgb2YgdGhlIG1hcHBlZCBmaWxlIGlmIGtub3duCisrICAgYW5kIHRoZSBidWls ZC1pZCBmb3IgdGhlIG1hcHBlZCBmaWxlIGlmIGtub3duLgorKworKyAgICovCisrc3RkOjpvcHRp b25hbDxjb3JlX3RhcmdldF9tYXBwZWRfZmlsZV9pbmZvPgorK2NvcmVfdGFyZ2V0X2ZpbmRfbWFw cGVkX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorKwkJCSAgICAgIHN0ZDo6b3B0aW9uYWw8 Q09SRV9BRERSPiBhZGRyKTsKKysKKyAjZW5kaWYgLyogIWRlZmluZWQgKEdEQkNPUkVfSCkgKi8K K2RpZmYgLS1naXQgYS9nZGIvaW5mLWNoaWxkLmMgYi9nZGIvaW5mLWNoaWxkLmMKKy0tLSBhL2dk Yi9pbmYtY2hpbGQuYworKysrIGIvZ2RiL2luZi1jaGlsZC5jCitAQCAtMzIwLDYgKzMyMCwyMSBA QCBpbmZfY2hpbGRfdGFyZ2V0OjpmaWxlaW9fZnN0YXQgKGludCBmZCwgc3RydWN0IHN0YXQgKnNi LCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcgorICAgcmV0dXJuIHJldDsKKyB9CisgCisrLyogSW1w bGVtZW50YXRpb24gb2YgdG9fZmlsZWlvX3N0YXQuICAqLworKworK2ludAorK2luZl9jaGlsZF90 YXJnZXQ6OmZpbGVpb19zdGF0IChzdHJ1Y3QgaW5mZXJpb3IgKmluZiwgY29uc3QgY2hhciAqZmls ZW5hbWUsCisrCQkJICAgICAgIHN0cnVjdCBzdGF0ICpzYiwgZmlsZWlvX2Vycm9yICp0YXJnZXRf ZXJybm8pCisreworKyAgaW50IHJldDsKKysKKysgIHJldCA9IGxzdGF0IChmaWxlbmFtZSwgc2Ip OworKyAgaWYgKHJldCA9PSAtMSkKKysgICAgKnRhcmdldF9lcnJubyA9IGhvc3RfdG9fZmlsZWlv X2Vycm9yIChlcnJubyk7CisrCisrICByZXR1cm4gcmV0OworK30KKysKKyAvKiBJbXBsZW1lbnRh dGlvbiBvZiB0b19maWxlaW9fY2xvc2UuICAqLworIAorIGludAorZGlmZiAtLWdpdCBhL2dkYi9p bmYtY2hpbGQuaCBiL2dkYi9pbmYtY2hpbGQuaAorLS0tIGEvZ2RiL2luZi1jaGlsZC5oCisrKysg Yi9nZGIvaW5mLWNoaWxkLmgKK0BAIC04MSw2ICs4MSw4IEBAIGNsYXNzIGluZl9jaGlsZF90YXJn ZXQKKyAgIGludCBmaWxlaW9fcHJlYWQgKGludCBmZCwgZ2RiX2J5dGUgKnJlYWRfYnVmLCBpbnQg bGVuLAorIAkJICAgIFVMT05HRVNUIG9mZnNldCwgZmlsZWlvX2Vycm9yICp0YXJnZXRfZXJybm8p IG92ZXJyaWRlOworICAgaW50IGZpbGVpb19mc3RhdCAoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc2Is IGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKSBvdmVycmlkZTsKKysgIGludCBmaWxlaW9fc3Rh dCAoc3RydWN0IGluZmVyaW9yICppbmYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorKwkJICAgc3Ry dWN0IHN0YXQgKnNiLCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubykgb3ZlcnJpZGU7CisgICBp bnQgZmlsZWlvX2Nsb3NlIChpbnQgZmQsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKSBvdmVy cmlkZTsKKyAgIGludCBmaWxlaW9fdW5saW5rIChzdHJ1Y3QgaW5mZXJpb3IgKmluZiwKKyAJCSAg ICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCitkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2Ri L19faW5pdF9fLnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL19faW5pdF9fLnB5CistLS0gYS9nZGIv cHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKKysrKyBiL2dkYi9weXRob24vbGliL2dkYi9fX2lu aXRfXy5weQorQEAgLTg3LDggKzg3LDkgQEAgeG1ldGhvZHMgPSBbXQorIGZyYW1lX2ZpbHRlcnMg PSB7fQorICMgSW5pdGlhbCBmcmFtZSB1bndpbmRlcnMuCisgZnJhbWVfdW53aW5kZXJzID0gW10K Ky0jIEluaXRpYWwgbWlzc2luZyBkZWJ1ZyBoYW5kbGVycy4KKy1taXNzaW5nX2RlYnVnX2hhbmRs ZXJzID0gW10KKysjIFRoZSBtaXNzaW5nIGZpbGUgaGFuZGxlcnMuICBFYWNoIGl0ZW0gaXMgYSB0 dXBsZSB3aXRoIHRoZSBmb3JtCisrIyAoVFlQRSwgSEFORExFUikgd2hlcmUgVFlQRSBpcyBhIHN0 cmluZyBlaXRoZXIgJ2RlYnVnJyBvciAnb2JqZmlsZScuCisrbWlzc2luZ19maWxlX2hhbmRsZXJz ID0gW10KKyAKKyAKKyBkZWYgX2V4ZWN1dGVfdW53aW5kZXJzKHBlbmRpbmdfZnJhbWUpOgorQEAg LTI3MSw2ICsyNzIsNjEgQEAgY2xhc3MgVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgICAg ICAgICAgIHN1cGVyKCkuc3RhcnQoKQorIAorIAorK2RlZiBfZmlsdGVyX21pc3NpbmdfZmlsZV9o YW5kbGVycyhoYW5kbGVycywgaGFuZGxlcl90eXBlKToKKysgICAgIiIiRWFjaCBsaXN0IG9mIG1p c3NpbmcgZmlsZSBoYW5kbGVycyBpcyBhIGxpc3Qgb2YgdHVwbGVzLCB0aGUgZmlyc3QKKysgICAg aXRlbSBpbiB0aGUgdHVwbGUgaXMgYSBzdHJpbmcgZWl0aGVyICdkZWJ1Zycgb3IgJ29iamZpbGUn IHRvCisrICAgIGluZGljYXRlIHdoYXQgdHlwZSBvZiBoYW5kbGVyIGl0IGlzLiAgVGhlIHNlY29u ZCBpdGVtIGluIHRoZSB0dXBsZQorKyAgICBpcyB0aGUgYWN0dWFsIGhhbmRsZXIgb2JqZWN0Lgor KworKyAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIEhBTkRMRVJfVFlQRSB3aGljaCBpcyBhIHN0cmlu ZywgZWl0aGVyICdkZWJ1ZycKKysgICAgb3IgJ29iamZpbGUnIGFuZCBIQU5ETEVSUywgYSBsaXN0 IG9mIHR1cGxlcy4gIFRoZSBmdW5jdGlvbiByZXR1cm5zCisrICAgIGFuIGl0ZXJhYmxlIG92ZXIg YWxsIG9mIHRoZSBoYW5kbGVyIG9iamVjdHMgKGV4dHJhY3RlZCBmcm9tIHRoZQorKyAgICB0dXBs ZXMpIHdoaWNoIG1hdGNoIEhBTkRMRVJfVFlQRS4KKysgICAgIiIiCisrCisrICAgIHJldHVybiBt YXAobGFtYmRhIHQ6IHRbMV0sIGZpbHRlcihsYW1iZGEgdDogdFswXSA9PSBoYW5kbGVyX3R5cGUs IGhhbmRsZXJzKSkKKysKKysKKytkZWYgX2hhbmRsZV9taXNzaW5nX2ZpbGVzKHBzcGFjZSwgaGFu ZGxlcl90eXBlLCBjYik6CisrICAgICIiIkhlbHBlciBmb3IgX2hhbmRsZV9taXNzaW5nX2RlYnVn aW5mbyBhbmQgX2hhbmRsZV9taXNzaW5nX29iamZpbGUuCisrCisrICAgIEFyZ3VtZW50czoKKysg ICAgICAgIHBzcGFjZTogVGhlIGdkYi5Qcm9nc3BhY2UgaW4gd2hpY2ggd2UncmUgb3BlcmF0aW5n LiAgVXNlZCB0bworKyAgICAgICAgICAgIGxvb2t1cCBwcm9ncmFtIHNwYWNlIHNwZWNpZmljIGhh bmRsZXJzLgorKyAgICAgICAgaGFuZGxlcl90eXBlOiBBIHN0cmluZywgZWl0aGVyICdkZWJ1Zycg b3IgJ29iamZpbGUnLCB0aGlzIGlzIHRoZQorKyAgICAgICAgICAgIHR5cGUgb2YgaGFuZGxlciB3 ZSdyZSBsb29raW5nIGZvci4KKysgICAgICAgIGNiOiBBIGNhbGxiYWNrIHdoaWNoIHRha2VzIGEg aGFuZGxlciBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mCisrICAgICAgICAgICAgY2FsbGluZyB0 aGUgaGFuZGxlci4KKysKKysgICAgUmV0dXJuczoKKysgICAgICAgIE5vbmU6IE5vIHN1aXRhYmxl IGZpbGUgY291bGQgYmUgZm91bmQuCisrICAgICAgICBGYWxzZTogQSBoYW5kbGVyIGhhcyBkZWNp ZGVkIHRoYXQgdGhlIHJlcXVlc3RlZCBmaWxlIGNhbm5vdCBiZQorKyAgICAgICAgICAgICAgICBm b3VuZCwgYW5kIG5vIGZ1cnRoZXIgc2VhcmNoaW5nIHNob3VsZCBiZSBkb25lLgorKyAgICAgICAg VHJ1ZTogVGhlIGZpbGUgaGFzIGJlZW4gZm91bmQgYW5kIGluc3RhbGxlZCBpbiBhIGxvY2F0aW9u CisrICAgICAgICAgICAgICAgIHdoZXJlIEdEQiB3b3VsZCBub3JtYWxseSBsb29rIGZvciBpdC4g IEdEQiBzaG91bGQKKysgICAgICAgICAgICAgICAgcmVwZWF0IGl0cyBsb29rdXAgcHJvY2Vzcywg dGhlIGZpbGUgc2hvdWxkIG5vdyBiZSBpbgorKyAgICAgICAgICAgICAgICBwbGFjZS4KKysgICAg ICAgIEEgc3RyaW5nOiBUaGlzIGlzIHRoZSBmaWxlbmFtZSBvZiB3aGVyZSB0aGUgbWlzc2luZyBm aWxlIGNhbgorKyAgICAgICAgICAgICAgICBiZSBmb3VuZC4KKysgICAgIiIiCisrCisrICAgIGZv ciBoYW5kbGVyIGluIF9maWx0ZXJfbWlzc2luZ19maWxlX2hhbmRsZXJzKAorKyAgICAgICAgcHNw YWNlLm1pc3NpbmdfZmlsZV9oYW5kbGVycywgaGFuZGxlcl90eXBlCisrICAgICk6CisrICAgICAg ICBpZiBoYW5kbGVyLmVuYWJsZWQ6CisrICAgICAgICAgICAgcmVzdWx0ID0gY2IoaGFuZGxlcikK KysgICAgICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisrICAgICAgICAgICAgICAgIHJl dHVybiByZXN1bHQKKysKKysgICAgZm9yIGhhbmRsZXIgaW4gX2ZpbHRlcl9taXNzaW5nX2ZpbGVf aGFuZGxlcnMobWlzc2luZ19maWxlX2hhbmRsZXJzLCBoYW5kbGVyX3R5cGUpOgorKyAgICAgICAg aWYgaGFuZGxlci5lbmFibGVkOgorKyAgICAgICAgICAgIHJlc3VsdCA9IGNiKGhhbmRsZXIpCisr ICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorKyAgICAgICAgICAgICAgICByZXR1 cm4gcmVzdWx0CisrCisrICAgIHJldHVybiBOb25lCisrCisrCisgZGVmIF9oYW5kbGVfbWlzc2lu Z19kZWJ1Z2luZm8ob2JqZmlsZSk6CisgICAgICIiIkludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCBm cm9tIEdEQiB0byBleGVjdXRlIG1pc3NpbmcgZGVidWcKKyAgICAgaGFuZGxlcnMuCitAQCAtMjkz LDE4ICszNDksNDYgQEAgZGVmIF9oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8ob2JqZmlsZSk6Cisg ICAgICAgICBBIHN0cmluZzogVGhpcyBpcyB0aGUgZmlsZW5hbWUgb2YgYSBmaWxlIGNvbnRhaW5p bmcgdGhlCisgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgZGVidWcgaW5mb3JtYXRpb24uCisg ICAgICIiIgorKworICAgICBwc3BhY2UgPSBvYmpmaWxlLnByb2dzcGFjZQorIAorLSAgICBmb3Ig aGFuZGxlciBpbiBwc3BhY2UubWlzc2luZ19kZWJ1Z19oYW5kbGVyczoKKy0gICAgICAgIGlmIGhh bmRsZXIuZW5hYmxlZDoKKy0gICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyKG9iamZpbGUpCist ICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorLSAgICAgICAgICAgICAgICByZXR1 cm4gcmVzdWx0CisrICAgIHJldHVybiBfaGFuZGxlX21pc3NpbmdfZmlsZXMocHNwYWNlLCAiZGVi dWciLCBsYW1iZGEgaDogaChvYmpmaWxlKSkKKyAKKy0gICAgZm9yIGhhbmRsZXIgaW4gbWlzc2lu Z19kZWJ1Z19oYW5kbGVyczoKKy0gICAgICAgIGlmIGhhbmRsZXIuZW5hYmxlZDoKKy0gICAgICAg ICAgICByZXN1bHQgPSBoYW5kbGVyKG9iamZpbGUpCistICAgICAgICAgICAgaWYgcmVzdWx0IGlz IG5vdCBOb25lOgorLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgCistICAgIHJldHVy biBOb25lCisrZGVmIF9oYW5kbGVfbWlzc2luZ19vYmpmaWxlKHBzcGFjZSwgYnVpbGRpZCwgZmls ZW5hbWUpOgorKyAgICAiIiJJbnRlcm5hbCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBHREIgdG8gZXhl Y3V0ZSBtaXNzaW5nIG9iamZpbGUKKysgICAgaGFuZGxlcnMuCisrCisrICAgIFJ1biBlYWNoIG9m IHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCwgYW5kIGVuYWJsZWQgbWlzc2luZyBvYmpmaWxlCisr ICAgIGhhbmRsZXIgb2JqZWN0cyBmb3IgdGhlIGdkYi5Qcm9nc3BhY2UgcGFzc2VkIGluIGFzIGFu IGFyZ3VtZW50LAorKyAgICBhbmQgdGhlbiBmcm9tIHRoZSBnbG9iYWwgbGlzdC4gIFN0b3AgYWZ0 ZXIgdGhlIGZpcnN0IGhhbmRsZXIgdGhhdAorKyAgICByZXR1cm5zIGEgcmVzdWx0IG90aGVyIHRo YW4gTm9uZS4KKysKKysgICAgQXJndW1lbnRzOgorKyAgICAgICAgcHNwYWNlOiBBIGdkYi5Qcm9n c3BhY2UgZm9yIHdoaWNoIHRoZSBtaXNzaW5nIG9iamZpbGUgaGFuZGxlcnMKKysgICAgICAgICAg ICAgICAgc2hvdWxkIGJlIHJ1bi4gIFRoaXMgaXMgdGhlIHByb2dyYW0gc3BhY2UgaW4gd2hpY2gg YW4KKysgICAgICAgICAgICAgICAgb2JqZmlsZSB3YXMgZm91bmQgdG8gYmUgbWlzc2luZy4KKysg ICAgICAgIGJ1aWxkaWQ6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGJ1aWxkLWlkIHdlJ3JlIGxv b2tpbmcgZm9yLgorKyAgICAgICAgZmlsZW5hbWU6IFRoZSBmaWxlbmFtZSBvZiB0aGUgZmlsZSBH REIgdHJpZWQgdG8gZmluZCBidXQKKysgICAgICAgICAgICAgICAgICBjb3VsZG4ndC4gIFRoaXMg aXMgbm90IHdoZXJlIHRoZSBmaWxlIHNob3VsZCBiZQorKyAgICAgICAgICAgICAgICAgIHBsYWNl ZCBpZiBmb3VuZCwgaW4gZmFjdCwgdGhpcyBmaWxlIG1pZ2h0IGFscmVhZHkKKysgICAgICAgICAg ICAgICAgICBleGlzdCBvbiBkaXNrIGJ1dCBoYXZlIHRoZSB3cm9uZyBidWlsZC1pZC4gIFRoaXMg aXMKKysgICAgICAgICAgICAgICAgICBtb3N0bHkgcHJvdmlkZWQgaW4gb3JkZXIgdG8gYmUgdXNl ZCBpbiBtZXNzYWdlcyB0bworKyAgICAgICAgICAgICAgICAgIHRoZSB1c2VyLgorKworKyAgICBS ZXR1cm5zOgorKyAgICAgICAgTm9uZTogTm8gb2JqZmlsZSBjb3VsZCBiZSBmb3VuZCBmb3IgdGhp cyBidWlsZC1pZC4KKysgICAgICAgIEZhbHNlOiBBIGhhbmRsZXIgaGFzIGRvbmUgYWxsIGl0IGNh biB3aXRoIGZvciB0aGlzIGJ1aWxkLWlkLAorKyAgICAgICAgICAgICAgIGJ1dCBubyBvYmpmaWxl IGNvdWxkIGJlIGZvdW5kLgorKyAgICAgICAgVHJ1ZTogQW4gb2JqZmlsZSBtaWdodCBoYXZlIGJl ZW4gaW5zdGFsbGVkIGJ5IGEgaGFuZGxlciwgR0RCCisrICAgICAgICAgICAgICBzaG91bGQgY2hl Y2sgYWdhaW4uICBUaGUgb25seSBwbGFjZSBHREIgY2hlY2tzIGlzIHdpdGhpbgorKyAgICAgICAg ICAgICAgdGhlIC5idWlsZC1pZCBzdWItZGlyZWN0b3J5IHdpdGhpbiB0aGUKKysgICAgICAgICAg ICAgIGRlYnVnLWZpbGUtZGlyZWN0b3J5LiAgSWYgdGhlIHJlcXVpcmVkIGZpbGUgd2FzIG5vdAor KyAgICAgICAgICAgICAgaW5zdGFsbGVkIHRoZXJlIHRoZW4gR0RCIHdpbGwgbm90IGZpbmQgaXQu CisrICAgICAgICBBIHN0cmluZzogVGhpcyBpcyB0aGUgZmlsZW5hbWUgb2YgYSBmaWxlIGNvbnRh aW5pbmcgdGhlCisrICAgICAgICAgICAgICAgICAgbWlzc2luZyBvYmpmaWxlLgorKyAgICAiIiIK KysKKysgICAgcmV0dXJuIF9oYW5kbGVfbWlzc2luZ19maWxlcygKKysgICAgICAgIHBzcGFjZSwg Im9iamZpbGUiLCBsYW1iZGEgaDogaChwc3BhY2UsIGJ1aWxkaWQsIGZpbGVuYW1lKQorKyAgICAp CitkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvbWlzc2luZ19kZWJ1Zy5w eSBiL2dkYi9weXRob24vbGliL2dkYi9jb21tYW5kL21pc3NpbmdfZmlsZXMucHkKK3NpbWlsYXJp dHkgaW5kZXggNTQlCityZW5hbWUgZnJvbSBnZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9taXNz aW5nX2RlYnVnLnB5CityZW5hbWUgdG8gZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvbWlzc2lu Z19maWxlcy5weQorLS0tIGEvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvbWlzc2luZ19kZWJ1 Zy5weQorKysrIGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvbWlzc2luZ19maWxlcy5weQor QEAgLTEsNCArMSw0IEBACistIyBNaXNzaW5nIGRlYnVnIHJlbGF0ZWQgY29tbWFuZHMuCisrIyBN aXNzaW5nIGRlYnVnIGFuZCBvYmpmaWxlIHJlbGF0ZWQgY29tbWFuZHMuCisgIworICMgQ29weXJp Z2h0IDIwMjMtMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCitAQCAtMjEs NyArMjEsNyBAQCBpbXBvcnQgZ2RiCisgCisgCisgZGVmIHZhbGlkYXRlX3JlZ2V4cChleHAsIGlk c3RyaW5nKToKKy0gICAgIiIiQ29tcGlsZSBleHAgaW50byBhIGNvbXBpbGVyIHJlZ3VsYXIgZXhw cmVzc2lvbiBvYmplY3QuCisrICAgICIiIkNvbXBpbGUgZXhwIGludG8gYSBjb21waWxlZCByZWd1 bGFyIGV4cHJlc3Npb24gb2JqZWN0LgorIAorICAgICBBcmd1bWVudHM6CisgICAgICAgICBleHA6 IFRoZSBzdHJpbmcgdG8gY29tcGlsZSBpbnRvIGEgcmUuUGF0dGVybiBvYmplY3QuCitAQCAtMzMs MTQgKzMzLDE1IEBAIGRlZiB2YWxpZGF0ZV9yZWdleHAoZXhwLCBpZHN0cmluZyk6CisgICAgIFJh aXNlczoKKyAgICAgICAgIFN5bnRheEVycm9yOiBJZiBleHAgaXMgYW4gaW52YWxpZCByZWdleHAu CisgICAgICIiIgorKworICAgICB0cnk6CisgICAgICAgICByZXR1cm4gcmUuY29tcGlsZShleHAp CisgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJJ bnZhbGlkICVzIHJlZ2V4cDogJXMuIiAlIChpZHN0cmluZywgZXhwKSkKKyAKKyAKKy1kZWYgcGFy c2VfbWlzc2luZ19kZWJ1Z19jb21tYW5kX2FyZ3MoYXJnKToKKy0gICAgIiIiSW50ZXJuYWwgdXRp bGl0eSB0byBwYXJzZSBtaXNzaW5nIGRlYnVnIGhhbmRsZXIgY29tbWFuZCBhcmd2LgorK2RlZiBw YXJzZV9taXNzaW5nX2ZpbGVfY29tbWFuZF9hcmdzKGFyZyk6CisrICAgICIiIkludGVybmFsIHV0 aWxpdHkgdG8gcGFyc2UgbWlzc2luZyBmaWxlIGhhbmRsZXIgY29tbWFuZCBhcmd2LgorIAorICAg ICBBcmd1bWVudHM6CisgICAgICAgICBhcmc6IFRoZSBhcmd1bWVudHMgdG8gdGhlIGNvbW1hbmQu IFRoZSBmb3JtYXQgaXM6CitAQCAtNTIsNiArNTMsNyBAQCBkZWYgcGFyc2VfbWlzc2luZ19kZWJ1 Z19jb21tYW5kX2FyZ3MoYXJnKToKKyAgICAgUmFpc2VzOgorICAgICAgICAgU3ludGF4RXJyb3I6 IGFuIGVycm9yIHByb2Nlc3NpbmcgQVJHCisgICAgICIiIgorKworICAgICBhcmd2ID0gZ2RiLnN0 cmluZ190b19hcmd2KGFyZykKKyAgICAgYXJnYyA9IGxlbihhcmd2KQorICAgICBpZiBhcmdjID4g MjoKK0BAIC02OCwxMCArNzAsMTAgQEAgZGVmIHBhcnNlX21pc3NpbmdfZGVidWdfY29tbWFuZF9h cmdzKGFyZyk6CisgICAgICkKKyAKKyAKKy1jbGFzcyBJbmZvTWlzc2luZ0RlYnVnSGFuZGVycyhn ZGIuQ29tbWFuZCk6CistICAgICIiIkdEQiBjb21tYW5kIHRvIGxpc3QgbWlzc2luZyBkZWJ1ZyBo YW5kbGVycy4KKytjbGFzcyBJbmZvTWlzc2luZ0ZpbGVIYW5kbGVycyhnZGIuQ29tbWFuZCk6Cisr ICAgICIiIkdEQiBjb21tYW5kIHRvIGxpc3QgbWlzc2luZyBIVFlQRSBoYW5kbGVycy4KKyAKKy0g ICAgVXNhZ2U6IGluZm8gbWlzc2luZy1kZWJ1Zy1oYW5kbGVycyBbTE9DVVMtUkVHRVhQIFtOQU1F LVJFR0VYUF1dCisrICAgIFVzYWdlOiBpbmZvIG1pc3NpbmctSFRZUEUtaGFuZGxlcnMgW0xPQ1VT LVJFR0VYUCBbTkFNRS1SRUdFWFBdXQorIAorICAgICBMT0NVUy1SRUdFWFAgaXMgYSByZWd1bGFy IGV4cHJlc3Npb24gbWF0Y2hpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZQorICAgICBoYW5kbGVyLiAg SWYgaXQgaXMgb21pdHRlZCwgYWxsIHJlZ2lzdGVyZWQgaGFuZGxlcnMgZnJvbSBhbGwKK0BAIC03 OSwzOCArODEsNDcgQEAgY2xhc3MgSW5mb01pc3NpbmdEZWJ1Z0hhbmRlcnMoZ2RiLkNvbW1hbmQp OgorICAgICB0aGUgaGFuZGxlcnMgZnJvbSB0aGUgY3VycmVudCBwcm9nc3BhY2UsIG9yIGEgcmVn dWxhciBleHByZXNzaW9uCisgICAgIG1hdGNoaW5nIGZpbGVuYW1lcyBvZiBwcm9nc3BhY2VzLgor IAorLSAgICBOQU1FLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgbWlz c2luZyBkZWJ1ZworKyAgICBOQU1FLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBm aWx0ZXIgbWlzc2luZyBIVFlQRQorICAgICBoYW5kbGVyIG5hbWVzLiAgSWYgdGhpcyBvbWl0dGVk IGZvciBhIHNwZWNpZmllZCBsb2N1cywgdGhlbiBhbGwKKyAgICAgcmVnaXN0ZXJlZCBoYW5kbGVy cyBpbiB0aGUgbG9jdXMgYXJlIGxpc3RlZC4KKyAgICAgIiIiCisgCistICAgIGRlZiBfX2luaXRf XyhzZWxmKToKKy0gICAgICAgIHN1cGVyKCkuX19pbml0X18oImluZm8gbWlzc2luZy1kZWJ1Zy1o YW5kbGVycyIsIGdkYi5DT01NQU5EX0ZJTEVTKQorKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGFu ZGxlcl90eXBlKToKKysgICAgICAgICMgVXBkYXRlIHRoZSBkb2Mgc3RyaW5nIGJlZm9yZSBjYWxs aW5nIHRoZSBwYXJlbnQgY29uc3RydWN0b3IsCisrICAgICAgICAjIHJlcGxhY2luZyB0aGUgc3Ry aW5nICdIVFlQRScgd2l0aCB0aGUgdmFsdWUgb2YgSEFORExFUl9UWVBFLgorKyAgICAgICAgIyBU aGUgcGFyZW50IGNvbnN0cnVjdG9yIHdpbGwgZ3JhYiBhIGNvcHkgb2YgdGhpcyBzdHJpbmcgdG8K KysgICAgICAgICMgdXNlIGFzIHRoZSBjb21tYW5kcyBoZWxwIHRleHQuCisrICAgICAgICBzZWxm Ll9fZG9jX18gPSBzZWxmLl9fZG9jX18ucmVwbGFjZSgiSFRZUEUiLCBoYW5kbGVyX3R5cGUpCisr ICAgICAgICBzdXBlcigpLl9faW5pdF9fKAorKyAgICAgICAgICAgICJpbmZvIG1pc3NpbmctIiAr IGhhbmRsZXJfdHlwZSArICItaGFuZGxlcnMiLCBnZGIuQ09NTUFORF9GSUxFUworKyAgICAgICAg KQorKyAgICAgICAgc2VsZi5oYW5kbGVyX3R5cGUgPSBoYW5kbGVyX3R5cGUKKyAKKyAgICAgZGVm IGxpc3RfaGFuZGxlcnMoc2VsZiwgdGl0bGUsIGhhbmRsZXJzLCBuYW1lX3JlKToKKy0gICAgICAg ICIiIkxpc3RzIHRoZSBtaXNzaW5nIGRlYnVnIGhhbmRsZXJzIHdob3NlIG5hbWUgbWF0Y2hlcyBy ZWdleHAuCisrICAgICAgICAiIiJMaXN0cyB0aGUgbWlzc2luZyBmaWxlIGhhbmRsZXJzIHdob3Nl IG5hbWUgbWF0Y2hlcyByZWdleHAuCisgCisgICAgICAgICBBcmd1bWVudHM6CisgICAgICAgICAg ICAgdGl0bGU6IFRoZSBsaW5lIHRvIHByaW50IGJlZm9yZSB0aGUgbGlzdC4KKy0gICAgICAgICAg ICBoYW5kbGVyczogVGhlIGxpc3Qgb2YgdGhlIG1pc3NpbmcgZGVidWcgaGFuZGxlcnMuCisrICAg ICAgICAgICAgaGFuZGxlcnM6IFRoZSBsaXN0IG9mIHRoZSBtaXNzaW5nIGZpbGUgaGFuZGxlcnMu CisgICAgICAgICAgICAgbmFtZV9yZTogaGFuZGxlciBuYW1lIGZpbHRlci4KKyAgICAgICAgICIi IgorKworICAgICAgICAgaWYgbm90IGhhbmRsZXJzOgorICAgICAgICAgICAgIHJldHVybgorICAg ICAgICAgcHJpbnQodGl0bGUpCistICAgICAgICBmb3IgaGFuZGxlciBpbiBoYW5kbGVyczoKKysg ICAgICAgIGZvciBoYW5kbGVyIGluIGdkYi5fZmlsdGVyX21pc3NpbmdfZmlsZV9oYW5kbGVycyho YW5kbGVycywgc2VsZi5oYW5kbGVyX3R5cGUpOgorICAgICAgICAgICAgIGlmIG5hbWVfcmUubWF0 Y2goaGFuZGxlci5uYW1lKToKKyAgICAgICAgICAgICAgICAgcHJpbnQoCisgICAgICAgICAgICAg ICAgICAgICAiICAlcyVzIiAlIChoYW5kbGVyLm5hbWUsICIiIGlmIGhhbmRsZXIuZW5hYmxlZCBl bHNlICIgW2Rpc2FibGVkXSIpCisgICAgICAgICAgICAgICAgICkKKyAKKyAgICAgZGVmIGludm9r ZShzZWxmLCBhcmcsIGZyb21fdHR5KToKKy0gICAgICAgIGxvY3VzX3JlLCBuYW1lX3JlID0gcGFy c2VfbWlzc2luZ19kZWJ1Z19jb21tYW5kX2FyZ3MoYXJnKQorKyAgICAgICAgbG9jdXNfcmUsIG5h bWVfcmUgPSBwYXJzZV9taXNzaW5nX2ZpbGVfY29tbWFuZF9hcmdzKGFyZykKKyAKKyAgICAgICAg IGlmIGxvY3VzX3JlLm1hdGNoKCJwcm9nc3BhY2UiKSBhbmQgbG9jdXNfcmUucGF0dGVybiAhPSAi IjoKKyAgICAgICAgICAgICBjcCA9IGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpCisgICAgICAgICAg ICAgc2VsZi5saXN0X2hhbmRsZXJzKAorLSAgICAgICAgICAgICAgICAiUHJvZ3NwYWNlICVzOiIg JSBjcC5maWxlbmFtZSwgY3AubWlzc2luZ19kZWJ1Z19oYW5kbGVycywgbmFtZV9yZQorKyAgICAg ICAgICAgICAgICAiUHJvZ3NwYWNlICVzOiIgJSBjcC5maWxlbmFtZSwgY3AubWlzc2luZ19maWxl X2hhbmRsZXJzLCBuYW1lX3JlCisgICAgICAgICAgICAgKQorIAorICAgICAgICAgZm9yIHByb2dz cGFjZSBpbiBnZGIucHJvZ3NwYWNlcygpOgorQEAgLTEyNSw1OCArMTM2LDcxIEBAIGNsYXNzIElu Zm9NaXNzaW5nRGVidWdIYW5kZXJzKGdkYi5Db21tYW5kKToKKyAgICAgICAgICAgICAgICAgICAg IG1zZyA9ICJQcm9nc3BhY2UgJXM6IiAlIGZpbGVuYW1lCisgICAgICAgICAgICAgICAgIHNlbGYu bGlzdF9oYW5kbGVycygKKyAgICAgICAgICAgICAgICAgICAgIG1zZywKKy0gICAgICAgICAgICAg ICAgICAgIHByb2dzcGFjZS5taXNzaW5nX2RlYnVnX2hhbmRsZXJzLAorKyAgICAgICAgICAgICAg ICAgICAgcHJvZ3NwYWNlLm1pc3NpbmdfZmlsZV9oYW5kbGVycywKKyAgICAgICAgICAgICAgICAg ICAgIG5hbWVfcmUsCisgICAgICAgICAgICAgICAgICkKKyAKKyAgICAgICAgICMgUHJpbnQgZ2xv YmFsIGhhbmRsZXJzIGxhc3QsIGFzIHRoZXNlIGFyZSBpbnZva2VkIGxhc3QuCisgICAgICAgICBp ZiBsb2N1c19yZS5tYXRjaCgiZ2xvYmFsIik6CistICAgICAgICAgICAgc2VsZi5saXN0X2hhbmRs ZXJzKCJHbG9iYWw6IiwgZ2RiLm1pc3NpbmdfZGVidWdfaGFuZGxlcnMsIG5hbWVfcmUpCisrICAg ICAgICAgICAgc2VsZi5saXN0X2hhbmRsZXJzKCJHbG9iYWw6IiwgZ2RiLm1pc3NpbmdfZmlsZV9o YW5kbGVycywgbmFtZV9yZSkKKyAKKyAKKy1kZWYgZG9fZW5hYmxlX2hhbmRsZXIxKGhhbmRsZXJz LCBuYW1lX3JlLCBmbGFnKToKKy0gICAgIiIiRW5hYmxlL2Rpc2FibGUgbWlzc2luZyBkZWJ1ZyBo YW5kbGVycyB3aG9zZSBuYW1lcyBtYXRjaCBnaXZlbiByZWdleC4KKytkZWYgZG9fZW5hYmxlX2hh bmRsZXIxKGhhbmRsZXJzLCBuYW1lX3JlLCBmbGFnLCBoYW5kbGVyX3R5cGUpOgorKyAgICAiIiJF bmFibGUvZGlzYWJsZSBtaXNzaW5nIGZpbGUgaGFuZGxlcnMgd2hvc2UgbmFtZXMgbWF0Y2ggZ2l2 ZW4gcmVnZXguCisgCisgICAgIEFyZ3VtZW50czoKKy0gICAgICAgIGhhbmRsZXJzOiBUaGUgbGlz dCBvZiBtaXNzaW5nIGRlYnVnIGhhbmRsZXJzLgorKyAgICAgICAgaGFuZGxlcnM6IFRoZSBsaXN0 IG9mIG1pc3NpbmcgZmlsZSBoYW5kbGVycy4KKyAgICAgICAgIG5hbWVfcmU6IEhhbmRsZXIgbmFt ZSBmaWx0ZXIuCisgICAgICAgICBmbGFnOiBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB3ZSBzaG91 bGQgZW5hYmxlIG9yIGRpc2FibGUuCisrICAgICAgICBoYW5kbGVyX3R5cGU6IEEgc3RyaW5nLCBl aXRoZXIgJ2RlYnVnJyBvciAnb2JqZmlsZScsIHVzZSB0byBjb250cm9sCisrICAgICAgICAgICAg d2hpY2ggaGFuZGxlcnMgYXJlIG1vZGlmaWVkLgorIAorICAgICBSZXR1cm5zOgorICAgICAgICAg VGhlIG51bWJlciBvZiBoYW5kbGVycyBhZmZlY3RlZC4KKyAgICAgIiIiCisrCisgICAgIHRvdGFs ID0gMAorLSAgICBmb3IgaGFuZGxlciBpbiBoYW5kbGVyczoKKysgICAgZm9yIGhhbmRsZXIgaW4g Z2RiLl9maWx0ZXJfbWlzc2luZ19maWxlX2hhbmRsZXJzKGhhbmRsZXJzLCBoYW5kbGVyX3R5cGUp OgorICAgICAgICAgaWYgbmFtZV9yZS5tYXRjaChoYW5kbGVyLm5hbWUpIGFuZCBoYW5kbGVyLmVu YWJsZWQgIT0gZmxhZzoKKyAgICAgICAgICAgICBoYW5kbGVyLmVuYWJsZWQgPSBmbGFnCisgICAg ICAgICAgICAgdG90YWwgKz0gMQorICAgICByZXR1cm4gdG90YWwKKyAKKyAKKy1kZWYgZG9fZW5h YmxlX2hhbmRsZXIoYXJnLCBmbGFnKToKKy0gICAgIiIiRW5hYmxlIG9yIGRpc2FibGUgbWlzc2lu ZyBkZWJ1ZyBoYW5kbGVycy4iIiIKKy0gICAgKGxvY3VzX3JlLCBuYW1lX3JlKSA9IHBhcnNlX21p c3NpbmdfZGVidWdfY29tbWFuZF9hcmdzKGFyZykKKytkZWYgZG9fZW5hYmxlX2hhbmRsZXIoYXJn LCBmbGFnLCBoYW5kbGVyX3R5cGUpOgorKyAgICAiIiJFbmFibGUgb3IgZGlzYWJsZSBtaXNzaW5n IGZpbGUgaGFuZGxlcnMuIiIiCisrCisrICAgIChsb2N1c19yZSwgbmFtZV9yZSkgPSBwYXJzZV9t aXNzaW5nX2ZpbGVfY29tbWFuZF9hcmdzKGFyZykKKyAgICAgdG90YWwgPSAwCisgICAgIGlmIGxv Y3VzX3JlLm1hdGNoKCJnbG9iYWwiKToKKy0gICAgICAgIHRvdGFsICs9IGRvX2VuYWJsZV9oYW5k bGVyMShnZGIubWlzc2luZ19kZWJ1Z19oYW5kbGVycywgbmFtZV9yZSwgZmxhZykKKysgICAgICAg IHRvdGFsICs9IGRvX2VuYWJsZV9oYW5kbGVyMSgKKysgICAgICAgICAgICBnZGIubWlzc2luZ19m aWxlX2hhbmRsZXJzLCBuYW1lX3JlLCBmbGFnLCBoYW5kbGVyX3R5cGUKKysgICAgICAgICkKKyAg ICAgaWYgbG9jdXNfcmUubWF0Y2goInByb2dzcGFjZSIpIGFuZCBsb2N1c19yZS5wYXR0ZXJuICE9 ICIiOgorICAgICAgICAgdG90YWwgKz0gZG9fZW5hYmxlX2hhbmRsZXIxKAorLSAgICAgICAgICAg IGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpLm1pc3NpbmdfZGVidWdfaGFuZGxlcnMsIG5hbWVfcmUs IGZsYWcKKysgICAgICAgICAgICBnZGIuY3VycmVudF9wcm9nc3BhY2UoKS5taXNzaW5nX2ZpbGVf aGFuZGxlcnMsIG5hbWVfcmUsIGZsYWcsIGhhbmRsZXJfdHlwZQorICAgICAgICAgKQorICAgICBm b3IgcHJvZ3NwYWNlIGluIGdkYi5wcm9nc3BhY2VzKCk6CisgICAgICAgICBmaWxlbmFtZSA9IHBy b2dzcGFjZS5maWxlbmFtZSBvciAiIgorICAgICAgICAgaWYgbG9jdXNfcmUubWF0Y2goZmlsZW5h bWUpOgorLSAgICAgICAgICAgIHRvdGFsICs9IGRvX2VuYWJsZV9oYW5kbGVyMShwcm9nc3BhY2Uu bWlzc2luZ19kZWJ1Z19oYW5kbGVycywgbmFtZV9yZSwgZmxhZykKKysgICAgICAgICAgICB0b3Rh bCArPSBkb19lbmFibGVfaGFuZGxlcjEoCisrICAgICAgICAgICAgICAgIHByb2dzcGFjZS5taXNz aW5nX2ZpbGVfaGFuZGxlcnMsIG5hbWVfcmUsIGZsYWcsIGhhbmRsZXJfdHlwZQorKyAgICAgICAg ICAgICkKKyAgICAgcHJpbnQoCistICAgICAgICAiJWQgbWlzc2luZyBkZWJ1ZyBoYW5kbGVyJXMg JXMiCistICAgICAgICAlICh0b3RhbCwgIiIgaWYgdG90YWwgPT0gMSBlbHNlICJzIiwgImVuYWJs ZWQiIGlmIGZsYWcgZWxzZSAiZGlzYWJsZWQiKQorKyAgICAgICAgIiVkIG1pc3NpbmcgJXMgaGFu ZGxlciVzICVzIgorKyAgICAgICAgJSAoCisrICAgICAgICAgICAgdG90YWwsCisrICAgICAgICAg ICAgaGFuZGxlcl90eXBlLAorKyAgICAgICAgICAgICIiIGlmIHRvdGFsID09IDEgZWxzZSAicyIs CisrICAgICAgICAgICAgImVuYWJsZWQiIGlmIGZsYWcgZWxzZSAiZGlzYWJsZWQiLAorKyAgICAg ICAgKQorICAgICApCisgCisgCistY2xhc3MgRW5hYmxlTWlzc2luZ0RlYnVnSGFuZGxlcihnZGIu Q29tbWFuZCk6CistICAgICIiIkdEQiBjb21tYW5kIHRvIGVuYWJsZSBtaXNzaW5nIGRlYnVnIGhh bmRsZXJzLgorK2NsYXNzIEVuYWJsZU1pc3NpbmdGaWxlSGFuZGxlcihnZGIuQ29tbWFuZCk6Cisr ICAgICIiIkdEQiBjb21tYW5kIHRvIGVuYWJsZSBtaXNzaW5nIEhUWVBFIGhhbmRsZXJzLgorIAor LSAgICBVc2FnZTogZW5hYmxlIG1pc3NpbmctZGVidWctaGFuZGxlciBbTE9DVVMtUkVHRVhQIFtO QU1FLVJFR0VYUF1dCisrICAgIFVzYWdlOiBlbmFibGUgbWlzc2luZy1IVFlQRS1oYW5kbGVyIFtM T0NVUy1SRUdFWFAgW05BTUUtUkVHRVhQXV0KKyAKKyAgICAgTE9DVVMtUkVHRVhQIGlzIGEgcmVn dWxhciBleHByZXNzaW9uIHNwZWNpZnlpbmcgdGhlIGhhbmRsZXJzIHRvCisgICAgIGVuYWJsZS4g IEl0IGNhbiBiZSAnZ2xvYmFsJywgJ3Byb2dzcGFjZScgZm9yIHRoZSBjdXJyZW50CitAQCAtMTg3 LDE4ICsyMTEsMjYgQEAgY2xhc3MgRW5hYmxlTWlzc2luZ0RlYnVnSGFuZGxlcihnZGIuQ29tbWFu ZCk6CisgICAgIGluIHRoZSBsb2N1cyBhcmUgYWZmZWN0ZWQuCisgICAgICIiIgorIAorLSAgICBk ZWYgX19pbml0X18oc2VsZik6CistICAgICAgICBzdXBlcigpLl9faW5pdF9fKCJlbmFibGUgbWlz c2luZy1kZWJ1Zy1oYW5kbGVyIiwgZ2RiLkNPTU1BTkRfRklMRVMpCisrICAgIGRlZiBfX2luaXRf XyhzZWxmLCBoYW5kbGVyX3R5cGUpOgorKyAgICAgICAgIyBVcGRhdGUgdGhlIGRvYyBzdHJpbmcg YmVmb3JlIGNhbGxpbmcgdGhlIHBhcmVudCBjb25zdHJ1Y3RvciwKKysgICAgICAgICMgcmVwbGFj aW5nIHRoZSBzdHJpbmcgJ0hUWVBFJyB3aXRoIHRoZSB2YWx1ZSBvZiBIQU5ETEVSX1RZUEUuCisr ICAgICAgICAjIFRoZSBwYXJlbnQgY29uc3RydWN0b3Igd2lsbCBncmFiIGEgY29weSBvZiB0aGlz IHN0cmluZyB0bworKyAgICAgICAgIyB1c2UgYXMgdGhlIGNvbW1hbmRzIGhlbHAgdGV4dC4KKysg ICAgICAgIHNlbGYuX19kb2NfXyA9IHNlbGYuX19kb2NfXy5yZXBsYWNlKCJIVFlQRSIsIGhhbmRs ZXJfdHlwZSkKKysgICAgICAgIHN1cGVyKCkuX19pbml0X18oCisrICAgICAgICAgICAgImVuYWJs ZSBtaXNzaW5nLSIgKyBoYW5kbGVyX3R5cGUgKyAiLWhhbmRsZXIiLCBnZGIuQ09NTUFORF9GSUxF UworKyAgICAgICAgKQorKyAgICAgICAgc2VsZi5oYW5kbGVyX3R5cGUgPSBoYW5kbGVyX3R5cGUK KyAKKyAgICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToKKyAgICAgICAgICIiIkdE QiBjYWxscyB0aGlzIHRvIHBlcmZvcm0gdGhlIGNvbW1hbmQuIiIiCistICAgICAgICBkb19lbmFi bGVfaGFuZGxlcihhcmcsIFRydWUpCisrICAgICAgICBkb19lbmFibGVfaGFuZGxlcihhcmcsIFRy dWUsIHNlbGYuaGFuZGxlcl90eXBlKQorIAorIAorLWNsYXNzIERpc2FibGVNaXNzaW5nRGVidWdI YW5kbGVyKGdkYi5Db21tYW5kKToKKy0gICAgIiIiR0RCIGNvbW1hbmQgdG8gZGlzYWJsZSBtaXNz aW5nIGRlYnVnIGhhbmRsZXJzLgorK2NsYXNzIERpc2FibGVNaXNzaW5nRmlsZUhhbmRsZXIoZ2Ri LkNvbW1hbmQpOgorKyAgICAiIiJHREIgY29tbWFuZCB0byBkaXNhYmxlIG1pc3NpbmcgSFRZUEUg aGFuZGxlcnMuCisgCistICAgIFVzYWdlOiBkaXNhYmxlIG1pc3NpbmctZGVidWctaGFuZGxlciBb TE9DVVMtUkVHRVhQIFtOQU1FLVJFR0VYUF1dCisrICAgIFVzYWdlOiBkaXNhYmxlIG1pc3Npbmct SFRZUEUtaGFuZGxlciBbTE9DVVMtUkVHRVhQIFtOQU1FLVJFR0VYUF1dCisgCisgICAgIExPQ1VT LVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzcGVjaWZ5aW5nIHRoZSBoYW5kbGVycyB0 bworICAgICBlbmFibGUuICBJdCBjYW4gYmUgJ2dsb2JhbCcsICdwcm9nc3BhY2UnIGZvciB0aGUg Y3VycmVudAorQEAgLTIwOSwxOSArMjQxLDI4IEBAIGNsYXNzIERpc2FibGVNaXNzaW5nRGVidWdI YW5kbGVyKGdkYi5Db21tYW5kKToKKyAgICAgaW4gdGhlIGxvY3VzIGFyZSBhZmZlY3RlZC4KKyAg ICAgIiIiCisgCistICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKy0gICAgICAgIHN1cGVyKCkuX19p bml0X18oImRpc2FibGUgbWlzc2luZy1kZWJ1Zy1oYW5kbGVyIiwgZ2RiLkNPTU1BTkRfRklMRVMp CisrICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYW5kbGVyX3R5cGUpOgorKyAgICAgICAgIyBVcGRh dGUgdGhlIGRvYyBzdHJpbmcgYmVmb3JlIGNhbGxpbmcgdGhlIHBhcmVudCBjb25zdHJ1Y3RvciwK KysgICAgICAgICMgcmVwbGFjaW5nIHRoZSBzdHJpbmcgJ0hUWVBFJyB3aXRoIHRoZSB2YWx1ZSBv ZiBIQU5ETEVSX1RZUEUuCisrICAgICAgICAjIFRoZSBwYXJlbnQgY29uc3RydWN0b3Igd2lsbCBn cmFiIGEgY29weSBvZiB0aGlzIHN0cmluZyB0bworKyAgICAgICAgIyB1c2UgYXMgdGhlIGNvbW1h bmRzIGhlbHAgdGV4dC4KKysgICAgICAgIHNlbGYuX19kb2NfXyA9IHNlbGYuX19kb2NfXy5yZXBs YWNlKCJIVFlQRSIsIGhhbmRsZXJfdHlwZSkKKysgICAgICAgIHN1cGVyKCkuX19pbml0X18oCisr ICAgICAgICAgICAgImRpc2FibGUgbWlzc2luZy0iICsgaGFuZGxlcl90eXBlICsgIi1oYW5kbGVy IiwgZ2RiLkNPTU1BTkRfRklMRVMKKysgICAgICAgICkKKysgICAgICAgIHNlbGYuaGFuZGxlcl90 eXBlID0gaGFuZGxlcl90eXBlCisgCisgICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0 eSk6CisgICAgICAgICAiIiJHREIgY2FsbHMgdGhpcyB0byBwZXJmb3JtIHRoZSBjb21tYW5kLiIi IgorLSAgICAgICAgZG9fZW5hYmxlX2hhbmRsZXIoYXJnLCBGYWxzZSkKKysgICAgICAgIGRvX2Vu YWJsZV9oYW5kbGVyKGFyZywgRmFsc2UsIHNlbGYuaGFuZGxlcl90eXBlKQorIAorIAorLWRlZiBy ZWdpc3Rlcl9taXNzaW5nX2RlYnVnX2hhbmRsZXJfY29tbWFuZHMoKToKKy0gICAgIiIiSW5zdGFs bHMgdGhlIG1pc3NpbmcgZGVidWcgaGFuZGxlciBjb21tYW5kcy4iIiIKKy0gICAgSW5mb01pc3Np bmdEZWJ1Z0hhbmRlcnMoKQorLSAgICBFbmFibGVNaXNzaW5nRGVidWdIYW5kbGVyKCkKKy0gICAg RGlzYWJsZU1pc3NpbmdEZWJ1Z0hhbmRsZXIoKQorK2RlZiByZWdpc3Rlcl9taXNzaW5nX2ZpbGVf aGFuZGxlcl9jb21tYW5kcygpOgorKyAgICAiIiJJbnN0YWxscyB0aGUgbWlzc2luZyBmaWxlIGhh bmRsZXIgY29tbWFuZHMuIiIiCisrICAgIGZvciBoYW5kbGVyX3R5cGUgaW4gWyJkZWJ1ZyIsICJv YmpmaWxlIl06CisrICAgICAgICBJbmZvTWlzc2luZ0ZpbGVIYW5kbGVycyhoYW5kbGVyX3R5cGUp CisrICAgICAgICBFbmFibGVNaXNzaW5nRmlsZUhhbmRsZXIoaGFuZGxlcl90eXBlKQorKyAgICAg ICAgRGlzYWJsZU1pc3NpbmdGaWxlSGFuZGxlcihoYW5kbGVyX3R5cGUpCisgCisgCistcmVnaXN0 ZXJfbWlzc2luZ19kZWJ1Z19oYW5kbGVyX2NvbW1hbmRzKCkKKytyZWdpc3Rlcl9taXNzaW5nX2Zp bGVfaGFuZGxlcl9jb21tYW5kcygpCitkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL21p c3NpbmdfZGVidWcucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvbWlzc2luZ19kZWJ1Zy5weQorLS0t IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL21pc3NpbmdfZGVidWcucHkKKysrKyBiL2dkYi9weXRob24v bGliL2dkYi9taXNzaW5nX2RlYnVnLnB5CitAQCAtMTcsNDggKzE3LDExIEBACisgTWlzc2luZ0Rl YnVnSGFuZGxlciBiYXNlIGNsYXNzLCBhbmQgcmVnaXN0ZXJfaGFuZGxlciBmdW5jdGlvbi4KKyAi IiIKKyAKKy1pbXBvcnQgc3lzCistCisgaW1wb3J0IGdkYgorK2Zyb20gZ2RiLm1pc3NpbmdfZmls ZXMgaW1wb3J0IE1pc3NpbmdGaWxlSGFuZGxlcgorIAorLWlmIHN5cy52ZXJzaW9uX2luZm8gPj0g KDMsIDcpOgorLSAgICAjIEZ1bmN0aW9ucyBzdHIuaXNhc2NpaSgpIGFuZCBzdHIuaXNhbG51bSBh cmUgYXZhaWxhYmxlIHN0YXJ0aW5nIFB5dGhvbgorLSAgICAjIDMuNy4KKy0gICAgZGVmIGlzYXNj aWkoY2gpOgorLSAgICAgICAgcmV0dXJuIGNoLmlzYXNjaWkoKQorLQorLSAgICBkZWYgaXNhbG51 bShjaCk6CistICAgICAgICByZXR1cm4gY2guaXNhbG51bSgpCistCistZWxzZToKKy0gICAgIyBG YWxsIGJhY2sgdG8gY3Vyc2VzLmFzY2lpLmlzYXNjaWkoKSBhbmQgY3Vyc2VzLmFzY2lpLmlzYWxu dW0oKSBmb3IKKy0gICAgIyBlYXJsaWVyIHZlcnNpb25zLgorLSAgICBmcm9tIGN1cnNlcy5hc2Np aSBpbXBvcnQgaXNhbG51bSwgaXNhc2NpaQorLQorLQorLWRlZiBfdmFsaWRhdGVfbmFtZShuYW1l KToKKy0gICAgIiIiVmFsaWRhdGUgYSBtaXNzaW5nIGRlYnVnIGhhbmRsZXIgbmFtZSBzdHJpbmcu CistCistICAgIElmIG5hbWUgaXMgdmFsaWQgYXMgYSBtaXNzaW5nIGRlYnVnIGhhbmRsZXIgbmFt ZSwgdGhlbiB0aGlzCistICAgIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4gIElmIG5hbWUgaXMgbm90 IHZhbGlkIHRoZW4gYW4gZXhjZXB0aW9uIGlzCistICAgIHJhaXNlZC4KKy0KKy0gICAgQXJndW1l bnRzOgorLSAgICAgICAgbmFtZTogQSBzdHJpbmcsIHRoZSBuYW1lIG9mIGEgbWlzc2luZyBkZWJ1 ZyBoYW5kbGVyLgorLQorLSAgICBSZXR1cm5zOgorLSAgICAgICAgTm90aGluZy4KKyAKKy0gICAg UmFpc2VzOgorLSAgICAgICAgVmFsdWVFcnJvcjogSWYgbmFtZSBpcyBpbnZhbGlkIGFzIGEgbWlz c2luZyBkZWJ1ZyBoYW5kbGVyCistICAgICAgICAgICAgICAgICAgICBuYW1lLgorLSAgICAiIiIK Ky0gICAgZm9yIGNoIGluIG5hbWU6CistICAgICAgICBpZiBub3QgaXNhc2NpaShjaCkgb3Igbm90 IChpc2FsbnVtKGNoKSBvciBjaCBpbiAiXy0iKToKKy0gICAgICAgICAgICByYWlzZSBWYWx1ZUVy cm9yKCJpbnZhbGlkIGNoYXJhY3RlciAnJXMnIGluIGhhbmRsZXIgbmFtZTogJXMiICUgKGNoLCBu YW1lKSkKKy0KKy0KKy1jbGFzcyBNaXNzaW5nRGVidWdIYW5kbGVyKG9iamVjdCk6CisrY2xhc3Mg TWlzc2luZ0RlYnVnSGFuZGxlcihNaXNzaW5nRmlsZUhhbmRsZXIpOgorICAgICAiIiJCYXNlIGNs YXNzIGZvciBtaXNzaW5nIGRlYnVnIGhhbmRsZXJzIHdyaXR0ZW4gaW4gUHl0aG9uLgorIAorICAg ICBBIG1pc3NpbmcgZGVidWcgaGFuZGxlciBoYXMgYSBzaW5nbGUgbWV0aG9kIF9fY2FsbF9fIGFs b25nIHdpdGgKK0BAIC02OSw0MSArMzIsOCBAQCBjbGFzcyBNaXNzaW5nRGVidWdIYW5kbGVyKG9i amVjdCk6CisgICAgICAgICBlbmFibGVkOiBXaGVuIHRydWUgdGhpcyBoYW5kbGVyIGlzIGVuYWJs ZWQuCisgICAgICIiIgorIAorLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CistICAgICAg ICAiIiJDb25zdHJ1Y3Rvci4KKy0KKy0gICAgICAgIEFyZ3M6CistICAgICAgICAgICAgbmFtZTog QW4gaWRlbnRpZnlpbmcgbmFtZSBmb3IgdGhpcyBoYW5kbGVyLgorLQorLSAgICAgICAgUmFpc2Vz OgorLSAgICAgICAgICAgIFR5cGVFcnJvcjogbmFtZSBpcyBub3QgYSBzdHJpbmcuCistICAgICAg ICAgICAgVmFsdWVFcnJvcjogbmFtZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuCistICAg ICAgICAiIiIKKy0KKy0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG5hbWUsIHN0cik6CistICAg ICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbmNvcnJlY3QgdHlwZSBmb3IgbmFtZTogJXMiICUg dHlwZShuYW1lKSkKKy0KKy0gICAgICAgIF92YWxpZGF0ZV9uYW1lKG5hbWUpCistCistICAgICAg ICBzZWxmLl9uYW1lID0gbmFtZQorLSAgICAgICAgc2VsZi5fZW5hYmxlZCA9IFRydWUKKy0KKy0g ICAgQHByb3BlcnR5CistICAgIGRlZiBuYW1lKHNlbGYpOgorLSAgICAgICAgcmV0dXJuIHNlbGYu X25hbWUKKy0KKy0gICAgQHByb3BlcnR5CistICAgIGRlZiBlbmFibGVkKHNlbGYpOgorLSAgICAg ICAgcmV0dXJuIHNlbGYuX2VuYWJsZWQKKy0KKy0gICAgQGVuYWJsZWQuc2V0dGVyCistICAgIGRl ZiBlbmFibGVkKHNlbGYsIHZhbHVlKToKKy0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVl LCBib29sKToKKy0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImluY29ycmVjdCB0eXBlIGZv ciBlbmFibGVkIGF0dHJpYnV0ZTogJXMiICUgdHlwZSh2YWx1ZSkpCistICAgICAgICBzZWxmLl9l bmFibGVkID0gdmFsdWUKKy0KKyAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG9iamZpbGUpOgorLSAg ICAgICAgIiIiR0RCIGhhbmRsZSBtaXNzaW5nIGRlYnVnIGluZm9ybWF0aW9uIGZvciBhbiBvYmpm aWxlLgorKyAgICAgICAgIiIiSGFuZGxlIG1pc3NpbmcgZGVidWcgaW5mb3JtYXRpb24gZm9yIGFu IG9iamZpbGUuCisgCisgICAgICAgICBBcmd1bWVudHM6CisgICAgICAgICAgICAgb2JqZmlsZTog QSBnZGIuT2JqZmlsZSBmb3Igd2hpY2ggR0RCIGNvdWxkIG5vdCBmaW5kIGFueQorQEAgLTEyNCw2 MiArNTQsNSBAQCBjbGFzcyBNaXNzaW5nRGVidWdIYW5kbGVyKG9iamVjdCk6CisgCisgCisgZGVm IHJlZ2lzdGVyX2hhbmRsZXIobG9jdXMsIGhhbmRsZXIsIHJlcGxhY2U9RmFsc2UpOgorLSAgICAi IiJSZWdpc3RlciBoYW5kbGVyIGluIGdpdmVuIGxvY3VzLgorLQorLSAgICBUaGUgaGFuZGxlciBp cyBwcmVwZW5kZWQgdG8gdGhlIGxvY3VzJ3MgbWlzc2luZyBkZWJ1ZyBoYW5kbGVycworLSAgICBs aXN0LiBUaGUgbmFtZSBvZiBoYW5kbGVyIHNob3VsZCBiZSB1bmlxdWUgKG9yIHJlcGxhY2UgbXVz dCBiZQorLSAgICBUcnVlKS4KKy0KKy0gICAgQXJndW1lbnRzOgorLSAgICAgICAgbG9jdXM6IEVp dGhlciBhIHByb2dzcGFjZSwgb3IgTm9uZSAoaW4gd2hpY2ggY2FzZSB0aGUgdW53aW5kZXIKKy0g ICAgICAgICAgICAgICBpcyByZWdpc3RlcmVkIGdsb2JhbGx5KS4KKy0gICAgICAgIGhhbmRsZXI6 IEFuIG9iamVjdCBvZiBhIGdkYi5NaXNzaW5nRGVidWdIYW5kbGVyIHN1YmNsYXNzLgorLQorLSAg ICAgICAgcmVwbGFjZTogSWYgVHJ1ZSwgcmVwbGFjZXMgZXhpc3RpbmcgaGFuZGxlciB3aXRoIHRo ZSBzYW1lIG5hbWUKKy0gICAgICAgICAgICAgICAgIHdpdGhpbiBsb2N1cy4gIE90aGVyd2lzZSwg cmFpc2VzIFJ1bnRpbWVFeGNlcHRpb24gaWYKKy0gICAgICAgICAgICAgICAgIHVud2luZGVyIHdp dGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cy4KKy0KKy0gICAgUmV0dXJuczoKKy0gICAg ICAgIE5vdGhpbmcuCistCistICAgIFJhaXNlczoKKy0gICAgICAgIFJ1bnRpbWVFcnJvcjogVGhl IG5hbWUgb2YgaGFuZGxlciBpcyBub3QgdW5pcXVlLgorLSAgICAgICAgVHlwZUVycm9yOiBCYWQg bG9jdXMgdHlwZS4KKy0gICAgICAgIEF0dHJpYnV0ZUVycm9yOiBSZXF1aXJlZCBhdHRyaWJ1dGVz IG9mIGhhbmRsZXIgYXJlIG1pc3NpbmcuCistICAgICIiIgorLQorLSAgICBpZiBsb2N1cyBpcyBO b25lOgorLSAgICAgICAgaWYgZ2RiLnBhcmFtZXRlcigidmVyYm9zZSIpOgorLSAgICAgICAgICAg IGdkYi53cml0ZSgiUmVnaXN0ZXJpbmcgZ2xvYmFsICVzIGhhbmRsZXIgLi4uXG4iICUgaGFuZGxl ci5uYW1lKQorLSAgICAgICAgbG9jdXMgPSBnZGIKKy0gICAgZWxpZiBpc2luc3RhbmNlKGxvY3Vz LCBnZGIuUHJvZ3NwYWNlKToKKy0gICAgICAgIGlmIGdkYi5wYXJhbWV0ZXIoInZlcmJvc2UiKToK Ky0gICAgICAgICAgICBnZGIud3JpdGUoCistICAgICAgICAgICAgICAgICJSZWdpc3RlcmluZyAl cyBoYW5kbGVyIGZvciAlcyAuLi5cbiIgJSAoaGFuZGxlci5uYW1lLCBsb2N1cy5maWxlbmFtZSkK Ky0gICAgICAgICAgICApCistICAgIGVsc2U6CistICAgICAgICByYWlzZSBUeXBlRXJyb3IoImxv Y3VzIHNob3VsZCBiZSBnZGIuUHJvZ3NwYWNlIG9yIE5vbmUiKQorLQorLSAgICAjIFNvbWUgc2Fu aXR5IGNoZWNrcyBvbiBIQU5ETEVSLiAgQ2FsbGluZyBnZXRhdHRyIHdpbGwgcmFpc2UgYW4KKy0g ICAgIyBleGNlcHRpb24gaWYgdGhlIGF0dHJpYnV0ZSBkb2Vzbid0IGV4aXN0LCB3aGljaCBpcyB3 aGF0IHdlIHdhbnQuCistICAgICMgVGhlc2UgY2hlY2tzIGFyZSBub3QgZXhoYXVzdGl2ZTsgd2Ug ZG9uJ3QgY2hlY2sgdGhlIGF0dHJpYnV0ZXMKKy0gICAgIyBoYXZlIHRoZSBjb3JyZWN0IHR5cGVz LCBvciB0aGUgbWV0aG9kIGhhcyB0aGUgY29ycmVjdCBzaWduYXR1cmUsCistICAgICMgYnV0IHRo aXMgc2hvdWxkIGNhdGNoIHNvbWUgYmFzaWMgbWlzdGFrZXMuCistICAgIGdldGF0dHIoaGFuZGxl ciwgIm5hbWUiKQorLSAgICBnZXRhdHRyKGhhbmRsZXIsICJlbmFibGVkIikKKy0gICAgY2FsbF9t ZXRob2QgPSBnZXRhdHRyKGhhbmRsZXIsICJfX2NhbGxfXyIpCistICAgIGlmIG5vdCBjYWxsYWJs ZShjYWxsX21ldGhvZCk6CistICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKy0gICAgICAg ICAgICAiJyVzJyBvYmplY3QncyAnX19jYWxsX18nIGF0dHJpYnV0ZSBpcyBub3QgY2FsbGFibGUi CistICAgICAgICAgICAgJSB0eXBlKGhhbmRsZXIpLl9fbmFtZV9fCistICAgICAgICApCistCist ICAgIGkgPSAwCistICAgIGZvciBuZWVkbGUgaW4gbG9jdXMubWlzc2luZ19kZWJ1Z19oYW5kbGVy czoKKy0gICAgICAgIGlmIG5lZWRsZS5uYW1lID09IGhhbmRsZXIubmFtZToKKy0gICAgICAgICAg ICBpZiByZXBsYWNlOgorLSAgICAgICAgICAgICAgICBkZWwgbG9jdXMubWlzc2luZ19kZWJ1Z19o YW5kbGVyc1tpXQorLSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIHJhaXNlIFJ1 bnRpbWVFcnJvcigiSGFuZGxlciAlcyBhbHJlYWR5IGV4aXN0cy4iICUgaGFuZGxlci5uYW1lKQor LSAgICAgICAgaSArPSAxCistICAgIGxvY3VzLm1pc3NpbmdfZGVidWdfaGFuZGxlcnMuaW5zZXJ0 KDAsIGhhbmRsZXIpCisrICAgICIiIlNlZSBnZGIubWlzc2luZ19maWxlcy5yZWdpc3Rlcl9oYW5k bGVyLiIiIgorKyAgICBnZGIubWlzc2luZ19maWxlcy5yZWdpc3Rlcl9oYW5kbGVyKCJkZWJ1ZyIs IGxvY3VzLCBoYW5kbGVyLCByZXBsYWNlKQorZGlmZiAtLWdpdCBhL2dkYi9weXRob24vbGliL2dk Yi9taXNzaW5nX2ZpbGVzLnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL21pc3NpbmdfZmlsZXMucHkK K25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvcHl0aG9uL2xp Yi9nZGIvbWlzc2luZ19maWxlcy5weQorQEAgLTAsMCArMSwyMDQgQEAKKysjIENvcHlyaWdodCAo QykgMjAyMy0yMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KKysKKysiIiIKKytNaXNzaW5nRmlsZUhhbmRsZXIgYmFzZSBj bGFzcywgYW5kIHN1cHBvcnQgZnVuY3Rpb25zIHVzZWQgYnkgdGhlCisrbWlzc2luZ19kZWJ1Zy5w eSBhbmQgbWlzc2luZ19vYmpmaWxlLnB5IG1vZHVsZXMuCisrIiIiCisrCisraW1wb3J0IHN5cwor KworK2ltcG9ydCBnZGIKKysKKytpZiBzeXMudmVyc2lvbl9pbmZvID49ICgzLCA3KToKKysgICAg IyBGdW5jdGlvbnMgc3RyLmlzYXNjaWkoKSBhbmQgc3RyLmlzYWxudW0gYXJlIGF2YWlsYWJsZSBz dGFydGluZyBQeXRob24KKysgICAgIyAzLjcuCisrICAgIGRlZiBpc2FzY2lpKGNoKToKKysgICAg ICAgIHJldHVybiBjaC5pc2FzY2lpKCkKKysKKysgICAgZGVmIGlzYWxudW0oY2gpOgorKyAgICAg ICAgcmV0dXJuIGNoLmlzYWxudW0oKQorKworK2Vsc2U6CisrICAgICMgT2xkZXIgdmVyc2lvbiBv ZiBQeXRob24gZG9lc24ndCBoYXZlIHN0ci5pc2FzY2lpKCkgYW5kCisrICAgICMgc3RyLmlzYWxu dW0oKSBzbyBwcm92aWRlIG91ciBvd24uCisrICAgICMKKysgICAgIyBXZSBjb3VsZCBpbXBvcnQg aXNhbG51bSgpIGFuZCBpc2FzY2lpKCkgZnJvbSB0aGUgY3Vyc2VzIGxpYnJhcnksCisrICAgICMg YnV0IHRoYXQgYWRkcyBhbiBleHRyYSBkZXBlbmRlbmN5LiAgR2l2ZW4gdGhlc2UgZnVuY3Rpb25z IGFyZQorKyAgICAjIGJvdGggc21hbGwgYW5kIHRyaXZpYWwgbGV0cyBpbXBsZW1lbnQgdGhlbSBo ZXJlLgorKyAgICAjCisrICAgICMgVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGJhc2VkIG9uIHRob3Nl IGluIHRoZSBjdXJzZXMgbGlicmFyeSwgYnV0CisrICAgICMgc2ltcGxpZmllZCBhcyB3ZSBrbm93 IEMgd2lsbCBhbHdheXMgYmUgYSBzaW5nbGUgY2hhcmFjdGVyICdzdHInLgorKworKyAgICBkZWYg aXNkaWdpdChjKToKKysgICAgICAgIHJldHVybiA0OCA8PSBvcmQoYykgPD0gNTcKKysKKysgICAg ZGVmIGlzbG93ZXIoYyk6CisrICAgICAgICByZXR1cm4gOTcgPD0gb3JkKGMpIDw9IDEyMgorKwor KyAgICBkZWYgaXN1cHBlcihjKToKKysgICAgICAgIHJldHVybiA2NSA8PSBvcmQoYykgPD0gOTAK KysKKysgICAgZGVmIGlzYWxwaGEoYyk6CisrICAgICAgICByZXR1cm4gaXN1cHBlcihjKSBvciBp c2xvd2VyKGMpCisrCisrICAgIGRlZiBpc2FsbnVtKGMpOgorKyAgICAgICAgcmV0dXJuIGlzYWxw aGEoYykgb3IgaXNkaWdpdChjKQorKworKyAgICBkZWYgaXNhc2NpaShjKToKKysgICAgICAgIHJl dHVybiAwIDw9IG9yZChjKSA8PSAxMjcKKysKKysKKytkZWYgX3ZhbGlkYXRlX25hbWUobmFtZSk6 CisrICAgICIiIlZhbGlkYXRlIGEgbWlzc2luZyBmaWxlIGhhbmRsZXIgbmFtZSBzdHJpbmcuCisr CisrICAgIElmIG5hbWUgaXMgdmFsaWQgYXMgYSBtaXNzaW5nIGZpbGUgaGFuZGxlciBuYW1lLCB0 aGVuIHRoaXMKKysgICAgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiAgSWYgbmFtZSBpcyBub3QgdmFs aWQgdGhlbiBhbiBleGNlcHRpb24gaXMKKysgICAgcmFpc2VkLgorKworKyAgICBBcmd1bWVudHM6 CisrICAgICAgICBuYW1lOiBBIHN0cmluZywgdGhlIG5hbWUgb2YgYSBtaXNzaW5nIGZpbGUgaGFu ZGxlci4KKysKKysgICAgUmV0dXJuczoKKysgICAgICAgIE5vdGhpbmcuCisrCisrICAgIFJhaXNl czoKKysgICAgICAgIFZhbHVlRXJyb3I6IElmIG5hbWUgaXMgaW52YWxpZCBhcyBhIG1pc3Npbmcg ZmlsZSBoYW5kbGVyCisrICAgICAgICAgICAgICAgICAgICBuYW1lLgorKyAgICAiIiIKKysKKysg ICAgZm9yIGNoIGluIG5hbWU6CisrICAgICAgICBpZiBub3QgaXNhc2NpaShjaCkgb3Igbm90IChp c2FsbnVtKGNoKSBvciBjaCBpbiAiXy0iKToKKysgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9y KCJpbnZhbGlkIGNoYXJhY3RlciAnJXMnIGluIGhhbmRsZXIgbmFtZTogJXMiICUgKGNoLCBuYW1l KSkKKysKKysKKytjbGFzcyBNaXNzaW5nRmlsZUhhbmRsZXIob2JqZWN0KToKKysgICAgIiIiQmFz ZSBjbGFzcyBmb3IgbWlzc2luZyBmaWxlIGhhbmRsZXJzIHdyaXR0ZW4gaW4gUHl0aG9uLgorKwor KyAgICBBIG1pc3NpbmcgZmlsZSBoYW5kbGVyIGhhcyBhIHNpbmdsZSBtZXRob2QgX19jYWxsX18g YWxvbmcgd2l0aCB0aGUKKysgICAgcmVhZC93cml0ZSBhdHRyaWJ1dGUgZW5hYmxlZCwgYW5kIGEg cmVhZC1vbmx5IGF0dHJpYnV0ZSBuYW1lLiAgVGhlCisrICAgIGF0dHJpYnV0ZXMgYXJlIHByb3Zp ZGVkIGJ5IHRoaXMgY2xhc3Mgd2hpbGUgdGhlIF9fY2FsbF9fIG1ldGhvZCBpcworKyAgICBwcm92 aWRlZCBieSBhIHN1Yi1jbGFzcy4gIEVhY2ggc3ViLWNsYXNzZXMgX19jYWxsX18gbWV0aG9kIHdp bGwKKysgICAgaGF2ZSBhIGRpZmZlcmVudCBzaWduYXR1cmUuCisrCisrICAgIEF0dHJpYnV0ZXM6 CisrICAgICAgICBuYW1lOiBSZWFkLW9ubHkgYXR0cmlidXRlLCB0aGUgbmFtZSBvZiB0aGlzIGhh bmRsZXIuCisrICAgICAgICBlbmFibGVkOiBXaGVuIHRydWUgdGhpcyBoYW5kbGVyIGlzIGVuYWJs ZWQuCisrICAgICIiIgorKworKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisrICAgICAg ICAiIiJDb25zdHJ1Y3Rvci4KKysKKysgICAgICAgIEFyZ3M6CisrICAgICAgICAgICAgbmFtZTog QW4gaWRlbnRpZnlpbmcgbmFtZSBmb3IgdGhpcyBoYW5kbGVyLgorKworKyAgICAgICAgUmFpc2Vz OgorKyAgICAgICAgICAgIFR5cGVFcnJvcjogbmFtZSBpcyBub3QgYSBzdHJpbmcuCisrICAgICAg ICAgICAgVmFsdWVFcnJvcjogbmFtZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuCisrICAg ICAgICAiIiIKKysKKysgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG5hbWUsIHN0cik6CisrICAg ICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbmNvcnJlY3QgdHlwZSBmb3IgbmFtZTogJXMiICUg dHlwZShuYW1lKSkKKysKKysgICAgICAgIF92YWxpZGF0ZV9uYW1lKG5hbWUpCisrCisrICAgICAg ICBzZWxmLl9uYW1lID0gbmFtZQorKyAgICAgICAgc2VsZi5fZW5hYmxlZCA9IFRydWUKKysKKysg ICAgQHByb3BlcnR5CisrICAgIGRlZiBuYW1lKHNlbGYpOgorKyAgICAgICAgcmV0dXJuIHNlbGYu X25hbWUKKysKKysgICAgQHByb3BlcnR5CisrICAgIGRlZiBlbmFibGVkKHNlbGYpOgorKyAgICAg ICAgcmV0dXJuIHNlbGYuX2VuYWJsZWQKKysKKysgICAgQGVuYWJsZWQuc2V0dGVyCisrICAgIGRl ZiBlbmFibGVkKHNlbGYsIHZhbHVlKToKKysgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVl LCBib29sKToKKysgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImluY29ycmVjdCB0eXBlIGZv ciBlbmFibGVkIGF0dHJpYnV0ZTogJXMiICUgdHlwZSh2YWx1ZSkpCisrICAgICAgICBzZWxmLl9l bmFibGVkID0gdmFsdWUKKysKKysKKytkZWYgcmVnaXN0ZXJfaGFuZGxlcihoYW5kbGVyX3R5cGUs IGxvY3VzLCBoYW5kbGVyLCByZXBsYWNlPUZhbHNlKToKKysgICAgIiIiUmVnaXN0ZXIgaGFuZGxl ciBpbiBnaXZlbiBsb2N1cy4KKysKKysgICAgVGhlIGhhbmRsZXIgaXMgcHJlcGVuZGVkIHRvIHRo ZSBsb2N1cydzIG1pc3NpbmcgZmlsZSBoYW5kbGVycworKyAgICBsaXN0LiBUaGUgbmFtZSBvZiBo YW5kbGVyIHNob3VsZCBiZSB1bmlxdWUgKG9yIHJlcGxhY2UgbXVzdCBiZQorKyAgICBUcnVlKSwg YW5kIHRoZSBuYW1lIG11c3QgcGFzcyB0aGUgX3ZhbGlkYXRlX25hbWUgY2hlY2suCisrCisrICAg IEFyZ3VtZW50czoKKysgICAgICAgIGhhbmRsZXJfdHlwZTogQSBzdHJpbmcsIGVpdGhlciAnZGVi dWcnIG9yICdvYmpmaWxlJyBpbmRpY2F0aW5nIHRoZQorKyAgICAgICAgICAgIHR5cGUgb2YgaGFu ZGxlciB0byBiZSByZWdpc3RlcmVkLgorKyAgICAgICAgbG9jdXM6IEVpdGhlciBhIHByb2dzcGFj ZSwgb3IgTm9uZSAoaW4gd2hpY2ggY2FzZSB0aGUgdW53aW5kZXIKKysgICAgICAgICAgICAgICBp cyByZWdpc3RlcmVkIGdsb2JhbGx5KS4KKysgICAgICAgIGhhbmRsZXI6IEFuIG9iamVjdCB1c2Vk IGFzIGEgbWlzc2luZyBmaWxlIGhhbmRsZXIuICBVc3VhbGx5IGEKKysgICAgICAgICAgICBzdWIt Y2xhc3Mgb2YgTWlzc2luZ0ZpbGVIYW5kbGVyLgorKyAgICAgICAgcmVwbGFjZTogSWYgVHJ1ZSwg cmVwbGFjZXMgZXhpc3RpbmcgaGFuZGxlciB3aXRoIHRoZSBzYW1lIG5hbWUKKysgICAgICAgICAg ICAgICAgIHdpdGhpbiBsb2N1cy4gIE90aGVyd2lzZSwgcmFpc2VzIFJ1bnRpbWVFeGNlcHRpb24g aWYKKysgICAgICAgICAgICAgICAgIHVud2luZGVyIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5 IGV4aXN0cy4KKysKKysgICAgUmV0dXJuczoKKysgICAgICAgIE5vdGhpbmcuCisrCisrICAgIFJh aXNlczoKKysgICAgICAgIFJ1bnRpbWVFcnJvcjogVGhlIG5hbWUgb2YgaGFuZGxlciBpcyBub3Qg dW5pcXVlLgorKyAgICAgICAgVHlwZUVycm9yOiBCYWQgbG9jdXMgdHlwZS4KKysgICAgICAgIEF0 dHJpYnV0ZUVycm9yOiBSZXF1aXJlZCBhdHRyaWJ1dGVzIG9mIGhhbmRsZXIgYXJlIG1pc3Npbmcu CisrICAgICAgICBWYWx1ZUVycm9yOiBJZiB0aGUgbmFtZSBvZiB0aGUgaGFuZGxlciBpcyBpbnZh bGlkLCBvciBpZgorKyAgICAgICAgICAgIGhhbmRsZXJfdHlwZSBpcyBuZWl0aGVyICdkZWJ1Zycg b3IgJ29iamZpbGUnLgorKyAgICAiIiIKKysKKysgICAgaWYgaGFuZGxlcl90eXBlICE9ICJkZWJ1 ZyIgYW5kIGhhbmRsZXJfdHlwZSAhPSAib2JqZmlsZSI6CisrICAgICAgICByYWlzZSBWYWx1ZUVy cm9yKCJoYW5kbGVyX3R5cGUgbXVzdCBiZSAnZGVidWcnIG9yICdvYmpmaWxlJyIpCisrCisrICAg IGlmIGxvY3VzIGlzIE5vbmU6CisrICAgICAgICBpZiBnZGIucGFyYW1ldGVyKCJ2ZXJib3NlIik6 CisrICAgICAgICAgICAgZ2RiLndyaXRlKCJSZWdpc3RlcmluZyBnbG9iYWwgJXMgaGFuZGxlciAu Li5cbiIgJSBoYW5kbGVyLm5hbWUpCisrICAgICAgICBsb2N1cyA9IGdkYgorKyAgICBlbGlmIGlz aW5zdGFuY2UobG9jdXMsIGdkYi5Qcm9nc3BhY2UpOgorKyAgICAgICAgaWYgZ2RiLnBhcmFtZXRl cigidmVyYm9zZSIpOgorKyAgICAgICAgICAgIGdkYi53cml0ZSgKKysgICAgICAgICAgICAgICAg IlJlZ2lzdGVyaW5nICVzIGhhbmRsZXIgZm9yICVzIC4uLlxuIiAlIChoYW5kbGVyLm5hbWUsIGxv Y3VzLmZpbGVuYW1lKQorKyAgICAgICAgICAgICkKKysgICAgZWxzZToKKysgICAgICAgIHJhaXNl IFR5cGVFcnJvcigibG9jdXMgc2hvdWxkIGJlIGdkYi5Qcm9nc3BhY2Ugb3IgTm9uZSIpCisrCisr ICAgICMgU29tZSBzYW5pdHkgY2hlY2tzIG9uIEhBTkRMRVIuICBDYWxsaW5nIGdldGF0dHIgd2ls bCByYWlzZSBhbgorKyAgICAjIGV4Y2VwdGlvbiBpZiB0aGUgYXR0cmlidXRlIGRvZXNuJ3QgZXhp c3QsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudC4KKysgICAgIyBUaGVzZSBjaGVja3MgYXJlIG5vdCBl eGhhdXN0aXZlOyB3ZSBkb24ndCBjaGVjayB0aGUgYXR0cmlidXRlcworKyAgICAjIGhhdmUgdGhl IGNvcnJlY3QgdHlwZXMsIG9yIHRoZSBtZXRob2QgaGFzIHRoZSBjb3JyZWN0IHNpZ25hdHVyZSwK KysgICAgIyBidXQgdGhpcyBzaG91bGQgY2F0Y2ggc29tZSBiYXNpYyBtaXN0YWtlcy4KKysgICAg bmFtZSA9IGdldGF0dHIoaGFuZGxlciwgIm5hbWUiKQorKyAgICBfdmFsaWRhdGVfbmFtZShuYW1l KQorKworKyAgICBnZXRhdHRyKGhhbmRsZXIsICJlbmFibGVkIikKKysKKysgICAgY2FsbF9tZXRo b2QgPSBnZXRhdHRyKGhhbmRsZXIsICJfX2NhbGxfXyIpCisrICAgIGlmIG5vdCBjYWxsYWJsZShj YWxsX21ldGhvZCk6CisrICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKysgICAgICAgICAg ICAiJyVzJyBvYmplY3QncyAnX19jYWxsX18nIGF0dHJpYnV0ZSBpcyBub3QgY2FsbGFibGUiCisr ICAgICAgICAgICAgJSB0eXBlKGhhbmRsZXIpLl9fbmFtZV9fCisrICAgICAgICApCisrCisrICAg IGkgPSAwCisrICAgIGZvciBuZWVkbGUgaW4gbG9jdXMubWlzc2luZ19maWxlX2hhbmRsZXJzOgor KyAgICAgICAgaWYgbmVlZGxlWzBdID09IGhhbmRsZXJfdHlwZSBhbmQgbmVlZGxlWzFdLm5hbWUg PT0gaGFuZGxlci5uYW1lOgorKyAgICAgICAgICAgIGlmIHJlcGxhY2U6CisrICAgICAgICAgICAg ICAgIGRlbCBsb2N1cy5taXNzaW5nX2ZpbGVfaGFuZGxlcnNbaV0KKysgICAgICAgICAgICBlbHNl OgorKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkhhbmRsZXIgJXMgYWxyZWFk eSBleGlzdHMuIiAlIGhhbmRsZXIubmFtZSkKKysgICAgICAgIGkgKz0gMQorKyAgICBsb2N1cy5t aXNzaW5nX2ZpbGVfaGFuZGxlcnMuaW5zZXJ0KDAsIChoYW5kbGVyX3R5cGUsIGhhbmRsZXIpKQor ZGlmZiAtLWdpdCBhL2dkYi9weXRob24vbGliL2dkYi9taXNzaW5nX29iamZpbGUucHkgYi9nZGIv cHl0aG9uL2xpYi9nZGIvbWlzc2luZ19vYmpmaWxlLnB5CituZXcgZmlsZSBtb2RlIDEwMDY0NAor LS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL3B5dGhvbi9saWIvZ2RiL21pc3Npbmdfb2JqZmlsZS5w eQorQEAgLTAsMCArMSw2NyBAQAorKyMgQ29weXJpZ2h0IChDKSAyMDI0IEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysKKysi IiIKKytNaXNzaW5nT2JqZmlsZUhhbmRsZXIgYmFzZSBjbGFzcywgYW5kIHJlZ2lzdGVyX2hhbmRs ZXIgZnVuY3Rpb24uCisrIiIiCisrCisraW1wb3J0IGdkYgorK2Zyb20gZ2RiLm1pc3NpbmdfZmls ZXMgaW1wb3J0IE1pc3NpbmdGaWxlSGFuZGxlcgorKworKworK2NsYXNzIE1pc3NpbmdPYmpmaWxl SGFuZGxlcihNaXNzaW5nRmlsZUhhbmRsZXIpOgorKyAgICAiIiJCYXNlIGNsYXNzIGZvciBtaXNz aW5nIG9iamZpbGUgaGFuZGxlcnMgd3JpdHRlbiBpbiBQeXRob24uCisrCisrICAgIEEgbWlzc2lu ZyBvYmpmaWxlIGhhbmRsZXIgaGFzIGEgc2luZ2xlIG1ldGhvZCBfX2NhbGxfXyBhbG9uZyB3aXRo CisrICAgIHRoZSByZWFkL3dyaXRlIGF0dHJpYnV0ZSBlbmFibGVkLCBhbmQgYSByZWFkLW9ubHkg YXR0cmlidXRlIG5hbWUuCisrCisrICAgIEF0dHJpYnV0ZXM6CisrICAgICAgICBuYW1lOiBSZWFk LW9ubHkgYXR0cmlidXRlLCB0aGUgbmFtZSBvZiB0aGlzIGhhbmRsZXIuCisrICAgICAgICBlbmFi bGVkOiBXaGVuIHRydWUgdGhpcyBoYW5kbGVyIGlzIGVuYWJsZWQuCisrICAgICIiIgorKworKyAg ICBkZWYgX19jYWxsX18oc2VsZiwgYnVpbGRpZCwgZmlsZW5hbWUpOgorKyAgICAgICAgIiIiSGFu ZGxlIGEgbWlzc2luZyBvYmpmaWxlIHdoZW4gR0RCIGNhbiBrbm93cyB0aGUgYnVpbGQtaWQuCisr CisrICAgICAgICBBcmd1bWVudHM6CisrCisrICAgICAgICAgICAgYnVpbGRpZDogQSBzdHJpbmcg Y29udGFpbmluZyB0aGUgYnVpbGQtaWQgZm9yIHRoZSBvYmpmaWxlCisrICAgICAgICAgICAgICAg IEdEQiBpcyBzZWFyY2hpbmcgZm9yLgorKyAgICAgICAgICAgIGZpbGVuYW1lOiBBIHN0cmluZyBj b250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBmaWxlIEdEQiBpcworKyAgICAgICAgICAgICAgICBz ZWFyY2hpbmcgZm9yLiAgVGhpcyBpcyBwcm92aWRlZCBvbmx5IGZvciB0aGUgcHVycG9zZQorKyAg ICAgICAgICAgICAgICBvZiBjcmVhdGluZyBkaWFnbm9zdGljIG1lc3NhZ2VzLiAgSWYgdGhlIGZp bGUgaXMgZm91bmQKKysgICAgICAgICAgICAgICAgaXQgZG9lcyBub3QgaGF2ZSB0byBiZSBwbGFj ZWQgaGVyZSwgYW5kIHRoaXMgZmlsZQorKyAgICAgICAgICAgICAgICBtaWdodCBhbHJlYWR5IGV4 aXN0IGJ1dCBHREIgaGFzIGRldGVybWluZWQgaXQgaXMgbm90CisrICAgICAgICAgICAgICAgIHN1 aXRhYmxlIGZvciB1c2UsIGUuZy4gaWYgdGhlIGJ1aWxkLWlkIGRvZXNuJ3QgbWF0Y2guCisrCisr ICAgICAgICBSZXR1cm5zOgorKworKyAgICAgICAgICAgIFRydWU6IEdEQiBzaG91bGQgdHJ5IGFn YWluIHRvIGxvY2F0ZSB0aGUgbWlzc2luZyBvYmpmaWxlLAorKyAgICAgICAgICAgICAgICB0aGUg aGFuZGxlciBtYXkgaGF2ZSBpbnN0YWxsZWQgdGhlIG1pc3NpbmcgZmlsZS4KKysgICAgICAgICAg ICBGYWxzZTogR0RCIHNob3VsZCBtb3ZlIG9uIHdpdGhvdXQgdGhlIG9iamZpbGUuICBUaGUKKysg ICAgICAgICAgICAgICAgaGFuZGxlciBoYXMgZGV0ZXJtaW5lZCB0aGF0IHRoaXMgb2JqZmlsZSBp cyBub3QKKysgICAgICAgICAgICAgICAgYXZhaWxhYmxlLgorKyAgICAgICAgICAgIEEgc3RyaW5n OiBHREIgc2hvdWxkIGxvYWQgdGhlIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGg7IGl0CisrICAgICAg ICAgICAgICAgIGNvbnRhaW5zIHRoZSByZXF1ZXN0ZWQgb2JqZmlsZS4KKysgICAgICAgICAgICBO b25lOiBUaGlzIGhhbmRsZXIgY2FuJ3QgaGVscCB3aXRoIHRoaXMgb2JqZmlsZS4gIEdEQgorKyAg ICAgICAgICAgICAgICBzaG91bGQgdHJ5IGFueSBvdGhlciByZWdpc3RlcmVkIGhhbmRsZXJzLgor KworKyAgICAgICAgIiIiCisrICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJNaXNz aW5nT2JqZmlsZUhhbmRsZXIuX19jYWxsX18oKSIpCisrCisrCisrZGVmIHJlZ2lzdGVyX2hhbmRs ZXIobG9jdXMsIGhhbmRsZXIsIHJlcGxhY2U9RmFsc2UpOgorKyAgICAiIiJTZWUgZ2RiLm1pc3Np bmdfZmlsZXMucmVnaXN0ZXJfaGFuZGxlci4iIiIKKysgICAgZ2RiLm1pc3NpbmdfZmlsZXMucmVn aXN0ZXJfaGFuZGxlcigib2JqZmlsZSIsIGxvY3VzLCBoYW5kbGVyLCByZXBsYWNlKQorZGlmZiAt LWdpdCBhL2dkYi9weXRob24vcHktcHJvZ3NwYWNlLmMgYi9nZGIvcHl0aG9uL3B5LXByb2dzcGFj ZS5jCistLS0gYS9nZGIvcHl0aG9uL3B5LXByb2dzcGFjZS5jCisrKysgYi9nZGIvcHl0aG9uL3B5 LXByb2dzcGFjZS5jCitAQCAtNTUsOCArNTUsOCBAQCBzdHJ1Y3QgcHNwYWNlX29iamVjdAorICAg LyogVGhlIGRlYnVnIG1ldGhvZCBsaXN0LiAgKi8KKyAgIFB5T2JqZWN0ICp4bWV0aG9kczsKKyAK Ky0gIC8qIFRoZSBtaXNzaW5nIGRlYnVnIGhhbmRsZXIgbGlzdC4gICovCistICBQeU9iamVjdCAq bWlzc2luZ19kZWJ1Z19oYW5kbGVyczsKKysgIC8qIFRoZSBtaXNzaW5nIGZpbGUgaGFuZGxlciBs aXN0LiAgKi8KKysgIFB5T2JqZWN0ICptaXNzaW5nX2ZpbGVfaGFuZGxlcnM7CisgfTsKKyAKKyBl eHRlcm4gUHlUeXBlT2JqZWN0IHBzcGFjZV9vYmplY3RfdHlwZQorQEAgLTE2Niw3ICsxNjYsNyBA QCBwc3B5X2RlYWxsb2MgKFB5T2JqZWN0ICpzZWxmKQorICAgUHlfWERFQ1JFRiAocHNfc2VsZi0+ ZnJhbWVfdW53aW5kZXJzKTsKKyAgIFB5X1hERUNSRUYgKHBzX3NlbGYtPnR5cGVfcHJpbnRlcnMp OworICAgUHlfWERFQ1JFRiAocHNfc2VsZi0+eG1ldGhvZHMpOworLSAgUHlfWERFQ1JFRiAocHNf c2VsZi0+bWlzc2luZ19kZWJ1Z19oYW5kbGVycyk7CisrICBQeV9YREVDUkVGIChwc19zZWxmLT5t aXNzaW5nX2ZpbGVfaGFuZGxlcnMpOworICAgUHlfVFlQRSAoc2VsZiktPnRwX2ZyZWUgKHNlbGYp OworIH0KKyAKK0BAIC0yMDIsOCArMjAyLDggQEAgcHNweV9pbml0aWFsaXplIChwc3BhY2Vfb2Jq ZWN0ICpzZWxmKQorICAgaWYgKHNlbGYtPnhtZXRob2RzID09IE5VTEwpCisgICAgIHJldHVybiAw OworIAorLSAgc2VsZi0+bWlzc2luZ19kZWJ1Z19oYW5kbGVycyA9IFB5TGlzdF9OZXcgKDApOwor LSAgaWYgKHNlbGYtPm1pc3NpbmdfZGVidWdfaGFuZGxlcnMgPT0gbnVsbHB0cikKKysgIHNlbGYt Pm1pc3NpbmdfZmlsZV9oYW5kbGVycyA9IFB5TGlzdF9OZXcgKDApOworKyAgaWYgKHNlbGYtPm1p c3NpbmdfZmlsZV9oYW5kbGVycyA9PSBudWxscHRyKQorICAgICByZXR1cm4gMDsKKyAKKyAgIHJl dHVybiAxOworQEAgLTM0OSwxOCArMzQ5LDE4IEBAIHBzcHlfZ2V0X3htZXRob2RzIChQeU9iamVj dCAqbywgdm9pZCAqaWdub3JlKQorIC8qIFJldHVybiB0aGUgbGlzdCBvZiBtaXNzaW5nIGRlYnVn IGhhbmRsZXJzIGZvciB0aGlzIHByb2dyYW0gc3BhY2UuICAqLworIAorIHN0YXRpYyBQeU9iamVj dCAqCistcHNweV9nZXRfbWlzc2luZ19kZWJ1Z19oYW5kbGVycyAoUHlPYmplY3QgKm8sIHZvaWQg Kmlnbm9yZSkKKytwc3B5X2dldF9taXNzaW5nX2ZpbGVfaGFuZGxlcnMgKFB5T2JqZWN0ICpvLCB2 b2lkICppZ25vcmUpCisgeworICAgcHNwYWNlX29iamVjdCAqc2VsZiA9IChwc3BhY2Vfb2JqZWN0 ICopIG87CisgCistICBQeV9JTkNSRUYgKHNlbGYtPm1pc3NpbmdfZGVidWdfaGFuZGxlcnMpOwor LSAgcmV0dXJuIHNlbGYtPm1pc3NpbmdfZGVidWdfaGFuZGxlcnM7CisrICBQeV9JTkNSRUYgKHNl bGYtPm1pc3NpbmdfZmlsZV9oYW5kbGVycyk7CisrICByZXR1cm4gc2VsZi0+bWlzc2luZ19maWxl X2hhbmRsZXJzOworIH0KKyAKKyAvKiBTZXQgdGhpcyBwcm9ncmFtIHNwYWNlJ3MgbGlzdCBvZiBt aXNzaW5nIGRlYnVnIGhhbmRsZXJzIHRvIEhBTkRMRVJTLiAgKi8KKyAKKyBzdGF0aWMgaW50Cist cHNweV9zZXRfbWlzc2luZ19kZWJ1Z19oYW5kbGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpo YW5kbGVycywKKytwc3B5X3NldF9taXNzaW5nX2ZpbGVfaGFuZGxlcnMgKFB5T2JqZWN0ICpvLCBQ eU9iamVjdCAqaGFuZGxlcnMsCisgCQkJCSB2b2lkICppZ25vcmUpCisgeworICAgcHNwYWNlX29i amVjdCAqc2VsZiA9IChwc3BhY2Vfb2JqZWN0ICopIG87CitAQCAtMzgwLDkgKzM4MCw5IEBAIHBz cHlfc2V0X21pc3NpbmdfZGVidWdfaGFuZGxlcnMgKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqaGFu ZGxlcnMsCisgICAgIH0KKyAKKyAgIC8qIFRha2UgY2FyZSBpbiBjYXNlIHRoZSBMSFMgYW5kIFJI UyBhcmUgcmVsYXRlZCBzb21laG93LiAgKi8KKy0gIGdkYnB5X3JlZjw+IHRtcCAoc2VsZi0+bWlz c2luZ19kZWJ1Z19oYW5kbGVycyk7CisrICBnZGJweV9yZWY8PiB0bXAgKHNlbGYtPm1pc3Npbmdf ZmlsZV9oYW5kbGVycyk7CisgICBQeV9JTkNSRUYgKGhhbmRsZXJzKTsKKy0gIHNlbGYtPm1pc3Np bmdfZGVidWdfaGFuZGxlcnMgPSBoYW5kbGVyczsKKysgIHNlbGYtPm1pc3NpbmdfZmlsZV9oYW5k bGVycyA9IGhhbmRsZXJzOworIAorICAgcmV0dXJuIDA7CisgfQorQEAgLTc3OSw4ICs3NzksOCBA QCBzdGF0aWMgZ2RiX1B5R2V0U2V0RGVmIHBzcGFjZV9nZXRzZXRbXSA9CisgICAgICJUeXBlIHBy aW50ZXJzLiIsIE5VTEwgfSwKKyAgIHsgInhtZXRob2RzIiwgcHNweV9nZXRfeG1ldGhvZHMsIE5V TEwsCisgICAgICJEZWJ1ZyBtZXRob2RzLiIsIE5VTEwgfSwKKy0gIHsgIm1pc3NpbmdfZGVidWdf aGFuZGxlcnMiLCBwc3B5X2dldF9taXNzaW5nX2RlYnVnX2hhbmRsZXJzLAorLSAgICBwc3B5X3Nl dF9taXNzaW5nX2RlYnVnX2hhbmRsZXJzLCAiTWlzc2luZyBkZWJ1ZyBoYW5kbGVycy4iLCBOVUxM IH0sCisrICB7ICJtaXNzaW5nX2ZpbGVfaGFuZGxlcnMiLCBwc3B5X2dldF9taXNzaW5nX2ZpbGVf aGFuZGxlcnMsCisrICAgIHBzcHlfc2V0X21pc3NpbmdfZmlsZV9oYW5kbGVycywgIk1pc3Npbmcg ZmlsZSBoYW5kbGVycy4iLCBOVUxMIH0sCisgICB7IE5VTEwgfQorIH07CisgCitkaWZmIC0tZ2l0 IGEvZ2RiL3B5dGhvbi9weXRob24uYyBiL2dkYi9weXRob24vcHl0aG9uLmMKKy0tLSBhL2dkYi9w eXRob24vcHl0aG9uLmMKKysrKyBiL2dkYi9weXRob24vcHl0aG9uLmMKK0BAIC0zNSw2ICszNSw3 IEBACisgI2luY2x1ZGUgImxvY2F0aW9uLmgiCisgI2luY2x1ZGUgInJ1bi1vbi1tYWluLXRocmVh ZC5oIgorICNpbmNsdWRlICJvYnNlcnZhYmxlLmgiCisrI2luY2x1ZGUgImJ1aWxkLWlkLmgiCisg CisgI2lmIEdEQl9TRUxGX1RFU1QKKyAjaW5jbHVkZSAiZ2Ric3VwcG9ydC9zZWxmdGVzdC5oIgor QEAgLTEyOCw4ICsxMjksMTEgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8c3RkOjpzdHJpbmc+IGdk YnB5X2NvbG9yaXplCisgICAoY29uc3Qgc3RkOjpzdHJpbmcgJmZpbGVuYW1lLCBjb25zdCBzdGQ6 OnN0cmluZyAmY29udGVudHMpOworIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBn ZGJweV9jb2xvcml6ZV9kaXNhc20KKyAoY29uc3Qgc3RkOjpzdHJpbmcgJmNvbnRlbnQsIGdkYmFy Y2ggKmdkYmFyY2gpOworLXN0YXRpYyBleHRfbGFuZ19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQg Z2RicHlfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvCisrc3RhdGljIGV4dF9sYW5nX21pc3Npbmdf ZmlsZV9yZXN1bHQgZ2RicHlfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvCisgICAoY29uc3Qgc3Ry dWN0IGV4dGVuc2lvbl9sYW5ndWFnZV9kZWZuICpleHRsYW5nLCBzdHJ1Y3Qgb2JqZmlsZSAqb2Jq ZmlsZSk7Cisrc3RhdGljIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgZ2RicHlfZmluZF9v YmpmaWxlX2Zyb21fYnVpbGRpZAorKyAgKGNvbnN0IHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2Vf ZGVmbiAqZXh0bGFuZywgcHJvZ3JhbV9zcGFjZSAqcHNwYWNlLAorKyAgIGNvbnN0IHN0cnVjdCBi ZmRfYnVpbGRfaWQgKmJ1aWxkX2lkLCBjb25zdCBjaGFyICptaXNzaW5nX2ZpbGVuYW1lKTsKKyAK KyAvKiBUaGUgaW50ZXJmYWNlIGJldHdlZW4gZ2RiIHByb3BlciBhbmQgbG9hZGluZyBvZiBweXRo b24gc2NyaXB0cy4gICovCisgCitAQCAtMTc3LDcgKzE4MSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX29wcyBweXRob25fZXh0ZW5zaW9uX29wcyA9CisgCisgICBn ZGJweV9wcmludF9pbnNuLAorIAorLSAgZ2RicHlfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvCisr ICBnZGJweV9oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8sCisrICBnZGJweV9maW5kX29iamZpbGVf ZnJvbV9idWlsZGlkCisgfTsKKyAKKyAjZW5kaWYgLyogSEFWRV9QWVRIT04gKi8KK0BAIC0xNzYx LDEwICsxNzY2LDEwIEBAIGdkYnB5X2dldF9jdXJyZW50X29iamZpbGUgKFB5T2JqZWN0ICp1bnVz ZWQxLCBQeU9iamVjdCAqdW51c2VkMikKKyAvKiBJbXBsZW1lbnQgdGhlICdoYW5kbGVfbWlzc2lu Z19kZWJ1Z2luZm8nIGhvb2sgZm9yIFB5dGhvbi4gIEdEQiBoYXMKKyAgICBmYWlsZWQgdG8gZmlu ZCBhbnkgZGVidWcgaW5mb3JtYXRpb24gZm9yIE9CSkZJTEUuICBUaGUgZXh0ZW5zaW9uIGhhcyBh CisgICAgY2hhbmNlIHRvIHJlY29yZCB0aGlzLCBvciBldmVuIGluc3RhbGwgdGhlIHJlcXVpcmVk IGRlYnVnIGluZm9ybWF0aW9uLgorLSAgIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgZXh0X2xhbmdf bWlzc2luZ19kZWJ1Z2luZm9fcmVzdWx0IGluCistICAgZXh0ZW5zaW9uLXByaXYuaCBmb3IgZGV0 YWlscyBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKysgICBTZWUgdGhlIGRlc2NyaXB0aW9uIG9m IGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgaW4gZXh0ZW5zaW9uLXByaXYuaAorKyAgIGZv ciBkZXRhaWxzIG9mIHRoZSByZXR1cm4gdmFsdWUuICAqLworIAorLXN0YXRpYyBleHRfbGFuZ19t aXNzaW5nX2RlYnVnaW5mb19yZXN1bHQKKytzdGF0aWMgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jl c3VsdAorIGdkYnB5X2hhbmRsZV9taXNzaW5nX2RlYnVnaW5mbyAoY29uc3Qgc3RydWN0IGV4dGVu c2lvbl9sYW5ndWFnZV9kZWZuICpleHRsYW5nLAorIAkJCQlzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmls ZSkKKyB7CitAQCAtMTgxMiw3ICsxODE3LDcgQEAgZ2RicHlfaGFuZGxlX21pc3NpbmdfZGVidWdp bmZvIChjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKmV4dGxhbmcsCisgICBp ZiAoUHlCb29sX0NoZWNrIChweW9fZXhlY3V0ZV9yZXQuZ2V0ICgpKSkKKyAgICAgeworICAgICAg IGJvb2wgdHJ5X2FnYWluID0gUHlPYmplY3RfSXNUcnVlIChweW9fZXhlY3V0ZV9yZXQuZ2V0ICgp KTsKKy0gICAgICByZXR1cm4gZXh0X2xhbmdfbWlzc2luZ19kZWJ1Z2luZm9fcmVzdWx0ICh0cnlf YWdhaW4pOworKyAgICAgIHJldHVybiBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0ICh0cnlf YWdhaW4pOworICAgICB9CisgCisgICBpZiAoIWdkYnB5X2lzX3N0cmluZyAocHlvX2V4ZWN1dGVf cmV0LmdldCAoKSkpCitAQCAtMTgzMiw3ICsxODM3LDEwOCBAQCBnZGJweV9oYW5kbGVfbWlzc2lu Z19kZWJ1Z2luZm8gKGNvbnN0IHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFu ZywKKyAgICAgICByZXR1cm4ge307CisgICAgIH0KKyAKKy0gIHJldHVybiBleHRfbGFuZ19taXNz aW5nX2RlYnVnaW5mb19yZXN1bHQgKHN0ZDo6c3RyaW5nIChmaWxlbmFtZS5nZXQgKCkpKTsKKysg IHJldHVybiBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0IChzdGQ6OnN0cmluZyAoZmlsZW5h bWUuZ2V0ICgpKSk7CisrfQorKworKy8qIEltcGxlbWVudCB0aGUgZmluZF9vYmpmaWxlX2Zyb21f YnVpbGRpZCBob29rIGZvciBQeXRob24uICBQU1BBQ0UgaXMgdGhlCisrICAgcHJvZ3JhbSBzcGFj ZSBpbiB3aGljaCBHREIgaXMgdHJ5aW5nIHRvIGZpbmQgYW4gb2JqZmlsZSwgQlVJTERfSUQgaXMg dGhlCisrICAgYnVpbGQtaWQgZm9yIHRoZSBtaXNzaW5nIG9iamZpbGUsIGFuZCBFWFBFQ1RFRF9G SUxFTkFNRSBpcyBhIG5vbi1OVUxMCisrICAgc3RyaW5nIHdoaWNoIGNhbiBiZSB1c2VkIChpZiBu ZWVkZWQpIGluIG1lc3NhZ2VzIHRvIHRoZSB1c2VyLCBhbmQKKysgICByZXByZXNlbnRzIHRoZSBm aWxlIEdEQiBpcyBsb29raW5nIGZvci4gICovCisrCisrc3RhdGljIGV4dF9sYW5nX21pc3Npbmdf ZmlsZV9yZXN1bHQKKytnZGJweV9maW5kX29iamZpbGVfZnJvbV9idWlsZGlkIChjb25zdCBzdHJ1 Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKmV4dGxhbmcsCisrCQkJCSBwcm9ncmFtX3NwYWNl ICpwc3BhY2UsCisrCQkJCSBjb25zdCBzdHJ1Y3QgYmZkX2J1aWxkX2lkICpidWlsZF9pZCwKKysJ CQkJIGNvbnN0IGNoYXIgKm1pc3NpbmdfZmlsZW5hbWUpCisreworKyAgZ2RiX2Fzc2VydCAocHNw YWNlICE9IG51bGxwdHIpOworKyAgZ2RiX2Fzc2VydCAoYnVpbGRfaWQgIT0gbnVsbHB0cik7Cisr ICBnZGJfYXNzZXJ0IChtaXNzaW5nX2ZpbGVuYW1lICE9IG51bGxwdHIpOworKworKyAgLyogRWFy bHkgZXhpdCBpZiBQeXRob24gaXMgbm90IGluaXRpYWxpc2VkLiAgKi8KKysgIGlmICghZ2RiX3B5 dGhvbl9pbml0aWFsaXplZCB8fCBnZGJfcHl0aG9uX21vZHVsZSA9PSBudWxscHRyKQorKyAgICBy ZXR1cm4ge307CisrCisrICBnZGJweV9lbnRlciBlbnRlcl9weTsKKysKKysgIC8qIENvbnZlcnQg QlVJTERfSUQgaW50byBhIFB5dGhvbiBvYmplY3QuICAqLworKyAgc3RkOjpzdHJpbmcgaGV4X2Zv cm0gPSBiaW4yaGV4IChidWlsZF9pZC0+ZGF0YSwgYnVpbGRfaWQtPnNpemUpOworKyAgZ2RicHlf cmVmPD4gcHlvX2J1aWxkaWQgPSBob3N0X3N0cmluZ190b19weXRob25fc3RyaW5nIChoZXhfZm9y bS5jX3N0ciAoKSk7CisrICBpZiAocHlvX2J1aWxkaWQgPT0gbnVsbHB0cikKKysgICAgeworKyAg ICAgIGdkYnB5X3ByaW50X3N0YWNrICgpOworKyAgICAgIHJldHVybiB7fTsKKysgICAgfQorKwor KyAgLyogQ29udmVydCBNSVNTSU5HX0ZJTEVOQU1FIHRvIGEgUHl0aG9uIG9iamVjdC4gICovCisr ICBnZGJweV9yZWY8PiBweW9fZmlsZW5hbWUgPSBob3N0X3N0cmluZ190b19weXRob25fc3RyaW5n IChtaXNzaW5nX2ZpbGVuYW1lKTsKKysgIGlmIChweW9fZmlsZW5hbWUgPT0gbnVsbHB0cikKKysg ICAgeworKyAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgpOworKyAgICAgIHJldHVybiB7fTsKKysg ICAgfQorKworKyAgLyogQ29udmVydCBQU1BBQ0UgdG8gYSBQeXRob24gb2JqZWN0LiAgKi8KKysg IGdkYnB5X3JlZjw+IHB5b19wc3BhY2UgPSBwc3BhY2VfdG9fcHNwYWNlX29iamVjdCAocHNwYWNl KTsKKysgIGlmIChweW9fcHNwYWNlID09IG51bGxwdHIpCisrICAgIHsKKysgICAgICBnZGJweV9w cmludF9zdGFjayAoKTsKKysgICAgICByZXR1cm4ge307CisrICAgIH0KKysKKysgIC8qIExvb2t1 cCB0aGUgaGVscGVyIGZ1bmN0aW9uIHdpdGhpbiB0aGUgR0RCIG1vZHVsZS4gICovCisrICBnZGJw eV9yZWY8PiBweW9faGFuZGxlcgorKyAgICAoUHlPYmplY3RfR2V0QXR0clN0cmluZyAoZ2RiX3B5 dGhvbl9tb2R1bGUsICJfaGFuZGxlX21pc3Npbmdfb2JqZmlsZSIpKTsKKysgIGlmIChweW9faGFu ZGxlciA9PSBudWxscHRyKQorKyAgICB7CisrICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7Cisr ICAgICAgcmV0dXJuIHt9OworKyAgICB9CisrCisrICAvKiBDYWxsIHRoZSBmdW5jdGlvbiwgcGFz c2luZyBpbiB0aGUgUHl0aG9uIG9iamZpbGUgb2JqZWN0LiAgKi8KKysgIGdkYnB5X3JlZjw+IHB5 b19leGVjdXRlX3JldAorKyAgICAoUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyAocHlvX2hh bmRsZXIuZ2V0ICgpLCBweW9fcHNwYWNlLmdldCAoKSwKKysJCQkJICAgcHlvX2J1aWxkaWQuZ2V0 ICgpLCBweW9fZmlsZW5hbWUuZ2V0ICgpLAorKwkJCQkgICBudWxscHRyKSk7CisrICBpZiAocHlv X2V4ZWN1dGVfcmV0ID09IG51bGxwdHIpCisrICAgIHsKKysgICAgICAvKiBJZiB0aGUgaGFuZGxl ciBpcyBjYW5jZWxsZWQgZHVlIHRvIGEgQ3RybC1DLCB0aGVuIHByb3BhZ2F0ZQorKwkgdGhlIEN0 cmwtQyBhcyBhIEdEQiBleGNlcHRpb24gaW5zdGVhZCBvZiBzd2FsbG93aW5nIGl0LiAgKi8KKysg ICAgICBnZGJweV9wcmludF9zdGFja19vcl9xdWl0ICgpOworKyAgICAgIHJldHVybiB7fTsKKysg ICAgfQorKworKyAgLyogUGFyc2UgdGhlIHJlc3VsdCwgYW5kIGNvbnZlcnQgaXQgYmFjayB0byB0 aGUgQysrIG9iamVjdC4gICovCisrICBpZiAocHlvX2V4ZWN1dGVfcmV0ID09IFB5X05vbmUpCisr ICAgIHJldHVybiB7fTsKKysKKysgIGlmIChQeUJvb2xfQ2hlY2sgKHB5b19leGVjdXRlX3JldC5n ZXQgKCkpKQorKyAgICB7CisrICAgICAgLyogV2Uga25vdyB0aGUgdmFsdWUgaXMgYSBib29sLCBz byBpdCBtdXN0IGJlIGVpdGhlciBQeV9UcnVlIG9yCisrCSBQeV9GYWxzZS4gIEFueXRoaW5nIGVs c2Ugd291bGQgbm90IGdldCBwYXN0IHRoZSBhYm92ZSBjaGVjay4gICovCisrICAgICAgYm9vbCB0 cnlfYWdhaW4gPSBweW9fZXhlY3V0ZV9yZXQuZ2V0ICgpID09IFB5X1RydWU7CisrICAgICAgcmV0 dXJuIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgKHRyeV9hZ2Fpbik7CisrICAgIH0KKysK KysgIGlmICghZ2RicHlfaXNfc3RyaW5nIChweW9fZXhlY3V0ZV9yZXQuZ2V0ICgpKSkKKysgICAg eworKyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVFcnJvciwKKysJCSAgICAgICAi cmV0dXJuIHZhbHVlIGZyb20gX2ZpbmRfb2JqZmlsZV9ieV9idWlsZGlkIHNob3VsZCAiCisrCQkg ICAgICAgImJlIE5vbmUsIGEgYm9vbCwgb3IgYSBzdHIiKTsKKysgICAgICBnZGJweV9wcmludF9z dGFjayAoKTsKKysgICAgICByZXR1cm4ge307CisrICAgIH0KKysKKysgIGdkYjo6dW5pcXVlX3ht YWxsb2NfcHRyPGNoYXI+IGZpbGVuYW1lCisrICAgID0gcHl0aG9uX3N0cmluZ190b19ob3N0X3N0 cmluZyAocHlvX2V4ZWN1dGVfcmV0LmdldCAoKSk7CisrICBpZiAoZmlsZW5hbWUgPT0gbnVsbHB0 cikKKysgICAgeworKyAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgpOworKyAgICAgIHJldHVybiB7 fTsKKysgICAgfQorKworKyAgcmV0dXJuIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgKHN0 ZDo6c3RyaW5nIChmaWxlbmFtZS5nZXQgKCkpKTsKKyB9CisgCisgLyogQ29tcHV0ZSB0aGUgbGlz dCBvZiBhY3RpdmUgcHl0aG9uIHR5cGUgcHJpbnRlcnMgYW5kIHN0b3JlIHRoZW0gaW4KK2RpZmYg LS1naXQgYS9nZGIvcmVtb3RlLmMgYi9nZGIvcmVtb3RlLmMKKy0tLSBhL2dkYi9yZW1vdGUuYwor KysrIGIvZ2RiL3JlbW90ZS5jCitAQCAtMjQ2LDYgKzI0Niw3IEBAIGVudW0geworICAgUEFDS0VU X3ZGaWxlX3VubGluaywKKyAgIFBBQ0tFVF92RmlsZV9yZWFkbGluaywKKyAgIFBBQ0tFVF92Rmls ZV9mc3RhdCwKKysgIFBBQ0tFVF92RmlsZV9zdGF0LAorICAgUEFDS0VUX3FYZmVyX2F1eHYsCisg ICBQQUNLRVRfcVhmZXJfZmVhdHVyZXMsCisgICBQQUNLRVRfcVhmZXJfZXhlY19maWxlLAorQEAg LTk5Niw2ICs5OTcsOSBAQCBjbGFzcyByZW1vdGVfdGFyZ2V0IDogcHVibGljIHByb2Nlc3Nfc3Ry YXR1bV90YXJnZXQKKyAKKyAgIGludCBmaWxlaW9fZnN0YXQgKGludCBmZCwgc3RydWN0IHN0YXQg KnNiLCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubykgb3ZlcnJpZGU7CisgCisrICBpbnQgZmls ZWlvX3N0YXQgKHN0cnVjdCBpbmZlcmlvciAqaW5mLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKysJ CSAgIHN0cnVjdCBzdGF0ICpzYiwgZmlsZWlvX2Vycm9yICp0YXJnZXRfZXJybm8pIG92ZXJyaWRl OworKworICAgaW50IGZpbGVpb19jbG9zZSAoaW50IGZkLCBmaWxlaW9fZXJyb3IgKnRhcmdldF9l cnJubykgb3ZlcnJpZGU7CisgCisgICBpbnQgZmlsZWlvX3VubGluayAoc3RydWN0IGluZmVyaW9y ICppbmYsCitAQCAtMTI2NjEsNiArMTI2NjUsOSBAQCByZW1vdGVfdGFyZ2V0OjpyZW1vdGVfaG9z dGlvX3NlbmRfY29tbWFuZCAoaW50IGNvbW1hbmRfYnl0ZXMsIGludCB3aGljaF9wYWNrZXQsCisg ICAgICAgcmV0dXJuIC0xOworICAgICB9CisgCisrICBpZiAoKnJlbW90ZV9lcnJubyAhPSBGSUxF SU9fU1VDQ0VTUykKKysgICAgcmV0dXJuIC0xOworKworICAgLyogTWFrZSBzdXJlIHdlIHNhdyBh biBhdHRhY2htZW50IGlmIGFuZCBvbmx5IGlmIHdlIGV4cGVjdGVkIG9uZS4gICovCisgICBpZiAo KGF0dGFjaG1lbnRfdG1wID09IE5VTEwgJiYgYXR0YWNobWVudCAhPSBOVUxMKQorICAgICAgIHx8 IChhdHRhY2htZW50X3RtcCAhPSBOVUxMICYmIGF0dGFjaG1lbnQgPT0gTlVMTCkpCitAQCAtMTMw MjcsNiArMTMwMzQsNDEgQEAgcmVtb3RlX3RhcmdldDo6ZmlsZWlvX3JlYWRsaW5rIChzdHJ1Y3Qg aW5mZXJpb3IgKmluZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisgICByZXR1cm4gcmV0OworIH0K KyAKKysvKiBIZWxwZXIgZnVuY3Rpb24gdG8gaGFuZGxlIDo6ZmlsZWlvX2ZzdGF0IGFuZCA6OmZp bGVpb19zdGF0IHJlc3VsdAorKyAgIHByb2Nlc3NpbmcuICBXaGVuIHRoaXMgZnVuY3Rpb24gaXMg Y2FsbGVkIHRoZSByZW1vdGUgc3lzY2FsbCBoYXMgYmVlbgorKyAgIHBlcmZvcm1lZCBhbmQgd2Ug a25vdyB3ZSBkaWRuJ3QgZ2V0IGFuIGVycm9yIGJhY2suCisrCisrICAgQVRUQUNITUVOVCBhbmQg QVRUQUNITUVOVF9MRU4gYXJlIHRoZSBhdHRhY2htZW50IGRhdGEgZXh0cmFjdGVkIGZyb20gdGhl CisrICAgcmVtb3RlIHN5c2NhbGwgcmVwbHkuICBFWFBFQ1RFRF9MRU4gaXMgdGhlIGxlbmd0aCBy ZXR1cm5lZCBmcm9tIHRoZQorKyAgIGZzdGF0IG9yIHN0YXQgY2FsbCwgdGhpcyB0aGUgbGVuZ3Ro IG9mIHRoZSByZXR1cm5lZCBkYXRhIChpbiBBVFRBQ0hNRU5UKQorKyAgIG9uY2UgaXQgaGFzIGJl ZW4gZGVjb2RlZC4gIFRoZSBmc3RhdC9zdGF0IHJlc3VsdCAoZnJvbSB0aGUgQVRUQUNITUVOVAor KyAgIGRhdGEpIGlzIHRvIGJlIHBsYWNlZCBpbiBTVC4gICovCisrCisrc3RhdGljIGludAorK2Zp bGVpb19wcm9jZXNzX2ZzdGF0X2FuZF9zdGF0X3JlcGx5IChjb25zdCBjaGFyICphdHRhY2htZW50 LAorKwkJCQkgICAgIGludCBhdHRhY2htZW50X2xlbiwKKysJCQkJICAgICBpbnQgZXhwZWN0ZWRf bGVuLAorKwkJCQkgICAgIHN0cnVjdCBzdGF0ICpzdCkKKyt7CisrICBzdHJ1Y3QgZmlvX3N0YXQg ZnN0OworKworKyAgaW50IHJlYWRfbGVuCisrICAgID0gcmVtb3RlX3VuZXNjYXBlX2lucHV0ICgo Z2RiX2J5dGUgKikgYXR0YWNobWVudCwgYXR0YWNobWVudF9sZW4sCisrCQkJICAgICAoZ2RiX2J5 dGUgKikgJmZzdCwgc2l6ZW9mIChmc3QpKTsKKysKKysgIGlmIChyZWFkX2xlbiAhPSBleHBlY3Rl ZF9sZW4pCisrICAgIGVycm9yIChfKCJ2RmlsZTpmc3RhdCByZXR1cm5lZCAlZCwgYnV0ICVkIGJ5 dGVzLiIpLAorKwkgICBleHBlY3RlZF9sZW4sIHJlYWRfbGVuKTsKKysKKysgIGlmIChyZWFkX2xl biAhPSBzaXplb2YgKGZzdCkpCisrICAgIGVycm9yIChfKCJ2RmlsZTpmc3RhdCByZXR1cm5lZCAl ZCBieXRlcywgYnV0IGV4cGVjdGluZyAlZC4iKSwKKysJICAgcmVhZF9sZW4sIChpbnQpIHNpemVv ZiAoZnN0KSk7CisrCisrICByZW1vdGVfZmlsZWlvX3RvX2hvc3Rfc3RhdCAoJmZzdCwgc3QpOwor KworKyAgcmV0dXJuIDA7CisrfQorKworIC8qIEltcGxlbWVudGF0aW9uIG9mIHRvX2ZpbGVpb19m c3RhdC4gICovCisgCisgaW50CitAQCAtMTMwMzcsOCArMTMwNzksNiBAQCByZW1vdGVfdGFyZ2V0 OjpmaWxlaW9fZnN0YXQgKGludCBmZCwgc3RydWN0IHN0YXQgKnN0LCBmaWxlaW9fZXJyb3IgKnJl bW90ZV9lcnJubworICAgaW50IGxlZnQgPSBnZXRfcmVtb3RlX3BhY2tldF9zaXplICgpOworICAg aW50IGF0dGFjaG1lbnRfbGVuLCByZXQ7CisgICBjb25zdCBjaGFyICphdHRhY2htZW50OworLSAg c3RydWN0IGZpb19zdGF0IGZzdDsKKy0gIGludCByZWFkX2xlbjsKKyAKKyAgIHJlbW90ZV9idWZm ZXJfYWRkX3N0cmluZyAoJnAsICZsZWZ0LCAidkZpbGU6ZnN0YXQ6Iik7CisgCitAQCAtMTMwNzAs MTkgKzEzMTEwLDQxIEBAIHJlbW90ZV90YXJnZXQ6OmZpbGVpb19mc3RhdCAoaW50IGZkLCBzdHJ1 Y3Qgc3RhdCAqc3QsIGZpbGVpb19lcnJvciAqcmVtb3RlX2Vycm5vCisgICAgICAgcmV0dXJuIDA7 CisgICAgIH0KKyAKKy0gIHJlYWRfbGVuID0gcmVtb3RlX3VuZXNjYXBlX2lucHV0ICgoZ2RiX2J5 dGUgKikgYXR0YWNobWVudCwgYXR0YWNobWVudF9sZW4sCistCQkJCSAgICAoZ2RiX2J5dGUgKikg JmZzdCwgc2l6ZW9mIChmc3QpKTsKKysgIHJldHVybiBmaWxlaW9fcHJvY2Vzc19mc3RhdF9hbmRf c3RhdF9yZXBseSAoYXR0YWNobWVudCwgYXR0YWNobWVudF9sZW4sCisrCQkJCQkgICAgICByZXQs IHN0KTsKKyt9CisgCistICBpZiAocmVhZF9sZW4gIT0gcmV0KQorLSAgICBlcnJvciAoXygidkZp bGU6ZnN0YXQgcmV0dXJuZWQgJWQsIGJ1dCAlZCBieXRlcy4iKSwgcmV0LCByZWFkX2xlbik7Cisr LyogSW1wbGVtZW50YXRpb24gb2YgdG9fZmlsZWlvX3N0YXQuICAqLworIAorLSAgaWYgKHJlYWRf bGVuICE9IHNpemVvZiAoZnN0KSkKKy0gICAgZXJyb3IgKF8oInZGaWxlOmZzdGF0IHJldHVybmVk ICVkIGJ5dGVzLCBidXQgZXhwZWN0aW5nICVkLiIpLAorLQkgICByZWFkX2xlbiwgKGludCkgc2l6 ZW9mIChmc3QpKTsKKytpbnQKKytyZW1vdGVfdGFyZ2V0OjpmaWxlaW9fc3RhdCAoc3RydWN0IGlu ZmVyaW9yICppbmYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorKwkJCSAgICBzdHJ1Y3Qgc3RhdCAq c3QsIGZpbGVpb19lcnJvciAqcmVtb3RlX2Vycm5vKQorK3sKKysgIHN0cnVjdCByZW1vdGVfc3Rh dGUgKnJzID0gZ2V0X3JlbW90ZV9zdGF0ZSAoKTsKKysgIGNoYXIgKnAgPSBycy0+YnVmLmRhdGEg KCk7CisrICBpbnQgbGVmdCA9IGdldF9yZW1vdGVfcGFja2V0X3NpemUgKCkgLSAxOworIAorLSAg cmVtb3RlX2ZpbGVpb190b19ob3N0X3N0YXQgKCZmc3QsIHN0KTsKKysgIGlmIChyZW1vdGVfaG9z dGlvX3NldF9maWxlc3lzdGVtIChpbmYsIHJlbW90ZV9lcnJubykgIT0gMCkKKysgICAgcmV0dXJu IHt9OworIAorLSAgcmV0dXJuIDA7CisrICByZW1vdGVfYnVmZmVyX2FkZF9zdHJpbmcgKCZwLCAm bGVmdCwgInZGaWxlOnN0YXQ6Iik7CisrCisrICByZW1vdGVfYnVmZmVyX2FkZF9ieXRlcyAoJnAs ICZsZWZ0LCAoY29uc3QgZ2RiX2J5dGUgKikgZmlsZW5hbWUsCisrCQkJICAgc3RybGVuIChmaWxl bmFtZSkpOworKworKyAgaW50IGF0dGFjaG1lbnRfbGVuOworKyAgY29uc3QgY2hhciAqYXR0YWNo bWVudDsKKysgIGludCByZXQgPSByZW1vdGVfaG9zdGlvX3NlbmRfY29tbWFuZCAocCAtIHJzLT5i dWYuZGF0YSAoKSwgUEFDS0VUX3ZGaWxlX3N0YXQsCisrCQkJCQlyZW1vdGVfZXJybm8sICZhdHRh Y2htZW50LAorKwkJCQkJJmF0dGFjaG1lbnRfbGVuKTsKKysKKysgIC8qIFVubGlrZSA6OmZpbGVp b19mc3RhdCwgdGhlIHN0YXQgZmlsZWlvIGNhbGwgd2FzIGFkZGVkIGxhdGVyIG9uLCBhbmQKKysg ICAgIGhhcyBub25lIG9mIHRoZSBsZWdhY3kgYmZkIGlzc3Vlcywgc28gd2UgY2FuIGp1c3QgcmV0 dXJuIHRoZSBlcnJvci4gICovCisrICBpZiAocmV0IDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysK KysgIHJldHVybiBmaWxlaW9fcHJvY2Vzc19mc3RhdF9hbmRfc3RhdF9yZXBseSAoYXR0YWNobWVu dCwgYXR0YWNobWVudF9sZW4sCisrCQkJCQkgICAgICByZXQsIHN0KTsKKyB9CisgCisgLyogSW1w bGVtZW50YXRpb24gb2YgdG9fZmlsZXN5c3RlbV9pc19sb2NhbC4gICovCitAQCAtMTYxNTcsNiAr MTYyMTksOCBAQCBTaG93IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGFkZHJlc3MgKGluIGJpdHMp IGluIGEgbWVtb3J5IHBhY2tldC4iKSwgTlVMTCwKKyAKKyAgIGFkZF9wYWNrZXRfY29uZmlnX2Nt ZCAoUEFDS0VUX3ZGaWxlX2ZzdGF0LCAidkZpbGU6ZnN0YXQiLCAiaG9zdGlvLWZzdGF0IiwgMCk7 CisgCisrICBhZGRfcGFja2V0X2NvbmZpZ19jbWQgKFBBQ0tFVF92RmlsZV9zdGF0LCAidkZpbGU6 c3RhdCIsICJob3N0aW8tc3RhdCIsIDApOworKworICAgYWRkX3BhY2tldF9jb25maWdfY21kIChQ QUNLRVRfdkF0dGFjaCwgInZBdHRhY2giLCAiYXR0YWNoIiwgMCk7CisgCisgICBhZGRfcGFja2V0 X2NvbmZpZ19jbWQgKFBBQ0tFVF92UnVuLCAidlJ1biIsICJydW4iLCAwKTsKK2RpZmYgLS1naXQg YS9nZGIvc29saWItYWl4LmMgYi9nZGIvc29saWItYWl4LmMKKy0tLSBhL2dkYi9zb2xpYi1haXgu YworKysrIGIvZ2RiL3NvbGliLWFpeC5jCitAQCAtNjg5LDYgKzY4OSwxMSBAQCBjb25zdCBzb2xp Yl9vcHMgc29saWJfYWl4X3NvX29wcyA9CisgICBzb2xpYl9haXhfb3Blbl9zeW1ib2xfZmlsZV9v YmplY3QsCisgICBzb2xpYl9haXhfaW5fZHluc3ltX3Jlc29sdmVfY29kZSwKKyAgIHNvbGliX2Fp eF9iZmRfb3BlbiwKKysgIG51bGxwdHIsCisrICBudWxscHRyLAorKyAgbnVsbHB0ciwKKysgIG51 bGxwdHIsCisrICBkZWZhdWx0X2ZpbmRfc29saWJfYWRkciwKKyB9OworIAorIHZvaWQgX2luaXRp YWxpemVfc29saWJfYWl4ICgpOworZGlmZiAtLWdpdCBhL2dkYi9zb2xpYi1kYXJ3aW4uYyBiL2dk Yi9zb2xpYi1kYXJ3aW4uYworLS0tIGEvZ2RiL3NvbGliLWRhcndpbi5jCisrKysgYi9nZGIvc29s aWItZGFyd2luLmMKK0BAIC02NjUsNCArNjY1LDkgQEAgY29uc3Qgc29saWJfb3BzIGRhcndpbl9z b19vcHMgPQorICAgb3Blbl9zeW1ib2xfZmlsZV9vYmplY3QsCisgICBkYXJ3aW5faW5fZHluc3lt X3Jlc29sdmVfY29kZSwKKyAgIGRhcndpbl9iZmRfb3BlbiwKKysgIG51bGxwdHIsCisrICBudWxs cHRyLAorKyAgbnVsbHB0ciwKKysgIG51bGxwdHIsCisrICBkZWZhdWx0X2ZpbmRfc29saWJfYWRk ciwKKyB9OworZGlmZiAtLWdpdCBhL2dkYi9zb2xpYi1kc2J0LmMgYi9nZGIvc29saWItZHNidC5j CistLS0gYS9nZGIvc29saWItZHNidC5jCisrKysgYi9nZGIvc29saWItZHNidC5jCitAQCAtOTE0 LDYgKzkxNCwxMSBAQCBjb25zdCBzb2xpYl9vcHMgZHNidF9zb19vcHMgPQorICAgb3Blbl9zeW1i b2xfZmlsZV9vYmplY3QsCisgICBkc2J0X2luX2R5bnN5bV9yZXNvbHZlX2NvZGUsCisgICBzb2xp Yl9iZmRfb3BlbiwKKysgIG51bGxwdHIsCisrICBudWxscHRyLAorKyAgbnVsbHB0ciwKKysgIG51 bGxwdHIsCisrICBkZWZhdWx0X2ZpbmRfc29saWJfYWRkciwKKyB9OworIAorIHZvaWQgX2luaXRp YWxpemVfZHNidF9zb2xpYiAoKTsKK2RpZmYgLS1naXQgYS9nZGIvc29saWItZnJ2LmMgYi9nZGIv c29saWItZnJ2LmMKKy0tLSBhL2dkYi9zb2xpYi1mcnYuYworKysrIGIvZ2RiL3NvbGliLWZydi5j CitAQCAtMTA4Niw0ICsxMDg2LDkgQEAgY29uc3Qgc29saWJfb3BzIGZydl9zb19vcHMgPQorICAg b3Blbl9zeW1ib2xfZmlsZV9vYmplY3QsCisgICBmcnZfaW5fZHluc3ltX3Jlc29sdmVfY29kZSwK KyAgIHNvbGliX2JmZF9vcGVuLAorKyAgbnVsbHB0ciwKKysgIG51bGxwdHIsCisrICBudWxscHRy LAorKyAgbnVsbHB0ciwKKysgIGRlZmF1bHRfZmluZF9zb2xpYl9hZGRyLAorIH07CitkaWZmIC0t Z2l0IGEvZ2RiL3NvbGliLXN2cjQuYyBiL2dkYi9zb2xpYi1zdnI0LmMKKy0tLSBhL2dkYi9zb2xp Yi1zdnI0LmMKKysrKyBiL2dkYi9zb2xpYi1zdnI0LmMKK0BAIC0zMzUzLDYgKzMzNTMsMTUgQEAg c3ZyNF9pdGVyYXRlX292ZXJfb2JqZmlsZXNfaW5fc2VhcmNoX29yZGVyCisgICAgIH0KKyB9Cisg CisrLyogU2VlIHNvbGliX29wczo6ZmluZF9zb2xpYl9hZGRyIGluIHNvbGlzdC5oLiAgKi8KKysK KytzdGF0aWMgc3RkOjpvcHRpb25hbDxDT1JFX0FERFI+Cisrc3ZyNF9maW5kX3NvbGliX2FkZHIg KHNvbGliICZzbykKKyt7CisrICBhdXRvICpsaSA9IGdkYjo6Y2hlY2tlZF9zdGF0aWNfY2FzdDxs bV9pbmZvX3N2cjQgKj4gKHNvLmxtX2luZm8uZ2V0ICgpKTsKKysgIHJldHVybiBsaS0+bF9hZGRy X2luZmVyaW9yOworK30KKysKKyBjb25zdCBzdHJ1Y3Qgc29saWJfb3BzIHN2cjRfc29fb3BzID0K KyB7CisgICBzdnI0X3JlbG9jYXRlX3NlY3Rpb25fYWRkcmVzc2VzLAorQEAgLTMzNjMsMTEgKzMz NzIsMTEgQEAgY29uc3Qgc3RydWN0IHNvbGliX29wcyBzdnI0X3NvX29wcyA9CisgICBvcGVuX3N5 bWJvbF9maWxlX29iamVjdCwKKyAgIHN2cjRfaW5fZHluc3ltX3Jlc29sdmVfY29kZSwKKyAgIHNv bGliX2JmZF9vcGVuLAorLSAgbnVsbHB0ciwKKyAgIHN2cjRfc2FtZSwKKyAgIHN2cjRfa2VlcF9k YXRhX2luX2NvcmUsCisgICBzdnI0X3VwZGF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50cywKKyAg IHN2cjRfaGFuZGxlX3NvbGliX2V2ZW50LAorKyAgc3ZyNF9maW5kX3NvbGliX2FkZHIsCisgfTsK KyAKKyB2b2lkIF9pbml0aWFsaXplX3N2cjRfc29saWIgKCk7CitkaWZmIC0tZ2l0IGEvZ2RiL3Nv bGliLXRhcmdldC5jIGIvZ2RiL3NvbGliLXRhcmdldC5jCistLS0gYS9nZGIvc29saWItdGFyZ2V0 LmMKKysrKyBiL2dkYi9zb2xpYi10YXJnZXQuYworQEAgLTQxMiw0ICs0MTIsOSBAQCBjb25zdCBz b2xpYl9vcHMgc29saWJfdGFyZ2V0X3NvX29wcyA9CisgICBzb2xpYl90YXJnZXRfb3Blbl9zeW1i b2xfZmlsZV9vYmplY3QsCisgICBzb2xpYl90YXJnZXRfaW5fZHluc3ltX3Jlc29sdmVfY29kZSwK KyAgIHNvbGliX2JmZF9vcGVuLAorKyAgbnVsbHB0ciwKKysgIG51bGxwdHIsCisrICBudWxscHRy LAorKyAgbnVsbHB0ciwKKysgIGRlZmF1bHRfZmluZF9zb2xpYl9hZGRyLAorIH07CitkaWZmIC0t Z2l0IGEvZ2RiL3NvbGliLmMgYi9nZGIvc29saWIuYworLS0tIGEvZ2RiL3NvbGliLmMKKysrKyBi L2dkYi9zb2xpYi5jCitAQCAtNDUsNyArNDUsNiBAQAorICNpbmNsdWRlICJnZGJfYmZkLmgiCisg I2luY2x1ZGUgImdkYnN1cHBvcnQvZmlsZXN0dWZmLmgiCisgI2luY2x1ZGUgImdkYnN1cHBvcnQv c2NvcGVkX2ZkLmgiCistI2luY2x1ZGUgImRlYnVnaW5mb2Qtc3VwcG9ydC5oIgorICNpbmNsdWRl ICJzb3VyY2UuaCIKKyAjaW5jbHVkZSAiY2xpL2NsaS1zdHlsZS5oIgorIAorQEAgLTExMyw3ICsx MTIsNiBAQCBzaG93X3NvbGliX3NlYXJjaF9wYXRoIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50 IGZyb21fdHR5LAorIHN0YXRpYyBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPgorIHNvbGli X2ZpbmRfMSAoY29uc3QgY2hhciAqaW5fcGF0aG5hbWUsIGludCAqZmQsIGJvb2wgaXNfc29saWIp CisgeworLSAgY29uc3Qgc29saWJfb3BzICpvcHMgPSBnZGJhcmNoX3NvX29wcyAoY3VycmVudF9p bmZlcmlvciAoKS0+YXJjaCAoKSk7CisgICBpbnQgZm91bmRfZmlsZSA9IC0xOworICAgZ2RiOjp1 bmlxdWVfeG1hbGxvY19wdHI8Y2hhcj4gdGVtcF9wYXRobmFtZTsKKyAgIGNvbnN0IGNoYXIgKmZz a2luZCA9IGVmZmVjdGl2ZV90YXJnZXRfZmlsZV9zeXN0ZW1fa2luZCAoKTsKK0BAIC0yOTYsMTIg KzI5NCw2IEBAIHNvbGliX2ZpbmRfMSAoY29uc3QgY2hhciAqaW5fcGF0aG5hbWUsIGludCAqZmQs IGJvb2wgaXNfc29saWIpCisgCQkJdGFyZ2V0X2xiYXNlbmFtZSAoZnNraW5kLCBpbl9wYXRobmFt ZSksCisgCQkJT19SRE9OTFkgfCBPX0JJTkFSWSwgJnRlbXBfcGF0aG5hbWUpOworIAorLSAgLyog SWYgbm90IGZvdW5kLCBhbmQgd2UncmUgbG9va2luZyBmb3IgYSBzb2xpYiwgdHJ5IHRvIHVzZSB0 YXJnZXQKKy0gICAgIHN1cHBsaWVkIHNvbGliIHNlYXJjaCBtZXRob2QuICAqLworLSAgaWYgKGlz X3NvbGliICYmIGZvdW5kX2ZpbGUgPCAwICYmIG9wcy0+ZmluZF9hbmRfb3Blbl9zb2xpYikKKy0g ICAgZm91bmRfZmlsZSA9IG9wcy0+ZmluZF9hbmRfb3Blbl9zb2xpYiAoaW5fcGF0aG5hbWUsIE9f UkRPTkxZIHwgT19CSU5BUlksCistCQkJCQkgICAmdGVtcF9wYXRobmFtZSk7CistCisgICAvKiBJ ZiBub3QgZm91bmQsIG5leHQgc2VhcmNoIHRoZSBpbmZlcmlvcidzICRQQVRIIGVudmlyb25tZW50 IHZhcmlhYmxlLiAgKi8KKyAgIGlmIChmb3VuZF9maWxlIDwgMCAmJiBzeXNyb290ID09IE5VTEwp CisgICAgIGZvdW5kX2ZpbGUgPSBvcGVucCAoY3VycmVudF9pbmZlcmlvciAoKS0+ZW52aXJvbm1l bnQuZ2V0ICgiUEFUSCIpLAorQEAgLTQ3NSw1OCArNDY3LDYgQEAgc29saWJfYmZkX29wZW4gKGNv bnN0IGNoYXIgKnBhdGhuYW1lKQorICAgcmV0dXJuIGFiZmQ7CisgfQorIAorLS8qIE1hcHBpbmcg b2YgYSBjb3JlIGZpbGUncyBzaGFyZWQgbGlicmFyeSBzb25hbWVzIHRvIHRoZWlyIHJlc3BlY3Rp dmUKKy0gICBidWlsZC1pZHMuICBBZGRlZCB0byB0aGUgcmVnaXN0cmllcyBvZiBjb3JlIGZpbGUg YmZkcy4gICovCistCistdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0 ZDo6c3RyaW5nPiBzb25hbWVfYnVpbGRfaWRfbWFwOworLQorLS8qIEtleSB1c2VkIHRvIGFzc29j aWF0ZSBhIHNvbmFtZV9idWlsZF9pZF9tYXAgdG8gYSBjb3JlIGZpbGUgYmZkLiAgKi8KKy0KKy1z dGF0aWMgY29uc3Qgc3RydWN0IHJlZ2lzdHJ5PGJmZD46OmtleTxzb25hbWVfYnVpbGRfaWRfbWFw PgorLSAgY2JmZF9zb25hbWVfYnVpbGRfaWRfZGF0YV9rZXk7CistCistLyogU2VlIHNvbGliLmgu ICAqLworLQorLXZvaWQKKy1zZXRfY2JmZF9zb25hbWVfYnVpbGRfaWQgKGdkYl9iZmRfcmVmX3B0 ciBhYmZkLCBjb25zdCBjaGFyICpzb25hbWUsCistCQkJICBjb25zdCBiZmRfYnVpbGRfaWQgKmJ1 aWxkX2lkKQorLXsKKy0gIGdkYl9hc3NlcnQgKGFiZmQuZ2V0ICgpICE9IG51bGxwdHIpOworLSAg Z2RiX2Fzc2VydCAoc29uYW1lICE9IG51bGxwdHIpOworLSAgZ2RiX2Fzc2VydCAoYnVpbGRfaWQg IT0gbnVsbHB0cik7CistCistICBzb25hbWVfYnVpbGRfaWRfbWFwICptYXBwdHIKKy0gICAgPSBj YmZkX3NvbmFtZV9idWlsZF9pZF9kYXRhX2tleS5nZXQgKGFiZmQuZ2V0ICgpKTsKKy0KKy0gIGlm IChtYXBwdHIgPT0gbnVsbHB0cikKKy0gICAgbWFwcHRyID0gY2JmZF9zb25hbWVfYnVpbGRfaWRf ZGF0YV9rZXkuZW1wbGFjZSAoYWJmZC5nZXQgKCkpOworLQorLSAgKCptYXBwdHIpW3NvbmFtZV0g PSBidWlsZF9pZF90b19zdHJpbmcgKGJ1aWxkX2lkKTsKKy19CistCistLyogSWYgU09OQU1FIGhh ZCBhIGJ1aWxkLWlkIGFzc29jaWF0ZWQgd2l0aCBpdCBpbiBBQkZEJ3MgcmVnaXN0cnkgYnkgYQor LSAgIHByZXZpb3VzIGNhbGwgdG8gc2V0X2NiZmRfc29uYW1lX2J1aWxkX2lkIHRoZW4gcmV0dXJu IHRoZSBidWlsZC1pZAorLSAgIGFzIGEgTlVMTC10ZXJtaW5hdGVkIGhleCBzdHJpbmcuICAqLwor LQorLXN0YXRpYyBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPgorLWdldF9jYmZkX3NvbmFt ZV9idWlsZF9pZCAoZ2RiX2JmZF9yZWZfcHRyIGFiZmQsIGNvbnN0IGNoYXIgKnNvbmFtZSkKKy17 CistICBpZiAoYWJmZC5nZXQgKCkgPT0gbnVsbHB0ciB8fCBzb25hbWUgPT0gbnVsbHB0cikKKy0g ICAgcmV0dXJuIHt9OworLQorLSAgc29uYW1lX2J1aWxkX2lkX21hcCAqbWFwcHRyCistICAgID0g Y2JmZF9zb25hbWVfYnVpbGRfaWRfZGF0YV9rZXkuZ2V0IChhYmZkLmdldCAoKSk7CistCistICBp ZiAobWFwcHRyID09IG51bGxwdHIpCistICAgIHJldHVybiB7fTsKKy0KKy0gIGF1dG8gaXQgPSBt YXBwdHItPmZpbmQgKGxiYXNlbmFtZSAoc29uYW1lKSk7CistICBpZiAoaXQgPT0gbWFwcHRyLT5l bmQgKCkpCistICAgIHJldHVybiB7fTsKKy0KKy0gIHJldHVybiBtYWtlX3VuaXF1ZV94c3RyZHVw IChpdC0+c2Vjb25kLmNfc3RyICgpKTsKKy19CistCisgLyogR2l2ZW4gYSBwb2ludGVyIHRvIG9u ZSBvZiB0aGUgc2hhcmVkIG9iamVjdHMgaW4gb3VyIGxpc3Qgb2YgbWFwcGVkCisgICAgb2JqZWN0 cywgdXNlIHRoZSByZWNvcmRlZCBuYW1lIHRvIG9wZW4gYSBiZmQgZGVzY3JpcHRvciBmb3IgdGhl CisgICAgb2JqZWN0LCBidWlsZCBhIHNlY3Rpb24gdGFibGUsIHJlbG9jYXRlIGFsbCB0aGUgc2Vj dGlvbiBhZGRyZXNzZXMKK0BAIC01NDYsMzYgKzQ4Niw1NSBAQCBzb2xpYl9tYXBfc2VjdGlvbnMg KHNvbGliICZzbykKKyAKKyAgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+IGZpbGVuYW1l ICh0aWxkZV9leHBhbmQgKHNvLnNvX25hbWUuY19zdHIgKCkpKTsKKyAgIGdkYl9iZmRfcmVmX3B0 ciBhYmZkIChvcHMtPmJmZF9vcGVuIChmaWxlbmFtZS5nZXQgKCkpKTsKKy0gIGdkYjo6dW5pcXVl X3htYWxsb2NfcHRyPGNoYXI+IGJ1aWxkX2lkX2hleHN0cgorLSAgICA9IGdldF9jYmZkX3NvbmFt ZV9idWlsZF9pZCAoY3VycmVudF9wcm9ncmFtX3NwYWNlLT5jYmZkLAorLQkJCQlzby5zb19uYW1l LmNfc3RyICgpKTsKKysKKysgIC8qIElmIHdlIGhhdmUgYSBjb3JlIHRhcmdldCB0aGVuIHRoZSBj b3JlIHRhcmdldCBtaWdodCBoYXZlIHNvbWUgaGVscGZ1bAorKyAgICAgaW5mb3JtYXRpb24gKGku ZS4gYnVpbGQtaWRzKSBhYm91dCB0aGUgc2hhcmVkIGxpYnJhcmllcyB3ZSBhcmUgdHJ5aW5nCisr ICAgICB0byBsb2FkLiAgR3JhYiB0aG9zZSBoaW50cyBub3cgYW5kIHVzZSB0aGUgYmVsb3cgdG8g dmFsaWRhdGUgb3IgZmluZAorKyAgICAgdGhlIHNoYXJlZCBsaWJyYXJpZXMuCisrCisrICAgICBJ ZiB3ZSBkb24ndCBoYXZlIGEgY29yZSB0YXJnZXQgdGhlbiB0aGlzIHdpbGwgcmV0dXJuIGFuIGVt cHR5IHN0cnVjdAorKyAgICAgd2l0aCBubyBoaW50IGluZm9ybWF0aW9uLCB3ZSB0aGVuIGxvb2t1 cCB0aGUgc2hhcmVkIGxpYnJhcnkgYmFzZWQgb24KKysgICAgIGl0cyBmaWxlbmFtZS4gICovCisr ICBzdGQ6Om9wdGlvbmFsPENPUkVfQUREUj4gc29saWJfYWRkciA9IG9wcy0+ZmluZF9zb2xpYl9h ZGRyIChzbyk7CisrICBzdGQ6Om9wdGlvbmFsIDxjb25zdCBjb3JlX3RhcmdldF9tYXBwZWRfZmls ZV9pbmZvPiBtYXBwZWRfZmlsZV9pbmZvCisrICAgID0gY29yZV90YXJnZXRfZmluZF9tYXBwZWRf ZmlsZSAoc28uc29fbmFtZS5jX3N0ciAoKSwgc29saWJfYWRkcik7CisgCisgICAvKiBJZiB3ZSBh bHJlYWR5IGtub3cgdGhlIGJ1aWxkLWlkIG9mIHRoaXMgc29saWIgZnJvbSBhIGNvcmUgZmlsZSwg dmVyaWZ5CisgICAgICBpdCBtYXRjaGVzIEFCRkQncyBidWlsZC1pZC4gIElmIHRoZXJlIGlzIGEg bWlzbWF0Y2ggb3IgdGhlIHNvbGliIHdhc24ndAorICAgICAgZm91bmQsIGF0dGVtcHQgdG8gcXVl cnkgZGVidWdpbmZvZCBmb3IgdGhlIGNvcnJlY3Qgc29saWIuICAqLworLSAgaWYgKGJ1aWxkX2lk X2hleHN0ci5nZXQgKCkgIT0gbnVsbHB0cikKKysgIGlmIChtYXBwZWRfZmlsZV9pbmZvLmhhc192 YWx1ZSAoKSkKKyAgICAgeworLSAgICAgIGJvb2wgbWlzbWF0Y2ggPSBmYWxzZTsKKysgICAgICBi b29sIG1pc21hdGNoID0gKGFiZmQgIT0gbnVsbHB0cgorKwkJICAgICAgICYmIGJ1aWxkX2lkX2Jm ZF9nZXQgKGFiZmQuZ2V0ICgpKSAhPSBudWxscHRyCisrCQkgICAgICAgJiYgIWJ1aWxkX2lkX2Vx dWFsIChtYXBwZWRfZmlsZV9pbmZvLT5idWlsZF9pZCAoKSwKKysJCQkJCSAgIGJ1aWxkX2lkX2Jm ZF9nZXQgKGFiZmQuZ2V0ICgpKSkpOworIAorLSAgICAgIGlmIChhYmZkICE9IG51bGxwdHIgJiYg YWJmZC0+YnVpbGRfaWQgIT0gbnVsbHB0cikKKy0JeworLQkgIHN0ZDo6c3RyaW5nIGJ1aWxkX2lk ID0gYnVpbGRfaWRfdG9fc3RyaW5nIChhYmZkLT5idWlsZF9pZCk7CistCistCSAgaWYgKGJ1aWxk X2lkICE9IGJ1aWxkX2lkX2hleHN0ci5nZXQgKCkpCistCSAgICBtaXNtYXRjaCA9IHRydWU7Cist CX0KKyAgICAgICBpZiAoYWJmZCA9PSBudWxscHRyIHx8IG1pc21hdGNoKQorIAl7CistCSAgc2Nv cGVkX2ZkIGZkID0gZGVidWdpbmZvZF9leGVjX3F1ZXJ5ICgKKy0JICAgIChjb25zdCB1bnNpZ25l ZCBjaGFyICopIGJ1aWxkX2lkX2hleHN0ci5nZXQgKCksIDAsCistCSAgICBzby5zb19uYW1lLmNf c3RyICgpLCAmZmlsZW5hbWUpOworLQorLQkgIGlmIChmZC5nZXQgKCkgPj0gMCkKKy0JICAgIGFi ZmQgPSBvcHMtPmJmZF9vcGVuIChmaWxlbmFtZS5nZXQgKCkpOworLQkgIGVsc2UgaWYgKG1pc21h dGNoKQorLQkgICAgd2FybmluZyAoXyAoIkJ1aWxkLWlkIG9mICVwcyBkb2VzIG5vdCBtYXRjaCBj b3JlIGZpbGUuIiksCistCQkgICAgIHN0eWxlZF9zdHJpbmcgKGZpbGVfbmFtZV9zdHlsZS5zdHls ZSAoKSwKKy0JCQkJICAgIGZpbGVuYW1lLmdldCAoKSkpOworKwkgIC8qIElmIEdEQiBmb3VuZCBh IHN1aXRhYmxlIGZpbGUgZHVyaW5nIHRoZSBmaWxlIG1hcHBpbmcKKysJICAgICBwcm9jZXNzaW5n IHN0YWdlIHRoZW4gbGV0cyB1c2UgdGhhdC4gIFdlIGRvbid0IGNoZWNrIHRoZQorKwkgICAgIGJ1 aWxkLWlkIGFmdGVyIG9wZW5pbmcgdGhpcyBmaWxlLCBlaXRoZXIgdGhpcyBmaWxlIHdhcyBmb3Vu ZAorKwkgICAgIGJ5IGJ1aWxkLWlkLCBpbiB3aGljaCBjYXNlIGl0J3MgZ29pbmcgdG8gbWF0Y2gs IG9yIHRoaXMgZmlsZQorKwkgICAgIGRvZXNuJ3QgaGF2ZSBhIGJ1aWxkLWlkLCBzbyBjaGVja2lu ZyB0ZWxscyB1cyBub3RoaW5nLgorKwkgICAgIEhvd2V2ZXIsIGlmIGl0IHdhcyBnb29kIGVub3Vn aCBkdXJpbmcgdGhlIG1hcHBlZCBmaWxlCisrCSAgICAgcHJvY2Vzc2luZywgd2UgYXNzdW1lIGl0 J3MgZ29vZCBlbm91Z2ggbm93LiAgKi8KKysJICBpZiAoIW1hcHBlZF9maWxlX2luZm8tPmZpbGVu YW1lICgpLmVtcHR5ICgpKQorKwkgICAgYWJmZCA9IG9wcy0+YmZkX29wZW4gKG1hcHBlZF9maWxl X2luZm8tPmZpbGVuYW1lICgpLmNfc3RyICgpKTsKKysJICBlbHNlCisrCSAgICBhYmZkID0gbnVs bHB0cjsKKysKKysJICBpZiAoYWJmZCA9PSBudWxscHRyKQorKwkgICAgYWJmZCA9IGZpbmRfb2Jq ZmlsZV9ieV9idWlsZF9pZCAoY3VycmVudF9wcm9ncmFtX3NwYWNlLAorKwkJCQkJICAgICBtYXBw ZWRfZmlsZV9pbmZvLT5idWlsZF9pZCAoKSwKKysJCQkJCSAgICAgc28uc29fbmFtZS5jX3N0ciAo KSk7CisrCisrCSAgaWYgKGFiZmQgPT0gbnVsbHB0ciAmJiBtaXNtYXRjaCkKKysJICAgIHsKKysJ ICAgICAgd2FybmluZyAoXyAoIkJ1aWxkLWlkIG9mICVwcyBkb2VzIG5vdCBtYXRjaCBjb3JlIGZp bGUuIiksCisrCQkgICAgICAgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgp LAorKwkJCQkgICAgICBmaWxlbmFtZS5nZXQgKCkpKTsKKysJICAgICAgYWJmZCA9IG51bGxwdHI7 CisrCSAgICB9CisgCX0KKyAgICAgfQorIAorQEAgLTE3MDUsNiArMTY2NCwxNCBAQCByZW1vdmVf dXNlcl9hZGRlZF9vYmpmaWxlIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSkKKyAgICAgfQorIH0K KyAKKysvKiBTZWUgc29saXN0LmguICAqLworKworK3N0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPgor K2RlZmF1bHRfZmluZF9zb2xpYl9hZGRyIChzb2xpYiAmc28pCisreworKyAgcmV0dXJuIHt9Owor K30KKysKKyB2b2lkIF9pbml0aWFsaXplX3NvbGliICgpOworIAorIHZvaWQKK2RpZmYgLS1naXQg YS9nZGIvc29saWIuaCBiL2dkYi9zb2xpYi5oCistLS0gYS9nZGIvc29saWIuaAorKysrIGIvZ2Ri L3NvbGliLmgKK0BAIC0xMzYsMTEgKzEzNiw0IEBAIGV4dGVybiB2b2lkIHVwZGF0ZV9zb2xpYl9i cmVha3BvaW50cyAodm9pZCk7CisgCisgZXh0ZXJuIHZvaWQgaGFuZGxlX3NvbGliX2V2ZW50ICh2 b2lkKTsKKyAKKy0vKiBBc3NvY2lhdGUgU09OQU1FIHdpdGggQlVJTERfSUQgaW4gQUJGRCdzIHJl Z2lzdHJ5IHNvIHRoYXQgaXQgY2FuIGJlCistICAgcmV0cmlldmVkIHdpdGggZ2V0X2NiZmRfc29u YW1lX2J1aWxkX2lkLiAgKi8KKy0KKy1leHRlcm4gdm9pZCBzZXRfY2JmZF9zb25hbWVfYnVpbGRf aWQgKGdkYl9iZmRfcmVmX3B0ciBhYmZkLAorLQkJCQkgICAgICBjb25zdCBjaGFyICpzb25hbWUs CistCQkJCSAgICAgIGNvbnN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQpOworLQorICNlbmRpZiAv KiBTT0xJQl9IICovCitkaWZmIC0tZ2l0IGEvZ2RiL3NvbGlzdC5oIGIvZ2RiL3NvbGlzdC5oCist LS0gYS9nZGIvc29saXN0LmgKKysrKyBiL2dkYi9zb2xpc3QuaAorQEAgLTEzMiwxNCArMTMyLDYg QEAgc3RydWN0IHNvbGliX29wcworICAgLyogRmluZCBhbmQgb3BlbiBzaGFyZWQgbGlicmFyeSBi aW5hcnkgZmlsZS4gICovCisgICBnZGJfYmZkX3JlZl9wdHIgKCpiZmRfb3BlbikgKGNvbnN0IGNo YXIgKnBhdGhuYW1lKTsKKyAKKy0gIC8qIE9wdGlvbmFsIGV4dHJhIGhvb2sgZm9yIGZpbmRpbmcg YW5kIG9wZW5pbmcgYSBzb2xpYi4KKy0gICAgIElmIFRFTVBfUEFUSE5BTUUgaXMgbm9uLU5VTEw6 IElmIHRoZSBmaWxlIGlzIHN1Y2Nlc3NmdWxseSBvcGVuZWQgYQorLSAgICAgcG9pbnRlciB0byBh IG1hbGxvYydkIGFuZCByZWFscGF0aCdkIGNvcHkgb2YgU09OQU1FIGlzIHN0b3JlZCB0aGVyZSwK Ky0gICAgIG90aGVyd2lzZSBOVUxMIGlzIHN0b3JlZCB0aGVyZS4gICovCistICBpbnQgKCpmaW5k X2FuZF9vcGVuX3NvbGliKSAoY29uc3QgY2hhciAqc29uYW1lLAorLQkJCSAgICAgIHVuc2lnbmVk IG9fZmxhZ3MsCistCQkJICAgICAgZ2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8Y2hhcj4gKnRlbXBf cGF0aG5hbWUpOworLQorICAgLyogR2l2ZW4gdHdvIHNvX2xpc3Qgb2JqZWN0cywgb25lIGZyb20g dGhlIEdEQiB0aHJlYWQgbGlzdAorICAgICAgYW5kIGFub3RoZXIgZnJvbSB0aGUgbGlzdCByZXR1 cm5lZCBieSBjdXJyZW50X3NvcywgcmV0dXJuIDEKKyAgICAgIGlmIHRoZXkgcmVwcmVzZW50IHRo ZSBzYW1lIGxpYnJhcnkuCitAQCAtMTY3LDYgKzE1OSwyMyBAQCBzdHJ1Y3Qgc29saWJfb3BzCisg ICAgICBOVUxMLCBpbiB3aGljaCBjYXNlIG5vIHNwZWNpZmljIHByZXByb2Nlc3NpbmcgaXMgbmVj ZXNzYXJ5CisgICAgICBmb3IgdGhpcyB0YXJnZXQuICAqLworICAgdm9pZCAoKmhhbmRsZV9ldmVu dCkgKHZvaWQpOworKworKyAgLyogUmV0dXJuIGFuIGFkZHJlc3Mgd2l0aGluIHRoZSBpbmZlcmlv cidzIGFkZHJlc3Mgc3BhY2Ugd2hpY2ggaXMga25vd24KKysgICAgIHRvIGJlIHBhcnQgb2YgU08u ICBJZiB0aGVyZSBpcyBubyBzdWNoIGFkZHJlc3MsIG9yIEdEQiBkb2Vzbid0IGtub3cKKysgICAg IGhvdyB0byBmaWd1cmUgb3V0IHN1Y2ggYW4gYWRkcmVzcyB0aGVuIGFuIGVtcHR5IG9wdGlvbmFs IGlzCisrICAgICByZXR1cm5lZC4KKysKKysgICAgIFRoZSByZXR1cm5lZCBhZGRyZXNzIGNhbiBi ZSB1c2VkIHdoZW4gbG9hZGluZyB0aGUgc2hhcmVkIGxpYnJhcmllcworKyAgICAgZm9yIGEgY29y ZSBmaWxlLiAgR0RCIGtub3dzIHRoZSBidWlsZC1pZHMgZm9yIChzb21lKSBmaWxlcyBtYXBwZWQK KysgICAgIGludG8gdGhlIGluZmVyaW9yJ3MgYWRkcmVzcyBzcGFjZSwgYW5kIGtub3dzIHRoZSBh ZGRyZXNzIHJhbmdlcyB3aGljaAorKyAgICAgdGhvc2UgbWFwcGVkIGZpbGVzIGNvdmVyLiAgSWYg R0RCIGNhbiBmaWd1cmUgb3V0IGEgcmVwcmVzZW50YXRpdmUKKysgICAgIGFkZHJlc3MgZm9yIHRo ZSBsaWJyYXJ5IHRoZW4gdGhpcyBjYW4gYmUgdXNlZCB0byBtYXRjaCBhIGxpYnJhcnkgdG8gYQor KyAgICAgbWFwcGVkIGZpbGUsIGFuZCB0aHVzIHRvIGEgYnVpbGQtaWQuICBHREIgY2FuIHRoZW4g dXNlIHRoaXMKKysgICAgIGluZm9ybWF0aW9uIHRvIGhlbHAgbG9jYXRlIHRoZSBzaGFyZWQgbGli cmFyeSBvYmpmaWxlLCBpZiB0aGUgb2JqZmlsZQorKyAgICAgaXMgbm90IGluIHRoZSBleHBlY3Rl ZCBwbGFjZSAoYXMgZGVmaW5lZCBieSB0aGUgc2hhcmVkIGxpYnJhcmllcyBmaWxlCisrICAgICBu YW1lKS4gICovCisrCisrICBzdGQ6Om9wdGlvbmFsPENPUkVfQUREUj4gKCpmaW5kX3NvbGliX2Fk ZHIpIChzb2xpYiAmc28pOworIH07CisgCisgLyogQSB1bmlxdWUgcG9pbnRlciB0byBhIHNvX2xp c3QuICAqLworQEAgLTE4Niw0ICsxOTUsOSBAQCBleHRlcm4gZ2RiX2JmZF9yZWZfcHRyIHNvbGli X2JmZF9mb3BlbiAoY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmZCk7CisgLyogRmluZCBzb2xp YiBiaW5hcnkgZmlsZSBhbmQgb3BlbiBpdC4gICovCisgZXh0ZXJuIGdkYl9iZmRfcmVmX3B0ciBz b2xpYl9iZmRfb3BlbiAoY29uc3QgY2hhciAqaW5fcGF0aG5hbWUpOworIAorKy8qIEEgZGVmYXVs dCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc29saWJfb3BzOjpmaW5kX3NvbGliX2FkZHIgY2FsbGJh Y2suCisrICAgVGhpcyBqdXN0IHJldHVybnMgYW4gZW1wdHkgc3RkOjpvcHRpb25hbDxDT1JFX0FE RFI+IGluZGljYXRpbmcgR0RCIGlzCisrICAgdW5hYmxlIHRvIGZpbmQgYW4gYWRkcmVzcyB3aXRo aW4gdGhlIGxpYnJhcnkgU08uICAqLworK2V4dGVybiBzdGQ6Om9wdGlvbmFsPENPUkVfQUREUj4g ZGVmYXVsdF9maW5kX3NvbGliX2FkZHIgKHNvbGliICZzbyk7CisrCisgI2VuZGlmCitkaWZmIC0t Z2l0IGEvZ2RiL3N5bWZpbGUtZGVidWcuYyBiL2dkYi9zeW1maWxlLWRlYnVnLmMKKy0tLSBhL2dk Yi9zeW1maWxlLWRlYnVnLmMKKysrKyBiL2dkYi9zeW1maWxlLWRlYnVnLmMKK0BAIC02MzcsNyAr NjM3LDcgQEAgb2JqZmlsZTo6ZmluZF9hbmRfYWRkX3NlcGFyYXRlX3N5bWJvbF9maWxlIChzeW1m aWxlX2FkZF9mbGFncyBzeW1maWxlX2ZsYWdzKQorIAkgICAgIHRoZSB1c2VyIGEgc3lzdGVtIHNw ZWNpZmljIG1lc3NhZ2UgdGhhdCBndWlkZXMgdGhlbSB0byBmaW5kaW5nCisgCSAgICAgdGhlIG1p c3NpbmcgZGVidWcgaW5mby4gICovCisgCistCSAgZXh0X2xhbmdfbWlzc2luZ19kZWJ1Z2luZm9f cmVzdWx0IGV4dF9yZXN1bHQKKysJICBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0IGV4dF9y ZXN1bHQKKyAJICAgID0gZXh0X2xhbmdfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvICh0aGlzKTsK KyAJICBpZiAoIWV4dF9yZXN1bHQuZmlsZW5hbWUgKCkuZW1wdHkgKCkpCisgCSAgICB7CitkaWZm IC0tZ2l0IGEvZ2RiL3N5bWZpbGUuYyBiL2dkYi9zeW1maWxlLmMKKy0tLSBhL2dkYi9zeW1maWxl LmMKKysrKyBiL2dkYi9zeW1maWxlLmMKK0BAIC0xMjM3LDYgKzEyMzcsOCBAQCBzZXBhcmF0ZV9k ZWJ1Z19maWxlX2V4aXN0cyAoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGxvbmcg Y3JjLAorIAkJCSAgICBzdHJ1Y3Qgb2JqZmlsZSAqcGFyZW50X29iamZpbGUsCisgCQkJICAgIGRl ZmVycmVkX3dhcm5pbmdzICp3YXJuaW5ncykKKyB7CisrICBTRVBBUkFURV9ERUJVR19GSUxFX1ND T1BFRF9ERUJVR19FTlRFUl9FWElUOworKworICAgdW5zaWduZWQgbG9uZyBmaWxlX2NyYzsKKyAg IGludCBmaWxlX2NyY19wOworICAgc3RydWN0IHN0YXQgcGFyZW50X3N0YXQsIGFiZmRfc3RhdDsK K0BAIC0xMjUxLDE5ICsxMjUzLDEzIEBAIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzIChjb25z dCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgbG9uZyBjcmMsCisgICBpZiAoZmlsZW5hbWVf Y21wIChuYW1lLmNfc3RyICgpLCBvYmpmaWxlX25hbWUgKHBhcmVudF9vYmpmaWxlKSkgPT0gMCkK KyAgICAgcmV0dXJuIDA7CisgCistICBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1ZykKKy0g ICAgeworLSAgICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csIF8oIiAgVHJ5aW5nICVzLi4uIiks IG5hbWUuY19zdHIgKCkpOworLSAgICAgIGdkYl9mbHVzaCAoZ2RiX3N0ZGxvZyk7CistICAgIH0K KysgIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgiVHJ5aW5nICVzLi4uIiwgbmFt ZS5jX3N0ciAoKSk7CisgCisgICBnZGJfYmZkX3JlZl9wdHIgYWJmZCAoZ2RiX2JmZF9vcGVuIChu YW1lLmNfc3RyICgpLCBnbnV0YXJnZXQpKTsKKyAKKyAgIGlmIChhYmZkID09IE5VTEwpCisgICAg IHsKKy0gICAgICBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1ZykKKy0JZ2RiX3ByaW50ZiAo Z2RiX3N0ZGxvZywgXygiIG5vLCB1bmFibGUgdG8gb3Blbi5cbiIpKTsKKy0KKysgICAgICBzZXBh cmF0ZV9kZWJ1Z19maWxlX2RlYnVnX3ByaW50ZiAoInVuYWJsZSB0byBvcGVuIGZpbGUiKTsKKyAg ICAgICByZXR1cm4gMDsKKyAgICAgfQorIAorQEAgLTEyODUsMTAgKzEyODEsNyBAQCBzZXBhcmF0 ZV9kZWJ1Z19maWxlX2V4aXN0cyAoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGxv bmcgY3JjLAorICAgICAgIGlmIChhYmZkX3N0YXQuc3RfZGV2ID09IHBhcmVudF9zdGF0LnN0X2Rl dgorIAkgICYmIGFiZmRfc3RhdC5zdF9pbm8gPT0gcGFyZW50X3N0YXQuc3RfaW5vKQorIAl7Cist CSAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCistCSAgICBnZGJfcHJpbnRmIChnZGJf c3RkbG9nLAorLQkJCV8oIiBubywgc2FtZSBmaWxlIGFzIHRoZSBvYmpmaWxlLlxuIikpOworLQor KwkgIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgic2FtZSBmaWxlIGFzIHRoZSBv YmpmaWxlIik7CisgCSAgcmV0dXJuIDA7CisgCX0KKyAgICAgICB2ZXJpZmllZF9hc19kaWZmZXJl bnQgPSAxOworQEAgLTEzMDAsOSArMTI5Myw3IEBAIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3Rz IChjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgbG9uZyBjcmMsCisgCisgICBpZiAo IWZpbGVfY3JjX3ApCisgICAgIHsKKy0gICAgICBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1 ZykKKy0JZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgXygiIG5vLCBlcnJvciBjb21wdXRpbmcgQ1JD LlxuIikpOworLQorKyAgICAgIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgiZXJy b3IgY29tcHV0aW5nIENSQyIpOworICAgICAgIHJldHVybiAwOworICAgICB9CisgCitAQCAtMTMx OCwyMCArMTMwOSwxOCBAQCBzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4aXN0cyAoY29uc3Qgc3RkOjpz dHJpbmcgJm5hbWUsIHVuc2lnbmVkIGxvbmcgY3JjLAorIAl7CisgCSAgaWYgKCFnZGJfYmZkX2Ny YyAocGFyZW50X29iamZpbGUtPm9iZmQuZ2V0ICgpLCAmcGFyZW50X2NyYykpCisgCSAgICB7Cist CSAgICAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQorLQkJZ2RiX3ByaW50ZiAoZ2Ri X3N0ZGxvZywKKy0JCQkgICAgXygiIG5vLCBlcnJvciBjb21wdXRpbmcgQ1JDLlxuIikpOworLQor KwkgICAgICBzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnX3ByaW50ZiAoImVycm9yIGNvbXB1dGlu ZyBDUkMiKTsKKyAJICAgICAgcmV0dXJuIDA7CisgCSAgICB9CisgCX0KKyAKKyAgICAgICBpZiAo dmVyaWZpZWRfYXNfZGlmZmVyZW50IHx8IHBhcmVudF9jcmMgIT0gZmlsZV9jcmMpCisgCXsKKy0J ICBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1ZykKKy0JICAgIGdkYl9wcmludGYgKGdkYl9z dGRsb2csICJ0aGUgZGVidWcgaW5mb3JtYXRpb24gZm91bmQgaW4gXCIlc1wiIgorLQkJCSIgZG9l cyBub3QgbWF0Y2ggXCIlc1wiIChDUkMgbWlzbWF0Y2gpLlxuIiwKKy0JCQluYW1lLmNfc3RyICgp LCBvYmpmaWxlX25hbWUgKHBhcmVudF9vYmpmaWxlKSk7CisrCSAgc2VwYXJhdGVfZGVidWdfZmls ZV9kZWJ1Z19wcmludGYKKysJICAgICgidGhlIGRlYnVnIGluZm9ybWF0aW9uIGZvdW5kIGluIFwi JXNcIiBkb2VzIG5vdCBtYXRjaCAiCisrCSAgICAgIlwiJXNcIiAoQ1JDIG1pc21hdGNoKS4iLCBu YW1lLmNfc3RyICgpLAorKwkgICAgIG9iamZpbGVfbmFtZSAocGFyZW50X29iamZpbGUpKTsKKysK KyAJICB3YXJuaW5ncy0+d2FybiAoXygidGhlIGRlYnVnIGluZm9ybWF0aW9uIGZvdW5kIGluIFwi JXBzXCIiCisgCQkJICAgICIgZG9lcyBub3QgbWF0Y2ggXCIlcHNcIiAoQ1JDIG1pc21hdGNoKS4i KSwKKyAJCQkgIHN0eWxlZF9zdHJpbmcgKGZpbGVfbmFtZV9zdHlsZS5zdHlsZSAoKSwKK0BAIC0x MzQzLDggKzEzMzIsNyBAQCBzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4aXN0cyAoY29uc3Qgc3RkOjpz dHJpbmcgJm5hbWUsIHVuc2lnbmVkIGxvbmcgY3JjLAorICAgICAgIHJldHVybiAwOworICAgICB9 CisgCistICBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1ZykKKy0gICAgZ2RiX3ByaW50ZiAo Z2RiX3N0ZGxvZywgXygiIHllcyFcbiIpKTsKKysgIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdf cHJpbnRmICgiZm91bmQgYSBtYXRjaCIpOworIAorICAgcmV0dXJuIDE7CisgfQorQEAgLTEzODUs MjMgKzEzNzMsMTggQEAgZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlIChjb25zdCBjaGFyICpkaXIs CisgCQkJICB1bnNpZ25lZCBsb25nIGNyYzMyLCBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwKKyAJ CQkgIGRlZmVycmVkX3dhcm5pbmdzICp3YXJuaW5ncykKKyB7CistICBpZiAoc2VwYXJhdGVfZGVi dWdfZmlsZV9kZWJ1ZykKKy0gICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywKKy0JCV8oIlxuTG9v a2luZyBmb3Igc2VwYXJhdGUgZGVidWcgaW5mbyAoZGVidWcgbGluaykgZm9yICIKKy0JCSAgIiVz XG4iKSwgb2JqZmlsZV9uYW1lIChvYmpmaWxlKSk7CisrICBTRVBBUkFURV9ERUJVR19GSUxFX1ND T1BFRF9ERUJVR19TVEFSVF9FTkQKKysgICAgKCJsb29raW5nIGZvciBzZXBhcmF0ZSBkZWJ1ZyBp bmZvIChkZWJ1ZyBsaW5rKSBmb3IgJXMiLAorKyAgICAgb2JqZmlsZV9uYW1lIChvYmpmaWxlKSk7 CisgCisgICAvKiBGaXJzdCB0cnkgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBvcmlnaW5h bCBmaWxlLiAgKi8KKy0gIHN0ZDo6c3RyaW5nIGRlYnVnZmlsZSA9IGRpcjsKKy0gIGRlYnVnZmls ZSArPSBkZWJ1Z2xpbms7CisrICBzdGQ6OnN0cmluZyBkZWJ1Z2ZpbGUgPSBwYXRoX2pvaW4gKGRp ciwgZGVidWdsaW5rKTsKKyAKKyAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4aXN0cyAoZGVi dWdmaWxlLCBjcmMzMiwgb2JqZmlsZSwgd2FybmluZ3MpKQorICAgICByZXR1cm4gZGVidWdmaWxl OworIAorICAgLyogVGhlbiB0cnkgaW4gdGhlIHN1YmRpcmVjdG9yeSBuYW1lZCBERUJVR19TVUJE SVJFQ1RPUlkuICAqLworLSAgZGVidWdmaWxlID0gZGlyOworLSAgZGVidWdmaWxlICs9IERFQlVH X1NVQkRJUkVDVE9SWTsKKy0gIGRlYnVnZmlsZSArPSAiLyI7CistICBkZWJ1Z2ZpbGUgKz0gZGVi dWdsaW5rOworKyAgZGVidWdmaWxlID0gcGF0aF9qb2luIChkaXIsIERFQlVHX1NVQkRJUkVDVE9S WSwgZGVidWdsaW5rKTsKKyAKKyAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4aXN0cyAoZGVi dWdmaWxlLCBjcmMzMiwgb2JqZmlsZSwgd2FybmluZ3MpKQorICAgICByZXR1cm4gZGVidWdmaWxl OworQEAgLTE0MTQsMTAgKzEzOTcsMTMgQEAgZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlIChjb25z dCBjaGFyICpkaXIsCisgICBib29sIHRhcmdldF9wcmVmaXggPSBpc190YXJnZXRfZmlsZW5hbWUg KGRpcik7CisgICBjb25zdCBjaGFyICpkaXJfbm90YXJnZXQKKyAgICAgPSB0YXJnZXRfcHJlZml4 ID8gZGlyICsgc3RybGVuIChUQVJHRVRfU1lTUk9PVF9QUkVGSVgpIDogZGlyOworKyAgY29uc3Qg Y2hhciAqdGFyZ2V0X3ByZWZpeF9zdHIgPSB0YXJnZXRfcHJlZml4ID8gVEFSR0VUX1NZU1JPT1Rf UFJFRklYIDogIiI7CisgICBzdGQ6OnZlY3RvcjxnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFy Pj4gZGVidWdkaXJfdmVjCisgICAgID0gZGlybmFtZXNfdG9fY2hhcl9wdHJfdmVjIChkZWJ1Z19m aWxlX2RpcmVjdG9yeS5jX3N0ciAoKSk7CistICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFy PiBjYW5vbl9zeXNyb290CistICAgID0gZ2RiX3JlYWxwYXRoIChnZGJfc3lzcm9vdC5jX3N0ciAo KSk7CisrICBjb25zdCBjaGFyICpzeXNyb290X3N0ciA9IGdkYl9zeXNyb290LmNfc3RyICgpOwor KyAgaWYgKGlzX3RhcmdldF9maWxlbmFtZSAoc3lzcm9vdF9zdHIpICYmIHRhcmdldF9maWxlc3lz dGVtX2lzX2xvY2FsICgpKQorKyAgICBzeXNyb290X3N0ciArPSBzdHJsZW4gKFRBUkdFVF9TWVNS T09UX1BSRUZJWCk7CisrICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBjYW5vbl9zeXNy b290ID0gZ2RiX3JlYWxwYXRoIChzeXNyb290X3N0cik7CisgCisgIC8qIE1TLVdpbmRvd3MvTVMt RE9TIGRvbid0IGFsbG93IGNvbG9ucyBpbiBmaWxlIG5hbWVzOyB3ZSBtdXN0CisgICAgIGNvbnZl cnQgdGhlIGRyaXZlIGxldHRlciBpbnRvIGEgb25lLWxldHRlciBkaXJlY3RvcnksIHNvIHRoYXQg dGhlCitAQCAtMTQ0MiwxMiArMTQyOCw4IEBAIGZpbmRfc2VwYXJhdGVfZGVidWdfZmlsZSAoY29u c3QgY2hhciAqZGlyLAorIAorICAgZm9yIChjb25zdCBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxj aGFyPiAmZGVidWdkaXIgOiBkZWJ1Z2Rpcl92ZWMpCisgICAgIHsKKy0gICAgICBkZWJ1Z2ZpbGUg PSB0YXJnZXRfcHJlZml4ID8gVEFSR0VUX1NZU1JPT1RfUFJFRklYIDogIiI7CistICAgICAgZGVi dWdmaWxlICs9IGRlYnVnZGlyOworLSAgICAgIGRlYnVnZmlsZSArPSAiLyI7CistICAgICAgZGVi dWdmaWxlICs9IGRyaXZlOworLSAgICAgIGRlYnVnZmlsZSArPSBkaXJfbm90YXJnZXQ7CistICAg ICAgZGVidWdmaWxlICs9IGRlYnVnbGluazsKKysgICAgICBkZWJ1Z2ZpbGUgPSBwYXRoX2pvaW4g KHRhcmdldF9wcmVmaXhfc3RyLCBkZWJ1Z2Rpci5nZXQgKCksCisrCQkJICAgICBkcml2ZS5jX3N0 ciAoKSwgZGlyX25vdGFyZ2V0LCBkZWJ1Z2xpbmspOworIAorICAgICAgIGlmIChzZXBhcmF0ZV9k ZWJ1Z19maWxlX2V4aXN0cyAoZGVidWdmaWxlLCBjcmMzMiwgb2JqZmlsZSwgd2FybmluZ3MpKQor IAlyZXR1cm4gZGVidWdmaWxlOworQEAgLTE0NjQsMzkgKzE0NDYsMTggQEAgZmluZF9zZXBhcmF0 ZV9kZWJ1Z19maWxlIChjb25zdCBjaGFyICpkaXIsCisgCXsKKyAJICAvKiBJZiB0aGUgZmlsZSBp cyBpbiB0aGUgc3lzcm9vdCwgdHJ5IHVzaW5nIGl0cyBiYXNlIHBhdGggaW4KKyAJICAgICB0aGUg Z2xvYmFsIGRlYnVnZmlsZSBkaXJlY3RvcnkuICAqLworLQkgIGRlYnVnZmlsZSA9IHRhcmdldF9w cmVmaXggPyBUQVJHRVRfU1lTUk9PVF9QUkVGSVggOiAiIjsKKy0JICBkZWJ1Z2ZpbGUgKz0gZGVi dWdkaXI7CistCSAgZGVidWdmaWxlICs9ICIvIjsKKy0JICBkZWJ1Z2ZpbGUgKz0gYmFzZV9wYXRo OworLQkgIGRlYnVnZmlsZSArPSAiLyI7CistCSAgZGVidWdmaWxlICs9IGRlYnVnbGluazsKKysJ ICBkZWJ1Z2ZpbGUgPSBwYXRoX2pvaW4gKHRhcmdldF9wcmVmaXhfc3RyLCBkZWJ1Z2Rpci5nZXQg KCksCisrCQkJCSBiYXNlX3BhdGgsIGRlYnVnbGluayk7CisgCisgCSAgaWYgKHNlcGFyYXRlX2Rl YnVnX2ZpbGVfZXhpc3RzIChkZWJ1Z2ZpbGUsIGNyYzMyLCBvYmpmaWxlLCB3YXJuaW5ncykpCisg CSAgICByZXR1cm4gZGVidWdmaWxlOworIAorIAkgIC8qIElmIHRoZSBmaWxlIGlzIGluIHRoZSBz eXNyb290LCB0cnkgdXNpbmcgaXRzIGJhc2UgcGF0aCBpbgorLQkgICAgIHRoZSBzeXNyb290J3Mg Z2xvYmFsIGRlYnVnZmlsZSBkaXJlY3RvcnkuICBHREJfU1lTUk9PVAorLQkgICAgIG1pZ2h0IHJl ZmVyIHRvIGEgdGFyZ2V0OiBwYXRoOyB3ZSBzdHJpcCB0aGUgInRhcmdldDoiCistCSAgICAgcHJl Zml4IC0tIGJ1dCBpZiB0aGF0IHdvdWxkIHlpZWxkIHRoZSBlbXB0eSBzdHJpbmcsIHdlCistCSAg ICAgZG9uJ3QgYm90aGVyIGF0IGFsbCwgYmVjYXVzZSB0aGF0IHdvdWxkIGp1c3QgZ2l2ZSB0aGUK Ky0JICAgICBzYW1lIHJlc3VsdCBhcyBhYm92ZS4gICovCisrCSAgICAgdGhlIHN5c3Jvb3QncyBn bG9iYWwgZGVidWdmaWxlIGRpcmVjdG9yeS4gICovCisgCSAgaWYgKGdkYl9zeXNyb290ICE9IFRB UkdFVF9TWVNST09UX1BSRUZJWCkKKyAJICAgIHsKKy0JICAgICAgZGVidWdmaWxlID0gdGFyZ2V0 X3ByZWZpeCA/IFRBUkdFVF9TWVNST09UX1BSRUZJWCA6ICIiOworLQkgICAgICBpZiAoaXNfdGFy Z2V0X2ZpbGVuYW1lIChnZGJfc3lzcm9vdCkpCistCQl7CistCQkgIHN0ZDo6c3RyaW5nIHJvb3QK Ky0JCSAgICA9IGdkYl9zeXNyb290LnN1YnN0ciAoc3RybGVuIChUQVJHRVRfU1lTUk9PVF9QUkVG SVgpKTsKKy0JCSAgZ2RiX2Fzc2VydCAoIXJvb3QuZW1wdHkgKCkpOworLQkJICBkZWJ1Z2ZpbGUg Kz0gcm9vdDsKKy0JCX0KKy0JICAgICAgZWxzZQorLQkJZGVidWdmaWxlICs9IGdkYl9zeXNyb290 OworLQkgICAgICBkZWJ1Z2ZpbGUgKz0gZGVidWdkaXI7CistCSAgICAgIGRlYnVnZmlsZSArPSAi LyI7CistCSAgICAgIGRlYnVnZmlsZSArPSBiYXNlX3BhdGg7CistCSAgICAgIGRlYnVnZmlsZSAr PSAiLyI7CistCSAgICAgIGRlYnVnZmlsZSArPSBkZWJ1Z2xpbms7CisrCSAgICAgIGRlYnVnZmls ZSA9IHBhdGhfam9pbiAoZ2RiX3N5c3Jvb3QuY19zdHIgKCksIGRlYnVnZGlyLmdldCAoKSwKKysJ CQkJICAgICBiYXNlX3BhdGgsIGRlYnVnbGluayk7CisgCisgCSAgICAgIGlmIChzZXBhcmF0ZV9k ZWJ1Z19maWxlX2V4aXN0cyAoZGVidWdmaWxlLCBjcmMzMiwgb2JqZmlsZSwKKyAJCQkJCSAgICAg IHdhcm5pbmdzKSkKK2RpZmYgLS1naXQgYS9nZGIvc3ltZmlsZS5oIGIvZ2RiL3N5bWZpbGUuaAor LS0tIGEvZ2RiL3N5bWZpbGUuaAorKysrIGIvZ2RiL3N5bWZpbGUuaAorQEAgLTM3MSw2ICszNzEs MjUgQEAgZXh0ZXJuIGdkYl9iZmRfcmVmX3B0ciBmaW5kX3NlcGFyYXRlX2RlYnVnX2ZpbGVfaW5f c2VjdGlvbiAoc3RydWN0IG9iamZpbGUgKik7CisgCisgZXh0ZXJuIGJvb2wgc2VwYXJhdGVfZGVi dWdfZmlsZV9kZWJ1ZzsKKyAKKysvKiBQcmludCBhICJzZXBhcmF0ZS1kZWJ1Zy1maWxlIiBkZWJ1 ZyBzdGF0ZW1lbnQuICAqLworKworKyNkZWZpbmUgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19w cmludGYoZm10LCAuLi4pCQlcCisrICBkZWJ1Z19wcmVmaXhlZF9wcmludGZfY29uZCAoc2VwYXJh dGVfZGVidWdfZmlsZV9kZWJ1ZywJXAorKwkJCSAgICAgICJzZXBhcmF0ZS1kZWJ1Zy1maWxlIiwJ CVwKKysJCQkgICAgICBmbXQsICMjX19WQV9BUkdTX18pCisrCisrLyogUHJpbnQgInNlcGFyYXRl LWRlYnVnLWZpbGUiIGVudGVyL2V4aXQgZGVidWcgc3RhdGVtZW50cy4gICovCisrCisrI2RlZmlu ZSBTRVBBUkFURV9ERUJVR19GSUxFX1NDT1BFRF9ERUJVR19FTlRFUl9FWElUIFwKKysgIHNjb3Bl ZF9kZWJ1Z19lbnRlcl9leGl0IChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnLAlcCisrCQkJICAg InNlcGFyYXRlLWRlYnVnLWZpbGUiKQorKworKy8qIFByaW50ICJzZXBhcmF0ZS1kZWJ1Zy1maWxl IiBzdGFydC9lbmQgZGVidWcgc3RhdGVtZW50cy4gICovCisrCisrI2RlZmluZSBTRVBBUkFURV9E RUJVR19GSUxFX1NDT1BFRF9ERUJVR19TVEFSVF9FTkQoZm10LCAuLi4pIFwKKysgIHNjb3BlZF9k ZWJ1Z19zdGFydF9lbmQgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcsCSAgICAgXAorKwkJCSAg InNlcGFyYXRlLWRlYnVnLWZpbGUiLCBmbXQsICMjX19WQV9BUkdTX18pCisrCisgLyogUmVhZCBm dWxsIHN5bWJvbHMgaW1tZWRpYXRlbHkuICAqLworIAorIGV4dGVybiBpbnQgcmVhZG5vd19zeW1i b2xfZmlsZXM7CitkaWZmIC0tZ2l0IGEvZ2RiL3RhcmdldC5jIGIvZ2RiL3RhcmdldC5jCistLS0g YS9nZGIvdGFyZ2V0LmMKKysrKyBiL2dkYi90YXJnZXQuYworQEAgLTMxOTYsNiArMzE5NiwxNCBA QCB0YXJnZXRfb3BzOjpmaWxlaW9fZnN0YXQgKGludCBmZCwgc3RydWN0IHN0YXQgKnNiLCBmaWxl aW9fZXJyb3IgKnRhcmdldF9lcnJubykKKyAgIHJldHVybiAtMTsKKyB9CisgCisraW50CisrdGFy Z2V0X29wczo6ZmlsZWlvX3N0YXQgKHN0cnVjdCBpbmZlcmlvciAqaW5mLCBjb25zdCBjaGFyICpm aWxlbmFtZSwKKysJCQkgc3RydWN0IHN0YXQgKnNiLCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJu bykKKyt7CisrICAqdGFyZ2V0X2Vycm5vID0gRklMRUlPX0VOT1NZUzsKKysgIHJldHVybiAtMTsK Kyt9CisrCisgaW50CisgdGFyZ2V0X29wczo6ZmlsZWlvX2Nsb3NlIChpbnQgZmQsIGZpbGVpb19l cnJvciAqdGFyZ2V0X2Vycm5vKQorIHsKK0BAIC0zMzE1LDYgKzMzMjMsMjkgQEAgdGFyZ2V0X2Zp bGVpb19mc3RhdCAoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc2IsIGZpbGVpb19lcnJvciAqdGFyZ2V0 X2Vycm5vKQorIAorIC8qIFNlZSB0YXJnZXQuaC4gICovCisgCisraW50CisrdGFyZ2V0X2ZpbGVp b19zdGF0IChzdHJ1Y3QgaW5mZXJpb3IgKmluZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisrCQkg ICAgc3RydWN0IHN0YXQgKnNiLCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubykKKyt7CisrICBm b3IgKHRhcmdldF9vcHMgKnQgPSBkZWZhdWx0X2ZpbGVpb190YXJnZXQgKCk7IHQgIT0gTlVMTDsg dCA9IHQtPmJlbmVhdGggKCkpCisrICAgIHsKKysgICAgICBpbnQgcmV0ID0gdC0+ZmlsZWlvX3N0 YXQgKGluZiwgZmlsZW5hbWUsIHNiLCB0YXJnZXRfZXJybm8pOworKworKyAgICAgIGlmIChyZXQg PT0gLTEgJiYgKnRhcmdldF9lcnJubyA9PSBGSUxFSU9fRU5PU1lTKQorKwljb250aW51ZTsKKysK KysgICAgICB0YXJnZXRfZGVidWdfcHJpbnRmX25vZnVuYyAoInRhcmdldF9maWxlaW9fc3RhdCAo JXMpID0gJWQgKCVkKSIsCisrCQkJCSAgZmlsZW5hbWUsIHJldCwKKysJCQkJICByZXQgIT0gLTEg PyAwIDogKnRhcmdldF9lcnJubyk7CisrICAgICAgcmV0dXJuIHJldDsKKysgICAgfQorKworKyAg KnRhcmdldF9lcnJubyA9IEZJTEVJT19FTk9TWVM7CisrICByZXR1cm4gLTE7CisrfQorKworKy8q IFNlZSB0YXJnZXQuaC4gICovCisrCisgaW50CisgdGFyZ2V0X2ZpbGVpb19jbG9zZSAoaW50IGZk LCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubykKKyB7CitkaWZmIC0tZ2l0IGEvZ2RiL3Rhcmdl dC5oIGIvZ2RiL3RhcmdldC5oCistLS0gYS9nZGIvdGFyZ2V0LmgKKysrKyBiL2dkYi90YXJnZXQu aAorQEAgLTEwMTEsNiArMTAxMSwxNCBAQCBzdHJ1Y3QgdGFyZ2V0X29wcworICAgICAgICAqVEFS R0VUX0VSUk5PKS4gICovCisgICAgIHZpcnR1YWwgaW50IGZpbGVpb19mc3RhdCAoaW50IGZkLCBz dHJ1Y3Qgc3RhdCAqc2IsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKTsKKyAKKysgICAgLyog R2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlIEZJTEVOQU1FIGFuZCBwdXQgaXQgaW4gU0Iu ICBMb29rIGZvcgorKyAgICAgICBGSUxFTkFNRSBpbiB0aGUgZmlsZXN5c3RlbSBhcyBzZWVuIGJ5 IElORi4gIElmIElORiBpcyBOVUxMLCB1c2UgdGhlCisrICAgICAgIGZpbGVzeXN0ZW0gc2VlbiBi eSB0aGUgZGVidWdnZXIgKEdEQiBvciwgZm9yIHJlbW90ZSB0YXJnZXRzLCB0aGUKKysgICAgICAg cmVtb3RlIHN0dWIpLiAgUmV0dXJuIDAgb24gc3VjY2Vzcywgb3IgLTEgaWYgYW4gZXJyb3Igb2Nj dXJzIChhbmQKKysgICAgICAgc2V0ICpUQVJHRVRfRVJSTk8pLiAgKi8KKysgICAgdmlydHVhbCBp bnQgZmlsZWlvX3N0YXQgKHN0cnVjdCBpbmZlcmlvciAqaW5mLCBjb25zdCBjaGFyICpmaWxlbmFt ZSwKKysJCQkgICAgIHN0cnVjdCBzdGF0ICpzYiwgZmlsZWlvX2Vycm9yICp0YXJnZXRfZXJybm8p OworKworICAgICAvKiBDbG9zZSBGRCBvbiB0aGUgdGFyZ2V0LiAgUmV0dXJuIDAsIG9yIC0xIGlm IGFuIGVycm9yIG9jY3VycworICAgICAgICAoYW5kIHNldCAqVEFSR0VUX0VSUk5PKS4gICovCisg ICAgIHZpcnR1YWwgaW50IGZpbGVpb19jbG9zZSAoaW50IGZkLCBmaWxlaW9fZXJyb3IgKnRhcmdl dF9lcnJubyk7CitAQCAtMjIyMCw2ICsyMjI4LDE0IEBAIGV4dGVybiBpbnQgdGFyZ2V0X2ZpbGVp b19wcmVhZCAoaW50IGZkLCBnZGJfYnl0ZSAqcmVhZF9idWYsIGludCBsZW4sCisgZXh0ZXJuIGlu dCB0YXJnZXRfZmlsZWlvX2ZzdGF0IChpbnQgZmQsIHN0cnVjdCBzdGF0ICpzYiwKKyAJCQkJZmls ZWlvX2Vycm9yICp0YXJnZXRfZXJybm8pOworIAorKy8qIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0 aGUgZmlsZSBhdCBGSUxFTkFNRSBvbiB0aGUgdGFyZ2V0IGFuZCBwdXQgaXQgaW4KKysgICBTQi4g IExvb2sgaW4gdGhlIGZpbGVzeXN0ZW0gYXMgc2VlbiBieSBJTkYuICBJZiBJTkYgaXMgTlVMTCwg dXNlIHRoZQorKyAgIGZpbGVzeXN0ZW0gc2VlbiBieSB0aGUgZGVidWdnZXIgKEdEQiBvciwgZm9y IHJlbW90ZSB0YXJnZXRzLCB0aGUgcmVtb3RlCisrICAgc3R1YikuICBSZXR1cm4gMCBvbiBzdWNj ZXNzLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnMgKGFuZCBzZXQKKysgICAqVEFSR0VUX0VSUk5P KS4gICovCisrZXh0ZXJuIGludCB0YXJnZXRfZmlsZWlvX3N0YXQgKHN0cnVjdCBpbmZlcmlvciAq aW5mLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKysJCQkgICAgICAgc3RydWN0IHN0YXQgKnNiLCBm aWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubyk7CisrCisgLyogQ2xvc2UgRkQgb24gdGhlIHRhcmdl dC4gIFJldHVybiAwLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnMKKyAgICAoYW5kIHNldCAqVEFS R0VUX0VSUk5PKS4gICovCisgZXh0ZXJuIGludCB0YXJnZXRfZmlsZWlvX2Nsb3NlIChpbnQgZmQs IGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKTsKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRl L2dkYi5iYXNlL2J1aWxkLWlkLXNlcW5vLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2J1aWxk LWlkLXNlcW5vLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9n ZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2J1aWxkLWlkLXNlcW5vLmMKK0BAIC0wLDAgKzEsMjIgQEAK KysvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorKwor KyAgIENvcHlyaWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysg ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKytpbnQKKyttYWluICh2 b2lkKQorK3sKKysgIHJldHVybiAwOworK30KK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dk Yi5iYXNlL2J1aWxkLWlkLXNlcW5vLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnVpbGQt aWQtc2Vxbm8uZXhwCituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9idWlsZC1pZC1zZXFuby5leHAKK0BAIC0wLDAgKzEsMTMz IEBACisrIyBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgor KyMKKysjIENvcHlyaWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMK KysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysj CisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisrIyBTZXR1cCBhIC5idWlsZC1pZC8g YmFzZWQgZGVidWcgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbXVsdGlwbGUgZW50cmllcworKyMgZm9y IHRoZSBzYW1lIGJ1aWxkLWlkLCB3aXRoIGVhY2ggZW50cnkgZ2l2ZW4gYSBkaWZmZXJlbnQgc2Vx dWVuY2UKKysjIG51bWJlci4KKysjCisrIyBFbnN1cmUgdGhhdCBHREIgd2lsbCBzY2FuIG92ZXIg YnJva2VuIHN5bWxpbmtzIGZvciB0aGUgc2FtZSBidWlsZC1pZAorKyMgKGJ1dCBkaWZmZXJlbnQg c2VxdWVuY2UgbnVtYmVyKSB0byBmaW5kIGxhdGVyIHdvcmtpbmcgc3ltbGlua3MuCisrIworKyMg VGhpcyB0ZXN0IG9ubHkgcGxhY2VzIGRlYnVnIGluZm9ybWF0aW9uIG9uIHRoZSBob3N0LCBzbyBp dCBpcyBhbHdheXMKKysjIGxvY2FsIHRvIEdEQi4KKysKKytyZXF1aXJlIHshaXNfcmVtb3RlIGhv c3R9CisrCisrc3RhbmRhcmRfdGVzdGZpbGUKKysKKytpZiB7W2J1aWxkX2V4ZWN1dGFibGUgImZh aWxlZCB0byBwcmVwYXJlIiAkdGVzdGZpbGUgJHNyY2ZpbGVdID09IC0xfSB7CisrICAgIHJldHVy biAtMQorK30KKysKKysjIFNwbGl0IG91dCBCSU5GSUxFLmRlYnVnLiAgUmVtb3ZlIGRlYnVnIGZy b20gQklORklMRS4KKytpZiB7W2dkYl9nbnVfc3RyaXBfZGVidWcgJGJpbmZpbGVdICE9IDB9IHsK KysgICAgcmV0dXJuIC0xCisrfQorKworKyMgR2V0IHRoZSAnLmJ1aWxkLWlkL3h4L3h4eC4uLnh4 eCcgcGFydCBvZiB0aGUgZmlsZW5hbWUuCisrc2V0IGJ1aWxkX2lkX2ZpbGVuYW1lIFtidWlsZF9p ZF9kZWJ1Z19maWxlbmFtZV9nZXQgJGJpbmZpbGVdCisrCisrIyBIaWRlIChyZW5hbWUpIEJJTkZJ TEUuZGVidWcsIHRoaXMgc2hvdWxkIGVuc3VyZSBHREIgY2FuJ3QgZmluZCBpdAorKyMgZGlyZWN0 bHkgYnV0IG5lZWRzIHRvIGxvb2sgZm9yIHRoZSBidWlsZC1pZCBiYXNlZCBmaWxlIGluIHRoZSBk ZWJ1ZworKyMgZGlyZWN0b3J5LgorK3NldCBoaWRkZW5fZGVidWdpbmZvIFtzdGFuZGFyZF9vdXRw dXRfZmlsZSAiaGlkZGVuXyR0ZXN0ZmlsZS5kZWJ1ZyJdCisrcmVtb3RlX2V4ZWMgYnVpbGQgIm12 ICR7YmluZmlsZX0uZGVidWcgJGhpZGRlbl9kZWJ1Z2luZm8iCisrCisrIyBBIGZpbGVuYW1lIHRo YXQgZG9lc24ndCBleGlzdC4gIFNvbWUgc3ltbGlua3Mgd2lsbCBwb2ludCBhdCB0aGlzCisrIyBm aWxlLgorK3NldCBtaXNzaW5nX2RlYnVnaW5mbyBbaG9zdF9zdGFuZGFyZF9vdXRwdXRfZmlsZSAi bWlzc2luZ19kZWJ1Z2luZm8iXQorKworKyMgQ3JlYXRlIHRoZSBkZWJ1ZyBkaXJlY3RvcnksIGFu ZCB0aGUgLmJ1aWxkLWlkIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKKysjIHdpdGhpbiBpdC4KKytzZXQg ZGVidWdkaXIgW2hvc3Rfc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImRlYnVnIl0KKytyZW1vdGVfZXhl YyBob3N0ICJta2RpciAtcCAkZGVidWdkaXIvW2ZpbGUgZGlybmFtZSAkYnVpbGRfaWRfZmlsZW5h bWVdIgorKworK3NldCBob3N0X2hpZGRlbl9kZWJ1Z2luZm8gW2dkYl9yZW1vdGVfZG93bmxvYWQg aG9zdCAkaGlkZGVuX2RlYnVnaW5mb10KKytyZW1vdGVfZXhlYyBob3N0ICJsbiAtZnMgJGhvc3Rf aGlkZGVuX2RlYnVnaW5mbyAkZGVidWdkaXIvJGJ1aWxkX2lkX2ZpbGVuYW1lIgorKworKyMgU3Rh cnQgR0RCIGFuZCBsb2FkIGdsb2JhbCBCSU5GSUxFLiAgSWYgRklORF9ERUJVR0lORk8gaXMgdHJ1 ZSB0aGVuCisrIyB3ZSBleHBlY3QgR0RCIHRvIGZpbmQgdGhlIGRlYnVnIGluZm9ybWF0aW9uIG1h dGNoaW5nIEJJTkZJTEUsCisrIyBvdGhlcndpc2UsIHdlIGV4cGVjdCBHREIgbm90IHRvIGZpbmQg dGhlIGRlYnVnIGluZm9ybWF0aW9uLgorK3Byb2MgbG9hZF9iaW5maWxlX2NoZWNrX2RlYnVnX2lz X2ZvdW5kIHsgZmluZF9kZWJ1Z2luZm8gdGVzdG5hbWUgfSB7CisrICAgIHdpdGhfdGVzdF9wcmVm aXggIiR0ZXN0bmFtZSIgeworKwljbGVhbl9yZXN0YXJ0CisrCisrCWdkYl90ZXN0X25vX291dHB1 dCAic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5ICQ6OmRlYnVnZGlyIiBcCisrCSAgICAic2V0IGRl YnVnLWZpbGUtZGlyZWN0b3J5IgorKworKwlnZGJfZmlsZV9jbWQgJDo6YmluZmlsZQorKworKwlp ZiB7ICRmaW5kX2RlYnVnaW5mbyB9IHsKKysJICAgIGdkYl9hc3NlcnQgeyBbcmVnZXhwIFtzdHJp bmdfdG9fcmVnZXhwIFwKKysJCQkJICAgICAgIlJlYWRpbmcgc3ltYm9scyBmcm9tICQ6OmhpZGRl bl9kZWJ1Z2luZm8uLi4iXSBcCisrCQkJICAgICAgJDo6Z2RiX2ZpbGVfY21kX21zZ10gfSBcCisr CQkiZGVidWdpbmZvIHdhcyByZWFkIHZpYSBidWlsZC1pZCIKKysJfSBlbHNlIHsKKysJICAgIGdk Yl9hc3NlcnQgeyBbcmVnZXhwICJcXChObyBkZWJ1Z2dpbmcgc3ltYm9scyBmb3VuZCBpbiBcW15c clxuXF0rLyQ6OnRlc3RmaWxlXFwpIiBcCisrCQkJICAgICAgJDo6Z2RiX2ZpbGVfY21kX21zZ10g fSBcCisrCSAgICB9CisrICAgIH0KKyt9CisrCisrIyBSZXR1cm4gYSBjb3B5IG9mIEZJTEVOQU1F LCB3aGljaCBzaG91bGQgZW5kICcuZGVidWcnLCB3aXRoIE5VTUJFUgorKyMgYWRkZWQsIGUuZy4g YWRkX3NlcW5vIDEgImZvby5kZWJ1ZyIgLS0+ICJmb28uMS5kZWJ1ZyIuCisrcHJvYyBhZGRfc2Vx bm8geyBudW1iZXIgZmlsZW5hbWUgfSB7CisrICAgIHJldHVybiBbcmVnc3ViICJcLmRlYnVnXCQi ICRmaWxlbmFtZSAiLiR7bnVtYmVyfS5kZWJ1ZyJdCisrfQorKworK2xvYWRfYmluZmlsZV9jaGVj a19kZWJ1Z19pc19mb3VuZCB0cnVlIFwKKysgICAgImZpbmQgZGVidWdpbmZvIHdpdGggYSBzaW5n bGUgYnVpbGQtaWQgZmlsZSIKKysKKytyZW1vdGVfZXhlYyBob3N0ICJsbiAtZnMgJGhvc3RfaGlk ZGVuX2RlYnVnaW5mbyBcCisrCQkJJGRlYnVnZGlyL1thZGRfc2Vxbm8gMSAkYnVpbGRfaWRfZmls ZW5hbWVdIgorK3JlbW90ZV9leGVjIGhvc3QgImxuIC1mcyAkaG9zdF9oaWRkZW5fZGVidWdpbmZv IFwKKysJCQkkZGVidWdkaXIvW2FkZF9zZXFubyAyICRidWlsZF9pZF9maWxlbmFtZV0iCisrcmVt b3RlX2V4ZWMgaG9zdCAibG4gLWZzICRob3N0X2hpZGRlbl9kZWJ1Z2luZm8gXAorKwkJCSRkZWJ1 Z2Rpci9bYWRkX3NlcW5vIDMgJGJ1aWxkX2lkX2ZpbGVuYW1lXSIKKysKKytsb2FkX2JpbmZpbGVf Y2hlY2tfZGVidWdfaXNfZm91bmQgdHJ1ZSBcCisrICAgICJmaW5kIGRlYnVnaW5mbyB3aXRoIDQg YnVpbGQtaWQgZmlsZXMiCisrCisrcmVtb3RlX2V4ZWMgaG9zdCAibG4gLWZzICRtaXNzaW5nX2Rl YnVnaW5mbyAkZGVidWdkaXIvJGJ1aWxkX2lkX2ZpbGVuYW1lIgorKworK2xvYWRfYmluZmlsZV9j aGVja19kZWJ1Z19pc19mb3VuZCB0cnVlIFwKKysgICAgImZpbmQgZGVidWdpbmZvLCBmaXJzdCBi dWlsZC1pZCBmaWxlIGlzIGJhZCIKKysKKytyZW1vdGVfZXhlYyBob3N0ICJsbiAtZnMgJG1pc3Np bmdfZGVidWdpbmZvIFwKKysJCQkkZGVidWdkaXIvW2FkZF9zZXFubyAxICRidWlsZF9pZF9maWxl bmFtZV0iCisrcmVtb3RlX2V4ZWMgaG9zdCAibG4gLWZzICRtaXNzaW5nX2RlYnVnaW5mbyBcCisr CQkJJGRlYnVnZGlyL1thZGRfc2Vxbm8gMyAkYnVpbGRfaWRfZmlsZW5hbWVdIgorKworK2xvYWRf YmluZmlsZV9jaGVja19kZWJ1Z19pc19mb3VuZCB0cnVlICBcCisrICAgICJmaW5kIGRlYnVnaW5m bywgZmlyc3QgMiBidWlsZC1pZCBmaWxlcyBhcmUgYmFkIgorKworK3JlbW90ZV9leGVjIGhvc3Qg ImxuIC1mcyAkbWlzc2luZ19kZWJ1Z2luZm8gXAorKwkJCSRkZWJ1Z2Rpci9bYWRkX3NlcW5vIDIg JGJ1aWxkX2lkX2ZpbGVuYW1lXSIKKysKKytsb2FkX2JpbmZpbGVfY2hlY2tfZGVidWdfaXNfZm91 bmQgZmFsc2UgIFwKKysgICAgImNhbm5vdCBmaW5kIGRlYnVnaW5mbywgYWxsIGJ1aWxkLWlkIGZp bGVzIGFyZSBiYWQiCisrCisrcmVtb3RlX2V4ZWMgaG9zdCAibG4gLWZzICRob3N0X2hpZGRlbl9k ZWJ1Z2luZm8gXAorKwkJCSRkZWJ1Z2Rpci9bYWRkX3NlcW5vIDMgJGJ1aWxkX2lkX2ZpbGVuYW1l XSIKKysKKytsb2FkX2JpbmZpbGVfY2hlY2tfZGVidWdfaXNfZm91bmQgdHJ1ZSAgXAorKyAgICAi ZmluZCBkZWJ1Z2luZm8sIGxhc3QgYnVpbGQtaWQgZmlsZSBpcyBnb29kIgorKworK3JlbW90ZV9l eGVjIGhvc3QgInJtIC1mICRkZWJ1Z2Rpci9bYWRkX3NlcW5vIDEgJGJ1aWxkX2lkX2ZpbGVuYW1l XSIKKysKKytsb2FkX2JpbmZpbGVfY2hlY2tfZGVidWdfaXNfZm91bmQgZmFsc2UgIFwKKysgICAg ImNhbm5vdCBmaW5kIGRlYnVnaW5mbywgZmlsZSB3aXRoIHNlcW5vIDEgaXMgbWlzc2luZyIKK2Rp ZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2NvcmVmaWxlLWJ1aWxkaWQuZXhwIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9jb3JlZmlsZS1idWlsZGlkLmV4cAorLS0tIGEvZ2RiL3Rl c3RzdWl0ZS9nZGIuYmFzZS9jb3JlZmlsZS1idWlsZGlkLmV4cAorKysrIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIuYmFzZS9jb3JlZmlsZS1idWlsZGlkLmV4cAorQEAgLTE3MiwxMSArMTcyLDkgQEAgcHJv YyBsb2NhdGVfZXhlY19mcm9tX2NvcmVfYnVpbGRfaWQge2NvcmVmaWxlIGJ1aWxkaWQgc3VmZml4 IFwKKyAJIm1rZGlyIC1wIFtmaWxlIGpvaW4gJGRlYnVnZGlyIFtmaWxlIGRpcm5hbWUgJGJ1aWxk aWRdXSIKKyAKKyAgICAgc2V0IGZpbGVzX2xpc3Qge30KKysgICAgbGFwcGVuZCBmaWxlc19saXN0 ICRiaW5maWxlICRidWlsZGlkCisgICAgIGlmIHskc2VwZGVidWd9IHsKKy0JbGFwcGVuZCBmaWxl c19saXN0ICIkYmluZmlsZS5zdHJpcHBlZCIgJGJ1aWxkaWQKKyAJbGFwcGVuZCBmaWxlc19saXN0 ICIkYmluZmlsZS5kZWJ1ZyIgIiRidWlsZGlkLmRlYnVnIgorLSAgICB9IGVsc2UgeworLQlsYXBw ZW5kIGZpbGVzX2xpc3QgJGJpbmZpbGUgJGJ1aWxkaWQKKyAgICAgfQorICAgICBpZiB7JHNoYXJl ZH0geworIAlnbG9iYWwgc2hhcmVkaXIKK0BAIC0yMDAsMTIgKzE5OCw3IEBAIHByb2MgbG9jYXRl X2V4ZWNfZnJvbV9jb3JlX2J1aWxkX2lkIHtjb3JlZmlsZSBidWlsZGlkIHN1ZmZpeCBcCisgICAg IGdkYl90ZXN0ICJjb3JlLWZpbGUgJGNvcmVmaWxlIiAiUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGgg LioiIFwKKyAJImxvYWQgY29yZSBmaWxlIgorICAgICBpZiB7JHN5bWxpbmt9IHsKKy0JaWYgeyRz ZXBkZWJ1Z30geworLQkgICAgc2V0IGV4cGVjdGVkX2ZpbGUgW2ZpbGUgam9pbiAkYnVpbGRkaXIg XAorLQkJCQkgICBbZmlsZSB0YWlsICIkYmluZmlsZS5zdHJpcHBlZCJdXQorLQl9IGVsc2Ugewor LQkgICAgc2V0IGV4cGVjdGVkX2ZpbGUgW2ZpbGUgam9pbiAkYnVpbGRkaXIgW2ZpbGUgdGFpbCAk YmluZmlsZV1dCistCX0KKysJc2V0IGV4cGVjdGVkX2ZpbGUgW2ZpbGUgam9pbiAkYnVpbGRkaXIg W2ZpbGUgdGFpbCAkYmluZmlsZV1dCisgICAgIH0gZWxzZSB7CisgCXNldCBleHBlY3RlZF9maWxl ICRidWlsZGlkCisgICAgIH0KK0BAIC0yNDUsMTUgKzIzOCwxMiBAQCBwcm9jIGRvX2NvcmVmaWxl X2J1aWxkaWRfdGVzdHMge2FyZ3N9IHsKKyAKKyAgICAgaWYgeyRzZXBkZWJ1Z30geworIAkjIFN0 cmlwIGRlYnVnaW5mbyBpbnRvIGl0cyBvd24gZmlsZS4KKy0JaWYge1tnZGJfZ251X3N0cmlwX2Rl YnVnIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAkcHJvZ3JhbV90b19ydW5dXSBcCistCQkhPSAwfSB7 CisrCWlmIHtbZ2RiX2dudV9zdHJpcF9kZWJ1ZyBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJHByb2dy YW1fdG9fcnVuXSBcCisrCQkgbm8tZGVidWdsaW5rXSAhPSAwfSB7CisgCSAgICB1bnRlc3RlZCAi Y291bGQgbm90IHN0cmlwIGV4ZWN1dGFibGUgIGZvciBbam9pbiAkc3VmZml4IFwgXSIKKyAJICAg IHJldHVybgorIAl9CisgCistCSMgUnVuIHRoZSBzdHJpcHBlZCBwcm9ncmFtIGluc3RlYWQgb2Yg dGhlIG9yaWdpbmFsLgorLQlzZXQgcHJvZ3JhbV90b19ydW4gW2ZpbGUgam9pbiAkYnVpbGRkaXIg XAorLQkJCQlbZmlsZSB0YWlsICIkYmluZmlsZS5zdHJpcHBlZCJdXQorIAlsYXBwZW5kIHN1ZmZp eCAic2VwZGVidWciCisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5i YXNlL2NvcmVmaWxlLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvY29yZWZpbGUuZXhwCist LS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2NvcmVmaWxlLmV4cAorKysrIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIuYmFzZS9jb3JlZmlsZS5leHAKK0BAIC0xOTksNiArMTk5LDQ1IEBAIGdkYl90ZXN0 ICJ1cCIgIiNcWzAtOVxdKiAqKFxbMC05eGEtZkgnXF0qIGluKT8gLiogXFwoLipcXCkuKiIgInVw IChyZWluaXQpIgorIAorIGdkYl90ZXN0ICJjb3JlIiAiTm8gY29yZSBmaWxlIG5vdy4iCisgCisr IyBUZW1wb3JhcmlseSBtb3ZlIGNvcmVtbWFwLmRhdGEgb3V0IG9mIHRoZSB3YXkgYW5kIHJlbG9h ZCB0aGUgY29yZQorKyMgZmlsZS4gIFdlIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHJlYWQgYnVm MiBhcyB0aGUgY29udGVudHMgb2YgdGhpcworKyMgYXJlIHdyaXR0ZW4gaW50byB0aGUgY29yZSBm aWxlLiAgSW4gY29udHJhc3QgYnVmMnJvIHNob3VsZCBubyBsb25nZXIKKysjIGJlIHJlYWRhYmxl IGFzIHRoZSBjb250ZW50cyBvZiB0aGlzIHJlZ2lvbiBhcmUgbm90IHdpdGhpbiB0aGUgY29yZQor KyMgZmlsZSwgR0RCIHJlbGllcyBvbiByZWFkaW5nIHRoaXMgZnJvbSB0aGUgY29yZW1tYXAuZGF0 YSBmaWxlLCB3aGljaAorKyMgY2FuIG5vIGxvbmdlciBiZSBmb3VuZC4KKytzZXQgY29yZW1tYXBf ZGF0YV9maWxlbmFtZSBcCisrICAgIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSBjb3JlZGlyLltnZXRw aWRdL2NvcmVtbWFwLmRhdGFdCisrc2V0IGNvcmVtbWFwX2RhdGFfYmFja3VwX2ZpbGVuYW1lIFwK KysgICAgW3N0YW5kYXJkX291dHB1dF9maWxlIGNvcmVkaXIuW2dldHBpZF0vY29yZW1tYXAuZGF0 YS5iYWNrdXBdCisrcmVtb3RlX2V4ZWMgaG9zdCAibXYgJHtjb3JlbW1hcF9kYXRhX2ZpbGVuYW1l fSBcCisrCQkgICR7Y29yZW1tYXBfZGF0YV9iYWNrdXBfZmlsZW5hbWV9IgorKworK2NsZWFuX3Jl c3RhcnQgJGJpbmZpbGUKKysKKysjIExvYWQgdGhlIGNvcmUgZmlsZSBhbmQgY2hlY2sgd2UgZ2V0 IGEgd2FybmluZyBhYm91dCB0aGUKKysjIGNvcmVtbWFwLmRhdGEgZmlsZSBiZWluZyBtaXNzaW5n LgorK2dkYl90ZXN0X211bHRpcGxlICJjb3JlLWZpbGUgJGNvcmVmaWxlIiAid2FybiBhYm91dCBj b3JlbW1hcC5kYXRhIG1pc3NpbmciIHsKKysgICAgLXJlIC13cmFwICJ3YXJuaW5nOiBDYW4ndCBv cGVuIGZpbGUgXFteXHJcblxdKy9jb3JlbW1hcC5kYXRhIGR1cmluZyBmaWxlLWJhY2tlZCBtYXBw aW5nIG5vdGUgcHJvY2Vzc2luZ1xyXG4uKiIgeworKwlwYXNzICRnZGJfdGVzdF9uYW1lCisrICAg IH0KKyt9CisrCisrIyBUaGlzIHhmYWlsIHdhcyBqdXN0IGNvcGllZCBmcm9tIGVhcmxpZXIgaW4g dGhlIHNjcmlwdCB3aGVyZSB3ZSBhbHNvCisrIyByZWFkIGZyb20gYnVmMi4KKytzZXR1cF94ZmFp bCAiKi0qLXN1bm9zKiIgIiotKi1haXgqIgorK2dkYl90ZXN0ICJ4LzhiZCBidWYyIiBcCisrICAg ICIuKjouKjAuKjEuKjIuKjMuKjQuKjUuKjYuKjcuKiIgXAorKyAgICAiYWNjZXNzaW5nIG1tYXBw ZWQgZGF0YSBpbiBjb3JlIGZpbGUgd2l0aCBjb3JlbW1hcC5kYXRhIHJlbW92ZWQiCisrCisrZ2Ri X3Rlc3QgIngvOGJkIGJ1ZjJybyIgXAorKyAgICAiJGhleFxbXjpcXSo6XFxzK0Nhbm5vdCBhY2Nl c3MgbWVtb3J5IGF0IGFkZHJlc3MgJGhleCIgXAorKyAgICAiYWNjZXNzaW5nIHJlYWQtb25seSBt bWFwcGVkIGRhdGEgaW4gY29yZSBmaWxlIHdpdGggY29yZW1tYXAuZGF0YSByZW1vdmVkIgorKwor KyMgUmVzdG9yZSB0aGUgY29yZW1tYXAuZGF0YSBmaWxlIHNvIGxhdGVyIHRlc3RzIGRvbid0IGdp dmUgd2FybmluZ3MKKysjIHdoZW4gdGhlIGNvcmUgZmlsZSBpcyByZWxvYWRlZC4KKytyZW1vdGVf ZXhlYyBob3N0ICJtdiAke2NvcmVtbWFwX2RhdGFfYmFja3VwX2ZpbGVuYW1lfSBcCisrCQkgICR7 Y29yZW1tYXBfZGF0YV9maWxlbmFtZX0iCisrCisgIyBUZXN0IHRoYXQgd2UgY2FuIHVubG9hZCB0 aGUgY29yZSB3aXRoIHRoZSAiZGV0YWNoIiBjb21tYW5kLgorIAorIHByb2Nfd2l0aF9wcmVmaXgg Y29yZWZpbGVfZGV0YWNoIHt9IHsKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNl L3NvbGliLXNlYXJjaC5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLXNlYXJjaC5l eHAKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItc2VhcmNoLmV4cAorKysrIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zb2xpYi1zZWFyY2guZXhwCitAQCAtNDMsNyArNDMsMTEg QEAgc2V0IHJpZ2h0X2JpbmZpbGUyX2xpYiBcCisgc2V0IGJpbmZpbGUxX2xpYiBbc3RhbmRhcmRf b3V0cHV0X2ZpbGUgJHtsaWJuYW1lMX0uc29dCisgc2V0IGJpbmZpbGUyX2xpYiBbc3RhbmRhcmRf b3V0cHV0X2ZpbGUgJHtsaWJuYW1lMn0uc29dCisgCistc2V0IGxpYl9mbGFncyBbbGlzdCBkZWJ1 ZyBsZGZsYWdzPS1XbCwtQnN5bWJvbGljXQorKyMgV2hlbiB0aGlzIHRlc3Qgd2FzIHdyaXR0ZW4s IEdEQidzIGFiaWxpdHkgdG8gdHJhY2sgZG93biBzaGFyZWQKKysjIGxpYnJhcmllcyBmb3IgYSBj b3JlIGZpbGUgYmFzZWQgb24gdGhlIGJ1aWxkLWlkIG11Y2ggcG9vcmVyLiAgQXMgR0RCCisrIyBo YXMgaW1wcm92ZWQgd2Ugbm93IG5lZWQgdG8gZGlzYWJsZSBidWlsZC1pZHMgaW4gb3JkZXIgZm9y IHRoaXMgdGVzdAorKyMgdG8gZnVuY3Rpb24gYXMgZXhwZWN0ZWQuCisrc2V0IGxpYl9mbGFncyBb bGlzdCBkZWJ1ZyBuby1idWlsZC1pZCBsZGZsYWdzPS1XbCwtQnN5bWJvbGljXQorIHNldCB3cm9u Z19saWJfZmxhZ3MgIiRsaWJfZmxhZ3MgYWRkaXRpb25hbF9mbGFncz0tREFSUkFZX1NJWkU9MSIK KyBzZXQgcmlnaHRfbGliX2ZsYWdzICIkbGliX2ZsYWdzIGFkZGl0aW9uYWxfZmxhZ3M9LURBUlJB WV9TSVpFPTgxOTIgYWRkaXRpb25hbF9mbGFncz0tRFJJR0hUIgorIAorZGlmZiAtLWdpdCBhL2dk Yi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc3lzcm9vdC1kZWJ1Zy1sb29rdXAuZXhwIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIuYmFzZS9zeXNyb290LWRlYnVnLWxvb2t1cC5leHAKK25ldyBmaWxlIG1vZGUgMTAw NjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3N5c3Jvb3Qt ZGVidWctbG9va3VwLmV4cAorQEAgLTAsMCArMSwxODQgQEAKKysjIENvcHlyaWdodCAyMDI0IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisrCisrIyBUZXN0IEdEQidzIGFiaWxpdHkgdG8gZmluZCBkZWJ1ZyBpbmZvcm1hdGlv biBieSBsb29raW5nIHdpdGhpbiB0aGUKKysjIHN5c3Jvb3QuCisrIworKyMgV2UgY29tcGlsZSBh IHN0YXRpYyBiaW5hcnkgKHRvIHJlZHVjZSB3aGF0IHdlIG5lZWQgdG8gY29weSBpbnRvIHRoZQor KyMgc3lzcm9vdCksIHNwbGl0IHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBiaW5hcnks IGFuZCBzZXR1cCBhCisrIyBzeXNyb290LgorKyMKKysjIFRoZSBkZWJ1Zy1maWxlLWRpcmVjdG9y eSBpcyBzZXQgdG8ganVzdCAnL2RlYnVnJywgYnV0IHdlJ3JlCisrIyBleHBlY3RpbmcgR0RCIHRv IGFjdHVhbGx5IGxvb2sgaW4gJyRTWVNST09UL2RlYnVnJy4KKysjCisrIyBUaGVyZSdzIGEgdGVz dCBmb3IgdXNpbmcgLmJ1aWxkLWlkIGJhc2VkIGxvb2t1cCwgYW5kIGEgdGVzdCBmb3IKKysjIGdu dV9kZWJ1Z2xpbmsgYmFzZWQgbG9va3VwLgorKworK3JlcXVpcmUgeyFpc19yZW1vdGUgaG9zdH0K KysKKytzdGFuZGFyZF90ZXN0ZmlsZSBtYWluLmMKKysKKysjIENyZWF0ZSBhIGNvcHkgb2YgQklO RklMRSwgc3BsaXQgb3V0IHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiwgYW5kIHRoZW4KKysjIHNldHVw IGEgc3lzcm9vdC4gIEhpZGUgKGJ5IG1vdmluZykgdGhlIGFjdHVhbCBkZWJ1ZyBpbmZvcm1hdGlv biBmaWxlCisrIyBhbmQgY3JlYXRlIGEgc3ltbGluayB0byB0aGUgaGlkZGVuIGRlYnVnIGluZm9y bWF0aW9uIGZyb20gd2l0aGluIHRoZQorKyMgc3lzcm9vdC4KKysjCisrIyBTdGFydCBHREIsIHNl dCB0aGUgc3lzcm9vdCwgYW5kIHRoZW4gbG9hZCB0aGUgZXhlY3V0YWJsZSwgZW5zdXJlIEdEQgor KyMgZmluZHMgdGhlIGRlYnVnIGluZm9ybWF0aW9uLCB3aGljaCBtdXN0IGhhdmUgaGFwcGVuZWQg YnkgbG9va2luIGluCisrIyB0aGUgc3lzcm9vdC4KKytwcm9jX3dpdGhfcHJlZml4IGxvb2t1cF92 aWFfYnVpbGRfaWQge30geworKyAgICBzZXQgZmlsZW5hbWUgJHs6OmJpbmZpbGV9XzEKKysgICAg aWYgeyBbYnVpbGRfZXhlY3V0YWJsZSAiYnVpbGQgZXhlYyIgJHtmaWxlbmFtZX0gJDo6c3JjZmls ZSBcCisrCSAgICAgIHthZGRpdGlvbmFsX2ZsYWdzPS1zdGF0aWMgZGVidWcgYnVpbGQtaWR9XSB9 IHsKKysJcmV0dXJuCisrICAgIH0KKysKKysgICAgIyBTcGxpdCBkZWJ1ZyBpbmZvcm1hdGlvbiBp bnRvIGEgLmRlYnVnIGZpbGUsIHJlbW92ZSBkZWJ1ZworKyAgICAjIGluZm9ybWF0aW9uIGZyb20g RklMRU5BTUUuICBEb24ndCBhZGQgYSAuZ251X2RlYnVnbGluayB0bworKyAgICAjIEZJTEVOQU1F LCB3ZSByZWx5IG9uIHRoZSBidWlsZC1pZC4KKysgICAgaWYge1tnZGJfZ251X3N0cmlwX2RlYnVn ICRmaWxlbmFtZSB7IG5vLWRlYnVnbGluayB9XSAhPSAwfSB7CisrCXVuc3VwcG9ydGVkICJjYW5u b3Qgc3BsaXQgZGVidWcgaW5mb3JtYXRpb24gZnJvbSBleGVjdXRhYmxlIgorKwlyZXR1cm4KKysg ICAgfQorKworKyAgICBzZXQgc3lzcm9vdCBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgInN5c3Jvb3Qx Il0KKysgICAgc2V0IGRlYnVnX2RpciAiL2RlYnVnIgorKworKyAgICBzZXQgZGVidWdfc3ltbGlu ayBcCisrCSR7c3lzcm9vdH0ke2RlYnVnX2Rpcn0vW2J1aWxkX2lkX2RlYnVnX2ZpbGVuYW1lX2dl dCAkZmlsZW5hbWVdCisrCisrICAgIHNldCBidWlsZF9pZF9kaXIgW2ZpbGUgZGlybmFtZSAkZGVi dWdfc3ltbGlua10KKysKKysgICAgc2V0IGRlYnVnX2ZpbGVuYW1lICR7ZmlsZW5hbWV9X2hpZGRl bl9kZWJ1ZworKworKyAgICByZW1vdGVfZXhlYyBidWlsZCAibWtkaXIgLXAgJGJ1aWxkX2lkX2Rp ciIKKysgICAgcmVtb3RlX2V4ZWMgYnVpbGQgIm12ICRmaWxlbmFtZS5kZWJ1ZyAkZGVidWdfZmls ZW5hbWUiCisrICAgIHJlbW90ZV9leGVjIGJ1aWxkICJsbiAtc2YgJGRlYnVnX2ZpbGVuYW1lICRk ZWJ1Z19zeW1saW5rIgorKworKyAgICBmb3JlYWNoX3dpdGhfcHJlZml4IHN5c3Jvb3RfcHJlZml4 IHsgIiIgInRhcmdldDoiIH0geworKwljbGVhbl9yZXN0YXJ0CisrCisrCWdkYl90ZXN0X25vX291 dHB1dCAic2V0IHN5c3Jvb3QgJHtzeXNyb290X3ByZWZpeH0kc3lzcm9vdCIgInNldCBzeXNyb290 IgorKwlnZGJfdGVzdF9ub19vdXRwdXQgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSAkZGVidWdf ZGlyIgorKworKwlnZGJfZmlsZV9jbWQgJGZpbGVuYW1lCisrCisrCWdkYl9hc3NlcnQgeyAkOjpn ZGJfZmlsZV9jbWRfZGVidWdfaW5mbyBlcSAiZGVidWciIH0gXAorKwkgICAgImVuc3VyZSBkZWJ1 ZyBpbmZvcm1hdGlvbiB3YXMgZm91bmQiCisrCisrCWlmIHsgJHN5c3Jvb3RfcHJlZml4IGVxICJ0 YXJnZXQ6IgorKwkgICAgICYmIFt0YXJnZXRfaW5mbyBnZGJfcHJvdG9jb2xdID09ICJleHRlbmRl ZC1yZW1vdGUifSB7CisrCSAgICAjIE9ubHkgd2hlbiB1c2luZyB0aGUgZXh0ZW5kZWQtcmVtb3Rl IGJvYXJkIHdpbGwgd2UgaGF2ZQorKwkgICAgIyBzdGFydGVkIGEgcmVtb3RlIHRhcmdldCBieSB0 aGlzIHBvaW50LiAgSW4gdGhpcyBjYXNlIEdEQgorKwkgICAgIyB3aWxsIHNlZSB0aGUgJ3Rhcmdl dDonIHByZWZpeCBhcyByZW1vdGUsIGFuZCBzbyB0aGUKKysJICAgICMgcmVwb3J0ZWQgZmlsZW5h bWUgd2lsbCBpbmNsdWRlIHRoZSAndGFyZ2V0OicgcHJlZml4LgorKwkgICAgIworKwkgICAgIyBJ biBhbGwgb3RoZXIgY2FzZXMgd2Ugd2lsbCBzdGlsbCBiZSB1c2luZyB0aGUgZGVmYXVsdCwKKysJ ICAgICMgaW5pdGlhbCB0YXJnZXQsIGluIHdoaWNoIGNhc2UgR0RCIGNvbnNpZGVycyB0aGUKKysJ ICAgICMgJ3RhcmdldDonIHByZWZpeCB0byBpbmRpY2F0ZSB0aGUgbG9jYWwgZmlsZXN5c3RlbS4K KysJICAgIHNldCBsb29rdXBfZmlsZW5hbWUgJHN5c3Jvb3RfcHJlZml4JGRlYnVnX3N5bWxpbmsK KysJfSBlbHNlIHsKKysJICAgIHNldCBsb29rdXBfZmlsZW5hbWUgJGRlYnVnX2ZpbGVuYW1lCisr CX0KKysJc2V0IHJlIFtzdHJpbmdfdG9fcmVnZXhwICJSZWFkaW5nIHN5bWJvbHMgZnJvbSAkbG9v a3VwX2ZpbGVuYW1lLi4uIl0KKysJZ2RiX2Fzc2VydCB7W3JlZ2V4cCAkcmUgJDo6Z2RiX2ZpbGVf Y21kX21zZ119IFwKKysJICAgICJkZWJ1ZyBzeW1ib2xzIHJlYWQgZnJvbSBjb3JyZWN0IGZpbGUi CisrICAgIH0KKyt9CisrCisrIyBDcmVhdGUgYSBjb3B5IG9mIEJJTkZJTEUsIHNwbGl0IG91dCB0 aGUgZGVidWcgaW5mb3JtYXRpb24sIGFuZCB0aGVuCisrIyBzZXR1cCBhIHN5c3Jvb3QuICBIaWRl IChieSBtb3ZpbmcpIHRoZSBhY3R1YWwgZGVidWcgaW5mb3JtYXRpb24gZmlsZQorKyMgYW5kIGNy ZWF0ZSBhIHN5bWxpbmsgdG8gdGhlIGhpZGRlbiBkZWJ1ZyBpbmZvcm1hdGlvbiBmcm9tIHdpdGhp biB0aGUKKysjIHN5c3Jvb3QuCisrIworKyMgQ29weSB0aGUgZXhlY3V0YWJsZSBpbnRvIHRoZSBz eXNyb290IGFuZCB0aGVuIHN0YXJ0IEdEQiwgc2V0IHRoZQorKyMgc3lzcm9vdCwgYW5kIGxvYWQg dGhlIGV4ZWN1dGFibGUuICBDaGVjayB0aGF0IEdEQiBmaW5kcyB0aGUgZGVidWcKKysjIGluZm9y bWF0aW9uLCB3aGljaCBtdXN0IGhhdmUgaGFwcGVuZWQgYnkgbG9va2luIGluIHRoZSBzeXNyb290 LgorK3Byb2Nfd2l0aF9wcmVmaXggbG9va3VwX3ZpYV9kZWJ1Z2xpbmsge30geworKyAgICBzZXQg ZmlsZW5hbWUgJHs6OmJpbmZpbGV9XzIKKysgICAgaWYgeyBbYnVpbGRfZXhlY3V0YWJsZSAiYnVp bGQgZXhlYyIgJHtmaWxlbmFtZX0gJDo6c3JjZmlsZSBcCisrCSAgICAgIHthZGRpdGlvbmFsX2Zs YWdzPS1zdGF0aWMgZGVidWcgbm8tYnVpbGQtaWR9XSB9IHsKKysJcmV0dXJuCisrICAgIH0KKysK KysgICAgIyBTcGxpdCBkZWJ1ZyBpbmZvcm1hdGlvbiBpbnRvIGEgLmRlYnVnIGZpbGUsIHJlbW92 ZSBkZWJ1ZworKyAgICAjIGluZm9ybWF0aW9uIGZyb20gRklMRU5BTUUuCisrICAgIGlmIHtbZ2Ri X2dudV9zdHJpcF9kZWJ1ZyAkZmlsZW5hbWVdICE9IDB9IHsKKysJdW5zdXBwb3J0ZWQgImNhbm5v dCBzcGxpdCBkZWJ1ZyBpbmZvcm1hdGlvbiBmcm9tIGV4ZWN1dGFibGUiCisrCXJldHVybgorKyAg ICB9CisrCisrICAgICMgV2UncmUgZ29pbmcgdG8gc2V0dXAgdGhlIHN5c3Jvb3QgbGlrZSB0aGlz OgorKyAgICAjCisrICAgICMgc3lzcm9vdDIvCisrICAgICMgICAgYmluLworKyAgICAjICAgICAg JEZJTEVOQU1FCisrICAgICMgICAgZGVidWcvCisrICAgICMgICAgICBiaW4vCisrICAgICMgICAg ICAgICRGSUxFTkFNRS5kZWJ1ZworKyAgICAjCisrICAgICMgV2hlbiBsb29raW5nIHVwIGRlYnVn IGluZm9ybWF0aW9uIHZpYSB0aGUgZGVidWdsaW5rLCBHREIgd2lsbAorKyAgICAjIG9ubHkgc2Vh cmNoIGluIHRoZSBzeXNyb290IGlmIHRoZSBvcmlnaW5hbCBvYmpmaWxlIHdhcyBpbiB0aGUKKysg ICAgIyBzeXNyb290LiAgQW5kIEdEQiB3aWxsIHJlc29sdmUgc3ltbGlua3MsIHNvIGlmIHRoZSBv YmpmaWxlIGlzCisrICAgICMgc3ltbGlua2VkIHRvIG91dHNpZGUgdGhlIHN5c3Jvb3QsIEdEQiB3 aWxsIG5vdCBzZWFyY2ggaW4gdGhlCisrICAgICMgc3lzcm9vdCBmb3IgdGhlIGRlYnVnIGluZm9y bWF0aW9uLgorKyAgICAjCisrICAgICMgU28gd2UgaGF2ZSB0byBjb3B5IHRoZSBleGVjdXRhYmxl IGludG8gdGhlIHN5c3Jvb3QuCisrICAgICMKKysgICAgIyBXZSBhcmUgT0sgdG8gc3ltbGluayB0 aGUgZGVidWcgaW5mb3JtYXRpb24gdG8gYSBmaWxlIG91dHNpZGUgdGhlCisrICAgICMgc3lzcm9v dCB0aG91Z2guCisrCisrICAgIHNldCBzeXNyb290IFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAic3lz cm9vdDIiXQorKworKyAgICBmb3JlYWNoIHBhdGggeyBiaW4gZGVidWcvYmluIH0geworKwlyZW1v dGVfZXhlYyBidWlsZCAibWtkaXIgLXAgJHN5c3Jvb3QvJHBhdGgiCisrICAgIH0KKysKKysgICAg IyBDb3B5IHRoZSBleGVjdXRhYmxlIGludG8gdGhlIHN5c3Jvb3QuCisrICAgIHNldCBmaWxlX2Jh c2VuYW1lIFtmaWxlIHRhaWwgJGZpbGVuYW1lXQorKyAgICBzZXQgZXhlY19pbl9zeXNyb290ICR7 c3lzcm9vdH0vYmluLyR7ZmlsZV9iYXNlbmFtZX0KKysgICAgcmVtb3RlX2V4ZWMgYnVpbGQgImNw ICRmaWxlbmFtZSAkZXhlY19pbl9zeXNyb290IgorKworKyAgICAjIFJlbmFtZSB0aGUgZGVidWcg ZmlsZSBvdXRzaWRlIG9mIHRoZSBzeXNyb290LCB0aGlzIHNob3VsZCBzdG9wCisrICAgICMgR0RC IGZpbmRpbmcgdGhpcyBmaWxlICJieSBhY2NpZGVudCIuCisrICAgIHNldCBkZWJ1Z19maWxlbmFt ZSAke2ZpbGVuYW1lfV9oaWRkZW5fZGVidWcKKysgICAgcmVtb3RlX2V4ZWMgYnVpbGQgIm12ICRm aWxlbmFtZS5kZWJ1ZyAkZGVidWdfZmlsZW5hbWUiCisrCisrICAgICMgU3ltbGluayB0aGUgZGVi dWcgaW5mb3JtYXRpb24gaW50byB0aGUgc3lzcm9vdC4KKysgICAgc2V0IGRlYnVnX3N5bWxpbmsg XAorKwkke3N5c3Jvb3R9L2RlYnVnL2Jpbi8ke2ZpbGVfYmFzZW5hbWV9LmRlYnVnCisrICAgIHJl bW90ZV9leGVjIGJ1aWxkICJsbiAtc2YgJGRlYnVnX2ZpbGVuYW1lICRkZWJ1Z19zeW1saW5rIgor KworKyAgICBmb3JlYWNoX3dpdGhfcHJlZml4IHN5c3Jvb3RfcHJlZml4IHsgIiIgInRhcmdldDoi IH0geworKwkjIFJlc3RhcnQgR0RCIGFuZCBzZXR1cCB0aGUgc3lzcm9vdCBhbmQgZGVidWcgZGly ZWN0b3J5LgorKwljbGVhbl9yZXN0YXJ0CisrCWdkYl90ZXN0X25vX291dHB1dCAic2V0IHN5c3Jv b3QgJHtzeXNyb290X3ByZWZpeH0kc3lzcm9vdCIgInNldCBzeXNyb290IgorKwlnZGJfdGVzdF9u b19vdXRwdXQgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSAvZGVidWciCisrCisrCSMgTG9hZCB0 aGUgZXhlY3V0YWJsZSwgd2UgZXhwZWN0IEdEQiB0byBmaW5kIHRoZSBkZWJ1ZyBpbmZvcm1hdGlv bgorKwkjIGluIHRoZSBzeXNyb290LgorKwlnZGJfZmlsZV9jbWQgJHtzeXNyb290X3ByZWZpeH0k ZXhlY19pbl9zeXNyb290CisrCisrCWdkYl9hc3NlcnQgeyAkOjpnZGJfZmlsZV9jbWRfZGVidWdf aW5mbyBlcSAiZGVidWciIH0gXAorKwkgICAgImVuc3VyZSBkZWJ1ZyBpbmZvcm1hdGlvbiB3YXMg Zm91bmQiCisrCisrCXNldCByZSBbc3RyaW5nX3RvX3JlZ2V4cCAiUmVhZGluZyBzeW1ib2xzIGZy b20gJHtzeXNyb290X3ByZWZpeH0kZGVidWdfc3ltbGluay4uLiJdCisrCWdkYl9hc3NlcnQge1ty ZWdleHAgJHJlICQ6OmdkYl9maWxlX2NtZF9tc2ddfSBcCisrCSAgICAiZGVidWcgc3ltYm9scyBy ZWFkIGZyb20gY29ycmVjdCBmaWxlIgorKyAgICB9CisrfQorKworK2xvb2t1cF92aWFfYnVpbGRf aWQKKytsb29rdXBfdmlhX2RlYnVnbGluaworZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2Ri LmRlYnVnaW5mb2QvYnVpbGQtaWQtbm8tZGVidWctd2FybmluZy5leHAgYi9nZGIvdGVzdHN1aXRl L2dkYi5kZWJ1Z2luZm9kL2J1aWxkLWlkLW5vLWRlYnVnLXdhcm5pbmcuZXhwCistLS0gYS9nZGIv dGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL2J1aWxkLWlkLW5vLWRlYnVnLXdhcm5pbmcuZXhwCisr KysgYi9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL2J1aWxkLWlkLW5vLWRlYnVnLXdhcm5p bmcuZXhwCitAQCAtMzAsMTQgKzMwLDExIEBAIGlmIHtbYnVpbGRfZXhlY3V0YWJsZSAiYnVpbGQg ZXhlY3V0YWJsZSIgJHt0ZXN0ZmlsZX0gJHtzcmNmaWxlfSBcCisgICAgIHJldHVybiAtMQorIH0K KyAKKy0jIFNwbGl0IEJJTkZJTEUgaW50byBCSU5GSUxFLnN0cmlwcGVkIGFuZCBCSU5GSUxFLmRl YnVnLCB0aGUgZmlyc3QgaXMKKy0jIHRoZSBleGVjdXRhYmxlIHdpdGggdGhlIGRlYnVnIGluZm9y bWF0aW9uIHJlbW92ZWQsIGFuZCB0aGUgc2Vjb25kIGlzCistIyB0aGUgZGVidWcgaW5mb3JtYXRp b24uCisrIyBTcGxpdCBkZWJ1ZyBpbmZvcm1hdGlvbiBmcm9tIEJJTkZJTEUgaW50byBCSU5GSUxF LmRlYnVnLgorICMKKy0jIEhvd2V2ZXIsIGJ5IHBhc3NpbmcgdGhlICJuby1kZWJ1Z2xpbmsiIGZs YWcgd2UgcHJldmVudCB0aGlzIHByb2MKKy0jIGZyb20gYWRkaW5nIGEgLmdudV9kZWJ1Z2xpbmsg c2VjdGlvbiB0byB0aGUgZXhlY3V0YWJsZS4gIEFueSBsb29rdXAKKy0jIG9mIHRoZSBkZWJ1ZyBp bmZvcm1hdGlvbiBieSBHREIgd2lsbCBuZWVkIHRvIGJlIGRvbmUgYmFzZWQgb24gdGhlCistIyBi dWlsZC1pZC4KKysjIEJ5IHBhc3NpbmcgdGhlICJuby1kZWJ1Z2xpbmsiIGZsYWcgd2UgcHJldmVu dCB0aGlzIHByb2MgZnJvbSBhZGRpbmcKKysjIGEgLmdudV9kZWJ1Z2xpbmsgc2VjdGlvbiB0byBC SU5GSUxFLiAgQW55IGxvb2t1cCBvZiB0aGUgZGVidWcKKysjIGluZm9ybWF0aW9uIGJ5IEdEQiB3 aWxsIG5lZWQgdG8gYmUgZG9uZSBiYXNlZCBvbiB0aGUgYnVpbGQtaWQuCisgaWYge1tnZGJfZ251 X3N0cmlwX2RlYnVnICRiaW5maWxlIG5vLWRlYnVnbGlua119IHsKKyAgICAgdW5zdXBwb3J0ZWQg ImNhbm5vdCBwcm9kdWNlIHNlcGFyYXRlIGRlYnVnIGluZm8gZmlsZXMiCisgICAgIHJldHVybiAt MQorQEAgLTU5LDEyICs1Niw2IEBAIHNldCBkZWJ1Z2luZm9kX2RlYnVnZGlyIFtzdGFuZGFyZF9v dXRwdXRfZmlsZSAiZGVidWciXQorIHJlbW90ZV9leGVjIGJ1aWxkICJta2RpciAkZGVidWdpbmZv ZF9kZWJ1Z2RpciIKKyByZW1vdGVfZXhlYyBidWlsZCAibXYgJGRlYnVnZmlsZSAkZGVidWdpbmZv ZF9kZWJ1Z2RpciIKKyAKKy0jIFRoaXMgaXMgQklORklMRSB3aXRoIHRoZSBkZWJ1ZyBpbmZvcm1h dGlvbiByZW1vdmVkLiAgV2UgYXJlIGdvaW5nIHRvCistIyBwbGFjZSB0aGlzIGluIHRoZSBCVUlM RF9JRF9ERUJVR19GSUxFIGxvY2F0aW9uLCB0aGlzIHdvdWxkIHVzdWFsbHkKKy0jIHJlcHJlc2Vu dCBhIG1pc3Rha2UgYnkgdGhlIHVzZXIsIGFuZCB3aWxsIHRyaWdnZXIgYSB3YXJuaW5nIGZyb20K Ky0jIEdEQiwgdGhpcyBpcyB0aGUgd2FybmluZyB3ZSBhcmUgY2hlY2tpbmcgZm9yLgorLXNldCBz dHJpcHBlZF9iaW5maWxlIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAiJHtiaW5maWxlfS5zdHJpcHBl ZCJdCistCisgIyBDcmVhdGUgdGhlIC5idWlsZC1pZC9QUkVGSVggZGlyZWN0b3J5IG5hbWUgZnJv bQorICMgLmJ1aWxkLWlkL1BSRUZJWC9TVUZGSVguZGVidWcgZmlsZW5hbWUuCisgc2V0IGRlYnVn ZGlyIFtmaWxlIGRpcm5hbWUgJHtidWlsZF9pZF9kZWJ1Z19maWxlfV0KK0BAIC03Niw3ICs2Nyw3 IEBAIHJlbW90ZV9leGVjIGJ1aWxkICJta2RpciAtcCAkZGVidWdkaXIiCisgIyBpbmZvcm1hdGlv biwgd2hpY2ggd2lsbCBwb2ludCBiYWNrIGF0IHRoaXMgZmlsZSwgd2hpY2ggYWxzbyBkb2Vzbid0 CisgIyBoYXZlIGRlYnVnIGluZm9ybWF0aW9uLCB3aGljaCBjb3VsZCBjYXVzZSBhIGxvb3AuICBC dXQgR0RCIHdpbGwgc3BvdAorICMgdGhpcyBhbmQgZ2l2ZSBhIHdhcm5pbmcuCistcmVtb3RlX2V4 ZWMgYnVpbGQgIm12ICR7c3RyaXBwZWRfYmluZmlsZX0gJHtidWlsZF9pZF9kZWJ1Z19maWxlfSIK KytyZW1vdGVfZXhlYyBidWlsZCAibXYgJHtiaW5maWxlfSAke2J1aWxkX2lkX2RlYnVnX2ZpbGV9 IgorIAorICMgTm93IHN0YXJ0IEdEQi4KKyBjbGVhbl9yZXN0YXJ0CitkaWZmIC0tZ2l0IGEvZ2Ri L3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9jb3JlZmlsZS1tYXBwZWQtZmlsZS0xLmMgYi9nZGIv dGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1hcHBlZC1maWxlLTEuYworbmV3IGZp bGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmRl YnVnaW5mb2QvY29yZWZpbGUtbWFwcGVkLWZpbGUtMS5jCitAQCAtMCwwICsxLDI0IEBACisrLyog Q29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKwor KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworKy8qIFRoaXMgaXMgaW4gdGhl IHNoYXJlZCBsaWJyYXJ5LiAgKi8KKytleHRlcm4gaW50IGZvbyAodm9pZCk7CisrCisraW50Cisr bWFpbiAodm9pZCkKKyt7CisrICBpbnQgcmVzID0gZm9vICgpOworKyAgcmV0dXJuIHJlczsKKyt9 CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9jb3JlZmlsZS1tYXBw ZWQtZmlsZS0yLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1hcHBl ZC1maWxlLTIuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dk Yi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2QvY29yZWZpbGUtbWFwcGVkLWZpbGUtMi5jCitAQCAt MCwwICsxLDIyIEBACisrLyogQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKwor K3ZvbGF0aWxlIGludCAqbGlicmFyeV9wdHIgPSAoaW50ICopIFBPSU5URVJfVkFMVUU7CisrCisr aW50CisrZm9vICh2b2lkKQorK3sKKysgIHJldHVybiAqbGlicmFyeV9wdHI7CisrfQorZGlmZiAt LWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2QvY29yZWZpbGUtbWFwcGVkLWZpbGUt My5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9jb3JlZmlsZS1tYXBwZWQtZmlsZS0z LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1hcHBlZC1maWxlLTMuYworQEAgLTAsMCArMSw0 NSBAQAorKy8qIENvcHlyaWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor KworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysjaW5jbHVk ZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+ CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNs dWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8c3lzL21tYW4uaD4KKysKKyt2b2xhdGlsZSB2b2lk KiBsaWJyYXJ5X2Jhc2VfYWRkcmVzcyA9IDA7Cisrdm9sYXRpbGUgaW50ICpwdHIgPSAwOworKwor K2ludAorK21haW4gKCkKKyt7CisrICBzdHJ1Y3Qgc3RhdCBidWY7CisrICBpbnQgcmVzOworKwor KyAgaW50IGZkID0gb3BlbiAoU0hMSUJfRklMRU5BTUUsIE9fUkRPTkxZKTsKKysgIGFzc2VydCAo ZmQgIT0gLTEpOworKworKyAgcmVzID0gZnN0YXQgKGZkLCAmYnVmKTsKKysgIGFzc2VydCAocmVz ID09IDApOworKworKyAgbGlicmFyeV9iYXNlX2FkZHJlc3MKKysgICAgPSBtbWFwIChOVUxMLCBi dWYuc3Rfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworKworKyAgcmVzID0g KnB0cjsJLyogVW5kZWZpbmVkIGJlaGF2aW91ciBoZXJlLiAgKi8KKysKKysgIHJldHVybiAwOwor K30KK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1h cHBlZC1maWxlLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2QvY29yZWZpbGUtbWFw cGVkLWZpbGUuZXhwCituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9jb3JlZmlsZS1tYXBwZWQtZmlsZS5leHAKK0BA IC0wLDAgKzEsMzgwIEBACisrIyBDb3B5cmlnaHQgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisrIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor KyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisrIworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysjIFRo aXMgdGVzdCBjaGVja3MgR0RCJ3MgYWJpbGl0eSB0byB1c2UgYnVpbGQtaWRzIHdoZW4gc2V0dGlu ZyB1cCBmaWxlIGJhY2tlZAorKyMgbWFwcGluZ3MgYXMgcGFydCBvZiByZWFkaW5nIGEgY29yZS1m aWxlLgorKyMKKysjIEEgY29yZS1maWxlIGNvbnRhaW5zIGEgbGlzdCBvZiB0aGUgZmlsZXMgdGhh dCB3ZXJlIG1hcHBlZCBpbnRvIHRoZSBwcm9jZXNzCisrIyBhdCB0aGUgdGltZSBvZiB0aGUgY29y ZS1maWxlIGNyZWF0aW9uLiAgSWYgdGhlIGZpbGUgd2FzIG1hcHBlZCByZWFkLW9ubHkKKysjIHRo ZW4gdGhlIGZpbGUgY29udGVudHMgd2lsbCBub3QgYmUgcHJlc2VudCBpbiB0aGUgY29yZS1maWxl LCBidXQgaW5zdGVhZCBHREIKKysjIGlzIGV4cGVjdGVkIHRvIG9wZW4gdGhlIG1hcHBlZCBmaWxl IGFuZCByZWFkIHRoZSBjb250ZW50cyBmcm9tIHRoZXJlIGlmCisrIyBuZWVkZWQuICBBbmQgdGhp cyBpcyB3aGF0IEdEQiBkb2VzLgorKyMKKysjIEdEQiAodmlhIHRoZSBCRkQgbGlicmFyeSkgd2ls bCBhbHNvIHNwb3QgaWYgYSBtYXBwZWQgbG9va3MgbGlrZSBhIHZhbGlkIEVMRgorKyMgYW5kIGNv bnRhaW5zIGEgYnVpbGQtaWQsIHRoaXMgYnVpbGQtaWQgaXMgcGFzc2VkIGJhY2sgdG8gR0RCIHNv IHRoYXQgR0RCIGNhbgorKyMgdmFsaWRhdGUgdGhlIG9uLWRpc2sgZmlsZSBpdCBmaW5kcyBtYXRj aGVzIHRoZSBmaWxlIHRoYXQgd2FzIG1hcHBlZCB3aGVuIHRoZQorKyMgY29yZS1maWxlIHdhcyBj cmVhdGVkLgorKyMKKysjIEluIGFkZGl0aW9uLCBpZiB0aGUgb24tZGlzayBmaWxlIGlzIGZvdW5k IHRvIGhhdmUgYSBub24tbWF0Y2hpbmcgYnVpbGQtaWQKKysjIHRoZW4gR0RCIGNhbiB1c2UgZGVi dWdpbmZvZCB0byAodHJ5KSBhbmQgZG93bmxvYWQgYSBzdWl0YWJsZSBmaWxlLgorKyMKKysjIFRo aXMgdGVzdCBpcyBhYm91dCBjaGVja2luZyB0aGF0IHRoaXMgZmlsZSBiYWNrZWQgbWFwcGluZyBt ZWNoYW5pc20gd29ya3MKKysjIGNvcnJlY3RseTsgdGhhdCBHREIgd2lsbCBzcG90IHdoZW4gdGhl IGJ1aWxkLWlkcyBmYWlsIHRvIG1hdGNoIGFuZCB3aWxsCisrIyByZWZ1c2UgdG8gbG9hZCBhbiBp bmNvcnJlY3QgZmlsZS4gIEFkZGl0aW9uYWxseSB3ZSBjaGVjayB0aGF0IHRoZSBjb3JyZWN0Cisr IyBmaWxlIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gZGVidWdpbmZvZC4KKysjCisrIyBUaGUgdGVz dCBpcyByYXRoZXIgY29udHJpdmVkIHRob3VnaC4gIEluc3RlYWQgb2YgcmVseWluZyBvbiBoYXZp bmcgYSBzaGFyZWQKKysjIGxpYnJhcnkgbWFwcGVkIGF0IHRoZSB0aW1lIG9mIGNyYXNoIHdlIG1t YXAgYSBzaGFyZWQgbGlicmFyeSBpbnRvIHRoZQorKyMgcHJvY2VzcyBhbmQgdGhlbiBjaGVjayB0 aGlzIG1hcHBpbmcgd2l0aGluIHRoZSB0ZXN0LgorKyMKKysjIFRoZSBwcm9ibGVtIHdpdGggdXNp bmcgYSBub3JtYWwgc2hhcmVkIGxpYnJhcnkgbG9hZCBmb3IgdGhpcyB0ZXN0IGlzIHRoYXQKKysj IHRoZSBzaGFyZWQgbGlicmFyeSBsaXN0IGlzIHByb2Nlc3NlZCBhcyBwYXJ0IG9mIGEgc2VwYXJh dGUgc3RlcCB3aGVuIG9wZW5pbmcKKysjIHRoZSBjb3JlIGZpbGUuICBSaWdodCBub3cgdGhpcyBz ZXBhcmF0ZSBzdGVwIGRvZXNuJ3QgY2hlY2sgdGhlIGJ1aWxkLWlkcworKyMgY29ycmVjdGx5LCBz byBHREIgd2lsbCBwb3RlbnRpYWxseSBvcGVuIHRoZSB3cm9uZyBzaGFyZWQgbGlicmFyeSBmaWxl LiAgVGhlCisrIyBzZWN0aW9ucyBvZiB0aGlzIGluY29ycmVjdCBzaGFyZWQgbGlicmFyeSBhcmUg dGhlbiBhZGRlZCB0byBHREIncyBsaXN0IG9mCisrIyB0YXJnZXQgc2VjdGlvbnMsIGFuZCBhcmUg dXNlZCB0byBzYXRpc2Z5IG1lbW9yeSByZWFkcywgd2hpY2ggY2FuIGdpdmUgdGhlCisrIyB3cm9u ZyByZXN1bHRzLgorKyMKKysjIFRoaXMgb2J2aW91c2x5IG5lZWRzIGZpeGluZywgYnV0IGlzIGEg c2VwYXJhdGUgcHJvYmxlbSBmcm9tIHRoZSBvbmUgYmVpbmcKKysjIHRlc3RlZCBoZXJlLCBzbyB0 aGlzIHRlc3QgZGVsaWJlcmF0ZWx5IGNoZWNrcyB0aGUgbWFwcGluZyB1c2luZyBhIGZpbGUgdGhh dAorKyMgaXMgbW1hcGVkIHJhdGhlciB0aGFuIGxvYWRlZCBhcyBhIHNoYXJlZCBsaWJyYXJ5LCBh cyBzdWNoIHRoZSBmaWxlIGlzIGluIHRoZQorKyMgY29yZS1maWxlcyBsaXN0IG9mIG1hcHBlZCBm aWxlcywgYnV0IGlzIG5vdCBpbiB0aGUgc2hhcmVkIGxpYnJhcnkgbGlzdC4KKysjCisrIyBEZXNw aXRlIHRoaXMgdGVzdCBsaXZpbmcgaW4gdGhlIGdkYi5kZWJ1Z2luZm9kLyBkaXJlY3RvcnksIG9u bHkgdGhlIGxhc3QKKysjIHBhcnQgb2YgdGhpcyB0ZXN0IGFjdHVhbGx5IHVzZXMgZGVidWdpbmZv ZCwgZXZlcnl0aGluZyB1cCB0byB0aGF0IHBvaW50IGlzCisrIyBwcmV0dHkgZ2VuZXJpYy4KKysK KytyZXF1aXJlIHshaXNfcmVtb3RlIGhvc3R9CisrcmVxdWlyZSB7IWlzX3JlbW90ZSB0YXJnZXR9 CisrCisrbG9hZF9saWIgZGVidWdpbmZvZC1zdXBwb3J0LmV4cAorKworK3JlcXVpcmUgYWxsb3df c2hsaWJfdGVzdHMKKysKKytzdGFuZGFyZF90ZXN0ZmlsZSAtMS5jIC0yLmMgLTMuYworKworKyMg Q29tcGlsZSBhbiBleGVjdXRhYmxlIHRoYXQgbG9hZHMgdGhlIHNoYXJlZCBsaWJyYXJ5IGFzIGFu IGFjdHVhbAorKyMgc2hhcmVkIGxpYnJhcnksIHRoZW4gdXNlIEdEQiB0byBmaWd1cmUgb3V0IHRo ZSBvZmZzZXQgb2YgdGhlCisrIyB2YXJpYWJsZSAnbGlicmFyeV9wdHInIHdpdGhpbiB0aGUgbGli cmFyeS4KKytzZXQgbGlicmFyeV9maWxlbmFtZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImxpYmZv by5zbyJdCisrc2V0IGJpbmZpbGUyIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAibGlicmFyeV9sb2Fk ZXIiXQorKworK2lmIHtbcHJlcGFyZV9mb3JfdGVzdGluZ19mdWxsICJidWlsZCBleGVjIHdoaWNo IGxvYWRzIHRoZSBzaGFyZWQgbGlicmFyeSIgXAorKwkgW2xpc3QgJGxpYnJhcnlfZmlsZW5hbWUg XAorKwkgICAgICB7IGRlYnVnIHNobGliIGJ1aWxkLWlkIFwKKysJCSAgICBhZGRpdGlvbmFsX2Zs YWdzPS1EUE9JTlRFUl9WQUxVRT0weDEyMzQ1Njc4IH0gXAorKwkgICAgICAkc3JjZmlsZTIge31d IFwKKysJIFtsaXN0ICRiaW5maWxlMiBbbGlzdCBkZWJ1ZyBzaGxpYj0kbGlicmFyeV9maWxlbmFt ZSBdIFwKKysJICAgICAgJHNyY2ZpbGUgeyBkZWJ1ZyB9XV0gIT0gMH0geworKyAgICByZXR1cm4K Kyt9CisrCisraWYgeyFbcnVudG9fbWFpbl19IHsKKysgICAgcmV0dXJuCisrfQorKworK2lmIHsg W2lzX2FkZHJlc3NfemVyb19yZWFkYWJsZV0gfSB7CisrICAgIHJldHVybgorK30KKysKKytzZXQg cHRyX2FkZHJlc3MgW2dldF9oZXhhZGVjaW1hbF92YWx1ZW9mICImbGlicmFyeV9wdHIiICJ1bmtu b3duIl0KKysKKytzZXQgcHRyX29mZnNldCAidW5rbm93biIKKytnZGJfdGVzdF9tdWx0aXBsZSAi aW5mbyBwcm9jIG1hcHBpbmdzIiAiIiB7CisrICAgIC1yZSAiXlxccysoJGhleClcXHMrKCRoZXgp XFxzKyRoZXhcXHMrKCRoZXgpXFteXHJcblxdKyRsaWJyYXJ5X2ZpbGVuYW1lXHJcbiIgeworKwlz ZXQgbG93X2FkZHIgJGV4cGVjdF9vdXQoMSxzdHJpbmcpCisrCXNldCBoaWdoX2FkZHIgJGV4cGVj dF9vdXQoMixzdHJpbmcpCisrCXNldCBmaWxlX29mZnNldCAkZXhwZWN0X291dCgzLHN0cmluZykK KysKKysJaWYge1tleHByICRwdHJfYWRkcmVzcyA+PSAkbG93X2FkZHJdICYmIFtleHByICRwdHJf YWRkcmVzcyA8ICRoaWdoX2FkZHJdfSB7CisrCSAgICBzZXQgbWFwcGluZ19vZmZzZXQgW2V4cHIg JHB0cl9hZGRyZXNzIC0gJGxvd19hZGRyXQorKwkgICAgc2V0IHB0cl9vZmZzZXQgW2Zvcm1hdCAw eCV4IFtleHByICRmaWxlX29mZnNldCArICRtYXBwaW5nX29mZnNldF1dCisrCX0KKysKKysJZXhw X2NvbnRpbnVlCisrICAgIH0KKysKKysgICAgLXJlICJeJGdkYl9wcm9tcHQgJCIgeworKyAgICB9 CisrCisrICAgIC1yZSAiKF5cW15cclxuXF0qKVxyXG4iIHsKKysJc2V0IHRtcCAkZXhwZWN0X291 dCgxLHN0cmluZykKKysJZXhwX2NvbnRpbnVlCisrICAgIH0KKyt9CisrCisrZ2RiX2Fzc2VydCB7 ICRwdHJfb2Zmc2V0IG5lICJ1bmtub3duIiB9IFwKKysgICAgImZvdW5kIHBvaW50ZXIgb2Zmc2V0 IgorKworK3NldCBwdHJfc2l6ZSBbZ2V0X2ludGVnZXJfdmFsdWVvZiAic2l6ZW9mIChsaWJyYXJ5 X3B0cikiICJ1bmtub3duIl0KKytzZXQgcHRyX2Zvcm1hdF9jaGFyICIiCisraWYgeyAkcHRyX3Np emUgPT0gMiB9IHsKKysgICAgc2V0IHB0cl9mb3JtYXRfY2hhciAiYiIKKyt9IGVsc2VpZiB7ICRw dHJfc2l6ZSA9PSA0IH0geworKyAgICBzZXQgcHRyX2Zvcm1hdF9jaGFyICJ3IgorK30gZWxzZWlm IHsgJHB0cl9zaXplID09IDggfSB7CisrICAgIHNldCBwdHJfZm9ybWF0X2NoYXIgImciCisrfQor K2lmIHsgJHB0cl9mb3JtYXRfY2hhciBlcSAiIiB9IHsKKysgICAgdW50ZXN0ZWQgImNvdWxkIG5v dCBmaWd1cmUgb3V0IHNpemUgb2YgbGlicmFyeV9wdHIgdmFyaWFibGUiCisrICAgIHJldHVybgor K30KKysKKysjIEhlbHBlciBwcm9jIHRvIHJlYWQgYSB2YWx1ZSBmcm9tIGluZmVyaW9yIG1lbW9y eS4gIFJlYWRzIGF0IGFkZHJlc3MgaGVsZCBpbgorKyMgZ2xvYmFsIFBUUl9BRERSRVNTLCBhbmQg dXNlIFBUUl9GT1JNQVRfQ0hBUiBmb3IgdGhlIHNpemUgb2YgdGhlIHJlYWQuCisrcHJvYyByZWFk X3B0cl92YWx1ZSB7IH0geworKyAgICBzZXQgdmFsdWUgIiIKKysgICAgZ2RiX3Rlc3RfbXVsdGlw bGUgIngvMSR7OjpwdHJfZm9ybWF0X2NoYXJ9eCAkezo6cHRyX2FkZHJlc3N9IiAiIiB7CisrCS1y ZSAtd3JhcCAiXiR7OjpoZXh9KD86XFxzKzxcW14+XF0rPik/OlxccysoJDo6aGV4KSIgeworKwkg ICAgc2V0IHZhbHVlICRleHBlY3Rfb3V0KDEsc3RyaW5nKQorKwl9CisrCS1yZSAtd3JhcCAiXiR7 OjpoZXh9KD86XFxzKzxcW14+XF0rPik/OlxccytDYW5ub3QgYWNjZXNzIG1lbW9yeSBhdCBhZGRy ZXNzICR7OjpoZXh9IiB7CisrCSAgICBzZXQgdmFsdWUgInVuYXZhaWxhYmxlIgorKwl9CisrICAg IH0KKysgICAgcmV0dXJuICR2YWx1ZQorK30KKysKKytzZXQgcHRyX2V4cGVjdGVkX3ZhbHVlIFty ZWFkX3B0cl92YWx1ZV0KKytpZiB7ICRwdHJfZXhwZWN0ZWRfdmFsdWUgZXEgIiIgfSB7CisrICAg IHVudGVzdGVkICJjb3VsZCBub3QgZmluZCBleHBlY3RlZCB2YWx1ZSBmb3IgbGlicmFyeV9wdHIi CisrICAgIHJldHVybgorK30KKysKKysjIE5vdyBjb21waWxlIGEgc2Vjb25kIGV4ZWN1dGFibGUu ICBUaGlzIG9uZSBkb2Vzbid0IGxvYWQgdGhlIHNoYXJlZAorKyMgbGlicmFyeSBhcyBhbiBhY3R1 YWwgc2hhcmVkIGxpYnJhcnksIGJ1dCBpbnN0ZWFkIG1tYXBzIHRoZSBsaWJyYXJ5CisrIyBpbnRv IHRoZSBleGVjdXRhYmxlLgorKyMKKysjIExvYWQgdGhpcyBleGVjdXRhYmxlIHdpdGhpbiBHREIg YW5kIGNvbmZpcm0gdGhhdCB3ZSBjYW4gdXNlIHRoZQorKyMgb2Zmc2V0IHdlIGNhbGN1bGF0ZWQg cHJldmlvdXNseSB0byB2aWV3IHRoZSB2YWx1ZSBvZiAnbGlicmFyeV9wdHInLgorK3NldCBvcHRz IFtsaXN0IGRlYnVnIGFkZGl0aW9uYWxfZmxhZ3M9LURTSExJQl9GSUxFTkFNRT1cIiRsaWJyYXJ5 X2ZpbGVuYW1lXCJdCisraWYge1twcmVwYXJlX2Zvcl90ZXN0aW5nICJwcmVwYXJlIHNlY29uZCBl eGVjdXRhYmxlIiAkYmluZmlsZSBcCisrCSAkc3JjZmlsZTMgJG9wdHNdICE9IDB9IHsKKysgICAg cmV0dXJuCisrfQorKworK2lmIHshW3J1bnRvX21haW5dfSB7CisrICAgIHJldHVybgorK30KKysK KytnZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5lX251bWJlciAiVW5kZWZpbmVkIGJlaGF2aW91 ciBoZXJlIiAkc3JjZmlsZTNdCisrZ2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9pbnQgInJ1biB0byBi cmVha3BvaW50IgorKworK3NldCBsaWJyYXJ5X2Jhc2VfYWRkcmVzcyBcCisrICAgIFtnZXRfaGV4 YWRlY2ltYWxfdmFsdWVvZiAibGlicmFyeV9iYXNlX2FkZHJlc3MiICJ1bmtub3duIl0KKytzZXQg cHRyX2FkZHJlc3MgW2Zvcm1hdCAweCV4IFtleHByICRsaWJyYXJ5X2Jhc2VfYWRkcmVzcyArICRw dHJfb2Zmc2V0XV0KKysKKytzZXQgcHRyX3ZhbHVlIFtyZWFkX3B0cl92YWx1ZV0KKytnZGJfYXNz ZXJ0IHsgJHB0cl92YWx1ZSA9PSAkcHRyX2V4cGVjdGVkX3ZhbHVlIH0gXAorKyAgICAiY2hlY2sg dmFsdWUgb2YgcG9pbnRlciB2YXJpYWJsZSIKKysKKysjIE5vdyByZXJ1biB0aGUgc2Vjb25kIGV4 ZWN1dGFibGUgb3V0c2lkZSBvZiBHREIuICBUaGUgZXhlY3V0YWJsZSBzaG91bGQgY3Jhc2gKKysj IGFuZCBnZW5lcmF0ZSBhIGNvcmVmaWxlLgorK3NldCBjb3JlZmlsZSBbY29yZV9maW5kICRiaW5m aWxlXQorK2lmIHskY29yZWZpbGUgZXEgIiJ9IHsKKysgICAgdW50ZXN0ZWQgImNvdWxkIG5vdCBn ZW5lcmF0ZSBjb3JlIGZpbGUiCisrICAgIHJldHVybgorK30KKysKKysjIExvYWQgYSBjb3JlIGZp bGUgZnJvbSB0aGUgZ2xvYmFsIENPUkVGSUxFLiAgVXNlIFRFU1ROQU1FIGFzIHRoZSBuYW1lCisr IyBvZiB0aGUgdGVzdC4KKysjCisrIyBJZiBMSU5FX1JFIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5n IHRoZW4gdGhpcyBpcyBhIHJlZ2V4cCBmb3IgYSBsaW5lCisrIyB0aGF0IHdlIGV4cGVjdCB0byBz ZWUgaW4gdGhlIG91dHB1dCB3aGVuIGxvYWRpbmcgdGhlIGNvcmUgZmlsZSwgaWYKKysjIHRoZSBs aW5lIGlzIG5vdCBwcmVzZW50IHRoZW4gdGhpcyB0ZXN0IHdpbGwgZmFpbC4KKysjCisrIyBBbnkg bGluZXMgYmVnaW5uaW5nIHdpdGggJ3dhcm5pbmc6ICcgd2lsbCBjYXVzZSB0aGlzIHRlc3QgdG8g ZmFpbC4KKysjCisrIyBBIGNvdXBsZSBvZiBvdGhlciBzdGFuZGFyZCBsaW5lcyB0aGF0IGFyZSBw cm9kdWNlZCB3aGVuIGxvYWRpbmcgYQorKyMgY29yZSBmaWxlIGFyZSBhbHNvIGNoZWNrZWQgZm9y LCBqdXN0IHRvIG1ha2Ugc3VyZSB0aGUgY29yZSBmaWxlCisrIyBsb2FkaW5nIGhhcyBwcm9ncmVz c2VkIGFzIGV4cGVjdGVkLgorK3Byb2MgbG9hZF9jb3JlX2ZpbGUgeyB0ZXN0bmFtZSB7IGxpbmVf cmUgIiIgfSB9IHsKKysgICAgc2V0IGNvZGUge30KKysKKysgICAgaWYgeyAkbGluZV9yZSBuZSAi IiB9IHsKKysJYXBwZW5kIGNvZGUgeworKwkgICAgLXJlICJeJGxpbmVfcmVcclxuIiB7CisrCQlz ZXQgc2F3X2V4cGVjdGVkX2xpbmUgdHJ1ZQorKwkJZXhwX2NvbnRpbnVlCisrCSAgICB9CisrCX0K KysJc2V0IHNhd19leHBlY3RlZF9saW5lIGZhbHNlCisrICAgIH0gZWxzZSB7CisrCXNldCBzYXdf ZXhwZWN0ZWRfbGluZSB0cnVlCisrICAgIH0KKysKKysgICAgc2V0IHNhd191bmtub3duX3dhcm5p bmcgZmFsc2UKKysgICAgc2V0IHNhd19nZW5lcmF0ZWRfYnlfbGluZSBmYWxzZQorKyAgICBzZXQg c2F3X3Byb2dfdGVybWluYXRlZF9saW5lIGZhbHNlCisrCisrICAgIGFwcGVuZCBjb2RlIHsKKysJ LXJlICJed2FybmluZzogXFteXHJcblxdK1xyXG4iIHsKKysJICAgIHNldCBzYXdfdW5rbm93bl93 YXJuaW5nIHRydWUKKysJICAgIGV4cF9jb250aW51ZQorKwl9CisrCisrCS1yZSAiXkNvcmUgd2Fz IGdlbmVyYXRlZCBieSBcW15cclxuXF0rXHJcbiIgeworKwkgICAgc2V0IHNhd19nZW5lcmF0ZWRf YnlfbGluZSB0cnVlCisrCSAgICBleHBfY29udGludWUKKysJfQorKworKwktcmUgIl5Qcm9ncmFt IHRlcm1pbmF0ZWQgd2l0aCBzaWduYWwgU0lHU0VHViwgU2VnbWVudGF0aW9uIGZhdWx0XFwuXHJc biIgeworKwkgICAgc2V0IHNhd19wcm9nX3Rlcm1pbmF0ZWRfbGluZSB0cnVlCisrCSAgICBleHBf Y29udGludWUKKysJfQorKworKwktcmUgIl4kOjpnZGJfcHJvbXB0ICQiIHsKKysJICAgIGdkYl9h c3NlcnQgeyRzYXdfZ2VuZXJhdGVkX2J5X2xpbmUgXAorKwkJCSAgICAmJiAkc2F3X3Byb2dfdGVy bWluYXRlZF9saW5lIFwKKysJCQkgICAgJiYgJHNhd19leHBlY3RlZF9saW5lIFwKKysJCQkgICAg JiYgISRzYXdfdW5rbm93bl93YXJuaW5nfSBcCisrCQkkZ2RiX3Rlc3RfbmFtZQorKwl9CisrCisr CS1yZSAiXlxbXlxyXG5cXSpcclxuIiB7CisrCSAgICBleHBfY29udGludWUKKysJfQorKyAgICB9 CisrCisrICAgIHNldCByZXMgW2NhdGNoIHsgcmV0dXJuIFtnZGJfdGVzdF9tdWx0aXBsZSAiY29y ZS1maWxlICQ6OmNvcmVmaWxlIiBcCisrCQkJCSAiJHRlc3RuYW1lIiAkY29kZV0gfSBzdHJpbmdd CisrCisrICAgIGlmIHskcmVzID09IDF9IHsKKysJZ2xvYmFsIGVycm9ySW5mbyBlcnJvckNvZGUK KysJcmV0dXJuIC1jb2RlIGVycm9yIC1lcnJvcmluZm8gJGVycm9ySW5mbyAtZXJyb3Jjb2RlICRl cnJvckNvZGUgJHN0cmluZworKyAgICB9IGVsc2VpZiB7JHJlcyA9PSAyfSB7CisrCXJldHVybiAk c3RyaW5nCisrICAgIH0gZWxzZSB7CisrCSMgV2UgZXhwZWN0IFJFUyB0byBiZSAyIChUQ0xfUkVU VVJOKSBvciAxIChUQ0xfRVJST1IpLiAgSWYgd2UgZ2V0CisrCSMgaGVyZSB0aGVuIHNvbWVob3cg dGhlICdjYXRjaCcgYWJvdmUgZmluaXNoZWQgd2l0aG91dCBoaXR0aW5nCisrCSMgZWl0aGVyIG9m IHRob3NlIGNhc2VzLCB3aGljaCBpcyAuLi4uIHdlaXJkLgorKwlwZXJyb3IgInVuZXhlcGN0ZWQg cmV0dXJuIHZhbHVlLCBjb2RlID0gJHJlcywgdmFsdWUgPSAkc3RyaW5nIgorKwlyZXR1cm4gLTEK KysgICAgfQorK30KKysKKysjIEFuZCBub3cgcmVzdGFydCBHREIsIGxvYWQgdGhlIGNvcmUtZmls ZSBhbmQgY2hlY2sgdGhhdCB0aGUgbGlicmFyeSBzaG93cyBhcworKyMgYmVpbmcgbWFwcGVkIGlu LCBhbmQgdGhhdCB3ZSBjYW4gc3RpbGwgcmVhZCB0aGUgbGlicmFyeV9wdHIgdmFsdWUgZnJvbQor KyMgbWVtb3J5LgorK2NsZWFuX3Jlc3RhcnQgJGJpbmZpbGUKKysKKytsb2FkX2NvcmVfZmlsZSAi bG9hZCBjb3JlIGZpbGUiCisrCisrc2V0IGxpYnJhcnlfYmFzZV9hZGRyZXNzIFtnZXRfaGV4YWRl Y2ltYWxfdmFsdWVvZiAibGlicmFyeV9iYXNlX2FkZHJlc3MiIFwKKysJCQkgICAgICAidW5rbm93 biIgImdldCBsaWJyYXJ5X2Jhc2VfYWRkcmVzcyBpbiBjb3JlLWZpbGUiXQorK3NldCBwdHJfYWRk cmVzcyBbZm9ybWF0IDB4JXggW2V4cHIgJGxpYnJhcnlfYmFzZV9hZGRyZXNzICsgJHB0cl9vZmZz ZXRdXQorKworK3NldCBwdHJfdmFsdWUgW3JlYWRfcHRyX3ZhbHVlXQorK2dkYl9hc3NlcnQgeyAk cHRyX3ZhbHVlID09ICRwdHJfZXhwZWN0ZWRfdmFsdWUgfSBcCisrICAgICJjaGVjayB2YWx1ZSBv ZiBwb2ludGVyIHZhcmlhYmxlIGZyb20gY29yZS1maWxlIgorKworKyMgTm93IG1vdmUgdGhlIHNo YXJlZCBsaWJyYXJ5IGZpbGUgYXdheSBhbmQgcmVzdGFydCBHREIuICBUaGlzIHRpbWUgd2hlbiB3 ZQorKyMgbG9hZCB0aGUgY29yZS1maWxlIHdlIHNob3VsZCBzZWUgYSB3YXJuaW5nIHRoYXQgR0RC IGhhcyBmYWlsZWQgdG8gbWFwIGluIHRoZQorKyMgbGlicmFyeSBmaWxlLiAgQW4gYXR0ZW1wdCB0 byByZWFkIHRoZSB2YXJpYWJsZSBmcm9tIHRoZSBsaWJyYXJ5IGZpbGUgc2hvdWxkCisrIyBmYWls IC8gZ2l2ZSBhIHdhcm5pbmcuCisrc2V0IGxpYnJhcnlfYmFja3VwX2ZpbGVuYW1lIFtzdGFuZGFy ZF9vdXRwdXRfZmlsZSAibGliZm9vLnNvLmJhY2t1cCJdCisrcmVtb3RlX2V4ZWMgYnVpbGQgIm12 IFwiJGxpYnJhcnlfZmlsZW5hbWVcIiBcIiRsaWJyYXJ5X2JhY2t1cF9maWxlbmFtZVwiIgorKwor K2NsZWFuX3Jlc3RhcnQgJGJpbmZpbGUKKysKKytsb2FkX2NvcmVfZmlsZSAibG9hZCBjb3JlZmls ZSB3aXRoIGxpYnJhcnkgZmlsZSBtaXNzaW5nIiBcCisrICAgICJ3YXJuaW5nOiBDYW4ndCBvcGVu IGZpbGUgW3N0cmluZ190b19yZWdleHAgJGxpYnJhcnlfZmlsZW5hbWVdIGR1cmluZyBmaWxlLWJh Y2tlZCBtYXBwaW5nIG5vdGUgcHJvY2Vzc2luZyIKKysKKytzZXQgcHRyX3ZhbHVlIFtyZWFkX3B0 cl92YWx1ZV0KKytnZGJfYXNzZXJ0IHsgJHB0cl92YWx1ZSBlcSAidW5hdmFpbGFibGUiIH0gXAor KyAgICAiY2hlY2sgdmFsdWUgb2YgcG9pbnRlciBpcyB1bmF2YWlsYWJsZSB3aXRoIGxpYnJhcnkg ZmlsZSBtaXNzaW5nIgorKworKyMgTm93IHN5bWxpbmsgdGhlIC5idWlsZC1pZC94eC94eHguLi54 eHggZmlsZW5hbWUgd2l0aGluIHRoZSBkZWJ1ZworKyMgZGlyZWN0b3J5IHRvIGxpYnJhcnkgd2Ug anVzdCBtb3ZlZCBhc2lkZS4gIFJlc3RhcnQgR0RCIGFuZCBzZXR1cCB0aGUKKysjIGRlYnVnLWZp bGUtZGlyZWN0b3J5IGJlZm9yZSBsb2FkaW5nIHRoZSBjb3JlIGZpbGUuCisrIworKyMgR0RCIHNo b3VsZCBsb29rdXAgdGhlIGZpbGUgdG8gbWFwIHZpYSB0aGUgYnVpbGQtaWQgbGluayBpbiB0aGUK KysjIC5idWlsZC1pZC8gZGlyZWN0b3J5LgorK3NldCBkZWJ1Z2RpciBbc3RhbmRhcmRfb3V0cHV0 X2ZpbGUgImRlYnVnZGlyIl0KKytzZXQgYnVpbGRfaWRfZmlsZW5hbWUgXAorKyAgICAkZGVidWdk aXIvW2J1aWxkX2lkX2RlYnVnX2ZpbGVuYW1lX2dldCAkbGlicmFyeV9iYWNrdXBfZmlsZW5hbWUg IiJdCisrCisrcmVtb3RlX2V4ZWMgYnVpbGQgIm1rZGlyIC1wIFtmaWxlIGRpcm5hbWUgJGJ1aWxk X2lkX2ZpbGVuYW1lXSIKKytyZW1vdGVfZXhlYyBidWlsZCAibG4gLXNmICRsaWJyYXJ5X2JhY2t1 cF9maWxlbmFtZSAkYnVpbGRfaWRfZmlsZW5hbWUiCisrCisrY2xlYW5fcmVzdGFydCAkYmluZmls ZQorKworK2dkYl90ZXN0X25vX291dHB1dCAic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5ICRkZWJ1 Z2RpciIgXAorKyAgICAic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5IgorKworK2xvYWRfY29yZV9m aWxlICJsb2FkIGNvcmVmaWxlLCBsb29rdXAgaW4gZGVidWctZmlsZS1kaXJlY3RvcnkiCisrCisr c2V0IHB0cl92YWx1ZSBbcmVhZF9wdHJfdmFsdWVdCisrZ2RiX2Fzc2VydCB7ICRwdHJfdmFsdWUg PT0gJHB0cl9leHBlY3RlZF92YWx1ZSB9IFwKKysgICAgImNoZWNrIHZhbHVlIG9mIHBvaW50ZXIg dmFyaWFibGUgZnJvbSBjb3JlLWZpbGUsIGxvb2t1cCBpbiBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIK KysKKysjIEJ1aWxkIGEgbmV3IHZlcnNpb24gb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LCBrZWVwIHRo ZSBsaWJyYXJ5IHRoZSBzYW1lIHNpemUsCisrIyBidXQgY2hhbmdlIHRoZSBjb250ZW50cyBzbyB0 aGUgYnVpbGQtaWQgY2hhbmdlcy4gIFRoZW4gcmVzdGFydCBHREIgYW5kIGxvYWQKKysjIHRoZSBj b3JlLWZpbGUgYWdhaW4uICBHREIgc2hvdWxkIHNwb3QgdGhhdCB0aGUgYnVpbGQtaWQgZm9yIHRo ZSBzaGFyZWQKKysjIGxpYnJhcnkgaXMgbm90IGFzIGV4cGVjdGVkLCBhbmQgc2hvdWxkIHJlZnVz ZSB0byBtYXAgaW4gdGhlIHNoYXJlZCBsaWJyYXJ5LgorK2lmIHtbYnVpbGRfZXhlY3V0YWJsZSAi YnVpbGQgc2Vjb25kIHZlcnNpb24gb2Ygc2hhcmVkIGxpYnJhcnkiIFwKKysJICRsaWJyYXJ5X2Zp bGVuYW1lICRzcmNmaWxlMiBcCisrCSB7IGRlYnVnIHNobGliIGJ1aWxkLWlkIFwKKysJICAgICAg IGFkZGl0aW9uYWxfZmxhZ3M9LURQT0lOVEVSX1ZBTFVFPTB4MTEyMjMzNDQgfV0gIT0gMH0gewor KyAgICByZXR1cm4KKyt9CisrCisrY2xlYW5fcmVzdGFydCAkYmluZmlsZQorKworK2xvYWRfY29y ZV9maWxlICJsb2FkIGNvcmVmaWxlIHdpdGggd3JvbmcgbGlicmFyeSBpbiBwbGFjZSIgXAorKyAg ICAid2FybmluZzogRmlsZSBbc3RyaW5nX3RvX3JlZ2V4cCAkbGlicmFyeV9maWxlbmFtZV0gZG9l c24ndCBtYXRjaCBidWlsZC1pZCBmcm9tIGNvcmUtZmlsZSBkdXJpbmcgZmlsZS1iYWNrZWQgbWFw cGluZyBwcm9jZXNzaW5nIgorKworK3NldCBwdHJfdmFsdWUgW3JlYWRfcHRyX3ZhbHVlXQorK2dk Yl9hc3NlcnQgeyAkcHRyX3ZhbHVlIGVxICJ1bmF2YWlsYWJsZSIgfSBcCisrICAgICJjaGVjayB2 YWx1ZSBvZiBwb2ludGVyIGlzIHVuYXZhaWxhYmxlIHdpdGggd3JvbmcgbGlicmFyeSBpbiBwbGFj ZSIKKysKKysjIFNldHVwIGEgZGVidWdpbmZvZCBzZXJ2ZXIgd2hpY2ggY2FuIHNlcnZlIHRoZSBv cmlnaW5hbCBzaGFyZWQgbGlicmFyeSBmaWxlLgorKyMgVGhlbiByZXN0YXJ0IEdEQiBhbmQgbG9h ZCB0aGUgY29yZS1maWxlLiAgR0RCIHNob3VsZCBkb3dubG9hZCB0aGUgb3JpZ2luYWwKKysjIHNo YXJlZCBsaWJyYXJ5IGZyb20gZGVidWdpbmZvZCBhbmQgdXNlIHRoYXQgdG8gcHJvdmlkZSB0aGUg ZmlsZSBiYWNrZWQKKysjIG1hcHBpbmcuCisraWYgeyFbYWxsb3dfZGVidWdpbmZvZF90ZXN0c119 IHsKKysgICAgdW50ZXN0ZWQgInNraXBwaWcgZGVidWdpbmZvZCBwYXJ0cyBvZiB0aGlzIHRlc3Qi CisrICAgIHJldHVybgorK30KKysKKytzZXQgc2VydmVyX2RpciBbc3RhbmRhcmRfb3V0cHV0X2Zp bGUgImRlYnVnaW5mb2Quc2VydmVyIl0KKytmaWxlIG1rZGlyICRzZXJ2ZXJfZGlyCisrZmlsZSBy ZW5hbWUgLWZvcmNlICRsaWJyYXJ5X2JhY2t1cF9maWxlbmFtZSAkc2VydmVyX2RpcgorKworK3By ZXBhcmVfZm9yX2RlYnVnaW5mb2QgY2FjaGUgZGIKKysKKytzZXQgdXJsIFtzdGFydF9kZWJ1Z2lu Zm9kICRkYiAkc2VydmVyX2Rpcl0KKytpZiB7ICR1cmwgZXEgIiIgfSB7CisrICAgIHVucmVzb2x2 ZWQgImZhaWxlZCB0byBzdGFydCBkZWJ1Z2luZm9kIHNlcnZlciIKKysgICAgcmV0dXJuCisrfQor KworK3dpdGhfZGVidWdpbmZvZF9lbnYgJGNhY2hlIHsKKysgICAgc2V0ZW52IERFQlVHSU5GT0Rf VVJMUyAkdXJsCisrCisrICAgIGNsZWFuX3Jlc3RhcnQKKysgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0 ICJzZXQgZGVidWdpbmZvZCBlbmFibGVkIG9uIiBcCisrCSJlbmFibGVkIGRlYnVnaW5mb2QgZm9y IGluaXRpYWwgdGVzdCIKKysgICAgZ2RiX2xvYWQgJGJpbmZpbGUKKysKKysgICAgbG9hZF9jb3Jl X2ZpbGUgImxvYWQgY29yZWZpbGUsIGRvd25sb2FkIGxpYnJhcnkgZnJvbSBkZWJ1Z2luZm9kIiBc CisrCSJEb3dubG9hZGluZ1xbXlxyXG5cXSogZmlsZSBbc3RyaW5nX3RvX3JlZ2V4cCAkbGlicmFy eV9maWxlbmFtZV1cXC5cXC5cXC4iCisrCisrICAgIHNldCBwdHJfdmFsdWUgW3JlYWRfcHRyX3Zh bHVlXQorKyAgICBnZGJfYXNzZXJ0IHsgJHB0cl92YWx1ZSA9PSAkcHRyX2V4cGVjdGVkX3ZhbHVl IH0gXAorKwkiY2hlY2sgdmFsdWUgb2YgcG9pbnRlciB2YXJpYWJsZSBhZnRlciBkb3dubG9hZGlu ZyBsaWJyYXJ5IGZpbGUiCisrfQorKworK3N0b3BfZGVidWdpbmZvZAorZGlmZiAtLWdpdCBhL2dk Yi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2Qvc29saWItd2l0aC1zb25hbWUtMS5jIGIvZ2RiL3Rl c3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9zb2xpYi13aXRoLXNvbmFtZS0xLmMKK25ldyBmaWxlIG1v ZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2lu Zm9kL3NvbGliLXdpdGgtc29uYW1lLTEuYworQEAgLTAsMCArMSwzOSBAQAorKy8qIENvcHlyaWdo dCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisr LyogSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlc2UgdHdvIHZhcmlhYmxlcyBoYXZlIG5hbWVzIG9m IHRoZSBzYW1lIGxlbmd0aAorKyAgIHNvIHRoYXQgdGhlIGRlYnVnIGluZm9ybWF0aW9uIGluIHRo ZSB0d28gbGlicmFyeSB2ZXJzaW9ucyBpcyBsYWlkIG91dAorKyAgIHRoZSBzYW1lLiAgSWYgdGhl eSBkaWZmZXIgdGhlbiB0aGUgLmR5bmFtaWMgc2VjdGlvbiBtaWdodCBtb3ZlLCB3aGljaAorKyAg IHdpbGwgdHJpZ2dlciBhIGRpZmZlcmVudCBjaGVjayB3aXRoaW4gR0RCIHRoYW4gdGhlIG9uZSB3 ZSBhY3R1YWxseSB3YW50CisrICAgdG8gY2hlY2suICAqLworKworKyNpZiBMSUJfVkVSU0lPTiA9 PSAxCisrdm9sYXRpbGUgaW50ICpsaWJyYXJ5XzFfdmFyID0gKHZvbGF0aWxlIGludCAqKSAweDEy MzQ1Njc4OworKyNlbGlmIExJQl9WRVJTSU9OID09IDIKKyt2b2xhdGlsZSBpbnQgKmxpYnJhcnlf Ml92YXIgPSAodm9sYXRpbGUgaW50ICopIDB4MTEyMjMzNDQ7CisrI2Vsc2UKKysjIGVycm9yIFVu a25vd24gbGlicmFyeSB2ZXJzaW9uCisrI2VuZGlmCisrCisraW50CisrZm9vICh2b2lkKQorK3sK KysgIC8qIFRoaXMgc2hvdWxkIHRyaWdnZXIgYSBjb3JlIGR1bXAuICAqLworKyAgYWJvcnQgKCk7 CisrCisrICByZXR1cm4gMDsKKyt9CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVi dWdpbmZvZC9zb2xpYi13aXRoLXNvbmFtZS0yLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2lu Zm9kL3NvbGliLXdpdGgtc29uYW1lLTIuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2 L251bGwKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2Qvc29saWItd2l0aC1zb25h bWUtMi5jCitAQCAtMCwwICsxLDQxIEBACisrLyogQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor KyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysK KysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uICAqLworKworKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8ZGxmY24uaD4KKysj aW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLyogVGhpcyBpcyBpbiB0aGUgc2hhcmVkIGxpYnJhcnku ICAqLworK2V4dGVybiBpbnQgZm9vICh2b2lkKTsKKysKKysvKiBUaGlzIGlzIHVwZGF0ZWQgYnkg dGhlIC5leHAgZmlsZS4gICovCisrY2hhciAqbGlibmFtZSA9ICJsaWJmb29fMi5zbyI7CisrCisr aW50CisrbWFpbiAodm9pZCkKKyt7CisrICB2b2lkICpoYW5kbGU7CisrICBpbnQgcmVzLCB0bXA7 CisrCisrICBoYW5kbGUgPSBkbG9wZW4gKGxpYm5hbWUsIFJUTERfTEFaWSk7CisrICBhc3NlcnQg KGhhbmRsZSAhPSBOVUxMKTsKKysKKysgIHJlcyA9IGZvbyAoKTsKKysKKysgIHRtcCA9IGRsY2xv c2UgKGhhbmRsZSk7CisrICBhc3NlcnQgKHRtcCA9PSAwKTsKKysKKysgIHJldHVybiByZXM7Cisr fQorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2Qvc29saWItd2l0aC1z b25hbWUuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9zb2xpYi13aXRoLXNvbmFt ZS5leHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVz dHN1aXRlL2dkYi5kZWJ1Z2luZm9kL3NvbGliLXdpdGgtc29uYW1lLmV4cAorQEAgLTAsMCArMSwy OTAgQEAKKysjIENvcHlyaWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor KyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor KyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KysjCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworKyMgVGhpcyB0ZXN0IGV4 ZXJjaXNlcyBHREIncyBhYmlsaXR5IHRvIHZhbGlkYXRlIGJ1aWxkLWlkcyB3aGVuIGxvYWRpbmcK KysjIHNoYXJlZCBsaWJyYXJpZXMgZm9yIGEgY29yZSBmaWxlLgorKyMKKysjIFRoZSB0ZXN0IGNy ZWF0ZXMgdHdvICJ2ZXJzaW9ucyIgb2YgYSBzaGFyZWQgbGlicmFyeSwgc2V0cyB1cCBhCisrIyBz eW1saW5rIHRvIHBvaW50IHRvIG9uZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBhbmQgY3JlYXRl cyBhIGNvcmUgZmlsZS4KKysjCisrIyBXZSB0aGVuIHRyeSByZS1sb2FkaW5nIHRoZSBjb3JlIGZp bGUgYW5kIGV4ZWN1dGFibGUgYW5kIGNoZWNrIHRoYXQKKysjIEdEQiBpcyBhYmxlIHRvIGNvcnJl Y3RseSBsb2FkIHRoZSBzaGFyZWQgbGlicmFyeS4gIFRvIGNvbmZ1c2UgdGhpbmdzCisrIyB3ZSBy ZXRhcmdldCB0aGUgbGlicmFyeSBzeW1saW5rIGF0IHRoZSBvdGhlciB2ZXJzaW9uIG9mIHRoZSBs aWJyYXJ5LgorKyMKKysjIEFmdGVyIHRoYXQgd2UgcmVwZWF0IHRoZSB0ZXN0LCBidXQgdGhpcyB0 aW1lIGRlbGV0aW5nIHRoZSBzeW1saW5rCisrIyBjb21wbGV0ZWx5LgorKyMKKysjIFRoZW4gd2Ug cmVtb3ZlIHRoZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGNvbXBsZXRlbHksIGF0IHRoaXMgcG9p bnQKKysjIHdlIGRvIGV4cGVjdCBHREIgdG8gZ2l2ZSBhIHdhcm5pbmcgYWJvdXQgYmVpbmcgdW5h YmxlIHRvIGxvYWQgdGhlIGxpYnJhcnkuCisrIworKyMgQW5kIGZpbmFsbHksIHdlIHNldHVwIGRl YnVnaW5mb2QgYW5kIGhhdmUgaXQgc2VydmUgdGhlIG1pc3NpbmcKKysjIGxpYnJhcnkgZmlsZSwg R0RCIHNob3VsZCBjb3JyZWN0bHkgZG93bmxvYWQgdGhlIGxpYnJhcnkgZmlsZS4KKysjCisrIyBE ZXNwaXRlIHRoaXMgdGVzdCBsaXZpbmcgaW4gdGhlIGdkYi5kZWJ1Z2luZm9kLyBkaXJlY3Rvcnks IG9ubHkgdGhlIGxhc3QKKysjIHBhcnQgb2YgdGhpcyB0ZXN0IGFjdHVhbGx5IHVzZXMgZGVidWdp bmZvZCwgZXZlcnl0aGluZyB1cCB0byB0aGF0IHBvaW50IGlzCisrIyBwcmV0dHkgZ2VuZXJpYy4K KysKKytsb2FkX2xpYiBkZWJ1Z2luZm9kLXN1cHBvcnQuZXhwCisrCisrcmVxdWlyZSBhbGxvd19z aGxpYl90ZXN0cworK3JlcXVpcmUge2lzdGFyZ2V0ICIqLWxpbnV4KiJ9CisrcmVxdWlyZSB7IWlz X3JlbW90ZSBob3N0fQorK3JlcXVpcmUgeyF1c2luZ19maXNzaW9ufQorKworK3N0YW5kYXJkX3Rl c3RmaWxlIC0xLmMgLTIuYworKworKyMgQnVpbGQgdHdvIHNpbWlsYXIsIGJ1dCBzbGlnaHRseSBk aWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHNoYXJlZAorKyMgbGlicmFyeS4gIEJvdGggbGlicmFy aWVzIGhhdmUgRFRfU09OQU1FIHNldCB0byB0aGUgZ2VuZXJpYworKyMgbGliZm9vLnNvLCB3ZSds bCBjcmVhdGUgYSBzeW1saW5rIHdpdGggdGhhdCBuYW1lIGxhdGVyLgorK3NldCBsaWJyYXJ5XzFf ZmlsZW5hbWUgW3N0YW5kYXJkX291dHB1dF9maWxlICJsaWJmb29fMS5zbyJdCisrc2V0IGxpYnJh cnlfMl9maWxlbmFtZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImxpYmZvb18yLnNvIl0KKysKKysj IFRoZSBnZW5lcmljIG5hbWUgZm9yIHRoZSBsaWJyYXJ5LgorK3NldCBsaWJyYXJ5X2ZpbGVuYW1l IFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAibGliZm9vLnNvIl0KKysKKysjIFdoZW4gY29tcGlsaW5n IGEgc2hhcmVkIGxpYnJhcnkgdGhlIC1XbCwtc29uYW1lLE5BTUUgb3B0aW9uIGlzCisrIyBhdXRv bWF0aWNhbGx5IGFkZGVkIGJhc2VkIG9uIHRoZSBmaW5hbCBuYW1lIG9mIHRoZSBsaWJyYXJ5LiAg V2Ugd2FudAorKyMgdG8gY29tcGlsZSBsaWJmb29fMS5zbywgYnV0IHNldCB0aGUgc29uYW1lIHRv IGxpYmZvby5zby4gIFRvIGFjaGlldmUKKysjIHRoaXMgd2UgZmlyc3QgY29tcGlsZSBpbnRvIGxp YmZvby5zbywgYW5kIHRoZW4gcmVuYW1lIHRoZSBsaWJyYXJ5IHRvCisrIyBsaWJmb29fMS5zby4K KytpZiB7W2J1aWxkX2V4ZWN1dGFibGUgImJ1aWxkIGxpYmZvb18xLnNvIiAkbGlicmFyeV9maWxl bmFtZSBcCisrCSAkc3JjZmlsZSBcCisrCSAgICAgIHsgZGVidWcgc2hsaWIgYnVpbGQtaWQgXAor KwkJICAgIGFkZGl0aW9uYWxfZmxhZ3M9LURMSUJfVkVSU0lPTj0xIH1dID09IC0xfSB7CisrICAg IHJldHVybgorK30KKytyZW1vdGVfZXhlYyBidWlsZCAibXYgJHtsaWJyYXJ5X2ZpbGVuYW1lfSAk e2xpYnJhcnlfMV9maWxlbmFtZX0iCisrCisrIyBTZWUgdGhlIGNvbW1lbnQgYWJvdmUsIGJ1dCB0 aGlzIHRpbWUgd2UgcmVuYW1lIHRvIGxpYmZvb18yLnNvLgorK2lmIHtbYnVpbGRfZXhlY3V0YWJs ZSAiYnVpbGQgbGliZm9vXzIuc28iICRsaWJyYXJ5X2ZpbGVuYW1lIFwKKysJICRzcmNmaWxlIFwK KysJICAgICAgeyBkZWJ1ZyBzaGxpYiBidWlsZC1pZCBcCisrCQkgICAgYWRkaXRpb25hbF9mbGFn cz0tRExJQl9WRVJTSU9OPTIgfV0gPT0gLTF9IHsKKysgICAgcmV0dXJuCisrfQorK3JlbW90ZV9l eGVjIGJ1aWxkICJtdiAke2xpYnJhcnlfZmlsZW5hbWV9ICR7bGlicmFyeV8yX2ZpbGVuYW1lfSIK KysKKysjIENyZWF0ZSBsaWJmb28uc28gc3ltbGluayB0byB0aGUgbGliZm9vXzEuc28gbGlicmFy eS4gIElmIHRoaXMKKysjIHN5bWxpbmsgY3JlYXRpb24gZmFpbHMgdGhlbiB3ZSBhc3N1bWUgd2Ug Y2FuJ3QgY3JlYXRlIHN5bWxpbmtzIG9uCisrIyB0aGlzIGhvc3QuICBJZiB0aGlzIHN1Y2NlZWRz IHRoZW4gbGF0ZXIgc3ltbGluayBjcmVhdGlvbiBpcyByZXF1aXJlZAorKyMgdG8gc3VjY2VlZCwg YW5kIHdpbGwgdHJpZ2dlciBhbiBGQUlMIGlmIGl0IGRvZXNuJ3QuCisrc2V0IHN0YXR1cyBcCisr ICAgIFtyZW1vdGVfZXhlYyBidWlsZCBcCisrCSAibG4gLXNmICR7bGlicmFyeV8xX2ZpbGVuYW1l fSAke2xpYnJhcnlfZmlsZW5hbWV9Il0KKytpZiB7W2xpbmRleCAkc3RhdHVzIDBdICE9IDB9IHsK KysgICAgdW5zdXBwb3J0ZWQgImhvc3QgZG9lcyBub3Qgc3VwcG9ydCBzeW1ib2xpYyBsaW5rcyIK KysgICAgcmV0dXJuCisrfQorKworKyMgQnVpbGQgdGhlIGV4ZWN1dGFibGUuICBUaGlzIGxpbmtz IGFnYWluc3QgbGliZm9vLnNvLCB3aGljaCBpcworKyMgcG9pbmluZyBhdCBsaWJmb29fMS5zby4g IEp1c3QgdG8gY29uZnVzZSB0aGluZ3MgZXZlbiBtb3JlLCB0aGlzCisrIyBleGVjdXRhYmxlIHVz ZXMgZGxvcGVuIHRvIGxvYWQgbGliZm9vXzIuc28uICBXZWlyZCEKKytpZiB7IFtidWlsZF9leGVj dXRhYmxlICJidWlsZCBleGVjdXRhYmxlIiAke2JpbmZpbGV9ICR7c3JjZmlsZTJ9IFwKKysJICBb bGlzdCBkZWJ1ZyBzaGxpYj0ke2xpYnJhcnlfZmlsZW5hbWV9IHNobGliX2xvYWRdXSA9PSAtMSB9 IHsKKysgICAgcmV0dXJuCisrfQorKworKyMgSWYgdGhlIGJvYXJkIGZpbGUgaXMgYXV0b21hdGlj YWxseSBzcGxpdHRpbmcgdGhlIGRlYnVnIGluZm9ybWF0aW9uCisrIyBpbnRvIGEgc2VwYXJhdGUg ZmlsZSAoZS5nLiB0aGUgY2Mtd2l0aC1nbnUtZGVidWdsaW5rLmV4cCBib2FyZCkgdGhlbgorKyMg dGhpcyB0ZXN0IGlzbid0IGdvaW5nIHRvIHdvcmsuCisrY2xlYW5fcmVzdGFydAorK2dkYl9maWxl X2NtZCAkYmluZmlsZQorK2lmIHskZ2RiX2ZpbGVfY21kX2RlYnVnX2luZm8gbmUgImRlYnVnIn0g eworKyAgICB1bnN1cHBvcnRlZCAiZmFpbGVkIHRvIGZpbmQgZGVidWcgaW5mb3JtYXRpb24iCisr ICAgIHJldHVybgorK30KKytpZiB7W3JlZ2V4cCAiJHt0ZXN0ZmlsZX0uZGVidWciICRnZGJfZmls ZV9jbWRfbXNnXX0geworKyAgICB1bnN1cHBvcnRlZCAiZGVidWcgaW5mb3JtYXRpb24gaGFzIGJl ZW4gc3BsaXQgdG8gYSBzZXBhcmF0ZSBmaWxlIgorKyAgICByZXR1cm4KKyt9CisrCisrIyBSdW4g QklORklMRSB3aGljaCB3aWxsIGdlbmVyYXRlIGEgY29yZWZpbGUuCisrc2V0IGNvcmVmaWxlIFtj b3JlX2ZpbmQgJGJpbmZpbGVdCisraWYgeyRjb3JlZmlsZSBlcSAiIn0geworKyAgICB1bnRlc3Rl ZCAiY291bGQgbm90IGdlbmVyYXRlIGNvcmUgZmlsZSIKKysgICAgcmV0dXJuCisrfQorKworKyMg SGVscGVyIHByb2MgdG8gbG9hZCBnbG9iYWwgQklORklMRSBhbmQgdGhlbiBsb2FkIGdsb2JhbCBD T1JFRklMRS4KKysjCisrIyBJZiBFWFBFQ1RfV0FSTklORyBpcyB0cnVlIHRoZW4gd2UgcmVxdWly ZSBhIHdhcm5pbmcgYWJvdXQgYmVpbmcKKysjIHVuYWJsZSB0byBsb2FkIHRoZSBzaGFyZWQgbGli cmFyeSBzeW1ib2xzLCBvdGhlcndpc2UsIEVYUEVDVF9XQVJOSU5HCisrIyBpcyBmYWxzZSBhbmQg d2UgcmVxdWlyZSBubyB3YXJuaW5nLgorKyMKKysjIElmIEVYUEVDVF9ET1dOTE9BRCBpcyB0cnVl IHRoZW4gd2UgcmVxdWlyZSBhIGxpbmUgaW5kaWNhdGluZyB0aGF0CisrIyB0aGUgc2hhcmVkIGxp YnJhcnkgaXMgYmVpbmcgZG93bmxvYWRlZCBmcm9tIGRlYnVnaW5mb2QsIG90aGVyd2lzZQorKyMg dGhlIHNoYXJlZCBsaWJyYXJ5IHNob3VsZCBub3QgYmUgZG93bmxvYWRlZC4KKysjCisrIyBJZiBE RUJVR0RJUiBpcyBub3QgdGhlIGVtcHR5IHN0cmluZyB0aGVuICdkZWJ1Zy1maWxlLWRpcmVjdG9y eScgaXMKKysjIHNldCB0byB0aGUgdmFsdWUgb2YgREVCVUdESVIuCisrcHJvYyBsb2FkX2V4ZWNf YW5kX2NvcmVfZmlsZSB7IGV4cGVjdF93YXJuaW5nIGV4cGVjdF9kb3dubG9hZCB0ZXN0bmFtZSBc CisrCQkJCSAgIHtkZWJ1Z2RpciAiIn0gfSB7CisrICAgIHdpdGhfdGVzdF9wcmVmaXggJHRlc3Ru YW1lIHsKKysJY2xlYW5fcmVzdGFydCAkOjpiaW5maWxlCisrCisrCWlmIHsgJGRlYnVnZGlyIG5l ICIiIH0geworKwkgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgZGVidWctZmlsZS1kaXJlY3Rv cnkgJGRlYnVnZGlyIiBcCisrCQkic2V0IGRlYnVnIGRpcmVjdG9yeSIKKysJfQorKworKwlzZXQg c2F3X3dhcm5pbmcgZmFsc2UKKysJc2V0IHNhd19kb3dubG9hZCBmYWxzZQorKwlzZXQgc2F3X2dl bmVyYXRlZCBmYWxzZQorKwlzZXQgc2F3X3Rlcm1pbmF0ZWQgZmFsc2UKKysKKysJZ2RiX3Rlc3Rf bXVsdGlwbGUgImNvcmUtZmlsZSAkOjpjb3JlZmlsZSIgImxvYWQgY29yZSBmaWxlIiB7CisrCSAg ICAtcmUgIl5Db3JlIHdhcyBnZW5lcmF0ZWQgYnkgXFteXHJcblxdK1xyXG4iIHsKKysJCXNldCBz YXdfZ2VuZXJhdGVkIHRydWUKKysJCWV4cF9jb250aW51ZQorKwkgICAgfQorKwkgICAgLXJlICJe UHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggc2lnbmFsIFxbXlxyXG5cXStcclxuIiB7CisrCQlzZXQg c2F3X3Rlcm1pbmF0ZWQgdHJ1ZQorKwkJZXhwX2NvbnRpbnVlCisrCSAgICB9CisrCSAgICAtcmUg Il53YXJuaW5nOiBDYW4ndCBvcGVuIGZpbGUgXFteXHJcblxdKyBkdXJpbmcgZmlsZS1iYWNrZWQg bWFwcGluZyBub3RlIHByb2Nlc3NpbmdcclxuIiB7CisrCQkjIElnbm9yZSB3YXJuaW5ncyBmcm9t IHRoZSBmaWxlIGJhY2tlZCBtYXBwaW5nIHBoYXNlLgorKwkJZXhwX2NvbnRpbnVlCisrCSAgICB9 CisrCSAgICAtcmUgIl53YXJuaW5nOiBDb3VsZCBub3QgbG9hZCBzaGFyZWQgbGlicmFyeSBzeW1i b2xzIGZvciBcW15cclxuXF0rL2xpYmZvb1xcLnNvXFwuXHJcbiIgeworKwkJc2V0IHNhd193YXJu aW5nIHRydWUKKysJCWV4cF9jb250aW51ZQorKwkgICAgfQorKwkgICAgLXJlICJeRG93bmxvYWRp bmcgZmlsZSBcW15cclxuXF0rL2xpYmZvb18xXFwuc29cXC5cXC5cXC5cclxuIiB7CisrCQlzZXQg c2F3X2Rvd25sb2FkIHRydWUKKysJCWV4cF9jb250aW51ZQorKwkgICAgfQorKwkgICAgLXJlICJe JDo6Z2RiX3Byb21wdCAkIiB7CisrCQlnZGJfYXNzZXJ0IHsgJHNhd19nZW5lcmF0ZWQgJiYgJHNh d190ZXJtaW5hdGVkIFwKKysJCQkJICYmICRzYXdfd2FybmluZyA9PSAkZXhwZWN0X3dhcm5pbmcg XAorKwkJCQkgJiYgJHNhd19kb3dubG9hZCA9PSAkZXhwZWN0X2Rvd25sb2FkIH0gXAorKwkJICAg ICRnZGJfdGVzdF9uYW1lCisrCSAgICB9CisrCSAgICAtcmUgIl5cW15cclxuXF0qXHJcbiIgewor KwkJZXhwX2NvbnRpbnVlCisrCSAgICB9CisrCX0KKysKKysJIyBJZiB3ZSBkb24ndCBleHBlY3Qg YSB3YXJuaW5nIHRoZW4gZGVidWcgc3ltYm9scyBmcm9tIHRoZQorKwkjIHNoYXJlZCBsaWJyYXJ5 IHNob3VsZCBiZSBhdmFpbGFibGUuICBDb25maXJtIHdlIGNhbiByZWFkIGEKKysJIyB2YXJpYWJs ZSBmcm9tIHRoZSBzaGFyZWQgbGlicmFyeS4gIElmIHdlIGRvIGV4cGVjdCBhIHdhcm5pbmcKKysJ IyB0aGVuIHRoZSBzaGFyZWQgbGlicmFyeSBkZWJ1ZyBzeW1ib2xzIGhhdmUgbm90IGxvYWRlZCwg YW5kCisrCSMgdGhlIGxpYnJhcnkgdmFyaWFibGUgc2hvdWxkIG5vdCBiZSBhdmFpbGFibGUuCisr CWlmIHsgISRleHBlY3Rfd2FybmluZyB9IHsKKysJICAgIGdkYl90ZXN0ICJwcmludC94IGxpYnJh cnlfMV92YXIiICIgPSAweDEyMzQ1Njc4IiBcCisrCQkiY2hlY2sgbGlicmFyeV8xX3ZhciBjYW4g YmUgcmVhZCIKKysJfSBlbHNlIHsKKysJICAgIGdkYl90ZXN0ICJwcmludC94IGxpYnJhcnlfMV92 YXIiIFwKKysJCSJeTm8gc3ltYm9sIFwibGlicmFyeV8xX3ZhclwiIGluIGN1cnJlbnQgY29udGV4 dFxcLiIgXAorKwkJImNoZWNrIGxpYnJhcnlfMV92YXIgY2Fubm90IGJlIHJlYWQiCisrCX0KKysg ICAgfQorK30KKysKKysjIEluaXRpYWwgdGVzdCwganVzdCBsb2FkIHRoZSBleGVjdXRhYmxlIGFu ZCBjb3JlIGZpbGUuICBBdCB0aGlzIHBvaW50CisrIyBldmVyeXRoaW5nIHNob3VsZCBsb2FkIGZp bmUgYXMgZXZlcnl0aGluZyBpcyB3aGVyZSB3ZSBleHBlY3QgdG8gZmluZAorKyMgaXQuCisrbG9h ZF9leGVjX2FuZF9jb3JlX2ZpbGUgZmFsc2UgZmFsc2UgXAorKyAgICAibG9hZCBjb3JlIGZpbGUs IGFsbCBsaWJyYXJpZXMgYXMgZXhwZWN0ZWQiCisrCisrIyBVcGRhdGUgbGliZm9vLnNvIHN5bWxp bmsgdG8gcG9pbnQgYXQgdGhlIHNlY29uZCBsaWJyYXJ5IHRoZW4gcmVsb2FkCisrIyB0aGUgY29y ZSBmaWxlLiAgR0RCIHNob3VsZCBzcG90IHRoYXQgdGhlIHN5bWxpbmsgcG9pbnRzIHRvIHRoZSB3 cm9uZworKyMgZmlsZSwgYnV0IHNob3VsZCBiZSBhYmxlIHRvIGZpZ3VyZSBvdXQgdGhlIGNvcnJl Y3QgZmlsZSB0byBsb2FkIGFzCisrIyB0aGUgcmlnaHQgZmlsZSB3aWxsIGJlIGluIHRoZSBtYXBw ZWQgZmlsZSBsaXN0LgorK3NldCBzdGF0dXMgW3JlbW90ZV9leGVjIGJ1aWxkIFwKKysJCSJsbiAt c2YgJHtsaWJyYXJ5XzJfZmlsZW5hbWV9ICR7bGlicmFyeV9maWxlbmFtZX0iXQorK2dkYl9hc3Nl cnQgeyBbbGluZGV4ICRzdGF0dXMgMF0gPT0gMCB9IFwKKysgICAgInVwZGF0ZSBsaWJyYXJ5IHN5 bWxpbmsgdG8gcG9pbnQgdG8gdGhlIHdyb25nIGZpbGUiCisrCisrbG9hZF9leGVjX2FuZF9jb3Jl X2ZpbGUgZmFsc2UgZmFsc2UgXAorKyAgICAibG9hZCBjb3JlIGZpbGUsIHN5bWxpbmsgcG9pbnRz IHRvIHdyb25nIGZpbGUiCisrCisrIyBSZW1vdmUgbGliZm9vLnNvIHN5bWxpbmsgYW5kIHJlbG9h ZCB0aGUgY29yZSBmaWxlLiAgQXMgaW4gdGhlCisrIyBwcmV2aW91cyB0ZXN0IEdEQiBzaG91bGQg YmUgYWJsZSB0byBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGZpbGUgdG8KKysjIGxvYWQgYXMgdGhl IGNvcnJlY3QgZmlsZSB3aWxsIHN0aWxsIGFwcGVhciBpbiB0aGUgbWFwcGVkIGZpbGUgbGlzdC4K KytzZXQgc3RhdHVzIFtyZW1vdGVfZXhlYyBidWlsZCAicm0gLWYgJHtsaWJyYXJ5X2ZpbGVuYW1l fSJdCisrZ2RiX2Fzc2VydCB7IFtsaW5kZXggJHN0YXR1cyAwXSA9PSAwIH0gInJlbW92ZSBsaWJy YXJ5IHN5bWxpbmsiCisrCisrbG9hZF9leGVjX2FuZF9jb3JlX2ZpbGUgZmFsc2UgZmFsc2UgXAor KyAgICAibG9hZCBjb3JlIGZpbGUsIHN5bWxpbmsgcmVtb3ZlZCIKKysKKysjIFJlbW92ZSBMSUJS QVJZXzFfRklMRU5BTUUuICBXZSdsbCBub3cgc2VlIGEgd2FybmluZyB0aGF0IHRoZSBtYXBwZWQK KysjIGZpbGUgY2FuJ3QgYmUgbG9hZGVkICh3ZSBpZ25vcmUgdGhhdCB3YXJuaW5nKSwgYW5kIHdl J2xsIHNlZSBhCisrIyB3YXJuaW5nIHRoYXQgdGhlIHNoYXJlZCBsaWJyYXJ5IGNhbid0IGJlIGxv YWRlZC4KKytzZXQgbGlicmFyeV8xX2JhY2t1cF9maWxlbmFtZSAke2xpYnJhcnlfMV9maWxlbmFt ZX0uYmFja3VwCisrc2V0IHN0YXR1cyBcCisrICAgIFtyZW1vdGVfZXhlYyBidWlsZCBcCisrCSAi bXYgJHtsaWJyYXJ5XzFfZmlsZW5hbWV9ICR7bGlicmFyeV8xX2JhY2t1cF9maWxlbmFtZX0iXQor K2dkYl9hc3NlcnQgeyBbbGluZGV4ICRzdGF0dXMgMF0gPT0gMCB9IFwKKysgICAgInJlbW92ZSBs aWJmb29fMS5zbyIKKysKKytsb2FkX2V4ZWNfYW5kX2NvcmVfZmlsZSB0cnVlIGZhbHNlIFwKKysg ICAgImxvYWQgY29yZSBmaWxlLCBsaWJmb29fMS5zbyByZW1vdmVkIgorKworKyMgU3ltbGluayB0 aGUgLmJ1aWxkLWlkL3h4L3h4eC4uLnh4eCBmaWxlbmFtZSB3aXRoaW4gdGhlIGRlYnVnCisrIyBk aXJlY3RvcnkgdG8gTElCUkFSWV8xX0JBQ0tVUF9GSUxFTkFNRSwgbm93IHdoZW4gd2UgcmVzdGFy dCBHREIgaXQKKysjIHNob3VsZCBmaW5kIHRoZSBtaXNzaW5nIGxpYnJhcnkgd2l0aGluIHRoZSBk ZWJ1ZyBkaXJlY3RvcnkuCisrc2V0IGRlYnVnZGlyIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAiZGVi dWdkaXIiXQorK3NldCBidWlsZF9pZF9maWxlbmFtZSBcCisrICAgICRkZWJ1Z2Rpci9bYnVpbGRf aWRfZGVidWdfZmlsZW5hbWVfZ2V0ICRsaWJyYXJ5XzFfYmFja3VwX2ZpbGVuYW1lICIiXQorK3Nl dCBzdGF0dXMgXAorKyAgICBbcmVtb3RlX2V4ZWMgYnVpbGQgXAorKwkgIm1rZGlyIC1wIFtmaWxl IGRpcm5hbWUgJGJ1aWxkX2lkX2ZpbGVuYW1lXSJdCisrZ2RiX2Fzc2VydCB7IFtsaW5kZXggJHN0 YXR1cyAwXSA9PSAwIH0gXAorKyAgICAiY3JlYXRlIHN1Yi1kaXJlY3Rvcnkgd2l0aGluIHRoZSBk ZWJ1ZyBkaXJlY3RvcnkiCisrc2V0IHN0YXR1cyBcCisrICAgIFtyZW1vdGVfZXhlYyBidWlsZCBc CisrCSAibG4gLXNmICRsaWJyYXJ5XzFfYmFja3VwX2ZpbGVuYW1lICRidWlsZF9pZF9maWxlbmFt ZSJdCisrZ2RiX2Fzc2VydCB7IFtsaW5kZXggJHN0YXR1cyAwXSA9PSAwIH0gXAorKyAgICAiY3Jl YXRlIHN5bWxpbmsgd2l0aGluIHRoZSBkZWJ1ZyBkaXJlY3RvcnkgIgorKworK2xvYWRfZXhlY19h bmRfY29yZV9maWxlIGZhbHNlIGZhbHNlIFwKKysgICAgImxvYWQgY29yZSBmaWxlLCBmaW5kIGxp YmZvb18xLnNvIHRocm91Z2ggZGVidWctZmlsZS1kaXJlY3RvcnkiIFwKKysgICAgJGRlYnVnZGly CisrCisrIyBTZXR1cCBhIGRlYnVnaW5mb2Qgc2VydmVyIHdoaWNoIGNhbiBzZXJ2ZSB0aGUgb3Jp Z2luYWwgc2hhcmVkCisrIyBsaWJyYXJ5IGZpbGUuCisraWYgeyFbYWxsb3dfZGVidWdpbmZvZF90 ZXN0c119IHsKKysgICAgdW50ZXN0ZWQgInNraXBwaWcgZGVidWdpbmZvZCBwYXJ0cyBvZiB0aGlz IHRlc3QiCisrICAgIHJldHVybgorK30KKysKKytzZXQgc2VydmVyX2RpciBbc3RhbmRhcmRfb3V0 cHV0X2ZpbGUgImRlYnVnaW5mb2Quc2VydmVyIl0KKytmaWxlIG1rZGlyICRzZXJ2ZXJfZGlyCisr ZmlsZSByZW5hbWUgLWZvcmNlICRsaWJyYXJ5XzFfYmFja3VwX2ZpbGVuYW1lICRzZXJ2ZXJfZGly CisrCisrcHJlcGFyZV9mb3JfZGVidWdpbmZvZCBjYWNoZSBkYgorKworK3NldCB1cmwgW3N0YXJ0 X2RlYnVnaW5mb2QgJGRiICRzZXJ2ZXJfZGlyXQorK2lmIHsgJHVybCBlcSAiIiB9IHsKKysgICAg dW5yZXNvbHZlZCAiZmFpbGVkIHRvIHN0YXJ0IGRlYnVnaW5mb2Qgc2VydmVyIgorKyAgICByZXR1 cm4KKyt9CisrCisrd2l0aF9kZWJ1Z2luZm9kX2VudiAkY2FjaGUgeworKyAgICBzZXRlbnYgREVC VUdJTkZPRF9VUkxTICR1cmwKKysKKysgICAgc2F2ZV92YXJzIHsgR0RCRkxBR1MgfSB7CisrCWFw cGVuZCBHREJGTEFHUyAiIC1leCBcInNldCBkZWJ1Z2luZm9kIGVuYWJsZWQgb25cIiIKKysKKysJ IyBSZWxvYWQgdGhlIGV4ZWN1dGFibGUgYW5kIGNvcmUgZmlsZS4gIEdEQiBzaG91bGQgZG93bmxv YWQKKysJIyB0aGUgZmlsZSBsaWJmb29fMS5zbyB1c2luZyBkZWJ1Z2luZm9kIGR1cmluZyB0aGUg bWFwcGVkIGZpbGUKKysJIyBwaGFzZSwgYnV0IHNob3VsZCB0aGVuIHJldXNlIHRoYXQgZG93bmxv YWQgZHVyaW5nIHRoZSBzaGFyZWQKKysJIyBsaWJyYXJ5IHBoYXNlLgorKwlsb2FkX2V4ZWNfYW5k X2NvcmVfZmlsZSBmYWxzZSB0cnVlIFwKKysJICAgICJsb2FkIGNvcmUgZmlsZSwgdXNlIGRlYnVn aW5mb2QiCisrICAgIH0KKyt9CisrCisrc3RvcF9kZWJ1Z2luZm9kCitkaWZmIC0tZ2l0IGEvZ2Ri L3Rlc3RzdWl0ZS9nZGIuZHdhcmYyL3Nob3J0LWJ1aWxkLWlkLmV4cCBiL2dkYi90ZXN0c3VpdGUv Z2RiLmR3YXJmMi9zaG9ydC1idWlsZC1pZC5leHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0g L2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5kd2FyZjIvc2hvcnQtYnVpbGQtaWQu ZXhwCitAQCAtMCwwICsxLDExOSBAQAorKyMgQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysKKysj IENyZWF0ZSBhIGZpbGUgd2l0aCBhbiBhcnRpZmljaWFsbHkgc2hvcnQgKDEtYnl0ZSkgYnVpbGQt aWQsIGFuZAorKyMgY2hlY2sgdGhhdCBHREIgZG9lc24ndCB0cnkgdG8gbG9hZCBkZWJ1ZyBpbmZv cm1hdGlvbi4gIElmIHdlIGRvIHRyeQorKyMgdGhlbiB3ZSBlbmQgdXAgbG9hZGluZyBmcm9tOiBg ZGVidWctZGlyZWN0b3J5Ly5idWlsZC1pZC94eC8uZGVidWdgCisrIyB3aGljaCBpc24ndCByaWdo dC4KKysKKytsb2FkX2xpYiBkd2FyZi5leHAKKysKKysjIFRoaXMgdGVzdCBjYW4gb25seSBiZSBy dW4gb24gdGFyZ2V0cyB3aGljaCBzdXBwb3J0IERXQVJGLTIgYW5kIHVzZSBnYXMuCisrcmVxdWly ZSBkd2FyZjJfc3VwcG9ydAorKworKyMgTm8gcmVtb3RlIGhvc3QgdGVzdGluZyBlaXRoZXIuCisr cmVxdWlyZSB7IWlzX3JlbW90ZSBob3N0fQorKworK3N0YW5kYXJkX3Rlc3RmaWxlIG1haW4uYwor KworKyMgQ3JlYXRlIGFuIGFzc2VtYmxlciBmaWxlIHdoaWNoIGVuY29kZXMgQlVJTERJRCBhcyB0 aGUgYnVpbGQtaWQuICBDb21waWxlCisrIyB0aGlzIGFsb25nIHdpdGggdGhlIGdsb2JhbCBTUkNG SUxFIHRvIGNyZWF0ZSBhIHRlc3QgZXhlY3V0YWJsZS4KKysjCisrIyBTcGxpdCB0aGUgZGVidWcg aW5mb3JtYXRpb24gb3V0IGZyb20gdGhlIG5ld2x5IGNyZWF0ZWQgZXhlY3V0YWJsZSBhbmQgcGxh Y2UKKysjIGl0IGludG8gdGhlIGRlYnVnIGZpbGUgZGlyZWN0b3J5LgorKyMKKysjIExvYWQgdGhl IGV4ZWN1dGFibGUgaW50byBHREIgYW5kIGNoZWNrIHRvIHNlZSBpZiB0aGUgZGVidWcgaW5mb3Jt YXRpb24gd2FzCisrIyBsb2FkZWQgb3Igbm90LiAgRm9yIHRoaXMgdGVzdCB3ZSBhcmUgZXhwZWN0 aW5nIHRoYXQgdGhlIGRlYnVnIGluZm9ybWF0aW9uCisrIyB3YXMgbm90IGxvYWRlZC4gIFRoZSBy ZWFzb24gaXMgdGhhdCwgd2l0aCBzaG9ydCB2YWx1ZXMgZm9yIEJVSUxESUQsIEdEQiBlbmRzCisr IyB1cCBsb29raW5nIGZvciB0aGUgZGVidWcgaW5mb3JtYXRpb24gaW4gd2VpcmQgbG9jYXRpb25z LgorK3Byb2MgcnVuX3Rlc3QgeyBidWlsZGlkIH0geworKyAgICBzZXQgbGVuIFtzdHJpbmcgbGVu Z3RoICRidWlsZGlkXQorKworKyAgICBzZXQgYXNtX2ZpbGUgW3N0YW5kYXJkX291dHB1dF9maWxl ICIkOjp0ZXN0ZmlsZS4kbGVuLlMiXQorKyAgICBEd2FyZjo6YXNzZW1ibGUgJGFzbV9maWxlIHsK KysJZGVjbGFyZV9sYWJlbHMgaW50X2xhYmVsIGludF9sYWJlbDIKKysKKysJdXB2YXIgYnVpbGRp ZCBidWlsZGlkCisrCisrCWJ1aWxkX2lkICRidWlsZGlkCisrCisrCWN1IHsgbGFiZWwgY3Vfc3Rh cnQgfSB7CisrCSAgICBjb21waWxlX3VuaXQge3tsYW5ndWFnZSBARFdfTEFOR19DfX0geworKwkJ aW50X2xhYmVsMjogYmFzZV90eXBlIHsKKysJCSAgICB7bmFtZSBpbnR9CisrCQkgICAge2J5dGVf c2l6ZSA0IHNkYXRhfQorKwkJICAgIHtlbmNvZGluZyBARFdfQVRFX3NpZ25lZH0KKysJCX0KKysK KysJCWNvbnN0YW50IHsKKysJCSAgICB7bmFtZSB0aGVfaW50fQorKwkJICAgIHt0eXBlIDokaW50 X2xhYmVsMn0KKysJCSAgICB7Y29uc3RfdmFsdWUgOTkgZGF0YTF9CisrCQl9CisrCSAgICB9Cisr CX0KKysKKysJYXJhbmdlcyB7fSBjdV9zdGFydCB7CisrCSAgICBhcmFuZ2Uge30gMCAwCisrCX0K KysgICAgfQorKworKyAgICBzZXQgZXhlY2ZpbGUgW3N0YW5kYXJkX291dHB1dF9maWxlICQ6OnRl c3RmaWxlLiRsZW5dCisrCisrICAgIGlmIHsgW2J1aWxkX2V4ZWN1dGFibGVfZnJvbV9zcGVjcyAi ZmFpbGVkIHRvIGJ1aWxkIiBcCisrCSAgICAgICRleGVjZmlsZSB7ZGVidWcgbm8tYnVpbGQtaWR9 IFwKKysJICAgICAgJDo6c3JjZmlsZSBkZWJ1ZyBcCisrCSAgICAgICRhc21fZmlsZSB7fV0gfSB7 CisrCXJldHVybgorKyAgICB9CisrCisrICAgICMgQ3JlYXRlIHRoZSBkZWJ1ZyBkaXJlY3Rvcnku CisrICAgIHNldCBkZWJ1Z2RpciBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImRlYnVnZGlyLiRsZW4i XQorKyAgICBzZXQgYnVpbGRfaWRfZGlyICRkZWJ1Z2Rpci8uYnVpbGQtaWQvJGJ1aWxkaWQKKysg ICAgcmVtb3RlX2V4ZWMgaG9zdCAibWtkaXIgLXAgJGJ1aWxkX2lkX2RpciIKKysKKysgICAgIyBT cGxpdCBvdXQgdGhlIGRlYnVnIGluZm9ybWF0aW9uLgorKyAgICBpZiB7W2dkYl9nbnVfc3RyaXBf ZGVidWcgJGV4ZWNmaWxlIG5vLWRlYnVnbGlua119IHsKKysJdW5yZXNvbHZlZCAiZmFpbGVkIHRv IHNwbGl0IG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiIKKysJcmV0dXJuCisrICAgIH0KKysKKysgICAg IyBNb3ZlIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBkZWJ1ZyBkaXJlY3RvcnkuICBX ZSBwbGFjZSB0aGUgZGVidWcKKysgICAgIyBpbmZvcm1hdGlvbiBpbnRvIGEgZmlsZSBjYWxsZWQg anVzdCAnLmRlYnVnJy4gIEdEQiBzaG91bGQgbm90IGNoZWNrIHRoaXMKKysgICAgIyBmaWxlLCBi dXQgYXQgb25lIHBvaW50IEdEQiB3b3VsZCBjaGVjayB0aGlzIGZpbGUsIGV2ZW4gdGhvdWdoIHRo aXMKKysgICAgIyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KKysgICAgc2V0IGV4ZWNmaWxlX2Rl YnVnICR7ZXhlY2ZpbGV9LmRlYnVnCisrICAgIHJlbW90ZV9leGVjIGhvc3QgIm12ICRleGVjZmls ZV9kZWJ1ZyAkYnVpbGRfaWRfZGlyLy5kZWJ1ZyIKKysKKysgICAgIyBTdGFydCBHREIsIHNldCB0 aGUgZGVidWctZmlsZS1kaXJlY3RvcnksIGFuZCB0cnkgbG9hZGluZyB0aGUgZmlsZS4KKysgICAg Y2xlYW5fcmVzdGFydAorKworKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInNldCBkZWJ1Zy1maWxl LWRpcmVjdG9yeSAkZGVidWdkaXIiIFwKKysJInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIKKysK KysgICAgZ2RiX2ZpbGVfY21kICRleGVjZmlsZQorKworKyAgICBnZGJfYXNzZXJ0IHsgJDo6Z2Ri X2ZpbGVfY21kX2RlYnVnX2luZm8gZXEgIm5vZGVidWciIH0gXAorKwkibm8gZGVidWcgc2hvdWxk IGJlIGxvYWRlZCIKKysKKysgICAgIyBGb3Igc2FuaXR5LCByZWFkIHNvbWV0aGluZyB0aGF0IHdh cyBlbmNvZGVkIGluIHRoZSBkZWJ1ZworKyAgICAjIGluZm9ybWF0aW9uLCB0aGlzIHNob3VsZCBm YWlsLgorKyAgICBnZGJfdGVzdCAicHJpbnQgdGhlX2ludCIgXAorKwkiKD86Tm8gc3ltYm9sIHRh YmxlIGlzIGxvYWRlZHxObyBzeW1ib2wgXCJ0aGVfaW50XCIgaW4gY3VycmVudCBjb250ZXh0KS4q IgorK30KKysKKytmb3JlYWNoX3dpdGhfcHJlZml4IGJ1aWxkaWQgeyBhNCAiIiB9IHsKKysgICAg cnVuX3Rlc3QgJGJ1aWxkaWQKKyt9CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LW1pc3Npbmctb2JqZmlsZS1saWIuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1taXNzaW5nLW9iamZpbGUtbGliLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9u dWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktbWlzc2luZy1vYmpmaWxlLWxp Yi5jCitAQCAtMCwwICsxLDM1IEBACisrLyogVGhpcyB0ZXN0IHByb2dyYW0gaXMgcGFydCBvZiBH REIsIHRoZSBHTlUgZGVidWdnZXIuCisrCisrICAgQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor KyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysK KysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uICAqLworKworK3N0cnVjdCBsaWJfdHlwZQorK3sKKysgIGludCBhOworKyAgaW50IGI7Cisr fTsKKysKKyt2b2xhdGlsZSBzdHJ1Y3QgbGliX3R5cGUgZ2xvYmFsX2xpYl92YXIgPSB7IDAsIDAg fTsKKysKKytpbnQKKytmb28gKHZvaWQpCisreworKyAgaW50IHJlcyA9IDA7CisrCisrICByZXMg Kz0gZ2xvYmFsX2xpYl92YXIuYTsKKysgIHJlcyArPSBnbG9iYWxfbGliX3Zhci5iOworKworKyAg cmV0dXJuIDA7CisrfQorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1t aXNzaW5nLW9iamZpbGUuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9i amZpbGUuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi90 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUuYworQEAgLTAsMCArMSw0OSBA QAorKy8qIFRoaXMgdGVzdCBwcm9ncmFtIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2Vy LgorKworKyAgIENvcHlyaWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor KworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysjaW5jbHVk ZSA8c3RkbGliLmg+CisrCisrc3RydWN0IGV4ZWNfdHlwZQorK3sKKysgIGludCBhOworKyAgaW50 IGI7CisrICBpbnQgYzsKKyt9OworKworK3ZvbGF0aWxlIHN0cnVjdCBleGVjX3R5cGUgZ2xvYmFs X2V4ZWNfdmFyID0geyAwLCAwLCAwIH07CisrCisrZXh0ZXJuIGludCBmb28gKHZvaWQpOworKwor K3ZvaWQKKytkdW1wX2NvcmUgKHZvaWQpCisreworKyAgYWJvcnQgKCk7CisrfQorKworK2ludAor K21haW4gKHZvaWQpCisreworKyAgaW50IHJlcyA9IGZvbyAoKTsKKysKKysgIHJlcyArPSBnbG9i YWxfZXhlY192YXIuYTsKKysgIHJlcyArPSBnbG9iYWxfZXhlY192YXIuYjsKKysgIHJlcyArPSBn bG9iYWxfZXhlY192YXIuYzsKKysKKysgIGR1bXBfY29yZSAoKTsKKysKKysgIHJldHVybiByZXM7 CisrfQorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9i amZpbGUuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3Npbmctb2JqZmlsZS5l eHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktbWlzc2luZy1vYmpmaWxlLmV4cAorQEAgLTAsMCArMSw1NjUgQEAK KysjIENvcHlyaWdodCAoQykgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysK KysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysj CisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisrbG9hZF9saWIgZ2RiLXB5dGhvbi5l eHAKKysKKytyZXF1aXJlIGFsbG93X3B5dGhvbl90ZXN0cworK3JlcXVpcmUgeyFpc19yZW1vdGUg aG9zdH0KKysKKytzdGFuZGFyZF90ZXN0ZmlsZSAuYyAtbGliLmMKKysKKysjIEJ1aWxkIHRoZSBs aWJyYXJ5LgorK3NldCBsaWJuYW1lICR7dGVzdGZpbGV9LWxpYgorK3NldCBsaWJmaWxlIFtzdGFu ZGFyZF9vdXRwdXRfZmlsZSAkbGlibmFtZV0KKytpZiB7IFtidWlsZF9leGVjdXRhYmxlICJidWls ZCBzaGxpYiIgJGxpYmZpbGUgJHNyY2ZpbGUyIFwKKysJICB7ZGVidWcgc2hsaWIgYnVpbGQtaWR9 XSA9PSAtMX0geworKyAgICByZXR1cm4KKyt9CisrCisrIyBCdWlsZCB0aGUgZXhlY3V0YWJsZS4K KytzZXQgb3B0cyBbbGlzdCBkZWJ1ZyBidWlsZC1pZCBzaGxpYj0ke2xpYmZpbGV9XQorK2lmIHsg W2J1aWxkX2V4ZWN1dGFibGUgImJ1aWxkIGV4ZWMiICRiaW5maWxlICRzcmNmaWxlICRvcHRzXSA9 PSAtMX0geworKyAgICByZXR1cm4KKyt9CisrCisrIyBUaGUgY2Mtd2l0aC1nbnUtZGVidWdsaW5r IGJvYXJkIHdpbGwgc3BsaXQgdGhlIGRlYnVnIG91dCBpbnRvIHRoZQorKyMgLmRlYnVnIGRpcmVj dG9yeS4gIFRoaXMgdGVzdCBzY3JpcHQgcmVsaWVzIG9uIGhhdmluZyBHREIgbG9va3VwIHRoZQor KyMgb2JqZmlsZSBhbmQgZGVidWcgdmlhIHRoZSBidWlsZC1pZCwgd2hpY2ggdGhpcyB0ZXN0IHNl dHMgdXAuICBUcnlpbmcKKysjIHRvIGRvIHRoYXQsIHdoaWxlIGFsc28gc3VwcG9ydGluZyB0aGUg Y2Mtd2l0aC1nbnUtZGVidWdsaW5rIGJvYXJkIGlzCisrIyBqdXN0IHRvbyBjb21wbGljYXRlZC4K KytpZiB7W2ZpbGUgaXNkaXJlY3RvcnkgW3N0YW5kYXJkX291dHB1dF9maWxlICIuZGVidWciXV19 IHsKKysgICAgdW5zdXBwb3J0ZWQgInNwbGl0IGRlYnVnIHRlc3Rpbmcgbm90IHN1cHBvcnRlZCIK KysgICAgcmV0dXJuCisrfQorKworK3NldCByZW1vdGVfcHl0aG9uX2ZpbGUgXAorKyAgICBbZ2Ri X3JlbW90ZV9kb3dubG9hZCBob3N0ICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0ucHld CisrCisrIyBHZW5lcmF0ZSBhIGNvcmUgZmlsZS4KKytzZXQgY29yZWZpbGUgW2NvcmVfZmluZCAk YmluZmlsZSB7fV0KKytpZiB7JGNvcmVmaWxlID09ICIifSB7CisrICAgIHVuc3VwcG9ydGVkICJj b3JlIGZpbGUgbm90IGdlbmVyYXRlZCIKKysgICAgcmV0dXJuIDAKKyt9CisrCisrIyBDcmVhdGUg YSBkaXJlY3RvcnkgbmFtZWQgRElSTkFNRSBmb3IgdXNlIGFzIHRoZQorKyMgZGVidWctZmlsZS1k aXJlY3RvcnkuICBQb3B1bGF0ZSB0aGUgZGlyZWN0b3J5IHdpdGggbGlua3MgKGJhc2VkIG9uCisr IyB0aGUgYnVpbGQtaWRzKSB0byBlYWNoIGZpbGUgaW4gdGhlIGxpc3QgRklMRVMuCisrIworKyMg UmV0dXJuIHRoZSBmdWxsIGZpbGVuYW1lIG9mIERJUk5BTUUgb24gdGhlIGhvc3QuCisrcHJvYyBz ZXR1cF9kZWJ1Z2RpciB7IGRpcm5hbWUgZmlsZXMgfSB7CisrICAgIHNldCBkZWJ1Z2RpciBbaG9z dF9zdGFuZGFyZF9vdXRwdXRfZmlsZSAkZGlybmFtZV0KKysKKysgICAgIyBDcmVhdGUgYmFzaWMg ZW1wdHkgZGlyZWN0b3J5IHN0cnVjdHVyZSAoaW4gY2FzZSBGSUxFUyBpcyBlbXB0eSkuCisrICAg IHJlbW90ZV9leGVjIGhvc3QgIm1rZGlyIC1wICRkZWJ1Z2Rpci8uYnVpbGQtaWQvIgorKworKyAg ICBmb3JlYWNoIGZpbGUgJGZpbGVzIHsKKysJc2V0IGJ1aWxkX2lkX2ZpbGVuYW1lIFtidWlsZF9p ZF9kZWJ1Z19maWxlbmFtZV9nZXQgJGZpbGUgIiJdCisrCisrCXJlbW90ZV9leGVjIGhvc3QgIm1r ZGlyIC1wICRkZWJ1Z2Rpci9bZmlsZSBkaXJuYW1lICRidWlsZF9pZF9maWxlbmFtZV0iCisrCXJl bW90ZV9leGVjIGhvc3QgImxuIC1zICRmaWxlICRkZWJ1Z2Rpci8kYnVpbGRfaWRfZmlsZW5hbWUi CisrICAgIH0KKysKKysgICAgcmV0dXJuICRkZWJ1Z2RpcgorK30KKysKKysjIFF1ZXJ5IHNvbWUg c3ltYm9scyBpbiB0aGUgaW5mZXJpb3IgdG8gc2VlIGlmIEdEQiBtYW5hZ2VkIHRvIGZpbmQgdGhl CisrIyBleGVjdXRhYmxlICh3aGVuIEVYRUNfTE9BREVEIGlzIHRydWUpIGFuZC9vciB0aGUgbGli cmFyeSAod2hlbiBMSUJfTE9BREVECisrIyBpcyB0cnVlKS4KKytwcm9jIGNoZWNrX2xvYWRlZF9k ZWJ1ZyB7IGV4ZWNfbG9hZGVkIGxpYl9sb2FkZWQgfSB7CisrICAgIGlmIHsgJGV4ZWNfbG9hZGVk IH0geworKwlnZGJfdGVzdCAid2hhdGlzIGdsb2JhbF9leGVjX3ZhciIgIl50eXBlID0gdm9sYXRp bGUgc3RydWN0IGV4ZWNfdHlwZSIKKysKKysJaWYgeyAkbGliX2xvYWRlZCB9IHsKKysJICAgIGdk Yl90ZXN0ICJ3aGF0aXMgZ2xvYmFsX2xpYl92YXIiICJedHlwZSA9IHZvbGF0aWxlIHN0cnVjdCBs aWJfdHlwZSIKKysJfSBlbHNlIHsKKysJICAgIGdkYl90ZXN0ICJ3aGF0aXMgZ2xvYmFsX2xpYl92 YXIiIFwKKysJCSJeTm8gc3ltYm9sIFwiZ2xvYmFsX2xpYl92YXJcIiBpbiBjdXJyZW50IGNvbnRl eHRcXC4iCisrCX0KKysgICAgfSBlbHNlIHsKKysJZ2RiX3Rlc3QgIndoYXRpcyBnbG9iYWxfZXhl Y192YXIiIFwKKysJICAgICJeTm8gc3ltYm9sIHRhYmxlIGlzIGxvYWRlZFxcLiAgVXNlIHRoZSBc ImZpbGVcIiBjb21tYW5kXFwuIgorKwlnZGJfdGVzdCAid2hhdGlzIGdsb2JhbF9saWJfdmFyIiBc CisrCSAgICAiXk5vIHN5bWJvbCB0YWJsZSBpcyBsb2FkZWRcXC4gIFVzZSB0aGUgXCJmaWxlXCIg Y29tbWFuZFxcLiIKKysgICAgfQorK30KKysKKysjIExvYWQgdGhlIGdsb2JhbCBjb3JlZmlsZS4g IFRoZSBFWFRSQV9SRSBpcyBjaGVja2VkIGZvciBwcmlvciB0byBHREIKKysjIGFubm91bmNpbmcg dGhhdCB0aGUgY29yZS1maWxlIGhhcyBiZWVuIGxvYWRlZC4KKytwcm9jIGxvYWRfY29yZV9maWxl IHsge2V4dHJhX3JlICIuKiJ9IH0geworKyAgICBnZGJfdGVzdCAiY29yZS1maWxlICQ6OmNvcmVm aWxlIiBcCisrCVttdWx0aV9saW5lIFwKKysJICAgICAiJGV4dHJhX3JlIiBcCisrCSAgICAgIkNv cmUgd2FzIGdlbmVyYXRlZCBieSBcW15cclxuXF0rIiBcCisrCSAgICAgIlByb2dyYW0gdGVybWlu YXRlZCB3aXRoIHNpZ25hbCBTSUdBQlJULCBBYm9ydGVkXFwuIiBcCisrCSAgICAgIlxbXlxyXG5c XSsoPzpcclxuXFteXHJcblxdKyk/Il0gXAorKwkibG9hZGVkIHRoZSBjb3JlIGZpbGUiCisrfQor KworKyMgU2V0IHRoZSBkZWJ1Zy1maWxlLWRpcmVjdG9yeSB0byBESVJOQU1FLgorK3Byb2Mgc2V0 X2RlYnVnX2ZpbGVfZGlyIHsgZGlybmFtZSB9IHsKKysgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJz ZXQgZGVidWctZmlsZS1kaXJlY3RvcnkgJGRpcm5hbWUiIFwKKysJInNldCBkZWJ1Zy1maWxlLWRp cmVjdG9yeSIKKyt9CisrCisrIyBSZXN0YXJ0IEdEQiBhbmQgbG9hZCB0aGUgc3VwcG9ydCBQeXRo b24gc2NyaXB0LgorK3Byb2MgY2xlYW5fcmVzdGFydF9sb2FkX3B5dGhvbiB7fSB7CisrICAgIGNs ZWFuX3Jlc3RhcnQKKysgICAgZ2RiX3Rlc3QgInNvdXJjZSAkOjpyZW1vdGVfcHl0aG9uX2ZpbGUi ICJeU3VjY2VzcyIgXAorKwkibG9hZCBweXRob24gc2NyaXB0IgorK30KKysKKysjIEZvciBzYW5p dHksIGxldHMgY2hlY2sgdGhhdCB3ZSBjYW4gbG9hZCB0aGUgc3BlY2lmeSB0aGUgZXhlY3V0YWJs ZQorKyMgYW5kIHRoZW4gbG9hZCB0aGUgY29yZS1maWxlIHRoZSBlYXN5IHdheS4KKyt3aXRoX3Rl c3RfcHJlZml4ICJpbml0aWFsIHNhbml0eSBjaGVjayIgeworKyAgICBjbGVhbl9yZXN0YXJ0ICRi aW5maWxlCisrICAgIGxvYWRfY29yZV9maWxlCisrICAgIGNoZWNrX2xvYWRlZF9kZWJ1ZyB0cnVl IHRydWUKKyt9CisrCisrIyBNb3ZlIHRoZSBleGVjdXRhYmxlIGFuZCBsaWJyYXJ5IGludG8gYSBs b2NhdGlvbiB0aGF0IHRoZSBjb3JlLWZpbGUKKysjIGNhbid0IHBvc3NpYmx5IGtub3cgYWJvdXQu ICBBZnRlciB0aGlzIHRoZSBvbmx5IHdheSBHREIgY2FuIHRyYWNrCisrIyBkb3duIHRoZXNlIGZp bGVzIHdpbGwgYmUgYnkgbG9va2luZyBpbiB0aGUgZGVidWctZmlsZS1kaXJlY3RvcnkuCisrc2V0 IGhpZGRlbl9kaXIgW2hvc3Rfc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImhpZGRlbiJdCisrc2V0IGhp ZGRlbl9iaW5maWxlICIkaGlkZGVuX2Rpci8kdGVzdGZpbGUiCisrc2V0IGhpZGRlbl9saWJmaWxl ICIkaGlkZGVuX2Rpci8kbGlibmFtZSIKKytyZW1vdGVfZXhlYyBob3N0ICJta2RpciAtcCAkaGlk ZGVuX2RpciIKKytyZW1vdGVfZXhlYyBob3N0ICJtdiAkbGliZmlsZSAkaGlkZGVuX2xpYmZpbGUi CisrcmVtb3RlX2V4ZWMgaG9zdCAibXYgJGJpbmZpbGUgJGhpZGRlbl9iaW5maWxlIgorKworKyMg SWYgdXNpbmcgdGhlIGZpc3Npb24tZHdwIGJvYXJkIHRoZW4gd2UnbGwgaGF2ZSAuZHdwIGZpbGVz IHRoYXQgYWxzbworKyMgbmVlZCB0byBiZSBtb3ZlZC4KKytpZiB7W3JlbW90ZV9maWxlIGhvc3Qg ZXhpc3RzICR7bGliZmlsZX0uZHdwXX0geworKyAgICByZW1vdGVfZXhlYyBob3N0ICJtdiAke2xp YmZpbGV9LmR3cCAke2hpZGRlbl9saWJmaWxlfS5kd3AiCisrfQorKworK2lmIHtbcmVtb3RlX2Zp bGUgaG9zdCBleGlzdHMgJHtiaW5maWxlfS5kd3BdfSB7CisrICAgIHJlbW90ZV9leGVjIGhvc3Qg Im12ICR7YmluZmlsZX0uZHdwICR7aGlkZGVuX2JpbmZpbGV9LmR3cCIKKyt9CisrCisrd2l0aF90 ZXN0X3ByZWZpeCAibm8gb2JqZmlsZXMsIG5vIGRlYnVnLWZpbGUtZGlyZWN0b3J5IiB7CisrICAg IGNsZWFuX3Jlc3RhcnQKKysgICAgbG9hZF9jb3JlX2ZpbGUKKysgICAgY2hlY2tfbG9hZGVkX2Rl YnVnIGZhbHNlIGZhbHNlCisrfQorKworKyMgU2V0dXAgc29tZSBkZWJ1Zy1maWxlLWRpcmVjdG9y aWVzLgorK3NldCBkZWJ1Z2Rpcl9ub19saWIgXAorKyAgICBbc2V0dXBfZGVidWdkaXIgImRlYnVn ZGlyLm5vLWxpYiIgW2xpc3QgIiRoaWRkZW5fYmluZmlsZSJdXQorK3NldCBkZWJ1Z2Rpcl9lbXB0 eSBcCisrICAgIFtzZXR1cF9kZWJ1Z2RpciAiZGVidWdkaXIuZW1wdHkiIHt9XQorK3NldCBkZWJ1 Z2Rpcl9hbGwgXAorKyAgICBbc2V0dXBfZGVidWdkaXIgImRlYnVnZGlyLmFsbCIgW2xpc3QgIiRo aWRkZW5fbGliZmlsZSIgXAorKwkJCQkJIiRoaWRkZW5fYmluZmlsZSJdXQorKworK3dpdGhfdGVz dF9wcmVmaXggIm5vIG9iamZpbGVzIGF2YWlsYWJsZSIgeworKyAgICAjIEFub3RoZXIgc2FuaXR5 IGNoZWNrIHRoYXQgR0RCIGNhbiBmaW5kIHRoZSBmaWxlcyB2aWEgdGhlCisrICAgICMgZGVidWct ZmlsZS1kaXJlY3RvcnkuCisrICAgIGNsZWFuX3Jlc3RhcnQKKysgICAgc2V0X2RlYnVnX2ZpbGVf ZGlyICRkZWJ1Z2Rpcl9lbXB0eQorKyAgICBsb2FkX2NvcmVfZmlsZQorKyAgICBjaGVja19sb2Fk ZWRfZGVidWcgZmFsc2UgZmFsc2UKKyt9CisrCisrd2l0aF90ZXN0X3ByZWZpeCAiYWxsIG9iamZp bGVzIGF2YWlsYWJsZSIgeworKyAgICAjIEFub3RoZXIgc2FuaXR5IGNoZWNrIHRoYXQgR0RCIGNh biBmaW5kIHRoZSBmaWxlcyB2aWEgdGhlCisrICAgICMgZGVidWctZmlsZS1kaXJlY3RvcnkuCisr ICAgIHNldF9kZWJ1Z19maWxlX2RpciAkZGVidWdkaXJfYWxsCisrICAgIGxvYWRfY29yZV9maWxl CisrICAgIGNoZWNrX2xvYWRlZF9kZWJ1ZyB0cnVlIHRydWUKKyt9CisrCisrd2l0aF90ZXN0X3By ZWZpeCAibGliIG9iamZpbGUgbWlzc2luZyIgeworKyAgICAjIEFub3RoZXIgc2FuaXR5IGNoZWNr IHRoYXQgR0RCIGNhbiBmaW5kIHRoZSBmaWxlcyB2aWEgdGhlCisrICAgICMgZGVidWctZmlsZS1k aXJlY3RvcnkuCisrICAgIHNldF9kZWJ1Z19maWxlX2RpciAkZGVidWdkaXJfbm9fbGliCisrICAg IGxvYWRfY29yZV9maWxlCisrICAgIGNoZWNrX2xvYWRlZF9kZWJ1ZyB0cnVlIGZhbHNlCisrfQor KworK3dpdGhfdGVzdF9wcmVmaXggImFsbCBvYmpmaWxlcyBtaXNzaW5nLCBoYW5kbGVyIHJldHVy bnMgTm9uZSIgeworKyAgICBjbGVhbl9yZXN0YXJ0X2xvYWRfcHl0aG9uCisrICAgIGdkYl90ZXN0 X25vX291dHB1dCBcCisrCSJweXRob24gZ2RiLm1pc3Npbmdfb2JqZmlsZS5yZWdpc3Rlcl9oYW5k bGVyKE5vbmUsIGhhbmRsZXJfb2JqKSIgXAorKwkicmVnaXN0ZXIgaW5pdGlhbCBoYW5kbGVyIgor KyAgICBsb2FkX2NvcmVfZmlsZQorKworKyAgICBjaGVja19sb2FkZWRfZGVidWcgZmFsc2UgZmFs c2UKKysKKysgICAgIyBUaGUgaGFuZGxlciBzaG91bGQgYmUgY2FsbGVkIHRocmVlIHRpbWVzLCBv bmNlIGZvciB0aGUKKysgICAgIyBtYXBwZWQtZmlsZSwgb25jZSBmb3IgdGhlIGNvcmUtZmlsZSdz IGV4ZWMsIGFuZCBvbmNlIGZvciB0aGUKKysgICAgIyBzaGFyZWQgbGlicmFyeS4KKysgICAgZ2Ri X3Rlc3QgInB5dGhvbiBwcmludChoYW5kbGVyX29iai5jYWxsX2NvdW50KSIgIl4zIiBcCisrCSJj aGVjayBoYW5kbGVyIHdhcyBjYWxsZWQgdGhyZWUgdGltZXMiCisrfQorKworK3dpdGhfdGVzdF9w cmVmaXggImxpYiBvYmpmaWxlIG1pc3NpbmcsIGhhbmRsZXIgcmV0dXJucyBOb25lIiB7CisrICAg ICMgUmVzZXQgaGFuZGxlcl9vYmouCisrICAgIGdkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGhh bmRsZXJfb2JqLnNldF9tb2RlKE1vZGUuUkVUVVJOX05PTkUpIgorKworKyAgICBzZXRfZGVidWdf ZmlsZV9kaXIgJGRlYnVnZGlyX25vX2xpYgorKyAgICBsb2FkX2NvcmVfZmlsZQorKyAgICBjaGVj a19sb2FkZWRfZGVidWcgdHJ1ZSBmYWxzZQorKworKyAgICAjIFRoZSBoYW5kbGVyIHdpbGwgYmUg Y2FsbGVkIHR3aWNlLCBvbmNlIHdoZW4gR0RCIHRyaWVzIHRvCisrICAgICMgbG9hZCB0aGUgc2hh cmVkIGxpYnJhcnkgZHVyaW5nIHRoZSBtZW1vcnktbWFwcGVkIGZpbGUgcGhhc2UsCisrICAgICMg dGhlbiBhZ2FpbiBmb3IgdGhlIHNoYXJlZCBsaWJyYXJ5IGxvYWRpbmcuCisrICAgIGdkYl90ZXN0 ICJweXRob24gcHJpbnQoaGFuZGxlcl9vYmouY2FsbF9jb3VudCkiICJeMiIgXAorKwkiY2hlY2sg aGFuZGxlciB3YXMgY2FsbGVkIHRocmVlIHRpbWVzIgorK30KKysKKyt3aXRoX3Rlc3RfcHJlZml4 ICJoYW5kbGVyIGluc3RhbGxzIGxpYiBvYmpmaWxlIiB7CisrICAgIHNldCBidWlsZF9pZF9maWxl bmFtZSBbYnVpbGRfaWRfZGVidWdfZmlsZW5hbWVfZ2V0IFwKKysJCQkJICAgJGhpZGRlbl9saWJm aWxlICIiXQorKyAgICByZW1vdGVfZXhlYyBob3N0IFwKKysJIm1rZGlyIC1wICRkZWJ1Z2Rpcl9u b19saWIvW2ZpbGUgZGlybmFtZSAkYnVpbGRfaWRfZmlsZW5hbWVdIgorKyAgICBnZGJfdGVzdF9u b19vdXRwdXQgInB5dGhvbiBoYW5kbGVyX29iai5zZXRfbW9kZShNb2RlLlJFVFVSTl9UUlVFLCBc CisrICAgIAlcIiRoaWRkZW5fbGliZmlsZVwiLCBcIiRkZWJ1Z2Rpcl9ub19saWIvJGJ1aWxkX2lk X2ZpbGVuYW1lXCIpIiBcCisrCSJjb25maWd1cmUgaGFuZGxlciIKKysKKysgICAgbG9hZF9jb3Jl X2ZpbGUKKysgICAgY2hlY2tfbG9hZGVkX2RlYnVnIHRydWUgdHJ1ZQorKworKyAgICAjIENsZWFu dXAgc28gdGhlIHRlc3QgY2FuIGJlIHJlcHJvZHVjZWQgYWdhaW4gbGF0ZXIgaWYgbmVlZGVkLgor KyAgICByZW1vdGVfZXhlYyBob3N0ICJybSAkZGVidWdkaXJfbm9fbGliLyRidWlsZF9pZF9maWxl bmFtZSIKKyt9CisrCisrd2l0aF90ZXN0X3ByZWZpeCAiaGFuZGxlciBwb2ludHMgdG8gbGliIG9i amZpbGUiIHsKKysgICAgc2V0IGJ1aWxkX2lkX2ZpbGVuYW1lIFtidWlsZF9pZF9kZWJ1Z19maWxl bmFtZV9nZXQgXAorKwkJCSAgICAgICAkaGlkZGVuX2xpYmZpbGUgIiJdCisrICAgIHJlbW90ZV9l eGVjIGhvc3QgXAorKwkibWtkaXIgLXAgJGRlYnVnZGlyX25vX2xpYi9bZmlsZSBkaXJuYW1lICRi dWlsZF9pZF9maWxlbmFtZV0iCisrICAgIGdkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGhhbmRs ZXJfb2JqLnNldF9tb2RlKE1vZGUuUkVUVVJOX1NUUklORywgXAorKwkJCQkJCVwiJGhpZGRlbl9s aWJmaWxlXCIpIiBcCisrCSJjb25maWd1cmUgaGFuZGxlciIKKysKKysgICAgbG9hZF9jb3JlX2Zp bGUKKysgICAgY2hlY2tfbG9hZGVkX2RlYnVnIHRydWUgdHJ1ZQorKworKyAgICAjIENsZWFudXAg c28gdGhlIHRlc3QgY2FuIGJlIHJlcHJvZHVjZWQgYWdhaW4gbGF0ZXIgaWYgbmVlZGVkLgorKyAg ICByZW1vdGVfZXhlYyBob3N0ICJybSAkZGVidWdkaXJfbm9fbGliLyRidWlsZF9pZF9maWxlbmFt ZSIKKysKKysgICAgIyBUaGUgaGFuZGxlciB3aWxsIG9ubHkgaGF2ZSBiZWVuIGNhbGxlZCBvbmNl IHdoZW4gbG9hZGluZyB0aGUKKysgICAgIyBtZW1vcnktbWFwcGVkIGZpbGUuICBHREIgaXMgc21h cnQgZW5vdWdoIHRvIHJldXNlIHRoZSBwcmV2aW91c2x5CisrICAgICMgZGlzY292ZXJlZCBCRkQg b2JqZWN0IGFzIHRoZSBzaGFyZWQgbGlicmFyeS4KKysgICAgZ2RiX3Rlc3QgInB5dGhvbiBwcmlu dChoYW5kbGVyX29iai5jYWxsX2NvdW50KSIgIl4xIiBcCisrCSJjaGVjayBnb29kIGhhbmRsZXIg aGFzbid0IGJlZW4gY2FsbGVkIGFnYWluIgorKworKyAgICAjIFZhbGlkYXRlIHRoZSBmaWxlbmFt ZSBhbmQgYnVpbGQtaWQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgaGFuZGxlci4KKysgICAgc2V0 IGV4cGVjdGVkX2J1aWxkaWQgW2dldF9idWlsZF9pZCAkaGlkZGVuX2xpYmZpbGVdCisrICAgIGdk Yl90ZXN0ICJweXRob24gcHJpbnQoaGFuZGxlcl9sYXN0X2J1aWxkaWQpIiAiXiRleHBlY3RlZF9i dWlsZGlkIgorKyAgICBnZGJfdGVzdCAicHl0aG9uIHByaW50KGhhbmRsZXJfbGFzdF9maWxlbmFt ZSkiIFwKKysJIl5bc3RyaW5nX3RvX3JlZ2V4cCAkbGliZmlsZV0iCisrfQorKworKyMgUmVnaXN0 ZXIgYW5vdGhlciBnbG9iYWwgaGFuZGxlciwgdGhpcyBvbmUgcmFpc2VzIGFuIGV4Y2VwdGlvbi4g IFJlbG9hZCB0aGUKKysjIGNvcmUtZmlsZSwgdGhlIGJhZCBoYW5kbGVyIHNob3VsZCBiZSBpbnZv a2VkIGZpcnN0LCB3aGljaCByYWlzZXMgYW4KKysjIGV4Y2V0cHRpb24sIGF0IHdoaWNoIHBvaW50 IEdEQiBzaG91bGQgc2tpcCBmdXJ0aGVyIFB5dGhvbiBoYW5kbGVycy4KKyt3aXRoX3Rlc3RfcHJl Zml4ICJoYW5kbGVyIHJhaXNlcyBhbiBleGNlcHRpb24iIHsKKysgICAgZ2RiX3Rlc3Rfbm9fb3V0 cHV0IFwKKysJInB5dGhvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIoTm9u ZSwgcmhhbmRsZXIpIgorKworKyAgICBmb3JlYWNoX3dpdGhfcHJlZml4IGV4Y2VwdGlvbl90eXBl IHtnZGIuR2RiRXJyb3IgVHlwZUVycm9yfSB7CisrCWdkYl90ZXN0X25vX291dHB1dCBcCisrCSAg ICAicHl0aG9uIHJoYW5kbGVyLmV4Y2VwdGlvbl90eXBlID0gJGV4Y2VwdGlvbl90eXBlIgorKwor KwkjIExvYWQgdGhlIGNvcmUgZmlsZS4gIFdlIGV4cGVjdCB0aGUgZXhjZXB0aW9uIG1lc3NhZ2Ug dG8gYXBwZWFyIGF0CisrCSMgbGVhc3Qgb25jZSBpbiB0aGUgb3V0cHV0LgorKwlzZXQgcmUgW3N0 cmluZ190b19yZWdleHAgXAorKwkJICAgICJQeXRob24gRXhjZXB0aW9uIDxjbGFzcyAnJGV4Y2Vw dGlvbl90eXBlJz46IG1lc3NhZ2UiXQorKwlsb2FkX2NvcmVfZmlsZSAiJHtyZX0uKiIKKysKKysJ IyBPdXIgb3JpZ2luYWwgaGFuZGxlciBpcyBzdGlsbCByZWdpc3RlcmVkLCBidXQgc2hvdWxkIG5v dCBoYXZlIGJlZW4KKysJIyBjYWxsZWQgYWdhaW4gKGFzIHRoZSBleGNlcHRpb24gb2NjdXJzIGZp cnN0KS4KKysJZ2RiX3Rlc3QgInB5dGhvbiBwcmludChoYW5kbGVyX29iai5jYWxsX2NvdW50KSIg Il4xIiBcCisrCSAgICAiY2hlY2sgZ29vZCBoYW5kbGVyIGhhc24ndCBiZWVuIGNhbGxlZCBhZ2Fp biIKKysgICAgfQorK30KKysKKysjIFJlLXN0YXJ0IEdEQi4KKytjbGVhbl9yZXN0YXJ0X2xvYWRf cHl0aG9uCisrCisrIyBBdHRlbXB0IHRvIHJlZ2lzdGVyIGEgbWlzc2luZy1kZWJ1Zy1oYW5kbGVy IHdpdGggTkFNRS4gIFRoZSBleHBlY3RhdGlvbiBpcworKyMgdGhhdCB0aGlzIHNob3VsZCBmYWls IGFzIE5BTUUgY29udGFpbnMgc29tZSBpbnZhbGlkIGNoYXJhY3RlcnMuCisrcHJvYyBjaGVja19i YWRfbmFtZSB7bmFtZX0geworKyAgICBzZXQgbmFtZV9yZSBbc3RyaW5nX3RvX3JlZ2V4cCAkbmFt ZV0KKysgICAgc2V0IHJlIFwKKysJW211bHRpX2xpbmUgXAorKwkgICAgICJWYWx1ZUVycm9yLio6 IGludmFsaWQgY2hhcmFjdGVyICcuJyBpbiBoYW5kbGVyIG5hbWU6ICRuYW1lX3JlIiBcCisrCSAg ICAgIkVycm9yIG9jY3VycmVkIGluIFB5dGhvbi4qIl0KKysKKysgICAgZ2RiX3Rlc3QgInB5dGhv biByZWdpc3RlcihcIiRuYW1lXCIpIiAkcmUgXAorKwkiY2hlY2sgdGhhdCAnJG5hbWUnIGlzIG5v dCBhY2NlcHRlZCIKKyt9CisrCisrIyBXZSBkb24ndCBhdHRlbXB0IHRvIGJlIGV4aGF1c3RpdmUg aGVyZSwganVzdCBjaGVjayBhIGZldyByYW5kb20gZXhhbXBsZXMKKysjIG9mIGludmFsaWQgbmFt ZXMuCisrY2hlY2tfYmFkX25hbWUgIiEhIEJhZCBOYW1lIgorK2NoZWNrX2JhZF9uYW1lICJCYWQg TmFtZSIKKytjaGVja19iYWRfbmFtZSAiKEJhZCBOYW1lKSIKKytjaGVja19iYWRfbmFtZSAiQmFk IFxbTmFtZVxdIgorK2NoZWNrX2JhZF9uYW1lICJCYWQsTmFtZSIKKytjaGVja19iYWRfbmFtZSAi QmFkO05hbWUiCisrCisrIyBDaGVjayB0aGF0IHRoZXJlIGFyZSBubyBoYW5kbGVycyByZWdpc3Rl cmVkLgorK2dkYl90ZXN0X25vX291dHB1dCAiaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcnMi IFwKKysgICAgImNoZWNrIG5vIGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkIgorKworKyMgR3JhYiB0 aGUgY3VycmVudCBwcm9ncmFtIHNwYWNlIG9iamVjdCwgdXNlZCBmb3IgcmVnaXN0ZXJpbmcgaGFu ZGxlciBsYXRlci4KKytnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBwc3BhY2UgPSBnZGIuc2Vs ZWN0ZWRfaW5mZXJpb3IoKS5wcm9nc3BhY2UiCisrCisrIyBOb3cgcmVnaXN0ZXIgc29tZSBoYW5k bGVycy4KKytmb3JlYWNoIGhzcGVjIHt7XCJGb29cIiBOb25lfQorKyAgICB7XCItYmFyXCIgTm9u ZX0KKysgICAge1wiYmF6LVwiIHBzcGFjZX0KKysgICAge1wiYWJjLWRlZlwiIHBzcGFjZX19IHsK KysgICAgbGFzc2lnbiAkaHNwZWMgbmFtZSBsb2N1cworKyAgICBnZGJfdGVzdCAicHl0aG9uIHJl Z2lzdGVyKCRuYW1lLCAkbG9jdXMpIgorK30KKysKKyt3aXRoX3Rlc3RfcHJlZml4ICJhbGwgaGFu ZGxlcnMgZW5hYmxlZCIgeworKyAgICBnZGJfdGVzdCAiaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFu ZGxlcnMiIFwKKysJW211bHRpX2xpbmUgXAorKwkgICAgICJDdXJyZW50IFByb2dzcGFjZToiIFwK KysJICAgICAiICBhYmMtZGVmIiBcCisrCSAgICAgIiAgYmF6LSIgXAorKwkgICAgICJHbG9iYWw6 IiBcCisrCSAgICAgIiAgLWJhciIgXAorKwkgICAgICIgIEZvbyJdCisrCisrICAgIHNldF9kZWJ1 Z19maWxlX2RpciAkZGVidWdkaXJfbm9fbGliCisrICAgIGxvYWRfY29yZV9maWxlCisrCisrICAg ICMgQXMgd2UgcGVyZm9ybSB0d28gbG9vayB1cHMsIGZpcnN0IGZvciB0aGUgbWFwcGVkLWZpbGUg dGhlbiBmb3IgdGhlCisrICAgICMgc2hhcmVkIGxpYnJhcnksIGVhY2ggaGFuZGxlciB3aWxsIGJl IGNhbGxlZCB0d2ljZS4KKysgICAgZ2RiX3Rlc3QgInB5dGhvbiBwcmludChoYW5kbGVyX2NhbGxf bG9nKSIgXAorKwlbc3RyaW5nX3RvX3JlZ2V4cCB7WydhYmMtZGVmJywgJ2Jhei0nLCAnLWJhcics ICdGb28nLCAnYWJjLWRlZicsICdiYXotJywgJy1iYXInLCAnRm9vJ119XQorKyAgICBnZGJfdGVz dF9ub19vdXRwdXQgInB5dGhvbiBoYW5kbGVyX2NhbGxfbG9nID0gXFtcXSIgXAorKwkicmVzZXQg Y2FsbCBsb2ciCisrfQorKworK3dpdGhfdGVzdF9wcmVmaXggImRpc2FibGUgJ2Jhei0nIiB7Cisr ICAgIGdkYl90ZXN0ICJkaXNhYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIHByb2dzcGFjZSBi YXotIiBcCisrCSJeMSBtaXNzaW5nIG9iamZpbGUgaGFuZGxlciBkaXNhYmxlZCIKKysKKysgICAg Z2RiX3Rlc3QgImluZm8gbWlzc2luZy1vYmpmaWxlLWhhbmRsZXJzIiBcCisrCVttdWx0aV9saW5l IFwKKysJICAgICAiUHJvZ3NwYWNlIFxbXlxyXG5cXSs6IiBcCisrCSAgICAgIiAgYWJjLWRlZiIg XAorKwkgICAgICIgIGJhei0gXFxcW2Rpc2FibGVkXFxcXSIgXAorKwkgICAgICJHbG9iYWw6IiBc CisrCSAgICAgIiAgLWJhciIgXAorKwkgICAgICIgIEZvbyJdCisrCisrICAgIGxvYWRfY29yZV9m aWxlCisrICAgIGdkYl90ZXN0ICJweXRob24gcHJpbnQoaGFuZGxlcl9jYWxsX2xvZykiIFwKKysJ W3N0cmluZ190b19yZWdleHAge1snYWJjLWRlZicsICctYmFyJywgJ0ZvbycsICdhYmMtZGVmJywg Jy1iYXInLCAnRm9vJ119XQorKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBoYW5kbGVy X2NhbGxfbG9nID0gXFtcXSIgXAorKwkicmVzZXQgY2FsbCBsb2ciCisrfQorKworK3dpdGhfdGVz dF9wcmVmaXggImRpc2FibGUgJ0ZvbyciIHsKKysgICAgZ2RiX3Rlc3QgImRpc2FibGUgbWlzc2lu Zy1vYmpmaWxlLWhhbmRsZXIgLiogRm9vIiBcCisrCSJeMSBtaXNzaW5nIG9iamZpbGUgaGFuZGxl ciBkaXNhYmxlZCIKKysKKysgICAgZ2RiX3Rlc3QgImluZm8gbWlzc2luZy1vYmpmaWxlLWhhbmRs ZXJzIiBcCisrCVttdWx0aV9saW5lIFwKKysJICAgICAiUHJvZ3NwYWNlIFxbXlxyXG5cXSs6IiBc CisrCSAgICAgIiAgYWJjLWRlZiIgXAorKwkgICAgICIgIGJhei0gXFxcW2Rpc2FibGVkXFxcXSIg XAorKwkgICAgICJHbG9iYWw6IiBcCisrCSAgICAgIiAgLWJhciIgXAorKwkgICAgICIgIEZvbyBc XFxbZGlzYWJsZWRcXFxdIl0KKysKKysgICAgbG9hZF9jb3JlX2ZpbGUKKysgICAgZ2RiX3Rlc3Qg InB5dGhvbiBwcmludChoYW5kbGVyX2NhbGxfbG9nKSIgXAorKwlbc3RyaW5nX3RvX3JlZ2V4cCB7 WydhYmMtZGVmJywgJy1iYXInLCAnYWJjLWRlZicsICctYmFyJ119XQorKyAgICBnZGJfdGVzdF9u b19vdXRwdXQgInB5dGhvbiBoYW5kbGVyX2NhbGxfbG9nID0gXFtcXSIgXAorKwkicmVzZXQgY2Fs bCBsb2ciCisrfQorKworK3dpdGhfdGVzdF9wcmVmaXggImRpc2FibGUgZXZlcnl0aGluZyIgewor KyAgICBnZGJfdGVzdCAiZGlzYWJsZSBtaXNzaW5nLW9iamZpbGUtaGFuZGxlciAuKiAuKiIgXAor KwkiXjIgbWlzc2luZyBvYmpmaWxlIGhhbmRsZXJzIGRpc2FibGVkIgorKworKyAgICBnZGJfdGVz dCAiaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcnMiIFwKKysJW211bHRpX2xpbmUgXAorKwkg ICAgICJQcm9nc3BhY2UgXFteXHJcblxdKzoiIFwKKysJICAgICAiICBhYmMtZGVmIFxcXFtkaXNh YmxlZFxcXF0iIFwKKysJICAgICAiICBiYXotIFxcXFtkaXNhYmxlZFxcXF0iIFwKKysJICAgICAi R2xvYmFsOiIgXAorKwkgICAgICIgIC1iYXIgXFxcW2Rpc2FibGVkXFxcXSIgXAorKwkgICAgICIg IEZvbyBcXFxbZGlzYWJsZWRcXFxdIl0KKysKKysgICAgbG9hZF9jb3JlX2ZpbGUKKysgICAgZ2Ri X3Rlc3QgInB5dGhvbiBwcmludChoYW5kbGVyX2NhbGxfbG9nKSIgXAorKwlbc3RyaW5nX3RvX3Jl Z2V4cCB7W119XQorKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBoYW5kbGVyX2NhbGxf bG9nID0gXFtcXSIgXAorKwkicmVzZXQgY2FsbCBsb2ciCisrfQorKworK3dpdGhfdGVzdF9wcmVm aXggImVuYWJsZSAnYWJjLWRlZiciIHsKKysgICAgc2V0IHJlIFtzdHJpbmdfdG9fcmVnZXhwICRo aWRkZW5fYmluZmlsZV0KKysKKysgICAgZ2RiX3Rlc3QgImVuYWJsZSBtaXNzaW5nLW9iamZpbGUt aGFuZGxlciBcIiRyZVwiIGFiYy1kZWYiIFwKKysJIl4xIG1pc3Npbmcgb2JqZmlsZSBoYW5kbGVy IGVuYWJsZWQiIFwKKysJImVuYWJsZSBtaXNzaW5nLW9iamZpbGUtaGFuZGxlciIKKysKKysgICAg Z2RiX3Rlc3QgImluZm8gbWlzc2luZy1vYmpmaWxlLWhhbmRsZXJzIiBcCisrCVttdWx0aV9saW5l IFwKKysJICAgICAiUHJvZ3NwYWNlIFxbXlxyXG5cXSs6IiBcCisrCSAgICAgIiAgYWJjLWRlZiIg XAorKwkgICAgICIgIGJhei0gXFxcW2Rpc2FibGVkXFxcXSIgXAorKwkgICAgICJHbG9iYWw6IiBc CisrCSAgICAgIiAgLWJhciBcXFxbZGlzYWJsZWRcXFxdIiBcCisrCSAgICAgIiAgRm9vIFxcXFtk aXNhYmxlZFxcXF0iXQorKworKyAgICBsb2FkX2NvcmVfZmlsZQorKyAgICBnZGJfdGVzdCAicHl0 aG9uIHByaW50KGhhbmRsZXJfY2FsbF9sb2cpIiBcCisrCVtzdHJpbmdfdG9fcmVnZXhwIHtbJ2Fi Yy1kZWYnLCAnYWJjLWRlZiddfV0KKysgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJweXRob24gaGFu ZGxlcl9jYWxsX2xvZyA9IFxbXF0iIFwKKysJInJlc2V0IGNhbGwgbG9nIgorK30KKysKKyt3aXRo X3Rlc3RfcHJlZml4ICJlbmFibGUgZ2xvYmFsIGhhbmRsZXJzIiB7CisrICAgIGdkYl90ZXN0ICJl bmFibGUgbWlzc2luZy1vYmpmaWxlLWhhbmRsZXIgZ2xvYmFsIiBcCisrCSJeMiBtaXNzaW5nIG9i amZpbGUgaGFuZGxlcnMgZW5hYmxlZCIKKysKKysgICAgZ2RiX3Rlc3QgImluZm8gbWlzc2luZy1v YmpmaWxlLWhhbmRsZXJzIiBcCisrCVttdWx0aV9saW5lIFwKKysJICAgICAiUHJvZ3NwYWNlIFxb XlxyXG5cXSs6IiBcCisrCSAgICAgIiAgYWJjLWRlZiIgXAorKwkgICAgICIgIGJhei0gXFxcW2Rp c2FibGVkXFxcXSIgXAorKwkgICAgICJHbG9iYWw6IiBcCisrCSAgICAgIiAgLWJhciIgXAorKwkg ICAgICIgIEZvbyJdCisrCisrICAgIGxvYWRfY29yZV9maWxlCisrICAgIGdkYl90ZXN0ICJweXRo b24gcHJpbnQoaGFuZGxlcl9jYWxsX2xvZykiIFwKKysJW3N0cmluZ190b19yZWdleHAge1snYWJj LWRlZicsICctYmFyJywgJ0ZvbycsICdhYmMtZGVmJywgJy1iYXInLCAnRm9vJ119XQorKyAgICBn ZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBoYW5kbGVyX2NhbGxfbG9nID0gXFtcXSIgXAorKwki cmVzZXQgY2FsbCBsb2ciCisrfQorKworKyMgQWRkIGhhbmRsZXJfb2JqIHRvIHRoZSBnbG9iYWwg aGFuZGxlciBsaXN0LCBhbmQgY29uZmlndXJlIGl0IHRvCisrIyByZXR1cm4gRmFsc2UuICBXZSBz aG91bGQgY2FsbCBhbGwgb2YgdGhlIHByb2dyYW0gc3BhY2Ugc3BlY2lmaWMKKysjIGhhbmRsZXJz ICh3aGljaCByZXR1cm4gTm9uZSksIGFuZCB0aGVuIGNhbGwgaGFuZGxlcl9vYmogZnJvbSB0aGUK KysjIGdsb2JhbCBsaXN0LCB3aGljaCByZXR1cm5zIEZhbHNlLCBhdCB3aGljaCBwb2ludCB3ZSBz aG91bGRuJ3QgY2FsbAorKyMgYW55b25lIGVsc2UuCisrd2l0aF90ZXN0X3ByZWZpeCAicmV0dXJu IEZhbHNlIGhhbmRsZXIgaW4gZ2xvYmFsIGxpc3QiIHsKKysgICAgZ2RiX3Rlc3QgImVuYWJsZSBt aXNzaW5nLW9iamZpbGUtaGFuZGxlciBwcm9nc3BhY2UiIFwKKysJIl4xIG1pc3Npbmcgb2JqZmls ZSBoYW5kbGVyIGVuYWJsZWQiCisrCisrICAgIGdkYl90ZXN0X25vX291dHB1dCBcCisrCSJweXRo b24gZ2RiLm1pc3Npbmdfb2JqZmlsZS5yZWdpc3Rlcl9oYW5kbGVyKE5vbmUsIGhhbmRsZXJfb2Jq KSIgXAorKwkicmVnaXN0ZXIgaGFuZGxlcl9vYmogaW4gZ2xvYmFsIGxpc3QiCisrCisrICAgIGdk Yl90ZXN0ICJpbmZvIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVycyIgXAorKwlbbXVsdGlfbGluZSBc CisrCSAgICAgIlByb2dzcGFjZSBcW15cclxuXF0rOiIgXAorKwkgICAgICIgIGFiYy1kZWYiIFwK KysJICAgICAiICBiYXotIiBcCisrCSAgICAgIkdsb2JhbDoiIFwKKysJICAgICAiICBoYW5kbGVy IiBcCisrCSAgICAgIiAgLWJhciIgXAorKwkgICAgICIgIEZvbyJdCisrCisrICAgIGdkYl90ZXN0 X25vX291dHB1dCAicHl0aG9uIGhhbmRsZXJfb2JqLnNldF9tb2RlKE1vZGUuUkVUVVJOX0ZBTFNF KSIgXAorKwkiY29uZmlyZ3VyZSBoYW5kbGVyIgorKworKyAgICBsb2FkX2NvcmVfZmlsZQorKyAg ICBnZGJfdGVzdCAicHl0aG9uIHByaW50KGhhbmRsZXJfY2FsbF9sb2cpIiBcCisrCVtzdHJpbmdf dG9fcmVnZXhwIHtbJ2FiYy1kZWYnLCAnYmF6LScsICdoYW5kbGVyJywgJ2FiYy1kZWYnLCAnYmF6 LScsICdoYW5kbGVyJ119XQorKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBoYW5kbGVy X2NhbGxfbG9nID0gXFtcXSIgXAorKwkicmVzZXQgY2FsbCBsb2ciCisrfQorKworKyMgTm93IGFk ZCBoYW5kbGVyX29iaiB0byB0aGUgY3VycmVudCBwcm9ncmFtIHNwYWNlJ3MgaGFuZGxlciBsaXN0 LiAgV2UKKysjIHVzZSB0aGUgc2FtZSBoYW5kbGVyIG9iamVjdCBoZXJlLCB0aGF0J3MgZmluZS4g IFdlIHNob3VsZCBvbmx5IHNlZSBhCisrIyBjYWxsIHRvIHRoZSBmaXJzdCBoYW5kbGVyIG9iamVj dCBpbiB0aGUgY2FsbCBsb2cuCisrd2l0aF90ZXN0X3ByZWZpeCAicmV0dXJuIEZhbHNlIGhhbmRs ZXIgaW4gcHJvZ3NwYWNlIGxpc3QiIHsKKysgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0IFwKKysJInB5 dGhvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIocHNwYWNlLCBoYW5kbGVy X29iaikiIFwKKysJInJlZ2lzdGVyIGhhbmRsZXJfb2JqIGluIHByb2dzcGFjZSBsaXN0IgorKwor KyAgICBnZGJfdGVzdCAiaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcnMiIFwKKysJW211bHRp X2xpbmUgXAorKwkgICAgICJQcm9nc3BhY2UgXFteXHJcblxdKzoiIFwKKysJICAgICAiICBoYW5k bGVyIiBcCisrCSAgICAgIiAgYWJjLWRlZiIgXAorKwkgICAgICIgIGJhei0iIFwKKysJICAgICAi R2xvYmFsOiIgXAorKwkgICAgICIgIGhhbmRsZXIiIFwKKysJICAgICAiICAtYmFyIiBcCisrCSAg ICAgIiAgRm9vIl0KKysKKysgICAgbG9hZF9jb3JlX2ZpbGUKKysgICAgZ2RiX3Rlc3QgInB5dGhv biBwcmludChoYW5kbGVyX2NhbGxfbG9nKSIgXAorKwlbc3RyaW5nX3RvX3JlZ2V4cCB7WydoYW5k bGVyJywgJ2hhbmRsZXInXX1dCisrICAgIGdkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGhhbmRs ZXJfY2FsbF9sb2cgPSBcW1xdIiBcCisrCSJyZXNldCBjYWxsIGxvZyIKKyt9CisrCisrd2l0aF90 ZXN0X3ByZWZpeCAiY2hlY2sgaGFuZGxlciByZXBsYWNlbWVudCIgeworKyAgICAjIEZpcnN0LCBj aGVjayB3ZSBjYW4gaGF2ZSB0aGUgc2FtZSBuYW1lIGFwcGVhciBpbiBib3RoIHByb2dyYW0KKysg ICAgIyBzcGFjZSBhbmQgZ2xvYmFsIGxpc3RzIHdpdGhvdXQgZ2l2aW5nIGFuIGVycm9yLgorKyAg ICBnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiByZWdpc3RlcihcIkZvb1wiLCBwc3BhY2UpIgor KworKyAgICBnZGJfdGVzdCAiaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcnMiIFwKKysJW211 bHRpX2xpbmUgXAorKwkgICAgICJQcm9nc3BhY2UgXFteXHJcblxdKzoiIFwKKysJICAgICAiICBG b28iIFwKKysJICAgICAiICBoYW5kbGVyIiBcCisrCSAgICAgIiAgYWJjLWRlZiIgXAorKwkgICAg ICIgIGJhei0iIFwKKysJICAgICAiR2xvYmFsOiIgXAorKwkgICAgICIgIGhhbmRsZXIiIFwKKysJ ICAgICAiICAtYmFyIiBcCisrCSAgICAgIiAgRm9vIl0KKysKKysgICAgIyBOb3cgY2hlY2sgdGhh dCB3ZSBnZXQgYW4gZXJyb3IgaWYgd2UgdHJ5IHRvIGFkZCBhIGhhbmRsZXIgd2l0aAorKyAgICAj IHRoZSBzYW1lIG5hbWUuCisrICAgIGdkYl90ZXN0ICJweXRob24gZ2RiLm1pc3Npbmdfb2JqZmls ZS5yZWdpc3Rlcl9oYW5kbGVyKHBzcGFjZSwgbG9nX2hhbmRsZXIoXCJGb29cIikpIiBcCisrCVtt dWx0aV9saW5lIFwKKysJICAgICAiUnVudGltZUVycm9yLio6IEhhbmRsZXIgRm9vIGFscmVhZHkg ZXhpc3RzXFwuIiBcCisrCSAgICAgIkVycm9yIG9jY3VycmVkIGluIFB5dGhvbi4qIl0KKysKKysg ICAgZ2RiX3Rlc3QgInB5dGhvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIo aGFuZGxlcj1sb2dfaGFuZGxlcihcIkZvb1wiKSwgbG9jdXM9cHNwYWNlKSIgXAorKwlbbXVsdGlf bGluZSBcCisrCSAgICAgIlJ1bnRpbWVFcnJvci4qOiBIYW5kbGVyIEZvbyBhbHJlYWR5IGV4aXN0 c1xcLiIgXAorKwkgICAgICJFcnJvciBvY2N1cnJlZCBpbiBQeXRob24uKiJdCisrCisrICAgICMg QW5kIG5vdyB0cnkgYWdhaW4sIGJ1dCB0aGlzIHRpbWUgd2l0aCAncmVwbGFjZT1UcnVlJywgd2UK KysgICAgIyBzaG91bGRuJ3QgZ2V0IGFuIGVycm9yIGluIHRoaXMgY2FzZS4KKysgICAgZ2RiX3Rl c3Rfbm9fb3V0cHV0IFwKKysJInB5dGhvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hh bmRsZXIocHNwYWNlLCBsb2dfaGFuZGxlcihcIkZvb1wiKSwgcmVwbGFjZT1UcnVlKSIKKysKKysg ICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0IFwKKysJInB5dGhvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJl Z2lzdGVyX2hhbmRsZXIoaGFuZGxlcj1sb2dfaGFuZGxlcihcIkZvb1wiKSwgbG9jdXM9Tm9uZSwg cmVwbGFjZT1UcnVlKSIKKysKKysgICAgIyBOb3cgZGlzYWJsZSBhIGhhbmRsZXIgYW5kIGNoZWNr IHdlIHN0aWxsIG5lZWQgdG8gdXNlICdyZXBsYWNlPVRydWUnLgorKyAgICBnZGJfdGVzdCAiZGlz YWJsZSBtaXNzaW5nLW9iamZpbGUtaGFuZGxlciBwcm9nc3BhY2UgRm9vIiBcCisrCSJeMSBtaXNz aW5nIG9iamZpbGUgaGFuZGxlciBkaXNhYmxlZCIKKysKKysgICAgZ2RiX3Rlc3QgInB5dGhvbiBn ZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIocHNwYWNlLCBsb2dfaGFuZGxlcihc IkZvb1wiKSkiIFwKKysJW211bHRpX2xpbmUgXAorKwkgICAgICJSdW50aW1lRXJyb3IuKjogSGFu ZGxlciBGb28gYWxyZWFkeSBleGlzdHNcXC4iIFwKKysJICAgICAiRXJyb3Igb2NjdXJyZWQgaW4g UHl0aG9uLioiXSBcCisrCSJzdGlsbCBnZXQgYW4gZXJyb3Igd2hlbiBoYW5kbGVyIGlzIGRpc2Fi bGVkIgorKworKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgXAorKwkicHl0aG9uIGdkYi5taXNzaW5n X29iamZpbGUucmVnaXN0ZXJfaGFuZGxlcihwc3BhY2UsIGxvZ19oYW5kbGVyKFwiRm9vXCIpLCBy ZXBsYWNlPVRydWUpIiBcCisrCSJjYW4gcmVwbGFjZSBhIGRpc2FibGVkIGhhbmRsZXIiCisrfQor ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUu cHkgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktbWlzc2luZy1vYmpmaWxlLnB5CituZXcg ZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LW1pc3Npbmctb2JqZmlsZS5weQorQEAgLTAsMCArMSwxNjcgQEAKKysjIENvcHly aWdodCAoQykgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisraW1wb3J0IHNodXRpbAorK2ltcG9ydCBvcworK2Zy b20gZW51bSBpbXBvcnQgRW51bQorKworK2ltcG9ydCBnZGIKKytmcm9tIGdkYi5taXNzaW5nX29i amZpbGUgaW1wb3J0IE1pc3NpbmdPYmpmaWxlSGFuZGxlcgorKworKyMgQSBnbG9iYWwgbG9nIHRo YXQgaXMgZmlsbGVkIGluIGJ5IGluc3RhbmNlcyBvZiB0aGUgTE9HX0hBTkRMRVIgY2xhc3MKKysj IHdoZW4gdGhleSBhcmUgY2FsbGVkLgorK2hhbmRsZXJfY2FsbF9sb2cgPSBbXQorKworKyMgQSBn bG9iYWwgaG9sZGluZyBhIHN0cmluZywgdGhlIGJ1aWxkLWlkIG9mIHRoZSBsYXN0IG1pc3Npbmcg b2JqZmlsZQorKyMgd2hpY2ggdHJpZ2dlcmVkIHRoZSAnaGFuZGxlcicgY2xhc3MgYmVsb3cuICBU aGlzIGlzIHNldCBpbiB0aGUKKysjIF9fY2FsbF9fIG1ldGhvZCBvZiB0aGUgJ2hhbmRsZXInIGNs YXNzIGFuZCB0aGVuIGNoZWNrZWQgZnJvbSB0aGUKKysjIGV4cGVjdCBzY3JpcHQuCisraGFuZGxl cl9sYXN0X2J1aWxkaWQgPSBOb25lCisrCisrCisrIyBBIGdsb2JhbCBob2xkaW5nIGEgc3RyaW5n LCB0aGUgZmlsZW5hbWUgb2YgdGhlIGxhc3QgbWlzc2luZyBvYmpmaWxlCisrIyB3aGljaCB0cmln Z2VyZWQgdGhlICdoYW5kbGVyJyBjbGFzcyBiZWxvdy4gIFRoaXMgaXMgc2V0IGluIHRoZQorKyMg X19jYWxsX18gbWV0aG9kIG9mIHRoZSAnaGFuZGxlcicgY2xhc3MgYW5kIHRoZW4gY2hlY2tlZCBm cm9tIHRoZQorKyMgZXhwZWN0IHNjcmlwdC4KKytoYW5kbGVyX2xhc3RfZmlsZW5hbWUgPSBOb25l CisrCisrCisrIyBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IG1ha2VzIHNvbWUgYXNzZXJ0aW9ucyBh Ym91dCB0aGUgYXJndW1lbnRzCisrIyBwYXNzZWQgdG8gYSBNaXNzaW5nT2JqZmlsZUhhbmRsZXIu X19jYWxsX18oKSBtZXRob2QuCisrZGVmIGNoZWNrX2FyZ3MocHNwYWNlLCBidWlsZGlkLCBmaWxl bmFtZSk6CisrICAgIGFzc2VydCB0eXBlKGZpbGVuYW1lKSA9PSBzdHIKKysgICAgYXNzZXJ0IGZp bGVuYW1lICE9ICIiCisrICAgIGFzc2VydCB0eXBlKHBzcGFjZSkgPT0gZ2RiLlByb2dzcGFjZQor KyAgICBhc3NlcnQgdHlwZShidWlsZGlkKSA9PSBzdHIKKysgICAgYXNzZXJ0IGJ1aWxkaWQgIT0g IiIKKysKKysKKysjIEVudW0gdXNlZCB0byBjb25maWd1cmUgdGhlICdoYW5kbGVyJyBjbGFzcyBm cm9tIHRoZSB0ZXN0IHNjcmlwdC4KKytjbGFzcyBNb2RlKEVudW0pOgorKyAgICBSRVRVUk5fTk9O RSA9IDAKKysgICAgUkVUVVJOX1RSVUUgPSAxCisrICAgIFJFVFVSTl9GQUxTRSA9IDIKKysgICAg UkVUVVJOX1NUUklORyA9IDMKKysKKysKKysjIEEgbWlzc2luZyBvYmpmaWxlIGhhbmRsZXIgd2hp Y2ggY2FuIGJlIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIGVhY2ggb2YKKysjIHRoZSBkaWZmZXJlbnQg cG9zc2libGUgcmV0dXJuIHR5cGVzLgorK2NsYXNzIGhhbmRsZXIoTWlzc2luZ09iamZpbGVIYW5k bGVyKToKKysgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorKyAgICAgICAgc3VwZXIoKS5fX2luaXRf XygiaGFuZGxlciIpCisrICAgICAgICBzZWxmLl9jYWxsX2NvdW50ID0gMAorKyAgICAgICAgc2Vs Zi5fbW9kZSA9IE1vZGUuUkVUVVJOX05PTkUKKysKKysgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBz cGFjZSwgYnVpbGRpZCwgZmlsZW5hbWUpOgorKyAgICAgICAgZ2xvYmFsIGhhbmRsZXJfY2FsbF9s b2csIGhhbmRsZXJfbGFzdF9idWlsZGlkLCBoYW5kbGVyX2xhc3RfZmlsZW5hbWUKKysgICAgICAg IGNoZWNrX2FyZ3MocHNwYWNlLCBidWlsZGlkLCBmaWxlbmFtZSkKKysgICAgICAgIGhhbmRsZXJf Y2FsbF9sb2cuYXBwZW5kKHNlbGYubmFtZSkKKysgICAgICAgIGhhbmRsZXJfbGFzdF9idWlsZGlk ID0gYnVpbGRpZAorKyAgICAgICAgaGFuZGxlcl9sYXN0X2ZpbGVuYW1lID0gZmlsZW5hbWUKKysg ICAgICAgIHNlbGYuX2NhbGxfY291bnQgKz0gMQorKyAgICAgICAgaWYgc2VsZi5fbW9kZSA9PSBN b2RlLlJFVFVSTl9OT05FOgorKyAgICAgICAgICAgIHJldHVybiBOb25lCisrCisrICAgICAgICBp ZiBzZWxmLl9tb2RlID09IE1vZGUuUkVUVVJOX1RSVUU6CisrICAgICAgICAgICAgc2h1dGlsLmNv cHkoc2VsZi5fc3JjLCBzZWxmLl9kZXN0KQorKworKyAgICAgICAgICAgICMgSWYgd2UncmUgdXNp bmcgdGhlIGZpc3Npb24tZHdwIGJvYXJkIHRoZW4gdGhlcmUgd2lsbAorKyAgICAgICAgICAgICMg YWxzbyBiZSBhIC5kd3AgZmlsZSB0aGF0IG5lZWRzIHRvIGJlIGNvcGllZC4KKysgICAgICAgICAg ICBkd3Bfc3JjID0gc2VsZi5fc3JjICsgIi5kd3AiCisrICAgICAgICAgICAgaWYgb3MucGF0aC5l eGlzdHMoZHdwX3NyYyk6CisrICAgICAgICAgICAgICAgIGR3cF9kZXN0ID0gc2VsZi5fZGVzdCAr ICIuZHdwIgorKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weShkd3Bfc3JjLCBkd3BfZGVzdCkK KysKKysgICAgICAgICAgICByZXR1cm4gVHJ1ZQorKworKyAgICAgICAgaWYgc2VsZi5fbW9kZSA9 PSBNb2RlLlJFVFVSTl9GQUxTRToKKysgICAgICAgICAgICByZXR1cm4gRmFsc2UKKysKKysgICAg ICAgIGlmIHNlbGYuX21vZGUgPT0gTW9kZS5SRVRVUk5fU1RSSU5HOgorKyAgICAgICAgICAgIHJl dHVybiBzZWxmLl9kZXN0CisrCisrICAgICAgICBhc3NlcnQgRmFsc2UKKysKKysgICAgQHByb3Bl cnR5CisrICAgIGRlZiBjYWxsX2NvdW50KHNlbGYpOgorKyAgICAgICAgIiIiUmV0dXJuIGEgY291 bnQsIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gX19jYWxsX18gc2luY2UgdGhlIGxhc3QKKysgICAg ICAgIGNhbGwgdG8gc2V0X21vZGUuCisrICAgICAgICAiIiIKKysgICAgICAgIHJldHVybiBzZWxm Ll9jYWxsX2NvdW50CisrCisrICAgIGRlZiBzZXRfbW9kZShzZWxmLCBtb2RlLCAqYXJncyk6Cisr ICAgICAgICBzZWxmLl9jYWxsX2NvdW50ID0gMAorKyAgICAgICAgc2VsZi5fbW9kZSA9IG1vZGUK KysKKysgICAgICAgIGlmIG1vZGUgPT0gTW9kZS5SRVRVUk5fTk9ORToKKysgICAgICAgICAgICBh c3NlcnQgbGVuKGFyZ3MpID09IDAKKysgICAgICAgICAgICByZXR1cm4KKysKKysgICAgICAgIGlm IG1vZGUgPT0gTW9kZS5SRVRVUk5fVFJVRToKKysgICAgICAgICAgICBhc3NlcnQgbGVuKGFyZ3Mp ID09IDIKKysgICAgICAgICAgICBzZWxmLl9zcmMgPSBhcmdzWzBdCisrICAgICAgICAgICAgc2Vs Zi5fZGVzdCA9IGFyZ3NbMV0KKysgICAgICAgICAgICByZXR1cm4KKysKKysgICAgICAgIGlmIG1v ZGUgPT0gTW9kZS5SRVRVUk5fRkFMU0U6CisrICAgICAgICAgICAgYXNzZXJ0IGxlbihhcmdzKSA9 PSAwCisrICAgICAgICAgICAgcmV0dXJuCisrCisrICAgICAgICBpZiBtb2RlID09IE1vZGUuUkVU VVJOX1NUUklORzoKKysgICAgICAgICAgICBhc3NlcnQgbGVuKGFyZ3MpID09IDEKKysgICAgICAg ICAgICBzZWxmLl9kZXN0ID0gYXJnc1swXQorKyAgICAgICAgICAgIHJldHVybgorKworKyAgICAg ICAgYXNzZXJ0IEZhbHNlCisrCisrCisrIyBBIG1pc3Npbmcgb2JqZmlsZSBoYW5kbGVyIHdoaWNo IHJhaXNlcyBhbiBleGNlcHRpb24uICBUaGUgdHlwZSBvZgorKyMgZXhjZXB0aW9uIHRvIGJlIHJh aXNlZCBpcyBjb25maWd1cmVkIGZyb20gdGhlIHRlc3Qgc2NyaXB0LgorK2NsYXNzIGV4Y2VwdGlv bl9oYW5kbGVyKE1pc3NpbmdPYmpmaWxlSGFuZGxlcik6CisrICAgIGRlZiBfX2luaXRfXyhzZWxm KToKKysgICAgICAgIHN1cGVyKCkuX19pbml0X18oImV4Y2VwdGlvbl9oYW5kbGVyIikKKysgICAg ICAgIHNlbGYuZXhjZXB0aW9uX3R5cGUgPSBOb25lCisrCisrICAgIGRlZiBfX2NhbGxfXyhzZWxm LCBwc3BhY2UsIGJ1aWxkaWQsIGZpbGVuYW1lKToKKysgICAgICAgIGdsb2JhbCBoYW5kbGVyX2Nh bGxfbG9nCisrICAgICAgICBjaGVja19hcmdzKHBzcGFjZSwgYnVpbGRpZCwgZmlsZW5hbWUpCisr ICAgICAgICBoYW5kbGVyX2NhbGxfbG9nLmFwcGVuZChzZWxmLm5hbWUpCisrICAgICAgICBhc3Nl cnQgc2VsZi5leGNlcHRpb25fdHlwZSBpcyBub3QgTm9uZQorKyAgICAgICAgcmFpc2Ugc2VsZi5l eGNlcHRpb25fdHlwZSgibWVzc2FnZSIpCisrCisrCisrIyBBIHZlcnkgc2ltcGxlIGxvZ2dpbmcg bWlzc2luZyBvYmpmaWxlIGhhbmRsZXIuICBBbHdheXMgcmV0dXJucyBOb25lCisrIyBzbyB0aGF0 IEdEQiB3aWxsIHRyeSBhbnkgb3RoZXIgcmVnaXN0ZXJlZCBoYW5kbGVycywgYnV0IGZpcnN0IGxv Z3MKKysjIHRoZSBuYW1lIG9mIHRoaXMgaGFuZGxlciBpbnRvIHRoZSBnbG9iYWwgSEFORExFUl9D QUxMX0xPRywgd2hpY2ggY2FuCisrIyB0aGVuIGJlIGNoZWNrZWQgZnJvbSB0aGUgdGVzdCBzY3Jp cHQuCisrY2xhc3MgbG9nX2hhbmRsZXIoTWlzc2luZ09iamZpbGVIYW5kbGVyKToKKysgICAgZGVm IF9fY2FsbF9fKHNlbGYsIHBzcGFjZSwgYnVpbGRpZCwgZmlsZW5hbWUpOgorKyAgICAgICAgZ2xv YmFsIGhhbmRsZXJfY2FsbF9sb2cKKysgICAgICAgIGNoZWNrX2FyZ3MocHNwYWNlLCBidWlsZGlk LCBmaWxlbmFtZSkKKysgICAgICAgIGhhbmRsZXJfY2FsbF9sb2cuYXBwZW5kKHNlbGYubmFtZSkK KysgICAgICAgIHJldHVybiBOb25lCisrCisrCisrIyBBIGJhc2ljIGhlbHBlciBmdW5jdGlvbiwg dGhpcyBrZWVwcyBsaW5lcyBzaG9ydGVyIGluIHRoZSBUQ0wgc2NyaXB0LgorK2RlZiByZWdpc3Rl cihuYW1lLCBsb2N1cz1Ob25lKToKKysgICAgZ2RiLm1pc3Npbmdfb2JqZmlsZS5yZWdpc3Rlcl9o YW5kbGVyKGxvY3VzLCBsb2dfaGFuZGxlcihuYW1lKSkKKysKKysKKysjIENyZWF0ZSBpbnN0YW5j ZXMgb2YgdGhlIGhhbmRsZXJzLCBidXQgZG9uJ3QgaW5zdGFsbCBhbnkuICBXZSBpbnN0YWxsCisr IyB0aGVzZSBhcyBuZWVkZWQgZnJvbSB0aGUgVENMIHNjcmlwdC4KKytyaGFuZGxlciA9IGV4Y2Vw dGlvbl9oYW5kbGVyKCkKKytoYW5kbGVyX29iaiA9IGhhbmRsZXIoKQorKworK3ByaW50KCJTdWNj ZXNzIikKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5zZXJ2ZXIvYnVpbGQtaWQtc2Vx bm8uYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnNlcnZlci9idWlsZC1pZC1zZXFuby5jCituZXcgZmls ZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuc2Vy dmVyL2J1aWxkLWlkLXNlcW5vLmMKK0BAIC0wLDAgKzEsMjIgQEAKKysvKiBUaGlzIHRlc3RjYXNl IGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorKworKyAgIENvcHlyaWdodCAyMDI0 IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor KyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKytpbnQKKyttYWluICh2b2lkKQorK3sKKysgIHJldHVy biAwOworK30KK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5zZXJ2ZXIvYnVpbGQtaWQt c2Vxbm8uZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuc2VydmVyL2J1aWxkLWlkLXNlcW5vLmV4cAor bmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi90ZXN0c3VpdGUv Z2RiLnNlcnZlci9idWlsZC1pZC1zZXFuby5leHAKK0BAIC0wLDAgKzEsMTk4IEBACisrIyBUaGlz IHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorKyMKKysjIENvcHly aWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMKKysjIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisrCisrIyBTZXR1cCBhIC5idWlsZC1pZC8gYmFzZWQgZGVidWcg ZGlyZWN0b3J5IGNvbnRhaW5pbmcgbXVsdGlwbGUgZW50cmllcworKyMgZm9yIHRoZSBzYW1lIGJ1 aWxkLWlkLCB3aXRoIGVhY2ggZW50cnkgZ2l2ZW4gYSBkaWZmZXJlbnQgc2VxdWVuY2UKKysjIG51 bWJlci4KKysjCisrIyBFbnN1cmUgdGhhdCBHREIgd2lsbCBzY2FuIG92ZXIgYnJva2VuIHN5bWxp bmtzIGZvciB0aGUgc2FtZSBidWlsZC1pZAorKyMgKGJ1dCBkaWZmZXJlbnQgc2VxdWVuY2UgbnVt YmVyKSB0byBmaW5kIGxhdGVyIHdvcmtpbmcgc3ltbGlua3MuCisrIworKyMgVGhpcyB0ZXN0IHBs YWNlcyB0aGUgYnVpbGQtaWQgZmlsZXMgd2l0aGluIGEgZGlyZWN0b3J5IG5leHQgdG8gd2hlcmUK KysjIGdkYnNlcnZlciBpcyBzdGFydGVkLCBhbmQgcGxhY2VzIGEgcmVsYXRpdmUgYWRkcmVzcyBp biB0aGUKKysjIGRlYnVnLWZpbGUtZGlyZWN0b3J5LCBpbiB0aGlzIHdheSB3ZSByZXF1aXJlIEdE QiB0byBmaW5kIHRoZSBkZWJ1ZworKyMgaW5mb3JtYXRpb24gdmlhIGdkYnNlcnZlci4KKysKKyty ZXF1aXJlIHshaXNfcmVtb3RlIGhvc3R9CisrCisrbG9hZF9saWIgZ2Ric2VydmVyLXN1cHBvcnQu ZXhwCisrCisrc3RhbmRhcmRfdGVzdGZpbGUKKysKKytpZiB7W2J1aWxkX2V4ZWN1dGFibGUgImZh aWxlZCB0byBwcmVwYXJlIiAkdGVzdGZpbGUgJHNyY2ZpbGVdID09IC0xfSB7CisrICAgIHJldHVy biAtMQorK30KKysKKysjIFNwbGl0IG91dCBCSU5GSUxFLmRlYnVnLiAgUmVtb3ZlIGRlYnVnIGZy b20gQklORklMRS4KKytpZiB7W2dkYl9nbnVfc3RyaXBfZGVidWcgJGJpbmZpbGVdICE9IDB9IHsK KysgICAgcmV0dXJuIC0xCisrfQorKworKyMgR2V0IHRoZSAnLmJ1aWxkLWlkL3h4L3h4eC4uLnh4 eCcgcGFydCBvZiB0aGUgZmlsZW5hbWUuCisrc2V0IGJ1aWxkX2lkX2ZpbGVuYW1lIFtidWlsZF9p ZF9kZWJ1Z19maWxlbmFtZV9nZXQgJGJpbmZpbGVdCisrCisrIyBIaWRlIChyZW5hbWUpIEJJTkZJ TEUuZGVidWcsIHRoaXMgc2hvdWxkIGVuc3VyZSBHREIgY2FuJ3QgZmluZCBpdAorKyMgZGlyZWN0 bHkgYnV0IG5lZWRzIHRvIGxvb2sgZm9yIHRoZSBidWlsZC1pZCBiYXNlZCBmaWxlIGluIHRoZSBk ZWJ1ZworKyMgZGlyZWN0b3J5LgorK3NldCBoaWRkZW5fZGVidWdpbmZvIFtzdGFuZGFyZF9vdXRw dXRfZmlsZSAiaGlkZGVuXyR0ZXN0ZmlsZS5kZWJ1ZyJdCisrcmVtb3RlX2V4ZWMgYnVpbGQgIm12 ICR7YmluZmlsZX0uZGVidWcgJGhpZGRlbl9kZWJ1Z2luZm8iCisrCisrIyBBIGZpbGVuYW1lIHRo YXQgZG9lc24ndCBleGlzdC4gIFNvbWUgc3ltbGlua3Mgd2lsbCBwb2ludCBhdCB0aGlzCisrIyBm aWxlLgorK3NldCBtaXNzaW5nX2RlYnVnaW5mbyAibWlzc2luZ19kZWJ1Z2luZm8iCisrCisrIyBI ZWxwZXIgY2FsbGVkIGZyb20gZ2RiX2ZpbmlzaCB3aGVuIHRoZSAndGFyZ2V0JyBpcyByZW1vdGUu ICBFbnN1cmUgdGhlCisrIyBkZWJ1ZyBkaXJlY3Rvcnkgd2UgY3JlYXRlIGlzIGRlbGV0ZWQuCisr cHJvYyBjbGVhbnVwX3JlbW90ZV90YXJnZXQge30geworKyAgICByZW1vdGVfZXhlYyB0YXJnZXQg InJtIC1mciBkZWJ1Zy8iCisrfQorKworK2lmIHsgIVtpc19yZW1vdGUgdGFyZ2V0XSB9IHsKKysg ICAgc2V0IGdkYnNlcnZlcl9kaXIgW3N0YW5kYXJkX291dHB1dF9maWxlICJnZGJzZXJ2ZXItZGly Il0vCisrfSBlbHNlIHsKKysgICAgbGFwcGVuZCBnZGJfZmluaXNoX2hvb2tzIGNsZWFudXBfcmVt b3RlX3RhcmdldAorKyAgICBzZXQgZ2Ric2VydmVyX2RpciAiIgorK30KKysKKysjIENvcHkgZmls ZXMgdG8gdGhlIHRhcmdldCAoaWYgbmVlZGVkKS4KKytzZXQgdGFyZ2V0X2JpbmZpbGUgW2dkYl9y ZW1vdGVfZG93bmxvYWQgdGFyZ2V0ICRiaW5maWxlXQorK3NldCB0YXJnZXRfZGVidWdpbmZvIFtn ZGJfcmVtb3RlX2Rvd25sb2FkIHRhcmdldCAkaGlkZGVuX2RlYnVnaW5mb10KKysKKysjIFNldHVw IHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiB0aGUgdGFyZ2V0LgorK3NldCBkZWJ1Z2RpciAiJHtn ZGJzZXJ2ZXJfZGlyfWRlYnVnIgorK3JlbW90ZV9leGVjIHRhcmdldCBcCisrICAgICJta2RpciAt cCAkZGVidWdkaXIvW2ZpbGUgZGlybmFtZSAkYnVpbGRfaWRfZmlsZW5hbWVdIgorK3JlbW90ZV9l eGVjIHRhcmdldCBcCisrICAgICJsbiAtc2YgJHRhcmdldF9kZWJ1Z2luZm8gJGRlYnVnZGlyLyRi dWlsZF9pZF9maWxlbmFtZSIKKysKKysjIFN0YXJ0IEdEQiBhbmQgbG9hZCBnbG9iYWwgQklORklM RS4gIElmIERFQlVHSU5GT19GSUxFIGlzIG5vdCB0aGUKKysjIGVtcHR5IHN0cmluZyB0aGVuIHRo aXMgY29udGFpbnMgdGhlICcuYnVpbGQtaWQveHgveHh4Li4uLnh4eHgnIHBhcnQKKysjIG9mIHRo ZSBmaWxlbmFtZSB3aGljaCB3ZSBleHBlY3QgR0RCIHRvIHJlYWQgZnJvbSB0aGUgcmVtb3RlIHRh cmdldC4KKysjIElmIERFQlVHSU5GT19GSUxFIGlzIHRoZSBlbXB0eSBzdHJpbmcgdGhlbiB3ZSBk b24ndCBleHBlY3QgR0RCIHRvCisrIyBmaW5kIGFueSBkZWJ1ZyBpbmZvcm1hdGlvbi4KKytwcm9j IGxvYWRfYmluZmlsZV9jaGVja19kZWJ1Z19pc19mb3VuZCB7IGRlYnVnaW5mb19maWxlIHRlc3Ru YW1lIH0geworKyAgICB3aXRoX3Rlc3RfcHJlZml4ICIkdGVzdG5hbWUiIHsKKysJd2l0aF90aW1l b3V0X2ZhY3RvciA1IHsKKysJICAgICMgUHJvYmluZyBmb3IgLmJ1aWxkLWlkIGJhc2VkIGRlYnVn IGZpbGVzIG9uIHJlbW90ZQorKwkgICAgIyB0YXJnZXRzIHVzZXMgdGhlIHZGaWxlOnN0YXQgcGFj a2V0IGJ5IGRlZmF1bHQsIHRob3VnaAorKwkgICAgIyB0aGVyZSBpcyBhIHdvcmsgYXJvdW5kIHRo YXQgYXZvaWRzIHRoaXMgd2hpY2ggY2FuIGJlCisrCSAgICAjIHVzZWQgaWYgR0RCIGlzIGNvbm5l Y3RlZCB0byBhbiBvbGRlciBnZGJzZXJ2ZXIgd2l0aG91dAorKwkgICAgIyAnc3RhdCcgc3VwcG9y dC4KKysJICAgICMKKysJICAgICMgQ2hlY2sgdGhlIHdvcmsgYXJvdW5kIHdvcmtzIGJ5IGRpc2Fi bGluZyB1c2Ugb2YgdGhlCisrCSAgICAjIHZGaWxlOnN0YXQgcGFja2V0LgorKwkgICAgZm9yZWFj aF93aXRoX3ByZWZpeCBzdGF0X3BrdCB7YXV0byBvZmZ9IHsKKysJCWNsZWFuX3Jlc3RhcnQKKysK KysJCWdkYl90ZXN0X25vX291dHB1dCAic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5IGRlYnVnIiBc CisrCQkgICAgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIKKysKKysJCWdkYl90ZXN0X25vX291 dHB1dCAic2V0IHN5c3Jvb3QgdGFyZ2V0OiIKKysKKysJCWdkYl90ZXN0ICJzZXQgcmVtb3RlIGhv c3Rpby1zdGF0LXBhY2tldCAkc3RhdF9wa3QiCisrCisrCQkjIE1ha2Ugc3VyZSB3ZSdyZSBkaXNj b25uZWN0ZWQsIGluIGNhc2Ugd2UncmUgdGVzdGluZyB3aXRoIGFuCisrCQkjIGV4dGVuZGVkLXJl bW90ZSBib2FyZCwgdGhlcmVmb3JlIGFscmVhZHkgY29ubmVjdGVkLgorKwkJZ2RiX3Rlc3QgImRp c2Nvbm5lY3QiICIuKiIKKysKKysJCSMgU3RhcnQgZ2Ric2VydmVyLiAgVGhpcyBuZWVkcyB0byBi ZSBkb25lIGFmdGVyIHN0YXJ0aW5nIEdEQi4gIFdoZW4KKysJCSMgZ2Ric2VydmVyIGlzIHJ1bm5p bmcgbG9jYWwgdG8gR0RCLCBzdGFydCBnZGJzZXJ2ZXIgaW4gYSBzdWItZGlyZWN0b3J5LAorKwkJ IyB0aGlzIHByZXZlbnRzIEdEQiBmcm9tIGZpbmRpbmcgdGhlIGRlYnVnIGluZm9ybWF0aW9uIGl0 c2VsZi4KKysJCWlmIHsgIVtpc19yZW1vdGUgdGFyZ2V0XSB9IHsKKysJCSAgICB3aXRoX2N3ZCAk OjpnZGJzZXJ2ZXJfZGlyIHsKKysJCQlzZXQgcmVzIFtnZGJzZXJ2ZXJfc3RhcnQgIiIgJDo6dGFy Z2V0X2JpbmZpbGVdCisrCQkgICAgfQorKwkJfSBlbHNlIHsKKysJCSAgICBzZXQgcmVzIFtnZGJz ZXJ2ZXJfc3RhcnQgIiIgJDo6dGFyZ2V0X2JpbmZpbGVdCisrCQl9CisrCQlzZXQgZ2Ric2VydmVy X3Byb3RvY29sIFtsaW5kZXggJHJlcyAwXQorKwkJc2V0IGdkYnNlcnZlcl9nZGJwb3J0IFtsaW5k ZXggJHJlcyAxXQorKworKwkJIyBDb25uZWN0IHRvIGdkYnNlcnZlci4gIFRoZSBvdXRwdXQgd2ls bCBiZSBwbGFjZWQgaW50byB0aGUgZ2xvYmFsCisrCQkjIEdEQl9UQVJHRVRfUkVNT1RFX0NNRF9N U0csIGFuZCB3ZSdsbCBtYXRjaCBhZ2FpbnN0IHRoaXMgYmVsb3cuCisrCQlnZGJfYXNzZXJ0IHtb Z2RiX3RhcmdldF9jbWQgJGdkYnNlcnZlcl9wcm90b2NvbCAkZ2Ric2VydmVyX2dkYnBvcnRdID09 IDB9IFwKKysJCSAgICAiY29ubmVjdCB0byBnZGJzZXJ2ZXIiCisrCisrCQlpZiB7ICRkZWJ1Z2lu Zm9fZmlsZSBuZSAiIiB9IHsKKysJCSAgICBnZGJfYXNzZXJ0IHsgW3JlZ2V4cCAiUmVhZGluZyBz eW1ib2xzIGZyb20gdGFyZ2V0OmRlYnVnL1tzdHJpbmdfdG9fcmVnZXhwICRkZWJ1Z2luZm9fZmls ZV1cXC5cXC5cXC4iIFwKKysJCQkJICAgICAgJDo6Z2RiX3RhcmdldF9yZW1vdGVfY21kX21zZ10g fSBcCisrCQkJImRlYnVnaW5mbyB3YXMgcmVhZCB2aWEgYnVpbGQtaWQiCisrCQkgICAgZ2RiX2Fz c2VydCB7IFtyZWdleHAgIlJlYWRpbmcgZGVidWcvW3N0cmluZ190b19yZWdleHAgJGRlYnVnaW5m b19maWxlXSBmcm9tIHJlbW90ZSB0YXJnZXRcXC5cXC5cXC4iIFwKKysJCQkJICAgICAgJDo6Z2Ri X3RhcmdldF9yZW1vdGVfY21kX21zZ10gfSBcCisrCQkJImRlYnVnaW5mbyB3YXMgcmVhZCBmcm9t IHJlbW90ZSB0YXJnZXQiCisrCQl9IGVsc2UgeworKwkJICAgIGdkYl9hc3NlcnQgeyBbcmVnZXhw ICJcXChObyBkZWJ1Z2dpbmcgc3ltYm9scyBmb3VuZCBpbiBcW15cclxuXF0rLyQ6OnRlc3RmaWxl XFwpIiBcCisrCQkJCSAgICAgICQ6OmdkYl90YXJnZXRfcmVtb3RlX2NtZF9tc2ddIH0KKysJCX0K KysJICAgIH0KKysJfQorKyAgICB9CisrfQorKworKyMgUmV0dXJuIGEgY29weSBvZiBGSUxFTkFN RSwgd2hpY2ggc2hvdWxkIGVuZCAnLmRlYnVnJywgd2l0aCBOVU1CRVIKKysjIGFkZGVkLCBlLmcu IGFkZF9zZXFubyAxICJmb28uZGVidWciIC0tPiAiZm9vLjEuZGVidWciLgorK3Byb2MgYWRkX3Nl cW5vIHsgbnVtYmVyIGZpbGVuYW1lIH0geworKyAgICByZXR1cm4gW3JlZ3N1YiAiXC5kZWJ1Z1wk IiAkZmlsZW5hbWUgIi4ke251bWJlcn0uZGVidWciXQorK30KKysKKysjIFByZWNvbXB1dGUgc2Vx dWVuY2UgbnVtYmVyZWQgYnVpbGQtaWQgZmlsZW5hbWVzLgorK3NldCBidWlsZF9pZF8xX2ZpbGVu YW1lIFthZGRfc2Vxbm8gMSAkYnVpbGRfaWRfZmlsZW5hbWVdCisrc2V0IGJ1aWxkX2lkXzJfZmls ZW5hbWUgW2FkZF9zZXFubyAyICRidWlsZF9pZF9maWxlbmFtZV0KKytzZXQgYnVpbGRfaWRfM19m aWxlbmFtZSBbYWRkX3NlcW5vIDMgJGJ1aWxkX2lkX2ZpbGVuYW1lXQorKworK2xvYWRfYmluZmls ZV9jaGVja19kZWJ1Z19pc19mb3VuZCAkYnVpbGRfaWRfZmlsZW5hbWUgXAorKyAgICAiZmluZCBk ZWJ1Z2luZm8gd2l0aCBhIHNpbmdsZSBidWlsZC1pZCBmaWxlIgorKworK3JlbW90ZV9leGVjIHRh cmdldCAibG4gLWZzICR0YXJnZXRfZGVidWdpbmZvIFwKKysJCQkkZGVidWdkaXIvJGJ1aWxkX2lk XzFfZmlsZW5hbWUiCisrcmVtb3RlX2V4ZWMgdGFyZ2V0ICJsbiAtZnMgJHRhcmdldF9kZWJ1Z2lu Zm8gXAorKwkJCSRkZWJ1Z2Rpci8kYnVpbGRfaWRfMl9maWxlbmFtZSIKKytyZW1vdGVfZXhlYyB0 YXJnZXQgImxuIC1mcyAkdGFyZ2V0X2RlYnVnaW5mbyBcCisrCQkJJGRlYnVnZGlyLyRidWlsZF9p ZF8zX2ZpbGVuYW1lIgorKworK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1Z19pc19mb3VuZCAkYnVp bGRfaWRfZmlsZW5hbWUgXAorKyAgICAiZmluZCBkZWJ1Z2luZm8gd2l0aCA0IGJ1aWxkLWlkIGZp bGVzIgorKworK3JlbW90ZV9leGVjIHRhcmdldCAibG4gLWZzICRtaXNzaW5nX2RlYnVnaW5mbyAk ZGVidWdkaXIvJGJ1aWxkX2lkX2ZpbGVuYW1lIgorKworK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1 Z19pc19mb3VuZCAkYnVpbGRfaWRfMV9maWxlbmFtZSBcCisrICAgICJmaW5kIGRlYnVnaW5mbywg Zmlyc3QgYnVpbGQtaWQgZmlsZSBpcyBiYWQiCisrCisrcmVtb3RlX2V4ZWMgdGFyZ2V0ICJsbiAt ZnMgJG1pc3NpbmdfZGVidWdpbmZvIFwKKysJCQkkZGVidWdkaXIvJGJ1aWxkX2lkXzFfZmlsZW5h bWUiCisrcmVtb3RlX2V4ZWMgdGFyZ2V0ICJsbiAtZnMgJG1pc3NpbmdfZGVidWdpbmZvIFwKKysJ CQkkZGVidWdkaXIvJGJ1aWxkX2lkXzNfZmlsZW5hbWUiCisrCisrbG9hZF9iaW5maWxlX2NoZWNr X2RlYnVnX2lzX2ZvdW5kICRidWlsZF9pZF8yX2ZpbGVuYW1lICBcCisrICAgICJmaW5kIGRlYnVn aW5mbywgZmlyc3QgMiBidWlsZC1pZCBmaWxlcyBhcmUgYmFkIgorKworK3JlbW90ZV9leGVjIHRh cmdldCAibG4gLWZzICRtaXNzaW5nX2RlYnVnaW5mbyBcCisrCQkJJGRlYnVnZGlyLyRidWlsZF9p ZF8yX2ZpbGVuYW1lIgorKworK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1Z19pc19mb3VuZCAiIiAg XAorKyAgICAiY2Fubm90IGZpbmQgZGVidWdpbmZvLCBhbGwgYnVpbGQtaWQgZmlsZXMgYXJlIGJh ZCIKKysKKytyZW1vdGVfZXhlYyB0YXJnZXQgImxuIC1mcyAkdGFyZ2V0X2RlYnVnaW5mbyBcCisr CQkJJGRlYnVnZGlyLyRidWlsZF9pZF8zX2ZpbGVuYW1lIgorKworK2xvYWRfYmluZmlsZV9jaGVj a19kZWJ1Z19pc19mb3VuZCAkYnVpbGRfaWRfM19maWxlbmFtZSAgXAorKyAgICAiZmluZCBkZWJ1 Z2luZm8sIGxhc3QgYnVpbGQtaWQgZmlsZSBpcyBnb29kIgorKworK3JlbW90ZV9leGVjIHRhcmdl dCAicm0gLWYgJGRlYnVnZGlyLyRidWlsZF9pZF8xX2ZpbGVuYW1lIgorKworK2xvYWRfYmluZmls ZV9jaGVja19kZWJ1Z19pc19mb3VuZCAiIiAgXAorKyAgICAiY2Fubm90IGZpbmQgZGVidWdpbmZv LCBmaWxlIHdpdGggc2Vxbm8gMSBpcyBtaXNzaW5nIgorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3Vp dGUvbGliL2R3YXJmLmV4cCBiL2dkYi90ZXN0c3VpdGUvbGliL2R3YXJmLmV4cAorLS0tIGEvZ2Ri L3Rlc3RzdWl0ZS9saWIvZHdhcmYuZXhwCisrKysgYi9nZGIvdGVzdHN1aXRlL2xpYi9kd2FyZi5l eHAKK0BAIC0yOTkzLDI1ICsyOTkzLDMyIEBAIG5hbWVzcGFjZSBldmFsIER3YXJmIHsKKyAKKyAg ICAgcHJvYyBfbm90ZSB7dHlwZSBuYW1lIGhleGRhdGF9IHsKKyAJc2V0IG5hbWVsZW4gW2V4cHIg W3N0cmluZyBsZW5ndGggJG5hbWVdICsgMV0KKysJc2V0IGRhdGFsZW4gW2V4cHIgW3N0cmluZyBs ZW5ndGggJGhleGRhdGFdIC8gMl0KKyAKKyAJIyBOYW1lIHNpemUuCisgCV9vcCAuNGJ5dGUgJG5h bWVsZW4KKyAJIyBEYXRhIHNpemUuCistCV9vcCAuNGJ5dGUgW2V4cHIgW3N0cmluZyBsZW5ndGgg JGhleGRhdGFdIC8gMl0KKysJX29wIC40Ynl0ZSAkZGF0YWxlbgorIAkjIFR5cGUuCisgCV9vcCAu NGJ5dGUgJHR5cGUKKyAJIyBUaGUgbmFtZS4KKyAJX29wIC5hc2NpaSBbX3F1b3RlICRuYW1lXQor LQkjIEFsaWdubWVudC4KKysJIyBBbGlnbm1lbnQgKHRvIDQtYnl0ZSBib3VuZGFyeSkuCisgCXNl dCBhbGlnbiAyCisgCXNldCB0b3RhbCBbZXhwciB7KCRuYW1lbGVuICsgKDEgPDwgJGFsaWduKSAt IDEpICYgLSgxIDw8ICRhbGlnbil9XQorIAlmb3Ige3NldCBpICRuYW1lbGVufSB7JGkgPCAkdG90 YWx9IHtpbmNyIGl9IHsKKy0JICAgIF9vcCAuYnl0ZSAwCisrCSAgICBfb3AgLmJ5dGUgMCBwYWRk aW5nCisgCX0KKyAJIyBUaGUgZGF0YS4KKyAJZm9yZWFjaCB7YSBifSBbc3BsaXQgJGhleGRhdGEg e31dIHsKKyAJICAgIF9vcCAuYnl0ZSAweCRhJGIKKyAJfQorKwkjIEFsaWdubWVudCAodG8gNC1i eXRlIGJvdW5kYXJ5KS4KKysJc2V0IGFsaWduIDIKKysJc2V0IHRvdGFsIFtleHByIHsoJGRhdGFs ZW4gKyAoMSA8PCAkYWxpZ24pIC0gMSkgJiAtKDEgPDwgJGFsaWduKX1dCisrCWZvciB7c2V0IGkg JGRhdGFsZW59IHskaSA8ICR0b3RhbH0ge2luY3IgaX0geworKwkgICAgX29wIC5ieXRlIDAgcGFk ZGluZworKwl9CisgICAgIH0KKyAKKyAgICAgIyBFbWl0IGEgbm90ZSBzZWN0aW9uIGhvbGRpbmcg dGhlIGdpdmVuIGJ1aWxkLWlkLgorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvbGliL2dkYi5l eHAgYi9nZGIvdGVzdHN1aXRlL2xpYi9nZGIuZXhwCistLS0gYS9nZGIvdGVzdHN1aXRlL2xpYi9n ZGIuZXhwCisrKysgYi9nZGIvdGVzdHN1aXRlL2xpYi9nZGIuZXhwCitAQCAtNTMzNyw2ICs1MzM3 LDcgQEAgcHJvYyBxdW90ZV9mb3JfaG9zdCB7IGFyZ3MgfSB7CisgIyAgICAgZGVidWcgaW5mb3Jt YXRpb24KKyAjICAgLSB0ZXh0X3NlZ21lbnQ9YWRkcjogVGVsbCB0aGUgbGlua2VyIHRvIHBsYWNl IHRoZSB0ZXh0IHNlZ21lbnQgYXQgQUREUi4KKyAjICAgLSBidWlsZC1pZDogRW5zdXJlIHRoZSBm aW5hbCBiaW5hcnkgaW5jbHVkZXMgYSBidWlsZC1pZC4KKysjICAgLSBuby1idWlsZC1pZDogRW5z dXJlIHRoZSBmaW5hbCBiaW5hcnkgZG9lcyBub3QgaW5jbHVkZSBhIGJ1aWxkLWlkLgorICMgICAt IGNvbHVtbi1pbmZvL25vLWNvbHVtbi1pbmZvOiBFbmFibGUvRGlzYWJsZSBnZW5lcmF0aW9uIG9m IGNvbHVtbiB0YWJsZQorICMgICAgIGluZm9ybWF0aW9uLgorICMKK0BAIC01NDQ4LDYgKzU0NDks MTggQEAgcHJvYyBnZGJfY29tcGlsZSB7c291cmNlIGRlc3QgdHlwZSBvcHRpb25zfSB7CisgCWxh cHBlbmQgbmV3X29wdGlvbnMgImFkZGl0aW9uYWxfZmxhZ3M9LVdsLC0tYnVpbGQtaWQiCisgICAg IH0KKyAKKysgICAgIyBJZiB0aGUgJ25vLWJ1aWxkLWlkJyBvcHRpb24gaXMgdXNlZCB0aGVuIGRp c2FibGUgdGhlIGJ1aWxkLWlkLgorKyAgICBpZiB7W2xzZWFyY2ggLWV4YWN0ICRvcHRpb25zIG5v LWJ1aWxkLWlkXSA+IDB9IHsKKysJbGFwcGVuZCBuZXdfb3B0aW9ucyAiYWRkaXRpb25hbF9mbGFn cz0tV2wsLS1idWlsZC1pZD1ub25lIgorKyAgICB9CisrCisrICAgICMgU2FuaXR5IGNoZWNrLiAg SWYgYm90aCAnYnVpbGQtaWQnIGFuZCAnbm8tYnVpbGQtaWQnIGFyZSB1c2VkCisrICAgICMgdGhl biB3aGF0IGlzIGV4cGVjdGVkIGZyb20gdXMhCisrICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJG9w dGlvbnMgYnVpbGQtaWRdID4gMAorKwkmJiBbbHNlYXJjaCAtZXhhY3QgJG9wdGlvbnMgbm8tYnVp bGQtaWRdID4gMH0geworKwllcnJvciAiY2Fubm90IHVzZSBidWlsZC1pZCBhbmQgbm8tYnVpbGQt aWQgb3B0aW9ucyIKKysgICAgfQorKworICAgICAjIFRyZWF0aW5nIC5jIGlucHV0IGZpbGVzIGFz IEMrKyBpcyBkZXByZWNhdGVkIGluIENsYW5nLCBzbworICAgICAjIGV4cGxpY2l0bHkgZm9yY2Ug QysrIGxhbmd1YWdlLgorICAgICBpZiB7ICEkZ2V0dGluZ19jb21waWxlcl9pbmZvCitAQCAtODE0 NCwyMSArODE1NywyNSBAQCBwcm9jIGdldF9idWlsZF9pZCB7IGZpbGVuYW1lIH0geworIAorICMg UmV0dXJuIHRoZSBidWlsZC1pZCBoZXggc3RyaW5nICh1c3VhbGx5IDE2MCBiaXRzIGFzIDQwIGhl eCBjaGFyYWN0ZXJzKQorICMgY29udmVydGVkIHRvIHRoZSBmb3JtOiAuYnVpbGQtaWQvYWIvY2Rl ZjEyMzQuLi44OS5kZWJ1ZworKyMKKysjIFRoZSAnLmRlYnVnJyBzdWZmaXggY2FuIGJlIGNoYW5n ZWQgYnkgcGFzc2luZyB0aGUgU1VGRklYIGFyZ3VtZW50LgorKyMKKyAjIFJldHVybiAiIiBpZiBu byBidWlsZC1pZCBmb3VuZC4KKy1wcm9jIGJ1aWxkX2lkX2RlYnVnX2ZpbGVuYW1lX2dldCB7IGZp bGVuYW1lIH0geworK3Byb2MgYnVpbGRfaWRfZGVidWdfZmlsZW5hbWVfZ2V0IHsgZmlsZW5hbWUg e3N1ZmZpeCAiLmRlYnVnIn0gfSB7CisgICAgIHNldCBkYXRhIFtnZXRfYnVpbGRfaWQgJGZpbGVu YW1lXQorICAgICBpZiB7ICRkYXRhID09ICIiIH0geworIAlyZXR1cm4gIiIKKyAgICAgfQorICAg ICByZWdzdWIge14uLn0gJGRhdGEge1wwL30gZGF0YQorLSAgICByZXR1cm4gIi5idWlsZC1pZC8k e2RhdGF9LmRlYnVnIgorKyAgICByZXR1cm4gIi5idWlsZC1pZC8ke2RhdGF9JHtzdWZmaXh9Igor IH0KKyAKKyAjIERFU1Qgc2hvdWxkIGJlIGEgZmlsZSBjb21waWxlZCB3aXRoIGRlYnVnIGluZm9y bWF0aW9uLiAgVGhpcyBwcm9jCistIyBjcmVhdGVzIHR3byBuZXcgZmlsZXMgREVTVC5kZWJ1ZyB3 aGljaCBjb250YWlucyB0aGUgZGVidWcKKy0jIGluZm9ybWF0aW9uIGV4dHJhY3RlZCBmcm9tIERF U1QsIGFuZCBERVNULnN0cmlwcGVkLCB3aGljaCBpcyBhIGNvcHkKKy0jIG9mIERFU1Qgd2l0aCB0 aGUgZGVidWcgaW5mb3JtYXRpb24gcmVtb3ZlZC4gIEEgJy5nbnVfZGVidWdsaW5rJworLSMgc2Vj dGlvbiB3aWxsIGJlIGFkZGVkIHRvIERFU1Quc3RyaXBwZWQgdGhhdCBwb2ludHMgdG8gREVTVC5k ZWJ1Zy4KKysjIGNyZWF0ZXMgREVTVC5kZWJ1ZyB3aGljaCBjb250YWlucyB0aGUgZGVidWcgaW5m b3JtYXRpb24gZXh0cmFjdGVkCisrIyBmcm9tIERFU1QsIGFuZCBERVNUIGlzIHVwZGF0ZWQgd2l0 aCB0aGUgZGVidWcgaW5mb3JtYXRpb24gcmVtb3ZlZC4KKysjCisrIyBCeSBkZWZhdWx0IGEgJy5n bnVfZGVidWdsaW5rJyBzZWN0aW9uIHdpbGwgYmUgYWRkZWQgdG8gREVTVCB0aGF0CisrIyBwb2lu dHMgdG8gREVTVC5kZWJ1Zy4KKyAjCisgIyBJZiBBUkdTIGlzIHBhc3NlZCwgaXQgaXMgYSBsaXN0 IG9mIG9wdGlvbmFsIGZsYWdzLiAgVGhlIGN1cnJlbnRseQorICMgc3VwcG9ydGVkIGZsYWdzIGFy ZToKK0BAIC04MTY2LDcgKzgxODMsNyBAQCBwcm9jIGJ1aWxkX2lkX2RlYnVnX2ZpbGVuYW1lX2dl dCB7IGZpbGVuYW1lIH0geworICMgICAtIG5vLW1haW4gOiByZW1vdmUgdGhlIHN5bWJvbCBlbnRy eSBmb3IgbWFpbiBmcm9tIHRoZSBzZXBhcmF0ZQorICMgICAgICAgICAgICAgICBkZWJ1ZyBmaWxl IERFU1QuZGVidWcsCisgIyAgIC0gbm8tZGVidWdsaW5rIDogZG9uJ3QgYWRkIHRoZSAnLmdudV9k ZWJ1Z2xpbmsnIHNlY3Rpb24gdG8KKy0jICAgICAgICAgICAgICAgICAgICBERVNULnN0cmlwcGVk LgorKyMgICAgICAgICAgICAgICAgICAgIERFU1QuCisgIworICMgRnVuY3Rpb24gcmV0dXJucyB6 ZXJvIG9uIHN1Y2Nlc3MuICBGdW5jdGlvbiB3aWxsIHJldHVybiBub24temVybyBmYWlsdXJlIGNv ZGUKKyAjIG9uIHNvbWUgdGFyZ2V0cyBub3Qgc3VwcG9ydGluZyBzZXBhcmF0ZSBkZWJ1ZyBpbmZv IChzdWNoIGFzIGkzODYtbXNkb3MpLgorQEAgLTgyMjUsMjAgKzgyNDIsMjYgQEAgcHJvYyBnZGJf Z251X3N0cmlwX2RlYnVnIHsgZGVzdCBhcmdzIH0geworICAgICAjIFVubGVzcyB0aGUgIm5vLWRl YnVnbGluayIgZmxhZyBpcyBwYXNzZWQsIHRoZW4gbGluayB0aGUgdHdvCisgICAgICMgcHJldmlv dXMgb3V0cHV0IGZpbGVzIHRvZ2V0aGVyLCBhZGRpbmcgdGhlIC5nbnVfZGVidWdsaW5rCisgICAg ICMgc2VjdGlvbiB0byB0aGUgc3RyaXBwZWRfZmlsZSwgY29udGFpbmluZyBhIHBvaW50ZXIgdG8g dGhlCistICAgICMgZGVidWdfZmlsZSwgc2F2ZSB0aGUgbmV3IGZpbGUgaW4gZGVzdC4KKysgICAg IyBkZWJ1Z19maWxlLgorICAgICBpZiB7W2xzZWFyY2ggLWV4YWN0ICRhcmdzICJuby1kZWJ1Z2xp bmsiXSA9PSAtMX0geworLQlzZXQgcmVzdWx0IFtjYXRjaCAiZXhlYyAkb2JqY29weV9wcm9ncmFt IC0tYWRkLWdudS1kZWJ1Z2xpbms9JHtkZWJ1Z19maWxlfSAke3N0cmlwcGVkX2ZpbGV9ICR7ZGVz dH0iIG91dHB1dF0KKysJc2V0IHJlc3VsdCBbY2F0Y2ggImV4ZWMgJG9iamNvcHlfcHJvZ3JhbSAt LWFkZC1nbnUtZGVidWdsaW5rPSR7ZGVidWdfZmlsZX0gJHtzdHJpcHBlZF9maWxlfSAke3N0cmlw cGVkX2ZpbGV9LXRtcCIgb3V0cHV0XQorIAl2ZXJib3NlICJyZXN1bHQgaXMgJHJlc3VsdCIKKyAJ dmVyYm9zZSAib3V0cHV0IGlzICRvdXRwdXQiCisgCWlmIHskcmVzdWx0ID09IDF9IHsKKyAJICAg IHJldHVybiAxCisgCX0KKysJZmlsZSBkZWxldGUgIiR7c3RyaXBwZWRfZmlsZX0iCisrCWZpbGUg cmVuYW1lICIke3N0cmlwcGVkX2ZpbGV9LXRtcCIgIiR7c3RyaXBwZWRfZmlsZX0iCisgICAgIH0K KyAKKyAgICAgIyBXb3JrYXJvdW5kIFBSIGJpbnV0aWxzLzEwODAyOgorICAgICAjIFByZXNlcnZl IHRoZSAneCcgYml0IGFsc28gZm9yIFBJRXMgKFBvc2l0aW9uIEluZGVwZW5kZW50IEV4ZWN1dGFi bGVzKS4KKy0gICAgc2V0IHBlcm0gW2ZpbGUgYXR0cmlidXRlcyAke3N0cmlwcGVkX2ZpbGV9IC1w ZXJtaXNzaW9uc10KKy0gICAgZmlsZSBhdHRyaWJ1dGVzICR7ZGVzdH0gLXBlcm1pc3Npb25zICRw ZXJtCisrICAgIHNldCBwZXJtIFtmaWxlIGF0dHJpYnV0ZXMgJHtkZXN0fSAtcGVybWlzc2lvbnNd CisrICAgIGZpbGUgYXR0cmlidXRlcyAke3N0cmlwcGVkX2ZpbGV9IC1wZXJtaXNzaW9ucyAkcGVy bQorKworKyAgICAjIE1vdmUgdGhlIHN0cmlwcGVkX2ZpbGUgYmFjayBpbnRvIGRlc3QuCisrICAg IGZpbGUgZGVsZXRlICR7ZGVzdH0KKysgICAgZmlsZSByZW5hbWUgJHtzdHJpcHBlZF9maWxlfSAk e2Rlc3R9CisgCisgICAgIHJldHVybiAwCisgfQorZGlmZiAtLWdpdCBhL2dkYnNlcnZlci9ob3N0 aW8uY2MgYi9nZGJzZXJ2ZXIvaG9zdGlvLmNjCistLS0gYS9nZGJzZXJ2ZXIvaG9zdGlvLmNjCisr KysgYi9nZGJzZXJ2ZXIvaG9zdGlvLmNjCitAQCAtNDg2LDYgKzQ4Niw0MiBAQCBoYW5kbGVfZnN0 YXQgKGNoYXIgKm93bl9idWYsIGludCAqbmV3X3BhY2tldF9sZW4pCisgICAgIHdyaXRlX2VubiAo b3duX2J1Zik7CisgfQorIAorK3N0YXRpYyB2b2lkCisraGFuZGxlX3N0YXQgKGNoYXIgKm93bl9i dWYsIGludCAqbmV3X3BhY2tldF9sZW4pCisreworKyAgaW50IGJ5dGVzX3NlbnQ7CisrICBjaGFy ICpwOworKyAgc3RydWN0IHN0YXQgc3Q7CisrICBzdHJ1Y3QgZmlvX3N0YXQgZnN0OworKyAgY2hh ciBmaWxlbmFtZVtIT1NUSU9fUEFUSF9NQVhdOworKworKyAgcCA9IG93bl9idWYgKyBzdHJsZW4g KCJ2RmlsZTpzdGF0OiIpOworKworKyAgaWYgKHJlcXVpcmVfZmlsZW5hbWUgKCZwLCBmaWxlbmFt ZSkKKysgICAgICB8fCByZXF1aXJlX2VuZCAocCkpCisrICAgIHsKKysgICAgICBob3N0aW9fcGFj a2V0X2Vycm9yIChvd25fYnVmKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKysgIGlmIChs c3RhdCAoZmlsZW5hbWUsICZzdCkgPT0gLTEpCisrICAgIHsKKysgICAgICBob3N0aW9fZXJyb3Ig KG93bl9idWYpOworKyAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgaG9zdF90b19maWxlaW9f c3RhdCAoJnN0LCAmZnN0KTsKKysKKysgIGJ5dGVzX3NlbnQgPSBob3N0aW9fcmVwbHlfd2l0aF9k YXRhIChvd25fYnVmLAorKwkJCQkgICAgICAgKGNoYXIgKikgJmZzdCwgc2l6ZW9mIChmc3QpLAor KwkJCQkgICAgICAgbmV3X3BhY2tldF9sZW4pOworKworKyAgLyogSWYgdGhlIHJlc3BvbnNlIGRv ZXMgbm90IGZpdCBpbnRvIGEgc2luZ2xlIHBhY2tldCwgZG8gbm90IGF0dGVtcHQKKysgICAgIHRv IHJldHVybiBhIHBhcnRpYWwgcmVzcG9uc2UsIGJ1dCBzaW1wbHkgZmFpbC4gICovCisrICBpZiAo Ynl0ZXNfc2VudCA8IHNpemVvZiAoZnN0KSkKKysgICAgd3JpdGVfZW5uIChvd25fYnVmKTsKKyt9 CisrCisgc3RhdGljIHZvaWQKKyBoYW5kbGVfY2xvc2UgKGNoYXIgKm93bl9idWYpCisgeworQEAg LTYwMyw2ICs2MzksOCBAQCBoYW5kbGVfdkZpbGUgKGNoYXIgKm93bl9idWYsIGludCBwYWNrZXRf bGVuLCBpbnQgKm5ld19wYWNrZXRfbGVuKQorICAgICBoYW5kbGVfcHdyaXRlIChvd25fYnVmLCBw YWNrZXRfbGVuKTsKKyAgIGVsc2UgaWYgKHN0YXJ0c3dpdGggKG93bl9idWYsICJ2RmlsZTpmc3Rh dDoiKSkKKyAgICAgaGFuZGxlX2ZzdGF0IChvd25fYnVmLCBuZXdfcGFja2V0X2xlbik7CisrICBl bHNlIGlmIChzdGFydHN3aXRoIChvd25fYnVmLCAidkZpbGU6c3RhdDoiKSkKKysgICAgaGFuZGxl X3N0YXQgKG93bl9idWYsIG5ld19wYWNrZXRfbGVuKTsKKyAgIGVsc2UgaWYgKHN0YXJ0c3dpdGgg KG93bl9idWYsICJ2RmlsZTpjbG9zZToiKSkKKyAgICAgaGFuZGxlX2Nsb3NlIChvd25fYnVmKTsK KyAgIGVsc2UgaWYgKHN0YXJ0c3dpdGggKG93bl9idWYsICJ2RmlsZTp1bmxpbms6IikpCitkaWZm IC0tZ2l0IGEvZ2Ric3VwcG9ydC9wYXRoc3R1ZmYuY2MgYi9nZGJzdXBwb3J0L3BhdGhzdHVmZi5j YworLS0tIGEvZ2Ric3VwcG9ydC9wYXRoc3R1ZmYuY2MKKysrKyBiL2dkYnN1cHBvcnQvcGF0aHN0 dWZmLmNjCitAQCAtMTk4LDExICsxOTgsMTcgQEAgcGF0aF9qb2luIChnZGI6OmFycmF5X3ZpZXc8 Y29uc3QgY2hhciAqPiBwYXRocykKKyAgICAgeworICAgICAgIGNvbnN0IGNoYXIgKnBhdGggPSBw YXRoc1tpXTsKKyAKKy0gICAgICBpZiAoaSA+IDApCistCWdkYl9hc3NlcnQgKHN0cmxlbiAocGF0 aCkgPT0gMCB8fCAhSVNfQUJTT0xVVEVfUEFUSCAocGF0aCkpOworLQorLSAgICAgIGlmICghcmV0 LmVtcHR5ICgpICYmICFJU19ESVJfU0VQQVJBVE9SIChyZXQuYmFjayAoKSkpCistCSAgcmV0ICs9 ICcvJzsKKysgICAgICBpZiAoIXJldC5lbXB0eSAoKSkKKysJeworKwkgIC8qIElmIFJFVCBkb2Vz bid0IGFscmVhZHkgZW5kIHdpdGggYSBzZXBhcmF0b3IgdGhlbiBhZGQgb25lLiAgKi8KKysJICBp ZiAoIUlTX0RJUl9TRVBBUkFUT1IgKHJldC5iYWNrICgpKSkKKysJICAgIHJldCArPSAnLyc7Cisr CisrCSAgLyogTm93IHRoYXQgUkVUIGVuZHMgd2l0aCBhIHNlcGFyYXRvciwgaWdub3JlIGFueSBh dCB0aGUgc3RhcnQgb2YKKysJICAgICBQQVRILiAgKi8KKysJICB3aGlsZSAoSVNfRElSX1NFUEFS QVRPUiAocGF0aFswXSkpCisrCSAgICArK3BhdGg7CisrCX0KKyAKKyAgICAgICByZXQuYXBwZW5k IChwYXRoKTsKKyAgICAgfQorZGlmZiAtLWdpdCBhL2dkYnN1cHBvcnQvcGF0aHN0dWZmLmggYi9n ZGJzdXBwb3J0L3BhdGhzdHVmZi5oCistLS0gYS9nZGJzdXBwb3J0L3BhdGhzdHVmZi5oCisrKysg Yi9nZGJzdXBwb3J0L3BhdGhzdHVmZi5oCitAQCAtNjQsOCArNjQsMTAgQEAgZXh0ZXJuIGNvbnN0 IGNoYXIgKmNoaWxkX3BhdGggKGNvbnN0IGNoYXIgKnBhcmVudCwgY29uc3QgY2hhciAqY2hpbGQp OworIAorIC8qIEpvaW4gZWxlbWVudHMgaW4gUEFUSFMgaW50byBhIHNpbmdsZSBwYXRoLgorIAor LSAgIFRoZSBmaXJzdCBlbGVtZW50IGNhbiBiZSBhYnNvbHV0ZSBvciByZWxhdGl2ZS4gIEFsbCB0 aGUgb3RoZXJzIG11c3QgYmUKKy0gICByZWxhdGl2ZS4gICovCisrICAgVGhlIGZpcnN0IGVsZW1l bnQgY2FuIGJlIGFic29sdXRlIG9yIHJlbGF0aXZlLiAgT25seSBhIHNpbmdsZSBkaXJlY3RvcnkK KysgICBzZXBhcmF0b3Igd2lsbCBiZSBwbGFjZWQgYmV0d2VlbiBlbGVtZW50cyBvZiBQQVRIUywg aWYgb25lIGVsZW1lbnQgZW5kcworKyAgIHdpdGggYSBkaXJlY3Rvcnkgc2VwYXJhdG9yLCBvciBh biBlbGVtZW50IHN0YXJ0cyB3aXRoIGEgZGlyZWN0b3J5CisrICAgc2VwYXJhdG9yLCB0aGVuIHRo ZXNlIHdpbGwgYmUgY29sbGFwc2VkIGludG8gYSBzaW5nbGUgc2VwYXJhdG9yLiAgKi8KKyAKKyBl eHRlcm4gc3RkOjpzdHJpbmcgcGF0aF9qb2luIChnZGI6OmFycmF5X3ZpZXc8Y29uc3QgY2hhciAq PiBwYXRocyk7CisgCgpkaWZmIC0tZ2l0IGEvZ2RiLXJlbW92ZS1xbngtbmV1dHJpbm8tc3VwcG9y dC5wYXRjaCBiL2dkYi1yZW1vdmUtcW54LW5ldXRyaW5vLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EzNWIxNwotLS0gL2Rldi9udWxsCisrKyBiL2dk Yi1yZW1vdmUtcW54LW5ldXRyaW5vLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwyOTIzIEBACitG cm9tIEZFRE9SQV9QQVRDSEVTIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU2ltb24g TWFyY2hpIDxzaW1vbi5tYXJjaGlAcG9seW10bC5jYT4KK0RhdGU6IFRodSwgMjUgSnVsIDIwMjQg MTM6NDE6MzUgLTA0MDAKK1N1YmplY3Q6IGdkYi1yZW1vdmUtcW54LW5ldXRyaW5vLXN1cHBvcnQu cGF0Y2gKKworOzsgQmFja3BvcnQgb2YgdXBzdHJlYW0gY29tbWl0IDM2ZmIyMGZhOTM0ODRiMTA0 ZC4gIFRoaXMgaXMgbm90IHJlYWxseQorOzsgcmVsZXZhbnQgZm9yIG91ciBicmFuY2gsIGJ1dCBs YXRlciBjb21taXRzIHRoYXQgYXJlIGltcG9ydGFudCwgYW5kCis7OyB3aGljaCB3ZSB3YW50IHRv IGJhY2twb3J0LCBjb25mbGljdCB1bmxlc3MgdGhlIGNsZWFudXAgaW4gdGhpcworOzsgcGF0Y2gg aXMgaW4gcGxhY2UuCis7OworOzsgVGhpcyBjb21taXQgd2lsbCBiZSBwYXJ0IG9mIEdEQiAxNiwg c28gdGhpcyBiYWNrLXBvcnQgc2hvdWxkIGRyb3AKKzs7IG91dCB3aGVuIHdlIHJlYmFzZSBvbnRv IEdEQiAxNi4KKzs7Cis7OyBnZGI6IHJlbW92ZSBRTlggTmV1dHJpbm8gc3VwcG9ydAorOzsKKzs7 IFJlbW92ZSB0aGUgc3VwcG9ydCBmb3IgdGhlIFFOWCBOZXV0cmlubyBPUyAodGRlcCBhbmQgbmF0 aXZlIGJpdHMpLiAgVGhpcworOzsgaGFzIGJlZW4gdW5tYWludGFpbmVkIGZvciB5ZWFycywgYW5k IHdlIGRvbid0IGhhdmUgYSB3YXkgdG8gc2VlIGlmIGl0Cis7OyB3b3JrcyAob3IgZXZlbiBidWls ZHMsIGZvciB0aGUgbmF0aXZlIHBhcnRzKS4gIFdpdGhvdXQgc29tZWJvZHkgYWN0aXZlbHkKKzs7 IG1haW50YWluaW5nIGl0LCB0aGlzIGlzIGp1c3QgYSBidXJkZW4gZm9yIGRldmVsb3BlcnMsIGVz cGVjaWFsbHkgdGhhdAorOzsgdGhpcyBwb3J0IGRvZXMgYSBmZXcgd2VpcmQgdW5pcXVlIHRoaW5n cyB0aGF0IHJlcXVpcmUgcmVhc29uaW5nIGFib3V0Cis7OyB3aGVuIGRvaW5nIGJpZyBjaGFuZ2Uu Cis7OworOzsgU3VwcG9ydCBmb3IgR0RCc2VydmVyIHdhcyByZW1vdmVkIGluIDIwMjAsIGNvbW1p dCA2MTNmMTQ5YTkwZDYKKzs7ICgiZ2Ric2VydmVyOiByZW1vdmUgc3VwcG9ydCBmb3IgTmV1dHJp bm8iKS4KKzs7Cis7OyBDaGFuZ2UtSWQ6IEk0ZTI1ZWMyNmFiMDY2MzY2MjlhZGViZDAyY2ViMTYx ZWUzMWMyMzJkCis7OyBBcHByb3ZlZC1ieTogS2V2aW4gQnVldHRuZXIgPGtldmluYkByZWRoYXQu Y29tPgorCitkaWZmIC0tZ2l0IGEvZ2RiL01ha2VmaWxlLmluIGIvZ2RiL01ha2VmaWxlLmluCist LS0gYS9nZGIvTWFrZWZpbGUuaW4KKysrKyBiL2dkYi9NYWtlZmlsZS5pbgorQEAgLTgyOCw3ICs4 MjgsNiBAQCBBTExfVEFSR0VUX09CUyA9IFwKKyAJaTM4Ni1nbzMyLXRkZXAubyBcCisgCWkzODYt bGludXgtdGRlcC5vIFwKKyAJaTM4Ni1uZXRic2QtdGRlcC5vIFwKKy0JaTM4Ni1udG8tdGRlcC5v IFwKKyAJaTM4Ni1vYnNkLXRkZXAubyBcCisgCWkzODYtc29sMi10ZGVwLm8gXAorIAlpMzg2LXRk ZXAubyBcCitAQCAtODU2LDcgKzg1NSw2IEBAIEFMTF9UQVJHRVRfT0JTID0gXAorIAluZHMzMi10 ZGVwLm8gXAorIAluaW9zMi1saW51eC10ZGVwLm8gXAorIAluaW9zMi10ZGVwLm8gXAorLQludG8t dGRlcC5vIFwKKyAJb2JzZC10ZGVwLm8gXAorIAlvcjFrLWxpbnV4LXRkZXAubyBcCisgCW9yMWst dGRlcC5vIFwKK0BAIC0xNDQxLDcgKzE0MzksNiBAQCBIRklMRVNfTk9fU1JDRElSID0gXAorIAlu ZHMzMi10ZGVwLmggXAorIAluaW9zMi10ZGVwLmggXAorIAllbGYtbm9uZS10ZGVwLmggXAorLQlu dG8tdGRlcC5oIFwKKyAJb2JqYy1sYW5nLmggXAorIAlvYmpmaWxlcy5oIFwKKyAJb2JzZC1uYXQu aCBcCitAQCAtMTU3Myw3ICsxNTcwLDYgQEAgSEZJTEVTX05PX1NSQ0RJUiA9IFwKKyAJY29tcGls ZS9nY2MtYy1wbHVnaW4uaCBcCisgCWNvbXBpbGUvZ2NjLWNwLXBsdWdpbi5oIFwKKyAJY29uZmln L25tLWxpbnV4LmggXAorLQljb25maWcvbm0tbnRvLmggXAorIAljb25maWcvZGpncHAvbGFuZ2lu Zm8uaCBcCisgCWNvbmZpZy9kamdwcC9ubF90eXBlcy5oIFwKKyAJY29uZmlnL2kzODYvbm0taTM4 NmdudS5oIFwKK2RpZmYgLS1naXQgYS9nZGIvY29uZmlnL25tLW50by5oIGIvZ2RiL2NvbmZpZy9u bS1udG8uaAorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CistLS0gYS9nZGIvY29uZmlnL25tLW50 by5oCisrKysgL2Rldi9udWxsCitAQCAtMSwyOSArMCwwIEBACistLyogTmF0aXZlIHN1cHBvcnQg Zm9yIFFOWCBOZXV0cmlubyB2ZXJzaW9uIDYuCistCistICAgQ29weXJpZ2h0IChDKSAyMDAzLTIw MjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBjb2RlIHdhcyBk b25hdGVkIGJ5IFFOWCBTb2Z0d2FyZSBTeXN0ZW1zIEx0ZC4KKy0KKy0gICBUaGlzIGZpbGUgaXMg cGFydCBvZiBHREIuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq LworLQorLSNpZm5kZWYgQ09ORklHX05NX05UT19ICistI2RlZmluZSBDT05GSUdfTk1fTlRPX0gK Ky0KKy0vKiBTZXR1cCB0aGUgdmFsaWQgcmVhbHRpbWUgc2lnbmFsIHJhbmdlLiAgKi8KKy0jZGVm aW5lIFJFQUxUSU1FX0xPIDQxCistI2RlZmluZSBSRUFMVElNRV9ISSA1NgorLQorLSNlbmRpZiAv KiBDT05GSUdfTk1fTlRPX0ggKi8KK2RpZmYgLS1naXQgYS9nZGIvY29uZmlndXJlLmhvc3QgYi9n ZGIvY29uZmlndXJlLmhvc3QKKy0tLSBhL2dkYi9jb25maWd1cmUuaG9zdAorKysrIGIvZ2RiL2Nv bmZpZ3VyZS5ob3N0CitAQCAtMTEwLDcgKzExMCw2IEBAIGlbMzQ1NjddODYtKi1taW5ndzMyKikJ Z2RiX2hvc3Q9bWluZ3cKKyBpWzM0NTY3XTg2LSotbXNkb3NkamdwcCopIGdkYl9ob3N0PWdvMzIg OzsKKyBpWzM0NTY3XTg2LSotbGludXgqKQlnZGJfaG9zdD1saW51eCA7OworIGlbMzQ1NjddODYt Ki1nbnUqKQlnZGJfaG9zdD1pMzg2Z251IDs7CistaVszNDU2XTg2LSotbnRvKikgCWdkYl9ob3N0 PW50byA7OworIGlbMzQ1NjddODYtKi1vcGVuYnNkKikJZ2RiX2hvc3Q9b2JzZCA7OworIGlbMzQ1 NjddODYtKi1zb2xhcmlzMiogfCB4ODZfNjQtKi1zb2xhcmlzMiopCisgCQkJZ2RiX2hvc3Q9c29s MiA7OworZGlmZiAtLWdpdCBhL2dkYi9jb25maWd1cmUubmF0IGIvZ2RiL2NvbmZpZ3VyZS5uYXQK Ky0tLSBhL2dkYi9jb25maWd1cmUubmF0CisrKysgYi9nZGIvY29uZmlndXJlLm5hdAorQEAgLTQy MSwxNSArNDIxLDYgQEAgY2FzZSAke2dkYl9ob3N0fSBpbgorIAorIAllc2FjCisgCTs7CistICAg IG50bykKKy0JY2FzZSAke2dkYl9ob3N0X2NwdX0gaW4KKy0JICAgIGkzODYpCistCQkjIEhvc3Q6 IEludGVsIDM4NiBydW5uaW5nIFFOWC4KKy0JCU5BVERFUEZJTEVTPSdudG8tcHJvY2ZzLm8nCist CQlOQVRfRklMRT0nY29uZmlnL25tLW50by5oJworLQkJOzsKKy0JZXNhYworLQk7OworICAgICBv YnNkKQorIAljYXNlICR7Z2RiX2hvc3RfY3B1fSBpbgorIAkgICAgaTM4NikKK2RpZmYgLS1naXQg YS9nZGIvY29uZmlndXJlLnRndCBiL2dkYi9jb25maWd1cmUudGd0CistLS0gYS9nZGIvY29uZmln dXJlLnRndAorKysrIGIvZ2RiL2NvbmZpZ3VyZS50Z3QKK0BAIC0zMDQsMTEgKzMwNCw2IEBAIGlb MzQ1NjddODYtKi1vcGVuYnNkKikKKyAJIyBUYXJnZXQ6IE9wZW5CU0QvaTM4NgorIAlnZGJfdGFy Z2V0X29icz0iaTM4Ni1ic2QtdGRlcC5vIGkzODYtb2JzZC10ZGVwLm8gYnNkLXV0aHJlYWQubyIK KyAJOzsKKy1pWzM0NTY3XTg2LSotbnRvKikKKy0JIyBUYXJnZXQ6IEludGVsIDM4NiBydW5uaW5n IHFueDYuCistCWdkYl90YXJnZXRfb2JzPSJzb2xpYi1zdnI0Lm8gXAorLQkJCWkzODYtbnRvLXRk ZXAubyBudG8tdGRlcC5vIgorLQk7OworIGlbMzQ1NjddODYtKi1zb2xhcmlzMiogfCB4ODZfNjQt Ki1zb2xhcmlzMiopCisgCSMgVGFyZ2V0OiBTb2xhcmlzIHg4Nl82NAorIAlnZGJfdGFyZ2V0X29i cz0iJHtpMzg2X3RvYmpzfSAke2FtZDY0X3RvYmpzfSBcCitAQCAtODAzLDcgKzc5OCw2IEBAIGNh c2UgIiR7dGFyZ30iIGluCisgCQlnZGJfb3NhYmk9R0RCX09TQUJJX0ZSRUVCU0QgOzsKKyAqLSot bGludXgqIHwgKi0qLXVjbGludXgqKQorIAkJZ2RiX29zYWJpPUdEQl9PU0FCSV9MSU5VWCA7Owor LSotKi1udG8qKQlnZGJfb3NhYmk9R0RCX09TQUJJX1FOWE5UTyA7OworIG02OCotKi1vcGVuYnNk KiB8IG04OCotKi1vcGVuYnNkKiB8IHZheC0qLW9wZW5ic2QqKSA7OworICotKi1vcGVuYnNkKikJ Z2RiX29zYWJpPUdEQl9PU0FCSV9PUEVOQlNEIDs7CisgKi0qLXNvbGFyaXMqKQlnZGJfb3NhYmk9 R0RCX09TQUJJX1NPTEFSSVMgOzsKK2RpZmYgLS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIv Z2RiL2RvYy9nZGIudGV4aW5mbworLS0tIGEvZ2RiL2RvYy9nZGIudGV4aW5mbworKysrIGIvZ2Ri L2RvYy9nZGIudGV4aW5mbworQEAgLTI3NDIsNyArMjc0Miw3IEBACisgQGVuZCBzbWFsbGV4YW1w bGUKKyAKKyBUaGlzIGNvbW1hbmQgaXMgYXZhaWxhYmxlIHdoZW4gZGVidWdnaW5nIGxvY2FsbHkg b24gbW9zdCB0YXJnZXRzLCBleGNsdWRpbmcKKy1Ac2N7ZGpncHB9LCBDeWd3aW4sIE1TIFdpbmRv d3MsIGFuZCBRTlggTmV1dHJpbm8uCisrQHNje2RqZ3BwfSwgQ3lnd2luLCBhbmQgTVMgV2luZG93 cy4KKyAKKyBAa2luZGV4IHNldCBzdGFydHVwLXdpdGgtc2hlbGwKKyBAYW5jaG9ye3NldCBzdGFy dHVwLXdpdGgtc2hlbGx9CitAQCAtMjIwMTEsNyArMjIwMTEsNyBAQAorIEBjaW5kZXggc2hhcmVk IGxpYnJhcmllcworIEBhbmNob3J7U2hhcmVkIExpYnJhcmllc30KKyBAdmFsdWV7R0RCTn0gc3Vw cG9ydHMgQHNje2dudX0vTGludXgsIE1TLVdpbmRvd3MsIFN1bk9TLAorLURhcndpbi9NYWNoLU8s IFNWcjQsIElCTSBSUy82MDAwIEFJWCwgUU5YIE5ldXRyaW5vLCBGRFBJQyAoRlItViksIGFuZAor K0Rhcndpbi9NYWNoLU8sIFNWcjQsIElCTSBSUy82MDAwIEFJWCwgRkRQSUMgKEZSLVYpLCBhbmQK KyBEU0JUIChUSUM2WCkgc2hhcmVkIGxpYnJhcmllcy4KKyAKKyBPbiBNUy1XaW5kb3dzIEB2YWx1 ZXtHREJOfSBtdXN0IGJlIGxpbmtlZCB3aXRoIHRoZSBFeHBhdCBsaWJyYXJ5IHRvIHN1cHBvcnQK K0BAIC0yNTIwMywxNiArMjUyMDMsNiBAQAorIFRoZXNlIGNvbW1hbmRzIGVuYWJsZSBhbmQgZGlz YWJsZSB0cmFjaW5nIG9mIGVudHJpZXMgaW50byBhbmQgZXhpdHMKKyBmcm9tIHRoZSBAY29kZXtz eXNjYWxsfSBpbnRlcmZhY2UuCisgCistQGl0ZW0gaW5mbyBwaWRsaXN0CistQGtpbmRleCBpbmZv IHBpZGxpc3QKKy1AY2luZGV4IHByb2Nlc3MgbGlzdCwgUU5YIE5ldXRyaW5vCistRm9yIFFOWCBO ZXV0cmlubyBvbmx5LCB0aGlzIGNvbW1hbmQgZGlzcGxheXMgdGhlIGxpc3Qgb2YgYWxsIHRoZQor LXByb2Nlc3NlcyBhbmQgYWxsIHRoZSB0aHJlYWRzIHdpdGhpbiBlYWNoIHByb2Nlc3MuCistCist QGl0ZW0gaW5mbyBtZW1pbmZvCistQGtpbmRleCBpbmZvIG1lbWluZm8KKy1AY2luZGV4IG1hcGlu Zm8gbGlzdCwgUU5YIE5ldXRyaW5vCistRm9yIFFOWCBOZXV0cmlubyBvbmx5LCB0aGlzIGNvbW1h bmQgZGlzcGxheXMgdGhlIGxpc3Qgb2YgYWxsIG1hcGluZm9zLgorIEBlbmQgdGFibGUKKyAKKyBA bm9kZSBESkdQUCBOYXRpdmUKK2RpZmYgLS1naXQgYS9nZGIvaTM4Ni1udG8tdGRlcC5jIGIvZ2Ri L2kzODYtbnRvLXRkZXAuYworZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CistLS0gYS9nZGIvaTM4 Ni1udG8tdGRlcC5jCisrKysgL2Rldi9udWxsCitAQCAtMSwzNzkgKzAsMCBAQAorLS8qIFRhcmdl dC1kZXBlbmRlbnQgY29kZSBmb3IgUU5YIE5ldXRyaW5vIHg4Ni4KKy0KKy0gICBDb3B5cmlnaHQg KEMpIDIwMDMtMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBDb250 cmlidXRlZCBieSBRTlggU29mdHdhcmUgU3lzdGVtcyBMdGQuCistCistICAgVGhpcyBmaWxlIGlz IHBhcnQgb2YgR0RCLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgorLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistCistICAg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKy0KKy0jaW5jbHVkZSAiZXh0cmFjdC1zdG9yZS1pbnRlZ2VyLmgiCistI2luY2x1ZGUgImZy YW1lLmgiCistI2luY2x1ZGUgIm9zYWJpLmgiCistI2luY2x1ZGUgInJlZ2NhY2hlLmgiCistI2lu Y2x1ZGUgInRhcmdldC5oIgorLQorLSNpbmNsdWRlICJpMzg2LXRkZXAuaCIKKy0jaW5jbHVkZSAi aTM4Ny10ZGVwLmgiCistI2luY2x1ZGUgIm50by10ZGVwLmgiCistI2luY2x1ZGUgInNvbGliLmgi CistI2luY2x1ZGUgInNvbGliLXN2cjQuaCIKKy0KKy0jaWZuZGVmIFg4Nl9DUFVfRlhTUgorLSNk ZWZpbmUgWDg2X0NQVV9GWFNSICgxTCA8PCAxMikKKy0jZW5kaWYKKy0KKy0vKiBXaHkgMTM/ICBM b29rIGluIG91ciAvdXNyL2luY2x1ZGUveDg2L2NvbnRleHQuaCBoZWFkZXIgYXQgdGhlCistICAg eDg2X2NwdV9yZWdpc3RlcnMgc3RydWN0dXJlIGFuZCB5b3UnbGwgc2VlIGFuICdleHgnIGp1bmsg cmVnaXN0ZXIKKy0gICB0aGF0IGlzIGp1c3QgZmlsbGVyLiAgRG9uJ3QgYXNrIG1lLCBhc2sgdGhl IGtlcm5lbCBndXlzLiAgKi8KKy0jZGVmaW5lIE5VTV9HUFJFR1MgMTMKKy0KKy0vKiBNYXBwaW5n IGJldHdlZW4gdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgaW4gYHN0cnVjdCB4eHgnCist ICAgZm9ybWF0IGFuZCBHREIncyByZWdpc3RlciBjYWNoZSBsYXlvdXQuICAqLworLQorLS8qIEZy b20gPHg4Ni9jb250ZXh0Lmg+LiAgKi8KKy1zdGF0aWMgaW50IGkzODZudG9fZ3JlZ3NldF9yZWdf b2Zmc2V0W10gPQorLXsKKy0gIDcgKiA0LAkJCS8qICVlYXggKi8KKy0gIDYgKiA0LAkJCS8qICVl Y3ggKi8KKy0gIDUgKiA0LAkJCS8qICVlZHggKi8KKy0gIDQgKiA0LAkJCS8qICVlYnggKi8KKy0g IDExICogNCwJCQkvKiAlZXNwICovCistICAyICogNCwJCQkvKiAlZXBiICovCistICAxICogNCwJ CQkvKiAlZXNpICovCistICAwICogNCwJCQkvKiAlZWRpICovCistICA4ICogNCwJCQkvKiAlZWlw ICovCistICAxMCAqIDQsCQkJLyogJWVmbGFncyAqLworLSAgOSAqIDQsCQkJLyogJWNzICovCist ICAxMiAqIDQsCQkJLyogJXNzICovCistICAtMQkJCQkvKiBmaWxsZXIgKi8KKy19OworLQorLS8q IEdpdmVuIGEgR0RCIHJlZ2lzdGVyIG51bWJlciBSRUdOVU0sIHJldHVybiB0aGUgb2Zmc2V0IGlu dG8KKy0gICBOZXV0cmlubydzIHJlZ2lzdGVyIHN0cnVjdHVyZSBvciAtMSBpZiB0aGUgcmVnaXN0 ZXIgaXMgdW5rbm93bi4gICovCistCistc3RhdGljIGludAorLW50b19yZWdfb2Zmc2V0IChpbnQg cmVnbnVtKQorLXsKKy0gIGlmIChyZWdudW0gPj0gMCAmJiByZWdudW0gPCBBUlJBWV9TSVpFIChp Mzg2bnRvX2dyZWdzZXRfcmVnX29mZnNldCkpCistICAgIHJldHVybiBpMzg2bnRvX2dyZWdzZXRf cmVnX29mZnNldFtyZWdudW1dOworLQorLSAgcmV0dXJuIC0xOworLX0KKy0KKy1zdGF0aWMgdm9p ZAorLWkzODZudG9fc3VwcGx5X2dyZWdzZXQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGNo YXIgKmdwcmVncykKKy17CistICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IHJlZ2NhY2hlLT5h cmNoICgpOworLSAgaTM4Nl9nZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXA8aTM4Nl9n ZGJhcmNoX3RkZXA+IChnZGJhcmNoKTsKKy0KKy0gIGdkYl9hc3NlcnQgKHRkZXAtPmdyZWdzZXRf cmVnX29mZnNldCA9PSBpMzg2bnRvX2dyZWdzZXRfcmVnX29mZnNldCk7CistICBpMzg2X2dyZWdz ZXQuc3VwcGx5X3JlZ3NldCAoJmkzODZfZ3JlZ3NldCwgcmVnY2FjaGUsIC0xLAorLQkJCSAgICAg IGdwcmVncywgTlVNX0dQUkVHUyAqIDQpOworLX0KKy0KKy1zdGF0aWMgdm9pZAorLWkzODZudG9f c3VwcGx5X2ZwcmVnc2V0IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjaGFyICpmcHJlZ3Mp CisteworLSAgaWYgKG50b19jcHVpbmZvX3ZhbGlkICYmIG50b19jcHVpbmZvX2ZsYWdzIHwgWDg2 X0NQVV9GWFNSKQorLSAgICBpMzg3X3N1cHBseV9meHNhdmUgKHJlZ2NhY2hlLCAtMSwgZnByZWdz KTsKKy0gIGVsc2UKKy0gICAgaTM4N19zdXBwbHlfZnNhdmUgKHJlZ2NhY2hlLCAtMSwgZnByZWdz KTsKKy19CistCistc3RhdGljIHZvaWQKKy1pMzg2bnRvX3N1cHBseV9yZWdzZXQgKHN0cnVjdCBy ZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdzZXQsIGNoYXIgKmRhdGEpCisteworLSAgc3dpdGNo IChyZWdzZXQpCistICAgIHsKKy0gICAgY2FzZSBOVE9fUkVHX0dFTkVSQUw6CistICAgICAgaTM4 Nm50b19zdXBwbHlfZ3JlZ3NldCAocmVnY2FjaGUsIGRhdGEpOworLSAgICAgIGJyZWFrOworLSAg ICBjYXNlIE5UT19SRUdfRkxPQVQ6CistICAgICAgaTM4Nm50b19zdXBwbHlfZnByZWdzZXQgKHJl Z2NhY2hlLCBkYXRhKTsKKy0gICAgICBicmVhazsKKy0gICAgfQorLX0KKy0KKy1zdGF0aWMgaW50 CistaTM4Nm50b19yZWdzZXRfaWQgKGludCByZWdubykKKy17CistICBpZiAocmVnbm8gPT0gLTEp CistICAgIHJldHVybiBOVE9fUkVHX0VORDsKKy0gIGVsc2UgaWYgKHJlZ25vIDwgSTM4Nl9OVU1f R1JFR1MpCistICAgIHJldHVybiBOVE9fUkVHX0dFTkVSQUw7CistICBlbHNlIGlmIChyZWdubyA8 IEkzODZfTlVNX0dSRUdTICsgSTM4N19OVU1fUkVHUykKKy0gICAgcmV0dXJuIE5UT19SRUdfRkxP QVQ7CistICBlbHNlIGlmIChyZWdubyA8IEkzODZfU1NFX05VTV9SRUdTKQorLSAgICByZXR1cm4g TlRPX1JFR19GTE9BVDsgLyogV2Ugc3RvcmUgeG1tIHJlZ2lzdGVycyBpbiBmeHNhdmVfYXJlYS4g ICovCistCistICByZXR1cm4gLTE7CQkJLyogRXJyb3IuICAqLworLX0KKy0KKy1zdGF0aWMgaW50 CistaTM4Nm50b19yZWdpc3Rlcl9hcmVhIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKy0JCSAg ICAgICBpbnQgcmVnbm8sIGludCByZWdzZXQsIHVuc2lnbmVkICpvZmYpCisteworLSAgaTM4Nl9n ZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXA8aTM4Nl9nZGJhcmNoX3RkZXA+IChnZGJh cmNoKTsKKy0KKy0gICpvZmYgPSAwOworLSAgaWYgKHJlZ3NldCA9PSBOVE9fUkVHX0dFTkVSQUwp CistICAgIHsKKy0gICAgICBpZiAocmVnbm8gPT0gLTEpCistCXJldHVybiBOVU1fR1BSRUdTICog NDsKKy0KKy0gICAgICAqb2ZmID0gbnRvX3JlZ19vZmZzZXQgKHJlZ25vKTsKKy0gICAgICBpZiAo Km9mZiA9PSAtMSkKKy0JcmV0dXJuIDA7CistICAgICAgcmV0dXJuIDQ7CistICAgIH0KKy0gIGVs c2UgaWYgKHJlZ3NldCA9PSBOVE9fUkVHX0ZMT0FUKQorLSAgICB7CistICAgICAgdW5zaWduZWQg b2ZmX2FkanVzdCwgcmVnc2l6ZSwgcmVnc2V0X3NpemUsIHJlZ25vX2Jhc2U7CistICAgICAgLyog VGhlIGZvbGxvd2luZyBhcmUgZmxhZ3MgaW5kaWNhdGluZyBudW1iZXIgaW4gb3VyIGZ4c2F2ZV9h cmVhLiAgKi8KKy0gICAgICBpbnQgZmlyc3RfZm91ciA9IChyZWdubyA+PSBJMzg3X0ZDVFJMX1JF R05VTSAodGRlcCkKKy0JCQkmJiByZWdubyA8PSBJMzg3X0ZJU0VHX1JFR05VTSAodGRlcCkpOwor LSAgICAgIGludCBzZWNvbmRfZm91ciA9IChyZWdubyA+IEkzODdfRklTRUdfUkVHTlVNICh0ZGVw KQorLQkJCSAmJiByZWdubyA8PSBJMzg3X0ZPUF9SRUdOVU0gKHRkZXApKTsKKy0gICAgICBpbnQg c3RfcmVnID0gKHJlZ25vID49IEkzODdfU1QwX1JFR05VTSAodGRlcCkKKy0JCSAgICAmJiByZWdu byA8IEkzODdfU1QwX1JFR05VTSAodGRlcCkgKyA4KTsKKy0gICAgICBpbnQgeG1tX3JlZyA9IChy ZWdubyA+PSBJMzg3X1hNTTBfUkVHTlVNICh0ZGVwKQorLQkJICAgICAmJiByZWdubyA8IEkzODdf TVhDU1JfUkVHTlVNICh0ZGVwKSk7CistCistICAgICAgaWYgKG50b19jcHVpbmZvX3ZhbGlkICYm IG50b19jcHVpbmZvX2ZsYWdzIHwgWDg2X0NQVV9GWFNSKQorLQl7CistCSAgb2ZmX2FkanVzdCA9 IDMyOworLQkgIHJlZ3NpemUgPSAxNjsKKy0JICByZWdzZXRfc2l6ZSA9IDUxMjsKKy0JICAvKiBm eHNhdmVfYXJlYSBzdHJ1Y3R1cmUuICAqLworLQkgIGlmIChmaXJzdF9mb3VyKQorLQkgICAgewor LQkgICAgICAvKiBmcHVfY29udHJvbF93b3JkLCBmcHVfc3RhdHVzX3dvcmQsIGZwdV90YWdfd29y ZCwgZnB1X29wZXJhbmQKKy0JCSByZWdpc3RlcnMuICAqLworLQkgICAgICByZWdzaXplID0gMjsg LyogVHdvIGJ5dGVzIGVhY2guICAqLworLQkgICAgICBvZmZfYWRqdXN0ID0gMDsKKy0JICAgICAg cmVnbm9fYmFzZSA9IEkzODdfRkNUUkxfUkVHTlVNICh0ZGVwKTsKKy0JICAgIH0KKy0JICBlbHNl IGlmIChzZWNvbmRfZm91cikKKy0JICAgIHsKKy0JICAgICAgLyogZnB1X2lwLCBmcHVfY3MsIGZw dV9vcCwgZnB1X2RzIHJlZ2lzdGVycy4gICovCistCSAgICAgIHJlZ3NpemUgPSA0OworLQkgICAg ICBvZmZfYWRqdXN0ID0gODsKKy0JICAgICAgcmVnbm9fYmFzZSA9IEkzODdfRklTRUdfUkVHTlVN ICh0ZGVwKSArIDE7CistCSAgICB9CistCSAgZWxzZSBpZiAoc3RfcmVnKQorLQkgICAgeworLQkg ICAgICAvKiBTVCByZWdpc3RlcnMuICAqLworLQkgICAgICByZWdzaXplID0gMTY7CistCSAgICAg IG9mZl9hZGp1c3QgPSAzMjsKKy0JICAgICAgcmVnbm9fYmFzZSA9IEkzODdfU1QwX1JFR05VTSAo dGRlcCk7CistCSAgICB9CistCSAgZWxzZSBpZiAoeG1tX3JlZykKKy0JICAgIHsKKy0JICAgICAg LyogWE1NIHJlZ2lzdGVycy4gICovCistCSAgICAgIHJlZ3NpemUgPSAxNjsKKy0JICAgICAgb2Zm X2FkanVzdCA9IDE2MDsKKy0JICAgICAgcmVnbm9fYmFzZSA9IEkzODdfWE1NMF9SRUdOVU0gKHRk ZXApOworLQkgICAgfQorLQkgIGVsc2UgaWYgKHJlZ25vID09IEkzODdfTVhDU1JfUkVHTlVNICh0 ZGVwKSkKKy0JICAgIHsKKy0JICAgICAgcmVnc2l6ZSA9IDQ7CistCSAgICAgIG9mZl9hZGp1c3Qg PSAyNDsKKy0JICAgICAgcmVnbm9fYmFzZSA9IEkzODdfTVhDU1JfUkVHTlVNICh0ZGVwKTsKKy0J ICAgIH0KKy0JICBlbHNlCistCSAgICB7CistCSAgICAgIC8qIFdob2xlIHJlZ3NldC4gICovCist CSAgICAgIGdkYl9hc3NlcnQgKHJlZ25vID09IC0xKTsKKy0JICAgICAgb2ZmX2FkanVzdCA9IDA7 CistCSAgICAgIHJlZ25vX2Jhc2UgPSAwOworLQkgICAgICByZWdzaXplID0gcmVnc2V0X3NpemU7 CistCSAgICB9CistCX0KKy0gICAgICBlbHNlCistCXsKKy0JICByZWdzZXRfc2l6ZSA9IDEwODsK Ky0JICAvKiBmc2F2ZV9hcmVhIHN0cnVjdHVyZS4gICovCistCSAgaWYgKGZpcnN0X2ZvdXIgfHwg c2Vjb25kX2ZvdXIpCistCSAgICB7CistCSAgICAgIC8qIGZwdV9jb250cm9sX3dvcmQsIC4uLiAs IGZwdV9kcyByZWdpc3RlcnMuICAqLworLQkgICAgICByZWdzaXplID0gNDsKKy0JICAgICAgb2Zm X2FkanVzdCA9IDA7CistCSAgICAgIHJlZ25vX2Jhc2UgPSBJMzg3X0ZDVFJMX1JFR05VTSAodGRl cCk7CistCSAgICB9CistCSAgZWxzZSBpZiAoc3RfcmVnKQorLQkgICAgeworLQkgICAgICAvKiBP bmUgb2YgU1QgcmVnaXN0ZXJzLiAgKi8KKy0JICAgICAgcmVnc2l6ZSA9IDEwOworLQkgICAgICBv ZmZfYWRqdXN0ID0gNyAqIDQ7CistCSAgICAgIHJlZ25vX2Jhc2UgPSBJMzg3X1NUMF9SRUdOVU0g KHRkZXApOworLQkgICAgfQorLQkgIGVsc2UKKy0JICAgIHsKKy0JICAgICAgLyogV2hvbGUgcmVn c2V0LiAgKi8KKy0JICAgICAgZ2RiX2Fzc2VydCAocmVnbm8gPT0gLTEpOworLQkgICAgICBvZmZf YWRqdXN0ID0gMDsKKy0JICAgICAgcmVnbm9fYmFzZSA9IDA7CistCSAgICAgIHJlZ3NpemUgPSBy ZWdzZXRfc2l6ZTsKKy0JICAgIH0KKy0JfQorLQorLSAgICAgIGlmIChyZWdubyAhPSAtMSkKKy0J Km9mZiA9IG9mZl9hZGp1c3QgKyAocmVnbm8gLSByZWdub19iYXNlKSAqIHJlZ3NpemU7CistICAg ICAgZWxzZQorLQkqb2ZmID0gMDsKKy0gICAgICByZXR1cm4gcmVnc2l6ZTsKKy0gICAgfQorLSAg cmV0dXJuIC0xOworLX0KKy0KKy1zdGF0aWMgaW50CistaTM4Nm50b19yZWdzZXRfZmlsbCAoY29u c3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ3NldCwgY2hhciAqZGF0YSkKKy17 CistICBpZiAocmVnc2V0ID09IE5UT19SRUdfR0VORVJBTCkKKy0gICAgeworLSAgICAgIGludCBy ZWdubzsKKy0KKy0gICAgICBmb3IgKHJlZ25vID0gMDsgcmVnbm8gPCBOVU1fR1BSRUdTOyByZWdu bysrKQorLQl7CistCSAgaW50IG9mZnNldCA9IG50b19yZWdfb2Zmc2V0IChyZWdubyk7CistCSAg aWYgKG9mZnNldCAhPSAtMSkKKy0JICAgIHJlZ2NhY2hlLT5yYXdfY29sbGVjdCAocmVnbm8sIGRh dGEgKyBvZmZzZXQpOworLQl9CistICAgIH0KKy0gIGVsc2UgaWYgKHJlZ3NldCA9PSBOVE9fUkVH X0ZMT0FUKQorLSAgICB7CistICAgICAgaWYgKG50b19jcHVpbmZvX3ZhbGlkICYmIG50b19jcHVp bmZvX2ZsYWdzIHwgWDg2X0NQVV9GWFNSKQorLQlpMzg3X2NvbGxlY3RfZnhzYXZlIChyZWdjYWNo ZSwgLTEsIGRhdGEpOworLSAgICAgIGVsc2UKKy0JaTM4N19jb2xsZWN0X2ZzYXZlIChyZWdjYWNo ZSwgLTEsIGRhdGEpOworLSAgICB9CistICBlbHNlCistICAgIHJldHVybiAtMTsKKy0KKy0gIHJl dHVybiAwOworLX0KKy0KKy0vKiBSZXR1cm4gd2hldGhlciBUSElTX0ZSQU1FIGNvcnJlc3BvbmRz IHRvIGEgUU5YIE5ldXRyaW5vIHNpZ3RyYW1wCistICAgcm91dGluZS4gICovCistCistc3RhdGlj IGludAorLWkzODZudG9fc2lndHJhbXBfcCAoY29uc3QgZnJhbWVfaW5mb19wdHIgJnRoaXNfZnJh bWUpCisteworLSAgQ09SRV9BRERSIHBjID0gZ2V0X2ZyYW1lX3BjICh0aGlzX2ZyYW1lKTsKKy0g IGNvbnN0IGNoYXIgKm5hbWU7CistCistICBmaW5kX3BjX3BhcnRpYWxfZnVuY3Rpb24gKHBjLCAm bmFtZSwgTlVMTCwgTlVMTCk7CistICByZXR1cm4gbmFtZSAmJiBzdHJjbXAgKCJfX3NpZ25hbHN0 dWIiLCBuYW1lKSA9PSAwOworLX0KKy0KKy0vKiBBc3N1bWluZyBUSElTX0ZSQU1FIGlzIGEgUU5Y IE5ldXRyaW5vIHNpZ3RyYW1wIHJvdXRpbmUsIHJldHVybiB0aGUKKy0gICBhZGRyZXNzIG9mIHRo ZSBhc3NvY2lhdGVkIHNpZ2NvbnRleHQgc3RydWN0dXJlLiAgKi8KKy0KKy1zdGF0aWMgQ09SRV9B RERSCistaTM4Nm50b19zaWdjb250ZXh0X2FkZHIgKGNvbnN0IGZyYW1lX2luZm9fcHRyICZ0aGlz X2ZyYW1lKQorLXsKKy0gIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2gg KHRoaXNfZnJhbWUpOworLSAgZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5 dGVfb3JkZXIgKGdkYmFyY2gpOworLSAgZ2RiX2J5dGUgYnVmWzRdOworLSAgQ09SRV9BRERSIHB0 cmN0eDsKKy0KKy0gIC8qIFdlIHN0b3JlIF9fdWNvbnRleHRfdCBhZGRyIGluIEVESSByZWdpc3Rl ci4gICovCistICBnZXRfZnJhbWVfcmVnaXN0ZXIgKHRoaXNfZnJhbWUsIEkzODZfRURJX1JFR05V TSwgYnVmKTsKKy0gIHB0cmN0eCA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYnVmLCA0LCBi eXRlX29yZGVyKTsKKy0gIHB0cmN0eCArPSAyNCAvKiBDb250ZXh0IHBvaW50ZXIgaXMgYXQgdGhp cyBvZmZzZXQuICAqLzsKKy0KKy0gIHJldHVybiBwdHJjdHg7CistfQorLQorLXN0YXRpYyB2b2lk CistaW5pdF9pMzg2bnRvX29wcyAodm9pZCkKKy17CistICBudG9fcmVnc2V0X2lkID0gaTM4Nm50 b19yZWdzZXRfaWQ7CistICBudG9fc3VwcGx5X2dyZWdzZXQgPSBpMzg2bnRvX3N1cHBseV9ncmVn c2V0OworLSAgbnRvX3N1cHBseV9mcHJlZ3NldCA9IGkzODZudG9fc3VwcGx5X2ZwcmVnc2V0Owor LSAgbnRvX3N1cHBseV9hbHRyZWdzZXQgPSBudG9fZHVtbXlfc3VwcGx5X3JlZ3NldDsKKy0gIG50 b19zdXBwbHlfcmVnc2V0ID0gaTM4Nm50b19zdXBwbHlfcmVnc2V0OworLSAgbnRvX3JlZ2lzdGVy X2FyZWEgPSBpMzg2bnRvX3JlZ2lzdGVyX2FyZWE7CistICBudG9fcmVnc2V0X2ZpbGwgPSBpMzg2 bnRvX3JlZ3NldF9maWxsOworLSAgbnRvX2ZldGNoX2xpbmtfbWFwX29mZnNldHMgPQorLSAgICBz dnI0X2lscDMyX2ZldGNoX2xpbmtfbWFwX29mZnNldHM7CistfQorLQorLXN0YXRpYyB2b2lkCist aTM4Nm50b19pbml0X2FiaSAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCkKKy17CistICBpMzg2X2dkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRl cDxpMzg2X2dkYmFyY2hfdGRlcD4gKGdkYmFyY2gpOworLSAgc3RhdGljIHNvbGliX29wcyBudG9f c3ZyNF9zb19vcHM7CistCistICAvKiBEZWFsIHdpdGggb3VyIHN0cmFuZ2Ugc2lnbmFscy4gICov CistICBudG9faW5pdGlhbGl6ZV9zaWduYWxzICgpOworLQorLSAgLyogTlRPIHVzZXMgRUxGLiAg Ki8KKy0gIGkzODZfZWxmX2luaXRfYWJpIChpbmZvLCBnZGJhcmNoKTsKKy0KKy0gIC8qIE5ldXRy aW5vIHJld2luZHMgdG8gbG9vayBtb3JlIG5vcm1hbC4gIE5lZWQgdG8gb3ZlcnJpZGUgdGhlIGkz ODYKKy0gICAgIGRlZmF1bHQgd2hpY2ggaXMgW3VuZm9ydHVuYXRlbHldIHRvIGRlY3JlbWVudCB0 aGUgUEMuICAqLworLSAgc2V0X2dkYmFyY2hfZGVjcl9wY19hZnRlcl9icmVhayAoZ2RiYXJjaCwg MCk7CistCistICB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXQgPSBpMzg2bnRvX2dyZWdzZXRfcmVn X29mZnNldDsKKy0gIHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3MgPSBBUlJBWV9TSVpFIChpMzg2bnRv X2dyZWdzZXRfcmVnX29mZnNldCk7CistICB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCA9IE5VTV9HUFJF R1MgKiA0OworLQorLSAgdGRlcC0+c2lndHJhbXBfcCA9IGkzODZudG9fc2lndHJhbXBfcDsKKy0g IHRkZXAtPnNpZ2NvbnRleHRfYWRkciA9IGkzODZudG9fc2lnY29udGV4dF9hZGRyOworLSAgdGRl cC0+c2NfcmVnX29mZnNldCA9IGkzODZudG9fZ3JlZ3NldF9yZWdfb2Zmc2V0OworLSAgdGRlcC0+ c2NfbnVtX3JlZ3MgPSBBUlJBWV9TSVpFIChpMzg2bnRvX2dyZWdzZXRfcmVnX29mZnNldCk7Cist CistICAvKiBTZXRqbXAoKSdzIHJldHVybiBQQyBzYXZlZCBpbiBFRFggKDUpLiAgKi8KKy0gIHRk ZXAtPmpiX3BjX29mZnNldCA9IDIwOwkvKiA1eDMyIGJpdCBpbnRzIGluLiAgKi8KKy0KKy0gIHNl dF9zb2xpYl9zdnI0X2ZldGNoX2xpbmtfbWFwX29mZnNldHMKKy0gICAgKGdkYmFyY2gsIHN2cjRf aWxwMzJfZmV0Y2hfbGlua19tYXBfb2Zmc2V0cyk7CistCistICAvKiBJbml0aWFsaXplIHRoaXMg bGF6aWx5LCB0byBhdm9pZCBhbiBpbml0aWFsaXphdGlvbiBvcmRlcgorLSAgICAgZGVwZW5kZW5j eSBvbiBzb2xpYi1zdnI0LmMncyBfaW5pdGlhbGl6ZSByb3V0aW5lLiAgKi8KKy0gIGlmIChudG9f c3ZyNF9zb19vcHMuaW5fZHluc3ltX3Jlc29sdmVfY29kZSA9PSBOVUxMKQorLSAgICB7CistICAg ICAgbnRvX3N2cjRfc29fb3BzID0gc3ZyNF9zb19vcHM7CistCistICAgICAgLyogT3VyIGxvYWRl ciBoYW5kbGVzIHNvbGliIHJlbG9jYXRpb25zIGRpZmZlcmVudGx5IHRoYW4gc3ZyNC4gICovCist ICAgICAgbnRvX3N2cjRfc29fb3BzLnJlbG9jYXRlX3NlY3Rpb25fYWRkcmVzc2VzCistCT0gbnRv X3JlbG9jYXRlX3NlY3Rpb25fYWRkcmVzc2VzOworLQorLSAgICAgIC8qIFN1cHBseSBhIG5pY2Ug ZnVuY3Rpb24gdG8gZmluZCBvdXIgc29saWJzLiAgKi8KKy0gICAgICBudG9fc3ZyNF9zb19vcHMu ZmluZF9hbmRfb3Blbl9zb2xpYgorLQk9IG50b19maW5kX2FuZF9vcGVuX3NvbGliOworLQorLSAg ICAgIC8qIE91ciBsaW5rZXIgY29kZSBpcyBpbiBsaWJjLiAgKi8KKy0gICAgICBudG9fc3ZyNF9z b19vcHMuaW5fZHluc3ltX3Jlc29sdmVfY29kZQorLQk9IG50b19pbl9keW5zeW1fcmVzb2x2ZV9j b2RlOworLSAgICB9CistICBzZXRfZ2RiYXJjaF9zb19vcHMgKGdkYmFyY2gsICZudG9fc3ZyNF9z b19vcHMpOworLQorLSAgc2V0X2dkYmFyY2hfd2NoYXJfYml0IChnZGJhcmNoLCAzMik7CistICBz ZXRfZ2RiYXJjaF93Y2hhcl9zaWduZWQgKGdkYmFyY2gsIDApOworLX0KKy0KKy12b2lkIF9pbml0 aWFsaXplX2kzODZudG9fdGRlcCAoKTsKKy12b2lkCistX2luaXRpYWxpemVfaTM4Nm50b190ZGVw ICgpCisteworLSAgaW5pdF9pMzg2bnRvX29wcyAoKTsKKy0gIGdkYmFyY2hfcmVnaXN0ZXJfb3Nh YmkgKGJmZF9hcmNoX2kzODYsIDAsIEdEQl9PU0FCSV9RTlhOVE8sCistCQkJICBpMzg2bnRvX2lu aXRfYWJpKTsKKy0gIGdkYmFyY2hfcmVnaXN0ZXJfb3NhYmlfc25pZmZlciAoYmZkX2FyY2hfaTM4 NiwgYmZkX3RhcmdldF9lbGZfZmxhdm91ciwKKy0JCQkJICBudG9fZWxmX29zYWJpX3NuaWZmZXIp OworLX0KK2RpZmYgLS1naXQgYS9nZGIvbnRvLXByb2Nmcy5jIGIvZ2RiL250by1wcm9jZnMuYwor ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CistLS0gYS9nZGIvbnRvLXByb2Nmcy5jCisrKysgL2Rl di9udWxsCitAQCAtMSwxNTg4ICswLDAgQEAKKy0vKiBNYWNoaW5lIGluZGVwZW5kZW50IHN1cHBv cnQgZm9yIFFOWCBOZXV0cmlubyAvcHJvYyAocHJvY2VzcyBmaWxlIHN5c3RlbSkKKy0gICBmb3Ig R0RCLiAgV3JpdHRlbiBieSBDb2xpbiBCdXJnZXNzIGF0IFFOWCBTb2Z0d2FyZSBTeXN0ZW1zIExp bWl0ZWQuCistCistICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjQgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCistCistICAgQ29udHJpYnV0ZWQgYnkgUU5YIFNvZnR3YXJlIFN5c3RlbXMg THRkLgorLQorLSAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKy0KKy0gICBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAg IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCistCistCistI2luY2x1ZGUgPGZjbnRsLmg+Cist I2luY2x1ZGUgPHNwYXduLmg+CistI2luY2x1ZGUgPHN5cy9kZWJ1Zy5oPgorLSNpbmNsdWRlIDxz eXMvcHJvY2ZzLmg+CistI2luY2x1ZGUgPHN5cy9uZXV0cmluby5oPgorLSNpbmNsdWRlIDxzeXMv c3lzcGFnZS5oPgorLSNpbmNsdWRlIDxkaXJlbnQuaD4KKy0jaW5jbHVkZSA8c3lzL25ldG1nci5o PgorLSNpbmNsdWRlIDxzeXMvYXV4di5oPgorLQorLSNpbmNsdWRlICJnZGJjb3JlLmgiCistI2lu Y2x1ZGUgImluZmVyaW9yLmgiCistI2luY2x1ZGUgInRhcmdldC5oIgorLSNpbmNsdWRlICJvYmpm aWxlcy5oIgorLSNpbmNsdWRlICJnZGJ0aHJlYWQuaCIKKy0jaW5jbHVkZSAibnRvLXRkZXAuaCIK Ky0jaW5jbHVkZSAiY29tbWFuZC5oIgorLSNpbmNsdWRlICJyZWdjYWNoZS5oIgorLSNpbmNsdWRl ICJzb2xpYi5oIgorLSNpbmNsdWRlICJpbmYtY2hpbGQuaCIKKy0jaW5jbHVkZSAiZ2Ric3VwcG9y dC9maWxlc3R1ZmYuaCIKKy0jaW5jbHVkZSAiZ2Ric3VwcG9ydC9zY29wZWRfZmQuaCIKKy0KKy0j ZGVmaW5lIE5VTExfUElECQkwCistI2RlZmluZSBfREVCVUdfRkxBR19UUkFDRQkoX0RFQlVHX0ZM QUdfVFJBQ0VfRVhFQ3xfREVCVUdfRkxBR19UUkFDRV9SRHxcCistCQlfREVCVUdfRkxBR19UUkFD RV9XUnxfREVCVUdfRkxBR19UUkFDRV9NT0RJRlkpCistCistaW50IGN0bF9mZDsKKy0KKy1zdGF0 aWMgc2lnaGFuZGxlcl90IG9mdW5jOworLQorLXN0YXRpYyBwcm9jZnNfcnVuIHJ1bjsKKy0KKy0v KiBDcmVhdGUgdGhlICJuYXRpdmUiIGFuZCAicHJvY2ZzIiB0YXJnZXRzLiAgKi8KKy0KKy1zdHJ1 Y3QgbnRvX3Byb2Nmc190YXJnZXQgOiBwdWJsaWMgaW5mX2NoaWxkX3RhcmdldAorLXsKKy0gIHZv aWQgb3BlbiAoY29uc3QgY2hhciAqYXJnLCBpbnQgZnJvbV90dHkpIG92ZXJyaWRlOworLQorLSAg dm9pZCBhdHRhY2ggKGNvbnN0IGNoYXIgKiwgaW50KSBvdmVycmlkZSA9IDA7CistCistICB2b2lk IHBvc3RfYXR0YWNoIChpbnQpOworLQorLSAgdm9pZCBkZXRhY2ggKGluZmVyaW9yICosIGludCkg b3ZlcnJpZGU7CistCistICB2b2lkIHJlc3VtZSAocHRpZF90LCBpbnQsIGVudW0gZ2RiX3NpZ25h bCkgb3ZlcnJpZGU7CistCistICBwdGlkX3Qgd2FpdCAocHRpZF90LCBzdHJ1Y3QgdGFyZ2V0X3dh aXRzdGF0dXMgKiwgdGFyZ2V0X3dhaXRfZmxhZ3MpIG92ZXJyaWRlOworLQorLSAgdm9pZCBmZXRj aF9yZWdpc3RlcnMgKHN0cnVjdCByZWdjYWNoZSAqLCBpbnQpIG92ZXJyaWRlOworLSAgdm9pZCBz dG9yZV9yZWdpc3RlcnMgKHN0cnVjdCByZWdjYWNoZSAqLCBpbnQpIG92ZXJyaWRlOworLQorLSAg ZW51bSB0YXJnZXRfeGZlcl9zdGF0dXMgeGZlcl9wYXJ0aWFsIChlbnVtIHRhcmdldF9vYmplY3Qg b2JqZWN0LAorLQkJCQkJY29uc3QgY2hhciAqYW5uZXgsCistCQkJCQlnZGJfYnl0ZSAqcmVhZGJ1 ZiwKKy0JCQkJCWNvbnN0IGdkYl9ieXRlICp3cml0ZWJ1ZiwKKy0JCQkJCVVMT05HRVNUIG9mZnNl dCwgVUxPTkdFU1QgbGVuLAorLQkJCQkJVUxPTkdFU1QgKnhmZXJlZF9sZW4pIG92ZXJyaWRlOwor LQorLSAgdm9pZCBmaWxlc19pbmZvICgpIG92ZXJyaWRlOworLQorLSAgaW50IGluc2VydF9icmVh a3BvaW50IChzdHJ1Y3QgZ2RiYXJjaCAqLCBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKikgb3ZlcnJp ZGU7CistCistICBpbnQgcmVtb3ZlX2JyZWFrcG9pbnQgKHN0cnVjdCBnZGJhcmNoICosIHN0cnVj dCBicF90YXJnZXRfaW5mbyAqLAorLQkJCSBlbnVtIHJlbW92ZV9icF9yZWFzb24pIG92ZXJyaWRl OworLQorLSAgaW50IGNhbl91c2VfaHdfYnJlYWtwb2ludCAoZW51bSBicHR5cGUsIGludCwgaW50 KSBvdmVycmlkZTsKKy0KKy0gIGludCBpbnNlcnRfaHdfYnJlYWtwb2ludCAoc3RydWN0IGdkYmFy Y2ggKiwgc3RydWN0IGJwX3RhcmdldF9pbmZvICopIG92ZXJyaWRlOworLQorLSAgaW50IHJlbW92 ZV9od19icmVha3BvaW50IChzdHJ1Y3QgZ2RiYXJjaCAqLCBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8g Kikgb3ZlcnJpZGU7CistCistICBpbnQgaW5zZXJ0X3dhdGNocG9pbnQgKENPUkVfQUREUiwgaW50 LCBlbnVtIHRhcmdldF9od19icF90eXBlLAorLQkJCSBzdHJ1Y3QgZXhwcmVzc2lvbiAqKSBvdmVy cmlkZTsKKy0KKy0gIGludCByZW1vdmVfd2F0Y2hwb2ludCAoQ09SRV9BRERSLCBpbnQsIGVudW0g dGFyZ2V0X2h3X2JwX3R5cGUsCistCQkJIHN0cnVjdCBleHByZXNzaW9uICopIG92ZXJyaWRlOwor LQorLSAgYm9vbCBzdG9wcGVkX2J5X3dhdGNocG9pbnQgKCkgb3ZlcnJpZGU7CistCistICB2b2lk IGtpbGwgKCkgb3ZlcnJpZGU7CistCistICB2b2lkIGNyZWF0ZV9pbmZlcmlvciAoY29uc3QgY2hh ciAqLCBjb25zdCBzdGQ6OnN0cmluZyAmLAorLQkJCWNoYXIgKiosIGludCkgb3ZlcnJpZGU7Cist CistICB2b2lkIG1vdXJuX2luZmVyaW9yICgpIG92ZXJyaWRlOworLQorLSAgdm9pZCBwYXNzX3Np Z25hbHMgKGdkYjo6YXJyYXlfdmlldzxjb25zdCB1bnNpZ25lZCBjaGFyPikgb3ZlcnJpZGU7Cist CistICBib29sIHRocmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpIG92ZXJyaWRlOworLQorLSAgdm9p ZCB1cGRhdGVfdGhyZWFkX2xpc3QgKCkgb3ZlcnJpZGU7CistCistICBzdGQ6OnN0cmluZyBwaWRf dG9fc3RyIChwdGlkX3QpIG92ZXJyaWRlOworLQorLSAgdm9pZCBpbnRlcnJ1cHQgKCkgb3ZlcnJp ZGU7CistCistICBjb25zdCBjaGFyICpleHRyYV90aHJlYWRfaW5mbyAoc3RydWN0IHRocmVhZF9p bmZvICopIG92ZXJyaWRlOworLQorLSAgY29uc3QgY2hhciAqcGlkX3RvX2V4ZWNfZmlsZSAoaW50 IHBpZCkgb3ZlcnJpZGU7CistfTsKKy0KKy0vKiBGb3IgInRhcmdldCBuYXRpdmUiLiAgKi8KKy0K Ky1zdGF0aWMgY29uc3QgdGFyZ2V0X2luZm8gbnRvX25hdGl2ZV90YXJnZXRfaW5mbyA9IHsKKy0g ICJuYXRpdmUiLAorLSAgTl8oIlFOWCBOZXV0cmlubyBsb2NhbCBwcm9jZXNzIiksCistICBOXygi UU5YIE5ldXRyaW5vIGxvY2FsIHByb2Nlc3MgKHN0YXJ0ZWQgYnkgdGhlIFwicnVuXCIgY29tbWFu ZCkuIikKKy19OworLQorLWNsYXNzIG50b19wcm9jZnNfdGFyZ2V0X25hdGl2ZSBmaW5hbCA6IHB1 YmxpYyBudG9fcHJvY2ZzX3RhcmdldAorLXsKKy0gIGNvbnN0IHRhcmdldF9pbmZvICZpbmZvICgp IGNvbnN0IG92ZXJyaWRlCistICB7IHJldHVybiBudG9fbmF0aXZlX3RhcmdldF9pbmZvOyB9Cist fTsKKy0KKy0vKiBGb3IgInRhcmdldCBwcm9jZnMgPG5vZGU+Ii4gICovCistCistc3RhdGljIGNv bnN0IHRhcmdldF9pbmZvIG50b19wcm9jZnNfdGFyZ2V0X2luZm8gPSB7CistICAicHJvY2ZzIiwK Ky0gIE5fKCJRTlggTmV1dHJpbm8gbG9jYWwgb3IgcmVtb3RlIHByb2Nlc3MiKSwKKy0gIE5fKCJR TlggTmV1dHJpbm8gcHJvY2Vzcy4gIHRhcmdldCBwcm9jZnMgTk9ERSIpCistfTsKKy0KKy1zdHJ1 Y3QgbnRvX3Byb2Nmc190YXJnZXRfcHJvY2ZzIGZpbmFsIDogcHVibGljIG50b19wcm9jZnNfdGFy Z2V0CisteworLSAgY29uc3QgdGFyZ2V0X2luZm8gJmluZm8gKCkgY29uc3Qgb3ZlcnJpZGUKKy0g IHsgcmV0dXJuIG50b19wcm9jZnNfdGFyZ2V0X2luZm87IH0KKy19OworLQorLXN0YXRpYyBwdGlk X3QgZG9fYXR0YWNoIChwdGlkX3QgcHRpZCk7CistCistLyogVGhlc2UgdHdvIGdsb2JhbHMgYXJl IG9ubHkgZXZlciBzZXQgaW4gcHJvY2ZzX29wZW5fMSwgYnV0IGFyZQorLSAgIHJlZmVyZW5jZWQg ZWxzZXdoZXJlLiAgJ250b19wcm9jZnNfbm9kZScgaXMgYSBmbGFnIHVzZWQgdG8gc2F5CistICAg d2hldGhlciB3ZSBhcmUgbG9jYWwsIG9yIHdlIHNob3VsZCBnZXQgdGhlIGN1cnJlbnQgbm9kZSBk ZXNjcmlwdG9yCistICAgZm9yIHRoZSByZW1vdGUgUU5YIG5vZGUuICAqLworLXN0YXRpYyBjaGFy ICpub2Rlc3RyOworLXN0YXRpYyB1bnNpZ25lZCBudG9fcHJvY2ZzX25vZGUgPSBORF9MT0NBTF9O T0RFOworLQorLS8qIFJldHVybiB0aGUgY3VycmVudCBRTlggTm9kZSwgb3IgZXJyb3Igb3V0LiAg VGhpcyBpcyBhIHNpbXBsZQorLSAgIHdyYXBwZXIgZm9yIHRoZSBuZXRtZ3Jfc3RydG9uZCgpIGZ1 bmN0aW9uLiAgVGhlIHJlYXNvbiB0aGlzCistICAgaXMgcmVxdWlyZWQgaXMgYmVjYXVzZSBRTlgg bm9kZSBkZXNjcmlwdG9ycyBhcmUgdHJhbnNpZW50IHNvCistICAgd2UgaGF2ZSB0byByZS1hY3F1 aXJlIHRoZW0gZXZlcnkgdGltZS4gICovCistc3RhdGljIHVuc2lnbmVkCistbnRvX25vZGUgKHZv aWQpCisteworLSAgdW5zaWduZWQgbm9kZTsKKy0KKy0gIGlmIChORF9OT0RFX0NNUCAobnRvX3By b2Nmc19ub2RlLCBORF9MT0NBTF9OT0RFKSA9PSAwCistICAgICAgfHwgbm9kZXN0ciA9PSBOVUxM KQorLSAgICByZXR1cm4gTkRfTE9DQUxfTk9ERTsKKy0KKy0gIG5vZGUgPSBuZXRtZ3Jfc3RydG9u ZCAobm9kZXN0ciwgMCk7CistICBpZiAobm9kZSA9PSAtMSkKKy0gICAgZXJyb3IgKF8oIkxvc3Qg dGhlIFFOWCBub2RlLiAgRGVidWcgc2Vzc2lvbiBwcm9iYWJseSBvdmVyLiIpKTsKKy0KKy0gIHJl dHVybiAobm9kZSk7CistfQorLQorLXN0YXRpYyBlbnVtIGdkYl9vc2FiaQorLXByb2Nmc19pc19u dG9fdGFyZ2V0IChiZmQgKmFiZmQpCisteworLSAgcmV0dXJuIEdEQl9PU0FCSV9RTlhOVE87Cist fQorLQorLS8qIFRoaXMgaXMgY2FsbGVkIHdoZW4gd2UgY2FsbCAndGFyZ2V0IG5hdGl2ZScgb3Ig J3RhcmdldCBwcm9jZnMKKy0gICA8YXJnPicgZnJvbSB0aGUgKGdkYikgcHJvbXB0LiAgRm9yIFFO WDYgKG50byksIHRoZSBvbmx5IHZhbGlkIGFyZworLSAgIHdpbGwgYmUgYSBRTlggbm9kZSBzdHJp bmcsIGVnOiAiL25ldC9zb21lX25vZGUiLiAgSWYgYXJnIGlzIG5vdCBhCistICAgdmFsaWQgUU5Y IG5vZGUsIHdlIHdpbGwgZGVmYXVsdCB0byBsb2NhbC4gICovCistdm9pZAorLW50b19wcm9jZnNf dGFyZ2V0OjpvcGVuIChjb25zdCBjaGFyICphcmcsIGludCBmcm9tX3R0eSkKKy17CistICBjaGFy ICplbmRzdHI7CistICBjaGFyIGJ1ZmZlcls1MF07CistICBpbnQgdG90YWxfc2l6ZTsKKy0gIHBy b2Nmc19zeXNpbmZvICpzeXNpbmZvOworLSAgY2hhciBudG9fcHJvY2ZzX3BhdGhbUEFUSF9NQVhd OworLQorLSAgLyogT2ZmZXIgdG8ga2lsbCBwcmV2aW91cyBpbmZlcmlvcnMgYmVmb3JlIG9wZW5p bmcgdGhpcyB0YXJnZXQuICAqLworLSAgdGFyZ2V0X3ByZW9wZW4gKGZyb21fdHR5KTsKKy0KKy0g IG50b19pc19udG9fdGFyZ2V0ID0gcHJvY2ZzX2lzX250b190YXJnZXQ7CistCistICAvKiBTZXQg dGhlIGRlZmF1bHQgbm9kZSB1c2VkIGZvciBzcGF3bmluZyB0byB0aGlzIG9uZSwKKy0gICAgIGFu ZCBvbmx5IG92ZXJyaWRlIGl0IGlmIHRoZXJlIGlzIGEgdmFsaWQgYXJnLiAgKi8KKy0KKy0gIHhm cmVlIChub2Rlc3RyKTsKKy0gIG5vZGVzdHIgPSBOVUxMOworLQorLSAgbnRvX3Byb2Nmc19ub2Rl ID0gTkRfTE9DQUxfTk9ERTsKKy0gIG5vZGVzdHIgPSAoYXJnICE9IE5VTEwpID8geHN0cmR1cCAo YXJnKSA6IE5VTEw7CistCistICBpZiAobm9kZXN0cikKKy0gICAgeworLSAgICAgIG50b19wcm9j ZnNfbm9kZSA9IG5ldG1ncl9zdHJ0b25kIChub2Rlc3RyLCAmZW5kc3RyKTsKKy0gICAgICBpZiAo bnRvX3Byb2Nmc19ub2RlID09IC0xKQorLQl7CistCSAgaWYgKGVycm5vID09IEVOT1RTVVApCist CSAgICBnZGJfcHJpbnRmICgiUU5YIE5ldCBNYW5hZ2VyIG5vdCBmb3VuZC5cbiIpOworLQkgIGdk Yl9wcmludGYgKCJJbnZhbGlkIFFOWCBub2RlICVzOiBlcnJvciAlZCAoJXMpLlxuIiwgbm9kZXN0 ciwKKy0JCSAgICAgIGVycm5vLCBzYWZlX3N0cmVycm9yIChlcnJubykpOworLQkgIHhmcmVlIChu b2Rlc3RyKTsKKy0JICBub2Rlc3RyID0gTlVMTDsKKy0JICBudG9fcHJvY2ZzX25vZGUgPSBORF9M T0NBTF9OT0RFOworLQl9CistICAgICAgZWxzZSBpZiAoKmVuZHN0cikKKy0JeworLQkgIGlmICgq KGVuZHN0ciAtIDEpID09ICcvJykKKy0JICAgICooZW5kc3RyIC0gMSkgPSAwOworLQkgIGVsc2UK Ky0JICAgICplbmRzdHIgPSAwOworLQl9CistICAgIH0KKy0gIHNucHJpbnRmIChudG9fcHJvY2Zz X3BhdGgsIFBBVEhfTUFYIC0gMSwgIiVzJXMiLAorLQkgICAgKG5vZGVzdHIgIT0gTlVMTCkgPyBu b2Rlc3RyIDogIiIsICIvcHJvYyIpOworLQorLSAgc2NvcGVkX2ZkIGZkIChvcGVuIChudG9fcHJv Y2ZzX3BhdGgsIE9fUkRPTkxZKSk7CistICBpZiAoZmQuZ2V0ICgpID09IC0xKQorLSAgICB7Cist ICAgICAgZ2RiX3ByaW50ZiAoIkVycm9yIG9wZW5pbmcgJXMgOiAlZCAoJXMpXG4iLCBudG9fcHJv Y2ZzX3BhdGgsIGVycm5vLAorLQkJICBzYWZlX3N0cmVycm9yIChlcnJubykpOworLSAgICAgIGVy cm9yIChfKCJJbnZhbGlkIHByb2NmcyBhcmciKSk7CistICAgIH0KKy0KKy0gIHN5c2luZm8gPSAo dm9pZCAqKSBidWZmZXI7CistICBpZiAoZGV2Y3RsIChmZC5nZXQgKCksIERDTURfUFJPQ19TWVNJ TkZPLCBzeXNpbmZvLCBzaXplb2YgYnVmZmVyLCAwKSAhPSBFT0spCistICAgIHsKKy0gICAgICBn ZGJfcHJpbnRmICgiRXJyb3IgZ2V0dGluZyBzaXplOiAlZCAoJXMpXG4iLCBlcnJubywKKy0JCSAg c2FmZV9zdHJlcnJvciAoZXJybm8pKTsKKy0gICAgICBlcnJvciAoXygiRGV2Y3RsIGZhaWxlZC4i KSk7CistICAgIH0KKy0gIGVsc2UKKy0gICAgeworLSAgICAgIHRvdGFsX3NpemUgPSBzeXNpbmZv LT50b3RhbF9zaXplOworLSAgICAgIHN5c2luZm8gPSBhbGxvY2EgKHRvdGFsX3NpemUpOworLSAg ICAgIGlmIChzeXNpbmZvID09IE5VTEwpCistCXsKKy0JICBnZGJfcHJpbnRmICgiTWVtb3J5IGVy cm9yOiAlZCAoJXMpXG4iLCBlcnJubywKKy0JCSAgICAgIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7 CistCSAgZXJyb3IgKF8oImFsbG9jYSBmYWlsZWQuIikpOworLQl9CistICAgICAgZWxzZQorLQl7 CistCSAgaWYgKGRldmN0bCAoZmQuZ2V0ICgpLCBEQ01EX1BST0NfU1lTSU5GTywgc3lzaW5mbywg dG90YWxfc2l6ZSwgMCkKKy0JICAgICAgIT0gRU9LKQorLQkgICAgeworLQkgICAgICBnZGJfcHJp bnRmICgiRXJyb3IgZ2V0dGluZyBzeXNpbmZvOiAlZCAoJXMpXG4iLCBlcnJubywKKy0JCQkgIHNh ZmVfc3RyZXJyb3IgKGVycm5vKSk7CistCSAgICAgIGVycm9yIChfKCJEZXZjdGwgZmFpbGVkLiIp KTsKKy0JICAgIH0KKy0JICBlbHNlCistCSAgICB7CistCSAgICAgIGlmIChzeXNpbmZvLT50eXBl ICE9CistCQkgIG50b19tYXBfYXJjaF90b19jcHV0eXBlCistCQkgICAgKGdkYmFyY2hfYmZkX2Fy Y2hfaW5mbworLQkJICAgICAoY3VycmVudF9pbmZlcmlvciAoKS0+YXJjaCAoKSktPmFyY2hfbmFt ZSkpCistCQllcnJvciAoXygiSW52YWxpZCB0YXJnZXQgQ1BVLiIpKTsKKy0JICAgIH0KKy0JfQor LSAgICB9CistCistICBpbmZfY2hpbGRfdGFyZ2V0OjpvcGVuIChhcmcsIGZyb21fdHR5KTsKKy0g IGdkYl9wcmludGYgKCJEZWJ1Z2dpbmcgdXNpbmcgJXNcbiIsIG50b19wcm9jZnNfcGF0aCk7Cist fQorLQorLXN0YXRpYyB2b2lkCistcHJvY2ZzX3NldF90aHJlYWQgKHB0aWRfdCBwdGlkKQorLXsK Ky0gIHBpZF90IHRpZDsKKy0KKy0gIHRpZCA9IHB0aWQudGlkICgpOworLSAgZGV2Y3RsIChjdGxf ZmQsIERDTURfUFJPQ19DVVJUSFJFQUQsICZ0aWQsIHNpemVvZiAodGlkKSwgMCk7CistfQorLQor LS8qICBSZXR1cm4gdHJ1ZSBpZiB0aGUgdGhyZWFkIFRIIGlzIHN0aWxsIGFsaXZlLiAgKi8KKy0K Ky1ib29sCistbnRvX3Byb2Nmc190YXJnZXQ6OnRocmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCist eworLSAgcGlkX3QgdGlkOworLSAgcGlkX3QgcGlkOworLSAgcHJvY2ZzX3N0YXR1cyBzdGF0dXM7 CistICBpbnQgZXJyOworLQorLSAgdGlkID0gcHRpZC50aWQgKCk7CistICBwaWQgPSBwdGlkLnBp ZCAoKTsKKy0KKy0gIGlmIChraWxsIChwaWQsIDApID09IC0xKQorLSAgICByZXR1cm4gZmFsc2U7 CistCistICBzdGF0dXMudGlkID0gdGlkOworLSAgaWYgKChlcnIgPSBkZXZjdGwgKGN0bF9mZCwg RENNRF9QUk9DX1RJRFNUQVRVUywKKy0JCSAgICAgJnN0YXR1cywgc2l6ZW9mIChzdGF0dXMpLCAw KSkgIT0gRU9LKQorLSAgICByZXR1cm4gZmFsc2U7CistCistICAvKiBUaHJlYWQgaXMgYWxpdmUg b3IgZGVhZCBidXQgbm90IHlldCBqb2luZWQsCistICAgICBvciBkZWFkIGFuZCB0aGVyZSBpcyBh biBhbGl2ZSAob3IgZGVhZCB1bmpvaW5lZCkgdGhyZWFkIHdpdGgKKy0gICAgIGhpZ2hlciB0aWQu CistCistICAgICBJZiB0aGUgdGlkIGlzIG5vdCB0aGUgc2FtZSBhcyByZXF1ZXN0ZWQsIHJlcXVl c3RlZCB0aWQgaXMgZGVhZC4gICovCistICByZXR1cm4gKHN0YXR1cy50aWQgPT0gdGlkKSAmJiAo c3RhdHVzLnN0YXRlICE9IFNUQVRFX0RFQUQpOworLX0KKy0KKy1zdGF0aWMgdm9pZAorLXVwZGF0 ZV90aHJlYWRfcHJpdmF0ZV9kYXRhX25hbWUgKHN0cnVjdCB0aHJlYWRfaW5mbyAqbmV3X3RocmVh ZCwKKy0JCQkJIGNvbnN0IGNoYXIgKm5ld25hbWUpCisteworLSAgbnRvX3RocmVhZF9pbmZvICpw dGkgPSBnZXRfbnRvX3RocmVhZF9pbmZvIChuZXdfdGhyZWFkKTsKKy0KKy0gIGdkYl9hc3NlcnQg KG5ld25hbWUgIT0gTlVMTCk7CistICBnZGJfYXNzZXJ0IChuZXdfdGhyZWFkICE9IE5VTEwpOwor LQorLSAgaWYgKHB0aSkKKy0gICAgeworLSAgICAgIHB0aSA9IG5ldyBudG9fdGhyZWFkX2luZm87 CistICAgICAgbmV3X3RocmVhZC0+cHJpdi5yZXNldCAocHRpKTsKKy0gICAgfQorLQorLSAgcHRp LT5uYW1lID0gbmV3bmFtZTsKKy19CistCistc3RhdGljIHZvaWQgCistdXBkYXRlX3RocmVhZF9w cml2YXRlX2RhdGEgKHN0cnVjdCB0aHJlYWRfaW5mbyAqbmV3X3RocmVhZCwgCistCQkJICAgIHB0 aHJlYWRfdCB0aWQsIGludCBzdGF0ZSwgaW50IGZsYWdzKQorLXsKKy0gIHByb2Nmc19pbmZvIHBp ZGluZm87CistICBzdHJ1Y3QgX3RocmVhZF9uYW1lICp0bjsKKy0gIHByb2Nmc190aHJlYWRjdGwg dGN0bDsKKy0KKy0jaWYgX05UT19WRVJTSU9OID4gNjMwCistICBnZGJfYXNzZXJ0IChuZXdfdGhy ZWFkICE9IE5VTEwpOworLQorLSAgaWYgKGRldmN0bCAoY3RsX2ZkLCBEQ01EX1BST0NfSU5GTywg JnBpZGluZm8sCistCSAgICAgIHNpemVvZihwaWRpbmZvKSwgMCkgIT0gRU9LKQorLSAgICByZXR1 cm47CistCistICBtZW1zZXQgKCZ0Y3RsLCAwLCBzaXplb2YgKHRjdGwpKTsKKy0gIHRjdGwuY21k ID0gX05UT19UQ1RMX05BTUU7CistICB0biA9IChzdHJ1Y3QgX3RocmVhZF9uYW1lICopICgmdGN0 bC5kYXRhKTsKKy0KKy0gIC8qIEZldGNoIG5hbWUgZm9yIHRoZSBnaXZlbiB0aHJlYWQuICAqLwor LSAgdGN0bC50aWQgPSB0aWQ7CistICB0bi0+bmFtZV9idWZfbGVuID0gc2l6ZW9mICh0Y3RsLmRh dGEpIC0gc2l6ZW9mICgqdG4pOworLSAgdG4tPm5ld19uYW1lX2xlbiA9IC0xOyAvKiBHZXR0aW5n LCBub3Qgc2V0dGluZy4gICovCistICBpZiAoZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19USFJF QURDVEwsICZ0Y3RsLCBzaXplb2YgKHRjdGwpLCBOVUxMKSAhPSBFT0spCistICAgIHRuLT5uYW1l X2J1ZlswXSA9ICdcMCc7CistCistICB0bi0+bmFtZV9idWZbX05UT19USFJFQURfTkFNRV9NQVhd ID0gJ1wwJzsKKy0KKy0gIHVwZGF0ZV90aHJlYWRfcHJpdmF0ZV9kYXRhX25hbWUgKG5ld190aHJl YWQsIHRuLT5uYW1lX2J1Zik7CistCistICBudG9fdGhyZWFkX2luZm8gKnB0aSA9IGdldF9udG9f dGhyZWFkX2luZm8gKG5ld190aHJlYWQpOworLSAgcHRpLT50aWQgPSB0aWQ7CistICBwdGktPnN0 YXRlID0gc3RhdGU7CistICBwdGktPmZsYWdzID0gZmxhZ3M7CistI2VuZGlmIC8qIF9OVE9fVkVS U0lPTiAqLworLX0KKy0KKy12b2lkCistbnRvX3Byb2Nmc190YXJnZXQ6OnVwZGF0ZV90aHJlYWRf bGlzdCAoKQorLXsKKy0gIHByb2Nmc19zdGF0dXMgc3RhdHVzOworLSAgcGlkX3QgcGlkOworLSAg cHRpZF90IHB0aWQ7CistICBwdGhyZWFkX3QgdGlkOworLSAgc3RydWN0IHRocmVhZF9pbmZvICpu ZXdfdGhyZWFkOworLQorLSAgaWYgKGN0bF9mZCA9PSAtMSkKKy0gICAgcmV0dXJuOworLQorLSAg cHJ1bmVfdGhyZWFkcyAoKTsKKy0KKy0gIHBpZCA9IGN1cnJlbnRfaW5mZXJpb3IgKCktPnBpZDsK Ky0KKy0gIHN0YXR1cy50aWQgPSAxOworLQorLSAgZm9yICh0aWQgPSAxOzsgKyt0aWQpCistICAg IHsKKy0gICAgICBpZiAoc3RhdHVzLnRpZCA9PSB0aWQgCistCSAgJiYgKGRldmN0bCAoY3RsX2Zk LCBEQ01EX1BST0NfVElEU1RBVFVTLCAmc3RhdHVzLCBzaXplb2YgKHN0YXR1cyksIDApCistCSAg ICAgICE9IEVPSykpCistCWJyZWFrOworLSAgICAgIGlmIChzdGF0dXMudGlkICE9IHRpZCkKKy0J LyogVGhlIHJlYXNvbiB3aHkgdGhpcyB3b3VsZCBub3QgYmUgZXF1YWwgaXMgdGhhdCBkZXZjdGwg bWlnaHQgaGF2ZSAKKy0JICAgcmV0dXJuZWQgZGlmZmVyZW50IHRpZCwgbWVhbmluZyB0aGUgcmVx dWVzdGVkIHRpZCBubyBsb25nZXIgZXhpc3RzCistCSAgIChlLmcuIHRocmVhZCBleGl0ZWQpLiAg Ki8KKy0JY29udGludWU7CistICAgICAgcHRpZCA9IHB0aWRfdCAocGlkLCAwLCB0aWQpOworLSAg ICAgIG5ld190aHJlYWQgPSB0aGlzLT5maW5kX3RocmVhZCAocHRpZCk7CistICAgICAgaWYgKCFu ZXdfdGhyZWFkKQorLQluZXdfdGhyZWFkID0gYWRkX3RocmVhZCAocHRpZCk7CistICAgICAgdXBk YXRlX3RocmVhZF9wcml2YXRlX2RhdGEgKG5ld190aHJlYWQsIHRpZCwgc3RhdHVzLnN0YXRlLCAw KTsKKy0gICAgICBzdGF0dXMudGlkKys7CistICAgIH0KKy0gIHJldHVybjsKKy19CistCistc3Rh dGljIHZvaWQKKy1wcm9jZnNfcGlkbGlzdCAoY29uc3QgY2hhciAqYXJncywgaW50IGZyb21fdHR5 KQorLXsKKy0gIHN0cnVjdCBkaXJlbnQgKmRpcnAgPSBOVUxMOworLSAgY2hhciBidWZbUEFUSF9N QVhdOworLSAgcHJvY2ZzX2luZm8gKnBpZGluZm8gPSBOVUxMOworLSAgcHJvY2ZzX2RlYnVnaW5m byAqaW5mbyA9IE5VTEw7CistICBwcm9jZnNfc3RhdHVzICpzdGF0dXMgPSBOVUxMOworLSAgcGlk X3QgbnVtX3RocmVhZHMgPSAwOworLSAgcGlkX3QgcGlkOworLSAgY2hhciBuYW1lWzUxMl07Cist ICBjaGFyIHByb2Nmc19kaXJbUEFUSF9NQVhdOworLQorLSAgc25wcmludGYgKHByb2Nmc19kaXIs IHNpemVvZiAocHJvY2ZzX2RpciksICIlcyVzIiwKKy0JICAgIChub2Rlc3RyICE9IE5VTEwpID8g bm9kZXN0ciA6ICIiLCAiL3Byb2MiKTsKKy0KKy0gIGdkYl9kaXJfdXAgZHAgKG9wZW5kaXIgKHBy b2Nmc19kaXIpKTsKKy0gIGlmIChkcCA9PSBOVUxMKQorLSAgICB7CistICAgICAgZ2RiX3ByaW50 ZiAoZ2RiX3N0ZGVyciwgImZhaWxlZCB0byBvcGVuZGlyIFwiJXNcIiAtICVkICglcykiLAorLQkJ ICBwcm9jZnNfZGlyLCBlcnJubywgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsKKy0gICAgICByZXR1 cm47CistICAgIH0KKy0KKy0gIC8qIFN0YXJ0IHNjYW4gYXQgZmlyc3QgcGlkLiAgKi8KKy0gIHJl d2luZGRpciAoZHAuZ2V0ICgpKTsKKy0KKy0gIGRvCistICAgIHsKKy0gICAgICAvKiBHZXQgdGhl IHJpZ2h0IHBpZCBhbmQgcHJvY2ZzIHBhdGggZm9yIHRoZSBwaWQuICAqLworLSAgICAgIGRvCist CXsKKy0JICBkaXJwID0gcmVhZGRpciAoZHAuZ2V0ICgpKTsKKy0JICBpZiAoZGlycCA9PSBOVUxM KQorLQkgICAgcmV0dXJuOworLQkgIHNucHJpbnRmIChidWYsIHNpemVvZiAoYnVmKSwgIiVzJXMv JXMvYXMiLAorLQkJICAgIChub2Rlc3RyICE9IE5VTEwpID8gbm9kZXN0ciA6ICIiLAorLQkJICAg ICIvcHJvYyIsIGRpcnAtPmRfbmFtZSk7CistCSAgcGlkID0gYXRvaSAoZGlycC0+ZF9uYW1lKTsK Ky0JfQorLSAgICAgIHdoaWxlIChwaWQgPT0gMCk7CistCistICAgICAgLyogT3BlbiB0aGUgcHJv Y2ZzIHBhdGguICAqLworLSAgICAgIHNjb3BlZF9mZCBmZCAob3BlbiAoYnVmLCBPX1JET05MWSkp OworLSAgICAgIGlmIChmZC5nZXQgKCkgPT0gLTEpCistCXsKKy0JICBnZGJfcHJpbnRmIChnZGJf c3RkZXJyLCAiZmFpbGVkIHRvIG9wZW4gJXMgLSAlZCAoJXMpXG4iLAorLQkJICAgICAgYnVmLCBl cnJubywgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsKKy0JICBjb250aW51ZTsKKy0JfQorLQorLSAg ICAgIHBpZGluZm8gPSAocHJvY2ZzX2luZm8gKikgYnVmOworLSAgICAgIGlmIChkZXZjdGwgKGZk LmdldCAoKSwgRENNRF9QUk9DX0lORk8sIHBpZGluZm8sIHNpemVvZiAoYnVmKSwgMCkgIT0gRU9L KQorLQl7CistCSAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGVyciwKKy0JCSAgICAgICJkZXZjdGwgRENN RF9QUk9DX0lORk8gZmFpbGVkIC0gJWQgKCVzKVxuIiwKKy0JCSAgICAgIGVycm5vLCBzYWZlX3N0 cmVycm9yIChlcnJubykpOworLQkgIGJyZWFrOworLQl9CistICAgICAgbnVtX3RocmVhZHMgPSBw aWRpbmZvLT5udW1fdGhyZWFkczsKKy0KKy0gICAgICBpbmZvID0gKHByb2Nmc19kZWJ1Z2luZm8g KikgYnVmOworLSAgICAgIGlmIChkZXZjdGwgKGZkLmdldCAoKSwgRENNRF9QUk9DX01BUERFQlVH X0JBU0UsIGluZm8sIHNpemVvZiAoYnVmKSwgMCkKKy0JICAhPSBFT0spCistCXN0cmNweSAobmFt ZSwgInVuYXZhaWxhYmxlIik7CistICAgICAgZWxzZQorLQlzdHJjcHkgKG5hbWUsIGluZm8tPnBh dGgpOworLQorLSAgICAgIC8qIENvbGxlY3Qgc3RhdGUgaW5mbyBvbiBhbGwgdGhlIHRocmVhZHMu ICAqLworLSAgICAgIHN0YXR1cyA9IChwcm9jZnNfc3RhdHVzICopIGJ1ZjsKKy0gICAgICBmb3Ig KHN0YXR1cy0+dGlkID0gMTsgc3RhdHVzLT50aWQgPD0gbnVtX3RocmVhZHM7IHN0YXR1cy0+dGlk KyspCistCXsKKy0JICBjb25zdCBpbnQgZXJyCistCSAgICA9IGRldmN0bCAoZmQuZ2V0ICgpLCBE Q01EX1BST0NfVElEU1RBVFVTLCBzdGF0dXMsIHNpemVvZiAoYnVmKSwgMCk7CistCSAgZ2RiX3By aW50ZiAoIiVzIC0gJWQiLCBuYW1lLCBwaWQpOworLQkgIGlmIChlcnIgPT0gRU9LICYmIHN0YXR1 cy0+dGlkICE9IDApCistCSAgICBnZGJfcHJpbnRmICgiLyVkXG4iLCBzdGF0dXMtPnRpZCk7Cist CSAgZWxzZQorLQkgICAgeworLQkgICAgICBnZGJfcHJpbnRmICgiXG4iKTsKKy0JICAgICAgYnJl YWs7CistCSAgICB9CistCX0KKy0gICAgfQorLSAgd2hpbGUgKGRpcnAgIT0gTlVMTCk7CistfQor LQorLXN0YXRpYyB2b2lkCistcHJvY2ZzX21lbWluZm8gKGNvbnN0IGNoYXIgKmFyZ3MsIGludCBm cm9tX3R0eSkKKy17CistICBwcm9jZnNfbWFwaW5mbyAqbWFwaW5mb3MgPSBOVUxMOworLSAgc3Rh dGljIGludCBudW1fbWFwaW5mb3MgPSAwOworLSAgcHJvY2ZzX21hcGluZm8gKm1hcGluZm9fcCwg Km1hcGluZm9fcDI7CistICBpbnQgZmxhZ3MgPSB+MCwgZXJyLCBudW0sIGksIGo7CistCistICBz dHJ1Y3QKKy0gIHsKKy0gICAgcHJvY2ZzX2RlYnVnaW5mbyBpbmZvOworLSAgICBjaGFyIGJ1ZmZb X1BPU0lYX1BBVEhfTUFYXTsKKy0gIH0gbWFwOworLQorLSAgc3RydWN0IGluZm8KKy0gIHsKKy0g ICAgdW5zaWduZWQgYWRkcjsKKy0gICAgdW5zaWduZWQgc2l6ZTsKKy0gICAgdW5zaWduZWQgZmxh Z3M7CistICAgIHVuc2lnbmVkIGRlYnVnX3ZhZGRyOworLSAgICB1bnNpZ25lZCBsb25nIGxvbmcg b2Zmc2V0OworLSAgfTsKKy0KKy0gIHN0cnVjdCBwcmludGluZm8KKy0gIHsKKy0gICAgdW5zaWdu ZWQgbG9uZyBsb25nIGlubzsKKy0gICAgdW5zaWduZWQgZGV2OworLSAgICBzdHJ1Y3QgaW5mbyB0 ZXh0OworLSAgICBzdHJ1Y3QgaW5mbyBkYXRhOworLSAgICBjaGFyIG5hbWVbMjU2XTsKKy0gIH0g cHJpbnRtZTsKKy0KKy0gIC8qIEdldCB0aGUgbnVtYmVyIG9mIG1hcCBlbnRyeXMuICAqLworLSAg ZXJyID0gZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19NQVBJTkZPLCBOVUxMLCAwLCAmbnVtKTsK Ky0gIGlmIChlcnIgIT0gRU9LKQorLSAgICB7CistICAgICAgcHJpbnRmICgiZmFpbGVkIGRldmN0 bCBudW0gbWFwaW5mb3MgLSAlZCAoJXMpXG4iLCBlcnIsCistCSAgICAgIHNhZmVfc3RyZXJyb3Ig KGVycikpOworLSAgICAgIHJldHVybjsKKy0gICAgfQorLQorLSAgbWFwaW5mb3MgPSBYTkVXVkVD IChwcm9jZnNfbWFwaW5mbywgbnVtKTsKKy0KKy0gIG51bV9tYXBpbmZvcyA9IG51bTsKKy0gIG1h cGluZm9fcCA9IG1hcGluZm9zOworLQorLSAgLyogRmlsbCB0aGUgbWFwIGVudHJ5cy4gICovCist ICBlcnIgPSBkZXZjdGwgKGN0bF9mZCwgRENNRF9QUk9DX01BUElORk8sIG1hcGluZm9fcCwgbnVt CistCQkqIHNpemVvZiAocHJvY2ZzX21hcGluZm8pLCAmbnVtKTsKKy0gIGlmIChlcnIgIT0gRU9L KQorLSAgICB7CistICAgICAgcHJpbnRmICgiZmFpbGVkIGRldmN0bCBtYXBpbmZvcyAtICVkICgl cylcbiIsIGVyciwgc2FmZV9zdHJlcnJvciAoZXJyKSk7CistICAgICAgeGZyZWUgKG1hcGluZm9z KTsKKy0gICAgICByZXR1cm47CistICAgIH0KKy0KKy0gIG51bSA9IHN0ZDo6bWluIChudW0sIG51 bV9tYXBpbmZvcyk7CistCistICAvKiBSdW4gdGhyb3VnaCB0aGUgbGlzdCBvZiBtYXBpbmZvcywg YW5kIHN0b3JlIHRoZSBkYXRhIGFuZCB0ZXh0IGluZm8KKy0gICAgIHNvIHdlIGNhbiBwcmludCBp dCBhdCB0aGUgYm90dG9tIG9mIHRoZSBsb29wLiAgKi8KKy0gIGZvciAobWFwaW5mb19wID0gbWFw aW5mb3MsIGkgPSAwOyBpIDwgbnVtOyBpKyssIG1hcGluZm9fcCsrKQorLSAgICB7CistICAgICAg aWYgKCEobWFwaW5mb19wLT5mbGFncyAmIGZsYWdzKSkKKy0JbWFwaW5mb19wLT5pbm8gPSAwOwor LQorLSAgICAgIGlmIChtYXBpbmZvX3AtPmlubyA9PSAwKQkvKiBBbHJlYWR5IHZpc2l0ZWQuICAq LworLQljb250aW51ZTsKKy0KKy0gICAgICBtYXAuaW5mby52YWRkciA9IG1hcGluZm9fcC0+dmFk ZHI7CistCistICAgICAgZXJyID0gZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19NQVBERUJVRywg Jm1hcCwgc2l6ZW9mIChtYXApLCAwKTsKKy0gICAgICBpZiAoZXJyICE9IEVPSykKKy0JY29udGlu dWU7CistCistICAgICAgbWVtc2V0ICgmcHJpbnRtZSwgMCwgc2l6ZW9mIHByaW50bWUpOworLSAg ICAgIHByaW50bWUuZGV2ID0gbWFwaW5mb19wLT5kZXY7CistICAgICAgcHJpbnRtZS5pbm8gPSBt YXBpbmZvX3AtPmlubzsKKy0gICAgICBwcmludG1lLnRleHQuYWRkciA9IG1hcGluZm9fcC0+dmFk ZHI7CistICAgICAgcHJpbnRtZS50ZXh0LnNpemUgPSBtYXBpbmZvX3AtPnNpemU7CistICAgICAg cHJpbnRtZS50ZXh0LmZsYWdzID0gbWFwaW5mb19wLT5mbGFnczsKKy0gICAgICBwcmludG1lLnRl eHQub2Zmc2V0ID0gbWFwaW5mb19wLT5vZmZzZXQ7CistICAgICAgcHJpbnRtZS50ZXh0LmRlYnVn X3ZhZGRyID0gbWFwLmluZm8udmFkZHI7CistICAgICAgc3RyY3B5IChwcmludG1lLm5hbWUsIG1h cC5pbmZvLnBhdGgpOworLQorLSAgICAgIC8qIENoZWNrIGZvciBtYXRjaGluZyBkYXRhLiAgKi8K Ky0gICAgICBmb3IgKG1hcGluZm9fcDIgPSBtYXBpbmZvcywgaiA9IDA7IGogPCBudW07IGorKywg bWFwaW5mb19wMisrKQorLQl7CistCSAgaWYgKG1hcGluZm9fcDItPnZhZGRyICE9IG1hcGluZm9f cC0+dmFkZHIKKy0JICAgICAgJiYgbWFwaW5mb19wMi0+aW5vID09IG1hcGluZm9fcC0+aW5vCist CSAgICAgICYmIG1hcGluZm9fcDItPmRldiA9PSBtYXBpbmZvX3AtPmRldikKKy0JICAgIHsKKy0J ICAgICAgbWFwLmluZm8udmFkZHIgPSBtYXBpbmZvX3AyLT52YWRkcjsKKy0JICAgICAgZXJyID0K Ky0JCWRldmN0bCAoY3RsX2ZkLCBEQ01EX1BST0NfTUFQREVCVUcsICZtYXAsIHNpemVvZiAobWFw KSwgMCk7CistCSAgICAgIGlmIChlcnIgIT0gRU9LKQorLQkJY29udGludWU7CistCistCSAgICAg IGlmIChzdHJjbXAgKG1hcC5pbmZvLnBhdGgsIHByaW50bWUubmFtZSkpCistCQljb250aW51ZTsK Ky0KKy0JICAgICAgLyogTG93ZXIgZGVidWdfdmFkZHIgaXMgYWx3YXlzIHRleHQsIGlmIG5lY2Vz c2FyeSwgc3dhcC4gICovCistCSAgICAgIGlmICgoaW50KSBtYXAuaW5mby52YWRkciA8IChpbnQp IHByaW50bWUudGV4dC5kZWJ1Z192YWRkcikKKy0JCXsKKy0JCSAgbWVtY3B5ICgmKHByaW50bWUu ZGF0YSksICYocHJpbnRtZS50ZXh0KSwKKy0JCQkgIHNpemVvZiAocHJpbnRtZS5kYXRhKSk7Cist CQkgIHByaW50bWUudGV4dC5hZGRyID0gbWFwaW5mb19wMi0+dmFkZHI7CistCQkgIHByaW50bWUu dGV4dC5zaXplID0gbWFwaW5mb19wMi0+c2l6ZTsKKy0JCSAgcHJpbnRtZS50ZXh0LmZsYWdzID0g bWFwaW5mb19wMi0+ZmxhZ3M7CistCQkgIHByaW50bWUudGV4dC5vZmZzZXQgPSBtYXBpbmZvX3Ay LT5vZmZzZXQ7CistCQkgIHByaW50bWUudGV4dC5kZWJ1Z192YWRkciA9IG1hcC5pbmZvLnZhZGRy OworLQkJfQorLQkgICAgICBlbHNlCistCQl7CistCQkgIHByaW50bWUuZGF0YS5hZGRyID0gbWFw aW5mb19wMi0+dmFkZHI7CistCQkgIHByaW50bWUuZGF0YS5zaXplID0gbWFwaW5mb19wMi0+c2l6 ZTsKKy0JCSAgcHJpbnRtZS5kYXRhLmZsYWdzID0gbWFwaW5mb19wMi0+ZmxhZ3M7CistCQkgIHBy aW50bWUuZGF0YS5vZmZzZXQgPSBtYXBpbmZvX3AyLT5vZmZzZXQ7CistCQkgIHByaW50bWUuZGF0 YS5kZWJ1Z192YWRkciA9IG1hcC5pbmZvLnZhZGRyOworLQkJfQorLQkgICAgICBtYXBpbmZvX3Ay LT5pbm8gPSAwOworLQkgICAgfQorLQl9CistICAgICAgbWFwaW5mb19wLT5pbm8gPSAwOworLQor LSAgICAgIGdkYl9wcmludGYgKCIlc1xuIiwgcHJpbnRtZS5uYW1lKTsKKy0gICAgICBnZGJfcHJp bnRmICgiXHR0ZXh0PSUwOHggYnl0ZXMgQCAweCUwOHhcbiIsIHByaW50bWUudGV4dC5zaXplLAor LQkJICBwcmludG1lLnRleHQuYWRkcik7CistICAgICAgZ2RiX3ByaW50ZiAoIlx0XHRmbGFncz0l MDh4XG4iLCBwcmludG1lLnRleHQuZmxhZ3MpOworLSAgICAgIGdkYl9wcmludGYgKCJcdFx0ZGVi dWc9JTA4eFxuIiwgcHJpbnRtZS50ZXh0LmRlYnVnX3ZhZGRyKTsKKy0gICAgICBnZGJfcHJpbnRm ICgiXHRcdG9mZnNldD0lc1xuIiwgcGhleCAocHJpbnRtZS50ZXh0Lm9mZnNldCwgOCkpOworLSAg ICAgIGlmIChwcmludG1lLmRhdGEuc2l6ZSkKKy0JeworLQkgIGdkYl9wcmludGYgKCJcdGRhdGE9 JTA4eCBieXRlcyBAIDB4JTA4eFxuIiwgcHJpbnRtZS5kYXRhLnNpemUsCistCQkgICAgICBwcmlu dG1lLmRhdGEuYWRkcik7CistCSAgZ2RiX3ByaW50ZiAoIlx0XHRmbGFncz0lMDh4XG4iLCBwcmlu dG1lLmRhdGEuZmxhZ3MpOworLQkgIGdkYl9wcmludGYgKCJcdFx0ZGVidWc9JTA4eFxuIiwgcHJp bnRtZS5kYXRhLmRlYnVnX3ZhZGRyKTsKKy0JICBnZGJfcHJpbnRmICgiXHRcdG9mZnNldD0lc1xu IiwgcGhleCAocHJpbnRtZS5kYXRhLm9mZnNldCwgOCkpOworLQl9CistICAgICAgZ2RiX3ByaW50 ZiAoIlx0ZGV2PTB4JXhcbiIsIHByaW50bWUuZGV2KTsKKy0gICAgICBnZGJfcHJpbnRmICgiXHRp bm89MHgleFxuIiwgKHVuc2lnbmVkIGludCkgcHJpbnRtZS5pbm8pOworLSAgICB9CistICB4ZnJl ZSAobWFwaW5mb3MpOworLSAgcmV0dXJuOworLX0KKy0KKy0vKiBQcmludCBzdGF0dXMgaW5mb3Jt YXRpb24gYWJvdXQgd2hhdCB3ZSdyZSBhY2Nlc3NpbmcuICAqLworLXZvaWQKKy1udG9fcHJvY2Zz X3RhcmdldDo6ZmlsZXNfaW5mbyAoKQorLXsKKy0gIHN0cnVjdCBpbmZlcmlvciAqaW5mID0gY3Vy cmVudF9pbmZlcmlvciAoKTsKKy0KKy0gIGdkYl9wcmludGYgKCJcdFVzaW5nIHRoZSBydW5uaW5n IGltYWdlIG9mICVzICVzIHZpYSAlcy5cbiIsCistCSAgICAgIGluZi0+YXR0YWNoX2ZsYWcgPyAi YXR0YWNoZWQiIDogImNoaWxkIiwKKy0JICAgICAgdGFyZ2V0X3BpZF90b19zdHIgKHB0aWRfdCAo aW5mLT5waWQpKS5jX3N0ciAoKSwKKy0JICAgICAgKG5vZGVzdHIgIT0gTlVMTCkgPyBub2Rlc3Ry IDogImxvY2FsIG5vZGUiKTsKKy19CistCistLyogVGFyZ2V0IHRvX3BpZF90b19leGVjX2ZpbGUg aW1wbGVtZW50YXRpb24uICAqLworLQorLWNvbnN0IGNoYXIgKgorLW50b19wcm9jZnNfdGFyZ2V0 OjpwaWRfdG9fZXhlY19maWxlIChjb25zdCBpbnQgcGlkKQorLXsKKy0gIGludCBwcm9jX2ZkOwor LSAgc3RhdGljIGNoYXIgcHJvY19wYXRoW1BBVEhfTUFYXTsKKy0gIHNzaXplX3QgcmQ7CistCist ICAvKiBSZWFkIGV4ZSBmaWxlIG5hbWUuICAqLworLSAgc25wcmludGYgKHByb2NfcGF0aCwgc2l6 ZW9mIChwcm9jX3BhdGgpLCAiJXMvcHJvYy8lZC9leGVmaWxlIiwKKy0JICAgIChub2Rlc3RyICE9 IE5VTEwpID8gbm9kZXN0ciA6ICIiLCBwaWQpOworLSAgcHJvY19mZCA9IG9wZW4gKHByb2NfcGF0 aCwgT19SRE9OTFkpOworLSAgaWYgKHByb2NfZmQgPT0gLTEpCistICAgIHJldHVybiBOVUxMOwor LQorLSAgcmQgPSByZWFkIChwcm9jX2ZkLCBwcm9jX3BhdGgsIHNpemVvZiAocHJvY19wYXRoKSAt IDEpOworLSAgY2xvc2UgKHByb2NfZmQpOworLSAgaWYgKHJkIDw9IDApCistICAgIHsKKy0gICAg ICBwcm9jX3BhdGhbMF0gPSAnXDAnOworLSAgICAgIHJldHVybiBOVUxMOworLSAgICB9CistICBw cm9jX3BhdGhbcmRdID0gJ1wwJzsKKy0gIHJldHVybiBwcm9jX3BhdGg7CistfQorLQorLS8qIEF0 dGFjaCB0byBwcm9jZXNzIFBJRCwgdGhlbiBpbml0aWFsaXplIGZvciBkZWJ1Z2dpbmcgaXQuICAq LworLXZvaWQKKy1udG9fcHJvY2ZzX3RhcmdldDo6YXR0YWNoIChjb25zdCBjaGFyICphcmdzLCBp bnQgZnJvbV90dHkpCisteworLSAgaW50IHBpZDsKKy0gIHN0cnVjdCBpbmZlcmlvciAqaW5mOwor LQorLSAgcGlkID0gcGFyc2VfcGlkX3RvX2F0dGFjaCAoYXJncyk7CistCistICBpZiAocGlkID09 IGdldHBpZCAoKSkKKy0gICAgZXJyb3IgKF8oIkF0dGFjaGluZyBHREIgdG8gaXRzZWxmIGlzIG5v dCBhIGdvb2QgaWRlYS4uLiIpKTsKKy0KKy0gIHRhcmdldF9hbm5vdW5jZV9hdHRhY2ggKGZyb21f dHR5LCBwaWQpOworLQorLSAgcHRpZF90IHB0aWQgPSBkb19hdHRhY2ggKHB0aWRfdCAocGlkKSk7 CistICBpbmYgPSBjdXJyZW50X2luZmVyaW9yICgpOworLSAgaW5mZXJpb3JfYXBwZWFyZWQgKGlu ZiwgcGlkKTsKKy0gIGluZi0+YXR0YWNoX2ZsYWcgPSB0cnVlOworLQorLSAgaWYgKCFpbmYtPnRh cmdldF9pc19wdXNoZWQgKG9wcykpCistICAgIGluZi0+cHVzaF90YXJnZXQgKG9wcyk7CistCist ICB1cGRhdGVfdGhyZWFkX2xpc3QgKCk7CistCistICBzd2l0Y2hfdG9fdGhyZWFkICh0aGlzLT5m aW5kX3RocmVhZCAocHRpZCkpOworLX0KKy0KKy12b2lkCistbnRvX3Byb2Nmc190YXJnZXQ6OnBv c3RfYXR0YWNoIChwaWRfdCBwaWQpCisteworLSAgaWYgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+ ZXhlY19iZmQgKCkpCistICAgIHNvbGliX2NyZWF0ZV9pbmZlcmlvcl9ob29rICgwKTsKKy19Cist Cistc3RhdGljIHB0aWRfdAorLWRvX2F0dGFjaCAocHRpZF90IHB0aWQpCisteworLSAgcHJvY2Zz X3N0YXR1cyBzdGF0dXM7CistICBzdHJ1Y3Qgc2lnZXZlbnQgZXZlbnQ7CistICBjaGFyIHBhdGhb UEFUSF9NQVhdOworLQorLSAgc25wcmludGYgKHBhdGgsIFBBVEhfTUFYIC0gMSwgIiVzJXMvJWQv YXMiLAorLQkgICAgKG5vZGVzdHIgIT0gTlVMTCkgPyBub2Rlc3RyIDogIiIsICIvcHJvYyIsIHB0 aWQucGlkICgpKTsKKy0gIGN0bF9mZCA9IG9wZW4gKHBhdGgsIE9fUkRXUik7CistICBpZiAoY3Rs X2ZkID09IC0xKQorLSAgICBlcnJvciAoXygiQ291bGRuJ3Qgb3BlbiBwcm9jIGZpbGUgJXMsIGVy cm9yICVkICglcykiKSwgcGF0aCwgZXJybm8sCistCSAgIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7 CistICBpZiAoZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19TVE9QLCAmc3RhdHVzLCBzaXplb2Yg KHN0YXR1cyksIDApICE9IEVPSykKKy0gICAgZXJyb3IgKF8oIkNvdWxkbid0IHN0b3AgcHJvY2Vz cyIpKTsKKy0KKy0gIC8qIERlZmluZSBhIHNpZ2V2ZW50IGZvciBwcm9jZXNzIHN0b3BwZWQgbm90 aWZpY2F0aW9uLiAgKi8KKy0gIGV2ZW50LnNpZ2V2X25vdGlmeSA9IFNJR0VWX1NJR05BTF9USFJF QUQ7CistICBldmVudC5zaWdldl9zaWdubyA9IFNJR1VTUjE7CistICBldmVudC5zaWdldl9jb2Rl ID0gMDsKKy0gIGV2ZW50LnNpZ2V2X3ZhbHVlLnNpdmFsX3B0ciA9IE5VTEw7CistICBldmVudC5z aWdldl9wcmlvcml0eSA9IC0xOworLSAgZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19FVkVOVCwg JmV2ZW50LCBzaXplb2YgKGV2ZW50KSwgMCk7CistCistICBpZiAoZGV2Y3RsIChjdGxfZmQsIERD TURfUFJPQ19TVEFUVVMsICZzdGF0dXMsIHNpemVvZiAoc3RhdHVzKSwgMCkgPT0gRU9LCistICAg ICAgJiYgc3RhdHVzLmZsYWdzICYgX0RFQlVHX0ZMQUdfU1RPUFBFRCkKKy0gICAgU2lnbmFsS2ls bCAobnRvX25vZGUgKCksIHB0aWQucGlkICgpLCAwLCBTSUdDT05ULCAwLCAwKTsKKy0gIG50b19p bml0X3NvbGliX2Fic29sdXRlX3ByZWZpeCAoKTsKKy0gIHJldHVybiBwdGlkX3QgKHB0aWQucGlk ICgpLCAwLCBzdGF0dXMudGlkKTsKKy19CistCistLyogQXNrIHRoZSB1c2VyIHdoYXQgdG8gZG8g d2hlbiBhbiBpbnRlcnJ1cHQgaXMgcmVjZWl2ZWQuICAqLworLXN0YXRpYyB2b2lkCistaW50ZXJy dXB0X3F1ZXJ5ICh2b2lkKQorLXsKKy0gIGlmIChxdWVyeSAoXygiSW50ZXJydXB0ZWQgd2hpbGUg d2FpdGluZyBmb3IgdGhlIHByb2dyYW0uXG5cCistR2l2ZSB1cCAoYW5kIHN0b3AgZGVidWdnaW5n IGl0KT8gIikpKQorLSAgICB7CistICAgICAgdGFyZ2V0X21vdXJuX2luZmVyaW9yIChpbmZlcmlv cl9wdGlkKTsKKy0gICAgICBxdWl0ICgpOworLSAgICB9CistfQorLQorLS8qIFRoZSB1c2VyIHR5 cGVkIF5DIHR3aWNlLiAgKi8KKy1zdGF0aWMgdm9pZAorLW50b19oYW5kbGVfc2lnaW50X3R3aWNl IChpbnQgc2lnbm8pCisteworLSAgc2lnbmFsIChzaWdubywgb2Z1bmMpOworLSAgaW50ZXJydXB0 X3F1ZXJ5ICgpOworLSAgc2lnbmFsIChzaWdubywgbnRvX2hhbmRsZV9zaWdpbnRfdHdpY2UpOwor LX0KKy0KKy1zdGF0aWMgdm9pZAorLW50b19oYW5kbGVfc2lnaW50IChpbnQgc2lnbm8pCistewor LSAgLyogSWYgdGhpcyBkb2Vzbid0IHdvcmssIHRyeSBtb3JlIHNldmVyZSBzdGVwcy4gICovCist ICBzaWduYWwgKHNpZ25vLCBudG9faGFuZGxlX3NpZ2ludF90d2ljZSk7CistCistICB0YXJnZXRf aW50ZXJydXB0ICgpOworLX0KKy0KKy1zcHRpZF90CistbnRvX3Byb2Nmc190YXJnZXQ6OndhaXQg KHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKm91cnN0YXR1cywKKy0JCQkg dGFyZ2V0X3dhaXRfZmxhZ3Mgb3B0aW9ucykKKy17CistICBzaWdzZXRfdCBzZXQ7CistICBzaWdp bmZvX3QgaW5mbzsKKy0gIHByb2Nmc19zdGF0dXMgc3RhdHVzOworLSAgc3RhdGljIGludCBleGl0 X3NpZ25vID0gMDsJLyogVG8gdHJhY2sgc2lnbmFscyB0aGF0IGNhdXNlIHRlcm1pbmF0aW9uLiAg Ki8KKy0KKy0gIG91cnN0YXR1cy0+c2V0X3NwdXJpb3VzICgpOworLQorLSAgaWYgKGluZmVyaW9y X3B0aWQgPT0gbnVsbF9wdGlkKQorLSAgICB7CistICAgICAgb3Vyc3RhdHVzLT5zZXRfc3RvcHBl ZCAoR0RCX1NJR05BTF8wKTsKKy0gICAgICBleGl0X3NpZ25vID0gMDsKKy0gICAgICByZXR1cm4g bnVsbF9wdGlkOworLSAgICB9CistCistICBzaWdlbXB0eXNldCAoJnNldCk7CistICBzaWdhZGRz ZXQgKCZzZXQsIFNJR1VTUjEpOworLQorLSAgZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19TVEFU VVMsICZzdGF0dXMsIHNpemVvZiAoc3RhdHVzKSwgMCk7CistICB3aGlsZSAoIShzdGF0dXMuZmxh Z3MgJiBfREVCVUdfRkxBR19JU1RPUCkpCistICAgIHsKKy0gICAgICBvZnVuYyA9IHNpZ25hbCAo U0lHSU5ULCBudG9faGFuZGxlX3NpZ2ludCk7CistICAgICAgc2lnd2FpdGluZm8gKCZzZXQsICZp bmZvKTsKKy0gICAgICBzaWduYWwgKFNJR0lOVCwgb2Z1bmMpOworLSAgICAgIGRldmN0bCAoY3Rs X2ZkLCBEQ01EX1BST0NfU1RBVFVTLCAmc3RhdHVzLCBzaXplb2YgKHN0YXR1cyksIDApOworLSAg ICB9CistCistICBudG9faW5mZXJpb3JfZGF0YSAoTlVMTCktPnN0b3BwZWRfZmxhZ3MgPSBzdGF0 dXMuZmxhZ3M7CistICBudG9faW5mZXJpb3JfZGF0YSAoTlVMTCktPnN0b3BwZWRfcGMgPSBzdGF0 dXMuaXA7CistCistICBpZiAoc3RhdHVzLmZsYWdzICYgX0RFQlVHX0ZMQUdfU1NURVApCistICAg IG91cnN0YXR1cy0+c2V0X3N0b3BwZWQgKEdEQl9TSUdOQUxfVFJBUCk7CistICAvKiBXYXMgaXQg YSBicmVha3BvaW50PyAgKi8KKy0gIGVsc2UgaWYgKHN0YXR1cy5mbGFncyAmIF9ERUJVR19GTEFH X1RSQUNFKQorLSAgICBvdXJzdGF0dXMtPnNldF9zdG9wcGVkIChHREJfU0lHTkFMX1RSQVApOwor LSAgZWxzZSBpZiAoc3RhdHVzLmZsYWdzICYgX0RFQlVHX0ZMQUdfSVNUT1ApCistICAgIHsKKy0g ICAgICBzd2l0Y2ggKHN0YXR1cy53aHkpCistCXsKKy0JY2FzZSBfREVCVUdfV0hZX1NJR05BTExF RDoKKy0JICBvdXJzdGF0dXMtPnNldF9zdG9wcGVkIChnZGJfc2lnbmFsX2Zyb21faG9zdCAoc3Rh dHVzLmluZm8uc2lfc2lnbm8pKTsKKy0JICBleGl0X3NpZ25vID0gMDsKKy0JICBicmVhazsKKy0J Y2FzZSBfREVCVUdfV0hZX0ZBVUxURUQ6CistCSAgaWYgKHN0YXR1cy5pbmZvLnNpX3NpZ25vID09 IFNJR1RSQVApCistCSAgICB7CistCSAgICAgIG91cnN0YXR1cy0+c2V0X3N0b3BwZWQgKDApOwor LQkgICAgICBleGl0X3NpZ25vID0gMDsKKy0JICAgIH0KKy0JICBlbHNlCistCSAgICB7CistCSAg ICAgIG91cnN0YXR1cy0+c2V0X3N0b3BwZWQKKy0JCShnZGJfc2lnbmFsX2Zyb21faG9zdCAoc3Rh dHVzLmluZm8uc2lfc2lnbm8pKTsKKy0JICAgICAgZXhpdF9zaWdubyA9IG91cnN0YXR1cy0+c2ln ICgpOworLQkgICAgfQorLQkgIGJyZWFrOworLQorLQljYXNlIF9ERUJVR19XSFlfVEVSTUlOQVRF RDoKKy0JICB7CistCSAgICBpbnQgd2FpdHZhbCA9IDA7CistCistCSAgICB3YWl0cGlkIChpbmZl cmlvcl9wdGlkLnBpZCAoKSwgJndhaXR2YWwsIFdOT0hBTkcpOworLQkgICAgaWYgKGV4aXRfc2ln bm8pCistCSAgICAgIHsKKy0JCS8qIEFibm9ybWFsIGRlYXRoLiAgKi8KKy0JCW91cnN0YXR1cy0+ c2V0X3NpZ25hbGxlZCAoZXhpdF9zaWdubyk7CistCSAgICAgIH0KKy0JICAgIGVsc2UKKy0JICAg ICAgeworLQkJLyogTm9ybWFsIGRlYXRoLiAgKi8KKy0JCW91cnN0YXR1cy0+c2V0X2V4aXRlZCAo V0VYSVRTVEFUVVMgKHdhaXR2YWwpKTsKKy0JICAgICAgfQorLQkgICAgZXhpdF9zaWdubyA9IDA7 CistCSAgICBicmVhazsKKy0JICB9CistCistCWNhc2UgX0RFQlVHX1dIWV9SRVFVRVNURUQ6Cist CSAgLyogV2UgYXJlIGFzc3VtaW5nIGEgcmVxdWVzdGVkIHN0b3AgaXMgZHVlIHRvIGEgU0lHSU5U LiAgKi8KKy0JICBvdXJzdGF0dXMtPnNldF9zdG9wcGVkIChHREJfU0lHTkFMX0lOVCk7CistCSAg ZXhpdF9zaWdubyA9IDA7CistCSAgYnJlYWs7CistCX0KKy0gICAgfQorLQorLSAgcmV0dXJuIHB0 aWRfdCAoc3RhdHVzLnBpZCwgMCwgc3RhdHVzLnRpZCk7CistfQorLQorLS8qIFJlYWQgdGhlIGN1 cnJlbnQgdmFsdWVzIG9mIHRoZSBpbmZlcmlvcidzIHJlZ2lzdGVycywgYm90aCB0aGUKKy0gICBn ZW5lcmFsIHJlZ2lzdGVyIHNldCBhbmQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIChpZiBzdXBw b3J0ZWQpCistICAgYW5kIHVwZGF0ZSBnZGIncyBpZGVhIG9mIHRoZWlyIGN1cnJlbnQgdmFsdWVz LiAgKi8KKy12b2lkCistbnRvX3Byb2Nmc190YXJnZXQ6OmZldGNoX3JlZ2lzdGVycyAoc3RydWN0 IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25vKQorLXsKKy0gIHVuaW9uCistICB7CistICAg IHByb2Nmc19ncmVnIGdyZWc7CistICAgIHByb2Nmc19mcHJlZyBmcHJlZzsKKy0gICAgcHJvY2Zz X2FsdHJlZyBhbHRyZWc7CistICB9CistICByZWc7CistICBpbnQgcmVnc2l6ZTsKKy0KKy0gIHBy b2Nmc19zZXRfdGhyZWFkIChyZWdjYWNoZS0+cHRpZCAoKSk7CistICBpZiAoZGV2Y3RsIChjdGxf ZmQsIERDTURfUFJPQ19HRVRHUkVHLCAmcmVnLCBzaXplb2YgKHJlZyksICZyZWdzaXplKSA9PSBF T0spCistICAgIG50b19zdXBwbHlfZ3JlZ3NldCAocmVnY2FjaGUsIChjaGFyICopICZyZWcuZ3Jl Zyk7CistICBpZiAoZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19HRVRGUFJFRywgJnJlZywgc2l6 ZW9mIChyZWcpLCAmcmVnc2l6ZSkKKy0gICAgICA9PSBFT0spCistICAgIG50b19zdXBwbHlfZnBy ZWdzZXQgKHJlZ2NhY2hlLCAoY2hhciAqKSAmcmVnLmZwcmVnKTsKKy0gIGlmIChkZXZjdGwgKGN0 bF9mZCwgRENNRF9QUk9DX0dFVEFMVFJFRywgJnJlZywgc2l6ZW9mIChyZWcpLCAmcmVnc2l6ZSkK Ky0gICAgICA9PSBFT0spCistICAgIG50b19zdXBwbHlfYWx0cmVnc2V0IChyZWdjYWNoZSwgKGNo YXIgKikgJnJlZy5hbHRyZWcpOworLX0KKy0KKy0vKiBIZWxwZXIgZm9yIHByb2Nmc194ZmVyX3Bh cnRpYWwgdGhhdCBoYW5kbGVzIG1lbW9yeSB0cmFuc2ZlcnMuCistICAgQXJndW1lbnRzIGFyZSBs aWtlIHRhcmdldF94ZmVyX3BhcnRpYWwuICAqLworLQorLXN0YXRpYyBlbnVtIHRhcmdldF94ZmVy X3N0YXR1cworLXByb2Nmc194ZmVyX21lbW9yeSAoZ2RiX2J5dGUgKnJlYWRidWYsIGNvbnN0IGdk Yl9ieXRlICp3cml0ZWJ1ZiwKKy0JCSAgICBVTE9OR0VTVCBtZW1hZGRyLCBVTE9OR0VTVCBsZW4s IFVMT05HRVNUICp4ZmVyZWRfbGVuKQorLXsKKy0gIGludCBuYnl0ZXM7CistCistICBpZiAobHNl ZWsgKGN0bF9mZCwgKG9mZl90KSBtZW1hZGRyLCBTRUVLX1NFVCkgIT0gKG9mZl90KSBtZW1hZGRy KQorLSAgICByZXR1cm4gVEFSR0VUX1hGRVJfRV9JTzsKKy0KKy0gIGlmICh3cml0ZWJ1ZiAhPSBO VUxMKQorLSAgICBuYnl0ZXMgPSB3cml0ZSAoY3RsX2ZkLCB3cml0ZWJ1ZiwgbGVuKTsKKy0gIGVs c2UKKy0gICAgbmJ5dGVzID0gcmVhZCAoY3RsX2ZkLCByZWFkYnVmLCBsZW4pOworLSAgaWYgKG5i eXRlcyA8PSAwKQorLSAgICByZXR1cm4gVEFSR0VUX1hGRVJfRV9JTzsKKy0gICp4ZmVyZWRfbGVu ID0gbmJ5dGVzOworLSAgcmV0dXJuIFRBUkdFVF9YRkVSX09LOworLX0KKy0KKy0vKiBUYXJnZXQg dG9feGZlcl9wYXJ0aWFsIGltcGxlbWVudGF0aW9uLiAgKi8KKy0KKy1lbnVtIHRhcmdldF94ZmVy X3N0YXR1cworLW50b19wcm9jZnNfdGFyZ2V0Ojp4ZmVyX3BhcnRpYWwgKGVudW0gdGFyZ2V0X29i amVjdCBvYmplY3QsCistCQkJCSBjb25zdCBjaGFyICphbm5leCwgZ2RiX2J5dGUgKnJlYWRidWYs CistCQkJCSBjb25zdCBnZGJfYnl0ZSAqd3JpdGVidWYsIFVMT05HRVNUIG9mZnNldCwKKy0JCQkJ IFVMT05HRVNUIGxlbiwgVUxPTkdFU1QgKnhmZXJlZF9sZW4pCisteworLSAgc3dpdGNoIChvYmpl Y3QpCistICAgIHsKKy0gICAgY2FzZSBUQVJHRVRfT0JKRUNUX01FTU9SWToKKy0gICAgICByZXR1 cm4gcHJvY2ZzX3hmZXJfbWVtb3J5IChyZWFkYnVmLCB3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4sIHhm ZXJlZF9sZW4pOworLSAgICBjYXNlIFRBUkdFVF9PQkpFQ1RfQVVYVjoKKy0gICAgICBpZiAocmVh ZGJ1ZiAhPSBOVUxMKQorLQl7CistCSAgaW50IGVycjsKKy0JICBDT1JFX0FERFIgaW5pdGlhbF9z dGFjazsKKy0JICBkZWJ1Z19wcm9jZXNzX3QgcHJvY2luZm87CistCSAgLyogRm9yIDMyLWJpdCBh cmNoaXRlY3R1cmUsIHNpemUgb2YgYXV4dl90IGlzIDggYnl0ZXMuICAqLworLQkgIGNvbnN0IHVu c2lnbmVkIGludCBzaXplb2ZfYXV4dl90ID0gc2l6ZW9mIChhdXh2X3QpOworLQkgIGNvbnN0IHVu c2lnbmVkIGludCBzaXplb2ZfdGVtcGJ1ZiA9IDIwICogc2l6ZW9mX2F1eHZfdDsKKy0JICBpbnQg dGVtcHJlYWQ7CistCSAgZ2RiX2J5dGUgKmNvbnN0IHRlbXBidWYgPSBhbGxvY2EgKHNpemVvZl90 ZW1wYnVmKTsKKy0KKy0JICBpZiAodGVtcGJ1ZiA9PSBOVUxMKQorLQkgICAgcmV0dXJuIFRBUkdF VF9YRkVSX0VfSU87CistCistCSAgZXJyID0gZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19JTkZP LCAmcHJvY2luZm8sCistCQkJc2l6ZW9mIHByb2NpbmZvLCAwKTsKKy0JICBpZiAoZXJyICE9IEVP SykKKy0JICAgIHJldHVybiBUQVJHRVRfWEZFUl9FX0lPOworLQorLQkgIGluaXRpYWxfc3RhY2sg PSBwcm9jaW5mby5pbml0aWFsX3N0YWNrOworLQorLQkgIC8qIHByb2NmcyBpcyBhbHdheXMgJ3Nl bGYtaG9zdGVkJywgbm8gYnl0ZS1vcmRlciBtYW5pcHVsYXRpb24uICAqLworLQkgIHRlbXByZWFk ID0gbnRvX3JlYWRfYXV4dl9mcm9tX2luaXRpYWxfc3RhY2sgKGluaXRpYWxfc3RhY2ssIHRlbXBi dWYsCistCQkJCQkJICAgICAgIHNpemVvZl90ZW1wYnVmLAorLQkJCQkJCSAgICAgICBzaXplb2Yg KGF1eHZfdCkpOworLQkgIHRlbXByZWFkID0gc3RkOjptaW4gKHRlbXByZWFkLCBsZW4pIC0gb2Zm c2V0OworLQkgIG1lbWNweSAocmVhZGJ1ZiwgdGVtcGJ1ZiArIG9mZnNldCwgdGVtcHJlYWQpOwor LQkgICp4ZmVyZWRfbGVuID0gdGVtcHJlYWQ7CistCSAgcmV0dXJuIHRlbXByZWFkID8gVEFSR0VU X1hGRVJfT0sgOiBUQVJHRVRfWEZFUl9FT0Y7CistCX0KKy0JLyogRmFsbHRocnUgKi8KKy0gICAg ZGVmYXVsdDoKKy0gICAgICByZXR1cm4gdGhpcy0+YmVuZWF0aCAoKS0+eGZlcl9wYXJ0aWFsIChv YmplY3QsIGFubmV4LAorLQkJCQkJICAgICByZWFkYnVmLCB3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4s CistCQkJCQkgICAgIHhmZXJlZF9sZW4pOworLSAgICB9CistfQorLQorLS8qIFRha2UgYSBwcm9n cmFtIHByZXZpb3VzbHkgYXR0YWNoZWQgdG8gYW5kIGRldGFjaGVzIGl0LgorLSAgIFRoZSBwcm9n cmFtIHJlc3VtZXMgZXhlY3V0aW9uIGFuZCB3aWxsIG5vIGxvbmdlciBzdG9wCistICAgb24gc2ln bmFscywgZXRjLiAgV2UnZCBiZXR0ZXIgbm90IGhhdmUgbGVmdCBhbnkgYnJlYWtwb2ludHMKKy0g ICBpbiB0aGUgcHJvZ3JhbSBvciBpdCdsbCBkaWUgd2hlbiBpdCBoaXRzIG9uZS4gICovCistdm9p ZAorLW50b19wcm9jZnNfdGFyZ2V0OjpkZXRhY2ggKGluZmVyaW9yICppbmYsIGludCBmcm9tX3R0 eSkKKy17CistICB0YXJnZXRfYW5ub3VuY2VfZGV0YWNoICgpOworLQorLSAgaWYgKHNpZ2duYWwp CistICAgIFNpZ25hbEtpbGwgKG50b19ub2RlICgpLCBpbmYtPnBpZCwgMCwgMCwgMCwgMCk7Cist CistICBjbG9zZSAoY3RsX2ZkKTsKKy0gIGN0bF9mZCA9IC0xOworLQorLSAgc3dpdGNoX3RvX25v X3RocmVhZCAoKTsKKy0gIGRldGFjaF9pbmZlcmlvciAoaW5mLT5waWQpOworLSAgaW5pdF90aHJl YWRfbGlzdCAoKTsKKy0gIGluZl9jaGlsZF9tYXliZV91bnB1c2hfdGFyZ2V0IChvcHMpOworLX0K Ky0KKy1zdGF0aWMgaW50CistcHJvY2ZzX2JyZWFrcG9pbnQgKENPUkVfQUREUiBhZGRyLCBpbnQg dHlwZSwgaW50IHNpemUpCisteworLSAgcHJvY2ZzX2JyZWFrIGJyazsKKy0KKy0gIGJyay50eXBl ID0gdHlwZTsKKy0gIGJyay5hZGRyID0gYWRkcjsKKy0gIGJyay5zaXplID0gc2l6ZTsKKy0gIGVy cm5vID0gZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19CUkVBSywgJmJyaywgc2l6ZW9mIChicmsp LCAwKTsKKy0gIGlmIChlcnJubyAhPSBFT0spCistICAgIHJldHVybiAxOworLSAgcmV0dXJuIDA7 CistfQorLQorLWludAorLW50b19wcm9jZnNfdGFyZ2V0OjppbnNlcnRfYnJlYWtwb2ludCAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gsCistCQkJCSAgICAgIHN0cnVjdCBicF90YXJnZXRfaW5mbyAq YnBfdGd0KQorLXsKKy0gIGJwX3RndC0+cGxhY2VkX2FkZHJlc3MgPSBicF90Z3QtPnJlcXN0ZF9h ZGRyZXNzOworLSAgcmV0dXJuIHByb2Nmc19icmVha3BvaW50IChicF90Z3QtPnBsYWNlZF9hZGRy ZXNzLCBfREVCVUdfQlJFQUtfRVhFQywgMCk7CistfQorLQorLWludAorLW50b19wcm9jZnNfdGFy Z2V0OjpyZW1vdmVfYnJlYWtwb2ludCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCistCQkJCSAg ICAgIHN0cnVjdCBicF90YXJnZXRfaW5mbyAqYnBfdGd0LAorLQkJCQkgICAgICBlbnVtIHJlbW92 ZV9icF9yZWFzb24gcmVhc29uKQorLXsKKy0gIHJldHVybiBwcm9jZnNfYnJlYWtwb2ludCAoYnBf dGd0LT5wbGFjZWRfYWRkcmVzcywgX0RFQlVHX0JSRUFLX0VYRUMsIC0xKTsKKy19CistCistaW50 CistbnRvX3Byb2Nmc190YXJnZXQ6Omluc2VydF9od19icmVha3BvaW50IChzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCwKKy0JCQkJCSBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKmJwX3RndCkKKy17Cist ICBicF90Z3QtPnBsYWNlZF9hZGRyZXNzID0gYnBfdGd0LT5yZXFzdGRfYWRkcmVzczsKKy0gIHJl dHVybiBwcm9jZnNfYnJlYWtwb2ludCAoYnBfdGd0LT5wbGFjZWRfYWRkcmVzcywKKy0JCQkgICAg X0RFQlVHX0JSRUFLX0VYRUMgfCBfREVCVUdfQlJFQUtfSFcsIDApOworLX0KKy0KKy1pbnQKKy1u dG9fcHJvY2ZzX3RhcmdldDo6cmVtb3ZlX2h3X2JyZWFrcG9pbnQgKHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoLAorLQkJCQkJIHN0cnVjdCBicF90YXJnZXRfaW5mbyAqYnBfdGd0KQorLXsKKy0gIHJl dHVybiBwcm9jZnNfYnJlYWtwb2ludCAoYnBfdGd0LT5wbGFjZWRfYWRkcmVzcywKKy0JCQkgICAg X0RFQlVHX0JSRUFLX0VYRUMgfCBfREVCVUdfQlJFQUtfSFcsIC0xKTsKKy19CistCistdm9pZAor LW50b19wcm9jZnNfdGFyZ2V0OjpyZXN1bWUgKHB0aWRfdCBwdGlkLCBpbnQgc3RlcCwgZW51bSBn ZGJfc2lnbmFsIHNpZ25vKQorLXsKKy0gIGludCBzaWduYWxfdG9fcGFzczsKKy0gIHByb2Nmc19z dGF0dXMgc3RhdHVzOworLSAgc2lnc2V0X3QgKnJ1bl9mYXVsdCA9IChzaWdzZXRfdCAqKSAodm9p ZCAqKSAmcnVuLmZhdWx0OworLQorLSAgaWYgKGluZmVyaW9yX3B0aWQgPT0gbnVsbF9wdGlkKQor LSAgICByZXR1cm47CistCistICBwcm9jZnNfc2V0X3RocmVhZCAocHRpZCA9PSBtaW51c19vbmVf cHRpZCA/IGluZmVyaW9yX3B0aWQgOgorLQkJICAgICBwdGlkKTsKKy0KKy0gIHJ1bi5mbGFncyA9 IF9ERUJVR19SVU5fRkFVTFQgfCBfREVCVUdfUlVOX1RSQUNFOworLSAgaWYgKHN0ZXApCistICAg IHJ1bi5mbGFncyB8PSBfREVCVUdfUlVOX1NURVA7CistCistICBzaWdlbXB0eXNldCAocnVuX2Zh dWx0KTsKKy0gIHNpZ2FkZHNldCAocnVuX2ZhdWx0LCBGTFRCUFQpOworLSAgc2lnYWRkc2V0IChy dW5fZmF1bHQsIEZMVFRSQUNFKTsKKy0gIHNpZ2FkZHNldCAocnVuX2ZhdWx0LCBGTFRJTEwpOwor LSAgc2lnYWRkc2V0IChydW5fZmF1bHQsIEZMVFBSSVYpOworLSAgc2lnYWRkc2V0IChydW5fZmF1 bHQsIEZMVEJPVU5EUyk7CistICBzaWdhZGRzZXQgKHJ1bl9mYXVsdCwgRkxUSU9WRik7CistICBz aWdhZGRzZXQgKHJ1bl9mYXVsdCwgRkxUSVpESVYpOworLSAgc2lnYWRkc2V0IChydW5fZmF1bHQs IEZMVEZQRSk7CistICAvKiBQZXRlciBWIHdpbGwgYmUgY2hhbmdpbmcgdGhpcyBhdCBzb21lIHBv aW50LiAgKi8KKy0gIHNpZ2FkZHNldCAocnVuX2ZhdWx0LCBGTFRQQUdFKTsKKy0KKy0gIHJ1bi5m bGFncyB8PSBfREVCVUdfUlVOX0FSTTsKKy0KKy0gIHNpZ25hbF90b19wYXNzID0gZ2RiX3NpZ25h bF90b19ob3N0IChzaWdubyk7CistCistICBpZiAoc2lnbmFsX3RvX3Bhc3MpCistICAgIHsKKy0g ICAgICBkZXZjdGwgKGN0bF9mZCwgRENNRF9QUk9DX1NUQVRVUywgJnN0YXR1cywgc2l6ZW9mIChz dGF0dXMpLCAwKTsKKy0gICAgICBzaWduYWxfdG9fcGFzcyA9IGdkYl9zaWduYWxfdG9faG9zdCAo c2lnbm8pOworLSAgICAgIGlmIChzdGF0dXMud2h5ICYgKF9ERUJVR19XSFlfU0lHTkFMTEVEIHwg X0RFQlVHX1dIWV9GQVVMVEVEKSkKKy0JeworLQkgIGlmIChzaWduYWxfdG9fcGFzcyAhPSBzdGF0 dXMuaW5mby5zaV9zaWdubykKKy0JICAgIHsKKy0JICAgICAgU2lnbmFsS2lsbCAobnRvX25vZGUg KCksIGluZmVyaW9yX3B0aWQucGlkICgpLCAwLAorLQkJCSAgc2lnbmFsX3RvX3Bhc3MsIDAsIDAp OworLQkgICAgICBydW4uZmxhZ3MgfD0gX0RFQlVHX1JVTl9DTFJGTFQgfCBfREVCVUdfUlVOX0NM UlNJRzsKKy0JICAgIH0KKy0JICBlbHNlCQkvKiBMZXQgaXQga2lsbCB0aGUgcHJvZ3JhbSB3aXRo b3V0IHRlbGxpbmcgdXMuICAqLworLQkgICAgc2lnZGVsc2V0ICgmcnVuLnRyYWNlLCBzaWduYWxf dG9fcGFzcyk7CistCX0KKy0gICAgfQorLSAgZWxzZQorLSAgICBydW4uZmxhZ3MgfD0gX0RFQlVH X1JVTl9DTFJTSUcgfCBfREVCVUdfUlVOX0NMUkZMVDsKKy0KKy0gIGVycm5vID0gZGV2Y3RsIChj dGxfZmQsIERDTURfUFJPQ19SVU4sICZydW4sIHNpemVvZiAocnVuKSwgMCk7CistICBpZiAoZXJy bm8gIT0gRU9LKQorLSAgICB7CistICAgICAgcGVycm9yIChfKCJydW4gZXJyb3IhXG4iKSk7Cist ICAgICAgcmV0dXJuOworLSAgICB9CistfQorLQorLXZvaWQKKy1udG9fcHJvY2ZzX3RhcmdldDo6 bW91cm5faW5mZXJpb3IgKCkKKy17CistICBpZiAoaW5mZXJpb3JfcHRpZCAhPSBudWxsX3B0aWQp CistICAgIHsKKy0gICAgICBTaWduYWxLaWxsIChudG9fbm9kZSAoKSwgaW5mZXJpb3JfcHRpZC5w aWQgKCksIDAsIFNJR0tJTEwsIDAsIDApOworLSAgICAgIGNsb3NlIChjdGxfZmQpOworLSAgICB9 CistICBzd2l0Y2hfdG9fbm9fdGhyZWFkICgpOworLSAgaW5pdF90aHJlYWRfbGlzdCAoKTsKKy0g IGluZl9jaGlsZF9tb3Vybl9pbmZlcmlvciAob3BzKTsKKy19CistCistLyogVGhpcyBmdW5jdGlv biBicmVha3MgdXAgYW4gYXJndW1lbnQgc3RyaW5nIGludG8gYW4gYXJndW1lbnQKKy0gICB2ZWN0 b3Igc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gZXhlY3ZwKCkuCistICAgRS5nLiwgb24gInJ1biBh IGIgYyBkIiB0aGlzIHJvdXRpbmUgd291bGQgZ2V0IGFzIGlucHV0CistICAgdGhlIHN0cmluZyAi YSBiIGMgZCIsIGFuZCBhcyBvdXRwdXQgaXQgd291bGQgZmlsbCBpbiBhcmd2IHdpdGgKKy0gICB0 aGUgZm91ciBhcmd1bWVudHMgImEiLCAiYiIsICJjIiwgImQiLiAgVGhlIG9ubHkgYWRkaXRpb25h bAorLSAgIGZ1bmN0aW9uYWxpdHkgaXMgc2ltcGxlIHF1b3RpbmcuICBUaGUgZ2RiIGNvbW1hbmQ6 CistCXJ1biBhICJiIGMgZCIgZgorLSAgIHdpbGwgZmlsbCBpbiBhcmd2IHdpdGggdGhlIHRocmVl IGFyZ3MgImEiLCAiYiBjIGQiLCAiZSIuICAqLworLXN0YXRpYyB2b2lkCistYnJlYWt1cF9hcmdz IChjaGFyICpzY3JhdGNoLCBjaGFyICoqYXJndikKKy17CistICBjaGFyICpwcCwgKmNwID0gc2Ny YXRjaDsKKy0gIGNoYXIgcXVvdGluZyA9IDA7CistCistICBmb3IgKDs7KQorLSAgICB7CistICAg ICAgLyogU2NhbiBwYXN0IGxlYWRpbmcgc2VwYXJhdG9ycy4gICovCistICAgICAgcXVvdGluZyA9 IDA7CistICAgICAgd2hpbGUgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcgfHwgKmNwID09ICdc bicpCistCWNwKys7CistCistICAgICAgLyogQnJlYWsgaWYgYXQgZW5kIG9mIHN0cmluZy4gICov CistICAgICAgaWYgKCpjcCA9PSAnXDAnKQorLQlicmVhazsKKy0KKy0gICAgICAvKiBUYWtlIGFu IGFyZy4gICovCistICAgICAgaWYgKCpjcCA9PSAnIicpCistCXsKKy0JICBjcCsrOworLQkgIHF1 b3RpbmcgPSBzdHJjaHIgKGNwLCAnIicpID8gMSA6IDA7CistCX0KKy0KKy0gICAgICAqYXJndisr ID0gY3A7CistCistICAgICAgLyogU2NhbiBmb3IgbmV4dCBhcmcgc2VwYXJhdG9yLiAgKi8KKy0g ICAgICBwcCA9IGNwOworLSAgICAgIGlmIChxdW90aW5nKQorLQljcCA9IHN0cmNociAocHAsICci Jyk7CistICAgICAgaWYgKChjcCA9PSBOVUxMKSB8fCAoIXF1b3RpbmcpKQorLQljcCA9IHN0cmNo ciAocHAsICcgJyk7CistICAgICAgaWYgKGNwID09IE5VTEwpCistCWNwID0gc3RyY2hyIChwcCwg J1x0Jyk7CistICAgICAgaWYgKGNwID09IE5VTEwpCistCWNwID0gc3RyY2hyIChwcCwgJ1xuJyk7 CistCistICAgICAgLyogTm8gc2VwYXJhdG9ycyA9PiBlbmQgb2Ygc3RyaW5nID0+IGJyZWFrLiAg Ki8KKy0gICAgICBpZiAoY3AgPT0gTlVMTCkKKy0JeworLQkgIHBwID0gY3A7CistCSAgYnJlYWs7 CistCX0KKy0KKy0gICAgICAvKiBSZXBsYWNlIHRoZSBzZXBhcmF0b3Igd2l0aCBhIHRlcm1pbmF0 b3IuICAqLworLSAgICAgICpjcCsrID0gJ1wwJzsKKy0gICAgfQorLQorLSAgLyogRXhlY3YgcmVx dWlyZXMgYSBudWxsLXRlcm1pbmF0ZWQgYXJnIHZlY3Rvci4gICovCistICAqYXJndiA9IE5VTEw7 CistfQorLQorLXZvaWQKKy1udG9fcHJvY2ZzX3RhcmdldDo6Y3JlYXRlX2luZmVyaW9yIChjb25z dCBjaGFyICpleGVjX2ZpbGUsCistCQkJCSAgICBjb25zdCBzdGQ6OnN0cmluZyAmYWxsYXJncywK Ky0JCQkJICAgIGNoYXIgKiplbnYsIGludCBmcm9tX3R0eSkKKy17CistICBzdHJ1Y3QgaW5oZXJp dGFuY2UgaW5oZXJpdDsKKy0gIHBpZF90IHBpZDsKKy0gIGludCBmbGFncywgZXJybjsKKy0gIGNo YXIgKiphcmd2LCAqYXJnczsKKy0gIGNvbnN0IGNoYXIgKmluID0gIiIsICpvdXQgPSAiIiwgKmVy ciA9ICIiOworLSAgaW50IGZkLCBmZHNbM107CistICBzaWdzZXRfdCBzZXQ7CistICBzdHJ1Y3Qg aW5mZXJpb3IgKmluZjsKKy0KKy0gIGFyZ3YgPSB4bWFsbG9jICgoYWxsYXJncy5zaXplICgpIC8g KHVuc2lnbmVkKSAyICsgMikgKgorLQkJICBzaXplb2YgKCphcmd2KSk7CistICBhcmd2WzBdID0g Y29uc3RfY2FzdDxjaGFyICo+IChnZXRfZXhlY19maWxlICgxKSk7CistICBpZiAoIWFyZ3ZbMF0p CistICAgIHsKKy0gICAgICBpZiAoZXhlY19maWxlKQorLQlhcmd2WzBdID0gZXhlY19maWxlOwor LSAgICAgIGVsc2UKKy0JcmV0dXJuOworLSAgICB9CistCistICBhcmdzID0geHN0cmR1cCAoYWxs YXJncy5jX3N0ciAoKSk7CistICBicmVha3VwX2FyZ3MgKGFyZ3MsIChleGVjX2ZpbGUgIT0gTlVM TCkgPyAmYXJndlsxXSA6ICZhcmd2WzBdKTsKKy0KKy0gIGFyZ3YgPSBudG9fcGFyc2VfcmVkaXJl Y3Rpb24gKGFyZ3YsICZpbiwgJm91dCwgJmVycik7CistCistICBmZHNbMF0gPSBTVERJTl9GSUxF Tk87CistICBmZHNbMV0gPSBTVERPVVRfRklMRU5POworLSAgZmRzWzJdID0gU1RERVJSX0ZJTEVO TzsKKy0KKy0gIC8qIElmIHRoZSB1c2VyIHNwZWNpZmllZCBJL08gdmlhIGdkYidzIC0tdHR5PSBh cmcsIHVzZSBpdCwgYnV0IG9ubHkKKy0gICAgIGlmIHRoZSBpL28gaXMgbm90IGFsc28gYmVpbmcg c3BlY2lmaWVkIHZpYSByZWRpcmVjdGlvbi4gICovCistICBjb25zdCBjaGFyICppbmZlcmlvcl90 dHkgPSBjdXJyZW50X2luZmVyaW9yICgpLT50dHkgKCk7CistICBpZiAoaW5mZXJpb3JfdHR5ICE9 IG51bGxwdHIpCistICAgIHsKKy0gICAgICBpZiAoIWluWzBdKQorLQlpbiA9IGluZmVyaW9yX3R0 eTsKKy0gICAgICBpZiAoIW91dFswXSkKKy0Jb3V0ID0gaW5mZXJpb3JfdHR5OworLSAgICAgIGlm ICghZXJyWzBdKQorLQllcnIgPSBpbmZlcmlvcl90dHk7CistICAgIH0KKy0KKy0gIGlmIChpblsw XSkKKy0gICAgeworLSAgICAgIGZkID0gb3BlbiAoaW4sIE9fUkRPTkxZKTsKKy0gICAgICBpZiAo ZmQgPT0gLTEpCistCXBlcnJvciAoaW4pOworLSAgICAgIGVsc2UKKy0JZmRzWzBdID0gZmQ7Cist ICAgIH0KKy0gIGlmIChvdXRbMF0pCistICAgIHsKKy0gICAgICBmZCA9IG9wZW4gKG91dCwgT19X Uk9OTFkpOworLSAgICAgIGlmIChmZCA9PSAtMSkKKy0JcGVycm9yIChvdXQpOworLSAgICAgIGVs c2UKKy0JZmRzWzFdID0gZmQ7CistICAgIH0KKy0gIGlmIChlcnJbMF0pCistICAgIHsKKy0gICAg ICBmZCA9IG9wZW4gKGVyciwgT19XUk9OTFkpOworLSAgICAgIGlmIChmZCA9PSAtMSkKKy0JcGVy cm9yIChlcnIpOworLSAgICAgIGVsc2UKKy0JZmRzWzJdID0gZmQ7CistICAgIH0KKy0KKy0gIC8q IENsZWFyIGFueSBwZW5kaW5nIFNJR1VTUjEncyBidXQga2VlcCB0aGUgYmVoYXZpb3IgdGhlIHNh bWUuICAqLworLSAgc2lnbmFsIChTSUdVU1IxLCBzaWduYWwgKFNJR1VTUjEsIFNJR19JR04pKTsK Ky0KKy0gIHNpZ2VtcHR5c2V0ICgmc2V0KTsKKy0gIHNpZ2FkZHNldCAoJnNldCwgU0lHVVNSMSk7 CistICBzaWdwcm9jbWFzayAoU0lHX1VOQkxPQ0ssICZzZXQsIE5VTEwpOworLQorLSAgbWVtc2V0 ICgmaW5oZXJpdCwgMCwgc2l6ZW9mIChpbmhlcml0KSk7CistCistICBpZiAoTkRfTk9ERV9DTVAg KG50b19wcm9jZnNfbm9kZSwgTkRfTE9DQUxfTk9ERSkgIT0gMCkKKy0gICAgeworLSAgICAgIGlu aGVyaXQubmQgPSBudG9fbm9kZSAoKTsKKy0gICAgICBpbmhlcml0LmZsYWdzIHw9IFNQQVdOX1NF VE5EOworLSAgICAgIGluaGVyaXQuZmxhZ3MgJj0gflNQQVdOX0VYRUM7CistICAgIH0KKy0gIGlu aGVyaXQuZmxhZ3MgfD0gU1BBV05fU0VUR1JPVVAgfCBTUEFXTl9IT0xEOworLSAgaW5oZXJpdC5w Z3JvdXAgPSBTUEFXTl9ORVdQR1JPVVA7CistICBwaWQgPSBzcGF3bnAgKGFyZ3ZbMF0sIDMsIGZk cywgJmluaGVyaXQsIGFyZ3YsCistCQlORF9OT0RFX0NNUCAobnRvX3Byb2Nmc19ub2RlLCBORF9M T0NBTF9OT0RFKSA9PSAwID8gZW52IDogMCk7CistICB4ZnJlZSAoYXJncyk7CistCistICBzaWdw cm9jbWFzayAoU0lHX0JMT0NLLCAmc2V0LCBOVUxMKTsKKy0KKy0gIGlmIChwaWQgPT0gLTEpCist ICAgIGVycm9yIChfKCJFcnJvciBzcGF3bmluZyAlczogJWQgKCVzKSIpLCBhcmd2WzBdLCBlcnJu bywKKy0JICAgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsKKy0KKy0gIGlmIChmZHNbMF0gIT0gU1RE SU5fRklMRU5PKQorLSAgICBjbG9zZSAoZmRzWzBdKTsKKy0gIGlmIChmZHNbMV0gIT0gU1RET1VU X0ZJTEVOTykKKy0gICAgY2xvc2UgKGZkc1sxXSk7CistICBpZiAoZmRzWzJdICE9IFNUREVSUl9G SUxFTk8pCistICAgIGNsb3NlIChmZHNbMl0pOworLQorLSAgcHRpZF90IHB0aWQgPSBkb19hdHRh Y2ggKHB0aWRfdCAocGlkKSk7CistICB1cGRhdGVfdGhyZWFkX2xpc3QgKCk7CistICBzd2l0Y2hf dG9fdGhyZWFkICh0aGlzLT5maW5kX3RocmVhZCAocHRpZCkpOworLQorLSAgaW5mID0gY3VycmVu dF9pbmZlcmlvciAoKTsKKy0gIGluZmVyaW9yX2FwcGVhcmVkIChpbmYsIHBpZCk7CistICBpbmYt PmF0dGFjaF9mbGFnID0gZmFsc2U7CistCistICBmbGFncyA9IF9ERUJVR19GTEFHX0tMQzsJLyog S2lsbC1vbi1MYXN0LUNsb3NlIGZsYWcuICAqLworLSAgZXJybiA9IGRldmN0bCAoY3RsX2ZkLCBE Q01EX1BST0NfU0VUX0ZMQUcsICZmbGFncywgc2l6ZW9mIChmbGFncyksIDApOworLSAgaWYgKGVy cm4gIT0gRU9LKQorLSAgICB7CistICAgICAgLyogRklYTUU6IGV4cGVjdGVkIHdhcm5pbmc/ICAq LworLSAgICAgIC8qIHdhcm5pbmcoICJGYWlsZWQgdG8gc2V0IEtpbGwtb24tTGFzdC1DbG9zZSBm bGFnOiBlcnJubyA9ICVkKCVzKVxuIiwKKy0JIGVycm4sIHNhZmVfc3RyZXJyb3IoZXJybikgKTsg Ki8KKy0gICAgfQorLSAgaWYgKCFpbmYtPnRhcmdldF9pc19wdXNoZWQgKG9wcykpCistICAgIGlu Zi0+cHVzaF90YXJnZXQgKG9wcyk7CistICB0YXJnZXRfdGVybWluYWw6OmluaXQgKCk7CistCist ICBpZiAoY3VycmVudF9wcm9ncmFtX3NwYWNlLT5leGVjX2JmZCAoKSAhPSBOVUxMCistICAgICAg fHwgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+c3ltZmlsZV9vYmplY3RfZmlsZSAhPSBOVUxMCist CSAgJiYgY3VycmVudF9wcm9ncmFtX3NwYWNlLT5zeW1maWxlX29iamVjdF9maWxlLT5vYmZkICE9 IE5VTEwpKQorLSAgICBzb2xpYl9jcmVhdGVfaW5mZXJpb3JfaG9vayAoMCk7CistfQorLQorLXZv aWQKKy1udG9fcHJvY2ZzX3RhcmdldDo6aW50ZXJydXB0ICgpCisteworLSAgZGV2Y3RsIChjdGxf ZmQsIERDTURfUFJPQ19TVE9QLCBOVUxMLCAwLCAwKTsKKy19CistCistdm9pZAorLW50b19wcm9j ZnNfdGFyZ2V0OjpraWxsICgpCisteworLSAgdGFyZ2V0X21vdXJuX2luZmVyaW9yIChpbmZlcmlv cl9wdGlkKTsKKy19CistCistLyogRmlsbCBidWYgd2l0aCByZWdzZXQgYW5kIHJldHVybiBkZXZj dGwgY21kIHRvIGRvIHRoZSBzZXR0aW5nLiAgUmV0dXJuCistICAgLTEgaWYgd2UgZmFpbCB0byBn ZXQgdGhlIHJlZ3NldC4gIFN0b3JlIHNpemUgb2YgcmVnc2V0IGluIHJlZ3NpemUuICAqLworLXN0 YXRpYyBpbnQKKy1nZXRfcmVnc2V0IChpbnQgcmVnc2V0LCBjaGFyICpidWYsIGludCBidWZzaXpl LCBpbnQgKnJlZ3NpemUpCisteworLSAgaW50IGRldl9nZXQsIGRldl9zZXQ7CistICBzd2l0Y2gg KHJlZ3NldCkKKy0gICAgeworLSAgICBjYXNlIE5UT19SRUdfR0VORVJBTDoKKy0gICAgICBkZXZf Z2V0ID0gRENNRF9QUk9DX0dFVEdSRUc7CistICAgICAgZGV2X3NldCA9IERDTURfUFJPQ19TRVRH UkVHOworLSAgICAgIGJyZWFrOworLQorLSAgICBjYXNlIE5UT19SRUdfRkxPQVQ6CistICAgICAg ZGV2X2dldCA9IERDTURfUFJPQ19HRVRGUFJFRzsKKy0gICAgICBkZXZfc2V0ID0gRENNRF9QUk9D X1NFVEZQUkVHOworLSAgICAgIGJyZWFrOworLQorLSAgICBjYXNlIE5UT19SRUdfQUxUOgorLSAg ICAgIGRldl9nZXQgPSBEQ01EX1BST0NfR0VUQUxUUkVHOworLSAgICAgIGRldl9zZXQgPSBEQ01E X1BST0NfU0VUQUxUUkVHOworLSAgICAgIGJyZWFrOworLQorLSAgICBjYXNlIE5UT19SRUdfU1lT VEVNOgorLSAgICBkZWZhdWx0OgorLSAgICAgIHJldHVybiAtMTsKKy0gICAgfQorLSAgaWYgKGRl dmN0bCAoY3RsX2ZkLCBkZXZfZ2V0LCBidWYsIGJ1ZnNpemUsIHJlZ3NpemUpICE9IEVPSykKKy0g ICAgcmV0dXJuIC0xOworLQorLSAgcmV0dXJuIGRldl9zZXQ7CistfQorLQorLXZvaWQKKy1udG9f cHJvY2ZzX3RhcmdldDo6c3RvcmVfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hl LCBpbnQgcmVnbm8pCisteworLSAgdW5pb24KKy0gIHsKKy0gICAgcHJvY2ZzX2dyZWcgZ3JlZzsK Ky0gICAgcHJvY2ZzX2ZwcmVnIGZwcmVnOworLSAgICBwcm9jZnNfYWx0cmVnIGFsdHJlZzsKKy0g IH0KKy0gIHJlZzsKKy0gIHVuc2lnbmVkIG9mZjsKKy0gIGludCBsZW4sIHJlZ3NldCwgcmVnc2l6 ZSwgZGV2X3NldCwgZXJyOworLSAgY2hhciAqZGF0YTsKKy0gIHB0aWRfdCBwdGlkID0gcmVnY2Fj aGUtPnB0aWQgKCk7CistCistICBpZiAocHRpZCA9PSBudWxsX3B0aWQpCistICAgIHJldHVybjsK Ky0gIHByb2Nmc19zZXRfdGhyZWFkIChwdGlkKTsKKy0KKy0gIGlmIChyZWdubyA9PSAtMSkKKy0g ICAgeworLSAgICAgIGZvciAocmVnc2V0ID0gTlRPX1JFR19HRU5FUkFMOyByZWdzZXQgPCBOVE9f UkVHX0VORDsgcmVnc2V0KyspCistCXsKKy0JICBkZXZfc2V0ID0gZ2V0X3JlZ3NldCAocmVnc2V0 LCAoY2hhciAqKSAmcmVnLAorLQkJCQlzaXplb2YgKHJlZyksICZyZWdzaXplKTsKKy0JICBpZiAo ZGV2X3NldCA9PSAtMSkKKy0JICAgIGNvbnRpbnVlOworLQorLQkgIGlmIChudG9fcmVnc2V0X2Zp bGwgKHJlZ2NhY2hlLCByZWdzZXQsIChjaGFyICopICZyZWcpID09IC0xKQorLQkgICAgY29udGlu dWU7CistCistCSAgZXJyID0gZGV2Y3RsIChjdGxfZmQsIGRldl9zZXQsICZyZWcsIHJlZ3NpemUs IDApOworLQkgIGlmIChlcnIgIT0gRU9LKQorLQkgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGVyciwK Ky0JCQkiV2FybmluZyB1bmFibGUgdG8gd3JpdGUgcmVnc2V0ICVkOiAlc1xuIiwKKy0JCQlyZWdu bywgc2FmZV9zdHJlcnJvciAoZXJyKSk7CistCX0KKy0gICAgfQorLSAgZWxzZQorLSAgICB7Cist ICAgICAgcmVnc2V0ID0gbnRvX3JlZ3NldF9pZCAocmVnbm8pOworLSAgICAgIGlmIChyZWdzZXQg PT0gLTEpCistCXJldHVybjsKKy0KKy0gICAgICBkZXZfc2V0ID0gZ2V0X3JlZ3NldCAocmVnc2V0 LCAoY2hhciAqKSAmcmVnLCBzaXplb2YgKHJlZyksICZyZWdzaXplKTsKKy0gICAgICBpZiAoZGV2 X3NldCA9PSAtMSkKKy0JcmV0dXJuOworLQorLSAgICAgIGxlbiA9IG50b19yZWdpc3Rlcl9hcmVh IChyZWdjYWNoZS0+YXJjaCAoKSwKKy0JCQkgICAgICAgcmVnbm8sIHJlZ3NldCwgJm9mZik7Cist CistICAgICAgaWYgKGxlbiA8IDEpCistCXJldHVybjsKKy0KKy0gICAgICByZWdjYWNoZS0+cmF3 X2NvbGxlY3QgKHJlZ25vLCAoY2hhciAqKSAmcmVnICsgb2ZmKTsKKy0KKy0gICAgICBlcnIgPSBk ZXZjdGwgKGN0bF9mZCwgZGV2X3NldCwgJnJlZywgcmVnc2l6ZSwgMCk7CistICAgICAgaWYgKGVy ciAhPSBFT0spCistCWdkYl9wcmludGYgKGdkYl9zdGRlcnIsCistCQkgICAgIldhcm5pbmcgdW5h YmxlIHRvIHdyaXRlIHJlZ3NldCAlZDogJXNcbiIsIHJlZ25vLAorLQkJICAgIHNhZmVfc3RyZXJy b3IgKGVycikpOworLSAgICB9CistfQorLQorLS8qIFNldCBsaXN0IG9mIHNpZ25hbHMgdG8gYmUg aGFuZGxlZCBpbiB0aGUgdGFyZ2V0LiAgKi8KKy0KKy12b2lkCistbnRvX3Byb2Nmc190YXJnZXQ6 OnBhc3Nfc2lnbmFscworLSAgKGdkYjo6YXJyYXlfdmlldzxjb25zdCB1bnNpZ25lZCBjaGFyPiBw YXNzX3NpZ25hbHMpCisteworLSAgaW50IHNpZ25vOworLQorLSAgc2lnZmlsbHNldCAoJnJ1bi50 cmFjZSk7CistCistICBmb3IgKHNpZ25vID0gMTsgc2lnbm8gPCBOU0lHOyBzaWdubysrKQorLSAg ICB7CistICAgICAgaW50IHRhcmdldF9zaWdubyA9IGdkYl9zaWduYWxfZnJvbV9ob3N0IChzaWdu byk7CistICAgICAgaWYgKHRhcmdldF9zaWdubyA8IHBhc3Nfc2lnbmFscy5zaXplICgpICYmIHBh c3Nfc2lnbmFsc1t0YXJnZXRfc2lnbm9dKQorLQlzaWdkZWxzZXQgKCZydW4udHJhY2UsIHNpZ25v KTsKKy0gICAgfQorLX0KKy0KKy1zdGQ6OnN0cmluZworLW50b19wcm9jZnNfdGFyZ2V0OjpwaWRf dG9fc3RyIChwdGlkX3QgcHRpZCkKKy17CistICBpbnQgcGlkLCB0aWQ7CistICBzdHJ1Y3QgdGlk aW5mbyAqdGlwOworLQorLSAgcGlkID0gcHRpZC5waWQgKCk7CistICB0aWQgPSBwdGlkLnRpZCAo KTsKKy0KKy0jaWYgMAkJCQkvKiBOWUkgKi8KKy0gIHRpcCA9IHByb2Nmc190aHJlYWRfaW5mbyAo cGlkLCB0aWQpOworLSAgaWYgKHRpcCAhPSBOVUxMKQorLSAgICBzbnByaW50ZiAoJmJ1ZltuXSwg MTAyMywgIiAoc3RhdGUgPSAweCUwMngpIiwgdGlwLT5zdGF0ZSk7CistI2VuZGlmCistCistICBy ZXR1cm4gc3RyaW5nX3ByaW50ZiAoInByb2Nlc3MgJWQiLCBwaWQpOworLX0KKy0KKy0vKiB0b19j YW5fcnVuIGltcGxlbWVudGF0aW9uIGZvciAidGFyZ2V0IHByb2NmcyIuICBOb3RlIHRoaXMgcmVh bGx5CistICBtZWFucyAiY2FuIHRoaXMgdGFyZ2V0IGJlIHRoZSBkZWZhdWx0IHJ1biB0YXJnZXQi LCB3aGljaCB0aGVyZSBjYW4KKy0gIGJlIG9ubHkgb25lLCBhbmQgd2UgbWFrZSBpdCBiZSAidGFy Z2V0IG5hdGl2ZSIgbGlrZSBvdGhlciBwb3J0cy4KKy0gICJ0YXJnZXQgcHJvY2ZzIDxub2RlPiIg d291bGRuJ3QgbWFrZSBzZW5zZSBhcyBkZWZhdWx0IHJ1biB0YXJnZXQsIGFzCistICBpdCBuZWVk cyA8bm9kZT4uICAqLworLQorLWludAorLW50b19wcm9jZnNfdGFyZ2V0OjpjYW5fcnVuICgpCist eworLSAgcmV0dXJuIDA7CistfQorLQorLS8qICJ0YXJnZXQgcHJvY2ZzIi4gICovCistc3RhdGlj IG50b19wcm9jZnNfdGFyZ2V0X3Byb2NmcyBudG9fcHJvY2ZzX29wczsKKy0KKy0vKiAidGFyZ2V0 IG5hdGl2ZSIuICAqLworLXN0YXRpYyBudG9fcHJvY2ZzX3RhcmdldF9uYXRpdmUgbnRvX25hdGl2 ZV9vcHM7CistCistLyogQ3JlYXRlIHRoZSAibmF0aXZlIiBhbmQgInByb2NmcyIgdGFyZ2V0cy4g ICovCistCistc3RhdGljIHZvaWQKKy1pbml0X3Byb2Nmc190YXJnZXRzICh2b2lkKQorLXsKKy0g IC8qIFJlZ2lzdGVyICJ0YXJnZXQgbmF0aXZlIi4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgcnVuIHRh cmdldC4gICovCistICBhZGRfdGFyZ2V0IChudG9fbmF0aXZlX3RhcmdldF9pbmZvLCBpbmZfY2hp bGRfb3Blbl90YXJnZXQpOworLSAgc2V0X25hdGl2ZV90YXJnZXQgKCZudG9fbmF0aXZlX29wcyk7 CistCistICAvKiBSZWdpc3RlciAidGFyZ2V0IHByb2NmcyA8bm9kZT4iLiAgKi8KKy0gIGFkZF90 YXJnZXQgKG50b19wcm9jZnNfdGFyZ2V0X2luZm8sIGluZl9jaGlsZF9vcGVuX3RhcmdldCk7Cist fQorLQorLSNkZWZpbmUgT1NUWVBFX05UTyAxCistCistdm9pZCBfaW5pdGlhbGl6ZV9wcm9jZnMg KCk7Cistdm9pZAorLV9pbml0aWFsaXplX3Byb2NmcyAoKQorLXsKKy0gIHNpZ3NldF90IHNldDsK Ky0KKy0gIGluaXRfcHJvY2ZzX3RhcmdldHMgKCk7CistCistICAvKiBXZSB1c2UgU0lHVVNSMSB0 byBnYWluIGNvbnRyb2wgYWZ0ZXIgd2UgYmxvY2sgd2FpdGluZyBmb3IgYSBwcm9jZXNzLgorLSAg ICAgV2UgdXNlIHNpZ3dhaXRldmVudCB0byB3YWl0LiAgKi8KKy0gIHNpZ2VtcHR5c2V0ICgmc2V0 KTsKKy0gIHNpZ2FkZHNldCAoJnNldCwgU0lHVVNSMSk7CistICBzaWdwcm9jbWFzayAoU0lHX0JM T0NLLCAmc2V0LCBOVUxMKTsKKy0KKy0gIC8qIEluaXRpYWxseSwgbWFrZSBzdXJlIGFsbCBzaWdu YWxzIGFyZSByZXBvcnRlZC4gICovCistICBzaWdmaWxsc2V0ICgmcnVuLnRyYWNlKTsKKy0KKy0g IC8qIFN0dWZmIHNvbWUgaW5mb3JtYXRpb24uICAqLworLSAgbnRvX2NwdWluZm9fZmxhZ3MgPSBT WVNQQUdFX0VOVFJZIChjcHVpbmZvKS0+ZmxhZ3M7CistICBudG9fY3B1aW5mb192YWxpZCA9IDE7 CistCistICBhZGRfaW5mbyAoInBpZGxpc3QiLCBwcm9jZnNfcGlkbGlzdCwgXygicGlkbGlzdCIp KTsKKy0gIGFkZF9pbmZvICgibWVtaW5mbyIsIHByb2Nmc19tZW1pbmZvLCBfKCJtZW1vcnkgaW5m b3JtYXRpb24iKSk7CistCistICBudG9faXNfbnRvX3RhcmdldCA9IHByb2Nmc19pc19udG9fdGFy Z2V0OworLX0KKy0KKy0KKy1zdGF0aWMgaW50CistcHJvY2ZzX2h3X3dhdGNocG9pbnQgKGludCBh ZGRyLCBpbnQgbGVuLCBlbnVtIHRhcmdldF9od19icF90eXBlIHR5cGUpCisteworLSAgcHJvY2Zz X2JyZWFrIGJyazsKKy0KKy0gIHN3aXRjaCAodHlwZSkKKy0gICAgeworLSAgICBjYXNlIGh3X3Jl YWQ6CistICAgICAgYnJrLnR5cGUgPSBfREVCVUdfQlJFQUtfUkQ7CistICAgICAgYnJlYWs7Cist ICAgIGNhc2UgaHdfYWNjZXNzOgorLSAgICAgIGJyay50eXBlID0gX0RFQlVHX0JSRUFLX1JXOwor LSAgICAgIGJyZWFrOworLSAgICBkZWZhdWx0OgkJCS8qIE1vZGlmeS4gICovCistLyogRklYTUU6 IGJyay50eXBlID0gX0RFQlVHX0JSRUFLX1JXTSBnaXZlcyBFSU5WQUwgZm9yIHNvbWUgcmVhc29u LiAgKi8KKy0gICAgICBicmsudHlwZSA9IF9ERUJVR19CUkVBS19SVzsKKy0gICAgfQorLSAgYnJr LnR5cGUgfD0gX0RFQlVHX0JSRUFLX0hXOwkvKiBBbHdheXMgYXNrIGZvciBIVy4gICovCistICBi cmsuYWRkciA9IGFkZHI7CistICBicmsuc2l6ZSA9IGxlbjsKKy0KKy0gIGVycm5vID0gZGV2Y3Rs IChjdGxfZmQsIERDTURfUFJPQ19CUkVBSywgJmJyaywgc2l6ZW9mIChicmspLCAwKTsKKy0gIGlm IChlcnJubyAhPSBFT0spCistICAgIHsKKy0gICAgICBwZXJyb3IgKF8oIkZhaWxlZCB0byBzZXQg aGFyZHdhcmUgd2F0Y2hwb2ludCIpKTsKKy0gICAgICByZXR1cm4gLTE7CistICAgIH0KKy0gIHJl dHVybiAwOworLX0KKy0KKy1ib29sCistbnRvX3Byb2Nmc190YXJnZXQ6OmNhbl91c2VfaHdfYnJl YWtwb2ludCAoZW51bSBicHR5cGUgdHlwZSwKKy0JCQkJCSAgaW50IGNudCwgaW50IG90aGVydHlw ZSkKKy17CistICByZXR1cm4gMTsKKy19CistCistaW50CistbnRvX3Byb2Nmc190YXJnZXQ6OnJl bW92ZV9od193YXRjaHBvaW50IChDT1JFX0FERFIgYWRkciwgaW50IGxlbiwKKy0JCQkJCSBlbnVt IHRhcmdldF9od19icF90eXBlIHR5cGUsCistCQkJCQkgc3RydWN0IGV4cHJlc3Npb24gKmNvbmQp CisteworLSAgcmV0dXJuIHByb2Nmc19od193YXRjaHBvaW50IChhZGRyLCAtMSwgdHlwZSk7Cist fQorLQorLWludAorLW50b19wcm9jZnNfdGFyZ2V0OjppbnNlcnRfaHdfd2F0Y2hwb2ludCAoQ09S RV9BRERSIGFkZHIsIGludCBsZW4sCistCQkJCQkgZW51bSB0YXJnZXRfaHdfYnBfdHlwZSB0eXBl LAorLQkJCQkJIHN0cnVjdCBleHByZXNzaW9uICpjb25kKQorLXsKKy0gIHJldHVybiBwcm9jZnNf aHdfd2F0Y2hwb2ludCAoYWRkciwgbGVuLCB0eXBlKTsKKy19CistCistYm9vbAorLW50b19wcm9j ZnNfdGFyZ2V0OjpzdG9wcGVkX2J5X3dhdGNocG9pbnQgKCkKKy17CistICAvKiBOT1RFOiBudG9f c3RvcHBlZF9ieV93YXRjaHBvaW50IHdpbGwgYmUgY2FsbGVkIE9OTFkgd2hpbGUgd2UgYXJlCist ICAgICBzdG9wcGVkIGR1ZSB0byBhIFNJR1RSQVAuICBUaGlzIGFzc3VtZXMgZ2RiIHdvcmtzIGlu ICdhbGwtc3RvcCcgbW9kZTsKKy0gICAgIGZ1dHVyZSBnZGIgdmVyc2lvbnMgd2lsbCBsaWtlbHkg cnVuIGluICdub24tc3RvcCcgbW9kZSBpbiB3aGljaCBjYXNlCistICAgICB3ZSB3aWxsIGhhdmUg dG8gc3RvcmUvZXhhbWluZSBzdGF0dXNlcyBwZXIgdGhyZWFkIGluIHF1ZXN0aW9uLgorLSAgICAg VW50aWwgdGhlbiwgdGhpcyB3aWxsIHdvcmsgZmluZS4gICovCistCistICBzdHJ1Y3QgaW5mZXJp b3IgKmluZiA9IGN1cnJlbnRfaW5mZXJpb3IgKCk7CistICBzdHJ1Y3QgbnRvX2luZmVyaW9yX2Rh dGEgKmluZl9kYXRhOworLQorLSAgZ2RiX2Fzc2VydCAoaW5mICE9IE5VTEwpOworLQorLSAgaW5m X2RhdGEgPSBudG9faW5mZXJpb3JfZGF0YSAoaW5mKTsKKy0KKy0gIHJldHVybiBpbmZfZGF0YS0+ c3RvcHBlZF9mbGFncworLQkgJiAoX0RFQlVHX0ZMQUdfVFJBQ0VfUkQKKy0JICAgIHwgX0RFQlVH X0ZMQUdfVFJBQ0VfV1IKKy0JICAgIHwgX0RFQlVHX0ZMQUdfVFJBQ0VfTU9ESUZZKTsKKy19Citk aWZmIC0tZ2l0IGEvZ2RiL250by10ZGVwLmMgYi9nZGIvbnRvLXRkZXAuYworZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CistLS0gYS9nZGIvbnRvLXRkZXAuYworKysrIC9kZXYvbnVsbAorQEAgLTEs NTIxICswLDAgQEAKKy0vKiBudG8tdGRlcC5jIC0gZ2VuZXJhbCBRTlggTmV1dHJpbm8gdGFyZ2V0 IGZ1bmN0aW9uYWxpdHkuCistCistICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjQgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgQ29udHJpYnV0ZWQgYnkgUU5YIFNvZnR3YXJl IFN5c3RlbXMgTHRkLgorLQorLSAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKy0KKy0gICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCist CistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCistCistI2luY2x1ZGUgPHN5cy9z dGF0Lmg+CistI2luY2x1ZGUgIm50by10ZGVwLmgiCistI2luY2x1ZGUgImV4dHJhY3Qtc3RvcmUt aW50ZWdlci5oIgorLSNpbmNsdWRlICJ0b3AuaCIKKy0jaW5jbHVkZSAiaW5mZXJpb3IuaCIKKy0j aW5jbHVkZSAiaW5mcnVuLmgiCistI2luY2x1ZGUgImdkYmFyY2guaCIKKy0jaW5jbHVkZSAiYmZk LmgiCistI2luY2x1ZGUgImVsZi1iZmQuaCIKKy0jaW5jbHVkZSAic29saWItc3ZyNC5oIgorLSNp bmNsdWRlICJnZGJjb3JlLmgiCistI2luY2x1ZGUgIm9iamZpbGVzLmgiCistI2luY2x1ZGUgInNv dXJjZS5oIgorLSNpbmNsdWRlICJnZGJzdXBwb3J0L3BhdGhzdHVmZi5oIgorLQorLSNkZWZpbmUg UU5YX05PVEVfTkFNRQkiUU5YIgorLSNkZWZpbmUgUU5YX0lORk9fU0VDVF9OQU1FICJRTlhfaW5m byIKKy0KKy0jaWZkZWYgX19DWUdXSU5fXworLSNpbmNsdWRlIDxzeXMvY3lnd2luLmg+CistI2Vu ZGlmCistCistI2lmZGVmIF9fQ1lHV0lOX18KKy1zdGF0aWMgY2hhciBkZWZhdWx0X250b190YXJn ZXRbXSA9ICJDOlxcUU5Yc2RrXFx0YXJnZXRcXHFueDYiOworLSNlbGlmIGRlZmluZWQoX19zdW5f XykgfHwgZGVmaW5lZChsaW51eCkKKy1zdGF0aWMgY2hhciBkZWZhdWx0X250b190YXJnZXRbXSA9 ICIvb3B0L1FOWHNkay90YXJnZXQvcW54NiI7CistI2Vsc2UKKy1zdGF0aWMgY2hhciBkZWZhdWx0 X250b190YXJnZXRbXSA9ICIiOworLSNlbmRpZgorLQorLXN0cnVjdCBudG9fdGFyZ2V0X29wcyBj dXJyZW50X250b190YXJnZXQ7CistCistc3RhdGljIGNvbnN0IHJlZ2lzdHJ5PGluZmVyaW9yPjo6 a2V5PHN0cnVjdCBudG9faW5mZXJpb3JfZGF0YT4KKy0gIG50b19pbmZlcmlvcl9kYXRhX3JlZzsK Ky0KKy1zdGF0aWMgY2hhciAqCistbnRvX3RhcmdldCAodm9pZCkKKy17CistICBjaGFyICpwID0g Z2V0ZW52ICgiUU5YX1RBUkdFVCIpOworLQorLSNpZmRlZiBfX0NZR1dJTl9fCistICBzdGF0aWMg Y2hhciBidWZbUEFUSF9NQVhdOworLSAgaWYgKHApCistICAgIGN5Z3dpbl9jb252X3BhdGggKEND UF9XSU5fQV9UT19QT1NJWCwgcCwgYnVmLCBQQVRIX01BWCk7CistICBlbHNlCistICAgIGN5Z3dp bl9jb252X3BhdGggKENDUF9XSU5fQV9UT19QT1NJWCwgZGVmYXVsdF9udG9fdGFyZ2V0LCBidWYs IFBBVEhfTUFYKTsKKy0gIHJldHVybiBidWY7CistI2Vsc2UKKy0gIHJldHVybiBwID8gcCA6IGRl ZmF1bHRfbnRvX3RhcmdldDsKKy0jZW5kaWYKKy19CistCistLyogVGFrZSBhIHN0cmluZyBzdWNo IGFzIGkzODYsIHJzNjAwMCwgZXRjLiBhbmQgbWFwIGl0IG9udG8gQ1BVVFlQRV9YODYsCistICAg Q1BVVFlQRV9QUEMsIGV0Yy4gYXMgZGVmaW5lZCBpbiBudG8tc2hhcmUvZHNtc2dzLmguICAqLwor LWludAorLW50b19tYXBfYXJjaF90b19jcHV0eXBlIChjb25zdCBjaGFyICphcmNoKQorLXsKKy0g IGlmICghc3RyY21wIChhcmNoLCAiaTM4NiIpIHx8ICFzdHJjbXAgKGFyY2gsICJ4ODYiKSkKKy0g ICAgcmV0dXJuIENQVVRZUEVfWDg2OworLSAgaWYgKCFzdHJjbXAgKGFyY2gsICJyczYwMDAiKSB8 fCAhc3RyY21wIChhcmNoLCAicG93ZXJwYyIpKQorLSAgICByZXR1cm4gQ1BVVFlQRV9QUEM7Cist ICBpZiAoIXN0cmNtcCAoYXJjaCwgIm1pcHMiKSkKKy0gICAgcmV0dXJuIENQVVRZUEVfTUlQUzsK Ky0gIGlmICghc3RyY21wIChhcmNoLCAiYXJtIikpCistICAgIHJldHVybiBDUFVUWVBFX0FSTTsK Ky0gIGlmICghc3RyY21wIChhcmNoLCAic2giKSkKKy0gICAgcmV0dXJuIENQVVRZUEVfU0g7Cist ICByZXR1cm4gQ1BVVFlQRV9VTktOT1dOOworLX0KKy0KKy1pbnQKKy1udG9fZmluZF9hbmRfb3Bl bl9zb2xpYiAoY29uc3QgY2hhciAqc29saWIsIHVuc2lnbmVkIG9fZmxhZ3MsCistCQkJIGdkYjo6 dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+ICp0ZW1wX3BhdGhuYW1lKQorLXsKKy0gIGNoYXIgKmJ1 ZiwgKmFyY2hfcGF0aCwgKm50b19yb290OworLSAgY29uc3QgY2hhciAqZW5kaWFuOworLSAgY29u c3QgY2hhciAqYmFzZTsKKy0gIGNvbnN0IGNoYXIgKmFyY2g7CistICBpbnQgYXJjaF9sZW4sIGxl biwgcmV0OworLSNkZWZpbmUgUEFUSF9GTVQgXAorLSAgIiVzL2xpYjolcy91c3IvbGliOiVzL3Vz ci9waG90b24vbGliOiVzL3Vzci9waG90b24vZGxsOiVzL2xpYi9kbGwiCistCistICBudG9fcm9v dCA9IG50b190YXJnZXQgKCk7CistICBnZGJhcmNoICpnZGJhcmNoID0gY3VycmVudF9pbmZlcmlv ciAoKS0+YXJjaCAoKTsKKy0gIGlmIChzdHJjbXAgKGdkYmFyY2hfYmZkX2FyY2hfaW5mbyAoZ2Ri YXJjaCktPmFyY2hfbmFtZSwgImkzODYiKSA9PSAwKQorLSAgICB7CistICAgICAgYXJjaCA9ICJ4 ODYiOworLSAgICAgIGVuZGlhbiA9ICIiOworLSAgICB9CistICBlbHNlIGlmIChzdHJjbXAgKGdk YmFyY2hfYmZkX2FyY2hfaW5mbyAoZ2RiYXJjaCktPmFyY2hfbmFtZSwKKy0JCSAgICJyczYwMDAi KSA9PSAwCistCSAgIHx8IHN0cmNtcCAoZ2RiYXJjaF9iZmRfYXJjaF9pbmZvIChnZGJhcmNoKS0+ YXJjaF9uYW1lLAorLQkJICAgInBvd2VycGMiKSA9PSAwKQorLSAgICB7CistICAgICAgYXJjaCA9 ICJwcGMiOworLSAgICAgIGVuZGlhbiA9ICJiZSI7CistICAgIH0KKy0gIGVsc2UKKy0gICAgewor LSAgICAgIGFyY2ggPSBnZGJhcmNoX2JmZF9hcmNoX2luZm8gKGdkYmFyY2gpLT5hcmNoX25hbWU7 CistICAgICAgZW5kaWFuID0gZ2RiYXJjaF9ieXRlX29yZGVyIChnZGJhcmNoKQorLQkgICAgICAg PT0gQkZEX0VORElBTl9CSUcgPyAiYmUiIDogImxlIjsKKy0gICAgfQorLQorLSAgLyogSW4gY2Fz ZSBudG9fcm9vdCBpcyBzaG9ydCwgYWRkIHN0cmxlbihzb2xpYikKKy0gICAgIHNvIHdlIGNhbiBy ZXVzZSBhcmNoX3BhdGggYmVsb3cuICAqLworLQorLSAgYXJjaF9sZW4gPSAoc3RybGVuIChudG9f cm9vdCkgKyBzdHJsZW4gKGFyY2gpICsgc3RybGVuIChlbmRpYW4pICsgMgorLQkgICAgICArIHN0 cmxlbiAoc29saWIpKTsKKy0gIGFyY2hfcGF0aCA9IChjaGFyICopIGFsbG9jYSAoYXJjaF9sZW4p OworLSAgeHNucHJpbnRmIChhcmNoX3BhdGgsIGFyY2hfbGVuLCAiJXMvJXMlcyIsIG50b19yb290 LCBhcmNoLCBlbmRpYW4pOworLQorLSAgbGVuID0gc3RybGVuIChQQVRIX0ZNVCkgKyBzdHJsZW4g KGFyY2hfcGF0aCkgKiA1ICsgMTsKKy0gIGJ1ZiA9IChjaGFyICopIGFsbG9jYSAobGVuKTsKKy0g IHhzbnByaW50ZiAoYnVmLCBsZW4sIFBBVEhfRk1ULCBhcmNoX3BhdGgsIGFyY2hfcGF0aCwgYXJj aF9wYXRoLCBhcmNoX3BhdGgsCistCSAgICAgYXJjaF9wYXRoKTsKKy0KKy0gIGJhc2UgPSBsYmFz ZW5hbWUgKHNvbGliKTsKKy0gIHJldCA9IG9wZW5wIChidWYsIE9QRl9UUllfQ1dEX0ZJUlNUIHwg T1BGX1JFVFVSTl9SRUFMUEFUSCwgYmFzZSwgb19mbGFncywKKy0JICAgICAgIHRlbXBfcGF0aG5h bWUpOworLSAgaWYgKHJldCA8IDAgJiYgYmFzZSAhPSBzb2xpYikKKy0gICAgeworLSAgICAgIHhz bnByaW50ZiAoYXJjaF9wYXRoLCBhcmNoX2xlbiwgIi8lcyIsIHNvbGliKTsKKy0gICAgICByZXQg PSBvcGVuIChhcmNoX3BhdGgsIG9fZmxhZ3MsIDApOworLSAgICAgIGlmICh0ZW1wX3BhdGhuYW1l KQorLQl7CistCSAgaWYgKHJldCA+PSAwKQorLQkgICAgKnRlbXBfcGF0aG5hbWUgPSBnZGJfcmVh bHBhdGggKGFyY2hfcGF0aCk7CistCSAgZWxzZQorLQkgICAgdGVtcF9wYXRobmFtZS0+cmVzZXQg KE5VTEwpOworLQl9CistICAgIH0KKy0gIHJldHVybiByZXQ7CistfQorLQorLXZvaWQKKy1udG9f aW5pdF9zb2xpYl9hYnNvbHV0ZV9wcmVmaXggKHZvaWQpCisteworLSAgY2hhciBidWZbUEFUSF9N QVggKiAyXSwgYXJjaF9wYXRoW1BBVEhfTUFYXTsKKy0gIGNoYXIgKm50b19yb290OworLSAgY29u c3QgY2hhciAqZW5kaWFuOworLSAgY29uc3QgY2hhciAqYXJjaDsKKy0KKy0gIG50b19yb290ID0g bnRvX3RhcmdldCAoKTsKKy0gIGdkYmFyY2ggKmdkYmFyY2ggPSBjdXJyZW50X2luZmVyaW9yICgp LT5hcmNoICgpOworLSAgaWYgKHN0cmNtcCAoZ2RiYXJjaF9iZmRfYXJjaF9pbmZvIChnZGJhcmNo KS0+YXJjaF9uYW1lLCAiaTM4NiIpID09IDApCistICAgIHsKKy0gICAgICBhcmNoID0gIng4NiI7 CistICAgICAgZW5kaWFuID0gIiI7CistICAgIH0KKy0gIGVsc2UgaWYgKHN0cmNtcCAoZ2RiYXJj aF9iZmRfYXJjaF9pbmZvIChnZGJhcmNoKS0+YXJjaF9uYW1lLAorLQkJICAgInJzNjAwMCIpID09 IDAKKy0JICAgfHwgc3RyY21wIChnZGJhcmNoX2JmZF9hcmNoX2luZm8gKGdkYmFyY2gpLT5hcmNo X25hbWUsCistCQkgICAicG93ZXJwYyIpID09IDApCistICAgIHsKKy0gICAgICBhcmNoID0gInBw YyI7CistICAgICAgZW5kaWFuID0gImJlIjsKKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAg ICAgYXJjaCA9IGdkYmFyY2hfYmZkX2FyY2hfaW5mbyAoZ2RiYXJjaCktPmFyY2hfbmFtZTsKKy0g ICAgICBlbmRpYW4gPSBnZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpCistCSAgICAgICA9PSBC RkRfRU5ESUFOX0JJRyA/ICJiZSIgOiAibGUiOworLSAgICB9CistCistICB4c25wcmludGYgKGFy Y2hfcGF0aCwgc2l6ZW9mIChhcmNoX3BhdGgpLCAiJXMvJXMlcyIsIG50b19yb290LCBhcmNoLCBl bmRpYW4pOworLQorLSAgeHNucHJpbnRmIChidWYsIHNpemVvZiAoYnVmKSwgInNldCBzb2xpYi1h YnNvbHV0ZS1wcmVmaXggJXMiLCBhcmNoX3BhdGgpOworLSAgZXhlY3V0ZV9jb21tYW5kIChidWYs IDApOworLX0KKy0KKy1jaGFyICoqCistbnRvX3BhcnNlX3JlZGlyZWN0aW9uIChjaGFyICpwYXJn dltdLCBjb25zdCBjaGFyICoqcGluLCBjb25zdCBjaGFyICoqcG91dCwgCistCQkgICAgICAgY29u c3QgY2hhciAqKnBlcnIpCisteworLSAgY2hhciAqKmFyZ3Y7CistICBjb25zdCBjaGFyICppbiwg Km91dCwgKmVyciwgKnA7CistICBpbnQgYXJnYywgaSwgbjsKKy0KKy0gIGZvciAobiA9IDA7IHBh cmd2W25dOyBuKyspOworLSAgaWYgKG4gPT0gMCkKKy0gICAgcmV0dXJuIE5VTEw7CistICBpbiA9 ICIiOworLSAgb3V0ID0gIiI7CistICBlcnIgPSAiIjsKKy0KKy0gIGFyZ3YgPSBYQ05FV1ZFQyAo Y2hhciAqLCBuICsgMSk7CistICBhcmdjID0gbjsKKy0gIGZvciAoaSA9IDAsIG4gPSAwOyBuIDwg YXJnYzsgbisrKQorLSAgICB7CistICAgICAgcCA9IHBhcmd2W25dOworLSAgICAgIGlmICgqcCA9 PSAnPicpCistCXsKKy0JICBwKys7CistCSAgaWYgKCpwKQorLQkgICAgb3V0ID0gcDsKKy0JICBl bHNlCistCSAgICBvdXQgPSBwYXJndlsrK25dOworLQl9CistICAgICAgZWxzZSBpZiAoKnAgPT0g JzwnKQorLQl7CistCSAgcCsrOworLQkgIGlmICgqcCkKKy0JICAgIGluID0gcDsKKy0JICBlbHNl CistCSAgICBpbiA9IHBhcmd2Wysrbl07CistCX0KKy0gICAgICBlbHNlIGlmICgqcCsrID09ICcy JyAmJiAqcCsrID09ICc+JykKKy0JeworLQkgIGlmICgqcCA9PSAnJicgJiYgKihwICsgMSkgPT0g JzEnKQorLQkgICAgZXJyID0gb3V0OworLQkgIGVsc2UgaWYgKCpwKQorLQkgICAgZXJyID0gcDsK Ky0JICBlbHNlCistCSAgICBlcnIgPSBwYXJndlsrK25dOworLQl9CistICAgICAgZWxzZQorLQlh cmd2W2krK10gPSBwYXJndltuXTsKKy0gICAgfQorLSAgKnBpbiA9IGluOworLSAgKnBvdXQgPSBv dXQ7CistICAqcGVyciA9IGVycjsKKy0gIHJldHVybiBhcmd2OworLX0KKy0KKy1zdGF0aWMgQ09S RV9BRERSCistbG1fYWRkciAoY29uc3Qgc29saWIgJnNvKQorLXsKKy0gIGF1dG8gKmxpID0gZ2Ri OjpjaGVja2VkX3N0YXRpY19jYXN0PGNvbnN0IGxtX2luZm9fc3ZyNCAqPiAoc28ubG1faW5mby5n ZXQgKCkpOworLQorLSAgcmV0dXJuIGxpLT5sX2FkZHI7CistfQorLQorLXN0YXRpYyBDT1JFX0FE RFIKKy1udG9fdHJ1bmNhdGVfcHRyIChDT1JFX0FERFIgYWRkcikKKy17CistICBnZGJhcmNoICpn ZGJhcmNoID0gY3VycmVudF9pbmZlcmlvciAoKS0+YXJjaCAoKTsKKy0gIGlmIChnZGJhcmNoX3B0 cl9iaXQgKGdkYmFyY2gpID09IHNpemVvZiAoQ09SRV9BRERSKSAqIDgpCistICAgIC8qIFdlIGRv bid0IG5lZWQgdG8gdHJ1bmNhdGUgYW55dGhpbmcsIGFuZCB0aGUgYml0IHR3aWRkbGluZyBiZWxv dworLSAgICAgICB3aWxsIGZhaWwgZHVlIHRvIG92ZXJmbG93IHByb2JsZW1zLiAgKi8KKy0gICAg cmV0dXJuIGFkZHI7CistICBlbHNlCistICAgIHJldHVybiBhZGRyICYgKCgoQ09SRV9BRERSKSAx IDw8IGdkYmFyY2hfcHRyX2JpdCAoZ2RiYXJjaCkpIC0gMSk7CistfQorLQorLXN0YXRpYyBFbGZf SW50ZXJuYWxfUGhkciAqCistZmluZF9sb2FkX3BoZHIgKGJmZCAqYWJmZCkKKy17CistICBFbGZf SW50ZXJuYWxfUGhkciAqcGhkcjsKKy0gIHVuc2lnbmVkIGludCBpOworLQorLSAgaWYgKCFlbGZf dGRhdGEgKGFiZmQpKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIHBoZHIgPSBlbGZfdGRhdGEg KGFiZmQpLT5waGRyOworLSAgZm9yIChpID0gMDsgaSA8IGVsZl9lbGZoZWFkZXIgKGFiZmQpLT5l X3BobnVtOyBpKyssIHBoZHIrKykKKy0gICAgeworLSAgICAgIGlmIChwaGRyLT5wX3R5cGUgPT0g UFRfTE9BRCAmJiAocGhkci0+cF9mbGFncyAmIFBGX1gpKQorLQlyZXR1cm4gcGhkcjsKKy0gICAg fQorLSAgcmV0dXJuIE5VTEw7CistfQorLQorLXZvaWQKKy1udG9fcmVsb2NhdGVfc2VjdGlvbl9h ZGRyZXNzZXMgKHNvbGliICZzbywgdGFyZ2V0X3NlY3Rpb24gKnNlYykKKy17CistICAvKiBOZXV0 cmlubyB0cmVhdHMgdGhlIGxfYWRkciBiYXNlIGFkZHJlc3MgZmllbGQgaW4gbGluay5oIGFzIGRp ZmZlcmVudCB0aGFuCistICAgICB0aGUgYmFzZSBhZGRyZXNzIGluIHRoZSBTeXN0ZW0gViBBQkkg YW5kIHNvIHRoZSBvZmZzZXQgbmVlZHMgdG8gYmUKKy0gICAgIGNhbGN1bGF0ZWQgYW5kIGFwcGxp ZWQgdG8gcmVsb2NhdGlvbnMuICAqLworLSAgRWxmX0ludGVybmFsX1BoZHIgKnBoZHIgPSBmaW5k X2xvYWRfcGhkciAoc2VjLT50aGVfYmZkX3NlY3Rpb24tPm93bmVyKTsKKy0gIHVuc2lnbmVkIHZh ZGRyID0gcGhkciA/IHBoZHItPnBfdmFkZHIgOiAwOworLQorLSAgc2VjLT5hZGRyID0gbnRvX3Ry dW5jYXRlX3B0ciAoc2VjLT5hZGRyICsgbG1fYWRkciAoc28pIC0gdmFkZHIpOworLSAgc2VjLT5l bmRhZGRyID0gbnRvX3RydW5jYXRlX3B0ciAoc2VjLT5lbmRhZGRyICsgbG1fYWRkciAoc28pIC0g dmFkZHIpOworLX0KKy0KKy0vKiBUaGlzIGlzIGNoZWF0aW5nIGEgYml0IGJlY2F1c2Ugb3VyIGxp bmtlciBjb2RlIGlzIGluIGxpYmMuc28uICBJZiB3ZQorLSAgIGV2ZXIgaW1wbGVtZW50IGxhenkg bGlua2luZywgdGhpcyBtYXkgbmVlZCB0byBiZSByZS1leGFtaW5lZC4gICovCistaW50CistbnRv X2luX2R5bnN5bV9yZXNvbHZlX2NvZGUgKENPUkVfQUREUiBwYykKKy17CistICBpZiAoaW5fcGx0 X3NlY3Rpb24gKHBjKSkKKy0gICAgcmV0dXJuIDE7CistICByZXR1cm4gMDsKKy19CistCistdm9p ZAorLW50b19kdW1teV9zdXBwbHlfcmVnc2V0IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBj aGFyICpyZWdzKQorLXsKKy0gIC8qIERvIG5vdGhpbmcuICAqLworLX0KKy0KKy1zdGF0aWMgdm9p ZAorLW50b19zbmlmZl9hYmlfbm90ZV9zZWN0aW9uIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0 LCB2b2lkICpvYmopCisteworLSAgY29uc3QgY2hhciAqc2VjdG5hbWU7CistICB1bnNpZ25lZCBp bnQgc2VjdHNpemU7CistICAvKiBCdWZmZXIgaG9sZGluZyB0aGUgc2VjdGlvbiBjb250ZW50cy4g ICovCistICBjaGFyICpub3RlOworLSAgdW5zaWduZWQgaW50IG5hbWVsZW47CistICBjb25zdCBj aGFyICpuYW1lOworLSAgY29uc3QgdW5zaWduZWQgc2l6ZW9mX0VsZl9OaGRyID0gMTI7CistCist ICBzZWN0bmFtZSA9IGJmZF9zZWN0aW9uX25hbWUgKHNlY3QpOworLSAgc2VjdHNpemUgPSBiZmRf c2VjdGlvbl9zaXplIChzZWN0KTsKKy0KKy0gIGlmIChzZWN0c2l6ZSA+IDEyOCkKKy0gICAgc2Vj dHNpemUgPSAxMjg7CistCistICBpZiAoc2VjdG5hbWUgIT0gTlVMTCAmJiBzdHJzdHIgKHNlY3Ru YW1lLCBRTlhfSU5GT19TRUNUX05BTUUpICE9IE5VTEwpCistICAgICooZW51bSBnZGJfb3NhYmkg Kikgb2JqID0gR0RCX09TQUJJX1FOWE5UTzsKKy0gIGVsc2UgaWYgKHNlY3RuYW1lICE9IE5VTEwg JiYgc3Ryc3RyIChzZWN0bmFtZSwgIm5vdGUiKSAhPSBOVUxMCistCSAgICYmIHNlY3RzaXplID4g c2l6ZW9mX0VsZl9OaGRyKQorLSAgICB7CistICAgICAgbm90ZSA9IFhORVdWRUMgKGNoYXIsIHNl Y3RzaXplKTsKKy0gICAgICBiZmRfZ2V0X3NlY3Rpb25fY29udGVudHMgKGFiZmQsIHNlY3QsIG5v dGUsIDAsIHNlY3RzaXplKTsKKy0gICAgICBuYW1lbGVuID0gKHVuc2lnbmVkIGludCkgYmZkX2hf Z2V0XzMyIChhYmZkLCBub3RlKTsKKy0gICAgICBuYW1lID0gbm90ZSArIHNpemVvZl9FbGZfTmhk cjsKKy0gICAgICBpZiAoc2VjdHNpemUgPj0gbmFtZWxlbiArIHNpemVvZl9FbGZfTmhkcgorLQkg ICYmIG5hbWVsZW4gPT0gc2l6ZW9mIChRTlhfTk9URV9OQU1FKQorLQkgICYmIDAgPT0gc3RyY21w IChuYW1lLCBRTlhfTk9URV9OQU1FKSkKKy0JKihlbnVtIGdkYl9vc2FiaSAqKSBvYmogPSBHREJf T1NBQklfUU5YTlRPOworLQorLSAgICAgIFhERUxFVEVWRUMgKG5vdGUpOworLSAgICB9CistfQor LQorLWVudW0gZ2RiX29zYWJpCistbnRvX2VsZl9vc2FiaV9zbmlmZmVyIChiZmQgKmFiZmQpCist eworLSAgZW51bSBnZGJfb3NhYmkgb3NhYmkgPSBHREJfT1NBQklfVU5LTk9XTjsKKy0KKy0gIGJm ZF9tYXBfb3Zlcl9zZWN0aW9ucyAoYWJmZCwKKy0JCQkgbnRvX3NuaWZmX2FiaV9ub3RlX3NlY3Rp b24sCistCQkJICZvc2FiaSk7CistCistICByZXR1cm4gb3NhYmk7CistfQorLQorLXN0YXRpYyBj b25zdCBjaGFyICogY29uc3QgbnRvX3RocmVhZF9zdGF0ZV9zdHJbXSA9CisteworLSAgIkRFQUQi LAkJLyogMCAgMHgwMCAqLworLSAgIlJVTk5JTkciLAkvKiAxICAweDAxICovCistICAiUkVBRFki LAkvKiAyICAweDAyICovCistICAiU1RPUFBFRCIsCS8qIDMgIDB4MDMgKi8KKy0gICJTRU5EIiwJ CS8qIDQgIDB4MDQgKi8KKy0gICJSRUNFSVZFIiwJLyogNSAgMHgwNSAqLworLSAgIlJFUExZIiwJ LyogNiAgMHgwNiAqLworLSAgIlNUQUNLIiwJLyogNyAgMHgwNyAqLworLSAgIldBSVRUSFJFQUQi LAkvKiA4ICAweDA4ICovCistICAiV0FJVFBBR0UiLAkvKiA5ICAweDA5ICovCistICAiU0lHU1VT UEVORCIsCS8qIDEwIDB4MGEgKi8KKy0gICJTSUdXQUlUSU5GTyIsCS8qIDExIDB4MGIgKi8KKy0g ICJOQU5PU0xFRVAiLAkvKiAxMiAweDBjICovCistICAiTVVURVgiLAkvKiAxMyAweDBkICovCist ICAiQ09ORFZBUiIsCS8qIDE0IDB4MGUgKi8KKy0gICJKT0lOIiwJCS8qIDE1IDB4MGYgKi8KKy0g ICJJTlRSIiwJCS8qIDE2IDB4MTAgKi8KKy0gICJTRU0iLAkJLyogMTcgMHgxMSAqLworLSAgIldB SVRDVFgiLAkvKiAxOCAweDEyICovCistICAiTkVUX1NFTkQiLAkvKiAxOSAweDEzICovCistICAi TkVUX1JFUExZIgkvKiAyMCAweDE0ICovCistfTsKKy0KKy1jb25zdCBjaGFyICoKKy1udG9fZXh0 cmFfdGhyZWFkX2luZm8gKHN0cnVjdCB0YXJnZXRfb3BzICpzZWxmLCBzdHJ1Y3QgdGhyZWFkX2lu Zm8gKnRpKQorLXsKKy0gIGlmICh0aSAhPSBOVUxMICYmIHRpLT5wcml2ICE9IE5VTEwpCistICAg IHsKKy0gICAgICBudG9fdGhyZWFkX2luZm8gKnByaXYgPSBnZXRfbnRvX3RocmVhZF9pbmZvICh0 aSk7CistCistICAgICAgaWYgKHByaXYtPnN0YXRlIDwgQVJSQVlfU0laRSAobnRvX3RocmVhZF9z dGF0ZV9zdHIpKQorLQlyZXR1cm4gbnRvX3RocmVhZF9zdGF0ZV9zdHIgW3ByaXYtPnN0YXRlXTsK Ky0gICAgfQorLSAgcmV0dXJuICIiOworLX0KKy0KKy12b2lkCistbnRvX2luaXRpYWxpemVfc2ln bmFscyAodm9pZCkKKy17CistICAvKiBXZSB1c2UgU0lHNDUgZm9yIHB1bHNlcywgb3Igc29tZXRo aW5nLCBzbyBub3N0b3AsIG5vcHJpbnQKKy0gICAgIGFuZCBwYXNzIHRoZW0uICAqLworLSAgc2ln bmFsX3N0b3BfdXBkYXRlIChnZGJfc2lnbmFsX2Zyb21fbmFtZSAoIlNJRzQ1IiksIDApOworLSAg c2lnbmFsX3ByaW50X3VwZGF0ZSAoZ2RiX3NpZ25hbF9mcm9tX25hbWUgKCJTSUc0NSIpLCAwKTsK Ky0gIHNpZ25hbF9wYXNzX3VwZGF0ZSAoZ2RiX3NpZ25hbF9mcm9tX25hbWUgKCJTSUc0NSIpLCAx KTsKKy0KKy0gIC8qIEJ5IGRlZmF1bHQgd2UgZG9uJ3Qgd2FudCB0byBzdG9wIG9uIHRoZXNlIHR3 bywgYnV0IHdlIGRvIHdhbnQgdG8gcGFzcy4gICovCistI2lmIGRlZmluZWQoU0lHU0VMRUNUKQor LSAgc2lnbmFsX3N0b3BfdXBkYXRlIChTSUdTRUxFQ1QsIDApOworLSAgc2lnbmFsX3ByaW50X3Vw ZGF0ZSAoU0lHU0VMRUNULCAwKTsKKy0gIHNpZ25hbF9wYXNzX3VwZGF0ZSAoU0lHU0VMRUNULCAx KTsKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChTSUdQSE9UT04pCistICBzaWduYWxfc3RvcF91 cGRhdGUgKFNJR1BIT1RPTiwgMCk7CistICBzaWduYWxfcHJpbnRfdXBkYXRlIChTSUdQSE9UT04s IDApOworLSAgc2lnbmFsX3Bhc3NfdXBkYXRlIChTSUdQSE9UT04sIDEpOworLSNlbmRpZgorLX0K Ky0KKy0vKiBSZWFkIEFVWFYgZnJvbSBpbml0aWFsX3N0YWNrLiAgKi8KKy1MT05HRVNUCistbnRv X3JlYWRfYXV4dl9mcm9tX2luaXRpYWxfc3RhY2sgKENPUkVfQUREUiBpbml0aWFsX3N0YWNrLCBn ZGJfYnl0ZSAqcmVhZGJ1ZiwKKy0JCQkJICBMT05HRVNUIGxlbiwgc2l6ZV90IHNpemVvZl9hdXh2 X3QpCisteworLSAgZ2RiX2J5dGUgdGFyZzMyWzRdOyAvKiBGb3IgMzIgYml0IHRhcmdldCB2YWx1 ZXMuICAqLworLSAgZ2RiX2J5dGUgdGFyZzY0WzhdOyAvKiBGb3IgNjQgYml0IHRhcmdldCB2YWx1 ZXMuICAqLworLSAgQ09SRV9BRERSIGRhdGFfb2ZzID0gMDsKKy0gIFVMT05HRVNUIGFuaW50Owor LSAgTE9OR0VTVCBsZW5fcmVhZCA9IDA7CistICBnZGJfYnl0ZSAqYnVmZjsKKy0gIGVudW0gYmZk X2VuZGlhbiBieXRlX29yZGVyOworLSAgaW50IHB0cl9zaXplOworLQorLSAgaWYgKHNpemVvZl9h dXh2X3QgPT0gMTYpCistICAgIHB0cl9zaXplID0gODsKKy0gIGVsc2UKKy0gICAgcHRyX3NpemUg PSA0OworLQorLSAgLyogU2tpcCBvdmVyIGFyZ2MsIGFyZ3YgYW5kIGVudnAuLi4gQ29tbWVudCBm cm9tIGxkZC5jOgorLQorLSAgICAgVGhlIHN0YXJ0dXAgZnJhbWUgaXMgc2V0LXVwIHNvIHRoYXQg d2UgaGF2ZToKKy0gICAgIGF1eHYKKy0gICAgIE5VTEwKKy0gICAgIC4uLgorLSAgICAgZW52cDIK Ky0gICAgIGVudnAxIDwtLS0tLSB2b2lkICpmcmFtZSArIChhcmdjICsgMikgKiBzaXplb2YoY2hh ciAqKQorLSAgICAgTlVMTAorLSAgICAgLi4uCistICAgICBhcmd2MgorLSAgICAgYXJndjEKKy0g ICAgIGFyZ2MgIDwtLS0tLS0gdm9pZCAqIGZyYW1lCistCistICAgICBPbiBlbnRyeSB0byBsZGQs IGZyYW1lIGdpdmVzIHRoZSBhZGRyZXNzIG9mIGFyZ2Mgb24gdGhlIHN0YWNrLiAgKi8KKy0gIC8q IFJlYWQgYXJnYy4gNCBieXRlcyBvbiBib3RoIDY0IGFuZCAzMiBiaXQgYXJjaGVzIGFuZCBsdWNr aWx5IGxpdHRsZQorLSAgICogZW5kaWFuLiBTbyB3ZSBqdXN0IHJlYWQgZmlyc3QgNCBieXRlcy4g ICovCistICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5IChpbml0aWFsX3N0YWNrICsgZGF0YV9vZnMs IHRhcmczMiwgNCkgIT0gMCkKKy0gICAgcmV0dXJuIDA7CistCistICBieXRlX29yZGVyID0gZ2Ri YXJjaF9ieXRlX29yZGVyIChjdXJyZW50X2luZmVyaW9yICgpLT5hcmNoICgpKTsKKy0KKy0gIGFu aW50ID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyICh0YXJnMzIsIHNpemVvZiAodGFyZzMyKSwg Ynl0ZV9vcmRlcik7CistCistICAvKiBTaXplIG9mIHBvaW50ZXIgaXMgYXNzdW1lZCB0byBiZSA0 IGJ5dGVzICgzMiBiaXQgYXJjaC4pICovCistICBkYXRhX29mcyArPSAoYW5pbnQgKyAyKSAqIHB0 cl9zaXplOyAvKiArIDIgY29tZXMgZnJvbSBhcmdjIGl0c2VsZiBhbmQKKy0JCQkJCQlOVUxMIHRl cm1pbmF0aW5nIHBvaW50ZXIgaW4KKy0JCQkJCQlhcmd2LiAgKi8KKy0KKy0gIC8qIE5vdyBsb29w IG92ZXIgZW52IHRhYmxlOiAgKi8KKy0gIGFuaW50ID0gMDsKKy0gIHdoaWxlICh0YXJnZXRfcmVh ZF9tZW1vcnkgKGluaXRpYWxfc3RhY2sgKyBkYXRhX29mcywgdGFyZzY0LCBwdHJfc2l6ZSkKKy0J ID09IDApCistICAgIHsKKy0gICAgICBpZiAoZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyICh0YXJn NjQsIHB0cl9zaXplLCBieXRlX29yZGVyKSA9PSAwKQorLQlhbmludCA9IDE7IC8qIEtlZXAgbG9v cGluZyB1bnRpbCBub24tbnVsbCBlbnRyeSBpcyBmb3VuZC4gICovCistICAgICAgZWxzZSBpZiAo YW5pbnQpCistCWJyZWFrOworLSAgICAgIGRhdGFfb2ZzICs9IHB0cl9zaXplOworLSAgICB9Cist ICBpbml0aWFsX3N0YWNrICs9IGRhdGFfb2ZzOworLQorLSAgbWVtc2V0IChyZWFkYnVmLCAwLCBs ZW4pOworLSAgYnVmZiA9IHJlYWRidWY7CistICB3aGlsZSAobGVuX3JlYWQgPD0gbGVuLXNpemVv Zl9hdXh2X3QpCistICAgIHsKKy0gICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5IChpbml0aWFs X3N0YWNrICsgbGVuX3JlYWQsIGJ1ZmYsIHNpemVvZl9hdXh2X3QpCistCSAgPT0gMCkKKy0Jewor LQkgIC8qIEJvdGggMzIgYW5kIDY0IGJpdCBzdHJ1Y3R1cmVzIGhhdmUgaW50IGFzIHRoZSBmaXJz dCBmaWVsZC4gICovCistCSAgY29uc3QgVUxPTkdFU1QgYV90eXBlCistCSAgICA9IGV4dHJhY3Rf dW5zaWduZWRfaW50ZWdlciAoYnVmZiwgc2l6ZW9mICh0YXJnMzIpLCBieXRlX29yZGVyKTsKKy0K Ky0JICBpZiAoYV90eXBlID09IEFUX05VTEwpCistCSAgICBicmVhazsKKy0JICBidWZmICs9IHNp emVvZl9hdXh2X3Q7CistCSAgbGVuX3JlYWQgKz0gc2l6ZW9mX2F1eHZfdDsKKy0JfQorLSAgICAg IGVsc2UKKy0JYnJlYWs7CistICAgIH0KKy0gIHJldHVybiBsZW5fcmVhZDsKKy19CistCistLyog UmV0dXJuIG50b19pbmZlcmlvcl9kYXRhIGZvciB0aGUgZ2l2ZW4gSU5GRVJJT1IuICBJZiBub3Qg eWV0IGNyZWF0ZWQsCistICAgY29uc3RydWN0IGl0LiAgKi8KKy0KKy1zdHJ1Y3QgbnRvX2luZmVy aW9yX2RhdGEgKgorLW50b19pbmZlcmlvcl9kYXRhIChzdHJ1Y3QgaW5mZXJpb3IgKmNvbnN0IGlu ZmVyaW9yKQorLXsKKy0gIHN0cnVjdCBpbmZlcmlvciAqY29uc3QgaW5mID0gaW5mZXJpb3IgPyBp bmZlcmlvciA6IGN1cnJlbnRfaW5mZXJpb3IgKCk7CistICBzdHJ1Y3QgbnRvX2luZmVyaW9yX2Rh dGEgKmluZl9kYXRhOworLQorLSAgZ2RiX2Fzc2VydCAoaW5mICE9IE5VTEwpOworLQorLSAgaW5m X2RhdGEgPSBudG9faW5mZXJpb3JfZGF0YV9yZWcuZ2V0IChpbmYpOworLSAgaWYgKGluZl9kYXRh ID09IE5VTEwpCistICAgIGluZl9kYXRhID0gbnRvX2luZmVyaW9yX2RhdGFfcmVnLmVtcGxhY2Ug KGluZik7CistCistICByZXR1cm4gaW5mX2RhdGE7CistfQorZGlmZiAtLWdpdCBhL2dkYi9udG8t dGRlcC5oIGIvZ2RiL250by10ZGVwLmgKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorLS0tIGEv Z2RiL250by10ZGVwLmgKKysrKyAvZGV2L251bGwKK0BAIC0xLDE5NCArMCwwIEBACistLyogbnRv LXRkZXAuaCAtIFFOWCBOZXV0cmlubyB0YXJnZXQgaGVhZGVyLgorLQorLSAgIENvcHlyaWdodCAo QykgMjAwMy0yMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIENvbnRy aWJ1dGVkIGJ5IFFOWCBTb2Z0d2FyZSBTeXN0ZW1zIEx0ZC4KKy0KKy0gICBUaGlzIGZpbGUgaXMg cGFydCBvZiBHREIuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq LworLQorLSNpZm5kZWYgTlRPX1RERVBfSAorLSNkZWZpbmUgTlRPX1RERVBfSAorLQorLSNpbmNs dWRlICJzb2xpc3QuaCIKKy0jaW5jbHVkZSAib3NhYmkuaCIKKy0jaW5jbHVkZSAicmVnc2V0Lmgi CistI2luY2x1ZGUgImdkYnRocmVhZC5oIgorLSNpbmNsdWRlICJnZGJzdXBwb3J0L2dkYi1jaGVj a2VkLXN0YXRpYy1jYXN0LmgiCistCistLyogVGFyZ2V0IG9wZXJhdGlvbnMgZGVmaW5lZCBmb3Ig TmV1dHJpbm8gdGFyZ2V0cyAoPHRhcmdldD4tbnRvLXRkZXAuYykuICAqLworLQorLXN0cnVjdCBu dG9fdGFyZ2V0X29wcworLXsKKy0vKiBUaGUgQ1BVSU5GTyBmbGFncyBmcm9tIHRoZSByZW1vdGUu ICBDdXJyZW50bHkgdXNlZCBieQorLSAgIGkzODYgZm9yIGZ4c2F2ZSBidXQgZnV0dXJlIHByb29m aW5nIG90aGVyIGhvc3RzLgorLSAgIFRoaXMgaXMgaW5pdGlhbGl6ZWQgaW4gcHJvY2ZzX2F0dGFj aCBvciBudG9fc3RhcnRfcmVtb3RlCistICAgZGVwZW5kaW5nIG9uIG91ciBob3N0L3RhcmdldC4g IEl0IHdvdWxkIG9ubHkgYmUgaW52YWxpZAorLSAgIGlmIHdlIHdlcmUgdGFsa2luZyB0byBhbiBv bGRlciBwZGVidWcgd2hpY2ggZGlkbid0IHN1cHBvcnQKKy0gICB0aGUgY3B1aW5mbyBtZXNzYWdl LiAgKi8KKy0gIHVuc2lnbmVkIGNwdWluZm9fZmxhZ3M7CistCistLyogVHJ1ZSBpZiBzdWNjZXNz ZnVsbHkgcmV0cmlldmVkIGNwdWluZm8gZnJvbSByZW1vdGUuICAqLworLSAgaW50IGNwdWluZm9f dmFsaWQ7CistCistLyogR2l2ZW4gYSByZWdpc3RlciwgcmV0dXJuIGFuIGlkIHRoYXQgcmVwcmVz ZW50cyB0aGUgTmV1dHJpbm8KKy0gICByZWdzZXQgaXQgY2FtZSBmcm9tLiAgSWYgcmVnID09IC0x IHVwZGF0ZSBhbGwgcmVnc2V0cy4gICovCistICBpbnQgKCpyZWdzZXRfaWQpIChpbnQpOworLQor LSAgdm9pZCAoKnN1cHBseV9ncmVnc2V0KSAoc3RydWN0IHJlZ2NhY2hlICosIGNoYXIgKik7Cist CistICB2b2lkICgqc3VwcGx5X2ZwcmVnc2V0KSAoc3RydWN0IHJlZ2NhY2hlICosIGNoYXIgKik7 CistCistICB2b2lkICgqc3VwcGx5X2FsdHJlZ3NldCkgKHN0cnVjdCByZWdjYWNoZSAqLCBjaGFy ICopOworLQorLS8qIEdpdmVuIGEgcmVnc2V0LCB0ZWxsIGdkYiBhYm91dCByZWdpc3RlcnMgc3Rv cmVkIGluIGRhdGEuICAqLworLSAgdm9pZCAoKnN1cHBseV9yZWdzZXQpIChzdHJ1Y3QgcmVnY2Fj aGUgKiwgaW50LCBjaGFyICopOworLQorLS8qIEdpdmVuIGEgcmVnaXN0ZXIgYW5kIHJlZ3NldCwg Y2FsY3VsYXRlIHRoZSBvZmZzZXQgaW50byB0aGUgcmVnc2V0CistICAgYW5kIHN0dWZmIGl0IGlu dG8gdGhlIGxhc3QgYXJndW1lbnQuICBJZiByZWdubyBpcyAtMSwgY2FsY3VsYXRlIHRoZQorLSAg IHNpemUgb2YgdGhlIGVudGlyZSByZWdzZXQuICBSZXR1cm5zIGxlbmd0aCBvZiBkYXRhLCAtMSBp ZiB1bmtub3duCistICAgcmVnc2V0LCAwIGlmIHVua25vd24gcmVnaXN0ZXIuICAqLworLSAgaW50 ICgqcmVnaXN0ZXJfYXJlYSkgKHN0cnVjdCBnZGJhcmNoICosIGludCwgaW50LCB1bnNpZ25lZCAq KTsKKy0KKy0vKiBCdWlsZCB0aGUgTmV1dHJpbm8gcmVnaXN0ZXIgc2V0IGluZm8gaW50byB0aGUg ZGF0YSBidWZmZXIuCistICAgUmV0dXJuIC0xIGlmIHVua25vd24gcmVnc2V0LCAwIG90aGVyd2lz ZS4gICovCistICBpbnQgKCpyZWdzZXRfZmlsbCkgKGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqLCBp bnQsIGNoYXIgKik7CistCistLyogR2l2ZXMgdGhlIGZldGNoX2xpbmtfbWFwX29mZnNldHMgZnVu Y3Rpb24gZXhwb3N1cmUgb3V0c2lkZSBvZgorLSAgIHNvbGliLXN2cjQuYyBzbyB0aGF0IHdlIGNh biBvdmVycmlkZSByZWxvY2F0ZV9zZWN0aW9uX2FkZHJlc3NlcygpLiAgKi8KKy0gIHN0cnVjdCBs aW5rX21hcF9vZmZzZXRzICooKmZldGNoX2xpbmtfbWFwX29mZnNldHMpICh2b2lkKTsKKy0KKy0v KiBVc2VkIGJ5IG50b19lbGZfb3NhYmlfc25pZmZlciB0byBkZXRlcm1pbmUgaWYgd2UncmUgY29u bmVjdGVkIHRvIGFuCistICAgTmV1dHJpbm8gdGFyZ2V0LiAgKi8KKy0gIGVudW0gZ2RiX29zYWJp ICgqaXNfbnRvX3RhcmdldCkgKGJmZCAqYWJmZCk7CistfTsKKy0KKy1leHRlcm4gc3RydWN0IG50 b190YXJnZXRfb3BzIGN1cnJlbnRfbnRvX3RhcmdldDsKKy0KKy0jZGVmaW5lIG50b19jcHVpbmZv X2ZsYWdzIChjdXJyZW50X250b190YXJnZXQuY3B1aW5mb19mbGFncykKKy0KKy0jZGVmaW5lIG50 b19jcHVpbmZvX3ZhbGlkIChjdXJyZW50X250b190YXJnZXQuY3B1aW5mb192YWxpZCkKKy0KKy0j ZGVmaW5lIG50b19yZWdzZXRfaWQgKGN1cnJlbnRfbnRvX3RhcmdldC5yZWdzZXRfaWQpCistCist I2RlZmluZSBudG9fc3VwcGx5X2dyZWdzZXQgKGN1cnJlbnRfbnRvX3RhcmdldC5zdXBwbHlfZ3Jl Z3NldCkKKy0KKy0jZGVmaW5lIG50b19zdXBwbHlfZnByZWdzZXQgKGN1cnJlbnRfbnRvX3Rhcmdl dC5zdXBwbHlfZnByZWdzZXQpCistCistI2RlZmluZSBudG9fc3VwcGx5X2FsdHJlZ3NldCAoY3Vy cmVudF9udG9fdGFyZ2V0LnN1cHBseV9hbHRyZWdzZXQpCistCistI2RlZmluZSBudG9fc3VwcGx5 X3JlZ3NldCAoY3VycmVudF9udG9fdGFyZ2V0LnN1cHBseV9yZWdzZXQpCistCistI2RlZmluZSBu dG9fcmVnaXN0ZXJfYXJlYSAoY3VycmVudF9udG9fdGFyZ2V0LnJlZ2lzdGVyX2FyZWEpCistCist I2RlZmluZSBudG9fcmVnc2V0X2ZpbGwgKGN1cnJlbnRfbnRvX3RhcmdldC5yZWdzZXRfZmlsbCkK Ky0KKy0jZGVmaW5lIG50b19mZXRjaF9saW5rX21hcF9vZmZzZXRzIFwKKy0oY3VycmVudF9udG9f dGFyZ2V0LmZldGNoX2xpbmtfbWFwX29mZnNldHMpCistCistI2RlZmluZSBudG9faXNfbnRvX3Rh cmdldCAoY3VycmVudF9udG9fdGFyZ2V0LmlzX250b190YXJnZXQpCistCistLyogS2VlcCB0aGlz IGNvbnNpc3RhbnQgd2l0aCBuZXV0cmlubyBzeXNwYWdlLmguICAqLworLWVudW0KKy17CistICBD UFVUWVBFX1g4NiwKKy0gIENQVVRZUEVfUFBDLAorLSAgQ1BVVFlQRV9NSVBTLAorLSAgQ1BVVFlQ RV9TUEFSRSwKKy0gIENQVVRZUEVfQVJNLAorLSAgQ1BVVFlQRV9TSCwKKy0gIENQVVRZUEVfVU5L Tk9XTgorLX07CistCistZW51bQorLXsKKy0gIE9TVFlQRV9RTlg0LAorLSAgT1NUWVBFX05UTwor LX07CistCistLyogVGhlc2UgY29ycmVzcG9uZCB0byB0aGUgRFNNU0dfKiB2ZXJzaW9ucyBpbiBk c21zZ3MuaC4gICovCistZW51bQorLXsKKy0gIE5UT19SRUdfR0VORVJBTCwKKy0gIE5UT19SRUdf RkxPQVQsCistICBOVE9fUkVHX1NZU1RFTSwKKy0gIE5UT19SRUdfQUxULAorLSAgTlRPX1JFR19F TkQKKy19OworLQorLXR5cGVkZWYgY2hhciBxbnhfcmVnNjRbOF07CistCistdHlwZWRlZiBzdHJ1 Y3QgX2RlYnVnX3JlZ3MKKy17CistICBxbnhfcmVnNjQgcGFkZGluZ1sxMDI0XTsKKy19IG50b19y ZWdzZXRfdDsKKy0KKy1zdHJ1Y3QgbnRvX3RocmVhZF9pbmZvIDogcHVibGljIHByaXZhdGVfdGhy ZWFkX2luZm8KKy17CistICBzaG9ydCB0aWQgPSAwOworLSAgdW5zaWduZWQgY2hhciBzdGF0ZSA9 IDA7CistICB1bnNpZ25lZCBjaGFyIGZsYWdzID0gMDsKKy0gIHN0ZDo6c3RyaW5nIG5hbWU7Cist fTsKKy0KKy1zdGF0aWMgaW5saW5lIG50b190aHJlYWRfaW5mbyAqCistZ2V0X250b190aHJlYWRf aW5mbyAodGhyZWFkX2luZm8gKnRocmVhZCkKKy17CistICByZXR1cm4gZ2RiOjpjaGVja2VkX3N0 YXRpY19jYXN0PG50b190aHJlYWRfaW5mbyAqPiAodGhyZWFkLT5wcml2LmdldCAoKSk7CistfQor LQorLS8qIFBlci1pbmZlcmlvciBkYXRhLCBjb21tb24gZm9yIGJvdGggcHJvY2ZzIGFuZCByZW1v dGUuICAqLworLXN0cnVjdCBudG9faW5mZXJpb3JfZGF0YQorLXsKKy0gIC8qIExhc3Qgc3RvcHBl ZCBmbGFncyByZXN1bHQgZnJvbSB3YWl0IGZ1bmN0aW9uICovCistICB1bnNpZ25lZCBpbnQgc3Rv cHBlZF9mbGFncyA9IDA7CistCistICAvKiBMYXN0IGtub3duIHN0b3BwZWQgUEMgKi8KKy0gIENP UkVfQUREUiBzdG9wcGVkX3BjID0gMDsKKy19OworLQorLS8qIEdlbmVyaWMgZnVuY3Rpb25zIGlu IG50by10ZGVwLmMuICAqLworLQorLXZvaWQgbnRvX2luaXRfc29saWJfYWJzb2x1dGVfcHJlZml4 ICh2b2lkKTsKKy0KKy1jaGFyICoqbnRvX3BhcnNlX3JlZGlyZWN0aW9uIChjaGFyICpzdGFydF9h cmd2W10sIGNvbnN0IGNoYXIgKippbiwKKy0JCQkgICAgICBjb25zdCBjaGFyICoqb3V0LCBjb25z dCBjaGFyICoqZXJyKTsKKy0KKy12b2lkIG50b19yZWxvY2F0ZV9zZWN0aW9uX2FkZHJlc3NlcyAo c29saWIgJiwgdGFyZ2V0X3NlY3Rpb24gKik7CistCistaW50IG50b19tYXBfYXJjaF90b19jcHV0 eXBlIChjb25zdCBjaGFyICopOworLQorLWludCBudG9fZmluZF9hbmRfb3Blbl9zb2xpYiAoY29u c3QgY2hhciAqLCB1bnNpZ25lZCwKKy0JCQkgICAgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNo YXI+ICopOworLQorLWVudW0gZ2RiX29zYWJpIG50b19lbGZfb3NhYmlfc25pZmZlciAoYmZkICph YmZkKTsKKy0KKy12b2lkIG50b19pbml0aWFsaXplX3NpZ25hbHMgKHZvaWQpOworLQorLS8qIER1 bW15IGZ1bmN0aW9uIGZvciBpbml0aWFsaXppbmcgbnRvX3RhcmdldF9vcHMgb24gdGFyZ2V0cyB3 aGljaCBkbworLSAgIG5vdCBkZWZpbmUgYSBwYXJ0aWN1bGFyIHJlZ3NldC4gICovCistdm9pZCBu dG9fZHVtbXlfc3VwcGx5X3JlZ3NldCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgY2hhciAq cmVncyk7CistCistaW50IG50b19pbl9keW5zeW1fcmVzb2x2ZV9jb2RlIChDT1JFX0FERFIgcGMp OworLQorLWNvbnN0IGNoYXIgKm50b19leHRyYV90aHJlYWRfaW5mbyAoc3RydWN0IHRhcmdldF9v cHMgKnNlbGYsIHN0cnVjdCB0aHJlYWRfaW5mbyAqKTsKKy0KKy1MT05HRVNUIG50b19yZWFkX2F1 eHZfZnJvbV9pbml0aWFsX3N0YWNrIChDT1JFX0FERFIgaW5pdGlhbF9zdGFjaywKKy0JCQkJCSAg Z2RiX2J5dGUgKnJlYWRidWYsCistCQkJCQkgIExPTkdFU1QgbGVuLCBzaXplX3Qgc2l6ZW9mX2F1 eHZfdCk7CistCistc3RydWN0IG50b19pbmZlcmlvcl9kYXRhICpudG9faW5mZXJpb3JfZGF0YSAo c3RydWN0IGluZmVyaW9yICppbmYpOworLQorLSNlbmRpZiAvKiBOVE9fVERFUF9IICovCitkaWZm IC0tZ2l0IGEvZ2RiL29zYWJpLmMgYi9nZGIvb3NhYmkuYworLS0tIGEvZ2RiL29zYWJpLmMKKysr KyBiL2dkYi9vc2FiaS5jCitAQCAtNzAsNyArNzAsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9z YWJpX25hbWVzIGdkYl9vc2FiaV9uYW1lc1tdID0KKyAgIHsgIk9wZW5CU0QiLCBOVUxMIH0sCisg ICB7ICJXaW5kb3dzQ0UiLCBOVUxMIH0sCisgICB7ICJESkdQUCIsIE5VTEwgfSwKKy0gIHsgIlFO WC1OZXV0cmlubyIsIE5VTEwgfSwKKyAgIHsgIkN5Z3dpbiIsIE5VTEwgfSwKKyAgIHsgIldpbmRv d3MiLCBOVUxMIH0sCisgICB7ICJBSVgiLCBOVUxMIH0sCitkaWZmIC0tZ2l0IGEvZ2RiL29zYWJp LmggYi9nZGIvb3NhYmkuaAorLS0tIGEvZ2RiL29zYWJpLmgKKysrKyBiL2dkYi9vc2FiaS5oCitA QCAtMzUsNyArMzUsNiBAQCBlbnVtIGdkYl9vc2FiaQorICAgR0RCX09TQUJJX09QRU5CU0QsCisg ICBHREJfT1NBQklfV0lOQ0UsCisgICBHREJfT1NBQklfR08zMiwKKy0gIEdEQl9PU0FCSV9RTlhO VE8sCisgICBHREJfT1NBQklfQ1lHV0lOLAorICAgR0RCX09TQUJJX1dJTkRPV1MsCisgICBHREJf T1NBQklfQUlYLAorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAgYi9nZGIv dGVzdHN1aXRlL2xpYi9nZGIuZXhwCistLS0gYS9nZGIvdGVzdHN1aXRlL2xpYi9nZGIuZXhwCisr KysgYi9nZGIvdGVzdHN1aXRlL2xpYi9nZGIuZXhwCitAQCAtODA3OSw3ICs4MDc5LDYgQEAgZ2Ri X2NhY2hpbmdfcHJvYyBnZGJfaGFzX2FyZ3YwIHt9IHsKKyAJICB8fCBbaXN0YXJnZXQgKi13aW5j ZS1wZV0gfHwgW2lzdGFyZ2V0ICotKi1taW5ndzMyY2UqXQorIAkgIHx8IFtpc3RhcmdldCAqLSot b3NmKl0KKyAJICB8fCBbaXN0YXJnZXQgKi0qLWRpY29zKl0KKy0JICB8fCBbaXN0YXJnZXQgKi0q LW50bypdCisgCSAgfHwgW2lzdGFyZ2V0ICotKi0qdm1zKl0KKyAJICB8fCBbaXN0YXJnZXQgKi0q LWx5bngqMTc4XSkgfSB7CisgCWZhaWwgImFyZ3ZcWzBcXSBzaG91bGQgYmUgYXZhaWxhYmxlIG9u IHRoaXMgdGFyZ2V0IgoKZGlmZiAtLWdpdCBhL2dkYi1yZW1vdmUtdXNlLW9mLXB5LWlzYXNjaWkg Yi9nZGItcmVtb3ZlLXVzZS1vZi1weS1pc2FzY2lpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAzNjdjNWIzLi4wMDAwMDAwCi0tLSBhL2dkYi1yZW1vdmUtdXNlLW9mLXB5LWlzYXNjaWkK KysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1Gcm9tIEZFRE9SQV9QQVRDSEVTIE1vbiBT ZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQW5kcmV3IEJ1cmdlc3MgPGFidXJnZXNzQHJlZGhh dC5jb20+Ci1EYXRlOiBUaHUsIDE2IE5vdiAyMDIzIDEwOjUzOjM0ICswMDAwCi1TdWJqZWN0OiBn ZGItcmVtb3ZlLXVzZS1vZi1weS1pc2FzY2lpCi0KLTs7IEJhY2twb3J0IHVwc3RyZWFtIGNvbW1p dCA3ZGI3OTViYzY3YS4KLQotZ2RiL3B5dGhvbjogcmVtb3ZlIHVzZSBvZiBzdHIuaXNhc2NpaSgp Ci0KLVRoaXMgY29tbWl0OgotCi0gIGNvbW1pdCA4ZjZjNDUyYjVhNGU1MGZiYjU1ZmYxZDEzMzI4 YjM5MmFkMWZkNDE2Ci0gIERhdGU6ICAgU3VuIE9jdCAxNSAyMjo0ODo0MiAyMDIzICswMTAwCi0K LSAgICAgIGdkYjogaW1wbGVtZW50IG1pc3NpbmcgZGVidWcgaGFuZGxlciBob29rIGZvciBQeXRo b24KLQotaW50cm9kdWNlZCBhIHVzZSBvZiBzdHIuaXNhc2NpaSgpLCB3aGljaCB3YXMgb25seSBh ZGRlZCBpbiBQeXRob24gMy43LgotCi1UaGlzIGNvbW1pdCBzd2l0Y2hlcyB0byB1c2UgY3Vyc2Vz LmFzY2lpLmlzYXNjaWkoKSwgYXMgdGhpcyB3YXMKLWF2YWlsYWJsZSBpbiAzLjYuCi0KLVRoZSBz YW1lIGlzIHRydWUgZm9yIHN0ci5pc2FsbnVtKCksIHdoaWNoIGlzIHJlcGxhY2VkIHdpdGgKLWN1 cnNlcy5hc2NpaS5pc2FsbnVtKCkuCi0KLVRoZXJlIHNob3VsZCBiZSBubyB1c2VyIHZpc2libGUg Y2hhbmdlcyBhZnRlciB0aGlzIGNvbW1pdC4KLQotZGlmZiAtLWdpdCBhL2dkYi9weXRob24vbGli L2dkYi9taXNzaW5nX2RlYnVnLnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL21pc3NpbmdfZGVidWcu cHkKLS0tLSBhL2dkYi9weXRob24vbGliL2dkYi9taXNzaW5nX2RlYnVnLnB5Ci0rKysgYi9nZGIv cHl0aG9uL2xpYi9nZGIvbWlzc2luZ19kZWJ1Zy5weQotQEAgLTIwLDYgKzIwLDcgQEAgTWlzc2lu Z0RlYnVnSGFuZGxlciBiYXNlIGNsYXNzLCBhbmQgcmVnaXN0ZXJfaGFuZGxlciBmdW5jdGlvbi4K LSBpbXBvcnQgc3lzCi0gCi0gaW1wb3J0IGdkYgotK2Zyb20gY3Vyc2VzLmFzY2lpIGltcG9ydCBp c2FzY2lpLCBpc2FsbnVtCi0gCi0gaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNyk6Ci0gICAg ICMgRnVuY3Rpb25zIHN0ci5pc2FzY2lpKCkgYW5kIHN0ci5pc2FsbnVtIGFyZSBhdmFpbGFibGUg c3RhcnRpbmcgUHl0aG9uCgpkaWZmIC0tZ2l0IGEvZ2RiLXJoYnoxMTU2MTkyLXJlY3Vyc2l2ZS1k bG9wZW4tdGVzdC5wYXRjaCBiL2dkYi1yaGJ6MTE1NjE5Mi1yZWN1cnNpdmUtZGxvcGVuLXRlc3Qu cGF0Y2gKaW5kZXggZTBhMjI3MC4uMmZmNThlZCAxMDA2NDQKLS0tIGEvZ2RiLXJoYnoxMTU2MTky LXJlY3Vyc2l2ZS1kbG9wZW4tdGVzdC5wYXRjaAorKysgYi9nZGItcmhiejExNTYxOTItcmVjdXJz aXZlLWRsb3Blbi10ZXN0LnBhdGNoCkBAIC0yMTEsNyArMjExLDcgQEAgZGlmZiAtLWdpdCBhL2dk Yi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ2RiLXJoYnoxMTU2MTkyLXJlY3Vyc2l2ZS1kbG9wZW4uZXhw IGIvZ2RiL3QKIG5ldyBmaWxlIG1vZGUgMTAwNjQ0CiAtLS0gL2Rldi9udWxsCiArKysgYi9nZGIv dGVzdHN1aXRlL2dkYi5iYXNlL2dkYi1yaGJ6MTE1NjE5Mi1yZWN1cnNpdmUtZGxvcGVuLmV4cAot QEAgLTAsMCArMSwxNTIgQEAKK0BAIC0wLDAgKzEsMTUxIEBACiArIyBDb3B5cmlnaHQgMjAxNCBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICsjCiArIyBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjY0 LDYgKzI2NCw5IEBAIG5ldyBmaWxlIG1vZGUgMTAwNjQ0CiArCiArc2V0IHN1cHBvcnRlZCAwCiAr Z2RiX3Rlc3RfbXVsdGlwbGUgInJ1biIgImluaXRpYWwgdHJpYWwgcnVuIiB7CisrICAgIC1yZSAi d2FybmluZzogQ29ycnVwdGVkIHNoYXJlZCBsaWJyYXJ5IGxpc3Q6IFxbXlxyXG5cXStcclxuIiB7 CisrCWV4cF9jb250aW51ZQorKyAgICB9CiArICAgIC1yZSAtd3JhcCAiZXhpdGVkIG5vcm1hbGx5 LioiIHsKICsJc2V0IHN1cHBvcnRlZCAxCiArCXBhc3MgJGdkYl90ZXN0X25hbWUKQEAgLTMzMywy OCArMzM2LDI0IEBAIG5ldyBmaWxlIG1vZGUgMTAwNjQ0CiArICAgIGZvcmVhY2ggbCAkc29saWJf ZXZlbnRfb3JkZXIgewogKyAgICAgIGluY3IgcGFzcwogKyAgICAgIHdpdGhfdGVzdF9wcmVmaXgg InBhc3MgIyRwYXNzIiB7Ci0rCXNldCBzaG91bGRfYmVfY29ycnVwdGVkIFtleHByIDArMFtsaW5k ZXggJGwgMl1dCi0rCWRvX3Rlc3QgW2xpbmRleCAkbCAwXSBbbGluZGV4ICRsIDFdCi0rCXNldCB0 ZXN0ICJjb250aW51ZSIKLSsJZ2xvYmFsIGdkYl9wcm9tcHQKLSsJZ2RiX3Rlc3RfbXVsdGlwbGUg JHRlc3QgJHRlc3QgewotKwkgIC1yZSAiXHJcbndhcm5pbmc6IENvcnJ1cHRlZCBzaGFyZWQgbGli cmFyeSBsaXN0Oi4qXHJcblN0b3BwZWQgZHVlIHRvIHNoYXJlZCBsaWJyYXJ5IGV2ZW50Lipcclxu JGdkYl9wcm9tcHQgJCIgewotKwkgICAgc2V0IGNvcnJ1cHRlZCAxCi0rCSAgICBwYXNzICR0ZXN0 Ci0rCSAgfQotKwkgIC1yZSAiXHJcblN0b3BwZWQgZHVlIHRvIHNoYXJlZCBsaWJyYXJ5IGV2ZW50 LipcclxuJGdkYl9wcm9tcHQgJCIgewotKwkgICAgc2V0IGNvcnJ1cHRlZCAwCi0rCSAgICBwYXNz ICR0ZXN0CisrCSAgc2V0IHNob3VsZF9iZV9jb3JydXB0ZWQgW2V4cHIgMCswW2xpbmRleCAkbCAy XV0KKysJICBkb190ZXN0IFtsaW5kZXggJGwgMF0gW2xpbmRleCAkbCAxXQorKworKwkgIHNldCBj b3JydXB0ZWQgMAorKwkgIGdkYl90ZXN0X211bHRpcGxlICJjb250aW51ZSIgIiIgeworKwkgICAg ICAtcmUgIlxyXG53YXJuaW5nOiBDb3JydXB0ZWQgc2hhcmVkIGxpYnJhcnkgbGlzdDpcW15cclxu XF0rKD89XHJcbikiIHsKKysJCSAgc2V0IGNvcnJ1cHRlZCAxCisrCSAgICAgIH0KKysJICAgICAg LXJlIC13cmFwICJcclxuU3RvcHBlZCBkdWUgdG8gc2hhcmVkIGxpYnJhcnkgZXZlbnQuKiIgewor KwkJICBwYXNzICRnZGJfdGVzdF9uYW1lCisrCSAgICAgIH0KICsJICB9Ci0rCX0KLSsJc2V0IHRl c3QgImNvcnJ1cHRlZD0kY29ycnVwdGVkIGJ1dCBzaG91bGRfYmVfY29ycnVwdGVkPSRzaG91bGRf YmVfY29ycnVwdGVkIgotKwlpZiB7JGNvcnJ1cHRlZCA9PSAkc2hvdWxkX2JlX2NvcnJ1cHRlZH0g ewotKwkgIHBhc3MgJHRlc3QKLSsJfSBlbHNlIHsKLSsJICBmYWlsICR0ZXN0Ci0rCX0KKysKKysJ ICBnZGJfYXNzZXJ0IHskY29ycnVwdGVkID09ICRzaG91bGRfYmVfY29ycnVwdGVkfSBcCisrCSAg ICAgICJjb3JydXB0ZWQ9JGNvcnJ1cHRlZCBidXQgc2hvdWxkX2JlX2NvcnJ1cHRlZD0kc2hvdWxk X2JlX2NvcnJ1cHRlZCIKICsgICAgICB9CiArICAgIH0KKysKICsgICAgIyBJbiB0aGUgbGFzdCBw YXNzIHdlIGRvIG5vdCBleHBlY3QgdG8gc2VlIGxpYmZvbyBvciBsaWJiYXIuCiArICAgIGluY3Ig cGFzcwogKyAgICB3aXRoX3Rlc3RfcHJlZml4ICJwYXNzICMkcGFzcyIgewoKZGlmZiAtLWdpdCBh L2dkYi5zcGVjIGIvZ2RiLnNwZWMKaW5kZXggM2JiYzg3Zi4uNjVmOTUwZSAxMDA2NDQKLS0tIGEv Z2RiLnNwZWMKKysrIGIvZ2RiLnNwZWMKQEAgLTQ1LDcgKzQ1LDcgQEAgVmVyc2lvbjogMTUuMgog CiAjIFRoZSByZWxlYXNlIGFsd2F5cyBjb250YWlucyBhIGxlYWRpbmcgcmVzZXJ2ZWQgbnVtYmVy LCBzdGFydCBpdCBhdCAxLgogIyBgdXBzdHJlYW0nIGlzIG5vdCBhIHBhcnQgb2YgYG5hbWUnIHRv IHN0YXkgZnVsbHkgcnBtIGRlcGVuZGVuY2llcyBjb21wYXRpYmxlIGZvciB0aGUgdGVzdGluZy4K LVJlbGVhc2U6IDMlez9kaXN0fQorUmVsZWFzZTogNCV7P2Rpc3R9CiAKIExpY2Vuc2U6IEdQTC0z LjAtb3ItbGF0ZXIgQU5EIEJTRC0zLUNsYXVzZSBBTkQgRlNGQVAgQU5EIExHUEwtMi4xLW9yLWxh dGVyIEFORCBHUEwtMi4wLW9yLWxhdGVyIEFORCBMR1BMLTIuMC1vci1sYXRlciBBTkQgTGljZW5z ZVJlZi1GZWRvcmEtUHVibGljLURvbWFpbiBBTkQgR0ZETC0xLjMtb3ItbGF0ZXIgQU5EIExHUEwt Mi4wLW9yLWxhdGVyIFdJVEggR0NDLWV4Y2VwdGlvbi0yLjAgQU5EIEdQTC0zLjAtb3ItbGF0ZXIg V0lUSCBHQ0MtZXhjZXB0aW9uLTMuMSBBTkQgR1BMLTIuMC1vci1sYXRlciBXSVRIIEdOVS1jb21w aWxlci1leGNlcHRpb24KICMgRG8gbm90IHByb3ZpZGUgVVJMIGZvciBzbmFwc2hvdHMgYXMgdGhl IGZpbGUgbGFzdHMgdGhlcmUgb25seSBmb3IgMiBkYXlzLgpAQCAtOTI4LDYgKzkyOCwyNiBAQCBm aQogIyBlbmRpZiBzY2wKIAogJWNoYW5nZWxvZworKiBUdWUgRGVjIDEwIDIwMjQgQW5kcmV3IEJ1 cmdlc3MgPGFidXJnZXNzQHJlZGhhdC5jb20+CistIFJlbW92ZQorICBnZGItNi42LWJ1aWxkaWQt bG9jYXRlLW1pc2xlYWRpbmctd2FybmluZy1taXNzaW5nLWRlYnVnaW5mby1yaGJ6OTgxMTU0LnBh dGNoLAorICBnZGItNi42LWJ1aWxkaWQtbG9jYXRlLnBhdGNoLAorICBnZGItNi42LWJ1aWxkaWQt bG9jYXRlLXNvbGliLW1pc3NpbmctaWRzLnBhdGNoLCBhbmQKKyAgZ2RiLXJlbW92ZS11c2Utb2Yt cHktaXNhc2NpaS4gIEFkZCBuZXcgcGF0Y2hlcworICBnZGItYWRkLWRlcHJlY2F0ZWQtc2V0dGlu Z3MtcHktc2NyaXB0LnBhdGNoLAorICBnZGItYmFja3BvcnQtYnVpbGRpZC1yZWxhdGVkLWNoYW5n ZXMucGF0Y2gsCisgIGdkYi1yZW1vdmUtcW54LW5ldXRyaW5vLXN1cHBvcnQucGF0Y2gsIGFuZAor ICBnZGItNi42LWJ1aWxkaWQtbG9jYXRlLXRlc3RzLnBhdGNoLiAgVXBkYXRlCisgIGdkYi1hZGQt cnBtLXN1Z2dlc3Rpb24tc2NyaXB0LnBhdGNoIGFuZAorICBnZGItcmhiejExNTYxOTItcmVjdXJz aXZlLWRsb3Blbi10ZXN0LnBhdGNoLiAgQWxsIG9mIHRoZSBSUE0KKyAgc3VnZ2VzdGlvbiBmZWF0 dXJlIGlzIG5vdyBwcm92aWRlZCB2aWEgYSBQeXRob24gZXh0ZW5zaW9uLiAgSQorICBiZWxpZXZl IHRoYXQgdGhlIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlIGNvdmVyZWQgYnkgdGhl IG5ldworICBpbXBsZW1lbnRhdGlvbiwgYnV0IHdpdGggbm8gcmVhbCB0ZXN0cyBmb3IgdGhlIGV4 aXN0aW5nIGNvZGUsIHdlCisgIGNhbm5vdCBiZSBjZXJ0YWluLiAgVGhlcmUgYXJlIG5ldyBHREIg Y29tbWFuZHMgYWRkZWQgYXMgcGFydCBvZiB0aGlzCisgIGNoYW5nZSByZWxhdGVkIHRvIGNvbnRy b2xsaW5nIHRoZSBSUE0gc3VnZ2VzdGlvbiBmZWF0dXJlLiAgVGhlc2UgYXJlCisgIGRvY3VtZW50 ZWQgd2l0aGluIHRoZSBnZGItYWRkLXJwbS1zdWdnZXN0aW9uLXNjcmlwdC5wYXRjaCBwYXRjaCBi eQorICBjaGFuZ2VzIHRvIHRoZSBHREIgbWFudWFsLgorCiAqIFRodSBOb3YgMTQgMjAyNCBLZXZp biBCdWV0dG5lciA8a2V2aW5iQHJlZGhhdC5jb20+CiAtIFJlbW92ZSBnZGItNi41LWJ6MjQzODQ1 LXN0YWxlLXRlc3Rpbmctem9tYmllLXRlc3QucGF0Y2guICBUaGlzIHdhcyBhCiAgIHRlc3QgZm9y IGEgZml4IHRvIGEgZnVuY3Rpb24gdGhhdCB3YXMgbmFtZWQgbGludXhfdGVzdF9mb3JfdHJhY2Vm b3JrLAo=