From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=104.47.0.77; helo=eur01-he1-obe.outbound.protection.outlook.com; envelope-from=evan.lloyd@arm.com; receiver=edk2-devel@lists.01.org Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0077.outbound.protection.outlook.com [104.47.0.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id F02ED2205BEA4 for ; Tue, 2 Jan 2018 07:06:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=M+w+dQCnG1VkHRxMSdm0HFpqg6rPsUpzLX2D6udMNTI=; b=ZJJs1Oukm0TBpPuVoOwbNJNBhO368PVkIsEYZCCx8TkiXC5/jU/lf0hUiuycC9IJW+HB3VP+u7Ma40twScEWw1ycenvepHowpMQj1B95IsOLzG0y/lvZY7FilmWr4Zj0IGFPPNbCoHA8Z0Kq42DJpdlU4UmJevblg/fzDNZr92E= Received: from HE1PR08MB2684.eurprd08.prod.outlook.com (10.170.248.27) by HE1PR08MB0491.eurprd08.prod.outlook.com (10.161.120.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.366.8; Tue, 2 Jan 2018 15:11:24 +0000 Received: from HE1PR08MB2684.eurprd08.prod.outlook.com ([fe80::2cba:9ca8:24d:df80]) by HE1PR08MB2684.eurprd08.prod.outlook.com ([fe80::2cba:9ca8:24d:df80%13]) with mapi id 15.20.0366.007; Tue, 2 Jan 2018 15:11:24 +0000 From: Evan Lloyd To: Ard Biesheuvel CC: "edk2-devel@lists.01.org" , Matteo Carlini , "eif.lindholm@linaro.org" , nd Thread-Topic: [PATCH v2 01/13] ArmPlatformPkg: Tidy Lcd code: Coding standard Thread-Index: AQHTe/Ci0O2pieDAhU+aG11EAA22cKNggPuw Date: Tue, 2 Jan 2018 15:11:24 +0000 Message-ID: References: <20171222183418.8616-1-evan.lloyd@arm.com> <20171222183418.8616-2-evan.lloyd@arm.com> In-Reply-To: Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Evan.Lloyd@arm.com; x-originating-ip: [217.140.96.140] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; HE1PR08MB0491; 7:RZT9Gx463HGxTsftP5xE+CC/I8XKWTyHYLcEEhiuVn/y+PcDydSz2KdwpTIN7xxoKe48Vpx1yQYFr3nqAAfSObsouxNjE5FB+Co6C46GvDxY/pup4GkejHpGlz5DtRvXLYyBb2LqFSQspIIR2FKsiiMJVIv4+eFD00SVmW1Q2S/vb9wJyXHniw817xfliFFxwn3ZcZMFwypvuUwyUdJ4Nz59tVMlWyX7Hn/9/5VlZHOY//K06N8tf8Bs9ACOYQjS x-ms-exchange-antispam-srfa-diagnostics: SSOS;SSOR; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: fb59264d-51bb-4003-1050-08d551f316dc x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(3008032)(2017052603307)(7153060); SRVR:HE1PR08MB0491; x-ms-traffictypediagnostic: HE1PR08MB0491: nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917)(162533806227266); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(5005006)(8121501046)(3231023)(944501075)(93006095)(93001095)(3002001)(10201501046)(6055026)(6041268)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123562045)(6072148)(201708071742011); SRVR:HE1PR08MB0491; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:HE1PR08MB0491; x-forefront-prvs: 0540846A1D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(346002)(39380400002)(366004)(376002)(39860400002)(24454002)(13464003)(199004)(189003)(5250100002)(55016002)(6116002)(3846002)(81156014)(2900100001)(68736007)(99286004)(81166006)(8936002)(8676002)(14454004)(53946003)(575784001)(86362001)(7736002)(97736004)(102836004)(6246003)(74316002)(25786009)(4326008)(305945005)(16200700003)(9686003)(72206003)(478600001)(7696005)(106356001)(66066001)(105586002)(53936002)(33656002)(316002)(6916009)(6436002)(3660700001)(6506007)(53546011)(76176011)(2950100002)(3280700002)(59450400001)(54906003)(2906002)(229853002)(5660300001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR08MB0491; H:HE1PR08MB2684.eurprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 9WUejY7Xhl4+haoswFuspd9h63sr3tbhAq+H399LqDTOfOZbo1Oly5LcJkDwsAua+TvB986ctzQKF7aLOHs1wQ== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: fb59264d-51bb-4003-1050-08d551f316dc X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jan 2018 15:11:24.3654 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR08MB0491 Subject: Re: [PATCH v2 01/13] ArmPlatformPkg: Tidy Lcd code: Coding standard X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jan 2018 15:06:28 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgQXJkLg0KT25lIGFpbSBvZiB0aGVzZSBjaGFuZ2VzIGlzIHRvIGdldCB0aG9zZSBmaWxlcyB3 ZSBoYXZlIHRvIHBsYXkgd2l0aCBpbnRvIGEgc3RhdGUgd2hlcmUgYSBiZWF1dGlmaWVyIGxpa2Ug aW5kZW50LCBhc3R5bGUsICBvciBjbGFuZy1mb3JtYXQgY2FuIGJlIHVzZWQgdG8gaGVscCB0aWR5 IG91ciBjaGFuZ2VzLiAgKE5PVEUsIHdlIGRvIG5vdCBoYXZlIHRoYXQgZnVsbHkgd29ya2luZyB5 ZXQsIGJ1dCB0aGV5IGRvIGhlbHAuKSAgSW4gYSB3b3JsZCB3aGVyZSB3ZSBoYXZlIHRvIHBsYXkg d2l0aCBzZXZlcmFsIGNvbnRyYWRpY3RvcnkgZm9ybWF0dGluZyBzdGFuZGFyZHMgKG5vdCBqdXN0 IEVESzIpIHRoZW4gYW55dGhpbmcgdGhhdCBjYW4gaGVscCBpcyB3ZWxjb21lLg0KT2YgdGhlIGNo YW5nZXMgbWFkZToNCglGaXhpbmcgdGhlIGluY2x1ZGUgZ3VhcmRzOiBpcyBhIHNtYWxsIGltcHJv dmVtZW50LiAgKElkZWFsbHkgcGF0Y2hjaGVjayBzaG91bGQgcmVqZWN0IHRoZXNlLikNCglSZWR1 Y2luZyBsaW5lcyB0byA4MCBjb2x1bW5zOiBtYWtlcyBMZWlmIChhdCBsZWFzdCkgaGFwcHksIGFu ZCBhbGlnbnMgd2l0aCBmb3JtYXR0ZXIgYmVoYXZpb3VyLg0KCUNvcnJlY3RpbmcgRG94eWdlbiBm b3JtYXQgY29tbWVudHM6IHByZXZlbnRzIERveHlnZW4gZ2VuZXJhdGluZyBnaWJiZXJpc2guDQoJ U3BhY2VzIGJlZm9yZSAnKCc6IE1haW50YWlucyBjb25zaXN0ZW5jeSwgYW5kIGFsaWducyB3aXRo IGRlc2lyZWQgZm9ybWF0dGVyIGJlaGF2aW91ci4NCg0KTW9yZSBiZWxvdzoNCg0KPiAtLS0tLU9y aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBBcmQgQmllc2hldXZlbCBbbWFpbHRvOmFyZC5i aWVzaGV1dmVsQGxpbmFyby5vcmddDQo+IFNlbnQ6IDIzIERlY2VtYmVyIDIwMTcgMTM6MTkNCj4g VG86IEV2YW4gTGxveWQgPEV2YW4uTGxveWRAYXJtLmNvbT4NCj4gQ2M6IGVkazItZGV2ZWxAbGlz dHMuMDEub3JnOyAiYXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZyJAYXJtLmNvbTsNCj4gImxlaWYu bGluZGhvbG1AbGluYXJvLm9yZyJAYXJtLmNvbTsNCj4gIk1hdHRlby5DYXJsaW5pQGFybS5jb20i QGFybS5jb207ICJuZEBhcm0uY29tIkBhcm0uY29tDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIg MDEvMTNdIEFybVBsYXRmb3JtUGtnOiBUaWR5IExjZCBjb2RlOiBDb2RpbmcNCj4gc3RhbmRhcmQN Cj4gDQo+IE9uIDIyIERlY2VtYmVyIDIwMTcgYXQgMTg6MzQsICA8ZXZhbi5sbG95ZEBhcm0uY29t PiB3cm90ZToNCj4gPiBGcm9tOiBHaXJpc2ggUGF0aGFrIDxnaXJpc2gucGF0aGFrIGF0IGFybS5j b20+DQo+ID4NCj4gPiBUaGVyZSBpcyBubyBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiBpbiB0aGlz IGNoYW5nZSBBcyBwcmVwYXJhdGlvbiBmb3INCj4gPiBmdXJ0aGVyIHdvcmssIHRoZSBmb3JtYXR0 aW5nIGlzIGNvcnJlY3RlZCB0byBtZWV0IHRoZSBFREtJSSBjb2RpbmcNCj4gPiBzdGFuZGFyZC4N Cj4gPiBPZiBzcGVjaWZpYyBub3RlLCBzb21lIGludmFsaWQgaW5jbHVkZSBndWFyZHMgd2VyZSBm aXhlZC4NCj4gPg0KPiA+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9u IEFncmVlbWVudCAxLjENCj4gPiBTaWduZWQtb2ZmLWJ5OiBHaXJpc2ggUGF0aGFrIDxnaXJpc2gu cGF0aGFrQGFybS5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogRXZhbiBMbG95ZCA8ZXZhbi5sbG95 ZEBhcm0uY29tPg0KPiANCj4gSGkgR2lyaXNoLCBFdmFuLA0KPiANCj4gSSBhbSBzb3JyeSwgYnV0 IEkgcmVhbGx5IGRvbid0IHNlZSB0aGUgcG9pbnQgb2YgdGhpcyBwYXRjaC4gR2l2ZW4gdGhhdCB0 aGUNCj4gY29kaW5nIHN0YW5kYXJkIGlzIG5vdCBpbiBsaW5lIHdpdGggY29tbW9uIHByYWN0aWNl IGluIFRpYW5vY29yZSwgY2hhbmdpbmcNCj4gY29tbWVudHMgdG8gcmVtb3ZlIGVtcHR5IGxpbmVz IGFmdGVyIC8vIG9yIGNoYW5naW5nIG9uZSBzdHlsZSB0byB0aGUNCj4gb3RoZXIgaXMganVzdCBw b2ludGxlc3MgY2h1cm4uIEFsc28sIGNoYW5nZXMgbGlrZQ0KPiANCj4gPiAgVk9JRA0KPiA+IC1M Y2RTaHV0ZG93biAoDQo+ID4gLSAgVk9JRA0KPiA+IC0gICkNCj4gPiArTGNkU2h1dGRvd24gKFZP SUQpDQo+ID4gIHsNCj4gDQo+IGxvb2sgYmFja3dhcmQgdG8gbWUsIGFuZCBzbyBpZiB0aGUgY29k aW5nIHN0YW5kYXJkIG1hbmRhdGVzIHRoYXQsIHdlDQo+IHNob3VsZCBjaGFuZ2VzIHRoZSBjb2Rp bmcgc3RhbmRhcmQsIG5vdCB0aGUgY29kZS4NCj4gDQo+IC0tDQo+IEFyZC4NCj4gDQpbW0V2YW4g TGxveWRdXSBIaSBBcmQuDQpUaGUgY29kaW5nIHN0YW5kYXJkIGRvZXNuJ3QgbWFuZGF0ZSB0aGlz IGZvcm1hdCwgYnV0IHBlcm1pdHMgaXQgKDUuNy4xLjUpLg0KT3VyIGNhc2UgaXMgdGhhdCB3aGls c3QgZWl0aGVyIGZvcm1hdCBpcyBhY2NlcHRhYmxlLCBjb25zaXN0ZW5jeSBpcyBkZXNpcmFibGUs IHNvIHdlIGFpbWVkIChob3dldmVyIGltcGVyZmVjdGx5KSB0byB1c2UgYSBjb25zaXN0ZW50IHN0 eWxlLg0KSW4gdGhpcyBpbnN0YW5jZSwgdGhvdWdoLCB0aGlzICB3b3VsZCBiZSByZXZlcnRlZCBi eSB0aGUgZm9ybWF0dGluZyB0b29scywgc28gSSBhZ3JlZSB0aGF0IGl0IGlzIHBvaW50bGVzcy4N Cg0KPiANCj4gDQo+ID4gLS0tDQo+ID4NCj4gQXJtUGxhdGZvcm1Qa2cvRHJpdmVycy9MY2RHcmFw aGljc091dHB1dER4ZS9MY2RHcmFwaGljc091dHB1dER4ZS5oIHwNCj4gMTAgKy0NCj4gPiAgQXJt UGxhdGZvcm1Qa2cvSW5jbHVkZS9MaWJyYXJ5L0xjZFBsYXRmb3JtTGliLmggICAgICAgICAgICAg ICAgICAgIHwgIDE0ICstDQo+ID4gIEFybVBsYXRmb3JtUGtnL0xpYnJhcnkvSGRMY2QvSGRMY2Qu aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMSArKy0NCj4gPg0KPiBBcm1QbGF0 Zm9ybVBrZy9Ecml2ZXJzL0xjZEdyYXBoaWNzT3V0cHV0RHhlL0xjZEdyYXBoaWNzT3V0cHV0RHhl LmMgfA0KPiAxODcgKysrKysrKysrKystLS0tLS0tLS0NCj4gPiAgQXJtUGxhdGZvcm1Qa2cvTGli cmFyeS9IZExjZC9IZExjZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDk2ICsr KysrLS0tLQ0KPiAtDQo+ID4gIEFybVBsYXRmb3JtUGtnL0xpYnJhcnkvUEwxMTFMY2QvUEwxMTFM Y2QuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3MiArKysrLS0NCj4gLS0NCj4gPiAgNiBm aWxlcyBjaGFuZ2VkLCAyMTIgaW5zZXJ0aW9ucygrKSwgMTg4IGRlbGV0aW9ucygtKQ0KPiA+DQo+ ID4gZGlmZiAtLWdpdA0KPiBhL0FybVBsYXRmb3JtUGtnL0RyaXZlcnMvTGNkR3JhcGhpY3NPdXRw dXREeGUvTGNkR3JhcGhpY3NPdXRwdXREeGUuDQo+IGgNCj4gYi9Bcm1QbGF0Zm9ybVBrZy9Ecml2 ZXJzL0xjZEdyYXBoaWNzT3V0cHV0RHhlL0xjZEdyYXBoaWNzT3V0cHV0RHhlLg0KPiBoDQo+ID4g aW5kZXgNCj4gYjY2ZWZkMzQ1NjFmNjU1Yjc0YTVlY2ZhZDhhOTcyODFjZGQ1OTI5ZC4uMmIwMDFi MTA3OTI3ZmM3NTMxN2NlDQo+IDM5ZDM3MDA0OWQ3NzQwOTUzYTggMTAwNjQ0DQo+ID4gLS0tDQo+ IGEvQXJtUGxhdGZvcm1Qa2cvRHJpdmVycy9MY2RHcmFwaGljc091dHB1dER4ZS9MY2RHcmFwaGlj c091dHB1dER4ZS4NCj4gaA0KPiA+ICsrKw0KPiBiL0FybVBsYXRmb3JtUGtnL0RyaXZlcnMvTGNk R3JhcGhpY3NPdXRwdXREeGUvTGNkR3JhcGhpY3NPdXRwdXREeGUuDQo+IGgNCj4gPiBAQCAtMSw2 ICsxLDYgQEANCj4gPiAgLyoqIEBmaWxlDQo+ID4NCj4gPiAtICBDb3B5cmlnaHQgKGMpIDIwMTEs IEFSTSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsgIENvcHlyaWdodCAoYykg MjAxMS0yMDE3LCBBUk0gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgICBUaGlz IHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ID4gICAgYXJlIGxpY2Vu c2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg dGhlDQo+IEJTRCBMaWNlbnNlDQo+ID4gICAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmli dXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiBmb3VuZCBhdA0K PiA+IEBAIC0xMSw5ICsxMSw4IEBADQo+ID4NCj4gPiAgKiovDQo+ID4NCj4gPiAtI2lmbmRlZiBf X0FSTV9WRV9HUkFQSElDU19EWEVfSF9fDQo+ID4gLSNkZWZpbmUgX19BUk1fVkVfR1JBUEhJQ1Nf RFhFX0hfXw0KPiA+IC0NCj4gPiArI2lmbmRlZiBMQ0RfR1JBUEhJQ1NfT1VUUFVUX0RYRV9IXw0K PiA+ICsjZGVmaW5lIExDRF9HUkFQSElDU19PVVRQVVRfRFhFX0hfDQo+ID4NCj4gPiAgI2luY2x1 ZGUgPEJhc2UuaD4NCj4gPg0KPiA+IEBAIC0yNSw3ICsyNCw2IEBADQo+ID4NCj4gPiAgI2luY2x1 ZGUgPFByb3RvY29sL0RldmljZVBhdGguaD4NCj4gPg0KPiA+IC0NCj4gPiAgLy8NCj4gPiAgLy8g RGV2aWNlIHN0cnVjdHVyZXMNCj4gPiAgLy8NCj4gPiBAQCAtMTA2LDQgKzEwNCw0IEBAIEluaXRp YWxpemVEaXNwbGF5ICgNCj4gPiAgICBJTiBMQ0RfSU5TVEFOQ0UqIEluc3RhbmNlDQo+ID4gICk7 DQo+ID4NCj4gPiAtI2VuZGlmIC8qIF9fQVJNX1ZFX0dSQVBISUNTX0RYRV9IX18gKi8NCj4gPiAr I2VuZGlmIC8qIExDRF9HUkFQSElDU19PVVRQVVRfRFhFX0hfICovDQo+ID4gZGlmZiAtLWdpdCBh L0FybVBsYXRmb3JtUGtnL0luY2x1ZGUvTGlicmFyeS9MY2RQbGF0Zm9ybUxpYi5oDQo+IGIvQXJt UGxhdGZvcm1Qa2cvSW5jbHVkZS9MaWJyYXJ5L0xjZFBsYXRmb3JtTGliLmgNCj4gPiBpbmRleA0K PiBiOWJkZjQ3MWUyZDY1ZGJhN2EwZmNiMGY3ZWNjMzUyYmQ1NzZiNDZiLi5iOTMxNmVjOGRlODQy NWE4M2UyZjYNCj4gMjdmNWMyNDgyMWZmOWEyZjc1MCAxMDA2NDQNCj4gPiAtLS0gYS9Bcm1QbGF0 Zm9ybVBrZy9JbmNsdWRlL0xpYnJhcnkvTGNkUGxhdGZvcm1MaWIuaA0KPiA+ICsrKyBiL0FybVBs YXRmb3JtUGtnL0luY2x1ZGUvTGlicmFyeS9MY2RQbGF0Zm9ybUxpYi5oDQo+ID4gQEAgLTEsNiAr MSw2IEBADQo+ID4gIC8qKiBAZmlsZQ0KPiA+DQo+ID4gLSBDb3B5cmlnaHQgKGMpIDIwMTEsIEFS TSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsgQ29weXJpZ2h0IChjKSAyMDEx LTIwMTcsIEFSTSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICAgVGhpcyBwcm9n cmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiA+ICAgYXJlIGxpY2Vuc2VkIGFu ZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlDQo+ IEJTRCBMaWNlbnNlDQo+ID4gICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4g IFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+IGZvdW5kIGF0DQo+ID4gQEAg LTExLDggKzExLDggQEANCj4gPg0KPiA+ICAgKiovDQo+ID4NCj4gPiAtI2lmbmRlZiBfX0xDRFBM QVRGT1JNTElCX0gNCj4gPiAtI2RlZmluZSBfX0xDRFBMQVRGT1JNTElCX0gNCj4gPiArI2lmbmRl ZiBMQ0RfUExBVEZPUk1fTElCX0hfDQo+ID4gKyNkZWZpbmUgTENEX1BMQVRGT1JNX0xJQl9IXw0K PiA+DQo+ID4gICNpbmNsdWRlIDxQcm90b2NvbC9HcmFwaGljc091dHB1dC5oPg0KPiA+DQo+ID4g QEAgLTE1OCw4ICsxNTgsOSBAQA0KPiA+ICAjZGVmaW5lIExDRF8xMkJQUF80NDRfQkxVRV9NQVNL ICAgICAgICAgMHgwMDAwMDAwRg0KPiA+ICAjZGVmaW5lIExDRF8xMkJQUF80NDRfUkVTRVJWRURf TUFTSyAgICAgMHgwMDAwRjAwMA0KPiA+DQo+ID4gLQ0KPiA+IC0vLyBUaGUgZW51bWVyYXRpb24g aW5kZXhlcyBtYXBzIHRoZSBQTDExMSBMY2RCcHAgdmFsdWVzIHVzZWQgaW4gdGhlDQo+IExDRCBD b250cm9sIFJlZ2lzdGVyDQo+ID4gKy8qKiBUaGUgZW51bWVyYXRpb24gaW5kZXhlcyBtYXBzIHRo ZSBQTDExMSBMY2RCcHAgdmFsdWVzIHVzZWQgaW4gdGhlDQo+IExDRCBDb250cm9sDQo+ID4gKyAg UmVnaXN0ZXINCj4gPiArKiovDQo+ID4gIHR5cGVkZWYgZW51bSB7DQo+ID4gICAgTENEX0JJVFNf UEVSX1BJWEVMXzEgPSAwLA0KPiA+ICAgIExDRF9CSVRTX1BFUl9QSVhFTF8yLA0KPiA+IEBAIC0x NzEsNyArMTcyLDYgQEAgdHlwZWRlZiBlbnVtIHsNCj4gPiAgICBMQ0RfQklUU19QRVJfUElYRUxf MTJfNDQ0DQo+ID4gIH0gTENEX0JQUDsNCj4gPg0KPiA+IC0NCj4gPiAgRUZJX1NUQVRVUw0KPiA+ ICBMY2RQbGF0Zm9ybUluaXRpYWxpemVEaXNwbGF5ICgNCj4gPiAgICBJTiBFRklfSEFORExFICAg SGFuZGxlDQo+ID4gQEAgLTIxOCw0ICsyMTgsNCBAQCBMY2RQbGF0Zm9ybUdldEJwcCAoDQo+ID4g ICAgT1VUIExDRF9CUFAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnBwDQo+ID4gICAg KTsNCj4gPg0KPiA+IC0jZW5kaWYNCj4gPiArI2VuZGlmIC8qIExDRF9QTEFURk9STV9MSUJfSF8g Ki8NCj4gPiBkaWZmIC0tZ2l0IGEvQXJtUGxhdGZvcm1Qa2cvTGlicmFyeS9IZExjZC9IZExjZC5o DQo+IGIvQXJtUGxhdGZvcm1Qa2cvTGlicmFyeS9IZExjZC9IZExjZC5oDQo+ID4gaW5kZXgNCj4g NmRmOTdhOWRmZWU2MGU5ZmRhNjE1Y2YzYmVhMWI2YTE2NGE0MjMzMy4uODYxZDNjMzk4ZjdkNmI5 YTE3MWI0DQo+IGQ4NzE4YzI4MTY0MTlkOGUyMGEgMTAwNjQ0DQo+ID4gLS0tIGEvQXJtUGxhdGZv cm1Qa2cvTGlicmFyeS9IZExjZC9IZExjZC5oDQo+ID4gKysrIGIvQXJtUGxhdGZvcm1Qa2cvTGli cmFyeS9IZExjZC9IZExjZC5oDQo+ID4gQEAgLTEsNiArMSw2IEBADQo+ID4gLS8qKiBAZmlsZSAg SERMY2QuaA0KPiA+ICsvKiogQGZpbGUNCj4gPg0KPiA+IC0gQ29weXJpZ2h0IChjKSAyMDExLTIw MTIsIEFSTSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsgQ29weXJpZ2h0IChj KSAyMDExLTIwMTcsIEFSTSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+DQo+ID4g ICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ID4gICBhcmUg bGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9u cyBvZiB0aGUNCj4gQlNEIExpY2Vuc2UNCj4gPiBAQCAtMTIsMTMgKzEyLDEwIEBADQo+ID4NCj4g PiAgICoqLw0KPiA+DQo+ID4gLSNpZm5kZWYgX0hETENEX0hfDQo+ID4gLSNkZWZpbmUgX0hETENE X0hfDQo+ID4gKyNpZm5kZWYgSERMQ0RfSF8NCj4gPiArI2RlZmluZSBIRExDRF9IXw0KPiA+DQo+ ID4gLS8vDQo+ID4gIC8vIEhETENEIENvbnRyb2xsZXIgUmVnaXN0ZXIgT2Zmc2V0cw0KPiA+IC0v Lw0KPiA+IC0NCj4gPiAgI2RlZmluZSBIRExDRF9SRUdfVkVSU0lPTiAgICAgICAgICAgICAgICAg KChVSU5UTilQY2RHZXQzMg0KPiAoUGNkQXJtSGRMY2RCYXNlKSArIDB4MDAwKQ0KPiA+ICAjZGVm aW5lIEhETENEX1JFR19JTlRfUkFXU1RBVCAgICAgICAgICAgICAoKFVJTlROKVBjZEdldDMyDQo+ IChQY2RBcm1IZExjZEJhc2UpICsgMHgwMTApDQo+ID4gICNkZWZpbmUgSERMQ0RfUkVHX0lOVF9D TEVBUiAgICAgICAgICAgICAgICgoVUlOVE4pUGNkR2V0MzINCj4gKFBjZEFybUhkTGNkQmFzZSkg KyAweDAxNCkNCj4gPiBAQCAtNDQsMTAgKzQxLDcgQEANCj4gPiAgI2RlZmluZSBIRExDRF9SRUdf R1JFRU5fU0VMRUNUICAgICAgICAgICAgKChVSU5UTilQY2RHZXQzMg0KPiAoUGNkQXJtSGRMY2RC YXNlKSArIDB4MjQ4KQ0KPiA+ICAjZGVmaW5lIEhETENEX1JFR19CTFVFX1NFTEVDVCAgICAgICAg ICAgICAoKFVJTlROKVBjZEdldDMyDQo+IChQY2RBcm1IZExjZEJhc2UpICsgMHgyNEMpDQo+ID4N Cj4gPiAtDQo+ID4gLS8vDQo+ID4gIC8vIEhETENEIFZhbHVlcyBvZiByZWdpc3RlcnMNCj4gPiAt Ly8NCj4gPg0KPiA+ICAvLyBIRExDRCBJbnRlcnJ1cHQgbWFzaywgY2xlYXIgYW5kIHN0YXR1cyBy ZWdpc3Rlcg0KPiA+ICAjZGVmaW5lIEhETENEX0RNQV9FTkQgICAgICAgICAgICAgICAgICAgICBC SVQwICAgIC8qIERNQSBoYXMgZmluaXNoZWQNCj4gcmVhZGluZyBhIGZyYW1lICovDQo+ID4gQEAg LTc5LDYgKzczLDExIEBADQo+ID4gICNkZWZpbmUgSERMQ0RfREFUQV9MT1cgICAgICAgICAgICAg ICAgICAgIDANCj4gPiAgI2RlZmluZSBIRExDRF9QWENMS19MT1cgICAgICAgICAgICAgICAgICAg MA0KPiA+DQo+ID4gKy8vIERlZmF1bHQgcG9sYXJpdGllcw0KPiA+ICsjZGVmaW5lIEhETENEX0RF RkFVTFRfUE9MQVJJVElFUyAgIEhETENEX1BYQ0xLX0xPVyB8DQo+IEhETENEX0RBVEFfSElHSCAg ICAgICAgIFwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhETENE X0RBVEVOX0hJR0ggfCBIRExDRF9IU1lOQ19MT1cgICAgICBcDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCBIRExDRF9WU1lOQ19ISUdIDQo+ID4gKw0KPiA+ICAvLyBQ aXhlbCBGb3JtYXQNCj4gPiAgI2RlZmluZSBIRExDRF9MSVRUTEVfRU5ESUFOICAgICAgICAgICAg ICAoMCA8PCAzMSkNCj4gPiAgI2RlZmluZSBIRExDRF9CSUdfRU5ESUFOICAgICAgICAgICAgICAg ICAoMSA8PCAzMSkNCj4gPiBAQCAtODYsNCArODUsNCBAQA0KPiA+ICAvLyBOdW1iZXIgb2YgYnl0 ZXMgcGVyIHBpeGVsDQo+ID4gICNkZWZpbmUgSERMQ0RfNEJZVEVTX1BFUl9QSVhFTCAgICAgICAg ICAgKCg0IC0gMSkgPDwgMykNCj4gPg0KPiA+IC0jZW5kaWYgLyogX0hETENEX0hfICovDQo+ID4g KyNlbmRpZiAvKiBIRExDRF9IXyAqLw0KPiA+IGRpZmYgLS1naXQNCj4gYS9Bcm1QbGF0Zm9ybVBr Zy9Ecml2ZXJzL0xjZEdyYXBoaWNzT3V0cHV0RHhlL0xjZEdyYXBoaWNzT3V0cHV0RHhlLg0KPiBj DQo+IGIvQXJtUGxhdGZvcm1Qa2cvRHJpdmVycy9MY2RHcmFwaGljc091dHB1dER4ZS9MY2RHcmFw aGljc091dHB1dER4ZS4NCj4gYw0KPiA+IGluZGV4DQo+IGI3MjEwNjFmYzFkZjU2OTUwOTJlOGM3 MWRhOTdhZTBiOWFmNDZiM2YuLjk0OGU1NjkyYzk0M2NkZjYyYTEwZjQNCj4gZTYyOTA0NzBkM2Nj ZDMzNGYxIDEwMDY0NA0KPiA+IC0tLQ0KPiBhL0FybVBsYXRmb3JtUGtnL0RyaXZlcnMvTGNkR3Jh cGhpY3NPdXRwdXREeGUvTGNkR3JhcGhpY3NPdXRwdXREeGUuDQo+IGMNCj4gPiArKysNCj4gYi9B cm1QbGF0Zm9ybVBrZy9Ecml2ZXJzL0xjZEdyYXBoaWNzT3V0cHV0RHhlL0xjZEdyYXBoaWNzT3V0 cHV0RHhlLg0KPiBjDQo+ID4gQEAgLTEsNiArMSw2IEBADQo+ID4gIC8qKiBAZmlsZQ0KPiA+DQo+ ID4gLSBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCwgQVJNIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQo+ID4gKyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNywgQVJNIEx0ZC4gQWxsIHJpZ2h0 cyByZXNlcnZlZC48QlI+DQo+ID4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcg bWF0ZXJpYWxzDQo+ID4gICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRo ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUNCj4gQlNEIExpY2Vuc2UNCj4gPiAgIHdoaWNo IGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGlj ZW5zZSBtYXkgYmUNCj4gZm91bmQgYXQNCj4gPiBAQCAtOSw3ICs5LDcgQEANCj4gPiAgIFRIRSBQ Uk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMi DQo+IEJBU0lTLA0KPiA+ICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBP RiBBTlkgS0lORCwgRUlUSEVSDQo+IEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gPg0KPiA+IC0gKiov DQo+ID4gKyoqLw0KPiA+DQo+ID4gICNpbmNsdWRlIDxQaUR4ZS5oPg0KPiA+ICAjaW5jbHVkZSA8 TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ID4gQEAgLTIyLDEyICsyMiwxMCBAQA0KPiA+DQo+ ID4gICNpbmNsdWRlICJMY2RHcmFwaGljc091dHB1dER4ZS5oIg0KPiA+DQo+ID4gLQ0KPiAvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K PiAqKioqKioqKioqKioNCj4gPiAtICoNCj4gPiAtICogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRo ZSBHcmFwaGljcyBPdXRwdXQgcHJvdG9jb2wgb24NCj4gQXJtVmVyc2F0aWxlRXhwcmVzcw0KPiA+ IC0gKiAgdXNpbmcgdGhlIExjZCBjb250cm9sbGVyDQo+ID4gLSAqDQo+ID4gLQ0KPiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoq KioqKioqKioqKi8NCj4gPiArLyoqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBHcmFwaGljcyBP dXRwdXQgcHJvdG9jb2wgb24NCj4gQXJtVmVyc2F0aWxlRXhwcmVzcw0KPiA+ICsgIHVzaW5nIHRo ZSBMY2QgY29udHJvbGxlcg0KPiA+ICsNCj4gPiArKiovDQo+ID4NCj4gPiAgLy8NCj4gPiAgLy8g R2xvYmFsIHZhcmlhYmxlcw0KPiA+IEBAIC02NCw3ICs2MiwxMCBAQCBMQ0RfSU5TVEFOQ0UgbUxj ZFRlbXBsYXRlID0gew0KPiA+ICAgICAgew0KPiA+ICAgICAgICB7DQo+ID4gICAgICAgICAgSEFS RFdBUkVfREVWSUNFX1BBVEgsIEhXX1ZFTkRPUl9EUCwNCj4gPiAtICAgICAgICB7IChVSU5UOCkg KHNpemVvZihWRU5ET1JfREVWSUNFX1BBVEgpKSwgKFVJTlQ4KQ0KPiAoKHNpemVvZihWRU5ET1Jf REVWSUNFX1BBVEgpKSA+PiA4KSB9LA0KPiA+ICsgICAgICAgIHsNCj4gPiArICAgICAgICAgIChV SU5UOCkoc2l6ZW9mIChWRU5ET1JfREVWSUNFX1BBVEgpKSwNCj4gPiArICAgICAgICAgIChVSU5U OCkoKHNpemVvZiAoVkVORE9SX0RFVklDRV9QQVRIKSkgPj4gOCkNCj4gPiArICAgICAgICB9LA0K PiA+ICAgICAgICB9LA0KPiA+ICAgICAgICAvLyBIYXJkd2FyZSBEZXZpY2UgUGF0aCBmb3IgTGNk DQo+ID4gICAgICAgIEVGSV9DQUxMRVJfSURfR1VJRCAvLyBVc2UgdGhlIGRyaXZlcidzIEdVSUQN Cj4gPiBAQCAtNzMsMTAgKzc0LDEzIEBAIExDRF9JTlNUQU5DRSBtTGNkVGVtcGxhdGUgPSB7DQo+ ID4gICAgICB7DQo+ID4gICAgICAgIEVORF9ERVZJQ0VfUEFUSF9UWVBFLA0KPiA+ICAgICAgICBF TkRfRU5USVJFX0RFVklDRV9QQVRIX1NVQlRZUEUsDQo+ID4gLSAgICAgIHsgc2l6ZW9mKEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCksIDAgfQ0KPiA+ICsgICAgICB7DQo+ID4gKyAgICAgICAgc2l6 ZW9mIChFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wpLA0KPiA+ICsgICAgICAgIDANCj4gPiArICAg ICAgfQ0KPiA+ICAgICAgfQ0KPiA+ICAgIH0sDQo+ID4gLSAgKEVGSV9FVkVOVCkgTlVMTCAvLyBF eGl0Qm9vdFNlcnZpY2VzRXZlbnQNCj4gPiArICAoRUZJX0VWRU5UKU5VTEwgLy8gRXhpdEJvb3RT ZXJ2aWNlc0V2ZW50DQo+ID4gIH07DQo+ID4NCj4gPiAgRUZJX1NUQVRVUw0KPiA+IEBAIC04Niw3 ICs5MCw3IEBAIExjZEluc3RhbmNlQ29udHJ1Y3RvciAoDQo+ID4gIHsNCj4gPiAgICBMQ0RfSU5T VEFOQ0UqIEluc3RhbmNlOw0KPiA+DQo+ID4gLSAgSW5zdGFuY2UgPSBBbGxvY2F0ZUNvcHlQb29s IChzaXplb2YoTENEX0lOU1RBTkNFKSwgJm1MY2RUZW1wbGF0ZSk7DQo+ID4gKyAgSW5zdGFuY2Ug PSBBbGxvY2F0ZUNvcHlQb29sIChzaXplb2YgKExDRF9JTlNUQU5DRSksICZtTGNkVGVtcGxhdGUp Ow0KPiA+ICAgIGlmIChJbnN0YW5jZSA9PSBOVUxMKSB7DQo+ID4gICAgICByZXR1cm4gRUZJX09V VF9PRl9SRVNPVVJDRVM7DQo+ID4gICAgfQ0KPiA+IEBAIC0xMTMsMjMgKzExNywyMyBAQCBJbml0 aWFsaXplRGlzcGxheSAoDQo+ID4gICAgVUlOVE4gICAgICAgICAgICAgICAgICBWcmFtU2l6ZTsN Cj4gPg0KPiA+ICAgIFN0YXR1cyA9IExjZFBsYXRmb3JtR2V0VnJhbSAoJlZyYW1CYXNlQWRkcmVz cywgJlZyYW1TaXplKTsNCj4gPiAtICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICAg IH0NCj4gPg0KPiA+ICAgIC8vIFNldHVwIHRoZSBMQ0QNCj4gPiAgICBTdGF0dXMgPSBMY2RJbml0 aWFsaXplIChWcmFtQmFzZUFkZHJlc3MpOw0KPiA+IC0gIGlmIChFRklfRVJST1IoU3RhdHVzKSkg ew0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgIGdvdG8gRVhJVF9F UlJPUl9MQ0RfU0hVVERPV047DQo+ID4gICAgfQ0KPiA+DQo+ID4gICAgU3RhdHVzID0gTGNkUGxh dGZvcm1Jbml0aWFsaXplRGlzcGxheSAoSW5zdGFuY2UtPkhhbmRsZSk7DQo+ID4gLSAgaWYgKEVG SV9FUlJPUihTdGF0dXMpKSB7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ ICAgICAgZ290byBFWElUX0VSUk9SX0xDRF9TSFVURE9XTjsNCj4gPiAgICB9DQo+ID4NCj4gPiAg ICAvLyBTZXR1cCBhbGwgdGhlIHJlbGV2YW50IG1vZGUgaW5mb3JtYXRpb24NCj4gPiAtICBJbnN0 YW5jZS0+R29wLk1vZGUtPlNpemVPZkluZm8gICAgICA9DQo+IHNpemVvZihFRklfR1JBUEhJQ1Nf T1VUUFVUX01PREVfSU5GT1JNQVRJT04pOw0KPiA+ICsgIEluc3RhbmNlLT5Hb3AuTW9kZS0+U2l6 ZU9mSW5mbyAgICAgID0gc2l6ZW9mDQo+IChFRklfR1JBUEhJQ1NfT1VUUFVUX01PREVfSU5GT1JN QVRJT04pOw0KPiA+ICAgIEluc3RhbmNlLT5Hb3AuTW9kZS0+RnJhbWVCdWZmZXJCYXNlID0gVnJh bUJhc2VBZGRyZXNzOw0KPiA+DQo+ID4gICAgLy8gU2V0IHRoZSBmbGFnIGJlZm9yZSBjaGFuZ2lu ZyB0aGUgbW9kZSwgdG8gYXZvaWQgaW5maW5pdGUgbG9vcHMNCj4gPiBAQCAtMTM5LDcgKzE0Myw4 IEBAIEluaXRpYWxpemVEaXNwbGF5ICgNCj4gPiAgICBnb3RvIEVYSVQ7DQo+ID4NCj4gPiAgRVhJ VF9FUlJPUl9MQ0RfU0hVVERPV046DQo+ID4gLSAgREVCVUcoKERFQlVHX0VSUk9SLCAiSW5pdGlh bGl6ZURpc3BsYXk6IEVSUk9SIC0gQ2FuIG5vdCBpbml0aWFsaXNlIHRoZQ0KPiBkaXNwbGF5LiBF eGl0IFN0YXR1cz0lclxuIiwgU3RhdHVzKSk7DQo+ID4gKyAgREVCVUcgKChERUJVR19FUlJPUiwg IkluaXRpYWxpemVEaXNwbGF5OiBFUlJPUiAtIENhbiBub3QgaW5pdGlhbGlzZQ0KPiB0aGUgZGlz cGxheS4gRXhpdCBTdGF0dXM9JXJcbiIsIFN0YXR1cykpOw0KPiA+ICsNCj4gPiAgICBMY2RTaHV0 ZG93biAoKTsNCj4gPg0KPiA+ICBFWElUOg0KPiA+IEBAIC0xNTcsNDAgKzE2Miw0NCBAQCBMY2RH cmFwaGljc091dHB1dER4ZUluaXRpYWxpemUgKA0KPiA+ICAgIExDRF9JTlNUQU5DRSogSW5zdGFu Y2U7DQo+ID4NCj4gPiAgICBTdGF0dXMgPSBMY2RJZGVudGlmeSAoKTsNCj4gPiAtICBpZiAoRUZJ X0VSUk9SKFN0YXR1cykpIHsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4g ICAgICBnb3RvIEVYSVQ7DQo+ID4gICAgfQ0KPiA+DQo+ID4gICAgU3RhdHVzID0gTGNkSW5zdGFu Y2VDb250cnVjdG9yICgmSW5zdGFuY2UpOw0KPiA+IC0gIGlmIChFRklfRVJST1IoU3RhdHVzKSkg ew0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgIGdvdG8gRVhJVDsN Cj4gPiAgICB9DQo+ID4NCj4gPiAgICAvLyBJbnN0YWxsIHRoZSBHcmFwaGljcyBPdXRwdXQgUHJv dG9jb2wgYW5kIHRoZSBEZXZpY2UgUGF0aA0KPiA+IC0gIFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11 bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzKA0KPiA+IC0gICAgICAgICAgICAmSW5zdGFuY2UtPkhh bmRsZSwNCj4gPiAtICAgICAgICAgICAgJmdFZmlHcmFwaGljc091dHB1dFByb3RvY29sR3VpZCwg Jkluc3RhbmNlLT5Hb3AsDQo+ID4gLSAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29s R3VpZCwgICAgICZJbnN0YW5jZS0+RGV2aWNlUGF0aCwNCj4gPiAtICAgICAgICAgICAgTlVMTA0K PiA+IC0gICAgICAgICAgICApOw0KPiA+ICsgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxl UHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gPiArICAgICAgICAgICAgICAgICAgJkluc3RhbmNlLT5I YW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICZnRWZpR3JhcGhpY3NPdXRwdXRQcm90b2Nv bEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICZJbnN0YW5jZS0+R29wLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICZJbnN0YW5jZS0+RGV2aWNlUGF0aCwNCj4gPiArICAgICAgICAgICAgICAgICAg TlVMTA0KPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+DQo+ID4gLSAgaWYgKEVGSV9FUlJP UihTdGF0dXMpKSB7DQo+ID4gLSAgICBERUJVRygoREVCVUdfRVJST1IsICJHcmFwaGljc091dHB1 dER4ZUluaXRpYWxpemU6IENhbiBub3QgaW5zdGFsbA0KPiB0aGUgcHJvdG9jb2wuIEV4aXQgU3Rh dHVzPSVyXG4iLCBTdGF0dXMpKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiTGNkR3JhcGhpY3NPdXRwdXREeGVJbml0aWFs aXplOiBDYW4gbm90DQo+IGluc3RhbGwgdGhlIHByb3RvY29sLiBFeGl0IFN0YXR1cz0lclxuIiwg U3RhdHVzKSk7DQo+ID4gICAgICBnb3RvIEVYSVQ7DQo+ID4gICAgfQ0KPiA+DQo+ID4gICAgLy8g UmVnaXN0ZXIgZm9yIGFuIEV4aXRCb290U2VydmljZXNFdmVudA0KPiA+IC0gIC8vIFdoZW4gRXhp dEJvb3RTZXJ2aWNlcyBzdGFydHMsIHRoaXMgZnVuY3Rpb24gaGVyZSB3aWxsIG1ha2Ugc3VyZSB0 aGF0DQo+IHRoZSBncmFwaGljcyBkcml2ZXIgd2lsbCBzaHV0IGRvd24gcHJvcGVybHksDQo+ID4g LSAgLy8gaS5lLiBpdCB3aWxsIGZyZWUgdXAgYWxsIGFsbG9jYXRlZCBtZW1vcnkgYW5kIHBlcmZv cm0gYW55IG5lY2Vzc2FyeQ0KPiBoYXJkd2FyZSByZS1jb25maWd1cmF0aW9uLg0KPiA+ICsgIC8v IFdoZW4gRXhpdEJvb3RTZXJ2aWNlcyBzdGFydHMsIHRoaXMgZnVuY3Rpb24gd2lsbCBtYWtlIHN1 cmUgdGhhdCB0aGUNCj4gPiArICAvLyBncmFwaGljcyBkcml2ZXIgc2h1dHMgZG93biBwcm9wZXJs eSwgaS5lLiBpdCB3aWxsIGZyZWUgdXAgYWxsDQo+ID4gKyAgLy8gYWxsb2NhdGVkIG1lbW9yeSBh bmQgcGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGhhcmR3YXJlIHJlLQ0KPiBjb25maWd1cmF0aW9uLg0K PiA+ICAgIFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnQgKA0KPiA+IC0gICAgICAgICAgICBFVlRf U0lHTkFMX0VYSVRfQk9PVF9TRVJWSUNFUywNCj4gPiAtICAgICAgICAgICAgVFBMX05PVElGWSwN Cj4gPiAtICAgICAgICAgICAgTGNkR3JhcGhpY3NFeGl0Qm9vdFNlcnZpY2VzRXZlbnQsIE5VTEws DQo+ID4gLSAgICAgICAgICAgICZJbnN0YW5jZS0+RXhpdEJvb3RTZXJ2aWNlc0V2ZW50DQo+ID4g LSAgICAgICAgICAgICk7DQo+ID4gKyAgICAgICAgICAgICAgICAgIEVWVF9TSUdOQUxfRVhJVF9C T09UX1NFUlZJQ0VTLA0KPiA+ICsgICAgICAgICAgICAgICAgICBUUExfTk9USUZZLA0KPiA+ICsg ICAgICAgICAgICAgICAgICBMY2RHcmFwaGljc0V4aXRCb290U2VydmljZXNFdmVudCwNCj4gPiAr ICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gPiArICAgICAgICAgICAgICAgICAgJkluc3RhbmNl LT5FeGl0Qm9vdFNlcnZpY2VzRXZlbnQNCj4gPiArICAgICAgICAgICAgICAgICAgKTsNCj4gPg0K PiA+IC0gIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiA+IC0gICAgREVCVUcoKERFQlVHX0VS Uk9SLCAiR3JhcGhpY3NPdXRwdXREeGVJbml0aWFsaXplOiBDYW4gbm90IGluc3RhbGwNCj4gdGhl IEV4aXRCb290U2VydmljZXNFdmVudCBoYW5kbGVyLiBFeGl0IFN0YXR1cz0lclxuIiwgU3RhdHVz KSk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgREVCVUcgKChE RUJVR19FUlJPUiwgIkxjZEdyYXBoaWNzT3V0cHV0RHhlSW5pdGlhbGl6ZTogQ2FuIG5vdA0KPiBp bnN0YWxsIHRoZSBFeGl0Qm9vdFNlcnZpY2VzRXZlbnQgaGFuZGxlci4gRXhpdCBTdGF0dXM9JXJc biIsIFN0YXR1cykpOw0KPiA+ICAgICAgZ290byBFWElUX0VSUk9SX1VOSU5TVEFMTF9QUk9UT0NP TDsNCj4gPiAgICB9DQo+ID4NCj4gPiBAQCAtMTk4LDQ4ICsyMDcsNDYgQEAgTGNkR3JhcGhpY3NP dXRwdXREeGVJbml0aWFsaXplICgNCj4gPiAgICBnb3RvIEVYSVQ7DQo+ID4NCj4gPiAgRVhJVF9F UlJPUl9VTklOU1RBTExfUFJPVE9DT0w6DQo+ID4gLSAgLyogVGhlIGZvbGxvd2luZyBmdW5jdGlv biBjb3VsZCByZXR1cm4gYW4gZXJyb3IgbWVzc2FnZSwNCj4gPiAtICAgKiBob3dldmVyLCB0byBn ZXQgaGVyZSBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgd3JvbmcgYWxyZWFkeSwNCj4gPiAtICAg KiBzbyBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZXJyb3IsIGkuZS4gZG9uJ3QgY2hhbmdlDQo+ID4g LSAgICogdGhlIFN0YXR1cyB2YXJpYWJsZSwgZXZlbiBpdCBmYWlscyB0byB1bmluc3RhbGwgdGhl IHByb3RvY29sLg0KPiA+IC0gICAqLw0KPiA+ICsgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24g Y291bGQgcmV0dXJuIGFuIGVycm9yIG1lc3NhZ2UsDQo+ID4gKyAgLy8gaG93ZXZlciwgdG8gZ2V0 IGhlcmUgc29tZXRoaW5nIG11c3QgaGF2ZSBnb25lIHdyb25nIGFscmVhZHksDQo+ID4gKyAgLy8g c28gcHJlc2VydmUgdGhlIG9yaWdpbmFsIGVycm9yLCBpLmUuIGRvbid0IGNoYW5nZQ0KPiA+ICsg IC8vIHRoZSBTdGF0dXMgdmFyaWFibGUsIGV2ZW4gaXQgZmFpbHMgdG8gdW5pbnN0YWxsIHRoZSBw cm90b2NvbC4NCj4gPiAgICBnQlMtPlVuaW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2Vz ICgNCj4gPiAtICAgIEluc3RhbmNlLT5IYW5kbGUsDQo+ID4gLSAgICAmZ0VmaUdyYXBoaWNzT3V0 cHV0UHJvdG9jb2xHdWlkLCAmSW5zdGFuY2UtPkdvcCwgLy8gVW5pbnN0YWxsDQo+IEdyYXBoaWNz IE91dHB1dCBwcm90b2NvbA0KPiA+IC0gICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLCAg ICAgJkluc3RhbmNlLT5EZXZpY2VQYXRoLCAgICAgLy8gVW5pbnN0YWxsDQo+IGRldmljZSBwYXRo DQo+ID4gLSAgICBOVUxMDQo+ID4gLSAgICApOw0KPiA+ICsgICAgICAgICBJbnN0YW5jZS0+SGFu ZGxlLA0KPiA+ICsgICAgICAgICAmZ0VmaUdyYXBoaWNzT3V0cHV0UHJvdG9jb2xHdWlkLA0KPiA+ ICsgICAgICAgICAmSW5zdGFuY2UtPkdvcCwgLy8gVW5pbnN0YWxsIEdyYXBoaWNzIE91dHB1dCBw cm90b2NvbA0KPiA+ICsgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ID4g KyAgICAgICAgICZJbnN0YW5jZS0+RGV2aWNlUGF0aCwgICAgIC8vIFVuaW5zdGFsbCBkZXZpY2Ug cGF0aA0KPiA+ICsgICAgICAgICBOVUxMDQo+ID4gKyAgICAgICAgICk7DQo+ID4NCj4gPiAgRVhJ VDoNCj4gPiAgICByZXR1cm4gU3RhdHVzOw0KPiA+IC0NCj4gPiAgfQ0KPiA+DQo+ID4gLS8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gPiAtICogVGhpcyBmdW5jdGlv biBzaG91bGQgYmUgY2FsbGVkDQo+ID4gLSAqIG9uIEV2ZW50OiBFeGl0Qm9vdFNlcnZpY2VzDQo+ ID4gLSAqIHRvIGZyZWUgdXAgbWVtb3J5LCBzdG9wIHRoZSBkcml2ZXINCj4gPiAtICogYW5kIHVu aW5zdGFsbCB0aGUgcHJvdG9jb2xzDQo+ID4gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovDQo+ID4gKy8qKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQNCj4g PiArICBvbiBFdmVudDogRXhpdEJvb3RTZXJ2aWNlcw0KPiA+ICsgIHRvIGZyZWUgdXAgbWVtb3J5 LCBzdG9wIHRoZSBkcml2ZXINCj4gPiArICBhbmQgdW5pbnN0YWxsIHRoZSBwcm90b2NvbHMNCj4g PiArKiovDQo+ID4gIFZPSUQNCj4gPiAgTGNkR3JhcGhpY3NFeGl0Qm9vdFNlcnZpY2VzRXZlbnQg KA0KPiA+ICAgIElOIEVGSV9FVkVOVCAgRXZlbnQsDQo+ID4gICAgSU4gVk9JRCAgICAgICAqQ29u dGV4dA0KPiA+ICAgICkNCj4gPiAgew0KPiA+IC0gIC8vIEJ5IGRlZmF1bHQsIHRoaXMgUENEIGlz IEZBTFNFLiBCdXQgaWYgYSBwbGF0Zm9ybSBzdGFydHMgYSBwcmVkZWZpbmVkIE9TDQo+IHRoYXQN Cj4gPiAtICAvLyBkb2VzIG5vdCB1c2UgYSBmcmFtZWJ1ZmZlciB0aGVuIHdlIG1pZ2h0IHdhbnQg dG8gZGlzYWJsZSB0aGUgZGlzcGxheQ0KPiBjb250cm9sbGVyDQo+ID4gLSAgLy8gdG8gYXZvaWQg dG8gZGlzcGxheSBjb3JydXB0ZWQgaW5mb3JtYXRpb24gb24gdGhlIHNjcmVlbi4NCj4gPiArICAv LyBCeSBkZWZhdWx0LCB0aGlzIFBDRCBpcyBGQUxTRS4gQnV0IGlmIGEgcGxhdGZvcm0gc3RhcnRz IGEgcHJlZGVmaW5lZCBPUw0KPiA+ICsgIC8vIHRoYXQgZG9lcyBub3QgdXNlIGEgZnJhbWVidWZm ZXIgdGhlbiB3ZSBtaWdodCB3YW50IHRvIGRpc2FibGUgdGhlDQo+IGRpc3BsYXkNCj4gPiArICAv LyBjb250cm9sbGVyIHRvIGF2b2lkIHRvIGRpc3BsYXkgY29ycnVwdGVkIGluZm9ybWF0aW9uIG9u IHRoZSBzY3JlZW4uDQo+ID4gICAgaWYgKEZlYXR1cmVQY2RHZXQgKFBjZEdvcERpc2FibGVPbkV4 aXRCb290U2VydmljZXMpKSB7DQo+ID4gICAgICAvLyBUdXJuLW9mZiB0aGUgRGlzcGxheSBjb250 cm9sbGVyDQo+ID4gICAgICBMY2RTaHV0ZG93biAoKTsNCj4gPiAgICB9DQo+ID4gIH0NCj4gPg0K PiA+IC0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ID4gLSAqIEdy YXBoaWNzT3V0cHV0IFByb3RvY29sIGZ1bmN0aW9uLCBtYXBwaW5nIHRvDQo+ID4gLSAqIEVGSV9H UkFQSElDU19PVVRQVVRfUFJPVE9DT0wuUXVlcnlNb2RlDQo+ID4gLSAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovDQo+ID4gKy8qKiBHcmFwaGljc091dHB1dCBQcm90b2Nv bCBmdW5jdGlvbiwgbWFwcGluZyB0bw0KPiA+ICsgIEVGSV9HUkFQSElDU19PVVRQVVRfUFJPVE9D T0wuUXVlcnlNb2RlDQo+ID4gKyoqLw0KPiA+ICBFRklfU1RBVFVTDQo+ID4gIEVGSUFQSQ0KPiA+ ICBMY2RHcmFwaGljc1F1ZXJ5TW9kZSAoDQo+ID4gQEAgLTI1MiwxOSArMjU5LDIyIEBAIExjZEdy YXBoaWNzUXVlcnlNb2RlICgNCj4gPiAgICBFRklfU1RBVFVTIFN0YXR1cyA9IEVGSV9TVUNDRVNT Ow0KPiA+ICAgIExDRF9JTlNUQU5DRSAqSW5zdGFuY2U7DQo+ID4NCj4gPiAtICBJbnN0YW5jZSA9 IExDRF9JTlNUQU5DRV9GUk9NX0dPUF9USElTKFRoaXMpOw0KPiA+ICsgIEluc3RhbmNlID0gTENE X0lOU1RBTkNFX0ZST01fR09QX1RISVMgKFRoaXMpOw0KPiA+DQo+ID4gICAgLy8gU2V0dXAgdGhl IGhhcmR3YXJlIGlmIG5vdCBhbHJlYWR5IGRvbmUNCj4gPiAtICBpZiggIW1EaXNwbGF5SW5pdGlh bGl6ZWQgKSB7DQo+ID4gLSAgICBTdGF0dXMgPSBJbml0aWFsaXplRGlzcGxheShJbnN0YW5jZSk7 DQo+ID4gLSAgICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gPiArICBpZiAoIW1EaXNwbGF5 SW5pdGlhbGl6ZWQpIHsNCj4gPiArICAgIFN0YXR1cyA9IEluaXRpYWxpemVEaXNwbGF5IChJbnN0 YW5jZSk7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgICAgIGdv dG8gRVhJVDsNCj4gPiAgICAgIH0NCj4gPiAgICB9DQo+ID4NCj4gPiAgICAvLyBFcnJvciBjaGVj a2luZw0KPiA+IC0gIGlmICggKFRoaXMgPT0gTlVMTCkgfHwgKEluZm8gPT0gTlVMTCkgfHwgKFNp emVPZkluZm8gPT0gTlVMTCkgfHwNCj4gKE1vZGVOdW1iZXIgPj0gVGhpcy0+TW9kZS0+TWF4TW9k ZSkgKSB7DQo+ID4gLSAgICBERUJVRygoREVCVUdfRVJST1IsICJMY2RHcmFwaGljc1F1ZXJ5TW9k ZTogRVJST1IgLSBGb3IgbW9kZQ0KPiBudW1iZXIgJWQgOiBJbnZhbGlkIFBhcmFtZXRlci5cbiIs IE1vZGVOdW1iZXIgKSk7DQo+ID4gKyAgaWYgKChUaGlzID09IE5VTEwpDQo+ID4gKyAgICAgIHx8 IChJbmZvID09IE5VTEwpDQo+ID4gKyAgICAgIHx8IChTaXplT2ZJbmZvID09IE5VTEwpDQo+ID4g KyAgICAgIHx8IChNb2RlTnVtYmVyID49IFRoaXMtPk1vZGUtPk1heE1vZGUpKSB7DQo+ID4gKyAg ICBERUJVRyAoKERFQlVHX0VSUk9SLCAiTGNkR3JhcGhpY3NRdWVyeU1vZGU6IEVSUk9SIC0gRm9y IG1vZGUNCj4gbnVtYmVyICVkIDogSW52YWxpZCBQYXJhbWV0ZXIuXG4iLCBNb2RlTnVtYmVyKSk7 DQo+ID4gICAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgICBnb3Rv IEVYSVQ7DQo+ID4gICAgfQ0KPiA+IEBAIC0yNzUsMjEgKzI4NSwyMCBAQCBMY2RHcmFwaGljc1F1 ZXJ5TW9kZSAoDQo+ID4gICAgICBnb3RvIEVYSVQ7DQo+ID4gICAgfQ0KPiA+DQo+ID4gLSAgKlNp emVPZkluZm8gPSBzaXplb2YoIEVGSV9HUkFQSElDU19PVVRQVVRfTU9ERV9JTkZPUk1BVElPTik7 DQo+ID4gKyAgKlNpemVPZkluZm8gPSBzaXplb2YgKEVGSV9HUkFQSElDU19PVVRQVVRfTU9ERV9J TkZPUk1BVElPTik7DQo+ID4NCj4gPiAtICBTdGF0dXMgPSBMY2RQbGF0Zm9ybVF1ZXJ5TW9kZSAo TW9kZU51bWJlciwqSW5mbyk7DQo+ID4gLSAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ID4g LSAgICBGcmVlUG9vbCgqSW5mbyk7DQo+ID4gKyAgU3RhdHVzID0gTGNkUGxhdGZvcm1RdWVyeU1v ZGUgKE1vZGVOdW1iZXIsICpJbmZvKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ID4gKyAgICBGcmVlUG9vbCAoKkluZm8pOw0KPiA+ICAgIH0NCj4gPg0KPiA+ICBFWElUOg0K PiA+ICAgIHJldHVybiBTdGF0dXM7DQo+ID4gIH0NCj4gPg0KPiA+IC0vKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqDQo+ID4gLSAqIEdyYXBoaWNzT3V0cHV0IFByb3RvY29s IGZ1bmN0aW9uLCBtYXBwaW5nIHRvDQo+ID4gLSAqIEVGSV9HUkFQSElDU19PVVRQVVRfUFJPVE9D T0wuU2V0TW9kZQ0KPiA+IC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Lw0KPiA+ICsvKiogR3JhcGhpY3NPdXRwdXQgUHJvdG9jb2wgZnVuY3Rpb24sIG1hcHBpbmcgdG8N Cj4gPiArICBFRklfR1JBUEhJQ1NfT1VUUFVUX1BST1RPQ09MLlNldE1vZGUNCj4gPiArKiovDQo+ ID4gIEVGSV9TVEFUVVMNCj4gPiAgRUZJQVBJDQo+ID4gIExjZEdyYXBoaWNzU2V0TW9kZSAoDQo+ ID4gQEAgLTMwNSw0NyArMzE0LDQ4IEBAIExjZEdyYXBoaWNzU2V0TW9kZSAoDQo+ID4gICAgSW5z dGFuY2UgPSBMQ0RfSU5TVEFOQ0VfRlJPTV9HT1BfVEhJUyAoVGhpcyk7DQo+ID4NCj4gPiAgICAv LyBTZXR1cCB0aGUgaGFyZHdhcmUgaWYgbm90IGFscmVhZHkgZG9uZQ0KPiA+IC0gIGlmKCFtRGlz cGxheUluaXRpYWxpemVkKSB7DQo+ID4gKyAgaWYgKCFtRGlzcGxheUluaXRpYWxpemVkKSB7DQo+ ID4gICAgICBTdGF0dXMgPSBJbml0aWFsaXplRGlzcGxheSAoSW5zdGFuY2UpOw0KPiA+IC0gICAg aWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ID4gICAgICAgIGdvdG8gRVhJVDsNCj4gPiAgICAgIH0NCj4gPiAgICB9DQo+ID4NCj4g PiAgICAvLyBDaGVjayBpZiB0aGlzIG1vZGUgaXMgc3VwcG9ydGVkDQo+ID4gLSAgaWYoIE1vZGVO dW1iZXIgPj0gVGhpcy0+TW9kZS0+TWF4TW9kZSApIHsNCj4gPiAtICAgIERFQlVHKChERUJVR19F UlJPUiwgIkxjZEdyYXBoaWNzU2V0TW9kZTogRVJST1IgLSBVbnN1cHBvcnRlZA0KPiBtb2RlIG51 bWJlciAlZCAuXG4iLCBNb2RlTnVtYmVyICkpOw0KPiA+ICsgIGlmIChNb2RlTnVtYmVyID49IFRo aXMtPk1vZGUtPk1heE1vZGUpIHsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJMY2RH cmFwaGljc1NldE1vZGU6IEVSUk9SIC0gVW5zdXBwb3J0ZWQNCj4gbW9kZSBudW1iZXIgJWQgLlxu IiwgTW9kZU51bWJlcikpOw0KPiA+ICAgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ ICAgICAgZ290byBFWElUOw0KPiA+ICAgIH0NCj4gPg0KPiA+ICAgIC8vIFNldCB0aGUgb3NjaWxs YXRvciBmcmVxdWVuY3kgdG8gc3VwcG9ydCB0aGUgbmV3IG1vZGUNCj4gPiAgICBTdGF0dXMgPSBM Y2RQbGF0Zm9ybVNldE1vZGUgKE1vZGVOdW1iZXIpOw0KPiA+IC0gIGlmIChFRklfRVJST1IoU3Rh dHVzKSkgew0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgIFN0YXR1 cyA9IEVGSV9ERVZJQ0VfRVJST1I7DQo+ID4gICAgICBnb3RvIEVYSVQ7DQo+ID4gICAgfQ0KPiA+ DQo+ID4gICAgLy8gVXBkYXRlIHRoZSBVRUZJIG1vZGUgaW5mb3JtYXRpb24NCj4gPiAgICBUaGlz LT5Nb2RlLT5Nb2RlID0gTW9kZU51bWJlcjsNCj4gPiAtICBMY2RQbGF0Zm9ybVF1ZXJ5TW9kZSAo TW9kZU51bWJlciwmSW5zdGFuY2UtPk1vZGVJbmZvKTsNCj4gPiAtICBTdGF0dXMgPSBMY2RQbGF0 Zm9ybUdldEJwcChNb2RlTnVtYmVyLCAmQnBwKTsNCj4gPiAtICBpZiAoRUZJX0VSUk9SKFN0YXR1 cykpIHsNCj4gPiArICBMY2RQbGF0Zm9ybVF1ZXJ5TW9kZSAoTW9kZU51bWJlciwgJkluc3RhbmNl LT5Nb2RlSW5mbyk7DQo+ID4gKyAgU3RhdHVzID0gTGNkUGxhdGZvcm1HZXRCcHAgKE1vZGVOdW1i ZXIsICZCcHApOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgIERF QlVHICgoREVCVUdfRVJST1IsICJMY2RHcmFwaGljc1NldE1vZGU6IEVSUk9SIC0gQ291bGRuJ3Qg Z2V0DQo+IGJ5dGVzIHBlciBwaXhlbCwgc3RhdHVzOiAlclxuIiwgU3RhdHVzKSk7DQo+ID4gICAg ICBnb3RvIEVYSVQ7DQo+ID4gICAgfQ0KPiA+ICAgIFRoaXMtPk1vZGUtPkZyYW1lQnVmZmVyU2l6 ZSA9ICBJbnN0YW5jZS0+TW9kZUluZm8uVmVydGljYWxSZXNvbHV0aW9uDQo+ID4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqIEluc3RhbmNlLT5Nb2RlSW5mby5QaXhlbHNQZXJTY2Fu TGluZQ0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBHZXRCeXRlc1BlclBp eGVsKEJwcCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogSW5zdGFu Y2UtPk1vZGVJbmZvLlBpeGVsc1BlclNjYW5MaW5lDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICogR2V0Qnl0ZXNQZXJQaXhlbCAoQnBwKTsNCj4gPg0KPiA+ICAgIC8vIFNl dCB0aGUgaGFyZHdhcmUgdG8gdGhlIG5ldyBtb2RlDQo+ID4gICAgU3RhdHVzID0gTGNkU2V0TW9k ZSAoTW9kZU51bWJlcik7DQo+ID4gLSAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ID4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICAgU3RhdHVzID0gRUZJX0RFVklDRV9F UlJPUjsNCj4gPiAgICAgIGdvdG8gRVhJVDsNCj4gPiAgICB9DQo+ID4NCj4gPiAtICAvLyBUaGUg VUVGSSBzcGVjIHJlcXVpcmVzIHRoYXQgd2Ugbm93IGNsZWFyIHRoZSB2aXNpYmxlIHBvcnRpb25z IG9mIHRoZQ0KPiBvdXRwdXQgZGlzcGxheSB0byBibGFjay4NCj4gPiArICAvLyBUaGUgVUVGSSBz cGVjIHJlcXVpcmVzIHRoYXQgd2Ugbm93IGNsZWFyIHRoZSB2aXNpYmxlIHBvcnRpb25zIG9mIHRo ZQ0KPiA+ICsgIC8vIG91dHB1dCBkaXNwbGF5IHRvIGJsYWNrLg0KPiA+DQo+ID4gICAgLy8gU2V0 IHRoZSBmaWxsIGNvbG91ciB0byBibGFjaw0KPiA+ICAgIFNldE1lbSAoJkZpbGxDb2xvdXIsIHNp emVvZiAoRUZJX0dSQVBISUNTX09VVFBVVF9CTFRfUElYRUwpLCAweDApOw0KPiA+IEBAIC0zNjEs NyArMzcxLDggQEAgTGNkR3JhcGhpY3NTZXRNb2RlICgNCj4gPiAgICAgICAgMCwNCj4gPiAgICAg ICAgVGhpcy0+TW9kZS0+SW5mby0+SG9yaXpvbnRhbFJlc29sdXRpb24sDQo+ID4gICAgICAgIFRo aXMtPk1vZGUtPkluZm8tPlZlcnRpY2FsUmVzb2x1dGlvbiwNCj4gPiAtICAgICAgMCk7DQo+ID4g KyAgICAgIDANCj4gPiArICAgICAgKTsNCj4gPg0KPiA+ICBFWElUOg0KPiA+ICAgIHJldHVybiBT dGF0dXM7DQo+ID4gQEAgLTM3Miw3ICszODMsNyBAQCBHZXRCeXRlc1BlclBpeGVsICgNCj4gPiAg ICBJTiAgTENEX0JQUCAgICAgICBCcHANCj4gPiAgICApDQo+ID4gIHsNCj4gPiAtICBzd2l0Y2go QnBwKSB7DQo+ID4gKyAgc3dpdGNoIChCcHApIHsNCj4gPiAgICBjYXNlIExDRF9CSVRTX1BFUl9Q SVhFTF8yNDoNCj4gPiAgICAgIHJldHVybiA0Ow0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL0FybVBs YXRmb3JtUGtnL0xpYnJhcnkvSGRMY2QvSGRMY2QuYw0KPiBiL0FybVBsYXRmb3JtUGtnL0xpYnJh cnkvSGRMY2QvSGRMY2QuYw0KPiA+IGluZGV4DQo+IDI0ZWZiNjhmMjNlMzM5M2E5NmZjNzYwNzMy ZDk3OGI2MzQ2YTI4MDcuLmYxZmZmYjFlODMxNzNmMDNmMDQ0ZmMwDQo+IGY0YTVhZDVjMGI4NjQ2 OTViIDEwMDY0NA0KPiA+IC0tLSBhL0FybVBsYXRmb3JtUGtnL0xpYnJhcnkvSGRMY2QvSGRMY2Qu Yw0KPiA+ICsrKyBiL0FybVBsYXRmb3JtUGtnL0xpYnJhcnkvSGRMY2QvSGRMY2QuYw0KPiA+IEBA IC0xLDYgKzEsNiBAQA0KPiA+IC0vKiogQGZpbGUgIExjZC5jDQo+ID4gKy8qKiBAZmlsZQ0KPiA+ DQo+ID4gLSAgQ29weXJpZ2h0IChjKSAyMDExLTIwMTIsIEFSTSBMdGQuIEFsbCByaWdodHMgcmVz ZXJ2ZWQuPEJSPg0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAxMS0yMDE3LCBBUk0gTHRkLiBBbGwg cmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPg0KPiA+ICAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFj Y29tcGFueWluZyBtYXRlcmlhbHMNCj4gPiAgICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxh YmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUNCj4gQlNEIExpY2Vuc2UN Cj4gPiBAQCAtMjEsMTIgKzIxLDkgQEANCj4gPg0KPiA+ICAjaW5jbHVkZSAiSGRMY2QuaCINCj4g Pg0KPiA+IC0NCj4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioNCj4gKioqKioqKioqKioqDQo+ID4gLSAqDQo+ID4gLSAqICBUaGlzIGZp bGUgY29udGFpbnMgYWxsIHRoZSBiaXRzIG9mIHRoZSBMY2QgdGhhdCBhcmUNCj4gPiAtICogIHBs YXRmb3JtIGluZGVwZW5kZW50Lg0KPiA+IC0gKg0KPiA+IC0NCj4gKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqKioqKiov DQo+ID4gKy8qKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBiaXRzIG9mIHRoZSBMY2QgdGhh dCBhcmUNCj4gPiArICBwbGF0Zm9ybSBpbmRlcGVuZGVudC4NCj4gPiArKiovDQo+ID4NCj4gPiAg U1RBVElDDQo+ID4gIFVJTlRODQo+ID4gQEAgLTM0LDcgKzMxLDcgQEAgR2V0Qnl0ZXNQZXJQaXhl bCAoDQo+ID4gICAgSU4gIExDRF9CUFAgICAgICAgQnBwDQo+ID4gICAgKQ0KPiA+ICB7DQo+ID4g LSAgc3dpdGNoKEJwcCkgew0KPiA+ICsgIHN3aXRjaCAoQnBwKSB7DQo+ID4gICAgY2FzZSBMQ0Rf QklUU19QRVJfUElYRUxfMjQ6DQo+ID4gICAgICByZXR1cm4gNDsNCj4gPg0KPiA+IEBAIC02MCwy MSArNTcsMjcgQEAgTGNkSW5pdGlhbGl6ZSAoDQo+ID4gICAgKQ0KPiA+ICB7DQo+ID4gICAgLy8g RGlzYWJsZSB0aGUgY29udHJvbGxlcg0KPiA+IC0gIE1taW9Xcml0ZTMyKEhETENEX1JFR19DT01N QU5ELCBIRExDRF9ESVNBQkxFKTsNCj4gPiArICBNbWlvV3JpdGUzMiAoSERMQ0RfUkVHX0NPTU1B TkQsIEhETENEX0RJU0FCTEUpOw0KPiA+DQo+ID4gICAgLy8gRGlzYWJsZSBhbGwgaW50ZXJydXB0 cw0KPiA+IC0gIE1taW9Xcml0ZTMyKEhETENEX1JFR19JTlRfTUFTSywgMCk7DQo+ID4gKyAgTW1p b1dyaXRlMzIgKEhETENEX1JFR19JTlRfTUFTSywgMCk7DQo+ID4NCj4gPiAgICAvLyBEZWZpbmUg c3RhcnQgb2YgdGhlIFZSQU0uIFRoaXMgbmV2ZXIgY2hhbmdlcyBmb3IgYW55IGdyYXBoaWNzIG1v ZGUNCj4gPiAtICBNbWlvV3JpdGUzMihIRExDRF9SRUdfRkJfQkFTRSwgKFVJTlQzMikgVnJhbUJh c2VBZGRyZXNzKTsNCj4gPiArICBNbWlvV3JpdGUzMiAoSERMQ0RfUkVHX0ZCX0JBU0UsIChVSU5U MzIpVnJhbUJhc2VBZGRyZXNzKTsNCj4gPg0KPiA+ICAgIC8vIFNldHVwIHZhcmlvdXMgcmVnaXN0 ZXJzIHRoYXQgbmV2ZXIgY2hhbmdlDQo+ID4gLSAgTW1pb1dyaXRlMzIoSERMQ0RfUkVHX0JVU19P UFRJT05TLCAgKDQgPDwgOCkgfCBIRExDRF9CVVJTVF84KTsNCj4gPiAtICBNbWlvV3JpdGUzMihI RExDRF9SRUdfUE9MQVJJVElFUywgICBIRExDRF9QWENMS19MT1cgfA0KPiBIRExDRF9EQVRBX0hJ R0ggfCBIRExDRF9EQVRFTl9ISUdIIHwgSERMQ0RfSFNZTkNfTE9XIHwNCj4gSERMQ0RfVlNZTkNf SElHSCk7DQo+ID4gLSAgTW1pb1dyaXRlMzIoSERMQ0RfUkVHX1BJWEVMX0ZPUk1BVCwgSERMQ0Rf TElUVExFX0VORElBTiB8DQo+IEhETENEXzRCWVRFU19QRVJfUElYRUwpOw0KPiA+IC0gIE1taW9X cml0ZTMyKEhETENEX1JFR19SRURfU0VMRUNULCAgICgwIDw8IDE2IHwgOCA8PCA4IHwgIDApKTsN Cj4gPiAtICBNbWlvV3JpdGUzMihIRExDRF9SRUdfR1JFRU5fU0VMRUNULCAoMCA8PCAxNiB8IDgg PDwgOCB8ICA4KSk7DQo+ID4gLSAgTW1pb1dyaXRlMzIoSERMQ0RfUkVHX0JMVUVfU0VMRUNULCAg KDAgPDwgMTYgfCA4IDw8IDggfCAxNikpOw0KPiA+ICsgIE1taW9Xcml0ZTMyIChIRExDRF9SRUdf QlVTX09QVElPTlMsICAoNCA8PCA4KSB8DQo+IEhETENEX0JVUlNUXzgpOw0KPiA+ICsNCj4gPiAr ICBNbWlvV3JpdGUzMiAoSERMQ0RfUkVHX1BPTEFSSVRJRVMsIEhETENEX0RFRkFVTFRfUE9MQVJJ VElFUyk7DQo+ID4gKw0KPiA+ICsgIE1taW9Xcml0ZTMyICgNCj4gPiArICAgIEhETENEX1JFR19Q SVhFTF9GT1JNQVQsDQo+ID4gKyAgICBIRExDRF9MSVRUTEVfRU5ESUFOIHwgSERMQ0RfNEJZVEVT X1BFUl9QSVhFTA0KPiA+ICsgICAgKTsNCj4gPiArDQo+ID4gKyAgTW1pb1dyaXRlMzIgKEhETENE X1JFR19SRURfU0VMRUNULCAgICgwIDw8IDE2IHwgOCA8PCA4IHwgMCkpOw0KPiA+ICsgIE1taW9X cml0ZTMyIChIRExDRF9SRUdfR1JFRU5fU0VMRUNULCAoMCA8PCAxNiB8IDggPDwgOCB8IDgpKTsN Cj4gPiArICBNbWlvV3JpdGUzMiAoSERMQ0RfUkVHX0JMVUVfU0VMRUNULCAgKDAgPDwgMTYgfCA4 IDw8IDggfCAxNikpOw0KPiA+DQo+ID4gICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICB9DQo+ ID4gQEAgLTk2LDYzICs5OSw2NiBAQCBMY2RTZXRNb2RlICgNCj4gPiAgICBVSU5UMzIgICAgICAg ICAgICBCeXRlc1BlclBpeGVsOw0KPiA+ICAgIExDRF9CUFAgICAgICAgICAgIExjZEJwcDsNCj4g Pg0KPiA+IC0NCj4gPiAgICAvLyBTZXQgdGhlIHZpZGVvIG1vZGUgdGltaW5ncyBhbmQgb3RoZXIg cmVsZXZhbnQgaW5mb3JtYXRpb24NCj4gPiAtICBTdGF0dXMgPSBMY2RQbGF0Zm9ybUdldFRpbWlu Z3MgKE1vZGVOdW1iZXIsDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm SFJlcywmSFN5bmMsJkhCYWNrUG9yY2gsJkhGcm9udFBvcmNoLA0KPiA+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJlZSZXMsJlZTeW5jLCZWQmFja1BvcmNoLCZWRnJvbnRQb3Jj aCk7DQo+ID4gKyAgU3RhdHVzID0gTGNkUGxhdGZvcm1HZXRUaW1pbmdzICgNCj4gPiArICAgICAg ICAgICAgIE1vZGVOdW1iZXIsDQo+ID4gKyAgICAgICAgICAgICAmSFJlcywNCj4gPiArICAgICAg ICAgICAgICZIU3luYywNCj4gPiArICAgICAgICAgICAgICZIQmFja1BvcmNoLA0KPiA+ICsgICAg ICAgICAgICAgJkhGcm9udFBvcmNoLA0KPiA+ICsgICAgICAgICAgICAgJlZSZXMsDQo+ID4gKyAg ICAgICAgICAgICAmVlN5bmMsDQo+ID4gKyAgICAgICAgICAgICAmVkJhY2tQb3JjaCwNCj4gPiAr ICAgICAgICAgICAgICZWRnJvbnRQb3JjaA0KPiA+ICsgICAgICAgICAgICAgKTsNCj4gPiAgICBB U1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+IC0gIGlmIChFRklfRVJST1IoIFN0YXR1cyAp KSB7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICAgcmV0dXJuIEVG SV9ERVZJQ0VfRVJST1I7DQo+ID4gICAgfQ0KPiA+DQo+ID4gLSAgU3RhdHVzID0gTGNkUGxhdGZv cm1HZXRCcHAgKE1vZGVOdW1iZXIsJkxjZEJwcCk7DQo+ID4gKyAgU3RhdHVzID0gTGNkUGxhdGZv cm1HZXRCcHAgKE1vZGVOdW1iZXIsICZMY2RCcHApOw0KPiA+ICAgIEFTU0VSVF9FRklfRVJST1Ig KFN0YXR1cyk7DQo+ID4gLSAgaWYgKEVGSV9FUlJPUiggU3RhdHVzICkpIHsNCj4gPiArICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsN Cj4gPiAgICB9DQo+ID4NCj4gPiAtICBCeXRlc1BlclBpeGVsID0gR2V0Qnl0ZXNQZXJQaXhlbChM Y2RCcHApOw0KPiA+ICsgIEJ5dGVzUGVyUGl4ZWwgPSBHZXRCeXRlc1BlclBpeGVsIChMY2RCcHAp Ow0KPiA+DQo+ID4gICAgLy8gRGlzYWJsZSB0aGUgY29udHJvbGxlcg0KPiA+IC0gIE1taW9Xcml0 ZTMyKEhETENEX1JFR19DT01NQU5ELCBIRExDRF9ESVNBQkxFKTsNCj4gPiArICBNbWlvV3JpdGUz MiAoSERMQ0RfUkVHX0NPTU1BTkQsIEhETENEX0RJU0FCTEUpOw0KPiA+DQo+ID4gICAgLy8gVXBk YXRlIHRoZSBmcmFtZSBidWZmZXIgaW5mb3JtYXRpb24gd2l0aCB0aGUgbmV3IHNldHRpbmdzDQo+ ID4gLSAgTW1pb1dyaXRlMzIoSERMQ0RfUkVHX0ZCX0xJTkVfTEVOR1RILCBIUmVzICogQnl0ZXNQ ZXJQaXhlbCk7DQo+ID4gLSAgTW1pb1dyaXRlMzIoSERMQ0RfUkVHX0ZCX0xJTkVfUElUQ0gsICBI UmVzICogQnl0ZXNQZXJQaXhlbCk7DQo+ID4gLSAgTW1pb1dyaXRlMzIoSERMQ0RfUkVHX0ZCX0xJ TkVfQ09VTlQsICBWUmVzIC0gMSk7DQo+ID4gKyAgTW1pb1dyaXRlMzIgKEhETENEX1JFR19GQl9M SU5FX0xFTkdUSCwgSFJlcyAqIEJ5dGVzUGVyUGl4ZWwpOw0KPiA+ICsgIE1taW9Xcml0ZTMyIChI RExDRF9SRUdfRkJfTElORV9QSVRDSCwgIEhSZXMgKiBCeXRlc1BlclBpeGVsKTsNCj4gPiArICBN bWlvV3JpdGUzMiAoSERMQ0RfUkVHX0ZCX0xJTkVfQ09VTlQsICBWUmVzIC0gMSk7DQo+ID4NCj4g PiAgICAvLyBTZXQgdGhlIHZlcnRpY2FsIHRpbWluZyBpbmZvcm1hdGlvbg0KPiA+IC0gIE1taW9X cml0ZTMyKEhETENEX1JFR19WX1NZTkMsICAgICAgICAgVlN5bmMpOw0KPiA+IC0gIE1taW9Xcml0 ZTMyKEhETENEX1JFR19WX0JBQ0tfUE9SQ0gsICAgVkJhY2tQb3JjaCk7DQo+ID4gLSAgTW1pb1dy aXRlMzIoSERMQ0RfUkVHX1ZfREFUQSwgICAgICAgICBWUmVzIC0gMSk7DQo+ID4gLSAgTW1pb1dy aXRlMzIoSERMQ0RfUkVHX1ZfRlJPTlRfUE9SQ0gsICBWRnJvbnRQb3JjaCk7DQo+ID4gKyAgTW1p b1dyaXRlMzIgKEhETENEX1JFR19WX1NZTkMsICAgICAgICAgVlN5bmMpOw0KPiA+ICsgIE1taW9X cml0ZTMyIChIRExDRF9SRUdfVl9CQUNLX1BPUkNILCAgIFZCYWNrUG9yY2gpOw0KPiA+ICsgIE1t aW9Xcml0ZTMyIChIRExDRF9SRUdfVl9EQVRBLCAgICAgICAgIFZSZXMgLSAxKTsNCj4gPiArICBN bWlvV3JpdGUzMiAoSERMQ0RfUkVHX1ZfRlJPTlRfUE9SQ0gsICBWRnJvbnRQb3JjaCk7DQo+ID4N Cj4gPiAgICAvLyBTZXQgdGhlIGhvcml6b250YWwgdGltaW5nIGluZm9ybWF0aW9uDQo+ID4gLSAg TW1pb1dyaXRlMzIoSERMQ0RfUkVHX0hfU1lOQywgICAgICAgICBIU3luYyk7DQo+ID4gLSAgTW1p b1dyaXRlMzIoSERMQ0RfUkVHX0hfQkFDS19QT1JDSCwgICBIQmFja1BvcmNoKTsNCj4gPiAtICBN bWlvV3JpdGUzMihIRExDRF9SRUdfSF9EQVRBLCAgICAgICAgIEhSZXMgLSAxKTsNCj4gPiAtICBN bWlvV3JpdGUzMihIRExDRF9SRUdfSF9GUk9OVF9QT1JDSCwgIEhGcm9udFBvcmNoKTsNCj4gPiAr ICBNbWlvV3JpdGUzMiAoSERMQ0RfUkVHX0hfU1lOQywgICAgICAgICBIU3luYyk7DQo+ID4gKyAg TW1pb1dyaXRlMzIgKEhETENEX1JFR19IX0JBQ0tfUE9SQ0gsICAgSEJhY2tQb3JjaCk7DQo+ID4g KyAgTW1pb1dyaXRlMzIgKEhETENEX1JFR19IX0RBVEEsICAgICAgICAgSFJlcyAtIDEpOw0KPiA+ ICsgIE1taW9Xcml0ZTMyIChIRExDRF9SRUdfSF9GUk9OVF9QT1JDSCwgIEhGcm9udFBvcmNoKTsN Cj4gPg0KPiA+ICAgIC8vIEVuYWJsZSB0aGUgY29udHJvbGxlcg0KPiA+IC0gIE1taW9Xcml0ZTMy KEhETENEX1JFR19DT01NQU5ELCBIRExDRF9FTkFCTEUpOw0KPiA+ICsgIE1taW9Xcml0ZTMyIChI RExDRF9SRUdfQ09NTUFORCwgSERMQ0RfRU5BQkxFKTsNCj4gPg0KPiA+ICAgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gPiAgfQ0KPiA+DQo+ID4gIFZPSUQNCj4gPiAtTGNkU2h1dGRvd24gKA0KPiA+ IC0gIFZPSUQNCj4gPiAtICApDQo+ID4gK0xjZFNodXRkb3duIChWT0lEKQ0KPiA+ICB7DQo+ID4g ICAgLy8gRGlzYWJsZSB0aGUgY29udHJvbGxlcg0KPiA+ICAgIE1taW9Xcml0ZTMyIChIRExDRF9S RUdfQ09NTUFORCwgSERMQ0RfRElTQUJMRSk7DQo+ID4gIH0NCj4gPg0KPiA+ICBFRklfU1RBVFVT DQo+ID4gLUxjZElkZW50aWZ5ICgNCj4gPiAtICBWT0lEDQo+ID4gLSAgKQ0KPiA+ICtMY2RJZGVu dGlmeSAoVk9JRCkNCj4gPiAgew0KPiA+ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgfQ0K PiA+IGRpZmYgLS1naXQgYS9Bcm1QbGF0Zm9ybVBrZy9MaWJyYXJ5L1BMMTExTGNkL1BMMTExTGNk LmMNCj4gYi9Bcm1QbGF0Zm9ybVBrZy9MaWJyYXJ5L1BMMTExTGNkL1BMMTExTGNkLmMNCj4gPiBp bmRleA0KPiA5YjRhMDIwNDVhYjdjYTE3MGUwZDQzNjJlZTBlMmJjZjFkMjc1YmRiLi4xOWE1ZjNj NThjNjMxNzNmNjUyOGQNCj4gN2MxZWVkZjUxMDUzZGJlYWY3ZSAxMDA2NDQNCj4gPiAtLS0gYS9B cm1QbGF0Zm9ybVBrZy9MaWJyYXJ5L1BMMTExTGNkL1BMMTExTGNkLmMNCj4gPiArKysgYi9Bcm1Q bGF0Zm9ybVBrZy9MaWJyYXJ5L1BMMTExTGNkL1BMMTExTGNkLmMNCj4gPiBAQCAtMSw2ICsxLDYg QEANCj4gPiAtLyoqIEBmaWxlICBQTDExMUxjZC5jDQo+ID4gKy8qKiBAZmlsZQ0KPiA+DQo+ID4g LSAgQ29weXJpZ2h0IChjKSAyMDExLTIwMTIsIEFSTSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu PEJSPg0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAxMS0yMDE3LCBBUk0gTHRkLiBBbGwgcmlnaHRz IHJlc2VydmVkLjxCUj4NCj4gPg0KPiA+ICAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFu eWluZyBtYXRlcmlhbHMNCj4gPiAgICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVu ZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUNCj4gQlNEIExpY2Vuc2UNCj4gPiBA QCAtMTksMTcgKzE5LDEyIEBADQo+ID4NCj4gPiAgI2luY2x1ZGUgIlBMMTExTGNkLmgiDQo+ID4N Cj4gPiAtDQo+IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqDQo+ICoqKioqKioqKioqKg0KPiA+IC0gKg0KPiA+IC0gKiAgVGhpcyBmaWxl IGNvbnRhaW5zIGFsbCB0aGUgYml0cyBvZiB0aGUgUEwxMTEgdGhhdCBhcmUNCj4gPiAtICogIHBs YXRmb3JtIGluZGVwZW5kZW50Lg0KPiA+IC0gKg0KPiA+IC0NCj4gKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqKioqKiov DQo+ID4gKy8qKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBiaXRzIG9mIHRoZSBQTDExMSB0 aGF0IGFyZQ0KPiA+ICsgIHBsYXRmb3JtIGluZGVwZW5kZW50Lg0KPiA+DQo+ID4gKyoqLw0KPiA+ ICBFRklfU1RBVFVTDQo+ID4gLUxjZElkZW50aWZ5ICgNCj4gPiAtICBWT0lEDQo+ID4gLSAgKQ0K PiA+ICtMY2RJZGVudGlmeSAoVk9JRCkNCj4gPiAgew0KPiA+ICAgIERFQlVHICgoRUZJX0RfV0FS TiwgIlByb2JpbmcgSUQgcmVnaXN0ZXJzIGF0IDB4JWx4IGZvciBhIFBMMTExXG4iLA0KPiA+ICAg ICAgUEwxMTFfUkVHX0NMQ0RfUEVSSVBIX0lEXzApKTsNCj4gPiBAQCAtNTQsMTEgKzQ5LDExIEBA IExjZEluaXRpYWxpemUgKA0KPiA+ICAgICkNCj4gPiAgew0KPiA+ICAgIC8vIERlZmluZSBzdGFy dCBvZiB0aGUgVlJBTS4gVGhpcyBuZXZlciBjaGFuZ2VzIGZvciBhbnkgZ3JhcGhpY3MgbW9kZQ0K PiA+IC0gIE1taW9Xcml0ZTMyKFBMMTExX1JFR19MQ0RfVVBfQkFTRSwgKFVJTlQzMikgVnJhbUJh c2VBZGRyZXNzKTsNCj4gPiAtICBNbWlvV3JpdGUzMihQTDExMV9SRUdfTENEX0xQX0JBU0UsIDAp OyAvLyBXZSBhcmUgbm90IHVzaW5nIGENCj4gZG91YmxlIGJ1ZmZlcg0KPiA+ICsgIE1taW9Xcml0 ZTMyIChQTDExMV9SRUdfTENEX1VQX0JBU0UsIChVSU5UMzIpVnJhbUJhc2VBZGRyZXNzKTsNCj4g PiArICBNbWlvV3JpdGUzMiAoUEwxMTFfUkVHX0xDRF9MUF9CQVNFLCAwKTsgLy8gV2UgYXJlIG5v dCB1c2luZyBhDQo+IGRvdWJsZSBidWZmZXINCj4gPg0KPiA+ICAgIC8vIERpc2FibGUgYWxsIGlu dGVycnVwdHMgZnJvbSB0aGUgUEwxMTENCj4gPiAtICBNbWlvV3JpdGUzMihQTDExMV9SRUdfTENE X0lNU0MsIDApOw0KPiA+ICsgIE1taW9Xcml0ZTMyIChQTDExMV9SRUdfTENEX0lNU0MsIDApOw0K PiA+DQo+ID4gICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICB9DQo+ID4gQEAgLTgxLDQ1ICs3 Niw2MCBAQCBMY2RTZXRNb2RlICgNCj4gPiAgICBMQ0RfQlBQICAgICAgICAgICBMY2RCcHA7DQo+ ID4NCj4gPiAgICAvLyBTZXQgdGhlIHZpZGVvIG1vZGUgdGltaW5ncyBhbmQgb3RoZXIgcmVsZXZh bnQgaW5mb3JtYXRpb24NCj4gPiAtICBTdGF0dXMgPSBMY2RQbGF0Zm9ybUdldFRpbWluZ3MgKE1v ZGVOdW1iZXIsDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSFJlcywm SFN5bmMsJkhCYWNrUG9yY2gsJkhGcm9udFBvcmNoLA0KPiA+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJlZSZXMsJlZTeW5jLCZWQmFja1BvcmNoLCZWRnJvbnRQb3JjaCk7DQo+ ID4gKyAgU3RhdHVzID0gTGNkUGxhdGZvcm1HZXRUaW1pbmdzICgNCj4gPiArICAgICAgICAgICAg IE1vZGVOdW1iZXIsDQo+ID4gKyAgICAgICAgICAgICAmSFJlcywNCj4gPiArICAgICAgICAgICAg ICZIU3luYywNCj4gPiArICAgICAgICAgICAgICZIQmFja1BvcmNoLA0KPiA+ICsgICAgICAgICAg ICAgJkhGcm9udFBvcmNoLA0KPiA+ICsgICAgICAgICAgICAgJlZSZXMsDQo+ID4gKyAgICAgICAg ICAgICAmVlN5bmMsDQo+ID4gKyAgICAgICAgICAgICAmVkJhY2tQb3JjaCwNCj4gPiArICAgICAg ICAgICAgICZWRnJvbnRQb3JjaA0KPiA+ICsgICAgICAgICAgICAgKTsNCj4gPiAgICBBU1NFUlRf RUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+IC0gIGlmIChFRklfRVJST1IoIFN0YXR1cyApKSB7DQo+ ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICAgcmV0dXJuIEVGSV9ERVZJ Q0VfRVJST1I7DQo+ID4gICAgfQ0KPiA+DQo+ID4gLSAgU3RhdHVzID0gTGNkUGxhdGZvcm1HZXRC cHAgKE1vZGVOdW1iZXIsJkxjZEJwcCk7DQo+ID4gKyAgU3RhdHVzID0gTGNkUGxhdGZvcm1HZXRC cHAgKE1vZGVOdW1iZXIsICZMY2RCcHApOw0KPiA+ICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1 cyk7DQo+ID4gLSAgaWYgKEVGSV9FUlJPUiggU3RhdHVzICkpIHsNCj4gPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4gICAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gPiAg ICB9DQo+ID4NCj4gPiAgICAvLyBEaXNhYmxlIHRoZSBDTENEX0xjZEVuIGJpdA0KPiA+IC0gIExj ZENvbnRyb2wgPSBNbWlvUmVhZDMyKCBQTDExMV9SRUdfTENEX0NPTlRST0wpOw0KPiA+IC0gIE1t aW9Xcml0ZTMyKFBMMTExX1JFR19MQ0RfQ09OVFJPTCwgIExjZENvbnRyb2wgJiB+MSk7DQo+ID4g KyAgTGNkQ29udHJvbCA9IE1taW9SZWFkMzIgKFBMMTExX1JFR19MQ0RfQ09OVFJPTCk7DQo+ID4g KyAgTW1pb1dyaXRlMzIgKFBMMTExX1JFR19MQ0RfQ09OVFJPTCwgTGNkQ29udHJvbCAmIH4xKTsN Cj4gPg0KPiA+ICAgIC8vIFNldCBUaW1pbmdzDQo+ID4gLSAgTW1pb1dyaXRlMzIgKFBMMTExX1JF R19MQ0RfVElNSU5HXzAsDQo+IEhPUl9BWElTX1BBTkVMKEhCYWNrUG9yY2gsIEhGcm9udFBvcmNo LCBIU3luYywgSFJlcykpOw0KPiA+IC0gIE1taW9Xcml0ZTMyIChQTDExMV9SRUdfTENEX1RJTUlO R18xLA0KPiBWRVJfQVhJU19QQU5FTChWQmFja1BvcmNoLCBWRnJvbnRQb3JjaCwgVlN5bmMsIFZS ZXMpKTsNCj4gPiAtICBNbWlvV3JpdGUzMiAoUEwxMTFfUkVHX0xDRF9USU1JTkdfMiwgQ0xLX1NJ R19QT0xBUklUWShIUmVzKSk7DQo+ID4gKyAgTW1pb1dyaXRlMzIgKA0KPiA+ICsgICAgUEwxMTFf UkVHX0xDRF9USU1JTkdfMCwNCj4gPiArICAgIEhPUl9BWElTX1BBTkVMIChIQmFja1BvcmNoLCBI RnJvbnRQb3JjaCwgSFN5bmMsIEhSZXMpDQo+ID4gKyAgICApOw0KPiA+ICsNCj4gPiArICBNbWlv V3JpdGUzMiAoDQo+ID4gKyAgICBQTDExMV9SRUdfTENEX1RJTUlOR18xLA0KPiA+ICsgICAgVkVS X0FYSVNfUEFORUwgKFZCYWNrUG9yY2gsIFZGcm9udFBvcmNoLCBWU3luYywgVlJlcykNCj4gPiAr ICAgICk7DQo+ID4gKw0KPiA+ICsgIE1taW9Xcml0ZTMyIChQTDExMV9SRUdfTENEX1RJTUlOR18y LCBDTEtfU0lHX1BPTEFSSVRZIChIUmVzKSk7DQo+ID4gICAgTW1pb1dyaXRlMzIgKFBMMTExX1JF R19MQ0RfVElNSU5HXzMsIDApOw0KPiA+DQo+ID4gICAgLy8gUEwxMTFfUkVHX0xDRF9DT05UUk9M DQo+ID4gLSAgTGNkQ29udHJvbCA9IFBMMTExX0NUUkxfTENEX0VOIHwgUEwxMTFfQ1RSTF9MQ0Rf QlBQKExjZEJwcCkgfA0KPiBQTDExMV9DVFJMX0xDRF9URlQgfCBQTDExMV9DVFJMX0JHUjsNCj4g PiAtICBNbWlvV3JpdGUzMihQTDExMV9SRUdfTENEX0NPTlRST0wsICBMY2RDb250cm9sKTsNCj4g PiArICBMY2RDb250cm9sID0gUEwxMTFfQ1RSTF9MQ0RfRU4gfCBQTDExMV9DVFJMX0xDRF9CUFAg KExjZEJwcCkNCj4gPiArICAgICAgICAgICAgICAgfCBQTDExMV9DVFJMX0xDRF9URlQgfCBQTDEx MV9DVFJMX0JHUjsNCj4gPiArICBNbWlvV3JpdGUzMiAoUEwxMTFfUkVHX0xDRF9DT05UUk9MLCBM Y2RDb250cm9sKTsNCj4gPg0KPiA+ICAgIC8vIFR1cm4gb24gcG93ZXIgdG8gdGhlIExDRCBQYW5l bA0KPiA+ICAgIExjZENvbnRyb2wgfD0gUEwxMTFfQ1RSTF9MQ0RfUFdSOw0KPiA+IC0gIE1taW9X cml0ZTMyKFBMMTExX1JFR19MQ0RfQ09OVFJPTCwgIExjZENvbnRyb2wpOw0KPiA+ICsgIE1taW9X cml0ZTMyIChQTDExMV9SRUdfTENEX0NPTlRST0wsIExjZENvbnRyb2wpOw0KPiA+DQo+ID4gICAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICB9DQo+ID4NCj4gPiAgVk9JRA0KPiA+IC1MY2RTaHV0 ZG93biAoDQo+ID4gLSAgVk9JRA0KPiA+IC0gICkNCj4gPiArTGNkU2h1dGRvd24gKFZPSUQpDQo+ ID4gIHsNCj4gPiAgICAvLyBEaXNhYmxlIHRoZSBjb250cm9sbGVyDQo+ID4gICAgTW1pb0FuZDMy IChQTDExMV9SRUdfTENEX0NPTlRST0wsIH5QTDExMV9DVFJMX0xDRF9FTik7DQo+ID4gLS0NCj4g PiBHdWlkKCJDRTE2NTY2OS0zRUYzLTQ5M0YtQjg1RC02MTkwRUU1Qjk3NTkiKQ0KPiA+DQo=