Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp7760106ybi; Thu, 6 Jun 2019 00:47:34 -0700 (PDT) X-Google-Smtp-Source: APXvYqxYKMAJhr6plap7oiRh9WBk59OMo0eM/bAGTkhivWspJx95m47yytfrM8IjazwVz55x+nfS X-Received: by 2002:a17:902:a986:: with SMTP id bh6mr47235655plb.100.1559807254166; Thu, 06 Jun 2019 00:47:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559807254; cv=none; d=google.com; s=arc-20160816; b=Hi4wBFTQ5LYRcvQqGEJxl4+ks8x+VFVFAuqFA0j2IVDwCU1n1UrX2ZFAmo1iHrDozz Qi809aTxo/XJj0yNhvBNCEfxdAeSQhXh2oMQDcYgTbYUkI9s+AGCH128C65OzJe4ORcW jX5p2Vl3PhivLhzMLeiKT0p+Tws0kOlEwlgqaXdQ6er/qQQK3WuFXs9OxzOBR7KJKwIZ yRe/GbOspZQ2jjlu3SrSpZ/vLEttJzN9ww/VRcMSxENxqrGKoU4RFmX1SvPfuijw6QqR 5zBU9r9hgBbXJvVm3QGILEremRhWFRmZiJCrUHMk73DL592uSQeM/KKzv7qbqhtb4r/f sMlg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature; bh=aLdj4kgihHA8j9+BWEjCs0yLMABP8P9TGXui8cy0l68=; b=yKM1r09rBaoeRL6aBF8dNifMDWC/JzwxZso43ip8sRJRIuhP6xTtJ/OOA6FMPoOdHl DIx43fFPEbXT66wn6K0D0cREvw4BKvdYmdWOE/W4mHIeMCpXmBzZQNzF8/Eok/dblsAX X96AQD7w4fYyyaaWfngllWnujQ7D3TbNpXOq55UjnHds6LcKziAn09k/ec/5x1/JUERx dPaw6SCZeRWjQGJOhFhW3gEggKXqMn7XHohwIqqMXY0/ZinHEYpqP79Fb2HYiKcQapj3 +fkfUsLNUZceVj8DNm/g7VlNpHUgYPvZUb7rXB59ejiuTCdS7+AkVdpaMq5bFsInWA6I hjuQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microchiptechnology.onmicrosoft.com header.s=selector1-microchiptechnology-onmicrosoft-com header.b=hsyg5cWm; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=microchip.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p21si1001901plq.328.2019.06.06.00.47.18; Thu, 06 Jun 2019 00:47:34 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@microchiptechnology.onmicrosoft.com header.s=selector1-microchiptechnology-onmicrosoft-com header.b=hsyg5cWm; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=microchip.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726844AbfFFHn4 (ORCPT + 99 others); Thu, 6 Jun 2019 03:43:56 -0400 Received: from esa6.microchip.iphmx.com ([216.71.154.253]:47540 "EHLO esa6.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725267AbfFFHnz (ORCPT ); Thu, 6 Jun 2019 03:43:55 -0400 Received-SPF: Pass (esa6.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=esa6.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 (esa6.microchip.iphmx.com: no sender authenticity information available from domain of postmaster@email.microchip.com) identity=helo; client-ip=198.175.253.82; receiver=esa6.microchip.iphmx.com; envelope-from="Eugen.Hristev@microchip.com"; x-sender="postmaster@email.microchip.com"; x-conformance=spf_only Authentication-Results: esa6.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,558,1557212400"; d="scan'208";a="33322500" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa6.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 06 Jun 2019 00:43:51 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.87.151) 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 00:43:50 -0700 Received: from NAM03-BY2-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.151) 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 00:43:49 -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=aLdj4kgihHA8j9+BWEjCs0yLMABP8P9TGXui8cy0l68=; b=hsyg5cWmefKJgzcVQynfVcPFLl+i22iEIC204ZiL/UI6wG4pDksamX89bZZgUrPwZUGPbQVy1G5re57OU360db/VgFDK7JITH1VpTBYGx1amZDx50e0mn7H9WdRXQCdJ6lthV9qW/AEJtklQy3wshfPpqeMw368ZD7AlciT5TfY= Received: from DM5PR11MB1242.namprd11.prod.outlook.com (10.168.108.8) by DM5PR11MB1628.namprd11.prod.outlook.com (10.172.38.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1965.14; Thu, 6 Jun 2019 07:43:45 +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 07:43:45 +0000 From: To: , , , CC: Subject: [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/OEhsg== Date: Thu, 6 Jun 2019 07:43:45 +0000 Message-ID: <1559806756-16683-1-git-send-email-eugen.hristev@microchip.com> Accept-Language: ro-RO, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1P193CA0001.EURP193.PROD.OUTLOOK.COM (2603:10a6:800:bd::11) To DM5PR11MB1242.namprd11.prod.outlook.com (2603:10b6:3:14::8) x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.7.4 x-originating-ip: [94.177.32.154] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 53fec613-d835-4c8a-850b-08d6ea52b3eb x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:DM5PR11MB1628; x-ms-traffictypediagnostic: DM5PR11MB1628: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2512; x-forefront-prvs: 00603B7EEF x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(366004)(136003)(376002)(39860400002)(396003)(189003)(199004)(26005)(186003)(2906002)(66066001)(316002)(8676002)(86362001)(5660300002)(8936002)(50226002)(81166006)(68736007)(81156014)(72206003)(6116002)(3846002)(30864003)(305945005)(7736002)(36756003)(476003)(2616005)(66946007)(66476007)(73956011)(66446008)(66556008)(486006)(64756008)(6512007)(107886003)(53946003)(14444005)(102836004)(110136005)(256004)(99286004)(14454004)(6436002)(2501003)(6486002)(71200400001)(4326008)(71190400001)(25786009)(52116002)(53936002)(386003)(2201001)(6506007)(478600001)(461764006)(2004002)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR11MB1628;H:DM5PR11MB1242.namprd11.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A: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: TWBe3Vy8o1zfZFwXPYzLIRfO+wTfRtlAtH7QQN/XHPRA+Mn6Vo0/y1yh/IyLKCbqwLNHy5jpAEPUy6/ne4EV7Gta9F1GgMO/8XVRi/uKfjQZF/CO4JK3PHv78fwIFBPln9xhKcX+2Y8hItzPzYIMEfx5N2tNq/H+KTLzo7XXkBka4XtVPpEEbk5iA+p0rQ/ccpHv4m1wUXdr1Ram2fHi2hFZ4rGJHSduopjXV9RCwjLd8qlZ8IN6SH/KS41a0lRHUnJ76HwGMBT16MZrM+seqlOsNYyvikkGP63K4a63QanufBiPiwLZ0ondIkyRuZm/7Y15kK2sECb/shrQd4vC0h8vA2S8MwmWTsddE6nsB6MH7aYM0hqJuMeZfmemKuRzn+JtvexA8ixcdwKl08KeY9UHv60H+joXSAl7o5Dz07U= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 53fec613-d835-4c8a-850b-08d6ea52b3eb X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Jun 2019 07:43:45.5596 (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: DM5PR11MB1628 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNyb2NoaXAuY29tPg0KDQpUaGlz IHNwbGl0cyB0aGUgQXRtZWwgSVNDIGRyaXZlciBpbnRvIGEgY29tbW9uIGJhc2U6IGF0bWVsLWlz Yy1iYXNlLmMNCmFuZCB0aGUgZHJpdmVyIHByb2JlL2R0IHBhcnQgLCBhdG1lbC1zYW1hNWQyLWlz Yy5jDQpUaGlzIGlzIG5lZWRlZCB0byBrZWVwIGEgY29tbW9uIGdyb3VuZCBmb3IgdGhlIHNlbnNv ciBjb250cm9sbGVyIHdoaWNoIHdpbGwNCmJlIHJldXNlZC4NClRoZSBhdG1lbC1pc2Mgd2lsbCB1 c2UgdGhlIGNvbW1vbiBzeW1ib2xzIGluc2lkZSB0aGUgYXRtZWwtaXNjLWJhc2UNCkZ1dHVyZSBk cml2ZXIgd2lsbCBhbHNvIHVzZSB0aGUgc2FtZSBzeW1ib2xzIGFuZCByZWRlZmluZSBkaWZmZXJl bnQgYXNwZWN0cywNCmZvciBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHRoZSBJU0MuDQpUaGlzIGlz IGRvbmUgdG8gYXZvaWQgY29tcGxldGUgY29kZSBkdXBsaWNhdGlvbiBieSBjcmVhdGluZyBhIHRv dGFsbHkNCmRpZmZlcmVudCBkcml2ZXIgZm9yIHRoZSBuZXcgdmFyaWFudCBvZiB0aGUgSVNDLg0K DQpTaWduZWQtb2ZmLWJ5OiBFdWdlbiBIcmlzdGV2IDxldWdlbi5ocmlzdGV2QG1pY3JvY2hpcC5j b20+DQotLS0NCg0KSGVsbG8gSGFucywNCg0KSSBjcmVhdGVkIGEgc3Vic2VxdWVudCBwYXRjaCB0 aGF0IGZpeGVzIHRoZSBjaGVja3BhdGNoIGlzc3Vlcy4gKDIvMiBpbiB0aGlzDQpzZXJpZXMgbm93 KS4NCg0KVGhhbmtzLA0KRXVnZW4NCg0KQ2hhbmdlcyBpbiB2MzoNCi0gRml4ZWQgdXAgdGhlIGV4 dGVybnMsIG1vdmVkIHRvIGhlYWRlciBmaWxlDQotIG1vdmVkIHRoZSBtb2R1bGUgcGFyYW1ldGVy cyB0byBhdG1lbC1pc2MtYmFzZS5jDQoNCkNoYW5nZXMgaW4gdjI6DQotIHJlbmFtZWQgYXRtZWwt aXNjLmMgdG8gYXRtZWwtc2FtYTVkMi1pc2MuYyBhcyBzYW1hNWQyIGlzIHRoZSBTb0MgdGhhdA0K ICBpbmNsdWRlcyB0aGlzIGhhcmR3YXJlIGJsb2NrLiBUaGUgbW9kdWxlIHdpbGwgc3RpbGwgYmUg bmFtZWQgYXRtZWwtaXNjLmtvDQotIHJlbW92ZWQgaWZkZWYgYXJvdW5kIGRlZmluaXRpb24gb2Yg QVRNRUxfSVNDX05BTUUNCi0gbW92ZWQgZXh0ZXJuYWwgZGVjbGFyYXRpb25zIGluIHRoZSBzcGVj aWZpYyBmaWxlcywgdGhpcyB3YXMgYnJlYWtpbmcNCiAgbW9kdWxlIGxvYWRpbmcNCg0KIE1BSU5U QUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0NCiBk cml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL01ha2VmaWxlICAgICAgICAgICAgfCAgICA0ICst DQogZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MtYmFzZS5jICAgIHwgMjE1 MyArKysrKysrKysrKysrKysrKysNCiBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVs LWlzYy5jICAgICAgICAgfCAyNjM0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiBkcml2ZXJzL21l ZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5oICAgICAgICAgfCAgMjA4ICsrDQogZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1zYW1hNWQyLWlzYy5jIHwgIDM0NCArKysNCiA2 IGZpbGVzIGNoYW5nZWQsIDI3MTEgaW5zZXJ0aW9ucygrKSwgMjYzNiBkZWxldGlvbnMoLSkNCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2Mt YmFzZS5jDQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwv YXRtZWwtaXNjLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9h dG1lbC9hdG1lbC1pc2MuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRm b3JtL2F0bWVsL2F0bWVsLXNhbWE1ZDItaXNjLmMNCg0KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJT IGIvTUFJTlRBSU5FUlMNCmluZGV4IDVjZmJlYTQuLjNkYzgyODkgMTAwNjQ0DQotLS0gYS9NQUlO VEFJTkVSUw0KKysrIGIvTUFJTlRBSU5FUlMNCkBAIC0xMDI3MCw3ICsxMDI3MCw5IEBAIE1JQ1JP Q0hJUCBJU0MgRFJJVkVSDQogTToJRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNyb2No aXAuY29tPg0KIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZw0KIFM6CVN1cHBvcnRlZA0K LUY6CWRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmMNCitGOglkcml2ZXJz L21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLXNhbWE1ZDItaXNjLmMNCitGOglkcml2ZXJzL21l ZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5oDQorRjoJZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9hdG1lbC9hdG1lbC1pc2MtYmFzZS5jDQogRjoJZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1l bC9hdG1lbC1pc2MtcmVncy5oDQogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdz L21lZGlhL2F0bWVsLWlzYy50eHQNCiANCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL2F0bWVsL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9NYWtlZmls ZQ0KaW5kZXggMjcwMDBkMC4uOTQ2MjczNiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vYXRtZWwvTWFrZWZpbGUNCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwv TWFrZWZpbGUNCkBAIC0xLDIgKzEsNCBAQA0KLW9iai0kKENPTkZJR19WSURFT19BVE1FTF9JU0Mp ICs9IGF0bWVsLWlzYy5vDQorYXRtZWwtaXNjLW9ianMgPSBhdG1lbC1zYW1hNWQyLWlzYy5vIGF0 bWVsLWlzYy1iYXNlLm8NCisNCiBvYmotJChDT05GSUdfVklERU9fQVRNRUxfSVNJKSArPSBhdG1l bC1pc2kubw0KK29iai0kKENPTkZJR19WSURFT19BVE1FTF9JU0MpICs9IGF0bWVsLWlzYy5vDQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MtYmFzZS5j IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MtYmFzZS5jDQpuZXcgZmls ZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZTI3ZTc5MA0KLS0tIC9kZXYvbnVsbA0KKysr IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MtYmFzZS5jDQpAQCAtMCww ICsxLDIxNTMgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKy8qDQor ICogTWljcm9jaGlwIEltYWdlIFNlbnNvciBDb250cm9sbGVyIChJU0MpIGNvbW1vbiBkcml2ZXIg YmFzZQ0KKyAqDQorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgTWljcm9jaGlwIFRlY2hub2xv Z3ksIEluYy4NCisgKg0KKyAqIEF1dGhvcjogU29uZ2p1biBXdSA8c29uZ2p1bi53dUBtaWNyb2No aXAuY29tPg0KKyAqIEF1dGhvcjogRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNyb2No aXAuY29tPg0KKyAqDQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KKyNpbmNsdWRl IDxsaW51eC9jbGtkZXYuaD4NCisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KKyNp bmNsdWRlIDxsaW51eC9tYXRoNjQuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L29mLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+DQorI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1l Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPg0KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rl djIuaD4NCisNCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPg0KKyNpbmNsdWRlIDxtZWRp YS92NGwyLWRldmljZS5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+DQorI2luY2x1 ZGUgPG1lZGlhL3Y0bDItaW1hZ2Utc2l6ZXMuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0 bC5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWZ3bm9kZS5oPg0KKyNpbmNsdWRlIDxtZWRpYS92 NGwyLXN1YmRldi5oPg0KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNvbnRpZy5oPg0K Kw0KKyNpbmNsdWRlICJhdG1lbC1pc2MtcmVncy5oIg0KKyNpbmNsdWRlICJhdG1lbC1pc2MuaCIN CisNCit1bnNpZ25lZCBpbnQgZGVidWc7DQorbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQp Ow0KK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBsZXZlbCAoMC0yKSIpOw0KKw0KK3Vu c2lnbmVkIGludCBzZW5zb3JfcHJlZmVycmVkID0gMTsNCittb2R1bGVfcGFyYW0oc2Vuc29yX3By ZWZlcnJlZCwgdWludCwgMDY0NCk7DQorTU9EVUxFX1BBUk1fREVTQyhzZW5zb3JfcHJlZmVycmVk LA0KKwkJICJTZW5zb3IgaXMgcHJlZmVycmVkIHRvIG91dHB1dCB0aGUgc3BlY2lmaWVkIGZvcm1h dCAoMS1vbiAwLW9mZiksIGRlZmF1bHQgMSIpOw0KKw0KKy8qIFRoaXMgaXMgYSBsaXN0IG9mIHRo ZSBmb3JtYXRzIHRoYXQgdGhlIElTQyBjYW4gKm91dHB1dCogKi8NCitzdHJ1Y3QgaXNjX2Zvcm1h dCBjb250cm9sbGVyX2Zvcm1hdHNbXSA9IHsNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9G TVRfQVJHQjQ0NCwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfQVJHQjU1 NSwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfUkdCNTY1LA0KKwl9LA0K Kwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9BQkdSMzIsDQorCX0sDQorCXsNCisJCS5m b3VyY2MJCT0gVjRMMl9QSVhfRk1UX1hCR1IzMiwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBW NEwyX1BJWF9GTVRfWVVWNDIwLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZN VF9ZVVlWLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVY0MjJQLA0K Kwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9HUkVZLA0KKwl9LA0KK307DQor DQorLyogVGhpcyBpcyBhIGxpc3Qgb2YgZm9ybWF0cyB0aGF0IHRoZSBJU0MgY2FuIHJlY2VpdmUg YXMgKmlucHV0KiAqLw0KK3N0cnVjdCBpc2NfZm9ybWF0IGZvcm1hdHNfbGlzdFtdID0gew0KKwl7 DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjgsDQorCQkubWJ1c19jb2RlCT0gTUVE SUFfQlVTX0ZNVF9TQkdHUjhfMVg4LA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9C UFNfRUlHSFQsDQorCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX0JHQkcsDQorCX0sDQorCXsN CisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NHQlJHOCwNCisJCS5tYnVzX2NvZGUJPSBNRURJ QV9CVVNfRk1UX1NHQlJHOF8xWDgsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQ U19FSUdIVCwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR0JHQiwNCisJfSwNCisJew0K KwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dSQkc4LA0KKwkJLm1idXNfY29kZQk9IE1FRElB X0JVU19GTVRfU0dSQkc4XzFYOCwNCisJCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBT X0VJR0hULA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HUkdSLA0KKwl9LA0KKwl7DQor CQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TUkdHQjgsDQorCQkubWJ1c19jb2RlCT0gTUVESUFf QlVTX0ZNVF9TUkdHQjhfMVg4LA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNf RUlHSFQsDQorCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX1JHUkcsDQorCX0sDQorCXsNCisJ CS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NCR0dSMTAsDQorCQkubWJ1c19jb2RlCT0gTUVESUFf QlVTX0ZNVF9TQkdHUjEwXzFYMTAsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGR19DRkcwX0JQ U19URU4sDQorCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX1JHUkcsDQorCX0sDQorCXsNCisJ CS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NHQlJHMTAsDQorCQkubWJ1c19jb2RlCT0gTUVESUFf QlVTX0ZNVF9TR0JSRzEwXzFYMTAsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGR19DRkcwX0JQ U19URU4sDQorCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX0dCR0IsDQorCX0sDQorCXsNCisJ CS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NHUkJHMTAsDQorCQkubWJ1c19jb2RlCT0gTUVESUFf QlVTX0ZNVF9TR1JCRzEwXzFYMTAsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGR19DRkcwX0JQ U19URU4sDQorCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX0dSR1IsDQorCX0sDQorCXsNCisJ CS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NSR0dCMTAsDQorCQkubWJ1c19jb2RlCT0gTUVESUFf QlVTX0ZNVF9TUkdHQjEwXzFYMTAsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGR19DRkcwX0JQ U19URU4sDQorCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX1JHUkcsDQorCX0sDQorCXsNCisJ CS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NCR0dSMTIsDQorCQkubWJ1c19jb2RlCT0gTUVESUFf QlVTX0ZNVF9TQkdHUjEyXzFYMTIsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGR19DRkcwX0JQ U19UV0VMVkUsDQorCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX0JHQkcsDQorCX0sDQorCXsN CisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NHQlJHMTIsDQorCQkubWJ1c19jb2RlCT0gTUVE SUFfQlVTX0ZNVF9TR0JSRzEyXzFYMTIsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGR19DRkcw X0JQU19UV0VMVkUsDQorCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX0dCR0IsDQorCX0sDQor CXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NHUkJHMTIsDQorCQkubWJ1c19jb2RlCT0g TUVESUFfQlVTX0ZNVF9TR1JCRzEyXzFYMTIsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGR19D RkcwX0JQU19UV0VMVkUsDQorCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX0dSR1IsDQorCX0s DQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NSR0dCMTIsDQorCQkubWJ1c19jb2Rl CT0gTUVESUFfQlVTX0ZNVF9TUkdHQjEyXzFYMTIsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BG R19DRkcwX0JQU19UV0VMVkUsDQorCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX1JHUkcsDQor CX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX0dSRVksDQorCQkubWJ1c19jb2Rl CT0gTUVESUFfQlVTX0ZNVF9ZOF8xWDgsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcw X0JQU19FSUdIVCwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVZViwN CisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1lVWVY4XzJYOCwNCisJCS5wZmVfY2ZnMF9i cHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0 TDJfUElYX0ZNVF9SR0I1NjUsDQorCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9SR0I1NjVf Mlg4X0xFLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQorCX0s DQorfTsNCisNCisvKiBHYW1tYSB0YWJsZSB3aXRoIGdhbW1hIDEvMi4yICovDQorY29uc3QgdTMy IGlzY19nYW1tYV90YWJsZVtHQU1NQV9NQVggKyAxXVtHQU1NQV9FTlRSSUVTXSA9IHsNCisJLyog MCAtLT4gZ2FtbWEgMS8xLjggKi8NCisJeyAgICAgIDB4NjUsICAweDY2MDAyRiwgIDB4OTUwMDI1 LCAgMHhCQjAwMjAsICAweERCMDAxRCwgIDB4RjgwMDFBLA0KKwkgIDB4MTEzMDAxOCwgMHgxMkIw MDE3LCAweDE0MjAwMTYsIDB4MTU4MDAxNCwgMHgxNkQwMDEzLCAweDE4MTAwMTIsDQorCSAgMHgx OTQwMDEyLCAweDFBNjAwMTIsIDB4MUI4MDAxMSwgMHgxQzkwMDEwLCAweDFEQTAwMTAsIDB4MUVB MDAwRiwNCisJICAweDFGQTAwMEYsIDB4MjA5MDAwRiwgMHgyMTgwMDBGLCAweDIyNzAwMEUsIDB4 MjM1MDAwRSwgMHgyNDMwMDBFLA0KKwkgIDB4MjUxMDAwRSwgMHgyNUYwMDBELCAweDI2QzAwMEQs IDB4Mjc5MDAwRCwgMHgyODYwMDBELCAweDI5MzAwMEMsDQorCSAgMHgyQTAwMDBDLCAweDJBQzAw MEMsIDB4MkI4MDAwQywgMHgyQzQwMDBDLCAweDJEMDAwMEIsIDB4MkRDMDAwQiwNCisJICAweDJF NzAwMEIsIDB4MkYzMDAwQiwgMHgyRkUwMDBCLCAweDMwOTAwMEIsIDB4MzE0MDAwQiwgMHgzMUYw MDBBLA0KKwkgIDB4MzJBMDAwQSwgMHgzMzQwMDBCLCAweDMzRjAwMEEsIDB4MzQ5MDAwQSwgMHgz NTQwMDBBLCAweDM1RTAwMEEsDQorCSAgMHgzNjgwMDBBLCAweDM3MjAwMEEsIDB4MzdDMDAwQSwg MHgzODYwMDBBLCAweDM5MDAwMDksIDB4Mzk5MDAwQSwNCisJICAweDNBMzAwMDksIDB4M0FEMDAw OSwgMHgzQjYwMDA5LCAweDNCRjAwMEEsIDB4M0M5MDAwOSwgMHgzRDIwMDA5LA0KKwkgIDB4M0RC MDAwOSwgMHgzRTQwMDA5LCAweDNFRDAwMDksIDB4M0Y2MDAwOSB9LA0KKw0KKwkvKiAxIC0tPiBn YW1tYSAxLzIgKi8NCisJeyAgICAgIDB4N0YsICAweDgwMDAzNCwgIDB4QjUwMDI4LCAgMHhERTAw MjEsIDB4MTAwMDAxRSwgMHgxMUUwMDFCLA0KKwkgIDB4MTM5MDAxOSwgMHgxNTIwMDE3LCAweDE2 QTAwMTUsIDB4MTgwMDAxNCwgMHgxOTQwMDE0LCAweDFBODAwMTMsDQorCSAgMHgxQkIwMDEyLCAw eDFDRDAwMTEsIDB4MURGMDAxMCwgMHgxRUYwMDEwLCAweDIwMDAwMEYsIDB4MjBGMDAwRiwNCisJ ICAweDIxRjAwMEUsIDB4MjJEMDAwRiwgMHgyM0MwMDBFLCAweDI0QTAwMEUsIDB4MjU4MDAwRCwg MHgyNjUwMDBELA0KKwkgIDB4MjczMDAwQywgMHgyN0YwMDBELCAweDI4QzAwMEMsIDB4Mjk5MDAw QywgMHgyQTUwMDBDLCAweDJCMTAwMEIsDQorCSAgMHgyQkMwMDBDLCAweDJDODAwMEIsIDB4MkQz MDAwQywgMHgyREYwMDBCLCAweDJFQTAwMEEsIDB4MkY1MDAwQSwNCisJICAweDJGRjAwMEIsIDB4 MzBBMDAwQSwgMHgzMTQwMDBCLCAweDMxRjAwMEEsIDB4MzI5MDAwQSwgMHgzMzMwMDBBLA0KKwkg IDB4MzNEMDAwOSwgMHgzNDcwMDA5LCAweDM1MDAwMEEsIDB4MzVBMDAwOSwgMHgzNjMwMDBBLCAw eDM2RDAwMDksDQorCSAgMHgzNzYwMDA5LCAweDM3RjAwMDksIDB4Mzg4MDAwOSwgMHgzOTEwMDA5 LCAweDM5QTAwMDksIDB4M0EzMDAwOSwNCisJICAweDNBQzAwMDgsIDB4M0I0MDAwOSwgMHgzQkQw MDA4LCAweDNDNjAwMDgsIDB4M0NFMDAwOCwgMHgzRDYwMDA5LA0KKwkgIDB4M0RGMDAwOCwgMHgz RTcwMDA4LCAweDNFRjAwMDgsIDB4M0Y3MDAwOCB9LA0KKw0KKwkvKiAyIC0tPiBnYW1tYSAxLzIu MiAqLw0KKwl7ICAgICAgMHg5OSwgIDB4OUIwMDM4LCAgMHhENDAwMkEsICAweEZGMDAyMywgMHgx MjIwMDFGLCAweDE0MTAwMUIsDQorCSAgMHgxNUQwMDE5LCAweDE3NjAwMTcsIDB4MThFMDAxNSwg MHgxQTMwMDE1LCAweDFCODAwMTMsIDB4MUNDMDAxMiwNCisJICAweDFERTAwMTEsIDB4MUYwMDAx MCwgMHgyMDEwMDEwLCAweDIxMTAwMTAsIDB4MjIxMDAwRiwgMHgyMzAwMDBGLA0KKwkgIDB4MjNG MDAwRSwgMHgyNEQwMDBFLCAweDI1QjAwMEQsIDB4MjY5MDAwQywgMHgyNzYwMDBDLCAweDI4MzAw MEMsDQorCSAgMHgyOEYwMDBDLCAweDI5QjAwMEMsIDB4MkE3MDAwQywgMHgyQjMwMDBCLCAweDJC RjAwMEIsIDB4MkNBMDAwQiwNCisJICAweDJENTAwMEIsIDB4MkUwMDAwQSwgMHgyRUIwMDBBLCAw eDJGNTAwMEEsIDB4MkZGMDAwQSwgMHgzMEEwMDBBLA0KKwkgIDB4MzE0MDAwOSwgMHgzMUUwMDA5 LCAweDMyNzAwMEEsIDB4MzMxMDAwOSwgMHgzM0EwMDA5LCAweDM0NDAwMDksDQorCSAgMHgzNEQw MDA5LCAweDM1NjAwMDksIDB4MzVGMDAwOSwgMHgzNjgwMDA4LCAweDM3MTAwMDgsIDB4Mzc5MDAw OSwNCisJICAweDM4MjAwMDgsIDB4MzhBMDAwOCwgMHgzOTMwMDA4LCAweDM5QjAwMDgsIDB4M0Ez MDAwOCwgMHgzQUIwMDA4LA0KKwkgIDB4M0IzMDAwOCwgMHgzQkIwMDA4LCAweDNDMzAwMDgsIDB4 M0NCMDAwNywgMHgzRDIwMDA4LCAweDNEQTAwMDcsDQorCSAgMHgzRTIwMDA3LCAweDNFOTAwMDcs IDB4M0YwMDAwOCwgMHgzRjgwMDA3IH0sDQorfTsNCisNCisjZGVmaW5lIElTQ19JU19GT1JNQVRf UkFXKG1idXNfY29kZSkgXA0KKwkoKChtYnVzX2NvZGUpICYgMHhmMDAwKSA9PSAweDMwMDApDQor DQorc3RhdGljIGlubGluZSB2b2lkIGlzY191cGRhdGVfYXdiX2N0cmxzKHN0cnVjdCBpc2NfZGV2 aWNlICppc2MpDQorew0KKwlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0K Kw0KKwlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19XQl9PX1JHUiwNCisJCSAgICAgKElT Q19XQl9PX1pFUk9fVkFMIC0gKGN0cmxzLT5vZmZzZXRbSVNDX0hJU19DRkdfTU9ERV9SXSkpIHwN CisJCSAgICAgKChJU0NfV0JfT19aRVJPX1ZBTCAtIGN0cmxzLT5vZmZzZXRbSVNDX0hJU19DRkdf TU9ERV9HUl0pIDw8IDE2KSk7DQorCXJlZ21hcF93cml0ZShpc2MtPnJlZ21hcCwgSVNDX1dCX09f QkdCLA0KKwkJICAgICAoSVNDX1dCX09fWkVST19WQUwgLSAoY3RybHMtPm9mZnNldFtJU0NfSElT X0NGR19NT0RFX0JdKSkgfA0KKwkJICAgICAoKElTQ19XQl9PX1pFUk9fVkFMIC0gY3RybHMtPm9m ZnNldFtJU0NfSElTX0NGR19NT0RFX0dCXSkgPDwgMTYpKTsNCisJcmVnbWFwX3dyaXRlKGlzYy0+ cmVnbWFwLCBJU0NfV0JfR19SR1IsDQorCQkgICAgIGN0cmxzLT5nYWluW0lTQ19ISVNfQ0ZHX01P REVfUl0gfA0KKwkJICAgICAoY3RybHMtPmdhaW5bSVNDX0hJU19DRkdfTU9ERV9HUl0gPDwgMTYp KTsNCisJcmVnbWFwX3dyaXRlKGlzYy0+cmVnbWFwLCBJU0NfV0JfR19CR0IsDQorCQkgICAgIGN0 cmxzLT5nYWluW0lTQ19ISVNfQ0ZHX01PREVfQl0gfA0KKwkJICAgICAoY3RybHMtPmdhaW5bSVND X0hJU19DRkdfTU9ERV9HQl0gPDwgMTYpKTsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIGlz Y19yZXNldF9hd2JfY3RybHMoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCWludCBjOw0K Kw0KKwlmb3IgKGMgPSBJU0NfSElTX0NGR19NT0RFX0dSOyBjIDw9IElTQ19ISVNfQ0ZHX01PREVf QjsgYysrKSB7DQorCQkvKiBnYWlucyBoYXZlIGEgZml4ZWQgcG9pbnQgYXQgOSBkZWNpbWFscyAq Lw0KKwkJaXNjLT5jdHJscy5nYWluW2NdID0gMSA8PCA5Ow0KKwkJLyogb2Zmc2V0cyBhcmUgaW4g MidzIGNvbXBsZW1lbnRzLCB0aGUgdmFsdWUNCisJCSAqIHdpbGwgYmUgc3Vic3RyYWN0ZWQgZnJv bSBJU0NfV0JfT19aRVJPX1ZBTCB0byBvYnRhaW4NCisJCSAqIDIncyBjb21wbGVtZW50IG9mIGEg dmFsdWUgYmV0d2VlbiAwIGFuZA0KKwkJICogSVNDX1dCX09fWkVST19WQUwgPj4gMQ0KKwkJICov DQorCQlpc2MtPmN0cmxzLm9mZnNldFtjXSA9IElTQ19XQl9PX1pFUk9fVkFMOw0KKwl9DQorfQ0K Kw0KK3N0YXRpYyBpbnQgaXNjX3dhaXRfY2xrX3N0YWJsZShzdHJ1Y3QgY2xrX2h3ICpodykNCit7 DQorCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQorCXN0cnVjdCBy ZWdtYXAgKnJlZ21hcCA9IGlzY19jbGstPnJlZ21hcDsNCisJdW5zaWduZWQgbG9uZyB0aW1lb3V0 ID0gamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoMTAwMCk7DQorCXVuc2lnbmVkIGludCBzdGF0 dXM7DQorDQorCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgew0KKwkJcmVn bWFwX3JlYWQocmVnbWFwLCBJU0NfQ0xLU1IsICZzdGF0dXMpOw0KKwkJaWYgKCEoc3RhdHVzICYg SVNDX0NMS1NSX1NJUCkpDQorCQkJcmV0dXJuIDA7DQorDQorCQl1c2xlZXBfcmFuZ2UoMTAsIDI1 MCk7DQorCX0NCisNCisJcmV0dXJuIC1FVElNRURPVVQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNj X2Nsa19wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQ0KK3sNCisJc3RydWN0IGlzY19jbGsgKmlz Y19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCisNCisJaWYgKGlzY19jbGstPmlkID09IElTQ19JU1BD SykNCisJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNjX2Nsay0+ZGV2KTsNCisNCisJcmV0dXJuIGlz Y193YWl0X2Nsa19zdGFibGUoaHcpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpc2NfY2xrX3VucHJl cGFyZShzdHJ1Y3QgY2xrX2h3ICpodykNCit7DQorCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0g dG9faXNjX2Nsayhodyk7DQorDQorCWlzY193YWl0X2Nsa19zdGFibGUoaHcpOw0KKw0KKwlpZiAo aXNjX2Nsay0+aWQgPT0gSVNDX0lTUENLKQ0KKwkJcG1fcnVudGltZV9wdXRfc3luYyhpc2NfY2xr LT5kZXYpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19jbGtfZW5hYmxlKHN0cnVjdCBjbGtfaHcg Kmh3KQ0KK3sNCisJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCisJ dTMyIGlkID0gaXNjX2Nsay0+aWQ7DQorCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzY19jbGst PnJlZ21hcDsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisJdW5zaWduZWQgaW50IHN0YXR1czsN CisNCisJZGV2X2RiZyhpc2NfY2xrLT5kZXYsICJJU0MgQ0xLOiAlcywgZGl2ID0gJWQsIHBhcmVu dCBpZCA9ICVkXG4iLA0KKwkJX19mdW5jX18sIGlzY19jbGstPmRpdiwgaXNjX2Nsay0+cGFyZW50 X2lkKTsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzY19jbGstPmxvY2ssIGZsYWdzKTsNCisJ cmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgSVNDX0NMS0NGRywNCisJCQkgICBJU0NfQ0xLQ0ZH X0RJVl9NQVNLKGlkKSB8IElTQ19DTEtDRkdfU0VMX01BU0soaWQpLA0KKwkJCSAgIChpc2NfY2xr LT5kaXYgPDwgSVNDX0NMS0NGR19ESVZfU0hJRlQoaWQpKSB8DQorCQkJICAgKGlzY19jbGstPnBh cmVudF9pZCA8PCBJU0NfQ0xLQ0ZHX1NFTF9TSElGVChpZCkpKTsNCisNCisJcmVnbWFwX3dyaXRl KHJlZ21hcCwgSVNDX0NMS0VOLCBJU0NfQ0xLKGlkKSk7DQorCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmlzY19jbGstPmxvY2ssIGZsYWdzKTsNCisNCisJcmVnbWFwX3JlYWQocmVnbWFwLCBJU0Nf Q0xLU1IsICZzdGF0dXMpOw0KKwlpZiAoc3RhdHVzICYgSVNDX0NMSyhpZCkpDQorCQlyZXR1cm4g MDsNCisJZWxzZQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlzY19j bGtfZGlzYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykNCit7DQorCXN0cnVjdCBpc2NfY2xrICppc2Nf Y2xrID0gdG9faXNjX2Nsayhodyk7DQorCXUzMiBpZCA9IGlzY19jbGstPmlkOw0KKwl1bnNpZ25l ZCBsb25nIGZsYWdzOw0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjX2Nsay0+bG9jaywgZmxh Z3MpOw0KKwlyZWdtYXBfd3JpdGUoaXNjX2Nsay0+cmVnbWFwLCBJU0NfQ0xLRElTLCBJU0NfQ0xL KGlkKSk7DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzY19jbGstPmxvY2ssIGZsYWdzKTsN Cit9DQorDQorc3RhdGljIGludCBpc2NfY2xrX2lzX2VuYWJsZWQoc3RydWN0IGNsa19odyAqaHcp DQorew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KKwl1MzIg c3RhdHVzOw0KKw0KKwlpZiAoaXNjX2Nsay0+aWQgPT0gSVNDX0lTUENLKQ0KKwkJcG1fcnVudGlt ZV9nZXRfc3luYyhpc2NfY2xrLT5kZXYpOw0KKw0KKwlyZWdtYXBfcmVhZChpc2NfY2xrLT5yZWdt YXAsIElTQ19DTEtTUiwgJnN0YXR1cyk7DQorDQorCWlmIChpc2NfY2xrLT5pZCA9PSBJU0NfSVNQ Q0spDQorCQlwbV9ydW50aW1lX3B1dF9zeW5jKGlzY19jbGstPmRldik7DQorDQorCXJldHVybiBz dGF0dXMgJiBJU0NfQ0xLKGlzY19jbGstPmlkKSA/IDEgOiAwOw0KK30NCisNCitzdGF0aWMgdW5z aWduZWQgbG9uZw0KK2lzY19jbGtfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2ln bmVkIGxvbmcgcGFyZW50X3JhdGUpDQorew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRv X2lzY19jbGsoaHcpOw0KKw0KKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocGFyZW50X3JhdGUs IGlzY19jbGstPmRpdiArIDEpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19jbGtfZGV0ZXJtaW5l X3JhdGUoc3RydWN0IGNsa19odyAqaHcsDQorCQkJCSAgIHN0cnVjdCBjbGtfcmF0ZV9yZXF1ZXN0 ICpyZXEpDQorew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0K Kwlsb25nIGJlc3RfcmF0ZSA9IC1FSU5WQUw7DQorCWludCBiZXN0X2RpZmYgPSAtMTsNCisJdW5z aWduZWQgaW50IGksIGRpdjsNCisNCisJZm9yIChpID0gMDsgaSA8IGNsa19od19nZXRfbnVtX3Bh cmVudHMoaHcpOyBpKyspIHsNCisJCXN0cnVjdCBjbGtfaHcgKnBhcmVudDsNCisJCXVuc2lnbmVk IGxvbmcgcGFyZW50X3JhdGU7DQorDQorCQlwYXJlbnQgPSBjbGtfaHdfZ2V0X3BhcmVudF9ieV9p bmRleChodywgaSk7DQorCQlpZiAoIXBhcmVudCkNCisJCQljb250aW51ZTsNCisNCisJCXBhcmVu dF9yYXRlID0gY2xrX2h3X2dldF9yYXRlKHBhcmVudCk7DQorCQlpZiAoIXBhcmVudF9yYXRlKQ0K KwkJCWNvbnRpbnVlOw0KKw0KKwkJZm9yIChkaXYgPSAxOyBkaXYgPCBJU0NfQ0xLX01BWF9ESVYg KyAyOyBkaXYrKykgew0KKwkJCXVuc2lnbmVkIGxvbmcgcmF0ZTsNCisJCQlpbnQgZGlmZjsNCisN CisJCQlyYXRlID0gRElWX1JPVU5EX0NMT1NFU1QocGFyZW50X3JhdGUsIGRpdik7DQorCQkJZGlm ZiA9IGFicyhyZXEtPnJhdGUgLSByYXRlKTsNCisNCisJCQlpZiAoYmVzdF9kaWZmIDwgMCB8fCBi ZXN0X2RpZmYgPiBkaWZmKSB7DQorCQkJCWJlc3RfcmF0ZSA9IHJhdGU7DQorCQkJCWJlc3RfZGlm ZiA9IGRpZmY7DQorCQkJCXJlcS0+YmVzdF9wYXJlbnRfcmF0ZSA9IHBhcmVudF9yYXRlOw0KKwkJ CQlyZXEtPmJlc3RfcGFyZW50X2h3ID0gcGFyZW50Ow0KKwkJCX0NCisNCisJCQlpZiAoIWJlc3Rf ZGlmZiB8fCByYXRlIDwgcmVxLT5yYXRlKQ0KKwkJCQlicmVhazsNCisJCX0NCisNCisJCWlmICgh YmVzdF9kaWZmKQ0KKwkJCWJyZWFrOw0KKwl9DQorDQorCWRldl9kYmcoaXNjX2Nsay0+ZGV2LA0K KwkJIklTQyBDTEs6ICVzLCBiZXN0X3JhdGUgPSAlbGQsIHBhcmVudCBjbGs6ICVzIEAgJWxkXG4i LA0KKwkJX19mdW5jX18sIGJlc3RfcmF0ZSwNCisJCV9fY2xrX2dldF9uYW1lKChyZXEtPmJlc3Rf cGFyZW50X2h3KS0+Y2xrKSwNCisJCXJlcS0+YmVzdF9wYXJlbnRfcmF0ZSk7DQorDQorCWlmIChi ZXN0X3JhdGUgPCAwKQ0KKwkJcmV0dXJuIGJlc3RfcmF0ZTsNCisNCisJcmVxLT5yYXRlID0gYmVz dF9yYXRlOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2NfY2xrX3NldF9w YXJlbnQoc3RydWN0IGNsa19odyAqaHcsIHU4IGluZGV4KQ0KK3sNCisJc3RydWN0IGlzY19jbGsg KmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCisNCisJaWYgKGluZGV4ID49IGNsa19od19nZXRf bnVtX3BhcmVudHMoaHcpKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWlzY19jbGstPnBhcmVu dF9pZCA9IGluZGV4Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHU4IGlzY19jbGtf Z2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodykNCit7DQorCXN0cnVjdCBpc2NfY2xrICppc2Nf Y2xrID0gdG9faXNjX2Nsayhodyk7DQorDQorCXJldHVybiBpc2NfY2xrLT5wYXJlbnRfaWQ7DQor fQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywNCisJ CQkgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSwNCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50 X3JhdGUpDQorew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0K Kwl1MzIgZGl2Ow0KKw0KKwlpZiAoIXJhdGUpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJZGl2 ID0gRElWX1JPVU5EX0NMT1NFU1QocGFyZW50X3JhdGUsIHJhdGUpOw0KKwlpZiAoZGl2ID4gKElT Q19DTEtfTUFYX0RJViArIDEpIHx8ICFkaXYpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaXNj X2Nsay0+ZGl2ID0gZGl2IC0gMTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgY2xrX29wcyBpc2NfY2xrX29wcyA9IHsNCisJLnByZXBhcmUJPSBpc2NfY2xrX3By ZXBhcmUsDQorCS51bnByZXBhcmUJPSBpc2NfY2xrX3VucHJlcGFyZSwNCisJLmVuYWJsZQkJPSBp c2NfY2xrX2VuYWJsZSwNCisJLmRpc2FibGUJPSBpc2NfY2xrX2Rpc2FibGUsDQorCS5pc19lbmFi bGVkCT0gaXNjX2Nsa19pc19lbmFibGVkLA0KKwkucmVjYWxjX3JhdGUJPSBpc2NfY2xrX3JlY2Fs Y19yYXRlLA0KKwkuZGV0ZXJtaW5lX3JhdGUJPSBpc2NfY2xrX2RldGVybWluZV9yYXRlLA0KKwku c2V0X3BhcmVudAk9IGlzY19jbGtfc2V0X3BhcmVudCwNCisJLmdldF9wYXJlbnQJPSBpc2NfY2xr X2dldF9wYXJlbnQsDQorCS5zZXRfcmF0ZQk9IGlzY19jbGtfc2V0X3JhdGUsDQorfTsNCisNCitz dGF0aWMgaW50IGlzY19jbGtfcmVnaXN0ZXIoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgdW5zaWdu ZWQgaW50IGlkKQ0KK3sNCisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQor CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBpc2MtPmRldi0+b2Zfbm9kZTsNCisJc3RydWN0IGlz Y19jbGsgKmlzY19jbGs7DQorCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7DQorCWNvbnN0IGNo YXIgKmNsa19uYW1lID0gbnAtPm5hbWU7DQorCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lc1szXTsN CisJaW50IG51bV9wYXJlbnRzOw0KKw0KKwludW1fcGFyZW50cyA9IG9mX2Nsa19nZXRfcGFyZW50 X2NvdW50KG5wKTsNCisJaWYgKG51bV9wYXJlbnRzIDwgMSB8fCBudW1fcGFyZW50cyA+IDMpDQor CQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaWYgKG51bV9wYXJlbnRzID4gMiAmJiBpZCA9PSBJU0Nf SVNQQ0spDQorCQludW1fcGFyZW50cyA9IDI7DQorDQorCW9mX2Nsa19wYXJlbnRfZmlsbChucCwg cGFyZW50X25hbWVzLCBudW1fcGFyZW50cyk7DQorDQorCWlmIChpZCA9PSBJU0NfTUNLKQ0KKwkJ b2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICJjbG9jay1vdXRwdXQtbmFtZXMiLCAmY2xrX25h bWUpOw0KKwllbHNlDQorCQljbGtfbmFtZSA9ICJpc2MtaXNwY2siOw0KKw0KKwlpbml0LnBhcmVu dF9uYW1lcwk9IHBhcmVudF9uYW1lczsNCisJaW5pdC5udW1fcGFyZW50cwk9IG51bV9wYXJlbnRz Ow0KKwlpbml0Lm5hbWUJCT0gY2xrX25hbWU7DQorCWluaXQub3BzCQk9ICZpc2NfY2xrX29wczsN CisJaW5pdC5mbGFncwkJPSBDTEtfU0VUX1JBVEVfR0FURSB8IENMS19TRVRfUEFSRU5UX0dBVEU7 DQorDQorCWlzY19jbGsgPSAmaXNjLT5pc2NfY2xrc1tpZF07DQorCWlzY19jbGstPmh3LmluaXQJ PSAmaW5pdDsNCisJaXNjX2Nsay0+cmVnbWFwCQk9IHJlZ21hcDsNCisJaXNjX2Nsay0+aWQJCT0g aWQ7DQorCWlzY19jbGstPmRldgkJPSBpc2MtPmRldjsNCisJc3Bpbl9sb2NrX2luaXQoJmlzY19j bGstPmxvY2spOw0KKw0KKwlpc2NfY2xrLT5jbGsgPSBjbGtfcmVnaXN0ZXIoaXNjLT5kZXYsICZp c2NfY2xrLT5odyk7DQorCWlmIChJU19FUlIoaXNjX2Nsay0+Y2xrKSkgew0KKwkJZGV2X2Vycihp c2MtPmRldiwgIiVzOiBjbG9jayByZWdpc3RlciBmYWlsXG4iLCBjbGtfbmFtZSk7DQorCQlyZXR1 cm4gUFRSX0VSUihpc2NfY2xrLT5jbGspOw0KKwl9IGVsc2UgaWYgKGlkID09IElTQ19NQ0spDQor CQlvZl9jbGtfYWRkX3Byb3ZpZGVyKG5wLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsIGlzY19jbGst PmNsayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQgaXNjX2Nsa19pbml0KHN0cnVjdCBp c2NfZGV2aWNlICppc2MpDQorew0KKwl1bnNpZ25lZCBpbnQgaTsNCisJaW50IHJldDsNCisNCisJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXNjLT5pc2NfY2xrcyk7IGkrKykNCisJCWlzYy0+ aXNjX2Nsa3NbaV0uY2xrID0gRVJSX1BUUigtRUlOVkFMKTsNCisNCisJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoaXNjLT5pc2NfY2xrcyk7IGkrKykgew0KKwkJcmV0ID0gaXNjX2Nsa19yZWdp c3Rlcihpc2MsIGkpOw0KKwkJaWYgKHJldCkNCisJCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJl dHVybiAwOw0KK30NCisNCit2b2lkIGlzY19jbGtfY2xlYW51cChzdHJ1Y3QgaXNjX2RldmljZSAq aXNjKQ0KK3sNCisJdW5zaWduZWQgaW50IGk7DQorDQorCW9mX2Nsa19kZWxfcHJvdmlkZXIoaXNj LT5kZXYtPm9mX25vZGUpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpc2MtPmlz Y19jbGtzKTsgaSsrKSB7DQorCQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9ICZpc2MtPmlzY19j bGtzW2ldOw0KKw0KKwkJaWYgKCFJU19FUlIoaXNjX2Nsay0+Y2xrKSkNCisJCQljbGtfdW5yZWdp c3Rlcihpc2NfY2xrLT5jbGspOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3F1ZXVlX3Nl dHVwKHN0cnVjdCB2YjJfcXVldWUgKnZxLA0KKwkJCSAgICB1bnNpZ25lZCBpbnQgKm5idWZmZXJz LCB1bnNpZ25lZCBpbnQgKm5wbGFuZXMsDQorCQkJICAgIHVuc2lnbmVkIGludCBzaXplc1tdLCBz dHJ1Y3QgZGV2aWNlICphbGxvY19kZXZzW10pDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNj ID0gdmIyX2dldF9kcnZfcHJpdih2cSk7DQorCXVuc2lnbmVkIGludCBzaXplID0gaXNjLT5mbXQu Zm10LnBpeC5zaXplaW1hZ2U7DQorDQorCWlmICgqbnBsYW5lcykNCisJCXJldHVybiBzaXplc1sw XSA8IHNpemUgPyAtRUlOVkFMIDogMDsNCisNCisJKm5wbGFuZXMgPSAxOw0KKwlzaXplc1swXSA9 IHNpemU7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19idWZmZXJfcHJl cGFyZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpDQorew0KKwlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVy ICp2YnVmID0gdG9fdmIyX3Y0bDJfYnVmZmVyKHZiKTsNCisJc3RydWN0IGlzY19kZXZpY2UgKmlz YyA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7DQorCXVuc2lnbmVkIGxvbmcgc2l6 ZSA9IGlzYy0+Zm10LmZtdC5waXguc2l6ZWltYWdlOw0KKw0KKwlpZiAodmIyX3BsYW5lX3NpemUo dmIsIDApIDwgc2l6ZSkgew0KKwkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJidWZmZXIgdG9v IHNtYWxsICglbHUgPCAlbHUpXG4iLA0KKwkJCSB2YjJfcGxhbmVfc2l6ZSh2YiwgMCksIHNpemUp Ow0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJdmIyX3NldF9wbGFuZV9wYXlsb2FkKHZi LCAwLCBzaXplKTsNCisNCisJdmJ1Zi0+ZmllbGQgPSBpc2MtPmZtdC5mbXQucGl4LmZpZWxkOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgaXNjX3N0YXJ0X2RtYShzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjKQ0KK3sNCisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdt YXA7DQorCXUzMiBzaXplaW1hZ2UgPSBpc2MtPmZtdC5mbXQucGl4LnNpemVpbWFnZTsNCisJdTMy IGRjdHJsX2R2aWV3Ow0KKwlkbWFfYWRkcl90IGFkZHIwOw0KKwl1MzIgaCwgdzsNCisNCisJaCA9 IGlzYy0+Zm10LmZtdC5waXguaGVpZ2h0Ow0KKwl3ID0gaXNjLT5mbXQuZm10LnBpeC53aWR0aDsN CisNCisJLyoNCisJICogSW4gY2FzZSB0aGUgc2Vuc29yIGlzIG5vdCBSQVcsIGl0IHdpbGwgb3V0 cHV0IGEgcGl4ZWwgKDEyLTE2IGJpdHMpDQorCSAqIHdpdGggdHdvIHNhbXBsZXMgb24gdGhlIElT QyBEYXRhIGJ1cyAod2hpY2ggaXMgOC0xMikNCisJICogSVNDIHdpbGwgY291bnQgZWFjaCBzYW1w bGUsIHNvLCB3ZSBuZWVkIHRvIG11bHRpcGx5IHRoZXNlIHZhbHVlcw0KKwkgKiBieSB0d28sIHRv IGdldCB0aGUgcmVhbCBudW1iZXIgb2Ygc2FtcGxlcyBmb3IgdGhlIHJlcXVpcmVkIHBpeGVscy4N CisJICovDQorCWlmICghSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5t YnVzX2NvZGUpKSB7DQorCQloIDw8PSAxOw0KKwkJdyA8PD0gMTsNCisJfQ0KKw0KKwkvKg0KKwkg KiBXZSBsaW1pdCB0aGUgY29sdW1uL3JvdyBjb3VudCB0aGF0IHRoZSBJU0Mgd2lsbCBvdXRwdXQg YWNjb3JkaW5nDQorCSAqIHRvIHRoZSBjb25maWd1cmVkIHJlc29sdXRpb24gdGhhdCB3ZSB3YW50 Lg0KKwkgKiBUaGlzIHdpbGwgYXZvaWQgdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgc2Vuc29yIGlz IG1pc2NvbmZpZ3VyZWQsDQorCSAqIHNlbmRpbmcgbW9yZSBkYXRhLCBhbmQgdGhlIElTQyB3aWxs IGp1c3QgdGFrZSBpdCBhbmQgRE1BIHRvIG1lbW9yeSwNCisJICogY2F1c2luZyBjb3JydXB0aW9u Lg0KKwkgKi8NCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX1BGRV9DRkcxLA0KKwkJICAgICAo SVNDX1BGRV9DRkcxX0NPTE1JTigwKSAmIElTQ19QRkVfQ0ZHMV9DT0xNSU5fTUFTSykgfA0KKwkJ ICAgICAoSVNDX1BGRV9DRkcxX0NPTE1BWCh3IC0gMSkgJiBJU0NfUEZFX0NGRzFfQ09MTUFYX01B U0spKTsNCisNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX1BGRV9DRkcyLA0KKwkJICAgICAo SVNDX1BGRV9DRkcyX1JPV01JTigwKSAmIElTQ19QRkVfQ0ZHMl9ST1dNSU5fTUFTSykgfA0KKwkJ ICAgICAoSVNDX1BGRV9DRkcyX1JPV01BWChoIC0gMSkgJiBJU0NfUEZFX0NGRzJfUk9XTUFYX01B U0spKTsNCisNCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgSVNDX1BGRV9DRkcwLA0KKwkJ CSAgIElTQ19QRkVfQ0ZHMF9DT0xFTiB8IElTQ19QRkVfQ0ZHMF9ST1dFTiwNCisJCQkgICBJU0Nf UEZFX0NGRzBfQ09MRU4gfCBJU0NfUEZFX0NGRzBfUk9XRU4pOw0KKw0KKwlhZGRyMCA9IHZiMl9k bWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKCZpc2MtPmN1cl9mcm0tPnZiLnZiMl9idWYsIDApOw0K KwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMCwgYWRkcjApOw0KKw0KKwlzd2l0Y2ggKGlz Yy0+Y29uZmlnLmZvdXJjYykgew0KKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjA6DQorCQlyZWdt YXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMSwgYWRkcjAgKyAoc2l6ZWltYWdlICogMikgLyAzKTsN CisJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQUQyLCBhZGRyMCArIChzaXplaW1hZ2UgKiA1 KSAvIDYpOw0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6DQorCQlyZWdt YXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMSwgYWRkcjAgKyBzaXplaW1hZ2UgLyAyKTsNCisJCXJl Z21hcF93cml0ZShyZWdtYXAsIElTQ19EQUQyLCBhZGRyMCArIChzaXplaW1hZ2UgKiAzKSAvIDQp Ow0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlicmVhazsNCisJfQ0KKw0KKwlkY3RybF9kdmll dyA9IGlzYy0+Y29uZmlnLmRjdHJsX2R2aWV3Ow0KKw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJ U0NfRENUUkwsIGRjdHJsX2R2aWV3IHwgSVNDX0RDVFJMX0lFX0lTKTsNCisJc3Bpbl9sb2NrKCZp c2MtPmF3Yl9sb2NrKTsNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NUUkxFTiwgSVNDX0NU UkxfQ0FQVFVSRSk7DQorCXNwaW5fdW5sb2NrKCZpc2MtPmF3Yl9sb2NrKTsNCit9DQorDQorc3Rh dGljIHZvaWQgaXNjX3NldF9waXBlbGluZShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCB1MzIgcGlw ZWxpbmUpDQorew0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCisJc3Ry dWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsNCisJdTMyIHZhbCwgYmF5X2NmZzsN CisJY29uc3QgdTMyICpnYW1tYTsNCisJdW5zaWduZWQgaW50IGk7DQorDQorCS8qIFdCLS0+Q0ZB LS0+Q0MtLT5HQU0tLT5DU0MtLT5DQkMtLT5TVUI0MjItLT5TVUI0MjAgKi8NCisJZm9yIChpID0g MDsgaSA8IElTQ19QSVBFX0xJTkVfTk9ERV9OVU07IGkrKykgew0KKwkJdmFsID0gcGlwZWxpbmUg JiBCSVQoaSkgPyAxIDogMDsNCisJCXJlZ21hcF9maWVsZF93cml0ZShpc2MtPnBpcGVsaW5lW2ld LCB2YWwpOw0KKwl9DQorDQorCWlmICghcGlwZWxpbmUpDQorCQlyZXR1cm47DQorDQorCWJheV9j ZmcgPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPmNmYV9iYXljZmc7DQorDQorCWlmIChjdHJscy0+ YXdiID09IElTQ19XQl9OT05FKQ0KKwkJaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2MpOw0KKw0KKwly ZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfV0JfQ0ZHLCBiYXlfY2ZnKTsNCisJaXNjX3VwZGF0ZV9h d2JfY3RybHMoaXNjKTsNCisNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NGQV9DRkcsIGJh eV9jZmcgfCBJU0NfQ0ZBX0NGR19FSVRQT0wpOw0KKw0KKwlnYW1tYSA9ICZpc2NfZ2FtbWFfdGFi bGVbY3RybHMtPmdhbW1hX2luZGV4XVswXTsNCisJcmVnbWFwX2J1bGtfd3JpdGUocmVnbWFwLCBJ U0NfR0FNX0JFTlRSWSwgZ2FtbWEsIEdBTU1BX0VOVFJJRVMpOw0KKwlyZWdtYXBfYnVsa193cml0 ZShyZWdtYXAsIElTQ19HQU1fR0VOVFJZLCBnYW1tYSwgR0FNTUFfRU5UUklFUyk7DQorCXJlZ21h cF9idWxrX3dyaXRlKHJlZ21hcCwgSVNDX0dBTV9SRU5UUlksIGdhbW1hLCBHQU1NQV9FTlRSSUVT KTsNCisNCisJLyogQ29udmVydCBSR0IgdG8gWVVWICovDQorCXJlZ21hcF93cml0ZShyZWdtYXAs IElTQ19DU0NfWVJfWUcsIDB4NDIgfCAoMHg4MSA8PCAxNikpOw0KKwlyZWdtYXBfd3JpdGUocmVn bWFwLCBJU0NfQ1NDX1lCX09ZLCAweDE5IHwgKDB4MTAgPDwgMTYpKTsNCisJcmVnbWFwX3dyaXRl KHJlZ21hcCwgSVNDX0NTQ19DQlJfQ0JHLCAweEZEQSB8ICgweEZCNiA8PCAxNikpOw0KKwlyZWdt YXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX0NCQl9PQ0IsIDB4NzAgfCAoMHg4MCA8PCAxNikpOw0K KwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX0NSUl9DUkcsIDB4NzAgfCAoMHhGQTIgPDwg MTYpKTsNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19DUkJfT0NSLCAweEZFRSB8ICgw eDgwIDw8IDE2KSk7DQorDQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DQkNfQlJJR0hULCBj dHJscy0+YnJpZ2h0bmVzcyk7DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DQkNfQ09OVFJB U1QsIGN0cmxzLT5jb250cmFzdCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3VwZGF0ZV9wcm9m aWxlKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAg PSBpc2MtPnJlZ21hcDsNCisJdTMyIHNyOw0KKwlpbnQgY291bnRlciA9IDEwMDsNCisNCisJcmVn bWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NUUkxFTiwgSVNDX0NUUkxfVVBQUk8pOw0KKw0KKwlyZWdt YXBfcmVhZChyZWdtYXAsIElTQ19DVFJMU1IsICZzcik7DQorCXdoaWxlICgoc3IgJiBJU0NfQ1RS TF9VUFBSTykgJiYgY291bnRlci0tKSB7DQorCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7DQor CQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19DVFJMU1IsICZzcik7DQorCX0NCisNCisJaWYgKGNv dW50ZXIgPCAwKSB7DQorCQl2NGwyX3dhcm4oJmlzYy0+djRsMl9kZXYsICJUaW1lIG91dCB0byB1 cGRhdGUgcHJvZmlsZVxuIik7DQorCQlyZXR1cm4gLUVUSU1FRE9VVDsNCisJfQ0KKw0KKwlyZXR1 cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgaXNjX3NldF9oaXN0b2dyYW0oc3RydWN0IGlzY19k ZXZpY2UgKmlzYywgYm9vbCBlbmFibGUpDQorew0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBp c2MtPnJlZ21hcDsNCisJc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsNCisN CisJaWYgKGVuYWJsZSkgew0KKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0hJU19DRkcsDQor CQkJICAgICBJU0NfSElTX0NGR19NT0RFX0dSIHwNCisJCQkgICAgIChpc2MtPmNvbmZpZy5zZF9m b3JtYXQtPmNmYV9iYXljZmcNCisJCQkJCTw8IElTQ19ISVNfQ0ZHX0JBWVNFTF9TSElGVCkgfA0K KwkJCQkJSVNDX0hJU19DRkdfUkFSKTsNCisJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNf Q1RSTCwgSVNDX0hJU19DVFJMX0VOKTsNCisJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19JTlRF TiwgSVNDX0lOVF9ISVNET05FKTsNCisJCWN0cmxzLT5oaXN0X2lkID0gSVNDX0hJU19DRkdfTU9E RV9HUjsNCisJCWlzY191cGRhdGVfcHJvZmlsZShpc2MpOw0KKwkJcmVnbWFwX3dyaXRlKHJlZ21h cCwgSVNDX0NUUkxFTiwgSVNDX0NUUkxfSElTUkVRKTsNCisNCisJCWN0cmxzLT5oaXN0X3N0YXQg PSBISVNUX0VOQUJMRUQ7DQorCX0gZWxzZSB7DQorCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0Nf SU5URElTLCBJU0NfSU5UX0hJU0RPTkUpOw0KKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0hJ U19DVFJMLCBJU0NfSElTX0NUUkxfRElTKTsNCisNCisJCWN0cmxzLT5oaXN0X3N0YXQgPSBISVNU X0RJU0FCTEVEOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2NvbmZpZ3VyZShzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjKQ0KK3sNCisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdt YXA7DQorCXUzMiBwZmVfY2ZnMCwgcmxwX21vZGUsIGRjZmcsIG1hc2ssIHBpcGVsaW5lOw0KKwlz dHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgKnN1YmRldiA9IGlzYy0+Y3VycmVudF9zdWJkZXY7DQor DQorCXBmZV9jZmcwID0gaXNjLT5jb25maWcuc2RfZm9ybWF0LT5wZmVfY2ZnMF9icHM7DQorCXJs cF9tb2RlID0gaXNjLT5jb25maWcucmxwX2NmZ19tb2RlOw0KKwlwaXBlbGluZSA9IGlzYy0+Y29u ZmlnLmJpdHNfcGlwZWxpbmU7DQorDQorCWRjZmcgPSBpc2MtPmNvbmZpZy5kY2ZnX2ltb2RlIHwN CisJCSAgICAgICBJU0NfRENGR19ZTUJTSVpFX0JFQVRTOCB8IElTQ19EQ0ZHX0NNQlNJWkVfQkVB VFM4Ow0KKw0KKwlwZmVfY2ZnMCAgfD0gc3ViZGV2LT5wZmVfY2ZnMCB8IElTQ19QRkVfQ0ZHMF9N T0RFX1BST0dSRVNTSVZFOw0KKwltYXNrID0gSVNDX1BGRV9DRkcwX0JQU19NQVNLIHwgSVNDX1BG RV9DRkcwX0hQT0xfTE9XIHwNCisJICAgICAgIElTQ19QRkVfQ0ZHMF9WUE9MX0xPVyB8IElTQ19Q RkVfQ0ZHMF9QUE9MX0xPVyB8DQorCSAgICAgICBJU0NfUEZFX0NGRzBfTU9ERV9NQVNLIHwgSVND X1BGRV9DRkcwX0NDSVJfQ1JDIHwNCisJCSAgIElTQ19QRkVfQ0ZHMF9DQ0lSNjU2Ow0KKw0KKwly ZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBJU0NfUEZFX0NGRzAsIG1hc2ssIHBmZV9jZmcwKTsN CisNCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgSVNDX1JMUF9DRkcsIElTQ19STFBfQ0ZH X01PREVfTUFTSywNCisJCQkgICBybHBfbW9kZSk7DQorDQorCXJlZ21hcF93cml0ZShyZWdtYXAs IElTQ19EQ0ZHLCBkY2ZnKTsNCisNCisJLyogU2V0IHRoZSBwaXBlbGluZSAqLw0KKwlpc2Nfc2V0 X3BpcGVsaW5lKGlzYywgcGlwZWxpbmUpOw0KKw0KKwkvKg0KKwkgKiBUaGUgY3VycmVudCBpbXBs ZW1lbnRlZCBoaXN0b2dyYW0gaXMgYXZhaWxhYmxlIGZvciBSQVcgUiwgQiwgR0IsIEdSDQorCSAq IGNoYW5uZWxzLiBXZSBuZWVkIHRvIGNoZWNrIGlmIHNlbnNvciBpcyBvdXRwdXR0aW5nIFJBVyBC QVlFUg0KKwkgKi8NCisJaWYgKGlzYy0+Y3RybHMuYXdiICYmDQorCSAgICBJU0NfSVNfRk9STUFU X1JBVyhpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpDQorCQlpc2Nfc2V0X2hpc3Rv Z3JhbShpc2MsIHRydWUpOw0KKwllbHNlDQorCQlpc2Nfc2V0X2hpc3RvZ3JhbShpc2MsIGZhbHNl KTsNCisNCisJLyogVXBkYXRlIHByb2ZpbGUgKi8NCisJcmV0dXJuIGlzY191cGRhdGVfcHJvZmls ZShpc2MpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19zdGFydF9zdHJlYW1pbmcoc3RydWN0IHZi Ml9xdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBjb3VudCkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNl ICppc2MgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsNCisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0g aXNjLT5yZWdtYXA7DQorCXN0cnVjdCBpc2NfYnVmZmVyICpidWY7DQorCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7DQorCWludCByZXQ7DQorDQorCS8qIEVuYWJsZSBzdHJlYW0gb24gdGhlIHN1YiBkZXZp Y2UgKi8NCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwg dmlkZW8sIHNfc3RyZWFtLCAxKTsNCisJaWYgKHJldCAmJiByZXQgIT0gLUVOT0lPQ1RMQ01EKSB7 DQorCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgInN0cmVhbSBvbiBmYWlsZWQgaW4gc3ViZGV2 ICVkXG4iLA0KKwkJCSByZXQpOw0KKwkJZ290byBlcnJfc3RhcnRfc3RyZWFtOw0KKwl9DQorDQor CXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNjLT5kZXYpOw0KKw0KKwlyZXQgPSBpc2NfY29uZmlndXJl KGlzYyk7DQorCWlmICh1bmxpa2VseShyZXQpKQ0KKwkJZ290byBlcnJfY29uZmlndXJlOw0KKw0K KwkvKiBFbmFibGUgRE1BIGludGVycnVwdCAqLw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0Nf SU5URU4sIElTQ19JTlRfRERPTkUpOw0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5kbWFf cXVldWVfbG9jaywgZmxhZ3MpOw0KKw0KKwlpc2MtPnNlcXVlbmNlID0gMDsNCisJaXNjLT5zdG9w ID0gZmFsc2U7DQorCXJlaW5pdF9jb21wbGV0aW9uKCZpc2MtPmNvbXApOw0KKw0KKwlpc2MtPmN1 cl9mcm0gPSBsaXN0X2ZpcnN0X2VudHJ5KCZpc2MtPmRtYV9xdWV1ZSwNCisJCQkJCXN0cnVjdCBp c2NfYnVmZmVyLCBsaXN0KTsNCisJbGlzdF9kZWwoJmlzYy0+Y3VyX2ZybS0+bGlzdCk7DQorDQor CWlzY19zdGFydF9kbWEoaXNjKTsNCisNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5k bWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KKw0KKwkvKiBpZiB3ZSBzdHJlYW1pbmcgZnJvbSBSQVcs IHdlIGNhbiBkbyBvbmUtc2hvdCB3aGl0ZSBiYWxhbmNlIGFkaiAqLw0KKwlpZiAoSVNDX0lTX0ZP Uk1BVF9SQVcoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KKwkJdjRsMl9jdHJs X2FjdGl2YXRlKGlzYy0+ZG9fd2JfY3RybCwgdHJ1ZSk7DQorDQorCXJldHVybiAwOw0KKw0KK2Vy cl9jb25maWd1cmU6DQorCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNjLT5kZXYpOw0KKw0KKwl2NGwy X3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCB2aWRlbywgc19zdHJlYW0sIDAp Ow0KKw0KK2Vycl9zdGFydF9zdHJlYW06DQorCXNwaW5fbG9ja19pcnFzYXZlKCZpc2MtPmRtYV9x dWV1ZV9sb2NrLCBmbGFncyk7DQorCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVmLCAmaXNjLT5kbWFf cXVldWUsIGxpc3QpDQorCQl2YjJfYnVmZmVyX2RvbmUoJmJ1Zi0+dmIudmIyX2J1ZiwgVkIyX0JV Rl9TVEFURV9RVUVVRUQpOw0KKwlJTklUX0xJU1RfSEVBRCgmaXNjLT5kbWFfcXVldWUpOw0KKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQorDQor CXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlzY19zdG9wX3N0cmVhbWluZyhzdHJ1 Y3QgdmIyX3F1ZXVlICp2cSkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2YjJfZ2V0 X2Rydl9wcml2KHZxKTsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisJc3RydWN0IGlzY19idWZm ZXIgKmJ1ZjsNCisJaW50IHJldDsNCisNCisJdjRsMl9jdHJsX2FjdGl2YXRlKGlzYy0+ZG9fd2Jf Y3RybCwgZmFsc2UpOw0KKw0KKwlpc2MtPnN0b3AgPSB0cnVlOw0KKw0KKwkvKiBXYWl0IHVudGls IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWUgKi8NCisJaWYgKGlzYy0+Y3VyX2ZybSAmJiAh d2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpc2MtPmNvbXAsIDUgKiBIWikpDQorCQl2NGwy X2VycigmaXNjLT52NGwyX2RldiwNCisJCQkgIlRpbWVvdXQgd2FpdGluZyBmb3IgZW5kIG9mIHRo ZSBjYXB0dXJlXG4iKTsNCisNCisJLyogRGlzYWJsZSBETUEgaW50ZXJydXB0ICovDQorCXJlZ21h cF93cml0ZShpc2MtPnJlZ21hcCwgSVNDX0lOVERJUywgSVNDX0lOVF9ERE9ORSk7DQorDQorCXBt X3J1bnRpbWVfcHV0X3N5bmMoaXNjLT5kZXYpOw0KKw0KKwkvKiBEaXNhYmxlIHN0cmVhbSBvbiB0 aGUgc3ViIGRldmljZSAqLw0KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9z dWJkZXYtPnNkLCB2aWRlbywgc19zdHJlYW0sIDApOw0KKwlpZiAocmV0ICYmIHJldCAhPSAtRU5P SU9DVExDTUQpDQorCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgInN0cmVhbSBvZmYgZmFpbGVk IGluIHN1YmRldlxuIik7DQorDQorCS8qIFJlbGVhc2UgYWxsIGFjdGl2ZSBidWZmZXJzICovDQor CXNwaW5fbG9ja19pcnFzYXZlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQorCWlmICh1 bmxpa2VseShpc2MtPmN1cl9mcm0pKSB7DQorCQl2YjJfYnVmZmVyX2RvbmUoJmlzYy0+Y3VyX2Zy bS0+dmIudmIyX2J1ZiwNCisJCQkJVkIyX0JVRl9TVEFURV9FUlJPUik7DQorCQlpc2MtPmN1cl9m cm0gPSBOVUxMOw0KKwl9DQorCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVmLCAmaXNjLT5kbWFfcXVl dWUsIGxpc3QpDQorCQl2YjJfYnVmZmVyX2RvbmUoJmJ1Zi0+dmIudmIyX2J1ZiwgVkIyX0JVRl9T VEFURV9FUlJPUik7DQorCUlOSVRfTElTVF9IRUFEKCZpc2MtPmRtYV9xdWV1ZSk7DQorCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCit9DQorDQor c3RhdGljIHZvaWQgaXNjX2J1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpDQorew0K KwlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICp2YnVmID0gdG9fdmIyX3Y0bDJfYnVmZmVyKHZiKTsN CisJc3RydWN0IGlzY19idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2YnVmLCBzdHJ1Y3QgaXNj X2J1ZmZlciwgdmIpOw0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJp dih2Yi0+dmIyX3F1ZXVlKTsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisNCisJc3Bpbl9sb2Nr X2lycXNhdmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCisJaWYgKCFpc2MtPmN1cl9m cm0gJiYgbGlzdF9lbXB0eSgmaXNjLT5kbWFfcXVldWUpICYmDQorCQl2YjJfaXNfc3RyZWFtaW5n KHZiLT52YjJfcXVldWUpKSB7DQorCQlpc2MtPmN1cl9mcm0gPSBidWY7DQorCQlpc2Nfc3RhcnRf ZG1hKGlzYyk7DQorCX0gZWxzZQ0KKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT5saXN0LCAmaXNjLT5k bWFfcXVldWUpOw0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2MtPmRtYV9xdWV1ZV9sb2Nr LCBmbGFncyk7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgaXNjX2Zvcm1hdCAqZmluZF9mb3JtYXRf YnlfZm91cmNjKHN0cnVjdCBpc2NfZGV2aWNlICppc2MsDQorCQkJCQkJIHVuc2lnbmVkIGludCBm b3VyY2MpDQorew0KKwl1bnNpZ25lZCBpbnQgbnVtX2Zvcm1hdHMgPSBpc2MtPm51bV91c2VyX2Zv cm1hdHM7DQorCXN0cnVjdCBpc2NfZm9ybWF0ICpmbXQ7DQorCXVuc2lnbmVkIGludCBpOw0KKw0K Kwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Zvcm1hdHM7IGkrKykgew0KKwkJZm10ID0gaXNjLT51c2Vy X2Zvcm1hdHNbaV07DQorCQlpZiAoZm10LT5mb3VyY2MgPT0gZm91cmNjKQ0KKwkJCXJldHVybiBm bXQ7DQorCX0NCisNCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg dmIyX29wcyBpc2NfdmIyX29wcyA9IHsNCisJLnF1ZXVlX3NldHVwCQk9IGlzY19xdWV1ZV9zZXR1 cCwNCisJLndhaXRfcHJlcGFyZQkJPSB2YjJfb3BzX3dhaXRfcHJlcGFyZSwNCisJLndhaXRfZmlu aXNoCQk9IHZiMl9vcHNfd2FpdF9maW5pc2gsDQorCS5idWZfcHJlcGFyZQkJPSBpc2NfYnVmZmVy X3ByZXBhcmUsDQorCS5zdGFydF9zdHJlYW1pbmcJPSBpc2Nfc3RhcnRfc3RyZWFtaW5nLA0KKwku c3RvcF9zdHJlYW1pbmcJCT0gaXNjX3N0b3Bfc3RyZWFtaW5nLA0KKwkuYnVmX3F1ZXVlCQk9IGlz Y19idWZmZXJfcXVldWUsDQorfTsNCisNCitzdGF0aWMgaW50IGlzY19xdWVyeWNhcChzdHJ1Y3Qg ZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCisJCQkgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2Fw KQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQor DQorCXN0cnNjcHkoY2FwLT5kcml2ZXIsIEFUTUVMX0lTQ19OQU1FLCBzaXplb2YoY2FwLT5kcml2 ZXIpKTsNCisJc3Ryc2NweShjYXAtPmNhcmQsICJBdG1lbCBJbWFnZSBTZW5zb3IgQ29udHJvbGxl ciIsIHNpemVvZihjYXAtPmNhcmQpKTsNCisJc25wcmludGYoY2FwLT5idXNfaW5mbywgc2l6ZW9m KGNhcC0+YnVzX2luZm8pLA0KKwkJICJwbGF0Zm9ybTolcyIsIGlzYy0+djRsMl9kZXYubmFtZSk7 DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19lbnVtX2ZtdF92aWRfY2Fw KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KKwkJCQkgc3RydWN0IHY0bDJfZm10ZGVz YyAqZikNCit7DQorCXUzMiBpbmRleCA9IGYtPmluZGV4Ow0KKwl1MzIgaSwgc3VwcG9ydGVkX2lu ZGV4Ow0KKw0KKwlpZiAoaW5kZXggPCBBUlJBWV9TSVpFKGNvbnRyb2xsZXJfZm9ybWF0cykpIHsN CisJCWYtPnBpeGVsZm9ybWF0ID0gY29udHJvbGxlcl9mb3JtYXRzW2luZGV4XS5mb3VyY2M7DQor CQlyZXR1cm4gMDsNCisJfQ0KKw0KKwlpbmRleCAtPSBBUlJBWV9TSVpFKGNvbnRyb2xsZXJfZm9y bWF0cyk7DQorDQorCWkgPSAwOw0KKwlzdXBwb3J0ZWRfaW5kZXggPSAwOw0KKw0KKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShmb3JtYXRzX2xpc3QpOyBpKyspIHsNCisJCWlmICghSVNDX0lT X0ZPUk1BVF9SQVcoZm9ybWF0c19saXN0W2ldLm1idXNfY29kZSkgfHwNCisJCSAgICAhZm9ybWF0 c19saXN0W2ldLnNkX3N1cHBvcnQpDQorCQkJY29udGludWU7DQorCQlpZiAoc3VwcG9ydGVkX2lu ZGV4ID09IGluZGV4KSB7DQorCQkJZi0+cGl4ZWxmb3JtYXQgPSBmb3JtYXRzX2xpc3RbaV0uZm91 cmNjOw0KKwkJCXJldHVybiAwOw0KKwkJfQ0KKwkJc3VwcG9ydGVkX2luZGV4Kys7DQorCX0NCisN CisJcmV0dXJuIC1FSU5WQUw7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2dfZm10X3ZpZF9jYXAo c3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQorCQkJICAgICAgc3RydWN0IHY0bDJfZm9y bWF0ICpmbXQpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShm aWxlKTsNCisNCisJKmZtdCA9IGlzYy0+Zm10Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorLyoN CisgKiBDaGVja3MgdGhlIGN1cnJlbnQgY29uZmlndXJlZCBmb3JtYXQsIGlmIElTQyBjYW4gb3V0 cHV0IGl0LA0KKyAqIGNvbnNpZGVyaW5nIHdoaWNoIHR5cGUgb2YgZm9ybWF0IHRoZSBJU0MgcmVj ZWl2ZXMgZnJvbSB0aGUgc2Vuc29yDQorICovDQorc3RhdGljIGludCBpc2NfdHJ5X3ZhbGlkYXRl X2Zvcm1hdHMoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCWludCByZXQ7DQorCWJvb2wg YmF5ZXIgPSBmYWxzZSwgeXV2ID0gZmFsc2UsIHJnYiA9IGZhbHNlLCBncmV5ID0gZmFsc2U7DQor DQorCS8qIGFsbCBmb3JtYXRzIHN1cHBvcnRlZCBieSB0aGUgUkxQIG1vZHVsZSBhcmUgT0sgKi8N CisJc3dpdGNoIChpc2MtPnRyeV9jb25maWcuZm91cmNjKSB7DQorCWNhc2UgVjRMMl9QSVhfRk1U X1NCR0dSODoNCisJY2FzZSBWNEwyX1BJWF9GTVRfU0dCUkc4Og0KKwljYXNlIFY0TDJfUElYX0ZN VF9TR1JCRzg6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCODoNCisJY2FzZSBWNEwyX1BJWF9G TVRfU0JHR1IxMDoNCisJY2FzZSBWNEwyX1BJWF9GTVRfU0dCUkcxMDoNCisJY2FzZSBWNEwyX1BJ WF9GTVRfU0dSQkcxMDoNCisJY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0IxMDoNCisJY2FzZSBWNEwy X1BJWF9GTVRfU0JHR1IxMjoNCisJY2FzZSBWNEwyX1BJWF9GTVRfU0dCUkcxMjoNCisJY2FzZSBW NEwyX1BJWF9GTVRfU0dSQkcxMjoNCisJY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0IxMjoNCisJCXJl dCA9IDA7DQorCQliYXllciA9IHRydWU7DQorCQlicmVhazsNCisNCisJY2FzZSBWNEwyX1BJWF9G TVRfWVVWNDIwOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOg0KKwljYXNlIFY0TDJfUElY X0ZNVF9ZVVlWOg0KKwkJcmV0ID0gMDsNCisJCXl1diA9IHRydWU7DQorCQlicmVhazsNCisNCisJ Y2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9BQkdSMzI6DQor CWNhc2UgVjRMMl9QSVhfRk1UX1hCR1IzMjoNCisJY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjQ0NDoN CisJY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjU1NToNCisJCXJldCA9IDA7DQorCQlyZ2IgPSB0cnVl Ow0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6DQorCQlyZXQgPSAwOw0KKwkJ Z3JleSA9IHRydWU7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJLyogYW55IG90aGVyIGRpZmZl cmVudCBmb3JtYXRzIGFyZSBub3Qgc3VwcG9ydGVkICovDQorCQlyZXQgPSAtRUlOVkFMOw0KKwl9 DQorDQorCS8qIHdlIGNhbm5vdCBvdXRwdXQgUkFXL0dyZXkgaWYgd2UgZG8gbm90IHJlY2VpdmUg UkFXICovDQorCWlmICgoYmF5ZXIgfHwgZ3JleSkgJiYNCisJICAgICFJU0NfSVNfRk9STUFUX1JB Vyhpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KKwkJcmV0dXJuIC1FSU5W QUw7DQorDQorCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2RldiwNCisJCSAiRm9ybWF0 IHZhbGlkYXRpb24sIHJlcXVlc3RlZCByZ2I9JXUsIHl1dj0ldSwgZ3JleT0ldSwgYmF5ZXI9JXVc biIsDQorCQkgcmdiLCB5dXYsIGdyZXksIGJheWVyKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQor DQorLyoNCisgKiBDb25maWd1cmVzIHRoZSBSTFAgYW5kIERNQSBtb2R1bGVzLCBkZXBlbmRpbmcg b24gdGhlIG91dHB1dCBmb3JtYXQNCisgKiBjb25maWd1cmVkIGZvciB0aGUgSVNDLg0KKyAqIElm IGRpcmVjdF9kdW1wID09IHRydWUsIGp1c3QgZHVtcCByYXcgZGF0YSA4IGJpdHMuDQorICovDQor c3RhdGljIGludCBpc2NfdHJ5X2NvbmZpZ3VyZV9ybHBfZG1hKHN0cnVjdCBpc2NfZGV2aWNlICpp c2MsIGJvb2wgZGlyZWN0X2R1bXApDQorew0KKwlpZiAoZGlyZWN0X2R1bXApIHsNCisJCWlzYy0+ dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0RBVDg7DQorCQlpc2Mt PnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDg7DQorCQlpc2Mt PnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNj LT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJc3dpdGNoIChp c2MtPnRyeV9jb25maWcuZm91cmNjKSB7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSODoNCisJ Y2FzZSBWNEwyX1BJWF9GTVRfU0dCUkc4Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR1JCRzg6DQor CWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCODoNCisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21v ZGUgPSBJU0NfUkxQX0NGR19NT0RFX0RBVDg7DQorCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9k ZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDg7DQorCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZp ZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDg7 DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1IxMDoNCisJY2FzZSBWNEwyX1BJ WF9GTVRfU0dCUkcxMDoNCisJY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkcxMDoNCisJY2FzZSBWNEwy X1BJWF9GTVRfU1JHR0IxMDoNCisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0Nf UkxQX0NGR19NT0RFX0RBVDEwOw0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0Nf RENGR19JTU9ERV9QQUNLRUQxNjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElT Q19EQ1RSTF9EVklFV19QQUNLRUQ7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQorCQli cmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1IxMjoNCisJY2FzZSBWNEwyX1BJWF9GTVRf U0dCUkcxMjoNCisJY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkcxMjoNCisJY2FzZSBWNEwyX1BJWF9G TVRfU1JHR0IxMjoNCisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NG R19NT0RFX0RBVDEyOw0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19J TU9ERV9QQUNLRUQxNjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RS TF9EVklFV19QQUNLRUQ7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQorCQlicmVhazsN CisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1Og0KKwkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdf bW9kZSA9IElTQ19STFBfQ0ZHX01PREVfUkdCNTY1Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdf aW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQxNjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3Ry bF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQorCQlpc2MtPnRyeV9jb25maWcuYnBw ID0gMTY7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjQ0NDoNCisJCWlzYy0+ dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0FSR0I0NDQ7DQorCQlp c2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0KKwkJ aXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJ CWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZN VF9BUkdCNTU1Og0KKwkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZH X01PREVfQVJHQjU1NTsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdf SU1PREVfUEFDS0VEMTY7DQorCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENU UkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KKwkJYnJlYWs7 DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FCR1IzMjoNCisJY2FzZSBWNEwyX1BJWF9GTVRfWEJHUjMy Og0KKwkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfQVJH QjMyOw0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNL RUQzMjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19Q QUNLRUQ7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMzI7DQorCQlicmVhazsNCisJY2FzZSBW NEwyX1BJWF9GTVRfWVVWNDIwOg0KKwkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElT Q19STFBfQ0ZHX01PREVfWVlDQzsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVND X0RDRkdfSU1PREVfWUM0MjBQOw0KKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVND X0RDVFJMX0RWSUVXX1BMQU5BUjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxMjsNCisJCWJy ZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOg0KKwkJaXNjLT50cnlfY29uZmlnLnJs cF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfWVlDQzsNCisJCWlzYy0+dHJ5X2NvbmZpZy5k Y2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfWUM0MjJQOw0KKwkJaXNjLT50cnlfY29uZmlnLmRj dHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BMQU5BUjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5i cHAgPSAxNjsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOg0KKwkJaXNjLT50 cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfWVlDQzsNCisJCWlzYy0+ dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMzI7DQorCQlpc2Mt PnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNj LT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX0dS RVk6DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9E QVRZODsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFD S0VEODsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19Q QUNLRUQ7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0gODsNCisJCWJyZWFrOw0KKwlkZWZhdWx0 Og0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qDQorICog Q29uZmlndXJpbmcgcGlwZWxpbmUgbW9kdWxlcywgZGVwZW5kaW5nIG9uIHdoaWNoIGZvcm1hdCB0 aGUgSVNDIG91dHB1dHMNCisgKiBhbmQgY29uc2lkZXJpbmcgd2hpY2ggZm9ybWF0IGl0IGhhcyBh cyBpbnB1dCBmcm9tIHRoZSBzZW5zb3IuDQorICovDQorc3RhdGljIGludCBpc2NfdHJ5X2NvbmZp Z3VyZV9waXBlbGluZShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KK3sNCisJc3dpdGNoIChpc2Mt PnRyeV9jb25maWcuZm91cmNjKSB7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToNCisJY2Fz ZSBWNEwyX1BJWF9GTVRfQVJHQjU1NToNCisJY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjQ0NDoNCisJ Y2FzZSBWNEwyX1BJWF9GTVRfQUJHUjMyOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9YQkdSMzI6DQor CQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICovDQor CQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19j b2RlKSkgew0KKwkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8 DQorCQkJCVdCX0VOQUJMRSB8IEdBTV9FTkFCTEVTOw0KKwkJfSBlbHNlIHsNCisJCQlpc2MtPnRy eV9jb25maWcuYml0c19waXBlbGluZSA9IDB4MDsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIFY0 TDJfUElYX0ZNVF9ZVVY0MjA6DQorCQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywgd2UgY29u dmVydCBpbnNpZGUgSVNDICovDQorCQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50cnlfY29u ZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KKwkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3Bp cGVsaW5lID0gQ0ZBX0VOQUJMRSB8DQorCQkJCUNTQ19FTkFCTEUgfCBXQl9FTkFCTEUgfCBHQU1f RU5BQkxFUyB8DQorCQkJCVNVQjQyMF9FTkFCTEUgfCBTVUI0MjJfRU5BQkxFIHwgQ0JDX0VOQUJM RTsNCisJCX0gZWxzZSB7DQorCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7 DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoNCisJCS8qIGlm IHNlbnNvciBmb3JtYXQgaXMgUkFXLCB3ZSBjb252ZXJ0IGluc2lkZSBJU0MgKi8NCisJCWlmIChJ U0NfSVNfRk9STUFUX1JBVyhpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7 DQorCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwNCisJCQkJ Q1NDX0VOQUJMRSB8IFdCX0VOQUJMRSB8IEdBTV9FTkFCTEVTIHwNCisJCQkJU1VCNDIyX0VOQUJM RSB8IENCQ19FTkFCTEU7DQorCQl9IGVsc2Ugew0KKwkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3Bp cGVsaW5lID0gMHgwOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6 DQorCQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICov DQorCQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1 c19jb2RlKSkgew0KKwkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJM RSB8DQorCQkJCUNTQ19FTkFCTEUgfCBXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUyB8DQorCQkJCVNV QjQyMl9FTkFCTEUgfCBDQkNfRU5BQkxFOw0KKwkJfSBlbHNlIHsNCisJCQlpc2MtPnRyeV9jb25m aWcuYml0c19waXBlbGluZSA9IDB4MDsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElY X0ZNVF9HUkVZOg0KKwkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9m b3JtYXQtPm1idXNfY29kZSkpIHsNCisJCS8qIGlmIHNlbnNvciBmb3JtYXQgaXMgUkFXLCB3ZSBj b252ZXJ0IGluc2lkZSBJU0MgKi8NCisJCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9 IENGQV9FTkFCTEUgfA0KKwkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FNX0VOQUJMRVMg fA0KKwkJCQlDQkNfRU5BQkxFOw0KKwkJfSBlbHNlIHsNCisJCQlpc2MtPnRyeV9jb25maWcuYml0 c19waXBlbGluZSA9IDB4MDsNCisJCX0NCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJaXNjLT50 cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQorCX0NCisJcmV0dXJuIDA7DQorfQ0KKw0K K3N0YXRpYyBpbnQgaXNjX3RyeV9mbXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgc3RydWN0IHY0 bDJfZm9ybWF0ICpmLA0KKwkJCXUzMiAqY29kZSkNCit7DQorCWludCBpOw0KKwlzdHJ1Y3QgaXNj X2Zvcm1hdCAqc2RfZm10ID0gTlVMTCwgKmRpcmVjdF9mbXQgPSBOVUxMOw0KKwlzdHJ1Y3QgdjRs Ml9waXhfZm9ybWF0ICpwaXhmbXQgPSAmZi0+Zm10LnBpeDsNCisJc3RydWN0IHY0bDJfc3ViZGV2 X3BhZF9jb25maWcgcGFkX2NmZzsNCisJc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCBmb3JtYXQg PSB7DQorCQkud2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZLA0KKwl9Ow0KKwl1MzIgbWJ1 c19jb2RlOw0KKwlpbnQgcmV0Ow0KKwlib29sIHJscF9kbWFfZGlyZWN0X2R1bXAgPSBmYWxzZTsN CisNCisJaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQ0KKwkJcmV0 dXJuIC1FSU5WQUw7DQorDQorCS8qIFN0ZXAgMTogZmluZCBhIFJBVyBmb3JtYXQgdGhhdCBpcyBz dXBwb3J0ZWQgKi8NCisJZm9yIChpID0gMDsgaSA8IGlzYy0+bnVtX3VzZXJfZm9ybWF0czsgaSsr KSB7DQorCQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT51c2VyX2Zvcm1hdHNbaV0tPm1idXNf Y29kZSkpIHsNCisJCQlzZF9mbXQgPSBpc2MtPnVzZXJfZm9ybWF0c1tpXTsNCisJCQlicmVhazsN CisJCX0NCisJfQ0KKwkvKiBTdGVwIDI6IFdlIGNhbiBjb250aW51ZSB3aXRoIHRoaXMgUkFXIGZv cm1hdCwgb3Igd2UgY2FuIGxvb2sNCisJICogZm9yIGJldHRlcjogbWF5YmUgc2Vuc29yIHN1cHBv cnRzIGRpcmVjdGx5IHdoYXQgd2UgbmVlZC4NCisJICovDQorCWRpcmVjdF9mbXQgPSBmaW5kX2Zv cm1hdF9ieV9mb3VyY2MoaXNjLCBwaXhmbXQtPnBpeGVsZm9ybWF0KTsNCisNCisJLyogU3RlcCAz OiBXZSBoYXZlIGJvdGguIFdlIGRlY2lkZSBnaXZlbiB0aGUgbW9kdWxlIHBhcmFtZXRlciB3aGlj aA0KKwkgKiBvbmUgdG8gdXNlLg0KKwkgKi8NCisJaWYgKGRpcmVjdF9mbXQgJiYgc2RfZm10ICYm IHNlbnNvcl9wcmVmZXJyZWQpDQorCQlzZF9mbXQgPSBkaXJlY3RfZm10Ow0KKw0KKwkvKiBTdGVw IDQ6IHdlIGRvIG5vdCBoYXZlIFJBVyBidXQgd2UgaGF2ZSBhIGRpcmVjdCBmb3JtYXQuIFVzZSBp dC4gKi8NCisJaWYgKGRpcmVjdF9mbXQgJiYgIXNkX2ZtdCkNCisJCXNkX2ZtdCA9IGRpcmVjdF9m bXQ7DQorDQorCS8qIFN0ZXAgNTogaWYgd2UgYXJlIHVzaW5nIGEgZGlyZWN0IGZvcm1hdCwgd2Ug bmVlZCB0byBwYWNrYWdlDQorCSAqIGV2ZXJ5dGhpbmcgYXMgOCBiaXQgZGF0YSBhbmQganVzdCBk dW1wIGl0DQorCSAqLw0KKwlpZiAoc2RfZm10ID09IGRpcmVjdF9mbXQpDQorCQlybHBfZG1hX2Rp cmVjdF9kdW1wID0gdHJ1ZTsNCisNCisJLyogU3RlcCA2OiBXZSBoYXZlIG5vIGZvcm1hdC4gVGhp cyBjYW4gaGFwcGVuIGlmIHRoZSB1c2Vyc3BhY2UNCisJICogcmVxdWVzdHMgc29tZSB3ZWlyZC9p bnZhbGlkIGZvcm1hdC4NCisJICogSW4gdGhpcyBjYXNlLCBkZWZhdWx0IHRvIHdoYXRldmVyIHdl IGhhdmUNCisJICovDQorCWlmICghc2RfZm10ICYmICFkaXJlY3RfZm10KSB7DQorCQlzZF9mbXQg PSBpc2MtPnVzZXJfZm9ybWF0c1tpc2MtPm51bV91c2VyX2Zvcm1hdHMgLSAxXTsNCisJCXY0bDJf ZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2RldiwNCisJCQkgIlNlbnNvciBub3Qgc3VwcG9ydGlu ZyAlLjRzLCB1c2luZyAlLjRzXG4iLA0KKwkJCSAoY2hhciAqKSZwaXhmbXQtPnBpeGVsZm9ybWF0 LCAoY2hhciAqKSZzZF9mbXQtPmZvdXJjYyk7DQorCX0NCisNCisJaWYgKCFzZF9mbXQpIHsNCisJ CXJldCA9IC1FSU5WQUw7DQorCQlnb3RvIGlzY190cnlfZm10X2VycjsNCisJfQ0KKw0KKwkvKiBT dGVwIDc6IFByaW50IG91dCB3aGF0IHdlIGRlY2lkZWQgZm9yIGRlYnVnZ2luZyAqLw0KKwl2NGwy X2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQorCQkgIlByZWZlcnJpbmcgdG8gaGF2ZSBz ZW5zb3IgdXNpbmcgZm9ybWF0ICUuNHNcbiIsDQorCQkgKGNoYXIgKikmc2RfZm10LT5mb3VyY2Mp Ow0KKw0KKwkvKiBTdGVwIDg6IGF0IHRoaXMgbW9tZW50IHdlIGRlY2lkZWQgd2hpY2ggZm9ybWF0 IHRoZSBzdWJkZXYgd2lsbCB1c2UgKi8NCisJaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdCA9IHNk X2ZtdDsNCisNCisJLyogTGltaXQgdG8gQXRtZWwgSVNDIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAq Lw0KKwlpZiAocGl4Zm10LT53aWR0aCA+IElTQ19NQVhfU1VQUE9SVF9XSURUSCkNCisJCXBpeGZt dC0+d2lkdGggPSBJU0NfTUFYX1NVUFBPUlRfV0lEVEg7DQorCWlmIChwaXhmbXQtPmhlaWdodCA+ IElTQ19NQVhfU1VQUE9SVF9IRUlHSFQpDQorCQlwaXhmbXQtPmhlaWdodCA9IElTQ19NQVhfU1VQ UE9SVF9IRUlHSFQ7DQorDQorCS8qDQorCSAqIFRoZSBtYnVzIGZvcm1hdCBpcyB0aGUgb25lIHRo ZSBzdWJkZXYgb3V0cHV0cy4NCisJICogVGhlIHBpeGVscyB3aWxsIGJlIHRyYW5zZmVycmVkIGlu IHRoaXMgZm9ybWF0IFNlbnNvciAtPiBJU0MNCisJICovDQorCW1idXNfY29kZSA9IHNkX2ZtdC0+ bWJ1c19jb2RlOw0KKw0KKwkvKg0KKwkgKiBWYWxpZGF0ZSBmb3JtYXRzLiBJZiB0aGUgcmVxdWly ZWQgZm9ybWF0IGlzIG5vdCBPSywgZGVmYXVsdCB0byByYXcuDQorCSAqLw0KKw0KKwlpc2MtPnRy eV9jb25maWcuZm91cmNjID0gcGl4Zm10LT5waXhlbGZvcm1hdDsNCisNCisJaWYgKGlzY190cnlf dmFsaWRhdGVfZm9ybWF0cyhpc2MpKSB7DQorCQlwaXhmbXQtPnBpeGVsZm9ybWF0ID0gaXNjLT50 cnlfY29uZmlnLmZvdXJjYyA9IHNkX2ZtdC0+Zm91cmNjOw0KKwkJLyogUmUtdHJ5IHRvIHZhbGlk YXRlIHRoZSBuZXcgZm9ybWF0ICovDQorCQlyZXQgPSBpc2NfdHJ5X3ZhbGlkYXRlX2Zvcm1hdHMo aXNjKTsNCisJCWlmIChyZXQpDQorCQkJZ290byBpc2NfdHJ5X2ZtdF9lcnI7DQorCX0NCisNCisJ cmV0ID0gaXNjX3RyeV9jb25maWd1cmVfcmxwX2RtYShpc2MsIHJscF9kbWFfZGlyZWN0X2R1bXAp Ow0KKwlpZiAocmV0KQ0KKwkJZ290byBpc2NfdHJ5X2ZtdF9lcnI7DQorDQorCXJldCA9IGlzY190 cnlfY29uZmlndXJlX3BpcGVsaW5lKGlzYyk7DQorCWlmIChyZXQpDQorCQlnb3RvIGlzY190cnlf Zm10X2VycjsNCisNCisJdjRsMl9maWxsX21idXNfZm9ybWF0KCZmb3JtYXQuZm9ybWF0LCBwaXhm bXQsIG1idXNfY29kZSk7DQorCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1 YmRldi0+c2QsIHBhZCwgc2V0X2ZtdCwNCisJCQkgICAgICAgJnBhZF9jZmcsICZmb3JtYXQpOw0K KwlpZiAocmV0IDwgMCkNCisJCWdvdG8gaXNjX3RyeV9mbXRfc3ViZGV2X2VycjsNCisNCisJdjRs Ml9maWxsX3BpeF9mb3JtYXQocGl4Zm10LCAmZm9ybWF0LmZvcm1hdCk7DQorDQorCXBpeGZtdC0+ ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQorCXBpeGZtdC0+Ynl0ZXNwZXJsaW5lID0gKHBpeGZt dC0+d2lkdGggKiBpc2MtPnRyeV9jb25maWcuYnBwKSA+PiAzOw0KKwlwaXhmbXQtPnNpemVpbWFn ZSA9IHBpeGZtdC0+Ynl0ZXNwZXJsaW5lICogcGl4Zm10LT5oZWlnaHQ7DQorDQorCWlmIChjb2Rl KQ0KKwkJKmNvZGUgPSBtYnVzX2NvZGU7DQorDQorCXJldHVybiAwOw0KKw0KK2lzY190cnlfZm10 X2VycjoNCisJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJDb3VsZCBub3QgZmluZCBhbnkgcG9z c2libGUgZm9ybWF0IGZvciBhIHdvcmtpbmcgcGlwZWxpbmVcbiIpOw0KK2lzY190cnlfZm10X3N1 YmRldl9lcnI6DQorCW1lbXNldCgmaXNjLT50cnlfY29uZmlnLCAwLCBzaXplb2YoaXNjLT50cnlf Y29uZmlnKSk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3NldF9m bXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KK3sNCisJ c3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCBmb3JtYXQgPSB7DQorCQkud2hpY2ggPSBWNEwyX1NV QkRFVl9GT1JNQVRfQUNUSVZFLA0KKwl9Ow0KKwl1MzIgbWJ1c19jb2RlID0gMDsNCisJaW50IHJl dDsNCisNCisJcmV0ID0gaXNjX3RyeV9mbXQoaXNjLCBmLCAmbWJ1c19jb2RlKTsNCisJaWYgKHJl dCkNCisJCXJldHVybiByZXQ7DQorDQorCXY0bDJfZmlsbF9tYnVzX2Zvcm1hdCgmZm9ybWF0LmZv cm1hdCwgJmYtPmZtdC5waXgsIG1idXNfY29kZSk7DQorCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwo aXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHBhZCwNCisJCQkgICAgICAgc2V0X2ZtdCwgTlVMTCwg JmZvcm1hdCk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJaXNjLT5mbXQg PSAqZjsNCisNCisJaWYgKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQgJiYgaXNjLT5jb25maWcu c2RfZm9ybWF0ICYmDQorCSAgICBpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0ICE9IGlzYy0+Y29u ZmlnLnNkX2Zvcm1hdCkgew0KKwkJaXNjLT5jdHJscy5oaXN0X3N0YXQgPSBISVNUX0lOSVQ7DQor CQlpc2NfcmVzZXRfYXdiX2N0cmxzKGlzYyk7DQorCX0NCisJLyogbWFrZSB0aGUgdHJ5IGNvbmZp Z3VyYXRpb24gYWN0aXZlICovDQorCWlzYy0+Y29uZmlnID0gaXNjLT50cnlfY29uZmlnOw0KKw0K Kwl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsICJOZXcgSVNDIGNvbmZpZ3VyYXRp b24gaW4gcGxhY2VcbiIpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2Nf c19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCisJCQkgICAgICBz dHJ1Y3QgdjRsMl9mb3JtYXQgKmYpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlk ZW9fZHJ2ZGF0YShmaWxlKTsNCisNCisJaWYgKHZiMl9pc19zdHJlYW1pbmcoJmlzYy0+dmIyX3Zp ZHEpKQ0KKwkJcmV0dXJuIC1FQlVTWTsNCisNCisJcmV0dXJuIGlzY19zZXRfZm10KGlzYywgZik7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmls ZSwgdm9pZCAqcHJpdiwNCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KK3sNCisJc3RydWN0 IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQorDQorCXJldHVybiBpc2Nf dHJ5X2ZtdChpc2MsIGYsIE5VTEwpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19lbnVtX2lucHV0 KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KKwkJCSAgIHN0cnVjdCB2NGwyX2lucHV0 ICppbnApDQorew0KKwlpZiAoaW5wLT5pbmRleCAhPSAwKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQor DQorCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7DQorCWlucC0+c3RkID0gMDsN CisJc3Ryc2NweShpbnAtPm5hbWUsICJDYW1lcmEiLCBzaXplb2YoaW5wLT5uYW1lKSk7DQorDQor CXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19nX2lucHV0KHN0cnVjdCBmaWxlICpm aWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpDQorew0KKwkqaSA9IDA7DQorDQorCXJl dHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxl LCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkNCit7DQorCWlmIChpID4gMCkNCisJCXJldHVy biAtRUlOVkFMOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2NfZ19wYXJt KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqYSkN Cit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KKw0K KwlyZXR1cm4gdjRsMl9nX3Bhcm1fY2FwKHZpZGVvX2RldmRhdGEoZmlsZSksIGlzYy0+Y3VycmVu dF9zdWJkZXYtPnNkLCBhKTsNCit9DQorDQorc3RhdGljIGludCBpc2Nfc19wYXJtKHN0cnVjdCBm aWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqYSkNCit7DQorCXN0 cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KKw0KKwlyZXR1cm4g djRsMl9zX3Bhcm1fY2FwKHZpZGVvX2RldmRhdGEoZmlsZSksIGlzYy0+Y3VycmVudF9zdWJkZXYt PnNkLCBhKTsNCit9DQorDQorc3RhdGljIGludCBpc2NfZW51bV9mcmFtZXNpemVzKHN0cnVjdCBm aWxlICpmaWxlLCB2b2lkICpmaCwNCisJCQkgICAgICAgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0g KmZzaXplKQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmls ZSk7DQorCXN0cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9zaXplX2VudW0gZnNlID0gew0KKwkJLmlu ZGV4ID0gZnNpemUtPmluZGV4LA0KKwkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElW RSwNCisJfTsNCisJaW50IHJldCA9IC1FSU5WQUw7DQorCWludCBpOw0KKw0KKwlmb3IgKGkgPSAw OyBpIDwgaXNjLT5udW1fdXNlcl9mb3JtYXRzOyBpKyspDQorCQlpZiAoaXNjLT51c2VyX2Zvcm1h dHNbaV0tPmZvdXJjYyA9PSBmc2l6ZS0+cGl4ZWxfZm9ybWF0KQ0KKwkJCXJldCA9IDA7DQorDQor CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbnRyb2xsZXJfZm9ybWF0cyk7IGkrKykNCisJ CWlmIChjb250cm9sbGVyX2Zvcm1hdHNbaV0uZm91cmNjID09IGZzaXplLT5waXhlbF9mb3JtYXQp DQorCQkJcmV0ID0gMDsNCisNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldCA9 IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHBhZCwgZW51bV9mcmFt ZV9zaXplLA0KKwkJCSAgICAgICBOVUxMLCAmZnNlKTsNCisJaWYgKHJldCkNCisJCXJldHVybiBy ZXQ7DQorDQorCWZzZS5jb2RlID0gaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGU7DQor DQorCWZzaXplLT50eXBlID0gVjRMMl9GUk1TSVpFX1RZUEVfRElTQ1JFVEU7DQorCWZzaXplLT5k aXNjcmV0ZS53aWR0aCA9IGZzZS5tYXhfd2lkdGg7DQorCWZzaXplLT5kaXNjcmV0ZS5oZWlnaHQg PSBmc2UubWF4X2hlaWdodDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNj X2VudW1fZnJhbWVpbnRlcnZhbHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLA0KKwkJCQkg ICAgc3RydWN0IHY0bDJfZnJtaXZhbGVudW0gKmZpdmFsKQ0KK3sNCisJc3RydWN0IGlzY19kZXZp Y2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQorCXN0cnVjdCB2NGwyX3N1YmRldl9mcmFt ZV9pbnRlcnZhbF9lbnVtIGZpZSA9IHsNCisJCS5pbmRleCA9IGZpdmFsLT5pbmRleCwNCisJCS53 aWR0aCA9IGZpdmFsLT53aWR0aCwNCisJCS5oZWlnaHQgPSBmaXZhbC0+aGVpZ2h0LA0KKwkJLndo aWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCisJfTsNCisJaW50IHJldCA9IC1FSU5W QUw7DQorCWludCBpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgaXNjLT5udW1fdXNlcl9mb3JtYXRz OyBpKyspDQorCQlpZiAoaXNjLT51c2VyX2Zvcm1hdHNbaV0tPmZvdXJjYyA9PSBmaXZhbC0+cGl4 ZWxfZm9ybWF0KQ0KKwkJCXJldCA9IDA7DQorDQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGNvbnRyb2xsZXJfZm9ybWF0cyk7IGkrKykNCisJCWlmIChjb250cm9sbGVyX2Zvcm1hdHNbaV0u Zm91cmNjID09IGZpdmFsLT5waXhlbF9mb3JtYXQpDQorCQkJcmV0ID0gMDsNCisNCisJaWYgKHJl dCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJy ZW50X3N1YmRldi0+c2QsIHBhZCwNCisJCQkgICAgICAgZW51bV9mcmFtZV9pbnRlcnZhbCwgTlVM TCwgJmZpZSk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlmaWUuY29kZSA9IGlz Yy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlOw0KKwlmaXZhbC0+dHlwZSA9IFY0TDJfRlJN SVZBTF9UWVBFX0RJU0NSRVRFOw0KKwlmaXZhbC0+ZGlzY3JldGUgPSBmaWUuaW50ZXJ2YWw7DQor DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3Bz IGlzY19pb2N0bF9vcHMgPSB7DQorCS52aWRpb2NfcXVlcnljYXAJCT0gaXNjX3F1ZXJ5Y2FwLA0K KwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAJPSBpc2NfZW51bV9mbXRfdmlkX2NhcCwNCisJLnZp ZGlvY19nX2ZtdF92aWRfY2FwCQk9IGlzY19nX2ZtdF92aWRfY2FwLA0KKwkudmlkaW9jX3NfZm10 X3ZpZF9jYXAJCT0gaXNjX3NfZm10X3ZpZF9jYXAsDQorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2Fw CQk9IGlzY190cnlfZm10X3ZpZF9jYXAsDQorDQorCS52aWRpb2NfZW51bV9pbnB1dAkJPSBpc2Nf ZW51bV9pbnB1dCwNCisJLnZpZGlvY19nX2lucHV0CQkJPSBpc2NfZ19pbnB1dCwNCisJLnZpZGlv Y19zX2lucHV0CQkJPSBpc2Nfc19pbnB1dCwNCisNCisJLnZpZGlvY19yZXFidWZzCQkJPSB2YjJf aW9jdGxfcmVxYnVmcywNCisJLnZpZGlvY19xdWVyeWJ1ZgkJPSB2YjJfaW9jdGxfcXVlcnlidWYs DQorCS52aWRpb2NfcWJ1ZgkJCT0gdmIyX2lvY3RsX3FidWYsDQorCS52aWRpb2NfZXhwYnVmCQkJ PSB2YjJfaW9jdGxfZXhwYnVmLA0KKwkudmlkaW9jX2RxYnVmCQkJPSB2YjJfaW9jdGxfZHFidWYs DQorCS52aWRpb2NfY3JlYXRlX2J1ZnMJCT0gdmIyX2lvY3RsX2NyZWF0ZV9idWZzLA0KKwkudmlk aW9jX3ByZXBhcmVfYnVmCQk9IHZiMl9pb2N0bF9wcmVwYXJlX2J1ZiwNCisJLnZpZGlvY19zdHJl YW1vbgkJPSB2YjJfaW9jdGxfc3RyZWFtb24sDQorCS52aWRpb2Nfc3RyZWFtb2ZmCQk9IHZiMl9p b2N0bF9zdHJlYW1vZmYsDQorDQorCS52aWRpb2NfZ19wYXJtCQkJPSBpc2NfZ19wYXJtLA0KKwku dmlkaW9jX3NfcGFybQkJCT0gaXNjX3NfcGFybSwNCisJLnZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMJ CT0gaXNjX2VudW1fZnJhbWVzaXplcywNCisJLnZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzCT0g aXNjX2VudW1fZnJhbWVpbnRlcnZhbHMsDQorDQorCS52aWRpb2NfbG9nX3N0YXR1cwkJPSB2NGwy X2N0cmxfbG9nX3N0YXR1cywNCisJLnZpZGlvY19zdWJzY3JpYmVfZXZlbnQJCT0gdjRsMl9jdHJs X3N1YnNjcmliZV9ldmVudCwNCisJLnZpZGlvY191bnN1YnNjcmliZV9ldmVudAk9IHY0bDJfZXZl bnRfdW5zdWJzY3JpYmUsDQorfTsNCisNCitzdGF0aWMgaW50IGlzY19vcGVuKHN0cnVjdCBmaWxl ICpmaWxlKQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmls ZSk7DQorCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZDsN CisJaW50IHJldDsNCisNCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaXNjLT5sb2Nr KSkNCisJCXJldHVybiAtRVJFU1RBUlRTWVM7DQorDQorCXJldCA9IHY0bDJfZmhfb3BlbihmaWxl KTsNCisJaWYgKHJldCA8IDApDQorCQlnb3RvIHVubG9jazsNCisNCisJaWYgKCF2NGwyX2ZoX2lz X3Npbmd1bGFyX2ZpbGUoZmlsZSkpDQorCQlnb3RvIHVubG9jazsNCisNCisJcmV0ID0gdjRsMl9z dWJkZXZfY2FsbChzZCwgY29yZSwgc19wb3dlciwgMSk7DQorCWlmIChyZXQgPCAwICYmIHJldCAh PSAtRU5PSU9DVExDTUQpIHsNCisJCXY0bDJfZmhfcmVsZWFzZShmaWxlKTsNCisJCWdvdG8gdW5s b2NrOw0KKwl9DQorDQorCXJldCA9IGlzY19zZXRfZm10KGlzYywgJmlzYy0+Zm10KTsNCisJaWYg KHJldCkgew0KKwkJdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19wb3dlciwgMCk7DQorCQl2 NGwyX2ZoX3JlbGVhc2UoZmlsZSk7DQorCX0NCisNCit1bmxvY2s6DQorCW11dGV4X3VubG9jaygm aXNjLT5sb2NrKTsNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCBpc2NfcmVsZWFz ZShzdHJ1Y3QgZmlsZSAqZmlsZSkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRl b19kcnZkYXRhKGZpbGUpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaXNjLT5jdXJyZW50 X3N1YmRldi0+c2Q7DQorCWJvb2wgZmhfc2luZ3VsYXI7DQorCWludCByZXQ7DQorDQorCW11dGV4 X2xvY2soJmlzYy0+bG9jayk7DQorDQorCWZoX3Npbmd1bGFyID0gdjRsMl9maF9pc19zaW5ndWxh cl9maWxlKGZpbGUpOw0KKw0KKwlyZXQgPSBfdmIyX2ZvcF9yZWxlYXNlKGZpbGUsIE5VTEwpOw0K Kw0KKwlpZiAoZmhfc2luZ3VsYXIpDQorCQl2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX3Bv d2VyLCAwKTsNCisNCisJbXV0ZXhfdW5sb2NrKCZpc2MtPmxvY2spOw0KKw0KKwlyZXR1cm4gcmV0 Ow0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGlzY19m b3BzID0gew0KKwkub3duZXIJCT0gVEhJU19NT0RVTEUsDQorCS5vcGVuCQk9IGlzY19vcGVuLA0K KwkucmVsZWFzZQk9IGlzY19yZWxlYXNlLA0KKwkudW5sb2NrZWRfaW9jdGwJPSB2aWRlb19pb2N0 bDIsDQorCS5yZWFkCQk9IHZiMl9mb3BfcmVhZCwNCisJLm1tYXAJCT0gdmIyX2ZvcF9tbWFwLA0K KwkucG9sbAkJPSB2YjJfZm9wX3BvbGwsDQorfTsNCisNCitpcnFyZXR1cm5fdCBpc2NfaW50ZXJy dXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2Mg PSAoc3RydWN0IGlzY19kZXZpY2UgKilkZXZfaWQ7DQorCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9 IGlzYy0+cmVnbWFwOw0KKwl1MzIgaXNjX2ludHNyLCBpc2NfaW50bWFzaywgcGVuZGluZzsNCisJ aXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7DQorDQorCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVND X0lOVFNSLCAmaXNjX2ludHNyKTsNCisJcmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfSU5UTUFTSywg JmlzY19pbnRtYXNrKTsNCisNCisJcGVuZGluZyA9IGlzY19pbnRzciAmIGlzY19pbnRtYXNrOw0K Kw0KKwlpZiAobGlrZWx5KHBlbmRpbmcgJiBJU0NfSU5UX0RET05FKSkgew0KKwkJc3Bpbl9sb2Nr KCZpc2MtPmRtYV9xdWV1ZV9sb2NrKTsNCisJCWlmIChpc2MtPmN1cl9mcm0pIHsNCisJCQlzdHJ1 Y3QgdmIyX3Y0bDJfYnVmZmVyICp2YnVmID0gJmlzYy0+Y3VyX2ZybS0+dmI7DQorCQkJc3RydWN0 IHZiMl9idWZmZXIgKnZiID0gJnZidWYtPnZiMl9idWY7DQorDQorCQkJdmItPnRpbWVzdGFtcCA9 IGt0aW1lX2dldF9ucygpOw0KKwkJCXZidWYtPnNlcXVlbmNlID0gaXNjLT5zZXF1ZW5jZSsrOw0K KwkJCXZiMl9idWZmZXJfZG9uZSh2YiwgVkIyX0JVRl9TVEFURV9ET05FKTsNCisJCQlpc2MtPmN1 cl9mcm0gPSBOVUxMOw0KKwkJfQ0KKw0KKwkJaWYgKCFsaXN0X2VtcHR5KCZpc2MtPmRtYV9xdWV1 ZSkgJiYgIWlzYy0+c3RvcCkgew0KKwkJCWlzYy0+Y3VyX2ZybSA9IGxpc3RfZmlyc3RfZW50cnko JmlzYy0+ZG1hX3F1ZXVlLA0KKwkJCQkJCSAgICAgc3RydWN0IGlzY19idWZmZXIsIGxpc3QpOw0K KwkJCWxpc3RfZGVsKCZpc2MtPmN1cl9mcm0tPmxpc3QpOw0KKw0KKwkJCWlzY19zdGFydF9kbWEo aXNjKTsNCisJCX0NCisNCisJCWlmIChpc2MtPnN0b3ApDQorCQkJY29tcGxldGUoJmlzYy0+Y29t cCk7DQorDQorCQlyZXQgPSBJUlFfSEFORExFRDsNCisJCXNwaW5fdW5sb2NrKCZpc2MtPmRtYV9x dWV1ZV9sb2NrKTsNCisJfQ0KKw0KKwlpZiAocGVuZGluZyAmIElTQ19JTlRfSElTRE9ORSkgew0K KwkJc2NoZWR1bGVfd29yaygmaXNjLT5hd2Jfd29yayk7DQorCQlyZXQgPSBJUlFfSEFORExFRDsN CisJfQ0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgdm9pZCBpc2NfaGlzdF9jb3Vu dChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCB1MzIgKm1pbiwgdTMyICptYXgpDQorew0KKwlzdHJ1 Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCisJc3RydWN0IGlzY19jdHJscyAqY3Ry bHMgPSAmaXNjLT5jdHJsczsNCisJdTMyICpoaXN0X2NvdW50ID0gJmN0cmxzLT5oaXN0X2NvdW50 W2N0cmxzLT5oaXN0X2lkXTsNCisJdTMyICpoaXN0X2VudHJ5ID0gJmN0cmxzLT5oaXN0X2VudHJ5 WzBdOw0KKwl1MzIgaTsNCisNCisJKm1pbiA9IDA7DQorCSptYXggPSBISVNUX0VOVFJJRVM7DQor DQorCXJlZ21hcF9idWxrX3JlYWQocmVnbWFwLCBJU0NfSElTX0VOVFJZLCBoaXN0X2VudHJ5LCBI SVNUX0VOVFJJRVMpOw0KKw0KKwkqaGlzdF9jb3VudCA9IDA7DQorCS8qDQorCSAqIHdlIGRlbGli ZXJhdGVseSBpZ25vcmUgdGhlIGVuZCBvZiB0aGUgaGlzdG9ncmFtLA0KKwkgKiB0aGUgbW9zdCB3 aGl0ZSBwaXhlbHMNCisJICovDQorCWZvciAoaSA9IDE7IGkgPCBISVNUX0VOVFJJRVM7IGkrKykg ew0KKwkJaWYgKCpoaXN0X2VudHJ5ICYmICEqbWluKQ0KKwkJCSptaW4gPSBpOw0KKwkJaWYgKCpo aXN0X2VudHJ5KQ0KKwkJCSptYXggPSBpOw0KKwkJKmhpc3RfY291bnQgKz0gaSAqICgqaGlzdF9l bnRyeSsrKTsNCisJfQ0KKw0KKwlpZiAoISptaW4pDQorCQkqbWluID0gMTsNCit9DQorDQorc3Rh dGljIHZvaWQgaXNjX3diX3VwZGF0ZShzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscykNCit7DQorCXUz MiAqaGlzdF9jb3VudCA9ICZjdHJscy0+aGlzdF9jb3VudFswXTsNCisJdTMyIGMsIG9mZnNldFs0 XTsNCisJdTY0IGF2ZyA9IDA7DQorCS8qIFdlIGNvbXB1dGUgdHdvIGdhaW5zLCBzdHJldGNoIGdh aW4gYW5kIGdyZXkgd29ybGQgZ2FpbiAqLw0KKwl1MzIgc19nYWluWzRdLCBnd19nYWluWzRdOw0K Kw0KKwkvKg0KKwkgKiBBY2NvcmRpbmcgdG8gR3JleSBXb3JsZCwgd2UgbmVlZCB0byBzZXQgZ2Fp bnMgZm9yIFIvQiB0byBub3JtYWxpemUNCisJICogdGhlbSB0b3dhcmRzIHRoZSBncmVlbiBjaGFu bmVsLg0KKwkgKiBUaHVzIHdlIHdhbnQgdG8ga2VlcCBHcmVlbiBhcyBmaXhlZCBhbmQgYWRqdXN0 IG9ubHkgUmVkL0JsdWUNCisJICogQ29tcHV0ZSB0aGUgYXZlcmFnZSBvZiB0aGUgYm90aCBncmVl biBjaGFubmVscyBmaXJzdA0KKwkgKi8NCisJYXZnID0gKHU2NCloaXN0X2NvdW50W0lTQ19ISVNf Q0ZHX01PREVfR1JdICsNCisJCSh1NjQpaGlzdF9jb3VudFtJU0NfSElTX0NGR19NT0RFX0dCXTsN CisJYXZnID4+PSAxOw0KKw0KKwkvKiBHcmVlbiBoaXN0b2dyYW0gaXMgbnVsbCwgbm90aGluZyB0 byBkbyAqLw0KKwlpZiAoIWF2ZykNCisJCXJldHVybjsNCisNCisJZm9yIChjID0gSVNDX0hJU19D RkdfTU9ERV9HUjsgYyA8PSBJU0NfSElTX0NGR19NT0RFX0I7IGMrKykgew0KKwkJLyoNCisJCSAq IHRoZSBjb2xvciBvZmZzZXQgaXMgdGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIGhpc3RvZ3JhbS4N CisJCSAqIHdlIHN0cmV0Y2ggdGhpcyBjb2xvciB0byB0aGUgZnVsbCByYW5nZSBieSBzdWJzdHJh Y3RpbmcNCisJCSAqIHRoaXMgdmFsdWUgZnJvbSB0aGUgY29sb3IgY29tcG9uZW50Lg0KKwkJICov DQorCQlvZmZzZXRbY10gPSBjdHJscy0+aGlzdF9taW5tYXhbY11bSElTVF9NSU5fSU5ERVhdOw0K KwkJLyoNCisJCSAqIFRoZSBvZmZzZXQgaXMgYWx3YXlzIGF0IGxlYXN0IDEuIElmIHRoZSBvZmZz ZXQgaXMgMSwgd2UgZG8NCisJCSAqIG5vdCBuZWVkIHRvIGFkanVzdCBpdCwgc28gb3VyIHJlc3Vs dCBtdXN0IGJlIHplcm8uDQorCQkgKiB0aGUgb2Zmc2V0IGlzIGNvbXB1dGVkIGluIGEgaGlzdG9n cmFtIG9uIDkgYml0cyAoMC4uNTEyKQ0KKwkJICogYnV0IHRoZSBvZmZzZXQgaW4gcmVnaXN0ZXIg aXMgYmFzZWQgb24NCisJCSAqIDEyIGJpdHMgcGlwZWxpbmUgKDAuLjQwOTYpLg0KKwkJICogd2Ug bmVlZCB0byBzaGlmdCB3aXRoIHRoZSAzIGJpdHMgdGhhdCB0aGUgaGlzdG9ncmFtIGlzDQorCQkg KiBpZ25vcmluZw0KKwkJICovDQorCQljdHJscy0+b2Zmc2V0W2NdID0gKG9mZnNldFtjXSAtIDEp IDw8IDM7DQorDQorCQkvKiB0aGUgb2Zmc2V0IGlzIHRoZW4gdGFrZW4gYW5kIGNvbnZlcnRlZCB0 byAyJ3MgY29tcGxlbWVudHMgKi8NCisJCWlmICghY3RybHMtPm9mZnNldFtjXSkNCisJCQljdHJs cy0+b2Zmc2V0W2NdID0gSVNDX1dCX09fWkVST19WQUw7DQorDQorCQkvKg0KKwkJICogdGhlIHN0 cmV0Y2ggZ2FpbiBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGhpc3RvZ3JhbSBiaW5zDQorCQkgKiBk aXZpZGVkIGJ5IHRoZSBhY3R1YWwgcmFuZ2Ugb2YgY29sb3IgY29tcG9uZW50IChNYXggLSBNaW4p DQorCQkgKiBJZiB3ZSBjb21wdXRlIGdhaW4gbGlrZSB0aGlzLCB0aGUgYWN0dWFsIGNvbG9yIGNv bXBvbmVudA0KKwkJICogd2lsbCBiZSBzdHJldGNoZWQgdG8gdGhlIGZ1bGwgaGlzdG9ncmFtLg0K KwkJICogV2UgbmVlZCB0byBzaGlmdCA5IGJpdHMgZm9yIHByZWNpc2lvbiwgd2UgaGF2ZSA5IGJp dHMgZm9yDQorCQkgKiBkZWNpbWFscw0KKwkJICovDQorCQlzX2dhaW5bY10gPSAoSElTVF9FTlRS SUVTIDw8IDkpIC8NCisJCQkoY3RybHMtPmhpc3RfbWlubWF4W2NdW0hJU1RfTUFYX0lOREVYXSAt DQorCQkJY3RybHMtPmhpc3RfbWlubWF4W2NdW0hJU1RfTUlOX0lOREVYXSArIDEpOw0KKw0KKwkJ LyoNCisJCSAqIE5vdyB3ZSBoYXZlIHRvIGNvbXB1dGUgdGhlIGdhaW4gdy5yLnQuIHRoZSBhdmVy YWdlLg0KKwkJICogQWRkL2xvc2UgZ2FpbiB0byB0aGUgY29tcG9uZW50IHRvd2FyZHMgdGhlIGF2 ZXJhZ2UuDQorCQkgKiBJZiBpdCBoYXBwZW5zIHRoYXQgdGhlIGNvbXBvbmVudCBpcyB6ZXJvLCB1 c2UgdGhlDQorCQkgKiBmaXhlZCBwb2ludCB2YWx1ZSA6IDEuMCBnYWluLg0KKwkJICovDQorCQlp ZiAoaGlzdF9jb3VudFtjXSkNCisJCQlnd19nYWluW2NdID0gZGl2X3U2NChhdmcgPDwgOSwgaGlz dF9jb3VudFtjXSk7DQorCQllbHNlDQorCQkJZ3dfZ2FpbltjXSA9IDEgPDwgOTsNCisNCisJCS8q IG11bHRpcGx5IGJvdGggZ2FpbnMgYW5kIGFkanVzdCBmb3IgZGVjaW1hbHMgKi8NCisJCWN0cmxz LT5nYWluW2NdID0gc19nYWluW2NdICogZ3dfZ2FpbltjXTsNCisJCWN0cmxzLT5nYWluW2NdID4+ PSA5Ow0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlzY19hd2Jfd29yayhzdHJ1Y3Qgd29ya19z dHJ1Y3QgKncpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0NCisJCWNvbnRhaW5lcl9v Zih3LCBzdHJ1Y3QgaXNjX2RldmljZSwgYXdiX3dvcmspOw0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdt YXAgPSBpc2MtPnJlZ21hcDsNCisJc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJs czsNCisJdTMyIGhpc3RfaWQgPSBjdHJscy0+aGlzdF9pZDsNCisJdTMyIGJheXNlbDsNCisJdW5z aWduZWQgbG9uZyBmbGFnczsNCisJdTMyIG1pbiwgbWF4Ow0KKw0KKwkvKiBzdHJlYW1pbmcgaXMg bm90IGFjdGl2ZSBhbnltb3JlICovDQorCWlmIChpc2MtPnN0b3ApDQorCQlyZXR1cm47DQorDQor CWlmIChjdHJscy0+aGlzdF9zdGF0ICE9IEhJU1RfRU5BQkxFRCkNCisJCXJldHVybjsNCisNCisJ aXNjX2hpc3RfY291bnQoaXNjLCAmbWluLCAmbWF4KTsNCisJY3RybHMtPmhpc3RfbWlubWF4W2hp c3RfaWRdW0hJU1RfTUlOX0lOREVYXSA9IG1pbjsNCisJY3RybHMtPmhpc3RfbWlubWF4W2hpc3Rf aWRdW0hJU1RfTUFYX0lOREVYXSA9IG1heDsNCisNCisJaWYgKGhpc3RfaWQgIT0gSVNDX0hJU19D RkdfTU9ERV9CKSB7DQorCQloaXN0X2lkKys7DQorCX0gZWxzZSB7DQorCQlpc2Nfd2JfdXBkYXRl KGN0cmxzKTsNCisJCWhpc3RfaWQgPSBJU0NfSElTX0NGR19NT0RFX0dSOw0KKwl9DQorDQorCWN0 cmxzLT5oaXN0X2lkID0gaGlzdF9pZDsNCisJYmF5c2VsID0gaXNjLT5jb25maWcuc2RfZm9ybWF0 LT5jZmFfYmF5Y2ZnIDw8IElTQ19ISVNfQ0ZHX0JBWVNFTF9TSElGVDsNCisNCisJLyogaWYgbm8g bW9yZSBhdXRvIHdoaXRlIGJhbGFuY2UsIHJlc2V0IGNvbnRyb2xzLiAqLw0KKwlpZiAoY3RybHMt PmF3YiA9PSBJU0NfV0JfTk9ORSkNCisJCWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsNCisNCisJ cG1fcnVudGltZV9nZXRfc3luYyhpc2MtPmRldik7DQorDQorCS8qDQorCSAqIG9ubHkgdXBkYXRl IGlmIHdlIGhhdmUgYWxsIHRoZSByZXF1aXJlZCBoaXN0b2dyYW1zIGFuZCBjb250cm9scw0KKwkg KiBpZiBhd2IgaGFzIGJlZW4gZGlzYWJsZWQsIHdlIG5lZWQgdG8gcmVzZXQgcmVnaXN0ZXJzIGFz IHdlbGwuDQorCSAqLw0KKwlpZiAoaGlzdF9pZCA9PSBJU0NfSElTX0NGR19NT0RFX0dSIHx8IGN0 cmxzLT5hd2IgPT0gSVNDX1dCX05PTkUpIHsNCisJCS8qDQorCQkgKiBJdCBtYXkgaGFwcGVuIHRo YXQgRE1BIERvbmUgSVJRIHdpbGwgdHJpZ2dlciB3aGlsZSB3ZSBhcmUNCisJCSAqIHVwZGF0aW5n IHdoaXRlIGJhbGFuY2UgcmVnaXN0ZXJzIGhlcmUuDQorCQkgKiBJbiB0aGF0IGNhc2UsIG9ubHkg cGFydHMgb2YgdGhlIGNvbnRyb2xzIGhhdmUgYmVlbiB1cGRhdGVkLg0KKwkJICogV2UgY2FuIGF2 b2lkIHRoYXQgYnkgbG9ja2luZyB0aGUgc2VjdGlvbi4NCisJCSAqLw0KKwkJc3Bpbl9sb2NrX2ly cXNhdmUoJmlzYy0+YXdiX2xvY2ssIGZsYWdzKTsNCisJCWlzY191cGRhdGVfYXdiX2N0cmxzKGlz Yyk7DQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2MtPmF3Yl9sb2NrLCBmbGFncyk7DQor DQorCQkvKg0KKwkJICogaWYgd2UgYXJlIGRvaW5nIGp1c3QgdGhlIG9uZSB0aW1lIHdoaXRlIGJh bGFuY2UgYWRqdXN0bWVudCwNCisJCSAqIHdlIGFyZSBiYXNpY2FsbHkgZG9uZS4NCisJCSAqLw0K KwkJaWYgKGN0cmxzLT5hd2IgPT0gSVNDX1dCX09ORVRJTUUpIHsNCisJCQl2NGwyX2luZm8oJmlz Yy0+djRsMl9kZXYsDQorCQkJCSAgIkNvbXBsZXRlZCBvbmUgdGltZSB3aGl0ZS1iYWxhbmNlIGFk anVzdG1lbnQuXG4iKTsNCisJCQljdHJscy0+YXdiID0gSVNDX1dCX05PTkU7DQorCQl9DQorCX0N CisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0hJU19DRkcsIGhpc3RfaWQgfCBiYXlzZWwgfCBJ U0NfSElTX0NGR19SQVIpOw0KKwlpc2NfdXBkYXRlX3Byb2ZpbGUoaXNjKTsNCisJLyogaWYgYXdi IGhhcyBiZWVuIGRpc2FibGVkLCB3ZSBkb24ndCBuZWVkIHRvIHN0YXJ0IGFub3RoZXIgaGlzdG9n cmFtICovDQorCWlmIChjdHJscy0+YXdiKQ0KKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NU UkxFTiwgSVNDX0NUUkxfSElTUkVRKTsNCisNCisJcG1fcnVudGltZV9wdXRfc3luYyhpc2MtPmRl dik7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJs KQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IGNvbnRhaW5lcl9vZihjdHJsLT5oYW5k bGVyLA0KKwkJCQkJICAgICBzdHJ1Y3QgaXNjX2RldmljZSwgY3RybHMuaGFuZGxlcik7DQorCXN0 cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQorDQorCWlmIChjdHJsLT5mbGFn cyAmIFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFKQ0KKwkJcmV0dXJuIDA7DQorDQorCXN3aXRjaCAo Y3RybC0+aWQpIHsNCisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOg0KKwkJY3RybHMtPmJyaWdo dG5lc3MgPSBjdHJsLT52YWwgJiBJU0NfQ0JDX0JSSUdIVF9NQVNLOw0KKwkJYnJlYWs7DQorCWNh c2UgVjRMMl9DSURfQ09OVFJBU1Q6DQorCQljdHJscy0+Y29udHJhc3QgPSBjdHJsLT52YWwgJiBJ U0NfQ0JDX0NPTlRSQVNUX01BU0s7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX0NJRF9HQU1NQToN CisJCWN0cmxzLT5nYW1tYV9pbmRleCA9IGN0cmwtPnZhbDsNCisJCWJyZWFrOw0KKwljYXNlIFY0 TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRToNCisJCWlmIChjdHJsLT52YWwgPT0gMSkNCisJCQlj dHJscy0+YXdiID0gSVNDX1dCX0FVVE87DQorCQllbHNlDQorCQkJY3RybHMtPmF3YiA9IElTQ19X Ql9OT05FOw0KKw0KKwkJLyogd2UgZGlkIG5vdCBjb25maWd1cmUgSVNDIHlldCAqLw0KKwkJaWYg KCFpc2MtPmNvbmZpZy5zZF9mb3JtYXQpDQorCQkJYnJlYWs7DQorDQorCQlpZiAoY3RybHMtPmhp c3Rfc3RhdCAhPSBISVNUX0VOQUJMRUQpDQorCQkJaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2MpOw0K Kw0KKwkJaWYgKGlzYy0+Y3RybHMuYXdiID09IElTQ19XQl9BVVRPICYmDQorCQkgICAgdmIyX2lz X3N0cmVhbWluZygmaXNjLT52YjJfdmlkcSkgJiYNCisJCSAgICBJU0NfSVNfRk9STUFUX1JBVyhp c2MtPmNvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpDQorCQkJaXNjX3NldF9oaXN0b2dyYW0o aXNjLCB0cnVlKTsNCisNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfQ0lEX0RPX1dISVRFX0JBTEFO Q0U6DQorCQkvKiBpZiBBV0IgaXMgZW5hYmxlZCwgZG8gbm90aGluZyAqLw0KKwkJaWYgKGN0cmxz LT5hd2IgPT0gSVNDX1dCX0FVVE8pDQorCQkJcmV0dXJuIDA7DQorDQorCQljdHJscy0+YXdiID0g SVNDX1dCX09ORVRJTUU7DQorCQlpc2Nfc2V0X2hpc3RvZ3JhbShpc2MsIHRydWUpOw0KKwkJdjRs Ml9kYmcoMSwgZGVidWcsICZpc2MtPnY0bDJfZGV2LA0KKwkJCSAiT25lIHRpbWUgd2hpdGUtYmFs YW5jZSBzdGFydGVkLlxuIik7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCXJldHVybiAtRUlO VkFMOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0 bDJfY3RybF9vcHMgaXNjX2N0cmxfb3BzID0gew0KKwkuc19jdHJsCT0gaXNjX3NfY3RybCwNCit9 Ow0KKw0KK3N0YXRpYyBpbnQgaXNjX2N0cmxfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0K K3sNCisJY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgKm9wcyA9ICZpc2NfY3RybF9vcHM7DQor CXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQorCXN0cnVjdCB2NGwyX2N0 cmxfaGFuZGxlciAqaGRsID0gJmN0cmxzLT5oYW5kbGVyOw0KKwlpbnQgcmV0Ow0KKw0KKwljdHJs cy0+aGlzdF9zdGF0ID0gSElTVF9JTklUOw0KKwlpc2NfcmVzZXRfYXdiX2N0cmxzKGlzYyk7DQor DQorCXJldCA9IHY0bDJfY3RybF9oYW5kbGVyX2luaXQoaGRsLCA1KTsNCisJaWYgKHJldCA8IDAp DQorCQlyZXR1cm4gcmV0Ow0KKw0KKwljdHJscy0+YnJpZ2h0bmVzcyA9IDA7DQorCWN0cmxzLT5j b250cmFzdCA9IDI1NjsNCisNCisJdjRsMl9jdHJsX25ld19zdGQoaGRsLCBvcHMsIFY0TDJfQ0lE X0JSSUdIVE5FU1MsIC0xMDI0LCAxMDIzLCAxLCAwKTsNCisJdjRsMl9jdHJsX25ld19zdGQoaGRs LCBvcHMsIFY0TDJfQ0lEX0NPTlRSQVNULCAtMjA0OCwgMjA0NywgMSwgMjU2KTsNCisJdjRsMl9j dHJsX25ld19zdGQoaGRsLCBvcHMsIFY0TDJfQ0lEX0dBTU1BLCAwLCBHQU1NQV9NQVgsIDEsIDIp Ow0KKwl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfQVVUT19XSElURV9CQUxB TkNFLCAwLCAxLCAxLCAxKTsNCisNCisJLyogZG9fd2hpdGVfYmFsYW5jZSBpcyBhIGJ1dHRvbiwg c28gbWluLG1heCxzdGVwLGRlZmF1bHQgYXJlIGlnbm9yZWQgKi8NCisJaXNjLT5kb193Yl9jdHJs ID0gdjRsMl9jdHJsX25ld19zdGQoaGRsLCBvcHMsIFY0TDJfQ0lEX0RPX1dISVRFX0JBTEFOQ0Us DQorCQkJCQkgICAgMCwgMCwgMCwgMCk7DQorDQorCXY0bDJfY3RybF9hY3RpdmF0ZShpc2MtPmRv X3diX2N0cmwsIGZhbHNlKTsNCisNCisJdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoaGRsKTsNCisN CisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2FzeW5jX2JvdW5kKHN0cnVjdCB2 NGwyX2FzeW5jX25vdGlmaWVyICpub3RpZmllciwNCisJCQkgICAgc3RydWN0IHY0bDJfc3ViZGV2 ICpzdWJkZXYsDQorCQkJICAgIHN0cnVjdCB2NGwyX2FzeW5jX3N1YmRldiAqYXNkKQ0KK3sNCisJ c3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IGNvbnRhaW5lcl9vZihub3RpZmllci0+djRsMl9kZXYs DQorCQkJCQkgICAgICBzdHJ1Y3QgaXNjX2RldmljZSwgdjRsMl9kZXYpOw0KKwlzdHJ1Y3QgaXNj X3N1YmRldl9lbnRpdHkgKnN1YmRldl9lbnRpdHkgPQ0KKwkJY29udGFpbmVyX29mKG5vdGlmaWVy LCBzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHksIG5vdGlmaWVyKTsNCisNCisJaWYgKHZpZGVvX2lz X3JlZ2lzdGVyZWQoJmlzYy0+dmlkZW9fZGV2KSkgew0KKwkJdjRsMl9lcnIoJmlzYy0+djRsMl9k ZXYsICJvbmx5IHN1cHBvcnRzIG9uZSBzdWItZGV2aWNlLlxuIik7DQorCQlyZXR1cm4gLUVCVVNZ Ow0KKwl9DQorDQorCXN1YmRldl9lbnRpdHktPnNkID0gc3ViZGV2Ow0KKw0KKwlyZXR1cm4gMDsN Cit9DQorDQorc3RhdGljIHZvaWQgaXNjX2FzeW5jX3VuYmluZChzdHJ1Y3QgdjRsMl9hc3luY19u b3RpZmllciAqbm90aWZpZXIsDQorCQkJICAgICAgc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYs DQorCQkJICAgICAgc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2ICphc2QpDQorew0KKwlzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjID0gY29udGFpbmVyX29mKG5vdGlmaWVyLT52NGwyX2RldiwNCisJCQkJ CSAgICAgIHN0cnVjdCBpc2NfZGV2aWNlLCB2NGwyX2Rldik7DQorCWNhbmNlbF93b3JrX3N5bmMo JmlzYy0+YXdiX3dvcmspOw0KKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmaXNjLT52aWRlb19k ZXYpOw0KKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZpc2MtPmN0cmxzLmhhbmRsZXIpOw0KK30N CisNCitzdGF0aWMgc3RydWN0IGlzY19mb3JtYXQgKmZpbmRfZm9ybWF0X2J5X2NvZGUodW5zaWdu ZWQgaW50IGNvZGUsIGludCAqaW5kZXgpDQorew0KKwlzdHJ1Y3QgaXNjX2Zvcm1hdCAqZm10ID0g JmZvcm1hdHNfbGlzdFswXTsNCisJdW5zaWduZWQgaW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGZvcm1hdHNfbGlzdCk7IGkrKykgew0KKwkJaWYgKGZtdC0+bWJ1c19jb2Rl ID09IGNvZGUpIHsNCisJCQkqaW5kZXggPSBpOw0KKwkJCXJldHVybiBmbXQ7DQorCQl9DQorDQor CQlmbXQrKzsNCisJfQ0KKw0KKwlyZXR1cm4gTlVMTDsNCit9DQorDQorc3RhdGljIGludCBpc2Nf Zm9ybWF0c19pbml0KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0KKwlzdHJ1Y3QgaXNjX2Zv cm1hdCAqZm10Ow0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiA9IGlzYy0+Y3VycmVudF9z dWJkZXYtPnNkOw0KKwl1bnNpZ25lZCBpbnQgbnVtX2ZtdHMsIGksIGo7DQorCXUzMiBsaXN0X3Np emUgPSBBUlJBWV9TSVpFKGZvcm1hdHNfbGlzdCk7DQorCXN0cnVjdCB2NGwyX3N1YmRldl9tYnVz X2NvZGVfZW51bSBtYnVzX2NvZGUgPSB7DQorCQkud2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRf QUNUSVZFLA0KKwl9Ow0KKw0KKwludW1fZm10cyA9IDA7DQorCXdoaWxlICghdjRsMl9zdWJkZXZf Y2FsbChzdWJkZXYsIHBhZCwgZW51bV9tYnVzX2NvZGUsDQorCSAgICAgICBOVUxMLCAmbWJ1c19j b2RlKSkgew0KKwkJbWJ1c19jb2RlLmluZGV4Kys7DQorDQorCQlmbXQgPSBmaW5kX2Zvcm1hdF9i eV9jb2RlKG1idXNfY29kZS5jb2RlLCAmaSk7DQorCQlpZiAoIWZtdCkgew0KKwkJCXY0bDJfd2Fy bigmaXNjLT52NGwyX2RldiwgIk1idXMgY29kZSAleCBub3Qgc3VwcG9ydGVkXG4iLA0KKwkJCQkg IG1idXNfY29kZS5jb2RlKTsNCisJCQljb250aW51ZTsNCisJCX0NCisNCisJCWZtdC0+c2Rfc3Vw cG9ydCA9IHRydWU7DQorCQludW1fZm10cysrOw0KKwl9DQorDQorCWlmICghbnVtX2ZtdHMpDQor CQlyZXR1cm4gLUVOWElPOw0KKw0KKwlpc2MtPm51bV91c2VyX2Zvcm1hdHMgPSBudW1fZm10czsN CisJaXNjLT51c2VyX2Zvcm1hdHMgPSBkZXZtX2tjYWxsb2MoaXNjLT5kZXYsDQorCQkJCQkgbnVt X2ZtdHMsIHNpemVvZigqaXNjLT51c2VyX2Zvcm1hdHMpLA0KKwkJCQkJIEdGUF9LRVJORUwpOw0K KwlpZiAoIWlzYy0+dXNlcl9mb3JtYXRzKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWZtdCA9 ICZmb3JtYXRzX2xpc3RbMF07DQorCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbGlzdF9zaXplOyBp KyspIHsNCisJCWlmIChmbXQtPnNkX3N1cHBvcnQpDQorCQkJaXNjLT51c2VyX2Zvcm1hdHNbaisr XSA9IGZtdDsNCisJCWZtdCsrOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMg aW50IGlzY19zZXRfZGVmYXVsdF9mbXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXN0 cnVjdCB2NGwyX2Zvcm1hdCBmID0gew0KKwkJLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NB UFRVUkUsDQorCQkuZm10LnBpeCA9IHsNCisJCQkud2lkdGgJCT0gVkdBX1dJRFRILA0KKwkJCS5o ZWlnaHQJCT0gVkdBX0hFSUdIVCwNCisJCQkuZmllbGQJCT0gVjRMMl9GSUVMRF9OT05FLA0KKwkJ CS5waXhlbGZvcm1hdAk9IGlzYy0+dXNlcl9mb3JtYXRzWzBdLT5mb3VyY2MsDQorCQl9LA0KKwl9 Ow0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBpc2NfdHJ5X2ZtdChpc2MsICZmLCBOVUxMKTsNCisJ aWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCWlzYy0+Zm10ID0gZjsNCisJcmV0dXJuIDA7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2FzeW5jX2NvbXBsZXRlKHN0cnVjdCB2NGwyX2FzeW5j X25vdGlmaWVyICpub3RpZmllcikNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBjb250 YWluZXJfb2Yobm90aWZpZXItPnY0bDJfZGV2LA0KKwkJCQkJICAgICAgc3RydWN0IGlzY19kZXZp Y2UsIHY0bDJfZGV2KTsNCisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9ICZpc2MtPnZpZGVv X2RldjsNCisJc3RydWN0IHZiMl9xdWV1ZSAqcSA9ICZpc2MtPnZiMl92aWRxOw0KKwlpbnQgcmV0 Ow0KKw0KKwlJTklUX1dPUksoJmlzYy0+YXdiX3dvcmssIGlzY19hd2Jfd29yayk7DQorDQorCXJl dCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldl9ub2RlcygmaXNjLT52NGwyX2Rldik7DQor CWlmIChyZXQgPCAwKSB7DQorCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgIkZhaWxlZCB0byBy ZWdpc3RlciBzdWJkZXYgbm9kZXNcbiIpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlpc2Mt PmN1cnJlbnRfc3ViZGV2ID0gY29udGFpbmVyX29mKG5vdGlmaWVyLA0KKwkJCQkJICAgc3RydWN0 IGlzY19zdWJkZXZfZW50aXR5LCBub3RpZmllcik7DQorCW11dGV4X2luaXQoJmlzYy0+bG9jayk7 DQorCWluaXRfY29tcGxldGlvbigmaXNjLT5jb21wKTsNCisNCisJLyogSW5pdGlhbGl6ZSB2aWRl b2J1ZjIgcXVldWUgKi8NCisJcS0+dHlwZQkJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJF Ow0KKwlxLT5pb19tb2RlcwkJPSBWQjJfTU1BUCB8IFZCMl9ETUFCVUYgfCBWQjJfUkVBRDsNCisJ cS0+ZHJ2X3ByaXYJCT0gaXNjOw0KKwlxLT5idWZfc3RydWN0X3NpemUJPSBzaXplb2Yoc3RydWN0 IGlzY19idWZmZXIpOw0KKwlxLT5vcHMJCQk9ICZpc2NfdmIyX29wczsNCisJcS0+bWVtX29wcwkJ PSAmdmIyX2RtYV9jb250aWdfbWVtb3BzOw0KKwlxLT50aW1lc3RhbXBfZmxhZ3MJPSBWNEwyX0JV Rl9GTEFHX1RJTUVTVEFNUF9NT05PVE9OSUM7DQorCXEtPmxvY2sJCQk9ICZpc2MtPmxvY2s7DQor CXEtPm1pbl9idWZmZXJzX25lZWRlZAk9IDE7DQorCXEtPmRldgkJCT0gaXNjLT5kZXY7DQorDQor CXJldCA9IHZiMl9xdWV1ZV9pbml0KHEpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJdjRsMl9lcnIo JmlzYy0+djRsMl9kZXYsDQorCQkJICJ2YjJfcXVldWVfaW5pdCgpIGZhaWxlZDogJWRcbiIsIHJl dCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCS8qIEluaXQgdmlkZW8gZG1hIHF1ZXVlcyAq Lw0KKwlJTklUX0xJU1RfSEVBRCgmaXNjLT5kbWFfcXVldWUpOw0KKwlzcGluX2xvY2tfaW5pdCgm aXNjLT5kbWFfcXVldWVfbG9jayk7DQorCXNwaW5fbG9ja19pbml0KCZpc2MtPmF3Yl9sb2NrKTsN CisNCisJcmV0ID0gaXNjX2Zvcm1hdHNfaW5pdChpc2MpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJ djRsMl9lcnIoJmlzYy0+djRsMl9kZXYsDQorCQkJICJJbml0IGZvcm1hdCBmYWlsZWQ6ICVkXG4i LCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXQgPSBpc2Nfc2V0X2RlZmF1bHRf Zm10KGlzYyk7DQorCWlmIChyZXQpIHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiQ291 bGQgbm90IHNldCBkZWZhdWx0IGZvcm1hdFxuIik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQor CXJldCA9IGlzY19jdHJsX2luaXQoaXNjKTsNCisJaWYgKHJldCkgew0KKwkJdjRsMl9lcnIoJmlz Yy0+djRsMl9kZXYsICJJbml0IGlzYyBjdHJvbHMgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCisJCXJl dHVybiByZXQ7DQorCX0NCisNCisJLyogUmVnaXN0ZXIgdmlkZW8gZGV2aWNlICovDQorCXN0cnNj cHkodmRldi0+bmFtZSwgQVRNRUxfSVNDX05BTUUsIHNpemVvZih2ZGV2LT5uYW1lKSk7DQorCXZk ZXYtPnJlbGVhc2UJCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7DQorCXZkZXYtPmZvcHMJ CT0gJmlzY19mb3BzOw0KKwl2ZGV2LT5pb2N0bF9vcHMJCT0gJmlzY19pb2N0bF9vcHM7DQorCXZk ZXYtPnY0bDJfZGV2CQk9ICZpc2MtPnY0bDJfZGV2Ow0KKwl2ZGV2LT52ZmxfZGlyCQk9IFZGTF9E SVJfUlg7DQorCXZkZXYtPnF1ZXVlCQk9IHE7DQorCXZkZXYtPmxvY2sJCT0gJmlzYy0+bG9jazsN CisJdmRldi0+Y3RybF9oYW5kbGVyCT0gJmlzYy0+Y3RybHMuaGFuZGxlcjsNCisJdmRldi0+ZGV2 aWNlX2NhcHMJPSBWNEwyX0NBUF9TVFJFQU1JTkcgfCBWNEwyX0NBUF9WSURFT19DQVBUVVJFOw0K Kwl2aWRlb19zZXRfZHJ2ZGF0YSh2ZGV2LCBpc2MpOw0KKw0KKwlyZXQgPSB2aWRlb19yZWdpc3Rl cl9kZXZpY2UodmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOw0KKwlpZiAocmV0IDwgMCkgew0K KwkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsDQorCQkJICJ2aWRlb19yZWdpc3Rlcl9kZXZpY2Ug ZmFpbGVkOiAlZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0dXJuIDA7 DQorfQ0KKw0KK2NvbnN0IHN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyX29wZXJhdGlvbnMgaXNj X2FzeW5jX29wcyA9IHsNCisJLmJvdW5kID0gaXNjX2FzeW5jX2JvdW5kLA0KKwkudW5iaW5kID0g aXNjX2FzeW5jX3VuYmluZCwNCisJLmNvbXBsZXRlID0gaXNjX2FzeW5jX2NvbXBsZXRlLA0KK307 DQorDQordm9pZCBpc2Nfc3ViZGV2X2NsZWFudXAoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7 DQorCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eTsNCisNCisJbGlzdF9m b3JfZWFjaF9lbnRyeShzdWJkZXZfZW50aXR5LCAmaXNjLT5zdWJkZXZfZW50aXRpZXMsIGxpc3Qp IHsNCisJCXY0bDJfYXN5bmNfbm90aWZpZXJfdW5yZWdpc3Rlcigmc3ViZGV2X2VudGl0eS0+bm90 aWZpZXIpOw0KKwkJdjRsMl9hc3luY19ub3RpZmllcl9jbGVhbnVwKCZzdWJkZXZfZW50aXR5LT5u b3RpZmllcik7DQorCX0NCisNCisJSU5JVF9MSVNUX0hFQUQoJmlzYy0+c3ViZGV2X2VudGl0aWVz KTsNCit9DQorDQoraW50IGlzY19waXBlbGluZV9pbml0KHN0cnVjdCBpc2NfZGV2aWNlICppc2Mp DQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpc2MtPmRldjsNCisJc3RydWN0IHJlZ21hcCAq cmVnbWFwID0gaXNjLT5yZWdtYXA7DQorCXN0cnVjdCByZWdtYXBfZmllbGQgKnJlZ3M7DQorCXVu c2lnbmVkIGludCBpOw0KKw0KKwkvKiBXQi0tPkNGQS0tPkNDLS0+R0FNLS0+Q1NDLS0+Q0JDLS0+ U1VCNDIyLS0+U1VCNDIwICovDQorCWNvbnN0IHN0cnVjdCByZWdfZmllbGQgcmVnZmllbGRzW0lT Q19QSVBFX0xJTkVfTk9ERV9OVU1dID0gew0KKwkJUkVHX0ZJRUxEKElTQ19XQl9DVFJMLCAwLCAw KSwNCisJCVJFR19GSUVMRChJU0NfQ0ZBX0NUUkwsIDAsIDApLA0KKwkJUkVHX0ZJRUxEKElTQ19D Q19DVFJMLCAwLCAwKSwNCisJCVJFR19GSUVMRChJU0NfR0FNX0NUUkwsIDAsIDApLA0KKwkJUkVH X0ZJRUxEKElTQ19HQU1fQ1RSTCwgMSwgMSksDQorCQlSRUdfRklFTEQoSVNDX0dBTV9DVFJMLCAy LCAyKSwNCisJCVJFR19GSUVMRChJU0NfR0FNX0NUUkwsIDMsIDMpLA0KKwkJUkVHX0ZJRUxEKElT Q19DU0NfQ1RSTCwgMCwgMCksDQorCQlSRUdfRklFTEQoSVNDX0NCQ19DVFJMLCAwLCAwKSwNCisJ CVJFR19GSUVMRChJU0NfU1VCNDIyX0NUUkwsIDAsIDApLA0KKwkJUkVHX0ZJRUxEKElTQ19TVUI0 MjBfQ1RSTCwgMCwgMCksDQorCX07DQorDQorCWZvciAoaSA9IDA7IGkgPCBJU0NfUElQRV9MSU5F X05PREVfTlVNOyBpKyspIHsNCisJCXJlZ3MgPSBkZXZtX3JlZ21hcF9maWVsZF9hbGxvYyhkZXYs IHJlZ21hcCwgcmVnZmllbGRzW2ldKTsNCisJCWlmIChJU19FUlIocmVncykpDQorCQkJcmV0dXJu IFBUUl9FUlIocmVncyk7DQorDQorCQlpc2MtPnBpcGVsaW5lW2ldID0gIHJlZ3M7DQorCX0NCisN CisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qIHJlZ21hcCBjb25maWd1cmF0aW9uICovDQorI2RlZmlu ZSBBVE1FTF9JU0NfUkVHX01BWCAgICAweGJmYw0KK2NvbnN0IHN0cnVjdCByZWdtYXBfY29uZmln IGlzY19yZWdtYXBfY29uZmlnID0gew0KKwkucmVnX2JpdHMgICAgICAgPSAzMiwNCisJLnJlZ19z dHJpZGUgICAgID0gNCwNCisJLnZhbF9iaXRzICAgICAgID0gMzIsDQorCS5tYXhfcmVnaXN0ZXIJ PSBBVE1FTF9JU0NfUkVHX01BWCwNCit9Ow0KKw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEv cGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVs L2F0bWVsLWlzYy5jDQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IGRhM2I0NDEuLjAw MDAwMDANCi0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmMNCisr KyAvZGV2L251bGwNCkBAIC0xLDI2MzQgKzAsMCBAQA0KLS8qDQotICogQXRtZWwgSW1hZ2UgU2Vu c29yIENvbnRyb2xsZXIgKElTQykgZHJpdmVyDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg QXRtZWwNCi0gKg0KLSAqIEF1dGhvcjogU29uZ2p1biBXdSA8c29uZ2p1bi53dUBtaWNyb2NoaXAu Y29tPg0KLSAqDQotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KLSAqIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4NCi0gKg0KLSAq IFNlbnNvci0tPlBGRS0tPldCLS0+Q0ZBLS0+Q0MtLT5HQU0tLT5DU0MtLT5DQkMtLT5TVUItLT5S TFAtLT5ETUENCi0gKg0KLSAqIElTQyB2aWRlbyBwaXBlbGluZSBpbnRlZ3JhdGVzIHRoZSBmb2xs b3dpbmcgc3VibW9kdWxlczoNCi0gKiBQRkU6IFBhcmFsbGVsIEZyb250IEVuZCB0byBzYW1wbGUg dGhlIGNhbWVyYSBzZW5zb3IgaW5wdXQgc3RyZWFtDQotICogIFdCOiBQcm9ncmFtbWFibGUgd2hp dGUgYmFsYW5jZSBpbiB0aGUgQmF5ZXIgZG9tYWluDQotICogQ0ZBOiBDb2xvciBmaWx0ZXIgYXJy YXkgaW50ZXJwb2xhdGlvbiBtb2R1bGUNCi0gKiAgQ0M6IFByb2dyYW1tYWJsZSBjb2xvciBjb3Jy ZWN0aW9uDQotICogR0FNOiBHYW1tYSBjb3JyZWN0aW9uDQotICogQ1NDOiBQcm9ncmFtbWFibGUg Y29sb3Igc3BhY2UgY29udmVyc2lvbg0KLSAqIENCQzogQ29udHJhc3QgYW5kIEJyaWdodG5lc3Mg Y29udHJvbA0KLSAqIFNVQjogVGhpcyBtb2R1bGUgcGVyZm9ybXMgWUNiQ3I0NDQgdG8gWUNiQ3I0 MjAgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcNCi0gKiBSTFA6IFRoaXMgbW9kdWxlIHBlcmZvcm1z IHJvdW5kaW5nLCByYW5nZSBsaW1pdGluZw0KLSAqICAgICAgYW5kIHBhY2tpbmcgb2YgdGhlIGlu Y29taW5nIGRhdGENCi0gKi8NCi0NCi0jaW5jbHVkZSA8bGludXgvY2xrLmg+DQotI2luY2x1ZGUg PGxpbnV4L2Nsa2Rldi5oPg0KLSNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4NCi0jaW5j bHVkZSA8bGludXgvZGVsYXkuaD4NCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQotI2lu Y2x1ZGUgPGxpbnV4L21hdGg2NC5oPg0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCi0jaW5j bHVkZSA8bGludXgvb2YuaD4NCi0jaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4NCi0jaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQotI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUu aD4NCi0jaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2 Mi5oPg0KLQ0KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+DQotI2luY2x1ZGUgPG1lZGlh L3Y0bDItZGV2aWNlLmg+DQotI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4NCi0jaW5jbHVk ZSA8bWVkaWEvdjRsMi1pbWFnZS1zaXplcy5oPg0KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3Rs Lmg+DQotI2luY2x1ZGUgPG1lZGlhL3Y0bDItZndub2RlLmg+DQotI2luY2x1ZGUgPG1lZGlhL3Y0 bDItc3ViZGV2Lmg+DQotI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi1kbWEtY29udGlnLmg+DQot DQotI2luY2x1ZGUgImF0bWVsLWlzYy1yZWdzLmgiDQotDQotI2RlZmluZSBBVE1FTF9JU0NfTkFN RQkJImF0bWVsX2lzYyINCi0NCi0jZGVmaW5lIElTQ19NQVhfU1VQUE9SVF9XSURUSCAgIDI1OTIN Ci0jZGVmaW5lIElTQ19NQVhfU1VQUE9SVF9IRUlHSFQgIDE5NDQNCi0NCi0jZGVmaW5lIElTQ19D TEtfTUFYX0RJVgkJMjU1DQotDQotZW51bSBpc2NfY2xrX2lkIHsNCi0JSVNDX0lTUENLID0gMCwN Ci0JSVNDX01DSyA9IDEsDQotfTsNCi0NCi1zdHJ1Y3QgaXNjX2NsayB7DQotCXN0cnVjdCBjbGtf aHcgICBodzsNCi0Jc3RydWN0IGNsayAgICAgICpjbGs7DQotCXN0cnVjdCByZWdtYXAgICAqcmVn bWFwOw0KLQlzcGlubG9ja190CWxvY2s7DQotCXU4CQlpZDsNCi0JdTgJCXBhcmVudF9pZDsNCi0J dTMyCQlkaXY7DQotCXN0cnVjdCBkZXZpY2UJKmRldjsNCi19Ow0KLQ0KLSNkZWZpbmUgdG9faXNj X2NsayhodykgY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgaXNjX2NsaywgaHcpDQotDQotc3RydWN0 IGlzY19idWZmZXIgew0KLQlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICB2YjsNCi0Jc3RydWN0IGxp c3RfaGVhZAlsaXN0Ow0KLX07DQotDQotc3RydWN0IGlzY19zdWJkZXZfZW50aXR5IHsNCi0Jc3Ry dWN0IHY0bDJfc3ViZGV2CQkqc2Q7DQotCXN0cnVjdCB2NGwyX2FzeW5jX3N1YmRldgkqYXNkOw0K LQlzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAgICAgIG5vdGlmaWVyOw0KLQ0KLQl1MzIgcGZl X2NmZzA7DQotDQotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsNCi19Ow0KLQ0KLS8qDQotICogc3Ry dWN0IGlzY19mb3JtYXQgLSBJU0MgbWVkaWEgYnVzIGZvcm1hdCBpbmZvcm1hdGlvbg0KLQkJCVRo aXMgc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBJU0MNCi0J CQlhbmQgdGhlIHNlbnNvci4gSXQncyB0aGUgaW5wdXQgZm9ybWF0IHJlY2VpdmVkIGJ5DQotCQkJ dGhlIElTQy4NCi0gKiBAZm91cmNjOgkJRm91cmNjIGNvZGUgZm9yIHRoaXMgZm9ybWF0DQotICog QG1idXNfY29kZToJCVY0TDIgbWVkaWEgYnVzIGZvcm1hdCBjb2RlLg0KLSAqIEBjZmFfYmF5Y2Zn OgkJSWYgdGhpcyBmb3JtYXQgaXMgUkFXIEJBWUVSLCBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBiYXll ci4NCi0JCQl0aGlzIGlzIGVpdGhlciBCR0JHLCBSR1JHLCBldGMuDQotICogQHBmZV9jZmcwX2Jw czoJTnVtYmVyIG9mIGhhcmR3YXJlIGRhdGEgbGluZXMgY29ubmVjdGVkIHRvIHRoZSBJU0MNCi0g Ki8NCi0NCi1zdHJ1Y3QgaXNjX2Zvcm1hdCB7DQotCXUzMglmb3VyY2M7DQotCXUzMgltYnVzX2Nv ZGU7DQotCXUzMgljZmFfYmF5Y2ZnOw0KLQ0KLQlib29sCXNkX3N1cHBvcnQ7DQotCXUzMglwZmVf Y2ZnMF9icHM7DQotfTsNCi0NCi0vKiBQaXBlbGluZSBiaXRtYXAgKi8NCi0jZGVmaW5lIFdCX0VO QUJMRQlCSVQoMCkNCi0jZGVmaW5lIENGQV9FTkFCTEUJQklUKDEpDQotI2RlZmluZSBDQ19FTkFC TEUJQklUKDIpDQotI2RlZmluZSBHQU1fRU5BQkxFCUJJVCgzKQ0KLSNkZWZpbmUgR0FNX0JFTkFC TEUJQklUKDQpDQotI2RlZmluZSBHQU1fR0VOQUJMRQlCSVQoNSkNCi0jZGVmaW5lIEdBTV9SRU5B QkxFCUJJVCg2KQ0KLSNkZWZpbmUgQ1NDX0VOQUJMRQlCSVQoNykNCi0jZGVmaW5lIENCQ19FTkFC TEUJQklUKDgpDQotI2RlZmluZSBTVUI0MjJfRU5BQkxFCUJJVCg5KQ0KLSNkZWZpbmUgU1VCNDIw X0VOQUJMRQlCSVQoMTApDQotDQotI2RlZmluZSBHQU1fRU5BQkxFUwkoR0FNX1JFTkFCTEUgfCBH QU1fR0VOQUJMRSB8IEdBTV9CRU5BQkxFIHwgR0FNX0VOQUJMRSkNCi0NCi0vKg0KLSAqIHN0cnVj dCBmbXRfY29uZmlnIC0gSVNDIGZvcm1hdCBjb25maWd1cmF0aW9uIGFuZCBpbnRlcm5hbCBwaXBl bGluZQ0KLQkJCVRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIGludGVybmFsIGNvbmZpZ3Vy YXRpb24NCi0JCQlvZiB0aGUgSVNDLg0KLQkJCUl0IGFsc28gaG9sZHMgdGhlIGZvcm1hdCB0aGF0 IElTQyB3aWxsIHByZXNlbnQgdG8gdjRsMi4NCi0gKiBAc2RfZm9ybWF0OgkJUG9pbnRlciB0byBh biBpc2NfZm9ybWF0IHN0cnVjdCB0aGF0IGhvbGRzIHRoZSBzZW5zb3INCi0JCQljb25maWd1cmF0 aW9uLg0KLSAqIEBmb3VyY2M6CQlGb3VyY2MgY29kZSBmb3IgdGhpcyBmb3JtYXQuDQotICogQGJw cDoJCUJ5dGVzIHBlciBwaXhlbCBpbiB0aGUgY3VycmVudCBmb3JtYXQuDQotICogQHJscF9jZmdf bW9kZToJQ29uZmlndXJhdGlvbiBvZiB0aGUgUkxQIChyb3VuZGluZywgbGltaXRpbmcgcGFja2Fn aW5nKQ0KLSAqIEBkY2ZnX2ltb2RlOgkJQ29uZmlndXJhdGlvbiBvZiB0aGUgaW5wdXQgb2YgdGhl IERNQSBtb2R1bGUNCi0gKiBAZGN0cmxfZHZpZXc6CUNvbmZpZ3VyYXRpb24gb2YgdGhlIG91dHB1 dCBvZiB0aGUgRE1BIG1vZHVsZQ0KLSAqIEBiaXRzX3BpcGVsaW5lOglDb25maWd1cmF0aW9uIG9m IHRoZSBwaXBlbGluZSwgd2hpY2ggbW9kdWxlcyBhcmUgZW5hYmxlZA0KLSAqLw0KLXN0cnVjdCBm bXRfY29uZmlnIHsNCi0Jc3RydWN0IGlzY19mb3JtYXQJKnNkX2Zvcm1hdDsNCi0NCi0JdTMyCQkJ Zm91cmNjOw0KLQl1OAkJCWJwcDsNCi0NCi0JdTMyCQkJcmxwX2NmZ19tb2RlOw0KLQl1MzIJCQlk Y2ZnX2ltb2RlOw0KLQl1MzIJCQlkY3RybF9kdmlldzsNCi0NCi0JdTMyCQkJYml0c19waXBlbGlu ZTsNCi19Ow0KLQ0KLSNkZWZpbmUgSElTVF9FTlRSSUVTCQk1MTINCi0jZGVmaW5lIEhJU1RfQkFZ RVIJCShJU0NfSElTX0NGR19NT0RFX0IgKyAxKQ0KLQ0KLWVudW17DQotCUhJU1RfSU5JVCA9IDAs DQotCUhJU1RfRU5BQkxFRCwNCi0JSElTVF9ESVNBQkxFRCwNCi19Ow0KLQ0KLXN0cnVjdCBpc2Nf Y3RybHMgew0KLQlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgaGFuZGxlcjsNCi0NCi0JdTMyIGJy aWdodG5lc3M7DQotCXUzMiBjb250cmFzdDsNCi0JdTggZ2FtbWFfaW5kZXg7DQotI2RlZmluZSBJ U0NfV0JfTk9ORQkwDQotI2RlZmluZSBJU0NfV0JfQVVUTwkxDQotI2RlZmluZSBJU0NfV0JfT05F VElNRQkyDQotCXU4IGF3YjsNCi0NCi0JLyogb25lIGZvciBlYWNoIGNvbXBvbmVudCA6IEdSLCBS LCBHQiwgQiAqLw0KLQl1MzIgZ2FpbltISVNUX0JBWUVSXTsNCi0JdTMyIG9mZnNldFtISVNUX0JB WUVSXTsNCi0NCi0JdTMyIGhpc3RfZW50cnlbSElTVF9FTlRSSUVTXTsNCi0JdTMyIGhpc3RfY291 bnRbSElTVF9CQVlFUl07DQotCXU4IGhpc3RfaWQ7DQotCXU4IGhpc3Rfc3RhdDsNCi0jZGVmaW5l IEhJU1RfTUlOX0lOREVYCQkwDQotI2RlZmluZSBISVNUX01BWF9JTkRFWAkJMQ0KLQl1MzIgaGlz dF9taW5tYXhbSElTVF9CQVlFUl1bMl07DQotfTsNCi0NCi0jZGVmaW5lIElTQ19QSVBFX0xJTkVf Tk9ERV9OVU0JMTENCi0NCi1zdHJ1Y3QgaXNjX2RldmljZSB7DQotCXN0cnVjdCByZWdtYXAJCSpy ZWdtYXA7DQotCXN0cnVjdCBjbGsJCSpoY2xvY2s7DQotCXN0cnVjdCBjbGsJCSppc3BjazsNCi0J c3RydWN0IGlzY19jbGsJCWlzY19jbGtzWzJdOw0KLQ0KLQlzdHJ1Y3QgZGV2aWNlCQkqZGV2Ow0K LQlzdHJ1Y3QgdjRsMl9kZXZpY2UJdjRsMl9kZXY7DQotCXN0cnVjdCB2aWRlb19kZXZpY2UJdmlk ZW9fZGV2Ow0KLQ0KLQlzdHJ1Y3QgdmIyX3F1ZXVlCXZiMl92aWRxOw0KLQlzcGlubG9ja190CQlk bWFfcXVldWVfbG9jazsNCi0Jc3RydWN0IGxpc3RfaGVhZAlkbWFfcXVldWU7DQotCXN0cnVjdCBp c2NfYnVmZmVyCSpjdXJfZnJtOw0KLQl1bnNpZ25lZCBpbnQJCXNlcXVlbmNlOw0KLQlib29sCQkJ c3RvcDsNCi0Jc3RydWN0IGNvbXBsZXRpb24JY29tcDsNCi0NCi0Jc3RydWN0IHY0bDJfZm9ybWF0 CWZtdDsNCi0Jc3RydWN0IGlzY19mb3JtYXQJKip1c2VyX2Zvcm1hdHM7DQotCXVuc2lnbmVkIGlu dAkJbnVtX3VzZXJfZm9ybWF0czsNCi0NCi0Jc3RydWN0IGZtdF9jb25maWcJY29uZmlnOw0KLQlz dHJ1Y3QgZm10X2NvbmZpZwl0cnlfY29uZmlnOw0KLQ0KLQlzdHJ1Y3QgaXNjX2N0cmxzCWN0cmxz Ow0KLQlzdHJ1Y3QgdjRsMl9jdHJsCSpkb193Yl9jdHJsOw0KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJ YXdiX3dvcms7DQotDQotCXN0cnVjdCBtdXRleAkJbG9jazsNCi0Jc3BpbmxvY2tfdAkJYXdiX2xv Y2s7DQotDQotCXN0cnVjdCByZWdtYXBfZmllbGQJKnBpcGVsaW5lW0lTQ19QSVBFX0xJTkVfTk9E RV9OVU1dOw0KLQ0KLQlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkJKmN1cnJlbnRfc3ViZGV2Ow0K LQlzdHJ1Y3QgbGlzdF9oZWFkCQlzdWJkZXZfZW50aXRpZXM7DQotfTsNCi0NCi0vKiBUaGlzIGlz IGEgbGlzdCBvZiB0aGUgZm9ybWF0cyB0aGF0IHRoZSBJU0MgY2FuICpvdXRwdXQqICovDQotc3Rh dGljIHN0cnVjdCBpc2NfZm9ybWF0IGNvbnRyb2xsZXJfZm9ybWF0c1tdID0gew0KLQl7DQotCQku Zm91cmNjCQk9IFY0TDJfUElYX0ZNVF9BUkdCNDQ0LA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9 IFY0TDJfUElYX0ZNVF9BUkdCNTU1LA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElY X0ZNVF9SR0I1NjUsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX0FCR1Iz MiwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWEJHUjMyLA0KLQl9LA0K LQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVY0MjAsDQotCX0sDQotCXsNCi0JCS5m b3VyY2MJCT0gVjRMMl9QSVhfRk1UX1lVWVYsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRM Ml9QSVhfRk1UX1lVVjQyMlAsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1U X0dSRVksDQotCX0sDQotfTsNCi0NCi0vKiBUaGlzIGlzIGEgbGlzdCBvZiBmb3JtYXRzIHRoYXQg dGhlIElTQyBjYW4gcmVjZWl2ZSBhcyAqaW5wdXQqICovDQotc3RhdGljIHN0cnVjdCBpc2NfZm9y bWF0IGZvcm1hdHNfbGlzdFtdID0gew0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9T QkdHUjgsDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TQkdHUjhfMVg4LA0KLQkJLnBm ZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQotCQkuY2ZhX2JheWNmZwk9IElT Q19CQVlfQ0ZHX0JHQkcsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NH QlJHOCwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHQlJHOF8xWDgsDQotCQkucGZl X2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVND X0JBWV9DRkdfR0JHQiwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dS Qkc4LA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dSQkc4XzFYOCwNCi0JCS5wZmVf Y2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KLQkJLmNmYV9iYXljZmcJPSBJU0Nf QkFZX0NGR19HUkdSLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TUkdH QjgsDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TUkdHQjhfMVg4LA0KLQkJLnBmZV9j ZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQotCQkuY2ZhX2JheWNmZwk9IElTQ19C QVlfQ0ZHX1JHUkcsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NCR0dS MTAsDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TQkdHUjEwXzFYMTAsDQotCQkucGZl X2NmZzBfYnBzCT0gSVNDX1BGR19DRkcwX0JQU19URU4sDQotCQkuY2ZhX2JheWNmZwk9IElTQ19C QVlfQ0ZHX1JHUkcsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NHQlJH MTAsDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TR0JSRzEwXzFYMTAsDQotCQkucGZl X2NmZzBfYnBzCT0gSVNDX1BGR19DRkcwX0JQU19URU4sDQotCQkuY2ZhX2JheWNmZwk9IElTQ19C QVlfQ0ZHX0dCR0IsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NHUkJH MTAsDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TR1JCRzEwXzFYMTAsDQotCQkucGZl X2NmZzBfYnBzCT0gSVNDX1BGR19DRkcwX0JQU19URU4sDQotCQkuY2ZhX2JheWNmZwk9IElTQ19C QVlfQ0ZHX0dSR1IsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NSR0dC MTAsDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTAsDQotCQkucGZl X2NmZzBfYnBzCT0gSVNDX1BGR19DRkcwX0JQU19URU4sDQotCQkuY2ZhX2JheWNmZwk9IElTQ19C QVlfQ0ZHX1JHUkcsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NCR0dS MTIsDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TQkdHUjEyXzFYMTIsDQotCQkucGZl X2NmZzBfYnBzCT0gSVNDX1BGR19DRkcwX0JQU19UV0VMVkUsDQotCQkuY2ZhX2JheWNmZwk9IElT Q19CQVlfQ0ZHX0JHQkcsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NH QlJHMTIsDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TR0JSRzEyXzFYMTIsDQotCQku cGZlX2NmZzBfYnBzCT0gSVNDX1BGR19DRkcwX0JQU19UV0VMVkUsDQotCQkuY2ZhX2JheWNmZwk9 IElTQ19CQVlfQ0ZHX0dCR0IsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1U X1NHUkJHMTIsDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TR1JCRzEyXzFYMTIsDQot CQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGR19DRkcwX0JQU19UV0VMVkUsDQotCQkuY2ZhX2JheWNm Zwk9IElTQ19CQVlfQ0ZHX0dSR1IsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhf Rk1UX1NSR0dCMTIsDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TUkdHQjEyXzFYMTIs DQotCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGR19DRkcwX0JQU19UV0VMVkUsDQotCQkuY2ZhX2Jh eWNmZwk9IElTQ19CQVlfQ0ZHX1JHUkcsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9Q SVhfRk1UX0dSRVksDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9ZOF8xWDgsDQotCQku cGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCi0JfSwNCi0Jew0KLQkJLmZv dXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVZViwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1U X1lVWVY4XzJYOCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0K LQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9SR0I1NjUsDQotCQkubWJ1c19j b2RlCT0gTUVESUFfQlVTX0ZNVF9SR0I1NjVfMlg4X0xFLA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElT Q19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQotCX0sDQotfTsNCi0NCi0jZGVmaW5lIEdBTU1BX01BWAky DQotI2RlZmluZSBHQU1NQV9FTlRSSUVTCTY0DQotDQotLyogR2FtbWEgdGFibGUgd2l0aCBnYW1t YSAxLzIuMiAqLw0KLXN0YXRpYyBjb25zdCB1MzIgaXNjX2dhbW1hX3RhYmxlW0dBTU1BX01BWCAr IDFdW0dBTU1BX0VOVFJJRVNdID0gew0KLQkvKiAwIC0tPiBnYW1tYSAxLzEuOCAqLw0KLQl7ICAg ICAgMHg2NSwgIDB4NjYwMDJGLCAgMHg5NTAwMjUsICAweEJCMDAyMCwgIDB4REIwMDFELCAgMHhG ODAwMUEsDQotCSAgMHgxMTMwMDE4LCAweDEyQjAwMTcsIDB4MTQyMDAxNiwgMHgxNTgwMDE0LCAw eDE2RDAwMTMsIDB4MTgxMDAxMiwNCi0JICAweDE5NDAwMTIsIDB4MUE2MDAxMiwgMHgxQjgwMDEx LCAweDFDOTAwMTAsIDB4MURBMDAxMCwgMHgxRUEwMDBGLA0KLQkgIDB4MUZBMDAwRiwgMHgyMDkw MDBGLCAweDIxODAwMEYsIDB4MjI3MDAwRSwgMHgyMzUwMDBFLCAweDI0MzAwMEUsDQotCSAgMHgy NTEwMDBFLCAweDI1RjAwMEQsIDB4MjZDMDAwRCwgMHgyNzkwMDBELCAweDI4NjAwMEQsIDB4Mjkz MDAwQywNCi0JICAweDJBMDAwMEMsIDB4MkFDMDAwQywgMHgyQjgwMDBDLCAweDJDNDAwMEMsIDB4 MkQwMDAwQiwgMHgyREMwMDBCLA0KLQkgIDB4MkU3MDAwQiwgMHgyRjMwMDBCLCAweDJGRTAwMEIs IDB4MzA5MDAwQiwgMHgzMTQwMDBCLCAweDMxRjAwMEEsDQotCSAgMHgzMkEwMDBBLCAweDMzNDAw MEIsIDB4MzNGMDAwQSwgMHgzNDkwMDBBLCAweDM1NDAwMEEsIDB4MzVFMDAwQSwNCi0JICAweDM2 ODAwMEEsIDB4MzcyMDAwQSwgMHgzN0MwMDBBLCAweDM4NjAwMEEsIDB4MzkwMDAwOSwgMHgzOTkw MDBBLA0KLQkgIDB4M0EzMDAwOSwgMHgzQUQwMDA5LCAweDNCNjAwMDksIDB4M0JGMDAwQSwgMHgz QzkwMDA5LCAweDNEMjAwMDksDQotCSAgMHgzREIwMDA5LCAweDNFNDAwMDksIDB4M0VEMDAwOSwg MHgzRjYwMDA5IH0sDQotDQotCS8qIDEgLS0+IGdhbW1hIDEvMiAqLw0KLQl7ICAgICAgMHg3Riwg IDB4ODAwMDM0LCAgMHhCNTAwMjgsICAweERFMDAyMSwgMHgxMDAwMDFFLCAweDExRTAwMUIsDQot CSAgMHgxMzkwMDE5LCAweDE1MjAwMTcsIDB4MTZBMDAxNSwgMHgxODAwMDE0LCAweDE5NDAwMTQs IDB4MUE4MDAxMywNCi0JICAweDFCQjAwMTIsIDB4MUNEMDAxMSwgMHgxREYwMDEwLCAweDFFRjAw MTAsIDB4MjAwMDAwRiwgMHgyMEYwMDBGLA0KLQkgIDB4MjFGMDAwRSwgMHgyMkQwMDBGLCAweDIz QzAwMEUsIDB4MjRBMDAwRSwgMHgyNTgwMDBELCAweDI2NTAwMEQsDQotCSAgMHgyNzMwMDBDLCAw eDI3RjAwMEQsIDB4MjhDMDAwQywgMHgyOTkwMDBDLCAweDJBNTAwMEMsIDB4MkIxMDAwQiwNCi0J ICAweDJCQzAwMEMsIDB4MkM4MDAwQiwgMHgyRDMwMDBDLCAweDJERjAwMEIsIDB4MkVBMDAwQSwg MHgyRjUwMDBBLA0KLQkgIDB4MkZGMDAwQiwgMHgzMEEwMDBBLCAweDMxNDAwMEIsIDB4MzFGMDAw QSwgMHgzMjkwMDBBLCAweDMzMzAwMEEsDQotCSAgMHgzM0QwMDA5LCAweDM0NzAwMDksIDB4MzUw MDAwQSwgMHgzNUEwMDA5LCAweDM2MzAwMEEsIDB4MzZEMDAwOSwNCi0JICAweDM3NjAwMDksIDB4 MzdGMDAwOSwgMHgzODgwMDA5LCAweDM5MTAwMDksIDB4MzlBMDAwOSwgMHgzQTMwMDA5LA0KLQkg IDB4M0FDMDAwOCwgMHgzQjQwMDA5LCAweDNCRDAwMDgsIDB4M0M2MDAwOCwgMHgzQ0UwMDA4LCAw eDNENjAwMDksDQotCSAgMHgzREYwMDA4LCAweDNFNzAwMDgsIDB4M0VGMDAwOCwgMHgzRjcwMDA4 IH0sDQotDQotCS8qIDIgLS0+IGdhbW1hIDEvMi4yICovDQotCXsgICAgICAweDk5LCAgMHg5QjAw MzgsICAweEQ0MDAyQSwgIDB4RkYwMDIzLCAweDEyMjAwMUYsIDB4MTQxMDAxQiwNCi0JICAweDE1 RDAwMTksIDB4MTc2MDAxNywgMHgxOEUwMDE1LCAweDFBMzAwMTUsIDB4MUI4MDAxMywgMHgxQ0Mw MDEyLA0KLQkgIDB4MURFMDAxMSwgMHgxRjAwMDEwLCAweDIwMTAwMTAsIDB4MjExMDAxMCwgMHgy MjEwMDBGLCAweDIzMDAwMEYsDQotCSAgMHgyM0YwMDBFLCAweDI0RDAwMEUsIDB4MjVCMDAwRCwg MHgyNjkwMDBDLCAweDI3NjAwMEMsIDB4MjgzMDAwQywNCi0JICAweDI4RjAwMEMsIDB4MjlCMDAw QywgMHgyQTcwMDBDLCAweDJCMzAwMEIsIDB4MkJGMDAwQiwgMHgyQ0EwMDBCLA0KLQkgIDB4MkQ1 MDAwQiwgMHgyRTAwMDBBLCAweDJFQjAwMEEsIDB4MkY1MDAwQSwgMHgyRkYwMDBBLCAweDMwQTAw MEEsDQotCSAgMHgzMTQwMDA5LCAweDMxRTAwMDksIDB4MzI3MDAwQSwgMHgzMzEwMDA5LCAweDMz QTAwMDksIDB4MzQ0MDAwOSwNCi0JICAweDM0RDAwMDksIDB4MzU2MDAwOSwgMHgzNUYwMDA5LCAw eDM2ODAwMDgsIDB4MzcxMDAwOCwgMHgzNzkwMDA5LA0KLQkgIDB4MzgyMDAwOCwgMHgzOEEwMDA4 LCAweDM5MzAwMDgsIDB4MzlCMDAwOCwgMHgzQTMwMDA4LCAweDNBQjAwMDgsDQotCSAgMHgzQjMw MDA4LCAweDNCQjAwMDgsIDB4M0MzMDAwOCwgMHgzQ0IwMDA3LCAweDNEMjAwMDgsIDB4M0RBMDAw NywNCi0JICAweDNFMjAwMDcsIDB4M0U5MDAwNywgMHgzRjAwMDA4LCAweDNGODAwMDcgfSwNCi19 Ow0KLQ0KLSNkZWZpbmUgSVNDX0lTX0ZPUk1BVF9SQVcobWJ1c19jb2RlKSBcDQotCSgoKG1idXNf Y29kZSkgJiAweGYwMDApID09IDB4MzAwMCkNCi0NCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlYnVn Ow0KLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsNCi1NT0RVTEVfUEFSTV9ERVNDKGRl YnVnLCAiZGVidWcgbGV2ZWwgKDAtMikiKTsNCi0NCi1zdGF0aWMgdW5zaWduZWQgaW50IHNlbnNv cl9wcmVmZXJyZWQgPSAxOw0KLW1vZHVsZV9wYXJhbShzZW5zb3JfcHJlZmVycmVkLCB1aW50LCAw NjQ0KTsNCi1NT0RVTEVfUEFSTV9ERVNDKHNlbnNvcl9wcmVmZXJyZWQsDQotCQkgIlNlbnNvciBp cyBwcmVmZXJyZWQgdG8gb3V0cHV0IHRoZSBzcGVjaWZpZWQgZm9ybWF0ICgxLW9uIDAtb2ZmKSwg ZGVmYXVsdCAxIik7DQotDQotc3RhdGljIGlubGluZSB2b2lkIGlzY191cGRhdGVfYXdiX2N0cmxz KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0KLQlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9 ICZpc2MtPmN0cmxzOw0KLQ0KLQlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19XQl9PX1JH UiwNCi0JCSAgICAgKElTQ19XQl9PX1pFUk9fVkFMIC0gKGN0cmxzLT5vZmZzZXRbSVNDX0hJU19D RkdfTU9ERV9SXSkpIHwNCi0JCSAgICAgKChJU0NfV0JfT19aRVJPX1ZBTCAtIGN0cmxzLT5vZmZz ZXRbSVNDX0hJU19DRkdfTU9ERV9HUl0pIDw8IDE2KSk7DQotCXJlZ21hcF93cml0ZShpc2MtPnJl Z21hcCwgSVNDX1dCX09fQkdCLA0KLQkJICAgICAoSVNDX1dCX09fWkVST19WQUwgLSAoY3RybHMt Pm9mZnNldFtJU0NfSElTX0NGR19NT0RFX0JdKSkgfA0KLQkJICAgICAoKElTQ19XQl9PX1pFUk9f VkFMIC0gY3RybHMtPm9mZnNldFtJU0NfSElTX0NGR19NT0RFX0dCXSkgPDwgMTYpKTsNCi0JcmVn bWFwX3dyaXRlKGlzYy0+cmVnbWFwLCBJU0NfV0JfR19SR1IsDQotCQkgICAgIGN0cmxzLT5nYWlu W0lTQ19ISVNfQ0ZHX01PREVfUl0gfA0KLQkJICAgICAoY3RybHMtPmdhaW5bSVNDX0hJU19DRkdf TU9ERV9HUl0gPDwgMTYpKTsNCi0JcmVnbWFwX3dyaXRlKGlzYy0+cmVnbWFwLCBJU0NfV0JfR19C R0IsDQotCQkgICAgIGN0cmxzLT5nYWluW0lTQ19ISVNfQ0ZHX01PREVfQl0gfA0KLQkJICAgICAo Y3RybHMtPmdhaW5bSVNDX0hJU19DRkdfTU9ERV9HQl0gPDwgMTYpKTsNCi19DQotDQotc3RhdGlj IGlubGluZSB2b2lkIGlzY19yZXNldF9hd2JfY3RybHMoc3RydWN0IGlzY19kZXZpY2UgKmlzYykN Ci17DQotCWludCBjOw0KLQ0KLQlmb3IgKGMgPSBJU0NfSElTX0NGR19NT0RFX0dSOyBjIDw9IElT Q19ISVNfQ0ZHX01PREVfQjsgYysrKSB7DQotCQkvKiBnYWlucyBoYXZlIGEgZml4ZWQgcG9pbnQg YXQgOSBkZWNpbWFscyAqLw0KLQkJaXNjLT5jdHJscy5nYWluW2NdID0gMSA8PCA5Ow0KLQkJLyog b2Zmc2V0cyBhcmUgaW4gMidzIGNvbXBsZW1lbnRzLCB0aGUgdmFsdWUNCi0JCSAqIHdpbGwgYmUg c3Vic3RyYWN0ZWQgZnJvbSBJU0NfV0JfT19aRVJPX1ZBTCB0byBvYnRhaW4NCi0JCSAqIDIncyBj b21wbGVtZW50IG9mIGEgdmFsdWUgYmV0d2VlbiAwIGFuZA0KLQkJICogSVNDX1dCX09fWkVST19W QUwgPj4gMQ0KLQkJICovDQotCQlpc2MtPmN0cmxzLm9mZnNldFtjXSA9IElTQ19XQl9PX1pFUk9f VkFMOw0KLQl9DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3dhaXRfY2xrX3N0YWJsZShzdHJ1Y3Qg Y2xrX2h3ICpodykNCi17DQotCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayho dyk7DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzY19jbGstPnJlZ21hcDsNCi0JdW5zaWdu ZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoMTAwMCk7DQotCXVu c2lnbmVkIGludCBzdGF0dXM7DQotDQotCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1l b3V0KSkgew0KLQkJcmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfQ0xLU1IsICZzdGF0dXMpOw0KLQkJ aWYgKCEoc3RhdHVzICYgSVNDX0NMS1NSX1NJUCkpDQotCQkJcmV0dXJuIDA7DQotDQotCQl1c2xl ZXBfcmFuZ2UoMTAsIDI1MCk7DQotCX0NCi0NCi0JcmV0dXJuIC1FVElNRURPVVQ7DQotfQ0KLQ0K LXN0YXRpYyBpbnQgaXNjX2Nsa19wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQ0KLXsNCi0Jc3Ry dWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCi0NCi0JaWYgKGlzY19jbGst PmlkID09IElTQ19JU1BDSykNCi0JCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNjX2Nsay0+ZGV2KTsN Ci0NCi0JcmV0dXJuIGlzY193YWl0X2Nsa19zdGFibGUoaHcpOw0KLX0NCi0NCi1zdGF0aWMgdm9p ZCBpc2NfY2xrX3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykNCi17DQotCXN0cnVjdCBpc2Nf Y2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQotDQotCWlzY193YWl0X2Nsa19zdGFibGUo aHcpOw0KLQ0KLQlpZiAoaXNjX2Nsay0+aWQgPT0gSVNDX0lTUENLKQ0KLQkJcG1fcnVudGltZV9w dXRfc3luYyhpc2NfY2xrLT5kZXYpOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19jbGtfZW5hYmxl KHN0cnVjdCBjbGtfaHcgKmh3KQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19p c2NfY2xrKGh3KTsNCi0JdTMyIGlkID0gaXNjX2Nsay0+aWQ7DQotCXN0cnVjdCByZWdtYXAgKnJl Z21hcCA9IGlzY19jbGstPnJlZ21hcDsNCi0JdW5zaWduZWQgbG9uZyBmbGFnczsNCi0JdW5zaWdu ZWQgaW50IHN0YXR1czsNCi0NCi0JZGV2X2RiZyhpc2NfY2xrLT5kZXYsICJJU0MgQ0xLOiAlcywg ZGl2ID0gJWQsIHBhcmVudCBpZCA9ICVkXG4iLA0KLQkJX19mdW5jX18sIGlzY19jbGstPmRpdiwg aXNjX2Nsay0+cGFyZW50X2lkKTsNCi0NCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlzY19jbGstPmxv Y2ssIGZsYWdzKTsNCi0JcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgSVNDX0NMS0NGRywNCi0J CQkgICBJU0NfQ0xLQ0ZHX0RJVl9NQVNLKGlkKSB8IElTQ19DTEtDRkdfU0VMX01BU0soaWQpLA0K LQkJCSAgIChpc2NfY2xrLT5kaXYgPDwgSVNDX0NMS0NGR19ESVZfU0hJRlQoaWQpKSB8DQotCQkJ ICAgKGlzY19jbGstPnBhcmVudF9pZCA8PCBJU0NfQ0xLQ0ZHX1NFTF9TSElGVChpZCkpKTsNCi0N Ci0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NMS0VOLCBJU0NfQ0xLKGlkKSk7DQotCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmlzY19jbGstPmxvY2ssIGZsYWdzKTsNCi0NCi0JcmVnbWFwX3Jl YWQocmVnbWFwLCBJU0NfQ0xLU1IsICZzdGF0dXMpOw0KLQlpZiAoc3RhdHVzICYgSVNDX0NMSyhp ZCkpDQotCQlyZXR1cm4gMDsNCi0JZWxzZQ0KLQkJcmV0dXJuIC1FSU5WQUw7DQotfQ0KLQ0KLXN0 YXRpYyB2b2lkIGlzY19jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykNCi17DQotCXN0cnVj dCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQotCXUzMiBpZCA9IGlzY19jbGst PmlkOw0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KLQ0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNj X2Nsay0+bG9jaywgZmxhZ3MpOw0KLQlyZWdtYXBfd3JpdGUoaXNjX2Nsay0+cmVnbWFwLCBJU0Nf Q0xLRElTLCBJU0NfQ0xLKGlkKSk7DQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzY19jbGst PmxvY2ssIGZsYWdzKTsNCi19DQotDQotc3RhdGljIGludCBpc2NfY2xrX2lzX2VuYWJsZWQoc3Ry dWN0IGNsa19odyAqaHcpDQotew0KLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19j bGsoaHcpOw0KLQl1MzIgc3RhdHVzOw0KLQ0KLQlpZiAoaXNjX2Nsay0+aWQgPT0gSVNDX0lTUENL KQ0KLQkJcG1fcnVudGltZV9nZXRfc3luYyhpc2NfY2xrLT5kZXYpOw0KLQ0KLQlyZWdtYXBfcmVh ZChpc2NfY2xrLT5yZWdtYXAsIElTQ19DTEtTUiwgJnN0YXR1cyk7DQotDQotCWlmIChpc2NfY2xr LT5pZCA9PSBJU0NfSVNQQ0spDQotCQlwbV9ydW50aW1lX3B1dF9zeW5jKGlzY19jbGstPmRldik7 DQotDQotCXJldHVybiBzdGF0dXMgJiBJU0NfQ0xLKGlzY19jbGstPmlkKSA/IDEgOiAwOw0KLX0N Ci0NCi1zdGF0aWMgdW5zaWduZWQgbG9uZw0KLWlzY19jbGtfcmVjYWxjX3JhdGUoc3RydWN0IGNs a19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpDQotew0KLQlzdHJ1Y3QgaXNjX2Ns ayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KLQ0KLQlyZXR1cm4gRElWX1JPVU5EX0NMT1NF U1QocGFyZW50X3JhdGUsIGlzY19jbGstPmRpdiArIDEpOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlz Y19jbGtfZGV0ZXJtaW5lX3JhdGUoc3RydWN0IGNsa19odyAqaHcsDQotCQkJCSAgIHN0cnVjdCBj bGtfcmF0ZV9yZXF1ZXN0ICpyZXEpDQotew0KLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRv X2lzY19jbGsoaHcpOw0KLQlsb25nIGJlc3RfcmF0ZSA9IC1FSU5WQUw7DQotCWludCBiZXN0X2Rp ZmYgPSAtMTsNCi0JdW5zaWduZWQgaW50IGksIGRpdjsNCi0NCi0JZm9yIChpID0gMDsgaSA8IGNs a19od19nZXRfbnVtX3BhcmVudHMoaHcpOyBpKyspIHsNCi0JCXN0cnVjdCBjbGtfaHcgKnBhcmVu dDsNCi0JCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7DQotDQotCQlwYXJlbnQgPSBjbGtfaHdf Z2V0X3BhcmVudF9ieV9pbmRleChodywgaSk7DQotCQlpZiAoIXBhcmVudCkNCi0JCQljb250aW51 ZTsNCi0NCi0JCXBhcmVudF9yYXRlID0gY2xrX2h3X2dldF9yYXRlKHBhcmVudCk7DQotCQlpZiAo IXBhcmVudF9yYXRlKQ0KLQkJCWNvbnRpbnVlOw0KLQ0KLQkJZm9yIChkaXYgPSAxOyBkaXYgPCBJ U0NfQ0xLX01BWF9ESVYgKyAyOyBkaXYrKykgew0KLQkJCXVuc2lnbmVkIGxvbmcgcmF0ZTsNCi0J CQlpbnQgZGlmZjsNCi0NCi0JCQlyYXRlID0gRElWX1JPVU5EX0NMT1NFU1QocGFyZW50X3JhdGUs IGRpdik7DQotCQkJZGlmZiA9IGFicyhyZXEtPnJhdGUgLSByYXRlKTsNCi0NCi0JCQlpZiAoYmVz dF9kaWZmIDwgMCB8fCBiZXN0X2RpZmYgPiBkaWZmKSB7DQotCQkJCWJlc3RfcmF0ZSA9IHJhdGU7 DQotCQkJCWJlc3RfZGlmZiA9IGRpZmY7DQotCQkJCXJlcS0+YmVzdF9wYXJlbnRfcmF0ZSA9IHBh cmVudF9yYXRlOw0KLQkJCQlyZXEtPmJlc3RfcGFyZW50X2h3ID0gcGFyZW50Ow0KLQkJCX0NCi0N Ci0JCQlpZiAoIWJlc3RfZGlmZiB8fCByYXRlIDwgcmVxLT5yYXRlKQ0KLQkJCQlicmVhazsNCi0J CX0NCi0NCi0JCWlmICghYmVzdF9kaWZmKQ0KLQkJCWJyZWFrOw0KLQl9DQotDQotCWRldl9kYmco aXNjX2Nsay0+ZGV2LA0KLQkJIklTQyBDTEs6ICVzLCBiZXN0X3JhdGUgPSAlbGQsIHBhcmVudCBj bGs6ICVzIEAgJWxkXG4iLA0KLQkJX19mdW5jX18sIGJlc3RfcmF0ZSwNCi0JCV9fY2xrX2dldF9u YW1lKChyZXEtPmJlc3RfcGFyZW50X2h3KS0+Y2xrKSwNCi0JCXJlcS0+YmVzdF9wYXJlbnRfcmF0 ZSk7DQotDQotCWlmIChiZXN0X3JhdGUgPCAwKQ0KLQkJcmV0dXJuIGJlc3RfcmF0ZTsNCi0NCi0J cmVxLT5yYXRlID0gYmVzdF9yYXRlOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGlu dCBpc2NfY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsIHU4IGluZGV4KQ0KLXsNCi0J c3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCi0NCi0JaWYgKGluZGV4 ID49IGNsa19od19nZXRfbnVtX3BhcmVudHMoaHcpKQ0KLQkJcmV0dXJuIC1FSU5WQUw7DQotDQot CWlzY19jbGstPnBhcmVudF9pZCA9IGluZGV4Ow0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3Rh dGljIHU4IGlzY19jbGtfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodykNCi17DQotCXN0cnVj dCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQotDQotCXJldHVybiBpc2NfY2xr LT5wYXJlbnRfaWQ7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2Nsa19zZXRfcmF0ZShzdHJ1Y3Qg Y2xrX2h3ICpodywNCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSwNCi0JCQkgICAgIHVuc2ln bmVkIGxvbmcgcGFyZW50X3JhdGUpDQotew0KLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRv X2lzY19jbGsoaHcpOw0KLQl1MzIgZGl2Ow0KLQ0KLQlpZiAoIXJhdGUpDQotCQlyZXR1cm4gLUVJ TlZBTDsNCi0NCi0JZGl2ID0gRElWX1JPVU5EX0NMT1NFU1QocGFyZW50X3JhdGUsIHJhdGUpOw0K LQlpZiAoZGl2ID4gKElTQ19DTEtfTUFYX0RJViArIDEpIHx8ICFkaXYpDQotCQlyZXR1cm4gLUVJ TlZBTDsNCi0NCi0JaXNjX2Nsay0+ZGl2ID0gZGl2IC0gMTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0K LQ0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBpc2NfY2xrX29wcyA9IHsNCi0JLnByZXBh cmUJPSBpc2NfY2xrX3ByZXBhcmUsDQotCS51bnByZXBhcmUJPSBpc2NfY2xrX3VucHJlcGFyZSwN Ci0JLmVuYWJsZQkJPSBpc2NfY2xrX2VuYWJsZSwNCi0JLmRpc2FibGUJPSBpc2NfY2xrX2Rpc2Fi bGUsDQotCS5pc19lbmFibGVkCT0gaXNjX2Nsa19pc19lbmFibGVkLA0KLQkucmVjYWxjX3JhdGUJ PSBpc2NfY2xrX3JlY2FsY19yYXRlLA0KLQkuZGV0ZXJtaW5lX3JhdGUJPSBpc2NfY2xrX2RldGVy bWluZV9yYXRlLA0KLQkuc2V0X3BhcmVudAk9IGlzY19jbGtfc2V0X3BhcmVudCwNCi0JLmdldF9w YXJlbnQJPSBpc2NfY2xrX2dldF9wYXJlbnQsDQotCS5zZXRfcmF0ZQk9IGlzY19jbGtfc2V0X3Jh dGUsDQotfTsNCi0NCi1zdGF0aWMgaW50IGlzY19jbGtfcmVnaXN0ZXIoc3RydWN0IGlzY19kZXZp Y2UgKmlzYywgdW5zaWduZWQgaW50IGlkKQ0KLXsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0g aXNjLT5yZWdtYXA7DQotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBpc2MtPmRldi0+b2Zfbm9k ZTsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGs7DQotCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGlu aXQ7DQotCWNvbnN0IGNoYXIgKmNsa19uYW1lID0gbnAtPm5hbWU7DQotCWNvbnN0IGNoYXIgKnBh cmVudF9uYW1lc1szXTsNCi0JaW50IG51bV9wYXJlbnRzOw0KLQ0KLQludW1fcGFyZW50cyA9IG9m X2Nsa19nZXRfcGFyZW50X2NvdW50KG5wKTsNCi0JaWYgKG51bV9wYXJlbnRzIDwgMSB8fCBudW1f cGFyZW50cyA+IDMpDQotCQlyZXR1cm4gLUVJTlZBTDsNCi0NCi0JaWYgKG51bV9wYXJlbnRzID4g MiAmJiBpZCA9PSBJU0NfSVNQQ0spDQotCQludW1fcGFyZW50cyA9IDI7DQotDQotCW9mX2Nsa19w YXJlbnRfZmlsbChucCwgcGFyZW50X25hbWVzLCBudW1fcGFyZW50cyk7DQotDQotCWlmIChpZCA9 PSBJU0NfTUNLKQ0KLQkJb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICJjbG9jay1vdXRwdXQt bmFtZXMiLCAmY2xrX25hbWUpOw0KLQllbHNlDQotCQljbGtfbmFtZSA9ICJpc2MtaXNwY2siOw0K LQ0KLQlpbml0LnBhcmVudF9uYW1lcwk9IHBhcmVudF9uYW1lczsNCi0JaW5pdC5udW1fcGFyZW50 cwk9IG51bV9wYXJlbnRzOw0KLQlpbml0Lm5hbWUJCT0gY2xrX25hbWU7DQotCWluaXQub3BzCQk9 ICZpc2NfY2xrX29wczsNCi0JaW5pdC5mbGFncwkJPSBDTEtfU0VUX1JBVEVfR0FURSB8IENMS19T RVRfUEFSRU5UX0dBVEU7DQotDQotCWlzY19jbGsgPSAmaXNjLT5pc2NfY2xrc1tpZF07DQotCWlz Y19jbGstPmh3LmluaXQJPSAmaW5pdDsNCi0JaXNjX2Nsay0+cmVnbWFwCQk9IHJlZ21hcDsNCi0J aXNjX2Nsay0+aWQJCT0gaWQ7DQotCWlzY19jbGstPmRldgkJPSBpc2MtPmRldjsNCi0Jc3Bpbl9s b2NrX2luaXQoJmlzY19jbGstPmxvY2spOw0KLQ0KLQlpc2NfY2xrLT5jbGsgPSBjbGtfcmVnaXN0 ZXIoaXNjLT5kZXYsICZpc2NfY2xrLT5odyk7DQotCWlmIChJU19FUlIoaXNjX2Nsay0+Y2xrKSkg ew0KLQkJZGV2X2Vycihpc2MtPmRldiwgIiVzOiBjbG9jayByZWdpc3RlciBmYWlsXG4iLCBjbGtf bmFtZSk7DQotCQlyZXR1cm4gUFRSX0VSUihpc2NfY2xrLT5jbGspOw0KLQl9IGVsc2UgaWYgKGlk ID09IElTQ19NQ0spDQotCQlvZl9jbGtfYWRkX3Byb3ZpZGVyKG5wLCBvZl9jbGtfc3JjX3NpbXBs ZV9nZXQsIGlzY19jbGstPmNsayk7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50 IGlzY19jbGtfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0JdW5zaWduZWQgaW50 IGk7DQotCWludCByZXQ7DQotDQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlzYy0+aXNj X2Nsa3MpOyBpKyspDQotCQlpc2MtPmlzY19jbGtzW2ldLmNsayA9IEVSUl9QVFIoLUVJTlZBTCk7 DQotDQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlzYy0+aXNjX2Nsa3MpOyBpKyspIHsN Ci0JCXJldCA9IGlzY19jbGtfcmVnaXN0ZXIoaXNjLCBpKTsNCi0JCWlmIChyZXQpDQotCQkJcmV0 dXJuIHJldDsNCi0JfQ0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIHZvaWQgaXNjX2Ns a19jbGVhbnVwKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0KLQl1bnNpZ25lZCBpbnQgaTsN Ci0NCi0Jb2ZfY2xrX2RlbF9wcm92aWRlcihpc2MtPmRldi0+b2Zfbm9kZSk7DQotDQotCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlzYy0+aXNjX2Nsa3MpOyBpKyspIHsNCi0JCXN0cnVjdCBp c2NfY2xrICppc2NfY2xrID0gJmlzYy0+aXNjX2Nsa3NbaV07DQotDQotCQlpZiAoIUlTX0VSUihp c2NfY2xrLT5jbGspKQ0KLQkJCWNsa191bnJlZ2lzdGVyKGlzY19jbGstPmNsayk7DQotCX0NCi19 DQotDQotc3RhdGljIGludCBpc2NfcXVldWVfc2V0dXAoc3RydWN0IHZiMl9xdWV1ZSAqdnEsDQot CQkJICAgIHVuc2lnbmVkIGludCAqbmJ1ZmZlcnMsIHVuc2lnbmVkIGludCAqbnBsYW5lcywNCi0J CQkgICAgdW5zaWduZWQgaW50IHNpemVzW10sIHN0cnVjdCBkZXZpY2UgKmFsbG9jX2RldnNbXSkN Ci17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsNCi0J dW5zaWduZWQgaW50IHNpemUgPSBpc2MtPmZtdC5mbXQucGl4LnNpemVpbWFnZTsNCi0NCi0JaWYg KCpucGxhbmVzKQ0KLQkJcmV0dXJuIHNpemVzWzBdIDwgc2l6ZSA/IC1FSU5WQUwgOiAwOw0KLQ0K LQkqbnBsYW5lcyA9IDE7DQotCXNpemVzWzBdID0gc2l6ZTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0K LQ0KLXN0YXRpYyBpbnQgaXNjX2J1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikN Ci17DQotCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZidWYgPSB0b192YjJfdjRsMl9idWZmZXIo dmIpOw0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIy X3F1ZXVlKTsNCi0JdW5zaWduZWQgbG9uZyBzaXplID0gaXNjLT5mbXQuZm10LnBpeC5zaXplaW1h Z2U7DQotDQotCWlmICh2YjJfcGxhbmVfc2l6ZSh2YiwgMCkgPCBzaXplKSB7DQotCQl2NGwyX2Vy cigmaXNjLT52NGwyX2RldiwgImJ1ZmZlciB0b28gc21hbGwgKCVsdSA8ICVsdSlcbiIsDQotCQkJ IHZiMl9wbGFuZV9zaXplKHZiLCAwKSwgc2l6ZSk7DQotCQlyZXR1cm4gLUVJTlZBTDsNCi0JfQ0K LQ0KLQl2YjJfc2V0X3BsYW5lX3BheWxvYWQodmIsIDAsIHNpemUpOw0KLQ0KLQl2YnVmLT5maWVs ZCA9IGlzYy0+Zm10LmZtdC5waXguZmllbGQ7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0 aWMgdm9pZCBpc2Nfc3RhcnRfZG1hKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0KLQlzdHJ1 Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCi0JdTMyIHNpemVpbWFnZSA9IGlzYy0+ Zm10LmZtdC5waXguc2l6ZWltYWdlOw0KLQl1MzIgZGN0cmxfZHZpZXc7DQotCWRtYV9hZGRyX3Qg YWRkcjA7DQotCXUzMiBoLCB3Ow0KLQ0KLQloID0gaXNjLT5mbXQuZm10LnBpeC5oZWlnaHQ7DQot CXcgPSBpc2MtPmZtdC5mbXQucGl4LndpZHRoOw0KLQ0KLQkvKg0KLQkgKiBJbiBjYXNlIHRoZSBz ZW5zb3IgaXMgbm90IFJBVywgaXQgd2lsbCBvdXRwdXQgYSBwaXhlbCAoMTItMTYgYml0cykNCi0J ICogd2l0aCB0d28gc2FtcGxlcyBvbiB0aGUgSVNDIERhdGEgYnVzICh3aGljaCBpcyA4LTEyKQ0K LQkgKiBJU0Mgd2lsbCBjb3VudCBlYWNoIHNhbXBsZSwgc28sIHdlIG5lZWQgdG8gbXVsdGlwbHkg dGhlc2UgdmFsdWVzDQotCSAqIGJ5IHR3bywgdG8gZ2V0IHRoZSByZWFsIG51bWJlciBvZiBzYW1w bGVzIGZvciB0aGUgcmVxdWlyZWQgcGl4ZWxzLg0KLQkgKi8NCi0JaWYgKCFJU0NfSVNfRk9STUFU X1JBVyhpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCi0JCWggPDw9IDE7DQot CQl3IDw8PSAxOw0KLQl9DQotDQotCS8qDQotCSAqIFdlIGxpbWl0IHRoZSBjb2x1bW4vcm93IGNv dW50IHRoYXQgdGhlIElTQyB3aWxsIG91dHB1dCBhY2NvcmRpbmcNCi0JICogdG8gdGhlIGNvbmZp Z3VyZWQgcmVzb2x1dGlvbiB0aGF0IHdlIHdhbnQuDQotCSAqIFRoaXMgd2lsbCBhdm9pZCB0aGUg c2l0dWF0aW9uIHdoZXJlIHRoZSBzZW5zb3IgaXMgbWlzY29uZmlndXJlZCwNCi0JICogc2VuZGlu ZyBtb3JlIGRhdGEsIGFuZCB0aGUgSVNDIHdpbGwganVzdCB0YWtlIGl0IGFuZCBETUEgdG8gbWVt b3J5LA0KLQkgKiBjYXVzaW5nIGNvcnJ1cHRpb24uDQotCSAqLw0KLQlyZWdtYXBfd3JpdGUocmVn bWFwLCBJU0NfUEZFX0NGRzEsDQotCQkgICAgIChJU0NfUEZFX0NGRzFfQ09MTUlOKDApICYgSVND X1BGRV9DRkcxX0NPTE1JTl9NQVNLKSB8DQotCQkgICAgIChJU0NfUEZFX0NGRzFfQ09MTUFYKHcg LSAxKSAmIElTQ19QRkVfQ0ZHMV9DT0xNQVhfTUFTSykpOw0KLQ0KLQlyZWdtYXBfd3JpdGUocmVn bWFwLCBJU0NfUEZFX0NGRzIsDQotCQkgICAgIChJU0NfUEZFX0NGRzJfUk9XTUlOKDApICYgSVND X1BGRV9DRkcyX1JPV01JTl9NQVNLKSB8DQotCQkgICAgIChJU0NfUEZFX0NGRzJfUk9XTUFYKGgg LSAxKSAmIElTQ19QRkVfQ0ZHMl9ST1dNQVhfTUFTSykpOw0KLQ0KLQlyZWdtYXBfdXBkYXRlX2Jp dHMocmVnbWFwLCBJU0NfUEZFX0NGRzAsDQotCQkJICAgSVNDX1BGRV9DRkcwX0NPTEVOIHwgSVND X1BGRV9DRkcwX1JPV0VOLA0KLQkJCSAgIElTQ19QRkVfQ0ZHMF9DT0xFTiB8IElTQ19QRkVfQ0ZH MF9ST1dFTik7DQotDQotCWFkZHIwID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIoJmlz Yy0+Y3VyX2ZybS0+dmIudmIyX2J1ZiwgMCk7DQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19E QUQwLCBhZGRyMCk7DQotDQotCXN3aXRjaCAoaXNjLT5jb25maWcuZm91cmNjKSB7DQotCWNhc2Ug VjRMMl9QSVhfRk1UX1lVVjQyMDoNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQUQxLCBh ZGRyMCArIChzaXplaW1hZ2UgKiAyKSAvIDMpOw0KLQkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVND X0RBRDIsIGFkZHIwICsgKHNpemVpbWFnZSAqIDUpIC8gNik7DQotCQlicmVhazsNCi0JY2FzZSBW NEwyX1BJWF9GTVRfWVVWNDIyUDoNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQUQxLCBh ZGRyMCArIHNpemVpbWFnZSAvIDIpOw0KLQkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDIs IGFkZHIwICsgKHNpemVpbWFnZSAqIDMpIC8gNCk7DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0J CWJyZWFrOw0KLQl9DQotDQotCWRjdHJsX2R2aWV3ID0gaXNjLT5jb25maWcuZGN0cmxfZHZpZXc7 DQotDQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQ1RSTCwgZGN0cmxfZHZpZXcgfCBJU0Nf RENUUkxfSUVfSVMpOw0KLQlzcGluX2xvY2soJmlzYy0+YXdiX2xvY2spOw0KLQlyZWdtYXBfd3Jp dGUocmVnbWFwLCBJU0NfQ1RSTEVOLCBJU0NfQ1RSTF9DQVBUVVJFKTsNCi0Jc3Bpbl91bmxvY2so JmlzYy0+YXdiX2xvY2spOw0KLX0NCi0NCi1zdGF0aWMgdm9pZCBpc2Nfc2V0X3BpcGVsaW5lKHN0 cnVjdCBpc2NfZGV2aWNlICppc2MsIHUzMiBwaXBlbGluZSkNCi17DQotCXN0cnVjdCByZWdtYXAg KnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KLQlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2Mt PmN0cmxzOw0KLQl1MzIgdmFsLCBiYXlfY2ZnOw0KLQljb25zdCB1MzIgKmdhbW1hOw0KLQl1bnNp Z25lZCBpbnQgaTsNCi0NCi0JLyogV0ItLT5DRkEtLT5DQy0tPkdBTS0tPkNTQy0tPkNCQy0tPlNV QjQyMi0tPlNVQjQyMCAqLw0KLQlmb3IgKGkgPSAwOyBpIDwgSVNDX1BJUEVfTElORV9OT0RFX05V TTsgaSsrKSB7DQotCQl2YWwgPSBwaXBlbGluZSAmIEJJVChpKSA/IDEgOiAwOw0KLQkJcmVnbWFw X2ZpZWxkX3dyaXRlKGlzYy0+cGlwZWxpbmVbaV0sIHZhbCk7DQotCX0NCi0NCi0JaWYgKCFwaXBl bGluZSkNCi0JCXJldHVybjsNCi0NCi0JYmF5X2NmZyA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+ Y2ZhX2JheWNmZzsNCi0NCi0JaWYgKGN0cmxzLT5hd2IgPT0gSVNDX1dCX05PTkUpDQotCQlpc2Nf cmVzZXRfYXdiX2N0cmxzKGlzYyk7DQotDQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19XQl9D RkcsIGJheV9jZmcpOw0KLQlpc2NfdXBkYXRlX2F3Yl9jdHJscyhpc2MpOw0KLQ0KLQlyZWdtYXBf d3JpdGUocmVnbWFwLCBJU0NfQ0ZBX0NGRywgYmF5X2NmZyB8IElTQ19DRkFfQ0ZHX0VJVFBPTCk7 DQotDQotCWdhbW1hID0gJmlzY19nYW1tYV90YWJsZVtjdHJscy0+Z2FtbWFfaW5kZXhdWzBdOw0K LQlyZWdtYXBfYnVsa193cml0ZShyZWdtYXAsIElTQ19HQU1fQkVOVFJZLCBnYW1tYSwgR0FNTUFf RU5UUklFUyk7DQotCXJlZ21hcF9idWxrX3dyaXRlKHJlZ21hcCwgSVNDX0dBTV9HRU5UUlksIGdh bW1hLCBHQU1NQV9FTlRSSUVTKTsNCi0JcmVnbWFwX2J1bGtfd3JpdGUocmVnbWFwLCBJU0NfR0FN X1JFTlRSWSwgZ2FtbWEsIEdBTU1BX0VOVFJJRVMpOw0KLQ0KLQkvKiBDb252ZXJ0IFJHQiB0byBZ VVYgKi8NCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19ZUl9ZRywgMHg0MiB8ICgweDgx IDw8IDE2KSk7DQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfWUJfT1ksIDB4MTkgfCAo MHgxMCA8PCAxNikpOw0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX0NCUl9DQkcsIDB4 RkRBIHwgKDB4RkI2IDw8IDE2KSk7DQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ0JC X09DQiwgMHg3MCB8ICgweDgwIDw8IDE2KSk7DQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19D U0NfQ1JSX0NSRywgMHg3MCB8ICgweEZBMiA8PCAxNikpOw0KLQlyZWdtYXBfd3JpdGUocmVnbWFw LCBJU0NfQ1NDX0NSQl9PQ1IsIDB4RkVFIHwgKDB4ODAgPDwgMTYpKTsNCi0NCi0JcmVnbWFwX3dy aXRlKHJlZ21hcCwgSVNDX0NCQ19CUklHSFQsIGN0cmxzLT5icmlnaHRuZXNzKTsNCi0JcmVnbWFw X3dyaXRlKHJlZ21hcCwgSVNDX0NCQ19DT05UUkFTVCwgY3RybHMtPmNvbnRyYXN0KTsNCi19DQot DQotc3RhdGljIGludCBpc2NfdXBkYXRlX3Byb2ZpbGUoc3RydWN0IGlzY19kZXZpY2UgKmlzYykN Ci17DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KLQl1MzIgc3I7DQot CWludCBjb3VudGVyID0gMTAwOw0KLQ0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1RSTEVO LCBJU0NfQ1RSTF9VUFBSTyk7DQotDQotCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NUUkxTUiwg JnNyKTsNCi0Jd2hpbGUgKChzciAmIElTQ19DVFJMX1VQUFJPKSAmJiBjb3VudGVyLS0pIHsNCi0J CXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsNCi0JCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NU UkxTUiwgJnNyKTsNCi0JfQ0KLQ0KLQlpZiAoY291bnRlciA8IDApIHsNCi0JCXY0bDJfd2Fybigm aXNjLT52NGwyX2RldiwgIlRpbWUgb3V0IHRvIHVwZGF0ZSBwcm9maWxlXG4iKTsNCi0JCXJldHVy biAtRVRJTUVET1VUOw0KLQl9DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgdm9pZCBp c2Nfc2V0X2hpc3RvZ3JhbShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCBib29sIGVuYWJsZSkNCi17 DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KLQlzdHJ1Y3QgaXNjX2N0 cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KLQ0KLQlpZiAoZW5hYmxlKSB7DQotCQlyZWdtYXBf d3JpdGUocmVnbWFwLCBJU0NfSElTX0NGRywNCi0JCQkgICAgIElTQ19ISVNfQ0ZHX01PREVfR1Ig fA0KLQkJCSAgICAgKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+Y2ZhX2JheWNmZw0KLQkJCQkJPDwg SVNDX0hJU19DRkdfQkFZU0VMX1NISUZUKSB8DQotCQkJCQlJU0NfSElTX0NGR19SQVIpOw0KLQkJ cmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0hJU19DVFJMLCBJU0NfSElTX0NUUkxfRU4pOw0KLQkJ cmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0lOVEVOLCBJU0NfSU5UX0hJU0RPTkUpOw0KLQkJY3Ry bHMtPmhpc3RfaWQgPSBJU0NfSElTX0NGR19NT0RFX0dSOw0KLQkJaXNjX3VwZGF0ZV9wcm9maWxl KGlzYyk7DQotCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1RSTEVOLCBJU0NfQ1RSTF9ISVNS RVEpOw0KLQ0KLQkJY3RybHMtPmhpc3Rfc3RhdCA9IEhJU1RfRU5BQkxFRDsNCi0JfSBlbHNlIHsN Ci0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19JTlRESVMsIElTQ19JTlRfSElTRE9ORSk7DQot CQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSElTX0NUUkwsIElTQ19ISVNfQ1RSTF9ESVMpOw0K LQ0KLQkJY3RybHMtPmhpc3Rfc3RhdCA9IEhJU1RfRElTQUJMRUQ7DQotCX0NCi19DQotDQotc3Rh dGljIGludCBpc2NfY29uZmlndXJlKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0KLQlzdHJ1 Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCi0JdTMyIHBmZV9jZmcwLCBybHBfbW9k ZSwgZGNmZywgbWFzaywgcGlwZWxpbmU7DQotCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAqc3Vi ZGV2ID0gaXNjLT5jdXJyZW50X3N1YmRldjsNCi0NCi0JcGZlX2NmZzAgPSBpc2MtPmNvbmZpZy5z ZF9mb3JtYXQtPnBmZV9jZmcwX2JwczsNCi0JcmxwX21vZGUgPSBpc2MtPmNvbmZpZy5ybHBfY2Zn X21vZGU7DQotCXBpcGVsaW5lID0gaXNjLT5jb25maWcuYml0c19waXBlbGluZTsNCi0NCi0JZGNm ZyA9IGlzYy0+Y29uZmlnLmRjZmdfaW1vZGUgfA0KLQkJICAgICAgIElTQ19EQ0ZHX1lNQlNJWkVf QkVBVFM4IHwgSVNDX0RDRkdfQ01CU0laRV9CRUFUUzg7DQotDQotCXBmZV9jZmcwICB8PSBzdWJk ZXYtPnBmZV9jZmcwIHwgSVNDX1BGRV9DRkcwX01PREVfUFJPR1JFU1NJVkU7DQotCW1hc2sgPSBJ U0NfUEZFX0NGRzBfQlBTX01BU0sgfCBJU0NfUEZFX0NGRzBfSFBPTF9MT1cgfA0KLQkgICAgICAg SVNDX1BGRV9DRkcwX1ZQT0xfTE9XIHwgSVNDX1BGRV9DRkcwX1BQT0xfTE9XIHwNCi0JICAgICAg IElTQ19QRkVfQ0ZHMF9NT0RFX01BU0sgfCBJU0NfUEZFX0NGRzBfQ0NJUl9DUkMgfA0KLQkJICAg SVNDX1BGRV9DRkcwX0NDSVI2NTY7DQotDQotCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElT Q19QRkVfQ0ZHMCwgbWFzaywgcGZlX2NmZzApOw0KLQ0KLQlyZWdtYXBfdXBkYXRlX2JpdHMocmVn bWFwLCBJU0NfUkxQX0NGRywgSVNDX1JMUF9DRkdfTU9ERV9NQVNLLA0KLQkJCSAgIHJscF9tb2Rl KTsNCi0NCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RDRkcsIGRjZmcpOw0KLQ0KLQkvKiBT ZXQgdGhlIHBpcGVsaW5lICovDQotCWlzY19zZXRfcGlwZWxpbmUoaXNjLCBwaXBlbGluZSk7DQot DQotCS8qDQotCSAqIFRoZSBjdXJyZW50IGltcGxlbWVudGVkIGhpc3RvZ3JhbSBpcyBhdmFpbGFi bGUgZm9yIFJBVyBSLCBCLCBHQiwgR1INCi0JICogY2hhbm5lbHMuIFdlIG5lZWQgdG8gY2hlY2sg aWYgc2Vuc29yIGlzIG91dHB1dHRpbmcgUkFXIEJBWUVSDQotCSAqLw0KLQlpZiAoaXNjLT5jdHJs cy5hd2IgJiYNCi0JICAgIElTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+ bWJ1c19jb2RlKSkNCi0JCWlzY19zZXRfaGlzdG9ncmFtKGlzYywgdHJ1ZSk7DQotCWVsc2UNCi0J CWlzY19zZXRfaGlzdG9ncmFtKGlzYywgZmFsc2UpOw0KLQ0KLQkvKiBVcGRhdGUgcHJvZmlsZSAq Lw0KLQlyZXR1cm4gaXNjX3VwZGF0ZV9wcm9maWxlKGlzYyk7DQotfQ0KLQ0KLXN0YXRpYyBpbnQg aXNjX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50IGNv dW50KQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodnEp Ow0KLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCi0Jc3RydWN0IGlzY19i dWZmZXIgKmJ1ZjsNCi0JdW5zaWduZWQgbG9uZyBmbGFnczsNCi0JaW50IHJldDsNCi0NCi0JLyog RW5hYmxlIHN0cmVhbSBvbiB0aGUgc3ViIGRldmljZSAqLw0KLQlyZXQgPSB2NGwyX3N1YmRldl9j YWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCB2aWRlbywgc19zdHJlYW0sIDEpOw0KLQlpZiAo cmV0ICYmIHJldCAhPSAtRU5PSU9DVExDTUQpIHsNCi0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2 LCAic3RyZWFtIG9uIGZhaWxlZCBpbiBzdWJkZXYgJWRcbiIsDQotCQkJIHJldCk7DQotCQlnb3Rv IGVycl9zdGFydF9zdHJlYW07DQotCX0NCi0NCi0JcG1fcnVudGltZV9nZXRfc3luYyhpc2MtPmRl dik7DQotDQotCXJldCA9IGlzY19jb25maWd1cmUoaXNjKTsNCi0JaWYgKHVubGlrZWx5KHJldCkp DQotCQlnb3RvIGVycl9jb25maWd1cmU7DQotDQotCS8qIEVuYWJsZSBETUEgaW50ZXJydXB0ICov DQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19JTlRFTiwgSVNDX0lOVF9ERE9ORSk7DQotDQot CXNwaW5fbG9ja19pcnFzYXZlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQotDQotCWlz Yy0+c2VxdWVuY2UgPSAwOw0KLQlpc2MtPnN0b3AgPSBmYWxzZTsNCi0JcmVpbml0X2NvbXBsZXRp b24oJmlzYy0+Y29tcCk7DQotDQotCWlzYy0+Y3VyX2ZybSA9IGxpc3RfZmlyc3RfZW50cnkoJmlz Yy0+ZG1hX3F1ZXVlLA0KLQkJCQkJc3RydWN0IGlzY19idWZmZXIsIGxpc3QpOw0KLQlsaXN0X2Rl bCgmaXNjLT5jdXJfZnJtLT5saXN0KTsNCi0NCi0JaXNjX3N0YXJ0X2RtYShpc2MpOw0KLQ0KLQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQotDQot CS8qIGlmIHdlIHN0cmVhbWluZyBmcm9tIFJBVywgd2UgY2FuIGRvIG9uZS1zaG90IHdoaXRlIGJh bGFuY2UgYWRqICovDQotCWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2MtPmNvbmZpZy5zZF9mb3Jt YXQtPm1idXNfY29kZSkpDQotCQl2NGwyX2N0cmxfYWN0aXZhdGUoaXNjLT5kb193Yl9jdHJsLCB0 cnVlKTsNCi0NCi0JcmV0dXJuIDA7DQotDQotZXJyX2NvbmZpZ3VyZToNCi0JcG1fcnVudGltZV9w dXRfc3luYyhpc2MtPmRldik7DQotDQotCXY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1 YmRldi0+c2QsIHZpZGVvLCBzX3N0cmVhbSwgMCk7DQotDQotZXJyX3N0YXJ0X3N0cmVhbToNCi0J c3Bpbl9sb2NrX2lycXNhdmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCi0JbGlzdF9m b3JfZWFjaF9lbnRyeShidWYsICZpc2MtPmRtYV9xdWV1ZSwgbGlzdCkNCi0JCXZiMl9idWZmZXJf ZG9uZSgmYnVmLT52Yi52YjJfYnVmLCBWQjJfQlVGX1NUQVRFX1FVRVVFRCk7DQotCUlOSVRfTElT VF9IRUFEKCZpc2MtPmRtYV9xdWV1ZSk7DQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzYy0+ ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCi0NCi0JcmV0dXJuIHJldDsNCi19DQotDQotc3RhdGlj IHZvaWQgaXNjX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxKQ0KLXsNCi0Jc3Ry dWN0IGlzY19kZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOw0KLQl1bnNpZ25lZCBs b25nIGZsYWdzOw0KLQlzdHJ1Y3QgaXNjX2J1ZmZlciAqYnVmOw0KLQlpbnQgcmV0Ow0KLQ0KLQl2 NGwyX2N0cmxfYWN0aXZhdGUoaXNjLT5kb193Yl9jdHJsLCBmYWxzZSk7DQotDQotCWlzYy0+c3Rv cCA9IHRydWU7DQotDQotCS8qIFdhaXQgdW50aWwgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBmcmFt ZSAqLw0KLQlpZiAoaXNjLT5jdXJfZnJtICYmICF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQo JmlzYy0+Y29tcCwgNSAqIEhaKSkNCi0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KLQkJCSAi VGltZW91dCB3YWl0aW5nIGZvciBlbmQgb2YgdGhlIGNhcHR1cmVcbiIpOw0KLQ0KLQkvKiBEaXNh YmxlIERNQSBpbnRlcnJ1cHQgKi8NCi0JcmVnbWFwX3dyaXRlKGlzYy0+cmVnbWFwLCBJU0NfSU5U RElTLCBJU0NfSU5UX0RET05FKTsNCi0NCi0JcG1fcnVudGltZV9wdXRfc3luYyhpc2MtPmRldik7 DQotDQotCS8qIERpc2FibGUgc3RyZWFtIG9uIHRoZSBzdWIgZGV2aWNlICovDQotCXJldCA9IHY0 bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHZpZGVvLCBzX3N0cmVhbSwg MCk7DQotCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9JT0NUTENNRCkNCi0JCXY0bDJfZXJyKCZpc2Mt PnY0bDJfZGV2LCAic3RyZWFtIG9mZiBmYWlsZWQgaW4gc3ViZGV2XG4iKTsNCi0NCi0JLyogUmVs ZWFzZSBhbGwgYWN0aXZlIGJ1ZmZlcnMgKi8NCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlzYy0+ZG1h X3F1ZXVlX2xvY2ssIGZsYWdzKTsNCi0JaWYgKHVubGlrZWx5KGlzYy0+Y3VyX2ZybSkpIHsNCi0J CXZiMl9idWZmZXJfZG9uZSgmaXNjLT5jdXJfZnJtLT52Yi52YjJfYnVmLA0KLQkJCQlWQjJfQlVG X1NUQVRFX0VSUk9SKTsNCi0JCWlzYy0+Y3VyX2ZybSA9IE5VTEw7DQotCX0NCi0JbGlzdF9mb3Jf ZWFjaF9lbnRyeShidWYsICZpc2MtPmRtYV9xdWV1ZSwgbGlzdCkNCi0JCXZiMl9idWZmZXJfZG9u ZSgmYnVmLT52Yi52YjJfYnVmLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsNCi0JSU5JVF9MSVNUX0hF QUQoJmlzYy0+ZG1hX3F1ZXVlKTsNCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFf cXVldWVfbG9jaywgZmxhZ3MpOw0KLX0NCi0NCi1zdGF0aWMgdm9pZCBpc2NfYnVmZmVyX3F1ZXVl KHN0cnVjdCB2YjJfYnVmZmVyICp2YikNCi17DQotCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZi dWYgPSB0b192YjJfdjRsMl9idWZmZXIodmIpOw0KLQlzdHJ1Y3QgaXNjX2J1ZmZlciAqYnVmID0g Y29udGFpbmVyX29mKHZidWYsIHN0cnVjdCBpc2NfYnVmZmVyLCB2Yik7DQotCXN0cnVjdCBpc2Nf ZGV2aWNlICppc2MgPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOw0KLQl1bnNpZ25l ZCBsb25nIGZsYWdzOw0KLQ0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5kbWFfcXVldWVfbG9j aywgZmxhZ3MpOw0KLQlpZiAoIWlzYy0+Y3VyX2ZybSAmJiBsaXN0X2VtcHR5KCZpc2MtPmRtYV9x dWV1ZSkgJiYNCi0JCXZiMl9pc19zdHJlYW1pbmcodmItPnZiMl9xdWV1ZSkpIHsNCi0JCWlzYy0+ Y3VyX2ZybSA9IGJ1ZjsNCi0JCWlzY19zdGFydF9kbWEoaXNjKTsNCi0JfSBlbHNlDQotCQlsaXN0 X2FkZF90YWlsKCZidWYtPmxpc3QsICZpc2MtPmRtYV9xdWV1ZSk7DQotCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCi19DQotDQotc3RhdGljIHN0 cnVjdCBpc2NfZm9ybWF0ICpmaW5kX2Zvcm1hdF9ieV9mb3VyY2Moc3RydWN0IGlzY19kZXZpY2Ug KmlzYywNCi0JCQkJCQkgdW5zaWduZWQgaW50IGZvdXJjYykNCi17DQotCXVuc2lnbmVkIGludCBu dW1fZm9ybWF0cyA9IGlzYy0+bnVtX3VzZXJfZm9ybWF0czsNCi0Jc3RydWN0IGlzY19mb3JtYXQg KmZtdDsNCi0JdW5zaWduZWQgaW50IGk7DQotDQotCWZvciAoaSA9IDA7IGkgPCBudW1fZm9ybWF0 czsgaSsrKSB7DQotCQlmbXQgPSBpc2MtPnVzZXJfZm9ybWF0c1tpXTsNCi0JCWlmIChmbXQtPmZv dXJjYyA9PSBmb3VyY2MpDQotCQkJcmV0dXJuIGZtdDsNCi0JfQ0KLQ0KLQlyZXR1cm4gTlVMTDsN Ci19DQotDQotc3RhdGljIGNvbnN0IHN0cnVjdCB2YjJfb3BzIGlzY192YjJfb3BzID0gew0KLQku cXVldWVfc2V0dXAJCT0gaXNjX3F1ZXVlX3NldHVwLA0KLQkud2FpdF9wcmVwYXJlCQk9IHZiMl9v cHNfd2FpdF9wcmVwYXJlLA0KLQkud2FpdF9maW5pc2gJCT0gdmIyX29wc193YWl0X2ZpbmlzaCwN Ci0JLmJ1Zl9wcmVwYXJlCQk9IGlzY19idWZmZXJfcHJlcGFyZSwNCi0JLnN0YXJ0X3N0cmVhbWlu Zwk9IGlzY19zdGFydF9zdHJlYW1pbmcsDQotCS5zdG9wX3N0cmVhbWluZwkJPSBpc2Nfc3RvcF9z dHJlYW1pbmcsDQotCS5idWZfcXVldWUJCT0gaXNjX2J1ZmZlcl9xdWV1ZSwNCi19Ow0KLQ0KLXN0 YXRpYyBpbnQgaXNjX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KLQkJ CSBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAq aXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCi0NCi0Jc3Ryc2NweShjYXAtPmRyaXZlciwgQVRN RUxfSVNDX05BTUUsIHNpemVvZihjYXAtPmRyaXZlcikpOw0KLQlzdHJzY3B5KGNhcC0+Y2FyZCwg IkF0bWVsIEltYWdlIFNlbnNvciBDb250cm9sbGVyIiwgc2l6ZW9mKGNhcC0+Y2FyZCkpOw0KLQlz bnByaW50ZihjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksDQotCQkgInBsYXRm b3JtOiVzIiwgaXNjLT52NGwyX2Rldi5uYW1lKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0 YXRpYyBpbnQgaXNjX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnBy aXYsDQotCQkJCSBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQ0KLXsNCi0JdTMyIGluZGV4ID0gZi0+ aW5kZXg7DQotCXUzMiBpLCBzdXBwb3J0ZWRfaW5kZXg7DQotDQotCWlmIChpbmRleCA8IEFSUkFZ X1NJWkUoY29udHJvbGxlcl9mb3JtYXRzKSkgew0KLQkJZi0+cGl4ZWxmb3JtYXQgPSBjb250cm9s bGVyX2Zvcm1hdHNbaW5kZXhdLmZvdXJjYzsNCi0JCXJldHVybiAwOw0KLQl9DQotDQotCWluZGV4 IC09IEFSUkFZX1NJWkUoY29udHJvbGxlcl9mb3JtYXRzKTsNCi0NCi0JaSA9IDA7DQotCXN1cHBv cnRlZF9pbmRleCA9IDA7DQotDQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZvcm1hdHNf bGlzdCk7IGkrKykgew0KLQkJaWYgKCFJU0NfSVNfRk9STUFUX1JBVyhmb3JtYXRzX2xpc3RbaV0u bWJ1c19jb2RlKSB8fA0KLQkJICAgICFmb3JtYXRzX2xpc3RbaV0uc2Rfc3VwcG9ydCkNCi0JCQlj b250aW51ZTsNCi0JCWlmIChzdXBwb3J0ZWRfaW5kZXggPT0gaW5kZXgpIHsNCi0JCQlmLT5waXhl bGZvcm1hdCA9IGZvcm1hdHNfbGlzdFtpXS5mb3VyY2M7DQotCQkJcmV0dXJuIDA7DQotCQl9DQot CQlzdXBwb3J0ZWRfaW5kZXgrKzsNCi0JfQ0KLQ0KLQlyZXR1cm4gLUVJTlZBTDsNCi19DQotDQot c3RhdGljIGludCBpc2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJp diwNCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkNCi17DQotCXN0cnVjdCBpc2Nf ZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQ0KLQkqZm10ID0gaXNjLT5mbXQ7 DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi0vKg0KLSAqIENoZWNrcyB0aGUgY3VycmVudCBjb25m aWd1cmVkIGZvcm1hdCwgaWYgSVNDIGNhbiBvdXRwdXQgaXQsDQotICogY29uc2lkZXJpbmcgd2hp Y2ggdHlwZSBvZiBmb3JtYXQgdGhlIElTQyByZWNlaXZlcyBmcm9tIHRoZSBzZW5zb3INCi0gKi8N Ci1zdGF0aWMgaW50IGlzY190cnlfdmFsaWRhdGVfZm9ybWF0cyhzdHJ1Y3QgaXNjX2RldmljZSAq aXNjKQ0KLXsNCi0JaW50IHJldDsNCi0JYm9vbCBiYXllciA9IGZhbHNlLCB5dXYgPSBmYWxzZSwg cmdiID0gZmFsc2UsIGdyZXkgPSBmYWxzZTsNCi0NCi0JLyogYWxsIGZvcm1hdHMgc3VwcG9ydGVk IGJ5IHRoZSBSTFAgbW9kdWxlIGFyZSBPSyAqLw0KLQlzd2l0Y2ggKGlzYy0+dHJ5X2NvbmZpZy5m b3VyY2MpIHsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1I4Og0KLQljYXNlIFY0TDJfUElYX0ZN VF9TR0JSRzg6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHODoNCi0JY2FzZSBWNEwyX1BJWF9G TVRfU1JHR0I4Og0KLQljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjEwOg0KLQljYXNlIFY0TDJfUElY X0ZNVF9TR0JSRzEwOg0KLQljYXNlIFY0TDJfUElYX0ZNVF9TR1JCRzEwOg0KLQljYXNlIFY0TDJf UElYX0ZNVF9TUkdHQjEwOg0KLQljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjEyOg0KLQljYXNlIFY0 TDJfUElYX0ZNVF9TR0JSRzEyOg0KLQljYXNlIFY0TDJfUElYX0ZNVF9TR1JCRzEyOg0KLQljYXNl IFY0TDJfUElYX0ZNVF9TUkdHQjEyOg0KLQkJcmV0ID0gMDsNCi0JCWJheWVyID0gdHJ1ZTsNCi0J CWJyZWFrOw0KLQ0KLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjA6DQotCWNhc2UgVjRMMl9QSVhf Rk1UX1lVVjQyMlA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6DQotCQlyZXQgPSAwOw0KLQkJ eXV2ID0gdHJ1ZTsNCi0JCWJyZWFrOw0KLQ0KLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6DQot CWNhc2UgVjRMMl9QSVhfRk1UX0FCR1IzMjoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWEJHUjMyOg0K LQljYXNlIFY0TDJfUElYX0ZNVF9BUkdCNDQ0Og0KLQljYXNlIFY0TDJfUElYX0ZNVF9BUkdCNTU1 Og0KLQkJcmV0ID0gMDsNCi0JCXJnYiA9IHRydWU7DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJ WF9GTVRfR1JFWToNCi0JCXJldCA9IDA7DQotCQlncmV5ID0gdHJ1ZTsNCi0JCWJyZWFrOw0KLQlk ZWZhdWx0Og0KLQkvKiBhbnkgb3RoZXIgZGlmZmVyZW50IGZvcm1hdHMgYXJlIG5vdCBzdXBwb3J0 ZWQgKi8NCi0JCXJldCA9IC1FSU5WQUw7DQotCX0NCi0NCi0JLyogd2UgY2Fubm90IG91dHB1dCBS QVcvR3JleSBpZiB3ZSBkbyBub3QgcmVjZWl2ZSBSQVcgKi8NCi0JaWYgKChiYXllciB8fCBncmV5 KSAmJg0KLQkgICAgIUlTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQt Pm1idXNfY29kZSkpDQotCQlyZXR1cm4gLUVJTlZBTDsNCi0NCi0JdjRsMl9kYmcoMSwgZGVidWcs ICZpc2MtPnY0bDJfZGV2LA0KLQkJICJGb3JtYXQgdmFsaWRhdGlvbiwgcmVxdWVzdGVkIHJnYj0l dSwgeXV2PSV1LCBncmV5PSV1LCBiYXllcj0ldVxuIiwNCi0JCSByZ2IsIHl1diwgZ3JleSwgYmF5 ZXIpOw0KLQ0KLQlyZXR1cm4gcmV0Ow0KLX0NCi0NCi0vKg0KLSAqIENvbmZpZ3VyZXMgdGhlIFJM UCBhbmQgRE1BIG1vZHVsZXMsIGRlcGVuZGluZyBvbiB0aGUgb3V0cHV0IGZvcm1hdA0KLSAqIGNv bmZpZ3VyZWQgZm9yIHRoZSBJU0MuDQotICogSWYgZGlyZWN0X2R1bXAgPT0gdHJ1ZSwganVzdCBk dW1wIHJhdyBkYXRhIDggYml0cy4NCi0gKi8NCi1zdGF0aWMgaW50IGlzY190cnlfY29uZmlndXJl X3JscF9kbWEoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgYm9vbCBkaXJlY3RfZHVtcCkNCi17DQot CWlmIChkaXJlY3RfZHVtcCkgew0KLQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElT Q19STFBfQ0ZHX01PREVfREFUODsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVND X0RDRkdfSU1PREVfUEFDS0VEODsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElT Q19EQ1RSTF9EVklFV19QQUNLRUQ7DQotCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQotCQly ZXR1cm4gMDsNCi0JfQ0KLQ0KLQlzd2l0Y2ggKGlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MpIHsNCi0J Y2FzZSBWNEwyX1BJWF9GTVRfU0JHR1I4Og0KLQljYXNlIFY0TDJfUElYX0ZNVF9TR0JSRzg6DQot CWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHODoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0I4Og0K LQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfREFUODsN Ci0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEODsN Ci0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7 DQotCQlpc2MtPnRyeV9jb25maWcuYnBwID0gODsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElY X0ZNVF9TQkdHUjEwOg0KLQljYXNlIFY0TDJfUElYX0ZNVF9TR0JSRzEwOg0KLQljYXNlIFY0TDJf UElYX0ZNVF9TR1JCRzEwOg0KLQljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjEwOg0KLQkJaXNjLT50 cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfREFUMTA7DQotCQlpc2Mt PnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0KLQkJaXNj LT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCi0JCWlz Yy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9T QkdHUjEyOg0KLQljYXNlIFY0TDJfUElYX0ZNVF9TR0JSRzEyOg0KLQljYXNlIFY0TDJfUElYX0ZN VF9TR1JCRzEyOg0KLQljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjEyOg0KLQkJaXNjLT50cnlfY29u ZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfREFUMTI7DQotCQlpc2MtPnRyeV9j b25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0KLQkJaXNjLT50cnlf Y29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCi0JCWlzYy0+dHJ5 X2NvbmZpZy5icHAgPSAxNjsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6 DQotCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9SR0I1 NjU7DQotCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tF RDE2Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BB Q0tFRDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCi0JCWJyZWFrOw0KLQljYXNlIFY0 TDJfUElYX0ZNVF9BUkdCNDQ0Og0KLQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElT Q19STFBfQ0ZHX01PREVfQVJHQjQ0NDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0g SVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcg PSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0K LQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I1NTU6DQotCQlpc2MtPnRyeV9jb25m aWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9BUkdCNTU1Ow0KLQkJaXNjLT50cnlf Y29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQxNjsNCi0JCWlzYy0+dHJ5 X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQotCQlpc2MtPnRy eV9jb25maWcuYnBwID0gMTY7DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfQUJHUjMy Og0KLQljYXNlIFY0TDJfUElYX0ZNVF9YQkdSMzI6DQotCQlpc2MtPnRyeV9jb25maWcucmxwX2Nm Z19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9BUkdCMzI7DQotCQlpc2MtPnRyeV9jb25maWcuZGNm Z19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDMyOw0KLQkJaXNjLT50cnlfY29uZmlnLmRj dHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5i cHAgPSAzMjsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjA6DQotCQlpc2Mt PnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9ZWUNDOw0KLQkJaXNj LT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9ZQzQyMFA7DQotCQlpc2Mt PnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUExBTkFSOw0KLQkJaXNj LT50cnlfY29uZmlnLmJwcCA9IDEyOw0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1lV VjQyMlA6DQotCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9E RV9ZWUNDOw0KLQkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9Z QzQyMlA7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdf UExBTkFSOw0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KLQkJYnJlYWs7DQotCWNhc2Ug VjRMMl9QSVhfRk1UX1lVWVY6DQotCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVND X1JMUF9DRkdfTU9ERV9ZWUNDOw0KLQkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0Nf RENGR19JTU9ERV9QQUNLRUQzMjsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElT Q19EQ1RSTF9EVklFV19QQUNLRUQ7DQotCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQotCQli cmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfR1JFWToNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBf Y2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0RBVFk4Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRj ZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQ4Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRj dHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5i cHAgPSA4Ow0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6DQotCQlyZXR1cm4gLUVJTlZBTDsNCi0JfQ0K LQlyZXR1cm4gMDsNCi19DQotDQotLyoNCi0gKiBDb25maWd1cmluZyBwaXBlbGluZSBtb2R1bGVz LCBkZXBlbmRpbmcgb24gd2hpY2ggZm9ybWF0IHRoZSBJU0Mgb3V0cHV0cw0KLSAqIGFuZCBjb25z aWRlcmluZyB3aGljaCBmb3JtYXQgaXQgaGFzIGFzIGlucHV0IGZyb20gdGhlIHNlbnNvci4NCi0g Ki8NCi1zdGF0aWMgaW50IGlzY190cnlfY29uZmlndXJlX3BpcGVsaW5lKHN0cnVjdCBpc2NfZGV2 aWNlICppc2MpDQotew0KLQlzd2l0Y2ggKGlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MpIHsNCi0JY2Fz ZSBWNEwyX1BJWF9GTVRfUkdCNTY1Og0KLQljYXNlIFY0TDJfUElYX0ZNVF9BUkdCNTU1Og0KLQlj YXNlIFY0TDJfUElYX0ZNVF9BUkdCNDQ0Og0KLQljYXNlIFY0TDJfUElYX0ZNVF9BQkdSMzI6DQot CWNhc2UgVjRMMl9QSVhfRk1UX1hCR1IzMjoNCi0JCS8qIGlmIHNlbnNvciBmb3JtYXQgaXMgUkFX LCB3ZSBjb252ZXJ0IGluc2lkZSBJU0MgKi8NCi0JCWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2Mt PnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7DQotCQkJaXNjLT50cnlfY29uZmln LmJpdHNfcGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwNCi0JCQkJV0JfRU5BQkxFIHwgR0FNX0VOQUJM RVM7DQotCQl9IGVsc2Ugew0KLQkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgw Ow0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoNCi0JCS8qIGlm IHNlbnNvciBmb3JtYXQgaXMgUkFXLCB3ZSBjb252ZXJ0IGluc2lkZSBJU0MgKi8NCi0JCWlmIChJ U0NfSVNfRk9STUFUX1JBVyhpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7 DQotCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwNCi0JCQkJ Q1NDX0VOQUJMRSB8IFdCX0VOQUJMRSB8IEdBTV9FTkFCTEVTIHwNCi0JCQkJU1VCNDIwX0VOQUJM RSB8IFNVQjQyMl9FTkFCTEUgfCBDQkNfRU5BQkxFOw0KLQkJfSBlbHNlIHsNCi0JCQlpc2MtPnRy eV9jb25maWcuYml0c19waXBlbGluZSA9IDB4MDsNCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIFY0 TDJfUElYX0ZNVF9ZVVY0MjJQOg0KLQkJLyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNv bnZlcnQgaW5zaWRlIElTQyAqLw0KLQkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2Nv bmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCi0JCQlpc2MtPnRyeV9jb25maWcuYml0c19w aXBlbGluZSA9IENGQV9FTkFCTEUgfA0KLQkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FN X0VOQUJMRVMgfA0KLQkJCQlTVUI0MjJfRU5BQkxFIHwgQ0JDX0VOQUJMRTsNCi0JCX0gZWxzZSB7 DQotCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQotCQl9DQotCQlicmVh azsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoNCi0JCS8qIGlmIHNlbnNvciBmb3JtYXQgaXMg UkFXLCB3ZSBjb252ZXJ0IGluc2lkZSBJU0MgKi8NCi0JCWlmIChJU0NfSVNfRk9STUFUX1JBVyhp c2MtPnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7DQotCQkJaXNjLT50cnlfY29u ZmlnLmJpdHNfcGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwNCi0JCQkJQ1NDX0VOQUJMRSB8IFdCX0VO QUJMRSB8IEdBTV9FTkFCTEVTIHwNCi0JCQkJU1VCNDIyX0VOQUJMRSB8IENCQ19FTkFCTEU7DQot CQl9IGVsc2Ugew0KLQkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KLQkJ fQ0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6DQotCQlpZiAoSVNDX0lTX0ZP Uk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KLQkJLyog aWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KLQkJCWlz Yy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8DQotCQkJCUNTQ19FTkFC TEUgfCBXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUyB8DQotCQkJCUNCQ19FTkFCTEU7DQotCQl9IGVs c2Ugew0KLQkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KLQkJfQ0KLQkJ YnJlYWs7DQotCWRlZmF1bHQ6DQotCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IDB4 MDsNCi0JfQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2NfdHJ5X2ZtdChzdHJ1 Y3QgaXNjX2RldmljZSAqaXNjLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYsDQotCQkJdTMyICpjb2Rl KQ0KLXsNCi0JaW50IGk7DQotCXN0cnVjdCBpc2NfZm9ybWF0ICpzZF9mbXQgPSBOVUxMLCAqZGly ZWN0X2ZtdCA9IE5VTEw7DQotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeGZtdCA9ICZmLT5m bXQucGl4Ow0KLQlzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyBwYWRfY2ZnOw0KLQlzdHJ1 Y3QgdjRsMl9zdWJkZXZfZm9ybWF0IGZvcm1hdCA9IHsNCi0JCS53aGljaCA9IFY0TDJfU1VCREVW X0ZPUk1BVF9UUlksDQotCX07DQotCXUzMiBtYnVzX2NvZGU7DQotCWludCByZXQ7DQotCWJvb2wg cmxwX2RtYV9kaXJlY3RfZHVtcCA9IGZhbHNlOw0KLQ0KLQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JV Rl9UWVBFX1ZJREVPX0NBUFRVUkUpDQotCQlyZXR1cm4gLUVJTlZBTDsNCi0NCi0JLyogU3RlcCAx OiBmaW5kIGEgUkFXIGZvcm1hdCB0aGF0IGlzIHN1cHBvcnRlZCAqLw0KLQlmb3IgKGkgPSAwOyBp IDwgaXNjLT5udW1fdXNlcl9mb3JtYXRzOyBpKyspIHsNCi0JCWlmIChJU0NfSVNfRk9STUFUX1JB Vyhpc2MtPnVzZXJfZm9ybWF0c1tpXS0+bWJ1c19jb2RlKSkgew0KLQkJCXNkX2ZtdCA9IGlzYy0+ dXNlcl9mb3JtYXRzW2ldOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQl9DQotCS8qIFN0ZXAgMjogV2Ug Y2FuIGNvbnRpbnVlIHdpdGggdGhpcyBSQVcgZm9ybWF0LCBvciB3ZSBjYW4gbG9vaw0KLQkgKiBm b3IgYmV0dGVyOiBtYXliZSBzZW5zb3Igc3VwcG9ydHMgZGlyZWN0bHkgd2hhdCB3ZSBuZWVkLg0K LQkgKi8NCi0JZGlyZWN0X2ZtdCA9IGZpbmRfZm9ybWF0X2J5X2ZvdXJjYyhpc2MsIHBpeGZtdC0+ cGl4ZWxmb3JtYXQpOw0KLQ0KLQkvKiBTdGVwIDM6IFdlIGhhdmUgYm90aC4gV2UgZGVjaWRlIGdp dmVuIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHdoaWNoDQotCSAqIG9uZSB0byB1c2UuDQotCSAqLw0K LQlpZiAoZGlyZWN0X2ZtdCAmJiBzZF9mbXQgJiYgc2Vuc29yX3ByZWZlcnJlZCkNCi0JCXNkX2Zt dCA9IGRpcmVjdF9mbXQ7DQotDQotCS8qIFN0ZXAgNDogd2UgZG8gbm90IGhhdmUgUkFXIGJ1dCB3 ZSBoYXZlIGEgZGlyZWN0IGZvcm1hdC4gVXNlIGl0LiAqLw0KLQlpZiAoZGlyZWN0X2ZtdCAmJiAh c2RfZm10KQ0KLQkJc2RfZm10ID0gZGlyZWN0X2ZtdDsNCi0NCi0JLyogU3RlcCA1OiBpZiB3ZSBh cmUgdXNpbmcgYSBkaXJlY3QgZm9ybWF0LCB3ZSBuZWVkIHRvIHBhY2thZ2UNCi0JICogZXZlcnl0 aGluZyBhcyA4IGJpdCBkYXRhIGFuZCBqdXN0IGR1bXAgaXQNCi0JICovDQotCWlmIChzZF9mbXQg PT0gZGlyZWN0X2ZtdCkNCi0JCXJscF9kbWFfZGlyZWN0X2R1bXAgPSB0cnVlOw0KLQ0KLQkvKiBT dGVwIDY6IFdlIGhhdmUgbm8gZm9ybWF0LiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHVzZXJzcGFj ZQ0KLQkgKiByZXF1ZXN0cyBzb21lIHdlaXJkL2ludmFsaWQgZm9ybWF0Lg0KLQkgKiBJbiB0aGlz IGNhc2UsIGRlZmF1bHQgdG8gd2hhdGV2ZXIgd2UgaGF2ZQ0KLQkgKi8NCi0JaWYgKCFzZF9mbXQg JiYgIWRpcmVjdF9mbXQpIHsNCi0JCXNkX2ZtdCA9IGlzYy0+dXNlcl9mb3JtYXRzW2lzYy0+bnVt X3VzZXJfZm9ybWF0cyAtIDFdOw0KLQkJdjRsMl9kYmcoMSwgZGVidWcsICZpc2MtPnY0bDJfZGV2 LA0KLQkJCSAiU2Vuc29yIG5vdCBzdXBwb3J0aW5nICUuNHMsIHVzaW5nICUuNHNcbiIsDQotCQkJ IChjaGFyICopJnBpeGZtdC0+cGl4ZWxmb3JtYXQsIChjaGFyICopJnNkX2ZtdC0+Zm91cmNjKTsN Ci0JfQ0KLQ0KLQlpZiAoIXNkX2ZtdCkgew0KLQkJcmV0ID0gLUVJTlZBTDsNCi0JCWdvdG8gaXNj X3RyeV9mbXRfZXJyOw0KLQl9DQotDQotCS8qIFN0ZXAgNzogUHJpbnQgb3V0IHdoYXQgd2UgZGVj aWRlZCBmb3IgZGVidWdnaW5nICovDQotCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2Rl diwNCi0JCSAiUHJlZmVycmluZyB0byBoYXZlIHNlbnNvciB1c2luZyBmb3JtYXQgJS40c1xuIiwN Ci0JCSAoY2hhciAqKSZzZF9mbXQtPmZvdXJjYyk7DQotDQotCS8qIFN0ZXAgODogYXQgdGhpcyBt b21lbnQgd2UgZGVjaWRlZCB3aGljaCBmb3JtYXQgdGhlIHN1YmRldiB3aWxsIHVzZSAqLw0KLQlp c2MtPnRyeV9jb25maWcuc2RfZm9ybWF0ID0gc2RfZm10Ow0KLQ0KLQkvKiBMaW1pdCB0byBBdG1l bCBJU0MgaGFyZHdhcmUgY2FwYWJpbGl0aWVzICovDQotCWlmIChwaXhmbXQtPndpZHRoID4gSVND X01BWF9TVVBQT1JUX1dJRFRIKQ0KLQkJcGl4Zm10LT53aWR0aCA9IElTQ19NQVhfU1VQUE9SVF9X SURUSDsNCi0JaWYgKHBpeGZtdC0+aGVpZ2h0ID4gSVNDX01BWF9TVVBQT1JUX0hFSUdIVCkNCi0J CXBpeGZtdC0+aGVpZ2h0ID0gSVNDX01BWF9TVVBQT1JUX0hFSUdIVDsNCi0NCi0JLyoNCi0JICog VGhlIG1idXMgZm9ybWF0IGlzIHRoZSBvbmUgdGhlIHN1YmRldiBvdXRwdXRzLg0KLQkgKiBUaGUg cGl4ZWxzIHdpbGwgYmUgdHJhbnNmZXJyZWQgaW4gdGhpcyBmb3JtYXQgU2Vuc29yIC0+IElTQw0K LQkgKi8NCi0JbWJ1c19jb2RlID0gc2RfZm10LT5tYnVzX2NvZGU7DQotDQotCS8qDQotCSAqIFZh bGlkYXRlIGZvcm1hdHMuIElmIHRoZSByZXF1aXJlZCBmb3JtYXQgaXMgbm90IE9LLCBkZWZhdWx0 IHRvIHJhdy4NCi0JICovDQotDQotCWlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MgPSBwaXhmbXQtPnBp eGVsZm9ybWF0Ow0KLQ0KLQlpZiAoaXNjX3RyeV92YWxpZGF0ZV9mb3JtYXRzKGlzYykpIHsNCi0J CXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSBpc2MtPnRyeV9jb25maWcuZm91cmNjID0gc2RfZm10LT5m b3VyY2M7DQotCQkvKiBSZS10cnkgdG8gdmFsaWRhdGUgdGhlIG5ldyBmb3JtYXQgKi8NCi0JCXJl dCA9IGlzY190cnlfdmFsaWRhdGVfZm9ybWF0cyhpc2MpOw0KLQkJaWYgKHJldCkNCi0JCQlnb3Rv IGlzY190cnlfZm10X2VycjsNCi0JfQ0KLQ0KLQlyZXQgPSBpc2NfdHJ5X2NvbmZpZ3VyZV9ybHBf ZG1hKGlzYywgcmxwX2RtYV9kaXJlY3RfZHVtcCk7DQotCWlmIChyZXQpDQotCQlnb3RvIGlzY190 cnlfZm10X2VycjsNCi0NCi0JcmV0ID0gaXNjX3RyeV9jb25maWd1cmVfcGlwZWxpbmUoaXNjKTsN Ci0JaWYgKHJldCkNCi0JCWdvdG8gaXNjX3RyeV9mbXRfZXJyOw0KLQ0KLQl2NGwyX2ZpbGxfbWJ1 c19mb3JtYXQoJmZvcm1hdC5mb3JtYXQsIHBpeGZtdCwgbWJ1c19jb2RlKTsNCi0JcmV0ID0gdjRs Ml9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgcGFkLCBzZXRfZm10LA0KLQkJ CSAgICAgICAmcGFkX2NmZywgJmZvcm1hdCk7DQotCWlmIChyZXQgPCAwKQ0KLQkJZ290byBpc2Nf dHJ5X2ZtdF9zdWJkZXZfZXJyOw0KLQ0KLQl2NGwyX2ZpbGxfcGl4X2Zvcm1hdChwaXhmbXQsICZm b3JtYXQuZm9ybWF0KTsNCi0NCi0JcGl4Zm10LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsNCi0J cGl4Zm10LT5ieXRlc3BlcmxpbmUgPSAocGl4Zm10LT53aWR0aCAqIGlzYy0+dHJ5X2NvbmZpZy5i cHApID4+IDM7DQotCXBpeGZtdC0+c2l6ZWltYWdlID0gcGl4Zm10LT5ieXRlc3BlcmxpbmUgKiBw aXhmbXQtPmhlaWdodDsNCi0NCi0JaWYgKGNvZGUpDQotCQkqY29kZSA9IG1idXNfY29kZTsNCi0N Ci0JcmV0dXJuIDA7DQotDQotaXNjX3RyeV9mbXRfZXJyOg0KLQl2NGwyX2VycigmaXNjLT52NGwy X2RldiwgIkNvdWxkIG5vdCBmaW5kIGFueSBwb3NzaWJsZSBmb3JtYXQgZm9yIGEgd29ya2luZyBw aXBlbGluZVxuIik7DQotaXNjX3RyeV9mbXRfc3ViZGV2X2VycjoNCi0JbWVtc2V0KCZpc2MtPnRy eV9jb25maWcsIDAsIHNpemVvZihpc2MtPnRyeV9jb25maWcpKTsNCi0NCi0JcmV0dXJuIHJldDsN Ci19DQotDQotc3RhdGljIGludCBpc2Nfc2V0X2ZtdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCBz dHJ1Y3QgdjRsMl9mb3JtYXQgKmYpDQotew0KLQlzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0IGZv cm1hdCA9IHsNCi0JCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQotCX07DQot CXUzMiBtYnVzX2NvZGUgPSAwOw0KLQlpbnQgcmV0Ow0KLQ0KLQlyZXQgPSBpc2NfdHJ5X2ZtdChp c2MsIGYsICZtYnVzX2NvZGUpOw0KLQlpZiAocmV0KQ0KLQkJcmV0dXJuIHJldDsNCi0NCi0JdjRs Ml9maWxsX21idXNfZm9ybWF0KCZmb3JtYXQuZm9ybWF0LCAmZi0+Zm10LnBpeCwgbWJ1c19jb2Rl KTsNCi0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgcGFk LA0KLQkJCSAgICAgICBzZXRfZm10LCBOVUxMLCAmZm9ybWF0KTsNCi0JaWYgKHJldCA8IDApDQot CQlyZXR1cm4gcmV0Ow0KLQ0KLQlpc2MtPmZtdCA9ICpmOw0KLQ0KLQlpZiAoaXNjLT50cnlfY29u ZmlnLnNkX2Zvcm1hdCAmJiBpc2MtPmNvbmZpZy5zZF9mb3JtYXQgJiYNCi0JICAgIGlzYy0+dHJ5 X2NvbmZpZy5zZF9mb3JtYXQgIT0gaXNjLT5jb25maWcuc2RfZm9ybWF0KSB7DQotCQlpc2MtPmN0 cmxzLmhpc3Rfc3RhdCA9IEhJU1RfSU5JVDsNCi0JCWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsN Ci0JfQ0KLQkvKiBtYWtlIHRoZSB0cnkgY29uZmlndXJhdGlvbiBhY3RpdmUgKi8NCi0JaXNjLT5j b25maWcgPSBpc2MtPnRyeV9jb25maWc7DQotDQotCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52 NGwyX2RldiwgIk5ldyBJU0MgY29uZmlndXJhdGlvbiBpbiBwbGFjZVxuIik7DQotDQotCXJldHVy biAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpm aWxlLCB2b2lkICpwcml2LA0KLQkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCi17DQot CXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQ0KLQlpZiAo dmIyX2lzX3N0cmVhbWluZygmaXNjLT52YjJfdmlkcSkpDQotCQlyZXR1cm4gLUVCVVNZOw0KLQ0K LQlyZXR1cm4gaXNjX3NldF9mbXQoaXNjLCBmKTsNCi19DQotDQotc3RhdGljIGludCBpc2NfdHJ5 X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KLQkJCQlzdHJ1Y3Qg djRsMl9mb3JtYXQgKmYpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2 ZGF0YShmaWxlKTsNCi0NCi0JcmV0dXJuIGlzY190cnlfZm10KGlzYywgZiwgTlVMTCk7DQotfQ0K LQ0KLXN0YXRpYyBpbnQgaXNjX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnBy aXYsDQotCQkJICAgc3RydWN0IHY0bDJfaW5wdXQgKmlucCkNCi17DQotCWlmIChpbnAtPmluZGV4 ICE9IDApDQotCQlyZXR1cm4gLUVJTlZBTDsNCi0NCi0JaW5wLT50eXBlID0gVjRMMl9JTlBVVF9U WVBFX0NBTUVSQTsNCi0JaW5wLT5zdGQgPSAwOw0KLQlzdHJzY3B5KGlucC0+bmFtZSwgIkNhbWVy YSIsIHNpemVvZihpbnAtPm5hbWUpKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBp bnQgaXNjX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGlu dCAqaSkNCi17DQotCSppID0gMDsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQg aXNjX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBp KQ0KLXsNCi0JaWYgKGkgPiAwKQ0KLQkJcmV0dXJuIC1FSU5WQUw7DQotDQotCXJldHVybiAwOw0K LX0NCi0NCi1zdGF0aWMgaW50IGlzY19nX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZo LCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICphKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlz YyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQotDQotCXJldHVybiB2NGwyX2dfcGFybV9jYXAodmlk ZW9fZGV2ZGF0YShmaWxlKSwgaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIGEpOw0KLX0NCi0NCi1z dGF0aWMgaW50IGlzY19zX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3Qg djRsMl9zdHJlYW1wYXJtICphKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVv X2RydmRhdGEoZmlsZSk7DQotDQotCXJldHVybiB2NGwyX3NfcGFybV9jYXAodmlkZW9fZGV2ZGF0 YShmaWxlKSwgaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIGEpOw0KLX0NCi0NCi1zdGF0aWMgaW50 IGlzY19lbnVtX2ZyYW1lc2l6ZXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLA0KLQkJCSAg ICAgICBzdHJ1Y3QgdjRsMl9mcm1zaXplZW51bSAqZnNpemUpDQotew0KLQlzdHJ1Y3QgaXNjX2Rl dmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCi0Jc3RydWN0IHY0bDJfc3ViZGV2X2Zy YW1lX3NpemVfZW51bSBmc2UgPSB7DQotCQkuaW5kZXggPSBmc2l6ZS0+aW5kZXgsDQotCQkud2hp Y2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0KLQl9Ow0KLQlpbnQgcmV0ID0gLUVJTlZB TDsNCi0JaW50IGk7DQotDQotCWZvciAoaSA9IDA7IGkgPCBpc2MtPm51bV91c2VyX2Zvcm1hdHM7 IGkrKykNCi0JCWlmIChpc2MtPnVzZXJfZm9ybWF0c1tpXS0+Zm91cmNjID09IGZzaXplLT5waXhl bF9mb3JtYXQpDQotCQkJcmV0ID0gMDsNCi0NCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo Y29udHJvbGxlcl9mb3JtYXRzKTsgaSsrKQ0KLQkJaWYgKGNvbnRyb2xsZXJfZm9ybWF0c1tpXS5m b3VyY2MgPT0gZnNpemUtPnBpeGVsX2Zvcm1hdCkNCi0JCQlyZXQgPSAwOw0KLQ0KLQlpZiAocmV0 KQ0KLQkJcmV0dXJuIHJldDsNCi0NCi0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJl bnRfc3ViZGV2LT5zZCwgcGFkLCBlbnVtX2ZyYW1lX3NpemUsDQotCQkJICAgICAgIE5VTEwsICZm c2UpOw0KLQlpZiAocmV0KQ0KLQkJcmV0dXJuIHJldDsNCi0NCi0JZnNlLmNvZGUgPSBpc2MtPmNv bmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZTsNCi0NCi0JZnNpemUtPnR5cGUgPSBWNEwyX0ZSTVNJ WkVfVFlQRV9ESVNDUkVURTsNCi0JZnNpemUtPmRpc2NyZXRlLndpZHRoID0gZnNlLm1heF93aWR0 aDsNCi0JZnNpemUtPmRpc2NyZXRlLmhlaWdodCA9IGZzZS5tYXhfaGVpZ2h0Ow0KLQ0KLQlyZXR1 cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2NfZW51bV9mcmFtZWludGVydmFscyhzdHJ1Y3Qg ZmlsZSAqZmlsZSwgdm9pZCAqZmgsDQotCQkJCSAgICBzdHJ1Y3QgdjRsMl9mcm1pdmFsZW51bSAq Zml2YWwpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxl KTsNCi0Jc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX2ludGVydmFsX2VudW0gZmllID0gew0KLQkJ LmluZGV4ID0gZml2YWwtPmluZGV4LA0KLQkJLndpZHRoID0gZml2YWwtPndpZHRoLA0KLQkJLmhl aWdodCA9IGZpdmFsLT5oZWlnaHQsDQotCQkud2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNU SVZFLA0KLQl9Ow0KLQlpbnQgcmV0ID0gLUVJTlZBTDsNCi0JaW50IGk7DQotDQotCWZvciAoaSA9 IDA7IGkgPCBpc2MtPm51bV91c2VyX2Zvcm1hdHM7IGkrKykNCi0JCWlmIChpc2MtPnVzZXJfZm9y bWF0c1tpXS0+Zm91cmNjID09IGZpdmFsLT5waXhlbF9mb3JtYXQpDQotCQkJcmV0ID0gMDsNCi0N Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29udHJvbGxlcl9mb3JtYXRzKTsgaSsrKQ0K LQkJaWYgKGNvbnRyb2xsZXJfZm9ybWF0c1tpXS5mb3VyY2MgPT0gZml2YWwtPnBpeGVsX2Zvcm1h dCkNCi0JCQlyZXQgPSAwOw0KLQ0KLQlpZiAocmV0KQ0KLQkJcmV0dXJuIHJldDsNCi0NCi0JcmV0 ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgcGFkLA0KLQkJCSAg ICAgICBlbnVtX2ZyYW1lX2ludGVydmFsLCBOVUxMLCAmZmllKTsNCi0JaWYgKHJldCkNCi0JCXJl dHVybiByZXQ7DQotDQotCWZpZS5jb2RlID0gaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2Nv ZGU7DQotCWZpdmFsLT50eXBlID0gVjRMMl9GUk1JVkFMX1RZUEVfRElTQ1JFVEU7DQotCWZpdmFs LT5kaXNjcmV0ZSA9IGZpZS5pbnRlcnZhbDsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRp YyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgaXNjX2lvY3RsX29wcyA9IHsNCi0JLnZpZGlv Y19xdWVyeWNhcAkJPSBpc2NfcXVlcnljYXAsDQotCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcAk9 IGlzY19lbnVtX2ZtdF92aWRfY2FwLA0KLQkudmlkaW9jX2dfZm10X3ZpZF9jYXAJCT0gaXNjX2df Zm10X3ZpZF9jYXAsDQotCS52aWRpb2Nfc19mbXRfdmlkX2NhcAkJPSBpc2Nfc19mbXRfdmlkX2Nh cCwNCi0JLnZpZGlvY190cnlfZm10X3ZpZF9jYXAJCT0gaXNjX3RyeV9mbXRfdmlkX2NhcCwNCi0N Ci0JLnZpZGlvY19lbnVtX2lucHV0CQk9IGlzY19lbnVtX2lucHV0LA0KLQkudmlkaW9jX2dfaW5w dXQJCQk9IGlzY19nX2lucHV0LA0KLQkudmlkaW9jX3NfaW5wdXQJCQk9IGlzY19zX2lucHV0LA0K LQ0KLQkudmlkaW9jX3JlcWJ1ZnMJCQk9IHZiMl9pb2N0bF9yZXFidWZzLA0KLQkudmlkaW9jX3F1 ZXJ5YnVmCQk9IHZiMl9pb2N0bF9xdWVyeWJ1ZiwNCi0JLnZpZGlvY19xYnVmCQkJPSB2YjJfaW9j dGxfcWJ1ZiwNCi0JLnZpZGlvY19leHBidWYJCQk9IHZiMl9pb2N0bF9leHBidWYsDQotCS52aWRp b2NfZHFidWYJCQk9IHZiMl9pb2N0bF9kcWJ1ZiwNCi0JLnZpZGlvY19jcmVhdGVfYnVmcwkJPSB2 YjJfaW9jdGxfY3JlYXRlX2J1ZnMsDQotCS52aWRpb2NfcHJlcGFyZV9idWYJCT0gdmIyX2lvY3Rs X3ByZXBhcmVfYnVmLA0KLQkudmlkaW9jX3N0cmVhbW9uCQk9IHZiMl9pb2N0bF9zdHJlYW1vbiwN Ci0JLnZpZGlvY19zdHJlYW1vZmYJCT0gdmIyX2lvY3RsX3N0cmVhbW9mZiwNCi0NCi0JLnZpZGlv Y19nX3Bhcm0JCQk9IGlzY19nX3Bhcm0sDQotCS52aWRpb2Nfc19wYXJtCQkJPSBpc2Nfc19wYXJt LA0KLQkudmlkaW9jX2VudW1fZnJhbWVzaXplcwkJPSBpc2NfZW51bV9mcmFtZXNpemVzLA0KLQku dmlkaW9jX2VudW1fZnJhbWVpbnRlcnZhbHMJPSBpc2NfZW51bV9mcmFtZWludGVydmFscywNCi0N Ci0JLnZpZGlvY19sb2dfc3RhdHVzCQk9IHY0bDJfY3RybF9sb2dfc3RhdHVzLA0KLQkudmlkaW9j X3N1YnNjcmliZV9ldmVudAkJPSB2NGwyX2N0cmxfc3Vic2NyaWJlX2V2ZW50LA0KLQkudmlkaW9j X3Vuc3Vic2NyaWJlX2V2ZW50CT0gdjRsMl9ldmVudF91bnN1YnNjcmliZSwNCi19Ow0KLQ0KLXN0 YXRpYyBpbnQgaXNjX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpDQotew0KLQlzdHJ1Y3QgaXNjX2Rl dmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCi0Jc3RydWN0IHY0bDJfc3ViZGV2ICpz ZCA9IGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkOw0KLQlpbnQgcmV0Ow0KLQ0KLQlpZiAobXV0ZXhf bG9ja19pbnRlcnJ1cHRpYmxlKCZpc2MtPmxvY2spKQ0KLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsN Ci0NCi0JcmV0ID0gdjRsMl9maF9vcGVuKGZpbGUpOw0KLQlpZiAocmV0IDwgMCkNCi0JCWdvdG8g dW5sb2NrOw0KLQ0KLQlpZiAoIXY0bDJfZmhfaXNfc2luZ3VsYXJfZmlsZShmaWxlKSkNCi0JCWdv dG8gdW5sb2NrOw0KLQ0KLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX3Bvd2Vy LCAxKTsNCi0JaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FTk9JT0NUTENNRCkgew0KLQkJdjRsMl9m aF9yZWxlYXNlKGZpbGUpOw0KLQkJZ290byB1bmxvY2s7DQotCX0NCi0NCi0JcmV0ID0gaXNjX3Nl dF9mbXQoaXNjLCAmaXNjLT5mbXQpOw0KLQlpZiAocmV0KSB7DQotCQl2NGwyX3N1YmRldl9jYWxs KHNkLCBjb3JlLCBzX3Bvd2VyLCAwKTsNCi0JCXY0bDJfZmhfcmVsZWFzZShmaWxlKTsNCi0JfQ0K LQ0KLXVubG9jazoNCi0JbXV0ZXhfdW5sb2NrKCZpc2MtPmxvY2spOw0KLQlyZXR1cm4gcmV0Ow0K LX0NCi0NCi1zdGF0aWMgaW50IGlzY19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQ0KLXsNCi0J c3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQotCXN0cnVjdCB2 NGwyX3N1YmRldiAqc2QgPSBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZDsNCi0JYm9vbCBmaF9zaW5n dWxhcjsNCi0JaW50IHJldDsNCi0NCi0JbXV0ZXhfbG9jaygmaXNjLT5sb2NrKTsNCi0NCi0JZmhf c2luZ3VsYXIgPSB2NGwyX2ZoX2lzX3Npbmd1bGFyX2ZpbGUoZmlsZSk7DQotDQotCXJldCA9IF92 YjJfZm9wX3JlbGVhc2UoZmlsZSwgTlVMTCk7DQotDQotCWlmIChmaF9zaW5ndWxhcikNCi0JCXY0 bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNfcG93ZXIsIDApOw0KLQ0KLQltdXRleF91bmxvY2so JmlzYy0+bG9jayk7DQotDQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgaXNjX2ZvcHMgPSB7DQotCS5vd25lcgkJPSBUSElTX01P RFVMRSwNCi0JLm9wZW4JCT0gaXNjX29wZW4sDQotCS5yZWxlYXNlCT0gaXNjX3JlbGVhc2UsDQot CS51bmxvY2tlZF9pb2N0bAk9IHZpZGVvX2lvY3RsMiwNCi0JLnJlYWQJCT0gdmIyX2ZvcF9yZWFk LA0KLQkubW1hcAkJPSB2YjJfZm9wX21tYXAsDQotCS5wb2xsCQk9IHZiMl9mb3BfcG9sbCwNCi19 Ow0KLQ0KLXN0YXRpYyBpcnFyZXR1cm5fdCBpc2NfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRl dl9pZCkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSAoc3RydWN0IGlzY19kZXZpY2Ug KilkZXZfaWQ7DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KLQl1MzIg aXNjX2ludHNyLCBpc2NfaW50bWFzaywgcGVuZGluZzsNCi0JaXJxcmV0dXJuX3QgcmV0ID0gSVJR X05PTkU7DQotDQotCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0lOVFNSLCAmaXNjX2ludHNyKTsN Ci0JcmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfSU5UTUFTSywgJmlzY19pbnRtYXNrKTsNCi0NCi0J cGVuZGluZyA9IGlzY19pbnRzciAmIGlzY19pbnRtYXNrOw0KLQ0KLQlpZiAobGlrZWx5KHBlbmRp bmcgJiBJU0NfSU5UX0RET05FKSkgew0KLQkJc3Bpbl9sb2NrKCZpc2MtPmRtYV9xdWV1ZV9sb2Nr KTsNCi0JCWlmIChpc2MtPmN1cl9mcm0pIHsNCi0JCQlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICp2 YnVmID0gJmlzYy0+Y3VyX2ZybS0+dmI7DQotCQkJc3RydWN0IHZiMl9idWZmZXIgKnZiID0gJnZi dWYtPnZiMl9idWY7DQotDQotCQkJdmItPnRpbWVzdGFtcCA9IGt0aW1lX2dldF9ucygpOw0KLQkJ CXZidWYtPnNlcXVlbmNlID0gaXNjLT5zZXF1ZW5jZSsrOw0KLQkJCXZiMl9idWZmZXJfZG9uZSh2 YiwgVkIyX0JVRl9TVEFURV9ET05FKTsNCi0JCQlpc2MtPmN1cl9mcm0gPSBOVUxMOw0KLQkJfQ0K LQ0KLQkJaWYgKCFsaXN0X2VtcHR5KCZpc2MtPmRtYV9xdWV1ZSkgJiYgIWlzYy0+c3RvcCkgew0K LQkJCWlzYy0+Y3VyX2ZybSA9IGxpc3RfZmlyc3RfZW50cnkoJmlzYy0+ZG1hX3F1ZXVlLA0KLQkJ CQkJCSAgICAgc3RydWN0IGlzY19idWZmZXIsIGxpc3QpOw0KLQkJCWxpc3RfZGVsKCZpc2MtPmN1 cl9mcm0tPmxpc3QpOw0KLQ0KLQkJCWlzY19zdGFydF9kbWEoaXNjKTsNCi0JCX0NCi0NCi0JCWlm IChpc2MtPnN0b3ApDQotCQkJY29tcGxldGUoJmlzYy0+Y29tcCk7DQotDQotCQlyZXQgPSBJUlFf SEFORExFRDsNCi0JCXNwaW5fdW5sb2NrKCZpc2MtPmRtYV9xdWV1ZV9sb2NrKTsNCi0JfQ0KLQ0K LQlpZiAocGVuZGluZyAmIElTQ19JTlRfSElTRE9ORSkgew0KLQkJc2NoZWR1bGVfd29yaygmaXNj LT5hd2Jfd29yayk7DQotCQlyZXQgPSBJUlFfSEFORExFRDsNCi0JfQ0KLQ0KLQlyZXR1cm4gcmV0 Ow0KLX0NCi0NCi1zdGF0aWMgdm9pZCBpc2NfaGlzdF9jb3VudChzdHJ1Y3QgaXNjX2RldmljZSAq aXNjLCB1MzIgKm1pbiwgdTMyICptYXgpDQotew0KLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBp c2MtPnJlZ21hcDsNCi0Jc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsNCi0J dTMyICpoaXN0X2NvdW50ID0gJmN0cmxzLT5oaXN0X2NvdW50W2N0cmxzLT5oaXN0X2lkXTsNCi0J dTMyICpoaXN0X2VudHJ5ID0gJmN0cmxzLT5oaXN0X2VudHJ5WzBdOw0KLQl1MzIgaTsNCi0NCi0J Km1pbiA9IDA7DQotCSptYXggPSBISVNUX0VOVFJJRVM7DQotDQotCXJlZ21hcF9idWxrX3JlYWQo cmVnbWFwLCBJU0NfSElTX0VOVFJZLCBoaXN0X2VudHJ5LCBISVNUX0VOVFJJRVMpOw0KLQ0KLQkq aGlzdF9jb3VudCA9IDA7DQotCS8qDQotCSAqIHdlIGRlbGliZXJhdGVseSBpZ25vcmUgdGhlIGVu ZCBvZiB0aGUgaGlzdG9ncmFtLA0KLQkgKiB0aGUgbW9zdCB3aGl0ZSBwaXhlbHMNCi0JICovDQot CWZvciAoaSA9IDE7IGkgPCBISVNUX0VOVFJJRVM7IGkrKykgew0KLQkJaWYgKCpoaXN0X2VudHJ5 ICYmICEqbWluKQ0KLQkJCSptaW4gPSBpOw0KLQkJaWYgKCpoaXN0X2VudHJ5KQ0KLQkJCSptYXgg PSBpOw0KLQkJKmhpc3RfY291bnQgKz0gaSAqICgqaGlzdF9lbnRyeSsrKTsNCi0JfQ0KLQ0KLQlp ZiAoISptaW4pDQotCQkqbWluID0gMTsNCi19DQotDQotc3RhdGljIHZvaWQgaXNjX3diX3VwZGF0 ZShzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscykNCi17DQotCXUzMiAqaGlzdF9jb3VudCA9ICZjdHJs cy0+aGlzdF9jb3VudFswXTsNCi0JdTMyIGMsIG9mZnNldFs0XTsNCi0JdTY0IGF2ZyA9IDA7DQot CS8qIFdlIGNvbXB1dGUgdHdvIGdhaW5zLCBzdHJldGNoIGdhaW4gYW5kIGdyZXkgd29ybGQgZ2Fp biAqLw0KLQl1MzIgc19nYWluWzRdLCBnd19nYWluWzRdOw0KLQ0KLQkvKg0KLQkgKiBBY2NvcmRp bmcgdG8gR3JleSBXb3JsZCwgd2UgbmVlZCB0byBzZXQgZ2FpbnMgZm9yIFIvQiB0byBub3JtYWxp emUNCi0JICogdGhlbSB0b3dhcmRzIHRoZSBncmVlbiBjaGFubmVsLg0KLQkgKiBUaHVzIHdlIHdh bnQgdG8ga2VlcCBHcmVlbiBhcyBmaXhlZCBhbmQgYWRqdXN0IG9ubHkgUmVkL0JsdWUNCi0JICog Q29tcHV0ZSB0aGUgYXZlcmFnZSBvZiB0aGUgYm90aCBncmVlbiBjaGFubmVscyBmaXJzdA0KLQkg Ki8NCi0JYXZnID0gKHU2NCloaXN0X2NvdW50W0lTQ19ISVNfQ0ZHX01PREVfR1JdICsNCi0JCSh1 NjQpaGlzdF9jb3VudFtJU0NfSElTX0NGR19NT0RFX0dCXTsNCi0JYXZnID4+PSAxOw0KLQ0KLQkv KiBHcmVlbiBoaXN0b2dyYW0gaXMgbnVsbCwgbm90aGluZyB0byBkbyAqLw0KLQlpZiAoIWF2ZykN Ci0JCXJldHVybjsNCi0NCi0JZm9yIChjID0gSVNDX0hJU19DRkdfTU9ERV9HUjsgYyA8PSBJU0Nf SElTX0NGR19NT0RFX0I7IGMrKykgew0KLQkJLyoNCi0JCSAqIHRoZSBjb2xvciBvZmZzZXQgaXMg dGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIGhpc3RvZ3JhbS4NCi0JCSAqIHdlIHN0cmV0Y2ggdGhp cyBjb2xvciB0byB0aGUgZnVsbCByYW5nZSBieSBzdWJzdHJhY3RpbmcNCi0JCSAqIHRoaXMgdmFs dWUgZnJvbSB0aGUgY29sb3IgY29tcG9uZW50Lg0KLQkJICovDQotCQlvZmZzZXRbY10gPSBjdHJs cy0+aGlzdF9taW5tYXhbY11bSElTVF9NSU5fSU5ERVhdOw0KLQkJLyoNCi0JCSAqIFRoZSBvZmZz ZXQgaXMgYWx3YXlzIGF0IGxlYXN0IDEuIElmIHRoZSBvZmZzZXQgaXMgMSwgd2UgZG8NCi0JCSAq IG5vdCBuZWVkIHRvIGFkanVzdCBpdCwgc28gb3VyIHJlc3VsdCBtdXN0IGJlIHplcm8uDQotCQkg KiB0aGUgb2Zmc2V0IGlzIGNvbXB1dGVkIGluIGEgaGlzdG9ncmFtIG9uIDkgYml0cyAoMC4uNTEy KQ0KLQkJICogYnV0IHRoZSBvZmZzZXQgaW4gcmVnaXN0ZXIgaXMgYmFzZWQgb24NCi0JCSAqIDEy IGJpdHMgcGlwZWxpbmUgKDAuLjQwOTYpLg0KLQkJICogd2UgbmVlZCB0byBzaGlmdCB3aXRoIHRo ZSAzIGJpdHMgdGhhdCB0aGUgaGlzdG9ncmFtIGlzDQotCQkgKiBpZ25vcmluZw0KLQkJICovDQot CQljdHJscy0+b2Zmc2V0W2NdID0gKG9mZnNldFtjXSAtIDEpIDw8IDM7DQotDQotCQkvKiB0aGUg b2Zmc2V0IGlzIHRoZW4gdGFrZW4gYW5kIGNvbnZlcnRlZCB0byAyJ3MgY29tcGxlbWVudHMgKi8N Ci0JCWlmICghY3RybHMtPm9mZnNldFtjXSkNCi0JCQljdHJscy0+b2Zmc2V0W2NdID0gSVNDX1dC X09fWkVST19WQUw7DQotDQotCQkvKg0KLQkJICogdGhlIHN0cmV0Y2ggZ2FpbiBpcyB0aGUgdG90 YWwgbnVtYmVyIG9mIGhpc3RvZ3JhbSBiaW5zDQotCQkgKiBkaXZpZGVkIGJ5IHRoZSBhY3R1YWwg cmFuZ2Ugb2YgY29sb3IgY29tcG9uZW50IChNYXggLSBNaW4pDQotCQkgKiBJZiB3ZSBjb21wdXRl IGdhaW4gbGlrZSB0aGlzLCB0aGUgYWN0dWFsIGNvbG9yIGNvbXBvbmVudA0KLQkJICogd2lsbCBi ZSBzdHJldGNoZWQgdG8gdGhlIGZ1bGwgaGlzdG9ncmFtLg0KLQkJICogV2UgbmVlZCB0byBzaGlm dCA5IGJpdHMgZm9yIHByZWNpc2lvbiwgd2UgaGF2ZSA5IGJpdHMgZm9yDQotCQkgKiBkZWNpbWFs cw0KLQkJICovDQotCQlzX2dhaW5bY10gPSAoSElTVF9FTlRSSUVTIDw8IDkpIC8NCi0JCQkoY3Ry bHMtPmhpc3RfbWlubWF4W2NdW0hJU1RfTUFYX0lOREVYXSAtDQotCQkJY3RybHMtPmhpc3RfbWlu bWF4W2NdW0hJU1RfTUlOX0lOREVYXSArIDEpOw0KLQ0KLQkJLyoNCi0JCSAqIE5vdyB3ZSBoYXZl IHRvIGNvbXB1dGUgdGhlIGdhaW4gdy5yLnQuIHRoZSBhdmVyYWdlLg0KLQkJICogQWRkL2xvc2Ug Z2FpbiB0byB0aGUgY29tcG9uZW50IHRvd2FyZHMgdGhlIGF2ZXJhZ2UuDQotCQkgKiBJZiBpdCBo YXBwZW5zIHRoYXQgdGhlIGNvbXBvbmVudCBpcyB6ZXJvLCB1c2UgdGhlDQotCQkgKiBmaXhlZCBw b2ludCB2YWx1ZSA6IDEuMCBnYWluLg0KLQkJICovDQotCQlpZiAoaGlzdF9jb3VudFtjXSkNCi0J CQlnd19nYWluW2NdID0gZGl2X3U2NChhdmcgPDwgOSwgaGlzdF9jb3VudFtjXSk7DQotCQllbHNl DQotCQkJZ3dfZ2FpbltjXSA9IDEgPDwgOTsNCi0NCi0JCS8qIG11bHRpcGx5IGJvdGggZ2FpbnMg YW5kIGFkanVzdCBmb3IgZGVjaW1hbHMgKi8NCi0JCWN0cmxzLT5nYWluW2NdID0gc19nYWluW2Nd ICogZ3dfZ2FpbltjXTsNCi0JCWN0cmxzLT5nYWluW2NdID4+PSA5Ow0KLQl9DQotfQ0KLQ0KLXN0 YXRpYyB2b2lkIGlzY19hd2Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpDQotew0KLQlzdHJ1 Y3QgaXNjX2RldmljZSAqaXNjID0NCi0JCWNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgaXNjX2Rldmlj ZSwgYXdiX3dvcmspOw0KLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCi0J c3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsNCi0JdTMyIGhpc3RfaWQgPSBj dHJscy0+aGlzdF9pZDsNCi0JdTMyIGJheXNlbDsNCi0JdW5zaWduZWQgbG9uZyBmbGFnczsNCi0J dTMyIG1pbiwgbWF4Ow0KLQ0KLQkvKiBzdHJlYW1pbmcgaXMgbm90IGFjdGl2ZSBhbnltb3JlICov DQotCWlmIChpc2MtPnN0b3ApDQotCQlyZXR1cm47DQotDQotCWlmIChjdHJscy0+aGlzdF9zdGF0 ICE9IEhJU1RfRU5BQkxFRCkNCi0JCXJldHVybjsNCi0NCi0JaXNjX2hpc3RfY291bnQoaXNjLCAm bWluLCAmbWF4KTsNCi0JY3RybHMtPmhpc3RfbWlubWF4W2hpc3RfaWRdW0hJU1RfTUlOX0lOREVY XSA9IG1pbjsNCi0JY3RybHMtPmhpc3RfbWlubWF4W2hpc3RfaWRdW0hJU1RfTUFYX0lOREVYXSA9 IG1heDsNCi0NCi0JaWYgKGhpc3RfaWQgIT0gSVNDX0hJU19DRkdfTU9ERV9CKSB7DQotCQloaXN0 X2lkKys7DQotCX0gZWxzZSB7DQotCQlpc2Nfd2JfdXBkYXRlKGN0cmxzKTsNCi0JCWhpc3RfaWQg PSBJU0NfSElTX0NGR19NT0RFX0dSOw0KLQl9DQotDQotCWN0cmxzLT5oaXN0X2lkID0gaGlzdF9p ZDsNCi0JYmF5c2VsID0gaXNjLT5jb25maWcuc2RfZm9ybWF0LT5jZmFfYmF5Y2ZnIDw8IElTQ19I SVNfQ0ZHX0JBWVNFTF9TSElGVDsNCi0NCi0JLyogaWYgbm8gbW9yZSBhdXRvIHdoaXRlIGJhbGFu Y2UsIHJlc2V0IGNvbnRyb2xzLiAqLw0KLQlpZiAoY3RybHMtPmF3YiA9PSBJU0NfV0JfTk9ORSkN Ci0JCWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsNCi0NCi0JcG1fcnVudGltZV9nZXRfc3luYyhp c2MtPmRldik7DQotDQotCS8qDQotCSAqIG9ubHkgdXBkYXRlIGlmIHdlIGhhdmUgYWxsIHRoZSBy ZXF1aXJlZCBoaXN0b2dyYW1zIGFuZCBjb250cm9scw0KLQkgKiBpZiBhd2IgaGFzIGJlZW4gZGlz YWJsZWQsIHdlIG5lZWQgdG8gcmVzZXQgcmVnaXN0ZXJzIGFzIHdlbGwuDQotCSAqLw0KLQlpZiAo aGlzdF9pZCA9PSBJU0NfSElTX0NGR19NT0RFX0dSIHx8IGN0cmxzLT5hd2IgPT0gSVNDX1dCX05P TkUpIHsNCi0JCS8qDQotCQkgKiBJdCBtYXkgaGFwcGVuIHRoYXQgRE1BIERvbmUgSVJRIHdpbGwg dHJpZ2dlciB3aGlsZSB3ZSBhcmUNCi0JCSAqIHVwZGF0aW5nIHdoaXRlIGJhbGFuY2UgcmVnaXN0 ZXJzIGhlcmUuDQotCQkgKiBJbiB0aGF0IGNhc2UsIG9ubHkgcGFydHMgb2YgdGhlIGNvbnRyb2xz IGhhdmUgYmVlbiB1cGRhdGVkLg0KLQkJICogV2UgY2FuIGF2b2lkIHRoYXQgYnkgbG9ja2luZyB0 aGUgc2VjdGlvbi4NCi0JCSAqLw0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlzYy0+YXdiX2xvY2ss IGZsYWdzKTsNCi0JCWlzY191cGRhdGVfYXdiX2N0cmxzKGlzYyk7DQotCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZpc2MtPmF3Yl9sb2NrLCBmbGFncyk7DQotDQotCQkvKg0KLQkJICogaWYgd2Ug YXJlIGRvaW5nIGp1c3QgdGhlIG9uZSB0aW1lIHdoaXRlIGJhbGFuY2UgYWRqdXN0bWVudCwNCi0J CSAqIHdlIGFyZSBiYXNpY2FsbHkgZG9uZS4NCi0JCSAqLw0KLQkJaWYgKGN0cmxzLT5hd2IgPT0g SVNDX1dCX09ORVRJTUUpIHsNCi0JCQl2NGwyX2luZm8oJmlzYy0+djRsMl9kZXYsDQotCQkJCSAg IkNvbXBsZXRlZCBvbmUgdGltZSB3aGl0ZS1iYWxhbmNlIGFkanVzdG1lbnQuXG4iKTsNCi0JCQlj dHJscy0+YXdiID0gSVNDX1dCX05PTkU7DQotCQl9DQotCX0NCi0JcmVnbWFwX3dyaXRlKHJlZ21h cCwgSVNDX0hJU19DRkcsIGhpc3RfaWQgfCBiYXlzZWwgfCBJU0NfSElTX0NGR19SQVIpOw0KLQlp c2NfdXBkYXRlX3Byb2ZpbGUoaXNjKTsNCi0JLyogaWYgYXdiIGhhcyBiZWVuIGRpc2FibGVkLCB3 ZSBkb24ndCBuZWVkIHRvIHN0YXJ0IGFub3RoZXIgaGlzdG9ncmFtICovDQotCWlmIChjdHJscy0+ YXdiKQ0KLQkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NUUkxFTiwgSVNDX0NUUkxfSElTUkVR KTsNCi0NCi0JcG1fcnVudGltZV9wdXRfc3luYyhpc2MtPmRldik7DQotfQ0KLQ0KLXN0YXRpYyBp bnQgaXNjX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQ0KLXsNCi0Jc3RydWN0IGlzY19k ZXZpY2UgKmlzYyA9IGNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLA0KLQkJCQkJICAgICBzdHJ1 Y3QgaXNjX2RldmljZSwgY3RybHMuaGFuZGxlcik7DQotCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxz ID0gJmlzYy0+Y3RybHM7DQotDQotCWlmIChjdHJsLT5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX0lO QUNUSVZFKQ0KLQkJcmV0dXJuIDA7DQotDQotCXN3aXRjaCAoY3RybC0+aWQpIHsNCi0JY2FzZSBW NEwyX0NJRF9CUklHSFRORVNTOg0KLQkJY3RybHMtPmJyaWdodG5lc3MgPSBjdHJsLT52YWwgJiBJ U0NfQ0JDX0JSSUdIVF9NQVNLOw0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6 DQotCQljdHJscy0+Y29udHJhc3QgPSBjdHJsLT52YWwgJiBJU0NfQ0JDX0NPTlRSQVNUX01BU0s7 DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX0NJRF9HQU1NQToNCi0JCWN0cmxzLT5nYW1tYV9pbmRl eCA9IGN0cmwtPnZhbDsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFM QU5DRToNCi0JCWlmIChjdHJsLT52YWwgPT0gMSkNCi0JCQljdHJscy0+YXdiID0gSVNDX1dCX0FV VE87DQotCQllbHNlDQotCQkJY3RybHMtPmF3YiA9IElTQ19XQl9OT05FOw0KLQ0KLQkJLyogd2Ug ZGlkIG5vdCBjb25maWd1cmUgSVNDIHlldCAqLw0KLQkJaWYgKCFpc2MtPmNvbmZpZy5zZF9mb3Jt YXQpDQotCQkJYnJlYWs7DQotDQotCQlpZiAoY3RybHMtPmhpc3Rfc3RhdCAhPSBISVNUX0VOQUJM RUQpDQotCQkJaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2MpOw0KLQ0KLQkJaWYgKGlzYy0+Y3RybHMu YXdiID09IElTQ19XQl9BVVRPICYmDQotCQkgICAgdmIyX2lzX3N0cmVhbWluZygmaXNjLT52YjJf dmlkcSkgJiYNCi0JCSAgICBJU0NfSVNfRk9STUFUX1JBVyhpc2MtPmNvbmZpZy5zZF9mb3JtYXQt Pm1idXNfY29kZSkpDQotCQkJaXNjX3NldF9oaXN0b2dyYW0oaXNjLCB0cnVlKTsNCi0NCi0JCWJy ZWFrOw0KLQljYXNlIFY0TDJfQ0lEX0RPX1dISVRFX0JBTEFOQ0U6DQotCQkvKiBpZiBBV0IgaXMg ZW5hYmxlZCwgZG8gbm90aGluZyAqLw0KLQkJaWYgKGN0cmxzLT5hd2IgPT0gSVNDX1dCX0FVVE8p DQotCQkJcmV0dXJuIDA7DQotDQotCQljdHJscy0+YXdiID0gSVNDX1dCX09ORVRJTUU7DQotCQlp c2Nfc2V0X2hpc3RvZ3JhbShpc2MsIHRydWUpOw0KLQkJdjRsMl9kYmcoMSwgZGVidWcsICZpc2Mt PnY0bDJfZGV2LA0KLQkJCSAiT25lIHRpbWUgd2hpdGUtYmFsYW5jZSBzdGFydGVkLlxuIik7DQot CQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCXJldHVybiAtRUlOVkFMOw0KLQl9DQotDQotCXJldHVy biAwOw0KLX0NCi0NCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgaXNjX2N0cmxf b3BzID0gew0KLQkuc19jdHJsCT0gaXNjX3NfY3RybCwNCi19Ow0KLQ0KLXN0YXRpYyBpbnQgaXNj X2N0cmxfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0JY29uc3Qgc3RydWN0IHY0 bDJfY3RybF9vcHMgKm9wcyA9ICZpc2NfY3RybF9vcHM7DQotCXN0cnVjdCBpc2NfY3RybHMgKmN0 cmxzID0gJmlzYy0+Y3RybHM7DQotCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsID0gJmN0 cmxzLT5oYW5kbGVyOw0KLQlpbnQgcmV0Ow0KLQ0KLQljdHJscy0+aGlzdF9zdGF0ID0gSElTVF9J TklUOw0KLQlpc2NfcmVzZXRfYXdiX2N0cmxzKGlzYyk7DQotDQotCXJldCA9IHY0bDJfY3RybF9o YW5kbGVyX2luaXQoaGRsLCA1KTsNCi0JaWYgKHJldCA8IDApDQotCQlyZXR1cm4gcmV0Ow0KLQ0K LQljdHJscy0+YnJpZ2h0bmVzcyA9IDA7DQotCWN0cmxzLT5jb250cmFzdCA9IDI1NjsNCi0NCi0J djRsMl9jdHJsX25ld19zdGQoaGRsLCBvcHMsIFY0TDJfQ0lEX0JSSUdIVE5FU1MsIC0xMDI0LCAx MDIzLCAxLCAwKTsNCi0JdjRsMl9jdHJsX25ld19zdGQoaGRsLCBvcHMsIFY0TDJfQ0lEX0NPTlRS QVNULCAtMjA0OCwgMjA0NywgMSwgMjU2KTsNCi0JdjRsMl9jdHJsX25ld19zdGQoaGRsLCBvcHMs IFY0TDJfQ0lEX0dBTU1BLCAwLCBHQU1NQV9NQVgsIDEsIDIpOw0KLQl2NGwyX2N0cmxfbmV3X3N0 ZChoZGwsIG9wcywgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFLCAwLCAxLCAxLCAxKTsNCi0N Ci0JLyogZG9fd2hpdGVfYmFsYW5jZSBpcyBhIGJ1dHRvbiwgc28gbWluLG1heCxzdGVwLGRlZmF1 bHQgYXJlIGlnbm9yZWQgKi8NCi0JaXNjLT5kb193Yl9jdHJsID0gdjRsMl9jdHJsX25ld19zdGQo aGRsLCBvcHMsIFY0TDJfQ0lEX0RPX1dISVRFX0JBTEFOQ0UsDQotCQkJCQkgICAgMCwgMCwgMCwg MCk7DQotDQotCXY0bDJfY3RybF9hY3RpdmF0ZShpc2MtPmRvX3diX2N0cmwsIGZhbHNlKTsNCi0N Ci0JdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoaGRsKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0K LXN0YXRpYyBpbnQgaXNjX2FzeW5jX2JvdW5kKHN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICpu b3RpZmllciwNCi0JCQkgICAgc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYsDQotCQkJICAgIHN0 cnVjdCB2NGwyX2FzeW5jX3N1YmRldiAqYXNkKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlz YyA9IGNvbnRhaW5lcl9vZihub3RpZmllci0+djRsMl9kZXYsDQotCQkJCQkgICAgICBzdHJ1Y3Qg aXNjX2RldmljZSwgdjRsMl9kZXYpOw0KLQlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgKnN1YmRl dl9lbnRpdHkgPQ0KLQkJY29udGFpbmVyX29mKG5vdGlmaWVyLCBzdHJ1Y3QgaXNjX3N1YmRldl9l bnRpdHksIG5vdGlmaWVyKTsNCi0NCi0JaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQoJmlzYy0+dmlk ZW9fZGV2KSkgew0KLQkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJvbmx5IHN1cHBvcnRzIG9u ZSBzdWItZGV2aWNlLlxuIik7DQotCQlyZXR1cm4gLUVCVVNZOw0KLQl9DQotDQotCXN1YmRldl9l bnRpdHktPnNkID0gc3ViZGV2Ow0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIHZvaWQg aXNjX2FzeW5jX3VuYmluZChzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAqbm90aWZpZXIsDQot CQkJICAgICAgc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYsDQotCQkJICAgICAgc3RydWN0IHY0 bDJfYXN5bmNfc3ViZGV2ICphc2QpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gY29u dGFpbmVyX29mKG5vdGlmaWVyLT52NGwyX2RldiwNCi0JCQkJCSAgICAgIHN0cnVjdCBpc2NfZGV2 aWNlLCB2NGwyX2Rldik7DQotCWNhbmNlbF93b3JrX3N5bmMoJmlzYy0+YXdiX3dvcmspOw0KLQl2 aWRlb191bnJlZ2lzdGVyX2RldmljZSgmaXNjLT52aWRlb19kZXYpOw0KLQl2NGwyX2N0cmxfaGFu ZGxlcl9mcmVlKCZpc2MtPmN0cmxzLmhhbmRsZXIpOw0KLX0NCi0NCi1zdGF0aWMgc3RydWN0IGlz Y19mb3JtYXQgKmZpbmRfZm9ybWF0X2J5X2NvZGUodW5zaWduZWQgaW50IGNvZGUsIGludCAqaW5k ZXgpDQotew0KLQlzdHJ1Y3QgaXNjX2Zvcm1hdCAqZm10ID0gJmZvcm1hdHNfbGlzdFswXTsNCi0J dW5zaWduZWQgaW50IGk7DQotDQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZvcm1hdHNf bGlzdCk7IGkrKykgew0KLQkJaWYgKGZtdC0+bWJ1c19jb2RlID09IGNvZGUpIHsNCi0JCQkqaW5k ZXggPSBpOw0KLQkJCXJldHVybiBmbXQ7DQotCQl9DQotDQotCQlmbXQrKzsNCi0JfQ0KLQ0KLQly ZXR1cm4gTlVMTDsNCi19DQotDQotc3RhdGljIGludCBpc2NfZm9ybWF0c19pbml0KHN0cnVjdCBp c2NfZGV2aWNlICppc2MpDQotew0KLQlzdHJ1Y3QgaXNjX2Zvcm1hdCAqZm10Ow0KLQlzdHJ1Y3Qg djRsMl9zdWJkZXYgKnN1YmRldiA9IGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkOw0KLQl1bnNpZ25l ZCBpbnQgbnVtX2ZtdHMsIGksIGo7DQotCXUzMiBsaXN0X3NpemUgPSBBUlJBWV9TSVpFKGZvcm1h dHNfbGlzdCk7DQotCXN0cnVjdCB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51bSBtYnVzX2NvZGUg PSB7DQotCQkud2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0KLQl9Ow0KLQ0KLQlu dW1fZm10cyA9IDA7DQotCXdoaWxlICghdjRsMl9zdWJkZXZfY2FsbChzdWJkZXYsIHBhZCwgZW51 bV9tYnVzX2NvZGUsDQotCSAgICAgICBOVUxMLCAmbWJ1c19jb2RlKSkgew0KLQkJbWJ1c19jb2Rl LmluZGV4Kys7DQotDQotCQlmbXQgPSBmaW5kX2Zvcm1hdF9ieV9jb2RlKG1idXNfY29kZS5jb2Rl LCAmaSk7DQotCQlpZiAoIWZtdCkgew0KLQkJCXY0bDJfd2FybigmaXNjLT52NGwyX2RldiwgIk1i dXMgY29kZSAleCBub3Qgc3VwcG9ydGVkXG4iLA0KLQkJCQkgIG1idXNfY29kZS5jb2RlKTsNCi0J CQljb250aW51ZTsNCi0JCX0NCi0NCi0JCWZtdC0+c2Rfc3VwcG9ydCA9IHRydWU7DQotCQludW1f Zm10cysrOw0KLQl9DQotDQotCWlmICghbnVtX2ZtdHMpDQotCQlyZXR1cm4gLUVOWElPOw0KLQ0K LQlpc2MtPm51bV91c2VyX2Zvcm1hdHMgPSBudW1fZm10czsNCi0JaXNjLT51c2VyX2Zvcm1hdHMg PSBkZXZtX2tjYWxsb2MoaXNjLT5kZXYsDQotCQkJCQkgbnVtX2ZtdHMsIHNpemVvZigqaXNjLT51 c2VyX2Zvcm1hdHMpLA0KLQkJCQkJIEdGUF9LRVJORUwpOw0KLQlpZiAoIWlzYy0+dXNlcl9mb3Jt YXRzKQ0KLQkJcmV0dXJuIC1FTk9NRU07DQotDQotCWZtdCA9ICZmb3JtYXRzX2xpc3RbMF07DQot CWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbGlzdF9zaXplOyBpKyspIHsNCi0JCWlmIChmbXQtPnNk X3N1cHBvcnQpDQotCQkJaXNjLT51c2VyX2Zvcm1hdHNbaisrXSA9IGZtdDsNCi0JCWZtdCsrOw0K LQl9DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19zZXRfZGVmYXVsdF9m bXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXN0cnVjdCB2NGwyX2Zvcm1hdCBmID0g ew0KLQkJLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsDQotCQkuZm10LnBpeCA9 IHsNCi0JCQkud2lkdGgJCT0gVkdBX1dJRFRILA0KLQkJCS5oZWlnaHQJCT0gVkdBX0hFSUdIVCwN Ci0JCQkuZmllbGQJCT0gVjRMMl9GSUVMRF9OT05FLA0KLQkJCS5waXhlbGZvcm1hdAk9IGlzYy0+ dXNlcl9mb3JtYXRzWzBdLT5mb3VyY2MsDQotCQl9LA0KLQl9Ow0KLQlpbnQgcmV0Ow0KLQ0KLQly ZXQgPSBpc2NfdHJ5X2ZtdChpc2MsICZmLCBOVUxMKTsNCi0JaWYgKHJldCkNCi0JCXJldHVybiBy ZXQ7DQotDQotCWlzYy0+Zm10ID0gZjsNCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQg aXNjX2FzeW5jX2NvbXBsZXRlKHN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICpub3RpZmllcikN Ci17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJfb2Yobm90aWZpZXItPnY0 bDJfZGV2LA0KLQkJCQkJICAgICAgc3RydWN0IGlzY19kZXZpY2UsIHY0bDJfZGV2KTsNCi0Jc3Ry dWN0IHZpZGVvX2RldmljZSAqdmRldiA9ICZpc2MtPnZpZGVvX2RldjsNCi0Jc3RydWN0IHZiMl9x dWV1ZSAqcSA9ICZpc2MtPnZiMl92aWRxOw0KLQlpbnQgcmV0Ow0KLQ0KLQlJTklUX1dPUksoJmlz Yy0+YXdiX3dvcmssIGlzY19hd2Jfd29yayk7DQotDQotCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lz dGVyX3N1YmRldl9ub2RlcygmaXNjLT52NGwyX2Rldik7DQotCWlmIChyZXQgPCAwKSB7DQotCQl2 NGwyX2VycigmaXNjLT52NGwyX2RldiwgIkZhaWxlZCB0byByZWdpc3RlciBzdWJkZXYgbm9kZXNc biIpOw0KLQkJcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQlpc2MtPmN1cnJlbnRfc3ViZGV2ID0gY29u dGFpbmVyX29mKG5vdGlmaWVyLA0KLQkJCQkJICAgc3RydWN0IGlzY19zdWJkZXZfZW50aXR5LCBu b3RpZmllcik7DQotCW11dGV4X2luaXQoJmlzYy0+bG9jayk7DQotCWluaXRfY29tcGxldGlvbigm aXNjLT5jb21wKTsNCi0NCi0JLyogSW5pdGlhbGl6ZSB2aWRlb2J1ZjIgcXVldWUgKi8NCi0JcS0+ dHlwZQkJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOw0KLQlxLT5pb19tb2RlcwkJPSBW QjJfTU1BUCB8IFZCMl9ETUFCVUYgfCBWQjJfUkVBRDsNCi0JcS0+ZHJ2X3ByaXYJCT0gaXNjOw0K LQlxLT5idWZfc3RydWN0X3NpemUJPSBzaXplb2Yoc3RydWN0IGlzY19idWZmZXIpOw0KLQlxLT5v cHMJCQk9ICZpc2NfdmIyX29wczsNCi0JcS0+bWVtX29wcwkJPSAmdmIyX2RtYV9jb250aWdfbWVt b3BzOw0KLQlxLT50aW1lc3RhbXBfZmxhZ3MJPSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9NT05P VE9OSUM7DQotCXEtPmxvY2sJCQk9ICZpc2MtPmxvY2s7DQotCXEtPm1pbl9idWZmZXJzX25lZWRl ZAk9IDE7DQotCXEtPmRldgkJCT0gaXNjLT5kZXY7DQotDQotCXJldCA9IHZiMl9xdWV1ZV9pbml0 KHEpOw0KLQlpZiAocmV0IDwgMCkgew0KLQkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsDQotCQkJ ICJ2YjJfcXVldWVfaW5pdCgpIGZhaWxlZDogJWRcbiIsIHJldCk7DQotCQlyZXR1cm4gcmV0Ow0K LQl9DQotDQotCS8qIEluaXQgdmlkZW8gZG1hIHF1ZXVlcyAqLw0KLQlJTklUX0xJU1RfSEVBRCgm aXNjLT5kbWFfcXVldWUpOw0KLQlzcGluX2xvY2tfaW5pdCgmaXNjLT5kbWFfcXVldWVfbG9jayk7 DQotCXNwaW5fbG9ja19pbml0KCZpc2MtPmF3Yl9sb2NrKTsNCi0NCi0JcmV0ID0gaXNjX2Zvcm1h dHNfaW5pdChpc2MpOw0KLQlpZiAocmV0IDwgMCkgew0KLQkJdjRsMl9lcnIoJmlzYy0+djRsMl9k ZXYsDQotCQkJICJJbml0IGZvcm1hdCBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KLQkJcmV0dXJuIHJl dDsNCi0JfQ0KLQ0KLQlyZXQgPSBpc2Nfc2V0X2RlZmF1bHRfZm10KGlzYyk7DQotCWlmIChyZXQp IHsNCi0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiQ291bGQgbm90IHNldCBkZWZhdWx0IGZv cm1hdFxuIik7DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQotDQotCXJldCA9IGlzY19jdHJsX2luaXQo aXNjKTsNCi0JaWYgKHJldCkgew0KLQkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJJbml0IGlz YyBjdHJvbHMgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCi0JCXJldHVybiByZXQ7DQotCX0NCi0NCi0J LyogUmVnaXN0ZXIgdmlkZW8gZGV2aWNlICovDQotCXN0cnNjcHkodmRldi0+bmFtZSwgQVRNRUxf SVNDX05BTUUsIHNpemVvZih2ZGV2LT5uYW1lKSk7DQotCXZkZXYtPnJlbGVhc2UJCT0gdmlkZW9f ZGV2aWNlX3JlbGVhc2VfZW1wdHk7DQotCXZkZXYtPmZvcHMJCT0gJmlzY19mb3BzOw0KLQl2ZGV2 LT5pb2N0bF9vcHMJCT0gJmlzY19pb2N0bF9vcHM7DQotCXZkZXYtPnY0bDJfZGV2CQk9ICZpc2Mt PnY0bDJfZGV2Ow0KLQl2ZGV2LT52ZmxfZGlyCQk9IFZGTF9ESVJfUlg7DQotCXZkZXYtPnF1ZXVl CQk9IHE7DQotCXZkZXYtPmxvY2sJCT0gJmlzYy0+bG9jazsNCi0JdmRldi0+Y3RybF9oYW5kbGVy CT0gJmlzYy0+Y3RybHMuaGFuZGxlcjsNCi0JdmRldi0+ZGV2aWNlX2NhcHMJPSBWNEwyX0NBUF9T VFJFQU1JTkcgfCBWNEwyX0NBUF9WSURFT19DQVBUVVJFOw0KLQl2aWRlb19zZXRfZHJ2ZGF0YSh2 ZGV2LCBpc2MpOw0KLQ0KLQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmRldiwgVkZMX1RZ UEVfR1JBQkJFUiwgLTEpOw0KLQlpZiAocmV0IDwgMCkgew0KLQkJdjRsMl9lcnIoJmlzYy0+djRs Ml9kZXYsDQotCQkJICJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkOiAlZFxuIiwgcmV0KTsN Ci0JCXJldHVybiByZXQ7DQotCX0NCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBjb25z dCBzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllcl9vcGVyYXRpb25zIGlzY19hc3luY19vcHMgPSB7 DQotCS5ib3VuZCA9IGlzY19hc3luY19ib3VuZCwNCi0JLnVuYmluZCA9IGlzY19hc3luY191bmJp bmQsDQotCS5jb21wbGV0ZSA9IGlzY19hc3luY19jb21wbGV0ZSwNCi19Ow0KLQ0KLXN0YXRpYyB2 b2lkIGlzY19zdWJkZXZfY2xlYW51cChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0Jc3Ry dWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXZfZW50aXR5Ow0KLQ0KLQlsaXN0X2Zvcl9lYWNo X2VudHJ5KHN1YmRldl9lbnRpdHksICZpc2MtPnN1YmRldl9lbnRpdGllcywgbGlzdCkgew0KLQkJ djRsMl9hc3luY19ub3RpZmllcl91bnJlZ2lzdGVyKCZzdWJkZXZfZW50aXR5LT5ub3RpZmllcik7 DQotCQl2NGwyX2FzeW5jX25vdGlmaWVyX2NsZWFudXAoJnN1YmRldl9lbnRpdHktPm5vdGlmaWVy KTsNCi0JfQ0KLQ0KLQlJTklUX0xJU1RfSEVBRCgmaXNjLT5zdWJkZXZfZW50aXRpZXMpOw0KLX0N Ci0NCi1zdGF0aWMgaW50IGlzY19waXBlbGluZV9pbml0KHN0cnVjdCBpc2NfZGV2aWNlICppc2Mp DQotew0KLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpc2MtPmRldjsNCi0Jc3RydWN0IHJlZ21hcCAq cmVnbWFwID0gaXNjLT5yZWdtYXA7DQotCXN0cnVjdCByZWdtYXBfZmllbGQgKnJlZ3M7DQotCXVu c2lnbmVkIGludCBpOw0KLQ0KLQkvKiBXQi0tPkNGQS0tPkNDLS0+R0FNLS0+Q1NDLS0+Q0JDLS0+ U1VCNDIyLS0+U1VCNDIwICovDQotCWNvbnN0IHN0cnVjdCByZWdfZmllbGQgcmVnZmllbGRzW0lT Q19QSVBFX0xJTkVfTk9ERV9OVU1dID0gew0KLQkJUkVHX0ZJRUxEKElTQ19XQl9DVFJMLCAwLCAw KSwNCi0JCVJFR19GSUVMRChJU0NfQ0ZBX0NUUkwsIDAsIDApLA0KLQkJUkVHX0ZJRUxEKElTQ19D Q19DVFJMLCAwLCAwKSwNCi0JCVJFR19GSUVMRChJU0NfR0FNX0NUUkwsIDAsIDApLA0KLQkJUkVH X0ZJRUxEKElTQ19HQU1fQ1RSTCwgMSwgMSksDQotCQlSRUdfRklFTEQoSVNDX0dBTV9DVFJMLCAy LCAyKSwNCi0JCVJFR19GSUVMRChJU0NfR0FNX0NUUkwsIDMsIDMpLA0KLQkJUkVHX0ZJRUxEKElT Q19DU0NfQ1RSTCwgMCwgMCksDQotCQlSRUdfRklFTEQoSVNDX0NCQ19DVFJMLCAwLCAwKSwNCi0J CVJFR19GSUVMRChJU0NfU1VCNDIyX0NUUkwsIDAsIDApLA0KLQkJUkVHX0ZJRUxEKElTQ19TVUI0 MjBfQ1RSTCwgMCwgMCksDQotCX07DQotDQotCWZvciAoaSA9IDA7IGkgPCBJU0NfUElQRV9MSU5F X05PREVfTlVNOyBpKyspIHsNCi0JCXJlZ3MgPSBkZXZtX3JlZ21hcF9maWVsZF9hbGxvYyhkZXYs IHJlZ21hcCwgcmVnZmllbGRzW2ldKTsNCi0JCWlmIChJU19FUlIocmVncykpDQotCQkJcmV0dXJu IFBUUl9FUlIocmVncyk7DQotDQotCQlpc2MtPnBpcGVsaW5lW2ldID0gIHJlZ3M7DQotCX0NCi0N Ci0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3BhcnNlX2R0KHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqbnAgPSBkZXYtPm9mX25vZGU7DQotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZXBuID0gTlVMTCwg KnJlbTsNCi0Jc3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXZfZW50aXR5Ow0KLQl1bnNp Z25lZCBpbnQgZmxhZ3M7DQotCWludCByZXQ7DQotDQotCUlOSVRfTElTVF9IRUFEKCZpc2MtPnN1 YmRldl9lbnRpdGllcyk7DQotDQotCXdoaWxlICgxKSB7DQotCQlzdHJ1Y3QgdjRsMl9md25vZGVf ZW5kcG9pbnQgdjRsMl9lcG4gPSB7IC5idXNfdHlwZSA9IDAgfTsNCi0NCi0JCWVwbiA9IG9mX2dy YXBoX2dldF9uZXh0X2VuZHBvaW50KG5wLCBlcG4pOw0KLQkJaWYgKCFlcG4pDQotCQkJcmV0dXJu IDA7DQotDQotCQlyZW0gPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVwbik7DQot CQlpZiAoIXJlbSkgew0KLQkJCWRldl9ub3RpY2UoZGV2LCAiUmVtb3RlIGRldmljZSBhdCAlcE9G IG5vdCBmb3VuZFxuIiwNCi0JCQkJICAgZXBuKTsNCi0JCQljb250aW51ZTsNCi0JCX0NCi0NCi0J CXJldCA9IHY0bDJfZndub2RlX2VuZHBvaW50X3BhcnNlKG9mX2Z3bm9kZV9oYW5kbGUoZXBuKSwN Ci0JCQkJCQkgJnY0bDJfZXBuKTsNCi0JCWlmIChyZXQpIHsNCi0JCQlvZl9ub2RlX3B1dChyZW0p Ow0KLQkJCXJldCA9IC1FSU5WQUw7DQotCQkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgcGFyc2Ug dGhlIGVuZHBvaW50XG4iKTsNCi0JCQlicmVhazsNCi0JCX0NCi0NCi0JCXN1YmRldl9lbnRpdHkg PSBkZXZtX2t6YWxsb2MoZGV2LA0KLQkJCQkJICBzaXplb2YoKnN1YmRldl9lbnRpdHkpLCBHRlBf S0VSTkVMKTsNCi0JCWlmICghc3ViZGV2X2VudGl0eSkgew0KLQkJCW9mX25vZGVfcHV0KHJlbSk7 DQotCQkJcmV0ID0gLUVOT01FTTsNCi0JCQlicmVhazsNCi0JCX0NCi0NCi0JCS8qIGFzZCB3aWxs IGJlIGZyZWVkIGJ5IHRoZSBzdWJzeXN0ZW0gb25jZSBpdCdzIGFkZGVkIHRvIHRoZQ0KLQkJICog bm90aWZpZXIgbGlzdA0KLQkJICovDQotCQlzdWJkZXZfZW50aXR5LT5hc2QgPSBremFsbG9jKHNp emVvZigqc3ViZGV2X2VudGl0eS0+YXNkKSwNCi0JCQkJCSAgICAgR0ZQX0tFUk5FTCk7DQotCQlp ZiAoIXN1YmRldl9lbnRpdHktPmFzZCkgew0KLQkJCW9mX25vZGVfcHV0KHJlbSk7DQotCQkJcmV0 ID0gLUVOT01FTTsNCi0JCQlicmVhazsNCi0JCX0NCi0NCi0JCWZsYWdzID0gdjRsMl9lcG4uYnVz LnBhcmFsbGVsLmZsYWdzOw0KLQ0KLQkJaWYgKGZsYWdzICYgVjRMMl9NQlVTX0hTWU5DX0FDVElW RV9MT1cpDQotCQkJc3ViZGV2X2VudGl0eS0+cGZlX2NmZzAgPSBJU0NfUEZFX0NGRzBfSFBPTF9M T1c7DQotDQotCQlpZiAoZmxhZ3MgJiBWNEwyX01CVVNfVlNZTkNfQUNUSVZFX0xPVykNCi0JCQlz dWJkZXZfZW50aXR5LT5wZmVfY2ZnMCB8PSBJU0NfUEZFX0NGRzBfVlBPTF9MT1c7DQotDQotCQlp ZiAoZmxhZ3MgJiBWNEwyX01CVVNfUENMS19TQU1QTEVfRkFMTElORykNCi0JCQlzdWJkZXZfZW50 aXR5LT5wZmVfY2ZnMCB8PSBJU0NfUEZFX0NGRzBfUFBPTF9MT1c7DQotDQotCQlpZiAodjRsMl9l cG4uYnVzX3R5cGUgPT0gVjRMMl9NQlVTX0JUNjU2KQ0KLQkJCXN1YmRldl9lbnRpdHktPnBmZV9j ZmcwIHw9IElTQ19QRkVfQ0ZHMF9DQ0lSX0NSQyB8DQotCQkJCQlJU0NfUEZFX0NGRzBfQ0NJUjY1 NjsNCi0NCi0JCXN1YmRldl9lbnRpdHktPmFzZC0+bWF0Y2hfdHlwZSA9IFY0TDJfQVNZTkNfTUFU Q0hfRldOT0RFOw0KLQkJc3ViZGV2X2VudGl0eS0+YXNkLT5tYXRjaC5md25vZGUgPQ0KLQkJCW9m X2Z3bm9kZV9oYW5kbGUocmVtKTsNCi0JCWxpc3RfYWRkX3RhaWwoJnN1YmRldl9lbnRpdHktPmxp c3QsICZpc2MtPnN1YmRldl9lbnRpdGllcyk7DQotCX0NCi0NCi0Jb2Zfbm9kZV9wdXQoZXBuKTsN Ci0JcmV0dXJuIHJldDsNCi19DQotDQotLyogcmVnbWFwIGNvbmZpZ3VyYXRpb24gKi8NCi0jZGVm aW5lIEFUTUVMX0lTQ19SRUdfTUFYICAgIDB4YmZjDQotc3RhdGljIGNvbnN0IHN0cnVjdCByZWdt YXBfY29uZmlnIGlzY19yZWdtYXBfY29uZmlnID0gew0KLQkucmVnX2JpdHMgICAgICAgPSAzMiwN Ci0JLnJlZ19zdHJpZGUgICAgID0gNCwNCi0JLnZhbF9iaXRzICAgICAgID0gMzIsDQotCS5tYXhf cmVnaXN0ZXIJPSBBVE1FTF9JU0NfUkVHX01BWCwNCi19Ow0KLQ0KLXN0YXRpYyBpbnQgYXRtZWxf aXNjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQotew0KLQlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjOw0KLQlzdHJ1 Y3QgcmVzb3VyY2UgKnJlczsNCi0Jdm9pZCBfX2lvbWVtICppb19iYXNlOw0KLQlzdHJ1Y3QgaXNj X3N1YmRldl9lbnRpdHkgKnN1YmRldl9lbnRpdHk7DQotCWludCBpcnE7DQotCWludCByZXQ7DQot DQotCWlzYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaXNjKSwgR0ZQX0tFUk5FTCk7DQot CWlmICghaXNjKQ0KLQkJcmV0dXJuIC1FTk9NRU07DQotDQotCXBsYXRmb3JtX3NldF9kcnZkYXRh KHBkZXYsIGlzYyk7DQotCWlzYy0+ZGV2ID0gZGV2Ow0KLQ0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOw0KLQlpb19iYXNlID0gZGV2bV9pb3Jl bWFwX3Jlc291cmNlKGRldiwgcmVzKTsNCi0JaWYgKElTX0VSUihpb19iYXNlKSkNCi0JCXJldHVy biBQVFJfRVJSKGlvX2Jhc2UpOw0KLQ0KLQlpc2MtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRf bW1pbyhkZXYsIGlvX2Jhc2UsICZpc2NfcmVnbWFwX2NvbmZpZyk7DQotCWlmIChJU19FUlIoaXNj LT5yZWdtYXApKSB7DQotCQlyZXQgPSBQVFJfRVJSKGlzYy0+cmVnbWFwKTsNCi0JCWRldl9lcnIo ZGV2LCAiZmFpbGVkIHRvIGluaXQgcmVnaXN0ZXIgbWFwOiAlZFxuIiwgcmV0KTsNCi0JCXJldHVy biByZXQ7DQotCX0NCi0NCi0JaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsNCi0JaWYg KGlycSA8IDApIHsNCi0JCXJldCA9IGlycTsNCi0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdl dCBpcnE6ICVkXG4iLCByZXQpOw0KLQkJcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQlyZXQgPSBkZXZt X3JlcXVlc3RfaXJxKGRldiwgaXJxLCBpc2NfaW50ZXJydXB0LCAwLA0KLQkJCSAgICAgICBBVE1F TF9JU0NfTkFNRSwgaXNjKTsNCi0JaWYgKHJldCA8IDApIHsNCi0JCWRldl9lcnIoZGV2LCAiY2Fu J3QgcmVnaXN0ZXIgSVNSIGZvciBJUlEgJXUgKHJldD0laSlcbiIsDQotCQkJaXJxLCByZXQpOw0K LQkJcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQlyZXQgPSBpc2NfcGlwZWxpbmVfaW5pdChpc2MpOw0K LQlpZiAocmV0KQ0KLQkJcmV0dXJuIHJldDsNCi0NCi0JaXNjLT5oY2xvY2sgPSBkZXZtX2Nsa19n ZXQoZGV2LCAiaGNsb2NrIik7DQotCWlmIChJU19FUlIoaXNjLT5oY2xvY2spKSB7DQotCQlyZXQg PSBQVFJfRVJSKGlzYy0+aGNsb2NrKTsNCi0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBo Y2xvY2s6ICVkXG4iLCByZXQpOw0KLQkJcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQlyZXQgPSBjbGtf cHJlcGFyZV9lbmFibGUoaXNjLT5oY2xvY2spOw0KLQlpZiAocmV0KSB7DQotCQlkZXZfZXJyKGRl diwgImZhaWxlZCB0byBlbmFibGUgaGNsb2NrOiAlZFxuIiwgcmV0KTsNCi0JCXJldHVybiByZXQ7 DQotCX0NCi0NCi0JcmV0ID0gaXNjX2Nsa19pbml0KGlzYyk7DQotCWlmIChyZXQpIHsNCi0JCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgaXNjIGNsb2NrOiAlZFxuIiwgcmV0KTsNCi0JCWdv dG8gdW5wcmVwYXJlX2hjbGs7DQotCX0NCi0NCi0JaXNjLT5pc3BjayA9IGlzYy0+aXNjX2Nsa3Nb SVNDX0lTUENLXS5jbGs7DQotDQotCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpc2MtPmlzcGNr KTsNCi0JaWYgKHJldCkgew0KLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIGlzcGNr OiAlZFxuIiwgcmV0KTsNCi0JCWdvdG8gdW5wcmVwYXJlX2hjbGs7DQotCX0NCi0NCi0JLyogaXNw Y2sgc2hvdWxkIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gaGNsb2NrICovDQotCXJldCA9IGNsa19z ZXRfcmF0ZShpc2MtPmlzcGNrLCBjbGtfZ2V0X3JhdGUoaXNjLT5oY2xvY2spKTsNCi0JaWYgKHJl dCkgew0KLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc2V0IGlzcGNrIHJhdGU6ICVkXG4iLCBy ZXQpOw0KLQkJZ290byB1bnByZXBhcmVfY2xrOw0KLQl9DQotDQotCXJldCA9IHY0bDJfZGV2aWNl X3JlZ2lzdGVyKGRldiwgJmlzYy0+djRsMl9kZXYpOw0KLQlpZiAocmV0KSB7DQotCQlkZXZfZXJy KGRldiwgInVuYWJsZSB0byByZWdpc3RlciB2NGwyIGRldmljZS5cbiIpOw0KLQkJZ290byB1bnBy ZXBhcmVfY2xrOw0KLQl9DQotDQotCXJldCA9IGlzY19wYXJzZV9kdChkZXYsIGlzYyk7DQotCWlm IChyZXQpIHsNCi0JCWRldl9lcnIoZGV2LCAiZmFpbCB0byBwYXJzZSBkZXZpY2UgdHJlZVxuIik7 DQotCQlnb3RvIHVucmVnaXN0ZXJfdjRsMl9kZXZpY2U7DQotCX0NCi0NCi0JaWYgKGxpc3RfZW1w dHkoJmlzYy0+c3ViZGV2X2VudGl0aWVzKSkgew0KLQkJZGV2X2VycihkZXYsICJubyBzdWJkZXYg Zm91bmRcbiIpOw0KLQkJcmV0ID0gLUVOT0RFVjsNCi0JCWdvdG8gdW5yZWdpc3Rlcl92NGwyX2Rl dmljZTsNCi0JfQ0KLQ0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YmRldl9lbnRpdHksICZpc2Mt PnN1YmRldl9lbnRpdGllcywgbGlzdCkgew0KLQkJdjRsMl9hc3luY19ub3RpZmllcl9pbml0KCZz dWJkZXZfZW50aXR5LT5ub3RpZmllcik7DQotDQotCQlyZXQgPSB2NGwyX2FzeW5jX25vdGlmaWVy X2FkZF9zdWJkZXYoJnN1YmRldl9lbnRpdHktPm5vdGlmaWVyLA0KLQkJCQkJCSAgICAgc3ViZGV2 X2VudGl0eS0+YXNkKTsNCi0JCWlmIChyZXQpIHsNCi0JCQlmd25vZGVfaGFuZGxlX3B1dChzdWJk ZXZfZW50aXR5LT5hc2QtPm1hdGNoLmZ3bm9kZSk7DQotCQkJa2ZyZWUoc3ViZGV2X2VudGl0eS0+ YXNkKTsNCi0JCQlnb3RvIGNsZWFudXBfc3ViZGV2Ow0KLQkJfQ0KLQ0KLQkJc3ViZGV2X2VudGl0 eS0+bm90aWZpZXIub3BzID0gJmlzY19hc3luY19vcHM7DQotDQotCQlyZXQgPSB2NGwyX2FzeW5j X25vdGlmaWVyX3JlZ2lzdGVyKCZpc2MtPnY0bDJfZGV2LA0KLQkJCQkJCSAgICZzdWJkZXZfZW50 aXR5LT5ub3RpZmllcik7DQotCQlpZiAocmV0KSB7DQotCQkJZGV2X2VycihkZXYsICJmYWlsIHRv IHJlZ2lzdGVyIGFzeW5jIG5vdGlmaWVyXG4iKTsNCi0JCQlnb3RvIGNsZWFudXBfc3ViZGV2Ow0K LQkJfQ0KLQ0KLQkJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQoJmlzYy0+dmlkZW9fZGV2KSkNCi0J CQlicmVhazsNCi0JfQ0KLQ0KLQlwbV9ydW50aW1lX3NldF9hY3RpdmUoZGV2KTsNCi0JcG1fcnVu dGltZV9lbmFibGUoZGV2KTsNCi0JcG1fcmVxdWVzdF9pZGxlKGRldik7DQotDQotCXJldHVybiAw Ow0KLQ0KLWNsZWFudXBfc3ViZGV2Og0KLQlpc2Nfc3ViZGV2X2NsZWFudXAoaXNjKTsNCi0NCi11 bnJlZ2lzdGVyX3Y0bDJfZGV2aWNlOg0KLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZpc2MtPnY0 bDJfZGV2KTsNCi0NCi11bnByZXBhcmVfY2xrOg0KLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaXNj LT5pc3Bjayk7DQotdW5wcmVwYXJlX2hjbGs6DQotCWNsa19kaXNhYmxlX3VucHJlcGFyZShpc2Mt PmhjbG9jayk7DQotDQotCWlzY19jbGtfY2xlYW51cChpc2MpOw0KLQ0KLQlyZXR1cm4gcmV0Ow0K LX0NCi0NCi1zdGF0aWMgaW50IGF0bWVsX2lzY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBwbGF0Zm9ybV9nZXRfZHJ2 ZGF0YShwZGV2KTsNCi0NCi0JcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOw0KLQljbGtf ZGlzYWJsZV91bnByZXBhcmUoaXNjLT5pc3Bjayk7DQotCWNsa19kaXNhYmxlX3VucHJlcGFyZShp c2MtPmhjbG9jayk7DQotDQotCWlzY19zdWJkZXZfY2xlYW51cChpc2MpOw0KLQ0KLQl2NGwyX2Rl dmljZV91bnJlZ2lzdGVyKCZpc2MtPnY0bDJfZGV2KTsNCi0NCi0JaXNjX2Nsa19jbGVhbnVwKGlz Yyk7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGlz Y19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQ0KLXsNCi0Jc3RydWN0IGlzY19k ZXZpY2UgKmlzYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KLQ0KLQljbGtfZGlzYWJsZV91bnBy ZXBhcmUoaXNjLT5pc3Bjayk7DQotCWNsa19kaXNhYmxlX3VucHJlcGFyZShpc2MtPmhjbG9jayk7 DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGlzY19y dW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQotew0KLQlzdHJ1Y3QgaXNjX2Rldmlj ZSAqaXNjID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQotCWludCByZXQ7DQotDQotCXJldCA9IGNs a19wcmVwYXJlX2VuYWJsZShpc2MtPmhjbG9jayk7DQotCWlmIChyZXQpDQotCQlyZXR1cm4gcmV0 Ow0KLQ0KLQlyZXR1cm4gY2xrX3ByZXBhcmVfZW5hYmxlKGlzYy0+aXNwY2spOw0KLX0NCi0NCi1z dGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYXRtZWxfaXNjX2Rldl9wbV9vcHMgPSB7DQot CVNFVF9SVU5USU1FX1BNX09QUyhpc2NfcnVudGltZV9zdXNwZW5kLCBpc2NfcnVudGltZV9yZXN1 bWUsIE5VTEwpDQotfTsNCi0NCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdG1l bF9pc2Nfb2ZfbWF0Y2hbXSA9IHsNCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxzYW1hNWQyLWlz YyIgfSwNCi0JeyB9DQotfTsNCi1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhdG1lbF9pc2Nfb2Zf bWF0Y2gpOw0KLQ0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0bWVsX2lzY19kcml2 ZXIgPSB7DQotCS5wcm9iZQk9IGF0bWVsX2lzY19wcm9iZSwNCi0JLnJlbW92ZQk9IGF0bWVsX2lz Y19yZW1vdmUsDQotCS5kcml2ZXIJPSB7DQotCQkubmFtZQkJPSBBVE1FTF9JU0NfTkFNRSwNCi0J CS5wbQkJPSAmYXRtZWxfaXNjX2Rldl9wbV9vcHMsDQotCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9t YXRjaF9wdHIoYXRtZWxfaXNjX29mX21hdGNoKSwNCi0JfSwNCi19Ow0KLQ0KLW1vZHVsZV9wbGF0 Zm9ybV9kcml2ZXIoYXRtZWxfaXNjX2RyaXZlcik7DQotDQotTU9EVUxFX0FVVEhPUigiU29uZ2p1 biBXdSA8c29uZ2p1bi53dUBtaWNyb2NoaXAuY29tPiIpOw0KLU1PRFVMRV9ERVNDUklQVElPTigi VGhlIFY0TDIgZHJpdmVyIGZvciBBdG1lbC1JU0MiKTsNCi1NT0RVTEVfTElDRU5TRSgiR1BMIHYy Iik7DQotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInZpZGVvIik7DQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuaCBiL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vYXRtZWwvYXRtZWwtaXNjLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAw MDAwLi4wYmQ1ZGZmDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L2F0bWVsL2F0bWVsLWlzYy5oDQpAQCAtMCwwICsxLDIwOCBAQA0KKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wICovDQorLyoNCisgKiBNaWNyb2NoaXAgSW1hZ2UgU2Vuc29yIENv bnRyb2xsZXIgKElTQykgZHJpdmVyIGhlYWRlciBmaWxlDQorICoNCisgKiBDb3B5cmlnaHQgKEMp IDIwMTYtMjAxOSBNaWNyb2NoaXAgVGVjaG5vbG9neSwgSW5jLg0KKyAqDQorICogQXV0aG9yOiBT b25nanVuIFd1IDxzb25nanVuLnd1QG1pY3JvY2hpcC5jb20+DQorICogQXV0aG9yOiBFdWdlbiBI cmlzdGV2IDxldWdlbi5ocmlzdGV2QG1pY3JvY2hpcC5jb20+DQorICoNCisgKi8NCisjaWZuZGVm IF9BVE1FTF9JU0NfSF8NCisNCisjZGVmaW5lIElTQ19NQVhfU1VQUE9SVF9XSURUSCAgIDI1OTIN CisjZGVmaW5lIElTQ19NQVhfU1VQUE9SVF9IRUlHSFQgIDE5NDQNCisNCisjZGVmaW5lIElTQ19D TEtfTUFYX0RJVgkJMjU1DQorDQorZW51bSBpc2NfY2xrX2lkIHsNCisJSVNDX0lTUENLID0gMCwN CisJSVNDX01DSyA9IDEsDQorfTsNCisNCitzdHJ1Y3QgaXNjX2NsayB7DQorCXN0cnVjdCBjbGtf aHcgICBodzsNCisJc3RydWN0IGNsayAgICAgICpjbGs7DQorCXN0cnVjdCByZWdtYXAgICAqcmVn bWFwOw0KKwlzcGlubG9ja190CWxvY2s7DQorCXU4CQlpZDsNCisJdTgJCXBhcmVudF9pZDsNCisJ dTMyCQlkaXY7DQorCXN0cnVjdCBkZXZpY2UJKmRldjsNCit9Ow0KKw0KKyNkZWZpbmUgdG9faXNj X2NsayhodykgY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgaXNjX2NsaywgaHcpDQorDQorc3RydWN0 IGlzY19idWZmZXIgew0KKwlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICB2YjsNCisJc3RydWN0IGxp c3RfaGVhZAlsaXN0Ow0KK307DQorDQorc3RydWN0IGlzY19zdWJkZXZfZW50aXR5IHsNCisJc3Ry dWN0IHY0bDJfc3ViZGV2CQkqc2Q7DQorCXN0cnVjdCB2NGwyX2FzeW5jX3N1YmRldgkqYXNkOw0K KwlzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAgICAgIG5vdGlmaWVyOw0KKw0KKwl1MzIgcGZl X2NmZzA7DQorDQorCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsNCit9Ow0KKw0KKy8qDQorICogc3Ry dWN0IGlzY19mb3JtYXQgLSBJU0MgbWVkaWEgYnVzIGZvcm1hdCBpbmZvcm1hdGlvbg0KKwkJCVRo aXMgc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBJU0MNCisJ CQlhbmQgdGhlIHNlbnNvci4gSXQncyB0aGUgaW5wdXQgZm9ybWF0IHJlY2VpdmVkIGJ5DQorCQkJ dGhlIElTQy4NCisgKiBAZm91cmNjOgkJRm91cmNjIGNvZGUgZm9yIHRoaXMgZm9ybWF0DQorICog QG1idXNfY29kZToJCVY0TDIgbWVkaWEgYnVzIGZvcm1hdCBjb2RlLg0KKyAqIEBjZmFfYmF5Y2Zn OgkJSWYgdGhpcyBmb3JtYXQgaXMgUkFXIEJBWUVSLCBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBiYXll ci4NCisJCQl0aGlzIGlzIGVpdGhlciBCR0JHLCBSR1JHLCBldGMuDQorICogQHBmZV9jZmcwX2Jw czoJTnVtYmVyIG9mIGhhcmR3YXJlIGRhdGEgbGluZXMgY29ubmVjdGVkIHRvIHRoZSBJU0MNCisg Ki8NCisNCitzdHJ1Y3QgaXNjX2Zvcm1hdCB7DQorCXUzMglmb3VyY2M7DQorCXUzMgltYnVzX2Nv ZGU7DQorCXUzMgljZmFfYmF5Y2ZnOw0KKw0KKwlib29sCXNkX3N1cHBvcnQ7DQorCXUzMglwZmVf Y2ZnMF9icHM7DQorfTsNCisNCisvKiBQaXBlbGluZSBiaXRtYXAgKi8NCisjZGVmaW5lIFdCX0VO QUJMRQlCSVQoMCkNCisjZGVmaW5lIENGQV9FTkFCTEUJQklUKDEpDQorI2RlZmluZSBDQ19FTkFC TEUJQklUKDIpDQorI2RlZmluZSBHQU1fRU5BQkxFCUJJVCgzKQ0KKyNkZWZpbmUgR0FNX0JFTkFC TEUJQklUKDQpDQorI2RlZmluZSBHQU1fR0VOQUJMRQlCSVQoNSkNCisjZGVmaW5lIEdBTV9SRU5B QkxFCUJJVCg2KQ0KKyNkZWZpbmUgQ1NDX0VOQUJMRQlCSVQoNykNCisjZGVmaW5lIENCQ19FTkFC TEUJQklUKDgpDQorI2RlZmluZSBTVUI0MjJfRU5BQkxFCUJJVCg5KQ0KKyNkZWZpbmUgU1VCNDIw X0VOQUJMRQlCSVQoMTApDQorDQorI2RlZmluZSBHQU1fRU5BQkxFUwkoR0FNX1JFTkFCTEUgfCBH QU1fR0VOQUJMRSB8IEdBTV9CRU5BQkxFIHwgR0FNX0VOQUJMRSkNCisNCisvKg0KKyAqIHN0cnVj dCBmbXRfY29uZmlnIC0gSVNDIGZvcm1hdCBjb25maWd1cmF0aW9uIGFuZCBpbnRlcm5hbCBwaXBl bGluZQ0KKwkJCVRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIGludGVybmFsIGNvbmZpZ3Vy YXRpb24NCisJCQlvZiB0aGUgSVNDLg0KKwkJCUl0IGFsc28gaG9sZHMgdGhlIGZvcm1hdCB0aGF0 IElTQyB3aWxsIHByZXNlbnQgdG8gdjRsMi4NCisgKiBAc2RfZm9ybWF0OgkJUG9pbnRlciB0byBh biBpc2NfZm9ybWF0IHN0cnVjdCB0aGF0IGhvbGRzIHRoZSBzZW5zb3INCisJCQljb25maWd1cmF0 aW9uLg0KKyAqIEBmb3VyY2M6CQlGb3VyY2MgY29kZSBmb3IgdGhpcyBmb3JtYXQuDQorICogQGJw cDoJCUJ5dGVzIHBlciBwaXhlbCBpbiB0aGUgY3VycmVudCBmb3JtYXQuDQorICogQHJscF9jZmdf bW9kZToJQ29uZmlndXJhdGlvbiBvZiB0aGUgUkxQIChyb3VuZGluZywgbGltaXRpbmcgcGFja2Fn aW5nKQ0KKyAqIEBkY2ZnX2ltb2RlOgkJQ29uZmlndXJhdGlvbiBvZiB0aGUgaW5wdXQgb2YgdGhl IERNQSBtb2R1bGUNCisgKiBAZGN0cmxfZHZpZXc6CUNvbmZpZ3VyYXRpb24gb2YgdGhlIG91dHB1 dCBvZiB0aGUgRE1BIG1vZHVsZQ0KKyAqIEBiaXRzX3BpcGVsaW5lOglDb25maWd1cmF0aW9uIG9m IHRoZSBwaXBlbGluZSwgd2hpY2ggbW9kdWxlcyBhcmUgZW5hYmxlZA0KKyAqLw0KK3N0cnVjdCBm bXRfY29uZmlnIHsNCisJc3RydWN0IGlzY19mb3JtYXQJKnNkX2Zvcm1hdDsNCisNCisJdTMyCQkJ Zm91cmNjOw0KKwl1OAkJCWJwcDsNCisNCisJdTMyCQkJcmxwX2NmZ19tb2RlOw0KKwl1MzIJCQlk Y2ZnX2ltb2RlOw0KKwl1MzIJCQlkY3RybF9kdmlldzsNCisNCisJdTMyCQkJYml0c19waXBlbGlu ZTsNCit9Ow0KKw0KKyNkZWZpbmUgSElTVF9FTlRSSUVTCQk1MTINCisjZGVmaW5lIEhJU1RfQkFZ RVIJCShJU0NfSElTX0NGR19NT0RFX0IgKyAxKQ0KKw0KK2VudW17DQorCUhJU1RfSU5JVCA9IDAs DQorCUhJU1RfRU5BQkxFRCwNCisJSElTVF9ESVNBQkxFRCwNCit9Ow0KKw0KK3N0cnVjdCBpc2Nf Y3RybHMgew0KKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgaGFuZGxlcjsNCisNCisJdTMyIGJy aWdodG5lc3M7DQorCXUzMiBjb250cmFzdDsNCisJdTggZ2FtbWFfaW5kZXg7DQorI2RlZmluZSBJ U0NfV0JfTk9ORQkwDQorI2RlZmluZSBJU0NfV0JfQVVUTwkxDQorI2RlZmluZSBJU0NfV0JfT05F VElNRQkyDQorCXU4IGF3YjsNCisNCisJLyogb25lIGZvciBlYWNoIGNvbXBvbmVudCA6IEdSLCBS LCBHQiwgQiAqLw0KKwl1MzIgZ2FpbltISVNUX0JBWUVSXTsNCisJdTMyIG9mZnNldFtISVNUX0JB WUVSXTsNCisNCisJdTMyIGhpc3RfZW50cnlbSElTVF9FTlRSSUVTXTsNCisJdTMyIGhpc3RfY291 bnRbSElTVF9CQVlFUl07DQorCXU4IGhpc3RfaWQ7DQorCXU4IGhpc3Rfc3RhdDsNCisjZGVmaW5l IEhJU1RfTUlOX0lOREVYCQkwDQorI2RlZmluZSBISVNUX01BWF9JTkRFWAkJMQ0KKwl1MzIgaGlz dF9taW5tYXhbSElTVF9CQVlFUl1bMl07DQorfTsNCisNCisjZGVmaW5lIElTQ19QSVBFX0xJTkVf Tk9ERV9OVU0JMTENCisNCitzdHJ1Y3QgaXNjX2RldmljZSB7DQorCXN0cnVjdCByZWdtYXAJCSpy ZWdtYXA7DQorCXN0cnVjdCBjbGsJCSpoY2xvY2s7DQorCXN0cnVjdCBjbGsJCSppc3BjazsNCisJ c3RydWN0IGlzY19jbGsJCWlzY19jbGtzWzJdOw0KKw0KKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2Ow0K KwlzdHJ1Y3QgdjRsMl9kZXZpY2UJdjRsMl9kZXY7DQorCXN0cnVjdCB2aWRlb19kZXZpY2UJdmlk ZW9fZGV2Ow0KKw0KKwlzdHJ1Y3QgdmIyX3F1ZXVlCXZiMl92aWRxOw0KKwlzcGlubG9ja190CQlk bWFfcXVldWVfbG9jazsNCisJc3RydWN0IGxpc3RfaGVhZAlkbWFfcXVldWU7DQorCXN0cnVjdCBp c2NfYnVmZmVyCSpjdXJfZnJtOw0KKwl1bnNpZ25lZCBpbnQJCXNlcXVlbmNlOw0KKwlib29sCQkJ c3RvcDsNCisJc3RydWN0IGNvbXBsZXRpb24JY29tcDsNCisNCisJc3RydWN0IHY0bDJfZm9ybWF0 CWZtdDsNCisJc3RydWN0IGlzY19mb3JtYXQJKip1c2VyX2Zvcm1hdHM7DQorCXVuc2lnbmVkIGlu dAkJbnVtX3VzZXJfZm9ybWF0czsNCisNCisJc3RydWN0IGZtdF9jb25maWcJY29uZmlnOw0KKwlz dHJ1Y3QgZm10X2NvbmZpZwl0cnlfY29uZmlnOw0KKw0KKwlzdHJ1Y3QgaXNjX2N0cmxzCWN0cmxz Ow0KKwlzdHJ1Y3QgdjRsMl9jdHJsCSpkb193Yl9jdHJsOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJ YXdiX3dvcms7DQorDQorCXN0cnVjdCBtdXRleAkJbG9jazsNCisJc3BpbmxvY2tfdAkJYXdiX2xv Y2s7DQorDQorCXN0cnVjdCByZWdtYXBfZmllbGQJKnBpcGVsaW5lW0lTQ19QSVBFX0xJTkVfTk9E RV9OVU1dOw0KKw0KKwlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkJKmN1cnJlbnRfc3ViZGV2Ow0K KwlzdHJ1Y3QgbGlzdF9oZWFkCQlzdWJkZXZfZW50aXRpZXM7DQorfTsNCisNCisjZGVmaW5lIEdB TU1BX01BWAkyDQorI2RlZmluZSBHQU1NQV9FTlRSSUVTCTY0DQorDQorI2RlZmluZSBBVE1FTF9J U0NfTkFNRSAiYXRtZWwtaXNjIg0KKw0KKy8qIG1vZHVsZSBwYXJhbWV0ZXJzICovDQorZXh0ZXJu IHVuc2lnbmVkIGludCBkZWJ1ZzsNCitleHRlcm4gdW5zaWduZWQgaW50IHNlbnNvcl9wcmVmZXJy ZWQ7DQorDQorZXh0ZXJuIHN0cnVjdCBpc2NfZm9ybWF0IGZvcm1hdHNfbGlzdFtdOw0KK2V4dGVy biBzdHJ1Y3QgaXNjX2Zvcm1hdCBjb250cm9sbGVyX2Zvcm1hdHNbXTsNCitleHRlcm4gY29uc3Qg dTMyIGlzY19nYW1tYV90YWJsZVtHQU1NQV9NQVggKyAxXVtHQU1NQV9FTlRSSUVTXTsNCitleHRl cm4gY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgaXNjX3JlZ21hcF9jb25maWc7DQorZXh0ZXJu IGNvbnN0IHN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyX29wZXJhdGlvbnMgaXNjX2FzeW5jX29w czsNCisNCitpcnFyZXR1cm5fdCBpc2NfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7 DQoraW50IGlzY19waXBlbGluZV9pbml0KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpOw0KK2ludCBp c2NfY2xrX2luaXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYyk7DQordm9pZCBpc2Nfc3ViZGV2X2Ns ZWFudXAoc3RydWN0IGlzY19kZXZpY2UgKmlzYyk7DQordm9pZCBpc2NfY2xrX2NsZWFudXAoc3Ry dWN0IGlzY19kZXZpY2UgKmlzYyk7DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1zYW1hNWQyLWlzYy5jIGIvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9hdG1lbC9hdG1lbC1zYW1hNWQyLWlzYy5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMC4uNjlmYWFhZg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1zYW1hNWQyLWlzYy5jDQpAQCAtMCwwICsxLDM0NCBAQA0K Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQorLyoNCisgKiBNaWNyb2NoaXAg SW1hZ2UgU2Vuc29yIENvbnRyb2xsZXIgKElTQykgZHJpdmVyDQorICoNCisgKiBDb3B5cmlnaHQg KEMpIDIwMTYtMjAxOSBNaWNyb2NoaXAgVGVjaG5vbG9neSwgSW5jLg0KKyAqDQorICogQXV0aG9y OiBTb25nanVuIFd1IDxzb25nanVuLnd1QG1pY3JvY2hpcC5jb20+DQorICogQXV0aG9yOiBFdWdl biBIcmlzdGV2IDxldWdlbi5ocmlzdGV2QG1pY3JvY2hpcC5jb20+DQorICoNCisgKg0KKyAqIFNl bnNvci0tPlBGRS0tPldCLS0+Q0ZBLS0+Q0MtLT5HQU0tLT5DU0MtLT5DQkMtLT5TVUItLT5STFAt LT5ETUENCisgKg0KKyAqIElTQyB2aWRlbyBwaXBlbGluZSBpbnRlZ3JhdGVzIHRoZSBmb2xsb3dp bmcgc3VibW9kdWxlczoNCisgKiBQRkU6IFBhcmFsbGVsIEZyb250IEVuZCB0byBzYW1wbGUgdGhl IGNhbWVyYSBzZW5zb3IgaW5wdXQgc3RyZWFtDQorICogIFdCOiBQcm9ncmFtbWFibGUgd2hpdGUg YmFsYW5jZSBpbiB0aGUgQmF5ZXIgZG9tYWluDQorICogQ0ZBOiBDb2xvciBmaWx0ZXIgYXJyYXkg aW50ZXJwb2xhdGlvbiBtb2R1bGUNCisgKiAgQ0M6IFByb2dyYW1tYWJsZSBjb2xvciBjb3JyZWN0 aW9uDQorICogR0FNOiBHYW1tYSBjb3JyZWN0aW9uDQorICogQ1NDOiBQcm9ncmFtbWFibGUgY29s b3Igc3BhY2UgY29udmVyc2lvbg0KKyAqIENCQzogQ29udHJhc3QgYW5kIEJyaWdodG5lc3MgY29u dHJvbA0KKyAqIFNVQjogVGhpcyBtb2R1bGUgcGVyZm9ybXMgWUNiQ3I0NDQgdG8gWUNiQ3I0MjAg Y2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcNCisgKiBSTFA6IFRoaXMgbW9kdWxlIHBlcmZvcm1zIHJv dW5kaW5nLCByYW5nZSBsaW1pdGluZw0KKyAqICAgICAgYW5kIHBhY2tpbmcgb2YgdGhlIGluY29t aW5nIGRhdGENCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgvY2xrLmg+DQorI2luY2x1ZGUgPGxp bnV4L2Nsa2Rldi5oPg0KKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4NCisjaW5jbHVk ZSA8bGludXgvZGVsYXkuaD4NCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQorI2luY2x1 ZGUgPGxpbnV4L21hdGg2NC5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVk ZSA8bGludXgvb2YuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4NCisjaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4N CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5o Pg0KKw0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0 bDItZGV2aWNlLmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4NCisjaW5jbHVkZSA8 bWVkaWEvdjRsMi1pbWFnZS1zaXplcy5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+ DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZndub2RlLmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDIt c3ViZGV2Lmg+DQorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi1kbWEtY29udGlnLmg+DQorDQor I2luY2x1ZGUgImF0bWVsLWlzYy1yZWdzLmgiDQorI2luY2x1ZGUgImF0bWVsLWlzYy5oIg0KKw0K KyNkZWZpbmUgSVNDX01BWF9TVVBQT1JUX1dJRFRIICAgMjU5Mg0KKyNkZWZpbmUgSVNDX01BWF9T VVBQT1JUX0hFSUdIVCAgMTk0NA0KKw0KKyNkZWZpbmUgSVNDX0NMS19NQVhfRElWCQkyNTUNCisN CitzdGF0aWMgaW50IGlzY19wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpc2Nf ZGV2aWNlICppc2MpDQorew0KKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2Rl Ow0KKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVwbiA9IE5VTEwsICpyZW07DQorCXN0cnVjdCBpc2Nf c3ViZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eTsNCisJdW5zaWduZWQgaW50IGZsYWdzOw0KKwlp bnQgcmV0Ow0KKw0KKwlJTklUX0xJU1RfSEVBRCgmaXNjLT5zdWJkZXZfZW50aXRpZXMpOw0KKw0K Kwl3aGlsZSAoMSkgew0KKwkJc3RydWN0IHY0bDJfZndub2RlX2VuZHBvaW50IHY0bDJfZXBuID0g eyAuYnVzX3R5cGUgPSAwIH07DQorDQorCQllcG4gPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2lu dChucCwgZXBuKTsNCisJCWlmICghZXBuKQ0KKwkJCXJldHVybiAwOw0KKw0KKwkJcmVtID0gb2Zf Z3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlcG4pOw0KKwkJaWYgKCFyZW0pIHsNCisJCQlk ZXZfbm90aWNlKGRldiwgIlJlbW90ZSBkZXZpY2UgYXQgJXBPRiBub3QgZm91bmRcbiIsDQorCQkJ CSAgIGVwbik7DQorCQkJY29udGludWU7DQorCQl9DQorDQorCQlyZXQgPSB2NGwyX2Z3bm9kZV9l bmRwb2ludF9wYXJzZShvZl9md25vZGVfaGFuZGxlKGVwbiksDQorCQkJCQkJICZ2NGwyX2Vwbik7 DQorCQlpZiAocmV0KSB7DQorCQkJb2Zfbm9kZV9wdXQocmVtKTsNCisJCQlyZXQgPSAtRUlOVkFM Ow0KKwkJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IHBhcnNlIHRoZSBlbmRwb2ludFxuIik7DQor CQkJYnJlYWs7DQorCQl9DQorDQorCQlzdWJkZXZfZW50aXR5ID0gZGV2bV9remFsbG9jKGRldiwN CisJCQkJCSAgc2l6ZW9mKCpzdWJkZXZfZW50aXR5KSwgR0ZQX0tFUk5FTCk7DQorCQlpZiAoIXN1 YmRldl9lbnRpdHkpIHsNCisJCQlvZl9ub2RlX3B1dChyZW0pOw0KKwkJCXJldCA9IC1FTk9NRU07 DQorCQkJYnJlYWs7DQorCQl9DQorDQorCQkvKiBhc2Qgd2lsbCBiZSBmcmVlZCBieSB0aGUgc3Vi c3lzdGVtIG9uY2UgaXQncyBhZGRlZCB0byB0aGUNCisJCSAqIG5vdGlmaWVyIGxpc3QNCisJCSAq Lw0KKwkJc3ViZGV2X2VudGl0eS0+YXNkID0ga3phbGxvYyhzaXplb2YoKnN1YmRldl9lbnRpdHkt PmFzZCksDQorCQkJCQkgICAgIEdGUF9LRVJORUwpOw0KKwkJaWYgKCFzdWJkZXZfZW50aXR5LT5h c2QpIHsNCisJCQlvZl9ub2RlX3B1dChyZW0pOw0KKwkJCXJldCA9IC1FTk9NRU07DQorCQkJYnJl YWs7DQorCQl9DQorDQorCQlmbGFncyA9IHY0bDJfZXBuLmJ1cy5wYXJhbGxlbC5mbGFnczsNCisN CisJCWlmIChmbGFncyAmIFY0TDJfTUJVU19IU1lOQ19BQ1RJVkVfTE9XKQ0KKwkJCXN1YmRldl9l bnRpdHktPnBmZV9jZmcwID0gSVNDX1BGRV9DRkcwX0hQT0xfTE9XOw0KKw0KKwkJaWYgKGZsYWdz ICYgVjRMMl9NQlVTX1ZTWU5DX0FDVElWRV9MT1cpDQorCQkJc3ViZGV2X2VudGl0eS0+cGZlX2Nm ZzAgfD0gSVNDX1BGRV9DRkcwX1ZQT0xfTE9XOw0KKw0KKwkJaWYgKGZsYWdzICYgVjRMMl9NQlVT X1BDTEtfU0FNUExFX0ZBTExJTkcpDQorCQkJc3ViZGV2X2VudGl0eS0+cGZlX2NmZzAgfD0gSVND X1BGRV9DRkcwX1BQT0xfTE9XOw0KKw0KKwkJaWYgKHY0bDJfZXBuLmJ1c190eXBlID09IFY0TDJf TUJVU19CVDY1NikNCisJCQlzdWJkZXZfZW50aXR5LT5wZmVfY2ZnMCB8PSBJU0NfUEZFX0NGRzBf Q0NJUl9DUkMgfA0KKwkJCQkJSVNDX1BGRV9DRkcwX0NDSVI2NTY7DQorDQorCQlzdWJkZXZfZW50 aXR5LT5hc2QtPm1hdGNoX3R5cGUgPSBWNEwyX0FTWU5DX01BVENIX0ZXTk9ERTsNCisJCXN1YmRl dl9lbnRpdHktPmFzZC0+bWF0Y2guZndub2RlID0NCisJCQlvZl9md25vZGVfaGFuZGxlKHJlbSk7 DQorCQlsaXN0X2FkZF90YWlsKCZzdWJkZXZfZW50aXR5LT5saXN0LCAmaXNjLT5zdWJkZXZfZW50 aXRpZXMpOw0KKwl9DQorDQorCW9mX25vZGVfcHV0KGVwbik7DQorCXJldHVybiByZXQ7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgYXRtZWxfaXNjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KKwlzdHJ1Y3QgaXNj X2RldmljZSAqaXNjOw0KKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsNCisJdm9pZCBfX2lvbWVtICpp b19iYXNlOw0KKwlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgKnN1YmRldl9lbnRpdHk7DQorCWlu dCBpcnE7DQorCWludCByZXQ7DQorDQorCWlzYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq aXNjKSwgR0ZQX0tFUk5FTCk7DQorCWlmICghaXNjKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQor CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGlzYyk7DQorCWlzYy0+ZGV2ID0gZGV2Ow0KKw0K KwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOw0K Kwlpb19iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsNCisJaWYgKElTX0VS Uihpb19iYXNlKSkNCisJCXJldHVybiBQVFJfRVJSKGlvX2Jhc2UpOw0KKw0KKwlpc2MtPnJlZ21h cCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhkZXYsIGlvX2Jhc2UsICZpc2NfcmVnbWFwX2NvbmZp Zyk7DQorCWlmIChJU19FUlIoaXNjLT5yZWdtYXApKSB7DQorCQlyZXQgPSBQVFJfRVJSKGlzYy0+ cmVnbWFwKTsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgcmVnaXN0ZXIgbWFwOiAl ZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJaXJxID0gcGxhdGZvcm1fZ2V0 X2lycShwZGV2LCAwKTsNCisJaWYgKGlycSA8IDApIHsNCisJCXJldCA9IGlycTsNCisJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGdldCBpcnE6ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsN CisJfQ0KKw0KKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBpc2NfaW50ZXJydXB0 LCAwLA0KKwkJCSAgICAgICBBVE1FTF9JU0NfTkFNRSwgaXNjKTsNCisJaWYgKHJldCA8IDApIHsN CisJCWRldl9lcnIoZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgSVNSIGZvciBJUlEgJXUgKHJldD0laSlc biIsDQorCQkJaXJxLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXQgPSBpc2Nf cGlwZWxpbmVfaW5pdChpc2MpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJaXNj LT5oY2xvY2sgPSBkZXZtX2Nsa19nZXQoZGV2LCAiaGNsb2NrIik7DQorCWlmIChJU19FUlIoaXNj LT5oY2xvY2spKSB7DQorCQlyZXQgPSBQVFJfRVJSKGlzYy0+aGNsb2NrKTsNCisJCWRldl9lcnIo ZGV2LCAiZmFpbGVkIHRvIGdldCBoY2xvY2s6ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsN CisJfQ0KKw0KKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaXNjLT5oY2xvY2spOw0KKwlpZiAo cmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgaGNsb2NrOiAlZFxuIiwg cmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0ID0gaXNjX2Nsa19pbml0KGlzYyk7 DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgaXNjIGNsb2Nr OiAlZFxuIiwgcmV0KTsNCisJCWdvdG8gdW5wcmVwYXJlX2hjbGs7DQorCX0NCisNCisJaXNjLT5p c3BjayA9IGlzYy0+aXNjX2Nsa3NbSVNDX0lTUENLXS5jbGs7DQorDQorCXJldCA9IGNsa19wcmVw YXJlX2VuYWJsZShpc2MtPmlzcGNrKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gZW5hYmxlIGlzcGNrOiAlZFxuIiwgcmV0KTsNCisJCWdvdG8gdW5wcmVwYXJlX2hj bGs7DQorCX0NCisNCisJLyogaXNwY2sgc2hvdWxkIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gaGNs b2NrICovDQorCXJldCA9IGNsa19zZXRfcmF0ZShpc2MtPmlzcGNrLCBjbGtfZ2V0X3JhdGUoaXNj LT5oY2xvY2spKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc2V0 IGlzcGNrIHJhdGU6ICVkXG4iLCByZXQpOw0KKwkJZ290byB1bnByZXBhcmVfY2xrOw0KKwl9DQor DQorCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKGRldiwgJmlzYy0+djRsMl9kZXYpOw0KKwlp ZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byByZWdpc3RlciB2NGwyIGRldmlj ZS5cbiIpOw0KKwkJZ290byB1bnByZXBhcmVfY2xrOw0KKwl9DQorDQorCXJldCA9IGlzY19wYXJz ZV9kdChkZXYsIGlzYyk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBw YXJzZSBkZXZpY2UgdHJlZVxuIik7DQorCQlnb3RvIHVucmVnaXN0ZXJfdjRsMl9kZXZpY2U7DQor CX0NCisNCisJaWYgKGxpc3RfZW1wdHkoJmlzYy0+c3ViZGV2X2VudGl0aWVzKSkgew0KKwkJZGV2 X2VycihkZXYsICJubyBzdWJkZXYgZm91bmRcbiIpOw0KKwkJcmV0ID0gLUVOT0RFVjsNCisJCWdv dG8gdW5yZWdpc3Rlcl92NGwyX2RldmljZTsNCisJfQ0KKw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 KHN1YmRldl9lbnRpdHksICZpc2MtPnN1YmRldl9lbnRpdGllcywgbGlzdCkgew0KKwkJdjRsMl9h c3luY19ub3RpZmllcl9pbml0KCZzdWJkZXZfZW50aXR5LT5ub3RpZmllcik7DQorDQorCQlyZXQg PSB2NGwyX2FzeW5jX25vdGlmaWVyX2FkZF9zdWJkZXYoJnN1YmRldl9lbnRpdHktPm5vdGlmaWVy LA0KKwkJCQkJCSAgICAgc3ViZGV2X2VudGl0eS0+YXNkKTsNCisJCWlmIChyZXQpIHsNCisJCQlm d25vZGVfaGFuZGxlX3B1dChzdWJkZXZfZW50aXR5LT5hc2QtPm1hdGNoLmZ3bm9kZSk7DQorCQkJ a2ZyZWUoc3ViZGV2X2VudGl0eS0+YXNkKTsNCisJCQlnb3RvIGNsZWFudXBfc3ViZGV2Ow0KKwkJ fQ0KKw0KKwkJc3ViZGV2X2VudGl0eS0+bm90aWZpZXIub3BzID0gJmlzY19hc3luY19vcHM7DQor DQorCQlyZXQgPSB2NGwyX2FzeW5jX25vdGlmaWVyX3JlZ2lzdGVyKCZpc2MtPnY0bDJfZGV2LA0K KwkJCQkJCSAgICZzdWJkZXZfZW50aXR5LT5ub3RpZmllcik7DQorCQlpZiAocmV0KSB7DQorCQkJ ZGV2X2VycihkZXYsICJmYWlsIHRvIHJlZ2lzdGVyIGFzeW5jIG5vdGlmaWVyXG4iKTsNCisJCQln b3RvIGNsZWFudXBfc3ViZGV2Ow0KKwkJfQ0KKw0KKwkJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQo JmlzYy0+dmlkZW9fZGV2KSkNCisJCQlicmVhazsNCisJfQ0KKw0KKwlwbV9ydW50aW1lX3NldF9h Y3RpdmUoZGV2KTsNCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsNCisJcG1fcmVxdWVzdF9pZGxl KGRldik7DQorDQorCXJldHVybiAwOw0KKw0KK2NsZWFudXBfc3ViZGV2Og0KKwlpc2Nfc3ViZGV2 X2NsZWFudXAoaXNjKTsNCisNCit1bnJlZ2lzdGVyX3Y0bDJfZGV2aWNlOg0KKwl2NGwyX2Rldmlj ZV91bnJlZ2lzdGVyKCZpc2MtPnY0bDJfZGV2KTsNCisNCit1bnByZXBhcmVfY2xrOg0KKwljbGtf ZGlzYWJsZV91bnByZXBhcmUoaXNjLT5pc3Bjayk7DQordW5wcmVwYXJlX2hjbGs6DQorCWNsa19k aXNhYmxlX3VucHJlcGFyZShpc2MtPmhjbG9jayk7DQorDQorCWlzY19jbGtfY2xlYW51cChpc2Mp Ow0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IGF0bWVsX2lzY19yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICpp c2MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCisNCisJcG1fcnVudGltZV9kaXNhYmxl KCZwZGV2LT5kZXYpOw0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaXNjLT5pc3Bjayk7DQorCWNs a19kaXNhYmxlX3VucHJlcGFyZShpc2MtPmhjbG9jayk7DQorDQorCWlzY19zdWJkZXZfY2xlYW51 cChpc2MpOw0KKw0KKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZpc2MtPnY0bDJfZGV2KTsNCisN CisJaXNjX2Nsa19jbGVhbnVwKGlzYyk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMg aW50IF9fbWF5YmVfdW51c2VkIGlzY19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2 KQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0K Kw0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaXNjLT5pc3Bjayk7DQorCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShpc2MtPmhjbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50 IF9fbWF5YmVfdW51c2VkIGlzY19ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQor ew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorCWlu dCByZXQ7DQorDQorCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpc2MtPmhjbG9jayk7DQorCWlm IChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXR1cm4gY2xrX3ByZXBhcmVfZW5hYmxlKGlz Yy0+aXNwY2spOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYXRtZWxf aXNjX2Rldl9wbV9vcHMgPSB7DQorCVNFVF9SVU5USU1FX1BNX09QUyhpc2NfcnVudGltZV9zdXNw ZW5kLCBpc2NfcnVudGltZV9yZXN1bWUsIE5VTEwpDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCBhdG1lbF9pc2Nfb2ZfbWF0Y2hbXSA9IHsNCisJeyAuY29tcGF0aWJs ZSA9ICJhdG1lbCxzYW1hNWQyLWlzYyIgfSwNCisJeyB9DQorfTsNCitNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBhdG1lbF9pc2Nfb2ZfbWF0Y2gpOw0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIGF0bWVsX2lzY19kcml2ZXIgPSB7DQorCS5wcm9iZQk9IGF0bWVsX2lzY19wcm9iZSwN CisJLnJlbW92ZQk9IGF0bWVsX2lzY19yZW1vdmUsDQorCS5kcml2ZXIJPSB7DQorCQkubmFtZQkJ PSBBVE1FTF9JU0NfTkFNRSwNCisJCS5wbQkJPSAmYXRtZWxfaXNjX2Rldl9wbV9vcHMsDQorCQku b2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoYXRtZWxfaXNjX29mX21hdGNoKSwNCisJfSwN Cit9Ow0KKw0KK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYXRtZWxfaXNjX2RyaXZlcik7DQorDQor TU9EVUxFX0FVVEhPUigiU29uZ2p1biBXdSA8c29uZ2p1bi53dUBtaWNyb2NoaXAuY29tPiIpOw0K K01PRFVMRV9ERVNDUklQVElPTigiVGhlIFY0TDIgZHJpdmVyIGZvciBBdG1lbC1JU0MiKTsNCitN T0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQorTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInZpZGVv Iik7DQotLSANCjIuNy40DQoNCg==