Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp412192img; Wed, 20 Mar 2019 03:20:27 -0700 (PDT) X-Google-Smtp-Source: APXvYqxld/Zhw3N5bwss/mKqsyOCZ9BsFkL2E5aazKABa6gI4A1boDQhuDUSzPzULC5aps9+gNzX X-Received: by 2002:a17:902:a702:: with SMTP id w2mr7266251plq.341.1553077226974; Wed, 20 Mar 2019 03:20:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553077226; cv=none; d=google.com; s=arc-20160816; b=jh3xySMk0ISrvL/gAEHedb21RQdE/CcZcltPBLQRNTd2s+WpWseE3Me99d3N4sm77f NQZu6DnZyI199elSjBAF7fui8qovLKmxGqemc/roE/1ESr9kzDLAmBA4oQjctAjvIJJj C9Pmy4xEK4GWW4K/p/us0ng2G+WIjuWySOzUUIojnBBpv7n7RBAX8xTr6feFoxgcgCnW iTwnkTifhkc6scYeP/LAfO2uB+lOfkBk311yvQjh5Jpp27BfQfxRntiAofCSq4f942b+ H26HrZRJC7Q704lyYm7q5NBhqYEaE3aqs4GZHpjr7sdzVR8XPURyXNf4QCSQatmGi2q2 Rg5A== 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:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=qiAWLjrZTCd46GCD2hDKrWWzLMTuoH+uc2+0FiWr3T8=; b=KvdMr8+zfl3xp+NhysOmPl59h7oD7ZWb873UYl3Tjumhs0nzahjWqZZshVibYsHIoy epe0e26nIM/Xb+1kjqrxn0JPbRIHxjQYGbuKJ1lQtRvRFoEdncDR7lvOR0LHha6hqMmQ FwappIyuf3FJQ/4HWiULdjdGmM3bc5rRCB6lamtllDKmaWN0R/ip3MLNcSYD82zNdTdb RilmcEb8TPw7dYIz+y6H0XhjOZwsZf/7JV8o60Hg+VhzvQunr2/waCRkm29mrXEQFwYt 9tyvGw/V/SJPI0oQToaRXBHTLvrns0twQtllRVYc5PQaVMFOk9omeOHjuWhQUk2MVDnc vuvA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=nHMtmDVE; 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=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b13si1429552pgn.138.2019.03.20.03.20.10; Wed, 20 Mar 2019 03:20:26 -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=@nxp.com header.s=selector1 header.b=nHMtmDVE; 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=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726707AbfCTKSJ (ORCPT + 99 others); Wed, 20 Mar 2019 06:18:09 -0400 Received: from mail-eopbgr140077.outbound.protection.outlook.com ([40.107.14.77]:64750 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726123AbfCTKSI (ORCPT ); Wed, 20 Mar 2019 06:18:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qiAWLjrZTCd46GCD2hDKrWWzLMTuoH+uc2+0FiWr3T8=; b=nHMtmDVEo/hlfxA5fbzfAZand2+RtvsIV0zcR/v3mzFd9q+/k5GZmg2+JCcFBCkcpIgCPxubMUOGoCkEis3+3o5dI2/NjG41u50WOWVBRb21FmIKuTds/dAGwI2gIGzIWCCN06rqFKNA8t8M/C9FEtPJgcbE8whLWracbHkQH2Y= Received: from AM6PR0402MB3911.eurprd04.prod.outlook.com (52.133.30.10) by AM6PR0402MB3911.eurprd04.prod.outlook.com (52.133.30.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.15; Wed, 20 Mar 2019 10:17:50 +0000 Received: from AM6PR0402MB3911.eurprd04.prod.outlook.com ([fe80::7cb2:3013:bfa9:8ddd]) by AM6PR0402MB3911.eurprd04.prod.outlook.com ([fe80::7cb2:3013:bfa9:8ddd%4]) with mapi id 15.20.1730.013; Wed, 20 Mar 2019 10:17:50 +0000 From: Anson Huang To: =?utf-8?B?VXdlIEtsZWluZS1Lw7ZuaWc=?= CC: "thierry.reding@gmail.com" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , "shawnguo@kernel.org" , "s.hauer@pengutronix.de" , "kernel@pengutronix.de" , "festevam@gmail.com" , "linux@armlinux.org.uk" , "otavio@ossystems.com.br" , "stefan@agner.ch" , Leonard Crestez , "schnitzeltony@gmail.com" , Robin Gong , "linux-pwm@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , dl-linux-imx Subject: RE: [PATCH V7 2/5] pwm: Add i.MX TPM PWM driver support Thread-Topic: [PATCH V7 2/5] pwm: Add i.MX TPM PWM driver support Thread-Index: AQHU3tqo2boXezZoJUaa/A7s1tKOsqYULWoAgAARNrA= Date: Wed, 20 Mar 2019 10:17:50 +0000 Message-ID: References: <1553058067-18793-1-git-send-email-Anson.Huang@nxp.com> <1553058067-18793-3-git-send-email-Anson.Huang@nxp.com> <20190320081856.wkw55pmw57i4ifdj@pengutronix.de> In-Reply-To: <20190320081856.wkw55pmw57i4ifdj@pengutronix.de> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=anson.huang@nxp.com; x-originating-ip: [119.31.174.69] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 05efd0af-c49b-4acc-52f7-08d6ad1d4e8d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM6PR0402MB3911; x-ms-traffictypediagnostic: AM6PR0402MB3911: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-forefront-prvs: 098291215C x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(136003)(346002)(39860400002)(376002)(396003)(189003)(199004)(13464003)(54906003)(66066001)(44832011)(14444005)(256004)(478600001)(316002)(55016002)(6306002)(97736004)(7416002)(966005)(86362001)(66574012)(71190400001)(71200400001)(11346002)(476003)(81166006)(81156014)(486006)(8676002)(45080400002)(446003)(25786009)(14454004)(99286004)(6506007)(68736007)(76176011)(102836004)(53546011)(52536014)(7696005)(305945005)(6916009)(6246003)(6436002)(4326008)(53946003)(53936002)(26005)(229853002)(106356001)(105586002)(9686003)(3846002)(6116002)(186003)(5660300002)(8936002)(7736002)(33656002)(30864003)(74316002)(2906002)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR0402MB3911;H:AM6PR0402MB3911.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: m2In/QzNOjVLeT9sqozJ77J3nzDx/pwogp5taLkUmKhIyRa9jUKrDbkeuklaL+t859PAVc4whNGRFVjJs7U1DgLOD3QxrR5nRPohZnnlKrizBKpormJucLb6r9W2ccloGjivFgwZ1ageG4g94FCySyIutzRaxdd04Cw6eVec+K/8brU+o4oCywbwi+xuAgGpmEuC5R+Fx4yCDts5pYZ6rWdRNRqKh8OaVuLrJVjbJM0nZJUT8y3KCsv0HpNUBAbc46YtB+9VT0RC82xty2+B1HAMMxA5kTUzkEmC/zQ9giFK1GDjshrfnqjy2qha9jJ4MJ+Gz3ChwXc+NQhh40IwMFPYUIY6dQh4WZMKq78ebQpzadhLZ4BOT3884Ge4wDbjPivHrFDHb94F2swSW0QaZ1RJg5gePCtRLnMPi0trjh0= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 05efd0af-c49b-4acc-52f7-08d6ad1d4e8d X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Mar 2019 10:17:50.1904 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR0402MB3911 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGksIFV3ZQ0KDQpCZXN0IFJlZ2FyZHMhDQpBbnNvbiBIdWFuZw0KDQo+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+IEZyb206IFV3ZSBLbGVpbmUtS8O2bmlnIFttYWlsdG86dS5rbGVpbmUt a29lbmlnQHBlbmd1dHJvbml4LmRlXQ0KPiBTZW50OiAyMDE55bm0M+aciDIw5pelIDE2OjE5DQo+ IFRvOiBBbnNvbiBIdWFuZyA8YW5zb24uaHVhbmdAbnhwLmNvbT4NCj4gQ2M6IHRoaWVycnkucmVk aW5nQGdtYWlsLmNvbTsgcm9iaCtkdEBrZXJuZWwub3JnOyBtYXJrLnJ1dGxhbmRAYXJtLmNvbTsN Cj4gc2hhd25ndW9Aa2VybmVsLm9yZzsgcy5oYXVlckBwZW5ndXRyb25peC5kZTsga2VybmVsQHBl bmd1dHJvbml4LmRlOw0KPiBmZXN0ZXZhbUBnbWFpbC5jb207IGxpbnV4QGFybWxpbnV4Lm9yZy51 azsgb3RhdmlvQG9zc3lzdGVtcy5jb20uYnI7DQo+IHN0ZWZhbkBhZ25lci5jaDsgTGVvbmFyZCBD cmVzdGV6IDxsZW9uYXJkLmNyZXN0ZXpAbnhwLmNvbT47DQo+IHNjaG5pdHplbHRvbnlAZ21haWwu Y29tOyBSb2JpbiBHb25nIDx5aWJpbi5nb25nQG54cC5jb20+OyBsaW51eC0NCj4gcHdtQHZnZXIu a2VybmVsLm9yZzsgZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWFybS0NCj4ga2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGRs LWxpbnV4LWlteA0KPiA8bGludXgtaW14QG54cC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0gg VjcgMi81XSBwd206IEFkZCBpLk1YIFRQTSBQV00gZHJpdmVyIHN1cHBvcnQNCj4gDQo+IEhlbGxv LA0KPiANCj4gT24gV2VkLCBNYXIgMjAsIDIwMTkgYXQgMDU6MDY6MjFBTSArMDAwMCwgQW5zb24g SHVhbmcgd3JvdGU6DQo+ID4gaS5NWDdVTFAgaGFzIFRQTShMb3cgUG93ZXIgVGltZXIvUHVsc2Ug V2lkdGggTW9kdWxhdGlvbiBNb2R1bGUpDQo+ID4gaW5zaWRlLCBpdCBjYW4gc3VwcG9ydCBtdWx0 aXBsZSBQV00gY2hhbm5lbHMsIGFsbCB0aGUgY2hhbm5lbHMgc2hhcmUNCj4gPiBzYW1lIGNvdW50 ZXIgYW5kIHBlcmlvZCBzZXR0aW5nLCBidXQgZWFjaCBjaGFubmVsIGNhbiBjb25maWd1cmUgaXRz DQo+ID4gZHV0eSBhbmQgcG9sYXJpdHkgaW5kZXBlbmRlbnRseS4NCj4gPg0KPiA+IFRoZXJlIGFy ZSBzZXZlcmFsIFRQTSBtb2R1bGVzIGluIGkuTVg3VUxQLCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxz IGluDQo+ID4gVFBNIG1vZHVsZXMgYXJlIGRpZmZlcmVudCwgaXQgY2FuIGJlIHJlYWQgZnJvbSBl YWNoIFRQTSBtb2R1bGUncyBQQVJBTQ0KPiA+IHJlZ2lzdGVyLg0KPiA+DQo+ID4gU2lnbmVkLW9m Zi1ieTogQW5zb24gSHVhbmcgPEFuc29uLkh1YW5nQG54cC5jb20+DQo+ID4gLS0tDQo+ID4gQ2hh bmdlcyBzaW5jZSBWNjoNCj4gPiAJLSBtZXJnZSAiY29uZmlnIiBhbmQgImVuYWJsZSIgZnVuY3Rp b25zIGludG8gT05FIGZ1bmN0aW9uDQo+IHB3bV9pbXhfdHBtX2FwcGx5X2h3Ow0KPiA+IAktIHNh dmUgY29tcHV0YXRpb24gZm9yIGNvbmZpdXJpbmcgY291bnRlciwgdGhlICJyb3VuZF9zdGF0ZSIN Cj4gZnVuY3Rpb24gd2lsbCByZXR1cm4NCj4gPiAJICB0aGUgcmVnaXN0ZXJzIHZhbHVlIGRpcmVj dGx5Ow0KPiA+IAktIGltcHJvdmUgdGhlIGxvZ2ljIGluIC5hcHBseTsNCj4gPiAJLSByZXR1cm4g ZXJyb3Igd2hlbiB0aGVyZSBpcyBzdGlsbCBQV00gYWN0aXZlIGR1cmluZyBzdXNwZW5kIGNhbGxi YWNrLg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL3B3bS9LY29uZmlnICAgICAgIHwgIDExICsrDQo+ ID4gIGRyaXZlcnMvcHdtL01ha2VmaWxlICAgICAgfCAgIDEgKw0KPiA+ICBkcml2ZXJzL3B3bS9w d20taW14LXRwbS5jIHwgNDI4DQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKw0KPiA+ICAzIGZpbGVzIGNoYW5nZWQsIDQ0MCBpbnNlcnRpb25zKCspDQo+ ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3B3bS9wd20taW14LXRwbS5jDQo+ID4NCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wd20vS2NvbmZpZyBiL2RyaXZlcnMvcHdtL0tjb25maWcg aW5kZXgNCj4gPiA1NGY4MjM4Li4zZWEwMzkxIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvcHdt L0tjb25maWcNCj4gPiArKysgYi9kcml2ZXJzL3B3bS9LY29uZmlnDQo+ID4gQEAgLTIxMCw2ICsy MTAsMTcgQEAgY29uZmlnIFBXTV9JTVgyNw0KPiA+ICAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVy IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlDQo+ID4gIAkgIHdpbGwgYmUg Y2FsbGVkIHB3bS1pbXgyNy4NCj4gPg0KPiA+ICtjb25maWcgUFdNX0lNWF9UUE0NCj4gPiArCXRy aXN0YXRlICJpLk1YIFRQTSBQV00gc3VwcG9ydCINCj4gPiArCWRlcGVuZHMgb24gQVJDSF9NWEMg fHwgQ09NUElMRV9URVNUDQo+ID4gKwlkZXBlbmRzIG9uIEhBVkVfQ0xLICYmIEhBU19JT01FTQ0K PiA+ICsJaGVscA0KPiA+ICsJICBHZW5lcmljIFBXTSBmcmFtZXdvcmsgZHJpdmVyIGZvciBpLk1Y N1VMUCBUUE0gbW9kdWxlLCBUUE0ncw0KPiBmdWxsDQo+ID4gKwkgIG5hbWUgaXMgTG93IFBvd2Vy IFRpbWVyL1B1bHNlIFdpZHRoIE1vZHVsYXRpb24gTW9kdWxlLg0KPiA+ICsNCj4gPiArCSAgVG8g Y29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVs ZQ0KPiA+ICsJICB3aWxsIGJlIGNhbGxlZCBwd20taW14LXRwbS4NCj4gPiArDQo+ID4gIGNvbmZp ZyBQV01fSlo0NzQwDQo+ID4gIAl0cmlzdGF0ZSAiSW5nZW5pYyBKWjQ3eHggUFdNIHN1cHBvcnQi DQo+ID4gIAlkZXBlbmRzIG9uIE1BQ0hfSU5HRU5JQw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3B3bS9NYWtlZmlsZSBiL2RyaXZlcnMvcHdtL01ha2VmaWxlIGluZGV4DQo+ID4gNDQ4ODI1ZS4u YzM2ODU5OSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3B3bS9NYWtlZmlsZQ0KPiA+ICsrKyBi L2RyaXZlcnMvcHdtL01ha2VmaWxlDQo+ID4gQEAgLTE5LDYgKzE5LDcgQEAgb2JqLSQoQ09ORklH X1BXTV9ISUJWVCkJCSs9IHB3bS0NCj4gaGlidnQubw0KPiA+ICBvYmotJChDT05GSUdfUFdNX0lN RykJCSs9IHB3bS1pbWcubw0KPiA+ICBvYmotJChDT05GSUdfUFdNX0lNWDEpCQkrPSBwd20taW14 MS5vDQo+ID4gIG9iai0kKENPTkZJR19QV01fSU1YMjcpCQkrPSBwd20taW14Mjcubw0KPiA+ICtv YmotJChDT05GSUdfUFdNX0lNWF9UUE0pCSs9IHB3bS1pbXgtdHBtLm8NCj4gPiAgb2JqLSQoQ09O RklHX1BXTV9KWjQ3NDApCSs9IHB3bS1qejQ3NDAubw0KPiA+ICBvYmotJChDT05GSUdfUFdNX0xQ Mzk0MykJKz0gcHdtLWxwMzk0My5vDQo+ID4gIG9iai0kKENPTkZJR19QV01fTFBDMThYWF9TQ1Qp CSs9IHB3bS1scGMxOHh4LXNjdC5vDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHdtL3B3bS1p bXgtdHBtLmMgYi9kcml2ZXJzL3B3bS9wd20taW14LXRwbS5jDQo+IG5ldw0KPiA+IGZpbGUgbW9k ZSAxMDA2NDQgaW5kZXggMDAwMDAwMC4uMDI0MDNkMA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiAr KysgYi9kcml2ZXJzL3B3bS9wd20taW14LXRwbS5jDQo+ID4gQEAgLTAsMCArMSw0MjggQEANCj4g PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICog Q29weXJpZ2h0IDIwMTgtMjAxOSBOWFAuDQo+ID4gKyAqDQo+ID4gKyAqIExpbWl0YXRpb25zOg0K PiA+ICsgKiAtIFRoZSBUUE0gY291bnRlciBhbmQgcGVyaW9kIGNvdW50ZXIgYXJlIHNoYXJlZCBi ZXR3ZWVuDQo+ID4gKyAqICAgbXVsdGlwbGUgY2hhbm5lbHMsIHNvIGFsbCBjaGFubmVscyBzaG91 bGQgdXNlIHNhbWUgcGVyaW9kDQo+ID4gKyAqICAgc2V0dGluZ3MuDQo+ID4gKyAqLw0KPiA+ICsN Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9i aXRvcHMuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvZXJyLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pby5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvbG9nMi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9vZi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KPiA+ICsj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9w d20uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gPiArDQo+ID4gKyNkZWZpbmUg UFdNX0lNWF9UUE1fUEFSQU0JMHg0DQo+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fR0xPQkFMCTB4 OA0KPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX1NDCQkweDEwDQo+ID4gKyNkZWZpbmUgUFdNX0lN WF9UUE1fQ05UCQkweDE0DQo+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fTU9ECQkweDE4DQo+ID4g KyNkZWZpbmUgUFdNX0lNWF9UUE1fQ25TQyhuKQkoMHgyMCArIChuKSAqIDB4OCkNCj4gPiArI2Rl ZmluZSBQV01fSU1YX1RQTV9DblYobikJKDB4MjQgKyAobikgKiAweDgpDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFBXTV9JTVhfVFBNX1BBUkFNX0NIQU4JCQlHRU5NQVNLKDcsDQo+IDApDQo+ID4gKw0K PiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX1NDX1BTCQkJR0VOTUFTSygyLCAwKQ0KPiA+ICsjZGVm aW5lIFBXTV9JTVhfVFBNX1NDX0NNT0QJCQlHRU5NQVNLKDQsIDMpDQo+ID4gKyNkZWZpbmUgUFdN X0lNWF9UUE1fU0NfQ01PRF9JTkNfRVZFUllfQ0xLCUJJVCgzKQ0KPiANCj4gI2RlZmluZSBQV01f SU1YX1RQTV9TQ19DTU9EX0lOQ19FVkVSWV9DTEsNCj4gCUZJRUxEX1BSRVAoUFdNX0lNWF9UUE1f U0NfQ01PRCwgMSkNCj4gDQo+ID8NCg0KWWVzLCBpdCBtYWtlcyBtb3JlIHNlbnNlLg0KDQo+IA0K PiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX1NDX0NQV01TCQkJQklUKDUpDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfQ0hGCUJJVCg3KQ0KPiA+ICsjZGVmaW5lIFBXTV9JTVhf VFBNX0NuU0NfTVNCCUJJVCg1KQ0KPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfTVNBCUJJ VCg0KQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogVGhlIHJlZmVyZW5jZSBtYW51YWwgZGVzY3Jp YmVzIHRoaXMgZmllbGQgYXMgdHdvIHNlcGFyYXRlIGJpdHMuDQo+ID4gK1RoZQ0KPiA+ICsgKiBz YW1hbnRpYyBvZiB0aGUgdHdvIGJpdHMgaXNuJ3Qgb3J0aG9nb25hbCB0aG91Z2gsIHNvIHRoZXkg YXJlDQo+ID4gK3RyZWF0ZWQNCj4gPiArICogdG9nZXRoZXIgYXMgYSAyLWJpdCBmaWVsZCBoZXJl Lg0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBQV01fSU1YX1RQTV9DblNDX0VMUwlHRU5NQVNLKDMs IDIpDQo+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fQ25TQ19FTFNfUE9MQVJJVFlfSU5WRVJTRUQJ MHgxDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX01PRF9NT0QJR0VOTUFTSygxNSwg MCkNCj4gPiArDQo+ID4gK3N0cnVjdCBpbXhfdHBtX3B3bV9jaGlwIHsNCj4gPiArCXN0cnVjdCBw d21fY2hpcCBjaGlwOw0KPiA+ICsJc3RydWN0IGNsayAqY2xrOw0KPiA+ICsJdm9pZCBfX2lvbWVt ICpiYXNlOw0KPiA+ICsJc3RydWN0IG11dGV4IGxvY2s7DQo+ID4gKwl1MzIgdXNlcl9jb3VudDsN Cj4gPiArCXUzMiBlbmFibGVfY291bnQ7DQo+ID4gKwl1MzIgcmVhbF9wZXJpb2Q7DQo+ID4gK307 DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgaW14X3RwbV9wd21fcGFyYW0gew0KPiA+ICsJdTggcHJlc2Nh bGU7DQo+ID4gKwl1MzIgbW9kOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBz dHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdG9faW14X3RwbV9wd21fY2hpcChzdHJ1Y3QNCj4gPiAr cHdtX2NoaXAgKmNoaXApIHsNCj4gPiArCXJldHVybiBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0 IGlteF90cG1fcHdtX2NoaXAsIGNoaXApOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHB3bV9p bXhfdHBtX3JvdW5kX3N0YXRlKHN0cnVjdCBwd21fY2hpcCAqY2hpcCwNCj4gPiArCQkJCSAgIHN0 cnVjdCBpbXhfdHBtX3B3bV9wYXJhbSAqcCwNCj4gPiArCQkJCSAgIHN0cnVjdCBwd21fc3RhdGUg KnN0YXRlLA0KPiA+ICsJCQkJICAgc3RydWN0IHB3bV9zdGF0ZSAqcmVhbF9zdGF0ZSkNCj4gPiAr ew0KPiA+ICsJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lteF90cG1fcHdtX2No aXAoY2hpcCk7DQo+ID4gKwl1MzIgcmF0ZSwgcHJlc2NhbGUsIHBlcmlvZF9jb3VudCwgY2xvY2tf dW5pdDsNCj4gPiArCXU2NCB0bXA7DQo+ID4gKw0KPiA+ICsJcmF0ZSA9IGNsa19nZXRfcmF0ZSh0 cG0tPmNsayk7DQo+ID4gKwl0bXAgPSAodTY0KXN0YXRlLT5wZXJpb2QgKiByYXRlOw0KPiA+ICsJ Y2xvY2tfdW5pdCA9IERJVl9ST1VORF9DTE9TRVNUX1VMTCh0bXAsIE5TRUNfUEVSX1NFQyk7DQo+ ID4gKwlpZiAoY2xvY2tfdW5pdCA8PSBQV01fSU1YX1RQTV9NT0RfTU9EKSB7DQo+ID4gKwkJcHJl c2NhbGUgPSAwOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlwcmVzY2FsZSA9IHJvdW5kdXBfcG93 X29mX3R3byhjbG9ja191bml0KTsNCj4gPiArCQlwcmVzY2FsZSA9IGlsb2cyKHByZXNjYWxlKSAt IDE2Ow0KPiANCj4gVGhpcyAxNiBzaG91bGQgYmUgYSBkZWZpbmUgdG8gbWFrZSBpdCBvYnZpb3Vz IHdoZXJlIGl0IGNvbWVzIGZyb20uDQo+IA0KPiBNYXliZSB1c2U6DQo+IA0KPiAJI2RlZmluZSBQ V01fSU1YX1RQTV9NT0RfV0lEVEgJMTYNCj4gCSNkZWZpbmUgUFdNX0lNWF9UUE1fTU9EX01PRA0K PiAJR0VOTUFTSyhQV01fSU1YX1RQTV9NT0RfV0lEVEggLSAxLCAwKQ0KPiANCj4gPw0KPiANCj4g SWYgY2xvY2tfdW5pdCBoYXBwZW5zIHRvIGJlIDB4MTAwMDAsIHdlIGVuZCB1cCB3aXRoIHByZXNj YWxlID0gMCB3aGljaCBpcw0KPiB3cm9uZy4gSSB0aGluayB3ZSBuZWVkOg0KPiANCj4gCX0gZWxz ZSB7DQo+IAkJcHJlc2NhbGUgPSBpbG9nMihjbG9ja191bml0KSArIDEgLQ0KPiBQV01fSU1YX1RQ TV9NT0RfV0lEVEg7DQo+IA0KPiB3aXRob3V0IHRoZSByb3VuZHVwLg0KDQoNCk9LLg0KDQo+IA0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmICgoIUZJRUxEX0ZJVChQV01fSU1YX1RQTV9TQ19QUywg cHJlc2NhbGUpKSkNCj4gPiArCQlyZXR1cm4gLUVSQU5HRTsNCj4gPiArCXAtPnByZXNjYWxlID0g cHJlc2NhbGU7DQo+ID4gKw0KPiA+ICsJcGVyaW9kX2NvdW50ID0gKGNsb2NrX3VuaXQgKyAoKDEg PDwgcHJlc2NhbGUpID4+IDEpKSA+PiBwcmVzY2FsZTsNCj4gPiArCWlmIChwZXJpb2RfY291bnQg PiBQV01fSU1YX1RQTV9NT0RfTU9EKQ0KPiA+ICsJCXJldHVybiAtRVJBTkdFOw0KPiANCj4gVGhp cyBjaGVjayAodG9nZXRoZXIgd2l0aCB0aGUgcmlnaHQgd2F5IHRvIGNhbGN1bGF0ZSBwcmVzY2Fs ZSkgaXMgdGhlb3JldGljYWxseQ0KPiBzdXBlcmZsb3VzLiBwZXJpb2RfY291bnQgY2Fubm90IGJl IGJpZ2dlciB0aGFuDQo+IFBXTV9JTVhfVFBNX01PRF9NT0QuIEknZCBlaXRoZXIgZHJvcCB0aGF0 IGNoZWNrIG9yIGFkZCBhIHNjYXJ5DQo+IHdhcm5pbmcgdG8gbWFrZSBwZW9wbGUgaGl0dGluZyB0 aGlzIHJlcG9ydCB0aGUgcmVzcGVjdGl2ZSBwYXJhbWV0ZXJzLg0KDQpZZWFoLCB0aGUgY2hlY2sg Zm9yIHRoZSBwcmVzY2FsZSBpcyBlbm91Z2gsIEkgd2lsbCBkcm9wIHRoaXMgY2hlY2suDQoNCj4g DQo+ID4gKwlwLT5tb2QgPSBwZXJpb2RfY291bnQ7DQo+ID4gKw0KPiA+ICsJLyogY2FsY3VsYXRl IHJlYWwgcGVyaW9kIEhXIGNhbiBzdXBwb3J0ICovDQo+ID4gKwl0bXAgPSAodTY0KXBlcmlvZF9j b3VudCA8PCBwcmVzY2FsZTsNCj4gPiArCXRtcCAqPSBOU0VDX1BFUl9TRUM7DQo+ID4gKwlyZWFs X3N0YXRlLT5wZXJpb2QgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwodG1wLCByYXRlKTsNCj4gPiAr DQo+ID4gKwkvKg0KPiA+ICsJICogaWYgZXZlbnR1YWxseSB0aGUgUFdNIG91dHB1dCBpcyBMT1cs IGVpdGhlcg0KPiA+ICsJICogZHV0eSBjeWNsZSBpcyAwIG9yIHN0YXR1cyBpcyBkaXNhYmxlZCwg bmVlZA0KPiA+ICsJICogdG8gbWFrZSBzdXJlIHRoZSBvdXRwdXQgcGluIGlzIExPVy4NCj4gDQo+ IHMvTE9XL2luYWN0aXZlLywgdGhlbiBpdCdzIGFsc28gdHJ1ZSBmb3IgaW52ZXJzZWQgcG9sYXJp dHkuDQoNCk9LLg0KDQo+IA0KPiA+ICsJICovDQo+ID4gKwlpZiAoIXN0YXRlLT5lbmFibGVkKQ0K PiA+ICsJCXJlYWxfc3RhdGUtPmR1dHlfY3ljbGUgPSAwOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXJl YWxfc3RhdGUtPmR1dHlfY3ljbGUgPSBzdGF0ZS0+ZHV0eV9jeWNsZTsNCj4gPiArDQo+ID4gKwly ZWFsX3N0YXRlLT5wb2xhcml0eSA9IHN0YXRlLT5wb2xhcml0eTsNCj4gPiArCXJlYWxfc3RhdGUt PmVuYWJsZWQgPSBzdGF0ZS0+ZW5hYmxlZDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcHdtX2lteF90cG1fY29uZmlnX2NvdW50ZXIoc3Ry dWN0IHB3bV9jaGlwICpjaGlwLA0KPiA+ICsJCQkJICAgICAgIHN0cnVjdCBpbXhfdHBtX3B3bV9w YXJhbSBwKQ0KPiANCj4gUGxlYXNlIHBhc3MgcCBhcyBhIHBvaW50ZXIuIEkgdGhpbmsgcHdtX2lt eF90cG1fc2V0dXBfcGVyaW9kIGlzIGEgYmV0dGVyDQo+IG5hbWUgaGVyZS4NCg0KT0suDQoNCg0K PiANCj4gPiArew0KPiA+ICsJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lteF90 cG1fcHdtX2NoaXAoY2hpcCk7DQo+ID4gKwl1MzIgdmFsLCBzYXZlZF9jbW9kOw0KPiA+ICsNCj4g PiArCS8qIG1ha2Ugc3VyZSBjb3VudGVyIGlzIGRpc2FibGVkIGZvciBwcm9ncmFtbWluZyBwcmVz Y2FsZSAqLw0KPiA+ICsJdmFsID0gcmVhZGwodHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fU0MpOw0K PiA+ICsJc2F2ZWRfY21vZCA9IEZJRUxEX0dFVChQV01fSU1YX1RQTV9TQ19DTU9ELCB2YWwpOw0K PiA+ICsJaWYgKHNhdmVkX2Ntb2QpIHsNCj4gPiArCQl2YWwgJj0gflBXTV9JTVhfVFBNX1NDX0NN T0Q7DQo+ID4gKwkJd3JpdGVsKHZhbCwgdHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fU0MpOw0KPiAN Cj4gSSB0aG91Z2h0IHdlIGFncmVlZCBvbiBub3Qgc3RvcHBpbmcgdGhlIGNvdW50ZXIgaWYgdGhl IFBTIGZpZWxkIGlzbid0IGNoYW5nZWQ/DQoNCklmIHRoZSBQUyBmaWVsZCBubyBuZWVkIHRvIGNo YW5nZSwgdGhlIHJvdW5kIHN0YXRlIHNob3VsZCBhbHJlYWR5IHJldHVybiB0aGUgcGVyaW9kDQpl cXVhbCB0byBjdXJyZW50IHBlcmlvZCBzZXR0aW5ncywgc28gdGhpcyBmdW5jdGlvbiB3aWxsIE5P VCBiZSBjYWxsZWQsIHJpZ2h0Pw0KDQogICAgICAgICBpZiAocmVhbF9zdGF0ZS5wZXJpb2QgIT0g dHBtLT5yZWFsX3BlcmlvZCkgew0KICAgICAgICAgICAgICAgICBpZiAodHBtLT51c2VyX2NvdW50 ID4gMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsNCiAgICAgICAg ICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7DQogICAgICAgICAgICAgICAgIH0NCg0KCXB3bV9p bXhfdHBtX3NldHVwX3BlcmlvZChjaGlwLCBwYXJhbSk7DQogICAgICAgICAgICAgICAgIHRwbS0+ cmVhbF9wZXJpb2QgPSByZWFsX3N0YXRlLnBlcmlvZDsNCiAgICAgICAgfSANCg0KPiANCj4gPiAr CX0NCj4gPiArDQo+ID4gKwkvKiBzZXQgVFBNIGNvdW50ZXIgcHJlc2NhbGUgKi8NCj4gPiArCXZh bCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCj4gDQo+IHZhbCBhbHJlYWR5 IGhvbGRzIHRoaXMgcmVnaXN0ZXIgdmFsdWUsIG5vIG5lZWQgdG8gcmVyZWFkLg0KDQpPSy4NCg0K PiANCj4gPiArCXZhbCAmPSB+UFdNX0lNWF9UUE1fU0NfUFM7DQo+ID4gKwl2YWwgfD0gRklFTERf UFJFUChQV01fSU1YX1RQTV9TQ19QUywgcC5wcmVzY2FsZSk7DQo+ID4gKwl3cml0ZWwodmFsLCB0 cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9TQyk7DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIHNl dCBwZXJpb2QgY291bnQ6IGFjY29yZGluZyB0byBSTSwgdGhlIE1PRCByZWdpc3RlciBpcw0KPiA+ ICsJICogdXBkYXRlZCBpbW1lZGlhdGVseSBhZnRlciBDTU9EWzE6MF0gPSAyYicwMCBhYm92ZQ0K PiA+ICsJICovDQo+IA0KPiBTbyB0aGUgY3VycmVudCBwZXJpb2QgaXNuJ3QgY29tcGxldGVkPyBU aGF0J3Mgd3JvbmcuDQoNClNvIHlvdSBtZWFuIHdlIGhhdmUgdG8gd2FpdCBmb3IgdGhlIGN1cnJl bnQgcGVyaW9kIHRvIGZpbmlzaCBoZXJlPw0KSSBkaWQgTk9UIGtub3cgdGhpcywgc28gd2UgaGF2 ZSB0byBjb21wYXJlIHRoZSBjb3VudGVyIHZhbHVlIHdpdGgNCnRoZSBNT0QgdmFsdWUgdW50aWwg dGhleSBtYXRjaCB0aGVuIHByb2NlZWQgdGhlIHBlcmlvZCBjaGFuZ2U/DQoNCj4gDQo+ID4gKwl3 cml0ZWwocC5tb2QsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX01PRCk7DQo+ID4gKw0KPiA+ICsJ LyogcmVzdG9yZSB0aGUgY2xvY2sgbW9kZSBpZiBuZWNlc3NhcnkgKi8NCj4gPiArCWlmIChzYXZl ZF9jbW9kKSB7DQo+ID4gKwkJdmFsID0gcmVhZGwodHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fU0Mp Ow0KPiA+ICsJCXZhbCB8PSBGSUVMRF9QUkVQKFBXTV9JTVhfVFBNX1NDX0NNT0QsIHNhdmVkX2Nt b2QpOw0KPiA+ICsJCXdyaXRlbCh2YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCj4g PiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcHdtX2lteF90cG1fZ2V0X3N0 YXRlKHN0cnVjdCBwd21fY2hpcCAqY2hpcCwNCj4gPiArCQkJCSAgc3RydWN0IHB3bV9kZXZpY2Ug KnB3bSwNCj4gPiArCQkJCSAgc3RydWN0IHB3bV9zdGF0ZSAqc3RhdGUpDQo+ID4gK3sNCj4gPiAr CXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSB0b19pbXhfdHBtX3B3bV9jaGlwKGNoaXAp Ow0KPiA+ICsJdTMyIHJhdGUsIHZhbDsNCj4gPiArCXU2NCB0bXA7DQo+ID4gKw0KPiA+ICsJLyog Z2V0IHBlcmlvZCAqLw0KPiA+ICsJc3RhdGUtPnBlcmlvZCA9IHRwbS0+cmVhbF9wZXJpb2Q7DQo+ ID4gKw0KPiA+ICsJLyogZ2V0IGR1dHkgY3ljbGUgKi8NCj4gPiArCXJhdGUgPSBjbGtfZ2V0X3Jh dGUodHBtLT5jbGspOw0KPiA+ICsJdmFsID0gcmVhZGwodHBtLT5iYXNlICsgUFdNX0lNWF9UUE1f U0MpOw0KPiA+ICsJdmFsID0gRklFTERfR0VUKFBXTV9JTVhfVFBNX1NDX1BTLCB2YWwpOw0KPiA+ ICsJdG1wID0gcmVhZGwodHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fQ25WKHB3bS0+aHdwd20pKTsN Cj4gPiArCXRtcCAqPSAoMSA8PCB2YWwpICogTlNFQ19QRVJfU0VDOw0KPiANCj4gInByZXNjYWxl IiB3b3VsZCBiZSBhIGJldHRlciBuYW1lIGhlcmUgdGhhbiAidmFsIi4gQXMgaW4gdGhlIHByZXZp b3VzIHJldmlldw0KPiByb3VuZDogRG9uJ3QgbXVsdGlwbHkgYnkgKDEgPDwgc29tZXRoaW5nKS4N Cg0KT0ssIEkgbWlzc2VkIGl0IGhlcmUuIFdpbGwgdXNlIGJlbG93Og0KDQoJcHJlc2NhbGUgPSBG SUVMRF9HRVQoUFdNX0lNWF9UUE1fU0NfUFMsIHZhbCk7DQoJdG1wID0gcmVhZGwodHBtLT5iYXNl ICsgUFdNX0lNWF9UUE1fQ25WKHB3bS0+aHdwd20pKTsNCgl0bXAgPSAodG1wIDw8IHByZXNjYWxl KSAqIE5TRUNfUEVSX1NFQzsNCg0KPiANCj4gPiArCXN0YXRlLT5kdXR5X2N5Y2xlID0gRElWX1JP VU5EX0NMT1NFU1RfVUxMKHRtcCwgcmF0ZSk7DQo+ID4gKw0KPiA+ICsJLyogZ2V0IHBvbGFyaXR5 ICovDQo+ID4gKwl2YWwgPSByZWFkbCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9DblNDKHB3bS0+ aHdwd20pKTsNCj4gPiArCWlmIChGSUVMRF9HRVQoUFdNX0lNWF9UUE1fQ25TQ19FTFMsIHZhbCkg PT0NCj4gPiArCSAgICBQV01fSU1YX1RQTV9DblNDX0VMU19QT0xBUklUWV9JTlZFUlNFRCkNCj4g PiArCQlzdGF0ZS0+cG9sYXJpdHkgPSBQV01fUE9MQVJJVFlfSU5WRVJTRUQ7DQo+ID4gKwllbHNl DQo+ID4gKwkJLyoNCj4gPiArCQkgKiBBc3N1bWUgcmVzZXJ2ZWQgdmFsdWVzICgyYjAwIGFuZCAy YjExKSB0byB5aWVsZA0KPiA+ICsJCSAqIG5vcm1hbCBwb2xhcml0eS4NCj4gPiArCQkgKi8NCj4g PiArCQlzdGF0ZS0+cG9sYXJpdHkgPSBQV01fUE9MQVJJVFlfTk9STUFMOw0KPiA+ICsNCj4gPiAr CS8qIGdldCBjaGFubmVsIHN0YXR1cyAqLw0KPiA+ICsJc3RhdGUtPmVuYWJsZWQgPSBGSUVMRF9H RVQoUFdNX0lNWF9UUE1fQ25TQ19FTFMsIHZhbCkgPyB0cnVlIDoNCj4gPiArZmFsc2U7IH0NCj4g PiArDQo+ID4gK3N0YXRpYyB2b2lkIHB3bV9pbXhfdHBtX2FwcGx5X2h3KHN0cnVjdCBwd21fY2hp cCAqY2hpcCwNCj4gPiArCQkJCSBzdHJ1Y3QgcHdtX2RldmljZSAqcHdtLA0KPiA+ICsJCQkJIHN0 cnVjdCBwd21fc3RhdGUgc3RhdGUpDQo+IA0KPiBQbGVhc2UgcGFzcyBhIHRoZSBzdHJ1Y3QgcHdt X3N0YXRlIGFzIGEgcG9pbnRlciwgbm90IGFzIGEgdmFsdWUuDQoNCk9LLg0KDQo+IA0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtID0gdG9faW14X3RwbV9wd21fY2hp cChjaGlwKTsNCj4gPiArCXN0cnVjdCBwd21fc3RhdGUgYzsNCj4gPiArCXUzMiB2YWwsIHNjX3Zh bDsNCj4gPiArCXU2NCB0bXA7DQo+ID4gKw0KPiA+ICsJcHdtX2lteF90cG1fZ2V0X3N0YXRlKGNo aXAsIHB3bSwgJmMpOw0KPiA+ICsNCj4gPiArCWlmIChzdGF0ZS5kdXR5X2N5Y2xlICE9IGMuZHV0 eV9jeWNsZSkgew0KPiA+ICsJCS8qIHNldCBkdXR5IGNvdW50ZXIgKi8NCj4gPiArCQl0bXAgPSBy ZWFkbCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9NT0QpICYNCj4gUFdNX0lNWF9UUE1fTU9EX01P RDsNCj4gPiArCQl0bXAgKj0gc3RhdGUuZHV0eV9jeWNsZTsNCj4gPiArCQl2YWwgPSBESVZfUk9V TkRfQ0xPU0VTVF9VTEwodG1wLCBzdGF0ZS5wZXJpb2QpOw0KPiA+ICsJCXdyaXRlbCh2YWwsIHRw bS0+YmFzZSArIFBXTV9JTVhfVFBNX0NuVihwd20tDQo+ID5od3B3bSkpOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCWlmIChzdGF0ZS5lbmFibGVkICE9IGMuZW5hYmxlZCkgew0KPiANCj4gVGhpcyBp cyB3cm9uZy4gSWYgdGhlIFBXTSB3YXMgcnVubmluZyAoYy5lbmFibGVkID09IHRydWUpIGFuZCB5 b3UgYXJlDQo+IHN1cHBvc2VkIHRvIGRpc2FibGUgKHN0YXRlLmVuYWJsZWQgPT0gZmFsc2UpIHlv dSBlbmFibGUgdGhlIGhhcmR3YXJlIG9uY2UNCj4gbW9yZS4NCg0KQSBsaXR0bGUgY29uZnVzZWQg aGVyZSwgYXMgdGhlIGNhc2UgeW91IGFzc3VtZSwgaW5zaWRlIHRoaXMgYmxvY2ssIHRoZXJlIGlz IGFub3RoZXINCmNoZWNrIGZvciBzdGF0ZS5lbmFibGVkLCBpZiBpdCBpcyBmYWxzZSwgdGhlIHBv bGFyaXR5IHdpbGwgYmUgc2V0IHRvIGNoYW5uZWwgZGlzYWJsZWQgbW9kZSwNCnRoZSBwb2xhcml0 eSBzZXR0aW5nIGlzIGNvbWJpbmVkIHRvZ2V0aGVyIHdpdGggdGhlIGVuYWJsZSBzdGF0dXMgaGVy ZSwgYW0gSSB3cm9uZz8gIA0KDQoNCj4gDQo+ID4gKwkJLyoNCj4gPiArCQkgKiBzZXQgcG9sYXJp dHkgKGZvciBlZGdlLWFsaWduZWQgUFdNIG1vZGVzKQ0KPiA+ICsJCSAqDQo+ID4gKwkJICogRUxT WzE6MF0gPSAyYjEwIHlpZWxkcyBub3JtYWwgcG9sYXJpdHkgYmVoYXZpb3VyLA0KPiA+ICsJCSAq IEVMU1sxOjBdID0gMmIwMSB5aWVsZHMgaW52ZXJzZWQgcG9sYXJpdHkuDQo+ID4gKwkJICogVGhl IG90aGVyIHZhbHVlcyBhcmUgcmVzZXJ2ZWQuDQo+ID4gKwkJICoNCj4gPiArCQkgKiBwb2xhcml0 eSBzZXR0aW5ncyB3aWxsIGVuYWJsZWQvZGlzYWJsZSBvdXRwdXQgc3RhdHVzDQo+ID4gKwkJICog aW1tZWRpYXRlbHksIHNvIGlmIHRoZSBjaGFubmVsIGlzIGRpc2FibGVkLCBuZWVkIHRvDQo+ID4g KwkJICogbWFrZSBzdXJlIE1TQS9NU0IvRUxTIGFyZSBzZXQgdG8gMCB3aGljaCBtZWFucyBjaGFu bmVsDQo+ID4gKwkJICogZGlzYWJsZWQuDQo+ID4gKwkJICovDQo+ID4gKwkJdmFsID0gcmVhZGwo dHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fQ25TQyhwd20tDQo+ID5od3B3bSkpOw0KPiA+ICsJCXZh bCAmPSB+KFBXTV9JTVhfVFBNX0NuU0NfRUxTIHwNCj4gUFdNX0lNWF9UUE1fQ25TQ19NU0EgfA0K PiA+ICsJCQkgUFdNX0lNWF9UUE1fQ25TQ19NU0IpOw0KPiA+ICsJCXNjX3ZhbCA9IHJlYWRsKHRw bS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCj4gPiArCQlpZiAoc3RhdGUuZW5hYmxlZCkgew0K PiA+ICsJCQl2YWwgfD0gUFdNX0lNWF9UUE1fQ25TQ19NU0I7DQo+ID4gKwkJCXZhbCB8PSAoc3Rh dGUucG9sYXJpdHkgPT0gUFdNX1BPTEFSSVRZX05PUk1BTCkgPw0KPiA+ICsJCQkJRklFTERfUFJF UChQV01fSU1YX1RQTV9DblNDX0VMUywgMHgyKSA6DQo+ID4gKwkJCQlGSUVMRF9QUkVQKFBXTV9J TVhfVFBNX0NuU0NfRUxTLCAweDEpOw0KPiANCj4gSW50cm9kdWNlIFBXTV9JTVhfVFBNX0NuU0Nf RUxTX1BPTEFSSVRZX05PUk1BTCBhbmQgdXNlIGl0DQo+IHRvZ2V0aGVyIHdpdGggUFdNX0lNWF9U UE1fQ25TQ19FTFNfUE9MQVJJVFlfSU5WRVJTRUQgaGVyZS4gSWYgeW91DQo+IHB1dCB0aGUgRklF TERfUFJFUCBpbnRvIHRoZSBkZWZpbml0aW9uIHRoZSBsaW5lIGRvZXNuJ3QgZ2V0IGV4Y2Vzc2l2 ZWx5IGxvbmcuDQo+IA0KDQpJIHB1dCB0aGUgRklFTERfUFJFUCBpbnRvIGRlZmluaXRpb24sIHRo ZSBsaW5lIHN0aWxsIGxvbmcsIGJ1dCBJIGFncmVlIHVzaW5nIGRlZmluaXRpb24gaXMgYmV0dGVy Lg0KDQojZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfRUxTX0lOVkVSU0VEICAgRklFTERfUFJFUChQ V01fSU1YX1RQTV9DblNDX0VMUywgMSkNCiNkZWZpbmUgUFdNX0lNWF9UUE1fQ25TQ19FTFNfTk9S TUFMICAgICBGSUVMRF9QUkVQKFBXTV9JTVhfVFBNX0NuU0NfRUxTLCAyKQ0KDQogICAgICAgICAg ICAgICAgICAgICAgICAgdmFsIHw9IChzdGF0ZS0+cG9sYXJpdHkgPT0gUFdNX1BPTEFSSVRZX05P Uk1BTCkgPw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFdNX0lNWF9UUE1fQ25T Q19FTFNfTk9STUFMIDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBXTV9JTVhf VFBNX0NuU0NfRUxTX0lOVkVSU0VEOw0KDQo+IE1heWJlIGFsc28gYWRkDQo+IA0KPiAJI2RlZmlu ZSBQV01fSU1YX1RQTV9DblNDX0VMU19JTkFDVElWRQ0KPiBGSUVMRF9QUkVQKFBXTV9JTVhfVFBN X0NuU0NfRUxTLCAwKQ0KPiANCg0KSSBkaWQgTk9UIHVzZSB0aGUgRklFTERfUFJFUChQV01fSU1Y X1RQTV9DblNDX0VMUywgMCkgYXQgYWxsLCBzbyB3aHkgYWRkIGl0Pw0KSSBkb24ndCBxdWl0ZSB1 bmRlcnN0YW5kLg0KDQo+ID8NCj4gDQo+ID4gKwkJCWlmICgrK3RwbS0+ZW5hYmxlX2NvdW50ID09 IDEpIHsNCj4gPiArCQkJCS8qIHN0YXJ0IFRQTSBjb3VudGVyICovDQo+ID4gKwkJCQlzY192YWwg fD0NCj4gUFdNX0lNWF9UUE1fU0NfQ01PRF9JTkNfRVZFUllfQ0xLOw0KPiA+ICsJCQkJd3JpdGVs KHNjX3ZhbCwgdHBtLT5iYXNlICsNCj4gUFdNX0lNWF9UUE1fU0MpOw0KPiA+ICsJCQl9DQo+ID4g KwkJfSBlbHNlIHsNCj4gPiArCQkJaWYgKC0tdHBtLT5lbmFibGVfY291bnQgPT0gMCkgew0KPiA+ ICsJCQkJLyogc3RvcCBUUE0gY291bnRlciAqLw0KPiA+ICsJCQkJc2NfdmFsICY9IH5QV01fSU1Y X1RQTV9TQ19DTU9EOw0KPiA+ICsJCQkJd3JpdGVsKHNjX3ZhbCwgdHBtLT5iYXNlICsNCj4gUFdN X0lNWF9UUE1fU0MpOw0KPiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsJCXdyaXRlbCh2YWwsIHRw bS0+YmFzZSArIFBXTV9JTVhfVFBNX0NuU0MocHdtLQ0KPiA+aHdwd20pKTsNCj4gPiArCX0NCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBwd21faW14X3RwbV9hcHBseShzdHJ1Y3QgcHdt X2NoaXAgKmNoaXAsDQo+ID4gKwkJCSAgICAgIHN0cnVjdCBwd21fZGV2aWNlICpwd20sDQo+ID4g KwkJCSAgICAgc3RydWN0IHB3bV9zdGF0ZSAqc3RhdGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBp bXhfdHBtX3B3bV9jaGlwICp0cG0gPSB0b19pbXhfdHBtX3B3bV9jaGlwKGNoaXApOw0KPiA+ICsJ c3RydWN0IGlteF90cG1fcHdtX3BhcmFtIHBhcmFtOw0KPiA+ICsJc3RydWN0IHB3bV9zdGF0ZSBy ZWFsX3N0YXRlOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlyZXQgPSBwd21faW14X3Rw bV9yb3VuZF9zdGF0ZShjaGlwLCAmcGFyYW0sIHN0YXRlLCAmcmVhbF9zdGF0ZSk7DQo+ID4gKwlp ZiAocmV0KQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2so JnRwbS0+bG9jayk7DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIFRQTSBjb3VudGVyIGlzIHNo YXJlZCBieSBtdWx0aXBsZSBjaGFubmVscywgc28NCj4gPiArCSAqIHByZXNjYWxlIGFuZCBwZXJp b2QgY2FuIE5PVCBiZSBtb2RpZmllZCB3aGVuDQo+ID4gKwkgKiB0aGVyZSBhcmUgbXVsdGlwbGUg Y2hhbm5lbHMgaW4gdXNlIHdpdGggZGlmZmVyZW50DQo+ID4gKwkgKiBwZXJpb2Qgc2V0dGluZ3Mu DQo+ID4gKwkgKi8NCj4gPiArCWlmIChyZWFsX3N0YXRlLnBlcmlvZCAhPSB0cG0tPnJlYWxfcGVy aW9kKSB7DQo+ID4gKwkJaWYgKHRwbS0+dXNlcl9jb3VudCA+IDEpIHsNCj4gPiArCQkJcmV0ID0g LUVCVVNZOw0KPiA+ICsJCQlnb3RvIGV4aXQ7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlwd21f aW14X3RwbV9jb25maWdfY291bnRlcihjaGlwLCBwYXJhbSk7DQo+ID4gKwkJdHBtLT5yZWFsX3Bl cmlvZCA9IHJlYWxfc3RhdGUucGVyaW9kOw0KPiA+ICsJfQ0KPiANCj4gTWF5YmUgYWRkIGEgY29t bWVudCB0aGF0IHRoaXMgY291bGQgc3RpbGwgYmUgb3B0aW1pemVkLiBGb3IgZXhhbXBsZSBpZg0K PiBwd21faW14X3RwbV9yb3VuZF9zdGF0ZSByZXR1cm5lZCBwcmVzY2FsZSA9IDUgYnV0IHByZXNj YWxlIGlzIGN1cnJlbnRseSA2LA0KPiB5b3UgbWlnaHQgc3RpbGwgYmUgYWJsZSB0byBjb25maWd1 cmUNCg0KWW91IG1lYW50IGZvciBtdWx0aXBsZSB1c2VycyByZXF1ZXN0IGRpZmZlcmVudCBwZXJp b2QgY2FzZT8gSW4gdGhpcyBibG9jaywgaWYgdGhlcmUgaXMNCk9OTFkgb25lIHVzZXIgYW5kIHRo ZSByZXF1ZXN0ZWQgcGVyaW9kIGNhbiBiZSBtZXQgYnkgSFcsIGl0IHdpbGwgYW55d2F5IHJlLWNv bmZpZ3VyZQ0KdGhlIEhXIGZvciB0aGUgcHJlc2NhbGUgYW5kIHBlcmlvZCBJIHRoaW5rLCBvciBJ IGRpZCBOT1QgZ2V0IHlvdXIgcG9pbnQ/DQoNCj4gDQo+ID4gKw0KPiA+ICsJcHdtX2lteF90cG1f YXBwbHlfaHcoY2hpcCwgcHdtLCByZWFsX3N0YXRlKTsNCj4gPiArDQo+ID4gK2V4aXQ6DQo+ID4g KwltdXRleF91bmxvY2soJnRwbS0+bG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBwd21faW14X3RwbV9yZXF1ZXN0KHN0cnVjdCBw d21fY2hpcCAqY2hpcCwgc3RydWN0DQo+ID4gK3B3bV9kZXZpY2UgKnB3bSkgew0KPiA+ICsJc3Ry dWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lteF90cG1fcHdtX2NoaXAoY2hpcCk7DQo+ ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygmdHBtLT5sb2NrKTsNCj4gPiArCXRwbS0+dXNlcl9jb3Vu dCsrOw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZ0cG0tPmxvY2spOw0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBwd21faW14X3RwbV9mcmVlKHN0 cnVjdCBwd21fY2hpcCAqY2hpcCwgc3RydWN0DQo+IHB3bV9kZXZpY2UNCj4gPiArKnB3bSkgew0K PiA+ICsJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lteF90cG1fcHdtX2NoaXAo Y2hpcCk7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygmdHBtLT5sb2NrKTsNCj4gPiArCXRwbS0+ dXNlcl9jb3VudC0tOw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZ0cG0tPmxvY2spOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHB3bV9vcHMgaW14X3RwbV9wd21fb3BzID0g ew0KPiA+ICsJLnJlcXVlc3QgPSBwd21faW14X3RwbV9yZXF1ZXN0LA0KPiA+ICsJLmZyZWUgPSBw d21faW14X3RwbV9mcmVlLA0KPiA+ICsJLmdldF9zdGF0ZSA9IHB3bV9pbXhfdHBtX2dldF9zdGF0 ZSwNCj4gPiArCS5hcHBseSA9IHB3bV9pbXhfdHBtX2FwcGx5LA0KPiA+ICsJLm93bmVyID0gVEhJ U19NT0RVTEUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHB3bV9pbXhfdHBtX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpIHsNCj4gPiArCXN0cnVjdCBpbXhfdHBt X3B3bV9jaGlwICp0cG07DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJdTMyIHZhbDsNCj4gPiArDQo+ ID4gKwl0cG0gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCp0cG0pLCBHRlBfS0VS TkVMKTsNCj4gPiArCWlmICghdHBtKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4g PiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHRwbSk7DQo+ID4gKw0KPiA+ICsJdHBtLT5i YXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApOw0KPiA+ICsJaWYg KElTX0VSUih0cG0tPmJhc2UpKQ0KPiA+ICsJCXJldHVybiBQVFJfRVJSKHRwbS0+YmFzZSk7DQo+ ID4gKw0KPiA+ICsJdHBtLT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7DQo+ ID4gKwlpZiAoSVNfRVJSKHRwbS0+Y2xrKSkgew0KPiA+ICsJCXJldCA9IFBUUl9FUlIodHBtLT5j bGspOw0KPiA+ICsJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikNCj4gPiArCQkJZGV2X2Vycigm cGRldi0+ZGV2LA0KPiA+ICsJCQkJImZhaWxlZCB0byBnZXQgUFdNIGNsb2NrOiAlZFxuIiwgcmV0 KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9IGNsa19w cmVwYXJlX2VuYWJsZSh0cG0tPmNsayk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2Vy cigmcGRldi0+ZGV2LA0KPiA+ICsJCQkiZmFpbGVkIHRvIHByZXBhcmUgb3IgZW5hYmxlIGNsb2Nr OiAlZFxuIiwgcmV0KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXRwbS0+Y2hpcC5kZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsJdHBtLT5jaGlwLm9wcyA9ICZpbXhf dHBtX3B3bV9vcHM7DQo+ID4gKwl0cG0tPmNoaXAuYmFzZSA9IC0xOw0KPiA+ICsJdHBtLT5jaGlw Lm9mX3hsYXRlID0gb2ZfcHdtX3hsYXRlX3dpdGhfZmxhZ3M7DQo+ID4gKwl0cG0tPmNoaXAub2Zf cHdtX25fY2VsbHMgPSAzOw0KPiA+ICsNCj4gPiArCS8qIGdldCBudW1iZXIgb2YgY2hhbm5lbHMg Ki8NCj4gPiArCXZhbCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1BBUkFNKTsNCj4g PiArCXRwbS0+Y2hpcC5ucHdtID0gRklFTERfR0VUKFBXTV9JTVhfVFBNX1BBUkFNX0NIQU4sIHZh bCk7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfaW5pdCgmdHBtLT5sb2NrKTsNCj4gPiArDQo+ID4gKwly ZXQgPSBwd21jaGlwX2FkZCgmdHBtLT5jaGlwKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIFBXTSBjaGlwOiAlZFxuIiwgcmV0KTsN Cj4gPiArCQljbGtfZGlzYWJsZV91bnByZXBhcmUodHBtLT5jbGspOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcHdtX2lt eF90cG1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpIHsNCj4gPiArCXN0cnVj dCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4g PiArCWludCByZXQgPSBwd21jaGlwX3JlbW92ZSgmdHBtLT5jaGlwKTsNCj4gPiArDQo+ID4gKwlj bGtfZGlzYWJsZV91bnByZXBhcmUodHBtLT5jbGspOw0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgcHdtX2lteF90 cG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHsNCj4gPiArCXN0cnVjdCBpbXhfdHBtX3B3 bV9jaGlwICp0cG0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArDQo+ID4gKwlpZiAodHBt LT5lbmFibGVfY291bnQgPiAwKQ0KPiA+ICsJCXJldHVybiAtRUJVU1k7DQo+ID4gKw0KPiA+ICsJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHRwbS0+Y2xrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCBwd21faW14X3Rw bV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KSB7DQo+ID4gKwlzdHJ1Y3QgaW14X3RwbV9wd21f Y2hpcCAqdHBtID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4g PiArDQo+ID4gKwlpZiAodHBtLT5lbmFibGVfY291bnQgPT0gMCkgew0KPiANCj4gdHBtLT5lbmFi bGVfY291bnQgY2Fubm90IGJlIGRpZmZlcmVudCBmcm9tIDAgaGVyZS4NCg0KT0ssIEkgd2lsbCBy ZW1vdmUgdGhlIGNoZWNrLg0KDQo+IA0KPiA+ICsJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZSh0 cG0tPmNsayk7DQo+ID4gKwkJaWYgKHJldCkNCj4gPiArCQkJZGV2X2VycihkZXYsDQo+ID4gKwkJ CQkiZmFpbGVkIHRvIHByZXBhcmUgb3IgZW5hYmxlIGNsb2NrOiAlZFxuIiwNCj4gPiArCQkJCXJl dCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGlteF90cG1fcHdtX3BtLA0KPiA+ICsJCQkgcHdt X2lteF90cG1fc3VzcGVuZCwgcHdtX2lteF90cG1fcmVzdW1lKTsNCj4gPiArDQo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlteF90cG1fcHdtX2R0X2lkc1tdID0gew0KPiA+ ICsJeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14LXRwbSIsIH0sDQo+ID4gKwl7IC8qIHNlbnRpbmVs ICovIH0NCj4gPiArfTsNCj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaW14X3RwbV9wd21f ZHRfaWRzKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlteF90 cG1fcHdtX2RyaXZlciA9IHsNCj4gPiArCS5kcml2ZXIgPSB7DQo+ID4gKwkJLm5hbWUgPSAiaW14 LXRwbS1wd20iLA0KPiA+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGlteF90cG1fcHdtX2R0X2lkcywN Cj4gPiArCQkucG0gPSAmaW14X3RwbV9wd21fcG0sDQo+ID4gKwl9LA0KPiA+ICsJLnByb2JlCT0g cHdtX2lteF90cG1fcHJvYmUsDQo+ID4gKwkucmVtb3ZlID0gcHdtX2lteF90cG1fcmVtb3ZlLA0K PiA+ICt9Ow0KPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGlteF90cG1fcHdtX2RyaXZlcik7 DQo+ID4gKw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJBbnNvbiBIdWFuZyA8QW5zb24uSHVhbmdAbnhw LmNvbT4iKTsNCj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJpLk1YIFRQTSBQV00gRHJpdmVyIik7 IE1PRFVMRV9MSUNFTlNFKCJHUEwNCj4gdjIiKTsNCj4gDQo+IEJlc3QgcmVnYXJkcw0KPiBVd2UN Cj4gDQo+IC0tDQo+IFBlbmd1dHJvbml4IGUuSy4gICAgICAgICAgICAgICAgICAgICAgICAgICB8 IFV3ZSBLbGVpbmUtS8O2bmlnICAgICAgICAgICAgfA0KPiBJbmR1c3RyaWFsIExpbnV4IFNvbHV0 aW9ucyAgICAgICAgICAgICAgICAgfA0KPiBodHRwczovL2V1cjAxLnNhZmVsaW5rcy5wcm90ZWN0 aW9uLm91dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRnd3dy5wDQo+IGVuZ3V0cm9uaXguZGUl MkYmYW1wO2RhdGE9MDIlN0MwMSU3Q2Fuc29uLmh1YW5nJTQwbnhwLmNvbSU3QzU0DQo+IGE0MWU2 NDkxZTk0N2U5MmJjMTA4ZDZhZDBjYmQ2ZSU3QzY4NmVhMWQzYmMyYjRjNmZhOTJjZDk5YzVjMzAx NjMNCj4gNSU3QzAlN0MwJTdDNjM2ODg2NjY3NTYxOTUyMjc4JmFtcDtzZGF0YT1NbThrNWlZUkhS Q05MZ0R0WlpJTQ0KPiBPN3Nzc3g3MVlVYU9BYkU5SkVwN3pnRSUzRCZhbXA7cmVzZXJ2ZWQ9MCAg fA0K