From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 000B721ECCB10 for ; Wed, 20 Sep 2017 00:49:50 -0700 (PDT) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Sep 2017 00:52:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,420,1500966000"; d="scan'208";a="1197082552" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by fmsmga001.fm.intel.com with ESMTP; 20 Sep 2017 00:52:56 -0700 Received: from fmsmsx152.amr.corp.intel.com (10.18.125.5) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 20 Sep 2017 00:52:56 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by FMSMSX152.amr.corp.intel.com (10.18.125.5) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 20 Sep 2017 00:52:55 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.213]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.98]) with mapi id 14.03.0319.002; Wed, 20 Sep 2017 15:52:52 +0800 From: "Ni, Ruiyu" To: Paulo Alcantara , "edk2-devel@lists.01.org" CC: "Dong, Eric" , "Zeng, Star" , Laszlo Ersek Thread-Topic: [PATCH v2 3/3] MdeModulePkg/UdfDxe: Rework driver to support PartitionDxe changes Thread-Index: AQHTL7bbu43uCkCp2U6F9eE1B79p1qK50vwQgACEMACAAaf0wA== Date: Wed, 20 Sep 2017 07:52:52 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5BA63B7A@SHSMSX103.ccr.corp.intel.com> References: <600e6e752b285bbe960ad22d8ae969cbbd84b85b.1505653040.git.pcacjr@zytor.com> <734D49CCEBEEF84792F5B80ED585239D5BA44272@SHSMSX151.ccr.corp.intel.com> <27d93ba4-87ca-3c4c-0748-0d4af24f578e@zytor.com> In-Reply-To: <27d93ba4-87ca-3c4c-0748-0d4af24f578e@zytor.com> Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v2 3/3] MdeModulePkg/UdfDxe: Rework driver to support PartitionDxe changes X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Sep 2017 07:49:51 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T0sgSSB1bmRlcnN0b29kIHRoZSByZWFzb24gbm93Lg0KDQpJIHRyaWVkIHRvIHVuZGVyc3RhbmQg dGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEFWRFAsIExWRCwgYW5kIFBELCBidXQgZmFpbGVkLg0K VGhlIGNvZGUgYmVsb3cgaW4gUGFydGl0aW9uIGRyaXZlciBzZWVtcyB0byBzYXkgdGhlIExWRCBh bmQgUEQgYXJlIGNsb3NlIHRvIGVhY2ggb3RoZXIuDQpJcyBpdCBhbHdheXMgdHJ1ZT8gSWYgaXQg aXMsIEkgYWdyZWUgd2l0aCB0aGUgaW1wbGVtZW50YXRpb24uDQoNCiAgICAvLw0KICAgIC8vIENv dmVyIHRoZSBtYWluIFZEUyBhcmVhIHNvIFVkZkR4ZSBkcml2ZXIgd2lsbCBhbHNvIGJlIGFibGUg dG8gZ2V0IExWRCBhbmQNCiAgICAvLyBQRCBkZXNjcmlwdG9ycyBvdXQgZnJvbSB0aGUgZmlsZSBz eXN0ZW0uDQogICAgLy8NCiAgICAqTWFpblZkc1N0YXJ0THNuID0gR3VhcmRNYWluVmRzU3RhcnRM c247DQogICAgKkxvZ2ljYWxWb2xFbmRMc24gPSAqTWFpblZkc1N0YXJ0THNuICsgKFVJTlQ2NClF eHRlbnRBZC0+RXh0ZW50TGVuZ3RoOw0KDQogICAgLy8NCiAgICAvLyBDb3ZlciBVREYgcGFydGl0 aW9uIGFyZWENCiAgICAvLw0KICAgICpMb2dpY2FsVm9sRW5kTHNuICs9DQogICAgICAoKFVJTlQ2 NClQYXJ0aXRpb25EZXNjLT5QYXJ0aXRpb25TdGFydGluZ0xvY2F0aW9uIC0NCiAgICAgICAqTG9n aWNhbFZvbEVuZExzbikgKyBQYXJ0aXRpb25EZXNjLT5QYXJ0aXRpb25MZW5ndGggLSAxOw0KVGhh bmtzL1JheQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFBhdWxvIEFs Y2FudGFyYSBbbWFpbHRvOnBjYWNqckB6eXRvci5jb21dDQo+IFNlbnQ6IFR1ZXNkYXksIFNlcHRl bWJlciAxOSwgMjAxNyAxMjo1MSBBTQ0KPiBUbzogTmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5j b20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiBDYzogRG9uZywgRXJpYyA8ZXJpYy5kb25n QGludGVsLmNvbT47IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+Ow0KPiBMYXN6bG8g RXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYyIDMvM10g TWRlTW9kdWxlUGtnL1VkZkR4ZTogUmV3b3JrIGRyaXZlciB0bw0KPiBzdXBwb3J0IFBhcnRpdGlv bkR4ZSBjaGFuZ2VzDQo+IA0KPiANCj4gDQo+IE9uIDkvMTcvMjAxNyAxMDowMCBQTSwgTmksIFJ1 aXl1IHdyb3RlOg0KPiA+IFBhdWxvLA0KPiA+IFdpdGggdGhlIGNoYW5nZSBpbiBwYXJ0aXRpb24g ZHJpdmVyLCBJIHN1cHBvc2UgVWRmRHhlIGRyaXZlciBvbmx5DQo+ID4gbmVlZHMgdG8gdGFrZSBj YXJlIG9mIGFyZWEgY292ZXJlZCBieSB0aGUgcGFydGl0aW9uIGRlc2NyaXB0b3IuDQo+ID4gQnV0 IHdoeSBTdGFydE1haW5Wb2x1bWVEZXNjcmlwdG9yU2VxdWVuY2UoKSBzdGlsbCByZWFkcyBMVkQs IFRELCBhbmQNCj4gPiBQRD8NCj4gDQo+IFdlIHN0aWxsIG5lZWQgdGhlIExWRCBhZ2FpbiBmb3Ig YSBmZXcgcmVhc29uczoNCj4gDQo+IDEuIEdldFZvbHVtZVNpemUoKSBuZWVkcyB0byByZWFkIExW SUQgKExvZ2ljYWwgVm9sdW1lIEludGVncml0eSBEZXNjcmlwdG9yKSwNCj4gd2hpY2ggaXMgbG9j YXRlZCBpbiBMVkQsIGluIG9yZGVyIHRvIGNhbGN1bGF0ZSBmcmVlIGFuZCB1c2VkIHZvbHVtZSBz cGFjZS4NCj4gMi4gVG8gZmluZCBGU0QgKEZpbGUgU2V0IERlc2NyaXB0b3IpLCB3aGVyZSB0aGUg cm9vdCBkaXJlY3RvcnkgaXMgbG9jYXRlZC4NCj4gMy4gVG8ga25vdyB3aGljaCBQYXJ0aXRpb24g RGVzY3JpcHRvciB0byB1c2UgYmFzZWQgb24gcGFydGl0aW9uIG51bWJlciBmcm9tDQo+IExWRC0+ UGFydGl0aW9uTWFwcyBmaWVsZC4gSSBrbm93IFVERiAyLjYwIHNwZWMgc2F5cyB0aGF0IHRoZXJl IHNob3VsZCBiZQ0KPiBvbmx5IG9uZSBQYXJ0aXRpb24gRGVzY3JpcHRvciB0aGF0IGNvdmVycyB0 aGUgZW50aXJlIHNwYWNlIG9mIGEgc2luZ2xlIExWRCwgYnV0DQo+IGl0J3MgZ29vZCB0byBtYWtl IHN1cmUgd2UncmUgcmVhZGluZyBpdCBjb3JyZWN0bHkuDQo+IA0KPiBURCBkZXNjcmlwdG9yIGlz IHVzZWQgdG8ga25vdyB3aGVuIHN0b3BwaW5nIHRoZSBWb2x1bWUgRGVzY3JpcHRvcg0KPiBTZXF1 ZW5jZSBhbmQgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIHJlYWQgYWxsIEV4dGVudEFkLT5FeHRlbnRM ZW5ndGggYmxvY2tzDQo+IHVubmVjZXNzYXJpbHkuDQo+IA0KPiBUaGFua3MsDQo+IFBhdWxvDQo+ IA0KPiA+DQo+ID4gSSB0aG91Z2h0IHRoZSBVZGZEeGUgZHJpdmVyJ3MgbG9naWMgY2FuIGJlIHNp bXBsaWZpZWQgYSBsb3QuDQo+ID4gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZWQgbG9naWMg aW4gUGFydGl0aW9uIGRyaXZlciBhbmQgdWRmIGRyaXZlci4NCj4gPg0KPiA+IENhbiB5b3UgZXhw bGFpbiBtb3JlPw0KPiA+DQo+ID4gVGhhbmtzL1JheQ0KPiA+DQo+ID4+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+ID4+IEZyb206IFBhdWxvIEFsY2FudGFyYSBbbWFpbHRvOnBjYWNqckB6 eXRvci5jb21dDQo+ID4+IFNlbnQ6IFN1bmRheSwgU2VwdGVtYmVyIDE3LCAyMDE3IDk6MTMgUE0N Cj4gPj4gVG86IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ID4+IENjOiBQYXVsbyBBbGNhbnRh cmEgPHBjYWNqckB6eXRvci5jb20+OyBEb25nLCBFcmljDQo+ID4+IDxlcmljLmRvbmdAaW50ZWwu Y29tPjsgTmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb20+OyBaZW5nLCBTdGFyDQo+ID4+IDxz dGFyLnplbmdAaW50ZWwuY29tPjsgTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4g Pj4gU3ViamVjdDogW1BBVENIIHYyIDMvM10gTWRlTW9kdWxlUGtnL1VkZkR4ZTogUmV3b3JrIGRy aXZlciB0bw0KPiBzdXBwb3J0DQo+ID4+IFBhcnRpdGlvbkR4ZSBjaGFuZ2VzDQo+ID4+DQo+ID4+ IFRoaXMgcGF0Y2ggcmV3b3JrcyB0aGUgZHJpdmVyIHRvIHN1cHBvcnQgUGFydGl0aW9uIGRyaXZl ciBjaGFuZ2VzLg0KPiA+Pg0KPiA+PiBDYzogRXJpYyBEb25nIDxlcmljLmRvbmdAaW50ZWwuY29t Pg0KPiA+PiBDYzogUGF1bG8gQWxjYW50YXJhIDxwY2FjanJAenl0b3IuY29tPg0KPiA+PiBDYzog UnVpeXUgTmkgPHJ1aXl1Lm5pQGludGVsLmNvbT4NCj4gPj4gQ2M6IFN0YXIgWmVuZyA8c3Rhci56 ZW5nQGludGVsLmNvbT4NCj4gPj4gQ2M6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+ DQo+ID4+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVu dCAxLjENCj4gPj4gU2lnbmVkLW9mZi1ieTogUGF1bG8gQWxjYW50YXJhIDxwY2FjanJAenl0b3Iu Y29tPg0KPiA+PiAtLS0NCj4gPj4gICBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Rpc2svVWRmRHhl L0ZpbGUuYyAgICAgICAgICAgICAgICAgfCAgMTMgKy0NCj4gPj4gICBNZGVNb2R1bGVQa2cvVW5p dmVyc2FsL0Rpc2svVWRmRHhlL0ZpbGVTeXN0ZW1PcGVyYXRpb25zLmMgfCA1MTUNCj4gPj4gKysr KysrKystLS0tLS0tLS0tLS0NCj4gPj4gICBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Rpc2svVWRm RHhlL1VkZi5jICAgICAgICAgICAgICAgICAgfCAgIDcgLQ0KPiA+PiAgIE1kZU1vZHVsZVBrZy9V bml2ZXJzYWwvRGlzay9VZGZEeGUvVWRmLmggICAgICAgICAgICAgICAgICB8ICA4OCArLS0tDQo+ ID4+ICAgNCBmaWxlcyBjaGFuZ2VkLCAyMDQgaW5zZXJ0aW9ucygrKSwgNDE5IGRlbGV0aW9ucygt KQ0KPiA+Pg0KPiA+PiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9EaXNrL1Vk ZkR4ZS9GaWxlLmMNCj4gPj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Rpc2svVWRmRHhlL0Zp bGUuYw0KPiA+PiBpbmRleCAwMTM2MTE0MWJiLi5mMmM2Mjk2N2U4IDEwMDY0NA0KPiA+PiAtLS0g YS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Rpc2svVWRmRHhlL0ZpbGUuYw0KPiA+PiArKysgYi9N ZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Rpc2svVWRmRHhlL0ZpbGUuYw0KPiA+PiBAQCAtMTAwLDYg KzEwMCw3IEBAIFVkZk9wZW5Wb2x1bWUgKA0KPiA+PiAgICAgICAmUHJpdkZzRGF0YS0+Vm9sdW1l LA0KPiA+PiAgICAgICAmUHJpdkZzRGF0YS0+Um9vdA0KPiA+PiAgICAgICApOw0KPiA+PiArICBB U1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+PiAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+PiAgICAgICBnb3RvIEVycm9yX0ZpbmRfUm9vdF9EaXI7DQo+ID4+ICAgICB9DQo+ ID4+IEBAIC0xMzEsNyArMTMyLDYgQEAgRXJyb3JfQWxsb2NfUHJpdl9GaWxlX0RhdGE6DQo+ID4+ ICAgICBDbGVhbnVwRmlsZUluZm9ybWF0aW9uICgmUHJpdkZzRGF0YS0+Um9vdCk7DQo+ID4+DQo+ ID4+ICAgRXJyb3JfRmluZF9Sb290X0RpcjoNCj4gPj4gLSAgQ2xlYW51cFZvbHVtZUluZm9ybWF0 aW9uICgmUHJpdkZzRGF0YS0+Vm9sdW1lKTsNCj4gPj4NCj4gPj4gICBFcnJvcl9SZWFkX1VkZl9W b2x1bWU6DQo+ID4+ICAgRXJyb3JfSW52YWxpZF9QYXJhbXM6DQo+ID4+IEBAIC01MjgsNyArNTI4 LDYgQEAgVWRmQ2xvc2UgKA0KPiA+PiAgICAgRUZJX1RQTCAgICAgICAgICAgICAgICAgICAgIE9s ZFRwbDsNCj4gPj4gICAgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4+ ICAgICBQUklWQVRFX1VERl9GSUxFX0RBVEEgICAgICAgKlByaXZGaWxlRGF0YTsNCj4gPj4gLSAg UFJJVkFURV9VREZfU0lNUExFX0ZTX0RBVEEgICpQcml2RnNEYXRhOw0KPiA+Pg0KPiA+PiAgICAg T2xkVHBsID0gZ0JTLT5SYWlzZVRQTCAoVFBMX0NBTExCQUNLKTsNCj4gPj4NCj4gPj4gQEAgLTU0 MSw4ICs1NDAsNiBAQCBVZGZDbG9zZSAoDQo+ID4+DQo+ID4+ICAgICBQcml2RmlsZURhdGEgPSBQ UklWQVRFX1VERl9GSUxFX0RBVEFfRlJPTV9USElTIChUaGlzKTsNCj4gPj4NCj4gPj4gLSAgUHJp dkZzRGF0YSA9IFBSSVZBVEVfVURGX1NJTVBMRV9GU19EQVRBX0ZST01fVEhJUw0KPiAoUHJpdkZp bGVEYXRhLQ0KPiA+Pj4gU2ltcGxlRnMpOw0KPiA+PiAtDQo+ID4+ICAgICBpZiAoIVByaXZGaWxl RGF0YS0+SXNSb290RGlyZWN0b3J5KSB7DQo+ID4+ICAgICAgIENsZWFudXBGaWxlSW5mb3JtYXRp b24gKCZQcml2RmlsZURhdGEtPkZpbGUpOw0KPiA+Pg0KPiA+PiBAQCAtNTUxLDEwICs1NDgsNiBA QCBVZGZDbG9zZSAoDQo+ID4+ICAgICAgIH0NCj4gPj4gICAgIH0NCj4gPj4NCj4gPj4gLSAgaWYg KC0tUHJpdkZzRGF0YS0+T3BlbkZpbGVzID09IDApIHsNCj4gPj4gLSAgICBDbGVhbnVwVm9sdW1l SW5mb3JtYXRpb24gKCZQcml2RnNEYXRhLT5Wb2x1bWUpOw0KPiA+PiAtICB9DQo+ID4+IC0NCj4g Pj4gICAgIEZyZWVQb29sICgoVk9JRCAqKVByaXZGaWxlRGF0YSk7DQo+ID4+DQo+ID4+ICAgRXhp dDoNCj4gPj4gQEAgLTc4Nyw3ICs3ODAsNyBAQCBVZGZHZXRJbmZvICgNCj4gPj4gICAgIH0gZWxz ZSBpZiAoQ29tcGFyZUd1aWQgKEluZm9ybWF0aW9uVHlwZSwgJmdFZmlGaWxlU3lzdGVtSW5mb0d1 aWQpKSB7DQo+ID4+ICAgICAgIFN0cmluZyA9IFZvbHVtZUxhYmVsOw0KPiA+Pg0KPiA+PiAtICAg IEZpbGVTZXREZXNjID0gUHJpdkZzRGF0YS0+Vm9sdW1lLkZpbGVTZXREZXNjc1swXTsNCj4gPj4g KyAgICBGaWxlU2V0RGVzYyA9ICZQcml2RnNEYXRhLT5Wb2x1bWUuRmlsZVNldERlc2M7DQo+ID4+ DQo+ID4+ICAgICAgIE9zdGFDb21wcmVzc2VkID0gJkZpbGVTZXREZXNjLT5Mb2dpY2FsVm9sdW1l SWRlbnRpZmllclswXTsNCj4gPj4NCj4gPj4gQEAgLTg0Niw3ICs4MzksNyBAQCBVZGZHZXRJbmZv ICgNCj4gPj4gICAgICAgRmlsZVN5c3RlbUluZm8tPlNpemUgICAgICAgID0gRmlsZVN5c3RlbUlu Zm9MZW5ndGg7DQo+ID4+ICAgICAgIEZpbGVTeXN0ZW1JbmZvLT5SZWFkT25seSAgICA9IFRSVUU7 DQo+ID4+ICAgICAgIEZpbGVTeXN0ZW1JbmZvLT5CbG9ja1NpemUgICA9DQo+ID4+IC0gICAgICBM Vl9CTE9DS19TSVpFICgmUHJpdkZzRGF0YS0+Vm9sdW1lLCBVREZfREVGQVVMVF9MVl9OVU0pOw0K PiA+PiArICAgICAgUHJpdkZzRGF0YS0+Vm9sdW1lLkxvZ2ljYWxWb2xEZXNjLkxvZ2ljYWxCbG9j a1NpemU7DQo+ID4+ICAgICAgIEZpbGVTeXN0ZW1JbmZvLT5Wb2x1bWVTaXplICA9IFZvbHVtZVNp emU7DQo+ID4+ICAgICAgIEZpbGVTeXN0ZW1JbmZvLT5GcmVlU3BhY2UgICA9IEZyZWVTcGFjZVNp emU7DQo+ID4+DQo+ID4+IGRpZmYgLS1naXQNCj4gPj4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2Fs L0Rpc2svVWRmRHhlL0ZpbGVTeXN0ZW1PcGVyYXRpb25zLmMNCj4gPj4gYi9NZGVNb2R1bGVQa2cv VW5pdmVyc2FsL0Rpc2svVWRmRHhlL0ZpbGVTeXN0ZW1PcGVyYXRpb25zLmMNCj4gPj4gaW5kZXgg NDYwOTU4MGIzMC4uNjNiNjQzZTYwYSAxMDA2NDQNCj4gPj4gLS0tIGEvTWRlTW9kdWxlUGtnL1Vu aXZlcnNhbC9EaXNrL1VkZkR4ZS9GaWxlU3lzdGVtT3BlcmF0aW9ucy5jDQo+ID4+ICsrKyBiL01k ZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRGlzay9VZGZEeGUvRmlsZVN5c3RlbU9wZXJhdGlvbnMuYw0K PiA+PiBAQCAtNjAsMTU0ICs2MCwxMTEgQEAgRmluZEFuY2hvclZvbHVtZURlc2NyaXB0b3JQb2lu dGVyICgNCj4gPj4NCj4gPj4gICBFRklfU1RBVFVTDQo+ID4+ICAgU3RhcnRNYWluVm9sdW1lRGVz Y3JpcHRvclNlcXVlbmNlICgNCj4gPj4gLSAgSU4gICBFRklfQkxPQ0tfSU9fUFJPVE9DT0wgICAg ICAgICAgICAgICAgICpCbG9ja0lvLA0KPiA+PiAtICBJTiAgIEVGSV9ESVNLX0lPX1BST1RPQ09M ICAgICAgICAgICAgICAgICAgKkRpc2tJbywNCj4gPj4gLSAgSU4gICBVREZfQU5DSE9SX1ZPTFVN RV9ERVNDUklQVE9SX1BPSU5URVIgICpBbmNob3JQb2ludCwNCj4gPj4gLSAgT1VUICBVREZfVk9M VU1FX0lORk8gICAgICAgICAgICAgICAgICAgICAgICpWb2x1bWUNCj4gPj4gKyAgSU4gICBFRklf QkxPQ0tfSU9fUFJPVE9DT0wgICAgKkJsb2NrSW8sDQo+ID4+ICsgIElOICAgRUZJX0RJU0tfSU9f UFJPVE9DT0wgICAgICpEaXNrSW8sDQo+ID4+ICsgIE9VVCAgVURGX1ZPTFVNRV9JTkZPICAgICAg ICAgICpWb2x1bWUNCj4gPj4gICAgICkNCj4gPj4gICB7DQo+ID4+IC0gIEVGSV9TVEFUVVMgICAg ICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4+IC0gIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgICAgICBCbG9ja1NpemU7DQo+ID4+IC0gIFVERl9FWFRFTlRfQUQgICAgICAgICAgICAgICAg ICAqRXh0ZW50QWQ7DQo+ID4+IC0gIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICBTdGFy dGluZ0xzbjsNCj4gPj4gLSAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgIEVuZGluZ0xz bjsNCj4gPj4gLSAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXI7DQo+ID4+ IC0gIFVERl9MT0dJQ0FMX1ZPTFVNRV9ERVNDUklQVE9SICAqTG9naWNhbFZvbERlc2M7DQo+ID4+ IC0gIFVERl9QQVJUSVRJT05fREVTQ1JJUFRPUiAgICAgICAqUGFydGl0aW9uRGVzYzsNCj4gPj4g LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+PiAtICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgICAgICAgTG9naWNhbEJsb2NrU2l6ZTsNCj4gPj4gKyAgRUZJX1NU QVRVUyAgU3RhdHVzOw0KPiA+PiArICBVSU5UMzIgICAgICBCbG9ja1NpemU7DQo+ID4+ICsgIFVJ TlQ2NCAgICAgIEJsb2NrT2Zmc2V0Ow0KPiA+PiArICBWT0lEICAgICAgICAqQnVmZmVyOw0KPiA+ PiArICBVSU5UMzIgICAgICBMb2dpY2FsQmxvY2tTaXplOw0KPiA+PiArDQo+ID4+ICsgIEJsb2Nr U2l6ZSA9IEJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemU7DQo+ID4+DQo+ID4+ICAgICAvLw0KPiA+ PiAtICAvLyBXZSd2ZSBhbHJlYWR5IGZvdW5kIGFuIEFEVlAgb24gdGhlIHZvbHVtZS4gSXQgY29u dGFpbnMgdGhlDQo+ID4+IGV4dGVudA0KPiA+PiAtICAvLyAoTWFpblZvbHVtZURlc2NyaXB0b3JT ZXF1ZW5jZUV4dGVudCkgd2hlcmUgdGhlIE1haW4gVm9sdW1lDQo+ID4+IERlc2NyaXB0b3INCj4g Pj4gLSAgLy8gU2VxdWVuY2Ugc3RhcnRzLiBUaGVyZWZvcmUsIHdlJ2xsIGxvb2sgZm9yIExvZ2lj YWwgVm9sdW1lDQo+ID4+IERlc2NyaXB0b3JzIGFuZA0KPiA+PiAtICAvLyBQYXJ0aXRpb25zIERl c2NyaXB0b3JzIGFuZCBzYXZlIHRoZW0gaW4gbWVtb3J5LCBhY2NvcmRpbmdseS4NCj4gPj4gLSAg Ly8NCj4gPj4gLSAgLy8gTm90ZSBhbHNvIHRoYXQgZWFjaCBkZXNjcmlwdG9yIHdpbGwgYmUgYWxp Z25lZCBvbiBhIGJsb2NrIHNpemUNCj4gPj4gKEJsb2NrU2l6ZSkNCj4gPj4gLSAgLy8gYm91bmRh cnksIHNvIHdlIG5lZWQgdG8gcmVhZCBvbmUgYmxvY2sgYXQgYSB0aW1lLg0KPiA+PiArICAvLyBB bGxvY2F0ZSBidWZmZXIgZm9yIHJlYWRpbmcgZGlzayBibG9ja3MNCj4gPj4gICAgIC8vDQo+ID4+ IC0gIEJsb2NrU2l6ZSAgICA9IEJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemU7DQo+ID4+IC0gIEV4 dGVudEFkICAgICA9ICZBbmNob3JQb2ludC0+TWFpblZvbHVtZURlc2NyaXB0b3JTZXF1ZW5jZUV4 dGVudDsNCj4gPj4gLSAgU3RhcnRpbmdMc24gID0gKFVJTlQ2NClFeHRlbnRBZC0+RXh0ZW50TG9j YXRpb247DQo+ID4+IC0gIEVuZGluZ0xzbiAgICA9IFN0YXJ0aW5nTHNuICsgRGl2VTY0eDMyICgN Cj4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUlOVDY0KUV4dGVu dEFkLT5FeHRlbnRMZW5ndGgsDQo+ID4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQmxvY2tTaXplDQo+ID4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsNCj4gPj4gLQ0KPiA+PiAtICBWb2x1bWUtPkxvZ2ljYWxWb2xEZXNjcyA9DQo+ID4+IC0g ICAgKFVERl9MT0dJQ0FMX1ZPTFVNRV9ERVNDUklQVE9SICoqKUFsbG9jYXRlWmVyb1Bvb2wNCj4g KEV4dGVudEFkLQ0KPiA+Pj4gRXh0ZW50TGVuZ3RoKTsNCj4gPj4gLSAgaWYgKFZvbHVtZS0+TG9n aWNhbFZvbERlc2NzID09IE5VTEwpIHsNCj4gPj4gLSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNP VVJDRVM7DQo+ID4+IC0gIH0NCj4gPj4gLQ0KPiA+PiAtICBWb2x1bWUtPlBhcnRpdGlvbkRlc2Nz ID0NCj4gPj4gLSAgICAoVURGX1BBUlRJVElPTl9ERVNDUklQVE9SICoqKUFsbG9jYXRlWmVyb1Bv b2wgKEV4dGVudEFkLQ0KPiA+Pj4gRXh0ZW50TGVuZ3RoKTsNCj4gPj4gLSAgaWYgKFZvbHVtZS0+ UGFydGl0aW9uRGVzY3MgPT0gTlVMTCkgew0KPiA+PiAtICAgIFN0YXR1cyA9IEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KPiA+PiAtICAgIGdvdG8gRXJyb3JfQWxsb2NfUGRzOw0KPiA+PiAtICB9DQo+ ID4+IC0NCj4gPj4gLSAgQnVmZmVyID0gQWxsb2NhdGVaZXJvUG9vbCAoQmxvY2tTaXplKTsNCj4g Pj4gKyAgQnVmZmVyID0gQWxsb2NhdGVaZXJvUG9vbCAoKFVJTlROKUJsb2NrU2l6ZSk7DQo+ID4+ ICAgICBpZiAoQnVmZmVyID09IE5VTEwpIHsNCj4gPj4gLSAgICBTdGF0dXMgPSBFRklfT1VUX09G X1JFU09VUkNFUzsNCj4gPj4gLSAgICBnb3RvIEVycm9yX0FsbG9jX0J1ZjsNCj4gPj4gKyAgICBy ZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4+ICAgICB9DQo+ID4+DQo+ID4+IC0gIFZv bHVtZS0+TG9naWNhbFZvbERlc2NzTm8gID0gMDsNCj4gPj4gLSAgVm9sdW1lLT5QYXJ0aXRpb25E ZXNjc05vICAgPSAwOw0KPiA+PiAtDQo+ID4+IC0gIHdoaWxlIChTdGFydGluZ0xzbiA8PSBFbmRp bmdMc24pIHsNCj4gPj4gKyAgLy8NCj4gPj4gKyAgLy8gQXMgcGVyIFVERiAyLjYwIHNwZWNpZmlj YXRpb246DQo+ID4+ICsgIC8vDQo+ID4+ICsgIC8vIC0tLQ0KPiA+PiArICAvLyBGb3IgdGhlIHB1 cnBvc2Ugb2YgaW50ZXJjaGFuZ2UsIFBhcnRpdGlvbiBNYXBzIHNoYWxsIGJlIGxpbWl0ZWQNCj4g Pj4gKyB0byAvLyBQYXJ0aXRpb24gTWFwIHR5cGUgMSwgZXhjZXB0IHR5cGUgMiBtYXBzLg0KPiA+ PiArICAvLyAtLS0NCj4gPj4gKyAgLy8gQSBQYXJ0aXRpb24gRGVzY3JpcHRvciBBY2Nlc3MgVHlw ZSBvZiByZWFkLW9ubHksIHJld3JpdGFibGUsDQo+ID4+ICsgLy8gb3ZlcndyaXRhYmxlLCB3cml0 ZS1vbmNlIGFuZCBwc2V1ZG8tb3ZlcndyaXRhYmxlIHNoYWxsIGJlICAvLw0KPiA+PiArIHN1cHBv cnRlZC4gVGhlcmUgc2hhbGwgYmUgZXhhY3RseSBvbmUgcHJldmFpbGluZyBQYXJ0aXRpb24gIC8v DQo+ID4+ICsgRGVzY3JpcHRvciByZWNvcmRlZCBwZXIgdm9sdW1lLCB3aXRoIG9uZSBleGNlcHRp b24uIEZvciBWb2x1bWUgIC8vDQo+ID4+ICsgU2V0cyB0aGF0IGNvbnNpc3Qgb2Ygc2luZ2xlIHZv bHVtZSwgdGhlIHZvbHVtZSBtYXkgY29udGFpbiAyIG5vbi0NCj4gPj4gKyAvLyBvdmVybGFwcGlu ZyBQYXJ0aXRpb25zIHdpdGggMiBwcmV2YWlsaW5nIFBhcnRpdGlvbiBEZXNjcmlwdG9ycw0KPiA+ PiArIG9ubHkgLy8gaWYgb25lIGhhcyBhbiBBY2Nlc3MgVHlwZSBvZiByZWFkLW9ubHkgYW5kIHRo ZSBvdGhlciBoYXMgYW4NCj4gPj4gKyAvLyBBY2Nlc3MgVHlwZSBvZiByZXdyaXRhYmxlLCBvdmVy d3JpdGFibGUsIG9yIHdyaXRlLW9uY2UuIFRoZSAgLy8NCj4gPj4gKyBMb2dpY2FsIFZvbHVtZSBm b3IgdGhpcyB2b2x1bWUgd291bGQgY29uc2lzdCBvZiB0aGUgY29udGVudHMgb2YgIC8vDQo+ID4+ ICsgYm90aCBwYXJ0aXRpb25zLg0KPiA+PiArICAvLyAtLS0NCj4gPj4gKyAgLy8NCj4gPj4gKyAg Ly8gVGhlIGxvZ2ljYWwgcGFydGl0aW9uIGNyZWF0ZWQgYnkgUGFydGl0aW9uIGRyaXZlciBpcyBy ZWxhdGl2ZQ0KPiA+PiArIHRvIHRoZSBtYWluICAvLyBWRFMgZXh0ZW50IGxvY2F0aW9uLCBzbyB3 ZSBzdGFydCB0aGUgTWFpbiBWb2x1bWUNCj4gPj4gKyBEZXNjcmlwdG9yIFNlcXVlbmNlIGF0ICAv LyBMQkEgMC4NCj4gPj4gKyAgLy8NCj4gPj4gKyAgLy8gV2UgZG9uJ3QgbmVlZCB0byBtYWtlIHN1 cmUgd2UgZ290IGJvdGggTFZEIGFuZCBQRCAtLSB0aGF0IGlzLA0KPiA+PiArIGlmIHdlIGFyZSAg Ly8gaGVyZSwgdGhhdCBtZWFucyBQYXJ0aXRpb24gZHJpdmVyIHdhcyBhYmxlIHRvIGZpbmQNCj4g Pj4gKyB0aGVtIGJvdGgNCj4gPj4gcHJldmlvdXNseS4NCj4gPj4gKyAgLy8NCj4gPj4gKyAgZm9y IChCbG9ja09mZnNldCA9IDA7DQo+ID4+ICsgICAgICAgQmxvY2tPZmZzZXQgPCBNdWx0VTY0eDMy IChCbG9ja0lvLT5NZWRpYS0+TGFzdEJsb2NrLA0KPiA+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQmxvY2tJby0+TWVkaWEtPkJsb2NrU2l6ZSk7DQo+ID4+ICsgICAgICAgQmxv Y2tPZmZzZXQgKz0gQmxvY2tTaXplKSB7DQo+ID4+ICsgICAgLy8gUmVhZCBkaXNrIGJsb2NrDQo+ ID4+ICsgICAgLy8NCj4gPj4gICAgICAgU3RhdHVzID0gRGlza0lvLT5SZWFkRGlzayAoDQo+ID4+ ICAgICAgICAgRGlza0lvLA0KPiA+PiAgICAgICAgIEJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkLA0K PiA+PiAtICAgICAgTXVsdFU2NHgzMiAoU3RhcnRpbmdMc24sIEJsb2NrU2l6ZSksDQo+ID4+ICsg ICAgICBCbG9ja09mZnNldCwNCj4gPj4gICAgICAgICBCbG9ja1NpemUsDQo+ID4+ICAgICAgICAg QnVmZmVyDQo+ID4+ICAgICAgICAgKTsNCj4gPj4gICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+PiAtICAgICAgZ290byBFcnJvcl9SZWFkX0Rpc2tfQmxrOw0KPiA+PiArICAgICAg Z290byBPdXRfRnJlZTsNCj4gPj4gICAgICAgfQ0KPiA+Pg0KPiA+PiArICAgIC8vDQo+ID4+ICsg ICAgLy8gQ2hlY2sgaWYgcmVhZCBibG9jayBpcyBhIFRlcm1pbmF0aW5nIERlc2NyaXB0b3INCj4g Pj4gKyAgICAvLw0KPiA+PiAgICAgICBpZiAoSVNfVEQgKEJ1ZmZlcikpIHsNCj4gPj4gICAgICAg ICAvLw0KPiA+PiAtICAgICAgLy8gRm91bmQgYSBUZXJtaW5hdGluZyBEZXNjcmlwdG9yLiBTdG9w IHRoZSBzZXF1ZW5jZSB0aGVuLg0KPiA+PiArICAgICAgLy8gVGVybWluYXRlIE1haW4gVm9sdW1l IERlc2NyaXB0b3IgU2VxdWVuY2UNCj4gPj4gICAgICAgICAvLw0KPiA+PiAgICAgICAgIGJyZWFr Ow0KPiA+PiAgICAgICB9DQo+ID4+DQo+ID4+ICAgICAgIGlmIChJU19MVkQgKEJ1ZmZlcikpIHsN Cj4gPj4gICAgICAgICAvLw0KPiA+PiAtICAgICAgLy8gRm91bmQgYSBMb2dpY2FsIFZvbHVtZSBE ZXNjcmlwdG9yLg0KPiA+PiArICAgICAgLy8gU2F2ZSBMb2dpY2FsIFZvbHVtZSBEZXNjcmlwdG9y DQo+ID4+ICAgICAgICAgLy8NCj4gPj4gLSAgICAgIExvZ2ljYWxWb2xEZXNjID0NCj4gPj4gLSAg ICAgICAgKFVERl9MT0dJQ0FMX1ZPTFVNRV9ERVNDUklQVE9SICopDQo+ID4+IC0gICAgICAgIEFs bG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoVURGX0xPR0lDQUxfVk9MVU1FX0RFU0NSSVBUT1IpKTsN Cj4gPj4gLSAgICAgIGlmIChMb2dpY2FsVm9sRGVzYyA9PSBOVUxMKSB7DQo+ID4+IC0gICAgICAg IFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+PiAtICAgICAgICBnb3RvIEVycm9y X0FsbG9jX0x2ZDsNCj4gPj4gLSAgICAgIH0NCj4gPj4gLQ0KPiA+PiAtICAgICAgQ29weU1lbSAo KFZPSUQgKilMb2dpY2FsVm9sRGVzYywgQnVmZmVyLA0KPiA+PiAtICAgICAgICAgICAgICAgc2l6 ZW9mIChVREZfTE9HSUNBTF9WT0xVTUVfREVTQ1JJUFRPUikpOw0KPiA+PiAtICAgICAgVm9sdW1l LT5Mb2dpY2FsVm9sRGVzY3NbVm9sdW1lLT5Mb2dpY2FsVm9sRGVzY3NObysrXSA9DQo+ID4+IExv Z2ljYWxWb2xEZXNjOw0KPiA+PiArICAgICAgQ29weU1lbSAoJlZvbHVtZS0+TG9naWNhbFZvbERl c2MsIEJ1ZmZlciwgc2l6ZW9mDQo+ID4+ICsgKFZvbHVtZS0+TG9naWNhbFZvbERlc2MpKTsNCj4g Pj4gICAgICAgfSBlbHNlIGlmIChJU19QRCAoQnVmZmVyKSkgew0KPiA+PiAgICAgICAgIC8vDQo+ ID4+IC0gICAgICAvLyBGb3VuZCBhIFBhcnRpdGlvbiBEZXNjcmlwdG9yLg0KPiA+PiArICAgICAg Ly8gU2F2ZSBQYXJ0aXRpb24gRGVzY3JpcHRvcg0KPiA+PiAgICAgICAgIC8vDQo+ID4+IC0gICAg ICBQYXJ0aXRpb25EZXNjID0NCj4gPj4gLSAgICAgICAgKFVERl9QQVJUSVRJT05fREVTQ1JJUFRP UiAqKQ0KPiA+PiAtICAgICAgICBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFVERl9QQVJUSVRJ T05fREVTQ1JJUFRPUikpOw0KPiA+PiAtICAgICAgaWYgKFBhcnRpdGlvbkRlc2MgPT0gTlVMTCkg ew0KPiA+PiAtICAgICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPj4gLSAg ICAgICAgZ290byBFcnJvcl9BbGxvY19QZDsNCj4gPj4gLSAgICAgIH0NCj4gPj4gLQ0KPiA+PiAt ICAgICAgQ29weU1lbSAoKFZPSUQgKilQYXJ0aXRpb25EZXNjLCBCdWZmZXIsDQo+ID4+IC0gICAg ICAgICAgICAgICBzaXplb2YgKFVERl9QQVJUSVRJT05fREVTQ1JJUFRPUikpOw0KPiA+PiAtICAg ICAgVm9sdW1lLT5QYXJ0aXRpb25EZXNjc1tWb2x1bWUtPlBhcnRpdGlvbkRlc2NzTm8rK10gPQ0K PiBQYXJ0aXRpb25EZXNjOw0KPiA+PiArICAgICAgQ29weU1lbSAoJlZvbHVtZS0+UGFydGl0aW9u RGVzYywgQnVmZmVyLCBzaXplb2YNCj4gPj4gKyAoVm9sdW1lLT5QYXJ0aXRpb25EZXNjKSk7DQo+ ID4+ICAgICAgIH0NCj4gPj4gLQ0KPiA+PiAtICAgIFN0YXJ0aW5nTHNuKys7DQo+ID4+ICAgICB9 DQo+ID4+DQo+ID4+ICAgICAvLw0KPiA+PiAtICAvLyBXaGVuIGFuIFVERiB2b2x1bWUgKHJldmlz aW9uIDIuMDAgb3IgaGlnaGVyKSBjb250YWlucyBhIEZpbGUNCj4gPj4gRW50cnkgcmF0aGVyDQo+ ID4+IC0gIC8vIHRoYW4gYW4gRXh0ZW5kZWQgRmlsZSBFbnRyeSAod2hpY2ggaXMgbm90IHJlY29t bWVuZGVkIGFzIHBlcg0KPiA+PiBzcGVjKSwgd2UgbmVlZA0KPiA+PiAtICAvLyB0byBtYWtlIHN1 cmUgdGhlIHNpemUgb2YgYSBGRSB3aWxsIGJlIF9hdCBsZWFzdF8gMjA0OA0KPiA+PiAtICAvLyAo VURGX0xPR0lDQUxfU0VDVE9SX1NJWkUpIGJ5dGVzIGxvbmcgdG8ga2VlcCBiYWNrd2FyZA0KPiBj b21wYXRpYmlsaXR5Lg0KPiA+PiArICAvLyBEZXRlcm1pbmUgRkUgKEZpbGUgRW50cnkpIHNpemUN Cj4gPj4gICAgIC8vDQo+ID4+IC0gIExvZ2ljYWxCbG9ja1NpemUgPSBMVl9CTE9DS19TSVpFIChW b2x1bWUsIFVERl9ERUZBVUxUX0xWX05VTSk7DQo+ID4+ICsgIExvZ2ljYWxCbG9ja1NpemUgPSBW b2x1bWUtPkxvZ2ljYWxWb2xEZXNjLkxvZ2ljYWxCbG9ja1NpemU7DQo+ID4+ICAgICBpZiAoTG9n aWNhbEJsb2NrU2l6ZSA+PSBVREZfTE9HSUNBTF9TRUNUT1JfU0laRSkgew0KPiA+PiAtICAgIFZv bHVtZS0+RmlsZUVudHJ5U2l6ZSA9IExvZ2ljYWxCbG9ja1NpemU7DQo+ID4+ICsgICAgVm9sdW1l LT5GaWxlRW50cnlTaXplID0gKFVJTlROKUxvZ2ljYWxCbG9ja1NpemU7DQo+ID4+ICAgICB9IGVs c2Ugew0KPiA+PiAgICAgICBWb2x1bWUtPkZpbGVFbnRyeVNpemUgPSBVREZfTE9HSUNBTF9TRUNU T1JfU0laRTsNCj4gPj4gICAgIH0NCj4gPj4NCj4gPj4gLSAgRnJlZVBvb2wgKEJ1ZmZlcik7DQo+ ID4+IC0NCj4gPj4gLSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+PiAtDQo+ID4+IC1FcnJvcl9B bGxvY19QZDoNCj4gPj4gLUVycm9yX0FsbG9jX0x2ZDoNCj4gPj4gLSAgZm9yIChJbmRleCA9IDA7 IEluZGV4IDwgVm9sdW1lLT5QYXJ0aXRpb25EZXNjc05vOyBJbmRleCsrKSB7DQo+ID4+IC0gICAg RnJlZVBvb2wgKChWT0lEICopVm9sdW1lLT5QYXJ0aXRpb25EZXNjc1tJbmRleF0pOw0KPiA+PiAt ICB9DQo+ID4+IC0NCj4gPj4gLSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgVm9sdW1lLT5Mb2dp Y2FsVm9sRGVzY3NObzsgSW5kZXgrKykgew0KPiA+PiAtICAgIEZyZWVQb29sICgoVk9JRCAqKVZv bHVtZS0+TG9naWNhbFZvbERlc2NzW0luZGV4XSk7DQo+ID4+IC0gIH0NCj4gPj4gKyAgU3RhdHVz ID0gRUZJX1NVQ0NFU1M7DQo+ID4+DQo+ID4+IC1FcnJvcl9SZWFkX0Rpc2tfQmxrOg0KPiA+PiAr T3V0X0ZyZWU6DQo+ID4+ICsgIC8vDQo+ID4+ICsgIC8vIEZyZWUgYmxvY2sgcmVhZCBidWZmZXIN Cj4gPj4gKyAgLy8NCj4gPj4gICAgIEZyZWVQb29sIChCdWZmZXIpOw0KPiA+Pg0KPiA+PiAtRXJy b3JfQWxsb2NfQnVmOg0KPiA+PiAtICBGcmVlUG9vbCAoKFZPSUQgKilWb2x1bWUtPlBhcnRpdGlv bkRlc2NzKTsNCj4gPj4gLSAgVm9sdW1lLT5QYXJ0aXRpb25EZXNjcyA9IE5VTEw7DQo+ID4+IC0N Cj4gPj4gLUVycm9yX0FsbG9jX1BkczoNCj4gPj4gLSAgRnJlZVBvb2wgKChWT0lEICopVm9sdW1l LT5Mb2dpY2FsVm9sRGVzY3MpOw0KPiA+PiAtICBWb2x1bWUtPkxvZ2ljYWxWb2xEZXNjcyA9IE5V TEw7DQo+ID4+IC0NCj4gPj4gICAgIHJldHVybiBTdGF0dXM7DQo+ID4+ICAgfQ0KPiA+Pg0KPiA+ PiBAQCAtMjIzLDExICsxODAsOSBAQCBHZXRQZEZyb21Mb25nQWQgKA0KPiA+PiAgICAgKQ0KPiA+ PiAgIHsNCj4gPj4gICAgIFVERl9MT0dJQ0FMX1ZPTFVNRV9ERVNDUklQVE9SICAqTG9naWNhbFZv bERlc2M7DQo+ID4+IC0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4g Pj4gLSAgVURGX1BBUlRJVElPTl9ERVNDUklQVE9SICAgICAgICpQYXJ0aXRpb25EZXNjOw0KPiA+ PiAgICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnRpdGlvbk51bTsNCj4gPj4N Cj4gPj4gLSAgTG9naWNhbFZvbERlc2MgPSBWb2x1bWUtPkxvZ2ljYWxWb2xEZXNjc1tVREZfREVG QVVMVF9MVl9OVU1dOw0KPiA+PiArICBMb2dpY2FsVm9sRGVzYyA9ICZWb2x1bWUtPkxvZ2ljYWxW b2xEZXNjOw0KPiA+Pg0KPiA+PiAgICAgc3dpdGNoIChMVl9VREZfUkVWSVNJT04gKExvZ2ljYWxW b2xEZXNjKSkgew0KPiA+PiAgICAgY2FzZSAweDAxMDI6DQo+ID4+IEBAIC0yNTIsMTkgKzIwNywy MSBAQCBHZXRQZEZyb21Mb25nQWQgKA0KPiA+PiAgICAgICBQYXJ0aXRpb25OdW0gPSAqKFVJTlQx NiAqKSgoVUlOVE4pJkxvZ2ljYWxWb2xEZXNjLQ0KPiA+UGFydGl0aW9uTWFwc1s0XSk7DQo+ID4+ ICAgICAgIGJyZWFrOw0KPiA+PiAgICAgY2FzZSAweDAyNjA6DQo+ID4+IC0gICAgLy8NCj4gPj4g LSAgICAvLyBGYWxsIHRocm91Z2guDQo+ID4+IC0gICAgLy8NCj4gPj4gLSAgZGVmYXVsdDoNCj4g Pj4gICAgICAgUGFydGl0aW9uTnVtID0gTG9uZ0FkLT5FeHRlbnRMb2NhdGlvbi5QYXJ0aXRpb25S ZWZlcmVuY2VOdW1iZXI7DQo+ID4+ICAgICAgIGJyZWFrOw0KPiA+PiArICBkZWZhdWx0Og0KPiA+ PiArICAgIC8vDQo+ID4+ICsgICAgLy8gVW5oYW5kbGVkIFVERiByZXZpc2lvbg0KPiA+PiArICAg IC8vDQo+ID4+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4+ICAgICB9DQo+ID4+DQo+ID4+IC0gIGZv ciAoSW5kZXggPSAwOyBJbmRleCA8IFZvbHVtZS0+UGFydGl0aW9uRGVzY3NObzsgSW5kZXgrKykg ew0KPiA+PiAtICAgIFBhcnRpdGlvbkRlc2MgPSBWb2x1bWUtPlBhcnRpdGlvbkRlc2NzW0luZGV4 XTsNCj4gPj4gLSAgICBpZiAoUGFydGl0aW9uRGVzYy0+UGFydGl0aW9uTnVtYmVyID09IFBhcnRp dGlvbk51bSkgew0KPiA+PiAtICAgICAgcmV0dXJuIFBhcnRpdGlvbkRlc2M7DQo+ID4+IC0gICAg fQ0KPiA+PiArICAvLw0KPiA+PiArICAvLyBDaGVjayBpZiBwYXJ0aXRpb24gbnVtYmVyIG1hdGNo ZXMgUGFydGl0aW9uIERlc2NyaXB0b3IgZm91bmQgaW4NCj4gPj4gKyBNYWluIFZvbHVtZSAgLy8g RGVzY3JpcHRvciBTZXF1ZW5jZS4NCj4gPj4gKyAgLy8NCj4gPj4gKyAgaWYgKFZvbHVtZS0+UGFy dGl0aW9uRGVzYy5QYXJ0aXRpb25OdW1iZXIgPT0gUGFydGl0aW9uTnVtKSB7DQo+ID4+ICsgICAg cmV0dXJuICZWb2x1bWUtPlBhcnRpdGlvbkRlc2M7DQo+ID4+ICAgICB9DQo+ID4+DQo+ID4+ICAg ICByZXR1cm4gTlVMTDsNCj4gPj4gQEAgLTI4NCw4ICsyNDEsOSBAQCBHZXRMb25nQWRMc24gKA0K PiA+PiAgICAgUGFydGl0aW9uRGVzYyA9IEdldFBkRnJvbUxvbmdBZCAoVm9sdW1lLCBMb25nQWQp Ow0KPiA+PiAgICAgQVNTRVJUIChQYXJ0aXRpb25EZXNjICE9IE5VTEwpOw0KPiA+Pg0KPiA+PiAt ICByZXR1cm4gKFVJTlQ2NClQYXJ0aXRpb25EZXNjLT5QYXJ0aXRpb25TdGFydGluZ0xvY2F0aW9u ICsNCj4gPj4gLSAgICAgICAgICAgICAgICAgTG9uZ0FkLT5FeHRlbnRMb2NhdGlvbi5Mb2dpY2Fs QmxvY2tOdW1iZXI7DQo+ID4+ICsgIHJldHVybiAoVUlOVDY0KVBhcnRpdGlvbkRlc2MtPlBhcnRp dGlvblN0YXJ0aW5nTG9jYXRpb24gLQ0KPiA+PiArICAgIFZvbHVtZS0+TWFpblZkc1N0YXJ0TG9j YXRpb24gKw0KPiA+PiArICAgIExvbmdBZC0+RXh0ZW50TG9jYXRpb24uTG9naWNhbEJsb2NrTnVt YmVyOw0KPiA+PiAgIH0NCj4gPj4NCj4gPj4gICAvLw0KPiA+PiBAQCAtMjkzLDEyICsyNTEsMTMg QEAgR2V0TG9uZ0FkTHNuICgNCj4gPj4gICAvLw0KPiA+PiAgIFVJTlQ2NA0KPiA+PiAgIEdldFNo b3J0QWRMc24gKA0KPiA+PiArICBJTiBVREZfVk9MVU1FX0lORk8gICAgICAgICAgICAgICAgICAq Vm9sdW1lLA0KPiA+PiAgICAgSU4gVURGX1BBUlRJVElPTl9ERVNDUklQVE9SICAgICAgICAgKlBh cnRpdGlvbkRlc2MsDQo+ID4+ICAgICBJTiBVREZfU0hPUlRfQUxMT0NBVElPTl9ERVNDUklQVE9S ICAqU2hvcnRBZA0KPiA+PiAgICAgKQ0KPiA+PiAgIHsNCj4gPj4gLSAgcmV0dXJuIChVSU5UNjQp UGFydGl0aW9uRGVzYy0+UGFydGl0aW9uU3RhcnRpbmdMb2NhdGlvbiArDQo+ID4+IC0gICAgU2hv cnRBZC0+RXh0ZW50UG9zaXRpb247DQo+ID4+ICsgIHJldHVybiAoVUlOVDY0KVBhcnRpdGlvbkRl c2MtPlBhcnRpdGlvblN0YXJ0aW5nTG9jYXRpb24gLQ0KPiA+PiArICAgIFZvbHVtZS0+TWFpblZk c1N0YXJ0TG9jYXRpb24gKyBTaG9ydEFkLT5FeHRlbnRQb3NpdGlvbjsNCj4gPj4gICB9DQo+ID4+ DQo+ID4+ICAgLy8NCj4gPj4gQEAgLTMxMSwzNiArMjcwLDM5IEBAIEVGSV9TVEFUVVMNCj4gPj4g ICBGaW5kRmlsZVNldERlc2NyaXB0b3IgKA0KPiA+PiAgICAgSU4gICBFRklfQkxPQ0tfSU9fUFJP VE9DT0wgICAgKkJsb2NrSW8sDQo+ID4+ICAgICBJTiAgIEVGSV9ESVNLX0lPX1BST1RPQ09MICAg ICAqRGlza0lvLA0KPiA+PiAtICBJTiAgIFVERl9WT0xVTUVfSU5GTyAgICAgICAgICAqVm9sdW1l LA0KPiA+PiAtICBJTiAgIFVJTlROICAgICAgICAgICAgICAgICAgICBMb2dpY2FsVm9sRGVzY051 bSwNCj4gPj4gLSAgT1VUICBVREZfRklMRV9TRVRfREVTQ1JJUFRPUiAgKkZpbGVTZXREZXNjDQo+ ID4+ICsgIElOICAgVURGX1ZPTFVNRV9JTkZPICAgICAgICAgICpWb2x1bWUNCj4gPj4gICAgICkN Cj4gPj4gICB7DQo+ID4+ICAgICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPiA+PiAgICAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgIExzbjsNCj4gPj4gICAg IFVERl9MT0dJQ0FMX1ZPTFVNRV9ERVNDUklQVE9SICAqTG9naWNhbFZvbERlc2M7DQo+ID4+DQo+ ID4+IC0gIExvZ2ljYWxWb2xEZXNjID0gVm9sdW1lLT5Mb2dpY2FsVm9sRGVzY3NbTG9naWNhbFZv bERlc2NOdW1dOw0KPiA+PiArICBMb2dpY2FsVm9sRGVzYyA9ICZWb2x1bWUtPkxvZ2ljYWxWb2xE ZXNjOw0KPiA+PiAgICAgTHNuID0gR2V0TG9uZ0FkTHNuIChWb2x1bWUsICZMb2dpY2FsVm9sRGVz Yy0NCj4gPj4+IExvZ2ljYWxWb2x1bWVDb250ZW50c1VzZSk7DQo+ID4+DQo+ID4+ICAgICAvLw0K PiA+PiAtICAvLyBSZWFkIGV4dGVudCAoTG9uZyBBZCkuDQo+ID4+ICsgIC8vIEFzIHBlciBVREYg Mi42MCBzcGVjaWZpY2F0aW9uOg0KPiA+PiArICAvLw0KPiA+PiArICAvLyBUaGVyZSBzaGFsbCBi ZSBleGFjdGx5IG9uZSBGaWxlIFNldCBEZXNjcmlwdG9yIHJlY29yZGVkIHBlcg0KPiA+PiArIExv Z2ljYWwgIC8vIFZvbHVtZS4NCj4gPj4gKyAgLy8NCj4gPj4gKyAgLy8gUmVhZCBkaXNrIGJsb2Nr DQo+ID4+ICAgICAvLw0KPiA+PiAgICAgU3RhdHVzID0gRGlza0lvLT5SZWFkRGlzayAoDQo+ID4+ ICAgICAgIERpc2tJbywNCj4gPj4gICAgICAgQmxvY2tJby0+TWVkaWEtPk1lZGlhSWQsDQo+ID4+ ICAgICAgIE11bHRVNjR4MzIgKExzbiwgTG9naWNhbFZvbERlc2MtPkxvZ2ljYWxCbG9ja1NpemUp LA0KPiA+PiAtICAgIHNpemVvZiAoVURGX0ZJTEVfU0VUX0RFU0NSSVBUT1IpLA0KPiA+PiAtICAg IChWT0lEICopRmlsZVNldERlc2MNCj4gPj4gKyAgICBzaXplb2YgKFZvbHVtZS0+RmlsZVNldERl c2MpLA0KPiA+PiArICAgICZWb2x1bWUtPkZpbGVTZXREZXNjDQo+ID4+ICAgICAgICk7DQo+ID4+ ICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4+ICAgICAgIHJldHVybiBTdGF0dXM7 DQo+ID4+ICAgICB9DQo+ID4+DQo+ID4+ICAgICAvLw0KPiA+PiAtICAvLyBDaGVjayBpZiB0aGUg cmVhZCBleHRlbnQgY29udGFpbnMgYSB2YWxpZCBGU0QncyB0YWcgaWRlbnRpZmllci4NCj4gPj4g KyAgLy8gQ2hlY2sgaWYgcmVhZCBibG9jayBpcyBhIEZpbGUgU2V0IERlc2NyaXB0b3INCj4gPj4g ICAgIC8vDQo+ID4+IC0gIGlmICghSVNfRlNEIChGaWxlU2V0RGVzYykpIHsNCj4gPj4gKyAgaWYg KCFJU19GU0QgKCZWb2x1bWUtPkZpbGVTZXREZXNjKSkgew0KPiA+PiAgICAgICByZXR1cm4gRUZJ X1ZPTFVNRV9DT1JSVVBURUQ7DQo+ID4+ICAgICB9DQo+ID4+DQo+ID4+IEBAIC0zNDgsNzEgKzMx MCw2IEBAIEZpbmRGaWxlU2V0RGVzY3JpcHRvciAoICB9DQo+ID4+DQo+ID4+ICAgLy8NCj4gPj4g LS8vIEdldCBhbGwgRmlsZSBTZXQgRGVzY3JpcHRvcnMgZm9yIGVhY2ggTG9naWNhbCBWb2x1bWUg RGVzY3JpcHRvci4NCj4gPj4gLS8vDQo+ID4+IC1FRklfU1RBVFVTDQo+ID4+IC1HZXRGaWxlU2V0 RGVzY3JpcHRvcnMgKA0KPiA+PiAtICBJTiAgICAgIEVGSV9CTE9DS19JT19QUk9UT0NPTCAgKkJs b2NrSW8sDQo+ID4+IC0gIElOICAgICAgRUZJX0RJU0tfSU9fUFJPVE9DT0wgICAqRGlza0lvLA0K PiA+PiAtICBJTiBPVVQgIFVERl9WT0xVTUVfSU5GTyAgICAgICAgKlZvbHVtZQ0KPiA+PiAtICAp DQo+ID4+IC17DQo+ID4+IC0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4+ IC0gIFVJTlROICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPj4gLSAgVURGX0ZJTEVfU0VU X0RFU0NSSVBUT1IgICpGaWxlU2V0RGVzYzsNCj4gPj4gLSAgVUlOVE4gICAgICAgICAgICAgICAg ICAgIENvdW50Ow0KPiA+PiAtDQo+ID4+IC0gIFZvbHVtZS0+RmlsZVNldERlc2NzID0NCj4gPj4g LSAgICAoVURGX0ZJTEVfU0VUX0RFU0NSSVBUT1IgKiopQWxsb2NhdGVaZXJvUG9vbCAoDQo+ID4+ IC0gICAgICBWb2x1bWUtPkxvZ2ljYWxWb2xEZXNjc05vICogc2l6ZW9mIChVREZfRklMRV9TRVRf REVTQ1JJUFRPUikpOw0KPiA+PiAtICBpZiAoVm9sdW1lLT5GaWxlU2V0RGVzY3MgPT0gTlVMTCkg ew0KPiA+PiAtICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPj4gLSAgfQ0KPiA+ PiAtDQo+ID4+IC0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFZvbHVtZS0+TG9naWNhbFZvbERl c2NzTm87IEluZGV4KyspIHsNCj4gPj4gLSAgICBGaWxlU2V0RGVzYyA9IEFsbG9jYXRlWmVyb1Bv b2wgKHNpemVvZiAoVURGX0ZJTEVfU0VUX0RFU0NSSVBUT1IpKTsNCj4gPj4gLSAgICBpZiAoRmls ZVNldERlc2MgPT0gTlVMTCkgew0KPiA+PiAtICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNP VVJDRVM7DQo+ID4+IC0gICAgICBnb3RvIEVycm9yX0FsbG9jX0ZzZDsNCj4gPj4gLSAgICB9DQo+ ID4+IC0NCj4gPj4gLSAgICAvLw0KPiA+PiAtICAgIC8vIEZpbmQgYSBGU0QgZm9yIHRoaXMgTFZE Lg0KPiA+PiAtICAgIC8vDQo+ID4+IC0gICAgU3RhdHVzID0gRmluZEZpbGVTZXREZXNjcmlwdG9y ICgNCj4gPj4gLSAgICAgIEJsb2NrSW8sDQo+ID4+IC0gICAgICBEaXNrSW8sDQo+ID4+IC0gICAg ICBWb2x1bWUsDQo+ID4+IC0gICAgICBJbmRleCwNCj4gPj4gLSAgICAgIEZpbGVTZXREZXNjDQo+ ID4+IC0gICAgICApOw0KPiA+PiAtICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPj4g LSAgICAgIGdvdG8gRXJyb3JfRmluZF9Gc2Q7DQo+ID4+IC0gICAgfQ0KPiA+PiAtDQo+ID4+IC0g ICAgLy8NCj4gPj4gLSAgICAvLyBHb3Qgb25lLiBTYXZlIGl0Lg0KPiA+PiAtICAgIC8vDQo+ID4+ IC0gICAgVm9sdW1lLT5GaWxlU2V0RGVzY3NbSW5kZXhdID0gRmlsZVNldERlc2M7DQo+ID4+IC0g IH0NCj4gPj4gLQ0KPiA+PiAtICBWb2x1bWUtPkZpbGVTZXREZXNjc05vID0gVm9sdW1lLT5Mb2dp Y2FsVm9sRGVzY3NObzsNCj4gPj4gLSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+PiAtDQo+ID4+ IC1FcnJvcl9GaW5kX0ZzZDoNCj4gPj4gLSAgQ291bnQgPSBJbmRleCArIDE7DQo+ID4+IC0gIGZv ciAoSW5kZXggPSAwOyBJbmRleCA8IENvdW50OyBJbmRleCsrKSB7DQo+ID4+IC0gICAgRnJlZVBv b2wgKChWT0lEICopVm9sdW1lLT5GaWxlU2V0RGVzY3NbSW5kZXhdKTsNCj4gPj4gLSAgfQ0KPiA+ PiAtDQo+ID4+IC0gIEZyZWVQb29sICgoVk9JRCAqKVZvbHVtZS0+RmlsZVNldERlc2NzKTsNCj4g Pj4gLSAgVm9sdW1lLT5GaWxlU2V0RGVzY3MgPSBOVUxMOw0KPiA+PiAtDQo+ID4+IC1FcnJvcl9B bGxvY19Gc2Q6DQo+ID4+IC0gIHJldHVybiBTdGF0dXM7DQo+ID4+IC19DQo+ID4+IC0NCj4gPj4g LS8vDQo+ID4+ICAgLy8gUmVhZCBWb2x1bWUgYW5kIEZpbGUgU3RydWN0dXJlIG9uIGFuIFVERiBm aWxlIHN5c3RlbS4NCj4gPj4gICAvLw0KPiA+PiAgIEVGSV9TVEFUVVMNCj4gPj4gQEAgLTQyNCw5 ICszMjEsMTAgQEAgUmVhZFZvbHVtZUZpbGVTdHJ1Y3R1cmUgKCAgew0KPiA+PiAgICAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4+ICAgICBVREZfQU5D SE9SX1ZPTFVNRV9ERVNDUklQVE9SX1BPSU5URVIgIEFuY2hvclBvaW50Ow0KPiA+PiArICBVREZf RVhURU5UX0FEICAgICAgICAgICAgICAgICAgICAgICAgICpFeHRlbnRBZDsNCj4gPj4NCj4gPj4g ICAgIC8vDQo+ID4+IC0gIC8vIEZpbmQgYW4gQVZEUC4NCj4gPj4gKyAgLy8gRmluZCBBbmNob3Ig Vm9sdW1lIERlc2NyaXB0b3IgUG9pbnRlcg0KPiA+PiAgICAgLy8NCj4gPj4gICAgIFN0YXR1cyA9 IEZpbmRBbmNob3JWb2x1bWVEZXNjcmlwdG9yUG9pbnRlciAoDQo+ID4+ICAgICAgIEJsb2NrSW8s DQo+ID4+IEBAIC00MzgsMTIgKzMzNiwxOCBAQCBSZWFkVm9sdW1lRmlsZVN0cnVjdHVyZSAoDQo+ ID4+ICAgICB9DQo+ID4+DQo+ID4+ICAgICAvLw0KPiA+PiAtICAvLyBBVkRQIGhhcyBiZWVuIGZv dW5kLiBTdGFydCBNVkRTLg0KPiA+PiArICAvLyBTYXZlIE1haW4gVkRTIHN0YXJ0IGJsb2NrIG51 bWJlciAgLy8gIEV4dGVudEFkID0NCj4gPj4gKyAmQW5jaG9yUG9pbnQuTWFpblZvbHVtZURlc2Ny aXB0b3JTZXF1ZW5jZUV4dGVudDsNCj4gPj4gKw0KPiA+PiArICBWb2x1bWUtPk1haW5WZHNTdGFy dExvY2F0aW9uID0gKFVJTlQ2NClFeHRlbnRBZC0+RXh0ZW50TG9jYXRpb247DQo+ID4+ICsNCj4g Pj4gKyAgLy8NCj4gPj4gKyAgLy8gU3RhcnQgTWFpbiBWb2x1bWUgRGVzY3JpcHRvciBTZXF1ZW5j ZS4NCj4gPj4gICAgIC8vDQo+ID4+ICAgICBTdGF0dXMgPSBTdGFydE1haW5Wb2x1bWVEZXNjcmlw dG9yU2VxdWVuY2UgKA0KPiA+PiAgICAgICBCbG9ja0lvLA0KPiA+PiAgICAgICBEaXNrSW8sDQo+ ID4+IC0gICAgJkFuY2hvclBvaW50LA0KPiA+PiAgICAgICBWb2x1bWUNCj4gPj4gICAgICAgKTsN Cj4gPj4gICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPj4gQEAgLTY5OSw2ICs2MDMs NyBAQCBHZXRBbGxvY2F0aW9uRGVzY3JpcHRvckxzbiAoDQo+ID4+ICAgICAgIHJldHVybiBHZXRM b25nQWRMc24gKFZvbHVtZSwNCj4gKFVERl9MT05HX0FMTE9DQVRJT05fREVTQ1JJUFRPUg0KPiA+ PiAqKUFkKTsNCj4gPj4gICAgIH0gZWxzZSBpZiAoUmVjb3JkaW5nRmxhZ3MgPT0gU0hPUlRfQURT X1NFUVVFTkNFKSB7DQo+ID4+ICAgICAgIHJldHVybiBHZXRTaG9ydEFkTHNuICgNCj4gPj4gKyAg ICAgIFZvbHVtZSwNCj4gPj4gICAgICAgICBHZXRQZEZyb21Mb25nQWQgKFZvbHVtZSwgUGFyZW50 SWNiKSwNCj4gPj4gICAgICAgICAoVURGX1NIT1JUX0FMTE9DQVRJT05fREVTQ1JJUFRPUiAqKUFk DQo+ID4+ICAgICAgICAgKTsNCj4gPj4gQEAgLTc0MCw3ICs2NDUsNyBAQCBHZXRBZWRBZHNPZmZz ZXQgKA0KPiA+PiAgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4+ICAgICB9 DQo+ID4+DQo+ID4+IC0gIExvZ2ljYWxCbG9ja1NpemUgPSBMVl9CTE9DS19TSVpFIChWb2x1bWUs IFVERl9ERUZBVUxUX0xWX05VTSk7DQo+ID4+ICsgIExvZ2ljYWxCbG9ja1NpemUgPSBWb2x1bWUt PkxvZ2ljYWxWb2xEZXNjLkxvZ2ljYWxCbG9ja1NpemU7DQo+ID4+DQo+ID4+ICAgICAvLw0KPiA+ PiAgICAgLy8gUmVhZCBleHRlbnQuDQo+ID4+IEBAIC04OTAsNyArNzk1LDcgQEAgUmVhZEZpbGUg KA0KPiA+PiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgRXh0ZW50TGVuZ3RoOw0KPiA+PiAg ICAgVURGX0ZFX1JFQ09SRElOR19GTEFHUyAgUmVjb3JkaW5nRmxhZ3M7DQo+ID4+DQo+ID4+IC0g IExvZ2ljYWxCbG9ja1NpemUgID0gTFZfQkxPQ0tfU0laRSAoVm9sdW1lLCBVREZfREVGQVVMVF9M Vl9OVU0pOw0KPiA+PiArICBMb2dpY2FsQmxvY2tTaXplICA9IFZvbHVtZS0+TG9naWNhbFZvbERl c2MuTG9naWNhbEJsb2NrU2l6ZTsNCj4gPj4gICAgIERvRnJlZUFlZCAgICAgICAgID0gRkFMU0U7 DQo+ID4+DQo+ID4+ICAgICAvLw0KPiA+PiBAQCAtMTM1NSw2ICsxMjYwLDkgQEAgUmVhZFVkZlZv bHVtZUluZm9ybWF0aW9uICggIHsNCj4gPj4gICAgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiA+Pg0K PiA+PiArICAvLw0KPiA+PiArICAvLyBSZWFkIGFsbCBuZWNlc3NhcnkgVURGIHZvbHVtZSBpbmZv cm1hdGlvbiBhbmQga2VlcCBpdCBwcml2YXRlDQo+ID4+ICsgdG8gdGhlIGRyaXZlciAgLy8NCj4g Pj4gICAgIFN0YXR1cyA9IFJlYWRWb2x1bWVGaWxlU3RydWN0dXJlICgNCj4gPj4gICAgICAgQmxv Y2tJbywNCj4gPj4gICAgICAgRGlza0lvLA0KPiA+PiBAQCAtMTM2NCwxMyArMTI3MiwxMiBAQCBS ZWFkVWRmVm9sdW1lSW5mb3JtYXRpb24gKA0KPiA+PiAgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ PiAgICAgfQ0KPiA+Pg0KPiA+PiAtICBTdGF0dXMgPSBHZXRGaWxlU2V0RGVzY3JpcHRvcnMgKA0K PiA+PiAtICAgIEJsb2NrSW8sDQo+ID4+IC0gICAgRGlza0lvLA0KPiA+PiAtICAgIFZvbHVtZQ0K PiA+PiAtICAgICk7DQo+ID4+ICsgIC8vDQo+ID4+ICsgIC8vIEZpbmQgRmlsZSBTZXQgRGVzY3Jp cHRvcg0KPiA+PiArICAvLw0KPiA+PiArICBTdGF0dXMgPSBGaW5kRmlsZVNldERlc2NyaXB0b3Ig KEJsb2NrSW8sIERpc2tJbywgVm9sdW1lKTsNCj4gPj4gICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gPj4gLSAgICBDbGVhbnVwVm9sdW1lSW5mb3JtYXRpb24gKFZvbHVtZSk7DQo+ID4+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPj4gICAgIH0NCj4gPj4NCj4gPj4gICAgIHJldHVybiBT dGF0dXM7DQo+ID4+IEBAIC0xNDA3LDcgKzEzMTQsNyBAQCBGaW5kUm9vdERpcmVjdG9yeSAoDQo+ ID4+ICAgICAgIEJsb2NrSW8sDQo+ID4+ICAgICAgIERpc2tJbywNCj4gPj4gICAgICAgVm9sdW1l LA0KPiA+PiAtICAgICZWb2x1bWUtPkZpbGVTZXREZXNjc1swXS0+Um9vdERpcmVjdG9yeUljYiwN Cj4gPj4gKyAgICAmVm9sdW1lLT5GaWxlU2V0RGVzYy5Sb290RGlyZWN0b3J5SWNiLA0KPiA+PiAg ICAgICAmRmlsZS0+RmlsZUVudHJ5DQo+ID4+ICAgICAgICk7DQo+ID4+ICAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4+IEBAIC0xNDI0LDcgKzEzMzEsNyBAQCBGaW5kUm9vdERpcmVj dG9yeSAoDQo+ID4+ICAgICAgIEwiXFwiLA0KPiA+PiAgICAgICBOVUxMLA0KPiA+PiAgICAgICAm UGFyZW50LA0KPiA+PiAtICAgICZWb2x1bWUtPkZpbGVTZXREZXNjc1swXS0+Um9vdERpcmVjdG9y eUljYiwNCj4gPj4gKyAgICAmVm9sdW1lLT5GaWxlU2V0RGVzYy5Sb290RGlyZWN0b3J5SWNiLA0K PiA+PiAgICAgICBGaWxlDQo+ID4+ICAgICAgICk7DQo+ID4+ICAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ID4+IEBAIC0xNDY1LDcgKzEzNzIsNyBAQCBGaW5kRmlsZUVudHJ5ICgNCj4g Pj4gICAgIFVJTlQzMiAgICAgIExvZ2ljYWxCbG9ja1NpemU7DQo+ID4+DQo+ID4+ICAgICBMc24g ICAgICAgICAgICAgICA9IEdldExvbmdBZExzbiAoVm9sdW1lLCBJY2IpOw0KPiA+PiAtICBMb2dp Y2FsQmxvY2tTaXplICA9IExWX0JMT0NLX1NJWkUgKFZvbHVtZSwgVURGX0RFRkFVTFRfTFZfTlVN KTsNCj4gPj4gKyAgTG9naWNhbEJsb2NrU2l6ZSAgPSBWb2x1bWUtPkxvZ2ljYWxWb2xEZXNjLkxv Z2ljYWxCbG9ja1NpemU7DQo+ID4+DQo+ID4+ICAgICAqRmlsZUVudHJ5ID0gQWxsb2NhdGVaZXJv UG9vbCAoVm9sdW1lLT5GaWxlRW50cnlTaXplKTsNCj4gPj4gICAgIGlmICgqRmlsZUVudHJ5ID09 IE5VTEwpIHsNCj4gPj4gQEAgLTE5NTksNDMgKzE4NjYsNiBAQCBFcnJvcl9GaW5kX0ZpbGU6DQo+ ID4+ICAgfQ0KPiA+Pg0KPiA+PiAgIC8qKg0KPiA+PiAtICBDbGVhbiB1cCBpbi1tZW1vcnkgVURG IHZvbHVtZSBpbmZvcm1hdGlvbi4NCj4gPj4gLQ0KPiA+PiAtICBAcGFyYW1baW5dIFZvbHVtZSBW b2x1bWUgaW5mb3JtYXRpb24gcG9pbnRlci4NCj4gPj4gLQ0KPiA+PiAtKiovDQo+ID4+IC1WT0lE DQo+ID4+IC1DbGVhbnVwVm9sdW1lSW5mb3JtYXRpb24gKA0KPiA+PiAtICBJTiBVREZfVk9MVU1F X0lORk8gKlZvbHVtZQ0KPiA+PiAtICApDQo+ID4+IC17DQo+ID4+IC0gIFVJTlROIEluZGV4Ow0K PiA+PiAtDQo+ID4+IC0gIGlmIChWb2x1bWUtPkxvZ2ljYWxWb2xEZXNjcyAhPSBOVUxMKSB7DQo+ ID4+IC0gICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgVm9sdW1lLT5Mb2dpY2FsVm9sRGVzY3NO bzsgSW5kZXgrKykgew0KPiA+PiAtICAgICAgRnJlZVBvb2wgKChWT0lEICopVm9sdW1lLT5Mb2dp Y2FsVm9sRGVzY3NbSW5kZXhdKTsNCj4gPj4gLSAgICB9DQo+ID4+IC0gICAgRnJlZVBvb2wgKChW T0lEICopVm9sdW1lLT5Mb2dpY2FsVm9sRGVzY3MpOw0KPiA+PiAtICB9DQo+ID4+IC0NCj4gPj4g LSAgaWYgKFZvbHVtZS0+UGFydGl0aW9uRGVzY3MgIT0gTlVMTCkgew0KPiA+PiAtICAgIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IFZvbHVtZS0+UGFydGl0aW9uRGVzY3NObzsgSW5kZXgrKykgew0K PiA+PiAtICAgICAgRnJlZVBvb2wgKChWT0lEICopVm9sdW1lLT5QYXJ0aXRpb25EZXNjc1tJbmRl eF0pOw0KPiA+PiAtICAgIH0NCj4gPj4gLSAgICBGcmVlUG9vbCAoKFZPSUQgKilWb2x1bWUtPlBh cnRpdGlvbkRlc2NzKTsNCj4gPj4gLSAgfQ0KPiA+PiAtDQo+ID4+IC0gIGlmIChWb2x1bWUtPkZp bGVTZXREZXNjcyAhPSBOVUxMKSB7DQo+ID4+IC0gICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg Vm9sdW1lLT5GaWxlU2V0RGVzY3NObzsgSW5kZXgrKykgew0KPiA+PiAtICAgICAgRnJlZVBvb2wg KChWT0lEICopVm9sdW1lLT5GaWxlU2V0RGVzY3NbSW5kZXhdKTsNCj4gPj4gLSAgICB9DQo+ID4+ IC0gICAgRnJlZVBvb2wgKChWT0lEICopVm9sdW1lLT5GaWxlU2V0RGVzY3MpOw0KPiA+PiAtICB9 DQo+ID4+IC0NCj4gPj4gLSAgWmVyb01lbSAoKFZPSUQgKilWb2x1bWUsIHNpemVvZiAoVURGX1ZP TFVNRV9JTkZPKSk7IC19DQo+ID4+IC0NCj4gPj4gLS8qKg0KPiA+PiAgICAgQ2xlYW4gdXAgaW4t bWVtb3J5IFVERiBmaWxlIGluZm9ybWF0aW9uLg0KPiA+Pg0KPiA+PiAgICAgQHBhcmFtW2luXSBG aWxlIEZpbGUgaW5mb3JtYXRpb24gcG9pbnRlci4NCj4gPj4gQEAgLTIyNDksOTEgKzIxMTksMTAw IEBAIEdldFZvbHVtZVNpemUgKA0KPiA+PiAgICAgT1VUICBVSU5UNjQgICAgICAgICAgICAgICAg ICpGcmVlU3BhY2VTaXplDQo+ID4+ICAgICApDQo+ID4+ICAgew0KPiA+PiAtICBVREZfRVhURU5U X0FEICAgICAgICAgICAgICAgICBFeHRlbnRBZDsNCj4gPj4gLSAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICAgICAgTG9naWNhbEJsb2NrU2l6ZTsNCj4gPj4gLSAgVUlOVDY0ICAgICAgICAgICAg ICAgICAgICAgICAgTHNuOw0KPiA+PiAtICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBT dGF0dXM7DQo+ID4+IC0gIFVERl9MT0dJQ0FMX1ZPTFVNRV9JTlRFR1JJVFkgICpMb2dpY2FsVm9s SW50Ow0KPiA+PiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPj4g LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoOw0KPiA+PiAtICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgICAgICBMc25zTm87DQo+ID4+IC0NCj4gPj4gLSAgKlZvbHVtZVNp emUgICAgID0gMDsNCj4gPj4gLSAgKkZyZWVTcGFjZVNpemUgID0gMDsNCj4gPj4gLQ0KPiA+PiAt ICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBWb2x1bWUtPkxvZ2ljYWxWb2xEZXNjc05vOyBJbmRl eCsrKSB7DQo+ID4+IC0gICAgQ29weU1lbSAoKFZPSUQgKikmRXh0ZW50QWQsDQo+ID4+IC0gICAg ICAgICAgICAgKFZPSUQgKikmVm9sdW1lLT5Mb2dpY2FsVm9sRGVzY3NbSW5kZXhdLQ0KPiA+Pj4g SW50ZWdyaXR5U2VxdWVuY2VFeHRlbnQsDQo+ID4+IC0gICAgICAgICAgICAgc2l6ZW9mIChVREZf RVhURU5UX0FEKSk7DQo+ID4+IC0gICAgaWYgKEV4dGVudEFkLkV4dGVudExlbmd0aCA9PSAwKSB7 DQo+ID4+IC0gICAgICBjb250aW51ZTsNCj4gPj4gLSAgICB9DQo+ID4+ICsgIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4+ICsgIFVERl9MT0dJQ0FMX1ZPTFVNRV9E RVNDUklQVE9SICAqTG9naWNhbFZvbERlc2M7DQo+ID4+ICsgIFVERl9FWFRFTlRfQUQgICAgICAg ICAgICAgICAgICAqRXh0ZW50QWQ7DQo+ID4+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAg ICAgICBMc247DQo+ID4+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBMb2dpY2Fs QmxvY2tTaXplOw0KPiA+PiArICBVREZfTE9HSUNBTF9WT0xVTUVfSU5URUdSSVRZICAgKkxvZ2lj YWxWb2xJbnQ7DQo+ID4+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsN Cj4gPj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsNCj4gPj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIExzbnNObzsNCj4gPj4NCj4gPj4gLSAgICBM b2dpY2FsQmxvY2tTaXplID0gTFZfQkxPQ0tfU0laRSAoVm9sdW1lLCBJbmRleCk7DQo+ID4+ICsg IExvZ2ljYWxWb2xEZXNjID0gJlZvbHVtZS0+TG9naWNhbFZvbERlc2M7DQo+ID4+DQo+ID4+IC0g IFJlYWRfTmV4dF9TZXF1ZW5jZToNCj4gPj4gLSAgICBMb2dpY2FsVm9sSW50ID0gKFVERl9MT0dJ Q0FMX1ZPTFVNRV9JTlRFR1JJVFkgKikNCj4gPj4gLSAgICAgIEFsbG9jYXRlUG9vbCAoRXh0ZW50 QWQuRXh0ZW50TGVuZ3RoKTsNCj4gPj4gLSAgICBpZiAoTG9naWNhbFZvbEludCA9PSBOVUxMKSB7 DQo+ID4+IC0gICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4+IC0gICAgfQ0K PiA+PiArICBFeHRlbnRBZCA9ICZMb2dpY2FsVm9sRGVzYy0+SW50ZWdyaXR5U2VxdWVuY2VFeHRl bnQ7DQo+ID4+DQo+ID4+IC0gICAgTHNuID0gKFVJTlQ2NClFeHRlbnRBZC5FeHRlbnRMb2NhdGlv bjsNCj4gPj4gKyAgaWYgKEV4dGVudEFkLT5FeHRlbnRMZW5ndGggPT0gMCkgew0KPiA+PiArICAg IHJldHVybiBFRklfVk9MVU1FX0NPUlJVUFRFRDsNCj4gPj4gKyAgfQ0KPiA+Pg0KPiA+PiAtICAg IFN0YXR1cyA9IERpc2tJby0+UmVhZERpc2sgKA0KPiA+PiAtICAgICAgRGlza0lvLA0KPiA+PiAt ICAgICAgQmxvY2tJby0+TWVkaWEtPk1lZGlhSWQsDQo+ID4+IC0gICAgICBNdWx0VTY0eDMyIChM c24sIExvZ2ljYWxCbG9ja1NpemUpLA0KPiA+PiAtICAgICAgRXh0ZW50QWQuRXh0ZW50TGVuZ3Ro LA0KPiA+PiAtICAgICAgKFZPSUQgKilMb2dpY2FsVm9sSW50DQo+ID4+IC0gICAgICApOw0KPiA+ PiAtICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPj4gLSAgICAgIEZyZWVQb29sICgo Vk9JRCAqKUxvZ2ljYWxWb2xJbnQpOw0KPiA+PiAtICAgICAgcmV0dXJuIFN0YXR1czsNCj4gPj4g LSAgICB9DQo+ID4+ICsgIExvZ2ljYWxWb2xJbnQgPSBBbGxvY2F0ZVBvb2wgKEV4dGVudEFkLT5F eHRlbnRMZW5ndGgpOyAgaWYNCj4gPj4gKyAoTG9naWNhbFZvbEludCA9PSBOVUxMKSB7DQo+ID4+ ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+PiArICB9DQo+ID4+DQo+ID4+ IC0gICAgaWYgKCFJU19MVklEIChMb2dpY2FsVm9sSW50KSkgew0KPiA+PiAtICAgICAgRnJlZVBv b2wgKChWT0lEICopTG9naWNhbFZvbEludCk7DQo+ID4+IC0gICAgICByZXR1cm4gRUZJX1ZPTFVN RV9DT1JSVVBURUQ7DQo+ID4+IC0gICAgfQ0KPiA+PiArICAvLw0KPiA+PiArICAvLyBHZXQgbG9j YXRpb24gb2YgTG9naWNhbCBWb2x1bWUgSW50ZWdyaXR5IERlc2NyaXB0b3IgIC8vICBMc24gPQ0K PiA+PiArIChVSU5UNjQpRXh0ZW50QWQtPkV4dGVudExvY2F0aW9uIC0gVm9sdW1lLT5NYWluVmRz U3RhcnRMb2NhdGlvbjsNCj4gPj4NCj4gPj4gLSAgICBMZW5ndGggPSBMb2dpY2FsVm9sSW50LT5O dW1iZXJPZlBhcnRpdGlvbnM7DQo+ID4+IC0gICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTGVu Z3RoOyBJbmRleCArPSBzaXplb2YgKFVJTlQzMikpIHsNCj4gPj4gLSAgICAgIExzbnNObyA9ICoo VUlOVDMyICopKChVSU5UOCAqKUxvZ2ljYWxWb2xJbnQtPkRhdGEgKyBJbmRleCk7DQo+ID4+IC0g ICAgICBpZiAoTHNuc05vID09IDB4RkZGRkZGRkZVTCkgew0KPiA+PiAtICAgICAgICAvLw0KPiA+ PiAtICAgICAgICAvLyBTaXplIG5vdCBzcGVjaWZpZWQuDQo+ID4+IC0gICAgICAgIC8vDQo+ID4+ IC0gICAgICAgIGNvbnRpbnVlOw0KPiA+PiAtICAgICAgfQ0KPiA+PiArICBMb2dpY2FsQmxvY2tT aXplID0gTG9naWNhbFZvbERlc2MtPkxvZ2ljYWxCbG9ja1NpemU7DQo+ID4+DQo+ID4+IC0gICAg ICAqRnJlZVNwYWNlU2l6ZSArPSBNdWx0VTY0eDMyICgoVUlOVDY0KUxzbnNObywgTG9naWNhbEJs b2NrU2l6ZSk7DQo+ID4+IC0gICAgfQ0KPiA+PiArICAvLw0KPiA+PiArICAvLyBSZWFkIGRpc2sg YmxvY2sNCj4gPj4gKyAgLy8NCj4gPj4gKyAgU3RhdHVzID0gRGlza0lvLT5SZWFkRGlzayAoDQo+ ID4+ICsgICAgRGlza0lvLA0KPiA+PiArICAgIEJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkLA0KPiA+ PiArICAgIE11bHRVNjR4MzIgKExzbiwgTG9naWNhbEJsb2NrU2l6ZSksDQo+ID4+ICsgICAgRXh0 ZW50QWQtPkV4dGVudExlbmd0aCwNCj4gPj4gKyAgICBMb2dpY2FsVm9sSW50DQo+ID4+ICsgICAg KTsNCj4gPj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+PiArICAgIGdvdG8gT3V0 X0ZyZWU7DQo+ID4+ICsgIH0NCj4gPj4NCj4gPj4gLSAgICBMZW5ndGggPSAoTG9naWNhbFZvbElu dC0+TnVtYmVyT2ZQYXJ0aXRpb25zICogc2l6ZW9mIChVSU5UMzIpKSA8PCAxOw0KPiA+PiAtICAg IGZvciAoOyBJbmRleCA8IExlbmd0aDsgSW5kZXggKz0gc2l6ZW9mIChVSU5UMzIpKSB7DQo+ID4+ IC0gICAgICBMc25zTm8gPSAqKFVJTlQzMiAqKSgoVUlOVDggKilMb2dpY2FsVm9sSW50LT5EYXRh ICsgSW5kZXgpOw0KPiA+PiAtICAgICAgaWYgKExzbnNObyA9PSAweEZGRkZGRkZGVUwpIHsNCj4g Pj4gLSAgICAgICAgLy8NCj4gPj4gLSAgICAgICAgLy8gU2l6ZSBub3Qgc3BlY2lmaWVkLg0KPiA+ PiAtICAgICAgICAvLw0KPiA+PiAtICAgICAgICBjb250aW51ZTsNCj4gPj4gLSAgICAgIH0NCj4g Pj4gKyAgLy8NCj4gPj4gKyAgLy8gQ2hlY2sgaWYgcmVhZCBibG9jayBpcyBhIExvZ2ljYWwgVm9s dW1lIEludGVncml0eSBEZXNjcmlwdG9yDQo+ID4+ICsgLy8gaWYgKCFJU19MVklEIChMb2dpY2Fs Vm9sSW50KSkgew0KPiA+PiArICAgIFN0YXR1cyA9IEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0KPiA+ PiArICAgIGdvdG8gT3V0X0ZyZWU7DQo+ID4+ICsgIH0NCj4gPj4NCj4gPj4gLSAgICAgICpWb2x1 bWVTaXplICs9IE11bHRVNjR4MzIgKChVSU5UNjQpTHNuc05vLCBMb2dpY2FsQmxvY2tTaXplKTsN Cj4gPj4gLSAgICB9DQo+ID4+ICsgICpWb2x1bWVTaXplID0gMDsNCj4gPj4gKyAgKkZyZWVTcGFj ZVNpemUgPSAwOw0KPiA+Pg0KPiA+PiAtICAgIENvcHlNZW0gKChWT0lEICopJkV4dGVudEFkLChW T0lEICopJkxvZ2ljYWxWb2xJbnQtDQo+ID4+PiBOZXh0SW50ZWdyaXR5RXh0ZW50LA0KPiA+PiAt ICAgICAgICAgICAgIHNpemVvZiAoVURGX0VYVEVOVF9BRCkpOw0KPiA+PiAtICAgIGlmIChFeHRl bnRBZC5FeHRlbnRMZW5ndGggPiAwKSB7DQo+ID4+IC0gICAgICBGcmVlUG9vbCAoKFZPSUQgKilM b2dpY2FsVm9sSW50KTsNCj4gPj4gLSAgICAgIGdvdG8gUmVhZF9OZXh0X1NlcXVlbmNlOw0KPiA+ PiArICBMZW5ndGggPSBMb2dpY2FsVm9sSW50LT5OdW1iZXJPZlBhcnRpdGlvbnM7DQo+ID4+ICsg IGZvciAoSW5kZXggPSAwOyBJbmRleCA8IExlbmd0aDsgSW5kZXggKz0gc2l6ZW9mIChVSU5UMzIp KSB7DQo+ID4+ICsgICAgTHNuc05vID0gKihVSU5UMzIgKikoKFVJTlQ4ICopTG9naWNhbFZvbElu dC0+RGF0YSArIEluZGV4KTsNCj4gPj4gKyAgICAvLw0KPiA+PiArICAgIC8vIENoZWNrIGlmIHNp emUgaXMgbm90IHNwZWNpZmllZA0KPiA+PiArICAgIC8vDQo+ID4+ICsgICAgaWYgKExzbnNObyA9 PSAweEZGRkZGRkZGVUwpIHsNCj4gPj4gKyAgICAgIGNvbnRpbnVlOw0KPiA+PiAgICAgICB9DQo+ ID4+ICsgICAgLy8NCj4gPj4gKyAgICAvLyBBY2N1bXVsYXRlIGZyZWUgc3BhY2Ugc2l6ZQ0KPiA+ PiArICAgIC8vDQo+ID4+ICsgICAgKkZyZWVTcGFjZVNpemUgKz0gTXVsdFU2NHgzMiAoKFVJTlQ2 NClMc25zTm8sIExvZ2ljYWxCbG9ja1NpemUpOw0KPiA+PiArIH0NCj4gPj4NCj4gPj4gLSAgICBG cmVlUG9vbCAoKFZPSUQgKilMb2dpY2FsVm9sSW50KTsNCj4gPj4gKyAgTGVuZ3RoID0gTG9naWNh bFZvbEludC0+TnVtYmVyT2ZQYXJ0aXRpb25zICogc2l6ZW9mIChVSU5UMzIpICogMjsNCj4gPj4g KyBmb3IgKDsgSW5kZXggPCBMZW5ndGg7IEluZGV4ICs9IHNpemVvZiAoVUlOVDMyKSkgew0KPiA+ PiArICAgIExzbnNObyA9ICooVUlOVDMyICopKChVSU5UOCAqKUxvZ2ljYWxWb2xJbnQtPkRhdGEg KyBJbmRleCk7DQo+ID4+ICsgICAgLy8NCj4gPj4gKyAgICAvLyBDaGVjayBpZiBzaXplIGlzIG5v dCBzcGVjaWZpZWQNCj4gPj4gKyAgICAvLw0KPiA+PiArICAgIGlmIChMc25zTm8gPT0gMHhGRkZG RkZGRlVMKSB7DQo+ID4+ICsgICAgICBjb250aW51ZTsNCj4gPj4gKyAgICB9DQo+ID4+ICsgICAg Ly8NCj4gPj4gKyAgICAvLyBBY2N1bXVsYXRlIHVzZWQgdm9sdW1lIHNwYWNlDQo+ID4+ICsgICAg Ly8NCj4gPj4gKyAgICAqVm9sdW1lU2l6ZSArPSBNdWx0VTY0eDMyICgoVUlOVDY0KUxzbnNObywg TG9naWNhbEJsb2NrU2l6ZSk7DQo+ID4+ICAgICB9DQo+ID4+DQo+ID4+IC0gIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gPj4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ID4+ICsNCj4gPj4gK091 dF9GcmVlOg0KPiA+PiArICAvLw0KPiA+PiArICAvLyBGcmVlIExvZ2ljYWwgVm9sdW1lIEludGVn cml0eSBEZXNjcmlwdG9yDQo+ID4+ICsgIC8vDQo+ID4+ICsgIEZyZWVQb29sIChMb2dpY2FsVm9s SW50KTsNCj4gPj4gKw0KPiA+PiArICByZXR1cm4gU3RhdHVzOw0KPiA+PiAgIH0NCj4gPj4NCj4g Pj4gICAvKioNCj4gPj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRGlzay9V ZGZEeGUvVWRmLmMNCj4gPj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Rpc2svVWRmRHhlL1Vk Zi5jDQo+ID4+IGluZGV4IDQ5ZGM3MDc3YjcuLmQ0MTYzYjg5Y2EgMTAwNjQ0DQo+ID4+IC0tLSBh L01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRGlzay9VZGZEeGUvVWRmLmMNCj4gPj4gKysrIGIvTWRl TW9kdWxlUGtnL1VuaXZlcnNhbC9EaXNrL1VkZkR4ZS9VZGYuYw0KPiA+PiBAQCAtMjc2LDEzICsy NzYsNiBAQCBVZGZEcml2ZXJCaW5kaW5nU3RvcCAoDQo+ID4+ICAgICAgICAgTlVMTA0KPiA+PiAg ICAgICAgICk7DQo+ID4+DQo+ID4+IC0gICAgLy8NCj4gPj4gLSAgICAvLyBDaGVjayBpZiB0aGVy ZSdzIGFueSBvcGVuIGZpbGUuIElmIHNvLCBjbGVhbiB0aGVtIHVwLg0KPiA+PiAtICAgIC8vDQo+ ID4+IC0gICAgaWYgKFByaXZGc0RhdGEtPk9wZW5GaWxlcyA+IDApIHsNCj4gPj4gLSAgICAgIENs ZWFudXBWb2x1bWVJbmZvcm1hdGlvbiAoJlByaXZGc0RhdGEtPlZvbHVtZSk7DQo+ID4+IC0gICAg fQ0KPiA+PiAtDQo+ID4+ICAgICAgIEZyZWVQb29sICgoVk9JRCAqKVByaXZGc0RhdGEpOw0KPiA+ PiAgICAgfQ0KPiA+Pg0KPiA+PiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9E aXNrL1VkZkR4ZS9VZGYuaA0KPiA+PiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRGlzay9VZGZE eGUvVWRmLmgNCj4gPj4gaW5kZXggMjQwZDQyMGZmNS4uYzVmODM5MTRkOCAxMDA2NDQNCj4gPj4g LS0tIGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9EaXNrL1VkZkR4ZS9VZGYuaA0KPiA+PiArKysg Yi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Rpc2svVWRmRHhlL1VkZi5oDQo+ID4+IEBAIC00OSwx NiArNDksOCBAQA0KPiA+PiAgICAgICB7IDB4ODksIDB4NTYsIDB4NzMsIDB4Q0QsIDB4QTMsIDB4 MjYsIDB4Q0QsIDB4MEEgfSAgXA0KPiA+PiAgICAgfQ0KPiA+Pg0KPiA+PiAtI2RlZmluZSBVREZf REVGQVVMVF9MVl9OVU0gMA0KPiA+PiAtDQo+ID4+ICAgI2RlZmluZSBJU19QVkQoX1BvaW50ZXIp IFwNCj4gPj4gICAgICgoQk9PTEVBTikoX0dFVF9UQUdfSUQgKF9Qb2ludGVyKSA9PSAxKSkgLSNk ZWZpbmUgSVNfUEQoX1BvaW50ZXIpDQo+ID4+IFwNCj4gPj4gLSAgKChCT09MRUFOKShfR0VUX1RB R19JRCAoX1BvaW50ZXIpID09IDUpKSAtI2RlZmluZSBJU19MVkQoX1BvaW50ZXIpDQo+ID4+IFwN Cj4gPj4gLSAgKChCT09MRUFOKShfR0VUX1RBR19JRCAoX1BvaW50ZXIpID09IDYpKSAtI2RlZmlu ZSBJU19URChfUG9pbnRlcikNCj4gPj4gXA0KPiA+PiAtICAoKEJPT0xFQU4pKF9HRVRfVEFHX0lE IChfUG9pbnRlcikgPT0gOCkpICAjZGVmaW5lIElTX0ZTRChfUG9pbnRlcikNCj4gXA0KPiA+PiAg ICAgKChCT09MRUFOKShfR0VUX1RBR19JRCAoX1BvaW50ZXIpID09IDI1NikpICAjZGVmaW5lDQo+ ID4+IElTX0ZFKF9Qb2ludGVyKSBcIEBAIC0xNTIsMTQgKzE0NCw4IEBAIHR5cGVkZWYgZW51bSB7 ICAjZGVmaW5lDQo+ID4+IElTX1ZBTElEX0NPTVBSRVNTSU9OX0lEKF9Db21wSWQpIFwNCj4gPj4g ICAgICgoQk9PTEVBTikoKF9Db21wSWQpID09IDggfHwgKF9Db21wSWQpID09IDE2KSkNCj4gPj4N Cj4gPj4gLSNkZWZpbmUgTFZfQkxPQ0tfU0laRShfVm9sLCBfTHZOdW0pIFwNCj4gPj4gLSAgKF9W b2wpLT5Mb2dpY2FsVm9sRGVzY3NbKF9Mdk51bSldLT5Mb2dpY2FsQmxvY2tTaXplDQo+ID4+IC0N Cj4gPj4gICAjZGVmaW5lIFVERl9TVEFOREFSRF9JREVOVElGSUVSX0xFTkdUSCAgIDUNCj4gPj4N Cj4gPj4gLSNkZWZpbmUgTFZfVURGX1JFVklTSU9OKF9MdikgXA0KPiA+PiAtICAqKFVJTlQxNiAq KShVSU5UTikoX0x2KS0+RG9tYWluSWRlbnRpZmllci5JZGVudGlmaWVyU3VmZml4DQo+ID4+IC0N Cj4gPj4gICAjcHJhZ21hIHBhY2soMSkNCj4gPj4NCj4gPj4gICB0eXBlZGVmIHN0cnVjdCB7DQo+ ID4+IEBAIC0xODYsMTcgKzE3Miw2IEBAIHR5cGVkZWYgc3RydWN0IHsNCj4gPj4gICAjcHJhZ21h IHBhY2soMSkNCj4gPj4NCj4gPj4gICB0eXBlZGVmIHN0cnVjdCB7DQo+ID4+IC0gIFVJTlQ4ICAg ICAgICAgICBDaGFyYWN0ZXJTZXRUeXBlOw0KPiA+PiAtICBVSU5UOCAgICAgICAgICAgQ2hhcmFj dGVyU2V0SW5mb1s2M107DQo+ID4+IC19IFVERl9DSEFSX1NQRUM7DQo+ID4+IC0NCj4gPj4gLXR5 cGVkZWYgc3RydWN0IHsNCj4gPj4gLSAgVUlOVDggICAgICAgICAgIEZsYWdzOw0KPiA+PiAtICBV SU5UOCAgICAgICAgICAgSWRlbnRpZmllclsyM107DQo+ID4+IC0gIFVJTlQ4ICAgICAgICAgICBJ ZGVudGlmaWVyU3VmZml4WzhdOw0KPiA+PiAtfSBVREZfRU5USVRZX0lEOw0KPiA+PiAtDQo+ID4+ IC10eXBlZGVmIHN0cnVjdCB7DQo+ID4+ICAgICBVSU5UMTYgICAgICAgICAgVHlwZUFuZFRpbWV6 b25lOw0KPiA+PiAgICAgSU5UMTYgICAgICAgICAgIFllYXI7DQo+ID4+ICAgICBVSU5UOCAgICAg ICAgICAgTW9udGg7DQo+ID4+IEBAIC0yMTAsMTcgKzE4NSw2IEBAIHR5cGVkZWYgc3RydWN0IHsN Cj4gPj4gICB9IFVERl9USU1FU1RBTVA7DQo+ID4+DQo+ID4+ICAgdHlwZWRlZiBzdHJ1Y3Qgew0K PiA+PiAtICBVSU5UMzIgICAgICAgIExvZ2ljYWxCbG9ja051bWJlcjsNCj4gPj4gLSAgVUlOVDE2 ICAgICAgICBQYXJ0aXRpb25SZWZlcmVuY2VOdW1iZXI7DQo+ID4+IC19IFVERl9MQl9BRERSOw0K PiA+PiAtDQo+ID4+IC10eXBlZGVmIHN0cnVjdCB7DQo+ID4+IC0gIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgICAgIEV4dGVudExlbmd0aDsNCj4gPj4gLSAgVURGX0xCX0FERFIgICAgICAg ICAgICAgICAgICAgICAgRXh0ZW50TG9jYXRpb247DQo+ID4+IC0gIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEltcGxlbWVudGF0aW9uVXNlWzZdOw0KPiA+PiAtfSBVREZfTE9OR19B TExPQ0FUSU9OX0RFU0NSSVBUT1I7DQo+ID4+IC0NCj4gPj4gLXR5cGVkZWYgc3RydWN0IHsNCj4g Pj4gICAgIFVERl9ERVNDUklQVE9SX1RBRyAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclRhZzsN Cj4gPj4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJldkFsbG9jYXRp b25FeHRlbnREZXNjcmlwdG9yOw0KPiA+PiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMZW5ndGhPZkFsbG9jYXRpb25EZXNjcmlwdG9yczsNCj4gPj4gQEAgLTIzNSwzNyAr MTk5LDYgQEAgdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+PiAgIH0gVURGX1ZPTFVNRV9ERVNDUklQVE9S Ow0KPiA+Pg0KPiA+PiAgIHR5cGVkZWYgc3RydWN0IHsNCj4gPj4gLSAgVURGX0RFU0NSSVBUT1Jf VEFHICAgICAgICAgRGVzY3JpcHRvclRhZzsNCj4gPj4gLSAgVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgVm9sdW1lRGVzY3JpcHRvclNlcXVlbmNlTnVtYmVyOw0KPiA+PiAtICBVSU5UMTYgICAg ICAgICAgICAgICAgICAgICBQYXJ0aXRpb25GbGFnczsNCj4gPj4gLSAgVUlOVDE2ICAgICAgICAg ICAgICAgICAgICAgUGFydGl0aW9uTnVtYmVyOw0KPiA+PiAtICBVREZfRU5USVRZX0lEICAgICAg ICAgICAgICBQYXJ0aXRpb25Db250ZW50czsNCj4gPj4gLSAgVUlOVDggICAgICAgICAgICAgICAg ICAgICAgUGFydGl0aW9uQ29udGVudHNVc2VbMTI4XTsNCj4gPj4gLSAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICAgQWNjZXNzVHlwZTsNCj4gPj4gLSAgVUlOVDMyICAgICAgICAgICAgICAgICAg ICAgUGFydGl0aW9uU3RhcnRpbmdMb2NhdGlvbjsNCj4gPj4gLSAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICAgUGFydGl0aW9uTGVuZ3RoOw0KPiA+PiAtICBVREZfRU5USVRZX0lEICAgICAgICAg ICAgICBJbXBsZW1lbnRhdGlvbklkZW50aWZpZXI7DQo+ID4+IC0gIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAgIEltcGxlbWVudGF0aW9uVXNlWzEyOF07DQo+ID4+IC0gIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgIFJlc2VydmVkWzE1Nl07DQo+ID4+IC19IFVERl9QQVJUSVRJT05fREVTQ1JJ UFRPUjsNCj4gPj4gLQ0KPiA+PiAtdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+PiAtICBVREZfREVTQ1JJ UFRPUl9UQUcgICAgICAgICAgICAgIERlc2NyaXB0b3JUYWc7DQo+ID4+IC0gIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgICAgICAgVm9sdW1lRGVzY3JpcHRvclNlcXVlbmNlTnVtYmVyOw0KPiA+ PiAtICBVREZfQ0hBUl9TUEVDICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JDaGFyYWN0ZXJT ZXQ7DQo+ID4+IC0gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9naWNhbFZvbHVt ZUlkZW50aWZpZXJbMTI4XTsNCj4gPj4gLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAg ICBMb2dpY2FsQmxvY2tTaXplOw0KPiA+PiAtICBVREZfRU5USVRZX0lEICAgICAgICAgICAgICAg ICAgIERvbWFpbklkZW50aWZpZXI7DQo+ID4+IC0gIFVERl9MT05HX0FMTE9DQVRJT05fREVTQ1JJ UFRPUiAgTG9naWNhbFZvbHVtZUNvbnRlbnRzVXNlOw0KPiA+PiAtICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgICAgICAgIE1hcFRhYmxlTGVuZ3RoOw0KPiA+PiAtICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgICAgICAgIE51bWJlck9mUGFydGl0aW9uTWFwczsNCj4gPj4gLSAgVURGX0VOVElU WV9JRCAgICAgICAgICAgICAgICAgICBJbXBsZW1lbnRhdGlvbklkZW50aWZpZXI7DQo+ID4+IC0g IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGVtZW50YXRpb25Vc2VbMTI4XTsN Cj4gPj4gLSAgVURGX0VYVEVOVF9BRCAgICAgICAgICAgICAgICAgICBJbnRlZ3JpdHlTZXF1ZW5j ZUV4dGVudDsNCj4gPj4gLSAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJ0aXRp b25NYXBzWzZdOw0KPiA+PiAtfSBVREZfTE9HSUNBTF9WT0xVTUVfREVTQ1JJUFRPUjsNCj4gPj4g LQ0KPiA+PiAtdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+PiAgICAgVURGX0RFU0NSSVBUT1JfVEFHICAg ICAgICAgICAgIERlc2NyaXB0b3JUYWc7DQo+ID4+ICAgICBVREZfVElNRVNUQU1QICAgICAgICAg ICAgICAgICAgUmVjb3JkaW5nRGF0ZVRpbWU7DQo+ID4+ICAgICBVSU5UMzIgICAgICAgICAgICAg ICAgICAgICAgICAgSW50ZWdyaXR5VHlwZTsNCj4gPj4gQEAgLTM4OSwxMiArMzIyLDEwIEBAIHR5 cGVkZWYgc3RydWN0IHsNCj4gPj4gICAvLyBVREYgZmlsZXN5c3RlbSBkcml2ZXIncyBwcml2YXRl IGRhdGEgIC8vICB0eXBlZGVmIHN0cnVjdCB7DQo+ID4+IC0gIFVERl9MT0dJQ0FMX1ZPTFVNRV9E RVNDUklQVE9SICAqKkxvZ2ljYWxWb2xEZXNjczsNCj4gPj4gLSAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgIExvZ2ljYWxWb2xEZXNjc05vOw0KPiA+PiAtICBVREZfUEFSVElUSU9OX0RF U0NSSVBUT1IgICAgICAgKipQYXJ0aXRpb25EZXNjczsNCj4gPj4gLSAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgIFBhcnRpdGlvbkRlc2NzTm87DQo+ID4+IC0gIFVERl9GSUxFX1NFVF9E RVNDUklQVE9SICAgICAgICAqKkZpbGVTZXREZXNjczsNCj4gPj4gLSAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgIEZpbGVTZXREZXNjc05vOw0KPiA+PiArICBVSU5UNjQgICAgICAgICAg ICAgICAgICAgICAgICAgTWFpblZkc1N0YXJ0TG9jYXRpb247DQo+ID4+ICsgIFVERl9MT0dJQ0FM X1ZPTFVNRV9ERVNDUklQVE9SICBMb2dpY2FsVm9sRGVzYzsNCj4gPj4gKyAgVURGX1BBUlRJVElP Tl9ERVNDUklQVE9SICAgICAgIFBhcnRpdGlvbkRlc2M7DQo+ID4+ICsgIFVERl9GSUxFX1NFVF9E RVNDUklQVE9SICAgICAgICBGaWxlU2V0RGVzYzsNCj4gPj4gICAgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICBGaWxlRW50cnlTaXplOw0KPiA+PiAgIH0gVURGX1ZPTFVNRV9JTkZPOw0K PiA+Pg0KPiA+PiBAQCAtODgzLDE3ICs4MTQsNiBAQCBSZXNvbHZlU3ltbGluayAoDQo+ID4+ICAg ICApOw0KPiA+Pg0KPiA+PiAgIC8qKg0KPiA+PiAtICBDbGVhbiB1cCBpbi1tZW1vcnkgVURGIHZv bHVtZSBpbmZvcm1hdGlvbi4NCj4gPj4gLQ0KPiA+PiAtICBAcGFyYW1baW5dIFZvbHVtZSBWb2x1 bWUgaW5mb3JtYXRpb24gcG9pbnRlci4NCj4gPj4gLQ0KPiA+PiAtKiovDQo+ID4+IC1WT0lEDQo+ ID4+IC1DbGVhbnVwVm9sdW1lSW5mb3JtYXRpb24gKA0KPiA+PiAtICBJTiBVREZfVk9MVU1FX0lO Rk8gKlZvbHVtZQ0KPiA+PiAtICApOw0KPiA+PiAtDQo+ID4+IC0vKioNCj4gPj4gICAgIENsZWFu IHVwIGluLW1lbW9yeSBVREYgZmlsZSBpbmZvcm1hdGlvbi4NCj4gPj4NCj4gPj4gICAgIEBwYXJh bVtpbl0gRmlsZSBGaWxlIGluZm9ybWF0aW9uIHBvaW50ZXIuDQo+ID4+IC0tDQo+ID4+IDIuMTEu MA0KPiA+DQo+ID4NCg==