From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.115; helo=mga14.intel.com; envelope-from=jian.j.wang@intel.com; receiver=edk2-devel@lists.01.org Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id A1D2721962301 for ; Mon, 22 Oct 2018 18:25:04 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Oct 2018 18:25:03 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,414,1534834800"; d="scan'208";a="84756666" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga006.jf.intel.com with ESMTP; 22 Oct 2018 18:25:03 -0700 Received: from FMSMSX110.amr.corp.intel.com (10.18.116.10) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 22 Oct 2018 18:25:02 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx110.amr.corp.intel.com (10.18.116.10) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 22 Oct 2018 18:25:02 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.224]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.46]) with mapi id 14.03.0319.002; Tue, 23 Oct 2018 09:24:59 +0800 From: "Wang, Jian J" To: "Zeng, Star" , "edk2-devel@lists.01.org" CC: "Kinney, Michael D" , "Ni, Ruiyu" , "Yao, Jiewen" , Laszlo Ersek Thread-Topic: [edk2] [PATCH 3/3] MdeModulePkg/Core: add use-after-free memory detection Thread-Index: AQHUZ04yDM8+MiGRvEexlNQFNV1LQKUqEAGAgAC2bHD//6XjAIABoN0w Date: Tue, 23 Oct 2018 01:24:59 +0000 Message-ID: References: <20181019015013.7488-1-jian.j.wang@intel.com> <20181019015013.7488-4-jian.j.wang@intel.com> <7f42fbf3-1cd8-6ce9-1257-731cab01a07c@intel.com> In-Reply-To: <7f42fbf3-1cd8-6ce9-1257-731cab01a07c@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZTQyYmM5MjItOTFjMC00OWYxLTkxNGUtOTEzYTc4NDgxZTA5IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiXC9YeWlQS1lpWlRBTEdTUUtpV3ZhYVkrVjJnc3E1YkZiQnpzZXppdkpJdjA2VVU0UFwvNFZQYmQwZ3BPTGRhUWtsIn0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 3/3] MdeModulePkg/Core: add use-after-free memory detection X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Oct 2018 01:25:05 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 U3RhciwNCg0KUmVnYXJkcywNCkppYW4NCg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t DQo+IEZyb206IFplbmcsIFN0YXINCj4gU2VudDogTW9uZGF5LCBPY3RvYmVyIDIyLCAyMDE4IDQ6 MjQgUE0NCj4gVG86IFdhbmcsIEppYW4gSiA8amlhbi5qLndhbmdAaW50ZWwuY29tPjsgZWRrMi1k ZXZlbEBsaXN0cy4wMS5vcmcNCj4gQ2M6IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lu bmV5QGludGVsLmNvbT47IE5pLCBSdWl5dQ0KPiA8cnVpeXUubmlAaW50ZWwuY29tPjsgWWFvLCBK aWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsgTGFzemxvIEVyc2VrDQo+IDxsZXJzZWtAcmVk aGF0LmNvbT47IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJl OiBbZWRrMl0gW1BBVENIIDMvM10gTWRlTW9kdWxlUGtnL0NvcmU6IGFkZCB1c2UtYWZ0ZXItZnJl ZQ0KPiBtZW1vcnkgZGV0ZWN0aW9uDQo+IA0KPiBPbiAyMDE4LzEwLzIyIDE1OjEyLCBXYW5nLCBK aWFuIEogd3JvdGU6DQo+ID4gU3RhciwNCj4gPg0KPiA+IFRoYW5rcyBmb3IgdGhlIGNvbW1lbnQu IFBsZWFzZSBzZWUgbXkgb3BpbmlvbnMgYmVsb3cuDQo+ID4NCj4gPiBSZWdhcmRzLA0KPiA+IEpp YW4NCj4gPg0KPiA+DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+IEZyb206 IFplbmcsIFN0YXINCj4gPj4gU2VudDogTW9uZGF5LCBPY3RvYmVyIDIyLCAyMDE4IDEwOjUzIEFN DQo+ID4+IFRvOiBXYW5nLCBKaWFuIEogPGppYW4uai53YW5nQGludGVsLmNvbT47IGVkazItZGV2 ZWxAbGlzdHMuMDEub3JnDQo+ID4+IENjOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtp bm5leUBpbnRlbC5jb20+OyBOaSwgUnVpeXUNCj4gPj4gPHJ1aXl1Lm5pQGludGVsLmNvbT47IFlh bywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IExhc3psbyBFcnNlaw0KPiA+PiA8bGVy c2VrQHJlZGhhdC5jb20+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPg0KPiA+PiBT dWJqZWN0OiBSZTogW2VkazJdIFtQQVRDSCAzLzNdIE1kZU1vZHVsZVBrZy9Db3JlOiBhZGQgdXNl LWFmdGVyLWZyZWUNCj4gPj4gbWVtb3J5IGRldGVjdGlvbg0KPiA+Pg0KPiA+PiBPbiAyMDE4LzEw LzE5IDk6NTAsIEppYW4gSiBXYW5nIHdyb3RlOg0KPiA+Pj4gVUFGIChVc2UtQWZ0ZXItRnJlZSkg bWVtb3J5IGRldGVjdGlvbiBpcyBuZXcgZmVhdHVyZSBpbnRyb2R1Y2VkIHRvDQo+ID4+PiBkZXRl Y3QgaWxsZWdhbCBhY2Nlc3MgdG8gbWVtb3J5IHdoaWNoIGhhcyBiZWVuIGZyZWVkLiBUaGUgcHJp bmNpcGxlDQo+ID4+PiBiZWhpbmQgaXMgc2ltaWxhciB0byBoZWFwIGd1YXJkIGZlYXR1cmUsIHRo YXQgaXMgdGhlIGNvcmUgdHVybiBhbGwgcG9vbA0KPiA+Pj4gbWVtb3J5IGFsbG9jYXRpb24gdG8g cGFnZSBhbGxvY2F0aW9uIGFuZCBtYXJrIHRoZW0gdG8gYmUgbm90LXByZXNlbnQNCj4gPj4+IG9u Y2UgdGhleSBhcmUgZnJlZWQuDQo+ID4+Pg0KPiA+Pj4gVGhpcyBhbHNvIGltcGxpZXMgdGhhdCwg b25jZSBhIHBhZ2UgaXMgYWxsb2NhdGVkIGFuZCBmcmVlZCwgaXQgY2Fubm90DQo+ID4+PiBiZSBy ZS1hbGxvY2F0ZWQuIFRoaXMgd2lsbCBicmluZyBhbm90aGVyIGlzc3VlLCB3aGljaCBpcyB0aGF0 IHRoZXJlJ3MNCj4gPj4+IHJpc2sgdGhhdCBtZW1vcnkgc3BhY2Ugd2lsbCBiZSB1c2VkIG91dC4g VG8gYWRkcmVzcyBpdCwgdGhlIG1lbW9yeQ0KPiA+Pj4gc2VydmljZSBhZGQgbG9naWMgdG8gcHV0 IHBhcnQgKGF0IG1vc3QgNjQgcGFnZXMgYSB0aW1lKSBvZiBmcmVlZCBwYWdlcw0KPiA+Pj4gYmFj ayBpbnRvIHBhZ2UgcG9vbCwgc28gdGhhdCB0aGUgbWVtb3J5IHNlcnZpY2UgY2FuIHN0aWxsIGhh dmUgbWVtb3J5DQo+ID4+PiB0byBhbGxvY2F0ZSwgd2hlbiBhbGwgbWVtb3J5IHNwYWNlIGhhdmUg YmVlbiBhbGxvY2F0ZWQgb25jZS4gVGhpcyBpcw0KPiA+Pj4gY2FsbGVkIG1lbW9yeSBwcm9tb3Rp b24uIFRoZSBwcm9tb3RlZCBwYWdlcyBhcmUgYWx3YXlzIGZyb20gdGhlIGVsZGVzdA0KPiA+Pj4g cGFnZXMgd2hpY2ggaGF2ZW4gYmVlbiBmcmVlZC4NCj4gPj4+DQo+ID4+PiBUbyB1c2UgdGhpcyBm ZWF0dXJlLCBvbmUgY2FuIHNpbXBseSBzZXQgZm9sbG93aW5nIFBDRCB0byAxDQo+ID4+Pg0KPiA+ PiBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVXNlQWZ0ZXJGcmVlRGV0ZWN0aW9u UHJvcGVydHlNYXNrDQo+ID4+Pg0KPiA+Pj4gUGxlYXNlIG5vdGUgdGhpcyBmZWF0dXJlIGNhbm5v dCBiZSB1c2VkIHdpdGggaGVhcCBndWFyZCBmZWF0dXJlIGNvbnRyb2xsZWQNCj4gPj4+IGJ5IFBD RCBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkSGVhcEd1YXJkUHJvcGVydHlNYXNr Lg0KPiA+Pj4NCj4gPj4+IENjOiBTdGFyIFplbmcgPHN0YXIuemVuZ0BpbnRlbC5jb20+DQo+ID4+ PiBDYzogTWljaGFlbCBEIEtpbm5leSA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+ID4+ PiBDYzogSmlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+ID4+PiBDYzogUnVpeXUg TmkgPHJ1aXl1Lm5pQGludGVsLmNvbT4NCj4gPj4+IENjOiBMYXN6bG8gRXJzZWsgPGxlcnNla0By ZWRoYXQuY29tPg0KPiA+Pj4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRp b24gQWdyZWVtZW50IDEuMQ0KPiA+Pj4gU2lnbmVkLW9mZi1ieTogSmlhbiBKIFdhbmcgPGppYW4u ai53YW5nQGludGVsLmNvbT4NCj4gPj4NCj4gPj4gSSBkaWQgbm90IHJldmlldyB0aGUgd2hvbGUg cGF0Y2ggdGhvcm91Z2hseS4gQnV0IEkgc3VnZ2VzdCB0aGF0IHB1dHRpbmcNCj4gPj4gdGhlIGNv ZGUgZm9yIFVBRiBpbiBhIHNlcGFyYXRlZCBmaWxlIGlmIGl0IGlzIGZlYXNpYmxlLiBJIGFtIGF3 YXJlIHRoYXQNCj4gPj4gVUFGIHdpbGwgYmUgc2hhcmluZyBtdWNoIGNvZGUgd2l0aCBIZWFwR3Vh cmQsIHNvIGNvdWxkIHdlIGhhdmUgVWFmLmMsDQo+ID4+IEhlYXBHdWFyZC5jIGFuZCBHdWFyZFBh Z2UuYyAodGhpcyBmaWxlIG5hbWUgaXMganVzdCBmb3IgZXhhbXBsZSk/DQo+ID4+DQo+ID4NCj4g PiBJIHRoaW5rIHdlIGNhbiB0YWtlIHRoZSBVQUYgYXMgYSBzcGVjaWFsIGtpbmQgb2YgaGVhcCBn dWFyZDogZ3VhcmRpbmcgdGhlDQo+ID4gZnJlZWQgaGVhcCBtZW1vcnkgaW5zdGVhZCBvZiBndWFy ZGluZyB0aGUgYWxsb2NhdGVkIGhlYXAgbWVtb3J5LiBTbw0KPiA+IFVBRiBpcyBhIGNvbXBsZW1l bnQgb2YgSGVhcCBHdWFyZCBvciBwYXJ0IG9mIEhlYXAgR3VhcmQuIEZyb20gdGhpcw0KPiA+IHBl cnNwZWN0aXZlLCBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gcHV0IGl0IGluIHNlcGFyYXRlIGZpbGUu DQo+IA0KPiBWZXJ5IGdvb2QgcG9pbnQuIEZyb20gdGhpcyBwZXJzcGVjdGl2ZSwgSSBhZ3JlZS4N Cj4gVGhlbiBJIHdvdWxkIGxpa2UgdG8gc3VnZ2VzdCBub3QgaW50cm9kdWNpbmcgYSBuZXcgUENE DQo+IFBjZFVzZUFmdGVyRnJlZURldGVjdGlvblByb3BlcnR5TWFzaywgYnV0IHVzZSBvbmUgQklU IG9mDQo+IFBjZEhlYXBHdWFyZFByb3BlcnR5TWFzayBmb3IgaXQgc2luY2Ugd2UgdGhpbmsgaXQg aXMgcGFydCBvZiBIZWFwIEd1YXJkLg0KPiBUaGUgYmVuZWZpdHMgYXJlDQo+IDEuIE5vIGNvbmZ1 c2lvbiBiZXR3ZWVuIEhlYXAgR3VhcmQgYW5kIFVzZSBBZnRlciBGcmVlLg0KPiAyLiBObyBuZWVk IGludHJvZHVjZSBuZXcgUENELg0KPiAzLiBDYW4gcmV1c2UgQklUNiAtIEVuYWJsZSBub24tc3Rv cCBtb2RlLg0KPiA0LiBObyBuZWVkIHVwZGF0ZSBEeGVJcGxQZWltIHRvIGVuYWJsZSBJQTMyIFBB RSBwYWdpbmcuDQo+IA0KDQpHb29kIGlkZWEuIEknbGwgdHJ5IGl0LiBUaGFua3MuDQoNCj4gPg0K PiA+Pj4gLS0tDQo+ID4+PiAgICBNZGVNb2R1bGVQa2cvQ29yZS9EeGUvRHhlTWFpbi5oICAgICAg ICAgICAgICB8ICAgMSArDQo+ID4+PiAgICBNZGVNb2R1bGVQa2cvQ29yZS9EeGUvRHhlTWFpbi5p bmYgICAgICAgICAgICB8ICAgMSArDQo+ID4+PiAgICBNZGVNb2R1bGVQa2cvQ29yZS9EeGUvR2Nk L0djZC5jICAgICAgICAgICAgICB8ICAgOCArDQo+ID4+PiAgICBNZGVNb2R1bGVQa2cvQ29yZS9E eGUvTWVtL0hlYXBHdWFyZC5jICAgICAgICB8IDM5Mw0KPiA+PiArKysrKysrKysrKysrKysrKysr KysrKysrKy0NCj4gPj4+ICAgIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vSGVhcEd1YXJkLmgg ICAgICAgIHwgIDY2ICsrKysrDQo+ID4+PiAgICBNZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL1Bh Z2UuYyAgICAgICAgICAgICB8ICAzOSArKy0NCj4gPj4+ICAgIE1kZU1vZHVsZVBrZy9Db3JlL0R4 ZS9NZW0vUG9vbC5jICAgICAgICAgICAgIHwgIDIxICstDQo+ID4+PiAgICBNZGVNb2R1bGVQa2cv Q29yZS9EeGUvTWlzYy9Qcm9wZXJ0aWVzVGFibGUuYyB8ICAxNiArLQ0KPiA+Pj4gICAgOCBmaWxl cyBjaGFuZ2VkLCA1MTkgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pDQo+ID4+Pg0KPiA+ Pj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9EeGVNYWluLmgNCj4gPj4gYi9N ZGVNb2R1bGVQa2cvQ29yZS9EeGUvRHhlTWFpbi5oDQo+ID4+PiBpbmRleCAyZGVjOWRhNWUzLi5h ZTc1Y2M1YjI1IDEwMDY0NA0KPiA+Pj4gLS0tIGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0R4ZU1h aW4uaA0KPiA+Pj4gKysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0R4ZU1haW4uaA0KPiA+Pj4g QEAgLTkyLDYgKzkyLDcgQEAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBP Rg0KPiBBTlkNCj4gPj4gS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gPj4+ICAg ICNpbmNsdWRlIDxMaWJyYXJ5L0R4ZVNlcnZpY2VzTGliLmg+DQo+ID4+PiAgICAjaW5jbHVkZSA8 TGlicmFyeS9EZWJ1Z0FnZW50TGliLmg+DQo+ID4+PiAgICAjaW5jbHVkZSA8TGlicmFyeS9DcHVF eGNlcHRpb25IYW5kbGVyTGliLmg+DQo+ID4+PiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdQcmlu dEVycm9yTGV2ZWxMaWIuaD4NCj4gPj4+DQo+ID4+Pg0KPiA+Pj4gICAgLy8NCj4gPj4+IGRpZmYg LS1naXQgYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvRHhlTWFpbi5pbmYNCj4gPj4gYi9NZGVNb2R1 bGVQa2cvQ29yZS9EeGUvRHhlTWFpbi5pbmYNCj4gPj4+IGluZGV4IDEwMzc1NDQzYzAuLmQ5MTI1 OGMwODcgMTAwNjQ0DQo+ID4+PiAtLS0gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvRHhlTWFpbi5p bmYNCj4gPj4+ICsrKyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9EeGVNYWluLmluZg0KPiA+Pj4g QEAgLTE5OCw2ICsxOTgsNyBAQA0KPiA+Pj4gICAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFj ZUd1aWQuUGNkSGVhcEd1YXJkUG9vbFR5cGUNCj4gIyMNCj4gPj4gQ09OU1VNRVMNCj4gPj4+ICAg ICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEhlYXBHdWFyZFByb3BlcnR5TWFz aw0KPiA+PiAjIyBDT05TVU1FUw0KPiA+Pj4gICAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFj ZUd1aWQuUGNkQ3B1U3RhY2tHdWFyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICMjDQo+ID4+ IENPTlNVTUVTDQo+ID4+PiArDQo+ID4+IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5Q Y2RVc2VBZnRlckZyZWVEZXRlY3Rpb25Qcm9wZXJ0eU1hc2sNCj4gPj4gIyMgQ09OU1VNRVMNCj4g Pj4+DQo+ID4+PiAgICAjIFtIb2JdDQo+ID4+PiAgICAjIFJFU09VUkNFX0RFU0NSSVBUT1IgICAj IyBDT05TVU1FUw0KPiA+Pj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9HY2Qv R2NkLmMNCj4gPj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvR2NkL0djZC5jDQo+ID4+PiBpbmRl eCBkOWM2NWE4MDQ1Li5lNDNlYzc0MDEwIDEwMDY0NA0KPiA+Pj4gLS0tIGEvTWRlTW9kdWxlUGtn L0NvcmUvRHhlL0djZC9HY2QuYw0KPiA+Pj4gKysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0dj ZC9HY2QuYw0KPiA+Pj4gQEAgLTE2MCw2ICsxNjAsMTAgQEAgQ29yZUR1bXBHY2RNZW1vcnlTcGFj ZU1hcCAoDQo+ID4+PiAgICAgICAgRUZJX0dDRF9NRU1PUllfU1BBQ0VfREVTQ1JJUFRPUiAgKk1l bW9yeVNwYWNlTWFwOw0KPiA+Pj4gICAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEluZGV4Ow0KPiA+Pj4NCj4gPj4+ICsgICAgaWYgKChHZXREZWJ1Z1ByaW50RXJyb3JMZXZl bCAoKSAmIERFQlVHX0dDRCkgPT0gMCkgew0KPiA+Pj4gKyAgICAgIHJldHVybjsNCj4gPj4+ICsg ICAgfQ0KPiA+Pg0KPiA+PiBJIGFtIGF3YXJlIHRoZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIHRv IG9wdGltaXplIHNvbWUgY29kZSB3aGVuDQo+ID4+IERFQlVHX0dDRCBpcyBub3Qgc2V0Lg0KPiA+ PiBCdXQgSSBkbyBub3Qgc3VnZ2VzdCB3ZSBuZXdseSBpbnRyb2R1Y2UgdGhlIGRlcGVuZGVuY3kg dG8NCj4gPj4gRGVidWdQcmludEVycm9yTGV2ZWxMaWIsIEkgdGhpbmsgdGhpcyBjaGVjayBzaG91 bGQgYmUgaGlkZGVuIGluIHRoZQ0KPiA+PiBpbnN0YW5jZSBvZiBEZWJ1Z0xpYi4gTWF5YmUgYSBu ZXcgbWFjcm8gREVCVUdfQ09ERV9FUlJPUl9MRVZFTA0KPiAodGhpcw0KPiA+PiBtYWNybyBuYW1l IGlzIGp1c3QgZm9yIGV4YW1wbGUpIGNhbiBiZSBpbnRyb2R1Y2VkIGlmIHdlIHJlYWxseSB3YW50 IHRvDQo+ID4+IGRvIHRoYXQuDQo+ID4+DQo+ID4NCj4gPiBUaGVyZSdyZSB0d28gcHVycG9zZSBo ZXJlLCBvbmUgaXMgZm9yIG9wdGltaXphdGlvbiBidXQgYW5vdGhlciBpcyB0byBmaXggYSB0cnVl DQo+ID4gaXNzdWUgaGVyZTogR0NEIG1lbW9yeSBsb2NrIHJlZW50cmFuY2UgKHNlZSBiZWxvdyBm b3IgZGV0YWlscykNCj4gPg0KPiA+ICAgICBDb3JlRHVtcEdjZE1lbW9yeVNwYWNlTWFwKCkNCj4g PiA9PiBDb3JlR2V0TWVtb3J5U3BhY2VNYXAoKQ0KPiA+ID0+IENvcmVBY3F1aXJlR2NkTWVtb3J5 TG9jayAoKSAqDQo+ID4gICAgIEFsbG9jYXRlUG9vbCgpDQo+ID4gPT4gSW50ZXJuYWxBbGxvY2F0 ZVBvb2woKQ0KPiA+ID0+IENvcmVBbGxvY2F0ZVBvb2woKQ0KPiA+ID0+IENvcmVBbGxvY2F0ZVBv b2xJKCkNCj4gPiA9PiBDb3JlQWxsb2NhdGVQb29sUGFnZXNJKCkNCj4gPiA9PiBDb3JlQWxsb2Nh dGVQb29sUGFnZXMoKQ0KPiA+ID0+IEZpbmRGcmVlUGFnZXMoKQ0KPiA+ID0+IFByb21vdGVNZW1v cnlSZXNvdXJjZSgpDQo+ID4gPT4gQ29yZUFjcXVpcmVHY2RNZW1vcnlMb2NrKCkgKioNCj4gPg0K PiA+IElmIEdldERlYnVnUHJpbnRFcnJvckxldmVsKCkgaXMgbm90IHJlY29tbWVuZGVkLCBtYXli ZSB3ZSBuZWVkIHRvIGZpeA0KPiBhYm92ZSBpc3N1ZQ0KPiA+IGluIGEgZGlmZmVyZW50IHdheS4g Rm9yIGV4YW1wbGUsIGNoYW5nZSBDb3JlR2V0TWVtb3J5U3BhY2VNYXAoKSB0byBhdm9pZA0KPiBs b2NrDQo+ID4gY29uZmxpY3QsIGlmIHBvc3NpYmxlLiBJbiBhZGRpdGlvbiwgd2UgY291bGQgc2V0 IFBjZEZpeGVkRGVidWdQcmludEVycm9yTGV2ZWwgdG8NCj4gY29udHJvbA0KPiA+IHRoZSBERUJV R19HQ0QgcHJpbnQuDQo+IA0KPiBHb3QgaXQsIHRoYW5rcy4NCj4gSSBzdGlsbCBub3Qgc3VnZ2Vz dCB1c2luZyBHZXREZWJ1Z1ByaW50RXJyb3JMZXZlbCB3aXRoIG5ldw0KPiBEZWJ1Z1ByaW50RXJy b3JMZXZlbExpYiBkZXBlbmRlbmN5Lg0KPiBTZWVtaW5nbHksIHRoZSBwcm9ibGVtIGV2ZW4gY291 bGQgbm90IGJlIHJlc29sdmVkIHRob3JvdWdobHkgYmVjYXVzZSBpdA0KPiBtYXkgc3RpbGwgaGFw cGVuIHdoZW4gREVCVUdfR0NEIGlzIHNldCwgcmlnaHQ/DQo+IA0KPiBBIHBvc3NpYmxlIHNvbHV0 aW9uIGlzIGFkZGluZyBDb3JlQWNxdWlyZUdjZE1lbW9yeUxvY2tPckZhaWwsIHVwZGF0aW5nDQo+ IFByb21vdGVNZW1vcnlSZXNvdXJjZSB0byB1c2UgQ29yZUFjcXVpcmVHY2RNZW1vcnlMb2NrT3JG YWlsLCBhbmQNCj4gdXBkYXRpbmcgdGhlIEFTU0VSVCBpbiBDb3JlRHVtcEdjZE1lbW9yeVNwYWNl TWFwIHdpdGggZXJyb3IgY2hlY2suDQo+IE1heWJlIHRoZXJlIGlzIG90aGVyIGdvb2QgaWRlYS4N Cj4gDQoNClRoZSBhY3R1YWwgaXNzdWUgaXMgdGhhdCwgSW4gdGhlIGNvZGUgb2YgQ29yZUdldE1l bW9yeVNwYWNlTWFwKCksIEFsbG9jYXRlUG9vbCgpDQppcyBpbnNpZGUgdGhlIEdDRCBsb2NrIHNj b3BlLiBNYXliZSB3ZSBjb3VsZCBtb3ZlIGl0IG91dCBvZiB0aGUgbG9jay4gRG8geW91DQprbm93 IGlmIEFsbG9jYXRlUG9vbCB3aWxsIGNoYW5nZSBHQ0QgbWVtb3J5IG1hcD8gSSBjYW4ndCBzZWUg aXQgZnJvbSBjb2RlLg0KQnV0IG1heWJlIEkgbWlzcyBzb21ldGhpbmcuDQoNCiAgQ29yZUFjcXVp cmVHY2RNZW1vcnlMb2NrICgpOw0KICAuLi4NCiAgLi4uDQogICpNZW1vcnlTcGFjZU1hcCA9IEFs bG9jYXRlUG9vbCAoKk51bWJlck9mRGVzY3JpcHRvcnMgKiBzaXplb2YgKEVGSV9HQ0RfTUVNT1JZ X1NQQUNFX0RFU0NSSVBUT1IpKTsNCiAgLi4uDQogIC4uLg0KRG9uZToNCiAgQ29yZVJlbGVhc2VH Y2RNZW1vcnlMb2NrICgpOw0KDQo9PT09PT09Pg0KDQogIENvcmVBY3F1aXJlR2NkTWVtb3J5TG9j ayAoKTsNCiAgLi4uDQogIENvcmVSZWxlYXNlR2NkTWVtb3J5TG9jayAoKTsNCiAgLi4uDQogICpN ZW1vcnlTcGFjZU1hcCA9IEFsbG9jYXRlUG9vbCAoKk51bWJlck9mRGVzY3JpcHRvcnMgKiBzaXpl b2YgKEVGSV9HQ0RfTUVNT1JZX1NQQUNFX0RFU0NSSVBUT1IpKTsNCiAgLi4uDQogIENvcmVBY3F1 aXJlR2NkTWVtb3J5TG9jayAoKTsNCiAgLi4uDQpEb25lOg0KICBDb3JlUmVsZWFzZUdjZE1lbW9y eUxvY2sgKCk7DQoNCj4gDQo+IFRoYW5rcywNCj4gU3Rhcg0KPiANCj4gPg0KPiA+Pg0KPiA+PiBU aGFua3MsDQo+ID4+IFN0YXINCj4gPj4NCj4gPj4+ICsNCj4gPj4+ICAgICAgICBTdGF0dXMgPSBD b3JlR2V0TWVtb3J5U3BhY2VNYXAgKCZOdW1iZXJPZkRlc2NyaXB0b3JzLA0KPiA+PiAmTWVtb3J5 U3BhY2VNYXApOw0KPiA+Pj4gICAgICAgIEFTU0VSVCAoU3RhdHVzID09IEVGSV9TVUNDRVNTICYm IE1lbW9yeVNwYWNlTWFwICE9IE5VTEwpOw0KPiA+Pj4NCj4gPj4+IEBAIC0yMDIsNiArMjA2LDEw IEBAIENvcmVEdW1wR2NkSW9TcGFjZU1hcCAoDQo+ID4+PiAgICAgICAgRUZJX0dDRF9JT19TUEFD RV9ERVNDUklQVE9SICAqSW9TcGFjZU1hcDsNCj4gPj4+ICAgICAgICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgIEluZGV4Ow0KPiA+Pj4NCj4gPj4+ICsgICAgaWYgKChHZXREZWJ1Z1ByaW50 RXJyb3JMZXZlbCAoKSAmIERFQlVHX0dDRCkgPT0gMCkgew0KPiA+Pj4gKyAgICAgIHJldHVybjsN Cj4gPj4+ICsgICAgfQ0KPiA+Pj4gKw0KPiA+Pj4gICAgICAgIFN0YXR1cyA9IENvcmVHZXRJb1Nw YWNlTWFwICgmTnVtYmVyT2ZEZXNjcmlwdG9ycywgJklvU3BhY2VNYXApOw0KPiA+Pj4gICAgICAg IEFTU0VSVCAoU3RhdHVzID09IEVGSV9TVUNDRVNTICYmIElvU3BhY2VNYXAgIT0gTlVMTCk7DQo+ ID4+Pg0KPiA+Pj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vSGVhcEd1 YXJkLmMNCj4gPj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL0hlYXBHdWFyZC5jDQo+ID4+ PiBpbmRleCA2NjNmOTY5YzBkLi5iMTIwYzA0ZjhmIDEwMDY0NA0KPiA+Pj4gLS0tIGEvTWRlTW9k dWxlUGtnL0NvcmUvRHhlL01lbS9IZWFwR3VhcmQuYw0KPiA+Pj4gKysrIGIvTWRlTW9kdWxlUGtn L0NvcmUvRHhlL01lbS9IZWFwR3VhcmQuYw0KPiA+Pj4gQEAgLTQ0LDYgKzQ0LDExIEBAIEdMT0JB TF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIFVJTlRODQo+ID4+IG1MZXZlbFNoaWZ0W0dVQVJERURf SEVBUF9NQVBfVEFCTEVfREVQVEhdDQo+ID4+PiAgICBHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJF TkNFRCBVSU5UTg0KPiA+PiBtTGV2ZWxNYXNrW0dVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEhd DQo+ID4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEdVQVJERURf SEVBUF9NQVBfVEFCTEVfREVQVEhfTUFTS1M7DQo+ID4+Pg0KPiA+Pj4gKy8vDQo+ID4+PiArLy8g VXNlZCBmb3IgVXNlLUFmdGVyLUZyZWUgbWVtb3J5IGRldGVjdGlvbiB0byBwcm9tb3RlIGZyZWVk IGJ1dCBub3QNCj4gdXNlZA0KPiA+PiBwYWdlcy4NCj4gPj4+ICsvLw0KPiA+Pj4gK0dMT0JBTF9S RU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9QSFlTSUNBTF9BRERSRVNTDQo+ID4+IG1MYXN0UHJv bW90ZWRQYWdlID0gQkFTRV80R0I7DQo+ID4+PiArDQo+ID4+PiAgICAvKioNCj4gPj4+ICAgICAg U2V0IGNvcnJlc3BvbmRpbmcgYml0cyBpbiBiaXRtYXAgdGFibGUgdG8gMSBhY2NvcmRpbmcgdG8g dGhlIGFkZHJlc3MuDQo+ID4+Pg0KPiA+Pj4gQEAgLTM3OSw3ICszODQsNyBAQCBDbGVhckd1YXJk ZWRNZW1vcnlCaXRzICgNCj4gPj4+DQo+ID4+PiAgICAgIEByZXR1cm4gQW4gaW50ZWdlciBjb250 YWluaW5nIHRoZSBndWFyZGVkIG1lbW9yeSBiaXRtYXAuDQo+ID4+PiAgICAqKi8NCj4gPj4+IC1V SU5UTg0KPiA+Pj4gK1VJTlQ2NA0KPiA+Pj4gICAgR2V0R3VhcmRlZE1lbW9yeUJpdHMgKA0KPiA+ Pj4gICAgICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBBZGRyZXNzLA0KPiA+Pj4gICAgICBJ TiBVSU5UTiAgICAgICAgICAgICAgICAgICBOdW1iZXJPZlBhZ2VzDQo+ID4+PiBAQCAtMzg3LDcg KzM5Miw3IEBAIEdldEd1YXJkZWRNZW1vcnlCaXRzICgNCj4gPj4+ICAgIHsNCj4gPj4+ICAgICAg VUlOVDY0ICAgICAgICAgICAgKkJpdE1hcDsNCj4gPj4+ICAgICAgVUlOVE4gICAgICAgICAgICAg Qml0czsNCj4gPj4+IC0gIFVJTlROICAgICAgICAgICAgIFJlc3VsdDsNCj4gPj4+ICsgIFVJTlQ2 NCAgICAgICAgICAgIFJlc3VsdDsNCj4gPj4+ICAgICAgVUlOVE4gICAgICAgICAgICAgU2hpZnQ7 DQo+ID4+PiAgICAgIFVJTlROICAgICAgICAgICAgIEJpdHNUb1VuaXRFbmQ7DQo+ID4+Pg0KPiA+ Pj4gQEAgLTEyMDMsNiArMTIwOCwzNzMgQEAgU2V0QWxsR3VhcmRQYWdlcyAoDQo+ID4+PiAgICAg IH0NCj4gPj4+ICAgIH0NCj4gPj4+DQo+ID4+PiArLyoqDQo+ID4+PiArICBDaGVjayB0byBzZWUg aWYgdGhlIFVzZS1BZnRlci1GcmVlIChVQUYpIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBub3QuDQo+ ID4+PiArDQo+ID4+PiArICBAcmV0dXJuIFRSVUUvRkFMU0UuDQo+ID4+PiArKiovDQo+ID4+PiAr Qk9PTEVBTg0KPiA+Pj4gK0lzVWFmRW5hYmxlZCAoDQo+ID4+PiArICBWT0lEDQo+ID4+PiArICAp DQo+ID4+PiArew0KPiA+Pj4gKyAgQVNTRVJUICghSXNIZWFwR3VhcmRFbmFibGVkKCkpOw0KPiA+ Pj4gKyAgcmV0dXJuICgoUGNkR2V0OCAoUGNkVXNlQWZ0ZXJGcmVlRGV0ZWN0aW9uUHJvcGVydHlN YXNrKSAmIEJJVDApICE9IDApOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ ICsgIEZpbmQgdGhlIGFkZHJlc3Mgb2YgdG9wLW1vc3QgZ3VhcmRlZCBmcmVlIHBhZ2UuDQo+ID4+ PiArDQo+ID4+PiArICBAcGFyYW1bb3V0XSAgQWRkcmVzcyAgICBTdGFydCBhZGRyZXNzIG9mIHRv cC1tb3N0IGd1YXJkZWQgZnJlZSBwYWdlLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHVybiBWT0lE Lg0KPiA+Pj4gKyoqLw0KPiA+Pj4gK1ZPSUQNCj4gPj4+ICtHZXRMYXN0R3VhcmRlZEZyZWVQYWdl QWRkcmVzcyAoDQo+ID4+PiArICBPVVQgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAqQWRkcmVz cw0KPiA+Pj4gKyAgKQ0KPiA+Pj4gK3sNCj4gPj4+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAg IEFkZHJlc3NHcmFudWxhcml0eTsNCj4gPj4+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIEJh c2VBZGRyZXNzOw0KPiA+Pj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgTGV2ZWw7DQo+ID4+ PiArICBVSU5UNjQgICAgICAgICAgICAgICAgICBNYXA7DQo+ID4+PiArICBJTlROICAgICAgICAg ICAgICAgICAgICBJbmRleDsNCj4gPj4+ICsNCj4gPj4+ICsgIEFTU0VSVCAobU1hcExldmVsID49 IDEpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgQmFzZUFkZHJlc3MgPSAwOw0KPiA+Pj4gKyAgTWFwID0g bUd1YXJkZWRNZW1vcnlNYXA7DQo+ID4+PiArICBmb3IgKExldmVsID0gR1VBUkRFRF9IRUFQX01B UF9UQUJMRV9ERVBUSCAtIG1NYXBMZXZlbDsNCj4gPj4+ICsgICAgICAgTGV2ZWwgPCBHVUFSREVE X0hFQVBfTUFQX1RBQkxFX0RFUFRIOw0KPiA+Pj4gKyAgICAgICArK0xldmVsKSB7DQo+ID4+PiAr ICAgIEFkZHJlc3NHcmFudWxhcml0eSA9IExTaGlmdFU2NCAoMSwgbUxldmVsU2hpZnRbTGV2ZWxd KTsNCj4gPj4+ICsNCj4gPj4+ICsgICAgLy8NCj4gPj4+ICsgICAgLy8gRmluZCB0aGUgbm9uLU5V TEwgZW50cnkgYXQgbGFyZ2VzdCBpbmRleC4NCj4gPj4+ICsgICAgLy8NCj4gPj4+ICsgICAgZm9y IChJbmRleCA9IChJTlROKW1MZXZlbE1hc2tbTGV2ZWxdOyBJbmRleCA+PSAwIDsgLS1JbmRleCkg ew0KPiA+Pj4gKyAgICAgIGlmICgoKFVJTlQ2NCAqKShVSU5UTilNYXApW0luZGV4XSAhPSAwKSB7 DQo+ID4+PiArICAgICAgICBCYXNlQWRkcmVzcyArPSBNdWx0VTY0eDMyIChBZGRyZXNzR3JhbnVs YXJpdHksIChVSU5UMzIpSW5kZXgpOw0KPiA+Pj4gKyAgICAgICAgTWFwID0gKChVSU5UNjQgKiko VUlOVE4pTWFwKVtJbmRleF07DQo+ID4+PiArICAgICAgICBicmVhazsNCj4gPj4+ICsgICAgICB9 DQo+ID4+PiArICAgIH0NCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIC8vDQo+ID4+PiAr ICAvLyBGaW5kIHRoZSBub24temVybyBNU0IgdGhlbiBnZXQgdGhlIHBhZ2UgYWRkcmVzcy4NCj4g Pj4+ICsgIC8vDQo+ID4+PiArICB3aGlsZSAoTWFwICE9IDApIHsNCj4gPj4+ICsgICAgTWFwID0g UlNoaWZ0VTY0IChNYXAsIDEpOw0KPiA+Pj4gKyAgICBCYXNlQWRkcmVzcyArPSBFRklfUEFHRVNf VE9fU0laRSAoMSk7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICAqQWRkcmVzcyA9IEJh c2VBZGRyZXNzOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIFJlY29y ZCBmcmVlZCBwYWdlcy4NCj4gPj4+ICsNCj4gPj4+ICsgIEBwYXJhbVtpbl0gIEJhc2VBZGRyZXNz ICAgQmFzZSBhZGRyZXNzIG9mIGp1c3QgZnJlZWQgcGFnZXMuDQo+ID4+PiArICBAcGFyYW1baW5d ICBQYWdlcyAgICAgICAgIE51bWJlciBvZiBmcmVlZCBwYWdlcy4NCj4gPj4+ICsNCj4gPj4+ICsg IEByZXR1cm4gVk9JRC4NCj4gPj4+ICsqKi8NCj4gPj4+ICtWT0lEDQo+ID4+PiArTWFya0ZyZWVk UGFnZXMgKA0KPiA+Pj4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgIEJhc2VBZGRyZXNz LA0KPiA+Pj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgIFBhZ2VzDQo+ID4+PiArICAp DQo+ID4+PiArew0KPiA+Pj4gKyAgU2V0R3VhcmRlZE1lbW9yeUJpdHMgKEJhc2VBZGRyZXNzLCBQ YWdlcyk7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgUmVjb3JkIGZy ZWVkIHBhZ2VzIGFzIHdlbGwgYXMgbWFyayB0aGVtIGFzIG5vdC1wcmVzZW50LCBpZiBwb3NzaWJs ZS4NCj4gPj4+ICsNCj4gPj4+ICsgIEBwYXJhbVtpbl0gIEJhc2VBZGRyZXNzICAgQmFzZSBhZGRy ZXNzIG9mIGp1c3QgZnJlZWQgcGFnZXMuDQo+ID4+PiArICBAcGFyYW1baW5dICBQYWdlcyAgICAg ICAgIE51bWJlciBvZiBmcmVlZCBwYWdlcy4NCj4gPj4+ICsNCj4gPj4+ICsgIEByZXR1cm4gVk9J RC4NCj4gPj4+ICsqKi8NCj4gPj4+ICtWT0lEDQo+ID4+PiArRUZJQVBJDQo+ID4+PiArR3VhcmRG cmVlZFBhZ2VzICgNCj4gPj4+ICsgIElOICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBCYXNlQWRk cmVzcywNCj4gPj4+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICBQYWdlcw0KPiA+Pj4g KyAgKQ0KPiA+Pj4gK3sNCj4gPj4+ICsgIEVGSV9TVEFUVVMgICAgICBTdGF0dXM7DQo+ID4+PiAr DQo+ID4+PiArICAvLw0KPiA+Pj4gKyAgLy8gRG8gbm90aGluZyBpZg0KPiA+Pj4gKyAgLy8gLSBV c2UtQWZ0ZXItRnJlZSBkZXRlY3Rpb24gaXMgbm90IGVuYWJsZWQNCj4gPj4+ICsgIC8vIC0gRnJl ZWQgbWVtb3J5IGlzIGxlZ2FjeSBtZW1vcnkgbG93ZXIgdGhhbiAxTUINCj4gPj4+ICsgIC8vDQo+ ID4+PiArICBpZiAoIUlzVWFmRW5hYmxlZCAoKSB8fCBCYXNlQWRkcmVzcyA8IEJBU0VfMU1CKSB7 DQo+ID4+PiArICAgIHJldHVybjsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIE1hcmtG cmVlZFBhZ2VzIChCYXNlQWRkcmVzcywgUGFnZXMpOw0KPiA+Pj4gKyAgaWYgKGdDcHUgIT0gTlVM TCkgew0KPiA+Pj4gKyAgICAvLw0KPiA+Pj4gKyAgICAvLyBTZXQgZmxhZyB0byBtYWtlIHN1cmUg YWxsb2NhdGluZyBtZW1vcnkgd2l0aG91dCBHVUFSRCBmb3IgcGFnZQ0KPiB0YWJsZQ0KPiA+Pj4g KyAgICAvLyBvcGVyYXRpb247IG90aGVyd2lzZSBpbmZpbml0ZSBsb29wcyBjb3VsZCBiZSBjYXVz ZWQuDQo+ID4+PiArICAgIC8vDQo+ID4+PiArICAgIG1Pbkd1YXJkaW5nID0gVFJVRTsNCj4gPj4+ ICsgICAgLy8NCj4gPj4+ICsgICAgLy8gTm90ZTogVGhpcyBtaWdodCBvdmVyd3JpdGUgb3RoZXIg YXR0cmlidXRlcyBuZWVkZWQgYnkgb3RoZXIgZmVhdHVyZXMsDQo+ID4+PiArICAgIC8vIHN1Y2gg YXMgTlggbWVtb3J5IHByb3RlY3Rpb24uDQo+ID4+PiArICAgIC8vDQo+ID4+PiArICAgIFN0YXR1 cyA9IGdDcHUtPlNldE1lbW9yeUF0dHJpYnV0ZXMgKA0KPiA+Pj4gKyAgICAgICAgICAgICAgICAg ICAgIGdDcHUsDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgQmFzZUFkZHJlc3MsDQo+ID4+ PiArICAgICAgICAgICAgICAgICAgICAgRUZJX1BBR0VTX1RPX1NJWkUoUGFnZXMpLA0KPiA+Pj4g KyAgICAgICAgICAgICAgICAgICAgIEVGSV9NRU1PUllfUlANCj4gPj4+ICsgICAgICAgICAgICAg ICAgICAgICApOw0KPiA+Pj4gKyAgICAvLw0KPiA+Pj4gKyAgICAvLyBOb3JtYWxseSB3ZSBzaG91 bGQgY2hlY2sgdGhlIHJldHVybmVkIFN0YXR1cy4gQnV0IHRoZXJlIG1pZ2h0IGJlDQo+ID4+IG1l bW9yeQ0KPiA+Pj4gKyAgICAvLyBhbGxvYy9mcmVlIGludm9sdmVkIGluIFNldE1lbW9yeUF0dHJp YnV0ZXMoKSwgd2hpY2ggd291bGQgZmFpbCB0aGlzDQo+ID4+PiArICAgIC8vIGNhbGxpbmcuIEl0 J3MgcmFyZSBjYXNlIHNvIGl0J3MgT0sgdG8gbGV0IGEgZmV3IHRpbnkgaG9sZXMgYmUgbm90LWd1 YXJkZWQuDQo+ID4+PiArICAgIC8vDQo+ID4+PiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPj4+ICsgICAgICBERUJVRyAoKERFQlVHX1dBUk4sICJGYWlsZWQgdG8gZ3VhcmQgZnJl ZWQgcGFnZXM6ICVwICglZClcbiIsDQo+ID4+IEJhc2VBZGRyZXNzLCBQYWdlcykpOw0KPiA+Pj4g KyAgICB9DQo+ID4+PiArICAgIG1Pbkd1YXJkaW5nID0gRkFMU0U7DQo+ID4+PiArICB9DQo+ID4+ PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgTWFyayBhbGwgcGFnZXMgZnJlZWQg YmVmb3JlIENQVSBBcmNoIFByb3RvY29sIGFzIG5vdC1wcmVzZW50Lg0KPiA+Pj4gKw0KPiA+Pj4g KyoqLw0KPiA+Pj4gK1ZPSUQNCj4gPj4+ICtHdWFyZEFsbEZyZWVkUGFnZXMgKA0KPiA+Pj4gKyAg Vk9JRA0KPiA+Pj4gKyAgKQ0KPiA+Pj4gK3sNCj4gPj4+ICsgIFVJTlROICAgICBFbnRyaWVzW0dV QVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEhdOw0KPiA+Pj4gKyAgVUlOVE4gICAgIFNoaWZ0c1tH VUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIXTsNCj4gPj4+ICsgIFVJTlROICAgICBJbmRpY2Vz W0dVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEhdOw0KPiA+Pj4gKyAgVUlOVDY0ICAgIFRhYmxl c1tHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIXTsNCj4gPj4+ICsgIFVJTlQ2NCAgICBBZGRy ZXNzZXNbR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBUSF07DQo+ID4+PiArICBVSU5UNjQgICAg VGFibGVFbnRyeTsNCj4gPj4+ICsgIFVJTlQ2NCAgICBBZGRyZXNzOw0KPiA+Pj4gKyAgVUlOVDY0 ICAgIEd1YXJkUGFnZTsNCj4gPj4+ICsgIElOVE4gICAgICBMZXZlbDsNCj4gPj4+ICsgIFVJTlRO ICAgICBCaXRJbmRleDsNCj4gPj4+ICsgIFVJTlROICAgICBHdWFyZFBhZ2VOdW1iZXI7DQo+ID4+ PiArDQo+ID4+PiArICBpZiAobUd1YXJkZWRNZW1vcnlNYXAgPT0gMCB8fA0KPiA+Pj4gKyAgICAg IG1NYXBMZXZlbCA9PSAwIHx8DQo+ID4+PiArICAgICAgbU1hcExldmVsID4gR1VBUkRFRF9IRUFQ X01BUF9UQUJMRV9ERVBUSCkgew0KPiA+Pj4gKyAgICByZXR1cm47DQo+ID4+PiArICB9DQo+ID4+ PiArDQo+ID4+PiArICBDb3B5TWVtIChFbnRyaWVzLCBtTGV2ZWxNYXNrLCBzaXplb2YgKEVudHJp ZXMpKTsNCj4gPj4+ICsgIENvcHlNZW0gKFNoaWZ0cywgbUxldmVsU2hpZnQsIHNpemVvZiAoU2hp ZnRzKSk7DQo+ID4+PiArDQo+ID4+PiArICBTZXRNZW0gKFRhYmxlcywgc2l6ZW9mKFRhYmxlcyks IDApOw0KPiA+Pj4gKyAgU2V0TWVtIChBZGRyZXNzZXMsIHNpemVvZihBZGRyZXNzZXMpLCAwKTsN Cj4gPj4+ICsgIFNldE1lbSAoSW5kaWNlcywgc2l6ZW9mKEluZGljZXMpLCAwKTsNCj4gPj4+ICsN Cj4gPj4+ICsgIExldmVsICAgICAgICAgICA9IEdVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEgg LSBtTWFwTGV2ZWw7DQo+ID4+PiArICBUYWJsZXNbTGV2ZWxdICAgPSBtR3VhcmRlZE1lbW9yeU1h cDsNCj4gPj4+ICsgIEFkZHJlc3MgICAgICAgICA9IDA7DQo+ID4+PiArICBHdWFyZFBhZ2UgICAg ICAgPSAoVUlOVDY0KS0xOw0KPiA+Pj4gKyAgR3VhcmRQYWdlTnVtYmVyID0gMDsNCj4gPj4+ICsN Cj4gPj4+ICsgIHdoaWxlIChUUlVFKSB7DQo+ID4+PiArICAgIGlmIChJbmRpY2VzW0xldmVsXSA+ IEVudHJpZXNbTGV2ZWxdKSB7DQo+ID4+PiArICAgICAgVGFibGVzW0xldmVsXSA9IDA7DQo+ID4+ PiArICAgICAgTGV2ZWwgICAgICAgIC09IDE7DQo+ID4+PiArICAgIH0gZWxzZSB7DQo+ID4+PiAr ICAgICAgVGFibGVFbnRyeSAgPSAoKFVJTlQ2NCAqKShVSU5UTikoVGFibGVzW0xldmVsXSkpW0lu ZGljZXNbTGV2ZWxdXTsNCj4gPj4+ICsgICAgICBBZGRyZXNzICAgICA9IEFkZHJlc3Nlc1tMZXZl bF07DQo+ID4+PiArDQo+ID4+PiArICAgICAgaWYgKExldmVsIDwgR1VBUkRFRF9IRUFQX01BUF9U QUJMRV9ERVBUSCAtIDEpIHsNCj4gPj4+ICsgICAgICAgIExldmVsICAgICAgICAgICAgKz0gMTsN Cj4gPj4+ICsgICAgICAgIFRhYmxlc1tMZXZlbF0gICAgID0gVGFibGVFbnRyeTsNCj4gPj4+ICsg ICAgICAgIEFkZHJlc3Nlc1tMZXZlbF0gID0gQWRkcmVzczsNCj4gPj4+ICsgICAgICAgIEluZGlj ZXNbTGV2ZWxdICAgID0gMDsNCj4gPj4+ICsNCj4gPj4+ICsgICAgICAgIGNvbnRpbnVlOw0KPiA+ Pj4gKyAgICAgIH0gZWxzZSB7DQo+ID4+PiArICAgICAgICBCaXRJbmRleCA9IDE7DQo+ID4+PiAr ICAgICAgICB3aGlsZSAoQml0SW5kZXggIT0gMCkgew0KPiA+Pj4gKyAgICAgICAgICBpZiAoKFRh YmxlRW50cnkgJiBCaXRJbmRleCkgIT0gMCkgew0KPiA+Pj4gKyAgICAgICAgICAgIGlmIChHdWFy ZFBhZ2UgPT0gKFVJTlQ2NCktMSkgew0KPiA+Pj4gKyAgICAgICAgICAgICAgR3VhcmRQYWdlID0g QWRkcmVzczsNCj4gPj4+ICsgICAgICAgICAgICB9DQo+ID4+PiArICAgICAgICAgICAgKytHdWFy ZFBhZ2VOdW1iZXI7DQo+ID4+PiArICAgICAgICAgIH0gZWxzZSBpZiAoR3VhcmRQYWdlTnVtYmVy ID4gMCkgew0KPiA+Pj4gKyAgICAgICAgICAgIEd1YXJkRnJlZWRQYWdlcyAoR3VhcmRQYWdlLCBH dWFyZFBhZ2VOdW1iZXIpOw0KPiA+Pj4gKyAgICAgICAgICAgIEd1YXJkUGFnZU51bWJlciA9IDA7 DQo+ID4+PiArICAgICAgICAgICAgR3VhcmRQYWdlICAgICAgID0gKFVJTlQ2NCktMTsNCj4gPj4+ ICsgICAgICAgICAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgICAgICAgICBpZiAoVGFibGVFbnRyeSA9 PSAwKSB7DQo+ID4+PiArICAgICAgICAgICAgYnJlYWs7DQo+ID4+PiArICAgICAgICAgIH0NCj4g Pj4+ICsNCj4gPj4+ICsgICAgICAgICAgQWRkcmVzcyArPSBFRklfUEFHRVNfVE9fU0laRSAoMSk7 DQo+ID4+PiArICAgICAgICAgIEJpdEluZGV4ID0gTFNoaWZ0VTY0KEJpdEluZGV4LCAxKTsNCj4g Pj4+ICsgICAgICAgIH0NCj4gPj4+ICsgICAgICB9DQo+ID4+PiArICAgIH0NCj4gPj4+ICsNCj4g Pj4+ICsgICAgaWYgKExldmVsIDwgKEdVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEggLSAoSU5U TiltTWFwTGV2ZWwpKSB7DQo+ID4+PiArICAgICAgYnJlYWs7DQo+ID4+PiArICAgIH0NCj4gPj4+ ICsNCj4gPj4+ICsgICAgSW5kaWNlc1tMZXZlbF0gKz0gMTsNCj4gPj4+ICsgICAgQWRkcmVzcyA9 IChMZXZlbCA9PSAwKSA/IDAgOiBBZGRyZXNzZXNbTGV2ZWwgLSAxXTsNCj4gPj4+ICsgICAgQWRk cmVzc2VzW0xldmVsXSA9IEFkZHJlc3MgfCBMU2hpZnRVNjQoSW5kaWNlc1tMZXZlbF0sIFNoaWZ0 c1tMZXZlbF0pOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgLy8NCj4g Pj4+ICsgIC8vIFVwZGF0ZSB0aGUgbWF4aW11bSBhZGRyZXNzIG9mIGZyZWVkIHBhZ2Ugd2hpY2gg Y2FuIGJlIHVzZWQgZm9yDQo+ID4+IG1lbW9yeQ0KPiA+Pj4gKyAgLy8gcHJvbW90aW9uIHVwb24g b3V0LW9mLW1lbW9yeS1zcGFjZS4NCj4gPj4+ICsgIC8vDQo+ID4+PiArICBHZXRMYXN0R3VhcmRl ZEZyZWVQYWdlQWRkcmVzcyAoJkFkZHJlc3MpOw0KPiA+Pj4gKyAgaWYgKEFkZHJlc3MgIT0gMCkg ew0KPiA+Pj4gKyAgICBtTGFzdFByb21vdGVkUGFnZSA9IEFkZHJlc3M7DQo+ID4+PiArICB9DQo+ ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgVGhpcyBmdW5jdGlvbiBjaGVj a3MgdG8gc2VlIGlmIHRoZSBnaXZlbiBtZW1vcnkgbWFwIGRlc2NyaXB0b3IgaW4gYQ0KPiBtZW1v cnkNCj4gPj4gbWFwDQo+ID4+PiArICBjYW4gYmUgbWVyZ2VkIHdpdGggYW55IGd1YXJkZWQgZnJl ZSBwYWdlcy4NCj4gPj4+ICsNCj4gPj4+ICsgIEBwYXJhbSAgTWVtb3J5TWFwRW50cnkgICAgQSBw b2ludGVyIHRvIGEgZGVzY3JpcHRvciBpbiBNZW1vcnlNYXAuDQo+ID4+PiArICBAcGFyYW0gIE1h eEFkZHJlc3MgICAgICAgIE1heGltdW0gYWRkcmVzcyB0byBzdG9wIHRoZSBtZXJnZS4NCj4gPj4+ ICsNCj4gPj4+ICsgIEByZXR1cm4gVk9JRA0KPiA+Pj4gKw0KPiA+Pj4gKyoqLw0KPiA+Pj4gK1ZP SUQNCj4gPj4+ICtNZXJnZUd1YXJkUGFnZXMgKA0KPiA+Pj4gKyAgSU4gRUZJX01FTU9SWV9ERVND UklQVE9SICAgICAgKk1lbW9yeU1hcEVudHJ5LA0KPiA+Pj4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FE RFJFU1MgICAgICAgTWF4QWRkcmVzcw0KPiA+Pj4gKyAgKQ0KPiA+Pj4gK3sNCj4gPj4+ICsgIEVG SV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBFbmRBZGRyZXNzOw0KPiA+Pj4gKyAgVUlOVDY0ICAg ICAgICAgICAgICAgICAgICAgIEJpdG1hcDsNCj4gPj4+ICsgIElOVE4gICAgICAgICAgICAgICAg ICAgICAgICBQYWdlczsNCj4gPj4+ICsNCj4gPj4+ICsgIGlmICghSXNVYWZFbmFibGVkICgpIHx8 DQo+ID4+PiArICAgICAgTWVtb3J5TWFwRW50cnktPlR5cGUgPj0gRWZpTWVtb3J5TWFwcGVkSU8p IHsNCj4gPj4+ICsgICAgcmV0dXJuOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgQml0 bWFwID0gMDsNCj4gPj4+ICsgIFBhZ2VzICA9IEVGSV9TSVpFX1RPX1BBR0VTIChNYXhBZGRyZXNz IC0gTWVtb3J5TWFwRW50cnktDQo+ID4+PiBQaHlzaWNhbFN0YXJ0KTsNCj4gPj4+ICsgIFBhZ2Vz IC09IE1lbW9yeU1hcEVudHJ5LT5OdW1iZXJPZlBhZ2VzOw0KPiA+Pj4gKyAgd2hpbGUgKFBhZ2Vz ID4gMCkgew0KPiA+Pj4gKyAgICBpZiAoQml0bWFwID09IDApIHsNCj4gPj4+ICsgICAgICBFbmRB ZGRyZXNzID0gTWVtb3J5TWFwRW50cnktPlBoeXNpY2FsU3RhcnQgKw0KPiA+Pj4gKyAgICAgICAg ICAgICAgICAgICBFRklfUEFHRVNfVE9fU0laRSAoTWVtb3J5TWFwRW50cnktPk51bWJlck9mUGFn ZXMpOw0KPiA+Pj4gKyAgICAgIEJpdG1hcCA9IEdldEd1YXJkZWRNZW1vcnlCaXRzKEVuZEFkZHJl c3MsDQo+ID4+IEdVQVJERURfSEVBUF9NQVBfRU5UUllfQklUUyk7DQo+ID4+PiArICAgIH0NCj4g Pj4+ICsNCj4gPj4+ICsgICAgaWYgKChCaXRtYXAgJiAxKSA9PSAwKSB7DQo+ID4+PiArICAgICAg YnJlYWs7DQo+ID4+PiArICAgIH0NCj4gPj4+ICsNCj4gPj4+ICsgICAgUGFnZXMtLTsNCj4gPj4+ ICsgICAgTWVtb3J5TWFwRW50cnktPk51bWJlck9mUGFnZXMrKzsNCj4gPj4+ICsgICAgQml0bWFw ID0gUlNoaWZ0VTY0IChCaXRtYXAsIDEpOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gK30NCj4gPj4+ICsN Cj4gPj4+ICsvKioNCj4gPj4+ICsgIFB1dCBwYXJ0IChhdCBtb3N0IDY0IHBhZ2VzIGEgdGltZSkg Z3VhcmRlZCBmcmVlIHBhZ2VzIGJhY2sgdG8gZnJlZSBwYWdlDQo+ID4+IHBvb2wuDQo+ID4+PiAr DQo+ID4+PiArICBVc2UtQWZ0ZXItRnJlZSBkZXRlY3Rpb24gbWFrZXMgdXNlIG9mICdVc2VkIHRo ZW4gdGhyb3cgYXdheScgd2F5IHRvDQo+ID4+IGRldGVjdA0KPiA+Pj4gKyAgYW55IGlsbGVnYWwg YWNjZXNzIHRvIGZyZWVkIG1lbW9yeS4gVGhlIHRocm93bi1hd2F5IG1lbW9yeSB3aWxsIGJlDQo+ ID4+IG1hcmtlZCBhcw0KPiA+Pj4gKyAgbm90LXByZXNlbnQgc28gdGhhdCBhbnkgYWNjZXNzIHRv IHRob3NlIG1lbW9yeSAoYWZ0ZXIgZnJlZSkgd2lsbCB0cmlnZ2VyDQo+ID4+PiArICBwYWdlLWZh dWx0Lg0KPiA+Pj4gKw0KPiA+Pj4gKyAgVGhlIHByb2JsZW0gaXMgdGhhdCB0aGlzIHdpbGwgY29u c3VtZSBsb3RzIG9mIG1lbW9yeSBzcGFjZS4gT25jZSBubw0KPiA+PiBtZW1vcnkNCj4gPj4+ICsg IGxlZnQgaW4gcG9vbCB0byBhbGxvY2F0ZSwgd2UgaGF2ZSB0byByZXN0b3JlIHBhcnQgb2YgdGhl IGZyZWVkIHBhZ2VzIHRvIHRoZWlyDQo+ID4+PiArICBub3JtYWwgZnVuY3Rpb24uIE90aGVyd2lz ZSB0aGUgd2hvbGUgc3lzdGVtIHdpbGwgc3RvcCBmdW5jdGlvbmluZy4NCj4gPj4+ICsNCj4gPj4+ ICsgIEBwYXJhbSAgU3RhcnRBZGRyZXNzICAgIFN0YXJ0IGFkZHJlc3Mgb2YgcHJvbW90ZWQgbWVt b3J5Lg0KPiA+Pj4gKyAgQHBhcmFtICBFbmRBZGRyZXNzICAgICAgRW5kIGFkZHJlc3Mgb2YgcHJv bW90ZWQgbWVtb3J5Lg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHVybiBUUlVFICAgIFN1Y2NlZWRl ZCB0byBwcm9tb3RlIG1lbW9yeS4NCj4gPj4+ICsgIEByZXR1cm4gRkFMU0UgICBObyBmcmVlIG1l bW9yeSBmb3VuZC4NCj4gPj4+ICsNCj4gPj4+ICsqKi8NCj4gPj4+ICtCT09MRUFODQo+ID4+PiAr UHJvbW90ZUd1YXJkZWRGcmVlUGFnZXMgKA0KPiA+Pj4gKyAgT1VUIEVGSV9QSFlTSUNBTF9BRERS RVNTICAgICAgKlN0YXJ0QWRkcmVzcywNCj4gPj4+ICsgIE9VVCBFRklfUEhZU0lDQUxfQUREUkVT UyAgICAgICpFbmRBZGRyZXNzDQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+Pj4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+Pj4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgQXZhaWxhYmxlUGFnZXM7DQo+ID4+PiArICBVSU5UNjQgICAgICAgICAgICAgICAgICBCaXRt YXA7DQo+ID4+PiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBTdGFydDsNCj4gPj4+ICsNCj4g Pj4+ICsgIGlmICghSXNVYWZFbmFibGVkICgpKSB7DQo+ID4+PiArICAgIHJldHVybiBGQUxTRTsN Cj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIC8vDQo+ID4+PiArICAvLyBTaW1pbGFyIHRv IG1lbW9yeSBhbGxvY2F0aW9uIHNlcnZpY2UsIGFsd2F5cyBzZWFyY2ggdGhlIGZyZWVkIHBhZ2Vz IGluDQo+ID4+PiArICAvLyBkZXNjZW5kaW5nIGRpcmVjdGlvbi4NCj4gPj4+ICsgIC8vDQo+ID4+ PiArICBTdGFydCAgICAgICAgICAgPSBtTGFzdFByb21vdGVkUGFnZTsNCj4gPj4+ICsgIEF2YWls YWJsZVBhZ2VzICA9IDA7DQo+ID4+PiArICB3aGlsZSAoQXZhaWxhYmxlUGFnZXMgPT0gMCkgew0K PiA+Pj4gKyAgICBTdGFydCAtPSBFRklfUEFHRVNfVE9fU0laRShHVUFSREVEX0hFQVBfTUFQX0VO VFJZX0JJVFMpOw0KPiA+Pj4gKyAgICAvLw0KPiA+Pj4gKyAgICAvLyBJZiB0aGUgYWRkcmVzcyB3 cmFwcyBhcm91bmQsIHRyeSB0aGUgcmVhbGx5IGZyZWVkIHBhZ2VzIGF0IHRvcC4NCj4gPj4+ICsg ICAgLy8NCj4gPj4+ICsgICAgaWYgKFN0YXJ0ID4gbUxhc3RQcm9tb3RlZFBhZ2UpIHsNCj4gPj4+ ICsgICAgICBHZXRMYXN0R3VhcmRlZEZyZWVQYWdlQWRkcmVzcyAoJlN0YXJ0KTsNCj4gPj4+ICsg ICAgICBBU1NFUlQgKFN0YXJ0ICE9IDApOw0KPiA+Pj4gKyAgICAgIFN0YXJ0IC09IEVGSV9QQUdF U19UT19TSVpFKEdVQVJERURfSEVBUF9NQVBfRU5UUllfQklUUyk7DQo+ID4+PiArICAgIH0NCj4g Pj4+ICsNCj4gPj4+ICsgICAgQml0bWFwID0gR2V0R3VhcmRlZE1lbW9yeUJpdHMoU3RhcnQsDQo+ ID4+IEdVQVJERURfSEVBUF9NQVBfRU5UUllfQklUUyk7DQo+ID4+PiArICAgIHdoaWxlIChCaXRt YXAgPiAwKSB7DQo+ID4+PiArICAgICAgaWYgKChCaXRtYXAgJiAxKSAhPSAwKSB7DQo+ID4+PiAr ICAgICAgICArK0F2YWlsYWJsZVBhZ2VzOw0KPiA+Pj4gKyAgICAgIH0gZWxzZSBpZiAoQXZhaWxh YmxlUGFnZXMgPT0gMCkgew0KPiA+Pj4gKyAgICAgICAgU3RhcnQgKz0gRUZJX1BBR0VTX1RPX1NJ WkUgKDEpOw0KPiA+Pj4gKyAgICAgIH0gZWxzZSB7DQo+ID4+PiArICAgICAgICBicmVhazsNCj4g Pj4+ICsgICAgICB9DQo+ID4+PiArDQo+ID4+PiArICAgICAgQml0bWFwID0gUlNoaWZ0VTY0KEJp dG1hcCwgMSk7DQo+ID4+PiArICAgIH0NCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIGlm IChBdmFpbGFibGVQYWdlcykgew0KPiA+Pj4gKyAgICBERUJVRygoREVCVUdfSU5GTywgIlByb21v dGVkIHBhZ2VzOiAlbFggKCVYKVxyXG4iLCBTdGFydCwNCj4gPj4gQXZhaWxhYmxlUGFnZXMpKTsN Cj4gPj4+ICsgICAgaWYgKGdDcHUgIT0gTlVMTCkgew0KPiA+Pj4gKyAgICAgIC8vDQo+ID4+PiAr ICAgICAgLy8gU2V0IGZsYWcgdG8gbWFrZSBzdXJlIGFsbG9jYXRpbmcgbWVtb3J5IHdpdGhvdXQg R1VBUkQgZm9yIHBhZ2UNCj4gdGFibGUNCj4gPj4+ICsgICAgICAvLyBvcGVyYXRpb247IG90aGVy d2lzZSBpbmZpbml0ZSBsb29wcyBjb3VsZCBiZSBjYXVzZWQuDQo+ID4+PiArICAgICAgLy8NCj4g Pj4+ICsgICAgICBtT25HdWFyZGluZyA9IFRSVUU7DQo+ID4+PiArICAgICAgU3RhdHVzID0gZ0Nw dS0+U2V0TWVtb3J5QXR0cmlidXRlcyAoZ0NwdSwgU3RhcnQsDQo+ID4+IEVGSV9QQUdFU19UT19T SVpFKEF2YWlsYWJsZVBhZ2VzKSwgMCk7DQo+ID4+PiArICAgICAgQVNTRVJUX0VGSV9FUlJPUiAo U3RhdHVzKTsNCj4gPj4+ICsgICAgICBtT25HdWFyZGluZyA9IEZBTFNFOw0KPiA+Pj4gKyAgICB9 DQo+ID4+PiArDQo+ID4+PiArICAgIG1MYXN0UHJvbW90ZWRQYWdlID0gU3RhcnQ7DQo+ID4+PiAr ICAgICpTdGFydEFkZHJlc3MgICAgID0gU3RhcnQ7DQo+ID4+PiArICAgICpFbmRBZGRyZXNzICAg ICAgID0gU3RhcnQgKyBFRklfUEFHRVNfVE9fU0laRSAoQXZhaWxhYmxlUGFnZXMpIC0gMTsNCj4g Pj4+ICsgICAgcmV0dXJuIFRSVUU7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICByZXR1 cm4gRkFMU0U7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gICAgLyoqDQo+ID4+PiAgICAgIE5v dGlmeSBmdW5jdGlvbiB1c2VkIHRvIHNldCBhbGwgR3VhcmQgcGFnZXMgYmVmb3JlIENQVSBBcmNo IFByb3RvY29sDQo+ID4+IGluc3RhbGxlZC4NCj4gPj4+ICAgICoqLw0KPiA+Pj4gQEAgLTEyMTIs NyArMTU4NCwxNCBAQCBIZWFwR3VhcmRDcHVBcmNoUHJvdG9jb2xOb3RpZnkgKA0KPiA+Pj4gICAg ICApDQo+ID4+PiAgICB7DQo+ID4+PiAgICAgIEFTU0VSVCAoZ0NwdSAhPSBOVUxMKTsNCj4gPj4+ IC0gIFNldEFsbEd1YXJkUGFnZXMgKCk7DQo+ID4+PiArDQo+ID4+PiArICBpZiAoKFBjZEdldDgg KFBjZEhlYXBHdWFyZFByb3BlcnR5TWFzaykgJiAweDBGKSAhPSAwKSB7DQo+ID4+PiArICAgIFNl dEFsbEd1YXJkUGFnZXMgKCk7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBpZiAoSXNV YWZFbmFibGVkICgpKSB7DQo+ID4+PiArICAgIEd1YXJkQWxsRnJlZWRQYWdlcyAoKTsNCj4gPj4+ ICsgIH0NCj4gPj4+ICAgIH0NCj4gPj4+DQo+ID4+PiAgICAvKioNCj4gPj4+IEBAIC0xMjY0LDYg KzE2NDMsMTQgQEAgRHVtcEd1YXJkZWRNZW1vcnlCaXRtYXAgKA0KPiA+Pj4gICAgICBDSEFSOCAg ICAgKlJ1bGVyMTsNCj4gPj4+ICAgICAgQ0hBUjggICAgICpSdWxlcjI7DQo+ID4+Pg0KPiA+Pj4g KyAgaWYgKCFJc0hlYXBHdWFyZEVuYWJsZWQgKCkgJiYgIUlzVWFmRW5hYmxlZCAoKSkgew0KPiA+ Pj4gKyAgICByZXR1cm47DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBpZiAoKEdldERl YnVnUHJpbnRFcnJvckxldmVsICgpICYgSEVBUF9HVUFSRF9ERUJVR19MRVZFTCkgPT0gMCkgew0K PiA+Pj4gKyAgICByZXR1cm47DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiAgICAgIGlmICht R3VhcmRlZE1lbW9yeU1hcCA9PSAwIHx8DQo+ID4+PiAgICAgICAgICBtTWFwTGV2ZWwgPT0gMCB8 fA0KPiA+Pj4gICAgICAgICAgbU1hcExldmVsID4gR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBU SCkgew0KPiA+Pj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vSGVhcEd1 YXJkLmgNCj4gPj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL0hlYXBHdWFyZC5oDQo+ID4+ PiBpbmRleCA4YzM0NjkyNDM5Li4zZjJhNTI4M2MyIDEwMDY0NA0KPiA+Pj4gLS0tIGEvTWRlTW9k dWxlUGtnL0NvcmUvRHhlL01lbS9IZWFwR3VhcmQuaA0KPiA+Pj4gKysrIGIvTWRlTW9kdWxlUGtn L0NvcmUvRHhlL01lbS9IZWFwR3VhcmQuaA0KPiA+Pj4gQEAgLTQwNyw2ICs0MDcsNzIgQEAgSGVh cEd1YXJkQ3B1QXJjaFByb3RvY29sTm90aWZ5ICgNCj4gPj4+ICAgICAgVk9JRA0KPiA+Pj4gICAg ICApOw0KPiA+Pj4NCj4gPj4+ICsvKioNCj4gPj4+ICsgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRv IHNlZSBpZiB0aGUgZ2l2ZW4gbWVtb3J5IG1hcCBkZXNjcmlwdG9yIGluIGENCj4gbWVtb3J5DQo+ ID4+IG1hcA0KPiA+Pj4gKyAgY2FuIGJlIG1lcmdlZCB3aXRoIGFueSBndWFyZGVkIGZyZWUgcGFn ZXMuDQo+ID4+PiArDQo+ID4+PiArICBAcGFyYW0gIE1lbW9yeU1hcEVudHJ5ICAgIEEgcG9pbnRl ciB0byBhIGRlc2NyaXB0b3IgaW4gTWVtb3J5TWFwLg0KPiA+Pj4gKyAgQHBhcmFtICBNYXhBZGRy ZXNzICAgICAgICBNYXhpbXVtIGFkZHJlc3MgdG8gc3RvcCB0aGUgbWVyZ2UuDQo+ID4+PiArDQo+ ID4+PiArICBAcmV0dXJuIFZPSUQNCj4gPj4+ICsNCj4gPj4+ICsqKi8NCj4gPj4+ICtWT0lEDQo+ ID4+PiArTWVyZ2VHdWFyZFBhZ2VzICgNCj4gPj4+ICsgIElOIEVGSV9NRU1PUllfREVTQ1JJUFRP UiAgICAgICpNZW1vcnlNYXBFbnRyeSwNCj4gPj4+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNT ICAgICAgIE1heEFkZHJlc3MNCj4gPj4+ICsgICk7DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+ PiArICBSZWNvcmQgZnJlZWQgcGFnZXMgYXMgd2VsbCBhcyBtYXJrIHRoZW0gYXMgbm90LXByZXNl bnQsIGlmIHBvc3NpYmxlLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgQmFzZUFkZHJl c3MgICBCYXNlIGFkZHJlc3Mgb2YganVzdCBmcmVlZCBwYWdlcy4NCj4gPj4+ICsgIEBwYXJhbVtp bl0gIFBhZ2VzICAgICAgICAgTnVtYmVyIG9mIGZyZWVkIHBhZ2VzLg0KPiA+Pj4gKw0KPiA+Pj4g KyAgQHJldHVybiBWT0lELg0KPiA+Pj4gKyoqLw0KPiA+Pj4gK1ZPSUQNCj4gPj4+ICtFRklBUEkN Cj4gPj4+ICtHdWFyZEZyZWVkUGFnZXMgKA0KPiA+Pj4gKyAgSU4gIEVGSV9QSFlTSUNBTF9BRERS RVNTICAgIEJhc2VBZGRyZXNzLA0KPiA+Pj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAg IFBhZ2VzDQo+ID4+PiArICApOw0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgQ2hlY2sg dG8gc2VlIGlmIHRoZSB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBmZWF0dXJlIGlzIGVuYWJsZWQgb3Ig bm90Lg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHVybiBUUlVFL0ZBTFNFLg0KPiA+Pj4gKyoqLw0K PiA+Pj4gK0JPT0xFQU4NCj4gPj4+ICtJc1VhZkVuYWJsZWQgKA0KPiA+Pj4gKyAgVk9JRA0KPiA+ Pj4gKyAgKTsNCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIFB1dCBwYXJ0IChhdCBtb3N0 IDY0IHBhZ2VzIGEgdGltZSkgZ3VhcmRlZCBmcmVlIHBhZ2VzIGJhY2sgdG8gZnJlZSBwYWdlDQo+ ID4+IHBvb2wuDQo+ID4+PiArDQo+ID4+PiArICBVc2UtQWZ0ZXItRnJlZSBkZXRlY3Rpb24gbWFr ZXMgdXNlIG9mICdVc2VkIHRoZW4gdGhyb3cgYXdheScgd2F5IHRvDQo+ID4+IGRldGVjdA0KPiA+ Pj4gKyAgYW55IGlsbGVnYWwgYWNjZXNzIHRvIGZyZWVkIG1lbW9yeS4gVGhlIHRocm93bi1hd2F5 IG1lbW9yeSB3aWxsIGJlDQo+ID4+IG1hcmtlZCBhcw0KPiA+Pj4gKyAgbm90LXByZXNlbnQgc28g dGhhdCBhbnkgYWNjZXNzIHRvIHRob3NlIG1lbW9yeSAoYWZ0ZXIgZnJlZSkgd2lsbCB0cmlnZ2Vy DQo+ID4+PiArICBwYWdlLWZhdWx0Lg0KPiA+Pj4gKw0KPiA+Pj4gKyAgVGhlIHByb2JsZW0gaXMg dGhhdCB0aGlzIHdpbGwgY29uc3VtZSBsb3RzIG9mIG1lbW9yeSBzcGFjZS4gT25jZSBubw0KPiA+ PiBtZW1vcnkNCj4gPj4+ICsgIGxlZnQgaW4gcG9vbCB0byBhbGxvY2F0ZSwgd2UgaGF2ZSB0byBy ZXN0b3JlIHBhcnQgb2YgdGhlIGZyZWVkIHBhZ2VzIHRvIHRoZWlyDQo+ID4+PiArICBub3JtYWwg ZnVuY3Rpb24uIE90aGVyd2lzZSB0aGUgd2hvbGUgc3lzdGVtIHdpbGwgc3RvcCBmdW5jdGlvbmlu Zy4NCj4gPj4+ICsNCj4gPj4+ICsgIEBwYXJhbSAgU3RhcnRBZGRyZXNzICAgIFN0YXJ0IGFkZHJl c3Mgb2YgcHJvbW90ZWQgbWVtb3J5Lg0KPiA+Pj4gKyAgQHBhcmFtICBFbmRBZGRyZXNzICAgICAg RW5kIGFkZHJlc3Mgb2YgcHJvbW90ZWQgbWVtb3J5Lg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHVy biBUUlVFICAgIFN1Y2NlZWRlZCB0byBwcm9tb3RlIG1lbW9yeS4NCj4gPj4+ICsgIEByZXR1cm4g RkFMU0UgICBObyBmcmVlIG1lbW9yeSBmb3VuZC4NCj4gPj4+ICsNCj4gPj4+ICsqKi8NCj4gPj4+ ICtCT09MRUFODQo+ID4+PiArUHJvbW90ZUd1YXJkZWRGcmVlUGFnZXMgKA0KPiA+Pj4gKyAgT1VU IEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgKlN0YXJ0QWRkcmVzcywNCj4gPj4+ICsgIE9VVCBF RklfUEhZU0lDQUxfQUREUkVTUyAgICAgICpFbmRBZGRyZXNzDQo+ID4+PiArICApOw0KPiA+Pj4g Kw0KPiA+Pj4gICAgZXh0ZXJuIEJPT0xFQU4gbU9uR3VhcmRpbmc7DQo+ID4+Pg0KPiA+Pj4gICAg I2VuZGlmDQo+ID4+PiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9QYWdl LmMNCj4gPj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL1BhZ2UuYw0KPiA+Pj4gaW5kZXgg M2I0Y2MwOGU3Yy4uOWY0NDE5ZmE1YiAxMDA2NDQNCj4gPj4+IC0tLSBhL01kZU1vZHVsZVBrZy9D b3JlL0R4ZS9NZW0vUGFnZS5jDQo+ID4+PiArKysgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVt L1BhZ2UuYw0KPiA+Pj4gQEAgLTQwMSw5ICs0MDEsMTEgQEAgUHJvbW90ZU1lbW9yeVJlc291cmNl ICgNCj4gPj4+ICAgICAgVk9JRA0KPiA+Pj4gICAgICApDQo+ID4+PiAgICB7DQo+ID4+PiAtICBM SVNUX0VOVFJZICAgICAgICAgKkxpbms7DQo+ID4+PiAtICBFRklfR0NEX01BUF9FTlRSWSAgKkVu dHJ5Ow0KPiA+Pj4gLSAgQk9PTEVBTiAgICAgICAgICAgIFByb21vdGVkOw0KPiA+Pj4gKyAgTElT VF9FTlRSWSAgICAgICAgICAgICpMaW5rOw0KPiA+Pj4gKyAgRUZJX0dDRF9NQVBfRU5UUlkgICAg ICpFbnRyeTsNCj4gPj4+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICBQcm9tb3RlZDsNCj4gPj4+ ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICBTdGFydEFkZHJlc3M7DQo+ID4+PiArICBFRklfUEhZ U0lDQUxfQUREUkVTUyAgRW5kQWRkcmVzczsNCj4gPj4+DQo+ID4+PiAgICAgIERFQlVHICgoREVC VUdfUEFHRSwgIlByb21vdGUgdGhlIG1lbW9yeSByZXNvdXJjZVxuIikpOw0KPiA+Pj4NCj4gPj4+ IEBAIC00NTEsNiArNDUzLDI0IEBAIFByb21vdGVNZW1vcnlSZXNvdXJjZSAoDQo+ID4+Pg0KPiA+ Pj4gICAgICBDb3JlUmVsZWFzZUdjZE1lbW9yeUxvY2sgKCk7DQo+ID4+Pg0KPiA+Pj4gKyAgaWYg KCFQcm9tb3RlZCkgew0KPiA+Pj4gKyAgICAvLw0KPiA+Pj4gKyAgICAvLyBJZiBVc2UtQWZ0ZXIt RnJlZSBkZXRlY3Rpb24gaXMgZW5hYmxlZCwgd2UgbWlnaHQgcHJvbW90ZSBwYWdlcyBmcm9tDQo+ ID4+PiArICAgIC8vIGd1YXJkZWQgZnJlZSBwYWdlcy4NCj4gPj4+ICsgICAgLy8NCj4gPj4+ICsg ICAgUHJvbW90ZWQgPSBQcm9tb3RlR3VhcmRlZEZyZWVQYWdlcyAoJlN0YXJ0QWRkcmVzcywgJkVu ZEFkZHJlc3MpOw0KPiA+Pj4gKyAgICBpZiAoUHJvbW90ZWQpIHsNCj4gPj4+ICsgICAgICBDb3Jl QWNxdWlyZUdjZE1lbW9yeUxvY2sgKCk7DQo+ID4+PiArICAgICAgQ29yZUFkZFJhbmdlICgNCj4g Pj4+ICsgICAgICAgIEVmaUNvbnZlbnRpb25hbE1lbW9yeSwNCj4gPj4+ICsgICAgICAgIFN0YXJ0 QWRkcmVzcywNCj4gPj4+ICsgICAgICAgIEVuZEFkZHJlc3MsDQo+ID4+PiArICAgICAgICBFRklf TUVNT1JZX1VDIHwgRUZJX01FTU9SWV9XQyB8IEVGSV9NRU1PUllfV1QgfA0KPiA+PiBFRklfTUVN T1JZX1dCDQo+ID4+PiArICAgICAgICApOw0KPiA+Pj4gKyAgICAgIENvcmVSZWxlYXNlR2NkTWVt b3J5TG9jayAoKTsNCj4gPj4+ICsgICAgfQ0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gICAg ICByZXR1cm4gUHJvbW90ZWQ7DQo+ID4+PiAgICB9DQo+ID4+PiAgICAvKioNCj4gPj4+IEBAIC04 OTYsOSArOTE2LDEzIEBAIENvcmVDb252ZXJ0UGFnZXNFeCAoDQo+ID4+PiAgICAgICAgfQ0KPiA+ Pj4NCj4gPj4+ICAgICAgICAvLw0KPiA+Pj4gLSAgICAvLyBBZGQgb3VyIG5ldyByYW5nZSBpbg0K PiA+Pj4gKyAgICAvLyBBZGQgb3VyIG5ldyByYW5nZSBpbi4gRG9uJ3QgZG8gdGhpcyBmb3IgZnJl ZWQgcGFnZXMgaWYgVXNlLUFmdGVyLUZyZWUNCj4gPj4+ICsgICAgLy8gZGV0ZWN0aW9uIGlzIGVu YWJsZWQuDQo+ID4+PiAgICAgICAgLy8NCj4gPj4+IC0gICAgQ29yZUFkZFJhbmdlIChNZW1UeXBl LCBTdGFydCwgUmFuZ2VFbmQsIEF0dHJpYnV0ZSk7DQo+ID4+PiArICAgIGlmICghSXNVYWZFbmFi bGVkICgpIHx8ICFDaGFuZ2luZ1R5cGUgfHwgTWVtVHlwZSAhPQ0KPiA+PiBFZmlDb252ZW50aW9u YWxNZW1vcnkpIHsNCj4gPj4+ICsgICAgICBDb3JlQWRkUmFuZ2UgKE1lbVR5cGUsIFN0YXJ0LCBS YW5nZUVuZCwgQXR0cmlidXRlKTsNCj4gPj4+ICsgICAgfQ0KPiA+Pj4gKw0KPiA+Pj4gICAgICAg IGlmIChDaGFuZ2luZ1R5cGUgJiYgKE1lbVR5cGUgPT0gRWZpQ29udmVudGlvbmFsTWVtb3J5KSkg ew0KPiA+Pj4gICAgICAgICAgLy8NCj4gPj4+ICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgREVC VUdfQ0xFQVJfTUVNT1JZKCkgZm9yIGFuIGFkZHJlc3Mgb2YgMCBiZWNhdXNlDQo+ID4+IHRoaXMN Cj4gPj4+IEBAIC0xNTE0LDYgKzE1MzgsNyBAQCBDb3JlRnJlZVBhZ2VzICgNCj4gPj4+DQo+ID4+ PiAgICAgIFN0YXR1cyA9IENvcmVJbnRlcm5hbEZyZWVQYWdlcyAoTWVtb3J5LCBOdW1iZXJPZlBh Z2VzLA0KPiAmTWVtb3J5VHlwZSk7DQo+ID4+PiAgICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ID4+PiArICAgIEd1YXJkRnJlZWRQYWdlcyAoTWVtb3J5LCBOdW1iZXJPZlBhZ2VzKTsN Cj4gPj4+ICAgICAgICBDb3JlVXBkYXRlUHJvZmlsZSAoDQo+ID4+PiAgICAgICAgICAoRUZJX1BI WVNJQ0FMX0FERFJFU1MpIChVSU5UTikgUkVUVVJOX0FERFJFU1MgKDApLA0KPiA+Pj4gICAgICAg ICAgTWVtb3J5UHJvZmlsZUFjdGlvbkZyZWVQYWdlcywNCj4gPj4+IEBAIC0xOTA4LDkgKzE5MzMs NyBAQCBEb25lOg0KPiA+Pj4gICAgICAqTWVtb3J5TWFwU2l6ZSA9IEJ1ZmZlclNpemU7DQo+ID4+ Pg0KPiA+Pj4gICAgICBERUJVR19DT0RFICgNCj4gPj4+IC0gICAgaWYgKFBjZEdldDggKFBjZEhl YXBHdWFyZFByb3BlcnR5TWFzaykgJiAoQklUMXxCSVQwKSkgew0KPiA+Pj4gLSAgICAgIER1bXBH dWFyZGVkTWVtb3J5Qml0bWFwICgpOw0KPiA+Pj4gLSAgICB9DQo+ID4+PiArICAgIER1bXBHdWFy ZGVkTWVtb3J5Qml0bWFwICgpOw0KPiA+Pj4gICAgICApOw0KPiA+Pj4NCj4gPj4+ICAgICAgcmV0 dXJuIFN0YXR1czsNCj4gPj4+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVt L1Bvb2wuYw0KPiA+PiBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUG9vbC5jDQo+ID4+PiBp bmRleCAxZmYyMDYxZjdmLi4wY2Q3NDI2N2IzIDEwMDY0NA0KPiA+Pj4gLS0tIGEvTWRlTW9kdWxl UGtnL0NvcmUvRHhlL01lbS9Qb29sLmMNCj4gPj4+ICsrKyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4 ZS9NZW0vUG9vbC5jDQo+ID4+PiBAQCAtMjYsNyArMjYsOCBAQCB0eXBlZGVmIHN0cnVjdCB7DQo+ ID4+PiAgICB9IFBPT0xfRlJFRTsNCj4gPj4+DQo+ID4+Pg0KPiA+Pj4gLSNkZWZpbmUgUE9PTF9I RUFEX1NJR05BVFVSRSAgIFNJR05BVFVSRV8zMigncCcsJ2gnLCdkJywnMCcpDQo+ID4+PiArI2Rl ZmluZSBQT09MX0hFQURfU0lHTkFUVVJFICAgICAgIFNJR05BVFVSRV8zMigncCcsJ2gnLCdkJywn MCcpDQo+ID4+PiArI2RlZmluZSBQT09MUEFHRV9IRUFEX1NJR05BVFVSRSAgIFNJR05BVFVSRV8z MigncCcsJ2gnLCdkJywnMScpDQo+ID4+PiAgICB0eXBlZGVmIHN0cnVjdCB7DQo+ID4+PiAgICAg IFVJTlQzMiAgICAgICAgICBTaWduYXR1cmU7DQo+ID4+PiAgICAgIFVJTlQzMiAgICAgICAgICBS ZXNlcnZlZDsNCj4gPj4+IEBAIC0zNjcsNiArMzY4LDcgQEAgQ29yZUFsbG9jYXRlUG9vbEkgKA0K PiA+Pj4gICAgICBVSU5UTiAgICAgICBOb1BhZ2VzOw0KPiA+Pj4gICAgICBVSU5UTiAgICAgICBH cmFudWxhcml0eTsNCj4gPj4+ICAgICAgQk9PTEVBTiAgICAgSGFzUG9vbFRhaWw7DQo+ID4+PiAr ICBCT09MRUFOICAgICBQYWdlQXNQb29sOw0KPiA+Pj4NCj4gPj4+ICAgICAgQVNTRVJUX0xPQ0tF RCAoJm1Qb29sTWVtb3J5TG9jayk7DQo+ID4+Pg0KPiA+Pj4gQEAgLTM4Niw2ICszODgsNyBAQCBD b3JlQWxsb2NhdGVQb29sSSAoDQo+ID4+Pg0KPiA+Pj4gICAgICBIYXNQb29sVGFpbCAgPSAhKE5l ZWRHdWFyZCAmJg0KPiA+Pj4gICAgICAgICAgICAgICAgICAgICAgICgoUGNkR2V0OCAoUGNkSGVh cEd1YXJkUHJvcGVydHlNYXNrKSAmIEJJVDcpID09IDApKTsNCj4gPj4+ICsgIFBhZ2VBc1Bvb2wg PSAoSXNVYWZFbmFibGVkICgpICYmICFtT25HdWFyZGluZyk7DQo+ID4+Pg0KPiA+Pj4gICAgICAv Lw0KPiA+Pj4gICAgICAvLyBBZGp1c3RpbmcgdGhlIFNpemUgdG8gYmUgb2YgcHJvcGVyIGFsaWdu bWVudCBzbyB0aGF0DQo+ID4+PiBAQCAtNDA2LDcgKzQwOSw3IEBAIENvcmVBbGxvY2F0ZVBvb2xJ ICgNCj4gPj4+ICAgICAgLy8gSWYgYWxsb2NhdGlvbiBpcyBvdmVyIG1heCBzaXplLCBqdXN0IGFs bG9jYXRlIHBhZ2VzIGZvciB0aGUgcmVxdWVzdA0KPiA+Pj4gICAgICAvLyAoc2xvdykNCj4gPj4+ ICAgICAgLy8NCj4gPj4+IC0gIGlmIChJbmRleCA+PSBTSVpFX1RPX0xJU1QgKEdyYW51bGFyaXR5 KSB8fCBOZWVkR3VhcmQpIHsNCj4gPj4+ICsgIGlmIChJbmRleCA+PSBTSVpFX1RPX0xJU1QgKEdy YW51bGFyaXR5KSB8fCBOZWVkR3VhcmQgfHwgUGFnZUFzUG9vbCkgew0KPiA+Pj4gICAgICAgIGlm ICghSGFzUG9vbFRhaWwpIHsNCj4gPj4+ICAgICAgICAgIFNpemUgLT0gc2l6ZW9mIChQT09MX1RB SUwpOw0KPiA+Pj4gICAgICAgIH0NCj4gPj4+IEBAIC00OTgsNyArNTAxLDcgQEAgRG9uZToNCj4g Pj4+ICAgICAgICAvLw0KPiA+Pj4gICAgICAgIC8vIElmIHdlIGhhdmUgYSBwb29sIGJ1ZmZlciwg ZmlsbCBpbiB0aGUgaGVhZGVyICYgdGFpbCBpbmZvDQo+ID4+PiAgICAgICAgLy8NCj4gPj4+IC0g ICAgSGVhZC0+U2lnbmF0dXJlID0gUE9PTF9IRUFEX1NJR05BVFVSRTsNCj4gPj4+ICsgICAgSGVh ZC0+U2lnbmF0dXJlID0gKFBhZ2VBc1Bvb2wpID8gUE9PTFBBR0VfSEVBRF9TSUdOQVRVUkUgOg0K PiA+PiBQT09MX0hFQURfU0lHTkFUVVJFOw0KPiA+Pj4gICAgICAgIEhlYWQtPlNpemUgICAgICA9 IFNpemU7DQo+ID4+PiAgICAgICAgSGVhZC0+VHlwZSAgICAgID0gKEVGSV9NRU1PUllfVFlQRSkg UG9vbFR5cGU7DQo+ID4+PiAgICAgICAgQnVmZmVyICAgICAgICAgID0gSGVhZC0+RGF0YTsNCj4g Pj4+IEBAIC02MTUsNiArNjE4LDcgQEAgQ29yZUZyZWVQb29sUGFnZXNJICgNCj4gPj4+ICAgICAg Q29yZUZyZWVQb29sUGFnZXMgKE1lbW9yeSwgTm9QYWdlcyk7DQo+ID4+PiAgICAgIENvcmVSZWxl YXNlTWVtb3J5TG9jayAoKTsNCj4gPj4+DQo+ID4+PiArICBHdWFyZEZyZWVkUGFnZXMgKE1lbW9y eSwgTm9QYWdlcyk7DQo+ID4+PiAgICAgIEFwcGx5TWVtb3J5UHJvdGVjdGlvblBvbGljeSAoUG9v bFR5cGUsIEVmaUNvbnZlbnRpb25hbE1lbW9yeSwNCj4gPj4+ICAgICAgICAoRUZJX1BIWVNJQ0FM X0FERFJFU1MpKFVJTlROKU1lbW9yeSwgRUZJX1BBR0VTX1RPX1NJWkUNCj4gKE5vUGFnZXMpKTsN Cj4gPj4+ICAgIH0NCj4gPj4+IEBAIC02ODUsMTUgKzY4OSwxOSBAQCBDb3JlRnJlZVBvb2xJICgN Cj4gPj4+ICAgICAgVUlOVE4gICAgICAgR3JhbnVsYXJpdHk7DQo+ID4+PiAgICAgIEJPT0xFQU4g ICAgIElzR3VhcmRlZDsNCj4gPj4+ICAgICAgQk9PTEVBTiAgICAgSGFzUG9vbFRhaWw7DQo+ID4+ PiArICBCT09MRUFOICAgICBQYWdlQXNQb29sOw0KPiA+Pj4NCj4gPj4+ICAgICAgQVNTRVJUKEJ1 ZmZlciAhPSBOVUxMKTsNCj4gPj4+ICAgICAgLy8NCj4gPj4+ICAgICAgLy8gR2V0IHRoZSBoZWFk ICYgdGFpbCBvZiB0aGUgcG9vbCBlbnRyeQ0KPiA+Pj4gICAgICAvLw0KPiA+Pj4gLSAgSGVhZCA9 IENSIChCdWZmZXIsIFBPT0xfSEVBRCwgRGF0YSwgUE9PTF9IRUFEX1NJR05BVFVSRSk7DQo+ID4+ PiArICBIZWFkID0gQkFTRV9DUiAoQnVmZmVyLCBQT09MX0hFQUQsIERhdGEpOw0KPiA+Pj4gICAg ICBBU1NFUlQoSGVhZCAhPSBOVUxMKTsNCj4gPj4+DQo+ID4+PiAtICBpZiAoSGVhZC0+U2lnbmF0 dXJlICE9IFBPT0xfSEVBRF9TSUdOQVRVUkUpIHsNCj4gPj4+ICsgIGlmIChIZWFkLT5TaWduYXR1 cmUgIT0gUE9PTF9IRUFEX1NJR05BVFVSRSAmJg0KPiA+Pj4gKyAgICAgIEhlYWQtPlNpZ25hdHVy ZSAhPSBQT09MUEFHRV9IRUFEX1NJR05BVFVSRSkgew0KPiA+Pj4gKyAgICBBU1NFUlQgKEhlYWQt PlNpZ25hdHVyZSA9PSBQT09MX0hFQURfU0lHTkFUVVJFIHx8DQo+ID4+PiArICAgICAgICAgICAg SGVhZC0+U2lnbmF0dXJlID09IFBPT0xQQUdFX0hFQURfU0lHTkFUVVJFKTsNCj4gPj4+ICAgICAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+Pj4gICAgICB9DQo+ID4+Pg0KPiA+ Pj4gQEAgLTcwMSw2ICs3MDksNyBAQCBDb3JlRnJlZVBvb2xJICgNCj4gPj4+ICAgICAgICAgICAg ICAgICAgICBJc01lbW9yeUd1YXJkZWQgKChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pSGVh ZCk7DQo+ID4+PiAgICAgIEhhc1Bvb2xUYWlsID0gIShJc0d1YXJkZWQgJiYNCj4gPj4+ICAgICAg ICAgICAgICAgICAgICAgICgoUGNkR2V0OCAoUGNkSGVhcEd1YXJkUHJvcGVydHlNYXNrKSAmIEJJ VDcpID09IDApKTsNCj4gPj4+ICsgIFBhZ2VBc1Bvb2wgPSAoSGVhZC0+U2lnbmF0dXJlID09IFBP T0xQQUdFX0hFQURfU0lHTkFUVVJFKTsNCj4gPj4+DQo+ID4+PiAgICAgIGlmIChIYXNQb29sVGFp bCkgew0KPiA+Pj4gICAgICAgIFRhaWwgPSBIRUFEX1RPX1RBSUwgKEhlYWQpOw0KPiA+Pj4gQEAg LTc1Nyw3ICs3NjYsNyBAQCBDb3JlRnJlZVBvb2xJICgNCj4gPj4+ICAgICAgLy8NCj4gPj4+ICAg ICAgLy8gSWYgaXQncyBub3Qgb24gdGhlIGxpc3QsIGl0IG11c3QgYmUgcG9vbCBwYWdlcw0KPiA+ Pj4gICAgICAvLw0KPiA+Pj4gLSAgaWYgKEluZGV4ID49IFNJWkVfVE9fTElTVCAoR3JhbnVsYXJp dHkpIHx8IElzR3VhcmRlZCkgew0KPiA+Pj4gKyAgaWYgKEluZGV4ID49IFNJWkVfVE9fTElTVCAo R3JhbnVsYXJpdHkpIHx8IElzR3VhcmRlZCB8fCBQYWdlQXNQb29sKSB7DQo+ID4+Pg0KPiA+Pj4g ICAgICAgIC8vDQo+ID4+PiAgICAgICAgLy8gUmV0dXJuIHRoZSBtZW1vcnkgcGFnZXMgYmFjayB0 byBmcmVlIG1lbW9yeQ0KPiA+Pj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9N aXNjL1Byb3BlcnRpZXNUYWJsZS5jDQo+ID4+IGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01pc2Mv UHJvcGVydGllc1RhYmxlLmMNCj4gPj4+IGluZGV4IDA1ZWI0ZjQyMmIuLmY2NTk1YzkwZWQgMTAw NjQ0DQo+ID4+PiAtLS0gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWlzYy9Qcm9wZXJ0aWVzVGFi bGUuYw0KPiA+Pj4gKysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01pc2MvUHJvcGVydGllc1Rh YmxlLmMNCj4gPj4+IEBAIC0zMiw2ICszMiw3IEBAIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBS RVNFTlRBVElPTlMgT0YNCj4gQU5ZDQo+ID4+IEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJ RUQuDQo+ID4+PiAgICAjaW5jbHVkZSA8R3VpZC9Qcm9wZXJ0aWVzVGFibGUuaD4NCj4gPj4+DQo+ ID4+PiAgICAjaW5jbHVkZSAiRHhlTWFpbi5oIg0KPiA+Pj4gKyNpbmNsdWRlICJIZWFwR3VhcmQu aCINCj4gPj4+DQo+ID4+PiAgICAjZGVmaW5lIFBSRVZJT1VTX01FTU9SWV9ERVNDUklQVE9SKE1l bW9yeURlc2NyaXB0b3IsIFNpemUpIFwNCj4gPj4+ICAgICAgKChFRklfTUVNT1JZX0RFU0NSSVBU T1IgKikoKFVJTlQ4ICopKE1lbW9yeURlc2NyaXB0b3IpIC0gKFNpemUpKSkNCj4gPj4+IEBAIC0y MDUsMTYgKzIwNiwxMyBAQCBNZXJnZU1lbW9yeU1hcCAoDQo+ID4+PiAgICAgICAgTmV4dE1lbW9y eU1hcEVudHJ5ID0gTkVYVF9NRU1PUllfREVTQ1JJUFRPUg0KPiAoTWVtb3J5TWFwRW50cnksDQo+ ID4+IERlc2NyaXB0b3JTaXplKTsNCj4gPj4+DQo+ID4+PiAgICAgICAgZG8gew0KPiA+Pj4gLSAg ICAgIE1lbW9yeUJsb2NrTGVuZ3RoID0gKFVJTlQ2NCkgKEVmaVBhZ2VzVG9TaXplIChNZW1vcnlN YXBFbnRyeS0NCj4gPj4+IE51bWJlck9mUGFnZXMpKTsNCj4gPj4+ICsgICAgICBNZXJnZUd1YXJk UGFnZXMgKE5ld01lbW9yeU1hcEVudHJ5LCBOZXh0TWVtb3J5TWFwRW50cnktDQo+ID4+PiBQaHlz aWNhbFN0YXJ0KTsNCj4gPj4+ICsgICAgICBNZW1vcnlCbG9ja0xlbmd0aCA9IChVSU5UNjQpIChF ZmlQYWdlc1RvU2l6ZQ0KPiAoTmV3TWVtb3J5TWFwRW50cnktDQo+ID4+PiBOdW1iZXJPZlBhZ2Vz KSk7DQo+ID4+PiAgICAgICAgICBpZiAoKChVSU5UTilOZXh0TWVtb3J5TWFwRW50cnkgPCAoVUlO VE4pTWVtb3J5TWFwRW5kKSAmJg0KPiA+Pj4gLSAgICAgICAgICAoTWVtb3J5TWFwRW50cnktPlR5 cGUgPT0gTmV4dE1lbW9yeU1hcEVudHJ5LT5UeXBlKSAmJg0KPiA+Pj4gLSAgICAgICAgICAoTWVt b3J5TWFwRW50cnktPkF0dHJpYnV0ZSA9PSBOZXh0TWVtb3J5TWFwRW50cnktPkF0dHJpYnV0ZSkN Cj4gJiYNCj4gPj4+IC0gICAgICAgICAgKChNZW1vcnlNYXBFbnRyeS0+UGh5c2ljYWxTdGFydCAr IE1lbW9yeUJsb2NrTGVuZ3RoKSA9PQ0KPiA+PiBOZXh0TWVtb3J5TWFwRW50cnktPlBoeXNpY2Fs U3RhcnQpKSB7DQo+ID4+PiAtICAgICAgICBNZW1vcnlNYXBFbnRyeS0+TnVtYmVyT2ZQYWdlcyAr PSBOZXh0TWVtb3J5TWFwRW50cnktDQo+ID4+PiBOdW1iZXJPZlBhZ2VzOw0KPiA+Pj4gLSAgICAg ICAgaWYgKE5ld01lbW9yeU1hcEVudHJ5ICE9IE1lbW9yeU1hcEVudHJ5KSB7DQo+ID4+PiAtICAg ICAgICAgIE5ld01lbW9yeU1hcEVudHJ5LT5OdW1iZXJPZlBhZ2VzICs9IE5leHRNZW1vcnlNYXBF bnRyeS0NCj4gPj4+IE51bWJlck9mUGFnZXM7DQo+ID4+PiAtICAgICAgICB9DQo+ID4+PiAtDQo+ ID4+PiArICAgICAgICAgIChOZXdNZW1vcnlNYXBFbnRyeS0+VHlwZSA9PSBOZXh0TWVtb3J5TWFw RW50cnktPlR5cGUpICYmDQo+ID4+PiArICAgICAgICAgIChOZXdNZW1vcnlNYXBFbnRyeS0+QXR0 cmlidXRlID09IE5leHRNZW1vcnlNYXBFbnRyeS0NCj4gPkF0dHJpYnV0ZSkNCj4gPj4gJiYNCj4g Pj4+ICsgICAgICAgICAgKChOZXdNZW1vcnlNYXBFbnRyeS0+UGh5c2ljYWxTdGFydCArIE1lbW9y eUJsb2NrTGVuZ3RoKSA9PQ0KPiA+PiBOZXh0TWVtb3J5TWFwRW50cnktPlBoeXNpY2FsU3RhcnQp KSB7DQo+ID4+PiArICAgICAgICBOZXdNZW1vcnlNYXBFbnRyeS0+TnVtYmVyT2ZQYWdlcyArPSBO ZXh0TWVtb3J5TWFwRW50cnktDQo+ID4+PiBOdW1iZXJPZlBhZ2VzOw0KPiA+Pj4gICAgICAgICAg ICBOZXh0TWVtb3J5TWFwRW50cnkgPSBORVhUX01FTU9SWV9ERVNDUklQVE9SDQo+ID4+IChOZXh0 TWVtb3J5TWFwRW50cnksIERlc2NyaXB0b3JTaXplKTsNCj4gPj4+ICAgICAgICAgICAgY29udGlu dWU7DQo+ID4+PiAgICAgICAgICB9IGVsc2Ugew0KPiA+Pj4NCg0K