From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C6D1FC3524D for ; Mon, 3 Feb 2020 11:19:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9AA1820721 for ; Mon, 3 Feb 2020 11:19:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=analog.onmicrosoft.com header.i=@analog.onmicrosoft.com header.b="q29JvNE3" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727955AbgBCLTL (ORCPT ); Mon, 3 Feb 2020 06:19:11 -0500 Received: from mx0b-00128a01.pphosted.com ([148.163.139.77]:29760 "EHLO mx0b-00128a01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726994AbgBCLTK (ORCPT ); Mon, 3 Feb 2020 06:19:10 -0500 Received: from pps.filterd (m0167090.ppops.net [127.0.0.1]) by mx0b-00128a01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 013BAFWe026458; Mon, 3 Feb 2020 06:18:54 -0500 Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2105.outbound.protection.outlook.com [104.47.58.105]) by mx0b-00128a01.pphosted.com with ESMTP id 2xw6ud3bw0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 03 Feb 2020 06:18:53 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EwMXIi7WuB1icKPKDrQ1hAG4nkVNyTS3KwdOC0PC3f5ZFH/7JnMnFBKGxFyOloLwlP5OpWpnMwCnhKCKUqNBDajbgjb92YTHCb7RAXnBq0q2pSBXGtwpW7LNZ6nxtGY43/iPINzve1qB/c43uRdGSzoWTShFOcQj+MHBebdCTRq07SCEPVFsdV/ram/HOYYMI7G4f0MwefCAg30oXzNcdfI8mdC/fTKcTIYyO3LhDtaa5kQe+WkjcsuKE+puHaiRq6sXG7ujO+YL9Y2ftdNZQPTHrxSorRzjzUjwGyX7ZbNcSDbn87Z8xjDFYHuuTQc8/ZWZlrI/AaXFqLrTYvUt+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6ONthk1tleEE9hrccJZjKNPwlBSCZcic+bQwCJ5WNXE=; b=lCxlsO61We4WcHTAa7SoaCQlW09bV/IH2N8STj2HlmGXjIePFBdg9ekC5tSBuuWyUaOMtfXTGq0otJGwX045WDxs5i5DuSRpFk+4hd/WdSGsRyL/vBf+6wEP00icHmVs6lQddvAce2KoSNlDhq7LdrjUjSFvpftCaFymWI8TdWcOoq04cljrktAGNqV0GTi3dIm9nq1Dps9YTyOIxRBzLOVCkQHyGlip18CTmoCGqwI/JsETYOuSIGvgdQEk5egwWvECPN+MI53op3yaSeS1FyDXGc/CKJboVCjPNQmJ2Ua0Fb6exIDn4jJuctFeGl1+oPUJ4O8+ZPuo2ZC7MqjLEg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=analog.com; dmarc=pass action=none header.from=analog.com; dkim=pass header.d=analog.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=analog.onmicrosoft.com; s=selector2-analog-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6ONthk1tleEE9hrccJZjKNPwlBSCZcic+bQwCJ5WNXE=; b=q29JvNE3RDH8RY0pWCEjklM3OyD8BOmo3DwOqmFq4yKQoKjb5T7hW0MjDyw++hbr2KkZX50HDAiSgHSjJdAcA7Ukdu1iGRYSmknAi+FID3K6Bl2v3tO1ppGfv9mA+rhEBEJzTAazn/HCT1kyvdiw9MG7sXPIutm3x5y8MtOCmXM= Received: from CH2PR03MB5192.namprd03.prod.outlook.com (20.180.12.152) by CH2PR03MB5285.namprd03.prod.outlook.com (20.180.15.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2686.27; Mon, 3 Feb 2020 11:18:51 +0000 Received: from CH2PR03MB5192.namprd03.prod.outlook.com ([fe80::dce7:7fec:f33f:ad39]) by CH2PR03MB5192.namprd03.prod.outlook.com ([fe80::dce7:7fec:f33f:ad39%7]) with mapi id 15.20.2686.031; Mon, 3 Feb 2020 11:18:51 +0000 From: "Ardelean, Alexandru" To: "jic23@kernel.org" CC: "ekigwana@gmail.com" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-iio@vger.kernel.org" , "robh+dt@kernel.org" , "lars@metafoo.de" Subject: Re: [PATCH v3 1/3] iio: frequency: adf4360: Add support for ADF4360 PLLs Thread-Topic: [PATCH v3 1/3] iio: frequency: adf4360: Add support for ADF4360 PLLs Thread-Index: AQHV1cuZ384i+2410ES+q5bFmracR6gIA1OAgAFYf4A= Date: Mon, 3 Feb 2020 11:18:51 +0000 Message-ID: <9f7217403fc2e69934eded4502d39198c2427806.camel@analog.com> References: <20200128111302.24359-1-alexandru.ardelean@analog.com> <20200202144549.3209f04b@archlinux> In-Reply-To: <20200202144549.3209f04b@archlinux> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [137.71.226.54] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 473c1ab1-df93-4a28-451c-08d7a89ad8f9 x-ms-traffictypediagnostic: CH2PR03MB5285: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0302D4F392 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(136003)(366004)(396003)(346002)(376002)(39860400002)(189003)(199004)(4326008)(6486002)(6512007)(6916009)(966005)(478600001)(36756003)(71200400001)(64756008)(76116006)(66476007)(6506007)(26005)(66556008)(186003)(81166006)(81156014)(8676002)(54906003)(316002)(8936002)(2616005)(66946007)(66446008)(2906002)(86362001)(30864003)(5660300002)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:CH2PR03MB5285;H:CH2PR03MB5192.namprd03.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: analog.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Ko8YoT8+w9OXP5Dqi2tCi++dD+ZPMuIQLoKPgxQUduW/q+IALfekoDqnW9X1SVIOmKNHkbewhhnaQb86eBPKA58VX6fvdZwWCWyXOGVh3d0y9VRCgbkH3Vu8xALIYzwvOR2/S/ZcIfijIBxo3KsB8Uem0s8f0M0wC5SGq5knOKECcGGmXpjzrLtTBYk/iYELVGIS/kBMwjmrEYws3NVv7seYzS0H2mbQjEmOwngnF3YOwQh/Z1LGrsEMJplZpAGltSjW54xApbsjkLieGoLhQEVb5p7Vx+G2sxA9d3VUWrqCPdRGIP/IDEvQ8hDKyW1RLn8/njsZDRTYDYbyNALtebN0wSu2WzpXDQaitRc0z2gXxUioiwPg8oiZm4bQaZnBAKYuJKt915Kcllp2Oaao/LdnQcLIreXw1ahCnF+IV9SVtf5YGNnJDQPSXDiFxtZ5sD1TUXRTaoUXiILYOYG1Ng6NFj1DLWr5JK6GDHZk8E6v800fyBLc0as30sheR2Wr49Y0MuaVPWz77do9/tG84ABpAgWl6AzIlUHE/6NUovQRvzryq+Yc/GRDswDeZSgu x-ms-exchange-antispam-messagedata: WZAn6V8/lNaK8Bf2K5io/IEi/aFkFIICC7blHgs+rqegUJA6vM+70GbPr09AhNBCWIE6j3+gduR9yvP/s+7hdnwq5TPYmzZuoAynfEykKWfhQoap22MJZCtyTt4DHTtHUXNMHe8udwIPY14Fb30qYA== x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <4F4A71B0BAC75D4FBDD1585F7BAF152D@namprd03.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: analog.com X-MS-Exchange-CrossTenant-Network-Message-Id: 473c1ab1-df93-4a28-451c-08d7a89ad8f9 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Feb 2020 11:18:51.3385 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: eaa689b4-8f87-40e0-9c6f-7228de4d754a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: +oCW1Hr2sDp0YtljMPXVP1LwiKbjbxs+hvKvNrvy0crftgTi0kXJOC7J7MpXd8ptmXXPPgyr0jeQS2nG42s4FzTy0qVwTH9Uk4vQuUOJAWU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR03MB5285 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.572 definitions=2020-02-03_03:2020-02-02,2020-02-03 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 mlxlogscore=999 lowpriorityscore=0 adultscore=0 bulkscore=0 malwarescore=0 suspectscore=0 phishscore=0 mlxscore=0 clxscore=1015 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-1911200001 definitions=main-2002030085 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gU3VuLCAyMDIwLTAyLTAyIGF0IDE0OjQ1ICswMDAwLCBKb25hdGhhbiBDYW1lcm9uIHdyb3Rl Og0KPiBbRXh0ZXJuYWxdDQo+IA0KPiBPbiBUdWUsIDI4IEphbiAyMDIwIDEzOjEzOjAwICswMjAw DQo+IEFsZXhhbmRydSBBcmRlbGVhbiA8YWxleGFuZHJ1LmFyZGVsZWFuQGFuYWxvZy5jb20+IHdy b3RlOg0KPiANCj4gPiBGcm9tOiBFZHdhcmQgS2lnd2FuYSA8ZWtpZ3dhbmFAZ21haWwuY29tPg0K PiA+IA0KPiA+IFRoZSBBREY0MzYwLU4gKE4gaXMgMC4uOSkgYXJlIGEgZmFtaWx5IG9mIGludGVn cmF0ZWQgaW50ZWdlci1OIHN5bnRoZXNpemVyDQo+ID4gYW5kIHZvbHRhZ2UgY29udHJvbGxlZCBv c2NpbGxhdG9yIChWQ08pLg0KPiA+IA0KPiA+IENvbnRyb2wgb2YgYWxsIHRoZSBvbi1jaGlwIHJl Z2lzdGVycyBpcyB0aHJvdWdoIGEgc2ltcGxlIDMtd2lyZSBTUEkNCj4gPiBpbnRlcmZhY2UuIFRo ZSBkZXZpY2Ugb3BlcmF0ZXMgd2l0aCBhIHBvd2VyIHN1cHBseSByYW5naW5nIGZyb20gMy4wIFYg dG8NCj4gPiAzLjYgViBhbmQgY2FuIGJlIHBvd2VyZWQgZG93biB3aGVuIG5vdCBpbiB1c2UuDQo+ ID4gDQo+ID4gVGhlIGluaXRpYWwgZHJhZnQtd29yayB3YXMgZG9uZSBieSBMYXJzLVBldGVyIENs YXVzZW4gPGxhcnNAbWV0YWZvby5kZT4NCj4gPiBUaGUgY3VycmVudC9sYXRlc3QvY29tcGxldGUg dmVyc2lvbiB3YXMgaW1wbGVtZW50ZWQgYnkNCj4gPiBFZHdhcmQgS2lnd2FuYSA8ZWtpZ3dhbmFA Z21haWwuY29tPi4NCj4gPiANCj4gPiBUaGUgQURGNDM2MC05IGlzIGFsc28gcHJlc2VudCBvbiB0 aGUgQW5hbG9nIERldmljZXMgJ0FkdmFuY2VkIEFjdGl2ZQ0KPiA+IExlYXJuaW5nIE1vZHVsZSAy MDAwJyAoQURBTE0tMjAwMCkuDQo+ID4gDQo+ID4gTGluazogDQo+ID4gaHR0cHM6Ly93d3cuYW5h bG9nLmNvbS9tZWRpYS9lbi90ZWNobmljYWwtZG9jdW1lbnRhdGlvbi9kYXRhLXNoZWV0cy9BREY0 MzYwLTAucGRmDQo+ID4gTGluazogDQo+ID4gaHR0cHM6Ly93d3cuYW5hbG9nLmNvbS9tZWRpYS9l bi90ZWNobmljYWwtZG9jdW1lbnRhdGlvbi9kYXRhLXNoZWV0cy9BREY0MzYwLTEucGRmDQo+ID4g TGluazogDQo+ID4gaHR0cHM6Ly93d3cuYW5hbG9nLmNvbS9tZWRpYS9lbi90ZWNobmljYWwtZG9j dW1lbnRhdGlvbi9kYXRhLXNoZWV0cy9BREY0MzYwLTIucGRmDQo+ID4gTGluazogDQo+ID4gaHR0 cHM6Ly93d3cuYW5hbG9nLmNvbS9tZWRpYS9lbi90ZWNobmljYWwtZG9jdW1lbnRhdGlvbi9kYXRh LXNoZWV0cy9BREY0MzYwLTMucGRmDQo+ID4gTGluazogDQo+ID4gaHR0cHM6Ly93d3cuYW5hbG9n LmNvbS9tZWRpYS9lbi90ZWNobmljYWwtZG9jdW1lbnRhdGlvbi9kYXRhLXNoZWV0cy9BREY0MzYw LTQucGRmDQo+ID4gTGluazogDQo+ID4gaHR0cHM6Ly93d3cuYW5hbG9nLmNvbS9tZWRpYS9lbi90 ZWNobmljYWwtZG9jdW1lbnRhdGlvbi9kYXRhLXNoZWV0cy9BREY0MzYwLTUucGRmDQo+ID4gTGlu azogDQo+ID4gaHR0cHM6Ly93d3cuYW5hbG9nLmNvbS9tZWRpYS9lbi90ZWNobmljYWwtZG9jdW1l bnRhdGlvbi9kYXRhLXNoZWV0cy9BREY0MzYwLTYucGRmDQo+ID4gTGluazogDQo+ID4gaHR0cHM6 Ly93d3cuYW5hbG9nLmNvbS9tZWRpYS9lbi90ZWNobmljYWwtZG9jdW1lbnRhdGlvbi9kYXRhLXNo ZWV0cy9BREY0MzYwLTcucGRmDQo+ID4gTGluazogDQo+ID4gaHR0cHM6Ly93d3cuYW5hbG9nLmNv bS9tZWRpYS9lbi90ZWNobmljYWwtZG9jdW1lbnRhdGlvbi9kYXRhLXNoZWV0cy9BREY0MzYwLTgu cGRmDQo+ID4gTGluazogDQo+ID4gaHR0cHM6Ly93d3cuYW5hbG9nLmNvbS9tZWRpYS9lbi90ZWNo bmljYWwtZG9jdW1lbnRhdGlvbi9kYXRhLXNoZWV0cy9BREY0MzYwLTkucGRmDQo+ID4gTGluazog DQo+ID4gaHR0cHM6Ly93d3cuYW5hbG9nLmNvbS9lbi9kZXNpZ24tY2VudGVyL2V2YWx1YXRpb24t aGFyZHdhcmUtYW5kLXNvZnR3YXJlL2V2YWx1YXRpb24tYm9hcmRzLWtpdHMvQURBTE0yMDAwLmh0 bWwNCj4gPiANCj4gPiBTaWduZWQtb2ZmLWJ5OiBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0 YWZvby5kZT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBFZHdhcmQgS2lnd2FuYSA8ZWtpZ3dhbmFAZ21h aWwuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEFsZXhhbmRydSBBcmRlbGVhbiA8YWxleGFuZHJ1 LmFyZGVsZWFuQGFuYWxvZy5jb20+DQo+IA0KPiBTdXBlcmZpY2lhbGx5IHRoaXMgbG9va3MgbGlr ZSB5b3UgcmVhbGx5IGhhdmUgYSBjbG9jayBzb3VyY2UgZHJpdmVyLg0KPiBZb3UgdGhlbiB3cmFw IGl0IGluIElJTyBpbiBvcmRlciB0byBwcm92aWRlIGNvbnZlbmllbnQgdXNlcnNwYWNlIGludGVy ZmFjZXMuDQo+IA0KPiBJJ20gbm90IHN1cmUgd2Ugd2FudCB0byBkbyB0aGF0IGFuZCBJIGRlZmlu aXRlbHkgbmVlZCBhZ3JlZW1lbnQgZnJvbSB0aG9zZQ0KPiByZXNwb25zaWJsZSBmb3IgY2xvY2sg c291cmNlIGRyaXZlcnMgYmVmb3JlIEkgdGFrZSBhbnl0aGluZyB0aGF0IGRvZXMgZG8NCj4gdGhp cyBzb3J0IG9mIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gdHlwZXMgb2YgZHJpdmVyLg0KPiANCg0K SSdsbCBhZG1pdCB0aGF0IEkgYW0gYSBiaXQgZnV6enkgYWJvdXQgdGhlc2UgZnJlcXVlbmN5LWdl bmVyYXRvcnMvY2xvY2stDQpzb3VyY2VzL3N5bnRoZXNpemVyIGNoaXBzLg0KSW4gdGhlIHNlbnNl LCBJIGRvbid0IGtub3cgd2hlcmUgdG8gZHJhdyB0aGUgbGluZSBiZXR3ZWVuIHdoZW4gdG8gY29u c2lkZXIgaXQNCltwcmltYXJseV0gYW4gSUlPIGRldmljZSBbZm9yIHRoZSBJSU8gc3Vic3lzdGVt XSBvciB3aGVuIHRvIGNvbnNpZGVyIGl0IGEgY2xvY2stDQpkZXZpY2UgW3ByaW1hcmlseSwgZm9y IHRoZSBjbGsgc3Vic3lzdGVtXS4NCk9idmlvdXNseSB0aGVyZSdzIGFuIGluZXJ0aWEgW2ZvciBt ZSBhdCBsZWFzdF0gdG8gZ28gSUlPLCBhcyBJIGtub3cgaXQgYSBiaXQNCmJldHRlci4gDQoNCldl J3ZlIGhhZCBzb21lIHF1aWNrL3Nob3J0IGRpc2N1c3Npb25zIFtpbnRlcm5hbGx5XSBhYm91dCB0 aGlzIGRyaXZlciwgYW5kIGFsc28NCmFib3V0IHRoZSBMVEM2OTUyLiBXZSBkaWRuJ3QgaGF2ZSBh IGJpZ2dlciBvbmUsIHdoZXJlIHdlIHRyeSB0byBkaXNjdXNzIHRoZW0NCm1vcmUgaW4tZGV0YWls OyBidXQgd2UgZG8gaGF2ZSBhIHBsYW4gdG8gZG8gaXQuDQoNClNvLCB0aGVuIG1heWJlIFt1bnRp bCB0aGVuXSBhIHF1ZXN0aW9uOiBob3cgZG8gd2UgZGVjaWRlIHRoaXM/IFtnZW5lcmFsbHkNCnNw ZWFraW5nLCBub3QganVzdCBhZGY0MzYwICYgbHRjNjk1Ml0NCmkuZS4gd2hlbiB0byBjb25zaWRl ciBpdCBjbGstZmlyc3Qgb3IgaWlvLWZpcnN0Ow0KSSdtIG5vdCBzdXJlIGlmIHRoZXJlIGlzIGEg Y2xlYXItY3V0IHJ1bGUsIGJ1dCBtYXliZSBzb21lIGd1aWRlbGluZXMvdGhvdWdodHM/DQpPYnZp b3VzbHksIEknbGwgaGF2ZSB0byByZWFkLXVwIG1vcmUgb24gdGhlIGNsayBmcmFtZXdvcmsgY29k ZSBbYXMgd2VsbF0gdG8gZ2V0DQphIGZlZWwgZm9yIGl0Lg0KDQpXZSd2ZSBkb25lIHNvbWUgdGhp bmdzIGludGVybmFsbHkgW3VwIHVudGlsIG5vd10gd2l0aCBzb21lIG9mIHRoZXNlIGNsb2NrLWNo aXBzDQp0aGF0J3MgYmVlbiBtb3N0bHkgSUlPLWNlbnRyaWMuIE5vdywgbXVjaCBvZiBpdCBtYXkg bm90IGJlIGNvcnJlY3QsIGJ1dCBpdCBpcw0Kd2hhdCB3ZSB1c2UgYXMgdGVtcGxhdGUgd2hlbiB3 cml0aW5nIG5ldyBkcml2ZXIsIHdoaWNoIFtvZiBjb3Vyc2VdIGlzIG5vdCBnb29kLg0KQW5kLCBJ IGFsc28gZG9uJ3Qgd2FudCB0byBwdXNoL2ZvcmNlIG91ciBtaXN0YWtlcyB1cHN0cmVhbSwgYmVj YXVzZSB0aGF0IGlzDQpbd2VsbC4uLl0gYmFkLiBIZW5jZSB0aGlzL3RoZXNlIHF1ZXN0aW9uKHMp Lg0KDQpUaGFua3MNCkFsZXgNCg0KPiBJIGNhbiBzZWUgdGhhdCwgZm9yIHRoZXNlIGhpZ2ggc3Bl ZWQgZGV2aWNlcywgdGhlIGludGVudCBpcyBub3JtYWxseSB0bw0KPiBwcm92aWRlDQo+IGFuIGlu cHV0IHNpZ25hbCB0byBzb21lIGV4dGVybmFsIGNpcmN1aXRyeSByYXRoZXIgdGhhbiBzb21lIGlu dGVybmFsIGNsb2NrDQo+IHNpZ25hbCwgYnV0IGdpdmVuIHRoaXMgaXMgcmVnaXN0ZXJlZCBhcyBh IGNsb2NrIHNvdXJjZSB0aGUgYXJndW1lbnQgdGhhdCBpdCBpcw0KPiBzb21laG93IHNwZWNpYWwg ZG9lc24ndCBzZWVtIHRvIGhvbGQuDQo+IA0KPiBBIGZldyBtb3JlIHNwZWNpZmljIGNvbW1lbnRz IGlubGluZS4NCj4gDQo+IFRoYW5rcywNCj4gDQo+IEpvbmF0aGFuDQo+ICANCj4gSm9uYXRoYW4N Cj4gDQo+ID4gLS0tDQo+ID4gDQo+ID4gQ2hhbmdlbG9nIHYyIC0+IHYzOg0KPiA+ICogZHJvcHBl ZCBwYXRjaCBhYm91dCBhZGY0MzcxLnlhbWw7IGFkZGVkIGJ5IGFjY2lkZW50IHNpbmNlIGl0IHdh cyB1c2VkIHRvDQo+ID4gICBjb21wYXJlIGFnYWluc3QNCj4gPiAqIGFkZHJlc3NlZCBSb2IncyBy ZXZpZXcgY29tbWVudHMgZm9yIERUIHNjaGVtYQ0KPiA+IA0KPiA+IENoYW5nZWxvZyB2MSAtPiB2 MjoNCj4gPiAqIHZhbGlkYXRlIGR0LWJpbmRpbmdzIGZpbGUgd2l0aA0KPiA+ICAgbWFrZSBkdF9i aW5kaW5nX2NoZWNrDQo+ID4gRFRfU0NIRU1BX0ZJTEVTPURvY3VtZW50YXRpb24vZGV2aWNldHJl ZS9iaW5kaW5ncy9paW8vZnJlcXVlbmN5L2FkaSxhZGY0MzYwLg0KPiA+IHlhbWwNCj4gPiANCj4g PiAgZHJpdmVycy9paW8vZnJlcXVlbmN5L0tjb25maWcgICB8ICAgMTEgKw0KPiA+ICBkcml2ZXJz L2lpby9mcmVxdWVuY3kvTWFrZWZpbGUgIHwgICAgMSArDQo+ID4gIGRyaXZlcnMvaWlvL2ZyZXF1 ZW5jeS9hZGY0MzYwLmMgfCAxMjYzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4g PiAgMyBmaWxlcyBjaGFuZ2VkLCAxMjc1IGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvaWlvL2ZyZXF1ZW5jeS9hZGY0MzYwLmMNCj4gPiANCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9paW8vZnJlcXVlbmN5L0tjb25maWcgYi9kcml2ZXJzL2lpby9mcmVxdWVu Y3kvS2NvbmZpZw0KPiA+IGluZGV4IDI0MGI4MTUwMjUxMi4uNzgxMjM2NDk2NjYxIDEwMDY0NA0K PiA+IC0tLSBhL2RyaXZlcnMvaWlvL2ZyZXF1ZW5jeS9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVy cy9paW8vZnJlcXVlbmN5L0tjb25maWcNCj4gPiBAQCAtMzksNiArMzksMTcgQEAgY29uZmlnIEFE RjQzNTANCj4gPiAgCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3Nl IE0gaGVyZTogdGhlDQo+ID4gIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhZGY0MzUwLg0KPiA+ ICANCj4gPiArY29uZmlnIEFERjQzNjANCj4gPiArCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBB REY0MzYwIFdpZGViYW5kIFN5bnRoZXNpemVycyINCj4gPiArCWRlcGVuZHMgb24gU1BJDQo+ID4g KwlkZXBlbmRzIG9uIENPTU1PTl9DTEsNCj4gPiArCWhlbHANCj4gPiArCSAgU2F5IHllcyBoZXJl IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIEFERjQzNjANCj4gPiArCSAgV2lk ZWJhbmQgU3ludGhlc2l6ZXJzLiBUaGUgZHJpdmVyIHByb3ZpZGVzIGRpcmVjdCBhY2Nlc3Mgdmlh IHN5c2ZzLg0KPiA+ICsNCj4gPiArCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVs ZSwgY2hvb3NlIE0gaGVyZTogdGhlDQo+ID4gKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhZGY0 MzYwLg0KPiA+ICsNCj4gPiAgY29uZmlnIEFERjQzNzENCj4gPiAgCXRyaXN0YXRlICJBbmFsb2cg RGV2aWNlcyBBREY0MzcxL0FERjQzNzIgV2lkZWJhbmQgU3ludGhlc2l6ZXJzIg0KPiA+ICAJZGVw ZW5kcyBvbiBTUEkNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vZnJlcXVlbmN5L01ha2Vm aWxlIGIvZHJpdmVycy9paW8vZnJlcXVlbmN5L01ha2VmaWxlDQo+ID4gaW5kZXggNTE4YjFlNTBj YWVmLi44NWYyZjgxZGE2NjIgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9paW8vZnJlcXVlbmN5 L01ha2VmaWxlDQo+ID4gKysrIGIvZHJpdmVycy9paW8vZnJlcXVlbmN5L01ha2VmaWxlDQo+ID4g QEAgLTYsNCArNiw1IEBADQo+ID4gICMgV2hlbiBhZGRpbmcgbmV3IGVudHJpZXMga2VlcCB0aGUg bGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXINCj4gPiAgb2JqLSQoQ09ORklHX0FEOTUyMykgKz0g YWQ5NTIzLm8NCj4gPiAgb2JqLSQoQ09ORklHX0FERjQzNTApICs9IGFkZjQzNTAubw0KPiA+ICtv YmotJChDT05GSUdfQURGNDM2MCkgKz0gYWRmNDM2MC5vDQo+ID4gIG9iai0kKENPTkZJR19BREY0 MzcxKSArPSBhZGY0MzcxLm8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vZnJlcXVlbmN5 L2FkZjQzNjAuYw0KPiA+IGIvZHJpdmVycy9paW8vZnJlcXVlbmN5L2FkZjQzNjAuYw0KPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi40OWFkNTgwOTIxNzEN Cj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9paW8vZnJlcXVlbmN5L2FkZjQz NjAuYw0KPiA+IEBAIC0wLDAgKzEsMTI2MyBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBBREY0MzYwIFBMTCB3aXRoIEludGVncmF0 ZWQgU3ludGhlc2l6ZXIgYW5kIFZDTw0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAxNC0y MDE5IEFuYWxvZyBEZXZpY2VzIEluYy4NCj4gPiArICogQ29weXJpZ2h0IDIwMTktMjAyMCBFZHdh cmQgS2lnd2FuYS4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvYml0Zmll bGQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgv Y2xrLXByb3ZpZGVyLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2tl cm5lbC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9vZi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC91dGls X21hY3Jvcy5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lpby9paW8uaD4NCj4gPiAr DQo+ID4gKy8qIFJlZ2lzdGVyIGFkZHJlc3MgbWFjcm8gKi8NCj4gPiArI2RlZmluZSBBREY0MzYw X1JFRyh4KQkJCSh4KQ0KPiA+ICsNCj4gPiArLyogQURGNDM2MF9DVFJMICovDQo+ID4gKyNkZWZp bmUgQURGNDM2MF9BRERSX0NQTF9NU0sJCUdFTk1BU0soMywgMikNCj4gPiArI2RlZmluZSBBREY0 MzYwX0NQTCh4KQkJCUZJRUxEX1BSRVAoQURGNDM2MF9BRERSX0NQTF9NU0ssDQo+ID4geCkNCj4g PiArI2RlZmluZSBBREY0MzYwX0FERFJfTVVYT1VUX01TSwkJR0VOTUFTSyg3LCA1KQ0KPiA+ICsj ZGVmaW5lIEFERjQzNjBfTVVYT1VUKHgpCQlGSUVMRF9QUkVQKEFERjQzNjBfQUREUl9NVVhPVVRf TVNLLCB4KQ0KPiA+ICsjZGVmaW5lIEFERjQzNjBfQUREUl9QRFBfTVNLCQlCSVQoOCkNCj4gPiAr I2RlZmluZSBBREY0MzYwX1BEUCh4KQkJCUZJRUxEX1BSRVAoQURGNDM2MF9BRERSX1BEUF9NU0ss DQo+ID4geCkNCj4gPiArI2RlZmluZSBBREY0MzYwX0FERFJfTVRMRF9NU0sJCUJJVCgxMSkNCj4g PiArI2RlZmluZSBBREY0MzYwX01UTEQoeCkJCQlGSUVMRF9QUkVQKEFERjQzNjBfQUREUl9NVExE X01TSw0KPiA+ICwgeCkNCj4gPiArI2RlZmluZSBBREY0MzYwX0FERFJfT1BMX01TSwkJR0VOTUFT SygxMywgMTIpDQo+ID4gKyNkZWZpbmUgQURGNDM2MF9PUEwoeCkJCQlGSUVMRF9QUkVQKEFERjQz NjBfQUREUl9PUExfTVNLLA0KPiA+IHgpDQo+ID4gKyNkZWZpbmUgQURGNDM2MF9BRERSX0NQSTFf TVNLCQlHRU5NQVNLKDE2LCAxNCkNCj4gPiArI2RlZmluZSBBREY0MzYwX0NQSTEoeCkJCQlGSUVM RF9QUkVQKEFERjQzNjBfQUREUl9DUEkxX01TSw0KPiA+ICwgeCkNCj4gPiArI2RlZmluZSBBREY0 MzYwX0FERFJfQ1BJMl9NU0sJCUdFTk1BU0soMTksIDE3KQ0KPiA+ICsjZGVmaW5lIEFERjQzNjBf Q1BJMih4KQkJCUZJRUxEX1BSRVAoQURGNDM2MF9BRERSX0NQSTJfTVNLDQo+ID4gLCB4KQ0KPiA+ ICsjZGVmaW5lIEFERjQzNjBfQUREUl9QV1JfRFdOX01TSwlHRU5NQVNLKDIxLCAyMCkNCj4gPiAr I2RlZmluZSBBREY0MzYwX1BPV0VSRE9XTih4KQkJRklFTERfUFJFUChBREY0MzYwX0FERFJfUFdS X0RXTl8NCj4gPiBNU0ssIHgpDQo+ID4gKyNkZWZpbmUgQURGNDM2MF9BRERSX1BSRVNDQUxFUl9N U0sJR0VOTUFTSygyMywgMjIpDQo+ID4gKyNkZWZpbmUgQURGNDM2MF9QUkVTQ0FMRVIoeCkJCUZJ RUxEX1BSRVAoQURGNDM2MF9BRERSX1BSRVNDQUxFDQo+ID4gUl9NU0ssIHgpDQo+ID4gKw0KPiA+ ICsvKiBBREY0MzYwX05ESVYgKi8NCj4gPiArI2RlZmluZSBBREY0MzYwX0FERFJfQV9DTlRSX01T SwkJR0VOTUFTSyg2LCAyKQ0KPiA+ICsjZGVmaW5lIEFERjQzNjBfQV9DT1VOVEVSKHgpCQlGSUVM RF9QUkVQKEFERjQzNjBfQUREUl9BX0NOVFJfTQ0KPiA+IFNLLCB4KQ0KPiA+ICsjZGVmaW5lIEFE RjQzNjBfQUREUl9CX0NOVFJfTVNLCQlHRU5NQVNLKDIwLCA4KQ0KPiA+ICsjZGVmaW5lIEFERjQz NjBfQl9DT1VOVEVSKHgpCQlGSUVMRF9QUkVQKEFERjQzNjBfQUREUl9CX0NOVFJfTQ0KPiA+IFNL LCB4KQ0KPiA+ICsjZGVmaW5lIEFERjQzNjBfQUREUl9PVVRfRElWMl9NU0sJQklUKDIyKQ0KPiA+ ICsjZGVmaW5lIEFERjQzNjBfT1VUX0RJVjIoeCkJCUZJRUxEX1BSRVAoQURGNDM2MF9BRERSX09V VF9ESVYyDQo+ID4gX01TSywgeCkNCj4gPiArI2RlZmluZSBBREY0MzYwX0FERFJfRElWMl9TRUxf TVNLCUJJVCgyMykNCj4gPiArI2RlZmluZSBBREY0MzYwX1BSRVNDQUxFUl9ESVYyKHgpCUZJRUxE X1BSRVAoQURGNDM2MF9BRERSX0RJVjJfU0VMX01TSywgeCkNCj4gPiArDQo+ID4gKy8qIEFERjQz NjBfUkRJViAqLw0KPiA+ICsjZGVmaW5lIEFERjQzNjBfQUREUl9SX0NOVFJfTVNLCQlHRU5NQVNL KDE1LCAyKQ0KPiA+ICsjZGVmaW5lIEFERjQzNjBfUl9DT1VOVEVSKHgpCQlGSUVMRF9QUkVQKEFE RjQzNjBfQUREUl9SX0NOVFJfTQ0KPiA+IFNLLCB4KQ0KPiA+ICsjZGVmaW5lIEFERjQzNjBfQURE Ul9BQlBfTVNLCQlHRU5NQVNLKDE3LCAxNikNCj4gPiArI2RlZmluZSBBREY0MzYwX0FCUCh4KQkJ CUZJRUxEX1BSRVAoQURGNDM2MF9BRERSX0FCUF9NU0ssDQo+ID4geCkNCj4gPiArI2RlZmluZSBB REY0MzYwX0FERFJfQlNDX01TSwkJR0VOTUFTSygyMSwgMjApDQo+ID4gKyNkZWZpbmUgQURGNDM2 MF9CU0MoeCkJCQlGSUVMRF9QUkVQKEFERjQzNjBfQUREUl9CU0NfTVNLLA0KPiA+IHgpDQo+ID4g Kw0KPiA+ICsvKiBTcGVjaWZpY2F0aW9ucyAqLw0KPiA+ICsjZGVmaW5lIEFERjQzNjBfTUFYX1BG RF9SQVRFCQk4MDAwMDAwIC8qIDggTUh6ICovDQo+ID4gKyNkZWZpbmUgQURGNDM2MF9NQVhfQ09V TlRFUl9SQVRFCTMwMDAwMDAwMCAvKiAzMDAgTUh6ICovDQo+ID4gKyNkZWZpbmUgQURGNDM2MF9N QVhfUkVGSU5fUkFURQkJMjUwMDAwMDAwIC8qIDI1MCBNSHogKi8NCj4gPiArDQo+ID4gK2VudW0g ew0KPiA+ICsJQURGNDM2MF9DVFJMLA0KPiA+ICsJQURGNDM2MF9SRElWLA0KPiA+ICsJQURGNDM2 MF9ORElWLA0KPiA+ICsJQURGNDM2MF9SRUdfTlVNLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArZW51 bSB7DQo+ID4gKwlBREY0MzYwX0dFTjFfUENfNSwNCj4gPiArCUFERjQzNjBfR0VOMV9QQ18xMCwN Cj4gPiArCUFERjQzNjBfR0VOMV9QQ18xNSwNCj4gPiArCUFERjQzNjBfR0VOMV9QQ18yMCwNCj4g PiArfTsNCj4gPiArDQo+ID4gK2VudW0gew0KPiA+ICsJQURGNDM2MF9HRU4yX1BDXzJfNSwNCj4g PiArCUFERjQzNjBfR0VOMl9QQ181LA0KPiA+ICsJQURGNDM2MF9HRU4yX1BDXzdfNSwNCj4gPiAr CUFERjQzNjBfR0VOMl9QQ18xMCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK2VudW0gew0KPiA+ICsJ QURGNDM2MF9NVVhPVVRfVEhSRUVfU1RBVEUsDQo+ID4gKwlBREY0MzYwX01VWE9VVF9MT0NLX0RF VEVDVCwNCj4gPiArCUFERjQzNjBfTVVYT1VUX05ESVYsDQo+ID4gKwlBREY0MzYwX01VWE9VVF9E VkRELA0KPiA+ICsJQURGNDM2MF9NVVhPVVRfUkRJViwNCj4gPiArCUFERjQzNjBfTVVYT1VUX09E X0xELA0KPiA+ICsJQURGNDM2MF9NVVhPVVRfU0RPLA0KPiA+ICsJQURGNDM2MF9NVVhPVVRfR05E LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArZW51bSB7DQo+ID4gKwlBREY0MzYwX1BMXzNfNSwNCj4g PiArCUFERjQzNjBfUExfNSwNCj4gPiArCUFERjQzNjBfUExfN181LA0KPiA+ICsJQURGNDM2MF9Q TF8xMSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK2VudW0gew0KPiA+ICsJQURGNDM2MF9DUElfMF8z MSwNCj4gPiArCUFERjQzNjBfQ1BJXzBfNjIsDQo+ID4gKwlBREY0MzYwX0NQSV8wXzkzLA0KPiA+ ICsJQURGNDM2MF9DUElfMV8yNSwNCj4gPiArCUFERjQzNjBfQ1BJXzFfNTYsDQo+ID4gKwlBREY0 MzYwX0NQSV8xXzg3LA0KPiA+ICsJQURGNDM2MF9DUElfMl8xOCwNCj4gPiArCUFERjQzNjBfQ1BJ XzJfNTAsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtlbnVtIHsNCj4gPiArCUFERjQzNjBfUE9XRVJf RE9XTl9OT1JNQUwsDQo+ID4gKwlBREY0MzYwX1BPV0VSX0RPV05fU09GVF9BU1lOQywNCj4gPiAr CUFERjQzNjBfUE9XRVJfRE9XTl9DRSwNCj4gPiArCUFERjQzNjBfUE9XRVJfRE9XTl9TT0ZUX1NZ TkMsDQo+ID4gKwlBREY0MzYwX1BPV0VSX0RPV05fUkVHVUxBVE9SLA0KPiA+ICt9Ow0KPiA+ICsN Cj4gPiArZW51bSB7DQo+ID4gKwlBREY0MzYwX1BSRVNDQUxFUl84LA0KPiA+ICsJQURGNDM2MF9Q UkVTQ0FMRVJfMTYsDQo+ID4gKwlBREY0MzYwX1BSRVNDQUxFUl8zMiwNCj4gPiArfTsNCj4gPiAr DQo+ID4gK2VudW0gew0KPiA+ICsJQURGNDM2MF9BQlBfM18wTlMsDQo+ID4gKwlBREY0MzYwX0FC UF8xXzNOUywNCj4gPiArCUFERjQzNjBfQUJQXzZfME5TLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr ZW51bSB7DQo+ID4gKwlBREY0MzYwX0JTQ18xLA0KPiA+ICsJQURGNDM2MF9CU0NfMiwNCj4gPiAr CUFERjQzNjBfQlNDXzQsDQo+ID4gKwlBREY0MzYwX0JTQ184LA0KPiA+ICt9Ow0KPiA+ICsNCj4g PiArZW51bSB7DQo+ID4gKwlJRF9BREY0MzYwXzAsDQo+ID4gKwlJRF9BREY0MzYwXzEsDQo+ID4g KwlJRF9BREY0MzYwXzIsDQo+ID4gKwlJRF9BREY0MzYwXzMsDQo+ID4gKwlJRF9BREY0MzYwXzQs DQo+ID4gKwlJRF9BREY0MzYwXzUsDQo+ID4gKwlJRF9BREY0MzYwXzYsDQo+ID4gKwlJRF9BREY0 MzYwXzcsDQo+ID4gKwlJRF9BREY0MzYwXzgsDQo+ID4gKwlJRF9BREY0MzYwXzksDQo+ID4gK307 DQo+ID4gKw0KPiA+ICtlbnVtIHsNCj4gPiArCUFERjQzNjBfRlJFUV9SRUZJTiwNCj4gPiArCUFE RjQzNjBfTVRMRCwNCj4gPiArCUFERjQzNjBfRlJFUV9QRkQsDQo+ID4gK307DQo+ID4gKw0KPiA+ ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFkZjQzNjBfcG93ZXJfbGV2ZWxfbW9kZXNbXSA9 IHsNCj4gVGhpcyBpc24ndCBhbiBlbnVtLiAgVGhlc2UgYXJlIHJlYWwgdmFsdWVzIGluIHNlbnNp YmxlIHVuaXRzIG5vdA0KPiBtYWdpYyBzdHJpbmdzLiAgIEhhbmRsZSB0aGVtIGFzIGludGVnZXJz Lg0KPiANCj4gV2UgbWF5IG5lZWQgdG8gZGVmaW5lIGFkZGl0aW9uYWwgQUJJIGZvciB0aGlzIGJ1 dCBpdCBzaG91bGQgYmUNCj4gcG9zc2libGUgdG8gJ2ZpdCcgaXQgaW4gdGhlIG5vcm1hbCBzdHJ1 Y3R1cmUgb2YgQUJJLg0KPiANCj4gPiArCVtBREY0MzYwX1BMXzNfNV0gPSAiMzUwMC11QSIsDQo+ ID4gKwlbQURGNDM2MF9QTF81XSA9ICI1MDAwLXVBIiwNCj4gPiArCVtBREY0MzYwX1BMXzdfNV0g PSAiNzUwMC11QSIsDQo+ID4gKwlbQURGNDM2MF9QTF8xMV0gPSAiMTEwMDAtdUEiLA0KPiA+ICt9 Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBhZGY0MzYwX3Bvd2VyX2x2 bF9taWNyb2FtcFtdID0gew0KPiA+ICsJW0FERjQzNjBfUExfM181XSA9IDM1MDAsDQo+ID4gKwlb QURGNDM2MF9QTF81XSA9IDUwMDAsDQo+ID4gKwlbQURGNDM2MF9QTF83XzVdID0gNzUwMCwNCj4g PiArCVtBREY0MzYwX1BMXzExXSA9IDExMDAwLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGludCBhZGY0MzYwX2NwaV9tb2Rlc1tdID0gew0KPiA+ICsJW0FERjQz NjBfQ1BJXzBfMzFdID0gMzEwLA0KPiA+ICsJW0FERjQzNjBfQ1BJXzBfNjJdID0gNjIwLA0KPiA+ ICsJW0FERjQzNjBfQ1BJXzBfOTNdID0gOTMwLA0KPiA+ICsJW0FERjQzNjBfQ1BJXzFfMjVdID0g MTI1MCwNCj4gPiArCVtBREY0MzYwX0NQSV8xXzU2XSA9IDE1NjAsDQo+ID4gKwlbQURGNDM2MF9D UElfMV84N10gPSAxODcwLA0KPiA+ICsJW0FERjQzNjBfQ1BJXzJfMThdID0gMjE4MCwNCj4gPiAr CVtBREY0MzYwX0NQSV8yXzUwXSA9IDI1MDAsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMg Y29uc3QgY2hhciAqIGNvbnN0IGFkZjQzNjBfbXV4b3V0X21vZGVzW10gPSB7DQo+IFN1cGVyZmlj aWFsbHkgZnJvbSBnbGFuY2luZyBhdCB0aGUgZGF0YXNoZWV0IEkgdGhpbmcgdGhpcyBpcyBkZWJ1 Zw0KPiBmdW5jdGlvbmFsaXR5PyAgUGVyaGFwcyBtb3ZlIGl0IHRvIGRlYnVnZnMgc28gYXMgdG8g YXZvaWQgY3JlYXRpbmcNCj4gY29tcGxleCBuZXcgQUJJIGluIHN5c2ZzLg0KPiANCj4gPiArCVtB REY0MzYwX01VWE9VVF9USFJFRV9TVEFURV0gPSAidGhyZWUtc3RhdGUiLA0KPiA+ICsJW0FERjQz NjBfTVVYT1VUX0xPQ0tfREVURUNUXSA9ICJsb2NrLWRldGVjdCIsDQo+ID4gKwlbQURGNDM2MF9N VVhPVVRfTkRJVl0gPSAibmRpdiIsDQo+ID4gKwlbQURGNDM2MF9NVVhPVVRfRFZERF0gPSAiZHZk ZCIsDQo+ID4gKwlbQURGNDM2MF9NVVhPVVRfUkRJVl0gPSAicmRpdiIsDQo+ID4gKwlbQURGNDM2 MF9NVVhPVVRfT0RfTERdID0gIm9kLWxkIiwNCj4gPiArCVtBREY0MzYwX01VWE9VVF9TRE9dID0g InNkbyIsDQo+ID4gKwlbQURGNDM2MF9NVVhPVVRfR05EXSA9ICJnbmQiLA0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhZGY0MzYwX3Bvd2VyX2Rvd25fbW9k ZXNbXSA9IHsNCj4gPiArCVtBREY0MzYwX1BPV0VSX0RPV05fTk9STUFMXSA9ICJub3JtYWwiLA0K PiA+ICsJW0FERjQzNjBfUE9XRVJfRE9XTl9TT0ZUX0FTWU5DXSA9ICJzb2Z0LWFzeW5jIiwNCj4g PiArCVtBREY0MzYwX1BPV0VSX0RPV05fQ0VdID0gImNlIiwNCj4gPiArCVtBREY0MzYwX1BPV0VS X0RPV05fU09GVF9TWU5DXSA9ICJzb2Z0LXN5bmMiLA0KPiA+ICsJW0FERjQzNjBfUE9XRVJfRE9X Tl9SRUdVTEFUT1JdID0gInJlZ3VsYXRvciIsDQo+IFRoaXMgc2VlbXMgdG8gbWFwIHJhdGhlciBv ZGRseSB0byB0aGUgZGF0YXNoZWV0LiAgUGVyaGFwcyBzb21lDQo+IGNvbW1lbnRzIHRvIGV4cGxh aW4gd2hhdCBpcyBnb2luZyBvbiBoZXJlIHdvdWxkIGhlbHAvDQo+ID4gK307DQo+ID4gKw0KPiA+ ICtzdHJ1Y3QgYWRmNDM2MF9vdXRwdXQgew0KPiA+ICsJc3RydWN0IGNsa19odyBodzsNCj4gPiAr CXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXY7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsjZGVmaW5l IHRvX291dHB1dChfaHcpIGNvbnRhaW5lcl9vZihfaHcsIHN0cnVjdCBhZGY0MzYwX291dHB1dCwg aHcpDQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYWRmNDM2MF9jaGlwX2luZm8gew0KPiA+ICsJdW5zaWdu ZWQgaW50IHZjb19taW47DQo+ID4gKwl1bnNpZ25lZCBpbnQgdmNvX21heDsNCj4gPiArCXVuc2ln bmVkIGludCBkZWZhdWx0X2NwbDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBhZGY0MzYw X3N0YXRlIHsNCj4gPiArCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7DQo+ID4gKwljb25zdCBzdHJ1 Y3QgYWRmNDM2MF9jaGlwX2luZm8gKmluZm87DQo+ID4gKwlzdHJ1Y3QgYWRmNDM2MF9vdXRwdXQg b3V0cHV0Ow0KPiA+ICsJc3RydWN0IGNsayAqY2xraW47DQo+ID4gKwlzdHJ1Y3QgZ3Bpb19kZXNj ICptdXhvdXRfZ3BpbzsNCj4gPiArCXN0cnVjdCBncGlvX2Rlc2MgKmNoaXBfZW5fZ3BpbzsNCj4g PiArCXN0cnVjdCByZWd1bGF0b3IgKnZkZF9yZWc7DQo+ID4gKwlzdHJ1Y3QgbXV0ZXggbG9jazsg LyogUHJvdGVjdCBQTEwgc3RhdGUuICovDQo+ID4gKwl1bnNpZ25lZCBpbnQgcGFydF9pZDsNCj4g PiArCXVuc2lnbmVkIGxvbmcgY2xraW5fZnJlcTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgZnJlcV9y ZXE7DQo+ID4gKwl1bnNpZ25lZCBsb25nIHI7DQo+ID4gKwl1bnNpZ25lZCBsb25nIG47DQo+ID4g Kwl1bnNpZ25lZCBpbnQgdmNvX21pbjsNCj4gPiArCXVuc2lnbmVkIGludCB2Y29fbWF4Ow0KPiA+ ICsJdW5zaWduZWQgaW50IHBmZF9mcmVxOw0KPiA+ICsJdW5zaWduZWQgaW50IGNwaTsNCj4gPiAr CWJvb2wgcGRwOw0KPiA+ICsJYm9vbCBtdGxkOw0KPiA+ICsJdW5zaWduZWQgaW50IHBvd2VyX2xl dmVsOw0KPiA+ICsJdW5zaWduZWQgaW50IG11eG91dF9tb2RlOw0KPiA+ICsJdW5zaWduZWQgaW50 IHBvd2VyX2Rvd25fbW9kZTsNCj4gPiArCWJvb2wgaW5pdGlhbF9yZWdfc2VxOw0KPiA+ICsJY29u c3QgY2hhciAqY2xrX291dF9uYW1lOw0KPiA+ICsJdW5zaWduZWQgaW50IHJlZ3NbQURGNDM2MF9S RUdfTlVNXTsNCj4gPiArCXU4IHNwaV9kYXRhWzNdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRmNDM2MF9jaGlwX2luZm8g YWRmNDM2MF9jaGlwX2luZm9fdGJsW10gPSB7DQo+ID4gKwl7CS8qIEFERjQzNjAtMCAqLw0KPiA+ ICsJCS52Y29fbWluID0gMjQwMDAwMDAwMFUsDQo+ID4gKwkJLnZjb19tYXggPSAyNzI1MDAwMDAw VSwNCj4gPiArCQkuZGVmYXVsdF9jcGwgPSBBREY0MzYwX0dFTjFfUENfMTAsDQo+ID4gKwl9LCB7 CS8qIEFERjQzNjAtMSAqLw0KPiA+ICsJCS52Y29fbWluID0gMjA1MDAwMDAwMFUsDQo+ID4gKwkJ LnZjb19tYXggPSAyNDUwMDAwMDAwVSwNCj4gPiArCQkuZGVmYXVsdF9jcGwgPSBBREY0MzYwX0dF TjFfUENfMTUsDQo+ID4gKwl9LCB7CS8qIEFERjQzNjAtMiAqLw0KPiA+ICsJCS52Y29fbWluID0g MTg1MDAwMDAwMFUsDQo+ID4gKwkJLnZjb19tYXggPSAyMTcwMDAwMDAwVSwNCj4gPiArCQkuZGVm YXVsdF9jcGwgPSBBREY0MzYwX0dFTjFfUENfMTUsDQo+ID4gKwl9LCB7CS8qIEFERjQzNjAtMyAq Lw0KPiA+ICsJCS52Y29fbWluID0gMTYwMDAwMDAwMFUsDQo+ID4gKwkJLnZjb19tYXggPSAxOTUw MDAwMDAwVSwNCj4gPiArCQkuZGVmYXVsdF9jcGwgPSBBREY0MzYwX0dFTjFfUENfMTUsDQo+ID4g Kwl9LCB7CS8qIEFERjQzNjAtNCAqLw0KPiA+ICsJCS52Y29fbWluID0gMTQ1MDAwMDAwMFUsDQo+ ID4gKwkJLnZjb19tYXggPSAxNzUwMDAwMDAwVSwNCj4gPiArCQkuZGVmYXVsdF9jcGwgPSBBREY0 MzYwX0dFTjFfUENfMTUsDQo+ID4gKwl9LCB7CS8qIEFERjQzNjAtNSAqLw0KPiA+ICsJCS52Y29f bWluID0gMTIwMDAwMDAwMFUsDQo+ID4gKwkJLnZjb19tYXggPSAxNDAwMDAwMDAwVSwNCj4gPiAr CQkuZGVmYXVsdF9jcGwgPSBBREY0MzYwX0dFTjFfUENfMTAsDQo+ID4gKwl9LCB7CS8qIEFERjQz NjAtNiAqLw0KPiA+ICsJCS52Y29fbWluID0gMTA1MDAwMDAwMFUsDQo+ID4gKwkJLnZjb19tYXgg PSAxMjUwMDAwMDAwVSwNCj4gPiArCQkuZGVmYXVsdF9jcGwgPSBBREY0MzYwX0dFTjFfUENfMTAs DQo+ID4gKwl9LCB7CS8qIEFERjQzNjAtNyAqLw0KPiA+ICsJCS52Y29fbWluID0gMzUwMDAwMDAw VSwNCj4gPiArCQkudmNvX21heCA9IDE4MDAwMDAwMDBVLA0KPiA+ICsJCS5kZWZhdWx0X2NwbCA9 IEFERjQzNjBfR0VOMV9QQ181LA0KPiA+ICsJfSwgewkvKiBBREY0MzYwLTggKi8NCj4gPiArCQku dmNvX21pbiA9IDY1MDAwMDAwVSwNCj4gPiArCQkudmNvX21heCA9IDQwMDAwMDAwMFUsDQo+ID4g KwkJLmRlZmF1bHRfY3BsID0gQURGNDM2MF9HRU4yX1BDXzUsDQo+ID4gKwl9LCB7CS8qIEFERjQz NjAtOSAqLw0KPiA+ICsJCS52Y29fbWluID0gNjUwMDAwMDBVLA0KPiA+ICsJCS52Y29fbWF4ID0g NDAwMDAwMDAwVSwNCj4gPiArCQkuZGVmYXVsdF9jcGwgPSBBREY0MzYwX0dFTjJfUENfNSwNCj4g PiArCX0NCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgYWRmNDM2MF93cml0ZV9yZWco c3RydWN0IGFkZjQzNjBfc3RhdGUgKnN0LCB1bnNpZ25lZCBpbnQgcmVnLA0KPiA+ICsJCQkgICAg IHVuc2lnbmVkIGludCB2YWwpDQo+ID4gK3sNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJ dmFsIHw9IHJlZzsNCj4gPiArDQo+ID4gKwlzdC0+c3BpX2RhdGFbMF0gPSAodmFsID4+IDE2KSAm IDB4ZmY7DQo+ID4gKwlzdC0+c3BpX2RhdGFbMV0gPSAodmFsID4+IDgpICYgMHhmZjsNCj4gPiAr CXN0LT5zcGlfZGF0YVsyXSA9IHZhbCAmIDB4ZmY7DQo+ID4gKw0KPiA+ICsJcmV0ID0gc3BpX3dy aXRlKHN0LT5zcGksIHN0LT5zcGlfZGF0YSwgQVJSQVlfU0laRShzdC0+c3BpX2RhdGEpKTsNCj4g PiArCWlmIChyZXQgPT0gMCkNCj4gPiArCQlzdC0+cmVnc1tyZWddID0gdmFsOw0KPiA+ICsNCj4g PiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIGZWQ08gPSBCICogZlJFRklO IC8gUiAqLw0KPiA+ICsNCj4gPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgYWRmNDM2MF9jbGtfcmVj YWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsDQo+ID4gKwkJCQkJICAgICB1bnNpZ25lZCBsb25n IHBhcmVudF9yYXRlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0g dG9fb3V0cHV0KGh3KS0+aW5kaW9fZGV2Ow0KPiA+ICsJc3RydWN0IGFkZjQzNjBfc3RhdGUgKnN0 ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsNCj4gPiArDQo+ID4gKwlpZiAoc3QtPnIgPT0gMCkNCj4g PiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogVGhlIHJlc3VsdCBpcyBn dWFyYW50ZWVkIHRvIGZpdCBpbiAzMi1iaXQsIGJ1dCB0aGUgaW50ZXJtZWRpYXRlDQo+ID4gKwkg KiByZXN1bHQgbWlnaHQgcmVxdWlyZSA2NC1iaXQuDQo+ID4gKwkgKi8NCj4gPiArCXJldHVybiBE SVZfUk9VTkRfQ0xPU0VTVF9VTEwoKHVpbnQ2NF90KXBhcmVudF9yYXRlICogc3QtPm4sIHN0LT5y KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHVuc2lnbmVkIGludCBhZGY0MzYwX2NhbGNf cHJlc2NhbGVyKHVuc2lnbmVkIGludCBwZmRfZnJlcSwNCj4gPiArCQkJCQkgICB1bnNpZ25lZCBp bnQgbiwNCj4gPiArCQkJCQkgICB1bnNpZ25lZCBpbnQgKm91dF9wLA0KPiA+ICsJCQkJCSAgIHVu c2lnbmVkIGludCAqb3V0X2EsDQo+ID4gKwkJCQkJICAgdW5zaWduZWQgaW50ICpvdXRfYikNCj4g PiArew0KPiA+ICsJdW5zaWduZWQgaW50IHJhdGUgPSBwZmRfZnJlcSAqIG47DQo+ID4gKwl1bnNp Z25lZCBpbnQgcCwgYSwgYjsNCj4gPiArDQo+ID4gKwkvKiBNYWtlIHN1cmUgZGl2aWRlciBjb3Vu dGVyIGlucHV0IGZyZXF1ZW5jeSBpcyBsb3cgZW5vdWdoICovDQo+ID4gKwlwID0gODsNCj4gPiAr CXdoaWxlIChwIDwgMzIgJiYgcmF0ZSAvIHAgPiBBREY0MzYwX01BWF9DT1VOVEVSX1JBVEUpDQo+ ID4gKwkJcCAqPSAyOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBUaGUgcmFuZ2Ugb2YgZGl2 aWRlcnMgdGhhdCBjYW4gYmUgcHJvZHVjZWQgdXNpbmcgdGhlIGR1YWwtbW9kdWx1cw0KPiA+ICsJ ICogcHJlLXNjYWxlciBpcyBub3QgY29udGludW91cyBmb3IgdmFsdWVzIG9mIG4gPCBwKihwLTEp LiBJZiB3ZSBlbmQgdXANCj4gPiArCSAqIHdpdGggYSBub24gc3VwcG9ydGVkIGRpdmlkZXIgdmFs dWUsIHBpY2sgdGhlIG5leHQgY2xvc2VzdCBvbmUuDQo+ID4gKwkgKi8NCj4gPiArCWEgPSBuICUg cDsNCj4gPiArCWIgPSBuIC8gcDsNCj4gPiArDQo+ID4gKwlpZiAoYiA8IDMpIHsNCj4gPiArCQli ID0gMzsNCj4gPiArCQlhID0gMDsNCj4gPiArCX0gZWxzZSBpZiAoYSA+IGIpIHsNCj4gPiArCQlp ZiAoYSAtIGIgPCBwIC0gYSkgew0KPiA+ICsJCQlhID0gYjsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ ICsJCQlhID0gMDsNCj4gPiArCQkJYisrOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4g KwlpZiAob3V0X3ApDQo+ID4gKwkJKm91dF9wID0gcDsNCj4gPiArCWlmIChvdXRfYSkNCj4gPiAr CQkqb3V0X2EgPSBhOw0KPiA+ICsJaWYgKG91dF9iKQ0KPiA+ICsJCSpvdXRfYiA9IGI7DQo+ID4g Kw0KPiA+ICsJcmV0dXJuIHAgKiBiICsgYTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGxv bmcgYWRmNDM2MF9jbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywNCj4gPiArCQkJCSAg IHVuc2lnbmVkIGxvbmcgcmF0ZSwNCj4gPiArCQkJCSAgIHVuc2lnbmVkIGxvbmcgKnBhcmVudF9y YXRlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gdG9fb3V0cHV0 KGh3KS0+aW5kaW9fZGV2Ow0KPiA+ICsJc3RydWN0IGFkZjQzNjBfc3RhdGUgKnN0ID0gaWlvX3By aXYoaW5kaW9fZGV2KTsNCj4gPiArCXVuc2lnbmVkIGludCByLCBuOw0KPiA+ICsJdW5zaWduZWQg aW50IHBmZF9mcmVxOw0KPiA+ICsNCj4gPiArCWlmICgqcGFyZW50X3JhdGUgPT0gMCkNCj4gPiAr CQlyZXR1cm4gMDsNCj4gPiArDQo+ID4gKwlpZiAoc3QtPnBhcnRfaWQgPT0gSURfQURGNDM2MF85 KQ0KPiA+ICsJCXJldHVybiAqcGFyZW50X3JhdGUgKiBzdC0+biAvIHN0LT5yOw0KPiA+ICsNCj4g PiArCWlmIChyYXRlID4gc3QtPnZjb19tYXgpDQo+ID4gKwkJcmV0dXJuIHN0LT52Y29fbWF4Ow0K PiA+ICsNCj4gPiArCS8qIEFERjQzNjAtMCB0byBBRDQzNzAtNyBoYXZlIGFuIG9wdGlvbmFsIGJ5 IHR3byBkaXZpZGVyICovDQo+ID4gKwlpZiAoc3QtPnBhcnRfaWQgPD0gSURfQURGNDM2MF83KSB7 DQo+ID4gKwkJaWYgKHJhdGUgPCBzdC0+dmNvX21pbiAvIDIpDQo+ID4gKwkJCXJldHVybiBzdC0+ dmNvX21pbiAvIDI7DQo+ID4gKwkJaWYgKHJhdGUgPCBzdC0+dmNvX21pbiAmJiByYXRlID4gc3Qt PnZjb19tYXggLyAyKSB7DQo+ID4gKwkJCWlmIChzdC0+dmNvX21pbiAtIHJhdGUgPCByYXRlIC0g c3QtPnZjb19tYXggLyAyKQ0KPiA+ICsJCQkJcmV0dXJuIHN0LT52Y29fbWluOw0KPiA+ICsJCQll bHNlDQo+ID4gKwkJCQlyZXR1cm4gc3QtPnZjb19tYXggLyAyOw0KPiA+ICsJCX0NCj4gPiArCX0g ZWxzZSB7DQo+ID4gKwkJaWYgKHJhdGUgPCBzdC0+dmNvX21pbikNCj4gPiArCQkJcmV0dXJuIHN0 LT52Y29fbWluOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXIgPSBESVZfUk9VTkRfQ0xPU0VTVCgq cGFyZW50X3JhdGUsIHN0LT5wZmRfZnJlcSk7DQo+ID4gKwlwZmRfZnJlcSA9ICpwYXJlbnRfcmF0 ZSAvIHI7DQo+ID4gKwluID0gRElWX1JPVU5EX0NMT1NFU1QocmF0ZSwgcGZkX2ZyZXEpOw0KPiA+ ICsNCj4gPiArCWlmIChzdC0+cGFydF9pZCA8PSBJRF9BREY0MzYwXzcpDQo+ID4gKwkJbiA9IGFk ZjQzNjBfY2FsY19wcmVzY2FsZXIocGZkX2ZyZXEsIG4sIE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+ ICsNCj4gPiArCXJldHVybiBwZmRfZnJlcSAqIG47DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbmxpbmUgYm9vbCBhZGY0MzYwX2lzX3Bvd2VyZG93bihzdHJ1Y3QgYWRmNDM2MF9zdGF0ZSAq c3QpDQo+ID4gK3sNCj4gPiArCXJldHVybiAoc3QtPnBvd2VyX2Rvd25fbW9kZSAhPSBBREY0MzYw X1BPV0VSX0RPV05fTk9STUFMKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBhZGY0 MzYwX3NldF9mcmVxKHN0cnVjdCBhZGY0MzYwX3N0YXRlICpzdCwgdW5zaWduZWQgbG9uZyByYXRl KQ0KPiA+ICt7DQo+ID4gKwl1bnNpZ25lZCBpbnQgdmFsX3IsIHZhbF9uLCB2YWxfY3RybDsNCj4g PiArCXVuc2lnbmVkIGludCBwZmRfZnJlcTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgciwgbjsNCj4g PiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJaWYgKCFzdC0+Y2xraW5fZnJlcSB8fCAoc3QtPmNs a2luX2ZyZXEgPiBBREY0MzYwX01BWF9SRUZJTl9SQVRFKSkNCj4gPiArCQlyZXR1cm4gLUVJTlZB TDsNCj4gPiArDQo+ID4gKwlpZiAoKHJhdGUgPCBzdC0+dmNvX21pbikgfHwgKHJhdGUgPiBzdC0+ dmNvX21heCkpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJaWYgKGFkZjQz NjBfaXNfcG93ZXJkb3duKHN0KSkNCj4gPiArCQlyZXQgPSAtRUJVU1k7DQo+ID4gKw0KPiA+ICsJ ciA9IERJVl9ST1VORF9DTE9TRVNUKHN0LT5jbGtpbl9mcmVxLCBzdC0+cGZkX2ZyZXEpOw0KPiA+ ICsJcGZkX2ZyZXEgPSBzdC0+Y2xraW5fZnJlcSAvIHI7DQo+ID4gKwluID0gRElWX1JPVU5EX0NM T1NFU1QocmF0ZSwgcGZkX2ZyZXEpOw0KPiA+ICsNCj4gPiArCXZhbF9jdHJsID0gQURGNDM2MF9D UEwoc3QtPmluZm8tPmRlZmF1bHRfY3BsKSB8DQo+ID4gKwkJICAgQURGNDM2MF9NVVhPVVQoc3Qt Pm11eG91dF9tb2RlKSB8DQo+ID4gKwkJICAgQURGNDM2MF9QRFAoIXN0LT5wZHApIHwNCj4gPiAr CQkgICBBREY0MzYwX01UTEQoc3QtPm10bGQpIHwNCj4gPiArCQkgICBBREY0MzYwX09QTChzdC0+ cG93ZXJfbGV2ZWwpIHwNCj4gPiArCQkgICBBREY0MzYwX0NQSTEoc3QtPmNwaSkgfA0KPiA+ICsJ CSAgIEFERjQzNjBfQ1BJMihzdC0+Y3BpKSB8DQo+ID4gKwkJICAgQURGNDM2MF9QT1dFUkRPV04o c3QtPnBvd2VyX2Rvd25fbW9kZSk7DQo+ID4gKw0KPiA+ICsJLyogQURGNDM2MC0wIHRvIEFERjQz NjAtNyBoYXZlIGEgZHVhbC1tb2R1bG91cyBwcmVzY2FsZXIgKi8NCj4gPiArCWlmIChzdC0+cGFy dF9pZCA8PSBJRF9BREY0MzYwXzcpIHsNCj4gPiArCQl1bnNpZ25lZCBpbnQgcCwgYSwgYjsNCj4g PiArDQo+ID4gKwkJbiA9IGFkZjQzNjBfY2FsY19wcmVzY2FsZXIocGZkX2ZyZXEsIG4sICZwLCAm YSwgJmIpOw0KPiA+ICsNCj4gPiArCQlzd2l0Y2ggKHApIHsNCj4gPiArCQljYXNlIDg6DQo+ID4g KwkJCXZhbF9jdHJsIHw9IEFERjQzNjBfUFJFU0NBTEVSKEFERjQzNjBfUFJFU0NBTEVSXzgpOw0K PiA+ICsJCQlicmVhazsNCj4gPiArCQljYXNlIDE2Og0KPiA+ICsJCQl2YWxfY3RybCB8PSBBREY0 MzYwX1BSRVNDQUxFUihBREY0MzYwX1BSRVNDQUxFUl8xNik7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCXZhbF9jdHJsIHw9IEFERjQzNjBfUFJFU0NBTEVSKEFERjQz NjBfUFJFU0NBTEVSXzMyKTsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiAr CQl2YWxfbiA9IEFERjQzNjBfQV9DT1VOVEVSKGEpIHwNCj4gPiArCQkJQURGNDM2MF9CX0NPVU5U RVIoYik7DQo+ID4gKw0KPiA+ICsJCWlmIChyYXRlIDwgc3QtPnZjb19taW4pDQo+ID4gKwkJCXZh bF9uIHw9IEFERjQzNjBfT1VUX0RJVjIodHJ1ZSkgfA0KPiA+ICsJCQkJIEFERjQzNjBfUFJFU0NB TEVSX0RJVjIodHJ1ZSk7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXZhbF9uID0gQURGNDM2MF9C X0NPVU5URVIobik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIEFsd2F5cyB1 c2UgQlNDIGRpdmlkZXIgb2YgOCwgc2VlIEFuYWxvZyBEZXZpY2VzIEFOLTEzNDcuDQo+ID4gKwkg KiANCj4gPiBodHRwOi8vd3d3LmFuYWxvZy5jb20vbWVkaWEvZW4vdGVjaG5pY2FsLWRvY3VtZW50 YXRpb24vYXBwbGljYXRpb24tbm90ZXMvQU4tMTM0Ny5wZGYNCj4gPiArCSAqLw0KPiA+ICsJdmFs X3IgPSBBREY0MzYwX1JfQ09VTlRFUihyKSB8DQo+ID4gKwkJQURGNDM2MF9BQlAoQURGNDM2MF9B QlBfM18wTlMpIHwNCj4gPiArCQlBREY0MzYwX0JTQyhBREY0MzYwX0JTQ184KTsNCj4gPiArDQo+ ID4gKwlyZXQgPSBhZGY0MzYwX3dyaXRlX3JlZyhzdCwgQURGNDM2MF9SRUcoQURGNDM2MF9SRElW KSwgdmFsX3IpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4g PiArCXJldCA9IGFkZjQzNjBfd3JpdGVfcmVnKHN0LCBBREY0MzYwX1JFRyhBREY0MzYwX0NUUkwp LCB2YWxfY3RybCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0K PiA+ICsJLyoNCj4gPiArCSAqIEFsbG93IHRoZSB0cmFuc2llbnQgYmVoYXZpb3Igb2YgdGhlIEFE RjQzNjAtNyBkdXJpbmcgaW5pdGlhbA0KPiA+ICsJICogcG93ZXItdXAgdG8gc2V0dGxlLg0KPiA+ ICsJICovDQo+ID4gKwlpZiAoc3QtPmluaXRpYWxfcmVnX3NlcSkgew0KPiA+ICsJCXVzbGVlcF9y YW5nZSgxNTAwMCwgMjAwMDApOw0KPiA+ICsJCXN0LT5pbml0aWFsX3JlZ19zZXEgPSBmYWxzZTsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSBhZGY0MzYwX3dyaXRlX3JlZyhzdCwgQURGNDM2 MF9SRUcoQURGNDM2MF9ORElWKSwgdmFsX24pOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1 cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXN0LT5mcmVxX3JlcSA9IHJhdGU7DQo+ID4gKwlzdC0+biA9 IG47DQo+ID4gKwlzdC0+ciA9IHI7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbnQgYWRmNDM2MF9jbGtfc2V0X3JhdGUoc3RydWN0IGNsa19odyAq aHcsDQo+ID4gKwkJCQl1bnNpZ25lZCBsb25nIHJhdGUsDQo+ID4gKwkJCQl1bnNpZ25lZCBsb25n IHBhcmVudF9yYXRlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0g dG9fb3V0cHV0KGh3KS0+aW5kaW9fZGV2Ow0KPiA+ICsJc3RydWN0IGFkZjQzNjBfc3RhdGUgKnN0 ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJaWYg KChwYXJlbnRfcmF0ZSA9PSAwKSB8fCAocGFyZW50X3JhdGUgPiBBREY0MzYwX01BWF9SRUZJTl9S QVRFKSkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZz dC0+bG9jayk7DQo+ID4gKwlpZiAoc3QtPmNsa2luX2ZyZXEgIT0gcGFyZW50X3JhdGUpDQo+ID4g KwkJc3QtPmNsa2luX2ZyZXEgPSBwYXJlbnRfcmF0ZTsNCj4gPiArDQo+ID4gKwlyZXQgPSBhZGY0 MzYwX3NldF9mcmVxKHN0LCByYXRlKTsNCj4gPiArCW11dGV4X3VubG9jaygmc3QtPmxvY2spOw0K PiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg X19hZGY0MzYwX3Bvd2VyX2Rvd24oc3RydWN0IGFkZjQzNjBfc3RhdGUgKnN0LCB1bnNpZ25lZCBp bnQNCj4gPiBtb2RlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc3QtPnNw aS0+ZGV2Ow0KPiA+ICsJdW5zaWduZWQgaW50IHZhbDsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ ICsNCj4gPiArCXN3aXRjaCAobW9kZSkgew0KPiA+ICsJY2FzZSBBREY0MzYwX1BPV0VSX0RPV05f Tk9STUFMOg0KPiA+ICsJCWlmIChzdC0+dmRkX3JlZykgew0KPiA+ICsJCQlyZXQgPSByZWd1bGF0 b3JfZW5hYmxlKHN0LT52ZGRfcmVnKTsNCj4gPiArCQkJaWYgKHJldCkgew0KPiA+ICsJCQkJZGV2 X2VycihkZXYsICJTdXBwbHkgZW5hYmxlIGVycm9yOiAlZFxuIiwgcmV0KTsNCj4gPiArCQkJCXJl dHVybiByZXQ7DQo+ID4gKwkJCX0NCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXN0LT5pbml0aWFs X3JlZ19zZXEgPSB0cnVlOw0KPiA+ICsJCXN0LT5wb3dlcl9kb3duX21vZGUgPSBtb2RlOw0KPiA+ ICsJCXJldCA9IGFkZjQzNjBfc2V0X2ZyZXEoc3QsIHN0LT5mcmVxX3JlcSk7DQo+ID4gKwkJYnJl YWs7DQo+ID4gKwljYXNlIEFERjQzNjBfUE9XRVJfRE9XTl9TT0ZUX0FTWU5DOiAvKiBmYWxsdGhy b3VnaCAqLw0KPiA+ICsJY2FzZSBBREY0MzYwX1BPV0VSX0RPV05fU09GVF9TWU5DOg0KPiA+ICsJ CXZhbCA9IHN0LT5yZWdzW0FERjQzNjBfQ1RSTF0gJiB+QURGNDM2MF9BRERSX01VWE9VVF9NU0s7 DQo+ID4gKwkJdmFsIHw9IEFERjQzNjBfUE9XRVJET1dOKG1vZGUpOw0KPiA+ICsJCXJldCA9IGFk ZjQzNjBfd3JpdGVfcmVnKHN0LCBBREY0MzYwX1JFRyhBREY0MzYwX0NUUkwpLCB2YWwpOw0KPiA+ ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBBREY0MzYwX1BPV0VSX0RPV05fQ0U6DQo+ID4gKwkJaWYg KHN0LT5jaGlwX2VuX2dwaW8pDQo+ID4gKwkJCWdwaW9kX3NldF92YWx1ZShzdC0+Y2hpcF9lbl9n cGlvLCAweDApOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJcmV0dXJuIC1FTk9ERVY7DQo+ID4gKwkJ YnJlYWs7DQo+ID4gKwljYXNlIEFERjQzNjBfUE9XRVJfRE9XTl9SRUdVTEFUT1I6DQo+ID4gKwkJ aWYgKCFzdC0+dmRkX3JlZykNCj4gPiArCQkJcmV0dXJuIC1FTk9ERVY7DQo+ID4gKw0KPiA+ICsJ CWlmIChzdC0+Y2hpcF9lbl9ncGlvKQ0KPiA+ICsJCQlyZXQgPSBfX2FkZjQzNjBfcG93ZXJfZG93 bihzdCwgQURGNDM2MF9QT1dFUl9ET1dOX0NFKTsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXJldCA9 IF9fYWRmNDM2MF9wb3dlcl9kb3duKHN0LA0KPiA+ICsJCQkJCQlBREY0MzYwX1BPV0VSX0RPV05f U09GVF9BU1lOQyk7DQo+ID4gKw0KPiA+ICsJCXJldCA9IHJlZ3VsYXRvcl9kaXNhYmxlKHN0LT52 ZGRfcmVnKTsNCj4gPiArCQlpZiAocmV0KQ0KPiA+ICsJCQlkZXZfZXJyKGRldiwgIlN1cHBseSBk aXNhYmxlIGVycm9yOiAlZFxuIiwgcmV0KTsNCj4gPiArCQlicmVhazsNCj4gPiArCX0NCj4gPiAr CWlmIChyZXQgPT0gMCkNCj4gPiArCQlzdC0+cG93ZXJfZG93bl9tb2RlID0gbW9kZTsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBhZGY0MzYw X3Bvd2VyX2Rvd24oc3RydWN0IGFkZjQzNjBfc3RhdGUgKnN0LCB1bnNpZ25lZCBpbnQgbW9kZSkN Cj4gPiArew0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZzdC0+bG9j ayk7DQo+ID4gKwlyZXQgPSBfX2FkZjQzNjBfcG93ZXJfZG93bihzdCwgbW9kZSk7DQo+ID4gKwlt dXRleF91bmxvY2soJnN0LT5sb2NrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGFkZjQzNjBfY2xrX3ByZXBhcmUoc3RydWN0IGNsa19o dyAqaHcpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSB0b19vdXRw dXQoaHcpLT5pbmRpb19kZXY7DQo+ID4gKwlzdHJ1Y3QgYWRmNDM2MF9zdGF0ZSAqc3QgPSBpaW9f cHJpdihpbmRpb19kZXYpOw0KPiA+ICsNCj4gPiArCXJldHVybiBhZGY0MzYwX3Bvd2VyX2Rvd24o c3QsIEFERjQzNjBfUE9XRVJfRE9XTl9OT1JNQUwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgdm9pZCBhZGY0MzYwX2Nsa191bnByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpDQo+ID4gK3sN Cj4gPiArCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSB0b19vdXRwdXQoaHcpLT5pbmRpb19k ZXY7DQo+ID4gKwlzdHJ1Y3QgYWRmNDM2MF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYp Ow0KPiA+ICsNCj4gPiArCWFkZjQzNjBfcG93ZXJfZG93bihzdCwgQURGNDM2MF9QT1dFUl9ET1dO X1NPRlRfQVNZTkMpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGFkZjQzNjBfY2xr X2VuYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykNCj4gPiArew0KPiA+ICsJc3RydWN0IGlpb19kZXYg KmluZGlvX2RldiA9IHRvX291dHB1dChodyktPmluZGlvX2RldjsNCj4gPiArCXN0cnVjdCBhZGY0 MzYwX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7DQo+ID4gKw0KPiA+ICsJaWYgKHN0 LT5jaGlwX2VuX2dwaW8pDQo+ID4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlKHN0LT5jaGlwX2VuX2dwaW8s IDB4MSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIGFkZjQzNjBfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSB0b19vdXRwdXQoaHcpLT5pbmRpb19kZXY7 DQo+ID4gKwlzdHJ1Y3QgYWRmNDM2MF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOw0K PiA+ICsNCj4gPiArCWlmIChzdC0+Y2hpcF9lbl9ncGlvKQ0KPiA+ICsJCWFkZjQzNjBfcG93ZXJf ZG93bihzdCwgQURGNDM2MF9QT1dFUl9ET1dOX0NFKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBhZGY0MzYwX2Nsa19pc19lbmFibGVkKHN0cnVjdCBjbGtfaHcgKmh3KQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gdG9fb3V0cHV0KGh3KS0+aW5kaW9f ZGV2Ow0KPiA+ICsJc3RydWN0IGFkZjQzNjBfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2 KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gYWRmNDM2MF9pc19wb3dlcmRvd24oc3QpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgYWRmNDM2MF9jbGtfb3Bz ID0gew0KPiA+ICsJLnJlY2FsY19yYXRlID0gYWRmNDM2MF9jbGtfcmVjYWxjX3JhdGUsDQo+ID4g Kwkucm91bmRfcmF0ZSA9IGFkZjQzNjBfY2xrX3JvdW5kX3JhdGUsDQo+ID4gKwkuc2V0X3JhdGUg PSBhZGY0MzYwX2Nsa19zZXRfcmF0ZSwNCj4gPiArCS5wcmVwYXJlID0gYWRmNDM2MF9jbGtfcHJl cGFyZSwNCj4gPiArCS51bnByZXBhcmUgPSBhZGY0MzYwX2Nsa191bnByZXBhcmUsDQo+ID4gKwku ZW5hYmxlID0gYWRmNDM2MF9jbGtfZW5hYmxlLA0KPiA+ICsJLmRpc2FibGUgPSBhZGY0MzYwX2Ns a19kaXNhYmxlLA0KPiA+ICsJLmlzX2VuYWJsZWQgPSBhZGY0MzYwX2Nsa19pc19lbmFibGVkLA0K PiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3QgYWRmNDM2MF9yZWFkKHN0cnVjdCBp aW9fZGV2ICppbmRpb19kZXYsDQo+ID4gKwkJCSAgICB1aW50cHRyX3QgcHJpdmF0ZSwNCj4gPiAr CQkJICAgIGNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVjICpjaGFuLA0KPiA+ICsJCQkgICAgY2hh ciAqYnVmKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYWRmNDM2MF9zdGF0ZSAqc3QgPSBpaW9fcHJp dihpbmRpb19kZXYpOw0KPiA+ICsJdW5zaWduZWQgbG9uZyB2YWw7DQo+ID4gKwlpbnQgcmV0ID0g MDsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKCh1MzIpcHJpdmF0ZSkgew0KPiA+ICsJY2FzZSBBREY0 MzYwX0ZSRVFfUkVGSU46DQo+ID4gKwkJdmFsID0gc3QtPmNsa2luX2ZyZXE7DQo+ID4gKwkJYnJl YWs7DQo+ID4gKwljYXNlIEFERjQzNjBfTVRMRDoNCj4gPiArCQl2YWwgPSBzdC0+bXRsZDsNCj4g PiArCQlicmVhazsNCj4gPiArCWNhc2UgQURGNDM2MF9GUkVRX1BGRDoNCj4gPiArCQl2YWwgPSBz dC0+cGZkX2ZyZXE7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXJldCA9 IC1FSU5WQUw7DQo+ID4gKwkJdmFsID0gMDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4g cmV0IDwgMCA/IHJldCA6IHNwcmludGYoYnVmLCAiJWx1XG4iLCB2YWwpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgc3NpemVfdCBhZGY0MzYwX3dyaXRlKHN0cnVjdCBpaW9fZGV2ICppbmRp b19kZXYsDQo+ID4gKwkJCSAgICAgdWludHB0cl90IHByaXZhdGUsDQo+ID4gKwkJCSAgICAgY29u c3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgKmNoYW4sDQo+ID4gKwkJCSAgICAgY29uc3QgY2hhciAq YnVmLCBzaXplX3QgbGVuKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYWRmNDM2MF9zdGF0ZSAqc3Qg PSBpaW9fcHJpdihpbmRpb19kZXYpOw0KPiA+ICsJdW5zaWduZWQgbG9uZyByZWFkaW4sIHRtcDsN Cj4gPiArCWJvb2wgbXRsZDsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCW11dGV4 X2xvY2soJnN0LT5sb2NrKTsNCj4gPiArCXN3aXRjaCAoKHUzMilwcml2YXRlKSB7DQo+ID4gKwlj YXNlIEFERjQzNjBfRlJFUV9SRUZJTjoNCj4gPiArCQlyZXQgPSBrc3RydG91bChidWYsIDEwLCAm cmVhZGluKTsNCj4gPiArCQlpZiAocmV0KQ0KPiA+ICsJCQlicmVhazsNCj4gPiArDQo+ID4gKwkJ aWYgKChyZWFkaW4gPiBBREY0MzYwX01BWF9SRUZJTl9SQVRFKSB8fCAocmVhZGluID09IDApKSB7 DQo+ID4gKwkJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiAr DQo+ID4gKwkJaWYgKHN0LT5jbGtpbikgew0KPiA+ICsJCQl0bXAgPSBjbGtfcm91bmRfcmF0ZShz dC0+Y2xraW4sIHJlYWRpbik7DQo+ID4gKwkJCWlmICh0bXAgIT0gcmVhZGluKSB7DQo+ID4gKwkJ CQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4g KwkJCXJldCA9IGNsa19zZXRfcmF0ZShzdC0+Y2xraW4sIHRtcCk7DQo+ID4gKwkJCWlmIChyZXQp DQo+ID4gKwkJCQlicmVhazsNCj4gQSBiaXQgb2RkIHRvIGRpcmVjdGx5IHByb3ZpZGUgYW4gaW50 ZXJmYWNlIHRvIGNvbnRyb2wgYW5kIGVudGlyZWx5IGRpZmZlcmVudA0KPiBiaXQgb2YgaGFyZHdh cmUuICAgSWYgdGhlcmUgYXJlIHNwZWNpZmljIGRlbWFuZHMgb24gdGhlIGlucHV0IGNsb2NrIGFz IGENCj4gcmVzdWx0DQo+IG9mIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBvdXRwdXRzLCB0aGVu IGZhaXIgZW5vdWdoLiAgRGlyZWN0IHR3ZWFraW5nIGxpa2UNCj4gdGhpcyBzZWVtcyBsaWtlIGEg dmVyeSBvZGQgaW50ZXJmYWNlLg0KPiANCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXN0LT5jbGtp bl9mcmVxID0gcmVhZGluOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBBREY0MzYwX01UTEQ6 DQo+ID4gKwkJcmV0ID0ga3N0cnRvYm9vbChidWYsICZtdGxkKTsNCj4gPiArCQlpZiAocmV0KQ0K PiA+ICsJCQlicmVhazsNCj4gPiArDQo+ID4gKwkJc3QtPm10bGQgPSBtdGxkOw0KPiA+ICsJCWJy ZWFrOw0KPiA+ICsJY2FzZSBBREY0MzYwX0ZSRVFfUEZEOg0KPiA+ICsJCXJldCA9IGtzdHJ0b3Vs KGJ1ZiwgMTAsICZyZWFkaW4pOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4gKwkJCWJyZWFrOw0KPiA+ ICsNCj4gPiArCQlpZiAoKHJlYWRpbiA+IEFERjQzNjBfTUFYX1BGRF9SQVRFKSB8fCAocmVhZGlu ID09IDApKSB7DQo+ID4gKwkJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJ CX0NCj4gPiArDQo+ID4gKwkJc3QtPnBmZF9mcmVxID0gcmVhZGluOw0KPiA+ICsJCWJyZWFrOw0K PiA+ICsJZGVmYXVsdDoNCj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWlmIChyZXQgPT0gMCkNCj4gPiArCQlyZXQgPSBhZGY0MzYwX3NldF9mcmVxKHN0LCBzdC0+ ZnJlcV9yZXEpOw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIHJldCA/IHJldCA6IGxlbjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBh ZGY0MzYwX2dldF9tdXhvdXRfbW9kZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LA0KPiA+ICsJ CQkJICAgY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgKmNoYW4pDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCBhZGY0MzYwX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7DQo+ID4gKw0KPiA+ ICsJcmV0dXJuIHN0LT5tdXhvdXRfbW9kZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dCBhZGY0MzYwX3NldF9tdXhvdXRfbW9kZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LA0KPiA+ ICsJCQkJICAgY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgKmNoYW4sDQo+ID4gKwkJCQkgICB1 bnNpZ25lZCBpbnQgbW9kZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGFkZjQzNjBfc3RhdGUgKnN0 ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsNCj4gPiArCXVuc2lnbmVkIGludCB3cml0ZXZhbDsNCj4g PiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJnN0LT5sb2NrKTsNCj4g PiArCXdyaXRldmFsID0gc3QtPnJlZ3NbQURGNDM2MF9DVFJMXSAmIH5BREY0MzYwX0FERFJfTVVY T1VUX01TSzsNCj4gPiArCXdyaXRldmFsIHw9IEFERjQzNjBfTVVYT1VUKG1vZGUgJiAweDcpOw0K PiA+ICsJcmV0ID0gYWRmNDM2MF93cml0ZV9yZWcoc3QsIEFERjQzNjBfUkVHKEFERjQzNjBfQ1RS TCksIHdyaXRldmFsKTsNCj4gPiArCWlmIChyZXQgPT0gMCkNCj4gPiArCQlzdC0+bXV4b3V0X21v ZGUgPSBtb2RlICYgMHg3Ow0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCBpaW9fZW51bSBhZGY0MzYwX211eG91dF9tb2Rlc19hdmFpbGFibGUgPSB7DQo+ID4gKwkuaXRl bXMgPSBhZGY0MzYwX211eG91dF9tb2RlcywNCj4gPiArCS5udW1faXRlbXMgPSBBUlJBWV9TSVpF KGFkZjQzNjBfbXV4b3V0X21vZGVzKSwNCj4gPiArCS5nZXQgPSBhZGY0MzYwX2dldF9tdXhvdXRf bW9kZSwNCj4gPiArCS5zZXQgPSBhZGY0MzYwX3NldF9tdXhvdXRfbW9kZSwNCj4gPiArfTsNCj4g PiArDQo+ID4gK3N0YXRpYyBpbnQgYWRmNDM2MF9nZXRfcG93ZXJfZG93bihzdHJ1Y3QgaWlvX2Rl diAqaW5kaW9fZGV2LA0KPiA+ICsJCQkJICBjb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyAqY2hh bikNCj4gPiArew0KPiA+ICsJc3RydWN0IGFkZjQzNjBfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5k aW9fZGV2KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gc3QtPnBvd2VyX2Rvd25fbW9kZTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBhZGY0MzYwX3NldF9wb3dlcl9kb3duKHN0cnVjdCBp aW9fZGV2ICppbmRpb19kZXYsDQo+ID4gKwkJCQkgIGNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVj ICpjaGFuLA0KPiA+ICsJCQkJICB1bnNpZ25lZCBpbnQgbW9kZSkNCj4gPiArew0KPiA+ICsJc3Ry dWN0IGFkZjQzNjBfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gYWRmNDM2MF9wb3dlcl9kb3duKHN0LCBtb2RlKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9fZW51bSBhZGY0MzYwX3B3cl9kd25fbW9kZXNfYXZh aWxhYmxlID0gew0KPiA+ICsJLml0ZW1zID0gYWRmNDM2MF9wb3dlcl9kb3duX21vZGVzLA0KPiA+ ICsJLm51bV9pdGVtcyA9IEFSUkFZX1NJWkUoYWRmNDM2MF9wb3dlcl9kb3duX21vZGVzKSwNCj4g PiArCS5nZXQgPSBhZGY0MzYwX2dldF9wb3dlcl9kb3duLA0KPiA+ICsJLnNldCA9IGFkZjQzNjBf c2V0X3Bvd2VyX2Rvd24sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGFkZjQzNjBf Z2V0X3Bvd2VyX2xldmVsKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsDQo+ID4gKwkJCQkgICBj b25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyAqY2hhbikNCj4gPiArew0KPiA+ICsJc3RydWN0IGFk ZjQzNjBfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gc3QtPnBvd2VyX2xldmVsOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGFkZjQz NjBfc2V0X3Bvd2VyX2xldmVsKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsDQo+ID4gKwkJCQkg ICBjb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyAqY2hhbiwNCj4gPiArCQkJCSAgIHVuc2lnbmVk IGludCBsZXZlbCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGFkZjQzNjBfc3RhdGUgKnN0ID0gaWlv X3ByaXYoaW5kaW9fZGV2KTsNCj4gPiArCXVuc2lnbmVkIGludCB2YWw7DQo+ID4gKwlpbnQgcmV0 Ow0KPiA+ICsNCj4gPiArCWlmIChhZGY0MzYwX2lzX3Bvd2VyZG93bihzdCkpDQo+ID4gKwkJcmV0 dXJuIC1FQlVTWTsNCj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZzdC0+bG9jayk7DQo+ID4gKwl2 YWwgPSBzdC0+cmVnc1tBREY0MzYwX0NUUkxdICYgfkFERjQzNjBfQUREUl9PUExfTVNLOw0KPiA+ ICsJdmFsIHw9IEFERjQzNjBfT1BMKGxldmVsKTsNCj4gPiArCXJldCA9IGFkZjQzNjBfd3JpdGVf cmVnKHN0LCBBREY0MzYwX1JFRyhBREY0MzYwX0NUUkwpLCB2YWwpOw0KPiA+ICsJc3QtPnBvd2Vy X2xldmVsID0gbGV2ZWw7DQo+ID4gKwltdXRleF91bmxvY2soJnN0LT5sb2NrKTsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGlpb19lbnVtIGFkZjQzNjBfcHdyX2x2bF9tb2Rlc19hdmFpbGFibGUgPSB7DQo+ID4gKwkuaXRl bXMgPSBhZGY0MzYwX3Bvd2VyX2xldmVsX21vZGVzLA0KPiA+ICsJLm51bV9pdGVtcyA9IEFSUkFZ X1NJWkUoYWRmNDM2MF9wb3dlcl9sZXZlbF9tb2RlcyksDQo+ID4gKwkuZ2V0ID0gYWRmNDM2MF9n ZXRfcG93ZXJfbGV2ZWwsDQo+ID4gKwkuc2V0ID0gYWRmNDM2MF9zZXRfcG93ZXJfbGV2ZWwsDQo+ ID4gK307DQo+ID4gKw0KPiA+ICsjZGVmaW5lIF9BREY0MzYwX0VYVF9JTkZPKF9uYW1lLCBfaWRl bnQpIHsgXA0KPiA+ICsJLm5hbWUgPSBfbmFtZSwgXA0KPiA+ICsJLnJlYWQgPSBhZGY0MzYwX3Jl YWQsIFwNCj4gPiArCS53cml0ZSA9IGFkZjQzNjBfd3JpdGUsIFwNCj4gPiArCS5wcml2YXRlID0g X2lkZW50LCBcDQo+ID4gKwkuc2hhcmVkID0gSUlPX1NFUEFSQVRFLCBcDQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlY19leHRfaW5mbyBhZGY0MzYw X2V4dF9pbmZvW10gPSB7DQo+IA0KPiBUaGlzIGlzIGEgd2lkZSByYW5nZSBvZiBuZXcgQUJJLiAg VGhlc2UgYWxsIG5lZWQgZG9jdW1lbnRhdGlvbg0KPiBpbiBEb2N1bWVudGF0aW9uL0FCSS90ZXN0 aW5nL3N5c2ZzLWJ1cy1paW8tKg0KPiANCj4gV2l0aG91dCBkb2NzLCBpdCdzIGhhcmQgdG8gZGlz Y3VzcyBpZiB0aGVzZSBhcmUgYXBwcm9wcmlhdGUgYnV0IGEgZmV3IGluaXRpYWwNCj4gY29tbWVu dHMuLi4NCj4gPiArCV9BREY0MzYwX0VYVF9JTkZPKCJyZWZpbl9mcmVxdWVuY3kiLCBBREY0MzYw X0ZSRVFfUkVGSU4pLA0KPiBMb29rcyBsaWtlIGEgY29udHJvbCB0aGF0IHNob3VsZCBiZSBtYXRj aGVkIHRvIHNvbWUgY2xvY2sgc291cmNlIGFuZA0KPiBub3QgY2hhbmdlIGF0IHJ1bnRpbWU/DQo+ IA0KPiA+ICsJX0FERjQzNjBfRVhUX0lORk8oIm11dGVfdGlsbF9sb2NrX2RldGVjdCIsIEFERjQz NjBfTVRMRCksDQo+ID4gKwlfQURGNDM2MF9FWFRfSU5GTygicGZkX2ZyZXF1ZW5jeSIsIEFERjQz NjBfRlJFUV9QRkQpLA0KPiA+ICsJSUlPX0VOVU1fQVZBSUxBQkxFKCJtdXhvdXRfbW9kZSIsICZh ZGY0MzYwX211eG91dF9tb2Rlc19hdmFpbGFibGUpLA0KPiA+ICsJSUlPX0VOVU0oIm11eG91dF9t b2RlIiwgZmFsc2UsICZhZGY0MzYwX211eG91dF9tb2Rlc19hdmFpbGFibGUpLA0KPiA+ICsJSUlP X0VOVU1fQVZBSUxBQkxFKCJwb3dlcl9kb3duIiwgJmFkZjQzNjBfcHdyX2R3bl9tb2Rlc19hdmFp bGFibGUpLA0KPiA+ICsJSUlPX0VOVU0oInBvd2VyX2Rvd24iLCBmYWxzZSwgJmFkZjQzNjBfcHdy X2R3bl9tb2Rlc19hdmFpbGFibGUpLA0KPiA+ICsJSUlPX0VOVU1fQVZBSUxBQkxFKCJwb3dlcl9s ZXZlbCIsICZhZGY0MzYwX3B3cl9sdmxfbW9kZXNfYXZhaWxhYmxlKSwNCj4gPiArCUlJT19FTlVN KCJwb3dlcl9sZXZlbCIsIGZhbHNlLCAmYWRmNDM2MF9wd3JfbHZsX21vZGVzX2F2YWlsYWJsZSks DQo+ID4gKwl7IH0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlp b19jaGFuX3NwZWMgYWRmNDM2MF9jaGFuID0gew0KPiA+ICsJLnR5cGUgPSBJSU9fQUxUVk9MVEFH RSwNCj4gPiArCS5pbmRleGVkID0gMSwNCj4gPiArCS5vdXRwdXQgPSAxLA0KPiA+ICsJLmluZm9f bWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX0ZSRVFVRU5DWSksDQo+ID4gKwkuZXh0 X2luZm8gPSBhZGY0MzYwX2V4dF9pbmZvLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGlu dCBhZGY0MzYwX3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsDQo+ID4gKwkJCSAg ICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwNCj4gPiArCQkJICAgIGludCAqdmFs LA0KPiA+ICsJCQkgICAgaW50ICp2YWwyLA0KPiA+ICsJCQkgICAgbG9uZyBtYXNrKQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgYWRmNDM2MF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOw0K PiA+ICsJYm9vbCBsa19kZXQ7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChtYXNrKSB7DQo+ID4gKwlj YXNlIElJT19DSEFOX0lORk9fRlJFUVVFTkNZOg0KPiA+ICsJCWlmIChhZGY0MzYwX2lzX3Bvd2Vy ZG93bihzdCkpDQo+ID4gKwkJCXJldHVybiAtRUJVU1k7DQo+ID4gKw0KPiA+ICsJCWxrX2RldCA9 IChBREY0MzYwX01VWE9VVF9MT0NLX0RFVEVDVCB8IEFERjQzNjBfTVVYT1VUX09EX0xEKSAmDQo+ ID4gKwkJCSBzdC0+bXV4b3V0X21vZGU7DQo+ID4gKwkJaWYgKGxrX2RldCAmJiBzdC0+bXV4b3V0 X2dwaW8pIHsNCj4gPiArCQkJaWYgKCFncGlvZF9nZXRfdmFsdWUoc3QtPm11eG91dF9ncGlvKSkg ew0KPiA+ICsJCQkJZGV2X2RiZygmc3QtPnNwaS0+ZGV2LCAiUExMIHVuLWxvY2tlZFxuIik7DQo+ ID4gKwkJCQlyZXR1cm4gLUVCVVNZOw0KPiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiAr CQkqdmFsID0gc3QtPmZyZXFfcmVxOw0KPiA+ICsJCXJldHVybiBJSU9fVkFMX0lOVDsNCj4gPiAr CWRlZmF1bHQ6DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIDA7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGFkZjQzNjBfd3JpdGVf cmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsDQo+ID4gKwkJCSAgICAgc3RydWN0IGlpb19j aGFuX3NwZWMgY29uc3QgKmNoYW4sDQo+ID4gKwkJCSAgICAgaW50IHZhbCwNCj4gPiArCQkJICAg ICBpbnQgdmFsMiwNCj4gPiArCQkJICAgICBsb25nIG1hc2spDQo+ID4gK3sNCj4gPiArCXN0cnVj dCBhZGY0MzYwX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7DQo+ID4gKwlpbnQgcmV0 Ow0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJnN0LT5sb2NrKTsNCj4gPiArCXN3aXRjaCAobWFz aykgew0KPiA+ICsJY2FzZSBJSU9fQ0hBTl9JTkZPX0ZSRVFVRU5DWToNCj4gPiArCQlyZXQgPSBh ZGY0MzYwX3NldF9mcmVxKHN0LCB2YWwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoN Cj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZzdC0+ bG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBhZGY0MzYwX3JlZ19hY2Nlc3Moc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwNCj4g PiArCQkJICAgICAgdW5zaWduZWQgaW50IHJlZywNCj4gPiArCQkJICAgICAgdW5zaWduZWQgaW50 IHdyaXRldmFsLA0KPiA+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgKnJlYWR2YWwpDQo+ID4gK3sN Cj4gPiArCXN0cnVjdCBhZGY0MzYwX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7DQo+ ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKwlpZiAocmVnID49IEFERjQzNjBfUkVHX05V TSkNCj4gPiArCQlyZXR1cm4gLUVGQVVMVDsNCj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZzdC0+ bG9jayk7DQo+ID4gKwlpZiAocmVhZHZhbCkgew0KPiA+ICsJCSpyZWFkdmFsID0gc3QtPnJlZ3Nb cmVnXTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJd3JpdGV2YWwgJj0gMHhGRkZGRkM7DQo+ID4g KwkJcmV0ID0gYWRmNDM2MF93cml0ZV9yZWcoc3QsIHJlZywgd3JpdGV2YWwpOw0KPiA+ICsJfQ0K PiA+ICsJbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZGY0MzYw X2lpb19pbmZvID0gew0KPiA+ICsJLnJlYWRfcmF3ID0gJmFkZjQzNjBfcmVhZF9yYXcsDQo+ID4g Kwkud3JpdGVfcmF3ID0gJmFkZjQzNjBfd3JpdGVfcmF3LA0KPiA+ICsJLmRlYnVnZnNfcmVnX2Fj Y2VzcyA9ICZhZGY0MzYwX3JlZ19hY2Nlc3MsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IGFkZjQzNjBfZ2V0X2dwaW8oc3RydWN0IGFkZjQzNjBfc3RhdGUgKnN0KQ0KPiA+ICt7DQo+ ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc3QtPnNwaS0+ZGV2Ow0KPiA+ICsJdW5zaWduZWQg aW50IHZhbDsNCj4gPiArCWludCByZXQsIGk7DQo+ID4gKw0KPiA+ICsJc3QtPmNoaXBfZW5fZ3Bp byA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwgImVuYWJsZSIsDQo+ID4gKwkJCQkJCSAg IEdQSU9EX09VVF9ISUdIKTsNCj4gPiArCWlmIChJU19FUlIoc3QtPmNoaXBfZW5fZ3BpbykpIHsN Cj4gPiArCQlkZXZfZXJyKGRldiwgIkNoaXAgZW5hYmxlIEdQSU8gZXJyb3JcbiIpOw0KPiANCj4g UHV0IGhhbmRsaW5nIGluIGhlcmUgdG8gcHJldmVudCBhbiBlcnJvciBtZXNzYWdlIG9mIERFRkVS Lg0KPiBTYW1lIGZvciB0aGUgb3RoZXIgcm91dGVzIHdoZXJlIHRoaXMgbWlnaHQgaGFwcGVuLg0K PiANCj4gPiArCQlyZXR1cm4gUFRSX0VSUihzdC0+Y2hpcF9lbl9ncGlvKTsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlpZiAoc3QtPmNoaXBfZW5fZ3BpbykNCj4gPiArCQlzdC0+cG93ZXJfZG93bl9t b2RlID0gQURGNDM2MF9QT1dFUl9ET1dOX0NFOw0KPiA+ICsNCj4gPiArCXN0LT5tdXhvdXRfZ3Bp byA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwgImFkaSxtdXhvdXQiLCBHUElPRF9JTik7 DQo+ID4gKwlpZiAoSVNfRVJSKHN0LT5tdXhvdXRfZ3BpbykpIHsNCj4gPiArCQlkZXZfZXJyKGRl diwgIk11eG91dCBHUElPIGVycm9yXG4iKTsNCj4gPiArCQlyZXR1cm4gUFRSX0VSUihzdC0+bXV4 b3V0X2dwaW8pOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmICghc3QtPm11eG91dF9ncGlvKQ0K PiA+ICsJCXJldHVybiAwOw0KPiA+ICsNCj4gPiArCS8qIEFERjQzNjAgUExMcyBhcmUgd3JpdGUg b25seSBkZXZpY2VzLCB0cnkgdG8gcHJvYmUgdXNpbmcgR1BJTy4gKi8NCj4gPiArCWZvciAoaSA9 IDA7IGkgPCA0OyBpKyspIHsNCj4gPiArCQlpZiAoaSAmIDEpDQo+ID4gKwkJCXZhbCA9IEFERjQz NjBfTVVYT1VUKEFERjQzNjBfTVVYT1VUX0RWREQpOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJdmFs ID0gQURGNDM2MF9NVVhPVVQoQURGNDM2MF9NVVhPVVRfR05EKTsNCj4gPiArDQo+ID4gKwkJcmV0 ID0gYWRmNDM2MF93cml0ZV9yZWcoc3QsIEFERjQzNjBfUkVHKEFERjQzNjBfQ1RSTCksIHZhbCk7 DQo+ID4gKwkJaWYgKHJldCkNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwkJcmV0 ID0gZ3Bpb2RfZ2V0X3ZhbHVlKHN0LT5tdXhvdXRfZ3Bpbyk7DQo+ID4gKwkJaWYgKHJldCBeIChp ICYgMSkpIHsNCj4gPiArCQkJZGV2X2VycihkZXYsICJQcm9iZSBmYWlsZWQgKG11eG91dCkiKTsN Cj4gPiArCQkJcmV0dXJuIC1FTk9ERVY7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBhZGY0MzYwX2Nsa2lu X2Rpc2FibGUodm9pZCAqZGF0YSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGFkZjQzNjBfc3RhdGUg KnN0ID0gZGF0YTsNCj4gPiArDQo+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoc3QtPmNsa2lu KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBhZGY0MzYwX2dldF9jbGtpbihzdHJ1 Y3QgYWRmNDM2MF9zdGF0ZSAqc3QpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZzdC0+c3BpLT5kZXY7DQo+ID4gKwlzdHJ1Y3QgY2xrICpjbGs7DQo+ID4gKwlpbnQgcmV0Ow0K PiA+ICsNCj4gPiArCWNsayA9IGRldm1fY2xrX2dldChkZXYsICJjbGtpbiIpOw0KPiA+ICsJaWYg KElTX0VSUihjbGspKQ0KPiA+ICsJCXJldHVybiBQVFJfRVJSKGNsayk7DQo+ID4gKw0KPiA+ICsJ cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJl dHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRl diwgYWRmNDM2MF9jbGtpbl9kaXNhYmxlLCBzdCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJl dHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJc3QtPmNsa2luID0gY2xrOw0KPiA+ICsJc3QtPmNsa2lu X2ZyZXEgPSBjbGtfZ2V0X3JhdGUoY2xrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgYWRmNDM2MF9jbGtfZGVsX3Byb3ZpZGVyKHZvaWQg KmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBhZGY0MzYwX3N0YXRlICpzdCA9IGRhdGE7DQo+ ID4gKw0KPiA+ICsJb2ZfY2xrX2RlbF9wcm92aWRlcihzdC0+c3BpLT5kZXYub2Zfbm9kZSk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgYWRmNDM2MF9jbGtfcmVnaXN0ZXIoc3RydWN0 IGFkZjQzNjBfc3RhdGUgKnN0KQ0KPiA+ICt7DQo+IA0KPiBIbW0uIFRoaXMgbWFrZXMgbWUgd29u ZGVyIHdoeSB0aGlzIGlzIGFuIElJTyBkcml2ZXIgcmF0aGVyIHRoYW4gYSBjbGsNCj4gZHJpdmVy PyAgRGVmaW5pdGVseSBuZWVkcyBzb21lIG1vcmUgaW5mb3JtYXRpb24gaW4gdGhlIHBhdGNoIGRl c2NyaXB0aW9uDQo+IG9yIGEgY292ZXIgbGV0dGVyLg0KPiANCj4gPiArCXN0cnVjdCBzcGlfZGV2 aWNlICpzcGkgPSBzdC0+c3BpOw0KPiA+ICsJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsNCj4g PiArCXN0cnVjdCBjbGsgKmNsazsNCj4gPiArCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lOw0KPiA+ ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlwYXJlbnRfbmFtZSA9IG9mX2Nsa19nZXRfcGFyZW50 X25hbWUoc3BpLT5kZXYub2Zfbm9kZSwgMCk7DQo+ID4gKwlpZiAoIXBhcmVudF9uYW1lKQ0KPiA+ ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCWluaXQubmFtZSA9IHN0LT5jbGtfb3V0 X25hbWU7DQo+ID4gKwlpbml0Lm9wcyA9ICZhZGY0MzYwX2Nsa19vcHM7DQo+ID4gKwlpbml0LmZs YWdzID0gQ0xLX1NFVF9SQVRFX0dBVEU7DQo+ID4gKwlpbml0LnBhcmVudF9uYW1lcyA9ICZwYXJl bnRfbmFtZTsNCj4gPiArCWluaXQubnVtX3BhcmVudHMgPSAxOw0KPiA+ICsNCj4gPiArCXN0LT5v dXRwdXQuaHcuaW5pdCA9ICZpbml0Ow0KPiA+ICsNCj4gPiArCWNsayA9IGRldm1fY2xrX3JlZ2lz dGVyKCZzcGktPmRldiwgJnN0LT5vdXRwdXQuaHcpOw0KPiA+ICsJaWYgKElTX0VSUihjbGspKQ0K PiA+ICsJCXJldHVybiBQVFJfRVJSKGNsayk7DQo+ID4gKw0KPiA+ICsJcmV0ID0gb2ZfY2xrX2Fk ZF9wcm92aWRlcihzcGktPmRldi5vZl9ub2RlLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsIGNsayk7 DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0dXJu IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldCgmc3BpLT5kZXYsIGFkZjQzNjBfY2xrX2RlbF9wcm92 aWRlciwNCj4gPiBzdCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgYWRmNDM2MF9w YXJzZV9kdChzdHJ1Y3QgYWRmNDM2MF9zdGF0ZSAqc3QpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZzdC0+c3BpLT5kZXY7DQo+ID4gKwl1MzIgdG1wOw0KPiA+ICsJaW50IHJl dDsNCj4gPiArDQo+ID4gKwlyZXQgPSBkZXZpY2VfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LCAi Y2xvY2stb3V0cHV0LW5hbWVzIiwNCj4gPiArCQkJCQkgICZzdC0+Y2xrX291dF9uYW1lKTsNCj4g PiArCWlmICgocmV0IDwgMCkgJiYgZGV2LT5vZl9ub2RlKQ0KPiA+ICsJCXN0LT5jbGtfb3V0X25h bWUgPSBkZXYtPm9mX25vZGUtPm5hbWU7DQo+ID4gKw0KPiA+ICsJaWYgKHN0LT5wYXJ0X2lkID49 IElEX0FERjQzNjBfNykgew0KPiA+ICsJCS8qDQo+ID4gKwkJICogQURGNDM2MC03IHRvIEFERjQz NjAtOSBoYXZlIGEgVkNPIHRoYXQgaXMgdHVuZWQgdG8gYSBzcGVjaWZpYw0KPiA+ICsJCSAqIHJh bmdlIHVzaW5nIGFuIGV4dGVybmFsIGluZHVjdG9yLiBUaGVzZSBwcm9wZXJ0aWVzIGRlc2NyaWJl DQo+ID4gKwkJICogdGhlIHJhbmdlIHNlbGVjdGVkIGJ5IHRoZSBleHRlcm5hbCBpbmR1Y3Rvci4N Cj4gPiArCQkgKi8NCj4gPiArCQlyZXQgPSBkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LA0K PiA+ICsJCQkJCSAgICAgICAiYWRpLHZjby1taW5pbXVtLWZyZXF1ZW5jeS1oeiIsDQo+ID4gKwkJ CQkJICAgICAgICZ0bXApOw0KPiA+ICsJCWlmIChyZXQgPT0gMCkNCj4gPiArCQkJc3QtPnZjb19t aW4gPSBtYXgoc3QtPmluZm8tPnZjb19taW4sIHRtcCk7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQlz dC0+dmNvX21pbiA9IHN0LT5pbmZvLT52Y29fbWluOw0KPiA+ICsNCj4gPiArCQlyZXQgPSBkZXZp Y2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LA0KPiA+ICsJCQkJCSAgICAgICAiYWRpLHZjby1tYXhp bXVtLWZyZXF1ZW5jeS1oeiIsDQo+ID4gKwkJCQkJICAgICAgICZ0bXApOw0KPiA+ICsJCWlmIChy ZXQgPT0gMCkNCj4gPiArCQkJc3QtPnZjb19tYXggPSBtaW4oc3QtPmluZm8tPnZjb19tYXgsIHRt cCk7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQlzdC0+dmNvX21heCA9IHN0LT5pbmZvLT52Y29fbWF4 Ow0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlzdC0+dmNvX21pbiA9IHN0LT5pbmZvLT52Y29fbWlu Ow0KPiA+ICsJCXN0LT52Y29fbWF4ID0gc3QtPmluZm8tPnZjb19tYXg7DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJc3QtPnBkcCA9IGRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCAiYWRpLGxv b3AtZmlsdGVyLWludmVydGluZyIpOw0KPiA+ICsNCj4gPiArCXJldCA9IGRldmljZV9wcm9wZXJ0 eV9yZWFkX3UzMihkZXYsDQo+ID4gKwkJCQkgICAgICAgImFkaSxsb29wLWZpbHRlci1wZmQtZnJl cXVlbmN5LWh6IiwNCj4gPiArCQkJCSAgICAgICAmdG1wKTsNCj4gPiArCWlmIChyZXQgPT0gMCkg ew0KPiA+ICsJCXN0LT5wZmRfZnJlcSA9IHRtcDsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZGV2 X2VycihkZXYsICJQRkQgZnJlcXVlbmN5IHByb3BlcnR5IG1pc3NpbmdcbiIpOw0KPiA+ICsJCXJl dHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gZGV2aWNlX3Byb3BlcnR5X3Jl YWRfdTMyKGRldiwNCj4gPiArCQkJCSJhZGksbG9vcC1maWx0ZXItY2hhcmdlLXB1bXAtY3VycmVu dC1taWNyb2FtcCIsDQo+ID4gKwkJCQkmdG1wKTsNCj4gPiArCWlmIChyZXQgPT0gMCkgew0KPiA+ ICsJCXN0LT5jcGkgPSBmaW5kX2Nsb3Nlc3QodG1wLCBhZGY0MzYwX2NwaV9tb2RlcywNCj4gPiAr CQkJCSAgICAgICBBUlJBWV9TSVpFKGFkZjQzNjBfY3BpX21vZGVzKSk7DQo+ID4gKwl9IGVsc2Ug ew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiQ1BJIHByb3BlcnR5IG1pc3NpbmdcbiIpOw0KPiA+ICsJ CXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gZGV2aWNlX3Byb3BlcnR5 X3JlYWRfdTMyKGRldiwgImFkaSxwb3dlci11cC1mcmVxdWVuY3ktaHoiLCAmdG1wKTsNCj4gPiAr CWlmIChyZXQgPT0gMCkNCj4gPiArCQlzdC0+ZnJlcV9yZXEgPSB0bXA7DQo+ID4gKwllbHNlDQo+ ID4gKwkJc3QtPmZyZXFfcmVxID0gc3QtPnZjb19taW47DQo+ID4gKw0KPiA+ICsJcmV0ID0gZGV2 aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImFkaSxwb3dlci1vdXQtbGV2ZWwtbWljcm9hbXAi LA0KPiA+ICsJCQkJICAgICAgICZ0bXApOw0KPiA+ICsJaWYgKHJldCA9PSAwKQ0KPiA+ICsJCXN0 LT5wb3dlcl9sZXZlbCA9IGZpbmRfY2xvc2VzdCh0bXAsIGFkZjQzNjBfcG93ZXJfbHZsX21pY3Jv YW1wLA0KPiA+ICsJCQkJCUFSUkFZX1NJWkUoYWRmNDM2MF9wb3dlcl9sdmxfbWljcm9hbXApKTsN Cj4gPiArCWVsc2UNCj4gPiArCQlzdC0+cG93ZXJfbGV2ZWwgPSBBREY0MzYwX1BMXzU7DQo+ID4g Kw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgYWRmNDM2 MF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaWlv X2RldiAqaW5kaW9fZGV2Ow0KPiA+ICsJY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgKmlkID0g c3BpX2dldF9kZXZpY2VfaWQoc3BpKTsNCj4gDQo+IEdpdmVuIHdlIHJlcXVpcmUgdmFyaW91cyBk dCBwYXJhbWV0ZXJzIHRvIGJlIHByZXNlbnQsIG1pZ2h0IGFzIHdlbGwNCj4gYXNzb2NpYXRlIHRo ZSBpZCB3aXRoIHRoZSBvZl8gc3RydWN0dXJlcyBpbnN0ZWFkIGFuZCB1c2UgdGhlIGR0DQo+IGNh bGxzIHRocm91Z2hvdXQuICBFdmVuIGJldHRlciBpZiB5b3UgdXNlIHRoZSBmaXJtd2FyZSB0eXBl IGluZGVwZW5kZW50DQo+IHZlcnNpb25zLg0KPiANCj4gPiArCXN0cnVjdCBhZGY0MzYwX3N0YXRl ICpzdDsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJaW5kaW9fZGV2ID0gZGV2bV9paW9f ZGV2aWNlX2FsbG9jKCZzcGktPmRldiwgc2l6ZW9mKCpzdCkpOw0KPiA+ICsJaWYgKCFpbmRpb19k ZXYpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJc3QgPSBpaW9fcHJpdihp bmRpb19kZXYpOw0KPiA+ICsNCj4gPiArCW11dGV4X2luaXQoJnN0LT5sb2NrKTsNCj4gPiArDQo+ ID4gKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBpbmRpb19kZXYpOw0KPiA+ICsNCj4gPiArCXN0LT5z cGkgPSBzcGk7DQo+ID4gKwlzdC0+aW5mbyA9ICZhZGY0MzYwX2NoaXBfaW5mb190YmxbaWQtPmRy aXZlcl9kYXRhXTsNCj4gPiArCXN0LT5wYXJ0X2lkID0gaWQtPmRyaXZlcl9kYXRhOw0KPiA+ICsJ c3QtPm11eG91dF9tb2RlID0gQURGNDM2MF9NVVhPVVRfTE9DS19ERVRFQ1Q7DQo+ID4gKwlzdC0+ bXRsZCA9IHRydWU7DQo+ID4gKw0KPiA+ICsJcmV0ID0gYWRmNDM2MF9wYXJzZV9kdChzdCk7DQo+ ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2Vycigmc3BpLT5kZXYsICJQYXJzaW5nIHByb3Bl cnRpZXMgZmFpbGVkICglZClcbiIsIHJldCk7DQo+ID4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJaW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2Ow0KPiA+ ICsNCj4gPiArCWlmIChzcGktPmRldi5vZl9ub2RlKQ0KPiA+ICsJCWluZGlvX2Rldi0+bmFtZSA9 IHNwaS0+ZGV2Lm9mX25vZGUtPm5hbWU7DQo+ID4gKwllbHNlDQo+ID4gKwkJaW5kaW9fZGV2LT5u YW1lID0gc3BpX2dldF9kZXZpY2VfaWQoc3BpKS0+bmFtZTsNCj4gPiArDQo+ID4gKwlpbmRpb19k ZXYtPmluZm8gPSAmYWRmNDM2MF9paW9faW5mbzsNCj4gPiArCWluZGlvX2Rldi0+bW9kZXMgPSBJ TkRJT19ESVJFQ1RfTU9ERTsNCj4gPiArCWluZGlvX2Rldi0+Y2hhbm5lbHMgPSAmYWRmNDM2MF9j aGFuOw0KPiA+ICsJaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSAxOw0KPiA+ICsJc3QtPm91dHB1 dC5pbmRpb19kZXYgPSBpbmRpb19kZXY7DQo+ID4gKw0KPiA+ICsJcmV0ID0gYWRmNDM2MF9nZXRf Z3BpbyhzdCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ ICsJcmV0ID0gYWRmNDM2MF9nZXRfY2xraW4oc3QpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQly ZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXN0LT52ZGRfcmVnID0gZGV2bV9yZWd1bGF0b3JfZ2V0 X29wdGlvbmFsKCZzcGktPmRldiwgInZkZCIpOw0KPiA+ICsJaWYgKElTX0VSUihzdC0+dmRkX3Jl ZykpIHsNCj4gPiArCQlpZiAoUFRSX0VSUihzdC0+dmRkX3JlZykgIT0gLUVOT0RFVikgew0KPiA+ ICsJCQlkZXZfZXJyKCZzcGktPmRldiwgIlJlZ3VsYXRvciBlcnJvclxuIik7DQo+ID4gKwkJCXJl dHVybiBQVFJfRVJSKHN0LT52ZGRfcmVnKTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXN0LT52 ZGRfcmVnID0gTlVMTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSBhZGY0MzYwX3Bvd2Vy X2Rvd24oc3QsIEFERjQzNjBfUE9XRVJfRE9XTl9OT1JNQUwpOw0KPiA+ICsJaWYgKHJldCkNCj4g PiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IGFkZjQzNjBfY2xrX3JlZ2lzdGVy KHN0KTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwly ZXR1cm4gZGV2bV9paW9fZGV2aWNlX3JlZ2lzdGVyKCZzcGktPmRldiwgaW5kaW9fZGV2KTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWRmNDM2 MF9vZl9tYXRjaFtdID0gew0KPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJhZGksYWRmNDM2MC0wIiwg fSwNCj4gPiArCXsgLmNvbXBhdGlibGUgPSAiYWRpLGFkZjQzNjAtMSIsIH0sDQo+ID4gKwl7IC5j b21wYXRpYmxlID0gImFkaSxhZGY0MzYwLTIiLCB9LA0KPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJh ZGksYWRmNDM2MC0zIiwgfSwNCj4gPiArCXsgLmNvbXBhdGlibGUgPSAiYWRpLGFkZjQzNjAtNCIs IH0sDQo+ID4gKwl7IC5jb21wYXRpYmxlID0gImFkaSxhZGY0MzYwLTUiLCB9LA0KPiA+ICsJeyAu Y29tcGF0aWJsZSA9ICJhZGksYWRmNDM2MC02IiwgfSwNCj4gPiArCXsgLmNvbXBhdGlibGUgPSAi YWRpLGFkZjQzNjAtNyIsIH0sDQo+ID4gKwl7IC5jb21wYXRpYmxlID0gImFkaSxhZGY0MzYwLTgi LCB9LA0KPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJhZGksYWRmNDM2MC05IiwgfSwNCj4gPiArCXt9 LA0KPiA+ICt9Ow0KPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhZGY0MzYwX29mX21hdGNo KTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBhZGY0MzYw X2lkW10gPSB7DQo+IA0KPiBBcyBtZW50aW9uZWQgYWJvdmUsIHlvdSBjYW4ndCBhY3R1YWxseSBw cm9iZSB0aGlzIGRldmljZQ0KPiB3aXRob3V0IGEgcGlsZSBvZiBkdCBzdHVmZi4gIFNvIHRoaXMg ZmFsbGJhY2sgZG9lc24ndA0KPiBtYWtlIG11Y2ggc2Vuc2UuICBVc2UgdGhlIGRhdGEgZmllbGQg aW4gdGhlIG9mIHRhYmxlDQo+IGFib3ZlIGFuZCBnZXQgcmlkIG9mIHRoaXMgdGFibGUgZW50aXJl bHkuDQo+IA0KPiA+ICsJeyJhZGY0MzYwLTAiLCBJRF9BREY0MzYwXzB9LA0KPiA+ICsJeyJhZGY0 MzYwLTEiLCBJRF9BREY0MzYwXzF9LA0KPiA+ICsJeyJhZGY0MzYwLTIiLCBJRF9BREY0MzYwXzJ9 LA0KPiA+ICsJeyJhZGY0MzYwLTMiLCBJRF9BREY0MzYwXzN9LA0KPiA+ICsJeyJhZGY0MzYwLTQi LCBJRF9BREY0MzYwXzR9LA0KPiA+ICsJeyJhZGY0MzYwLTUiLCBJRF9BREY0MzYwXzV9LA0KPiA+ ICsJeyJhZGY0MzYwLTYiLCBJRF9BREY0MzYwXzZ9LA0KPiA+ICsJeyJhZGY0MzYwLTciLCBJRF9B REY0MzYwXzd9LA0KPiA+ICsJeyJhZGY0MzYwLTgiLCBJRF9BREY0MzYwXzh9LA0KPiA+ICsJeyJh ZGY0MzYwLTkiLCBJRF9BREY0MzYwXzl9LA0KPiA+ICsJe30NCj4gPiArfTsNCj4gPiArDQo+ID4g K3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhZGY0MzYwX2RyaXZlciA9IHsNCj4gPiArCS5kcml2 ZXIgPSB7DQo+ID4gKwkJLm5hbWUgPSAiYWRmNDM2MCIsDQo+ID4gKwkJLm9mX21hdGNoX3RhYmxl ID0gYWRmNDM2MF9vZl9tYXRjaCwNCj4gPiArCQkub3duZXIgPSBUSElTX01PRFVMRSwNCj4gDQo+ IEl0J3MgYSBsb25nIHRpbWUgc2luY2Ugd2UgaGFkIHRvIHNldCB0aGUgLm93bmVyIGZpZWxkIGZv ciBlYWNoIGRyaXZlci4NCj4gDQo+IEZvbGxvdyB0aHJvdWdoIHdoYXQgaGFwcGVucyBpbiBtb2R1 bGVfc3BpX2RyaXZlciwgc3BpX3JlZ2lzdGVyX2RyaXZlcg0KPiBldGMgYW5kIHlvdSdsbCBmaW5k IGl0J3Mgc2V0IGF1dG9tYXRpY2FsbHkgZHVyaW5nIGRyaXZlciByZWdpc3RyYXRpb24uDQo+IA0K PiA+ICsJfSwNCj4gPiArCS5wcm9iZSA9IGFkZjQzNjBfcHJvYmUsDQo+ID4gKwkuaWRfdGFibGUg PSBhZGY0MzYwX2lkLA0KPiA+ICt9Ow0KPiA+ICttb2R1bGVfc3BpX2RyaXZlcihhZGY0MzYwX2Ry aXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQo+ID4gK01PRFVM RV9BVVRIT1IoIkxhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPiIpOw0KPiA+ICtN T0RVTEVfQVVUSE9SKCJFZHdhcmQgS2lnd2FuYSA8ZWtpZ3dhbmFAZ21haWwuY29tPiIpOw0KPiA+ ICtNT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2VzIEFERjQzNjAgUExMIik7DQo=