From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (using TLSv1 with cipher CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id C28661A1E16 for ; Mon, 22 Aug 2016 21:57:59 -0700 (PDT) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga101.fm.intel.com with ESMTP; 22 Aug 2016 21:57:59 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,564,1464678000"; d="scan'208";a="1018841154" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga001.jf.intel.com with ESMTP; 22 Aug 2016 21:57:59 -0700 Received: from fmsmsx156.amr.corp.intel.com (10.18.116.74) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 22 Aug 2016 21:57:58 -0700 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by fmsmsx156.amr.corp.intel.com (10.18.116.74) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 22 Aug 2016 21:57:57 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.8]) by shsmsx102.ccr.corp.intel.com ([169.254.2.147]) with mapi id 14.03.0248.002; Tue, 23 Aug 2016 12:57:55 +0800 From: "Tian, Feng" To: "Justen, Jordan L" , Leif Lindholm , "edk2-devel@lists.01.org" CC: Ard Biesheuvel , "Zeng, Star" , Laszlo Ersek , "Tian, Feng" Thread-Topic: [PATCH 1/2] MdeModulePkg/EbcDxe: Add AARCH64 EBC VM support Thread-Index: AQHR+I2XMx9OtYRJnk+AFCPdRvKiLaBPnXsQgAXaM4CAAIzq0A== Date: Tue, 23 Aug 2016 04:57:54 +0000 Message-ID: <7F1BAD85ADEA444D97065A60D2E97EE538824FBC@SHSMSX101.ccr.corp.intel.com> References: <1471441502-21873-1-git-send-email-leif.lindholm@linaro.org> <1471441502-21873-2-git-send-email-leif.lindholm@linaro.org> <7F1BAD85ADEA444D97065A60D2E97EE53882423A@SHSMSX101.ccr.corp.intel.com> <147192678931.10877.4613512511572264147@jljusten-ivb> In-Reply-To: <147192678931.10877.4613512511572264147@jljusten-ivb> 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 1/2] MdeModulePkg/EbcDxe: Add AARCH64 EBC VM support X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Aug 2016 04:58:00 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TWFueSB0aGFua3MsIEpvcmRhbg0KDQpMZWlmLA0KDQpJIGFtIG9rIHdpdGggdGhhdC4gUmV2aWV3 ZWQtYnk6IEZlbmcgVGlhbiA8ZmVuZy50aWFuQEludGVsLmNvbT4NCg0KVGhhbmtzDQpGZW5nDQoN Ci0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBKdXN0ZW4sIEpvcmRhbiBMIA0KU2Vu dDogVHVlc2RheSwgQXVndXN0IDIzLCAyMDE2IDEyOjMzIFBNDQpUbzogVGlhbiwgRmVuZyA8ZmVu Zy50aWFuQGludGVsLmNvbT47IExlaWYgTGluZGhvbG0gPGxlaWYubGluZGhvbG1AbGluYXJvLm9y Zz47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQpDYzogQXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVz aGV1dmVsQGxpbmFyby5vcmc+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPjsgTGFz emxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT47IFRpYW4sIEZlbmcgPGZlbmcudGlhbkBpbnRl bC5jb20+DQpTdWJqZWN0OiBSRTogW1BBVENIIDEvMl0gTWRlTW9kdWxlUGtnL0ViY0R4ZTogQWRk IEFBUkNINjQgRUJDIFZNIHN1cHBvcnQNCg0KT24gMjAxNi0wOC0xOCAyMDoxMjoxNiwgVGlhbiwg RmVuZyB3cm90ZToNCj4gSm9yZGFuLA0KPiANCj4gQW55IGNvbW1lbnRzIG9uIHRoaXM/IElzIGl0 IG9rIGZvciB5b3U/DQo+IA0KDQpTaW5jZSB0aGVyZSBpcyBhIENvbnRyaWJ1dGVkLXVuZGVyIGFu ZCBTaWduZWQtb2ZmLWJ5LCBpdCBhcHBlYXJzIHRvIGZvbGxvdyBvdXIgY3VycmVudCBjb250cmli dXRpb24gcHJvY2Vzcy4gSXQgbG9va3MgbGlrZSBMZWlmIGlzIGNvbmZpcm1pbmcgdGhhdCB3ZSBj YW4gdXNlIHRoZSBjb2RlIHVuZGVyIHRoZSAiVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBBZ3JlZW1l bnQgMS4wIiB0ZXJtcyBldmVuIHRob3VnaCBMaW5hcm8gZGlkIG5vdCBjcmVhdGUgdGhlIGNvZGUu DQoNCi1Kb3JkYW4NCg0KPg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBM ZWlmIExpbmRob2xtIFttYWlsdG86bGVpZi5saW5kaG9sbUBsaW5hcm8ub3JnXQ0KPiBTZW50OiBX ZWRuZXNkYXksIEF1Z3VzdCAxNywgMjAxNiA5OjQ1IFBNDQo+IFRvOiBlZGsyLWRldmVsQGxpc3Rz LjAxLm9yZw0KPiBDYzogQXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+ OyBUaWFuLCBGZW5nIA0KPiA8ZmVuZy50aWFuQGludGVsLmNvbT47IFplbmcsIFN0YXIgPHN0YXIu emVuZ0BpbnRlbC5jb20+OyBMYXN6bG8gRXJzZWsgDQo+IDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4g U3ViamVjdDogW1BBVENIIDEvMl0gTWRlTW9kdWxlUGtnL0ViY0R4ZTogQWRkIEFBUkNINjQgRUJD IFZNIHN1cHBvcnQNCj4gDQo+IEZyb206IEplZmYgQnJhc2VuIDxqYnJhc2VuQGNvZGVhdXJvcmEu b3JnPg0KPiANCj4gQWRkcyBzdXBwb3J0IGZvciB0aGUgRUJDIFZNIGZvciBBQVJDSDY0IHBsYXRm b3Jtcw0KPiANCj4gU3VibWl0dGVkIG9uIGJlaGFsZiBvZiBhIHRoaXJkLXBhcnR5OiBUaGUgTGlu dXggRm91bmRhdGlvbiBUaGlzIA0KPiBjb250cmlidXRpb24gaXMgbGljZW5zZWQgdW5kZXIgdGhl IEJTRCBsaWNlbnNlIGFzIGZvdW5kIGF0IA0KPiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5z ZXMvYnNkLWxpY2Vuc2UucGhwDQo+IA0KPiBbVGFrZW4gZnJvbSBodHRwczovL3NvdXJjZS5jb2Rl YXVyb3JhLm9yZy9leHRlcm5hbC9zZXJ2ZXIvZWRrMi1ibHVlLywgDQo+IGJyYW5jaCAgYWFyY2g2 NF9lYmNfc3VwcG9ydF0NCj4gDQo+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJp YnV0aW9uIEFncmVlbWVudCAxLjANCj4gU2lnbmVkLW9mZi1ieTogTGVpZiBMaW5kaG9sbSA8bGVp Zi5saW5kaG9sbUBsaW5hcm8ub3JnPg0KPiAtLS0NCj4gIC4uLi9Vbml2ZXJzYWwvRWJjRHhlL0FB cmNoNjQvRWJjTG93TGV2ZWwuUyAgICAgICAgIHwgMTM1ICsrKysrDQo+ICBNZGVNb2R1bGVQa2cv VW5pdmVyc2FsL0ViY0R4ZS9BQXJjaDY0L0ViY1N1cHBvcnQuYyB8IDU2MyArKysrKysrKysrKysr KysrKysrKysNCj4gIE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRWJjRHhlL0ViY0R4ZS5pbmYgICAg ICAgICAgIHwgICA4ICstDQo+ICAzIGZpbGVzIGNoYW5nZWQsIDcwNCBpbnNlcnRpb25zKCspLCAy IGRlbGV0aW9ucygtKSAgY3JlYXRlIG1vZGUgDQo+IDEwMDY0NCBNZGVNb2R1bGVQa2cvVW5pdmVy c2FsL0ViY0R4ZS9BQXJjaDY0L0ViY0xvd0xldmVsLlMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBN ZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0ViY0R4ZS9BQXJjaDY0L0ViY1N1cHBvcnQuYw0KPiANCj4g ZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRWJjRHhlL0FBcmNoNjQvRWJjTG93 TGV2ZWwuUyANCj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0ViY0R4ZS9BQXJjaDY0L0ViY0xv d0xldmVsLlMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uZTZmZTk0 Nw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRWJjRHhl L0FBcmNoNjQvRWJjTG93TGV2ZWwuUw0KPiBAQCAtMCwwICsxLDEzNSBAQA0KPiArIy8qKiBAZmls ZQ0KPiArIw0KPiArIyAgICBUaGlzIGNvZGUgcHJvdmlkZXMgbG93IGxldmVsIHJvdXRpbmVzIHRo YXQgc3VwcG9ydCB0aGUgVmlydHVhbCBNYWNoaW5lDQo+ICsjICAgZm9yIG9wdGlvbiBST01zLg0K PiArIw0KPiArIyAgQ29weXJpZ2h0IChjKSAyMDE1LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC4NCj4gKyMgIENvcHlyaWdodCAoYykgMjAwNyAtIDIwMTQsIEludGVs IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIA0KPiArcmVzZXJ2ZWQuPEJSPiAjICBUaGlzIHByb2dy YW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzICMgIGFyZSANCj4gK2xpY2Vuc2VkIGFu ZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJT RCANCj4gK0xpY2Vuc2UgIyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBU aGUgZnVsbCB0ZXh0IG9mIHRoZSANCj4gK2xpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0ICMgDQo+ICto dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsjDQo+ICsj ICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4g IkFTIElTIiANCj4gK0JBU0lTLCAjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJ T05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArIw0KPiArIyoq Lw0KPiArDQo+ICsjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gKy0tDQo+ICstLS0tLQ0KPiArIyBFcXVhdGUgZmls ZXMgbmVlZGVkLg0KPiArIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICstLQ0KPiArLS0tLS0NCj4gKw0KPiArQVNN X0dMT0JBTCBBU01fUEZYKENvcHlNZW0pOw0KPiArQVNNX0dMT0JBTCBBU01fUEZYKEViY0ludGVy cHJldCk7DQo+ICtBU01fR0xPQkFMIEFTTV9QRlgoRXhlY3V0ZUViY0ltYWdlRW50cnlQb2ludCk7 DQo+ICsNCj4gKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKg0KPiArKioNCj4gKyoqKioqKg0KPiArIyBFYmNMTENBTExF WA0KPiArIw0KPiArIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBleGVjdXRlIGFuIEVCQyBD QUxMRVggaW5zdHJ1Y3Rpb24uDQo+ICsjIFRoaXMgaW5zdHJ1Y3Rpb24gcmVxdWlyZXMgdGhhdCB3 ZSB0aHVuayBvdXQgdG8gZXh0ZXJuYWwgbmF0aXZlICMgDQo+ICtjb2RlLiBGb3IgQUFyY2g2NCwg d2UgY29weSB0aGUgVk0gc3RhY2sgaW50byB0aGUgbWFpbiBzdGFjayBhbmQgdGhlbiANCj4gK3Bv cCAjIHRoZSBmaXJzdCA4IGFyZ3VtZW50cyBvZmYgYWNjb3JkaW5nIHRvIHRoZSBBQXJjaDY0IFBy b2NlZHVyZSANCj4gK0NhbGwgU3RhbmRhcmQgIyBPbiByZXR1cm4sIHdlIHJlc3RvcmUgdGhlIHN0 YWNrIHBvaW50ZXIgdG8gaXRzIG9yaWdpbmFsIGxvY2F0aW9uLg0KPiArIw0KPiArIyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqDQo+ICsqKg0KPiArKioqKioqICMgVUlOVE4gRWJjTExDQUxMRVhOYXRpdmUoVUlOVE4gRnVu Y0FkZHIsIFVJTlROIA0KPiArTmV3U3RhY2tQb2ludGVyLCBWT0lEICpGcmFtZVB0cikgQVNNX0dM T0JBTCANCj4gK0FTTV9QRlgoRWJjTExDQUxMRVhOYXRpdmUpOw0KPiArQVNNX1BGWChFYmNMTENB TExFWE5hdGl2ZSk6DQo+ICsgICAgICBzdHAgIHgxOSwgeDIwLCBbc3AsICMtMTZdIQ0KPiArICAg ICAgc3RwICB4MjksIHgzMCwgW3NwLCAjLTE2XSENCj4gKw0KPiArICAgICAgbW92ICB4MTksIHgw DQo+ICsgICAgICBtb3YgIHgyMCwgc3ANCj4gKyAgICAgIHN1YiAgeDIsIHgyLCB4MSAgIC8vIExl bmd0aCA9IE5ld1N0YWNrUG9pbnRlci1GcmFtZVB0cg0KPiArICAgICAgc3ViICBzcCwgc3AsIHgy DQo+ICsgICAgICBzdWIgIHNwLCBzcCwgIzY0ICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgcm9vbSBm b3IgYXQgbGVhc3QgOCBhcmdzIGluIHRoZSBuZXcgc3RhY2sNCj4gKyAgICAgIG1vdiAgeDAsIHNw DQo+ICsNCj4gKyAgICAgIGJsICAgQ29weU1lbSAgICAgIC8vIFNwLCBOZXdTdGFja1BvaW50ZXIs IExlbmd0aA0KPiArDQo+ICsgICAgICBsZHAgIHgwLCB4MSwgW3NwXSwgIzE2DQo+ICsgICAgICBs ZHAgIHgyLCB4MywgW3NwXSwgIzE2DQo+ICsgICAgICBsZHAgIHg0LCB4NSwgW3NwXSwgIzE2DQo+ ICsgICAgICBsZHAgIHg2LCB4NywgW3NwXSwgIzE2DQo+ICsNCj4gKyAgICAgIGJsciAgeDE5DQo+ ICsNCj4gKyAgICAgIG1vdiAgc3AsICB4MjANCj4gKyAgICAgIGxkcCAgeDI5LCB4MzAsIFtzcF0s ICMxNg0KPiArICAgICAgbGRwICB4MTksIHgyMCwgW3NwXSwgIzE2DQo+ICsNCj4gKyAgICAgIHJl dA0KPiArDQo+ICsjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioNCj4gKyoqDQo+ICsqKioqKioNCj4gKyMgRWJjTExFYmNJ bnRlcnByZXQNCj4gKyMNCj4gKyMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRodW5r IGNvZGUgdG8gaGFuZGxlIGFuIE5hdGl2ZSB0byANCj4gK0VCQyBjYWxsICMgVGhpcyBjYW4gaGFu ZGxlIHVwIHRvIDE2IGFyZ3VtZW50cyAoMS04IG9uIGluIHgwLXg3LCA5LTE2IA0KPiArYXJlIG9u IHRoZSBzdGFjaykgIyB4OSBjb250YWlucyB0aGUgRW50cnkgcG9pbnQgdGhhdCB3aWxsIGJlIHRo ZSANCj4gK2ZpcnN0IGFyZ3VtZW50IHdoZW4gIyBFQkNJbnRlcnByZXQgaXMgY2FsbGVkLg0KPiAr Iw0KPiArIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqDQo+ICsqKg0KPiArKioqKioqDQo+ICtBU01fR0xPQkFMIEFTTV9Q RlgoRWJjTExFYmNJbnRlcnByZXQpOw0KPiArQVNNX1BGWChFYmNMTEViY0ludGVycHJldCk6DQo+ ICsgICAgc3RwICB4MjksIHgzMCwgW3NwLCAjLTE2XSENCj4gKw0KPiArICAgIC8vIGNvcHkgdGhl IGN1cnJlbnQgYXJndW1lbnRzIDktMTYgZnJvbSBvbGQgbG9jYXRpb24gYW5kIGFkZCBhcmcgNyB0 byBzdGFjaw0KPiArICAgIC8vIGtlZXBpbmcgMTYgYnl0ZSBzdGFjayBhbGlnbm1lbnQNCj4gKyAg ICBzdWIgc3AsIHNwLCAjODANCj4gKyAgICBzdHIgeDcsIFtzcF0NCj4gKyAgICBsZHIgeDExLCBb c3AsICM5Nl0NCj4gKyAgICBzdHIgeDExLCBbc3AsICM4XQ0KPiArICAgIGxkciB4MTEsIFtzcCwg IzEwNF0NCj4gKyAgICBzdHIgeDExLCBbc3AsICMxNl0NCj4gKyAgICBsZHIgeDExLCBbc3AsICMx MTJdDQo+ICsgICAgc3RyIHgxMSwgW3NwLCAjMjRdDQo+ICsgICAgbGRyIHgxMSwgW3NwLCAjMTIw XQ0KPiArICAgIHN0ciB4MTEsIFtzcCwgIzMyXQ0KPiArICAgIGxkciB4MTEsIFtzcCwgIzEyOF0N Cj4gKyAgICBzdHIgeDExLCBbc3AsICM0MF0NCj4gKyAgICBsZHIgeDExLCBbc3AsICMxMzZdDQo+ ICsgICAgc3RyIHgxMSwgW3NwLCAjNDhdDQo+ICsgICAgbGRyIHgxMSwgW3NwLCAjMTQ0XQ0KPiAr ICAgIHN0ciB4MTEsIFtzcCwgIzU2XQ0KPiArICAgIGxkciB4MTEsIFtzcCwgIzE1Ml0NCj4gKyAg ICBzdHIgeDExLCBbc3AsICM2NF0NCj4gKw0KPiArICAgIC8vIFNoaWZ0IGFyZ3VtZW50cyBhbmQg YWRkIGVudHJ5IHBvaW50IGFuZCBhcyBhcmd1bWVudCAxDQo+ICsgICAgbW92IHg3LCB4Ng0KPiAr ICAgIG1vdiB4NiwgeDUNCj4gKyAgICBtb3YgeDUsIHg0DQo+ICsgICAgbW92IHg0LCB4Mw0KPiAr ICAgIG1vdiB4MywgeDINCj4gKyAgICBtb3YgeDIsIHgxDQo+ICsgICAgbW92IHgxLCB4MA0KPiAr ICAgIG1vdiB4MCwgeDkNCj4gKw0KPiArICAgICMgY2FsbCBDLWNvZGUNCj4gKyAgICBibCBBU01f UEZYKEViY0ludGVycHJldCkNCj4gKyAgICBhZGQgc3AsIHNwLCAjODANCj4gKw0KPiArICAgIGxk cCAgeDI5LCB4MzAsIFtzcF0sICMxNg0KPiArDQo+ICsgICAgcmV0DQo+ICsNCj4gKyMqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKg0KPiArKioNCj4gKyoqKioqKg0KPiArIyBFYmNMTEV4ZWN1dGVFYmNJbWFnZUVudHJ5UG9p bnQNCj4gKyMNCj4gKyMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRodW5rIGNvZGUg dG8gaGFuZGxlIHRoZSBpbWFnZSBlbnRyeSANCj4gK3BvaW50ICMgeDkgY29udGFpbnMgdGhlIEVu dHJ5IHBvaW50IHRoYXQgd2lsbCBiZSB0aGUgZmlyc3QgYXJndW1lbnQgDQo+ICt3aGVuICMgRXhl Y3V0ZUViY0ltYWdlRW50cnlQb2ludCBpcyBjYWxsZWQuDQo+ICsjDQo+ICsjKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioN Cj4gKyoqDQo+ICsqKioqKiogQVNNX0dMT0JBTCBBU01fUEZYKEViY0xMRXhlY3V0ZUViY0ltYWdl RW50cnlQb2ludCk7DQo+ICtBU01fUEZYKEViY0xMRXhlY3V0ZUViY0ltYWdlRW50cnlQb2ludCk6 DQo+ICsgICAgc3RwICB4MjksIHgzMCwgW3NwLCAjLTE2XSENCj4gKyAgICAjIGJ1aWxkIG5ldyBw YXJhbWF0ZXIgY2FsbGluZyBjb252ZW50aW9uDQo+ICsgICAgbW92ICB4MiwgeDENCj4gKyAgICBt b3YgIHgxLCB4MA0KPiArICAgIG1vdiAgeDAsIHg5DQo+ICsNCj4gKyAgICAjIGNhbGwgQy1jb2Rl DQo+ICsgICAgYmwgQVNNX1BGWChFeGVjdXRlRWJjSW1hZ2VFbnRyeVBvaW50KQ0KPiArICAgIGxk cCAgeDI5LCB4MzAsIFtzcF0sICMxNg0KPiArICAgIHJldA0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9k dWxlUGtnL1VuaXZlcnNhbC9FYmNEeGUvQUFyY2g2NC9FYmNTdXBwb3J0LmMgDQo+IGIvTWRlTW9k dWxlUGtnL1VuaXZlcnNhbC9FYmNEeGUvQUFyY2g2NC9FYmNTdXBwb3J0LmMNCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uMjQ0MzZhMw0KPiAtLS0gL2Rldi9udWxsDQo+ ICsrKyBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRWJjRHhlL0FBcmNoNjQvRWJjU3VwcG9ydC5j DQo+IEBAIC0wLDAgKzEsNTYzIEBADQo+ICsvKiogQGZpbGUNCj4gKyAgVGhpcyBtb2R1bGUgY29u dGFpbnMgRUJDIHN1cHBvcnQgcm91dGluZXMgdGhhdCBhcmUgY3VzdG9taXplZCBiYXNlZCANCj4g K29uDQo+ICsgIHRoZSB0YXJnZXQgQUFyY2g2NCBwcm9jZXNzb3IuDQo+ICsNCj4gK0NvcHlyaWdo dCAoYykgMjAxNSwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ ICtDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0 cyANCj4gK3Jlc2VydmVkLjxCUj4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1h dGVyaWFscyBhcmUgDQo+ICtsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRl cm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgDQo+ICtMaWNlbnNlIHdoaWNoIGFjY29tcGFu aWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgDQo+ICtsaWNlbnNl IG1heSBiZSBmb3VuZCBhdCANCj4gK2h0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2Qt bGljZW5zZS5waHANCj4gKw0KPiArVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhF IEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIA0KPiArV0lUSE9VVCBXQVJSQU5USUVT IE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElF RC4NCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlICJFYmNJbnQuaCINCj4gKyNpbmNsdWRl ICJFYmNFeGVjdXRlLmgiDQo+ICsNCj4gKy8vDQo+ICsvLyBBbW91bnQgb2Ygc3BhY2UgdGhhdCBp cyBub3QgdXNlZCBpbiB0aGUgc3RhY2sgLy8gI2RlZmluZSANCj4gK1NUQUNLX1JFTUFJTl9TSVpF ICgxMDI0ICogNCkNCj4gKw0KPiArLy8NCj4gKy8vIFRoaXMgaXMgaW5zdHJ1Y3Rpb24gYnVmZmVy IHVzZWQgdG8gY3JlYXRlIEVCQyB0aHVuayAvLw0KPiArI2RlZmluZSBFQkNfTUFHSUNfU0lHTkFU VVJFICAgICAgICAgICAgICAgIDB4Q0ExMTJFQkNDQTExMkVCQ3VsbA0KPiArI2RlZmluZSBFQkNf RU5UUllQT0lOVF9TSUdOQVRVUkUgICAgICAgICAgIDB4QUZBRkFGQUZBRkFGQUZBRnVsbA0KPiAr I2RlZmluZSBFQkNfTExfRUJDX0VOVFJZUE9JTlRfU0lHTkFUVVJFICAgIDB4RkFGQUZBRkFGQUZB RkFGQXVsbA0KPiArVUlOVDggIG1JbnN0cnVjdGlvbkJ1ZmZlclRlbXBsYXRlW10gPSB7DQo+ICsg IDB4MDMsICAweDAwLCAweDAwLCAweDE0LCAvL2IgcGMrMTYNCj4gKyAgLy8NCj4gKyAgLy8gQWRk IGEgbWFnaWMgY29kZSBoZXJlIHRvIGhlbHAgdGhlIFZNIHJlY29nbml6ZSB0aGUgdGh1bmsuLg0K PiArICAvLw0KPiArICAgIChVSU5UOCkoRUJDX01BR0lDX1NJR05BVFVSRSAmIDB4RkYpLA0KPiAr ICAgIChVSU5UOCkoKEVCQ19NQUdJQ19TSUdOQVRVUkUgPj4gOCkgJiAweEZGKSwNCj4gKyAgICAo VUlOVDgpKChFQkNfTUFHSUNfU0lHTkFUVVJFID4+IDE2KSAmIDB4RkYpLA0KPiArICAgIChVSU5U OCkoKEVCQ19NQUdJQ19TSUdOQVRVUkUgPj4gMjQpICYgMHhGRiksDQo+ICsgICAgKFVJTlQ4KSgo RUJDX01BR0lDX1NJR05BVFVSRSA+PiAzMikgJiAweEZGKSwNCj4gKyAgICAoVUlOVDgpKChFQkNf TUFHSUNfU0lHTkFUVVJFID4+IDQwKSAmIDB4RkYpLA0KPiArICAgIChVSU5UOCkoKEVCQ19NQUdJ Q19TSUdOQVRVUkUgPj4gNDgpICYgMHhGRiksDQo+ICsgICAgKFVJTlQ4KSgoRUJDX01BR0lDX1NJ R05BVFVSRSA+PiA1NikgJiAweEZGKSwNCj4gKyAgMHg2OSwgMHgwMCwgMHgwMCwgMHg1OCwgLy9s ZHIgeDksICMzMg0KPiArICAweDhBLCAweDAwLCAweDAwLCAweDU4LCAvL2xkciB4MTAsICM0MA0K PiArICAweDA1LCAweDAwLCAweDAwLCAweDE0LCAvL2IgcGMrMzINCj4gKyAgICAoVUlOVDgpKEVC Q19FTlRSWVBPSU5UX1NJR05BVFVSRSAmIDB4RkYpLA0KPiArICAgIChVSU5UOCkoKEVCQ19FTlRS WVBPSU5UX1NJR05BVFVSRSA+PiA4KSAmIDB4RkYpLA0KPiArICAgIChVSU5UOCkoKEVCQ19FTlRS WVBPSU5UX1NJR05BVFVSRSA+PiAxNikgJiAweEZGKSwNCj4gKyAgICAoVUlOVDgpKChFQkNfRU5U UllQT0lOVF9TSUdOQVRVUkUgPj4gMjQpICYgMHhGRiksDQo+ICsgICAgKFVJTlQ4KSgoRUJDX0VO VFJZUE9JTlRfU0lHTkFUVVJFID4+IDMyKSAmIDB4RkYpLA0KPiArICAgIChVSU5UOCkoKEVCQ19F TlRSWVBPSU5UX1NJR05BVFVSRSA+PiA0MCkgJiAweEZGKSwNCj4gKyAgICAoVUlOVDgpKChFQkNf RU5UUllQT0lOVF9TSUdOQVRVUkUgPj4gNDgpICYgMHhGRiksDQo+ICsgICAgKFVJTlQ4KSgoRUJD X0VOVFJZUE9JTlRfU0lHTkFUVVJFID4+IDU2KSAmIDB4RkYpLA0KPiArICAgIChVSU5UOCkoRUJD X0xMX0VCQ19FTlRSWVBPSU5UX1NJR05BVFVSRSAmIDB4RkYpLA0KPiArICAgIChVSU5UOCkoKEVC Q19MTF9FQkNfRU5UUllQT0lOVF9TSUdOQVRVUkUgPj4gOCkgJiAweEZGKSwNCj4gKyAgICAoVUlO VDgpKChFQkNfTExfRUJDX0VOVFJZUE9JTlRfU0lHTkFUVVJFID4+IDE2KSAmIDB4RkYpLA0KPiAr ICAgIChVSU5UOCkoKEVCQ19MTF9FQkNfRU5UUllQT0lOVF9TSUdOQVRVUkUgPj4gMjQpICYgMHhG RiksDQo+ICsgICAgKFVJTlQ4KSgoRUJDX0xMX0VCQ19FTlRSWVBPSU5UX1NJR05BVFVSRSA+PiAz MikgJiAweEZGKSwNCj4gKyAgICAoVUlOVDgpKChFQkNfTExfRUJDX0VOVFJZUE9JTlRfU0lHTkFU VVJFID4+IDQwKSAmIDB4RkYpLA0KPiArICAgIChVSU5UOCkoKEVCQ19MTF9FQkNfRU5UUllQT0lO VF9TSUdOQVRVUkUgPj4gNDgpICYgMHhGRiksDQo+ICsgICAgKFVJTlQ4KSgoRUJDX0xMX0VCQ19F TlRSWVBPSU5UX1NJR05BVFVSRSA+PiA1NikgJiAweEZGKSwNCj4gKyAgMHg0MCwgMHgwMSwgMHgx RiwgMHhENiAvL2JyIHgxMA0KPiArDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAgQmVnaW4gZXhl Y3V0aW5nIGFuIEVCQyBpbWFnZS4NCj4gKyAgVGhpcyBpcyB1c2VkIGZvciBFYmMgVGh1bmsgY2Fs bC4NCj4gKw0KPiArICBAcmV0dXJuIFRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgRUJDIGFwcGxp Y2F0aW9uIHdlJ3JlIGdvaW5nIHRvIHJ1bi4NCj4gKw0KPiArKiovDQo+ICtVSU5UNjQNCj4gK0VG SUFQSQ0KPiArRWJjTExFYmNJbnRlcnByZXQgKA0KPiArICBWT0lEDQo+ICsgICk7DQo+ICsNCj4g Ky8qKg0KPiArICBCZWdpbiBleGVjdXRpbmcgYW4gRUJDIGltYWdlLg0KPiArICBUaGlzIGlzIHVz ZWQgZm9yIEViYyBpbWFnZSBlbnRyeXBvaW50Lg0KPiArDQo+ICsgIEByZXR1cm4gVGhlIHZhbHVl IHJldHVybmVkIGJ5IHRoZSBFQkMgYXBwbGljYXRpb24gd2UncmUgZ29pbmcgdG8gcnVuLg0KPiAr DQo+ICsqKi8NCj4gK1VJTlQ2NA0KPiArRUZJQVBJDQo+ICtFYmNMTEV4ZWN1dGVFYmNJbWFnZUVu dHJ5UG9pbnQgKA0KPiArICBWT0lEDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBQdXNoZXMg YSA2NCBiaXQgdW5zaWduZWQgdmFsdWUgdG8gdGhlIFZNIHN0YWNrLg0KPiArDQo+ICsgIEBwYXJh bSBWbVB0ciAgVGhlIHBvaW50ZXIgdG8gY3VycmVudCBWTSBjb250ZXh0Lg0KPiArICBAcGFyYW0g QXJnICAgIFRoZSB2YWx1ZSB0byBiZSBwdXNoZWQuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiAr UHVzaFU2NCAoDQo+ICsgIElOIFZNX0NPTlRFWFQgKlZtUHRyLA0KPiArICBJTiBVSU5UNjQgICAg IEFyZw0KPiArICApDQo+ICt7DQo+ICsgIC8vDQo+ICsgIC8vIEFkdmFuY2UgdGhlIFZNIHN0YWNr IGRvd24sIGFuZCB0aGVuIGNvcHkgdGhlIGFyZ3VtZW50IHRvIHRoZSBzdGFjay4NCj4gKyAgLy8g SG9wZSBpdCdzIGFsaWduZWQuDQo+ICsgIC8vDQo+ICsgIFZtUHRyLT5HcHJbMF0gLT0gc2l6ZW9m IChVSU5UNjQpOw0KPiArICAqKFVJTlQ2NCAqKSBWbVB0ci0+R3ByWzBdID0gQXJnOw0KPiArICBy ZXR1cm47DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgIEJlZ2luIGV4ZWN1dGluZyBhbiBF QkMgaW1hZ2UuDQo+ICsNCj4gKyAgVGhpcyBpcyBhIHRodW5rIGZ1bmN0aW9uLg0KPiArDQo+ICsg IEBwYXJhbSAgRW50cnlQb2ludCAgICAgICAgICAgIFRoZSBlbnRyeXBvaW50IG9mIEVCQyBjb2Rl Lg0KPiArICBAcGFyYW0gIEFyZzEgICAgICAgICAgICAgICAgICBUaGUgMXN0IGFyZ3VtZW50Lg0K PiArICBAcGFyYW0gIEFyZzIgICAgICAgICAgICAgICAgICBUaGUgMm5kIGFyZ3VtZW50Lg0KPiAr ICBAcGFyYW0gIEFyZzMgICAgICAgICAgICAgICAgICBUaGUgM3JkIGFyZ3VtZW50Lg0KPiArICBA cGFyYW0gIEFyZzQgICAgICAgICAgICAgICAgICBUaGUgNHRoIGFyZ3VtZW50Lg0KPiArICBAcGFy YW0gIEFyZzUgICAgICAgICAgICAgICAgICBUaGUgNXRoIGFyZ3VtZW50Lg0KPiArICBAcGFyYW0g IEFyZzYgICAgICAgICAgICAgICAgICBUaGUgNnRoIGFyZ3VtZW50Lg0KPiArICBAcGFyYW0gIEFy ZzcgICAgICAgICAgICAgICAgICBUaGUgN3RoIGFyZ3VtZW50Lg0KPiArICBAcGFyYW0gIEFyZzgg ICAgICAgICAgICAgICAgICBUaGUgOHRoIGFyZ3VtZW50Lg0KPiArICBAcGFyYW0gIEFyZzkgICAg ICAgICAgICAgICAgICBUaGUgOXRoIGFyZ3VtZW50Lg0KPiArICBAcGFyYW0gIEFyZzEwICAgICAg ICAgICAgICAgICBUaGUgMTB0aCBhcmd1bWVudC4NCj4gKyAgQHBhcmFtICBBcmcxMSAgICAgICAg ICAgICAgICAgVGhlIDExdGggYXJndW1lbnQuDQo+ICsgIEBwYXJhbSAgQXJnMTIgICAgICAgICAg ICAgICAgIFRoZSAxMnRoIGFyZ3VtZW50Lg0KPiArICBAcGFyYW0gIEFyZzEzICAgICAgICAgICAg ICAgICBUaGUgMTN0aCBhcmd1bWVudC4NCj4gKyAgQHBhcmFtICBBcmcxNCAgICAgICAgICAgICAg ICAgVGhlIDE0dGggYXJndW1lbnQuDQo+ICsgIEBwYXJhbSAgQXJnMTUgICAgICAgICAgICAgICAg IFRoZSAxNXRoIGFyZ3VtZW50Lg0KPiArICBAcGFyYW0gIEFyZzE2ICAgICAgICAgICAgICAgICBU aGUgMTZ0aCBhcmd1bWVudC4NCj4gKw0KPiArICBAcmV0dXJuIFRoZSB2YWx1ZSByZXR1cm5lZCBi eSB0aGUgRUJDIGFwcGxpY2F0aW9uIHdlJ3JlIGdvaW5nIHRvIHJ1bi4NCj4gKw0KPiArKiovDQo+ ICtVSU5UNjQNCj4gK0VGSUFQSQ0KPiArRWJjSW50ZXJwcmV0ICgNCj4gKyAgSU4gVUlOVE4gICAg ICBFbnRyeVBvaW50LA0KPiArICBJTiBVSU5UTiAgICAgIEFyZzEsDQo+ICsgIElOIFVJTlROICAg ICAgQXJnMiwNCj4gKyAgSU4gVUlOVE4gICAgICBBcmczLA0KPiArICBJTiBVSU5UTiAgICAgIEFy ZzQsDQo+ICsgIElOIFVJTlROICAgICAgQXJnNSwNCj4gKyAgSU4gVUlOVE4gICAgICBBcmc2LA0K PiArICBJTiBVSU5UTiAgICAgIEFyZzcsDQo+ICsgIElOIFVJTlROICAgICAgQXJnOCwNCj4gKyAg SU4gVUlOVE4gICAgICBBcmc5LA0KPiArICBJTiBVSU5UTiAgICAgIEFyZzEwLA0KPiArICBJTiBV SU5UTiAgICAgIEFyZzExLA0KPiArICBJTiBVSU5UTiAgICAgIEFyZzEyLA0KPiArICBJTiBVSU5U TiAgICAgIEFyZzEzLA0KPiArICBJTiBVSU5UTiAgICAgIEFyZzE0LA0KPiArICBJTiBVSU5UTiAg ICAgIEFyZzE1LA0KPiArICBJTiBVSU5UTiAgICAgIEFyZzE2DQo+ICsgICkNCj4gK3sNCj4gKyAg Ly8NCj4gKyAgLy8gQ3JlYXRlIGEgbmV3IFZNIGNvbnRleHQgb24gdGhlIHN0YWNrDQo+ICsgIC8v DQo+ICsgIFZNX0NPTlRFWFQgIFZtQ29udGV4dDsNCj4gKyAgVUlOVE4gICAgICAgQWRkcjsNCj4g KyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArICBVSU5UTiAgICAgICBTdGFja0luZGV4Ow0KPiAr DQo+ICsgIC8vDQo+ICsgIC8vIEdldCB0aGUgRUJDIGVudHJ5IHBvaW50DQo+ICsgIC8vDQo+ICsg IEFkZHIgPSBFbnRyeVBvaW50Ow0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIE5vdyBjbGVhciBvdXQg b3VyIGNvbnRleHQNCj4gKyAgLy8NCj4gKyAgWmVyb01lbSAoKFZPSUQgKikgJlZtQ29udGV4dCwg c2l6ZW9mIChWTV9DT05URVhUKSk7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gU2V0IHRoZSBWTSBp bnN0cnVjdGlvbiBwb2ludGVyIHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uIGluIG1lbW9yeS4NCj4g KyAgLy8NCj4gKyAgVm1Db250ZXh0LklwID0gKFZNSVApIEFkZHI7DQo+ICsNCj4gKyAgLy8NCj4g KyAgLy8gSW5pdGlhbGl6ZSB0aGUgc3RhY2sgcG9pbnRlciBmb3IgdGhlIEVCQy4gR2V0IHRoZSBj dXJyZW50IHN5c3RlbSANCj4gKyBzdGFjayAgLy8gcG9pbnRlciBhbmQgYWRqdXN0IGl0IGRvd24g YnkgdGhlIG1heCBuZWVkZWQgZm9yIHRoZSBpbnRlcnByZXRlci4NCj4gKyAgLy8NCj4gKw0KPiAr ICAvLw0KPiArICAvLyBBZGp1c3QgdGhlIFZNJ3Mgc3RhY2sgcG9pbnRlciBkb3duLg0KPiArICAv Lw0KPiArDQo+ICsgIFN0YXR1cyA9IEdldEVCQ1N0YWNrKChFRklfSEFORExFKShVSU5UTiktMSwg JlZtQ29udGV4dC5TdGFja1Bvb2wsIA0KPiArICZTdGFja0luZGV4KTsgIGlmIChFRklfRVJST1Io U3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKyAgVm1Db250ZXh0 LlN0YWNrVG9wID0gKFVJTlQ4KilWbUNvbnRleHQuU3RhY2tQb29sICsgDQo+ICsgKFNUQUNLX1JF TUFJTl9TSVpFKTsgIFZtQ29udGV4dC5HcHJbMF0gPSAoVUlOVDY0KSANCj4gKyAoKFVJTlQ4KilW bUNvbnRleHQuU3RhY2tQb29sICsgU1RBQ0tfUE9PTF9TSVpFKTsgDQo+ICsgVm1Db250ZXh0Lkhp Z2hTdGFja0JvdHRvbSA9IChVSU5UTikgVm1Db250ZXh0LkdwclswXTsgDQo+ICsgVm1Db250ZXh0 LkdwclswXSAtPSBzaXplb2YgKFVJTlROKTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBBbGlnbiB0 aGUgc3RhY2sgb24gYSBuYXR1cmFsIGJvdW5kYXJ5Lg0KPiArICAvLw0KPiArICBWbUNvbnRleHQu R3ByWzBdICY9IH4oVk1fUkVHSVNURVIpKHNpemVvZiAoVUlOVE4pIC0gMSk7DQo+ICsNCj4gKyAg Ly8NCj4gKyAgLy8gUHV0IGEgbWFnaWMgdmFsdWUgaW4gdGhlIHN0YWNrIGdhcCwgdGhlbiBhZGp1 c3QgZG93biBhZ2Fpbi4NCj4gKyAgLy8NCj4gKyAgKihVSU5UTiAqKSAoVUlOVE4pIChWbUNvbnRl eHQuR3ByWzBdKSA9IChVSU5UTikgVk1fU1RBQ0tfS0VZX1ZBTFVFOw0KPiArICBWbUNvbnRleHQu U3RhY2tNYWdpY1B0ciAgICAgICAgICAgICA9IChVSU5UTiAqKSAoVUlOVE4pIFZtQ29udGV4dC5H cHJbMF07DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gVGhlIHN0YWNrIHVwcGVyIHRvIExvd1N0YWNr VG9wIGlzIGJlbG9uZyB0byB0aGUgVk0uDQo+ICsgIC8vDQo+ICsgIFZtQ29udGV4dC5Mb3dTdGFj a1RvcCAgID0gKFVJTlROKSBWbUNvbnRleHQuR3ByWzBdOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8v IEZvciB0aGUgd29yc3QgY2FzZSwgYXNzdW1lIHRoZXJlIGFyZSA0IGFyZ3VtZW50cyBwYXNzZWQg aW4gDQo+ICsgcmVnaXN0ZXJzLCBzdG9yZSAgLy8gdGhlbSB0byBWTSdzIHN0YWNrLg0KPiArICAv Lw0KPiArICBQdXNoVTY0ICgmVm1Db250ZXh0LCAoVUlOVDY0KSBBcmcxNik7DQo+ICsgIFB1c2hV NjQgKCZWbUNvbnRleHQsIChVSU5UNjQpIEFyZzE1KTsNCj4gKyAgUHVzaFU2NCAoJlZtQ29udGV4 dCwgKFVJTlQ2NCkgQXJnMTQpOw0KPiArICBQdXNoVTY0ICgmVm1Db250ZXh0LCAoVUlOVDY0KSBB cmcxMyk7DQo+ICsgIFB1c2hVNjQgKCZWbUNvbnRleHQsIChVSU5UNjQpIEFyZzEyKTsNCj4gKyAg UHVzaFU2NCAoJlZtQ29udGV4dCwgKFVJTlQ2NCkgQXJnMTEpOw0KPiArICBQdXNoVTY0ICgmVm1D b250ZXh0LCAoVUlOVDY0KSBBcmcxMCk7DQo+ICsgIFB1c2hVNjQgKCZWbUNvbnRleHQsIChVSU5U NjQpIEFyZzkpOw0KPiArICBQdXNoVTY0ICgmVm1Db250ZXh0LCAoVUlOVDY0KSBBcmc4KTsNCj4g KyAgUHVzaFU2NCAoJlZtQ29udGV4dCwgKFVJTlQ2NCkgQXJnNyk7DQo+ICsgIFB1c2hVNjQgKCZW bUNvbnRleHQsIChVSU5UNjQpIEFyZzYpOw0KPiArICBQdXNoVTY0ICgmVm1Db250ZXh0LCAoVUlO VDY0KSBBcmc1KTsNCj4gKyAgUHVzaFU2NCAoJlZtQ29udGV4dCwgKFVJTlQ2NCkgQXJnNCk7DQo+ ICsgIFB1c2hVNjQgKCZWbUNvbnRleHQsIChVSU5UNjQpIEFyZzMpOw0KPiArICBQdXNoVTY0ICgm Vm1Db250ZXh0LCAoVUlOVDY0KSBBcmcyKTsNCj4gKyAgUHVzaFU2NCAoJlZtQ29udGV4dCwgKFVJ TlQ2NCkgQXJnMSk7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW50ZXJwcmV0ZXIgYXNzdW1lcyA2 NC1iaXQgcmV0dXJuIGFkZHJlc3MgaXMgcHVzaGVkIG9uIHRoZSBzdGFjay4NCj4gKyAgLy8gQUFy Y2g2NCBkb2VzIG5vdCBkbyB0aGlzIHNvIHBhZCB0aGUgc3RhY2sgYWNjb3JkaW5nbHkuDQo+ICsg IC8vDQo+ICsgIFB1c2hVNjQgKCZWbUNvbnRleHQsIChVSU5UNjQpIDApOw0KPiArICBQdXNoVTY0 ICgmVm1Db250ZXh0LCAoVUlOVDY0KSAweDEyMzQ1Njc4ODc2NTQzMjFVTEwpOw0KPiArDQo+ICsg IC8vDQo+ICsgIC8vIEZvciBBQXJjaDY0LCB0aGlzIGlzIHdoZXJlIHdlIHNheSBvdXIgcmV0dXJu IGFkZHJlc3MgaXMgIC8vIA0KPiArIFZtQ29udGV4dC5TdGFja1JldEFkZHIgID0gKFVJTlQ2NCkg Vm1Db250ZXh0LkdwclswXTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBXZSBuZWVkIHRvIGtlZXAg dHJhY2sgb2Ygd2hlcmUgdGhlIEVCQyBzdGFjayBzdGFydHMuIFRoaXMgd2F5LCANCj4gKyBpZiB0 aGUgRUJDICAvLyBhY2Nlc3NlcyBhbnkgc3RhY2sgdmFyaWFibGVzIGFib3ZlIGl0cyBpbml0aWFs IHN0YWNrIA0KPiArIHNldHRpbmcsIHRoZW4gd2Uga25vdyAgLy8gaXQncyBhY2Nlc3NpbmcgdmFy aWFibGVzIHBhc3NlZCBpbnRvIGl0LCANCj4gKyB3aGljaCBtZWFucyB0aGUgZGF0YSBpcyBvbiB0 aGUgIC8vIFZNJ3Mgc3RhY2suDQo+ICsgIC8vIFdoZW4gd2UncmUgY2FsbGVkLCBvbiB0aGUgc3Rh Y2sgKGhpZ2ggdG8gbG93KSB3ZSBoYXZlIHRoZSANCj4gKyBwYXJhbWV0ZXJzLCB0aGUgIC8vIHJl dHVybiBhZGRyZXNzLCB0aGVuIHRoZSBzYXZlZCBlYnAuIFNhdmUgdGhlIHBvaW50ZXIgdG8gdGhl IHJldHVybiBhZGRyZXNzLg0KPiArICAvLyBFQkMgY29kZSBrbm93cyB0aGF0J3MgdGhlcmUsIHNv IHNob3VsZCBsb29rIGFib3ZlIGl0IGZvciBmdW5jdGlvbiBwYXJhbWV0ZXJzLg0KPiArICAvLyBU aGUgb2Zmc2V0IGlzIHRoZSBzaXplIG9mIGxvY2FscyAoVk1Db250ZXh0ICsgQWRkciArIHNhdmVk IGVicCkuDQo+ICsgIC8vIE5vdGUgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgYXNzdW1lcyB0aGVyZSBp cyBhIDE2IGJ5dGVzIG9mIHJldHVybiANCj4gKyBhZGRyZXNzIG9uICAvLyB0aGUgc3RhY2sgdG9v LCBzbyBhZGp1c3QgYWNjb3JkaW5nbHkuDQo+ICsgIC8vICBWbUNvbnRleHQuSGlnaFN0YWNrQm90 dG9tID0gKFVJTlROKShBZGRyICsgc2l6ZW9mIChWbUNvbnRleHQpICsgDQo+ICsgc2l6ZW9mIChB ZGRyKSk7ICAvLw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEJlZ2luIGV4ZWN1dGluZyB0aGUgRUJD IGNvZGUNCj4gKyAgLy8NCj4gKyAgRWJjRXhlY3V0ZSAoJlZtQ29udGV4dCk7DQo+ICsNCj4gKyAg Ly8NCj4gKyAgLy8gUmV0dXJuIHRoZSB2YWx1ZSBpbiBSWzddIHVubGVzcyB0aGVyZSB3YXMgYW4g ZXJyb3INCj4gKyAgLy8NCj4gKyAgUmV0dXJuRUJDU3RhY2soU3RhY2tJbmRleCk7DQo+ICsgIHJl dHVybiAoVUlOVDY0KSBWbUNvbnRleHQuR3ByWzddOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qKg0K PiArICBCZWdpbiBleGVjdXRpbmcgYW4gRUJDIGltYWdlLg0KPiArDQo+ICsgIEBwYXJhbSAgRW50 cnlQb2ludCAgICAgICBUaGUgZW50cnlwb2ludCBvZiBFQkMgY29kZS4NCj4gKyAgQHBhcmFtICBJ bWFnZUhhbmRsZSAgICAgIGltYWdlIGhhbmRsZSBmb3IgdGhlIEVCQyBhcHBsaWNhdGlvbiB3ZSdy ZSBleGVjdXRpbmcNCj4gKyAgQHBhcmFtICBTeXN0ZW1UYWJsZSAgICAgIHN0YW5kYXJkIHN5c3Rl bSB0YWJsZSBwYXNzZWQgaW50byBhbiBkcml2ZXIncyBlbnRyeQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgcG9pbnQNCj4gKw0KPiArICBAcmV0dXJuIFRoZSB2YWx1ZSByZXR1cm5lZCBi eSB0aGUgRUJDIGFwcGxpY2F0aW9uIHdlJ3JlIGdvaW5nIHRvIHJ1bi4NCj4gKw0KPiArKiovDQo+ ICtVSU5UNjQNCj4gK0VGSUFQSQ0KPiArRXhlY3V0ZUViY0ltYWdlRW50cnlQb2ludCAoDQo+ICsg IElOIFVJTlROICAgICAgICAgICAgICAgIEVudHJ5UG9pbnQsDQo+ICsgIElOIEVGSV9IQU5ETEUg ICAgICAgICAgIEltYWdlSGFuZGxlLA0KPiArICBJTiBFRklfU1lTVEVNX1RBQkxFICAgICAqU3lz dGVtVGFibGUNCj4gKyAgKQ0KPiArew0KPiArICAvLw0KPiArICAvLyBDcmVhdGUgYSBuZXcgVk0g Y29udGV4dCBvbiB0aGUgc3RhY2sNCj4gKyAgLy8NCj4gKyAgVk1fQ09OVEVYVCAgVm1Db250ZXh0 Ow0KPiArICBVSU5UTiAgICAgICBBZGRyOw0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsg IFVJTlROICAgICAgIFN0YWNrSW5kZXg7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gR2V0IHRoZSBF QkMgZW50cnkgcG9pbnQNCj4gKyAgLy8NCj4gKyAgQWRkciA9IEVudHJ5UG9pbnQ7DQo+ICsNCj4g KyAgLy8NCj4gKyAgLy8gTm93IGNsZWFyIG91dCBvdXIgY29udGV4dA0KPiArICAvLw0KPiArICBa ZXJvTWVtICgoVk9JRCAqKSAmVm1Db250ZXh0LCBzaXplb2YgKFZNX0NPTlRFWFQpKTsNCj4gKw0K PiArICAvLw0KPiArICAvLyBTYXZlIHRoZSBpbWFnZSBoYW5kbGUgc28gd2UgY2FuIHRyYWNrIHRo ZSB0aHVua3MgY3JlYXRlZCBmb3IgDQo+ICsgdGhpcyBpbWFnZSAgLy8gIFZtQ29udGV4dC5JbWFn ZUhhbmRsZSA9IEltYWdlSGFuZGxlOyAgDQo+ICsgVm1Db250ZXh0LlN5c3RlbVRhYmxlID0gU3lz dGVtVGFibGU7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gU2V0IHRoZSBWTSBpbnN0cnVjdGlvbiBw b2ludGVyIHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uIGluIG1lbW9yeS4NCj4gKyAgLy8NCj4gKyAg Vm1Db250ZXh0LklwID0gKFZNSVApIEFkZHI7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW5pdGlh bGl6ZSB0aGUgc3RhY2sgcG9pbnRlciBmb3IgdGhlIEVCQy4gR2V0IHRoZSBjdXJyZW50IHN5c3Rl bSANCj4gKyBzdGFjayAgLy8gcG9pbnRlciBhbmQgYWRqdXN0IGl0IGRvd24gYnkgdGhlIG1heCBu ZWVkZWQgZm9yIHRoZSBpbnRlcnByZXRlci4NCj4gKyAgLy8NCj4gKw0KPiArICBTdGF0dXMgPSBH ZXRFQkNTdGFjayhJbWFnZUhhbmRsZSwgJlZtQ29udGV4dC5TdGFja1Bvb2wsIA0KPiArICZTdGFj a0luZGV4KTsgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgfQ0KPiArICBWbUNvbnRleHQuU3RhY2tUb3AgPSAoVUlOVDgqKVZtQ29udGV4dC5TdGFj a1Bvb2wgKyANCj4gKyAoU1RBQ0tfUkVNQUlOX1NJWkUpOyAgVm1Db250ZXh0LkdwclswXSA9IChV SU5UNjQpIA0KPiArICgoVUlOVDgqKVZtQ29udGV4dC5TdGFja1Bvb2wgKyBTVEFDS19QT09MX1NJ WkUpOyANCj4gKyBWbUNvbnRleHQuSGlnaFN0YWNrQm90dG9tID0gKFVJTlROKSBWbUNvbnRleHQu R3ByWzBdOyANCj4gKyBWbUNvbnRleHQuR3ByWzBdIC09IHNpemVvZiAoVUlOVE4pOw0KPiArDQo+ ICsNCj4gKyAgLy8NCj4gKyAgLy8gUHV0IGEgbWFnaWMgdmFsdWUgaW4gdGhlIHN0YWNrIGdhcCwg dGhlbiBhZGp1c3QgZG93biBhZ2FpbiAgLy8gDQo+ICsgKihVSU5UTiAqKSAoVUlOVE4pIChWbUNv bnRleHQuR3ByWzBdKSA9IChVSU5UTikgVk1fU1RBQ0tfS0VZX1ZBTFVFOw0KPiArICBWbUNvbnRl eHQuU3RhY2tNYWdpY1B0ciAgICAgICAgICAgICA9IChVSU5UTiAqKSAoVUlOVE4pIFZtQ29udGV4 dC5HcHJbMF07DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQWxpZ24gdGhlIHN0YWNrIG9uIGEgbmF0 dXJhbCBib3VuZGFyeSAgVm1Db250ZXh0LkdwclswXSAmPQ0KPiArIH4oVk1fUkVHSVNURVIpKHNp emVvZihVSU5UTikgLSAxKTsgIC8vDQo+ICsgIFZtQ29udGV4dC5Mb3dTdGFja1RvcCAgID0gKFVJ TlROKSBWbUNvbnRleHQuR3ByWzBdOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFNpbXBseSBjb3B5 IHRoZSBpbWFnZSBoYW5kbGUgYW5kIHN5c3RlbSB0YWJsZSBvbnRvIHRoZSBFQkMgc3RhY2suDQo+ ICsgIC8vIEdyZWF0bHkgc2ltcGxpZmllcyB0aGluZ3MgYnkgbm90IGhhdmluZyB0byBzcGlsbCB0 aGUgYXJncy4NCj4gKyAgLy8NCj4gKyAgUHVzaFU2NCAoJlZtQ29udGV4dCwgKFVJTlQ2NCkgU3lz dGVtVGFibGUpOw0KPiArICBQdXNoVTY0ICgmVm1Db250ZXh0LCAoVUlOVDY0KSBJbWFnZUhhbmRs ZSk7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gVk0gcHVzaGVzIDE2LWJ5dGVzIGZvciByZXR1cm4g YWRkcmVzcy4gU2ltdWxhdGUgdGhhdCBoZXJlLg0KPiArICAvLw0KPiArICBQdXNoVTY0ICgmVm1D b250ZXh0LCAoVUlOVDY0KSAwKTsNCj4gKyAgUHVzaFU2NCAoJlZtQ29udGV4dCwgKFVJTlQ2NCkg MHgxMjM0NTY3ODg3NjU0MzIxVUxMKTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBGb3IgQUFyY2g2 NCwgdGhpcyBpcyB3aGVyZSB3ZSBzYXkgb3VyIHJldHVybiBhZGRyZXNzIGlzICAvLyANCj4gKyBW bUNvbnRleHQuU3RhY2tSZXRBZGRyICA9IChVSU5UNjQpIFZtQ29udGV4dC5HcHJbMF07DQo+ICsN Cj4gKyAgLy8NCj4gKyAgLy8gRW50cnkgZnVuY3Rpb24gbmVlZG4ndCBhY2Nlc3MgaGlnaCBzdGFj ayBjb250ZXh0LCBzaW1wbHkgIC8vIHB1dCANCj4gKyB0aGUgc3RhY2sgcG9pbnRlciBoZXJlLg0K PiArICAvLw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEJlZ2luIGV4ZWN1dGluZyB0aGUgRUJDIGNv ZGUNCj4gKyAgLy8NCj4gKyAgRWJjRXhlY3V0ZSAoJlZtQ29udGV4dCk7DQo+ICsNCj4gKyAgLy8N Cj4gKyAgLy8gUmV0dXJuIHRoZSB2YWx1ZSBpbiBSWzddIHVubGVzcyB0aGVyZSB3YXMgYW4gZXJy b3INCj4gKyAgLy8NCj4gKyAgUmV0dXJuRUJDU3RhY2soU3RhY2tJbmRleCk7DQo+ICsgIHJldHVy biAoVUlOVDY0KSBWbUNvbnRleHQuR3ByWzddOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qKg0KPiAr ICBDcmVhdGUgdGh1bmtzIGZvciBhbiBFQkMgaW1hZ2UgZW50cnkgcG9pbnQsIG9yIGFuIEVCQyBw cm90b2NvbCBzZXJ2aWNlLg0KPiArDQo+ICsgIEBwYXJhbSAgSW1hZ2VIYW5kbGUgICAgICAgICAg IEltYWdlIGhhbmRsZSBmb3IgdGhlIEVCQyBpbWFnZS4gSWYgbm90IG51bGwsIHRoZW4NCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2UncmUgY3JlYXRpbmcgYSB0aHVuayBmb3Ig YW4gaW1hZ2UgZW50cnkgcG9pbnQuDQo+ICsgIEBwYXJhbSAgRWJjRW50cnlQb2ludCAgICAgICAg IEFkZHJlc3Mgb2YgdGhlIEVCQyBjb2RlIHRoYXQgdGhlIHRodW5rIGlzIHRvIGNhbGwNCj4gKyAg QHBhcmFtICBUaHVuayAgICAgICAgICAgICAgICAgUmV0dXJuZWQgdGh1bmsgd2UgY3JlYXRlIGhl cmUNCj4gKyAgQHBhcmFtICBGbGFncyAgICAgICAgICAgICAgICAgRmxhZ3MgaW5kaWNhdGluZyBv cHRpb25zIGZvciBjcmVhdGluZyB0aGUgdGh1bmsNCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICBUaGUgdGh1bmsgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBUaGUgcGFyYW1ldGVyIG9mIEViY0VudHJ5UG9p bnQgaXMgbm90IDE2LWJpdA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGln bmVkLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGVyZSBpcyBub3QgZW5v dWdoIG1lbW9yeSB0byBjcmVhdGVkIHRoZSBFQkMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVGh1bmsuDQo+ICsgIEByZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgIEVCQ19U SFVOS19TSVpFIGlzIG5vdCBsYXJnZXIgZW5vdWdoLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFU VVMNCj4gK0ViY0NyZWF0ZVRodW5rcyAoDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgIElt YWdlSGFuZGxlLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAqRWJjRW50cnlQb2ludCwN Cj4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgKipUaHVuaywNCj4gKyAgSU4gIFVJTlQzMiAg ICAgICAgICAgICAgRmxhZ3MNCj4gKyAgKQ0KPiArew0KPiArICBVSU5UOCAgICAgICAqUHRyOw0K PiArICBVSU5UOCAgICAgICAqVGh1bmtCYXNlOw0KPiArICBVSU5UMzIgICAgICBJbmRleDsNCj4g KyAgSU5UMzIgICAgICAgVGh1bmtTaXplOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIGFs aWdubWVudCBvZiBwb2ludGVyIHRvIEVCQyBjb2RlICAvLyAgaWYgKChVSU5UMzIpIChVSU5UTikg DQo+ICsgRWJjRW50cnlQb2ludCAmIDB4MDEpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgVGh1bmtTaXplID0gc2l6ZW9mKG1JbnN0cnVj dGlvbkJ1ZmZlclRlbXBsYXRlKTsNCj4gKw0KPiArICBQdHIgPSBBbGxvY2F0ZVBvb2wgKHNpemVv ZihtSW5zdHJ1Y3Rpb25CdWZmZXJUZW1wbGF0ZSkpOw0KPiArDQo+ICsgIGlmIChQdHIgPT0gTlVM TCkgew0KPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArICAv Lw0KPiArICAvLyAgUHJpbnQoTCJBbGxvY2F0ZSBUSDogMHglWFxuIiwgKFVJTlQzMilQdHIpOyAg Ly8gIC8vIFNhdmUgdGhlIA0KPiArIHN0YXJ0IGFkZHJlc3Mgc28gd2UgY2FuIGFkZCBhIHBvaW50 ZXIgdG8gaXQgdG8gYSBsaXN0IGxhdGVyLg0KPiArICAvLw0KPiArICBUaHVua0Jhc2UgPSBQdHI7 DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gR2l2ZSB0aGVtIHRoZSBhZGRyZXNzIG9mIG91ciBidWZm ZXIgd2UncmUgZ29pbmcgdG8gZml4IHVwICAvLyANCj4gKyAqVGh1bmsgPSAoVk9JRCAqKSBQdHI7 DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ29weSB3aG9sZSB0aHVuayBpbnN0cnVjdGlvbiBidWZm ZXIgdGVtcGxhdGUgIC8vICBDb3B5TWVtIChQdHIsIA0KPiArIG1JbnN0cnVjdGlvbkJ1ZmZlclRl bXBsYXRlLCBzaXplb2YobUluc3RydWN0aW9uQnVmZmVyVGVtcGxhdGUpKTsNCj4gKw0KPiArICAv Lw0KPiArICAvLyBQYXRjaCBFYmNFbnRyeVBvaW50IGFuZCBFYmNMTEViY0ludGVycHJldCAgLy8g IGZvciAoSW5kZXggPSAwOyANCj4gKyBJbmRleCA8IHNpemVvZihtSW5zdHJ1Y3Rpb25CdWZmZXJU ZW1wbGF0ZSkgLSBzaXplb2YoVUlOVE4pOyBJbmRleCsrKSB7DQo+ICsgICAgaWYgKCooVUlOVE4g KikmUHRyW0luZGV4XSA9PSBFQkNfRU5UUllQT0lOVF9TSUdOQVRVUkUpIHsNCj4gKyAgICAgICoo VUlOVE4gKikmUHRyW0luZGV4XSA9IChVSU5UTilFYmNFbnRyeVBvaW50Ow0KPiArICAgIH0NCj4g KyAgICBpZiAoKihVSU5UTiAqKSZQdHJbSW5kZXhdID09IEVCQ19MTF9FQkNfRU5UUllQT0lOVF9T SUdOQVRVUkUpIHsNCj4gKyAgICAgIGlmICgoRmxhZ3MgJiBGTEFHX1RIVU5LX0VOVFJZX1BPSU5U KSAhPSAwKSB7DQo+ICsgICAgICAgICooVUlOVE4gKikmUHRyW0luZGV4XSA9IChVSU5UTilFYmNM TEV4ZWN1dGVFYmNJbWFnZUVudHJ5UG9pbnQ7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAg ICAqKFVJTlROICopJlB0cltJbmRleF0gPSAoVUlOVE4pRWJjTExFYmNJbnRlcnByZXQ7DQo+ICsg ICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQWRkIHRoZSB0 aHVuayB0byB0aGUgbGlzdCBmb3IgdGhpcyBpbWFnZS4gRG8gdGhpcyBsYXN0IHNpbmNlIHRoZSAN Cj4gKyBhZGQgIC8vIGZ1bmN0aW9uIGZsdXNoZXMgdGhlIGNhY2hlIGZvciB1cy4NCj4gKyAgLy8N Cj4gKyAgRWJjQWRkSW1hZ2VUaHVuayAoSW1hZ2VIYW5kbGUsIChWT0lEICopIFRodW5rQmFzZSwg VGh1bmtTaXplKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4g Kw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGV4ZWN1dGUgYW4gRUJD IENBTExFWCBpbnN0cnVjdGlvbi4NCj4gKyAgVGhlIGZ1bmN0aW9uIGNoZWNrIHRoZSBjYWxsZWUn cyBjb250ZW50IHRvIHNlZSB3aGV0aGVyIGl0IGlzIGNvbW1vbiANCj4gK25hdGl2ZQ0KPiArICBj b2RlIG9yIGEgdGh1bmsgdG8gYW5vdGhlciBwaWVjZSBvZiBFQkMgY29kZS4NCj4gKyAgSWYgdGhl IGNhbGxlZSBpcyBjb21tb24gbmF0aXZlIGNvZGUsIHVzZSBFYmNMTENBbGxFWEFTTSB0byANCj4g K21hbmlwdWxhdGUsDQo+ICsgIG90aGVyd2lzZSwgc2V0IHRoZSBWTS0+SVAgdG8gdGFyZ2V0IEVC QyBjb2RlIGRpcmVjdGx5IHRvIGF2b2lkIA0KPiArYW5vdGhlciBWTQ0KPiArICBiZSBzdGFydHVw IHdoaWNoIGNvc3QgdGltZSBhbmQgc3RhY2sgc3BhY2UuDQo+ICsNCj4gKyAgQHBhcmFtICBWbVB0 ciAgICAgICAgICAgIFBvaW50ZXIgdG8gYSBWTSBjb250ZXh0Lg0KPiArICBAcGFyYW0gIEZ1bmNB ZGRyICAgICAgICAgQ2FsbGVlJ3MgYWRkcmVzcw0KPiArICBAcGFyYW0gIE5ld1N0YWNrUG9pbnRl ciAgTmV3IHN0YWNrIHBvaW50ZXIgYWZ0ZXIgdGhlIGNhbGwNCj4gKyAgQHBhcmFtICBGcmFtZVB0 ciAgICAgICAgIE5ldyBmcmFtZSBwb2ludGVyIGFmdGVyIHRoZSBjYWxsDQo+ICsgIEBwYXJhbSAg U2l6ZSAgICAgICAgICAgICBUaGUgc2l6ZSBvZiBjYWxsIGluc3RydWN0aW9uDQo+ICsNCj4gKyoq Lw0KPiArVk9JRA0KPiArRWJjTExDQUxMRVggKA0KPiArICBJTiBWTV9DT05URVhUICAgKlZtUHRy LA0KPiArICBJTiBVSU5UTiAgICAgICAgRnVuY0FkZHIsDQo+ICsgIElOIFVJTlROICAgICAgICBO ZXdTdGFja1BvaW50ZXIsDQo+ICsgIElOIFZPSUQgICAgICAgICAqRnJhbWVQdHIsDQo+ICsgIElO IFVJTlQ4ICAgICAgICBTaXplDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVE4gICAgSXNUaHVuazsN Cj4gKyAgVUlOVE4gICAgVGFyZ2V0RWJjQWRkcjsNCj4gKyAgVUlOVDggICAgSW5zdHJ1Y3Rpb25C dWZmZXJbc2l6ZW9mKG1JbnN0cnVjdGlvbkJ1ZmZlclRlbXBsYXRlKV07DQo+ICsgIFVJTlROICAg IEluZGV4Ow0KPiArICBVSU5UTiAgICBJbmRleE9mRWJjRW50cnlwb2ludDsNCj4gKw0KPiArICBJ c1RodW5rICAgICAgID0gMTsNCj4gKyAgVGFyZ2V0RWJjQWRkciA9IDA7DQo+ICsgIEluZGV4T2ZF YmNFbnRyeXBvaW50ID0gMDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBQcm9jZXNzb3Igc3BlY2lm aWMgY29kZSB0byBjaGVjayB3aGV0aGVyIHRoZSBjYWxsZWUgaXMgYSB0aHVuayB0byBFQkMuDQo+ ICsgIC8vDQo+ICsgIENvcHlNZW0gKEluc3RydWN0aW9uQnVmZmVyLCAoVk9JRCAqKUZ1bmNBZGRy LCANCj4gKyBzaXplb2YoSW5zdHJ1Y3Rpb25CdWZmZXIpKTsgIC8vICAvLyBGaWxsIHRoZSBzaWdu YXR1cmUgYWNjb3JkaW5nIHRvIA0KPiArIG1JbnN0cnVjdGlvbkJ1ZmZlclRlbXBsYXRlICAvLyAg Zm9yIChJbmRleCA9IDA7IEluZGV4IDwNCj4gKyBzaXplb2YobUluc3RydWN0aW9uQnVmZmVyVGVt cGxhdGUpIC0gc2l6ZW9mKFVJTlROKTsgSW5kZXgrKykgew0KPiArICAgIGlmICgqKFVJTlROICop Jm1JbnN0cnVjdGlvbkJ1ZmZlclRlbXBsYXRlW0luZGV4XSA9PSBFQkNfRU5UUllQT0lOVF9TSUdO QVRVUkUpIHsNCj4gKyAgICAgICooVUlOVE4gKikmSW5zdHJ1Y3Rpb25CdWZmZXJbSW5kZXhdID0g RUJDX0VOVFJZUE9JTlRfU0lHTkFUVVJFOw0KPiArICAgICAgSW5kZXhPZkViY0VudHJ5cG9pbnQg PSBJbmRleDsNCj4gKyAgICB9DQo+ICsgICAgaWYgKCooVUlOVE4gKikmbUluc3RydWN0aW9uQnVm ZmVyVGVtcGxhdGVbSW5kZXhdID09IEVCQ19MTF9FQkNfRU5UUllQT0lOVF9TSUdOQVRVUkUpIHsN Cj4gKyAgICAgICooVUlOVE4gKikmSW5zdHJ1Y3Rpb25CdWZmZXJbSW5kZXhdID0gRUJDX0xMX0VC Q19FTlRSWVBPSU5UX1NJR05BVFVSRTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKyAgLy8NCj4gKyAg Ly8gQ2hlY2sgaWYgd2UgbmVlZCB0aHVuayB0byBuYXRpdmUgIC8vICBpZiAoQ29tcGFyZU1lbSAN Cj4gKyAoSW5zdHJ1Y3Rpb25CdWZmZXIsIG1JbnN0cnVjdGlvbkJ1ZmZlclRlbXBsYXRlLCBzaXpl b2YobUluc3RydWN0aW9uQnVmZmVyVGVtcGxhdGUpKSAhPSAwKSB7DQo+ICsgICAgSXNUaHVuayA9 IDA7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoSXNUaHVuayA9PSAxKXsNCj4gKyAgICAvLw0KPiAr ICAgIC8vIFRoZSBjYWxsZWUgaXMgYSB0aHVuayB0byBFQkMsIGFkanVzdCB0aGUgc3RhY2sgcG9p bnRlciBkb3duIDE2IGJ5dGVzIGFuZA0KPiArICAgIC8vIHB1dCBvdXIgcmV0dXJuIGFkZHJlc3Mg YW5kIGZyYW1lIHBvaW50ZXIgb24gdGhlIFZNIHN0YWNrLg0KPiArICAgIC8vIFRoZW4gc2V0IHRo ZSBWTSdzIElQIHRvIG5ldyBFQkMgY29kZS4NCj4gKyAgICAvLw0KPiArICAgIFZtUHRyLT5HcHJb MF0gLT0gODsNCj4gKyAgICBWbVdyaXRlTWVtTiAoVm1QdHIsIChVSU5UTikgVm1QdHItPkdwclsw XSwgKFVJTlROKSBGcmFtZVB0cik7DQo+ICsgICAgVm1QdHItPkZyYW1lUHRyID0gKFZPSUQgKikg KFVJTlROKSBWbVB0ci0+R3ByWzBdOw0KPiArICAgIFZtUHRyLT5HcHJbMF0gLT0gODsNCj4gKyAg ICBWbVdyaXRlTWVtNjQgKFZtUHRyLCAoVUlOVE4pIFZtUHRyLT5HcHJbMF0sIChVSU5UNjQpIChV SU5UTikgDQo+ICsgKFZtUHRyLT5JcCArIFNpemUpKTsNCj4gKw0KPiArICAgIENvcHlNZW0gKCZU YXJnZXRFYmNBZGRyLCAoVUlOVDggKilGdW5jQWRkciArIEluZGV4T2ZFYmNFbnRyeXBvaW50LCBz aXplb2YoVUlOVE4pKTsNCj4gKyAgICBWbVB0ci0+SXAgPSAoVk1JUCkgKFVJTlROKSBUYXJnZXRF YmNBZGRyOyAgfSBlbHNlIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIFRoZSBjYWxsZWUgaXMgbm90 IGEgdGh1bmsgdG8gRUJDLCBjYWxsIG5hdGl2ZSBjb2RlLA0KPiArICAgIC8vIGFuZCBnZXQgcmV0 dXJuIHZhbHVlLg0KPiArICAgIC8vDQo+ICsgICAgVm1QdHItPkdwcls3XSA9IEViY0xMQ0FMTEVY TmF0aXZlIChGdW5jQWRkciwgTmV3U3RhY2tQb2ludGVyLCANCj4gKyBGcmFtZVB0cik7DQo+ICsN Cj4gKyAgICAvLw0KPiArICAgIC8vIEFkdmFuY2UgdGhlIElQLg0KPiArICAgIC8vDQo+ICsgICAg Vm1QdHItPklwICs9IFNpemU7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiBkaWZmIC0tZ2l0IGEvTWRl TW9kdWxlUGtnL1VuaXZlcnNhbC9FYmNEeGUvRWJjRHhlLmluZiANCj4gYi9NZGVNb2R1bGVQa2cv VW5pdmVyc2FsL0ViY0R4ZS9FYmNEeGUuaW5mDQo+IGluZGV4IDE1ZGMwMWMuLmNiODAyMmYgMTAw NjQ0DQo+IC0tLSBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRWJjRHhlL0ViY0R4ZS5pbmYNCj4g KysrIGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9FYmNEeGUvRWJjRHhlLmluZg0KPiBAQCAtNSw2 ICs1LDcgQEANCj4gICMgIHBsYXRmb3JtIGFuZCBwcm9jZXNzb3ItaW5kZXBlbmRlbnQgbWVjaGFu aXNtcyBmb3IgbG9hZGluZyBhbmQgZXhlY3V0aW5nIEVGSSAgIyAgZGV2aWNlIGRyaXZlcnMuDQo+ ICAjDQo+ICsjICBDb3B5cmlnaHQgKGMpIDIwMTUsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLg0KPiAgIyAgQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxNCwgSW50ZWwg Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPiAgIyAgVGhpcyBwcm9ncmFtIGFu ZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAgIyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2 YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNl IEBAIC0yOCw3ICsyOSw3IEBAIFtEZWZpbmVzXSAgIyAgIyBUaGUgZm9sbG93aW5nIGluZm9ybWF0 aW9uIGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0 b29scy4NCj4gICMNCj4gLSMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBY NjQgSVBGDQo+ICsjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9IElBMzIgWDY0IElQ RiBBQVJDSDY0DQo+ICAjDQo+ICANCj4gIFtTb3VyY2VzXQ0KPiBAQCAtNTQsNiArNTUsOSBAQCBb U291cmNlcy5JUEZdDQo+ICAgIElwZi9FYmNTdXBwb3J0LmMNCj4gICAgSXBmL0ViY0xvd0xldmVs LnMNCj4gIA0KPiArW1NvdXJjZXMuQUFSQ0g2NF0NCj4gKyAgQUFyY2g2NC9FYmNTdXBwb3J0LmMN Cj4gKyAgQUFyY2g2NC9FYmNMb3dMZXZlbC5TDQo+ICANCj4gIFtQYWNrYWdlc10NCj4gICAgTWRl UGtnL01kZVBrZy5kZWMNCj4gQEAgLTg0LDQgKzg4LDQgQEAgW0RlcGV4XQ0KPiAgIyBFVkVOVF9U WVBFX1BFUklPRElDX1RJTUVSICMjIENPTlNVTUVTDQo+ICANCj4gIFtVc2VyRXh0ZW5zaW9ucy5U aWFub0NvcmUuIkV4dHJhRmlsZXMiXQ0KPiAtICBFYmNEeGVFeHRyYS51bmkNCj4gXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlDQo+ICsgIEViY0R4ZUV4dHJhLnVuaQ0KPiAtLQ0KPiAyLjEuNA0K PiANCg==