From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: zhichao.gao@intel.com) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by groups.io with SMTP; Thu, 11 Apr 2019 00:47:13 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Apr 2019 00:47:12 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,336,1549958400"; d="scan'208";a="134809840" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga006.jf.intel.com with ESMTP; 11 Apr 2019 00:47:12 -0700 Received: from fmsmsx122.amr.corp.intel.com (10.18.125.37) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.408.0; Thu, 11 Apr 2019 00:47:11 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx122.amr.corp.intel.com (10.18.125.37) with Microsoft SMTP Server (TLS) id 14.3.408.0; Thu, 11 Apr 2019 00:47:11 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.164]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.93]) with mapi id 14.03.0415.000; Thu, 11 Apr 2019 15:47:09 +0800 From: "Gao, Zhichao" To: =?utf-8?B?UGhpbGlwcGUgTWF0aGlldS1EYXVkw6k=?= , "devel@edk2.groups.io" CC: Bret Barkelew , Michael Turner , "Gao, Liming" , "Zeng, Star" , "Wu, Hao A" , "Wang, Jian J" Subject: Re: [edk2] [PATCH] MdeModulePkg/CapsulePei: Update the debug code to print 64bit data Thread-Topic: [edk2] [PATCH] MdeModulePkg/CapsulePei: Update the debug code to print 64bit data Thread-Index: AQHU6RgJ4qbW1SvgjUeaAPbD2nHSfKYoeywAgA4jiWA= Date: Thu, 11 Apr 2019 07:47:09 +0000 Message-ID: <3CE959C139B4C44DBEA1810E3AA6F9000B7C1722@SHSMSX101.ccr.corp.intel.com> References: <20190402055020.8656-1-zhichao.gao@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 Return-Path: zhichao.gao@intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 U29ycnkgZm9yIG1pc3NpbmcgdGhpcyBlbWFpbC4NCg0KV2hpbGUgSSBjaGFuZ2UgdGhlIGNvZGUs IGl0IGNvdWxkbid0IHBhc3MgdGhlIFBhdGNoY2hlci5weSBiZWNhdXNlIG9mIHRoZSAnRUZJX0Rf IiB2ZXJzaW9uIE1BQ1JPLiBTbyBJIGNoYW5nZSBhbGwgdGhlIGRlYnVnIG1lc3NhZ2UgaW4gdGhp cyBkcml2ZXIuDQpNYXliZSB0aGF0IGlzIGEgcmVkdW5kYW50IHdvcmsuDQoNClRoYW5rcywNClpo aWNoYW8NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBQaGlsaXBwZSBN YXRoaWV1LURhdWTDqSBbbWFpbHRvOnBoaWxtZEByZWRoYXQuY29tXQ0KPiBTZW50OiBUdWVzZGF5 LCBBcHJpbCAyLCAyMDE5IDExOjM2IFBNDQo+IFRvOiBHYW8sIFpoaWNoYW8gPHpoaWNoYW8uZ2Fv QGludGVsLmNvbT47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+IENjOiBCcmV0IEJhcmtlbGV3 IDxCcmV0LkJhcmtlbGV3QG1pY3Jvc29mdC5jb20+OyBNaWNoYWVsIFR1cm5lcg0KPiA8TWljaGFl bC5UdXJuZXJAbWljcm9zb2Z0LmNvbT47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNv bT47DQo+IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBb ZWRrMl0gW1BBVENIXSBNZGVNb2R1bGVQa2cvQ2Fwc3VsZVBlaTogVXBkYXRlIHRoZSBkZWJ1Zw0K PiBjb2RlIHRvIHByaW50IDY0Yml0IGRhdGENCj4gDQo+IEhpIEJyZXQsDQo+IA0KPiBPbiA0LzIv MTkgNzo1MCBBTSwgWmhpY2hhbyBHYW8gd3JvdGU6DQo+ID4gRnJvbTogQnJldCBCYXJrZWxldyA8 QnJldC5CYXJrZWxld0BtaWNyb3NvZnQuY29tPg0KPiA+DQo+ID4gUkVGOiBodHRwczovL2J1Z3pp bGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzcNCj4gPg0KPiA+IEZvciBzb21l IHBvaW50ZXIgYW5kIFVJTlQ2NCBkYXRhLCB0aGUgZGVidWcgY29kZSBwcmludCB3aXRoICcleCcu DQo+ID4gV2hpY2ggd291bGQgbG9zcyB0aGUgdXBwZXIgMzJiaXQgZGF0YS4gU28gdXBkYXRlICcl eCcgdG8gJyVseCcNCj4gPiBmb3IgdGhlc2UgZGF0YS4NCj4gDQo+IFNvbWUgYXJlIFVJTlROLiBQ ZXIgTGFzemxvIGFuc3dlciBvbiB0aGlzIHRocmVhZDoNCj4gaHR0cHM6Ly9saXN0cy4wMS5vcmcv cGlwZXJtYWlsL2VkazItZGV2ZWwvMjAxNi1TZXB0ZW1iZXIvMDAyMDkzLmh0bWwNCj4gZm9yIHRo b3NlLCBjYXN0aW5nIGFuZCBjaGFuZ2luZyBmb3JtYXQgaXMgdGhlIGFjY2VwdGVkIHdheS4NCj4g DQo+IEhvd2V2ZXIgdGhpcyBpcyBhIGNoYW5nZSwNCj4gDQo+ID4gQ2hhbmdlIHRoZSBERUJVRyBQ cmludExldmVsIGZyb20gRUZJX0RfIHZlcnNpb24gdG8gREVCVUdfIHZlcnNpb24uDQo+ID4gREVC VUdfIHZlcnNpb24gaXMgcmVjb21tZW5kZWQgdG8gdXNlLg0KPiANCj4gYW5kIHRoaXMgaXMgYW5v dGhlciBjaGFuZ2UuDQo+IA0KPiBTcGxpdHRpbmcgdGhpcyBwYXRjaCBpbiAyIHdvdWxkIG1ha2Ug aXQgbW9yZSBkaWdlc3RhYmxlLg0KPiANCj4gPg0KPiA+IENjOiBKaWFuIEogV2FuZyA8amlhbi5q LndhbmdAaW50ZWwuY29tPg0KPiA+IENjOiBSYXkgTmkgPHJheS5uaUBpbnRlbC5jb20+DQo+ID4g Q2M6IFN0YXIgWmVuZyA8c3Rhci56ZW5nQGludGVsLmNvbT4NCj4gPiBDYzogTGltaW5nIEdhbyA8 bGltaW5nLmdhb0BpbnRlbC5jb20+DQo+ID4gQ2M6IFNlYW4gQnJvZ2FuIDxzZWFuLmJyb2dhbkBt aWNyb3NvZnQuY29tPg0KPiA+IENjOiBNaWNoYWVsIFR1cm5lciA8TWljaGFlbC5UdXJuZXJAbWlj cm9zb2Z0LmNvbT4NCj4gPiBDYzogQnJldCBCYXJrZWxldyA8QnJldC5CYXJrZWxld0BtaWNyb3Nv ZnQuY29tPg0KPiA+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFn cmVlbWVudCAxLjENCj4gPiBTaWduZWQtb2ZmLWJ5OiBaaGljaGFvIEdhbyA8emhpY2hhby5nYW9A aW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ICAuLi4vQ2Fwc3VsZVBlaS9Db21tb24vQ2Fwc3VsZUNv YWxlc2NlLmMgICAgICAgfCA5MCArKysrKysrKystLS0tLS0tLS0tDQo+ID4gIC4uLi9Vbml2ZXJz YWwvQ2Fwc3VsZVBlaS9VZWZpQ2Fwc3VsZS5jICAgICAgICB8IDQ2ICsrKysrLS0tLS0NCj4gPiAg Li4uL1VuaXZlcnNhbC9DYXBzdWxlUGVpL1g2NC9YNjRFbnRyeS5jICAgICAgIHwgIDIgKy0NCj4g PiAgMyBmaWxlcyBjaGFuZ2VkLCA2OSBpbnNlcnRpb25zKCspLCA2OSBkZWxldGlvbnMoLSkNCj4g Pg0KPiA+IGRpZmYgLS1naXQNCj4gPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvQ2Fwc3VsZVBl aS9Db21tb24vQ2Fwc3VsZUNvYWxlc2NlLmMNCj4gPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwv Q2Fwc3VsZVBlaS9Db21tb24vQ2Fwc3VsZUNvYWxlc2NlLmMNCj4gPiBpbmRleCAzNTc1YTk0ZDBm Li4yYTUyNzA1NGJkIDEwMDY0NA0KPiA+IC0tLSBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvQ2Fw c3VsZVBlaS9Db21tb24vQ2Fwc3VsZUNvYWxlc2NlLmMNCj4gPiArKysgYi9NZGVNb2R1bGVQa2cv VW5pdmVyc2FsL0NhcHN1bGVQZWkvQ29tbW9uL0NhcHN1bGVDb2FsZXNjZS5jDQo+ID4gQEAgLTI1 OCw3ICsyNTgsNyBAQCBWYWxpZGF0ZUNhcHN1bGVCeU1lbW9yeVJlc291cmNlICgNCj4gPiAgICAv LyBTYW5pdHkgQ2hlY2sNCj4gPiAgICAvLw0KPiA+ICAgIGlmIChTaXplID4gTUFYX0FERFJFU1Mp IHsNCj4gPiAtICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJFUlJPUjogU2l6ZSgweCVseCkgPiBN QVhfQUREUkVTU1xuIiwgU2l6ZSkpOw0KPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkVS Uk9SOiBTaXplKDB4JWx4KSA+IE1BWF9BRERSRVNTXG4iLA0KPiA+ICsgU2l6ZSkpOw0KPiA+ICAg ICAgcmV0dXJuIEZBTFNFOw0KPiA+ICAgIH0NCj4gPg0KPiA+IEBAIC0yNjYsNyArMjY2LDcgQEAg VmFsaWRhdGVDYXBzdWxlQnlNZW1vcnlSZXNvdXJjZSAoDQo+ID4gICAgLy8gU2FuaXR5IENoZWNr DQo+ID4gICAgLy8NCj4gPiAgICBpZiAoQWRkcmVzcyA+IChNQVhfQUREUkVTUyAtIFNpemUpKSB7 DQo+ID4gLSAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiRVJST1I6IEFkZHJlc3MoMHglbHgpID4g KE1BWF9BRERSRVNTIC0NCj4gU2l6ZSgweCVseCkpXG4iLCBBZGRyZXNzLCBTaXplKSk7DQo+ID4g KyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6IEFkZHJlc3MoMHglbHgpID4gKE1BWF9B RERSRVNTIC0NCj4gPiArIFNpemUoMHglbHgpKVxuIiwgQWRkcmVzcywgU2l6ZSkpOw0KPiA+ICAg ICAgcmV0dXJuIEZBTFNFOw0KPiA+ICAgIH0NCj4gPg0KPiA+IEBAIC0yODAsMTQgKzI4MCwxNCBA QCBWYWxpZGF0ZUNhcHN1bGVCeU1lbW9yeVJlc291cmNlICgNCj4gPiAgICBmb3IgKEluZGV4ID0g MDsgTWVtb3J5UmVzb3VyY2VbSW5kZXhdLlJlc291cmNlTGVuZ3RoICE9IDA7IEluZGV4KyspIHsN Cj4gPiAgICAgIGlmICgoQWRkcmVzcyA+PSBNZW1vcnlSZXNvdXJjZVtJbmRleF0uUGh5c2ljYWxT dGFydCkgJiYNCj4gPiAgICAgICAgICAoKEFkZHJlc3MgKyBTaXplKSA8PSAoTWVtb3J5UmVzb3Vy Y2VbSW5kZXhdLlBoeXNpY2FsU3RhcnQgKw0KPiBNZW1vcnlSZXNvdXJjZVtJbmRleF0uUmVzb3Vy Y2VMZW5ndGgpKSkgew0KPiA+IC0gICAgICBERUJVRyAoKEVGSV9EX0lORk8sICJBZGRyZXNzKDB4 JWx4KSBTaXplKDB4JWx4KSBpbg0KPiBNZW1vcnlSZXNvdXJjZVsweCV4XSAtIFN0YXJ0KDB4JWx4 KSBMZW5ndGgoMHglbHgpXG4iLA0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJBZGRy ZXNzKDB4JWx4KSBTaXplKDB4JWx4KSBpbg0KPiA+ICsgTWVtb3J5UmVzb3VyY2VbMHgleF0gLSBT dGFydCgweCVseCkgTGVuZ3RoKDB4JWx4KVxuIiwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBZGRyZXNzLCBTaXplLA0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4 LCBNZW1vcnlSZXNvdXJjZVtJbmRleF0uUGh5c2ljYWxTdGFydCwNCj4gTWVtb3J5UmVzb3VyY2Vb SW5kZXhdLlJlc291cmNlTGVuZ3RoKSk7DQo+ID4gICAgICAgIHJldHVybiBUUlVFOw0KPiA+ICAg ICAgfQ0KPiA+ICAgIH0NCj4gPg0KPiA+IC0gIERFQlVHICgoRUZJX0RfRVJST1IsICJFUlJPUjog QWRkcmVzcygweCVseCkgU2l6ZSgweCVseCkgbm90IGluIGFueQ0KPiA+IE1lbW9yeVJlc291cmNl XG4iLCBBZGRyZXNzLCBTaXplKSk7DQo+ID4gKyAgREVCVUcgKChERUJVR19FUlJPUiwgIkVSUk9S OiBBZGRyZXNzKDB4JWx4KSBTaXplKDB4JWx4KSBub3QgaW4gYW55DQo+ID4gKyBNZW1vcnlSZXNv dXJjZVxuIiwgQWRkcmVzcywgU2l6ZSkpOw0KPiA+ICAgIHJldHVybiBGQUxTRTsNCj4gPiAgfQ0K PiA+DQo+ID4gQEAgLTMxMiw3ICszMTIsNyBAQCBWYWxpZGF0ZUNhcHN1bGVJbnRlZ3JpdHkgKA0K PiA+ICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBzdWxlQ291bnQ7DQo+ID4g ICAgRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUiAgICpQdHI7DQo+ID4NCj4gPiAtICBERUJV RyAoKEVGSV9EX0lORk8sICJWYWxpZGF0ZUNhcHN1bGVJbnRlZ3JpdHlcbiIpKTsNCj4gPiArICBE RUJVRyAoKERFQlVHX0lORk8sICJWYWxpZGF0ZUNhcHN1bGVJbnRlZ3JpdHlcbiIpKTsNCj4gPg0K PiA+ICAgIC8vDQo+ID4gICAgLy8gR28gdGhyb3VnaCB0aGUgbGlzdCB0byBsb29rIGZvciBpbmNv bnNpc3RlbmNpZXMuIENoZWNrIGZvcjoNCj4gPiBAQCAtMzMzLDE1ICszMzMsMTUgQEAgVmFsaWRh dGVDYXBzdWxlSW50ZWdyaXR5ICgNCj4gPiAgICAgIHJldHVybiBOVUxMOw0KPiA+ICAgIH0NCj4g Pg0KPiA+IC0gIERFQlVHICgoRUZJX0RfSU5GTywgIlB0ciAtIDB4JXhcbiIsIFB0cikpOw0KPiA+ IC0gIERFQlVHICgoRUZJX0RfSU5GTywgIlB0ci0+TGVuZ3RoIC0gMHgleFxuIiwgUHRyLT5MZW5n dGgpKTsNCj4gPiAtICBERUJVRyAoKEVGSV9EX0lORk8sICJQdHItPlVuaW9uIC0gMHgleFxuIiwN Cj4gPiBQdHItPlVuaW9uLkNvbnRpbnVhdGlvblBvaW50ZXIpKTsNCj4gPiArICBERUJVRyAoKERF QlVHX0lORk8sICJQdHIgLSAweCVseFxuIiwgKFVJTlQ2NClQdHIpKTsgIERFQlVHDQo+ID4gKyAo KERFQlVHX0lORk8sICJQdHItPkxlbmd0aCAtIDB4JWx4XG4iLCBQdHItPkxlbmd0aCkpOyAgREVC VUcNCj4gPiArICgoREVCVUdfSU5GTywgIlB0ci0+VW5pb24gLSAweCVseFxuIiwNCj4gPiArIFB0 ci0+VW5pb24uQ29udGludWF0aW9uUG9pbnRlcikpOw0KPiA+ICAgIHdoaWxlICgoUHRyLT5MZW5n dGggIT0gMCkgfHwgKFB0ci0+VW5pb24uQ29udGludWF0aW9uUG9pbnRlciAhPQ0KPiAoRUZJX1BI WVNJQ0FMX0FERFJFU1MpIChVSU5UTikgTlVMTCkpIHsNCj4gPiAgICAgIC8vDQo+ID4gICAgICAv LyBNYWtlIHN1cmUgdGhlIGRlc2NyaXB0b3IgaXMgYWxpZ25lZCBhdCBVSU5UNjQgaW4gbWVtb3J5 DQo+ID4gICAgICAvLw0KPiA+ICAgICAgaWYgKChVSU5UTikgUHRyICYgKHNpemVvZihVSU5UNjQp IC0gMSkpIHsNCj4gPiAtICAgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIkVSUk9SOiBCbG9ja0xp c3QgYWRkcmVzcyBmYWlsZWQgYWxpZ25tZW50DQo+IGNoZWNrXG4iKSk7DQo+ID4gKyAgICAgIERF QlVHICgoREVCVUdfRVJST1IsICJFUlJPUjogQmxvY2tMaXN0IGFkZHJlc3MgZmFpbGVkIGFsaWdu bWVudA0KPiA+ICsgY2hlY2tcbiIpKTsNCj4gPiAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gICAg ICB9DQo+ID4NCj4gPiBAQCAtMzU0LDkgKzM1NCw5IEBAIFZhbGlkYXRlQ2Fwc3VsZUludGVncml0 eSAoDQo+ID4gICAgICAgIGlmICghVmFsaWRhdGVDYXBzdWxlQnlNZW1vcnlSZXNvdXJjZSAoTWVt b3J5UmVzb3VyY2UsDQo+IChFRklfUEhZU0lDQUxfQUREUkVTUykgKFVJTlROKSBQdHIsIHNpemVv Zg0KPiAoRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUikpKSB7DQo+ID4gICAgICAgICAgcmV0 dXJuIE5VTEw7DQo+ID4gICAgICAgIH0NCj4gPiAtICAgICAgREVCVUcgKChFRklfRF9JTkZPLCAi UHRyKEMpIC0gMHgleFxuIiwgUHRyKSk7DQo+ID4gLSAgICAgIERFQlVHICgoRUZJX0RfSU5GTywg IlB0ci0+TGVuZ3RoIC0gMHgleFxuIiwgUHRyLT5MZW5ndGgpKTsNCj4gPiAtICAgICAgREVCVUcg KChFRklfRF9JTkZPLCAiUHRyLT5VbmlvbiAtIDB4JXhcbiIsIFB0ci0NCj4gPlVuaW9uLkNvbnRp bnVhdGlvblBvaW50ZXIpKTsNCj4gPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUHRyKEMp IC0gMHglbHhcbiIsIChVSU5UNjQpUHRyKSk7DQo+ID4gKyAgICAgIERFQlVHICgoREVCVUdfSU5G TywgIlB0ci0+TGVuZ3RoIC0gMHglbHhcbiIsIFB0ci0+TGVuZ3RoKSk7DQo+ID4gKyAgICAgIERF QlVHICgoREVCVUdfSU5GTywgIlB0ci0+VW5pb24gLSAweCVseFxuIiwNCj4gPiArIFB0ci0+VW5p b24uQ29udGludWF0aW9uUG9pbnRlcikpOw0KPiA+ICAgICAgfSBlbHNlIHsNCj4gPiAgICAgICAg aWYgKCFWYWxpZGF0ZUNhcHN1bGVCeU1lbW9yeVJlc291cmNlIChNZW1vcnlSZXNvdXJjZSwgUHRy LQ0KPiA+VW5pb24uRGF0YUJsb2NrLCBQdHItPkxlbmd0aCkpIHsNCj4gPiAgICAgICAgICByZXR1 cm4gTlVMTDsNCj4gPiBAQCAtMzc1LDE0ICszNzUsMTQgQEAgVmFsaWRhdGVDYXBzdWxlSW50ZWdy aXR5ICgNCj4gPiAgICAgICAgICAvLyBTYW5pdHkgY2hlY2sNCj4gPiAgICAgICAgICAvLw0KPiA+ ICAgICAgICAgIGlmIChQdHItPkxlbmd0aCA8IHNpemVvZihFRklfQ0FQU1VMRV9IRUFERVIpKSB7 DQo+ID4gLSAgICAgICAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiRVJST1I6IFB0ci0+TGVuZ3Ro KDB4JWx4KSA8DQo+IHNpemVvZihFRklfQ0FQU1VMRV9IRUFERVIpXG4iLCBQdHItPkxlbmd0aCkp Ow0KPiA+ICsgICAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkVSUk9SOiBQdHItPkxlbmd0 aCgweCVseCkgPA0KPiA+ICsgc2l6ZW9mKEVGSV9DQVBTVUxFX0hFQURFUilcbiIsIFB0ci0+TGVu Z3RoKSk7DQo+ID4gICAgICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiAgICAgICAgICB9DQo+ID4g ICAgICAgICAgLy8NCj4gPiAgICAgICAgICAvLyBNYWtlIHN1cmUgSGVhZGVyU2l6ZSBmaWVsZCBp cyB2YWxpZA0KPiA+ICAgICAgICAgIC8vDQo+ID4gICAgICAgICAgaWYgKENhcHN1bGVIZWFkZXIt PkhlYWRlclNpemUgPiBDYXBzdWxlSGVhZGVyLT5DYXBzdWxlSW1hZ2VTaXplKQ0KPiB7DQo+ID4g LSAgICAgICAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiRVJST1I6IENhcHN1bGVIZWFkZXItPkhl YWRlclNpemUoMHgleCkgPg0KPiBDYXBzdWxlSGVhZGVyLT5DYXBzdWxlSW1hZ2VTaXplKDB4JXgp XG4iLCBDYXBzdWxlSGVhZGVyLT5IZWFkZXJTaXplLA0KPiBDYXBzdWxlSGVhZGVyLT5DYXBzdWxl SW1hZ2VTaXplKSk7DQo+ID4gKyAgICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6 DQo+ID4gKyBDYXBzdWxlSGVhZGVyLT5IZWFkZXJTaXplKDB4JXgpID4NCj4gPiArIENhcHN1bGVI ZWFkZXItPkNhcHN1bGVJbWFnZVNpemUoMHgleClcbiIsIENhcHN1bGVIZWFkZXItDQo+ID5IZWFk ZXJTaXplLA0KPiA+ICsgQ2Fwc3VsZUhlYWRlci0+Q2Fwc3VsZUltYWdlU2l6ZSkpOw0KPiA+ICAg ICAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gICAgICAgICAgfQ0KPiA+ICAgICAgICAgIGlmIChJ c0NhcHN1bGVDb3JydXB0ZWQgKENhcHN1bGVIZWFkZXIpKSB7IEBAIC0zOTUsNyArMzk1LDcgQEAN Cj4gPiBWYWxpZGF0ZUNhcHN1bGVJbnRlZ3JpdHkgKA0KPiA+ICAgICAgICBpZiAoQ2Fwc3VsZVNp emUgPj0gUHRyLT5MZW5ndGgpIHsNCj4gPiAgICAgICAgICBDYXBzdWxlU2l6ZSA9IENhcHN1bGVT aXplIC0gUHRyLT5MZW5ndGg7DQo+ID4gICAgICAgIH0gZWxzZSB7DQo+ID4gLSAgICAgICAgREVC VUcgKChFRklfRF9FUlJPUiwgIkVSUk9SOiBDYXBzdWxlU2l6ZSgweCVseCkgPCBQdHItDQo+ID5M ZW5ndGgoMHglbHgpXG4iLCBDYXBzdWxlU2l6ZSwgUHRyLT5MZW5ndGgpKTsNCj4gPiArICAgICAg ICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6IENhcHN1bGVTaXplKDB4JWx4KSA8DQo+ID4g KyBQdHItPkxlbmd0aCgweCVseClcbiIsIENhcHN1bGVTaXplLCBQdHItPkxlbmd0aCkpOw0KPiA+ ICAgICAgICAgIC8vDQo+ID4gICAgICAgICAgLy8gU2FuaXR5IGNoZWNrDQo+ID4gICAgICAgICAg Ly8NCj4gPiBAQCAtNDA5LDkgKzQwOSw5IEBAIFZhbGlkYXRlQ2Fwc3VsZUludGVncml0eSAoDQo+ ID4gICAgICAgIGlmICghVmFsaWRhdGVDYXBzdWxlQnlNZW1vcnlSZXNvdXJjZSAoTWVtb3J5UmVz b3VyY2UsDQo+IChFRklfUEhZU0lDQUxfQUREUkVTUykgKFVJTlROKSBQdHIsIHNpemVvZg0KPiAo RUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUikpKSB7DQo+ID4gICAgICAgICAgcmV0dXJuIE5V TEw7DQo+ID4gICAgICAgIH0NCj4gPiAtICAgICAgREVCVUcgKChFRklfRF9JTkZPLCAiUHRyKEIp IC0gMHgleFxuIiwgUHRyKSk7DQo+ID4gLSAgICAgIERFQlVHICgoRUZJX0RfSU5GTywgIlB0ci0+ TGVuZ3RoIC0gMHgleFxuIiwgUHRyLT5MZW5ndGgpKTsNCj4gPiAtICAgICAgREVCVUcgKChFRklf RF9JTkZPLCAiUHRyLT5VbmlvbiAtIDB4JXhcbiIsIFB0ci0NCj4gPlVuaW9uLkNvbnRpbnVhdGlv blBvaW50ZXIpKTsNCj4gPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUHRyKEIpIC0gMHgl bHhcbiIsIChVSU5UNjQpUHRyKSk7DQo+ID4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlB0 ci0+TGVuZ3RoIC0gMHglbHhcbiIsIFB0ci0+TGVuZ3RoKSk7DQo+ID4gKyAgICAgIERFQlVHICgo REVCVUdfSU5GTywgIlB0ci0+VW5pb24gLSAweCVseFxuIiwNCj4gPiArIFB0ci0+VW5pb24uQ29u dGludWF0aW9uUG9pbnRlcikpOw0KPiA+ICAgICAgfQ0KPiA+ICAgIH0NCj4gPg0KPiA+IEBAIC00 MTksNyArNDE5LDcgQEAgVmFsaWRhdGVDYXBzdWxlSW50ZWdyaXR5ICgNCj4gPiAgICAgIC8vDQo+ ID4gICAgICAvLyBObyBhbnkgY2Fwc3VsZSBpcyBmb3VuZCBpbiBCbG9ja0xpc3QNCj4gPiAgICAg IC8vDQo+ID4gLSAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiRVJST1I6IENhcHN1bGVDb3VudCgw eCV4KSA9PSAwXG4iLA0KPiBDYXBzdWxlQ291bnQpKTsNCj4gPiArICAgIERFQlVHICgoREVCVUdf RVJST1IsICJFUlJPUjogQ2Fwc3VsZUNvdW50KDB4JXgpID09IDBcbiIsDQo+ID4gKyBDYXBzdWxl Q291bnQpKTsNCj4gPiAgICAgIHJldHVybiBOVUxMOw0KPiA+ICAgIH0NCj4gPg0KPiA+IEBAIC00 MjcsNyArNDI3LDcgQEAgVmFsaWRhdGVDYXBzdWxlSW50ZWdyaXR5ICgNCj4gPiAgICAgIC8vDQo+ ID4gICAgICAvLyBDYXBzdWxlIGRhdGEgaXMgaW5jb21wbGV0ZS4NCj4gPiAgICAgIC8vDQo+ID4g LSAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiRVJST1I6IENhcHN1bGVTaXplKDB4JWx4KSAhPSAw XG4iLA0KPiBDYXBzdWxlU2l6ZSkpOw0KPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkVS Uk9SOiBDYXBzdWxlU2l6ZSgweCVseCkgIT0gMFxuIiwNCj4gPiArIENhcHN1bGVTaXplKSk7DQo+ ID4gICAgICByZXR1cm4gTlVMTDsNCj4gPiAgICB9DQo+ID4NCj4gPiBAQCAtNTE1LDcgKzUxNSw3 IEBAIFJlbG9jYXRlQmxvY2tEZXNjcmlwdG9ycyAoDQo+ID4gICAgICAgICAgfQ0KPiA+DQo+ID4g ICAgICAgICAgQ29weU1lbSAoKFZPSUQgKikgUmVsb2NCdWZmZXIsIChWT0lEICopIChVSU5UTikg VGVtcEJsb2NrRGVzYy0NCj4gPlVuaW9uLkRhdGFCbG9jaywgKFVJTlROKSBUZW1wQmxvY2tEZXNj LT5MZW5ndGgpOw0KPiA+IC0gICAgICAgIERFQlVHICgoRUZJX0RfSU5GTywgIkNhcHN1bGUgcmVs b2NhdGUgZGVzY3JpcHRvcnMgZnJvbS90by9zaXplDQo+IDB4JWxYIDB4JWxYIDB4JWxYXG4iLCBU ZW1wQmxvY2tEZXNjLT5Vbmlvbi5EYXRhQmxvY2ssDQo+IChVSU5UNjQpKFVJTlROKVJlbG9jQnVm ZmVyLCBUZW1wQmxvY2tEZXNjLT5MZW5ndGgpKTsNCj4gPiArICAgICAgICBERUJVRyAoKERFQlVH X0lORk8sICJDYXBzdWxlIHJlbG9jYXRlIGRlc2NyaXB0b3JzDQo+ID4gKyBmcm9tL3RvL3NpemUg IDB4JWxYIDB4JWxYIDB4JWxYXG4iLCBUZW1wQmxvY2tEZXNjLT5Vbmlvbi5EYXRhQmxvY2ssDQo+ ID4gKyAoVUlOVDY0KShVSU5UTilSZWxvY0J1ZmZlciwgVGVtcEJsb2NrRGVzYy0+TGVuZ3RoKSk7 DQo+ID4gICAgICAgICAgVGVtcEJsb2NrRGVzYy0+VW5pb24uRGF0YUJsb2NrID0gKEVGSV9QSFlT SUNBTF9BRERSRVNTKSAoVUlOVE4pDQo+IFJlbG9jQnVmZmVyOw0KPiA+ICAgICAgICB9DQo+ID4g ICAgICAgIFRlbXBCbG9ja0Rlc2MrKzsNCj4gPiBAQCAtNTUyLDcgKzU1Miw3IEBAIFJlbG9jYXRl QmxvY2tEZXNjcmlwdG9ycyAoDQo+ID4gICAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gICAgICAg IH0NCj4gPiAgICAgICAgQ29weU1lbSAoKFZPSUQgKikgUmVsb2NCdWZmZXIsIChWT0lEICopIEN1 cnJCbG9ja0Rlc2NIZWFkLA0KPiBCbG9ja0xpc3RTaXplKTsNCj4gPiAtICAgICAgREVCVUcgKChF RklfRF9JTkZPLCAiQ2Fwc3VsZSByZWxvYyBkZXNjcmlwdG9yIGJsb2NrICMyXG4iKSk7DQo+ID4g KyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIkNhcHN1bGUgcmVsb2MgZGVzY3JpcHRvciBibG9j ayAjMlxuIikpOw0KPiA+ICAgICAgICAvLw0KPiA+ICAgICAgICAvLyBQb2ludCB0aGUgcHJldmlv dXMgYmxvY2sncyBuZXh0IHBvaW50IHRvIHRoaXMgY29waWVkIHZlcnNpb24uIElmDQo+ID4gICAg ICAgIC8vIHRoZSB0YWlsIHBvaW50ZXIgaXMgbnVsbCwgdGhlbiB0aGlzIGlzIHRoZSBmaXJzdCBk ZXNjcmlwdG9yIGJsb2NrLg0KPiA+IEBAIC02NTEsNyArNjUxLDcgQEAgR2V0Q2Fwc3VsZUluZm8g KA0KPiA+ICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzQ2Fwc3VsZUltYWdl U2l6ZTsNCj4gPiAgICBFRklfQ0FQU1VMRV9IRUFERVIgICAgICAgICAgICAgKkNhcHN1bGVIZWFk ZXI7DQo+ID4NCj4gPiAtICBERUJVRyAoKEVGSV9EX0lORk8sICJHZXRDYXBzdWxlSW5mbyBlbnRl clxuIikpOw0KPiA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIkdldENhcHN1bGVJbmZvIGVudGVy XG4iKSk7DQo+ID4NCj4gPiAgICBBU1NFUlQgKERlc2MgIT0gTlVMTCk7DQo+ID4NCj4gPiBAQCAt NjczLDcgKzY3Myw3IEBAIEdldENhcHN1bGVJbmZvICgNCj4gPiAgICAgICAgLy8gV2hpbGUgaGVy ZSB3ZSBuZWVkIGNoZWNrIGFsbCBjYXBzdWxlcyBzaXplLg0KPiA+ICAgICAgICAvLw0KPiA+ICAg ICAgICBpZiAoRGVzYy0+TGVuZ3RoID49IChNQVhfQUREUkVTUyAtIFNpemUpKSB7DQo+ID4gLSAg ICAgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIkVSUk9SOiBEZXNjLT5MZW5ndGgoMHglbHgpID49 DQo+IChNQVhfQUREUkVTUyAtIFNpemUoMHgleCkpXG4iLCBEZXNjLT5MZW5ndGgsIFNpemUpKTsN Cj4gPiArICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6IERlc2MtPkxlbmd0aCgw eCVseCkgPj0NCj4gPiArIChNQVhfQUREUkVTUyAtIFNpemUoMHgleCkpXG4iLCBEZXNjLT5MZW5n dGgsIFNpemUpKTsNCj4gPiAgICAgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ ID4gICAgICAgIH0NCj4gPiAgICAgICAgU2l6ZSArPSAoVUlOVE4pIERlc2MtPkxlbmd0aDsNCj4g PiBAQCAtNzA3LDcgKzcwNyw3IEBAIEdldENhcHN1bGVJbmZvICgNCj4gPiAgICAvLyBJZiBubyBk ZXNjcmlwdG9ycywgdGhlbiBmYWlsDQo+ID4gICAgLy8NCj4gPiAgICBpZiAoQ291bnQgPT0gMCkg ew0KPiA+IC0gICAgREVCVUcgKChFRklfRF9FUlJPUiwgIkVSUk9SOiBDb3VudCA9PSAwXG4iKSk7 DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6IENvdW50ID09IDBcbiIpKTsN Cj4gPiAgICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiA+ICAgIH0NCj4gPg0KPiA+IEBAIC03 ODcsNyArNzg3LDcgQEAgQ2Fwc3VsZVRlc3RQYXR0ZXJuUHJlQ29hbGVzY2UgKA0KPiA+ICAgIFVJ TlQzMiAgVGVzdENvdW50ZXI7DQo+ID4gICAgVUlOVDMyICBUZXN0U2l6ZTsNCj4gPg0KPiA+IC0g IERFQlVHICgoRUZJX0RfSU5GTywgIkNhcHN1bGVUZXN0UGF0dGVyblByZUNvYWxlc2NlXG4iKSk7 DQo+ID4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiQ2Fwc3VsZVRlc3RQYXR0ZXJuUHJlQ29hbGVz Y2VcbiIpKTsNCj4gPg0KPiA+ICAgIC8vDQo+ID4gICAgLy8gRmluZCBmaXJzdCBkYXRhIGRlc2Ny aXB0b3INCj4gPiBAQCAtODAzLDcgKzgwMyw3IEBAIENhcHN1bGVUZXN0UGF0dGVyblByZUNvYWxl c2NlICgNCj4gPiAgICAvLyBGaXJzdCBvbmUgYmV0dGVyIGJlIGxvbmcgZW5vdWdoIHRvIGF0IGxl YXN0IGhvbGQgdGhlIHRlc3Qgc2lnbmF0dXJlDQo+ID4gICAgLy8NCj4gPiAgICBpZiAoRGVzYy0+ TGVuZ3RoIDwgc2l6ZW9mIChVSU5UMzIpKSB7DQo+ID4gLSAgICBERUJVRyAoKEVGSV9EX0lORk8s ICJDYXBzdWxlIHRlc3QgcGF0dGVybiBwcmUtY29hbGVzY2UgcHVudGVkDQo+ICMxXG4iKSk7DQo+ ID4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJDYXBzdWxlIHRlc3QgcGF0dGVybiBwcmUtY29h bGVzY2UgcHVudGVkDQo+ID4gKyAjMVxuIikpOw0KPiA+ICAgICAgcmV0dXJuIDsNCj4gPiAgICB9 DQo+ID4NCj4gPiBAQCAtODIzLDEzICs4MjMsMTMgQEAgQ2Fwc3VsZVRlc3RQYXR0ZXJuUHJlQ29h bGVzY2UgKA0KPiA+ICAgIFRlc3RQdHIgKz0gMjsNCj4gPiAgICB3aGlsZSAoMSkgew0KPiA+ICAg ICAgaWYgKChUZXN0U2l6ZSAmIDB4MDMpICE9IDApIHsNCj4gPiAtICAgICAgREVCVUcgKChFRklf RF9JTkZPLCAiQ2Fwc3VsZSB0ZXN0IHBhdHRlcm4gcHJlLWNvYWxlc2NlIHB1bnRlZA0KPiAjMlxu IikpOw0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJDYXBzdWxlIHRlc3QgcGF0dGVy biBwcmUtY29hbGVzY2UgcHVudGVkDQo+ID4gKyAjMlxuIikpOw0KPiA+ICAgICAgICByZXR1cm4g Ow0KPiA+ICAgICAgfQ0KPiA+DQo+ID4gICAgICB3aGlsZSAoVGVzdFNpemUgPiAwKSB7DQo+ID4g ICAgICAgIGlmICgqVGVzdFB0ciAhPSBUZXN0Q291bnRlcikgew0KPiA+IC0gICAgICAgIERFQlVH ICgoRUZJX0RfSU5GTywgIkNhcHN1bGUgdGVzdCBwYXR0ZXJuIHByZS1jb2FsZXNjZSBmYWlsZWQg ZGF0YQ0KPiBjb3JydXB0aW9uIGNoZWNrXG4iKSk7DQo+ID4gKyAgICAgICAgREVCVUcgKChERUJV R19JTkZPLCAiQ2Fwc3VsZSB0ZXN0IHBhdHRlcm4gcHJlLWNvYWxlc2NlIGZhaWxlZA0KPiA+ICsg ZGF0YSBjb3JydXB0aW9uIGNoZWNrXG4iKSk7DQo+ID4gICAgICAgICAgcmV0dXJuIDsNCj4gPiAg ICAgICAgfQ0KPiA+DQo+ID4gQEAgLTg3Myw3ICs4NzMsNyBAQCBCdWlsZENhcHN1bGVEZXNjcmlw dG9ycyAoDQo+ID4gICAgRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUiAgICAgKlRlbXBCbG9j azsNCj4gPiAgICBFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQVE9SICAgICAqSGVhZEJsb2NrOw0K PiA+DQo+ID4gLSAgREVCVUcgKChFRklfRF9JTkZPLCAiQnVpbGRDYXBzdWxlRGVzY3JpcHRvcnMg ZW50ZXJcbiIpKTsNCj4gPiArICBERUJVRyAoKERFQlVHX0lORk8sICJCdWlsZENhcHN1bGVEZXNj cmlwdG9ycyBlbnRlclxuIikpOw0KPiA+DQo+ID4gICAgTGFzdEJsb2NrICAgICAgICAgPSBOVUxM Ow0KPiA+ICAgIEhlYWRCbG9jayAgICAgICAgID0gTlVMTDsNCj4gPiBAQCAtOTA0LDcgKzkwNCw3 IEBAIEJ1aWxkQ2Fwc3VsZURlc2NyaXB0b3JzICgNCj4gPiAgICAgICAgICB9DQo+ID4gICAgICAg IH0NCj4gPiAgICAgIH0gZWxzZSB7DQo+ID4gLSAgICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJF UlJPUjogQmxvY2tMaXN0QnVmZmVyW0luZGV4XSgweCVseCkgPA0KPiBNQVhfQUREUkVTU1xuIiwg QmxvY2tMaXN0QnVmZmVyW0luZGV4XSkpOw0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9S LCAiRVJST1I6IEJsb2NrTGlzdEJ1ZmZlcltJbmRleF0oMHglbHgpIDwNCj4gPiArIE1BWF9BRERS RVNTXG4iLCBCbG9ja0xpc3RCdWZmZXJbSW5kZXhdKSk7DQo+ID4gICAgICB9DQo+ID4gICAgICBJ bmRleCArKzsNCj4gPiAgICB9DQo+ID4gQEAgLTEwMjIsNyArMTAyMiw3IEBAIENhcHN1bGVEYXRh Q29hbGVzY2UgKA0KPiA+ICAgIEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IgICAqVGVtcEJs b2NrRGVzYzsNCj4gPiAgICBFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQVE9SICAgUHJpdmF0ZURh dGFEZXNjWzJdOw0KPiA+DQo+ID4gLSAgREVCVUcgKChFRklfRF9JTkZPLCAiQ2Fwc3VsZURhdGFD b2FsZXNjZSBlbnRlclxuIikpOw0KPiA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIkNhcHN1bGVE YXRhQ29hbGVzY2UgZW50ZXJcbiIpKTsNCj4gPg0KPiA+ICAgIENhcHN1bGVJbmRleCAgICAgPSAw Ow0KPiA+ICAgIFNpemVMZWZ0ICAgICAgICAgPSAwOw0KPiA+IEBAIC0xMDU1LDE1ICsxMDU1LDE1 IEBAIENhcHN1bGVEYXRhQ29hbGVzY2UgKA0KPiA+ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiAgICAgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgfQ0KPiA+IC0gIERFQlVHICgoRUZJ X0RfSU5GTywgIkNhcHN1bGVTaXplIC0gMHgleFxuIiwgQ2Fwc3VsZVNpemUpKTsNCj4gPiAtICBE RUJVRyAoKEVGSV9EX0lORk8sICJDYXBzdWxlTnVtYmVyIC0gMHgleFxuIiwgQ2Fwc3VsZU51bWJl cikpOw0KPiA+IC0gIERFQlVHICgoRUZJX0RfSU5GTywgIk51bURlc2NyaXB0b3JzIC0gMHgleFxu IiwgTnVtRGVzY3JpcHRvcnMpKTsNCj4gPiArICBERUJVRyAoKERFQlVHX0lORk8sICJDYXBzdWxl U2l6ZSAtIDB4JXhcbiIsIENhcHN1bGVTaXplKSk7ICBERUJVRw0KPiA+ICsgKChERUJVR19JTkZP LCAiQ2Fwc3VsZU51bWJlciAtIDB4JXhcbiIsIENhcHN1bGVOdW1iZXIpKTsNCj4gDQo+IFRoaXMg aXMgY29uZnVzZSBDYXBzdWxlTnVtYmVyIGlzIGRlY2xhcmVkIFVJTlQ2NCBpbg0KPiBNZGVNb2R1 bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVQZWkvQ29tbW9uL0NvbW1vbkhlYWRlci5oIGFuZCB3ZQ0K PiB1c2UgYSBVSU5UTiBoZXJlLiBXaHkgbm90IGtlZXAgVUlOVDY0IGFuZCB1c2UgIiVseCI/DQo+ IA0KPiA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIk51bURlc2NyaXB0b3JzIC0gMHgleFxuIiwg TnVtRGVzY3JpcHRvcnMpKTsNCj4gPiAgICBpZiAoKENhcHN1bGVTaXplID09IDApIHx8IChOdW1E ZXNjcmlwdG9ycyA9PSAwKSB8fCAoQ2Fwc3VsZU51bWJlciA9PSAwKSkNCj4gew0KPiA+ICAgICAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gICAgfQ0KPiA+DQo+ID4gICAgaWYgKENhcHN1bGVO dW1iZXIgLSAxID49IChNQVhfQUREUkVTUyAtIChzaXplb2YNCj4gKEVGSV9DQVBTVUxFX1BFSU1f UFJJVkFURV9EQVRBKSAgKyBzaXplb2YoVUlOVDY0KSkpIC8gc2l6ZW9mKFVJTlQ2NCkpIHsNCj4g PiAtICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJFUlJPUjogQ2Fwc3VsZU51bWJlciAtIDB4JXhc biIsDQo+IENhcHN1bGVOdW1iZXIpKTsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJF UlJPUjogQ2Fwc3VsZU51bWJlciAtIDB4JXhcbiIsDQo+ID4gKyBDYXBzdWxlTnVtYmVyKSk7DQo+ ID4gICAgICByZXR1cm4gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+ID4gICAgfQ0KPiA+DQo+ID4g QEAgLTEwOTMsNyArMTA5Myw3IEBAIENhcHN1bGVEYXRhQ29hbGVzY2UgKA0KPiA+ICAgIC8vIFNh bml0eSBjaGVjaw0KPiA+ICAgIC8vDQo+ID4gICAgaWYgKENhcHN1bGVTaXplID49IChNQVhfQURE UkVTUyAtIChzaXplb2YNCj4gKEVGSV9DQVBTVUxFX1BFSU1fUFJJVkFURV9EQVRBKSArIChDYXBz dWxlTnVtYmVyIC0gMSkgKg0KPiBzaXplb2YoVUlOVDY0KSArIHNpemVvZihVSU5UNjQpKSkpIHsN Cj4gPiAtICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJFUlJPUjogQ2Fwc3VsZVNpemUgLSAweCV4 XG4iLCBDYXBzdWxlU2l6ZSkpOw0KPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkVSUk9S OiBDYXBzdWxlU2l6ZSAtIDB4JXhcbiIsDQo+ID4gKyBDYXBzdWxlU2l6ZSkpOw0KPiA+ICAgICAg cmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KPiA+ICAgIH0NCj4gPiAgICAvLw0KPiA+IEBA IC0xMTA1LDcgKzExMDUsNyBAQCBDYXBzdWxlRGF0YUNvYWxlc2NlICgNCj4gPiAgICAvLyBTYW5p dHkgY2hlY2sNCj4gPiAgICAvLw0KPiA+ICAgIGlmIChOdW1EZXNjcmlwdG9ycyA+PSAoTUFYX0FE RFJFU1MgLw0KPiBzaXplb2YoRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUikpKSB7DQo+ID4g LSAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiRVJST1I6IE51bURlc2NyaXB0b3JzIC0gMHgleFxu IiwNCj4gTnVtRGVzY3JpcHRvcnMpKTsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJF UlJPUjogTnVtRGVzY3JpcHRvcnMgLSAweCV4XG4iLA0KPiA+ICsgTnVtRGVzY3JpcHRvcnMpKTsN Cj4gPiAgICAgIHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsNCj4gPiAgICB9DQo+ID4gICAg RGVzY3JpcHRvcnNTaXplICA9IE51bURlc2NyaXB0b3JzICogc2l6ZW9mDQo+ID4gKEVGSV9DQVBT VUxFX0JMT0NLX0RFU0NSSVBUT1IpOyBAQCAtMTExMyw3ICsxMTEzLDcgQEANCj4gQ2Fwc3VsZURh dGFDb2FsZXNjZSAoDQo+ID4gICAgLy8gU2FuaXR5IGNoZWNrDQo+ID4gICAgLy8NCj4gPiAgICBp ZiAoRGVzY3JpcHRvcnNTaXplID49IChNQVhfQUREUkVTUyAtIENhcHN1bGVTaXplKSkgew0KPiA+ IC0gICAgREVCVUcgKChFRklfRF9FUlJPUiwgIkVSUk9SOiBEZXNjcmlwdG9yc1NpemUgLSAweCVs eCwgQ2Fwc3VsZVNpemUgLQ0KPiAweCVseFxuIiwgKFVJTlQ2NClEZXNjcmlwdG9yc1NpemUsIChV SU5UNjQpQ2Fwc3VsZVNpemUpKTsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJFUlJP UjogRGVzY3JpcHRvcnNTaXplIC0gMHglbHgsIENhcHN1bGVTaXplDQo+ID4gKyAtIDB4JWx4XG4i LCAoVUlOVDY0KURlc2NyaXB0b3JzU2l6ZSwgKFVJTlQ2NClDYXBzdWxlU2l6ZSkpOw0KPiA+ICAg ICAgcmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KPiA+ICAgIH0NCj4gPg0KPiA+IEBAIC0x MTIxLDEwICsxMTIxLDEwIEBAIENhcHN1bGVEYXRhQ29hbGVzY2UgKA0KPiA+ICAgIC8vIERvbid0 IGdvIGJlbG93IHNvbWUgbWluIGFkZHJlc3MuIElmIHRoZSBiYXNlIGlzIGJlbG93IGl0LA0KPiA+ ICAgIC8vIHRoZW4gbW92ZSBpdCB1cCBhbmQgYWRqdXN0IHRoZSBzaXplIGFjY29yZGluZ2x5Lg0K PiA+ICAgIC8vDQo+ID4gLSAgREVCVUcgKChFRklfRF9JTkZPLCAiQ2Fwc3VsZSBNZW1vcnkgcmFu Z2UgZnJvbSAweCU4WCB0byAweCU4WFxuIiwNCj4gPiAoVUlOVE4pICpNZW1vcnlCYXNlLCAoVUlO VE4pKk1lbW9yeUJhc2UgKyAqTWVtb3J5U2l6ZSkpOw0KPiA+ICsgIERFQlVHICgoREVCVUdfSU5G TywgIkNhcHN1bGUgTWVtb3J5IHJhbmdlIGZyb20gMHglOFggdG8NCj4gMHglOFhcbiIsDQo+ID4g KyAoVUlOVE4pICpNZW1vcnlCYXNlLCAoVUlOVE4pKk1lbW9yeUJhc2UgKyAqTWVtb3J5U2l6ZSkp Ow0KPiANCj4gRG9uJ3QgeW91IGFsc28gd2FudCB0byBjYXN0IHRvIFVJTlQ2NCBhbmQgdXNlICIl bFgiIGhlcmU/DQo+IA0KPiA+ICAgIGlmICgoVUlOVE4pKk1lbW9yeUJhc2UgPCAoVUlOVE4pIE1J Tl9DT0FMRVNDRV9BRERSKSB7DQo+ID4gICAgICBpZiAoKChVSU5UTikqTWVtb3J5QmFzZSArICpN ZW1vcnlTaXplKSA8IChVSU5UTikNCj4gTUlOX0NPQUxFU0NFX0FERFIpIHsNCj4gPiAtICAgICAg REVCVUcgKChFRklfRF9FUlJPUiwgIkVSUk9SOiAqTWVtb3J5QmFzZSArICpNZW1vcnlTaXplIC0N Cj4gMHgleFxuIiwgKFVJTlROKSpNZW1vcnlCYXNlICsgKk1lbW9yeVNpemUpKTsNCj4gPiArICAg ICAgREVCVUcgKChERUJVR19FUlJPUiwgIkVSUk9SOiAqTWVtb3J5QmFzZSArICpNZW1vcnlTaXpl IC0NCj4gPiArIDB4JXhcbiIsIChVSU5UTikqTWVtb3J5QmFzZSArICpNZW1vcnlTaXplKSk7DQo+ ID4gICAgICAgIHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsNCj4gPiAgICAgIH0gZWxzZSB7 DQo+ID4gICAgICAgICpNZW1vcnlTaXplID0gKk1lbW9yeVNpemUgLSAoKFVJTlROKSBNSU5fQ09B TEVTQ0VfQUREUiAtDQo+ID4gKFVJTlROKSAqTWVtb3J5QmFzZSk7IEBAIC0xMTMzLDEzICsxMTMz LDEzIEBAIENhcHN1bGVEYXRhQ29hbGVzY2UNCj4gKA0KPiA+ICAgIH0NCj4gPg0KPiA+ICAgIGlm ICgqTWVtb3J5U2l6ZSA8PSAoQ2Fwc3VsZVNpemUgKyBEZXNjcmlwdG9yc1NpemUpKSB7DQo+ID4g LSAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiRVJST1I6IENhcHN1bGVTaXplICsgRGVzY3JpcHRv cnNTaXplIC0NCj4gMHgleFxuIiwgQ2Fwc3VsZVNpemUgKyBEZXNjcmlwdG9yc1NpemUpKTsNCj4g PiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJFUlJPUjogQ2Fwc3VsZVNpemUgKyBEZXNjcmlw dG9yc1NpemUgLQ0KPiA+ICsgMHgleFxuIiwgQ2Fwc3VsZVNpemUgKyBEZXNjcmlwdG9yc1NpemUp KTsNCj4gPiAgICAgIHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsNCj4gPiAgICB9DQo+ID4N Cj4gPiAgICBGcmVlTWVtQmFzZSA9ICpNZW1vcnlCYXNlOw0KPiA+ICAgIEZyZWVNZW1TaXplID0g Kk1lbW9yeVNpemU7DQo+ID4gLSAgREVCVUcgKChFRklfRF9JTkZPLCAiQ2Fwc3VsZSBGcmVlIE1l bW9yeSBmcm9tIDB4JThYIHRvIDB4JThYXG4iLA0KPiA+IChVSU5UTikgRnJlZU1lbUJhc2UsIChV SU5UTikgRnJlZU1lbUJhc2UgKyBGcmVlTWVtU2l6ZSkpOw0KPiA+ICsgIERFQlVHICgoREVCVUdf SU5GTywgIkNhcHN1bGUgRnJlZSBNZW1vcnkgZnJvbSAweCU4WCB0byAweCU4WFxuIiwNCj4gPiAr IChVSU5UTikgRnJlZU1lbUJhc2UsIChVSU5UTikgRnJlZU1lbUJhc2UgKyBGcmVlTWVtU2l6ZSkp Ow0KPiA+DQo+ID4gICAgLy8NCj4gPiAgICAvLyBSZWxvY2F0ZSBhbGwgdGhlIGJsb2NrIGRlc2Ny aXB0b3JzIHRvIGxvdyBtZW1vcnkgdG8gbWFrZSBmdXJ0aGVyDQo+ID4gQEAgLTEyMDUsNyArMTIw NSw3IEBAIENhcHN1bGVEYXRhQ29hbGVzY2UgKA0KPiA+ICAgICAgICAgIH0NCj4gPg0KPiA+ICAg ICAgICAgIENvcHlNZW0gKChWT0lEICopIFJlbG9jUHRyLCAoVk9JRCAqKSAoVUlOVE4pIFRlbXBC bG9ja0Rlc2MtDQo+ID5Vbmlvbi5EYXRhQmxvY2ssIChVSU5UTikgVGVtcEJsb2NrRGVzYy0+TGVu Z3RoKTsNCj4gPiAtICAgICAgICBERUJVRyAoKEVGSV9EX0lORk8sICJDYXBzdWxlIHJlbG9jIGRh dGEgYmxvY2sgZnJvbSAweCU4WCB0byAweCU4WA0KPiB3aXRoIHNpemUgMHglOFhcbiIsDQo+ID4g KyAgICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiQ2Fwc3VsZSByZWxvYyBkYXRhIGJsb2NrIGZy b20gMHglOFggdG8NCj4gPiArIDB4JThYIHdpdGggc2l6ZSAweCU4WFxuIiwNCj4gPiAgICAgICAg ICAgICAgICAgIChVSU5UTikgVGVtcEJsb2NrRGVzYy0+VW5pb24uRGF0YUJsb2NrLCAoVUlOVE4p DQo+ID4gUmVsb2NQdHIsIChVSU5UTikgVGVtcEJsb2NrRGVzYy0+TGVuZ3RoKSk7DQo+ID4NCj4g PiAgICAgICAgICBUZW1wQmxvY2tEZXNjLT5Vbmlvbi5EYXRhQmxvY2sgPSAoRUZJX1BIWVNJQ0FM X0FERFJFU1MpDQo+ID4gKFVJTlROKSBSZWxvY1B0cjsgQEAgLTEyNTYsNyArMTI1Niw3IEBAIENh cHN1bGVEYXRhQ29hbGVzY2UgKA0KPiA+ICAgICAgICBBU1NFUlQgKEN1cnJlbnRCbG9ja0Rlc2Mt Pkxlbmd0aCA8PSBTaXplTGVmdCk7DQo+ID4NCj4gPiAgICAgICAgQ29weU1lbSAoKFZPSUQgKikg RGVzdFB0ciwgKFZPSUQgKikgKFVJTlROKSAoQ3VycmVudEJsb2NrRGVzYy0NCj4gPlVuaW9uLkRh dGFCbG9jayksIChVSU5UTilDdXJyZW50QmxvY2tEZXNjLT5MZW5ndGgpOw0KPiA+IC0gICAgICBE RUJVRyAoKEVGSV9EX0lORk8sICJDYXBzdWxlIGNvYWxlc2NlIGJsb2NrIG5vLjB4JWxYIGZyb20g MHglbFggdG8NCj4gMHglbFggd2l0aCBzaXplIDB4JWxYXG4iLChVSU5UNjQpQ2Fwc3VsZVRpbWVz LA0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJDYXBzdWxlIGNvYWxlc2NlIGJsb2Nr IG5vLjB4JWxYIGZyb20gMHglbFgNCj4gPiArIHRvIDB4JWxYIHdpdGggc2l6ZSAweCVsWFxuIiwo VUlOVDY0KUNhcHN1bGVUaW1lcywNCj4gPiAgICAgICAgICAgICAgIEN1cnJlbnRCbG9ja0Rlc2Mt PlVuaW9uLkRhdGFCbG9jaywgKFVJTlQ2NCkoVUlOVE4pRGVzdFB0ciwNCj4gQ3VycmVudEJsb2Nr RGVzYy0+TGVuZ3RoKSk7DQo+ID4gICAgICAgIERlc3RQdHIgKz0gQ3VycmVudEJsb2NrRGVzYy0+ TGVuZ3RoOw0KPiA+ICAgICAgICBTaXplTGVmdCAtPSBDdXJyZW50QmxvY2tEZXNjLT5MZW5ndGg7 IGRpZmYgLS1naXQNCj4gPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvQ2Fwc3VsZVBlaS9VZWZp Q2Fwc3VsZS5jDQo+ID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVQZWkvVWVmaUNh cHN1bGUuYw0KPiA+IGluZGV4IDExMzEwOTRjNGYuLmY1ZWMxYzIwZWMgMTAwNjQ0DQo+ID4gLS0t IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9DYXBzdWxlUGVpL1VlZmlDYXBzdWxlLmMNCj4gPiAr KysgYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVQZWkvVWVmaUNhcHN1bGUuYw0KPiA+ IEBAIC00MjcsNyArNDI3LDcgQEAgTW9kZVN3aXRjaCAoDQo+ID4gICAgICBpZiAoUmVzZXJ2ZWRS YW5nZUVuZCA8IE1lbW9yeUVuZDY0KSB7DQo+ID4gICAgICAgIE1lbW9yeUJhc2U2NCA9IFJlc2Vy dmVkUmFuZ2VFbmQ7DQo+ID4gICAgICB9IGVsc2Ugew0KPiA+IC0gICAgICBERUJVRyAoKEVGSV9E X0VSUk9SLCAiTWVtb3J5IGlzIG5vdCBlbm91Z2ggdG8gcHJvY2Vzcw0KPiBjYXBzdWxlIVxuIikp Ow0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiTWVtb3J5IGlzIG5vdCBlbm91Z2gg dG8gcHJvY2Vzcw0KPiA+ICsgY2Fwc3VsZSFcbiIpKTsNCj4gPiAgICAgICAgcmV0dXJuIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICAgICAgfQ0KPiA+ICAgIH0gZWxzZSBpZiAoUmVzZXJ2ZWRS YW5nZUJhc2UgPCBNZW1vcnlFbmQ2NCkgeyBAQCAtNTI1LDcgKzUyNSw3IEBADQo+ID4gRmluZENh cHN1bGVDb2FsZXNjZUltYWdlICgNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkF1 dGhlbnRpY2F0aW9uU3RhdGUNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4g PiAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+IC0gICAgICAgIERFQlVHICgo RUZJX0RfRVJST1IsICJVbmFibGUgdG8gZmluZCBQRTMyIHNlY3Rpb24gaW4gQ2Fwc3VsZVg2NA0K PiBpbWFnZSBmZnMgJXIhXG4iLCBTdGF0dXMpKTsNCj4gPiArICAgICAgICBERUJVRyAoKERFQlVH X0VSUk9SLCAiVW5hYmxlIHRvIGZpbmQgUEUzMiBzZWN0aW9uIGluDQo+ID4gKyBDYXBzdWxlWDY0 IGltYWdlIGZmcyAlciFcbiIsIFN0YXR1cykpOw0KPiA+ICAgICAgICAgIHJldHVybiBTdGF0dXM7 DQo+ID4gICAgICAgIH0NCj4gPiAgICAgICAgKkNvYWxlc2NlSW1hZ2VNYWNoaW5lVHlwZSA9IFBl Q29mZkxvYWRlckdldE1hY2hpbmVUeXBlICgoVk9JRA0KPiA+ICopIChVSU5UTikgQ29hbGVzY2VJ bWFnZUFkZHJlc3MpOyBAQCAtNTc0LDcgKzU3NCw3IEBADQo+IEdldExvbmdNb2RlQ29udGV4dCAo DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb25nTW9kZUJ1ZmZlcg0K PiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gLSAgICBERUJVRyAoKCBFRklfRF9FUlJPUiwgIkVycm9y IEdldCBMb25nTW9kZUJ1ZmZlciB2YXJpYWJsZSAlciFcbiIsDQo+IFN0YXR1cykpOw0KPiA+ICsg ICAgREVCVUcgKCggREVCVUdfRVJST1IsICJFcnJvciBHZXQgTG9uZ01vZGVCdWZmZXIgdmFyaWFi bGUgJXIhXG4iLA0KPiA+ICsgU3RhdHVzKSk7DQo+ID4gICAgfQ0KPiA+ICAgIHJldHVybiBTdGF0 dXM7DQo+ID4gIH0NCj4gPiBAQCAtNzM0LDcgKzczNCw3IEBAIEJ1aWxkTWVtb3J5UmVzb3VyY2VE ZXNjcmlwdG9yICgNCj4gPiAgICB9DQo+ID4NCj4gPiAgICBpZiAoSW5kZXggPT0gMCkgew0KPiA+ IC0gICAgREVCVUcgKChFRklfRF9JTkZPIHwgRUZJX0RfV0FSTiwgIk5vIG1lbW9yeSByZXNvdXJj ZSBkZXNjcmlwdG9yDQo+IHJlcG9ydGVkIGluIEhPQiBsaXN0IGJlZm9yZSBjYXBzdWxlIENvYWxl c2NlXG4iKSk7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0lORk8gfCBERUJVR19XQVJOLCAiTm8g bWVtb3J5IHJlc291cmNlDQo+IGRlc2NyaXB0b3INCj4gPiArIHJlcG9ydGVkIGluIEhPQiBsaXN0 IGJlZm9yZSBjYXBzdWxlIENvYWxlc2NlXG4iKSk7DQo+ID4gICNpZiBkZWZpbmVkIChNREVfQ1BV X0lBMzIpIHx8IGRlZmluZWQgKE1ERV9DUFVfWDY0KQ0KPiA+ICAgICAgLy8NCj4gPiAgICAgIC8v IEFsbG9jYXRlIG1lbW9yeSB0byBob2xkIG1lbW9yeSByZXNvdXJjZSBkZXNjcmlwdG9yLCBAQCAt NzQ2LDcNCj4gPiArNzQ2LDcgQEAgQnVpbGRNZW1vcnlSZXNvdXJjZURlc2NyaXB0b3IgKA0KPiA+ DQo+ID4gICAgICBNZW1vcnlSZXNvdXJjZVswXS5QaHlzaWNhbFN0YXJ0ID0gMDsNCj4gPiAgICAg IE1lbW9yeVJlc291cmNlWzBdLlJlc291cmNlTGVuZ3RoID0gTFNoaWZ0VTY0ICgxLA0KPiBHZXRQ aHlzaWNhbEFkZHJlc3NCaXRzICgpKTsNCj4gPiAtICAgIERFQlVHICgoRUZJX0RfSU5GTywgIk1l bW9yeVJlc291cmNlWzB4MF0gLSBTdGFydCgweCUwbHgpDQo+IExlbmd0aCgweCUwbHgpXG4iLA0K PiA+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiTWVtb3J5UmVzb3VyY2VbMHgwXSAtIFN0YXJ0 KDB4JTBseCkNCj4gPiArIExlbmd0aCgweCUwbHgpXG4iLA0KPiA+ICAgICAgICAgICAgICAgICAg ICAgICAgICBNZW1vcnlSZXNvdXJjZVsweDBdLlBoeXNpY2FsU3RhcnQsDQo+IE1lbW9yeVJlc291 cmNlWzB4MF0uUmVzb3VyY2VMZW5ndGgpKTsNCj4gPiAgICAgIHJldHVybiBNZW1vcnlSZXNvdXJj ZTsNCj4gPiAgI2Vsc2UNCj4gPiBAQCAtNzcwLDcgKzc3MCw3IEBAIEJ1aWxkTWVtb3J5UmVzb3Vy Y2VEZXNjcmlwdG9yICgNCj4gPiAgICB3aGlsZSAoSG9iLlJhdyAhPSBOVUxMKSB7DQo+ID4gICAg ICBSZXNvdXJjZURlc2NyaXB0b3IgPSAoRUZJX0hPQl9SRVNPVVJDRV9ERVNDUklQVE9SICopIEhv Yi5SYXc7DQo+ID4gICAgICBpZiAoUmVzb3VyY2VEZXNjcmlwdG9yLT5SZXNvdXJjZVR5cGUgPT0N Cj4gRUZJX1JFU09VUkNFX1NZU1RFTV9NRU1PUlkpIHsNCj4gPiAtICAgICAgREVCVUcgKChFRklf RF9JTkZPLCAiTWVtb3J5UmVzb3VyY2VbMHgleF0gLSBTdGFydCgweCUwbHgpDQo+IExlbmd0aCgw eCUwbHgpXG4iLA0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJNZW1vcnlSZXNvdXJj ZVsweCV4XSAtIFN0YXJ0KDB4JTBseCkNCj4gPiArIExlbmd0aCgweCUwbHgpXG4iLA0KPiA+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4LCBSZXNvdXJjZURlc2NyaXB0b3ItPlBoeXNp Y2FsU3RhcnQsDQo+IFJlc291cmNlRGVzY3JpcHRvci0+UmVzb3VyY2VMZW5ndGgpKTsNCj4gPiAg ICAgICAgTWVtb3J5UmVzb3VyY2VbSW5kZXhdLlBoeXNpY2FsU3RhcnQgPSBSZXNvdXJjZURlc2Ny aXB0b3ItDQo+ID5QaHlzaWNhbFN0YXJ0Ow0KPiA+ICAgICAgICBNZW1vcnlSZXNvdXJjZVtJbmRl eF0uUmVzb3VyY2VMZW5ndGggPQ0KPiA+IFJlc291cmNlRGVzY3JpcHRvci0+UmVzb3VyY2VMZW5n dGg7DQo+ID4gQEAgLTk3Myw3ICs5NzMsNyBAQCBDYXBzdWxlQ29hbGVzY2UgKA0KPiA+ICAgIC8v DQo+ID4gICAgU3RhdHVzID0gUGVpU2VydmljZXNHZXRCb290TW9kZSAoJkJvb3RNb2RlKTsNCj4g PiAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpIHx8IChCb290TW9kZSAhPSBCT09UX09OX0ZMQVNI X1VQREFURSkpIHsNCj4gPiAtICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJCb290IG1vZGUgaXMg bm90IGNvcnJlY3QgZm9yIGNhcHN1bGUgdXBkYXRlDQo+IHBhdGguXG4iKSk7DQo+ID4gKyAgICBE RUJVRyAoKERFQlVHX0VSUk9SLCAiQm9vdCBtb2RlIGlzIG5vdCBjb3JyZWN0IGZvciBjYXBzdWxl IHVwZGF0ZQ0KPiA+ICsgcGF0aC5cbiIpKTsNCj4gPiAgICAgIFN0YXR1cyA9IEVGSV9OT1RfRk9V TkQ7DQo+ID4gICAgICBnb3RvIERvbmU7DQo+ID4gICAgfQ0KPiA+IEBAIC0xMDE2LDE0ICsxMDE2 LDE0IEBAIENhcHN1bGVDb2FsZXNjZSAoDQo+ID4gICAgICAgIC8vDQo+ID4gICAgICAgIC8vIFRo ZXJlIGlzIG5vIGNhcHN1bGUgdmFyaWFibGVzLCBxdWl0DQo+ID4gICAgICAgIC8vDQo+ID4gLSAg ICAgIERFQlVHICgoRUZJX0RfSU5GTywiQ2Fwc3VsZSB2YXJpYWJsZSBJbmRleCA9ICVkXG4iLCBJ bmRleCkpOw0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sIkNhcHN1bGUgdmFyaWFibGUg SW5kZXggPSAlZFxuIiwgSW5kZXgpKTsNCj4gPiAgICAgICAgYnJlYWs7DQo+ID4gICAgICB9DQo+ ID4gICAgICBWYXJpYWJsZUNvdW50Kys7DQo+ID4gICAgICBJbmRleCsrOw0KPiA+ICAgIH0NCj4g Pg0KPiA+IC0gIERFQlVHICgoRUZJX0RfSU5GTywiQ2Fwc3VsZSB2YXJpYWJsZSBjb3VudCA9ICVk XG4iLA0KPiA+IFZhcmlhYmxlQ291bnQpKTsNCj4gPiArICBERUJVRyAoKERFQlVHX0lORk8sIkNh cHN1bGUgdmFyaWFibGUgY291bnQgPSAlZFxuIiwNCj4gPiArIFZhcmlhYmxlQ291bnQpKTsNCj4g Pg0KPiA+ICAgIC8vDQo+ID4gICAgLy8gVGhlIGxhc3QgZW50cnkgaXMgdGhlIGVuZCBmbGFnLg0K PiA+IEBAIC0xMDM0LDcgKzEwMzQsNyBAQCBDYXBzdWxlQ29hbGVzY2UgKA0KPiA+ICAgICAgICAg ICAgICAgKTsNCj4gPg0KPiA+ICAgIGlmIChTdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsNCj4gPiAt ICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJBbGxvY2F0ZVBhZ2VzIEZhaWxlZCEsIFN0YXR1cyA9 ICV4XG4iLCBTdGF0dXMpKTsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJBbGxvY2F0 ZVBhZ2VzIEZhaWxlZCEsIFN0YXR1cyA9ICV4XG4iLA0KPiA+ICsgU3RhdHVzKSk7DQo+ID4gICAg ICBnb3RvIERvbmU7DQo+ID4gICAgfQ0KPiA+DQo+ID4gQEAgLTEwNDYsNyArMTA0Niw3IEBAIENh cHN1bGVDb2FsZXNjZSAoDQo+ID4gICAgLy8NCj4gPiAgICBTdGF0dXMgPSBHZXRDYXBzdWxlRGVz Y3JpcHRvcnMgKFZhcmlhYmxlQXJyYXlBZGRyZXNzKTsNCj4gPiAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ID4gLSAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiRmFpbCB0byBmaW5kIGNh cHN1bGUgdmFyaWFibGVzLlxuIikpOw0KPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkZh aWwgdG8gZmluZCBjYXBzdWxlIHZhcmlhYmxlcy5cbiIpKTsNCj4gPiAgICAgIGdvdG8gRG9uZTsN Cj4gPiAgICB9DQo+ID4NCj4gPiBAQCAtMTA2NCwxNCArMTA2NCwxNCBAQCBDYXBzdWxlQ29hbGVz Y2UgKA0KPiA+ICAgICAgQ29hbGVzY2VJbWFnZUVudHJ5UG9pbnQgPSAwOw0KPiA+ICAgICAgU3Rh dHVzID0gR2V0TG9uZ01vZGVDb250ZXh0ICgmTG9uZ01vZGVCdWZmZXIpOw0KPiA+ICAgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+IC0gICAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAi RmFpbCB0byBmaW5kIHRoZSB2YXJpYWJsZSBmb3IgbG9uZyBtb2RlDQo+IGNvbnRleHQhXG4iKSk7 DQo+ID4gKyAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJGYWlsIHRvIGZpbmQgdGhlIHZhcmlh YmxlIGZvciBsb25nIG1vZGUNCj4gPiArIGNvbnRleHQhXG4iKSk7DQo+ID4gICAgICAgIFN0YXR1 cyA9IEVGSV9OT1RfRk9VTkQ7DQo+ID4gICAgICAgIGdvdG8gRG9uZTsNCj4gPiAgICAgIH0NCj4g Pg0KPiA+ICAgICAgU3RhdHVzID0gRmluZENhcHN1bGVDb2FsZXNjZUltYWdlICgmQ29hbGVzY2VJ bWFnZUVudHJ5UG9pbnQsDQo+ICZDb2FsZXNjZUltYWdlTWFjaGluZVR5cGUpOw0KPiA+ICAgICAg aWYgKChFRklfRVJST1IgKFN0YXR1cykpIHx8IChDb2FsZXNjZUltYWdlTWFjaGluZVR5cGUgIT0N Cj4gRUZJX0lNQUdFX01BQ0hJTkVfWDY0KSkgew0KPiA+IC0gICAgICBERUJVRyAoKEVGSV9EX0VS Uk9SLCAiRmFpbCB0byBmaW5kIENhcHN1bGVYNjQgbW9kdWxlIGluIEZWIVxuIikpOw0KPiA+ICsg ICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRmFpbCB0byBmaW5kIENhcHN1bGVYNjQgbW9kdWxl IGluDQo+ID4gKyBGViFcbiIpKTsNCj4gPiAgICAgICAgU3RhdHVzID0gRUZJX05PVF9GT1VORDsN Cj4gPiAgICAgICAgZ290byBEb25lOw0KPiA+ICAgICAgfQ0KPiA+IEBAIC0xMDkxLDE0ICsxMDkx LDE0IEBAIENhcHN1bGVDb2FsZXNjZSAoDQo+ID4gICAgU3RhdHVzID0gQ2Fwc3VsZURhdGFDb2Fs ZXNjZSAoUGVpU2VydmljZXMsIChFRklfUEhZU0lDQUxfQUREUkVTUw0KPiA+ICopKFVJTlROKVZh cmlhYmxlQXJyYXlBZGRyZXNzLCBNZW1vcnlSZXNvdXJjZSwgTWVtb3J5QmFzZSwNCj4gPiBNZW1v cnlTaXplKTsgICNlbmRpZg0KPiA+DQo+ID4gLSAgREVCVUcgKChFRklfRF9JTkZPLCAiQ2Fwc3Vs ZSBDb2FsZXNjZSBTdGF0dXMgPSAlciFcbiIsIFN0YXR1cykpOw0KPiA+ICsgIERFQlVHICgoREVC VUdfSU5GTywgIkNhcHN1bGUgQ29hbGVzY2UgU3RhdHVzID0gJXIhXG4iLCBTdGF0dXMpKTsNCj4g Pg0KPiA+ICAgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCj4gPiAtICAg IERFQlVHICgoRUZJX0RfRVJST1IsICJUaGVyZSBpcyBub3QgZW5vdWdoIG1lbW9yeSB0byBwcm9j ZXNzDQo+IGNhcHN1bGUhXG4iKSk7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiVGhl cmUgaXMgbm90IGVub3VnaCBtZW1vcnkgdG8gcHJvY2Vzcw0KPiA+ICsgY2Fwc3VsZSFcbiIpKTsN Cj4gPiAgICB9DQo+ID4NCj4gPiAgICBpZiAoU3RhdHVzID09IEVGSV9OT1RfRk9VTkQpIHsNCj4g PiAtICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJGYWlsIHRvIHBhcnNlIGNhcHN1bGUgZGVzY3Jp cHRvciBpbg0KPiBtZW1vcnkhXG4iKSk7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAi RmFpbCB0byBwYXJzZSBjYXBzdWxlIGRlc2NyaXB0b3IgaW4NCj4gPiArIG1lbW9yeSFcbiIpKTsN Cj4gPiAgICAgIFJFUE9SVF9TVEFUVVNfQ09ERSAoDQo+ID4gICAgICAgIEVGSV9FUlJPUl9DT0RF IHwgRUZJX0VSUk9SX01BSk9SLA0KPiA+ICAgICAgICAoRUZJX1NPRlRXQVJFX1BFSV9NT0RVTEUg fA0KPiA+IEVGSV9TV19QRUlfRUNfSU5WQUxJRF9DQVBTVUxFX0RFU0NSSVBUT1IpDQo+ID4gQEAg LTExNjMsNyArMTE2Myw3IEBAIENhcHN1bGVUZXN0UGF0dGVybiAoDQo+ID4gICAgLy8NCj4gPiAg ICBpZiAoKlRlc3RQdHIgPT0gMHg1NDUzNDU1NCkgew0KPiA+ICAgICAgUmV0VmFsdWUgPSBUUlVF Ow0KPiA+IC0gICAgREVCVUcgKChFRklfRF9JTkZPLCAiQ2Fwc3VsZSB0ZXN0IHBhdHRlcm4gbW9k ZSBhY3RpdmF0ZWQuLi5cbiIpKTsNCj4gPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIkNhcHN1 bGUgdGVzdCBwYXR0ZXJuIG1vZGUgYWN0aXZhdGVkLi4uXG4iKSk7DQo+ID4gICAgICBUZXN0U2l6 ZSA9IFRlc3RQdHJbMV0gLyBzaXplb2YgKFVJTlQzMik7DQo+ID4gICAgICAvLw0KPiA+ICAgICAg Ly8gU2tpcCBvdmVyIHRoZSBzaWduYXR1cmUgYW5kIHRoZSBzaXplIGZpZWxkcyBpbiB0aGUgcGF0 dGVybg0KPiA+IGRhdGEgaGVhZGVyIEBAIC0xMTcyLDcgKzExNzIsNyBAQCBDYXBzdWxlVGVzdFBh dHRlcm4gKA0KPiA+ICAgICAgVGVzdENvdW50ZXIgPSAwOw0KPiA+ICAgICAgd2hpbGUgKFRlc3RT aXplID4gMCkgew0KPiA+ICAgICAgICBpZiAoKlRlc3RQdHIgIT0gVGVzdENvdW50ZXIpIHsNCj4g PiAtICAgICAgICBERUJVRyAoKEVGSV9EX0lORk8sICJDYXBzdWxlIHRlc3QgcGF0dGVybiBtb2Rl IEZBSUxFRDoNCj4gQmFzZUFkZHIvRmFpbEFkZHIgMHglWCAweCVYXG4iLA0KPiAoVUlOVDMyKShV SU5UTikoRUZJX0NBUFNVTEVfUEVJTV9QUklWQVRFX0RBVEEgKilDYXBzdWxlQmFzZSwNCj4gKFVJ TlQzMikoVUlOVE4pVGVzdFB0cikpOw0KPiA+ICsgICAgICAgIERFQlVHICgoREVCVUdfSU5GTywg IkNhcHN1bGUgdGVzdCBwYXR0ZXJuIG1vZGUgRkFJTEVEOg0KPiA+ICsgQmFzZUFkZHIvRmFpbEFk ZHIgMHglWCAweCVYXG4iLA0KPiA+ICsgKFVJTlQzMikoVUlOVE4pKEVGSV9DQVBTVUxFX1BFSU1f UFJJVkFURV9EQVRBICopQ2Fwc3VsZUJhc2UsDQo+ID4gKyAoVUlOVDMyKShVSU5UTilUZXN0UHRy KSk7DQo+ID4gICAgICAgICAgcmV0dXJuIFRSVUU7DQo+ID4gICAgICAgIH0NCj4gPg0KPiA+IEBA IC0xMTgxLDcgKzExODEsNyBAQCBDYXBzdWxlVGVzdFBhdHRlcm4gKA0KPiA+ICAgICAgICBUZXN0 U2l6ZS0tOw0KPiA+ICAgICAgfQ0KPiA+DQo+ID4gLSAgICBERUJVRyAoKEVGSV9EX0lORk8sICJD YXBzdWxlIHRlc3QgcGF0dGVybiBtb2RlIFNVQ0NFU1NcbiIpKTsNCj4gPiArICAgIERFQlVHICgo REVCVUdfSU5GTywgIkNhcHN1bGUgdGVzdCBwYXR0ZXJuIG1vZGUgU1VDQ0VTU1xuIikpOw0KPiA+ ICAgIH0NCj4gPg0KPiA+ICAgIHJldHVybiBSZXRWYWx1ZTsNCj4gPiBAQCAtMTIyNiwxMSArMTIy NiwxMSBAQCBDcmVhdGVTdGF0ZSAoDQo+ID4gICAgICByZXR1cm4gRUZJX1ZPTFVNRV9DT1JSVVBU RUQ7DQo+ID4gICAgfQ0KPiA+ICAgIGlmIChQcml2YXRlRGF0YS0+Q2Fwc3VsZUFsbEltYWdlU2l6 ZSA+PSBNQVhfQUREUkVTUykgew0KPiA+IC0gICAgREVCVUcgKChFRklfRF9FUlJPUiwgIkNhcHN1 bGVBbGxJbWFnZVNpemUgdG9vIGJpZyAtIDB4JWx4XG4iLA0KPiBQcml2YXRlRGF0YS0+Q2Fwc3Vs ZUFsbEltYWdlU2l6ZSkpOw0KPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkNhcHN1bGVB bGxJbWFnZVNpemUgdG9vIGJpZyAtIDB4JWx4XG4iLA0KPiA+ICsgUHJpdmF0ZURhdGEtPkNhcHN1 bGVBbGxJbWFnZVNpemUpKTsNCj4gPiAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsN Cj4gPiAgICB9DQo+ID4gICAgaWYgKFByaXZhdGVEYXRhLT5DYXBzdWxlTnVtYmVyID49IE1BWF9B RERSRVNTKSB7DQo+ID4gLSAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiQ2Fwc3VsZU51bWJlciB0 b28gYmlnIC0gMHglbHhcbiIsDQo+IFByaXZhdGVEYXRhLT5DYXBzdWxlTnVtYmVyKSk7DQo+ID4g KyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQ2Fwc3VsZU51bWJlciB0b28gYmlnIC0gMHglbHhc biIsDQo+ID4gKyBQcml2YXRlRGF0YS0+Q2Fwc3VsZU51bWJlcikpOw0KPiA+ICAgICAgcmV0dXJu IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICAgIH0NCj4gPiAgICAvLw0KPiA+IEBAIC0xMjQ4 LDEzICsxMjQ4LDEzIEBAIENyZWF0ZVN0YXRlICgNCj4gPiAgICAgICAgICAgICAgICk7DQo+ID4N Cj4gPiAgICBpZiAoU3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7DQo+ID4gLSAgICBERUJVRyAoKEVG SV9EX0VSUk9SLCAiQWxsb2NhdGVQYWdlcyBGYWlsZWQhXG4iKSk7DQo+ID4gKyAgICBERUJVRyAo KERFQlVHX0VSUk9SLCAiQWxsb2NhdGVQYWdlcyBGYWlsZWQhXG4iKSk7DQo+ID4gICAgICByZXR1 cm4gU3RhdHVzOw0KPiA+ICAgIH0NCj4gPiAgICAvLw0KPiA+ICAgIC8vIENvcHkgdG8gb3VyIG5l dyBidWZmZXIgZm9yIERYRQ0KPiA+ICAgIC8vDQo+ID4gLSAgREVCVUcgKChFRklfRF9JTkZPLCAi Q2Fwc3VsZSBjb3B5IGZyb20gMHglOFggdG8gMHglOFggd2l0aCBzaXplDQo+ID4gMHglOFhcbiIs IChVSU5UTikoKFVJTlQ4ICopUHJpdmF0ZURhdGEgKw0KPiA+IHNpemVvZihFRklfQ0FQU1VMRV9Q RUlNX1BSSVZBVEVfREFUQSkgKyAoQ2Fwc3VsZU51bWJlciAtIDEpICoNCj4gPiBzaXplb2YoVUlO VDY0KSksIChVSU5UTikgTmV3QnVmZmVyLCBTaXplKSk7DQo+ID4gKyAgREVCVUcgKChERUJVR19J TkZPLCAiQ2Fwc3VsZSBjb3B5IGZyb20gMHglOFggdG8gMHglOFggd2l0aCBzaXplDQo+ID4gKyAw eCU4WFxuIiwgKFVJTlROKSgoVUlOVDggKilQcml2YXRlRGF0YSArDQo+ID4gKyBzaXplb2YoRUZJ X0NBUFNVTEVfUEVJTV9QUklWQVRFX0RBVEEpICsgKENhcHN1bGVOdW1iZXIgLSAxKSAqDQo+ID4g KyBzaXplb2YoVUlOVDY0KSksIChVSU5UTikgTmV3QnVmZmVyLCBTaXplKSk7DQo+ID4gICAgQ29w eU1lbSAoKFZPSUQgKikgKFVJTlROKSBOZXdCdWZmZXIsIChWT0lEICopIChVSU5UTikgKChVSU5U OA0KPiAqKVByaXZhdGVEYXRhICsgc2l6ZW9mKEVGSV9DQVBTVUxFX1BFSU1fUFJJVkFURV9EQVRB KSArDQo+IChDYXBzdWxlTnVtYmVyIC0gMSkgKiBzaXplb2YoVUlOVDY0KSksIFNpemUpOw0KPiA+ ICAgIC8vDQo+ID4gICAgLy8gQ2hlY2sgZm9yIHRlc3QgZGF0YSBwYXR0ZXJuLiBJZiBpdCBpcyB0 aGUgdGVzdCBwYXR0ZXJuLCB0aGVuDQo+ID4gd2UnbGwgZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBr Zy9Vbml2ZXJzYWwvQ2Fwc3VsZVBlaS9YNjQvWDY0RW50cnkuYw0KPiA+IGIvTWRlTW9kdWxlUGtn L1VuaXZlcnNhbC9DYXBzdWxlUGVpL1g2NC9YNjRFbnRyeS5jDQo+ID4gaW5kZXggNDBiNzA5NTE5 NC4uMmMzMDk5OTBmYiAxMDA2NDQNCj4gPiAtLS0gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Nh cHN1bGVQZWkvWDY0L1g2NEVudHJ5LmMNCj4gPiArKysgYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2Fs L0NhcHN1bGVQZWkvWDY0L1g2NEVudHJ5LmMNCj4gPiBAQCAtMTc0LDcgKzE3NCw3IEBAIFBhZ2VG YXVsdEhhbmRsZXIgKA0KPiA+ICAgIEFkZHJlc3NFbmNNYXNrID0gUGFnZUZhdWx0Q29udGV4dC0+ QWRkcmVzc0VuY01hc2s7DQo+ID4NCj4gPiAgICBQRkFkZHJlc3MgPSBBc21SZWFkQ3IyICgpOw0K PiA+IC0gIERFQlVHICgoRUZJX0RfRVJST1IsICJDYXBzdWxlWDY0IC0gUGFnZUZhdWx0SGFuZGxl cjogQ3IyIC0gJWx4XG4iLA0KPiA+IFBGQWRkcmVzcykpOw0KPiA+ICsgIERFQlVHICgoREVCVUdf RVJST1IsICJDYXBzdWxlWDY0IC0gUGFnZUZhdWx0SGFuZGxlcjogQ3IyIC0gJWx4XG4iLA0KPiA+ ICsgUEZBZGRyZXNzKSk7DQo+ID4NCj4gPiAgICBpZiAoUEZBZGRyZXNzID49IFBoeU1hc2sgKyBT SVpFXzRLQikgew0KPiA+ICAgICAgcmV0dXJuIFBhZ2VGYXVsdENvbnRleHQtPk9yaWdpbmFsSGFu ZGxlcjsNCj4gPg0K