From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Permerror (SPF Permanent Error: Two or more type TXT spf records found.) identity=mailfrom; client-ip=192.55.52.136; helo=mga12.intel.com; envelope-from=ruiyu.ni@intel.com; receiver=edk2-devel@lists.01.org Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) (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 1EC5521103DD1 for ; Sun, 2 Sep 2018 23:32:46 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Sep 2018 23:32:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,323,1531810800"; d="scan'208";a="69889177" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga007.jf.intel.com with ESMTP; 02 Sep 2018 23:32:46 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 2 Sep 2018 23:32:45 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.143]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.16]) with mapi id 14.03.0319.002; Mon, 3 Sep 2018 14:32:43 +0800 From: "Ni, Ruiyu" To: "Yao, Jiewen" , "Zeng, Star" , "Kinney, Michael D" CC: "edk2-devel@lists.01.org" , Younas khan , "Gao, Liming" Thread-Topic: [edk2] [PATCH 1/6] MdePkg UefiLib: Add new EfiFindAcpiTableBySignature() API Thread-Index: AQHUQR3tEeu0kRzdoEuxFG+IMkFel6TZO1YAgABLygCAAG5ggIADbd6AgACiaLD//4vrgIAAAMAAgACLKJA= Date: Mon, 3 Sep 2018 06:32:43 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5BDEFE1A@SHSMSX104.ccr.corp.intel.com> References: <1535714959-73472-1-git-send-email-star.zeng@intel.com> <1535714959-73472-2-git-send-email-star.zeng@intel.com> <74D8A39837DF1E4DA445A8C0B3885C503AD36A49@shsmsx102.ccr.corp.intel.com> <74D8A39837DF1E4DA445A8C0B3885C503AD37F11@shsmsx102.ccr.corp.intel.com> <0C09AFA07DD0434D9E2A0C6AEB0483103BBB49F2@shsmsx102.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D5BDEFCAF@SHSMSX104.ccr.corp.intel.com> <0C09AFA07DD0434D9E2A0C6AEB0483103BBB4B68@shsmsx102.ccr.corp.intel.com> <74D8A39837DF1E4DA445A8C0B3885C503AD3BFF0@shsmsx102.ccr.corp.intel.com> In-Reply-To: <74D8A39837DF1E4DA445A8C0B3885C503AD3BFF0@shsmsx102.ccr.corp.intel.com> Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 1/6] MdePkg UefiLib: Add new EfiFindAcpiTableBySignature() API 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: Mon, 03 Sep 2018 06:32:47 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SSBwcmVmZXIgUzIuDQpTaW5nbGUgaW50ZXJmYWNlIGlzIG1vcmUgZWFzeSBmb3IgY29uc3VtZXIg dG8gcmVtZW1iZXIgaG93IHRvIHVzZS4NCg0KVGhhbmtzL1JheQ0KDQo+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+IEZyb206IFlhbywgSmlld2VuDQo+IFNlbnQ6IE1vbmRheSwgU2VwdGVt YmVyIDMsIDIwMTggMjoxNSBQTQ0KPiBUbzogWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNv bT47IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPjsNCj4gS2lubmV5LCBNaWNoYWVsIEQg PG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiBDYzogZWRrMi1kZXZlbEBsaXN0cy4wMS5v cmc7IFlvdW5hcyBraGFuIDxwbWR5b3VuYXNraGFuNzg2QGdtYWlsLmNvbT47DQo+IEdhbywgTGlt aW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbT4NCj4gU3ViamVjdDogUkU6IFtlZGsyXSBbUEFUQ0gg MS82XSBNZGVQa2cgVWVmaUxpYjogQWRkIG5ldw0KPiBFZmlGaW5kQWNwaVRhYmxlQnlTaWduYXR1 cmUoKSBBUEkNCj4gDQo+IEkgcHJlZmVyIFMxLg0KPiBJIGJlbGlldmUgdGhhdCB0aGUgRWZpTG9j YXRlTmV4dEFjcGlUYWJsZSgpIGNhbiBhbHNvIGJlIHVzZWQgaW4gUzEuDQo+IA0KPiANCj4gPiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IFplbmcsIFN0YXINCj4gPiBTZW50 OiBNb25kYXksIFNlcHRlbWJlciAzLCAyMDE4IDI6MTIgUE0NCj4gPiBUbzogTmksIFJ1aXl1IDxy dWl5dS5uaUBpbnRlbC5jb20+OyBZYW8sIEppZXdlbg0KPiA+IDxqaWV3ZW4ueWFvQGludGVsLmNv bT47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gPiBD YzogZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc7IFlvdW5hcyBraGFuDQo+IDxwbWR5b3VuYXNraGFu Nzg2QGdtYWlsLmNvbT47DQo+ID4gR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPjsg WmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT4NCj4gPiBTdWJqZWN0OiBSRTogW2VkazJd IFtQQVRDSCAxLzZdIE1kZVBrZyBVZWZpTGliOiBBZGQgbmV3DQo+ID4gRWZpRmluZEFjcGlUYWJs ZUJ5U2lnbmF0dXJlKCkgQVBJDQo+ID4NCj4gPiBUaGFua3MuDQo+ID4gT2ssIHBsZWFzZSBoZWxw IGFuZCB3ZSBjYW4gaGF2ZSBnb29kIGFuZCBmbGV4aWJsZSBpbnRlcmZhY2UocykgZm9yDQo+ID4g Ym90aCBwcm9kdWNlciBhbmQgY29uc3VtZXIuDQo+ID4NCj4gPiBGaXJzdCwgdGhlcmUgYXJlIHR3 byBjYXNlcyB3ZSBuZWVkIHRvIGNvbnNpZGVyLg0KPiA+IDEuIFNpbmdsZSB0YWJsZSwgbGlrZSBG QURULCBGQUNTLCBEU0RULCBldGMuDQo+ID4gMi4gTXVsdGlwbGUgdGFibGVzLCBsaWtlIFNTRFQs IGV0Yy4NCj4gPg0KPiA+IFRoZW4sIHdlIGhhdmUgdHdvIHNvbHV0aW9ucy4NCj4gPiBTMToNCj4g PiBPbmUgaW50ZXJmYWNlIGZvciBzaW5nbGUgdGFibGUgY2FzZSwgY29uc3VtZXIgb25seSBuZWVk cyBpbnB1dA0KPiA+IFNpZ25hdHVyZSwgaGFzIG5vIG5lZWQgaW5wdXQgcHJldmlvdXMgcmV0dXJu ZWQgVGFibGUuIExpa2UNCj4gR2V0Rmlyc3RHdWlkSG9iPw0KPiA+IE9uZSBpbnRlcmZhY2UgZm9y IG11bHRpcGxlIHRhYmxlIGNhc2UsIGNvbnN1bWVyIG5lZWRzIGlucHV0IFNpZ25hdHVyZQ0KPiA+ IGFuZCBwcmV2aW91cyByZXR1cm5lZCBUYWJsZS4gTGlrZSBHZXROZXh0R3VpZEhvYj8gQ291bGQg d2UgYWRkIGl0DQo+ID4gbGF0ZXIgYmFzZWQgb24gcmVhbCByZXF1ZXN0Pw0KPiA+IFMyOg0KPiA+ IE9uZSBpbnRlcmZhY2UgZm9yIGJvdGggc2luZ2xlIHRhYmxlIGFuZCBtdWx0aXBsZSB0YWJsZSBj YXNlcywgY29uc3VtZXINCj4gPiBuZWVkcyBpbnB1dCBTaWduYXR1cmUgYW5kIHByZXZpb3VzIHJl dHVybmVkIFRhYmxlLiBEb2VzIGNvbnN1bWVyIG5lZWQNCj4gPiBpbnB1dCB0aGUgdGFibGUgaGVh ZGVyIHN0b3JlZCBpbiBjb25maWd1cmF0aW9uIHRhYmxlIGJ5IGl0c2VsZihnZXR0aW5nDQo+IGNv bmZpZ3VyYXRpb24gdGFibGUpPw0KPiA+DQo+ID4NCj4gPiBJZiB3ZSBsaWtlIFMyLCB0aGUgaW50 ZXJmYWNlIHNob3VsZCBiZSBsaWtlIGJlbG93Pw0KPiA+DQo+ID4gLyoqDQo+ID4gICBUaGlzIGZ1 bmN0aW9uIGxvY2F0ZXMgbmV4dCBBQ1BJIHRhYmxlIGJhc2VkIG9uIFNpZ25hdHVyZSBhbmQNCj4g PiBwcmV2aW91cyByZXR1cm5lZCBUYWJsZS4NCj4gPiAgIElmIHRoZSBpbnB1dCBwcmV2aW91cyBy ZXR1cm5lZCBUYWJsZSBpcyBOVUxMLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbG9jYXRlIG5leHQNCj4g dGFibGUNCj4gPiAgIGluIGdFZmlBY3BpMjBUYWJsZUd1aWQgc3lzdGVtIGNvbmZpZ3VyYXRpb24g dGFibGUgZmlyc3QsIGFuZCB0aGVuDQo+ID4gZ0VmaUFjcGkxMFRhYmxlR3VpZA0KPiA+ICAgc3lz dGVtIGNvbmZpZ3VyYXRpb24gdGFibGUuDQo+ID4gICBJZiB0aGUgaW5wdXQgcHJldmlvdXMgcmV0 dXJuZWQgVGFibGUgaXMgbm90IE5VTEwgYW5kIGNvdWxkIGJlIGxvY2F0ZWQgaW4NCj4gPiAgIGdF ZmlBY3BpMjBUYWJsZUd1aWQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdGFibGUsIHRoaXMgZnVuY3Rp b24gd2lsbA0KPiA+IGp1c3QgbG9jYXRlIG5leHQNCj4gPiAgIHRhYmxlIGluIGdFZmlBY3BpMjBU YWJsZUd1aWQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdGFibGUsIG90aGVyd2lzZQ0KPiA+IGdFZmlB Y3BpMTBUYWJsZUd1aWQNCj4gPiAgIHN5c3RlbSBjb25maWd1cmF0aW9uIHRhYmxlLg0KPiA+DQo+ ID4gICBAcGFyYW0gU2lnbmF0dXJlICBBQ1BJIHRhYmxlIHNpZ25hdHVyZS4NCj4gPiAgIEBwYXJh bSBUYWJsZSAgICAgIFBvaW50ZXIgdG8gcHJldmlvdXMgcmV0dXJuZWQgVGFibGUsIG9yIE5VTEwg dG8gbG9jYXRlDQo+ID4gZmlyc3QgdGFibGUuDQo+ID4NCj4gPiAgIEByZXR1cm4gTmV4dCBBQ1BJ IHRhYmxlIG9yIE5VTEwgaWYgbm90IGZvdW5kLg0KPiA+DQo+ID4gKiovDQo+ID4gRUZJX0FDUElf Q09NTU9OX0hFQURFUiAqDQo+ID4gRUZJQVBJDQo+ID4gRWZpTG9jYXRlTmV4dEFjcGlUYWJsZSAo DQo+ID4gICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICBTaWduYXR1cmUsDQo+ID4gICBJTiBF RklfQUNQSV9DT01NT05fSEVBREVSICAqVGFibGUNCj4gPiAgICkNCj4gPg0KPiA+DQo+ID4NCj4g PiBUaGFua3MsDQo+ID4gU3Rhcg0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4g RnJvbTogTmksIFJ1aXl1DQo+ID4gU2VudDogTW9uZGF5LCBTZXB0ZW1iZXIgMywgMjAxOCAxOjA5 IFBNDQo+ID4gVG86IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+OyBZYW8sIEppZXdl bg0KPiA+IDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVs LmQua2lubmV5QGludGVsLmNvbT4NCj4gPiBDYzogZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc7IFlv dW5hcyBraGFuDQo+IDxwbWR5b3VuYXNraGFuNzg2QGdtYWlsLmNvbT47DQo+ID4gR2FvLCBMaW1p bmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6IFJFOiBbZWRrMl0gW1BBVENI IDEvNl0gTWRlUGtnIFVlZmlMaWI6IEFkZCBuZXcNCj4gPiBFZmlGaW5kQWNwaVRhYmxlQnlTaWdu YXR1cmUoKSBBUEkNCj4gPg0KPiA+IFRoYXQncyBmaW5lIHRvIGJlIGluIFVlZmlMaWIuIEl0J3Mg YWxyZWFkeSBhIGNvbWJvIGxpYnJhcnkuDQo+ID4NCj4gPiBCdXQgSSBkbyByZWNvbW1lbmQgd2Ug dGhpbmsgYWJvdXQgaG93IHRvIGhhbmRsZSBtdWx0aXBsZSB0YWJsZXMgd2l0aA0KPiA+IHNhbWUg c2lnbmF0dXJlLg0KPiA+IFdoZW4gd2UgYXJlIGFkZGluZyBuZXcgQVBJcywgd2Ugbm90IG9ubHkg bmVlZCB0byBldmFsdWF0ZSB0aGUgZXhpc3RpbmcNCj4gPiByZWFsIGNhc2UsIGJ1dCBhbHNvIHdl IG5lZWQgdG8gZ2VuZXJhbGl6ZSB0aGUgcmVhbCBjYXNlcyBhbmQgdHJ5IHRvDQo+ID4gdGhpbmsg YWJvdXQgdGhlIG1vcmUgZmxleGlibGUgaW50ZXJmYWNlLg0KPiA+DQo+ID4NCj4gPiBUaGFua3Mv UmF5DQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBa ZW5nLCBTdGFyDQo+ID4gPiBTZW50OiBNb25kYXksIFNlcHRlbWJlciAzLCAyMDE4IDExOjI2IEFN DQo+ID4gPiBUbzogWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsgTmksIFJ1aXl1 DQo+ID4gPiA8cnVpeXUubmlAaW50ZWwuY29tPjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwu ZC5raW5uZXlAaW50ZWwuY29tPg0KPiA+ID4gQ2M6IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnOyBZ b3VuYXMga2hhbg0KPiA+ID4gPHBtZHlvdW5hc2toYW43ODZAZ21haWwuY29tPjsgR2FvLCBMaW1p bmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPjsNCj4gPiA+IFplbmcsIFN0YXIgPHN0YXIuemVuZ0Bp bnRlbC5jb20+DQo+ID4gPiBTdWJqZWN0OiBSRTogW2VkazJdIFtQQVRDSCAxLzZdIE1kZVBrZyBV ZWZpTGliOiBBZGQgbmV3DQo+ID4gPiBFZmlGaW5kQWNwaVRhYmxlQnlTaWduYXR1cmUoKSBBUEkN Cj4gPiA+DQo+ID4gPiBHb29kIGlkZWEuDQo+ID4gPg0KPiA+ID4gSSBkaWQgY29uc2lkZXIgRFNE VCBhbmQgbXVsdGlwbGUgU1NEVHMgY2FzZXMuIEJ1dCBJIGRpZCBub3QgZmluZCBhbnkNCj4gPiA+ IHJlYWwgY2FzZSBmb3IgdGhlbS4NCj4gPiA+IFNvIEkgbWFkZSB0aGUgY29kZSBzaW1wbHkgZm9y IGN1cnJlbnQgY2FzZXMsIGFuZCB0aGUgY29kZSBjYW4gYmUNCj4gPiA+IGVhc2lseSBlbmhhbmNl ZCBsYXRlciBmb3IgRFNEVCwgYSBuZXcgQVBJIGNhbiBiZSBhZGRlZCBsYXRlciBmb3INCj4gPiA+ IG11bHRpcGxlDQo+ID4gU1NEVHMuDQo+ID4gPg0KPiA+ID4gQWJvdXQgYWRkaW5nIHRoZSBuZXcg QVBJIGluIFVlZmlMaWIgVlMgbmV3IGxpYnJhcnkgY2xhc3MsIEkgZGlkIGFsc28NCj4gPiA+IGNv bnNpZGVyIGl0IGFuZCBldmVuIGNyZWF0ZWQgY29kZSBmb3IgbmV3IGxpYnJhcnkgY2xhc3MNCj4g PiA+IChnaXRAZ2l0aHViLmNvbTpsemVuZzE0L2VkazIuZ2l0IGJyYW5jaA0KPiA+ID4gRmluZEFj cGlUYWJsZUJ5U2lnbmF0dXJlX1VlZmlBY3BpVGFibGVMaWIpLg0KPiA+ID4gQnV0IEkgcmVtZW1i ZXIgSSBkaWQgZGlzY3VzcyBpdCB3aXRoIE1pa2UgYW5kIEppZXdlbiwgd2UgcmVjb21tZW5kZWQN Cj4gPiA+IFVlZmlMaWIgYXMgaXQgd2lsbCBkbyBub3QgcmVxdWlyZSBhbnkgcGxhdGZvcm0gY2hh bmdlLg0KPiA+ID4NCj4gPiA+DQo+ID4gPg0KPiA+ID4gVGhhbmtzLA0KPiA+ID4gU3Rhcg0KPiA+ ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206IFlhbywgSmlld2VuDQo+ ID4gPiBTZW50OiBTYXR1cmRheSwgU2VwdGVtYmVyIDEsIDIwMTggNzowNCBBTQ0KPiA+ID4gVG86 IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPg0KPiA+ID4gQ2M6IFplbmcsIFN0YXIgPHN0 YXIuemVuZ0BpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsNCj4gPiA+IEtpbm5l eSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IFlvdW5hcyBraGFuDQo+ ID4gPiA8cG1keW91bmFza2hhbjc4NkBnbWFpbC5jb20+OyBHYW8sIExpbWluZyA8bGltaW5nLmdh b0BpbnRlbC5jb20+DQo+ID4gPiBTdWJqZWN0OiBSRTogW2VkazJdIFtQQVRDSCAxLzZdIE1kZVBr ZyBVZWZpTGliOiBBZGQgbmV3DQo+ID4gPiBFZmlGaW5kQWNwaVRhYmxlQnlTaWduYXR1cmUoKSBB UEkNCj4gPiA+DQo+ID4gPiBHb29kIGlkZWEgb24gTG9jYXRlTmV4dEFjcGlUYWJsZSgpLg0KPiA+ ID4NCj4gPiA+DQo+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+IEZy b206IE5pLCBSdWl5dQ0KPiA+ID4gPiBTZW50OiBTYXR1cmRheSwgU2VwdGVtYmVyIDEsIDIwMTgg MTI6MjkgQU0NCj4gPiA+ID4gVG86IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbT4N Cj4gPiA+ID4gQ2M6IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+OyBlZGsyLWRldmVs QGxpc3RzLjAxLm9yZzsNCj4gPiA+ID4gS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5u ZXlAaW50ZWwuY29tPjsgWW91bmFzIGtoYW4NCj4gPiA+ID4gPHBtZHlvdW5hc2toYW43ODZAZ21h aWwuY29tPjsgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPg0KPiA+ID4gPiBTdWJq ZWN0OiBSZTogW2VkazJdIFtQQVRDSCAxLzZdIE1kZVBrZyBVZWZpTGliOiBBZGQgbmV3DQo+ID4g PiA+IEVmaUZpbmRBY3BpVGFibGVCeVNpZ25hdHVyZSgpIEFQSQ0KPiA+ID4gPg0KPiA+ID4gPiBJ IHRoaW5rIExvY2F0ZU5leHRBY3BpVGFibGUoKSBpcyBtb3JlIHByb3BlciB0byBoYW5kbGUgdGhl DQo+ID4gPiA+IG11bHRpcGxlIHRhYmxlcyB3aXRoIHNhbWUgc2lnbmF0dXJlLiBJdCB3aWxsIGNh cnJ5IHRocmVlDQo+ID4gPiA+IHBhcmFtZXRlcnMsIG9uZSBpcyB0aGUgdGFibGUgaGVhZGVyIHN0 b3JlZCBpbiBjb25maWd1cmF0aW9uIHRhYmxlLA0KPiA+ID4gPiBvbmUgaXMgdGhlIHNpZ25hdHVy ZSwgYW5vdGhlciBpcw0KPiA+ID4gdGhlIHByZXZpb3VzIGxvY2F0ZWQgdGFibGUuDQo+ID4gPiA+ IENhbiB3ZSByZXR1cm4gYSBjb21tb24gdGFibGUgaGVhZGVyIG90aGVyIHRoYW4gdm9pZCo/DQo+ ID4gPiA+DQo+ID4gPiA+IElzIHRoZXJlIGJldHRlciBwbGFjZSBvdGhlciB0aGFuIFVlZmlMaWI/ DQo+ID4gPiA+IERvIHdlIG5lZWQgdG8gYWRkIGEgbmV3IGxpYnJhcnkgY2xhc3MgbGlrZSBBY3Bp TGliPw0KPiA+ID4gPg0KPiA+ID4gPiDlj5Hoh6rmiJHnmoQgaVBob25lDQo+ID4gPiA+DQo+ID4g PiA+ID4g5ZyoIDIwMTjlubQ45pyIMzHml6XvvIzkuIvljYg4OjAw77yMWWFvLCBKaWV3ZW4NCj4g PGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiA+ID4g5YaZDQo+ID4gPiA+IOmBk++8mg0KPiA+ID4g PiA+DQo+ID4gPiA+ID4gR29vZCBlbmhhbmNlbWVudC4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEkg aGF2ZSAyIGFkZGl0aW9uYWwgdGhvdWdodDoNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IDEpIEhvdyB0 byBoYW5kbGUgRFNEVD8NCj4gPiA+ID4gPiBXZSBoYXZlIHNwZWNpYWwgY29kZSB0byBoYW5kbGUg RkFDUywgYnV0IG5vIERTRFQuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAyKSBIb3cgdG8gaGFuZGxl IFNTRFQgb3Igb3RoZXIgbXVsdGlwbGUgQUNQSSB0YWJsZXM/DQo+ID4gPiA+ID4gV2UgbWF5IGhh dmUgbXVsdGlwbGUgU1NEVC4gVXN1YWxseSwgaXQgaXMgaWRlbnRpZmllZCBhcyBPRU1JRC4NCj4g PiA+ID4gPiBEbyB3ZSB3YW50IHRvIHByb3ZpZGUgc2ltaWxhciBmdW5jdGlvbiBmb3IgdGhlbT8N Cj4gPiA+ID4gPg0KPiA+ID4gPiA+IEFueXdheSwganVzdCAqYWRkaXRpb25hbCogdGhvdWdodC4g Oi0pIEN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMNCj4gPiA+ID4gPiBnb29kIGVub3VnaCBmb3Ig Y2hlY2sgaW4uDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBSZXZpZXdlZC1ieTogSmlld2VuLnlhb0Bp bnRlbC5jb20NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFRoYW5rIHlvdQ0KPiA+ID4gPiA+IFlhbyBK aWV3ZW4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tDQo+ID4gPiA+ID4+IEZyb206IGVkazItZGV2ZWwgW21haWx0bzplZGsyLWRldmVs LWJvdW5jZXNAbGlzdHMuMDEub3JnXSBPbg0KPiA+ID4gPiA+PiBCZWhhbGYgT2YNCj4gPiA+ID4g U3Rhcg0KPiA+ID4gPiA+PiBaZW5nDQo+ID4gPiA+ID4+IFNlbnQ6IEZyaWRheSwgQXVndXN0IDMx LCAyMDE4IDc6MjkgUE0NCj4gPiA+ID4gPj4gVG86IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ ID4gPiA+ID4+IENjOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5j b20+OyBZb3VuYXMga2hhbg0KPiA+ID4gPiA+PiA8cG1keW91bmFza2hhbjc4NkBnbWFpbC5jb20+ OyBZYW8sIEppZXdlbg0KPiA+ID4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsNCj4gPiA+ID4gR2Fv LA0KPiA+ID4gPiA+PiBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPjsgWmVuZywgU3RhciA8 c3Rhci56ZW5nQGludGVsLmNvbT4NCj4gPiA+ID4gPj4gU3ViamVjdDogW2VkazJdIFtQQVRDSCAx LzZdIE1kZVBrZyBVZWZpTGliOiBBZGQgbmV3DQo+ID4gPiA+ID4+IEVmaUZpbmRBY3BpVGFibGVC eVNpZ25hdHVyZSgpIEFQSQ0KPiA+ID4gPiA+Pg0KPiA+ID4gPiA+PiBodHRwczovL2J1Z3ppbGxh LnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTk2Nw0KPiA+ID4gPiA+PiBSZXF1ZXN0IHRv IGFkZCBhIGxpYnJhcnkgZnVuY3Rpb24gZm9yIEdldEFjcGlUYWJsZSgpIGluIG9yZGVyDQo+ID4g PiA+ID4+IHRvIGdldCBBQ1BJIHRhYmxlIHVzaW5nIHNpZ25hdHVyZSBhcyBpbnB1dC4NCj4gPiA+ ID4gPj4NCj4gPiA+ID4gPj4gQWZ0ZXIgZXZhbHVhdGlvbiwgd2UgZm91bmQgdGhlcmUgYXJlIG1h bnkgZHVwbGljYXRlZCBjb2RlIHRvDQo+ID4gPiA+ID4+IGZpbmQgQUNQSSB0YWJsZSBieSBzaWdu YXR1cmUgaW4gZGlmZmVyZW50IG1vZHVsZXMuDQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+IFRoaXMg cGF0Y2ggYWRkcyBuZXcgRWZpRmluZEFjcGlUYWJsZUJ5U2lnbmF0dXJlKCkgQVBJIGluDQo+ID4g PiA+ID4+IFVlZmlMaWIgZm9yIHRoZSByZXF1ZXN0IGFuZCBhbHNvIHRoZSBmb2xsb3dpbmcgcGF0 Y2ggdG8gcmVtb3ZlDQo+ID4gPiA+ID4+IHRoZSBkdXBsaWNhdGVkIGNvZGUuDQo+ID4gPiA+ID4+ DQo+ID4gPiA+ID4+IENjOiBZb3VuYXMga2hhbiA8cG1keW91bmFza2hhbjc4NkBnbWFpbC5jb20+ DQo+ID4gPiA+ID4+IENjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVs LmNvbT4NCj4gPiA+ID4gPj4gQ2M6IExpbWluZyBHYW8gPGxpbWluZy5nYW9AaW50ZWwuY29tPg0K PiA+ID4gPiA+PiBDYzogSmlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+ID4gPiA+ ID4+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAx LjENCj4gPiA+ID4gPj4gU2lnbmVkLW9mZi1ieTogU3RhciBaZW5nIDxzdGFyLnplbmdAaW50ZWwu Y29tPg0KPiA+ID4gPiA+PiAtLS0NCj4gPiA+ID4gPj4gTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9V ZWZpTGliLmggICB8ICAxNyArKysNCj4gPiA+ID4gPj4gTWRlUGtnL0xpYnJhcnkvVWVmaUxpYi9B Y3BpLmMgICAgICB8IDIyNg0KPiA+ID4gPiA+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrDQo+ID4gPiA+ID4+IE1kZVBrZy9MaWJyYXJ5L1VlZmlMaWIvVWVmaUxpYi5pbmYg fCAgIDMgKw0KPiA+ID4gPiA+PiAzIGZpbGVzIGNoYW5nZWQsIDI0NiBpbnNlcnRpb25zKCspIGNy ZWF0ZSBtb2RlIDEwMDY0NA0KPiA+ID4gPiA+PiBNZGVQa2cvTGlicmFyeS9VZWZpTGliL0FjcGku Yw0KPiA+ID4gPiA+Pg0KPiA+ID4gPiA+PiBkaWZmIC0tZ2l0IGEvTWRlUGtnL0luY2x1ZGUvTGli cmFyeS9VZWZpTGliLmgNCj4gPiA+ID4gPj4gYi9NZGVQa2cvSW5jbHVkZS9MaWJyYXJ5L1VlZmlM aWIuaA0KPiA+ID4gPiA+PiBpbmRleCBmODAwNjdmMTExMDMuLjhkZDI1ZjMyNGZkMiAxMDA2NDQN Cj4gPiA+ID4gPj4gLS0tIGEvTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9VZWZpTGliLmgNCj4gPiA+ ID4gPj4gKysrIGIvTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9VZWZpTGliLmgNCj4gPiA+ID4gPj4g QEAgLTE1OTUsNCArMTU5NSwyMSBAQCBFZmlPcGVuRmlsZUJ5RGV2aWNlUGF0aCAoDQo+ID4gPiA+ ID4+ICBJTiAgICAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBPcGVuTW9kZSwNCj4gPiA+ID4g Pj4gIElOICAgICBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMNCj4gPiA+ID4g Pj4gICk7DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKy8qKg0KPiA+ID4gPiA+PiArICBUaGlz IGZ1bmN0aW9uIGZpbmRzIEFDUEkgdGFibGUgYnkgc2lnbmF0dXJlLg0KPiA+ID4gPiA+PiArICBJ dCB3aWxsIGZpbmQgdGhlIHRhYmxlIGluIGdFZmlBY3BpMjBUYWJsZUd1aWQgc3lzdGVtDQo+ID4g PiA+ID4+ICtjb25maWd1cmF0aW9uIHRhYmxlDQo+ID4gPiA+IGZpcnN0LA0KPiA+ID4gPiA+PiAr ICBhbmQgdGhlbiBnRWZpQWNwaTEwVGFibGVHdWlkIHN5c3RlbSBjb25maWd1cmF0aW9uIHRhYmxl Lg0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsgIEBwYXJhbSBTaWduYXR1cmUgIEFDUEkgdGFi bGUgc2lnbmF0dXJlLg0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsgIEByZXR1cm4gQUNQSSB0 YWJsZSBvciBOVUxMIGlmIG5vdCBmb3VuZC4NCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArKiov DQo+ID4gPiA+ID4+ICtWT0lEICoNCj4gPiA+ID4gPj4gK0VGSUFQSQ0KPiA+ID4gPiA+PiArRWZp RmluZEFjcGlUYWJsZUJ5U2lnbmF0dXJlICgNCj4gPiA+ID4gPj4gKyAgSU4gVUlOVDMyICAgICBT aWduYXR1cmUNCj4gPiA+ID4gPj4gKyAgKTsNCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiAjZW5k aWYNCj4gPiA+ID4gPj4gZGlmZiAtLWdpdCBhL01kZVBrZy9MaWJyYXJ5L1VlZmlMaWIvQWNwaS5j DQo+ID4gPiA+ID4+IGIvTWRlUGtnL0xpYnJhcnkvVWVmaUxpYi9BY3BpLmMgbmV3IGZpbGUgbW9k ZSAxMDA2NDQgaW5kZXgNCj4gPiA+ID4gPj4gMDAwMDAwMDAwMDAwLi41Y2I5Mzk2NmI1OWYNCj4g PiA+ID4gPj4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gPiA+PiArKysgYi9NZGVQa2cvTGlicmFyeS9V ZWZpTGliL0FjcGkuYw0KPiA+ID4gPiA+PiBAQCAtMCwwICsxLDIyNiBAQA0KPiA+ID4gPiA+PiAr LyoqIEBmaWxlDQo+ID4gPiA+ID4+ICsgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGhlbHAgZnVuY3Rp b24gZm9yIGZpbmRpbmcgQUNQSSB0YWJsZS4NCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICBD b3B5cmlnaHQgKGMpIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzDQo+ID4gPiA+ ID4+ICsgcmVzZXJ2ZWQuPEJSPiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0 ZXJpYWxzDQo+ID4gPiA+ID4+ICsgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRl ciB0aGUgdGVybXMgYW5kDQo+ID4gPiA+ID4+ICsgY29uZGl0aW9ucyBvZiB0aGUNCj4gPiA+ID4g QlNEDQo+ID4gPiA+ID4+IExpY2Vuc2UNCj4gPiA+ID4gPj4gKyAgd2hpY2ggYWNjb21wYW5pZXMg dGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZQ0KPiA+ID4gPiA+PiArIGxp Y2Vuc2UgbWF5IGJlDQo+ID4gPiA+ID4+IGZvdW5kIGF0DQo+ID4gPiA+ID4+ICsgIGh0dHA6Ly9v cGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAuDQo+ID4gPiA+ID4+ICsNCj4g PiA+ID4gPj4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNF TlNFIE9OIEFODQo+ICJBUw0KPiA+ID4gSVMiDQo+ID4gPiA+ID4+IEJBU0lTLA0KPiA+ID4gPiA+ PiArICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELA0K PiBFSVRIRVINCj4gPiA+ID4gPj4gRVhQUkVTUyBPUiBJTVBMSUVELg0KPiA+ID4gPiA+PiArDQo+ ID4gPiA+ID4+ICsqKi8NCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArI2luY2x1ZGUgIlVlZmlM aWJJbnRlcm5hbC5oIg0KPiA+ID4gPiA+PiArI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvQWNw aS5oPiAjaW5jbHVkZSA8R3VpZC9BY3BpLmg+DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKy8q Kg0KPiA+ID4gPiA+PiArICBUaGlzIGZ1bmN0aW9uIHNjYW5zIEFDUEkgdGFibGUgaW4gUlNEVC4N Cj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICBAcGFyYW0gUnNkdCAgICAgICBBQ1BJIFJTRFQN Cj4gPiA+ID4gPj4gKyAgQHBhcmFtIFNpZ25hdHVyZSAgQUNQSSB0YWJsZSBzaWduYXR1cmUNCj4g PiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICBAcmV0dXJuIEFDUEkgdGFibGUgb3IgTlVMTCBpZiBu b3QgZm91bmQuDQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyoqLw0KPiA+ID4gPiA+PiArVk9J RCAqDQo+ID4gPiA+ID4+ICtTY2FuVGFibGVJblJTRFQgKA0KPiA+ID4gPiA+PiArICBJTiBFRklf QUNQSV9ERVNDUklQVElPTl9IRUFERVIgICAgKlJzZHQsDQo+ID4gPiA+ID4+ICsgIElOIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmUNCj4gPiA+ID4gPj4gKyAgKQ0KPiA+ ID4gPiA+PiArew0KPiA+ID4gPiA+PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEluZGV4Ow0KPiA+ID4gPiA+PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEVudHJ5Q291bnQ7DQo+ID4gPiA+ID4+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKkVudHJ5UHRyOw0KPiA+ID4gPiA+PiArICBFRklfQUNQSV9ERVNDUklQVElPTl9I RUFERVIgICAgICAgICpUYWJsZTsNCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICBpZiAoUnNk dCA9PSBOVUxMKSB7DQo+ID4gPiA+ID4+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiA+ID4+ICsg IH0NCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICBFbnRyeUNvdW50ID0gKFJzZHQtPkxlbmd0 aCAtIHNpemVvZg0KPiA+ID4gPiA+PiArIChFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIpKSAv DQo+ID4gPiA+ID4+IHNpemVvZihVSU5UMzIpOw0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsg IEVudHJ5UHRyID0gKFVJTlQzMiAqKShSc2R0ICsgMSk7ICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PA0KPiA+ID4gPiA+PiArIEVudHJ5Q291bnQ7IEluZGV4ICsrLCBFbnRyeVB0ciArKykgew0KPiA+ ID4gPiA+PiArICAgIFRhYmxlID0gKEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUg0KPiAqKSgo VUlOVE4pKCpFbnRyeVB0cikpOw0KPiA+ID4gPiA+PiArICAgIGlmIChUYWJsZS0+U2lnbmF0dXJl ID09IFNpZ25hdHVyZSkgew0KPiA+ID4gPiA+PiArICAgICAgcmV0dXJuIFRhYmxlOw0KPiA+ID4g PiA+PiArICAgIH0NCj4gPiA+ID4gPj4gKyAgfQ0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsg IHJldHVybiBOVUxMOw0KPiA+ID4gPiA+PiArfQ0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsv KioNCj4gPiA+ID4gPj4gKyAgVGhpcyBmdW5jdGlvbiBzY2FucyBBQ1BJIHRhYmxlIGluIFhTRFQu DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyAgQHBhcmFtIFhzZHQgICAgICAgQUNQSSBYU0RU DQo+ID4gPiA+ID4+ICsgIEBwYXJhbSBTaWduYXR1cmUgIEFDUEkgdGFibGUgc2lnbmF0dXJlDQo+ ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyAgQHJldHVybiBBQ1BJIHRhYmxlIG9yIE5VTEwgaWYg bm90IGZvdW5kLg0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsqKi8NCj4gPiA+ID4gPj4gK1ZP SUQgKg0KPiA+ID4gPiA+PiArU2NhblRhYmxlSW5YU0RUICgNCj4gPiA+ID4gPj4gKyAgSU4gRUZJ X0FDUElfREVTQ1JJUFRJT05fSEVBREVSICAgICpYc2R0LA0KPiA+ID4gPiA+PiArICBJTiBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlDQo+ID4gPiA+ID4+ICsgICkNCj4g PiA+ID4gPj4gK3sNCj4gPiA+ID4gPj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg IEluZGV4Ow0KPiA+ID4gPiA+PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgRW50 cnlDb3VudDsNCj4gPiA+ID4gPj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgIEVu dHJ5UHRyOw0KPiA+ID4gPiA+PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgQmFz ZVB0cjsNCj4gPiA+ID4gPj4gKyAgRUZJX0FDUElfREVTQ1JJUFRJT05fSEVBREVSICAgICpUYWJs ZTsNCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICBpZiAoWHNkdCA9PSBOVUxMKSB7DQo+ID4g PiA+ID4+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiA+ID4+ICsgIH0NCj4gPiA+ID4gPj4gKw0K PiA+ID4gPiA+PiArICBFbnRyeUNvdW50ID0gKFhzZHQtPkxlbmd0aCAtIHNpemVvZg0KPiA+ID4g PiA+PiArIChFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIpKSAvDQo+ID4gPiA+ID4+IHNpemVv ZihVSU5UNjQpOw0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsgIEJhc2VQdHIgPSAoVUlOVE4p KFhzZHQgKyAxKTsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8DQo+ID4gPiA+ID4+ICsgRW50cnlD b3VudDsgSW5kZXggKyspIHsNCj4gPiA+ID4gPj4gKyAgICBDb3B5TWVtICgmRW50cnlQdHIsIChW T0lEICopKEJhc2VQdHIgKyBJbmRleCAqDQo+ID4gPiA+ID4+ICsgc2l6ZW9mKFVJTlQ2NCkpLA0K PiA+ID4gPiA+PiBzaXplb2YoVUlOVDY0KSk7DQo+ID4gPiA+ID4+ICsgICAgVGFibGUgPSAoRUZJ X0FDUElfREVTQ1JJUFRJT05fSEVBREVSICopKChVSU5UTikoRW50cnlQdHIpKTsNCj4gPiA+ID4g Pj4gKyAgICBpZiAoVGFibGUtPlNpZ25hdHVyZSA9PSBTaWduYXR1cmUpIHsNCj4gPiA+ID4gPj4g KyAgICAgIHJldHVybiBUYWJsZTsNCj4gPiA+ID4gPj4gKyAgICB9DQo+ID4gPiA+ID4+ICsgIH0N Cj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICByZXR1cm4gTlVMTDsNCj4gPiA+ID4gPj4gK30N Cj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArLyoqDQo+ID4gPiA+ID4+ICsgIFRvIGZpbmQgRmFj cyBpbiBGQURULg0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsgIEBwYXJhbSBGYWR0ICAgRkFE VCB0YWJsZSBwb2ludGVyDQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyAgQHJldHVybiBGYWNz IHRhYmxlIHBvaW50ZXIgb3IgTlVMTCBpZiBub3QgZm91bmQuDQo+ID4gPiA+ID4+ICsNCj4gPiA+ ID4gPj4gKyoqLw0KPiA+ID4gPiA+PiArRUZJX0FDUElfMl8wX0ZJUk1XQVJFX0FDUElfQ09OVFJP TF9TVFJVQ1RVUkUgKg0KPiA+ID4gPiA+PiArRmluZEFjcGlGYWNzRnJvbUZhZHQgKA0KPiA+ID4g PiA+PiArICBJTiBFRklfQUNQSV8yXzBfRklYRURfQUNQSV9ERVNDUklQVElPTl9UQUJMRSAgKkZh ZHQNCj4gPiA+ID4gPj4gKyAgKQ0KPiA+ID4gPiA+PiArew0KPiA+ID4gPiA+PiArICBFRklfQUNQ SV8yXzBfRklSTVdBUkVfQUNQSV9DT05UUk9MX1NUUlVDVFVSRSAgKkZhY3M7DQo+ID4gPiA+ID4+ ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhNjQ7 DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyAgaWYgKEZhZHQgPT0gTlVMTCkgew0KPiA+ID4g PiA+PiArICAgIHJldHVybiBOVUxMOw0KPiA+ID4gPiA+PiArICB9DQo+ID4gPiA+ID4+ICsNCj4g PiA+ID4gPj4gKyAgaWYgKEZhZHQtPkhlYWRlci5SZXZpc2lvbiA8DQo+ID4gPiA+ID4+IEVGSV9B Q1BJXzJfMF9GSVhFRF9BQ1BJX0RFU0NSSVBUSU9OX1RBQkxFX1JFVklTSU9OKSB7DQo+ID4gPiA+ ID4+ICsgICAgRmFjcyA9IChFRklfQUNQSV8yXzBfRklSTVdBUkVfQUNQSV9DT05UUk9MX1NUUlVD VFVSRQ0KPiA+ID4gPiA+PiAqKShVSU5UTilGYWR0LT5GaXJtd2FyZUN0cmw7DQo+ID4gPiA+ID4+ ICsgIH0gZWxzZSB7DQo+ID4gPiA+ID4+ICsgICAgQ29weU1lbSAoJkRhdGE2NCwgJkZhZHQtPlhG aXJtd2FyZUN0cmwsIHNpemVvZihVSU5UNjQpKTsNCj4gPiA+ID4gPj4gKyAgICBpZiAoRGF0YTY0 ICE9IDApIHsNCj4gPiA+ID4gPj4gKyAgICAgIEZhY3MgPSAoRUZJX0FDUElfMl8wX0ZJUk1XQVJF X0FDUElfQ09OVFJPTF9TVFJVQ1RVUkUNCj4gPiA+ID4gPj4gKikoVUlOVE4pRGF0YTY0Ow0KPiA+ ID4gPiA+PiArICAgIH0gZWxzZSB7DQo+ID4gPiA+ID4+ICsgICAgICBGYWNzID0gKEVGSV9BQ1BJ XzJfMF9GSVJNV0FSRV9BQ1BJX0NPTlRST0xfU1RSVUNUVVJFDQo+ID4gPiA+ID4+ICopKFVJTlRO KUZhZHQtPkZpcm13YXJlQ3RybDsNCj4gPiA+ID4gPj4gKyAgICB9DQo+ID4gPiA+ID4+ICsgIH0N Cj4gPiA+ID4gPj4gKyAgcmV0dXJuIEZhY3M7DQo+ID4gPiA+ID4+ICt9DQo+ID4gPiA+ID4+ICsN Cj4gPiA+ID4gPj4gKy8qKg0KPiA+ID4gPiA+PiArICBUbyBmaW5kIEFDUEkgdGFibGUgaW4gQUNQ SSBDb25maWd1cmF0aW9uVGFibGUuDQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyAgQHBhcmFt IEFjcGlUYWJsZUd1aWQgIFRoZSBndWlkIHVzZWQgdG8gZmluZCBBQ1BJDQo+ID4gPiBDb25maWd1 cmF0aW9uVGFibGUuDQo+ID4gPiA+ID4+ICsgIEBwYXJhbSBTaWduYXR1cmUgICAgICBBQ1BJIHRh YmxlIHNpZ25hdHVyZS4NCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICBAcmV0dXJuIEFDUEkg dGFibGUgb3IgTlVMTCBpZiBub3QgZm91bmQuDQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyoq Lw0KPiA+ID4gPiA+PiArVk9JRCAgKg0KPiA+ID4gPiA+PiArRmluZEFjcGlUYWJsZUluQWNwaUNv bmZpZ3VyYXRpb25UYWJsZSAoDQo+ID4gPiA+ID4+ICsgIElOIEVGSV9HVUlEICAgKkFjcGlHdWlk LA0KPiA+ID4gPiA+PiArICBJTiBVSU5UMzIgICAgIFNpZ25hdHVyZQ0KPiA+ID4gPiA+PiArDQo+ ID4gPiA+ID4+ICsgICkNCj4gPiA+ID4gPj4gK3sNCj4gPiA+ID4gPj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiA+ID4gPj4gKyAg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpUYWJsZTsNCj4g PiA+ID4gPj4gKyAgRUZJX0FDUElfMl8wX1JPT1RfU1lTVEVNX0RFU0NSSVBUSU9OX1BPSU5URVIg ICpSc2RwOw0KPiA+ID4gPiA+PiArICBFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIgICAgICAg ICAgICAgICAgICAgKlJzZHQ7DQo+ID4gPiA+ID4+ICsgIEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hF QURFUiAgICAgICAgICAgICAgICAgICAqWHNkdDsNCj4gPiA+ID4gPj4gKyAgRUZJX0FDUElfMl8w X0ZJWEVEX0FDUElfREVTQ1JJUFRJT05fVEFCTEUgICAgICpGYWR0Ow0KPiA+ID4gPiA+PiArDQo+ ID4gPiA+ID4+ICsgIFJzZHAgPSBOVUxMOw0KPiA+ID4gPiA+PiArICAvLw0KPiA+ID4gPiA+PiAr ICAvLyBGaW5kIEFDUEkgQ29uZmlndXJhdGlvblRhYmxlIChSU0RfUFRSKSAgLy8gIFN0YXR1cyA9 DQo+ID4gPiA+ID4+ICsgRWZpR2V0U3lzdGVtQ29uZmlndXJhdGlvblRhYmxlKEFjcGlHdWlkLCAo Vk9JRCAqKikmUnNkcCk7ICBpZg0KPiA+ID4gPiA+PiArIChFRklfRVJST1IgKFN0YXR1cykgfHwg KFJzZHAgPT0gTlVMTCkpIHsNCj4gPiA+ID4gPj4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiA+ID4g Pj4gKyAgfQ0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsgIFRhYmxlID0gTlVMTDsNCj4gPiA+ ID4gPj4gKw0KPiA+ID4gPiA+PiArICAvLw0KPiA+ID4gPiA+PiArICAvLyBTZWFyY2ggWFNEVA0K PiA+ID4gPiA+PiArICAvLw0KPiA+ID4gPiA+PiArICBpZiAoUnNkcC0+UmV2aXNpb24gPj0NCj4g PiA+ID4gPj4gRUZJX0FDUElfMl8wX1JPT1RfU1lTVEVNX0RFU0NSSVBUSU9OX1BPSU5URVJfUkVW SVNJT04pIHsNCj4gPiA+ID4gPj4gKyAgICBYc2R0ID0gKEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hF QURFUiAqKShVSU5UTikNCj4gPiA+ID4gUnNkcC0+WHNkdEFkZHJlc3M7DQo+ID4gPiA+ID4+ICsg ICAgaWYgKFNpZ25hdHVyZSA9PQ0KPiA+ID4gPiA+Pg0KPiBFRklfQUNQSV8yXzBfRklSTVdBUkVf QUNQSV9DT05UUk9MX1NUUlVDVFVSRV9TSUdOQVRVUkUpIHsNCj4gPiA+ID4gPj4gKyAgICAgIC8v DQo+ID4gPiA+ID4+ICsgICAgICAvLyBJdCBpcyB0byBmaW5kIEZBQ1MgQUNQSSB0YWJsZSwNCj4g PiA+ID4gPj4gKyAgICAgIC8vIG5lZWQgZmluZCBGQURUIGZpcnN0Lg0KPiA+ID4gPiA+PiArICAg ICAgLy8NCj4gPiA+ID4gPj4gKyAgICAgIEZhZHQgPSBTY2FuVGFibGVJblhTRFQgKFhzZHQsDQo+ ID4gPiA+ID4+IEVGSV9BQ1BJXzJfMF9GSVhFRF9BQ1BJX0RFU0NSSVBUSU9OX1RBQkxFX1NJR05B VFVSRSk7DQo+ID4gPiA+ID4+ICsgICAgICBUYWJsZSA9IEZpbmRBY3BpRmFjc0Zyb21GYWR0IChG YWR0KTsNCj4gPiA+ID4gPj4gKyAgICB9IGVsc2Ugew0KPiA+ID4gPiA+PiArICAgICAgVGFibGUg PSBTY2FuVGFibGVJblhTRFQgKFhzZHQsIFNpZ25hdHVyZSk7DQo+ID4gPiA+ID4+ICsgICAgfQ0K PiA+ID4gPiA+PiArICB9DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyAgaWYgKFRhYmxlICE9 IE5VTEwpIHsNCj4gPiA+ID4gPj4gKyAgICByZXR1cm4gVGFibGU7DQo+ID4gPiA+ID4+ICsgIH0N Cj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICAvLw0KPiA+ID4gPiA+PiArICAvLyBTZWFyY2gg UlNEVA0KPiA+ID4gPiA+PiArICAvLw0KPiA+ID4gPiA+PiArICBSc2R0ID0gKEVGSV9BQ1BJX0RF U0NSSVBUSU9OX0hFQURFUiAqKShVSU5UTikgUnNkcC0NCj4gPiA+ID5Sc2R0QWRkcmVzczsNCj4g PiA+ID4gPj4gKyBpZiAoU2lnbmF0dXJlID09DQo+ID4gPiA+ID4+DQo+IEVGSV9BQ1BJXzJfMF9G SVJNV0FSRV9BQ1BJX0NPTlRST0xfU1RSVUNUVVJFX1NJR05BVFVSRSkgew0KPiA+ID4gPiA+PiAr ICAgIC8vDQo+ID4gPiA+ID4+ICsgICAgLy8gSXQgaXMgdG8gZmluZCBGQUNTIEFDUEkgdGFibGUs DQo+ID4gPiA+ID4+ICsgICAgLy8gbmVlZCBmaW5kIEZBRFQgZmlyc3QuDQo+ID4gPiA+ID4+ICsg ICAgLy8NCj4gPiA+ID4gPj4gKyAgICBGYWR0ID0gU2NhblRhYmxlSW5SU0RUIChSc2R0LA0KPiA+ ID4gPiA+PiBFRklfQUNQSV8yXzBfRklYRURfQUNQSV9ERVNDUklQVElPTl9UQUJMRV9TSUdOQVRV UkUpOw0KPiA+ID4gPiA+PiArICAgIFRhYmxlID0gRmluZEFjcGlGYWNzRnJvbUZhZHQgKEZhZHQp OyAgfSBlbHNlIHsNCj4gPiA+ID4gPj4gKyAgICBUYWJsZSA9IFNjYW5UYWJsZUluUlNEVCAoUnNk dCwgU2lnbmF0dXJlKTsgIH0NCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+PiArICByZXR1cm4gVGFi bGU7DQo+ID4gPiA+ID4+ICt9DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKy8qKg0KPiA+ID4g PiA+PiArICBUaGlzIGZ1bmN0aW9uIGZpbmRzIEFDUEkgdGFibGUgYnkgc2lnbmF0dXJlLg0KPiA+ ID4gPiA+PiArICBJdCB3aWxsIGZpbmQgdGhlIHRhYmxlIGluIGdFZmlBY3BpMjBUYWJsZUd1aWQg c3lzdGVtDQo+ID4gPiA+ID4+ICtjb25maWd1cmF0aW9uIHRhYmxlDQo+ID4gPiA+IGZpcnN0LA0K PiA+ID4gPiA+PiArICBhbmQgdGhlbiBnRWZpQWNwaTEwVGFibGVHdWlkIHN5c3RlbSBjb25maWd1 cmF0aW9uIHRhYmxlLg0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsgIEBwYXJhbSBTaWduYXR1 cmUgIEFDUEkgdGFibGUgc2lnbmF0dXJlLg0KPiA+ID4gPiA+PiArDQo+ID4gPiA+ID4+ICsgIEBy ZXR1cm4gQUNQSSB0YWJsZSBvciBOVUxMIGlmIG5vdCBmb3VuZC4NCj4gPiA+ID4gPj4gKw0KPiA+ ID4gPiA+PiArKiovDQo+ID4gPiA+ID4+ICtWT0lEICoNCj4gPiA+ID4gPj4gK0VGSUFQSQ0KPiA+ ID4gPiA+PiArRWZpRmluZEFjcGlUYWJsZUJ5U2lnbmF0dXJlICgNCj4gPiA+ID4gPj4gKyAgSU4g VUlOVDMyICAgICBTaWduYXR1cmUNCj4gPiA+ID4gPj4gKyAgKQ0KPiA+ID4gPiA+PiArew0KPiA+ ID4gPiA+PiArICBWT0lEICAgICAgICAgICpUYWJsZTsNCj4gPiA+ID4gPj4gKw0KPiA+ID4gPiA+ PiArICBUYWJsZSA9IEZpbmRBY3BpVGFibGVJbkFjcGlDb25maWd1cmF0aW9uVGFibGUNCj4gPiA+ ID4gPj4gKyAoJmdFZmlBY3BpMjBUYWJsZUd1aWQsDQo+ID4gPiA+ID4+IFNpZ25hdHVyZSk7DQo+ ID4gPiA+ID4+ICsgIGlmIChUYWJsZSAhPSBOVUxMKSB7DQo+ID4gPiA+ID4+ICsgICAgcmV0dXJu IFRhYmxlOw0KPiA+ID4gPiA+PiArICB9DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gKyAgcmV0 dXJuIEZpbmRBY3BpVGFibGVJbkFjcGlDb25maWd1cmF0aW9uVGFibGUNCj4gPiA+ID4gPj4gKyAo JmdFZmlBY3BpMTBUYWJsZUd1aWQsDQo+ID4gPiA+ID4+IFNpZ25hdHVyZSk7DQo+ID4gPiA+ID4+ ICt9DQo+ID4gPiA+ID4+ICsNCj4gPiA+ID4gPj4gZGlmZiAtLWdpdCBhL01kZVBrZy9MaWJyYXJ5 L1VlZmlMaWIvVWVmaUxpYi5pbmYNCj4gPiA+ID4gPj4gYi9NZGVQa2cvTGlicmFyeS9VZWZpTGli L1VlZmlMaWIuaW5mDQo+ID4gPiA+ID4+IGluZGV4IGE2YzczOWVmM2Q2ZC4uYWVhMjBmZTY3MTUz IDEwMDY0NA0KPiA+ID4gPiA+PiAtLS0gYS9NZGVQa2cvTGlicmFyeS9VZWZpTGliL1VlZmlMaWIu aW5mDQo+ID4gPiA+ID4+ICsrKyBiL01kZVBrZy9MaWJyYXJ5L1VlZmlMaWIvVWVmaUxpYi5pbmYN Cj4gPiA+ID4gPj4gQEAgLTQxLDYgKzQxLDcgQEAgW1NvdXJjZXNdDQo+ID4gPiA+ID4+ICBDb25z b2xlLmMNCj4gPiA+ID4gPj4gIFVlZmlMaWIuYw0KPiA+ID4gPiA+PiAgVWVmaUxpYkludGVybmFs LmgNCj4gPiA+ID4gPj4gKyAgQWNwaS5jDQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+DQo+ID4gPiA+ ID4+IFtQYWNrYWdlc10NCj4gPiA+ID4gPj4gQEAgLTYyLDYgKzYzLDggQEAgW0d1aWRzXQ0KPiA+ ID4gPiA+PiAgZ0VmaUV2ZW50UmVhZHlUb0Jvb3RHdWlkICAgICAgICAgICAgICAgICAgICAgICMj DQo+ID4gPiA+ID4+IFNPTUVUSU1FU19DT05TVU1FUyAgIyMgRXZlbnQNCj4gPiA+ID4gPj4gIGdF ZmlFdmVudExlZ2FjeUJvb3RHdWlkICAgICAgICAgICAgICAgICAgICAgICAjIw0KPiA+ID4gPiA+ PiBTT01FVElNRVNfQ09OU1VNRVMgICMjIEV2ZW50DQo+ID4gPiA+ID4+ICBnRWZpR2xvYmFsVmFy aWFibGVHdWlkICAgICAgICAgICAgICAgICAgICAgICAgIyMNCj4gPiA+ID4gPj4gU09NRVRJTUVT X0NPTlNVTUVTICAjIyBWYXJpYWJsZQ0KPiA+ID4gPiA+PiArICBnRWZpQWNwaTIwVGFibGVHdWlk ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMNCj4gPiA+ID4gPj4gU09NRVRJTUVTX0NPTlNV TUVTICAjIyBTeXN0ZW1UYWJsZQ0KPiA+ID4gPiA+PiArICBnRWZpQWNwaTEwVGFibGVHdWlkICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyMNCj4gPiA+ID4gPj4gU09NRVRJTUVTX0NPTlNVTUVT ICAjIyBTeXN0ZW1UYWJsZQ0KPiA+ID4gPiA+Pg0KPiA+ID4gPiA+PiBbUHJvdG9jb2xzXQ0KPiA+ ID4gPiA+PiAgZ0VmaURyaXZlckJpbmRpbmdQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAg IyMNCj4gPiA+ID4gPj4gU09NRVRJTUVTX1BST0RVQ0VTDQo+ID4gPiA+ID4+IC0tDQo+ID4gPiA+ ID4+IDIuNy4wLndpbmRvd3MuMQ0KPiA+ID4gPiA+Pg0KPiA+ID4gPiA+PiBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiA+ID4gPiA+PiBlZGsyLWRldmVs IG1haWxpbmcgbGlzdA0KPiA+ID4gPiA+PiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiA+ID4g PiA+PiBodHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2VkazItZGV2ZWwNCj4g PiA+ID4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0K PiA+ID4gPiA+IGVkazItZGV2ZWwgbWFpbGluZyBsaXN0DQo+ID4gPiA+ID4gZWRrMi1kZXZlbEBs aXN0cy4wMS5vcmcNCj4gPiA+ID4gPiBodHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2VkazItZGV2ZWwNCg==