From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.2 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 41393C433E0 for ; Mon, 4 Jan 2021 08:52:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E1374207BC for ; Mon, 4 Jan 2021 08:52:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726248AbhADIwJ (ORCPT ); Mon, 4 Jan 2021 03:52:09 -0500 Received: from mailgw01.mediatek.com ([210.61.82.183]:48510 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726029AbhADIwI (ORCPT ); Mon, 4 Jan 2021 03:52:08 -0500 X-UUID: 082eec126d524ca9a2d5342b48df1fcc-20210104 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=u3SIJO4I0PNzwf7IE77OX2c6+YmqxZy6mmhtVarNwY8=; b=ip9Hu1cyXpt/e2HWFbFc81jAQnX234azpU6tcFdYUQRqqvfPLYsMSpoL3I83bXG7JEdQdKsLUFWTyBLZTALODMoa1l3NgDYUgsS8PCA2FGdlnPh4RW4IdN38lEmSet04lxTyAjeZulO08kY6Y96haCiilbQH6X7MVWqBGrtu43E=; X-UUID: 082eec126d524ca9a2d5342b48df1fcc-20210104 Received: from mtkcas10.mediatek.inc [(172.21.101.39)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.14 Build 0819 with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 226369278; Mon, 04 Jan 2021 16:51:07 +0800 Received: from mtkcas10.mediatek.inc (172.21.101.39) by mtkmbs02n1.mediatek.inc (172.21.101.77) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 4 Jan 2021 16:51:06 +0800 Received: from [172.21.77.4] (172.21.77.4) by mtkcas10.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 4 Jan 2021 16:51:06 +0800 Message-ID: <1609750266.20758.40.camel@mtksdaap41> Subject: Re: [PATCH v10 3/7] [v10, 3/7]: soc: mediatek: SVS: introduce MTK SVS engine From: Roger Lu To: Nicolas Boichat CC: Matthias Brugger , Enric Balletbo Serra , Kevin Hilman , Rob Herring , Nicolas Boichat , Stephen Boyd , Philipp Zabel , Mark Rutland , Nishanth Menon , Angus Lin , Devicetree List , "open list:THERMAL" , lkml , Xiaoqing Liu , YT Lee , Fan Chen , "moderated list:ARM/Mediatek SoC support" , "HenryC Chen" , Charles Yang , linux-arm Mailing List Date: Mon, 4 Jan 2021 16:51:06 +0800 In-Reply-To: References: <20201227105449.11452-1-roger.lu@mediatek.com> <20201227105449.11452-4-roger.lu@mediatek.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-MTK: N Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org DQpIaSBOaWNvbGFzLA0KDQpUaGFua3MgZm9yIGFsbCB0aGUgYWR2aWNlcy4NCg0KT24gVGh1LCAy MDIwLTEyLTMxIGF0IDEwOjEwICswODAwLCBOaWNvbGFzIEJvaWNoYXQgd3JvdGU6DQo+IE9uIFN1 biwgRGVjIDI3LCAyMDIwIGF0IDY6NTUgUE0gUm9nZXIgTHUgPHJvZ2VyLmx1QG1lZGlhdGVrLmNv bT4gd3JvdGU6DQo+ID4NCj4gPiBUaGUgU21hcnQgVm9sdGFnZSBTY2FsaW5nKFNWUykgZW5naW5l IGlzIGEgcGllY2Ugb2YgaGFyZHdhcmUNCj4gPiB3aGljaCBjYWxjdWxhdHMgc3VpdGFibGUgU1ZT IGJhbmsgdm9sdGFnZXMgdG8gT1BQIHZvbHRhZ2UgdGFibGUuDQo+IA0KPiBjYWxjdWxhdGVzDQoN Ck9rLCBJJ2xsIGZpeCBpdC4gVGhhbmtzLg0KDQo+IA0KPiA+IFRoZW4sIERWRlMgZHJpdmVyIGNv dWxkIGFwcGx5IHRob3NlIFNWUyBiYW5rIHZvbHRhZ2VzIHRvIFBNSUMvQnVjaw0KPiA+IHdoZW4g cmVjZWl2aW5nIE9QUF9FVkVOVF9BREpVU1RfVk9MVEFHRS4NCj4gPg0KPiA+IFNpZ25lZC1vZmYt Ynk6IFJvZ2VyIEx1IDxyb2dlci5sdUBtZWRpYXRlay5jb20+DQo+ID4gLS0tDQo+ID4gIGRyaXZl cnMvc29jL21lZGlhdGVrL0tjb25maWcgICB8ICAgMTAgKw0KPiA+ICBkcml2ZXJzL3NvYy9tZWRp YXRlay9NYWtlZmlsZSAgfCAgICAxICsNCj4gPiAgZHJpdmVycy9zb2MvbWVkaWF0ZWsvbXRrLXN2 cy5jIHwgMTc0OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICAzIGZpbGVz IGNoYW5nZWQsIDE3NTkgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9zb2MvbWVkaWF0ZWsvbXRrLXN2cy5jDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zb2MvbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvc29jL21lZGlhdGVrL0tjb25maWcNCj4g PiBpbmRleCA1OWE1NmNkNzkwZWMuLmYzM2RhMjVmODMzNiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2 ZXJzL3NvYy9tZWRpYXRlay9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy9zb2MvbWVkaWF0ZWsv S2NvbmZpZw0KPiA+IEBAIC01MSw0ICs1MSwxNCBAQCBjb25maWcgTVRLX01NU1lTDQo+ID4gICAg ICAgICAgIFNheSB5ZXMgaGVyZSB0byBhZGQgc3VwcG9ydCBmb3IgdGhlIE1lZGlhVGVrIE11bHRp bWVkaWENCj4gPiAgICAgICAgICAgU3Vic3lzdGVtIChNTVNZUykuDQo+ID4NCj4gPiArY29uZmln IE1US19TVlMNCj4gPiArICAgICAgIHRyaXN0YXRlICJNZWRpYVRlayBTbWFydCBWb2x0YWdlIFNj YWxpbmcoU1ZTKSINCj4gPiArICAgICAgIGRlcGVuZHMgb24gTVRLX0VGVVNFICYmIE5WTUVNDQo+ ID4gKyAgICAgICBoZWxwDQo+ID4gKyAgICAgICAgIFRoZSBTbWFydCBWb2x0YWdlIFNjYWxpbmco U1ZTKSBlbmdpbmUgaXMgYSBwaWVjZSBvZiBoYXJkd2FyZQ0KPiA+ICsgICAgICAgICB3aGljaCBo YXMgc2V2ZXJhbCBjb250cm9sbGVycyhiYW5rcykgZm9yIGNhbGN1bGF0aW5nIHN1aXRhYmxlDQo+ ID4gKyAgICAgICAgIHZvbHRhZ2UgdG8gZGlmZmVyZW50IHBvd2VyIGRvbWFpbnMoQ1BVL0dQVS9D Q0kpIGFjY29yZGluZyB0bw0KPiA+ICsgICAgICAgICBjaGlwIHByb2Nlc3MgY29ybmVyLCB0ZW1w ZXJhdHVyZXMgYW5kIG90aGVyIGZhY3RvcnMuIFRoZW4gRFZGUw0KPiA+ICsgICAgICAgICBkcml2 ZXIgY291bGQgYXBwbHkgU1ZTIGJhbmsgdm9sdGFnZSB0byBQTUlDL0J1Y2suDQo+ID4gKw0KPiA+ ICBlbmRtZW51DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL21lZGlhdGVrL01ha2VmaWxl IGIvZHJpdmVycy9zb2MvbWVkaWF0ZWsvTWFrZWZpbGUNCj4gPiBpbmRleCAwMWY5Zjg3MzYzNGEu LmUxMGYyY2Q4NzUxNCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3NvYy9tZWRpYXRlay9NYWtl ZmlsZQ0KPiA+ICsrKyBiL2RyaXZlcnMvc29jL21lZGlhdGVrL01ha2VmaWxlDQo+ID4gQEAgLTQs MyArNCw0IEBAIG9iai0kKENPTkZJR19NVEtfSU5GUkFDRkcpICs9IG10ay1pbmZyYWNmZy5vDQo+ ID4gIG8tJChDT05GSUdfTVRLX1BNSUNfV1JBUCkgKz0gbXRrLXBtaWMtd3JhcC5vDQo+ID4gIG9i ai0kKENPTkZJR19NVEtfU0NQU1lTKSArPSBtdGstc2Nwc3lzLm8NCj4gPiAgb2JqLSQoQ09ORklH X01US19NTVNZUykgKz0gbXRrLW1tc3lzLm8NCj4gPiArb2JqLSQoQ09ORklHX01US19TVlMpICs9 IG10ay1zdnMubw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9tZWRpYXRlay9tdGstc3Zz LmMgYi9kcml2ZXJzL3NvYy9tZWRpYXRlay9tdGstc3ZzLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMGVmZWZiNDg4MzlkDQo+ID4gLS0tIC9kZXYv bnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvc29jL21lZGlhdGVrL210ay1zdnMuYw0KPiA+IEBAIC0w LDAgKzEsMTc0OCBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5DQo+ID4gKy8qDQo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuDQo+ ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2JpdHMuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPg0KPiA+ICsjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPg0KPiA+ICsj aW5jbHVkZSA8bGludXgvbnZtZW0tY29uc3VtZXIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29m X2FkZHJlc3MuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPg0KPiA+ICsjaW5jbHVk ZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rl dmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcG1fZG9tYWluLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9wbV9vcHAuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX3Fvcy5oPg0KPiA+ICsj aW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcmVndWxh dG9yL2NvbnN1bWVyLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvc2xhYi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L3RoZXJtYWwuaD4NCj4gPiArDQo+ID4gKy8qIHN2cyBiYW5rIDEt bGluZSBzdyBpZCAqLw0KPiA+ICsjZGVmaW5lIFNWU0JfQ1BVX0xJVFRMRSAgICAgICAgICAgICAg ICAgICAgICAgIEJJVCgwKQ0KPiA+ICsjZGVmaW5lIFNWU0JfQ1BVX0JJRyAgICAgICAgICAgICAg ICAgICBCSVQoMSkNCj4gPiArI2RlZmluZSBTVlNCX0NDSSAgICAgICAgICAgICAgICAgICAgICAg QklUKDIpDQo+ID4gKyNkZWZpbmUgU1ZTQl9HUFUgICAgICAgICAgICAgICAgICAgICAgIEJJVCgz KQ0KPiA+ICsNCj4gPiArLyogc3ZzIGJhbmsgbW9kZSBzdXBwb3J0ICovDQo+ID4gKyNkZWZpbmUg U1ZTQl9NT0RFX0FMTF9ESVNBQkxFICAgICAgICAgIDANCj4gPiArI2RlZmluZSBTVlNCX01PREVf SU5JVDAxICAgICAgICAgICAgICAgQklUKDEpDQo+ID4gKyNkZWZpbmUgU1ZTQl9NT0RFX0lOSVQw MiAgICAgICAgICAgICAgIEJJVCgyKQ0KPiA+ICsjZGVmaW5lIFNWU0JfTU9ERV9NT04gICAgICAg ICAgICAgICAgICBCSVQoMykNCj4gPiArDQo+ID4gKy8qIHN2cyBiYW5rIGluaXQwMSBjb25kaXRp b24gKi8NCj4gPiArI2RlZmluZSBTVlNCX0lOSVQwMV9WT0xUX0lHTk9SRSAgICAgICAgICAgICAg ICBCSVQoMSkNCj4gPiArI2RlZmluZSBTVlNCX0lOSVQwMV9WT0xUX0lOQ19PTkxZICAgICAgQklU KDIpDQo+ID4gKyNkZWZpbmUgU1ZTQl9JTklUMDFfQ0xLX0VOICAgICAgICAgICAgIEJJVCgzMSkN Cj4gPiArDQo+ID4gKy8qIHN2cyBiYW5rIGNvbW1vbiBzZXR0aW5nICovDQo+ID4gKyNkZWZpbmUg U1ZTQl9UWk9ORV9ISUdIX1RFTVBfTUFYICAgICAgIFUzMl9NQVgNCj4gPiArI2RlZmluZSBTVlNC X1JVTkNPTkZJR19ERUZBVUxUICAgICAgICAgMHg4MDAwMDAwMA0KPiA+ICsjZGVmaW5lIFNWU0Jf RENfU0lHTkVEX0JJVCAgICAgICAgICAgICAweDgwMDANCj4gPiArI2RlZmluZSBTVlNCX0lOVEVO X0lOSVQweCAgICAgICAgICAgICAgMHgwMDAwNWYwMQ0KPiA+ICsjZGVmaW5lIFNWU0JfSU5URU5f TU9OVk9QRU4gICAgICAgICAgICAweDAwZmYwMDAwDQo+ID4gKyNkZWZpbmUgU1ZTQl9FTl9PRkYg ICAgICAgICAgICAgICAgICAgIDB4MA0KPiA+ICsjZGVmaW5lIFNWU0JfRU5fTUFTSyAgICAgICAg ICAgICAgICAgICAweDcNCj4gPiArI2RlZmluZSBTVlNCX0VOX0lOSVQwMSAgICAgICAgICAgICAg ICAgMHgxDQo+ID4gKyNkZWZpbmUgU1ZTQl9FTl9JTklUMDIgICAgICAgICAgICAgICAgIDB4NQ0K PiA+ICsjZGVmaW5lIFNWU0JfRU5fTU9OICAgICAgICAgICAgICAgICAgICAweDINCj4gPiArI2Rl ZmluZSBTVlNCX0lOVFNUU19NT05WT1AgICAgICAgICAgICAgMHgwMGZmMDAwMA0KPiA+ICsjZGVm aW5lIFNWU0JfSU5UU1RTX0NPTVBMRVRFICAgICAgICAgICAweDENCj4gPiArI2RlZmluZSBTVlNC X0lOVFNUU19DTEVBTiAgICAgICAgICAgICAgMHgwMGZmZmZmZg0KPiA+ICsNCj4gPiArc3RhdGlj IERFRklORV9TUElOTE9DSyhtdGtfc3ZzX2xvY2spOw0KPiA+ICsNCj4gPiArLyoNCj4gPiArICog ZW51bSBzdnNiX3BoYXNlIC0gc3ZzIGJhbmsgcGhhc2UgZW51bWVyYXRpb24NCj4gPiArICogQFNW U0JfUEhBU0VfSU5JVDAxOiBiYXNpYyBpbml0IGZvciBzdnMgYmFuaw0KPiA+ICsgKiBAU1ZTQl9Q SEFTRV9JTklUMDI6IHN2cyBiYW5rIGNhbiBwcm92aWRlIHZvbHRhZ2VzDQo+ID4gKyAqIEBTVlNC X1BIQVNFX01PTjogc3ZzIGJhbmsgY2FuIHByb3ZpZGUgdm9sdGFnZXMgd2l0aCB0aGVybWFsIGVm ZmVjdA0KPiA+ICsgKiBAU1ZTQl9QSEFTRV9FUlJPUjogc3ZzIGJhbmsgZW5jb3V0ZXJzIHVuZXhw ZWN0ZWQgY29uZGl0aW9uDQo+IA0KPiBlbmNvdW50ZXJzDQoNCk9rLCBJJ2xsIGZpeCBpdC4gVGhh bmtzLg0KDQo+IA0KPiA+ICsgKg0KPiA+ICsgKiBFYWNoIHN2cyBiYW5rIGhhcyBpdHMgb3duIGlu ZGVwZW5kZW50IHBoYXNlLiBXZSBlbmFibGUgZWFjaCBzdnMgYmFuayBieQ0KPiA+ICsgKiBydW5u aW5nIHRoZWlyIHBoYXNlIG9yZGVybHkuIEhvd2V2ZXIsIFdoZW4gc3ZzIGJhbmsgZWNub3VudGVy cyB1bmV4cGVjdGVkDQo+IA0KPiBlbmNvdW50ZXJzDQoNCk9rLCBJJ2xsIGZpeCBpdC4gVGhhbmtz Lg0KDQo+IA0KPiA+ICsgKiBjb25kaXRpb24sIGl0IHdpbGwgZmlyZSBhbiBpcnEgKFBIQVNFX0VS Uk9SKSB0byBpbmZvcm0gc3ZzIHNvZnR3YXJlLg0KPiA+ICsgKg0KPiA+ICsgKiBzdnMgYmFuayBn ZW5lcmFsIHBoYXNlLWVuYWJsZWQgb3JkZXI6DQo+ID4gKyAqIFNWU0JfUEhBU0VfSU5JVDAxIC0+ IFNWU0JfUEhBU0VfSU5JVDAyIC0+IFNWU0JfUEhBU0VfTU9ODQo+ID4gKyAqLw0KPiA+ICtlbnVt IHN2c2JfcGhhc2Ugew0KPiA+ICsgICAgICAgU1ZTQl9QSEFTRV9JTklUMDEgPSAwLA0KPiA+ICsg ICAgICAgU1ZTQl9QSEFTRV9JTklUMDIsDQo+ID4gKyAgICAgICBTVlNCX1BIQVNFX01PTiwNCj4g PiArICAgICAgIFNWU0JfUEhBU0VfRVJST1IsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtlbnVtIHN2 c19yZWdfaW5kZXggew0KPiA+ICsgICAgICAgREVTQ0hBUiA9IDAsDQo+ID4gKyAgICAgICBURU1Q Q0hBUiwNCj4gPiArICAgICAgIERFVENIQVIsDQo+ID4gKyAgICAgICBBR0VDSEFSLA0KPiA+ICsg ICAgICAgRENDT05GSUcsDQo+ID4gKyAgICAgICBBR0VDT05GSUcsDQo+ID4gKyAgICAgICBGUkVR UENUMzAsDQo+ID4gKyAgICAgICBGUkVRUENUNzQsDQo+ID4gKyAgICAgICBMSU1JVFZBTFMsDQo+ ID4gKyAgICAgICBWQk9PVCwNCj4gPiArICAgICAgIERFVFdJTkRPVywNCj4gPiArICAgICAgIENP TkZJRywNCj4gPiArICAgICAgIFRTQ0FMQ1MsDQo+ID4gKyAgICAgICBSVU5DT05GSUcsDQo+ID4g KyAgICAgICBTVlNFTiwNCj4gPiArICAgICAgIElOSVQyVkFMUywNCj4gPiArICAgICAgIERDVkFM VUVTLA0KPiA+ICsgICAgICAgQUdFVkFMVUVTLA0KPiA+ICsgICAgICAgVk9QMzAsDQo+ID4gKyAg ICAgICBWT1A3NCwNCj4gPiArICAgICAgIFRFTVAsDQo+ID4gKyAgICAgICBJTlRTVFMsDQo+ID4g KyAgICAgICBJTlRTVFNSQVcsDQo+ID4gKyAgICAgICBJTlRFTiwNCj4gPiArICAgICAgIENIS0lO VCwNCj4gPiArICAgICAgIENIS1NISUZULA0KPiA+ICsgICAgICAgU1RBVFVTLA0KPiA+ICsgICAg ICAgVkRFU0lHTjMwLA0KPiA+ICsgICAgICAgVkRFU0lHTjc0LA0KPiA+ICsgICAgICAgRFZUMzAs DQo+ID4gKyAgICAgICBEVlQ3NCwNCj4gPiArICAgICAgIEFHRUNPVU5ULA0KPiA+ICsgICAgICAg U01TVEFURTAsDQo+ID4gKyAgICAgICBTTVNUQVRFMSwNCj4gPiArICAgICAgIENUTDAsDQo+ID4g KyAgICAgICBERVNERVRTRUMsDQo+ID4gKyAgICAgICBURU1QQUdFU0VDLA0KPiA+ICsgICAgICAg Q1RSTFNQQVJFMCwNCj4gPiArICAgICAgIENUUkxTUEFSRTEsDQo+ID4gKyAgICAgICBDVFJMU1BB UkUyLA0KPiA+ICsgICAgICAgQ1RSTFNQQVJFMywNCj4gPiArICAgICAgIENPUkVTRUwsDQo+ID4g KyAgICAgICBUSEVSTUlOVFNULA0KPiA+ICsgICAgICAgSU5UU1QsDQo+ID4gKyAgICAgICBUSFNU QUdFMFNULA0KPiA+ICsgICAgICAgVEhTVEFHRTFTVCwNCj4gPiArICAgICAgIFRIU1RBR0UyU1Qs DQo+ID4gKyAgICAgICBUSEFIQlNUMCwNCj4gPiArICAgICAgIFRIQUhCU1QxLA0KPiA+ICsgICAg ICAgU1BBUkUwLA0KPiA+ICsgICAgICAgU1BBUkUxLA0KPiA+ICsgICAgICAgU1BBUkUyLA0KPiA+ ICsgICAgICAgU1BBUkUzLA0KPiA+ICsgICAgICAgVEhTTFBFVkVCLA0KPiA+ICsgICAgICAgcmVn X251bSwNCj4gDQo+IFdoYXQgZG8geW91IG5lZWQgcmVnX251bSBmb3I/IE1heWJlIHJlbW92ZSBp dD8NCj4gDQo+IElmIHlvdSBuZWVkIGl0LCBpdCBzaG91bGQgcHJvYmFibHkgYmUgbmFtZWQgU1ZT X1JFR19OVU0uDQoNCk9oLCBJIHdpbGwgbW92ZSBpdCBpbnRvIFNWUyBkZWJ1ZyBwYXRjaCBhbmQg bmFtZSBpdCBhcyBTVlNfUkVHX05VTS4NClRoYW5rcy4NCg0KPiANCj4gPiArfTsNCj4gPiArDQo+ ID4gK3N0YXRpYyBjb25zdCB1MzIgc3ZzX3JlZ3NfdjJbXSA9IHsNCj4gPiArICAgICAgIFtERVND SEFSXSAgICAgICAgICAgICAgID0gMHhjMDAsDQo+ID4gKyAgICAgICBbVEVNUENIQVJdICAgICAg ICAgICAgICA9IDB4YzA0LA0KPiA+ICsgICAgICAgW0RFVENIQVJdICAgICAgICAgICAgICAgPSAw eGMwOCwNCj4gPiArICAgICAgIFtBR0VDSEFSXSAgICAgICAgICAgICAgID0gMHhjMGMsDQo+ID4g KyAgICAgICBbRENDT05GSUddICAgICAgICAgICAgICA9IDB4YzEwLA0KPiA+ICsgICAgICAgW0FH RUNPTkZJR10gICAgICAgICAgICAgPSAweGMxNCwNCj4gPiArICAgICAgIFtGUkVRUENUMzBdICAg ICAgICAgICAgID0gMHhjMTgsDQo+ID4gKyAgICAgICBbRlJFUVBDVDc0XSAgICAgICAgICAgICA9 IDB4YzFjLA0KPiA+ICsgICAgICAgW0xJTUlUVkFMU10gICAgICAgICAgICAgPSAweGMyMCwNCj4g PiArICAgICAgIFtWQk9PVF0gICAgICAgICAgICAgICAgID0gMHhjMjQsDQo+ID4gKyAgICAgICBb REVUV0lORE9XXSAgICAgICAgICAgICA9IDB4YzI4LA0KPiA+ICsgICAgICAgW0NPTkZJR10gICAg ICAgICAgICAgICAgPSAweGMyYywNCj4gPiArICAgICAgIFtUU0NBTENTXSAgICAgICAgICAgICAg ID0gMHhjMzAsDQo+ID4gKyAgICAgICBbUlVOQ09ORklHXSAgICAgICAgICAgICA9IDB4YzM0LA0K PiA+ICsgICAgICAgW1NWU0VOXSAgICAgICAgICAgICAgICAgPSAweGMzOCwNCj4gPiArICAgICAg IFtJTklUMlZBTFNdICAgICAgICAgICAgID0gMHhjM2MsDQo+ID4gKyAgICAgICBbRENWQUxVRVNd ICAgICAgICAgICAgICA9IDB4YzQwLA0KPiA+ICsgICAgICAgW0FHRVZBTFVFU10gICAgICAgICAg ICAgPSAweGM0NCwNCj4gPiArICAgICAgIFtWT1AzMF0gICAgICAgICAgICAgICAgID0gMHhjNDgs DQo+ID4gKyAgICAgICBbVk9QNzRdICAgICAgICAgICAgICAgICA9IDB4YzRjLA0KPiA+ICsgICAg ICAgW1RFTVBdICAgICAgICAgICAgICAgICAgPSAweGM1MCwNCj4gPiArICAgICAgIFtJTlRTVFNd ICAgICAgICAgICAgICAgID0gMHhjNTQsDQo+ID4gKyAgICAgICBbSU5UU1RTUkFXXSAgICAgICAg ICAgICA9IDB4YzU4LA0KPiA+ICsgICAgICAgW0lOVEVOXSAgICAgICAgICAgICAgICAgPSAweGM1 YywNCj4gPiArICAgICAgIFtDSEtJTlRdICAgICAgICAgICAgICAgID0gMHhjNjAsDQo+ID4gKyAg ICAgICBbQ0hLU0hJRlRdICAgICAgICAgICAgICA9IDB4YzY0LA0KPiA+ICsgICAgICAgW1NUQVRV U10gICAgICAgICAgICAgICAgPSAweGM2OCwNCj4gPiArICAgICAgIFtWREVTSUdOMzBdICAgICAg ICAgICAgID0gMHhjNmMsDQo+ID4gKyAgICAgICBbVkRFU0lHTjc0XSAgICAgICAgICAgICA9IDB4 YzcwLA0KPiA+ICsgICAgICAgW0RWVDMwXSAgICAgICAgICAgICAgICAgPSAweGM3NCwNCj4gPiAr ICAgICAgIFtEVlQ3NF0gICAgICAgICAgICAgICAgID0gMHhjNzgsDQo+ID4gKyAgICAgICBbQUdF Q09VTlRdICAgICAgICAgICAgICA9IDB4YzdjLA0KPiA+ICsgICAgICAgW1NNU1RBVEUwXSAgICAg ICAgICAgICAgPSAweGM4MCwNCj4gPiArICAgICAgIFtTTVNUQVRFMV0gICAgICAgICAgICAgID0g MHhjODQsDQo+ID4gKyAgICAgICBbQ1RMMF0gICAgICAgICAgICAgICAgICA9IDB4Yzg4LA0KPiA+ ICsgICAgICAgW0RFU0RFVFNFQ10gICAgICAgICAgICAgPSAweGNlMCwNCj4gPiArICAgICAgIFtU RU1QQUdFU0VDXSAgICAgICAgICAgID0gMHhjZTQsDQo+ID4gKyAgICAgICBbQ1RSTFNQQVJFMF0g ICAgICAgICAgICA9IDB4Y2YwLA0KPiA+ICsgICAgICAgW0NUUkxTUEFSRTFdICAgICAgICAgICAg PSAweGNmNCwNCj4gPiArICAgICAgIFtDVFJMU1BBUkUyXSAgICAgICAgICAgID0gMHhjZjgsDQo+ ID4gKyAgICAgICBbQ1RSTFNQQVJFM10gICAgICAgICAgICA9IDB4Y2ZjLA0KPiA+ICsgICAgICAg W0NPUkVTRUxdICAgICAgICAgICAgICAgPSAweGYwMCwNCj4gPiArICAgICAgIFtUSEVSTUlOVFNU XSAgICAgICAgICAgID0gMHhmMDQsDQo+ID4gKyAgICAgICBbSU5UU1RdICAgICAgICAgICAgICAg ICA9IDB4ZjA4LA0KPiA+ICsgICAgICAgW1RIU1RBR0UwU1RdICAgICAgICAgICAgPSAweGYwYywN Cj4gPiArICAgICAgIFtUSFNUQUdFMVNUXSAgICAgICAgICAgID0gMHhmMTAsDQo+ID4gKyAgICAg ICBbVEhTVEFHRTJTVF0gICAgICAgICAgICA9IDB4ZjE0LA0KPiA+ICsgICAgICAgW1RIQUhCU1Qw XSAgICAgICAgICAgICAgPSAweGYxOCwNCj4gPiArICAgICAgIFtUSEFIQlNUMV0gICAgICAgICAg ICAgID0gMHhmMWMsDQo+ID4gKyAgICAgICBbU1BBUkUwXSAgICAgICAgICAgICAgICA9IDB4ZjIw LA0KPiA+ICsgICAgICAgW1NQQVJFMV0gICAgICAgICAgICAgICAgPSAweGYyNCwNCj4gPiArICAg ICAgIFtTUEFSRTJdICAgICAgICAgICAgICAgID0gMHhmMjgsDQo+ID4gKyAgICAgICBbU1BBUkUz XSAgICAgICAgICAgICAgICA9IDB4ZjJjLA0KPiA+ICsgICAgICAgW1RIU0xQRVZFQl0gICAgICAg ICAgICAgPSAweGYzMCwNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIHN0cnVjdCB0 aGVybWFsX3BhcmFtZXRlciAtIFRoaXMgaXMgZm9yIHN0b3JpbmcgdGhlcm1hbCBlZnVzZSBkYXRh Lg0KPiA+ICsgKiBXZSBjYWNsdWF0ZSB0aGVybWFsIGVmdXNlIGRhdGEgdG8gcHJvZHVjZSAibXRz IiBhbmQgImJ0cyIgZm9yDQo+IA0KPiBjYWxjdWxhdGUNCg0KT2ssIEknbGwgZml4IGl0LiBUaGFu a3MuDQoNCj4gDQo+ID4gKyAqIHN2cyBiYW5rIG1vbiBtb2RlLg0KPiA+ICsgKi8NCj4gPiArc3Ry dWN0IHRoZXJtYWxfcGFyYW1ldGVyIHsNCj4gPiArICAgICAgIGludCBhZGNfZ2VfdDsNCj4gPiAr ICAgICAgIGludCBhZGNfb2VfdDsNCj4gPiArICAgICAgIGludCBnZTsNCj4gPiArICAgICAgIGlu dCBvZTsNCj4gPiArICAgICAgIGludCBnYWluOw0KPiA+ICsgICAgICAgaW50IG9fdnRzYWJiOw0K PiA+ICsgICAgICAgaW50IG9fdnRzbWN1MTsNCj4gPiArICAgICAgIGludCBvX3Z0c21jdTI7DQo+ ID4gKyAgICAgICBpbnQgb192dHNtY3UzOw0KPiA+ICsgICAgICAgaW50IG9fdnRzbWN1NDsNCj4g PiArICAgICAgIGludCBvX3Z0c21jdTU7DQo+ID4gKyAgICAgICBpbnQgZGVnY19jYWxpOw0KPiA+ ICsgICAgICAgaW50IGFkY19jYWxpX2VuX3Q7DQo+ID4gKyAgICAgICBpbnQgb19zbG9wZTsNCj4g PiArICAgICAgIGludCBvX3Nsb3BlX3NpZ247DQo+ID4gKyAgICAgICBpbnQgdHNfaWQ7DQo+ID4g K307DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBzdHJ1Y3Qgc3ZzX2JhbmsgLSBzdnMgYmFuayBy ZXByZXNlbnRhdGlvbg0KPiA+ICsgKiBAZGV2OiBzdnMgYmFuayBkZXZpY2UNCj4gPiArICogQG9w cF9kZXY6IGRldmljZSBmb3Igb3BwIHRhYmxlL2J1Y2sgY29udHJvbA0KPiA+ICsgKiBAcGRfZGV2 OiBwb3dlciBkb21haW4gZGV2aWNlIGZvciBTT0MgbXRjbW9zIGNvbnRyb2wNCj4gPiArICogQGlu aXRfY29tcGxldGlvbjogdGhlIHRpbWVvdXQgY29tcGxldGlvbiBmb3IgYmFuayBpbml0DQo+ID4g KyAqIEBidWNrOiBwaGFuZGxlIG9mIHRoZSByZWd1bGF0b3INCj4gPiArICogQGxvY2s6IG11dGV4 IGxvY2sgdG8gcHJvdGVjdCB2b2x0YWdlIHVwZGF0ZSBwcm9jZXNzDQo+ID4gKyAqIEBzdXNwZW5k ZWQ6IHN1c3BlbmQgZmxhZyBvZiB0aGlzIGJhbmsNCj4gPiArICogQHBkX3JlcTogYmFuaydzIHBv d2VyLWRvbWFpbiBvbiByZXF1ZXN0DQo+ID4gKyAqIEB2b2x0X29mZnNldDogYmFuayB2b2x0YWdl IG9mZnNldCBjb250cm9sbGVkIGJ5IHN2cyBzb2Z0d2FyZQ0KPiA+ICsgKiBAbW9kZV9zdXBwb3J0 OiBiYW5rIG1vZGUgc3VwcG9ydC4NCj4gPiArICogQG9wcF9mcmVxczogc2lnbmVkLW9mZiBmcmVx dWVuY2llcyBmcm9tIGRlZmF1bHQgb3BwIHRhYmxlDQo+ID4gKyAqIEBvcHBfdm9sdHM6IHNpZ25l ZC1vZmYgdm9sdGFnZXMgZnJvbSBkZWZhdWx0IG9wcCB0YWJsZQ0KPiA+ICsgKiBAZnJlcXNfcGN0 OiBwZXJjZW50IG9mICJvcHBfZnJlcXMgLyBmcmVxX2Jhc2UiIGZvciBiYW5rIGluaXQNCj4gPiAr ICogQHZvbHRzOiBiYW5rIHZvbHRhZ2VzDQo+ID4gKyAqIEBmcmVxX2Jhc2U6IHJlZmVyZW5jZSBm cmVxdWVuY3kgZm9yIGJhbmsgaW5pdA0KPiA+ICsgKiBAdmJvb3Q6IHZvbHRhZ2UgcmVxdWVzdCBm b3IgYmFuayBpbml0MDEgc3RhZ2Ugb25seQ0KPiA+ICsgKiBAdm9sdF9zdGVwOiBiYW5rIHZvbHRh Z2Ugc3RlcA0KPiA+ICsgKiBAdm9sdF9iYXNlOiBiYW5rIHZvbHRhZ2UgYmFzZQ0KPiA+ICsgKiBA aW5pdDAxX3ZvbHRfZmxhZzogYmFuayBpbml0MDEgdm9sdGFnZSBmbGFnDQo+ID4gKyAqIEBwaGFz ZTogYmFuayBjdXJyZW50IHBoYXNlDQo+ID4gKyAqIEB2bWF4OiBiYW5rIHZvbHRhZ2UgbWF4aW11 bQ0KPiA+ICsgKiBAdm1pbjogYmFuayB2b3RsYWdlIG1pbmltdW0NCj4gDQo+IHZvbHRhZ2UNCg0K T2ssIEknbGwgZml4IGl0LiBUaGFua3MuDQoNCj4gDQo+ID4gKyAqIEB0ZW1wOiBiYW5rIHRlbXBl cmF0dXJlDQo+ID4gKyAqIEB0ZW1wX3VwcGVyX2JvdW5kOiBiYW5rIHRlbXBlcmF0dXJlIHVwcGVy IGJvdW5kDQo+ID4gKyAqIEB0ZW1wX2xvd2VyX2JvdW5kOiBiYW5rIHRlbXBlcmF0dXJlIGxvd2Vy IGJvdW5kDQo+ID4gKyAqIEB0em9uZV9oaWdoX3RlbXA6IHRoZXJtYWwgem9uZSBoaWdoIHRlbXBl cmF0dXJlIHRocmVzaG9sZA0KPiA+ICsgKiBAdHpvbmVfaGlnaF90ZW1wX29mZnNldDogdGhlcm1h bCB6b25lIGhpZ2ggdGVtcGVyYXR1cmUgb2Zmc2V0DQo+ID4gKyAqIEB0em9uZV9sb3dfdGVtcDog dGhlcm1hbCB6b25lIGxvdyB0ZW1wZXJhdHVyZSB0aHJlc2hvbGQNCj4gPiArICogQHR6b25lX2xv d190ZW1wX29mZnNldDogdGhlcm1hbCB6b25lIGxvdyB0ZW1wZXJhdHVyZSBvZmZzZXQNCj4gPiAr ICogQGNvcmVfc2VsOiBiYW5rIHNlbGVjdGlvbg0KPiA+ICsgKiBAb3BwX2NvdW50OiBiYW5rIG9w cCBjb3VudA0KPiA+ICsgKiBAaW50X3N0OiBiYW5rIGludGVycnVwdCBpZGVudGlmaWNhdGlvbg0K PiA+ICsgKiBAc3dfaWQ6IGJhbmsgc29mdHdhcmUgaWRlbnRpZmljYXRpb24NCj4gPiArICogQGN0 bDA6IGJhbmsgdGhlcm1hbCBzZW5zb3Igc2VsZWN0aW9uDQo+ID4gKyAqIEBjcHVfaWQ6IGNwdSBj b3JlIGlkIGZvciBTVlMgQ1BVIG9ubHkNCj4gPiArICogQG5hbWU6IGJhbmsgbmFtZQ0KPiA+ICsg KiBAdHpvbmVfbmFtZTogdGhlcm1hbCB6b25lIG5hbWUNCj4gPiArICogQGJ1Y2tfbmFtZTogcmVn dWxhdG9yIG5hbWUNCj4gPiArICoNCj4gPiArICogT3RoZXIgc3RydWN0dXJlIG1lbWJlcnMgd2hp Y2ggYXJlIG5vdCBsaXN0ZWQgYWJvdmUgYXJlIHN2cyBwbGF0Zm9ybQ0KPiA+ICsgKiBlZnVzZSBk YXRhIGZvciBiYW5rIGluaXQNCj4gPiArICovDQo+ID4gK3N0cnVjdCBzdnNfYmFuayB7DQo+ID4g KyAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlICpv cHBfZGV2Ow0KPiA+ICsgICAgICAgc3RydWN0IGRldmljZSAqcGRfZGV2Ow0KPiA+ICsgICAgICAg c3RydWN0IGNvbXBsZXRpb24gaW5pdF9jb21wbGV0aW9uOw0KPiA+ICsgICAgICAgc3RydWN0IHJl Z3VsYXRvciAqYnVjazsNCj4gPiArICAgICAgIHN0cnVjdCBtdXRleCBsb2NrOyAgICAgIC8qIGxv Y2sgdG8gcHJvdGVjdCB2b2x0YWdlIHVwZGF0ZSBwcm9jZXNzICovDQo+ID4gKyAgICAgICBib29s IHN1c3BlbmRlZDsNCj4gPiArICAgICAgIGJvb2wgcGRfcmVxOw0KPiA+ICsgICAgICAgczMyIHZv bHRfb2Zmc2V0Ow0KPiA+ICsgICAgICAgdTMyIG1vZGVfc3VwcG9ydDsNCj4gPiArICAgICAgIHUz MiBvcHBfZnJlcXNbMTZdOw0KPiA+ICsgICAgICAgdTMyIG9wcF92b2x0c1sxNl07DQo+ID4gKyAg ICAgICB1MzIgZnJlcXNfcGN0WzE2XTsNCj4gPiArICAgICAgIHUzMiB2b2x0c1sxNl07DQo+ID4g KyAgICAgICB1MzIgZnJlcV9iYXNlOw0KPiA+ICsgICAgICAgdTMyIHZib290Ow0KPiA+ICsgICAg ICAgdTMyIHZvbHRfc3RlcDsNCj4gPiArICAgICAgIHUzMiB2b2x0X2Jhc2U7DQo+ID4gKyAgICAg ICB1MzIgaW5pdDAxX3ZvbHRfZmxhZzsNCj4gPiArICAgICAgIHUzMiBwaGFzZTsNCj4gPiArICAg ICAgIHUzMiB2bWF4Ow0KPiA+ICsgICAgICAgdTMyIHZtaW47DQo+ID4gKyAgICAgICB1MzIgYnRz Ow0KPiA+ICsgICAgICAgdTMyIG10czsNCj4gPiArICAgICAgIHUzMiBiZGVzOw0KPiA+ICsgICAg ICAgdTMyIG1kZXM7DQo+ID4gKyAgICAgICB1MzIgbXRkZXM7DQo+ID4gKyAgICAgICB1MzIgZGNi ZGV0Ow0KPiA+ICsgICAgICAgdTMyIGRjbWRldDsNCj4gPiArICAgICAgIHUzMiBkdGhpOw0KPiA+ ICsgICAgICAgdTMyIGR0bG87DQo+ID4gKyAgICAgICB1MzIgZGV0X3dpbmRvdzsNCj4gPiArICAg ICAgIHUzMiBkZXRfbWF4Ow0KPiA+ICsgICAgICAgdTMyIGFnZV9jb25maWc7DQo+ID4gKyAgICAg ICB1MzIgYWdlX3ZvZmZzZXRfaW47DQo+ID4gKyAgICAgICB1MzIgYWdlbTsNCj4gPiArICAgICAg IHUzMiBkY19jb25maWc7DQo+ID4gKyAgICAgICB1MzIgZGNfdm9mZnNldF9pbjsNCj4gPiArICAg ICAgIHUzMiBkdnRfZml4ZWQ7DQo+ID4gKyAgICAgICB1MzIgdmNvOw0KPiA+ICsgICAgICAgdTMy IGNoa19zaGlmdDsNCj4gPiArICAgICAgIHUzMiB0ZW1wOw0KPiA+ICsgICAgICAgdTMyIHRlbXBf dXBwZXJfYm91bmQ7DQo+ID4gKyAgICAgICB1MzIgdGVtcF9sb3dlcl9ib3VuZDsNCj4gPiArICAg ICAgIHUzMiB0em9uZV9oaWdoX3RlbXA7DQo+ID4gKyAgICAgICB1MzIgdHpvbmVfaGlnaF90ZW1w X29mZnNldDsNCj4gPiArICAgICAgIHUzMiB0em9uZV9sb3dfdGVtcDsNCj4gPiArICAgICAgIHUz MiB0em9uZV9sb3dfdGVtcF9vZmZzZXQ7DQo+ID4gKyAgICAgICB1MzIgY29yZV9zZWw7DQo+ID4g KyAgICAgICB1MzIgb3BwX2NvdW50Ow0KPiA+ICsgICAgICAgdTMyIGludF9zdDsNCj4gPiArICAg ICAgIHUzMiBzd19pZDsNCj4gPiArICAgICAgIHUzMiBjdGwwOw0KPiA+ICsgICAgICAgdTMyIGNw dV9pZDsNCj4gPiArICAgICAgIHU4ICpuYW1lOw0KPiA+ICsgICAgICAgdTggKnR6b25lX25hbWU7 DQo+ID4gKyAgICAgICB1OCAqYnVja19uYW1lOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoNCj4g PiArICogc3RydWN0IHN2c19wbGF0Zm9ybSAtIHN2cyBwbGF0Zm9ybSBkYXRhDQo+ID4gKyAqIEBk ZXY6IHN2cyBwbGF0Zm9ybSBkZXZpY2UNCj4gPiArICogQGJhc2U6IHN2cyBwbGF0Zm9ybSByZWdp c3RlciBhZGRyZXNzIGJhc2UNCj4gPiArICogQG1haW5fY2xrOiBtYWluIGNsb2NrIGZvciBzdnMg YmFuaw0KPiA+ICsgKiBAcGJhbms6IHBoYW5kbGUgb2Ygc3ZzIGJhbmsgYW5kIG5lZWRzIHRvIGJl IHByb3RlY3RlZCBieSBzcGluX2xvY2sNCj4gPiArICogQGJhbmtzOiBwaGFuZGxlIG9mIHRoZSBi YW5rcyB0aGF0IHN1cHBvcnQNCj4gPiArICogQGVmdXNlX3BhcnNpbmc6IHBoYW5kbGUgb2YgZWZ1 c2UgcGFyc2luZyBmdW5jdGlvbg0KPiA+ICsgKiBAc2V0X2ZyZXFzX3BjdDogcGhhbmRsZSBvZiBz ZXQgZnJlcXVlbmNpZXMgcGVyY2VudCBmdW5jdGlvbg0KPiA+ICsgKiBAZ2V0X3ZvcHM6IHBoYW5k bGUgb2YgIGdldCBiYW5rIHZvbHRhZ2VzIGZ1bmN0aW9uDQo+ID4gKyAqIEBpcnFmbGFnczogaXJx IHNldHRpbmdzIGZsYWdzDQo+ID4gKyAqIEBmYWtlX2VmdXNlOiB0aGUgZmxhZyBmb3IgcnVubmlu ZyBzdnMgd2l0aCBmYWtlIGVmdXNlDQo+ID4gKyAqIEByc3Q6IHN2cyByZXNldCBjb250cm9sDQo+ ID4gKyAqIEByZWdzOiBwaGFuZGxlIHRvIHRoZSByZWdpc3RlcnMgbWFwDQo+ID4gKyAqIEBlZnVz ZV9udW06IHRoZSB0b3RhbCBudW1iZXIgb2Ygc3ZzIHBsYXRmb3JtIGVmdXNlDQo+ID4gKyAqIEB0 ZWZ1c2VfbnVtOiB0aGUgdG90YWwgbnVtYmVyIG9mIHRoZXJtYWwgZWZ1c2UNCj4gPiArICogQGJh bmtfbnVtOiB0aGUgdG90YWwgbnVtYmVyIG9mIGJhbmtzDQo+ID4gKyAqIEBlZnVzZV9jaGVjazog dGhlIHN2cyBlZnVzZSBjaGVjayBpbmRleA0KPiA+ICsgKiBAZWZ1c2U6IHN2cyBwbGF0Zm9ybSBl ZnVzZSBkYXRhIHJlY2VpdmVkIGZyb20gTlZNRU0gZnJhbWV3b3JrDQo+ID4gKyAqIEB0ZWZ1c2U6 IHRoZXJtYWwgZWZ1c2UgZGF0YSByZWNlaXZlZCBmcm9tIE5WTUVNIGZyYW1ld29yaw0KPiA+ICsg KiBAbmFtZTogc3ZzIHBsYXRmb3JtIG5hbWUNCj4gPiArICovDQo+ID4gK3N0cnVjdCBzdnNfcGxh dGZvcm0gew0KPiA+ICsgICAgICAgc3RydWN0IGRldmljZSAqZGV2Ow0KPiA+ICsgICAgICAgdm9p ZCBfX2lvbWVtICpiYXNlOw0KPiA+ICsgICAgICAgc3RydWN0IGNsayAqbWFpbl9jbGs7DQo+ID4g KyAgICAgICBzdHJ1Y3Qgc3ZzX2JhbmsgKnBiYW5rOw0KPiA+ICsgICAgICAgc3RydWN0IHN2c19i YW5rICpiYW5rczsNCj4gPiArICAgICAgIGJvb2wgKCplZnVzZV9wYXJzaW5nKShzdHJ1Y3Qgc3Zz X3BsYXRmb3JtICpzdnNwKTsNCj4gPiArICAgICAgIHZvaWQgKCpzZXRfZnJlcXNfcGN0KShzdHJ1 Y3Qgc3ZzX3BsYXRmb3JtICpzdnNwKTsNCj4gPiArICAgICAgIHZvaWQgKCpnZXRfdm9wcykoc3Ry dWN0IHN2c19wbGF0Zm9ybSAqc3ZzcCk7DQo+ID4gKyAgICAgICB1bnNpZ25lZCBsb25nIGlycWZs YWdzOw0KPiA+ICsgICAgICAgYm9vbCBmYWtlX2VmdXNlOw0KPiA+ICsgICAgICAgc3RydWN0IHJl c2V0X2NvbnRyb2wgKnJzdDsNCj4gPiArICAgICAgIGNvbnN0IHUzMiAqcmVnczsNCj4gPiArICAg ICAgIHNpemVfdCBlZnVzZV9udW07DQo+ID4gKyAgICAgICBzaXplX3QgdGVmdXNlX251bTsNCj4g PiArICAgICAgIHUzMiBiYW5rX251bTsNCj4gPiArICAgICAgIHUzMiBlZnVzZV9jaGVjazsNCj4g PiArICAgICAgIHUzMiAqZWZ1c2U7DQo+ID4gKyAgICAgICB1MzIgKnRlZnVzZTsNCj4gPiArICAg ICAgIHU4ICpuYW1lOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHUzMiBwZXJjZW50KHUz MiBudW1lcmF0b3IsIHUzMiBkZW5vbWluYXRvcikNCj4gPiArew0KPiA+ICsgICAgICAgdTMyIHBj dDsNCj4gPiArDQo+ID4gKyAgICAgICAvKiBJZiBub3QgZGl2aWRlIDEwMDAsICJudW1lcmF0b3Ig KiAxMDAiIHdpbGwgaGF2ZSBkYXRhIG92ZXJmbG93LiAqLw0KPiA+ICsgICAgICAgbnVtZXJhdG9y IC89IDEwMDA7DQo+ID4gKyAgICAgICBkZW5vbWluYXRvciAvPSAxMDAwOw0KPiA+ICsgICAgICAg cGN0ID0gKChudW1lcmF0b3IgKiAxMDApICsgZGVub21pbmF0b3IgLSAxKSAvIGRlbm9taW5hdG9y Ow0KPiANCj4gcGN0ID0gRElWX1JPVU5EX1VQKG51bWVyYXRvciAqIDEwMCwgZGVub21pbmF0b3Ip Ow0KPiANCj4gPiArICAgICAgIHBjdCAmPSBHRU5NQVNLKDcsIDApOw0KPiANCj4gV2h5IGRvIHlv dSBuZWVkIHRoaXM/DQo+IA0KPiBNYXliZSB5b3Ugc2hvdWxkIGp1c3QgcmV0dXJuIGEgdTggaGVy ZT8NCg0KT2ssIEknbGwgcmV0dXJuIHU4IGhlcmUuIFRoYW5rcy4NCg0KPiANCj4gPiArDQo+ID4g KyAgICAgICByZXR1cm4gcGN0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdTMyIHN2c19y ZWFkbChzdHJ1Y3Qgc3ZzX3BsYXRmb3JtICpzdnNwLCBlbnVtIHN2c19yZWdfaW5kZXggcmdfaSkN Cj4gPiArew0KPiA+ICsgICAgICAgcmV0dXJuIHJlYWRsKHN2c3AtPmJhc2UgKyBzdnNwLT5yZWdz W3JnX2ldKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgc3ZzX3dyaXRlbChzdHJ1 Y3Qgc3ZzX3BsYXRmb3JtICpzdnNwLCB1MzIgdmFsLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgZW51bSBzdnNfcmVnX2luZGV4IHJnX2kpDQo+ID4gK3sNCj4gPiArICAgICAgIHdyaXRlbCh2 YWwsIHN2c3AtPmJhc2UgKyBzdnNwLT5yZWdzW3JnX2ldKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIHZvaWQgc3ZzX3N3aXRjaF9iYW5rKHN0cnVjdCBzdnNfcGxhdGZvcm0gKnN2c3ApDQo+ ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBzdnNfYmFuayAqc3ZzYiA9IHN2c3AtPnBiYW5rOw0K PiA+ICsNCj4gPiArICAgICAgIHN2c193cml0ZWwoc3ZzcCwgc3ZzYi0+Y29yZV9zZWwsIENPUkVT RUwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdTMyIHN2c19iYW5rX3ZvbHRfdG9fb3Bw X3ZvbHQodTMyIHN2c2Jfdm9sdCwgdTMyIHN2c2Jfdm9sdF9zdGVwLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc3ZzYl92b2x0X2Jhc2UpDQo+ID4gK3sNCj4g PiArICAgICAgIHUzMiBvcHBfdV92b2x0Ow0KPiA+ICsNCj4gPiArICAgICAgIG9wcF91X3ZvbHQg PSAoc3ZzYl92b2x0ICogc3ZzYl92b2x0X3N0ZXApICsgc3ZzYl92b2x0X2Jhc2U7DQo+ID4gKw0K PiA+ICsgICAgICAgcmV0dXJuIG9wcF91X3ZvbHQ7DQo+IA0KPiByZXR1cm4gKHN2c2Jfdm9sdCAq IHN2c2Jfdm9sdF9zdGVwKSArIHN2c2Jfdm9sdF9iYXNlOw0KDQpPaywgSSdsbCBjaGFuZ2UgdG8g aXQuIFRoYW5rcy4NCg0KPiANCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBzdnNfZ2V0 X2Jhbmtfem9uZV90ZW1wZXJhdHVyZSh1OCAqdHpvbmVfbmFtZSwgaW50ICp0em9uZV90ZW1wKQ0K PiANCj4gYGNvbnN0IGNoYXIgKnR6b25lX25hbWVgIGlzIHByb2JhYmx5IG1vcmUgYXBwcm9wcmlh dGUuDQoNCk9rLCBJJ2xsIGNoYW5nZSB0byBpdC4gVGhhbmtzLg0KDQo+IA0KPiA+ICt7DQo+ID4g KyAgICAgICBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHpkOw0KPiA+ICsNCj4gPiArICAg ICAgIHR6ZCA9IHRoZXJtYWxfem9uZV9nZXRfem9uZV9ieV9uYW1lKHR6b25lX25hbWUpOw0KPiA+ ICsgICAgICAgaWYgKElTX0VSUih0emQpKQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gUFRS X0VSUih0emQpOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiB0aGVybWFsX3pvbmVfZ2V0X3Rl bXAodHpkLCB0em9uZV90ZW1wKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBzdnNf YWRqdXN0X3BtX29wcF92b2x0cyhzdHJ1Y3Qgc3ZzX2JhbmsgKnN2c2IsIGJvb2wgZm9yY2VfdXBk YXRlKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBpbnQgdHpvbmVfdGVtcCwgcmV0ID0gLUVQRVJNOw0K PiANCj4gTm8gbmVlZCB0byBpbml0aWFsaXplIHJldC4NCg0KT2gsIGV4Y3VzZSBtZSwgc29tZSBj b2RpbmcgY2hlY2sgdG9vbCB3YXJuIHRoYXQgdGhpcyBgcmV0YCBtaWdodCByZXR1cm4NCndpdGhv dXQgYmVpbmcgdW5pbml0aWFsaXplZC4gVGhlcmVmb3JlLCBJJ2xsIGtlZXAgdGhlIGluaXRpYWxp emF0aW9uLg0KDQo+IA0KPiA+ICsgICAgICAgdTMyIGksIHN2c2Jfdm9sdCwgb3BwX3ZvbHQsIHRl bXBfb2Zmc2V0ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgICBtdXRleF9sb2NrKCZzdnNiLT5sb2Nr KTsNCj4gPiArDQo+ID4gKyAgICAgICAvKg0KPiA+ICsgICAgICAgICogSWYgc3ZzIGJhbmsgaXMg c3VzcGVuZGVkLCBpdCBtZWFucyBzaWduZWQtb2ZmIHZvbHRhZ2VzIGFyZSBhcHBsaWVkLg0KPiA+ ICsgICAgICAgICogRG9uJ3QgbmVlZCB0byB1cGRhdGUgb3BwIHZvbHRhZ2UgYW55bW9yZS4NCj4g PiArICAgICAgICAqLw0KPiA+ICsgICAgICAgaWYgKHN2c2ItPnN1c3BlbmRlZCAmJiAhZm9yY2Vf dXBkYXRlKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGRldl9ub3RpY2Uoc3ZzYi0+ZGV2LCAiYmFu ayBpcyBzdXNwZW5kZWRcbiIpOw0KPiA+ICsgICAgICAgICAgICAgICByZXQgPSAtRVBFUk07DQo+ ID4gKyAgICAgICAgICAgICAgIGdvdG8gdW5sb2NrX211dGV4Ow0KPiA+ICsgICAgICAgfQ0KPiA+ ICsNCj4gPiArICAgICAgIC8qIEdldCB0aGVybWFsIGVmZmVjdCAqLw0KPiA+ICsgICAgICAgaWYg KHN2c2ItPnBoYXNlID09IFNWU0JfUEhBU0VfTU9OKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGlm IChzdnNiLT50ZW1wID4gc3ZzYi0+dGVtcF91cHBlcl9ib3VuZCAmJg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgc3ZzYi0+dGVtcCA8IHN2c2ItPnRlbXBfbG93ZXJfYm91bmQpIHsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBkZXZfd2FybihzdnNiLT5kZXYsICJzdnNiIHRlbXAgPSAweCV4 P1xuIiwgc3ZzYi0+dGVtcCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJ TlZBTDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHVubG9ja19tdXRleDsNCj4g PiArICAgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgcmV0ID0gc3Zz X2dldF9iYW5rX3pvbmVfdGVtcGVyYXR1cmUoc3ZzYi0+dHpvbmVfbmFtZSwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR6b25lX3RlbXAp Ow0KPiA+ICsgICAgICAgICAgICAgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgZGV2X2VycihzdnNiLT5kZXYsICJubyBcIiVzXCI/KCVkKT9cbiIsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT50em9uZV9uYW1lLCByZXQpOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoc3ZzYi0+ZGV2LCAic2V0IHNpZ25lZC1vZmYg dm9sdGFnZVxuIik7DQo+IA0KPiBQbGVhc2UgbWVyZ2UgdGhlIGVycm9yIG1lc3NhZ2UgaW4gb25l IGxpbmUgKEknbSBub3Qgc3VyZSB3aGF0ICJzZXQNCj4gc2lnbmVkLW9mZiB2b2x0YWdlIiBtZWFu cyBoZXJlKS4NCg0KMS4gT2ssIEknbGwgbWVyZ2UgdGhlbS4gVGhhbmtzLg0KMi4gc2lnbmVkLW9m ZiB2b2x0YWdlcyBtZWFucyBDUFUgRFZGUyBkZWZhdWx0IHZvbHRhZ2VzDQoNCj4gDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+cGhhc2UgPSBTVlNCX1BIQVNFX0VSUk9SOw0KPiA+ ICsgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBpZiAodHpvbmVf dGVtcCA+PSBzdnNiLT50em9uZV9oaWdoX3RlbXApDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgdGVtcF9vZmZzZXQgKz0gc3ZzYi0+dHpvbmVfaGlnaF90ZW1wX29mZnNldDsNCj4gPiArICAg ICAgICAgICAgICAgZWxzZSBpZiAodHpvbmVfdGVtcCA8PSBzdnNiLT50em9uZV9sb3dfdGVtcCkN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX29mZnNldCArPSBzdnNiLT50em9uZV9s b3dfdGVtcF9vZmZzZXQ7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgLyogdm1p biA8PSBzdnNiX3ZvbHQgKG9wcF92b2x0KSA8PSBzaWduZWQtb2ZmIHZvbHRhZ2UgKi8NCj4gPiAr ICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdnNiLT5vcHBfY291bnQ7IGkrKykgew0KPiA+ICsgICAg ICAgICAgICAgICBpZiAoc3ZzYi0+cGhhc2UgPT0gU1ZTQl9QSEFTRV9NT04pIHsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBzdnNiX3ZvbHQgPSBtYXgoKHN2c2ItPnZvbHRzW2ldICsgc3Zz Yi0+dm9sdF9vZmZzZXQgKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGVtcF9vZmZzZXQpLCBzdnNiLT52bWluKTsNCj4gDQo+IHBhcmVudGhlc2VzIGluc2lk ZSB0aGUgbWF4IHBhcmFtZXRlciBub3QgbmVlZGVkDQoNCk9rLCBJJ2xsIGZpeCBpdC4gVGhhbmtz Lg0KDQo+IA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIG9wcF92b2x0ID0gc3ZzX2Jhbmtf dm9sdF90b19vcHBfdm9sdChzdnNiX3ZvbHQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPnZvbHRfc3RlcCwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3ZzYi0+dm9sdF9iYXNlKTsNCj4gPiArICAgICAgICAgICAgICAgfSBlbHNlIGlmIChz dnNiLT5waGFzZSA9PSBTVlNCX1BIQVNFX0lOSVQwMikgew0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIHN2c2Jfdm9sdCA9IG1heCgoc3ZzYi0+dm9sdHNbaV0gKyBzdnNiLT52b2x0X29mZnNl dCksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPnZt aW4pOw0KPiANCj4gZGl0dG8uDQoNCk9rLCBJJ2xsIGZpeCBpdC4gVGhhbmtzLg0KDQo+IA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIG9wcF92b2x0ID0gc3ZzX2Jhbmtfdm9sdF90b19vcHBf dm9sdChzdnNiX3ZvbHQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPnZvbHRfc3RlcCwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+ dm9sdF9iYXNlKTsNCj4gPiArICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdnNiLT5waGFzZSA9 PSBTVlNCX1BIQVNFX0VSUk9SKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgb3BwX3Zv bHQgPSBzdnNiLT5vcHBfdm9sdHNbaV07DQo+ID4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycihzdnNiLT5kZXYsICJ1bmtub3duIHBo YXNlOiAldT9cbiIsIHN2c2ItPnBoYXNlKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBy ZXQgPSAtRUlOVkFMOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdW5sb2NrX211 dGV4Ow0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBv cHBfdm9sdCA9IG1pbihvcHBfdm9sdCwgc3ZzYi0+b3BwX3ZvbHRzW2ldKTsNCj4gPiArICAgICAg ICAgICAgICAgcmV0ID0gZGV2X3BtX29wcF9hZGp1c3Rfdm9sdGFnZShzdnNiLT5vcHBfZGV2LA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2c2It Pm9wcF9mcmVxc1tpXSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvcHBfdm9sdCwgb3BwX3ZvbHQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+b3BwX3ZvbHRzW2ldKTsNCj4gPiArICAg ICAgICAgICAgICAgaWYgKHJldCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRldl9l cnIoc3ZzYi0+ZGV2LCAic2V0IHZvbHRhZ2UgZmFpbDogJWRcbiIsIHJldCk7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgZ290byB1bmxvY2tfbXV0ZXg7DQo+ID4gKyAgICAgICAgICAgICAg IH0NCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gK3VubG9ja19tdXRleDoNCj4gPiArICAgICAg IG11dGV4X3VubG9jaygmc3ZzYi0+bG9jayk7DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIHJl dDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHUzMiBpbnRlcnBvbGF0ZSh1MzIgZjAsIHUz MiBmMSwgdTMyIHYwLCB1MzIgdjEsIHUzMiBmeCkNCj4gPiArew0KPiA+ICsgICAgICAgdTMyIHZ5 Ow0KPiA+ICsNCj4gPiArICAgICAgIGlmICh2MCA9PSB2MSB8fCBmMCA9PSBmMSkNCj4gPiArICAg ICAgICAgICAgICAgcmV0dXJuIHYwOw0KPiA+ICsNCj4gPiArICAgICAgIC8qICoxMDAgdG8gaGF2 ZSBkZWNpbWFsIGZyYWN0aW9uIGZhY3RvciwgKzk5IGZvciByb3VuZGluZyB1cC4gKi8NCj4gPiAr ICAgICAgIHZ5ID0gKHYwICogMTAwKSAtICgoKCh2MCAtIHYxKSAqIDEwMCkgLyAoZjAgLSBmMSkp ICogKGYwIC0gZngpKTsNCj4gPiArICAgICAgIHZ5ID0gKHZ5ICsgOTkpIC8gMTAwOw0KPiANCj4g dnkgPSBESVZfUk9VTkRfVVAodnksIDEwMCk7DQoNCk9rLCBJJ2xsIGZpeCBpdC4gVGhhbmtzLg0K DQo+IA0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiB2eTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIHZvaWQgc3ZzX2dldF92b3BzX3YyKHN0cnVjdCBzdnNfcGxhdGZvcm0gKnN2c3ApDQo+ ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBzdnNfYmFuayAqc3ZzYiA9IHN2c3AtPnBiYW5rOw0K PiA+ICsgICAgICAgdTMyIHRlbXAsIGk7DQo+ID4gKw0KPiA+ICsgICAgICAgdGVtcCA9IHN2c19y ZWFkbChzdnNwLCBWT1A3NCk7DQo+ID4gKyAgICAgICBzdnNiLT52b2x0c1sxNF0gPSAodGVtcCA+ PiAyNCkgJiBHRU5NQVNLKDcsIDApOw0KPiA+ICsgICAgICAgc3ZzYi0+dm9sdHNbMTJdID0gKHRl bXAgPj4gMTYpICYgR0VOTUFTSyg3LCAwKTsNCj4gPiArICAgICAgIHN2c2ItPnZvbHRzWzEwXSA9 ICh0ZW1wID4+IDgpICAmIEdFTk1BU0soNywgMCk7DQo+ID4gKyAgICAgICBzdnNiLT52b2x0c1s4 XSA9ICh0ZW1wICYgR0VOTUFTSyg3LCAwKSk7DQo+ID4gKw0KPiA+ICsgICAgICAgdGVtcCA9IHN2 c19yZWFkbChzdnNwLCBWT1AzMCk7DQo+ID4gKyAgICAgICBzdnNiLT52b2x0c1s2XSA9ICh0ZW1w ID4+IDI0KSAmIEdFTk1BU0soNywgMCk7DQo+ID4gKyAgICAgICBzdnNiLT52b2x0c1s0XSA9ICh0 ZW1wID4+IDE2KSAmIEdFTk1BU0soNywgMCk7DQo+ID4gKyAgICAgICBzdnNiLT52b2x0c1syXSA9 ICh0ZW1wID4+IDgpICAmIEdFTk1BU0soNywgMCk7DQo+ID4gKyAgICAgICBzdnNiLT52b2x0c1sw XSA9ICh0ZW1wICYgR0VOTUFTSyg3LCAwKSk7DQo+ID4gKw0KPiA+ICsgICAgICAgZm9yIChpID0g MDsgaSA8PSA3OyBpKyspIHsNCj4gPiArICAgICAgICAgICAgICAgaWYgKGkgPCA3KSB7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+dm9sdHNbKGkgKiAyKSArIDFdID0NCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRlKHN2c2ItPmZyZXFzX3Bj dFtpICogMl0sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdnNiLT5mcmVxc19wY3RbKGkgKyAxKSAqIDJdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+dm9sdHNbaSAqIDJdLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+dm9sdHNbKGkgKyAxKSAq IDJdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Zz Yi0+ZnJlcXNfcGN0WyhpICogMikgKyAxXSk7DQo+ID4gKyAgICAgICAgICAgICAgIH0gZWxzZSBp ZiAoaSA9PSA3KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+dm9sdHNbKGkg KiAyKSArIDFdID0NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9s YXRlKHN2c2ItPmZyZXFzX3BjdFsoaSAtIDEpICogMl0sDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5mcmVxc19wY3RbaSAqIDJdLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+dm9sdHNbKGkg LSAxKSAqIDJdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3ZzYi0+dm9sdHNbaSAqIDJdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3ZzYi0+ZnJlcXNfcGN0WyhpICogMikgKyAxXSk7DQo+ID4gKyAgICAg ICAgICAgICAgIH0NCj4gPiArICAgICAgIH0NCj4gDQo+IFBsZWFzZSBkb3VibGUtY2hlY2ssIGJ1 dCBJIHRoaW5rIHdlIGNhbiBkbzoNCj4gDQo+IGZvciAoaSA9IDA7IGkgPD0gMTI7IGkgKz0gMikg ew0KPiAgICAgc3ZzYi0+dm9sdHNbaSArIDFdID0NCj4gICAgICAgICBpbnRlcnBvbGF0ZShzdnNi LT5mcmVxc19wY3RbaV0sDQo+ICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+ZnJlcXNfcGN0W2kg KyAyXSwNCj4gICAgICAgICAgICAgICAgICAgICBzdnNiLT52b2x0c1tpXSwNCj4gICAgICAgICAg ICAgICAgICAgICBzdnNiLT52b2x0c1tpICsgMl0sDQo+ICAgICAgICAgICAgICAgICAgICAgc3Zz Yi0+ZnJlcXNfcGN0W2kgKyAxXSk7DQo+IH0NCj4gDQo+IHN2c2ItPnZvbHRzW2kgKyAxXSA9DQo+ ICAgICBpbnRlcnBvbGF0ZShzdnNiLT5mcmVxc19wY3RbaSAtIDJdLA0KPiAgICAgICAgICAgICAg ICAgc3ZzYi0+ZnJlcXNfcGN0W2ldLA0KPiAgICAgICAgICAgICAgICAgc3ZzYi0+dm9sdHNbaSAt IDJdLA0KPiAgICAgICAgICAgICAgICAgc3ZzYi0+dm9sdHNbaV0sDQo+ICAgICAgICAgICAgICAg ICBzdnNiLT5mcmVxc19wY3RbaSArIDFdKTsNCj4gDQo+IA0KPiAob3IgbWF5YmUgcmVwbGFjZSBp IHdpdGggMTQgaW4gdGhlIGNvbXB1dGF0aW9uIGZvciB0aGlzIGxhc3QgaXRlcmF0aW9uLg0KDQpP aywgSSdsbCBkb3VibGUgY2hlY2sgaWYgaXQgY2FuIGJlIHJlcGxhY2VkIGFuZCBpID0gMTQgZm9y IHRoZSBsYXN0DQppdGVyYXRpb24gaXMgbXVjaCBjbGVhci4gVGhhbmtzLg0KDQo+IA0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBzdnNfc2V0X2ZyZXFzX3BjdF92MihzdHJ1Y3Qgc3Zz X3BsYXRmb3JtICpzdnNwKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ZzX2JhbmsgKnN2 c2IgPSBzdnNwLT5wYmFuazsNCj4gPiArDQo+ID4gKyAgICAgICBzdnNfd3JpdGVsKHN2c3AsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICgoc3ZzYi0+ZnJlcXNfcGN0WzE0XSA8PCAyNCkgJiBHRU5N QVNLKDMxLCAyNCkpIHwNCj4gDQo+IFdlbGwgeW91IGFscmVhZHkgdG9vayBjYXJlIG9mIG1ha2lu ZyBzdXJlIGZyZXFzX3BjdCBkb2VzIG5vdCBoYXZlIG1vcmUNCj4gdGhhbiA4IGJpdHMgc2V0LCBz byBJIGRvbid0IHRoaW5rIHlvdSBuZWVkIEdFTk1BU0soMzEsIDI0KS4NCg0KT2ssIEknbGwgcmVt b3ZlIHVubmVjZXNzYXJ5IEdFTk1BU0sgaGVyZS4gVGhhbmtzLg0KDQo+IA0KPiA+ICsgICAgICAg ICAgICAgICAgICAoKHN2c2ItPmZyZXFzX3BjdFsxMl0gPDwgMTYpICYgR0VOTUFTSygyMywgMTYp KSB8DQo+ID4gKyAgICAgICAgICAgICAgICAgICgoc3ZzYi0+ZnJlcXNfcGN0WzEwXSA8PCA4KSAm IEdFTk1BU0soMTUsIDgpKSB8DQo+ID4gKyAgICAgICAgICAgICAgICAgICgoc3ZzYi0+ZnJlcXNf cGN0WzhdKSAmIEdFTk1BU0soNywgMCkpLA0KPiA+ICsgICAgICAgICAgICAgICAgICBGUkVRUENU NzQpOw0KPiA+ICsNCj4gPiArICAgICAgIHN2c193cml0ZWwoc3ZzcCwNCj4gPiArICAgICAgICAg ICAgICAgICAgKChzdnNiLT5mcmVxc19wY3RbNl0gPDwgMjQpICYgR0VOTUFTSygzMSwgMjQpKSB8 DQo+ID4gKyAgICAgICAgICAgICAgICAgICgoc3ZzYi0+ZnJlcXNfcGN0WzRdIDw8IDE2KSAmIEdF Tk1BU0soMjMsIDE2KSkgfA0KPiA+ICsgICAgICAgICAgICAgICAgICAoKHN2c2ItPmZyZXFzX3Bj dFsyXSA8PCA4KSAmIEdFTk1BU0soMTUsIDgpKSB8DQo+ID4gKyAgICAgICAgICAgICAgICAgIChz dnNiLT5mcmVxc19wY3RbMF0gJiBHRU5NQVNLKDcsIDApKSwNCj4gPiArICAgICAgICAgICAgICAg ICAgRlJFUVBDVDMwKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgc3ZzX3NldF9i YW5rX3BoYXNlKHN0cnVjdCBzdnNfcGxhdGZvcm0gKnN2c3AsIHUzMiB0YXJnZXRfcGhhc2UpDQo+ ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBzdnNfYmFuayAqc3ZzYiA9IHN2c3AtPnBiYW5rOw0K PiA+ICsgICAgICAgdTMyIGRlc19jaGFyLCB0ZW1wX2NoYXIsIGRldF9jaGFyLCBsaW1pdF92YWxz Ow0KPiA+ICsgICAgICAgdTMyIGluaXQydmFscywgdHNfY2FsY3MsIHZhbCwgZmlsdGVyLCBpOw0K PiA+ICsNCj4gPiArICAgICAgIHN2c19zd2l0Y2hfYmFuayhzdnNwKTsNCj4gPiArDQo+ID4gKyAg ICAgICBkZXNfY2hhciA9ICgoc3ZzYi0+YmRlcyA8PCA4KSAmIEdFTk1BU0soMTUsIDgpKSB8DQo+ ID4gKyAgICAgICAgICAgICAgICAgIChzdnNiLT5tZGVzICYgR0VOTUFTSyg3LCAwKSk7DQo+IA0K PiBTaW1pbGFyIHRvIG15IHN1Z2dlc3Rpb24gYWJvdXQsIGNvbnNpZGVyIGNoYWdpbmcgYmRlcyB0 eXBlIHRvIHU4IHNvDQo+IHlvdSBkb24ndCBuZWVkIGFsbCB0aGVzZSBtYXNrcz8NCg0KT2ssIEkn bGwgcmVtb3ZlIHVubmVjZXNzYXJ5IEdFTk1BU0sgaGVyZS4gVGhhbmtzLg0KDQo+IA0KPiA+ICsg ICAgICAgc3ZzX3dyaXRlbChzdnNwLCBkZXNfY2hhciwgREVTQ0hBUik7DQo+ID4gKw0KPiA+ICsg ICAgICAgdGVtcF9jaGFyID0gKChzdnNiLT52Y28gPDwgMTYpICYgR0VOTUFTSygyMywgMTYpKSB8 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAoKHN2c2ItPm10ZGVzIDw8IDgpICYgR0VOTUFTSygx NSwgOCkpIHwNCj4gPiArICAgICAgICAgICAgICAgICAgIChzdnNiLT5kdnRfZml4ZWQgJiBHRU5N QVNLKDcsIDApKTsNCj4gPiArICAgICAgIHN2c193cml0ZWwoc3ZzcCwgdGVtcF9jaGFyLCBURU1Q Q0hBUik7DQo+ID4gKw0KPiA+ICsgICAgICAgZGV0X2NoYXIgPSAoKHN2c2ItPmRjYmRldCA8PCA4 KSAmIEdFTk1BU0soMTUsIDgpKSB8DQo+ID4gKyAgICAgICAgICAgICAgICAgIChzdnNiLT5kY21k ZXQgJiBHRU5NQVNLKDcsIDApKTsNCj4gPiArICAgICAgIHN2c193cml0ZWwoc3ZzcCwgZGV0X2No YXIsIERFVENIQVIpOw0KPiA+ICsNCj4gPiArICAgICAgIHN2c193cml0ZWwoc3ZzcCwgc3ZzYi0+ ZGNfY29uZmlnLCBEQ0NPTkZJRyk7DQo+ID4gKyAgICAgICBzdnNfd3JpdGVsKHN2c3AsIHN2c2It PmFnZV9jb25maWcsIEFHRUNPTkZJRyk7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKCFzdnNiLT5h Z2VtKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c193cml0ZWwoc3ZzcCwgU1ZTQl9SVU5DT05G SUdfREVGQVVMVCwgUlVOQ09ORklHKTsNCj4gPiArICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAg ICAgICAgICAgIHZhbCA9IDB4MDsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCAyNDsgaSArPSAyKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVy ID0gMHgzIDw8IGk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHN2 c2ItPmFnZV9jb25maWcgJiBmaWx0ZXIpKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmFsIHw9ICgweDEgPDwgaSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZWxz ZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsIHw9IChzdnNiLT5hZ2Vf Y29uZmlnICYgZmlsdGVyKTsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAg ICAgICBzdnNfd3JpdGVsKHN2c3AsIHZhbCwgUlVOQ09ORklHKTsNCj4gPiArICAgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgICBzdnNwLT5zZXRfZnJlcXNfcGN0KHN2c3ApOw0KPiA+ICsNCj4gPiAr ICAgICAgIGxpbWl0X3ZhbHMgPSAoKHN2c2ItPnZtYXggPDwgMjQpICYgR0VOTUFTSygzMSwgMjQp KSB8DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgKChzdnNiLT52bWluIDw8IDE2KSAmIEdFTk1B U0soMjMsIDE2KSkgfA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICgoc3ZzYi0+ZHRoaSA8PCA4 KSAmIEdFTk1BU0soMTUsIDgpKSB8DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgKHN2c2ItPmR0 bG8gJiBHRU5NQVNLKDcsIDApKTsNCj4gPiArICAgICAgIHN2c193cml0ZWwoc3ZzcCwgbGltaXRf dmFscywgTElNSVRWQUxTKTsNCj4gPiArICAgICAgIHN2c193cml0ZWwoc3ZzcCwgKHN2c2ItPnZi b290ICYgR0VOTUFTSyg3LCAwKSksIFZCT09UKTsNCj4gPiArICAgICAgIHN2c193cml0ZWwoc3Zz cCwgKHN2c2ItPmRldF93aW5kb3cgJiBHRU5NQVNLKDE1LCAwKSksIERFVFdJTkRPVyk7DQo+ID4g KyAgICAgICBzdnNfd3JpdGVsKHN2c3AsIChzdnNiLT5kZXRfbWF4ICYgR0VOTUFTSygxNSwgMCkp LCBDT05GSUcpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChzdnNiLT5jaGtfc2hpZnQpDQo+ID4g KyAgICAgICAgICAgICAgIHN2c193cml0ZWwoc3ZzcCwgKHN2c2ItPmNoa19zaGlmdCAmIEdFTk1B U0soNywgMCkpLCBDSEtTSElGVCk7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKHN2c2ItPmN0bDAp DQo+ID4gKyAgICAgICAgICAgICAgIHN2c193cml0ZWwoc3ZzcCwgc3ZzYi0+Y3RsMCwgQ1RMMCk7 DQo+ID4gKw0KPiA+ICsgICAgICAgc3ZzX3dyaXRlbChzdnNwLCBTVlNCX0lOVFNUU19DTEVBTiwg SU5UU1RTKTsNCj4gPiArDQo+ID4gKyAgICAgICBzd2l0Y2ggKHRhcmdldF9waGFzZSkgew0KPiA+ ICsgICAgICAgY2FzZSBTVlNCX1BIQVNFX0lOSVQwMToNCj4gPiArICAgICAgICAgICAgICAgc3Zz X3dyaXRlbChzdnNwLCBTVlNCX0lOVEVOX0lOSVQweCwgSU5URU4pOw0KPiA+ICsgICAgICAgICAg ICAgICBzdnNfd3JpdGVsKHN2c3AsIFNWU0JfRU5fSU5JVDAxLCBTVlNFTik7DQo+ID4gKyAgICAg ICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgY2FzZSBTVlNCX1BIQVNFX0lOSVQwMjoNCj4g PiArICAgICAgICAgICAgICAgc3ZzX3dyaXRlbChzdnNwLCBTVlNCX0lOVEVOX0lOSVQweCwgSU5U RU4pOw0KPiA+ICsgICAgICAgICAgICAgICBpbml0MnZhbHMgPSAoKHN2c2ItPmFnZV92b2Zmc2V0 X2luIDw8IDE2KSAmIEdFTk1BU0soMzEsIDE2KSkgfA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAoc3ZzYi0+ZGNfdm9mZnNldF9pbiAmIEdFTk1BU0soMTUsIDApKTsNCj4gPiArICAg ICAgICAgICAgICAgc3ZzX3dyaXRlbChzdnNwLCBpbml0MnZhbHMsIElOSVQyVkFMUyk7DQo+ID4g KyAgICAgICAgICAgICAgIHN2c193cml0ZWwoc3ZzcCwgU1ZTQl9FTl9JTklUMDIsIFNWU0VOKTsN Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICBjYXNlIFNWU0JfUEhBU0Vf TU9OOg0KPiA+ICsgICAgICAgICAgICAgICB0c19jYWxjcyA9ICgoc3ZzYi0+YnRzIDw8IDEyKSAm IEdFTk1BU0soMjMsIDEyKSkgfA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIChzdnNi LT5tdHMgJiBHRU5NQVNLKDExLCAwKSk7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c193cml0ZWwo c3ZzcCwgdHNfY2FsY3MsIFRTQ0FMQ1MpOw0KPiA+ICsgICAgICAgICAgICAgICBzdnNfd3JpdGVs KHN2c3AsIFNWU0JfSU5URU5fTU9OVk9QRU4sIElOVEVOKTsNCj4gPiArICAgICAgICAgICAgICAg c3ZzX3dyaXRlbChzdnNwLCBTVlNCX0VOX01PTiwgU1ZTRU4pOw0KPiA+ICsgICAgICAgICAgICAg ICBicmVhazsNCj4gPiArICAgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgICAgIFdBUk5f T04oMSk7DQo+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgfQ0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgc3ZzX2luaXQwMV9pc3JfaGFuZGxlcihz dHJ1Y3Qgc3ZzX3BsYXRmb3JtICpzdnNwKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3Qgc3Zz X2JhbmsgKnN2c2IgPSBzdnNwLT5wYmFuazsNCj4gPiArDQo+ID4gKyAgICAgICBkZXZfaW5mbyhz dnNiLT5kZXYsICIlczogVkRONzR+MzA6MHglMDh4fjB4JTA4eCwgREM6MHglMDh4XG4iLA0KPiAN Cj4gZGV2X2RiZz8NCg0KVGhpcyBpcyBhbiB2ZXJ5IGltcG9ydGFudCBpbmZvIHdoZW4gc3lzdGVt IGNhbm5vdCBib290cyB1cCBzdWNjZXNzZnVsbHkNCmFmdGVyIGFwcGx5aW5nIFNWUyBiYW5rIHZv bHRhZ2VzLiBUaGVyZWZvcmUsIEknbGwga2VlcCBpdCBhcyBkZXZfaW5mby4NCg0KPiANCj4gPiAr ICAgICAgICAgICAgICAgIF9fZnVuY19fLCBzdnNfcmVhZGwoc3ZzcCwgVkRFU0lHTjc0KSwNCj4g PiArICAgICAgICAgICAgICAgIHN2c19yZWFkbChzdnNwLCBWREVTSUdOMzApLCBzdnNfcmVhZGwo c3ZzcCwgRENWQUxVRVMpKTsNCj4gPiArDQo+ID4gKyAgICAgICBzdnNiLT5waGFzZSA9IFNWU0Jf UEhBU0VfSU5JVDAxOw0KPiA+ICsgICAgICAgc3ZzYi0+ZGNfdm9mZnNldF9pbiA9IH4oc3ZzX3Jl YWRsKHN2c3AsIERDVkFMVUVTKSAmIEdFTk1BU0soMTUsIDApKSArIDE7DQo+ID4gKyAgICAgICBp ZiAoc3ZzYi0+aW5pdDAxX3ZvbHRfZmxhZyA9PSBTVlNCX0lOSVQwMV9WT0xUX0lHTk9SRSkNCj4g PiArICAgICAgICAgICAgICAgc3ZzYi0+ZGNfdm9mZnNldF9pbiA9IDA7DQo+ID4gKyAgICAgICBl bHNlIGlmICgoc3ZzYi0+ZGNfdm9mZnNldF9pbiAmIFNWU0JfRENfU0lHTkVEX0JJVCkgJiYNCj4g PiArICAgICAgICAgICAgICAgIChzdnNiLT5pbml0MDFfdm9sdF9mbGFnID09IFNWU0JfSU5JVDAx X1ZPTFRfSU5DX09OTFkpKQ0KPiA+ICsgICAgICAgICAgICAgICBzdnNiLT5kY192b2Zmc2V0X2lu ID0gMDsNCj4gDQo+IE1lcmdlIHRoZXNlIDIgaWYgdGVzdHMgaW50byBvbmUsIHNpbmNlIHlvdSBk byB0aGUgc2FtZSBvcGVyYXRpb24gaW4gYm90aCBjYXNlcy4NCg0KT2ssIEknbGwgbWVyZ2UgdGhl bS4gVGhhbmtzLg0KDQo+IA0KPiA+ICsNCj4gPiArICAgICAgIHN2c2ItPmFnZV92b2Zmc2V0X2lu ID0gc3ZzX3JlYWRsKHN2c3AsIEFHRVZBTFVFUykgJiBHRU5NQVNLKDE1LCAwKTsNCj4gPiArDQo+ ID4gKyAgICAgICBzdnNfd3JpdGVsKHN2c3AsIFNWU0JfRU5fT0ZGLCBTVlNFTik7DQo+ID4gKyAg ICAgICBzdnNfd3JpdGVsKHN2c3AsIFNWU0JfSU5UU1RTX0NPTVBMRVRFLCBJTlRTVFMpOw0KPiA+ ICsNCj4gPiArICAgICAgIC8qIHN2cyBpbml0MDEgY2xvY2sgZ2F0aW5nICovDQo+ID4gKyAgICAg ICBzdnNiLT5jb3JlX3NlbCAmPSB+U1ZTQl9JTklUMDFfQ0xLX0VOOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgc3ZzX2luaXQwMl9pc3JfaGFuZGxlcihzdHJ1Y3Qgc3Zz X3BsYXRmb3JtICpzdnNwKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ZzX2JhbmsgKnN2 c2IgPSBzdnNwLT5wYmFuazsNCj4gPiArDQo+ID4gKyAgICAgICBkZXZfaW5mbyhzdnNiLT5kZXYs ICIlczogVk9QNzR+MzA6MHglMDh4fjB4JTA4eCwgREM6MHglMDh4XG4iLA0KPiA+ICsgICAgICAg ICAgICAgICAgX19mdW5jX18sIHN2c19yZWFkbChzdnNwLCBWT1A3NCksIHN2c19yZWFkbChzdnNw LCBWT1AzMCksDQo+ID4gKyAgICAgICAgICAgICAgICBzdnNfcmVhZGwoc3ZzcCwgRENWQUxVRVMp KTsNCj4gDQo+IGRldl9kYmc/DQoNClRoaXMgaXMgYW4gdmVyeSBpbXBvcnRhbnQgaW5mbyB3aGVu IHN5c3RlbSBjYW5ub3QgYm9vdHMgdXAgc3VjY2Vzc2Z1bGx5DQphZnRlciBhcHBseWluZyBTVlMg YmFuayB2b2x0YWdlcy4gVGhlcmVmb3JlLCBJJ2xsIGtlZXAgaXQgYXMgZGV2X2luZm8uDQoNCj4g DQo+ID4gKw0KPiA+ICsgICAgICAgc3ZzYi0+cGhhc2UgPSBTVlNCX1BIQVNFX0lOSVQwMjsNCj4g PiArICAgICAgIHN2c3AtPmdldF92b3BzKHN2c3ApOw0KPiA+ICsNCj4gPiArICAgICAgIHN2c193 cml0ZWwoc3ZzcCwgU1ZTQl9FTl9PRkYsIFNWU0VOKTsNCj4gPiArICAgICAgIHN2c193cml0ZWwo c3ZzcCwgU1ZTQl9JTlRTVFNfQ09NUExFVEUsIElOVFNUUyk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbmxpbmUgdm9pZCBzdnNfbW9uX21vZGVfaXNyX2hhbmRsZXIoc3RydWN0IHN2c19w bGF0Zm9ybSAqc3ZzcCkNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHN2c19iYW5rICpzdnNi ID0gc3ZzcC0+cGJhbms7DQo+ID4gKw0KPiA+ICsgICAgICAgc3ZzYi0+cGhhc2UgPSBTVlNCX1BI QVNFX01PTjsNCj4gPiArICAgICAgIHN2c2ItPnRlbXAgPSBzdnNfcmVhZGwoc3ZzcCwgVEVNUCkg JiBHRU5NQVNLKDcsIDApOw0KPiA+ICsgICAgICAgc3ZzcC0+Z2V0X3ZvcHMoc3ZzcCk7DQo+ID4g Kw0KPiA+ICsgICAgICAgc3ZzX3dyaXRlbChzdnNwLCBTVlNCX0lOVFNUU19NT05WT1AsIElOVFNU Uyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBzdnNfZXJyb3JfaXNy X2hhbmRsZXIoc3RydWN0IHN2c19wbGF0Zm9ybSAqc3ZzcCkNCj4gPiArew0KPiA+ICsgICAgICAg c3RydWN0IHN2c19iYW5rICpzdnNiID0gc3ZzcC0+cGJhbms7DQo+ID4gKw0KPiA+ICsgICAgICAg ZGV2X2VycihzdnNiLT5kZXYsICIlczogQ09SRVNFTCA9IDB4JTA4eFxuIiwNCj4gPiArICAgICAg ICAgICAgICAgX19mdW5jX18sIHN2c19yZWFkbChzdnNwLCBDT1JFU0VMKSk7DQo+ID4gKyAgICAg ICBkZXZfZXJyKHN2c2ItPmRldiwgIlNWU0VOID0gMHglMDh4LCBJTlRTVFMgPSAweCUwOHhcbiIs DQo+ID4gKyAgICAgICAgICAgICAgIHN2c19yZWFkbChzdnNwLCBTVlNFTiksIHN2c19yZWFkbChz dnNwLCBJTlRTVFMpKTsNCj4gPiArICAgICAgIGRldl9lcnIoc3ZzYi0+ZGV2LCAiU01TVEFURTAg PSAweCUwOHgsIFNNU1RBVEUxID0gMHglMDh4XG4iLA0KPiA+ICsgICAgICAgICAgICAgICBzdnNf cmVhZGwoc3ZzcCwgU01TVEFURTApLCBzdnNfcmVhZGwoc3ZzcCwgU01TVEFURTEpKTsNCj4gPiAr ICAgICAgIGRldl9lcnIoc3ZzYi0+ZGV2LCAiVEVNUCA9IDB4JTA4eFxuIiwgc3ZzX3JlYWRsKHN2 c3AsIFRFTVApKTsNCj4gPiArDQo+ID4gKyAgICAgICBzdnNiLT5tb2RlX3N1cHBvcnQgPSBTVlNC X01PREVfQUxMX0RJU0FCTEU7DQo+ID4gKyAgICAgICBzdnNiLT5waGFzZSA9IFNWU0JfUEhBU0Vf RVJST1I7DQo+ID4gKw0KPiA+ICsgICAgICAgc3ZzX3dyaXRlbChzdnNwLCBTVlNCX0VOX09GRiwg U1ZTRU4pOw0KPiA+ICsgICAgICAgc3ZzX3dyaXRlbChzdnNwLCBTVlNCX0lOVFNUU19DTEVBTiwg SU5UU1RTKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlycXJldHVybl90IHN2c19pc3Io aW50IGlycSwgdm9pZCAqZGF0YSkNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHN2c19wbGF0 Zm9ybSAqc3ZzcCA9IChzdHJ1Y3Qgc3ZzX3BsYXRmb3JtICopZGF0YTsNCj4gDQo+IGNhc3Qgbm90 IG5lZWRlZC4NCg0KT2ssIEknbGwgcmVtb3ZlIGl0LiBUaGFua3MuDQoNCj4gDQo+ID4gKyAgICAg ICBzdHJ1Y3Qgc3ZzX2JhbmsgKnN2c2IgPSBOVUxMOw0KPiA+ICsgICAgICAgdW5zaWduZWQgbG9u ZyBmbGFnczsNCj4gPiArICAgICAgIHUzMiBpZHgsIGludF9zdHMsIHN2c19lbjsNCj4gPiArDQo+ ID4gKyAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IHN2c3AtPmJhbmtfbnVtOyBpZHgrKykgew0K PiA+ICsgICAgICAgICAgICAgICBzdnNiID0gJnN2c3AtPmJhbmtzW2lkeF07DQo+ID4gKw0KPiA+ ICsgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbXRrX3N2c19sb2NrLCBmbGFncyk7 DQo+ID4gKyAgICAgICAgICAgICAgIHN2c3AtPnBiYW5rID0gc3ZzYjsNCj4gPiArDQo+ID4gKyAg ICAgICAgICAgICAgIC8qIEZpbmQgb3V0IHdoaWNoIHN2cyBiYW5rIGZpcmVzIGludGVycnVwdCAq Lw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoc3ZzYi0+aW50X3N0ICYgc3ZzX3JlYWRsKHN2c3As IElOVFNUKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJm10a19zdnNfbG9jaywgZmxhZ3MpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAg ICAgICBpZiAoIXN2c2ItPnN1c3BlbmRlZCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IHN2c19zd2l0Y2hfYmFuayhzdnNwKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBpbnRf c3RzID0gc3ZzX3JlYWRsKHN2c3AsIElOVFNUUyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgc3ZzX2VuID0gc3ZzX3JlYWRsKHN2c3AsIFNWU0VOKTsNCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgaWYgKGludF9zdHMgPT0gU1ZTQl9JTlRTVFNfQ09NUExFVEUgJiYNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdnNfZW4gJiBTVlNCX0VOX01BU0spID09 IFNWU0JfRU5fSU5JVDAxKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2 c19pbml0MDFfaXNyX2hhbmRsZXIoc3ZzcCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAoKGludF9zdHMgPT0gU1ZTQl9JTlRTVFNfQ09NUExFVEUpICYmDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdnNfZW4gJiBTVlNCX0VOX01BU0spID09IFNW U0JfRU5fSU5JVDAyKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2c19p bml0MDJfaXNyX2hhbmRsZXIoc3ZzcCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZWxz ZSBpZiAoISEoaW50X3N0cyAmIFNWU0JfSU5UU1RTX01PTlZPUCkpDQo+IA0KPiAhISBpcyBub3Qg cmVxdWlyZWQuDQoNCk9rLCBJJ2xsIHJlbW92ZSBpdC4gVGhhbmtzLg0KDQo+IA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzX21vbl9tb2RlX2lzcl9oYW5kbGVyKHN2c3Ap Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN2c19lcnJvcl9pc3JfaGFuZGxlcihzdnNwKTsNCj4gPiArICAgICAg ICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmbXRrX3N2c19sb2NrLCBmbGFncyk7DQo+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOw0K PiA+ICsgICAgICAgfQ0KPiANCj4gVGhpcyB3aWxsIHBhbmljIGlmIHN2c2IgaXMgTlVMTCwgaXMg dGhhdCBvayBvciBkbyB5b3Ugd2FudCB0byBjYXRjaCB0aGF0Pw0KDQpPaCwgaXQgaXMgZmluZS4g VGhhbmtzIGZvciB0aGUgaGVhZHMtdXAuDQoNCj4gDQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKHN2 c2ItPnBoYXNlICE9IFNWU0JfUEhBU0VfSU5JVDAxKQ0KPiA+ICsgICAgICAgICAgICAgICBzdnNf YWRqdXN0X3BtX29wcF92b2x0cyhzdnNiLCBmYWxzZSk7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYg KHN2c2ItPnBoYXNlID09IFNWU0JfUEhBU0VfSU5JVDAxIHx8DQo+ID4gKyAgICAgICAgICAgc3Zz Yi0+cGhhc2UgPT0gU1ZTQl9QSEFTRV9JTklUMDIpDQo+ID4gKyAgICAgICAgICAgICAgIGNvbXBs ZXRlKCZzdnNiLT5pbml0X2NvbXBsZXRpb24pOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiBJ UlFfSEFORExFRDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgc3ZzX21vbl9tb2Rl KHN0cnVjdCBzdnNfcGxhdGZvcm0gKnN2c3ApDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBz dnNfYmFuayAqc3ZzYjsNCj4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ID4gKyAg ICAgICB1MzIgaWR4Ow0KPiA+ICsNCj4gPiArICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgc3Zz cC0+YmFua19udW07IGlkeCsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c2IgPSAmc3ZzcC0+ YmFua3NbaWR4XTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGlmICghKHN2c2ItPm1vZGVf c3VwcG9ydCAmIFNWU0JfTU9ERV9NT04pKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJm10 a19zdnNfbG9jaywgZmxhZ3MpOw0KPiA+ICsgICAgICAgICAgICAgICBzdnNwLT5wYmFuayA9IHN2 c2I7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c19zZXRfYmFua19waGFzZShzdnNwLCBTVlNCX1BI QVNFX01PTik7DQo+ID4gKyAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm10 a19zdnNfbG9jaywgZmxhZ3MpOw0KPiA+ICsgICAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW50IHN2c19pbml0MDIoc3RydWN0IHN2c19wbGF0Zm9ybSAqc3ZzcCkNCj4gPiArew0K PiA+ICsgICAgICAgc3RydWN0IHN2c19iYW5rICpzdnNiOw0KPiA+ICsgICAgICAgdW5zaWduZWQg bG9uZyBmbGFncywgdGltZV9sZWZ0Ow0KPiA+ICsgICAgICAgdTMyIGlkeDsNCj4gPiArDQo+ID4g KyAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IHN2c3AtPmJhbmtfbnVtOyBpZHgrKykgew0KPiA+ ICsgICAgICAgICAgICAgICBzdnNiID0gJnN2c3AtPmJhbmtzW2lkeF07DQo+ID4gKw0KPiA+ICsg ICAgICAgICAgICAgICBpZiAoIShzdnNiLT5tb2RlX3N1cHBvcnQgJiBTVlNCX01PREVfSU5JVDAy KSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiArDQo+ID4gKyAg ICAgICAgICAgICAgIHJlaW5pdF9jb21wbGV0aW9uKCZzdnNiLT5pbml0X2NvbXBsZXRpb24pOw0K PiA+ICsgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbXRrX3N2c19sb2NrLCBmbGFn cyk7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c3AtPnBiYW5rID0gc3ZzYjsNCj4gPiArICAgICAg ICAgICAgICAgc3ZzX3NldF9iYW5rX3BoYXNlKHN2c3AsIFNWU0JfUEhBU0VfSU5JVDAyKTsNCj4g PiArICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXRrX3N2c19sb2NrLCBm bGFncyk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICB0aW1lX2xlZnQgPQ0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc3ZzYi0+aW5p dF9jb21wbGV0aW9uLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtc2Vjc190b19qaWZmaWVzKDIwMDApKTsNCj4gPiArICAgICAgICAgICAg ICAgaWYgKCF0aW1lX2xlZnQpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJy KHN2c2ItPmRldiwgImluaXQwMiBjb21wbGV0aW9uIHRpbWVvdXRcbiIpOw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4g PiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGludCBzdnNfaW5pdDAxKHN0cnVjdCBzdnNfcGxhdGZvcm0gKnN2c3ApDQo+ ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBzdnNfYmFuayAqc3ZzYjsNCj4gPiArICAgICAgIHN0 cnVjdCBwbV9xb3NfcmVxdWVzdCAqcW9zX3JlcXVlc3Q7DQo+ID4gKyAgICAgICB1bnNpZ25lZCBs b25nIGZsYWdzLCB0aW1lX2xlZnQ7DQo+ID4gKyAgICAgICBib29sIHNlYXJjaF9kb25lLCBkb2Vz X3N2c2Jfc2V0X3BkX29uOw0KPiA+ICsgICAgICAgaW50IHJldCA9IDA7DQo+ID4gKyAgICAgICB1 MzIgb3BwX2ZyZXFzLCBvcHBfdmJvb3QsIGJ1Y2tfdm9sdCwgaWR4LCBpOw0KPiA+ICsNCj4gPiAr ICAgICAgIHFvc19yZXF1ZXN0ID0ga3phbGxvYyhzaXplb2YoKnFvc19yZXF1ZXN0KSwgR0ZQX0tF Uk5FTCk7DQo+ID4gKyAgICAgICBpZiAoIXFvc19yZXF1ZXN0KQ0KPiA+ICsgICAgICAgICAgICAg ICByZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKyAgICAgICAvKiBMZXQgQ1BVcyBsZWF2ZSBp ZGxlLW9mZiBzdGF0ZSBmb3IgaW5pdGlhbGl6aW5nIHN2c19pbml0MDEuICovDQo+ID4gKyAgICAg ICBjcHVfbGF0ZW5jeV9xb3NfYWRkX3JlcXVlc3QocW9zX3JlcXVlc3QsIDApOw0KPiA+ICsNCj4g PiArICAgICAgIC8qDQo+ID4gKyAgICAgICAgKiBTb21ldGltZXMgdHdvIHN2cyBiYW5rcyB1c2Ug dGhlIHNhbWUgYnVjay4NCj4gPiArICAgICAgICAqIFRoZXJlZm9yZSwgd2Ugc2V0IGVhY2ggc3Zz IGJhbmsgdG8gdmJvb3Qgdm9sdGFnZSBmaXJzdC4NCj4gPiArICAgICAgICAqLw0KPiA+ICsgICAg ICAgZm9yIChpZHggPSAwOyBpZHggPCBzdnNwLT5iYW5rX251bTsgaWR4KyspIHsNCj4gPiArICAg ICAgICAgICAgICAgc3ZzYiA9ICZzdnNwLT5iYW5rc1tpZHhdOw0KPiA+ICsNCj4gPiArICAgICAg ICAgICAgICAgaWYgKCEoc3ZzYi0+bW9kZV9zdXBwb3J0ICYgU1ZTQl9NT0RFX0lOSVQwMSkpDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ID4gKw0KPiA+ICsgICAgICAg ICAgICAgICBzZWFyY2hfZG9uZSA9IGZhbHNlOw0KPiA+ICsgICAgICAgICAgICAgICBkb2VzX3N2 c2Jfc2V0X3BkX29uID0gZmFsc2U7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBpZiAocmVn dWxhdG9yX3NldF9tb2RlKHN2c2ItPmJ1Y2ssIFJFR1VMQVRPUl9NT0RFX0ZBU1QpKQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGRldl9ub3RpY2Uoc3ZzYi0+ZGV2LCAic2V0IGZhc3QgbW9k ZSBmYWlsXG4iKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGlmIChzdnNiLT5wZF9yZXEp IHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSByZWd1bGF0b3JfZW5hYmxlKHN2 c2ItPmJ1Y2spOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoc3ZzYi0+ZGV2LCAiXCIlc1wi IGVuYWJsZSBmYWlsOiAlZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3ZzYi0+YnVja19uYW1lLCByZXQpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBpbml0MDFfZmluaXNoOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwbV9ydW50aW1l X2VuYWJsZWQoc3ZzYi0+cGRfZGV2KSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcG1fcnVudGltZV9lbmFibGUoc3ZzYi0+cGRfZGV2KTsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvZXNfc3ZzYl9zZXRfcGRfb24gPSB0cnVlOw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg cmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhzdnNiLT5wZF9kZXYpOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkZXZfZXJyKHN2c2ItPmRldiwgIm10Y21vcyBvbiBmYWlsOiAlZFxuIiwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0KTsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW5pdDAxX2ZpbmlzaDsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgICAgICAgICAgIC8qDQo+ID4gKyAgICAgICAgICAgICAgICAqIEZpbmQgdGhlIGZhc3Rlc3Qg ZnJlcSB0aGF0IGNhbiBiZSBydW4gYXQgdmJvb3QgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAq IGZpeCB0byB0aGF0IGZyZXEgdW50aWwgc3ZzX2luaXQwMSBpcyBkb25lLg0KPiA+ICsgICAgICAg ICAgICAgICAgKi8NCj4gPiArICAgICAgICAgICAgICAgb3BwX3Zib290ID0gc3ZzX2Jhbmtfdm9s dF90b19vcHBfdm9sdChzdnNiLT52Ym9vdCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT52b2x0X3N0ZXAsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+dm9s dF9iYXNlKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdnNi LT5vcHBfY291bnQ7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIG9wcF9mcmVx cyA9IHN2c2ItPm9wcF9mcmVxc1tpXTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAo IXNlYXJjaF9kb25lICYmIHN2c2ItPm9wcF92b2x0c1tpXSA8PSBvcHBfdmJvb3QpIHsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGRldl9wbV9vcHBfYWRqdXN0X3Zv bHRhZ2Uoc3ZzYi0+b3BwX2RldiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BwX2ZyZXFzLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv cHBfdmJvb3QsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9wcF92Ym9vdCwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BwX3Zib290KTsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycihzdnNiLT5kZXYsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldCB2 b2x0YWdlIGZhaWw6ICVkXG4iLCByZXQpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIGluaXQwMV9maW5pc2g7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2VhcmNoX2RvbmUgPSB0cnVlOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfcG1fb3BwX2Rpc2Fi bGUoc3ZzYi0+b3BwX2RldiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdnNiLT5vcHBfZnJlcXNbaV0pOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgfQ0KPiA+ICsN Cj4gPiArICAgICAgIC8qIHN2cyBiYW5rIGluaXQwMSBiZWdpbnMgKi8NCj4gPiArICAgICAgIGZv ciAoaWR4ID0gMDsgaWR4IDwgc3ZzcC0+YmFua19udW07IGlkeCsrKSB7DQo+ID4gKyAgICAgICAg ICAgICAgIHN2c2IgPSAmc3ZzcC0+YmFua3NbaWR4XTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAg ICAgIGlmICghKHN2c2ItPm1vZGVfc3VwcG9ydCAmIFNWU0JfTU9ERV9JTklUMDEpKQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAg ICAgb3BwX3Zib290ID0gc3ZzX2Jhbmtfdm9sdF90b19vcHBfdm9sdChzdnNiLT52Ym9vdCwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dnNiLT52b2x0X3N0ZXAsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3ZzYi0+dm9sdF9iYXNlKTsNCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICAgIGJ1Y2tfdm9sdCA9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZShzdnNiLT5idWNrKTsNCj4g PiArICAgICAgICAgICAgICAgaWYgKGJ1Y2tfdm9sdCAhPSBvcHBfdmJvb3QpIHsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKHN2c2ItPmRldiwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJidWNrIHZvbHRhZ2U6ICV1LCBleHBlY3RlZCB2Ym9vdDogJXVc biIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrX3ZvbHQsIG9wcF92 Ym9vdCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVQRVJNOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW5pdDAxX2ZpbmlzaDsNCj4gPiArICAgICAgICAg ICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJm10 a19zdnNfbG9jaywgZmxhZ3MpOw0KPiA+ICsgICAgICAgICAgICAgICBzdnNwLT5wYmFuayA9IHN2 c2I7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c19zZXRfYmFua19waGFzZShzdnNwLCBTVlNCX1BI QVNFX0lOSVQwMSk7DQo+ID4gKyAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUo Jm10a19zdnNfbG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgdGltZV9s ZWZ0ID0NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB3YWl0X2Zvcl9jb21wbGV0aW9uX3Rp bWVvdXQoJnN2c2ItPmluaXRfY29tcGxldGlvbiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNlY3NfdG9famlmZmllcygyMDAwKSk7DQo+ ID4gKyAgICAgICAgICAgICAgIGlmICghdGltZV9sZWZ0KSB7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgZGV2X2VycihzdnNiLT5kZXYsICJpbml0MDEgY29tcGxldGlvbiB0aW1lb3V0XG4i KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUJVU1k7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgZ290byBpbml0MDFfZmluaXNoOw0KPiA+ICsgICAgICAgICAgICAg ICB9DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICtpbml0MDFfZmluaXNoOg0KPiA+ICsgICAg ICAgZm9yIChpZHggPSAwOyBpZHggPCBzdnNwLT5iYW5rX251bTsgaWR4KyspIHsNCj4gPiArICAg ICAgICAgICAgICAgc3ZzYiA9ICZzdnNwLT5iYW5rc1tpZHhdOw0KPiA+ICsNCj4gPiArICAgICAg ICAgICAgICAgaWYgKCEoc3ZzYi0+bW9kZV9zdXBwb3J0ICYgU1ZTQl9NT0RFX0lOSVQwMSkpDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ID4gKw0KPiA+ICsgICAgICAg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3ZzYi0+b3BwX2NvdW50OyBpKyspDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgZGV2X3BtX29wcF9lbmFibGUoc3ZzYi0+b3BwX2Rldiwgc3ZzYi0+ b3BwX2ZyZXFzW2ldKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGlmIChyZWd1bGF0b3Jf c2V0X21vZGUoc3ZzYi0+YnVjaywgUkVHVUxBVE9SX01PREVfTk9STUFMKSkNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBkZXZfbm90aWNlKHN2c2ItPmRldiwgImZhaWwgdG8gc2V0IG5vcm1h bCBtb2RlXG4iKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGlmIChzdnNiLT5wZF9yZXEp IHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAocG1fcnVudGltZV9wdXRfc3luYyhz dnNiLT5wZF9kZXYpKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2Vy cihzdnNiLT5kZXYsICJtdGNtb3Mgb2ZmIGZhaWxcbiIpOw0KPiA+ICsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBpZiAoZG9lc19zdnNiX3NldF9wZF9vbikgew0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcG1fcnVudGltZV9kaXNhYmxlKHN2c2ItPnBkX2Rldik7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzX3N2c2Jfc2V0X3BkX29uID0g ZmFsc2U7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBpZiAocmVndWxhdG9yX2Rpc2FibGUoc3ZzYi0+YnVjaykpDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKHN2c2ItPmRldiwgImRpc2Fi bGUgcG93ZXIgZmFpbFxuIik7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgICBjcHVfbGF0ZW5jeV9xb3NfcmVtb3ZlX3JlcXVlc3QocW9zX3Jl cXVlc3QpOw0KPiA+ICsgICAgICAga2ZyZWUocW9zX3JlcXVlc3QpOw0KPiA+ICsNCj4gPiArICAg ICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgc3ZzX3N0YXJ0 KHN0cnVjdCBzdnNfcGxhdGZvcm0gKnN2c3ApDQo+ID4gK3sNCj4gPiArICAgICAgIGludCByZXQ7 DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0ID0gc3ZzX2luaXQwMShzdnNwKTsNCj4gPiArICAgICAg IGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsg ICAgICAgcmV0ID0gc3ZzX2luaXQwMihzdnNwKTsNCj4gPiArICAgICAgIGlmIChyZXQpDQo+ID4g KyAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsgICAgICAgc3ZzX21vbl9t b2RlKHN2c3ApOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiByZXQ7DQo+IA0KPiBPciBqdXN0 IHJldHVybiAwOw0KDQpPaywgSSdsbCByZXR1cm4gMC4gVGhhbmtzLg0KDQo+IA0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGRldmljZSAqc3ZzX2dldF9zdWJzeXNfZGV2aWNlKHN0 cnVjdCBzdnNfcGxhdGZvcm0gKnN2c3AsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1OCAqbm9kZV9uYW1lKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Ow0KPiA+ICsgICAgICAgc3RydWN0IGRldmljZV9ub2Rl ICpucDsNCj4gPiArDQo+ID4gKyAgICAgICBucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEws IG5vZGVfbmFtZSk7DQo+ID4gKyAgICAgICBpZiAoIW5wKSB7DQo+ID4gKyAgICAgICAgICAgICAg IGRldl9lcnIoc3ZzcC0+ZGV2LCAiY2Fubm90IGZpbmQgJXMgbm9kZVxuIiwgbm9kZV9uYW1lKTsN Cj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7DQo+ID4gKyAgICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgICAgcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobnAp Ow0KPiA+ICsgICAgICAgaWYgKCFwZGV2KSB7DQo+ID4gKyAgICAgICAgICAgICAgIG9mX25vZGVf cHV0KG5wKTsNCj4gPiArICAgICAgICAgICAgICAgZGV2X2VycihzdnNwLT5kZXYsICJjYW5ub3Qg ZmluZCBwZGV2IGJ5ICVzXG4iLCBub2RlX25hbWUpOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1 cm4gRVJSX1BUUigtRU5YSU8pOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIG9m X25vZGVfcHV0KG5wKTsNCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gJnBkZXYtPmRldjsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBkZXZpY2UgKnN2c19hZGRfZGV2aWNlX2xp bmsoc3RydWN0IHN2c19wbGF0Zm9ybSAqc3ZzcCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1OCAqbm9kZV9uYW1lKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBz dHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlX2xpbmsgKnN1cF9s aW5rOw0KPiA+ICsNCj4gPiArICAgICAgIGlmICghbm9kZV9uYW1lKSB7DQo+ID4gKyAgICAgICAg ICAgICAgIGRldl9lcnIoc3ZzcC0+ZGV2LCAibm9kZSBuYW1lIGNhbm5vdCBiZSBudWxsXG4iKTsN Cj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+ID4gKyAgICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgICAgZGV2ID0gc3ZzX2dldF9zdWJzeXNfZGV2aWNlKHN2c3As IG5vZGVfbmFtZSk7DQo+ID4gKyAgICAgICBpZiAoSVNfRVJSKGRldikpDQo+ID4gKyAgICAgICAg ICAgICAgIHJldHVybiBkZXY7DQo+ID4gKw0KPiA+ICsgICAgICAgc3VwX2xpbmsgPSBkZXZpY2Vf bGlua19hZGQoc3ZzcC0+ZGV2LCBkZXYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpOw0KPiA+ICsNCj4gPiArICAgICAg IGlmIChzdXBfbGluay0+c3RhdHVzID09IERMX1NUQVRFX0RPUk1BTlQpDQo+ID4gKyAgICAgICAg ICAgICAgIHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOw0KPiA+ICsNCj4gPiArICAgICAg IHJldHVybiBkZXY7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgc3ZzX3Jlc291cmNl X3NldHVwKHN0cnVjdCBzdnNfcGxhdGZvcm0gKnN2c3ApDQo+ID4gK3sNCj4gPiArICAgICAgIHN0 cnVjdCBzdnNfYmFuayAqc3ZzYjsNCj4gPiArICAgICAgIHN0cnVjdCBkZXZfcG1fb3BwICpvcHA7 DQo+ID4gKyAgICAgICB1bnNpZ25lZCBsb25nIGZyZXE7DQo+ID4gKyAgICAgICBpbnQgY291bnQs IHJldDsNCj4gPiArICAgICAgIHUzMiBpZHgsIGk7DQo+ID4gKw0KPiA+ICsgICAgICAgZGV2X3Nl dF9kcnZkYXRhKHN2c3AtPmRldiwgc3ZzcCk7DQo+ID4gKw0KPiA+ICsgICAgICAgZm9yIChpZHgg PSAwOyBpZHggPCBzdnNwLT5iYW5rX251bTsgaWR4KyspIHsNCj4gPiArICAgICAgICAgICAgICAg c3ZzYiA9ICZzdnNwLT5iYW5rc1tpZHhdOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgc3dp dGNoIChzdnNiLT5zd19pZCkgew0KPiA+ICsgICAgICAgICAgICAgICBjYXNlIFNWU0JfQ1BVX0xJ VFRMRToNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5uYW1lID0gIlNWU0JfQ1BV X0xJVFRMRSI7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAg ICAgICAgICAgIGNhc2UgU1ZTQl9DUFVfQklHOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IHN2c2ItPm5hbWUgPSAiU1ZTQl9DUFVfQklHIjsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgY2FzZSBTVlNCX0NDSToNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBzdnNiLT5uYW1lID0gIlNWU0JfQ0NJIjsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgY2FzZSBTVlNCX0dQVToN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5uYW1lID0gIlNWU0JfR1BVIjsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgZGVm YXVsdDoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBXQVJOX09OKDEpOw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgICAgICAgICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBzdnNiLT5kZXYgPSBkZXZtX2t6YWxsb2Moc3Zz cC0+ZGV2LCBzaXplb2YoKnN2c2ItPmRldiksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHRlBfS0VSTkVMKTsNCj4gPiArICAgICAgICAgICAgICAgaWYgKCFz dnNiLT5kZXYpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ ID4gKw0KPiA+ICsgICAgICAgICAgICAgICByZXQgPSBkZXZfc2V0X25hbWUoc3ZzYi0+ZGV2LCBz dnNiLT5uYW1lKTsNCj4gPiArICAgICAgICAgICAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgZGV2 X3NldF9kcnZkYXRhKHN2c2ItPmRldiwgc3ZzcCk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAg ICByZXQgPSBkZXZfcG1fb3BwX29mX2FkZF90YWJsZShzdnNiLT5vcHBfZGV2KTsNCj4gPiArICAg ICAgICAgICAgICAgaWYgKHJldCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRldl9l cnIoc3ZzYi0+ZGV2LCAiYWRkIG9wcCB0YWJsZSBmYWlsOiAlZFxuIiwgcmV0KTsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBtdXRleF9pbml0KCZzdnNiLT5sb2NrKTsNCj4gPiAr ICAgICAgICAgICAgICAgaW5pdF9jb21wbGV0aW9uKCZzdnNiLT5pbml0X2NvbXBsZXRpb24pOw0K PiA+ICsNCj4gPiArICAgICAgICAgICAgICAgc3ZzYi0+YnVjayA9IGRldm1fcmVndWxhdG9yX2dl dF9vcHRpb25hbChzdnNiLT5vcHBfZGV2LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPmJ1Y2tfbmFtZSk7DQo+ID4gKyAg ICAgICAgICAgICAgIGlmIChJU19FUlIoc3ZzYi0+YnVjaykpIHsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICBkZXZfZXJyKHN2c2ItPmRldiwgImNhbm5vdCBnZXQgXCIlcy1zdXBwbHlcIlxu IiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPmJ1Y2tfbmFtZSk7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIoc3ZzYi0+YnVjayk7 DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGNvdW50 ID0gZGV2X3BtX29wcF9nZXRfb3BwX2NvdW50KHN2c2ItPm9wcF9kZXYpOw0KPiA+ICsgICAgICAg ICAgICAgICBpZiAoc3ZzYi0+b3BwX2NvdW50ICE9IGNvdW50KSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgZGV2X2VycihzdnNiLT5kZXYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAib3BwX2NvdW50IG5vdCBcIiV1XCIgYnV0IGdldCBcIiVkXCI/XG4iLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+b3BwX2NvdW50LCBjb3VudCk7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50Ow0KPiA+ICsgICAgICAg ICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBmcmVxID0g VTMyX01BWDsgaSA8IHN2c2ItPm9wcF9jb3VudDsgaSsrLCBmcmVxLS0pIHsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBvcHAgPSBkZXZfcG1fb3BwX2ZpbmRfZnJlcV9mbG9vcihzdnNiLT5v cHBfZGV2LCAmZnJlcSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKElTX0VSUihv cHApKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKHN2c2It PmRldiwgImNhbm5vdCBmaW5kIGZyZXEgPSAlbGRcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBUUl9FUlIob3BwKSk7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihvcHApOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+b3Bw X2ZyZXFzW2ldID0gZnJlcTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5vcHBf dm9sdHNbaV0gPSBkZXZfcG1fb3BwX2dldF92b2x0YWdlKG9wcCk7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgc3ZzYi0+ZnJlcXNfcGN0W2ldID0gcGVyY2VudChzdnNiLT5vcHBfZnJlcXNb aV0sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdnNiLT5mcmVxX2Jhc2UpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRldl9w bV9vcHBfcHV0KG9wcCk7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJv b2wgc3ZzX210ODE4M19lZnVzZV9wYXJzaW5nKHN0cnVjdCBzdnNfcGxhdGZvcm0gKnN2c3ApDQo+ ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCB0aGVybWFsX3BhcmFtZXRlciB0cDsNCj4gPiArICAg ICAgIHN0cnVjdCBzdnNfYmFuayAqc3ZzYjsNCj4gPiArICAgICAgIGJvb2wgbW9uX21vZGVfc3Vw cG9ydCA9IHRydWU7DQo+ID4gKyAgICAgICBpbnQgZm9ybWF0WzZdLCB4X3Jvb210WzZdLCB0Yl9y b29tdCA9IDA7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDsNCj4gPiArICAg ICAgIHUzMiBpZHgsIGksIGZ0X3BnbSwgbXRzLCB0ZW1wMCwgdGVtcDEsIHRlbXAyOw0KPiA+ICsN Cj4gPiArICAgICAgIGlmIChzdnNwLT5mYWtlX2VmdXNlKSB7DQo+ID4gKyAgICAgICAgICAgICAg IHByX25vdGljZSgiZmFrZSBlZnVzZVxuIik7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c3AtPmVm dXNlWzBdID0gMHgwMDMxMDA4MDsNCj4gPiArICAgICAgICAgICAgICAgc3ZzcC0+ZWZ1c2VbMV0g PSAweGFiZmJmNzU3Ow0KPiA+ICsgICAgICAgICAgICAgICBzdnNwLT5lZnVzZVsyXSA9IDB4NDdj NzQ3Yzc7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c3AtPmVmdXNlWzNdID0gMHhhYmZiZjc1NzsN Cj4gPiArICAgICAgICAgICAgICAgc3ZzcC0+ZWZ1c2VbNF0gPSAweGU3ZmNhMGVjOw0KPiA+ICsg ICAgICAgICAgICAgICBzdnNwLT5lZnVzZVs1XSA9IDB4NDdiZjRiODg7DQo+ID4gKyAgICAgICAg ICAgICAgIHN2c3AtPmVmdXNlWzZdID0gMHhhYmZiOGZhNTsNCj4gPiArICAgICAgICAgICAgICAg c3ZzcC0+ZWZ1c2VbN10gPSAweGFiZmIyMTdiOw0KPiA+ICsgICAgICAgICAgICAgICBzdnNwLT5l ZnVzZVs4XSA9IDB4NGJmMzRiZTE7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c3AtPmVmdXNlWzld ID0gMHhhYmZiNjcwZDsNCj4gPiArICAgICAgICAgICAgICAgc3ZzcC0+ZWZ1c2VbMTZdID0gMHhh YmZiYzY1MzsNCj4gPiArICAgICAgICAgICAgICAgc3ZzcC0+ZWZ1c2VbMTddID0gMHg0N2YzNDdl MTsNCj4gPiArICAgICAgICAgICAgICAgc3ZzcC0+ZWZ1c2VbMThdID0gMHhhYmZiZDg0ODsNCj4g PiArICAgICAgIH0NCj4gDQo+IExvb2tzIGxpa2UgZGVidWdnaW5nIGNvZGUsIGRyb3AgdGhpcz8N Cg0KT2ssIEknbGwgcmVtb3ZlIGZha2VfZWZ1c2UgcmVsYXRlZCBjb2Rlcy4gVGhhbmtzLg0KDQo+ IA0KPiA+ICsNCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdnNwLT5lZnVzZV9udW07IGkr KykNCj4gPiArICAgICAgICAgICAgICAgaWYgKHN2c3AtPmVmdXNlW2ldKQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGRldl9ub3RpY2Uoc3ZzcC0+ZGV2LCAiTV9IV19SRVMlZDogMHglMDh4 XG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgc3ZzcC0+ZWZ1 c2VbaV0pOw0KPiANCj4gZGV2X2RiZz8NCg0KVGhpcyBpcyBhbiB2ZXJ5IGltcG9ydGFudCBpbmZv IHdoZW4gc3lzdGVtIGNhbm5vdCBib290cyB1cCBzdWNjZXNzZnVsbHkNCmFmdGVyIGFwcGx5aW5n IFNWUyBiYW5rIHZvbHRhZ2VzLiBJJ2xsIGRvd25ncmFkZSB0aGUgcHJpbnQgbGV2ZWwgdG8NCmRl dl9pbmZvLlRoYW5rcy4NCg0KPiANCj4gPiArDQo+ID4gKyAgICAgICAvKiBTdnMgZWZ1c2UgcGFy c2luZyAqLw0KPiA+ICsgICAgICAgZnRfcGdtID0gKHN2c3AtPmVmdXNlWzBdID4+IDQpICYgR0VO TUFTSygzLCAwKTsNCj4gPiArDQo+ID4gKyAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IHN2c3At PmJhbmtfbnVtOyBpZHgrKykgew0KPiA+ICsgICAgICAgICAgICAgICBzdnNiID0gJnN2c3AtPmJh bmtzW2lkeF07DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoZnRfcGdtIDw9IDEpDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+aW5pdDAxX3ZvbHRfZmxhZyA9IFNWU0Jf SU5JVDAxX1ZPTFRfSUdOT1JFOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgc3dpdGNoIChz dnNiLT5zd19pZCkgew0KPiA+ICsgICAgICAgICAgICAgICBjYXNlIFNWU0JfQ1BVX0xJVFRMRToN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5iZGVzID0gc3ZzcC0+ZWZ1c2VbMTZd ICYgR0VOTUFTSyg3LCAwKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5tZGVz ID0gKHN2c3AtPmVmdXNlWzE2XSA+PiA4KSAmIEdFTk1BU0soNywgMCk7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgc3ZzYi0+ZGNiZGV0ID0gKHN2c3AtPmVmdXNlWzE2XSA+PiAxNikgJiBH RU5NQVNLKDcsIDApOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPmRjbWRldCA9 IChzdnNwLT5lZnVzZVsxNl0gPj4gMjQpICYgR0VOTUFTSyg3LCAwKTsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBzdnNiLT5tdGRlcyAgPSAoc3ZzcC0+ZWZ1c2VbMTddID4+IDE2KSAmIEdF Tk1BU0soNywgMCk7DQo+IA0KPiBBZ2FpbiwgaWYgYWxsIG9mIHRob3NlIHZhbHVlcyB3ZXJlIHU4 LCB0aGVyZSdkIGJlIG5vIG5lZWQgZm9yIHRoZXNlIEdFTk1BU0sNCg0KT2ssIEknbGwgdXNlIHU4 IGluc3RlYWQgb2YgR0VOTUFTSy4gVGhhbmtzLg0KDQo+IA0KPiA+ICsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBpZiAoZnRfcGdtIDw9IDMpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdnNiLT52b2x0X29mZnNldCArPSAxMDsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT52 b2x0X29mZnNldCArPSAyOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ ICsgICAgICAgICAgICAgICBjYXNlIFNWU0JfQ1BVX0JJRzoNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICBzdnNiLT5iZGVzID0gc3ZzcC0+ZWZ1c2VbMThdICYgR0VOTUFTSyg3LCAwKTsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5tZGVzID0gKHN2c3AtPmVmdXNlWzE4XSA+ PiA4KSAmIEdFTk1BU0soNywgMCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+ ZGNiZGV0ID0gKHN2c3AtPmVmdXNlWzE4XSA+PiAxNikgJiBHRU5NQVNLKDcsIDApOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPmRjbWRldCA9IChzdnNwLT5lZnVzZVsxOF0gPj4g MjQpICYgR0VOTUFTSyg3LCAwKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5t dGRlcyAgPSBzdnNwLT5lZnVzZVsxN10gJiBHRU5NQVNLKDcsIDApOw0KPiA+ICsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBpZiAoZnRfcGdtIDw9IDMpDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdnNiLT52b2x0X29mZnNldCArPSAxNTsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dnNiLT52b2x0X29mZnNldCArPSAxMjsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBicmVh azsNCj4gPiArICAgICAgICAgICAgICAgY2FzZSBTVlNCX0NDSToNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICBzdnNiLT5iZGVzID0gc3ZzcC0+ZWZ1c2VbNF0gJiBHRU5NQVNLKDcsIDApOw0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPm1kZXMgPSAoc3ZzcC0+ZWZ1c2VbNF0g Pj4gOCkgJiBHRU5NQVNLKDcsIDApOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHN2c2It PmRjYmRldCA9IChzdnNwLT5lZnVzZVs0XSA+PiAxNikgJiBHRU5NQVNLKDcsIDApOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPmRjbWRldCA9IChzdnNwLT5lZnVzZVs0XSA+PiAy NCkgJiBHRU5NQVNLKDcsIDApOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPm10 ZGVzICA9IChzdnNwLT5lZnVzZVs1XSA+PiAxNikgJiBHRU5NQVNLKDcsIDApOw0KPiA+ICsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnRfcGdtIDw9IDMpDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT52b2x0X29mZnNldCArPSAxMDsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdnNiLT52b2x0X29mZnNldCArPSAyOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAgICBjYXNlIFNWU0JfR1BVOg0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIHN2c2ItPmJkZXMgPSBzdnNwLT5lZnVzZVs2XSAmIEdFTk1BU0soNywg MCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+bWRlcyA9IChzdnNwLT5lZnVz ZVs2XSA+PiA4KSAmIEdFTk1BU0soNywgMCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg c3ZzYi0+ZGNiZGV0ID0gKHN2c3AtPmVmdXNlWzZdID4+IDE2KSAmIEdFTk1BU0soNywgMCk7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+ZGNtZGV0ID0gKHN2c3AtPmVmdXNlWzZd ID4+IDI0KSAmIEdFTk1BU0soNywgMCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3Zz Yi0+bXRkZXMgID0gc3ZzcC0+ZWZ1c2VbNV0gJiBHRU5NQVNLKDcsIDApOw0KPiA+ICsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnRfcGdtID49IDIpIHsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPmZyZXFfYmFzZSA9IDgwMDAwMDAwMDsgLyogODAw TUh6ICovDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5kdnRfZml4 ZWQgPSAyOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgZGVmYXVsdDoNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsg ICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIC8qIEdldCB0aGVybWFsIGVmdXNlIGJ5IG52bWVt ICovDQo+ID4gKyAgICAgICBjZWxsID0gbnZtZW1fY2VsbF9nZXQoc3ZzcC0+ZGV2LCAidC1jYWxp YnJhdGlvbi1kYXRhIik7DQo+ID4gKyAgICAgICBpZiAoSVNfRVJSX09SX05VTEwoY2VsbCkpIHsN Cj4gPiArICAgICAgICAgICAgICAgZGV2X2VycihzdnNwLT5kZXYsICJubyB0aGVybWFsIGNlbGws IG5vIG1vbiBtb2RlXG4iKTsNCj4gPiArICAgICAgICAgICAgICAgZm9yIChpZHggPSAwOyBpZHgg PCBzdnNwLT5iYW5rX251bTsgaWR4KyspIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBz dnNiID0gJnN2c3AtPmJhbmtzW2lkeF07DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3Zz Yi0+bW9kZV9zdXBwb3J0ICY9IH5TVlNCX01PREVfTU9OOw0KPiA+ICsgICAgICAgICAgICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCj4gPiArICAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgICBzdnNwLT50ZWZ1c2UgPSAodTMyICopbnZtZW1fY2VsbF9yZWFk KGNlbGwsICZzdnNwLT50ZWZ1c2VfbnVtKTsNCj4gDQo+IENhc3Qgbm90IG5lZWRlZC4NCg0KT2ss IEknbGwgcmVtb3ZlIGl0IGlmIGJ1aWxkL3Rlc3Qgb2suIEJlY2F1c2UgbnZtZW1fY2VsbF9yZWFk IHJldHVybnMNCih2b2lkICopLg0KDQo+IA0KPiBBbHNvLCB0aGlzIG5lZWQgdG8gYmUgZnJlZWQg c29tZXdoZXJlIGluIHJlbW92ZSBjb2RlIChrZnJlZShzdnNwLT50ZWZ1c2UpKS4NCj4gDQo+IEFu ZCBpdCBzZWVtcyBsaWtlIHN2c3AtPnRlZnVzZSBpcyBvbmx5IHVzZWQgaW4gdGhpcyBmdW5jdGlv biwgY2FuIHlvdQ0KPiBqdXN0IGFsbG9jYXRlIGl0IGhlcmU/DQoNCk9oLCBzdnNwLT50ZWZ1c2Ug d2lsbCBiZSB1c2VkIGluIFNWUyBkZWJ1ZyBwYXRjaCBmb3IgZGVidWcgcHVycG9zZS4gU28sDQpJ IG5lZWQgdG8gc2F2ZSBpdCBhcyBzdHJ1Y3QgbWVtYmVyLg0KDQo+IA0KPiA+ICsgICAgICAgc3Zz cC0+dGVmdXNlX251bSAvPSBzaXplb2YodTMyKTsNCj4gPiArICAgICAgIG52bWVtX2NlbGxfcHV0 KGNlbGwpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChzdnNwLT5mYWtlX2VmdXNlKSB7DQo+ID4g KyAgICAgICAgICAgICAgIHN2c3AtPnRlZnVzZVswXSA9IDB4MDI4NzNmNjk7DQo+ID4gKyAgICAg ICAgICAgICAgIHN2c3AtPnRlZnVzZVsxXSA9IDB4YTExZDkxNDI7DQo+ID4gKyAgICAgICAgICAg ICAgIHN2c3AtPnRlZnVzZVsyXSA9IDB4YTI1MjY5MDA7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0K PiA+ICsgICAgICAgLyogVGhlcm1hbCBlZnVzZSBwYXJzaW5nICovDQo+ID4gKyAgICAgICB0cC5h ZGNfZ2VfdCA9IChzdnNwLT50ZWZ1c2VbMV0gPj4gMjIpICYgR0VOTUFTSyg5LCAwKTsNCj4gPiAr ICAgICAgIHRwLmFkY19vZV90ID0gKHN2c3AtPnRlZnVzZVsxXSA+PiAxMikgJiBHRU5NQVNLKDks IDApOw0KPiA+ICsNCj4gPiArICAgICAgIHRwLm9fdnRzbWN1MSA9IChzdnNwLT50ZWZ1c2VbMF0g Pj4gMTcpICYgR0VOTUFTSyg4LCAwKTsNCj4gPiArICAgICAgIHRwLm9fdnRzbWN1MiA9IChzdnNw LT50ZWZ1c2VbMF0gPj4gOCkgJiBHRU5NQVNLKDgsIDApOw0KPiA+ICsgICAgICAgdHAub192dHNt Y3UzID0gc3ZzcC0+dGVmdXNlWzFdICYgR0VOTUFTSyg4LCAwKTsNCj4gPiArICAgICAgIHRwLm9f dnRzbWN1NCA9IChzdnNwLT50ZWZ1c2VbMl0gPj4gMjMpICYgR0VOTUFTSyg4LCAwKTsNCj4gPiAr ICAgICAgIHRwLm9fdnRzbWN1NSA9IChzdnNwLT50ZWZ1c2VbMl0gPj4gNSkgJiBHRU5NQVNLKDgs IDApOw0KPiA+ICsgICAgICAgdHAub192dHNhYmIgPSAoc3ZzcC0+dGVmdXNlWzJdID4+IDE0KSAm IEdFTk1BU0soOCwgMCk7DQo+ID4gKw0KPiA+ICsgICAgICAgdHAuZGVnY19jYWxpID0gKHN2c3At PnRlZnVzZVswXSA+PiAxKSAmIEdFTk1BU0soNSwgMCk7DQo+ID4gKyAgICAgICB0cC5hZGNfY2Fs aV9lbl90ID0gc3ZzcC0+dGVmdXNlWzBdICYgQklUKDApOw0KPiA+ICsgICAgICAgdHAub19zbG9w ZV9zaWduID0gKHN2c3AtPnRlZnVzZVswXSA+PiA3KSAmIEJJVCgwKTsNCj4gPiArDQo+ID4gKyAg ICAgICB0cC50c19pZCA9IChzdnNwLT50ZWZ1c2VbMV0gPj4gOSkgJiBCSVQoMCk7DQo+ID4gKyAg ICAgICB0cC5vX3Nsb3BlID0gKHN2c3AtPnRlZnVzZVswXSA+PiAyNikgJiBHRU5NQVNLKDUsIDAp Ow0KPiA+ICsNCj4gPiArICAgICAgIGlmICh0cC5hZGNfY2FsaV9lbl90ID09IDEpIHsNCj4gPiAr ICAgICAgICAgICAgICAgaWYgKCF0cC50c19pZCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICB0cC5vX3Nsb3BlID0gMDsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGlmICgodHAuYWRj X2dlX3QgPCAyNjUgfHwgdHAuYWRjX2dlX3QgPiA3NTgpIHx8DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAodHAuYWRjX29lX3QgPCAyNjUgfHwgdHAuYWRjX29lX3QgPiA3NTgpIHx8DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAodHAub192dHNtY3UxIDwgLTggfHwgdHAub192dHNtY3UxID4gNDg0 KSB8fA0KPiA+ICsgICAgICAgICAgICAgICAgICAgKHRwLm9fdnRzbWN1MiA8IC04IHx8IHRwLm9f dnRzbWN1MiA+IDQ4NCkgfHwNCj4gPiArICAgICAgICAgICAgICAgICAgICh0cC5vX3Z0c21jdTMg PCAtOCB8fCB0cC5vX3Z0c21jdTMgPiA0ODQpIHx8DQo+ID4gKyAgICAgICAgICAgICAgICAgICAo dHAub192dHNtY3U0IDwgLTggfHwgdHAub192dHNtY3U0ID4gNDg0KSB8fA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgKHRwLm9fdnRzbWN1NSA8IC04IHx8IHRwLm9fdnRzbWN1NSA+IDQ4NCkgfHwN Cj4gPiArICAgICAgICAgICAgICAgICAgICh0cC5vX3Z0c2FiYiA8IC04IHx8IHRwLm9fdnRzYWJi ID4gNDg0KSB8fA0KPiA+ICsgICAgICAgICAgICAgICAgICAgKHRwLmRlZ2NfY2FsaSA8IDEgfHwg dHAuZGVnY19jYWxpID4gNjMpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGV2X2Vy cihzdnNwLT5kZXYsICJiYWQgdGhlcm1hbCBlZnVzZSwgbm8gbW9uIG1vZGVcbiIpOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIG1vbl9tb2RlX3N1cHBvcnQgPSBmYWxzZTsNCj4gPiArICAg ICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAg ZGV2X2VycihzdnNwLT5kZXYsICJubyB0aGVybWFsIGVmdXNlLCBubyBtb24gbW9kZVxuIik7DQo+ ID4gKyAgICAgICAgICAgICAgIG1vbl9tb2RlX3N1cHBvcnQgPSBmYWxzZTsNCj4gPiArICAgICAg IH0NCj4gPiArDQo+ID4gKyAgICAgICBpZiAoIW1vbl9tb2RlX3N1cHBvcnQpIHsNCj4gPiArICAg ICAgICAgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBzdnNwLT5iYW5rX251bTsgaWR4KyspIHsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiID0gJnN2c3AtPmJhbmtzW2lkeF07DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+bW9kZV9zdXBwb3J0ICY9IH5TVlNCX01P REVfTU9OOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAg ICByZXR1cm4gdHJ1ZTsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICB0cC5nZSA9 ICgodHAuYWRjX2dlX3QgLSA1MTIpICogMTAwMDApIC8gNDA5NjsNCj4gPiArICAgICAgIHRwLm9l ID0gKHRwLmFkY19vZV90IC0gNTEyKTsNCj4gPiArICAgICAgIHRwLmdhaW4gPSAoMTAwMDAgKyB0 cC5nZSk7DQo+ID4gKw0KPiA+ICsgICAgICAgZm9ybWF0WzBdID0gKHRwLm9fdnRzbWN1MSArIDMz NTAgLSB0cC5vZSk7DQo+ID4gKyAgICAgICBmb3JtYXRbMV0gPSAodHAub192dHNtY3UyICsgMzM1 MCAtIHRwLm9lKTsNCj4gPiArICAgICAgIGZvcm1hdFsyXSA9ICh0cC5vX3Z0c21jdTMgKyAzMzUw IC0gdHAub2UpOw0KPiA+ICsgICAgICAgZm9ybWF0WzNdID0gKHRwLm9fdnRzbWN1NCArIDMzNTAg LSB0cC5vZSk7DQo+ID4gKyAgICAgICBmb3JtYXRbNF0gPSAodHAub192dHNtY3U1ICsgMzM1MCAt IHRwLm9lKTsNCj4gPiArICAgICAgIGZvcm1hdFs1XSA9ICh0cC5vX3Z0c2FiYiArIDMzNTAgLSB0 cC5vZSk7DQo+ID4gKw0KPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykNCj4gPiAr ICAgICAgICAgICAgICAgeF9yb29tdFtpXSA9ICgoKGZvcm1hdFtpXSAqIDEwMDAwKSAvIDQwOTYp ICogMTAwMDApIC8gdHAuZ2FpbjsNCj4gPiArDQo+ID4gKyAgICAgICB0ZW1wMCA9ICgxMDAwMCAq IDEwMDAwMCAvIHRwLmdhaW4pICogMTUgLyAxODsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoIXRw Lm9fc2xvcGVfc2lnbikNCj4gPiArICAgICAgICAgICAgICAgbXRzID0gKHRlbXAwICogMTApIC8g KDE1MzQgKyB0cC5vX3Nsb3BlICogMTApOw0KPiA+ICsgICAgICAgZWxzZQ0KPiA+ICsgICAgICAg ICAgICAgICBtdHMgPSAodGVtcDAgKiAxMCkgLyAoMTUzNCAtIHRwLm9fc2xvcGUgKiAxMCk7DQo+ ID4gKw0KPiA+ICsgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBzdnNwLT5iYW5rX251bTsgaWR4 KyspIHsNCj4gPiArICAgICAgICAgICAgICAgc3ZzYiA9ICZzdnNwLT5iYW5rc1tpZHhdOw0KPiA+ ICsgICAgICAgICAgICAgICBzdnNiLT5tdHMgPSBtdHM7DQo+ID4gKw0KPiA+ICsgICAgICAgICAg ICAgICBzd2l0Y2ggKHN2c2ItPnN3X2lkKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGNhc2UgU1ZT Ql9DUFVfTElUVExFOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHRiX3Jvb210ID0geF9y b29tdFszXTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAg ICAgICAgICAgY2FzZSBTVlNCX0NQVV9CSUc6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg dGJfcm9vbXQgPSB4X3Jvb210WzRdOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KPiA+ICsgICAgICAgICAgICAgICBjYXNlIFNWU0JfQ0NJOg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIHRiX3Jvb210ID0geF9yb29tdFszXTsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgY2FzZSBTVlNCX0dQVToNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICB0Yl9yb29tdCA9IHhfcm9vbXRbMV07DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICAgIGRlZmF1bHQ6DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgICAgICAgICAgIHRlbXAwID0gKHRwLmRlZ2NfY2FsaSAqIDEwIC8gMik7 DQo+ID4gKyAgICAgICAgICAgICAgIHRlbXAxID0gKCgxMDAwMCAqIDEwMDAwMCAvIDQwOTYgLyB0 cC5nYWluKSAqDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIHRwLm9lICsgdGJfcm9vbXQg KiAxMCkgKiAxNSAvIDE4Ow0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgaWYgKCF0cC5vX3Ns b3BlX3NpZ24pDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdGVtcDIgPSB0ZW1wMSAqIDEw MCAvICgxNTM0ICsgdHAub19zbG9wZSAqIDEwKTsNCj4gPiArICAgICAgICAgICAgICAgZWxzZQ0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHRlbXAyID0gdGVtcDEgKiAxMDAgLyAoMTUzNCAt IHRwLm9fc2xvcGUgKiAxMCk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBzdnNiLT5idHMg PSAodGVtcDAgKyB0ZW1wMiAtIDI1MCkgKiA0IC8gMTA7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0K PiA+ICsgICAgICAgcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29s IHN2c19pc19zdXBwb3J0ZWQoc3RydWN0IHN2c19wbGF0Zm9ybSAqc3ZzcCkNCj4gPiArew0KPiA+ ICsgICAgICAgc3RydWN0IG52bWVtX2NlbGwgKmNlbGw7DQo+ID4gKw0KPiA+ICsgICAgICAgLyog R2V0IHN2cyBlZnVzZSBieSBudm1lbSAqLw0KPiA+ICsgICAgICAgY2VsbCA9IG52bWVtX2NlbGxf Z2V0KHN2c3AtPmRldiwgInN2cy1jYWxpYnJhdGlvbi1kYXRhIik7DQo+ID4gKyAgICAgICBpZiAo SVNfRVJSX09SX05VTEwoY2VsbCkpIHsNCj4gPiArICAgICAgICAgICAgICAgZGV2X2VycihzdnNw LT5kZXYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIm5vIFwic3ZzLWNhbGlicmF0aW9u LWRhdGFcIiBmcm9tIGR0cz8gZGlzYWJsZSBzdnNcbiIpOw0KPiA+ICsgICAgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgc3ZzcC0+ZWZ1 c2UgPSAodTMyICopbnZtZW1fY2VsbF9yZWFkKGNlbGwsICZzdnNwLT5lZnVzZV9udW0pOw0KPiAN Cj4gU2ltaWxhciB0byB0ZWZ1c2UsIEkgdGhpbmsgZWZ1c2UgaXMgb25seSB1c2VkIGF0IGluaXQg dGltZSwgc28gbWF5YmUNCj4gaXQgY2EgYmUgYSBsb2NhbCB2YXJpYWJsZT8NCg0KT2gsIHN2c3At PmVmdXNlIHdpbGwgYmUgdXNlZCBpbiBTVlMgZGVidWcgcGF0Y2ggZm9yIGRlYnVnIHB1cnBvc2Uu IFNvLCBJDQpuZWVkIHRvIHNhdmUgaXQgYXMgc3RydWN0IG1lbWJlci4NCg0KPiANCj4gPiArICAg ICAgIHN2c3AtPmVmdXNlX251bSAvPSBzaXplb2YodTMyKTsNCj4gPiArICAgICAgIG52bWVtX2Nl bGxfcHV0KGNlbGwpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmICghc3ZzcC0+ZmFrZV9lZnVzZSAm JiAhc3ZzcC0+ZWZ1c2Vbc3ZzcC0+ZWZ1c2VfY2hlY2tdKSB7DQo+ID4gKyAgICAgICAgICAgICAg IGRldl9lcnIoc3ZzcC0+ZGV2LCAic3ZzX2VmdXNlWyV1XSA9IDB4JXg/XG4iLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIHN2c3AtPmVmdXNlX2NoZWNrLCBzdnNwLT5lZnVzZVtzdnNwLT5l ZnVzZV9jaGVja10pOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQo+ID4gKyAg ICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIHN2c3AtPmVmdXNlX3BhcnNpbmcoc3Zz cCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgc3ZzX3N1c3BlbmQoc3RydWN0IGRl dmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ZzX3BsYXRmb3JtICpzdnNw ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ZzX2JhbmsgKnN2 c2I7DQo+ID4gKyAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiA+ICsgICAgICAgaW50IHJl dDsNCj4gPiArICAgICAgIHUzMiBpZHg7DQo+ID4gKw0KPiA+ICsgICAgICAgZm9yIChpZHggPSAw OyBpZHggPCBzdnNwLT5iYW5rX251bTsgaWR4KyspIHsNCj4gPiArICAgICAgICAgICAgICAgc3Zz YiA9ICZzdnNwLT5iYW5rc1tpZHhdOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgLyogV2Fp dCBpZiBzdnNfaXNyKCkgaXMgc3RpbGwgaW4gcHJvY2Vzcy4gKi8NCj4gPiArICAgICAgICAgICAg ICAgc3Bpbl9sb2NrX2lycXNhdmUoJm10a19zdnNfbG9jaywgZmxhZ3MpOw0KPiA+ICsgICAgICAg ICAgICAgICBzdnNwLT5wYmFuayA9IHN2c2I7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c19zd2l0 Y2hfYmFuayhzdnNwKTsNCj4gPiArICAgICAgICAgICAgICAgc3ZzX3dyaXRlbChzdnNwLCBTVlNC X0VOX09GRiwgU1ZTRU4pOw0KPiA+ICsgICAgICAgICAgICAgICBzdnNfd3JpdGVsKHN2c3AsIFNW U0JfSU5UU1RTX0NMRUFOLCBJTlRTVFMpOw0KPiA+ICsgICAgICAgICAgICAgICBzcGluX3VubG9j a19pcnFyZXN0b3JlKCZtdGtfc3ZzX2xvY2ssIGZsYWdzKTsNCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICAgIHN2c2ItPnN1c3BlbmRlZCA9IHRydWU7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChz dnNiLT5waGFzZSAhPSBTVlNCX1BIQVNFX0lOSVQwMSkgew0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIHN2c2ItPnBoYXNlID0gU1ZTQl9QSEFTRV9FUlJPUjsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICBzdnNfYWRqdXN0X3BtX29wcF92b2x0cyhzdnNiLCB0cnVlKTsNCj4gPiArICAg ICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIGlmIChzdnNw LT5yc3QpIHsNCj4gPiArICAgICAgICAgICAgICAgcmV0ID0gcmVzZXRfY29udHJvbF9hc3NlcnQo c3ZzcC0+cnN0KTsNCj4gPiArICAgICAgICAgICAgICAgaWYgKHJldCkgew0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGRldl9lcnIoc3ZzcC0+ZGV2LCAiY2Fubm90IGFzc2VydCByZXNldCAl ZFxuIiwgcmV0KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ ICsgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgY2xr X2Rpc2FibGVfdW5wcmVwYXJlKHN2c3AtPm1haW5fY2xrKTsNCj4gPiArDQo+ID4gKyAgICAgICBy ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBzdnNfcmVzdW1lKHN0cnVj dCBkZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHN2c19wbGF0Zm9ybSAq c3ZzcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsgICAgICAgc3RydWN0IHN2c19iYW5r ICpzdnNiOw0KPiA+ICsgICAgICAgaW50IHJldDsNCj4gPiArICAgICAgIHUzMiBpZHg7DQo+ID4g Kw0KPiA+ICsgICAgICAgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHN2c3AtPm1haW5fY2xrKTsN Cj4gPiArICAgICAgIGlmIChyZXQpIHsNCj4gPiArICAgICAgICAgICAgICAgZGV2X2VycihzdnNw LT5kZXYsICJjYW5ub3QgZW5hYmxlIG1haW5fY2xrLCBkaXNhYmxlIHN2c1xuIik7DQo+ID4gKyAg ICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAg ICAgaWYgKHN2c3AtPnJzdCkgew0KPiA+ICsgICAgICAgICAgICAgICByZXQgPSByZXNldF9jb250 cm9sX2RlYXNzZXJ0KHN2c3AtPnJzdCk7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChyZXQpIHsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKHN2c3AtPmRldiwgImNhbm5vdCBk ZWFzc2VydCByZXNldCAlZFxuIiwgcmV0KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gcmV0Ow0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICB9DQo+ID4gKw0K PiA+ICsgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBzdnNwLT5iYW5rX251bTsgaWR4KyspIHsN Cj4gPiArICAgICAgICAgICAgICAgc3ZzYiA9ICZzdnNwLT5iYW5rc1tpZHhdOw0KPiA+ICsgICAg ICAgICAgICAgICBzdnNiLT5zdXNwZW5kZWQgPSBmYWxzZTsNCj4gPiArICAgICAgIH0NCj4gPiAr DQo+ID4gKyAgICAgICByZXQgPSBzdnNfaW5pdDAyKHN2c3ApOw0KPiA+ICsgICAgICAgaWYgKHJl dCkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKyAgICAgICBz dnNfbW9uX21vZGUoc3ZzcCk7DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3Qgc3ZzX2Jhbmsgc3ZzX210ODE4M19iYW5rc1s0XSA9 IHsNCj4gPiArICAgICAgIHsNCj4gPiArICAgICAgICAgICAgICAgLnN3X2lkICAgICAgICAgICAg ICAgICAgPSBTVlNCX0NQVV9MSVRUTEUsDQo+ID4gKyAgICAgICAgICAgICAgIC5jcHVfaWQgICAg ICAgICAgICAgICAgID0gMCwNCj4gPiArICAgICAgICAgICAgICAgLnR6b25lX25hbWUgICAgICAg ICAgICAgPSAidHp0czQiLA0KPiA+ICsgICAgICAgICAgICAgICAuYnVja19uYW1lICAgICAgICAg ICAgICA9ICJwcm9jIiwNCj4gPiArICAgICAgICAgICAgICAgLnBkX3JlcSAgICAgICAgICAgICAg ICAgPSBmYWxzZSwNCj4gPiArICAgICAgICAgICAgICAgLmluaXQwMV92b2x0X2ZsYWcgICAgICAg PSBTVlNCX0lOSVQwMV9WT0xUX0lOQ19PTkxZLA0KPiA+ICsgICAgICAgICAgICAgICAubW9kZV9z dXBwb3J0ICAgICAgICAgICA9IFNWU0JfTU9ERV9JTklUMDEgfCBTVlNCX01PREVfSU5JVDAyLA0K PiA+ICsgICAgICAgICAgICAgICAub3BwX2NvdW50ICAgICAgICAgICAgICA9IDE2LA0KPiA+ICsg ICAgICAgICAgICAgICAuZnJlcV9iYXNlICAgICAgICAgICAgICA9IDE5ODkwMDAwMDAsDQo+ID4g KyAgICAgICAgICAgICAgIC52Ym9vdCAgICAgICAgICAgICAgICAgID0gMHgzMCwNCj4gPiArICAg ICAgICAgICAgICAgLnZvbHRfc3RlcCAgICAgICAgICAgICAgPSA2MjUwLA0KPiA+ICsgICAgICAg ICAgICAgICAudm9sdF9iYXNlICAgICAgICAgICAgICA9IDUwMDAwMCwNCj4gPiArICAgICAgICAg ICAgICAgLnZvbHRfb2Zmc2V0ICAgICAgICAgICAgPSAwLA0KPiA+ICsgICAgICAgICAgICAgICAu dm1heCAgICAgICAgICAgICAgICAgICA9IDB4NjQsDQo+ID4gKyAgICAgICAgICAgICAgIC52bWlu ICAgICAgICAgICAgICAgICAgID0gMHgxOCwNCj4gPiArICAgICAgICAgICAgICAgLmR0aGkgICAg ICAgICAgICAgICAgICAgPSAweDEsDQo+ID4gKyAgICAgICAgICAgICAgIC5kdGxvICAgICAgICAg ICAgICAgICAgID0gMHhmZSwNCj4gPiArICAgICAgICAgICAgICAgLmRldF93aW5kb3cgICAgICAg ICAgICAgPSAweGEyOCwNCj4gPiArICAgICAgICAgICAgICAgLmRldF9tYXggICAgICAgICAgICAg ICAgPSAweGZmZmYsDQo+ID4gKyAgICAgICAgICAgICAgIC5hZ2VfY29uZmlnICAgICAgICAgICAg ID0gMHg1NTU1NTUsDQo+ID4gKyAgICAgICAgICAgICAgIC5hZ2VtICAgICAgICAgICAgICAgICAg ID0gMCwNCj4gPiArICAgICAgICAgICAgICAgLmRjX2NvbmZpZyAgICAgICAgICAgICAgPSAweDU1 NTU1NSwNCj4gPiArICAgICAgICAgICAgICAgLmR2dF9maXhlZCAgICAgICAgICAgICAgPSAweDcs DQo+ID4gKyAgICAgICAgICAgICAgIC52Y28gICAgICAgICAgICAgICAgICAgID0gMHgxMCwNCj4g PiArICAgICAgICAgICAgICAgLmNoa19zaGlmdCAgICAgICAgICAgICAgPSAweDc3LA0KPiA+ICsg ICAgICAgICAgICAgICAudGVtcF91cHBlcl9ib3VuZCAgICAgICA9IDB4NjQsDQo+ID4gKyAgICAg ICAgICAgICAgIC50ZW1wX2xvd2VyX2JvdW5kICAgICAgID0gMHhiMiwNCj4gPiArICAgICAgICAg ICAgICAgLnR6b25lX2hpZ2hfdGVtcCAgICAgICAgPSBTVlNCX1RaT05FX0hJR0hfVEVNUF9NQVgs DQo+ID4gKyAgICAgICAgICAgICAgIC50em9uZV9sb3dfdGVtcCAgICAgICAgID0gMjUwMDAsDQo+ ID4gKyAgICAgICAgICAgICAgIC50em9uZV9sb3dfdGVtcF9vZmZzZXQgID0gMCwNCj4gPiArICAg ICAgICAgICAgICAgLmNvcmVfc2VsICAgICAgICAgICAgICAgPSAweDhmZmYwMDAwLA0KPiA+ICsg ICAgICAgICAgICAgICAuaW50X3N0ICAgICAgICAgICAgICAgICA9IEJJVCgwKSwNCj4gPiArICAg ICAgICAgICAgICAgLmN0bDAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDAxLA0KPiA+ICsg ICAgICAgfSwNCj4gPiArICAgICAgIHsNCj4gPiArICAgICAgICAgICAgICAgLnN3X2lkICAgICAg ICAgICAgICAgICAgPSBTVlNCX0NQVV9CSUcsDQo+ID4gKyAgICAgICAgICAgICAgIC5jcHVfaWQg ICAgICAgICAgICAgICAgID0gNCwNCj4gPiArICAgICAgICAgICAgICAgLnR6b25lX25hbWUgICAg ICAgICAgICAgPSAidHp0czUiLA0KPiA+ICsgICAgICAgICAgICAgICAuYnVja19uYW1lICAgICAg ICAgICAgICA9ICJwcm9jIiwNCj4gPiArICAgICAgICAgICAgICAgLnBkX3JlcSAgICAgICAgICAg ICAgICAgPSBmYWxzZSwNCj4gPiArICAgICAgICAgICAgICAgLmluaXQwMV92b2x0X2ZsYWcgICAg ICAgPSBTVlNCX0lOSVQwMV9WT0xUX0lOQ19PTkxZLA0KPiA+ICsgICAgICAgICAgICAgICAubW9k ZV9zdXBwb3J0ICAgICAgICAgICA9IFNWU0JfTU9ERV9JTklUMDEgfCBTVlNCX01PREVfSU5JVDAy LA0KPiA+ICsgICAgICAgICAgICAgICAub3BwX2NvdW50ICAgICAgICAgICAgICA9IDE2LA0KPiA+ ICsgICAgICAgICAgICAgICAuZnJlcV9iYXNlICAgICAgICAgICAgICA9IDE5ODkwMDAwMDAsDQo+ ID4gKyAgICAgICAgICAgICAgIC52Ym9vdCAgICAgICAgICAgICAgICAgID0gMHgzMCwNCj4gPiAr ICAgICAgICAgICAgICAgLnZvbHRfc3RlcCAgICAgICAgICAgICAgPSA2MjUwLA0KPiA+ICsgICAg ICAgICAgICAgICAudm9sdF9iYXNlICAgICAgICAgICAgICA9IDUwMDAwMCwNCj4gPiArICAgICAg ICAgICAgICAgLnZvbHRfb2Zmc2V0ICAgICAgICAgICAgPSAwLA0KPiA+ICsgICAgICAgICAgICAg ICAudm1heCAgICAgICAgICAgICAgICAgICA9IDB4NTgsDQo+ID4gKyAgICAgICAgICAgICAgIC52 bWluICAgICAgICAgICAgICAgICAgID0gMHgxMCwNCj4gPiArICAgICAgICAgICAgICAgLmR0aGkg ICAgICAgICAgICAgICAgICAgPSAweDEsDQo+ID4gKyAgICAgICAgICAgICAgIC5kdGxvICAgICAg ICAgICAgICAgICAgID0gMHhmZSwNCj4gPiArICAgICAgICAgICAgICAgLmRldF93aW5kb3cgICAg ICAgICAgICAgPSAweGEyOCwNCj4gPiArICAgICAgICAgICAgICAgLmRldF9tYXggICAgICAgICAg ICAgICAgPSAweGZmZmYsDQo+ID4gKyAgICAgICAgICAgICAgIC5hZ2VfY29uZmlnICAgICAgICAg ICAgID0gMHg1NTU1NTUsDQo+ID4gKyAgICAgICAgICAgICAgIC5hZ2VtICAgICAgICAgICAgICAg ICAgID0gMCwNCj4gPiArICAgICAgICAgICAgICAgLmRjX2NvbmZpZyAgICAgICAgICAgICAgPSAw eDU1NTU1NSwNCj4gPiArICAgICAgICAgICAgICAgLmR2dF9maXhlZCAgICAgICAgICAgICAgPSAw eDcsDQo+ID4gKyAgICAgICAgICAgICAgIC52Y28gICAgICAgICAgICAgICAgICAgID0gMHgxMCwN Cj4gPiArICAgICAgICAgICAgICAgLmNoa19zaGlmdCAgICAgICAgICAgICAgPSAweDc3LA0KPiA+ ICsgICAgICAgICAgICAgICAudGVtcF91cHBlcl9ib3VuZCAgICAgICA9IDB4NjQsDQo+ID4gKyAg ICAgICAgICAgICAgIC50ZW1wX2xvd2VyX2JvdW5kICAgICAgID0gMHhiMiwNCj4gPiArICAgICAg ICAgICAgICAgLnR6b25lX2hpZ2hfdGVtcCAgICAgICAgPSBTVlNCX1RaT05FX0hJR0hfVEVNUF9N QVgsDQo+ID4gKyAgICAgICAgICAgICAgIC50em9uZV9sb3dfdGVtcCAgICAgICAgID0gMjUwMDAs DQo+ID4gKyAgICAgICAgICAgICAgIC50em9uZV9sb3dfdGVtcF9vZmZzZXQgID0gMCwNCj4gPiAr ICAgICAgICAgICAgICAgLmNvcmVfc2VsICAgICAgICAgICAgICAgPSAweDhmZmYwMDAxLA0KPiA+ ICsgICAgICAgICAgICAgICAuaW50X3N0ICAgICAgICAgICAgICAgICA9IEJJVCgxKSwNCj4gPiAr ICAgICAgICAgICAgICAgLmN0bDAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAxLA0KPiA+ ICsgICAgICAgfSwNCj4gPiArICAgICAgIHsNCj4gPiArICAgICAgICAgICAgICAgLnN3X2lkICAg ICAgICAgICAgICAgICAgPSBTVlNCX0NDSSwNCj4gPiArICAgICAgICAgICAgICAgLnR6b25lX25h bWUgICAgICAgICAgICAgPSAidHp0czQiLA0KPiA+ICsgICAgICAgICAgICAgICAuYnVja19uYW1l ICAgICAgICAgICAgICA9ICJwcm9jIiwNCj4gPiArICAgICAgICAgICAgICAgLnBkX3JlcSAgICAg ICAgICAgICAgICAgPSBmYWxzZSwNCj4gPiArICAgICAgICAgICAgICAgLmluaXQwMV92b2x0X2Zs YWcgICAgICAgPSBTVlNCX0lOSVQwMV9WT0xUX0lOQ19PTkxZLA0KPiA+ICsgICAgICAgICAgICAg ICAubW9kZV9zdXBwb3J0ICAgICAgICAgICA9IFNWU0JfTU9ERV9JTklUMDEgfCBTVlNCX01PREVf SU5JVDAyLA0KPiA+ICsgICAgICAgICAgICAgICAub3BwX2NvdW50ICAgICAgICAgICAgICA9IDE2 LA0KPiA+ICsgICAgICAgICAgICAgICAuZnJlcV9iYXNlICAgICAgICAgICAgICA9IDExOTYwMDAw MDAsDQo+ID4gKyAgICAgICAgICAgICAgIC52Ym9vdCAgICAgICAgICAgICAgICAgID0gMHgzMCwN Cj4gPiArICAgICAgICAgICAgICAgLnZvbHRfc3RlcCAgICAgICAgICAgICAgPSA2MjUwLA0KPiA+ ICsgICAgICAgICAgICAgICAudm9sdF9iYXNlICAgICAgICAgICAgICA9IDUwMDAwMCwNCj4gPiAr ICAgICAgICAgICAgICAgLnZvbHRfb2Zmc2V0ICAgICAgICAgICAgPSAwLA0KPiA+ICsgICAgICAg ICAgICAgICAudm1heCAgICAgICAgICAgICAgICAgICA9IDB4NjQsDQo+ID4gKyAgICAgICAgICAg ICAgIC52bWluICAgICAgICAgICAgICAgICAgID0gMHgxOCwNCj4gPiArICAgICAgICAgICAgICAg LmR0aGkgICAgICAgICAgICAgICAgICAgPSAweDEsDQo+ID4gKyAgICAgICAgICAgICAgIC5kdGxv ICAgICAgICAgICAgICAgICAgID0gMHhmZSwNCj4gPiArICAgICAgICAgICAgICAgLmRldF93aW5k b3cgICAgICAgICAgICAgPSAweGEyOCwNCj4gPiArICAgICAgICAgICAgICAgLmRldF9tYXggICAg ICAgICAgICAgICAgPSAweGZmZmYsDQo+ID4gKyAgICAgICAgICAgICAgIC5hZ2VfY29uZmlnICAg ICAgICAgICAgID0gMHg1NTU1NTUsDQo+ID4gKyAgICAgICAgICAgICAgIC5hZ2VtICAgICAgICAg ICAgICAgICAgID0gMCwNCj4gPiArICAgICAgICAgICAgICAgLmRjX2NvbmZpZyAgICAgICAgICAg ICAgPSAweDU1NTU1NSwNCj4gPiArICAgICAgICAgICAgICAgLmR2dF9maXhlZCAgICAgICAgICAg ICAgPSAweDcsDQo+ID4gKyAgICAgICAgICAgICAgIC52Y28gICAgICAgICAgICAgICAgICAgID0g MHgxMCwNCj4gPiArICAgICAgICAgICAgICAgLmNoa19zaGlmdCAgICAgICAgICAgICAgPSAweDc3 LA0KPiA+ICsgICAgICAgICAgICAgICAudGVtcF91cHBlcl9ib3VuZCAgICAgICA9IDB4NjQsDQo+ ID4gKyAgICAgICAgICAgICAgIC50ZW1wX2xvd2VyX2JvdW5kICAgICAgID0gMHhiMiwNCj4gPiAr ICAgICAgICAgICAgICAgLnR6b25lX2hpZ2hfdGVtcCAgICAgICAgPSBTVlNCX1RaT05FX0hJR0hf VEVNUF9NQVgsDQo+ID4gKyAgICAgICAgICAgICAgIC50em9uZV9sb3dfdGVtcCAgICAgICAgID0g MjUwMDAsDQo+ID4gKyAgICAgICAgICAgICAgIC50em9uZV9sb3dfdGVtcF9vZmZzZXQgID0gMCwN Cj4gPiArICAgICAgICAgICAgICAgLmNvcmVfc2VsICAgICAgICAgICAgICAgPSAweDhmZmYwMDAy LA0KPiA+ICsgICAgICAgICAgICAgICAuaW50X3N0ICAgICAgICAgICAgICAgICA9IEJJVCgyKSwN Cj4gPiArICAgICAgICAgICAgICAgLmN0bDAgICAgICAgICAgICAgICAgICAgPSAweDAwMTAwMDAz LA0KPiA+ICsgICAgICAgfSwNCj4gPiArICAgICAgIHsNCj4gPiArICAgICAgICAgICAgICAgLnN3 X2lkICAgICAgICAgICAgICAgICAgPSBTVlNCX0dQVSwNCj4gPiArICAgICAgICAgICAgICAgLnR6 b25lX25hbWUgICAgICAgICAgICAgPSAidHp0czIiLA0KPiA+ICsgICAgICAgICAgICAgICAuYnVj a19uYW1lICAgICAgICAgICAgICA9ICJtYWxpIiwNCj4gPiArICAgICAgICAgICAgICAgLnBkX3Jl cSAgICAgICAgICAgICAgICAgPSB0cnVlLA0KPiA+ICsgICAgICAgICAgICAgICAuaW5pdDAxX3Zv bHRfZmxhZyAgICAgICA9IFNWU0JfSU5JVDAxX1ZPTFRfSU5DX09OTFksDQo+ID4gKyAgICAgICAg ICAgICAgIC5tb2RlX3N1cHBvcnQgICAgICAgICAgID0gU1ZTQl9NT0RFX0lOSVQwMSB8IFNWU0Jf TU9ERV9JTklUMDIgfA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNWU0JfTU9ERV9NT04sDQo+ID4gKyAgICAgICAgICAgICAgIC5vcHBfY291bnQgICAgICAg ICAgICAgID0gMTYsDQo+ID4gKyAgICAgICAgICAgICAgIC5mcmVxX2Jhc2UgICAgICAgICAgICAg ID0gOTAwMDAwMDAwLA0KPiA+ICsgICAgICAgICAgICAgICAudmJvb3QgICAgICAgICAgICAgICAg ICA9IDB4MzAsDQo+ID4gKyAgICAgICAgICAgICAgIC52b2x0X3N0ZXAgICAgICAgICAgICAgID0g NjI1MCwNCj4gPiArICAgICAgICAgICAgICAgLnZvbHRfYmFzZSAgICAgICAgICAgICAgPSA1MDAw MDAsDQo+ID4gKyAgICAgICAgICAgICAgIC52b2x0X29mZnNldCAgICAgICAgICAgID0gMCwNCj4g PiArICAgICAgICAgICAgICAgLnZtYXggICAgICAgICAgICAgICAgICAgPSAweDQwLA0KPiA+ICsg ICAgICAgICAgICAgICAudm1pbiAgICAgICAgICAgICAgICAgICA9IDB4MTQsDQo+ID4gKyAgICAg ICAgICAgICAgIC5kdGhpICAgICAgICAgICAgICAgICAgID0gMHgxLA0KPiA+ICsgICAgICAgICAg ICAgICAuZHRsbyAgICAgICAgICAgICAgICAgICA9IDB4ZmUsDQo+ID4gKyAgICAgICAgICAgICAg IC5kZXRfd2luZG93ICAgICAgICAgICAgID0gMHhhMjgsDQo+ID4gKyAgICAgICAgICAgICAgIC5k ZXRfbWF4ICAgICAgICAgICAgICAgID0gMHhmZmZmLA0KPiA+ICsgICAgICAgICAgICAgICAuYWdl X2NvbmZpZyAgICAgICAgICAgICA9IDB4NTU1NTU1LA0KPiA+ICsgICAgICAgICAgICAgICAuYWdl bSAgICAgICAgICAgICAgICAgICA9IDAsDQo+ID4gKyAgICAgICAgICAgICAgIC5kY19jb25maWcg ICAgICAgICAgICAgID0gMHg1NTU1NTUsDQo+ID4gKyAgICAgICAgICAgICAgIC5kdnRfZml4ZWQg ICAgICAgICAgICAgID0gMHgzLA0KPiA+ICsgICAgICAgICAgICAgICAudmNvICAgICAgICAgICAg ICAgICAgICA9IDB4MTAsDQo+ID4gKyAgICAgICAgICAgICAgIC5jaGtfc2hpZnQgICAgICAgICAg ICAgID0gMHg3NywNCj4gPiArICAgICAgICAgICAgICAgLnRlbXBfdXBwZXJfYm91bmQgICAgICAg PSAweDY0LA0KPiA+ICsgICAgICAgICAgICAgICAudGVtcF9sb3dlcl9ib3VuZCAgICAgICA9IDB4 YjIsDQo+ID4gKyAgICAgICAgICAgICAgIC50em9uZV9oaWdoX3RlbXAgICAgICAgID0gU1ZTQl9U Wk9ORV9ISUdIX1RFTVBfTUFYLA0KPiA+ICsgICAgICAgICAgICAgICAudHpvbmVfbG93X3RlbXAg ICAgICAgICA9IDI1MDAwLA0KPiA+ICsgICAgICAgICAgICAgICAudHpvbmVfbG93X3RlbXBfb2Zm c2V0ICA9IDMsDQo+ID4gKyAgICAgICAgICAgICAgIC5jb3JlX3NlbCAgICAgICAgICAgICAgID0g MHg4ZmZmMDAwMywNCj4gPiArICAgICAgICAgICAgICAgLmludF9zdCAgICAgICAgICAgICAgICAg PSBCSVQoMyksDQo+ID4gKyAgICAgICAgICAgICAgIC5jdGwwICAgICAgICAgICAgICAgICAgID0g MHgwMDA1MDAwMSwNCj4gPiArICAgICAgIH0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IHN2c19nZXRfc3ZzX210ODE4M19wbGF0Zm9ybV9kYXRhKHN0cnVjdCBzdnNfcGxhdGZvcm0g KnN2c3ApDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldjsNCj4gPiArICAg ICAgIHN0cnVjdCBzdnNfYmFuayAqc3ZzYjsNCj4gPiArICAgICAgIHUzMiBpZHg7DQo+ID4gKw0K PiA+ICsgICAgICAgc3ZzcC0+bmFtZSA9ICJtdDgxODMtc3ZzIjsNCj4gPiArICAgICAgIHN2c3At PmJhbmtzID0gc3ZzX210ODE4M19iYW5rczsNCj4gPiArICAgICAgIHN2c3AtPmVmdXNlX3BhcnNp bmcgPSBzdnNfbXQ4MTgzX2VmdXNlX3BhcnNpbmc7DQo+ID4gKyAgICAgICBzdnNwLT5zZXRfZnJl cXNfcGN0ID0gc3ZzX3NldF9mcmVxc19wY3RfdjI7DQo+ID4gKyAgICAgICBzdnNwLT5nZXRfdm9w cyA9IHN2c19nZXRfdm9wc192MjsNCj4gPiArICAgICAgIHN2c3AtPnJlZ3MgPSBzdnNfcmVnc192 MjsNCj4gPiArICAgICAgIHN2c3AtPmlycWZsYWdzID0gSVJRRl9UUklHR0VSX0xPVyB8IElSUUZf T05FU0hPVDsNCj4gPiArICAgICAgIHN2c3AtPnJzdCA9IE5VTEw7DQo+ID4gKyAgICAgICBzdnNw LT5mYWtlX2VmdXNlID0gZmFsc2U7DQo+ID4gKyAgICAgICBzdnNwLT5iYW5rX251bSA9IDQ7DQo+ ID4gKyAgICAgICBzdnNwLT5lZnVzZV9jaGVjayA9IDI7DQo+ID4gKw0KPiA+ICsgICAgICAgZGV2 ID0gc3ZzX2FkZF9kZXZpY2VfbGluayhzdnNwLCAidGhlcm1hbCIpOw0KPiA+ICsgICAgICAgaWYg KElTX0VSUihkZXYpKQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihkZXYpOw0K PiA+ICsNCj4gPiArICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgc3ZzcC0+YmFua19udW07IGlk eCsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c2IgPSAmc3ZzcC0+YmFua3NbaWR4XTsNCj4g PiArDQo+ID4gKyAgICAgICAgICAgICAgIHN3aXRjaCAoc3ZzYi0+c3dfaWQpIHsNCj4gPiArICAg ICAgICAgICAgICAgY2FzZSBTVlNCX0NQVV9MSVRUTEU6DQo+ID4gKyAgICAgICAgICAgICAgIGNh c2UgU1ZTQl9DUFVfQklHOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPm9wcF9k ZXYgPSBnZXRfY3B1X2RldmljZShzdnNiLT5jcHVfaWQpOw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAgICBjYXNlIFNWU0JfQ0NJOg0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPm9wcF9kZXYgPSBzdnNfYWRkX2RldmljZV9saW5r KHN2c3AsICJjY2kiKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiAr ICAgICAgICAgICAgICAgY2FzZSBTVlNCX0dQVToNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICBzdnNiLT5vcHBfZGV2ID0gc3ZzX2FkZF9kZXZpY2VfbGluayhzdnNwLCAibWFsaSIpOw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPnBkX2RldiA9IHN2c19hZGRfZGV2aWNlX2xp bmsoc3ZzcCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJtYWxpX2dwdV9jb3JlMiIpOw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIGlmIChJU19FUlIoc3ZzYi0+cGRfZGV2KSkNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKHN2c2ItPnBkX2Rldik7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICAgIGRlZmF1bHQ6DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgV0FSTl9PTigxKTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsNCj4g PiArICAgICAgICAgICAgICAgaWYgKElTX0VSUihzdnNiLT5vcHBfZGV2KSkNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihzdnNiLT5vcHBfZGV2KTsNCj4gPiArICAg ICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX3N2c19vZl9tYXRjaFtdID0gew0K PiA+ICsgICAgICAgew0KPiA+ICsgICAgICAgICAgICAgICAuY29tcGF0aWJsZSA9ICJtZWRpYXRl ayxtdDgxODMtc3ZzIiwNCj4gPiArICAgICAgICAgICAgICAgLmRhdGEgPSAmc3ZzX2dldF9zdnNf bXQ4MTgzX3BsYXRmb3JtX2RhdGEsDQo+ID4gKyAgICAgICB9LCB7DQo+ID4gKyAgICAgICAgICAg ICAgIC8qIFNlbnRpbmVsICovDQo+ID4gKyAgICAgICB9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr c3RhdGljIGludCBzdnNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiAr ew0KPiA+ICsgICAgICAgaW50ICgqc3ZzX2dldF9zdnNfcGxhdGZvcm1fZGF0YSkoc3RydWN0IHN2 c19wbGF0Zm9ybSAqc3ZzcCk7DQo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ZzX3BsYXRmb3JtICpzdnNw Ow0KPiA+ICsgICAgICAgdW5zaWduZWQgaW50IHN2c3BfaXJxOw0KPiA+ICsgICAgICAgaW50IHJl dDsNCj4gPiArDQo+ID4gKyAgICAgICBzdnNwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNp emVvZigqc3ZzcCksIEdGUF9LRVJORUwpOw0KPiA+ICsgICAgICAgaWYgKCFzdnNwKQ0KPiA+ICsg ICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKyAgICAgICBzdnNfZ2V0 X3N2c19wbGF0Zm9ybV9kYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYp Ow0KPiA+ICsgICAgICAgaWYgKCFzdnNfZ2V0X3N2c19wbGF0Zm9ybV9kYXRhKSB7DQo+ID4gKyAg ICAgICAgICAgICAgIGRldl9lcnIoc3ZzcC0+ZGV2LCAibm8gc3ZzIHBsYXRmb3JtIGRhdGE/IHdo eT9cbiIpOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOw0KPiA+ICsgICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgIHN2c3AtPmRldiA9ICZwZGV2LT5kZXY7DQo+ID4gKyAgICAg ICByZXQgPSBzdnNfZ2V0X3N2c19wbGF0Zm9ybV9kYXRhKHN2c3ApOw0KPiA+ICsgICAgICAgaWYg KHJldCkgew0KPiA+ICsgICAgICAgICAgICAgICBkZXZfZXJyX3Byb2JlKHN2c3AtPmRldiwgcmV0 LCAiZmFpbCB0byBnZXQgc3ZzcCBkYXRhXG4iKTsNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJu IHJldDsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICBpZiAoIXN2c19pc19zdXBw b3J0ZWQoc3ZzcCkpIHsNCj4gPiArICAgICAgICAgICAgICAgZGV2X25vdGljZShzdnNwLT5kZXYs ICJzdnMgaXMgbm90IHN1cHBvcnRlZFxuIik7DQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAt RVBFUk07DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0ID0gc3ZzX3Jlc291 cmNlX3NldHVwKHN2c3ApOw0KPiA+ICsgICAgICAgaWYgKHJldCkgew0KPiA+ICsgICAgICAgICAg ICAgICBkZXZfZXJyKHN2c3AtPmRldiwgInN2cyByZXNvdXJjZSBzZXR1cCBmYWlsOiAlZFxuIiwg cmV0KTsNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArICAgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgICBzdnNwX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHN2c3AtPmRl di0+b2Zfbm9kZSwgMCk7DQo+ID4gKyAgICAgICByZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRf aXJxKHN2c3AtPmRldiwgc3ZzcF9pcnEsIE5VTEwsIHN2c19pc3IsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2c3AtPmlycWZsYWdzLCBzdnNwLT5uYW1lLCBz dnNwKTsNCj4gPiArICAgICAgIGlmIChyZXQpIHsNCj4gPiArICAgICAgICAgICAgICAgZGV2X2Vy cihzdnNwLT5kZXYsICJyZWdpc3RlciBpcnEoJWQpIGZhaWxlZDogJWRcbiIsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgc3ZzcF9pcnEsIHJldCk7DQo+ID4gKyAgICAgICAgICAgICAgIHJl dHVybiByZXQ7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgc3ZzcC0+bWFpbl9j bGsgPSBkZXZtX2Nsa19nZXQoc3ZzcC0+ZGV2LCAibWFpbiIpOw0KPiA+ICsgICAgICAgaWYgKElT X0VSUihzdnNwLT5tYWluX2NsaykpIHsNCj4gPiArICAgICAgICAgICAgICAgZGV2X2VycihzdnNw LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2NrOiAlbGRcbiIsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgUFRSX0VSUihzdnNwLT5tYWluX2NsaykpOw0KPiA+ICsgICAgICAgICAgICAgICBy ZXR1cm4gUFRSX0VSUihzdnNwLT5tYWluX2Nsayk7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgICAgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHN2c3AtPm1haW5fY2xrKTsNCj4gPiAr ICAgICAgIGlmIChyZXQpIHsNCj4gPiArICAgICAgICAgICAgICAgZGV2X2VycihzdnNwLT5kZXYs ICJjYW5ub3QgZW5hYmxlIG1haW4gY2xrOiAlZFxuIiwgcmV0KTsNCj4gPiArICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICBzdnNwLT5i YXNlID0gb2ZfaW9tYXAoc3ZzcC0+ZGV2LT5vZl9ub2RlLCAwKTsNCj4gPiArICAgICAgIGlmIChJ U19FUlJfT1JfTlVMTChzdnNwLT5iYXNlKSkgew0KPiA+ICsgICAgICAgICAgICAgICBkZXZfZXJy KHN2c3AtPmRldiwgImNhbm5vdCBmaW5kIHN2cyByZWdpc3RlciBiYXNlXG4iKTsNCj4gPiArICAg ICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsNCj4gPiArICAgICAgICAgICAgICAgZ290byBzdnNf cHJvYmVfY2xrX2Rpc2FibGU7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0 ID0gc3ZzX3N0YXJ0KHN2c3ApOw0KPiA+ICsgICAgICAgaWYgKHJldCkgew0KPiA+ICsgICAgICAg ICAgICAgICBkZXZfZXJyKHN2c3AtPmRldiwgInN2cyBzdGFydCBmYWlsOiAlZFxuIiwgcmV0KTsN Cj4gPiArICAgICAgICAgICAgICAgZ290byBzdnNfcHJvYmVfaW91bm1hcDsNCj4gPiArICAgICAg IH0NCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gK3N2c19wcm9iZV9p b3VubWFwOg0KPiA+ICsgICAgICAgaW91bm1hcChzdnNwLT5iYXNlKTsNCj4gPiArDQo+ID4gK3N2 c19wcm9iZV9jbGtfZGlzYWJsZToNCj4gPiArICAgICAgIGNsa19kaXNhYmxlX3VucHJlcGFyZShz dnNwLT5tYWluX2Nsayk7DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKHN2c19wbV9vcHMsIHN2c19zdXNw ZW5kLCBzdnNfcmVzdW1lKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJp dmVyIHN2c19kcml2ZXIgPSB7DQo+ID4gKyAgICAgICAucHJvYmUgID0gc3ZzX3Byb2JlLA0KPiA+ ICsgICAgICAgLmRyaXZlciA9IHsNCj4gPiArICAgICAgICAgICAgICAgLm5hbWUgICAgICAgICAg ID0gIm10ay1zdnMiLA0KPiA+ICsgICAgICAgICAgICAgICAucG0gICAgICAgICAgICAgPSAmc3Zz X3BtX29wcywNCj4gPiArICAgICAgICAgICAgICAgLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hf cHRyKG10a19zdnNfb2ZfbWF0Y2gpLA0KPiA+ICsgICAgICAgfSwNCj4gPiArfTsNCj4gPiArDQo+ ID4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3ZzX2RyaXZlcik7DQo+ID4gKw0KPiA+ICtNT0RV TEVfQVVUSE9SKCJSb2dlciBMdSA8cm9nZXIubHVAbWVkaWF0ZWsuY29tPiIpOw0KPiA+ICtNT0RV TEVfREVTQ1JJUFRJT04oIk1lZGlhVGVrIFNWUyBkcml2ZXIiKTsNCj4gPiArTU9EVUxFX0xJQ0VO U0UoIkdQTCB2MiIpOw0KPiA+IC0tDQo+ID4gMi4xOC4wDQo+ID4gX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gPiBMaW51eC1tZWRpYXRlayBtYWlsaW5n IGxpc3QNCj4gPiBMaW51eC1tZWRpYXRla0BsaXN0cy5pbmZyYWRlYWQub3JnDQo+ID4gaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tZWRpYXRlaw0KDQor fTsNCj4gPiArDQo+ID4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3ZzX2RyaXZlcik7DQo+ID4g Kw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJSb2dlciBMdSA8cm9nZXIubHVAbWVkaWF0ZWsuY29tPiIp Ow0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhVGVrIFNWUyBkcml2ZXIiKTsNCj4gPiAr TU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPiA+IC0tDQo+ID4gMi4xOC4wDQo+ID4gX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gPiBMaW51eC1tZWRp YXRlayBtYWlsaW5nIGxpc3QNCj4gPiBMaW51eC1tZWRpYXRla0BsaXN0cy5pbmZyYWRlYWQub3Jn DQo+ID4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1t ZWRpYXRlaw0KDQo=