From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.65; helo=mga03.intel.com; envelope-from=eric.dong@intel.com; receiver=edk2-devel@lists.01.org Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (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 AD08121164EE1 for ; Tue, 16 Oct 2018 00:43:54 -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 orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Oct 2018 00:43:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,387,1534834800"; d="scan'208";a="272781430" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga006.fm.intel.com with ESMTP; 16 Oct 2018 00:43:54 -0700 Received: from fmsmsx158.amr.corp.intel.com (10.18.116.75) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 16 Oct 2018 00:43:54 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx158.amr.corp.intel.com (10.18.116.75) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 16 Oct 2018 00:43:53 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.217]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.245]) with mapi id 14.03.0319.002; Tue, 16 Oct 2018 15:43:51 +0800 From: "Dong, Eric" To: "Ni, Ruiyu" , "edk2-devel@lists.01.org" CC: Laszlo Ersek Thread-Topic: [Patch 3/4] UefiCpuPkg/RegisterCpuFeaturesLib: Add logic to support semaphore type. Thread-Index: AQHUZPzlEiuzwMppDEew1z+v6Dft86UhV4Gg Date: Tue, 16 Oct 2018 07:43:49 +0000 Message-ID: References: <20181015024948.228-1-eric.dong@intel.com> <20181015024948.228-4-eric.dong@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch 3/4] UefiCpuPkg/RegisterCpuFeaturesLib: Add logic to support semaphore type. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Oct 2018 07:43:55 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgUnVpeXUsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTmksIFJ1 aXl1DQo+IFNlbnQ6IFR1ZXNkYXksIE9jdG9iZXIgMTYsIDIwMTggMTE6MDUgQU0NCj4gVG86IERv bmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0K PiBDYzogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gU3ViamVjdDogUmU6IFtQ YXRjaCAzLzRdIFVlZmlDcHVQa2cvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYjogQWRkIGxvZ2ljIHRv DQo+IHN1cHBvcnQgc2VtYXBob3JlIHR5cGUuDQo+IA0KPiBPbiAxMC8xNS8yMDE4IDEwOjQ5IEFN LCBFcmljIERvbmcgd3JvdGU6DQo+ID4gSW4gYSBzeXN0ZW0gd2hpY2ggaGFzIG11bHRpcGxlIGNv cmVzLCBjdXJyZW50IHNldCByZWdpc3RlciB2YWx1ZSB0YXNrIGNvc3RzDQo+IGh1Z2UgdGltZXMu DQo+ID4gQWZ0ZXIgaW52ZXN0aWdhdGlvbiwgY3VycmVudCBzZXQgTVNSIHRhc2sgY29zdHMgbW9z dCBvZiB0aGUgdGltZXMuIEN1cnJlbnQNCj4gbG9naWMgdXNlcw0KPiA+IFNwaW5Mb2NrIHRvIGxl dCBzZXQgTVNSIHRhc2sgYXMgYW4gc2luZ2xlIHRocmVhZCB0YXNrIGZvciBhbGwgY29yZXMuIEJl Y2F1c2UNCj4gTVNSIGhhcw0KPiA+IHNjb3BlIGF0dHJpYnV0ZSB3aGljaCBtYXkgY2F1c2UgR1Ag ZmF1bHQgaWYgbXVsdGlwbGUgQVBzIHNldCBNU1IgYXQgdGhlDQo+IHNhbWUgdGltZSwNCj4gPiBj dXJyZW50IGxvZ2ljIHVzZSBhbiBlYXNpZXN0IHNvbHV0aW9uICh1c2UgU3BpbkxvY2spIHRvIGF2 b2lkIHRoaXMgaXNzdWUsIGJ1dCBpdA0KPiB3aWxsDQo+ID4gY29zdCBodWdlIHRpbWVzLg0KPiA+ DQo+ID4gSW4gb3JkZXIgdG8gZml4IHRoaXMgcGVyZm9ybWFuY2UgaXNzdWUsIG5ldyBzb2x1dGlv biB3aWxsIHNldCBNU1JzIGJhc2Ugb24NCj4gdGhlaXIgc2NvcGUNCj4gPiBhdHRyaWJ1dGUuIEFm dGVyIHRoaXMsIHRoZSBTcGluTG9jayB3aWxsIG5vdCBuZWVkZWQuIFdpdGhvdXQgU3BpbkxvY2ss IG5ldw0KPiBpc3N1ZSByYWlzZWQNCj4gPiB3aGljaCBpcyBjYXVzZWQgYnkgTVNSIGRlcGVuZGVu Y2UuIEZvciBleGFtcGxlLCBNU1IgQSBkZXBlbmRzIG9uDQo+IE1TUiBCIHdoaWNoIG1lYW5zIE1T UiBBDQo+ID4gbXVzdCBiZWVuIHNldCBhZnRlciBNU1IgQiBoYXMgYmVlbiBzZXQuIEFsc28gTVNS IEIgaXMgcGFja2FnZSBzY29wZSBsZXZlbA0KPiBhbmQgTVNSIEEgaXMNCj4gPiB0aHJlYWQgc2Nv cGUgbGV2ZWwuIElmIHN5c3RlbSBoYXMgbXVsdGlwbGUgdGhyZWFkcywgVGhyZWFkIDEgbmVlZHMg dG8gc2V0DQo+IHRoZSB0aHJlYWQgbGV2ZWwNCj4gPiBNU1JzIGFuZCB0aHJlYWQgMiBuZWVkcyB0 byBzZXQgdGhyZWFkIGFuZCBwYWNrYWdlIGxldmVsIE1TUnMuIFNldCBNU1JzDQo+IHRhc2sgZm9y IHRocmVhZCAxDQo+ID4gYW5kIHRocmVhZCAyIGxpa2UgYmVsb3c6DQo+ID4NCj4gPiAgICAgICAg ICAgICAgVGhyZWFkIDEgICAgICAgICAgICAgICAgIFRocmVhZCAyDQo+ID4gTVNSIEIgICAgICAg ICAgTiAgICAgICAgICAgICAgICAgICAgICAgIFkNCj4gPiBNU1IgQSAgICAgICAgICBZICAgICAg ICAgICAgICAgICAgICAgICAgWQ0KPiA+DQo+ID4gSWYgZHJpdmVyIGRvbid0IGNvbnRyb2wgZXhl Y3V0ZSBNU1Igb3JkZXIsIGZvciB0aHJlYWQgMSwgaXQgd2lsbCBleGVjdXRlIE1TUg0KPiBBIGZp cnN0LCBidXQNCj4gPiBhdCB0aGlzIHRpbWUsIE1TUiBCIG5vdCBiZWVuIGV4ZWN1dGVkIHlldCBi eSB0aHJlYWQgMi4gc3lzdGVtIG1heSB0cmlnDQo+IGV4Y2VwdGlvbiBhdCB0aGlzDQo+ID4gdGlt ZS4NCj4gPg0KPiA+IEluIG9yZGVyIHRvIGZpeCB0aGUgYWJvdmUgaXNzdWUsIGRyaXZlciBpbnRy b2R1Y2VzIHNlbWFwaG9yZSBsb2dpYyB0byBjb250cm9sDQo+IHRoZSBNU1INCj4gPiBleGVjdXRl IHNlcXVlbmNlLiBGb3IgdGhlIGFib3ZlIGNhc2UsIGEgc2VtYXBob3JlIHdpbGwgYmUgYWRkIGJl dHdlZW4NCj4gTVNSIEEgYW5kIEIgZm9yDQo+ID4gYWxsIHRocmVhZHMuIFNlbWFwaG9yZSBoYXMg c2NvcGUgaW5mbyBmb3IgaXQuIFRoZSBwb3NzaWJsZSBzY29wZSB2YWx1ZSBpcw0KPiBjb3JlIG9y IHBhY2thZ2UuDQo+ID4gRm9yIGVhY2ggdGhyZWFkLCB3aGVuIGl0IG1lZXRzIGEgc2VtYXBob3Jl IGR1cmluZyBpdCBzZXQgcmVnaXN0ZXJzLCBpdCB3aWxsIDEpDQo+IHJlbGVhc2UNCj4gPiBzZW1h cGhvcmUgKCsxKSBmb3IgZWFjaCB0aHJlYWRzIGluIHRoaXMgY29yZSBvciBwYWNrYWdlKGJhc2Vk IG9uIHRoZQ0KPiBzY29wZSBpbmZvIGZvciB0aGlzDQo+ID4gc2VtYXBob3JlKSAyKSBhY3F1aXJl IHNlbWFwaG9yZSAoLTEpIGZvciBhbGwgdGhlIHRocmVhZHMgaW4gdGhpcyBjb3JlIG9yDQo+IHBh Y2thZ2UoYmFzZWQNCj4gPiBvbiB0aGUgc2NvcGUgaW5mbyBmb3IgdGhpcyBzZW1hcGhvcmUpLiBX aXRoIHRoZXNlIHR3byBzdGVwcywgZHJpdmVyIGNhbg0KPiBjb250cm9sIE1TUg0KPiA+IHNlcXVl bmNlLiBTYW1wbGUgY29kZSBsb2dpYyBsaWtlIGJlbG93Og0KPiA+DQo+ID4gICAgLy8NCj4gPiAg ICAvLyBGaXJzdCBpbmNyZWFzZSBzZW1hcGhvcmUgY291bnQgYnkgMSBmb3IgcHJvY2Vzc29ycyBp biB0aGlzIHBhY2thZ2UuDQo+ID4gICAgLy8NCj4gPiAgICBmb3IgKFByb2Nlc3NvckluZGV4ID0g MDsgUHJvY2Vzc29ySW5kZXggPCBQYWNrYWdlVGhyZWFkc0NvdW50IDsNCj4gUHJvY2Vzc29ySW5k ZXggKyspIHsNCj4gPiAgICAgIExpYlJlbGVhc2VTZW1hcGhvcmUgKChVSU5UMzIgKikgJlNlbWFw aG9yZVB0cltQYWNrYWdlT2Zmc2V0ICsNCj4gUHJvY2Vzc29ySW5kZXhdKTsNCj4gPiAgICB9DQo+ ID4gICAgLy8NCj4gPiAgICAvLyBTZWNvbmQsIGNoZWNrIHdoZXRoZXIgdGhlIGNvdW50IGhhcyBy ZWFjaCB0aGUgY2hlY2sgbnVtYmVyLg0KPiA+ICAgIC8vDQo+ID4gICAgZm9yIChQcm9jZXNzb3JJ bmRleCA9IDA7IFByb2Nlc3NvckluZGV4IDwgVmFsaWRBcENvdW50OyBQcm9jZXNzb3JJbmRleA0K PiArKykgew0KPiA+ICAgICAgTGliV2FpdEZvclNlbWFwaG9yZSAoJlNlbWFwaG9yZVB0cltBcE9m ZnNldF0pOw0KPiA+ICAgIH0NCj4gPg0KPiA+IFBsYXRmb3JtIFJlcXVpcmVtZW50Og0KPiA+IDEu IFRoaXMgY2hhbmdlIHJlcXVpcmVzIHJlZ2lzdGVyIE1TUiBzZXR0aW5nIGJhc2Ugb24gTVNSIHNj b3BlIGluZm8uIElmIHN0aWxsDQo+IHJlZ2lzdGVyIE1TUg0KPiA+ICAgICBmb3IgYWxsIHRocmVh ZHMsIGV4Y2VwdGlvbiBtYXkgcmFpc2VkLg0KPiA+DQo+ID4gS25vd24gbGltaXRhdGlvbjoNCj4g PiAxLiBDdXJyZW50IENwdUZlYXR1cmVzIGRyaXZlciBzdXBwb3J0cyBEWEUgaW5zdGFuY2UgYW5k IFBFSSBpbnN0YW5jZS4gQnV0DQo+IHNlbWFwaG9yZSBsb2dpYw0KPiA+ICAgICByZXF1aXJlcyBB cHMgZXhlY3V0ZSBpbiBhc3luYyBtb2RlIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgUEVJIGRy aXZlci4NCj4gU28gQ3B1RmVhdHVyZQ0KPiA+ICAgICBQRUkgaW5zdGFuY2Ugbm90IHdvcmtzIGFm dGVyIHRoaXMgY2hhbmdlLiBXZSBwbGFuIHRvIHN1cHBvcnQgYXN5bmMgbW9kZQ0KPiBmb3IgUEVJ IGluIHBoYXNlDQo+ID4gICAgIDIgZm9yIHRoaXMgdGFzay4NCj4gPg0KPiA+IENjOiBSdWl5dSBO aSA8cnVpeXUubmlAaW50ZWwuY29tPg0KPiA+IENjOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRo YXQuY29tPg0KPiA+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFn cmVlbWVudCAxLjENCj4gPiBTaWduZWQtb2ZmLWJ5OiBFcmljIERvbmcgPGVyaWMuZG9uZ0BpbnRl bC5jb20+DQo+ID4gLS0tDQo+ID4gICAuLi4vUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi9DcHVGZWF0 dXJlc0luaXRpYWxpemUuYyB8IDMyNCArKysrKysrKysrKystLQ0KPiAtDQo+ID4gICAuLi4vRHhl UmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi5jICAgICAgICAgICAgICAgICAgICB8ICA3MSArKystDQo+ ID4gICAuLi4vRHhlUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi5pbmYgICAgICAgICAgICAgICAgICB8 ICAgMyArDQo+ID4gICAuLi4vUGVpUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi5jICAgICAgICAgICAg ICAgICAgICB8ICA1NSArKy0NCj4gPiAgIC4uLi9QZWlSZWdpc3RlckNwdUZlYXR1cmVzTGliLmlu ZiAgICAgICAgICAgICAgICAgIHwgICAxICsNCj4gPiAgIC4uLi9SZWdpc3RlckNwdUZlYXR1cmVz TGliL1JlZ2lzdGVyQ3B1RmVhdHVyZXMuaCAgIHwgIDUxICsrLQ0KPiA+ICAgLi4uL1JlZ2lzdGVy Q3B1RmVhdHVyZXNMaWIuYyAgICAgICAgICAgICAgICAgICAgICAgfCA0NTIgKysrKysrKysrKysr KysrKysrLS0tDQo+ID4gICA3IGZpbGVzIGNoYW5nZWQsIDg0MCBpbnNlcnRpb25zKCspLCAxMTcg ZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0DQo+IGEvVWVmaUNwdVBrZy9MaWJyYXJ5 L1JlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIvQ3B1RmVhdHVyZXNJbml0aWFsaXplLmMNCj4gYi9VZWZp Q3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi9DcHVGZWF0dXJlc0luaXRpYWxp emUuYw0KPiA+IGluZGV4IGJhM2ZiMzI1MGYuLmY4MjBiNGZlZDcgMTAwNjQ0DQo+ID4gLS0tIGEv VWVmaUNwdVBrZy9MaWJyYXJ5L1JlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIvQ3B1RmVhdHVyZXNJbml0 aWFsaXplLmMNCj4gPiArKysgYi9VZWZpQ3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJl c0xpYi9DcHVGZWF0dXJlc0luaXRpYWxpemUuYw0KPiA+IEBAIC0xNDUsNiArMTQ1LDIwIEBAIENw dUluaXREYXRhSW5pdGlhbGl6ZSAoDQo+ID4gICAgIENQVV9GRUFUVVJFU19JTklUX09SREVSICAg ICAgICAgICAgICAqSW5pdE9yZGVyOw0KPiA+ICAgICBDUFVfRkVBVFVSRVNfREFUQSAgICAgICAg ICAgICAgICAgICAgKkNwdUZlYXR1cmVzRGF0YTsNCj4gPiAgICAgTElTVF9FTlRSWSAgICAgICAg ICAgICAgICAgICAgICAgICAgICpFbnRyeTsNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ29yZTsNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUGFja2FnZTsNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVGhyZWFkOw0KPiA+ICsgIEVGSV9DUFVfUEhZU0lDQUxfTE9DQVRJT04gICAgICAgICAg ICAqTG9jYXRpb247DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpDb3JlQXJyYXk7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEluZGV4Ow0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxp ZENvdW50Ow0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Jl SW5kZXg7DQo+ID4gKyAgQUNQSV9DUFVfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICpBY3Bp Q3B1RGF0YTsNCj4gPiArICBDUFVfU1RBVFVTX0lORk9STUFUSU9OICAgICAgICAgICAgICAgKkNw dVN0YXR1czsNCj4gPiArDQo+ID4gKyAgQ29yZSAgICA9IDA7DQo+ID4gKyAgUGFja2FnZSA9IDA7 DQo+ID4gKyAgVGhyZWFkICA9IDA7DQo+ID4NCj4gPiAgICAgQ3B1RmVhdHVyZXNEYXRhID0gR2V0 Q3B1RmVhdHVyZXNEYXRhICgpOw0KPiA+ICAgICBDcHVGZWF0dXJlc0RhdGEtPkluaXRPcmRlciA9 IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoQ1BVX0ZFQVRVUkVTX0lOSVRfT1JERVIpICog TnVtYmVyT2ZDcHVzKTsNCj4gPiBAQCAtMTYzLDYgKzE3NywxNiBAQCBDcHVJbml0RGF0YUluaXRp YWxpemUgKA0KPiA+ICAgICAgIEVudHJ5ID0gRW50cnktPkZvcndhcmRMaW5rOw0KPiA+ICAgICB9 DQo+ID4NCj4gPiArICBDcHVGZWF0dXJlc0RhdGEtPk51bWJlck9mQ3B1cyA9IChVSU5UMzIpIE51 bWJlck9mQ3B1czsNCj4gPiArDQo+ID4gKyAgQWNwaUNwdURhdGEgPSAoQUNQSV9DUFVfREFUQSAq KSAoVUlOVE4pIFBjZEdldDY0DQo+IChQY2RDcHVTM0RhdGFBZGRyZXNzKTsNCj4gPiArICBBU1NF UlQgKEFjcGlDcHVEYXRhICE9IE5VTEwpOw0KPiA+ICsgIENwdUZlYXR1cmVzRGF0YS0+QWNwaUNw dURhdGE9IEFjcGlDcHVEYXRhOw0KPiA+ICsNCj4gPiArICBDcHVTdGF0dXMgPSAmQWNwaUNwdURh dGEtPkNwdVN0YXR1czsNCj4gPiArICBBY3BpQ3B1RGF0YS0+QXBMb2NhdGlvbiA9IEFsbG9jYXRl WmVyb1Bvb2wgKHNpemVvZg0KPiAoRUZJX0NQVV9QSFlTSUNBTF9MT0NBVElPTikgKiBOdW1iZXJP ZkNwdXMpOw0KPiA+ICsgIEFTU0VSVCAoQWNwaUNwdURhdGEtPkFwTG9jYXRpb24gIT0gTlVMTCk7 DQo+ID4gKw0KPiA+ICAgICBmb3IgKFByb2Nlc3Nvck51bWJlciA9IDA7IFByb2Nlc3Nvck51bWJl ciA8IE51bWJlck9mQ3B1czsNCj4gUHJvY2Vzc29yTnVtYmVyKyspIHsNCj4gPiAgICAgICBJbml0 T3JkZXIgPSAmQ3B1RmVhdHVyZXNEYXRhLT5Jbml0T3JkZXJbUHJvY2Vzc29yTnVtYmVyXTsNCj4g PiAgICAgICBJbml0T3JkZXItPkZlYXR1cmVzU3VwcG9ydGVkTWFzayA9IEFsbG9jYXRlWmVyb1Bv b2wNCj4gKENwdUZlYXR1cmVzRGF0YS0+Qml0TWFza1NpemUpOw0KPiA+IEBAIC0xNzUsNyArMTk5 LDU5IEBAIENwdUluaXREYXRhSW5pdGlhbGl6ZSAoDQo+ID4gICAgICAgICAmUHJvY2Vzc29ySW5m b0J1ZmZlciwNCj4gPiAgICAgICAgIHNpemVvZiAoRUZJX1BST0NFU1NPUl9JTkZPUk1BVElPTikN Cj4gPiAgICAgICAgICk7DQo+ID4gKyAgICBDb3B5TWVtICgNCj4gPiArICAgICAgQWNwaUNwdURh dGEtPkFwTG9jYXRpb24gKyBQcm9jZXNzb3JOdW1iZXIsDQo+ID4gKyAgICAgICZQcm9jZXNzb3JJ bmZvQnVmZmVyLkxvY2F0aW9uLA0KPiA+ICsgICAgICBzaXplb2YgKEVGSV9DUFVfUEhZU0lDQUxf TE9DQVRJT04pDQo+ID4gKyAgICAgICk7DQo+ID4gKw0KPiANCj4gUGxlYXNlIGFkZCBtb3JlIGNv bW1lbnRzIGhlcmUgdG8gZGVzY3JpYmUgd2hhdCB0aGUgYmVsb3cgY29kZSB0cmllcyB0bw0KPiBk byBhbmQgd2h5Lg0KDQpZZXMsIHdpbGwgYWRkIGNvbW1lbnRzIGluIG5leHQgdmVyc2lvbiBjaGFu Z2UuDQoNCj4gDQo+ID4gKyAgICBpZiAoUGFja2FnZSA8IFByb2Nlc3NvckluZm9CdWZmZXIuTG9j YXRpb24uUGFja2FnZSkgew0KPiA+ICsgICAgICBQYWNrYWdlID0gUHJvY2Vzc29ySW5mb0J1ZmZl ci5Mb2NhdGlvbi5QYWNrYWdlOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgaWYgKENvcmUgPCBQcm9j ZXNzb3JJbmZvQnVmZmVyLkxvY2F0aW9uLkNvcmUpIHsNCj4gPiArICAgICAgQ29yZSA9IFByb2Nl c3NvckluZm9CdWZmZXIuTG9jYXRpb24uQ29yZTsNCj4gPiArICAgIH0NCj4gPiArICAgIGlmIChU aHJlYWQgPCBQcm9jZXNzb3JJbmZvQnVmZmVyLkxvY2F0aW9uLlRocmVhZCkgew0KPiA+ICsgICAg ICBUaHJlYWQgPSBQcm9jZXNzb3JJbmZvQnVmZmVyLkxvY2F0aW9uLlRocmVhZDsNCj4gPiArICAg IH0NCj4gPiArICB9DQo+ID4gKyAgQ3B1U3RhdHVzLT5QYWNrYWdlQ291bnQgPSBQYWNrYWdlICsg MTsNCj4gPiArICBDcHVTdGF0dXMtPkNvcmVDb3VudCAgICA9IENvcmUgKyAxOw0KPiA+ICsgIENw dVN0YXR1cy0+VGhyZWFkQ291bnQgID0gVGhyZWFkICsgMTsNCj4gDQo+IA0KPiA+ICsgIERFQlVH ICgoREVCVUdfSU5GTywgIlByb2Nlc3NvciBJbmZvOiBQYWNrYWdlOiAlZCwgQ29yZSA6ICVkLA0K PiBUaHJlYWQ6ICVkXG4iLA0KPiA+ICsgICAgICAgICBDcHVTdGF0dXMtPlBhY2thZ2VDb3VudCwN Cj4gPiArICAgICAgICAgQ3B1U3RhdHVzLT5Db3JlQ291bnQsDQo+ID4gKyAgICAgICAgIENwdVN0 YXR1cy0+VGhyZWFkQ291bnQpKTsNCj4gDQo+IFBsZWFzZSB1c2UgTWF4Q29yZSBhbmQgTWF4VGhy ZWFkIGluIGRlYnVnIG1lc3NhZ2UuIE90aGVyd2lzZSBpdCdzDQo+IGNvbmZ1c2luZy4NCg0KWWVz LCB3aWxsIHVwZGF0ZSBpbiBuZXh0IHZlcnNpb24gY2hhbmdlLg0KDQo+IA0KPiA+ICsNCj4gPiAr ICAvLw0KPiA+ICsgIC8vIENvbGxlY3QgdmFsaWQgY29yZSBjb3VudCBpbiBlYWNoIHBhY2thZ2Ug YmVjYXVzZSBub3QgYWxsIGNvcmVzIGFyZSB2YWxpZC4NCj4gPiArICAvLw0KPiA+ICsgIENwdVN0 YXR1cy0+VmFsaWRDb3Jlc0luUGFja2FnZXMgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFVJ TlQzMikgKg0KPiBDcHVTdGF0dXMtPlBhY2thZ2VDb3VudCk7DQo+ID4gKyAgQVNTRVJUIChDcHVT dGF0dXMtPlZhbGlkQ29yZXNJblBhY2thZ2VzICE9IE5VTEwpOw0KPiANCj4gUGxlYXNlIGFkZCBj b21tZW50cyB0byBkZXNjcmliZSB0aGUgcHVycG9zZSBvZiBDb3JlQXJyYXkuDQo+IENvcmVBcnJh eSBpcyBub3QgYSBnb29kIG5hbWUgSU1PLiBIb3cgYWJvdXQ6DQo+IENvcmVWaXNpdGVkIC0gQWxs b2NhdGVQb29sIChzaXplb2YgKEJPT0xFQU4pICogQ3B1U3RhdHVzLT5NYXhDb3JlQ291bnQpOw0K PiANCj4gPiArICBDb3JlQXJyYXkgPSBBbGxvY2F0ZVBvb2wgKHNpemVvZiAoVUlOVDMyKSAqIENw dVN0YXR1cy0+Q29yZUNvdW50KTsNCj4gPiArICBBU1NFUlQgKENvcmVBcnJheSAhPSBOVUxMKTsN Cj4gPiArDQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDw9IFBhY2thZ2U7IEluZGV4ICsr ICkgew0KPiANCj4gUGxlYXNlIHN0b3AgdXNpbmcgUGFja2FnZS9Db3JlL1RocmVhZC4gVXNlIHRo ZSBmaWVsZCBpbiBDcHVTdGF0dXMNCj4gc3RydWN0dXJlIGluc3RlYWQuIEl0IG1ha2VzIHRoZSBj b2RlIG1vcmUgcmVhZGFibGUuDQoNCk9rLCB3aWxsIHVwZGF0ZSBpbiBuZXh0IHZlcnNpb24uDQoN Cj4gDQo+ID4gKyAgICBaZXJvTWVtIChDb3JlQXJyYXksIHNpemVvZiAoVUlOVDMyKSAqIChDb3Jl ICsgMSkpOw0KPiA+ICsgICAgZm9yIChQcm9jZXNzb3JOdW1iZXIgPSAwOyBQcm9jZXNzb3JOdW1i ZXIgPCBOdW1iZXJPZkNwdXM7DQo+IFByb2Nlc3Nvck51bWJlcisrKSB7DQo+ID4gKyAgICAgIExv Y2F0aW9uID0gJkNwdUZlYXR1cmVzRGF0YS0NCj4gPkluaXRPcmRlcltQcm9jZXNzb3JOdW1iZXJd LkNwdUluZm8uUHJvY2Vzc29ySW5mby5Mb2NhdGlvbjsNCj4gPiArICAgICAgaWYgKExvY2F0aW9u LT5QYWNrYWdlID09IEluZGV4KSB7DQo+ID4gKyAgICAgICAgQ29yZUFycmF5W0xvY2F0aW9uLT5D b3JlXSA9IDE7DQo+ID4gKyAgICAgIH0NCj4gDQo+IFRoZSBhYm92ZSBpZi1jbGF1c2UgY2FuIGJl Og0KPiAgICAgICAgICAgaWYgKChMb2NhdGlvbi0+UGFja2FnZSA9PSBJbmRleCkgJiYNCj4gICAg ICAgICAgICAgICAhQ29yZVZpc2l0ZWRbTG9jYXRpb24tPkNvcmVdKSkgew0KPiAgICAgICAgICAg ICBDcHVTdGF0dXMtPlZhbGlkQ29yZUNvdW50UGVyUGFja2FnZVtJbmRleF0rKzsNCj4gICAgICAg ICAgICAgQ29yZVZpc2l0ZWRbTG9jYXRpb24tPkNvcmVdID0gVFJVRTsNCj4gICAgICAgICAgIH0N Cj4gDQo+IFRoZSBmb3ItbG9vcCBiZWxvdyBjYW4gYmUgcmVtb3ZlZC4NCg0KVGhhbmtzIGZvciB0 aGUgZW5oYW5jZW1lbnQsIHdpbGwgdXBkYXRlIHRoZSBjb2RlIGxvZ2ljIGluIG5leHQgdmVyc2lv bi4NCg0KPiANCj4gPiArICAgIH0NCj4gPiArICAgIGZvciAoQ29yZUluZGV4ID0gMCwgVmFsaWRD b3VudCA9IDA7IENvcmVJbmRleCA8PSBDb3JlOyBDb3JlSW5kZXggKyspIHsNCj4gPiArICAgICAg VmFsaWRDb3VudCArPSBDb3JlQXJyYXlbQ29yZUluZGV4XTsNCj4gPiArICAgIH0NCj4gPiArICAg IENwdVN0YXR1cy0+VmFsaWRDb3Jlc0luUGFja2FnZXNbSW5kZXhdID0gVmFsaWRDb3VudDsNCj4g PiAgICAgfQ0KPiA+ICsgIEZyZWVQb29sIChDb3JlQXJyYXkpOw0KPiA+ICsgIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8PSBQYWNrYWdlOyBJbmRleCsrKSB7DQo+ID4gKyAgICBERUJVRyAoKERFQlVH X0lORk8sICJQYWNrYWdlOiAlZCwgVmFsaWQgQ29yZSA6ICVkXG4iLCBJbmRleCwNCj4gQ3B1U3Rh dHVzLT5WYWxpZENvcmVzSW5QYWNrYWdlc1tJbmRleF0pKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIENwdUZlYXR1cmVzRGF0YS0+Q3B1RmxhZ3MuU2VtYXBob3JlQ291bnQgPSBBbGxvY2F0ZVpl cm9Qb29sDQo+IChzaXplb2YgKFVJTlQzMikgKiBDcHVTdGF0dXMtPlBhY2thZ2VDb3VudCAqIENw dVN0YXR1cy0+Q29yZUNvdW50Kg0KPiBDcHVTdGF0dXMtPlRocmVhZENvdW50KTsNCj4gPiArICBB U1NFUlQgKENwdUZlYXR1cmVzRGF0YS0+Q3B1RmxhZ3MuU2VtYXBob3JlQ291bnQgIT0gTlVMTCk7 DQo+ID4gKw0KPiA+ICAgICAvLw0KPiA+ICAgICAvLyBHZXQgc3VwcG9ydCBhbmQgY29uZmlndXJh dGlvbiBQQ0RzDQo+ID4gICAgIC8vDQo+ID4gQEAgLTMxMCw3ICszODYsNyBAQCBDb2xsZWN0UHJv Y2Vzc29yRGF0YSAoDQo+ID4gICAgIExJU1RfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgICAg ICAqRW50cnk7DQo+ID4gICAgIENQVV9GRUFUVVJFU19EQVRBICAgICAgICAgICAgICAgICAgICAq Q3B1RmVhdHVyZXNEYXRhOw0KPiA+DQo+ID4gLSAgQ3B1RmVhdHVyZXNEYXRhID0gR2V0Q3B1RmVh dHVyZXNEYXRhICgpOw0KPiA+ICsgIENwdUZlYXR1cmVzRGF0YSA9IChDUFVfRkVBVFVSRVNfREFU QSAqKUJ1ZmZlcjsNCj4gDQo+IElzIHRoZSBhYm92ZSBjaGFuZ2UgbW9yZSBwcm9wZXIgaW4gYSBz ZXBhcmF0ZSBwYXRjaD8NCj4gDQo+ID4gICAgIFByb2Nlc3Nvck51bWJlciA9IEdldFByb2Nlc3Nv ckluZGV4ICgpOw0KPiA+ICAgICBDcHVJbmZvID0gJkNwdUZlYXR1cmVzRGF0YS0+SW5pdE9yZGVy W1Byb2Nlc3Nvck51bWJlcl0uQ3B1SW5mbzsNCj4gPiAgICAgLy8NCj4gPiBAQCAtNDE2LDYgKzQ5 MiwxNSBAQCBEdW1wUmVnaXN0ZXJUYWJsZU9uUHJvY2Vzc29yICgNCj4gPiAgICAgICAgICAgUmVn aXN0ZXJUYWJsZUVudHJ5LT5WYWx1ZQ0KPiA+ICAgICAgICAgICApKTsNCj4gPiAgICAgICAgIGJy ZWFrOw0KPiA+ICsgICAgY2FzZSBTZW1hcGhvcmU6DQo+ID4gKyAgICAgIERFQlVHICgoDQo+ID4g KyAgICAgICAgRGVidWdQcmludEVycm9yTGV2ZWwsDQo+ID4gKyAgICAgICAgIlByb2Nlc3Nvcjog JWQ6IFNlbWFwaG9yZTogU2NvcGUgVmFsdWU6ICVkXHJcbiIsDQo+IA0KPiBIb3cgYWJvdXQgcHJp bnQgdGhlIFNjb3BlIHZhbHVlIGluIHN0cmluZz8gVGhpcyBtYWtlcyB0aGUgZGVidWcgbWVzc2Fn ZQ0KPiBtb3JlIG1lYW5pbmdmdWwuDQoNCk9rLCB3aWxsIGRvIGl0IGluIG5leHQgdmVyc2lvbiBj aGFuZ2UNCg0KPiANCj4gPiArICAgICAgICBQcm9jZXNzb3JOdW1iZXIsDQo+ID4gKyAgICAgICAg UmVnaXN0ZXJUYWJsZUVudHJ5LT5WYWx1ZQ0KPiA+ICsgICAgICAgICkpOw0KPiA+ICsgICAgICBi cmVhazsNCj4gPiArDQo+ID4gICAgICAgZGVmYXVsdDoNCj4gPiAgICAgICAgIGJyZWFrOw0KPiA+ ICAgICAgIH0NCj4gPiBAQCAtNDQxLDYgKzUyNiwxMSBAQCBBbmFseXNpc1Byb2Nlc3NvckZlYXR1 cmVzICgNCj4gPiAgICAgUkVHSVNURVJfQ1BVX0ZFQVRVUkVfSU5GT1JNQVRJT04gICAgICpDcHVJ bmZvOw0KPiA+ICAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgICAgICAgICAgKkVudHJ5 Ow0KPiA+ICAgICBDUFVfRkVBVFVSRVNfREFUQSAgICAgICAgICAgICAgICAgICAgKkNwdUZlYXR1 cmVzRGF0YTsNCj4gPiArICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgICAgICAgICAgKk5l eHRFbnRyeTsNCj4gPiArICBDUFVfRkVBVFVSRVNfRU5UUlkgICAgICAgICAgICAgICAgICAgKk5l eHRDcHVGZWF0dXJlSW5PcmRlcjsNCj4gPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU3VjY2VzczsNCj4gPiArICBDUFVfRkVBVFVSRV9ERVBFTkRFTkNFX1RZUEUgICAg ICAgICAgQmVmb3JlRGVwOw0KPiA+ICsgIENQVV9GRUFUVVJFX0RFUEVOREVOQ0VfVFlQRSAgICAg ICAgICBBZnRlckRlcDsNCj4gPg0KPiA+ICAgICBDcHVGZWF0dXJlc0RhdGEgPSBHZXRDcHVGZWF0 dXJlc0RhdGEgKCk7DQo+ID4gICAgIENwdUZlYXR1cmVzRGF0YS0+Q2FwYWJpbGl0eVBjZCA9IEFs bG9jYXRlUG9vbCAoQ3B1RmVhdHVyZXNEYXRhLQ0KPiA+Qml0TWFza1NpemUpOw0KPiA+IEBAIC01 MTcsOCArNjA3LDE0IEBAIEFuYWx5c2lzUHJvY2Vzc29yRmVhdHVyZXMgKA0KPiA+ICAgICAgIC8v DQo+ID4gICAgICAgQ3B1SW5mbyA9ICZDcHVGZWF0dXJlc0RhdGEtPkluaXRPcmRlcltQcm9jZXNz b3JOdW1iZXJdLkNwdUluZm87DQo+ID4gICAgICAgRW50cnkgPSBHZXRGaXJzdE5vZGUgKCZDcHVJ bml0T3JkZXItPk9yZGVyTGlzdCk7DQo+ID4gKyAgICBOZXh0RW50cnkgPSBFbnRyeS0+Rm9yd2Fy ZExpbms7DQo+ID4gICAgICAgd2hpbGUgKCFJc051bGwgKCZDcHVJbml0T3JkZXItPk9yZGVyTGlz dCwgRW50cnkpKSB7DQo+ID4gICAgICAgICBDcHVGZWF0dXJlSW5PcmRlciA9IENQVV9GRUFUVVJF X0VOVFJZX0ZST01fTElOSyAoRW50cnkpOw0KPiA+ICsgICAgICBpZiAoIUlzTnVsbCAoJkNwdUlu aXRPcmRlci0+T3JkZXJMaXN0LCBOZXh0RW50cnkpKSB7DQo+ID4gKyAgICAgICAgTmV4dENwdUZl YXR1cmVJbk9yZGVyID0gQ1BVX0ZFQVRVUkVfRU5UUllfRlJPTV9MSU5LDQo+IChOZXh0RW50cnkp Ow0KPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIE5leHRDcHVGZWF0dXJlSW5PcmRl ciA9IE5VTEw7DQo+ID4gKyAgICAgIH0NCj4gPiAgICAgICAgIGlmIChJc0JpdE1hc2tNYXRjaCAo Q3B1RmVhdHVyZUluT3JkZXItPkZlYXR1cmVNYXNrLA0KPiBDcHVGZWF0dXJlc0RhdGEtPlNldHRp bmdQY2QpKSB7DQo+ID4gICAgICAgICAgIFN0YXR1cyA9IENwdUZlYXR1cmVJbk9yZGVyLT5Jbml0 aWFsaXplRnVuYyAoUHJvY2Vzc29yTnVtYmVyLA0KPiBDcHVJbmZvLCBDcHVGZWF0dXJlSW5PcmRl ci0+Q29uZmlnRGF0YSwgVFJVRSk7DQo+ID4gICAgICAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gPiBAQCAtNTMyLDYgKzYyOCw4IEBAIEFuYWx5c2lzUHJvY2Vzc29yRmVhdHVyZXMg KA0KPiA+ICAgICAgICAgICAgICAgREVCVUcgKChERUJVR19XQVJOLCAiV2FybmluZyA6OiBGYWls ZWQgdG8gZW5hYmxlIEZlYXR1cmU6IE1hc2sNCj4gPSAiKSk7DQo+ID4gICAgICAgICAgICAgICBE dW1wQ3B1RmVhdHVyZU1hc2sgKENwdUZlYXR1cmVJbk9yZGVyLT5GZWF0dXJlTWFzayk7DQo+ID4g ICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICBTdWNj ZXNzID0gVFJVRTsNCj4gPiAgICAgICAgICAgfQ0KPiA+ICAgICAgICAgfSBlbHNlIHsNCj4gPiAg ICAgICAgICAgU3RhdHVzID0gQ3B1RmVhdHVyZUluT3JkZXItPkluaXRpYWxpemVGdW5jIChQcm9j ZXNzb3JOdW1iZXIsDQo+IENwdUluZm8sIENwdUZlYXR1cmVJbk9yZGVyLT5Db25maWdEYXRhLCBG QUxTRSk7DQo+ID4gQEAgLTU0Miw5ICs2NDAsMzYgQEAgQW5hbHlzaXNQcm9jZXNzb3JGZWF0dXJl cyAoDQo+ID4gICAgICAgICAgICAgICBERUJVRyAoKERFQlVHX1dBUk4sICJXYXJuaW5nIDo6IEZh aWxlZCB0byBkaXNhYmxlIEZlYXR1cmU6IE1hc2sNCj4gPSAiKSk7DQo+ID4gICAgICAgICAgICAg ICBEdW1wQ3B1RmVhdHVyZU1hc2sgKENwdUZlYXR1cmVJbk9yZGVyLT5GZWF0dXJlTWFzayk7DQo+ ID4gICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICBT dWNjZXNzID0gVFJVRTsNCj4gPiAgICAgICAgICAgfQ0KPiA+ICAgICAgICAgfQ0KPiA+IC0gICAg ICBFbnRyeSA9IEVudHJ5LT5Gb3J3YXJkTGluazsNCj4gPiArDQo+ID4gKyAgICAgIGlmIChTdWNj ZXNzKSB7DQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAgICAvLyBJZiBmZWF0dXJlIGhhcyBk ZXBlbmRlbmNlIHdpdGggdGhlIG5leHQgZmVhdHVyZSAoT05MWSBjYXJlDQo+IGNvcmUvcGFja2Fn ZSBkZXBlbmRlbmN5KS4NCj4gPiArICAgICAgICAvLyBhbmQgZmVhdHVyZSBpbml0aWFsaXplIHN1 Y2NlZWQsIGFkZCBzeW5jIHNlbWFwaGVyZSBoZXJlLg0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAg ICAgICAgQmVmb3JlRGVwID0gRGV0ZWN0RmVhdHVyZVNjb3BlIChDcHVGZWF0dXJlSW5PcmRlciwg VFJVRSk7DQo+ID4gKyAgICAgICAgaWYgKE5leHRDcHVGZWF0dXJlSW5PcmRlciAhPSBOVUxMKSB7 DQo+ID4gKyAgICAgICAgICBBZnRlckRlcCAgPSBEZXRlY3RGZWF0dXJlU2NvcGUgKE5leHRDcHVG ZWF0dXJlSW5PcmRlciwgRkFMU0UpOw0KPiA+ICsgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAg ICAgICBBZnRlckRlcCA9IE5vbmVEZXBUeXBlOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAg ICAvLw0KPiA+ICsgICAgICAgIC8vIEFzc3VtZSBvbmx5IG9uZSBvZiB0aGUgZGVwZW5kIGlzIHZh bGlkLg0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgQVNTRVJUICghKEJlZm9yZURlcCA+ IFRocmVhZERlcFR5cGUgJiYgQWZ0ZXJEZXAgPg0KPiBUaHJlYWREZXBUeXBlKSk7DQo+ID4gKyAg ICAgICAgaWYgKEJlZm9yZURlcCA+IFRocmVhZERlcFR5cGUpIHsNCj4gPiArICAgICAgICAgIENQ VV9SRUdJU1RFUl9UQUJMRV9XUklURTMyIChQcm9jZXNzb3JOdW1iZXIsIFNlbWFwaG9yZSwgMCwN Cj4gQmVmb3JlRGVwKTsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgaWYgKEFmdGVyRGVw ID4gVGhyZWFkRGVwVHlwZSkgew0KPiA+ICsgICAgICAgICAgQ1BVX1JFR0lTVEVSX1RBQkxFX1dS SVRFMzIgKFByb2Nlc3Nvck51bWJlciwgU2VtYXBob3JlLCAwLA0KPiBBZnRlckRlcCk7DQo+ID4g KyAgICAgICAgfQ0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICBFbnRyeSAgICAgPSBF bnRyeS0+Rm9yd2FyZExpbms7DQo+ID4gKyAgICAgIE5leHRFbnRyeSA9IEVudHJ5LT5Gb3J3YXJk TGluazsNCj4gPiAgICAgICB9DQo+ID4NCj4gPiAgICAgICAvLw0KPiA+IEBAIC01NjEsMjcgKzY4 Niw3OSBAQCBBbmFseXNpc1Byb2Nlc3NvckZlYXR1cmVzICgNCj4gPiAgICAgfQ0KPiA+ICAgfQ0K PiA+DQo+ID4gKy8qKg0KPiA+ICsgIEluY3JlbWVudCBzZW1hcGhvcmUgYnkgMS4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtICAgICAgU2VtICAgICAgICAgICAgSU46ICAzMi1iaXQgdW5zaWduZWQgaW50 ZWdlcg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArTGliUmVsZWFzZVNlbWFwaG9y ZSAoDQo+ID4gKyAgSU4gT1VUICB2b2xhdGlsZSBVSU5UMzIgICAgICAgICAgICpTZW0NCj4gPiAr ICApDQo+ID4gK3sNCj4gPiArICBJbnRlcmxvY2tlZEluY3JlbWVudCAoU2VtKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgRGVjcmVtZW50IHRoZSBzZW1hcGhvcmUgYnkgMSBpZiBp dCBpcyBub3QgemVyby4NCj4gPiArDQo+ID4gKyAgUGVyZm9ybXMgYW4gYXRvbWljIGRlY3JlbWVu dCBvcGVyYXRpb24gZm9yIHNlbWFwaG9yZS4NCj4gPiArICBUaGUgY29tcGFyZSBleGNoYW5nZSBv cGVyYXRpb24gbXVzdCBiZSBwZXJmb3JtZWQgdXNpbmcNCj4gPiArICBNUCBzYWZlIG1lY2hhbmlz bXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgICAgIFNlbSAgICAgICAgICAgIElOOiAgMzItYml0 IHVuc2lnbmVkIGludGVnZXINCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0xpYldh aXRGb3JTZW1hcGhvcmUgKA0KPiA+ICsgIElOIE9VVCAgdm9sYXRpbGUgVUlOVDMyICAgICAgICAg ICAqU2VtDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDMyICBWYWx1ZTsNCj4gPiArDQo+ ID4gKyAgZG8gew0KPiA+ICsgICAgVmFsdWUgPSAqU2VtOw0KPiA+ICsgIH0gd2hpbGUgKFZhbHVl ID09IDApOw0KPiA+ICsNCj4gPiArICBJbnRlcmxvY2tlZERlY3JlbWVudCAoU2VtKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiAgIC8qKg0KPiA+ICAgICBJbml0aWFsaXplIHRoZSBDUFUgcmVnaXN0ZXJz IGZyb20gYSByZWdpc3RlciB0YWJsZS4NCj4gPg0KPiA+IC0gIEBwYXJhbVtpbl0gIFByb2Nlc3Nv ck51bWJlciAgVGhlIGluZGV4IG9mIHRoZSBDUFUgZXhlY3V0aW5nIHRoaXMNCj4gZnVuY3Rpb24u DQo+ID4gKyAgQHBhcmFtW2luXSAgUmVnaXN0ZXJUYWJsZSAgICAgICAgIFRoZSByZWdpc3RlciB0 YWJsZSBmb3IgdGhpcyBBUC4NCj4gPiArICBAcGFyYW1baW5dICBBcExvY2F0aW9uICAgICAgICAg ICAgQVAgbG9jYXRpb24gaW5mbyBmb3IgdGhpcyBhcC4NCj4gPiArICBAcGFyYW1baW5dICBDcHVT dGF0dXMgICAgICAgICAgICAgQ1BVIHN0YXR1cyBpbmZvIGZvciB0aGlzIENQVS4NCj4gPiArICBA cGFyYW1baW5dICBDcHVGbGFncyAgICAgICAgICAgICAgRmxhZ3MgZGF0YSBzdHJ1Y3R1cmUgdXNl ZCB3aGVuIHByb2dyYW0gdGhlDQo+IHJlZ2lzdGVyLg0KPiA+DQo+ID4gICAgIEBub3RlIFRoaXMg c2VydmljZSBjb3VsZCBiZSBjYWxsZWQgYnkgQlNQL0FQcy4NCj4gPiAgICoqLw0KPiA+ICAgVk9J RA0KPiA+ICtFRklBUEkNCj4gPiAgIFByb2dyYW1Qcm9jZXNzb3JSZWdpc3RlciAoDQo+ID4gLSAg SU4gVUlOVE4gIFByb2Nlc3Nvck51bWJlcg0KPiA+ICsgIElOIENQVV9SRUdJU1RFUl9UQUJMRSAg ICAgICAgICAgKlJlZ2lzdGVyVGFibGUsDQo+ID4gKyAgSU4gRUZJX0NQVV9QSFlTSUNBTF9MT0NB VElPTiAgICAqQXBMb2NhdGlvbiwNCj4gPiArICBJTiBDUFVfU1RBVFVTX0lORk9STUFUSU9OICAg ICAgICpDcHVTdGF0dXMsDQo+ID4gKyAgSU4gUFJPR1JBTV9DUFVfUkVHSVNURVJfRkxBR1MgICAq Q3B1RmxhZ3MNCj4gPiAgICAgKQ0KPiA+ICAgew0KPiA+IC0gIENQVV9GRUFUVVJFU19EQVRBICAg ICAgICAgKkNwdUZlYXR1cmVzRGF0YTsNCj4gPiAtICBDUFVfUkVHSVNURVJfVEFCTEUgICAgICAg ICpSZWdpc3RlclRhYmxlOw0KPiA+ICAgICBDUFVfUkVHSVNURVJfVEFCTEVfRU5UUlkgICpSZWdp c3RlclRhYmxlRW50cnk7DQo+ID4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXg7 DQo+ID4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgVmFsdWU7DQo+ID4gICAgIENQVV9S RUdJU1RFUl9UQUJMRV9FTlRSWSAgKlJlZ2lzdGVyVGFibGVFbnRyeUhlYWQ7DQo+ID4gLQ0KPiA+ IC0gIENwdUZlYXR1cmVzRGF0YSA9IEdldENwdUZlYXR1cmVzRGF0YSAoKTsNCj4gPiAtICBSZWdp c3RlclRhYmxlID0gJkNwdUZlYXR1cmVzRGF0YS0+UmVnaXN0ZXJUYWJsZVtQcm9jZXNzb3JOdW1i ZXJdOw0KPiA+ICsgIHZvbGF0aWxlIFVJTlQzMiAgICAgICAgICAgKlNlbWFwaG9yZVB0cjsNCj4g PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIENvcmVPZmZzZXQ7DQo+ID4gKyAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICBQYWNrYWdlT2Zmc2V0Ow0KPiA+ICsgIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgUGFja2FnZVRocmVhZHNDb3VudDsNCj4gPiArICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgIEFwT2Zmc2V0Ow0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgUHJv Y2Vzc29ySW5kZXg7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBcEluZGV4Ow0K PiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgVmFsaWRBcENvdW50Ow0KPiA+ICsNCj4g PiArICBBcEluZGV4ID0gQXBMb2NhdGlvbi0+UGFja2FnZSAqIENwdVN0YXR1cy0+Q29yZUNvdW50 ICogQ3B1U3RhdHVzLQ0KPiA+VGhyZWFkQ291bnQgXA0KPiA+ICsgICAgICAgICAgICArIEFwTG9j YXRpb24tPkNvcmUgKiBDcHVTdGF0dXMtPlRocmVhZENvdW50IFwNCj4gPiArICAgICAgICAgICAg KyBBcExvY2F0aW9uLT5UaHJlYWQ7DQo+ID4NCj4gPiAgICAgLy8NCj4gPiAgICAgLy8gVHJhdmVy c2UgUmVnaXN0ZXIgVGFibGUgb2YgdGhpcyBsb2dpY2FsIHByb2Nlc3Nvcg0KPiA+IEBAIC01OTEs NiArNzY4LDcgQEAgUHJvZ3JhbVByb2Nlc3NvclJlZ2lzdGVyICgNCj4gPiAgICAgZm9yIChJbmRl eCA9IDA7IEluZGV4IDwgUmVnaXN0ZXJUYWJsZS0+VGFibGVMZW5ndGg7IEluZGV4KyspIHsNCj4g Pg0KPiA+ICAgICAgIFJlZ2lzdGVyVGFibGVFbnRyeSA9ICZSZWdpc3RlclRhYmxlRW50cnlIZWFk W0luZGV4XTsNCj4gPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIlByb2Nlc3NvciA9ICVkLCBF bnRyeSBJbmRleCAlZCwgVHlwZQ0KPiA9ICVkIVxuIiwgQXBJbmRleCwgSW5kZXgsIFJlZ2lzdGVy VGFibGVFbnRyeS0+UmVnaXN0ZXJUeXBlKSk7DQo+IEhvdyBhYm91dCBwcmludCB0aGUgcmVnaXN0 ZXIgdHlwZSBpbiBzdHJpbmc/DQoNClllcywgd2lsbCBkbyBpdCBpbiB0aGUgbmV4dCB2ZXJzaW9u Lg0KDQo+IA0KPiA+DQo+ID4gICAgICAgLy8NCj4gPiAgICAgICAvLyBDaGVjayB0aGUgdHlwZSBv ZiBzcGVjaWZpZWQgcmVnaXN0ZXINCj4gPiBAQCAtNjU0LDEwICs4MzIsNiBAQCBQcm9ncmFtUHJv Y2Vzc29yUmVnaXN0ZXIgKA0KPiA+ICAgICAgIC8vIFRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIgaXMg TW9kZWwgU3BlY2lmaWMgUmVnaXN0ZXINCj4gPiAgICAgICAvLw0KPiA+ICAgICAgIGNhc2UgTXNy Og0KPiA+IC0gICAgICAvLw0KPiA+IC0gICAgICAvLyBHZXQgbG9jayB0byBhdm9pZCBQYWNrYWdl L0NvcmUgc2NvcGUgTVNScyBwcm9ncmFtbWluZyBpc3N1ZSBpbg0KPiBwYXJhbGxlbCBleGVjdXRp b24gbW9kZQ0KPiA+IC0gICAgICAvLw0KPiA+IC0gICAgICBBY3F1aXJlU3BpbkxvY2sgKCZDcHVG ZWF0dXJlc0RhdGEtPk1zckxvY2spOw0KPiA+ICAgICAgICAgaWYgKFJlZ2lzdGVyVGFibGVFbnRy eS0+VmFsaWRCaXRMZW5ndGggPj0gNjQpIHsNCj4gPiAgICAgICAgICAgLy8NCj4gPiAgICAgICAg ICAgLy8gSWYgbGVuZ3RoIGlzIG5vdCBsZXNzIHRoYW4gNjQgYml0cywgdGhlbiBkaXJlY3RseSB3 cml0ZSB3aXRob3V0IHJlYWRpbmcNCj4gPiBAQCAtNjc3LDIwICs4NTEsMTkgQEAgUHJvZ3JhbVBy b2Nlc3NvclJlZ2lzdGVyICgNCj4gPiAgICAgICAgICAgICBSZWdpc3RlclRhYmxlRW50cnktPlZh bHVlDQo+ID4gICAgICAgICAgICAgKTsNCj4gPiAgICAgICAgIH0NCj4gPiAtICAgICAgUmVsZWFz ZVNwaW5Mb2NrICgmQ3B1RmVhdHVyZXNEYXRhLT5Nc3JMb2NrKTsNCj4gPiAgICAgICAgIGJyZWFr Ow0KPiA+ICAgICAgIC8vDQo+ID4gICAgICAgLy8gTWVtb3J5TWFwcGVkIG9wZXJhdGlvbnMNCj4g PiAgICAgICAvLw0KPiA+ICAgICAgIGNhc2UgTWVtb3J5TWFwcGVkOg0KPiA+IC0gICAgICBBY3F1 aXJlU3BpbkxvY2sgKCZDcHVGZWF0dXJlc0RhdGEtPk1lbW9yeU1hcHBlZExvY2spOw0KPiA+ICsg ICAgICBBY3F1aXJlU3BpbkxvY2sgKCZDcHVGbGFncy0+TWVtb3J5TWFwcGVkTG9jayk7DQo+ID4g ICAgICAgICBNbWlvQml0RmllbGRXcml0ZTMyICgNCj4gPiAgICAgICAgICAgKFVJTlROKShSZWdp c3RlclRhYmxlRW50cnktPkluZGV4IHwgTFNoaWZ0VTY0IChSZWdpc3RlclRhYmxlRW50cnktDQo+ ID5IaWdoSW5kZXgsIDMyKSksDQo+ID4gICAgICAgICAgIFJlZ2lzdGVyVGFibGVFbnRyeS0+VmFs aWRCaXRTdGFydCwNCj4gPiAgICAgICAgICAgUmVnaXN0ZXJUYWJsZUVudHJ5LT5WYWxpZEJpdFN0 YXJ0ICsgUmVnaXN0ZXJUYWJsZUVudHJ5LQ0KPiA+VmFsaWRCaXRMZW5ndGggLSAxLA0KPiA+ICAg ICAgICAgICAoVUlOVDMyKVJlZ2lzdGVyVGFibGVFbnRyeS0+VmFsdWUNCj4gPiAgICAgICAgICAg KTsNCj4gPiAtICAgICAgUmVsZWFzZVNwaW5Mb2NrICgmQ3B1RmVhdHVyZXNEYXRhLT5NZW1vcnlN YXBwZWRMb2NrKTsNCj4gPiArICAgICAgUmVsZWFzZVNwaW5Mb2NrICgmQ3B1RmxhZ3MtPk1lbW9y eU1hcHBlZExvY2spOw0KPiA+ICAgICAgICAgYnJlYWs7DQo+ID4gICAgICAgLy8NCj4gPiAgICAg ICAvLyBFbmFibGUgb3IgZGlzYWJsZSBjYWNoZQ0KPiA+IEBAIC03MDYsNiArODc5LDUwIEBAIFBy b2dyYW1Qcm9jZXNzb3JSZWdpc3RlciAoDQo+ID4gICAgICAgICB9DQo+ID4gICAgICAgICBicmVh azsNCj4gPg0KPiA+ICsgICAgY2FzZSBTZW1hcGhvcmU6DQo+ID4gKyAgICAgIFNlbWFwaG9yZVB0 ciA9IENwdUZsYWdzLT5TZW1hcGhvcmVDb3VudDsNCj4gPiArICAgICAgc3dpdGNoIChSZWdpc3Rl clRhYmxlRW50cnktPlZhbHVlKSB7DQo+ID4gKyAgICAgIGNhc2UgQ29yZURlcFR5cGU6DQo+ID4g KyAgICAgICAgQ29yZU9mZnNldCA9IChBcExvY2F0aW9uLT5QYWNrYWdlICogQ3B1U3RhdHVzLT5D b3JlQ291bnQgKw0KPiBBcExvY2F0aW9uLT5Db3JlKSAqIENwdVN0YXR1cy0+VGhyZWFkQ291bnQg PiArICAgICAgICBBcE9mZnNldCA9IENvcmVPZmZzZXQNCj4gKyBBcExvY2F0aW9uLT5UaHJlYWQ7 DQo+IA0KPiBIb3cgYWJvdXQgRmlyc3RUaHJlYWQgYW5kIEN1cnJlbnRUaHJlYWQ/DQoNCk9rLCB3 aWxsIHVzZSB0aGlzIG5ldyBuYW1lcy4NCg0KPiANCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAg ICAgIC8vIEZpcnN0IGluY3JlYXNlIHNlbWFwaG9yZSBjb3VudCBieSAxIGZvciBwcm9jZXNzb3Jz IGluIHRoaXMgY29yZS4NCj4gVGhpcyBjb21tZW50IG1pZ2h0IG5vdCBiZSBoZWxwZnVsIGZvciBy ZXZpZXdlciB0byB1bmRlcnN0YW5kLg0KPiBIb3cgYWJvdXQgIk5vdGlmeSBhbGwgdGhyZWFkcyBp biBjdXJyZW50IENvcmUiPw0KPiANCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAgICAgIGZvciAo UHJvY2Vzc29ySW5kZXggPSAwOyBQcm9jZXNzb3JJbmRleCA8IENwdVN0YXR1cy0+VGhyZWFkQ291 bnQ7DQo+IFByb2Nlc3NvckluZGV4ICsrKSB7DQo+ID4gKyAgICAgICAgICBMaWJSZWxlYXNlU2Vt YXBob3JlICgoVUlOVDMyICopICZTZW1hcGhvcmVQdHJbQ29yZU9mZnNldCArDQo+IFByb2Nlc3Nv ckluZGV4XSk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAg Ly8gU2Vjb25kLCBjaGVjayB3aGV0aGVyIHRoZSBjb3VudCBoYXMgcmVhY2ggdGhlIGNoZWNrIG51 bWJlci4NCj4gSG93IGFib3V0ICJXYWl0IGZvciBhbGwgdGhyZWFkcyBpbiBjdXJyZW50IENvcmUi Pw0KDQpPaywgd2lsbCBkbyB0aGlzIGNoYW5nZSBpbiBuZXh0IHZlcnNpb24gY2hhbmdlcy4NCg0K PiANCj4gQmVsb3cgZGlhZ3JhbSBpcyBhbHNvIGhlbHBmdWwNCj4gLy8NCj4gLy8gIFYoeCkgPSBM aWJSZWxlYXNlU2VtYXBob3JlIChTZW1hcGhvcmVbRmlyc3RUaHJlYWQgKyB4XSk7DQo+IC8vICBQ KHgpID0gTGliV2FpdEZvclNlbWFwaG9yZSAoU2VtYXBob3JlW0ZpcnN0VGhyZWFkICsgeF0pOw0K PiAvLw0KPiAvLyAgQWxsIHRocmVhZHMgKFQwLi4uVG4pIHdhaXRzIGluIFAoKSBsaW5lIGFuZCBj b250aW51ZXMgcnVubmluZw0KPiAvLyAgdG9nZXRoZXIuDQo+IC8vDQo+IC8vDQo+IC8vICBUMCAg ICAgICAgICAgICBUMSAgICAgICAgICAgIC4uLiAgICAgICAgICAgVG4NCj4gLy8NCj4gLy8gIFYo MC4uLm4pICAgICAgIFYoMC4uLm4pICAgICAgLi4uICAgICAgICAgICBWKDAuLi5uKQ0KPiAvLyAg biAqIFAoMCkgICAgICAgbiAqIFAoMSkgICAgICAuLi4gICAgICAgICAgIG4gKiBQKG4pDQo+IC8v DQo+IA0KDQpPaywgd2lsbCBkbyB0aGlzIGNoYW5nZSBpbiBuZXh0IHZlcnNpb24gY2hhbmdlcy4N Cg0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgZm9yIChQcm9jZXNzb3JJbmRleCA9IDA7 IFByb2Nlc3NvckluZGV4IDwgQ3B1U3RhdHVzLT5UaHJlYWRDb3VudDsNCj4gUHJvY2Vzc29ySW5k ZXggKyspIHsNCj4gPiArICAgICAgICAgIExpYldhaXRGb3JTZW1hcGhvcmUgKCZTZW1hcGhvcmVQ dHJbQXBPZmZzZXRdKTsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4g Kw0KPiA+ICsgICAgICBjYXNlIFBhY2thZ2VEZXBUeXBlOg0KPiA+ICsgICAgICAgIFBhY2thZ2VP ZmZzZXQgPSBBcExvY2F0aW9uLT5QYWNrYWdlICogQ3B1U3RhdHVzLT5Db3JlQ291bnQgKg0KPiBD cHVTdGF0dXMtPlRocmVhZENvdW50Ow0KPiANCj4gRmlyc3RUaHJlYWQ/DQoNCk9rLCB3aWxsIGRv IHRoaXMgY2hhbmdlIGluIG5leHQgdmVyc2lvbiBjaGFuZ2VzLg0KDQo+IA0KPiA+ICsgICAgICAg IFBhY2thZ2VUaHJlYWRzQ291bnQgPSBDcHVTdGF0dXMtPlRocmVhZENvdW50ICogQ3B1U3RhdHVz LQ0KPiA+Q29yZUNvdW50Ow0KPiBUaHJlYWRDb3VudD8NCj4gDQo+ID4gKyAgICAgICAgQXBPZmZz ZXQgPSBQYWNrYWdlT2Zmc2V0ICsgQ3B1U3RhdHVzLT5UaHJlYWRDb3VudCAqIEFwTG9jYXRpb24t DQo+ID5Db3JlICsgQXBMb2NhdGlvbi0+VGhyZWFkOw0KPiBDdXJyZW50VGhyZWFkPw0KDQpPaywg d2lsbCBkbyB0aGlzIGNoYW5nZSBpbiBuZXh0IHZlcnNpb24gY2hhbmdlcy4NCg0KPiANCj4gPiAr ICAgICAgICBWYWxpZEFwQ291bnQgPSBDcHVTdGF0dXMtPlRocmVhZENvdW50ICogQ3B1U3RhdHVz LQ0KPiA+VmFsaWRDb3Jlc0luUGFja2FnZXNbQXBMb2NhdGlvbi0+UGFja2FnZV07DQo+IFZhbGlk VGhyZWFkQ291bnQ/DQoNCk9rLCB3aWxsIGRvIHRoaXMgY2hhbmdlIGluIG5leHQgdmVyc2lvbiBj aGFuZ2VzLg0KDQo+IA0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgLy8gRmlyc3QgaW5j cmVhc2Ugc2VtYXBob3JlIGNvdW50IGJ5IDEgZm9yIHByb2Nlc3NvcnMgaW4gdGhpcyBwYWNrYWdl Lg0KPiBIb3cgYWJvdXQgIk5vdGlmeSBhbGwgdGhyZWFkcyBpbiBjdXJyZW50IFBhY2thZ2UiPw0K DQpPaywgd2lsbCBkbyB0aGlzIGNoYW5nZSBpbiBuZXh0IHZlcnNpb24gY2hhbmdlcy4NCg0KPiA+ ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgZm9yIChQcm9jZXNzb3JJbmRleCA9IDA7IFByb2Nl c3NvckluZGV4IDwgUGFja2FnZVRocmVhZHNDb3VudCA7DQo+IFByb2Nlc3NvckluZGV4ICsrKSB7 DQo+ID4gKyAgICAgICAgICBMaWJSZWxlYXNlU2VtYXBob3JlICgoVUlOVDMyICopICZTZW1hcGhv cmVQdHJbUGFja2FnZU9mZnNldCArDQo+IFByb2Nlc3NvckluZGV4XSk7DQo+ID4gKyAgICAgICAg fQ0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgLy8gU2Vjb25kLCBjaGVjayB3aGV0aGVy IHRoZSBjb3VudCBoYXMgcmVhY2ggdGhlIGNoZWNrIG51bWJlci4NCj4gSG93IGFib3V0ICJXYWl0 IGZvciBhbGwgdGhyZWFkcyBpbiBjdXJyZW50IFBhY2thZ2UiPw0KDQpPaywgd2lsbCBkbyB0aGlz IGNoYW5nZSBpbiBuZXh0IHZlcnNpb24gY2hhbmdlcy4NCg0KPiA+ICsgICAgICAgIC8vDQo+ID4g KyAgICAgICAgZm9yIChQcm9jZXNzb3JJbmRleCA9IDA7IFByb2Nlc3NvckluZGV4IDwgVmFsaWRB cENvdW50Ow0KPiBQcm9jZXNzb3JJbmRleCArKykgew0KPiA+ICsgICAgICAgICAgTGliV2FpdEZv clNlbWFwaG9yZSAoJlNlbWFwaG9yZVB0cltBcE9mZnNldF0pOw0KPiA+ICsgICAgICAgIH0NCj4g PiArICAgICAgICBicmVhazsNCj4gPiArDQo+ID4gKyAgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAg ICAgYnJlYWs7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ICAg ICAgIGRlZmF1bHQ6DQo+ID4gICAgICAgICBicmVhazsNCj4gPiAgICAgICB9DQo+ID4gQEAgLTcy NCwxMCArOTQxLDM2IEBAIFNldFByb2Nlc3NvclJlZ2lzdGVyICgNCj4gPiAgICAgSU4gT1VUIFZP SUQgICAgICAgICAgICAqQnVmZmVyDQo+ID4gICAgICkNCj4gPiAgIHsNCj4gPiAtICBVSU5UTiAg ICAgICAgICAgICAgICAgIFByb2Nlc3Nvck51bWJlcjsNCj4gPiArICBDUFVfRkVBVFVSRVNfREFU QSAgICAgICAgICpDcHVGZWF0dXJlc0RhdGE7DQo+ID4gKyAgQ1BVX1JFR0lTVEVSX1RBQkxFICAg ICAgICAqUmVnaXN0ZXJUYWJsZTsNCj4gPiArICBDUFVfUkVHSVNURVJfVEFCTEUgICAgICAgICpS ZWdpc3RlclRhYmxlczsNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEluaXRBcGlj SWQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBQcm9jSW5kZXg7DQo+ID4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiArICBBQ1BJX0NQVV9EQVRBICAg ICAgICAgICAgICpBY3BpQ3B1RGF0YTsNCj4gPg0KPiA+IC0gIFByb2Nlc3Nvck51bWJlciA9IEdl dFByb2Nlc3NvckluZGV4ICgpOw0KPiA+IC0gIFByb2dyYW1Qcm9jZXNzb3JSZWdpc3RlciAoUHJv Y2Vzc29yTnVtYmVyKTsNCj4gPiArICBDcHVGZWF0dXJlc0RhdGEgPSAoQ1BVX0ZFQVRVUkVTX0RB VEEgKikgQnVmZmVyOw0KPiA+ICsgIEFjcGlDcHVEYXRhID0gQ3B1RmVhdHVyZXNEYXRhLT5BY3Bp Q3B1RGF0YTsNCj4gPiArDQo+ID4gKyAgUmVnaXN0ZXJUYWJsZXMgPSAoQ1BVX1JFR0lTVEVSX1RB QkxFICopKFVJTlROKUFjcGlDcHVEYXRhLQ0KPiA+UmVnaXN0ZXJUYWJsZTsNCj4gPiArDQo+ID4g KyAgSW5pdEFwaWNJZCA9IEdldEluaXRpYWxBcGljSWQgKCk7DQo+ID4gKyAgUmVnaXN0ZXJUYWJs ZSA9IE5VTEw7DQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQWNwaUNwdURhdGEtPk51 bWJlck9mQ3B1czsgSW5kZXgrKykgew0KPiA+ICsgICAgaWYgKFJlZ2lzdGVyVGFibGVzW0luZGV4 XS5Jbml0aWFsQXBpY0lkID09IEluaXRBcGljSWQpIHsNCj4gPiArICAgICAgUmVnaXN0ZXJUYWJs ZSA9ICAmUmVnaXN0ZXJUYWJsZXNbSW5kZXhdOw0KPiA+ICsgICAgICBQcm9jSW5kZXggPSBJbmRl eDsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsgIEFTU0VS VCAoUmVnaXN0ZXJUYWJsZSAhPSBOVUxMKTsNCj4gPiArDQo+ID4gKyAgUHJvZ3JhbVByb2Nlc3Nv clJlZ2lzdGVyICgNCj4gPiArICAgIFJlZ2lzdGVyVGFibGUsDQo+ID4gKyAgICBBY3BpQ3B1RGF0 YS0+QXBMb2NhdGlvbiArIFByb2NJbmRleCwNCj4gPiArICAgICZBY3BpQ3B1RGF0YS0+Q3B1U3Rh dHVzLA0KPiA+ICsgICAgJkNwdUZlYXR1cmVzRGF0YS0+Q3B1RmxhZ3MNCj4gPiArICAgICk7DQo+ ID4gICB9DQo+ID4NCj4gPiAgIC8qKg0KPiA+IEBAIC03NDYsNiArOTg5LDkgQEAgQ3B1RmVhdHVy ZXNEZXRlY3QgKA0KPiA+ICAgew0KPiA+ICAgICBVSU5UTiAgICAgICAgICAgICAgICAgIE51bWJl ck9mQ3B1czsNCj4gPiAgICAgVUlOVE4gICAgICAgICAgICAgICAgICBOdW1iZXJPZkVuYWJsZWRQ cm9jZXNzb3JzOw0KPiA+ICsgIENQVV9GRUFUVVJFU19EQVRBICAgICAgKkNwdUZlYXR1cmVzRGF0 YTsNCj4gPiArDQo+ID4gKyAgQ3B1RmVhdHVyZXNEYXRhID0gR2V0Q3B1RmVhdHVyZXNEYXRhKCk7 DQo+ID4NCj4gPiAgICAgR2V0TnVtYmVyT2ZQcm9jZXNzb3IgKCZOdW1iZXJPZkNwdXMsDQo+ICZO dW1iZXJPZkVuYWJsZWRQcm9jZXNzb3JzKTsNCj4gPg0KPiA+IEBAIC03NTQsNDkgKzEwMDAsMTMg QEAgQ3B1RmVhdHVyZXNEZXRlY3QgKA0KPiA+ICAgICAvLw0KPiA+ICAgICAvLyBXYWtldXAgYWxs IEFQcyBmb3IgZGF0YSBjb2xsZWN0aW9uLg0KPiA+ICAgICAvLw0KPiA+IC0gIFN0YXJ0dXBBUHNX b3JrZXIgKENvbGxlY3RQcm9jZXNzb3JEYXRhKTsNCj4gPiArICBTdGFydHVwQVBzV29ya2VyIChD b2xsZWN0UHJvY2Vzc29yRGF0YSwgTlVMTCk7DQo+ID4NCj4gPiAgICAgLy8NCj4gPiAgICAgLy8g Q29sbGVjdCBkYXRhIG9uIEJTUA0KPiA+ICAgICAvLw0KPiA+IC0gIENvbGxlY3RQcm9jZXNzb3JE YXRhIChOVUxMKTsNCj4gPiArICBDb2xsZWN0UHJvY2Vzc29yRGF0YSAoQ3B1RmVhdHVyZXNEYXRh KTsNCj4gPg0KPiA+ICAgICBBbmFseXNpc1Byb2Nlc3NvckZlYXR1cmVzIChOdW1iZXJPZkNwdXMp Ow0KPiA+ICAgfQ0KPiA+DQo+ID4gLS8qKg0KPiA+IC0gIFBlcmZvcm1zIENQVSBmZWF0dXJlcyBJ bml0aWFsaXphdGlvbi4NCj4gPiAtDQo+ID4gLSAgVGhpcyBzZXJ2aWNlIHdpbGwgaW52b2tlIE1Q IHNlcnZpY2UgdG8gcGVyZm9ybSBDUFUgZmVhdHVyZXMNCj4gPiAtICBpbml0aWFsaXphdGlvbiBv biBCU1AvQVBzIHBlciB1c2VyIGNvbmZpZ3VyYXRpb24uDQo+ID4gLQ0KPiA+IC0gIEBub3RlIFRo aXMgc2VydmljZSBjb3VsZCBiZSBjYWxsZWQgYnkgQlNQIG9ubHkuDQo+ID4gLSoqLw0KPiA+IC1W T0lEDQo+ID4gLUVGSUFQSQ0KPiA+IC1DcHVGZWF0dXJlc0luaXRpYWxpemUgKA0KPiA+IC0gIFZP SUQNCj4gPiAtICApDQo+ID4gLXsNCj4gPiAtICBDUFVfRkVBVFVSRVNfREFUQSAgICAgICpDcHVG ZWF0dXJlc0RhdGE7DQo+ID4gLSAgVUlOVE4gICAgICAgICAgICAgICAgICBPbGRCc3BOdW1iZXI7 DQo+ID4gLQ0KPiA+IC0gIENwdUZlYXR1cmVzRGF0YSA9IEdldENwdUZlYXR1cmVzRGF0YSAoKTsN Cj4gPiAtDQo+ID4gLSAgT2xkQnNwTnVtYmVyID0gR2V0UHJvY2Vzc29ySW5kZXgoKTsNCj4gPiAt ICBDcHVGZWF0dXJlc0RhdGEtPkJzcE51bWJlciA9IE9sZEJzcE51bWJlcjsNCj4gPiAtICAvLw0K PiA+IC0gIC8vIFdha2V1cCBhbGwgQVBzIGZvciBwcm9ncmFtbWluZy4NCj4gPiAtICAvLw0KPiA+ IC0gIFN0YXJ0dXBBUHNXb3JrZXIgKFNldFByb2Nlc3NvclJlZ2lzdGVyKTsNCj4gPiAtICAvLw0K PiA+IC0gIC8vIFByb2dyYW1taW5nIEJTUA0KPiA+IC0gIC8vDQo+ID4gLSAgU2V0UHJvY2Vzc29y UmVnaXN0ZXIgKE5VTEwpOw0KPiA+IC0gIC8vDQo+ID4gLSAgLy8gU3dpdGNoIHRvIG5ldyBCU1Ag aWYgcmVxdWlyZWQNCj4gPiAtICAvLw0KPiA+IC0gIGlmIChDcHVGZWF0dXJlc0RhdGEtPkJzcE51 bWJlciAhPSBPbGRCc3BOdW1iZXIpIHsNCj4gPiAtICAgIFN3aXRjaE5ld0JzcCAoQ3B1RmVhdHVy ZXNEYXRhLT5Cc3BOdW1iZXIpOw0KPiA+IC0gIH0NCj4gPiAtfQ0KPiA+IGRpZmYgLS1naXQNCj4g YS9VZWZpQ3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi9EeGVSZWdpc3RlckNw dUZlYXR1cmVzTGliLmMNCj4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJl c0xpYi9EeGVSZWdpc3RlckNwdUZlYXR1cmVzTGliLmMNCj4gPiBpbmRleCAxZjM0YTNmNDg5Li44 MzQ2ZjcwMDRmIDEwMDY0NA0KPiA+IC0tLQ0KPiBhL1VlZmlDcHVQa2cvTGlicmFyeS9SZWdpc3Rl ckNwdUZlYXR1cmVzTGliL0R4ZVJlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIuYw0KPiA+ICsrKw0KPiBi L1VlZmlDcHVQa2cvTGlicmFyeS9SZWdpc3RlckNwdUZlYXR1cmVzTGliL0R4ZVJlZ2lzdGVyQ3B1 RmVhdHVyZXNMaWIuYw0KPiA+IEBAIC0xNSw2ICsxNSw3IEBADQo+ID4gICAjaW5jbHVkZSA8UGlE eGUuaD4NCj4gPg0KPiA+ICAgI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxl TGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4gPg0KPiA+ICAgI2lu Y2x1ZGUgIlJlZ2lzdGVyQ3B1RmVhdHVyZXMuaCINCj4gPg0KPiA+IEBAIC0xMTUsMTQgKzExNiwy MCBAQCBHZXRQcm9jZXNzb3JJbmZvcm1hdGlvbiAoDQo+ID4NCj4gPiAgICAgQHBhcmFtW2luXSAg UHJvY2VkdXJlICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0byBiZSBy dW4gb24NCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxl ZCBBUHMgb2YgdGhlIHN5c3RlbS4NCj4gPiArICBAcGFyYW1baW5dICBNcEV2ZW50ICAgICAgICAg ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGV2ZW50IHRvIGJlIHVzZWQgbGF0ZXINCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBjaGVjayB3aGV0aGVyIHByb2Nl ZHVyZSBoYXMgZG9uZS4NCj4gPiAgICoqLw0KPiA+ICAgVk9JRA0KPiA+ICAgU3RhcnR1cEFQc1dv cmtlciAoDQo+ID4gLSAgSU4gIEVGSV9BUF9QUk9DRURVUkUgICAgICAgICAgICAgICAgIFByb2Nl ZHVyZQ0KPiA+ICsgIElOICBFRklfQVBfUFJPQ0VEVVJFICAgICAgICAgICAgICAgICBQcm9jZWR1 cmUsDQo+ID4gKyAgSU4gIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpNcEV2ZW50 DQo+ID4gICAgICkNCj4gPiAgIHsNCj4gPiAgICAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAg ICAgICAgICAgIFN0YXR1czsNCj4gPiAgICAgRUZJX01QX1NFUlZJQ0VTX1BST1RPQ09MICAgICAg ICAgICAgICpNcFNlcnZpY2VzOw0KPiA+ICsgIENQVV9GRUFUVVJFU19EQVRBICAgICAgICAgICAg ICAgICAgICAqQ3B1RmVhdHVyZXNEYXRhOw0KPiA+ICsNCj4gPiArICBDcHVGZWF0dXJlc0RhdGEg PSBHZXRDcHVGZWF0dXJlc0RhdGEgKCk7DQo+ID4NCj4gPiAgICAgTXBTZXJ2aWNlcyA9IEdldE1w UHJvdG9jb2wgKCk7DQo+ID4gICAgIC8vDQo+ID4gQEAgLTEzMiw5ICsxMzksOSBAQCBTdGFydHVw QVBzV29ya2VyICgNCj4gPiAgICAgICAgICAgICAgICAgICAgTXBTZXJ2aWNlcywNCj4gPiAgICAg ICAgICAgICAgICAgICAgUHJvY2VkdXJlLA0KPiA+ICAgICAgICAgICAgICAgICAgICBGQUxTRSwN Cj4gPiAtICAgICAgICAgICAgICAgICBOVUxMLA0KPiA+ICsgICAgICAgICAgICAgICAgIChFRklf RVZFTlQpTXBFdmVudCwNCj4gPiAgICAgICAgICAgICAgICAgICAgMCwNCj4gPiAtICAgICAgICAg ICAgICAgICBOVUxMLA0KPiA+ICsgICAgICAgICAgICAgICAgIENwdUZlYXR1cmVzRGF0YSwNCj4g PiAgICAgICAgICAgICAgICAgICAgTlVMTA0KPiA+ICAgICAgICAgICAgICAgICAgICApOw0KPiA+ ICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+IEBAIC0xOTcsMyArMjA0LDYxIEBA IEdldE51bWJlck9mUHJvY2Vzc29yICgNCj4gPiAgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVz KTsNCj4gPiAgIH0NCj4gPg0KPiA+ICsvKioNCj4gPiArICBQZXJmb3JtcyBDUFUgZmVhdHVyZXMg SW5pdGlhbGl6YXRpb24uDQo+ID4gKw0KPiA+ICsgIFRoaXMgc2VydmljZSB3aWxsIGludm9rZSBN UCBzZXJ2aWNlIHRvIHBlcmZvcm0gQ1BVIGZlYXR1cmVzDQo+ID4gKyAgaW5pdGlhbGl6YXRpb24g b24gQlNQL0FQcyBwZXIgdXNlciBjb25maWd1cmF0aW9uLg0KPiA+ICsNCj4gPiArICBAbm90ZSBU aGlzIHNlcnZpY2UgY291bGQgYmUgY2FsbGVkIGJ5IEJTUCBvbmx5Lg0KPiA+ICsqKi8NCj4gPiAr Vk9JRA0KPiA+ICtFRklBUEkNCj4gPiArQ3B1RmVhdHVyZXNJbml0aWFsaXplICgNCj4gPiArICBW T0lEDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQ1BVX0ZFQVRVUkVTX0RBVEEgICAgICAgICAg KkNwdUZlYXR1cmVzRGF0YTsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICBPbGRC c3BOdW1iZXI7DQo+ID4gKyAgRUZJX0VWRU5UICAgICAgICAgICAgICAgICAgTXBFdmVudDsNCj4g PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gKw0KPiA+ICsgIENw dUZlYXR1cmVzRGF0YSA9IEdldENwdUZlYXR1cmVzRGF0YSAoKTsNCj4gPiArDQo+ID4gKyAgT2xk QnNwTnVtYmVyID0gR2V0UHJvY2Vzc29ySW5kZXgoKTsNCj4gPiArICBDcHVGZWF0dXJlc0RhdGEt PkJzcE51bWJlciA9IE9sZEJzcE51bWJlcjsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5D cmVhdGVFdmVudCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgIEVWVF9OT1RJRllfV0FJVCwNCj4g PiArICAgICAgICAgICAgICAgICAgVFBMX0NBTExCQUNLLA0KPiA+ICsgICAgICAgICAgICAgICAg ICBFZmlFdmVudEVtcHR5RnVuY3Rpb24sDQo+ID4gKyAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICZNcEV2ZW50DQo+ID4gKyAgICAgICAgICAgICAgICAgICk7 DQo+ID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiArDQo+ID4gKyAgLy8NCj4g PiArICAvLyBXYWtldXAgYWxsIEFQcyBmb3IgcHJvZ3JhbW1pbmcuDQo+ID4gKyAgLy8NCj4gPiAr ICBTdGFydHVwQVBzV29ya2VyIChTZXRQcm9jZXNzb3JSZWdpc3RlciwgTXBFdmVudCk7DQo+ID4g KyAgLy8NCj4gPiArICAvLyBQcm9ncmFtbWluZyBCU1ANCj4gPiArICAvLw0KPiA+ICsgIFNldFBy b2Nlc3NvclJlZ2lzdGVyIChDcHVGZWF0dXJlc0RhdGEpOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ ICsgIC8vIFdhaXQgYWxsIHByb2Nlc3NvcnMgdG8gZmluaXNoIHRoZSB0YXNrLg0KPiA+ICsgIC8v DQo+ID4gKyAgZG8gew0KPiA+ICsgICAgU3RhdHVzID0gZ0JTLT5DaGVja0V2ZW50IChNcEV2ZW50 KTsNCj4gPiArICB9IHdoaWxlIChTdGF0dXMgPT0gRUZJX05PVF9SRUFEWSk7DQo+ID4gKyAgQVNT RVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBTd2l0 Y2ggdG8gbmV3IEJTUCBpZiByZXF1aXJlZA0KPiA+ICsgIC8vDQo+ID4gKyAgaWYgKENwdUZlYXR1 cmVzRGF0YS0+QnNwTnVtYmVyICE9IE9sZEJzcE51bWJlcikgew0KPiA+ICsgICAgU3dpdGNoTmV3 QnNwIChDcHVGZWF0dXJlc0RhdGEtPkJzcE51bWJlcik7DQo+ID4gKyAgfQ0KPiA+ICt9DQo+ID4g Kw0KPiA+IGRpZmYgLS1naXQNCj4gYS9VZWZpQ3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0 dXJlc0xpYi9EeGVSZWdpc3RlckNwdUZlYXR1cmVzTGliLmkNCj4gbmYNCj4gYi9VZWZpQ3B1UGtn L0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi9EeGVSZWdpc3RlckNwdUZlYXR1cmVzTGli LmkNCj4gbmYNCj4gPiBpbmRleCBmMGYzMTdjOTQ1Li42NjkzYmFlNTc1IDEwMDY0NA0KPiA+IC0t LQ0KPiBhL1VlZmlDcHVQa2cvTGlicmFyeS9SZWdpc3RlckNwdUZlYXR1cmVzTGliL0R4ZVJlZ2lz dGVyQ3B1RmVhdHVyZXNMaWIuaQ0KPiBuZg0KPiA+ICsrKw0KPiBiL1VlZmlDcHVQa2cvTGlicmFy eS9SZWdpc3RlckNwdUZlYXR1cmVzTGliL0R4ZVJlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIuaQ0KPiBu Zg0KPiA+IEBAIC00Nyw2ICs0Nyw5IEBADQo+ID4gICAgIFN5bmNocm9uaXphdGlvbkxpYg0KPiA+ ICAgICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4gPiAgICAgSW9MaWINCj4gPiArICBVZWZp Qm9vdFNlcnZpY2VzVGFibGVMaWINCj4gPiArICBVZWZpTGliDQo+ID4gKyAgTG9jYWxBcGljTGli DQo+ID4NCj4gPiAgIFtQcm90b2NvbHNdDQo+ID4gICAgIGdFZmlNcFNlcnZpY2VQcm90b2NvbEd1 aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIENPTlNVTUVT DQo+ID4gZGlmZiAtLWdpdA0KPiBhL1VlZmlDcHVQa2cvTGlicmFyeS9SZWdpc3RlckNwdUZlYXR1 cmVzTGliL1BlaVJlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIuYw0KPiBiL1VlZmlDcHVQa2cvTGlicmFy eS9SZWdpc3RlckNwdUZlYXR1cmVzTGliL1BlaVJlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIuYw0KPiA+ IGluZGV4IDgyZmUyNjg4MTIuLjc5OTg2NGExMzYgMTAwNjQ0DQo+ID4gLS0tDQo+IGEvVWVmaUNw dVBrZy9MaWJyYXJ5L1JlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIvUGVpUmVnaXN0ZXJDcHVGZWF0dXJl c0xpYi5jDQo+ID4gKysrDQo+IGIvVWVmaUNwdVBrZy9MaWJyYXJ5L1JlZ2lzdGVyQ3B1RmVhdHVy ZXNMaWIvUGVpUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi5jDQo+ID4gQEAgLTE0OSwxMSArMTQ5LDE1 IEBAIEdldFByb2Nlc3NvckluZm9ybWF0aW9uICgNCj4gPiAgICoqLw0KPiA+ICAgVk9JRA0KPiA+ ICAgU3RhcnR1cEFQc1dvcmtlciAoDQo+ID4gLSAgSU4gIEVGSV9BUF9QUk9DRURVUkUgICAgICAg ICAgICAgICAgIFByb2NlZHVyZQ0KPiA+ICsgIElOICBFRklfQVBfUFJPQ0VEVVJFICAgICAgICAg ICAgICAgICBQcm9jZWR1cmUsDQo+ID4gKyAgSU4gIFZPSUQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpNcEV2ZW50DQo+ID4gICAgICkNCj4gPiAgIHsNCj4gPiAgICAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiAgICAgRUZJX1BFSV9NUF9TRVJW SUNFU19QUEkgICAgICAgICAgICAgICpDcHVNcFBwaTsNCj4gPiArICBDUFVfRkVBVFVSRVNfREFU QSAgICAgICAgICAgICAgICAgICAgKkNwdUZlYXR1cmVzRGF0YTsNCj4gPiArDQo+ID4gKyAgQ3B1 RmVhdHVyZXNEYXRhID0gR2V0Q3B1RmVhdHVyZXNEYXRhICgpOw0KPiA+DQo+ID4gICAgIC8vDQo+ ID4gICAgIC8vIEdldCBNUCBTZXJ2aWNlcyBQcm90b2NvbA0KPiA+IEBAIC0xNzUsNyArMTc5LDcg QEAgU3RhcnR1cEFQc1dvcmtlciAoDQo+ID4gICAgICAgICAgICAgICAgICAgIFByb2NlZHVyZSwN Cj4gPiAgICAgICAgICAgICAgICAgICAgRkFMU0UsDQo+ID4gICAgICAgICAgICAgICAgICAgIDAs DQo+ID4gLSAgICAgICAgICAgICAgICAgTlVMTA0KPiA+ICsgICAgICAgICAgICAgICAgIENwdUZl YXR1cmVzRGF0YQ0KPiA+ICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICBBU1NFUlRfRUZJ X0VSUk9SIChTdGF0dXMpOw0KPiA+ICAgfQ0KPiA+IEBAIC0yNTcsMyArMjYxLDUwIEBAIEdldE51 bWJlck9mUHJvY2Vzc29yICgNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ ICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICAgfQ0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAgUGVyZm9ybXMgQ1BVIGZlYXR1cmVzIEluaXRpYWxpemF0aW9uLg0KPiA+ICsNCj4g PiArICBUaGlzIHNlcnZpY2Ugd2lsbCBpbnZva2UgTVAgc2VydmljZSB0byBwZXJmb3JtIENQVSBm ZWF0dXJlcw0KPiA+ICsgIGluaXRpYWxpemF0aW9uIG9uIEJTUC9BUHMgcGVyIHVzZXIgY29uZmln dXJhdGlvbi4NCj4gPiArDQo+ID4gKyAgQG5vdGUgVGhpcyBzZXJ2aWNlIGNvdWxkIGJlIGNhbGxl ZCBieSBCU1Agb25seS4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ID4gK0Nw dUZlYXR1cmVzSW5pdGlhbGl6ZSAoDQo+ID4gKyAgVk9JRA0KPiA+ICsgICkNCj4gPiArew0KPiA+ ICsgIENQVV9GRUFUVVJFU19EQVRBICAgICAgICAgICpDcHVGZWF0dXJlc0RhdGE7DQo+ID4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgT2xkQnNwTnVtYmVyOw0KPiA+ICsNCj4gPiArICBD cHVGZWF0dXJlc0RhdGEgPSBHZXRDcHVGZWF0dXJlc0RhdGEgKCk7DQo+ID4gKw0KPiA+ICsgIE9s ZEJzcE51bWJlciA9IEdldFByb2Nlc3NvckluZGV4KCk7DQo+ID4gKyAgQ3B1RmVhdHVyZXNEYXRh LT5Cc3BOdW1iZXIgPSBPbGRCc3BOdW1iZXI7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8g S25vd24gbGltaXRhdGlvbjogSW4gUEVJIHBoYXNlLCBDcHVGZWF0dXJlcyBkcml2ZXIgbm90DQo+ ID4gKyAgLy8gc3VwcG9ydCBhc3luYyBtb2RlIGV4ZWN1dGUgdGFza3MuIFNvIHNlbWFwaG9yZSB0 eXBlDQo+ID4gKyAgLy8gcmVnaXN0ZXIgY2FuJ3QgYmVlbiB1c2VkIGZvciB0aGlzIGluc3RhbmNl LCBtdXN0IHVzZQ0KPiA+ICsgIC8vIERYRSB0eXBlIGluc3RhbmNlLg0KPiA+ICsgIC8vDQo+ID4g Kw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gV2FrZXVwIGFsbCBBUHMgZm9yIHByb2dyYW1taW5nLg0K PiA+ICsgIC8vDQo+ID4gKyAgU3RhcnR1cEFQc1dvcmtlciAoU2V0UHJvY2Vzc29yUmVnaXN0ZXIs IE5VTEwpOw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUHJvZ3JhbW1pbmcgQlNQDQo+ID4gKyAgLy8N Cj4gPiArICBTZXRQcm9jZXNzb3JSZWdpc3RlciAoQ3B1RmVhdHVyZXNEYXRhKTsNCj4gPiArDQo+ ID4gKyAgLy8NCj4gPiArICAvLyBTd2l0Y2ggdG8gbmV3IEJTUCBpZiByZXF1aXJlZA0KPiA+ICsg IC8vDQo+ID4gKyAgaWYgKENwdUZlYXR1cmVzRGF0YS0+QnNwTnVtYmVyICE9IE9sZEJzcE51bWJl cikgew0KPiA+ICsgICAgU3dpdGNoTmV3QnNwIChDcHVGZWF0dXJlc0RhdGEtPkJzcE51bWJlcik7 DQo+ID4gKyAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+IGRpZmYgLS1naXQNCj4gYS9VZWZpQ3B1UGtn L0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi9QZWlSZWdpc3RlckNwdUZlYXR1cmVzTGli LmluDQo+IGYNCj4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi9Q ZWlSZWdpc3RlckNwdUZlYXR1cmVzTGliLmluDQo+IGYNCj4gPiBpbmRleCBmZGZlZjk4MjkzLi5l OTVmMDFkZjBiIDEwMDY0NA0KPiA+IC0tLQ0KPiBhL1VlZmlDcHVQa2cvTGlicmFyeS9SZWdpc3Rl ckNwdUZlYXR1cmVzTGliL1BlaVJlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIuaW4NCj4gZg0KPiA+ICsr Kw0KPiBiL1VlZmlDcHVQa2cvTGlicmFyeS9SZWdpc3RlckNwdUZlYXR1cmVzTGliL1BlaVJlZ2lz dGVyQ3B1RmVhdHVyZXNMaWIuaW4NCj4gZg0KPiA+IEBAIC00OSw2ICs0OSw3IEBADQo+ID4gICAg IFBlaVNlcnZpY2VzTGliDQo+ID4gICAgIFBlaVNlcnZpY2VzVGFibGVQb2ludGVyTGliDQo+ID4g ICAgIElvTGliDQo+ID4gKyAgTG9jYWxBcGljTGliDQo+ID4NCj4gPiAgIFtQcGlzXQ0KPiA+ICAg ICBnRWZpUGVpTXBTZXJ2aWNlc1BwaUd1aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIyBDT05TVU1FUw0KPiA+IGRpZmYgLS1naXQNCj4gYS9VZWZpQ3B1UGtn L0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi9SZWdpc3RlckNwdUZlYXR1cmVzLmgNCj4g Yi9VZWZpQ3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi9SZWdpc3RlckNwdUZl YXR1cmVzLmgNCj4gPiBpbmRleCBlZGQyNjY5MzRmLi4zOTQ1N2U5NzMwIDEwMDY0NA0KPiA+IC0t LSBhL1VlZmlDcHVQa2cvTGlicmFyeS9SZWdpc3RlckNwdUZlYXR1cmVzTGliL1JlZ2lzdGVyQ3B1 RmVhdHVyZXMuaA0KPiA+ICsrKyBiL1VlZmlDcHVQa2cvTGlicmFyeS9SZWdpc3RlckNwdUZlYXR1 cmVzTGliL1JlZ2lzdGVyQ3B1RmVhdHVyZXMuaA0KPiA+IEBAIC0yMyw2ICsyMyw3IEBADQo+ID4g ICAjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ID4gICAjaW5jbHVk ZSA8TGlicmFyeS9TeW5jaHJvbml6YXRpb25MaWIuaD4NCj4gPiAgICNpbmNsdWRlIDxMaWJyYXJ5 L0lvTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0xvY2FsQXBpY0xpYi5oPg0KPiA+DQo+ ID4gICAjaW5jbHVkZSA8QWNwaUNwdURhdGEuaD4NCj4gPg0KPiA+IEBAIC00NiwxNiArNDcsMjYg QEAgdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICAgICBDUFVfRkVBVFVSRV9JTklUSUFMSVpFICAgICAg IEluaXRpYWxpemVGdW5jOw0KPiA+ICAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICpC ZWZvcmVGZWF0dXJlQml0TWFzazsNCj4gPiAgICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAg ICAqQWZ0ZXJGZWF0dXJlQml0TWFzazsNCj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAg ICAgICpDb3JlQmVmb3JlRmVhdHVyZUJpdE1hc2s7DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAg ICAgICAgICAgICAqQ29yZUFmdGVyRmVhdHVyZUJpdE1hc2s7DQo+ID4gKyAgVUlOVDggICAgICAg ICAgICAgICAgICAgICAgICAqUGFja2FnZUJlZm9yZUZlYXR1cmVCaXRNYXNrOw0KPiA+ICsgIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgKlBhY2thZ2VBZnRlckZlYXR1cmVCaXRNYXNrOw0K PiA+ICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpDb25maWdEYXRhOw0KPiA+ICAg ICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZUFsbDsNCj4gPiAgICAgQk9PTEVB TiAgICAgICAgICAgICAgICAgICAgICBBZnRlckFsbDsNCj4gPiAgIH0gQ1BVX0ZFQVRVUkVTX0VO VFJZOw0KPiA+DQo+ID4gKy8vDQo+ID4gKy8vIEZsYWdzIHVzZWQgd2hlbiBwcm9ncmFtIHRoZSBy ZWdpc3Rlci4NCj4gPiArLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIHZvbGF0aWxl IFVJTlROICAgICAgICAgICBNZW1vcnlNYXBwZWRMb2NrOyAgICAgLy8gU3BpbmxvY2sgdXNlZCB0 byBwcm9ncmFtDQo+IG1taW8NCj4gPiArICB2b2xhdGlsZSBVSU5UMzIgICAgICAgICAgKlNlbWFw aG9yZUNvdW50OyAgICAgIC8vIFNlbWFwaG9yZSB1c2VkIHRvDQo+IHByb2dyYW0gc2VtYXBob3Jl Lg0KPiA+ICt9IFBST0dSQU1fQ1BVX1JFR0lTVEVSX0ZMQUdTOw0KPiA+ICsNCj4gPiAgIHR5cGVk ZWYgc3RydWN0IHsNCj4gPiAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgIEZlYXR1cmVzQ291 bnQ7DQo+ID4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICBCaXRNYXNrU2l6ZTsNCj4gPiAt ICBTUElOX0xPQ0sgICAgICAgICAgICAgICAgTXNyTG9jazsNCj4gPiAtICBTUElOX0xPQ0sgICAg ICAgICAgICAgICAgTWVtb3J5TWFwcGVkTG9jazsNCj4gPiAgICAgTElTVF9FTlRSWSAgICAgICAg ICAgICAgIEZlYXR1cmVMaXN0Ow0KPiA+DQo+ID4gICAgIENQVV9GRUFUVVJFU19JTklUX09SREVS ICAqSW5pdE9yZGVyOw0KPiA+IEBAIC02NCw5ICs3NSwxNCBAQCB0eXBlZGVmIHN0cnVjdCB7DQo+ ID4gICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAqQ29uZmlndXJhdGlvblBjZDsNCj4gPiAg ICAgVUlOVDggICAgICAgICAgICAgICAgICAgICpTZXR0aW5nUGNkOw0KPiA+DQo+ID4gKyAgVUlO VDMyICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ3B1czsNCj4gPiArICBBQ1BJX0NQVV9EQVRB ICAgICAgICAgICAgKkFjcGlDcHVEYXRhOw0KPiA+ICsNCj4gPiAgICAgQ1BVX1JFR0lTVEVSX1RB QkxFICAgICAgICpSZWdpc3RlclRhYmxlOw0KPiA+ICAgICBDUFVfUkVHSVNURVJfVEFCTEUgICAg ICAgKlByZVNtbVJlZ2lzdGVyVGFibGU7DQo+ID4gICAgIFVJTlROICAgICAgICAgICAgICAgICAg ICBCc3BOdW1iZXI7DQo+ID4gKw0KPiA+ICsgIFBST0dSQU1fQ1BVX1JFR0lTVEVSX0ZMQUdTICBD cHVGbGFnczsNCj4gPiAgIH0gQ1BVX0ZFQVRVUkVTX0RBVEE7DQo+ID4NCj4gPiAgICNkZWZpbmUg Q1BVX0ZFQVRVUkVfRU5UUllfRlJPTV9MSU5LKGEpIFwNCj4gPiBAQCAtMTE4LDEwICsxMzQsMTMg QEAgR2V0UHJvY2Vzc29ySW5mb3JtYXRpb24gKA0KPiA+DQo+ID4gICAgIEBwYXJhbVtpbl0gIFBy b2NlZHVyZSAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdG8gYmUgcnVu IG9uDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQg QVBzIG9mIHRoZSBzeXN0ZW0uDQo+ID4gKyAgQHBhcmFtW2luXSAgTXBFdmVudCAgICAgICAgICAg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBldmVudCB0byBiZSB1c2VkIGxhdGVyDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gY2hlY2sgd2hldGhlciBwcm9jZWR1 cmUgaGFzIGRvbmUuDQo+ID4gICAqKi8NCj4gPiAgIFZPSUQNCj4gPiAgIFN0YXJ0dXBBUHNXb3Jr ZXIgKA0KPiA+IC0gIElOICBFRklfQVBfUFJPQ0VEVVJFICAgICAgICAgICAgICAgICBQcm9jZWR1 cmUNCj4gPiArICBJTiAgRUZJX0FQX1BST0NFRFVSRSAgICAgICAgICAgICAgICAgUHJvY2VkdXJl LA0KPiA+ICsgIElOICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqTXBFdmVudA0K PiA+ICAgICApOw0KPiA+DQo+ID4gICAvKioNCj4gPiBAQCAtMTcwLDQgKzE4OSwzMCBAQCBEdW1w Q3B1RmVhdHVyZSAoDQo+ID4gICAgIElOIENQVV9GRUFUVVJFU19FTlRSWSAgKkNwdUZlYXR1cmUN Cj4gPiAgICAgKTsNCj4gPg0KPiA+ICsvKioNCj4gPiArICBSZXR1cm4gZmVhdHVyZSBkZXBlbmRl bmNlIHJlc3VsdC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQ3B1RmVhdHVyZSAgICAgICAg UG9pbnRlciB0byBDUFUgZmVhdHVyZS4NCj4gPiArICBAcGFyYW1baW5dICBCZWZvcmUgICAgICAg ICAgICBDaGVjayBiZWZvcmUgZGVwZW5kZW5jZSBvciBhZnRlci4NCj4gPiArDQo+ID4gKyAgQHJl dHZhbCAgICAgcmV0dXJuIHRoZSBkZXBlbmRlbmNlIHJlc3VsdC4NCj4gPiArKiovDQo+ID4gK0NQ VV9GRUFUVVJFX0RFUEVOREVOQ0VfVFlQRQ0KPiA+ICtEZXRlY3RGZWF0dXJlU2NvcGUgKA0KPiA+ ICsgIElOIENQVV9GRUFUVVJFU19FTlRSWSAgICAgICAgICpDcHVGZWF0dXJlLA0KPiA+ICsgIElO IEJPT0xFQU4gICAgICAgICAgICAgICAgICAgIEJlZm9yZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBQcm9ncmFtcyByZWdpc3RlcnMgZm9yIHRoZSBjYWxsaW5nIHByb2Nlc3Nv ci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luLG91dF0gQnVmZmVyICBUaGUgcG9pbnRlciB0byBw cml2YXRlIGRhdGEgYnVmZmVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJ QVBJDQo+ID4gK1NldFByb2Nlc3NvclJlZ2lzdGVyICgNCj4gPiArICBJTiBPVVQgVk9JRCAgICAg ICAgICAgICpCdWZmZXINCj4gPiArICApOw0KPiA+ICsNCj4gPiAgICNlbmRpZg0KPiA+IGRpZmYg LS1naXQNCj4gYS9VZWZpQ3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi9SZWdp c3RlckNwdUZlYXR1cmVzTGliLmMNCj4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJDcHVG ZWF0dXJlc0xpYi9SZWdpc3RlckNwdUZlYXR1cmVzTGliLmMNCj4gPiBpbmRleCBmYTdlMTA3ZTM5 Li5mOWUzMTc4ZGMxIDEwMDY0NA0KPiA+IC0tLQ0KPiBhL1VlZmlDcHVQa2cvTGlicmFyeS9SZWdp c3RlckNwdUZlYXR1cmVzTGliL1JlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIuYw0KPiA+ICsrKw0KPiBi L1VlZmlDcHVQa2cvTGlicmFyeS9SZWdpc3RlckNwdUZlYXR1cmVzTGliL1JlZ2lzdGVyQ3B1RmVh dHVyZXNMaWIuYw0KPiA+IEBAIC0xMTIsNiArMTEyLDMwMiBAQCBJc0JpdE1hc2tNYXRjaENoZWNr ICgNCj4gPiAgICAgcmV0dXJuIEZBTFNFOw0KPiA+ICAgfQ0KPiA+DQo+ID4gKy8qKg0KPiA+ICsg IFJldHVybiBmZWF0dXJlIGRlcGVuZGVuY2UgcmVzdWx0Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1b aW5dICBDcHVGZWF0dXJlICAgICAgICBQb2ludGVyIHRvIENQVSBmZWF0dXJlLg0KPiA+ICsgIEBw YXJhbVtpbl0gIEJlZm9yZSAgICAgICAgICAgIENoZWNrIGJlZm9yZSBkZXBlbmRlbmNlIG9yIGFm dGVyLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICByZXR1cm4gdGhlIGRlcGVuZGVuY2UgcmVz dWx0Lg0KPiA+ICsqKi8NCj4gPiArQ1BVX0ZFQVRVUkVfREVQRU5ERU5DRV9UWVBFDQo+ID4gK0Rl dGVjdEZlYXR1cmVTY29wZSAoDQo+ID4gKyAgSU4gQ1BVX0ZFQVRVUkVTX0VOVFJZICAgICAgICAg KkNwdUZlYXR1cmUsDQo+ID4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgQmVmb3Jl DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgaWYgKEJlZm9yZSkgew0KPiA+ICsgICAgaWYgKENw dUZlYXR1cmUtPlBhY2thZ2VCZWZvcmVGZWF0dXJlQml0TWFzayAhPSBOVUxMKSB7DQo+ID4gKyAg ICAgIHJldHVybiBQYWNrYWdlRGVwVHlwZTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBp ZiAoQ3B1RmVhdHVyZS0+Q29yZUJlZm9yZUZlYXR1cmVCaXRNYXNrICE9IE5VTEwpIHsNCj4gPiAr ICAgICAgcmV0dXJuIENvcmVEZXBUeXBlOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGlm IChDcHVGZWF0dXJlLT5CZWZvcmVGZWF0dXJlQml0TWFzayAhPSBOVUxMKSB7DQo+ID4gKyAgICAg IHJldHVybiBUaHJlYWREZXBUeXBlOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHJldHVy biBOb25lRGVwVHlwZTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChDcHVGZWF0dXJlLT5Q YWNrYWdlQWZ0ZXJGZWF0dXJlQml0TWFzayAhPSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gUGFj a2FnZURlcFR5cGU7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoQ3B1RmVhdHVyZS0+Q29y ZUFmdGVyRmVhdHVyZUJpdE1hc2sgIT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIENvcmVEZXBU eXBlOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKENwdUZlYXR1cmUtPkFmdGVyRmVhdHVy ZUJpdE1hc2sgIT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIFRocmVhZERlcFR5cGU7DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gTm9uZURlcFR5cGU7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgIENsZWFyIGRlcGVuZGVuY2UgZm9yIHRoZSBzcGVjaWZpZWQgdHlwZS4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQ3VycmVudEZlYXR1cmUgICAgIENwdSBmZWF0dXJl IG5lZWQgdG8gY2xlYXIuDQo+ID4gKyAgQHBhcmFtW2luXSAgQmVmb3JlICAgICAgICAgICAgIEJl Zm9yZSBvciBhZnRlciBkZXBlbmRlbmNlIHJlbGF0aW9uc2hpcC4NCj4gPiArDQo+ID4gKyoqLw0K PiA+ICtWT0lEDQo+ID4gK0NsZWFyRmVhdHVyZVNjb3BlICgNCj4gPiArICBJTiBDUFVfRkVBVFVS RVNfRU5UUlkgICAgICAgICAgICpDcHVGZWF0dXJlLA0KPiA+ICsgIElOIEJPT0xFQU4gICAgICAg ICAgICAgICAgICAgICAgQmVmb3JlDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgaWYgKEJlZm9y ZSkgew0KPiA+ICsgICAgaWYgKENwdUZlYXR1cmUtPkJlZm9yZUZlYXR1cmVCaXRNYXNrICE9IE5V TEwpIHsNCj4gPiArICAgICAgRnJlZVBvb2wgKENwdUZlYXR1cmUtPkJlZm9yZUZlYXR1cmVCaXRN YXNrKTsNCj4gPiArICAgICAgQ3B1RmVhdHVyZS0+QmVmb3JlRmVhdHVyZUJpdE1hc2sgPSBOVUxM Ow0KPiA+ICsgICAgfQ0KPiA+ICsgICAgaWYgKENwdUZlYXR1cmUtPkNvcmVCZWZvcmVGZWF0dXJl Qml0TWFzayAhPSBOVUxMKSB7DQo+ID4gKyAgICAgIEZyZWVQb29sIChDcHVGZWF0dXJlLT5Db3Jl QmVmb3JlRmVhdHVyZUJpdE1hc2spOw0KPiA+ICsgICAgICBDcHVGZWF0dXJlLT5Db3JlQmVmb3Jl RmVhdHVyZUJpdE1hc2sgPSBOVUxMOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgaWYgKENwdUZlYXR1 cmUtPlBhY2thZ2VCZWZvcmVGZWF0dXJlQml0TWFzayAhPSBOVUxMKSB7DQo+ID4gKyAgICAgIEZy ZWVQb29sIChDcHVGZWF0dXJlLT5QYWNrYWdlQmVmb3JlRmVhdHVyZUJpdE1hc2spOw0KPiA+ICsg ICAgICBDcHVGZWF0dXJlLT5QYWNrYWdlQmVmb3JlRmVhdHVyZUJpdE1hc2sgPSBOVUxMOw0KPiA+ ICsgICAgfQ0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBpZiAoQ3B1RmVhdHVyZS0+UGFja2Fn ZUFmdGVyRmVhdHVyZUJpdE1hc2sgIT0gTlVMTCkgew0KPiA+ICsgICAgICBGcmVlUG9vbCAoQ3B1 RmVhdHVyZS0+UGFja2FnZUFmdGVyRmVhdHVyZUJpdE1hc2spOw0KPiA+ICsgICAgICBDcHVGZWF0 dXJlLT5QYWNrYWdlQWZ0ZXJGZWF0dXJlQml0TWFzayA9IE5VTEw7DQo+ID4gKyAgICB9DQo+ID4g KyAgICBpZiAoQ3B1RmVhdHVyZS0+Q29yZUFmdGVyRmVhdHVyZUJpdE1hc2sgIT0gTlVMTCkgew0K PiA+ICsgICAgICBGcmVlUG9vbCAoQ3B1RmVhdHVyZS0+Q29yZUFmdGVyRmVhdHVyZUJpdE1hc2sp Ow0KPiA+ICsgICAgICBDcHVGZWF0dXJlLT5Db3JlQWZ0ZXJGZWF0dXJlQml0TWFzayA9IE5VTEw7 DQo+ID4gKyAgICB9DQo+ID4gKyAgICBpZiAoQ3B1RmVhdHVyZS0+QWZ0ZXJGZWF0dXJlQml0TWFz ayAhPSBOVUxMKSB7DQo+ID4gKyAgICAgIEZyZWVQb29sIChDcHVGZWF0dXJlLT5BZnRlckZlYXR1 cmVCaXRNYXNrKTsNCj4gPiArICAgICAgQ3B1RmVhdHVyZS0+QWZ0ZXJGZWF0dXJlQml0TWFzayA9 IE5VTEw7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBCYXNlIG9uIGRlcGVuZGVuY2UgcmVsYXRpb25zaGlwIHRvIGFzanVzdCBmZWF0dXJlIGRl cGVuZGVuY2UuDQo+ID4gKw0KPiA+ICsgIE9OTFkgd2hlbiB0aGUgZmVhdHVyZSBiZWZvcmUob3Ig YWZ0ZXIpIHRoZSBmaW5kIGZlYXR1cmUgYWxzbyBoYXMNCj4gPiArICBkZXBlbmRlbmNlIHdpdGgg dGhlIGZpbmQgZmVhdHVyZS4gSW4gdGhpcyBjYXNlLCBkcml2ZXIgbmVlZCB0byBiYXNlDQo+ID4g KyAgb24gZGVwZW5kY2UgcmVsYXRpb25zaGlwIHRvIGRlY2lkZSBob3cgdG8gaW5zZXJ0IGN1cnJl bnQgZmVhdHVyZSBhbmQNCj4gPiArICBhZGp1c3QgdGhlIGZlYXR1cmUgZGVwZW5kZW5jZS4NCj4g PiArDQo+ID4gKyAgQHBhcmFtW2luXSAgUHJldmlvdXNGZWF0dXJlICAgIENQVSBmZWF0dXJlIGN1 cnJlbnQgYmVmb3JlIHRoZSBmaW5kIG9uZS4NCj4gPiArICBAcGFyYW1baW5dICBDdXJyZW50RmVh dHVyZSAgICAgQ3B1IGZlYXR1cmUgbmVlZCB0byBhZGp1c3QuDQo+ID4gKyAgQHBhcmFtW2luXSAg QmVmb3JlICAgICAgICAgICAgIEJlZm9yZSBvciBhZnRlciBkZXBlbmRlbmNlIHJlbGF0aW9uc2hp cC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgIFRSVUUgICBtZWFucyB0aGUgY3VycmVudCBmZWF0 dXJlIGRlcGVuZGVuY2UgaGFzIGJlZW4NCj4gYWRqdXN0ZWQuDQo+ID4gKw0KPiA+ICsgIEByZXR2 YWwgICBGQUxTRSAgbWVhbnMgdGhlIHByZXZpb3VzIGZlYXR1cmUgZGVwZW5kZW5jZSBoYXMgYmVl bg0KPiBhZGp1c3RlZC4NCj4gPiArICAgICAgICAgICAgICAgICAgIG9yIHByZXZpb3VzIGZlYXR1 cmUgaGFzIG5vIGRlcGVuZGVuY2Ugd2l0aCB0aGUgZmluZCBvbmUuDQo+ID4gKw0KPiA+ICsqKi8N Cj4gPiArQk9PTEVBTg0KPiA+ICtBZGp1c3RGZWF0dXJlc0RlcGVuZGVuY2UgKA0KPiA+ICsgIElO IE9VVCBDUFVfRkVBVFVSRVNfRU5UUlkgICAgICAgICAqUHJldmlvdXNGZWF0dXJlLA0KPiA+ICsg IElOIE9VVCBDUFVfRkVBVFVSRVNfRU5UUlkgICAgICAgICAqQ3VycmVudEZlYXR1cmUsDQo+ID4g KyAgSU4gICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgIEJlZm9yZQ0KPiA+ICsgICkNCj4g PiArew0KPiA+ICsgIENQVV9GRUFUVVJFX0RFUEVOREVOQ0VfVFlQRSAgICAgICAgICAgIFByZURl cGVuZFR5cGU7DQo+ID4gKyAgQ1BVX0ZFQVRVUkVfREVQRU5ERU5DRV9UWVBFICAgICAgICAgICAg Q3VycmVudERlcGVuZFR5cGU7DQo+ID4gKw0KPiA+ICsgIFByZURlcGVuZFR5cGUgICAgID0gRGV0 ZWN0RmVhdHVyZVNjb3BlKFByZXZpb3VzRmVhdHVyZSwgQmVmb3JlKTsNCj4gPiArICBDdXJyZW50 RGVwZW5kVHlwZSA9IERldGVjdEZlYXR1cmVTY29wZShDdXJyZW50RmVhdHVyZSwgQmVmb3JlKTsN Cj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBJZiBwcmV2aW91cyBmZWF0dXJlIGhhcyBubyBk ZXBlbmRlbmNlIHdpdGggdGhlIGZpbmQgZmVhdHVlLg0KPiA+ICsgIC8vIHJldHVybiBGQUxTRS4N Cj4gPiArICAvLw0KPiA+ICsgIGlmIChQcmVEZXBlbmRUeXBlID09IE5vbmVEZXBUeXBlKSB7DQo+ ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsg IC8vIElmIGJvdGggZmVhdHVyZSBoYXZlIGRlcGVuZGVuY2UsIGtlZXAgdGhlIG9uZSB3aGljaCBu ZWVkcyB1c2UNCj4gbW9yZQ0KPiA+ICsgIC8vIHByb2Nlc3NvcnMgYW5kIGNsZWFyIHRoZSBkZXBl bmRlbmNlIGZvciB0aGUgb3RoZXIgb25lLg0KPiA+ICsgIC8vDQo+ID4gKyAgaWYgKFByZURlcGVu ZFR5cGUgPj0gQ3VycmVudERlcGVuZFR5cGUpIHsNCj4gPiArICAgIENsZWFyRmVhdHVyZVNjb3Bl IChDdXJyZW50RmVhdHVyZSwgQmVmb3JlKTsNCj4gPiArICAgIHJldHVybiBUUlVFOw0KPiA+ICsg IH0gZWxzZSB7DQo+ID4gKyAgICBDbGVhckZlYXR1cmVTY29wZSAoUHJldmlvdXNGZWF0dXJlLCBC ZWZvcmUpOw0KPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgQmFzZSBvbiBkZXBlbmRlbmNlIHJlbGF0aW9uc2hpcCB0byBhc2p1 c3QgZmVhdHVyZSBvcmRlci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRmVhdHVyZUxpc3Qg ICAgICAgIFBvaW50ZXIgdG8gQ1BVIGZlYXR1cmUgbGlzdA0KPiA+ICsgIEBwYXJhbVtpbl0gIEZp bmRFbnRyeSAgICAgICAgICBUaGUgZW50cnkgdGhpcyBmZWF0dXJlIGRlcGVuZCBvbi4NCj4gPiAr ICBAcGFyYW1baW5dICBDdXJyZW50RW50cnkgICAgICAgVGhlIGVudHJ5IGZvciB0aGlzIGZlYXR1 cmUuDQo+ID4gKyAgQHBhcmFtW2luXSAgQmVmb3JlICAgICAgICAgICAgIEJlZm9yZSBvciBhZnRl ciBkZXBlbmRlbmNlIHJlbGF0aW9uc2hpcC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ ID4gK0FkanVzdEVudHJ5ICgNCj4gPiArICBJTiAgICAgIExJU1RfRU5UUlkgICAgICAgICAgICAg ICAgKkZlYXR1cmVMaXN0LA0KPiA+ICsgIElOIE9VVCAgTElTVF9FTlRSWSAgICAgICAgICAgICAg ICAqRmluZEVudHJ5LA0KPiA+ICsgIElOIE9VVCAgTElTVF9FTlRSWSAgICAgICAgICAgICAgICAq Q3VycmVudEVudHJ5LA0KPiA+ICsgIElOICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICBC ZWZvcmUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBMSVNUX0VOVFJZICAgICAgICAgICAgICAg ICpQcmV2aW91c0VudHJ5Ow0KPiA+ICsgIENQVV9GRUFUVVJFU19FTlRSWSAgICAgICAgKlByZXZp b3VzRmVhdHVyZTsNCj4gPiArICBDUFVfRkVBVFVSRVNfRU5UUlkgICAgICAgICpDdXJyZW50RmVh dHVyZTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBGb3IgQ1BVIGZlYXR1cmUgd2hpY2gg aGFzIGNvcmUgb3IgcGFja2FnZSB0eXBlIGRlcGVuZGVuY2UsIGxhdGVyDQo+IGNvZGUgbmVlZCB0 byBpbnNlcnQNCj4gPiArICAvLyBBY3F1aXJlU3BpbkxvY2svUmVsZWFzZVNwaW5Mb2NrIGxvZ2lj IHRvIHNlcXVlbmN5IHRoZSBleGVjdXRlIG9yZGVyLg0KPiA+ICsgIC8vIFNvIGlmIGRyaXZlciBm aW5kcyBib3RoIGZlYXR1cmUgQSBhbmQgQiBuZWVkIHRvIGV4ZWN1dGUgYmVmb3JlIGZlYXR1cmUN Cj4gQywgZHJpdmVyIHdpbGwNCj4gPiArICAvLyBiYXNlIG9uIGRlcGVuZGVuY2UgdHlwZSBvZiBm ZWF0dXJlIEEgYW5kIEIgdG8gdXBkYXRlIHRoZSBsb2dpYyBoZXJlLg0KPiA+ICsgIC8vIEZvciBl eGFtcGxlLCBmZWF0dXJlIEEgaGFzIHBhY2thZ2UgdHlwZSBkZXBlbmRlbmNlIGFuZCBmZWF0dXJl IEINCj4gaGFzIGNvcmUgdHlwZSBkZXBlbmRlbmNlLA0KPiA+ICsgIC8vIGJlY2F1c2UgcGFja2Fn ZSB0eXBlIGRlcGVuZGVuY2UgbmVlZCB0byB3YWl0IGZvciBtb3JlIHByb2Nlc3NvcnMNCj4gd2hp Y2ggaGFzIHN0cm9uZyBkZXBlbmRlbmNlDQo+ID4gKyAgLy8gdGhhbiBjb3JlIHR5cGUgZGVwZW5k ZW5jZS4gU28gZHJpdmVyIHdpbGwgYWRqdXN0IHRoZSBmZWF0dXJlIG9yZGVyIHRvDQo+IEIgLT4g QSAtPiBDLiBhbmQgZHJpdmVyDQo+ID4gKyAgLy8gd2lsbCByZW1vdmUgdGhlIGZlYXR1cmUgZGVw ZW5kZW5jZSBpbiBmZWF0dXJlIEIuDQo+ID4gKyAgLy8gRHJpdmVyIGp1c3QgbmVlZHMgdG8gbWFr ZSBzdXJlIGJlZm9yZSBmZWF0dXJlIEMgYmVlbiBleGVjdXRlZCwNCj4gZmVhdHVyZSBBIGhhcyBm aW5pc2hlZCBpdHMgdGFzaw0KPiA+ICsgIC8vIGluIGFsbCBhbGwgdGhyZWFkLiBGZWF0dXJlIEEg ZmluaXNoZWQgaW4gYWxsIHRocmVhZHMgYWxzbyBtZWFucyBmZWF0dXJlIEINCj4gaGF2ZSBmaW5z aGVkIGluIGFsbA0KPiA+ICsgIC8vIHRocmVhZHMuDQo+ID4gKyAgLy8NCj4gPiArICBpZiAoQmVm b3JlKSB7DQo+ID4gKyAgICBQcmV2aW91c0VudHJ5ID0gR2V0UHJldmlvdXNOb2RlIChGZWF0dXJl TGlzdCwgRmluZEVudHJ5KTsNCj4gPiArICB9IGVsc2Ugew0KPiA+DQo+ID4gKyAgICBQcmV2aW91 c0VudHJ5ID0gR2V0TmV4dE5vZGUgKEZlYXR1cmVMaXN0LCBGaW5kRW50cnkpOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgQ3VycmVudEZlYXR1cmUgID0gQ1BVX0ZFQVRVUkVfRU5UUllfRlJPTV9M SU5LIChDdXJyZW50RW50cnkpOw0KPiA+ICsgIFJlbW92ZUVudHJ5TGlzdCAoQ3VycmVudEVudHJ5 KTsNCj4gPiArDQo+ID4gKyAgaWYgKElzTnVsbCAoRmVhdHVyZUxpc3QsIFByZXZpb3VzRW50cnkp KSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gSWYgbm90IGV4aXN0IHRoZSBwcmV2aW91cyBv ciBuZXh0IGVudHJ5LCBqdXN0IGluc2VydCB0aGUgY3VycmVudCBlbnRyeS4NCj4gPiArICAgIC8v DQo+ID4gKyAgICBpZiAoQmVmb3JlKSB7DQo+ID4gKyAgICAgIEluc2VydFRhaWxMaXN0IChGaW5k RW50cnksIEN1cnJlbnRFbnRyeSk7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBJbnNl cnRIZWFkTGlzdCAoRmluZEVudHJ5LCBDdXJyZW50RW50cnkpOw0KPiA+ICsgICAgfQ0KPiA+ICsg IH0gZWxzZSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gSWYgZXhpc3QgdGhlIHByZXZpb3Vz IG9yIG5leHQgZW50cnksIG5lZWQgdG8gY2hlY2sgaXQgYmVmb3JlIGluc2VydA0KPiBjdXJlbnQg ZW50cnkuDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgUHJldmlvdXNGZWF0dXJlID0gQ1BVX0ZFQVRV UkVfRU5UUllfRlJPTV9MSU5LIChQcmV2aW91c0VudHJ5KTsNCj4gPiArDQo+ID4gKyAgICBpZiAo QWRqdXN0RmVhdHVyZXNEZXBlbmRlbmNlIChQcmV2aW91c0ZlYXR1cmUsIEN1cnJlbnRGZWF0dXJl LA0KPiBCZWZvcmUpKSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIFJldHVybiBUUlVF IG1lYW5zIGN1cnJlbnQgZmVhdHVyZSBkZXBlbmRlbmNlIGhhcyBiZWVuIGNsZWFyZWQNCj4gYW5k IHRoZSBwcmV2aW91cw0KPiA+ICsgICAgICAvLyBmZWF0dXJlIGRlcGVuZGVuY2UgaGFzIGJlZW4g a2VwdCBhbmQgdXNlZC4gU28gaW5zZXJ0IGN1cnJlbnQNCj4gZmVhdHVyZSBiZWZvcmUgKG9yIGFm dGVyKQ0KPiA+ICsgICAgICAvLyB0aGUgcHJldmlvdXMgZmVhdHVyZS4NCj4gPiArICAgICAgLy8N Cj4gPiArICAgICAgaWYgKEJlZm9yZSkgew0KPiA+ICsgICAgICAgIEluc2VydFRhaWxMaXN0IChQ cmV2aW91c0VudHJ5LCBDdXJyZW50RW50cnkpOw0KPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsg ICAgICAgIEluc2VydEhlYWRMaXN0IChQcmV2aW91c0VudHJ5LCBDdXJyZW50RW50cnkpOw0KPiA+ ICsgICAgICB9DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBpZiAoQmVmb3JlKSB7DQo+ ID4gKyAgICAgICAgSW5zZXJ0VGFpbExpc3QgKEZpbmRFbnRyeSwgQ3VycmVudEVudHJ5KTsNCj4g PiArICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICBJbnNlcnRIZWFkTGlzdCAoRmluZEVudHJ5 LCBDdXJyZW50RW50cnkpOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ ICt9DQo+ID4NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENoZWNrcyBhbmQgYWRqdXN0cyBjdXJy ZW50IENQVSBmZWF0dXJlcyBwZXIgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAuDQo+ID4gKw0KPiA+ ICsgIEBwYXJhbVtpbl0gIEZlYXR1cmVMaXN0ICAgICAgICBQb2ludGVyIHRvIENQVSBmZWF0dXJl IGxpc3QNCj4gPiArICBAcGFyYW1baW5dICBDdXJyZW50RW50cnkgICAgICAgUG9pbnRlciB0byBj dXJyZW50IGNoZWNrZWQgQ1BVIGZlYXR1cmUNCj4gPiArICBAcGFyYW1baW5dICBGZWF0dXJlTWFz ayAgICAgICAgVGhlIGZlYXR1cmUgYml0IG1hc2suDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAg IHJldHVybiBTd2FwcGVkIGluZm8uDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0luc2Vy dFRvQmVmb3JlRW50cnkgKA0KPiA+ICsgIElOIExJU1RfRU5UUlkgICAgICAgICAgICAgICpGZWF0 dXJlTGlzdCwNCj4gPiArICBJTiBMSVNUX0VOVFJZICAgICAgICAgICAgICAqQ3VycmVudEVudHJ5 LA0KPiA+ICsgIElOIFVJTlQ4ICAgICAgICAgICAgICAgICAgICpGZWF0dXJlTWFzaw0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIExJU1RfRU5UUlkgICAgICAgICAgICAgICAgICpDaGVja0VudHJ5 Ow0KPiA+ICsgIENQVV9GRUFUVVJFU19FTlRSWSAgICAgICAgICpDaGVja0ZlYXR1cmU7DQo+ID4g KyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgU3dhcHBlZDsNCj4gPiArDQo+ID4gKyAgU3dh cHBlZCA9IEZBTFNFOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIENoZWNrIGFsbCBmZWF0 dXJlcyBkaXNwYXRjaGVkIGJlZm9yZSB0aGlzIGVudHJ5DQo+ID4gKyAgLy8NCj4gPiArICBDaGVj a0VudHJ5ID0gR2V0Rmlyc3ROb2RlIChGZWF0dXJlTGlzdCk7DQo+ID4gKyAgd2hpbGUgKENoZWNr RW50cnkgIT0gQ3VycmVudEVudHJ5KSB7DQo+ID4gKyAgICBDaGVja0ZlYXR1cmUgPSBDUFVfRkVB VFVSRV9FTlRSWV9GUk9NX0xJTksgKENoZWNrRW50cnkpOw0KPiA+ICsgICAgaWYgKElzQml0TWFz a01hdGNoQ2hlY2sgKENoZWNrRmVhdHVyZS0+RmVhdHVyZU1hc2ssIEZlYXR1cmVNYXNrKSkNCj4g ew0KPiA+ICsgICAgICBBZGp1c3RFbnRyeSAoRmVhdHVyZUxpc3QsIENoZWNrRW50cnksIEN1cnJl bnRFbnRyeSwgVFJVRSk7DQo+ID4gKyAgICAgIFN3YXBwZWQgPSBUUlVFOw0KPiA+ICsgICAgICBi cmVhazsNCj4gPiArICAgIH0NCj4gPiArICAgIENoZWNrRW50cnkgPSBDaGVja0VudHJ5LT5Gb3J3 YXJkTGluazsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBTd2FwcGVkOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDaGVja3MgYW5kIGFkanVzdHMgY3VycmVudCBDUFUg ZmVhdHVyZXMgcGVyIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwLg0KPiA+ICsNCj4gPiArICBAcGFy YW1baW5dICBGZWF0dXJlTGlzdCAgICAgICAgUG9pbnRlciB0byBDUFUgZmVhdHVyZSBsaXN0DQo+ ID4gKyAgQHBhcmFtW2luXSAgQ3VycmVudEVudHJ5ICAgICAgIFBvaW50ZXIgdG8gY3VycmVudCBj aGVja2VkIENQVSBmZWF0dXJlDQo+ID4gKyAgQHBhcmFtW2luXSAgRmVhdHVyZU1hc2sgICAgICAg IFRoZSBmZWF0dXJlIGJpdCBtYXNrLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICByZXR1cm4g U3dhcHBlZCBpbmZvLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtJbnNlcnRUb0FmdGVy RW50cnkgKA0KPiA+ICsgIElOIExJU1RfRU5UUlkgICAgICAgICAgICAgICpGZWF0dXJlTGlzdCwN Cj4gPiArICBJTiBMSVNUX0VOVFJZICAgICAgICAgICAgICAqQ3VycmVudEVudHJ5LA0KPiA+ICsg IElOIFVJTlQ4ICAgICAgICAgICAgICAgICAgICpGZWF0dXJlTWFzaw0KPiA+ICsgICkNCj4gPiAr ew0KPiA+ICsgIExJU1RfRU5UUlkgICAgICAgICAgICAgICAgICpDaGVja0VudHJ5Ow0KPiA+ICsg IENQVV9GRUFUVVJFU19FTlRSWSAgICAgICAgICpDaGVja0ZlYXR1cmU7DQo+ID4gKyAgQk9PTEVB TiAgICAgICAgICAgICAgICAgICAgU3dhcHBlZDsNCj4gPiArDQo+ID4gKyAgU3dhcHBlZCA9IEZB TFNFOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIENoZWNrIGFsbCBmZWF0dXJlcyBkaXNw YXRjaGVkIGFmdGVyIHRoaXMgZW50cnkNCj4gPiArICAvLw0KPiA+ICsgIENoZWNrRW50cnkgPSBH ZXROZXh0Tm9kZSAoRmVhdHVyZUxpc3QsIEN1cnJlbnRFbnRyeSk7DQo+ID4gKyAgd2hpbGUgKCFJ c051bGwgKEZlYXR1cmVMaXN0LCBDaGVja0VudHJ5KSkgew0KPiA+ICsgICAgQ2hlY2tGZWF0dXJl ID0gQ1BVX0ZFQVRVUkVfRU5UUllfRlJPTV9MSU5LIChDaGVja0VudHJ5KTsNCj4gPiArICAgIGlm IChJc0JpdE1hc2tNYXRjaENoZWNrIChDaGVja0ZlYXR1cmUtPkZlYXR1cmVNYXNrLCBGZWF0dXJl TWFzaykpDQo+IHsNCj4gPiArICAgICAgQWRqdXN0RW50cnkgKEZlYXR1cmVMaXN0LCBDaGVja0Vu dHJ5LCBDdXJyZW50RW50cnksIEZBTFNFKTsNCj4gPiArICAgICAgU3dhcHBlZCA9IFRSVUU7DQo+ ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgQ2hlY2tFbnRyeSA9IENoZWNr RW50cnktPkZvcndhcmRMaW5rOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIFN3YXBw ZWQ7DQo+ID4gK30NCj4gPiArDQo+ID4gICAvKioNCj4gPiAgICAgQ2hlY2tzIGFuZCBhZGp1c3Rz IENQVSBmZWF0dXJlcyBvcmRlciBwZXIgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAuDQo+ID4NCj4g PiBAQCAtMTI4LDExICs0MjQsMTMgQEAgQ2hlY2tDcHVGZWF0dXJlc0RlcGVuZGVuY3kgKA0KPiA+ ICAgICBDUFVfRkVBVFVSRVNfRU5UUlkgICAgICAgICAqQ2hlY2tGZWF0dXJlOw0KPiA+ICAgICBC T09MRUFOICAgICAgICAgICAgICAgICAgICBTd2FwcGVkOw0KPiA+ICAgICBMSVNUX0VOVFJZICAg ICAgICAgICAgICAgICAqVGVtcEVudHJ5Ow0KPiA+ICsgIExJU1RfRU5UUlkgICAgICAgICAgICAg ICAgICpOZXh0RW50cnk7DQo+ID4NCj4gPiAgICAgQ3VycmVudEVudHJ5ID0gR2V0Rmlyc3ROb2Rl IChGZWF0dXJlTGlzdCk7DQo+ID4gICAgIHdoaWxlICghSXNOdWxsIChGZWF0dXJlTGlzdCwgQ3Vy cmVudEVudHJ5KSkgew0KPiA+ICAgICAgIFN3YXBwZWQgPSBGQUxTRTsNCj4gPiAgICAgICBDcHVG ZWF0dXJlID0gQ1BVX0ZFQVRVUkVfRU5UUllfRlJPTV9MSU5LIChDdXJyZW50RW50cnkpOw0KPiA+ ICsgICAgTmV4dEVudHJ5ID0gQ3VycmVudEVudHJ5LT5Gb3J3YXJkTGluazsNCj4gPiAgICAgICBp ZiAoQ3B1RmVhdHVyZS0+QmVmb3JlQWxsKSB7DQo+ID4gICAgICAgICAvLw0KPiA+ICAgICAgICAg Ly8gQ2hlY2sgYWxsIGZlYXR1cmVzIGRpc3BhdGNoZWQgYmVmb3JlIHRoaXMgZW50cnkNCj4gPiBA QCAtMTUzLDYgKzQ1MSw3IEBAIENoZWNrQ3B1RmVhdHVyZXNEZXBlbmRlbmN5ICgNCj4gPiAgICAg ICAgICAgQ2hlY2tFbnRyeSA9IENoZWNrRW50cnktPkZvcndhcmRMaW5rOw0KPiA+ICAgICAgICAg fQ0KPiA+ICAgICAgICAgaWYgKFN3YXBwZWQpIHsNCj4gPiArICAgICAgICBDdXJyZW50RW50cnkg PSBOZXh0RW50cnk7DQo+ID4gICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICAgICAgICAgfQ0KPiA+ ICAgICAgIH0NCj4gPiBAQCAtMTc5LDYwICs0NzgsNTkgQEAgQ2hlY2tDcHVGZWF0dXJlc0RlcGVu ZGVuY3kgKA0KPiA+ICAgICAgICAgICBDaGVja0VudHJ5ID0gQ2hlY2tFbnRyeS0+Rm9yd2FyZExp bms7DQo+ID4gICAgICAgICB9DQo+ID4gICAgICAgICBpZiAoU3dhcHBlZCkgew0KPiA+ICsgICAg ICAgIEN1cnJlbnRFbnRyeSA9IE5leHRFbnRyeTsNCj4gPiAgICAgICAgICAgY29udGludWU7DQo+ ID4gICAgICAgICB9DQo+ID4gICAgICAgfQ0KPiA+DQo+ID4gICAgICAgaWYgKENwdUZlYXR1cmUt PkJlZm9yZUZlYXR1cmVCaXRNYXNrICE9IE5VTEwpIHsNCj4gPiAtICAgICAgLy8NCj4gPiAtICAg ICAgLy8gQ2hlY2sgYWxsIGZlYXR1cmVzIGRpc3BhdGNoZWQgYmVmb3JlIHRoaXMgZW50cnkNCj4g PiAtICAgICAgLy8NCj4gPiAtICAgICAgQ2hlY2tFbnRyeSA9IEdldEZpcnN0Tm9kZSAoRmVhdHVy ZUxpc3QpOw0KPiA+IC0gICAgICB3aGlsZSAoQ2hlY2tFbnRyeSAhPSBDdXJyZW50RW50cnkpIHsN Cj4gPiAtICAgICAgICBDaGVja0ZlYXR1cmUgPSBDUFVfRkVBVFVSRV9FTlRSWV9GUk9NX0xJTksg KENoZWNrRW50cnkpOw0KPiA+IC0gICAgICAgIGlmIChJc0JpdE1hc2tNYXRjaENoZWNrIChDaGVj a0ZlYXR1cmUtPkZlYXR1cmVNYXNrLCBDcHVGZWF0dXJlLQ0KPiA+QmVmb3JlRmVhdHVyZUJpdE1h c2spKSB7DQo+ID4gLSAgICAgICAgICAvLw0KPiA+IC0gICAgICAgICAgLy8gSWYgdGhlcmUgaXMg ZGVwZW5kZW5jeSwgc3dhcCB0aGVtDQo+ID4gLSAgICAgICAgICAvLw0KPiA+IC0gICAgICAgICAg UmVtb3ZlRW50cnlMaXN0IChDdXJyZW50RW50cnkpOw0KPiA+IC0gICAgICAgICAgSW5zZXJ0VGFp bExpc3QgKENoZWNrRW50cnksIEN1cnJlbnRFbnRyeSk7DQo+ID4gLSAgICAgICAgICBTd2FwcGVk ID0gVFJVRTsNCj4gPiAtICAgICAgICAgIGJyZWFrOw0KPiA+IC0gICAgICAgIH0NCj4gPiAtICAg ICAgICBDaGVja0VudHJ5ID0gQ2hlY2tFbnRyeS0+Rm9yd2FyZExpbms7DQo+ID4gLSAgICAgIH0N Cj4gPiArICAgICAgU3dhcHBlZCA9IEluc2VydFRvQmVmb3JlRW50cnkgKEZlYXR1cmVMaXN0LCBD dXJyZW50RW50cnksDQo+IENwdUZlYXR1cmUtPkJlZm9yZUZlYXR1cmVCaXRNYXNrKTsNCj4gPiAg ICAgICAgIGlmIChTd2FwcGVkKSB7DQo+ID4gKyAgICAgICAgQ3VycmVudEVudHJ5ID0gTmV4dEVu dHJ5Ow0KPiA+ICAgICAgICAgICBjb250aW51ZTsNCj4gPiAgICAgICAgIH0NCj4gPiAgICAgICB9 DQo+ID4NCj4gPiAgICAgICBpZiAoQ3B1RmVhdHVyZS0+QWZ0ZXJGZWF0dXJlQml0TWFzayAhPSBO VUxMKSB7DQo+ID4gLSAgICAgIC8vDQo+ID4gLSAgICAgIC8vIENoZWNrIGFsbCBmZWF0dXJlcyBk aXNwYXRjaGVkIGFmdGVyIHRoaXMgZW50cnkNCj4gPiAtICAgICAgLy8NCj4gPiAtICAgICAgQ2hl Y2tFbnRyeSA9IEdldE5leHROb2RlIChGZWF0dXJlTGlzdCwgQ3VycmVudEVudHJ5KTsNCj4gPiAt ICAgICAgd2hpbGUgKCFJc051bGwgKEZlYXR1cmVMaXN0LCBDaGVja0VudHJ5KSkgew0KPiA+IC0g ICAgICAgIENoZWNrRmVhdHVyZSA9IENQVV9GRUFUVVJFX0VOVFJZX0ZST01fTElOSyAoQ2hlY2tF bnRyeSk7DQo+ID4gLSAgICAgICAgaWYgKElzQml0TWFza01hdGNoQ2hlY2sgKENoZWNrRmVhdHVy ZS0+RmVhdHVyZU1hc2ssIENwdUZlYXR1cmUtDQo+ID5BZnRlckZlYXR1cmVCaXRNYXNrKSkgew0K PiA+IC0gICAgICAgICAgLy8NCj4gPiAtICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGRlcGVuZGVu Y3ksIHN3YXAgdGhlbQ0KPiA+IC0gICAgICAgICAgLy8NCj4gPiAtICAgICAgICAgIFRlbXBFbnRy eSA9IEdldE5leHROb2RlIChGZWF0dXJlTGlzdCwgQ3VycmVudEVudHJ5KTsNCj4gPiAtICAgICAg ICAgIFJlbW92ZUVudHJ5TGlzdCAoQ3VycmVudEVudHJ5KTsNCj4gPiAtICAgICAgICAgIEluc2Vy dEhlYWRMaXN0IChDaGVja0VudHJ5LCBDdXJyZW50RW50cnkpOw0KPiA+IC0gICAgICAgICAgQ3Vy cmVudEVudHJ5ID0gVGVtcEVudHJ5Ow0KPiA+IC0gICAgICAgICAgU3dhcHBlZCA9IFRSVUU7DQo+ ID4gLSAgICAgICAgICBicmVhazsNCj4gPiAtICAgICAgICB9DQo+ID4gLSAgICAgICAgQ2hlY2tF bnRyeSA9IENoZWNrRW50cnktPkZvcndhcmRMaW5rOw0KPiA+ICsgICAgICBTd2FwcGVkID0gSW5z ZXJ0VG9BZnRlckVudHJ5IChGZWF0dXJlTGlzdCwgQ3VycmVudEVudHJ5LCBDcHVGZWF0dXJlLQ0K PiA+QWZ0ZXJGZWF0dXJlQml0TWFzayk7DQo+ID4gKyAgICAgIGlmIChTd2FwcGVkKSB7DQo+ID4g KyAgICAgICAgQ3VycmVudEVudHJ5ID0gTmV4dEVudHJ5Ow0KPiA+ICsgICAgICAgIGNvbnRpbnVl Ow0KPiA+ICAgICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGlmIChDcHVGZWF0 dXJlLT5Db3JlQmVmb3JlRmVhdHVyZUJpdE1hc2sgIT0gTlVMTCkgew0KPiA+ICsgICAgICBTd2Fw cGVkID0gSW5zZXJ0VG9CZWZvcmVFbnRyeSAoRmVhdHVyZUxpc3QsIEN1cnJlbnRFbnRyeSwNCj4g Q3B1RmVhdHVyZS0+Q29yZUJlZm9yZUZlYXR1cmVCaXRNYXNrKTsNCj4gPiAgICAgICAgIGlmIChT d2FwcGVkKSB7DQo+ID4gKyAgICAgICAgQ3VycmVudEVudHJ5ID0gTmV4dEVudHJ5Ow0KPiA+ICAg ICAgICAgICBjb250aW51ZTsNCj4gPiAgICAgICAgIH0NCj4gPiAgICAgICB9DQo+ID4gLSAgICAv Lw0KPiA+IC0gICAgLy8gTm8gc3dhcCBoYXBwZW5lZCwgY2hlY2sgdGhlIG5leHQgZmVhdHVyZQ0K PiA+IC0gICAgLy8NCj4gPiArDQo+ID4gKyAgICBpZiAoQ3B1RmVhdHVyZS0+Q29yZUFmdGVyRmVh dHVyZUJpdE1hc2sgIT0gTlVMTCkgew0KPiA+ICsgICAgICBTd2FwcGVkID0gSW5zZXJ0VG9BZnRl ckVudHJ5IChGZWF0dXJlTGlzdCwgQ3VycmVudEVudHJ5LCBDcHVGZWF0dXJlLQ0KPiA+Q29yZUFm dGVyRmVhdHVyZUJpdE1hc2spOw0KPiA+ICsgICAgICBpZiAoU3dhcHBlZCkgew0KPiA+ICsgICAg ICAgIEN1cnJlbnRFbnRyeSA9IE5leHRFbnRyeTsNCj4gPiArICAgICAgICBjb250aW51ZTsNCj4g PiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGlmIChDcHVGZWF0dXJlLT5Q YWNrYWdlQmVmb3JlRmVhdHVyZUJpdE1hc2sgIT0gTlVMTCkgew0KPiA+ICsgICAgICBTd2FwcGVk ID0gSW5zZXJ0VG9CZWZvcmVFbnRyeSAoRmVhdHVyZUxpc3QsIEN1cnJlbnRFbnRyeSwNCj4gQ3B1 RmVhdHVyZS0+UGFja2FnZUJlZm9yZUZlYXR1cmVCaXRNYXNrKTsNCj4gPiArICAgICAgaWYgKFN3 YXBwZWQpIHsNCj4gPiArICAgICAgICBDdXJyZW50RW50cnkgPSBOZXh0RW50cnk7DQo+ID4gKyAg ICAgICAgY29udGludWU7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAg ICBpZiAoQ3B1RmVhdHVyZS0+UGFja2FnZUFmdGVyRmVhdHVyZUJpdE1hc2sgIT0gTlVMTCkgew0K PiA+ICsgICAgICBTd2FwcGVkID0gSW5zZXJ0VG9BZnRlckVudHJ5IChGZWF0dXJlTGlzdCwgQ3Vy cmVudEVudHJ5LCBDcHVGZWF0dXJlLQ0KPiA+UGFja2FnZUFmdGVyRmVhdHVyZUJpdE1hc2spOw0K PiA+ICsgICAgICBpZiAoU3dhcHBlZCkgew0KPiA+ICsgICAgICAgIEN1cnJlbnRFbnRyeSA9IE5l eHRFbnRyeTsNCj4gPiArICAgICAgICBjb250aW51ZTsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAg fQ0KPiA+ICsNCj4gPiAgICAgICBDdXJyZW50RW50cnkgPSBDdXJyZW50RW50cnktPkZvcndhcmRM aW5rOw0KPiA+ICAgICB9DQo+ID4gICB9DQo+ID4gQEAgLTI2NSw4ICs1NjMsNyBAQCBSZWdpc3Rl ckNwdUZlYXR1cmVXb3JrZXIgKA0KPiA+ICAgICBDcHVGZWF0dXJlc0RhdGEgPSBHZXRDcHVGZWF0 dXJlc0RhdGEgKCk7DQo+ID4gICAgIGlmIChDcHVGZWF0dXJlc0RhdGEtPkZlYXR1cmVzQ291bnQg PT0gMCkgew0KPiA+ICAgICAgIEluaXRpYWxpemVMaXN0SGVhZCAoJkNwdUZlYXR1cmVzRGF0YS0+ RmVhdHVyZUxpc3QpOw0KPiA+IC0gICAgSW5pdGlhbGl6ZVNwaW5Mb2NrICgmQ3B1RmVhdHVyZXNE YXRhLT5Nc3JMb2NrKTsNCj4gPiAtICAgIEluaXRpYWxpemVTcGluTG9jayAoJkNwdUZlYXR1cmVz RGF0YS0+TWVtb3J5TWFwcGVkTG9jayk7DQo+ID4gKyAgICBJbml0aWFsaXplU3BpbkxvY2sgKCZD cHVGZWF0dXJlc0RhdGEtPkNwdUZsYWdzLk1lbW9yeU1hcHBlZExvY2spOw0KPiA+ICAgICAgIENw dUZlYXR1cmVzRGF0YS0+Qml0TWFza1NpemUgPSAoVUlOVDMyKSBCaXRNYXNrU2l6ZTsNCj4gPiAg ICAgfQ0KPiA+ICAgICBBU1NFUlQgKENwdUZlYXR1cmVzRGF0YS0+Qml0TWFza1NpemUgPT0gQml0 TWFza1NpemUpOw0KPiA+IEBAIC0zMjgsNiArNjI1LDMxIEBAIFJlZ2lzdGVyQ3B1RmVhdHVyZVdv cmtlciAoDQo+ID4gICAgICAgICB9DQo+ID4gICAgICAgICBDcHVGZWF0dXJlRW50cnktPkFmdGVy RmVhdHVyZUJpdE1hc2sgPSBDcHVGZWF0dXJlLQ0KPiA+QWZ0ZXJGZWF0dXJlQml0TWFzazsNCj4g PiAgICAgICB9DQo+ID4gKyAgICBpZiAoQ3B1RmVhdHVyZS0+Q29yZUJlZm9yZUZlYXR1cmVCaXRN YXNrICE9IE5VTEwpIHsNCj4gPiArICAgICAgaWYgKENwdUZlYXR1cmVFbnRyeS0+Q29yZUJlZm9y ZUZlYXR1cmVCaXRNYXNrICE9IE5VTEwpIHsNCj4gPiArICAgICAgICBGcmVlUG9vbCAoQ3B1RmVh dHVyZUVudHJ5LT5Db3JlQmVmb3JlRmVhdHVyZUJpdE1hc2spOw0KPiA+ICsgICAgICB9DQo+ID4g KyAgICAgIENwdUZlYXR1cmVFbnRyeS0+Q29yZUJlZm9yZUZlYXR1cmVCaXRNYXNrID0gQ3B1RmVh dHVyZS0NCj4gPkNvcmVCZWZvcmVGZWF0dXJlQml0TWFzazsNCj4gPiArICAgIH0NCj4gPiArICAg IGlmIChDcHVGZWF0dXJlLT5Db3JlQWZ0ZXJGZWF0dXJlQml0TWFzayAhPSBOVUxMKSB7DQo+ID4g KyAgICAgIGlmIChDcHVGZWF0dXJlRW50cnktPkNvcmVBZnRlckZlYXR1cmVCaXRNYXNrICE9IE5V TEwpIHsNCj4gPiArICAgICAgICBGcmVlUG9vbCAoQ3B1RmVhdHVyZUVudHJ5LT5Db3JlQWZ0ZXJG ZWF0dXJlQml0TWFzayk7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgQ3B1RmVhdHVyZUVudHJ5 LT5Db3JlQWZ0ZXJGZWF0dXJlQml0TWFzayA9IENwdUZlYXR1cmUtDQo+ID5Db3JlQWZ0ZXJGZWF0 dXJlQml0TWFzazsNCj4gPiArICAgIH0NCj4gPiArICAgIGlmIChDcHVGZWF0dXJlLT5QYWNrYWdl QmVmb3JlRmVhdHVyZUJpdE1hc2sgIT0gTlVMTCkgew0KPiA+ICsgICAgICBpZiAoQ3B1RmVhdHVy ZUVudHJ5LT5QYWNrYWdlQmVmb3JlRmVhdHVyZUJpdE1hc2sgIT0gTlVMTCkgew0KPiA+ICsgICAg ICAgIEZyZWVQb29sIChDcHVGZWF0dXJlRW50cnktPlBhY2thZ2VCZWZvcmVGZWF0dXJlQml0TWFz ayk7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgQ3B1RmVhdHVyZUVudHJ5LT5QYWNrYWdlQmVm b3JlRmVhdHVyZUJpdE1hc2sgPSBDcHVGZWF0dXJlLQ0KPiA+UGFja2FnZUJlZm9yZUZlYXR1cmVC aXRNYXNrOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgaWYgKENwdUZlYXR1cmUtPlBhY2thZ2VBZnRl ckZlYXR1cmVCaXRNYXNrICE9IE5VTEwpIHsNCj4gPiArICAgICAgaWYgKENwdUZlYXR1cmVFbnRy eS0+UGFja2FnZUFmdGVyRmVhdHVyZUJpdE1hc2sgIT0gTlVMTCkgew0KPiA+ICsgICAgICAgIEZy ZWVQb29sIChDcHVGZWF0dXJlRW50cnktPlBhY2thZ2VBZnRlckZlYXR1cmVCaXRNYXNrKTsNCj4g PiArICAgICAgfQ0KPiA+ICsgICAgICBDcHVGZWF0dXJlRW50cnktPlBhY2thZ2VBZnRlckZlYXR1 cmVCaXRNYXNrID0gQ3B1RmVhdHVyZS0NCj4gPlBhY2thZ2VBZnRlckZlYXR1cmVCaXRNYXNrOw0K PiA+ICsgICAgfQ0KPiA+ICsNCj4gPiAgICAgICBDcHVGZWF0dXJlRW50cnktPkJlZm9yZUFsbCA9 IENwdUZlYXR1cmUtPkJlZm9yZUFsbDsNCj4gPiAgICAgICBDcHVGZWF0dXJlRW50cnktPkFmdGVy QWxsICA9IENwdUZlYXR1cmUtPkFmdGVyQWxsOw0KPiA+DQo+ID4gQEAgLTQxMCw2ICs3MzIsOCBA QCBTZXRDcHVGZWF0dXJlc0JpdE1hc2sgKA0KPiA+ICAgICBAcmV0dmFsICBSRVRVUk5fVU5TVVBQ T1JURUQgICAgICAgUmVnaXN0cmF0aW9uIG9mIHRoZSBDUFUgZmVhdHVyZSBpcw0KPiBub3QNCj4g PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBkdWUgdG8g YSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4NCj4gPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEJFRk9SRSBhbmQgQUZURVIgZmVhdHVyZXMuDQo+ID4gKyAgQHJldHZh bCAgUkVUVVJOX05PVF9SRUFEWSAgICAgICAgIENQVSBmZWF0dXJlIFBDRA0KPiBQY2RDcHVGZWF0 dXJlc1VzZXJDb25maWd1cmF0aW9uDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5vdCB1cGRhdGVkIGJ5IFBsYXRmb3JtIGRyaXZlciB5ZXQuDQo+ID4NCj4gPiAgICAg QG5vdGUgVGhpcyBzZXJ2aWNlIGNvdWxkIGJlIGNhbGxlZCBieSBCU1Agb25seS4NCj4gPiAgICoq Lw0KPiA+IEBAIC00MzEsMTIgKzc1NSwyMCBAQCBSZWdpc3RlckNwdUZlYXR1cmUgKA0KPiA+ICAg ICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAqRmVhdHVyZU1hc2s7DQo+ID4gICAgIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgICpCZWZvcmVGZWF0dXJlQml0TWFzazsNCj4gPiAgICAgVUlO VDggICAgICAgICAgICAgICAgICAgICAgKkFmdGVyRmVhdHVyZUJpdE1hc2s7DQo+ID4gKyAgVUlO VDggICAgICAgICAgICAgICAgICAgICAgKkNvcmVCZWZvcmVGZWF0dXJlQml0TWFzazsNCj4gPiAr ICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAqQ29yZUFmdGVyRmVhdHVyZUJpdE1hc2s7DQo+ ID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgKlBhY2thZ2VCZWZvcmVGZWF0dXJlQml0 TWFzazsNCj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAqUGFja2FnZUFmdGVyRmVh dHVyZUJpdE1hc2s7DQo+ID4gICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgIEJlZm9yZUFs bDsNCj4gPiAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgQWZ0ZXJBbGw7DQo+ID4NCj4g PiAtICBGZWF0dXJlTWFzayAgICAgICAgICA9IE5VTEw7DQo+ID4gLSAgQmVmb3JlRmVhdHVyZUJp dE1hc2sgPSBOVUxMOw0KPiA+IC0gIEFmdGVyRmVhdHVyZUJpdE1hc2sgID0gTlVMTDsNCj4gPiAr ICBGZWF0dXJlTWFzayAgICAgICAgICAgICAgICAgPSBOVUxMOw0KPiA+ICsgIEJlZm9yZUZlYXR1 cmVCaXRNYXNrICAgICAgICA9IE5VTEw7DQo+IA0KPiBIb3cgYWJvdXQgcmVuYW1pbmcgQmVmb3Jl RmVhdHVyZUJpdE1hc2sgdG8NCj4gVGhyZWFkQmVmb3JlRmVhdHVyZUJpdE1hc2s/DQo+IEkgdGhp bmsgdGhlIHJlbmFtaW5nIHRvZ2V0aGVyIHdpdGggcmVkZWZpbmluZyB0aGUgbWFjcm8NCj4gQ1BV X0ZFQVRVUkVfQkVGT1JFIGFzIENQVV9GRUFUVVJFX1RIUkVBRF9CRUZPUkUgY2FuIGJlIGluIGEN Cj4gc2VwYXJhdGUgcGF0Y2guDQo+IA0KDQpPaywgd2lsbCBzZXBhcmF0ZSB0aGUgcGF0Y2ggaW4g bmV4dCB2ZXJzaW9uIGNoYW5nZXMuDQoNCj4gPiArICBBZnRlckZlYXR1cmVCaXRNYXNrICAgICAg ICAgPSBOVUxMOw0KPiA+ICsgIENvcmVCZWZvcmVGZWF0dXJlQml0TWFzayAgICA9IE5VTEw7DQo+ ID4gKyAgQ29yZUFmdGVyRmVhdHVyZUJpdE1hc2sgICAgID0gTlVMTDsNCj4gPiArICBQYWNrYWdl QmVmb3JlRmVhdHVyZUJpdE1hc2sgID0gTlVMTDsNCj4gPiArICBQYWNrYWdlQWZ0ZXJGZWF0dXJl Qml0TWFzayAgID0gTlVMTDsNCj4gPiAgICAgQmVmb3JlQWxsICAgICAgICAgICAgPSBGQUxTRTsN Cj4gPiAgICAgQWZ0ZXJBbGwgICAgICAgICAgICAgPSBGQUxTRTsNCj4gPg0KPiA+IEBAIC00NDks NiArNzgxLDEwIEBAIFJlZ2lzdGVyQ3B1RmVhdHVyZSAoDQo+ID4gICAgICAgICAgICAgICAgICAg ICAgICE9IChDUFVfRkVBVFVSRV9CRUZPUkUgfCBDUFVfRkVBVFVSRV9BRlRFUikpOw0KPiA+ICAg ICAgIEFTU0VSVCAoKEZlYXR1cmUgJiAoQ1BVX0ZFQVRVUkVfQkVGT1JFX0FMTCB8DQo+IENQVV9G RUFUVVJFX0FGVEVSX0FMTCkpDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICE9IChDUFVfRkVB VFVSRV9CRUZPUkVfQUxMIHwgQ1BVX0ZFQVRVUkVfQUZURVJfQUxMKSk7DQo+IA0KPiBJbXBsZW1l bnRhdGlvbiBjYW4gYXZvaWQgdXNpbmcgQ1BVX0ZFQVRVUkVfQkVGT1JFIGFuZA0KPiBDUFVfRkVB VFVSRV9BRlRFUi4NCj4gVXNlIENQVV9GRUFUVVJFX1RIUkVBRF9CRUZPUkUgYW5kIENQVV9GRUFU VVJFX1RIUkVBRF9BRlRFUi4NCg0KT2ssIHdpbGwgZG8gdGhpcyBjaGFuZ2UgaW4gdGhlIHNlcGFy YXRlIHBhdGNoIGluIG5leHQgdmVyc2lvbiBjaGFuZ2VzLg0KDQoNCj4gDQo+ID4gKyAgICBBU1NF UlQgKChGZWF0dXJlICYgKENQVV9GRUFUVVJFX0NPUkVfQkVGT1JFIHwNCj4gQ1BVX0ZFQVRVUkVf Q09SRV9BRlRFUikpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIT0gKENQVV9GRUFUVVJFX0NP UkVfQkVGT1JFIHwNCj4gQ1BVX0ZFQVRVUkVfQ09SRV9BRlRFUikpOw0KPiA+ICsgICAgQVNTRVJU ICgoRmVhdHVyZSAmIChDUFVfRkVBVFVSRV9QQUNLQUdFX0JFRk9SRSB8DQo+IENQVV9GRUFUVVJF X1BBQ0tBR0VfQUZURVIpKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICE9IChDUFVfRkVBVFVS RV9QQUNLQUdFX0JFRk9SRSB8DQo+IENQVV9GRUFUVVJFX1BBQ0tBR0VfQUZURVIpKTsNCj4gPiAg ICAgICBpZiAoRmVhdHVyZSA8IENQVV9GRUFUVVJFX0JFRk9SRSkgew0KPiA+ICAgICAgICAgQmVm b3JlQWxsID0gKChGZWF0dXJlICYgQ1BVX0ZFQVRVUkVfQkVGT1JFX0FMTCkgIT0gMCkgPyBUUlVF IDoNCj4gRkFMU0U7DQo+ID4gICAgICAgICBBZnRlckFsbCAgPSAoKEZlYXR1cmUgJiBDUFVfRkVB VFVSRV9BRlRFUl9BTEwpICE9IDApID8gVFJVRSA6IEZBTFNFOw0KPiA+IEBAIC00NTksNiArNzk1 LDE0IEBAIFJlZ2lzdGVyQ3B1RmVhdHVyZSAoDQo+ID4gICAgICAgICBTZXRDcHVGZWF0dXJlc0Jp dE1hc2sgKCZCZWZvcmVGZWF0dXJlQml0TWFzaywgRmVhdHVyZSAmDQo+IH5DUFVfRkVBVFVSRV9C RUZPUkUsIEJpdE1hc2tTaXplKTsNCj4gPiAgICAgICB9IGVsc2UgaWYgKChGZWF0dXJlICYgQ1BV X0ZFQVRVUkVfQUZURVIpICE9IDApIHsNCj4gPiAgICAgICAgIFNldENwdUZlYXR1cmVzQml0TWFz ayAoJkFmdGVyRmVhdHVyZUJpdE1hc2ssIEZlYXR1cmUgJg0KPiB+Q1BVX0ZFQVRVUkVfQUZURVIs IEJpdE1hc2tTaXplKTsNCj4gPiArICAgIH0gZWxzZSBpZiAoKEZlYXR1cmUgJiBDUFVfRkVBVFVS RV9DT1JFX0JFRk9SRSkgIT0gMCkgew0KPiA+ICsgICAgICBTZXRDcHVGZWF0dXJlc0JpdE1hc2sg KCZDb3JlQmVmb3JlRmVhdHVyZUJpdE1hc2ssIEZlYXR1cmUgJg0KPiB+Q1BVX0ZFQVRVUkVfQ09S RV9CRUZPUkUsIEJpdE1hc2tTaXplKTsNCj4gPiArICAgIH0gZWxzZSBpZiAoKEZlYXR1cmUgJiBD UFVfRkVBVFVSRV9DT1JFX0FGVEVSKSAhPSAwKSB7DQo+ID4gKyAgICAgIFNldENwdUZlYXR1cmVz Qml0TWFzayAoJkNvcmVBZnRlckZlYXR1cmVCaXRNYXNrLCBGZWF0dXJlICYNCj4gfkNQVV9GRUFU VVJFX0NPUkVfQUZURVIsIEJpdE1hc2tTaXplKTsNCj4gPiArICAgIH0gZWxzZSBpZiAoKEZlYXR1 cmUgJiBDUFVfRkVBVFVSRV9QQUNLQUdFX0JFRk9SRSkgIT0gMCkgew0KPiA+ICsgICAgICBTZXRD cHVGZWF0dXJlc0JpdE1hc2sgKCZQYWNrYWdlQmVmb3JlRmVhdHVyZUJpdE1hc2ssIEZlYXR1cmUg Jg0KPiB+Q1BVX0ZFQVRVUkVfUEFDS0FHRV9CRUZPUkUsIEJpdE1hc2tTaXplKTsNCj4gPiArICAg IH0gZWxzZSBpZiAoKEZlYXR1cmUgJiBDUFVfRkVBVFVSRV9QQUNLQUdFX0FGVEVSKSAhPSAwKSB7 DQo+ID4gKyAgICAgIFNldENwdUZlYXR1cmVzQml0TWFzayAoJlBhY2thZ2VBZnRlckZlYXR1cmVC aXRNYXNrLCBGZWF0dXJlICYNCj4gfkNQVV9GRUFUVVJFX1BBQ0tBR0VfQUZURVIsIEJpdE1hc2tT aXplKTsNCj4gPiAgICAgICB9DQo+ID4gICAgICAgRmVhdHVyZSA9IFZBX0FSRyAoTWFya2VyLCBV SU5UMzIpOw0KPiA+ICAgICB9DQo+ID4gQEAgLTQ2NiwxNSArODEwLDE5IEBAIFJlZ2lzdGVyQ3B1 RmVhdHVyZSAoDQo+ID4NCj4gPiAgICAgQ3B1RmVhdHVyZSA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNp emVvZiAoQ1BVX0ZFQVRVUkVTX0VOVFJZKSk7DQo+ID4gICAgIEFTU0VSVCAoQ3B1RmVhdHVyZSAh PSBOVUxMKTsNCj4gPiAtICBDcHVGZWF0dXJlLT5TaWduYXR1cmUgICAgICAgICAgICA9IENQVV9G RUFUVVJFX0VOVFJZX1NJR05BVFVSRTsNCj4gPiAtICBDcHVGZWF0dXJlLT5GZWF0dXJlTWFzayAg ICAgICAgICA9IEZlYXR1cmVNYXNrOw0KPiA+IC0gIENwdUZlYXR1cmUtPkJlZm9yZUZlYXR1cmVC aXRNYXNrID0gQmVmb3JlRmVhdHVyZUJpdE1hc2s7DQo+ID4gLSAgQ3B1RmVhdHVyZS0+QWZ0ZXJG ZWF0dXJlQml0TWFzayAgPSBBZnRlckZlYXR1cmVCaXRNYXNrOw0KPiA+IC0gIENwdUZlYXR1cmUt PkJlZm9yZUFsbCAgICAgICAgICAgID0gQmVmb3JlQWxsOw0KPiA+IC0gIENwdUZlYXR1cmUtPkFm dGVyQWxsICAgICAgICAgICAgID0gQWZ0ZXJBbGw7DQo+ID4gLSAgQ3B1RmVhdHVyZS0+R2V0Q29u ZmlnRGF0YUZ1bmMgICAgPSBHZXRDb25maWdEYXRhRnVuYzsNCj4gPiAtICBDcHVGZWF0dXJlLT5T dXBwb3J0RnVuYyAgICAgICAgICA9IFN1cHBvcnRGdW5jOw0KPiA+IC0gIENwdUZlYXR1cmUtPklu aXRpYWxpemVGdW5jICAgICAgID0gSW5pdGlhbGl6ZUZ1bmM7DQo+ID4gKyAgQ3B1RmVhdHVyZS0+ U2lnbmF0dXJlICAgICAgICAgICAgICAgICAgID0gQ1BVX0ZFQVRVUkVfRU5UUllfU0lHTkFUVVJF Ow0KPiA+ICsgIENwdUZlYXR1cmUtPkZlYXR1cmVNYXNrICAgICAgICAgICAgICAgICA9IEZlYXR1 cmVNYXNrOw0KPiA+ICsgIENwdUZlYXR1cmUtPkJlZm9yZUZlYXR1cmVCaXRNYXNrICAgICAgICA9 IEJlZm9yZUZlYXR1cmVCaXRNYXNrOw0KPiA+ICsgIENwdUZlYXR1cmUtPkFmdGVyRmVhdHVyZUJp dE1hc2sgICAgICAgICA9IEFmdGVyRmVhdHVyZUJpdE1hc2s7DQo+ID4gKyAgQ3B1RmVhdHVyZS0+ Q29yZUJlZm9yZUZlYXR1cmVCaXRNYXNrICAgID0gQ29yZUJlZm9yZUZlYXR1cmVCaXRNYXNrOw0K PiA+ICsgIENwdUZlYXR1cmUtPkNvcmVBZnRlckZlYXR1cmVCaXRNYXNrICAgICA9IENvcmVBZnRl ckZlYXR1cmVCaXRNYXNrOw0KPiA+ICsgIENwdUZlYXR1cmUtPlBhY2thZ2VCZWZvcmVGZWF0dXJl Qml0TWFzayA9DQo+IFBhY2thZ2VCZWZvcmVGZWF0dXJlQml0TWFzazsNCj4gPiArICBDcHVGZWF0 dXJlLT5QYWNrYWdlQWZ0ZXJGZWF0dXJlQml0TWFzayAgPQ0KPiBQYWNrYWdlQWZ0ZXJGZWF0dXJl Qml0TWFzazsNCj4gPiArICBDcHVGZWF0dXJlLT5CZWZvcmVBbGwgICAgICAgICAgICAgICAgICAg PSBCZWZvcmVBbGw7DQo+ID4gKyAgQ3B1RmVhdHVyZS0+QWZ0ZXJBbGwgICAgICAgICAgICAgICAg ICAgID0gQWZ0ZXJBbGw7DQo+ID4gKyAgQ3B1RmVhdHVyZS0+R2V0Q29uZmlnRGF0YUZ1bmMgICAg ICAgICAgID0gR2V0Q29uZmlnRGF0YUZ1bmM7DQo+ID4gKyAgQ3B1RmVhdHVyZS0+U3VwcG9ydEZ1 bmMgICAgICAgICAgICAgICAgID0gU3VwcG9ydEZ1bmM7DQo+ID4gKyAgQ3B1RmVhdHVyZS0+SW5p dGlhbGl6ZUZ1bmMgICAgICAgICAgICAgID0gSW5pdGlhbGl6ZUZ1bmM7DQo+ID4gICAgIGlmIChG ZWF0dXJlTmFtZSAhPSBOVUxMKSB7DQo+ID4gICAgICAgQ3B1RmVhdHVyZS0+RmVhdHVyZU5hbWUg ICAgICAgICAgPSBBbGxvY2F0ZVBvb2wNCj4gKENQVV9GRUFUVVJFX05BTUVfU0laRSk7DQo+ID4g ICAgICAgQVNTRVJUIChDcHVGZWF0dXJlLT5GZWF0dXJlTmFtZSAhPSBOVUxMKTsNCj4gPg0KPiAN Cj4gDQo+IC0tDQo+IFRoYW5rcywNCj4gUmF5DQo=