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.151; helo=mga17.intel.com; envelope-from=jian.j.wang@intel.com; receiver=edk2-devel@lists.01.org Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) (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 363122117FD4F for ; Wed, 24 Oct 2018 21:32:24 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 24 Oct 2018 21:32:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,422,1534834800"; d="scan'208";a="275422312" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga006.fm.intel.com with ESMTP; 24 Oct 2018 21:32:23 -0700 Received: from fmsmsx101.amr.corp.intel.com (10.18.124.199) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 24 Oct 2018 21:32:23 -0700 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by fmsmsx101.amr.corp.intel.com (10.18.124.199) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 24 Oct 2018 21:32:22 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.161]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.117]) with mapi id 14.03.0415.000; Thu, 25 Oct 2018 12:29:15 +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 v3 6/6] MdeModulePkg/Core: add freed-memory guard feature Thread-Index: AQHUa1pI52SWoNQrbUWPAh41QE5L+qUuy0UAgACTdiA= Date: Thu, 25 Oct 2018 04:29:15 +0000 Message-ID: References: <20181024052620.4088-1-jian.j.wang@intel.com> <20181024052620.4088-7-jian.j.wang@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiN2NiYmZmYjgtNmIxZC00MzllLThhNjMtNzcxZGZhNGQ3Nzc1IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiVVB4dGRqdlp6R1ZGbVBXanJHXC9IXC9cL1ZNa1EreG5LTng5ZXRBbUszWnllVVlDUUFOaSsrdXNoOWduOVNjVkhwZSJ9 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 v3 6/6] MdeModulePkg/Core: add freed-memory guard feature 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: Thu, 25 Oct 2018 04:32:25 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 U3RhciwNCg0KUmVnYXJkcywNCkppYW4NCg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t DQo+IEZyb206IFplbmcsIFN0YXINCj4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIgMjUsIDIwMTgg MTE6MzcgQU0NCj4gVG86IFdhbmcsIEppYW4gSiA8amlhbi5qLndhbmdAaW50ZWwuY29tPjsgZWRr Mi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gQ2M6IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQu a2lubmV5QGludGVsLmNvbT47IE5pLCBSdWl5dQ0KPiA8cnVpeXUubmlAaW50ZWwuY29tPjsgWWFv LCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsgTGFzemxvIEVyc2VrDQo+IDxsZXJzZWtA cmVkaGF0LmNvbT47IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6 IFJlOiBbZWRrMl0gW1BBVENIIHYzIDYvNl0gTWRlTW9kdWxlUGtnL0NvcmU6IGFkZCBmcmVlZC1t ZW1vcnkNCj4gZ3VhcmQgZmVhdHVyZQ0KPiANCj4gT24gMjAxOC8xMC8yNCAxMzoyNiwgSmlhbiBK IFdhbmcgd3JvdGU6DQo+ID4+IHYzIGNoYW5nZXM6DQo+ID4+IGEuIE1lcmdlIGZyb20gIzQgYW5k ICM1IG9mIHYyIHBhdGNoDQo+ID4+IGIuIENvZGluZyBzdHlsZSBjbGVhbnVwDQo+ID4NCj4gPiBG cmVlZC1tZW1vcnkgZ3VhcmQgaXMgdXNlZCB0byBkZXRlY3QgVUFGIChVc2UtQWZ0ZXItRnJlZSkg bWVtb3J5IGlzc3VlDQo+ID4gd2hpY2ggaXMgaWxsZWdhbCBhY2Nlc3MgdG8gbWVtb3J5IHdoaWNo IGhhcyBiZWVuIGZyZWVkLiBUaGUgcHJpbmNpcGxlDQo+ID4gYmVoaW5kIGlzIHNpbWlsYXIgdG8g aGVhcCBndWFyZCBmZWF0dXJlLCB0aGF0IGlzIHdlJ2xsIHR1cm4gYWxsIHBvb2wNCj4gDQo+IFNp bmNlIHdlIGFsc28gcmVnYXJkIFVBRiBwYXJ0IG9mIGhlYXAgZ3VhcmQgZmVhdHVyZSwgYmV0dGVy IHRvIHVzZQ0KPiAicG9vbC9wYWdlIGhlYXAgZ3VhcmQgZmVhdHVyZSIgaW5zdGVhZCBvZiAiaGVh cCBndWFyZCBmZWF0dXJlIiBoZXJlLg0KPiANCg0KWW91J3JlIHJpZ2h0LiBJJ2xsIGNoYW5nZSBp dC4NCg0KPiBJIHF1b3RlZCBhIHBpZWNlIG9mIGNvZGUgYXQgYmVsb3cgYW5kIGhhdmUgcXVlc3Rp b24gdGhhdCB3aHkgaXQgdXNlcw0KPiBoYXJkIGNvZGUgQXR0cmlidXRlIHBhcmFtZXRlcj8NCj4g DQo+ICsgICAgICBDb3JlQWRkUmFuZ2UgKA0KPiArICAgICAgICBFZmlDb252ZW50aW9uYWxNZW1v cnksDQo+ICsgICAgICAgIFN0YXJ0QWRkcmVzcywNCj4gKyAgICAgICAgRW5kQWRkcmVzcywNCj4g KyAgICAgICAgRUZJX01FTU9SWV9VQyB8IEVGSV9NRU1PUllfV0MgfCBFRklfTUVNT1JZX1dUIHwN Cj4gRUZJX01FTU9SWV9XQg0KPiArICAgICAgICApOw0KPiANCg0KQmVjYXVzZSBJIGRvbid0IGtu b3cgdGhlIGFjdHVhbCBhdHRyaWJ1dGVzIGF0IHRoYXQgdGltZSBzbyBJIHRoaW5rIGl0J2QgYmUN CnNhZmVyIHRvIGFkZCBhbGwgc3VwcG9ydGVkIG9uZXMuDQoNCj4gVGhhbmtzLA0KPiBTdGFyDQo+ IA0KPiA+IG1lbW9yeSBhbGxvY2F0aW9uIHRvIHBhZ2UgYWxsb2NhdGlvbiBhbmQgbWFyayB0aGVt IHRvIGJlIG5vdC1wcmVzZW50DQo+ID4gb25jZSB0aGV5IGFyZSBmcmVlZC4gVGhlIGZyZWVkIG1l bW9yeSBibG9jayB3aWxsIG5vdCBiZSBhZGRlZCBiYWNrIGludG8NCj4gPiBtZW1vcnkgcG9vbC4N Cj4gPg0KPiA+IFRoaXMgbWVhbnMgdGhhdCwgb25jZSBhIHBhZ2UgaXMgYWxsb2NhdGVkIGFuZCBm cmVlZCwgaXQgY2Fubm90IGJlDQo+ID4gcmUtYWxsb2NhdGVkLiBUaGlzIHdpbGwgYnJpbmcgYW4g aXNzdWUsIHdoaWNoIGlzIHRoYXQgdGhlcmUncw0KPiA+IHJpc2sgdGhhdCBtZW1vcnkgc3BhY2Ug d2lsbCBiZSB1c2VkIG91dC4gVG8gYWRkcmVzcyBpdCwgdGhlIG1lbW9yeQ0KPiA+IHNlcnZpY2Ug YWRkIGxvZ2ljIHRvIHB1dCBwYXJ0IChhdCBtb3N0IDY0IHBhZ2VzIGEgdGltZSkgb2YgZnJlZWQg cGFnZXMNCj4gPiBiYWNrIGludG8gcGFnZSBwb29sLCBzbyB0aGF0IHRoZSBtZW1vcnkgc2Vydmlj ZSBjYW4gc3RpbGwgaGF2ZSBtZW1vcnkNCj4gPiB0byBhbGxvY2F0ZSwgd2hlbiBhbGwgbWVtb3J5 IHNwYWNlIGhhdmUgYmVlbiBhbGxvY2F0ZWQgb25jZS4gVGhpcyBpcw0KPiA+IGNhbGxlZCBtZW1v cnkgcHJvbW90aW9uLiBUaGUgcHJvbW90ZWQgcGFnZXMgYXJlIGFsd2F5cyBmcm9tIHRoZSBlbGRl c3QNCj4gPiBwYWdlcyB3aGljaCBoYXZlbiBiZWVuIGZyZWVkLg0KPiA+DQo+ID4gVGhpcyBmZWF0 dXJlIGJyaW5ncyBhbm90aGVyIHByb2JsZW0gaXMgdGhhdCBtZW1vcnkgbWFwIGRlc2NyaXB0b3Jz IHdpbGwNCj4gPiBiZSBpbmNyZWFzZWQgZW5vcm1vdXNseSAoMjAwKyAtPiAyMDAwKykuIE9uZSBv ZiBjaGFuZ2UgaW4gdGhpcyBwYXRjaA0KPiA+IGlzIHRvIHVwZGF0ZSBNZXJnZU1lbW9yeU1hcCgp IGluIGZpbGUgUHJvcGVydGllc1RhYmxlLmMgdG8gYWxsb3cgbWVyZ2UNCj4gPiBmcmVlZCBwYWdl cyBiYWNrIGludG8gdGhlIG1lbW9yeSBtYXAuIE5vdyB0aGUgbnVtYmVyIGNhbiBzdGF5IGF0IGFy b3VuZA0KPiA+IDUxMC4NCj4gPg0KPiA+IENjOiBTdGFyIFplbmcgPHN0YXIuemVuZ0BpbnRlbC5j b20+DQo+ID4gQ2M6IE1pY2hhZWwgRCBLaW5uZXkgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29t Pg0KPiA+IENjOiBKaWV3ZW4gWWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbT4NCj4gPiBDYzogUnVp eXUgTmkgPHJ1aXl1Lm5pQGludGVsLmNvbT4NCj4gPiBDYzogTGFzemxvIEVyc2VrIDxsZXJzZWtA cmVkaGF0LmNvbT4NCj4gPiBDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRyaWJ1dGlv biBBZ3JlZW1lbnQgMS4xDQo+ID4gU2lnbmVkLW9mZi1ieTogSmlhbiBKIFdhbmcgPGppYW4uai53 YW5nQGludGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0v SGVhcEd1YXJkLmMgICAgICAgICB8IDQwOQ0KPiArKysrKysrKysrKysrKysrKysrKysrKysrLQ0K PiA+ICAgTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9IZWFwR3VhcmQuaCAgICAgICAgIHwgIDY1 ICsrKy0NCj4gPiAgIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUGFnZS5jICAgICAgICAgICAg ICB8ICA0MSArKy0NCj4gPiAgIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUG9vbC5jICAgICAg ICAgICAgICB8ICAyMyArLQ0KPiA+ICAgTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01pc2MvTWVtb3J5 UHJvdGVjdGlvbi5jIHwgICAyICstDQo+ID4gICBNZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWlzYy9Q cm9wZXJ0aWVzVGFibGUuYyAgfCAgMTggKy0NCj4gPiAgIDYgZmlsZXMgY2hhbmdlZCwgNTI0IGlu c2VydGlvbnMoKyksIDM0IGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL01kZU1v ZHVsZVBrZy9Db3JlL0R4ZS9NZW0vSGVhcEd1YXJkLmMNCj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9E eGUvTWVtL0hlYXBHdWFyZC5jDQo+ID4gaW5kZXggNjYzZjk2OWMwZC4uNDQ5YTAyMjY1OCAxMDA2 NDQNCj4gPiAtLS0gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL0hlYXBHdWFyZC5jDQo+ID4g KysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9IZWFwR3VhcmQuYw0KPiA+IEBAIC00NCw2 ICs0NCwxMSBAQCBHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBVSU5UTg0KPiBtTGV2ZWxT aGlmdFtHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIXQ0KPiA+ICAgR0xPQkFMX1JFTU9WRV9J Rl9VTlJFRkVSRU5DRUQgVUlOVE4NCj4gbUxldmVsTWFza1tHVUFSREVEX0hFQVBfTUFQX1RBQkxF X0RFUFRIXQ0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBHVUFS REVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIX01BU0tTOw0KPiA+DQo+ID4gKy8vDQo+ID4gKy8vIFVz ZWQgZm9yIHByb21vdGluZyBmcmVlZCBidXQgbm90IHVzZWQgcGFnZXMuDQo+ID4gKy8vDQo+ID4g K0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9QSFlTSUNBTF9BRERSRVNTDQo+IG1M YXN0UHJvbW90ZWRQYWdlID0gQkFTRV80R0I7DQo+ID4gKw0KPiA+ICAgLyoqDQo+ID4gICAgIFNl dCBjb3JyZXNwb25kaW5nIGJpdHMgaW4gYml0bWFwIHRhYmxlIHRvIDEgYWNjb3JkaW5nIHRvIHRo ZSBhZGRyZXNzLg0KPiA+DQo+ID4gQEAgLTM3OSw3ICszODQsNyBAQCBDbGVhckd1YXJkZWRNZW1v cnlCaXRzICgNCj4gPg0KPiA+ICAgICBAcmV0dXJuIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUg Z3VhcmRlZCBtZW1vcnkgYml0bWFwLg0KPiA+ICAgKiovDQo+ID4gLVVJTlRODQo+ID4gK1VJTlQ2 NA0KPiA+ICAgR2V0R3VhcmRlZE1lbW9yeUJpdHMgKA0KPiA+ICAgICBJTiBFRklfUEhZU0lDQUxf QUREUkVTUyAgICBBZGRyZXNzLA0KPiA+ICAgICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICBO dW1iZXJPZlBhZ2VzDQo+ID4gQEAgLTM4Nyw3ICszOTIsNyBAQCBHZXRHdWFyZGVkTWVtb3J5Qml0 cyAoDQo+ID4gICB7DQo+ID4gICAgIFVJTlQ2NCAgICAgICAgICAgICpCaXRNYXA7DQo+ID4gICAg IFVJTlROICAgICAgICAgICAgIEJpdHM7DQo+ID4gLSAgVUlOVE4gICAgICAgICAgICAgUmVzdWx0 Ow0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgIFJlc3VsdDsNCj4gPiAgICAgVUlOVE4gICAgICAg ICAgICAgU2hpZnQ7DQo+ID4gICAgIFVJTlROICAgICAgICAgICAgIEJpdHNUb1VuaXRFbmQ7DQo+ ID4NCj4gPiBAQCAtNjYwLDE1ICs2NjUsMTYgQEAgSXNQYWdlVHlwZVRvR3VhcmQgKA0KPiA+ICAg LyoqDQo+ID4gICAgIENoZWNrIHRvIHNlZSBpZiB0aGUgaGVhcCBndWFyZCBpcyBlbmFibGVkIGZv ciBwYWdlIGFuZC9vciBwb29sIGFsbG9jYXRpb24uDQo+ID4NCj4gPiArICBAcGFyYW1baW5dICBH dWFyZFR5cGUgICBTcGVjaWZ5IHRoZSBzdWItdHlwZShzKSBvZiBIZWFwIEd1YXJkLg0KPiA+ICsN Cj4gPiAgICAgQHJldHVybiBUUlVFL0ZBTFNFLg0KPiA+ICAgKiovDQo+ID4gICBCT09MRUFODQo+ ID4gICBJc0hlYXBHdWFyZEVuYWJsZWQgKA0KPiA+IC0gIFZPSUQNCj4gPiArICBVSU5UOCAgICAg ICAgICAgR3VhcmRUeXBlDQo+ID4gICAgICkNCj4gPiAgIHsNCj4gPiAtICByZXR1cm4gSXNNZW1v cnlUeXBlVG9HdWFyZCAoRWZpTWF4TWVtb3J5VHlwZSwgQWxsb2NhdGVBbnlQYWdlcywNCj4gPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1VBUkRfSEVBUF9UWVBFX1BPT0x8R1VBUkRf SEVBUF9UWVBFX1BBR0UpOw0KPiA+ICsgIHJldHVybiBJc01lbW9yeVR5cGVUb0d1YXJkIChFZmlN YXhNZW1vcnlUeXBlLCBBbGxvY2F0ZUFueVBhZ2VzLA0KPiBHdWFyZFR5cGUpOw0KPiA+ICAgfQ0K PiA+DQo+ID4gICAvKioNCj4gPiBAQCAtMTIwMyw2ICsxMjA5LDM4MCBAQCBTZXRBbGxHdWFyZFBh Z2VzICgNCj4gPiAgICAgfQ0KPiA+ICAgfQ0KPiA+DQo+ID4gKy8qKg0KPiA+ICsgIEZpbmQgdGhl IGFkZHJlc3Mgb2YgdG9wLW1vc3QgZ3VhcmRlZCBmcmVlIHBhZ2UuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbVtvdXRdICBBZGRyZXNzICAgIFN0YXJ0IGFkZHJlc3Mgb2YgdG9wLW1vc3QgZ3VhcmRlZCBm cmVlIHBhZ2UuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVk9JRC4NCj4gPiArKiovDQo+ID4gK1ZP SUQNCj4gPiArR2V0TGFzdEd1YXJkZWRGcmVlUGFnZUFkZHJlc3MgKA0KPiA+ICsgIE9VVCBFRklf UEhZU0lDQUxfQUREUkVTUyAgICAgICpBZGRyZXNzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg RUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgQWRkcmVzc0dyYW51bGFyaXR5Ow0KPiA+ICsgIEVGSV9Q SFlTSUNBTF9BRERSRVNTICAgIEJhc2VBZGRyZXNzOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAg ICAgICAgIExldmVsOw0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgIE1hcDsNCj4gPiAr ICBJTlROICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiArDQo+ID4gKyAgQVNTRVJUICht TWFwTGV2ZWwgPj0gMSk7DQo+ID4gKw0KPiA+ICsgIEJhc2VBZGRyZXNzID0gMDsNCj4gPiArICBN YXAgPSBtR3VhcmRlZE1lbW9yeU1hcDsNCj4gPiArICBmb3IgKExldmVsID0gR1VBUkRFRF9IRUFQ X01BUF9UQUJMRV9ERVBUSCAtIG1NYXBMZXZlbDsNCj4gPiArICAgICAgIExldmVsIDwgR1VBUkRF RF9IRUFQX01BUF9UQUJMRV9ERVBUSDsNCj4gPiArICAgICAgICsrTGV2ZWwpIHsNCj4gPiArICAg IEFkZHJlc3NHcmFudWxhcml0eSA9IExTaGlmdFU2NCAoMSwgbUxldmVsU2hpZnRbTGV2ZWxdKTsN Cj4gPiArDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gRmluZCB0aGUgbm9uLU5VTEwgZW50cnkg YXQgbGFyZ2VzdCBpbmRleC4NCj4gPiArICAgIC8vDQo+ID4gKyAgICBmb3IgKEluZGV4ID0gKElO VE4pbUxldmVsTWFza1tMZXZlbF07IEluZGV4ID49IDAgOyAtLUluZGV4KSB7DQo+ID4gKyAgICAg IGlmICgoKFVJTlQ2NCAqKShVSU5UTilNYXApW0luZGV4XSAhPSAwKSB7DQo+ID4gKyAgICAgICAg QmFzZUFkZHJlc3MgKz0gTXVsdFU2NHgzMiAoQWRkcmVzc0dyYW51bGFyaXR5LCAoVUlOVDMyKUlu ZGV4KTsNCj4gPiArICAgICAgICBNYXAgPSAoKFVJTlQ2NCAqKShVSU5UTilNYXApW0luZGV4XTsN Cj4gPiArICAgICAgICBicmVhazsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBGaW5kIHRoZSBub24temVybyBNU0IgdGhlbiBn ZXQgdGhlIHBhZ2UgYWRkcmVzcy4NCj4gPiArICAvLw0KPiA+ICsgIHdoaWxlIChNYXAgIT0gMCkg ew0KPiA+ICsgICAgTWFwID0gUlNoaWZ0VTY0IChNYXAsIDEpOw0KPiA+ICsgICAgQmFzZUFkZHJl c3MgKz0gRUZJX1BBR0VTX1RPX1NJWkUgKDEpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgKkFk ZHJlc3MgPSBCYXNlQWRkcmVzczsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVj b3JkIGZyZWVkIHBhZ2VzLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBCYXNlQWRkcmVzcyAg IEJhc2UgYWRkcmVzcyBvZiBqdXN0IGZyZWVkIHBhZ2VzLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFBh Z2VzICAgICAgICAgTnVtYmVyIG9mIGZyZWVkIHBhZ2VzLg0KPiA+ICsNCj4gPiArICBAcmV0dXJu IFZPSUQuDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK01hcmtGcmVlZFBhZ2VzICgNCj4gPiAr ICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgQmFzZUFkZHJlc3MsDQo+ID4gKyAgSU4gVUlO VE4gICAgICAgICAgICAgICAgICAgIFBhZ2VzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgU2V0 R3VhcmRlZE1lbW9yeUJpdHMgKEJhc2VBZGRyZXNzLCBQYWdlcyk7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgIFJlY29yZCBmcmVlZCBwYWdlcyBhcyB3ZWxsIGFzIG1hcmsgdGhlbSBh cyBub3QtcHJlc2VudC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQmFzZUFkZHJlc3MgICBC YXNlIGFkZHJlc3Mgb2YganVzdCBmcmVlZCBwYWdlcy4NCj4gPiArICBAcGFyYW1baW5dICBQYWdl cyAgICAgICAgIE51bWJlciBvZiBmcmVlZCBwYWdlcy4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBW T0lELg0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArR3VhcmRGcmVlZFBh Z2VzICgNCj4gPiArICBJTiAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgQmFzZUFkZHJlc3MsDQo+ ID4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgIFBhZ2VzDQo+ID4gKyAgKQ0KPiA+ICt7 DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiAr ICAvLyBMZWdhY3kgbWVtb3J5IGxvd2VyIHRoYW4gMU1CIG1pZ2h0IGJlIGFjY2Vzc2VkIHdpdGgg bm8gYWxsb2NhdGlvbi4NCj4gTGVhdmUNCj4gPiArICAvLyB0aGVtIGFsb25lLg0KPiA+ICsgIC8v DQo+ID4gKyAgaWYgKEJhc2VBZGRyZXNzIDwgQkFTRV8xTUIpIHsNCj4gPiArICAgIHJldHVybjsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIE1hcmtGcmVlZFBhZ2VzIChCYXNlQWRkcmVzcywgUGFn ZXMpOw0KPiA+ICsgIGlmIChnQ3B1ICE9IE5VTEwpIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAv LyBTZXQgZmxhZyB0byBtYWtlIHN1cmUgYWxsb2NhdGluZyBtZW1vcnkgd2l0aG91dCBHVUFSRCBm b3IgcGFnZSB0YWJsZQ0KPiA+ICsgICAgLy8gb3BlcmF0aW9uOyBvdGhlcndpc2UgaW5maW5pdGUg bG9vcHMgY291bGQgYmUgY2F1c2VkLg0KPiA+ICsgICAgLy8NCj4gPiArICAgIG1Pbkd1YXJkaW5n ID0gVFJVRTsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBOb3RlOiBUaGlzIG1pZ2h0IG92ZXJ3 cml0ZSBvdGhlciBhdHRyaWJ1dGVzIG5lZWRlZCBieSBvdGhlciBmZWF0dXJlcywNCj4gPiArICAg IC8vIHN1Y2ggYXMgTlggbWVtb3J5IHByb3RlY3Rpb24uDQo+ID4gKyAgICAvLw0KPiA+ICsgICAg U3RhdHVzID0gZ0NwdS0+U2V0TWVtb3J5QXR0cmlidXRlcyAoDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGdDcHUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIEJhc2VBZGRyZXNzLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICBFRklfUEFHRVNfVE9fU0laRSAoUGFnZXMpLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICBFRklfTUVNT1JZX1JQDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICk7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gTm9ybWFsbHkgd2Ugc2hvdWxkIEFTU0VS VCB0aGUgcmV0dXJuZWQgU3RhdHVzLiBCdXQgdGhlcmUgbWlnaHQgYmUNCj4gbWVtb3J5DQo+ID4g KyAgICAvLyBhbGxvYy9mcmVlIGludm9sdmVkIGluIFNldE1lbW9yeUF0dHJpYnV0ZXMoKSwgd2hp Y2ggbWlnaHQgZmFpbCB0aGlzDQo+ID4gKyAgICAvLyBjYWxsaW5nLiBJdCdzIHJhcmUgY2FzZSBz byBpdCdzIE9LIHRvIGxldCBhIGZldyB0aW55IGhvbGVzIGJlIG5vdC1ndWFyZGVkLg0KPiA+ICsg ICAgLy8NCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgREVC VUcgKChERUJVR19XQVJOLCAiRmFpbGVkIHRvIGd1YXJkIGZyZWVkIHBhZ2VzOiAlcCAoJWx1KVxu IiwNCj4gQmFzZUFkZHJlc3MsIChVSU5UNjQpUGFnZXMpKTsNCj4gPiArICAgIH0NCj4gPiArICAg IG1Pbkd1YXJkaW5nID0gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICBSZWNvcmQgZnJlZWQgcGFnZXMgYXMgd2VsbCBhcyBtYXJrIHRoZW0gYXMgbm90LXBy ZXNlbnQsIGlmIGVuYWJsZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEJhc2VBZGRyZXNz ICAgQmFzZSBhZGRyZXNzIG9mIGp1c3QgZnJlZWQgcGFnZXMuDQo+ID4gKyAgQHBhcmFtW2luXSAg UGFnZXMgICAgICAgICBOdW1iZXIgb2YgZnJlZWQgcGFnZXMuDQo+ID4gKw0KPiA+ICsgIEByZXR1 cm4gVk9JRC4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ID4gK0d1YXJkRnJl ZWRQYWdlc0NoZWNrZWQgKA0KPiA+ICsgIElOICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBCYXNl QWRkcmVzcywNCj4gPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgUGFnZXMNCj4gPiAr ICApDQo+ID4gK3sNCj4gPiArICBpZiAoSXNIZWFwR3VhcmRFbmFibGVkIChHVUFSRF9IRUFQX1RZ UEVfRlJFRUQpKSB7DQo+ID4gKyAgICBHdWFyZEZyZWVkUGFnZXMgKEJhc2VBZGRyZXNzLCBQYWdl cyk7DQo+ID4gKyAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBNYXJrIGFsbCBw YWdlcyBmcmVlZCBiZWZvcmUgQ1BVIEFyY2ggUHJvdG9jb2wgYXMgbm90LXByZXNlbnQuDQo+ID4g Kw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtHdWFyZEFsbEZyZWVkUGFnZXMgKA0KPiA+ICsg IFZPSUQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UTiAgICAgRW50cmllc1tHVUFSREVE X0hFQVBfTUFQX1RBQkxFX0RFUFRIXTsNCj4gPiArICBVSU5UTiAgICAgU2hpZnRzW0dVQVJERURf SEVBUF9NQVBfVEFCTEVfREVQVEhdOw0KPiA+ICsgIFVJTlROICAgICBJbmRpY2VzW0dVQVJERURf SEVBUF9NQVBfVEFCTEVfREVQVEhdOw0KPiA+ICsgIFVJTlQ2NCAgICBUYWJsZXNbR1VBUkRFRF9I RUFQX01BUF9UQUJMRV9ERVBUSF07DQo+ID4gKyAgVUlOVDY0ICAgIEFkZHJlc3Nlc1tHVUFSREVE X0hFQVBfTUFQX1RBQkxFX0RFUFRIXTsNCj4gPiArICBVSU5UNjQgICAgVGFibGVFbnRyeTsNCj4g PiArICBVSU5UNjQgICAgQWRkcmVzczsNCj4gPiArICBVSU5UNjQgICAgR3VhcmRQYWdlOw0KPiA+ ICsgIElOVE4gICAgICBMZXZlbDsNCj4gPiArICBVSU5UTiAgICAgQml0SW5kZXg7DQo+ID4gKyAg VUlOVE4gICAgIEd1YXJkUGFnZU51bWJlcjsNCj4gPiArDQo+ID4gKyAgaWYgKG1HdWFyZGVkTWVt b3J5TWFwID09IDAgfHwNCj4gPiArICAgICAgbU1hcExldmVsID09IDAgfHwNCj4gPiArICAgICAg bU1hcExldmVsID4gR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBUSCkgew0KPiA+ICsgICAgcmV0 dXJuOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgQ29weU1lbSAoRW50cmllcywgbUxldmVsTWFz aywgc2l6ZW9mIChFbnRyaWVzKSk7DQo+ID4gKyAgQ29weU1lbSAoU2hpZnRzLCBtTGV2ZWxTaGlm dCwgc2l6ZW9mIChTaGlmdHMpKTsNCj4gPiArDQo+ID4gKyAgU2V0TWVtIChUYWJsZXMsIHNpemVv ZihUYWJsZXMpLCAwKTsNCj4gPiArICBTZXRNZW0gKEFkZHJlc3Nlcywgc2l6ZW9mKEFkZHJlc3Nl cyksIDApOw0KPiA+ICsgIFNldE1lbSAoSW5kaWNlcywgc2l6ZW9mKEluZGljZXMpLCAwKTsNCj4g PiArDQo+ID4gKyAgTGV2ZWwgICAgICAgICAgID0gR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBU SCAtIG1NYXBMZXZlbDsNCj4gPiArICBUYWJsZXNbTGV2ZWxdICAgPSBtR3VhcmRlZE1lbW9yeU1h cDsNCj4gPiArICBBZGRyZXNzICAgICAgICAgPSAwOw0KPiA+ICsgIEd1YXJkUGFnZSAgICAgICA9 IChVSU5UNjQpLTE7DQo+ID4gKyAgR3VhcmRQYWdlTnVtYmVyID0gMDsNCj4gPiArDQo+ID4gKyAg d2hpbGUgKFRSVUUpIHsNCj4gPiArICAgIGlmIChJbmRpY2VzW0xldmVsXSA+IEVudHJpZXNbTGV2 ZWxdKSB7DQo+ID4gKyAgICAgIFRhYmxlc1tMZXZlbF0gPSAwOw0KPiA+ICsgICAgICBMZXZlbCAg ICAgICAgLT0gMTsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIFRhYmxlRW50cnkgID0g KChVSU5UNjQgKikoVUlOVE4pKFRhYmxlc1tMZXZlbF0pKVtJbmRpY2VzW0xldmVsXV07DQo+ID4g KyAgICAgIEFkZHJlc3MgICAgID0gQWRkcmVzc2VzW0xldmVsXTsNCj4gPiArDQo+ID4gKyAgICAg IGlmIChMZXZlbCA8IEdVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEggLSAxKSB7DQo+ID4gKyAg ICAgICAgTGV2ZWwgICAgICAgICAgICArPSAxOw0KPiA+ICsgICAgICAgIFRhYmxlc1tMZXZlbF0g ICAgID0gVGFibGVFbnRyeTsNCj4gPiArICAgICAgICBBZGRyZXNzZXNbTGV2ZWxdICA9IEFkZHJl c3M7DQo+ID4gKyAgICAgICAgSW5kaWNlc1tMZXZlbF0gICAgPSAwOw0KPiA+ICsNCj4gPiArICAg ICAgICBjb250aW51ZTsNCj4gPiArICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICBCaXRJbmRl eCA9IDE7DQo+ID4gKyAgICAgICAgd2hpbGUgKEJpdEluZGV4ICE9IDApIHsNCj4gPiArICAgICAg ICAgIGlmICgoVGFibGVFbnRyeSAmIEJpdEluZGV4KSAhPSAwKSB7DQo+ID4gKyAgICAgICAgICAg IGlmIChHdWFyZFBhZ2UgPT0gKFVJTlQ2NCktMSkgew0KPiA+ICsgICAgICAgICAgICAgIEd1YXJk UGFnZSA9IEFkZHJlc3M7DQo+ID4gKyAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgKytH dWFyZFBhZ2VOdW1iZXI7DQo+ID4gKyAgICAgICAgICB9IGVsc2UgaWYgKEd1YXJkUGFnZU51bWJl ciA+IDApIHsNCj4gPiArICAgICAgICAgICAgR3VhcmRGcmVlZFBhZ2VzIChHdWFyZFBhZ2UsIEd1 YXJkUGFnZU51bWJlcik7DQo+ID4gKyAgICAgICAgICAgIEd1YXJkUGFnZU51bWJlciA9IDA7DQo+ ID4gKyAgICAgICAgICAgIEd1YXJkUGFnZSAgICAgICA9IChVSU5UNjQpLTE7DQo+ID4gKyAgICAg ICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgaWYgKFRhYmxlRW50cnkgPT0gMCkgew0KPiA+ ICsgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAg ICAgICBBZGRyZXNzICs9IEVGSV9QQUdFU19UT19TSVpFICgxKTsNCj4gPiArICAgICAgICAgIEJp dEluZGV4ID0gTFNoaWZ0VTY0IChCaXRJbmRleCwgMSk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsg ICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKExldmVsIDwgKEdVQVJERURf SEVBUF9NQVBfVEFCTEVfREVQVEggLSAoSU5UTiltTWFwTGV2ZWwpKSB7DQo+ID4gKyAgICAgIGJy ZWFrOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIEluZGljZXNbTGV2ZWxdICs9IDE7DQo+ ID4gKyAgICBBZGRyZXNzID0gKExldmVsID09IDApID8gMCA6IEFkZHJlc3Nlc1tMZXZlbCAtIDFd Ow0KPiA+ICsgICAgQWRkcmVzc2VzW0xldmVsXSA9IEFkZHJlc3MgfCBMU2hpZnRVNjQgKEluZGlj ZXNbTGV2ZWxdLCBTaGlmdHNbTGV2ZWxdKTsNCj4gPiArDQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICAvLw0KPiA+ICsgIC8vIFVwZGF0ZSB0aGUgbWF4aW11bSBhZGRyZXNzIG9mIGZyZWVkIHBhZ2Ug d2hpY2ggY2FuIGJlIHVzZWQgZm9yDQo+IG1lbW9yeQ0KPiA+ICsgIC8vIHByb21vdGlvbiB1cG9u IG91dC1vZi1tZW1vcnktc3BhY2UuDQo+ID4gKyAgLy8NCj4gPiArICBHZXRMYXN0R3VhcmRlZEZy ZWVQYWdlQWRkcmVzcyAoJkFkZHJlc3MpOw0KPiA+ICsgIGlmIChBZGRyZXNzICE9IDApIHsNCj4g PiArICAgIG1MYXN0UHJvbW90ZWRQYWdlID0gQWRkcmVzczsNCj4gPiArICB9DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0aGUg Z2l2ZW4gbWVtb3J5IG1hcCBkZXNjcmlwdG9yIGluIGEgbWVtb3J5DQo+IG1hcA0KPiA+ICsgIGNh biBiZSBtZXJnZWQgd2l0aCBhbnkgZ3VhcmRlZCBmcmVlIHBhZ2VzLg0KPiA+ICsNCj4gPiArICBA cGFyYW0gIE1lbW9yeU1hcEVudHJ5ICAgIEEgcG9pbnRlciB0byBhIGRlc2NyaXB0b3IgaW4gTWVt b3J5TWFwLg0KPiA+ICsgIEBwYXJhbSAgTWF4QWRkcmVzcyAgICAgICAgTWF4aW11bSBhZGRyZXNz IHRvIHN0b3AgdGhlIG1lcmdlLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFZPSUQNCj4gPiArDQo+ ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK01lcmdlR3VhcmRQYWdlcyAoDQo+ID4gKyAgSU4gRUZJ X01FTU9SWV9ERVNDUklQVE9SICAgICAgKk1lbW9yeU1hcEVudHJ5LA0KPiA+ICsgIElOIEVGSV9Q SFlTSUNBTF9BRERSRVNTICAgICAgIE1heEFkZHJlc3MNCj4gPiArICApDQo+ID4gK3sNCj4gPiAr ICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgRW5kQWRkcmVzczsNCj4gPiArICBVSU5UNjQg ICAgICAgICAgICAgICAgICAgICAgQml0bWFwOw0KPiA+ICsgIElOVE4gICAgICAgICAgICAgICAg ICAgICAgICBQYWdlczsNCj4gPiArDQo+ID4gKyAgaWYgKCFJc0hlYXBHdWFyZEVuYWJsZWQgKEdV QVJEX0hFQVBfVFlQRV9GUkVFRCkgfHwNCj4gPiArICAgICAgTWVtb3J5TWFwRW50cnktPlR5cGUg Pj0gRWZpTWVtb3J5TWFwcGVkSU8pIHsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIEJpdG1hcCA9IDA7DQo+ID4gKyAgUGFnZXMgID0gRUZJX1NJWkVfVE9fUEFHRVMg KE1heEFkZHJlc3MgLSBNZW1vcnlNYXBFbnRyeS0NCj4gPlBoeXNpY2FsU3RhcnQpOw0KPiA+ICsg IFBhZ2VzIC09IE1lbW9yeU1hcEVudHJ5LT5OdW1iZXJPZlBhZ2VzOw0KPiA+ICsgIHdoaWxlIChQ YWdlcyA+IDApIHsNCj4gPiArICAgIGlmIChCaXRtYXAgPT0gMCkgew0KPiA+ICsgICAgICBFbmRB ZGRyZXNzID0gTWVtb3J5TWFwRW50cnktPlBoeXNpY2FsU3RhcnQgKw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgRUZJX1BBR0VTX1RPX1NJWkUgKE1lbW9yeU1hcEVudHJ5LT5OdW1iZXJPZlBhZ2Vz KTsNCj4gPiArICAgICAgQml0bWFwID0gR2V0R3VhcmRlZE1lbW9yeUJpdHMgKEVuZEFkZHJlc3Ms DQo+IEdVQVJERURfSEVBUF9NQVBfRU5UUllfQklUUyk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ ICsgICAgaWYgKChCaXRtYXAgJiAxKSA9PSAwKSB7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsg ICAgfQ0KPiA+ICsNCj4gPiArICAgIFBhZ2VzLS07DQo+ID4gKyAgICBNZW1vcnlNYXBFbnRyeS0+ TnVtYmVyT2ZQYWdlcysrOw0KPiA+ICsgICAgQml0bWFwID0gUlNoaWZ0VTY0IChCaXRtYXAsIDEp Ow0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUHV0IHBhcnQgKGF0 IG1vc3QgNjQgcGFnZXMgYSB0aW1lKSBndWFyZGVkIGZyZWUgcGFnZXMgYmFjayB0byBmcmVlIHBh Z2UNCj4gcG9vbC4NCj4gPiArDQo+ID4gKyAgRnJlZWQgbWVtb3J5IGd1YXJkIGlzIHVzZWQgdG8g ZGV0ZWN0IFVzZS1BZnRlci1GcmVlIChVQUYpIG1lbW9yeSBpc3N1ZSwNCj4gd2hpY2gNCj4gPiAr ICBtYWtlcyB1c2Ugb2YgJ1VzZWQgdGhlbiB0aHJvdyBhd2F5JyB3YXkgdG8gZGV0ZWN0IGFueSBp bGxlZ2FsIGFjY2VzcyB0bw0KPiBmcmVlZA0KPiA+ICsgIG1lbW9yeS4gVGhlIHRocm93bi1hd2F5 IG1lbW9yeSB3aWxsIGJlIG1hcmtlZCBhcyBub3QtcHJlc2VudCBzbyB0aGF0DQo+IGFueSBhY2Nl c3MNCj4gPiArICB0byB0aG9zZSBtZW1vcnkgKGFmdGVyIGZyZWUpIHdpbGwgYmUgY2F1Z2h0IGJ5 IHBhZ2UtZmF1bHQgZXhjZXB0aW9uLg0KPiA+ICsNCj4gPiArICBUaGUgcHJvYmxlbSBpcyB0aGF0 IHRoaXMgd2lsbCBjb25zdW1lIGxvdHMgb2YgbWVtb3J5IHNwYWNlLiBPbmNlIG5vDQo+IG1lbW9y eQ0KPiA+ICsgIGxlZnQgaW4gcG9vbCB0byBhbGxvY2F0ZSwgd2UgaGF2ZSB0byByZXN0b3JlIHBh cnQgb2YgdGhlIGZyZWVkIHBhZ2VzIHRvIHRoZWlyDQo+ID4gKyAgbm9ybWFsIGZ1bmN0aW9uLiBP dGhlcndpc2UgdGhlIHdob2xlIHN5c3RlbSB3aWxsIHN0b3AgZnVuY3Rpb25pbmcuDQo+ID4gKw0K PiA+ICsgIEBwYXJhbSAgU3RhcnRBZGRyZXNzICAgIFN0YXJ0IGFkZHJlc3Mgb2YgcHJvbW90ZWQg bWVtb3J5Lg0KPiA+ICsgIEBwYXJhbSAgRW5kQWRkcmVzcyAgICAgIEVuZCBhZGRyZXNzIG9mIHBy b21vdGVkIG1lbW9yeS4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUUlVFICAgIFN1Y2NlZWRlZCB0 byBwcm9tb3RlIG1lbW9yeS4NCj4gPiArICBAcmV0dXJuIEZBTFNFICAgTm8gZnJlZSBtZW1vcnkg Zm91bmQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtQcm9tb3RlR3VhcmRl ZEZyZWVQYWdlcyAoDQo+ID4gKyAgT1VUIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgKlN0YXJ0 QWRkcmVzcywNCj4gPiArICBPVVQgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAqRW5kQWRkcmVz cw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1 czsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBBdmFpbGFibGVQYWdlczsNCj4gPiAr ICBVSU5UNjQgICAgICAgICAgICAgICAgICBCaXRtYXA7DQo+ID4gKyAgRUZJX1BIWVNJQ0FMX0FE RFJFU1MgICAgU3RhcnQ7DQo+ID4gKw0KPiA+ICsgIGlmICghSXNIZWFwR3VhcmRFbmFibGVkIChH VUFSRF9IRUFQX1RZUEVfRlJFRUQpKSB7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFNpbWlsYXIgdG8gbWVtb3J5IGFsbG9jYXRp b24gc2VydmljZSwgYWx3YXlzIHNlYXJjaCB0aGUgZnJlZWQgcGFnZXMgaW4NCj4gPiArICAvLyBk ZXNjZW5kaW5nIGRpcmVjdGlvbi4NCj4gPiArICAvLw0KPiA+ICsgIFN0YXJ0ICAgICAgICAgICA9 IG1MYXN0UHJvbW90ZWRQYWdlOw0KPiA+ICsgIEF2YWlsYWJsZVBhZ2VzICA9IDA7DQo+ID4gKyAg d2hpbGUgKEF2YWlsYWJsZVBhZ2VzID09IDApIHsNCj4gPiArICAgIFN0YXJ0IC09IEVGSV9QQUdF U19UT19TSVpFIChHVUFSREVEX0hFQVBfTUFQX0VOVFJZX0JJVFMpOw0KPiA+ICsgICAgLy8NCj4g PiArICAgIC8vIElmIHRoZSBhZGRyZXNzIHdyYXBzIGFyb3VuZCwgdHJ5IHRoZSByZWFsbHkgZnJl ZWQgcGFnZXMgYXQgdG9wLg0KPiA+ICsgICAgLy8NCj4gPiArICAgIGlmIChTdGFydCA+IG1MYXN0 UHJvbW90ZWRQYWdlKSB7DQo+ID4gKyAgICAgIEdldExhc3RHdWFyZGVkRnJlZVBhZ2VBZGRyZXNz ICgmU3RhcnQpOw0KPiA+ICsgICAgICBBU1NFUlQgKFN0YXJ0ICE9IDApOw0KPiA+ICsgICAgICBT dGFydCAtPSBFRklfUEFHRVNfVE9fU0laRSAoR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CSVRTKTsN Cj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBCaXRtYXAgPSBHZXRHdWFyZGVkTWVtb3J5Qml0 cyAoU3RhcnQsDQo+IEdVQVJERURfSEVBUF9NQVBfRU5UUllfQklUUyk7DQo+ID4gKyAgICB3aGls ZSAoQml0bWFwID4gMCkgew0KPiA+ICsgICAgICBpZiAoKEJpdG1hcCAmIDEpICE9IDApIHsNCj4g PiArICAgICAgICArK0F2YWlsYWJsZVBhZ2VzOw0KPiA+ICsgICAgICB9IGVsc2UgaWYgKEF2YWls YWJsZVBhZ2VzID09IDApIHsNCj4gPiArICAgICAgICBTdGFydCArPSBFRklfUEFHRVNfVE9fU0la RSAoMSk7DQo+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gKyAg ICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIEJpdG1hcCA9IFJTaGlmdFU2NCAoQml0bWFwLCAxKTsN Cj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChBdmFpbGFibGVQYWdlcykg ew0KPiA+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiUHJvbW90ZWQgcGFnZXM6ICVsWCAoJWx4 KVxyXG4iLCBTdGFydCwNCj4gKFVJTlQ2NClBdmFpbGFibGVQYWdlcykpOw0KPiA+ICsgICAgQ2xl YXJHdWFyZGVkTWVtb3J5Qml0cyAoU3RhcnQsIEF2YWlsYWJsZVBhZ2VzKTsNCj4gPiArDQo+ID4g KyAgICBpZiAoZ0NwdSAhPSBOVUxMKSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIFNl dCBmbGFnIHRvIG1ha2Ugc3VyZSBhbGxvY2F0aW5nIG1lbW9yeSB3aXRob3V0IEdVQVJEIGZvciBw YWdlIHRhYmxlDQo+ID4gKyAgICAgIC8vIG9wZXJhdGlvbjsgb3RoZXJ3aXNlIGluZmluaXRlIGxv b3BzIGNvdWxkIGJlIGNhdXNlZC4NCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgbU9uR3VhcmRp bmcgPSBUUlVFOw0KPiA+ICsgICAgICBTdGF0dXMgPSBnQ3B1LT5TZXRNZW1vcnlBdHRyaWJ1dGVz IChnQ3B1LCBTdGFydCwNCj4gRUZJX1BBR0VTX1RPX1NJWkUoQXZhaWxhYmxlUGFnZXMpLCAwKTsN Cj4gPiArICAgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiArICAgICAgbU9uR3Vh cmRpbmcgPSBGQUxTRTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBtTGFzdFByb21vdGVk UGFnZSA9IFN0YXJ0Ow0KPiA+ICsgICAgKlN0YXJ0QWRkcmVzcyAgICAgPSBTdGFydDsNCj4gPiAr ICAgICpFbmRBZGRyZXNzICAgICAgID0gU3RhcnQgKyBFRklfUEFHRVNfVE9fU0laRSAoQXZhaWxh YmxlUGFnZXMpIC0gMTsNCj4gPiArICAgIHJldHVybiBUUlVFOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAgLyoqDQo+ID4gICAgIE5v dGlmeSBmdW5jdGlvbiB1c2VkIHRvIHNldCBhbGwgR3VhcmQgcGFnZXMgYmVmb3JlIENQVSBBcmNo IFByb3RvY29sDQo+IGluc3RhbGxlZC4NCj4gPiAgICoqLw0KPiA+IEBAIC0xMjEyLDcgKzE1OTIs MjAgQEAgSGVhcEd1YXJkQ3B1QXJjaFByb3RvY29sTm90aWZ5ICgNCj4gPiAgICAgKQ0KPiA+ICAg ew0KPiA+ICAgICBBU1NFUlQgKGdDcHUgIT0gTlVMTCk7DQo+ID4gLSAgU2V0QWxsR3VhcmRQYWdl cyAoKTsNCj4gPiArDQo+ID4gKyAgaWYgKElzSGVhcEd1YXJkRW5hYmxlZA0KPiAoR1VBUkRfSEVB UF9UWVBFX1BBR0V8R1VBUkRfSEVBUF9UWVBFX1BPT0wpICYmDQo+ID4gKyAgICAgIElzSGVhcEd1 YXJkRW5hYmxlZCAoR1VBUkRfSEVBUF9UWVBFX0ZSRUVEKSkgew0KPiA+ICsgICAgREVCVUcgKChE RUJVR19FUlJPUiwgIkhlYXAgZ3VhcmQgYW5kIGZyZWVkIG1lbW9yeSBndWFyZCBjYW5ub3QgYmUN Cj4gZW5hYmxlZCBhdCB0aGUgc2FtZSB0aW1lLlxuIikpOw0KPiA+ICsgICAgQ3B1RGVhZExvb3Ag KCk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoSXNIZWFwR3VhcmRFbmFibGVkDQo+IChH VUFSRF9IRUFQX1RZUEVfUEFHRXxHVUFSRF9IRUFQX1RZUEVfUE9PTCkpIHsNCj4gPiArICAgIFNl dEFsbEd1YXJkUGFnZXMgKCk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoSXNIZWFwR3Vh cmRFbmFibGVkIChHVUFSRF9IRUFQX1RZUEVfRlJFRUQpKSB7DQo+ID4gKyAgICBHdWFyZEFsbEZy ZWVkUGFnZXMgKCk7DQo+ID4gKyAgfQ0KPiA+ICAgfQ0KPiA+DQo+ID4gICAvKioNCj4gPiBAQCAt MTI2NCw2ICsxNjU3LDEwIEBAIER1bXBHdWFyZGVkTWVtb3J5Qml0bWFwICgNCj4gPiAgICAgQ0hB UjggICAgICpSdWxlcjE7DQo+ID4gICAgIENIQVI4ICAgICAqUnVsZXIyOw0KPiA+DQo+ID4gKyAg aWYgKCFJc0hlYXBHdWFyZEVuYWJsZWQgKEdVQVJEX0hFQVBfVFlQRV9BTEwpKSB7DQo+ID4gKyAg ICByZXR1cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAgICAgaWYgKG1HdWFyZGVkTWVtb3J5TWFw ID09IDAgfHwNCj4gPiAgICAgICAgIG1NYXBMZXZlbCA9PSAwIHx8DQo+ID4gICAgICAgICBtTWFw TGV2ZWwgPiBHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIKSB7DQo+ID4gZGlmZiAtLWdpdCBh L01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vSGVhcEd1YXJkLmgNCj4gYi9NZGVNb2R1bGVQa2cv Q29yZS9EeGUvTWVtL0hlYXBHdWFyZC5oDQo+ID4gaW5kZXggOGMzNDY5MjQzOS4uNTVhOTFlYzA5 OCAxMDA2NDQNCj4gPiAtLS0gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL0hlYXBHdWFyZC5o DQo+ID4gKysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9IZWFwR3VhcmQuaA0KPiA+IEBA IC0xLDcgKzEsNyBAQA0KPiA+ICAgLyoqIEBmaWxlDQo+ID4gICAgIERhdGEgdHlwZSwgbWFjcm9z IGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIG9mIGhlYXAgZ3VhcmQgZmVhdHVyZS4NCj4gPg0KPiA+ IC1Db3B5cmlnaHQgKGMpIDIwMTcsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLjxCUj4NCj4gPiArQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIEludGVsIENvcnBvcmF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFj Y29tcGFueWluZyBtYXRlcmlhbHMNCj4gPiAgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFi bGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj4gTGljZW5zZQ0K PiA+ICAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0 IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZA0KPiBhdA0KPiA+IEBAIC0xNjAsNiArMTYwLDkg QEAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRg0KPiBBTlkgS0lORCwg RUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gPiAgIC8vDQo+ID4gICAjZGVmaW5lIEdVQVJE X0hFQVBfVFlQRV9QQUdFICAgICAgICBCSVQwDQo+ID4gICAjZGVmaW5lIEdVQVJEX0hFQVBfVFlQ RV9QT09MICAgICAgICBCSVQxDQo+ID4gKyNkZWZpbmUgR1VBUkRfSEVBUF9UWVBFX0ZSRUVEICAg ICAgIEJJVDQNCj4gPiArI2RlZmluZSBHVUFSRF9IRUFQX1RZUEVfQUxMICAgICAgICAgXA0KPiA+ ICsNCj4gKEdVQVJEX0hFQVBfVFlQRV9QQUdFfEdVQVJEX0hFQVBfVFlQRV9QT09MfEdVQVJEX0hF QVBfVFlQRV9GUg0KPiBFRUQpDQo+ID4NCj4gPiAgIC8vDQo+ID4gICAvLyBEZWJ1ZyBtZXNzYWdl IGxldmVsDQo+ID4gQEAgLTM5MiwxMSArMzk1LDEzIEBAIEFkanVzdFBvb2xIZWFkRiAoDQo+ID4g ICAvKioNCj4gPiAgICAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBoZWFwIGd1YXJkIGlzIGVuYWJsZWQg Zm9yIHBhZ2UgYW5kL29yIHBvb2wgYWxsb2NhdGlvbi4NCj4gPg0KPiA+ICsgIEBwYXJhbVtpbl0g IEd1YXJkVHlwZSAgIFNwZWNpZnkgdGhlIHN1Yi10eXBlKHMpIG9mIEhlYXAgR3VhcmQuDQo+ID4g Kw0KPiA+ICAgICBAcmV0dXJuIFRSVUUvRkFMU0UuDQo+ID4gICAqKi8NCj4gPiAgIEJPT0xFQU4N Cj4gPiAgIElzSGVhcEd1YXJkRW5hYmxlZCAoDQo+ID4gLSAgVk9JRA0KPiA+ICsgIFVJTlQ4ICAg ICAgICAgICBHdWFyZFR5cGUNCj4gPiAgICAgKTsNCj4gPg0KPiA+ICAgLyoqDQo+ID4gQEAgLTQw Nyw2ICs0MTIsNjIgQEAgSGVhcEd1YXJkQ3B1QXJjaFByb3RvY29sTm90aWZ5ICgNCj4gPiAgICAg Vk9JRA0KPiA+ICAgICApOw0KPiA+DQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gY2hl Y2tzIHRvIHNlZSBpZiB0aGUgZ2l2ZW4gbWVtb3J5IG1hcCBkZXNjcmlwdG9yIGluIGEgbWVtb3J5 DQo+IG1hcA0KPiA+ICsgIGNhbiBiZSBtZXJnZWQgd2l0aCBhbnkgZ3VhcmRlZCBmcmVlIHBhZ2Vz Lg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIE1lbW9yeU1hcEVudHJ5ICAgIEEgcG9pbnRlciB0byBh IGRlc2NyaXB0b3IgaW4gTWVtb3J5TWFwLg0KPiA+ICsgIEBwYXJhbSAgTWF4QWRkcmVzcyAgICAg ICAgTWF4aW11bSBhZGRyZXNzIHRvIHN0b3AgdGhlIG1lcmdlLg0KPiA+ICsNCj4gPiArICBAcmV0 dXJuIFZPSUQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK01lcmdlR3VhcmRQYWdl cyAoDQo+ID4gKyAgSU4gRUZJX01FTU9SWV9ERVNDUklQVE9SICAgICAgKk1lbW9yeU1hcEVudHJ5 LA0KPiA+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgIE1heEFkZHJlc3MNCj4gPiAr ICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVjb3JkIGZyZWVkIHBhZ2VzIGFzIHdlbGwg YXMgbWFyayB0aGVtIGFzIG5vdC1wcmVzZW50LCBpZiBlbmFibGVkLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICBCYXNlQWRkcmVzcyAgIEJhc2UgYWRkcmVzcyBvZiBqdXN0IGZyZWVkIHBhZ2Vz Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIFBhZ2VzICAgICAgICAgTnVtYmVyIG9mIGZyZWVkIHBhZ2Vz Lg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFZPSUQuDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4g K0VGSUFQSQ0KPiA+ICtHdWFyZEZyZWVkUGFnZXNDaGVja2VkICgNCj4gPiArICBJTiAgRUZJX1BI WVNJQ0FMX0FERFJFU1MgICAgQmFzZUFkZHJlc3MsDQo+ID4gKyAgSU4gIFVJTlROICAgICAgICAg ICAgICAgICAgIFBhZ2VzDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFB1dCBw YXJ0IChhdCBtb3N0IDY0IHBhZ2VzIGEgdGltZSkgZ3VhcmRlZCBmcmVlIHBhZ2VzIGJhY2sgdG8g ZnJlZSBwYWdlDQo+IHBvb2wuDQo+ID4gKw0KPiA+ICsgIEZyZWVkIG1lbW9yeSBndWFyZCBpcyB1 c2VkIHRvIGRldGVjdCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBtZW1vcnkgaXNzdWUsDQo+IHdoaWNo DQo+ID4gKyAgbWFrZXMgdXNlIG9mICdVc2VkIHRoZW4gdGhyb3cgYXdheScgd2F5IHRvIGRldGVj dCBhbnkgaWxsZWdhbCBhY2Nlc3MgdG8NCj4gZnJlZWQNCj4gPiArICBtZW1vcnkuIFRoZSB0aHJv d24tYXdheSBtZW1vcnkgd2lsbCBiZSBtYXJrZWQgYXMgbm90LXByZXNlbnQgc28gdGhhdA0KPiBh bnkgYWNjZXNzDQo+ID4gKyAgdG8gdGhvc2UgbWVtb3J5IChhZnRlciBmcmVlKSB3aWxsIGJlIGNh dWdodCBieSBwYWdlLWZhdWx0IGV4Y2VwdGlvbi4NCj4gPiArDQo+ID4gKyAgVGhlIHByb2JsZW0g aXMgdGhhdCB0aGlzIHdpbGwgY29uc3VtZSBsb3RzIG9mIG1lbW9yeSBzcGFjZS4gT25jZSBubw0K PiBtZW1vcnkNCj4gPiArICBsZWZ0IGluIHBvb2wgdG8gYWxsb2NhdGUsIHdlIGhhdmUgdG8gcmVz dG9yZSBwYXJ0IG9mIHRoZSBmcmVlZCBwYWdlcyB0byB0aGVpcg0KPiA+ICsgIG5vcm1hbCBmdW5j dGlvbi4gT3RoZXJ3aXNlIHRoZSB3aG9sZSBzeXN0ZW0gd2lsbCBzdG9wIGZ1bmN0aW9uaW5nLg0K PiA+ICsNCj4gPiArICBAcGFyYW0gIFN0YXJ0QWRkcmVzcyAgICBTdGFydCBhZGRyZXNzIG9mIHBy b21vdGVkIG1lbW9yeS4NCj4gPiArICBAcGFyYW0gIEVuZEFkZHJlc3MgICAgICBFbmQgYWRkcmVz cyBvZiBwcm9tb3RlZCBtZW1vcnkuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVFJVRSAgICBTdWNj ZWVkZWQgdG8gcHJvbW90ZSBtZW1vcnkuDQo+ID4gKyAgQHJldHVybiBGQUxTRSAgIE5vIGZyZWUg bWVtb3J5IGZvdW5kLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArUHJvbW90 ZUd1YXJkZWRGcmVlUGFnZXMgKA0KPiA+ICsgIE9VVCBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAg ICpTdGFydEFkZHJlc3MsDQo+ID4gKyAgT1VUIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgKkVu ZEFkZHJlc3MNCj4gPiArICApOw0KPiA+ICsNCj4gPiAgIGV4dGVybiBCT09MRUFOIG1Pbkd1YXJk aW5nOw0KPiA+DQo+ID4gICAjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0Nv cmUvRHhlL01lbS9QYWdlLmMNCj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL1BhZ2UuYw0K PiA+IGluZGV4IDNiNGNjMDhlN2MuLjlkOWFiY2Y1NjUgMTAwNjQ0DQo+ID4gLS0tIGEvTWRlTW9k dWxlUGtnL0NvcmUvRHhlL01lbS9QYWdlLmMNCj4gPiArKysgYi9NZGVNb2R1bGVQa2cvQ29yZS9E eGUvTWVtL1BhZ2UuYw0KPiA+IEBAIC00MDEsOSArNDAxLDExIEBAIFByb21vdGVNZW1vcnlSZXNv dXJjZSAoDQo+ID4gICAgIFZPSUQNCj4gPiAgICAgKQ0KPiA+ICAgew0KPiA+IC0gIExJU1RfRU5U UlkgICAgICAgICAqTGluazsNCj4gPiAtICBFRklfR0NEX01BUF9FTlRSWSAgKkVudHJ5Ow0KPiA+ IC0gIEJPT0xFQU4gICAgICAgICAgICBQcm9tb3RlZDsNCj4gPiArICBMSVNUX0VOVFJZICAgICAg ICAgICAgKkxpbms7DQo+ID4gKyAgRUZJX0dDRF9NQVBfRU5UUlkgICAgICpFbnRyeTsNCj4gPiAr ICBCT09MRUFOICAgICAgICAgICAgICAgUHJvbW90ZWQ7DQo+ID4gKyAgRUZJX1BIWVNJQ0FMX0FE RFJFU1MgIFN0YXJ0QWRkcmVzczsNCj4gPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgRW5kQWRk cmVzczsNCj4gPg0KPiA+ICAgICBERUJVRyAoKERFQlVHX1BBR0UsICJQcm9tb3RlIHRoZSBtZW1v cnkgcmVzb3VyY2VcbiIpKTsNCj4gPg0KPiA+IEBAIC00NTEsNiArNDUzLDI0IEBAIFByb21vdGVN ZW1vcnlSZXNvdXJjZSAoDQo+ID4NCj4gPiAgICAgQ29yZVJlbGVhc2VHY2RNZW1vcnlMb2NrICgp Ow0KPiA+DQo+ID4gKyAgaWYgKCFQcm9tb3RlZCkgew0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8v IElmIGZyZWVkLW1lbW9yeSBndWFyZCBpcyBlbmFibGVkLCB3ZSBjb3VsZCBwcm9tb3RlIHBhZ2Vz IGZyb20NCj4gPiArICAgIC8vIGd1YXJkZWQgZnJlZSBwYWdlcy4NCj4gPiArICAgIC8vDQo+ID4g KyAgICBQcm9tb3RlZCA9IFByb21vdGVHdWFyZGVkRnJlZVBhZ2VzICgmU3RhcnRBZGRyZXNzLCAm RW5kQWRkcmVzcyk7DQo+ID4gKyAgICBpZiAoUHJvbW90ZWQpIHsNCj4gPiArICAgICAgQ29yZUFj cXVpcmVHY2RNZW1vcnlMb2NrICgpOw0KPiA+ICsgICAgICBDb3JlQWRkUmFuZ2UgKA0KPiA+ICsg ICAgICAgIEVmaUNvbnZlbnRpb25hbE1lbW9yeSwNCj4gPiArICAgICAgICBTdGFydEFkZHJlc3Ms DQo+ID4gKyAgICAgICAgRW5kQWRkcmVzcywNCj4gPiArICAgICAgICBFRklfTUVNT1JZX1VDIHwg RUZJX01FTU9SWV9XQyB8IEVGSV9NRU1PUllfV1QgfA0KPiBFRklfTUVNT1JZX1dCDQo+ID4gKyAg ICAgICAgKTsNCj4gPiArICAgICAgQ29yZVJlbGVhc2VHY2RNZW1vcnlMb2NrICgpOw0KPiA+ICsg ICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gICAgIHJldHVybiBQcm9tb3RlZDsNCj4gPiAgIH0N Cj4gPiAgIC8qKg0KPiA+IEBAIC04OTYsOSArOTE2LDE1IEBAIENvcmVDb252ZXJ0UGFnZXNFeCAo DQo+ID4gICAgICAgfQ0KPiA+DQo+ID4gICAgICAgLy8NCj4gPiAtICAgIC8vIEFkZCBvdXIgbmV3 IHJhbmdlIGluDQo+ID4gKyAgICAvLyBBZGQgb3VyIG5ldyByYW5nZSBpbi4gRG9uJ3QgZG8gdGhp cyBmb3IgZnJlZWQgcGFnZXMgaWYgZnJlZWQtbWVtb3J5DQo+ID4gKyAgICAvLyBndWFyZCBpcyBl bmFibGVkLg0KPiA+ICAgICAgIC8vDQo+ID4gLSAgICBDb3JlQWRkUmFuZ2UgKE1lbVR5cGUsIFN0 YXJ0LCBSYW5nZUVuZCwgQXR0cmlidXRlKTsNCj4gPiArICAgIGlmICghSXNIZWFwR3VhcmRFbmFi bGVkIChHVUFSRF9IRUFQX1RZUEVfRlJFRUQpIHx8DQo+ID4gKyAgICAgICAgIUNoYW5naW5nVHlw ZSB8fA0KPiA+ICsgICAgICAgIE1lbVR5cGUgIT0gRWZpQ29udmVudGlvbmFsTWVtb3J5KSB7DQo+ ID4gKyAgICAgIENvcmVBZGRSYW5nZSAoTWVtVHlwZSwgU3RhcnQsIFJhbmdlRW5kLCBBdHRyaWJ1 dGUpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiAgICAgICBpZiAoQ2hhbmdpbmdUeXBlICYmIChN ZW1UeXBlID09IEVmaUNvbnZlbnRpb25hbE1lbW9yeSkpIHsNCj4gPiAgICAgICAgIC8vDQo+ID4g ICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIERFQlVHX0NMRUFSX01FTU9SWSgpIGZvciBhbiBhZGRy ZXNzIG9mIDAgYmVjYXVzZQ0KPiB0aGlzDQo+ID4gQEAgLTE1MTQsNiArMTU0MCw3IEBAIENvcmVG cmVlUGFnZXMgKA0KPiA+DQo+ID4gICAgIFN0YXR1cyA9IENvcmVJbnRlcm5hbEZyZWVQYWdlcyAo TWVtb3J5LCBOdW1iZXJPZlBhZ2VzLCAmTWVtb3J5VHlwZSk7DQo+ID4gICAgIGlmICghRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBHdWFyZEZyZWVkUGFnZXNDaGVja2VkIChNZW1vcnks IE51bWJlck9mUGFnZXMpOw0KPiA+ICAgICAgIENvcmVVcGRhdGVQcm9maWxlICgNCj4gPiAgICAg ICAgIChFRklfUEhZU0lDQUxfQUREUkVTUykgKFVJTlROKSBSRVRVUk5fQUREUkVTUyAoMCksDQo+ ID4gICAgICAgICBNZW1vcnlQcm9maWxlQWN0aW9uRnJlZVBhZ2VzLA0KPiA+IEBAIC0xOTA4LDkg KzE5MzUsNyBAQCBEb25lOg0KPiA+ICAgICAqTWVtb3J5TWFwU2l6ZSA9IEJ1ZmZlclNpemU7DQo+ ID4NCj4gPiAgICAgREVCVUdfQ09ERSAoDQo+ID4gLSAgICBpZiAoUGNkR2V0OCAoUGNkSGVhcEd1 YXJkUHJvcGVydHlNYXNrKSAmIChCSVQxfEJJVDApKSB7DQo+ID4gLSAgICAgIER1bXBHdWFyZGVk TWVtb3J5Qml0bWFwICgpOw0KPiA+IC0gICAgfQ0KPiA+ICsgICAgRHVtcEd1YXJkZWRNZW1vcnlC aXRtYXAgKCk7DQo+ID4gICAgICk7DQo+ID4NCj4gPiAgICAgcmV0dXJuIFN0YXR1czsNCj4gPiBk aWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9Qb29sLmMNCj4gYi9NZGVNb2R1 bGVQa2cvQ29yZS9EeGUvTWVtL1Bvb2wuYw0KPiA+IGluZGV4IDFmZjIwNjFmN2YuLmI5MTgyZWE4 MDcgMTAwNjQ0DQo+ID4gLS0tIGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9Qb29sLmMNCj4g PiArKysgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL1Bvb2wuYw0KPiA+IEBAIC0xLDcgKzEs NyBAQA0KPiA+ICAgLyoqIEBmaWxlDQo+ID4gICAgIFVFRkkgTWVtb3J5IHBvb2wgbWFuYWdlbWVu dCBmdW5jdGlvbnMuDQo+ID4NCj4gPiAtQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxNiwgSW50ZWwg Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICtDb3B5cmlnaHQgKGMp IDIwMDYgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ DQo+ID4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ID4g ICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29u ZGl0aW9ucyBvZiB0aGUgQlNEDQo+IExpY2Vuc2UNCj4gPiAgIHdoaWNoIGFjY29tcGFuaWVzIHRo aXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91 bmQNCj4gYXQNCj4gPiBAQCAtMjYsNyArMjYsOCBAQCB0eXBlZGVmIHN0cnVjdCB7DQo+ID4gICB9 IFBPT0xfRlJFRTsNCj4gPg0KPiA+DQo+ID4gLSNkZWZpbmUgUE9PTF9IRUFEX1NJR05BVFVSRSAg IFNJR05BVFVSRV8zMigncCcsJ2gnLCdkJywnMCcpDQo+ID4gKyNkZWZpbmUgUE9PTF9IRUFEX1NJ R05BVFVSRSAgICAgICBTSUdOQVRVUkVfMzIoJ3AnLCdoJywnZCcsJzAnKQ0KPiA+ICsjZGVmaW5l IFBPT0xQQUdFX0hFQURfU0lHTkFUVVJFICAgU0lHTkFUVVJFXzMyKCdwJywnaCcsJ2QnLCcxJykN Cj4gPiAgIHR5cGVkZWYgc3RydWN0IHsNCj4gPiAgICAgVUlOVDMyICAgICAgICAgIFNpZ25hdHVy ZTsNCj4gPiAgICAgVUlOVDMyICAgICAgICAgIFJlc2VydmVkOw0KPiA+IEBAIC0zNjcsNiArMzY4 LDcgQEAgQ29yZUFsbG9jYXRlUG9vbEkgKA0KPiA+ICAgICBVSU5UTiAgICAgICBOb1BhZ2VzOw0K PiA+ICAgICBVSU5UTiAgICAgICBHcmFudWxhcml0eTsNCj4gPiAgICAgQk9PTEVBTiAgICAgSGFz UG9vbFRhaWw7DQo+ID4gKyAgQk9PTEVBTiAgICAgUGFnZUFzUG9vbDsNCj4gPg0KPiA+ICAgICBB U1NFUlRfTE9DS0VEICgmbVBvb2xNZW1vcnlMb2NrKTsNCj4gPg0KPiA+IEBAIC0zODYsNiArMzg4 LDcgQEAgQ29yZUFsbG9jYXRlUG9vbEkgKA0KPiA+DQo+ID4gICAgIEhhc1Bvb2xUYWlsICA9ICEo TmVlZEd1YXJkICYmDQo+ID4gICAgICAgICAgICAgICAgICAgICAgKChQY2RHZXQ4IChQY2RIZWFw R3VhcmRQcm9wZXJ0eU1hc2spICYgQklUNykgPT0gMCkpOw0KPiA+ICsgIFBhZ2VBc1Bvb2wgPSAo SXNIZWFwR3VhcmRFbmFibGVkIChHVUFSRF9IRUFQX1RZUEVfRlJFRUQpDQo+ICYmICFtT25HdWFy ZGluZyk7DQo+ID4NCj4gPiAgICAgLy8NCj4gPiAgICAgLy8gQWRqdXN0aW5nIHRoZSBTaXplIHRv IGJlIG9mIHByb3BlciBhbGlnbm1lbnQgc28gdGhhdA0KPiA+IEBAIC00MDYsNyArNDA5LDcgQEAg Q29yZUFsbG9jYXRlUG9vbEkgKA0KPiA+ICAgICAvLyBJZiBhbGxvY2F0aW9uIGlzIG92ZXIgbWF4 IHNpemUsIGp1c3QgYWxsb2NhdGUgcGFnZXMgZm9yIHRoZSByZXF1ZXN0DQo+ID4gICAgIC8vIChz bG93KQ0KPiA+ICAgICAvLw0KPiA+IC0gIGlmIChJbmRleCA+PSBTSVpFX1RPX0xJU1QgKEdyYW51 bGFyaXR5KSB8fCBOZWVkR3VhcmQpIHsNCj4gPiArICBpZiAoSW5kZXggPj0gU0laRV9UT19MSVNU IChHcmFudWxhcml0eSkgfHwgTmVlZEd1YXJkIHx8IFBhZ2VBc1Bvb2wpIHsNCj4gPiAgICAgICBp ZiAoIUhhc1Bvb2xUYWlsKSB7DQo+ID4gICAgICAgICBTaXplIC09IHNpemVvZiAoUE9PTF9UQUlM KTsNCj4gPiAgICAgICB9DQo+ID4gQEAgLTQ5OCw3ICs1MDEsNyBAQCBEb25lOg0KPiA+ICAgICAg IC8vDQo+ID4gICAgICAgLy8gSWYgd2UgaGF2ZSBhIHBvb2wgYnVmZmVyLCBmaWxsIGluIHRoZSBo ZWFkZXIgJiB0YWlsIGluZm8NCj4gPiAgICAgICAvLw0KPiA+IC0gICAgSGVhZC0+U2lnbmF0dXJl ID0gUE9PTF9IRUFEX1NJR05BVFVSRTsNCj4gPiArICAgIEhlYWQtPlNpZ25hdHVyZSA9IChQYWdl QXNQb29sKSA/IFBPT0xQQUdFX0hFQURfU0lHTkFUVVJFIDoNCj4gUE9PTF9IRUFEX1NJR05BVFVS RTsNCj4gPiAgICAgICBIZWFkLT5TaXplICAgICAgPSBTaXplOw0KPiA+ICAgICAgIEhlYWQtPlR5 cGUgICAgICA9IChFRklfTUVNT1JZX1RZUEUpIFBvb2xUeXBlOw0KPiA+ICAgICAgIEJ1ZmZlciAg ICAgICAgICA9IEhlYWQtPkRhdGE7DQo+ID4gQEAgLTYxNSw2ICs2MTgsNyBAQCBDb3JlRnJlZVBv b2xQYWdlc0kgKA0KPiA+ICAgICBDb3JlRnJlZVBvb2xQYWdlcyAoTWVtb3J5LCBOb1BhZ2VzKTsN Cj4gPiAgICAgQ29yZVJlbGVhc2VNZW1vcnlMb2NrICgpOw0KPiA+DQo+ID4gKyAgR3VhcmRGcmVl ZFBhZ2VzQ2hlY2tlZCAoTWVtb3J5LCBOb1BhZ2VzKTsNCj4gPiAgICAgQXBwbHlNZW1vcnlQcm90 ZWN0aW9uUG9saWN5IChQb29sVHlwZSwgRWZpQ29udmVudGlvbmFsTWVtb3J5LA0KPiA+ICAgICAg IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pTWVtb3J5LCBFRklfUEFHRVNfVE9fU0laRSAo Tm9QYWdlcykpOw0KPiA+ICAgfQ0KPiA+IEBAIC02ODUsMTUgKzY4OSwxOSBAQCBDb3JlRnJlZVBv b2xJICgNCj4gPiAgICAgVUlOVE4gICAgICAgR3JhbnVsYXJpdHk7DQo+ID4gICAgIEJPT0xFQU4g ICAgIElzR3VhcmRlZDsNCj4gPiAgICAgQk9PTEVBTiAgICAgSGFzUG9vbFRhaWw7DQo+ID4gKyAg Qk9PTEVBTiAgICAgUGFnZUFzUG9vbDsNCj4gPg0KPiA+ICAgICBBU1NFUlQoQnVmZmVyICE9IE5V TEwpOw0KPiA+ICAgICAvLw0KPiA+ICAgICAvLyBHZXQgdGhlIGhlYWQgJiB0YWlsIG9mIHRoZSBw b29sIGVudHJ5DQo+ID4gICAgIC8vDQo+ID4gLSAgSGVhZCA9IENSIChCdWZmZXIsIFBPT0xfSEVB RCwgRGF0YSwgUE9PTF9IRUFEX1NJR05BVFVSRSk7DQo+ID4gKyAgSGVhZCA9IEJBU0VfQ1IgKEJ1 ZmZlciwgUE9PTF9IRUFELCBEYXRhKTsNCj4gPiAgICAgQVNTRVJUKEhlYWQgIT0gTlVMTCk7DQo+ ID4NCj4gPiAtICBpZiAoSGVhZC0+U2lnbmF0dXJlICE9IFBPT0xfSEVBRF9TSUdOQVRVUkUpIHsN Cj4gPiArICBpZiAoSGVhZC0+U2lnbmF0dXJlICE9IFBPT0xfSEVBRF9TSUdOQVRVUkUgJiYNCj4g PiArICAgICAgSGVhZC0+U2lnbmF0dXJlICE9IFBPT0xQQUdFX0hFQURfU0lHTkFUVVJFKSB7DQo+ ID4gKyAgICBBU1NFUlQgKEhlYWQtPlNpZ25hdHVyZSA9PSBQT09MX0hFQURfU0lHTkFUVVJFIHx8 DQo+ID4gKyAgICAgICAgICAgIEhlYWQtPlNpZ25hdHVyZSA9PSBQT09MUEFHRV9IRUFEX1NJR05B VFVSRSk7DQo+ID4gICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAgICAg fQ0KPiA+DQo+ID4gQEAgLTcwMSw2ICs3MDksNyBAQCBDb3JlRnJlZVBvb2xJICgNCj4gPiAgICAg ICAgICAgICAgICAgICBJc01lbW9yeUd1YXJkZWQgKChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlO VE4pSGVhZCk7DQo+ID4gICAgIEhhc1Bvb2xUYWlsID0gIShJc0d1YXJkZWQgJiYNCj4gPiAgICAg ICAgICAgICAgICAgICAgICgoUGNkR2V0OCAoUGNkSGVhcEd1YXJkUHJvcGVydHlNYXNrKSAmIEJJ VDcpID09IDApKTsNCj4gPiArICBQYWdlQXNQb29sID0gKEhlYWQtPlNpZ25hdHVyZSA9PSBQT09M UEFHRV9IRUFEX1NJR05BVFVSRSk7DQo+ID4NCj4gPiAgICAgaWYgKEhhc1Bvb2xUYWlsKSB7DQo+ ID4gICAgICAgVGFpbCA9IEhFQURfVE9fVEFJTCAoSGVhZCk7DQo+ID4gQEAgLTc1Nyw3ICs3NjYs NyBAQCBDb3JlRnJlZVBvb2xJICgNCj4gPiAgICAgLy8NCj4gPiAgICAgLy8gSWYgaXQncyBub3Qg b24gdGhlIGxpc3QsIGl0IG11c3QgYmUgcG9vbCBwYWdlcw0KPiA+ICAgICAvLw0KPiA+IC0gIGlm IChJbmRleCA+PSBTSVpFX1RPX0xJU1QgKEdyYW51bGFyaXR5KSB8fCBJc0d1YXJkZWQpIHsNCj4g PiArICBpZiAoSW5kZXggPj0gU0laRV9UT19MSVNUIChHcmFudWxhcml0eSkgfHwgSXNHdWFyZGVk IHx8IFBhZ2VBc1Bvb2wpIHsNCj4gPg0KPiA+ICAgICAgIC8vDQo+ID4gICAgICAgLy8gUmV0dXJu IHRoZSBtZW1vcnkgcGFnZXMgYmFjayB0byBmcmVlIG1lbW9yeQ0KPiA+IGRpZmYgLS1naXQgYS9N ZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWlzYy9NZW1vcnlQcm90ZWN0aW9uLmMNCj4gYi9NZGVNb2R1 bGVQa2cvQ29yZS9EeGUvTWlzYy9NZW1vcnlQcm90ZWN0aW9uLmMNCj4gPiBpbmRleCBmYThmOGZl OTFhLi42Mjk4YjY3ZGIxIDEwMDY0NA0KPiA+IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9N aXNjL01lbW9yeVByb3RlY3Rpb24uYw0KPiA+ICsrKyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9N aXNjL01lbW9yeVByb3RlY3Rpb24uYw0KPiA+IEBAIC0xMjUwLDcgKzEyNTAsNyBAQCBBcHBseU1l bW9yeVByb3RlY3Rpb25Qb2xpY3kgKA0KPiA+ICAgICAvLyBEb24ndCBvdmVyd3JpdGUgR3VhcmQg cGFnZXMsIHdoaWNoIHNob3VsZCBiZSB0aGUgZmlyc3QgYW5kL29yIGxhc3QgcGFnZSwNCj4gPiAg ICAgLy8gaWYgYW55Lg0KPiA+ICAgICAvLw0KPiA+IC0gIGlmIChJc0hlYXBHdWFyZEVuYWJsZWQg KCkpIHsNCj4gPiArICBpZiAoSXNIZWFwR3VhcmRFbmFibGVkDQo+IChHVUFSRF9IRUFQX1RZUEVf UEFHRXxHVUFSRF9IRUFQX1RZUEVfUE9PTCkpIHsNCj4gPiAgICAgICBpZiAoSXNHdWFyZFBhZ2Ug KE1lbW9yeSkpICB7DQo+ID4gICAgICAgICBNZW1vcnkgKz0gRUZJX1BBR0VfU0laRTsNCj4gPiAg ICAgICAgIExlbmd0aCAtPSBFRklfUEFHRV9TSVpFOw0KPiA+IGRpZmYgLS1naXQgYS9NZGVNb2R1 bGVQa2cvQ29yZS9EeGUvTWlzYy9Qcm9wZXJ0aWVzVGFibGUuYw0KPiBiL01kZU1vZHVsZVBrZy9D b3JlL0R4ZS9NaXNjL1Byb3BlcnRpZXNUYWJsZS5jDQo+ID4gaW5kZXggMDVlYjRmNDIyYi4uMDRj ZmIyZGFiMiAxMDA2NDQNCj4gPiAtLS0gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWlzYy9Qcm9w ZXJ0aWVzVGFibGUuYw0KPiA+ICsrKyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NaXNjL1Byb3Bl cnRpZXNUYWJsZS5jDQo+ID4gQEAgLTEsNyArMSw3IEBADQo+ID4gICAvKiogQGZpbGUNCj4gPiAg ICAgVUVGSSBQcm9wZXJ0aWVzVGFibGUgc3VwcG9ydA0KPiA+DQo+ID4gLUNvcHlyaWdodCAoYykg MjAxNSAtIDIwMTcsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N Cj4gPiArQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55 aW5nIG1hdGVyaWFscw0KPiA+ICAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRl ciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPiBMaWNlbnNlDQo+ID4gICB3 aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhl IGxpY2Vuc2UgbWF5IGJlIGZvdW5kDQo+IGF0DQo+ID4gQEAgLTMyLDYgKzMyLDcgQEAgV0lUSE9V VCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkNCj4gS0lORCwgRUlUSEVSIEVY UFJFU1MgT1IgSU1QTElFRC4NCj4gPiAgICNpbmNsdWRlIDxHdWlkL1Byb3BlcnRpZXNUYWJsZS5o Pg0KPiA+DQo+ID4gICAjaW5jbHVkZSAiRHhlTWFpbi5oIg0KPiA+ICsjaW5jbHVkZSAiSGVhcEd1 YXJkLmgiDQo+ID4NCj4gPiAgICNkZWZpbmUgUFJFVklPVVNfTUVNT1JZX0RFU0NSSVBUT1IoTWVt b3J5RGVzY3JpcHRvciwgU2l6ZSkgXA0KPiA+ICAgICAoKEVGSV9NRU1PUllfREVTQ1JJUFRPUiAq KSgoVUlOVDggKikoTWVtb3J5RGVzY3JpcHRvcikgLSAoU2l6ZSkpKQ0KPiA+IEBAIC0yMDUsMTYg KzIwNiwxMyBAQCBNZXJnZU1lbW9yeU1hcCAoDQo+ID4gICAgICAgTmV4dE1lbW9yeU1hcEVudHJ5 ID0gTkVYVF9NRU1PUllfREVTQ1JJUFRPUiAoTWVtb3J5TWFwRW50cnksDQo+IERlc2NyaXB0b3JT aXplKTsNCj4gPg0KPiA+ICAgICAgIGRvIHsNCj4gPiAtICAgICAgTWVtb3J5QmxvY2tMZW5ndGgg PSAoVUlOVDY0KSAoRWZpUGFnZXNUb1NpemUgKE1lbW9yeU1hcEVudHJ5LQ0KPiA+TnVtYmVyT2ZQ YWdlcykpOw0KPiA+ICsgICAgICBNZXJnZUd1YXJkUGFnZXMgKE5ld01lbW9yeU1hcEVudHJ5LCBO ZXh0TWVtb3J5TWFwRW50cnktDQo+ID5QaHlzaWNhbFN0YXJ0KTsNCj4gPiArICAgICAgTWVtb3J5 QmxvY2tMZW5ndGggPSAoVUlOVDY0KSAoRWZpUGFnZXNUb1NpemUgKE5ld01lbW9yeU1hcEVudHJ5 LQ0KPiA+TnVtYmVyT2ZQYWdlcykpOw0KPiA+ICAgICAgICAgaWYgKCgoVUlOVE4pTmV4dE1lbW9y eU1hcEVudHJ5IDwgKFVJTlROKU1lbW9yeU1hcEVuZCkgJiYNCj4gPiAtICAgICAgICAgIChNZW1v cnlNYXBFbnRyeS0+VHlwZSA9PSBOZXh0TWVtb3J5TWFwRW50cnktPlR5cGUpICYmDQo+ID4gLSAg ICAgICAgICAoTWVtb3J5TWFwRW50cnktPkF0dHJpYnV0ZSA9PSBOZXh0TWVtb3J5TWFwRW50cnkt PkF0dHJpYnV0ZSkgJiYNCj4gPiAtICAgICAgICAgICgoTWVtb3J5TWFwRW50cnktPlBoeXNpY2Fs U3RhcnQgKyBNZW1vcnlCbG9ja0xlbmd0aCkgPT0NCj4gTmV4dE1lbW9yeU1hcEVudHJ5LT5QaHlz aWNhbFN0YXJ0KSkgew0KPiA+IC0gICAgICAgIE1lbW9yeU1hcEVudHJ5LT5OdW1iZXJPZlBhZ2Vz ICs9IE5leHRNZW1vcnlNYXBFbnRyeS0NCj4gPk51bWJlck9mUGFnZXM7DQo+ID4gLSAgICAgICAg aWYgKE5ld01lbW9yeU1hcEVudHJ5ICE9IE1lbW9yeU1hcEVudHJ5KSB7DQo+ID4gLSAgICAgICAg ICBOZXdNZW1vcnlNYXBFbnRyeS0+TnVtYmVyT2ZQYWdlcyArPSBOZXh0TWVtb3J5TWFwRW50cnkt DQo+ID5OdW1iZXJPZlBhZ2VzOw0KPiA+IC0gICAgICAgIH0NCj4gPiAtDQo+ID4gKyAgICAgICAg ICAoTmV3TWVtb3J5TWFwRW50cnktPlR5cGUgPT0gTmV4dE1lbW9yeU1hcEVudHJ5LT5UeXBlKSAm Jg0KPiA+ICsgICAgICAgICAgKE5ld01lbW9yeU1hcEVudHJ5LT5BdHRyaWJ1dGUgPT0gTmV4dE1l bW9yeU1hcEVudHJ5LT5BdHRyaWJ1dGUpDQo+ICYmDQo+ID4gKyAgICAgICAgICAoKE5ld01lbW9y eU1hcEVudHJ5LT5QaHlzaWNhbFN0YXJ0ICsgTWVtb3J5QmxvY2tMZW5ndGgpID09DQo+IE5leHRN ZW1vcnlNYXBFbnRyeS0+UGh5c2ljYWxTdGFydCkpIHsNCj4gPiArICAgICAgICBOZXdNZW1vcnlN YXBFbnRyeS0+TnVtYmVyT2ZQYWdlcyArPSBOZXh0TWVtb3J5TWFwRW50cnktDQo+ID5OdW1iZXJP ZlBhZ2VzOw0KPiA+ICAgICAgICAgICBOZXh0TWVtb3J5TWFwRW50cnkgPSBORVhUX01FTU9SWV9E RVNDUklQVE9SDQo+IChOZXh0TWVtb3J5TWFwRW50cnksIERlc2NyaXB0b3JTaXplKTsNCj4gPiAg ICAgICAgICAgY29udGludWU7DQo+ID4gICAgICAgICB9IGVsc2Ugew0KPiA+DQoNCg==