From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.151; helo=mga17.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 0FC48211597F8 for ; Thu, 27 Sep 2018 20:08:51 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Sep 2018 20:08:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,313,1534834800"; d="scan'208";a="77032442" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga008.jf.intel.com with ESMTP; 27 Sep 2018 20:08:47 -0700 Received: from fmsmsx111.amr.corp.intel.com (10.18.116.5) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 27 Sep 2018 20:08:43 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx111.amr.corp.intel.com (10.18.116.5) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 27 Sep 2018 20:08:43 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.140]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.27]) with mapi id 14.03.0319.002; Fri, 28 Sep 2018 11:08:40 +0800 From: "Zeng, Star" To: "Kinney, Michael D" , Ard Biesheuvel CC: "edk2-devel@lists.01.org" , "Zimmer, Vincent" , "Richardson, Brian" , Andrew Fish , Leif Lindholm , "Dong, Eric" , "Ni, Ruiyu" , "Gao, Liming" , "Carsey, Jaben" , "Shi, Steven" , "Zeng, Star" Thread-Topic: [PATCH v3 1/7] MdeModulePkg: introduce PE/COFF image emulator protocol Thread-Index: AQHUVb7cRVFYbeiXpkin2nDWr1hK5KUDSyWAgAAlYwCAAE2hgIABRUSQgAABvcA= Date: Fri, 28 Sep 2018 03:08:39 +0000 Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103BBF4791@shsmsx102.ccr.corp.intel.com> References: <20180920230145.7565-1-ard.biesheuvel@linaro.org> <20180920230145.7565-2-ard.biesheuvel@linaro.org> <0C09AFA07DD0434D9E2A0C6AEB0483103BBF0A34@shsmsx102.ccr.corp.intel.com> <0C09AFA07DD0434D9E2A0C6AEB0483103BBF1D27@shsmsx102.ccr.corp.intel.com> <0C09AFA07DD0434D9E2A0C6AEB0483103BBF476E@shsmsx102.ccr.corp.intel.com> In-Reply-To: <0C09AFA07DD0434D9E2A0C6AEB0483103BBF476E@shsmsx102.ccr.corp.intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v3 1/7] MdeModulePkg: introduce PE/COFF image emulator protocol 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: Fri, 28 Sep 2018 03:08:51 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhlbiBBZGRFbXVsYXRvciBhbmQgUmVtb3ZlRW11bGF0b3Igd2lsbCBiZSBsaWtlIGJlbG93Lg0K DQp0eXBlZGVmDQpFRklfU1RBVFVTDQooRUZJQVBJICpFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFU T1JfQUREX0VNVUxBVE9SKSAoDQogIElOIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9QUk9U T0NPTCAgICAgICAgICAgICpUaGlzLA0KICBJTiBQRUNPRkZfSU1BR0VfRU1VTEFUT1IgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpFbXVsYXRvcg0KICAp Ow0KDQp0eXBlZGVmDQpFRklfU1RBVFVTDQooRUZJQVBJICpFREtJSV9QRUNPRkZfSU1BR0VfRU1V TEFUT1JfUkVNT1ZFX0VNVUxBVE9SKSAoDQogIElOIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRP Ul9QUk9UT0NPTCAgICAgICAgICAgICpUaGlzLA0KICBJTiBQRUNPRkZfSU1BR0VfRU1VTEFUT1Ig ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpFbXVsYXRv cg0KICApOw0KDQpUaGFua3MsDQpTdGFyDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJv bTogWmVuZywgU3RhciANClNlbnQ6IEZyaWRheSwgU2VwdGVtYmVyIDI4LCAyMDE4IDExOjA2IEFN DQpUbzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgQXJk IEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+DQpDYzogZWRrMi1kZXZlbEBs aXN0cy4wMS5vcmc7IFppbW1lciwgVmluY2VudCA8dmluY2VudC56aW1tZXJAaW50ZWwuY29tPjsg UmljaGFyZHNvbiwgQnJpYW4gPGJyaWFuLnJpY2hhcmRzb25AaW50ZWwuY29tPjsgQW5kcmV3IEZp c2ggPGFmaXNoQGFwcGxlLmNvbT47IExlaWYgTGluZGhvbG0gPGxlaWYubGluZGhvbG1AbGluYXJv Lm9yZz47IERvbmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyBOaSwgUnVpeXUgPHJ1aXl1 Lm5pQGludGVsLmNvbT47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IENhcnNl eSwgSmFiZW4gPGphYmVuLmNhcnNleUBpbnRlbC5jb20+OyBTaGksIFN0ZXZlbiA8c3RldmVuLnNo aUBpbnRlbC5jb20+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPg0KU3ViamVjdDog UkU6IFtQQVRDSCB2MyAxLzddIE1kZU1vZHVsZVBrZzogaW50cm9kdWNlIFBFL0NPRkYgaW1hZ2Ug ZW11bGF0b3IgcHJvdG9jb2wNCg0KTWlrZSwNCg0KR29vZCBpZGVhLg0KWW91IHByZWZlciB0byBp bnRyb2R1Y2UgYSBuZXcgZmVhdHVyZSBQQ0QgZm9yIHRoaXMgd2l0aCBkZWZhdWx0IHZhbHVlID0g VFJVRT8NCg0KQ291bGQgd2UgZ3JvdXAgdGhlIGVtdWxhdG9yIEFQSXMgdG8gb25lIHN0cnVjdHVy ZSBsaWtlIGJlbG93PyBBbmQgYWRkIGEgVmVyc2lvbiBmaWVsZCBmb3IgcG90ZW50aWFsIGZ1cnRo ZXIgZXh0ZW5zaW9uPw0KDQp0eXBlZGVmIHN0cnVjdCB7DQogIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb247DQogIEVES0lJX1BFQ09GRl9JTUFH RV9FTVVMQVRPUl9JU19JTUFHRV9TVVBQT1JURUQgIElzSW1hZ2VTdXBwb3J0ZWQ7DQogIEVES0lJ X1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9SRUdJU1RFUl9JTUFHRSAgICAgIFJlZ2lzdGVySW1hZ2U7 DQogIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9VTlJFR0lTVEVSX0lNQUdFICAgIFVucmVn aXN0ZXJJbWFnZTsNCn0gUEVDT0ZGX0lNQUdFX0VNVUxBVE9SOw0KDQoNClRoYW5rcywNClN0YXIN Ci0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBLaW5uZXksIE1pY2hhZWwgRA0KU2Vu dDogVGh1cnNkYXksIFNlcHRlbWJlciAyNywgMjAxOCAxMTozNyBQTQ0KVG86IEFyZCBCaWVzaGV1 dmVsIDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPjsgWmVuZywgU3RhciA8c3Rhci56ZW5nQGlu dGVsLmNvbT47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4N CkNjOiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgWmltbWVyLCBWaW5jZW50IDx2aW5jZW50Lnpp bW1lckBpbnRlbC5jb20+OyBSaWNoYXJkc29uLCBCcmlhbiA8YnJpYW4ucmljaGFyZHNvbkBpbnRl bC5jb20+OyBBbmRyZXcgRmlzaCA8YWZpc2hAYXBwbGUuY29tPjsgTGVpZiBMaW5kaG9sbSA8bGVp Zi5saW5kaG9sbUBsaW5hcm8ub3JnPjsgRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT47 IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPjsgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9A aW50ZWwuY29tPjsgQ2Fyc2V5LCBKYWJlbiA8amFiZW4uY2Fyc2V5QGludGVsLmNvbT47IFNoaSwg U3RldmVuIDxzdGV2ZW4uc2hpQGludGVsLmNvbT4NClN1YmplY3Q6IFJFOiBbUEFUQ0ggdjMgMS83 XSBNZGVNb2R1bGVQa2c6IGludHJvZHVjZSBQRS9DT0ZGIGltYWdlIGVtdWxhdG9yIHByb3RvY29s DQoNCkhpIEFyZCwNCg0KWWVzLiAgSSB0aGluayBpdCBpcyBzaW1wbGVyIGlmIGFuIGVtdWxhdG9y IG1vZHVsZSByZWdpc3RlcnMgb25lIG1hY2hpbmUgdHlwZSBhdCBhIHRpbWUuICBJZiBhbiBlbXVs YXRvciBtb2R1bGUgd2FudHMgdG8gZG8gYSBzaW5nbGUgcmVnaXN0cmF0aW9uIGFuZCB0aGF0IHJl Z2lzdHJhdGlvbiBzdXBwb3J0cyBtdWx0aXBsZSBtYWNoaW5lIHR5cGVzLCB0aGVuIHRoZSBlbXVs YXRvciBpbXBsZW1lbnRhdGlvbiBpcyBtb3JlIGNvbXBsZXgsIGJ1dCBpdCBpcyBzdGlsbCBmZWFz aWJsZS4NCg0KSSB0aGluayBJIHNlZSB3aGVyZSB0aGluZ3MgZ290IGNvbmZ1c2VkLiAgVGhlIHBy b3Bvc2FsIGZyb20gU3RhciBmb3IgYSBuZXcgcHJvdG9jb2wgcHJvZHVjZWQgYnkgdGhlIERYRSBD b3JlIGhhcyBzb21lIGlzc3Vlcy4NCkEgcmVmaW5lZCBwcm9wb3NhbCBpcyBzaG93biBiZWxvdy4g IEl0IGFsc28gc3VwcG9ydHMgdGhlIGlkZWEgdGhhdCBhbiBlbXVsYXRvciBtb2R1bGUgY2FuIGJl IGxvYWRlZCBhbmQgdW5sb2FkZWQgdG8gc3VwcG9ydCB0ZXN0aW5nIGZyb20gZW52aXJvbm1lbnRz IGxpa2UgdGhlIFVFRkkgU2hlbGwgdG8gc29mdCBsb2FkIGFuIGVtdWxhdG9yLCB0ZXN0IHNvbWUg aW1hZ2VzLCBhbmQgdW5sb2FkIGl0Lg0KDQpBbHNvLCBieSBoYXZpbmcgYSBwcm90b2NvbCBwcm9k dWNlZCBieSB0aGUgRFhFIENvcmUsIHRoZSBlbXVsYXRvciBtb2R1bGUgY2FuIHRlbGwgaWYgdGhl IERYRSBDb3JlIHN1cHBvcnRzIGVtdWxhdG9ycyBvciBub3QgYnkgY2hlY2tpbmcgZm9yIHRoZSBw cmVzZW5jZSBvZiB0aGlzIHByb3RvY29sLiAgVGhlIGVtdWxhdG9yIG1vZHVsZSBjYW4gZmFpbCBn cmFjZWZ1bGx5IHdpdGggc29tZSBERUJVRygpIG1lc3NhZ2UgYW5kIHVubG9hZCBpZiBEWEUgQ29y ZSBkb2VzIG5vdCBzdXBwb3J0IGVtdWxhdG9ycy4gIFRoaXMgYWxzbyBhbGxvd3MgdGhlIG9wdGlv biB0byB1cGRhdGUgdGhlIERYRSBDb3JlIG1vZHVsZSB0byBvcHRpb25hbGx5IHN1cHBvcnQgZW11 bGF0b3JzIHVzaW5nIGEgUENEIEZlYXR1cmUgRmxhZyBhbmQgcmVtb3ZlIHNvbWUgbG9naWMgaWYg ZW11bGF0b3JzIGFyZSBub3QgcmVxdWlyZWQgb24gYSBzcGVjaWZpYyBwbGF0Zm9ybS4NCg0KdHlw ZWRlZg0KRUZJX1NUQVRVUw0KKEVGSUFQSSAqRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9SX0FE RF9FTVVMQVRPUikgKA0KICBJTiBFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfUFJPVE9DT0wg ICAgICAgICAgICAqVGhpcywNCiAgSU4gRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9SX0lTX0lN QUdFX1NVUFBPUlRFRCAgSXNJbWFnZVN1cHBvcnRlZCwNCiAgSU4gRURLSUlfUEVDT0ZGX0lNQUdF X0VNVUxBVE9SX1JFR0lTVEVSX0lNQUdFICAgICAgUmVnaXN0ZXJJbWFnZSwNCiAgSU4gRURLSUlf UEVDT0ZGX0lNQUdFX0VNVUxBVE9SX1VOUkVHSVNURVJfSU1BR0UgICAgVW5yZWdpc3RlckltYWdl DQogICk7DQoNCnR5cGVkZWYNCkVGSV9TVEFUVVMNCihFRklBUEkgKkVES0lJX1BFQ09GRl9JTUFH RV9FTVVMQVRPUl9SRU1PVkVfRU1VTEFUT1IpICgNCiAgSU4gRURLSUlfUEVDT0ZGX0lNQUdFX0VN VUxBVE9SX1BST1RPQ09MICAgICAgICAgICAgKlRoaXMsDQogIElOIEVES0lJX1BFQ09GRl9JTUFH RV9FTVVMQVRPUl9JU19JTUFHRV9TVVBQT1JURUQgIElzSW1hZ2VTdXBwb3J0ZWQsDQogIElOIEVE S0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9SRUdJU1RFUl9JTUFHRSAgICAgIFJlZ2lzdGVySW1h Z2UsDQogIElOIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9VTlJFR0lTVEVSX0lNQUdFICAg IFVucmVnaXN0ZXJJbWFnZQ0KICApOw0KDQp0eXBlZGVmIHN0cnVjdCBfRURLSUlfUEVDT0ZGX0lN QUdFX0VNVUxBVE9SX1BST1RPQ09MIHsNCiAgRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9SX0FE RF9FTVVMQVRPUiAgICAgQWRkRW11bGF0b3I7DQogIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRP Ul9SRU1PVkVfRU1VTEFUT1IgIFJlbW92ZUVtdWxhdG9yOyB9IEVES0lJX1BFQ09GRl9JTUFHRV9F TVVMQVRPUl9QUk9UT0NPTA0KDQpUaGUgSXNJbWFnZVN1cHBvcnRlZCgpLCBSZWdpc3RlckltYWdl KCksIGFuZCBVblJlZ2lzdGVySW1hZ2UoKSBhcmUgYWRkZWQgaW4gYSBzZXQgaW4gYSBzaW5nbGUg Y2FsbCB0byBBZGRFbXVsYXRvcigpIGZyb20gdGhlIGVtdWxhdG9yIG1vZHVsZS4gIEluIExvYWRJ bWFnZSgpLCBpZiBJc0ltYWdlU3VwcG9ydGVkKCkgcmV0dXJucyBUUlVFLCBMb2FkSW1hZ2UoKSB1 c2VzIHRoZSBSZWdpc3RlckltYWdlKCkgYW5kIFVuUmVnaXN0ZXJJbWFnZSgpIEFQSXMgdGhhdCB3 ZXJlIGFkZGVkIHdpdGggdGhlIElzSW1hZ2VTdXBwb3J0ZWQoKSBBUEkgaW4gdGhlIGNhbGwgdG8g QWRkRW11bGF0b3IoKS4NCg0KVGhhbmtzLA0KDQpNaWtlDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNz YWdlLS0tLS0NCj4gRnJvbTogQXJkIEJpZXNoZXV2ZWwgW21haWx0bzphcmQuYmllc2hldXZlbEBs aW5hcm8ub3JnXQ0KPiBTZW50OiBUaHVyc2RheSwgU2VwdGVtYmVyIDI3LCAyMDE4IDM6NTkgQU0N Cj4gVG86IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+DQo+IENjOiBLaW5uZXksIE1p Y2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyANCj4gZWRrMi1kZXZlbEBsaXN0 cy4wMS5vcmc7IFppbW1lciwgVmluY2VudCA8dmluY2VudC56aW1tZXJAaW50ZWwuY29tPjsgDQo+ IFJpY2hhcmRzb24sIEJyaWFuIDxicmlhbi5yaWNoYXJkc29uQGludGVsLmNvbT47IEFuZHJldyBG aXNoIA0KPiA8YWZpc2hAYXBwbGUuY29tPjsgTGVpZiBMaW5kaG9sbSA8bGVpZi5saW5kaG9sbUBs aW5hcm8ub3JnPjsgRG9uZywgDQo+IEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyBOaSwgUnVp eXUgPHJ1aXl1Lm5pQGludGVsLmNvbT47IEdhbywgDQo+IExpbWluZyA8bGltaW5nLmdhb0BpbnRl bC5jb20+OyBDYXJzZXksIEphYmVuIDxqYWJlbi5jYXJzZXlAaW50ZWwuY29tPjsgDQo+IFNoaSwg U3RldmVuIDxzdGV2ZW4uc2hpQGludGVsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MyAx LzddIE1kZU1vZHVsZVBrZzogaW50cm9kdWNlIFBFL0NPRkYgaW1hZ2UgDQo+IGVtdWxhdG9yIHBy b3RvY29sDQo+IA0KPiBPbiAyNyBTZXB0ZW1iZXIgMjAxOCBhdCAwMjo0OCwgWmVuZywgU3RhciA8 c3Rhci56ZW5nQGludGVsLmNvbT4gd3JvdGU6DQo+ID4gWWVzLiBUaGlzIGlkZWEgYWxzbyBjYW1l IHRvIG15IG1pbmQgbGFzdCBuaWdodCwgdGhlbg0KPiBubyBuZWVkIGludHJvZHVjZSBQZUNvZmZF bXVsYXRvckR4ZSBhbmQgbm8gcGxhdGZvcm0gY2hhbmdlIGlzIG5lZWRlZC4NCj4gPg0KPiANCj4g VGhlIG9ubHkgcHJvYmxlbSB3aXRoIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCB3ZSBjYW5ub3Qga2Vl cCB0cmFjayBvZiANCj4gd2hpY2ggZW11bGF0b3IgcmV0dXJuZWQgVFJVRSBmb3IgSXNTdXBwb3J0 ZWQoKSwgYW5kIHNvDQo+IFJlZ2lzdGVySW1hZ2UoKQ0KPiBhbmQgYWxzbyBVbnJlZ2lzdGVySW1h Z2UoKSB3aWxsIGhhdmUgdG8gZG8gc29tZSBpbnRlcm5hbCBib29ra2VlcGluZyANCj4gaW4gdGhl ICdtYW5hZ2VyJyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0aGF0IGR1cGxpY2F0ZXMgY29kZSBp biB0aGUgDQo+IGVtdWxhdG9ycy4NCj4gDQo+IFNvIGNvdWxkIHdlIGZsZXNoIHRoaXMgb3V0IGEg Yml0IGJlZm9yZSBJIGRpdmUgaW50byB0aGUgY29kZSBhZ2FpbiBhbmQgDQo+IHR1cm4gZXZlcnl0 aGluZyB1cHNpZGUgZG93bj8NCj4gDQo+IC0gdGhlIFBDSSBidXMgZHJpdmVyIG5vIGxvbmdlciBj aGVja3MgdGhlIG1hY2hpbmUgdHlwZQ0KPiAtIHRoZSBCRFMgbm8gbG9uZ2VyIGNoZWNrcyB0aGUg bWFjaGluZSB0eXBlIGZvciBEcml2ZXIjIyMjIGltYWdlcw0KPiAtIENvcmVMb2FkSW1hZ2UoKSBj aGVja3MgSXNTdXBwb3J0ZWQoKSB0byBlc3RhYmxpc2ggd2hldGhlciB0aGUgDQo+IGVtdWxhdG9y IG1hbmFnZXIgaGFzIGFuIGVtdWxhdG9yIGF2YWlsYWJsZSB0aGF0IGlzIHdpbGxpbmcgdG8gdGFr ZSANCj4gY2hhcmdlIG9mIHRoZSBpbWFnZQ0KPiAtIHdoYXQgaGFwcGVucyBuZXh0PyBDb3JlTG9h ZEltYWdlKCkgY2FsbHMNCj4gUmVnaXN0ZXJJbWFnZSgpIG9uIHdoYXQ/DQo+IFNob3VsZCBJc1N1 cHBvcnRlZCgpIHJldHVybiBzb21lIGtpbmQgb2YgaGFuZGxlPw0KPiANCj4gQWxzbywgcGVyaGFw cyB3ZSBzaG91bGQgc2ltcGx5IHN0aWNrIHdpdGggb25lIGVtdWxhdG9yIHBlciBtYWNoaW5lIA0K PiB0eXBlICh3aGljaCBkb2Vzbid0IHByZWNsdWRlIGFuIGltcGxlbWVudGF0aW9uIGZyb20gcmVn aXN0ZXJpbmcgaXRzZWxmIA0KPiBmb3IgbXVsdGlwbGUgb25lcykuIFRoYXQgc2ltcGxpZmllcyB0 aGUgSXNTdXBwb3J0ZWQgdnMgUmVnaXN0ZXJJbWFnZSANCj4gaXNzdWUgYWJvdmUgYXMgd2VsbCAo aS5lLiwgaXQgaXMgdW5hbWJpZ3VvdXMgKndoaWNoKg0KPiBSZWdpc3RlckltYWdlKCkNCj4gc2hv dWxkIGJlIGNhbGxlZCkNCj4gDQo+IA0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KPiA+IEZyb206IEtpbm5leSwgTWljaGFlbCBEDQo+ID4gU2VudDogVGh1cnNkYXksIFNlcHRl bWJlciAyNywgMjAxOCAxOjMyIEFNDQo+ID4gVG86IEFyZCBCaWVzaGV1dmVsIDxhcmQuYmllc2hl dXZlbEBsaW5hcm8ub3JnPjsgWmVuZywNCj4gU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT47IEtp bm5leSwgTWljaGFlbCBEIA0KPiA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+ID4gQ2M6 IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnOyBaaW1tZXIsIFZpbmNlbnQNCj4gPHZpbmNlbnQuemlt bWVyQGludGVsLmNvbT47IFJpY2hhcmRzb24sIEJyaWFuIA0KPiA8YnJpYW4ucmljaGFyZHNvbkBp bnRlbC5jb20+OyBBbmRyZXcgRmlzaCA8YWZpc2hAYXBwbGUuY29tPjsgTGVpZiANCj4gTGluZGhv bG0gPGxlaWYubGluZGhvbG1AbGluYXJvLm9yZz47IERvbmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRl bC5jb20+OyANCj4gTmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb20+OyBHYW8sIExpbWluZyA8 bGltaW5nLmdhb0BpbnRlbC5jb20+OyANCj4gQ2Fyc2V5LCBKYWJlbiA8amFiZW4uY2Fyc2V5QGlu dGVsLmNvbT47IFNoaSwgU3RldmVuIA0KPiA8c3RldmVuLnNoaUBpbnRlbC5jb20+DQo+ID4gU3Vi amVjdDogUkU6IFtQQVRDSCB2MyAxLzddIE1kZU1vZHVsZVBrZzogaW50cm9kdWNlDQo+IFBFL0NP RkYgaW1hZ2UgZW11bGF0b3IgcHJvdG9jb2wNCj4gPg0KPiA+IEhpIEFyZCwNCj4gPg0KPiA+IEkg dGhpbmsgdGhpcyByZWdpc3RyYXRpb24gcHJvdG9jb2wgd291bGQgYmUgYSBuZXcNCj4gcHJvdG9j b2wgaW4gdGhlIE1kZU1vZHVsZVBrZyBhbmQgdGhlIHByb3RvY29sIHdvdWxkIGJlIHByb2R1Y2Vk IGJ5IHRoZSANCj4gRFhFIENvcmUuICBUaGUgZW11bGF0aW9uIGRyaXZlcnMsIGluY2x1ZGluZyBF QkMgd291bGQgY29uc3VtZSB0aGlzIA0KPiBwcm90b2NvbCB0byByZWdpc3RlciB0aGVpciBzZXJ2 aWNlcy4gIFRoaXMgcmVtb3ZlcyB0aGUgbmVlZCBmb3IgdGhlIA0KPiBEWEUgQ29yZSB0byBkbyBh IFJlZ2lzdGVyIFByb3RvY29sIE5vdGlmeSBldmVudCBmb3IgdGhlIGVtdWxhdG9yIA0KPiBwcm90 b2NvbC4gIFRoZSBEWEUgQ29yZSB3b3VsZCBidWlsZCBhIHRhYmxlIG9mIHJlZ2lzdGVyZWQgc2Vy dmljZXMsIHNvIA0KPiBpdCBjYW4gcXVpY2tseSBsb29wIHRocm91Z2ggdGhlbSB0byBjaGVjayBp ZiBhbiBlbXVsYXRvciBzdXBwb3J0cyBhIA0KPiBzcGVjaWZpYyBQRS9DT0ZGIGltYWdlIG9yIG5v dC4NCj4gPg0KPiA+IEJlc3QgcmVnYXJkcywNCj4gPg0KPiA+IE1pa2UNCj4gPg0KPiA+PiAtLS0t LU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiBBcmQgQmllc2hldXZlbA0KPiBbbWFp bHRvOmFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmddDQo+ID4+IFNlbnQ6IFdlZG5lc2RheSwgU2Vw dGVtYmVyIDI2LCAyMDE4IDM6MTQgQU0NCj4gPj4gVG86IFplbmcsIFN0YXIgPHN0YXIuemVuZ0Bp bnRlbC5jb20+DQo+ID4+IENjOiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgWmltbWVyLCBWaW5j ZW50IA0KPiA+PiA8dmluY2VudC56aW1tZXJAaW50ZWwuY29tPjsgUmljaGFyZHNvbiwgQnJpYW4g DQo+ID4+IDxicmlhbi5yaWNoYXJkc29uQGludGVsLmNvbT47IEtpbm5leSwgTWljaGFlbCBEIA0K PiA+PiA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyBBbmRyZXcgRmlzaA0KPiA8YWZpc2hA YXBwbGUuY29tPjsgTGVpZg0KPiA+PiBMaW5kaG9sbSA8bGVpZi5saW5kaG9sbUBsaW5hcm8ub3Jn PjsgRG9uZywgRXJpYw0KPiA8ZXJpYy5kb25nQGludGVsLmNvbT47DQo+ID4+IE5pLCBSdWl5dSA8 cnVpeXUubmlAaW50ZWwuY29tPjsgR2FvLCBMaW1pbmcNCj4gPGxpbWluZy5nYW9AaW50ZWwuY29t PjsNCj4gPj4gQ2Fyc2V5LCBKYWJlbiA8amFiZW4uY2Fyc2V5QGludGVsLmNvbT47IFNoaSwgU3Rl dmVuIA0KPiA+PiA8c3RldmVuLnNoaUBpbnRlbC5jb20+DQo+ID4+IFN1YmplY3Q6IFJlOiBbUEFU Q0ggdjMgMS83XSBNZGVNb2R1bGVQa2c6IGludHJvZHVjZQ0KPiBQRS9DT0ZGIGltYWdlDQo+ID4+ IGVtdWxhdG9yIHByb3RvY29sDQo+ID4+DQo+ID4+IE9uIFdlZCwgMjYgU2VwIDIwMTggYXQgMTI6 MDcsIFplbmcsIFN0YXINCj4gPHN0YXIuemVuZ0BpbnRlbC5jb20+IHdyb3RlOg0KPiA+PiA+DQo+ ID4+ID4gQSBsaXR0bGUgbGF0ZSBmZWVkYmFjay4gSnVzdCBhbiBpZGVhLg0KPiA+PiA+DQo+ID4+ ID4gRG8geW91IHRoaW5rIHdoZXRoZXIgaXQgY2FuIG1ha2UgdGhlIGNvbnN1bWVyDQo+IHNpbXBs ZXINCj4gPj4gbGlrZSBiZWxvdyBvciBub3Q/DQo+ID4+ID4NCj4gPj4gPiBBZGQgYSBuZXcgQVBJ IFJlZ2lzdGVySW50ZXJmYWNlcyBpbiB0aGUgcHJvdG9jb2wNCj4gYW5kDQo+ID4+IGFkZCBhIHdy YXBwZXIgZHJpdmVyIFBlQ29mZkVtdWxhdG9yRHhlLg0KPiA+PiA+IFRoZSBlbXVsYXRvcnMgY2Fu IGNhbGwgUmVnaXN0ZXJJbnRlcmZhY2VzLCBhbmQNCj4gPj4gY29uc3VtZXIgd2lsbCBjYWxsIG90 aGVyIEFQSXMgc2ltcGx5LA0KPiBQZUNvZmZFbXVsYXRvckR4ZSB3aWxsIGJlIGENCj4gPj4gd3Jh cHBlciBhcyBtYW5hZ2VyLg0KPiA+PiA+DQo+ID4+ID4gdHlwZWRlZg0KPiA+PiA+IEVGSV9TVEFU VVMNCj4gPj4gPiAoRUZJQVBJDQo+ID4+ICpFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfUkVH SVNURVJfSU5URVJGQUNFUykgKA0KPiA+PiA+ICAgSU4gRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxB VE9SX1BST1RPQ09MDQo+ICpUaGlzLA0KPiA+PiA+ICAgSU4NCj4gRURLSUlfUEVDT0ZGX0lNQUdF X0VNVUxBVE9SX0lTX0lNQUdFX1NVUFBPUlRFRA0KPiA+PiBJc0ltYWdlU3VwcG9ydGVkLA0KPiA+ PiA+ICAgSU4gRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9SX1JFR0lTVEVSX0lNQUdFDQo+ID4+ IFJlZ2lzdGVySW1hZ2UsDQo+ID4+ID4gICBJTiBFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1Jf VU5SRUdJU1RFUl9JTUFHRQ0KPiA+PiBVbnJlZ2lzdGVySW1hZ2UNCj4gPj4gPiAgICk7DQo+ID4+ ID4NCj4gPj4gPiB0eXBlZGVmIHN0cnVjdA0KPiBfRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9S X1BST1RPQ09MIHsNCj4gPj4gPiAgIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9SRUdJU1RF Ul9JTlRFUkZBQ0VTDQo+ID4+IFJlZ2lzdGVySW50ZXJmYWNlczsNCj4gPj4gPiAgIEVES0lJX1BF Q09GRl9JTUFHRV9FTVVMQVRPUl9JU19JTUFHRV9TVVBQT1JURUQNCj4gPj4gSXNJbWFnZVN1cHBv cnRlZDsNCj4gPj4gPiAgIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9SRUdJU1RFUl9JTUFH RQ0KPiA+PiBSZWdpc3RlckltYWdlOw0KPiA+PiA+ICAgRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxB VE9SX1VOUkVHSVNURVJfSU1BR0UNCj4gPj4gVW5yZWdpc3RlckltYWdlOw0KPiA+PiA+IH0gRURL SUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9SX1BST1RPQ09MOw0KPiA+PiA+DQo+ID4+DQo+ID4+IEhp IFN0YXIsDQo+ID4+DQo+ID4+IFRoYW5rcyBmb3IgdGFraW5nIGEgbG9vay4NCj4gPj4NCj4gPj4g SSB0cmllZCB0byBhdm9pZCBpbnRyb2R1Y2luZyBuZXcgZHJpdmVycyBvciBsaWJyYXJ5DQo+IGNs YXNzZXMgYmVjYXVzZSBpdA0KPiA+PiB3aWxsIGJyZWFrIGV4aXN0aW5nIHBsYXRmb3JtcyB0aGF0 IGluY29ycG9yYXRlDQo+IEViY0R4ZS4NCj4gPj4gRG8geW91IHRoaW5rDQo+ID4+IHRoaXMgaXMg bm90IGFuIGlzc3VlPw0KPiA+Pg0KPiA+PiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ ID4+ID4gRnJvbTogQXJkIEJpZXNoZXV2ZWwNCj4gPj4gW21haWx0bzphcmQuYmllc2hldXZlbEBs aW5hcm8ub3JnXQ0KPiA+PiA+IFNlbnQ6IEZyaWRheSwgU2VwdGVtYmVyIDIxLCAyMDE4IDc6MDIg QU0NCj4gPj4gPiBUbzogZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gPj4gPiBDYzogQXJkIEJp ZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+Ow0KPiA+PiBaaW1tZXIsIFZpbmNl bnQgPHZpbmNlbnQuemltbWVyQGludGVsLmNvbT47DQo+IFJpY2hhcmRzb24sIEJyaWFuDQo+ID4+ IDxicmlhbi5yaWNoYXJkc29uQGludGVsLmNvbT47IEtpbm5leSwgTWljaGFlbCBEIA0KPiA+PiA8 bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyBBbmRyZXcgRmlzaA0KPiA8YWZpc2hAYXBwbGUu Y29tPjsgTGVpZg0KPiA+PiBMaW5kaG9sbSA8bGVpZi5saW5kaG9sbUBsaW5hcm8ub3JnPjsgWmVu ZywgU3Rhcg0KPiA8c3Rhci56ZW5nQGludGVsLmNvbT47DQo+ID4+IERvbmcsIEVyaWMgPGVyaWMu ZG9uZ0BpbnRlbC5jb20+OyBOaSwgUnVpeXUNCj4gPHJ1aXl1Lm5pQGludGVsLmNvbT47IEdhbywN Cj4gPj4gTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IENhcnNleSwgSmFiZW4NCj4gPGph YmVuLmNhcnNleUBpbnRlbC5jb20+Ow0KPiA+PiBTaGksIFN0ZXZlbiA8c3RldmVuLnNoaUBpbnRl bC5jb20+DQo+ID4+ID4gU3ViamVjdDogW1BBVENIIHYzIDEvN10gTWRlTW9kdWxlUGtnOiBpbnRy b2R1Y2UNCj4gPj4gUEUvQ09GRiBpbWFnZSBlbXVsYXRvciBwcm90b2NvbA0KPiA+PiA+DQo+ID4+ ID4gSW50cm9kdWNlIGEgcHJvdG9jb2wgdGhhdCBjYW4gYmUgaW52b2tlZCBieSB0aGUNCj4gaW1h Z2UNCj4gPj4gbG9hZGluZyBzZXJ2aWNlcyB0byBleGVjdXRlIGZvcmVpZ24gYXJjaGl0ZWN0dXJl DQo+IFBFL0NPRkYgaW1hZ2VzIHZpYSBhbg0KPiA+PiBlbXVsYXRvci4NCj4gPj4gPg0KPiA+PiA+ IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uDQo+IEFncmVlbWVudA0K PiA+PiAxLjENCj4gPj4gPiBTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbA0KPiA+PiA8YXJk LmJpZXNoZXV2ZWxAbGluYXJvLm9yZz4NCj4gPj4gPiAtLS0NCj4gPj4gPg0KPiBNZGVNb2R1bGVQ a2cvSW5jbHVkZS9Qcm90b2NvbC9QZUNvZmZJbWFnZUVtdWxhdG9yLmggfA0KPiA+PiAxMDIgKysr KysrKysrKysrKysrKysrKysNCj4gPj4gPiAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMN Cj4gfA0KPiA+PiA0ICsNCj4gPj4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAxMDYgaW5zZXJ0aW9ucygr KQ0KPiA+PiA+DQo+ID4+ID4gZGlmZiAtLWdpdA0KPiA+Pg0KPiBhL01kZU1vZHVsZVBrZy9JbmNs dWRlL1Byb3RvY29sL1BlQ29mZkltYWdlRW11bGF0b3IuaA0KPiA+Pg0KPiBiL01kZU1vZHVsZVBr Zy9JbmNsdWRlL1Byb3RvY29sL1BlQ29mZkltYWdlRW11bGF0b3IuaA0KPiA+PiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+ID4+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4yN2JhZDU1NjIwOWMNCj4g Pj4gPiAtLS0gL2Rldi9udWxsDQo+ID4+ID4gKysrDQo+ID4+DQo+IGIvTWRlTW9kdWxlUGtnL0lu Y2x1ZGUvUHJvdG9jb2wvUGVDb2ZmSW1hZ2VFbXVsYXRvci5oDQo+ID4+ID4gQEAgLTAsMCArMSwx MDIgQEANCj4gPj4gPiArLyoqIEBmaWxlDQo+ID4+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDE4LCBM aW5hcm8sIEx0ZC4gQWxsIHJpZ2h0cw0KPiA+PiByZXNlcnZlZC48QlI+DQo+ID4+ID4gKw0KPiA+ PiA+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlDQo+ ID4+IGxpY2Vuc2VkIGFuZCBtYWRlDQo+ID4+ID4gKyBhdmFpbGFibGUgIHVuZGVyIHRoZSB0ZXJt cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUNCj4gQlNEDQo+ID4+IExpY2Vuc2Ugd2hpY2gNCj4gPj4g PiArIGFjY29tcGFuaWVzIHRoaXMgIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQNCj4gb2YN Cj4gPj4gdGhlIGxpY2Vuc2UgbWF5IGJlDQo+ID4+ID4gKyBmb3VuZCBhdCAgaHR0cDovL29wZW5z b3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC0NCj4gPj4gbGljZW5zZS5waHANCj4gPj4gPiArDQo+ID4+ ID4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRA0KPiBMSUNFTlNF IE9ODQo+ID4+IEFOICJBUyBJUyIgQkFTSVMsDQo+ID4+ID4gKyBXSVRIT1VUIFdBUlJBTlRJRVMg T1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWQ0KPiBLSU5ELA0KPiA+PiBFSVRIRVIgRVhQUkVTUyBP UiBJTVBMSUVELg0KPiA+PiA+ICsNCj4gPj4gPiArKiovDQo+ID4+ID4gKw0KPiA+PiA+ICsjaWZu ZGVmIFBFQ09GRl9JTUFHRV9FTVVMQVRPUl9QUk9UT0NPTF9HVUlEX0gNCj4gPj4gPiArI2RlZmlu ZSBQRUNPRkZfSU1BR0VfRU1VTEFUT1JfUFJPVE9DT0xfR1VJRF9IDQo+ID4+ID4gKw0KPiA+PiA+ ICsjZGVmaW5lIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9QUk9UT0NPTF9HVUlEDQo+IFwN Cj4gPj4gPiArICB7IDB4OTZGNDYxNTMsIDB4OTdBNywgMHg0NzkzLCB7IDB4QUMsIDB4QzEsDQo+ IDB4RkEsDQo+ID4+IDB4MTksIDB4QkYsIDB4NzgsDQo+ID4+ID4gKzB4RUEsIDB4OTcgfSB9DQo+ ID4+ID4gKw0KPiA+PiA+ICt0eXBlZGVmIHN0cnVjdA0KPiBfRURLSUlfUEVDT0ZGX0lNQUdFX0VN VUxBVE9SX1BST1RPQ09MDQo+ID4+ID4gK0VES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9QUk9U T0NPTDsNCj4gPj4gPiArDQo+ID4+ID4gKy8qKg0KPiA+PiA+ICsgIENoZWNrIHdoZXRoZXIgdGhl IGVtdWxhdG9yIHN1cHBvcnRzIGV4ZWN1dGluZyBhDQo+ID4+IGNlcnRhaW4gUEUvQ09GRiBpbWFn ZQ0KPiA+PiA+ICsNCj4gPj4gPiArICBAcGFyYW1baW5dIFRoaXMgICAgICAgICBUaGlzIHBvaW50 ZXIgZm9yDQo+ID4+IEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9QUk9UT0NPTA0KPiA+PiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSAgQHBhcmFtW2luXQ0KPiBNYWNo aW5lVHlwZSAgVGhlDQo+ID4+ID4gKyBtYWNoaW5lIHR5cGUgZm9yIHdoaWNoDQo+ID4+IHRoZSBp bWFnZSB3YXMgYnVpbHQNCj4gPj4gPiArICBAcGFyYW1baW5dIEltYWdlVHlwZSAgICBXaGV0aGVy IHRoZSBpbWFnZSBpcyBhbg0KPiA+PiBhcHBsaWNhdGlvbiwgYSBib290IHRpbWUNCj4gPj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgb3IgYSBydW50aW1lDQo+IGRyaXZlci4N Cj4gPj4gPiArICBAcGFyYW1baW5dIERldmljZVBhdGggICBQYXRoIHRvIGRldmljZSB3aGVyZQ0K PiB0aGUNCj4gPj4gaW1hZ2Ugb3JpZ2luYXRlZA0KPiA+PiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgIChlLmcuLCBhIFBDSSBvcHRpb24NCj4gUk9NKQ0KPiA+PiA+ICsNCj4gPj4gPiArICBA cmV0dmFsIFRSVUUgICAgICAgICAgICBUaGUgaW1hZ2UgaXMgc3VwcG9ydGVkDQo+IGJ5DQo+ID4+ IHRoZSBlbXVsYXRvcg0KPiA+PiA+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICAgIFRoZSBpbWFn ZSBpcyBub3QNCj4gc3VwcG9ydGVkDQo+ID4+IGJ5IHRoZSBlbXVsYXRvci4NCj4gPj4gPiArKiov DQo+ID4+ID4gK3R5cGVkZWYNCj4gPj4gPiArQk9PTEVBTg0KPiA+PiA+ICsoRUZJQVBJDQo+ID4+ ICpFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfSVNfSU1BR0VfU1VQUE9SVEVEKSAoDQo+ID4+ ID4gKyAgSU4gIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9QUk9UT0NPTA0KPiAqVGhpcywN Cj4gPj4gPiArICBJTiAgVUlOVDE2DQo+ID4+IE1hY2hpbmVUeXBlLA0KPiA+PiA+ICsgIElOICBV SU5UMTYNCj4gPj4gSW1hZ2VUeXBlLA0KPiA+PiA+ICsgIElOICBFRklfREVWSUNFX1BBVEhfUFJP VE9DT0wNCj4gPj4gKkRldmljZVBhdGggICBPUFRJT05BTA0KPiA+PiA+ICsgICk7DQo+ID4+ID4g Kw0KPiA+PiA+ICsvKioNCj4gPj4gPiArICBSZWdpc3RlciBhIHN1cHBvcnRlZCBQRS9DT0ZGIGlt YWdlIHdpdGggdGhlDQo+ID4+IGVtdWxhdG9yLiBBZnRlciB0aGlzIGNhbGwNCj4gPj4gPiArICBj b21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LCB0aGUgUEUvQ09GRiBpbWFnZSBtYXkNCj4gYmUNCj4gPj4g c3RhcnRlZCBhcyB1c3VhbCwNCj4gPj4gPiArYW5kDQo+ID4+ID4gKyAgaXQgaXMgdGhlIHJlc3Bv bnNpYmlsaXR5IG9mIHRoZSBlbXVsYXRvcg0KPiA+PiBpbXBsZW1lbnRhdGlvbiB0aGF0IGFueQ0K PiA+PiA+ICticmFuY2gNCj4gPj4gPiArICBpbnRvIHRoZSBjb2RlIHNlY3Rpb24gb2YgdGhlIGlt YWdlIChpbmNsdWRpbmcNCj4gPj4gcmV0dXJucyBmcm9tIGZ1bmN0aW9ucw0KPiA+PiA+ICtjYWxs ZWQNCj4gPj4gPiArICBmcm9tIHRoZSBmb3JlaWduIGNvZGUpIGlzIGV4ZWN1dGVkIGFzIGlmIGl0 DQo+IHdlcmUNCj4gPj4gcnVubmluZyBvbiB0aGUNCj4gPj4gPiArbWFjaGluZQ0KPiA+PiA+ICsg IHR5cGUgaXQgd2FzIGJ1aWx0IGZvci4NCj4gPj4gPiArDQo+ID4+ID4gKyAgQHBhcmFtW2luXSAg ICAgIFRoaXMgICAgICAgICAgVGhpcyBwb2ludGVyIGZvcg0KPiA+PiA+ICsNCj4gPj4gRURLSUlf UEVDT0ZGX0lNQUdFX0VNVUxBVE9SX1BST1RPQ09MIHN0cnVjdHVyZQ0KPiA+PiA+ICsgIEBwYXJh bVtpbl0gICAgICBJbWFnZUJhc2UgICAgIFRoZSBiYXNlIGFkZHJlc3MNCj4gaW4NCj4gPj4gbWVt b3J5IG9mIHRoZSBQRS9DT0ZGIGltYWdlDQo+ID4+ID4gKyAgQHBhcmFtW2luXSAgICAgIEltYWdl U2l6ZSAgICAgVGhlIHNpemUgaW4NCj4gbWVtb3J5IG9mDQo+ID4+IHRoZSBQRS9DT0ZGIGltYWdl DQo+ID4+ID4gKyAgQHBhcmFtW2luLG91dF0gIEVudHJ5UG9pbnQgICAgVGhlIGVudHJ5IHBvaW50 DQo+IG9mDQo+ID4+IHRoZSBQRS9DT0ZGIGltYWdlLiBQYXNzZWQgYnkNCj4gPj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2Ugc28gdGhhdA0KPiB0aGUNCj4gPj4g ZW11bGF0b3IgbWF5IG1vZGlmeSBpdC4NCj4gPj4gPiArDQo+ID4+ID4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgVGhlIGltYWdlIHdhcw0KPiA+PiByZWdpc3RlcmVkIHdpdGggdGhl IGVtdWxhdG9yIGFuZA0KPiA+PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh biBiZSBzdGFydGVkIGFzDQo+ID4+IHVzdWFsLg0KPiA+PiA+ICsgIEByZXR2YWwgb3RoZXIgICAg ICAgICAgICAgICAgIFRoZSBpbWFnZSBjb3VsZA0KPiBub3QNCj4gPj4gYmUgcmVnaXN0ZXJlZC4N Cj4gPj4gPiArDQo+ID4+ID4gKyAgSWYgdGhlIFBFL0NPRkYgbWFjaGluZSB0eXBlIG9yIGltYWdl IHR5cGUgYXJlDQo+IG5vdA0KPiA+PiBzdXBwb3J0ZWQgYnkgdGhlDQo+ID4+ID4gK2VtdWxhdG9y LA0KPiA+PiA+ICsgIHRoZW4gQVNTRVJUKCkuDQo+ID4+ID4gKyoqLw0KPiA+PiA+ICt0eXBlZGVm DQo+ID4+ID4gK0VGSV9TVEFUVVMNCj4gPj4gPiArKEVGSUFQSQ0KPiAqRURLSUlfUEVDT0ZGX0lN QUdFX0VNVUxBVE9SX1JFR0lTVEVSX0lNQUdFKQ0KPiA+PiAoDQo+ID4+ID4gKyAgSU4gICAgICBF REtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfUFJPVE9DT0wNCj4gPj4gKlRoaXMsDQo+ID4+ID4g KyAgSU4gICAgICBFRklfUEhZU0lDQUxfQUREUkVTUw0KPiA+PiBJbWFnZUJhc2UsDQo+ID4+ID4g KyAgSU4gICAgICBVSU5UNjQNCj4gPj4gSW1hZ2VTaXplLA0KPiA+PiA+ICsgIElOICBPVVQgRUZJ X0lNQUdFX0VOVFJZX1BPSU5UDQo+ID4+ICpFbnRyeVBvaW50DQo+ID4+ID4gKyAgKTsNCj4gPj4g PiArDQo+ID4+ID4gKy8qKg0KPiA+PiA+ICsgIFVucmVnaXN0ZXIgYSBQRS9DT0ZGIGltYWdlIHRo YXQgaGFzIGJlZW4NCj4gcmVnaXN0ZXJlZA0KPiA+PiB3aXRoIHRoZSBlbXVsYXRvci4NCj4gPj4g PiArICBUaGlzIHNob3VsZCBiZSBkb25lIGJlZm9yZSB0aGUgaW1hZ2UgaXMNCj4gdW5sb2FkZWQN Cj4gPj4gZnJvbSBtZW1vcnkuDQo+ID4+ID4gKw0KPiA+PiA+ICsgIEBwYXJhbVtpbl0gVGhpcyAg ICAgICAgIFRoaXMgcG9pbnRlciBmb3INCj4gPj4gRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9S X1BST1RPQ09MDQo+ID4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlDQo+ ID4+ID4gKyAgQHBhcmFtW2luXSBJbWFnZUJhc2UgICAgVGhlIGJhc2UgYWRkcmVzcyBpbg0KPiBt ZW1vcnkNCj4gPj4gb2YgdGhlIFBFL0NPRkYgaW1hZ2UNCj4gPj4gPiArDQo+ID4+ID4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIGltYWdlIHdhcw0KPiB1bnJlZ2lzdGVyZWQNCj4gPj4g d2l0aCB0aGUgZW11bGF0b3IuDQo+ID4+ID4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgSW1h Z2UgY291bGQgbm90IGJlDQo+ID4+IHVubG9hZGVkLg0KPiA+PiA+ICsqKi8NCj4gPj4gPiArdHlw ZWRlZg0KPiA+PiA+ICtFRklfU1RBVFVTDQo+ID4+ID4gKyhFRklBUEkNCj4gPj4gKkVES0lJX1BF Q09GRl9JTUFHRV9FTVVMQVRPUl9VTlJFR0lTVEVSX0lNQUdFKSAoDQo+ID4+ID4gKyAgSU4gIEVE S0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9QUk9UT0NPTA0KPiAqVGhpcywNCj4gPj4gPiArICBJ TiAgRUZJX1BIWVNJQ0FMX0FERFJFU1MNCj4gPj4gSW1hZ2VCYXNlDQo+ID4+ID4gKyAgKTsNCj4g Pj4gPiArDQo+ID4+ID4gK3R5cGVkZWYgc3RydWN0DQo+IF9FREtJSV9QRUNPRkZfSU1BR0VfRU1V TEFUT1JfUFJPVE9DT0wNCj4gPj4gew0KPiA+PiA+ICsgIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVM QVRPUl9JU19JTUFHRV9TVVBQT1JURUQNCj4gPj4gSXNJbWFnZVN1cHBvcnRlZDsNCj4gPj4gPiAr ICBFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfUkVHSVNURVJfSU1BR0UNCj4gPj4gUmVnaXN0 ZXJJbWFnZTsNCj4gPj4gPiArICBFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfVU5SRUdJU1RF Ul9JTUFHRQ0KPiA+PiBVbnJlZ2lzdGVySW1hZ2U7DQo+ID4+ID4gK30gRURLSUlfUEVDT0ZGX0lN QUdFX0VNVUxBVE9SX1BST1RPQ09MOw0KPiA+PiA+ICsNCj4gPj4gPiArZXh0ZXJuIEVGSV9HVUlE DQo+ID4+IGdFZGtpaVBlQ29mZkltYWdlRW11bGF0b3JQcm90b2NvbEd1aWQ7DQo+ID4+ID4gKw0K PiA+PiA+ICsjZW5kaWYNCj4gPj4gPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL01kZU1vZHVs ZVBrZy5kZWMNCj4gPj4gYi9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYyBpbmRleA0KPiA+ PiA2YTZkOTY2MGVkYzIuLmJlMzA3MzI5ZjkwMSAxMDA2NDQNCj4gPj4gPiAtLS0gYS9NZGVNb2R1 bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiA+PiA+ICsrKyBiL01kZU1vZHVsZVBrZy9NZGVNb2R1 bGVQa2cuZGVjDQo+ID4+ID4gQEAgLTYxNyw2ICs2MTcsMTAgQEANCj4gPj4gPg0KPiA+PiA+ICAg ICMjIEluY2x1ZGUvUHJvdG9jb2wvQXRhQXRhcGlQb2xpY3kuaA0KPiA+PiA+ICAgIGdFZGtpaUF0 YUF0YXBpUG9saWN5UHJvdG9jb2xHdWlkID0gew0KPiAweGU1OWNkNzY5LA0KPiA+PiAweDUwODMs IDB4NGYyNix7IDB4OTAsIDB4OTQsIDB4NmMsIDB4OTEsIDB4OWYsIDB4OTEsDQo+IDB4NmMsIDB4 NGUgfSB9DQo+ID4+ID4gKw0KPiA+PiA+ICsgICMjIEluY2x1ZGUvUHJvdG9jb2wvUGVDb2ZmSW1h Z2VFbXVsYXRvci5oDQo+ID4+ID4gKyAgZ0Vka2lpUGVDb2ZmSW1hZ2VFbXVsYXRvclByb3RvY29s R3VpZCA9IHsNCj4gPj4gMHg5NmY0NjE1MywgMHg5N2E3LCAweDQ3OTMsDQo+ID4+ID4gKyB7IDB4 YWMsIDB4YzEsIDB4ZmEsIDB4MTksIDB4YmYsIDB4NzgsIDB4ZWEsIDB4OTcNCj4gfSB9DQo+ID4+ ID4gKw0KPiA+PiA+ICAjDQo+ID4+ID4gICMgW0Vycm9yLmdFZmlNZGVNb2R1bGVQa2dUb2tlblNw YWNlR3VpZF0NCj4gPj4gPiAgIyAgIDB4ODAwMDAwMDEgfCBJbnZhbGlkIHZhbHVlIHByb3ZpZGVk Lg0KPiA+PiA+IC0tDQo+ID4+ID4gMi4xNy4xDQo+ID4+ID4NCg==