Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp7176128imm; Wed, 27 Jun 2018 22:19:34 -0700 (PDT) X-Google-Smtp-Source: ADUXVKKjPaW6WPRmu1g1XrO//XUUfuD1grDn/hIG+NcoQ/yW6QCGlvZvh4HnvDJnxM3lVm+TmsWX X-Received: by 2002:a17:902:981:: with SMTP id 1-v6mr9062985pln.11.1530163174839; Wed, 27 Jun 2018 22:19:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530163174; cv=none; d=google.com; s=arc-20160816; b=s6lICVCKnvrQRLQQZkhiOd8XbPF45IBfYUoFfFqz13c/zfx6qfh4Y2VuiH06iZ/rtr u8VRwHgPBikcQL6bvbuXHMsaWrJpPg1kZMrXpl/w7j8pkCJJQTiZwJQp5K4aHdwgGXdR 1f2MdTJfi3FYYoQsnTVJiQH9PDfAdLHj0E5vU+aLAb95tL7t8mns2YJ9yI0CaIeZefAx aII4EMpyokDj5reYG2f4bh8QTwExJpdgLgL06/0UA1abc0kZJjjORWS7cNXy7IaWR2oN dvImGmYmseOXTXaeBHN9qWN0wXFg/41zV1od0yKSgW5XmFmZalP5oSTqipIV86hiB2CA byfQ== 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 :spamdiagnosticmetadata:spamdiagnosticoutput:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=G/J8FL6RfQL3gAwPzTO4BcfoYopL4n/EBGE1VgoZIEQ=; b=McAofbgRNNsNijS5fZEIH0u5eZrMjhMAr+vaf7bmCUCrd5O3yEgDR8Drxs8MClretd qx0mWVduqs60y7EwLiKlluJIlW4BrFNdsGjMQNu+Dinr88MoVzifwacZOY50psZbwiQg JoRBaGwx8yMxJBH5a/U4jnCmm68U3n+cU14eriqqg7FOOFpfVW+j+GuBX6Dk3uGiug8j 0VQt8Xp1VlrcRu8TgmlZ/SW6Qo04J8ihqokTQx7WrIil0S1fb5MnnWwWPIHdfENbiT+q xye/3glBSf2xepOS2+AjKpSOjFZB3RErm8XvKGW2UcZE8CownA3ko50r2JLYXzpbxG6r YFdw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=OkIwh5oX; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v12-v6si6368309plz.105.2018.06.27.22.19.20; Wed, 27 Jun 2018 22:19:34 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=OkIwh5oX; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753450AbeF1FBp (ORCPT + 99 others); Thu, 28 Jun 2018 01:01:45 -0400 Received: from mail-sn1nam02on0079.outbound.protection.outlook.com ([104.47.36.79]:13248 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751100AbeF1FBn (ORCPT ); Thu, 28 Jun 2018 01:01:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=G/J8FL6RfQL3gAwPzTO4BcfoYopL4n/EBGE1VgoZIEQ=; b=OkIwh5oXesfSuuePJAFhtqYRJfHCrAo/H4+bI+X2+HxFb7nU3kwCr4/8oYkCBSJrbmwY1oVQp2GQaoEtzPpLgJiF9UOrxcY9IggpTSDerpQjY1+DrqWE48SNZauVl92I2woRKXLQpR+k4fRDFKsIxL1a8449v9f5F6lVn3sUKRI= Received: from MWHPR02MB2623.namprd02.prod.outlook.com (10.168.206.9) by MWHPR02MB2384.namprd02.prod.outlook.com (10.168.244.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.884.24; Thu, 28 Jun 2018 05:01:37 +0000 Received: from MWHPR02MB2623.namprd02.prod.outlook.com ([fe80::fcca:2142:386d:ec1b]) by MWHPR02MB2623.namprd02.prod.outlook.com ([fe80::fcca:2142:386d:ec1b%8]) with mapi id 15.20.0884.025; Thu, 28 Jun 2018 05:01:36 +0000 From: Naga Sureshkumar Relli To: Miquel Raynal CC: "boris.brezillon@bootlin.com" , "richard@nod.at" , "dwmw2@infradead.org" , "computersforpeace@gmail.com" , "marek.vasut@gmail.com" , "f.fainelli@gmail.com" , "mmayer@broadcom.com" , "rogerq@ti.com" , "ladis@linux-mips.org" , "ada@thorsis.com" , "honghui.zhang@mediatek.com" , "linux-mtd@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "nagasureshkumarrelli@gmail.com" , Michal Simek Subject: RE: [[LINUX PATCH v10] 4/4] mtd: rawnand: pl353: Add basic driver for arm pl353 smc nand interface Thread-Topic: [[LINUX PATCH v10] 4/4] mtd: rawnand: pl353: Add basic driver for arm pl353 smc nand interface Thread-Index: AQHUCSslFhIqNZ8rp0qjyj+1AxTyIaR0QxOAgADd5DA= Date: Thu, 28 Jun 2018 05:01:35 +0000 Message-ID: References: <1529563351-2241-1-git-send-email-naga.sureshkumar.relli@xilinx.com> <1529563351-2241-5-git-send-email-naga.sureshkumar.relli@xilinx.com> <20180627172249.72f878a2@xps13> In-Reply-To: <20180627172249.72f878a2@xps13> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-TNEF-Correlator: x-originating-ip: [182.72.145.30] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;MWHPR02MB2384;7:qqH6uTtI748Q9odVBMQIpef9X5rnb7dN7db2/iB2yQLM9+3PH70G5FT1Fl1+DChThDb042mAM+JFwGkBOa8urV5YLtZBkulUO9b7zqDudxavIOjnJsRxi1oaD3H/hsn0SiOOlJaCAU2sqcZEn0eJG8TLAuy3CC7cwO8qqXuj/DbyAJXnSQRNVY3mQvRoO1OBdUgd8YLj2h9R7fXvw78Rq00W095FsD3o+rx17sOsNLQ+/lHrLceTZLNZDzXKj1Hc x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-forefront-antispam-report: SFV:SKI;SCL:-1;SFV:NSPM;SFS:(10009020)(376002)(346002)(39860400002)(396003)(136003)(366004)(51914003)(13464003)(189003)(199004)(102836004)(14444005)(55016002)(55236004)(14454004)(4326008)(76176011)(107886003)(6436002)(33656002)(39060400002)(6246003)(53936002)(53546011)(2900100001)(2906002)(7736002)(97736004)(7696005)(6916009)(54906003)(53946003)(305945005)(8676002)(74316002)(16200700003)(6506007)(5250100002)(81166006)(8936002)(316002)(229853002)(81156014)(99286004)(446003)(26005)(66066001)(476003)(478600001)(9686003)(186003)(6346003)(25786009)(105586002)(106356001)(11346002)(3846002)(5660300001)(7416002)(68736007)(86362001)(256004)(575784001)(6116002)(486006)(217873001)(559001)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:MWHPR02MB2384;H:MWHPR02MB2623.namprd02.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; x-ms-office365-filtering-correlation-id: 0f5f9e3f-9acc-44ac-ae62-08d5dcb439a4 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652034)(8989117)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(8990107)(5600026)(711020)(48565401081)(2017052603328)(7153060)(7193020);SRVR:MWHPR02MB2384; x-ms-traffictypediagnostic: MWHPR02MB2384: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(244540007438412)(31051911155226)(9452136761055)(85827821059158)(258649278758335)(192813158149592); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(20161123558120)(6072148)(201708071742011)(7699016);SRVR:MWHPR02MB2384;BCL:0;PCL:0;RULEID:;SRVR:MWHPR02MB2384; x-forefront-prvs: 0717E25089 received-spf: None (protection.outlook.com: xilinx.com does not designate permitted sender hosts) authentication-results: spf=none (sender IP is ) smtp.mailfrom=nagasure@xilinx.com; x-microsoft-antispam-message-info: e8hrsqAFRhI3QyFuauSdKhzeujLplRKucNMMeobpWGds1wucrNyKFc3GQ5qBtDLCP+V1y29NZfFjBMRQrCbWwY1F+B+NltVhu81/bS/ptmNpVfIC+vj7kcOuL7vG8u4V9dLQ2DYDE3ANGVznEIqmGureWDOK9jEVh6OACfLsLk11rEHx8h37SDArBkYvBo58nXqZtft8MEp+Dz7mzU/VffuVNX4UpxAl/zh0svoR6Jwr/PJrRxZwh4EQCBQBVWVULei0KqEqO47NHk6YRcFyIIGlAYYIEVgvHBHh3t2u6E/3/Pk9+yF1gtA+hmOWM4aeDTOwB/PYCK9i4ebHmf/Vryi5T9ImcLzzocu/fW79d88= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0f5f9e3f-9acc-44ac-ae62-08d5dcb439a4 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Jun 2018 05:01:36.0549 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR02MB2384 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTWlxdWVsLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1pcXVl bCBSYXluYWwgW21haWx0bzptaXF1ZWwucmF5bmFsQGJvb3RsaW4uY29tXQ0KPiBTZW50OiBXZWRu ZXNkYXksIEp1bmUgMjcsIDIwMTggODo1MyBQTQ0KPiBUbzogTmFnYSBTdXJlc2hrdW1hciBSZWxs aSA8bmFnYXN1cmVAeGlsaW54LmNvbT4NCj4gQ2M6IGJvcmlzLmJyZXppbGxvbkBib290bGluLmNv bTsgcmljaGFyZEBub2QuYXQ7IGR3bXcyQGluZnJhZGVhZC5vcmc7DQo+IGNvbXB1dGVyc2ZvcnBl YWNlQGdtYWlsLmNvbTsgbWFyZWsudmFzdXRAZ21haWwuY29tOyBmLmZhaW5lbGxpQGdtYWlsLmNv bTsNCj4gbW1heWVyQGJyb2FkY29tLmNvbTsgcm9nZXJxQHRpLmNvbTsgbGFkaXNAbGludXgtbWlw cy5vcmc7IGFkYUB0aG9yc2lzLmNvbTsNCj4gaG9uZ2h1aS56aGFuZ0BtZWRpYXRlay5jb207IGxp bnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3Jn Ow0KPiBuYWdhc3VyZXNoa3VtYXJyZWxsaUBnbWFpbC5jb207IE1pY2hhbCBTaW1layA8bWljaGFs c0B4aWxpbnguY29tPg0KPiBTdWJqZWN0OiBSZTogW1tMSU5VWCBQQVRDSCB2MTBdIDQvNF0gbXRk OiByYXduYW5kOiBwbDM1MzogQWRkIGJhc2ljIGRyaXZlciBmb3IgYXJtDQo+IHBsMzUzIHNtYyBu YW5kIGludGVyZmFjZQ0KPiANCj4gSGkgTmFnYSwNCj4gDQo+IFRoaXMgaXMgbm90IGFuIGlzc3Vl IGF0IGFsbCBidXQgSSB0aGluayBbUEFUQ0ggdlggWS9aXSBpcyBhIHByZWZlcnJlZCBhbmQgc2hv cnRlciBzdWZmaXgsIHlvdQ0KPiBjYW4gY3JlYXRlIGl0IGF1dG9tYXRpY2FsbHkgYnkgdXNpbmcN Cj4gDQo+ICAgICAgICAgZ2l0IGZvcm1hdC1wYXRjaCAtdiBYIDxmaXJzdF9jb21taXQ+Xi4uPGxh c3RfY29tbWl0PiAtLWNvdmVyLWxldHRlcg0KT2suDQo+IA0KPiANCj4gT24gVGh1LCAyMSBKdW4g MjAxOCAxMjoxMjozMSArMDUzMCwgTmFnYSBTdXJlc2hrdW1hciBSZWxsaQ0KPiA8bmFnYS5zdXJl c2hrdW1hci5yZWxsaUB4aWxpbnguY29tPiB3cm90ZToNCj4gDQo+ID4gQWRkIGRyaXZlciBmb3Ig YXJtIHBsMzUzIHN0YXRpYyBtZW1vcnkgY29udHJvbGxlciBuYW5kIGludGVyZmFjZSB3aXRoDQo+ ID4gSFcgRUNDIHN1cHBvcnQuIFRoaXMgY29udHJvbGxlciBpcyB1c2VkIGluIFhpbGlueCBaeW5x IFNvQyBmb3INCj4gPiBpbnRlcmZhY2luZyB0aGUgTkFORCBmbGFzaCBtZW1vcnkuDQo+ID4NCj4g PiBTaWduZWQtb2ZmLWJ5OiBOYWdhIFN1cmVzaGt1bWFyIFJlbGxpDQo+ID4gPG5hZ2Euc3VyZXNo a3VtYXIucmVsbGlAeGlsaW54LmNvbT4NCj4gPiAtLS0NCj4gPiBDaGFuZ2VzIGluIDEwOg0KPiA+ ICAtIFR5cG9zIGNvcnJlY3Rpb24gbGlrZSBuYW5kIHRvIE5BTkQgYW5kIHNvYyB0byBTT0MgZXRj Li4NCj4gPiAgLSBEZWZpbmVkIG1hY3JvcyBmb3IgdGhlIHZhbHVlcyBpbiBwbDM1M19uYW5kX2Nh bGN1bGF0ZV9od2VjYygpDQo+ID4gIC0gTW9kaWZlZCBlY2Nfc3RhdHVzIGZyb20gaW50IHRvIGNo YXIgaW4gcGwzNTNfbmFuZF9jYWxjdWxhdGVfaHdlY2MoKQ0KPiA+ICAtIENoYW5nZWQgdGhlIHJl dHVybiB0eXBlIGZvcm0gaW50IHRvIGJvb2wgdG8gdGhlIGZ1bmN0aW9uDQo+ID4gICAgb25laG90 KCkNCj4gPiAgLSBSZW1vdmVkIHVkZWxheSgxMDAwKSBpbiBwbDM1M19jbWRfZnVuY3Rpb24sIGFz IGl0IGlzIG5vdCByZXF1aXJlZA0KPiA+ICAtIERyb3BwZWQgZWNjLT5od2N0bCA9IE5VTEwgaW4g cGwzNTNfZWNjX2luaXQoKQ0KPiA+ICAtIEFkZGVkIGFuIGVycm9yIG1lc3NhZ2UgaW4gcGwzNTNf ZWNjX2luaXQoKSwgd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZw0KPiA+ICAgIG9vYnNpemUNCj4g PiAgLSBDaGFuZ2VkIHRoZSB2YXJpYWJsZSBmcm9tIHhuYW5kIHRvIHhuZmMNCj4gPiAgLSBBZGRl ZCBsb2dpYyB0byBnZXQgbXRkLT5uYW1lIGZyb20gRFQsIGlmIGl0IGlzIHNwZWNpZmllZCBpbiBE VA0KPiA+IENoYW5nZXMgaW4gdjk6DQo+ID4gIC0gQWRkcmVzc2VkIHRoZSBiZWxvdyBjb21tZW50 cyBnaXZlbiBieSBNaXF1ZWwNCj4gPiAgLSBpbnN0ZWFkIG9mIHVzaW5nIHBsMzUzX25hbmRfd3Jp dGUzMiwgdXNlIGRpcmVjdGx5IHdyaXRlbF9yZWxheGVkDQo+ID4gIC0gRml4ZWQgY2hlY2sgcGF0 Y2ggd2FybmluZ3MNCj4gPiAgLSBSZW5hbWVkIHdyaXRlX2J1Zi9yZWFkX2J1ZiB0byB3cml0ZV9k YXRhX29wL3JlYWRfZGF0YV9vcA0KPiA+ICAtIHVzZSBCSVQgbWFjcm8gaW5zdGVhZCBvZiAxIDw8 IG5yDQo+ID4gIC0gVXNlIE5BTkRfUk9XX0FERFJfMyBmbGFnDQo+ID4gIC0gVXNlIG5hbmRfd2Fp dF9yZWFkeSgpDQo+ID4gIC0gUmVtb3ZlZCBzd2VjYyBmdW5jdGlvbnMNCj4gPiAgLSBVc2UgYWRk cmVzcyBjeWNsZXMgYXMgcGVyIHNpemUsIGluc3RlYWQgb2YgcmVhZGluZyBpdCBmcm9tDQo+ID4g UGFyYW1ldGVyIHBhZ2UNCj4gPiAgLSBJbnN0ZWFkIG9mIHdyaXRpbmcgdG9vIG1hbnkgcGF0dGVy bnMsIHVzZSBvcHRpb25hbCBwcm9wZXJ0eSBDaGFuZ2VzDQo+ID4gaW4gdjg6DQo+ID4gIC0gQWRk ZWQgZXhlY19vcCgpIGltcGxlbWVudGF0aW9uDQo+ID4gIC0gRml4ZWQgdGhlIGJlbG93IHY3IHJl dmlldyBjb21tZW50cw0KPiA+ICAtIHJlbW92ZWQgbXRkX2luZm8gZnJvbSBwbDM1M19uYW5kX2lu Zm8gc3RydWN0DQo+ID4gIC0gQ29ycmVjdGVkIGVjYyBsYXlvdXQgb2Zmc2V0cw0KPiA+ICAtIEFk ZGVkIG9uLWRpZSBlY2Mgc3VwcG9ydA0KPiA+IENoYW5nZXMgaW4gdjc6DQo+ID4gIC0gQ3VycmVu dGx5IG5vdCBpbXBsZW1lbnRlZCB0aGUgbWVtY2xrIHJhdGUgYWRqdXN0bWVudHMuIEkgd2lsbA0K PiA+ICAgIGxvb2sgaW50byB0aGlzIGxhdGVyIGFuZCBvbmNlIHRoZSBiYXNpYyBkcml2ZXIgaXMg YWNjZXB0ZWQuDQo+ID4gIC0gRml4ZWQgR1BMIGxpY2VuY2UgaWRlbnQNCj4gPiBDaGFuZ2VzIGlu IHY2Og0KPiA+ICAtIEZpeGVkIHRoZSBjaGVja3BhdGNoLnBsIHJlcG9ydGVkIHdhcm5pbmdzDQo+ ID4gIC0gVXNpbmcgdGhlIGFkZHJlc3MgY3ljbGVzIGluZm9ybWF0aW9uIGZyb20gdGhlIG9uZmkg cGFyYW0gcGFnZQ0KPiA+ICAgIGVhcmxpZXIgaXQgaXMgaGFyZGNvZGVkIHRvIDUgaW4gZHJpdmVy IENoYW5nZXMgaW4gdjU6DQo+ID4gIC0gQ29uZmlndXJlIHRoZSBuYW5kIHRpbWluZyBwYXJhbWV0 ZXJzIGFzIHBlciB0aGUgb25maSBzcGVjIENoYW5nZXMgaW4gdjQ6DQo+ID4gIC0gVXBkYXRlZCB0 aGUgZHJpdmVyIHRvIHN5bmMgd2l0aCBwbDM1M19zbWMgZHJpdmVyIEFQSXMgQ2hhbmdlcyBpbg0K PiA+IHYzOg0KPiA+ICAtIGltcGxlbWVudGVkIHRoZSBwcm9wZXIgZXJyb3IgY29kZXMNCj4gPiAg LSBmdXJ0aGVyIGJyZWFrZG93biB0aGlzIHBhdGNoIHRvIG11bHRpcGxlIHNldHMNCj4gPiAgLSBh ZGRlZCB0aGUgY29udHJvbGxlciBhbmQgZHJpdmVyIGRldGFpbHMgdG8gRG9jdW1lbnRhdGlvbiBz ZWN0aW9uDQo+ID4gIC0gdXBkYXRlZCB0aGUgbGljZW5lY2UgdG8gR1BMdjINCj4gPiAgLSByZW9y Z2FuaXplZCB0aGUgcGwzNTNfbmFuZF9lY2NfaW5pdCBmdW5jdGlvbiBDaGFuZ2VzIGluIHYyOg0K PiA+ICAtIHVzZSAiZGVwZW5kcyBvbiIgcmF0aGVyIHRoYW4gInNlbGVjdCIgb3B0aW9uIGluIGtj b25maWcNCj4gPiAgLSByZW1vdmUgdW51c2VkIHZhcmlhYmxlIHBhcnRzDQo+ID4gLS0tDQo+ID4g IGRyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWcgICAgICB8ICAgIDcgKw0KPiA+ICBkcml2ZXJz L210ZC9uYW5kL3Jhdy9NYWtlZmlsZSAgICAgfCAgICAxICsNCj4gPiAgZHJpdmVycy9tdGQvbmFu ZC9yYXcvcGwzNTNfbmFuZC5jIHwgMTMwOQ0KPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysNCj4gPiAgMyBmaWxlcyBjaGFuZ2VkLCAxMzE3IGluc2VydGlvbnMoKykNCj4g PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbXRkL25hbmQvcmF3L3BsMzUzX25hbmQuYw0K PiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWcNCj4gPiBi L2RyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWcgaW5kZXggNjg3MWZmMC4uMWM1ZDUyOCAxMDA2 NDQNCj4gPiAtLS0gYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnDQo+ID4gKysrIGIvZHJp dmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZw0KPiA+IEBAIC01MzAsNCArNTMwLDExIEBAIGNvbmZp ZyBNVERfTkFORF9NVEsNCj4gPiAgCSAgRW5hYmxlcyBzdXBwb3J0IGZvciBOQU5EIGNvbnRyb2xs ZXIgb24gTVRLIFNvQ3MuDQo+ID4gIAkgIFRoaXMgY29udHJvbGxlciBpcyBmb3VuZCBvbiBtdDI3 eHgsIG10ODF4eCwgbXQ2NXh4IFNvQ3MuDQo+ID4NCj4gPiArY29uZmlnIE1URF9OQU5EX1BMMzUz DQo+ID4gKwl0cmlzdGF0ZSAiQVJNIFBsMzUzIE5BTkQgZmxhc2ggZHJpdmVyIg0KPiA+ICsJZGVw ZW5kcyBvbiBNVERfTkFORCAmJiBBUk0NCj4gPiArCWRlcGVuZHMgb24gUEwzNTNfU01DDQo+ID4g KwloZWxwDQo+ID4gKwkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgUHJpbWVDZWxsIFN0YXRpYyBNZW1v cnkgQ29udHJvbGxlciBQTDM1My4NCj4gPiArDQo+ID4gIGVuZGlmICMgTVREX05BTkQNCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUNCj4gPiBiL2RyaXZlcnMv bXRkL25hbmQvcmF3L01ha2VmaWxlIGluZGV4IDE2NWI3ZWYuLjFjNzAyZTEgMTAwNjQ0DQo+ID4g LS0tIGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL210 ZC9uYW5kL3Jhdy9NYWtlZmlsZQ0KPiA+IEBAIC01Niw2ICs1Niw3IEBAIG9iai0kKENPTkZJR19N VERfTkFORF9ISVNJNTA0KQkgICAgICAgICs9DQo+IGhpc2k1MDRfbmFuZC5vDQo+ID4gIG9iai0k KENPTkZJR19NVERfTkFORF9CUkNNTkFORCkJCSs9IGJyY21uYW5kLw0KPiA+ICBvYmotJChDT05G SUdfTVREX05BTkRfUUNPTSkJCSs9IHFjb21fbmFuZGMubw0KPiA+ICBvYmotJChDT05GSUdfTVRE X05BTkRfTVRLKQkJKz0gbXRrX2VjYy5vIG10a19uYW5kLm8NCj4gPiArb2JqLSQoQ09ORklHX01U RF9OQU5EX1BMMzUzKQkJKz0gcGwzNTNfbmFuZC5vDQo+ID4NCj4gPiAgbmFuZC1vYmpzIDo9IG5h bmRfYmFzZS5vIG5hbmRfYmJ0Lm8gbmFuZF90aW1pbmdzLm8gbmFuZF9pZHMubw0KPiA+IG5hbmQt b2JqcyArPSBuYW5kX2FtZC5vIGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9wbDM1 M19uYW5kLmMNCj4gPiBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L3BsMzUzX25hbmQuYw0KPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uM2EwYWNiZA0KPiA+IC0tLSAv ZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9wbDM1M19uYW5kLmMNCj4g PiBAQCAtMCwwICsxLDEzMDkgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjANCj4gPiArLyoNCj4gPiArICogQVJNIFBMMzUzIE5BTkQgZmxhc2ggY29udHJvbGxlciBk cml2ZXINCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDE3IFhpbGlueCwgSW5jDQo+ ID4gKyAqIEF1dGhvcjogUHVubmFpYWggY2hvd2Rhcnkga2FsbHVyaSA8cHVubmFpYWhAeGlsaW54 LmNvbT4NCj4gPiArICogQXV0aG9yOiBOYWdhIFN1cmVzaGt1bWFyIFJlbGxpIDxuYWdhc3VyZUB4 aWxpbnguY29tPg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9lcnIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9pbnRlcnJ1cHQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9pb3BvcnQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lycS5oPg0KPiA+ICsj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJh bS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvbXRkL3Jhd25hbmQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L29mX2FkZHJlc3MuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvcGwzNTMtc21jLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4g PiArDQo+ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9EUklWRVJfTkFNRSAicGwzNTMtbmFuZCINCj4g PiArDQo+ID4gKy8qIE5BTkQgZmxhc2ggZHJpdmVyIGRlZmluZXMgKi8NCj4gPiArI2RlZmluZSBQ TDM1M19OQU5EX0NNRF9QSEFTRQkxCS8qIEVuZCBjb21tYW5kIHZhbGlkIGluIGNvbW1hbmQNCj4g cGhhc2UgKi8NCj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0RBVEFfUEhBU0UJMgkvKiBFbmQgY29t bWFuZCB2YWxpZCBpbiBkYXRhIHBoYXNlDQo+ICovDQo+ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9F Q0NfU0laRQk1MTIJLyogU2l6ZSBvZiBkYXRhIGZvciBFQ0Mgb3BlcmF0aW9uICovDQo+ID4gKw0K PiA+ICsvKiBGbGFzaCBtZW1vcnkgY29udHJvbGxlciBvcGVyYXRpbmcgcGFyYW1ldGVycyAqLw0K PiA+ICsNCj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0VDQ19DT05GSUcJKEJJVCg0KSAgfAkvKiBF Q0MgcmVhZCBhdCBlbmQgb2YgcGFnZSAqLw0KPiBcDQo+ID4gKwkJCQkgKDAgPDwgNSkpCS8qIE5v IEp1bXBpbmcgKi8NCj4gPiArDQo+ID4gKy8qIEFYSSBBZGRyZXNzIGRlZmluaXRpb25zICovDQo+ ID4gKyNkZWZpbmUgU1RBUlRfQ01EX1NISUZUCQkzDQo+ID4gKyNkZWZpbmUgRU5EX0NNRF9TSElG VAkJMTENCj4gPiArI2RlZmluZSBFTkRfQ01EX1ZBTElEX1NISUZUCTIwDQo+ID4gKyNkZWZpbmUg QUREUl9DWUNMRVNfU0hJRlQJMjENCj4gPiArI2RlZmluZSBDTEVBUl9DU19TSElGVAkJMjENCj4g PiArI2RlZmluZSBFQ0NfTEFTVF9TSElGVAkJMTANCj4gPiArI2RlZmluZSBDT01NQU5EX1BIQVNF CQkoMCA8PCAxOSkNCj4gPiArI2RlZmluZSBEQVRBX1BIQVNFCQlCSVQoMTkpDQo+ID4gKw0KPiA+ ICsjZGVmaW5lIFBMMzUzX05BTkRfRUNDX0xBU1QJQklUKEVDQ19MQVNUX1NISUZUKQkvKiBTZXQN Cj4gRUNDX0xhc3QgKi8NCj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0NMRUFSX0NTCUJJVChDTEVB Ul9DU19TSElGVCkJLyogQ2xlYXIgY2hpcA0KPiBzZWxlY3QgKi8NCj4gPiArDQo+ID4gKyNkZWZp bmUgT05ESUVfRUNDX0ZFQVRVUkVfQUREUgkweDkwDQo+ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9F Q0NfQlVTWV9USU1FT1VUCSgxICogSFopDQo+ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9ERVZfQlVT WV9USU1FT1VUCSgxICogSFopDQo+ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVS X0xFTkdUSAk0DQo+ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9FQ0NfVkFMSURfU0hJRlQJMjQNCj4g PiArI2RlZmluZSBQTDM1M19OQU5EX0VDQ19WQUxJRF9NQVNLCTB4NDANCj4gPiArDQo+ID4gK3N0 cnVjdCBwbDM1M19uZmNfb3Agew0KPiA+ICsJdTMyIGNtbmRzWzRdOw0KPiA+ICsJdTMyIHRoaXJk cm93Ow0KPiA+ICsJdTMyIHR5cGU7DQo+ID4gKwl1MzIgZW5kX2NtZDsNCj4gPiArCXUzMiBhZGRy czsNCj4gPiArCWJvb2wgd2FpdDsNCj4gPiArCXUzMiBsZW47DQo+ID4gKwl1MzIgbmFkZHJzOw0K PiA+ICsJdW5zaWduZWQgaW50IGRhdGFfaW5zdHJfaWR4Ow0KPiA+ICsJY29uc3Qgc3RydWN0IG5h bmRfb3BfaW5zdHIgKmRhdGFfaW5zdHI7DQo+ID4gKwl1bnNpZ25lZCBpbnQgcmR5X3RpbWVvdXRf bXM7DQo+ID4gKwl1bnNpZ25lZCBpbnQgcmR5X2RlbGF5X25zOw0KPiA+ICsJdW5zaWduZWQgaW50 IGRhdGFfZGVsYXlfbnM7DQo+ID4gKwl1bnNpZ25lZCBpbnQgY2xlX2FsZV9kZWxheV9uczsNCj4g PiArCXUzMiBhZGRyNTsNCj4gPiArCXUzMiBhZGRyNjsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgKiBzdHJ1Y3QgcGwzNTNfbmFuZF9pbmZvIC0gRGVmaW5lcyB0aGUgTkFORCBmbGFz aCBkcml2ZXIgaW5zdGFuY2UNCj4gPiArICogQGNoaXA6CQlOQU5EIGNoaXAgaW5mb3JtYXRpb24g c3RydWN0dXJlDQo+ID4gKyAqIEBuYW5kX2Jhc2U6CQlWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIE5B TkQgZmxhc2ggZGV2aWNlDQo+ID4gKyAqIEBlbmRfY21kX3BlbmRpbmc6CUVuZCBjb21tYW5kIGlz IHBlbmRpbmcNCj4gPiArICogQGVuZF9jbWQ6CQlFbmQgY29tbWFuZA0KPiA+ICsgKiBAcm93X2Fk ZHJfY3ljbGVzOglSb3cgYWRkcmVzcyBjeWNsZXMNCj4gPiArICogQGNvbF9hZGRyX2N5Y2xlczoJ Q29sdW1uIGFkZHJlc3MgY3ljbGVzDQo+ID4gKyAqIEBhZGRyZXNzOgkJUGFnZSBhZGRyZXNzDQo+ ID4gKyAqIEBjbWRfcGVuZGluZzoJTW9yZSBjb21tYW5kIGlzIG5lZWRlZA0KPiANCj4gSSdtIHN0 aWxsIG5vdCBvayB3aXRoIHRoaXMgc3RydWN0dXJlLg0KPiANCj4gVGhlIE5BTkQgY29udHJvbGxl ciBlbnRyaWVzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIE5BTkQgY2hpcCdzLiBZb3UgY2Fu IGdldCBzb21lDQo+IGluc3BpcmF0aW9uIGZyb20gbWFydmVsbF9uYW5kLmMgb3Igc3VueGlfbmFu ZC5jLg0KT2ssIFdpbGwgY2hlY2sgdGhhdC4NCj4gDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcGwz NTNfbmFuZF9pbmZvIHsNCj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgY2hpcDsNCj4gPiArCXN0cnVj dCBkZXZpY2UgKmRldjsNCj4gPiArCXZvaWQgX19pb21lbSAqbmFuZF9iYXNlOw0KPiA+ICsJdW5z aWduZWQgbG9uZyBlbmRfY21kX3BlbmRpbmc7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGVuZF9jbWQ7 DQo+ID4gKwl1OCBhZGRyX2N5Y2xlczsNCj4gPiArCXUzMiBhZGRyZXNzOw0KPiA+ICsJdTMyIGNt ZF9wZW5kaW5nOw0KPiA+ICsJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGU7DQo+ID4gKwlzdHJ1 Y3QgY2xrICptY2xrOw0KPiA+ICsNCj4gDQo+IEV4dHJhIHNwYWNlDQpPaywgd2lsbCBjb3JyZWN0 IGl0Lg0KPiANCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfZWNjX29vYmxh eW91dDE2X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sDQo+ID4gKwkJCQkg ICAgIHN0cnVjdCBtdGRfb29iX3JlZ2lvbiAqb29icmVnaW9uKSB7DQo+ID4gKwlzdHJ1Y3QgbmFu ZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsNCj4gPiArDQo+ID4gKwlpZiAoc2VjdGlv biA+PSBjaGlwLT5lY2Muc3RlcHMpDQo+ID4gKwkJcmV0dXJuIC1FUkFOR0U7DQo+ID4gKw0KPiA+ ICsJb29icmVnaW9uLT5vZmZzZXQgPSAoc2VjdGlvbiAqIGNoaXAtPmVjYy5ieXRlcyk7DQo+ID4g Kwlvb2JyZWdpb24tPmxlbmd0aCA9IGNoaXAtPmVjYy5ieXRlczsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBwbDM1M19lY2Nfb29ibGF5b3V0 MTZfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sDQo+ID4gKwkJCQkgICAg ICBzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYnJlZ2lvbikgew0KPiA+ICsJc3RydWN0IG5hbmRf Y2hpcCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7DQo+ID4gKw0KPiA+ICsJaWYgKHNlY3Rpb24g Pj0gY2hpcC0+ZWNjLnN0ZXBzKQ0KPiA+ICsJCXJldHVybiAtRVJBTkdFOw0KPiA+ICsNCj4gPiAr CW9vYnJlZ2lvbi0+b2Zmc2V0ID0gKHNlY3Rpb24gKiBjaGlwLT5lY2MuYnl0ZXMpICsgODsNCj4g PiArCW9vYnJlZ2lvbi0+bGVuZ3RoID0gODsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGRfb29ibGF5b3V0X29wcyBwbDM1 M19lY2Nfb29ibGF5b3V0MTZfb3BzID0gew0KPiA+ICsJLmVjYyA9IHBsMzUzX2VjY19vb2JsYXlv dXQxNl9lY2MsDQo+ID4gKwkuZnJlZSA9IHBsMzUzX2VjY19vb2JsYXlvdXQxNl9mcmVlLA0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCBwbDM1M19lY2Nfb29ibGF5b3V0NjRfZWNjKHN0 cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwNCj4gPiArCQkJCSAgICAgc3RydWN0IG10 ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24pIHsNCj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAg PSBtdGRfdG9fbmFuZChtdGQpOw0KPiA+ICsNCj4gPiArCWlmIChzZWN0aW9uID49IGNoaXAtPmVj Yy5zdGVwcykNCj4gPiArCQlyZXR1cm4gLUVSQU5HRTsNCj4gPiArDQo+ID4gKwlvb2JyZWdpb24t Pm9mZnNldCA9IChzZWN0aW9uICogY2hpcC0+ZWNjLmJ5dGVzKSArIDUyOw0KPiA+ICsJb29icmVn aW9uLT5sZW5ndGggPSBjaGlwLT5lY2MuYnl0ZXM7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfZWNjX29vYmxheW91dDY0X2ZyZWUo c3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzZWN0aW9uLA0KPiA+ICsJCQkJICAgICAgc3RydWN0 IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24pIHsNCj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNo aXAgPSBtdGRfdG9fbmFuZChtdGQpOw0KPiA+ICsNCj4gPiArCWlmIChzZWN0aW9uKQ0KPiA+ICsJ CXJldHVybiAtRVJBTkdFOw0KPiA+ICsNCj4gPiArCWlmIChzZWN0aW9uID49IGNoaXAtPmVjYy5z dGVwcykNCj4gPiArCQlyZXR1cm4gLUVSQU5HRTsNCj4gPiArDQo+ID4gKwlvb2JyZWdpb24tPm9m ZnNldCA9IChzZWN0aW9uICogY2hpcC0+ZWNjLmJ5dGVzKSArIDI7DQo+ID4gKwlvb2JyZWdpb24t Pmxlbmd0aCA9IDUwOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10ZF9vb2JsYXlvdXRfb3BzIHBsMzUzX2VjY19vb2JsYXlv dXQ2NF9vcHMgPSB7DQo+ID4gKwkuZWNjID0gcGwzNTNfZWNjX29vYmxheW91dDY0X2VjYywNCj4g PiArCS5mcmVlID0gcGwzNTNfZWNjX29vYmxheW91dDY0X2ZyZWUsDQo+ID4gK307DQo+ID4gKw0K PiA+ICsvKiBHZW5lcmljIGZsYXNoIGJidCBkZWNyaXB0b3JzICovDQo+ID4gK3N0YXRpYyB1OCBi YnRfcGF0dGVybltdID0geyAnQicsICdiJywgJ3QnLCAnMCcgfTsgc3RhdGljIHU4DQo+ID4gK21p cnJvcl9wYXR0ZXJuW10gPSB7ICcxJywgJ3QnLCAnYicsICdCJyB9Ow0KPiA+ICsNCj4gPiArc3Rh dGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBiYnRfbWFpbl9kZXNjciA9IHsNCj4gPiArCS5vcHRp b25zID0gTkFORF9CQlRfTEFTVEJMT0NLIHwgTkFORF9CQlRfQ1JFQVRFIHwNCj4gTkFORF9CQlRf V1JJVEUNCj4gPiArCQl8IE5BTkRfQkJUXzJCSVQgfCBOQU5EX0JCVF9WRVJTSU9OIHwgTkFORF9C QlRfUEVSQ0hJUCwNCj4gPiArCS5vZmZzID0gNCwNCj4gPiArCS5sZW4gPSA0LA0KPiA+ICsJLnZl cm9mZnMgPSAyMCwNCj4gPiArCS5tYXhibG9ja3MgPSA0LA0KPiA+ICsJLnBhdHRlcm4gPSBiYnRf cGF0dGVybg0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNj ciBiYnRfbWlycm9yX2Rlc2NyID0gew0KPiA+ICsJLm9wdGlvbnMgPSBOQU5EX0JCVF9MQVNUQkxP Q0sgfCBOQU5EX0JCVF9DUkVBVEUgfA0KPiBOQU5EX0JCVF9XUklURQ0KPiA+ICsJCXwgTkFORF9C QlRfMkJJVCB8IE5BTkRfQkJUX1ZFUlNJT04gfCBOQU5EX0JCVF9QRVJDSElQLA0KPiA+ICsJLm9m ZnMgPSA0LA0KPiA+ICsJLmxlbiA9IDQsDQo+ID4gKwkudmVyb2ZmcyA9IDIwLA0KPiA+ICsJLm1h eGJsb2NrcyA9IDQsDQo+ID4gKwkucGF0dGVybiA9IG1pcnJvcl9wYXR0ZXJuDQo+ID4gK307DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogcGwzNTNfbmFuZF9yZWFkX2RhdGFfb3AgLSByZWFkIGNo aXAgZGF0YSBpbnRvIGJ1ZmZlcg0KPiA+ICsgKiBAY2hpcDoJUG9pbnRlciB0byB0aGUgTkFORCBj aGlwIGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBpbjoJCVBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0 byBzdG9yZSByZWFkIGRhdGENCj4gPiArICogQGxlbjoJTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQN Cj4gPiArICogUmV0dXJuOglBbHdheXMgcmV0dXJuIHplcm8NCj4gPiArICovDQo+ID4gK3N0YXRp YyBpbnQgcGwzNTNfbmFuZF9yZWFkX2RhdGFfb3Aoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4g PiArCQkJCSAgIHU4ICppbiwNCj4gPiArCQkJCSAgIHVuc2lnbmVkIGludCBsZW4pDQo+ID4gK3sN Cj4gPiArCWludCBpOw0KPiA+ICsNCj4gPiArCWlmIChJU19BTElHTkVEKCh1aW50MzJfdClpbiwg c2l6ZW9mKHVpbnQzMl90KSkgJiYNCj4gPiArCSAgICBJU19BTElHTkVEKGxlbiwgc2l6ZW9mKHVp bnQzMl90KSkpIHsNCj4gPiArCQl1MzIgKnB0ciA9ICh1MzIgKilpbjsNCj4gPiArDQo+ID4gKwkJ bGVuIC89IDQ7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQ0KPiA+ICsJCQlwdHJb aV0gPSByZWFkbChjaGlwLT5JT19BRERSX1IpOw0KPiANCj4gUGxlYXNlIGRvIG5vdCB1c2UgSU9f QUREUl9SL1csIHRoZXNlIGNoaXAgc3RydWN0dXJlIGVudHJpZXMgYXJlIGRlcHJlY2F0ZWQgYW5k IG1pZ2h0IGJlDQo+IHJlbW92ZWQgYW55dGltZSBzb29uLiBSZW1vdmluZyB0aGVtIHdpbGwgc2lt cGxpZnkgYSBsb3QgYWxsIHRoZSBmdW5jdGlvbnMgd2hlcmUgeW91IGRvIGtpbmQNCj4gb2YgdW5y ZWFkYWJsZSBwb2ludGVyIG9wZXJhdGlvbnMgYXJvdW5kIHRoZXNlIHZhbHVlLiBUaGlzIGlzIHJl YWxseSBiYWQgYW5kIEkgYWxyZWFkeSB0b2xkIHlvdQ0KPiBhYm91dCBpdC4NCj4gDQpPaywgc29y cnkgZm9yIHRoYXQsIEkgd2lsbCB1cGRhdGUgaXQuDQo+IFBsZWFzZSBmaXggdGhpcyBhbmQgdGhl biBJJ2xsIHJldmlldyB0aGUgcmVzdC4NClN1cmUuDQo+IA0KPiA+ICsJfSBlbHNlIHsNCj4gPiAr CQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspDQo+ID4gKwkJCWluW2ldID0gcmVhZGIoY2hpcC0+ SU9fQUREUl9SKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAqIHBsMzUzX25hbmRfd3JpdGVfYnVmIC0gd3JpdGUgYnVmZmVy IHRvIGNoaXANCj4gPiArICogQG10ZDoJUG9pbnRlciB0byB0aGUgbXRkIGluZm8gc3RydWN0dXJl DQo+ID4gKyAqIEBidWY6CVBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBzdG9yZSB3cml0ZSBkYXRh DQo+ID4gKyAqIEBsZW46CU51bWJlciBvZiBieXRlcyB0byB3cml0ZQ0KPiA+ICsgKi8NCj4gPiAr c3RhdGljIHZvaWQgcGwzNTNfbmFuZF93cml0ZV9kYXRhX29wKHN0cnVjdCBtdGRfaW5mbyAqbXRk LCBjb25zdCB1OCAqYnVmLA0KPiA+ICsJCQkJICAgICBpbnQgbGVuKQ0KPiA+ICt7DQo+ID4gKwlp bnQgaTsNCj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOw0K PiA+ICsNCj4gPiArCWlmIChJU19BTElHTkVEKCh1aW50MzJfdClidWYsIHNpemVvZih1aW50MzJf dCkpICYmDQo+ID4gKwkgICAgSVNfQUxJR05FRChsZW4sIHNpemVvZih1aW50MzJfdCkpKSB7DQo+ ID4gKwkJdTMyICpwdHIgPSAodTMyICopYnVmOw0KPiA+ICsNCj4gPiArCQlsZW4gLz0gNDsNCj4g PiArCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspDQo+ID4gKwkJCXdyaXRlbChwdHJbaV0sIGNo aXAtPklPX0FERFJfVyk7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBs ZW47IGkrKykNCj4gPiArCQkJd3JpdGViKGJ1ZltpXSwgY2hpcC0+SU9fQUREUl9XKTsNCj4gPiAr CX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHBsMzUzX25hbmRfY2FsY3VsYXRl X2h3ZWNjIC0gQ2FsY3VsYXRlIEhhcmR3YXJlIEVDQw0KPiA+ICsgKiBAbXRkOglQb2ludGVyIHRv IHRoZSBtdGRfaW5mbyBzdHJ1Y3R1cmUNCj4gPiArICogQGRhdGE6CVBvaW50ZXIgdG8gdGhlIHBh Z2UgZGF0YQ0KPiA+ICsgKiBAZWNjOglQb2ludGVyIHRvIHRoZSBFQ0MgYnVmZmVyIHdoZXJlIEVD QyBkYXRhIG5lZWRzIHRvIGJlIHN0b3JlZA0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9u IHJldHJpZXZlcyB0aGUgSGFyZHdhcmUgRUNDIGRhdGEgZnJvbSB0aGUgY29udHJvbGxlcg0KPiA+ ICthbmQgcmV0dXJucw0KPiA+ICsgKiBFQ0MgZGF0YSBiYWNrIHRvIHRoZSBNVEQgc3Vic3lzdGVt Lg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46CTAgb24gc3VjY2VzcyBvciBlcnJvciB2YWx1ZSBv biBmYWlsdXJlDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfY2FsY3VsYXRl X2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLA0KPiA+ICsJCQkJICAgICAgY29uc3QgdTggKmRh dGEsIHU4ICplY2MpDQo+ID4gK3sNCj4gPiArCXUzMiBlY2NfdmFsdWU7DQo+ID4gKwl1OCBlY2Nf cmVnLCBlY2NfYnl0ZSwgZWNjX3N0YXR1czsNCj4gPiArCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9 IGppZmZpZXMgKyBQTDM1M19OQU5EX0VDQ19CVVNZX1RJTUVPVVQ7DQo+IA0KPiBOZXcgbGluZQ0K T2suIEkgd2lsbCBjb3JyZWN0IGl0Lg0KPiANCj4gPiArCS8qIFdhaXQgdGlsbCB0aGUgRUNDIG9w ZXJhdGlvbiBpcyBjb21wbGV0ZSBvciB0aW1lb3V0ICovDQo+ID4gKwlkbyB7DQo+ID4gKwkJaWYg KHBsMzUzX3NtY19lY2NfaXNfYnVzeSgpKQ0KPiA+ICsJCQljcHVfcmVsYXgoKTsNCj4gPiArCQll bHNlDQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJfSB3aGlsZSAoIXRpbWVfYWZ0ZXJfZXEoamlmZmll cywgdGltZW91dCkpOw0KPiA+ICsNCj4gPiArCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRp bWVvdXQpKSB7DQo+ID4gKwkJcHJfZXJyKCIlcyB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsNCj4g PiArCQlyZXR1cm4gLUVUSU1FRE9VVDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlmb3IgKGVjY19y ZWcgPSAwOyBlY2NfcmVnIDwgNDsgZWNjX3JlZysrKSB7DQo+ID4gKwkJLyogUmVhZCBFQ0MgdmFs dWUgZm9yIGVhY2ggYmxvY2sgKi8NCj4gPiArCQllY2NfdmFsdWUgPSBwbDM1M19zbWNfZ2V0X2Vj Y192YWwoZWNjX3JlZyk7DQo+ID4gKwkJZWNjX3N0YXR1cyA9IChlY2NfdmFsdWUgPj4gUEwzNTNf TkFORF9FQ0NfVkFMSURfU0hJRlQpOw0KPiA+ICsJCS8qIEVDQyB2YWx1ZSB2YWxpZCAqLw0KPiA+ ICsJCWlmIChlY2Nfc3RhdHVzICYgUEwzNTNfTkFORF9FQ0NfVkFMSURfTUFTSykgew0KPiA+ICsJ CQlmb3IgKGVjY19ieXRlID0gMDsgZWNjX2J5dGUgPCAzOyBlY2NfYnl0ZSsrKSB7DQo+ID4gKwkJ CQkvKiBDb3B5IEVDQyBieXRlcyB0byBNVEQgYnVmZmVyICovDQo+ID4gKwkJCQkqZWNjID0gfmVj Y192YWx1ZSAmIDB4RkY7DQo+ID4gKwkJCQllY2NfdmFsdWUgPSBlY2NfdmFsdWUgPj4gODsNCj4g PiArCQkJCWVjYysrOw0KPiA+ICsJCQl9DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJcHJfd2Fy bigiJXMgc3RhdHVzIGZhaWxlZFxuIiwgX19mdW5jX18pOw0KPiA+ICsJCQlyZXR1cm4gLTE7DQo+ ID4gKwkJfQ0KPiA+ICsJfQ0KPiANCj4gTmV3IGxpbmUNCk9rLiBJIHdpbGwgcmVtb3ZlIGl0Lg0K PiANCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogb25l aG90IC0gb25laG90IGZ1bmN0aW9uDQo+ID4gKyAqIEB2YWx1ZToJVmFsdWUgdG8gY2hlY2sgZm9y IG9uZWhvdA0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIGEg dmFsdWUgaXMgb25laG90IG9yIG5vdC4NCj4gPiArICogb25laG90IGlzIGlmIGFuZCBvbmx5IGlm IG9uZWJpdCBpcyBzZXQuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJMSBpZiBpdCBpcyBvbmVo b3QgZWxzZSAwDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgYm9vbCBvbmVob3QodW5zaWduZWQgc2hv cnQgdmFsdWUpIHsNCj4gPiArCXJldHVybiAodmFsdWUgJiAodmFsdWUgLSAxKSkgPT0gMDsNCj4g DQo+IFBsZWFzZSB1c2Ugc29tZXRoaW5nIGZyb20gYml0bWFwLmMgb3IgYml0b3BzLmggdG8gZG8g dGhpcy4NCk9rLg0KPiANCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHBsMzUzX25h bmRfY29ycmVjdF9kYXRhIC0gRUNDIGNvcnJlY3Rpb24gZnVuY3Rpb24NCj4gPiArICogQG10ZDoJ UG9pbnRlciB0byB0aGUgbXRkX2luZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBidWY6CVBvaW50ZXIg dG8gdGhlIHBhZ2UgZGF0YQ0KPiA+ICsgKiBAcmVhZF9lY2M6CVBvaW50ZXIgdG8gdGhlIEVDQyB2 YWx1ZSByZWFkIGZyb20gc3BhcmUgZGF0YSBhcmVhDQo+ID4gKyAqIEBjYWxjX2VjYzoJUG9pbnRl ciB0byB0aGUgY2FsY3VsYXRlZCBFQ0MgdmFsdWUNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5j dGlvbiBjb3JyZWN0cyB0aGUgRUNDIHNpbmdsZSBiaXQgZXJyb3JzICYgZGV0ZWN0cyAyLWJpdCBl cnJvcnMuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJMCBpZiBubyBFQ0MgZXJyb3JzIGZvdW5k DQo+ID4gKyAqCQkxIGlmIHNpbmdsZSBiaXQgZXJyb3IgZm91bmQgYW5kIGNvcnJlY3RlZC4NCj4g PiArICoJCS0xIGlmIG11bHRpcGxlIHVuY29ycmVjdGFibGUgRUNDIGVycm9ycyBmb3VuZC4NCj4g PiArICovDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9jb3JyZWN0X2RhdGEoc3RydWN0IG10 ZF9pbmZvICptdGQsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwNCj4gPiArCQkJCSAgIHVuc2lnbmVkIGNo YXIgKnJlYWRfZWNjLA0KPiA+ICsJCQkJICAgdW5zaWduZWQgY2hhciAqY2FsY19lY2MpDQo+ID4g K3sNCj4gPiArCXVuc2lnbmVkIGNoYXIgYml0X2FkZHI7DQo+ID4gKwl1bnNpZ25lZCBpbnQgYnl0 ZV9hZGRyOw0KPiA+ICsJdW5zaWduZWQgc2hvcnQgZWNjX29kZCwgZWNjX2V2ZW4sIHJlYWRfZWNj X2xvd2VyLCByZWFkX2VjY191cHBlcjsNCj4gPiArCXVuc2lnbmVkIHNob3J0IGNhbGNfZWNjX2xv d2VyLCBjYWxjX2VjY191cHBlcjsNCj4gPiArDQo+ID4gKwlyZWFkX2VjY19sb3dlciA9IChyZWFk X2VjY1swXSB8IChyZWFkX2VjY1sxXSA8PCA4KSkgJiAweGZmZjsNCj4gPiArCXJlYWRfZWNjX3Vw cGVyID0gKChyZWFkX2VjY1sxXSA+PiA0KSB8IChyZWFkX2VjY1syXSA8PCA0KSkgJiAweGZmZjsN Cj4gPiArDQo+ID4gKwljYWxjX2VjY19sb3dlciA9IChjYWxjX2VjY1swXSB8IChjYWxjX2VjY1sx XSA8PCA4KSkgJiAweGZmZjsNCj4gPiArCWNhbGNfZWNjX3VwcGVyID0gKChjYWxjX2VjY1sxXSA+ PiA0KSB8IChjYWxjX2VjY1syXSA8PCA0KSkgJiAweGZmZjsNCj4gPiArDQo+ID4gKwllY2Nfb2Rk ID0gcmVhZF9lY2NfbG93ZXIgXiBjYWxjX2VjY19sb3dlcjsNCj4gPiArCWVjY19ldmVuID0gcmVh ZF9lY2NfdXBwZXIgXiBjYWxjX2VjY191cHBlcjsNCj4gPiArDQo+ID4gKwkvKiBubyBlcnJvciAq Lw0KPiA+ICsJaWYgKCFlY2Nfb2RkICYmICFlY2NfZXZlbikNCj4gPiArCQlyZXR1cm4gMDsNCj4g PiArDQo+ID4gKwlpZiAoZWNjX29kZCA9PSAofmVjY19ldmVuICYgMHhmZmYpKSB7DQo+ID4gKwkJ LyogYml0cyBbMTE6M10gb2YgZXJyb3IgY29kZSBpcyBieXRlIG9mZnNldCAqLw0KPiA+ICsJCWJ5 dGVfYWRkciA9IChlY2Nfb2RkID4+IDMpICYgMHgxZmY7DQo+IA0KPiBZb3UgbWlnaHQgd2FudCB0 byBkZWZpbmUgdGhlc2UgdmFsdWVzLg0KT2sNCj4gDQo+ID4gKwkJLyogYml0cyBbMjowXSBvZiBl cnJvciBjb2RlIGlzIGJpdCBvZmZzZXQgKi8NCj4gPiArCQliaXRfYWRkciA9IGVjY19vZGQgJiAw eDc7DQo+IA0KPiBTYW1lIGhlcmUuDQpPaw0KPiANCj4gPiArCQkvKiBUb2dnbGluZyBlcnJvciBi aXQgKi8NCj4gPiArCQlidWZbYnl0ZV9hZGRyXSBePSAoQklUKGJpdF9hZGRyKSk7DQo+ID4gKwkJ cmV0dXJuIDE7DQo+ID4gKwl9DQo+IA0KPiBOZXcgbGluZQ0KT2suIEkgd2lsbCBjb3JyZWN0IGl0 Lg0KPiANCj4gPiArCS8qIG9uZSBlcnJvciBpbiBwYXJpdHkgKi8NCj4gPiArCWlmIChvbmVob3Qo ZWNjX29kZCB8IGVjY19ldmVuKSA9PSAxKQ0KPiA+ICsJCXJldHVybiAxOw0KPiA+ICsNCj4gPiAr CS8qIFVuY29ycmVjdGFibGUgZXJyb3IgKi8NCj4gPiArCXJldHVybiAtMTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCBwbDM1M19kZXZfdGltZW91dChzdHJ1Y3QgbXRkX2luZm8gKm10 ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4gPiArCQkJICAgICB1bnNpZ25lZCBsb25nIHRp bWVvdXQpDQo+ID4gK3sNCj4gPiArCWlmICh0aW1lb3V0KQ0KPiA+ICsJCXRpbWVvdXQgPSBqaWZm aWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsNCj4gPiArCWVsc2UNCj4gPiArCQl0aW1l b3V0ID0gamlmZmllcyArIFBMMzUzX05BTkRfREVWX0JVU1lfVElNRU9VVDsNCj4gPiArDQo+ID4g KwlkbyB7DQo+ID4gKwkJaWYgKGNoaXAtPmRldl9yZWFkeShtdGQpKQ0KPiA+ICsJCQlicmVhazsN Cj4gPiArCQljcHVfcmVsYXgoKTsNCj4gPiArCX0gd2hpbGUgKCF0aW1lX2FmdGVyX2VxKGppZmZp ZXMsIHRpbWVvdXQpKTsNCj4gDQo+IElzbid0IHRoaXMgYSBuYW5kX3dhaXRfcmVhZHkoKSBlcXVp dmFsZW50Pw0KTGV0IG1lIGNoZWNrLg0KPiANCj4gPiArDQo+ID4gKwlpZiAodGltZV9hZnRlcl9l cShqaWZmaWVzLCB0aW1lb3V0KSkgew0KPiA+ICsJCXByX2VycigiJXMgdGltZWQgb3V0XG4iLCBf X2Z1bmNfXyk7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBwbDM1M19wcmVwYXJlX2NtZChz dHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4gPiArCQkJICAg ICAgaW50IHBhZ2UsIGludCBjb2x1bW4sIGludCBzdGFydF9jbWQsIGludCBlbmRfY21kLA0KPiA+ ICsJCQkgICAgICBib29sIHJlYWQpDQo+ID4gK3sNCj4gPiArCXVuc2lnbmVkIGxvbmcgZGF0YV9w aGFzZV9hZGRyOw0KPiA+ICsJdTMyIGVuZF9jbWRfdmFsaWQgPSAwOw0KPiA+ICsJdm9pZCBfX2lv bWVtICpjbWRfYWRkcjsNCj4gPiArCXVuc2lnbmVkIGxvbmcgY21kX3BoYXNlX2FkZHIgPSAwLCBj bWRfZGF0YSA9IDA7DQo+ID4gKw0KPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfaW5mbyAqeG5mYyA9 DQo+ID4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbDM1M19uYW5kX2luZm8sIGNoaXAp Ow0KPiA+ICsNCj4gPiArCWVuZF9jbWRfdmFsaWQgPSByZWFkID8gMSA6IDA7DQo+ID4gKw0KPiA+ ICsJY21kX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPm5hbmRfYmFz ZSArDQo+ID4gKwkJCSAoKHhuZmMtPmFkZHJfY3ljbGVzDQo+ID4gKwkJCSA8PCBBRERSX0NZQ0xF U19TSElGVCkgfA0KPiA+ICsJCQkgKGVuZF9jbWRfdmFsaWQgPDwgRU5EX0NNRF9WQUxJRF9TSElG VCkgfA0KPiA+ICsJCQkgKENPTU1BTkRfUEhBU0UpIHwNCj4gPiArCQkJIChlbmRfY21kIDw8IEVO RF9DTURfU0hJRlQpIHwNCj4gPiArCQkJIChzdGFydF9jbWQgPDwgU1RBUlRfQ01EX1NISUZUKSk7 DQo+ID4gKwljbWRfYWRkciA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWNtZF9waGFzZV9hZGRy Ow0KPiA+ICsNCj4gPiArCS8qIEdldCB0aGUgZGF0YSBwaGFzZSBhZGRyZXNzICovDQo+ID4gKwlk YXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPm5hbmRfYmFzZSAr DQo+ID4gKwkJCSAgKCgweDAgPDwgQ0xFQVJfQ1NfU0hJRlQpIHwNCj4gPiArCQkJICAoMCA8PCBF TkRfQ01EX1ZBTElEX1NISUZUKSB8DQo+ID4gKwkJCSAgKERBVEFfUEhBU0UpIHwNCj4gPiArCQkJ ICAoZW5kX2NtZCA8PCBFTkRfQ01EX1NISUZUKSB8DQo+ID4gKwkJCSAgKDB4MCA8PCBFQ0NfTEFT VF9TSElGVCkpOw0KPiA+ICsNCj4gPiArCWNoaXAtPklPX0FERFJfUiA9ICh2b2lkIF9faW9tZW0g KiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRkcjsNCj4gPiArCWNoaXAtPklPX0FERFJfVyA9IGNoaXAt PklPX0FERFJfUjsNCj4gPiArCWlmIChjaGlwLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikN Cj4gPiArCQljb2x1bW4gLz0gMjsNCj4gPiArCWNtZF9kYXRhID0gY29sdW1uOw0KPiA+ICsJaWYg KG10ZC0+d3JpdGVzaXplID4gUEwzNTNfTkFORF9FQ0NfU0laRSkgew0KPiA+ICsJCWNtZF9kYXRh IHw9IHBhZ2UgPDwgMTY7DQo+ID4gKwkJLyogQW5vdGhlciBhZGRyZXNzIGN5Y2xlIGZvciBkZXZp Y2VzID4gMTI4TWlCICovDQo+ID4gKwkJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX1JPV19BRERS XzMpIHsNCj4gPiArCQkJd3JpdGVsX3JlbGF4ZWQoY21kX2RhdGEsIGNtZF9hZGRyKTsNCj4gPiAr CQkJY21kX2RhdGEgPSAocGFnZSA+PiAxNik7DQo+ID4gKwkJfQ0KPiA+ICsJfSBlbHNlIHsNCj4g PiArCQljbWRfZGF0YSB8PSBwYWdlIDw8IDg7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJd3JpdGVs X3JlbGF4ZWQoY21kX2RhdGEsIGNtZF9hZGRyKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAqIHBsMzUzX25hbmRfcmVhZF9vb2IgLSBbUkVQTEFDRUFCTEVdIHRoZSBtb3N0IGNvbW1v biBPT0IgZGF0YSByZWFkIGZ1bmN0aW9uDQo+ID4gKyAqIEBtdGQ6CVBvaW50ZXIgdG8gdGhlIG10 ZCBpbmZvIHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2hpcDoJUG9pbnRlciB0byB0aGUgTkFORCBjaGlw IGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBwYWdlOglQYWdlIG51bWJlciB0byByZWFkDQo+ID4g KyAqDQo+ID4gKyAqIFJldHVybjoJQWx3YXlzIHJldHVybiB6ZXJvDQo+ID4gKyAqLw0KPiA+ICtz dGF0aWMgaW50IHBsMzUzX25hbmRfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVj dCBuYW5kX2NoaXAgKmNoaXAsDQo+ID4gKwkJCSAgICAgICBpbnQgcGFnZSkNCj4gPiArew0KPiA+ ICsJdW5zaWduZWQgbG9uZyBkYXRhX3BoYXNlX2FkZHI7DQo+ID4gKwl1OCAqcDsNCj4gPiArCXN0 cnVjdCBwbDM1M19uYW5kX2luZm8gKnhuZmMgPQ0KPiA+ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBz dHJ1Y3QgcGwzNTNfbmFuZF9pbmZvLCBjaGlwKTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgbmFuZF9v ZmZzZXQgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPm5hbmRfYmFzZTsNCj4gPiArDQo+ ID4gKwljaGlwLT5wYWdlYnVmID0gLTE7DQo+ID4gKwlpZiAobXRkLT53cml0ZXNpemUgPCBQTDM1 M19OQU5EX0VDQ19TSVpFKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsNCj4gPiArCXBsMzUzX3By ZXBhcmVfY21kKG10ZCwgY2hpcCwgcGFnZSwgbXRkLT53cml0ZXNpemUsIE5BTkRfQ01EX1JFQUQw LA0KPiA+ICsJCQkgIE5BTkRfQ01EX1JFQURTVEFSVCwgMSk7DQo+ID4gKw0KPiA+ICsJbmRlbGF5 KDEwMCk7DQo+ID4gKwlwbDM1M19kZXZfdGltZW91dChtdGQsIGNoaXAsIDApOw0KPiA+ICsNCj4g PiArCXAgPSBjaGlwLT5vb2JfcG9pOw0KPiA+ICsJcGwzNTNfbmFuZF9yZWFkX2RhdGFfb3AoY2hp cCwgcCwNCj4gPiArCQkJCShtdGQtPm9vYnNpemUgLQ0KPiA+ICsJCQkJUEwzNTNfTkFORF9MQVNU X1RSQU5TRkVSX0xFTkdUSCkpOw0KPiA+ICsJcCArPSAobXRkLT5vb2JzaXplIC0gUEwzNTNfTkFO RF9MQVNUX1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWdu ZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FERFJfUjsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciAt PSBuYW5kX29mZnNldDsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciB8PSBQTDM1M19OQU5EX0NMRUFS X0NTOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyICs9IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJY2hpcC0+ SU9fQUREUl9SID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ ICsJcGwzNTNfbmFuZF9yZWFkX2RhdGFfb3AoY2hpcCwgcCwgUEwzNTNfTkFORF9MQVNUX1RSQU5T RkVSX0xFTkdUSCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgKiBwbDM1M19uYW5kX3dyaXRlX29vYiAtIFtSRVBMQUNFQUJMRV0gdGhlIG1v c3QgY29tbW9uIE9PQiBkYXRhIHdyaXRlDQo+IGZ1bmN0aW9uDQo+ID4gKyAqIEBtdGQ6CVBvaW50 ZXIgdG8gdGhlIG10ZCBpbmZvIHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2hpcDoJUG9pbnRlciB0byB0 aGUgTkFORCBjaGlwIGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBwYWdlOglQYWdlIG51bWJlciB0 byB3cml0ZQ0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46CVplcm8gb24gc3VjY2VzcyBhbmQgRUlP IG9uIGZhaWx1cmUNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF93cml0ZV9v b2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsDQo+ID4gKwkJ CQlpbnQgcGFnZSkNCj4gPiArew0KPiA+ICsJY29uc3QgdTggKmJ1ZiA9IGNoaXAtPm9vYl9wb2k7 DQo+ID4gKwl1bnNpZ25lZCBsb25nIGRhdGFfcGhhc2VfYWRkcjsNCj4gPiArCXN0cnVjdCBwbDM1 M19uYW5kX2luZm8gKnhuZmMgPQ0KPiA+ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwz NTNfbmFuZF9pbmZvLCBjaGlwKTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgbmFuZF9vZmZzZXQgPSAo dW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPm5hbmRfYmFzZTsNCj4gPiArCXUzMiBhZGRyY3lj bGVzID0gMDsNCj4gPiArDQo+ID4gKwljaGlwLT5wYWdlYnVmID0gLTE7DQo+ID4gKwlhZGRyY3lj bGVzID0geG5mYy0+YWRkcl9jeWNsZXM7DQo+ID4gKwlwbDM1M19wcmVwYXJlX2NtZChtdGQsIGNo aXAsIHBhZ2UsIG10ZC0+d3JpdGVzaXplLCBOQU5EX0NNRF9TRVFJTiwNCj4gPiArCQkJICBOQU5E X0NNRF9QQUdFUFJPRywgMCk7DQo+ID4gKwluZGVsYXkoMTAwKTsNCj4gPiArCXBsMzUzX25hbmRf d3JpdGVfZGF0YV9vcChtdGQsIGJ1ZiwNCj4gPiArCQkJCSAobXRkLT5vb2JzaXplIC0NCj4gPiAr CQkJCSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSk7DQo+ID4gKwlidWYgKz0gKG10 ZC0+b29ic2l6ZSAtIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ICsNCj4g PiArCWRhdGFfcGhhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpY2hpcC0+SU9fQURE Ul9XOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIC09IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJZGF0YV9w aGFzZV9hZGRyIHw9IFBMMzUzX05BTkRfQ0xFQVJfQ1M7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIg fD0gKDEgPDwgRU5EX0NNRF9WQUxJRF9TSElGVCk7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgKz0g bmFuZF9vZmZzZXQ7DQo+ID4gKwljaGlwLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICogX19m b3JjZSlkYXRhX3BoYXNlX2FkZHI7DQo+ID4gKwlwbDM1M19uYW5kX3dyaXRlX2RhdGFfb3AobXRk LCBidWYsDQo+IFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ICsJbmFuZF93 YWl0X3JlYWR5KG10ZCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgKiBwbDM1M19uYW5kX3JlYWRfcGFnZV9yYXcgLSBbSW50ZXJuXSByZWFk IHJhdyBwYWdlIGRhdGEgd2l0aG91dCBlY2MNCj4gPiArICogQG10ZDoJCVBvaW50ZXIgdG8gdGhl IG10ZCBpbmZvIHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2hpcDoJCVBvaW50ZXIgdG8gdGhlIE5BTkQg Y2hpcCBpbmZvIHN0cnVjdHVyZQ0KPiA+ICsgKiBAYnVmOgkJUG9pbnRlciB0byB0aGUgZGF0YSBi dWZmZXINCj4gPiArICogQG9vYl9yZXF1aXJlZDoJQ2FsbGVyIHJlcXVpcmVzIE9PQiBkYXRhIHJl YWQgdG8gY2hpcC0+b29iX3BvaQ0KPiA+ICsgKiBAcGFnZToJCVBhZ2UgbnVtYmVyIHRvIHJlYWQN Cj4gPiArICoNCj4gPiArICogUmV0dXJuOglBbHdheXMgcmV0dXJuIHplcm8NCj4gPiArICovDQo+ ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9yZWFkX3BhZ2VfcmF3KHN0cnVjdCBtdGRfaW5mbyAq bXRkLA0KPiA+ICsJCQkJICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsDQo+ID4gKwkJCQkgICAg dTggKmJ1ZiwgaW50IG9vYl9yZXF1aXJlZCwgaW50IHBhZ2UpIHsNCj4gPiArCXVuc2lnbmVkIGxv bmcgZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsJdTggKnA7DQo+ID4gKwlzdHJ1Y3QgcGwzNTNfbmFu ZF9pbmZvICp4bmZjID0NCj4gPiArCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBsMzUzX25h bmRfaW5mbywgY2hpcCk7DQo+ID4gKwl1bnNpZ25lZCBsb25nIG5hbmRfb2Zmc2V0ID0gKHVuc2ln bmVkIGxvbmcgX19mb3JjZSl4bmZjLT5uYW5kX2Jhc2U7DQo+ID4gKw0KPiA+ICsJcGwzNTNfbmFu ZF9yZWFkX2RhdGFfb3AoY2hpcCwgYnVmLCBtdGQtPndyaXRlc2l6ZSk7DQo+ID4gKwlwID0gY2hp cC0+b29iX3BvaTsNCj4gPiArCXBsMzUzX25hbmRfcmVhZF9kYXRhX29wKGNoaXAsIHAsDQo+ID4g KwkJCQkobXRkLT5vb2JzaXplIC0NCj4gPiArCQkJCVBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9M RU5HVEgpKTsNCj4gPiArCXAgKz0gKG10ZC0+b29ic2l6ZSAtIFBMMzUzX05BTkRfTEFTVF9UUkFO U0ZFUl9MRU5HVEgpOw0KPiA+ICsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciA9ICh1bnNpZ25lZCBs b25nIF9fZm9yY2UpY2hpcC0+SU9fQUREUl9SOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIC09IG5h bmRfb2Zmc2V0Ow0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIHw9IFBMMzUzX05BTkRfQ0xFQVJfQ1M7 DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgKz0gbmFuZF9vZmZzZXQ7DQo+ID4gKwljaGlwLT5JT19B RERSX1IgPSAodm9pZCBfX2lvbWVtICogX19mb3JjZSlkYXRhX3BoYXNlX2FkZHI7DQo+ID4gKw0K PiA+ICsJcGwzNTNfbmFuZF9yZWFkX2RhdGFfb3AoY2hpcCwgcCwgUEwzNTNfTkFORF9MQVNUX1RS QU5TRkVSX0xFTkdUSCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgKiBwbDM1M19uYW5kX3dyaXRlX3BhZ2VfcmF3IC0gW0ludGVybl0gcmF3 IHBhZ2Ugd3JpdGUgZnVuY3Rpb24NCj4gPiArICogQG10ZDoJCVBvaW50ZXIgdG8gdGhlIG10ZCBp bmZvIHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2hpcDoJCVBvaW50ZXIgdG8gdGhlIE5BTkQgY2hpcCBp bmZvIHN0cnVjdHVyZQ0KPiA+ICsgKiBAYnVmOgkJUG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIN Cj4gPiArICogQG9vYl9yZXF1aXJlZDoJQ2FsbGVyIHJlcXVpcmVzIE9PQiBkYXRhIHJlYWQgdG8g Y2hpcC0+b29iX3BvaQ0KPiA+ICsgKiBAcGFnZToJCVBhZ2UgbnVtYmVyIHRvIHdyaXRlDQo+ID4g KyAqDQo+ID4gKyAqIFJldHVybjoJQWx3YXlzIHJldHVybiB6ZXJvDQo+ID4gKyAqLw0KPiA+ICtz dGF0aWMgaW50IHBsMzUzX25hbmRfd3JpdGVfcGFnZV9yYXcoc3RydWN0IG10ZF9pbmZvICptdGQs DQo+ID4gKwkJCQkgICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsDQo+ID4gKwkJCQkgICAgIGNv bnN0IHU4ICpidWYsIGludCBvb2JfcmVxdWlyZWQsDQo+ID4gKwkJCQkgICAgIGludCBwYWdlKQ0K PiA+ICt7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGRhdGFfcGhhc2VfYWRkcjsNCj4gPiArCXU4ICpw Ow0KPiA+ICsNCj4gPiArCXN0cnVjdCBwbDM1M19uYW5kX2luZm8gKnhuZmMgPQ0KPiA+ICsJCWNv bnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNfbmFuZF9pbmZvLCBjaGlwKTsNCj4gPiArCXVu c2lnbmVkIGxvbmcgbmFuZF9vZmZzZXQgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPm5h bmRfYmFzZTsNCj4gPiArDQo+ID4gKwlwbDM1M19uYW5kX3dyaXRlX2RhdGFfb3AobXRkLCBidWYs IG10ZC0+d3JpdGVzaXplKTsNCj4gPiArCXAgPSBjaGlwLT5vb2JfcG9pOw0KPiA+ICsJcGwzNTNf bmFuZF93cml0ZV9kYXRhX29wKG10ZCwgcCwNCj4gPiArCQkJCSAobXRkLT5vb2JzaXplIC0NCj4g PiArCQkJCSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSk7DQo+ID4gKwlwICs9ICht dGQtPm9vYnNpemUgLSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4gPiArDQo+ ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FE RFJfVzsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiArCWRhdGFf cGhhc2VfYWRkciB8PSBQTDM1M19OQU5EX0NMRUFSX0NTOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRy IHw9ICgxIDw8IEVORF9DTURfVkFMSURfU0hJRlQpOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyICs9 IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJY2hpcC0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqIF9f Zm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsNCj4gPiArCXBsMzUzX25hbmRfd3JpdGVfZGF0 YV9vcChtdGQsIHAsIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ICsNCj4g PiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogbmFuZF93cml0 ZV9wYWdlX2h3ZWNjIC0gSGFyZHdhcmUgRUNDIGJhc2VkIHBhZ2Ugd3JpdGUgZnVuY3Rpb24NCj4g PiArICogQG10ZDoJCVBvaW50ZXIgdG8gdGhlIG10ZCBpbmZvIHN0cnVjdHVyZQ0KPiA+ICsgKiBA Y2hpcDoJCVBvaW50ZXIgdG8gdGhlIE5BTkQgY2hpcCBpbmZvIHN0cnVjdHVyZQ0KPiA+ICsgKiBA YnVmOgkJUG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXINCj4gPiArICogQG9vYl9yZXF1aXJlZDoJ Q2FsbGVyIHJlcXVpcmVzIE9PQiBkYXRhIHJlYWQgdG8gY2hpcC0+b29iX3BvaQ0KPiA+ICsgKiBA cGFnZToJCVBhZ2UgbnVtYmVyIHRvIHdyaXRlDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rp b25zIHdyaXRlcyBkYXRhIGFuZCBoYXJkd2FyZSBnZW5lcmF0ZWQgRUNDIHZhbHVlcyBpbiB0byB0 aGUgcGFnZS4NCj4gPiArICoNCj4gPiArICogUmV0dXJuOglBbHdheXMgcmV0dXJuIHplcm8NCj4g PiArICovDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF93cml0ZV9wYWdlX2h3ZWNjKHN0cnVj dCBtdGRfaW5mbyAqbXRkLA0KPiA+ICsJCQkJICAgICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAs DQo+ID4gKwkJCQkgICAgICAgY29uc3QgdTggKmJ1ZiwgaW50IG9vYl9yZXF1aXJlZCwNCj4gPiAr CQkJCSAgICAgICBpbnQgcGFnZSkNCj4gPiArew0KPiA+ICsJaW50IGVjY3NpemUgPSBjaGlwLT5l Y2Muc2l6ZTsNCj4gPiArCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsNCj4gPiArCXU4 ICplY2NfY2FsYyA9IGNoaXAtPmVjYy5jYWxjX2J1ZjsNCj4gPiArCXU4ICpvb2JfcHRyOw0KPiA+ ICsJY29uc3QgdTggKnAgPSBidWY7DQo+ID4gKwl1MzIgcmV0Ow0KPiA+ICsJdW5zaWduZWQgbG9u ZyBkYXRhX3BoYXNlX2FkZHI7DQo+ID4gKwlzdHJ1Y3QgcGwzNTNfbmFuZF9pbmZvICp4bmZjID0N Cj4gPiArCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBsMzUzX25hbmRfaW5mbywgY2hpcCk7 DQo+ID4gKwl1bnNpZ25lZCBsb25nIG5hbmRfb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcgX19mb3Jj ZSl4bmZjLT5uYW5kX2Jhc2U7DQo+ID4gKw0KPiA+ICsJcGwzNTNfcHJlcGFyZV9jbWQobXRkLCBj aGlwLCBwYWdlLCAwLCBOQU5EX0NNRF9TRVFJTiwNCj4gPiArCQkJICBOQU5EX0NNRF9QQUdFUFJP RywgMCk7DQo+ID4gKwluZGVsYXkoMTAwKTsNCj4gPiArCWZvciAoIDsgKGVjY3N0ZXBzIC0gMSk7 IGVjY3N0ZXBzLS0pIHsNCj4gPiArCQlwbDM1M19uYW5kX3dyaXRlX2RhdGFfb3AobXRkLCBwLCBl Y2NzaXplKTsNCj4gPiArCQlwICs9IGVjY3NpemU7DQo+ID4gKwl9DQo+ID4gKwlwbDM1M19uYW5k X3dyaXRlX2RhdGFfb3AobXRkLCBwLA0KPiA+ICsJCQkJIChlY2NzaXplIC0gUEwzNTNfTkFORF9M QVNUX1RSQU5TRkVSX0xFTkdUSCkpOw0KPiA+ICsJcCArPSAoZWNjc2l6ZSAtIFBMMzUzX05BTkRf TEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ICsNCj4gPiArCS8qIFNldCBFQ0MgTGFzdCBiaXQg dG8gMSAqLw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlj aGlwLT5JT19BRERSX1c7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgLT0gbmFuZF9vZmZzZXQ7DQo+ ID4gKwlkYXRhX3BoYXNlX2FkZHIgfD0gUEwzNTNfTkFORF9FQ0NfTEFTVDsNCj4gPiArCWRhdGFf cGhhc2VfYWRkciArPSBuYW5kX29mZnNldDsNCj4gPiArCWNoaXAtPklPX0FERFJfVyA9ICh2b2lk IF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRkcjsNCj4gPiArCXBsMzUzX25hbmRfd3Jp dGVfZGF0YV9vcChtdGQsIHAsIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ ICsNCj4gPiArCXAgPSBidWY7DQo+ID4gKwljaGlwLT5lY2MuY2FsY3VsYXRlKG10ZCwgcCwgJmVj Y19jYWxjWzBdKTsNCj4gPiArDQo+ID4gKwkvKiBXYWl0IGZvciBFQ0MgdG8gYmUgY2FsY3VsYXRl ZCBhbmQgcmVhZCB0aGUgZXJyb3IgdmFsdWVzICovDQo+ID4gKwlyZXQgPSBtdGRfb29ibGF5b3V0 X3NldF9lY2NieXRlcyhtdGQsIGVjY19jYWxjLCBjaGlwLT5vb2JfcG9pLA0KPiA+ICsJCQkJCSAw LCBjaGlwLT5lY2MudG90YWwpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0K PiA+ICsJLyogQ2xlYXIgRUNDIGxhc3QgYml0ICovDQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAo dW5zaWduZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FERFJfVzsNCj4gPiArCWRhdGFfcGhhc2Vf YWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciAmPSB+UEwzNTNfTkFO RF9FQ0NfTEFTVDsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciArPSBuYW5kX29mZnNldDsNCj4gPiAr CWNoaXAtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRk cjsNCj4gPiArDQo+ID4gKwkvKiBXcml0ZSB0aGUgc3BhcmUgYXJlYSB3aXRoIEVDQyBieXRlcyAq Lw0KPiA+ICsJb29iX3B0ciA9IGNoaXAtPm9vYl9wb2k7DQo+ID4gKwlwbDM1M19uYW5kX3dyaXRl X2RhdGFfb3AobXRkLCBvb2JfcHRyLA0KPiA+ICsJCQkJIChtdGQtPm9vYnNpemUgLQ0KPiA+ICsJ CQkJIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpKTsNCj4gPiArDQo+ID4gKwlkYXRh X3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FERFJfVzsNCj4g PiArCWRhdGFfcGhhc2VfYWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiArCWRhdGFfcGhhc2VfYWRk ciB8PSBQTDM1M19OQU5EX0NMRUFSX0NTOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIHw9ICgxIDw8 IEVORF9DTURfVkFMSURfU0hJRlQpOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyICs9IG5hbmRfb2Zm c2V0Ow0KPiA+ICsJY2hpcC0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpZGF0 YV9waGFzZV9hZGRyOw0KPiA+ICsJb29iX3B0ciArPSAobXRkLT5vb2JzaXplIC0gUEwzNTNfTkFO RF9MQVNUX1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gKwlwbDM1M19uYW5kX3dyaXRlX2RhdGFfb3Ao bXRkLCBvb2JfcHRyLA0KPiA+ICtQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4g PiArDQo+ID4gKwkvKg0KPiA+ICsJICogQXBwbHkgdGhpcyBzaG9ydCBkZWxheSBhbHdheXMgdG8g ZW5zdXJlIHRoYXQgd2UgZG8gd2FpdCB0V0IgaW4gYW55DQo+ID4gKwkgKiBjYXNlIG9uIGFueSBt YWNoaW5lLg0KPiA+ICsJICovDQo+ID4gKwluZGVsYXkoMTAwKTsNCj4gDQo+IFBsZWFzZSB1c2Ug c2RyIHRpbWluZ3MgdFdCX21pbiB2YWx1ZQ0KT2suDQo+IA0KPiA+ICsJbmFuZF93YWl0X3JlYWR5 KG10ZCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiBwbDM1M19uYW5kX3JlYWRfcGFnZV9od2VjYyAtIEhhcmR3YXJlIEVDQyBiYXNlZCBw YWdlIHJlYWQgZnVuY3Rpb24NCj4gPiArICogQG10ZDoJCVBvaW50ZXIgdG8gdGhlIG10ZCBpbmZv IHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2hpcDoJCVBvaW50ZXIgdG8gdGhlIE5BTkQgY2hpcCBpbmZv IHN0cnVjdHVyZQ0KPiA+ICsgKiBAYnVmOgkJUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHN0b3Jl IHJlYWQgZGF0YQ0KPiA+ICsgKiBAb29iX3JlcXVpcmVkOglDYWxsZXIgcmVxdWlyZXMgT09CIGRh dGEgcmVhZCB0byBjaGlwLT5vb2JfcG9pDQo+ID4gKyAqIEBwYWdlOgkJUGFnZSBudW1iZXIgdG8g cmVhZA0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9ucyByZWFkcyBkYXRhIGFuZCBjaGVj a3MgdGhlIGRhdGEgaW50ZWdyaXR5IGJ5DQo+ID4gK2NvbXBhcmluZyBoYXJkd2FyZQ0KPiA+ICsg KiBnZW5lcmF0ZWQgRUNDIHZhbHVlcyBhbmQgcmVhZCBFQ0MgdmFsdWVzIGZyb20gc3BhcmUgYXJl YS4NCj4gPiArICoNCj4gPiArICogUmV0dXJuOgkwIGFsd2F5cyBhbmQgdXBkYXRlcyBFQ0Mgb3Bl cmF0aW9uIHN0YXR1cyBpbiB0byBNVEQgc3RydWN0dXJlDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMg aW50IHBsMzUzX25hbmRfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLA0KPiA+ ICsJCQkJICAgICAgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4gPiArCQkJCSAgICAgIHU4ICpi dWYsIGludCBvb2JfcmVxdWlyZWQsIGludCBwYWdlKSB7DQo+ID4gKwlpbnQgaSwgc3RhdCwgZWNj c2l6ZSA9IGNoaXAtPmVjYy5zaXplOw0KPiA+ICsJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5 dGVzOw0KPiA+ICsJaW50IGVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOw0KPiA+ICsJdTggKnAg PSBidWY7DQo+ID4gKwl1OCAqZWNjX2NhbGMgPSBjaGlwLT5lY2MuY2FsY19idWY7DQo+ID4gKwl1 OCAqZWNjID0gY2hpcC0+ZWNjLmNvZGVfYnVmOw0KPiA+ICsJdW5zaWduZWQgaW50IG1heF9iaXRm bGlwcyA9IDA7DQo+ID4gKwl1OCAqb29iX3B0cjsNCj4gPiArCXUzMiByZXQ7DQo+ID4gKwl1bnNp Z25lZCBsb25nIGRhdGFfcGhhc2VfYWRkcjsNCj4gPiArCXN0cnVjdCBwbDM1M19uYW5kX2luZm8g KnhuZmMgPQ0KPiA+ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNfbmFuZF9pbmZv LCBjaGlwKTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgbmFuZF9vZmZzZXQgPSAodW5zaWduZWQgbG9u ZyBfX2ZvcmNlKXhuZmMtPm5hbmRfYmFzZTsNCj4gPiArDQo+ID4gKwlwbDM1M19wcmVwYXJlX2Nt ZChtdGQsIGNoaXAsIHBhZ2UsIDAsIE5BTkRfQ01EX1JFQUQwLA0KPiA+ICsJCQkgIE5BTkRfQ01E X1JFQURTVEFSVCwgMSk7DQo+ID4gKwluZGVsYXkoMTAwKTsNCj4gDQo+IFdoYXQgaXMgdGhpcyBk ZWxheSBmb3I/DQpXZSBoYXZlIHNlZW4gZmFpbHVyZXMgd2l0aCBvdXQgdGhpcyBkZWxheSwgd2l0 aCBvbGRlciBjb2RlLg0KQnV0IGkgd2lsbCBjaGVjayB0aGlzIGJ5IHJlbW92aW5nIHRoaXMgZGVs YXksIGluIHRoaXMgbmV3IGRyaXZlci4NCj4gDQo+ID4gKwlwbDM1M19kZXZfdGltZW91dChtdGQs IGNoaXAsIDApOw0KPiA+ICsNCj4gPiArCWZvciAoIDsgKGVjY3N0ZXBzIC0gMSk7IGVjY3N0ZXBz LS0pIHsNCj4gPiArCQlwbDM1M19uYW5kX3JlYWRfZGF0YV9vcChjaGlwLCBwLCBlY2NzaXplKTsN Cj4gPiArCQlwICs9IGVjY3NpemU7DQo+ID4gKwl9DQo+ID4gKwlwbDM1M19uYW5kX3JlYWRfZGF0 YV9vcChjaGlwLCBwLA0KPiA+ICsJCQkJKGVjY3NpemUgLSBQTDM1M19OQU5EX0xBU1RfVFJBTlNG RVJfTEVOR1RIKSk7DQo+ID4gKwlwICs9IChlY2NzaXplIC0gUEwzNTNfTkFORF9MQVNUX1RSQU5T RkVSX0xFTkdUSCk7DQo+ID4gKw0KPiA+ICsJLyogU2V0IEVDQyBMYXN0IGJpdCB0byAxICovDQo+ ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FE RFJfUjsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiArCWRhdGFf cGhhc2VfYWRkciB8PSBQTDM1M19OQU5EX0VDQ19MQVNUOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRy ICs9IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJY2hpcC0+SU9fQUREUl9SID0gKHZvaWQgX19pb21lbSAq IF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsJcGwzNTNfbmFuZF9yZWFkX2RhdGFfb3Ao Y2hpcCwgcCwgUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gKw0KPiA+ICsJ LyogUmVhZCB0aGUgY2FsY3VsYXRlZCBFQ0MgdmFsdWUgKi8NCj4gPiArCXAgPSBidWY7DQo+ID4g KwljaGlwLT5lY2MuY2FsY3VsYXRlKG10ZCwgcCwgJmVjY19jYWxjWzBdKTsNCj4gPiArDQo+ID4g KwkvKiBDbGVhciBFQ0MgbGFzdCBiaXQgKi8NCj4gPiArCWRhdGFfcGhhc2VfYWRkciA9ICh1bnNp Z25lZCBsb25nIF9fZm9yY2UpY2hpcC0+SU9fQUREUl9SOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRy IC09IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJZGF0YV9waGFzZV9hZGRyICY9IH5QTDM1M19OQU5EX0VD Q19MQVNUOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyICs9IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJY2hp cC0+SU9fQUREUl9SID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0K PiA+ICsNCj4gPiArCS8qIFJlYWQgdGhlIHN0b3JlZCBFQ0MgdmFsdWUgKi8NCj4gPiArCW9vYl9w dHIgPSBjaGlwLT5vb2JfcG9pOw0KPiA+ICsJcGwzNTNfbmFuZF9yZWFkX2RhdGFfb3AoY2hpcCwg b29iX3B0ciwNCj4gPiArCQkJCShtdGQtPm9vYnNpemUgLQ0KPiA+ICsJCQkJUEwzNTNfTkFORF9M QVNUX1RSQU5TRkVSX0xFTkdUSCkpOw0KPiA+ICsNCj4gPiArCS8qIGRlLWFzc2VydCBjaGlwIHNl bGVjdCAqLw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlj aGlwLT5JT19BRERSX1I7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgLT0gbmFuZF9vZmZzZXQ7DQo+ ID4gKwlkYXRhX3BoYXNlX2FkZHIgfD0gUEwzNTNfTkFORF9DTEVBUl9DUzsNCj4gPiArCWRhdGFf cGhhc2VfYWRkciArPSBuYW5kX29mZnNldDsNCj4gPiArCWNoaXAtPklPX0FERFJfUiA9ICh2b2lk IF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRkcjsNCj4gPiArDQo+ID4gKwlvb2JfcHRy ICs9IChtdGQtPm9vYnNpemUgLSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4g PiArCXBsMzUzX25hbmRfcmVhZF9kYXRhX29wKGNoaXAsIG9vYl9wdHIsDQo+ID4gK1BMMzUzX05B TkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ICsNCj4gPiArCXJldCA9IG10ZF9vb2JsYXlv dXRfZ2V0X2VjY2J5dGVzKG10ZCwgZWNjLCBjaGlwLT5vb2JfcG9pLCAwLA0KPiA+ICsJCQkJCSBj aGlwLT5lY2MudG90YWwpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ ICsNCj4gPiArCWVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOw0KPiA+ICsJcCA9IGJ1ZjsNCj4g PiArDQo+ID4gKwkvKiBDaGVjayBFQ0MgZXJyb3IgZm9yIGFsbCBibG9ja3MgYW5kIGNvcnJlY3Qg aWYgaXQgaXMgY29ycmVjdGFibGUgKi8NCj4gPiArCWZvciAoaSA9IDAgOyBlY2NzdGVwczsgZWNj c3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKSB7DQo+ID4gKwkJc3RhdCA9IGNo aXAtPmVjYy5jb3JyZWN0KG10ZCwgcCwgJmVjY1tpXSwgJmVjY19jYWxjW2ldKTsNCj4gPiArCQlp ZiAoc3RhdCA8IDApIHsNCj4gPiArCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7DQo+ID4gKwkJ fSBlbHNlIHsNCj4gPiArCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkICs9IHN0YXQ7DQo+ID4g KwkJCW1heF9iaXRmbGlwcyA9IG1heF90KHVuc2lnbmVkIGludCwgbWF4X2JpdGZsaXBzLCBzdGF0 KTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIG1heF9iaXRmbGlwczsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHBsMzUzX25hbmRfc2VsZWN0X2NoaXAg LSBTZWxlY3QgdGhlIGZsYXNoIGRldmljZQ0KPiA+ICsgKiBAbXRkOglQb2ludGVyIHRvIHRoZSBt dGQgaW5mbyBzdHJ1Y3R1cmUNCj4gPiArICogQGNoaXA6CVBvaW50ZXIgdG8gdGhlIE5BTkQgY2hp cCBpbmZvIHN0cnVjdHVyZQ0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGVtcHR5 IGFzIHRoZSBOQU5EIGNvbnRyb2xsZXIgaGFuZGxlcyBjaGlwIHNlbGVjdA0KPiA+ICtsaW5lDQo+ ID4gKyAqIGludGVybmFsbHkgYmFzZWQgb24gdGhlIGNoaXAgYWRkcmVzcyBwYXNzZWQgaW4gY29t bWFuZCBhbmQgZGF0YSBwaGFzZS4NCj4gDQo+IFNvIHdoeSBhcmVuJ3QgeW91IHNhdmluZyB0aGUg Y3VycmVudCBjaGlwL2RpZSBmb3IgbGF0ZXIgdXNlPw0KPiANCj4gPiArICovDQo+ID4gK3N0YXRp YyB2b2lkIHBsMzUzX25hbmRfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBj aGlwKSB7DQo+IA0KPiBZb3Ugc2hvdWxkIHByb2JhYmx5IHNhdmUvcmVzdG9yZSB0aW1pbmcgcmVn aXN0ZXJzIHNvbWV3aGVyZSBub3cgdGhhdCB5b3Ugc3VwcG9ydCAtDQo+ID5zZXR1cF9kYXRhX2lu dGVyZmFjZSgpLg0KT2ssIGxldCBtZSB0cnkgdGhpcy4NCj4gDQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qIE5BTkQgZnJhbWV3b3JrIC0+ZXhlY19vcCgpIGhvb2tzIGFuZCByZWxhdGVkIGhlbHBlcnMg Ki8gc3RhdGljDQo+ID4gK3ZvaWQgcGwzNTNfbmZjX3BhcnNlX2luc3RydWN0aW9ucyhzdHJ1Y3Qg bmFuZF9jaGlwICpjaGlwLA0KPiA+ICsJCQkJCSBjb25zdCBzdHJ1Y3QgbmFuZF9zdWJvcCAqc3Vi b3AsDQo+ID4gKwkJCQkJIHN0cnVjdCBwbDM1M19uZmNfb3AgKm5mY19vcCkNCj4gPiArew0KPiA+ ICsJY29uc3Qgc3RydWN0IG5hbmRfb3BfaW5zdHIgKmluc3RyID0gTlVMTDsNCj4gPiArCXVuc2ln bmVkIGludCBvcF9pZCwgb2Zmc2V0LCBuYWRkcnM7DQo+ID4gKwlpbnQgaSwgbGVuOw0KPiA+ICsJ Y29uc3QgdTggKmFkZHJzOw0KPiA+ICsNCj4gPiArCW1lbXNldChuZmNfb3AsIDAsIHNpemVvZihz dHJ1Y3QgcGwzNTNfbmZjX29wKSk7DQo+ID4gKwlmb3IgKG9wX2lkID0gMDsgb3BfaWQgPCBzdWJv cC0+bmluc3Ryczsgb3BfaWQrKykgew0KPiA+ICsJCW5mY19vcC0+bGVuID0gbmFuZF9zdWJvcF9n ZXRfZGF0YV9sZW4oc3Vib3AsIG9wX2lkKTsNCj4gPiArCQlsZW4gPSBuYW5kX3N1Ym9wX2dldF9k YXRhX2xlbihzdWJvcCwgb3BfaWQpOw0KPiA+ICsJCWluc3RyID0gJnN1Ym9wLT5pbnN0cnNbb3Bf aWRdOw0KPiA+ICsJCS8vaWYgKHN1Ym9wLT5uaW5zdHJzID09IDEpDQo+ID4gKwkJCS8vbmZjX29w LT5jbW5kc1swXSA9IC0xOw0KPiA+ICsJCXN3aXRjaCAoaW5zdHItPnR5cGUpIHsNCj4gPiArCQlj YXNlIE5BTkRfT1BfQ01EX0lOU1RSOg0KPiA+ICsJCQluZmNfb3AtPnR5cGUgPSBOQU5EX09QX0NN RF9JTlNUUjsNCj4gPiArCQkJaWYgKG9wX2lkKQ0KPiA+ICsJCQkJbmZjX29wLT5jbW5kc1sxXSA9 IGluc3RyLT5jdHguY21kLm9wY29kZTsNCj4gPiArCQkJZWxzZQ0KPiA+ICsJCQkJbmZjX29wLT5j bW5kc1swXSA9IGluc3RyLT5jdHguY21kLm9wY29kZTsNCj4gPiArCQkJbmZjX29wLT5jbGVfYWxl X2RlbGF5X25zID0gaW5zdHItPmRlbGF5X25zOw0KPiA+ICsJCQlicmVhazsNCj4gPiArDQo+ID4g KwkJY2FzZSBOQU5EX09QX0FERFJfSU5TVFI6DQo+ID4gKwkJCW9mZnNldCA9IG5hbmRfc3Vib3Bf Z2V0X2FkZHJfc3RhcnRfb2ZmKHN1Ym9wLCBvcF9pZCk7DQo+ID4gKwkJCW5hZGRycyA9IG5hbmRf c3Vib3BfZ2V0X251bV9hZGRyX2N5YyhzdWJvcCwgb3BfaWQpOw0KPiA+ICsJCQlhZGRycyA9ICZp bnN0ci0+Y3R4LmFkZHIuYWRkcnNbb2Zmc2V0XTsNCj4gPiArCQkJbmZjX29wLT5hZGRycyA9IGlu c3RyLT5jdHguYWRkci5hZGRyc1tvZmZzZXRdOw0KPiA+ICsJCQlmb3IgKGkgPSAwOyBpIDwgbWlu X3QodW5zaWduZWQgaW50LCA0LCBuYWRkcnMpOyBpKyspIHsNCj4gPiArCQkJCW5mY19vcC0+YWRk cnMgfD0gaW5zdHItPmN0eC5hZGRyLmFkZHJzW2ldIDw8DQo+ID4gKwkJCQkJCSAoOCAqIGkpOw0K PiA+ICsJCQl9DQo+ID4gKw0KPiA+ICsJCQlpZiAobmFkZHJzID49IDUpDQo+ID4gKwkJCQluZmNf b3AtPmFkZHI1ID0gYWRkcnNbNF07DQo+ID4gKwkJCWlmIChuYWRkcnMgPj0gNikNCj4gPiArCQkJ CW5mY19vcC0+YWRkcjYgPSBhZGRyc1s1XTsNCj4gPiArCQkJbmZjX29wLT5uYWRkcnMgPSBuYW5k X3N1Ym9wX2dldF9udW1fYWRkcl9jeWMoc3Vib3AsDQo+ID4gKwkJCQkJCQkJICAgICBvcF9pZCk7 DQo+ID4gKwkJCW5mY19vcC0+Y2xlX2FsZV9kZWxheV9ucyA9IGluc3RyLT5kZWxheV9uczsNCj4g PiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCWNhc2UgTkFORF9PUF9EQVRBX0lOX0lOU1RSOg0K PiA+ICsJCQluZmNfb3AtPmRhdGFfaW5zdHIgPSBpbnN0cjsNCj4gPiArCQkJbmZjX29wLT50eXBl ID0gTkFORF9PUF9EQVRBX0lOX0lOU1RSOw0KPiA+ICsJCQluZmNfb3AtPmRhdGFfaW5zdHJfaWR4 ID0gb3BfaWQ7DQo+ID4gKwkJCW5mY19vcC0+ZGF0YV9kZWxheV9ucyA9IGluc3RyLT5kZWxheV9u czsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCWNhc2UgTkFORF9PUF9EQVRBX09VVF9J TlNUUjoNCj4gPiArCQkJbmZjX29wLT5kYXRhX2luc3RyID0gaW5zdHI7DQo+ID4gKwkJCW5mY19v cC0+dHlwZSA9IE5BTkRfT1BfREFUQV9JTl9JTlNUUjsNCj4gPiArCQkJbmZjX29wLT5kYXRhX2lu c3RyX2lkeCA9IG9wX2lkOw0KPiA+ICsJCQluZmNfb3AtPmRhdGFfZGVsYXlfbnMgPSBpbnN0ci0+ ZGVsYXlfbnM7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsNCj4gPiArCQljYXNlIE5BTkRfT1BfV0FJ VFJEWV9JTlNUUjoNCj4gPiArCQkJbmZjX29wLT5yZHlfdGltZW91dF9tcyA9IGluc3RyLT5jdHgu d2FpdHJkeS50aW1lb3V0X21zOw0KPiA+ICsJCQluZmNfb3AtPnJkeV9kZWxheV9ucyA9IGluc3Ry LT5kZWxheV9uczsNCj4gPiArCQkJbmZjX29wLT53YWl0ID0gdHJ1ZTsNCj4gPiArCQkJYnJlYWs7 DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBjb25k X2RlbGF5KHVuc2lnbmVkIGludCBucykgew0KPiA+ICsJaWYgKCFucykNCj4gPiArCQlyZXR1cm47 DQo+ID4gKw0KPiA+ICsJaWYgKG5zIDwgMTAwMDApDQo+ID4gKwkJbmRlbGF5KG5zKTsNCj4gPiAr CWVsc2UNCj4gPiArCQl1ZGVsYXkoRElWX1JPVU5EX1VQKG5zLCAxMDAwKSk7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiBwbDM1M19uYW5kX2NtZF9mdW5jdGlvbiAtIFNlbmQgY29t bWFuZCB0byBOQU5EIGRldmljZQ0KPiA+ICsgKiBAY2hpcDoJUG9pbnRlciB0byB0aGUgTkFORCBj aGlwIGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBzdWJvcDoJUG9pbnRlciB0byBhcnJheSBvZiBp bnN0cnVjdGlvbnMNCj4gPiArICogUmV0dXJuOglBbHdheXMgcmV0dXJuIHplcm8NCj4gPiArICov DQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9jbWRfZnVuY3Rpb24oc3RydWN0IG5hbmRfY2hp cCAqY2hpcCwNCj4gPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBuYW5kX3N1Ym9wICpzdWJvcCkgew0K PiA+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsNCj4gPiArCWNv bnN0IHN0cnVjdCBuYW5kX29wX2luc3RyICppbnN0cjsNCj4gPiArCXN0cnVjdCBwbDM1M19uZmNf b3AgbmZjX29wID0ge307DQo+ID4gKwlzdHJ1Y3QgcGwzNTNfbmFuZF9pbmZvICp4bmZjID0NCj4g PiArCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBsMzUzX25hbmRfaW5mbywgY2hpcCk7DQo+ ID4gKwl2b2lkIF9faW9tZW0gKmNtZF9hZGRyOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBjbWRfZGF0 YSA9IDAsIGVuZF9jbWRfdmFsaWQgPSAwOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBjbWRfcGhhc2Vf YWRkciwgZGF0YV9waGFzZV9hZGRyLCBlbmRfY21kOw0KPiA+ICsJdW5zaWduZWQgaW50IG9wX2lk LCBsZW4sIG9mZnNldDsNCj4gPiArCWJvb2wgcmVhZGluZzsNCj4gPiArDQo+ID4gKwlwbDM1M19u ZmNfcGFyc2VfaW5zdHJ1Y3Rpb25zKGNoaXAsIHN1Ym9wLCAmbmZjX29wKTsNCj4gPiArCWluc3Ry ID0gbmZjX29wLmRhdGFfaW5zdHI7DQo+ID4gKwlvcF9pZCA9IG5mY19vcC5kYXRhX2luc3RyX2lk eDsNCj4gPiArCWxlbiA9IG5hbmRfc3Vib3BfZ2V0X2RhdGFfbGVuKHN1Ym9wLCBvcF9pZCk7DQo+ ID4gKwlvZmZzZXQgPSBuYW5kX3N1Ym9wX2dldF9kYXRhX3N0YXJ0X29mZihzdWJvcCwgb3BfaWQp Ow0KPiA+ICsNCj4gPiArCXBsMzUzX3NtY19jbHJfbmFuZF9pbnQoKTsNCj4gPiArCS8qIEdldCB0 aGUgY29tbWFuZCBwaGFzZSBhZGRyZXNzICovDQo+ID4gKwlpZiAobmZjX29wLmNtbmRzWzFdICE9 IDApIHsNCj4gPiArCQlpZiAobmZjX29wLmNtbmRzWzBdID09IE5BTkRfQ01EX1NFUUlOKQ0KPiA+ ICsJCQllbmRfY21kX3ZhbGlkID0gMDsNCj4gPiArCQllbHNlDQo+ID4gKwkJCWVuZF9jbWRfdmFs aWQgPSAxOw0KPiA+ICsJCWVuZF9jbWQgPSBuZmNfb3AuY21uZHNbMV07DQo+ID4gKwl9ICBlbHNl IHsNCj4gPiArCQllbmRfY21kID0gMHgwOw0KPiA+ICsJfQ0KPiA+ICsJY21kX3BoYXNlX2FkZHIg PSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPm5hbmRfYmFzZSArDQo+ID4gKwkJCSAoKG5m Y19vcC5uYWRkcnMgPDwgQUREUl9DWUNMRVNfU0hJRlQpIHwNCj4gPiArCQkJIChlbmRfY21kX3Zh bGlkIDw8IEVORF9DTURfVkFMSURfU0hJRlQpIHwNCj4gPiArCQkJIChDT01NQU5EX1BIQVNFKSB8 DQo+ID4gKwkJCSAoZW5kX2NtZCA8PCBFTkRfQ01EX1NISUZUKSB8DQo+ID4gKwkJCSAobmZjX29w LmNtbmRzWzBdIDw8IFNUQVJUX0NNRF9TSElGVCkpOw0KPiA+ICsNCj4gPiArCWNtZF9hZGRyID0g KHZvaWQgX19pb21lbSAqIF9fZm9yY2UpY21kX3BoYXNlX2FkZHI7DQo+ID4gKwkvKiBHZXQgdGhl IGRhdGEgcGhhc2UgYWRkcmVzcyAqLw0KPiA+ICsJZW5kX2NtZF92YWxpZCA9IDA7DQo+ID4gKw0K PiA+ICsJZGF0YV9waGFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSl4bmZjLT5uYW5k X2Jhc2UgKw0KPiA+ICsJCQkgICgoMHgwIDw8IENMRUFSX0NTX1NISUZUKSB8DQo+ID4gKwkJCSAg KGVuZF9jbWRfdmFsaWQgPDwgRU5EX0NNRF9WQUxJRF9TSElGVCkgfA0KPiA+ICsJCQkgIChEQVRB X1BIQVNFKSB8DQo+ID4gKwkJCSAgKGVuZF9jbWQgPDwgRU5EX0NNRF9TSElGVCkgfA0KPiA+ICsJ CQkgICgweDAgPDwgRUNDX0xBU1RfU0hJRlQpKTsNCj4gPiArCWNoaXAtPklPX0FERFJfUiA9ICh2 b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRkcjsNCj4gPiArCWNoaXAtPklPX0FE RFJfVyA9IGNoaXAtPklPX0FERFJfUjsNCj4gPiArCS8qIENvbW1hbmQgcGhhc2UgQVhJIFJlYWQg JiBXcml0ZSAqLw0KPiA+ICsJaWYgKG5mY19vcC5uYWRkcnMgPj0gNSkgew0KPiA+ICsJCWlmICht dGQtPndyaXRlc2l6ZSA+IFBMMzUzX05BTkRfRUNDX1NJWkUpIHsNCj4gPiArCQkJY21kX2RhdGEg PSBuZmNfb3AuYWRkcnM7DQo+ID4gKwkJCS8qIEFub3RoZXIgYWRkcmVzcyBjeWNsZSBmb3IgZGV2 aWNlcyA+IDEyOE1pQiAqLw0KPiA+ICsJCQlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfUk9XX0FE RFJfMykgew0KPiA+ICsJCQkJd3JpdGVsX3JlbGF4ZWQoY21kX2RhdGEsIGNtZF9hZGRyKTsNCj4g PiArCQkJCWNtZF9kYXRhID0gbmZjX29wLmFkZHI1Ow0KPiA+ICsJCQkJaWYgKG5mY19vcC5uYWRk cnMgPj0gNikNCj4gPiArCQkJCQljbWRfZGF0YSB8PSAobmZjX29wLmFkZHI2IDw8IDgpOw0KPiA+ ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsJfSAgZWxzZSB7DQo+ID4gKwkJaWYgKG5mY19vcC5hZGRy cyAhPSAtMSkgew0KPiA+ICsJCQlpbnQgY29sdW1uID0gbmZjX29wLmFkZHJzOw0KPiA+ICsJCQkv Kg0KPiA+ICsJCQkgKiBDaGFuZ2UgcmVhZC93cml0ZSBjb2x1bW4sIHJlYWQgaWQgZXRjDQo+ID4g KwkJCSAqIEFkanVzdCBjb2x1bW5zIGZvciAxNiBiaXQgYnVzIHdpZHRoDQo+ID4gKwkJCSAqLw0K PiA+ICsJCQlpZiAoKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSAmJg0KPiA+ICsJ CQkgICAgKG5mY19vcC5jbW5kc1swXSA9PSBOQU5EX0NNRF9SRUFEMCB8fA0KPiA+ICsJCQkJbmZj X29wLmNtbmRzWzBdID09IE5BTkRfQ01EX1NFUUlOIHx8DQo+ID4gKwkJCQluZmNfb3AuY21uZHNb MF0gPT0gTkFORF9DTURfUk5ET1VUIHx8DQo+ID4gKwkJCQluZmNfb3AuY21uZHNbMF0gPT0gTkFO RF9DTURfUk5ESU4pKSB7DQo+ID4gKwkJCQljb2x1bW4gPj49IDE7DQo+ID4gKwkJCX0NCj4gPiAr CQkJY21kX2RhdGEgPSBjb2x1bW47DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsJd3JpdGVsX3Jl bGF4ZWQoY21kX2RhdGEsIGNtZF9hZGRyKTsNCj4gPiArCW5kZWxheSgxMDApOw0KPiA+ICsNCj4g PiArCWNvbmRfZGVsYXkobmZjX29wLmNsZV9hbGVfZGVsYXlfbnMpOw0KPiA+ICsJaWYgKCFuZmNf b3AuZGF0YV9pbnN0cikgew0KPiA+ICsJCW1zbGVlcChuZmNfb3AucmR5X3RpbWVvdXRfbXMpOw0K PiA+ICsJCWNvbmRfZGVsYXkobmZjX29wLnJkeV9kZWxheV9ucyk7DQo+ID4gKwkJcmV0dXJuIDA7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmVhZGluZyA9IChuZmNfb3AuZGF0YV9pbnN0ci0+dHlw ZSA9PSBOQU5EX09QX0RBVEFfSU5fSU5TVFIpOw0KPiA+ICsNCj4gPiArCWlmICghcmVhZGluZykg ew0KPiA+ICsJCWlmIChuZmNfb3AuY21uZHNbMF0gPT0gTkFORF9DTURfU0VRSU4gJiYNCj4gPiAr CQkgICAgbmZjX29wLmNtbmRzWzFdID09IE5BTkRfQ01EX1BBR0VQUk9HKSB7DQo+ID4gKwkJCXBs MzUzX25hbmRfd3JpdGVfcGFnZV9yYXcobXRkLCBjaGlwLA0KPiA+ICsJCQkJCQkgIGluc3RyLT5j dHguZGF0YS5idWYub3V0LCAwLA0KPiA+ICsJCQkJCQkgIG5mY19vcC5hZGRycyk7DQo+ID4gKwkJ fSBlbHNlIHsNCj4gPiArCQkJcGwzNTNfbmFuZF93cml0ZV9kYXRhX29wKG10ZCwgaW5zdHItPmN0 eC5kYXRhLmJ1Zi5vdXQsDQo+ID4gKwkJCQkJCSBsZW4pOw0KPiA+ICsJCX0NCj4gPiArCQlpZiAo bmZjX29wLnJkeV90aW1lb3V0X21zKQ0KPiA+ICsJCQlwbDM1M19kZXZfdGltZW91dChtdGQsIGNo aXAsIG5mY19vcC5yZHlfdGltZW91dF9tcyk7DQo+ID4gKwkJY29uZF9kZWxheShuZmNfb3AucmR5 X2RlbGF5X25zKTsNCj4gPiArDQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZWxzZSBpZiAocmVhZGlu Zykgew0KPiA+ICsJCWlmIChuZmNfb3AucmR5X3RpbWVvdXRfbXMpDQo+ID4gKwkJCXBsMzUzX2Rl dl90aW1lb3V0KG10ZCwgY2hpcCwgbmZjX29wLnJkeV90aW1lb3V0X21zKTsNCj4gPiArCQljb25k X2RlbGF5KG5mY19vcC5yZHlfZGVsYXlfbnMpOw0KPiA+ICsJCXBsMzUzX25hbmRfcmVhZF9kYXRh X29wKGNoaXAsIGluc3RyLT5jdHguZGF0YS5idWYuaW4sIGxlbik7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg bmFuZF9vcF9wYXJzZXIgcGwzNTNfbmZjX29wX3BhcnNlciA9IE5BTkRfT1BfUEFSU0VSDQo+ID4g KwkoTkFORF9PUF9QQVJTRVJfUEFUVEVSTg0KPiA+ICsJCShwbDM1M19uYW5kX2NtZF9mdW5jdGlv biwNCj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQ01EX0VMRU0odHJ1ZSksDQo+ID4gKwkJTkFO RF9PUF9QQVJTRVJfUEFUX0FERFJfRUxFTSh0cnVlLCA3KSwNCj4gPiArCQlOQU5EX09QX1BBUlNF Ul9QQVRfV0FJVFJEWV9FTEVNKHRydWUpLA0KPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9EQVRB X0lOX0VMRU0oZmFsc2UsIDIwNDgpKSwNCj4gPiArCU5BTkRfT1BfUEFSU0VSX1BBVFRFUk4NCj4g PiArCQkocGwzNTNfbmFuZF9jbWRfZnVuY3Rpb24sDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFU X0NNRF9FTEVNKGZhbHNlKSwNCj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQUREUl9FTEVNKGZh bHNlLCA3KSwNCj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQ01EX0VMRU0oZmFsc2UpLA0KPiA+ ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9XQUlUUkRZX0VMRU0oZmFsc2UpLA0KPiA+ICsJCU5BTkRf T1BfUEFSU0VSX1BBVF9EQVRBX0lOX0VMRU0oZmFsc2UsIDIwNDgpKSwNCj4gPiArCU5BTkRfT1Bf UEFSU0VSX1BBVFRFUk4NCj4gPiArCQkocGwzNTNfbmFuZF9jbWRfZnVuY3Rpb24sDQo+ID4gKwkJ TkFORF9PUF9QQVJTRVJfUEFUX0NNRF9FTEVNKGZhbHNlKSwNCj4gPiArCQlOQU5EX09QX1BBUlNF Ul9QQVRfQUREUl9FTEVNKHRydWUsIDcpLA0KPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9DTURf RUxFTSh0cnVlKSwNCj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfV0FJVFJEWV9FTEVNKGZhbHNl KSksDQo+ID4gKwlOQU5EX09QX1BBUlNFUl9QQVRURVJODQo+ID4gKwkJKHBsMzUzX25hbmRfY21k X2Z1bmN0aW9uLA0KPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9DTURfRUxFTShmYWxzZSksDQo+ ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0FERFJfRUxFTShmYWxzZSwgOCksDQo+ID4gKwkJTkFO RF9PUF9QQVJTRVJfUEFUX0RBVEFfT1VUX0VMRU0oZmFsc2UsIDIwNDgpLA0KPiA+ICsJCU5BTkRf T1BfUEFSU0VSX1BBVF9DTURfRUxFTSh0cnVlKSwNCj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRf V0FJVFJEWV9FTEVNKHRydWUpKSwNCj4gPiArCU5BTkRfT1BfUEFSU0VSX1BBVFRFUk4NCj4gPiAr CQkocGwzNTNfbmFuZF9jbWRfZnVuY3Rpb24sDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0NN RF9FTEVNKGZhbHNlKSksDQo+ID4gKwkpOw0KPiA+ICsNCj4gPiArc3RhdGljIGludCBwbDM1M19u ZmNfZXhlY19vcChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiA+ICsJCQkgICAgIGNvbnN0IHN0 cnVjdCBuYW5kX29wZXJhdGlvbiAqb3AsDQo+ID4gKwkJCSAgICAgYm9vbCBjaGVja19vbmx5KQ0K PiA+ICt7DQo+ID4gKwlyZXR1cm4gbmFuZF9vcF9wYXJzZXJfZXhlY19vcChjaGlwLCAmcGwzNTNf bmZjX29wX3BhcnNlciwNCj4gPiArCQkJCQkgICAgICBvcCwgY2hlY2tfb25seSk7DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBwbDM1M19uYW5kX2RldmljZV9yZWFkeSAtIENoZWNr IGRldmljZSByZWFkeS9idXN5IGxpbmUNCj4gPiArICogQG10ZDoJUG9pbnRlciB0byB0aGUgbXRk X2luZm8gc3RydWN0dXJlDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJMCBvbiBidXN5IG9yIDEg b24gcmVhZHkgc3RhdGUNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9kZXZp Y2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpIHsNCj4gPiArCWlmIChwbDM1M19zbWNfZ2V0 X25hbmRfaW50X3N0YXR1c19yYXcoKSkgew0KPiA+ICsJCXBsMzUzX3NtY19jbHJfbmFuZF9pbnQo KTsNCj4gPiArCQlyZXR1cm4gMTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHBsMzUzX25hbmRfZWNjX2luaXQgLSBJbml0 aWFsaXplIHRoZSBlY2MgaW5mb3JtYXRpb24gYXMgcGVyIHRoZSBlY2MgbW9kZQ0KPiA+ICsgKiBA bXRkOglQb2ludGVyIHRvIHRoZSBtdGRfaW5mbyBzdHJ1Y3R1cmUNCj4gPiArICogQGVjYzoJUG9p bnRlciB0byBFQ0MgY29udHJvbCBzdHJ1Y3R1cmUNCj4gPiArICogQGVjY19tb2RlOglvbmRpZSBl Y2Mgc3RhdHVzDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhl IGVjYyBibG9jayBhbmQgZnVuY3Rpb25hbCBwb2ludGVycyBhcw0KPiA+ICtwZXIgdGhlDQo+ID4g KyAqIGVjYyBtb2RlDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfZWNjX2lu aXQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2VjY19jdHJsICplY2MsDQo+ID4g KwkJCQlpbnQgZWNjX21vZGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAg PSBtdGRfdG9fbmFuZChtdGQpOw0KPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfaW5mbyAqeG5mYyA9 DQo+ID4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbDM1M19uYW5kX2luZm8sIGNoaXAp Ow0KPiA+ICsJdTMyIGVyciA9IDA7DQo+ID4gKw0KPiA+ICsJaWYgKGVjY19tb2RlID09IE5BTkRf RUNDX09OX0RJRSkgew0KPiA+ICsJCXBsMzUzX3NtY19zZXRfZWNjX21vZGUoUEwzNTNfU01DX0VD Q01PREVfQllQQVNTKTsNCj4gPiArCQkvKg0KPiA+ICsJCSAqIE9uLURpZSBFQ0Mgc3BhcmUgYnl0 ZXMgb2Zmc2V0IDggaXMgdXNlZCBmb3IgRUNDIGNvZGVzDQo+ID4gKwkJICogVXNlIHRoZSBCQlQg cGF0dGVybiBkZXNjcmlwdG9ycw0KPiA+ICsJCSAqLw0KPiA+ICsJCWNoaXAtPmJidF90ZCA9ICZi YnRfbWFpbl9kZXNjcjsNCj4gPiArCQljaGlwLT5iYnRfbWQgPSAmYmJ0X21pcnJvcl9kZXNjcjsN Cj4gPiArCQliaXRtYXBfc2V0KGNoaXAtPnBhcmFtZXRlcnMuZ2V0X2ZlYXR1cmVfbGlzdCwNCj4g PiArCQkJICAgT05GSV9GRUFUVVJFX09OX0RJRV9FQ0MsDQo+IE9ORklfRkVBVFVSRV9PTl9ESUVf RUNDX0VOKTsNCj4gPiArCQliaXRtYXBfc2V0KGNoaXAtPnBhcmFtZXRlcnMuc2V0X2ZlYXR1cmVf bGlzdCwNCj4gPiArCQkJICAgT05GSV9GRUFUVVJFX09OX0RJRV9FQ0MsDQo+IE9ORklfRkVBVFVS RV9PTl9ESUVfRUNDX0VOKTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZWNjLT5yZWFkX29vYiA9 IHBsMzUzX25hbmRfcmVhZF9vb2I7DQo+ID4gKwkJZWNjLT53cml0ZV9vb2IgPSBwbDM1M19uYW5k X3dyaXRlX29vYjsNCj4gPiArDQo+ID4gKwkJZWNjLT5tb2RlID0gTkFORF9FQ0NfSFc7DQo+ID4g KwkJLyogSGFyZHdhcmUgRUNDIGdlbmVyYXRlcyAzIGJ5dGVzIEVDQyBjb2RlIGZvciBlYWNoIDUx MiBieXRlcyAqLw0KPiA+ICsJCWVjYy0+Ynl0ZXMgPSAzOw0KPiA+ICsJCWVjYy0+c3RyZW5ndGgg PSAxOw0KPiA+ICsJCWVjYy0+Y2FsY3VsYXRlID0gcGwzNTNfbmFuZF9jYWxjdWxhdGVfaHdlY2M7 DQo+ID4gKwkJZWNjLT5jb3JyZWN0ID0gcGwzNTNfbmFuZF9jb3JyZWN0X2RhdGE7DQo+ID4gKwkJ ZWNjLT5yZWFkX3BhZ2UgPSBwbDM1M19uYW5kX3JlYWRfcGFnZV9od2VjYzsNCj4gPiArCQllY2Mt PnNpemUgPSBQTDM1M19OQU5EX0VDQ19TSVpFOw0KPiA+ICsJCWVjYy0+d3JpdGVfcGFnZSA9IHBs MzUzX25hbmRfd3JpdGVfcGFnZV9od2VjYzsNCj4gPiArCQlwbDM1M19zbWNfc2V0X2VjY19wZ19z aXplKG10ZC0+d3JpdGVzaXplKTsNCj4gPiArCQlzd2l0Y2ggKG10ZC0+d3JpdGVzaXplKSB7DQo+ ID4gKwkJY2FzZSBTWl81MTI6DQo+ID4gKwkJY2FzZSBTWl8xSzoNCj4gPiArCQljYXNlIFNaXzJL Og0KPiA+ICsJCQlwbDM1M19zbWNfc2V0X2VjY19tb2RlKFBMMzUzX1NNQ19FQ0NNT0RFX0FQQik7 DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCS8qDQo+ID4gKwkJCSAq IFRoZSBzb2Z0d2FyZSBFQ0Mgcm91dGluZXMgd29uJ3Qgd29yayB3aXRoIHRoZQ0KPiA+ICsJCQkg KiBTTUMgY29udHJvbGxlcg0KPiA+ICsJCQkgKi8NCj4gPiArCQkJZWNjLT5jYWxjdWxhdGUgPSBu YW5kX2NhbGN1bGF0ZV9lY2M7DQo+ID4gKwkJCWVjYy0+Y29ycmVjdCA9IG5hbmRfY29ycmVjdF9k YXRhOw0KPiA+ICsJCQllY2MtPnNpemUgPSAyNTY7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0N Cj4gPiArCQlpZiAobXRkLT53cml0ZXNpemUgPD0gU1pfNTEyKQ0KPiA+ICsJCQl4bmZjLT5hZGRy X2N5Y2xlcyA9IDE7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQl4bmZjLT5hZGRyX2N5Y2xlcyA9IDI7 DQo+ID4gKw0KPiA+ICsJCWlmIChjaGlwLT5vcHRpb25zICYgTkFORF9ST1dfQUREUl8zKQ0KPiA+ ICsJCQl4bmZjLT5hZGRyX2N5Y2xlcyArPSAzOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJeG5mYy0+ YWRkcl9jeWNsZXMgKz0gMjsNCj4gPiArDQo+ID4gKwkJaWYgKG10ZC0+b29ic2l6ZSA9PSAxNikg ew0KPiA+ICsJCQltdGRfc2V0X29vYmxheW91dChtdGQsICZwbDM1M19lY2Nfb29ibGF5b3V0MTZf b3BzKTsNCj4gPiArCQl9IGVsc2UgaWYgKG10ZC0+b29ic2l6ZSA9PSA2NCkgew0KPiA+ICsJCQlt dGRfc2V0X29vYmxheW91dChtdGQsICZwbDM1M19lY2Nfb29ibGF5b3V0NjRfb3BzKTsNCj4gPiAr CQl9IGVsc2Ugew0KPiA+ICsJCQllcnIgPSBFTlhJTzsNCj4gDQo+IEVycm9ycyBhcmUgYWx3YXlz IG5lZ2F0aXZlIHZhbHVlcw0KT2ssIHdpbGwgdXBkYXRlLg0KPiANCj4gPiArCQkJZGV2X2Vycih4 bmZjLT5kZXYsICJVbnN1cHBvcnRlZCBvb2IgTGF5b3V0XG4iKTsNCj4gPiArCQl9DQo+ID4gKwl9 DQo+IA0KPiBTcGFjZQ0KT2suDQo+IA0KPiA+ICsJcmV0dXJuIGVycjsNCj4gPiArfQ0KPiA+ICtz dGF0aWMgaW50IHBsMzUzX3NldHVwX2RhdGFfaW50ZXJmYWNlKHN0cnVjdCBtdGRfaW5mbyAqbXRk LCBpbnQgY3NsaW5lLA0KPiA+ICsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuYW5kX2RhdGFfaW50 ZXJmYWNlICpjb25mKSB7DQo+ID4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25h bmQobXRkKTsNCj4gPiArCXN0cnVjdCBwbDM1M19uYW5kX2luZm8gKnhuZmMgPQ0KPiA+ICsJCWNv bnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNfbmFuZF9pbmZvLCBjaGlwKTsNCj4gPiArCWNv bnN0IHN0cnVjdCBuYW5kX3Nkcl90aW1pbmdzICpzZHI7DQo+ID4gKwl1MzIgdGltaWdzWzddLCBt Y2twZXJpb2RwczsNCj4gDQo+IHMvdGltaWdzL3RpbWluZ3MvDQpPayB3aWxsIGNvcnJlY3QgaXQu DQo+IA0KPiBQbGVhc2UgdXNlIEMgY29kaW5nIHN0eWxlIHdpdGggJ18nIGluc3RlYWQgb2YgYSBi dWxrIG9mIGNoYXJhY3RlcnMgbGlrZSBtY2twZXJpb2Rwcy4NCk9rLg0KPiANCj4gPiArDQo+ID4g KwlpZiAoY3NsaW5lID09IE5BTkRfREFUQV9JRkFDRV9DSEVDS19PTkxZKQ0KPiA+ICsJCXJldHVy biAtRUlOVkFMOw0KPiANCj4gV2h5Pw0KSXQgaXMgc2ltaWxhciB0byANCmlmIChjaGlwbnIgPCAw KQ0KCXJldHVybiAwOw0KaGVuY2Ugd3JpdHRlbiBsaWtlIHRoYXQuDQpBbHNvIGlmIEkgZGlkbid0 IGRvIHRoYXQsIHRoZW4gcHJvYmUgaXMgZmFpbGluZy4NCkFtIEkgbWlzc2luZyBzb21lIHRoaW5n Pw0KPiANCj4gPiArDQo+ID4gKwlzZHIgPSBuYW5kX2dldF9zZHJfdGltaW5ncyhjb25mKTsNCj4g PiArCWlmIChJU19FUlIoc2RyKSkNCj4gPiArCQlyZXR1cm4gUFRSX0VSUihzZHIpOw0KPiA+ICsJ LyoNCj4gPiArCSAqIFNEUiB0aW1pbmdzIGFyZSBnaXZlbiBpbiBwaWNvLXNlY29uZHMgd2hpbGUg TkZDIHRpbWluZ3MgbXVzdCBiZQ0KPiA+ICsJICogZXhwcmVzc2VkIGluIE5BTkQgY29udHJvbGxl ciBjbG9jayBjeWNsZXMuDQo+ID4gKwkgKi8NCj4gPiArCW1ja3BlcmlvZHBzID0gTlNFQ19QRVJf U0VDIC8gY2xrX2dldF9yYXRlKHhuZmMtPm1jbGspOw0KPiA+ICsJbWNrcGVyaW9kcHMgKj0gMTAw MDsNCj4gPiArCXRpbWlnc1swXSA9IERJVl9ST1VORF9VUChzZHItPnRSQ19taW4sIG1ja3Blcmlv ZHBzKTsNCj4gPiArCXRpbWlnc1sxXSA9IERJVl9ST1VORF9VUChzZHItPnRXQ19taW4sIG1ja3Bl cmlvZHBzKTsNCj4gPiArCXRpbWlnc1syXSA9IERJVl9ST1VORF9VUChzZHItPnRSRUFfbWF4LCBt Y2twZXJpb2Rwcyk7DQo+ID4gKwl0aW1pZ3NbM10gPSBESVZfUk9VTkRfVVAoc2RyLT50V1BfbWlu LCBtY2twZXJpb2Rwcyk7DQo+ID4gKwl0aW1pZ3NbNF0gPSBESVZfUk9VTkRfVVAoc2RyLT50Q0xS X21pbiwgbWNrcGVyaW9kcHMpOw0KPiA+ICsJdGltaWdzWzVdID0gRElWX1JPVU5EX1VQKHNkci0+ dEFSX21pbiwgbWNrcGVyaW9kcHMpOw0KPiA+ICsJdGltaWdzWzZdID0gRElWX1JPVU5EX1VQKHNk ci0+dFJSX21pbiwgbWNrcGVyaW9kcHMpOw0KPiA+ICsJcGwzNTNfc21jX3NldF9jeWNsZXModGlt aWdzWzBdLCB0aW1pZ3NbMV0sIHRpbWlnc1syXSwgdGltaWdzWzNdLA0KPiA+ICsJCQkgICAgIHRp bWlnc1s0XSwgdGltaWdzWzVdLCB0aW1pZ3NbNl0pOw0KPiANCj4gWW91IGNvdWxkIGp1c3QgZ2l2 ZSBhbiBhcnJheSBvZiB0aW1pbmdzIGluc3RlYWQgb2YgNyB2YWx1ZXM/DQpZZXMsIEkgd2lsbCB1 cGRhdGUgaXQuDQo+IA0KPiBUaGlzIHdvdWxkIGFsc28gc2ltcGxpZnkgdGhlIGNvZGUgaW4gdGhl IHNtYyBkcml2ZXIuDQpZZXMuDQo+IA0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKy8qKg0KPiA+ICsgKiBwbDM1M19uYW5kX3Byb2JlIC0gUHJvYmUgbWV0aG9kIGZvciB0aGUg TkFORCBkcml2ZXINCj4gPiArICogQHBkZXY6CVBvaW50ZXIgdG8gdGhlIHBsYXRmb3JtX2Rldmlj ZSBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0 aGUgZHJpdmVyIGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIGhhcmR3YXJlLg0KPiA+ICsgKg0KPiA+ ICsgKiBSZXR1cm46CTAgb24gc3VjY2VzcyBvciBlcnJvciB2YWx1ZSBvbiBmYWlsdXJlDQo+ID4g KyAqLw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikgew0KPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfaW5mbyAqeG5mYzsNCj4gPiAr CXN0cnVjdCBtdGRfaW5mbyAqbXRkOw0KPiA+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcDsNCj4g PiArCXN0cnVjdCByZXNvdXJjZSAqcmVzOw0KPiA+ICsJc3RydWN0IGRldmljZV9ub2RlICpucDsN Cj4gPiArCXUzMiByZXQ7DQo+ID4gKw0KPiA+ICsJeG5mYyA9IGRldm1fa3phbGxvYygmcGRldi0+ ZGV2LCBzaXplb2YoKnhuZmMpLCBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICgheG5mYykNCj4gPiAr CQlyZXR1cm4gLUVOT01FTTsNCj4gPiArCXhuZmMtPmRldiA9ICZwZGV2LT5kZXY7DQo+ID4gKwkv KiBNYXAgcGh5c2ljYWwgYWRkcmVzcyBvZiBOQU5EIGZsYXNoICovDQo+ID4gKwlyZXMgPSBwbGF0 Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOw0KPiA+ICsJeG5mYy0+ bmFuZF9iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKHhuZmMtPmRldiwgcmVzKTsNCj4gPiAr CWlmIChJU19FUlIoeG5mYy0+bmFuZF9iYXNlKSkNCj4gPiArCQlyZXR1cm4gUFRSX0VSUih4bmZj LT5uYW5kX2Jhc2UpOw0KPiA+ICsNCj4gPiArCWNoaXAgPSAmeG5mYy0+Y2hpcDsNCj4gPiArCW10 ZCA9IG5hbmRfdG9fbXRkKGNoaXApOw0KPiA+ICsJY2hpcC0+ZXhlY19vcCA9IHBsMzUzX25mY19l eGVjX29wOw0KPiA+ICsJbmFuZF9zZXRfY29udHJvbGxlcl9kYXRhKGNoaXAsIHhuZmMpOw0KPiA+ ICsJbXRkLT5wcml2ID0gY2hpcDsNCj4gPiArCW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsNCj4g PiArCWlmICghbXRkLT5uYW1lKSB7DQo+ID4gKwkJLyoNCj4gPiArCQkgKiBJZiB0aGUgbmV3IGJp bmRpbmdzIGFyZSB1c2VkIGFuZCB0aGUgYm9vdGxvYWRlciBoYXMgbm90IGJlZW4NCj4gPiArCQkg KiB1cGRhdGVkIHRvIHBhc3MgYSBuZXcgbXRkcGFydHMgcGFyYW1ldGVyIG9uIHRoZSBjbWRsaW5l LCB5b3UNCj4gPiArCQkgKiBzaG91bGQgZGVmaW5lIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgaW4g eW91ciBOQU5EIG5vZGUsIGllOg0KPiA+ICsJCSAqDQo+ID4gKwkJICoJbGFiZWwgPSAicGwzNTMt bmFuZCI7DQo+ID4gKwkJICoNCj4gPiArCQkgKiBUaGlzIHdheSwgbXRkLT5uYW1lIHdpbGwgYmUg c2V0IGJ5IHRoZSBjb3JlIHdoZW4NCj4gPiArCQkgKiBuYW5kX3NldF9mbGFzaF9ub2RlKCkgaXMg Y2FsbGVkLg0KPiA+ICsJCSAqLw0KPiA+ICsJCW10ZC0+bmFtZSA9IGRldm1fa2FzcHJpbnRmKHhu ZmMtPmRldiwgR0ZQX0tFUk5FTCwNCj4gPiArCQkJCQkgICAiJXMiLCBQTDM1M19OQU5EX0RSSVZF Ul9OQU1FKTsNCj4gPiArCQlpZiAoIW10ZC0+bmFtZSkgew0KPiA+ICsJCQlkZXZfZXJyKHhuZmMt PmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtdGQtPm5hbWVcbiIpOw0KPiA+ICsJCQlyZXR1cm4g LUVOT01FTTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKwluYW5kX3NldF9mbGFzaF9ub2RlKGNo aXAsIHhuZmMtPmRldi0+b2Zfbm9kZSk7DQo+ID4gKw0KPiA+ICsJLyogU2V0IGFkZHJlc3Mgb2Yg TkFORCBJTyBsaW5lcyAqLw0KPiA+ICsJY2hpcC0+SU9fQUREUl9SID0geG5mYy0+bmFuZF9iYXNl Ow0KPiA+ICsJY2hpcC0+SU9fQUREUl9XID0geG5mYy0+bmFuZF9iYXNlOw0KPiA+ICsJLyogU2V0 IHRoZSBkcml2ZXIgZW50cnkgcG9pbnRzIGZvciBNVEQgKi8NCj4gPiArCWNoaXAtPmRldl9yZWFk eSA9IHBsMzUzX25hbmRfZGV2aWNlX3JlYWR5Ow0KPiA+ICsJY2hpcC0+c2VsZWN0X2NoaXAgPSBw bDM1M19uYW5kX3NlbGVjdF9jaGlwOw0KPiA+ICsJLyogSWYgd2UgZG9uJ3Qgc2V0IHRoaXMgZGVs YXkgZHJpdmVyIHNldHMgMjB1cyBieSBkZWZhdWx0ICovDQo+ID4gKwlucCA9IG9mX2dldF9uZXh0 X3BhcmVudCh4bmZjLT5kZXYtPm9mX25vZGUpOw0KPiA+ICsJeG5mYy0+bWNsayA9IG9mX2Nsa19n ZXQobnAsIDApOw0KPiA+ICsJaWYgKElTX0VSUih4bmZjLT5tY2xrKSkgew0KPiA+ICsJCWRldl9l cnIoeG5mYy0+ZGV2LCAiRmFpbGVkIHRvIHJldHJpZXZlIE1DSyBjbGtcbiIpOw0KPiA+ICsJCXJl dHVybiBQVFJfRVJSKHhuZmMtPm1jbGspOw0KPiA+ICsJfQ0KPiA+ICsJY2hpcC0+Y2hpcF9kZWxh eSA9IDMwOw0KPiA+ICsJLyogU2V0IHRoZSBkZXZpY2Ugb3B0aW9uIGFuZCBmbGFzaCB3aWR0aCAq Lw0KPiA+ICsJY2hpcC0+b3B0aW9ucyA9IE5BTkRfQlVTV0lEVEhfQVVUTzsNCj4gPiArCWNoaXAt PmJidF9vcHRpb25zID0gTkFORF9CQlRfVVNFX0ZMQVNIOw0KPiA+ICsJcGxhdGZvcm1fc2V0X2Ry dmRhdGEocGRldiwgeG5mYyk7DQo+ID4gKwljaGlwLT5zZXR1cF9kYXRhX2ludGVyZmFjZSA9IHBs MzUzX3NldHVwX2RhdGFfaW50ZXJmYWNlOw0KPiA+ICsJLyogZmlyc3Qgc2NhbiB0byBmaW5kIHRo ZSBkZXZpY2UgYW5kIGdldCB0aGUgcGFnZSBzaXplICovDQo+ID4gKwlpZiAobmFuZF9zY2FuX2lk ZW50KG10ZCwgMSwgTlVMTCkpIHsNCj4gPiArCQlkZXZfZXJyKHhuZmMtPmRldiwgIm5hbmRfc2Nh bl9pZGVudCBmb3IgTkFORCBmYWlsZWRcbiIpOw0KPiA+ICsJCXJldHVybiAtRU5YSU87DQo+ID4g Kwl9DQo+ID4gKwlyZXQgPSBwbDM1M19uYW5kX2VjY19pbml0KG10ZCwgJmNoaXAtPmVjYywgY2hp cC0+ZWNjLm1vZGUpOw0KPiA+ICsJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2 KQ0KPiA+ICsJCXBsMzUzX3NtY19zZXRfYnVzd2lkdGgoUEwzNTNfU01DX01FTV9XSURUSF8xNik7 DQo+ID4gKwkvKiBzZWNvbmQgcGhhc2Ugc2NhbiAqLw0KPiA+ICsJaWYgKG5hbmRfc2Nhbl90YWls KG10ZCkpIHsNCj4gPiArCQlkZXZfZXJyKHhuZmMtPmRldiwgIm5hbmRfc2Nhbl90YWlsIGZvciBO QU5EIGZhaWxlZFxuIik7DQo+ID4gKwkJcmV0dXJuIC1FTlhJTzsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwltdGRfZGV2aWNlX3JlZ2lzdGVyKG10ZCwgTlVMTCwgMCk7DQo+IA0KPiBDaGVjayB0aGUg cmV0dXJuZWQgY29kZQ0KT2suDQo+IA0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogcGwzNTNfbmFuZF9yZW1vdmUgLSBSZW1vdmUgbWV0aG9k IGZvciB0aGUgTkFORCBkcml2ZXINCj4gPiArICogQHBkZXY6CVBvaW50ZXIgdG8gdGhlIHBsYXRm b3JtX2RldmljZSBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyBj YWxsZWQgaWYgdGhlIGRyaXZlciBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQuIEl0DQo+ID4gK2Zy ZWVzIGFsbA0KPiA+ICsgKiByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIHRoZSBkZXZpY2UuDQo+ID4g KyAqDQo+ID4gKyAqIFJldHVybjoJMCBvbiBzdWNjZXNzIG9yIGVycm9yIHZhbHVlIG9uIGZhaWx1 cmUNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9yZW1vdmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikgew0KPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfaW5mbyAqeG5m YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsJc3RydWN0IG10ZF9pbmZvICpt dGQgPSBuYW5kX3RvX210ZCgmeG5mYy0+Y2hpcCk7DQo+ID4gKw0KPiA+ICsJLyogUmVsZWFzZSBy ZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovDQo+ID4gKwluYW5kX3JlbGVhc2UobXRkKTsN Cj4gDQo+IFdoYXQgYWJvdXQgTVREIGNvcmUgZGVyZWdpc3RyYXRpb24/DQpuYW5kX3JlbGVhc2Uo KSwgaXQgc2VsZiB3aWxsIGRvIHRoYXQuDQo+IA0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKiBNYXRjaCB0YWJsZSBmb3IgZGV2aWNlIHRyZWUgYmluZGluZyAq LyBzdGF0aWMgY29uc3Qgc3RydWN0DQo+ID4gK29mX2RldmljZV9pZCBwbDM1M19uYW5kX29mX21h dGNoW10gPSB7DQo+ID4gKwl7IC5jb21wYXRpYmxlID0gImFybSxwbDM1My1uYW5kLXIycDEiIH0s DQo+ID4gKwl7fSwNCj4gPiArfTsNCj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcGwzNTNf bmFuZF9vZl9tYXRjaCk7DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBwbDM1M19uYW5kX2RyaXZl ciAtIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIE5BTkQgc3Vic3lzdGVtDQo+ID4gK3BsYXRm b3JtIGRyaXZlciAgKi8gc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGwzNTNfbmFuZF9k cml2ZXIgPQ0KPiA+ICt7DQo+ID4gKwkucHJvYmUJCT0gcGwzNTNfbmFuZF9wcm9iZSwNCj4gPiAr CS5yZW1vdmUJCT0gcGwzNTNfbmFuZF9yZW1vdmUsDQo+ID4gKwkuZHJpdmVyCQk9IHsNCj4gPiAr CQkubmFtZQk9IFBMMzUzX05BTkRfRFJJVkVSX05BTUUsDQo+ID4gKwkJLm9mX21hdGNoX3RhYmxl ID0gcGwzNTNfbmFuZF9vZl9tYXRjaCwNCj4gPiArCX0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtt b2R1bGVfcGxhdGZvcm1fZHJpdmVyKHBsMzUzX25hbmRfZHJpdmVyKTsNCj4gPiArDQo+ID4gK01P RFVMRV9BVVRIT1IoIlhpbGlueCwgSW5jLiIpOw0KPiA+ICtNT0RVTEVfQUxJQVMoInBsYXRmb3Jt OiIgUEwzNTNfTkFORF9EUklWRVJfTkFNRSk7DQo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiQVJN IFBMMzUzIE5BTkQgRmxhc2ggRHJpdmVyIik7DQo+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsN Cj4gDQo+IFRoYW5rcyBmb3IgeW91ciBlZmZvcnRzLA0KPiBNaXF1w6hsDQoNClRoYW5rcyBmb3Ig dGhlIHJldmlldy4NCg0KUmVnYXJkcywNCk5hZ2EgU3VyZXNoa3VtYXIgUmVsbGkuDQo=