Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp5823862ybi; Wed, 12 Jun 2019 09:04:42 -0700 (PDT) X-Google-Smtp-Source: APXvYqyIT5VplTUIwMoKQkmUehFYbIDy43QKHf+8BALoot5nI+60VhBQunbq2DbtTT+Jr/LAV6NC X-Received: by 2002:a17:90a:a790:: with SMTP id f16mr33910207pjq.27.1560355482344; Wed, 12 Jun 2019 09:04:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560355482; cv=none; d=google.com; s=arc-20160816; b=eKyS11S7xE7DG/mDDZyhfQRN1tKRS/ETwOaMljTBttbuKcIxW0FfXY1dSPkdNQkEKw rLWrw0Bzu0oELZZHDb/WDeQCNwkNKQBxU0yhe4vYEYA1L0dIqeRYZ4M6qZFV70XKTWiF PKWTZ6DOjjK0lUDfUWhMDas0OpC5wPrdp5LKVC0hxi6xUbSSuvqzKpr9O73SOwKqzqJz S7BnTaYFuQNZH6veDe0w26g1bjYgH249Nk+c+YwnyUHwcWBBMx7K0moO7/qIyS+WATDa ADZDWeEbGVeviWL1AwQJumiUkj7kzLSiSzV7AeUP/ANQbsIIMxyTakVXUk6WFzpsY2Vh /nkw== 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=Y/tzid4ga1U2pFFdtiWDn7DwmtnCtYCIWPlnDfY0Snc=; b=qMmY7B3I6ibsHHqSaR8NnerRQsasR7H9/J8PgCL4kmr04+NpxO78MfU7r0ixHkG+cS gjEPWYcs6Bhd7w733We/BXrGfAEYrWCUf2ocVt60lyOD5BjEfntWyZ+JglHx2Jp3RMOK H/l0Mt1PULlJgzWCGWoxfqY/m6vaJQbnn+VlIUjMaOBN6jQwAWksJpyhOkIQxIRTx+VG dhHGHgdFDXYsmpzXVtwP9zglo0l/LJjY962psQq8nuZwWimomqb5NuTBHmBFzt3DJdcD ZXPhq6smYgwCA7jnIn/vluXRZJk4ryW77ILLvFtwA0ZZJ66RbPDOsLRWzeE//YnGKv4S Of/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microchiptechnology.onmicrosoft.com header.s=selector1-microchiptechnology-onmicrosoft-com header.b=Ws1QFBOd; 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 x2si177485pfb.1.2019.06.12.09.03.54; Wed, 12 Jun 2019 09:04:42 -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=Ws1QFBOd; 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 S2438215AbfFLLBf (ORCPT + 99 others); Wed, 12 Jun 2019 07:01:35 -0400 Received: from esa1.microchip.iphmx.com ([68.232.147.91]:27992 "EHLO esa1.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2408286AbfFLLBV (ORCPT ); Wed, 12 Jun 2019 07:01:21 -0400 Received-SPF: Pass (esa1.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=esa1.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 (esa1.microchip.iphmx.com: no sender authenticity information available from domain of postmaster@email.microchip.com) identity=helo; client-ip=198.175.253.82; receiver=esa1.microchip.iphmx.com; envelope-from="Eugen.Hristev@microchip.com"; x-sender="postmaster@email.microchip.com"; x-conformance=spf_only Authentication-Results: esa1.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,365,1557212400"; d="scan'208";a="38636336" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa1.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 12 Jun 2019 04:01:18 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.87.151) by chn-vm-ex02.mchp-main.com (10.10.87.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 12 Jun 2019 04:01:16 -0700 Received: from NAM01-SN1-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; Wed, 12 Jun 2019 04:01:16 -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=Y/tzid4ga1U2pFFdtiWDn7DwmtnCtYCIWPlnDfY0Snc=; b=Ws1QFBOdkuqzJ2miwBhcdA6Vq7MSsgF1KogOApOaY9My9c+vEjrO6tiF0Wov2F5s+K3saFTSUU9pM8AaCMU6PrYAz+PRtSSA7URZeNVDA5XY+i5abSms5G18UKvAdFI7v9ZXszwbbjPj3zh6iKPzduLoxTw8oa0SKpF5yxz1XZI= Received: from DM5PR11MB1242.namprd11.prod.outlook.com (10.168.108.8) by DM5PR11MB1818.namprd11.prod.outlook.com (10.175.92.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1965.15; Wed, 12 Jun 2019 11:01:12 +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.017; Wed, 12 Jun 2019 11:01:12 +0000 From: To: , , , , CC: Subject: [PATCH v5 1/3] media: atmel: atmel-isc: split driver into driver base and isc Thread-Topic: [PATCH v5 1/3] media: atmel: atmel-isc: split driver into driver base and isc Thread-Index: AQHVIQ4l6rAl/3zzFES7XecJp47AFw== Date: Wed, 12 Jun 2019 11:01:12 +0000 Message-ID: <1560336983-16843-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: VI1P18901CA0014.EURP189.PROD.OUTLOOK.COM (2603:10a6:801::24) 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: ca5eb51a-89d7-4da3-99ef-08d6ef2547a3 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:DM5PR11MB1818; x-ms-traffictypediagnostic: DM5PR11MB1818: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1468; x-forefront-prvs: 0066D63CE6 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(136003)(396003)(376002)(366004)(39860400002)(346002)(189003)(199004)(66066001)(14444005)(14454004)(316002)(2201001)(68736007)(305945005)(53936002)(3846002)(2906002)(66556008)(86362001)(256004)(73956011)(5660300002)(71190400001)(30864003)(7736002)(71200400001)(186003)(110136005)(478600001)(6512007)(476003)(6486002)(81166006)(81156014)(8936002)(6436002)(2501003)(8676002)(66946007)(6506007)(486006)(52116002)(2616005)(53946003)(4326008)(72206003)(36756003)(102836004)(99286004)(386003)(26005)(6116002)(66476007)(50226002)(66446008)(64756008)(107886003)(25786009)(461764006)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR11MB1818;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: UL/rGondSWd2Kvx7zE1kCxfpvNVorxuVLnj9EAcUUJNszMzfsNPRFTR+Rq28VOF0eRrINFiVeB+mqPcyR16p1wBv9iOoOLC28RefBYA4DFQNVXaFTUKAaL3mkAg0VGxcNN7Bh+G4/ZRf5UDlEMKfZMAwMNzREiQjNFAnGrGwrfwUMtReT0td1ngrWL5QwP9ixUVmfPU9vbrNhDTVJuXLQcSYgvfrQ2z0JFX6wRyzvYixhg5omMqMqSWVcYhUXQsF8fgQib/s3psAROjnslTOm6Uzmwo2WfkGD0CryEZxD/sK7iUgV1ExbJ0BYjz8T5TuTMArVEvBJNPH+zAGGNcfpS5nfMPfy4bks2VU7zyF1cfWFVv8Wo/fwhF5MiVsEe3tAVHylkLJHLe3ZFeh+auRd465ziphT8hTTxnviW63CvY= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: ca5eb51a-89d7-4da3-99ef-08d6ef2547a3 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jun 2019 11:01:12.2072 (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: DM5PR11MB1818 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+DQotLS0NCg0KSGVsbG8gSGFucyBhbmQgU2FrYXJpLA0KSSBtYWRlIGEgbmV3IHZlcnNpb24g dGhhdCBpcyBub3cgcmViYXNlZCBvbiBsYXRlc3QgbWVkaWEgdHJlZS4NCkkgYWRkZWQgYSBuZXcg cGF0Y2ggMy8zIHdoaWNoIGZpeGVzIGlzc3VlcyByZXZpZXdlZCBieSBTYWthcmkuDQoNCkkgbWFk ZSB0aGVtIGluIGEgc2VwYXJhdGUgcGF0Y2ggdG8gbm90IG1peCB1cCB0aGluZ3MuDQoNCkNoYW5n ZXMgaW4gdjU6DQotIFJlYmFzZWQgb24gdG9wIG9mIGxhdGVzdCBtZWRpYV90cmVlLiBoYWQgc29t ZSBjb25mbGljdHMgd2l0aCBTUERYDQoNCkNoYW5nZXMgaW4gdjQ6DQotIFJlbW92ZWQgU29uZ2p1 bidzIGUtbWFpbCBhZGRyZXNzIGFzIGl0J3Mgbm8gbG9uZ2VyIHZhbGlkLiBPbmx5IGtlcHQgaGlz IG5hbWUNCg0KQ2hhbmdlcyBpbiB2MzoNCi0gRml4ZWQgdXAgdGhlIGV4dGVybnMsIG1vdmVkIHRv IGhlYWRlciBmaWxlDQotIG1vdmVkIHRoZSBtb2R1bGUgcGFyYW1ldGVycyB0byBhdG1lbC1pc2Mt YmFzZS5jDQoNCkNoYW5nZXMgaW4gdjI6DQotIHJlbmFtZWQgYXRtZWwtaXNjLmMgdG8gYXRtZWwt c2FtYTVkMi1pc2MuYyBhcyBzYW1hNWQyIGlzIHRoZSBTb0MgdGhhdA0KICBpbmNsdWRlcyB0aGlz IGhhcmR3YXJlIGJsb2NrLiBUaGUgbW9kdWxlIHdpbGwgc3RpbGwgYmUgbmFtZWQgYXRtZWwtaXNj LmtvDQotIHJlbW92ZWQgaWZkZWYgYXJvdW5kIGRlZmluaXRpb24gb2YgQVRNRUxfSVNDX05BTUUN Ci0gbW92ZWQgZXh0ZXJuYWwgZGVjbGFyYXRpb25zIGluIHRoZSBzcGVjaWZpYyBmaWxlcywgdGhp cyB3YXMgYnJlYWtpbmcNCiAgbW9kdWxlIGxvYWRpbmcNCg0KDQogTUFJTlRBSU5FUlMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArLQ0KIGRyaXZlcnMvbWVkaWEv cGxhdGZvcm0vYXRtZWwvTWFrZWZpbGUgICAgICAgICAgICB8ICAgIDQgKy0NCiBkcml2ZXJzL21l ZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy1iYXNlLmMgICAgfCAyMTUzICsrKysrKysrKysr KysrKysrKw0KIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmMgICAgICAg ICB8IDI2MzEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v YXRtZWwvYXRtZWwtaXNjLmggICAgICAgICB8ICAyMDggKysNCiBkcml2ZXJzL21lZGlhL3BsYXRm b3JtL2F0bWVsL2F0bWVsLXNhbWE1ZDItaXNjLmMgfCAgMzQ0ICsrKw0KIDYgZmlsZXMgY2hhbmdl ZCwgMjcxMSBpbnNlcnRpb25zKCspLCAyNjMzIGRlbGV0aW9ucygtKQ0KIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy1iYXNlLmMNCiBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuYw0K IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlz Yy5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRt ZWwtc2FtYTVkMi1pc2MuYw0KDQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVS Uw0KaW5kZXggNmEzYmFjMi4uNzExMTk3YSAxMDA2NDQNCi0tLSBhL01BSU5UQUlORVJTDQorKysg Yi9NQUlOVEFJTkVSUw0KQEAgLTEwMjk2LDcgKzEwMjk2LDkgQEAgTUlDUk9DSElQIElTQyBEUklW RVINCiBNOglFdWdlbiBIcmlzdGV2IDxldWdlbi5ocmlzdGV2QG1pY3JvY2hpcC5jb20+DQogTDoJ bGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnDQogUzoJU3VwcG9ydGVkDQotRjoJZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuYw0KK0Y6CWRyaXZlcnMvbWVkaWEvcGxhdGZv cm0vYXRtZWwvYXRtZWwtc2FtYTVkMi1pc2MuYw0KK0Y6CWRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v YXRtZWwvYXRtZWwtaXNjLmgNCitGOglkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVs LWlzYy1iYXNlLmMNCiBGOglkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy1y ZWdzLmgNCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVkaWEvYXRtZWwt aXNjLnR4dA0KIA0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvTWFr ZWZpbGUgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL01ha2VmaWxlDQppbmRleCA0ODQ5 MzY2Li4yZGJhMzg5IDEwMDY0NA0KLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9N YWtlZmlsZQ0KKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9NYWtlZmlsZQ0KQEAg LTEsMyArMSw1IEBADQogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQot b2JqLSQoQ09ORklHX1ZJREVPX0FUTUVMX0lTQykgKz0gYXRtZWwtaXNjLm8NCithdG1lbC1pc2Mt b2JqcyA9IGF0bWVsLXNhbWE1ZDItaXNjLm8gYXRtZWwtaXNjLWJhc2Uubw0KKw0KIG9iai0kKENP TkZJR19WSURFT19BVE1FTF9JU0kpICs9IGF0bWVsLWlzaS5vDQorb2JqLSQoQ09ORklHX1ZJREVP X0FUTUVMX0lTQykgKz0gYXRtZWwtaXNjLm8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL2F0bWVsL2F0bWVsLWlzYy1iYXNlLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0 bWVsL2F0bWVsLWlzYy1iYXNlLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw Li5lZGZkN2UwDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0 bWVsL2F0bWVsLWlzYy1iYXNlLmMNCkBAIC0wLDAgKzEsMjE1MyBAQA0KKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCisvKg0KKyAqIE1pY3JvY2hpcCBJbWFnZSBTZW5z b3IgQ29udHJvbGxlciAoSVNDKSBjb21tb24gZHJpdmVyIGJhc2UNCisgKg0KKyAqIENvcHlyaWdo dCAoQykgMjAxNi0yMDE5IE1pY3JvY2hpcCBUZWNobm9sb2d5LCBJbmMuDQorICoNCisgKiBBdXRo b3I6IFNvbmdqdW4gV3UNCisgKiBBdXRob3I6IEV1Z2VuIEhyaXN0ZXYgPGV1Z2VuLmhyaXN0ZXZA bWljcm9jaGlwLmNvbT4NCisgKg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCisj aW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5o Pg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQu aD4NCisjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5o Pg0KKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPg0K KyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgvcG1f cnVudGltZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCisjaW5jbHVkZSA8bGludXgv dmlkZW9kZXYyLmg+DQorDQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4NCisjaW5jbHVk ZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVudC5oPg0K KyNpbmNsdWRlIDxtZWRpYS92NGwyLWltYWdlLXNpemVzLmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0 bDItaW9jdGwuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1md25vZGUuaD4NCisjaW5jbHVkZSA8 bWVkaWEvdjRsMi1zdWJkZXYuaD4NCisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWRtYS1jb250 aWcuaD4NCisNCisjaW5jbHVkZSAiYXRtZWwtaXNjLXJlZ3MuaCINCisjaW5jbHVkZSAiYXRtZWwt aXNjLmgiDQorDQordW5zaWduZWQgaW50IGRlYnVnOw0KK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50 LCAwNjQ0KTsNCitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgbGV2ZWwgKDAtMikiKTsN CisNCit1bnNpZ25lZCBpbnQgc2Vuc29yX3ByZWZlcnJlZCA9IDE7DQorbW9kdWxlX3BhcmFtKHNl bnNvcl9wcmVmZXJyZWQsIHVpbnQsIDA2NDQpOw0KK01PRFVMRV9QQVJNX0RFU0Moc2Vuc29yX3By ZWZlcnJlZCwNCisJCSAiU2Vuc29yIGlzIHByZWZlcnJlZCB0byBvdXRwdXQgdGhlIHNwZWNpZmll ZCBmb3JtYXQgKDEtb24gMC1vZmYpLCBkZWZhdWx0IDEiKTsNCisNCisvKiBUaGlzIGlzIGEgbGlz dCBvZiB0aGUgZm9ybWF0cyB0aGF0IHRoZSBJU0MgY2FuICpvdXRwdXQqICovDQorc3RydWN0IGlz Y19mb3JtYXQgY29udHJvbGxlcl9mb3JtYXRzW10gPSB7DQorCXsNCisJCS5mb3VyY2MJCT0gVjRM Ml9QSVhfRk1UX0FSR0I0NDQsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1U X0FSR0I1NTUsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1JHQjU2NSwN CisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfQUJHUjMyLA0KKwl9LA0KKwl7 DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9YQkdSMzIsDQorCX0sDQorCXsNCisJCS5mb3Vy Y2MJCT0gVjRMMl9QSVhfRk1UX1lVVjQyMCwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwy X1BJWF9GTVRfWVVZViwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVW NDIyUCwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfR1JFWSwNCisJfSwN Cit9Ow0KKw0KKy8qIFRoaXMgaXMgYSBsaXN0IG9mIGZvcm1hdHMgdGhhdCB0aGUgSVNDIGNhbiBy ZWNlaXZlIGFzICppbnB1dCogKi8NCitzdHJ1Y3QgaXNjX2Zvcm1hdCBmb3JtYXRzX2xpc3RbXSA9 IHsNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0JHR1I4LA0KKwkJLm1idXNfY29k ZQk9IE1FRElBX0JVU19GTVRfU0JHR1I4XzFYOCwNCisJCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZF X0NGRzBfQlBTX0VJR0hULA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19CR0JHLA0KKwl9 LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR0JSRzgsDQorCQkubWJ1c19jb2Rl CT0gTUVESUFfQlVTX0ZNVF9TR0JSRzhfMVg4LA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVf Q0ZHMF9CUFNfRUlHSFQsDQorCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX0dCR0IsDQorCX0s DQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NHUkJHOCwNCisJCS5tYnVzX2NvZGUJ PSBNRURJQV9CVVNfRk1UX1NHUkJHOF8xWDgsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9D RkcwX0JQU19FSUdIVCwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR1JHUiwNCisJfSwN CisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU1JHR0I4LA0KKwkJLm1idXNfY29kZQk9 IE1FRElBX0JVU19GTVRfU1JHR0I4XzFYOCwNCisJCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NG RzBfQlBTX0VJR0hULA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JHLA0KKwl9LA0K Kwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEwLA0KKwkJLm1idXNfY29kZQk9 IE1FRElBX0JVU19GTVRfU0JHR1IxMF8xWDEwLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdf Q0ZHMF9CUFNfVEVOLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JHLA0KKwl9LA0K Kwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR0JSRzEwLA0KKwkJLm1idXNfY29kZQk9 IE1FRElBX0JVU19GTVRfU0dCUkcxMF8xWDEwLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdf Q0ZHMF9CUFNfVEVOLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HQkdCLA0KKwl9LA0K Kwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR1JCRzEwLA0KKwkJLm1idXNfY29kZQk9 IE1FRElBX0JVU19GTVRfU0dSQkcxMF8xWDEwLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdf Q0ZHMF9CUFNfVEVOLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HUkdSLA0KKwl9LA0K Kwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TUkdHQjEwLA0KKwkJLm1idXNfY29kZQk9 IE1FRElBX0JVU19GTVRfU1JHR0IxMF8xWDEwLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdf Q0ZHMF9CUFNfVEVOLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JHLA0KKwl9LA0K Kwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEyLA0KKwkJLm1idXNfY29kZQk9 IE1FRElBX0JVU19GTVRfU0JHR1IxMl8xWDEyLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdf Q0ZHMF9CUFNfVFdFTFZFLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19CR0JHLA0KKwl9 LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR0JSRzEyLA0KKwkJLm1idXNfY29k ZQk9IE1FRElBX0JVU19GTVRfU0dCUkcxMl8xWDEyLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19Q RkdfQ0ZHMF9CUFNfVFdFTFZFLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HQkdCLA0K Kwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR1JCRzEyLA0KKwkJLm1idXNf Y29kZQk9IE1FRElBX0JVU19GTVRfU0dSQkcxMl8xWDEyLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElT Q19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HUkdS LA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TUkdHQjEyLA0KKwkJLm1i dXNfY29kZQk9IE1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEyLA0KKwkJLnBmZV9jZmcwX2Jwcwk9 IElTQ19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19S R1JHLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9HUkVZLA0KKwkJLm1i dXNfY29kZQk9IE1FRElBX0JVU19GTVRfWThfMVg4LA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19Q RkVfQ0ZHMF9CUFNfRUlHSFQsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1U X1lVWVYsDQorCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9ZVVlWOF8yWDgsDQorCQkucGZl X2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCisJfSwNCisJew0KKwkJLmZvdXJj YwkJPSBWNEwyX1BJWF9GTVRfUkdCNTY1LA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRf UkdCNTY1XzJYOF9MRSwNCisJCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hU LA0KKwl9LA0KK307DQorDQorLyogR2FtbWEgdGFibGUgd2l0aCBnYW1tYSAxLzIuMiAqLw0KK2Nv bnN0IHUzMiBpc2NfZ2FtbWFfdGFibGVbR0FNTUFfTUFYICsgMV1bR0FNTUFfRU5UUklFU10gPSB7 DQorCS8qIDAgLS0+IGdhbW1hIDEvMS44ICovDQorCXsgICAgICAweDY1LCAgMHg2NjAwMkYsICAw eDk1MDAyNSwgIDB4QkIwMDIwLCAgMHhEQjAwMUQsICAweEY4MDAxQSwNCisJICAweDExMzAwMTgs IDB4MTJCMDAxNywgMHgxNDIwMDE2LCAweDE1ODAwMTQsIDB4MTZEMDAxMywgMHgxODEwMDEyLA0K KwkgIDB4MTk0MDAxMiwgMHgxQTYwMDEyLCAweDFCODAwMTEsIDB4MUM5MDAxMCwgMHgxREEwMDEw LCAweDFFQTAwMEYsDQorCSAgMHgxRkEwMDBGLCAweDIwOTAwMEYsIDB4MjE4MDAwRiwgMHgyMjcw MDBFLCAweDIzNTAwMEUsIDB4MjQzMDAwRSwNCisJICAweDI1MTAwMEUsIDB4MjVGMDAwRCwgMHgy NkMwMDBELCAweDI3OTAwMEQsIDB4Mjg2MDAwRCwgMHgyOTMwMDBDLA0KKwkgIDB4MkEwMDAwQywg MHgyQUMwMDBDLCAweDJCODAwMEMsIDB4MkM0MDAwQywgMHgyRDAwMDBCLCAweDJEQzAwMEIsDQor CSAgMHgyRTcwMDBCLCAweDJGMzAwMEIsIDB4MkZFMDAwQiwgMHgzMDkwMDBCLCAweDMxNDAwMEIs IDB4MzFGMDAwQSwNCisJICAweDMyQTAwMEEsIDB4MzM0MDAwQiwgMHgzM0YwMDBBLCAweDM0OTAw MEEsIDB4MzU0MDAwQSwgMHgzNUUwMDBBLA0KKwkgIDB4MzY4MDAwQSwgMHgzNzIwMDBBLCAweDM3 QzAwMEEsIDB4Mzg2MDAwQSwgMHgzOTAwMDA5LCAweDM5OTAwMEEsDQorCSAgMHgzQTMwMDA5LCAw eDNBRDAwMDksIDB4M0I2MDAwOSwgMHgzQkYwMDBBLCAweDNDOTAwMDksIDB4M0QyMDAwOSwNCisJ ICAweDNEQjAwMDksIDB4M0U0MDAwOSwgMHgzRUQwMDA5LCAweDNGNjAwMDkgfSwNCisNCisJLyog MSAtLT4gZ2FtbWEgMS8yICovDQorCXsgICAgICAweDdGLCAgMHg4MDAwMzQsICAweEI1MDAyOCwg IDB4REUwMDIxLCAweDEwMDAwMUUsIDB4MTFFMDAxQiwNCisJICAweDEzOTAwMTksIDB4MTUyMDAx NywgMHgxNkEwMDE1LCAweDE4MDAwMTQsIDB4MTk0MDAxNCwgMHgxQTgwMDEzLA0KKwkgIDB4MUJC MDAxMiwgMHgxQ0QwMDExLCAweDFERjAwMTAsIDB4MUVGMDAxMCwgMHgyMDAwMDBGLCAweDIwRjAw MEYsDQorCSAgMHgyMUYwMDBFLCAweDIyRDAwMEYsIDB4MjNDMDAwRSwgMHgyNEEwMDBFLCAweDI1 ODAwMEQsIDB4MjY1MDAwRCwNCisJICAweDI3MzAwMEMsIDB4MjdGMDAwRCwgMHgyOEMwMDBDLCAw eDI5OTAwMEMsIDB4MkE1MDAwQywgMHgyQjEwMDBCLA0KKwkgIDB4MkJDMDAwQywgMHgyQzgwMDBC LCAweDJEMzAwMEMsIDB4MkRGMDAwQiwgMHgyRUEwMDBBLCAweDJGNTAwMEEsDQorCSAgMHgyRkYw MDBCLCAweDMwQTAwMEEsIDB4MzE0MDAwQiwgMHgzMUYwMDBBLCAweDMyOTAwMEEsIDB4MzMzMDAw QSwNCisJICAweDMzRDAwMDksIDB4MzQ3MDAwOSwgMHgzNTAwMDBBLCAweDM1QTAwMDksIDB4MzYz MDAwQSwgMHgzNkQwMDA5LA0KKwkgIDB4Mzc2MDAwOSwgMHgzN0YwMDA5LCAweDM4ODAwMDksIDB4 MzkxMDAwOSwgMHgzOUEwMDA5LCAweDNBMzAwMDksDQorCSAgMHgzQUMwMDA4LCAweDNCNDAwMDks IDB4M0JEMDAwOCwgMHgzQzYwMDA4LCAweDNDRTAwMDgsIDB4M0Q2MDAwOSwNCisJICAweDNERjAw MDgsIDB4M0U3MDAwOCwgMHgzRUYwMDA4LCAweDNGNzAwMDggfSwNCisNCisJLyogMiAtLT4gZ2Ft bWEgMS8yLjIgKi8NCisJeyAgICAgIDB4OTksICAweDlCMDAzOCwgIDB4RDQwMDJBLCAgMHhGRjAw MjMsIDB4MTIyMDAxRiwgMHgxNDEwMDFCLA0KKwkgIDB4MTVEMDAxOSwgMHgxNzYwMDE3LCAweDE4 RTAwMTUsIDB4MUEzMDAxNSwgMHgxQjgwMDEzLCAweDFDQzAwMTIsDQorCSAgMHgxREUwMDExLCAw eDFGMDAwMTAsIDB4MjAxMDAxMCwgMHgyMTEwMDEwLCAweDIyMTAwMEYsIDB4MjMwMDAwRiwNCisJ ICAweDIzRjAwMEUsIDB4MjREMDAwRSwgMHgyNUIwMDBELCAweDI2OTAwMEMsIDB4Mjc2MDAwQywg MHgyODMwMDBDLA0KKwkgIDB4MjhGMDAwQywgMHgyOUIwMDBDLCAweDJBNzAwMEMsIDB4MkIzMDAw QiwgMHgyQkYwMDBCLCAweDJDQTAwMEIsDQorCSAgMHgyRDUwMDBCLCAweDJFMDAwMEEsIDB4MkVC MDAwQSwgMHgyRjUwMDBBLCAweDJGRjAwMEEsIDB4MzBBMDAwQSwNCisJICAweDMxNDAwMDksIDB4 MzFFMDAwOSwgMHgzMjcwMDBBLCAweDMzMTAwMDksIDB4MzNBMDAwOSwgMHgzNDQwMDA5LA0KKwkg IDB4MzREMDAwOSwgMHgzNTYwMDA5LCAweDM1RjAwMDksIDB4MzY4MDAwOCwgMHgzNzEwMDA4LCAw eDM3OTAwMDksDQorCSAgMHgzODIwMDA4LCAweDM4QTAwMDgsIDB4MzkzMDAwOCwgMHgzOUIwMDA4 LCAweDNBMzAwMDgsIDB4M0FCMDAwOCwNCisJICAweDNCMzAwMDgsIDB4M0JCMDAwOCwgMHgzQzMw MDA4LCAweDNDQjAwMDcsIDB4M0QyMDAwOCwgMHgzREEwMDA3LA0KKwkgIDB4M0UyMDAwNywgMHgz RTkwMDA3LCAweDNGMDAwMDgsIDB4M0Y4MDAwNyB9LA0KK307DQorDQorI2RlZmluZSBJU0NfSVNf Rk9STUFUX1JBVyhtYnVzX2NvZGUpIFwNCisJKCgobWJ1c19jb2RlKSAmIDB4ZjAwMCkgPT0gMHgz MDAwKQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpc2NfdXBkYXRlX2F3Yl9jdHJscyhzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjKQ0KK3sNCisJc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5j dHJsczsNCisNCisJcmVnbWFwX3dyaXRlKGlzYy0+cmVnbWFwLCBJU0NfV0JfT19SR1IsDQorCQkg ICAgIChJU0NfV0JfT19aRVJPX1ZBTCAtIChjdHJscy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVf Ul0pKSB8DQorCQkgICAgICgoSVNDX1dCX09fWkVST19WQUwgLSBjdHJscy0+b2Zmc2V0W0lTQ19I SVNfQ0ZHX01PREVfR1JdKSA8PCAxNikpOw0KKwlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElT Q19XQl9PX0JHQiwNCisJCSAgICAgKElTQ19XQl9PX1pFUk9fVkFMIC0gKGN0cmxzLT5vZmZzZXRb SVNDX0hJU19DRkdfTU9ERV9CXSkpIHwNCisJCSAgICAgKChJU0NfV0JfT19aRVJPX1ZBTCAtIGN0 cmxzLT5vZmZzZXRbSVNDX0hJU19DRkdfTU9ERV9HQl0pIDw8IDE2KSk7DQorCXJlZ21hcF93cml0 ZShpc2MtPnJlZ21hcCwgSVNDX1dCX0dfUkdSLA0KKwkJICAgICBjdHJscy0+Z2FpbltJU0NfSElT X0NGR19NT0RFX1JdIHwNCisJCSAgICAgKGN0cmxzLT5nYWluW0lTQ19ISVNfQ0ZHX01PREVfR1Jd IDw8IDE2KSk7DQorCXJlZ21hcF93cml0ZShpc2MtPnJlZ21hcCwgSVNDX1dCX0dfQkdCLA0KKwkJ ICAgICBjdHJscy0+Z2FpbltJU0NfSElTX0NGR19NT0RFX0JdIHwNCisJCSAgICAgKGN0cmxzLT5n YWluW0lTQ19ISVNfQ0ZHX01PREVfR0JdIDw8IDE2KSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUg dm9pZCBpc2NfcmVzZXRfYXdiX2N0cmxzKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0KKwlp bnQgYzsNCisNCisJZm9yIChjID0gSVNDX0hJU19DRkdfTU9ERV9HUjsgYyA8PSBJU0NfSElTX0NG R19NT0RFX0I7IGMrKykgew0KKwkJLyogZ2FpbnMgaGF2ZSBhIGZpeGVkIHBvaW50IGF0IDkgZGVj aW1hbHMgKi8NCisJCWlzYy0+Y3RybHMuZ2FpbltjXSA9IDEgPDwgOTsNCisJCS8qIG9mZnNldHMg YXJlIGluIDIncyBjb21wbGVtZW50cywgdGhlIHZhbHVlDQorCQkgKiB3aWxsIGJlIHN1YnN0cmFj dGVkIGZyb20gSVNDX1dCX09fWkVST19WQUwgdG8gb2J0YWluDQorCQkgKiAyJ3MgY29tcGxlbWVu dCBvZiBhIHZhbHVlIGJldHdlZW4gMCBhbmQNCisJCSAqIElTQ19XQl9PX1pFUk9fVkFMID4+IDEN CisJCSAqLw0KKwkJaXNjLT5jdHJscy5vZmZzZXRbY10gPSBJU0NfV0JfT19aRVJPX1ZBTDsNCisJ fQ0KK30NCisNCitzdGF0aWMgaW50IGlzY193YWl0X2Nsa19zdGFibGUoc3RydWN0IGNsa19odyAq aHcpDQorew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KKwlz dHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2NfY2xrLT5yZWdtYXA7DQorCXVuc2lnbmVkIGxvbmcg dGltZW91dCA9IGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKDEwMDApOw0KKwl1bnNpZ25lZCBp bnQgc3RhdHVzOw0KKw0KKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsN CisJCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NMS1NSLCAmc3RhdHVzKTsNCisJCWlmICghKHN0 YXR1cyAmIElTQ19DTEtTUl9TSVApKQ0KKwkJCXJldHVybiAwOw0KKw0KKwkJdXNsZWVwX3Jhbmdl KDEwLCAyNTApOw0KKwl9DQorDQorCXJldHVybiAtRVRJTUVET1VUOw0KK30NCisNCitzdGF0aWMg aW50IGlzY19jbGtfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykNCit7DQorCXN0cnVjdCBpc2Nf Y2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQorDQorCWlmIChpc2NfY2xrLT5pZCA9PSBJ U0NfSVNQQ0spDQorCQlwbV9ydW50aW1lX2dldF9zeW5jKGlzY19jbGstPmRldik7DQorDQorCXJl dHVybiBpc2Nfd2FpdF9jbGtfc3RhYmxlKGh3KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXNjX2Ns a191bnByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpDQorew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNj X2NsayA9IHRvX2lzY19jbGsoaHcpOw0KKw0KKwlpc2Nfd2FpdF9jbGtfc3RhYmxlKGh3KTsNCisN CisJaWYgKGlzY19jbGstPmlkID09IElTQ19JU1BDSykNCisJCXBtX3J1bnRpbWVfcHV0X3N5bmMo aXNjX2Nsay0+ZGV2KTsNCit9DQorDQorc3RhdGljIGludCBpc2NfY2xrX2VuYWJsZShzdHJ1Y3Qg Y2xrX2h3ICpodykNCit7DQorCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayho dyk7DQorCXUzMiBpZCA9IGlzY19jbGstPmlkOw0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBp c2NfY2xrLT5yZWdtYXA7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorCXVuc2lnbmVkIGludCBz dGF0dXM7DQorDQorCWRldl9kYmcoaXNjX2Nsay0+ZGV2LCAiSVNDIENMSzogJXMsIGRpdiA9ICVk LCBwYXJlbnQgaWQgPSAlZFxuIiwNCisJCV9fZnVuY19fLCBpc2NfY2xrLT5kaXYsIGlzY19jbGst PnBhcmVudF9pZCk7DQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZpc2NfY2xrLT5sb2NrLCBmbGFn cyk7DQorCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19DTEtDRkcsDQorCQkJICAgSVND X0NMS0NGR19ESVZfTUFTSyhpZCkgfCBJU0NfQ0xLQ0ZHX1NFTF9NQVNLKGlkKSwNCisJCQkgICAo aXNjX2Nsay0+ZGl2IDw8IElTQ19DTEtDRkdfRElWX1NISUZUKGlkKSkgfA0KKwkJCSAgIChpc2Nf Y2xrLT5wYXJlbnRfaWQgPDwgSVNDX0NMS0NGR19TRUxfU0hJRlQoaWQpKSk7DQorDQorCXJlZ21h cF93cml0ZShyZWdtYXAsIElTQ19DTEtFTiwgSVNDX0NMSyhpZCkpOw0KKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQorDQorCXJlZ21hcF9yZWFkKHJlZ21h cCwgSVNDX0NMS1NSLCAmc3RhdHVzKTsNCisJaWYgKHN0YXR1cyAmIElTQ19DTEsoaWQpKQ0KKwkJ cmV0dXJuIDA7DQorCWVsc2UNCisJCXJldHVybiAtRUlOVkFMOw0KK30NCisNCitzdGF0aWMgdm9p ZCBpc2NfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpDQorew0KKwlzdHJ1Y3QgaXNjX2Ns ayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KKwl1MzIgaWQgPSBpc2NfY2xrLT5pZDsNCisJ dW5zaWduZWQgbG9uZyBmbGFnczsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzY19jbGstPmxv Y2ssIGZsYWdzKTsNCisJcmVnbWFwX3dyaXRlKGlzY19jbGstPnJlZ21hcCwgSVNDX0NMS0RJUywg SVNDX0NMSyhpZCkpOw0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2NfY2xrLT5sb2NrLCBm bGFncyk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2Nsa19pc19lbmFibGVkKHN0cnVjdCBjbGtf aHcgKmh3KQ0KK3sNCisJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsN CisJdTMyIHN0YXR1czsNCisNCisJaWYgKGlzY19jbGstPmlkID09IElTQ19JU1BDSykNCisJCXBt X3J1bnRpbWVfZ2V0X3N5bmMoaXNjX2Nsay0+ZGV2KTsNCisNCisJcmVnbWFwX3JlYWQoaXNjX2Ns ay0+cmVnbWFwLCBJU0NfQ0xLU1IsICZzdGF0dXMpOw0KKw0KKwlpZiAoaXNjX2Nsay0+aWQgPT0g SVNDX0lTUENLKQ0KKwkJcG1fcnVudGltZV9wdXRfc3luYyhpc2NfY2xrLT5kZXYpOw0KKw0KKwly ZXR1cm4gc3RhdHVzICYgSVNDX0NMSyhpc2NfY2xrLT5pZCkgPyAxIDogMDsNCit9DQorDQorc3Rh dGljIHVuc2lnbmVkIGxvbmcNCitpc2NfY2xrX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3 LCB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQ0KK3sNCisJc3RydWN0IGlzY19jbGsgKmlzY19j bGsgPSB0b19pc2NfY2xrKGh3KTsNCisNCisJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHBhcmVu dF9yYXRlLCBpc2NfY2xrLT5kaXYgKyAxKTsNCit9DQorDQorc3RhdGljIGludCBpc2NfY2xrX2Rl dGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LA0KKwkJCQkgICBzdHJ1Y3QgY2xrX3JhdGVf cmVxdWVzdCAqcmVxKQ0KK3sNCisJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xr KGh3KTsNCisJbG9uZyBiZXN0X3JhdGUgPSAtRUlOVkFMOw0KKwlpbnQgYmVzdF9kaWZmID0gLTE7 DQorCXVuc2lnbmVkIGludCBpLCBkaXY7DQorDQorCWZvciAoaSA9IDA7IGkgPCBjbGtfaHdfZ2V0 X251bV9wYXJlbnRzKGh3KTsgaSsrKSB7DQorCQlzdHJ1Y3QgY2xrX2h3ICpwYXJlbnQ7DQorCQl1 bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOw0KKw0KKwkJcGFyZW50ID0gY2xrX2h3X2dldF9wYXJl bnRfYnlfaW5kZXgoaHcsIGkpOw0KKwkJaWYgKCFwYXJlbnQpDQorCQkJY29udGludWU7DQorDQor CQlwYXJlbnRfcmF0ZSA9IGNsa19od19nZXRfcmF0ZShwYXJlbnQpOw0KKwkJaWYgKCFwYXJlbnRf cmF0ZSkNCisJCQljb250aW51ZTsNCisNCisJCWZvciAoZGl2ID0gMTsgZGl2IDwgSVNDX0NMS19N QVhfRElWICsgMjsgZGl2KyspIHsNCisJCQl1bnNpZ25lZCBsb25nIHJhdGU7DQorCQkJaW50IGRp ZmY7DQorDQorCQkJcmF0ZSA9IERJVl9ST1VORF9DTE9TRVNUKHBhcmVudF9yYXRlLCBkaXYpOw0K KwkJCWRpZmYgPSBhYnMocmVxLT5yYXRlIC0gcmF0ZSk7DQorDQorCQkJaWYgKGJlc3RfZGlmZiA8 IDAgfHwgYmVzdF9kaWZmID4gZGlmZikgew0KKwkJCQliZXN0X3JhdGUgPSByYXRlOw0KKwkJCQli ZXN0X2RpZmYgPSBkaWZmOw0KKwkJCQlyZXEtPmJlc3RfcGFyZW50X3JhdGUgPSBwYXJlbnRfcmF0 ZTsNCisJCQkJcmVxLT5iZXN0X3BhcmVudF9odyA9IHBhcmVudDsNCisJCQl9DQorDQorCQkJaWYg KCFiZXN0X2RpZmYgfHwgcmF0ZSA8IHJlcS0+cmF0ZSkNCisJCQkJYnJlYWs7DQorCQl9DQorDQor CQlpZiAoIWJlc3RfZGlmZikNCisJCQlicmVhazsNCisJfQ0KKw0KKwlkZXZfZGJnKGlzY19jbGst PmRldiwNCisJCSJJU0MgQ0xLOiAlcywgYmVzdF9yYXRlID0gJWxkLCBwYXJlbnQgY2xrOiAlcyBA ICVsZFxuIiwNCisJCV9fZnVuY19fLCBiZXN0X3JhdGUsDQorCQlfX2Nsa19nZXRfbmFtZSgocmVx LT5iZXN0X3BhcmVudF9odyktPmNsayksDQorCQlyZXEtPmJlc3RfcGFyZW50X3JhdGUpOw0KKw0K KwlpZiAoYmVzdF9yYXRlIDwgMCkNCisJCXJldHVybiBiZXN0X3JhdGU7DQorDQorCXJlcS0+cmF0 ZSA9IGJlc3RfcmF0ZTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2Ns a19zZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3LCB1OCBpbmRleCkNCit7DQorCXN0cnVjdCBp c2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQorDQorCWlmIChpbmRleCA+PSBjbGtf aHdfZ2V0X251bV9wYXJlbnRzKGh3KSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlpc2NfY2xr LT5wYXJlbnRfaWQgPSBpbmRleDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB1OCBp c2NfY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcpDQorew0KKwlzdHJ1Y3QgaXNjX2Ns ayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KKw0KKwlyZXR1cm4gaXNjX2Nsay0+cGFyZW50 X2lkOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19jbGtfc2V0X3JhdGUoc3RydWN0IGNsa19odyAq aHcsDQorCQkJICAgICB1bnNpZ25lZCBsb25nIHJhdGUsDQorCQkJICAgICB1bnNpZ25lZCBsb25n IHBhcmVudF9yYXRlKQ0KK3sNCisJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xr KGh3KTsNCisJdTMyIGRpdjsNCisNCisJaWYgKCFyYXRlKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQor DQorCWRpdiA9IERJVl9ST1VORF9DTE9TRVNUKHBhcmVudF9yYXRlLCByYXRlKTsNCisJaWYgKGRp diA+IChJU0NfQ0xLX01BWF9ESVYgKyAxKSB8fCAhZGl2KQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQor DQorCWlzY19jbGstPmRpdiA9IGRpdiAtIDE7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgaXNjX2Nsa19vcHMgPSB7DQorCS5wcmVwYXJlCT0gaXNj X2Nsa19wcmVwYXJlLA0KKwkudW5wcmVwYXJlCT0gaXNjX2Nsa191bnByZXBhcmUsDQorCS5lbmFi bGUJCT0gaXNjX2Nsa19lbmFibGUsDQorCS5kaXNhYmxlCT0gaXNjX2Nsa19kaXNhYmxlLA0KKwku aXNfZW5hYmxlZAk9IGlzY19jbGtfaXNfZW5hYmxlZCwNCisJLnJlY2FsY19yYXRlCT0gaXNjX2Ns a19yZWNhbGNfcmF0ZSwNCisJLmRldGVybWluZV9yYXRlCT0gaXNjX2Nsa19kZXRlcm1pbmVfcmF0 ZSwNCisJLnNldF9wYXJlbnQJPSBpc2NfY2xrX3NldF9wYXJlbnQsDQorCS5nZXRfcGFyZW50CT0g aXNjX2Nsa19nZXRfcGFyZW50LA0KKwkuc2V0X3JhdGUJPSBpc2NfY2xrX3NldF9yYXRlLA0KK307 DQorDQorc3RhdGljIGludCBpc2NfY2xrX3JlZ2lzdGVyKHN0cnVjdCBpc2NfZGV2aWNlICppc2Ms IHVuc2lnbmVkIGludCBpZCkNCit7DQorCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVn bWFwOw0KKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gaXNjLT5kZXYtPm9mX25vZGU7DQorCXN0 cnVjdCBpc2NfY2xrICppc2NfY2xrOw0KKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0Ow0KKwlj b25zdCBjaGFyICpjbGtfbmFtZSA9IG5wLT5uYW1lOw0KKwljb25zdCBjaGFyICpwYXJlbnRfbmFt ZXNbM107DQorCWludCBudW1fcGFyZW50czsNCisNCisJbnVtX3BhcmVudHMgPSBvZl9jbGtfZ2V0 X3BhcmVudF9jb3VudChucCk7DQorCWlmIChudW1fcGFyZW50cyA8IDEgfHwgbnVtX3BhcmVudHMg PiAzKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWlmIChudW1fcGFyZW50cyA+IDIgJiYgaWQg PT0gSVNDX0lTUENLKQ0KKwkJbnVtX3BhcmVudHMgPSAyOw0KKw0KKwlvZl9jbGtfcGFyZW50X2Zp bGwobnAsIHBhcmVudF9uYW1lcywgbnVtX3BhcmVudHMpOw0KKw0KKwlpZiAoaWQgPT0gSVNDX01D SykNCisJCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwg JmNsa19uYW1lKTsNCisJZWxzZQ0KKwkJY2xrX25hbWUgPSAiaXNjLWlzcGNrIjsNCisNCisJaW5p dC5wYXJlbnRfbmFtZXMJPSBwYXJlbnRfbmFtZXM7DQorCWluaXQubnVtX3BhcmVudHMJPSBudW1f cGFyZW50czsNCisJaW5pdC5uYW1lCQk9IGNsa19uYW1lOw0KKwlpbml0Lm9wcwkJPSAmaXNjX2Ns a19vcHM7DQorCWluaXQuZmxhZ3MJCT0gQ0xLX1NFVF9SQVRFX0dBVEUgfCBDTEtfU0VUX1BBUkVO VF9HQVRFOw0KKw0KKwlpc2NfY2xrID0gJmlzYy0+aXNjX2Nsa3NbaWRdOw0KKwlpc2NfY2xrLT5o dy5pbml0CT0gJmluaXQ7DQorCWlzY19jbGstPnJlZ21hcAkJPSByZWdtYXA7DQorCWlzY19jbGst PmlkCQk9IGlkOw0KKwlpc2NfY2xrLT5kZXYJCT0gaXNjLT5kZXY7DQorCXNwaW5fbG9ja19pbml0 KCZpc2NfY2xrLT5sb2NrKTsNCisNCisJaXNjX2Nsay0+Y2xrID0gY2xrX3JlZ2lzdGVyKGlzYy0+ ZGV2LCAmaXNjX2Nsay0+aHcpOw0KKwlpZiAoSVNfRVJSKGlzY19jbGstPmNsaykpIHsNCisJCWRl dl9lcnIoaXNjLT5kZXYsICIlczogY2xvY2sgcmVnaXN0ZXIgZmFpbFxuIiwgY2xrX25hbWUpOw0K KwkJcmV0dXJuIFBUUl9FUlIoaXNjX2Nsay0+Y2xrKTsNCisJfSBlbHNlIGlmIChpZCA9PSBJU0Nf TUNLKQ0KKwkJb2ZfY2xrX2FkZF9wcm92aWRlcihucCwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LCBp c2NfY2xrLT5jbGspOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IGlzY19jbGtfaW5pdChz dHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KK3sNCisJdW5zaWduZWQgaW50IGk7DQorCWludCByZXQ7 DQorDQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlzYy0+aXNjX2Nsa3MpOyBpKyspDQor CQlpc2MtPmlzY19jbGtzW2ldLmNsayA9IEVSUl9QVFIoLUVJTlZBTCk7DQorDQorCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGlzYy0+aXNjX2Nsa3MpOyBpKyspIHsNCisJCXJldCA9IGlzY19j bGtfcmVnaXN0ZXIoaXNjLCBpKTsNCisJCWlmIChyZXQpDQorCQkJcmV0dXJuIHJldDsNCisJfQ0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCBpc2NfY2xrX2NsZWFudXAoc3RydWN0IGlzY19k ZXZpY2UgKmlzYykNCit7DQorCXVuc2lnbmVkIGludCBpOw0KKw0KKwlvZl9jbGtfZGVsX3Byb3Zp ZGVyKGlzYy0+ZGV2LT5vZl9ub2RlKTsNCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo aXNjLT5pc2NfY2xrcyk7IGkrKykgew0KKwkJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSAmaXNj LT5pc2NfY2xrc1tpXTsNCisNCisJCWlmICghSVNfRVJSKGlzY19jbGstPmNsaykpDQorCQkJY2xr X3VucmVnaXN0ZXIoaXNjX2Nsay0+Y2xrKTsNCisJfQ0KK30NCisNCitzdGF0aWMgaW50IGlzY19x dWV1ZV9zZXR1cChzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwNCisJCQkgICAgdW5zaWduZWQgaW50ICpu YnVmZmVycywgdW5zaWduZWQgaW50ICpucGxhbmVzLA0KKwkJCSAgICB1bnNpZ25lZCBpbnQgc2l6 ZXNbXSwgc3RydWN0IGRldmljZSAqYWxsb2NfZGV2c1tdKQ0KK3sNCisJc3RydWN0IGlzY19kZXZp Y2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOw0KKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IGlz Yy0+Zm10LmZtdC5waXguc2l6ZWltYWdlOw0KKw0KKwlpZiAoKm5wbGFuZXMpDQorCQlyZXR1cm4g c2l6ZXNbMF0gPCBzaXplID8gLUVJTlZBTCA6IDA7DQorDQorCSpucGxhbmVzID0gMTsNCisJc2l6 ZXNbMF0gPSBzaXplOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2NfYnVm ZmVyX3ByZXBhcmUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQ0KK3sNCisJc3RydWN0IHZiMl92NGwy X2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7DQorCXN0cnVjdCBpc2NfZGV2 aWNlICppc2MgPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOw0KKwl1bnNpZ25lZCBs b25nIHNpemUgPSBpc2MtPmZtdC5mbXQucGl4LnNpemVpbWFnZTsNCisNCisJaWYgKHZiMl9wbGFu ZV9zaXplKHZiLCAwKSA8IHNpemUpIHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiYnVm ZmVyIHRvbyBzbWFsbCAoJWx1IDwgJWx1KVxuIiwNCisJCQkgdmIyX3BsYW5lX3NpemUodmIsIDAp LCBzaXplKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCXZiMl9zZXRfcGxhbmVfcGF5 bG9hZCh2YiwgMCwgc2l6ZSk7DQorDQorCXZidWYtPmZpZWxkID0gaXNjLT5mbXQuZm10LnBpeC5m aWVsZDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlzY19zdGFydF9kbWEo c3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlz Yy0+cmVnbWFwOw0KKwl1MzIgc2l6ZWltYWdlID0gaXNjLT5mbXQuZm10LnBpeC5zaXplaW1hZ2U7 DQorCXUzMiBkY3RybF9kdmlldzsNCisJZG1hX2FkZHJfdCBhZGRyMDsNCisJdTMyIGgsIHc7DQor DQorCWggPSBpc2MtPmZtdC5mbXQucGl4LmhlaWdodDsNCisJdyA9IGlzYy0+Zm10LmZtdC5waXgu d2lkdGg7DQorDQorCS8qDQorCSAqIEluIGNhc2UgdGhlIHNlbnNvciBpcyBub3QgUkFXLCBpdCB3 aWxsIG91dHB1dCBhIHBpeGVsICgxMi0xNiBiaXRzKQ0KKwkgKiB3aXRoIHR3byBzYW1wbGVzIG9u IHRoZSBJU0MgRGF0YSBidXMgKHdoaWNoIGlzIDgtMTIpDQorCSAqIElTQyB3aWxsIGNvdW50IGVh Y2ggc2FtcGxlLCBzbywgd2UgbmVlZCB0byBtdWx0aXBseSB0aGVzZSB2YWx1ZXMNCisJICogYnkg dHdvLCB0byBnZXQgdGhlIHJlYWwgbnVtYmVyIG9mIHNhbXBsZXMgZm9yIHRoZSByZXF1aXJlZCBw aXhlbHMuDQorCSAqLw0KKwlpZiAoIUlTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zv cm1hdC0+bWJ1c19jb2RlKSkgew0KKwkJaCA8PD0gMTsNCisJCXcgPDw9IDE7DQorCX0NCisNCisJ LyoNCisJICogV2UgbGltaXQgdGhlIGNvbHVtbi9yb3cgY291bnQgdGhhdCB0aGUgSVNDIHdpbGwg b3V0cHV0IGFjY29yZGluZw0KKwkgKiB0byB0aGUgY29uZmlndXJlZCByZXNvbHV0aW9uIHRoYXQg d2Ugd2FudC4NCisJICogVGhpcyB3aWxsIGF2b2lkIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlIHNl bnNvciBpcyBtaXNjb25maWd1cmVkLA0KKwkgKiBzZW5kaW5nIG1vcmUgZGF0YSwgYW5kIHRoZSBJ U0Mgd2lsbCBqdXN0IHRha2UgaXQgYW5kIERNQSB0byBtZW1vcnksDQorCSAqIGNhdXNpbmcgY29y cnVwdGlvbi4NCisJICovDQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19QRkVfQ0ZHMSwNCisJ CSAgICAgKElTQ19QRkVfQ0ZHMV9DT0xNSU4oMCkgJiBJU0NfUEZFX0NGRzFfQ09MTUlOX01BU0sp IHwNCisJCSAgICAgKElTQ19QRkVfQ0ZHMV9DT0xNQVgodyAtIDEpICYgSVNDX1BGRV9DRkcxX0NP TE1BWF9NQVNLKSk7DQorDQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19QRkVfQ0ZHMiwNCisJ CSAgICAgKElTQ19QRkVfQ0ZHMl9ST1dNSU4oMCkgJiBJU0NfUEZFX0NGRzJfUk9XTUlOX01BU0sp IHwNCisJCSAgICAgKElTQ19QRkVfQ0ZHMl9ST1dNQVgoaCAtIDEpICYgSVNDX1BGRV9DRkcyX1JP V01BWF9NQVNLKSk7DQorDQorCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19QRkVfQ0ZH MCwNCisJCQkgICBJU0NfUEZFX0NGRzBfQ09MRU4gfCBJU0NfUEZFX0NGRzBfUk9XRU4sDQorCQkJ ICAgSVNDX1BGRV9DRkcwX0NPTEVOIHwgSVNDX1BGRV9DRkcwX1JPV0VOKTsNCisNCisJYWRkcjAg PSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRkcigmaXNjLT5jdXJfZnJtLT52Yi52YjJfYnVm LCAwKTsNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDAsIGFkZHIwKTsNCisNCisJc3dp dGNoIChpc2MtPmNvbmZpZy5mb3VyY2MpIHsNCisJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOg0K KwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDEsIGFkZHIwICsgKHNpemVpbWFnZSAqIDIp IC8gMyk7DQorCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMiwgYWRkcjAgKyAoc2l6ZWlt YWdlICogNSkgLyA2KTsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOg0K KwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDEsIGFkZHIwICsgc2l6ZWltYWdlIC8gMik7 DQorCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMiwgYWRkcjAgKyAoc2l6ZWltYWdlICog MykgLyA0KTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJYnJlYWs7DQorCX0NCisNCisJZGN0 cmxfZHZpZXcgPSBpc2MtPmNvbmZpZy5kY3RybF9kdmlldzsNCisNCisJcmVnbWFwX3dyaXRlKHJl Z21hcCwgSVNDX0RDVFJMLCBkY3RybF9kdmlldyB8IElTQ19EQ1RSTF9JRV9JUyk7DQorCXNwaW5f bG9jaygmaXNjLT5hd2JfbG9jayk7DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4s IElTQ19DVFJMX0NBUFRVUkUpOw0KKwlzcGluX3VubG9jaygmaXNjLT5hd2JfbG9jayk7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIGlzY19zZXRfcGlwZWxpbmUoc3RydWN0IGlzY19kZXZpY2UgKmlzYywg dTMyIHBpcGVsaW5lKQ0KK3sNCisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7 DQorCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQorCXUzMiB2YWwsIGJh eV9jZmc7DQorCWNvbnN0IHUzMiAqZ2FtbWE7DQorCXVuc2lnbmVkIGludCBpOw0KKw0KKwkvKiBX Qi0tPkNGQS0tPkNDLS0+R0FNLS0+Q1NDLS0+Q0JDLS0+U1VCNDIyLS0+U1VCNDIwICovDQorCWZv ciAoaSA9IDA7IGkgPCBJU0NfUElQRV9MSU5FX05PREVfTlVNOyBpKyspIHsNCisJCXZhbCA9IHBp cGVsaW5lICYgQklUKGkpID8gMSA6IDA7DQorCQlyZWdtYXBfZmllbGRfd3JpdGUoaXNjLT5waXBl bGluZVtpXSwgdmFsKTsNCisJfQ0KKw0KKwlpZiAoIXBpcGVsaW5lKQ0KKwkJcmV0dXJuOw0KKw0K KwliYXlfY2ZnID0gaXNjLT5jb25maWcuc2RfZm9ybWF0LT5jZmFfYmF5Y2ZnOw0KKw0KKwlpZiAo Y3RybHMtPmF3YiA9PSBJU0NfV0JfTk9ORSkNCisJCWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsN CisNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX1dCX0NGRywgYmF5X2NmZyk7DQorCWlzY191 cGRhdGVfYXdiX2N0cmxzKGlzYyk7DQorDQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DRkFf Q0ZHLCBiYXlfY2ZnIHwgSVNDX0NGQV9DRkdfRUlUUE9MKTsNCisNCisJZ2FtbWEgPSAmaXNjX2dh bW1hX3RhYmxlW2N0cmxzLT5nYW1tYV9pbmRleF1bMF07DQorCXJlZ21hcF9idWxrX3dyaXRlKHJl Z21hcCwgSVNDX0dBTV9CRU5UUlksIGdhbW1hLCBHQU1NQV9FTlRSSUVTKTsNCisJcmVnbWFwX2J1 bGtfd3JpdGUocmVnbWFwLCBJU0NfR0FNX0dFTlRSWSwgZ2FtbWEsIEdBTU1BX0VOVFJJRVMpOw0K KwlyZWdtYXBfYnVsa193cml0ZShyZWdtYXAsIElTQ19HQU1fUkVOVFJZLCBnYW1tYSwgR0FNTUFf RU5UUklFUyk7DQorDQorCS8qIENvbnZlcnQgUkdCIHRvIFlVViAqLw0KKwlyZWdtYXBfd3JpdGUo cmVnbWFwLCBJU0NfQ1NDX1lSX1lHLCAweDQyIHwgKDB4ODEgPDwgMTYpKTsNCisJcmVnbWFwX3dy aXRlKHJlZ21hcCwgSVNDX0NTQ19ZQl9PWSwgMHgxOSB8ICgweDEwIDw8IDE2KSk7DQorCXJlZ21h cF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ0JSX0NCRywgMHhGREEgfCAoMHhGQjYgPDwgMTYpKTsN CisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19DQkJfT0NCLCAweDcwIHwgKDB4ODAgPDwg MTYpKTsNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19DUlJfQ1JHLCAweDcwIHwgKDB4 RkEyIDw8IDE2KSk7DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ1JCX09DUiwgMHhG RUUgfCAoMHg4MCA8PCAxNikpOw0KKw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ0JDX0JS SUdIVCwgY3RybHMtPmJyaWdodG5lc3MpOw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ0JD X0NPTlRSQVNULCBjdHJscy0+Y29udHJhc3QpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY191cGRh dGVfcHJvZmlsZShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KK3sNCisJc3RydWN0IHJlZ21hcCAq cmVnbWFwID0gaXNjLT5yZWdtYXA7DQorCXUzMiBzcjsNCisJaW50IGNvdW50ZXIgPSAxMDA7DQor DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX1VQUFJPKTsNCisN CisJcmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfQ1RSTFNSLCAmc3IpOw0KKwl3aGlsZSAoKHNyICYg SVNDX0NUUkxfVVBQUk8pICYmIGNvdW50ZXItLSkgew0KKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIw MDApOw0KKwkJcmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfQ1RSTFNSLCAmc3IpOw0KKwl9DQorDQor CWlmIChjb3VudGVyIDwgMCkgew0KKwkJdjRsMl93YXJuKCZpc2MtPnY0bDJfZGV2LCAiVGltZSBv dXQgdG8gdXBkYXRlIHByb2ZpbGVcbiIpOw0KKwkJcmV0dXJuIC1FVElNRURPVVQ7DQorCX0NCisN CisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlzY19zZXRfaGlzdG9ncmFtKHN0cnVj dCBpc2NfZGV2aWNlICppc2MsIGJvb2wgZW5hYmxlKQ0KK3sNCisJc3RydWN0IHJlZ21hcCAqcmVn bWFwID0gaXNjLT5yZWdtYXA7DQorCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3Ry bHM7DQorDQorCWlmIChlbmFibGUpIHsNCisJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNf Q0ZHLA0KKwkJCSAgICAgSVNDX0hJU19DRkdfTU9ERV9HUiB8DQorCQkJICAgICAoaXNjLT5jb25m aWcuc2RfZm9ybWF0LT5jZmFfYmF5Y2ZnDQorCQkJCQk8PCBJU0NfSElTX0NGR19CQVlTRUxfU0hJ RlQpIHwNCisJCQkJCUlTQ19ISVNfQ0ZHX1JBUik7DQorCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJ U0NfSElTX0NUUkwsIElTQ19ISVNfQ1RSTF9FTik7DQorCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJ U0NfSU5URU4sIElTQ19JTlRfSElTRE9ORSk7DQorCQljdHJscy0+aGlzdF9pZCA9IElTQ19ISVNf Q0ZHX01PREVfR1I7DQorCQlpc2NfdXBkYXRlX3Byb2ZpbGUoaXNjKTsNCisJCXJlZ21hcF93cml0 ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX0hJU1JFUSk7DQorDQorCQljdHJscy0+aGlz dF9zdGF0ID0gSElTVF9FTkFCTEVEOw0KKwl9IGVsc2Ugew0KKwkJcmVnbWFwX3dyaXRlKHJlZ21h cCwgSVNDX0lOVERJUywgSVNDX0lOVF9ISVNET05FKTsNCisJCXJlZ21hcF93cml0ZShyZWdtYXAs IElTQ19ISVNfQ1RSTCwgSVNDX0hJU19DVFJMX0RJUyk7DQorDQorCQljdHJscy0+aGlzdF9zdGF0 ID0gSElTVF9ESVNBQkxFRDsNCisJfQ0KK30NCisNCitzdGF0aWMgaW50IGlzY19jb25maWd1cmUo c3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlz Yy0+cmVnbWFwOw0KKwl1MzIgcGZlX2NmZzAsIHJscF9tb2RlLCBkY2ZnLCBtYXNrLCBwaXBlbGlu ZTsNCisJc3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXYgPSBpc2MtPmN1cnJlbnRfc3Vi ZGV2Ow0KKw0KKwlwZmVfY2ZnMCA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+cGZlX2NmZzBfYnBz Ow0KKwlybHBfbW9kZSA9IGlzYy0+Y29uZmlnLnJscF9jZmdfbW9kZTsNCisJcGlwZWxpbmUgPSBp c2MtPmNvbmZpZy5iaXRzX3BpcGVsaW5lOw0KKw0KKwlkY2ZnID0gaXNjLT5jb25maWcuZGNmZ19p bW9kZSB8DQorCQkgICAgICAgSVNDX0RDRkdfWU1CU0laRV9CRUFUUzggfCBJU0NfRENGR19DTUJT SVpFX0JFQVRTODsNCisNCisJcGZlX2NmZzAgIHw9IHN1YmRldi0+cGZlX2NmZzAgfCBJU0NfUEZF X0NGRzBfTU9ERV9QUk9HUkVTU0lWRTsNCisJbWFzayA9IElTQ19QRkVfQ0ZHMF9CUFNfTUFTSyB8 IElTQ19QRkVfQ0ZHMF9IUE9MX0xPVyB8DQorCSAgICAgICBJU0NfUEZFX0NGRzBfVlBPTF9MT1cg fCBJU0NfUEZFX0NGRzBfUFBPTF9MT1cgfA0KKwkgICAgICAgSVNDX1BGRV9DRkcwX01PREVfTUFT SyB8IElTQ19QRkVfQ0ZHMF9DQ0lSX0NSQyB8DQorCQkgICBJU0NfUEZFX0NGRzBfQ0NJUjY1NjsN CisNCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgSVNDX1BGRV9DRkcwLCBtYXNrLCBwZmVf Y2ZnMCk7DQorDQorCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19STFBfQ0ZHLCBJU0Nf UkxQX0NGR19NT0RFX01BU0ssDQorCQkJICAgcmxwX21vZGUpOw0KKw0KKwlyZWdtYXBfd3JpdGUo cmVnbWFwLCBJU0NfRENGRywgZGNmZyk7DQorDQorCS8qIFNldCB0aGUgcGlwZWxpbmUgKi8NCisJ aXNjX3NldF9waXBlbGluZShpc2MsIHBpcGVsaW5lKTsNCisNCisJLyoNCisJICogVGhlIGN1cnJl bnQgaW1wbGVtZW50ZWQgaGlzdG9ncmFtIGlzIGF2YWlsYWJsZSBmb3IgUkFXIFIsIEIsIEdCLCBH Ug0KKwkgKiBjaGFubmVscy4gV2UgbmVlZCB0byBjaGVjayBpZiBzZW5zb3IgaXMgb3V0cHV0dGlu ZyBSQVcgQkFZRVINCisJICovDQorCWlmIChpc2MtPmN0cmxzLmF3YiAmJg0KKwkgICAgSVNDX0lT X0ZPUk1BVF9SQVcoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KKwkJaXNjX3Nl dF9oaXN0b2dyYW0oaXNjLCB0cnVlKTsNCisJZWxzZQ0KKwkJaXNjX3NldF9oaXN0b2dyYW0oaXNj LCBmYWxzZSk7DQorDQorCS8qIFVwZGF0ZSBwcm9maWxlICovDQorCXJldHVybiBpc2NfdXBkYXRl X3Byb2ZpbGUoaXNjKTsNCit9DQorDQorc3RhdGljIGludCBpc2Nfc3RhcnRfc3RyZWFtaW5nKHN0 cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgY291bnQpDQorew0KKwlzdHJ1Y3QgaXNj X2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2cSk7DQorCXN0cnVjdCByZWdtYXAgKnJl Z21hcCA9IGlzYy0+cmVnbWFwOw0KKwlzdHJ1Y3QgaXNjX2J1ZmZlciAqYnVmOw0KKwl1bnNpZ25l ZCBsb25nIGZsYWdzOw0KKwlpbnQgcmV0Ow0KKw0KKwkvKiBFbmFibGUgc3RyZWFtIG9uIHRoZSBz dWIgZGV2aWNlICovDQorCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRl di0+c2QsIHZpZGVvLCBzX3N0cmVhbSwgMSk7DQorCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9JT0NU TENNRCkgew0KKwkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJzdHJlYW0gb24gZmFpbGVkIGlu IHN1YmRldiAlZFxuIiwNCisJCQkgcmV0KTsNCisJCWdvdG8gZXJyX3N0YXJ0X3N0cmVhbTsNCisJ fQ0KKw0KKwlwbV9ydW50aW1lX2dldF9zeW5jKGlzYy0+ZGV2KTsNCisNCisJcmV0ID0gaXNjX2Nv bmZpZ3VyZShpc2MpOw0KKwlpZiAodW5saWtlbHkocmV0KSkNCisJCWdvdG8gZXJyX2NvbmZpZ3Vy ZTsNCisNCisJLyogRW5hYmxlIERNQSBpbnRlcnJ1cHQgKi8NCisJcmVnbWFwX3dyaXRlKHJlZ21h cCwgSVNDX0lOVEVOLCBJU0NfSU5UX0RET05FKTsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlz Yy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCisNCisJaXNjLT5zZXF1ZW5jZSA9IDA7DQorCWlz Yy0+c3RvcCA9IGZhbHNlOw0KKwlyZWluaXRfY29tcGxldGlvbigmaXNjLT5jb21wKTsNCisNCisJ aXNjLT5jdXJfZnJtID0gbGlzdF9maXJzdF9lbnRyeSgmaXNjLT5kbWFfcXVldWUsDQorCQkJCQlz dHJ1Y3QgaXNjX2J1ZmZlciwgbGlzdCk7DQorCWxpc3RfZGVsKCZpc2MtPmN1cl9mcm0tPmxpc3Qp Ow0KKw0KKwlpc2Nfc3RhcnRfZG1hKGlzYyk7DQorDQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCisNCisJLyogaWYgd2Ugc3RyZWFtaW5nIGZy b20gUkFXLCB3ZSBjYW4gZG8gb25lLXNob3Qgd2hpdGUgYmFsYW5jZSBhZGogKi8NCisJaWYgKElT Q19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkNCisJCXY0 bDJfY3RybF9hY3RpdmF0ZShpc2MtPmRvX3diX2N0cmwsIHRydWUpOw0KKw0KKwlyZXR1cm4gMDsN CisNCitlcnJfY29uZmlndXJlOg0KKwlwbV9ydW50aW1lX3B1dF9zeW5jKGlzYy0+ZGV2KTsNCisN CisJdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgdmlkZW8sIHNfc3Ry ZWFtLCAwKTsNCisNCitlcnJfc3RhcnRfc3RyZWFtOg0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNj LT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZiwgJmlz Yy0+ZG1hX3F1ZXVlLCBsaXN0KQ0KKwkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZiLnZiMl9idWYs IFZCMl9CVUZfU1RBVEVfUVVFVUVEKTsNCisJSU5JVF9MSVNUX0hFQUQoJmlzYy0+ZG1hX3F1ZXVl KTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3Mp Ow0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgdm9pZCBpc2Nfc3RvcF9zdHJlYW1p bmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0g dmIyX2dldF9kcnZfcHJpdih2cSk7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorCXN0cnVjdCBp c2NfYnVmZmVyICpidWY7DQorCWludCByZXQ7DQorDQorCXY0bDJfY3RybF9hY3RpdmF0ZShpc2Mt PmRvX3diX2N0cmwsIGZhbHNlKTsNCisNCisJaXNjLT5zdG9wID0gdHJ1ZTsNCisNCisJLyogV2Fp dCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGZyYW1lICovDQorCWlmIChpc2MtPmN1cl9m cm0gJiYgIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaXNjLT5jb21wLCA1ICogSFopKQ0K KwkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsDQorCQkJICJUaW1lb3V0IHdhaXRpbmcgZm9yIGVu ZCBvZiB0aGUgY2FwdHVyZVxuIik7DQorDQorCS8qIERpc2FibGUgRE1BIGludGVycnVwdCAqLw0K KwlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19JTlRESVMsIElTQ19JTlRfRERPTkUpOw0K Kw0KKwlwbV9ydW50aW1lX3B1dF9zeW5jKGlzYy0+ZGV2KTsNCisNCisJLyogRGlzYWJsZSBzdHJl YW0gb24gdGhlIHN1YiBkZXZpY2UgKi8NCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1 cnJlbnRfc3ViZGV2LT5zZCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsNCisJaWYgKHJldCAmJiByZXQg IT0gLUVOT0lPQ1RMQ01EKQ0KKwkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJzdHJlYW0gb2Zm IGZhaWxlZCBpbiBzdWJkZXZcbiIpOw0KKw0KKwkvKiBSZWxlYXNlIGFsbCBhY3RpdmUgYnVmZmVy cyAqLw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0K KwlpZiAodW5saWtlbHkoaXNjLT5jdXJfZnJtKSkgew0KKwkJdmIyX2J1ZmZlcl9kb25lKCZpc2Mt PmN1cl9mcm0tPnZiLnZiMl9idWYsDQorCQkJCVZCMl9CVUZfU1RBVEVfRVJST1IpOw0KKwkJaXNj LT5jdXJfZnJtID0gTlVMTDsNCisJfQ0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZiwgJmlzYy0+ ZG1hX3F1ZXVlLCBsaXN0KQ0KKwkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZiLnZiMl9idWYsIFZC Ml9CVUZfU1RBVEVfRVJST1IpOw0KKwlJTklUX0xJU1RfSEVBRCgmaXNjLT5kbWFfcXVldWUpOw0K KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIGlzY19idWZmZXJfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZi KQ0KK3sNCisJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZl cih2Yik7DQorCXN0cnVjdCBpc2NfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmJ1Ziwgc3Ry dWN0IGlzY19idWZmZXIsIHZiKTsNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZiMl9nZXRf ZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorDQorCXNw aW5fbG9ja19pcnFzYXZlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQorCWlmICghaXNj LT5jdXJfZnJtICYmIGxpc3RfZW1wdHkoJmlzYy0+ZG1hX3F1ZXVlKSAmJg0KKwkJdmIyX2lzX3N0 cmVhbWluZyh2Yi0+dmIyX3F1ZXVlKSkgew0KKwkJaXNjLT5jdXJfZnJtID0gYnVmOw0KKwkJaXNj X3N0YXJ0X2RtYShpc2MpOw0KKwl9IGVsc2UNCisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwg JmlzYy0+ZG1hX3F1ZXVlKTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFfcXVl dWVfbG9jaywgZmxhZ3MpOw0KK30NCisNCitzdGF0aWMgc3RydWN0IGlzY19mb3JtYXQgKmZpbmRf Zm9ybWF0X2J5X2ZvdXJjYyhzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLA0KKwkJCQkJCSB1bnNpZ25l ZCBpbnQgZm91cmNjKQ0KK3sNCisJdW5zaWduZWQgaW50IG51bV9mb3JtYXRzID0gaXNjLT5udW1f dXNlcl9mb3JtYXRzOw0KKwlzdHJ1Y3QgaXNjX2Zvcm1hdCAqZm10Ow0KKwl1bnNpZ25lZCBpbnQg aTsNCisNCisJZm9yIChpID0gMDsgaSA8IG51bV9mb3JtYXRzOyBpKyspIHsNCisJCWZtdCA9IGlz Yy0+dXNlcl9mb3JtYXRzW2ldOw0KKwkJaWYgKGZtdC0+Zm91cmNjID09IGZvdXJjYykNCisJCQly ZXR1cm4gZm10Ow0KKwl9DQorDQorCXJldHVybiBOVUxMOw0KK30NCisNCitzdGF0aWMgY29uc3Qg c3RydWN0IHZiMl9vcHMgaXNjX3ZiMl9vcHMgPSB7DQorCS5xdWV1ZV9zZXR1cAkJPSBpc2NfcXVl dWVfc2V0dXAsDQorCS53YWl0X3ByZXBhcmUJCT0gdmIyX29wc193YWl0X3ByZXBhcmUsDQorCS53 YWl0X2ZpbmlzaAkJPSB2YjJfb3BzX3dhaXRfZmluaXNoLA0KKwkuYnVmX3ByZXBhcmUJCT0gaXNj X2J1ZmZlcl9wcmVwYXJlLA0KKwkuc3RhcnRfc3RyZWFtaW5nCT0gaXNjX3N0YXJ0X3N0cmVhbWlu ZywNCisJLnN0b3Bfc3RyZWFtaW5nCQk9IGlzY19zdG9wX3N0cmVhbWluZywNCisJLmJ1Zl9xdWV1 ZQkJPSBpc2NfYnVmZmVyX3F1ZXVlLA0KK307DQorDQorc3RhdGljIGludCBpc2NfcXVlcnljYXAo c3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQorCQkJIHN0cnVjdCB2NGwyX2NhcGFiaWxp dHkgKmNhcCkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZp bGUpOw0KKw0KKwlzdHJzY3B5KGNhcC0+ZHJpdmVyLCBBVE1FTF9JU0NfTkFNRSwgc2l6ZW9mKGNh cC0+ZHJpdmVyKSk7DQorCXN0cnNjcHkoY2FwLT5jYXJkLCAiQXRtZWwgSW1hZ2UgU2Vuc29yIENv bnRyb2xsZXIiLCBzaXplb2YoY2FwLT5jYXJkKSk7DQorCXNucHJpbnRmKGNhcC0+YnVzX2luZm8s IHNpemVvZihjYXAtPmJ1c19pbmZvKSwNCisJCSAicGxhdGZvcm06JXMiLCBpc2MtPnY0bDJfZGV2 Lm5hbWUpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2NfZW51bV9mbXRf dmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCisJCQkJIHN0cnVjdCB2NGwy X2ZtdGRlc2MgKmYpDQorew0KKwl1MzIgaW5kZXggPSBmLT5pbmRleDsNCisJdTMyIGksIHN1cHBv cnRlZF9pbmRleDsNCisNCisJaWYgKGluZGV4IDwgQVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1h dHMpKSB7DQorCQlmLT5waXhlbGZvcm1hdCA9IGNvbnRyb2xsZXJfZm9ybWF0c1tpbmRleF0uZm91 cmNjOw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJaW5kZXggLT0gQVJSQVlfU0laRShjb250cm9s bGVyX2Zvcm1hdHMpOw0KKw0KKwlpID0gMDsNCisJc3VwcG9ydGVkX2luZGV4ID0gMDsNCisNCisJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm9ybWF0c19saXN0KTsgaSsrKSB7DQorCQlpZiAo IUlTQ19JU19GT1JNQVRfUkFXKGZvcm1hdHNfbGlzdFtpXS5tYnVzX2NvZGUpIHx8DQorCQkgICAg IWZvcm1hdHNfbGlzdFtpXS5zZF9zdXBwb3J0KQ0KKwkJCWNvbnRpbnVlOw0KKwkJaWYgKHN1cHBv cnRlZF9pbmRleCA9PSBpbmRleCkgew0KKwkJCWYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0c19saXN0 W2ldLmZvdXJjYzsNCisJCQlyZXR1cm4gMDsNCisJCX0NCisJCXN1cHBvcnRlZF9pbmRleCsrOw0K Kwl9DQorDQorCXJldHVybiAtRUlOVkFMOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19nX2ZtdF92 aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KKwkJCSAgICAgIHN0cnVjdCB2 NGwyX2Zvcm1hdCAqZm10KQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2Ry dmRhdGEoZmlsZSk7DQorDQorCSpmbXQgPSBpc2MtPmZtdDsNCisNCisJcmV0dXJuIDA7DQorfQ0K Kw0KKy8qDQorICogQ2hlY2tzIHRoZSBjdXJyZW50IGNvbmZpZ3VyZWQgZm9ybWF0LCBpZiBJU0Mg Y2FuIG91dHB1dCBpdCwNCisgKiBjb25zaWRlcmluZyB3aGljaCB0eXBlIG9mIGZvcm1hdCB0aGUg SVNDIHJlY2VpdmVzIGZyb20gdGhlIHNlbnNvcg0KKyAqLw0KK3N0YXRpYyBpbnQgaXNjX3RyeV92 YWxpZGF0ZV9mb3JtYXRzKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0KKwlpbnQgcmV0Ow0K Kwlib29sIGJheWVyID0gZmFsc2UsIHl1diA9IGZhbHNlLCByZ2IgPSBmYWxzZSwgZ3JleSA9IGZh bHNlOw0KKw0KKwkvKiBhbGwgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgdGhlIFJMUCBtb2R1bGUgYXJl IE9LICovDQorCXN3aXRjaCAoaXNjLT50cnlfY29uZmlnLmZvdXJjYykgew0KKwljYXNlIFY0TDJf UElYX0ZNVF9TQkdHUjg6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHODoNCisJY2FzZSBWNEwy X1BJWF9GTVRfU0dSQkc4Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjg6DQorCWNhc2UgVjRM Ml9QSVhfRk1UX1NCR0dSMTA6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTA6DQorCWNhc2Ug VjRMMl9QSVhfRk1UX1NHUkJHMTA6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTA6DQorCWNh c2UgVjRMMl9QSVhfRk1UX1NCR0dSMTI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTI6DQor CWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTI6 DQorCQlyZXQgPSAwOw0KKwkJYmF5ZXIgPSB0cnVlOw0KKwkJYnJlYWs7DQorDQorCWNhc2UgVjRM Ml9QSVhfRk1UX1lVVjQyMDoNCisJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoNCisJY2FzZSBW NEwyX1BJWF9GTVRfWVVZVjoNCisJCXJldCA9IDA7DQorCQl5dXYgPSB0cnVlOw0KKwkJYnJlYWs7 DQorDQorCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToNCisJY2FzZSBWNEwyX1BJWF9GTVRfQUJH UjMyOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9YQkdSMzI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FS R0I0NDQ6DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I1NTU6DQorCQlyZXQgPSAwOw0KKwkJcmdi ID0gdHJ1ZTsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9HUkVZOg0KKwkJcmV0ID0g MDsNCisJCWdyZXkgPSB0cnVlOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCS8qIGFueSBvdGhl ciBkaWZmZXJlbnQgZm9ybWF0cyBhcmUgbm90IHN1cHBvcnRlZCAqLw0KKwkJcmV0ID0gLUVJTlZB TDsNCisJfQ0KKw0KKwkvKiB3ZSBjYW5ub3Qgb3V0cHV0IFJBVy9HcmV5IGlmIHdlIGRvIG5vdCBy ZWNlaXZlIFJBVyAqLw0KKwlpZiAoKGJheWVyIHx8IGdyZXkpICYmDQorCSAgICAhSVNDX0lTX0ZP Uk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkNCisJCXJldHVy biAtRUlOVkFMOw0KKw0KKwl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQorCQkg IkZvcm1hdCB2YWxpZGF0aW9uLCByZXF1ZXN0ZWQgcmdiPSV1LCB5dXY9JXUsIGdyZXk9JXUsIGJh eWVyPSV1XG4iLA0KKwkJIHJnYiwgeXV2LCBncmV5LCBiYXllcik7DQorDQorCXJldHVybiByZXQ7 DQorfQ0KKw0KKy8qDQorICogQ29uZmlndXJlcyB0aGUgUkxQIGFuZCBETUEgbW9kdWxlcywgZGVw ZW5kaW5nIG9uIHRoZSBvdXRwdXQgZm9ybWF0DQorICogY29uZmlndXJlZCBmb3IgdGhlIElTQy4N CisgKiBJZiBkaXJlY3RfZHVtcCA9PSB0cnVlLCBqdXN0IGR1bXAgcmF3IGRhdGEgOCBiaXRzLg0K KyAqLw0KK3N0YXRpYyBpbnQgaXNjX3RyeV9jb25maWd1cmVfcmxwX2RtYShzdHJ1Y3QgaXNjX2Rl dmljZSAqaXNjLCBib29sIGRpcmVjdF9kdW1wKQ0KK3sNCisJaWYgKGRpcmVjdF9kdW1wKSB7DQor CQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQ4Ow0K KwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQ4Ow0K KwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsN CisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCXN3 aXRjaCAoaXNjLT50cnlfY29uZmlnLmZvdXJjYykgew0KKwljYXNlIFY0TDJfUElYX0ZNVF9TQkdH Ujg6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHODoNCisJY2FzZSBWNEwyX1BJWF9GTVRfU0dS Qkc4Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjg6DQorCQlpc2MtPnRyeV9jb25maWcucmxw X2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQ4Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRj ZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQ4Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRj dHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5i cHAgPSA4Ow0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTA6DQorCWNhc2Ug VjRMMl9QSVhfRk1UX1NHQlJHMTA6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTA6DQorCWNh c2UgVjRMMl9QSVhfRk1UX1NSR0dCMTA6DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2Rl ID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQxMDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2Rl ID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQorCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZp ZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2 Ow0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTI6DQorCWNhc2UgVjRMMl9Q SVhfRk1UX1NHQlJHMTI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTI6DQorCWNhc2UgVjRM Ml9QSVhfRk1UX1NSR0dCMTI6DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVND X1JMUF9DRkdfTU9ERV9EQVQxMjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVND X0RDRkdfSU1PREVfUEFDS0VEMTY7DQorCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJ U0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KKwkJ YnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToNCisJCWlzYy0+dHJ5X2NvbmZpZy5y bHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1JHQjU2NTsNCisJCWlzYy0+dHJ5X2NvbmZp Zy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQorCQlpc2MtPnRyeV9jb25m aWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29u ZmlnLmJwcCA9IDE2Ow0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I0NDQ6DQor CQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9BUkdCNDQ0 Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQx NjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNL RUQ7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQorCQlicmVhazsNCisJY2FzZSBWNEwy X1BJWF9GTVRfQVJHQjU1NToNCisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0Nf UkxQX0NGR19NT0RFX0FSR0I1NTU7DQorCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElT Q19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0g SVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCisJ CWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9BQkdSMzI6DQorCWNhc2UgVjRMMl9QSVhfRk1U X1hCR1IzMjoNCisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19N T0RFX0FSR0IzMjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1P REVfUEFDS0VEMzI7DQorCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxf RFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDMyOw0KKwkJYnJlYWs7DQor CWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoNCisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21v ZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7DQorCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9k ZSA9IElTQ19EQ0ZHX0lNT0RFX1lDNDIwUDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmll dyA9IElTQ19EQ1RSTF9EVklFV19QTEFOQVI7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTI7 DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoNCisJCWlzYy0+dHJ5X2Nv bmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7DQorCQlpc2MtPnRyeV9j b25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1lDNDIyUDsNCisJCWlzYy0+dHJ5X2Nv bmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QTEFOQVI7DQorCQlpc2MtPnRyeV9j b25maWcuYnBwID0gMTY7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoNCisJ CWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7DQor CQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDMyOw0K KwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsN CisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElY X0ZNVF9HUkVZOg0KKwkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZH X01PREVfREFUWTg7DQorCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lN T0RFX1BBQ0tFRDg7DQorCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxf RFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDg7DQorCQlicmVhazsNCisJ ZGVmYXVsdDoNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorCXJldHVybiAwOw0KK30NCisNCisv Kg0KKyAqIENvbmZpZ3VyaW5nIHBpcGVsaW5lIG1vZHVsZXMsIGRlcGVuZGluZyBvbiB3aGljaCBm b3JtYXQgdGhlIElTQyBvdXRwdXRzDQorICogYW5kIGNvbnNpZGVyaW5nIHdoaWNoIGZvcm1hdCBp dCBoYXMgYXMgaW5wdXQgZnJvbSB0aGUgc2Vuc29yLg0KKyAqLw0KK3N0YXRpYyBpbnQgaXNjX3Ry eV9jb25maWd1cmVfcGlwZWxpbmUoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXN3aXRj aCAoaXNjLT50cnlfY29uZmlnLmZvdXJjYykgew0KKwljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6 DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I1NTU6DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I0 NDQ6DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FCR1IzMjoNCisJY2FzZSBWNEwyX1BJWF9GTVRfWEJH UjMyOg0KKwkJLyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElT QyAqLw0KKwkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQt Pm1idXNfY29kZSkpIHsNCisJCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IENGQV9F TkFCTEUgfA0KKwkJCQlXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUzsNCisJCX0gZWxzZSB7DQorCQkJ aXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQorCQl9DQorCQlicmVhazsNCisJ Y2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOg0KKwkJLyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcs IHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KKwkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+ dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCisJCQlpc2MtPnRyeV9jb25maWcu Yml0c19waXBlbGluZSA9IENGQV9FTkFCTEUgfA0KKwkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxF IHwgR0FNX0VOQUJMRVMgfA0KKwkJCQlTVUI0MjBfRU5BQkxFIHwgU1VCNDIyX0VOQUJMRSB8IENC Q19FTkFCTEU7DQorCQl9IGVsc2Ugew0KKwkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5l ID0gMHgwOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6DQor CQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICovDQor CQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19j b2RlKSkgew0KKwkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8 DQorCQkJCUNTQ19FTkFCTEUgfCBXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUyB8DQorCQkJCVNVQjQy Ml9FTkFCTEUgfCBDQkNfRU5BQkxFOw0KKwkJfSBlbHNlIHsNCisJCQlpc2MtPnRyeV9jb25maWcu Yml0c19waXBlbGluZSA9IDB4MDsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZN VF9ZVVlWOg0KKwkJLyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRl IElTQyAqLw0KKwkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3Jt YXQtPm1idXNfY29kZSkpIHsNCisJCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IENG QV9FTkFCTEUgfA0KKwkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FNX0VOQUJMRVMgfA0K KwkJCQlTVUI0MjJfRU5BQkxFIHwgQ0JDX0VOQUJMRTsNCisJCX0gZWxzZSB7DQorCQkJaXNjLT50 cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBW NEwyX1BJWF9GTVRfR1JFWToNCisJCWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2MtPnRyeV9jb25m aWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7DQorCQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJB Vywgd2UgY29udmVydCBpbnNpZGUgSVNDICovDQorCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlw ZWxpbmUgPSBDRkFfRU5BQkxFIHwNCisJCQkJQ1NDX0VOQUJMRSB8IFdCX0VOQUJMRSB8IEdBTV9F TkFCTEVTIHwNCisJCQkJQ0JDX0VOQUJMRTsNCisJCX0gZWxzZSB7DQorCQkJaXNjLT50cnlfY29u ZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQorCQl9DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJ CWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KKwl9DQorCXJldHVybiAwOw0K K30NCisNCitzdGF0aWMgaW50IGlzY190cnlfZm10KHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHN0 cnVjdCB2NGwyX2Zvcm1hdCAqZiwNCisJCQl1MzIgKmNvZGUpDQorew0KKwlpbnQgaTsNCisJc3Ry dWN0IGlzY19mb3JtYXQgKnNkX2ZtdCA9IE5VTEwsICpkaXJlY3RfZm10ID0gTlVMTDsNCisJc3Ry dWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4Zm10ID0gJmYtPmZtdC5waXg7DQorCXN0cnVjdCB2NGwy X3N1YmRldl9wYWRfY29uZmlnIHBhZF9jZmc7DQorCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQg Zm9ybWF0ID0gew0KKwkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX1RSWSwNCisJfTsNCisJ dTMyIG1idXNfY29kZTsNCisJaW50IHJldDsNCisJYm9vbCBybHBfZG1hX2RpcmVjdF9kdW1wID0g ZmFsc2U7DQorDQorCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkN CisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwkvKiBTdGVwIDE6IGZpbmQgYSBSQVcgZm9ybWF0IHRo YXQgaXMgc3VwcG9ydGVkICovDQorCWZvciAoaSA9IDA7IGkgPCBpc2MtPm51bV91c2VyX2Zvcm1h dHM7IGkrKykgew0KKwkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dXNlcl9mb3JtYXRzW2ld LT5tYnVzX2NvZGUpKSB7DQorCQkJc2RfZm10ID0gaXNjLT51c2VyX2Zvcm1hdHNbaV07DQorCQkJ YnJlYWs7DQorCQl9DQorCX0NCisJLyogU3RlcCAyOiBXZSBjYW4gY29udGludWUgd2l0aCB0aGlz IFJBVyBmb3JtYXQsIG9yIHdlIGNhbiBsb29rDQorCSAqIGZvciBiZXR0ZXI6IG1heWJlIHNlbnNv ciBzdXBwb3J0cyBkaXJlY3RseSB3aGF0IHdlIG5lZWQuDQorCSAqLw0KKwlkaXJlY3RfZm10ID0g ZmluZF9mb3JtYXRfYnlfZm91cmNjKGlzYywgcGl4Zm10LT5waXhlbGZvcm1hdCk7DQorDQorCS8q IFN0ZXAgMzogV2UgaGF2ZSBib3RoLiBXZSBkZWNpZGUgZ2l2ZW4gdGhlIG1vZHVsZSBwYXJhbWV0 ZXIgd2hpY2gNCisJICogb25lIHRvIHVzZS4NCisJICovDQorCWlmIChkaXJlY3RfZm10ICYmIHNk X2ZtdCAmJiBzZW5zb3JfcHJlZmVycmVkKQ0KKwkJc2RfZm10ID0gZGlyZWN0X2ZtdDsNCisNCisJ LyogU3RlcCA0OiB3ZSBkbyBub3QgaGF2ZSBSQVcgYnV0IHdlIGhhdmUgYSBkaXJlY3QgZm9ybWF0 LiBVc2UgaXQuICovDQorCWlmIChkaXJlY3RfZm10ICYmICFzZF9mbXQpDQorCQlzZF9mbXQgPSBk aXJlY3RfZm10Ow0KKw0KKwkvKiBTdGVwIDU6IGlmIHdlIGFyZSB1c2luZyBhIGRpcmVjdCBmb3Jt YXQsIHdlIG5lZWQgdG8gcGFja2FnZQ0KKwkgKiBldmVyeXRoaW5nIGFzIDggYml0IGRhdGEgYW5k IGp1c3QgZHVtcCBpdA0KKwkgKi8NCisJaWYgKHNkX2ZtdCA9PSBkaXJlY3RfZm10KQ0KKwkJcmxw X2RtYV9kaXJlY3RfZHVtcCA9IHRydWU7DQorDQorCS8qIFN0ZXAgNjogV2UgaGF2ZSBubyBmb3Jt YXQuIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdXNlcnNwYWNlDQorCSAqIHJlcXVlc3RzIHNvbWUg d2VpcmQvaW52YWxpZCBmb3JtYXQuDQorCSAqIEluIHRoaXMgY2FzZSwgZGVmYXVsdCB0byB3aGF0 ZXZlciB3ZSBoYXZlDQorCSAqLw0KKwlpZiAoIXNkX2ZtdCAmJiAhZGlyZWN0X2ZtdCkgew0KKwkJ c2RfZm10ID0gaXNjLT51c2VyX2Zvcm1hdHNbaXNjLT5udW1fdXNlcl9mb3JtYXRzIC0gMV07DQor CQl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQorCQkJICJTZW5zb3Igbm90IHN1 cHBvcnRpbmcgJS40cywgdXNpbmcgJS40c1xuIiwNCisJCQkgKGNoYXIgKikmcGl4Zm10LT5waXhl bGZvcm1hdCwgKGNoYXIgKikmc2RfZm10LT5mb3VyY2MpOw0KKwl9DQorDQorCWlmICghc2RfZm10 KSB7DQorCQlyZXQgPSAtRUlOVkFMOw0KKwkJZ290byBpc2NfdHJ5X2ZtdF9lcnI7DQorCX0NCisN CisJLyogU3RlcCA3OiBQcmludCBvdXQgd2hhdCB3ZSBkZWNpZGVkIGZvciBkZWJ1Z2dpbmcgKi8N CisJdjRsMl9kYmcoMSwgZGVidWcsICZpc2MtPnY0bDJfZGV2LA0KKwkJICJQcmVmZXJyaW5nIHRv IGhhdmUgc2Vuc29yIHVzaW5nIGZvcm1hdCAlLjRzXG4iLA0KKwkJIChjaGFyICopJnNkX2ZtdC0+ Zm91cmNjKTsNCisNCisJLyogU3RlcCA4OiBhdCB0aGlzIG1vbWVudCB3ZSBkZWNpZGVkIHdoaWNo IGZvcm1hdCB0aGUgc3ViZGV2IHdpbGwgdXNlICovDQorCWlzYy0+dHJ5X2NvbmZpZy5zZF9mb3Jt YXQgPSBzZF9mbXQ7DQorDQorCS8qIExpbWl0IHRvIEF0bWVsIElTQyBoYXJkd2FyZSBjYXBhYmls aXRpZXMgKi8NCisJaWYgKHBpeGZtdC0+d2lkdGggPiBJU0NfTUFYX1NVUFBPUlRfV0lEVEgpDQor CQlwaXhmbXQtPndpZHRoID0gSVNDX01BWF9TVVBQT1JUX1dJRFRIOw0KKwlpZiAocGl4Zm10LT5o ZWlnaHQgPiBJU0NfTUFYX1NVUFBPUlRfSEVJR0hUKQ0KKwkJcGl4Zm10LT5oZWlnaHQgPSBJU0Nf TUFYX1NVUFBPUlRfSEVJR0hUOw0KKw0KKwkvKg0KKwkgKiBUaGUgbWJ1cyBmb3JtYXQgaXMgdGhl IG9uZSB0aGUgc3ViZGV2IG91dHB1dHMuDQorCSAqIFRoZSBwaXhlbHMgd2lsbCBiZSB0cmFuc2Zl cnJlZCBpbiB0aGlzIGZvcm1hdCBTZW5zb3IgLT4gSVNDDQorCSAqLw0KKwltYnVzX2NvZGUgPSBz ZF9mbXQtPm1idXNfY29kZTsNCisNCisJLyoNCisJICogVmFsaWRhdGUgZm9ybWF0cy4gSWYgdGhl IHJlcXVpcmVkIGZvcm1hdCBpcyBub3QgT0ssIGRlZmF1bHQgdG8gcmF3Lg0KKwkgKi8NCisNCisJ aXNjLT50cnlfY29uZmlnLmZvdXJjYyA9IHBpeGZtdC0+cGl4ZWxmb3JtYXQ7DQorDQorCWlmIChp c2NfdHJ5X3ZhbGlkYXRlX2Zvcm1hdHMoaXNjKSkgew0KKwkJcGl4Zm10LT5waXhlbGZvcm1hdCA9 IGlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MgPSBzZF9mbXQtPmZvdXJjYzsNCisJCS8qIFJlLXRyeSB0 byB2YWxpZGF0ZSB0aGUgbmV3IGZvcm1hdCAqLw0KKwkJcmV0ID0gaXNjX3RyeV92YWxpZGF0ZV9m b3JtYXRzKGlzYyk7DQorCQlpZiAocmV0KQ0KKwkJCWdvdG8gaXNjX3RyeV9mbXRfZXJyOw0KKwl9 DQorDQorCXJldCA9IGlzY190cnlfY29uZmlndXJlX3JscF9kbWEoaXNjLCBybHBfZG1hX2RpcmVj dF9kdW1wKTsNCisJaWYgKHJldCkNCisJCWdvdG8gaXNjX3RyeV9mbXRfZXJyOw0KKw0KKwlyZXQg PSBpc2NfdHJ5X2NvbmZpZ3VyZV9waXBlbGluZShpc2MpOw0KKwlpZiAocmV0KQ0KKwkJZ290byBp c2NfdHJ5X2ZtdF9lcnI7DQorDQorCXY0bDJfZmlsbF9tYnVzX2Zvcm1hdCgmZm9ybWF0LmZvcm1h dCwgcGl4Zm10LCBtYnVzX2NvZGUpOw0KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3Vy cmVudF9zdWJkZXYtPnNkLCBwYWQsIHNldF9mbXQsDQorCQkJICAgICAgICZwYWRfY2ZnLCAmZm9y bWF0KTsNCisJaWYgKHJldCA8IDApDQorCQlnb3RvIGlzY190cnlfZm10X3N1YmRldl9lcnI7DQor DQorCXY0bDJfZmlsbF9waXhfZm9ybWF0KHBpeGZtdCwgJmZvcm1hdC5mb3JtYXQpOw0KKw0KKwlw aXhmbXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KKwlwaXhmbXQtPmJ5dGVzcGVybGluZSA9 IChwaXhmbXQtPndpZHRoICogaXNjLT50cnlfY29uZmlnLmJwcCkgPj4gMzsNCisJcGl4Zm10LT5z aXplaW1hZ2UgPSBwaXhmbXQtPmJ5dGVzcGVybGluZSAqIHBpeGZtdC0+aGVpZ2h0Ow0KKw0KKwlp ZiAoY29kZSkNCisJCSpjb2RlID0gbWJ1c19jb2RlOw0KKw0KKwlyZXR1cm4gMDsNCisNCitpc2Nf dHJ5X2ZtdF9lcnI6DQorCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiQ291bGQgbm90IGZpbmQg YW55IHBvc3NpYmxlIGZvcm1hdCBmb3IgYSB3b3JraW5nIHBpcGVsaW5lXG4iKTsNCitpc2NfdHJ5 X2ZtdF9zdWJkZXZfZXJyOg0KKwltZW1zZXQoJmlzYy0+dHJ5X2NvbmZpZywgMCwgc2l6ZW9mKGlz Yy0+dHJ5X2NvbmZpZykpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IGlz Y19zZXRfZm10KHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikN Cit7DQorCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm9ybWF0ID0gew0KKwkJLndoaWNoID0g VjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCisJfTsNCisJdTMyIG1idXNfY29kZSA9IDA7DQor CWludCByZXQ7DQorDQorCXJldCA9IGlzY190cnlfZm10KGlzYywgZiwgJm1idXNfY29kZSk7DQor CWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwl2NGwyX2ZpbGxfbWJ1c19mb3JtYXQoJmZv cm1hdC5mb3JtYXQsICZmLT5mbXQucGl4LCBtYnVzX2NvZGUpOw0KKwlyZXQgPSB2NGwyX3N1YmRl dl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsDQorCQkJICAgICAgIHNldF9mbXQs IE5VTEwsICZmb3JtYXQpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCWlz Yy0+Zm10ID0gKmY7DQorDQorCWlmIChpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0ICYmIGlzYy0+ Y29uZmlnLnNkX2Zvcm1hdCAmJg0KKwkgICAgaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdCAhPSBp c2MtPmNvbmZpZy5zZF9mb3JtYXQpIHsNCisJCWlzYy0+Y3RybHMuaGlzdF9zdGF0ID0gSElTVF9J TklUOw0KKwkJaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2MpOw0KKwl9DQorCS8qIG1ha2UgdGhlIHRy eSBjb25maWd1cmF0aW9uIGFjdGl2ZSAqLw0KKwlpc2MtPmNvbmZpZyA9IGlzYy0+dHJ5X2NvbmZp ZzsNCisNCisJdjRsMl9kYmcoMSwgZGVidWcsICZpc2MtPnY0bDJfZGV2LCAiTmV3IElTQyBjb25m aWd1cmF0aW9uIGluIHBsYWNlXG4iKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBp bnQgaXNjX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQorCQkJ ICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlz YyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQorDQorCWlmICh2YjJfaXNfc3RyZWFtaW5nKCZpc2Mt PnZiMl92aWRxKSkNCisJCXJldHVybiAtRUJVU1k7DQorDQorCXJldHVybiBpc2Nfc2V0X2ZtdChp c2MsIGYpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZp bGUgKmZpbGUsIHZvaWQgKnByaXYsDQorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCit7DQor CXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KKw0KKwlyZXR1 cm4gaXNjX3RyeV9mbXQoaXNjLCBmLCBOVUxMKTsNCit9DQorDQorc3RhdGljIGludCBpc2NfZW51 bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCisJCQkgICBzdHJ1Y3QgdjRs Ml9pbnB1dCAqaW5wKQ0KK3sNCisJaWYgKGlucC0+aW5kZXggIT0gMCkNCisJCXJldHVybiAtRUlO VkFMOw0KKw0KKwlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOw0KKwlpbnAtPnN0 ZCA9IDA7DQorCXN0cnNjcHkoaW5wLT5uYW1lLCAiQ2FtZXJhIiwgc2l6ZW9mKGlucC0+bmFtZSkp Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2NfZ19pbnB1dChzdHJ1Y3Qg ZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQ0KK3sNCisJKmkgPSAwOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2Nfc19pbnB1dChzdHJ1Y3QgZmls ZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpDQorew0KKwlpZiAoaSA+IDApDQor CQlyZXR1cm4gLUVJTlZBTDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNj X2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3N0cmVhbXBh cm0gKmEpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxl KTsNCisNCisJcmV0dXJuIHY0bDJfZ19wYXJtX2NhcCh2aWRlb19kZXZkYXRhKGZpbGUpLCBpc2Mt PmN1cnJlbnRfc3ViZGV2LT5zZCwgYSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3NfcGFybShz dHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpDQor ew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCisNCisJ cmV0dXJuIHY0bDJfc19wYXJtX2NhcCh2aWRlb19kZXZkYXRhKGZpbGUpLCBpc2MtPmN1cnJlbnRf c3ViZGV2LT5zZCwgYSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2VudW1fZnJhbWVzaXplcyhz dHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsDQorCQkJICAgICAgIHN0cnVjdCB2NGwyX2ZybXNp emVlbnVtICpmc2l6ZSkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZk YXRhKGZpbGUpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfc2l6ZV9lbnVtIGZzZSA9IHsN CisJCS5pbmRleCA9IGZzaXplLT5pbmRleCwNCisJCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1B VF9BQ1RJVkUsDQorCX07DQorCWludCByZXQgPSAtRUlOVkFMOw0KKwlpbnQgaTsNCisNCisJZm9y IChpID0gMDsgaSA8IGlzYy0+bnVtX3VzZXJfZm9ybWF0czsgaSsrKQ0KKwkJaWYgKGlzYy0+dXNl cl9mb3JtYXRzW2ldLT5mb3VyY2MgPT0gZnNpemUtPnBpeGVsX2Zvcm1hdCkNCisJCQlyZXQgPSAw Ow0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMpOyBp KyspDQorCQlpZiAoY29udHJvbGxlcl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmc2l6ZS0+cGl4ZWxf Zm9ybWF0KQ0KKwkJCXJldCA9IDA7DQorDQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0K KwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsIGVu dW1fZnJhbWVfc2l6ZSwNCisJCQkgICAgICAgTlVMTCwgJmZzZSk7DQorCWlmIChyZXQpDQorCQly ZXR1cm4gcmV0Ow0KKw0KKwlmc2UuY29kZSA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19j b2RlOw0KKw0KKwlmc2l6ZS0+dHlwZSA9IFY0TDJfRlJNU0laRV9UWVBFX0RJU0NSRVRFOw0KKwlm c2l6ZS0+ZGlzY3JldGUud2lkdGggPSBmc2UubWF4X3dpZHRoOw0KKwlmc2l6ZS0+ZGlzY3JldGUu aGVpZ2h0ID0gZnNlLm1heF9oZWlnaHQ7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMg aW50IGlzY19lbnVtX2ZyYW1laW50ZXJ2YWxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwN CisJCQkJICAgIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtICpmaXZhbCkNCit7DQorCXN0cnVjdCBp c2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJk ZXZfZnJhbWVfaW50ZXJ2YWxfZW51bSBmaWUgPSB7DQorCQkuaW5kZXggPSBmaXZhbC0+aW5kZXgs DQorCQkud2lkdGggPSBmaXZhbC0+d2lkdGgsDQorCQkuaGVpZ2h0ID0gZml2YWwtPmhlaWdodCwN CisJCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQorCX07DQorCWludCByZXQg PSAtRUlOVkFMOw0KKwlpbnQgaTsNCisNCisJZm9yIChpID0gMDsgaSA8IGlzYy0+bnVtX3VzZXJf Zm9ybWF0czsgaSsrKQ0KKwkJaWYgKGlzYy0+dXNlcl9mb3JtYXRzW2ldLT5mb3VyY2MgPT0gZml2 YWwtPnBpeGVsX2Zvcm1hdCkNCisJCQlyZXQgPSAwOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMpOyBpKyspDQorCQlpZiAoY29udHJvbGxlcl9mb3Jt YXRzW2ldLmZvdXJjYyA9PSBmaXZhbC0+cGl4ZWxfZm9ybWF0KQ0KKwkJCXJldCA9IDA7DQorDQor CWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlz Yy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsDQorCQkJICAgICAgIGVudW1fZnJhbWVfaW50ZXJ2 YWwsIE5VTEwsICZmaWUpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJZmllLmNv ZGUgPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZTsNCisJZml2YWwtPnR5cGUgPSBW NEwyX0ZSTUlWQUxfVFlQRV9ESVNDUkVURTsNCisJZml2YWwtPmRpc2NyZXRlID0gZmllLmludGVy dmFsOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lv Y3RsX29wcyBpc2NfaW9jdGxfb3BzID0gew0KKwkudmlkaW9jX3F1ZXJ5Y2FwCQk9IGlzY19xdWVy eWNhcCwNCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwCT0gaXNjX2VudW1fZm10X3ZpZF9jYXAs DQorCS52aWRpb2NfZ19mbXRfdmlkX2NhcAkJPSBpc2NfZ19mbXRfdmlkX2NhcCwNCisJLnZpZGlv Y19zX2ZtdF92aWRfY2FwCQk9IGlzY19zX2ZtdF92aWRfY2FwLA0KKwkudmlkaW9jX3RyeV9mbXRf dmlkX2NhcAkJPSBpc2NfdHJ5X2ZtdF92aWRfY2FwLA0KKw0KKwkudmlkaW9jX2VudW1faW5wdXQJ CT0gaXNjX2VudW1faW5wdXQsDQorCS52aWRpb2NfZ19pbnB1dAkJCT0gaXNjX2dfaW5wdXQsDQor CS52aWRpb2Nfc19pbnB1dAkJCT0gaXNjX3NfaW5wdXQsDQorDQorCS52aWRpb2NfcmVxYnVmcwkJ CT0gdmIyX2lvY3RsX3JlcWJ1ZnMsDQorCS52aWRpb2NfcXVlcnlidWYJCT0gdmIyX2lvY3RsX3F1 ZXJ5YnVmLA0KKwkudmlkaW9jX3FidWYJCQk9IHZiMl9pb2N0bF9xYnVmLA0KKwkudmlkaW9jX2V4 cGJ1ZgkJCT0gdmIyX2lvY3RsX2V4cGJ1ZiwNCisJLnZpZGlvY19kcWJ1ZgkJCT0gdmIyX2lvY3Rs X2RxYnVmLA0KKwkudmlkaW9jX2NyZWF0ZV9idWZzCQk9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcywN CisJLnZpZGlvY19wcmVwYXJlX2J1ZgkJPSB2YjJfaW9jdGxfcHJlcGFyZV9idWYsDQorCS52aWRp b2Nfc3RyZWFtb24JCT0gdmIyX2lvY3RsX3N0cmVhbW9uLA0KKwkudmlkaW9jX3N0cmVhbW9mZgkJ PSB2YjJfaW9jdGxfc3RyZWFtb2ZmLA0KKw0KKwkudmlkaW9jX2dfcGFybQkJCT0gaXNjX2dfcGFy bSwNCisJLnZpZGlvY19zX3Bhcm0JCQk9IGlzY19zX3Bhcm0sDQorCS52aWRpb2NfZW51bV9mcmFt ZXNpemVzCQk9IGlzY19lbnVtX2ZyYW1lc2l6ZXMsDQorCS52aWRpb2NfZW51bV9mcmFtZWludGVy dmFscwk9IGlzY19lbnVtX2ZyYW1laW50ZXJ2YWxzLA0KKw0KKwkudmlkaW9jX2xvZ19zdGF0dXMJ CT0gdjRsMl9jdHJsX2xvZ19zdGF0dXMsDQorCS52aWRpb2Nfc3Vic2NyaWJlX2V2ZW50CQk9IHY0 bDJfY3RybF9zdWJzY3JpYmVfZXZlbnQsDQorCS52aWRpb2NfdW5zdWJzY3JpYmVfZXZlbnQJPSB2 NGwyX2V2ZW50X3Vuc3Vic2NyaWJlLA0KK307DQorDQorc3RhdGljIGludCBpc2Nfb3BlbihzdHJ1 Y3QgZmlsZSAqZmlsZSkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZk YXRhKGZpbGUpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaXNjLT5jdXJyZW50X3N1YmRl di0+c2Q7DQorCWludCByZXQ7DQorDQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlz Yy0+bG9jaykpDQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOw0KKw0KKwlyZXQgPSB2NGwyX2ZoX29w ZW4oZmlsZSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJZ290byB1bmxvY2s7DQorDQorCWlmICghdjRs Ml9maF9pc19zaW5ndWxhcl9maWxlKGZpbGUpKQ0KKwkJZ290byB1bmxvY2s7DQorDQorCXJldCA9 IHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNfcG93ZXIsIDEpOw0KKwlpZiAocmV0IDwgMCAm JiByZXQgIT0gLUVOT0lPQ1RMQ01EKSB7DQorCQl2NGwyX2ZoX3JlbGVhc2UoZmlsZSk7DQorCQln b3RvIHVubG9jazsNCisJfQ0KKw0KKwlyZXQgPSBpc2Nfc2V0X2ZtdChpc2MsICZpc2MtPmZtdCk7 DQorCWlmIChyZXQpIHsNCisJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNfcG93ZXIsIDAp Ow0KKwkJdjRsMl9maF9yZWxlYXNlKGZpbGUpOw0KKwl9DQorDQordW5sb2NrOg0KKwltdXRleF91 bmxvY2soJmlzYy0+bG9jayk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNj X3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNj ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGlzYy0+ Y3VycmVudF9zdWJkZXYtPnNkOw0KKwlib29sIGZoX3Npbmd1bGFyOw0KKwlpbnQgcmV0Ow0KKw0K KwltdXRleF9sb2NrKCZpc2MtPmxvY2spOw0KKw0KKwlmaF9zaW5ndWxhciA9IHY0bDJfZmhfaXNf c2luZ3VsYXJfZmlsZShmaWxlKTsNCisNCisJcmV0ID0gX3ZiMl9mb3BfcmVsZWFzZShmaWxlLCBO VUxMKTsNCisNCisJaWYgKGZoX3Npbmd1bGFyKQ0KKwkJdjRsMl9zdWJkZXZfY2FsbChzZCwgY29y ZSwgc19wb3dlciwgMCk7DQorDQorCW11dGV4X3VubG9jaygmaXNjLT5sb2NrKTsNCisNCisJcmV0 dXJuIHJldDsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9u cyBpc2NfZm9wcyA9IHsNCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLA0KKwkub3BlbgkJPSBpc2Nf b3BlbiwNCisJLnJlbGVhc2UJPSBpc2NfcmVsZWFzZSwNCisJLnVubG9ja2VkX2lvY3RsCT0gdmlk ZW9faW9jdGwyLA0KKwkucmVhZAkJPSB2YjJfZm9wX3JlYWQsDQorCS5tbWFwCQk9IHZiMl9mb3Bf bW1hcCwNCisJLnBvbGwJCT0gdmIyX2ZvcF9wb2xsLA0KK307DQorDQoraXJxcmV0dXJuX3QgaXNj X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpDQorew0KKwlzdHJ1Y3QgaXNjX2Rldmlj ZSAqaXNjID0gKHN0cnVjdCBpc2NfZGV2aWNlICopZGV2X2lkOw0KKwlzdHJ1Y3QgcmVnbWFwICpy ZWdtYXAgPSBpc2MtPnJlZ21hcDsNCisJdTMyIGlzY19pbnRzciwgaXNjX2ludG1hc2ssIHBlbmRp bmc7DQorCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOw0KKw0KKwlyZWdtYXBfcmVhZChyZWdt YXAsIElTQ19JTlRTUiwgJmlzY19pbnRzcik7DQorCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0lO VE1BU0ssICZpc2NfaW50bWFzayk7DQorDQorCXBlbmRpbmcgPSBpc2NfaW50c3IgJiBpc2NfaW50 bWFzazsNCisNCisJaWYgKGxpa2VseShwZW5kaW5nICYgSVNDX0lOVF9ERE9ORSkpIHsNCisJCXNw aW5fbG9jaygmaXNjLT5kbWFfcXVldWVfbG9jayk7DQorCQlpZiAoaXNjLT5jdXJfZnJtKSB7DQor CQkJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9ICZpc2MtPmN1cl9mcm0tPnZiOw0KKwkJ CXN0cnVjdCB2YjJfYnVmZmVyICp2YiA9ICZ2YnVmLT52YjJfYnVmOw0KKw0KKwkJCXZiLT50aW1l c3RhbXAgPSBrdGltZV9nZXRfbnMoKTsNCisJCQl2YnVmLT5zZXF1ZW5jZSA9IGlzYy0+c2VxdWVu Y2UrKzsNCisJCQl2YjJfYnVmZmVyX2RvbmUodmIsIFZCMl9CVUZfU1RBVEVfRE9ORSk7DQorCQkJ aXNjLT5jdXJfZnJtID0gTlVMTDsNCisJCX0NCisNCisJCWlmICghbGlzdF9lbXB0eSgmaXNjLT5k bWFfcXVldWUpICYmICFpc2MtPnN0b3ApIHsNCisJCQlpc2MtPmN1cl9mcm0gPSBsaXN0X2ZpcnN0 X2VudHJ5KCZpc2MtPmRtYV9xdWV1ZSwNCisJCQkJCQkgICAgIHN0cnVjdCBpc2NfYnVmZmVyLCBs aXN0KTsNCisJCQlsaXN0X2RlbCgmaXNjLT5jdXJfZnJtLT5saXN0KTsNCisNCisJCQlpc2Nfc3Rh cnRfZG1hKGlzYyk7DQorCQl9DQorDQorCQlpZiAoaXNjLT5zdG9wKQ0KKwkJCWNvbXBsZXRlKCZp c2MtPmNvbXApOw0KKw0KKwkJcmV0ID0gSVJRX0hBTkRMRUQ7DQorCQlzcGluX3VubG9jaygmaXNj LT5kbWFfcXVldWVfbG9jayk7DQorCX0NCisNCisJaWYgKHBlbmRpbmcgJiBJU0NfSU5UX0hJU0RP TkUpIHsNCisJCXNjaGVkdWxlX3dvcmsoJmlzYy0+YXdiX3dvcmspOw0KKwkJcmV0ID0gSVJRX0hB TkRMRUQ7DQorCX0NCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQgaXNjX2hp c3RfY291bnQoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgdTMyICptaW4sIHUzMiAqbWF4KQ0KK3sN CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQorCXN0cnVjdCBpc2NfY3Ry bHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQorCXUzMiAqaGlzdF9jb3VudCA9ICZjdHJscy0+aGlz dF9jb3VudFtjdHJscy0+aGlzdF9pZF07DQorCXUzMiAqaGlzdF9lbnRyeSA9ICZjdHJscy0+aGlz dF9lbnRyeVswXTsNCisJdTMyIGk7DQorDQorCSptaW4gPSAwOw0KKwkqbWF4ID0gSElTVF9FTlRS SUVTOw0KKw0KKwlyZWdtYXBfYnVsa19yZWFkKHJlZ21hcCwgSVNDX0hJU19FTlRSWSwgaGlzdF9l bnRyeSwgSElTVF9FTlRSSUVTKTsNCisNCisJKmhpc3RfY291bnQgPSAwOw0KKwkvKg0KKwkgKiB3 ZSBkZWxpYmVyYXRlbHkgaWdub3JlIHRoZSBlbmQgb2YgdGhlIGhpc3RvZ3JhbSwNCisJICogdGhl IG1vc3Qgd2hpdGUgcGl4ZWxzDQorCSAqLw0KKwlmb3IgKGkgPSAxOyBpIDwgSElTVF9FTlRSSUVT OyBpKyspIHsNCisJCWlmICgqaGlzdF9lbnRyeSAmJiAhKm1pbikNCisJCQkqbWluID0gaTsNCisJ CWlmICgqaGlzdF9lbnRyeSkNCisJCQkqbWF4ID0gaTsNCisJCSpoaXN0X2NvdW50ICs9IGkgKiAo Kmhpc3RfZW50cnkrKyk7DQorCX0NCisNCisJaWYgKCEqbWluKQ0KKwkJKm1pbiA9IDE7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIGlzY193Yl91cGRhdGUoc3RydWN0IGlzY19jdHJscyAqY3RybHMpDQor ew0KKwl1MzIgKmhpc3RfY291bnQgPSAmY3RybHMtPmhpc3RfY291bnRbMF07DQorCXUzMiBjLCBv ZmZzZXRbNF07DQorCXU2NCBhdmcgPSAwOw0KKwkvKiBXZSBjb21wdXRlIHR3byBnYWlucywgc3Ry ZXRjaCBnYWluIGFuZCBncmV5IHdvcmxkIGdhaW4gKi8NCisJdTMyIHNfZ2Fpbls0XSwgZ3dfZ2Fp bls0XTsNCisNCisJLyoNCisJICogQWNjb3JkaW5nIHRvIEdyZXkgV29ybGQsIHdlIG5lZWQgdG8g c2V0IGdhaW5zIGZvciBSL0IgdG8gbm9ybWFsaXplDQorCSAqIHRoZW0gdG93YXJkcyB0aGUgZ3Jl ZW4gY2hhbm5lbC4NCisJICogVGh1cyB3ZSB3YW50IHRvIGtlZXAgR3JlZW4gYXMgZml4ZWQgYW5k IGFkanVzdCBvbmx5IFJlZC9CbHVlDQorCSAqIENvbXB1dGUgdGhlIGF2ZXJhZ2Ugb2YgdGhlIGJv dGggZ3JlZW4gY2hhbm5lbHMgZmlyc3QNCisJICovDQorCWF2ZyA9ICh1NjQpaGlzdF9jb3VudFtJ U0NfSElTX0NGR19NT0RFX0dSXSArDQorCQkodTY0KWhpc3RfY291bnRbSVNDX0hJU19DRkdfTU9E RV9HQl07DQorCWF2ZyA+Pj0gMTsNCisNCisJLyogR3JlZW4gaGlzdG9ncmFtIGlzIG51bGwsIG5v dGhpbmcgdG8gZG8gKi8NCisJaWYgKCFhdmcpDQorCQlyZXR1cm47DQorDQorCWZvciAoYyA9IElT Q19ISVNfQ0ZHX01PREVfR1I7IGMgPD0gSVNDX0hJU19DRkdfTU9ERV9COyBjKyspIHsNCisJCS8q DQorCQkgKiB0aGUgY29sb3Igb2Zmc2V0IGlzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBoaXN0 b2dyYW0uDQorCQkgKiB3ZSBzdHJldGNoIHRoaXMgY29sb3IgdG8gdGhlIGZ1bGwgcmFuZ2UgYnkg c3Vic3RyYWN0aW5nDQorCQkgKiB0aGlzIHZhbHVlIGZyb20gdGhlIGNvbG9yIGNvbXBvbmVudC4N CisJCSAqLw0KKwkJb2Zmc2V0W2NdID0gY3RybHMtPmhpc3RfbWlubWF4W2NdW0hJU1RfTUlOX0lO REVYXTsNCisJCS8qDQorCQkgKiBUaGUgb2Zmc2V0IGlzIGFsd2F5cyBhdCBsZWFzdCAxLiBJZiB0 aGUgb2Zmc2V0IGlzIDEsIHdlIGRvDQorCQkgKiBub3QgbmVlZCB0byBhZGp1c3QgaXQsIHNvIG91 ciByZXN1bHQgbXVzdCBiZSB6ZXJvLg0KKwkJICogdGhlIG9mZnNldCBpcyBjb21wdXRlZCBpbiBh IGhpc3RvZ3JhbSBvbiA5IGJpdHMgKDAuLjUxMikNCisJCSAqIGJ1dCB0aGUgb2Zmc2V0IGluIHJl Z2lzdGVyIGlzIGJhc2VkIG9uDQorCQkgKiAxMiBiaXRzIHBpcGVsaW5lICgwLi40MDk2KS4NCisJ CSAqIHdlIG5lZWQgdG8gc2hpZnQgd2l0aCB0aGUgMyBiaXRzIHRoYXQgdGhlIGhpc3RvZ3JhbSBp cw0KKwkJICogaWdub3JpbmcNCisJCSAqLw0KKwkJY3RybHMtPm9mZnNldFtjXSA9IChvZmZzZXRb Y10gLSAxKSA8PCAzOw0KKw0KKwkJLyogdGhlIG9mZnNldCBpcyB0aGVuIHRha2VuIGFuZCBjb252 ZXJ0ZWQgdG8gMidzIGNvbXBsZW1lbnRzICovDQorCQlpZiAoIWN0cmxzLT5vZmZzZXRbY10pDQor CQkJY3RybHMtPm9mZnNldFtjXSA9IElTQ19XQl9PX1pFUk9fVkFMOw0KKw0KKwkJLyoNCisJCSAq IHRoZSBzdHJldGNoIGdhaW4gaXMgdGhlIHRvdGFsIG51bWJlciBvZiBoaXN0b2dyYW0gYmlucw0K KwkJICogZGl2aWRlZCBieSB0aGUgYWN0dWFsIHJhbmdlIG9mIGNvbG9yIGNvbXBvbmVudCAoTWF4 IC0gTWluKQ0KKwkJICogSWYgd2UgY29tcHV0ZSBnYWluIGxpa2UgdGhpcywgdGhlIGFjdHVhbCBj b2xvciBjb21wb25lbnQNCisJCSAqIHdpbGwgYmUgc3RyZXRjaGVkIHRvIHRoZSBmdWxsIGhpc3Rv Z3JhbS4NCisJCSAqIFdlIG5lZWQgdG8gc2hpZnQgOSBiaXRzIGZvciBwcmVjaXNpb24sIHdlIGhh dmUgOSBiaXRzIGZvcg0KKwkJICogZGVjaW1hbHMNCisJCSAqLw0KKwkJc19nYWluW2NdID0gKEhJ U1RfRU5UUklFUyA8PCA5KSAvDQorCQkJKGN0cmxzLT5oaXN0X21pbm1heFtjXVtISVNUX01BWF9J TkRFWF0gLQ0KKwkJCWN0cmxzLT5oaXN0X21pbm1heFtjXVtISVNUX01JTl9JTkRFWF0gKyAxKTsN CisNCisJCS8qDQorCQkgKiBOb3cgd2UgaGF2ZSB0byBjb21wdXRlIHRoZSBnYWluIHcuci50LiB0 aGUgYXZlcmFnZS4NCisJCSAqIEFkZC9sb3NlIGdhaW4gdG8gdGhlIGNvbXBvbmVudCB0b3dhcmRz IHRoZSBhdmVyYWdlLg0KKwkJICogSWYgaXQgaGFwcGVucyB0aGF0IHRoZSBjb21wb25lbnQgaXMg emVybywgdXNlIHRoZQ0KKwkJICogZml4ZWQgcG9pbnQgdmFsdWUgOiAxLjAgZ2Fpbi4NCisJCSAq Lw0KKwkJaWYgKGhpc3RfY291bnRbY10pDQorCQkJZ3dfZ2FpbltjXSA9IGRpdl91NjQoYXZnIDw8 IDksIGhpc3RfY291bnRbY10pOw0KKwkJZWxzZQ0KKwkJCWd3X2dhaW5bY10gPSAxIDw8IDk7DQor DQorCQkvKiBtdWx0aXBseSBib3RoIGdhaW5zIGFuZCBhZGp1c3QgZm9yIGRlY2ltYWxzICovDQor CQljdHJscy0+Z2FpbltjXSA9IHNfZ2FpbltjXSAqIGd3X2dhaW5bY107DQorCQljdHJscy0+Z2Fp bltjXSA+Pj0gOTsNCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZCBpc2NfYXdiX3dvcmsoc3RydWN0 IHdvcmtfc3RydWN0ICp3KQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9DQorCQljb250 YWluZXJfb2Yodywgc3RydWN0IGlzY19kZXZpY2UsIGF3Yl93b3JrKTsNCisJc3RydWN0IHJlZ21h cCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQorCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlz Yy0+Y3RybHM7DQorCXUzMiBoaXN0X2lkID0gY3RybHMtPmhpc3RfaWQ7DQorCXUzMiBiYXlzZWw7 DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorCXUzMiBtaW4sIG1heDsNCisNCisJLyogc3RyZWFt aW5nIGlzIG5vdCBhY3RpdmUgYW55bW9yZSAqLw0KKwlpZiAoaXNjLT5zdG9wKQ0KKwkJcmV0dXJu Ow0KKw0KKwlpZiAoY3RybHMtPmhpc3Rfc3RhdCAhPSBISVNUX0VOQUJMRUQpDQorCQlyZXR1cm47 DQorDQorCWlzY19oaXN0X2NvdW50KGlzYywgJm1pbiwgJm1heCk7DQorCWN0cmxzLT5oaXN0X21p bm1heFtoaXN0X2lkXVtISVNUX01JTl9JTkRFWF0gPSBtaW47DQorCWN0cmxzLT5oaXN0X21pbm1h eFtoaXN0X2lkXVtISVNUX01BWF9JTkRFWF0gPSBtYXg7DQorDQorCWlmIChoaXN0X2lkICE9IElT Q19ISVNfQ0ZHX01PREVfQikgew0KKwkJaGlzdF9pZCsrOw0KKwl9IGVsc2Ugew0KKwkJaXNjX3di X3VwZGF0ZShjdHJscyk7DQorCQloaXN0X2lkID0gSVNDX0hJU19DRkdfTU9ERV9HUjsNCisJfQ0K Kw0KKwljdHJscy0+aGlzdF9pZCA9IGhpc3RfaWQ7DQorCWJheXNlbCA9IGlzYy0+Y29uZmlnLnNk X2Zvcm1hdC0+Y2ZhX2JheWNmZyA8PCBJU0NfSElTX0NGR19CQVlTRUxfU0hJRlQ7DQorDQorCS8q IGlmIG5vIG1vcmUgYXV0byB3aGl0ZSBiYWxhbmNlLCByZXNldCBjb250cm9scy4gKi8NCisJaWYg KGN0cmxzLT5hd2IgPT0gSVNDX1dCX05PTkUpDQorCQlpc2NfcmVzZXRfYXdiX2N0cmxzKGlzYyk7 DQorDQorCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNjLT5kZXYpOw0KKw0KKwkvKg0KKwkgKiBvbmx5 IHVwZGF0ZSBpZiB3ZSBoYXZlIGFsbCB0aGUgcmVxdWlyZWQgaGlzdG9ncmFtcyBhbmQgY29udHJv bHMNCisJICogaWYgYXdiIGhhcyBiZWVuIGRpc2FibGVkLCB3ZSBuZWVkIHRvIHJlc2V0IHJlZ2lz dGVycyBhcyB3ZWxsLg0KKwkgKi8NCisJaWYgKGhpc3RfaWQgPT0gSVNDX0hJU19DRkdfTU9ERV9H UiB8fCBjdHJscy0+YXdiID09IElTQ19XQl9OT05FKSB7DQorCQkvKg0KKwkJICogSXQgbWF5IGhh cHBlbiB0aGF0IERNQSBEb25lIElSUSB3aWxsIHRyaWdnZXIgd2hpbGUgd2UgYXJlDQorCQkgKiB1 cGRhdGluZyB3aGl0ZSBiYWxhbmNlIHJlZ2lzdGVycyBoZXJlLg0KKwkJICogSW4gdGhhdCBjYXNl LCBvbmx5IHBhcnRzIG9mIHRoZSBjb250cm9scyBoYXZlIGJlZW4gdXBkYXRlZC4NCisJCSAqIFdl IGNhbiBhdm9pZCB0aGF0IGJ5IGxvY2tpbmcgdGhlIHNlY3Rpb24uDQorCQkgKi8NCisJCXNwaW5f bG9ja19pcnFzYXZlKCZpc2MtPmF3Yl9sb2NrLCBmbGFncyk7DQorCQlpc2NfdXBkYXRlX2F3Yl9j dHJscyhpc2MpOw0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5hd2JfbG9jaywgZmxh Z3MpOw0KKw0KKwkJLyoNCisJCSAqIGlmIHdlIGFyZSBkb2luZyBqdXN0IHRoZSBvbmUgdGltZSB3 aGl0ZSBiYWxhbmNlIGFkanVzdG1lbnQsDQorCQkgKiB3ZSBhcmUgYmFzaWNhbGx5IGRvbmUuDQor CQkgKi8NCisJCWlmIChjdHJscy0+YXdiID09IElTQ19XQl9PTkVUSU1FKSB7DQorCQkJdjRsMl9p bmZvKCZpc2MtPnY0bDJfZGV2LA0KKwkJCQkgICJDb21wbGV0ZWQgb25lIHRpbWUgd2hpdGUtYmFs YW5jZSBhZGp1c3RtZW50LlxuIik7DQorCQkJY3RybHMtPmF3YiA9IElTQ19XQl9OT05FOw0KKwkJ fQ0KKwl9DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNfQ0ZHLCBoaXN0X2lkIHwgYmF5 c2VsIHwgSVNDX0hJU19DRkdfUkFSKTsNCisJaXNjX3VwZGF0ZV9wcm9maWxlKGlzYyk7DQorCS8q IGlmIGF3YiBoYXMgYmVlbiBkaXNhYmxlZCwgd2UgZG9uJ3QgbmVlZCB0byBzdGFydCBhbm90aGVy IGhpc3RvZ3JhbSAqLw0KKwlpZiAoY3RybHMtPmF3YikNCisJCXJlZ21hcF93cml0ZShyZWdtYXAs IElTQ19DVFJMRU4sIElTQ19DVFJMX0hJU1JFUSk7DQorDQorCXBtX3J1bnRpbWVfcHV0X3N5bmMo aXNjLT5kZXYpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19zX2N0cmwoc3RydWN0IHY0bDJfY3Ry bCAqY3RybCkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJfb2YoY3Ry bC0+aGFuZGxlciwNCisJCQkJCSAgICAgc3RydWN0IGlzY19kZXZpY2UsIGN0cmxzLmhhbmRsZXIp Ow0KKwlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KKw0KKwlpZiAoY3Ry bC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19JTkFDVElWRSkNCisJCXJldHVybiAwOw0KKw0KKwlz d2l0Y2ggKGN0cmwtPmlkKSB7DQorCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoNCisJCWN0cmxz LT5icmlnaHRuZXNzID0gY3RybC0+dmFsICYgSVNDX0NCQ19CUklHSFRfTUFTSzsNCisJCWJyZWFr Ow0KKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOg0KKwkJY3RybHMtPmNvbnRyYXN0ID0gY3RybC0+ dmFsICYgSVNDX0NCQ19DT05UUkFTVF9NQVNLOw0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9DSURf R0FNTUE6DQorCQljdHJscy0+Z2FtbWFfaW5kZXggPSBjdHJsLT52YWw7DQorCQlicmVhazsNCisJ Y2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6DQorCQlpZiAoY3RybC0+dmFsID09IDEp DQorCQkJY3RybHMtPmF3YiA9IElTQ19XQl9BVVRPOw0KKwkJZWxzZQ0KKwkJCWN0cmxzLT5hd2Ig PSBJU0NfV0JfTk9ORTsNCisNCisJCS8qIHdlIGRpZCBub3QgY29uZmlndXJlIElTQyB5ZXQgKi8N CisJCWlmICghaXNjLT5jb25maWcuc2RfZm9ybWF0KQ0KKwkJCWJyZWFrOw0KKw0KKwkJaWYgKGN0 cmxzLT5oaXN0X3N0YXQgIT0gSElTVF9FTkFCTEVEKQ0KKwkJCWlzY19yZXNldF9hd2JfY3RybHMo aXNjKTsNCisNCisJCWlmIChpc2MtPmN0cmxzLmF3YiA9PSBJU0NfV0JfQVVUTyAmJg0KKwkJICAg IHZiMl9pc19zdHJlYW1pbmcoJmlzYy0+dmIyX3ZpZHEpICYmDQorCQkgICAgSVNDX0lTX0ZPUk1B VF9SQVcoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KKwkJCWlzY19zZXRfaGlz dG9ncmFtKGlzYywgdHJ1ZSk7DQorDQorCQlicmVhazsNCisJY2FzZSBWNEwyX0NJRF9ET19XSElU RV9CQUxBTkNFOg0KKwkJLyogaWYgQVdCIGlzIGVuYWJsZWQsIGRvIG5vdGhpbmcgKi8NCisJCWlm IChjdHJscy0+YXdiID09IElTQ19XQl9BVVRPKQ0KKwkJCXJldHVybiAwOw0KKw0KKwkJY3RybHMt PmF3YiA9IElTQ19XQl9PTkVUSU1FOw0KKwkJaXNjX3NldF9oaXN0b2dyYW0oaXNjLCB0cnVlKTsN CisJCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2RldiwNCisJCQkgIk9uZSB0aW1lIHdo aXRlLWJhbGFuY2Ugc3RhcnRlZC5cbiIpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1 cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0 cnVjdCB2NGwyX2N0cmxfb3BzIGlzY19jdHJsX29wcyA9IHsNCisJLnNfY3RybAk9IGlzY19zX2N0 cmwsDQorfTsNCisNCitzdGF0aWMgaW50IGlzY19jdHJsX2luaXQoc3RydWN0IGlzY19kZXZpY2Ug KmlzYykNCit7DQorCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzICpvcHMgPSAmaXNjX2N0cmxf b3BzOw0KKwlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KKwlzdHJ1Y3Qg djRsMl9jdHJsX2hhbmRsZXIgKmhkbCA9ICZjdHJscy0+aGFuZGxlcjsNCisJaW50IHJldDsNCisN CisJY3RybHMtPmhpc3Rfc3RhdCA9IEhJU1RfSU5JVDsNCisJaXNjX3Jlc2V0X2F3Yl9jdHJscyhp c2MpOw0KKw0KKwlyZXQgPSB2NGwyX2N0cmxfaGFuZGxlcl9pbml0KGhkbCwgNSk7DQorCWlmIChy ZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJY3RybHMtPmJyaWdodG5lc3MgPSAwOw0KKwlj dHJscy0+Y29udHJhc3QgPSAyNTY7DQorDQorCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBW NEwyX0NJRF9CUklHSFRORVNTLCAtMTAyNCwgMTAyMywgMSwgMCk7DQorCXY0bDJfY3RybF9uZXdf c3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9DT05UUkFTVCwgLTIwNDgsIDIwNDcsIDEsIDI1Nik7DQor CXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9HQU1NQSwgMCwgR0FNTUFfTUFY LCAxLCAyKTsNCisJdjRsMl9jdHJsX25ld19zdGQoaGRsLCBvcHMsIFY0TDJfQ0lEX0FVVE9fV0hJ VEVfQkFMQU5DRSwgMCwgMSwgMSwgMSk7DQorDQorCS8qIGRvX3doaXRlX2JhbGFuY2UgaXMgYSBi dXR0b24sIHNvIG1pbixtYXgsc3RlcCxkZWZhdWx0IGFyZSBpZ25vcmVkICovDQorCWlzYy0+ZG9f d2JfY3RybCA9IHY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9ET19XSElURV9C QUxBTkNFLA0KKwkJCQkJICAgIDAsIDAsIDAsIDApOw0KKw0KKwl2NGwyX2N0cmxfYWN0aXZhdGUo aXNjLT5kb193Yl9jdHJsLCBmYWxzZSk7DQorDQorCXY0bDJfY3RybF9oYW5kbGVyX3NldHVwKGhk bCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19hc3luY19ib3VuZChz dHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAqbm90aWZpZXIsDQorCQkJICAgIHN0cnVjdCB2NGwy X3N1YmRldiAqc3ViZGV2LA0KKwkJCSAgICBzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYgKmFzZCkN Cit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJfb2Yobm90aWZpZXItPnY0 bDJfZGV2LA0KKwkJCQkJICAgICAgc3RydWN0IGlzY19kZXZpY2UsIHY0bDJfZGV2KTsNCisJc3Ry dWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXZfZW50aXR5ID0NCisJCWNvbnRhaW5lcl9vZihu b3RpZmllciwgc3RydWN0IGlzY19zdWJkZXZfZW50aXR5LCBub3RpZmllcik7DQorDQorCWlmICh2 aWRlb19pc19yZWdpc3RlcmVkKCZpc2MtPnZpZGVvX2RldikpIHsNCisJCXY0bDJfZXJyKCZpc2Mt PnY0bDJfZGV2LCAib25seSBzdXBwb3J0cyBvbmUgc3ViLWRldmljZS5cbiIpOw0KKwkJcmV0dXJu IC1FQlVTWTsNCisJfQ0KKw0KKwlzdWJkZXZfZW50aXR5LT5zZCA9IHN1YmRldjsNCisNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlzY19hc3luY191bmJpbmQoc3RydWN0IHY0bDJf YXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyLA0KKwkJCSAgICAgIHN0cnVjdCB2NGwyX3N1YmRldiAq c3ViZGV2LA0KKwkJCSAgICAgIHN0cnVjdCB2NGwyX2FzeW5jX3N1YmRldiAqYXNkKQ0KK3sNCisJ c3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IGNvbnRhaW5lcl9vZihub3RpZmllci0+djRsMl9kZXYs DQorCQkJCQkgICAgICBzdHJ1Y3QgaXNjX2RldmljZSwgdjRsMl9kZXYpOw0KKwljYW5jZWxfd29y a19zeW5jKCZpc2MtPmF3Yl93b3JrKTsNCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmlzYy0+ dmlkZW9fZGV2KTsNCisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmaXNjLT5jdHJscy5oYW5kbGVy KTsNCit9DQorDQorc3RhdGljIHN0cnVjdCBpc2NfZm9ybWF0ICpmaW5kX2Zvcm1hdF9ieV9jb2Rl KHVuc2lnbmVkIGludCBjb2RlLCBpbnQgKmluZGV4KQ0KK3sNCisJc3RydWN0IGlzY19mb3JtYXQg KmZtdCA9ICZmb3JtYXRzX2xpc3RbMF07DQorCXVuc2lnbmVkIGludCBpOw0KKw0KKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShmb3JtYXRzX2xpc3QpOyBpKyspIHsNCisJCWlmIChmbXQtPm1i dXNfY29kZSA9PSBjb2RlKSB7DQorCQkJKmluZGV4ID0gaTsNCisJCQlyZXR1cm4gZm10Ow0KKwkJ fQ0KKw0KKwkJZm10Kys7DQorCX0NCisNCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KK3N0YXRpYyBp bnQgaXNjX2Zvcm1hdHNfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KK3sNCisJc3RydWN0 IGlzY19mb3JtYXQgKmZtdDsNCisJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYgPSBpc2MtPmN1 cnJlbnRfc3ViZGV2LT5zZDsNCisJdW5zaWduZWQgaW50IG51bV9mbXRzLCBpLCBqOw0KKwl1MzIg bGlzdF9zaXplID0gQVJSQVlfU0laRShmb3JtYXRzX2xpc3QpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJk ZXZfbWJ1c19jb2RlX2VudW0gbWJ1c19jb2RlID0gew0KKwkJLndoaWNoID0gVjRMMl9TVUJERVZf Rk9STUFUX0FDVElWRSwNCisJfTsNCisNCisJbnVtX2ZtdHMgPSAwOw0KKwl3aGlsZSAoIXY0bDJf c3ViZGV2X2NhbGwoc3ViZGV2LCBwYWQsIGVudW1fbWJ1c19jb2RlLA0KKwkgICAgICAgTlVMTCwg Jm1idXNfY29kZSkpIHsNCisJCW1idXNfY29kZS5pbmRleCsrOw0KKw0KKwkJZm10ID0gZmluZF9m b3JtYXRfYnlfY29kZShtYnVzX2NvZGUuY29kZSwgJmkpOw0KKwkJaWYgKCFmbXQpIHsNCisJCQl2 NGwyX3dhcm4oJmlzYy0+djRsMl9kZXYsICJNYnVzIGNvZGUgJXggbm90IHN1cHBvcnRlZFxuIiwN CisJCQkJICBtYnVzX2NvZGUuY29kZSk7DQorCQkJY29udGludWU7DQorCQl9DQorDQorCQlmbXQt PnNkX3N1cHBvcnQgPSB0cnVlOw0KKwkJbnVtX2ZtdHMrKzsNCisJfQ0KKw0KKwlpZiAoIW51bV9m bXRzKQ0KKwkJcmV0dXJuIC1FTlhJTzsNCisNCisJaXNjLT5udW1fdXNlcl9mb3JtYXRzID0gbnVt X2ZtdHM7DQorCWlzYy0+dXNlcl9mb3JtYXRzID0gZGV2bV9rY2FsbG9jKGlzYy0+ZGV2LA0KKwkJ CQkJIG51bV9mbXRzLCBzaXplb2YoKmlzYy0+dXNlcl9mb3JtYXRzKSwNCisJCQkJCSBHRlBfS0VS TkVMKTsNCisJaWYgKCFpc2MtPnVzZXJfZm9ybWF0cykNCisJCXJldHVybiAtRU5PTUVNOw0KKw0K KwlmbXQgPSAmZm9ybWF0c19saXN0WzBdOw0KKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGxpc3Rf c2l6ZTsgaSsrKSB7DQorCQlpZiAoZm10LT5zZF9zdXBwb3J0KQ0KKwkJCWlzYy0+dXNlcl9mb3Jt YXRzW2orK10gPSBmbXQ7DQorCQlmbXQrKzsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQor c3RhdGljIGludCBpc2Nfc2V0X2RlZmF1bHRfZm10KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQor ew0KKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgZiA9IHsNCisJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9W SURFT19DQVBUVVJFLA0KKwkJLmZtdC5waXggPSB7DQorCQkJLndpZHRoCQk9IFZHQV9XSURUSCwN CisJCQkuaGVpZ2h0CQk9IFZHQV9IRUlHSFQsDQorCQkJLmZpZWxkCQk9IFY0TDJfRklFTERfTk9O RSwNCisJCQkucGl4ZWxmb3JtYXQJPSBpc2MtPnVzZXJfZm9ybWF0c1swXS0+Zm91cmNjLA0KKwkJ fSwNCisJfTsNCisJaW50IHJldDsNCisNCisJcmV0ID0gaXNjX3RyeV9mbXQoaXNjLCAmZiwgTlVM TCk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlpc2MtPmZtdCA9IGY7DQorCXJl dHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19hc3luY19jb21wbGV0ZShzdHJ1Y3QgdjRs Ml9hc3luY19ub3RpZmllciAqbm90aWZpZXIpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNj ID0gY29udGFpbmVyX29mKG5vdGlmaWVyLT52NGwyX2RldiwNCisJCQkJCSAgICAgIHN0cnVjdCBp c2NfZGV2aWNlLCB2NGwyX2Rldik7DQorCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSAmaXNj LT52aWRlb19kZXY7DQorCXN0cnVjdCB2YjJfcXVldWUgKnEgPSAmaXNjLT52YjJfdmlkcTsNCisJ aW50IHJldDsNCisNCisJSU5JVF9XT1JLKCZpc2MtPmF3Yl93b3JrLCBpc2NfYXdiX3dvcmspOw0K Kw0KKwlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXZfbm9kZXMoJmlzYy0+djRsMl9k ZXYpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJGYWls ZWQgdG8gcmVnaXN0ZXIgc3ViZGV2IG5vZGVzXG4iKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisN CisJaXNjLT5jdXJyZW50X3N1YmRldiA9IGNvbnRhaW5lcl9vZihub3RpZmllciwNCisJCQkJCSAg IHN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSwgbm90aWZpZXIpOw0KKwltdXRleF9pbml0KCZpc2Mt PmxvY2spOw0KKwlpbml0X2NvbXBsZXRpb24oJmlzYy0+Y29tcCk7DQorDQorCS8qIEluaXRpYWxp emUgdmlkZW9idWYyIHF1ZXVlICovDQorCXEtPnR5cGUJCQk9IFY0TDJfQlVGX1RZUEVfVklERU9f Q0FQVFVSRTsNCisJcS0+aW9fbW9kZXMJCT0gVkIyX01NQVAgfCBWQjJfRE1BQlVGIHwgVkIyX1JF QUQ7DQorCXEtPmRydl9wcml2CQk9IGlzYzsNCisJcS0+YnVmX3N0cnVjdF9zaXplCT0gc2l6ZW9m KHN0cnVjdCBpc2NfYnVmZmVyKTsNCisJcS0+b3BzCQkJPSAmaXNjX3ZiMl9vcHM7DQorCXEtPm1l bV9vcHMJCT0gJnZiMl9kbWFfY29udGlnX21lbW9wczsNCisJcS0+dGltZXN0YW1wX2ZsYWdzCT0g VjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDOw0KKwlxLT5sb2NrCQkJPSAmaXNjLT5s b2NrOw0KKwlxLT5taW5fYnVmZmVyc19uZWVkZWQJPSAxOw0KKwlxLT5kZXYJCQk9IGlzYy0+ZGV2 Ow0KKw0KKwlyZXQgPSB2YjJfcXVldWVfaW5pdChxKTsNCisJaWYgKHJldCA8IDApIHsNCisJCXY0 bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KKwkJCSAidmIyX3F1ZXVlX2luaXQoKSBmYWlsZWQ6ICVk XG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwkvKiBJbml0IHZpZGVvIGRtYSBx dWV1ZXMgKi8NCisJSU5JVF9MSVNUX0hFQUQoJmlzYy0+ZG1hX3F1ZXVlKTsNCisJc3Bpbl9sb2Nr X2luaXQoJmlzYy0+ZG1hX3F1ZXVlX2xvY2spOw0KKwlzcGluX2xvY2tfaW5pdCgmaXNjLT5hd2Jf bG9jayk7DQorDQorCXJldCA9IGlzY19mb3JtYXRzX2luaXQoaXNjKTsNCisJaWYgKHJldCA8IDAp IHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KKwkJCSAiSW5pdCBmb3JtYXQgZmFpbGVk OiAlZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0ID0gaXNjX3NldF9k ZWZhdWx0X2ZtdChpc2MpOw0KKwlpZiAocmV0KSB7DQorCQl2NGwyX2VycigmaXNjLT52NGwyX2Rl diwgIkNvdWxkIG5vdCBzZXQgZGVmYXVsdCBmb3JtYXRcbiIpOw0KKwkJcmV0dXJuIHJldDsNCisJ fQ0KKw0KKwlyZXQgPSBpc2NfY3RybF9pbml0KGlzYyk7DQorCWlmIChyZXQpIHsNCisJCXY0bDJf ZXJyKCZpc2MtPnY0bDJfZGV2LCAiSW5pdCBpc2MgY3Ryb2xzIGZhaWxlZDogJWRcbiIsIHJldCk7 DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCS8qIFJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLw0K KwlzdHJzY3B5KHZkZXYtPm5hbWUsIEFUTUVMX0lTQ19OQU1FLCBzaXplb2YodmRldi0+bmFtZSkp Ow0KKwl2ZGV2LT5yZWxlYXNlCQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5Ow0KKwl2ZGV2 LT5mb3BzCQk9ICZpc2NfZm9wczsNCisJdmRldi0+aW9jdGxfb3BzCQk9ICZpc2NfaW9jdGxfb3Bz Ow0KKwl2ZGV2LT52NGwyX2RldgkJPSAmaXNjLT52NGwyX2RldjsNCisJdmRldi0+dmZsX2RpcgkJ PSBWRkxfRElSX1JYOw0KKwl2ZGV2LT5xdWV1ZQkJPSBxOw0KKwl2ZGV2LT5sb2NrCQk9ICZpc2Mt PmxvY2s7DQorCXZkZXYtPmN0cmxfaGFuZGxlcgk9ICZpc2MtPmN0cmxzLmhhbmRsZXI7DQorCXZk ZXYtPmRldmljZV9jYXBzCT0gVjRMMl9DQVBfU1RSRUFNSU5HIHwgVjRMMl9DQVBfVklERU9fQ0FQ VFVSRTsNCisJdmlkZW9fc2V0X2RydmRhdGEodmRldiwgaXNjKTsNCisNCisJcmV0ID0gdmlkZW9f cmVnaXN0ZXJfZGV2aWNlKHZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsNCisJaWYgKHJldCA8 IDApIHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KKwkJCSAidmlkZW9fcmVnaXN0ZXJf ZGV2aWNlIGZhaWxlZDogJWRcbiIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJl dHVybiAwOw0KK30NCisNCitjb25zdCBzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllcl9vcGVyYXRp b25zIGlzY19hc3luY19vcHMgPSB7DQorCS5ib3VuZCA9IGlzY19hc3luY19ib3VuZCwNCisJLnVu YmluZCA9IGlzY19hc3luY191bmJpbmQsDQorCS5jb21wbGV0ZSA9IGlzY19hc3luY19jb21wbGV0 ZSwNCit9Ow0KKw0KK3ZvaWQgaXNjX3N1YmRldl9jbGVhbnVwKHN0cnVjdCBpc2NfZGV2aWNlICpp c2MpDQorew0KKwlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgKnN1YmRldl9lbnRpdHk7DQorDQor CWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViZGV2X2VudGl0eSwgJmlzYy0+c3ViZGV2X2VudGl0aWVz LCBsaXN0KSB7DQorCQl2NGwyX2FzeW5jX25vdGlmaWVyX3VucmVnaXN0ZXIoJnN1YmRldl9lbnRp dHktPm5vdGlmaWVyKTsNCisJCXY0bDJfYXN5bmNfbm90aWZpZXJfY2xlYW51cCgmc3ViZGV2X2Vu dGl0eS0+bm90aWZpZXIpOw0KKwl9DQorDQorCUlOSVRfTElTVF9IRUFEKCZpc2MtPnN1YmRldl9l bnRpdGllcyk7DQorfQ0KKw0KK2ludCBpc2NfcGlwZWxpbmVfaW5pdChzdHJ1Y3QgaXNjX2Rldmlj ZSAqaXNjKQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gaXNjLT5kZXY7DQorCXN0cnVjdCBy ZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KKwlzdHJ1Y3QgcmVnbWFwX2ZpZWxkICpyZWdz Ow0KKwl1bnNpZ25lZCBpbnQgaTsNCisNCisJLyogV0ItLT5DRkEtLT5DQy0tPkdBTS0tPkNTQy0t PkNCQy0tPlNVQjQyMi0tPlNVQjQyMCAqLw0KKwljb25zdCBzdHJ1Y3QgcmVnX2ZpZWxkIHJlZ2Zp ZWxkc1tJU0NfUElQRV9MSU5FX05PREVfTlVNXSA9IHsNCisJCVJFR19GSUVMRChJU0NfV0JfQ1RS TCwgMCwgMCksDQorCQlSRUdfRklFTEQoSVNDX0NGQV9DVFJMLCAwLCAwKSwNCisJCVJFR19GSUVM RChJU0NfQ0NfQ1RSTCwgMCwgMCksDQorCQlSRUdfRklFTEQoSVNDX0dBTV9DVFJMLCAwLCAwKSwN CisJCVJFR19GSUVMRChJU0NfR0FNX0NUUkwsIDEsIDEpLA0KKwkJUkVHX0ZJRUxEKElTQ19HQU1f Q1RSTCwgMiwgMiksDQorCQlSRUdfRklFTEQoSVNDX0dBTV9DVFJMLCAzLCAzKSwNCisJCVJFR19G SUVMRChJU0NfQ1NDX0NUUkwsIDAsIDApLA0KKwkJUkVHX0ZJRUxEKElTQ19DQkNfQ1RSTCwgMCwg MCksDQorCQlSRUdfRklFTEQoSVNDX1NVQjQyMl9DVFJMLCAwLCAwKSwNCisJCVJFR19GSUVMRChJ U0NfU1VCNDIwX0NUUkwsIDAsIDApLA0KKwl9Ow0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgSVNDX1BJ UEVfTElORV9OT0RFX05VTTsgaSsrKSB7DQorCQlyZWdzID0gZGV2bV9yZWdtYXBfZmllbGRfYWxs b2MoZGV2LCByZWdtYXAsIHJlZ2ZpZWxkc1tpXSk7DQorCQlpZiAoSVNfRVJSKHJlZ3MpKQ0KKwkJ CXJldHVybiBQVFJfRVJSKHJlZ3MpOw0KKw0KKwkJaXNjLT5waXBlbGluZVtpXSA9ICByZWdzOw0K Kwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCisvKiByZWdtYXAgY29uZmlndXJhdGlvbiAqLw0K KyNkZWZpbmUgQVRNRUxfSVNDX1JFR19NQVggICAgMHhiZmMNCitjb25zdCBzdHJ1Y3QgcmVnbWFw X2NvbmZpZyBpc2NfcmVnbWFwX2NvbmZpZyA9IHsNCisJLnJlZ19iaXRzICAgICAgID0gMzIsDQor CS5yZWdfc3RyaWRlICAgICA9IDQsDQorCS52YWxfYml0cyAgICAgICA9IDMyLA0KKwkubWF4X3Jl Z2lzdGVyCT0gQVRNRUxfSVNDX1JFR19NQVgsDQorfTsNCisNCmRpZmYgLS1naXQgYS9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9hdG1lbC9hdG1lbC1pc2MuYw0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCA2Zjgw OTgwLi4wMDAwMDAwDQotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlz Yy5jDQorKysgL2Rldi9udWxsDQpAQCAtMSwyNjMxICswLDAgQEANCi0vLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQotLyoNCi0gKiBBdG1lbCBJbWFnZSBTZW5zb3IgQ29u dHJvbGxlciAoSVNDKSBkcml2ZXINCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMjAxNiBBdG1lbA0K LSAqDQotICogQXV0aG9yOiBTb25nanVuIFd1IDxzb25nanVuLnd1QG1pY3JvY2hpcC5jb20+DQot ICoNCi0gKiBTZW5zb3ItLT5QRkUtLT5XQi0tPkNGQS0tPkNDLS0+R0FNLS0+Q1NDLS0+Q0JDLS0+ U1VCLS0+UkxQLS0+RE1BDQotICoNCi0gKiBJU0MgdmlkZW8gcGlwZWxpbmUgaW50ZWdyYXRlcyB0 aGUgZm9sbG93aW5nIHN1Ym1vZHVsZXM6DQotICogUEZFOiBQYXJhbGxlbCBGcm9udCBFbmQgdG8g c2FtcGxlIHRoZSBjYW1lcmEgc2Vuc29yIGlucHV0IHN0cmVhbQ0KLSAqICBXQjogUHJvZ3JhbW1h YmxlIHdoaXRlIGJhbGFuY2UgaW4gdGhlIEJheWVyIGRvbWFpbg0KLSAqIENGQTogQ29sb3IgZmls dGVyIGFycmF5IGludGVycG9sYXRpb24gbW9kdWxlDQotICogIENDOiBQcm9ncmFtbWFibGUgY29s b3IgY29ycmVjdGlvbg0KLSAqIEdBTTogR2FtbWEgY29ycmVjdGlvbg0KLSAqIENTQzogUHJvZ3Jh bW1hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24NCi0gKiBDQkM6IENvbnRyYXN0IGFuZCBCcmln aHRuZXNzIGNvbnRyb2wNCi0gKiBTVUI6IFRoaXMgbW9kdWxlIHBlcmZvcm1zIFlDYkNyNDQ0IHRv IFlDYkNyNDIwIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nDQotICogUkxQOiBUaGlzIG1vZHVsZSBw ZXJmb3JtcyByb3VuZGluZywgcmFuZ2UgbGltaXRpbmcNCi0gKiAgICAgIGFuZCBwYWNraW5nIG9m IHRoZSBpbmNvbWluZyBkYXRhDQotICovDQotDQotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KLSNp bmNsdWRlIDxsaW51eC9jbGtkZXYuaD4NCi0jaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+ DQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5o Pg0KLSNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4NCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ DQotI2luY2x1ZGUgPGxpbnV4L29mLmg+DQotI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+DQot I2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KLSNpbmNsdWRlIDxsaW51eC9wbV9y dW50aW1lLmg+DQotI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPg0KLSNpbmNsdWRlIDxsaW51eC92 aWRlb2RldjIuaD4NCi0NCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPg0KLSNpbmNsdWRl IDxtZWRpYS92NGwyLWRldmljZS5oPg0KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+DQot I2luY2x1ZGUgPG1lZGlhL3Y0bDItaW1hZ2Utc2l6ZXMuaD4NCi0jaW5jbHVkZSA8bWVkaWEvdjRs Mi1pb2N0bC5oPg0KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWZ3bm9kZS5oPg0KLSNpbmNsdWRlIDxt ZWRpYS92NGwyLXN1YmRldi5oPg0KLSNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNvbnRp Zy5oPg0KLQ0KLSNpbmNsdWRlICJhdG1lbC1pc2MtcmVncy5oIg0KLQ0KLSNkZWZpbmUgQVRNRUxf SVNDX05BTUUJCSJhdG1lbF9pc2MiDQotDQotI2RlZmluZSBJU0NfTUFYX1NVUFBPUlRfV0lEVEgg ICAyNTkyDQotI2RlZmluZSBJU0NfTUFYX1NVUFBPUlRfSEVJR0hUICAxOTQ0DQotDQotI2RlZmlu ZSBJU0NfQ0xLX01BWF9ESVYJCTI1NQ0KLQ0KLWVudW0gaXNjX2Nsa19pZCB7DQotCUlTQ19JU1BD SyA9IDAsDQotCUlTQ19NQ0sgPSAxLA0KLX07DQotDQotc3RydWN0IGlzY19jbGsgew0KLQlzdHJ1 Y3QgY2xrX2h3ICAgaHc7DQotCXN0cnVjdCBjbGsgICAgICAqY2xrOw0KLQlzdHJ1Y3QgcmVnbWFw ICAgKnJlZ21hcDsNCi0Jc3BpbmxvY2tfdAlsb2NrOw0KLQl1OAkJaWQ7DQotCXU4CQlwYXJlbnRf aWQ7DQotCXUzMgkJZGl2Ow0KLQlzdHJ1Y3QgZGV2aWNlCSpkZXY7DQotfTsNCi0NCi0jZGVmaW5l IHRvX2lzY19jbGsoaHcpIGNvbnRhaW5lcl9vZihodywgc3RydWN0IGlzY19jbGssIGh3KQ0KLQ0K LXN0cnVjdCBpc2NfYnVmZmVyIHsNCi0Jc3RydWN0IHZiMl92NGwyX2J1ZmZlciAgdmI7DQotCXN0 cnVjdCBsaXN0X2hlYWQJbGlzdDsNCi19Ow0KLQ0KLXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSB7 DQotCXN0cnVjdCB2NGwyX3N1YmRldgkJKnNkOw0KLQlzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYJ KmFzZDsNCi0Jc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgICAgICBub3RpZmllcjsNCi0NCi0J dTMyIHBmZV9jZmcwOw0KLQ0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQotfTsNCi0NCi0vKg0K LSAqIHN0cnVjdCBpc2NfZm9ybWF0IC0gSVNDIG1lZGlhIGJ1cyBmb3JtYXQgaW5mb3JtYXRpb24N Ci0JCQlUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUg SVNDDQotCQkJYW5kIHRoZSBzZW5zb3IuIEl0J3MgdGhlIGlucHV0IGZvcm1hdCByZWNlaXZlZCBi eQ0KLQkJCXRoZSBJU0MuDQotICogQGZvdXJjYzoJCUZvdXJjYyBjb2RlIGZvciB0aGlzIGZvcm1h dA0KLSAqIEBtYnVzX2NvZGU6CQlWNEwyIG1lZGlhIGJ1cyBmb3JtYXQgY29kZS4NCi0gKiBAY2Zh X2JheWNmZzoJCUlmIHRoaXMgZm9ybWF0IGlzIFJBVyBCQVlFUiwgaW5kaWNhdGUgdGhlIHR5cGUg b2YgYmF5ZXIuDQotCQkJdGhpcyBpcyBlaXRoZXIgQkdCRywgUkdSRywgZXRjLg0KLSAqIEBwZmVf Y2ZnMF9icHM6CU51bWJlciBvZiBoYXJkd2FyZSBkYXRhIGxpbmVzIGNvbm5lY3RlZCB0byB0aGUg SVNDDQotICovDQotDQotc3RydWN0IGlzY19mb3JtYXQgew0KLQl1MzIJZm91cmNjOw0KLQl1MzIJ bWJ1c19jb2RlOw0KLQl1MzIJY2ZhX2JheWNmZzsNCi0NCi0JYm9vbAlzZF9zdXBwb3J0Ow0KLQl1 MzIJcGZlX2NmZzBfYnBzOw0KLX07DQotDQotLyogUGlwZWxpbmUgYml0bWFwICovDQotI2RlZmlu ZSBXQl9FTkFCTEUJQklUKDApDQotI2RlZmluZSBDRkFfRU5BQkxFCUJJVCgxKQ0KLSNkZWZpbmUg Q0NfRU5BQkxFCUJJVCgyKQ0KLSNkZWZpbmUgR0FNX0VOQUJMRQlCSVQoMykNCi0jZGVmaW5lIEdB TV9CRU5BQkxFCUJJVCg0KQ0KLSNkZWZpbmUgR0FNX0dFTkFCTEUJQklUKDUpDQotI2RlZmluZSBH QU1fUkVOQUJMRQlCSVQoNikNCi0jZGVmaW5lIENTQ19FTkFCTEUJQklUKDcpDQotI2RlZmluZSBD QkNfRU5BQkxFCUJJVCg4KQ0KLSNkZWZpbmUgU1VCNDIyX0VOQUJMRQlCSVQoOSkNCi0jZGVmaW5l IFNVQjQyMF9FTkFCTEUJQklUKDEwKQ0KLQ0KLSNkZWZpbmUgR0FNX0VOQUJMRVMJKEdBTV9SRU5B QkxFIHwgR0FNX0dFTkFCTEUgfCBHQU1fQkVOQUJMRSB8IEdBTV9FTkFCTEUpDQotDQotLyoNCi0g KiBzdHJ1Y3QgZm10X2NvbmZpZyAtIElTQyBmb3JtYXQgY29uZmlndXJhdGlvbiBhbmQgaW50ZXJu YWwgcGlwZWxpbmUNCi0JCQlUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBpbnRlcm5hbCBj b25maWd1cmF0aW9uDQotCQkJb2YgdGhlIElTQy4NCi0JCQlJdCBhbHNvIGhvbGRzIHRoZSBmb3Jt YXQgdGhhdCBJU0Mgd2lsbCBwcmVzZW50IHRvIHY0bDIuDQotICogQHNkX2Zvcm1hdDoJCVBvaW50 ZXIgdG8gYW4gaXNjX2Zvcm1hdCBzdHJ1Y3QgdGhhdCBob2xkcyB0aGUgc2Vuc29yDQotCQkJY29u ZmlndXJhdGlvbi4NCi0gKiBAZm91cmNjOgkJRm91cmNjIGNvZGUgZm9yIHRoaXMgZm9ybWF0Lg0K LSAqIEBicHA6CQlCeXRlcyBwZXIgcGl4ZWwgaW4gdGhlIGN1cnJlbnQgZm9ybWF0Lg0KLSAqIEBy bHBfY2ZnX21vZGU6CUNvbmZpZ3VyYXRpb24gb2YgdGhlIFJMUCAocm91bmRpbmcsIGxpbWl0aW5n IHBhY2thZ2luZykNCi0gKiBAZGNmZ19pbW9kZToJCUNvbmZpZ3VyYXRpb24gb2YgdGhlIGlucHV0 IG9mIHRoZSBETUEgbW9kdWxlDQotICogQGRjdHJsX2R2aWV3OglDb25maWd1cmF0aW9uIG9mIHRo ZSBvdXRwdXQgb2YgdGhlIERNQSBtb2R1bGUNCi0gKiBAYml0c19waXBlbGluZToJQ29uZmlndXJh dGlvbiBvZiB0aGUgcGlwZWxpbmUsIHdoaWNoIG1vZHVsZXMgYXJlIGVuYWJsZWQNCi0gKi8NCi1z dHJ1Y3QgZm10X2NvbmZpZyB7DQotCXN0cnVjdCBpc2NfZm9ybWF0CSpzZF9mb3JtYXQ7DQotDQot CXUzMgkJCWZvdXJjYzsNCi0JdTgJCQlicHA7DQotDQotCXUzMgkJCXJscF9jZmdfbW9kZTsNCi0J dTMyCQkJZGNmZ19pbW9kZTsNCi0JdTMyCQkJZGN0cmxfZHZpZXc7DQotDQotCXUzMgkJCWJpdHNf cGlwZWxpbmU7DQotfTsNCi0NCi0jZGVmaW5lIEhJU1RfRU5UUklFUwkJNTEyDQotI2RlZmluZSBI SVNUX0JBWUVSCQkoSVNDX0hJU19DRkdfTU9ERV9CICsgMSkNCi0NCi1lbnVtew0KLQlISVNUX0lO SVQgPSAwLA0KLQlISVNUX0VOQUJMRUQsDQotCUhJU1RfRElTQUJMRUQsDQotfTsNCi0NCi1zdHJ1 Y3QgaXNjX2N0cmxzIHsNCi0Jc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGhhbmRsZXI7DQotDQot CXUzMiBicmlnaHRuZXNzOw0KLQl1MzIgY29udHJhc3Q7DQotCXU4IGdhbW1hX2luZGV4Ow0KLSNk ZWZpbmUgSVNDX1dCX05PTkUJMA0KLSNkZWZpbmUgSVNDX1dCX0FVVE8JMQ0KLSNkZWZpbmUgSVND X1dCX09ORVRJTUUJMg0KLQl1OCBhd2I7DQotDQotCS8qIG9uZSBmb3IgZWFjaCBjb21wb25lbnQg OiBHUiwgUiwgR0IsIEIgKi8NCi0JdTMyIGdhaW5bSElTVF9CQVlFUl07DQotCXUzMiBvZmZzZXRb SElTVF9CQVlFUl07DQotDQotCXUzMiBoaXN0X2VudHJ5W0hJU1RfRU5UUklFU107DQotCXUzMiBo aXN0X2NvdW50W0hJU1RfQkFZRVJdOw0KLQl1OCBoaXN0X2lkOw0KLQl1OCBoaXN0X3N0YXQ7DQot I2RlZmluZSBISVNUX01JTl9JTkRFWAkJMA0KLSNkZWZpbmUgSElTVF9NQVhfSU5ERVgJCTENCi0J dTMyIGhpc3RfbWlubWF4W0hJU1RfQkFZRVJdWzJdOw0KLX07DQotDQotI2RlZmluZSBJU0NfUElQ RV9MSU5FX05PREVfTlVNCTExDQotDQotc3RydWN0IGlzY19kZXZpY2Ugew0KLQlzdHJ1Y3QgcmVn bWFwCQkqcmVnbWFwOw0KLQlzdHJ1Y3QgY2xrCQkqaGNsb2NrOw0KLQlzdHJ1Y3QgY2xrCQkqaXNw Y2s7DQotCXN0cnVjdCBpc2NfY2xrCQlpc2NfY2xrc1syXTsNCi0NCi0Jc3RydWN0IGRldmljZQkJ KmRldjsNCi0Jc3RydWN0IHY0bDJfZGV2aWNlCXY0bDJfZGV2Ow0KLQlzdHJ1Y3QgdmlkZW9fZGV2 aWNlCXZpZGVvX2RldjsNCi0NCi0Jc3RydWN0IHZiMl9xdWV1ZQl2YjJfdmlkcTsNCi0Jc3Bpbmxv Y2tfdAkJZG1hX3F1ZXVlX2xvY2s7DQotCXN0cnVjdCBsaXN0X2hlYWQJZG1hX3F1ZXVlOw0KLQlz dHJ1Y3QgaXNjX2J1ZmZlcgkqY3VyX2ZybTsNCi0JdW5zaWduZWQgaW50CQlzZXF1ZW5jZTsNCi0J Ym9vbAkJCXN0b3A7DQotCXN0cnVjdCBjb21wbGV0aW9uCWNvbXA7DQotDQotCXN0cnVjdCB2NGwy X2Zvcm1hdAlmbXQ7DQotCXN0cnVjdCBpc2NfZm9ybWF0CSoqdXNlcl9mb3JtYXRzOw0KLQl1bnNp Z25lZCBpbnQJCW51bV91c2VyX2Zvcm1hdHM7DQotDQotCXN0cnVjdCBmbXRfY29uZmlnCWNvbmZp ZzsNCi0Jc3RydWN0IGZtdF9jb25maWcJdHJ5X2NvbmZpZzsNCi0NCi0Jc3RydWN0IGlzY19jdHJs cwljdHJsczsNCi0Jc3RydWN0IHY0bDJfY3RybAkqZG9fd2JfY3RybDsNCi0Jc3RydWN0IHdvcmtf c3RydWN0CWF3Yl93b3JrOw0KLQ0KLQlzdHJ1Y3QgbXV0ZXgJCWxvY2s7DQotCXNwaW5sb2NrX3QJ CWF3Yl9sb2NrOw0KLQ0KLQlzdHJ1Y3QgcmVnbWFwX2ZpZWxkCSpwaXBlbGluZVtJU0NfUElQRV9M SU5FX05PREVfTlVNXTsNCi0NCi0Jc3RydWN0IGlzY19zdWJkZXZfZW50aXR5CSpjdXJyZW50X3N1 YmRldjsNCi0Jc3RydWN0IGxpc3RfaGVhZAkJc3ViZGV2X2VudGl0aWVzOw0KLX07DQotDQotLyog VGhpcyBpcyBhIGxpc3Qgb2YgdGhlIGZvcm1hdHMgdGhhdCB0aGUgSVNDIGNhbiAqb3V0cHV0KiAq Lw0KLXN0YXRpYyBzdHJ1Y3QgaXNjX2Zvcm1hdCBjb250cm9sbGVyX2Zvcm1hdHNbXSA9IHsNCi0J ew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfQVJHQjQ0NCwNCi0JfSwNCi0Jew0KLQkJLmZv dXJjYwkJPSBWNEwyX1BJWF9GTVRfQVJHQjU1NSwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBW NEwyX1BJWF9GTVRfUkdCNTY1LA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZN VF9BQkdSMzIsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1hCR1IzMiwN Ci0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVWNDIwLA0KLQl9LA0KLQl7 DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVlWLA0KLQl9LA0KLQl7DQotCQkuZm91cmNj CQk9IFY0TDJfUElYX0ZNVF9ZVVY0MjJQLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJf UElYX0ZNVF9HUkVZLA0KLQl9LA0KLX07DQotDQotLyogVGhpcyBpcyBhIGxpc3Qgb2YgZm9ybWF0 cyB0aGF0IHRoZSBJU0MgY2FuIHJlY2VpdmUgYXMgKmlucHV0KiAqLw0KLXN0YXRpYyBzdHJ1Y3Qg aXNjX2Zvcm1hdCBmb3JtYXRzX2xpc3RbXSA9IHsNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJ WF9GTVRfU0JHR1I4LA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0JHR1I4XzFYOCwN Ci0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KLQkJLmNmYV9iYXlj ZmcJPSBJU0NfQkFZX0NGR19CR0JHLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElY X0ZNVF9TR0JSRzgsDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TR0JSRzhfMVg4LA0K LQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQotCQkuY2ZhX2JheWNm Zwk9IElTQ19CQVlfQ0ZHX0dCR0IsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhf Rk1UX1NHUkJHOCwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHOF8xWDgsDQot CQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCi0JCS5jZmFfYmF5Y2Zn CT0gSVNDX0JBWV9DRkdfR1JHUiwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9G TVRfU1JHR0I4LA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU1JHR0I4XzFYOCwNCi0J CS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KLQkJLmNmYV9iYXljZmcJ PSBJU0NfQkFZX0NGR19SR1JHLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZN VF9TQkdHUjEwLA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0JHR1IxMF8xWDEwLA0K LQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVEVOLA0KLQkJLmNmYV9iYXljZmcJ PSBJU0NfQkFZX0NGR19SR1JHLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZN VF9TR0JSRzEwLA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dCUkcxMF8xWDEwLA0K LQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVEVOLA0KLQkJLmNmYV9iYXljZmcJ PSBJU0NfQkFZX0NGR19HQkdCLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZN VF9TR1JCRzEwLA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dSQkcxMF8xWDEwLA0K LQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVEVOLA0KLQkJLmNmYV9iYXljZmcJ PSBJU0NfQkFZX0NGR19HUkdSLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZN VF9TUkdHQjEwLA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU1JHR0IxMF8xWDEwLA0K LQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVEVOLA0KLQkJLmNmYV9iYXljZmcJ PSBJU0NfQkFZX0NGR19SR1JHLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZN VF9TQkdHUjEyLA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0JHR1IxMl8xWDEyLA0K LQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KLQkJLmNmYV9iYXlj ZmcJPSBJU0NfQkFZX0NGR19CR0JHLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElY X0ZNVF9TR0JSRzEyLA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dCUkcxMl8xWDEy LA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KLQkJLmNmYV9i YXljZmcJPSBJU0NfQkFZX0NGR19HQkdCLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJf UElYX0ZNVF9TR1JCRzEyLA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dSQkcxMl8x WDEyLA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KLQkJLmNm YV9iYXljZmcJPSBJU0NfQkFZX0NGR19HUkdSLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0 TDJfUElYX0ZNVF9TUkdHQjEyLA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU1JHR0Ix Ml8xWDEyLA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KLQkJ LmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JHLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9 IFY0TDJfUElYX0ZNVF9HUkVZLA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfWThfMVg4 LA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQotCX0sDQotCXsN Ci0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1lVWVYsDQotCQkubWJ1c19jb2RlCT0gTUVESUFf QlVTX0ZNVF9ZVVlWOF8yWDgsDQotCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19F SUdIVCwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfUkdCNTY1LA0KLQkJ Lm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfUkdCNTY1XzJYOF9MRSwNCi0JCS5wZmVfY2ZnMF9i cHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KLQl9LA0KLX07DQotDQotI2RlZmluZSBHQU1N QV9NQVgJMg0KLSNkZWZpbmUgR0FNTUFfRU5UUklFUwk2NA0KLQ0KLS8qIEdhbW1hIHRhYmxlIHdp dGggZ2FtbWEgMS8yLjIgKi8NCi1zdGF0aWMgY29uc3QgdTMyIGlzY19nYW1tYV90YWJsZVtHQU1N QV9NQVggKyAxXVtHQU1NQV9FTlRSSUVTXSA9IHsNCi0JLyogMCAtLT4gZ2FtbWEgMS8xLjggKi8N Ci0JeyAgICAgIDB4NjUsICAweDY2MDAyRiwgIDB4OTUwMDI1LCAgMHhCQjAwMjAsICAweERCMDAx RCwgIDB4RjgwMDFBLA0KLQkgIDB4MTEzMDAxOCwgMHgxMkIwMDE3LCAweDE0MjAwMTYsIDB4MTU4 MDAxNCwgMHgxNkQwMDEzLCAweDE4MTAwMTIsDQotCSAgMHgxOTQwMDEyLCAweDFBNjAwMTIsIDB4 MUI4MDAxMSwgMHgxQzkwMDEwLCAweDFEQTAwMTAsIDB4MUVBMDAwRiwNCi0JICAweDFGQTAwMEYs IDB4MjA5MDAwRiwgMHgyMTgwMDBGLCAweDIyNzAwMEUsIDB4MjM1MDAwRSwgMHgyNDMwMDBFLA0K LQkgIDB4MjUxMDAwRSwgMHgyNUYwMDBELCAweDI2QzAwMEQsIDB4Mjc5MDAwRCwgMHgyODYwMDBE LCAweDI5MzAwMEMsDQotCSAgMHgyQTAwMDBDLCAweDJBQzAwMEMsIDB4MkI4MDAwQywgMHgyQzQw MDBDLCAweDJEMDAwMEIsIDB4MkRDMDAwQiwNCi0JICAweDJFNzAwMEIsIDB4MkYzMDAwQiwgMHgy RkUwMDBCLCAweDMwOTAwMEIsIDB4MzE0MDAwQiwgMHgzMUYwMDBBLA0KLQkgIDB4MzJBMDAwQSwg MHgzMzQwMDBCLCAweDMzRjAwMEEsIDB4MzQ5MDAwQSwgMHgzNTQwMDBBLCAweDM1RTAwMEEsDQot CSAgMHgzNjgwMDBBLCAweDM3MjAwMEEsIDB4MzdDMDAwQSwgMHgzODYwMDBBLCAweDM5MDAwMDks IDB4Mzk5MDAwQSwNCi0JICAweDNBMzAwMDksIDB4M0FEMDAwOSwgMHgzQjYwMDA5LCAweDNCRjAw MEEsIDB4M0M5MDAwOSwgMHgzRDIwMDA5LA0KLQkgIDB4M0RCMDAwOSwgMHgzRTQwMDA5LCAweDNF RDAwMDksIDB4M0Y2MDAwOSB9LA0KLQ0KLQkvKiAxIC0tPiBnYW1tYSAxLzIgKi8NCi0JeyAgICAg IDB4N0YsICAweDgwMDAzNCwgIDB4QjUwMDI4LCAgMHhERTAwMjEsIDB4MTAwMDAxRSwgMHgxMUUw MDFCLA0KLQkgIDB4MTM5MDAxOSwgMHgxNTIwMDE3LCAweDE2QTAwMTUsIDB4MTgwMDAxNCwgMHgx OTQwMDE0LCAweDFBODAwMTMsDQotCSAgMHgxQkIwMDEyLCAweDFDRDAwMTEsIDB4MURGMDAxMCwg MHgxRUYwMDEwLCAweDIwMDAwMEYsIDB4MjBGMDAwRiwNCi0JICAweDIxRjAwMEUsIDB4MjJEMDAw RiwgMHgyM0MwMDBFLCAweDI0QTAwMEUsIDB4MjU4MDAwRCwgMHgyNjUwMDBELA0KLQkgIDB4Mjcz MDAwQywgMHgyN0YwMDBELCAweDI4QzAwMEMsIDB4Mjk5MDAwQywgMHgyQTUwMDBDLCAweDJCMTAw MEIsDQotCSAgMHgyQkMwMDBDLCAweDJDODAwMEIsIDB4MkQzMDAwQywgMHgyREYwMDBCLCAweDJF QTAwMEEsIDB4MkY1MDAwQSwNCi0JICAweDJGRjAwMEIsIDB4MzBBMDAwQSwgMHgzMTQwMDBCLCAw eDMxRjAwMEEsIDB4MzI5MDAwQSwgMHgzMzMwMDBBLA0KLQkgIDB4MzNEMDAwOSwgMHgzNDcwMDA5 LCAweDM1MDAwMEEsIDB4MzVBMDAwOSwgMHgzNjMwMDBBLCAweDM2RDAwMDksDQotCSAgMHgzNzYw MDA5LCAweDM3RjAwMDksIDB4Mzg4MDAwOSwgMHgzOTEwMDA5LCAweDM5QTAwMDksIDB4M0EzMDAw OSwNCi0JICAweDNBQzAwMDgsIDB4M0I0MDAwOSwgMHgzQkQwMDA4LCAweDNDNjAwMDgsIDB4M0NF MDAwOCwgMHgzRDYwMDA5LA0KLQkgIDB4M0RGMDAwOCwgMHgzRTcwMDA4LCAweDNFRjAwMDgsIDB4 M0Y3MDAwOCB9LA0KLQ0KLQkvKiAyIC0tPiBnYW1tYSAxLzIuMiAqLw0KLQl7ICAgICAgMHg5OSwg IDB4OUIwMDM4LCAgMHhENDAwMkEsICAweEZGMDAyMywgMHgxMjIwMDFGLCAweDE0MTAwMUIsDQot CSAgMHgxNUQwMDE5LCAweDE3NjAwMTcsIDB4MThFMDAxNSwgMHgxQTMwMDE1LCAweDFCODAwMTMs IDB4MUNDMDAxMiwNCi0JICAweDFERTAwMTEsIDB4MUYwMDAxMCwgMHgyMDEwMDEwLCAweDIxMTAw MTAsIDB4MjIxMDAwRiwgMHgyMzAwMDBGLA0KLQkgIDB4MjNGMDAwRSwgMHgyNEQwMDBFLCAweDI1 QjAwMEQsIDB4MjY5MDAwQywgMHgyNzYwMDBDLCAweDI4MzAwMEMsDQotCSAgMHgyOEYwMDBDLCAw eDI5QjAwMEMsIDB4MkE3MDAwQywgMHgyQjMwMDBCLCAweDJCRjAwMEIsIDB4MkNBMDAwQiwNCi0J ICAweDJENTAwMEIsIDB4MkUwMDAwQSwgMHgyRUIwMDBBLCAweDJGNTAwMEEsIDB4MkZGMDAwQSwg MHgzMEEwMDBBLA0KLQkgIDB4MzE0MDAwOSwgMHgzMUUwMDA5LCAweDMyNzAwMEEsIDB4MzMxMDAw OSwgMHgzM0EwMDA5LCAweDM0NDAwMDksDQotCSAgMHgzNEQwMDA5LCAweDM1NjAwMDksIDB4MzVG MDAwOSwgMHgzNjgwMDA4LCAweDM3MTAwMDgsIDB4Mzc5MDAwOSwNCi0JICAweDM4MjAwMDgsIDB4 MzhBMDAwOCwgMHgzOTMwMDA4LCAweDM5QjAwMDgsIDB4M0EzMDAwOCwgMHgzQUIwMDA4LA0KLQkg IDB4M0IzMDAwOCwgMHgzQkIwMDA4LCAweDNDMzAwMDgsIDB4M0NCMDAwNywgMHgzRDIwMDA4LCAw eDNEQTAwMDcsDQotCSAgMHgzRTIwMDA3LCAweDNFOTAwMDcsIDB4M0YwMDAwOCwgMHgzRjgwMDA3 IH0sDQotfTsNCi0NCi0jZGVmaW5lIElTQ19JU19GT1JNQVRfUkFXKG1idXNfY29kZSkgXA0KLQko KChtYnVzX2NvZGUpICYgMHhmMDAwKSA9PSAweDMwMDApDQotDQotc3RhdGljIHVuc2lnbmVkIGlu dCBkZWJ1ZzsNCi1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7DQotTU9EVUxFX1BBUk1f REVTQyhkZWJ1ZywgImRlYnVnIGxldmVsICgwLTIpIik7DQotDQotc3RhdGljIHVuc2lnbmVkIGlu dCBzZW5zb3JfcHJlZmVycmVkID0gMTsNCi1tb2R1bGVfcGFyYW0oc2Vuc29yX3ByZWZlcnJlZCwg dWludCwgMDY0NCk7DQotTU9EVUxFX1BBUk1fREVTQyhzZW5zb3JfcHJlZmVycmVkLA0KLQkJICJT ZW5zb3IgaXMgcHJlZmVycmVkIHRvIG91dHB1dCB0aGUgc3BlY2lmaWVkIGZvcm1hdCAoMS1vbiAw LW9mZiksIGRlZmF1bHQgMSIpOw0KLQ0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpc2NfdXBkYXRlX2F3 Yl9jdHJscyhzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0Jc3RydWN0IGlzY19jdHJscyAq Y3RybHMgPSAmaXNjLT5jdHJsczsNCi0NCi0JcmVnbWFwX3dyaXRlKGlzYy0+cmVnbWFwLCBJU0Nf V0JfT19SR1IsDQotCQkgICAgIChJU0NfV0JfT19aRVJPX1ZBTCAtIChjdHJscy0+b2Zmc2V0W0lT Q19ISVNfQ0ZHX01PREVfUl0pKSB8DQotCQkgICAgICgoSVNDX1dCX09fWkVST19WQUwgLSBjdHJs cy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVfR1JdKSA8PCAxNikpOw0KLQlyZWdtYXBfd3JpdGUo aXNjLT5yZWdtYXAsIElTQ19XQl9PX0JHQiwNCi0JCSAgICAgKElTQ19XQl9PX1pFUk9fVkFMIC0g KGN0cmxzLT5vZmZzZXRbSVNDX0hJU19DRkdfTU9ERV9CXSkpIHwNCi0JCSAgICAgKChJU0NfV0Jf T19aRVJPX1ZBTCAtIGN0cmxzLT5vZmZzZXRbSVNDX0hJU19DRkdfTU9ERV9HQl0pIDw8IDE2KSk7 DQotCXJlZ21hcF93cml0ZShpc2MtPnJlZ21hcCwgSVNDX1dCX0dfUkdSLA0KLQkJICAgICBjdHJs cy0+Z2FpbltJU0NfSElTX0NGR19NT0RFX1JdIHwNCi0JCSAgICAgKGN0cmxzLT5nYWluW0lTQ19I SVNfQ0ZHX01PREVfR1JdIDw8IDE2KSk7DQotCXJlZ21hcF93cml0ZShpc2MtPnJlZ21hcCwgSVND X1dCX0dfQkdCLA0KLQkJICAgICBjdHJscy0+Z2FpbltJU0NfSElTX0NGR19NT0RFX0JdIHwNCi0J CSAgICAgKGN0cmxzLT5nYWluW0lTQ19ISVNfQ0ZHX01PREVfR0JdIDw8IDE2KSk7DQotfQ0KLQ0K LXN0YXRpYyBpbmxpbmUgdm9pZCBpc2NfcmVzZXRfYXdiX2N0cmxzKHN0cnVjdCBpc2NfZGV2aWNl ICppc2MpDQotew0KLQlpbnQgYzsNCi0NCi0JZm9yIChjID0gSVNDX0hJU19DRkdfTU9ERV9HUjsg YyA8PSBJU0NfSElTX0NGR19NT0RFX0I7IGMrKykgew0KLQkJLyogZ2FpbnMgaGF2ZSBhIGZpeGVk IHBvaW50IGF0IDkgZGVjaW1hbHMgKi8NCi0JCWlzYy0+Y3RybHMuZ2FpbltjXSA9IDEgPDwgOTsN Ci0JCS8qIG9mZnNldHMgYXJlIGluIDIncyBjb21wbGVtZW50cywgdGhlIHZhbHVlDQotCQkgKiB3 aWxsIGJlIHN1YnN0cmFjdGVkIGZyb20gSVNDX1dCX09fWkVST19WQUwgdG8gb2J0YWluDQotCQkg KiAyJ3MgY29tcGxlbWVudCBvZiBhIHZhbHVlIGJldHdlZW4gMCBhbmQNCi0JCSAqIElTQ19XQl9P X1pFUk9fVkFMID4+IDENCi0JCSAqLw0KLQkJaXNjLT5jdHJscy5vZmZzZXRbY10gPSBJU0NfV0Jf T19aRVJPX1ZBTDsNCi0JfQ0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY193YWl0X2Nsa19zdGFibGUo c3RydWN0IGNsa19odyAqaHcpDQotew0KLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lz Y19jbGsoaHcpOw0KLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2NfY2xrLT5yZWdtYXA7DQot CXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKDEwMDAp Ow0KLQl1bnNpZ25lZCBpbnQgc3RhdHVzOw0KLQ0KLQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmll cywgdGltZW91dCkpIHsNCi0JCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NMS1NSLCAmc3RhdHVz KTsNCi0JCWlmICghKHN0YXR1cyAmIElTQ19DTEtTUl9TSVApKQ0KLQkJCXJldHVybiAwOw0KLQ0K LQkJdXNsZWVwX3JhbmdlKDEwLCAyNTApOw0KLQl9DQotDQotCXJldHVybiAtRVRJTUVET1VUOw0K LX0NCi0NCi1zdGF0aWMgaW50IGlzY19jbGtfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykNCi17 DQotCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQotDQotCWlmIChp c2NfY2xrLT5pZCA9PSBJU0NfSVNQQ0spDQotCQlwbV9ydW50aW1lX2dldF9zeW5jKGlzY19jbGst PmRldik7DQotDQotCXJldHVybiBpc2Nfd2FpdF9jbGtfc3RhYmxlKGh3KTsNCi19DQotDQotc3Rh dGljIHZvaWQgaXNjX2Nsa191bnByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpDQotew0KLQlzdHJ1 Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KLQ0KLQlpc2Nfd2FpdF9jbGtf c3RhYmxlKGh3KTsNCi0NCi0JaWYgKGlzY19jbGstPmlkID09IElTQ19JU1BDSykNCi0JCXBtX3J1 bnRpbWVfcHV0X3N5bmMoaXNjX2Nsay0+ZGV2KTsNCi19DQotDQotc3RhdGljIGludCBpc2NfY2xr X2VuYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykNCi17DQotCXN0cnVjdCBpc2NfY2xrICppc2NfY2xr ID0gdG9faXNjX2Nsayhodyk7DQotCXUzMiBpZCA9IGlzY19jbGstPmlkOw0KLQlzdHJ1Y3QgcmVn bWFwICpyZWdtYXAgPSBpc2NfY2xrLT5yZWdtYXA7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQot CXVuc2lnbmVkIGludCBzdGF0dXM7DQotDQotCWRldl9kYmcoaXNjX2Nsay0+ZGV2LCAiSVNDIENM SzogJXMsIGRpdiA9ICVkLCBwYXJlbnQgaWQgPSAlZFxuIiwNCi0JCV9fZnVuY19fLCBpc2NfY2xr LT5kaXYsIGlzY19jbGstPnBhcmVudF9pZCk7DQotDQotCXNwaW5fbG9ja19pcnFzYXZlKCZpc2Nf Y2xrLT5sb2NrLCBmbGFncyk7DQotCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19DTEtD RkcsDQotCQkJICAgSVNDX0NMS0NGR19ESVZfTUFTSyhpZCkgfCBJU0NfQ0xLQ0ZHX1NFTF9NQVNL KGlkKSwNCi0JCQkgICAoaXNjX2Nsay0+ZGl2IDw8IElTQ19DTEtDRkdfRElWX1NISUZUKGlkKSkg fA0KLQkJCSAgIChpc2NfY2xrLT5wYXJlbnRfaWQgPDwgSVNDX0NMS0NGR19TRUxfU0hJRlQoaWQp KSk7DQotDQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DTEtFTiwgSVNDX0NMSyhpZCkpOw0K LQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQotDQotCXJl Z21hcF9yZWFkKHJlZ21hcCwgSVNDX0NMS1NSLCAmc3RhdHVzKTsNCi0JaWYgKHN0YXR1cyAmIElT Q19DTEsoaWQpKQ0KLQkJcmV0dXJuIDA7DQotCWVsc2UNCi0JCXJldHVybiAtRUlOVkFMOw0KLX0N Ci0NCi1zdGF0aWMgdm9pZCBpc2NfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpDQotew0K LQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KLQl1MzIgaWQgPSBp c2NfY2xrLT5pZDsNCi0JdW5zaWduZWQgbG9uZyBmbGFnczsNCi0NCi0Jc3Bpbl9sb2NrX2lycXNh dmUoJmlzY19jbGstPmxvY2ssIGZsYWdzKTsNCi0JcmVnbWFwX3dyaXRlKGlzY19jbGstPnJlZ21h cCwgSVNDX0NMS0RJUywgSVNDX0NMSyhpZCkpOw0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZp c2NfY2xrLT5sb2NrLCBmbGFncyk7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2Nsa19pc19lbmFi bGVkKHN0cnVjdCBjbGtfaHcgKmh3KQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0 b19pc2NfY2xrKGh3KTsNCi0JdTMyIHN0YXR1czsNCi0NCi0JaWYgKGlzY19jbGstPmlkID09IElT Q19JU1BDSykNCi0JCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNjX2Nsay0+ZGV2KTsNCi0NCi0JcmVn bWFwX3JlYWQoaXNjX2Nsay0+cmVnbWFwLCBJU0NfQ0xLU1IsICZzdGF0dXMpOw0KLQ0KLQlpZiAo aXNjX2Nsay0+aWQgPT0gSVNDX0lTUENLKQ0KLQkJcG1fcnVudGltZV9wdXRfc3luYyhpc2NfY2xr LT5kZXYpOw0KLQ0KLQlyZXR1cm4gc3RhdHVzICYgSVNDX0NMSyhpc2NfY2xrLT5pZCkgPyAxIDog MDsNCi19DQotDQotc3RhdGljIHVuc2lnbmVkIGxvbmcNCi1pc2NfY2xrX3JlY2FsY19yYXRlKHN0 cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQ0KLXsNCi0Jc3RydWN0 IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCi0NCi0JcmV0dXJuIERJVl9ST1VO RF9DTE9TRVNUKHBhcmVudF9yYXRlLCBpc2NfY2xrLT5kaXYgKyAxKTsNCi19DQotDQotc3RhdGlj IGludCBpc2NfY2xrX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LA0KLQkJCQkgICBz dHJ1Y3QgY2xrX3JhdGVfcmVxdWVzdCAqcmVxKQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19j bGsgPSB0b19pc2NfY2xrKGh3KTsNCi0JbG9uZyBiZXN0X3JhdGUgPSAtRUlOVkFMOw0KLQlpbnQg YmVzdF9kaWZmID0gLTE7DQotCXVuc2lnbmVkIGludCBpLCBkaXY7DQotDQotCWZvciAoaSA9IDA7 IGkgPCBjbGtfaHdfZ2V0X251bV9wYXJlbnRzKGh3KTsgaSsrKSB7DQotCQlzdHJ1Y3QgY2xrX2h3 ICpwYXJlbnQ7DQotCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOw0KLQ0KLQkJcGFyZW50ID0g Y2xrX2h3X2dldF9wYXJlbnRfYnlfaW5kZXgoaHcsIGkpOw0KLQkJaWYgKCFwYXJlbnQpDQotCQkJ Y29udGludWU7DQotDQotCQlwYXJlbnRfcmF0ZSA9IGNsa19od19nZXRfcmF0ZShwYXJlbnQpOw0K LQkJaWYgKCFwYXJlbnRfcmF0ZSkNCi0JCQljb250aW51ZTsNCi0NCi0JCWZvciAoZGl2ID0gMTsg ZGl2IDwgSVNDX0NMS19NQVhfRElWICsgMjsgZGl2KyspIHsNCi0JCQl1bnNpZ25lZCBsb25nIHJh dGU7DQotCQkJaW50IGRpZmY7DQotDQotCQkJcmF0ZSA9IERJVl9ST1VORF9DTE9TRVNUKHBhcmVu dF9yYXRlLCBkaXYpOw0KLQkJCWRpZmYgPSBhYnMocmVxLT5yYXRlIC0gcmF0ZSk7DQotDQotCQkJ aWYgKGJlc3RfZGlmZiA8IDAgfHwgYmVzdF9kaWZmID4gZGlmZikgew0KLQkJCQliZXN0X3JhdGUg PSByYXRlOw0KLQkJCQliZXN0X2RpZmYgPSBkaWZmOw0KLQkJCQlyZXEtPmJlc3RfcGFyZW50X3Jh dGUgPSBwYXJlbnRfcmF0ZTsNCi0JCQkJcmVxLT5iZXN0X3BhcmVudF9odyA9IHBhcmVudDsNCi0J CQl9DQotDQotCQkJaWYgKCFiZXN0X2RpZmYgfHwgcmF0ZSA8IHJlcS0+cmF0ZSkNCi0JCQkJYnJl YWs7DQotCQl9DQotDQotCQlpZiAoIWJlc3RfZGlmZikNCi0JCQlicmVhazsNCi0JfQ0KLQ0KLQlk ZXZfZGJnKGlzY19jbGstPmRldiwNCi0JCSJJU0MgQ0xLOiAlcywgYmVzdF9yYXRlID0gJWxkLCBw YXJlbnQgY2xrOiAlcyBAICVsZFxuIiwNCi0JCV9fZnVuY19fLCBiZXN0X3JhdGUsDQotCQlfX2Ns a19nZXRfbmFtZSgocmVxLT5iZXN0X3BhcmVudF9odyktPmNsayksDQotCQlyZXEtPmJlc3RfcGFy ZW50X3JhdGUpOw0KLQ0KLQlpZiAoYmVzdF9yYXRlIDwgMCkNCi0JCXJldHVybiBiZXN0X3JhdGU7 DQotDQotCXJlcS0+cmF0ZSA9IGJlc3RfcmF0ZTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0 YXRpYyBpbnQgaXNjX2Nsa19zZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3LCB1OCBpbmRleCkN Ci17DQotCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQotDQotCWlm IChpbmRleCA+PSBjbGtfaHdfZ2V0X251bV9wYXJlbnRzKGh3KSkNCi0JCXJldHVybiAtRUlOVkFM Ow0KLQ0KLQlpc2NfY2xrLT5wYXJlbnRfaWQgPSBpbmRleDsNCi0NCi0JcmV0dXJuIDA7DQotfQ0K LQ0KLXN0YXRpYyB1OCBpc2NfY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcpDQotew0K LQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KLQ0KLQlyZXR1cm4g aXNjX2Nsay0+cGFyZW50X2lkOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19jbGtfc2V0X3JhdGUo c3RydWN0IGNsa19odyAqaHcsDQotCQkJICAgICB1bnNpZ25lZCBsb25nIHJhdGUsDQotCQkJICAg ICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19j bGsgPSB0b19pc2NfY2xrKGh3KTsNCi0JdTMyIGRpdjsNCi0NCi0JaWYgKCFyYXRlKQ0KLQkJcmV0 dXJuIC1FSU5WQUw7DQotDQotCWRpdiA9IERJVl9ST1VORF9DTE9TRVNUKHBhcmVudF9yYXRlLCBy YXRlKTsNCi0JaWYgKGRpdiA+IChJU0NfQ0xLX01BWF9ESVYgKyAxKSB8fCAhZGl2KQ0KLQkJcmV0 dXJuIC1FSU5WQUw7DQotDQotCWlzY19jbGstPmRpdiA9IGRpdiAtIDE7DQotDQotCXJldHVybiAw Ow0KLX0NCi0NCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgaXNjX2Nsa19vcHMgPSB7DQot CS5wcmVwYXJlCT0gaXNjX2Nsa19wcmVwYXJlLA0KLQkudW5wcmVwYXJlCT0gaXNjX2Nsa191bnBy ZXBhcmUsDQotCS5lbmFibGUJCT0gaXNjX2Nsa19lbmFibGUsDQotCS5kaXNhYmxlCT0gaXNjX2Ns a19kaXNhYmxlLA0KLQkuaXNfZW5hYmxlZAk9IGlzY19jbGtfaXNfZW5hYmxlZCwNCi0JLnJlY2Fs Y19yYXRlCT0gaXNjX2Nsa19yZWNhbGNfcmF0ZSwNCi0JLmRldGVybWluZV9yYXRlCT0gaXNjX2Ns a19kZXRlcm1pbmVfcmF0ZSwNCi0JLnNldF9wYXJlbnQJPSBpc2NfY2xrX3NldF9wYXJlbnQsDQot CS5nZXRfcGFyZW50CT0gaXNjX2Nsa19nZXRfcGFyZW50LA0KLQkuc2V0X3JhdGUJPSBpc2NfY2xr X3NldF9yYXRlLA0KLX07DQotDQotc3RhdGljIGludCBpc2NfY2xrX3JlZ2lzdGVyKHN0cnVjdCBp c2NfZGV2aWNlICppc2MsIHVuc2lnbmVkIGludCBpZCkNCi17DQotCXN0cnVjdCByZWdtYXAgKnJl Z21hcCA9IGlzYy0+cmVnbWFwOw0KLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gaXNjLT5kZXYt Pm9mX25vZGU7DQotCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrOw0KLQlzdHJ1Y3QgY2xrX2luaXRf ZGF0YSBpbml0Ow0KLQljb25zdCBjaGFyICpjbGtfbmFtZSA9IG5wLT5uYW1lOw0KLQljb25zdCBj aGFyICpwYXJlbnRfbmFtZXNbM107DQotCWludCBudW1fcGFyZW50czsNCi0NCi0JbnVtX3BhcmVu dHMgPSBvZl9jbGtfZ2V0X3BhcmVudF9jb3VudChucCk7DQotCWlmIChudW1fcGFyZW50cyA8IDEg fHwgbnVtX3BhcmVudHMgPiAzKQ0KLQkJcmV0dXJuIC1FSU5WQUw7DQotDQotCWlmIChudW1fcGFy ZW50cyA+IDIgJiYgaWQgPT0gSVNDX0lTUENLKQ0KLQkJbnVtX3BhcmVudHMgPSAyOw0KLQ0KLQlv Zl9jbGtfcGFyZW50X2ZpbGwobnAsIHBhcmVudF9uYW1lcywgbnVtX3BhcmVudHMpOw0KLQ0KLQlp ZiAoaWQgPT0gSVNDX01DSykNCi0JCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAiY2xvY2st b3V0cHV0LW5hbWVzIiwgJmNsa19uYW1lKTsNCi0JZWxzZQ0KLQkJY2xrX25hbWUgPSAiaXNjLWlz cGNrIjsNCi0NCi0JaW5pdC5wYXJlbnRfbmFtZXMJPSBwYXJlbnRfbmFtZXM7DQotCWluaXQubnVt X3BhcmVudHMJPSBudW1fcGFyZW50czsNCi0JaW5pdC5uYW1lCQk9IGNsa19uYW1lOw0KLQlpbml0 Lm9wcwkJPSAmaXNjX2Nsa19vcHM7DQotCWluaXQuZmxhZ3MJCT0gQ0xLX1NFVF9SQVRFX0dBVEUg fCBDTEtfU0VUX1BBUkVOVF9HQVRFOw0KLQ0KLQlpc2NfY2xrID0gJmlzYy0+aXNjX2Nsa3NbaWRd Ow0KLQlpc2NfY2xrLT5ody5pbml0CT0gJmluaXQ7DQotCWlzY19jbGstPnJlZ21hcAkJPSByZWdt YXA7DQotCWlzY19jbGstPmlkCQk9IGlkOw0KLQlpc2NfY2xrLT5kZXYJCT0gaXNjLT5kZXY7DQot CXNwaW5fbG9ja19pbml0KCZpc2NfY2xrLT5sb2NrKTsNCi0NCi0JaXNjX2Nsay0+Y2xrID0gY2xr X3JlZ2lzdGVyKGlzYy0+ZGV2LCAmaXNjX2Nsay0+aHcpOw0KLQlpZiAoSVNfRVJSKGlzY19jbGst PmNsaykpIHsNCi0JCWRldl9lcnIoaXNjLT5kZXYsICIlczogY2xvY2sgcmVnaXN0ZXIgZmFpbFxu IiwgY2xrX25hbWUpOw0KLQkJcmV0dXJuIFBUUl9FUlIoaXNjX2Nsay0+Y2xrKTsNCi0JfSBlbHNl IGlmIChpZCA9PSBJU0NfTUNLKQ0KLQkJb2ZfY2xrX2FkZF9wcm92aWRlcihucCwgb2ZfY2xrX3Ny Y19zaW1wbGVfZ2V0LCBpc2NfY2xrLT5jbGspOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3Rh dGljIGludCBpc2NfY2xrX2luaXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXVuc2ln bmVkIGludCBpOw0KLQlpbnQgcmV0Ow0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShp c2MtPmlzY19jbGtzKTsgaSsrKQ0KLQkJaXNjLT5pc2NfY2xrc1tpXS5jbGsgPSBFUlJfUFRSKC1F SU5WQUwpOw0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpc2MtPmlzY19jbGtzKTsg aSsrKSB7DQotCQlyZXQgPSBpc2NfY2xrX3JlZ2lzdGVyKGlzYywgaSk7DQotCQlpZiAocmV0KQ0K LQkJCXJldHVybiByZXQ7DQotCX0NCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyB2b2lk IGlzY19jbGtfY2xlYW51cChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0JdW5zaWduZWQg aW50IGk7DQotDQotCW9mX2Nsa19kZWxfcHJvdmlkZXIoaXNjLT5kZXYtPm9mX25vZGUpOw0KLQ0K LQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpc2MtPmlzY19jbGtzKTsgaSsrKSB7DQotCQlz dHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9ICZpc2MtPmlzY19jbGtzW2ldOw0KLQ0KLQkJaWYgKCFJ U19FUlIoaXNjX2Nsay0+Y2xrKSkNCi0JCQljbGtfdW5yZWdpc3Rlcihpc2NfY2xrLT5jbGspOw0K LQl9DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3F1ZXVlX3NldHVwKHN0cnVjdCB2YjJfcXVldWUg KnZxLA0KLQkJCSAgICB1bnNpZ25lZCBpbnQgKm5idWZmZXJzLCB1bnNpZ25lZCBpbnQgKm5wbGFu ZXMsDQotCQkJICAgIHVuc2lnbmVkIGludCBzaXplc1tdLCBzdHJ1Y3QgZGV2aWNlICphbGxvY19k ZXZzW10pDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2 cSk7DQotCXVuc2lnbmVkIGludCBzaXplID0gaXNjLT5mbXQuZm10LnBpeC5zaXplaW1hZ2U7DQot DQotCWlmICgqbnBsYW5lcykNCi0JCXJldHVybiBzaXplc1swXSA8IHNpemUgPyAtRUlOVkFMIDog MDsNCi0NCi0JKm5wbGFuZXMgPSAxOw0KLQlzaXplc1swXSA9IHNpemU7DQotDQotCXJldHVybiAw Ow0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19idWZmZXJfcHJlcGFyZShzdHJ1Y3QgdmIyX2J1ZmZl ciAqdmIpDQotew0KLQlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICp2YnVmID0gdG9fdmIyX3Y0bDJf YnVmZmVyKHZiKTsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYo dmItPnZiMl9xdWV1ZSk7DQotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGlzYy0+Zm10LmZtdC5waXgu c2l6ZWltYWdlOw0KLQ0KLQlpZiAodmIyX3BsYW5lX3NpemUodmIsIDApIDwgc2l6ZSkgew0KLQkJ djRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJidWZmZXIgdG9vIHNtYWxsICglbHUgPCAlbHUpXG4i LA0KLQkJCSB2YjJfcGxhbmVfc2l6ZSh2YiwgMCksIHNpemUpOw0KLQkJcmV0dXJuIC1FSU5WQUw7 DQotCX0NCi0NCi0JdmIyX3NldF9wbGFuZV9wYXlsb2FkKHZiLCAwLCBzaXplKTsNCi0NCi0JdmJ1 Zi0+ZmllbGQgPSBpc2MtPmZtdC5mbXQucGl4LmZpZWxkOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQot DQotc3RhdGljIHZvaWQgaXNjX3N0YXJ0X2RtYShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsN Ci0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQotCXUzMiBzaXplaW1hZ2Ug PSBpc2MtPmZtdC5mbXQucGl4LnNpemVpbWFnZTsNCi0JdTMyIGRjdHJsX2R2aWV3Ow0KLQlkbWFf YWRkcl90IGFkZHIwOw0KLQl1MzIgaCwgdzsNCi0NCi0JaCA9IGlzYy0+Zm10LmZtdC5waXguaGVp Z2h0Ow0KLQl3ID0gaXNjLT5mbXQuZm10LnBpeC53aWR0aDsNCi0NCi0JLyoNCi0JICogSW4gY2Fz ZSB0aGUgc2Vuc29yIGlzIG5vdCBSQVcsIGl0IHdpbGwgb3V0cHV0IGEgcGl4ZWwgKDEyLTE2IGJp dHMpDQotCSAqIHdpdGggdHdvIHNhbXBsZXMgb24gdGhlIElTQyBEYXRhIGJ1cyAod2hpY2ggaXMg OC0xMikNCi0JICogSVNDIHdpbGwgY291bnQgZWFjaCBzYW1wbGUsIHNvLCB3ZSBuZWVkIHRvIG11 bHRpcGx5IHRoZXNlIHZhbHVlcw0KLQkgKiBieSB0d28sIHRvIGdldCB0aGUgcmVhbCBudW1iZXIg b2Ygc2FtcGxlcyBmb3IgdGhlIHJlcXVpcmVkIHBpeGVscy4NCi0JICovDQotCWlmICghSVNDX0lT X0ZPUk1BVF9SQVcoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7DQotCQloIDw8 PSAxOw0KLQkJdyA8PD0gMTsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiBXZSBsaW1pdCB0aGUgY29sdW1u L3JvdyBjb3VudCB0aGF0IHRoZSBJU0Mgd2lsbCBvdXRwdXQgYWNjb3JkaW5nDQotCSAqIHRvIHRo ZSBjb25maWd1cmVkIHJlc29sdXRpb24gdGhhdCB3ZSB3YW50Lg0KLQkgKiBUaGlzIHdpbGwgYXZv aWQgdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgc2Vuc29yIGlzIG1pc2NvbmZpZ3VyZWQsDQotCSAq IHNlbmRpbmcgbW9yZSBkYXRhLCBhbmQgdGhlIElTQyB3aWxsIGp1c3QgdGFrZSBpdCBhbmQgRE1B IHRvIG1lbW9yeSwNCi0JICogY2F1c2luZyBjb3JydXB0aW9uLg0KLQkgKi8NCi0JcmVnbWFwX3dy aXRlKHJlZ21hcCwgSVNDX1BGRV9DRkcxLA0KLQkJICAgICAoSVNDX1BGRV9DRkcxX0NPTE1JTigw KSAmIElTQ19QRkVfQ0ZHMV9DT0xNSU5fTUFTSykgfA0KLQkJICAgICAoSVNDX1BGRV9DRkcxX0NP TE1BWCh3IC0gMSkgJiBJU0NfUEZFX0NGRzFfQ09MTUFYX01BU0spKTsNCi0NCi0JcmVnbWFwX3dy aXRlKHJlZ21hcCwgSVNDX1BGRV9DRkcyLA0KLQkJICAgICAoSVNDX1BGRV9DRkcyX1JPV01JTigw KSAmIElTQ19QRkVfQ0ZHMl9ST1dNSU5fTUFTSykgfA0KLQkJICAgICAoSVNDX1BGRV9DRkcyX1JP V01BWChoIC0gMSkgJiBJU0NfUEZFX0NGRzJfUk9XTUFYX01BU0spKTsNCi0NCi0JcmVnbWFwX3Vw ZGF0ZV9iaXRzKHJlZ21hcCwgSVNDX1BGRV9DRkcwLA0KLQkJCSAgIElTQ19QRkVfQ0ZHMF9DT0xF TiB8IElTQ19QRkVfQ0ZHMF9ST1dFTiwNCi0JCQkgICBJU0NfUEZFX0NGRzBfQ09MRU4gfCBJU0Nf UEZFX0NGRzBfUk9XRU4pOw0KLQ0KLQlhZGRyMCA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9h ZGRyKCZpc2MtPmN1cl9mcm0tPnZiLnZiMl9idWYsIDApOw0KLQlyZWdtYXBfd3JpdGUocmVnbWFw LCBJU0NfREFEMCwgYWRkcjApOw0KLQ0KLQlzd2l0Y2ggKGlzYy0+Y29uZmlnLmZvdXJjYykgew0K LQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjA6DQotCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0Nf REFEMSwgYWRkcjAgKyAoc2l6ZWltYWdlICogMikgLyAzKTsNCi0JCXJlZ21hcF93cml0ZShyZWdt YXAsIElTQ19EQUQyLCBhZGRyMCArIChzaXplaW1hZ2UgKiA1KSAvIDYpOw0KLQkJYnJlYWs7DQot CWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6DQotCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0Nf REFEMSwgYWRkcjAgKyBzaXplaW1hZ2UgLyAyKTsNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElT Q19EQUQyLCBhZGRyMCArIChzaXplaW1hZ2UgKiAzKSAvIDQpOw0KLQkJYnJlYWs7DQotCWRlZmF1 bHQ6DQotCQlicmVhazsNCi0JfQ0KLQ0KLQlkY3RybF9kdmlldyA9IGlzYy0+Y29uZmlnLmRjdHJs X2R2aWV3Ow0KLQ0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfRENUUkwsIGRjdHJsX2R2aWV3 IHwgSVNDX0RDVFJMX0lFX0lTKTsNCi0Jc3Bpbl9sb2NrKCZpc2MtPmF3Yl9sb2NrKTsNCi0JcmVn bWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NUUkxFTiwgSVNDX0NUUkxfQ0FQVFVSRSk7DQotCXNwaW5f dW5sb2NrKCZpc2MtPmF3Yl9sb2NrKTsNCi19DQotDQotc3RhdGljIHZvaWQgaXNjX3NldF9waXBl bGluZShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCB1MzIgcGlwZWxpbmUpDQotew0KLQlzdHJ1Y3Qg cmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCi0Jc3RydWN0IGlzY19jdHJscyAqY3RybHMg PSAmaXNjLT5jdHJsczsNCi0JdTMyIHZhbCwgYmF5X2NmZzsNCi0JY29uc3QgdTMyICpnYW1tYTsN Ci0JdW5zaWduZWQgaW50IGk7DQotDQotCS8qIFdCLS0+Q0ZBLS0+Q0MtLT5HQU0tLT5DU0MtLT5D QkMtLT5TVUI0MjItLT5TVUI0MjAgKi8NCi0JZm9yIChpID0gMDsgaSA8IElTQ19QSVBFX0xJTkVf Tk9ERV9OVU07IGkrKykgew0KLQkJdmFsID0gcGlwZWxpbmUgJiBCSVQoaSkgPyAxIDogMDsNCi0J CXJlZ21hcF9maWVsZF93cml0ZShpc2MtPnBpcGVsaW5lW2ldLCB2YWwpOw0KLQl9DQotDQotCWlm ICghcGlwZWxpbmUpDQotCQlyZXR1cm47DQotDQotCWJheV9jZmcgPSBpc2MtPmNvbmZpZy5zZF9m b3JtYXQtPmNmYV9iYXljZmc7DQotDQotCWlmIChjdHJscy0+YXdiID09IElTQ19XQl9OT05FKQ0K LQkJaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2MpOw0KLQ0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJ U0NfV0JfQ0ZHLCBiYXlfY2ZnKTsNCi0JaXNjX3VwZGF0ZV9hd2JfY3RybHMoaXNjKTsNCi0NCi0J cmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NGQV9DRkcsIGJheV9jZmcgfCBJU0NfQ0ZBX0NGR19F SVRQT0wpOw0KLQ0KLQlnYW1tYSA9ICZpc2NfZ2FtbWFfdGFibGVbY3RybHMtPmdhbW1hX2luZGV4 XVswXTsNCi0JcmVnbWFwX2J1bGtfd3JpdGUocmVnbWFwLCBJU0NfR0FNX0JFTlRSWSwgZ2FtbWEs IEdBTU1BX0VOVFJJRVMpOw0KLQlyZWdtYXBfYnVsa193cml0ZShyZWdtYXAsIElTQ19HQU1fR0VO VFJZLCBnYW1tYSwgR0FNTUFfRU5UUklFUyk7DQotCXJlZ21hcF9idWxrX3dyaXRlKHJlZ21hcCwg SVNDX0dBTV9SRU5UUlksIGdhbW1hLCBHQU1NQV9FTlRSSUVTKTsNCi0NCi0JLyogQ29udmVydCBS R0IgdG8gWVVWICovDQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfWVJfWUcsIDB4NDIg fCAoMHg4MSA8PCAxNikpOw0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX1lCX09ZLCAw eDE5IHwgKDB4MTAgPDwgMTYpKTsNCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19DQlJf Q0JHLCAweEZEQSB8ICgweEZCNiA8PCAxNikpOw0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0Nf Q1NDX0NCQl9PQ0IsIDB4NzAgfCAoMHg4MCA8PCAxNikpOw0KLQlyZWdtYXBfd3JpdGUocmVnbWFw LCBJU0NfQ1NDX0NSUl9DUkcsIDB4NzAgfCAoMHhGQTIgPDwgMTYpKTsNCi0JcmVnbWFwX3dyaXRl KHJlZ21hcCwgSVNDX0NTQ19DUkJfT0NSLCAweEZFRSB8ICgweDgwIDw8IDE2KSk7DQotDQotCXJl Z21hcF93cml0ZShyZWdtYXAsIElTQ19DQkNfQlJJR0hULCBjdHJscy0+YnJpZ2h0bmVzcyk7DQot CXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DQkNfQ09OVFJBU1QsIGN0cmxzLT5jb250cmFzdCk7 DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3VwZGF0ZV9wcm9maWxlKHN0cnVjdCBpc2NfZGV2aWNl ICppc2MpDQotew0KLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCi0JdTMy IHNyOw0KLQlpbnQgY291bnRlciA9IDEwMDsNCi0NCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVND X0NUUkxFTiwgSVNDX0NUUkxfVVBQUk8pOw0KLQ0KLQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19D VFJMU1IsICZzcik7DQotCXdoaWxlICgoc3IgJiBJU0NfQ1RSTF9VUFBSTykgJiYgY291bnRlci0t KSB7DQotCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7DQotCQlyZWdtYXBfcmVhZChyZWdtYXAs IElTQ19DVFJMU1IsICZzcik7DQotCX0NCi0NCi0JaWYgKGNvdW50ZXIgPCAwKSB7DQotCQl2NGwy X3dhcm4oJmlzYy0+djRsMl9kZXYsICJUaW1lIG91dCB0byB1cGRhdGUgcHJvZmlsZVxuIik7DQot CQlyZXR1cm4gLUVUSU1FRE9VVDsNCi0JfQ0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGlj IHZvaWQgaXNjX3NldF9oaXN0b2dyYW0oc3RydWN0IGlzY19kZXZpY2UgKmlzYywgYm9vbCBlbmFi bGUpDQotew0KLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCi0Jc3RydWN0 IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsNCi0NCi0JaWYgKGVuYWJsZSkgew0KLQkJ cmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0hJU19DRkcsDQotCQkJICAgICBJU0NfSElTX0NGR19N T0RFX0dSIHwNCi0JCQkgICAgIChpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPmNmYV9iYXljZmcNCi0J CQkJCTw8IElTQ19ISVNfQ0ZHX0JBWVNFTF9TSElGVCkgfA0KLQkJCQkJSVNDX0hJU19DRkdfUkFS KTsNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNfQ1RSTCwgSVNDX0hJU19DVFJMX0VO KTsNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19JTlRFTiwgSVNDX0lOVF9ISVNET05FKTsN Ci0JCWN0cmxzLT5oaXN0X2lkID0gSVNDX0hJU19DRkdfTU9ERV9HUjsNCi0JCWlzY191cGRhdGVf cHJvZmlsZShpc2MpOw0KLQkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NUUkxFTiwgSVNDX0NU UkxfSElTUkVRKTsNCi0NCi0JCWN0cmxzLT5oaXN0X3N0YXQgPSBISVNUX0VOQUJMRUQ7DQotCX0g ZWxzZSB7DQotCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSU5URElTLCBJU0NfSU5UX0hJU0RP TkUpOw0KLQkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0hJU19DVFJMLCBJU0NfSElTX0NUUkxf RElTKTsNCi0NCi0JCWN0cmxzLT5oaXN0X3N0YXQgPSBISVNUX0RJU0FCTEVEOw0KLQl9DQotfQ0K LQ0KLXN0YXRpYyBpbnQgaXNjX2NvbmZpZ3VyZShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsN Ci0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQotCXUzMiBwZmVfY2ZnMCwg cmxwX21vZGUsIGRjZmcsIG1hc2ssIHBpcGVsaW5lOw0KLQlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRp dHkgKnN1YmRldiA9IGlzYy0+Y3VycmVudF9zdWJkZXY7DQotDQotCXBmZV9jZmcwID0gaXNjLT5j b25maWcuc2RfZm9ybWF0LT5wZmVfY2ZnMF9icHM7DQotCXJscF9tb2RlID0gaXNjLT5jb25maWcu cmxwX2NmZ19tb2RlOw0KLQlwaXBlbGluZSA9IGlzYy0+Y29uZmlnLmJpdHNfcGlwZWxpbmU7DQot DQotCWRjZmcgPSBpc2MtPmNvbmZpZy5kY2ZnX2ltb2RlIHwNCi0JCSAgICAgICBJU0NfRENGR19Z TUJTSVpFX0JFQVRTOCB8IElTQ19EQ0ZHX0NNQlNJWkVfQkVBVFM4Ow0KLQ0KLQlwZmVfY2ZnMCAg fD0gc3ViZGV2LT5wZmVfY2ZnMCB8IElTQ19QRkVfQ0ZHMF9NT0RFX1BST0dSRVNTSVZFOw0KLQlt YXNrID0gSVNDX1BGRV9DRkcwX0JQU19NQVNLIHwgSVNDX1BGRV9DRkcwX0hQT0xfTE9XIHwNCi0J ICAgICAgIElTQ19QRkVfQ0ZHMF9WUE9MX0xPVyB8IElTQ19QRkVfQ0ZHMF9QUE9MX0xPVyB8DQot CSAgICAgICBJU0NfUEZFX0NGRzBfTU9ERV9NQVNLIHwgSVNDX1BGRV9DRkcwX0NDSVJfQ1JDIHwN Ci0JCSAgIElTQ19QRkVfQ0ZHMF9DQ0lSNjU2Ow0KLQ0KLQlyZWdtYXBfdXBkYXRlX2JpdHMocmVn bWFwLCBJU0NfUEZFX0NGRzAsIG1hc2ssIHBmZV9jZmcwKTsNCi0NCi0JcmVnbWFwX3VwZGF0ZV9i aXRzKHJlZ21hcCwgSVNDX1JMUF9DRkcsIElTQ19STFBfQ0ZHX01PREVfTUFTSywNCi0JCQkgICBy bHBfbW9kZSk7DQotDQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQ0ZHLCBkY2ZnKTsNCi0N Ci0JLyogU2V0IHRoZSBwaXBlbGluZSAqLw0KLQlpc2Nfc2V0X3BpcGVsaW5lKGlzYywgcGlwZWxp bmUpOw0KLQ0KLQkvKg0KLQkgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRlZCBoaXN0b2dyYW0gaXMg YXZhaWxhYmxlIGZvciBSQVcgUiwgQiwgR0IsIEdSDQotCSAqIGNoYW5uZWxzLiBXZSBuZWVkIHRv IGNoZWNrIGlmIHNlbnNvciBpcyBvdXRwdXR0aW5nIFJBVyBCQVlFUg0KLQkgKi8NCi0JaWYgKGlz Yy0+Y3RybHMuYXdiICYmDQotCSAgICBJU0NfSVNfRk9STUFUX1JBVyhpc2MtPmNvbmZpZy5zZF9m b3JtYXQtPm1idXNfY29kZSkpDQotCQlpc2Nfc2V0X2hpc3RvZ3JhbShpc2MsIHRydWUpOw0KLQll bHNlDQotCQlpc2Nfc2V0X2hpc3RvZ3JhbShpc2MsIGZhbHNlKTsNCi0NCi0JLyogVXBkYXRlIHBy b2ZpbGUgKi8NCi0JcmV0dXJuIGlzY191cGRhdGVfcHJvZmlsZShpc2MpOw0KLX0NCi0NCi1zdGF0 aWMgaW50IGlzY19zdGFydF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEsIHVuc2lnbmVk IGludCBjb3VudCkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2YjJfZ2V0X2Rydl9w cml2KHZxKTsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQotCXN0cnVj dCBpc2NfYnVmZmVyICpidWY7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQotCWludCByZXQ7DQot DQotCS8qIEVuYWJsZSBzdHJlYW0gb24gdGhlIHN1YiBkZXZpY2UgKi8NCi0JcmV0ID0gdjRsMl9z dWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgdmlkZW8sIHNfc3RyZWFtLCAxKTsN Ci0JaWYgKHJldCAmJiByZXQgIT0gLUVOT0lPQ1RMQ01EKSB7DQotCQl2NGwyX2VycigmaXNjLT52 NGwyX2RldiwgInN0cmVhbSBvbiBmYWlsZWQgaW4gc3ViZGV2ICVkXG4iLA0KLQkJCSByZXQpOw0K LQkJZ290byBlcnJfc3RhcnRfc3RyZWFtOw0KLQl9DQotDQotCXBtX3J1bnRpbWVfZ2V0X3N5bmMo aXNjLT5kZXYpOw0KLQ0KLQlyZXQgPSBpc2NfY29uZmlndXJlKGlzYyk7DQotCWlmICh1bmxpa2Vs eShyZXQpKQ0KLQkJZ290byBlcnJfY29uZmlndXJlOw0KLQ0KLQkvKiBFbmFibGUgRE1BIGludGVy cnVwdCAqLw0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSU5URU4sIElTQ19JTlRfRERPTkUp Ow0KLQ0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0K LQ0KLQlpc2MtPnNlcXVlbmNlID0gMDsNCi0JaXNjLT5zdG9wID0gZmFsc2U7DQotCXJlaW5pdF9j b21wbGV0aW9uKCZpc2MtPmNvbXApOw0KLQ0KLQlpc2MtPmN1cl9mcm0gPSBsaXN0X2ZpcnN0X2Vu dHJ5KCZpc2MtPmRtYV9xdWV1ZSwNCi0JCQkJCXN0cnVjdCBpc2NfYnVmZmVyLCBsaXN0KTsNCi0J bGlzdF9kZWwoJmlzYy0+Y3VyX2ZybS0+bGlzdCk7DQotDQotCWlzY19zdGFydF9kbWEoaXNjKTsN Ci0NCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3Mp Ow0KLQ0KLQkvKiBpZiB3ZSBzdHJlYW1pbmcgZnJvbSBSQVcsIHdlIGNhbiBkbyBvbmUtc2hvdCB3 aGl0ZSBiYWxhbmNlIGFkaiAqLw0KLQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT5jb25maWcu c2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KLQkJdjRsMl9jdHJsX2FjdGl2YXRlKGlzYy0+ZG9fd2Jf Y3RybCwgdHJ1ZSk7DQotDQotCXJldHVybiAwOw0KLQ0KLWVycl9jb25maWd1cmU6DQotCXBtX3J1 bnRpbWVfcHV0X3N5bmMoaXNjLT5kZXYpOw0KLQ0KLQl2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3Vy cmVudF9zdWJkZXYtPnNkLCB2aWRlbywgc19zdHJlYW0sIDApOw0KLQ0KLWVycl9zdGFydF9zdHJl YW06DQotCXNwaW5fbG9ja19pcnFzYXZlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQot CWxpc3RfZm9yX2VhY2hfZW50cnkoYnVmLCAmaXNjLT5kbWFfcXVldWUsIGxpc3QpDQotCQl2YjJf YnVmZmVyX2RvbmUoJmJ1Zi0+dmIudmIyX2J1ZiwgVkIyX0JVRl9TVEFURV9RVUVVRUQpOw0KLQlJ TklUX0xJU1RfSEVBRCgmaXNjLT5kbWFfcXVldWUpOw0KLQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQotDQotCXJldHVybiByZXQ7DQotfQ0KLQ0K LXN0YXRpYyB2b2lkIGlzY19zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkNCi17 DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsNCi0JdW5z aWduZWQgbG9uZyBmbGFnczsNCi0Jc3RydWN0IGlzY19idWZmZXIgKmJ1ZjsNCi0JaW50IHJldDsN Ci0NCi0JdjRsMl9jdHJsX2FjdGl2YXRlKGlzYy0+ZG9fd2JfY3RybCwgZmFsc2UpOw0KLQ0KLQlp c2MtPnN0b3AgPSB0cnVlOw0KLQ0KLQkvKiBXYWl0IHVudGlsIHRoZSBlbmQgb2YgdGhlIGN1cnJl bnQgZnJhbWUgKi8NCi0JaWYgKGlzYy0+Y3VyX2ZybSAmJiAhd2FpdF9mb3JfY29tcGxldGlvbl90 aW1lb3V0KCZpc2MtPmNvbXAsIDUgKiBIWikpDQotCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwN Ci0JCQkgIlRpbWVvdXQgd2FpdGluZyBmb3IgZW5kIG9mIHRoZSBjYXB0dXJlXG4iKTsNCi0NCi0J LyogRGlzYWJsZSBETUEgaW50ZXJydXB0ICovDQotCXJlZ21hcF93cml0ZShpc2MtPnJlZ21hcCwg SVNDX0lOVERJUywgSVNDX0lOVF9ERE9ORSk7DQotDQotCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNj LT5kZXYpOw0KLQ0KLQkvKiBEaXNhYmxlIHN0cmVhbSBvbiB0aGUgc3ViIGRldmljZSAqLw0KLQly ZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCB2aWRlbywgc19z dHJlYW0sIDApOw0KLQlpZiAocmV0ICYmIHJldCAhPSAtRU5PSU9DVExDTUQpDQotCQl2NGwyX2Vy cigmaXNjLT52NGwyX2RldiwgInN0cmVhbSBvZmYgZmFpbGVkIGluIHN1YmRldlxuIik7DQotDQot CS8qIFJlbGVhc2UgYWxsIGFjdGl2ZSBidWZmZXJzICovDQotCXNwaW5fbG9ja19pcnFzYXZlKCZp c2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQotCWlmICh1bmxpa2VseShpc2MtPmN1cl9mcm0p KSB7DQotCQl2YjJfYnVmZmVyX2RvbmUoJmlzYy0+Y3VyX2ZybS0+dmIudmIyX2J1ZiwNCi0JCQkJ VkIyX0JVRl9TVEFURV9FUlJPUik7DQotCQlpc2MtPmN1cl9mcm0gPSBOVUxMOw0KLQl9DQotCWxp c3RfZm9yX2VhY2hfZW50cnkoYnVmLCAmaXNjLT5kbWFfcXVldWUsIGxpc3QpDQotCQl2YjJfYnVm ZmVyX2RvbmUoJmJ1Zi0+dmIudmIyX2J1ZiwgVkIyX0JVRl9TVEFURV9FUlJPUik7DQotCUlOSVRf TElTVF9IRUFEKCZpc2MtPmRtYV9xdWV1ZSk7DQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlz Yy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCi19DQotDQotc3RhdGljIHZvaWQgaXNjX2J1ZmZl cl9xdWV1ZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpDQotew0KLQlzdHJ1Y3QgdmIyX3Y0bDJfYnVm ZmVyICp2YnVmID0gdG9fdmIyX3Y0bDJfYnVmZmVyKHZiKTsNCi0Jc3RydWN0IGlzY19idWZmZXIg KmJ1ZiA9IGNvbnRhaW5lcl9vZih2YnVmLCBzdHJ1Y3QgaXNjX2J1ZmZlciwgdmIpOw0KLQlzdHJ1 Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVlKTsNCi0J dW5zaWduZWQgbG9uZyBmbGFnczsNCi0NCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlzYy0+ZG1hX3F1 ZXVlX2xvY2ssIGZsYWdzKTsNCi0JaWYgKCFpc2MtPmN1cl9mcm0gJiYgbGlzdF9lbXB0eSgmaXNj LT5kbWFfcXVldWUpICYmDQotCQl2YjJfaXNfc3RyZWFtaW5nKHZiLT52YjJfcXVldWUpKSB7DQot CQlpc2MtPmN1cl9mcm0gPSBidWY7DQotCQlpc2Nfc3RhcnRfZG1hKGlzYyk7DQotCX0gZWxzZQ0K LQkJbGlzdF9hZGRfdGFpbCgmYnVmLT5saXN0LCAmaXNjLT5kbWFfcXVldWUpOw0KLQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQotfQ0KLQ0KLXN0 YXRpYyBzdHJ1Y3QgaXNjX2Zvcm1hdCAqZmluZF9mb3JtYXRfYnlfZm91cmNjKHN0cnVjdCBpc2Nf ZGV2aWNlICppc2MsDQotCQkJCQkJIHVuc2lnbmVkIGludCBmb3VyY2MpDQotew0KLQl1bnNpZ25l ZCBpbnQgbnVtX2Zvcm1hdHMgPSBpc2MtPm51bV91c2VyX2Zvcm1hdHM7DQotCXN0cnVjdCBpc2Nf Zm9ybWF0ICpmbXQ7DQotCXVuc2lnbmVkIGludCBpOw0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgbnVt X2Zvcm1hdHM7IGkrKykgew0KLQkJZm10ID0gaXNjLT51c2VyX2Zvcm1hdHNbaV07DQotCQlpZiAo Zm10LT5mb3VyY2MgPT0gZm91cmNjKQ0KLQkJCXJldHVybiBmbXQ7DQotCX0NCi0NCi0JcmV0dXJu IE5VTEw7DQotfQ0KLQ0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmIyX29wcyBpc2NfdmIyX29wcyA9 IHsNCi0JLnF1ZXVlX3NldHVwCQk9IGlzY19xdWV1ZV9zZXR1cCwNCi0JLndhaXRfcHJlcGFyZQkJ PSB2YjJfb3BzX3dhaXRfcHJlcGFyZSwNCi0JLndhaXRfZmluaXNoCQk9IHZiMl9vcHNfd2FpdF9m aW5pc2gsDQotCS5idWZfcHJlcGFyZQkJPSBpc2NfYnVmZmVyX3ByZXBhcmUsDQotCS5zdGFydF9z dHJlYW1pbmcJPSBpc2Nfc3RhcnRfc3RyZWFtaW5nLA0KLQkuc3RvcF9zdHJlYW1pbmcJCT0gaXNj X3N0b3Bfc3RyZWFtaW5nLA0KLQkuYnVmX3F1ZXVlCQk9IGlzY19idWZmZXJfcXVldWUsDQotfTsN Ci0NCi1zdGF0aWMgaW50IGlzY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJp diwNCi0JCQkgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQ0KLXsNCi0Jc3RydWN0IGlzY19k ZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQotDQotCXN0cnNjcHkoY2FwLT5kcml2 ZXIsIEFUTUVMX0lTQ19OQU1FLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsNCi0Jc3Ryc2NweShjYXAt PmNhcmQsICJBdG1lbCBJbWFnZSBTZW5zb3IgQ29udHJvbGxlciIsIHNpemVvZihjYXAtPmNhcmQp KTsNCi0Jc25wcmludGYoY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pLA0KLQkJ ICJwbGF0Zm9ybTolcyIsIGlzYy0+djRsMl9kZXYubmFtZSk7DQotDQotCXJldHVybiAwOw0KLX0N Ci0NCi1zdGF0aWMgaW50IGlzY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2 b2lkICpwcml2LA0KLQkJCQkgc3RydWN0IHY0bDJfZm10ZGVzYyAqZikNCi17DQotCXUzMiBpbmRl eCA9IGYtPmluZGV4Ow0KLQl1MzIgaSwgc3VwcG9ydGVkX2luZGV4Ow0KLQ0KLQlpZiAoaW5kZXgg PCBBUlJBWV9TSVpFKGNvbnRyb2xsZXJfZm9ybWF0cykpIHsNCi0JCWYtPnBpeGVsZm9ybWF0ID0g Y29udHJvbGxlcl9mb3JtYXRzW2luZGV4XS5mb3VyY2M7DQotCQlyZXR1cm4gMDsNCi0JfQ0KLQ0K LQlpbmRleCAtPSBBUlJBWV9TSVpFKGNvbnRyb2xsZXJfZm9ybWF0cyk7DQotDQotCWkgPSAwOw0K LQlzdXBwb3J0ZWRfaW5kZXggPSAwOw0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShm b3JtYXRzX2xpc3QpOyBpKyspIHsNCi0JCWlmICghSVNDX0lTX0ZPUk1BVF9SQVcoZm9ybWF0c19s aXN0W2ldLm1idXNfY29kZSkgfHwNCi0JCSAgICAhZm9ybWF0c19saXN0W2ldLnNkX3N1cHBvcnQp DQotCQkJY29udGludWU7DQotCQlpZiAoc3VwcG9ydGVkX2luZGV4ID09IGluZGV4KSB7DQotCQkJ Zi0+cGl4ZWxmb3JtYXQgPSBmb3JtYXRzX2xpc3RbaV0uZm91cmNjOw0KLQkJCXJldHVybiAwOw0K LQkJfQ0KLQkJc3VwcG9ydGVkX2luZGV4Kys7DQotCX0NCi0NCi0JcmV0dXJuIC1FSU5WQUw7DQot fQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZv aWQgKnByaXYsDQotCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpDQotew0KLQlzdHJ1 Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCi0NCi0JKmZtdCA9IGlz Yy0+Zm10Ow0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotLyoNCi0gKiBDaGVja3MgdGhlIGN1cnJl bnQgY29uZmlndXJlZCBmb3JtYXQsIGlmIElTQyBjYW4gb3V0cHV0IGl0LA0KLSAqIGNvbnNpZGVy aW5nIHdoaWNoIHR5cGUgb2YgZm9ybWF0IHRoZSBJU0MgcmVjZWl2ZXMgZnJvbSB0aGUgc2Vuc29y DQotICovDQotc3RhdGljIGludCBpc2NfdHJ5X3ZhbGlkYXRlX2Zvcm1hdHMoc3RydWN0IGlzY19k ZXZpY2UgKmlzYykNCi17DQotCWludCByZXQ7DQotCWJvb2wgYmF5ZXIgPSBmYWxzZSwgeXV2ID0g ZmFsc2UsIHJnYiA9IGZhbHNlLCBncmV5ID0gZmFsc2U7DQotDQotCS8qIGFsbCBmb3JtYXRzIHN1 cHBvcnRlZCBieSB0aGUgUkxQIG1vZHVsZSBhcmUgT0sgKi8NCi0Jc3dpdGNoIChpc2MtPnRyeV9j b25maWcuZm91cmNjKSB7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSODoNCi0JY2FzZSBWNEwy X1BJWF9GTVRfU0dCUkc4Og0KLQljYXNlIFY0TDJfUElYX0ZNVF9TR1JCRzg6DQotCWNhc2UgVjRM Ml9QSVhfRk1UX1NSR0dCODoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1IxMDoNCi0JY2FzZSBW NEwyX1BJWF9GTVRfU0dCUkcxMDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkcxMDoNCi0JY2Fz ZSBWNEwyX1BJWF9GTVRfU1JHR0IxMDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1IxMjoNCi0J Y2FzZSBWNEwyX1BJWF9GTVRfU0dCUkcxMjoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkcxMjoN Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0IxMjoNCi0JCXJldCA9IDA7DQotCQliYXllciA9IHRy dWU7DQotCQlicmVhazsNCi0NCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOg0KLQljYXNlIFY0 TDJfUElYX0ZNVF9ZVVY0MjJQOg0KLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOg0KLQkJcmV0ID0g MDsNCi0JCXl1diA9IHRydWU7DQotCQlicmVhazsNCi0NCi0JY2FzZSBWNEwyX1BJWF9GTVRfUkdC NTY1Og0KLQljYXNlIFY0TDJfUElYX0ZNVF9BQkdSMzI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1hC R1IzMjoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjQ0NDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRf QVJHQjU1NToNCi0JCXJldCA9IDA7DQotCQlyZ2IgPSB0cnVlOw0KLQkJYnJlYWs7DQotCWNhc2Ug VjRMMl9QSVhfRk1UX0dSRVk6DQotCQlyZXQgPSAwOw0KLQkJZ3JleSA9IHRydWU7DQotCQlicmVh azsNCi0JZGVmYXVsdDoNCi0JLyogYW55IG90aGVyIGRpZmZlcmVudCBmb3JtYXRzIGFyZSBub3Qg c3VwcG9ydGVkICovDQotCQlyZXQgPSAtRUlOVkFMOw0KLQl9DQotDQotCS8qIHdlIGNhbm5vdCBv dXRwdXQgUkFXL0dyZXkgaWYgd2UgZG8gbm90IHJlY2VpdmUgUkFXICovDQotCWlmICgoYmF5ZXIg fHwgZ3JleSkgJiYNCi0JICAgICFJU0NfSVNfRk9STUFUX1JBVyhpc2MtPnRyeV9jb25maWcuc2Rf Zm9ybWF0LT5tYnVzX2NvZGUpKQ0KLQkJcmV0dXJuIC1FSU5WQUw7DQotDQotCXY0bDJfZGJnKDEs IGRlYnVnLCAmaXNjLT52NGwyX2RldiwNCi0JCSAiRm9ybWF0IHZhbGlkYXRpb24sIHJlcXVlc3Rl ZCByZ2I9JXUsIHl1dj0ldSwgZ3JleT0ldSwgYmF5ZXI9JXVcbiIsDQotCQkgcmdiLCB5dXYsIGdy ZXksIGJheWVyKTsNCi0NCi0JcmV0dXJuIHJldDsNCi19DQotDQotLyoNCi0gKiBDb25maWd1cmVz IHRoZSBSTFAgYW5kIERNQSBtb2R1bGVzLCBkZXBlbmRpbmcgb24gdGhlIG91dHB1dCBmb3JtYXQN Ci0gKiBjb25maWd1cmVkIGZvciB0aGUgSVNDLg0KLSAqIElmIGRpcmVjdF9kdW1wID09IHRydWUs IGp1c3QgZHVtcCByYXcgZGF0YSA4IGJpdHMuDQotICovDQotc3RhdGljIGludCBpc2NfdHJ5X2Nv bmZpZ3VyZV9ybHBfZG1hKHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIGJvb2wgZGlyZWN0X2R1bXAp DQotew0KLQlpZiAoZGlyZWN0X2R1bXApIHsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21v ZGUgPSBJU0NfUkxQX0NGR19NT0RFX0RBVDg7DQotCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9k ZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDg7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZp ZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2 Ow0KLQkJcmV0dXJuIDA7DQotCX0NCi0NCi0Jc3dpdGNoIChpc2MtPnRyeV9jb25maWcuZm91cmNj KSB7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSODoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dC Ukc4Og0KLQljYXNlIFY0TDJfUElYX0ZNVF9TR1JCRzg6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NS R0dCODoNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RF X0RBVDg7DQotCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BB Q0tFRDg7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdf UEFDS0VEOw0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDg7DQotCQlicmVhazsNCi0JY2FzZSBW NEwyX1BJWF9GTVRfU0JHR1IxMDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dCUkcxMDoNCi0JY2Fz ZSBWNEwyX1BJWF9GTVRfU0dSQkcxMDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0IxMDoNCi0J CWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0RBVDEwOw0K LQkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQxNjsN Ci0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7 DQotCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJ WF9GTVRfU0JHR1IxMjoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dCUkcxMjoNCi0JY2FzZSBWNEwy X1BJWF9GTVRfU0dSQkcxMjoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0IxMjoNCi0JCWlzYy0+ dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0RBVDEyOw0KLQkJaXNj LT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQxNjsNCi0JCWlz Yy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQotCQlp c2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRf UkdCNTY1Og0KLQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01P REVfUkdCNTY1Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9E RV9QQUNLRUQxNjsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9E VklFV19QQUNLRUQ7DQotCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQotCQlicmVhazsNCi0J Y2FzZSBWNEwyX1BJWF9GTVRfQVJHQjQ0NDoNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21v ZGUgPSBJU0NfUkxQX0NGR19NT0RFX0FSR0I0NDQ7DQotCQlpc2MtPnRyeV9jb25maWcuZGNmZ19p bW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRjdHJs X2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5icHAg PSAxNjsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9BUkdCNTU1Og0KLQkJaXNjLT50 cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfQVJHQjU1NTsNCi0JCWlz Yy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQotCQlp c2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJ aXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1U X0FCR1IzMjoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWEJHUjMyOg0KLQkJaXNjLT50cnlfY29uZmln LnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfQVJHQjMyOw0KLQkJaXNjLT50cnlfY29u ZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQzMjsNCi0JCWlzYy0+dHJ5X2Nv bmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQotCQlpc2MtPnRyeV9j b25maWcuYnBwID0gMzI7DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOg0K LQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfWVlDQzsN Ci0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfWUM0MjBQOw0K LQkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BMQU5BUjsN Ci0JCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxMjsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElY X0ZNVF9ZVVY0MjJQOg0KLQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBf Q0ZHX01PREVfWVlDQzsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdf SU1PREVfWUM0MjJQOw0KLQkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJM X0RWSUVXX1BMQU5BUjsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCi0JCWJyZWFrOw0K LQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOg0KLQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9k ZSA9IElTQ19STFBfQ0ZHX01PREVfWVlDQzsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2Rl ID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMzI7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZp ZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2 Ow0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6DQotCQlpc2MtPnRyeV9jb25m aWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVRZODsNCi0JCWlzYy0+dHJ5X2Nv bmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEODsNCi0JCWlzYy0+dHJ5X2Nv bmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQotCQlpc2MtPnRyeV9j b25maWcuYnBwID0gODsNCi0JCWJyZWFrOw0KLQlkZWZhdWx0Og0KLQkJcmV0dXJuIC1FSU5WQUw7 DQotCX0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLS8qDQotICogQ29uZmlndXJpbmcgcGlwZWxpbmUg bW9kdWxlcywgZGVwZW5kaW5nIG9uIHdoaWNoIGZvcm1hdCB0aGUgSVNDIG91dHB1dHMNCi0gKiBh bmQgY29uc2lkZXJpbmcgd2hpY2ggZm9ybWF0IGl0IGhhcyBhcyBpbnB1dCBmcm9tIHRoZSBzZW5z b3IuDQotICovDQotc3RhdGljIGludCBpc2NfdHJ5X2NvbmZpZ3VyZV9waXBlbGluZShzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjKQ0KLXsNCi0Jc3dpdGNoIChpc2MtPnRyeV9jb25maWcuZm91cmNjKSB7 DQotCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToNCi0JY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjU1 NToNCi0JY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjQ0NDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfQUJH UjMyOg0KLQljYXNlIFY0TDJfUElYX0ZNVF9YQkdSMzI6DQotCQkvKiBpZiBzZW5zb3IgZm9ybWF0 IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICovDQotCQlpZiAoSVNDX0lTX0ZPUk1BVF9S QVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KLQkJCWlzYy0+dHJ5 X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8DQotCQkJCVdCX0VOQUJMRSB8IEdB TV9FTkFCTEVTOw0KLQkJfSBlbHNlIHsNCi0JCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGlu ZSA9IDB4MDsNCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjA6DQot CQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICovDQot CQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19j b2RlKSkgew0KLQkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8 DQotCQkJCUNTQ19FTkFCTEUgfCBXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUyB8DQotCQkJCVNVQjQy MF9FTkFCTEUgfCBTVUI0MjJfRU5BQkxFIHwgQ0JDX0VOQUJMRTsNCi0JCX0gZWxzZSB7DQotCQkJ aXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQotCQl9DQotCQlicmVhazsNCi0J Y2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoNCi0JCS8qIGlmIHNlbnNvciBmb3JtYXQgaXMgUkFX LCB3ZSBjb252ZXJ0IGluc2lkZSBJU0MgKi8NCi0JCWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2Mt PnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7DQotCQkJaXNjLT50cnlfY29uZmln LmJpdHNfcGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwNCi0JCQkJQ1NDX0VOQUJMRSB8IFdCX0VOQUJM RSB8IEdBTV9FTkFCTEVTIHwNCi0JCQkJU1VCNDIyX0VOQUJMRSB8IENCQ19FTkFCTEU7DQotCQl9 IGVsc2Ugew0KLQkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KLQkJfQ0K LQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6DQotCQkvKiBpZiBzZW5zb3IgZm9y bWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICovDQotCQlpZiAoSVNDX0lTX0ZPUk1B VF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KLQkJCWlzYy0+ dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8DQotCQkJCUNTQ19FTkFCTEUg fCBXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUyB8DQotCQkJCVNVQjQyMl9FTkFCTEUgfCBDQkNfRU5B QkxFOw0KLQkJfSBlbHNlIHsNCi0JCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IDB4 MDsNCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9HUkVZOg0KLQkJaWYgKElT Q19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsN Ci0JCS8qIGlmIHNlbnNvciBmb3JtYXQgaXMgUkFXLCB3ZSBjb252ZXJ0IGluc2lkZSBJU0MgKi8N Ci0JCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IENGQV9FTkFCTEUgfA0KLQkJCQlD U0NfRU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FNX0VOQUJMRVMgfA0KLQkJCQlDQkNfRU5BQkxFOw0K LQkJfSBlbHNlIHsNCi0JCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IDB4MDsNCi0J CX0NCi0JCWJyZWFrOw0KLQlkZWZhdWx0Og0KLQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxp bmUgPSAweDA7DQotCX0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3RyeV9m bXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgc3RydWN0IHY0bDJfZm9ybWF0ICpmLA0KLQkJCXUz MiAqY29kZSkNCi17DQotCWludCBpOw0KLQlzdHJ1Y3QgaXNjX2Zvcm1hdCAqc2RfZm10ID0gTlVM TCwgKmRpcmVjdF9mbXQgPSBOVUxMOw0KLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhmbXQg PSAmZi0+Zm10LnBpeDsNCi0Jc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgcGFkX2NmZzsN Ci0Jc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCBmb3JtYXQgPSB7DQotCQkud2hpY2ggPSBWNEwy X1NVQkRFVl9GT1JNQVRfVFJZLA0KLQl9Ow0KLQl1MzIgbWJ1c19jb2RlOw0KLQlpbnQgcmV0Ow0K LQlib29sIHJscF9kbWFfZGlyZWN0X2R1bXAgPSBmYWxzZTsNCi0NCi0JaWYgKGYtPnR5cGUgIT0g VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQ0KLQkJcmV0dXJuIC1FSU5WQUw7DQotDQotCS8q IFN0ZXAgMTogZmluZCBhIFJBVyBmb3JtYXQgdGhhdCBpcyBzdXBwb3J0ZWQgKi8NCi0JZm9yIChp ID0gMDsgaSA8IGlzYy0+bnVtX3VzZXJfZm9ybWF0czsgaSsrKSB7DQotCQlpZiAoSVNDX0lTX0ZP Uk1BVF9SQVcoaXNjLT51c2VyX2Zvcm1hdHNbaV0tPm1idXNfY29kZSkpIHsNCi0JCQlzZF9mbXQg PSBpc2MtPnVzZXJfZm9ybWF0c1tpXTsNCi0JCQlicmVhazsNCi0JCX0NCi0JfQ0KLQkvKiBTdGVw IDI6IFdlIGNhbiBjb250aW51ZSB3aXRoIHRoaXMgUkFXIGZvcm1hdCwgb3Igd2UgY2FuIGxvb2sN Ci0JICogZm9yIGJldHRlcjogbWF5YmUgc2Vuc29yIHN1cHBvcnRzIGRpcmVjdGx5IHdoYXQgd2Ug bmVlZC4NCi0JICovDQotCWRpcmVjdF9mbXQgPSBmaW5kX2Zvcm1hdF9ieV9mb3VyY2MoaXNjLCBw aXhmbXQtPnBpeGVsZm9ybWF0KTsNCi0NCi0JLyogU3RlcCAzOiBXZSBoYXZlIGJvdGguIFdlIGRl Y2lkZSBnaXZlbiB0aGUgbW9kdWxlIHBhcmFtZXRlciB3aGljaA0KLQkgKiBvbmUgdG8gdXNlLg0K LQkgKi8NCi0JaWYgKGRpcmVjdF9mbXQgJiYgc2RfZm10ICYmIHNlbnNvcl9wcmVmZXJyZWQpDQot CQlzZF9mbXQgPSBkaXJlY3RfZm10Ow0KLQ0KLQkvKiBTdGVwIDQ6IHdlIGRvIG5vdCBoYXZlIFJB VyBidXQgd2UgaGF2ZSBhIGRpcmVjdCBmb3JtYXQuIFVzZSBpdC4gKi8NCi0JaWYgKGRpcmVjdF9m bXQgJiYgIXNkX2ZtdCkNCi0JCXNkX2ZtdCA9IGRpcmVjdF9mbXQ7DQotDQotCS8qIFN0ZXAgNTog aWYgd2UgYXJlIHVzaW5nIGEgZGlyZWN0IGZvcm1hdCwgd2UgbmVlZCB0byBwYWNrYWdlDQotCSAq IGV2ZXJ5dGhpbmcgYXMgOCBiaXQgZGF0YSBhbmQganVzdCBkdW1wIGl0DQotCSAqLw0KLQlpZiAo c2RfZm10ID09IGRpcmVjdF9mbXQpDQotCQlybHBfZG1hX2RpcmVjdF9kdW1wID0gdHJ1ZTsNCi0N Ci0JLyogU3RlcCA2OiBXZSBoYXZlIG5vIGZvcm1hdC4gVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSB1 c2Vyc3BhY2UNCi0JICogcmVxdWVzdHMgc29tZSB3ZWlyZC9pbnZhbGlkIGZvcm1hdC4NCi0JICog SW4gdGhpcyBjYXNlLCBkZWZhdWx0IHRvIHdoYXRldmVyIHdlIGhhdmUNCi0JICovDQotCWlmICgh c2RfZm10ICYmICFkaXJlY3RfZm10KSB7DQotCQlzZF9mbXQgPSBpc2MtPnVzZXJfZm9ybWF0c1tp c2MtPm51bV91c2VyX2Zvcm1hdHMgLSAxXTsNCi0JCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52 NGwyX2RldiwNCi0JCQkgIlNlbnNvciBub3Qgc3VwcG9ydGluZyAlLjRzLCB1c2luZyAlLjRzXG4i LA0KLQkJCSAoY2hhciAqKSZwaXhmbXQtPnBpeGVsZm9ybWF0LCAoY2hhciAqKSZzZF9mbXQtPmZv dXJjYyk7DQotCX0NCi0NCi0JaWYgKCFzZF9mbXQpIHsNCi0JCXJldCA9IC1FSU5WQUw7DQotCQln b3RvIGlzY190cnlfZm10X2VycjsNCi0JfQ0KLQ0KLQkvKiBTdGVwIDc6IFByaW50IG91dCB3aGF0 IHdlIGRlY2lkZWQgZm9yIGRlYnVnZ2luZyAqLw0KLQl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+ djRsMl9kZXYsDQotCQkgIlByZWZlcnJpbmcgdG8gaGF2ZSBzZW5zb3IgdXNpbmcgZm9ybWF0ICUu NHNcbiIsDQotCQkgKGNoYXIgKikmc2RfZm10LT5mb3VyY2MpOw0KLQ0KLQkvKiBTdGVwIDg6IGF0 IHRoaXMgbW9tZW50IHdlIGRlY2lkZWQgd2hpY2ggZm9ybWF0IHRoZSBzdWJkZXYgd2lsbCB1c2Ug Ki8NCi0JaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdCA9IHNkX2ZtdDsNCi0NCi0JLyogTGltaXQg dG8gQXRtZWwgSVNDIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAqLw0KLQlpZiAocGl4Zm10LT53aWR0 aCA+IElTQ19NQVhfU1VQUE9SVF9XSURUSCkNCi0JCXBpeGZtdC0+d2lkdGggPSBJU0NfTUFYX1NV UFBPUlRfV0lEVEg7DQotCWlmIChwaXhmbXQtPmhlaWdodCA+IElTQ19NQVhfU1VQUE9SVF9IRUlH SFQpDQotCQlwaXhmbXQtPmhlaWdodCA9IElTQ19NQVhfU1VQUE9SVF9IRUlHSFQ7DQotDQotCS8q DQotCSAqIFRoZSBtYnVzIGZvcm1hdCBpcyB0aGUgb25lIHRoZSBzdWJkZXYgb3V0cHV0cy4NCi0J ICogVGhlIHBpeGVscyB3aWxsIGJlIHRyYW5zZmVycmVkIGluIHRoaXMgZm9ybWF0IFNlbnNvciAt PiBJU0MNCi0JICovDQotCW1idXNfY29kZSA9IHNkX2ZtdC0+bWJ1c19jb2RlOw0KLQ0KLQkvKg0K LQkgKiBWYWxpZGF0ZSBmb3JtYXRzLiBJZiB0aGUgcmVxdWlyZWQgZm9ybWF0IGlzIG5vdCBPSywg ZGVmYXVsdCB0byByYXcuDQotCSAqLw0KLQ0KLQlpc2MtPnRyeV9jb25maWcuZm91cmNjID0gcGl4 Zm10LT5waXhlbGZvcm1hdDsNCi0NCi0JaWYgKGlzY190cnlfdmFsaWRhdGVfZm9ybWF0cyhpc2Mp KSB7DQotCQlwaXhmbXQtPnBpeGVsZm9ybWF0ID0gaXNjLT50cnlfY29uZmlnLmZvdXJjYyA9IHNk X2ZtdC0+Zm91cmNjOw0KLQkJLyogUmUtdHJ5IHRvIHZhbGlkYXRlIHRoZSBuZXcgZm9ybWF0ICov DQotCQlyZXQgPSBpc2NfdHJ5X3ZhbGlkYXRlX2Zvcm1hdHMoaXNjKTsNCi0JCWlmIChyZXQpDQot CQkJZ290byBpc2NfdHJ5X2ZtdF9lcnI7DQotCX0NCi0NCi0JcmV0ID0gaXNjX3RyeV9jb25maWd1 cmVfcmxwX2RtYShpc2MsIHJscF9kbWFfZGlyZWN0X2R1bXApOw0KLQlpZiAocmV0KQ0KLQkJZ290 byBpc2NfdHJ5X2ZtdF9lcnI7DQotDQotCXJldCA9IGlzY190cnlfY29uZmlndXJlX3BpcGVsaW5l KGlzYyk7DQotCWlmIChyZXQpDQotCQlnb3RvIGlzY190cnlfZm10X2VycjsNCi0NCi0JdjRsMl9m aWxsX21idXNfZm9ybWF0KCZmb3JtYXQuZm9ybWF0LCBwaXhmbXQsIG1idXNfY29kZSk7DQotCXJl dCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHBhZCwgc2V0X2Zt dCwNCi0JCQkgICAgICAgJnBhZF9jZmcsICZmb3JtYXQpOw0KLQlpZiAocmV0IDwgMCkNCi0JCWdv dG8gaXNjX3RyeV9mbXRfc3ViZGV2X2VycjsNCi0NCi0JdjRsMl9maWxsX3BpeF9mb3JtYXQocGl4 Zm10LCAmZm9ybWF0LmZvcm1hdCk7DQotDQotCXBpeGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05P TkU7DQotCXBpeGZtdC0+Ynl0ZXNwZXJsaW5lID0gKHBpeGZtdC0+d2lkdGggKiBpc2MtPnRyeV9j b25maWcuYnBwKSA+PiAzOw0KLQlwaXhmbXQtPnNpemVpbWFnZSA9IHBpeGZtdC0+Ynl0ZXNwZXJs aW5lICogcGl4Zm10LT5oZWlnaHQ7DQotDQotCWlmIChjb2RlKQ0KLQkJKmNvZGUgPSBtYnVzX2Nv ZGU7DQotDQotCXJldHVybiAwOw0KLQ0KLWlzY190cnlfZm10X2VycjoNCi0JdjRsMl9lcnIoJmlz Yy0+djRsMl9kZXYsICJDb3VsZCBub3QgZmluZCBhbnkgcG9zc2libGUgZm9ybWF0IGZvciBhIHdv cmtpbmcgcGlwZWxpbmVcbiIpOw0KLWlzY190cnlfZm10X3N1YmRldl9lcnI6DQotCW1lbXNldCgm aXNjLT50cnlfY29uZmlnLCAwLCBzaXplb2YoaXNjLT50cnlfY29uZmlnKSk7DQotDQotCXJldHVy biByZXQ7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3NldF9mbXQoc3RydWN0IGlzY19kZXZpY2Ug KmlzYywgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KLXsNCi0Jc3RydWN0IHY0bDJfc3ViZGV2X2Zv cm1hdCBmb3JtYXQgPSB7DQotCQkud2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0K LQl9Ow0KLQl1MzIgbWJ1c19jb2RlID0gMDsNCi0JaW50IHJldDsNCi0NCi0JcmV0ID0gaXNjX3Ry eV9mbXQoaXNjLCBmLCAmbWJ1c19jb2RlKTsNCi0JaWYgKHJldCkNCi0JCXJldHVybiByZXQ7DQot DQotCXY0bDJfZmlsbF9tYnVzX2Zvcm1hdCgmZm9ybWF0LmZvcm1hdCwgJmYtPmZtdC5waXgsIG1i dXNfY29kZSk7DQotCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+ c2QsIHBhZCwNCi0JCQkgICAgICAgc2V0X2ZtdCwgTlVMTCwgJmZvcm1hdCk7DQotCWlmIChyZXQg PCAwKQ0KLQkJcmV0dXJuIHJldDsNCi0NCi0JaXNjLT5mbXQgPSAqZjsNCi0NCi0JaWYgKGlzYy0+ dHJ5X2NvbmZpZy5zZF9mb3JtYXQgJiYgaXNjLT5jb25maWcuc2RfZm9ybWF0ICYmDQotCSAgICBp c2MtPnRyeV9jb25maWcuc2RfZm9ybWF0ICE9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdCkgew0KLQkJ aXNjLT5jdHJscy5oaXN0X3N0YXQgPSBISVNUX0lOSVQ7DQotCQlpc2NfcmVzZXRfYXdiX2N0cmxz KGlzYyk7DQotCX0NCi0JLyogbWFrZSB0aGUgdHJ5IGNvbmZpZ3VyYXRpb24gYWN0aXZlICovDQot CWlzYy0+Y29uZmlnID0gaXNjLT50cnlfY29uZmlnOw0KLQ0KLQl2NGwyX2RiZygxLCBkZWJ1Zywg JmlzYy0+djRsMl9kZXYsICJOZXcgSVNDIGNvbmZpZ3VyYXRpb24gaW4gcGxhY2VcbiIpOw0KLQ0K LQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3Qg ZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYp DQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCi0N Ci0JaWYgKHZiMl9pc19zdHJlYW1pbmcoJmlzYy0+dmIyX3ZpZHEpKQ0KLQkJcmV0dXJuIC1FQlVT WTsNCi0NCi0JcmV0dXJuIGlzY19zZXRfZm10KGlzYywgZik7DQotfQ0KLQ0KLXN0YXRpYyBpbnQg aXNjX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCi0JCQkJ c3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZp ZGVvX2RydmRhdGEoZmlsZSk7DQotDQotCXJldHVybiBpc2NfdHJ5X2ZtdChpc2MsIGYsIE5VTEwp Ow0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2 b2lkICpwcml2LA0KLQkJCSAgIHN0cnVjdCB2NGwyX2lucHV0ICppbnApDQotew0KLQlpZiAoaW5w LT5pbmRleCAhPSAwKQ0KLQkJcmV0dXJuIC1FSU5WQUw7DQotDQotCWlucC0+dHlwZSA9IFY0TDJf SU5QVVRfVFlQRV9DQU1FUkE7DQotCWlucC0+c3RkID0gMDsNCi0Jc3Ryc2NweShpbnAtPm5hbWUs ICJDYW1lcmEiLCBzaXplb2YoaW5wLT5uYW1lKSk7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1z dGF0aWMgaW50IGlzY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNp Z25lZCBpbnQgKmkpDQotew0KLQkqaSA9IDA7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0 aWMgaW50IGlzY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25l ZCBpbnQgaSkNCi17DQotCWlmIChpID4gMCkNCi0JCXJldHVybiAtRUlOVkFMOw0KLQ0KLQlyZXR1 cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2NfZ19wYXJtKHN0cnVjdCBmaWxlICpmaWxlLCB2 b2lkICpmaCwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqYSkNCi17DQotCXN0cnVjdCBpc2NfZGV2 aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQ0KLQlyZXR1cm4gdjRsMl9nX3Bhcm1f Y2FwKHZpZGVvX2RldmRhdGEoZmlsZSksIGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBhKTsNCi19 DQotDQotc3RhdGljIGludCBpc2Nfc19wYXJtKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwg c3RydWN0IHY0bDJfc3RyZWFtcGFybSAqYSkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2Mg PSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQ0KLQlyZXR1cm4gdjRsMl9zX3Bhcm1fY2FwKHZpZGVv X2RldmRhdGEoZmlsZSksIGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBhKTsNCi19DQotDQotc3Rh dGljIGludCBpc2NfZW51bV9mcmFtZXNpemVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwN Ci0JCQkgICAgICAgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0gKmZzaXplKQ0KLXsNCi0Jc3RydWN0 IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQotCXN0cnVjdCB2NGwyX3N1 YmRldl9mcmFtZV9zaXplX2VudW0gZnNlID0gew0KLQkJLmluZGV4ID0gZnNpemUtPmluZGV4LA0K LQkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCi0JfTsNCi0JaW50IHJldCA9 IC1FSU5WQUw7DQotCWludCBpOw0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgaXNjLT5udW1fdXNlcl9m b3JtYXRzOyBpKyspDQotCQlpZiAoaXNjLT51c2VyX2Zvcm1hdHNbaV0tPmZvdXJjYyA9PSBmc2l6 ZS0+cGl4ZWxfZm9ybWF0KQ0KLQkJCXJldCA9IDA7DQotDQotCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGNvbnRyb2xsZXJfZm9ybWF0cyk7IGkrKykNCi0JCWlmIChjb250cm9sbGVyX2Zvcm1h dHNbaV0uZm91cmNjID09IGZzaXplLT5waXhlbF9mb3JtYXQpDQotCQkJcmV0ID0gMDsNCi0NCi0J aWYgKHJldCkNCi0JCXJldHVybiByZXQ7DQotDQotCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNj LT5jdXJyZW50X3N1YmRldi0+c2QsIHBhZCwgZW51bV9mcmFtZV9zaXplLA0KLQkJCSAgICAgICBO VUxMLCAmZnNlKTsNCi0JaWYgKHJldCkNCi0JCXJldHVybiByZXQ7DQotDQotCWZzZS5jb2RlID0g aXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGU7DQotDQotCWZzaXplLT50eXBlID0gVjRM Ml9GUk1TSVpFX1RZUEVfRElTQ1JFVEU7DQotCWZzaXplLT5kaXNjcmV0ZS53aWR0aCA9IGZzZS5t YXhfd2lkdGg7DQotCWZzaXplLT5kaXNjcmV0ZS5oZWlnaHQgPSBmc2UubWF4X2hlaWdodDsNCi0N Ci0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2VudW1fZnJhbWVpbnRlcnZhbHMo c3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLA0KLQkJCQkgICAgc3RydWN0IHY0bDJfZnJtaXZh bGVudW0gKmZpdmFsKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRh dGEoZmlsZSk7DQotCXN0cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9pbnRlcnZhbF9lbnVtIGZpZSA9 IHsNCi0JCS5pbmRleCA9IGZpdmFsLT5pbmRleCwNCi0JCS53aWR0aCA9IGZpdmFsLT53aWR0aCwN Ci0JCS5oZWlnaHQgPSBmaXZhbC0+aGVpZ2h0LA0KLQkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9S TUFUX0FDVElWRSwNCi0JfTsNCi0JaW50IHJldCA9IC1FSU5WQUw7DQotCWludCBpOw0KLQ0KLQlm b3IgKGkgPSAwOyBpIDwgaXNjLT5udW1fdXNlcl9mb3JtYXRzOyBpKyspDQotCQlpZiAoaXNjLT51 c2VyX2Zvcm1hdHNbaV0tPmZvdXJjYyA9PSBmaXZhbC0+cGl4ZWxfZm9ybWF0KQ0KLQkJCXJldCA9 IDA7DQotDQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbnRyb2xsZXJfZm9ybWF0cyk7 IGkrKykNCi0JCWlmIChjb250cm9sbGVyX2Zvcm1hdHNbaV0uZm91cmNjID09IGZpdmFsLT5waXhl bF9mb3JtYXQpDQotCQkJcmV0ID0gMDsNCi0NCi0JaWYgKHJldCkNCi0JCXJldHVybiByZXQ7DQot DQotCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHBhZCwN Ci0JCQkgICAgICAgZW51bV9mcmFtZV9pbnRlcnZhbCwgTlVMTCwgJmZpZSk7DQotCWlmIChyZXQp DQotCQlyZXR1cm4gcmV0Ow0KLQ0KLQlmaWUuY29kZSA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+ bWJ1c19jb2RlOw0KLQlmaXZhbC0+dHlwZSA9IFY0TDJfRlJNSVZBTF9UWVBFX0RJU0NSRVRFOw0K LQlmaXZhbC0+ZGlzY3JldGUgPSBmaWUuaW50ZXJ2YWw7DQotDQotCXJldHVybiAwOw0KLX0NCi0N Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIGlzY19pb2N0bF9vcHMgPSB7DQot CS52aWRpb2NfcXVlcnljYXAJCT0gaXNjX3F1ZXJ5Y2FwLA0KLQkudmlkaW9jX2VudW1fZm10X3Zp ZF9jYXAJPSBpc2NfZW51bV9mbXRfdmlkX2NhcCwNCi0JLnZpZGlvY19nX2ZtdF92aWRfY2FwCQk9 IGlzY19nX2ZtdF92aWRfY2FwLA0KLQkudmlkaW9jX3NfZm10X3ZpZF9jYXAJCT0gaXNjX3NfZm10 X3ZpZF9jYXAsDQotCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwCQk9IGlzY190cnlfZm10X3ZpZF9j YXAsDQotDQotCS52aWRpb2NfZW51bV9pbnB1dAkJPSBpc2NfZW51bV9pbnB1dCwNCi0JLnZpZGlv Y19nX2lucHV0CQkJPSBpc2NfZ19pbnB1dCwNCi0JLnZpZGlvY19zX2lucHV0CQkJPSBpc2Nfc19p bnB1dCwNCi0NCi0JLnZpZGlvY19yZXFidWZzCQkJPSB2YjJfaW9jdGxfcmVxYnVmcywNCi0JLnZp ZGlvY19xdWVyeWJ1ZgkJPSB2YjJfaW9jdGxfcXVlcnlidWYsDQotCS52aWRpb2NfcWJ1ZgkJCT0g dmIyX2lvY3RsX3FidWYsDQotCS52aWRpb2NfZXhwYnVmCQkJPSB2YjJfaW9jdGxfZXhwYnVmLA0K LQkudmlkaW9jX2RxYnVmCQkJPSB2YjJfaW9jdGxfZHFidWYsDQotCS52aWRpb2NfY3JlYXRlX2J1 ZnMJCT0gdmIyX2lvY3RsX2NyZWF0ZV9idWZzLA0KLQkudmlkaW9jX3ByZXBhcmVfYnVmCQk9IHZi Ml9pb2N0bF9wcmVwYXJlX2J1ZiwNCi0JLnZpZGlvY19zdHJlYW1vbgkJPSB2YjJfaW9jdGxfc3Ry ZWFtb24sDQotCS52aWRpb2Nfc3RyZWFtb2ZmCQk9IHZiMl9pb2N0bF9zdHJlYW1vZmYsDQotDQot CS52aWRpb2NfZ19wYXJtCQkJPSBpc2NfZ19wYXJtLA0KLQkudmlkaW9jX3NfcGFybQkJCT0gaXNj X3NfcGFybSwNCi0JLnZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMJCT0gaXNjX2VudW1fZnJhbWVzaXpl cywNCi0JLnZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzCT0gaXNjX2VudW1fZnJhbWVpbnRlcnZh bHMsDQotDQotCS52aWRpb2NfbG9nX3N0YXR1cwkJPSB2NGwyX2N0cmxfbG9nX3N0YXR1cywNCi0J LnZpZGlvY19zdWJzY3JpYmVfZXZlbnQJCT0gdjRsMl9jdHJsX3N1YnNjcmliZV9ldmVudCwNCi0J LnZpZGlvY191bnN1YnNjcmliZV9ldmVudAk9IHY0bDJfZXZlbnRfdW5zdWJzY3JpYmUsDQotfTsN Ci0NCi1zdGF0aWMgaW50IGlzY19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQ0KLXsNCi0Jc3RydWN0 IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQotCXN0cnVjdCB2NGwyX3N1 YmRldiAqc2QgPSBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZDsNCi0JaW50IHJldDsNCi0NCi0JaWYg KG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaXNjLT5sb2NrKSkNCi0JCXJldHVybiAtRVJFU1RB UlRTWVM7DQotDQotCXJldCA9IHY0bDJfZmhfb3BlbihmaWxlKTsNCi0JaWYgKHJldCA8IDApDQot CQlnb3RvIHVubG9jazsNCi0NCi0JaWYgKCF2NGwyX2ZoX2lzX3Npbmd1bGFyX2ZpbGUoZmlsZSkp DQotCQlnb3RvIHVubG9jazsNCi0NCi0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwg c19wb3dlciwgMSk7DQotCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRU5PSU9DVExDTUQpIHsNCi0J CXY0bDJfZmhfcmVsZWFzZShmaWxlKTsNCi0JCWdvdG8gdW5sb2NrOw0KLQl9DQotDQotCXJldCA9 IGlzY19zZXRfZm10KGlzYywgJmlzYy0+Zm10KTsNCi0JaWYgKHJldCkgew0KLQkJdjRsMl9zdWJk ZXZfY2FsbChzZCwgY29yZSwgc19wb3dlciwgMCk7DQotCQl2NGwyX2ZoX3JlbGVhc2UoZmlsZSk7 DQotCX0NCi0NCi11bmxvY2s6DQotCW11dGV4X3VubG9jaygmaXNjLT5sb2NrKTsNCi0JcmV0dXJu IHJldDsNCi19DQotDQotc3RhdGljIGludCBpc2NfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkN Ci17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQlz dHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaXNjLT5jdXJyZW50X3N1YmRldi0+c2Q7DQotCWJvb2wg Zmhfc2luZ3VsYXI7DQotCWludCByZXQ7DQotDQotCW11dGV4X2xvY2soJmlzYy0+bG9jayk7DQot DQotCWZoX3Npbmd1bGFyID0gdjRsMl9maF9pc19zaW5ndWxhcl9maWxlKGZpbGUpOw0KLQ0KLQly ZXQgPSBfdmIyX2ZvcF9yZWxlYXNlKGZpbGUsIE5VTEwpOw0KLQ0KLQlpZiAoZmhfc2luZ3VsYXIp DQotCQl2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX3Bvd2VyLCAwKTsNCi0NCi0JbXV0ZXhf dW5sb2NrKCZpc2MtPmxvY2spOw0KLQ0KLQlyZXR1cm4gcmV0Ow0KLX0NCi0NCi1zdGF0aWMgY29u c3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGlzY19mb3BzID0gew0KLQkub3duZXIJCT0g VEhJU19NT0RVTEUsDQotCS5vcGVuCQk9IGlzY19vcGVuLA0KLQkucmVsZWFzZQk9IGlzY19yZWxl YXNlLA0KLQkudW5sb2NrZWRfaW9jdGwJPSB2aWRlb19pb2N0bDIsDQotCS5yZWFkCQk9IHZiMl9m b3BfcmVhZCwNCi0JLm1tYXAJCT0gdmIyX2ZvcF9tbWFwLA0KLQkucG9sbAkJPSB2YjJfZm9wX3Bv bGwsDQotfTsNCi0NCi1zdGF0aWMgaXJxcmV0dXJuX3QgaXNjX2ludGVycnVwdChpbnQgaXJxLCB2 b2lkICpkZXZfaWQpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gKHN0cnVjdCBpc2Nf ZGV2aWNlICopZGV2X2lkOw0KLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsN Ci0JdTMyIGlzY19pbnRzciwgaXNjX2ludG1hc2ssIHBlbmRpbmc7DQotCWlycXJldHVybl90IHJl dCA9IElSUV9OT05FOw0KLQ0KLQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19JTlRTUiwgJmlzY19p bnRzcik7DQotCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0lOVE1BU0ssICZpc2NfaW50bWFzayk7 DQotDQotCXBlbmRpbmcgPSBpc2NfaW50c3IgJiBpc2NfaW50bWFzazsNCi0NCi0JaWYgKGxpa2Vs eShwZW5kaW5nICYgSVNDX0lOVF9ERE9ORSkpIHsNCi0JCXNwaW5fbG9jaygmaXNjLT5kbWFfcXVl dWVfbG9jayk7DQotCQlpZiAoaXNjLT5jdXJfZnJtKSB7DQotCQkJc3RydWN0IHZiMl92NGwyX2J1 ZmZlciAqdmJ1ZiA9ICZpc2MtPmN1cl9mcm0tPnZiOw0KLQkJCXN0cnVjdCB2YjJfYnVmZmVyICp2 YiA9ICZ2YnVmLT52YjJfYnVmOw0KLQ0KLQkJCXZiLT50aW1lc3RhbXAgPSBrdGltZV9nZXRfbnMo KTsNCi0JCQl2YnVmLT5zZXF1ZW5jZSA9IGlzYy0+c2VxdWVuY2UrKzsNCi0JCQl2YjJfYnVmZmVy X2RvbmUodmIsIFZCMl9CVUZfU1RBVEVfRE9ORSk7DQotCQkJaXNjLT5jdXJfZnJtID0gTlVMTDsN Ci0JCX0NCi0NCi0JCWlmICghbGlzdF9lbXB0eSgmaXNjLT5kbWFfcXVldWUpICYmICFpc2MtPnN0 b3ApIHsNCi0JCQlpc2MtPmN1cl9mcm0gPSBsaXN0X2ZpcnN0X2VudHJ5KCZpc2MtPmRtYV9xdWV1 ZSwNCi0JCQkJCQkgICAgIHN0cnVjdCBpc2NfYnVmZmVyLCBsaXN0KTsNCi0JCQlsaXN0X2RlbCgm aXNjLT5jdXJfZnJtLT5saXN0KTsNCi0NCi0JCQlpc2Nfc3RhcnRfZG1hKGlzYyk7DQotCQl9DQot DQotCQlpZiAoaXNjLT5zdG9wKQ0KLQkJCWNvbXBsZXRlKCZpc2MtPmNvbXApOw0KLQ0KLQkJcmV0 ID0gSVJRX0hBTkRMRUQ7DQotCQlzcGluX3VubG9jaygmaXNjLT5kbWFfcXVldWVfbG9jayk7DQot CX0NCi0NCi0JaWYgKHBlbmRpbmcgJiBJU0NfSU5UX0hJU0RPTkUpIHsNCi0JCXNjaGVkdWxlX3dv cmsoJmlzYy0+YXdiX3dvcmspOw0KLQkJcmV0ID0gSVJRX0hBTkRMRUQ7DQotCX0NCi0NCi0JcmV0 dXJuIHJldDsNCi19DQotDQotc3RhdGljIHZvaWQgaXNjX2hpc3RfY291bnQoc3RydWN0IGlzY19k ZXZpY2UgKmlzYywgdTMyICptaW4sIHUzMiAqbWF4KQ0KLXsNCi0Jc3RydWN0IHJlZ21hcCAqcmVn bWFwID0gaXNjLT5yZWdtYXA7DQotCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3Ry bHM7DQotCXUzMiAqaGlzdF9jb3VudCA9ICZjdHJscy0+aGlzdF9jb3VudFtjdHJscy0+aGlzdF9p ZF07DQotCXUzMiAqaGlzdF9lbnRyeSA9ICZjdHJscy0+aGlzdF9lbnRyeVswXTsNCi0JdTMyIGk7 DQotDQotCSptaW4gPSAwOw0KLQkqbWF4ID0gSElTVF9FTlRSSUVTOw0KLQ0KLQlyZWdtYXBfYnVs a19yZWFkKHJlZ21hcCwgSVNDX0hJU19FTlRSWSwgaGlzdF9lbnRyeSwgSElTVF9FTlRSSUVTKTsN Ci0NCi0JKmhpc3RfY291bnQgPSAwOw0KLQkvKg0KLQkgKiB3ZSBkZWxpYmVyYXRlbHkgaWdub3Jl IHRoZSBlbmQgb2YgdGhlIGhpc3RvZ3JhbSwNCi0JICogdGhlIG1vc3Qgd2hpdGUgcGl4ZWxzDQot CSAqLw0KLQlmb3IgKGkgPSAxOyBpIDwgSElTVF9FTlRSSUVTOyBpKyspIHsNCi0JCWlmICgqaGlz dF9lbnRyeSAmJiAhKm1pbikNCi0JCQkqbWluID0gaTsNCi0JCWlmICgqaGlzdF9lbnRyeSkNCi0J CQkqbWF4ID0gaTsNCi0JCSpoaXN0X2NvdW50ICs9IGkgKiAoKmhpc3RfZW50cnkrKyk7DQotCX0N Ci0NCi0JaWYgKCEqbWluKQ0KLQkJKm1pbiA9IDE7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY193 Yl91cGRhdGUoc3RydWN0IGlzY19jdHJscyAqY3RybHMpDQotew0KLQl1MzIgKmhpc3RfY291bnQg PSAmY3RybHMtPmhpc3RfY291bnRbMF07DQotCXUzMiBjLCBvZmZzZXRbNF07DQotCXU2NCBhdmcg PSAwOw0KLQkvKiBXZSBjb21wdXRlIHR3byBnYWlucywgc3RyZXRjaCBnYWluIGFuZCBncmV5IHdv cmxkIGdhaW4gKi8NCi0JdTMyIHNfZ2Fpbls0XSwgZ3dfZ2Fpbls0XTsNCi0NCi0JLyoNCi0JICog QWNjb3JkaW5nIHRvIEdyZXkgV29ybGQsIHdlIG5lZWQgdG8gc2V0IGdhaW5zIGZvciBSL0IgdG8g bm9ybWFsaXplDQotCSAqIHRoZW0gdG93YXJkcyB0aGUgZ3JlZW4gY2hhbm5lbC4NCi0JICogVGh1 cyB3ZSB3YW50IHRvIGtlZXAgR3JlZW4gYXMgZml4ZWQgYW5kIGFkanVzdCBvbmx5IFJlZC9CbHVl DQotCSAqIENvbXB1dGUgdGhlIGF2ZXJhZ2Ugb2YgdGhlIGJvdGggZ3JlZW4gY2hhbm5lbHMgZmly c3QNCi0JICovDQotCWF2ZyA9ICh1NjQpaGlzdF9jb3VudFtJU0NfSElTX0NGR19NT0RFX0dSXSAr DQotCQkodTY0KWhpc3RfY291bnRbSVNDX0hJU19DRkdfTU9ERV9HQl07DQotCWF2ZyA+Pj0gMTsN Ci0NCi0JLyogR3JlZW4gaGlzdG9ncmFtIGlzIG51bGwsIG5vdGhpbmcgdG8gZG8gKi8NCi0JaWYg KCFhdmcpDQotCQlyZXR1cm47DQotDQotCWZvciAoYyA9IElTQ19ISVNfQ0ZHX01PREVfR1I7IGMg PD0gSVNDX0hJU19DRkdfTU9ERV9COyBjKyspIHsNCi0JCS8qDQotCQkgKiB0aGUgY29sb3Igb2Zm c2V0IGlzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBoaXN0b2dyYW0uDQotCQkgKiB3ZSBzdHJl dGNoIHRoaXMgY29sb3IgdG8gdGhlIGZ1bGwgcmFuZ2UgYnkgc3Vic3RyYWN0aW5nDQotCQkgKiB0 aGlzIHZhbHVlIGZyb20gdGhlIGNvbG9yIGNvbXBvbmVudC4NCi0JCSAqLw0KLQkJb2Zmc2V0W2Nd ID0gY3RybHMtPmhpc3RfbWlubWF4W2NdW0hJU1RfTUlOX0lOREVYXTsNCi0JCS8qDQotCQkgKiBU aGUgb2Zmc2V0IGlzIGFsd2F5cyBhdCBsZWFzdCAxLiBJZiB0aGUgb2Zmc2V0IGlzIDEsIHdlIGRv DQotCQkgKiBub3QgbmVlZCB0byBhZGp1c3QgaXQsIHNvIG91ciByZXN1bHQgbXVzdCBiZSB6ZXJv Lg0KLQkJICogdGhlIG9mZnNldCBpcyBjb21wdXRlZCBpbiBhIGhpc3RvZ3JhbSBvbiA5IGJpdHMg KDAuLjUxMikNCi0JCSAqIGJ1dCB0aGUgb2Zmc2V0IGluIHJlZ2lzdGVyIGlzIGJhc2VkIG9uDQot CQkgKiAxMiBiaXRzIHBpcGVsaW5lICgwLi40MDk2KS4NCi0JCSAqIHdlIG5lZWQgdG8gc2hpZnQg d2l0aCB0aGUgMyBiaXRzIHRoYXQgdGhlIGhpc3RvZ3JhbSBpcw0KLQkJICogaWdub3JpbmcNCi0J CSAqLw0KLQkJY3RybHMtPm9mZnNldFtjXSA9IChvZmZzZXRbY10gLSAxKSA8PCAzOw0KLQ0KLQkJ LyogdGhlIG9mZnNldCBpcyB0aGVuIHRha2VuIGFuZCBjb252ZXJ0ZWQgdG8gMidzIGNvbXBsZW1l bnRzICovDQotCQlpZiAoIWN0cmxzLT5vZmZzZXRbY10pDQotCQkJY3RybHMtPm9mZnNldFtjXSA9 IElTQ19XQl9PX1pFUk9fVkFMOw0KLQ0KLQkJLyoNCi0JCSAqIHRoZSBzdHJldGNoIGdhaW4gaXMg dGhlIHRvdGFsIG51bWJlciBvZiBoaXN0b2dyYW0gYmlucw0KLQkJICogZGl2aWRlZCBieSB0aGUg YWN0dWFsIHJhbmdlIG9mIGNvbG9yIGNvbXBvbmVudCAoTWF4IC0gTWluKQ0KLQkJICogSWYgd2Ug Y29tcHV0ZSBnYWluIGxpa2UgdGhpcywgdGhlIGFjdHVhbCBjb2xvciBjb21wb25lbnQNCi0JCSAq IHdpbGwgYmUgc3RyZXRjaGVkIHRvIHRoZSBmdWxsIGhpc3RvZ3JhbS4NCi0JCSAqIFdlIG5lZWQg dG8gc2hpZnQgOSBiaXRzIGZvciBwcmVjaXNpb24sIHdlIGhhdmUgOSBiaXRzIGZvcg0KLQkJICog ZGVjaW1hbHMNCi0JCSAqLw0KLQkJc19nYWluW2NdID0gKEhJU1RfRU5UUklFUyA8PCA5KSAvDQot CQkJKGN0cmxzLT5oaXN0X21pbm1heFtjXVtISVNUX01BWF9JTkRFWF0gLQ0KLQkJCWN0cmxzLT5o aXN0X21pbm1heFtjXVtISVNUX01JTl9JTkRFWF0gKyAxKTsNCi0NCi0JCS8qDQotCQkgKiBOb3cg d2UgaGF2ZSB0byBjb21wdXRlIHRoZSBnYWluIHcuci50LiB0aGUgYXZlcmFnZS4NCi0JCSAqIEFk ZC9sb3NlIGdhaW4gdG8gdGhlIGNvbXBvbmVudCB0b3dhcmRzIHRoZSBhdmVyYWdlLg0KLQkJICog SWYgaXQgaGFwcGVucyB0aGF0IHRoZSBjb21wb25lbnQgaXMgemVybywgdXNlIHRoZQ0KLQkJICog Zml4ZWQgcG9pbnQgdmFsdWUgOiAxLjAgZ2Fpbi4NCi0JCSAqLw0KLQkJaWYgKGhpc3RfY291bnRb Y10pDQotCQkJZ3dfZ2FpbltjXSA9IGRpdl91NjQoYXZnIDw8IDksIGhpc3RfY291bnRbY10pOw0K LQkJZWxzZQ0KLQkJCWd3X2dhaW5bY10gPSAxIDw8IDk7DQotDQotCQkvKiBtdWx0aXBseSBib3Ro IGdhaW5zIGFuZCBhZGp1c3QgZm9yIGRlY2ltYWxzICovDQotCQljdHJscy0+Z2FpbltjXSA9IHNf Z2FpbltjXSAqIGd3X2dhaW5bY107DQotCQljdHJscy0+Z2FpbltjXSA+Pj0gOTsNCi0JfQ0KLX0N Ci0NCi1zdGF0aWMgdm9pZCBpc2NfYXdiX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KQ0KLXsN Ci0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9DQotCQljb250YWluZXJfb2Yodywgc3RydWN0IGlz Y19kZXZpY2UsIGF3Yl93b3JrKTsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdt YXA7DQotCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQotCXUzMiBoaXN0 X2lkID0gY3RybHMtPmhpc3RfaWQ7DQotCXUzMiBiYXlzZWw7DQotCXVuc2lnbmVkIGxvbmcgZmxh Z3M7DQotCXUzMiBtaW4sIG1heDsNCi0NCi0JLyogc3RyZWFtaW5nIGlzIG5vdCBhY3RpdmUgYW55 bW9yZSAqLw0KLQlpZiAoaXNjLT5zdG9wKQ0KLQkJcmV0dXJuOw0KLQ0KLQlpZiAoY3RybHMtPmhp c3Rfc3RhdCAhPSBISVNUX0VOQUJMRUQpDQotCQlyZXR1cm47DQotDQotCWlzY19oaXN0X2NvdW50 KGlzYywgJm1pbiwgJm1heCk7DQotCWN0cmxzLT5oaXN0X21pbm1heFtoaXN0X2lkXVtISVNUX01J Tl9JTkRFWF0gPSBtaW47DQotCWN0cmxzLT5oaXN0X21pbm1heFtoaXN0X2lkXVtISVNUX01BWF9J TkRFWF0gPSBtYXg7DQotDQotCWlmIChoaXN0X2lkICE9IElTQ19ISVNfQ0ZHX01PREVfQikgew0K LQkJaGlzdF9pZCsrOw0KLQl9IGVsc2Ugew0KLQkJaXNjX3diX3VwZGF0ZShjdHJscyk7DQotCQlo aXN0X2lkID0gSVNDX0hJU19DRkdfTU9ERV9HUjsNCi0JfQ0KLQ0KLQljdHJscy0+aGlzdF9pZCA9 IGhpc3RfaWQ7DQotCWJheXNlbCA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+Y2ZhX2JheWNmZyA8 PCBJU0NfSElTX0NGR19CQVlTRUxfU0hJRlQ7DQotDQotCS8qIGlmIG5vIG1vcmUgYXV0byB3aGl0 ZSBiYWxhbmNlLCByZXNldCBjb250cm9scy4gKi8NCi0JaWYgKGN0cmxzLT5hd2IgPT0gSVNDX1dC X05PTkUpDQotCQlpc2NfcmVzZXRfYXdiX2N0cmxzKGlzYyk7DQotDQotCXBtX3J1bnRpbWVfZ2V0 X3N5bmMoaXNjLT5kZXYpOw0KLQ0KLQkvKg0KLQkgKiBvbmx5IHVwZGF0ZSBpZiB3ZSBoYXZlIGFs bCB0aGUgcmVxdWlyZWQgaGlzdG9ncmFtcyBhbmQgY29udHJvbHMNCi0JICogaWYgYXdiIGhhcyBi ZWVuIGRpc2FibGVkLCB3ZSBuZWVkIHRvIHJlc2V0IHJlZ2lzdGVycyBhcyB3ZWxsLg0KLQkgKi8N Ci0JaWYgKGhpc3RfaWQgPT0gSVNDX0hJU19DRkdfTU9ERV9HUiB8fCBjdHJscy0+YXdiID09IElT Q19XQl9OT05FKSB7DQotCQkvKg0KLQkJICogSXQgbWF5IGhhcHBlbiB0aGF0IERNQSBEb25lIElS USB3aWxsIHRyaWdnZXIgd2hpbGUgd2UgYXJlDQotCQkgKiB1cGRhdGluZyB3aGl0ZSBiYWxhbmNl IHJlZ2lzdGVycyBoZXJlLg0KLQkJICogSW4gdGhhdCBjYXNlLCBvbmx5IHBhcnRzIG9mIHRoZSBj b250cm9scyBoYXZlIGJlZW4gdXBkYXRlZC4NCi0JCSAqIFdlIGNhbiBhdm9pZCB0aGF0IGJ5IGxv Y2tpbmcgdGhlIHNlY3Rpb24uDQotCQkgKi8NCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpc2MtPmF3 Yl9sb2NrLCBmbGFncyk7DQotCQlpc2NfdXBkYXRlX2F3Yl9jdHJscyhpc2MpOw0KLQkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5hd2JfbG9jaywgZmxhZ3MpOw0KLQ0KLQkJLyoNCi0JCSAq IGlmIHdlIGFyZSBkb2luZyBqdXN0IHRoZSBvbmUgdGltZSB3aGl0ZSBiYWxhbmNlIGFkanVzdG1l bnQsDQotCQkgKiB3ZSBhcmUgYmFzaWNhbGx5IGRvbmUuDQotCQkgKi8NCi0JCWlmIChjdHJscy0+ YXdiID09IElTQ19XQl9PTkVUSU1FKSB7DQotCQkJdjRsMl9pbmZvKCZpc2MtPnY0bDJfZGV2LA0K LQkJCQkgICJDb21wbGV0ZWQgb25lIHRpbWUgd2hpdGUtYmFsYW5jZSBhZGp1c3RtZW50LlxuIik7 DQotCQkJY3RybHMtPmF3YiA9IElTQ19XQl9OT05FOw0KLQkJfQ0KLQl9DQotCXJlZ21hcF93cml0 ZShyZWdtYXAsIElTQ19ISVNfQ0ZHLCBoaXN0X2lkIHwgYmF5c2VsIHwgSVNDX0hJU19DRkdfUkFS KTsNCi0JaXNjX3VwZGF0ZV9wcm9maWxlKGlzYyk7DQotCS8qIGlmIGF3YiBoYXMgYmVlbiBkaXNh YmxlZCwgd2UgZG9uJ3QgbmVlZCB0byBzdGFydCBhbm90aGVyIGhpc3RvZ3JhbSAqLw0KLQlpZiAo Y3RybHMtPmF3YikNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJM X0hJU1JFUSk7DQotDQotCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNjLT5kZXYpOw0KLX0NCi0NCi1z dGF0aWMgaW50IGlzY19zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkNCi17DQotCXN0cnVj dCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwNCi0JCQkJCSAg ICAgc3RydWN0IGlzY19kZXZpY2UsIGN0cmxzLmhhbmRsZXIpOw0KLQlzdHJ1Y3QgaXNjX2N0cmxz ICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KLQ0KLQlpZiAoY3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxf RkxBR19JTkFDVElWRSkNCi0JCXJldHVybiAwOw0KLQ0KLQlzd2l0Y2ggKGN0cmwtPmlkKSB7DQot CWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoNCi0JCWN0cmxzLT5icmlnaHRuZXNzID0gY3RybC0+ dmFsICYgSVNDX0NCQ19CUklHSFRfTUFTSzsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfQ0lEX0NP TlRSQVNUOg0KLQkJY3RybHMtPmNvbnRyYXN0ID0gY3RybC0+dmFsICYgSVNDX0NCQ19DT05UUkFT VF9NQVNLOw0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9DSURfR0FNTUE6DQotCQljdHJscy0+Z2Ft bWFfaW5kZXggPSBjdHJsLT52YWw7DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX0NJRF9BVVRPX1dI SVRFX0JBTEFOQ0U6DQotCQlpZiAoY3RybC0+dmFsID09IDEpDQotCQkJY3RybHMtPmF3YiA9IElT Q19XQl9BVVRPOw0KLQkJZWxzZQ0KLQkJCWN0cmxzLT5hd2IgPSBJU0NfV0JfTk9ORTsNCi0NCi0J CS8qIHdlIGRpZCBub3QgY29uZmlndXJlIElTQyB5ZXQgKi8NCi0JCWlmICghaXNjLT5jb25maWcu c2RfZm9ybWF0KQ0KLQkJCWJyZWFrOw0KLQ0KLQkJaWYgKGN0cmxzLT5oaXN0X3N0YXQgIT0gSElT VF9FTkFCTEVEKQ0KLQkJCWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsNCi0NCi0JCWlmIChpc2Mt PmN0cmxzLmF3YiA9PSBJU0NfV0JfQVVUTyAmJg0KLQkJICAgIHZiMl9pc19zdHJlYW1pbmcoJmlz Yy0+dmIyX3ZpZHEpICYmDQotCQkgICAgSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT5jb25maWcuc2Rf Zm9ybWF0LT5tYnVzX2NvZGUpKQ0KLQkJCWlzY19zZXRfaGlzdG9ncmFtKGlzYywgdHJ1ZSk7DQot DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFOg0KLQkJLyogaWYg QVdCIGlzIGVuYWJsZWQsIGRvIG5vdGhpbmcgKi8NCi0JCWlmIChjdHJscy0+YXdiID09IElTQ19X Ql9BVVRPKQ0KLQkJCXJldHVybiAwOw0KLQ0KLQkJY3RybHMtPmF3YiA9IElTQ19XQl9PTkVUSU1F Ow0KLQkJaXNjX3NldF9oaXN0b2dyYW0oaXNjLCB0cnVlKTsNCi0JCXY0bDJfZGJnKDEsIGRlYnVn LCAmaXNjLT52NGwyX2RldiwNCi0JCQkgIk9uZSB0aW1lIHdoaXRlLWJhbGFuY2Ugc3RhcnRlZC5c biIpOw0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6DQotCQlyZXR1cm4gLUVJTlZBTDsNCi0JfQ0KLQ0K LQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzIGlz Y19jdHJsX29wcyA9IHsNCi0JLnNfY3RybAk9IGlzY19zX2N0cmwsDQotfTsNCi0NCi1zdGF0aWMg aW50IGlzY19jdHJsX2luaXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCWNvbnN0IHN0 cnVjdCB2NGwyX2N0cmxfb3BzICpvcHMgPSAmaXNjX2N0cmxfb3BzOw0KLQlzdHJ1Y3QgaXNjX2N0 cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KLQlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhk bCA9ICZjdHJscy0+aGFuZGxlcjsNCi0JaW50IHJldDsNCi0NCi0JY3RybHMtPmhpc3Rfc3RhdCA9 IEhJU1RfSU5JVDsNCi0JaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2MpOw0KLQ0KLQlyZXQgPSB2NGwy X2N0cmxfaGFuZGxlcl9pbml0KGhkbCwgNSk7DQotCWlmIChyZXQgPCAwKQ0KLQkJcmV0dXJuIHJl dDsNCi0NCi0JY3RybHMtPmJyaWdodG5lc3MgPSAwOw0KLQljdHJscy0+Y29udHJhc3QgPSAyNTY7 DQotDQotCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9CUklHSFRORVNTLCAt MTAyNCwgMTAyMywgMSwgMCk7DQotCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJ RF9DT05UUkFTVCwgLTIwNDgsIDIwNDcsIDEsIDI1Nik7DQotCXY0bDJfY3RybF9uZXdfc3RkKGhk bCwgb3BzLCBWNEwyX0NJRF9HQU1NQSwgMCwgR0FNTUFfTUFYLCAxLCAyKTsNCi0JdjRsMl9jdHJs X25ld19zdGQoaGRsLCBvcHMsIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSwgMCwgMSwgMSwg MSk7DQotDQotCS8qIGRvX3doaXRlX2JhbGFuY2UgaXMgYSBidXR0b24sIHNvIG1pbixtYXgsc3Rl cCxkZWZhdWx0IGFyZSBpZ25vcmVkICovDQotCWlzYy0+ZG9fd2JfY3RybCA9IHY0bDJfY3RybF9u ZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFLA0KLQkJCQkJICAgIDAs IDAsIDAsIDApOw0KLQ0KLQl2NGwyX2N0cmxfYWN0aXZhdGUoaXNjLT5kb193Yl9jdHJsLCBmYWxz ZSk7DQotDQotCXY0bDJfY3RybF9oYW5kbGVyX3NldHVwKGhkbCk7DQotDQotCXJldHVybiAwOw0K LX0NCi0NCi1zdGF0aWMgaW50IGlzY19hc3luY19ib3VuZChzdHJ1Y3QgdjRsMl9hc3luY19ub3Rp ZmllciAqbm90aWZpZXIsDQotCQkJICAgIHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LA0KLQkJ CSAgICBzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYgKmFzZCkNCi17DQotCXN0cnVjdCBpc2NfZGV2 aWNlICppc2MgPSBjb250YWluZXJfb2Yobm90aWZpZXItPnY0bDJfZGV2LA0KLQkJCQkJICAgICAg c3RydWN0IGlzY19kZXZpY2UsIHY0bDJfZGV2KTsNCi0Jc3RydWN0IGlzY19zdWJkZXZfZW50aXR5 ICpzdWJkZXZfZW50aXR5ID0NCi0JCWNvbnRhaW5lcl9vZihub3RpZmllciwgc3RydWN0IGlzY19z dWJkZXZfZW50aXR5LCBub3RpZmllcik7DQotDQotCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKCZp c2MtPnZpZGVvX2RldikpIHsNCi0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAib25seSBzdXBw b3J0cyBvbmUgc3ViLWRldmljZS5cbiIpOw0KLQkJcmV0dXJuIC1FQlVTWTsNCi0JfQ0KLQ0KLQlz dWJkZXZfZW50aXR5LT5zZCA9IHN1YmRldjsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRp YyB2b2lkIGlzY19hc3luY191bmJpbmQoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlm aWVyLA0KLQkJCSAgICAgIHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LA0KLQkJCSAgICAgIHN0 cnVjdCB2NGwyX2FzeW5jX3N1YmRldiAqYXNkKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlz YyA9IGNvbnRhaW5lcl9vZihub3RpZmllci0+djRsMl9kZXYsDQotCQkJCQkgICAgICBzdHJ1Y3Qg aXNjX2RldmljZSwgdjRsMl9kZXYpOw0KLQljYW5jZWxfd29ya19zeW5jKCZpc2MtPmF3Yl93b3Jr KTsNCi0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmlzYy0+dmlkZW9fZGV2KTsNCi0JdjRsMl9j dHJsX2hhbmRsZXJfZnJlZSgmaXNjLT5jdHJscy5oYW5kbGVyKTsNCi19DQotDQotc3RhdGljIHN0 cnVjdCBpc2NfZm9ybWF0ICpmaW5kX2Zvcm1hdF9ieV9jb2RlKHVuc2lnbmVkIGludCBjb2RlLCBp bnQgKmluZGV4KQ0KLXsNCi0Jc3RydWN0IGlzY19mb3JtYXQgKmZtdCA9ICZmb3JtYXRzX2xpc3Rb MF07DQotCXVuc2lnbmVkIGludCBpOw0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShm b3JtYXRzX2xpc3QpOyBpKyspIHsNCi0JCWlmIChmbXQtPm1idXNfY29kZSA9PSBjb2RlKSB7DQot CQkJKmluZGV4ID0gaTsNCi0JCQlyZXR1cm4gZm10Ow0KLQkJfQ0KLQ0KLQkJZm10Kys7DQotCX0N Ci0NCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2Zvcm1hdHNfaW5pdChz dHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0Jc3RydWN0IGlzY19mb3JtYXQgKmZtdDsNCi0J c3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYgPSBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZDsNCi0J dW5zaWduZWQgaW50IG51bV9mbXRzLCBpLCBqOw0KLQl1MzIgbGlzdF9zaXplID0gQVJSQVlfU0la RShmb3JtYXRzX2xpc3QpOw0KLQlzdHJ1Y3QgdjRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW0gbWJ1 c19jb2RlID0gew0KLQkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCi0JfTsN Ci0NCi0JbnVtX2ZtdHMgPSAwOw0KLQl3aGlsZSAoIXY0bDJfc3ViZGV2X2NhbGwoc3ViZGV2LCBw YWQsIGVudW1fbWJ1c19jb2RlLA0KLQkgICAgICAgTlVMTCwgJm1idXNfY29kZSkpIHsNCi0JCW1i dXNfY29kZS5pbmRleCsrOw0KLQ0KLQkJZm10ID0gZmluZF9mb3JtYXRfYnlfY29kZShtYnVzX2Nv ZGUuY29kZSwgJmkpOw0KLQkJaWYgKCFmbXQpIHsNCi0JCQl2NGwyX3dhcm4oJmlzYy0+djRsMl9k ZXYsICJNYnVzIGNvZGUgJXggbm90IHN1cHBvcnRlZFxuIiwNCi0JCQkJICBtYnVzX2NvZGUuY29k ZSk7DQotCQkJY29udGludWU7DQotCQl9DQotDQotCQlmbXQtPnNkX3N1cHBvcnQgPSB0cnVlOw0K LQkJbnVtX2ZtdHMrKzsNCi0JfQ0KLQ0KLQlpZiAoIW51bV9mbXRzKQ0KLQkJcmV0dXJuIC1FTlhJ TzsNCi0NCi0JaXNjLT5udW1fdXNlcl9mb3JtYXRzID0gbnVtX2ZtdHM7DQotCWlzYy0+dXNlcl9m b3JtYXRzID0gZGV2bV9rY2FsbG9jKGlzYy0+ZGV2LA0KLQkJCQkJIG51bV9mbXRzLCBzaXplb2Yo KmlzYy0+dXNlcl9mb3JtYXRzKSwNCi0JCQkJCSBHRlBfS0VSTkVMKTsNCi0JaWYgKCFpc2MtPnVz ZXJfZm9ybWF0cykNCi0JCXJldHVybiAtRU5PTUVNOw0KLQ0KLQlmbXQgPSAmZm9ybWF0c19saXN0 WzBdOw0KLQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGxpc3Rfc2l6ZTsgaSsrKSB7DQotCQlpZiAo Zm10LT5zZF9zdXBwb3J0KQ0KLQkJCWlzYy0+dXNlcl9mb3JtYXRzW2orK10gPSBmbXQ7DQotCQlm bXQrKzsNCi0JfQ0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2Nfc2V0X2Rl ZmF1bHRfZm10KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0KLQlzdHJ1Y3QgdjRsMl9mb3Jt YXQgZiA9IHsNCi0JCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLA0KLQkJLmZt dC5waXggPSB7DQotCQkJLndpZHRoCQk9IFZHQV9XSURUSCwNCi0JCQkuaGVpZ2h0CQk9IFZHQV9I RUlHSFQsDQotCQkJLmZpZWxkCQk9IFY0TDJfRklFTERfTk9ORSwNCi0JCQkucGl4ZWxmb3JtYXQJ PSBpc2MtPnVzZXJfZm9ybWF0c1swXS0+Zm91cmNjLA0KLQkJfSwNCi0JfTsNCi0JaW50IHJldDsN Ci0NCi0JcmV0ID0gaXNjX3RyeV9mbXQoaXNjLCAmZiwgTlVMTCk7DQotCWlmIChyZXQpDQotCQly ZXR1cm4gcmV0Ow0KLQ0KLQlpc2MtPmZtdCA9IGY7DQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0 aWMgaW50IGlzY19hc3luY19jb21wbGV0ZShzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAqbm90 aWZpZXIpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gY29udGFpbmVyX29mKG5vdGlm aWVyLT52NGwyX2RldiwNCi0JCQkJCSAgICAgIHN0cnVjdCBpc2NfZGV2aWNlLCB2NGwyX2Rldik7 DQotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSAmaXNjLT52aWRlb19kZXY7DQotCXN0cnVj dCB2YjJfcXVldWUgKnEgPSAmaXNjLT52YjJfdmlkcTsNCi0JaW50IHJldDsNCi0NCi0JSU5JVF9X T1JLKCZpc2MtPmF3Yl93b3JrLCBpc2NfYXdiX3dvcmspOw0KLQ0KLQlyZXQgPSB2NGwyX2Rldmlj ZV9yZWdpc3Rlcl9zdWJkZXZfbm9kZXMoJmlzYy0+djRsMl9kZXYpOw0KLQlpZiAocmV0IDwgMCkg ew0KLQkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3ViZGV2 IG5vZGVzXG4iKTsNCi0JCXJldHVybiByZXQ7DQotCX0NCi0NCi0JaXNjLT5jdXJyZW50X3N1YmRl diA9IGNvbnRhaW5lcl9vZihub3RpZmllciwNCi0JCQkJCSAgIHN0cnVjdCBpc2Nfc3ViZGV2X2Vu dGl0eSwgbm90aWZpZXIpOw0KLQltdXRleF9pbml0KCZpc2MtPmxvY2spOw0KLQlpbml0X2NvbXBs ZXRpb24oJmlzYy0+Y29tcCk7DQotDQotCS8qIEluaXRpYWxpemUgdmlkZW9idWYyIHF1ZXVlICov DQotCXEtPnR5cGUJCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsNCi0JcS0+aW9fbW9k ZXMJCT0gVkIyX01NQVAgfCBWQjJfRE1BQlVGIHwgVkIyX1JFQUQ7DQotCXEtPmRydl9wcml2CQk9 IGlzYzsNCi0JcS0+YnVmX3N0cnVjdF9zaXplCT0gc2l6ZW9mKHN0cnVjdCBpc2NfYnVmZmVyKTsN Ci0JcS0+b3BzCQkJPSAmaXNjX3ZiMl9vcHM7DQotCXEtPm1lbV9vcHMJCT0gJnZiMl9kbWFfY29u dGlnX21lbW9wczsNCi0JcS0+dGltZXN0YW1wX2ZsYWdzCT0gVjRMMl9CVUZfRkxBR19USU1FU1RB TVBfTU9OT1RPTklDOw0KLQlxLT5sb2NrCQkJPSAmaXNjLT5sb2NrOw0KLQlxLT5taW5fYnVmZmVy c19uZWVkZWQJPSAxOw0KLQlxLT5kZXYJCQk9IGlzYy0+ZGV2Ow0KLQ0KLQlyZXQgPSB2YjJfcXVl dWVfaW5pdChxKTsNCi0JaWYgKHJldCA8IDApIHsNCi0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2 LA0KLQkJCSAidmIyX3F1ZXVlX2luaXQoKSBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KLQkJcmV0dXJu IHJldDsNCi0JfQ0KLQ0KLQkvKiBJbml0IHZpZGVvIGRtYSBxdWV1ZXMgKi8NCi0JSU5JVF9MSVNU X0hFQUQoJmlzYy0+ZG1hX3F1ZXVlKTsNCi0Jc3Bpbl9sb2NrX2luaXQoJmlzYy0+ZG1hX3F1ZXVl X2xvY2spOw0KLQlzcGluX2xvY2tfaW5pdCgmaXNjLT5hd2JfbG9jayk7DQotDQotCXJldCA9IGlz Y19mb3JtYXRzX2luaXQoaXNjKTsNCi0JaWYgKHJldCA8IDApIHsNCi0JCXY0bDJfZXJyKCZpc2Mt PnY0bDJfZGV2LA0KLQkJCSAiSW5pdCBmb3JtYXQgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCi0JCXJl dHVybiByZXQ7DQotCX0NCi0NCi0JcmV0ID0gaXNjX3NldF9kZWZhdWx0X2ZtdChpc2MpOw0KLQlp ZiAocmV0KSB7DQotCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgIkNvdWxkIG5vdCBzZXQgZGVm YXVsdCBmb3JtYXRcbiIpOw0KLQkJcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQlyZXQgPSBpc2NfY3Ry bF9pbml0KGlzYyk7DQotCWlmIChyZXQpIHsNCi0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAi SW5pdCBpc2MgY3Ryb2xzIGZhaWxlZDogJWRcbiIsIHJldCk7DQotCQlyZXR1cm4gcmV0Ow0KLQl9 DQotDQotCS8qIFJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLw0KLQlzdHJzY3B5KHZkZXYtPm5hbWUs IEFUTUVMX0lTQ19OQU1FLCBzaXplb2YodmRldi0+bmFtZSkpOw0KLQl2ZGV2LT5yZWxlYXNlCQk9 IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5Ow0KLQl2ZGV2LT5mb3BzCQk9ICZpc2NfZm9wczsN Ci0JdmRldi0+aW9jdGxfb3BzCQk9ICZpc2NfaW9jdGxfb3BzOw0KLQl2ZGV2LT52NGwyX2RldgkJ PSAmaXNjLT52NGwyX2RldjsNCi0JdmRldi0+dmZsX2RpcgkJPSBWRkxfRElSX1JYOw0KLQl2ZGV2 LT5xdWV1ZQkJPSBxOw0KLQl2ZGV2LT5sb2NrCQk9ICZpc2MtPmxvY2s7DQotCXZkZXYtPmN0cmxf aGFuZGxlcgk9ICZpc2MtPmN0cmxzLmhhbmRsZXI7DQotCXZkZXYtPmRldmljZV9jYXBzCT0gVjRM Ml9DQVBfU1RSRUFNSU5HIHwgVjRMMl9DQVBfVklERU9fQ0FQVFVSRTsNCi0JdmlkZW9fc2V0X2Ry dmRhdGEodmRldiwgaXNjKTsNCi0NCi0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZkZXYs IFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsNCi0JaWYgKHJldCA8IDApIHsNCi0JCXY0bDJfZXJyKCZp c2MtPnY0bDJfZGV2LA0KLQkJCSAidmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZDogJWRcbiIs IHJldCk7DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0 aWMgY29uc3Qgc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXJfb3BlcmF0aW9ucyBpc2NfYXN5bmNf b3BzID0gew0KLQkuYm91bmQgPSBpc2NfYXN5bmNfYm91bmQsDQotCS51bmJpbmQgPSBpc2NfYXN5 bmNfdW5iaW5kLA0KLQkuY29tcGxldGUgPSBpc2NfYXN5bmNfY29tcGxldGUsDQotfTsNCi0NCi1z dGF0aWMgdm9pZCBpc2Nfc3ViZGV2X2NsZWFudXAoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17 DQotCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eTsNCi0NCi0JbGlzdF9m b3JfZWFjaF9lbnRyeShzdWJkZXZfZW50aXR5LCAmaXNjLT5zdWJkZXZfZW50aXRpZXMsIGxpc3Qp IHsNCi0JCXY0bDJfYXN5bmNfbm90aWZpZXJfdW5yZWdpc3Rlcigmc3ViZGV2X2VudGl0eS0+bm90 aWZpZXIpOw0KLQkJdjRsMl9hc3luY19ub3RpZmllcl9jbGVhbnVwKCZzdWJkZXZfZW50aXR5LT5u b3RpZmllcik7DQotCX0NCi0NCi0JSU5JVF9MSVNUX0hFQUQoJmlzYy0+c3ViZGV2X2VudGl0aWVz KTsNCi19DQotDQotc3RhdGljIGludCBpc2NfcGlwZWxpbmVfaW5pdChzdHJ1Y3QgaXNjX2Rldmlj ZSAqaXNjKQ0KLXsNCi0Jc3RydWN0IGRldmljZSAqZGV2ID0gaXNjLT5kZXY7DQotCXN0cnVjdCBy ZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KLQlzdHJ1Y3QgcmVnbWFwX2ZpZWxkICpyZWdz Ow0KLQl1bnNpZ25lZCBpbnQgaTsNCi0NCi0JLyogV0ItLT5DRkEtLT5DQy0tPkdBTS0tPkNTQy0t PkNCQy0tPlNVQjQyMi0tPlNVQjQyMCAqLw0KLQljb25zdCBzdHJ1Y3QgcmVnX2ZpZWxkIHJlZ2Zp ZWxkc1tJU0NfUElQRV9MSU5FX05PREVfTlVNXSA9IHsNCi0JCVJFR19GSUVMRChJU0NfV0JfQ1RS TCwgMCwgMCksDQotCQlSRUdfRklFTEQoSVNDX0NGQV9DVFJMLCAwLCAwKSwNCi0JCVJFR19GSUVM RChJU0NfQ0NfQ1RSTCwgMCwgMCksDQotCQlSRUdfRklFTEQoSVNDX0dBTV9DVFJMLCAwLCAwKSwN Ci0JCVJFR19GSUVMRChJU0NfR0FNX0NUUkwsIDEsIDEpLA0KLQkJUkVHX0ZJRUxEKElTQ19HQU1f Q1RSTCwgMiwgMiksDQotCQlSRUdfRklFTEQoSVNDX0dBTV9DVFJMLCAzLCAzKSwNCi0JCVJFR19G SUVMRChJU0NfQ1NDX0NUUkwsIDAsIDApLA0KLQkJUkVHX0ZJRUxEKElTQ19DQkNfQ1RSTCwgMCwg MCksDQotCQlSRUdfRklFTEQoSVNDX1NVQjQyMl9DVFJMLCAwLCAwKSwNCi0JCVJFR19GSUVMRChJ U0NfU1VCNDIwX0NUUkwsIDAsIDApLA0KLQl9Ow0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgSVNDX1BJ UEVfTElORV9OT0RFX05VTTsgaSsrKSB7DQotCQlyZWdzID0gZGV2bV9yZWdtYXBfZmllbGRfYWxs b2MoZGV2LCByZWdtYXAsIHJlZ2ZpZWxkc1tpXSk7DQotCQlpZiAoSVNfRVJSKHJlZ3MpKQ0KLQkJ CXJldHVybiBQVFJfRVJSKHJlZ3MpOw0KLQ0KLQkJaXNjLT5waXBlbGluZVtpXSA9ICByZWdzOw0K LQl9DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19wYXJzZV9kdChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0KLQlzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOw0KLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVwbiA9 IE5VTEwsICpyZW07DQotCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eTsN Ci0JdW5zaWduZWQgaW50IGZsYWdzOw0KLQlpbnQgcmV0Ow0KLQ0KLQlJTklUX0xJU1RfSEVBRCgm aXNjLT5zdWJkZXZfZW50aXRpZXMpOw0KLQ0KLQl3aGlsZSAoMSkgew0KLQkJc3RydWN0IHY0bDJf Zndub2RlX2VuZHBvaW50IHY0bDJfZXBuID0geyAuYnVzX3R5cGUgPSAwIH07DQotDQotCQllcG4g PSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChucCwgZXBuKTsNCi0JCWlmICghZXBuKQ0KLQkJ CXJldHVybiAwOw0KLQ0KLQkJcmVtID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChl cG4pOw0KLQkJaWYgKCFyZW0pIHsNCi0JCQlkZXZfbm90aWNlKGRldiwgIlJlbW90ZSBkZXZpY2Ug YXQgJXBPRiBub3QgZm91bmRcbiIsDQotCQkJCSAgIGVwbik7DQotCQkJY29udGludWU7DQotCQl9 DQotDQotCQlyZXQgPSB2NGwyX2Z3bm9kZV9lbmRwb2ludF9wYXJzZShvZl9md25vZGVfaGFuZGxl KGVwbiksDQotCQkJCQkJICZ2NGwyX2Vwbik7DQotCQlpZiAocmV0KSB7DQotCQkJb2Zfbm9kZV9w dXQocmVtKTsNCi0JCQlyZXQgPSAtRUlOVkFMOw0KLQkJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90 IHBhcnNlIHRoZSBlbmRwb2ludFxuIik7DQotCQkJYnJlYWs7DQotCQl9DQotDQotCQlzdWJkZXZf ZW50aXR5ID0gZGV2bV9remFsbG9jKGRldiwNCi0JCQkJCSAgc2l6ZW9mKCpzdWJkZXZfZW50aXR5 KSwgR0ZQX0tFUk5FTCk7DQotCQlpZiAoIXN1YmRldl9lbnRpdHkpIHsNCi0JCQlvZl9ub2RlX3B1 dChyZW0pOw0KLQkJCXJldCA9IC1FTk9NRU07DQotCQkJYnJlYWs7DQotCQl9DQotDQotCQkvKiBh c2Qgd2lsbCBiZSBmcmVlZCBieSB0aGUgc3Vic3lzdGVtIG9uY2UgaXQncyBhZGRlZCB0byB0aGUN Ci0JCSAqIG5vdGlmaWVyIGxpc3QNCi0JCSAqLw0KLQkJc3ViZGV2X2VudGl0eS0+YXNkID0ga3ph bGxvYyhzaXplb2YoKnN1YmRldl9lbnRpdHktPmFzZCksDQotCQkJCQkgICAgIEdGUF9LRVJORUwp Ow0KLQkJaWYgKCFzdWJkZXZfZW50aXR5LT5hc2QpIHsNCi0JCQlvZl9ub2RlX3B1dChyZW0pOw0K LQkJCXJldCA9IC1FTk9NRU07DQotCQkJYnJlYWs7DQotCQl9DQotDQotCQlmbGFncyA9IHY0bDJf ZXBuLmJ1cy5wYXJhbGxlbC5mbGFnczsNCi0NCi0JCWlmIChmbGFncyAmIFY0TDJfTUJVU19IU1lO Q19BQ1RJVkVfTE9XKQ0KLQkJCXN1YmRldl9lbnRpdHktPnBmZV9jZmcwID0gSVNDX1BGRV9DRkcw X0hQT0xfTE9XOw0KLQ0KLQkJaWYgKGZsYWdzICYgVjRMMl9NQlVTX1ZTWU5DX0FDVElWRV9MT1cp DQotCQkJc3ViZGV2X2VudGl0eS0+cGZlX2NmZzAgfD0gSVNDX1BGRV9DRkcwX1ZQT0xfTE9XOw0K LQ0KLQkJaWYgKGZsYWdzICYgVjRMMl9NQlVTX1BDTEtfU0FNUExFX0ZBTExJTkcpDQotCQkJc3Vi ZGV2X2VudGl0eS0+cGZlX2NmZzAgfD0gSVNDX1BGRV9DRkcwX1BQT0xfTE9XOw0KLQ0KLQkJaWYg KHY0bDJfZXBuLmJ1c190eXBlID09IFY0TDJfTUJVU19CVDY1NikNCi0JCQlzdWJkZXZfZW50aXR5 LT5wZmVfY2ZnMCB8PSBJU0NfUEZFX0NGRzBfQ0NJUl9DUkMgfA0KLQkJCQkJSVNDX1BGRV9DRkcw X0NDSVI2NTY7DQotDQotCQlzdWJkZXZfZW50aXR5LT5hc2QtPm1hdGNoX3R5cGUgPSBWNEwyX0FT WU5DX01BVENIX0ZXTk9ERTsNCi0JCXN1YmRldl9lbnRpdHktPmFzZC0+bWF0Y2guZndub2RlID0N Ci0JCQlvZl9md25vZGVfaGFuZGxlKHJlbSk7DQotCQlsaXN0X2FkZF90YWlsKCZzdWJkZXZfZW50 aXR5LT5saXN0LCAmaXNjLT5zdWJkZXZfZW50aXRpZXMpOw0KLQl9DQotDQotCW9mX25vZGVfcHV0 KGVwbik7DQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLS8qIHJlZ21hcCBjb25maWd1cmF0aW9uICov DQotI2RlZmluZSBBVE1FTF9JU0NfUkVHX01BWCAgICAweGJmYw0KLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgcmVnbWFwX2NvbmZpZyBpc2NfcmVnbWFwX2NvbmZpZyA9IHsNCi0JLnJlZ19iaXRzICAgICAg ID0gMzIsDQotCS5yZWdfc3RyaWRlICAgICA9IDQsDQotCS52YWxfYml0cyAgICAgICA9IDMyLA0K LQkubWF4X3JlZ2lzdGVyCT0gQVRNRUxfSVNDX1JFR19NQVgsDQotfTsNCi0NCi1zdGF0aWMgaW50 IGF0bWVsX2lzY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KLXsNCi0Jc3Ry dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYzsN Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7DQotCXZvaWQgX19pb21lbSAqaW9fYmFzZTsNCi0Jc3Ry dWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXZfZW50aXR5Ow0KLQlpbnQgaXJxOw0KLQlpbnQg cmV0Ow0KLQ0KLQlpc2MgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmlzYyksIEdGUF9LRVJO RUwpOw0KLQlpZiAoIWlzYykNCi0JCXJldHVybiAtRU5PTUVNOw0KLQ0KLQlwbGF0Zm9ybV9zZXRf ZHJ2ZGF0YShwZGV2LCBpc2MpOw0KLQlpc2MtPmRldiA9IGRldjsNCi0NCi0JcmVzID0gcGxhdGZv cm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsNCi0JaW9fYmFzZSA9IGRl dm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7DQotCWlmIChJU19FUlIoaW9fYmFzZSkpDQot CQlyZXR1cm4gUFRSX0VSUihpb19iYXNlKTsNCi0NCi0JaXNjLT5yZWdtYXAgPSBkZXZtX3JlZ21h cF9pbml0X21taW8oZGV2LCBpb19iYXNlLCAmaXNjX3JlZ21hcF9jb25maWcpOw0KLQlpZiAoSVNf RVJSKGlzYy0+cmVnbWFwKSkgew0KLQkJcmV0ID0gUFRSX0VSUihpc2MtPnJlZ21hcCk7DQotCQlk ZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0IHJlZ2lzdGVyIG1hcDogJWRcbiIsIHJldCk7DQot CQlyZXR1cm4gcmV0Ow0KLQl9DQotDQotCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7 DQotCWlmIChpcnEgPCAwKSB7DQotCQlyZXQgPSBpcnE7DQotCQlkZXZfZXJyKGRldiwgImZhaWxl ZCB0byBnZXQgaXJxOiAlZFxuIiwgcmV0KTsNCi0JCXJldHVybiByZXQ7DQotCX0NCi0NCi0JcmV0 ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgaXNjX2ludGVycnVwdCwgMCwNCi0JCQkgICAg ICAgQVRNRUxfSVNDX05BTUUsIGlzYyk7DQotCWlmIChyZXQgPCAwKSB7DQotCQlkZXZfZXJyKGRl diwgImNhbid0IHJlZ2lzdGVyIElTUiBmb3IgSVJRICV1IChyZXQ9JWkpXG4iLA0KLQkJCWlycSwg cmV0KTsNCi0JCXJldHVybiByZXQ7DQotCX0NCi0NCi0JcmV0ID0gaXNjX3BpcGVsaW5lX2luaXQo aXNjKTsNCi0JaWYgKHJldCkNCi0JCXJldHVybiByZXQ7DQotDQotCWlzYy0+aGNsb2NrID0gZGV2 bV9jbGtfZ2V0KGRldiwgImhjbG9jayIpOw0KLQlpZiAoSVNfRVJSKGlzYy0+aGNsb2NrKSkgew0K LQkJcmV0ID0gUFRSX0VSUihpc2MtPmhjbG9jayk7DQotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byBnZXQgaGNsb2NrOiAlZFxuIiwgcmV0KTsNCi0JCXJldHVybiByZXQ7DQotCX0NCi0NCi0JcmV0 ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGlzYy0+aGNsb2NrKTsNCi0JaWYgKHJldCkgew0KLQkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIGhjbG9jazogJWRcbiIsIHJldCk7DQotCQlyZXR1 cm4gcmV0Ow0KLQl9DQotDQotCXJldCA9IGlzY19jbGtfaW5pdChpc2MpOw0KLQlpZiAocmV0KSB7 DQotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0IGlzYyBjbG9jazogJWRcbiIsIHJldCk7 DQotCQlnb3RvIHVucHJlcGFyZV9oY2xrOw0KLQl9DQotDQotCWlzYy0+aXNwY2sgPSBpc2MtPmlz Y19jbGtzW0lTQ19JU1BDS10uY2xrOw0KLQ0KLQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaXNj LT5pc3Bjayk7DQotCWlmIChyZXQpIHsNCi0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJs ZSBpc3BjazogJWRcbiIsIHJldCk7DQotCQlnb3RvIHVucHJlcGFyZV9oY2xrOw0KLQl9DQotDQot CS8qIGlzcGNrIHNob3VsZCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIGhjbG9jayAqLw0KLQlyZXQg PSBjbGtfc2V0X3JhdGUoaXNjLT5pc3BjaywgY2xrX2dldF9yYXRlKGlzYy0+aGNsb2NrKSk7DQot CWlmIChyZXQpIHsNCi0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHNldCBpc3BjayByYXRlOiAl ZFxuIiwgcmV0KTsNCi0JCWdvdG8gdW5wcmVwYXJlX2NsazsNCi0JfQ0KLQ0KLQlyZXQgPSB2NGwy X2RldmljZV9yZWdpc3RlcihkZXYsICZpc2MtPnY0bDJfZGV2KTsNCi0JaWYgKHJldCkgew0KLQkJ ZGV2X2VycihkZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgdjRsMiBkZXZpY2UuXG4iKTsNCi0JCWdv dG8gdW5wcmVwYXJlX2NsazsNCi0JfQ0KLQ0KLQlyZXQgPSBpc2NfcGFyc2VfZHQoZGV2LCBpc2Mp Ow0KLQlpZiAocmV0KSB7DQotCQlkZXZfZXJyKGRldiwgImZhaWwgdG8gcGFyc2UgZGV2aWNlIHRy ZWVcbiIpOw0KLQkJZ290byB1bnJlZ2lzdGVyX3Y0bDJfZGV2aWNlOw0KLQl9DQotDQotCWlmIChs aXN0X2VtcHR5KCZpc2MtPnN1YmRldl9lbnRpdGllcykpIHsNCi0JCWRldl9lcnIoZGV2LCAibm8g c3ViZGV2IGZvdW5kXG4iKTsNCi0JCXJldCA9IC1FTk9ERVY7DQotCQlnb3RvIHVucmVnaXN0ZXJf djRsMl9kZXZpY2U7DQotCX0NCi0NCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzdWJkZXZfZW50aXR5 LCAmaXNjLT5zdWJkZXZfZW50aXRpZXMsIGxpc3QpIHsNCi0JCXY0bDJfYXN5bmNfbm90aWZpZXJf aW5pdCgmc3ViZGV2X2VudGl0eS0+bm90aWZpZXIpOw0KLQ0KLQkJcmV0ID0gdjRsMl9hc3luY19u b3RpZmllcl9hZGRfc3ViZGV2KCZzdWJkZXZfZW50aXR5LT5ub3RpZmllciwNCi0JCQkJCQkgICAg IHN1YmRldl9lbnRpdHktPmFzZCk7DQotCQlpZiAocmV0KSB7DQotCQkJZndub2RlX2hhbmRsZV9w dXQoc3ViZGV2X2VudGl0eS0+YXNkLT5tYXRjaC5md25vZGUpOw0KLQkJCWtmcmVlKHN1YmRldl9l bnRpdHktPmFzZCk7DQotCQkJZ290byBjbGVhbnVwX3N1YmRldjsNCi0JCX0NCi0NCi0JCXN1YmRl dl9lbnRpdHktPm5vdGlmaWVyLm9wcyA9ICZpc2NfYXN5bmNfb3BzOw0KLQ0KLQkJcmV0ID0gdjRs Ml9hc3luY19ub3RpZmllcl9yZWdpc3RlcigmaXNjLT52NGwyX2RldiwNCi0JCQkJCQkgICAmc3Vi ZGV2X2VudGl0eS0+bm90aWZpZXIpOw0KLQkJaWYgKHJldCkgew0KLQkJCWRldl9lcnIoZGV2LCAi ZmFpbCB0byByZWdpc3RlciBhc3luYyBub3RpZmllclxuIik7DQotCQkJZ290byBjbGVhbnVwX3N1 YmRldjsNCi0JCX0NCi0NCi0JCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKCZpc2MtPnZpZGVvX2Rl dikpDQotCQkJYnJlYWs7DQotCX0NCi0NCi0JcG1fcnVudGltZV9zZXRfYWN0aXZlKGRldik7DQot CXBtX3J1bnRpbWVfZW5hYmxlKGRldik7DQotCXBtX3JlcXVlc3RfaWRsZShkZXYpOw0KLQ0KLQly ZXR1cm4gMDsNCi0NCi1jbGVhbnVwX3N1YmRldjoNCi0JaXNjX3N1YmRldl9jbGVhbnVwKGlzYyk7 DQotDQotdW5yZWdpc3Rlcl92NGwyX2RldmljZToNCi0JdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcigm aXNjLT52NGwyX2Rldik7DQotDQotdW5wcmVwYXJlX2NsazoNCi0JY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGlzYy0+aXNwY2spOw0KLXVucHJlcGFyZV9oY2xrOg0KLQljbGtfZGlzYWJsZV91bnByZXBh cmUoaXNjLT5oY2xvY2spOw0KLQ0KLQlpc2NfY2xrX2NsZWFudXAoaXNjKTsNCi0NCi0JcmV0dXJu IHJldDsNCi19DQotDQotc3RhdGljIGludCBhdG1lbF9pc2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gcGxhdGZvcm1f Z2V0X2RydmRhdGEocGRldik7DQotDQotCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsN Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aXNwY2spOw0KLQljbGtfZGlzYWJsZV91bnBy ZXBhcmUoaXNjLT5oY2xvY2spOw0KLQ0KLQlpc2Nfc3ViZGV2X2NsZWFudXAoaXNjKTsNCi0NCi0J djRsMl9kZXZpY2VfdW5yZWdpc3RlcigmaXNjLT52NGwyX2Rldik7DQotDQotCWlzY19jbGtfY2xl YW51cChpc2MpOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBfX21heWJlX3Vu dXNlZCBpc2NfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikNCi17DQotCXN0cnVj dCBpc2NfZGV2aWNlICppc2MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCi0NCi0JY2xrX2Rpc2Fi bGVfdW5wcmVwYXJlKGlzYy0+aXNwY2spOw0KLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaXNjLT5o Y2xvY2spOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBfX21heWJlX3VudXNl ZCBpc2NfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KLXsNCi0Jc3RydWN0IGlz Y19kZXZpY2UgKmlzYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KLQlpbnQgcmV0Ow0KLQ0KLQly ZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaXNjLT5oY2xvY2spOw0KLQlpZiAocmV0KQ0KLQkJcmV0 dXJuIHJldDsNCi0NCi0JcmV0dXJuIGNsa19wcmVwYXJlX2VuYWJsZShpc2MtPmlzcGNrKTsNCi19 DQotDQotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGF0bWVsX2lzY19kZXZfcG1fb3Bz ID0gew0KLQlTRVRfUlVOVElNRV9QTV9PUFMoaXNjX3J1bnRpbWVfc3VzcGVuZCwgaXNjX3J1bnRp bWVfcmVzdW1lLCBOVUxMKQ0KLX07DQotDQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgYXRtZWxfaXNjX29mX21hdGNoW10gPSB7DQotCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsc2Ft YTVkMi1pc2MiIH0sDQotCXsgfQ0KLX07DQotTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXRtZWxf aXNjX29mX21hdGNoKTsNCi0NCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdG1lbF9p c2NfZHJpdmVyID0gew0KLQkucHJvYmUJPSBhdG1lbF9pc2NfcHJvYmUsDQotCS5yZW1vdmUJPSBh dG1lbF9pc2NfcmVtb3ZlLA0KLQkuZHJpdmVyCT0gew0KLQkJLm5hbWUJCT0gQVRNRUxfSVNDX05B TUUsDQotCQkucG0JCT0gJmF0bWVsX2lzY19kZXZfcG1fb3BzLA0KLQkJLm9mX21hdGNoX3RhYmxl ID0gb2ZfbWF0Y2hfcHRyKGF0bWVsX2lzY19vZl9tYXRjaCksDQotCX0sDQotfTsNCi0NCi1tb2R1 bGVfcGxhdGZvcm1fZHJpdmVyKGF0bWVsX2lzY19kcml2ZXIpOw0KLQ0KLU1PRFVMRV9BVVRIT1Io IlNvbmdqdW4gV3UgPHNvbmdqdW4ud3VAbWljcm9jaGlwLmNvbT4iKTsNCi1NT0RVTEVfREVTQ1JJ UFRJT04oIlRoZSBWNEwyIGRyaXZlciBmb3IgQXRtZWwtSVNDIik7DQotTU9EVUxFX0xJQ0VOU0Uo IkdQTCB2MiIpOw0KLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ2aWRlbyIpOw0KZGlmZiAtLWdp dCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmggYi9kcml2ZXJzL21l ZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5k ZXggMDAwMDAwMC4uZjYzM2UxMA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuaA0KQEAgLTAsMCArMSwyMDggQEANCisvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKy8qDQorICogTWljcm9jaGlwIEltYWdlIFNl bnNvciBDb250cm9sbGVyIChJU0MpIGRyaXZlciBoZWFkZXIgZmlsZQ0KKyAqDQorICogQ29weXJp Z2h0IChDKSAyMDE2LTIwMTkgTWljcm9jaGlwIFRlY2hub2xvZ3ksIEluYy4NCisgKg0KKyAqIEF1 dGhvcjogU29uZ2p1biBXdQ0KKyAqIEF1dGhvcjogRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3Rl dkBtaWNyb2NoaXAuY29tPg0KKyAqDQorICovDQorI2lmbmRlZiBfQVRNRUxfSVNDX0hfDQorDQor I2RlZmluZSBJU0NfTUFYX1NVUFBPUlRfV0lEVEggICAyNTkyDQorI2RlZmluZSBJU0NfTUFYX1NV UFBPUlRfSEVJR0hUICAxOTQ0DQorDQorI2RlZmluZSBJU0NfQ0xLX01BWF9ESVYJCTI1NQ0KKw0K K2VudW0gaXNjX2Nsa19pZCB7DQorCUlTQ19JU1BDSyA9IDAsDQorCUlTQ19NQ0sgPSAxLA0KK307 DQorDQorc3RydWN0IGlzY19jbGsgew0KKwlzdHJ1Y3QgY2xrX2h3ICAgaHc7DQorCXN0cnVjdCBj bGsgICAgICAqY2xrOw0KKwlzdHJ1Y3QgcmVnbWFwICAgKnJlZ21hcDsNCisJc3BpbmxvY2tfdAls b2NrOw0KKwl1OAkJaWQ7DQorCXU4CQlwYXJlbnRfaWQ7DQorCXUzMgkJZGl2Ow0KKwlzdHJ1Y3Qg ZGV2aWNlCSpkZXY7DQorfTsNCisNCisjZGVmaW5lIHRvX2lzY19jbGsoaHcpIGNvbnRhaW5lcl9v Zihodywgc3RydWN0IGlzY19jbGssIGh3KQ0KKw0KK3N0cnVjdCBpc2NfYnVmZmVyIHsNCisJc3Ry dWN0IHZiMl92NGwyX2J1ZmZlciAgdmI7DQorCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsNCit9Ow0K Kw0KK3N0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSB7DQorCXN0cnVjdCB2NGwyX3N1YmRldgkJKnNk Ow0KKwlzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYJKmFzZDsNCisJc3RydWN0IHY0bDJfYXN5bmNf bm90aWZpZXIgICAgICBub3RpZmllcjsNCisNCisJdTMyIHBmZV9jZmcwOw0KKw0KKwlzdHJ1Y3Qg bGlzdF9oZWFkIGxpc3Q7DQorfTsNCisNCisvKg0KKyAqIHN0cnVjdCBpc2NfZm9ybWF0IC0gSVND IG1lZGlhIGJ1cyBmb3JtYXQgaW5mb3JtYXRpb24NCisJCQlUaGlzIHN0cnVjdHVyZSByZXByZXNl bnRzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgSVNDDQorCQkJYW5kIHRoZSBzZW5zb3IuIEl0 J3MgdGhlIGlucHV0IGZvcm1hdCByZWNlaXZlZCBieQ0KKwkJCXRoZSBJU0MuDQorICogQGZvdXJj YzoJCUZvdXJjYyBjb2RlIGZvciB0aGlzIGZvcm1hdA0KKyAqIEBtYnVzX2NvZGU6CQlWNEwyIG1l ZGlhIGJ1cyBmb3JtYXQgY29kZS4NCisgKiBAY2ZhX2JheWNmZzoJCUlmIHRoaXMgZm9ybWF0IGlz IFJBVyBCQVlFUiwgaW5kaWNhdGUgdGhlIHR5cGUgb2YgYmF5ZXIuDQorCQkJdGhpcyBpcyBlaXRo ZXIgQkdCRywgUkdSRywgZXRjLg0KKyAqIEBwZmVfY2ZnMF9icHM6CU51bWJlciBvZiBoYXJkd2Fy ZSBkYXRhIGxpbmVzIGNvbm5lY3RlZCB0byB0aGUgSVNDDQorICovDQorDQorc3RydWN0IGlzY19m b3JtYXQgew0KKwl1MzIJZm91cmNjOw0KKwl1MzIJbWJ1c19jb2RlOw0KKwl1MzIJY2ZhX2JheWNm ZzsNCisNCisJYm9vbAlzZF9zdXBwb3J0Ow0KKwl1MzIJcGZlX2NmZzBfYnBzOw0KK307DQorDQor LyogUGlwZWxpbmUgYml0bWFwICovDQorI2RlZmluZSBXQl9FTkFCTEUJQklUKDApDQorI2RlZmlu ZSBDRkFfRU5BQkxFCUJJVCgxKQ0KKyNkZWZpbmUgQ0NfRU5BQkxFCUJJVCgyKQ0KKyNkZWZpbmUg R0FNX0VOQUJMRQlCSVQoMykNCisjZGVmaW5lIEdBTV9CRU5BQkxFCUJJVCg0KQ0KKyNkZWZpbmUg R0FNX0dFTkFCTEUJQklUKDUpDQorI2RlZmluZSBHQU1fUkVOQUJMRQlCSVQoNikNCisjZGVmaW5l IENTQ19FTkFCTEUJQklUKDcpDQorI2RlZmluZSBDQkNfRU5BQkxFCUJJVCg4KQ0KKyNkZWZpbmUg U1VCNDIyX0VOQUJMRQlCSVQoOSkNCisjZGVmaW5lIFNVQjQyMF9FTkFCTEUJQklUKDEwKQ0KKw0K KyNkZWZpbmUgR0FNX0VOQUJMRVMJKEdBTV9SRU5BQkxFIHwgR0FNX0dFTkFCTEUgfCBHQU1fQkVO QUJMRSB8IEdBTV9FTkFCTEUpDQorDQorLyoNCisgKiBzdHJ1Y3QgZm10X2NvbmZpZyAtIElTQyBm b3JtYXQgY29uZmlndXJhdGlvbiBhbmQgaW50ZXJuYWwgcGlwZWxpbmUNCisJCQlUaGlzIHN0cnVj dHVyZSByZXByZXNlbnRzIHRoZSBpbnRlcm5hbCBjb25maWd1cmF0aW9uDQorCQkJb2YgdGhlIElT Qy4NCisJCQlJdCBhbHNvIGhvbGRzIHRoZSBmb3JtYXQgdGhhdCBJU0Mgd2lsbCBwcmVzZW50IHRv IHY0bDIuDQorICogQHNkX2Zvcm1hdDoJCVBvaW50ZXIgdG8gYW4gaXNjX2Zvcm1hdCBzdHJ1Y3Qg dGhhdCBob2xkcyB0aGUgc2Vuc29yDQorCQkJY29uZmlndXJhdGlvbi4NCisgKiBAZm91cmNjOgkJ Rm91cmNjIGNvZGUgZm9yIHRoaXMgZm9ybWF0Lg0KKyAqIEBicHA6CQlCeXRlcyBwZXIgcGl4ZWwg aW4gdGhlIGN1cnJlbnQgZm9ybWF0Lg0KKyAqIEBybHBfY2ZnX21vZGU6CUNvbmZpZ3VyYXRpb24g b2YgdGhlIFJMUCAocm91bmRpbmcsIGxpbWl0aW5nIHBhY2thZ2luZykNCisgKiBAZGNmZ19pbW9k ZToJCUNvbmZpZ3VyYXRpb24gb2YgdGhlIGlucHV0IG9mIHRoZSBETUEgbW9kdWxlDQorICogQGRj dHJsX2R2aWV3OglDb25maWd1cmF0aW9uIG9mIHRoZSBvdXRwdXQgb2YgdGhlIERNQSBtb2R1bGUN CisgKiBAYml0c19waXBlbGluZToJQ29uZmlndXJhdGlvbiBvZiB0aGUgcGlwZWxpbmUsIHdoaWNo IG1vZHVsZXMgYXJlIGVuYWJsZWQNCisgKi8NCitzdHJ1Y3QgZm10X2NvbmZpZyB7DQorCXN0cnVj dCBpc2NfZm9ybWF0CSpzZF9mb3JtYXQ7DQorDQorCXUzMgkJCWZvdXJjYzsNCisJdTgJCQlicHA7 DQorDQorCXUzMgkJCXJscF9jZmdfbW9kZTsNCisJdTMyCQkJZGNmZ19pbW9kZTsNCisJdTMyCQkJ ZGN0cmxfZHZpZXc7DQorDQorCXUzMgkJCWJpdHNfcGlwZWxpbmU7DQorfTsNCisNCisjZGVmaW5l IEhJU1RfRU5UUklFUwkJNTEyDQorI2RlZmluZSBISVNUX0JBWUVSCQkoSVNDX0hJU19DRkdfTU9E RV9CICsgMSkNCisNCitlbnVtew0KKwlISVNUX0lOSVQgPSAwLA0KKwlISVNUX0VOQUJMRUQsDQor CUhJU1RfRElTQUJMRUQsDQorfTsNCisNCitzdHJ1Y3QgaXNjX2N0cmxzIHsNCisJc3RydWN0IHY0 bDJfY3RybF9oYW5kbGVyIGhhbmRsZXI7DQorDQorCXUzMiBicmlnaHRuZXNzOw0KKwl1MzIgY29u dHJhc3Q7DQorCXU4IGdhbW1hX2luZGV4Ow0KKyNkZWZpbmUgSVNDX1dCX05PTkUJMA0KKyNkZWZp bmUgSVNDX1dCX0FVVE8JMQ0KKyNkZWZpbmUgSVNDX1dCX09ORVRJTUUJMg0KKwl1OCBhd2I7DQor DQorCS8qIG9uZSBmb3IgZWFjaCBjb21wb25lbnQgOiBHUiwgUiwgR0IsIEIgKi8NCisJdTMyIGdh aW5bSElTVF9CQVlFUl07DQorCXUzMiBvZmZzZXRbSElTVF9CQVlFUl07DQorDQorCXUzMiBoaXN0 X2VudHJ5W0hJU1RfRU5UUklFU107DQorCXUzMiBoaXN0X2NvdW50W0hJU1RfQkFZRVJdOw0KKwl1 OCBoaXN0X2lkOw0KKwl1OCBoaXN0X3N0YXQ7DQorI2RlZmluZSBISVNUX01JTl9JTkRFWAkJMA0K KyNkZWZpbmUgSElTVF9NQVhfSU5ERVgJCTENCisJdTMyIGhpc3RfbWlubWF4W0hJU1RfQkFZRVJd WzJdOw0KK307DQorDQorI2RlZmluZSBJU0NfUElQRV9MSU5FX05PREVfTlVNCTExDQorDQorc3Ry dWN0IGlzY19kZXZpY2Ugew0KKwlzdHJ1Y3QgcmVnbWFwCQkqcmVnbWFwOw0KKwlzdHJ1Y3QgY2xr CQkqaGNsb2NrOw0KKwlzdHJ1Y3QgY2xrCQkqaXNwY2s7DQorCXN0cnVjdCBpc2NfY2xrCQlpc2Nf Y2xrc1syXTsNCisNCisJc3RydWN0IGRldmljZQkJKmRldjsNCisJc3RydWN0IHY0bDJfZGV2aWNl CXY0bDJfZGV2Ow0KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlCXZpZGVvX2RldjsNCisNCisJc3RydWN0 IHZiMl9xdWV1ZQl2YjJfdmlkcTsNCisJc3BpbmxvY2tfdAkJZG1hX3F1ZXVlX2xvY2s7DQorCXN0 cnVjdCBsaXN0X2hlYWQJZG1hX3F1ZXVlOw0KKwlzdHJ1Y3QgaXNjX2J1ZmZlcgkqY3VyX2ZybTsN CisJdW5zaWduZWQgaW50CQlzZXF1ZW5jZTsNCisJYm9vbAkJCXN0b3A7DQorCXN0cnVjdCBjb21w bGV0aW9uCWNvbXA7DQorDQorCXN0cnVjdCB2NGwyX2Zvcm1hdAlmbXQ7DQorCXN0cnVjdCBpc2Nf Zm9ybWF0CSoqdXNlcl9mb3JtYXRzOw0KKwl1bnNpZ25lZCBpbnQJCW51bV91c2VyX2Zvcm1hdHM7 DQorDQorCXN0cnVjdCBmbXRfY29uZmlnCWNvbmZpZzsNCisJc3RydWN0IGZtdF9jb25maWcJdHJ5 X2NvbmZpZzsNCisNCisJc3RydWN0IGlzY19jdHJscwljdHJsczsNCisJc3RydWN0IHY0bDJfY3Ry bAkqZG9fd2JfY3RybDsNCisJc3RydWN0IHdvcmtfc3RydWN0CWF3Yl93b3JrOw0KKw0KKwlzdHJ1 Y3QgbXV0ZXgJCWxvY2s7DQorCXNwaW5sb2NrX3QJCWF3Yl9sb2NrOw0KKw0KKwlzdHJ1Y3QgcmVn bWFwX2ZpZWxkCSpwaXBlbGluZVtJU0NfUElQRV9MSU5FX05PREVfTlVNXTsNCisNCisJc3RydWN0 IGlzY19zdWJkZXZfZW50aXR5CSpjdXJyZW50X3N1YmRldjsNCisJc3RydWN0IGxpc3RfaGVhZAkJ c3ViZGV2X2VudGl0aWVzOw0KK307DQorDQorI2RlZmluZSBHQU1NQV9NQVgJMg0KKyNkZWZpbmUg R0FNTUFfRU5UUklFUwk2NA0KKw0KKyNkZWZpbmUgQVRNRUxfSVNDX05BTUUgImF0bWVsLWlzYyIN CisNCisvKiBtb2R1bGUgcGFyYW1ldGVycyAqLw0KK2V4dGVybiB1bnNpZ25lZCBpbnQgZGVidWc7 DQorZXh0ZXJuIHVuc2lnbmVkIGludCBzZW5zb3JfcHJlZmVycmVkOw0KKw0KK2V4dGVybiBzdHJ1 Y3QgaXNjX2Zvcm1hdCBmb3JtYXRzX2xpc3RbXTsNCitleHRlcm4gc3RydWN0IGlzY19mb3JtYXQg Y29udHJvbGxlcl9mb3JtYXRzW107DQorZXh0ZXJuIGNvbnN0IHUzMiBpc2NfZ2FtbWFfdGFibGVb R0FNTUFfTUFYICsgMV1bR0FNTUFfRU5UUklFU107DQorZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWdt YXBfY29uZmlnIGlzY19yZWdtYXBfY29uZmlnOw0KK2V4dGVybiBjb25zdCBzdHJ1Y3QgdjRsMl9h c3luY19ub3RpZmllcl9vcGVyYXRpb25zIGlzY19hc3luY19vcHM7DQorDQoraXJxcmV0dXJuX3Qg aXNjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOw0KK2ludCBpc2NfcGlwZWxpbmVf aW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKTsNCitpbnQgaXNjX2Nsa19pbml0KHN0cnVjdCBp c2NfZGV2aWNlICppc2MpOw0KK3ZvaWQgaXNjX3N1YmRldl9jbGVhbnVwKHN0cnVjdCBpc2NfZGV2 aWNlICppc2MpOw0KK3ZvaWQgaXNjX2Nsa19jbGVhbnVwKHN0cnVjdCBpc2NfZGV2aWNlICppc2Mp Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwv YXRtZWwtc2FtYTVkMi1pc2MuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwt c2FtYTVkMi1pc2MuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjkzZmI4 MzkNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRt ZWwtc2FtYTVkMi1pc2MuYw0KQEAgLTAsMCArMSwzNDQgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMA0KKy8qDQorICogTWljcm9jaGlwIEltYWdlIFNlbnNvciBDb250cm9s bGVyIChJU0MpIGRyaXZlcg0KKyAqDQorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgTWljcm9j aGlwIFRlY2hub2xvZ3ksIEluYy4NCisgKg0KKyAqIEF1dGhvcjogU29uZ2p1biBXdQ0KKyAqIEF1 dGhvcjogRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNyb2NoaXAuY29tPg0KKyAqDQor ICoNCisgKiBTZW5zb3ItLT5QRkUtLT5XQi0tPkNGQS0tPkNDLS0+R0FNLS0+Q1NDLS0+Q0JDLS0+ U1VCLS0+UkxQLS0+RE1BDQorICoNCisgKiBJU0MgdmlkZW8gcGlwZWxpbmUgaW50ZWdyYXRlcyB0 aGUgZm9sbG93aW5nIHN1Ym1vZHVsZXM6DQorICogUEZFOiBQYXJhbGxlbCBGcm9udCBFbmQgdG8g c2FtcGxlIHRoZSBjYW1lcmEgc2Vuc29yIGlucHV0IHN0cmVhbQ0KKyAqICBXQjogUHJvZ3JhbW1h YmxlIHdoaXRlIGJhbGFuY2UgaW4gdGhlIEJheWVyIGRvbWFpbg0KKyAqIENGQTogQ29sb3IgZmls dGVyIGFycmF5IGludGVycG9sYXRpb24gbW9kdWxlDQorICogIENDOiBQcm9ncmFtbWFibGUgY29s b3IgY29ycmVjdGlvbg0KKyAqIEdBTTogR2FtbWEgY29ycmVjdGlvbg0KKyAqIENTQzogUHJvZ3Jh bW1hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24NCisgKiBDQkM6IENvbnRyYXN0IGFuZCBCcmln aHRuZXNzIGNvbnRyb2wNCisgKiBTVUI6IFRoaXMgbW9kdWxlIHBlcmZvcm1zIFlDYkNyNDQ0IHRv IFlDYkNyNDIwIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nDQorICogUkxQOiBUaGlzIG1vZHVsZSBw ZXJmb3JtcyByb3VuZGluZywgcmFuZ2UgbGltaXRpbmcNCisgKiAgICAgIGFuZCBwYWNraW5nIG9m IHRoZSBpbmNvbWluZyBkYXRhDQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KKyNp bmNsdWRlIDxsaW51eC9jbGtkZXYuaD4NCisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+ DQorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5o Pg0KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ DQorI2luY2x1ZGUgPGxpbnV4L29mLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+DQor I2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbV9y dW50aW1lLmg+DQorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPg0KKyNpbmNsdWRlIDxsaW51eC92 aWRlb2RldjIuaD4NCisNCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPg0KKyNpbmNsdWRl IDxtZWRpYS92NGwyLWRldmljZS5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+DQor I2luY2x1ZGUgPG1lZGlhL3Y0bDItaW1hZ2Utc2l6ZXMuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRs Mi1pb2N0bC5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWZ3bm9kZS5oPg0KKyNpbmNsdWRlIDxt ZWRpYS92NGwyLXN1YmRldi5oPg0KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNvbnRp Zy5oPg0KKw0KKyNpbmNsdWRlICJhdG1lbC1pc2MtcmVncy5oIg0KKyNpbmNsdWRlICJhdG1lbC1p c2MuaCINCisNCisjZGVmaW5lIElTQ19NQVhfU1VQUE9SVF9XSURUSCAgIDI1OTINCisjZGVmaW5l IElTQ19NQVhfU1VQUE9SVF9IRUlHSFQgIDE5NDQNCisNCisjZGVmaW5lIElTQ19DTEtfTUFYX0RJ VgkJMjU1DQorDQorc3RhdGljIGludCBpc2NfcGFyc2VfZHQoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KK3sNCisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRl di0+b2Zfbm9kZTsNCisJc3RydWN0IGRldmljZV9ub2RlICplcG4gPSBOVUxMLCAqcmVtOw0KKwlz dHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgKnN1YmRldl9lbnRpdHk7DQorCXVuc2lnbmVkIGludCBm bGFnczsNCisJaW50IHJldDsNCisNCisJSU5JVF9MSVNUX0hFQUQoJmlzYy0+c3ViZGV2X2VudGl0 aWVzKTsNCisNCisJd2hpbGUgKDEpIHsNCisJCXN0cnVjdCB2NGwyX2Z3bm9kZV9lbmRwb2ludCB2 NGwyX2VwbiA9IHsgLmJ1c190eXBlID0gMCB9Ow0KKw0KKwkJZXBuID0gb2ZfZ3JhcGhfZ2V0X25l eHRfZW5kcG9pbnQobnAsIGVwbik7DQorCQlpZiAoIWVwbikNCisJCQlyZXR1cm4gMDsNCisNCisJ CXJlbSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZXBuKTsNCisJCWlmICghcmVt KSB7DQorCQkJZGV2X25vdGljZShkZXYsICJSZW1vdGUgZGV2aWNlIGF0ICVwT0Ygbm90IGZvdW5k XG4iLA0KKwkJCQkgICBlcG4pOw0KKwkJCWNvbnRpbnVlOw0KKwkJfQ0KKw0KKwkJcmV0ID0gdjRs Ml9md25vZGVfZW5kcG9pbnRfcGFyc2Uob2ZfZndub2RlX2hhbmRsZShlcG4pLA0KKwkJCQkJCSAm djRsMl9lcG4pOw0KKwkJaWYgKHJldCkgew0KKwkJCW9mX25vZGVfcHV0KHJlbSk7DQorCQkJcmV0 ID0gLUVJTlZBTDsNCisJCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBwYXJzZSB0aGUgZW5kcG9p bnRcbiIpOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKw0KKwkJc3ViZGV2X2VudGl0eSA9IGRldm1fa3ph bGxvYyhkZXYsDQorCQkJCQkgIHNpemVvZigqc3ViZGV2X2VudGl0eSksIEdGUF9LRVJORUwpOw0K KwkJaWYgKCFzdWJkZXZfZW50aXR5KSB7DQorCQkJb2Zfbm9kZV9wdXQocmVtKTsNCisJCQlyZXQg PSAtRU5PTUVNOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKw0KKwkJLyogYXNkIHdpbGwgYmUgZnJlZWQg YnkgdGhlIHN1YnN5c3RlbSBvbmNlIGl0J3MgYWRkZWQgdG8gdGhlDQorCQkgKiBub3RpZmllciBs aXN0DQorCQkgKi8NCisJCXN1YmRldl9lbnRpdHktPmFzZCA9IGt6YWxsb2Moc2l6ZW9mKCpzdWJk ZXZfZW50aXR5LT5hc2QpLA0KKwkJCQkJICAgICBHRlBfS0VSTkVMKTsNCisJCWlmICghc3ViZGV2 X2VudGl0eS0+YXNkKSB7DQorCQkJb2Zfbm9kZV9wdXQocmVtKTsNCisJCQlyZXQgPSAtRU5PTUVN Ow0KKwkJCWJyZWFrOw0KKwkJfQ0KKw0KKwkJZmxhZ3MgPSB2NGwyX2Vwbi5idXMucGFyYWxsZWwu ZmxhZ3M7DQorDQorCQlpZiAoZmxhZ3MgJiBWNEwyX01CVVNfSFNZTkNfQUNUSVZFX0xPVykNCisJ CQlzdWJkZXZfZW50aXR5LT5wZmVfY2ZnMCA9IElTQ19QRkVfQ0ZHMF9IUE9MX0xPVzsNCisNCisJ CWlmIChmbGFncyAmIFY0TDJfTUJVU19WU1lOQ19BQ1RJVkVfTE9XKQ0KKwkJCXN1YmRldl9lbnRp dHktPnBmZV9jZmcwIHw9IElTQ19QRkVfQ0ZHMF9WUE9MX0xPVzsNCisNCisJCWlmIChmbGFncyAm IFY0TDJfTUJVU19QQ0xLX1NBTVBMRV9GQUxMSU5HKQ0KKwkJCXN1YmRldl9lbnRpdHktPnBmZV9j ZmcwIHw9IElTQ19QRkVfQ0ZHMF9QUE9MX0xPVzsNCisNCisJCWlmICh2NGwyX2Vwbi5idXNfdHlw ZSA9PSBWNEwyX01CVVNfQlQ2NTYpDQorCQkJc3ViZGV2X2VudGl0eS0+cGZlX2NmZzAgfD0gSVND X1BGRV9DRkcwX0NDSVJfQ1JDIHwNCisJCQkJCUlTQ19QRkVfQ0ZHMF9DQ0lSNjU2Ow0KKw0KKwkJ c3ViZGV2X2VudGl0eS0+YXNkLT5tYXRjaF90eXBlID0gVjRMMl9BU1lOQ19NQVRDSF9GV05PREU7 DQorCQlzdWJkZXZfZW50aXR5LT5hc2QtPm1hdGNoLmZ3bm9kZSA9DQorCQkJb2ZfZndub2RlX2hh bmRsZShyZW0pOw0KKwkJbGlzdF9hZGRfdGFpbCgmc3ViZGV2X2VudGl0eS0+bGlzdCwgJmlzYy0+ c3ViZGV2X2VudGl0aWVzKTsNCisJfQ0KKw0KKwlvZl9ub2RlX3B1dChlcG4pOw0KKwlyZXR1cm4g cmV0Ow0KK30NCisNCitzdGF0aWMgaW50IGF0bWVsX2lzY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCisJ c3RydWN0IGlzY19kZXZpY2UgKmlzYzsNCisJc3RydWN0IHJlc291cmNlICpyZXM7DQorCXZvaWQg X19pb21lbSAqaW9fYmFzZTsNCisJc3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXZfZW50 aXR5Ow0KKwlpbnQgaXJxOw0KKwlpbnQgcmV0Ow0KKw0KKwlpc2MgPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKmlzYyksIEdGUF9LRVJORUwpOw0KKwlpZiAoIWlzYykNCisJCXJldHVybiAtRU5P TUVNOw0KKw0KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpc2MpOw0KKwlpc2MtPmRldiA9 IGRldjsNCisNCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0Vf TUVNLCAwKTsNCisJaW9fYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7DQor CWlmIChJU19FUlIoaW9fYmFzZSkpDQorCQlyZXR1cm4gUFRSX0VSUihpb19iYXNlKTsNCisNCisJ aXNjLT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oZGV2LCBpb19iYXNlLCAmaXNjX3Jl Z21hcF9jb25maWcpOw0KKwlpZiAoSVNfRVJSKGlzYy0+cmVnbWFwKSkgew0KKwkJcmV0ID0gUFRS X0VSUihpc2MtPnJlZ21hcCk7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0IHJlZ2lz dGVyIG1hcDogJWRcbiIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCWlycSA9IHBs YXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQorCWlmIChpcnEgPCAwKSB7DQorCQlyZXQgPSBpcnE7 DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgaXJxOiAlZFxuIiwgcmV0KTsNCisJCXJl dHVybiByZXQ7DQorCX0NCisNCisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgaXNj X2ludGVycnVwdCwgMCwNCisJCQkgICAgICAgQVRNRUxfSVNDX05BTUUsIGlzYyk7DQorCWlmIChy ZXQgPCAwKSB7DQorCQlkZXZfZXJyKGRldiwgImNhbid0IHJlZ2lzdGVyIElTUiBmb3IgSVJRICV1 IChyZXQ9JWkpXG4iLA0KKwkJCWlycSwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJ cmV0ID0gaXNjX3BpcGVsaW5lX2luaXQoaXNjKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7 DQorDQorCWlzYy0+aGNsb2NrID0gZGV2bV9jbGtfZ2V0KGRldiwgImhjbG9jayIpOw0KKwlpZiAo SVNfRVJSKGlzYy0+aGNsb2NrKSkgew0KKwkJcmV0ID0gUFRSX0VSUihpc2MtPmhjbG9jayk7DQor CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgaGNsb2NrOiAlZFxuIiwgcmV0KTsNCisJCXJl dHVybiByZXQ7DQorCX0NCisNCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGlzYy0+aGNsb2Nr KTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIGhjbG9j azogJWRcbiIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldCA9IGlzY19jbGtf aW5pdChpc2MpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0 IGlzYyBjbG9jazogJWRcbiIsIHJldCk7DQorCQlnb3RvIHVucHJlcGFyZV9oY2xrOw0KKwl9DQor DQorCWlzYy0+aXNwY2sgPSBpc2MtPmlzY19jbGtzW0lTQ19JU1BDS10uY2xrOw0KKw0KKwlyZXQg PSBjbGtfcHJlcGFyZV9lbmFibGUoaXNjLT5pc3Bjayk7DQorCWlmIChyZXQpIHsNCisJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBpc3BjazogJWRcbiIsIHJldCk7DQorCQlnb3RvIHVu cHJlcGFyZV9oY2xrOw0KKwl9DQorDQorCS8qIGlzcGNrIHNob3VsZCBiZSBncmVhdGVyIG9yIGVx dWFsIHRvIGhjbG9jayAqLw0KKwlyZXQgPSBjbGtfc2V0X3JhdGUoaXNjLT5pc3BjaywgY2xrX2dl dF9yYXRlKGlzYy0+aGNsb2NrKSk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFp bGVkIHRvIHNldCBpc3BjayByYXRlOiAlZFxuIiwgcmV0KTsNCisJCWdvdG8gdW5wcmVwYXJlX2Ns azsNCisJfQ0KKw0KKwlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3RlcihkZXYsICZpc2MtPnY0bDJf ZGV2KTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIg djRsMiBkZXZpY2UuXG4iKTsNCisJCWdvdG8gdW5wcmVwYXJlX2NsazsNCisJfQ0KKw0KKwlyZXQg PSBpc2NfcGFyc2VfZHQoZGV2LCBpc2MpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwg ImZhaWwgdG8gcGFyc2UgZGV2aWNlIHRyZWVcbiIpOw0KKwkJZ290byB1bnJlZ2lzdGVyX3Y0bDJf ZGV2aWNlOw0KKwl9DQorDQorCWlmIChsaXN0X2VtcHR5KCZpc2MtPnN1YmRldl9lbnRpdGllcykp IHsNCisJCWRldl9lcnIoZGV2LCAibm8gc3ViZGV2IGZvdW5kXG4iKTsNCisJCXJldCA9IC1FTk9E RVY7DQorCQlnb3RvIHVucmVnaXN0ZXJfdjRsMl9kZXZpY2U7DQorCX0NCisNCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeShzdWJkZXZfZW50aXR5LCAmaXNjLT5zdWJkZXZfZW50aXRpZXMsIGxpc3QpIHsN CisJCXY0bDJfYXN5bmNfbm90aWZpZXJfaW5pdCgmc3ViZGV2X2VudGl0eS0+bm90aWZpZXIpOw0K Kw0KKwkJcmV0ID0gdjRsMl9hc3luY19ub3RpZmllcl9hZGRfc3ViZGV2KCZzdWJkZXZfZW50aXR5 LT5ub3RpZmllciwNCisJCQkJCQkgICAgIHN1YmRldl9lbnRpdHktPmFzZCk7DQorCQlpZiAocmV0 KSB7DQorCQkJZndub2RlX2hhbmRsZV9wdXQoc3ViZGV2X2VudGl0eS0+YXNkLT5tYXRjaC5md25v ZGUpOw0KKwkJCWtmcmVlKHN1YmRldl9lbnRpdHktPmFzZCk7DQorCQkJZ290byBjbGVhbnVwX3N1 YmRldjsNCisJCX0NCisNCisJCXN1YmRldl9lbnRpdHktPm5vdGlmaWVyLm9wcyA9ICZpc2NfYXN5 bmNfb3BzOw0KKw0KKwkJcmV0ID0gdjRsMl9hc3luY19ub3RpZmllcl9yZWdpc3RlcigmaXNjLT52 NGwyX2RldiwNCisJCQkJCQkgICAmc3ViZGV2X2VudGl0eS0+bm90aWZpZXIpOw0KKwkJaWYgKHJl dCkgew0KKwkJCWRldl9lcnIoZGV2LCAiZmFpbCB0byByZWdpc3RlciBhc3luYyBub3RpZmllclxu Iik7DQorCQkJZ290byBjbGVhbnVwX3N1YmRldjsNCisJCX0NCisNCisJCWlmICh2aWRlb19pc19y ZWdpc3RlcmVkKCZpc2MtPnZpZGVvX2RldikpDQorCQkJYnJlYWs7DQorCX0NCisNCisJcG1fcnVu dGltZV9zZXRfYWN0aXZlKGRldik7DQorCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7DQorCXBtX3Jl cXVlc3RfaWRsZShkZXYpOw0KKw0KKwlyZXR1cm4gMDsNCisNCitjbGVhbnVwX3N1YmRldjoNCisJ aXNjX3N1YmRldl9jbGVhbnVwKGlzYyk7DQorDQordW5yZWdpc3Rlcl92NGwyX2RldmljZToNCisJ djRsMl9kZXZpY2VfdW5yZWdpc3RlcigmaXNjLT52NGwyX2Rldik7DQorDQordW5wcmVwYXJlX2Ns azoNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aXNwY2spOw0KK3VucHJlcGFyZV9oY2xr Og0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaXNjLT5oY2xvY2spOw0KKw0KKwlpc2NfY2xrX2Ns ZWFudXAoaXNjKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCBhdG1lbF9p c2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQorew0KKwlzdHJ1Y3QgaXNj X2RldmljZSAqaXNjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQorDQorCXBtX3J1bnRp bWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aXNw Y2spOw0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaXNjLT5oY2xvY2spOw0KKw0KKwlpc2Nfc3Vi ZGV2X2NsZWFudXAoaXNjKTsNCisNCisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmaXNjLT52NGwy X2Rldik7DQorDQorCWlzY19jbGtfY2xlYW51cChpc2MpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQor DQorc3RhdGljIGludCBfX21heWJlX3VudXNlZCBpc2NfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBk ZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsNCisNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aXNwY2spOw0KKwljbGtf ZGlzYWJsZV91bnByZXBhcmUoaXNjLT5oY2xvY2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQor c3RhdGljIGludCBfX21heWJlX3VudXNlZCBpc2NfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmlj ZSAqZGV2KQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOw0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaXNjLT5oY2xv Y2spOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0dXJuIGNsa19wcmVwYXJl X2VuYWJsZShpc2MtPmlzcGNrKTsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1f b3BzIGF0bWVsX2lzY19kZXZfcG1fb3BzID0gew0KKwlTRVRfUlVOVElNRV9QTV9PUFMoaXNjX3J1 bnRpbWVfc3VzcGVuZCwgaXNjX3J1bnRpbWVfcmVzdW1lLCBOVUxMKQ0KK307DQorDQorc3RhdGlj IGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXRtZWxfaXNjX29mX21hdGNoW10gPSB7DQorCXsg LmNvbXBhdGlibGUgPSAiYXRtZWwsc2FtYTVkMi1pc2MiIH0sDQorCXsgfQ0KK307DQorTU9EVUxF X0RFVklDRV9UQUJMRShvZiwgYXRtZWxfaXNjX29mX21hdGNoKTsNCisNCitzdGF0aWMgc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBhdG1lbF9pc2NfZHJpdmVyID0gew0KKwkucHJvYmUJPSBhdG1lbF9p c2NfcHJvYmUsDQorCS5yZW1vdmUJPSBhdG1lbF9pc2NfcmVtb3ZlLA0KKwkuZHJpdmVyCT0gew0K KwkJLm5hbWUJCT0gQVRNRUxfSVNDX05BTUUsDQorCQkucG0JCT0gJmF0bWVsX2lzY19kZXZfcG1f b3BzLA0KKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGF0bWVsX2lzY19vZl9tYXRj aCksDQorCX0sDQorfTsNCisNCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGF0bWVsX2lzY19kcml2 ZXIpOw0KKw0KK01PRFVMRV9BVVRIT1IoIlNvbmdqdW4gV3UiKTsNCitNT0RVTEVfREVTQ1JJUFRJ T04oIlRoZSBWNEwyIGRyaXZlciBmb3IgQXRtZWwtSVNDIik7DQorTU9EVUxFX0xJQ0VOU0UoIkdQ TCB2MiIpOw0KK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ2aWRlbyIpOw0KLS0gDQoyLjcuNA0K DQo=