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=-7.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable 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 30D35C28EB5 for ; Thu, 6 Jun 2019 11:44:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 65B6F206E0 for ; Thu, 6 Jun 2019 11:44:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=microchiptechnology.onmicrosoft.com header.i=@microchiptechnology.onmicrosoft.com header.b="YSAuiNAE" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727320AbfFFLoH (ORCPT ); Thu, 6 Jun 2019 07:44:07 -0400 Received: from esa5.microchip.iphmx.com ([216.71.150.166]:16028 "EHLO esa5.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726762AbfFFLoH (ORCPT ); Thu, 6 Jun 2019 07:44:07 -0400 Received-SPF: Pass (esa5.microchip.iphmx.com: domain of Eugen.Hristev@microchip.com designates 198.175.253.82 as permitted sender) identity=mailfrom; client-ip=198.175.253.82; receiver=esa5.microchip.iphmx.com; envelope-from="Eugen.Hristev@microchip.com"; x-sender="Eugen.Hristev@microchip.com"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 mx a:ushub1.microchip.com a:smtpout.microchip.com a:mx1.microchip.iphmx.com a:mx2.microchip.iphmx.com include:servers.mcsv.net include:mktomail.com include:spf.protection.outlook.com ~all" Received-SPF: None (esa5.microchip.iphmx.com: no sender authenticity information available from domain of postmaster@email.microchip.com) identity=helo; client-ip=198.175.253.82; receiver=esa5.microchip.iphmx.com; envelope-from="Eugen.Hristev@microchip.com"; x-sender="postmaster@email.microchip.com"; x-conformance=spf_only Authentication-Results: esa5.microchip.iphmx.com; spf=Pass smtp.mailfrom=Eugen.Hristev@microchip.com; spf=None smtp.helo=postmaster@email.microchip.com; dkim=pass (signature verified) header.i=@microchiptechnology.onmicrosoft.com; dmarc=pass (p=none dis=none) d=microchip.com X-IronPort-AV: E=Sophos;i="5.63,559,1557212400"; d="scan'208";a="34630195" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa5.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 06 Jun 2019 04:44:04 -0700 Received: from chn-vm-ex01.mchp-main.com (10.10.87.71) by chn-vm-ex03.mchp-main.com (10.10.87.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 6 Jun 2019 04:44:02 -0700 Received: from NAM03-DM3-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Thu, 6 Jun 2019 04:44:00 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector1-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=w5M16PFwxpoQ1Pmu88Se2bi4Zf1A87scnqswV4+sUOU=; b=YSAuiNAEqNjGtV0l5YGHec46wZ1aCT+uCSkNCrR6r2sPFRzJcF6FwDWPylXnViKdjWGiQQXAjAzxfEgSziWOnDGOmIWjP2EKYZ5zOtqOWuROiLHDQAPAAJ1+DrDdJA9idj/WvkPH301JmfcpCvMCQDhWmGBUOA3i8HyGteWj9nc= Received: from DM5PR11MB1242.namprd11.prod.outlook.com (10.168.108.8) by DM5PR11MB1980.namprd11.prod.outlook.com (10.175.88.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1943.18; Thu, 6 Jun 2019 11:43:56 +0000 Received: from DM5PR11MB1242.namprd11.prod.outlook.com ([fe80::2807:f606:3b7c:cce9]) by DM5PR11MB1242.namprd11.prod.outlook.com ([fe80::2807:f606:3b7c:cce9%9]) with mapi id 15.20.1965.011; Thu, 6 Jun 2019 11:43:56 +0000 From: To: CC: , , , Subject: Re: [PATCH v3 1/2] media: atmel: atmel-isc: split driver into driver base and isc Thread-Topic: [PATCH v3 1/2] media: atmel: atmel-isc: split driver into driver base and isc Thread-Index: AQHVHDuRReUKN77aUkSlBfiQ/OEhsqaOc34AgAANHQA= Date: Thu, 6 Jun 2019 11:43:56 +0000 Message-ID: References: <1559806756-16683-1-git-send-email-eugen.hristev@microchip.com> <20190606105248.txwujjxeo2w3bzyn@valkosipuli.retiisi.org.uk> In-Reply-To: <20190606105248.txwujjxeo2w3bzyn@valkosipuli.retiisi.org.uk> Accept-Language: ro-RO, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1PR0202CA0012.eurprd02.prod.outlook.com (2603:10a6:803:14::25) To DM5PR11MB1242.namprd11.prod.outlook.com (2603:10b6:3:14::8) x-ms-exchange-messagesentrepresentingtype: 1 x-tagtoolbar-keys: D20190606143944391 x-originating-ip: [94.177.32.154] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ea941ab9-ff07-4acb-7d63-08d6ea74418d x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:DM5PR11MB1980; x-ms-traffictypediagnostic: DM5PR11MB1980: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5797; x-forefront-prvs: 00603B7EEF x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(396003)(366004)(136003)(39860400002)(376002)(199004)(189003)(51914003)(30864003)(14454004)(476003)(186003)(86362001)(305945005)(486006)(229853002)(8676002)(8936002)(11346002)(6246003)(2906002)(81166006)(81156014)(31686004)(2616005)(446003)(66066001)(6916009)(71200400001)(478600001)(256004)(7736002)(54906003)(14444005)(73956011)(66446008)(4326008)(36756003)(6436002)(6512007)(53936002)(68736007)(6486002)(66946007)(53546011)(6506007)(386003)(64756008)(99286004)(76176011)(53946003)(52116002)(66556008)(66476007)(26005)(72206003)(316002)(31696002)(102836004)(6116002)(3846002)(25786009)(5660300002)(71190400001)(461764006)(2004002)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR11MB1980;H:DM5PR11MB1242.namprd11.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: wHYm/zHeg4MHDLxWa2Ui+TY/1160yNHZbcAKNOfhsm3S34UsKpC64K8sDG4Oq1gdDFU7E/s/HCIHub/Fk3+Zt5lA2TSELNRdqWG3ipW6G6ZI78QBD9whlSy9FIOaDBhtO24x8Wsj0jIPJPZ9LGHRFVY7reQN2cvRMDNdnQfy3sh0vx8WfBjqdTgD03pSb9VSAh7cUYn5pJU4Je2raNlSOW4gIMLL9uLNDQgJERPDxP4+24/bRN4nUWG5nY3YlIgNeF7XNAQw7ufBVKgrEFtTreHxabK4h/jgcGhOrGdT3YAgP5tj9//E8JnjZfbKd2M/aLDds4tcOo7Ayuh4HbxIfzhl3dqVY56uqhYGmOxR8GJHIjSFHBeS42fz8OWP3dArF8ic7p/Sin+98mJ2q4xqrQV1GPb/H0MTUoQ1pn4hKN4= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: ea941ab9-ff07-4acb-7d63-08d6ea74418d X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Jun 2019 11:43:56.3077 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: eugen.hristev@microchip.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR11MB1980 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org DQoNCk9uIDA2LjA2LjIwMTkgMTM6NTIsIFNha2FyaSBBaWx1cyB3cm90ZToNCj4gSGkgRXVnZW4s DQo+IA0KPiBUaGFua3MgZm9yIHRoZSBwYXRjaC4NCj4gDQo+IE9uIFRodSwgSnVuIDA2LCAyMDE5 IGF0IDA3OjQzOjQ1QU0gKzAwMDAsIEV1Z2VuLkhyaXN0ZXZAbWljcm9jaGlwLmNvbSB3cm90ZToN Cj4+IEZyb206IEV1Z2VuIEhyaXN0ZXYgPGV1Z2VuLmhyaXN0ZXZAbWljcm9jaGlwLmNvbT4NCj4+ DQo+PiBUaGlzIHNwbGl0cyB0aGUgQXRtZWwgSVNDIGRyaXZlciBpbnRvIGEgY29tbW9uIGJhc2U6 IGF0bWVsLWlzYy1iYXNlLmMNCj4+IGFuZCB0aGUgZHJpdmVyIHByb2JlL2R0IHBhcnQgLCBhdG1l bC1zYW1hNWQyLWlzYy5jDQo+PiBUaGlzIGlzIG5lZWRlZCB0byBrZWVwIGEgY29tbW9uIGdyb3Vu ZCBmb3IgdGhlIHNlbnNvciBjb250cm9sbGVyIHdoaWNoIHdpbGwNCj4+IGJlIHJldXNlZC4NCj4+ IFRoZSBhdG1lbC1pc2Mgd2lsbCB1c2UgdGhlIGNvbW1vbiBzeW1ib2xzIGluc2lkZSB0aGUgYXRt ZWwtaXNjLWJhc2UNCj4+IEZ1dHVyZSBkcml2ZXIgd2lsbCBhbHNvIHVzZSB0aGUgc2FtZSBzeW1i b2xzIGFuZCByZWRlZmluZSBkaWZmZXJlbnQgYXNwZWN0cywNCj4+IGZvciBhIGRpZmZlcmVudCB2 ZXJzaW9uIG9mIHRoZSBJU0MuDQo+IA0KPiBJIGhhdmUgdG8gYWRtaXQgSSBoYWQgY29tcGxldGVs eSBtaXNzZWQgeW91IGhhZCBhIGxpdHRsZSBJU1AgdGhlcmUuIDotKQ0KPiANCj4gQ2FuIHlvdSBz aGFyZSBhdCB0aGUgbW9tZW50IHdoZXRoZXIgdGhlIHBpcGVsaW5lIG9mIHRoZSBuZXcgZGV2aWNl IGlzIG1vcmUNCj4gY29tcGxleCB0aGFuIHRoaXMgb25lLCB3aXRoIG11bHRpcGxlIG91dHB1dHMg Zm9yIGluc3RhbmNlPw0KDQpIZWxsbyBTYWthcmksDQoNClNvbWUgbW9kdWxlcyBpbiB0aGUgbGl0 dGxlIElTUCB3aWxsIGJlIGFkZGVkLCBzb21lIGNoYW5nZWQsIHNvbWUgDQpyZW1vdmVkLiBSZWdh cmRpbmcgb3V0cHV0cyBpdCdzIG5vdCBrbm93biB5ZXQNCg0KUmVnYXJkaW5nIGFsbCB0aGVzZSBw b3NzaWJsZSBpc3N1ZXMgd2hpY2ggeW91IHBvaW50ZWQgb3V0LCBJIHdvdWxkIGRvIGEgDQpmb2xs b3cgdXAgcGF0Y2ggdG8gYWRkcmVzcyB0aGVtLi4uIGFyZSB5b3UgZmluZSB3aXRoIHRoYXQ/DQoN ClRoZSBwdXJwb3NlIG9mIHRoaXMgc3BsaXQgcGF0Y2ggd2FzIGp1c3Qgc3BsaXQsIG5vdCBjaGFu Z2UgYW55dGhpbmcgdGhhdCANCm1pZ2h0IGFmZmVjdCBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eSAo b3IgZGlzLWZ1bmN0aW9uYWxpdHkgdGhhdCBpcy4uLikuIA0KV291bGQgYmUgZGlmZmljdWx0IHRv IHRyYWNrIGNoYW5nZXMgaWYgSSB3b3VsZCBkbyBpdCBpbiB0aGUgc2FtZSBwYXRjaC4NCg0KRG8g eW91IGFncmVlIHdpdGggdGhpcyBhcHByb2FjaCA/DQoNCkkgYWxzbyBhbnN3ZXJlZCBzb21lIG9m IHlvdXIgcXVlc3Rpb25zIGJlbG93LCBhbmQgdGhhbmtzIGZvciByZXZpZXdpbmcsDQpFdWdlbg0K DQo+IA0KPj4gVGhpcyBpcyBkb25lIHRvIGF2b2lkIGNvbXBsZXRlIGNvZGUgZHVwbGljYXRpb24g YnkgY3JlYXRpbmcgYSB0b3RhbGx5DQo+PiBkaWZmZXJlbnQgZHJpdmVyIGZvciB0aGUgbmV3IHZh cmlhbnQgb2YgdGhlIElTQy4NCj4+DQo+PiBTaWduZWQtb2ZmLWJ5OiBFdWdlbiBIcmlzdGV2IDxl dWdlbi5ocmlzdGV2QG1pY3JvY2hpcC5jb20+DQo+PiAtLS0NCj4+DQo+PiBIZWxsbyBIYW5zLA0K Pj4NCj4+IEkgY3JlYXRlZCBhIHN1YnNlcXVlbnQgcGF0Y2ggdGhhdCBmaXhlcyB0aGUgY2hlY2tw YXRjaCBpc3N1ZXMuICgyLzIgaW4gdGhpcw0KPj4gc2VyaWVzIG5vdykuDQo+Pg0KPj4gVGhhbmtz LA0KPj4gRXVnZW4NCj4+DQo+PiBDaGFuZ2VzIGluIHYzOg0KPj4gLSBGaXhlZCB1cCB0aGUgZXh0 ZXJucywgbW92ZWQgdG8gaGVhZGVyIGZpbGUNCj4+IC0gbW92ZWQgdGhlIG1vZHVsZSBwYXJhbWV0 ZXJzIHRvIGF0bWVsLWlzYy1iYXNlLmMNCj4+DQo+PiBDaGFuZ2VzIGluIHYyOg0KPj4gLSByZW5h bWVkIGF0bWVsLWlzYy5jIHRvIGF0bWVsLXNhbWE1ZDItaXNjLmMgYXMgc2FtYTVkMiBpcyB0aGUg U29DIHRoYXQNCj4+ICAgIGluY2x1ZGVzIHRoaXMgaGFyZHdhcmUgYmxvY2suIFRoZSBtb2R1bGUg d2lsbCBzdGlsbCBiZSBuYW1lZCBhdG1lbC1pc2Mua28NCj4+IC0gcmVtb3ZlZCBpZmRlZiBhcm91 bmQgZGVmaW5pdGlvbiBvZiBBVE1FTF9JU0NfTkFNRQ0KPj4gLSBtb3ZlZCBleHRlcm5hbCBkZWNs YXJhdGlvbnMgaW4gdGhlIHNwZWNpZmljIGZpbGVzLCB0aGlzIHdhcyBicmVha2luZw0KPj4gICAg bW9kdWxlIGxvYWRpbmcNCj4+DQo+PiAgIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgIDQgKy0NCj4+ICAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9h dG1lbC9NYWtlZmlsZSAgICAgICAgICAgIHwgICAgNCArLQ0KPj4gICBkcml2ZXJzL21lZGlhL3Bs YXRmb3JtL2F0bWVsL2F0bWVsLWlzYy1iYXNlLmMgICAgfCAyMTUzICsrKysrKysrKysrKysrKysr Kw0KPj4gICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5jICAgICAgICAg fCAyNjM0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+ICAgZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9hdG1lbC9hdG1lbC1pc2MuaCAgICAgICAgIHwgIDIwOCArKw0KPj4gICBkcml2ZXJzL21lZGlh L3BsYXRmb3JtL2F0bWVsL2F0bWVsLXNhbWE1ZDItaXNjLmMgfCAgMzQ0ICsrKw0KPj4gICA2IGZp bGVzIGNoYW5nZWQsIDI3MTEgaW5zZXJ0aW9ucygrKSwgMjYzNiBkZWxldGlvbnMoLSkNCj4+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNj LWJhc2UuYw0KPj4gICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9h dG1lbC9hdG1lbC1pc2MuYw0KPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuaA0KPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1zYW1hNWQyLWlzYy5jDQo+Pg0KPj4gZGlmZiAt LWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMNCj4+IGluZGV4IDVjZmJlYTQuLjNkYzgy ODkgMTAwNjQ0DQo+PiAtLS0gYS9NQUlOVEFJTkVSUw0KPj4gKysrIGIvTUFJTlRBSU5FUlMNCj4+ IEBAIC0xMDI3MCw3ICsxMDI3MCw5IEBAIE1JQ1JPQ0hJUCBJU0MgRFJJVkVSDQo+PiAgIE06CUV1 Z2VuIEhyaXN0ZXYgPGV1Z2VuLmhyaXN0ZXZAbWljcm9jaGlwLmNvbT4NCj4+ICAgTDoJbGludXgt bWVkaWFAdmdlci5rZXJuZWwub3JnDQo+PiAgIFM6CVN1cHBvcnRlZA0KPj4gLUY6CWRyaXZlcnMv bWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmMNCj4+ICtGOglkcml2ZXJzL21lZGlhL3Bs YXRmb3JtL2F0bWVsL2F0bWVsLXNhbWE1ZDItaXNjLmMNCj4+ICtGOglkcml2ZXJzL21lZGlhL3Bs YXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5oDQo+PiArRjoJZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9h dG1lbC9hdG1lbC1pc2MtYmFzZS5jDQo+PiAgIEY6CWRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRt ZWwvYXRtZWwtaXNjLXJlZ3MuaA0KPj4gICBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmlu ZGluZ3MvbWVkaWEvYXRtZWwtaXNjLnR4dA0KPj4gICANCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL2F0bWVsL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9h dG1lbC9NYWtlZmlsZQ0KPj4gaW5kZXggMjcwMDBkMC4uOTQ2MjczNiAxMDA2NDQNCj4+IC0tLSBh L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvTWFrZWZpbGUNCj4+ICsrKyBiL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vYXRtZWwvTWFrZWZpbGUNCj4+IEBAIC0xLDIgKzEsNCBAQA0KPj4gLW9i ai0kKENPTkZJR19WSURFT19BVE1FTF9JU0MpICs9IGF0bWVsLWlzYy5vDQo+PiArYXRtZWwtaXNj LW9ianMgPSBhdG1lbC1zYW1hNWQyLWlzYy5vIGF0bWVsLWlzYy1iYXNlLm8NCj4+ICsNCj4+ICAg b2JqLSQoQ09ORklHX1ZJREVPX0FUTUVMX0lTSSkgKz0gYXRtZWwtaXNpLm8NCj4+ICtvYmotJChD T05GSUdfVklERU9fQVRNRUxfSVNDKSArPSBhdG1lbC1pc2Mubw0KPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLWJhc2UuYyBiL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLWJhc2UuYw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4+IGluZGV4IDAwMDAwMDAuLmUyN2U3OTANCj4+IC0tLSAvZGV2L251bGwNCj4+ICsrKyBi L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLWJhc2UuYw0KPj4gQEAgLTAs MCArMSwyMTUzIEBADQo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4+ ICsvKg0KPj4gKyAqIE1pY3JvY2hpcCBJbWFnZSBTZW5zb3IgQ29udHJvbGxlciAoSVNDKSBjb21t b24gZHJpdmVyIGJhc2UNCj4+ICsgKg0KPj4gKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IE1p Y3JvY2hpcCBUZWNobm9sb2d5LCBJbmMuDQo+PiArICoNCj4+ICsgKiBBdXRob3I6IFNvbmdqdW4g V3UgPHNvbmdqdW4ud3VAbWljcm9jaGlwLmNvbT4NCj4gDQo+IElzIFNvbmdqdW4ncyBlLW1haWwg c3RpbGwgZnVuY3Rpb25hbD8gSSB2YWd1ZWx5IHJlbWVtYmVyIGdldHRpbmcgZGVsaXZlcnkNCj4g ZXJyb3JzIGluIHRoZSBwYXN0LiBJZiBpdCdzIG5vdCwgcGxlYXNlIHJlbW92ZSB0aGUgZS1tYWls IGFkZHJlc3MuIFNhbWUgb24NCj4gTU9EVUxFX0FVVEhPUigpIGF0IHRoZSBlbmQuDQoNCk5vLCBo ZSBkb2VzIG5vdCB3b3JrIGZvciB0aGlzIGFueW1vcmUuIEkgd2lsbCBjaGFuZ2UgaXQgYW5kIHJl c2VuZCB0aGUgcGF0Y2gNCg0KPiANCj4+ICsgKiBBdXRob3I6IEV1Z2VuIEhyaXN0ZXYgPGV1Z2Vu LmhyaXN0ZXZAbWljcm9jaGlwLmNvbT4NCj4+ICsgKg0KPj4gKyAqLw0KPj4gKw0KPj4gKyNpbmNs dWRlIDxsaW51eC9jbGsuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+DQo+PiArI2lu Y2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5o Pg0KPj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgv bWF0aDY0Lmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPj4gKyNpbmNsdWRlIDxs aW51eC9vZi5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPg0KPj4gKyNpbmNsdWRl IDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGlt ZS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgv dmlkZW9kZXYyLmg+DQo+PiArDQo+PiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4NCj4+ ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4NCj4+ICsjaW5jbHVkZSA8bWVkaWEvdjRs Mi1ldmVudC5oPg0KPj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWltYWdlLXNpemVzLmg+DQo+PiAr I2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4NCj4+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1m d25vZGUuaD4NCj4+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4NCj4+ICsjaW5jbHVk ZSA8bWVkaWEvdmlkZW9idWYyLWRtYS1jb250aWcuaD4NCj4+ICsNCj4+ICsjaW5jbHVkZSAiYXRt ZWwtaXNjLXJlZ3MuaCINCj4+ICsjaW5jbHVkZSAiYXRtZWwtaXNjLmgiDQo+PiArDQo+PiArdW5z aWduZWQgaW50IGRlYnVnOw0KPj4gK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsNCj4+ ICtNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgbGV2ZWwgKDAtMikiKTsNCj4+ICsNCj4+ ICt1bnNpZ25lZCBpbnQgc2Vuc29yX3ByZWZlcnJlZCA9IDE7DQo+PiArbW9kdWxlX3BhcmFtKHNl bnNvcl9wcmVmZXJyZWQsIHVpbnQsIDA2NDQpOw0KPj4gK01PRFVMRV9QQVJNX0RFU0Moc2Vuc29y X3ByZWZlcnJlZCwNCj4+ICsJCSAiU2Vuc29yIGlzIHByZWZlcnJlZCB0byBvdXRwdXQgdGhlIHNw ZWNpZmllZCBmb3JtYXQgKDEtb24gMC1vZmYpLCBkZWZhdWx0IDEiKTsNCj4+ICsNCj4+ICsvKiBU aGlzIGlzIGEgbGlzdCBvZiB0aGUgZm9ybWF0cyB0aGF0IHRoZSBJU0MgY2FuICpvdXRwdXQqICov DQo+PiArc3RydWN0IGlzY19mb3JtYXQgY29udHJvbGxlcl9mb3JtYXRzW10gPSB7DQo+IA0KPiBj b25zdA0KPiANCj4+ICsJew0KPj4gKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfQVJHQjQ0NCwN Cj4+ICsJfSwNCj4+ICsJew0KPj4gKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfQVJHQjU1NSwN Cj4+ICsJfSwNCj4+ICsJew0KPj4gKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfUkdCNTY1LA0K Pj4gKwl9LA0KPj4gKwl7DQo+PiArCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9BQkdSMzIsDQo+ PiArCX0sDQo+PiArCXsNCj4+ICsJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1hCR1IzMiwNCj4+ ICsJfSwNCj4+ICsJew0KPj4gKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVWNDIwLA0KPj4g Kwl9LA0KPj4gKwl7DQo+PiArCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVlWLA0KPj4gKwl9 LA0KPj4gKwl7DQo+PiArCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVY0MjJQLA0KPj4gKwl9 LA0KPj4gKwl7DQo+PiArCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9HUkVZLA0KPj4gKwl9LA0K Pj4gK307DQo+PiArDQo+PiArLyogVGhpcyBpcyBhIGxpc3Qgb2YgZm9ybWF0cyB0aGF0IHRoZSBJ U0MgY2FuIHJlY2VpdmUgYXMgKmlucHV0KiAqLw0KPj4gK3N0cnVjdCBpc2NfZm9ybWF0IGZvcm1h dHNfbGlzdFtdID0gew0KPiANCj4gY29uc3QNCj4gDQo+PiArCXsNCj4+ICsJCS5mb3VyY2MJCT0g VjRMMl9QSVhfRk1UX1NCR0dSOCwNCj4+ICsJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NC R0dSOF8xWDgsDQo+PiArCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwN Cj4+ICsJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfQkdCRywNCj4+ICsJfSwNCj4+ICsJew0K Pj4gKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dCUkc4LA0KPj4gKwkJLm1idXNfY29kZQk9 IE1FRElBX0JVU19GTVRfU0dCUkc4XzFYOCwNCj4+ICsJCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZF X0NGRzBfQlBTX0VJR0hULA0KPj4gKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HQkdCLA0K Pj4gKwl9LA0KPj4gKwl7DQo+PiArCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR1JCRzgsDQo+ PiArCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TR1JCRzhfMVg4LA0KPj4gKwkJLnBmZV9j ZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQo+PiArCQkuY2ZhX2JheWNmZwk9IElT Q19CQVlfQ0ZHX0dSR1IsDQo+PiArCX0sDQo+PiArCXsNCj4+ICsJCS5mb3VyY2MJCT0gVjRMMl9Q SVhfRk1UX1NSR0dCOCwNCj4+ICsJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NSR0dCOF8x WDgsDQo+PiArCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCj4+ICsJ CS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdSRywNCj4+ICsJfSwNCj4+ICsJew0KPj4gKwkJ LmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMCwNCj4+ICsJCS5tYnVzX2NvZGUJPSBNRURJ QV9CVVNfRk1UX1NCR0dSMTBfMVgxMCwNCj4+ICsJCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NG RzBfQlBTX1RFTiwNCj4+ICsJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdSRywNCj4+ICsJ fSwNCj4+ICsJew0KPj4gKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dCUkcxMCwNCj4+ICsJ CS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHQlJHMTBfMVgxMCwNCj4+ICsJCS5wZmVfY2Zn MF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwNCj4+ICsJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JB WV9DRkdfR0JHQiwNCj4+ICsJfSwNCj4+ICsJew0KPj4gKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9G TVRfU0dSQkcxMCwNCj4+ICsJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHMTBfMVgx MCwNCj4+ICsJCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwNCj4+ICsJCS5j ZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR1JHUiwNCj4+ICsJfSwNCj4+ICsJew0KPj4gKwkJLmZv dXJjYwkJPSBWNEwyX1BJWF9GTVRfU1JHR0IxMCwNCj4+ICsJCS5tYnVzX2NvZGUJPSBNRURJQV9C VVNfRk1UX1NSR0dCMTBfMVgxMCwNCj4+ICsJCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBf QlBTX1RFTiwNCj4+ICsJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdSRywNCj4+ICsJfSwN Cj4+ICsJew0KPj4gKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMiwNCj4+ICsJCS5t YnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NCR0dSMTJfMVgxMiwNCj4+ICsJCS5wZmVfY2ZnMF9i cHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCj4+ICsJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JB WV9DRkdfQkdCRywNCj4+ICsJfSwNCj4+ICsJew0KPj4gKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9G TVRfU0dCUkcxMiwNCj4+ICsJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHQlJHMTJfMVgx MiwNCj4+ICsJCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCj4+ICsJ CS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR0JHQiwNCj4+ICsJfSwNCj4+ICsJew0KPj4gKwkJ LmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dSQkcxMiwNCj4+ICsJCS5tYnVzX2NvZGUJPSBNRURJ QV9CVVNfRk1UX1NHUkJHMTJfMVgxMiwNCj4+ICsJCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NG RzBfQlBTX1RXRUxWRSwNCj4+ICsJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR1JHUiwNCj4+ ICsJfSwNCj4+ICsJew0KPj4gKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU1JHR0IxMiwNCj4+ ICsJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NSR0dCMTJfMVgxMiwNCj4+ICsJCS5wZmVf Y2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCj4+ICsJCS5jZmFfYmF5Y2ZnCT0g SVNDX0JBWV9DRkdfUkdSRywNCj4+ICsJfSwNCj4+ICsJew0KPj4gKwkJLmZvdXJjYwkJPSBWNEwy X1BJWF9GTVRfR1JFWSwNCj4+ICsJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1k4XzFYOCwN Cj4+ICsJCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KPj4gKwl9LA0K Pj4gKwl7DQo+PiArCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVlWLA0KPj4gKwkJLm1idXNf Y29kZQk9IE1FRElBX0JVU19GTVRfWVVZVjhfMlg4LA0KPj4gKwkJLnBmZV9jZmcwX2Jwcwk9IElT Q19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQo+PiArCX0sDQo+PiArCXsNCj4+ICsJCS5mb3VyY2MJCT0g VjRMMl9QSVhfRk1UX1JHQjU2NSwNCj4+ICsJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1JH QjU2NV8yWDhfTEUsDQo+PiArCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdI VCwNCj4+ICsJfSwNCj4+ICt9Ow0KPj4gKw0KPj4gKy8qIEdhbW1hIHRhYmxlIHdpdGggZ2FtbWEg MS8yLjIgKi8NCj4+ICtjb25zdCB1MzIgaXNjX2dhbW1hX3RhYmxlW0dBTU1BX01BWCArIDFdW0dB TU1BX0VOVFJJRVNdID0gew0KPiANCj4gQ2FuIHRoaXMgYmUgc3RhdGljPw0KDQoNCkkgY2Fubm90 IG1ha2UgdGhpcyBzdGF0aWMgYmVjYXVzZSBJIHdvdWxkIG5lZWQgdGhlc2Ugc3ltYm9scyBpbiBh IA0KZGlmZmVyZW50IGRyaXZlci4gdGhhdCdzIHdoeSB0aGV5IGFyZSBwYXJ0IG9mIHRoZSAiYmFz ZSIgb2YgdGhlIGRyaXZlci4NCg0KPiANCj4+ICsJLyogMCAtLT4gZ2FtbWEgMS8xLjggKi8NCj4+ ICsJeyAgICAgIDB4NjUsICAweDY2MDAyRiwgIDB4OTUwMDI1LCAgMHhCQjAwMjAsICAweERCMDAx RCwgIDB4RjgwMDFBLA0KPj4gKwkgIDB4MTEzMDAxOCwgMHgxMkIwMDE3LCAweDE0MjAwMTYsIDB4 MTU4MDAxNCwgMHgxNkQwMDEzLCAweDE4MTAwMTIsDQo+PiArCSAgMHgxOTQwMDEyLCAweDFBNjAw MTIsIDB4MUI4MDAxMSwgMHgxQzkwMDEwLCAweDFEQTAwMTAsIDB4MUVBMDAwRiwNCj4+ICsJICAw eDFGQTAwMEYsIDB4MjA5MDAwRiwgMHgyMTgwMDBGLCAweDIyNzAwMEUsIDB4MjM1MDAwRSwgMHgy NDMwMDBFLA0KPj4gKwkgIDB4MjUxMDAwRSwgMHgyNUYwMDBELCAweDI2QzAwMEQsIDB4Mjc5MDAw RCwgMHgyODYwMDBELCAweDI5MzAwMEMsDQo+PiArCSAgMHgyQTAwMDBDLCAweDJBQzAwMEMsIDB4 MkI4MDAwQywgMHgyQzQwMDBDLCAweDJEMDAwMEIsIDB4MkRDMDAwQiwNCj4+ICsJICAweDJFNzAw MEIsIDB4MkYzMDAwQiwgMHgyRkUwMDBCLCAweDMwOTAwMEIsIDB4MzE0MDAwQiwgMHgzMUYwMDBB LA0KPj4gKwkgIDB4MzJBMDAwQSwgMHgzMzQwMDBCLCAweDMzRjAwMEEsIDB4MzQ5MDAwQSwgMHgz NTQwMDBBLCAweDM1RTAwMEEsDQo+PiArCSAgMHgzNjgwMDBBLCAweDM3MjAwMEEsIDB4MzdDMDAw QSwgMHgzODYwMDBBLCAweDM5MDAwMDksIDB4Mzk5MDAwQSwNCj4+ICsJICAweDNBMzAwMDksIDB4 M0FEMDAwOSwgMHgzQjYwMDA5LCAweDNCRjAwMEEsIDB4M0M5MDAwOSwgMHgzRDIwMDA5LA0KPj4g KwkgIDB4M0RCMDAwOSwgMHgzRTQwMDA5LCAweDNFRDAwMDksIDB4M0Y2MDAwOSB9LA0KPj4gKw0K Pj4gKwkvKiAxIC0tPiBnYW1tYSAxLzIgKi8NCj4+ICsJeyAgICAgIDB4N0YsICAweDgwMDAzNCwg IDB4QjUwMDI4LCAgMHhERTAwMjEsIDB4MTAwMDAxRSwgMHgxMUUwMDFCLA0KPj4gKwkgIDB4MTM5 MDAxOSwgMHgxNTIwMDE3LCAweDE2QTAwMTUsIDB4MTgwMDAxNCwgMHgxOTQwMDE0LCAweDFBODAw MTMsDQo+PiArCSAgMHgxQkIwMDEyLCAweDFDRDAwMTEsIDB4MURGMDAxMCwgMHgxRUYwMDEwLCAw eDIwMDAwMEYsIDB4MjBGMDAwRiwNCj4+ICsJICAweDIxRjAwMEUsIDB4MjJEMDAwRiwgMHgyM0Mw MDBFLCAweDI0QTAwMEUsIDB4MjU4MDAwRCwgMHgyNjUwMDBELA0KPj4gKwkgIDB4MjczMDAwQywg MHgyN0YwMDBELCAweDI4QzAwMEMsIDB4Mjk5MDAwQywgMHgyQTUwMDBDLCAweDJCMTAwMEIsDQo+ PiArCSAgMHgyQkMwMDBDLCAweDJDODAwMEIsIDB4MkQzMDAwQywgMHgyREYwMDBCLCAweDJFQTAw MEEsIDB4MkY1MDAwQSwNCj4+ICsJICAweDJGRjAwMEIsIDB4MzBBMDAwQSwgMHgzMTQwMDBCLCAw eDMxRjAwMEEsIDB4MzI5MDAwQSwgMHgzMzMwMDBBLA0KPj4gKwkgIDB4MzNEMDAwOSwgMHgzNDcw MDA5LCAweDM1MDAwMEEsIDB4MzVBMDAwOSwgMHgzNjMwMDBBLCAweDM2RDAwMDksDQo+PiArCSAg MHgzNzYwMDA5LCAweDM3RjAwMDksIDB4Mzg4MDAwOSwgMHgzOTEwMDA5LCAweDM5QTAwMDksIDB4 M0EzMDAwOSwNCj4+ICsJICAweDNBQzAwMDgsIDB4M0I0MDAwOSwgMHgzQkQwMDA4LCAweDNDNjAw MDgsIDB4M0NFMDAwOCwgMHgzRDYwMDA5LA0KPj4gKwkgIDB4M0RGMDAwOCwgMHgzRTcwMDA4LCAw eDNFRjAwMDgsIDB4M0Y3MDAwOCB9LA0KPj4gKw0KPj4gKwkvKiAyIC0tPiBnYW1tYSAxLzIuMiAq Lw0KPj4gKwl7ICAgICAgMHg5OSwgIDB4OUIwMDM4LCAgMHhENDAwMkEsICAweEZGMDAyMywgMHgx MjIwMDFGLCAweDE0MTAwMUIsDQo+PiArCSAgMHgxNUQwMDE5LCAweDE3NjAwMTcsIDB4MThFMDAx NSwgMHgxQTMwMDE1LCAweDFCODAwMTMsIDB4MUNDMDAxMiwNCj4+ICsJICAweDFERTAwMTEsIDB4 MUYwMDAxMCwgMHgyMDEwMDEwLCAweDIxMTAwMTAsIDB4MjIxMDAwRiwgMHgyMzAwMDBGLA0KPj4g KwkgIDB4MjNGMDAwRSwgMHgyNEQwMDBFLCAweDI1QjAwMEQsIDB4MjY5MDAwQywgMHgyNzYwMDBD LCAweDI4MzAwMEMsDQo+PiArCSAgMHgyOEYwMDBDLCAweDI5QjAwMEMsIDB4MkE3MDAwQywgMHgy QjMwMDBCLCAweDJCRjAwMEIsIDB4MkNBMDAwQiwNCj4+ICsJICAweDJENTAwMEIsIDB4MkUwMDAw QSwgMHgyRUIwMDBBLCAweDJGNTAwMEEsIDB4MkZGMDAwQSwgMHgzMEEwMDBBLA0KPj4gKwkgIDB4 MzE0MDAwOSwgMHgzMUUwMDA5LCAweDMyNzAwMEEsIDB4MzMxMDAwOSwgMHgzM0EwMDA5LCAweDM0 NDAwMDksDQo+PiArCSAgMHgzNEQwMDA5LCAweDM1NjAwMDksIDB4MzVGMDAwOSwgMHgzNjgwMDA4 LCAweDM3MTAwMDgsIDB4Mzc5MDAwOSwNCj4+ICsJICAweDM4MjAwMDgsIDB4MzhBMDAwOCwgMHgz OTMwMDA4LCAweDM5QjAwMDgsIDB4M0EzMDAwOCwgMHgzQUIwMDA4LA0KPj4gKwkgIDB4M0IzMDAw OCwgMHgzQkIwMDA4LCAweDNDMzAwMDgsIDB4M0NCMDAwNywgMHgzRDIwMDA4LCAweDNEQTAwMDcs DQo+PiArCSAgMHgzRTIwMDA3LCAweDNFOTAwMDcsIDB4M0YwMDAwOCwgMHgzRjgwMDA3IH0sDQo+ PiArfTsNCj4+ICsNCj4+ICsjZGVmaW5lIElTQ19JU19GT1JNQVRfUkFXKG1idXNfY29kZSkgXA0K Pj4gKwkoKChtYnVzX2NvZGUpICYgMHhmMDAwKSA9PSAweDMwMDApDQo+PiArDQo+PiArc3RhdGlj IGlubGluZSB2b2lkIGlzY191cGRhdGVfYXdiX2N0cmxzKHN0cnVjdCBpc2NfZGV2aWNlICppc2Mp DQo+PiArew0KPj4gKwlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KPj4g Kw0KPj4gKwlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19XQl9PX1JHUiwNCj4+ICsJCSAg ICAgKElTQ19XQl9PX1pFUk9fVkFMIC0gKGN0cmxzLT5vZmZzZXRbSVNDX0hJU19DRkdfTU9ERV9S XSkpIHwNCj4+ICsJCSAgICAgKChJU0NfV0JfT19aRVJPX1ZBTCAtIGN0cmxzLT5vZmZzZXRbSVND X0hJU19DRkdfTU9ERV9HUl0pIDw8IDE2KSk7DQo+PiArCXJlZ21hcF93cml0ZShpc2MtPnJlZ21h cCwgSVNDX1dCX09fQkdCLA0KPj4gKwkJICAgICAoSVNDX1dCX09fWkVST19WQUwgLSAoY3RybHMt Pm9mZnNldFtJU0NfSElTX0NGR19NT0RFX0JdKSkgfA0KPj4gKwkJICAgICAoKElTQ19XQl9PX1pF Uk9fVkFMIC0gY3RybHMtPm9mZnNldFtJU0NfSElTX0NGR19NT0RFX0dCXSkgPDwgMTYpKTsNCj4+ ICsJcmVnbWFwX3dyaXRlKGlzYy0+cmVnbWFwLCBJU0NfV0JfR19SR1IsDQo+PiArCQkgICAgIGN0 cmxzLT5nYWluW0lTQ19ISVNfQ0ZHX01PREVfUl0gfA0KPj4gKwkJICAgICAoY3RybHMtPmdhaW5b SVNDX0hJU19DRkdfTU9ERV9HUl0gPDwgMTYpKTsNCj4+ICsJcmVnbWFwX3dyaXRlKGlzYy0+cmVn bWFwLCBJU0NfV0JfR19CR0IsDQo+PiArCQkgICAgIGN0cmxzLT5nYWluW0lTQ19ISVNfQ0ZHX01P REVfQl0gfA0KPj4gKwkJICAgICAoY3RybHMtPmdhaW5bSVNDX0hJU19DRkdfTU9ERV9HQl0gPDwg MTYpKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGlubGluZSB2b2lkIGlzY19yZXNldF9hd2Jf Y3RybHMoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCj4+ICt7DQo+PiArCWludCBjOw0KPiANCj4g dW5zaWduZWQgaW50ID4NCj4+ICsNCj4+ICsJZm9yIChjID0gSVNDX0hJU19DRkdfTU9ERV9HUjsg YyA8PSBJU0NfSElTX0NGR19NT0RFX0I7IGMrKykgew0KPj4gKwkJLyogZ2FpbnMgaGF2ZSBhIGZp eGVkIHBvaW50IGF0IDkgZGVjaW1hbHMgKi8NCj4+ICsJCWlzYy0+Y3RybHMuZ2FpbltjXSA9IDEg PDwgOTsNCj4+ICsJCS8qIG9mZnNldHMgYXJlIGluIDIncyBjb21wbGVtZW50cywgdGhlIHZhbHVl DQo+PiArCQkgKiB3aWxsIGJlIHN1YnN0cmFjdGVkIGZyb20gSVNDX1dCX09fWkVST19WQUwgdG8g b2J0YWluDQo+PiArCQkgKiAyJ3MgY29tcGxlbWVudCBvZiBhIHZhbHVlIGJldHdlZW4gMCBhbmQN Cj4+ICsJCSAqIElTQ19XQl9PX1pFUk9fVkFMID4+IDENCj4+ICsJCSAqLw0KPj4gKwkJaXNjLT5j dHJscy5vZmZzZXRbY10gPSBJU0NfV0JfT19aRVJPX1ZBTDsNCj4+ICsJfQ0KPj4gK30NCj4+ICsN Cj4+ICtzdGF0aWMgaW50IGlzY193YWl0X2Nsa19zdGFibGUoc3RydWN0IGNsa19odyAqaHcpDQo+ PiArew0KPj4gKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KPj4g KwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2NfY2xrLT5yZWdtYXA7DQo+PiArCXVuc2lnbmVk IGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKDEwMDApOw0KPj4gKwl1 bnNpZ25lZCBpbnQgc3RhdHVzOw0KPj4gKw0KPj4gKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmll cywgdGltZW91dCkpIHsNCj4+ICsJCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NMS1NSLCAmc3Rh dHVzKTsNCj4+ICsJCWlmICghKHN0YXR1cyAmIElTQ19DTEtTUl9TSVApKQ0KPj4gKwkJCXJldHVy biAwOw0KPj4gKw0KPj4gKwkJdXNsZWVwX3JhbmdlKDEwLCAyNTApOw0KPj4gKwl9DQo+PiArDQo+ PiArCXJldHVybiAtRVRJTUVET1VUOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGlzY19j bGtfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykNCj4+ICt7DQo+PiArCXN0cnVjdCBpc2NfY2xr ICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQo+PiArDQo+PiArCWlmIChpc2NfY2xrLT5pZCA9 PSBJU0NfSVNQQ0spDQo+PiArCQlwbV9ydW50aW1lX2dldF9zeW5jKGlzY19jbGstPmRldik7DQo+ PiArDQo+PiArCXJldHVybiBpc2Nfd2FpdF9jbGtfc3RhYmxlKGh3KTsNCj4+ICt9DQo+PiArDQo+ PiArc3RhdGljIHZvaWQgaXNjX2Nsa191bnByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpDQo+PiAr ew0KPj4gKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KPj4gKw0K Pj4gKwlpc2Nfd2FpdF9jbGtfc3RhYmxlKGh3KTsNCj4+ICsNCj4+ICsJaWYgKGlzY19jbGstPmlk ID09IElTQ19JU1BDSykNCj4+ICsJCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNjX2Nsay0+ZGV2KTsN Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpc2NfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrX2h3 ICpodykNCj4+ICt7DQo+PiArCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayho dyk7DQo+PiArCXUzMiBpZCA9IGlzY19jbGstPmlkOw0KPj4gKwlzdHJ1Y3QgcmVnbWFwICpyZWdt YXAgPSBpc2NfY2xrLT5yZWdtYXA7DQo+PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+PiArCXVu c2lnbmVkIGludCBzdGF0dXM7DQo+PiArDQo+PiArCWRldl9kYmcoaXNjX2Nsay0+ZGV2LCAiSVND IENMSzogJXMsIGRpdiA9ICVkLCBwYXJlbnQgaWQgPSAlZFxuIiwNCj4+ICsJCV9fZnVuY19fLCBp c2NfY2xrLT5kaXYsIGlzY19jbGstPnBhcmVudF9pZCk7DQo+PiArDQo+PiArCXNwaW5fbG9ja19p cnFzYXZlKCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQo+PiArCXJlZ21hcF91cGRhdGVfYml0cyhy ZWdtYXAsIElTQ19DTEtDRkcsDQo+PiArCQkJICAgSVNDX0NMS0NGR19ESVZfTUFTSyhpZCkgfCBJ U0NfQ0xLQ0ZHX1NFTF9NQVNLKGlkKSwNCj4+ICsJCQkgICAoaXNjX2Nsay0+ZGl2IDw8IElTQ19D TEtDRkdfRElWX1NISUZUKGlkKSkgfA0KPj4gKwkJCSAgIChpc2NfY2xrLT5wYXJlbnRfaWQgPDwg SVNDX0NMS0NGR19TRUxfU0hJRlQoaWQpKSk7DQo+PiArDQo+PiArCXJlZ21hcF93cml0ZShyZWdt YXAsIElTQ19DTEtFTiwgSVNDX0NMSyhpZCkpOw0KPj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQo+PiArDQo+PiArCXJlZ21hcF9yZWFkKHJlZ21hcCwg SVNDX0NMS1NSLCAmc3RhdHVzKTsNCj4+ICsJaWYgKHN0YXR1cyAmIElTQ19DTEsoaWQpKQ0KPj4g KwkJcmV0dXJuIDA7DQo+PiArCWVsc2UNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4gK30NCj4+ ICsNCj4+ICtzdGF0aWMgdm9pZCBpc2NfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpDQo+ PiArew0KPj4gKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KPj4g Kwl1MzIgaWQgPSBpc2NfY2xrLT5pZDsNCj4+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4+ICsN Cj4+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmlzY19jbGstPmxvY2ssIGZsYWdzKTsNCj4+ICsJcmVn bWFwX3dyaXRlKGlzY19jbGstPnJlZ21hcCwgSVNDX0NMS0RJUywgSVNDX0NMSyhpZCkpOw0KPj4g KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQo+PiArfQ0K Pj4gKw0KPj4gK3N0YXRpYyBpbnQgaXNjX2Nsa19pc19lbmFibGVkKHN0cnVjdCBjbGtfaHcgKmh3 KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsN Cj4+ICsJdTMyIHN0YXR1czsNCj4+ICsNCj4+ICsJaWYgKGlzY19jbGstPmlkID09IElTQ19JU1BD SykNCj4+ICsJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNjX2Nsay0+ZGV2KTsNCj4+ICsNCj4+ICsJ cmVnbWFwX3JlYWQoaXNjX2Nsay0+cmVnbWFwLCBJU0NfQ0xLU1IsICZzdGF0dXMpOw0KPj4gKw0K Pj4gKwlpZiAoaXNjX2Nsay0+aWQgPT0gSVNDX0lTUENLKQ0KPj4gKwkJcG1fcnVudGltZV9wdXRf c3luYyhpc2NfY2xrLT5kZXYpOw0KPj4gKw0KPj4gKwlyZXR1cm4gc3RhdHVzICYgSVNDX0NMSyhp c2NfY2xrLT5pZCkgPyAxIDogMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHVuc2lnbmVkIGxv bmcNCj4+ICtpc2NfY2xrX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBs b25nIHBhcmVudF9yYXRlKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0 b19pc2NfY2xrKGh3KTsNCj4+ICsNCj4+ICsJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHBhcmVu dF9yYXRlLCBpc2NfY2xrLT5kaXYgKyAxKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBp c2NfY2xrX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LA0KPj4gKwkJCQkgICBzdHJ1 Y3QgY2xrX3JhdGVfcmVxdWVzdCAqcmVxKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGlzY19jbGsgKmlz Y19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCj4+ICsJbG9uZyBiZXN0X3JhdGUgPSAtRUlOVkFMOw0K Pj4gKwlpbnQgYmVzdF9kaWZmID0gLTE7DQo+PiArCXVuc2lnbmVkIGludCBpLCBkaXY7DQo+PiAr DQo+PiArCWZvciAoaSA9IDA7IGkgPCBjbGtfaHdfZ2V0X251bV9wYXJlbnRzKGh3KTsgaSsrKSB7 DQo+PiArCQlzdHJ1Y3QgY2xrX2h3ICpwYXJlbnQ7DQo+PiArCQl1bnNpZ25lZCBsb25nIHBhcmVu dF9yYXRlOw0KPj4gKw0KPj4gKwkJcGFyZW50ID0gY2xrX2h3X2dldF9wYXJlbnRfYnlfaW5kZXgo aHcsIGkpOw0KPj4gKwkJaWYgKCFwYXJlbnQpDQo+PiArCQkJY29udGludWU7DQo+PiArDQo+PiAr CQlwYXJlbnRfcmF0ZSA9IGNsa19od19nZXRfcmF0ZShwYXJlbnQpOw0KPj4gKwkJaWYgKCFwYXJl bnRfcmF0ZSkNCj4+ICsJCQljb250aW51ZTsNCj4+ICsNCj4+ICsJCWZvciAoZGl2ID0gMTsgZGl2 IDwgSVNDX0NMS19NQVhfRElWICsgMjsgZGl2KyspIHsNCj4+ICsJCQl1bnNpZ25lZCBsb25nIHJh dGU7DQo+PiArCQkJaW50IGRpZmY7DQo+PiArDQo+PiArCQkJcmF0ZSA9IERJVl9ST1VORF9DTE9T RVNUKHBhcmVudF9yYXRlLCBkaXYpOw0KPj4gKwkJCWRpZmYgPSBhYnMocmVxLT5yYXRlIC0gcmF0 ZSk7DQo+PiArDQo+PiArCQkJaWYgKGJlc3RfZGlmZiA8IDAgfHwgYmVzdF9kaWZmID4gZGlmZikg ew0KPj4gKwkJCQliZXN0X3JhdGUgPSByYXRlOw0KPj4gKwkJCQliZXN0X2RpZmYgPSBkaWZmOw0K Pj4gKwkJCQlyZXEtPmJlc3RfcGFyZW50X3JhdGUgPSBwYXJlbnRfcmF0ZTsNCj4+ICsJCQkJcmVx LT5iZXN0X3BhcmVudF9odyA9IHBhcmVudDsNCj4+ICsJCQl9DQo+PiArDQo+PiArCQkJaWYgKCFi ZXN0X2RpZmYgfHwgcmF0ZSA8IHJlcS0+cmF0ZSkNCj4+ICsJCQkJYnJlYWs7DQo+PiArCQl9DQo+ PiArDQo+PiArCQlpZiAoIWJlc3RfZGlmZikNCj4+ICsJCQlicmVhazsNCj4+ICsJfQ0KPj4gKw0K Pj4gKwlkZXZfZGJnKGlzY19jbGstPmRldiwNCj4+ICsJCSJJU0MgQ0xLOiAlcywgYmVzdF9yYXRl ID0gJWxkLCBwYXJlbnQgY2xrOiAlcyBAICVsZFxuIiwNCj4+ICsJCV9fZnVuY19fLCBiZXN0X3Jh dGUsDQo+PiArCQlfX2Nsa19nZXRfbmFtZSgocmVxLT5iZXN0X3BhcmVudF9odyktPmNsayksDQo+ PiArCQlyZXEtPmJlc3RfcGFyZW50X3JhdGUpOw0KPj4gKw0KPj4gKwlpZiAoYmVzdF9yYXRlIDwg MCkNCj4+ICsJCXJldHVybiBiZXN0X3JhdGU7DQo+PiArDQo+PiArCXJlcS0+cmF0ZSA9IGJlc3Rf cmF0ZTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQg aXNjX2Nsa19zZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3LCB1OCBpbmRleCkNCj4+ICt7DQo+ PiArCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQo+PiArDQo+PiAr CWlmIChpbmRleCA+PSBjbGtfaHdfZ2V0X251bV9wYXJlbnRzKGh3KSkNCj4+ICsJCXJldHVybiAt RUlOVkFMOw0KPj4gKw0KPj4gKwlpc2NfY2xrLT5wYXJlbnRfaWQgPSBpbmRleDsNCj4+ICsNCj4+ ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB1OCBpc2NfY2xrX2dldF9wYXJl bnQoc3RydWN0IGNsa19odyAqaHcpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2Ns ayA9IHRvX2lzY19jbGsoaHcpOw0KPj4gKw0KPj4gKwlyZXR1cm4gaXNjX2Nsay0+cGFyZW50X2lk Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGlzY19jbGtfc2V0X3JhdGUoc3RydWN0IGNs a19odyAqaHcsDQo+PiArCQkJICAgICB1bnNpZ25lZCBsb25nIHJhdGUsDQo+PiArCQkJICAgICB1 bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGlzY19jbGsgKmlz Y19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCj4+ICsJdTMyIGRpdjsNCj4+ICsNCj4+ICsJaWYgKCFy YXRlKQ0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArDQo+PiArCWRpdiA9IERJVl9ST1VORF9D TE9TRVNUKHBhcmVudF9yYXRlLCByYXRlKTsNCj4+ICsJaWYgKGRpdiA+IChJU0NfQ0xLX01BWF9E SVYgKyAxKSB8fCAhZGl2KQ0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArDQo+PiArCWlzY19j bGstPmRpdiA9IGRpdiAtIDE7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgaXNjX2Nsa19vcHMgPSB7DQo+PiArCS5wcmVw YXJlCT0gaXNjX2Nsa19wcmVwYXJlLA0KPj4gKwkudW5wcmVwYXJlCT0gaXNjX2Nsa191bnByZXBh cmUsDQo+PiArCS5lbmFibGUJCT0gaXNjX2Nsa19lbmFibGUsDQo+PiArCS5kaXNhYmxlCT0gaXNj X2Nsa19kaXNhYmxlLA0KPj4gKwkuaXNfZW5hYmxlZAk9IGlzY19jbGtfaXNfZW5hYmxlZCwNCj4+ ICsJLnJlY2FsY19yYXRlCT0gaXNjX2Nsa19yZWNhbGNfcmF0ZSwNCj4+ICsJLmRldGVybWluZV9y YXRlCT0gaXNjX2Nsa19kZXRlcm1pbmVfcmF0ZSwNCj4+ICsJLnNldF9wYXJlbnQJPSBpc2NfY2xr X3NldF9wYXJlbnQsDQo+PiArCS5nZXRfcGFyZW50CT0gaXNjX2Nsa19nZXRfcGFyZW50LA0KPj4g Kwkuc2V0X3JhdGUJPSBpc2NfY2xrX3NldF9yYXRlLA0KPj4gK307DQo+PiArDQo+PiArc3RhdGlj IGludCBpc2NfY2xrX3JlZ2lzdGVyKHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHVuc2lnbmVkIGlu dCBpZCkNCj4+ICt7DQo+PiArCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0K Pj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gaXNjLT5kZXYtPm9mX25vZGU7DQo+PiArCXN0 cnVjdCBpc2NfY2xrICppc2NfY2xrOw0KPj4gKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0Ow0K Pj4gKwljb25zdCBjaGFyICpjbGtfbmFtZSA9IG5wLT5uYW1lOw0KPj4gKwljb25zdCBjaGFyICpw YXJlbnRfbmFtZXNbM107DQo+PiArCWludCBudW1fcGFyZW50czsNCj4+ICsNCj4+ICsJbnVtX3Bh cmVudHMgPSBvZl9jbGtfZ2V0X3BhcmVudF9jb3VudChucCk7DQo+PiArCWlmIChudW1fcGFyZW50 cyA8IDEgfHwgbnVtX3BhcmVudHMgPiAzKQ0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArDQo+ PiArCWlmIChudW1fcGFyZW50cyA+IDIgJiYgaWQgPT0gSVNDX0lTUENLKQ0KPj4gKwkJbnVtX3Bh cmVudHMgPSAyOw0KPj4gKw0KPj4gKwlvZl9jbGtfcGFyZW50X2ZpbGwobnAsIHBhcmVudF9uYW1l cywgbnVtX3BhcmVudHMpOw0KPj4gKw0KPj4gKwlpZiAoaWQgPT0gSVNDX01DSykNCj4+ICsJCW9m X3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwgJmNsa19uYW1l KTsNCj4+ICsJZWxzZQ0KPj4gKwkJY2xrX25hbWUgPSAiaXNjLWlzcGNrIjsNCj4+ICsNCj4+ICsJ aW5pdC5wYXJlbnRfbmFtZXMJPSBwYXJlbnRfbmFtZXM7DQo+PiArCWluaXQubnVtX3BhcmVudHMJ PSBudW1fcGFyZW50czsNCj4+ICsJaW5pdC5uYW1lCQk9IGNsa19uYW1lOw0KPj4gKwlpbml0Lm9w cwkJPSAmaXNjX2Nsa19vcHM7DQo+PiArCWluaXQuZmxhZ3MJCT0gQ0xLX1NFVF9SQVRFX0dBVEUg fCBDTEtfU0VUX1BBUkVOVF9HQVRFOw0KPj4gKw0KPj4gKwlpc2NfY2xrID0gJmlzYy0+aXNjX2Ns a3NbaWRdOw0KPj4gKwlpc2NfY2xrLT5ody5pbml0CT0gJmluaXQ7DQo+PiArCWlzY19jbGstPnJl Z21hcAkJPSByZWdtYXA7DQo+PiArCWlzY19jbGstPmlkCQk9IGlkOw0KPj4gKwlpc2NfY2xrLT5k ZXYJCT0gaXNjLT5kZXY7DQo+PiArCXNwaW5fbG9ja19pbml0KCZpc2NfY2xrLT5sb2NrKTsNCj4+ ICsNCj4+ICsJaXNjX2Nsay0+Y2xrID0gY2xrX3JlZ2lzdGVyKGlzYy0+ZGV2LCAmaXNjX2Nsay0+ aHcpOw0KPj4gKwlpZiAoSVNfRVJSKGlzY19jbGstPmNsaykpIHsNCj4+ICsJCWRldl9lcnIoaXNj LT5kZXYsICIlczogY2xvY2sgcmVnaXN0ZXIgZmFpbFxuIiwgY2xrX25hbWUpOw0KPj4gKwkJcmV0 dXJuIFBUUl9FUlIoaXNjX2Nsay0+Y2xrKTsNCj4+ICsJfSBlbHNlIGlmIChpZCA9PSBJU0NfTUNL KQ0KPj4gKwkJb2ZfY2xrX2FkZF9wcm92aWRlcihucCwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LCBp c2NfY2xrLT5jbGspOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiAraW50 IGlzY19jbGtfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KPj4gK3sNCj4+ICsJdW5zaWdu ZWQgaW50IGk7DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGlzYy0+aXNjX2Nsa3MpOyBpKyspDQo+PiArCQlpc2MtPmlzY19jbGtzW2ldLmNsayA9 IEVSUl9QVFIoLUVJTlZBTCk7DQo+PiArDQo+PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGlzYy0+aXNjX2Nsa3MpOyBpKyspIHsNCj4+ICsJCXJldCA9IGlzY19jbGtfcmVnaXN0ZXIoaXNj LCBpKTsNCj4+ICsJCWlmIChyZXQpDQo+PiArCQkJcmV0dXJuIHJldDsNCj4+ICsJfQ0KPj4gKw0K Pj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArdm9pZCBpc2NfY2xrX2NsZWFudXAoc3Ry dWN0IGlzY19kZXZpY2UgKmlzYykNCj4+ICt7DQo+PiArCXVuc2lnbmVkIGludCBpOw0KPj4gKw0K Pj4gKwlvZl9jbGtfZGVsX3Byb3ZpZGVyKGlzYy0+ZGV2LT5vZl9ub2RlKTsNCj4+ICsNCj4+ICsJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXNjLT5pc2NfY2xrcyk7IGkrKykgew0KPj4gKwkJ c3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSAmaXNjLT5pc2NfY2xrc1tpXTsNCj4+ICsNCj4+ICsJ CWlmICghSVNfRVJSKGlzY19jbGstPmNsaykpDQo+PiArCQkJY2xrX3VucmVnaXN0ZXIoaXNjX2Ns ay0+Y2xrKTsNCj4+ICsJfQ0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGlzY19xdWV1ZV9z ZXR1cChzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwNCj4+ICsJCQkgICAgdW5zaWduZWQgaW50ICpuYnVm ZmVycywgdW5zaWduZWQgaW50ICpucGxhbmVzLA0KPj4gKwkJCSAgICB1bnNpZ25lZCBpbnQgc2l6 ZXNbXSwgc3RydWN0IGRldmljZSAqYWxsb2NfZGV2c1tdKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGlz Y19kZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOw0KPj4gKwl1bnNpZ25lZCBpbnQg c2l6ZSA9IGlzYy0+Zm10LmZtdC5waXguc2l6ZWltYWdlOw0KPj4gKw0KPj4gKwlpZiAoKm5wbGFu ZXMpDQo+PiArCQlyZXR1cm4gc2l6ZXNbMF0gPCBzaXplID8gLUVJTlZBTCA6IDA7DQo+PiArDQo+ PiArCSpucGxhbmVzID0gMTsNCj4+ICsJc2l6ZXNbMF0gPSBzaXplOw0KPj4gKw0KPj4gKwlyZXR1 cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpc2NfYnVmZmVyX3ByZXBhcmUoc3Ry dWN0IHZiMl9idWZmZXIgKnZiKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAq dmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7DQo+PiArCXN0cnVjdCBpc2NfZGV2aWNlICpp c2MgPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOw0KPj4gKwl1bnNpZ25lZCBsb25n IHNpemUgPSBpc2MtPmZtdC5mbXQucGl4LnNpemVpbWFnZTsNCj4+ICsNCj4+ICsJaWYgKHZiMl9w bGFuZV9zaXplKHZiLCAwKSA8IHNpemUpIHsNCj4+ICsJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2 LCAiYnVmZmVyIHRvbyBzbWFsbCAoJWx1IDwgJWx1KVxuIiwNCj4+ICsJCQkgdmIyX3BsYW5lX3Np emUodmIsIDApLCBzaXplKTsNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4gKwl9DQo+PiArDQo+ PiArCXZiMl9zZXRfcGxhbmVfcGF5bG9hZCh2YiwgMCwgc2l6ZSk7DQo+PiArDQo+PiArCXZidWYt PmZpZWxkID0gaXNjLT5mbXQuZm10LnBpeC5maWVsZDsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGlzY19zdGFydF9kbWEoc3RydWN0IGlzY19kZXZp Y2UgKmlzYykNCj4+ICt7DQo+PiArCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFw Ow0KPj4gKwl1MzIgc2l6ZWltYWdlID0gaXNjLT5mbXQuZm10LnBpeC5zaXplaW1hZ2U7DQo+PiAr CXUzMiBkY3RybF9kdmlldzsNCj4+ICsJZG1hX2FkZHJfdCBhZGRyMDsNCj4+ICsJdTMyIGgsIHc7 DQo+PiArDQo+PiArCWggPSBpc2MtPmZtdC5mbXQucGl4LmhlaWdodDsNCj4+ICsJdyA9IGlzYy0+ Zm10LmZtdC5waXgud2lkdGg7DQo+PiArDQo+PiArCS8qDQo+PiArCSAqIEluIGNhc2UgdGhlIHNl bnNvciBpcyBub3QgUkFXLCBpdCB3aWxsIG91dHB1dCBhIHBpeGVsICgxMi0xNiBiaXRzKQ0KPj4g KwkgKiB3aXRoIHR3byBzYW1wbGVzIG9uIHRoZSBJU0MgRGF0YSBidXMgKHdoaWNoIGlzIDgtMTIp DQo+PiArCSAqIElTQyB3aWxsIGNvdW50IGVhY2ggc2FtcGxlLCBzbywgd2UgbmVlZCB0byBtdWx0 aXBseSB0aGVzZSB2YWx1ZXMNCj4+ICsJICogYnkgdHdvLCB0byBnZXQgdGhlIHJlYWwgbnVtYmVy IG9mIHNhbXBsZXMgZm9yIHRoZSByZXF1aXJlZCBwaXhlbHMuDQo+PiArCSAqLw0KPj4gKwlpZiAo IUlTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0K Pj4gKwkJaCA8PD0gMTsNCj4+ICsJCXcgPDw9IDE7DQo+PiArCX0NCj4+ICsNCj4+ICsJLyoNCj4+ ICsJICogV2UgbGltaXQgdGhlIGNvbHVtbi9yb3cgY291bnQgdGhhdCB0aGUgSVNDIHdpbGwgb3V0 cHV0IGFjY29yZGluZw0KPj4gKwkgKiB0byB0aGUgY29uZmlndXJlZCByZXNvbHV0aW9uIHRoYXQg d2Ugd2FudC4NCj4+ICsJICogVGhpcyB3aWxsIGF2b2lkIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhl IHNlbnNvciBpcyBtaXNjb25maWd1cmVkLA0KPj4gKwkgKiBzZW5kaW5nIG1vcmUgZGF0YSwgYW5k IHRoZSBJU0Mgd2lsbCBqdXN0IHRha2UgaXQgYW5kIERNQSB0byBtZW1vcnksDQo+PiArCSAqIGNh dXNpbmcgY29ycnVwdGlvbi4NCj4+ICsJICovDQo+PiArCXJlZ21hcF93cml0ZShyZWdtYXAsIElT Q19QRkVfQ0ZHMSwNCj4+ICsJCSAgICAgKElTQ19QRkVfQ0ZHMV9DT0xNSU4oMCkgJiBJU0NfUEZF X0NGRzFfQ09MTUlOX01BU0spIHwNCj4+ICsJCSAgICAgKElTQ19QRkVfQ0ZHMV9DT0xNQVgodyAt IDEpICYgSVNDX1BGRV9DRkcxX0NPTE1BWF9NQVNLKSk7DQo+PiArDQo+PiArCXJlZ21hcF93cml0 ZShyZWdtYXAsIElTQ19QRkVfQ0ZHMiwNCj4+ICsJCSAgICAgKElTQ19QRkVfQ0ZHMl9ST1dNSU4o MCkgJiBJU0NfUEZFX0NGRzJfUk9XTUlOX01BU0spIHwNCj4+ICsJCSAgICAgKElTQ19QRkVfQ0ZH Ml9ST1dNQVgoaCAtIDEpICYgSVNDX1BGRV9DRkcyX1JPV01BWF9NQVNLKSk7DQo+PiArDQo+PiAr CXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19QRkVfQ0ZHMCwNCj4+ICsJCQkgICBJU0Nf UEZFX0NGRzBfQ09MRU4gfCBJU0NfUEZFX0NGRzBfUk9XRU4sDQo+PiArCQkJICAgSVNDX1BGRV9D RkcwX0NPTEVOIHwgSVNDX1BGRV9DRkcwX1JPV0VOKTsNCj4+ICsNCj4+ICsJYWRkcjAgPSB2YjJf ZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRkcigmaXNjLT5jdXJfZnJtLT52Yi52YjJfYnVmLCAwKTsN Cj4+ICsJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDAsIGFkZHIwKTsNCj4+ICsNCj4+ICsJ c3dpdGNoIChpc2MtPmNvbmZpZy5mb3VyY2MpIHsNCj4+ICsJY2FzZSBWNEwyX1BJWF9GTVRfWVVW NDIwOg0KPj4gKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDEsIGFkZHIwICsgKHNpemVp bWFnZSAqIDIpIC8gMyk7DQo+PiArCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMiwgYWRk cjAgKyAoc2l6ZWltYWdlICogNSkgLyA2KTsNCj4+ICsJCWJyZWFrOw0KPj4gKwljYXNlIFY0TDJf UElYX0ZNVF9ZVVY0MjJQOg0KPj4gKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDEsIGFk ZHIwICsgc2l6ZWltYWdlIC8gMik7DQo+PiArCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFE MiwgYWRkcjAgKyAoc2l6ZWltYWdlICogMykgLyA0KTsNCj4+ICsJCWJyZWFrOw0KPj4gKwlkZWZh dWx0Og0KPj4gKwkJYnJlYWs7DQo+PiArCX0NCj4+ICsNCj4+ICsJZGN0cmxfZHZpZXcgPSBpc2Mt PmNvbmZpZy5kY3RybF9kdmlldzsNCj4+ICsNCj4+ICsJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVND X0RDVFJMLCBkY3RybF9kdmlldyB8IElTQ19EQ1RSTF9JRV9JUyk7DQo+PiArCXNwaW5fbG9jaygm aXNjLT5hd2JfbG9jayk7DQo+PiArCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElT Q19DVFJMX0NBUFRVUkUpOw0KPj4gKwlzcGluX3VubG9jaygmaXNjLT5hd2JfbG9jayk7DQo+PiAr fQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGlzY19zZXRfcGlwZWxpbmUoc3RydWN0IGlzY19kZXZp Y2UgKmlzYywgdTMyIHBpcGVsaW5lKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHJlZ21hcCAqcmVnbWFw ID0gaXNjLT5yZWdtYXA7DQo+PiArCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3Ry bHM7DQo+PiArCXUzMiB2YWwsIGJheV9jZmc7DQo+PiArCWNvbnN0IHUzMiAqZ2FtbWE7DQo+PiAr CXVuc2lnbmVkIGludCBpOw0KPj4gKw0KPj4gKwkvKiBXQi0tPkNGQS0tPkNDLS0+R0FNLS0+Q1ND LS0+Q0JDLS0+U1VCNDIyLS0+U1VCNDIwICovDQo+PiArCWZvciAoaSA9IDA7IGkgPCBJU0NfUElQ RV9MSU5FX05PREVfTlVNOyBpKyspIHsNCj4+ICsJCXZhbCA9IHBpcGVsaW5lICYgQklUKGkpID8g MSA6IDA7DQo+PiArCQlyZWdtYXBfZmllbGRfd3JpdGUoaXNjLT5waXBlbGluZVtpXSwgdmFsKTsN Cj4+ICsJfQ0KPj4gKw0KPj4gKwlpZiAoIXBpcGVsaW5lKQ0KPj4gKwkJcmV0dXJuOw0KPj4gKw0K Pj4gKwliYXlfY2ZnID0gaXNjLT5jb25maWcuc2RfZm9ybWF0LT5jZmFfYmF5Y2ZnOw0KPj4gKw0K Pj4gKwlpZiAoY3RybHMtPmF3YiA9PSBJU0NfV0JfTk9ORSkNCj4+ICsJCWlzY19yZXNldF9hd2Jf Y3RybHMoaXNjKTsNCj4+ICsNCj4+ICsJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX1dCX0NGRywg YmF5X2NmZyk7DQo+PiArCWlzY191cGRhdGVfYXdiX2N0cmxzKGlzYyk7DQo+PiArDQo+PiArCXJl Z21hcF93cml0ZShyZWdtYXAsIElTQ19DRkFfQ0ZHLCBiYXlfY2ZnIHwgSVNDX0NGQV9DRkdfRUlU UE9MKTsNCj4+ICsNCj4+ICsJZ2FtbWEgPSAmaXNjX2dhbW1hX3RhYmxlW2N0cmxzLT5nYW1tYV9p bmRleF1bMF07DQo+PiArCXJlZ21hcF9idWxrX3dyaXRlKHJlZ21hcCwgSVNDX0dBTV9CRU5UUlks IGdhbW1hLCBHQU1NQV9FTlRSSUVTKTsNCj4+ICsJcmVnbWFwX2J1bGtfd3JpdGUocmVnbWFwLCBJ U0NfR0FNX0dFTlRSWSwgZ2FtbWEsIEdBTU1BX0VOVFJJRVMpOw0KPj4gKwlyZWdtYXBfYnVsa193 cml0ZShyZWdtYXAsIElTQ19HQU1fUkVOVFJZLCBnYW1tYSwgR0FNTUFfRU5UUklFUyk7DQo+PiAr DQo+PiArCS8qIENvbnZlcnQgUkdCIHRvIFlVViAqLw0KPj4gKwlyZWdtYXBfd3JpdGUocmVnbWFw LCBJU0NfQ1NDX1lSX1lHLCAweDQyIHwgKDB4ODEgPDwgMTYpKTsNCj4+ICsJcmVnbWFwX3dyaXRl KHJlZ21hcCwgSVNDX0NTQ19ZQl9PWSwgMHgxOSB8ICgweDEwIDw8IDE2KSk7DQo+PiArCXJlZ21h cF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ0JSX0NCRywgMHhGREEgfCAoMHhGQjYgPDwgMTYpKTsN Cj4+ICsJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19DQkJfT0NCLCAweDcwIHwgKDB4ODAg PDwgMTYpKTsNCj4+ICsJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19DUlJfQ1JHLCAweDcw IHwgKDB4RkEyIDw8IDE2KSk7DQo+PiArCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ1JC X09DUiwgMHhGRUUgfCAoMHg4MCA8PCAxNikpOw0KPj4gKw0KPj4gKwlyZWdtYXBfd3JpdGUocmVn bWFwLCBJU0NfQ0JDX0JSSUdIVCwgY3RybHMtPmJyaWdodG5lc3MpOw0KPj4gKwlyZWdtYXBfd3Jp dGUocmVnbWFwLCBJU0NfQ0JDX0NPTlRSQVNULCBjdHJscy0+Y29udHJhc3QpOw0KPj4gK30NCj4+ ICsNCj4+ICtzdGF0aWMgaW50IGlzY191cGRhdGVfcHJvZmlsZShzdHJ1Y3QgaXNjX2RldmljZSAq aXNjKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQo+ PiArCXUzMiBzcjsNCj4+ICsJaW50IGNvdW50ZXIgPSAxMDA7DQo+PiArDQo+PiArCXJlZ21hcF93 cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX1VQUFJPKTsNCj4+ICsNCj4+ICsJcmVn bWFwX3JlYWQocmVnbWFwLCBJU0NfQ1RSTFNSLCAmc3IpOw0KPj4gKwl3aGlsZSAoKHNyICYgSVND X0NUUkxfVVBQUk8pICYmIGNvdW50ZXItLSkgew0KPj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIw MDApOw0KPj4gKwkJcmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfQ1RSTFNSLCAmc3IpOw0KPj4gKwl9 DQo+PiArDQo+PiArCWlmIChjb3VudGVyIDwgMCkgew0KPj4gKwkJdjRsMl93YXJuKCZpc2MtPnY0 bDJfZGV2LCAiVGltZSBvdXQgdG8gdXBkYXRlIHByb2ZpbGVcbiIpOw0KPj4gKwkJcmV0dXJuIC1F VElNRURPVVQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4g K3N0YXRpYyB2b2lkIGlzY19zZXRfaGlzdG9ncmFtKHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIGJv b2wgZW5hYmxlKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdt YXA7DQo+PiArCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQo+PiArDQo+ PiArCWlmIChlbmFibGUpIHsNCj4+ICsJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNfQ0ZH LA0KPj4gKwkJCSAgICAgSVNDX0hJU19DRkdfTU9ERV9HUiB8DQo+PiArCQkJICAgICAoaXNjLT5j b25maWcuc2RfZm9ybWF0LT5jZmFfYmF5Y2ZnDQo+PiArCQkJCQk8PCBJU0NfSElTX0NGR19CQVlT RUxfU0hJRlQpIHwNCj4+ICsJCQkJCUlTQ19ISVNfQ0ZHX1JBUik7DQo+PiArCQlyZWdtYXBfd3Jp dGUocmVnbWFwLCBJU0NfSElTX0NUUkwsIElTQ19ISVNfQ1RSTF9FTik7DQo+PiArCQlyZWdtYXBf d3JpdGUocmVnbWFwLCBJU0NfSU5URU4sIElTQ19JTlRfSElTRE9ORSk7DQo+PiArCQljdHJscy0+ aGlzdF9pZCA9IElTQ19ISVNfQ0ZHX01PREVfR1I7DQo+PiArCQlpc2NfdXBkYXRlX3Byb2ZpbGUo aXNjKTsNCj4+ICsJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX0hJ U1JFUSk7DQo+PiArDQo+PiArCQljdHJscy0+aGlzdF9zdGF0ID0gSElTVF9FTkFCTEVEOw0KPj4g Kwl9IGVsc2Ugew0KPj4gKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0lOVERJUywgSVNDX0lO VF9ISVNET05FKTsNCj4+ICsJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNfQ1RSTCwgSVND X0hJU19DVFJMX0RJUyk7DQo+PiArDQo+PiArCQljdHJscy0+aGlzdF9zdGF0ID0gSElTVF9ESVNB QkxFRDsNCj4+ICsJfQ0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGlzY19jb25maWd1cmUo c3RydWN0IGlzY19kZXZpY2UgKmlzYykNCj4+ICt7DQo+PiArCXN0cnVjdCByZWdtYXAgKnJlZ21h cCA9IGlzYy0+cmVnbWFwOw0KPj4gKwl1MzIgcGZlX2NmZzAsIHJscF9tb2RlLCBkY2ZnLCBtYXNr LCBwaXBlbGluZTsNCj4+ICsJc3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXYgPSBpc2Mt PmN1cnJlbnRfc3ViZGV2Ow0KPj4gKw0KPj4gKwlwZmVfY2ZnMCA9IGlzYy0+Y29uZmlnLnNkX2Zv cm1hdC0+cGZlX2NmZzBfYnBzOw0KPj4gKwlybHBfbW9kZSA9IGlzYy0+Y29uZmlnLnJscF9jZmdf bW9kZTsNCj4+ICsJcGlwZWxpbmUgPSBpc2MtPmNvbmZpZy5iaXRzX3BpcGVsaW5lOw0KPj4gKw0K Pj4gKwlkY2ZnID0gaXNjLT5jb25maWcuZGNmZ19pbW9kZSB8DQo+PiArCQkgICAgICAgSVNDX0RD RkdfWU1CU0laRV9CRUFUUzggfCBJU0NfRENGR19DTUJTSVpFX0JFQVRTODsNCj4+ICsNCj4+ICsJ cGZlX2NmZzAgIHw9IHN1YmRldi0+cGZlX2NmZzAgfCBJU0NfUEZFX0NGRzBfTU9ERV9QUk9HUkVT U0lWRTsNCj4+ICsJbWFzayA9IElTQ19QRkVfQ0ZHMF9CUFNfTUFTSyB8IElTQ19QRkVfQ0ZHMF9I UE9MX0xPVyB8DQo+PiArCSAgICAgICBJU0NfUEZFX0NGRzBfVlBPTF9MT1cgfCBJU0NfUEZFX0NG RzBfUFBPTF9MT1cgfA0KPj4gKwkgICAgICAgSVNDX1BGRV9DRkcwX01PREVfTUFTSyB8IElTQ19Q RkVfQ0ZHMF9DQ0lSX0NSQyB8DQo+PiArCQkgICBJU0NfUEZFX0NGRzBfQ0NJUjY1NjsNCj4+ICsN Cj4+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgSVNDX1BGRV9DRkcwLCBtYXNrLCBwZmVf Y2ZnMCk7DQo+PiArDQo+PiArCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19STFBfQ0ZH LCBJU0NfUkxQX0NGR19NT0RFX01BU0ssDQo+PiArCQkJICAgcmxwX21vZGUpOw0KPj4gKw0KPj4g KwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfRENGRywgZGNmZyk7DQo+PiArDQo+PiArCS8qIFNl dCB0aGUgcGlwZWxpbmUgKi8NCj4+ICsJaXNjX3NldF9waXBlbGluZShpc2MsIHBpcGVsaW5lKTsN Cj4+ICsNCj4+ICsJLyoNCj4+ICsJICogVGhlIGN1cnJlbnQgaW1wbGVtZW50ZWQgaGlzdG9ncmFt IGlzIGF2YWlsYWJsZSBmb3IgUkFXIFIsIEIsIEdCLCBHUg0KPj4gKwkgKiBjaGFubmVscy4gV2Ug bmVlZCB0byBjaGVjayBpZiBzZW5zb3IgaXMgb3V0cHV0dGluZyBSQVcgQkFZRVINCj4+ICsJICov DQo+PiArCWlmIChpc2MtPmN0cmxzLmF3YiAmJg0KPj4gKwkgICAgSVNDX0lTX0ZPUk1BVF9SQVco aXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KPj4gKwkJaXNjX3NldF9oaXN0b2dy YW0oaXNjLCB0cnVlKTsNCj4+ICsJZWxzZQ0KPj4gKwkJaXNjX3NldF9oaXN0b2dyYW0oaXNjLCBm YWxzZSk7DQo+PiArDQo+PiArCS8qIFVwZGF0ZSBwcm9maWxlICovDQo+PiArCXJldHVybiBpc2Nf dXBkYXRlX3Byb2ZpbGUoaXNjKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpc2Nfc3Rh cnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgY291bnQpDQo+ PiArew0KPj4gKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2cSk7 DQo+PiArCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KPj4gKwlzdHJ1Y3Qg aXNjX2J1ZmZlciAqYnVmOw0KPj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPj4gKwlpbnQgcmV0 Ow0KPj4gKw0KPj4gKwkvKiBFbmFibGUgc3RyZWFtIG9uIHRoZSBzdWIgZGV2aWNlICovDQo+PiAr CXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHZpZGVvLCBz X3N0cmVhbSwgMSk7DQo+PiArCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9JT0NUTENNRCkgew0KPj4g KwkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJzdHJlYW0gb24gZmFpbGVkIGluIHN1YmRldiAl ZFxuIiwNCj4+ICsJCQkgcmV0KTsNCj4+ICsJCWdvdG8gZXJyX3N0YXJ0X3N0cmVhbTsNCj4+ICsJ fQ0KPj4gKw0KPj4gKwlwbV9ydW50aW1lX2dldF9zeW5jKGlzYy0+ZGV2KTsNCj4+ICsNCj4+ICsJ cmV0ID0gaXNjX2NvbmZpZ3VyZShpc2MpOw0KPj4gKwlpZiAodW5saWtlbHkocmV0KSkNCj4+ICsJ CWdvdG8gZXJyX2NvbmZpZ3VyZTsNCj4+ICsNCj4+ICsJLyogRW5hYmxlIERNQSBpbnRlcnJ1cHQg Ki8NCj4+ICsJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0lOVEVOLCBJU0NfSU5UX0RET05FKTsN Cj4+ICsNCj4+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdz KTsNCj4+ICsNCj4+ICsJaXNjLT5zZXF1ZW5jZSA9IDA7DQo+PiArCWlzYy0+c3RvcCA9IGZhbHNl Ow0KPj4gKwlyZWluaXRfY29tcGxldGlvbigmaXNjLT5jb21wKTsNCj4+ICsNCj4+ICsJaXNjLT5j dXJfZnJtID0gbGlzdF9maXJzdF9lbnRyeSgmaXNjLT5kbWFfcXVldWUsDQo+PiArCQkJCQlzdHJ1 Y3QgaXNjX2J1ZmZlciwgbGlzdCk7DQo+PiArCWxpc3RfZGVsKCZpc2MtPmN1cl9mcm0tPmxpc3Qp Ow0KPj4gKw0KPj4gKwlpc2Nfc3RhcnRfZG1hKGlzYyk7DQo+PiArDQo+PiArCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCj4+ICsNCj4+ICsJLyog aWYgd2Ugc3RyZWFtaW5nIGZyb20gUkFXLCB3ZSBjYW4gZG8gb25lLXNob3Qgd2hpdGUgYmFsYW5j ZSBhZGogKi8NCj4+ICsJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1h dC0+bWJ1c19jb2RlKSkNCj4+ICsJCXY0bDJfY3RybF9hY3RpdmF0ZShpc2MtPmRvX3diX2N0cmws IHRydWUpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICsNCj4+ICtlcnJfY29uZmlndXJlOg0K Pj4gKwlwbV9ydW50aW1lX3B1dF9zeW5jKGlzYy0+ZGV2KTsNCj4+ICsNCj4+ICsJdjRsMl9zdWJk ZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsNCj4+ ICsNCj4+ICtlcnJfc3RhcnRfc3RyZWFtOg0KPj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5k bWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KPj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZiwgJmlz Yy0+ZG1hX3F1ZXVlLCBsaXN0KQ0KPj4gKwkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZiLnZiMl9i dWYsIFZCMl9CVUZfU1RBVEVfUVVFVUVEKTsNCj4+ICsJSU5JVF9MSVNUX0hFQUQoJmlzYy0+ZG1h X3F1ZXVlKTsNCj4+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFfcXVldWVfbG9j aywgZmxhZ3MpOw0KPj4gKw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgdm9pZCBpc2Nfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEpDQo+PiArew0K Pj4gKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2cSk7DQo+PiAr CXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+PiArCXN0cnVjdCBpc2NfYnVmZmVyICpidWY7DQo+PiAr CWludCByZXQ7DQo+PiArDQo+PiArCXY0bDJfY3RybF9hY3RpdmF0ZShpc2MtPmRvX3diX2N0cmws IGZhbHNlKTsNCj4+ICsNCj4+ICsJaXNjLT5zdG9wID0gdHJ1ZTsNCj4+ICsNCj4+ICsJLyogV2Fp dCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGZyYW1lICovDQo+PiArCWlmIChpc2MtPmN1 cl9mcm0gJiYgIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaXNjLT5jb21wLCA1ICogSFop KQ0KPj4gKwkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsDQo+PiArCQkJICJUaW1lb3V0IHdhaXRp bmcgZm9yIGVuZCBvZiB0aGUgY2FwdHVyZVxuIik7DQo+PiArDQo+PiArCS8qIERpc2FibGUgRE1B IGludGVycnVwdCAqLw0KPj4gKwlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19JTlRESVMs IElTQ19JTlRfRERPTkUpOw0KPj4gKw0KPj4gKwlwbV9ydW50aW1lX3B1dF9zeW5jKGlzYy0+ZGV2 KTsNCj4+ICsNCj4+ICsJLyogRGlzYWJsZSBzdHJlYW0gb24gdGhlIHN1YiBkZXZpY2UgKi8NCj4+ ICsJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgdmlkZW8s IHNfc3RyZWFtLCAwKTsNCj4+ICsJaWYgKHJldCAmJiByZXQgIT0gLUVOT0lPQ1RMQ01EKQ0KPj4g KwkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJzdHJlYW0gb2ZmIGZhaWxlZCBpbiBzdWJkZXZc biIpOw0KPj4gKw0KPj4gKwkvKiBSZWxlYXNlIGFsbCBhY3RpdmUgYnVmZmVycyAqLw0KPj4gKwlz cGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KPj4gKwlpZiAo dW5saWtlbHkoaXNjLT5jdXJfZnJtKSkgew0KPj4gKwkJdmIyX2J1ZmZlcl9kb25lKCZpc2MtPmN1 cl9mcm0tPnZiLnZiMl9idWYsDQo+PiArCQkJCVZCMl9CVUZfU1RBVEVfRVJST1IpOw0KPj4gKwkJ aXNjLT5jdXJfZnJtID0gTlVMTDsNCj4+ICsJfQ0KPj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1 ZiwgJmlzYy0+ZG1hX3F1ZXVlLCBsaXN0KQ0KPj4gKwkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZi LnZiMl9idWYsIFZCMl9CVUZfU1RBVEVfRVJST1IpOw0KPj4gKwlJTklUX0xJU1RfSEVBRCgmaXNj LT5kbWFfcXVldWUpOw0KPj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2MtPmRtYV9xdWV1 ZV9sb2NrLCBmbGFncyk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGlzY19idWZmZXJf cXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHZiMl92NGwy X2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7DQo+PiArCXN0cnVjdCBpc2Nf YnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmJ1Ziwgc3RydWN0IGlzY19idWZmZXIsIHZiKTsN Cj4+ICsJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9x dWV1ZSk7DQo+PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+PiArDQo+PiArCXNwaW5fbG9ja19p cnFzYXZlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQo+PiArCWlmICghaXNjLT5jdXJf ZnJtICYmIGxpc3RfZW1wdHkoJmlzYy0+ZG1hX3F1ZXVlKSAmJg0KPj4gKwkJdmIyX2lzX3N0cmVh bWluZyh2Yi0+dmIyX3F1ZXVlKSkgew0KPj4gKwkJaXNjLT5jdXJfZnJtID0gYnVmOw0KPj4gKwkJ aXNjX3N0YXJ0X2RtYShpc2MpOw0KPj4gKwl9IGVsc2UNCj4+ICsJCWxpc3RfYWRkX3RhaWwoJmJ1 Zi0+bGlzdCwgJmlzYy0+ZG1hX3F1ZXVlKTsNCj4+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm aXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgc3Ry dWN0IGlzY19mb3JtYXQgKmZpbmRfZm9ybWF0X2J5X2ZvdXJjYyhzdHJ1Y3QgaXNjX2RldmljZSAq aXNjLA0KPj4gKwkJCQkJCSB1bnNpZ25lZCBpbnQgZm91cmNjKQ0KPj4gK3sNCj4+ICsJdW5zaWdu ZWQgaW50IG51bV9mb3JtYXRzID0gaXNjLT5udW1fdXNlcl9mb3JtYXRzOw0KPj4gKwlzdHJ1Y3Qg aXNjX2Zvcm1hdCAqZm10Ow0KPj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4+ICsNCj4+ICsJZm9yIChp ID0gMDsgaSA8IG51bV9mb3JtYXRzOyBpKyspIHsNCj4+ICsJCWZtdCA9IGlzYy0+dXNlcl9mb3Jt YXRzW2ldOw0KPj4gKwkJaWYgKGZtdC0+Zm91cmNjID09IGZvdXJjYykNCj4+ICsJCQlyZXR1cm4g Zm10Ow0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiBOVUxMOw0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgY29uc3Qgc3RydWN0IHZiMl9vcHMgaXNjX3ZiMl9vcHMgPSB7DQo+PiArCS5xdWV1ZV9z ZXR1cAkJPSBpc2NfcXVldWVfc2V0dXAsDQo+PiArCS53YWl0X3ByZXBhcmUJCT0gdmIyX29wc193 YWl0X3ByZXBhcmUsDQo+PiArCS53YWl0X2ZpbmlzaAkJPSB2YjJfb3BzX3dhaXRfZmluaXNoLA0K Pj4gKwkuYnVmX3ByZXBhcmUJCT0gaXNjX2J1ZmZlcl9wcmVwYXJlLA0KPj4gKwkuc3RhcnRfc3Ry ZWFtaW5nCT0gaXNjX3N0YXJ0X3N0cmVhbWluZywNCj4+ICsJLnN0b3Bfc3RyZWFtaW5nCQk9IGlz Y19zdG9wX3N0cmVhbWluZywNCj4+ICsJLmJ1Zl9xdWV1ZQkJPSBpc2NfYnVmZmVyX3F1ZXVlLA0K Pj4gK307DQo+PiArDQo+PiArc3RhdGljIGludCBpc2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZp bGUsIHZvaWQgKnByaXYsDQo+PiArCQkJIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkNCj4+ ICt7DQo+PiArCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0K Pj4gKw0KPj4gKwlzdHJzY3B5KGNhcC0+ZHJpdmVyLCBBVE1FTF9JU0NfTkFNRSwgc2l6ZW9mKGNh cC0+ZHJpdmVyKSk7DQo+PiArCXN0cnNjcHkoY2FwLT5jYXJkLCAiQXRtZWwgSW1hZ2UgU2Vuc29y IENvbnRyb2xsZXIiLCBzaXplb2YoY2FwLT5jYXJkKSk7DQo+PiArCXNucHJpbnRmKGNhcC0+YnVz X2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSwNCj4+ICsJCSAicGxhdGZvcm06JXMiLCBpc2Mt PnY0bDJfZGV2Lm5hbWUpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIGludCBpc2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAq cHJpdiwNCj4+ICsJCQkJIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpDQo+PiArew0KPj4gKwl1MzIg aW5kZXggPSBmLT5pbmRleDsNCj4+ICsJdTMyIGksIHN1cHBvcnRlZF9pbmRleDsNCj4+ICsNCj4+ ICsJaWYgKGluZGV4IDwgQVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMpKSB7DQo+PiArCQlm LT5waXhlbGZvcm1hdCA9IGNvbnRyb2xsZXJfZm9ybWF0c1tpbmRleF0uZm91cmNjOw0KPj4gKwkJ cmV0dXJuIDA7DQo+PiArCX0NCj4+ICsNCj4+ICsJaW5kZXggLT0gQVJSQVlfU0laRShjb250cm9s bGVyX2Zvcm1hdHMpOw0KPj4gKw0KPj4gKwlpID0gMDsNCj4+ICsJc3VwcG9ydGVkX2luZGV4ID0g MDsNCj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm9ybWF0c19saXN0KTsg aSsrKSB7DQo+PiArCQlpZiAoIUlTQ19JU19GT1JNQVRfUkFXKGZvcm1hdHNfbGlzdFtpXS5tYnVz X2NvZGUpIHx8DQo+PiArCQkgICAgIWZvcm1hdHNfbGlzdFtpXS5zZF9zdXBwb3J0KQ0KPj4gKwkJ CWNvbnRpbnVlOw0KPj4gKwkJaWYgKHN1cHBvcnRlZF9pbmRleCA9PSBpbmRleCkgew0KPj4gKwkJ CWYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0c19saXN0W2ldLmZvdXJjYzsNCj4+ICsJCQlyZXR1cm4g MDsNCj4+ICsJCX0NCj4+ICsJCXN1cHBvcnRlZF9pbmRleCsrOw0KPj4gKwl9DQo+PiArDQo+PiAr CXJldHVybiAtRUlOVkFMOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGlzY19nX2ZtdF92 aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KPj4gKwkJCSAgICAgIHN0cnVj dCB2NGwyX2Zvcm1hdCAqZm10KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9 IHZpZGVvX2RydmRhdGEoZmlsZSk7DQo+PiArDQo+PiArCSpmbXQgPSBpc2MtPmZtdDsNCj4+ICsN Cj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gKy8qDQo+PiArICogQ2hlY2tzIHRoZSBj dXJyZW50IGNvbmZpZ3VyZWQgZm9ybWF0LCBpZiBJU0MgY2FuIG91dHB1dCBpdCwNCj4+ICsgKiBj b25zaWRlcmluZyB3aGljaCB0eXBlIG9mIGZvcm1hdCB0aGUgSVNDIHJlY2VpdmVzIGZyb20gdGhl IHNlbnNvcg0KPj4gKyAqLw0KPj4gK3N0YXRpYyBpbnQgaXNjX3RyeV92YWxpZGF0ZV9mb3JtYXRz KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQo+PiArew0KPj4gKwlpbnQgcmV0Ow0KPj4gKwlib29s IGJheWVyID0gZmFsc2UsIHl1diA9IGZhbHNlLCByZ2IgPSBmYWxzZSwgZ3JleSA9IGZhbHNlOw0K Pj4gKw0KPj4gKwkvKiBhbGwgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgdGhlIFJMUCBtb2R1bGUgYXJl IE9LICovDQo+PiArCXN3aXRjaCAoaXNjLT50cnlfY29uZmlnLmZvdXJjYykgew0KPj4gKwljYXNl IFY0TDJfUElYX0ZNVF9TQkdHUjg6DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHODoNCj4+ ICsJY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkc4Og0KPj4gKwljYXNlIFY0TDJfUElYX0ZNVF9TUkdH Qjg6DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTA6DQo+PiArCWNhc2UgVjRMMl9QSVhf Rk1UX1NHQlJHMTA6DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTA6DQo+PiArCWNhc2Ug VjRMMl9QSVhfRk1UX1NSR0dCMTA6DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTI6DQo+ PiArCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTI6DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX1NH UkJHMTI6DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTI6DQo+PiArCQlyZXQgPSAwOw0K Pj4gKwkJYmF5ZXIgPSB0cnVlOw0KPj4gKwkJYnJlYWs7DQo+PiArDQo+PiArCWNhc2UgVjRMMl9Q SVhfRk1UX1lVVjQyMDoNCj4+ICsJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoNCj4+ICsJY2Fz ZSBWNEwyX1BJWF9GTVRfWVVZVjoNCj4+ICsJCXJldCA9IDA7DQo+PiArCQl5dXYgPSB0cnVlOw0K Pj4gKwkJYnJlYWs7DQo+PiArDQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToNCj4+ICsJ Y2FzZSBWNEwyX1BJWF9GTVRfQUJHUjMyOg0KPj4gKwljYXNlIFY0TDJfUElYX0ZNVF9YQkdSMzI6 DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I0NDQ6DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1U X0FSR0I1NTU6DQo+PiArCQlyZXQgPSAwOw0KPj4gKwkJcmdiID0gdHJ1ZTsNCj4+ICsJCWJyZWFr Ow0KPj4gKwljYXNlIFY0TDJfUElYX0ZNVF9HUkVZOg0KPj4gKwkJcmV0ID0gMDsNCj4+ICsJCWdy ZXkgPSB0cnVlOw0KPj4gKwkJYnJlYWs7DQo+PiArCWRlZmF1bHQ6DQo+PiArCS8qIGFueSBvdGhl ciBkaWZmZXJlbnQgZm9ybWF0cyBhcmUgbm90IHN1cHBvcnRlZCAqLw0KPj4gKwkJcmV0ID0gLUVJ TlZBTDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwkvKiB3ZSBjYW5ub3Qgb3V0cHV0IFJBVy9HcmV5IGlm IHdlIGRvIG5vdCByZWNlaXZlIFJBVyAqLw0KPj4gKwlpZiAoKGJheWVyIHx8IGdyZXkpICYmDQo+ PiArCSAgICAhSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1 c19jb2RlKSkNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4gKw0KPj4gKwl2NGwyX2RiZygxLCBk ZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQo+PiArCQkgIkZvcm1hdCB2YWxpZGF0aW9uLCByZXF1ZXN0 ZWQgcmdiPSV1LCB5dXY9JXUsIGdyZXk9JXUsIGJheWVyPSV1XG4iLA0KPj4gKwkJIHJnYiwgeXV2 LCBncmV5LCBiYXllcik7DQo+PiArDQo+PiArCXJldHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4g Ky8qDQo+PiArICogQ29uZmlndXJlcyB0aGUgUkxQIGFuZCBETUEgbW9kdWxlcywgZGVwZW5kaW5n IG9uIHRoZSBvdXRwdXQgZm9ybWF0DQo+PiArICogY29uZmlndXJlZCBmb3IgdGhlIElTQy4NCj4+ ICsgKiBJZiBkaXJlY3RfZHVtcCA9PSB0cnVlLCBqdXN0IGR1bXAgcmF3IGRhdGEgOCBiaXRzLg0K Pj4gKyAqLw0KPj4gK3N0YXRpYyBpbnQgaXNjX3RyeV9jb25maWd1cmVfcmxwX2RtYShzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjLCBib29sIGRpcmVjdF9kdW1wKQ0KPj4gK3sNCj4+ICsJaWYgKGRpcmVj dF9kdW1wKSB7DQo+PiArCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9D RkdfTU9ERV9EQVQ4Ow0KPj4gKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENG R19JTU9ERV9QQUNLRUQ4Ow0KPj4gKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVND X0RDVFJMX0RWSUVXX1BBQ0tFRDsNCj4+ICsJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCj4+ ICsJCXJldHVybiAwOw0KPj4gKwl9DQo+PiArDQo+PiArCXN3aXRjaCAoaXNjLT50cnlfY29uZmln LmZvdXJjYykgew0KPj4gKwljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjg6DQo+PiArCWNhc2UgVjRM Ml9QSVhfRk1UX1NHQlJHODoNCj4+ICsJY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkc4Og0KPj4gKwlj YXNlIFY0TDJfUElYX0ZNVF9TUkdHQjg6DQo+PiArCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19t b2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQ4Ow0KPj4gKwkJaXNjLT50cnlfY29uZmlnLmRjZmdf aW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQ4Ow0KPj4gKwkJaXNjLT50cnlfY29uZmlnLmRj dHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCj4+ICsJCWlzYy0+dHJ5X2NvbmZp Zy5icHAgPSA4Ow0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTA6 DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTA6DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1U X1NHUkJHMTA6DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTA6DQo+PiArCQlpc2MtPnRy eV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQxMDsNCj4+ICsJCWlz Yy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQo+PiAr CQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0K Pj4gKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2Ug VjRMMl9QSVhfRk1UX1NCR0dSMTI6DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTI6DQo+ PiArCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTI6DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX1NS R0dCMTI6DQo+PiArCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdf TU9ERV9EQVQxMjsNCj4+ICsJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdf SU1PREVfUEFDS0VEMTY7DQo+PiArCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0Nf RENUUkxfRFZJRVdfUEFDS0VEOw0KPj4gKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KPj4g KwkJYnJlYWs7DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToNCj4+ICsJCWlzYy0+dHJ5 X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1JHQjU2NTsNCj4+ICsJCWlz Yy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQo+PiAr CQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0K Pj4gKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2Ug VjRMMl9QSVhfRk1UX0FSR0I0NDQ6DQo+PiArCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2Rl ID0gSVNDX1JMUF9DRkdfTU9ERV9BUkdCNDQ0Ow0KPj4gKwkJaXNjLT50cnlfY29uZmlnLmRjZmdf aW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQxNjsNCj4+ICsJCWlzYy0+dHJ5X2NvbmZpZy5k Y3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQo+PiArCQlpc2MtPnRyeV9jb25m aWcuYnBwID0gMTY7DQo+PiArCQlicmVhazsNCj4+ICsJY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjU1 NToNCj4+ICsJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RF X0FSR0I1NTU7DQo+PiArCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lN T0RFX1BBQ0tFRDE2Ow0KPj4gKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RD VFJMX0RWSUVXX1BBQ0tFRDsNCj4+ICsJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCj4+ICsJ CWJyZWFrOw0KPj4gKwljYXNlIFY0TDJfUElYX0ZNVF9BQkdSMzI6DQo+PiArCWNhc2UgVjRMMl9Q SVhfRk1UX1hCR1IzMjoNCj4+ICsJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0Nf UkxQX0NGR19NT0RFX0FSR0IzMjsNCj4+ICsJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0g SVNDX0RDRkdfSU1PREVfUEFDS0VEMzI7DQo+PiArCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZp ZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KPj4gKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9 IDMyOw0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoNCj4+ICsJ CWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7DQo+ PiArCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1lDNDIwUDsN Cj4+ICsJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QTEFO QVI7DQo+PiArCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTI7DQo+PiArCQlicmVhazsNCj4+ICsJ Y2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoNCj4+ICsJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2Zn X21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7DQo+PiArCQlpc2MtPnRyeV9jb25maWcuZGNm Z19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1lDNDIyUDsNCj4+ICsJCWlzYy0+dHJ5X2NvbmZpZy5k Y3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QTEFOQVI7DQo+PiArCQlpc2MtPnRyeV9jb25m aWcuYnBwID0gMTY7DQo+PiArCQlicmVhazsNCj4+ICsJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoN Cj4+ICsJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZ Q0M7DQo+PiArCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BB Q0tFRDMyOw0KPj4gKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RW SUVXX1BBQ0tFRDsNCj4+ICsJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCj4+ICsJCWJyZWFr Ow0KPj4gKwljYXNlIFY0TDJfUElYX0ZNVF9HUkVZOg0KPj4gKwkJaXNjLT50cnlfY29uZmlnLnJs cF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfREFUWTg7DQo+PiArCQlpc2MtPnRyeV9jb25m aWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDg7DQo+PiArCQlpc2MtPnRyeV9j b25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KPj4gKwkJaXNjLT50 cnlfY29uZmlnLmJwcCA9IDg7DQo+PiArCQlicmVhazsNCj4+ICsJZGVmYXVsdDoNCj4+ICsJCXJl dHVybiAtRUlOVkFMOw0KPj4gKwl9DQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICsv Kg0KPj4gKyAqIENvbmZpZ3VyaW5nIHBpcGVsaW5lIG1vZHVsZXMsIGRlcGVuZGluZyBvbiB3aGlj aCBmb3JtYXQgdGhlIElTQyBvdXRwdXRzDQo+PiArICogYW5kIGNvbnNpZGVyaW5nIHdoaWNoIGZv cm1hdCBpdCBoYXMgYXMgaW5wdXQgZnJvbSB0aGUgc2Vuc29yLg0KPj4gKyAqLw0KPj4gK3N0YXRp YyBpbnQgaXNjX3RyeV9jb25maWd1cmVfcGlwZWxpbmUoc3RydWN0IGlzY19kZXZpY2UgKmlzYykN Cj4+ICt7DQo+PiArCXN3aXRjaCAoaXNjLT50cnlfY29uZmlnLmZvdXJjYykgew0KPj4gKwljYXNl IFY0TDJfUElYX0ZNVF9SR0I1NjU6DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I1NTU6DQo+ PiArCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I0NDQ6DQo+PiArCWNhc2UgVjRMMl9QSVhfRk1UX0FC R1IzMjoNCj4+ICsJY2FzZSBWNEwyX1BJWF9GTVRfWEJHUjMyOg0KPj4gKwkJLyogaWYgc2Vuc29y IGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KPj4gKwkJaWYgKElTQ19J U19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCj4+ ICsJCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IENGQV9FTkFCTEUgfA0KPj4gKwkJ CQlXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUzsNCj4+ICsJCX0gZWxzZSB7DQo+PiArCQkJaXNjLT50 cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQo+PiArCQl9DQo+PiArCQlicmVhazsNCj4+ ICsJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOg0KPj4gKwkJLyogaWYgc2Vuc29yIGZvcm1hdCBp cyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KPj4gKwkJaWYgKElTQ19JU19GT1JNQVRf UkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCj4+ICsJCQlpc2Mt PnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IENGQV9FTkFCTEUgfA0KPj4gKwkJCQlDU0NfRU5B QkxFIHwgV0JfRU5BQkxFIHwgR0FNX0VOQUJMRVMgfA0KPj4gKwkJCQlTVUI0MjBfRU5BQkxFIHwg U1VCNDIyX0VOQUJMRSB8IENCQ19FTkFCTEU7DQo+PiArCQl9IGVsc2Ugew0KPj4gKwkJCWlzYy0+ dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KPj4gKwkJfQ0KPj4gKwkJYnJlYWs7DQo+ PiArCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6DQo+PiArCQkvKiBpZiBzZW5zb3IgZm9ybWF0 IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICovDQo+PiArCQlpZiAoSVNDX0lTX0ZPUk1B VF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KPj4gKwkJCWlz Yy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8DQo+PiArCQkJCUNTQ19F TkFCTEUgfCBXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUyB8DQo+PiArCQkJCVNVQjQyMl9FTkFCTEUg fCBDQkNfRU5BQkxFOw0KPj4gKwkJfSBlbHNlIHsNCj4+ICsJCQlpc2MtPnRyeV9jb25maWcuYml0 c19waXBlbGluZSA9IDB4MDsNCj4+ICsJCX0NCj4+ICsJCWJyZWFrOw0KPj4gKwljYXNlIFY0TDJf UElYX0ZNVF9ZVVlWOg0KPj4gKwkJLyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZl cnQgaW5zaWRlIElTQyAqLw0KPj4gKwkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2Nv bmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCj4+ICsJCQlpc2MtPnRyeV9jb25maWcuYml0 c19waXBlbGluZSA9IENGQV9FTkFCTEUgfA0KPj4gKwkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxF IHwgR0FNX0VOQUJMRVMgfA0KPj4gKwkJCQlTVUI0MjJfRU5BQkxFIHwgQ0JDX0VOQUJMRTsNCj4+ ICsJCX0gZWxzZSB7DQo+PiArCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7 DQo+PiArCQl9DQo+PiArCQlicmVhazsNCj4+ICsJY2FzZSBWNEwyX1BJWF9GTVRfR1JFWToNCj4+ ICsJCWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVz X2NvZGUpKSB7DQo+PiArCQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBp bnNpZGUgSVNDICovDQo+PiArCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSBDRkFf RU5BQkxFIHwNCj4+ICsJCQkJQ1NDX0VOQUJMRSB8IFdCX0VOQUJMRSB8IEdBTV9FTkFCTEVTIHwN Cj4+ICsJCQkJQ0JDX0VOQUJMRTsNCj4+ICsJCX0gZWxzZSB7DQo+PiArCQkJaXNjLT50cnlfY29u ZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQo+PiArCQl9DQo+PiArCQlicmVhazsNCj4+ICsJZGVm YXVsdDoNCj4+ICsJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KPj4gKwl9 DQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGlzY190cnlfZm10 KHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZiwNCj4+ICsJCQl1 MzIgKmNvZGUpDQo+PiArew0KPj4gKwlpbnQgaTsNCj4+ICsJc3RydWN0IGlzY19mb3JtYXQgKnNk X2ZtdCA9IE5VTEwsICpkaXJlY3RfZm10ID0gTlVMTDsNCj4+ICsJc3RydWN0IHY0bDJfcGl4X2Zv cm1hdCAqcGl4Zm10ID0gJmYtPmZtdC5waXg7DQo+PiArCXN0cnVjdCB2NGwyX3N1YmRldl9wYWRf Y29uZmlnIHBhZF9jZmc7DQo+PiArCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm9ybWF0ID0g ew0KPj4gKwkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX1RSWSwNCj4+ICsJfTsNCj4+ICsJ dTMyIG1idXNfY29kZTsNCj4+ICsJaW50IHJldDsNCj4+ICsJYm9vbCBybHBfZG1hX2RpcmVjdF9k dW1wID0gZmFsc2U7DQo+PiArDQo+PiArCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklE RU9fQ0FQVFVSRSkNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4gKw0KPj4gKwkvKiBTdGVwIDE6 IGZpbmQgYSBSQVcgZm9ybWF0IHRoYXQgaXMgc3VwcG9ydGVkICovDQo+PiArCWZvciAoaSA9IDA7 IGkgPCBpc2MtPm51bV91c2VyX2Zvcm1hdHM7IGkrKykgew0KPj4gKwkJaWYgKElTQ19JU19GT1JN QVRfUkFXKGlzYy0+dXNlcl9mb3JtYXRzW2ldLT5tYnVzX2NvZGUpKSB7DQo+PiArCQkJc2RfZm10 ID0gaXNjLT51c2VyX2Zvcm1hdHNbaV07DQo+PiArCQkJYnJlYWs7DQo+PiArCQl9DQo+PiArCX0N Cj4+ICsJLyogU3RlcCAyOiBXZSBjYW4gY29udGludWUgd2l0aCB0aGlzIFJBVyBmb3JtYXQsIG9y IHdlIGNhbiBsb29rDQo+PiArCSAqIGZvciBiZXR0ZXI6IG1heWJlIHNlbnNvciBzdXBwb3J0cyBk aXJlY3RseSB3aGF0IHdlIG5lZWQuDQo+PiArCSAqLw0KPj4gKwlkaXJlY3RfZm10ID0gZmluZF9m b3JtYXRfYnlfZm91cmNjKGlzYywgcGl4Zm10LT5waXhlbGZvcm1hdCk7DQo+PiArDQo+PiArCS8q IFN0ZXAgMzogV2UgaGF2ZSBib3RoLiBXZSBkZWNpZGUgZ2l2ZW4gdGhlIG1vZHVsZSBwYXJhbWV0 ZXIgd2hpY2gNCj4+ICsJICogb25lIHRvIHVzZS4NCj4+ICsJICovDQo+PiArCWlmIChkaXJlY3Rf Zm10ICYmIHNkX2ZtdCAmJiBzZW5zb3JfcHJlZmVycmVkKQ0KPj4gKwkJc2RfZm10ID0gZGlyZWN0 X2ZtdDsNCj4+ICsNCj4+ICsJLyogU3RlcCA0OiB3ZSBkbyBub3QgaGF2ZSBSQVcgYnV0IHdlIGhh dmUgYSBkaXJlY3QgZm9ybWF0LiBVc2UgaXQuICovDQo+PiArCWlmIChkaXJlY3RfZm10ICYmICFz ZF9mbXQpDQo+PiArCQlzZF9mbXQgPSBkaXJlY3RfZm10Ow0KPj4gKw0KPj4gKwkvKiBTdGVwIDU6 IGlmIHdlIGFyZSB1c2luZyBhIGRpcmVjdCBmb3JtYXQsIHdlIG5lZWQgdG8gcGFja2FnZQ0KPj4g KwkgKiBldmVyeXRoaW5nIGFzIDggYml0IGRhdGEgYW5kIGp1c3QgZHVtcCBpdA0KPj4gKwkgKi8N Cj4+ICsJaWYgKHNkX2ZtdCA9PSBkaXJlY3RfZm10KQ0KPj4gKwkJcmxwX2RtYV9kaXJlY3RfZHVt cCA9IHRydWU7DQo+PiArDQo+PiArCS8qIFN0ZXAgNjogV2UgaGF2ZSBubyBmb3JtYXQuIFRoaXMg Y2FuIGhhcHBlbiBpZiB0aGUgdXNlcnNwYWNlDQo+PiArCSAqIHJlcXVlc3RzIHNvbWUgd2VpcmQv aW52YWxpZCBmb3JtYXQuDQo+PiArCSAqIEluIHRoaXMgY2FzZSwgZGVmYXVsdCB0byB3aGF0ZXZl ciB3ZSBoYXZlDQo+PiArCSAqLw0KPj4gKwlpZiAoIXNkX2ZtdCAmJiAhZGlyZWN0X2ZtdCkgew0K Pj4gKwkJc2RfZm10ID0gaXNjLT51c2VyX2Zvcm1hdHNbaXNjLT5udW1fdXNlcl9mb3JtYXRzIC0g MV07DQo+PiArCQl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQo+PiArCQkJICJT ZW5zb3Igbm90IHN1cHBvcnRpbmcgJS40cywgdXNpbmcgJS40c1xuIiwNCj4+ICsJCQkgKGNoYXIg KikmcGl4Zm10LT5waXhlbGZvcm1hdCwgKGNoYXIgKikmc2RfZm10LT5mb3VyY2MpOw0KPj4gKwl9 DQo+PiArDQo+PiArCWlmICghc2RfZm10KSB7DQo+PiArCQlyZXQgPSAtRUlOVkFMOw0KPj4gKwkJ Z290byBpc2NfdHJ5X2ZtdF9lcnI7DQo+PiArCX0NCj4+ICsNCj4+ICsJLyogU3RlcCA3OiBQcmlu dCBvdXQgd2hhdCB3ZSBkZWNpZGVkIGZvciBkZWJ1Z2dpbmcgKi8NCj4+ICsJdjRsMl9kYmcoMSwg ZGVidWcsICZpc2MtPnY0bDJfZGV2LA0KPj4gKwkJICJQcmVmZXJyaW5nIHRvIGhhdmUgc2Vuc29y IHVzaW5nIGZvcm1hdCAlLjRzXG4iLA0KPj4gKwkJIChjaGFyICopJnNkX2ZtdC0+Zm91cmNjKTsN Cj4+ICsNCj4+ICsJLyogU3RlcCA4OiBhdCB0aGlzIG1vbWVudCB3ZSBkZWNpZGVkIHdoaWNoIGZv cm1hdCB0aGUgc3ViZGV2IHdpbGwgdXNlICovDQo+PiArCWlzYy0+dHJ5X2NvbmZpZy5zZF9mb3Jt YXQgPSBzZF9mbXQ7DQo+PiArDQo+PiArCS8qIExpbWl0IHRvIEF0bWVsIElTQyBoYXJkd2FyZSBj YXBhYmlsaXRpZXMgKi8NCj4+ICsJaWYgKHBpeGZtdC0+d2lkdGggPiBJU0NfTUFYX1NVUFBPUlRf V0lEVEgpDQo+PiArCQlwaXhmbXQtPndpZHRoID0gSVNDX01BWF9TVVBQT1JUX1dJRFRIOw0KPj4g KwlpZiAocGl4Zm10LT5oZWlnaHQgPiBJU0NfTUFYX1NVUFBPUlRfSEVJR0hUKQ0KPj4gKwkJcGl4 Zm10LT5oZWlnaHQgPSBJU0NfTUFYX1NVUFBPUlRfSEVJR0hUOw0KPj4gKw0KPj4gKwkvKg0KPj4g KwkgKiBUaGUgbWJ1cyBmb3JtYXQgaXMgdGhlIG9uZSB0aGUgc3ViZGV2IG91dHB1dHMuDQo+PiAr CSAqIFRoZSBwaXhlbHMgd2lsbCBiZSB0cmFuc2ZlcnJlZCBpbiB0aGlzIGZvcm1hdCBTZW5zb3Ig LT4gSVNDDQo+PiArCSAqLw0KPj4gKwltYnVzX2NvZGUgPSBzZF9mbXQtPm1idXNfY29kZTsNCj4+ ICsNCj4+ICsJLyoNCj4+ICsJICogVmFsaWRhdGUgZm9ybWF0cy4gSWYgdGhlIHJlcXVpcmVkIGZv cm1hdCBpcyBub3QgT0ssIGRlZmF1bHQgdG8gcmF3Lg0KPj4gKwkgKi8NCj4+ICsNCj4+ICsJaXNj LT50cnlfY29uZmlnLmZvdXJjYyA9IHBpeGZtdC0+cGl4ZWxmb3JtYXQ7DQo+PiArDQo+PiArCWlm IChpc2NfdHJ5X3ZhbGlkYXRlX2Zvcm1hdHMoaXNjKSkgew0KPj4gKwkJcGl4Zm10LT5waXhlbGZv cm1hdCA9IGlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MgPSBzZF9mbXQtPmZvdXJjYzsNCj4+ICsJCS8q IFJlLXRyeSB0byB2YWxpZGF0ZSB0aGUgbmV3IGZvcm1hdCAqLw0KPj4gKwkJcmV0ID0gaXNjX3Ry eV92YWxpZGF0ZV9mb3JtYXRzKGlzYyk7DQo+PiArCQlpZiAocmV0KQ0KPj4gKwkJCWdvdG8gaXNj X3RyeV9mbXRfZXJyOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldCA9IGlzY190cnlfY29uZmlndXJl X3JscF9kbWEoaXNjLCBybHBfZG1hX2RpcmVjdF9kdW1wKTsNCj4+ICsJaWYgKHJldCkNCj4+ICsJ CWdvdG8gaXNjX3RyeV9mbXRfZXJyOw0KPj4gKw0KPj4gKwlyZXQgPSBpc2NfdHJ5X2NvbmZpZ3Vy ZV9waXBlbGluZShpc2MpOw0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJZ290byBpc2NfdHJ5X2ZtdF9l cnI7DQo+PiArDQo+PiArCXY0bDJfZmlsbF9tYnVzX2Zvcm1hdCgmZm9ybWF0LmZvcm1hdCwgcGl4 Zm10LCBtYnVzX2NvZGUpOw0KPj4gKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVu dF9zdWJkZXYtPnNkLCBwYWQsIHNldF9mbXQsDQo+PiArCQkJICAgICAgICZwYWRfY2ZnLCAmZm9y bWF0KTsNCj4+ICsJaWYgKHJldCA8IDApDQo+PiArCQlnb3RvIGlzY190cnlfZm10X3N1YmRldl9l cnI7DQo+PiArDQo+PiArCXY0bDJfZmlsbF9waXhfZm9ybWF0KHBpeGZtdCwgJmZvcm1hdC5mb3Jt YXQpOw0KPj4gKw0KPj4gKwlwaXhmbXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KPj4gKwlw aXhmbXQtPmJ5dGVzcGVybGluZSA9IChwaXhmbXQtPndpZHRoICogaXNjLT50cnlfY29uZmlnLmJw cCkgPj4gMzsNCj4+ICsJcGl4Zm10LT5zaXplaW1hZ2UgPSBwaXhmbXQtPmJ5dGVzcGVybGluZSAq IHBpeGZtdC0+aGVpZ2h0Ow0KPj4gKw0KPj4gKwlpZiAoY29kZSkNCj4+ICsJCSpjb2RlID0gbWJ1 c19jb2RlOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICsNCj4+ICtpc2NfdHJ5X2ZtdF9lcnI6 DQo+PiArCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiQ291bGQgbm90IGZpbmQgYW55IHBvc3Np YmxlIGZvcm1hdCBmb3IgYSB3b3JraW5nIHBpcGVsaW5lXG4iKTsNCj4+ICtpc2NfdHJ5X2ZtdF9z dWJkZXZfZXJyOg0KPj4gKwltZW1zZXQoJmlzYy0+dHJ5X2NvbmZpZywgMCwgc2l6ZW9mKGlzYy0+ dHJ5X2NvbmZpZykpOw0KPj4gKw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgaW50IGlzY19zZXRfZm10KHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHN0cnVjdCB2NGwy X2Zvcm1hdCAqZikNCj4+ICt7DQo+PiArCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm9ybWF0 ID0gew0KPj4gKwkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCj4+ICsJfTsN Cj4+ICsJdTMyIG1idXNfY29kZSA9IDA7DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCXJldCA9 IGlzY190cnlfZm10KGlzYywgZiwgJm1idXNfY29kZSk7DQo+PiArCWlmIChyZXQpDQo+PiArCQly ZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwl2NGwyX2ZpbGxfbWJ1c19mb3JtYXQoJmZvcm1hdC5mb3Jt YXQsICZmLT5mbXQucGl4LCBtYnVzX2NvZGUpOw0KPj4gKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxs KGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsDQo+PiArCQkJICAgICAgIHNldF9mbXQsIE5V TEwsICZmb3JtYXQpOw0KPj4gKwlpZiAocmV0IDwgMCkNCj4+ICsJCXJldHVybiByZXQ7DQo+PiAr DQo+PiArCWlzYy0+Zm10ID0gKmY7DQo+PiArDQo+PiArCWlmIChpc2MtPnRyeV9jb25maWcuc2Rf Zm9ybWF0ICYmIGlzYy0+Y29uZmlnLnNkX2Zvcm1hdCAmJg0KPj4gKwkgICAgaXNjLT50cnlfY29u ZmlnLnNkX2Zvcm1hdCAhPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQpIHsNCj4+ICsJCWlzYy0+Y3Ry bHMuaGlzdF9zdGF0ID0gSElTVF9JTklUOw0KPj4gKwkJaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2Mp Ow0KPj4gKwl9DQo+PiArCS8qIG1ha2UgdGhlIHRyeSBjb25maWd1cmF0aW9uIGFjdGl2ZSAqLw0K Pj4gKwlpc2MtPmNvbmZpZyA9IGlzYy0+dHJ5X2NvbmZpZzsNCj4+ICsNCj4+ICsJdjRsMl9kYmco MSwgZGVidWcsICZpc2MtPnY0bDJfZGV2LCAiTmV3IElTQyBjb25maWd1cmF0aW9uIGluIHBsYWNl XG4iKTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQg aXNjX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQo+PiArCQkJ ICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGlzY19kZXZp Y2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQo+PiArDQo+PiArCWlmICh2YjJfaXNfc3Ry ZWFtaW5nKCZpc2MtPnZiMl92aWRxKSkNCj4+ICsJCXJldHVybiAtRUJVU1k7DQo+PiArDQo+PiAr CXJldHVybiBpc2Nfc2V0X2ZtdChpc2MsIGYpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50 IGlzY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQo+PiAr CQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCj4+ICt7DQo+PiArCXN0cnVjdCBpc2NfZGV2aWNl ICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KPj4gKw0KPj4gKwlyZXR1cm4gaXNjX3RyeV9m bXQoaXNjLCBmLCBOVUxMKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpc2NfZW51bV9p bnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4+ICsJCQkgICBzdHJ1Y3QgdjRs Ml9pbnB1dCAqaW5wKQ0KPj4gK3sNCj4+ICsJaWYgKGlucC0+aW5kZXggIT0gMCkNCj4+ICsJCXJl dHVybiAtRUlOVkFMOw0KPj4gKw0KPj4gKwlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FN RVJBOw0KPj4gKwlpbnAtPnN0ZCA9IDA7DQo+PiArCXN0cnNjcHkoaW5wLT5uYW1lLCAiQ2FtZXJh Iiwgc2l6ZW9mKGlucC0+bmFtZSkpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIGludCBpc2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJp diwgdW5zaWduZWQgaW50ICppKQ0KPj4gK3sNCj4+ICsJKmkgPSAwOw0KPj4gKw0KPj4gKwlyZXR1 cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpc2Nfc19pbnB1dChzdHJ1Y3QgZmls ZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpDQo+PiArew0KPj4gKwlpZiAoaSA+ IDApDQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0K Pj4gKw0KPj4gK3N0YXRpYyBpbnQgaXNjX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAq ZmgsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXNjX2Rl dmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCj4+ICsNCj4+ICsJcmV0dXJuIHY0bDJf Z19wYXJtX2NhcCh2aWRlb19kZXZkYXRhKGZpbGUpLCBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwg YSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXNjX3NfcGFybShzdHJ1Y3QgZmlsZSAq ZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpDQo+PiArew0KPj4gKwlz dHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCj4+ICsNCj4+ICsJ cmV0dXJuIHY0bDJfc19wYXJtX2NhcCh2aWRlb19kZXZkYXRhKGZpbGUpLCBpc2MtPmN1cnJlbnRf c3ViZGV2LT5zZCwgYSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXNjX2VudW1fZnJh bWVzaXplcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsDQo+PiArCQkJICAgICAgIHN0cnVj dCB2NGwyX2ZybXNpemVlbnVtICpmc2l6ZSkNCj4+ICt7DQo+PiArCXN0cnVjdCBpc2NfZGV2aWNl ICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KPj4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJh bWVfc2l6ZV9lbnVtIGZzZSA9IHsNCj4+ICsJCS5pbmRleCA9IGZzaXplLT5pbmRleCwNCj4+ICsJ CS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQo+PiArCX07DQo+PiArCWludCBy ZXQgPSAtRUlOVkFMOw0KPj4gKwlpbnQgaTsNCj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IGlz Yy0+bnVtX3VzZXJfZm9ybWF0czsgaSsrKQ0KPj4gKwkJaWYgKGlzYy0+dXNlcl9mb3JtYXRzW2ld LT5mb3VyY2MgPT0gZnNpemUtPnBpeGVsX2Zvcm1hdCkNCj4+ICsJCQlyZXQgPSAwOw0KPj4gKw0K Pj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMpOyBpKysp DQo+PiArCQlpZiAoY29udHJvbGxlcl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmc2l6ZS0+cGl4ZWxf Zm9ybWF0KQ0KPj4gKwkJCXJldCA9IDA7DQo+PiArDQo+PiArCWlmIChyZXQpDQo+PiArCQlyZXR1 cm4gcmV0Ow0KPj4gKw0KPj4gKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9z dWJkZXYtPnNkLCBwYWQsIGVudW1fZnJhbWVfc2l6ZSwNCj4+ICsJCQkgICAgICAgTlVMTCwgJmZz ZSk7DQo+PiArCWlmIChyZXQpDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwlmc2UuY29k ZSA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlOw0KPj4gKw0KPj4gKwlmc2l6ZS0+ dHlwZSA9IFY0TDJfRlJNU0laRV9UWVBFX0RJU0NSRVRFOw0KPj4gKwlmc2l6ZS0+ZGlzY3JldGUu d2lkdGggPSBmc2UubWF4X3dpZHRoOw0KPj4gKwlmc2l6ZS0+ZGlzY3JldGUuaGVpZ2h0ID0gZnNl Lm1heF9oZWlnaHQ7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgaW50IGlzY19lbnVtX2ZyYW1laW50ZXJ2YWxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpm aCwNCj4+ICsJCQkJICAgIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtICpmaXZhbCkNCj4+ICt7DQo+ PiArCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KPj4gKwlz dHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfaW50ZXJ2YWxfZW51bSBmaWUgPSB7DQo+PiArCQkuaW5k ZXggPSBmaXZhbC0+aW5kZXgsDQo+PiArCQkud2lkdGggPSBmaXZhbC0+d2lkdGgsDQo+PiArCQku aGVpZ2h0ID0gZml2YWwtPmhlaWdodCwNCj4+ICsJCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1B VF9BQ1RJVkUsDQo+PiArCX07DQo+PiArCWludCByZXQgPSAtRUlOVkFMOw0KPj4gKwlpbnQgaTsN Cj4gDQo+IHVuc2lnbmVkIGludCA+DQo+PiArDQo+PiArCWZvciAoaSA9IDA7IGkgPCBpc2MtPm51 bV91c2VyX2Zvcm1hdHM7IGkrKykNCj4+ICsJCWlmIChpc2MtPnVzZXJfZm9ybWF0c1tpXS0+Zm91 cmNjID09IGZpdmFsLT5waXhlbF9mb3JtYXQpDQo+PiArCQkJcmV0ID0gMDsNCj4+ICsNCj4+ICsJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29udHJvbGxlcl9mb3JtYXRzKTsgaSsrKQ0KPj4g KwkJaWYgKGNvbnRyb2xsZXJfZm9ybWF0c1tpXS5mb3VyY2MgPT0gZml2YWwtPnBpeGVsX2Zvcm1h dCkNCj4+ICsJCQlyZXQgPSAwOw0KPj4gKw0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJcmV0dXJuIHJl dDsNCj4+ICsNCj4+ICsJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2 LT5zZCwgcGFkLA0KPj4gKwkJCSAgICAgICBlbnVtX2ZyYW1lX2ludGVydmFsLCBOVUxMLCAmZmll KTsNCj4+ICsJaWYgKHJldCkNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArDQo+PiArCWZpZS5jb2Rl ID0gaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGU7DQo+PiArCWZpdmFsLT50eXBlID0g VjRMMl9GUk1JVkFMX1RZUEVfRElTQ1JFVEU7DQo+PiArCWZpdmFsLT5kaXNjcmV0ZSA9IGZpZS5p bnRlcnZhbDsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgaXNjX2lvY3RsX29wcyA9IHsNCj4+ICsJLnZpZGlv Y19xdWVyeWNhcAkJPSBpc2NfcXVlcnljYXAsDQo+PiArCS52aWRpb2NfZW51bV9mbXRfdmlkX2Nh cAk9IGlzY19lbnVtX2ZtdF92aWRfY2FwLA0KPj4gKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAJCT0g aXNjX2dfZm10X3ZpZF9jYXAsDQo+PiArCS52aWRpb2Nfc19mbXRfdmlkX2NhcAkJPSBpc2Nfc19m bXRfdmlkX2NhcCwNCj4+ICsJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAJCT0gaXNjX3RyeV9mbXRf dmlkX2NhcCwNCj4+ICsNCj4+ICsJLnZpZGlvY19lbnVtX2lucHV0CQk9IGlzY19lbnVtX2lucHV0 LA0KPj4gKwkudmlkaW9jX2dfaW5wdXQJCQk9IGlzY19nX2lucHV0LA0KPj4gKwkudmlkaW9jX3Nf aW5wdXQJCQk9IGlzY19zX2lucHV0LA0KPj4gKw0KPj4gKwkudmlkaW9jX3JlcWJ1ZnMJCQk9IHZi Ml9pb2N0bF9yZXFidWZzLA0KPj4gKwkudmlkaW9jX3F1ZXJ5YnVmCQk9IHZiMl9pb2N0bF9xdWVy eWJ1ZiwNCj4+ICsJLnZpZGlvY19xYnVmCQkJPSB2YjJfaW9jdGxfcWJ1ZiwNCj4+ICsJLnZpZGlv Y19leHBidWYJCQk9IHZiMl9pb2N0bF9leHBidWYsDQo+PiArCS52aWRpb2NfZHFidWYJCQk9IHZi Ml9pb2N0bF9kcWJ1ZiwNCj4+ICsJLnZpZGlvY19jcmVhdGVfYnVmcwkJPSB2YjJfaW9jdGxfY3Jl YXRlX2J1ZnMsDQo+PiArCS52aWRpb2NfcHJlcGFyZV9idWYJCT0gdmIyX2lvY3RsX3ByZXBhcmVf YnVmLA0KPj4gKwkudmlkaW9jX3N0cmVhbW9uCQk9IHZiMl9pb2N0bF9zdHJlYW1vbiwNCj4+ICsJ LnZpZGlvY19zdHJlYW1vZmYJCT0gdmIyX2lvY3RsX3N0cmVhbW9mZiwNCj4+ICsNCj4+ICsJLnZp ZGlvY19nX3Bhcm0JCQk9IGlzY19nX3Bhcm0sDQo+PiArCS52aWRpb2Nfc19wYXJtCQkJPSBpc2Nf c19wYXJtLA0KPj4gKwkudmlkaW9jX2VudW1fZnJhbWVzaXplcwkJPSBpc2NfZW51bV9mcmFtZXNp emVzLA0KPj4gKwkudmlkaW9jX2VudW1fZnJhbWVpbnRlcnZhbHMJPSBpc2NfZW51bV9mcmFtZWlu dGVydmFscywNCj4+ICsNCj4+ICsJLnZpZGlvY19sb2dfc3RhdHVzCQk9IHY0bDJfY3RybF9sb2df c3RhdHVzLA0KPj4gKwkudmlkaW9jX3N1YnNjcmliZV9ldmVudAkJPSB2NGwyX2N0cmxfc3Vic2Ny aWJlX2V2ZW50LA0KPj4gKwkudmlkaW9jX3Vuc3Vic2NyaWJlX2V2ZW50CT0gdjRsMl9ldmVudF91 bnN1YnNjcmliZSwNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXNjX29wZW4oc3RydWN0 IGZpbGUgKmZpbGUpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9f ZHJ2ZGF0YShmaWxlKTsNCj4+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGlzYy0+Y3VycmVu dF9zdWJkZXYtPnNkOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlpZiAobXV0ZXhfbG9ja19p bnRlcnJ1cHRpYmxlKCZpc2MtPmxvY2spKQ0KPj4gKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsNCj4+ ICsNCj4+ICsJcmV0ID0gdjRsMl9maF9vcGVuKGZpbGUpOw0KPj4gKwlpZiAocmV0IDwgMCkNCj4+ ICsJCWdvdG8gdW5sb2NrOw0KPj4gKw0KPj4gKwlpZiAoIXY0bDJfZmhfaXNfc2luZ3VsYXJfZmls ZShmaWxlKSkNCj4+ICsJCWdvdG8gdW5sb2NrOw0KPj4gKw0KPj4gKwlyZXQgPSB2NGwyX3N1YmRl dl9jYWxsKHNkLCBjb3JlLCBzX3Bvd2VyLCAxKTsNCj4+ICsJaWYgKHJldCA8IDAgJiYgcmV0ICE9 IC1FTk9JT0NUTENNRCkgew0KPj4gKwkJdjRsMl9maF9yZWxlYXNlKGZpbGUpOw0KPj4gKwkJZ290 byB1bmxvY2s7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0ID0gaXNjX3NldF9mbXQoaXNjLCAmaXNj LT5mbXQpOw0KPj4gKwlpZiAocmV0KSB7DQo+PiArCQl2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3Jl LCBzX3Bvd2VyLCAwKTsNCj4+ICsJCXY0bDJfZmhfcmVsZWFzZShmaWxlKTsNCj4+ICsJfQ0KPj4g Kw0KPj4gK3VubG9jazoNCj4+ICsJbXV0ZXhfdW5sb2NrKCZpc2MtPmxvY2spOw0KPj4gKwlyZXR1 cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGlzY19yZWxlYXNlKHN0cnVjdCBm aWxlICpmaWxlKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2Ry dmRhdGEoZmlsZSk7DQo+PiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpc2MtPmN1cnJlbnRf c3ViZGV2LT5zZDsNCj4+ICsJYm9vbCBmaF9zaW5ndWxhcjsNCj4+ICsJaW50IHJldDsNCj4+ICsN Cj4+ICsJbXV0ZXhfbG9jaygmaXNjLT5sb2NrKTsNCj4+ICsNCj4+ICsJZmhfc2luZ3VsYXIgPSB2 NGwyX2ZoX2lzX3Npbmd1bGFyX2ZpbGUoZmlsZSk7DQo+PiArDQo+PiArCXJldCA9IF92YjJfZm9w X3JlbGVhc2UoZmlsZSwgTlVMTCk7DQo+PiArDQo+PiArCWlmIChmaF9zaW5ndWxhcikNCj4+ICsJ CXY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNfcG93ZXIsIDApOw0KPj4gKw0KPj4gKwltdXRl eF91bmxvY2soJmlzYy0+bG9jayk7DQo+PiArDQo+PiArCXJldHVybiByZXQ7DQo+PiArfQ0KPj4g Kw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgaXNjX2ZvcHMg PSB7DQo+PiArCS5vd25lcgkJPSBUSElTX01PRFVMRSwNCj4+ICsJLm9wZW4JCT0gaXNjX29wZW4s DQo+PiArCS5yZWxlYXNlCT0gaXNjX3JlbGVhc2UsDQo+PiArCS51bmxvY2tlZF9pb2N0bAk9IHZp ZGVvX2lvY3RsMiwNCj4+ICsJLnJlYWQJCT0gdmIyX2ZvcF9yZWFkLA0KPj4gKwkubW1hcAkJPSB2 YjJfZm9wX21tYXAsDQo+PiArCS5wb2xsCQk9IHZiMl9mb3BfcG9sbCwNCj4+ICt9Ow0KPj4gKw0K Pj4gK2lycXJldHVybl90IGlzY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQ0KPj4g K3sNCj4+ICsJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IChzdHJ1Y3QgaXNjX2RldmljZSAqKWRl dl9pZDsNCj4+ICsJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQo+PiArCXUz MiBpc2NfaW50c3IsIGlzY19pbnRtYXNrLCBwZW5kaW5nOw0KPj4gKwlpcnFyZXR1cm5fdCByZXQg PSBJUlFfTk9ORTsNCj4+ICsNCj4+ICsJcmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfSU5UU1IsICZp c2NfaW50c3IpOw0KPj4gKwlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19JTlRNQVNLLCAmaXNjX2lu dG1hc2spOw0KPj4gKw0KPj4gKwlwZW5kaW5nID0gaXNjX2ludHNyICYgaXNjX2ludG1hc2s7DQo+ PiArDQo+PiArCWlmIChsaWtlbHkocGVuZGluZyAmIElTQ19JTlRfRERPTkUpKSB7DQo+PiArCQlz cGluX2xvY2soJmlzYy0+ZG1hX3F1ZXVlX2xvY2spOw0KPj4gKwkJaWYgKGlzYy0+Y3VyX2ZybSkg ew0KPj4gKwkJCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZidWYgPSAmaXNjLT5jdXJfZnJtLT52 YjsNCj4+ICsJCQlzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIgPSAmdmJ1Zi0+dmIyX2J1ZjsNCj4+ICsN Cj4+ICsJCQl2Yi0+dGltZXN0YW1wID0ga3RpbWVfZ2V0X25zKCk7DQo+PiArCQkJdmJ1Zi0+c2Vx dWVuY2UgPSBpc2MtPnNlcXVlbmNlKys7DQo+PiArCQkJdmIyX2J1ZmZlcl9kb25lKHZiLCBWQjJf QlVGX1NUQVRFX0RPTkUpOw0KPj4gKwkJCWlzYy0+Y3VyX2ZybSA9IE5VTEw7DQo+PiArCQl9DQo+ PiArDQo+PiArCQlpZiAoIWxpc3RfZW1wdHkoJmlzYy0+ZG1hX3F1ZXVlKSAmJiAhaXNjLT5zdG9w KSB7DQo+PiArCQkJaXNjLT5jdXJfZnJtID0gbGlzdF9maXJzdF9lbnRyeSgmaXNjLT5kbWFfcXVl dWUsDQo+PiArCQkJCQkJICAgICBzdHJ1Y3QgaXNjX2J1ZmZlciwgbGlzdCk7DQo+PiArCQkJbGlz dF9kZWwoJmlzYy0+Y3VyX2ZybS0+bGlzdCk7DQo+PiArDQo+PiArCQkJaXNjX3N0YXJ0X2RtYShp c2MpOw0KPj4gKwkJfQ0KPj4gKw0KPj4gKwkJaWYgKGlzYy0+c3RvcCkNCj4+ICsJCQljb21wbGV0 ZSgmaXNjLT5jb21wKTsNCj4+ICsNCj4+ICsJCXJldCA9IElSUV9IQU5ETEVEOw0KPj4gKwkJc3Bp bl91bmxvY2soJmlzYy0+ZG1hX3F1ZXVlX2xvY2spOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChw ZW5kaW5nICYgSVNDX0lOVF9ISVNET05FKSB7DQo+PiArCQlzY2hlZHVsZV93b3JrKCZpc2MtPmF3 Yl93b3JrKTsNCj4+ICsJCXJldCA9IElSUV9IQU5ETEVEOw0KPj4gKwl9DQo+PiArDQo+PiArCXJl dHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGlzY19oaXN0X2NvdW50KHN0 cnVjdCBpc2NfZGV2aWNlICppc2MsIHUzMiAqbWluLCB1MzIgKm1heCkNCj4+ICt7DQo+PiArCXN0 cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KPj4gKwlzdHJ1Y3QgaXNjX2N0cmxz ICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KPj4gKwl1MzIgKmhpc3RfY291bnQgPSAmY3RybHMtPmhp c3RfY291bnRbY3RybHMtPmhpc3RfaWRdOw0KPj4gKwl1MzIgKmhpc3RfZW50cnkgPSAmY3RybHMt Pmhpc3RfZW50cnlbMF07DQo+PiArCXUzMiBpOw0KPj4gKw0KPj4gKwkqbWluID0gMDsNCj4+ICsJ Km1heCA9IEhJU1RfRU5UUklFUzsNCj4+ICsNCj4+ICsJcmVnbWFwX2J1bGtfcmVhZChyZWdtYXAs IElTQ19ISVNfRU5UUlksIGhpc3RfZW50cnksIEhJU1RfRU5UUklFUyk7DQo+PiArDQo+PiArCSpo aXN0X2NvdW50ID0gMDsNCj4+ICsJLyoNCj4+ICsJICogd2UgZGVsaWJlcmF0ZWx5IGlnbm9yZSB0 aGUgZW5kIG9mIHRoZSBoaXN0b2dyYW0sDQo+PiArCSAqIHRoZSBtb3N0IHdoaXRlIHBpeGVscw0K Pj4gKwkgKi8NCj4+ICsJZm9yIChpID0gMTsgaSA8IEhJU1RfRU5UUklFUzsgaSsrKSB7DQo+PiAr CQlpZiAoKmhpc3RfZW50cnkgJiYgISptaW4pDQo+PiArCQkJKm1pbiA9IGk7DQo+PiArCQlpZiAo Kmhpc3RfZW50cnkpDQo+PiArCQkJKm1heCA9IGk7DQo+PiArCQkqaGlzdF9jb3VudCArPSBpICog KCpoaXN0X2VudHJ5KyspOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmICghKm1pbikNCj4+ICsJCSpt aW4gPSAxOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBpc2Nfd2JfdXBkYXRlKHN0cnVj dCBpc2NfY3RybHMgKmN0cmxzKQ0KPj4gK3sNCj4+ICsJdTMyICpoaXN0X2NvdW50ID0gJmN0cmxz LT5oaXN0X2NvdW50WzBdOw0KPj4gKwl1MzIgYywgb2Zmc2V0WzRdOw0KPj4gKwl1NjQgYXZnID0g MDsNCj4+ICsJLyogV2UgY29tcHV0ZSB0d28gZ2FpbnMsIHN0cmV0Y2ggZ2FpbiBhbmQgZ3JleSB3 b3JsZCBnYWluICovDQo+PiArCXUzMiBzX2dhaW5bNF0sIGd3X2dhaW5bNF07DQo+PiArDQo+PiAr CS8qDQo+PiArCSAqIEFjY29yZGluZyB0byBHcmV5IFdvcmxkLCB3ZSBuZWVkIHRvIHNldCBnYWlu cyBmb3IgUi9CIHRvIG5vcm1hbGl6ZQ0KPj4gKwkgKiB0aGVtIHRvd2FyZHMgdGhlIGdyZWVuIGNo YW5uZWwuDQo+PiArCSAqIFRodXMgd2Ugd2FudCB0byBrZWVwIEdyZWVuIGFzIGZpeGVkIGFuZCBh ZGp1c3Qgb25seSBSZWQvQmx1ZQ0KPj4gKwkgKiBDb21wdXRlIHRoZSBhdmVyYWdlIG9mIHRoZSBi b3RoIGdyZWVuIGNoYW5uZWxzIGZpcnN0DQo+PiArCSAqLw0KPj4gKwlhdmcgPSAodTY0KWhpc3Rf Y291bnRbSVNDX0hJU19DRkdfTU9ERV9HUl0gKw0KPj4gKwkJKHU2NCloaXN0X2NvdW50W0lTQ19I SVNfQ0ZHX01PREVfR0JdOw0KPj4gKwlhdmcgPj49IDE7DQo+PiArDQo+PiArCS8qIEdyZWVuIGhp c3RvZ3JhbSBpcyBudWxsLCBub3RoaW5nIHRvIGRvICovDQo+PiArCWlmICghYXZnKQ0KPj4gKwkJ cmV0dXJuOw0KPj4gKw0KPj4gKwlmb3IgKGMgPSBJU0NfSElTX0NGR19NT0RFX0dSOyBjIDw9IElT Q19ISVNfQ0ZHX01PREVfQjsgYysrKSB7DQo+PiArCQkvKg0KPj4gKwkJICogdGhlIGNvbG9yIG9m ZnNldCBpcyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgaGlzdG9ncmFtLg0KPj4gKwkJICogd2Ug c3RyZXRjaCB0aGlzIGNvbG9yIHRvIHRoZSBmdWxsIHJhbmdlIGJ5IHN1YnN0cmFjdGluZw0KPj4g KwkJICogdGhpcyB2YWx1ZSBmcm9tIHRoZSBjb2xvciBjb21wb25lbnQuDQo+PiArCQkgKi8NCj4+ ICsJCW9mZnNldFtjXSA9IGN0cmxzLT5oaXN0X21pbm1heFtjXVtISVNUX01JTl9JTkRFWF07DQo+ PiArCQkvKg0KPj4gKwkJICogVGhlIG9mZnNldCBpcyBhbHdheXMgYXQgbGVhc3QgMS4gSWYgdGhl IG9mZnNldCBpcyAxLCB3ZSBkbw0KPj4gKwkJICogbm90IG5lZWQgdG8gYWRqdXN0IGl0LCBzbyBv dXIgcmVzdWx0IG11c3QgYmUgemVyby4NCj4+ICsJCSAqIHRoZSBvZmZzZXQgaXMgY29tcHV0ZWQg aW4gYSBoaXN0b2dyYW0gb24gOSBiaXRzICgwLi41MTIpDQo+PiArCQkgKiBidXQgdGhlIG9mZnNl dCBpbiByZWdpc3RlciBpcyBiYXNlZCBvbg0KPj4gKwkJICogMTIgYml0cyBwaXBlbGluZSAoMC4u NDA5NikuDQo+PiArCQkgKiB3ZSBuZWVkIHRvIHNoaWZ0IHdpdGggdGhlIDMgYml0cyB0aGF0IHRo ZSBoaXN0b2dyYW0gaXMNCj4+ICsJCSAqIGlnbm9yaW5nDQo+PiArCQkgKi8NCj4+ICsJCWN0cmxz LT5vZmZzZXRbY10gPSAob2Zmc2V0W2NdIC0gMSkgPDwgMzsNCj4+ICsNCj4+ICsJCS8qIHRoZSBv ZmZzZXQgaXMgdGhlbiB0YWtlbiBhbmQgY29udmVydGVkIHRvIDIncyBjb21wbGVtZW50cyAqLw0K Pj4gKwkJaWYgKCFjdHJscy0+b2Zmc2V0W2NdKQ0KPj4gKwkJCWN0cmxzLT5vZmZzZXRbY10gPSBJ U0NfV0JfT19aRVJPX1ZBTDsNCj4+ICsNCj4+ICsJCS8qDQo+PiArCQkgKiB0aGUgc3RyZXRjaCBn YWluIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgaGlzdG9ncmFtIGJpbnMNCj4+ICsJCSAqIGRpdmlk ZWQgYnkgdGhlIGFjdHVhbCByYW5nZSBvZiBjb2xvciBjb21wb25lbnQgKE1heCAtIE1pbikNCj4+ ICsJCSAqIElmIHdlIGNvbXB1dGUgZ2FpbiBsaWtlIHRoaXMsIHRoZSBhY3R1YWwgY29sb3IgY29t cG9uZW50DQo+PiArCQkgKiB3aWxsIGJlIHN0cmV0Y2hlZCB0byB0aGUgZnVsbCBoaXN0b2dyYW0u DQo+PiArCQkgKiBXZSBuZWVkIHRvIHNoaWZ0IDkgYml0cyBmb3IgcHJlY2lzaW9uLCB3ZSBoYXZl IDkgYml0cyBmb3INCj4+ICsJCSAqIGRlY2ltYWxzDQo+PiArCQkgKi8NCj4+ICsJCXNfZ2Fpbltj XSA9IChISVNUX0VOVFJJRVMgPDwgOSkgLw0KPj4gKwkJCShjdHJscy0+aGlzdF9taW5tYXhbY11b SElTVF9NQVhfSU5ERVhdIC0NCj4+ICsJCQljdHJscy0+aGlzdF9taW5tYXhbY11bSElTVF9NSU5f SU5ERVhdICsgMSk7DQo+PiArDQo+PiArCQkvKg0KPj4gKwkJICogTm93IHdlIGhhdmUgdG8gY29t cHV0ZSB0aGUgZ2FpbiB3LnIudC4gdGhlIGF2ZXJhZ2UuDQo+PiArCQkgKiBBZGQvbG9zZSBnYWlu IHRvIHRoZSBjb21wb25lbnQgdG93YXJkcyB0aGUgYXZlcmFnZS4NCj4+ICsJCSAqIElmIGl0IGhh cHBlbnMgdGhhdCB0aGUgY29tcG9uZW50IGlzIHplcm8sIHVzZSB0aGUNCj4+ICsJCSAqIGZpeGVk IHBvaW50IHZhbHVlIDogMS4wIGdhaW4uDQo+PiArCQkgKi8NCj4+ICsJCWlmIChoaXN0X2NvdW50 W2NdKQ0KPj4gKwkJCWd3X2dhaW5bY10gPSBkaXZfdTY0KGF2ZyA8PCA5LCBoaXN0X2NvdW50W2Nd KTsNCj4+ICsJCWVsc2UNCj4+ICsJCQlnd19nYWluW2NdID0gMSA8PCA5Ow0KPj4gKw0KPj4gKwkJ LyogbXVsdGlwbHkgYm90aCBnYWlucyBhbmQgYWRqdXN0IGZvciBkZWNpbWFscyAqLw0KPj4gKwkJ Y3RybHMtPmdhaW5bY10gPSBzX2dhaW5bY10gKiBnd19nYWluW2NdOw0KPj4gKwkJY3RybHMtPmdh aW5bY10gPj49IDk7DQo+PiArCX0NCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgaXNjX2F3 Yl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykNCj4+ICt7DQo+PiArCXN0cnVjdCBpc2NfZGV2 aWNlICppc2MgPQ0KPj4gKwkJY29udGFpbmVyX29mKHcsIHN0cnVjdCBpc2NfZGV2aWNlLCBhd2Jf d29yayk7DQo+PiArCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KPj4gKwlz dHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KPj4gKwl1MzIgaGlzdF9pZCA9 IGN0cmxzLT5oaXN0X2lkOw0KPj4gKwl1MzIgYmF5c2VsOw0KPj4gKwl1bnNpZ25lZCBsb25nIGZs YWdzOw0KPj4gKwl1MzIgbWluLCBtYXg7DQo+PiArDQo+PiArCS8qIHN0cmVhbWluZyBpcyBub3Qg YWN0aXZlIGFueW1vcmUgKi8NCj4+ICsJaWYgKGlzYy0+c3RvcCkNCj4+ICsJCXJldHVybjsNCj4+ ICsNCj4+ICsJaWYgKGN0cmxzLT5oaXN0X3N0YXQgIT0gSElTVF9FTkFCTEVEKQ0KPj4gKwkJcmV0 dXJuOw0KPj4gKw0KPj4gKwlpc2NfaGlzdF9jb3VudChpc2MsICZtaW4sICZtYXgpOw0KPj4gKwlj dHJscy0+aGlzdF9taW5tYXhbaGlzdF9pZF1bSElTVF9NSU5fSU5ERVhdID0gbWluOw0KPj4gKwlj dHJscy0+aGlzdF9taW5tYXhbaGlzdF9pZF1bSElTVF9NQVhfSU5ERVhdID0gbWF4Ow0KPj4gKw0K Pj4gKwlpZiAoaGlzdF9pZCAhPSBJU0NfSElTX0NGR19NT0RFX0IpIHsNCj4+ICsJCWhpc3RfaWQr KzsNCj4+ICsJfSBlbHNlIHsNCj4+ICsJCWlzY193Yl91cGRhdGUoY3RybHMpOw0KPj4gKwkJaGlz dF9pZCA9IElTQ19ISVNfQ0ZHX01PREVfR1I7DQo+PiArCX0NCj4+ICsNCj4+ICsJY3RybHMtPmhp c3RfaWQgPSBoaXN0X2lkOw0KPj4gKwliYXlzZWwgPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPmNm YV9iYXljZmcgPDwgSVNDX0hJU19DRkdfQkFZU0VMX1NISUZUOw0KPj4gKw0KPj4gKwkvKiBpZiBu byBtb3JlIGF1dG8gd2hpdGUgYmFsYW5jZSwgcmVzZXQgY29udHJvbHMuICovDQo+PiArCWlmIChj dHJscy0+YXdiID09IElTQ19XQl9OT05FKQ0KPj4gKwkJaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2Mp Ow0KPj4gKw0KPj4gKwlwbV9ydW50aW1lX2dldF9zeW5jKGlzYy0+ZGV2KTsNCj4+ICsNCj4+ICsJ LyoNCj4+ICsJICogb25seSB1cGRhdGUgaWYgd2UgaGF2ZSBhbGwgdGhlIHJlcXVpcmVkIGhpc3Rv Z3JhbXMgYW5kIGNvbnRyb2xzDQo+PiArCSAqIGlmIGF3YiBoYXMgYmVlbiBkaXNhYmxlZCwgd2Ug bmVlZCB0byByZXNldCByZWdpc3RlcnMgYXMgd2VsbC4NCj4+ICsJICovDQo+PiArCWlmIChoaXN0 X2lkID09IElTQ19ISVNfQ0ZHX01PREVfR1IgfHwgY3RybHMtPmF3YiA9PSBJU0NfV0JfTk9ORSkg ew0KPj4gKwkJLyoNCj4+ICsJCSAqIEl0IG1heSBoYXBwZW4gdGhhdCBETUEgRG9uZSBJUlEgd2ls bCB0cmlnZ2VyIHdoaWxlIHdlIGFyZQ0KPj4gKwkJICogdXBkYXRpbmcgd2hpdGUgYmFsYW5jZSBy ZWdpc3RlcnMgaGVyZS4NCj4+ICsJCSAqIEluIHRoYXQgY2FzZSwgb25seSBwYXJ0cyBvZiB0aGUg Y29udHJvbHMgaGF2ZSBiZWVuIHVwZGF0ZWQuDQo+PiArCQkgKiBXZSBjYW4gYXZvaWQgdGhhdCBi eSBsb2NraW5nIHRoZSBzZWN0aW9uLg0KPj4gKwkJICovDQo+PiArCQlzcGluX2xvY2tfaXJxc2F2 ZSgmaXNjLT5hd2JfbG9jaywgZmxhZ3MpOw0KPj4gKwkJaXNjX3VwZGF0ZV9hd2JfY3RybHMoaXNj KTsNCj4+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzYy0+YXdiX2xvY2ssIGZsYWdzKTsN Cj4+ICsNCj4+ICsJCS8qDQo+PiArCQkgKiBpZiB3ZSBhcmUgZG9pbmcganVzdCB0aGUgb25lIHRp bWUgd2hpdGUgYmFsYW5jZSBhZGp1c3RtZW50LA0KPj4gKwkJICogd2UgYXJlIGJhc2ljYWxseSBk b25lLg0KPj4gKwkJICovDQo+PiArCQlpZiAoY3RybHMtPmF3YiA9PSBJU0NfV0JfT05FVElNRSkg ew0KPj4gKwkJCXY0bDJfaW5mbygmaXNjLT52NGwyX2RldiwNCj4+ICsJCQkJICAiQ29tcGxldGVk IG9uZSB0aW1lIHdoaXRlLWJhbGFuY2UgYWRqdXN0bWVudC5cbiIpOw0KPj4gKwkJCWN0cmxzLT5h d2IgPSBJU0NfV0JfTk9ORTsNCj4+ICsJCX0NCj4+ICsJfQ0KPj4gKwlyZWdtYXBfd3JpdGUocmVn bWFwLCBJU0NfSElTX0NGRywgaGlzdF9pZCB8IGJheXNlbCB8IElTQ19ISVNfQ0ZHX1JBUik7DQo+ PiArCWlzY191cGRhdGVfcHJvZmlsZShpc2MpOw0KPj4gKwkvKiBpZiBhd2IgaGFzIGJlZW4gZGlz YWJsZWQsIHdlIGRvbid0IG5lZWQgdG8gc3RhcnQgYW5vdGhlciBoaXN0b2dyYW0gKi8NCj4+ICsJ aWYgKGN0cmxzLT5hd2IpDQo+PiArCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1RSTEVOLCBJ U0NfQ1RSTF9ISVNSRVEpOw0KPj4gKw0KPj4gKwlwbV9ydW50aW1lX3B1dF9zeW5jKGlzYy0+ZGV2 KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpc2Nfc19jdHJsKHN0cnVjdCB2NGwyX2N0 cmwgKmN0cmwpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gY29udGFpbmVy X29mKGN0cmwtPmhhbmRsZXIsDQo+PiArCQkJCQkgICAgIHN0cnVjdCBpc2NfZGV2aWNlLCBjdHJs cy5oYW5kbGVyKTsNCj4+ICsJc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsN Cj4+ICsNCj4+ICsJaWYgKGN0cmwtPmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkUpDQo+ PiArCQlyZXR1cm4gMDsNCj4+ICsNCj4+ICsJc3dpdGNoIChjdHJsLT5pZCkgew0KPj4gKwljYXNl IFY0TDJfQ0lEX0JSSUdIVE5FU1M6DQo+PiArCQljdHJscy0+YnJpZ2h0bmVzcyA9IGN0cmwtPnZh bCAmIElTQ19DQkNfQlJJR0hUX01BU0s7DQo+PiArCQlicmVhazsNCj4+ICsJY2FzZSBWNEwyX0NJ RF9DT05UUkFTVDoNCj4+ICsJCWN0cmxzLT5jb250cmFzdCA9IGN0cmwtPnZhbCAmIElTQ19DQkNf Q09OVFJBU1RfTUFTSzsNCj4+ICsJCWJyZWFrOw0KPj4gKwljYXNlIFY0TDJfQ0lEX0dBTU1BOg0K Pj4gKwkJY3RybHMtPmdhbW1hX2luZGV4ID0gY3RybC0+dmFsOw0KPj4gKwkJYnJlYWs7DQo+PiAr CWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOg0KPj4gKwkJaWYgKGN0cmwtPnZhbCA9 PSAxKQ0KPj4gKwkJCWN0cmxzLT5hd2IgPSBJU0NfV0JfQVVUTzsNCj4+ICsJCWVsc2UNCj4+ICsJ CQljdHJscy0+YXdiID0gSVNDX1dCX05PTkU7DQo+PiArDQo+PiArCQkvKiB3ZSBkaWQgbm90IGNv bmZpZ3VyZSBJU0MgeWV0ICovDQo+PiArCQlpZiAoIWlzYy0+Y29uZmlnLnNkX2Zvcm1hdCkNCj4+ ICsJCQlicmVhazsNCj4+ICsNCj4+ICsJCWlmIChjdHJscy0+aGlzdF9zdGF0ICE9IEhJU1RfRU5B QkxFRCkNCj4+ICsJCQlpc2NfcmVzZXRfYXdiX2N0cmxzKGlzYyk7DQo+PiArDQo+PiArCQlpZiAo aXNjLT5jdHJscy5hd2IgPT0gSVNDX1dCX0FVVE8gJiYNCj4+ICsJCSAgICB2YjJfaXNfc3RyZWFt aW5nKCZpc2MtPnZiMl92aWRxKSAmJg0KPj4gKwkJICAgIElTQ19JU19GT1JNQVRfUkFXKGlzYy0+ Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkNCj4+ICsJCQlpc2Nfc2V0X2hpc3RvZ3JhbShp c2MsIHRydWUpOw0KPj4gKw0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgVjRMMl9DSURfRE9fV0hJ VEVfQkFMQU5DRToNCj4+ICsJCS8qIGlmIEFXQiBpcyBlbmFibGVkLCBkbyBub3RoaW5nICovDQo+ PiArCQlpZiAoY3RybHMtPmF3YiA9PSBJU0NfV0JfQVVUTykNCj4+ICsJCQlyZXR1cm4gMDsNCj4+ ICsNCj4+ICsJCWN0cmxzLT5hd2IgPSBJU0NfV0JfT05FVElNRTsNCj4+ICsJCWlzY19zZXRfaGlz dG9ncmFtKGlzYywgdHJ1ZSk7DQo+PiArCQl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9k ZXYsDQo+PiArCQkJICJPbmUgdGltZSB3aGl0ZS1iYWxhbmNlIHN0YXJ0ZWQuXG4iKTsNCj4+ICsJ CWJyZWFrOw0KPj4gKwlkZWZhdWx0Og0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArCX0NCj4+ ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg djRsMl9jdHJsX29wcyBpc2NfY3RybF9vcHMgPSB7DQo+PiArCS5zX2N0cmwJPSBpc2Nfc19jdHJs LA0KPj4gK307DQo+PiArDQo+PiArc3RhdGljIGludCBpc2NfY3RybF9pbml0KHN0cnVjdCBpc2Nf ZGV2aWNlICppc2MpDQo+PiArew0KPj4gKwljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyAqb3Bz ID0gJmlzY19jdHJsX29wczsNCj4+ICsJc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5j dHJsczsNCj4+ICsJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwgPSAmY3RybHMtPmhhbmRs ZXI7DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCWN0cmxzLT5oaXN0X3N0YXQgPSBISVNUX0lO SVQ7DQo+PiArCWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsNCj4+ICsNCj4+ICsJcmV0ID0gdjRs Ml9jdHJsX2hhbmRsZXJfaW5pdChoZGwsIDUpOw0KPj4gKwlpZiAocmV0IDwgMCkNCj4+ICsJCXJl dHVybiByZXQ7DQo+PiArDQo+PiArCWN0cmxzLT5icmlnaHRuZXNzID0gMDsNCj4+ICsJY3RybHMt PmNvbnRyYXN0ID0gMjU2Ow0KPj4gKw0KPj4gKwl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywg VjRMMl9DSURfQlJJR0hUTkVTUywgLTEwMjQsIDEwMjMsIDEsIDApOw0KPj4gKwl2NGwyX2N0cmxf bmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfQ09OVFJBU1QsIC0yMDQ4LCAyMDQ3LCAxLCAyNTYp Ow0KPj4gKwl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfR0FNTUEsIDAsIEdB TU1BX01BWCwgMSwgMik7DQo+PiArCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJ RF9BVVRPX1dISVRFX0JBTEFOQ0UsIDAsIDEsIDEsIDEpOw0KPj4gKw0KPj4gKwkvKiBkb193aGl0 ZV9iYWxhbmNlIGlzIGEgYnV0dG9uLCBzbyBtaW4sbWF4LHN0ZXAsZGVmYXVsdCBhcmUgaWdub3Jl ZCAqLw0KPj4gKwlpc2MtPmRvX3diX2N0cmwgPSB2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywg VjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRSwNCj4+ICsJCQkJCSAgICAwLCAwLCAwLCAwKTsNCj4g DQo+IFRoaXMgY2FuIGZhaWwuIFlvdSdsbCBuZWVkIHRvIGhhbmRsZSB0aGUgZXJyb3IsIGluY2x1 ZGluZyBmcmVlaW5nIHRoZQ0KPiBpbml0aWFsaXNlZCBjb250cm9sIGhhbmRsZXIuID4NCj4+ICsN Cj4+ICsJdjRsMl9jdHJsX2FjdGl2YXRlKGlzYy0+ZG9fd2JfY3RybCwgZmFsc2UpOw0KPj4gKw0K Pj4gKwl2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cChoZGwpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsN Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBpc2NfYXN5bmNfYm91bmQoc3RydWN0IHY0bDJf YXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyLA0KPj4gKwkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXYg KnN1YmRldiwNCj4+ICsJCQkgICAgc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2ICphc2QpDQo+PiAr ew0KPj4gKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gY29udGFpbmVyX29mKG5vdGlmaWVyLT52 NGwyX2RldiwNCj4+ICsJCQkJCSAgICAgIHN0cnVjdCBpc2NfZGV2aWNlLCB2NGwyX2Rldik7DQo+ PiArCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eSA9DQo+PiArCQljb250 YWluZXJfb2Yobm90aWZpZXIsIHN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSwgbm90aWZpZXIpOw0K Pj4gKw0KPj4gKwlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZCgmaXNjLT52aWRlb19kZXYpKSB7DQo+ PiArCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgIm9ubHkgc3VwcG9ydHMgb25lIHN1Yi1kZXZp Y2UuXG4iKTsNCj4+ICsJCXJldHVybiAtRUJVU1k7DQo+PiArCX0NCj4+ICsNCj4+ICsJc3ViZGV2 X2VudGl0eS0+c2QgPSBzdWJkZXY7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsN Cj4+ICtzdGF0aWMgdm9pZCBpc2NfYXN5bmNfdW5iaW5kKHN0cnVjdCB2NGwyX2FzeW5jX25vdGlm aWVyICpub3RpZmllciwNCj4+ICsJCQkgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwN Cj4+ICsJCQkgICAgICBzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYgKmFzZCkNCj4+ICt7DQo+PiAr CXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJfb2Yobm90aWZpZXItPnY0bDJfZGV2 LA0KPj4gKwkJCQkJICAgICAgc3RydWN0IGlzY19kZXZpY2UsIHY0bDJfZGV2KTsNCj4+ICsJY2Fu Y2VsX3dvcmtfc3luYygmaXNjLT5hd2Jfd29yayk7DQo+PiArCXZpZGVvX3VucmVnaXN0ZXJfZGV2 aWNlKCZpc2MtPnZpZGVvX2Rldik7DQo+PiArCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmlzYy0+ Y3RybHMuaGFuZGxlcik7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBzdHJ1Y3QgaXNjX2Zvcm1h dCAqZmluZF9mb3JtYXRfYnlfY29kZSh1bnNpZ25lZCBpbnQgY29kZSwgaW50ICppbmRleCkNCj4+ ICt7DQo+PiArCXN0cnVjdCBpc2NfZm9ybWF0ICpmbXQgPSAmZm9ybWF0c19saXN0WzBdOw0KPj4g Kwl1bnNpZ25lZCBpbnQgaTsNCj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo Zm9ybWF0c19saXN0KTsgaSsrKSB7DQo+PiArCQlpZiAoZm10LT5tYnVzX2NvZGUgPT0gY29kZSkg ew0KPj4gKwkJCSppbmRleCA9IGk7DQo+PiArCQkJcmV0dXJuIGZtdDsNCj4+ICsJCX0NCj4+ICsN Cj4+ICsJCWZtdCsrOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiBOVUxMOw0KPj4gK30NCj4+ ICsNCj4+ICtzdGF0aWMgaW50IGlzY19mb3JtYXRzX2luaXQoc3RydWN0IGlzY19kZXZpY2UgKmlz YykNCj4+ICt7DQo+PiArCXN0cnVjdCBpc2NfZm9ybWF0ICpmbXQ7DQo+PiArCXN0cnVjdCB2NGwy X3N1YmRldiAqc3ViZGV2ID0gaXNjLT5jdXJyZW50X3N1YmRldi0+c2Q7DQo+PiArCXVuc2lnbmVk IGludCBudW1fZm10cywgaSwgajsNCj4+ICsJdTMyIGxpc3Rfc2l6ZSA9IEFSUkFZX1NJWkUoZm9y bWF0c19saXN0KTsNCj4+ICsJc3RydWN0IHY0bDJfc3ViZGV2X21idXNfY29kZV9lbnVtIG1idXNf Y29kZSA9IHsNCj4+ICsJCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQo+PiAr CX07DQo+PiArDQo+PiArCW51bV9mbXRzID0gMDsNCj4+ICsJd2hpbGUgKCF2NGwyX3N1YmRldl9j YWxsKHN1YmRldiwgcGFkLCBlbnVtX21idXNfY29kZSwNCj4+ICsJICAgICAgIE5VTEwsICZtYnVz X2NvZGUpKSB7DQo+PiArCQltYnVzX2NvZGUuaW5kZXgrKzsNCj4+ICsNCj4+ICsJCWZtdCA9IGZp bmRfZm9ybWF0X2J5X2NvZGUobWJ1c19jb2RlLmNvZGUsICZpKTsNCj4+ICsJCWlmICghZm10KSB7 DQo+PiArCQkJdjRsMl93YXJuKCZpc2MtPnY0bDJfZGV2LCAiTWJ1cyBjb2RlICV4IG5vdCBzdXBw b3J0ZWRcbiIsDQo+PiArCQkJCSAgbWJ1c19jb2RlLmNvZGUpOw0KPj4gKwkJCWNvbnRpbnVlOw0K Pj4gKwkJfQ0KPj4gKw0KPj4gKwkJZm10LT5zZF9zdXBwb3J0ID0gdHJ1ZTsNCj4+ICsJCW51bV9m bXRzKys7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKCFudW1fZm10cykNCj4+ICsJCXJldHVybiAt RU5YSU87DQo+PiArDQo+PiArCWlzYy0+bnVtX3VzZXJfZm9ybWF0cyA9IG51bV9mbXRzOw0KPj4g Kwlpc2MtPnVzZXJfZm9ybWF0cyA9IGRldm1fa2NhbGxvYyhpc2MtPmRldiwNCj4+ICsJCQkJCSBu dW1fZm10cywgc2l6ZW9mKCppc2MtPnVzZXJfZm9ybWF0cyksDQo+PiArCQkJCQkgR0ZQX0tFUk5F TCk7DQo+PiArCWlmICghaXNjLT51c2VyX2Zvcm1hdHMpDQo+PiArCQlyZXR1cm4gLUVOT01FTTsN Cj4+ICsNCj4+ICsJZm10ID0gJmZvcm1hdHNfbGlzdFswXTsNCj4+ICsJZm9yIChpID0gMCwgaiA9 IDA7IGkgPCBsaXN0X3NpemU7IGkrKykgew0KPj4gKwkJaWYgKGZtdC0+c2Rfc3VwcG9ydCkNCj4+ ICsJCQlpc2MtPnVzZXJfZm9ybWF0c1tqKytdID0gZm10Ow0KPj4gKwkJZm10Kys7DQo+PiArCX0N Cj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaXNjX3Nl dF9kZWZhdWx0X2ZtdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KPj4gK3sNCj4+ICsJc3RydWN0 IHY0bDJfZm9ybWF0IGYgPSB7DQo+PiArCQkudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQ VFVSRSwNCj4+ICsJCS5mbXQucGl4ID0gew0KPj4gKwkJCS53aWR0aAkJPSBWR0FfV0lEVEgsDQo+ PiArCQkJLmhlaWdodAkJPSBWR0FfSEVJR0hULA0KPj4gKwkJCS5maWVsZAkJPSBWNEwyX0ZJRUxE X05PTkUsDQo+PiArCQkJLnBpeGVsZm9ybWF0CT0gaXNjLT51c2VyX2Zvcm1hdHNbMF0tPmZvdXJj YywNCj4+ICsJCX0sDQo+PiArCX07DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCXJldCA9IGlz Y190cnlfZm10KGlzYywgJmYsIE5VTEwpOw0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJcmV0dXJuIHJl dDsNCj4+ICsNCj4+ICsJaXNjLT5mbXQgPSBmOw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIGludCBpc2NfYXN5bmNfY29tcGxldGUoc3RydWN0IHY0bDJfYXN5bmNfbm90 aWZpZXIgKm5vdGlmaWVyKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IGNv bnRhaW5lcl9vZihub3RpZmllci0+djRsMl9kZXYsDQo+PiArCQkJCQkgICAgICBzdHJ1Y3QgaXNj X2RldmljZSwgdjRsMl9kZXYpOw0KPj4gKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gJmlz Yy0+dmlkZW9fZGV2Ow0KPj4gKwlzdHJ1Y3QgdmIyX3F1ZXVlICpxID0gJmlzYy0+dmIyX3ZpZHE7 DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCUlOSVRfV09SSygmaXNjLT5hd2Jfd29yaywgaXNj X2F3Yl93b3JrKTsNCj4+ICsNCj4+ICsJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2 X25vZGVzKCZpc2MtPnY0bDJfZGV2KTsNCj4+ICsJaWYgKHJldCA8IDApIHsNCj4+ICsJCXY0bDJf ZXJyKCZpc2MtPnY0bDJfZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1YmRldiBub2Rlc1xuIik7 DQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKwl9DQo+PiArDQo+PiArCWlzYy0+Y3VycmVudF9zdWJk ZXYgPSBjb250YWluZXJfb2Yobm90aWZpZXIsDQo+PiArCQkJCQkgICBzdHJ1Y3QgaXNjX3N1YmRl dl9lbnRpdHksIG5vdGlmaWVyKTsNCj4+ICsJbXV0ZXhfaW5pdCgmaXNjLT5sb2NrKTsNCj4+ICsJ aW5pdF9jb21wbGV0aW9uKCZpc2MtPmNvbXApOw0KPj4gKw0KPj4gKwkvKiBJbml0aWFsaXplIHZp ZGVvYnVmMiBxdWV1ZSAqLw0KPj4gKwlxLT50eXBlCQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NB UFRVUkU7DQo+PiArCXEtPmlvX21vZGVzCQk9IFZCMl9NTUFQIHwgVkIyX0RNQUJVRiB8IFZCMl9S RUFEOw0KPj4gKwlxLT5kcnZfcHJpdgkJPSBpc2M7DQo+PiArCXEtPmJ1Zl9zdHJ1Y3Rfc2l6ZQk9 IHNpemVvZihzdHJ1Y3QgaXNjX2J1ZmZlcik7DQo+PiArCXEtPm9wcwkJCT0gJmlzY192YjJfb3Bz Ow0KPj4gKwlxLT5tZW1fb3BzCQk9ICZ2YjJfZG1hX2NvbnRpZ19tZW1vcHM7DQo+PiArCXEtPnRp bWVzdGFtcF9mbGFncwk9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQzsNCj4+ICsJ cS0+bG9jawkJCT0gJmlzYy0+bG9jazsNCj4+ICsJcS0+bWluX2J1ZmZlcnNfbmVlZGVkCT0gMTsN Cj4+ICsJcS0+ZGV2CQkJPSBpc2MtPmRldjsNCj4+ICsNCj4+ICsJcmV0ID0gdmIyX3F1ZXVlX2lu aXQocSk7DQo+PiArCWlmIChyZXQgPCAwKSB7DQo+PiArCQl2NGwyX2VycigmaXNjLT52NGwyX2Rl diwNCj4+ICsJCQkgInZiMl9xdWV1ZV9pbml0KCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCj4gDQo+ IG11dGV4X2Rlc3Ryb3koJmlzYy0+bG9jayk7DQo+IA0KPiBJJ2QgYWRkIGEgbGFiZWwgdG8gZG8g dGhhdCBhdCB0aGUgZW5kLiBPciBtb3ZlIHRoZSBtdXRleF9pbml0KCkganVzdCBiZWZvcmUNCj4g cmVnaXN0ZXJpbmcgdGhlIHZpZGVvIGRldmljZSwgdW5sZXNzIHNvbWV0aGluZyBuZWVkcyB0aGUg bXV0ZXggYmVmb3JlIHRoYXQuDQo+IA0KPj4gKwkJcmV0dXJuIHJldDsNCj4+ICsJfQ0KPj4gKw0K Pj4gKwkvKiBJbml0IHZpZGVvIGRtYSBxdWV1ZXMgKi8NCj4+ICsJSU5JVF9MSVNUX0hFQUQoJmlz Yy0+ZG1hX3F1ZXVlKTsNCj4+ICsJc3Bpbl9sb2NrX2luaXQoJmlzYy0+ZG1hX3F1ZXVlX2xvY2sp Ow0KPj4gKwlzcGluX2xvY2tfaW5pdCgmaXNjLT5hd2JfbG9jayk7DQo+PiArDQo+PiArCXJldCA9 IGlzY19mb3JtYXRzX2luaXQoaXNjKTsNCj4+ICsJaWYgKHJldCA8IDApIHsNCj4+ICsJCXY0bDJf ZXJyKCZpc2MtPnY0bDJfZGV2LA0KPj4gKwkJCSAiSW5pdCBmb3JtYXQgZmFpbGVkOiAlZFxuIiwg cmV0KTsNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0ID0gaXNjX3Nl dF9kZWZhdWx0X2ZtdChpc2MpOw0KPj4gKwlpZiAocmV0KSB7DQo+PiArCQl2NGwyX2VycigmaXNj LT52NGwyX2RldiwgIkNvdWxkIG5vdCBzZXQgZGVmYXVsdCBmb3JtYXRcbiIpOw0KPj4gKwkJcmV0 dXJuIHJldDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXQgPSBpc2NfY3RybF9pbml0KGlzYyk7DQo+ PiArCWlmIChyZXQpIHsNCj4+ICsJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiSW5pdCBpc2Mg Y3Ryb2xzIGZhaWxlZDogJWRcbiIsIHJldCk7DQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKwl9DQo+ PiArDQo+PiArCS8qIFJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLw0KPj4gKwlzdHJzY3B5KHZkZXYt Pm5hbWUsIEFUTUVMX0lTQ19OQU1FLCBzaXplb2YodmRldi0+bmFtZSkpOw0KPj4gKwl2ZGV2LT5y ZWxlYXNlCQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5Ow0KPj4gKwl2ZGV2LT5mb3BzCQk9 ICZpc2NfZm9wczsNCj4+ICsJdmRldi0+aW9jdGxfb3BzCQk9ICZpc2NfaW9jdGxfb3BzOw0KPj4g Kwl2ZGV2LT52NGwyX2RldgkJPSAmaXNjLT52NGwyX2RldjsNCj4+ICsJdmRldi0+dmZsX2RpcgkJ PSBWRkxfRElSX1JYOw0KPj4gKwl2ZGV2LT5xdWV1ZQkJPSBxOw0KPj4gKwl2ZGV2LT5sb2NrCQk9 ICZpc2MtPmxvY2s7DQo+PiArCXZkZXYtPmN0cmxfaGFuZGxlcgk9ICZpc2MtPmN0cmxzLmhhbmRs ZXI7DQo+PiArCXZkZXYtPmRldmljZV9jYXBzCT0gVjRMMl9DQVBfU1RSRUFNSU5HIHwgVjRMMl9D QVBfVklERU9fQ0FQVFVSRTsNCj4+ICsJdmlkZW9fc2V0X2RydmRhdGEodmRldiwgaXNjKTsNCj4+ ICsNCj4+ICsJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZkZXYsIFZGTF9UWVBFX0dSQUJC RVIsIC0xKTsNCj4+ICsJaWYgKHJldCA8IDApIHsNCj4+ICsJCXY0bDJfZXJyKCZpc2MtPnY0bDJf ZGV2LA0KPj4gKwkJCSAidmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZDogJWRcbiIsIHJldCk7 DQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30N Cj4+ICsNCj4+ICtjb25zdCBzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllcl9vcGVyYXRpb25zIGlz Y19hc3luY19vcHMgPSB7DQo+PiArCS5ib3VuZCA9IGlzY19hc3luY19ib3VuZCwNCj4+ICsJLnVu YmluZCA9IGlzY19hc3luY191bmJpbmQsDQo+PiArCS5jb21wbGV0ZSA9IGlzY19hc3luY19jb21w bGV0ZSwNCj4+ICt9Ow0KPj4gKw0KPj4gK3ZvaWQgaXNjX3N1YmRldl9jbGVhbnVwKHN0cnVjdCBp c2NfZGV2aWNlICppc2MpDQo+PiArew0KPj4gKwlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgKnN1 YmRldl9lbnRpdHk7DQo+PiArDQo+PiArCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViZGV2X2VudGl0 eSwgJmlzYy0+c3ViZGV2X2VudGl0aWVzLCBsaXN0KSB7DQo+PiArCQl2NGwyX2FzeW5jX25vdGlm aWVyX3VucmVnaXN0ZXIoJnN1YmRldl9lbnRpdHktPm5vdGlmaWVyKTsNCj4+ICsJCXY0bDJfYXN5 bmNfbm90aWZpZXJfY2xlYW51cCgmc3ViZGV2X2VudGl0eS0+bm90aWZpZXIpOw0KPj4gKwl9DQo+ PiArDQo+PiArCUlOSVRfTElTVF9IRUFEKCZpc2MtPnN1YmRldl9lbnRpdGllcyk7DQo+PiArfQ0K Pj4gKw0KPj4gK2ludCBpc2NfcGlwZWxpbmVfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0K Pj4gK3sNCj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gaXNjLT5kZXY7DQo+PiArCXN0cnVjdCBy ZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KPj4gKwlzdHJ1Y3QgcmVnbWFwX2ZpZWxkICpy ZWdzOw0KPj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4+ICsNCj4+ICsJLyogV0ItLT5DRkEtLT5DQy0t PkdBTS0tPkNTQy0tPkNCQy0tPlNVQjQyMi0tPlNVQjQyMCAqLw0KPj4gKwljb25zdCBzdHJ1Y3Qg cmVnX2ZpZWxkIHJlZ2ZpZWxkc1tJU0NfUElQRV9MSU5FX05PREVfTlVNXSA9IHsNCj4+ICsJCVJF R19GSUVMRChJU0NfV0JfQ1RSTCwgMCwgMCksDQo+PiArCQlSRUdfRklFTEQoSVNDX0NGQV9DVFJM LCAwLCAwKSwNCj4+ICsJCVJFR19GSUVMRChJU0NfQ0NfQ1RSTCwgMCwgMCksDQo+PiArCQlSRUdf RklFTEQoSVNDX0dBTV9DVFJMLCAwLCAwKSwNCj4+ICsJCVJFR19GSUVMRChJU0NfR0FNX0NUUkws IDEsIDEpLA0KPj4gKwkJUkVHX0ZJRUxEKElTQ19HQU1fQ1RSTCwgMiwgMiksDQo+PiArCQlSRUdf RklFTEQoSVNDX0dBTV9DVFJMLCAzLCAzKSwNCj4+ICsJCVJFR19GSUVMRChJU0NfQ1NDX0NUUkws IDAsIDApLA0KPj4gKwkJUkVHX0ZJRUxEKElTQ19DQkNfQ1RSTCwgMCwgMCksDQo+PiArCQlSRUdf RklFTEQoSVNDX1NVQjQyMl9DVFJMLCAwLCAwKSwNCj4+ICsJCVJFR19GSUVMRChJU0NfU1VCNDIw X0NUUkwsIDAsIDApLA0KPj4gKwl9Ow0KPj4gKw0KPj4gKwlmb3IgKGkgPSAwOyBpIDwgSVNDX1BJ UEVfTElORV9OT0RFX05VTTsgaSsrKSB7DQo+PiArCQlyZWdzID0gZGV2bV9yZWdtYXBfZmllbGRf YWxsb2MoZGV2LCByZWdtYXAsIHJlZ2ZpZWxkc1tpXSk7DQo+PiArCQlpZiAoSVNfRVJSKHJlZ3Mp KQ0KPj4gKwkJCXJldHVybiBQVFJfRVJSKHJlZ3MpOw0KPj4gKw0KPj4gKwkJaXNjLT5waXBlbGlu ZVtpXSA9ICByZWdzOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsN Cj4+ICsvKiByZWdtYXAgY29uZmlndXJhdGlvbiAqLw0KPj4gKyNkZWZpbmUgQVRNRUxfSVNDX1JF R19NQVggICAgMHhiZmMNCj4+ICtjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBpc2NfcmVnbWFw X2NvbmZpZyA9IHsNCj4+ICsJLnJlZ19iaXRzICAgICAgID0gMzIsDQo+PiArCS5yZWdfc3RyaWRl ICAgICA9IDQsDQo+PiArCS52YWxfYml0cyAgICAgICA9IDMyLA0KPj4gKwkubWF4X3JlZ2lzdGVy CT0gQVRNRUxfSVNDX1JFR19NQVgsDQo+PiArfTsNCj4+ICsNCj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5jIGIvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9hdG1lbC9hdG1lbC1pc2MuYw0KPj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBp bmRleCBkYTNiNDQxLi4wMDAwMDAwDQo+PiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0 bWVsL2F0bWVsLWlzYy5jDQo+PiArKysgL2Rldi9udWxsDQo+PiBAQCAtMSwyNjM0ICswLDAgQEAN Cj4+IC0vKg0KPj4gLSAqIEF0bWVsIEltYWdlIFNlbnNvciBDb250cm9sbGVyIChJU0MpIGRyaXZl cg0KPj4gLSAqDQo+PiAtICogQ29weXJpZ2h0IChDKSAyMDE2IEF0bWVsDQo+PiAtICoNCj4+IC0g KiBBdXRob3I6IFNvbmdqdW4gV3UgPHNvbmdqdW4ud3VAbWljcm9jaGlwLmNvbT4NCj4+IC0gKg0K Pj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5DQo+PiAtICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCj4+IC0gKiB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuDQo+PiAtICoNCj4+ IC0gKiBTZW5zb3ItLT5QRkUtLT5XQi0tPkNGQS0tPkNDLS0+R0FNLS0+Q1NDLS0+Q0JDLS0+U1VC LS0+UkxQLS0+RE1BDQo+PiAtICoNCj4+IC0gKiBJU0MgdmlkZW8gcGlwZWxpbmUgaW50ZWdyYXRl cyB0aGUgZm9sbG93aW5nIHN1Ym1vZHVsZXM6DQo+PiAtICogUEZFOiBQYXJhbGxlbCBGcm9udCBF bmQgdG8gc2FtcGxlIHRoZSBjYW1lcmEgc2Vuc29yIGlucHV0IHN0cmVhbQ0KPj4gLSAqICBXQjog UHJvZ3JhbW1hYmxlIHdoaXRlIGJhbGFuY2UgaW4gdGhlIEJheWVyIGRvbWFpbg0KPj4gLSAqIENG QTogQ29sb3IgZmlsdGVyIGFycmF5IGludGVycG9sYXRpb24gbW9kdWxlDQo+PiAtICogIENDOiBQ cm9ncmFtbWFibGUgY29sb3IgY29ycmVjdGlvbg0KPj4gLSAqIEdBTTogR2FtbWEgY29ycmVjdGlv bg0KPj4gLSAqIENTQzogUHJvZ3JhbW1hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24NCj4+IC0g KiBDQkM6IENvbnRyYXN0IGFuZCBCcmlnaHRuZXNzIGNvbnRyb2wNCj4+IC0gKiBTVUI6IFRoaXMg bW9kdWxlIHBlcmZvcm1zIFlDYkNyNDQ0IHRvIFlDYkNyNDIwIGNocm9taW5hbmNlIHN1YnNhbXBs aW5nDQo+PiAtICogUkxQOiBUaGlzIG1vZHVsZSBwZXJmb3JtcyByb3VuZGluZywgcmFuZ2UgbGlt aXRpbmcNCj4+IC0gKiAgICAgIGFuZCBwYWNraW5nIG9mIHRoZSBpbmNvbWluZyBkYXRhDQo+PiAt ICovDQo+PiAtDQo+PiAtI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPj4gLSNpbmNsdWRlIDxsaW51 eC9jbGtkZXYuaD4NCj4+IC0jaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+DQo+PiAtI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+PiAtI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0K Pj4gLSNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4NCj4+IC0jaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+DQo+PiAtI2luY2x1ZGUgPGxpbnV4L29mLmg+DQo+PiAtI2luY2x1ZGUgPGxpbnV4L29mX2dy YXBoLmg+DQo+PiAtI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPj4gLSNpbmNs dWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQo+PiAtI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPg0K Pj4gLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4NCj4+IC0NCj4+IC0jaW5jbHVkZSA8bWVk aWEvdjRsMi1jdHJscy5oPg0KPj4gLSNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPg0KPj4g LSNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+DQo+PiAtI2luY2x1ZGUgPG1lZGlhL3Y0bDIt aW1hZ2Utc2l6ZXMuaD4NCj4+IC0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPg0KPj4gLSNp bmNsdWRlIDxtZWRpYS92NGwyLWZ3bm9kZS5oPg0KPj4gLSNpbmNsdWRlIDxtZWRpYS92NGwyLXN1 YmRldi5oPg0KPj4gLSNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNvbnRpZy5oPg0KPj4g LQ0KPj4gLSNpbmNsdWRlICJhdG1lbC1pc2MtcmVncy5oIg0KPj4gLQ0KPj4gLSNkZWZpbmUgQVRN RUxfSVNDX05BTUUJCSJhdG1lbF9pc2MiDQo+PiAtDQo+PiAtI2RlZmluZSBJU0NfTUFYX1NVUFBP UlRfV0lEVEggICAyNTkyDQo+PiAtI2RlZmluZSBJU0NfTUFYX1NVUFBPUlRfSEVJR0hUICAxOTQ0 DQo+PiAtDQo+PiAtI2RlZmluZSBJU0NfQ0xLX01BWF9ESVYJCTI1NQ0KPj4gLQ0KPj4gLWVudW0g aXNjX2Nsa19pZCB7DQo+PiAtCUlTQ19JU1BDSyA9IDAsDQo+PiAtCUlTQ19NQ0sgPSAxLA0KPj4g LX07DQo+PiAtDQo+PiAtc3RydWN0IGlzY19jbGsgew0KPj4gLQlzdHJ1Y3QgY2xrX2h3ICAgaHc7 DQo+PiAtCXN0cnVjdCBjbGsgICAgICAqY2xrOw0KPj4gLQlzdHJ1Y3QgcmVnbWFwICAgKnJlZ21h cDsNCj4+IC0Jc3BpbmxvY2tfdAlsb2NrOw0KPj4gLQl1OAkJaWQ7DQo+PiAtCXU4CQlwYXJlbnRf aWQ7DQo+PiAtCXUzMgkJZGl2Ow0KPj4gLQlzdHJ1Y3QgZGV2aWNlCSpkZXY7DQo+PiAtfTsNCj4+ IC0NCj4+IC0jZGVmaW5lIHRvX2lzY19jbGsoaHcpIGNvbnRhaW5lcl9vZihodywgc3RydWN0IGlz Y19jbGssIGh3KQ0KPj4gLQ0KPj4gLXN0cnVjdCBpc2NfYnVmZmVyIHsNCj4+IC0Jc3RydWN0IHZi Ml92NGwyX2J1ZmZlciAgdmI7DQo+PiAtCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsNCj4+IC19Ow0K Pj4gLQ0KPj4gLXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSB7DQo+PiAtCXN0cnVjdCB2NGwyX3N1 YmRldgkJKnNkOw0KPj4gLQlzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYJKmFzZDsNCj4+IC0Jc3Ry dWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgICAgICBub3RpZmllcjsNCj4+IC0NCj4+IC0JdTMyIHBm ZV9jZmcwOw0KPj4gLQ0KPj4gLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQo+PiAtfTsNCj4+IC0N Cj4+IC0vKg0KPj4gLSAqIHN0cnVjdCBpc2NfZm9ybWF0IC0gSVNDIG1lZGlhIGJ1cyBmb3JtYXQg aW5mb3JtYXRpb24NCj4+IC0JCQlUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBpbnRlcmZh Y2UgYmV0d2VlbiB0aGUgSVNDDQo+PiAtCQkJYW5kIHRoZSBzZW5zb3IuIEl0J3MgdGhlIGlucHV0 IGZvcm1hdCByZWNlaXZlZCBieQ0KPj4gLQkJCXRoZSBJU0MuDQo+PiAtICogQGZvdXJjYzoJCUZv dXJjYyBjb2RlIGZvciB0aGlzIGZvcm1hdA0KPj4gLSAqIEBtYnVzX2NvZGU6CQlWNEwyIG1lZGlh IGJ1cyBmb3JtYXQgY29kZS4NCj4+IC0gKiBAY2ZhX2JheWNmZzoJCUlmIHRoaXMgZm9ybWF0IGlz IFJBVyBCQVlFUiwgaW5kaWNhdGUgdGhlIHR5cGUgb2YgYmF5ZXIuDQo+PiAtCQkJdGhpcyBpcyBl aXRoZXIgQkdCRywgUkdSRywgZXRjLg0KPj4gLSAqIEBwZmVfY2ZnMF9icHM6CU51bWJlciBvZiBo YXJkd2FyZSBkYXRhIGxpbmVzIGNvbm5lY3RlZCB0byB0aGUgSVNDDQo+PiAtICovDQo+PiAtDQo+ PiAtc3RydWN0IGlzY19mb3JtYXQgew0KPj4gLQl1MzIJZm91cmNjOw0KPj4gLQl1MzIJbWJ1c19j b2RlOw0KPj4gLQl1MzIJY2ZhX2JheWNmZzsNCj4+IC0NCj4+IC0JYm9vbAlzZF9zdXBwb3J0Ow0K Pj4gLQl1MzIJcGZlX2NmZzBfYnBzOw0KPj4gLX07DQo+PiAtDQo+PiAtLyogUGlwZWxpbmUgYml0 bWFwICovDQo+PiAtI2RlZmluZSBXQl9FTkFCTEUJQklUKDApDQo+PiAtI2RlZmluZSBDRkFfRU5B QkxFCUJJVCgxKQ0KPj4gLSNkZWZpbmUgQ0NfRU5BQkxFCUJJVCgyKQ0KPj4gLSNkZWZpbmUgR0FN X0VOQUJMRQlCSVQoMykNCj4+IC0jZGVmaW5lIEdBTV9CRU5BQkxFCUJJVCg0KQ0KPj4gLSNkZWZp bmUgR0FNX0dFTkFCTEUJQklUKDUpDQo+PiAtI2RlZmluZSBHQU1fUkVOQUJMRQlCSVQoNikNCj4+ IC0jZGVmaW5lIENTQ19FTkFCTEUJQklUKDcpDQo+PiAtI2RlZmluZSBDQkNfRU5BQkxFCUJJVCg4 KQ0KPj4gLSNkZWZpbmUgU1VCNDIyX0VOQUJMRQlCSVQoOSkNCj4+IC0jZGVmaW5lIFNVQjQyMF9F TkFCTEUJQklUKDEwKQ0KPj4gLQ0KPj4gLSNkZWZpbmUgR0FNX0VOQUJMRVMJKEdBTV9SRU5BQkxF IHwgR0FNX0dFTkFCTEUgfCBHQU1fQkVOQUJMRSB8IEdBTV9FTkFCTEUpDQo+PiAtDQo+PiAtLyoN Cj4+IC0gKiBzdHJ1Y3QgZm10X2NvbmZpZyAtIElTQyBmb3JtYXQgY29uZmlndXJhdGlvbiBhbmQg aW50ZXJuYWwgcGlwZWxpbmUNCj4+IC0JCQlUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBp bnRlcm5hbCBjb25maWd1cmF0aW9uDQo+PiAtCQkJb2YgdGhlIElTQy4NCj4+IC0JCQlJdCBhbHNv IGhvbGRzIHRoZSBmb3JtYXQgdGhhdCBJU0Mgd2lsbCBwcmVzZW50IHRvIHY0bDIuDQo+PiAtICog QHNkX2Zvcm1hdDoJCVBvaW50ZXIgdG8gYW4gaXNjX2Zvcm1hdCBzdHJ1Y3QgdGhhdCBob2xkcyB0 aGUgc2Vuc29yDQo+PiAtCQkJY29uZmlndXJhdGlvbi4NCj4+IC0gKiBAZm91cmNjOgkJRm91cmNj IGNvZGUgZm9yIHRoaXMgZm9ybWF0Lg0KPj4gLSAqIEBicHA6CQlCeXRlcyBwZXIgcGl4ZWwgaW4g dGhlIGN1cnJlbnQgZm9ybWF0Lg0KPj4gLSAqIEBybHBfY2ZnX21vZGU6CUNvbmZpZ3VyYXRpb24g b2YgdGhlIFJMUCAocm91bmRpbmcsIGxpbWl0aW5nIHBhY2thZ2luZykNCj4+IC0gKiBAZGNmZ19p bW9kZToJCUNvbmZpZ3VyYXRpb24gb2YgdGhlIGlucHV0IG9mIHRoZSBETUEgbW9kdWxlDQo+PiAt ICogQGRjdHJsX2R2aWV3OglDb25maWd1cmF0aW9uIG9mIHRoZSBvdXRwdXQgb2YgdGhlIERNQSBt b2R1bGUNCj4+IC0gKiBAYml0c19waXBlbGluZToJQ29uZmlndXJhdGlvbiBvZiB0aGUgcGlwZWxp bmUsIHdoaWNoIG1vZHVsZXMgYXJlIGVuYWJsZWQNCj4+IC0gKi8NCj4+IC1zdHJ1Y3QgZm10X2Nv bmZpZyB7DQo+PiAtCXN0cnVjdCBpc2NfZm9ybWF0CSpzZF9mb3JtYXQ7DQo+PiAtDQo+PiAtCXUz MgkJCWZvdXJjYzsNCj4+IC0JdTgJCQlicHA7DQo+PiAtDQo+PiAtCXUzMgkJCXJscF9jZmdfbW9k ZTsNCj4+IC0JdTMyCQkJZGNmZ19pbW9kZTsNCj4+IC0JdTMyCQkJZGN0cmxfZHZpZXc7DQo+PiAt DQo+PiAtCXUzMgkJCWJpdHNfcGlwZWxpbmU7DQo+PiAtfTsNCj4+IC0NCj4+IC0jZGVmaW5lIEhJ U1RfRU5UUklFUwkJNTEyDQo+PiAtI2RlZmluZSBISVNUX0JBWUVSCQkoSVNDX0hJU19DRkdfTU9E RV9CICsgMSkNCj4+IC0NCj4+IC1lbnVtew0KPj4gLQlISVNUX0lOSVQgPSAwLA0KPj4gLQlISVNU X0VOQUJMRUQsDQo+PiAtCUhJU1RfRElTQUJMRUQsDQo+PiAtfTsNCj4+IC0NCj4+IC1zdHJ1Y3Qg aXNjX2N0cmxzIHsNCj4+IC0Jc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGhhbmRsZXI7DQo+PiAt DQo+PiAtCXUzMiBicmlnaHRuZXNzOw0KPj4gLQl1MzIgY29udHJhc3Q7DQo+PiAtCXU4IGdhbW1h X2luZGV4Ow0KPj4gLSNkZWZpbmUgSVNDX1dCX05PTkUJMA0KPj4gLSNkZWZpbmUgSVNDX1dCX0FV VE8JMQ0KPj4gLSNkZWZpbmUgSVNDX1dCX09ORVRJTUUJMg0KPj4gLQl1OCBhd2I7DQo+PiAtDQo+ PiAtCS8qIG9uZSBmb3IgZWFjaCBjb21wb25lbnQgOiBHUiwgUiwgR0IsIEIgKi8NCj4+IC0JdTMy IGdhaW5bSElTVF9CQVlFUl07DQo+PiAtCXUzMiBvZmZzZXRbSElTVF9CQVlFUl07DQo+PiAtDQo+ PiAtCXUzMiBoaXN0X2VudHJ5W0hJU1RfRU5UUklFU107DQo+PiAtCXUzMiBoaXN0X2NvdW50W0hJ U1RfQkFZRVJdOw0KPj4gLQl1OCBoaXN0X2lkOw0KPj4gLQl1OCBoaXN0X3N0YXQ7DQo+PiAtI2Rl ZmluZSBISVNUX01JTl9JTkRFWAkJMA0KPj4gLSNkZWZpbmUgSElTVF9NQVhfSU5ERVgJCTENCj4+ IC0JdTMyIGhpc3RfbWlubWF4W0hJU1RfQkFZRVJdWzJdOw0KPj4gLX07DQo+PiAtDQo+PiAtI2Rl ZmluZSBJU0NfUElQRV9MSU5FX05PREVfTlVNCTExDQo+PiAtDQo+PiAtc3RydWN0IGlzY19kZXZp Y2Ugew0KPj4gLQlzdHJ1Y3QgcmVnbWFwCQkqcmVnbWFwOw0KPj4gLQlzdHJ1Y3QgY2xrCQkqaGNs b2NrOw0KPj4gLQlzdHJ1Y3QgY2xrCQkqaXNwY2s7DQo+PiAtCXN0cnVjdCBpc2NfY2xrCQlpc2Nf Y2xrc1syXTsNCj4+IC0NCj4+IC0Jc3RydWN0IGRldmljZQkJKmRldjsNCj4+IC0Jc3RydWN0IHY0 bDJfZGV2aWNlCXY0bDJfZGV2Ow0KPj4gLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlCXZpZGVvX2RldjsN Cj4+IC0NCj4+IC0Jc3RydWN0IHZiMl9xdWV1ZQl2YjJfdmlkcTsNCj4+IC0Jc3BpbmxvY2tfdAkJ ZG1hX3F1ZXVlX2xvY2s7DQo+PiAtCXN0cnVjdCBsaXN0X2hlYWQJZG1hX3F1ZXVlOw0KPj4gLQlz dHJ1Y3QgaXNjX2J1ZmZlcgkqY3VyX2ZybTsNCj4+IC0JdW5zaWduZWQgaW50CQlzZXF1ZW5jZTsN Cj4+IC0JYm9vbAkJCXN0b3A7DQo+PiAtCXN0cnVjdCBjb21wbGV0aW9uCWNvbXA7DQo+PiAtDQo+ PiAtCXN0cnVjdCB2NGwyX2Zvcm1hdAlmbXQ7DQo+PiAtCXN0cnVjdCBpc2NfZm9ybWF0CSoqdXNl cl9mb3JtYXRzOw0KPj4gLQl1bnNpZ25lZCBpbnQJCW51bV91c2VyX2Zvcm1hdHM7DQo+PiAtDQo+ PiAtCXN0cnVjdCBmbXRfY29uZmlnCWNvbmZpZzsNCj4+IC0Jc3RydWN0IGZtdF9jb25maWcJdHJ5 X2NvbmZpZzsNCj4+IC0NCj4+IC0Jc3RydWN0IGlzY19jdHJscwljdHJsczsNCj4+IC0Jc3RydWN0 IHY0bDJfY3RybAkqZG9fd2JfY3RybDsNCj4+IC0Jc3RydWN0IHdvcmtfc3RydWN0CWF3Yl93b3Jr Ow0KPj4gLQ0KPj4gLQlzdHJ1Y3QgbXV0ZXgJCWxvY2s7DQo+PiAtCXNwaW5sb2NrX3QJCWF3Yl9s b2NrOw0KPj4gLQ0KPj4gLQlzdHJ1Y3QgcmVnbWFwX2ZpZWxkCSpwaXBlbGluZVtJU0NfUElQRV9M SU5FX05PREVfTlVNXTsNCj4+IC0NCj4+IC0Jc3RydWN0IGlzY19zdWJkZXZfZW50aXR5CSpjdXJy ZW50X3N1YmRldjsNCj4+IC0Jc3RydWN0IGxpc3RfaGVhZAkJc3ViZGV2X2VudGl0aWVzOw0KPj4g LX07DQo+PiAtDQo+PiAtLyogVGhpcyBpcyBhIGxpc3Qgb2YgdGhlIGZvcm1hdHMgdGhhdCB0aGUg SVNDIGNhbiAqb3V0cHV0KiAqLw0KPj4gLXN0YXRpYyBzdHJ1Y3QgaXNjX2Zvcm1hdCBjb250cm9s bGVyX2Zvcm1hdHNbXSA9IHsNCj4+IC0Jew0KPj4gLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRf QVJHQjQ0NCwNCj4+IC0JfSwNCj4+IC0Jew0KPj4gLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRf QVJHQjU1NSwNCj4+IC0JfSwNCj4+IC0Jew0KPj4gLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRf UkdCNTY1LA0KPj4gLQl9LA0KPj4gLQl7DQo+PiAtCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9B QkdSMzIsDQo+PiAtCX0sDQo+PiAtCXsNCj4+IC0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1hC R1IzMiwNCj4+IC0JfSwNCj4+IC0Jew0KPj4gLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVW NDIwLA0KPj4gLQl9LA0KPj4gLQl7DQo+PiAtCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVlW LA0KPj4gLQl9LA0KPj4gLQl7DQo+PiAtCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVY0MjJQ LA0KPj4gLQl9LA0KPj4gLQl7DQo+PiAtCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9HUkVZLA0K Pj4gLQl9LA0KPj4gLX07DQo+PiAtDQo+PiAtLyogVGhpcyBpcyBhIGxpc3Qgb2YgZm9ybWF0cyB0 aGF0IHRoZSBJU0MgY2FuIHJlY2VpdmUgYXMgKmlucHV0KiAqLw0KPj4gLXN0YXRpYyBzdHJ1Y3Qg aXNjX2Zvcm1hdCBmb3JtYXRzX2xpc3RbXSA9IHsNCj4+IC0Jew0KPj4gLQkJLmZvdXJjYwkJPSBW NEwyX1BJWF9GTVRfU0JHR1I4LA0KPj4gLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0JH R1I4XzFYOCwNCj4+IC0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0K Pj4gLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19CR0JHLA0KPj4gLQl9LA0KPj4gLQl7DQo+ PiAtCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR0JSRzgsDQo+PiAtCQkubWJ1c19jb2RlCT0g TUVESUFfQlVTX0ZNVF9TR0JSRzhfMVg4LA0KPj4gLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVf Q0ZHMF9CUFNfRUlHSFQsDQo+PiAtCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX0dCR0IsDQo+ PiAtCX0sDQo+PiAtCXsNCj4+IC0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NHUkJHOCwNCj4+ IC0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHOF8xWDgsDQo+PiAtCQkucGZlX2Nm ZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCj4+IC0JCS5jZmFfYmF5Y2ZnCT0gSVND X0JBWV9DRkdfR1JHUiwNCj4+IC0JfSwNCj4+IC0Jew0KPj4gLQkJLmZvdXJjYwkJPSBWNEwyX1BJ WF9GTVRfU1JHR0I4LA0KPj4gLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU1JHR0I4XzFY OCwNCj4+IC0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KPj4gLQkJ LmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JHLA0KPj4gLQl9LA0KPj4gLQl7DQo+PiAtCQku Zm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEwLA0KPj4gLQkJLm1idXNfY29kZQk9IE1FRElB X0JVU19GTVRfU0JHR1IxMF8xWDEwLA0KPj4gLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZH MF9CUFNfVEVOLA0KPj4gLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JHLA0KPj4gLQl9 LA0KPj4gLQl7DQo+PiAtCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR0JSRzEwLA0KPj4gLQkJ Lm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dCUkcxMF8xWDEwLA0KPj4gLQkJLnBmZV9jZmcw X2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVEVOLA0KPj4gLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZ X0NGR19HQkdCLA0KPj4gLQl9LA0KPj4gLQl7DQo+PiAtCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZN VF9TR1JCRzEwLA0KPj4gLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dSQkcxMF8xWDEw LA0KPj4gLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVEVOLA0KPj4gLQkJLmNm YV9iYXljZmcJPSBJU0NfQkFZX0NGR19HUkdSLA0KPj4gLQl9LA0KPj4gLQl7DQo+PiAtCQkuZm91 cmNjCQk9IFY0TDJfUElYX0ZNVF9TUkdHQjEwLA0KPj4gLQkJLm1idXNfY29kZQk9IE1FRElBX0JV U19GTVRfU1JHR0IxMF8xWDEwLA0KPj4gLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9C UFNfVEVOLA0KPj4gLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JHLA0KPj4gLQl9LA0K Pj4gLQl7DQo+PiAtCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEyLA0KPj4gLQkJLm1i dXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0JHR1IxMl8xWDEyLA0KPj4gLQkJLnBmZV9jZmcwX2Jw cwk9IElTQ19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KPj4gLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZ X0NGR19CR0JHLA0KPj4gLQl9LA0KPj4gLQl7DQo+PiAtCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZN VF9TR0JSRzEyLA0KPj4gLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dCUkcxMl8xWDEy LA0KPj4gLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KPj4gLQkJ LmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HQkdCLA0KPj4gLQl9LA0KPj4gLQl7DQo+PiAtCQku Zm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR1JCRzEyLA0KPj4gLQkJLm1idXNfY29kZQk9IE1FRElB X0JVU19GTVRfU0dSQkcxMl8xWDEyLA0KPj4gLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZH MF9CUFNfVFdFTFZFLA0KPj4gLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HUkdSLA0KPj4g LQl9LA0KPj4gLQl7DQo+PiAtCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TUkdHQjEyLA0KPj4g LQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEyLA0KPj4gLQkJLnBmZV9j ZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KPj4gLQkJLmNmYV9iYXljZmcJPSBJ U0NfQkFZX0NGR19SR1JHLA0KPj4gLQl9LA0KPj4gLQl7DQo+PiAtCQkuZm91cmNjCQk9IFY0TDJf UElYX0ZNVF9HUkVZLA0KPj4gLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfWThfMVg4LA0K Pj4gLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQo+PiAtCX0sDQo+ PiAtCXsNCj4+IC0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1lVWVYsDQo+PiAtCQkubWJ1c19j b2RlCT0gTUVESUFfQlVTX0ZNVF9ZVVlWOF8yWDgsDQo+PiAtCQkucGZlX2NmZzBfYnBzCT0gSVND X1BGRV9DRkcwX0JQU19FSUdIVCwNCj4+IC0JfSwNCj4+IC0Jew0KPj4gLQkJLmZvdXJjYwkJPSBW NEwyX1BJWF9GTVRfUkdCNTY1LA0KPj4gLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfUkdC NTY1XzJYOF9MRSwNCj4+IC0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hU LA0KPj4gLQl9LA0KPj4gLX07DQo+PiAtDQo+PiAtI2RlZmluZSBHQU1NQV9NQVgJMg0KPj4gLSNk ZWZpbmUgR0FNTUFfRU5UUklFUwk2NA0KPj4gLQ0KPj4gLS8qIEdhbW1hIHRhYmxlIHdpdGggZ2Ft bWEgMS8yLjIgKi8NCj4+IC1zdGF0aWMgY29uc3QgdTMyIGlzY19nYW1tYV90YWJsZVtHQU1NQV9N QVggKyAxXVtHQU1NQV9FTlRSSUVTXSA9IHsNCj4+IC0JLyogMCAtLT4gZ2FtbWEgMS8xLjggKi8N Cj4+IC0JeyAgICAgIDB4NjUsICAweDY2MDAyRiwgIDB4OTUwMDI1LCAgMHhCQjAwMjAsICAweERC MDAxRCwgIDB4RjgwMDFBLA0KPj4gLQkgIDB4MTEzMDAxOCwgMHgxMkIwMDE3LCAweDE0MjAwMTYs IDB4MTU4MDAxNCwgMHgxNkQwMDEzLCAweDE4MTAwMTIsDQo+PiAtCSAgMHgxOTQwMDEyLCAweDFB NjAwMTIsIDB4MUI4MDAxMSwgMHgxQzkwMDEwLCAweDFEQTAwMTAsIDB4MUVBMDAwRiwNCj4+IC0J ICAweDFGQTAwMEYsIDB4MjA5MDAwRiwgMHgyMTgwMDBGLCAweDIyNzAwMEUsIDB4MjM1MDAwRSwg MHgyNDMwMDBFLA0KPj4gLQkgIDB4MjUxMDAwRSwgMHgyNUYwMDBELCAweDI2QzAwMEQsIDB4Mjc5 MDAwRCwgMHgyODYwMDBELCAweDI5MzAwMEMsDQo+PiAtCSAgMHgyQTAwMDBDLCAweDJBQzAwMEMs IDB4MkI4MDAwQywgMHgyQzQwMDBDLCAweDJEMDAwMEIsIDB4MkRDMDAwQiwNCj4+IC0JICAweDJF NzAwMEIsIDB4MkYzMDAwQiwgMHgyRkUwMDBCLCAweDMwOTAwMEIsIDB4MzE0MDAwQiwgMHgzMUYw MDBBLA0KPj4gLQkgIDB4MzJBMDAwQSwgMHgzMzQwMDBCLCAweDMzRjAwMEEsIDB4MzQ5MDAwQSwg MHgzNTQwMDBBLCAweDM1RTAwMEEsDQo+PiAtCSAgMHgzNjgwMDBBLCAweDM3MjAwMEEsIDB4MzdD MDAwQSwgMHgzODYwMDBBLCAweDM5MDAwMDksIDB4Mzk5MDAwQSwNCj4+IC0JICAweDNBMzAwMDks IDB4M0FEMDAwOSwgMHgzQjYwMDA5LCAweDNCRjAwMEEsIDB4M0M5MDAwOSwgMHgzRDIwMDA5LA0K Pj4gLQkgIDB4M0RCMDAwOSwgMHgzRTQwMDA5LCAweDNFRDAwMDksIDB4M0Y2MDAwOSB9LA0KPj4g LQ0KPj4gLQkvKiAxIC0tPiBnYW1tYSAxLzIgKi8NCj4+IC0JeyAgICAgIDB4N0YsICAweDgwMDAz NCwgIDB4QjUwMDI4LCAgMHhERTAwMjEsIDB4MTAwMDAxRSwgMHgxMUUwMDFCLA0KPj4gLQkgIDB4 MTM5MDAxOSwgMHgxNTIwMDE3LCAweDE2QTAwMTUsIDB4MTgwMDAxNCwgMHgxOTQwMDE0LCAweDFB ODAwMTMsDQo+PiAtCSAgMHgxQkIwMDEyLCAweDFDRDAwMTEsIDB4MURGMDAxMCwgMHgxRUYwMDEw LCAweDIwMDAwMEYsIDB4MjBGMDAwRiwNCj4+IC0JICAweDIxRjAwMEUsIDB4MjJEMDAwRiwgMHgy M0MwMDBFLCAweDI0QTAwMEUsIDB4MjU4MDAwRCwgMHgyNjUwMDBELA0KPj4gLQkgIDB4MjczMDAw QywgMHgyN0YwMDBELCAweDI4QzAwMEMsIDB4Mjk5MDAwQywgMHgyQTUwMDBDLCAweDJCMTAwMEIs DQo+PiAtCSAgMHgyQkMwMDBDLCAweDJDODAwMEIsIDB4MkQzMDAwQywgMHgyREYwMDBCLCAweDJF QTAwMEEsIDB4MkY1MDAwQSwNCj4+IC0JICAweDJGRjAwMEIsIDB4MzBBMDAwQSwgMHgzMTQwMDBC LCAweDMxRjAwMEEsIDB4MzI5MDAwQSwgMHgzMzMwMDBBLA0KPj4gLQkgIDB4MzNEMDAwOSwgMHgz NDcwMDA5LCAweDM1MDAwMEEsIDB4MzVBMDAwOSwgMHgzNjMwMDBBLCAweDM2RDAwMDksDQo+PiAt CSAgMHgzNzYwMDA5LCAweDM3RjAwMDksIDB4Mzg4MDAwOSwgMHgzOTEwMDA5LCAweDM5QTAwMDks IDB4M0EzMDAwOSwNCj4+IC0JICAweDNBQzAwMDgsIDB4M0I0MDAwOSwgMHgzQkQwMDA4LCAweDND NjAwMDgsIDB4M0NFMDAwOCwgMHgzRDYwMDA5LA0KPj4gLQkgIDB4M0RGMDAwOCwgMHgzRTcwMDA4 LCAweDNFRjAwMDgsIDB4M0Y3MDAwOCB9LA0KPj4gLQ0KPj4gLQkvKiAyIC0tPiBnYW1tYSAxLzIu MiAqLw0KPj4gLQl7ICAgICAgMHg5OSwgIDB4OUIwMDM4LCAgMHhENDAwMkEsICAweEZGMDAyMywg MHgxMjIwMDFGLCAweDE0MTAwMUIsDQo+PiAtCSAgMHgxNUQwMDE5LCAweDE3NjAwMTcsIDB4MThF MDAxNSwgMHgxQTMwMDE1LCAweDFCODAwMTMsIDB4MUNDMDAxMiwNCj4+IC0JICAweDFERTAwMTEs IDB4MUYwMDAxMCwgMHgyMDEwMDEwLCAweDIxMTAwMTAsIDB4MjIxMDAwRiwgMHgyMzAwMDBGLA0K Pj4gLQkgIDB4MjNGMDAwRSwgMHgyNEQwMDBFLCAweDI1QjAwMEQsIDB4MjY5MDAwQywgMHgyNzYw MDBDLCAweDI4MzAwMEMsDQo+PiAtCSAgMHgyOEYwMDBDLCAweDI5QjAwMEMsIDB4MkE3MDAwQywg MHgyQjMwMDBCLCAweDJCRjAwMEIsIDB4MkNBMDAwQiwNCj4+IC0JICAweDJENTAwMEIsIDB4MkUw MDAwQSwgMHgyRUIwMDBBLCAweDJGNTAwMEEsIDB4MkZGMDAwQSwgMHgzMEEwMDBBLA0KPj4gLQkg IDB4MzE0MDAwOSwgMHgzMUUwMDA5LCAweDMyNzAwMEEsIDB4MzMxMDAwOSwgMHgzM0EwMDA5LCAw eDM0NDAwMDksDQo+PiAtCSAgMHgzNEQwMDA5LCAweDM1NjAwMDksIDB4MzVGMDAwOSwgMHgzNjgw MDA4LCAweDM3MTAwMDgsIDB4Mzc5MDAwOSwNCj4+IC0JICAweDM4MjAwMDgsIDB4MzhBMDAwOCwg MHgzOTMwMDA4LCAweDM5QjAwMDgsIDB4M0EzMDAwOCwgMHgzQUIwMDA4LA0KPj4gLQkgIDB4M0Iz MDAwOCwgMHgzQkIwMDA4LCAweDNDMzAwMDgsIDB4M0NCMDAwNywgMHgzRDIwMDA4LCAweDNEQTAw MDcsDQo+PiAtCSAgMHgzRTIwMDA3LCAweDNFOTAwMDcsIDB4M0YwMDAwOCwgMHgzRjgwMDA3IH0s DQo+PiAtfTsNCj4+IC0NCj4+IC0jZGVmaW5lIElTQ19JU19GT1JNQVRfUkFXKG1idXNfY29kZSkg XA0KPj4gLQkoKChtYnVzX2NvZGUpICYgMHhmMDAwKSA9PSAweDMwMDApDQo+PiAtDQo+PiAtc3Rh dGljIHVuc2lnbmVkIGludCBkZWJ1ZzsNCj4+IC1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0 NCk7DQo+PiAtTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIGxldmVsICgwLTIpIik7DQo+ PiAtDQo+PiAtc3RhdGljIHVuc2lnbmVkIGludCBzZW5zb3JfcHJlZmVycmVkID0gMTsNCj4+IC1t b2R1bGVfcGFyYW0oc2Vuc29yX3ByZWZlcnJlZCwgdWludCwgMDY0NCk7DQo+PiAtTU9EVUxFX1BB Uk1fREVTQyhzZW5zb3JfcHJlZmVycmVkLA0KPj4gLQkJICJTZW5zb3IgaXMgcHJlZmVycmVkIHRv IG91dHB1dCB0aGUgc3BlY2lmaWVkIGZvcm1hdCAoMS1vbiAwLW9mZiksIGRlZmF1bHQgMSIpOw0K Pj4gLQ0KPj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBpc2NfdXBkYXRlX2F3Yl9jdHJscyhzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjKQ0KPj4gLXsNCj4+IC0Jc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAm aXNjLT5jdHJsczsNCj4+IC0NCj4+IC0JcmVnbWFwX3dyaXRlKGlzYy0+cmVnbWFwLCBJU0NfV0Jf T19SR1IsDQo+PiAtCQkgICAgIChJU0NfV0JfT19aRVJPX1ZBTCAtIChjdHJscy0+b2Zmc2V0W0lT Q19ISVNfQ0ZHX01PREVfUl0pKSB8DQo+PiAtCQkgICAgICgoSVNDX1dCX09fWkVST19WQUwgLSBj dHJscy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVfR1JdKSA8PCAxNikpOw0KPj4gLQlyZWdtYXBf d3JpdGUoaXNjLT5yZWdtYXAsIElTQ19XQl9PX0JHQiwNCj4+IC0JCSAgICAgKElTQ19XQl9PX1pF Uk9fVkFMIC0gKGN0cmxzLT5vZmZzZXRbSVNDX0hJU19DRkdfTU9ERV9CXSkpIHwNCj4+IC0JCSAg ICAgKChJU0NfV0JfT19aRVJPX1ZBTCAtIGN0cmxzLT5vZmZzZXRbSVNDX0hJU19DRkdfTU9ERV9H Ql0pIDw8IDE2KSk7DQo+PiAtCXJlZ21hcF93cml0ZShpc2MtPnJlZ21hcCwgSVNDX1dCX0dfUkdS LA0KPj4gLQkJICAgICBjdHJscy0+Z2FpbltJU0NfSElTX0NGR19NT0RFX1JdIHwNCj4+IC0JCSAg ICAgKGN0cmxzLT5nYWluW0lTQ19ISVNfQ0ZHX01PREVfR1JdIDw8IDE2KSk7DQo+PiAtCXJlZ21h cF93cml0ZShpc2MtPnJlZ21hcCwgSVNDX1dCX0dfQkdCLA0KPj4gLQkJICAgICBjdHJscy0+Z2Fp bltJU0NfSElTX0NGR19NT0RFX0JdIHwNCj4+IC0JCSAgICAgKGN0cmxzLT5nYWluW0lTQ19ISVNf Q0ZHX01PREVfR0JdIDw8IDE2KSk7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyBpbmxpbmUgdm9p ZCBpc2NfcmVzZXRfYXdiX2N0cmxzKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQo+PiAtew0KPj4g LQlpbnQgYzsNCj4+IC0NCj4+IC0JZm9yIChjID0gSVNDX0hJU19DRkdfTU9ERV9HUjsgYyA8PSBJ U0NfSElTX0NGR19NT0RFX0I7IGMrKykgew0KPj4gLQkJLyogZ2FpbnMgaGF2ZSBhIGZpeGVkIHBv aW50IGF0IDkgZGVjaW1hbHMgKi8NCj4+IC0JCWlzYy0+Y3RybHMuZ2FpbltjXSA9IDEgPDwgOTsN Cj4+IC0JCS8qIG9mZnNldHMgYXJlIGluIDIncyBjb21wbGVtZW50cywgdGhlIHZhbHVlDQo+PiAt CQkgKiB3aWxsIGJlIHN1YnN0cmFjdGVkIGZyb20gSVNDX1dCX09fWkVST19WQUwgdG8gb2J0YWlu DQo+PiAtCQkgKiAyJ3MgY29tcGxlbWVudCBvZiBhIHZhbHVlIGJldHdlZW4gMCBhbmQNCj4+IC0J CSAqIElTQ19XQl9PX1pFUk9fVkFMID4+IDENCj4+IC0JCSAqLw0KPj4gLQkJaXNjLT5jdHJscy5v ZmZzZXRbY10gPSBJU0NfV0JfT19aRVJPX1ZBTDsNCj4+IC0JfQ0KPj4gLX0NCj4+IC0NCj4+IC1z dGF0aWMgaW50IGlzY193YWl0X2Nsa19zdGFibGUoc3RydWN0IGNsa19odyAqaHcpDQo+PiAtew0K Pj4gLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KPj4gLQlzdHJ1 Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2NfY2xrLT5yZWdtYXA7DQo+PiAtCXVuc2lnbmVkIGxvbmcg dGltZW91dCA9IGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKDEwMDApOw0KPj4gLQl1bnNpZ25l ZCBpbnQgc3RhdHVzOw0KPj4gLQ0KPj4gLQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGlt ZW91dCkpIHsNCj4+IC0JCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NMS1NSLCAmc3RhdHVzKTsN Cj4+IC0JCWlmICghKHN0YXR1cyAmIElTQ19DTEtTUl9TSVApKQ0KPj4gLQkJCXJldHVybiAwOw0K Pj4gLQ0KPj4gLQkJdXNsZWVwX3JhbmdlKDEwLCAyNTApOw0KPj4gLQl9DQo+PiAtDQo+PiAtCXJl dHVybiAtRVRJTUVET1VUOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgaW50IGlzY19jbGtfcHJl cGFyZShzdHJ1Y3QgY2xrX2h3ICpodykNCj4+IC17DQo+PiAtCXN0cnVjdCBpc2NfY2xrICppc2Nf Y2xrID0gdG9faXNjX2Nsayhodyk7DQo+PiAtDQo+PiAtCWlmIChpc2NfY2xrLT5pZCA9PSBJU0Nf SVNQQ0spDQo+PiAtCQlwbV9ydW50aW1lX2dldF9zeW5jKGlzY19jbGstPmRldik7DQo+PiAtDQo+ PiAtCXJldHVybiBpc2Nfd2FpdF9jbGtfc3RhYmxlKGh3KTsNCj4+IC19DQo+PiAtDQo+PiAtc3Rh dGljIHZvaWQgaXNjX2Nsa191bnByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpDQo+PiAtew0KPj4g LQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KPj4gLQ0KPj4gLQlp c2Nfd2FpdF9jbGtfc3RhYmxlKGh3KTsNCj4+IC0NCj4+IC0JaWYgKGlzY19jbGstPmlkID09IElT Q19JU1BDSykNCj4+IC0JCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNjX2Nsay0+ZGV2KTsNCj4+IC19 DQo+PiAtDQo+PiAtc3RhdGljIGludCBpc2NfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykN Cj4+IC17DQo+PiAtCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQo+ PiAtCXUzMiBpZCA9IGlzY19jbGstPmlkOw0KPj4gLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBp c2NfY2xrLT5yZWdtYXA7DQo+PiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+PiAtCXVuc2lnbmVk IGludCBzdGF0dXM7DQo+PiAtDQo+PiAtCWRldl9kYmcoaXNjX2Nsay0+ZGV2LCAiSVNDIENMSzog JXMsIGRpdiA9ICVkLCBwYXJlbnQgaWQgPSAlZFxuIiwNCj4+IC0JCV9fZnVuY19fLCBpc2NfY2xr LT5kaXYsIGlzY19jbGstPnBhcmVudF9pZCk7DQo+PiAtDQo+PiAtCXNwaW5fbG9ja19pcnFzYXZl KCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQo+PiAtCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAs IElTQ19DTEtDRkcsDQo+PiAtCQkJICAgSVNDX0NMS0NGR19ESVZfTUFTSyhpZCkgfCBJU0NfQ0xL Q0ZHX1NFTF9NQVNLKGlkKSwNCj4+IC0JCQkgICAoaXNjX2Nsay0+ZGl2IDw8IElTQ19DTEtDRkdf RElWX1NISUZUKGlkKSkgfA0KPj4gLQkJCSAgIChpc2NfY2xrLT5wYXJlbnRfaWQgPDwgSVNDX0NM S0NGR19TRUxfU0hJRlQoaWQpKSk7DQo+PiAtDQo+PiAtCXJlZ21hcF93cml0ZShyZWdtYXAsIElT Q19DTEtFTiwgSVNDX0NMSyhpZCkpOw0KPj4gLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2Nf Y2xrLT5sb2NrLCBmbGFncyk7DQo+PiAtDQo+PiAtCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NM S1NSLCAmc3RhdHVzKTsNCj4+IC0JaWYgKHN0YXR1cyAmIElTQ19DTEsoaWQpKQ0KPj4gLQkJcmV0 dXJuIDA7DQo+PiAtCWVsc2UNCj4+IC0JCXJldHVybiAtRUlOVkFMOw0KPj4gLX0NCj4+IC0NCj4+ IC1zdGF0aWMgdm9pZCBpc2NfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpDQo+PiAtew0K Pj4gLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KPj4gLQl1MzIg aWQgPSBpc2NfY2xrLT5pZDsNCj4+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsNCj4+IC0NCj4+IC0J c3Bpbl9sb2NrX2lycXNhdmUoJmlzY19jbGstPmxvY2ssIGZsYWdzKTsNCj4+IC0JcmVnbWFwX3dy aXRlKGlzY19jbGstPnJlZ21hcCwgSVNDX0NMS0RJUywgSVNDX0NMSyhpZCkpOw0KPj4gLQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQo+PiAtfQ0KPj4gLQ0K Pj4gLXN0YXRpYyBpbnQgaXNjX2Nsa19pc19lbmFibGVkKHN0cnVjdCBjbGtfaHcgKmh3KQ0KPj4g LXsNCj4+IC0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCj4+IC0J dTMyIHN0YXR1czsNCj4+IC0NCj4+IC0JaWYgKGlzY19jbGstPmlkID09IElTQ19JU1BDSykNCj4+ IC0JCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNjX2Nsay0+ZGV2KTsNCj4+IC0NCj4+IC0JcmVnbWFw X3JlYWQoaXNjX2Nsay0+cmVnbWFwLCBJU0NfQ0xLU1IsICZzdGF0dXMpOw0KPj4gLQ0KPj4gLQlp ZiAoaXNjX2Nsay0+aWQgPT0gSVNDX0lTUENLKQ0KPj4gLQkJcG1fcnVudGltZV9wdXRfc3luYyhp c2NfY2xrLT5kZXYpOw0KPj4gLQ0KPj4gLQlyZXR1cm4gc3RhdHVzICYgSVNDX0NMSyhpc2NfY2xr LT5pZCkgPyAxIDogMDsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIHVuc2lnbmVkIGxvbmcNCj4+ IC1pc2NfY2xrX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHBh cmVudF9yYXRlKQ0KPj4gLXsNCj4+IC0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2Nf Y2xrKGh3KTsNCj4+IC0NCj4+IC0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHBhcmVudF9yYXRl LCBpc2NfY2xrLT5kaXYgKyAxKTsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIGludCBpc2NfY2xr X2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LA0KPj4gLQkJCQkgICBzdHJ1Y3QgY2xr X3JhdGVfcmVxdWVzdCAqcmVxKQ0KPj4gLXsNCj4+IC0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsg PSB0b19pc2NfY2xrKGh3KTsNCj4+IC0JbG9uZyBiZXN0X3JhdGUgPSAtRUlOVkFMOw0KPj4gLQlp bnQgYmVzdF9kaWZmID0gLTE7DQo+PiAtCXVuc2lnbmVkIGludCBpLCBkaXY7DQo+PiAtDQo+PiAt CWZvciAoaSA9IDA7IGkgPCBjbGtfaHdfZ2V0X251bV9wYXJlbnRzKGh3KTsgaSsrKSB7DQo+PiAt CQlzdHJ1Y3QgY2xrX2h3ICpwYXJlbnQ7DQo+PiAtCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRl Ow0KPj4gLQ0KPj4gLQkJcGFyZW50ID0gY2xrX2h3X2dldF9wYXJlbnRfYnlfaW5kZXgoaHcsIGkp Ow0KPj4gLQkJaWYgKCFwYXJlbnQpDQo+PiAtCQkJY29udGludWU7DQo+PiAtDQo+PiAtCQlwYXJl bnRfcmF0ZSA9IGNsa19od19nZXRfcmF0ZShwYXJlbnQpOw0KPj4gLQkJaWYgKCFwYXJlbnRfcmF0 ZSkNCj4+IC0JCQljb250aW51ZTsNCj4+IC0NCj4+IC0JCWZvciAoZGl2ID0gMTsgZGl2IDwgSVND X0NMS19NQVhfRElWICsgMjsgZGl2KyspIHsNCj4+IC0JCQl1bnNpZ25lZCBsb25nIHJhdGU7DQo+ PiAtCQkJaW50IGRpZmY7DQo+PiAtDQo+PiAtCQkJcmF0ZSA9IERJVl9ST1VORF9DTE9TRVNUKHBh cmVudF9yYXRlLCBkaXYpOw0KPj4gLQkJCWRpZmYgPSBhYnMocmVxLT5yYXRlIC0gcmF0ZSk7DQo+ PiAtDQo+PiAtCQkJaWYgKGJlc3RfZGlmZiA8IDAgfHwgYmVzdF9kaWZmID4gZGlmZikgew0KPj4g LQkJCQliZXN0X3JhdGUgPSByYXRlOw0KPj4gLQkJCQliZXN0X2RpZmYgPSBkaWZmOw0KPj4gLQkJ CQlyZXEtPmJlc3RfcGFyZW50X3JhdGUgPSBwYXJlbnRfcmF0ZTsNCj4+IC0JCQkJcmVxLT5iZXN0 X3BhcmVudF9odyA9IHBhcmVudDsNCj4+IC0JCQl9DQo+PiAtDQo+PiAtCQkJaWYgKCFiZXN0X2Rp ZmYgfHwgcmF0ZSA8IHJlcS0+cmF0ZSkNCj4+IC0JCQkJYnJlYWs7DQo+PiAtCQl9DQo+PiAtDQo+ PiAtCQlpZiAoIWJlc3RfZGlmZikNCj4+IC0JCQlicmVhazsNCj4+IC0JfQ0KPj4gLQ0KPj4gLQlk ZXZfZGJnKGlzY19jbGstPmRldiwNCj4+IC0JCSJJU0MgQ0xLOiAlcywgYmVzdF9yYXRlID0gJWxk LCBwYXJlbnQgY2xrOiAlcyBAICVsZFxuIiwNCj4+IC0JCV9fZnVuY19fLCBiZXN0X3JhdGUsDQo+ PiAtCQlfX2Nsa19nZXRfbmFtZSgocmVxLT5iZXN0X3BhcmVudF9odyktPmNsayksDQo+PiAtCQly ZXEtPmJlc3RfcGFyZW50X3JhdGUpOw0KPj4gLQ0KPj4gLQlpZiAoYmVzdF9yYXRlIDwgMCkNCj4+ IC0JCXJldHVybiBiZXN0X3JhdGU7DQo+PiAtDQo+PiAtCXJlcS0+cmF0ZSA9IGJlc3RfcmF0ZTsN Cj4+IC0NCj4+IC0JcmV0dXJuIDA7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyBpbnQgaXNjX2Ns a19zZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3LCB1OCBpbmRleCkNCj4+IC17DQo+PiAtCXN0 cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQo+PiAtDQo+PiAtCWlmIChp bmRleCA+PSBjbGtfaHdfZ2V0X251bV9wYXJlbnRzKGh3KSkNCj4+IC0JCXJldHVybiAtRUlOVkFM Ow0KPj4gLQ0KPj4gLQlpc2NfY2xrLT5wYXJlbnRfaWQgPSBpbmRleDsNCj4+IC0NCj4+IC0JcmV0 dXJuIDA7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyB1OCBpc2NfY2xrX2dldF9wYXJlbnQoc3Ry dWN0IGNsa19odyAqaHcpDQo+PiAtew0KPj4gLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRv X2lzY19jbGsoaHcpOw0KPj4gLQ0KPj4gLQlyZXR1cm4gaXNjX2Nsay0+cGFyZW50X2lkOw0KPj4g LX0NCj4+IC0NCj4+IC1zdGF0aWMgaW50IGlzY19jbGtfc2V0X3JhdGUoc3RydWN0IGNsa19odyAq aHcsDQo+PiAtCQkJICAgICB1bnNpZ25lZCBsb25nIHJhdGUsDQo+PiAtCQkJICAgICB1bnNpZ25l ZCBsb25nIHBhcmVudF9yYXRlKQ0KPj4gLXsNCj4+IC0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsg PSB0b19pc2NfY2xrKGh3KTsNCj4+IC0JdTMyIGRpdjsNCj4+IC0NCj4+IC0JaWYgKCFyYXRlKQ0K Pj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+PiAtDQo+PiAtCWRpdiA9IERJVl9ST1VORF9DTE9TRVNU KHBhcmVudF9yYXRlLCByYXRlKTsNCj4+IC0JaWYgKGRpdiA+IChJU0NfQ0xLX01BWF9ESVYgKyAx KSB8fCAhZGl2KQ0KPj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+PiAtDQo+PiAtCWlzY19jbGstPmRp diA9IGRpdiAtIDE7DQo+PiAtDQo+PiAtCXJldHVybiAwOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0 aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgaXNjX2Nsa19vcHMgPSB7DQo+PiAtCS5wcmVwYXJlCT0g aXNjX2Nsa19wcmVwYXJlLA0KPj4gLQkudW5wcmVwYXJlCT0gaXNjX2Nsa191bnByZXBhcmUsDQo+ PiAtCS5lbmFibGUJCT0gaXNjX2Nsa19lbmFibGUsDQo+PiAtCS5kaXNhYmxlCT0gaXNjX2Nsa19k aXNhYmxlLA0KPj4gLQkuaXNfZW5hYmxlZAk9IGlzY19jbGtfaXNfZW5hYmxlZCwNCj4+IC0JLnJl Y2FsY19yYXRlCT0gaXNjX2Nsa19yZWNhbGNfcmF0ZSwNCj4+IC0JLmRldGVybWluZV9yYXRlCT0g aXNjX2Nsa19kZXRlcm1pbmVfcmF0ZSwNCj4+IC0JLnNldF9wYXJlbnQJPSBpc2NfY2xrX3NldF9w YXJlbnQsDQo+PiAtCS5nZXRfcGFyZW50CT0gaXNjX2Nsa19nZXRfcGFyZW50LA0KPj4gLQkuc2V0 X3JhdGUJPSBpc2NfY2xrX3NldF9yYXRlLA0KPj4gLX07DQo+PiAtDQo+PiAtc3RhdGljIGludCBp c2NfY2xrX3JlZ2lzdGVyKHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHVuc2lnbmVkIGludCBpZCkN Cj4+IC17DQo+PiAtCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KPj4gLQlz dHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gaXNjLT5kZXYtPm9mX25vZGU7DQo+PiAtCXN0cnVjdCBp c2NfY2xrICppc2NfY2xrOw0KPj4gLQlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0Ow0KPj4gLQlj b25zdCBjaGFyICpjbGtfbmFtZSA9IG5wLT5uYW1lOw0KPj4gLQljb25zdCBjaGFyICpwYXJlbnRf bmFtZXNbM107DQo+PiAtCWludCBudW1fcGFyZW50czsNCj4+IC0NCj4+IC0JbnVtX3BhcmVudHMg PSBvZl9jbGtfZ2V0X3BhcmVudF9jb3VudChucCk7DQo+PiAtCWlmIChudW1fcGFyZW50cyA8IDEg fHwgbnVtX3BhcmVudHMgPiAzKQ0KPj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+PiAtDQo+PiAtCWlm IChudW1fcGFyZW50cyA+IDIgJiYgaWQgPT0gSVNDX0lTUENLKQ0KPj4gLQkJbnVtX3BhcmVudHMg PSAyOw0KPj4gLQ0KPj4gLQlvZl9jbGtfcGFyZW50X2ZpbGwobnAsIHBhcmVudF9uYW1lcywgbnVt X3BhcmVudHMpOw0KPj4gLQ0KPj4gLQlpZiAoaWQgPT0gSVNDX01DSykNCj4+IC0JCW9mX3Byb3Bl cnR5X3JlYWRfc3RyaW5nKG5wLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwgJmNsa19uYW1lKTsNCj4+ IC0JZWxzZQ0KPj4gLQkJY2xrX25hbWUgPSAiaXNjLWlzcGNrIjsNCj4+IC0NCj4+IC0JaW5pdC5w YXJlbnRfbmFtZXMJPSBwYXJlbnRfbmFtZXM7DQo+PiAtCWluaXQubnVtX3BhcmVudHMJPSBudW1f cGFyZW50czsNCj4+IC0JaW5pdC5uYW1lCQk9IGNsa19uYW1lOw0KPj4gLQlpbml0Lm9wcwkJPSAm aXNjX2Nsa19vcHM7DQo+PiAtCWluaXQuZmxhZ3MJCT0gQ0xLX1NFVF9SQVRFX0dBVEUgfCBDTEtf U0VUX1BBUkVOVF9HQVRFOw0KPj4gLQ0KPj4gLQlpc2NfY2xrID0gJmlzYy0+aXNjX2Nsa3NbaWRd Ow0KPj4gLQlpc2NfY2xrLT5ody5pbml0CT0gJmluaXQ7DQo+PiAtCWlzY19jbGstPnJlZ21hcAkJ PSByZWdtYXA7DQo+PiAtCWlzY19jbGstPmlkCQk9IGlkOw0KPj4gLQlpc2NfY2xrLT5kZXYJCT0g aXNjLT5kZXY7DQo+PiAtCXNwaW5fbG9ja19pbml0KCZpc2NfY2xrLT5sb2NrKTsNCj4+IC0NCj4+ IC0JaXNjX2Nsay0+Y2xrID0gY2xrX3JlZ2lzdGVyKGlzYy0+ZGV2LCAmaXNjX2Nsay0+aHcpOw0K Pj4gLQlpZiAoSVNfRVJSKGlzY19jbGstPmNsaykpIHsNCj4+IC0JCWRldl9lcnIoaXNjLT5kZXYs ICIlczogY2xvY2sgcmVnaXN0ZXIgZmFpbFxuIiwgY2xrX25hbWUpOw0KPj4gLQkJcmV0dXJuIFBU Ul9FUlIoaXNjX2Nsay0+Y2xrKTsNCj4+IC0JfSBlbHNlIGlmIChpZCA9PSBJU0NfTUNLKQ0KPj4g LQkJb2ZfY2xrX2FkZF9wcm92aWRlcihucCwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LCBpc2NfY2xr LT5jbGspOw0KPj4gLQ0KPj4gLQlyZXR1cm4gMDsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIGlu dCBpc2NfY2xrX2luaXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCj4+IC17DQo+PiAtCXVuc2ln bmVkIGludCBpOw0KPj4gLQlpbnQgcmV0Ow0KPj4gLQ0KPj4gLQlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShpc2MtPmlzY19jbGtzKTsgaSsrKQ0KPj4gLQkJaXNjLT5pc2NfY2xrc1tpXS5jbGsg PSBFUlJfUFRSKC1FSU5WQUwpOw0KPj4gLQ0KPj4gLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShpc2MtPmlzY19jbGtzKTsgaSsrKSB7DQo+PiAtCQlyZXQgPSBpc2NfY2xrX3JlZ2lzdGVyKGlz YywgaSk7DQo+PiAtCQlpZiAocmV0KQ0KPj4gLQkJCXJldHVybiByZXQ7DQo+PiAtCX0NCj4+IC0N Cj4+IC0JcmV0dXJuIDA7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyB2b2lkIGlzY19jbGtfY2xl YW51cChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KPj4gLXsNCj4+IC0JdW5zaWduZWQgaW50IGk7 DQo+PiAtDQo+PiAtCW9mX2Nsa19kZWxfcHJvdmlkZXIoaXNjLT5kZXYtPm9mX25vZGUpOw0KPj4g LQ0KPj4gLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpc2MtPmlzY19jbGtzKTsgaSsrKSB7 DQo+PiAtCQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9ICZpc2MtPmlzY19jbGtzW2ldOw0KPj4g LQ0KPj4gLQkJaWYgKCFJU19FUlIoaXNjX2Nsay0+Y2xrKSkNCj4+IC0JCQljbGtfdW5yZWdpc3Rl cihpc2NfY2xrLT5jbGspOw0KPj4gLQl9DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyBpbnQgaXNj X3F1ZXVlX3NldHVwKHN0cnVjdCB2YjJfcXVldWUgKnZxLA0KPj4gLQkJCSAgICB1bnNpZ25lZCBp bnQgKm5idWZmZXJzLCB1bnNpZ25lZCBpbnQgKm5wbGFuZXMsDQo+PiAtCQkJICAgIHVuc2lnbmVk IGludCBzaXplc1tdLCBzdHJ1Y3QgZGV2aWNlICphbGxvY19kZXZzW10pDQo+PiAtew0KPj4gLQlz dHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2cSk7DQo+PiAtCXVuc2ln bmVkIGludCBzaXplID0gaXNjLT5mbXQuZm10LnBpeC5zaXplaW1hZ2U7DQo+PiAtDQo+PiAtCWlm ICgqbnBsYW5lcykNCj4+IC0JCXJldHVybiBzaXplc1swXSA8IHNpemUgPyAtRUlOVkFMIDogMDsN Cj4+IC0NCj4+IC0JKm5wbGFuZXMgPSAxOw0KPj4gLQlzaXplc1swXSA9IHNpemU7DQo+PiAtDQo+ PiAtCXJldHVybiAwOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgaW50IGlzY19idWZmZXJfcHJl cGFyZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpDQo+PiAtew0KPj4gLQlzdHJ1Y3QgdmIyX3Y0bDJf YnVmZmVyICp2YnVmID0gdG9fdmIyX3Y0bDJfYnVmZmVyKHZiKTsNCj4+IC0Jc3RydWN0IGlzY19k ZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7DQo+PiAtCXVuc2ln bmVkIGxvbmcgc2l6ZSA9IGlzYy0+Zm10LmZtdC5waXguc2l6ZWltYWdlOw0KPj4gLQ0KPj4gLQlp ZiAodmIyX3BsYW5lX3NpemUodmIsIDApIDwgc2l6ZSkgew0KPj4gLQkJdjRsMl9lcnIoJmlzYy0+ djRsMl9kZXYsICJidWZmZXIgdG9vIHNtYWxsICglbHUgPCAlbHUpXG4iLA0KPj4gLQkJCSB2YjJf cGxhbmVfc2l6ZSh2YiwgMCksIHNpemUpOw0KPj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+PiAtCX0N Cj4+IC0NCj4+IC0JdmIyX3NldF9wbGFuZV9wYXlsb2FkKHZiLCAwLCBzaXplKTsNCj4+IC0NCj4+ IC0JdmJ1Zi0+ZmllbGQgPSBpc2MtPmZtdC5mbXQucGl4LmZpZWxkOw0KPj4gLQ0KPj4gLQlyZXR1 cm4gMDsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIHZvaWQgaXNjX3N0YXJ0X2RtYShzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjKQ0KPj4gLXsNCj4+IC0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNj LT5yZWdtYXA7DQo+PiAtCXUzMiBzaXplaW1hZ2UgPSBpc2MtPmZtdC5mbXQucGl4LnNpemVpbWFn ZTsNCj4+IC0JdTMyIGRjdHJsX2R2aWV3Ow0KPj4gLQlkbWFfYWRkcl90IGFkZHIwOw0KPj4gLQl1 MzIgaCwgdzsNCj4+IC0NCj4+IC0JaCA9IGlzYy0+Zm10LmZtdC5waXguaGVpZ2h0Ow0KPj4gLQl3 ID0gaXNjLT5mbXQuZm10LnBpeC53aWR0aDsNCj4+IC0NCj4+IC0JLyoNCj4+IC0JICogSW4gY2Fz ZSB0aGUgc2Vuc29yIGlzIG5vdCBSQVcsIGl0IHdpbGwgb3V0cHV0IGEgcGl4ZWwgKDEyLTE2IGJp dHMpDQo+PiAtCSAqIHdpdGggdHdvIHNhbXBsZXMgb24gdGhlIElTQyBEYXRhIGJ1cyAod2hpY2gg aXMgOC0xMikNCj4+IC0JICogSVNDIHdpbGwgY291bnQgZWFjaCBzYW1wbGUsIHNvLCB3ZSBuZWVk IHRvIG11bHRpcGx5IHRoZXNlIHZhbHVlcw0KPj4gLQkgKiBieSB0d28sIHRvIGdldCB0aGUgcmVh bCBudW1iZXIgb2Ygc2FtcGxlcyBmb3IgdGhlIHJlcXVpcmVkIHBpeGVscy4NCj4+IC0JICovDQo+ PiAtCWlmICghSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2Nv ZGUpKSB7DQo+PiAtCQloIDw8PSAxOw0KPj4gLQkJdyA8PD0gMTsNCj4+IC0JfQ0KPj4gLQ0KPj4g LQkvKg0KPj4gLQkgKiBXZSBsaW1pdCB0aGUgY29sdW1uL3JvdyBjb3VudCB0aGF0IHRoZSBJU0Mg d2lsbCBvdXRwdXQgYWNjb3JkaW5nDQo+PiAtCSAqIHRvIHRoZSBjb25maWd1cmVkIHJlc29sdXRp b24gdGhhdCB3ZSB3YW50Lg0KPj4gLQkgKiBUaGlzIHdpbGwgYXZvaWQgdGhlIHNpdHVhdGlvbiB3 aGVyZSB0aGUgc2Vuc29yIGlzIG1pc2NvbmZpZ3VyZWQsDQo+PiAtCSAqIHNlbmRpbmcgbW9yZSBk YXRhLCBhbmQgdGhlIElTQyB3aWxsIGp1c3QgdGFrZSBpdCBhbmQgRE1BIHRvIG1lbW9yeSwNCj4+ IC0JICogY2F1c2luZyBjb3JydXB0aW9uLg0KPj4gLQkgKi8NCj4+IC0JcmVnbWFwX3dyaXRlKHJl Z21hcCwgSVNDX1BGRV9DRkcxLA0KPj4gLQkJICAgICAoSVNDX1BGRV9DRkcxX0NPTE1JTigwKSAm IElTQ19QRkVfQ0ZHMV9DT0xNSU5fTUFTSykgfA0KPj4gLQkJICAgICAoSVNDX1BGRV9DRkcxX0NP TE1BWCh3IC0gMSkgJiBJU0NfUEZFX0NGRzFfQ09MTUFYX01BU0spKTsNCj4+IC0NCj4+IC0JcmVn bWFwX3dyaXRlKHJlZ21hcCwgSVNDX1BGRV9DRkcyLA0KPj4gLQkJICAgICAoSVNDX1BGRV9DRkcy X1JPV01JTigwKSAmIElTQ19QRkVfQ0ZHMl9ST1dNSU5fTUFTSykgfA0KPj4gLQkJICAgICAoSVND X1BGRV9DRkcyX1JPV01BWChoIC0gMSkgJiBJU0NfUEZFX0NGRzJfUk9XTUFYX01BU0spKTsNCj4+ IC0NCj4+IC0JcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgSVNDX1BGRV9DRkcwLA0KPj4gLQkJ CSAgIElTQ19QRkVfQ0ZHMF9DT0xFTiB8IElTQ19QRkVfQ0ZHMF9ST1dFTiwNCj4+IC0JCQkgICBJ U0NfUEZFX0NGRzBfQ09MRU4gfCBJU0NfUEZFX0NGRzBfUk9XRU4pOw0KPj4gLQ0KPj4gLQlhZGRy MCA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKCZpc2MtPmN1cl9mcm0tPnZiLnZiMl9i dWYsIDApOw0KPj4gLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMCwgYWRkcjApOw0KPj4g LQ0KPj4gLQlzd2l0Y2ggKGlzYy0+Y29uZmlnLmZvdXJjYykgew0KPj4gLQljYXNlIFY0TDJfUElY X0ZNVF9ZVVY0MjA6DQo+PiAtCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMSwgYWRkcjAg KyAoc2l6ZWltYWdlICogMikgLyAzKTsNCj4+IC0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19E QUQyLCBhZGRyMCArIChzaXplaW1hZ2UgKiA1KSAvIDYpOw0KPj4gLQkJYnJlYWs7DQo+PiAtCWNh c2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6DQo+PiAtCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0Nf REFEMSwgYWRkcjAgKyBzaXplaW1hZ2UgLyAyKTsNCj4+IC0JCXJlZ21hcF93cml0ZShyZWdtYXAs IElTQ19EQUQyLCBhZGRyMCArIChzaXplaW1hZ2UgKiAzKSAvIDQpOw0KPj4gLQkJYnJlYWs7DQo+ PiAtCWRlZmF1bHQ6DQo+PiAtCQlicmVhazsNCj4+IC0JfQ0KPj4gLQ0KPj4gLQlkY3RybF9kdmll dyA9IGlzYy0+Y29uZmlnLmRjdHJsX2R2aWV3Ow0KPj4gLQ0KPj4gLQlyZWdtYXBfd3JpdGUocmVn bWFwLCBJU0NfRENUUkwsIGRjdHJsX2R2aWV3IHwgSVNDX0RDVFJMX0lFX0lTKTsNCj4+IC0Jc3Bp bl9sb2NrKCZpc2MtPmF3Yl9sb2NrKTsNCj4+IC0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NU UkxFTiwgSVNDX0NUUkxfQ0FQVFVSRSk7DQo+PiAtCXNwaW5fdW5sb2NrKCZpc2MtPmF3Yl9sb2Nr KTsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIHZvaWQgaXNjX3NldF9waXBlbGluZShzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjLCB1MzIgcGlwZWxpbmUpDQo+PiAtew0KPj4gLQlzdHJ1Y3QgcmVnbWFw ICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCj4+IC0Jc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAm aXNjLT5jdHJsczsNCj4+IC0JdTMyIHZhbCwgYmF5X2NmZzsNCj4+IC0JY29uc3QgdTMyICpnYW1t YTsNCj4+IC0JdW5zaWduZWQgaW50IGk7DQo+PiAtDQo+PiAtCS8qIFdCLS0+Q0ZBLS0+Q0MtLT5H QU0tLT5DU0MtLT5DQkMtLT5TVUI0MjItLT5TVUI0MjAgKi8NCj4+IC0JZm9yIChpID0gMDsgaSA8 IElTQ19QSVBFX0xJTkVfTk9ERV9OVU07IGkrKykgew0KPj4gLQkJdmFsID0gcGlwZWxpbmUgJiBC SVQoaSkgPyAxIDogMDsNCj4+IC0JCXJlZ21hcF9maWVsZF93cml0ZShpc2MtPnBpcGVsaW5lW2ld LCB2YWwpOw0KPj4gLQl9DQo+PiAtDQo+PiAtCWlmICghcGlwZWxpbmUpDQo+PiAtCQlyZXR1cm47 DQo+PiAtDQo+PiAtCWJheV9jZmcgPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPmNmYV9iYXljZmc7 DQo+PiAtDQo+PiAtCWlmIChjdHJscy0+YXdiID09IElTQ19XQl9OT05FKQ0KPj4gLQkJaXNjX3Jl c2V0X2F3Yl9jdHJscyhpc2MpOw0KPj4gLQ0KPj4gLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0Nf V0JfQ0ZHLCBiYXlfY2ZnKTsNCj4+IC0JaXNjX3VwZGF0ZV9hd2JfY3RybHMoaXNjKTsNCj4+IC0N Cj4+IC0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NGQV9DRkcsIGJheV9jZmcgfCBJU0NfQ0ZB X0NGR19FSVRQT0wpOw0KPj4gLQ0KPj4gLQlnYW1tYSA9ICZpc2NfZ2FtbWFfdGFibGVbY3RybHMt PmdhbW1hX2luZGV4XVswXTsNCj4+IC0JcmVnbWFwX2J1bGtfd3JpdGUocmVnbWFwLCBJU0NfR0FN X0JFTlRSWSwgZ2FtbWEsIEdBTU1BX0VOVFJJRVMpOw0KPj4gLQlyZWdtYXBfYnVsa193cml0ZShy ZWdtYXAsIElTQ19HQU1fR0VOVFJZLCBnYW1tYSwgR0FNTUFfRU5UUklFUyk7DQo+PiAtCXJlZ21h cF9idWxrX3dyaXRlKHJlZ21hcCwgSVNDX0dBTV9SRU5UUlksIGdhbW1hLCBHQU1NQV9FTlRSSUVT KTsNCj4+IC0NCj4+IC0JLyogQ29udmVydCBSR0IgdG8gWVVWICovDQo+PiAtCXJlZ21hcF93cml0 ZShyZWdtYXAsIElTQ19DU0NfWVJfWUcsIDB4NDIgfCAoMHg4MSA8PCAxNikpOw0KPj4gLQlyZWdt YXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX1lCX09ZLCAweDE5IHwgKDB4MTAgPDwgMTYpKTsNCj4+ IC0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19DQlJfQ0JHLCAweEZEQSB8ICgweEZCNiA8 PCAxNikpOw0KPj4gLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX0NCQl9PQ0IsIDB4NzAg fCAoMHg4MCA8PCAxNikpOw0KPj4gLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX0NSUl9D UkcsIDB4NzAgfCAoMHhGQTIgPDwgMTYpKTsNCj4+IC0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVND X0NTQ19DUkJfT0NSLCAweEZFRSB8ICgweDgwIDw8IDE2KSk7DQo+PiAtDQo+PiAtCXJlZ21hcF93 cml0ZShyZWdtYXAsIElTQ19DQkNfQlJJR0hULCBjdHJscy0+YnJpZ2h0bmVzcyk7DQo+PiAtCXJl Z21hcF93cml0ZShyZWdtYXAsIElTQ19DQkNfQ09OVFJBU1QsIGN0cmxzLT5jb250cmFzdCk7DQo+ PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyBpbnQgaXNjX3VwZGF0ZV9wcm9maWxlKHN0cnVjdCBpc2Nf ZGV2aWNlICppc2MpDQo+PiAtew0KPj4gLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJl Z21hcDsNCj4+IC0JdTMyIHNyOw0KPj4gLQlpbnQgY291bnRlciA9IDEwMDsNCj4+IC0NCj4+IC0J cmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NUUkxFTiwgSVNDX0NUUkxfVVBQUk8pOw0KPj4gLQ0K Pj4gLQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19DVFJMU1IsICZzcik7DQo+PiAtCXdoaWxlICgo c3IgJiBJU0NfQ1RSTF9VUFBSTykgJiYgY291bnRlci0tKSB7DQo+PiAtCQl1c2xlZXBfcmFuZ2Uo MTAwMCwgMjAwMCk7DQo+PiAtCQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19DVFJMU1IsICZzcik7 DQo+PiAtCX0NCj4+IC0NCj4+IC0JaWYgKGNvdW50ZXIgPCAwKSB7DQo+PiAtCQl2NGwyX3dhcm4o JmlzYy0+djRsMl9kZXYsICJUaW1lIG91dCB0byB1cGRhdGUgcHJvZmlsZVxuIik7DQo+PiAtCQly ZXR1cm4gLUVUSU1FRE9VVDsNCj4+IC0JfQ0KPj4gLQ0KPj4gLQlyZXR1cm4gMDsNCj4+IC19DQo+ PiAtDQo+PiAtc3RhdGljIHZvaWQgaXNjX3NldF9oaXN0b2dyYW0oc3RydWN0IGlzY19kZXZpY2Ug KmlzYywgYm9vbCBlbmFibGUpDQo+PiAtew0KPj4gLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBp c2MtPnJlZ21hcDsNCj4+IC0Jc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsN Cj4+IC0NCj4+IC0JaWYgKGVuYWJsZSkgew0KPj4gLQkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVND X0hJU19DRkcsDQo+PiAtCQkJICAgICBJU0NfSElTX0NGR19NT0RFX0dSIHwNCj4+IC0JCQkgICAg IChpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPmNmYV9iYXljZmcNCj4+IC0JCQkJCTw8IElTQ19ISVNf Q0ZHX0JBWVNFTF9TSElGVCkgfA0KPj4gLQkJCQkJSVNDX0hJU19DRkdfUkFSKTsNCj4+IC0JCXJl Z21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNfQ1RSTCwgSVNDX0hJU19DVFJMX0VOKTsNCj4+IC0J CXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19JTlRFTiwgSVNDX0lOVF9ISVNET05FKTsNCj4+IC0J CWN0cmxzLT5oaXN0X2lkID0gSVNDX0hJU19DRkdfTU9ERV9HUjsNCj4+IC0JCWlzY191cGRhdGVf cHJvZmlsZShpc2MpOw0KPj4gLQkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NUUkxFTiwgSVND X0NUUkxfSElTUkVRKTsNCj4+IC0NCj4+IC0JCWN0cmxzLT5oaXN0X3N0YXQgPSBISVNUX0VOQUJM RUQ7DQo+PiAtCX0gZWxzZSB7DQo+PiAtCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSU5URElT LCBJU0NfSU5UX0hJU0RPTkUpOw0KPj4gLQkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0hJU19D VFJMLCBJU0NfSElTX0NUUkxfRElTKTsNCj4+IC0NCj4+IC0JCWN0cmxzLT5oaXN0X3N0YXQgPSBI SVNUX0RJU0FCTEVEOw0KPj4gLQl9DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyBpbnQgaXNjX2Nv bmZpZ3VyZShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KPj4gLXsNCj4+IC0Jc3RydWN0IHJlZ21h cCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQo+PiAtCXUzMiBwZmVfY2ZnMCwgcmxwX21vZGUsIGRj ZmcsIG1hc2ssIHBpcGVsaW5lOw0KPj4gLQlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgKnN1YmRl diA9IGlzYy0+Y3VycmVudF9zdWJkZXY7DQo+PiAtDQo+PiAtCXBmZV9jZmcwID0gaXNjLT5jb25m aWcuc2RfZm9ybWF0LT5wZmVfY2ZnMF9icHM7DQo+PiAtCXJscF9tb2RlID0gaXNjLT5jb25maWcu cmxwX2NmZ19tb2RlOw0KPj4gLQlwaXBlbGluZSA9IGlzYy0+Y29uZmlnLmJpdHNfcGlwZWxpbmU7 DQo+PiAtDQo+PiAtCWRjZmcgPSBpc2MtPmNvbmZpZy5kY2ZnX2ltb2RlIHwNCj4+IC0JCSAgICAg ICBJU0NfRENGR19ZTUJTSVpFX0JFQVRTOCB8IElTQ19EQ0ZHX0NNQlNJWkVfQkVBVFM4Ow0KPj4g LQ0KPj4gLQlwZmVfY2ZnMCAgfD0gc3ViZGV2LT5wZmVfY2ZnMCB8IElTQ19QRkVfQ0ZHMF9NT0RF X1BST0dSRVNTSVZFOw0KPj4gLQltYXNrID0gSVNDX1BGRV9DRkcwX0JQU19NQVNLIHwgSVNDX1BG RV9DRkcwX0hQT0xfTE9XIHwNCj4+IC0JICAgICAgIElTQ19QRkVfQ0ZHMF9WUE9MX0xPVyB8IElT Q19QRkVfQ0ZHMF9QUE9MX0xPVyB8DQo+PiAtCSAgICAgICBJU0NfUEZFX0NGRzBfTU9ERV9NQVNL IHwgSVNDX1BGRV9DRkcwX0NDSVJfQ1JDIHwNCj4+IC0JCSAgIElTQ19QRkVfQ0ZHMF9DQ0lSNjU2 Ow0KPj4gLQ0KPj4gLQlyZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBJU0NfUEZFX0NGRzAsIG1h c2ssIHBmZV9jZmcwKTsNCj4+IC0NCj4+IC0JcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgSVND X1JMUF9DRkcsIElTQ19STFBfQ0ZHX01PREVfTUFTSywNCj4+IC0JCQkgICBybHBfbW9kZSk7DQo+ PiAtDQo+PiAtCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQ0ZHLCBkY2ZnKTsNCj4+IC0NCj4+ IC0JLyogU2V0IHRoZSBwaXBlbGluZSAqLw0KPj4gLQlpc2Nfc2V0X3BpcGVsaW5lKGlzYywgcGlw ZWxpbmUpOw0KPj4gLQ0KPj4gLQkvKg0KPj4gLQkgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRlZCBo aXN0b2dyYW0gaXMgYXZhaWxhYmxlIGZvciBSQVcgUiwgQiwgR0IsIEdSDQo+PiAtCSAqIGNoYW5u ZWxzLiBXZSBuZWVkIHRvIGNoZWNrIGlmIHNlbnNvciBpcyBvdXRwdXR0aW5nIFJBVyBCQVlFUg0K Pj4gLQkgKi8NCj4+IC0JaWYgKGlzYy0+Y3RybHMuYXdiICYmDQo+PiAtCSAgICBJU0NfSVNfRk9S TUFUX1JBVyhpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpDQo+PiAtCQlpc2Nfc2V0 X2hpc3RvZ3JhbShpc2MsIHRydWUpOw0KPj4gLQllbHNlDQo+PiAtCQlpc2Nfc2V0X2hpc3RvZ3Jh bShpc2MsIGZhbHNlKTsNCj4+IC0NCj4+IC0JLyogVXBkYXRlIHByb2ZpbGUgKi8NCj4+IC0JcmV0 dXJuIGlzY191cGRhdGVfcHJvZmlsZShpc2MpOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgaW50 IGlzY19zdGFydF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBj b3VudCkNCj4+IC17DQo+PiAtCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2YjJfZ2V0X2Rydl9w cml2KHZxKTsNCj4+IC0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQo+PiAt CXN0cnVjdCBpc2NfYnVmZmVyICpidWY7DQo+PiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+PiAt CWludCByZXQ7DQo+PiAtDQo+PiAtCS8qIEVuYWJsZSBzdHJlYW0gb24gdGhlIHN1YiBkZXZpY2Ug Ki8NCj4+IC0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwg dmlkZW8sIHNfc3RyZWFtLCAxKTsNCj4+IC0JaWYgKHJldCAmJiByZXQgIT0gLUVOT0lPQ1RMQ01E KSB7DQo+PiAtCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgInN0cmVhbSBvbiBmYWlsZWQgaW4g c3ViZGV2ICVkXG4iLA0KPj4gLQkJCSByZXQpOw0KPj4gLQkJZ290byBlcnJfc3RhcnRfc3RyZWFt Ow0KPj4gLQl9DQo+PiAtDQo+PiAtCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNjLT5kZXYpOw0KPj4g LQ0KPj4gLQlyZXQgPSBpc2NfY29uZmlndXJlKGlzYyk7DQo+PiAtCWlmICh1bmxpa2VseShyZXQp KQ0KPj4gLQkJZ290byBlcnJfY29uZmlndXJlOw0KPj4gLQ0KPj4gLQkvKiBFbmFibGUgRE1BIGlu dGVycnVwdCAqLw0KPj4gLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSU5URU4sIElTQ19JTlRf RERPTkUpOw0KPj4gLQ0KPj4gLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5kbWFfcXVldWVfbG9j aywgZmxhZ3MpOw0KPj4gLQ0KPj4gLQlpc2MtPnNlcXVlbmNlID0gMDsNCj4+IC0JaXNjLT5zdG9w ID0gZmFsc2U7DQo+PiAtCXJlaW5pdF9jb21wbGV0aW9uKCZpc2MtPmNvbXApOw0KPj4gLQ0KPj4g LQlpc2MtPmN1cl9mcm0gPSBsaXN0X2ZpcnN0X2VudHJ5KCZpc2MtPmRtYV9xdWV1ZSwNCj4+IC0J CQkJCXN0cnVjdCBpc2NfYnVmZmVyLCBsaXN0KTsNCj4+IC0JbGlzdF9kZWwoJmlzYy0+Y3VyX2Zy bS0+bGlzdCk7DQo+PiAtDQo+PiAtCWlzY19zdGFydF9kbWEoaXNjKTsNCj4+IC0NCj4+IC0Jc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KPj4gLQ0K Pj4gLQkvKiBpZiB3ZSBzdHJlYW1pbmcgZnJvbSBSQVcsIHdlIGNhbiBkbyBvbmUtc2hvdCB3aGl0 ZSBiYWxhbmNlIGFkaiAqLw0KPj4gLQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT5jb25maWcu c2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KPj4gLQkJdjRsMl9jdHJsX2FjdGl2YXRlKGlzYy0+ZG9f d2JfY3RybCwgdHJ1ZSk7DQo+PiAtDQo+PiAtCXJldHVybiAwOw0KPj4gLQ0KPj4gLWVycl9jb25m aWd1cmU6DQo+PiAtCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNjLT5kZXYpOw0KPj4gLQ0KPj4gLQl2 NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCB2aWRlbywgc19zdHJlYW0s IDApOw0KPj4gLQ0KPj4gLWVycl9zdGFydF9zdHJlYW06DQo+PiAtCXNwaW5fbG9ja19pcnFzYXZl KCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQo+PiAtCWxpc3RfZm9yX2VhY2hfZW50cnko YnVmLCAmaXNjLT5kbWFfcXVldWUsIGxpc3QpDQo+PiAtCQl2YjJfYnVmZmVyX2RvbmUoJmJ1Zi0+ dmIudmIyX2J1ZiwgVkIyX0JVRl9TVEFURV9RVUVVRUQpOw0KPj4gLQlJTklUX0xJU1RfSEVBRCgm aXNjLT5kbWFfcXVldWUpOw0KPj4gLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2MtPmRtYV9x dWV1ZV9sb2NrLCBmbGFncyk7DQo+PiAtDQo+PiAtCXJldHVybiByZXQ7DQo+PiAtfQ0KPj4gLQ0K Pj4gLXN0YXRpYyB2b2lkIGlzY19zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkN Cj4+IC17DQo+PiAtCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2YjJfZ2V0X2Rydl9wcml2KHZx KTsNCj4+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsNCj4+IC0Jc3RydWN0IGlzY19idWZmZXIgKmJ1 ZjsNCj4+IC0JaW50IHJldDsNCj4+IC0NCj4+IC0JdjRsMl9jdHJsX2FjdGl2YXRlKGlzYy0+ZG9f d2JfY3RybCwgZmFsc2UpOw0KPj4gLQ0KPj4gLQlpc2MtPnN0b3AgPSB0cnVlOw0KPj4gLQ0KPj4g LQkvKiBXYWl0IHVudGlsIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWUgKi8NCj4+IC0JaWYg KGlzYy0+Y3VyX2ZybSAmJiAhd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpc2MtPmNvbXAs IDUgKiBIWikpDQo+PiAtCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwNCj4+IC0JCQkgIlRpbWVv dXQgd2FpdGluZyBmb3IgZW5kIG9mIHRoZSBjYXB0dXJlXG4iKTsNCj4+IC0NCj4+IC0JLyogRGlz YWJsZSBETUEgaW50ZXJydXB0ICovDQo+PiAtCXJlZ21hcF93cml0ZShpc2MtPnJlZ21hcCwgSVND X0lOVERJUywgSVNDX0lOVF9ERE9ORSk7DQo+PiAtDQo+PiAtCXBtX3J1bnRpbWVfcHV0X3N5bmMo aXNjLT5kZXYpOw0KPj4gLQ0KPj4gLQkvKiBEaXNhYmxlIHN0cmVhbSBvbiB0aGUgc3ViIGRldmlj ZSAqLw0KPj4gLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNk LCB2aWRlbywgc19zdHJlYW0sIDApOw0KPj4gLQlpZiAocmV0ICYmIHJldCAhPSAtRU5PSU9DVExD TUQpDQo+PiAtCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgInN0cmVhbSBvZmYgZmFpbGVkIGlu IHN1YmRldlxuIik7DQo+PiAtDQo+PiAtCS8qIFJlbGVhc2UgYWxsIGFjdGl2ZSBidWZmZXJzICov DQo+PiAtCXNwaW5fbG9ja19pcnFzYXZlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQo+ PiAtCWlmICh1bmxpa2VseShpc2MtPmN1cl9mcm0pKSB7DQo+PiAtCQl2YjJfYnVmZmVyX2RvbmUo JmlzYy0+Y3VyX2ZybS0+dmIudmIyX2J1ZiwNCj4+IC0JCQkJVkIyX0JVRl9TVEFURV9FUlJPUik7 DQo+PiAtCQlpc2MtPmN1cl9mcm0gPSBOVUxMOw0KPj4gLQl9DQo+PiAtCWxpc3RfZm9yX2VhY2hf ZW50cnkoYnVmLCAmaXNjLT5kbWFfcXVldWUsIGxpc3QpDQo+PiAtCQl2YjJfYnVmZmVyX2RvbmUo JmJ1Zi0+dmIudmIyX2J1ZiwgVkIyX0JVRl9TVEFURV9FUlJPUik7DQo+PiAtCUlOSVRfTElTVF9I RUFEKCZpc2MtPmRtYV9xdWV1ZSk7DQo+PiAtCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzYy0+ ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIHZvaWQgaXNj X2J1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpDQo+PiAtew0KPj4gLQlzdHJ1Y3Qg dmIyX3Y0bDJfYnVmZmVyICp2YnVmID0gdG9fdmIyX3Y0bDJfYnVmZmVyKHZiKTsNCj4+IC0Jc3Ry dWN0IGlzY19idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2YnVmLCBzdHJ1Y3QgaXNjX2J1ZmZl ciwgdmIpOw0KPj4gLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2 Yi0+dmIyX3F1ZXVlKTsNCj4+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsNCj4+IC0NCj4+IC0Jc3Bp bl9sb2NrX2lycXNhdmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCj4+IC0JaWYgKCFp c2MtPmN1cl9mcm0gJiYgbGlzdF9lbXB0eSgmaXNjLT5kbWFfcXVldWUpICYmDQo+PiAtCQl2YjJf aXNfc3RyZWFtaW5nKHZiLT52YjJfcXVldWUpKSB7DQo+PiAtCQlpc2MtPmN1cl9mcm0gPSBidWY7 DQo+PiAtCQlpc2Nfc3RhcnRfZG1hKGlzYyk7DQo+PiAtCX0gZWxzZQ0KPj4gLQkJbGlzdF9hZGRf dGFpbCgmYnVmLT5saXN0LCAmaXNjLT5kbWFfcXVldWUpOw0KPj4gLQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0 YXRpYyBzdHJ1Y3QgaXNjX2Zvcm1hdCAqZmluZF9mb3JtYXRfYnlfZm91cmNjKHN0cnVjdCBpc2Nf ZGV2aWNlICppc2MsDQo+PiAtCQkJCQkJIHVuc2lnbmVkIGludCBmb3VyY2MpDQo+PiAtew0KPj4g LQl1bnNpZ25lZCBpbnQgbnVtX2Zvcm1hdHMgPSBpc2MtPm51bV91c2VyX2Zvcm1hdHM7DQo+PiAt CXN0cnVjdCBpc2NfZm9ybWF0ICpmbXQ7DQo+PiAtCXVuc2lnbmVkIGludCBpOw0KPj4gLQ0KPj4g LQlmb3IgKGkgPSAwOyBpIDwgbnVtX2Zvcm1hdHM7IGkrKykgew0KPj4gLQkJZm10ID0gaXNjLT51 c2VyX2Zvcm1hdHNbaV07DQo+PiAtCQlpZiAoZm10LT5mb3VyY2MgPT0gZm91cmNjKQ0KPj4gLQkJ CXJldHVybiBmbXQ7DQo+PiAtCX0NCj4+IC0NCj4+IC0JcmV0dXJuIE5VTEw7DQo+PiAtfQ0KPj4g LQ0KPj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmIyX29wcyBpc2NfdmIyX29wcyA9IHsNCj4+IC0J LnF1ZXVlX3NldHVwCQk9IGlzY19xdWV1ZV9zZXR1cCwNCj4+IC0JLndhaXRfcHJlcGFyZQkJPSB2 YjJfb3BzX3dhaXRfcHJlcGFyZSwNCj4+IC0JLndhaXRfZmluaXNoCQk9IHZiMl9vcHNfd2FpdF9m aW5pc2gsDQo+PiAtCS5idWZfcHJlcGFyZQkJPSBpc2NfYnVmZmVyX3ByZXBhcmUsDQo+PiAtCS5z dGFydF9zdHJlYW1pbmcJPSBpc2Nfc3RhcnRfc3RyZWFtaW5nLA0KPj4gLQkuc3RvcF9zdHJlYW1p bmcJCT0gaXNjX3N0b3Bfc3RyZWFtaW5nLA0KPj4gLQkuYnVmX3F1ZXVlCQk9IGlzY19idWZmZXJf cXVldWUsDQo+PiAtfTsNCj4+IC0NCj4+IC1zdGF0aWMgaW50IGlzY19xdWVyeWNhcChzdHJ1Y3Qg ZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4+IC0JCQkgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAq Y2FwKQ0KPj4gLXsNCj4+IC0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEo ZmlsZSk7DQo+PiAtDQo+PiAtCXN0cnNjcHkoY2FwLT5kcml2ZXIsIEFUTUVMX0lTQ19OQU1FLCBz aXplb2YoY2FwLT5kcml2ZXIpKTsNCj4+IC0Jc3Ryc2NweShjYXAtPmNhcmQsICJBdG1lbCBJbWFn ZSBTZW5zb3IgQ29udHJvbGxlciIsIHNpemVvZihjYXAtPmNhcmQpKTsNCj4+IC0Jc25wcmludGYo Y2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pLA0KPj4gLQkJICJwbGF0Zm9ybTol cyIsIGlzYy0+djRsMl9kZXYubmFtZSk7DQo+PiAtDQo+PiAtCXJldHVybiAwOw0KPj4gLX0NCj4+ IC0NCj4+IC1zdGF0aWMgaW50IGlzY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxl LCB2b2lkICpwcml2LA0KPj4gLQkJCQkgc3RydWN0IHY0bDJfZm10ZGVzYyAqZikNCj4+IC17DQo+ PiAtCXUzMiBpbmRleCA9IGYtPmluZGV4Ow0KPj4gLQl1MzIgaSwgc3VwcG9ydGVkX2luZGV4Ow0K Pj4gLQ0KPj4gLQlpZiAoaW5kZXggPCBBUlJBWV9TSVpFKGNvbnRyb2xsZXJfZm9ybWF0cykpIHsN Cj4+IC0JCWYtPnBpeGVsZm9ybWF0ID0gY29udHJvbGxlcl9mb3JtYXRzW2luZGV4XS5mb3VyY2M7 DQo+PiAtCQlyZXR1cm4gMDsNCj4+IC0JfQ0KPj4gLQ0KPj4gLQlpbmRleCAtPSBBUlJBWV9TSVpF KGNvbnRyb2xsZXJfZm9ybWF0cyk7DQo+PiAtDQo+PiAtCWkgPSAwOw0KPj4gLQlzdXBwb3J0ZWRf aW5kZXggPSAwOw0KPj4gLQ0KPj4gLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmb3JtYXRz X2xpc3QpOyBpKyspIHsNCj4+IC0JCWlmICghSVNDX0lTX0ZPUk1BVF9SQVcoZm9ybWF0c19saXN0 W2ldLm1idXNfY29kZSkgfHwNCj4+IC0JCSAgICAhZm9ybWF0c19saXN0W2ldLnNkX3N1cHBvcnQp DQo+PiAtCQkJY29udGludWU7DQo+PiAtCQlpZiAoc3VwcG9ydGVkX2luZGV4ID09IGluZGV4KSB7 DQo+PiAtCQkJZi0+cGl4ZWxmb3JtYXQgPSBmb3JtYXRzX2xpc3RbaV0uZm91cmNjOw0KPj4gLQkJ CXJldHVybiAwOw0KPj4gLQkJfQ0KPj4gLQkJc3VwcG9ydGVkX2luZGV4Kys7DQo+PiAtCX0NCj4+ IC0NCj4+IC0JcmV0dXJuIC1FSU5WQUw7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyBpbnQgaXNj X2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQo+PiAtCQkJICAg ICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpDQo+PiAtew0KPj4gLQlzdHJ1Y3QgaXNjX2Rldmlj ZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCj4+IC0NCj4+IC0JKmZtdCA9IGlzYy0+Zm10 Ow0KPj4gLQ0KPj4gLQlyZXR1cm4gMDsNCj4+IC19DQo+PiAtDQo+PiAtLyoNCj4+IC0gKiBDaGVj a3MgdGhlIGN1cnJlbnQgY29uZmlndXJlZCBmb3JtYXQsIGlmIElTQyBjYW4gb3V0cHV0IGl0LA0K Pj4gLSAqIGNvbnNpZGVyaW5nIHdoaWNoIHR5cGUgb2YgZm9ybWF0IHRoZSBJU0MgcmVjZWl2ZXMg ZnJvbSB0aGUgc2Vuc29yDQo+PiAtICovDQo+PiAtc3RhdGljIGludCBpc2NfdHJ5X3ZhbGlkYXRl X2Zvcm1hdHMoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCj4+IC17DQo+PiAtCWludCByZXQ7DQo+ PiAtCWJvb2wgYmF5ZXIgPSBmYWxzZSwgeXV2ID0gZmFsc2UsIHJnYiA9IGZhbHNlLCBncmV5ID0g ZmFsc2U7DQo+PiAtDQo+PiAtCS8qIGFsbCBmb3JtYXRzIHN1cHBvcnRlZCBieSB0aGUgUkxQIG1v ZHVsZSBhcmUgT0sgKi8NCj4+IC0Jc3dpdGNoIChpc2MtPnRyeV9jb25maWcuZm91cmNjKSB7DQo+ PiAtCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSODoNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfU0dC Ukc4Og0KPj4gLQljYXNlIFY0TDJfUElYX0ZNVF9TR1JCRzg6DQo+PiAtCWNhc2UgVjRMMl9QSVhf Rk1UX1NSR0dCODoNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1IxMDoNCj4+IC0JY2FzZSBW NEwyX1BJWF9GTVRfU0dCUkcxMDoNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkcxMDoNCj4+ IC0JY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0IxMDoNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfU0JH R1IxMjoNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfU0dCUkcxMjoNCj4+IC0JY2FzZSBWNEwyX1BJ WF9GTVRfU0dSQkcxMjoNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0IxMjoNCj4+IC0JCXJl dCA9IDA7DQo+PiAtCQliYXllciA9IHRydWU7DQo+PiAtCQlicmVhazsNCj4+IC0NCj4+IC0JY2Fz ZSBWNEwyX1BJWF9GTVRfWVVWNDIwOg0KPj4gLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOg0K Pj4gLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOg0KPj4gLQkJcmV0ID0gMDsNCj4+IC0JCXl1diA9 IHRydWU7DQo+PiAtCQlicmVhazsNCj4+IC0NCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1 Og0KPj4gLQljYXNlIFY0TDJfUElYX0ZNVF9BQkdSMzI6DQo+PiAtCWNhc2UgVjRMMl9QSVhfRk1U X1hCR1IzMjoNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjQ0NDoNCj4+IC0JY2FzZSBWNEwy X1BJWF9GTVRfQVJHQjU1NToNCj4+IC0JCXJldCA9IDA7DQo+PiAtCQlyZ2IgPSB0cnVlOw0KPj4g LQkJYnJlYWs7DQo+PiAtCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6DQo+PiAtCQlyZXQgPSAwOw0K Pj4gLQkJZ3JleSA9IHRydWU7DQo+PiAtCQlicmVhazsNCj4+IC0JZGVmYXVsdDoNCj4+IC0JLyog YW55IG90aGVyIGRpZmZlcmVudCBmb3JtYXRzIGFyZSBub3Qgc3VwcG9ydGVkICovDQo+PiAtCQly ZXQgPSAtRUlOVkFMOw0KPj4gLQl9DQo+PiAtDQo+PiAtCS8qIHdlIGNhbm5vdCBvdXRwdXQgUkFX L0dyZXkgaWYgd2UgZG8gbm90IHJlY2VpdmUgUkFXICovDQo+PiAtCWlmICgoYmF5ZXIgfHwgZ3Jl eSkgJiYNCj4+IC0JICAgICFJU0NfSVNfRk9STUFUX1JBVyhpc2MtPnRyeV9jb25maWcuc2RfZm9y bWF0LT5tYnVzX2NvZGUpKQ0KPj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+PiAtDQo+PiAtCXY0bDJf ZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2RldiwNCj4+IC0JCSAiRm9ybWF0IHZhbGlkYXRpb24s IHJlcXVlc3RlZCByZ2I9JXUsIHl1dj0ldSwgZ3JleT0ldSwgYmF5ZXI9JXVcbiIsDQo+PiAtCQkg cmdiLCB5dXYsIGdyZXksIGJheWVyKTsNCj4+IC0NCj4+IC0JcmV0dXJuIHJldDsNCj4+IC19DQo+ PiAtDQo+PiAtLyoNCj4+IC0gKiBDb25maWd1cmVzIHRoZSBSTFAgYW5kIERNQSBtb2R1bGVzLCBk ZXBlbmRpbmcgb24gdGhlIG91dHB1dCBmb3JtYXQNCj4+IC0gKiBjb25maWd1cmVkIGZvciB0aGUg SVNDLg0KPj4gLSAqIElmIGRpcmVjdF9kdW1wID09IHRydWUsIGp1c3QgZHVtcCByYXcgZGF0YSA4 IGJpdHMuDQo+PiAtICovDQo+PiAtc3RhdGljIGludCBpc2NfdHJ5X2NvbmZpZ3VyZV9ybHBfZG1h KHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIGJvb2wgZGlyZWN0X2R1bXApDQo+PiAtew0KPj4gLQlp ZiAoZGlyZWN0X2R1bXApIHsNCj4+IC0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJ U0NfUkxQX0NGR19NT0RFX0RBVDg7DQo+PiAtCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9 IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDg7DQo+PiAtCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZp ZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KPj4gLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9 IDE2Ow0KPj4gLQkJcmV0dXJuIDA7DQo+PiAtCX0NCj4+IC0NCj4+IC0Jc3dpdGNoIChpc2MtPnRy eV9jb25maWcuZm91cmNjKSB7DQo+PiAtCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSODoNCj4+IC0J Y2FzZSBWNEwyX1BJWF9GTVRfU0dCUkc4Og0KPj4gLQljYXNlIFY0TDJfUElYX0ZNVF9TR1JCRzg6 DQo+PiAtCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCODoNCj4+IC0JCWlzYy0+dHJ5X2NvbmZpZy5y bHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0RBVDg7DQo+PiAtCQlpc2MtPnRyeV9jb25m aWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDg7DQo+PiAtCQlpc2MtPnRyeV9j b25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KPj4gLQkJaXNjLT50 cnlfY29uZmlnLmJwcCA9IDg7DQo+PiAtCQlicmVhazsNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRf U0JHR1IxMDoNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfU0dCUkcxMDoNCj4+IC0JY2FzZSBWNEwy X1BJWF9GTVRfU0dSQkcxMDoNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0IxMDoNCj4+IC0J CWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0RBVDEwOw0K Pj4gLQkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQx NjsNCj4+IC0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19Q QUNLRUQ7DQo+PiAtCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQo+PiAtCQlicmVhazsNCj4+ IC0JY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1IxMjoNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfU0dC UkcxMjoNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkcxMjoNCj4+IC0JY2FzZSBWNEwyX1BJ WF9GTVRfU1JHR0IxMjoNCj4+IC0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0Nf UkxQX0NGR19NT0RFX0RBVDEyOw0KPj4gLQkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJ U0NfRENGR19JTU9ERV9QQUNLRUQxNjsNCj4+IC0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmll dyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQo+PiAtCQlpc2MtPnRyeV9jb25maWcuYnBwID0g MTY7DQo+PiAtCQlicmVhazsNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1Og0KPj4gLQkJ aXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfUkdCNTY1Ow0K Pj4gLQkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQx NjsNCj4+IC0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19Q QUNLRUQ7DQo+PiAtCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQo+PiAtCQlicmVhazsNCj4+ IC0JY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjQ0NDoNCj4+IC0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBf Y2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0FSR0I0NDQ7DQo+PiAtCQlpc2MtPnRyeV9jb25m aWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0KPj4gLQkJaXNjLT50cnlf Y29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCj4+IC0JCWlzYy0+ dHJ5X2NvbmZpZy5icHAgPSAxNjsNCj4+IC0JCWJyZWFrOw0KPj4gLQljYXNlIFY0TDJfUElYX0ZN VF9BUkdCNTU1Og0KPj4gLQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBf Q0ZHX01PREVfQVJHQjU1NTsNCj4+IC0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVND X0RDRkdfSU1PREVfUEFDS0VEMTY7DQo+PiAtCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcg PSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KPj4gLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2 Ow0KPj4gLQkJYnJlYWs7DQo+PiAtCWNhc2UgVjRMMl9QSVhfRk1UX0FCR1IzMjoNCj4+IC0JY2Fz ZSBWNEwyX1BJWF9GTVRfWEJHUjMyOg0KPj4gLQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9k ZSA9IElTQ19STFBfQ0ZHX01PREVfQVJHQjMyOw0KPj4gLQkJaXNjLT50cnlfY29uZmlnLmRjZmdf aW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQzMjsNCj4+IC0JCWlzYy0+dHJ5X2NvbmZpZy5k Y3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQo+PiAtCQlpc2MtPnRyeV9jb25m aWcuYnBwID0gMzI7DQo+PiAtCQlicmVhazsNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIw Og0KPj4gLQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVf WVlDQzsNCj4+IC0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVf WUM0MjBQOw0KPj4gLQkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RW SUVXX1BMQU5BUjsNCj4+IC0JCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxMjsNCj4+IC0JCWJyZWFr Ow0KPj4gLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOg0KPj4gLQkJaXNjLT50cnlfY29uZmln LnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfWVlDQzsNCj4+IC0JCWlzYy0+dHJ5X2Nv bmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfWUM0MjJQOw0KPj4gLQkJaXNjLT50cnlf Y29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BMQU5BUjsNCj4+IC0JCWlzYy0+ dHJ5X2NvbmZpZy5icHAgPSAxNjsNCj4+IC0JCWJyZWFrOw0KPj4gLQljYXNlIFY0TDJfUElYX0ZN VF9ZVVlWOg0KPj4gLQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZH X01PREVfWVlDQzsNCj4+IC0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdf SU1PREVfUEFDS0VEMzI7DQo+PiAtCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0Nf RENUUkxfRFZJRVdfUEFDS0VEOw0KPj4gLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KPj4g LQkJYnJlYWs7DQo+PiAtCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6DQo+PiAtCQlpc2MtPnRyeV9j b25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVRZODsNCj4+IC0JCWlzYy0+ dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEODsNCj4+IC0JCWlz Yy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQo+PiAt CQlpc2MtPnRyeV9jb25maWcuYnBwID0gODsNCj4+IC0JCWJyZWFrOw0KPj4gLQlkZWZhdWx0Og0K Pj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+PiAtCX0NCj4+IC0JcmV0dXJuIDA7DQo+PiAtfQ0KPj4g LQ0KPj4gLS8qDQo+PiAtICogQ29uZmlndXJpbmcgcGlwZWxpbmUgbW9kdWxlcywgZGVwZW5kaW5n IG9uIHdoaWNoIGZvcm1hdCB0aGUgSVNDIG91dHB1dHMNCj4+IC0gKiBhbmQgY29uc2lkZXJpbmcg d2hpY2ggZm9ybWF0IGl0IGhhcyBhcyBpbnB1dCBmcm9tIHRoZSBzZW5zb3IuDQo+PiAtICovDQo+ PiAtc3RhdGljIGludCBpc2NfdHJ5X2NvbmZpZ3VyZV9waXBlbGluZShzdHJ1Y3QgaXNjX2Rldmlj ZSAqaXNjKQ0KPj4gLXsNCj4+IC0Jc3dpdGNoIChpc2MtPnRyeV9jb25maWcuZm91cmNjKSB7DQo+ PiAtCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfQVJH QjU1NToNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjQ0NDoNCj4+IC0JY2FzZSBWNEwyX1BJ WF9GTVRfQUJHUjMyOg0KPj4gLQljYXNlIFY0TDJfUElYX0ZNVF9YQkdSMzI6DQo+PiAtCQkvKiBp ZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICovDQo+PiAtCQlp ZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2Rl KSkgew0KPj4gLQkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8 DQo+PiAtCQkJCVdCX0VOQUJMRSB8IEdBTV9FTkFCTEVTOw0KPj4gLQkJfSBlbHNlIHsNCj4+IC0J CQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IDB4MDsNCj4+IC0JCX0NCj4+IC0JCWJy ZWFrOw0KPj4gLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjA6DQo+PiAtCQkvKiBpZiBzZW5zb3Ig Zm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICovDQo+PiAtCQlpZiAoSVNDX0lT X0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KPj4g LQkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8DQo+PiAtCQkJ CUNTQ19FTkFCTEUgfCBXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUyB8DQo+PiAtCQkJCVNVQjQyMF9F TkFCTEUgfCBTVUI0MjJfRU5BQkxFIHwgQ0JDX0VOQUJMRTsNCj4+IC0JCX0gZWxzZSB7DQo+PiAt CQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQo+PiAtCQl9DQo+PiAtCQli cmVhazsNCj4+IC0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoNCj4+IC0JCS8qIGlmIHNlbnNv ciBmb3JtYXQgaXMgUkFXLCB3ZSBjb252ZXJ0IGluc2lkZSBJU0MgKi8NCj4+IC0JCWlmIChJU0Nf SVNfRk9STUFUX1JBVyhpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7DQo+ PiAtCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwNCj4+IC0J CQkJQ1NDX0VOQUJMRSB8IFdCX0VOQUJMRSB8IEdBTV9FTkFCTEVTIHwNCj4+IC0JCQkJU1VCNDIy X0VOQUJMRSB8IENCQ19FTkFCTEU7DQo+PiAtCQl9IGVsc2Ugew0KPj4gLQkJCWlzYy0+dHJ5X2Nv bmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KPj4gLQkJfQ0KPj4gLQkJYnJlYWs7DQo+PiAtCWNh c2UgVjRMMl9QSVhfRk1UX1lVWVY6DQo+PiAtCQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywg d2UgY29udmVydCBpbnNpZGUgSVNDICovDQo+PiAtCQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNj LT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KPj4gLQkJCWlzYy0+dHJ5X2Nv bmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8DQo+PiAtCQkJCUNTQ19FTkFCTEUgfCBX Ql9FTkFCTEUgfCBHQU1fRU5BQkxFUyB8DQo+PiAtCQkJCVNVQjQyMl9FTkFCTEUgfCBDQkNfRU5B QkxFOw0KPj4gLQkJfSBlbHNlIHsNCj4+IC0JCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGlu ZSA9IDB4MDsNCj4+IC0JCX0NCj4+IC0JCWJyZWFrOw0KPj4gLQljYXNlIFY0TDJfUElYX0ZNVF9H UkVZOg0KPj4gLQkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3Jt YXQtPm1idXNfY29kZSkpIHsNCj4+IC0JCS8qIGlmIHNlbnNvciBmb3JtYXQgaXMgUkFXLCB3ZSBj b252ZXJ0IGluc2lkZSBJU0MgKi8NCj4+IC0JCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGlu ZSA9IENGQV9FTkFCTEUgfA0KPj4gLQkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FNX0VO QUJMRVMgfA0KPj4gLQkJCQlDQkNfRU5BQkxFOw0KPj4gLQkJfSBlbHNlIHsNCj4+IC0JCQlpc2Mt PnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IDB4MDsNCj4+IC0JCX0NCj4+IC0JCWJyZWFrOw0K Pj4gLQlkZWZhdWx0Og0KPj4gLQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7 DQo+PiAtCX0NCj4+IC0JcmV0dXJuIDA7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyBpbnQgaXNj X3RyeV9mbXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgc3RydWN0IHY0bDJfZm9ybWF0ICpmLA0K Pj4gLQkJCXUzMiAqY29kZSkNCj4+IC17DQo+PiAtCWludCBpOw0KPj4gLQlzdHJ1Y3QgaXNjX2Zv cm1hdCAqc2RfZm10ID0gTlVMTCwgKmRpcmVjdF9mbXQgPSBOVUxMOw0KPj4gLQlzdHJ1Y3QgdjRs Ml9waXhfZm9ybWF0ICpwaXhmbXQgPSAmZi0+Zm10LnBpeDsNCj4+IC0Jc3RydWN0IHY0bDJfc3Vi ZGV2X3BhZF9jb25maWcgcGFkX2NmZzsNCj4+IC0Jc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCBm b3JtYXQgPSB7DQo+PiAtCQkud2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZLA0KPj4gLQl9 Ow0KPj4gLQl1MzIgbWJ1c19jb2RlOw0KPj4gLQlpbnQgcmV0Ow0KPj4gLQlib29sIHJscF9kbWFf ZGlyZWN0X2R1bXAgPSBmYWxzZTsNCj4+IC0NCj4+IC0JaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZf VFlQRV9WSURFT19DQVBUVVJFKQ0KPj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+PiAtDQo+PiAtCS8q IFN0ZXAgMTogZmluZCBhIFJBVyBmb3JtYXQgdGhhdCBpcyBzdXBwb3J0ZWQgKi8NCj4+IC0JZm9y IChpID0gMDsgaSA8IGlzYy0+bnVtX3VzZXJfZm9ybWF0czsgaSsrKSB7DQo+PiAtCQlpZiAoSVND X0lTX0ZPUk1BVF9SQVcoaXNjLT51c2VyX2Zvcm1hdHNbaV0tPm1idXNfY29kZSkpIHsNCj4+IC0J CQlzZF9mbXQgPSBpc2MtPnVzZXJfZm9ybWF0c1tpXTsNCj4+IC0JCQlicmVhazsNCj4+IC0JCX0N Cj4+IC0JfQ0KPj4gLQkvKiBTdGVwIDI6IFdlIGNhbiBjb250aW51ZSB3aXRoIHRoaXMgUkFXIGZv cm1hdCwgb3Igd2UgY2FuIGxvb2sNCj4+IC0JICogZm9yIGJldHRlcjogbWF5YmUgc2Vuc29yIHN1 cHBvcnRzIGRpcmVjdGx5IHdoYXQgd2UgbmVlZC4NCj4+IC0JICovDQo+PiAtCWRpcmVjdF9mbXQg PSBmaW5kX2Zvcm1hdF9ieV9mb3VyY2MoaXNjLCBwaXhmbXQtPnBpeGVsZm9ybWF0KTsNCj4+IC0N Cj4+IC0JLyogU3RlcCAzOiBXZSBoYXZlIGJvdGguIFdlIGRlY2lkZSBnaXZlbiB0aGUgbW9kdWxl IHBhcmFtZXRlciB3aGljaA0KPj4gLQkgKiBvbmUgdG8gdXNlLg0KPj4gLQkgKi8NCj4+IC0JaWYg KGRpcmVjdF9mbXQgJiYgc2RfZm10ICYmIHNlbnNvcl9wcmVmZXJyZWQpDQo+PiAtCQlzZF9mbXQg PSBkaXJlY3RfZm10Ow0KPj4gLQ0KPj4gLQkvKiBTdGVwIDQ6IHdlIGRvIG5vdCBoYXZlIFJBVyBi dXQgd2UgaGF2ZSBhIGRpcmVjdCBmb3JtYXQuIFVzZSBpdC4gKi8NCj4+IC0JaWYgKGRpcmVjdF9m bXQgJiYgIXNkX2ZtdCkNCj4+IC0JCXNkX2ZtdCA9IGRpcmVjdF9mbXQ7DQo+PiAtDQo+PiAtCS8q IFN0ZXAgNTogaWYgd2UgYXJlIHVzaW5nIGEgZGlyZWN0IGZvcm1hdCwgd2UgbmVlZCB0byBwYWNr YWdlDQo+PiAtCSAqIGV2ZXJ5dGhpbmcgYXMgOCBiaXQgZGF0YSBhbmQganVzdCBkdW1wIGl0DQo+ PiAtCSAqLw0KPj4gLQlpZiAoc2RfZm10ID09IGRpcmVjdF9mbXQpDQo+PiAtCQlybHBfZG1hX2Rp cmVjdF9kdW1wID0gdHJ1ZTsNCj4+IC0NCj4+IC0JLyogU3RlcCA2OiBXZSBoYXZlIG5vIGZvcm1h dC4gVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSB1c2Vyc3BhY2UNCj4+IC0JICogcmVxdWVzdHMgc29t ZSB3ZWlyZC9pbnZhbGlkIGZvcm1hdC4NCj4+IC0JICogSW4gdGhpcyBjYXNlLCBkZWZhdWx0IHRv IHdoYXRldmVyIHdlIGhhdmUNCj4+IC0JICovDQo+PiAtCWlmICghc2RfZm10ICYmICFkaXJlY3Rf Zm10KSB7DQo+PiAtCQlzZF9mbXQgPSBpc2MtPnVzZXJfZm9ybWF0c1tpc2MtPm51bV91c2VyX2Zv cm1hdHMgLSAxXTsNCj4+IC0JCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2RldiwNCj4+ IC0JCQkgIlNlbnNvciBub3Qgc3VwcG9ydGluZyAlLjRzLCB1c2luZyAlLjRzXG4iLA0KPj4gLQkJ CSAoY2hhciAqKSZwaXhmbXQtPnBpeGVsZm9ybWF0LCAoY2hhciAqKSZzZF9mbXQtPmZvdXJjYyk7 DQo+PiAtCX0NCj4+IC0NCj4+IC0JaWYgKCFzZF9mbXQpIHsNCj4+IC0JCXJldCA9IC1FSU5WQUw7 DQo+PiAtCQlnb3RvIGlzY190cnlfZm10X2VycjsNCj4+IC0JfQ0KPj4gLQ0KPj4gLQkvKiBTdGVw IDc6IFByaW50IG91dCB3aGF0IHdlIGRlY2lkZWQgZm9yIGRlYnVnZ2luZyAqLw0KPj4gLQl2NGwy X2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQo+PiAtCQkgIlByZWZlcnJpbmcgdG8gaGF2 ZSBzZW5zb3IgdXNpbmcgZm9ybWF0ICUuNHNcbiIsDQo+PiAtCQkgKGNoYXIgKikmc2RfZm10LT5m b3VyY2MpOw0KPj4gLQ0KPj4gLQkvKiBTdGVwIDg6IGF0IHRoaXMgbW9tZW50IHdlIGRlY2lkZWQg d2hpY2ggZm9ybWF0IHRoZSBzdWJkZXYgd2lsbCB1c2UgKi8NCj4+IC0JaXNjLT50cnlfY29uZmln LnNkX2Zvcm1hdCA9IHNkX2ZtdDsNCj4+IC0NCj4+IC0JLyogTGltaXQgdG8gQXRtZWwgSVNDIGhh cmR3YXJlIGNhcGFiaWxpdGllcyAqLw0KPj4gLQlpZiAocGl4Zm10LT53aWR0aCA+IElTQ19NQVhf U1VQUE9SVF9XSURUSCkNCj4+IC0JCXBpeGZtdC0+d2lkdGggPSBJU0NfTUFYX1NVUFBPUlRfV0lE VEg7DQo+PiAtCWlmIChwaXhmbXQtPmhlaWdodCA+IElTQ19NQVhfU1VQUE9SVF9IRUlHSFQpDQo+ PiAtCQlwaXhmbXQtPmhlaWdodCA9IElTQ19NQVhfU1VQUE9SVF9IRUlHSFQ7DQo+PiAtDQo+PiAt CS8qDQo+PiAtCSAqIFRoZSBtYnVzIGZvcm1hdCBpcyB0aGUgb25lIHRoZSBzdWJkZXYgb3V0cHV0 cy4NCj4+IC0JICogVGhlIHBpeGVscyB3aWxsIGJlIHRyYW5zZmVycmVkIGluIHRoaXMgZm9ybWF0 IFNlbnNvciAtPiBJU0MNCj4+IC0JICovDQo+PiAtCW1idXNfY29kZSA9IHNkX2ZtdC0+bWJ1c19j b2RlOw0KPj4gLQ0KPj4gLQkvKg0KPj4gLQkgKiBWYWxpZGF0ZSBmb3JtYXRzLiBJZiB0aGUgcmVx dWlyZWQgZm9ybWF0IGlzIG5vdCBPSywgZGVmYXVsdCB0byByYXcuDQo+PiAtCSAqLw0KPj4gLQ0K Pj4gLQlpc2MtPnRyeV9jb25maWcuZm91cmNjID0gcGl4Zm10LT5waXhlbGZvcm1hdDsNCj4+IC0N Cj4+IC0JaWYgKGlzY190cnlfdmFsaWRhdGVfZm9ybWF0cyhpc2MpKSB7DQo+PiAtCQlwaXhmbXQt PnBpeGVsZm9ybWF0ID0gaXNjLT50cnlfY29uZmlnLmZvdXJjYyA9IHNkX2ZtdC0+Zm91cmNjOw0K Pj4gLQkJLyogUmUtdHJ5IHRvIHZhbGlkYXRlIHRoZSBuZXcgZm9ybWF0ICovDQo+PiAtCQlyZXQg PSBpc2NfdHJ5X3ZhbGlkYXRlX2Zvcm1hdHMoaXNjKTsNCj4+IC0JCWlmIChyZXQpDQo+PiAtCQkJ Z290byBpc2NfdHJ5X2ZtdF9lcnI7DQo+PiAtCX0NCj4+IC0NCj4+IC0JcmV0ID0gaXNjX3RyeV9j b25maWd1cmVfcmxwX2RtYShpc2MsIHJscF9kbWFfZGlyZWN0X2R1bXApOw0KPj4gLQlpZiAocmV0 KQ0KPj4gLQkJZ290byBpc2NfdHJ5X2ZtdF9lcnI7DQo+PiAtDQo+PiAtCXJldCA9IGlzY190cnlf Y29uZmlndXJlX3BpcGVsaW5lKGlzYyk7DQo+PiAtCWlmIChyZXQpDQo+PiAtCQlnb3RvIGlzY190 cnlfZm10X2VycjsNCj4+IC0NCj4+IC0JdjRsMl9maWxsX21idXNfZm9ybWF0KCZmb3JtYXQuZm9y bWF0LCBwaXhmbXQsIG1idXNfY29kZSk7DQo+PiAtCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNj LT5jdXJyZW50X3N1YmRldi0+c2QsIHBhZCwgc2V0X2ZtdCwNCj4+IC0JCQkgICAgICAgJnBhZF9j ZmcsICZmb3JtYXQpOw0KPj4gLQlpZiAocmV0IDwgMCkNCj4+IC0JCWdvdG8gaXNjX3RyeV9mbXRf c3ViZGV2X2VycjsNCj4+IC0NCj4+IC0JdjRsMl9maWxsX3BpeF9mb3JtYXQocGl4Zm10LCAmZm9y bWF0LmZvcm1hdCk7DQo+PiAtDQo+PiAtCXBpeGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7 DQo+PiAtCXBpeGZtdC0+Ynl0ZXNwZXJsaW5lID0gKHBpeGZtdC0+d2lkdGggKiBpc2MtPnRyeV9j b25maWcuYnBwKSA+PiAzOw0KPj4gLQlwaXhmbXQtPnNpemVpbWFnZSA9IHBpeGZtdC0+Ynl0ZXNw ZXJsaW5lICogcGl4Zm10LT5oZWlnaHQ7DQo+PiAtDQo+PiAtCWlmIChjb2RlKQ0KPj4gLQkJKmNv ZGUgPSBtYnVzX2NvZGU7DQo+PiAtDQo+PiAtCXJldHVybiAwOw0KPj4gLQ0KPj4gLWlzY190cnlf Zm10X2VycjoNCj4+IC0JdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJDb3VsZCBub3QgZmluZCBh bnkgcG9zc2libGUgZm9ybWF0IGZvciBhIHdvcmtpbmcgcGlwZWxpbmVcbiIpOw0KPj4gLWlzY190 cnlfZm10X3N1YmRldl9lcnI6DQo+PiAtCW1lbXNldCgmaXNjLT50cnlfY29uZmlnLCAwLCBzaXpl b2YoaXNjLT50cnlfY29uZmlnKSk7DQo+PiAtDQo+PiAtCXJldHVybiByZXQ7DQo+PiAtfQ0KPj4g LQ0KPj4gLXN0YXRpYyBpbnQgaXNjX3NldF9mbXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgc3Ry dWN0IHY0bDJfZm9ybWF0ICpmKQ0KPj4gLXsNCj4+IC0Jc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1h dCBmb3JtYXQgPSB7DQo+PiAtCQkud2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0K Pj4gLQl9Ow0KPj4gLQl1MzIgbWJ1c19jb2RlID0gMDsNCj4+IC0JaW50IHJldDsNCj4+IC0NCj4+ IC0JcmV0ID0gaXNjX3RyeV9mbXQoaXNjLCBmLCAmbWJ1c19jb2RlKTsNCj4+IC0JaWYgKHJldCkN Cj4+IC0JCXJldHVybiByZXQ7DQo+PiAtDQo+PiAtCXY0bDJfZmlsbF9tYnVzX2Zvcm1hdCgmZm9y bWF0LmZvcm1hdCwgJmYtPmZtdC5waXgsIG1idXNfY29kZSk7DQo+PiAtCXJldCA9IHY0bDJfc3Vi ZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHBhZCwNCj4+IC0JCQkgICAgICAgc2V0 X2ZtdCwgTlVMTCwgJmZvcm1hdCk7DQo+PiAtCWlmIChyZXQgPCAwKQ0KPj4gLQkJcmV0dXJuIHJl dDsNCj4+IC0NCj4+IC0JaXNjLT5mbXQgPSAqZjsNCj4+IC0NCj4+IC0JaWYgKGlzYy0+dHJ5X2Nv bmZpZy5zZF9mb3JtYXQgJiYgaXNjLT5jb25maWcuc2RfZm9ybWF0ICYmDQo+PiAtCSAgICBpc2Mt PnRyeV9jb25maWcuc2RfZm9ybWF0ICE9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdCkgew0KPj4gLQkJ aXNjLT5jdHJscy5oaXN0X3N0YXQgPSBISVNUX0lOSVQ7DQo+PiAtCQlpc2NfcmVzZXRfYXdiX2N0 cmxzKGlzYyk7DQo+PiAtCX0NCj4+IC0JLyogbWFrZSB0aGUgdHJ5IGNvbmZpZ3VyYXRpb24gYWN0 aXZlICovDQo+PiAtCWlzYy0+Y29uZmlnID0gaXNjLT50cnlfY29uZmlnOw0KPj4gLQ0KPj4gLQl2 NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsICJOZXcgSVNDIGNvbmZpZ3VyYXRpb24g aW4gcGxhY2VcbiIpOw0KPj4gLQ0KPj4gLQlyZXR1cm4gMDsNCj4+IC19DQo+PiAtDQo+PiAtc3Rh dGljIGludCBpc2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwN Cj4+IC0JCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpDQo+PiAtew0KPj4gLQlzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCj4+IC0NCj4+IC0JaWYgKHZi Ml9pc19zdHJlYW1pbmcoJmlzYy0+dmIyX3ZpZHEpKQ0KPj4gLQkJcmV0dXJuIC1FQlVTWTsNCj4+ IC0NCj4+IC0JcmV0dXJuIGlzY19zZXRfZm10KGlzYywgZik7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0 YXRpYyBpbnQgaXNjX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJp diwNCj4+IC0JCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KPj4gLXsNCj4+IC0Jc3RydWN0IGlz Y19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQo+PiAtDQo+PiAtCXJldHVybiBp c2NfdHJ5X2ZtdChpc2MsIGYsIE5VTEwpOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgaW50IGlz Y19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KPj4gLQkJCSAgIHN0 cnVjdCB2NGwyX2lucHV0ICppbnApDQo+PiAtew0KPj4gLQlpZiAoaW5wLT5pbmRleCAhPSAwKQ0K Pj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+PiAtDQo+PiAtCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRf VFlQRV9DQU1FUkE7DQo+PiAtCWlucC0+c3RkID0gMDsNCj4+IC0Jc3Ryc2NweShpbnAtPm5hbWUs ICJDYW1lcmEiLCBzaXplb2YoaW5wLT5uYW1lKSk7DQo+PiAtDQo+PiAtCXJldHVybiAwOw0KPj4g LX0NCj4+IC0NCj4+IC1zdGF0aWMgaW50IGlzY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2 b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpDQo+PiAtew0KPj4gLQkqaSA9IDA7DQo+PiAtDQo+ PiAtCXJldHVybiAwOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgaW50IGlzY19zX2lucHV0KHN0 cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkNCj4+IC17DQo+PiAt CWlmIChpID4gMCkNCj4+IC0JCXJldHVybiAtRUlOVkFMOw0KPj4gLQ0KPj4gLQlyZXR1cm4gMDsN Cj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIGludCBpc2NfZ19wYXJtKHN0cnVjdCBmaWxlICpmaWxl LCB2b2lkICpmaCwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqYSkNCj4+IC17DQo+PiAtCXN0cnVj dCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KPj4gLQ0KPj4gLQlyZXR1 cm4gdjRsMl9nX3Bhcm1fY2FwKHZpZGVvX2RldmRhdGEoZmlsZSksIGlzYy0+Y3VycmVudF9zdWJk ZXYtPnNkLCBhKTsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIGludCBpc2Nfc19wYXJtKHN0cnVj dCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqYSkNCj4+IC17 DQo+PiAtCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KPj4g LQ0KPj4gLQlyZXR1cm4gdjRsMl9zX3Bhcm1fY2FwKHZpZGVvX2RldmRhdGEoZmlsZSksIGlzYy0+ Y3VycmVudF9zdWJkZXYtPnNkLCBhKTsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIGludCBpc2Nf ZW51bV9mcmFtZXNpemVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwNCj4+IC0JCQkgICAg ICAgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0gKmZzaXplKQ0KPj4gLXsNCj4+IC0Jc3RydWN0IGlz Y19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQo+PiAtCXN0cnVjdCB2NGwyX3N1 YmRldl9mcmFtZV9zaXplX2VudW0gZnNlID0gew0KPj4gLQkJLmluZGV4ID0gZnNpemUtPmluZGV4 LA0KPj4gLQkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCj4+IC0JfTsNCj4+ IC0JaW50IHJldCA9IC1FSU5WQUw7DQo+PiAtCWludCBpOw0KPj4gLQ0KPj4gLQlmb3IgKGkgPSAw OyBpIDwgaXNjLT5udW1fdXNlcl9mb3JtYXRzOyBpKyspDQo+PiAtCQlpZiAoaXNjLT51c2VyX2Zv cm1hdHNbaV0tPmZvdXJjYyA9PSBmc2l6ZS0+cGl4ZWxfZm9ybWF0KQ0KPj4gLQkJCXJldCA9IDA7 DQo+PiAtDQo+PiAtCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbnRyb2xsZXJfZm9ybWF0 cyk7IGkrKykNCj4+IC0JCWlmIChjb250cm9sbGVyX2Zvcm1hdHNbaV0uZm91cmNjID09IGZzaXpl LT5waXhlbF9mb3JtYXQpDQo+PiAtCQkJcmV0ID0gMDsNCj4+IC0NCj4+IC0JaWYgKHJldCkNCj4+ IC0JCXJldHVybiByZXQ7DQo+PiAtDQo+PiAtCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5j dXJyZW50X3N1YmRldi0+c2QsIHBhZCwgZW51bV9mcmFtZV9zaXplLA0KPj4gLQkJCSAgICAgICBO VUxMLCAmZnNlKTsNCj4+IC0JaWYgKHJldCkNCj4+IC0JCXJldHVybiByZXQ7DQo+PiAtDQo+PiAt CWZzZS5jb2RlID0gaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGU7DQo+PiAtDQo+PiAt CWZzaXplLT50eXBlID0gVjRMMl9GUk1TSVpFX1RZUEVfRElTQ1JFVEU7DQo+PiAtCWZzaXplLT5k aXNjcmV0ZS53aWR0aCA9IGZzZS5tYXhfd2lkdGg7DQo+PiAtCWZzaXplLT5kaXNjcmV0ZS5oZWln aHQgPSBmc2UubWF4X2hlaWdodDsNCj4+IC0NCj4+IC0JcmV0dXJuIDA7DQo+PiAtfQ0KPj4gLQ0K Pj4gLXN0YXRpYyBpbnQgaXNjX2VudW1fZnJhbWVpbnRlcnZhbHMoc3RydWN0IGZpbGUgKmZpbGUs IHZvaWQgKmZoLA0KPj4gLQkJCQkgICAgc3RydWN0IHY0bDJfZnJtaXZhbGVudW0gKmZpdmFsKQ0K Pj4gLXsNCj4+IC0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7 DQo+PiAtCXN0cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9pbnRlcnZhbF9lbnVtIGZpZSA9IHsNCj4+ IC0JCS5pbmRleCA9IGZpdmFsLT5pbmRleCwNCj4+IC0JCS53aWR0aCA9IGZpdmFsLT53aWR0aCwN Cj4+IC0JCS5oZWlnaHQgPSBmaXZhbC0+aGVpZ2h0LA0KPj4gLQkJLndoaWNoID0gVjRMMl9TVUJE RVZfRk9STUFUX0FDVElWRSwNCj4+IC0JfTsNCj4+IC0JaW50IHJldCA9IC1FSU5WQUw7DQo+PiAt CWludCBpOw0KPj4gLQ0KPj4gLQlmb3IgKGkgPSAwOyBpIDwgaXNjLT5udW1fdXNlcl9mb3JtYXRz OyBpKyspDQo+PiAtCQlpZiAoaXNjLT51c2VyX2Zvcm1hdHNbaV0tPmZvdXJjYyA9PSBmaXZhbC0+ cGl4ZWxfZm9ybWF0KQ0KPj4gLQkJCXJldCA9IDA7DQo+PiAtDQo+PiAtCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGNvbnRyb2xsZXJfZm9ybWF0cyk7IGkrKykNCj4+IC0JCWlmIChjb250cm9s bGVyX2Zvcm1hdHNbaV0uZm91cmNjID09IGZpdmFsLT5waXhlbF9mb3JtYXQpDQo+PiAtCQkJcmV0 ID0gMDsNCj4+IC0NCj4+IC0JaWYgKHJldCkNCj4+IC0JCXJldHVybiByZXQ7DQo+PiAtDQo+PiAt CXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHBhZCwNCj4+ IC0JCQkgICAgICAgZW51bV9mcmFtZV9pbnRlcnZhbCwgTlVMTCwgJmZpZSk7DQo+PiAtCWlmIChy ZXQpDQo+PiAtCQlyZXR1cm4gcmV0Ow0KPj4gLQ0KPj4gLQlmaWUuY29kZSA9IGlzYy0+Y29uZmln LnNkX2Zvcm1hdC0+bWJ1c19jb2RlOw0KPj4gLQlmaXZhbC0+dHlwZSA9IFY0TDJfRlJNSVZBTF9U WVBFX0RJU0NSRVRFOw0KPj4gLQlmaXZhbC0+ZGlzY3JldGUgPSBmaWUuaW50ZXJ2YWw7DQo+PiAt DQo+PiAtCXJldHVybiAwOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgY29uc3Qgc3RydWN0IHY0 bDJfaW9jdGxfb3BzIGlzY19pb2N0bF9vcHMgPSB7DQo+PiAtCS52aWRpb2NfcXVlcnljYXAJCT0g aXNjX3F1ZXJ5Y2FwLA0KPj4gLQkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAJPSBpc2NfZW51bV9m bXRfdmlkX2NhcCwNCj4+IC0JLnZpZGlvY19nX2ZtdF92aWRfY2FwCQk9IGlzY19nX2ZtdF92aWRf Y2FwLA0KPj4gLQkudmlkaW9jX3NfZm10X3ZpZF9jYXAJCT0gaXNjX3NfZm10X3ZpZF9jYXAsDQo+ PiAtCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwCQk9IGlzY190cnlfZm10X3ZpZF9jYXAsDQo+PiAt DQo+PiAtCS52aWRpb2NfZW51bV9pbnB1dAkJPSBpc2NfZW51bV9pbnB1dCwNCj4+IC0JLnZpZGlv Y19nX2lucHV0CQkJPSBpc2NfZ19pbnB1dCwNCj4+IC0JLnZpZGlvY19zX2lucHV0CQkJPSBpc2Nf c19pbnB1dCwNCj4+IC0NCj4+IC0JLnZpZGlvY19yZXFidWZzCQkJPSB2YjJfaW9jdGxfcmVxYnVm cywNCj4+IC0JLnZpZGlvY19xdWVyeWJ1ZgkJPSB2YjJfaW9jdGxfcXVlcnlidWYsDQo+PiAtCS52 aWRpb2NfcWJ1ZgkJCT0gdmIyX2lvY3RsX3FidWYsDQo+PiAtCS52aWRpb2NfZXhwYnVmCQkJPSB2 YjJfaW9jdGxfZXhwYnVmLA0KPj4gLQkudmlkaW9jX2RxYnVmCQkJPSB2YjJfaW9jdGxfZHFidWYs DQo+PiAtCS52aWRpb2NfY3JlYXRlX2J1ZnMJCT0gdmIyX2lvY3RsX2NyZWF0ZV9idWZzLA0KPj4g LQkudmlkaW9jX3ByZXBhcmVfYnVmCQk9IHZiMl9pb2N0bF9wcmVwYXJlX2J1ZiwNCj4+IC0JLnZp ZGlvY19zdHJlYW1vbgkJPSB2YjJfaW9jdGxfc3RyZWFtb24sDQo+PiAtCS52aWRpb2Nfc3RyZWFt b2ZmCQk9IHZiMl9pb2N0bF9zdHJlYW1vZmYsDQo+PiAtDQo+PiAtCS52aWRpb2NfZ19wYXJtCQkJ PSBpc2NfZ19wYXJtLA0KPj4gLQkudmlkaW9jX3NfcGFybQkJCT0gaXNjX3NfcGFybSwNCj4+IC0J LnZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMJCT0gaXNjX2VudW1fZnJhbWVzaXplcywNCj4+IC0JLnZp ZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzCT0gaXNjX2VudW1fZnJhbWVpbnRlcnZhbHMsDQo+PiAt DQo+PiAtCS52aWRpb2NfbG9nX3N0YXR1cwkJPSB2NGwyX2N0cmxfbG9nX3N0YXR1cywNCj4+IC0J LnZpZGlvY19zdWJzY3JpYmVfZXZlbnQJCT0gdjRsMl9jdHJsX3N1YnNjcmliZV9ldmVudCwNCj4+ IC0JLnZpZGlvY191bnN1YnNjcmliZV9ldmVudAk9IHY0bDJfZXZlbnRfdW5zdWJzY3JpYmUsDQo+ PiAtfTsNCj4+IC0NCj4+IC1zdGF0aWMgaW50IGlzY19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQ0K Pj4gLXsNCj4+IC0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7 DQo+PiAtCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZDsN Cj4+IC0JaW50IHJldDsNCj4+IC0NCj4+IC0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgm aXNjLT5sb2NrKSkNCj4+IC0JCXJldHVybiAtRVJFU1RBUlRTWVM7DQo+PiAtDQo+PiAtCXJldCA9 IHY0bDJfZmhfb3BlbihmaWxlKTsNCj4+IC0JaWYgKHJldCA8IDApDQo+PiAtCQlnb3RvIHVubG9j azsNCj4+IC0NCj4+IC0JaWYgKCF2NGwyX2ZoX2lzX3Npbmd1bGFyX2ZpbGUoZmlsZSkpDQo+PiAt CQlnb3RvIHVubG9jazsNCj4+IC0NCj4+IC0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29y ZSwgc19wb3dlciwgMSk7DQo+PiAtCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRU5PSU9DVExDTUQp IHsNCj4+IC0JCXY0bDJfZmhfcmVsZWFzZShmaWxlKTsNCj4+IC0JCWdvdG8gdW5sb2NrOw0KPj4g LQl9DQo+PiAtDQo+PiAtCXJldCA9IGlzY19zZXRfZm10KGlzYywgJmlzYy0+Zm10KTsNCj4+IC0J aWYgKHJldCkgew0KPj4gLQkJdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19wb3dlciwgMCk7 DQo+PiAtCQl2NGwyX2ZoX3JlbGVhc2UoZmlsZSk7DQo+PiAtCX0NCj4+IC0NCj4+IC11bmxvY2s6 DQo+PiAtCW11dGV4X3VubG9jaygmaXNjLT5sb2NrKTsNCj4+IC0JcmV0dXJuIHJldDsNCj4+IC19 DQo+PiAtDQo+PiAtc3RhdGljIGludCBpc2NfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkNCj4+ IC17DQo+PiAtCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0K Pj4gLQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaXNjLT5jdXJyZW50X3N1YmRldi0+c2Q7DQo+ PiAtCWJvb2wgZmhfc2luZ3VsYXI7DQo+PiAtCWludCByZXQ7DQo+PiAtDQo+PiAtCW11dGV4X2xv Y2soJmlzYy0+bG9jayk7DQo+PiAtDQo+PiAtCWZoX3Npbmd1bGFyID0gdjRsMl9maF9pc19zaW5n dWxhcl9maWxlKGZpbGUpOw0KPj4gLQ0KPj4gLQlyZXQgPSBfdmIyX2ZvcF9yZWxlYXNlKGZpbGUs IE5VTEwpOw0KPj4gLQ0KPj4gLQlpZiAoZmhfc2luZ3VsYXIpDQo+PiAtCQl2NGwyX3N1YmRldl9j YWxsKHNkLCBjb3JlLCBzX3Bvd2VyLCAwKTsNCj4+IC0NCj4+IC0JbXV0ZXhfdW5sb2NrKCZpc2Mt PmxvY2spOw0KPj4gLQ0KPj4gLQlyZXR1cm4gcmV0Ow0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMg Y29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGlzY19mb3BzID0gew0KPj4gLQkub3du ZXIJCT0gVEhJU19NT0RVTEUsDQo+PiAtCS5vcGVuCQk9IGlzY19vcGVuLA0KPj4gLQkucmVsZWFz ZQk9IGlzY19yZWxlYXNlLA0KPj4gLQkudW5sb2NrZWRfaW9jdGwJPSB2aWRlb19pb2N0bDIsDQo+ PiAtCS5yZWFkCQk9IHZiMl9mb3BfcmVhZCwNCj4+IC0JLm1tYXAJCT0gdmIyX2ZvcF9tbWFwLA0K Pj4gLQkucG9sbAkJPSB2YjJfZm9wX3BvbGwsDQo+PiAtfTsNCj4+IC0NCj4+IC1zdGF0aWMgaXJx cmV0dXJuX3QgaXNjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpDQo+PiAtew0KPj4g LQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gKHN0cnVjdCBpc2NfZGV2aWNlICopZGV2X2lkOw0K Pj4gLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCj4+IC0JdTMyIGlzY19p bnRzciwgaXNjX2ludG1hc2ssIHBlbmRpbmc7DQo+PiAtCWlycXJldHVybl90IHJldCA9IElSUV9O T05FOw0KPj4gLQ0KPj4gLQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19JTlRTUiwgJmlzY19pbnRz cik7DQo+PiAtCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0lOVE1BU0ssICZpc2NfaW50bWFzayk7 DQo+PiAtDQo+PiAtCXBlbmRpbmcgPSBpc2NfaW50c3IgJiBpc2NfaW50bWFzazsNCj4+IC0NCj4+ IC0JaWYgKGxpa2VseShwZW5kaW5nICYgSVNDX0lOVF9ERE9ORSkpIHsNCj4+IC0JCXNwaW5fbG9j aygmaXNjLT5kbWFfcXVldWVfbG9jayk7DQo+PiAtCQlpZiAoaXNjLT5jdXJfZnJtKSB7DQo+PiAt CQkJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9ICZpc2MtPmN1cl9mcm0tPnZiOw0KPj4g LQkJCXN0cnVjdCB2YjJfYnVmZmVyICp2YiA9ICZ2YnVmLT52YjJfYnVmOw0KPj4gLQ0KPj4gLQkJ CXZiLT50aW1lc3RhbXAgPSBrdGltZV9nZXRfbnMoKTsNCj4+IC0JCQl2YnVmLT5zZXF1ZW5jZSA9 IGlzYy0+c2VxdWVuY2UrKzsNCj4+IC0JCQl2YjJfYnVmZmVyX2RvbmUodmIsIFZCMl9CVUZfU1RB VEVfRE9ORSk7DQo+PiAtCQkJaXNjLT5jdXJfZnJtID0gTlVMTDsNCj4+IC0JCX0NCj4+IC0NCj4+ IC0JCWlmICghbGlzdF9lbXB0eSgmaXNjLT5kbWFfcXVldWUpICYmICFpc2MtPnN0b3ApIHsNCj4+ IC0JCQlpc2MtPmN1cl9mcm0gPSBsaXN0X2ZpcnN0X2VudHJ5KCZpc2MtPmRtYV9xdWV1ZSwNCj4+ IC0JCQkJCQkgICAgIHN0cnVjdCBpc2NfYnVmZmVyLCBsaXN0KTsNCj4+IC0JCQlsaXN0X2RlbCgm aXNjLT5jdXJfZnJtLT5saXN0KTsNCj4+IC0NCj4+IC0JCQlpc2Nfc3RhcnRfZG1hKGlzYyk7DQo+ PiAtCQl9DQo+PiAtDQo+PiAtCQlpZiAoaXNjLT5zdG9wKQ0KPj4gLQkJCWNvbXBsZXRlKCZpc2Mt PmNvbXApOw0KPj4gLQ0KPj4gLQkJcmV0ID0gSVJRX0hBTkRMRUQ7DQo+PiAtCQlzcGluX3VubG9j aygmaXNjLT5kbWFfcXVldWVfbG9jayk7DQo+PiAtCX0NCj4+IC0NCj4+IC0JaWYgKHBlbmRpbmcg JiBJU0NfSU5UX0hJU0RPTkUpIHsNCj4+IC0JCXNjaGVkdWxlX3dvcmsoJmlzYy0+YXdiX3dvcmsp Ow0KPj4gLQkJcmV0ID0gSVJRX0hBTkRMRUQ7DQo+PiAtCX0NCj4+IC0NCj4+IC0JcmV0dXJuIHJl dDsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIHZvaWQgaXNjX2hpc3RfY291bnQoc3RydWN0IGlz Y19kZXZpY2UgKmlzYywgdTMyICptaW4sIHUzMiAqbWF4KQ0KPj4gLXsNCj4+IC0Jc3RydWN0IHJl Z21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQo+PiAtCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxz ID0gJmlzYy0+Y3RybHM7DQo+PiAtCXUzMiAqaGlzdF9jb3VudCA9ICZjdHJscy0+aGlzdF9jb3Vu dFtjdHJscy0+aGlzdF9pZF07DQo+PiAtCXUzMiAqaGlzdF9lbnRyeSA9ICZjdHJscy0+aGlzdF9l bnRyeVswXTsNCj4+IC0JdTMyIGk7DQo+PiAtDQo+PiAtCSptaW4gPSAwOw0KPj4gLQkqbWF4ID0g SElTVF9FTlRSSUVTOw0KPj4gLQ0KPj4gLQlyZWdtYXBfYnVsa19yZWFkKHJlZ21hcCwgSVNDX0hJ U19FTlRSWSwgaGlzdF9lbnRyeSwgSElTVF9FTlRSSUVTKTsNCj4+IC0NCj4+IC0JKmhpc3RfY291 bnQgPSAwOw0KPj4gLQkvKg0KPj4gLQkgKiB3ZSBkZWxpYmVyYXRlbHkgaWdub3JlIHRoZSBlbmQg b2YgdGhlIGhpc3RvZ3JhbSwNCj4+IC0JICogdGhlIG1vc3Qgd2hpdGUgcGl4ZWxzDQo+PiAtCSAq Lw0KPj4gLQlmb3IgKGkgPSAxOyBpIDwgSElTVF9FTlRSSUVTOyBpKyspIHsNCj4+IC0JCWlmICgq aGlzdF9lbnRyeSAmJiAhKm1pbikNCj4+IC0JCQkqbWluID0gaTsNCj4+IC0JCWlmICgqaGlzdF9l bnRyeSkNCj4+IC0JCQkqbWF4ID0gaTsNCj4+IC0JCSpoaXN0X2NvdW50ICs9IGkgKiAoKmhpc3Rf ZW50cnkrKyk7DQo+PiAtCX0NCj4+IC0NCj4+IC0JaWYgKCEqbWluKQ0KPj4gLQkJKm1pbiA9IDE7 DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRpYyB2b2lkIGlzY193Yl91cGRhdGUoc3RydWN0IGlzY19j dHJscyAqY3RybHMpDQo+PiAtew0KPj4gLQl1MzIgKmhpc3RfY291bnQgPSAmY3RybHMtPmhpc3Rf Y291bnRbMF07DQo+PiAtCXUzMiBjLCBvZmZzZXRbNF07DQo+PiAtCXU2NCBhdmcgPSAwOw0KPj4g LQkvKiBXZSBjb21wdXRlIHR3byBnYWlucywgc3RyZXRjaCBnYWluIGFuZCBncmV5IHdvcmxkIGdh aW4gKi8NCj4+IC0JdTMyIHNfZ2Fpbls0XSwgZ3dfZ2Fpbls0XTsNCj4+IC0NCj4+IC0JLyoNCj4+ IC0JICogQWNjb3JkaW5nIHRvIEdyZXkgV29ybGQsIHdlIG5lZWQgdG8gc2V0IGdhaW5zIGZvciBS L0IgdG8gbm9ybWFsaXplDQo+PiAtCSAqIHRoZW0gdG93YXJkcyB0aGUgZ3JlZW4gY2hhbm5lbC4N Cj4+IC0JICogVGh1cyB3ZSB3YW50IHRvIGtlZXAgR3JlZW4gYXMgZml4ZWQgYW5kIGFkanVzdCBv bmx5IFJlZC9CbHVlDQo+PiAtCSAqIENvbXB1dGUgdGhlIGF2ZXJhZ2Ugb2YgdGhlIGJvdGggZ3Jl ZW4gY2hhbm5lbHMgZmlyc3QNCj4+IC0JICovDQo+PiAtCWF2ZyA9ICh1NjQpaGlzdF9jb3VudFtJ U0NfSElTX0NGR19NT0RFX0dSXSArDQo+PiAtCQkodTY0KWhpc3RfY291bnRbSVNDX0hJU19DRkdf TU9ERV9HQl07DQo+PiAtCWF2ZyA+Pj0gMTsNCj4+IC0NCj4+IC0JLyogR3JlZW4gaGlzdG9ncmFt IGlzIG51bGwsIG5vdGhpbmcgdG8gZG8gKi8NCj4+IC0JaWYgKCFhdmcpDQo+PiAtCQlyZXR1cm47 DQo+PiAtDQo+PiAtCWZvciAoYyA9IElTQ19ISVNfQ0ZHX01PREVfR1I7IGMgPD0gSVNDX0hJU19D RkdfTU9ERV9COyBjKyspIHsNCj4+IC0JCS8qDQo+PiAtCQkgKiB0aGUgY29sb3Igb2Zmc2V0IGlz IHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBoaXN0b2dyYW0uDQo+PiAtCQkgKiB3ZSBzdHJldGNo IHRoaXMgY29sb3IgdG8gdGhlIGZ1bGwgcmFuZ2UgYnkgc3Vic3RyYWN0aW5nDQo+PiAtCQkgKiB0 aGlzIHZhbHVlIGZyb20gdGhlIGNvbG9yIGNvbXBvbmVudC4NCj4+IC0JCSAqLw0KPj4gLQkJb2Zm c2V0W2NdID0gY3RybHMtPmhpc3RfbWlubWF4W2NdW0hJU1RfTUlOX0lOREVYXTsNCj4+IC0JCS8q DQo+PiAtCQkgKiBUaGUgb2Zmc2V0IGlzIGFsd2F5cyBhdCBsZWFzdCAxLiBJZiB0aGUgb2Zmc2V0 IGlzIDEsIHdlIGRvDQo+PiAtCQkgKiBub3QgbmVlZCB0byBhZGp1c3QgaXQsIHNvIG91ciByZXN1 bHQgbXVzdCBiZSB6ZXJvLg0KPj4gLQkJICogdGhlIG9mZnNldCBpcyBjb21wdXRlZCBpbiBhIGhp c3RvZ3JhbSBvbiA5IGJpdHMgKDAuLjUxMikNCj4+IC0JCSAqIGJ1dCB0aGUgb2Zmc2V0IGluIHJl Z2lzdGVyIGlzIGJhc2VkIG9uDQo+PiAtCQkgKiAxMiBiaXRzIHBpcGVsaW5lICgwLi40MDk2KS4N Cj4+IC0JCSAqIHdlIG5lZWQgdG8gc2hpZnQgd2l0aCB0aGUgMyBiaXRzIHRoYXQgdGhlIGhpc3Rv Z3JhbSBpcw0KPj4gLQkJICogaWdub3JpbmcNCj4+IC0JCSAqLw0KPj4gLQkJY3RybHMtPm9mZnNl dFtjXSA9IChvZmZzZXRbY10gLSAxKSA8PCAzOw0KPj4gLQ0KPj4gLQkJLyogdGhlIG9mZnNldCBp cyB0aGVuIHRha2VuIGFuZCBjb252ZXJ0ZWQgdG8gMidzIGNvbXBsZW1lbnRzICovDQo+PiAtCQlp ZiAoIWN0cmxzLT5vZmZzZXRbY10pDQo+PiAtCQkJY3RybHMtPm9mZnNldFtjXSA9IElTQ19XQl9P X1pFUk9fVkFMOw0KPj4gLQ0KPj4gLQkJLyoNCj4+IC0JCSAqIHRoZSBzdHJldGNoIGdhaW4gaXMg dGhlIHRvdGFsIG51bWJlciBvZiBoaXN0b2dyYW0gYmlucw0KPj4gLQkJICogZGl2aWRlZCBieSB0 aGUgYWN0dWFsIHJhbmdlIG9mIGNvbG9yIGNvbXBvbmVudCAoTWF4IC0gTWluKQ0KPj4gLQkJICog SWYgd2UgY29tcHV0ZSBnYWluIGxpa2UgdGhpcywgdGhlIGFjdHVhbCBjb2xvciBjb21wb25lbnQN Cj4+IC0JCSAqIHdpbGwgYmUgc3RyZXRjaGVkIHRvIHRoZSBmdWxsIGhpc3RvZ3JhbS4NCj4+IC0J CSAqIFdlIG5lZWQgdG8gc2hpZnQgOSBiaXRzIGZvciBwcmVjaXNpb24sIHdlIGhhdmUgOSBiaXRz IGZvcg0KPj4gLQkJICogZGVjaW1hbHMNCj4+IC0JCSAqLw0KPj4gLQkJc19nYWluW2NdID0gKEhJ U1RfRU5UUklFUyA8PCA5KSAvDQo+PiAtCQkJKGN0cmxzLT5oaXN0X21pbm1heFtjXVtISVNUX01B WF9JTkRFWF0gLQ0KPj4gLQkJCWN0cmxzLT5oaXN0X21pbm1heFtjXVtISVNUX01JTl9JTkRFWF0g KyAxKTsNCj4+IC0NCj4+IC0JCS8qDQo+PiAtCQkgKiBOb3cgd2UgaGF2ZSB0byBjb21wdXRlIHRo ZSBnYWluIHcuci50LiB0aGUgYXZlcmFnZS4NCj4+IC0JCSAqIEFkZC9sb3NlIGdhaW4gdG8gdGhl IGNvbXBvbmVudCB0b3dhcmRzIHRoZSBhdmVyYWdlLg0KPj4gLQkJICogSWYgaXQgaGFwcGVucyB0 aGF0IHRoZSBjb21wb25lbnQgaXMgemVybywgdXNlIHRoZQ0KPj4gLQkJICogZml4ZWQgcG9pbnQg dmFsdWUgOiAxLjAgZ2Fpbi4NCj4+IC0JCSAqLw0KPj4gLQkJaWYgKGhpc3RfY291bnRbY10pDQo+ PiAtCQkJZ3dfZ2FpbltjXSA9IGRpdl91NjQoYXZnIDw8IDksIGhpc3RfY291bnRbY10pOw0KPj4g LQkJZWxzZQ0KPj4gLQkJCWd3X2dhaW5bY10gPSAxIDw8IDk7DQo+PiAtDQo+PiAtCQkvKiBtdWx0 aXBseSBib3RoIGdhaW5zIGFuZCBhZGp1c3QgZm9yIGRlY2ltYWxzICovDQo+PiAtCQljdHJscy0+ Z2FpbltjXSA9IHNfZ2FpbltjXSAqIGd3X2dhaW5bY107DQo+PiAtCQljdHJscy0+Z2FpbltjXSA+ Pj0gOTsNCj4+IC0JfQ0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgdm9pZCBpc2NfYXdiX3dvcmso c3RydWN0IHdvcmtfc3RydWN0ICp3KQ0KPj4gLXsNCj4+IC0Jc3RydWN0IGlzY19kZXZpY2UgKmlz YyA9DQo+PiAtCQljb250YWluZXJfb2Yodywgc3RydWN0IGlzY19kZXZpY2UsIGF3Yl93b3JrKTsN Cj4+IC0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQo+PiAtCXN0cnVjdCBp c2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQo+PiAtCXUzMiBoaXN0X2lkID0gY3RybHMt Pmhpc3RfaWQ7DQo+PiAtCXUzMiBiYXlzZWw7DQo+PiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ PiAtCXUzMiBtaW4sIG1heDsNCj4+IC0NCj4+IC0JLyogc3RyZWFtaW5nIGlzIG5vdCBhY3RpdmUg YW55bW9yZSAqLw0KPj4gLQlpZiAoaXNjLT5zdG9wKQ0KPj4gLQkJcmV0dXJuOw0KPj4gLQ0KPj4g LQlpZiAoY3RybHMtPmhpc3Rfc3RhdCAhPSBISVNUX0VOQUJMRUQpDQo+PiAtCQlyZXR1cm47DQo+ PiAtDQo+PiAtCWlzY19oaXN0X2NvdW50KGlzYywgJm1pbiwgJm1heCk7DQo+PiAtCWN0cmxzLT5o aXN0X21pbm1heFtoaXN0X2lkXVtISVNUX01JTl9JTkRFWF0gPSBtaW47DQo+PiAtCWN0cmxzLT5o aXN0X21pbm1heFtoaXN0X2lkXVtISVNUX01BWF9JTkRFWF0gPSBtYXg7DQo+PiAtDQo+PiAtCWlm IChoaXN0X2lkICE9IElTQ19ISVNfQ0ZHX01PREVfQikgew0KPj4gLQkJaGlzdF9pZCsrOw0KPj4g LQl9IGVsc2Ugew0KPj4gLQkJaXNjX3diX3VwZGF0ZShjdHJscyk7DQo+PiAtCQloaXN0X2lkID0g SVNDX0hJU19DRkdfTU9ERV9HUjsNCj4+IC0JfQ0KPj4gLQ0KPj4gLQljdHJscy0+aGlzdF9pZCA9 IGhpc3RfaWQ7DQo+PiAtCWJheXNlbCA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+Y2ZhX2JheWNm ZyA8PCBJU0NfSElTX0NGR19CQVlTRUxfU0hJRlQ7DQo+PiAtDQo+PiAtCS8qIGlmIG5vIG1vcmUg YXV0byB3aGl0ZSBiYWxhbmNlLCByZXNldCBjb250cm9scy4gKi8NCj4+IC0JaWYgKGN0cmxzLT5h d2IgPT0gSVNDX1dCX05PTkUpDQo+PiAtCQlpc2NfcmVzZXRfYXdiX2N0cmxzKGlzYyk7DQo+PiAt DQo+PiAtCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNjLT5kZXYpOw0KPj4gLQ0KPj4gLQkvKg0KPj4g LQkgKiBvbmx5IHVwZGF0ZSBpZiB3ZSBoYXZlIGFsbCB0aGUgcmVxdWlyZWQgaGlzdG9ncmFtcyBh bmQgY29udHJvbHMNCj4+IC0JICogaWYgYXdiIGhhcyBiZWVuIGRpc2FibGVkLCB3ZSBuZWVkIHRv IHJlc2V0IHJlZ2lzdGVycyBhcyB3ZWxsLg0KPj4gLQkgKi8NCj4+IC0JaWYgKGhpc3RfaWQgPT0g SVNDX0hJU19DRkdfTU9ERV9HUiB8fCBjdHJscy0+YXdiID09IElTQ19XQl9OT05FKSB7DQo+PiAt CQkvKg0KPj4gLQkJICogSXQgbWF5IGhhcHBlbiB0aGF0IERNQSBEb25lIElSUSB3aWxsIHRyaWdn ZXIgd2hpbGUgd2UgYXJlDQo+PiAtCQkgKiB1cGRhdGluZyB3aGl0ZSBiYWxhbmNlIHJlZ2lzdGVy cyBoZXJlLg0KPj4gLQkJICogSW4gdGhhdCBjYXNlLCBvbmx5IHBhcnRzIG9mIHRoZSBjb250cm9s cyBoYXZlIGJlZW4gdXBkYXRlZC4NCj4+IC0JCSAqIFdlIGNhbiBhdm9pZCB0aGF0IGJ5IGxvY2tp bmcgdGhlIHNlY3Rpb24uDQo+PiAtCQkgKi8NCj4+IC0JCXNwaW5fbG9ja19pcnFzYXZlKCZpc2Mt PmF3Yl9sb2NrLCBmbGFncyk7DQo+PiAtCQlpc2NfdXBkYXRlX2F3Yl9jdHJscyhpc2MpOw0KPj4g LQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5hd2JfbG9jaywgZmxhZ3MpOw0KPj4gLQ0K Pj4gLQkJLyoNCj4+IC0JCSAqIGlmIHdlIGFyZSBkb2luZyBqdXN0IHRoZSBvbmUgdGltZSB3aGl0 ZSBiYWxhbmNlIGFkanVzdG1lbnQsDQo+PiAtCQkgKiB3ZSBhcmUgYmFzaWNhbGx5IGRvbmUuDQo+ PiAtCQkgKi8NCj4+IC0JCWlmIChjdHJscy0+YXdiID09IElTQ19XQl9PTkVUSU1FKSB7DQo+PiAt CQkJdjRsMl9pbmZvKCZpc2MtPnY0bDJfZGV2LA0KPj4gLQkJCQkgICJDb21wbGV0ZWQgb25lIHRp bWUgd2hpdGUtYmFsYW5jZSBhZGp1c3RtZW50LlxuIik7DQo+PiAtCQkJY3RybHMtPmF3YiA9IElT Q19XQl9OT05FOw0KPj4gLQkJfQ0KPj4gLQl9DQo+PiAtCXJlZ21hcF93cml0ZShyZWdtYXAsIElT Q19ISVNfQ0ZHLCBoaXN0X2lkIHwgYmF5c2VsIHwgSVNDX0hJU19DRkdfUkFSKTsNCj4+IC0JaXNj X3VwZGF0ZV9wcm9maWxlKGlzYyk7DQo+PiAtCS8qIGlmIGF3YiBoYXMgYmVlbiBkaXNhYmxlZCwg d2UgZG9uJ3QgbmVlZCB0byBzdGFydCBhbm90aGVyIGhpc3RvZ3JhbSAqLw0KPj4gLQlpZiAoY3Ry bHMtPmF3YikNCj4+IC0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJM X0hJU1JFUSk7DQo+PiAtDQo+PiAtCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNjLT5kZXYpOw0KPj4g LX0NCj4+IC0NCj4+IC1zdGF0aWMgaW50IGlzY19zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3Ry bCkNCj4+IC17DQo+PiAtCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJfb2YoY3Ry bC0+aGFuZGxlciwNCj4+IC0JCQkJCSAgICAgc3RydWN0IGlzY19kZXZpY2UsIGN0cmxzLmhhbmRs ZXIpOw0KPj4gLQlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KPj4gLQ0K Pj4gLQlpZiAoY3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19JTkFDVElWRSkNCj4+IC0JCXJl dHVybiAwOw0KPj4gLQ0KPj4gLQlzd2l0Y2ggKGN0cmwtPmlkKSB7DQo+PiAtCWNhc2UgVjRMMl9D SURfQlJJR0hUTkVTUzoNCj4+IC0JCWN0cmxzLT5icmlnaHRuZXNzID0gY3RybC0+dmFsICYgSVND X0NCQ19CUklHSFRfTUFTSzsNCj4+IC0JCWJyZWFrOw0KPj4gLQljYXNlIFY0TDJfQ0lEX0NPTlRS QVNUOg0KPj4gLQkJY3RybHMtPmNvbnRyYXN0ID0gY3RybC0+dmFsICYgSVNDX0NCQ19DT05UUkFT VF9NQVNLOw0KPj4gLQkJYnJlYWs7DQo+PiAtCWNhc2UgVjRMMl9DSURfR0FNTUE6DQo+PiAtCQlj dHJscy0+Z2FtbWFfaW5kZXggPSBjdHJsLT52YWw7DQo+PiAtCQlicmVhazsNCj4+IC0JY2FzZSBW NEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6DQo+PiAtCQlpZiAoY3RybC0+dmFsID09IDEpDQo+ PiAtCQkJY3RybHMtPmF3YiA9IElTQ19XQl9BVVRPOw0KPj4gLQkJZWxzZQ0KPj4gLQkJCWN0cmxz LT5hd2IgPSBJU0NfV0JfTk9ORTsNCj4+IC0NCj4+IC0JCS8qIHdlIGRpZCBub3QgY29uZmlndXJl IElTQyB5ZXQgKi8NCj4+IC0JCWlmICghaXNjLT5jb25maWcuc2RfZm9ybWF0KQ0KPj4gLQkJCWJy ZWFrOw0KPj4gLQ0KPj4gLQkJaWYgKGN0cmxzLT5oaXN0X3N0YXQgIT0gSElTVF9FTkFCTEVEKQ0K Pj4gLQkJCWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsNCj4+IC0NCj4+IC0JCWlmIChpc2MtPmN0 cmxzLmF3YiA9PSBJU0NfV0JfQVVUTyAmJg0KPj4gLQkJICAgIHZiMl9pc19zdHJlYW1pbmcoJmlz Yy0+dmIyX3ZpZHEpICYmDQo+PiAtCQkgICAgSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT5jb25maWcu c2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KPj4gLQkJCWlzY19zZXRfaGlzdG9ncmFtKGlzYywgdHJ1 ZSk7DQo+PiAtDQo+PiAtCQlicmVhazsNCj4+IC0JY2FzZSBWNEwyX0NJRF9ET19XSElURV9CQUxB TkNFOg0KPj4gLQkJLyogaWYgQVdCIGlzIGVuYWJsZWQsIGRvIG5vdGhpbmcgKi8NCj4+IC0JCWlm IChjdHJscy0+YXdiID09IElTQ19XQl9BVVRPKQ0KPj4gLQkJCXJldHVybiAwOw0KPj4gLQ0KPj4g LQkJY3RybHMtPmF3YiA9IElTQ19XQl9PTkVUSU1FOw0KPj4gLQkJaXNjX3NldF9oaXN0b2dyYW0o aXNjLCB0cnVlKTsNCj4+IC0JCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2RldiwNCj4+ IC0JCQkgIk9uZSB0aW1lIHdoaXRlLWJhbGFuY2Ugc3RhcnRlZC5cbiIpOw0KPj4gLQkJYnJlYWs7 DQo+PiAtCWRlZmF1bHQ6DQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4+IC0JfQ0KPj4gLQ0KPj4g LQlyZXR1cm4gMDsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0 cmxfb3BzIGlzY19jdHJsX29wcyA9IHsNCj4+IC0JLnNfY3RybAk9IGlzY19zX2N0cmwsDQo+PiAt fTsNCj4+IC0NCj4+IC1zdGF0aWMgaW50IGlzY19jdHJsX2luaXQoc3RydWN0IGlzY19kZXZpY2Ug KmlzYykNCj4+IC17DQo+PiAtCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzICpvcHMgPSAmaXNj X2N0cmxfb3BzOw0KPj4gLQlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0K Pj4gLQlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCA9ICZjdHJscy0+aGFuZGxlcjsNCj4+ IC0JaW50IHJldDsNCj4+IC0NCj4+IC0JY3RybHMtPmhpc3Rfc3RhdCA9IEhJU1RfSU5JVDsNCj4+ IC0JaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2MpOw0KPj4gLQ0KPj4gLQlyZXQgPSB2NGwyX2N0cmxf aGFuZGxlcl9pbml0KGhkbCwgNSk7DQo+PiAtCWlmIChyZXQgPCAwKQ0KPj4gLQkJcmV0dXJuIHJl dDsNCj4+IC0NCj4+IC0JY3RybHMtPmJyaWdodG5lc3MgPSAwOw0KPj4gLQljdHJscy0+Y29udHJh c3QgPSAyNTY7DQo+PiAtDQo+PiAtCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJ RF9CUklHSFRORVNTLCAtMTAyNCwgMTAyMywgMSwgMCk7DQo+PiAtCXY0bDJfY3RybF9uZXdfc3Rk KGhkbCwgb3BzLCBWNEwyX0NJRF9DT05UUkFTVCwgLTIwNDgsIDIwNDcsIDEsIDI1Nik7DQo+PiAt CXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9HQU1NQSwgMCwgR0FNTUFfTUFY LCAxLCAyKTsNCj4+IC0JdjRsMl9jdHJsX25ld19zdGQoaGRsLCBvcHMsIFY0TDJfQ0lEX0FVVE9f V0hJVEVfQkFMQU5DRSwgMCwgMSwgMSwgMSk7DQo+PiAtDQo+PiAtCS8qIGRvX3doaXRlX2JhbGFu Y2UgaXMgYSBidXR0b24sIHNvIG1pbixtYXgsc3RlcCxkZWZhdWx0IGFyZSBpZ25vcmVkICovDQo+ PiAtCWlzYy0+ZG9fd2JfY3RybCA9IHY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJ RF9ET19XSElURV9CQUxBTkNFLA0KPj4gLQkJCQkJICAgIDAsIDAsIDAsIDApOw0KPj4gLQ0KPj4g LQl2NGwyX2N0cmxfYWN0aXZhdGUoaXNjLT5kb193Yl9jdHJsLCBmYWxzZSk7DQo+PiAtDQo+PiAt CXY0bDJfY3RybF9oYW5kbGVyX3NldHVwKGhkbCk7DQo+PiAtDQo+PiAtCXJldHVybiAwOw0KPj4g LX0NCj4+IC0NCj4+IC1zdGF0aWMgaW50IGlzY19hc3luY19ib3VuZChzdHJ1Y3QgdjRsMl9hc3lu Y19ub3RpZmllciAqbm90aWZpZXIsDQo+PiAtCQkJICAgIHN0cnVjdCB2NGwyX3N1YmRldiAqc3Vi ZGV2LA0KPj4gLQkJCSAgICBzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYgKmFzZCkNCj4+IC17DQo+ PiAtCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJfb2Yobm90aWZpZXItPnY0bDJf ZGV2LA0KPj4gLQkJCQkJICAgICAgc3RydWN0IGlzY19kZXZpY2UsIHY0bDJfZGV2KTsNCj4+IC0J c3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXZfZW50aXR5ID0NCj4+IC0JCWNvbnRhaW5l cl9vZihub3RpZmllciwgc3RydWN0IGlzY19zdWJkZXZfZW50aXR5LCBub3RpZmllcik7DQo+PiAt DQo+PiAtCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKCZpc2MtPnZpZGVvX2RldikpIHsNCj4+IC0J CXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAib25seSBzdXBwb3J0cyBvbmUgc3ViLWRldmljZS5c biIpOw0KPj4gLQkJcmV0dXJuIC1FQlVTWTsNCj4+IC0JfQ0KPj4gLQ0KPj4gLQlzdWJkZXZfZW50 aXR5LT5zZCA9IHN1YmRldjsNCj4+IC0NCj4+IC0JcmV0dXJuIDA7DQo+PiAtfQ0KPj4gLQ0KPj4g LXN0YXRpYyB2b2lkIGlzY19hc3luY191bmJpbmQoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIg Km5vdGlmaWVyLA0KPj4gLQkJCSAgICAgIHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LA0KPj4g LQkJCSAgICAgIHN0cnVjdCB2NGwyX2FzeW5jX3N1YmRldiAqYXNkKQ0KPj4gLXsNCj4+IC0Jc3Ry dWN0IGlzY19kZXZpY2UgKmlzYyA9IGNvbnRhaW5lcl9vZihub3RpZmllci0+djRsMl9kZXYsDQo+ PiAtCQkJCQkgICAgICBzdHJ1Y3QgaXNjX2RldmljZSwgdjRsMl9kZXYpOw0KPj4gLQljYW5jZWxf d29ya19zeW5jKCZpc2MtPmF3Yl93b3JrKTsNCj4+IC0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uo JmlzYy0+dmlkZW9fZGV2KTsNCj4+IC0JdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmaXNjLT5jdHJs cy5oYW5kbGVyKTsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIHN0cnVjdCBpc2NfZm9ybWF0ICpm aW5kX2Zvcm1hdF9ieV9jb2RlKHVuc2lnbmVkIGludCBjb2RlLCBpbnQgKmluZGV4KQ0KPj4gLXsN Cj4+IC0Jc3RydWN0IGlzY19mb3JtYXQgKmZtdCA9ICZmb3JtYXRzX2xpc3RbMF07DQo+PiAtCXVu c2lnbmVkIGludCBpOw0KPj4gLQ0KPj4gLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmb3Jt YXRzX2xpc3QpOyBpKyspIHsNCj4+IC0JCWlmIChmbXQtPm1idXNfY29kZSA9PSBjb2RlKSB7DQo+ PiAtCQkJKmluZGV4ID0gaTsNCj4+IC0JCQlyZXR1cm4gZm10Ow0KPj4gLQkJfQ0KPj4gLQ0KPj4g LQkJZm10Kys7DQo+PiAtCX0NCj4+IC0NCj4+IC0JcmV0dXJuIE5VTEw7DQo+PiAtfQ0KPj4gLQ0K Pj4gLXN0YXRpYyBpbnQgaXNjX2Zvcm1hdHNfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0K Pj4gLXsNCj4+IC0Jc3RydWN0IGlzY19mb3JtYXQgKmZtdDsNCj4+IC0Jc3RydWN0IHY0bDJfc3Vi ZGV2ICpzdWJkZXYgPSBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZDsNCj4+IC0JdW5zaWduZWQgaW50 IG51bV9mbXRzLCBpLCBqOw0KPj4gLQl1MzIgbGlzdF9zaXplID0gQVJSQVlfU0laRShmb3JtYXRz X2xpc3QpOw0KPj4gLQlzdHJ1Y3QgdjRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW0gbWJ1c19jb2Rl ID0gew0KPj4gLQkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCj4+IC0JfTsN Cj4+IC0NCj4+IC0JbnVtX2ZtdHMgPSAwOw0KPj4gLQl3aGlsZSAoIXY0bDJfc3ViZGV2X2NhbGwo c3ViZGV2LCBwYWQsIGVudW1fbWJ1c19jb2RlLA0KPj4gLQkgICAgICAgTlVMTCwgJm1idXNfY29k ZSkpIHsNCj4+IC0JCW1idXNfY29kZS5pbmRleCsrOw0KPj4gLQ0KPj4gLQkJZm10ID0gZmluZF9m b3JtYXRfYnlfY29kZShtYnVzX2NvZGUuY29kZSwgJmkpOw0KPj4gLQkJaWYgKCFmbXQpIHsNCj4+ IC0JCQl2NGwyX3dhcm4oJmlzYy0+djRsMl9kZXYsICJNYnVzIGNvZGUgJXggbm90IHN1cHBvcnRl ZFxuIiwNCj4+IC0JCQkJICBtYnVzX2NvZGUuY29kZSk7DQo+PiAtCQkJY29udGludWU7DQo+PiAt CQl9DQo+PiAtDQo+PiAtCQlmbXQtPnNkX3N1cHBvcnQgPSB0cnVlOw0KPj4gLQkJbnVtX2ZtdHMr KzsNCj4+IC0JfQ0KPj4gLQ0KPj4gLQlpZiAoIW51bV9mbXRzKQ0KPj4gLQkJcmV0dXJuIC1FTlhJ TzsNCj4+IC0NCj4+IC0JaXNjLT5udW1fdXNlcl9mb3JtYXRzID0gbnVtX2ZtdHM7DQo+PiAtCWlz Yy0+dXNlcl9mb3JtYXRzID0gZGV2bV9rY2FsbG9jKGlzYy0+ZGV2LA0KPj4gLQkJCQkJIG51bV9m bXRzLCBzaXplb2YoKmlzYy0+dXNlcl9mb3JtYXRzKSwNCj4+IC0JCQkJCSBHRlBfS0VSTkVMKTsN Cj4+IC0JaWYgKCFpc2MtPnVzZXJfZm9ybWF0cykNCj4+IC0JCXJldHVybiAtRU5PTUVNOw0KPj4g LQ0KPj4gLQlmbXQgPSAmZm9ybWF0c19saXN0WzBdOw0KPj4gLQlmb3IgKGkgPSAwLCBqID0gMDsg aSA8IGxpc3Rfc2l6ZTsgaSsrKSB7DQo+PiAtCQlpZiAoZm10LT5zZF9zdXBwb3J0KQ0KPj4gLQkJ CWlzYy0+dXNlcl9mb3JtYXRzW2orK10gPSBmbXQ7DQo+PiAtCQlmbXQrKzsNCj4+IC0JfQ0KPj4g LQ0KPj4gLQlyZXR1cm4gMDsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIGludCBpc2Nfc2V0X2Rl ZmF1bHRfZm10KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQo+PiAtew0KPj4gLQlzdHJ1Y3QgdjRs Ml9mb3JtYXQgZiA9IHsNCj4+IC0JCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJF LA0KPj4gLQkJLmZtdC5waXggPSB7DQo+PiAtCQkJLndpZHRoCQk9IFZHQV9XSURUSCwNCj4+IC0J CQkuaGVpZ2h0CQk9IFZHQV9IRUlHSFQsDQo+PiAtCQkJLmZpZWxkCQk9IFY0TDJfRklFTERfTk9O RSwNCj4+IC0JCQkucGl4ZWxmb3JtYXQJPSBpc2MtPnVzZXJfZm9ybWF0c1swXS0+Zm91cmNjLA0K Pj4gLQkJfSwNCj4+IC0JfTsNCj4+IC0JaW50IHJldDsNCj4+IC0NCj4+IC0JcmV0ID0gaXNjX3Ry eV9mbXQoaXNjLCAmZiwgTlVMTCk7DQo+PiAtCWlmIChyZXQpDQo+PiAtCQlyZXR1cm4gcmV0Ow0K Pj4gLQ0KPj4gLQlpc2MtPmZtdCA9IGY7DQo+PiAtCXJldHVybiAwOw0KPj4gLX0NCj4+IC0NCj4+ IC1zdGF0aWMgaW50IGlzY19hc3luY19jb21wbGV0ZShzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmll ciAqbm90aWZpZXIpDQo+PiAtew0KPj4gLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gY29udGFp bmVyX29mKG5vdGlmaWVyLT52NGwyX2RldiwNCj4+IC0JCQkJCSAgICAgIHN0cnVjdCBpc2NfZGV2 aWNlLCB2NGwyX2Rldik7DQo+PiAtCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSAmaXNjLT52 aWRlb19kZXY7DQo+PiAtCXN0cnVjdCB2YjJfcXVldWUgKnEgPSAmaXNjLT52YjJfdmlkcTsNCj4+ IC0JaW50IHJldDsNCj4+IC0NCj4+IC0JSU5JVF9XT1JLKCZpc2MtPmF3Yl93b3JrLCBpc2NfYXdi X3dvcmspOw0KPj4gLQ0KPj4gLQlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXZfbm9k ZXMoJmlzYy0+djRsMl9kZXYpOw0KPj4gLQlpZiAocmV0IDwgMCkgew0KPj4gLQkJdjRsMl9lcnIo JmlzYy0+djRsMl9kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3ViZGV2IG5vZGVzXG4iKTsNCj4+ IC0JCXJldHVybiByZXQ7DQo+PiAtCX0NCj4+IC0NCj4+IC0JaXNjLT5jdXJyZW50X3N1YmRldiA9 IGNvbnRhaW5lcl9vZihub3RpZmllciwNCj4+IC0JCQkJCSAgIHN0cnVjdCBpc2Nfc3ViZGV2X2Vu dGl0eSwgbm90aWZpZXIpOw0KPj4gLQltdXRleF9pbml0KCZpc2MtPmxvY2spOw0KPj4gLQlpbml0 X2NvbXBsZXRpb24oJmlzYy0+Y29tcCk7DQo+PiAtDQo+PiAtCS8qIEluaXRpYWxpemUgdmlkZW9i dWYyIHF1ZXVlICovDQo+PiAtCXEtPnR5cGUJCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVS RTsNCj4+IC0JcS0+aW9fbW9kZXMJCT0gVkIyX01NQVAgfCBWQjJfRE1BQlVGIHwgVkIyX1JFQUQ7 DQo+PiAtCXEtPmRydl9wcml2CQk9IGlzYzsNCj4+IC0JcS0+YnVmX3N0cnVjdF9zaXplCT0gc2l6 ZW9mKHN0cnVjdCBpc2NfYnVmZmVyKTsNCj4+IC0JcS0+b3BzCQkJPSAmaXNjX3ZiMl9vcHM7DQo+ PiAtCXEtPm1lbV9vcHMJCT0gJnZiMl9kbWFfY29udGlnX21lbW9wczsNCj4+IC0JcS0+dGltZXN0 YW1wX2ZsYWdzCT0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDOw0KPj4gLQlxLT5s b2NrCQkJPSAmaXNjLT5sb2NrOw0KPj4gLQlxLT5taW5fYnVmZmVyc19uZWVkZWQJPSAxOw0KPj4g LQlxLT5kZXYJCQk9IGlzYy0+ZGV2Ow0KPj4gLQ0KPj4gLQlyZXQgPSB2YjJfcXVldWVfaW5pdChx KTsNCj4+IC0JaWYgKHJldCA8IDApIHsNCj4+IC0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0K Pj4gLQkJCSAidmIyX3F1ZXVlX2luaXQoKSBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KPj4gLQkJcmV0 dXJuIHJldDsNCj4+IC0JfQ0KPj4gLQ0KPj4gLQkvKiBJbml0IHZpZGVvIGRtYSBxdWV1ZXMgKi8N Cj4+IC0JSU5JVF9MSVNUX0hFQUQoJmlzYy0+ZG1hX3F1ZXVlKTsNCj4+IC0Jc3Bpbl9sb2NrX2lu aXQoJmlzYy0+ZG1hX3F1ZXVlX2xvY2spOw0KPj4gLQlzcGluX2xvY2tfaW5pdCgmaXNjLT5hd2Jf bG9jayk7DQo+PiAtDQo+PiAtCXJldCA9IGlzY19mb3JtYXRzX2luaXQoaXNjKTsNCj4+IC0JaWYg KHJldCA8IDApIHsNCj4+IC0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KPj4gLQkJCSAiSW5p dCBmb3JtYXQgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCj4+IC0JCXJldHVybiByZXQ7DQo+PiAtCX0N Cj4+IC0NCj4+IC0JcmV0ID0gaXNjX3NldF9kZWZhdWx0X2ZtdChpc2MpOw0KPj4gLQlpZiAocmV0 KSB7DQo+PiAtCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgIkNvdWxkIG5vdCBzZXQgZGVmYXVs dCBmb3JtYXRcbiIpOw0KPj4gLQkJcmV0dXJuIHJldDsNCj4+IC0JfQ0KPj4gLQ0KPj4gLQlyZXQg PSBpc2NfY3RybF9pbml0KGlzYyk7DQo+PiAtCWlmIChyZXQpIHsNCj4+IC0JCXY0bDJfZXJyKCZp c2MtPnY0bDJfZGV2LCAiSW5pdCBpc2MgY3Ryb2xzIGZhaWxlZDogJWRcbiIsIHJldCk7DQo+PiAt CQlyZXR1cm4gcmV0Ow0KPj4gLQl9DQo+PiAtDQo+PiAtCS8qIFJlZ2lzdGVyIHZpZGVvIGRldmlj ZSAqLw0KPj4gLQlzdHJzY3B5KHZkZXYtPm5hbWUsIEFUTUVMX0lTQ19OQU1FLCBzaXplb2YodmRl di0+bmFtZSkpOw0KPj4gLQl2ZGV2LT5yZWxlYXNlCQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2Vt cHR5Ow0KPj4gLQl2ZGV2LT5mb3BzCQk9ICZpc2NfZm9wczsNCj4+IC0JdmRldi0+aW9jdGxfb3Bz CQk9ICZpc2NfaW9jdGxfb3BzOw0KPj4gLQl2ZGV2LT52NGwyX2RldgkJPSAmaXNjLT52NGwyX2Rl djsNCj4+IC0JdmRldi0+dmZsX2RpcgkJPSBWRkxfRElSX1JYOw0KPj4gLQl2ZGV2LT5xdWV1ZQkJ PSBxOw0KPj4gLQl2ZGV2LT5sb2NrCQk9ICZpc2MtPmxvY2s7DQo+PiAtCXZkZXYtPmN0cmxfaGFu ZGxlcgk9ICZpc2MtPmN0cmxzLmhhbmRsZXI7DQo+PiAtCXZkZXYtPmRldmljZV9jYXBzCT0gVjRM Ml9DQVBfU1RSRUFNSU5HIHwgVjRMMl9DQVBfVklERU9fQ0FQVFVSRTsNCj4+IC0JdmlkZW9fc2V0 X2RydmRhdGEodmRldiwgaXNjKTsNCj4+IC0NCj4+IC0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2 aWNlKHZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsNCj4+IC0JaWYgKHJldCA8IDApIHsNCj4+ IC0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KPj4gLQkJCSAidmlkZW9fcmVnaXN0ZXJfZGV2 aWNlIGZhaWxlZDogJWRcbiIsIHJldCk7DQo+PiAtCQlyZXR1cm4gcmV0Ow0KPj4gLQl9DQo+PiAt DQo+PiAtCXJldHVybiAwOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgY29uc3Qgc3RydWN0IHY0 bDJfYXN5bmNfbm90aWZpZXJfb3BlcmF0aW9ucyBpc2NfYXN5bmNfb3BzID0gew0KPj4gLQkuYm91 bmQgPSBpc2NfYXN5bmNfYm91bmQsDQo+PiAtCS51bmJpbmQgPSBpc2NfYXN5bmNfdW5iaW5kLA0K Pj4gLQkuY29tcGxldGUgPSBpc2NfYXN5bmNfY29tcGxldGUsDQo+PiAtfTsNCj4+IC0NCj4+IC1z dGF0aWMgdm9pZCBpc2Nfc3ViZGV2X2NsZWFudXAoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCj4+ IC17DQo+PiAtCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eTsNCj4+IC0N Cj4+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShzdWJkZXZfZW50aXR5LCAmaXNjLT5zdWJkZXZfZW50 aXRpZXMsIGxpc3QpIHsNCj4+IC0JCXY0bDJfYXN5bmNfbm90aWZpZXJfdW5yZWdpc3Rlcigmc3Vi ZGV2X2VudGl0eS0+bm90aWZpZXIpOw0KPj4gLQkJdjRsMl9hc3luY19ub3RpZmllcl9jbGVhbnVw KCZzdWJkZXZfZW50aXR5LT5ub3RpZmllcik7DQo+PiAtCX0NCj4+IC0NCj4+IC0JSU5JVF9MSVNU X0hFQUQoJmlzYy0+c3ViZGV2X2VudGl0aWVzKTsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIGlu dCBpc2NfcGlwZWxpbmVfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KPj4gLXsNCj4+IC0J c3RydWN0IGRldmljZSAqZGV2ID0gaXNjLT5kZXY7DQo+PiAtCXN0cnVjdCByZWdtYXAgKnJlZ21h cCA9IGlzYy0+cmVnbWFwOw0KPj4gLQlzdHJ1Y3QgcmVnbWFwX2ZpZWxkICpyZWdzOw0KPj4gLQl1 bnNpZ25lZCBpbnQgaTsNCj4+IC0NCj4+IC0JLyogV0ItLT5DRkEtLT5DQy0tPkdBTS0tPkNTQy0t PkNCQy0tPlNVQjQyMi0tPlNVQjQyMCAqLw0KPj4gLQljb25zdCBzdHJ1Y3QgcmVnX2ZpZWxkIHJl Z2ZpZWxkc1tJU0NfUElQRV9MSU5FX05PREVfTlVNXSA9IHsNCj4+IC0JCVJFR19GSUVMRChJU0Nf V0JfQ1RSTCwgMCwgMCksDQo+PiAtCQlSRUdfRklFTEQoSVNDX0NGQV9DVFJMLCAwLCAwKSwNCj4+ IC0JCVJFR19GSUVMRChJU0NfQ0NfQ1RSTCwgMCwgMCksDQo+PiAtCQlSRUdfRklFTEQoSVNDX0dB TV9DVFJMLCAwLCAwKSwNCj4+IC0JCVJFR19GSUVMRChJU0NfR0FNX0NUUkwsIDEsIDEpLA0KPj4g LQkJUkVHX0ZJRUxEKElTQ19HQU1fQ1RSTCwgMiwgMiksDQo+PiAtCQlSRUdfRklFTEQoSVNDX0dB TV9DVFJMLCAzLCAzKSwNCj4+IC0JCVJFR19GSUVMRChJU0NfQ1NDX0NUUkwsIDAsIDApLA0KPj4g LQkJUkVHX0ZJRUxEKElTQ19DQkNfQ1RSTCwgMCwgMCksDQo+PiAtCQlSRUdfRklFTEQoSVNDX1NV QjQyMl9DVFJMLCAwLCAwKSwNCj4+IC0JCVJFR19GSUVMRChJU0NfU1VCNDIwX0NUUkwsIDAsIDAp LA0KPj4gLQl9Ow0KPj4gLQ0KPj4gLQlmb3IgKGkgPSAwOyBpIDwgSVNDX1BJUEVfTElORV9OT0RF X05VTTsgaSsrKSB7DQo+PiAtCQlyZWdzID0gZGV2bV9yZWdtYXBfZmllbGRfYWxsb2MoZGV2LCBy ZWdtYXAsIHJlZ2ZpZWxkc1tpXSk7DQo+PiAtCQlpZiAoSVNfRVJSKHJlZ3MpKQ0KPj4gLQkJCXJl dHVybiBQVFJfRVJSKHJlZ3MpOw0KPj4gLQ0KPj4gLQkJaXNjLT5waXBlbGluZVtpXSA9ICByZWdz Ow0KPj4gLQl9DQo+PiAtDQo+PiAtCXJldHVybiAwOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMg aW50IGlzY19wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpc2NfZGV2aWNlICpp c2MpDQo+PiAtew0KPj4gLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOw0K Pj4gLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVwbiA9IE5VTEwsICpyZW07DQo+PiAtCXN0cnVjdCBp c2Nfc3ViZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eTsNCj4+IC0JdW5zaWduZWQgaW50IGZsYWdz Ow0KPj4gLQlpbnQgcmV0Ow0KPj4gLQ0KPj4gLQlJTklUX0xJU1RfSEVBRCgmaXNjLT5zdWJkZXZf ZW50aXRpZXMpOw0KPj4gLQ0KPj4gLQl3aGlsZSAoMSkgew0KPj4gLQkJc3RydWN0IHY0bDJfZndu b2RlX2VuZHBvaW50IHY0bDJfZXBuID0geyAuYnVzX3R5cGUgPSAwIH07DQo+PiAtDQo+PiAtCQll cG4gPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChucCwgZXBuKTsNCj4+IC0JCWlmICghZXBu KQ0KPj4gLQkJCXJldHVybiAwOw0KPj4gLQ0KPj4gLQkJcmVtID0gb2ZfZ3JhcGhfZ2V0X3JlbW90 ZV9wb3J0X3BhcmVudChlcG4pOw0KPj4gLQkJaWYgKCFyZW0pIHsNCj4+IC0JCQlkZXZfbm90aWNl KGRldiwgIlJlbW90ZSBkZXZpY2UgYXQgJXBPRiBub3QgZm91bmRcbiIsDQo+PiAtCQkJCSAgIGVw bik7DQo+PiAtCQkJY29udGludWU7DQo+PiAtCQl9DQo+PiAtDQo+PiAtCQlyZXQgPSB2NGwyX2Z3 bm9kZV9lbmRwb2ludF9wYXJzZShvZl9md25vZGVfaGFuZGxlKGVwbiksDQo+PiAtCQkJCQkJICZ2 NGwyX2Vwbik7DQo+PiAtCQlpZiAocmV0KSB7DQo+PiAtCQkJb2Zfbm9kZV9wdXQocmVtKTsNCj4+ IC0JCQlyZXQgPSAtRUlOVkFMOw0KPj4gLQkJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IHBhcnNl IHRoZSBlbmRwb2ludFxuIik7DQo+PiAtCQkJYnJlYWs7DQo+PiAtCQl9DQo+PiAtDQo+PiAtCQlz dWJkZXZfZW50aXR5ID0gZGV2bV9remFsbG9jKGRldiwNCj4+IC0JCQkJCSAgc2l6ZW9mKCpzdWJk ZXZfZW50aXR5KSwgR0ZQX0tFUk5FTCk7DQo+PiAtCQlpZiAoIXN1YmRldl9lbnRpdHkpIHsNCj4+ IC0JCQlvZl9ub2RlX3B1dChyZW0pOw0KPj4gLQkJCXJldCA9IC1FTk9NRU07DQo+PiAtCQkJYnJl YWs7DQo+PiAtCQl9DQo+PiAtDQo+PiAtCQkvKiBhc2Qgd2lsbCBiZSBmcmVlZCBieSB0aGUgc3Vi c3lzdGVtIG9uY2UgaXQncyBhZGRlZCB0byB0aGUNCj4+IC0JCSAqIG5vdGlmaWVyIGxpc3QNCj4+ IC0JCSAqLw0KPj4gLQkJc3ViZGV2X2VudGl0eS0+YXNkID0ga3phbGxvYyhzaXplb2YoKnN1YmRl dl9lbnRpdHktPmFzZCksDQo+PiAtCQkJCQkgICAgIEdGUF9LRVJORUwpOw0KPj4gLQkJaWYgKCFz dWJkZXZfZW50aXR5LT5hc2QpIHsNCj4+IC0JCQlvZl9ub2RlX3B1dChyZW0pOw0KPj4gLQkJCXJl dCA9IC1FTk9NRU07DQo+PiAtCQkJYnJlYWs7DQo+PiAtCQl9DQo+PiAtDQo+PiAtCQlmbGFncyA9 IHY0bDJfZXBuLmJ1cy5wYXJhbGxlbC5mbGFnczsNCj4+IC0NCj4+IC0JCWlmIChmbGFncyAmIFY0 TDJfTUJVU19IU1lOQ19BQ1RJVkVfTE9XKQ0KPj4gLQkJCXN1YmRldl9lbnRpdHktPnBmZV9jZmcw ID0gSVNDX1BGRV9DRkcwX0hQT0xfTE9XOw0KPj4gLQ0KPj4gLQkJaWYgKGZsYWdzICYgVjRMMl9N QlVTX1ZTWU5DX0FDVElWRV9MT1cpDQo+PiAtCQkJc3ViZGV2X2VudGl0eS0+cGZlX2NmZzAgfD0g SVNDX1BGRV9DRkcwX1ZQT0xfTE9XOw0KPj4gLQ0KPj4gLQkJaWYgKGZsYWdzICYgVjRMMl9NQlVT X1BDTEtfU0FNUExFX0ZBTExJTkcpDQo+PiAtCQkJc3ViZGV2X2VudGl0eS0+cGZlX2NmZzAgfD0g SVNDX1BGRV9DRkcwX1BQT0xfTE9XOw0KPj4gLQ0KPj4gLQkJaWYgKHY0bDJfZXBuLmJ1c190eXBl ID09IFY0TDJfTUJVU19CVDY1NikNCj4+IC0JCQlzdWJkZXZfZW50aXR5LT5wZmVfY2ZnMCB8PSBJ U0NfUEZFX0NGRzBfQ0NJUl9DUkMgfA0KPj4gLQkJCQkJSVNDX1BGRV9DRkcwX0NDSVI2NTY7DQo+ PiAtDQo+PiAtCQlzdWJkZXZfZW50aXR5LT5hc2QtPm1hdGNoX3R5cGUgPSBWNEwyX0FTWU5DX01B VENIX0ZXTk9ERTsNCj4+IC0JCXN1YmRldl9lbnRpdHktPmFzZC0+bWF0Y2guZndub2RlID0NCj4+ IC0JCQlvZl9md25vZGVfaGFuZGxlKHJlbSk7DQo+PiAtCQlsaXN0X2FkZF90YWlsKCZzdWJkZXZf ZW50aXR5LT5saXN0LCAmaXNjLT5zdWJkZXZfZW50aXRpZXMpOw0KPj4gLQl9DQo+PiAtDQo+PiAt CW9mX25vZGVfcHV0KGVwbik7DQo+PiAtCXJldHVybiByZXQ7DQo+PiAtfQ0KPj4gLQ0KPj4gLS8q IHJlZ21hcCBjb25maWd1cmF0aW9uICovDQo+PiAtI2RlZmluZSBBVE1FTF9JU0NfUkVHX01BWCAg ICAweGJmYw0KPj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBpc2NfcmVnbWFw X2NvbmZpZyA9IHsNCj4+IC0JLnJlZ19iaXRzICAgICAgID0gMzIsDQo+PiAtCS5yZWdfc3RyaWRl ICAgICA9IDQsDQo+PiAtCS52YWxfYml0cyAgICAgICA9IDMyLA0KPj4gLQkubWF4X3JlZ2lzdGVy CT0gQVRNRUxfSVNDX1JFR19NQVgsDQo+PiAtfTsNCj4+IC0NCj4+IC1zdGF0aWMgaW50IGF0bWVs X2lzY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPj4gLXsNCj4+IC0Jc3Ry dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCj4+IC0Jc3RydWN0IGlzY19kZXZpY2UgKmlz YzsNCj4+IC0Jc3RydWN0IHJlc291cmNlICpyZXM7DQo+PiAtCXZvaWQgX19pb21lbSAqaW9fYmFz ZTsNCj4+IC0Jc3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXZfZW50aXR5Ow0KPj4gLQlp bnQgaXJxOw0KPj4gLQlpbnQgcmV0Ow0KPj4gLQ0KPj4gLQlpc2MgPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKmlzYyksIEdGUF9LRVJORUwpOw0KPj4gLQlpZiAoIWlzYykNCj4+IC0JCXJldHVy biAtRU5PTUVNOw0KPj4gLQ0KPj4gLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpc2MpOw0K Pj4gLQlpc2MtPmRldiA9IGRldjsNCj4+IC0NCj4+IC0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291 cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsNCj4+IC0JaW9fYmFzZSA9IGRldm1faW9yZW1h cF9yZXNvdXJjZShkZXYsIHJlcyk7DQo+PiAtCWlmIChJU19FUlIoaW9fYmFzZSkpDQo+PiAtCQly ZXR1cm4gUFRSX0VSUihpb19iYXNlKTsNCj4+IC0NCj4+IC0JaXNjLT5yZWdtYXAgPSBkZXZtX3Jl Z21hcF9pbml0X21taW8oZGV2LCBpb19iYXNlLCAmaXNjX3JlZ21hcF9jb25maWcpOw0KPj4gLQlp ZiAoSVNfRVJSKGlzYy0+cmVnbWFwKSkgew0KPj4gLQkJcmV0ID0gUFRSX0VSUihpc2MtPnJlZ21h cCk7DQo+PiAtCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0IHJlZ2lzdGVyIG1hcDogJWRc biIsIHJldCk7DQo+PiAtCQlyZXR1cm4gcmV0Ow0KPj4gLQl9DQo+PiAtDQo+PiAtCWlycSA9IHBs YXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQo+PiAtCWlmIChpcnEgPCAwKSB7DQo+PiAtCQlyZXQg PSBpcnE7DQo+PiAtCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgaXJxOiAlZFxuIiwgcmV0 KTsNCj4+IC0JCXJldHVybiByZXQ7DQo+PiAtCX0NCj4+IC0NCj4+IC0JcmV0ID0gZGV2bV9yZXF1 ZXN0X2lycShkZXYsIGlycSwgaXNjX2ludGVycnVwdCwgMCwNCj4+IC0JCQkgICAgICAgQVRNRUxf SVNDX05BTUUsIGlzYyk7DQo+PiAtCWlmIChyZXQgPCAwKSB7DQo+PiAtCQlkZXZfZXJyKGRldiwg ImNhbid0IHJlZ2lzdGVyIElTUiBmb3IgSVJRICV1IChyZXQ9JWkpXG4iLA0KPj4gLQkJCWlycSwg cmV0KTsNCj4+IC0JCXJldHVybiByZXQ7DQo+PiAtCX0NCj4+IC0NCj4+IC0JcmV0ID0gaXNjX3Bp cGVsaW5lX2luaXQoaXNjKTsNCj4+IC0JaWYgKHJldCkNCj4+IC0JCXJldHVybiByZXQ7DQo+PiAt DQo+PiAtCWlzYy0+aGNsb2NrID0gZGV2bV9jbGtfZ2V0KGRldiwgImhjbG9jayIpOw0KPj4gLQlp ZiAoSVNfRVJSKGlzYy0+aGNsb2NrKSkgew0KPj4gLQkJcmV0ID0gUFRSX0VSUihpc2MtPmhjbG9j ayk7DQo+PiAtCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgaGNsb2NrOiAlZFxuIiwgcmV0 KTsNCj4+IC0JCXJldHVybiByZXQ7DQo+PiAtCX0NCj4+IC0NCj4+IC0JcmV0ID0gY2xrX3ByZXBh cmVfZW5hYmxlKGlzYy0+aGNsb2NrKTsNCj4+IC0JaWYgKHJldCkgew0KPj4gLQkJZGV2X2Vycihk ZXYsICJmYWlsZWQgdG8gZW5hYmxlIGhjbG9jazogJWRcbiIsIHJldCk7DQo+PiAtCQlyZXR1cm4g cmV0Ow0KPj4gLQl9DQo+PiAtDQo+PiAtCXJldCA9IGlzY19jbGtfaW5pdChpc2MpOw0KPj4gLQlp ZiAocmV0KSB7DQo+PiAtCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0IGlzYyBjbG9jazog JWRcbiIsIHJldCk7DQo+PiAtCQlnb3RvIHVucHJlcGFyZV9oY2xrOw0KPj4gLQl9DQo+PiAtDQo+ PiAtCWlzYy0+aXNwY2sgPSBpc2MtPmlzY19jbGtzW0lTQ19JU1BDS10uY2xrOw0KPj4gLQ0KPj4g LQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaXNjLT5pc3Bjayk7DQo+PiAtCWlmIChyZXQpIHsN Cj4+IC0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBpc3BjazogJWRcbiIsIHJldCk7 DQo+PiAtCQlnb3RvIHVucHJlcGFyZV9oY2xrOw0KPj4gLQl9DQo+PiAtDQo+PiAtCS8qIGlzcGNr IHNob3VsZCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIGhjbG9jayAqLw0KPj4gLQlyZXQgPSBjbGtf c2V0X3JhdGUoaXNjLT5pc3BjaywgY2xrX2dldF9yYXRlKGlzYy0+aGNsb2NrKSk7DQo+PiAtCWlm IChyZXQpIHsNCj4+IC0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHNldCBpc3BjayByYXRlOiAl ZFxuIiwgcmV0KTsNCj4+IC0JCWdvdG8gdW5wcmVwYXJlX2NsazsNCj4+IC0JfQ0KPj4gLQ0KPj4g LQlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3RlcihkZXYsICZpc2MtPnY0bDJfZGV2KTsNCj4+IC0J aWYgKHJldCkgew0KPj4gLQkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgdjRsMiBk ZXZpY2UuXG4iKTsNCj4+IC0JCWdvdG8gdW5wcmVwYXJlX2NsazsNCj4+IC0JfQ0KPj4gLQ0KPj4g LQlyZXQgPSBpc2NfcGFyc2VfZHQoZGV2LCBpc2MpOw0KPj4gLQlpZiAocmV0KSB7DQo+PiAtCQlk ZXZfZXJyKGRldiwgImZhaWwgdG8gcGFyc2UgZGV2aWNlIHRyZWVcbiIpOw0KPj4gLQkJZ290byB1 bnJlZ2lzdGVyX3Y0bDJfZGV2aWNlOw0KPj4gLQl9DQo+PiAtDQo+PiAtCWlmIChsaXN0X2VtcHR5 KCZpc2MtPnN1YmRldl9lbnRpdGllcykpIHsNCj4+IC0JCWRldl9lcnIoZGV2LCAibm8gc3ViZGV2 IGZvdW5kXG4iKTsNCj4+IC0JCXJldCA9IC1FTk9ERVY7DQo+PiAtCQlnb3RvIHVucmVnaXN0ZXJf djRsMl9kZXZpY2U7DQo+PiAtCX0NCj4+IC0NCj4+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShzdWJk ZXZfZW50aXR5LCAmaXNjLT5zdWJkZXZfZW50aXRpZXMsIGxpc3QpIHsNCj4+IC0JCXY0bDJfYXN5 bmNfbm90aWZpZXJfaW5pdCgmc3ViZGV2X2VudGl0eS0+bm90aWZpZXIpOw0KPj4gLQ0KPj4gLQkJ cmV0ID0gdjRsMl9hc3luY19ub3RpZmllcl9hZGRfc3ViZGV2KCZzdWJkZXZfZW50aXR5LT5ub3Rp ZmllciwNCj4+IC0JCQkJCQkgICAgIHN1YmRldl9lbnRpdHktPmFzZCk7DQo+PiAtCQlpZiAocmV0 KSB7DQo+PiAtCQkJZndub2RlX2hhbmRsZV9wdXQoc3ViZGV2X2VudGl0eS0+YXNkLT5tYXRjaC5m d25vZGUpOw0KPj4gLQkJCWtmcmVlKHN1YmRldl9lbnRpdHktPmFzZCk7DQo+PiAtCQkJZ290byBj bGVhbnVwX3N1YmRldjsNCj4+IC0JCX0NCj4+IC0NCj4+IC0JCXN1YmRldl9lbnRpdHktPm5vdGlm aWVyLm9wcyA9ICZpc2NfYXN5bmNfb3BzOw0KPj4gLQ0KPj4gLQkJcmV0ID0gdjRsMl9hc3luY19u b3RpZmllcl9yZWdpc3RlcigmaXNjLT52NGwyX2RldiwNCj4+IC0JCQkJCQkgICAmc3ViZGV2X2Vu dGl0eS0+bm90aWZpZXIpOw0KPj4gLQkJaWYgKHJldCkgew0KPj4gLQkJCWRldl9lcnIoZGV2LCAi ZmFpbCB0byByZWdpc3RlciBhc3luYyBub3RpZmllclxuIik7DQo+PiAtCQkJZ290byBjbGVhbnVw X3N1YmRldjsNCj4+IC0JCX0NCj4+IC0NCj4+IC0JCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKCZp c2MtPnZpZGVvX2RldikpDQo+PiAtCQkJYnJlYWs7DQo+PiAtCX0NCj4+IC0NCj4+IC0JcG1fcnVu dGltZV9zZXRfYWN0aXZlKGRldik7DQo+PiAtCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7DQo+PiAt CXBtX3JlcXVlc3RfaWRsZShkZXYpOw0KPj4gLQ0KPj4gLQlyZXR1cm4gMDsNCj4+IC0NCj4+IC1j bGVhbnVwX3N1YmRldjoNCj4+IC0JaXNjX3N1YmRldl9jbGVhbnVwKGlzYyk7DQo+PiAtDQo+PiAt dW5yZWdpc3Rlcl92NGwyX2RldmljZToNCj4+IC0JdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmaXNj LT52NGwyX2Rldik7DQo+PiAtDQo+PiAtdW5wcmVwYXJlX2NsazoNCj4+IC0JY2xrX2Rpc2FibGVf dW5wcmVwYXJlKGlzYy0+aXNwY2spOw0KPj4gLXVucHJlcGFyZV9oY2xrOg0KPj4gLQljbGtfZGlz YWJsZV91bnByZXBhcmUoaXNjLT5oY2xvY2spOw0KPj4gLQ0KPj4gLQlpc2NfY2xrX2NsZWFudXAo aXNjKTsNCj4+IC0NCj4+IC0JcmV0dXJuIHJldDsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIGlu dCBhdG1lbF9pc2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+PiAtew0K Pj4gLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7 DQo+PiAtDQo+PiAtCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsNCj4+IC0JY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGlzYy0+aXNwY2spOw0KPj4gLQljbGtfZGlzYWJsZV91bnByZXBhcmUo aXNjLT5oY2xvY2spOw0KPj4gLQ0KPj4gLQlpc2Nfc3ViZGV2X2NsZWFudXAoaXNjKTsNCj4+IC0N Cj4+IC0JdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmaXNjLT52NGwyX2Rldik7DQo+PiAtDQo+PiAt CWlzY19jbGtfY2xlYW51cChpc2MpOw0KPj4gLQ0KPj4gLQlyZXR1cm4gMDsNCj4+IC19DQo+PiAt DQo+PiAtc3RhdGljIGludCBfX21heWJlX3VudXNlZCBpc2NfcnVudGltZV9zdXNwZW5kKHN0cnVj dCBkZXZpY2UgKmRldikNCj4+IC17DQo+PiAtCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsNCj4+IC0NCj4+IC0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+ aXNwY2spOw0KPj4gLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaXNjLT5oY2xvY2spOw0KPj4gLQ0K Pj4gLQlyZXR1cm4gMDsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIGludCBfX21heWJlX3VudXNl ZCBpc2NfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KPj4gLXsNCj4+IC0Jc3Ry dWN0IGlzY19kZXZpY2UgKmlzYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPj4gLQlpbnQgcmV0 Ow0KPj4gLQ0KPj4gLQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaXNjLT5oY2xvY2spOw0KPj4g LQlpZiAocmV0KQ0KPj4gLQkJcmV0dXJuIHJldDsNCj4+IC0NCj4+IC0JcmV0dXJuIGNsa19wcmVw YXJlX2VuYWJsZShpc2MtPmlzcGNrKTsNCj4+IC19DQo+PiAtDQo+PiAtc3RhdGljIGNvbnN0IHN0 cnVjdCBkZXZfcG1fb3BzIGF0bWVsX2lzY19kZXZfcG1fb3BzID0gew0KPj4gLQlTRVRfUlVOVElN RV9QTV9PUFMoaXNjX3J1bnRpbWVfc3VzcGVuZCwgaXNjX3J1bnRpbWVfcmVzdW1lLCBOVUxMKQ0K Pj4gLX07DQo+PiAtDQo+PiAtc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXRtZWxf aXNjX29mX21hdGNoW10gPSB7DQo+PiAtCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsc2FtYTVkMi1p c2MiIH0sDQo+PiAtCXsgfQ0KPj4gLX07DQo+PiAtTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXRt ZWxfaXNjX29mX21hdGNoKTsNCj4+IC0NCj4+IC1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBhdG1lbF9pc2NfZHJpdmVyID0gew0KPj4gLQkucHJvYmUJPSBhdG1lbF9pc2NfcHJvYmUsDQo+ PiAtCS5yZW1vdmUJPSBhdG1lbF9pc2NfcmVtb3ZlLA0KPj4gLQkuZHJpdmVyCT0gew0KPj4gLQkJ Lm5hbWUJCT0gQVRNRUxfSVNDX05BTUUsDQo+PiAtCQkucG0JCT0gJmF0bWVsX2lzY19kZXZfcG1f b3BzLA0KPj4gLQkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGF0bWVsX2lzY19vZl9t YXRjaCksDQo+PiAtCX0sDQo+PiAtfTsNCj4+IC0NCj4+IC1tb2R1bGVfcGxhdGZvcm1fZHJpdmVy KGF0bWVsX2lzY19kcml2ZXIpOw0KPj4gLQ0KPj4gLU1PRFVMRV9BVVRIT1IoIlNvbmdqdW4gV3Ug PHNvbmdqdW4ud3VAbWljcm9jaGlwLmNvbT4iKTsNCj4+IC1NT0RVTEVfREVTQ1JJUFRJT04oIlRo ZSBWNEwyIGRyaXZlciBmb3IgQXRtZWwtSVNDIik7DQo+PiAtTU9EVUxFX0xJQ0VOU0UoIkdQTCB2 MiIpOw0KPj4gLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ2aWRlbyIpOw0KPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmggYi9kcml2ZXJzL21l ZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5oDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K Pj4gaW5kZXggMDAwMDAwMC4uMGJkNWRmZg0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuaA0KPj4gQEAgLTAsMCArMSwyMDgg QEANCj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPj4gKy8qDQo+ PiArICogTWljcm9jaGlwIEltYWdlIFNlbnNvciBDb250cm9sbGVyIChJU0MpIGRyaXZlciBoZWFk ZXIgZmlsZQ0KPj4gKyAqDQo+PiArICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgTWljcm9jaGlw IFRlY2hub2xvZ3ksIEluYy4NCj4+ICsgKg0KPj4gKyAqIEF1dGhvcjogU29uZ2p1biBXdSA8c29u Z2p1bi53dUBtaWNyb2NoaXAuY29tPg0KPj4gKyAqIEF1dGhvcjogRXVnZW4gSHJpc3RldiA8ZXVn ZW4uaHJpc3RldkBtaWNyb2NoaXAuY29tPg0KPj4gKyAqDQo+PiArICovDQo+PiArI2lmbmRlZiBf QVRNRUxfSVNDX0hfDQo+PiArDQo+PiArI2RlZmluZSBJU0NfTUFYX1NVUFBPUlRfV0lEVEggICAy NTkyDQo+PiArI2RlZmluZSBJU0NfTUFYX1NVUFBPUlRfSEVJR0hUICAxOTQ0DQo+PiArDQo+PiAr I2RlZmluZSBJU0NfQ0xLX01BWF9ESVYJCTI1NQ0KPj4gKw0KPj4gK2VudW0gaXNjX2Nsa19pZCB7 DQo+PiArCUlTQ19JU1BDSyA9IDAsDQo+PiArCUlTQ19NQ0sgPSAxLA0KPj4gK307DQo+PiArDQo+ PiArc3RydWN0IGlzY19jbGsgew0KPj4gKwlzdHJ1Y3QgY2xrX2h3ICAgaHc7DQo+PiArCXN0cnVj dCBjbGsgICAgICAqY2xrOw0KPj4gKwlzdHJ1Y3QgcmVnbWFwICAgKnJlZ21hcDsNCj4+ICsJc3Bp bmxvY2tfdAlsb2NrOw0KPj4gKwl1OAkJaWQ7DQo+PiArCXU4CQlwYXJlbnRfaWQ7DQo+PiArCXUz MgkJZGl2Ow0KPj4gKwlzdHJ1Y3QgZGV2aWNlCSpkZXY7DQo+PiArfTsNCj4+ICsNCj4+ICsjZGVm aW5lIHRvX2lzY19jbGsoaHcpIGNvbnRhaW5lcl9vZihodywgc3RydWN0IGlzY19jbGssIGh3KQ0K Pj4gKw0KPj4gK3N0cnVjdCBpc2NfYnVmZmVyIHsNCj4+ICsJc3RydWN0IHZiMl92NGwyX2J1ZmZl ciAgdmI7DQo+PiArCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0 cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSB7DQo+PiArCXN0cnVjdCB2NGwyX3N1YmRldgkJKnNkOw0K Pj4gKwlzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYJKmFzZDsNCj4+ICsJc3RydWN0IHY0bDJfYXN5 bmNfbm90aWZpZXIgICAgICBub3RpZmllcjsNCj4+ICsNCj4+ICsJdTMyIHBmZV9jZmcwOw0KPj4g Kw0KPj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQo+PiArfTsNCj4+ICsNCj4+ICsvKg0KPj4g KyAqIHN0cnVjdCBpc2NfZm9ybWF0IC0gSVNDIG1lZGlhIGJ1cyBmb3JtYXQgaW5mb3JtYXRpb24N Cj4+ICsJCQlUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0 aGUgSVNDDQo+PiArCQkJYW5kIHRoZSBzZW5zb3IuIEl0J3MgdGhlIGlucHV0IGZvcm1hdCByZWNl aXZlZCBieQ0KPj4gKwkJCXRoZSBJU0MuDQo+PiArICogQGZvdXJjYzoJCUZvdXJjYyBjb2RlIGZv ciB0aGlzIGZvcm1hdA0KPj4gKyAqIEBtYnVzX2NvZGU6CQlWNEwyIG1lZGlhIGJ1cyBmb3JtYXQg Y29kZS4NCj4+ICsgKiBAY2ZhX2JheWNmZzoJCUlmIHRoaXMgZm9ybWF0IGlzIFJBVyBCQVlFUiwg aW5kaWNhdGUgdGhlIHR5cGUgb2YgYmF5ZXIuDQo+PiArCQkJdGhpcyBpcyBlaXRoZXIgQkdCRywg UkdSRywgZXRjLg0KPj4gKyAqIEBwZmVfY2ZnMF9icHM6CU51bWJlciBvZiBoYXJkd2FyZSBkYXRh IGxpbmVzIGNvbm5lY3RlZCB0byB0aGUgSVNDDQo+PiArICovDQo+PiArDQo+PiArc3RydWN0IGlz Y19mb3JtYXQgew0KPj4gKwl1MzIJZm91cmNjOw0KPj4gKwl1MzIJbWJ1c19jb2RlOw0KPj4gKwl1 MzIJY2ZhX2JheWNmZzsNCj4+ICsNCj4+ICsJYm9vbAlzZF9zdXBwb3J0Ow0KPj4gKwl1MzIJcGZl X2NmZzBfYnBzOw0KPj4gK307DQo+PiArDQo+PiArLyogUGlwZWxpbmUgYml0bWFwICovDQo+PiAr I2RlZmluZSBXQl9FTkFCTEUJQklUKDApDQo+PiArI2RlZmluZSBDRkFfRU5BQkxFCUJJVCgxKQ0K Pj4gKyNkZWZpbmUgQ0NfRU5BQkxFCUJJVCgyKQ0KPj4gKyNkZWZpbmUgR0FNX0VOQUJMRQlCSVQo MykNCj4+ICsjZGVmaW5lIEdBTV9CRU5BQkxFCUJJVCg0KQ0KPj4gKyNkZWZpbmUgR0FNX0dFTkFC TEUJQklUKDUpDQo+PiArI2RlZmluZSBHQU1fUkVOQUJMRQlCSVQoNikNCj4+ICsjZGVmaW5lIENT Q19FTkFCTEUJQklUKDcpDQo+PiArI2RlZmluZSBDQkNfRU5BQkxFCUJJVCg4KQ0KPj4gKyNkZWZp bmUgU1VCNDIyX0VOQUJMRQlCSVQoOSkNCj4+ICsjZGVmaW5lIFNVQjQyMF9FTkFCTEUJQklUKDEw KQ0KPj4gKw0KPj4gKyNkZWZpbmUgR0FNX0VOQUJMRVMJKEdBTV9SRU5BQkxFIHwgR0FNX0dFTkFC TEUgfCBHQU1fQkVOQUJMRSB8IEdBTV9FTkFCTEUpDQo+PiArDQo+PiArLyoNCj4+ICsgKiBzdHJ1 Y3QgZm10X2NvbmZpZyAtIElTQyBmb3JtYXQgY29uZmlndXJhdGlvbiBhbmQgaW50ZXJuYWwgcGlw ZWxpbmUNCj4+ICsJCQlUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBpbnRlcm5hbCBjb25m aWd1cmF0aW9uDQo+PiArCQkJb2YgdGhlIElTQy4NCj4+ICsJCQlJdCBhbHNvIGhvbGRzIHRoZSBm b3JtYXQgdGhhdCBJU0Mgd2lsbCBwcmVzZW50IHRvIHY0bDIuDQo+PiArICogQHNkX2Zvcm1hdDoJ CVBvaW50ZXIgdG8gYW4gaXNjX2Zvcm1hdCBzdHJ1Y3QgdGhhdCBob2xkcyB0aGUgc2Vuc29yDQo+ PiArCQkJY29uZmlndXJhdGlvbi4NCj4+ICsgKiBAZm91cmNjOgkJRm91cmNjIGNvZGUgZm9yIHRo aXMgZm9ybWF0Lg0KPj4gKyAqIEBicHA6CQlCeXRlcyBwZXIgcGl4ZWwgaW4gdGhlIGN1cnJlbnQg Zm9ybWF0Lg0KPj4gKyAqIEBybHBfY2ZnX21vZGU6CUNvbmZpZ3VyYXRpb24gb2YgdGhlIFJMUCAo cm91bmRpbmcsIGxpbWl0aW5nIHBhY2thZ2luZykNCj4+ICsgKiBAZGNmZ19pbW9kZToJCUNvbmZp Z3VyYXRpb24gb2YgdGhlIGlucHV0IG9mIHRoZSBETUEgbW9kdWxlDQo+PiArICogQGRjdHJsX2R2 aWV3OglDb25maWd1cmF0aW9uIG9mIHRoZSBvdXRwdXQgb2YgdGhlIERNQSBtb2R1bGUNCj4+ICsg KiBAYml0c19waXBlbGluZToJQ29uZmlndXJhdGlvbiBvZiB0aGUgcGlwZWxpbmUsIHdoaWNoIG1v ZHVsZXMgYXJlIGVuYWJsZWQNCj4+ICsgKi8NCj4+ICtzdHJ1Y3QgZm10X2NvbmZpZyB7DQo+PiAr CXN0cnVjdCBpc2NfZm9ybWF0CSpzZF9mb3JtYXQ7DQo+PiArDQo+PiArCXUzMgkJCWZvdXJjYzsN Cj4+ICsJdTgJCQlicHA7DQo+PiArDQo+PiArCXUzMgkJCXJscF9jZmdfbW9kZTsNCj4+ICsJdTMy CQkJZGNmZ19pbW9kZTsNCj4+ICsJdTMyCQkJZGN0cmxfZHZpZXc7DQo+PiArDQo+PiArCXUzMgkJ CWJpdHNfcGlwZWxpbmU7DQo+PiArfTsNCj4+ICsNCj4+ICsjZGVmaW5lIEhJU1RfRU5UUklFUwkJ NTEyDQo+PiArI2RlZmluZSBISVNUX0JBWUVSCQkoSVNDX0hJU19DRkdfTU9ERV9CICsgMSkNCj4+ ICsNCj4+ICtlbnVtew0KPj4gKwlISVNUX0lOSVQgPSAwLA0KPj4gKwlISVNUX0VOQUJMRUQsDQo+ PiArCUhJU1RfRElTQUJMRUQsDQo+PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3QgaXNjX2N0cmxzIHsN Cj4+ICsJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGhhbmRsZXI7DQo+PiArDQo+PiArCXUzMiBi cmlnaHRuZXNzOw0KPj4gKwl1MzIgY29udHJhc3Q7DQo+PiArCXU4IGdhbW1hX2luZGV4Ow0KPj4g KyNkZWZpbmUgSVNDX1dCX05PTkUJMA0KPj4gKyNkZWZpbmUgSVNDX1dCX0FVVE8JMQ0KPj4gKyNk ZWZpbmUgSVNDX1dCX09ORVRJTUUJMg0KPj4gKwl1OCBhd2I7DQo+PiArDQo+PiArCS8qIG9uZSBm b3IgZWFjaCBjb21wb25lbnQgOiBHUiwgUiwgR0IsIEIgKi8NCj4+ICsJdTMyIGdhaW5bSElTVF9C QVlFUl07DQo+PiArCXUzMiBvZmZzZXRbSElTVF9CQVlFUl07DQo+PiArDQo+PiArCXUzMiBoaXN0 X2VudHJ5W0hJU1RfRU5UUklFU107DQo+PiArCXUzMiBoaXN0X2NvdW50W0hJU1RfQkFZRVJdOw0K Pj4gKwl1OCBoaXN0X2lkOw0KPj4gKwl1OCBoaXN0X3N0YXQ7DQo+PiArI2RlZmluZSBISVNUX01J Tl9JTkRFWAkJMA0KPj4gKyNkZWZpbmUgSElTVF9NQVhfSU5ERVgJCTENCj4+ICsJdTMyIGhpc3Rf bWlubWF4W0hJU1RfQkFZRVJdWzJdOw0KPj4gK307DQo+PiArDQo+PiArI2RlZmluZSBJU0NfUElQ RV9MSU5FX05PREVfTlVNCTExDQo+PiArDQo+PiArc3RydWN0IGlzY19kZXZpY2Ugew0KPj4gKwlz dHJ1Y3QgcmVnbWFwCQkqcmVnbWFwOw0KPj4gKwlzdHJ1Y3QgY2xrCQkqaGNsb2NrOw0KPj4gKwlz dHJ1Y3QgY2xrCQkqaXNwY2s7DQo+PiArCXN0cnVjdCBpc2NfY2xrCQlpc2NfY2xrc1syXTsNCj4+ ICsNCj4+ICsJc3RydWN0IGRldmljZQkJKmRldjsNCj4+ICsJc3RydWN0IHY0bDJfZGV2aWNlCXY0 bDJfZGV2Ow0KPj4gKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlCXZpZGVvX2RldjsNCj4+ICsNCj4+ICsJ c3RydWN0IHZiMl9xdWV1ZQl2YjJfdmlkcTsNCj4+ICsJc3BpbmxvY2tfdAkJZG1hX3F1ZXVlX2xv Y2s7DQo+PiArCXN0cnVjdCBsaXN0X2hlYWQJZG1hX3F1ZXVlOw0KPj4gKwlzdHJ1Y3QgaXNjX2J1 ZmZlcgkqY3VyX2ZybTsNCj4+ICsJdW5zaWduZWQgaW50CQlzZXF1ZW5jZTsNCj4+ICsJYm9vbAkJ CXN0b3A7DQo+PiArCXN0cnVjdCBjb21wbGV0aW9uCWNvbXA7DQo+PiArDQo+PiArCXN0cnVjdCB2 NGwyX2Zvcm1hdAlmbXQ7DQo+PiArCXN0cnVjdCBpc2NfZm9ybWF0CSoqdXNlcl9mb3JtYXRzOw0K Pj4gKwl1bnNpZ25lZCBpbnQJCW51bV91c2VyX2Zvcm1hdHM7DQo+PiArDQo+PiArCXN0cnVjdCBm bXRfY29uZmlnCWNvbmZpZzsNCj4+ICsJc3RydWN0IGZtdF9jb25maWcJdHJ5X2NvbmZpZzsNCj4+ ICsNCj4+ICsJc3RydWN0IGlzY19jdHJscwljdHJsczsNCj4+ICsJc3RydWN0IHY0bDJfY3RybAkq ZG9fd2JfY3RybDsNCj4+ICsJc3RydWN0IHdvcmtfc3RydWN0CWF3Yl93b3JrOw0KPj4gKw0KPj4g KwlzdHJ1Y3QgbXV0ZXgJCWxvY2s7DQo+PiArCXNwaW5sb2NrX3QJCWF3Yl9sb2NrOw0KPj4gKw0K Pj4gKwlzdHJ1Y3QgcmVnbWFwX2ZpZWxkCSpwaXBlbGluZVtJU0NfUElQRV9MSU5FX05PREVfTlVN XTsNCj4+ICsNCj4+ICsJc3RydWN0IGlzY19zdWJkZXZfZW50aXR5CSpjdXJyZW50X3N1YmRldjsN Cj4+ICsJc3RydWN0IGxpc3RfaGVhZAkJc3ViZGV2X2VudGl0aWVzOw0KPj4gK307DQo+PiArDQo+ PiArI2RlZmluZSBHQU1NQV9NQVgJMg0KPj4gKyNkZWZpbmUgR0FNTUFfRU5UUklFUwk2NA0KPj4g Kw0KPj4gKyNkZWZpbmUgQVRNRUxfSVNDX05BTUUgImF0bWVsLWlzYyINCj4+ICsNCj4+ICsvKiBt b2R1bGUgcGFyYW1ldGVycyAqLw0KPj4gK2V4dGVybiB1bnNpZ25lZCBpbnQgZGVidWc7DQo+PiAr ZXh0ZXJuIHVuc2lnbmVkIGludCBzZW5zb3JfcHJlZmVycmVkOw0KPj4gKw0KPj4gK2V4dGVybiBz dHJ1Y3QgaXNjX2Zvcm1hdCBmb3JtYXRzX2xpc3RbXTsNCj4+ICtleHRlcm4gc3RydWN0IGlzY19m b3JtYXQgY29udHJvbGxlcl9mb3JtYXRzW107DQo+PiArZXh0ZXJuIGNvbnN0IHUzMiBpc2NfZ2Ft bWFfdGFibGVbR0FNTUFfTUFYICsgMV1bR0FNTUFfRU5UUklFU107DQo+PiArZXh0ZXJuIGNvbnN0 IHN0cnVjdCByZWdtYXBfY29uZmlnIGlzY19yZWdtYXBfY29uZmlnOw0KPj4gK2V4dGVybiBjb25z dCBzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllcl9vcGVyYXRpb25zIGlzY19hc3luY19vcHM7DQo+ PiArDQo+PiAraXJxcmV0dXJuX3QgaXNjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQp Ow0KPj4gK2ludCBpc2NfcGlwZWxpbmVfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKTsNCj4+ ICtpbnQgaXNjX2Nsa19pbml0KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpOw0KPj4gK3ZvaWQgaXNj X3N1YmRldl9jbGVhbnVwKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpOw0KPj4gK3ZvaWQgaXNjX2Ns a19jbGVhbnVwKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpOw0KPj4gKw0KPj4gKyNlbmRpZg0KPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtc2FtYTVkMi1p c2MuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtc2FtYTVkMi1pc2MuYw0K Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAuLjY5ZmFhYWYNCj4+IC0t LSAvZGV2L251bGwNCj4+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwt c2FtYTVkMi1pc2MuYw0KPj4gQEAgLTAsMCArMSwzNDQgQEANCj4+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMA0KPj4gKy8qDQo+PiArICogTWljcm9jaGlwIEltYWdlIFNlbnNv ciBDb250cm9sbGVyIChJU0MpIGRyaXZlcg0KPj4gKyAqDQo+PiArICogQ29weXJpZ2h0IChDKSAy MDE2LTIwMTkgTWljcm9jaGlwIFRlY2hub2xvZ3ksIEluYy4NCj4+ICsgKg0KPj4gKyAqIEF1dGhv cjogU29uZ2p1biBXdSA8c29uZ2p1bi53dUBtaWNyb2NoaXAuY29tPg0KPj4gKyAqIEF1dGhvcjog RXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNyb2NoaXAuY29tPg0KPj4gKyAqDQo+PiAr ICoNCj4+ICsgKiBTZW5zb3ItLT5QRkUtLT5XQi0tPkNGQS0tPkNDLS0+R0FNLS0+Q1NDLS0+Q0JD LS0+U1VCLS0+UkxQLS0+RE1BDQo+PiArICoNCj4+ICsgKiBJU0MgdmlkZW8gcGlwZWxpbmUgaW50 ZWdyYXRlcyB0aGUgZm9sbG93aW5nIHN1Ym1vZHVsZXM6DQo+PiArICogUEZFOiBQYXJhbGxlbCBG cm9udCBFbmQgdG8gc2FtcGxlIHRoZSBjYW1lcmEgc2Vuc29yIGlucHV0IHN0cmVhbQ0KPj4gKyAq ICBXQjogUHJvZ3JhbW1hYmxlIHdoaXRlIGJhbGFuY2UgaW4gdGhlIEJheWVyIGRvbWFpbg0KPj4g KyAqIENGQTogQ29sb3IgZmlsdGVyIGFycmF5IGludGVycG9sYXRpb24gbW9kdWxlDQo+PiArICog IENDOiBQcm9ncmFtbWFibGUgY29sb3IgY29ycmVjdGlvbg0KPj4gKyAqIEdBTTogR2FtbWEgY29y cmVjdGlvbg0KPj4gKyAqIENTQzogUHJvZ3JhbW1hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24N Cj4+ICsgKiBDQkM6IENvbnRyYXN0IGFuZCBCcmlnaHRuZXNzIGNvbnRyb2wNCj4+ICsgKiBTVUI6 IFRoaXMgbW9kdWxlIHBlcmZvcm1zIFlDYkNyNDQ0IHRvIFlDYkNyNDIwIGNocm9taW5hbmNlIHN1 YnNhbXBsaW5nDQo+PiArICogUkxQOiBUaGlzIG1vZHVsZSBwZXJmb3JtcyByb3VuZGluZywgcmFu Z2UgbGltaXRpbmcNCj4+ICsgKiAgICAgIGFuZCBwYWNraW5nIG9mIHRoZSBpbmNvbWluZyBkYXRh DQo+PiArICovDQo+PiArDQo+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPj4gKyNpbmNsdWRl IDxsaW51eC9jbGtkZXYuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+DQo+ PiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVw dC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L29mLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4 L29mX2dyYXBoLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPj4g KyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L3JlZ21h cC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4NCj4+ICsNCj4+ICsjaW5jbHVk ZSA8bWVkaWEvdjRsMi1jdHJscy5oPg0KPj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5o Pg0KPj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+DQo+PiArI2luY2x1ZGUgPG1lZGlh L3Y0bDItaW1hZ2Utc2l6ZXMuaD4NCj4+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPg0K Pj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWZ3bm9kZS5oPg0KPj4gKyNpbmNsdWRlIDxtZWRpYS92 NGwyLXN1YmRldi5oPg0KPj4gKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNvbnRpZy5o Pg0KPj4gKw0KPj4gKyNpbmNsdWRlICJhdG1lbC1pc2MtcmVncy5oIg0KPj4gKyNpbmNsdWRlICJh dG1lbC1pc2MuaCINCj4+ICsNCj4+ICsjZGVmaW5lIElTQ19NQVhfU1VQUE9SVF9XSURUSCAgIDI1 OTINCj4+ICsjZGVmaW5lIElTQ19NQVhfU1VQUE9SVF9IRUlHSFQgIDE5NDQNCj4+ICsNCj4+ICsj ZGVmaW5lIElTQ19DTEtfTUFYX0RJVgkJMjU1DQo+PiArDQo+PiArc3RhdGljIGludCBpc2NfcGFy c2VfZHQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KPj4gK3sN Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsNCj4+ICsJc3RydWN0 IGRldmljZV9ub2RlICplcG4gPSBOVUxMLCAqcmVtOw0KPj4gKwlzdHJ1Y3QgaXNjX3N1YmRldl9l bnRpdHkgKnN1YmRldl9lbnRpdHk7DQo+PiArCXVuc2lnbmVkIGludCBmbGFnczsNCj4+ICsJaW50 IHJldDsNCj4+ICsNCj4+ICsJSU5JVF9MSVNUX0hFQUQoJmlzYy0+c3ViZGV2X2VudGl0aWVzKTsN Cj4+ICsNCj4+ICsJd2hpbGUgKDEpIHsNCj4+ICsJCXN0cnVjdCB2NGwyX2Z3bm9kZV9lbmRwb2lu dCB2NGwyX2VwbiA9IHsgLmJ1c190eXBlID0gMCB9Ow0KPj4gKw0KPj4gKwkJZXBuID0gb2ZfZ3Jh cGhfZ2V0X25leHRfZW5kcG9pbnQobnAsIGVwbik7DQo+PiArCQlpZiAoIWVwbikNCj4+ICsJCQly ZXR1cm4gMDsNCj4+ICsNCj4+ICsJCXJlbSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJl bnQoZXBuKTsNCj4+ICsJCWlmICghcmVtKSB7DQo+PiArCQkJZGV2X25vdGljZShkZXYsICJSZW1v dGUgZGV2aWNlIGF0ICVwT0Ygbm90IGZvdW5kXG4iLA0KPj4gKwkJCQkgICBlcG4pOw0KPj4gKwkJ CWNvbnRpbnVlOw0KPj4gKwkJfQ0KPj4gKw0KPj4gKwkJcmV0ID0gdjRsMl9md25vZGVfZW5kcG9p bnRfcGFyc2Uob2ZfZndub2RlX2hhbmRsZShlcG4pLA0KPj4gKwkJCQkJCSAmdjRsMl9lcG4pOw0K Pj4gKwkJaWYgKHJldCkgew0KPj4gKwkJCW9mX25vZGVfcHV0KHJlbSk7DQo+PiArCQkJcmV0ID0g LUVJTlZBTDsNCj4+ICsJCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBwYXJzZSB0aGUgZW5kcG9p bnRcbiIpOw0KPj4gKwkJCWJyZWFrOw0KPj4gKwkJfQ0KPj4gKw0KPj4gKwkJc3ViZGV2X2VudGl0 eSA9IGRldm1fa3phbGxvYyhkZXYsDQo+PiArCQkJCQkgIHNpemVvZigqc3ViZGV2X2VudGl0eSks IEdGUF9LRVJORUwpOw0KPj4gKwkJaWYgKCFzdWJkZXZfZW50aXR5KSB7DQo+PiArCQkJb2Zfbm9k ZV9wdXQocmVtKTsNCj4+ICsJCQlyZXQgPSAtRU5PTUVNOw0KPj4gKwkJCWJyZWFrOw0KPj4gKwkJ fQ0KPj4gKw0KPj4gKwkJLyogYXNkIHdpbGwgYmUgZnJlZWQgYnkgdGhlIHN1YnN5c3RlbSBvbmNl IGl0J3MgYWRkZWQgdG8gdGhlDQo+PiArCQkgKiBub3RpZmllciBsaXN0DQo+PiArCQkgKi8NCj4+ ICsJCXN1YmRldl9lbnRpdHktPmFzZCA9IGt6YWxsb2Moc2l6ZW9mKCpzdWJkZXZfZW50aXR5LT5h c2QpLA0KPj4gKwkJCQkJICAgICBHRlBfS0VSTkVMKTsNCj4+ICsJCWlmICghc3ViZGV2X2VudGl0 eS0+YXNkKSB7DQo+PiArCQkJb2Zfbm9kZV9wdXQocmVtKTsNCj4+ICsJCQlyZXQgPSAtRU5PTUVN Ow0KPj4gKwkJCWJyZWFrOw0KPj4gKwkJfQ0KPj4gKw0KPj4gKwkJZmxhZ3MgPSB2NGwyX2Vwbi5i dXMucGFyYWxsZWwuZmxhZ3M7DQo+PiArDQo+PiArCQlpZiAoZmxhZ3MgJiBWNEwyX01CVVNfSFNZ TkNfQUNUSVZFX0xPVykNCj4+ICsJCQlzdWJkZXZfZW50aXR5LT5wZmVfY2ZnMCA9IElTQ19QRkVf Q0ZHMF9IUE9MX0xPVzsNCj4+ICsNCj4+ICsJCWlmIChmbGFncyAmIFY0TDJfTUJVU19WU1lOQ19B Q1RJVkVfTE9XKQ0KPj4gKwkJCXN1YmRldl9lbnRpdHktPnBmZV9jZmcwIHw9IElTQ19QRkVfQ0ZH MF9WUE9MX0xPVzsNCj4+ICsNCj4+ICsJCWlmIChmbGFncyAmIFY0TDJfTUJVU19QQ0xLX1NBTVBM RV9GQUxMSU5HKQ0KPj4gKwkJCXN1YmRldl9lbnRpdHktPnBmZV9jZmcwIHw9IElTQ19QRkVfQ0ZH MF9QUE9MX0xPVzsNCj4+ICsNCj4+ICsJCWlmICh2NGwyX2Vwbi5idXNfdHlwZSA9PSBWNEwyX01C VVNfQlQ2NTYpDQo+PiArCQkJc3ViZGV2X2VudGl0eS0+cGZlX2NmZzAgfD0gSVNDX1BGRV9DRkcw X0NDSVJfQ1JDIHwNCj4+ICsJCQkJCUlTQ19QRkVfQ0ZHMF9DQ0lSNjU2Ow0KPj4gKw0KPj4gKwkJ c3ViZGV2X2VudGl0eS0+YXNkLT5tYXRjaF90eXBlID0gVjRMMl9BU1lOQ19NQVRDSF9GV05PREU7 DQo+PiArCQlzdWJkZXZfZW50aXR5LT5hc2QtPm1hdGNoLmZ3bm9kZSA9DQo+PiArCQkJb2ZfZndu b2RlX2hhbmRsZShyZW0pOw0KPiANCj4gRml0cyBvbiB0aGUgcHJldmlvdXMgbGluZS4NCj4gDQo+ PiArCQlsaXN0X2FkZF90YWlsKCZzdWJkZXZfZW50aXR5LT5saXN0LCAmaXNjLT5zdWJkZXZfZW50 aXRpZXMpOw0KPj4gKwl9DQo+PiArDQo+PiArCW9mX25vZGVfcHV0KGVwbik7DQo+PiArCXJldHVy biByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgYXRtZWxfaXNjX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+PiArew0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmcGRldi0+ZGV2Ow0KPj4gKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjOw0KPj4gKwlzdHJ1Y3Qg cmVzb3VyY2UgKnJlczsNCj4+ICsJdm9pZCBfX2lvbWVtICppb19iYXNlOw0KPj4gKwlzdHJ1Y3Qg aXNjX3N1YmRldl9lbnRpdHkgKnN1YmRldl9lbnRpdHk7DQo+PiArCWludCBpcnE7DQo+PiArCWlu dCByZXQ7DQo+PiArDQo+PiArCWlzYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaXNjKSwg R0ZQX0tFUk5FTCk7DQo+PiArCWlmICghaXNjKQ0KPj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+PiAr DQo+PiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGlzYyk7DQo+PiArCWlzYy0+ZGV2ID0g ZGV2Ow0KPj4gKw0KPj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNP VVJDRV9NRU0sIDApOw0KPj4gKwlpb19iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwg cmVzKTsNCj4+ICsJaWYgKElTX0VSUihpb19iYXNlKSkNCj4+ICsJCXJldHVybiBQVFJfRVJSKGlv X2Jhc2UpOw0KPj4gKw0KPj4gKwlpc2MtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhk ZXYsIGlvX2Jhc2UsICZpc2NfcmVnbWFwX2NvbmZpZyk7DQo+PiArCWlmIChJU19FUlIoaXNjLT5y ZWdtYXApKSB7DQo+PiArCQlyZXQgPSBQVFJfRVJSKGlzYy0+cmVnbWFwKTsNCj4+ICsJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgcmVnaXN0ZXIgbWFwOiAlZFxuIiwgcmV0KTsNCj4+ICsJ CXJldHVybiByZXQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShw ZGV2LCAwKTsNCj4+ICsJaWYgKGlycSA8IDApIHsNCj4+ICsJCXJldCA9IGlycTsNCj4+ICsJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBpcnE6ICVkXG4iLCByZXQpOw0KPj4gKwkJcmV0dXJu IHJldDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJx LCBpc2NfaW50ZXJydXB0LCAwLA0KPj4gKwkJCSAgICAgICBBVE1FTF9JU0NfTkFNRSwgaXNjKTsN Cj4+ICsJaWYgKHJldCA8IDApIHsNCj4+ICsJCWRldl9lcnIoZGV2LCAiY2FuJ3QgcmVnaXN0ZXIg SVNSIGZvciBJUlEgJXUgKHJldD0laSlcbiIsDQo+PiArCQkJaXJxLCByZXQpOw0KPj4gKwkJcmV0 dXJuIHJldDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXQgPSBpc2NfcGlwZWxpbmVfaW5pdChpc2Mp Ow0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJcmV0dXJuIHJldDsNCj4+ICsNCj4+ICsJaXNjLT5oY2xv Y2sgPSBkZXZtX2Nsa19nZXQoZGV2LCAiaGNsb2NrIik7DQo+PiArCWlmIChJU19FUlIoaXNjLT5o Y2xvY2spKSB7DQo+PiArCQlyZXQgPSBQVFJfRVJSKGlzYy0+aGNsb2NrKTsNCj4+ICsJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGdldCBoY2xvY2s6ICVkXG4iLCByZXQpOw0KPj4gKwkJcmV0dXJu IHJldDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaXNjLT5o Y2xvY2spOw0KPj4gKwlpZiAocmV0KSB7DQo+PiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBl bmFibGUgaGNsb2NrOiAlZFxuIiwgcmV0KTsNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArCX0NCj4+ ICsNCj4+ICsJcmV0ID0gaXNjX2Nsa19pbml0KGlzYyk7DQo+PiArCWlmIChyZXQpIHsNCj4+ICsJ CWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgaXNjIGNsb2NrOiAlZFxuIiwgcmV0KTsNCj4+ ICsJCWdvdG8gdW5wcmVwYXJlX2hjbGs7DQo+PiArCX0NCj4+ICsNCj4+ICsJaXNjLT5pc3BjayA9 IGlzYy0+aXNjX2Nsa3NbSVNDX0lTUENLXS5jbGs7DQo+PiArDQo+PiArCXJldCA9IGNsa19wcmVw YXJlX2VuYWJsZShpc2MtPmlzcGNrKTsNCj4gDQo+IERvIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJl Y3RseSAtLS0gdGhlIGRldmljZSBnZW5lcmF0ZXMgSVNQQ0sgYnV0IGFsc28NCj4gbmVlZHMgaXQg YnkgaXRzZWxmPw0KDQpZZXMgdGhpcyBpcyBjb3JyZWN0LCBwYXJ0IG9mIHRoZSBJU0MgbW9kdWxl IGdlbmVyYXRlcyB0aGUgY2xvY2sgKGNsb2NrIA0KZ2VuZXJhdG9yIHN1Ym1vZHVsZSkgYW5kIHRo aXMgY2xvY2sgYWxzbyBjbG9ja3MgdGhlIGludGVybmFsIGxpdHRsZSBJU1ANClRoZSBjbG9jayBn ZW5lcmF0b3Igc3VibW9kdWxlIGFsc28gZ2VuZXJhdGVzIGlzY19tY2sgd2hpY2ggZ29lcyB0byB0 aGUgDQpzZW5zb3IuDQpUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhlIGludGVybmFsIElTUCBp cyBhc3luY2hyb25vdXMgdG8gdGhlIHBpeGVsIA0KY2xvY2sgZ2VuZXJhdGVkIGJ5IHRoZSBzZW5z b3IuIFBpeGVsIGNsb2NrIGlzIHVzZWQgb25seSBmb3IgcGl4ZWwgDQpzYW1wbGluZyBvbiB0aGUg ZGF0YWxpbmVzLiBUaGF0J3MgYWxzbyB3aHkgd2UgbmVlZCB0aGUgDQppc2NfdXBkYXRlX3Byb2Zp bGUgdGhhdCB3aWxsIHVwZGF0ZSBhY3Jvc3MgY2xvY2sgZG9tYWlucw0KDQpJbiBkYXRhc2hlZXQg Y2hhcHRlciA0OS4zLjEuIG9mIHRoZSBzYW1hNWQyIFNPQyB5b3UgY2FuIHNlZSB0aGUgYmxvY2sg DQpkaWFncmFtDQoNCg0KPiANCj4+ICsJaWYgKHJldCkgew0KPj4gKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gZW5hYmxlIGlzcGNrOiAlZFxuIiwgcmV0KTsNCj4+ICsJCWdvdG8gdW5wcmVwYXJl X2hjbGs7DQo+PiArCX0NCj4+ICsNCj4+ICsJLyogaXNwY2sgc2hvdWxkIGJlIGdyZWF0ZXIgb3Ig ZXF1YWwgdG8gaGNsb2NrICovDQo+PiArCXJldCA9IGNsa19zZXRfcmF0ZShpc2MtPmlzcGNrLCBj bGtfZ2V0X3JhdGUoaXNjLT5oY2xvY2spKTsNCj4+ICsJaWYgKHJldCkgew0KPj4gKwkJZGV2X2Vy cihkZXYsICJmYWlsZWQgdG8gc2V0IGlzcGNrIHJhdGU6ICVkXG4iLCByZXQpOw0KPj4gKwkJZ290 byB1bnByZXBhcmVfY2xrOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldCA9IHY0bDJfZGV2aWNlX3Jl Z2lzdGVyKGRldiwgJmlzYy0+djRsMl9kZXYpOw0KPj4gKwlpZiAocmV0KSB7DQo+PiArCQlkZXZf ZXJyKGRldiwgInVuYWJsZSB0byByZWdpc3RlciB2NGwyIGRldmljZS5cbiIpOw0KPj4gKwkJZ290 byB1bnByZXBhcmVfY2xrOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldCA9IGlzY19wYXJzZV9kdChk ZXYsIGlzYyk7DQo+PiArCWlmIChyZXQpIHsNCj4+ICsJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBw YXJzZSBkZXZpY2UgdHJlZVxuIik7DQo+PiArCQlnb3RvIHVucmVnaXN0ZXJfdjRsMl9kZXZpY2U7 DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKGxpc3RfZW1wdHkoJmlzYy0+c3ViZGV2X2VudGl0aWVz KSkgew0KPj4gKwkJZGV2X2VycihkZXYsICJubyBzdWJkZXYgZm91bmRcbiIpOw0KPj4gKwkJcmV0 ID0gLUVOT0RFVjsNCj4+ICsJCWdvdG8gdW5yZWdpc3Rlcl92NGwyX2RldmljZTsNCj4+ICsJfQ0K Pj4gKw0KPj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YmRldl9lbnRpdHksICZpc2MtPnN1YmRl dl9lbnRpdGllcywgbGlzdCkgew0KPj4gKwkJdjRsMl9hc3luY19ub3RpZmllcl9pbml0KCZzdWJk ZXZfZW50aXR5LT5ub3RpZmllcik7DQo+PiArDQo+PiArCQlyZXQgPSB2NGwyX2FzeW5jX25vdGlm aWVyX2FkZF9zdWJkZXYoJnN1YmRldl9lbnRpdHktPm5vdGlmaWVyLA0KPj4gKwkJCQkJCSAgICAg c3ViZGV2X2VudGl0eS0+YXNkKTsNCj4+ICsJCWlmIChyZXQpIHsNCj4+ICsJCQlmd25vZGVfaGFu ZGxlX3B1dChzdWJkZXZfZW50aXR5LT5hc2QtPm1hdGNoLmZ3bm9kZSk7DQo+PiArCQkJa2ZyZWUo c3ViZGV2X2VudGl0eS0+YXNkKTsNCj4+ICsJCQlnb3RvIGNsZWFudXBfc3ViZGV2Ow0KPj4gKwkJ fQ0KPj4gKw0KPj4gKwkJc3ViZGV2X2VudGl0eS0+bm90aWZpZXIub3BzID0gJmlzY19hc3luY19v cHM7DQo+PiArDQo+PiArCQlyZXQgPSB2NGwyX2FzeW5jX25vdGlmaWVyX3JlZ2lzdGVyKCZpc2Mt PnY0bDJfZGV2LA0KPj4gKwkJCQkJCSAgICZzdWJkZXZfZW50aXR5LT5ub3RpZmllcik7DQo+PiAr CQlpZiAocmV0KSB7DQo+PiArCQkJZGV2X2VycihkZXYsICJmYWlsIHRvIHJlZ2lzdGVyIGFzeW5j IG5vdGlmaWVyXG4iKTsNCj4+ICsJCQlnb3RvIGNsZWFudXBfc3ViZGV2Ow0KPj4gKwkJfQ0KPj4g Kw0KPj4gKwkJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQoJmlzYy0+dmlkZW9fZGV2KSkNCj4+ICsJ CQlicmVhazsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoZGV2KTsN Cj4+ICsJcG1fcnVudGltZV9lbmFibGUoZGV2KTsNCj4+ICsJcG1fcmVxdWVzdF9pZGxlKGRldik7 DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gKw0KPj4gK2NsZWFudXBfc3ViZGV2Og0KPj4gKwlp c2Nfc3ViZGV2X2NsZWFudXAoaXNjKTsNCj4+ICsNCj4+ICt1bnJlZ2lzdGVyX3Y0bDJfZGV2aWNl Og0KPj4gKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZpc2MtPnY0bDJfZGV2KTsNCj4+ICsNCj4+ ICt1bnByZXBhcmVfY2xrOg0KPj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaXNjLT5pc3Bjayk7 DQo+PiArdW5wcmVwYXJlX2hjbGs6DQo+PiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShpc2MtPmhj bG9jayk7DQo+PiArDQo+PiArCWlzY19jbGtfY2xlYW51cChpc2MpOw0KPj4gKw0KPj4gKwlyZXR1 cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGF0bWVsX2lzY19yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4+ICt7DQo+PiArCXN0cnVjdCBpc2NfZGV2aWNl ICppc2MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4+ICsNCj4+ICsJcG1fcnVudGlt ZV9kaXNhYmxlKCZwZGV2LT5kZXYpOw0KPj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaXNjLT5p c3Bjayk7DQo+PiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShpc2MtPmhjbG9jayk7DQo+PiArDQo+ PiArCWlzY19zdWJkZXZfY2xlYW51cChpc2MpOw0KPiANCj4gVGhpcyBzaG91bGQgdGFrZSBwbGFj ZSBiZWZvcmUgdGhlIHRocmVlIGxpbmVzIGFib3ZlIGl0Lg0KPiANCj4+ICsNCj4+ICsJdjRsMl9k ZXZpY2VfdW5yZWdpc3RlcigmaXNjLT52NGwyX2Rldik7DQo+PiArDQo+PiArCWlzY19jbGtfY2xl YW51cChpc2MpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGlj IGludCBfX21heWJlX3VudXNlZCBpc2NfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRl dikNCj4+ICt7DQo+PiArCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsNCj4+ICsNCj4+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aXNwY2spOw0KPj4g KwljbGtfZGlzYWJsZV91bnByZXBhcmUoaXNjLT5oY2xvY2spOw0KPj4gKw0KPj4gKwlyZXR1cm4g MDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCBpc2NfcnVudGlt ZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGlzY19kZXZp Y2UgKmlzYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4g KwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaXNjLT5oY2xvY2spOw0KPj4gKwlpZiAocmV0KQ0K Pj4gKwkJcmV0dXJuIHJldDsNCj4+ICsNCj4+ICsJcmV0dXJuIGNsa19wcmVwYXJlX2VuYWJsZShp c2MtPmlzcGNrKTsNCj4gDQo+IEluIGNhc2UgdGhpcyBmYWlscywgeW91J2xsIG5lZWQgdG8gZGlz YWJsZV91bnByZXBhcmUgaXNjLT5oY2xvY2suDQo+IA0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYXRtZWxfaXNjX2Rldl9wbV9vcHMgPSB7DQo+PiArCVNF VF9SVU5USU1FX1BNX09QUyhpc2NfcnVudGltZV9zdXNwZW5kLCBpc2NfcnVudGltZV9yZXN1bWUs IE5VTEwpDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBhdG1lbF9pc2Nfb2ZfbWF0Y2hbXSA9IHsNCj4+ICsJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxz YW1hNWQyLWlzYyIgfSwNCj4+ICsJeyB9DQo+PiArfTsNCj4+ICtNT0RVTEVfREVWSUNFX1RBQkxF KG9mLCBhdG1lbF9pc2Nfb2ZfbWF0Y2gpOw0KPj4gKw0KPj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIGF0bWVsX2lzY19kcml2ZXIgPSB7DQo+PiArCS5wcm9iZQk9IGF0bWVsX2lzY19w cm9iZSwNCj4+ICsJLnJlbW92ZQk9IGF0bWVsX2lzY19yZW1vdmUsDQo+PiArCS5kcml2ZXIJPSB7 DQo+PiArCQkubmFtZQkJPSBBVE1FTF9JU0NfTkFNRSwNCj4+ICsJCS5wbQkJPSAmYXRtZWxfaXNj X2Rldl9wbV9vcHMsDQo+PiArCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoYXRtZWxf aXNjX29mX21hdGNoKSwNCj4+ICsJfSwNCj4+ICt9Ow0KPj4gKw0KPj4gK21vZHVsZV9wbGF0Zm9y bV9kcml2ZXIoYXRtZWxfaXNjX2RyaXZlcik7DQo+PiArDQo+PiArTU9EVUxFX0FVVEhPUigiU29u Z2p1biBXdSA8c29uZ2p1bi53dUBtaWNyb2NoaXAuY29tPiIpOw0KPj4gK01PRFVMRV9ERVNDUklQ VElPTigiVGhlIFY0TDIgZHJpdmVyIGZvciBBdG1lbC1JU0MiKTsNCj4+ICtNT0RVTEVfTElDRU5T RSgiR1BMIHYyIik7DQo+PiArTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInZpZGVvIik7DQo+IA0K