Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp788730imm; Fri, 8 Jun 2018 05:24:48 -0700 (PDT) X-Google-Smtp-Source: ADUXVKKnvoep5YvkuM8G2sD3gB8mV051/eaTkH+sxT0Ee/IXsbBis+IW1AvmRTECOlr+qXfETmpL X-Received: by 2002:a17:902:8347:: with SMTP id z7-v6mr6321490pln.290.1528460688184; Fri, 08 Jun 2018 05:24:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528460688; cv=none; d=google.com; s=arc-20160816; b=wMtDAgrFpuaLMMB8LgwaMjk5TouEyLe6sokCXvvEBkri+/eIBkcx6fE74G5lXBVI6z 2tNpOTuELFHH6pUo6wBf6AJovHe20naJn5pgBO4ErukhCGRw8Wl44hzf/8jrh8bfh8m/ 4K2yjNDQrs47l8+XS3VvdWT0JzRFkmDiIzIXnzxGdRPdvx72MBXwVgi2QSGfSEt/0r5k McmRigdLnOTRP3mJQjM9+o4TpcDz348HeGG5CADIqTdY0IWJowyepxxNGVKn9PLY6A79 wX0uFHsJWuixSjBp6uG6Wd6QAZkKYTr6P2JEpuaTGfunpKocizPZyhySpF0cwjc2FRzv XZWQ== 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=3XXiu+ZY3D4oj+Mr3chEwG5diiSUgxZA1ZdkZt02LRM=; b=u3NTGOme1EzTQp8SqHknsMfYNVjvtV6lFDR3axoA5EI/MtUUnSbIfXzmuGSOXAh1mL Gt0OkGBRJcnuDStava2p+tg59diewHkOgXLzp7YpUJZqAk2AybQK+yslcQmVkvXxN5bc shYVcSNkzk/t2WnI3z0SsIz8PdJjK4IZhIHQe48sRDfdTMsL2+KkI24/ODpaMsoPVXn0 suHI3uYCe4VSdES2zG2vwL6v31cBFi/UYMHQhBhEqEvcKSGKP8SHv7m8SrgEqZqr90mQ wH/eMwTH9T7srtnkNKQa6InPvWn7mFZkhPiGyvHbFlDlVCwq4S/hlws0LcUxNdE+GgkR 78jA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=ELvOvaKc; 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 o33-v6si9273538plb.432.2018.06.08.05.24.32; Fri, 08 Jun 2018 05:24:48 -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=ELvOvaKc; 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 S1752661AbeFHMXw (ORCPT + 99 others); Fri, 8 Jun 2018 08:23:52 -0400 Received: from mail-eopbgr690049.outbound.protection.outlook.com ([40.107.69.49]:14752 "EHLO NAM04-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751185AbeFHMXt (ORCPT ); Fri, 8 Jun 2018 08:23:49 -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=3XXiu+ZY3D4oj+Mr3chEwG5diiSUgxZA1ZdkZt02LRM=; b=ELvOvaKca6U06wPBjDeogMaiw31gpT3uSsCjyk2tNwwkout1xEtLy+nzTNtbvCKrg/vxXde1qqBsCZyKxtWCF5ydUuk9x1fin4jrPBStOUjeZpTafR9Rz8pfpejRPMz/vFLHwiUSs4L3GQ9LdQ5gxRfBhp8rOafDIRsx84B5nx8= Received: from MWHPR02MB2623.namprd02.prod.outlook.com (10.168.206.9) by MWHPR02MB2687.namprd02.prod.outlook.com (10.175.49.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.841.17; Fri, 8 Jun 2018 12:23:45 +0000 Received: from MWHPR02MB2623.namprd02.prod.outlook.com ([fe80::e826:8d65:9e76:6426]) by MWHPR02MB2623.namprd02.prod.outlook.com ([fe80::e826:8d65:9e76:6426%9]) with mapi id 15.20.0841.015; Fri, 8 Jun 2018 12:23:45 +0000 From: Naga Sureshkumar Relli To: Miquel Raynal CC: "boris.brezillon@bootlin.com" , "richard@nod.at" , "wmw2@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" Subject: RE: [LINUX PATCH v9 4/4] mtd: rawnand: pl353: Add basic driver for arm pl353 smc nand interface Thread-Topic: [LINUX PATCH v9 4/4] mtd: rawnand: pl353: Add basic driver for arm pl353 smc nand interface Thread-Index: AQHT/WsxpMeMuIfugkKfN+bDxEsXmqRVOVeAgACc2LA= Date: Fri, 8 Jun 2018 12:23:45 +0000 Message-ID: References: <1528271382-21690-1-git-send-email-naga.sureshkumar.relli@xilinx.com> <1528271382-21690-5-git-send-email-naga.sureshkumar.relli@xilinx.com> <20180607215949.58e2d15d@xps13> In-Reply-To: <20180607215949.58e2d15d@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: authentication-results: spf=none (sender IP is ) smtp.mailfrom=nagasure@xilinx.com; x-originating-ip: [182.72.145.30] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;MWHPR02MB2687;7:6XpWf7LspKVk0kpLf0+DS2Bs7UBF6n4a7s8Gg88lspHHqCA8SZnVcL1ZMULDg/VayqIRHNcQBJZVd9+Rpj7WqGwwrK0yCKmmNqlbHHn3qNHe9kLw2WLytDBBMyfKjthl6MGJssc206COFaXmpIE1MYjqNlt2KvnCpZxBs6kvE4V+KCHbjr0rhFj4O6weu2UuagPfnTjFL40Y9dMNswi/PmgPV2++BYE1tb37BFI1aT3yD4FlNkA22Po2iq+w7Y14 x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(48565401081)(5600026)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020);SRVR:MWHPR02MB2687; x-ms-traffictypediagnostic: MWHPR02MB2687: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(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)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123558120)(20161123564045)(6072148)(201708071742011)(7699016);SRVR:MWHPR02MB2687;BCL:0;PCL:0;RULEID:;SRVR:MWHPR02MB2687; x-forefront-prvs: 06973FFAD3 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(39380400002)(39860400002)(346002)(376002)(396003)(13464003)(189003)(199004)(5250100002)(6116002)(3846002)(2906002)(11346002)(3660700001)(305945005)(99286004)(3280700002)(446003)(486006)(476003)(6436002)(53936002)(55016002)(16200700003)(53946003)(6246003)(25786009)(6306002)(9686003)(74316002)(33656002)(66066001)(105586002)(106356001)(4326008)(2900100001)(39060400002)(102836004)(55236004)(229853002)(6916009)(59450400001)(6506007)(53546011)(81166006)(81156014)(966005)(68736007)(316002)(5660300001)(8936002)(14454004)(54906003)(26005)(7416002)(8676002)(186003)(86362001)(575784001)(7696005)(7736002)(76176011)(97736004)(478600001)(217873001)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:MWHPR02MB2687;H:MWHPR02MB2623.namprd02.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: xilinx.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: yeao3FVmxGn5ngK0on47okPoaoHlnOeDs4QCrBT25NIWk1ApgrBWxa3PH7g0Ay99ITdYlLBZ466+sIeMXnt8hoN3Git2aA6hnJ9Se6vqCmR6DG6PyOddncVD3I1plkG1jeA6jqJAYCNUDOLHu9SaMdcFDDsv6Klq5VkMbpQOdbLhicsT2hNCsuFuyrxUpijq spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 759e3aac-af34-43e2-7113-08d5cd3aadfa X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-Network-Message-Id: 759e3aac-af34-43e2-7113-08d5cd3aadfa X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Jun 2018 12:23:45.2368 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR02MB2687 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTWlxdWVsLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1pcXVl bCBSYXluYWwgW21haWx0bzptaXF1ZWwucmF5bmFsQGJvb3RsaW4uY29tXQ0KPiBTZW50OiBGcmlk YXksIEp1bmUgOCwgMjAxOCAxOjMwIEFNDQo+IFRvOiBOYWdhIFN1cmVzaGt1bWFyIFJlbGxpIDxu YWdhc3VyZUB4aWxpbnguY29tPg0KPiBDYzogYm9yaXMuYnJlemlsbG9uQGJvb3RsaW4uY29tOyBy aWNoYXJkQG5vZC5hdDsgd213MkBpbmZyYWRlYWQub3JnOw0KPiBjb21wdXRlcnNmb3JwZWFjZUBn bWFpbC5jb207IG1hcmVrLnZhc3V0QGdtYWlsLmNvbTsgZi5mYWluZWxsaUBnbWFpbC5jb207DQo+ IG1tYXllckBicm9hZGNvbS5jb207IHJvZ2VycUB0aS5jb207IGxhZGlzQGxpbnV4LW1pcHMub3Jn OyBhZGFAdGhvcnNpcy5jb207DQo+IGhvbmdodWkuemhhbmdAbWVkaWF0ZWsuY29tOyBsaW51eC1t dGRAbGlzdHMuaW5mcmFkZWFkLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsNCj4g bmFnYXN1cmVzaGt1bWFycmVsbGlAZ21haWwuY29tDQo+IFN1YmplY3Q6IFJlOiBbTElOVVggUEFU Q0ggdjkgNC80XSBtdGQ6IHJhd25hbmQ6IHBsMzUzOiBBZGQgYmFzaWMgZHJpdmVyIGZvciBhcm0g cGwzNTMNCj4gc21jIG5hbmQgaW50ZXJmYWNlDQo+IA0KPiBIaSBOYWdhLA0KPiANCj4gVGhpcyBp cyBhIHBhcnRpYWwgcmV2aWV3LCBlbm91Z2ggZm9yIHRoaXMgdmVyc2lvbiwgc2VlIGJlbG93Lg0K T2ssIFRoYW5rcy4NCg0KPiANCj4gT24gV2VkLCA2IEp1biAyMDE4IDEzOjE5OjQyICswNTMwLCBO YWdhIFN1cmVzaGt1bWFyIFJlbGxpDQo+IDxuYWdhLnN1cmVzaGt1bWFyLnJlbGxpQHhpbGlueC5j b20+IHdyb3RlOg0KPiANCj4gPiBBZGQgZHJpdmVyIGZvciBhcm0gcGwzNTMgc3RhdGljIG1lbW9y eSBjb250cm9sbGVyIG5hbmQgaW50ZXJmYWNlIHdpdGgNCj4gDQo+IHMvbmFuZC9OQU5ELw0KT2sg SSB3aWxsIHVwZGF0ZS4NCj4gDQo+ID4gSFcgRUNDIHN1cHBvcnQuIFRoaXMgY29udHJvbGxlciBp cyB1c2VkIGluIHhpbGlueCB6eW5xIHNvYyBmb3INCj4gPiBpbnRlcmZhY2luZw0KPiANCj4gcy9I Vy9oYXJkd2FyZS8NCk9rIEkgd2lsbCB1cGRhdGUuDQo+IA0KPiA+IHRoZSBuYW5kIGZsYXNoIG1l bW9yeS4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IE5hZ2EgU3VyZXNoa3VtYXIgUmVsbGkNCj4g PiA8bmFnYS5zdXJlc2hrdW1hci5yZWxsaUB4aWxpbnguY29tPg0KPiA+IC0tLQ0KPiA+IENoYW5n ZXMgaW4gdjk6DQo+ID4gIC0gQWRkcmVzc2VkIHRoZSBiZWxvdyBjb21tZW50cyBnaXZlbiBieSBN aXF1ZWwNCj4gPiAgLSBpbnN0ZWFkIG9mIHVzaW5nIHBsMzUzX25hbmRfd3JpdGUzMiwgdXNlIGRp cmVjdGx5IHdyaXRlbF9yZWxheGVkDQo+ID4gIC0gRml4ZWQgY2hlY2sgcGF0Y2ggd2FybmluZ3MN Cj4gPiAgLSBSZW5hbWVkIHdyaXRlX2J1Zi9yZWFkX2J1ZiB0byB3cml0ZV9kYXRhX29wL3JlYWRf ZGF0YV9vcA0KPiA+ICAtIHVzZSBCSVQgbWFjcm8gaW5zdGVhZCBvZiAxIDw8IG5yDQo+ID4gIC0g VXNlIE5BTkRfUk9XX0FERFJfMyBmbGFnDQo+ID4gIC0gVXNlIG5hbmRfd2FpdF9yZWFkeSgpDQo+ ID4gIC0gUmVtb3ZlZCBzd2VjYyBmdW5jdGlvbnMNCj4gPiAgLSBVc2UgYWRkcmVzcyBjeWNsZXMg YXMgcGVyIHNpemUsIGluc3RlYWQgb2YgcmVhZGluZyBpdCBmcm9tDQo+ID4gUGFyYW1ldGVyIHBh Z2UNCj4gPiAgLSBJbnN0ZWFkIG9mIHdyaXRpbmcgdG9vIG1hbnkgcGF0dGVybnMsIHVzZSBvcHRp b25hbCBwcm9wZXJ0eSBDaGFuZ2VzDQo+ID4gaW4gdjg6DQo+ID4gIC0gQWRkZWQgZXhlY19vcCgp IGltcGxlbWVudGF0aW9uDQo+ID4gIC0gRml4ZWQgdGhlIGJlbG93IHY3IHJldmlldyBjb21tZW50 cw0KPiA+ICAtIHJlbW92ZWQgbXRkX2luZm8gZnJvbSBwbDM1M19uYW5kX2luZm8gc3RydWN0DQo+ ID4gIC0gQ29ycmVjdGVkIGVjYyBsYXlvdXQgb2Zmc2V0cw0KPiA+ICAtIEFkZGVkIG9uLWRpZSBl Y2Mgc3VwcG9ydA0KPiA+IENoYW5nZXMgaW4gdjc6DQo+ID4gIC0gQ3VycmVudGx5IG5vdCBpbXBs ZW1lbnRlZCB0aGUgbWVtY2xrIHJhdGUgYWRqdXN0bWVudHMuIEkgd2lsbA0KPiA+ICAgIGxvb2sg aW50byB0aGlzIGxhdGVyIGFuZCBvbmNlIHRoZSBiYXNpYyBkcml2ZXIgaXMgYWNjZXB0ZWQuDQo+ ID4gIC0gRml4ZWQgR1BMIGxpY2VuY2UgaWRlbnQNCj4gPiBDaGFuZ2VzIGluIHY2Og0KPiA+ICAt IEZpeGVkIHRoZSBjaGVja3BhdGNoLnBsIHJlcG9ydGVkIHdhcm5pbmdzDQo+ID4gIC0gVXNpbmcg dGhlIGFkZHJlc3MgY3ljbGVzIGluZm9ybWF0aW9uIGZyb20gdGhlIG9uZmkgcGFyYW0gcGFnZQ0K PiA+ICAgIGVhcmxpZXIgaXQgaXMgaGFyZGNvZGVkIHRvIDUgaW4gZHJpdmVyIENoYW5nZXMgaW4g djU6DQo+ID4gIC0gQ29uZmlndXJlIHRoZSBuYW5kIHRpbWluZyBwYXJhbWV0ZXJzIGFzIHBlciB0 aGUgb25maSBzcGVjIENoYW5nZXMNCj4gPiBpbiB2NDoNCj4gPiAgLSBVcGRhdGVkIHRoZSBkcml2 ZXIgdG8gc3luYyB3aXRoIHBsMzUzX3NtYyBkcml2ZXIgQVBJcyBDaGFuZ2VzIGluDQo+ID4gdjM6 DQo+ID4gIC0gaW1wbGVtZW50ZWQgdGhlIHByb3BlciBlcnJvciBjb2Rlcw0KPiA+ICAtIGZ1cnRo ZXIgYnJlYWtkb3duIHRoaXMgcGF0Y2ggdG8gbXVsdGlwbGUgc2V0cw0KPiA+ICAtIGFkZGVkIHRo ZSBjb250cm9sbGVyIGFuZCBkcml2ZXIgZGV0YWlscyB0byBEb2N1bWVudGF0aW9uIHNlY3Rpb24N Cj4gPiAgLSB1cGRhdGVkIHRoZSBsaWNlbmVjZSB0byBHUEx2Mg0KPiA+ICAtIHJlb3JnYW5pemVk IHRoZSBwbDM1M19uYW5kX2VjY19pbml0IGZ1bmN0aW9uIENoYW5nZXMgaW4gdjI6DQo+ID4gIC0g dXNlICJkZXBlbmRzIG9uIiByYXRoZXIgdGhhbiAic2VsZWN0IiBvcHRpb24gaW4ga2NvbmZpZw0K PiA+ICAtIHJlbW92ZSB1bnVzZWQgdmFyaWFibGUgcGFydHMNCj4gPiAgLSByZW1vdmUgZHVtbXkg aGVscGVyIGFuZCB1c2Ugd3JpdGVsX3JlbGF4ZWQgZGlyZWN0bHkNCj4gPiAtLS0NCj4gPg0KPiA+ ICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnICAgICAgfCAgICA3ICsNCj4gPiAgZHJpdmVy cy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUgICAgIHwgICAgMyArDQo+ID4gIGRyaXZlcnMvbXRkL25h bmQvcmF3L3BsMzUzX25hbmQuYyB8IDEyMzYNCj4gPiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrDQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMTI0NiBpbnNlcnRpb25zKCspDQo+ ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL210ZC9uYW5kL3Jhdy9wbDM1M19uYW5kLmMN Cj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnDQo+ID4g Yi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnIGluZGV4IDY4NzFmZjAuLjFjNWQ1MjggMTAw NjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZw0KPiA+ICsrKyBiL2Ry aXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWcNCj4gPiBAQCAtNTMwLDQgKzUzMCwxMSBAQCBjb25m aWcgTVREX05BTkRfTVRLDQo+ID4gIAkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTkFORCBjb250cm9s bGVyIG9uIE1USyBTb0NzLg0KPiA+ICAJICBUaGlzIGNvbnRyb2xsZXIgaXMgZm91bmQgb24gbXQy N3h4LCBtdDgxeHgsIG10NjV4eCBTb0NzLg0KPiA+DQo+ID4gK2NvbmZpZyBNVERfTkFORF9QTDM1 Mw0KPiA+ICsJdHJpc3RhdGUgIkFSTSBQbDM1MyBOQU5EIGZsYXNoIGRyaXZlciINCj4gPiArCWRl cGVuZHMgb24gTVREX05BTkQgJiYgQVJNDQo+ID4gKwlkZXBlbmRzIG9uIFBMMzUzX1NNQw0KPiA+ ICsJaGVscA0KPiA+ICsJICBFbmFibGVzIHN1cHBvcnQgZm9yIFByaW1lQ2VsbCBTdGF0aWMgTWVt b3J5IENvbnRyb2xsZXIgUEwzNTMuDQo+ID4gKw0KPiA+ICBlbmRpZiAjIE1URF9OQU5EDQo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlDQo+ID4gYi9kcml2ZXJz L210ZC9uYW5kL3Jhdy9NYWtlZmlsZSBpbmRleCAxNjViN2VmLi42ODU1YTBkIDEwMDY0NA0KPiA+ IC0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlDQo+ID4gKysrIGIvZHJpdmVycy9t dGQvbmFuZC9yYXcvTWFrZWZpbGUNCj4gPiBAQCAtNTYsNyArNTYsOSBAQCBvYmotJChDT05GSUdf TVREX05BTkRfSElTSTUwNCkJICAgICAgICArPQ0KPiBoaXNpNTA0X25hbmQubw0KPiA+ICBvYmot JChDT05GSUdfTVREX05BTkRfQlJDTU5BTkQpCQkrPSBicmNtbmFuZC8NCj4gPiAgb2JqLSQoQ09O RklHX01URF9OQU5EX1FDT00pCQkrPSBxY29tX25hbmRjLm8NCj4gPiAgb2JqLSQoQ09ORklHX01U RF9OQU5EX01USykJCSs9IG10a19lY2MubyBtdGtfbmFuZC5vDQo+ID4gK29iai0kKENPTkZJR19N VERfTkFORF9QTDM1MykJCSs9IHBsMzUzX25hbmQubw0KPiA+DQo+ID4gK0NGTEFHU197bmFuZF9i YXNlLm99IDo9IC1EREVCVUcNCj4gDQo+IE5vcGUgOikNCkZvciBzb21lIHJlYXNvbiBJIHB1dCB0 aGlzLCBJIHdpbGwgcmVtb3ZlIHRoaXMgaW4gbmV4dCB2ZXJzaW9uLg0KPiANCj4gPiAgbmFuZC1v YmpzIDo9IG5hbmRfYmFzZS5vIG5hbmRfYmJ0Lm8gbmFuZF90aW1pbmdzLm8gbmFuZF9pZHMubw0K PiA+IG5hbmQtb2JqcyArPSBuYW5kX2FtZC5vICBuYW5kLW9ianMgKz0gbmFuZF9oeW5peC5vIEBA IC02NCwzICs2Niw0IEBADQo+ID4gbmFuZC1vYmpzICs9IG5hbmRfbWFjcm9uaXgubyAgbmFuZC1v YmpzICs9IG5hbmRfbWljcm9uLm8gIG5hbmQtb2JqcyArPQ0KPiA+IG5hbmRfc2Ftc3VuZy5vICBu YW5kLW9ianMgKz0gbmFuZF90b3NoaWJhLm8NCj4gPiArDQo+IA0KPiBFeHRyYSBzcGFjZSBoZXJl DQpPayBJIHdpbGwgdXBkYXRlLg0KPiANCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFu ZC9yYXcvcGwzNTNfbmFuZC5jDQo+ID4gYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9wbDM1M19uYW5k LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLmE4ODBlYWRl DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L3BsMzUz X25hbmQuYw0KPiA+IEBAIC0wLDAgKzEsMTIzNiBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBBUk0gUEwzNTMgTkFORCBmbGFzaCBj b250cm9sbGVyIGRyaXZlcg0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWGls aW54LCBJbmMNCj4gPiArICogQXV0aG9yOiBQdW5uYWlhaCBjaG93ZGFyeSBrYWxsdXJpIDxwdW5u YWlhaEB4aWxpbnguY29tPg0KPiA+ICsgKiBBdXRob3I6IE5hZ2EgU3VyZXNoa3VtYXIgUmVsbGkg PG5hZ2FzdXJlQHhpbGlueC5jb20+DQo+ID4gKyAqDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2Vyci5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4N Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaXJx Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L21vZHVsZXBhcmFtLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9tdGQvcmF3bmFuZC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbXRkL25h bmRfZWNjLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPg0KPiA+ICsj aW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2 aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPg0KPiA+ICsjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3BsMzUzLXNtYy5oPg0KPiA+ICsN Cj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0RSSVZFUl9OQU1FICJwbDM1My1uYW5kIg0KPiA+ICsN Cj4gPiArLyogTkFORCBmbGFzaCBkcml2ZXIgZGVmaW5lcyAqLw0KPiA+ICsjZGVmaW5lIFBMMzUz X05BTkRfQ01EX1BIQVNFCTEJLyogRW5kIGNvbW1hbmQgdmFsaWQgaW4gY29tbWFuZA0KPiBwaGFz ZSAqLw0KPiA+ICsjZGVmaW5lIFBMMzUzX05BTkRfREFUQV9QSEFTRQkyCS8qIEVuZCBjb21tYW5k IHZhbGlkIGluIGRhdGEgcGhhc2UNCj4gKi8NCj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0VDQ19T SVpFCTUxMgkvKiBTaXplIG9mIGRhdGEgZm9yIEVDQyBvcGVyYXRpb24gKi8NCj4gPiArDQo+ID4g Ky8qIEZsYXNoIG1lbW9yeSBjb250cm9sbGVyIG9wZXJhdGluZyBwYXJhbWV0ZXJzICovDQo+ID4g Kw0KPiA+ICsjZGVmaW5lIFBMMzUzX05BTkRfRUNDX0NPTkZJRwkoQklUKDQpICB8CS8qIEVDQyBy ZWFkIGF0IGVuZCBvZiBwYWdlICovDQo+IFwNCj4gPiArCQkJCSAoMCA8PCA1KSkJLyogTm8gSnVt cGluZyAqLw0KPiA+ICsNCj4gPiArLyogQVhJIEFkZHJlc3MgZGVmaW5pdGlvbnMgKi8NCj4gPiAr I2RlZmluZSBTVEFSVF9DTURfU0hJRlQJCTMNCj4gPiArI2RlZmluZSBFTkRfQ01EX1NISUZUCQkx MQ0KPiA+ICsjZGVmaW5lIEVORF9DTURfVkFMSURfU0hJRlQJMjANCj4gPiArI2RlZmluZSBBRERS X0NZQ0xFU19TSElGVAkyMQ0KPiA+ICsjZGVmaW5lIENMRUFSX0NTX1NISUZUCQkyMQ0KPiA+ICsj ZGVmaW5lIEVDQ19MQVNUX1NISUZUCQkxMA0KPiA+ICsjZGVmaW5lIENPTU1BTkRfUEhBU0UJCSgw IDw8IDE5KQ0KPiA+ICsjZGVmaW5lIERBVEFfUEhBU0UJCUJJVCgxOSkNCj4gPiArDQo+ID4gKyNk ZWZpbmUgUEwzNTNfTkFORF9FQ0NfTEFTVAlCSVQoRUNDX0xBU1RfU0hJRlQpCS8qIFNldA0KPiBF Q0NfTGFzdCAqLw0KPiA+ICsjZGVmaW5lIFBMMzUzX05BTkRfQ0xFQVJfQ1MJQklUKENMRUFSX0NT X1NISUZUKQkvKiBDbGVhciBjaGlwDQo+IHNlbGVjdCAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBP TkRJRV9FQ0NfRkVBVFVSRV9BRERSCTB4OTANCj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0VDQ19C VVNZX1RJTUVPVVQJKDEgKiBIWikNCj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0RFVl9CVVNZX1RJ TUVPVVQJKDEgKiBIWikNCj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVO R1RICTQNCj4gPiArDQo+ID4gK3N0cnVjdCBwbDM1M19uZmNfb3Agew0KPiA+ICsJdTMyIGNtbmRz WzRdOw0KPiA+ICsJdTMyIHRoaXJkcm93Ow0KPiA+ICsJdTMyIHR5cGU7DQo+ID4gKwl1MzIgZW5k X2NtZDsNCj4gPiArCXUzMiBhZGRyczsNCj4gPiArCWJvb2wgd2FpdDsNCj4gPiArCXUzMiBsZW47 DQo+ID4gKwl1MzIgbmFkZHJzOw0KPiA+ICsJdW5zaWduZWQgaW50IGRhdGFfaW5zdHJfaWR4Ow0K PiA+ICsJY29uc3Qgc3RydWN0IG5hbmRfb3BfaW5zdHIgKmRhdGFfaW5zdHI7DQo+ID4gKwl1bnNp Z25lZCBpbnQgcmR5X3RpbWVvdXRfbXM7DQo+ID4gKwl1bnNpZ25lZCBpbnQgcmR5X2RlbGF5X25z Ow0KPiA+ICsJdW5zaWduZWQgaW50IGRhdGFfZGVsYXlfbnM7DQo+ID4gKwl1bnNpZ25lZCBpbnQg Y2xlX2FsZV9kZWxheV9uczsNCj4gPiArCXUzMiBhZGRyNTsNCj4gPiArCXUzMiBhZGRyNjsNCj4g PiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzdHJ1Y3QgcGwzNTNfbmFuZF9pbmZvIC0g RGVmaW5lcyB0aGUgTkFORCBmbGFzaCBkcml2ZXIgaW5zdGFuY2UNCj4gPiArICogQGNoaXA6CQlO QU5EIGNoaXAgaW5mb3JtYXRpb24gc3RydWN0dXJlDQo+ID4gKyAqIEBuYW5kX2Jhc2U6CQlWaXJ0 dWFsIGFkZHJlc3Mgb2YgdGhlIE5BTkQgZmxhc2ggZGV2aWNlDQo+ID4gKyAqIEBlbmRfY21kX3Bl bmRpbmc6CUVuZCBjb21tYW5kIGlzIHBlbmRpbmcNCj4gPiArICogQGVuZF9jbWQ6CQlFbmQgY29t bWFuZA0KPiA+ICsgKiBAcm93X2FkZHJfY3ljbGVzOglSb3cgYWRkcmVzcyBjeWNsZXMNCj4gPiAr ICogQGNvbF9hZGRyX2N5Y2xlczoJQ29sdW1uIGFkZHJlc3MgY3ljbGVzDQo+ID4gKyAqIEBhZGRy ZXNzOgkJUGFnZSBhZGRyZXNzDQo+ID4gKyAqIEBjbWRfcGVuZGluZzoJTW9yZSBjb21tYW5kIGlz IG5lZWRlZA0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHBsMzUzX25hbmRfaW5mbyB7DQo+ID4gKwlz dHJ1Y3QgbmFuZF9jaGlwIGNoaXA7DQo+ID4gKwl2b2lkIF9faW9tZW0gKm5hbmRfYmFzZTsNCj4g PiArCXVuc2lnbmVkIGxvbmcgZW5kX2NtZF9wZW5kaW5nOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBl bmRfY21kOw0KPiA+ICsJdTggYWRkcl9jeWNsZXM7DQo+ID4gKwl1MzIgYWRkcmVzczsNCj4gPiAr CXUzMiBjbWRfcGVuZGluZzsNCj4gPiArCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRlOw0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCBwbDM1M19lY2Nfb29ibGF5b3V0MTZfZWNjKHN0 cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwNCj4gPiArCQkJCSAgICAgc3RydWN0IG10 ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24pIHsNCj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAg PSBtdGRfdG9fbmFuZChtdGQpOw0KPiA+ICsNCj4gPiArCWlmIChzZWN0aW9uID49IGNoaXAtPmVj Yy5zdGVwcykNCj4gPiArCQlyZXR1cm4gLUVSQU5HRTsNCj4gPiArDQo+ID4gKwlvb2JyZWdpb24t Pm9mZnNldCA9IChzZWN0aW9uICogY2hpcC0+ZWNjLmJ5dGVzKTsNCj4gPiArCW9vYnJlZ2lvbi0+ bGVuZ3RoID0gY2hpcC0+ZWNjLmJ5dGVzOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX2VjY19vb2JsYXlvdXQxNl9mcmVlKHN0cnVj dCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwNCj4gPiArCQkJCSAgICAgIHN0cnVjdCBtdGRf b29iX3JlZ2lvbiAqb29icmVnaW9uKSB7DQo+ID4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0g bXRkX3RvX25hbmQobXRkKTsNCj4gPiArDQo+ID4gKwlpZiAoc2VjdGlvbiA+PSBjaGlwLT5lY2Mu c3RlcHMpDQo+ID4gKwkJcmV0dXJuIC1FUkFOR0U7DQo+ID4gKw0KPiA+ICsJb29icmVnaW9uLT5v ZmZzZXQgPSAoc2VjdGlvbiAqIGNoaXAtPmVjYy5ieXRlcykgKyA4Ow0KPiA+ICsJb29icmVnaW9u LT5sZW5ndGggPSA4Ow0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10ZF9vb2JsYXlvdXRfb3BzIHBsMzUzX2VjY19vb2JsYXlv dXQxNl9vcHMgPSB7DQo+ID4gKwkuZWNjID0gcGwzNTNfZWNjX29vYmxheW91dDE2X2VjYywNCj4g PiArCS5mcmVlID0gcGwzNTNfZWNjX29vYmxheW91dDE2X2ZyZWUsDQo+ID4gK307DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IHBsMzUzX2VjY19vb2JsYXlvdXQ2NF9lY2Moc3RydWN0IG10ZF9pbmZv ICptdGQsIGludCBzZWN0aW9uLA0KPiA+ICsJCQkJICAgICBzdHJ1Y3QgbXRkX29vYl9yZWdpb24g Km9vYnJlZ2lvbikgew0KPiA+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5k KG10ZCk7DQo+ID4gKw0KPiA+ICsJaWYgKHNlY3Rpb24gPj0gY2hpcC0+ZWNjLnN0ZXBzKQ0KPiA+ ICsJCXJldHVybiAtRVJBTkdFOw0KPiA+ICsNCj4gPiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gKHNl Y3Rpb24gKiBjaGlwLT5lY2MuYnl0ZXMpICsgNTI7DQo+ID4gKwlvb2JyZWdpb24tPmxlbmd0aCA9 IGNoaXAtPmVjYy5ieXRlczsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGludCBwbDM1M19lY2Nfb29ibGF5b3V0NjRfZnJlZShzdHJ1Y3QgbXRkX2lu Zm8gKm10ZCwgaW50IHNlY3Rpb24sDQo+ID4gKwkJCQkgICAgICBzdHJ1Y3QgbXRkX29vYl9yZWdp b24gKm9vYnJlZ2lvbikgew0KPiA+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19u YW5kKG10ZCk7DQo+ID4gKw0KPiA+ICsJaWYgKHNlY3Rpb24pDQo+ID4gKwkJcmV0dXJuIC1FUkFO R0U7DQo+ID4gKw0KPiA+ICsJaWYgKHNlY3Rpb24gPj0gY2hpcC0+ZWNjLnN0ZXBzKQ0KPiA+ICsJ CXJldHVybiAtRVJBTkdFOw0KPiA+ICsNCj4gPiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gKHNlY3Rp b24gKiBjaGlwLT5lY2MuYnl0ZXMpICsgMjsNCj4gPiArCW9vYnJlZ2lvbi0+bGVuZ3RoID0gNTA7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbXRkX29vYmxheW91dF9vcHMgcGwzNTNfZWNjX29vYmxheW91dDY0X29wcyA9IHsN Cj4gPiArCS5lY2MgPSBwbDM1M19lY2Nfb29ibGF5b3V0NjRfZWNjLA0KPiA+ICsJLmZyZWUgPSBw bDM1M19lY2Nfb29ibGF5b3V0NjRfZnJlZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qIEdlbmVy aWMgZmxhc2ggYmJ0IGRlY3JpcHRvcnMgKi8NCj4gPiArc3RhdGljIHU4IGJidF9wYXR0ZXJuW10g PSB7ICdCJywgJ2InLCAndCcsICcwJyB9OyBzdGF0aWMgdTgNCj4gPiArbWlycm9yX3BhdHRlcm5b XSA9IHsgJzEnLCAndCcsICdiJywgJ0InIH07DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IG5h bmRfYmJ0X2Rlc2NyIGJidF9tYWluX2Rlc2NyID0gew0KPiA+ICsJLm9wdGlvbnMgPSBOQU5EX0JC VF9MQVNUQkxPQ0sgfCBOQU5EX0JCVF9DUkVBVEUgfA0KPiBOQU5EX0JCVF9XUklURQ0KPiA+ICsJ CXwgTkFORF9CQlRfMkJJVCB8IE5BTkRfQkJUX1ZFUlNJT04gfCBOQU5EX0JCVF9QRVJDSElQLA0K PiA+ICsJLm9mZnMgPSA0LA0KPiA+ICsJLmxlbiA9IDQsDQo+ID4gKwkudmVyb2ZmcyA9IDIwLA0K PiA+ICsJLm1heGJsb2NrcyA9IDQsDQo+ID4gKwkucGF0dGVybiA9IGJidF9wYXR0ZXJuDQo+ID4g K307DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGJidF9taXJyb3Jf ZGVzY3IgPSB7DQo+ID4gKwkub3B0aW9ucyA9IE5BTkRfQkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJU X0NSRUFURSB8DQo+IE5BTkRfQkJUX1dSSVRFDQo+ID4gKwkJfCBOQU5EX0JCVF8yQklUIHwgTkFO RF9CQlRfVkVSU0lPTiB8IE5BTkRfQkJUX1BFUkNISVAsDQo+ID4gKwkub2ZmcyA9IDQsDQo+ID4g KwkubGVuID0gNCwNCj4gPiArCS52ZXJvZmZzID0gMjAsDQo+ID4gKwkubWF4YmxvY2tzID0gNCwN Cj4gPiArCS5wYXR0ZXJuID0gbWlycm9yX3BhdHRlcm4NCj4gPiArfTsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgKiBwbDM1M19uYW5kX3JlYWRfZGF0YV9vcCAtIHJlYWQgY2hpcCBkYXRhIGludG8g YnVmZmVyDQo+ID4gKyAqIEBjaGlwOglQb2ludGVyIHRvIHRoZSBOQU5EIGNoaXAgaW5mbyBzdHJ1 Y3R1cmUNCj4gPiArICogQGluOgkJUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHN0b3JlIHJlYWQg ZGF0YQ0KPiA+ICsgKiBAbGVuOglOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZA0KPiA+ICsgKiBSZXR1 cm46CUFsd2F5cyByZXR1cm4gemVybw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBwbDM1M19u YW5kX3JlYWRfZGF0YV9vcChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiA+ICsJCQkJICAgdTgg KmluLA0KPiA+ICsJCQkJICAgdW5zaWduZWQgaW50IGxlbikNCj4gPiArew0KPiA+ICsJaW50IGk7 DQo+ID4gKw0KPiA+ICsJaWYgKElTX0FMSUdORUQoKHVpbnQzMl90KWluLCBzaXplb2YodWludDMy X3QpKSAmJg0KPiA+ICsJICAgIElTX0FMSUdORUQobGVuLCBzaXplb2YodWludDMyX3QpKSkgew0K PiA+ICsJCXUzMiAqcHRyID0gKHUzMiAqKWluOw0KPiA+ICsNCj4gPiArCQlsZW4gLz0gNDsNCj4g PiArCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspDQo+ID4gKwkJCXB0cltpXSA9IHJlYWRsKGNo aXAtPklPX0FERFJfUik7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBs ZW47IGkrKykNCj4gPiArCQkJaW5baV0gPSByZWFkYihjaGlwLT5JT19BRERSX1IpOw0KPiANCj4g SSdtIG5vdCBzdXJlIHlvdSBuZWVkIHRoZXNlIElPX0FERFJfUi9XLiBCZXR0ZXIgbm90IHRvIHVz ZSB0aGVtIGluIGEgbmV3IGRyaXZlci4NCkkgYW0ganVzdCBjb250aW51aW5nIGl0IGZyb20gb2xk ZXIgZHJpdmVyLiBJIHdpbGwgcmVtb3ZlIHRoaXMgaW4gbmV3IGRyaXZlcg0KPiANCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IHBsMzUzX25hbmRfd3JpdGVfYnVmIC0gd3JpdGUgYnVmZmVyIHRvIGNoaXANCj4gPiArICogQG10 ZDoJUG9pbnRlciB0byB0aGUgbXRkIGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBidWY6CVBvaW50 ZXIgdG8gdGhlIGJ1ZmZlciB0byBzdG9yZSB3cml0ZSBkYXRhDQo+ID4gKyAqIEBsZW46CU51bWJl ciBvZiBieXRlcyB0byB3cml0ZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgcGwzNTNfbmFu ZF93cml0ZV9kYXRhX29wKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1OCAqYnVmLA0KPiA+ ICsJCQkJICAgICBpbnQgbGVuKQ0KPiA+ICt7DQo+ID4gKwlpbnQgaTsNCj4gPiArCXN0cnVjdCBu YW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOw0KPiA+ICsNCj4gPiArCWlmIChJU19B TElHTkVEKCh1aW50MzJfdClidWYsIHNpemVvZih1aW50MzJfdCkpICYmDQo+ID4gKwkgICAgSVNf QUxJR05FRChsZW4sIHNpemVvZih1aW50MzJfdCkpKSB7DQo+ID4gKwkJdTMyICpwdHIgPSAodTMy ICopYnVmOw0KPiA+ICsNCj4gPiArCQlsZW4gLz0gNDsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwg bGVuOyBpKyspDQo+ID4gKwkJCXdyaXRlbChwdHJbaV0sIGNoaXAtPklPX0FERFJfVyk7DQo+ID4g Kwl9IGVsc2Ugew0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykNCj4gPiArCQkJd3Jp dGViKGJ1ZltpXSwgY2hpcC0+SU9fQUREUl9XKTsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAqIHBsMzUzX25hbmRfY2FsY3VsYXRlX2h3ZWNjIC0gQ2FsY3VsYXRlIEhh cmR3YXJlIEVDQw0KPiA+ICsgKiBAbXRkOglQb2ludGVyIHRvIHRoZSBtdGRfaW5mbyBzdHJ1Y3R1 cmUNCj4gPiArICogQGRhdGE6CVBvaW50ZXIgdG8gdGhlIHBhZ2UgZGF0YQ0KPiA+ICsgKiBAZWNj OglQb2ludGVyIHRvIHRoZSBFQ0MgYnVmZmVyIHdoZXJlIEVDQyBkYXRhIG5lZWRzIHRvIGJlIHN0 b3JlZA0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgSGFyZHdh cmUgRUNDIGRhdGEgZnJvbSB0aGUgY29udHJvbGxlcg0KPiA+ICthbmQgcmV0dXJucw0KPiA+ICsg KiBFQ0MgZGF0YSBiYWNrIHRvIHRoZSBNVEQgc3Vic3lzdGVtLg0KPiA+ICsgKg0KPiA+ICsgKiBS ZXR1cm46CTAgb24gc3VjY2VzcyBvciBlcnJvciB2YWx1ZSBvbiBmYWlsdXJlDQo+ID4gKyAqLw0K PiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfY2FsY3VsYXRlX2h3ZWNjKHN0cnVjdCBtdGRfaW5m byAqbXRkLA0KPiA+ICsJCQkJICAgICAgY29uc3QgdTggKmRhdGEsIHU4ICplY2MpDQo+ID4gK3sN Cj4gPiArCXUzMiBlY2NfdmFsdWUsIGVjY19zdGF0dXM7DQo+ID4gKwl1OCBlY2NfcmVnLCBlY2Nf Ynl0ZTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBQTDM1M19OQU5E X0VDQ19CVVNZX1RJTUVPVVQ7DQo+ID4gKwkvKiBXYWl0IHRpbGwgdGhlIEVDQyBvcGVyYXRpb24g aXMgY29tcGxldGUgb3IgdGltZW91dCAqLw0KPiA+ICsJZG8gew0KPiA+ICsJCWlmIChwbDM1M19z bWNfZWNjX2lzX2J1c3koKSkNCj4gPiArCQkJY3B1X3JlbGF4KCk7DQo+ID4gKwkJZWxzZQ0KPiA+ ICsJCQlicmVhazsNCj4gPiArCX0gd2hpbGUgKCF0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVv dXQpKTsNCj4gPiArDQo+ID4gKwlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkg ew0KPiA+ICsJCXByX2VycigiJXMgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7DQo+ID4gKwkJcmV0 dXJuIC1FVElNRURPVVQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZm9yIChlY2NfcmVnID0gMDsg ZWNjX3JlZyA8IDQ7IGVjY19yZWcrKykgew0KPiANCj4gU28gaGVyZSB5b3UgaGFyZGNvZGUgdGhl IGZhY3QgdGhhdCB0aGVyZSBhcmUgNSAnYmxvY2tzJy4gVGhpcyBpcyBOQU5EIGNoaXAgZGVwZW5k ZW50LCByaWdodD8NClllcy4gTm90IDUgYnV0IDQuDQoNCj4gDQo+ID4gKwkJLyogUmVhZCBFQ0Mg dmFsdWUgZm9yIGVhY2ggYmxvY2sgKi8NCj4gPiArCQllY2NfdmFsdWUgPSBwbDM1M19zbWNfZ2V0 X2VjY192YWwoZWNjX3JlZyk7DQo+ID4gKwkJZWNjX3N0YXR1cyA9IChlY2NfdmFsdWUgPj4gMjQp ICYgMHhGRjsNCj4gDQo+IFBsZWFzZSBkZWZpbmUgYWxsIHRoZXNlIHZhbHVlcy4NCk9rIEkgd2ls bCB1cGRhdGUuDQo+IA0KPiBNYWtlIGVjY19zdGF0dXMgYSBieXRlIGlmIHlvdSBhbHdheXMgbmVl ZCBpdCB0byBiZSA4LWJpdC4gVGhlbiB5b3UgY2FuIGRyb3AgdGhlICYgMHhGRi4NCk9rIEkgd2ls bCB1cGRhdGUuDQo+IA0KPiA+ICsJCS8qIEVDQyB2YWx1ZSB2YWxpZCAqLw0KPiA+ICsJCWlmIChl Y2Nfc3RhdHVzICYgMHg0MCkgew0KPiANCj4gUGxlYXNlIGRlZmluZSB0aGlzIDB4NDANCk9rIEkg d2lsbCB1cGRhdGUuDQo+IA0KPiA+ICsJCQlmb3IgKGVjY19ieXRlID0gMDsgZWNjX2J5dGUgPCAz OyBlY2NfYnl0ZSsrKSB7DQo+ID4gKwkJCQkvKiBDb3B5IEVDQyBieXRlcyB0byBNVEQgYnVmZmVy ICovDQo+ID4gKwkJCQkqZWNjID0gfmVjY192YWx1ZSAmIDB4RkY7DQo+IA0KPiBUaGlzIGlzIG5v dCBhIGNvcHksIHlvdSBpbnZlcnQgdGhlIGJ5dGVzLCBJIGRvbid0IHJlYWxseSBrbm93IHdoeS4N Cj4gUGVyaGFwcyBhIGNvbW1lbnQgd291bGQgYmUgYXBwcmVjaWF0ZWQuDQoNCldoZW4gcHJvZ3Jh bW1pbmcgTkFORCwgdGhlIFNNQyBjb250cm9sbGVyIGFkZHMgYW4gaW52ZXJzaW9uIG9mIA0KdGhl IEVDQyBjb2RlIGlmIHRoZSBudW1iZXIgb2Ygb25lcyBpcyBvZGQuDQpUbyBtYXRjaCB0aGUgaGFy ZHdhcmUgYmVoYXZpb3IsIHNvZnR3YXJlIHNob3VsZCBhZGQgYW4gaW52ZXJzaW9uIG9mIHRoZSBF Q0MgY29kZS4NCkkgd2lsbCBhZGQgdGhpcyBpbiBhIGNvbW1lbnQuDQoNCj4gPiArCQkJCWVjY192 YWx1ZSA9IGVjY192YWx1ZSA+PiA4Ow0KPiA+ICsJCQkJZWNjKys7DQo+ID4gKwkJCX0NCj4gPiAr CQl9IGVsc2Ugew0KPiA+ICsJCQlwcl93YXJuKCIlcyBzdGF0dXMgZmFpbGVkXG4iLCBfX2Z1bmNf Xyk7DQo+ID4gKwkJCXJldHVybiAtMTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKwlyZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIG9uZWhvdCAtIG9uZWhvdCBmdW5j dGlvbg0KPiA+ICsgKiBAdmFsdWU6CVZhbHVlIHRvIGNoZWNrIGZvciBvbmVob3QNCj4gPiArICoN Cj4gPiArICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBhIHZhbHVlIGlzIG9uZWhvdCBv ciBub3QuDQo+ID4gKyAqIG9uZWhvdCBpcyBpZiBhbmQgb25seSBpZiBvbmViaXQgaXMgc2V0Lg0K PiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46CTEgaWYgaXQgaXMgb25laG90IGVsc2UgMA0KPiA+ICsg Ki8NCj4gPiArc3RhdGljIGludCBvbmVob3QodW5zaWduZWQgc2hvcnQgdmFsdWUpDQo+IA0KPiBX aHkgbm90IHJldHVybmluZyBhIGJvb2xlYW4/DQpZZXMuIEkgd2lsbCB1cGRhdGUgaXQuDQoNCj4g PiArew0KPiA+ICsJcmV0dXJuICh2YWx1ZSAmICh2YWx1ZSAtIDEpKSA9PSAwOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogcGwzNTNfbmFuZF9jb3JyZWN0X2RhdGEgLSBFQ0MgY29y cmVjdGlvbiBmdW5jdGlvbg0KPiA+ICsgKiBAbXRkOglQb2ludGVyIHRvIHRoZSBtdGRfaW5mbyBz dHJ1Y3R1cmUNCj4gPiArICogQGJ1ZjoJUG9pbnRlciB0byB0aGUgcGFnZSBkYXRhDQo+ID4gKyAq IEByZWFkX2VjYzoJUG9pbnRlciB0byB0aGUgRUNDIHZhbHVlIHJlYWQgZnJvbSBzcGFyZSBkYXRh IGFyZWENCj4gPiArICogQGNhbGNfZWNjOglQb2ludGVyIHRvIHRoZSBjYWxjdWxhdGVkIEVDQyB2 YWx1ZQ0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGNvcnJlY3RzIHRoZSBFQ0Mgc2lu Z2xlIGJpdCBlcnJvcnMgJiBkZXRlY3RzIDItYml0IGVycm9ycy4NCj4gPiArICoNCj4gPiArICog UmV0dXJuOgkwIGlmIG5vIEVDQyBlcnJvcnMgZm91bmQNCj4gPiArICoJCTEgaWYgc2luZ2xlIGJp dCBlcnJvciBmb3VuZCBhbmQgY29ycmVjdGVkLg0KPiA+ICsgKgkJLTEgaWYgbXVsdGlwbGUgRUND IGVycm9ycyBmb3VuZC4NCj4gDQo+ICJtdWx0aXBsZSB1bmNvcnJlY3RhYmxlIEVDQyBlcnJvcnMi DQpPaywgSSB3aWxsIHVwZGF0ZQ0KDQo+IA0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBwbDM1 M19uYW5kX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY2hhciAq YnVmLA0KPiA+ICsJCQkJICAgdW5zaWduZWQgY2hhciAqcmVhZF9lY2MsDQo+ID4gKwkJCQkgICB1 bnNpZ25lZCBjaGFyICpjYWxjX2VjYykNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgY2hhciBiaXRf YWRkcjsNCj4gPiArCXVuc2lnbmVkIGludCBieXRlX2FkZHI7DQo+ID4gKwl1bnNpZ25lZCBzaG9y dCBlY2Nfb2RkLCBlY2NfZXZlbiwgcmVhZF9lY2NfbG93ZXIsIHJlYWRfZWNjX3VwcGVyOw0KPiA+ ICsJdW5zaWduZWQgc2hvcnQgY2FsY19lY2NfbG93ZXIsIGNhbGNfZWNjX3VwcGVyOw0KPiA+ICsN Cj4gPiArCXJlYWRfZWNjX2xvd2VyID0gKHJlYWRfZWNjWzBdIHwgKHJlYWRfZWNjWzFdIDw8IDgp KSAmIDB4ZmZmOw0KPiA+ICsJcmVhZF9lY2NfdXBwZXIgPSAoKHJlYWRfZWNjWzFdID4+IDQpIHwg KHJlYWRfZWNjWzJdIDw8IDQpKSAmIDB4ZmZmOw0KPiA+ICsNCj4gPiArCWNhbGNfZWNjX2xvd2Vy ID0gKGNhbGNfZWNjWzBdIHwgKGNhbGNfZWNjWzFdIDw8IDgpKSAmIDB4ZmZmOw0KPiA+ICsJY2Fs Y19lY2NfdXBwZXIgPSAoKGNhbGNfZWNjWzFdID4+IDQpIHwgKGNhbGNfZWNjWzJdIDw8IDQpKSAm IDB4ZmZmOw0KPiA+ICsNCj4gPiArCWVjY19vZGQgPSByZWFkX2VjY19sb3dlciBeIGNhbGNfZWNj X2xvd2VyOw0KPiA+ICsJZWNjX2V2ZW4gPSByZWFkX2VjY191cHBlciBeIGNhbGNfZWNjX3VwcGVy Ow0KPiA+ICsNCj4gPiArCS8qIG5vIGVycm9yICovDQo+ID4gKwlpZiAoZWNjX29kZCA9PSAwICYm IGVjY19ldmVuID09IDApDQo+IA0KPiB5b3UgY2FuIHVzZSAiIWVjY19vZGQgJiYgIWVjY19ldmVu Ig0KT2sgSSB3aWxsIHVwZGF0ZS4NCg0KPiANCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ID4g KwlpZiAoZWNjX29kZCA9PSAofmVjY19ldmVuICYgMHhmZmYpKSB7DQo+ID4gKwkJLyogYml0cyBb MTE6M10gb2YgZXJyb3IgY29kZSBpcyBieXRlIG9mZnNldCAqLw0KPiA+ICsJCWJ5dGVfYWRkciA9 IChlY2Nfb2RkID4+IDMpICYgMHgxZmY7DQo+ID4gKwkJLyogYml0cyBbMjowXSBvZiBlcnJvciBj b2RlIGlzIGJpdCBvZmZzZXQgKi8NCj4gPiArCQliaXRfYWRkciA9IGVjY19vZGQgJiAweDc7DQo+ ID4gKwkJLyogVG9nZ2xpbmcgZXJyb3IgYml0ICovDQo+ID4gKwkJYnVmW2J5dGVfYWRkcl0gXj0g KEJJVChiaXRfYWRkcikpOw0KPiA+ICsJCXJldHVybiAxOw0KPiA+ICsJfQ0KPiA+ICsJLyogb25l IGVycm9yIGluIHBhcml0eSAqLw0KPiA+ICsJaWYgKG9uZWhvdChlY2Nfb2RkIHwgZWNjX2V2ZW4p ID09IDEpDQo+ID4gKwkJcmV0dXJuIDE7DQo+ID4gKw0KPiA+ICsJLyogVW5jb3JyZWN0YWJsZSBl cnJvciAqLw0KPiA+ICsJcmV0dXJuIC0xOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IHBsMzUzX2Rldl90aW1lb3V0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlw DQo+ID4gKypjaGlwKSB7DQo+ID4gKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsg UEwzNTNfTkFORF9ERVZfQlVTWV9USU1FT1VUOw0KPiA+ICsNCj4gPiArCWRvIHsNCj4gPiArCQlp ZiAoY2hpcC0+ZGV2X3JlYWR5KG10ZCkpDQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNwdV9yZWxh eCgpOw0KPiA+ICsJfSB3aGlsZSAoIXRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpOw0K PiA+ICsNCj4gPiArCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKSB7DQo+ID4g KwkJcHJfZXJyKCIlcyB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsNCj4gPiArCQlyZXR1cm4gLTE7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyB2b2lkIHBsMzUzX3ByZXBhcmVfY21kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3Qg bmFuZF9jaGlwICpjaGlwLA0KPiA+ICsJCQkgICAgICBpbnQgcGFnZSwgaW50IGNvbHVtbiwgaW50 IHN0YXJ0X2NtZCwgaW50IGVuZF9jbWQsDQo+ID4gKwkJCSAgICAgIGJvb2wgcmVhZCkNCj4gPiAr ew0KPiA+ICsJdW5zaWduZWQgbG9uZyBkYXRhX3BoYXNlX2FkZHI7DQo+ID4gKwl1MzIgZW5kX2Nt ZF92YWxpZCA9IDA7DQo+ID4gKwl2b2lkIF9faW9tZW0gKmNtZF9hZGRyOw0KPiA+ICsJdW5zaWdu ZWQgbG9uZyBjbWRfcGhhc2VfYWRkciA9IDAsIGNtZF9kYXRhID0gMDsNCj4gPiArDQo+ID4gKwlz dHJ1Y3QgcGwzNTNfbmFuZF9pbmZvICp4bmFuZCA9DQo+ID4gKwkJY29udGFpbmVyX29mKGNoaXAs IHN0cnVjdCBwbDM1M19uYW5kX2luZm8sIGNoaXApOw0KPiA+ICsNCj4gPiArCWVuZF9jbWRfdmFs aWQgPSByZWFkID8gMSA6IDA7DQo+ID4gKw0KPiA+ICsJY21kX3BoYXNlX2FkZHIgPSAodW5zaWdu ZWQgbG9uZyBfX2ZvcmNlKXhuYW5kLT5uYW5kX2Jhc2UgKw0KPiA+ICsJCQkgKCh4bmFuZC0+YWRk cl9jeWNsZXMNCj4gPiArCQkJIDw8IEFERFJfQ1lDTEVTX1NISUZUKSB8DQo+ID4gKwkJCSAoZW5k X2NtZF92YWxpZCA8PCBFTkRfQ01EX1ZBTElEX1NISUZUKSB8DQo+ID4gKwkJCSAoQ09NTUFORF9Q SEFTRSkgfA0KPiA+ICsJCQkgKGVuZF9jbWQgPDwgRU5EX0NNRF9TSElGVCkgfA0KPiA+ICsJCQkg KHN0YXJ0X2NtZCA8PCBTVEFSVF9DTURfU0hJRlQpKTsNCj4gPiArCWNtZF9hZGRyID0gKHZvaWQg X19pb21lbSAqIF9fZm9yY2UpY21kX3BoYXNlX2FkZHI7DQo+ID4gKw0KPiA+ICsJLyogR2V0IHRo ZSBkYXRhIHBoYXNlIGFkZHJlc3MgKi8NCj4gPiArCWRhdGFfcGhhc2VfYWRkciA9ICh1bnNpZ25l ZCBsb25nIF9fZm9yY2UpeG5hbmQtPm5hbmRfYmFzZSArDQo+ID4gKwkJCSAgKCgweDAgPDwgQ0xF QVJfQ1NfU0hJRlQpIHwNCj4gPiArCQkJICAoMCA8PCBFTkRfQ01EX1ZBTElEX1NISUZUKSB8DQo+ ID4gKwkJCSAgKERBVEFfUEhBU0UpIHwNCj4gPiArCQkJICAoZW5kX2NtZCA8PCBFTkRfQ01EX1NI SUZUKSB8DQo+ID4gKwkJCSAgKDB4MCA8PCBFQ0NfTEFTVF9TSElGVCkpOw0KPiA+ICsNCj4gPiAr CWNoaXAtPklPX0FERFJfUiA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRk cjsNCj4gPiArCWNoaXAtPklPX0FERFJfVyA9IGNoaXAtPklPX0FERFJfUjsNCj4gPiArCWlmIChj aGlwLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikNCj4gPiArCQljb2x1bW4gLz0gMjsNCj4g PiArCWNtZF9kYXRhID0gY29sdW1uOw0KPiA+ICsJaWYgKG10ZC0+d3JpdGVzaXplID4gUEwzNTNf TkFORF9FQ0NfU0laRSkgew0KPiA+ICsJCWNtZF9kYXRhIHw9IHBhZ2UgPDwgMTY7DQo+ID4gKwkJ LyogQW5vdGhlciBhZGRyZXNzIGN5Y2xlIGZvciBkZXZpY2VzID4gMTI4TWlCICovDQo+ID4gKwkJ aWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX1JPV19BRERSXzMpIHsNCj4gPiArCQkJd3JpdGVsX3Jl bGF4ZWQoY21kX2RhdGEsIGNtZF9hZGRyKTsNCj4gPiArCQkJY21kX2RhdGEgPSAocGFnZSA+PiAx Nik7DQo+ID4gKwkJfQ0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQljbWRfZGF0YSB8PSBwYWdlIDw8 IDg7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJd3JpdGVsX3JlbGF4ZWQoY21kX2RhdGEsIGNtZF9h ZGRyKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHBsMzUzX25hbmRfcmVhZF9v b2IgLSBbUkVQTEFDRUFCTEVdIHRoZSBtb3N0IGNvbW1vbiBPT0IgZGF0YSByZWFkIGZ1bmN0aW9u DQo+ID4gKyAqIEBtdGQ6CVBvaW50ZXIgdG8gdGhlIG10ZCBpbmZvIHN0cnVjdHVyZQ0KPiA+ICsg KiBAY2hpcDoJUG9pbnRlciB0byB0aGUgTkFORCBjaGlwIGluZm8gc3RydWN0dXJlDQo+ID4gKyAq IEBwYWdlOglQYWdlIG51bWJlciB0byByZWFkDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJQWx3 YXlzIHJldHVybiB6ZXJvDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfcmVh ZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsDQo+ID4g KwkJCSAgICAgICBpbnQgcGFnZSkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgbG9uZyBkYXRhX3Bo YXNlX2FkZHI7DQo+ID4gKwl1OCAqcDsNCj4gPiArCXN0cnVjdCBwbDM1M19uYW5kX2luZm8gKnhu YW5kID0NCj4gPiArCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBsMzUzX25hbmRfaW5mbywg Y2hpcCk7DQo+ID4gKwl1bnNpZ25lZCBsb25nIG5hbmRfb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcg X19mb3JjZSl4bmFuZC0+bmFuZF9iYXNlOw0KPiA+ICsNCj4gPiArCWNoaXAtPnBhZ2VidWYgPSAt MTsNCj4gPiArCWlmIChtdGQtPndyaXRlc2l6ZSA8IFBMMzUzX05BTkRfRUNDX1NJWkUpDQo+ID4g KwkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJcGwzNTNfcHJlcGFyZV9jbWQobXRkLCBjaGlwLCBw YWdlLCBtdGQtPndyaXRlc2l6ZSwgTkFORF9DTURfUkVBRDAsDQo+ID4gKwkJCSAgTkFORF9DTURf UkVBRFNUQVJULCAxKTsNCj4gPiArDQo+ID4gKwluZGVsYXkoMTAwKTsNCj4gPiArCXBsMzUzX2Rl dl90aW1lb3V0KG10ZCwgY2hpcCk7DQo+ID4gKw0KPiA+ICsJcCA9IGNoaXAtPm9vYl9wb2k7DQo+ ID4gKwlwbDM1M19uYW5kX3JlYWRfZGF0YV9vcChjaGlwLCBwLA0KPiA+ICsJCQkJKG10ZC0+b29i c2l6ZSAtDQo+ID4gKwkJCQlQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSk7DQo+ID4g KwlwICs9IChtdGQtPm9vYnNpemUgLSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsN Cj4gPiArCWRhdGFfcGhhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpY2hpcC0+SU9f QUREUl9SOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIC09IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJZGF0 YV9waGFzZV9hZGRyIHw9IFBMMzUzX05BTkRfQ0xFQVJfQ1M7DQo+ID4gKwlkYXRhX3BoYXNlX2Fk ZHIgKz0gbmFuZF9vZmZzZXQ7DQo+ID4gKwljaGlwLT5JT19BRERSX1IgPSAodm9pZCBfX2lvbWVt ICogX19mb3JjZSlkYXRhX3BoYXNlX2FkZHI7DQo+ID4gKwlwbDM1M19uYW5kX3JlYWRfZGF0YV9v cChjaGlwLCBwLCBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHBsMzUzX25hbmRf d3JpdGVfb29iIC0gW1JFUExBQ0VBQkxFXSB0aGUgbW9zdCBjb21tb24gT09CIGRhdGEgd3JpdGUN Cj4gZnVuY3Rpb24NCj4gPiArICogQG10ZDoJUG9pbnRlciB0byB0aGUgbXRkIGluZm8gc3RydWN0 dXJlDQo+ID4gKyAqIEBjaGlwOglQb2ludGVyIHRvIHRoZSBOQU5EIGNoaXAgaW5mbyBzdHJ1Y3R1 cmUNCj4gPiArICogQHBhZ2U6CVBhZ2UgbnVtYmVyIHRvIHdyaXRlDQo+ID4gKyAqDQo+ID4gKyAq IFJldHVybjoJWmVybyBvbiBzdWNjZXNzIGFuZCBFSU8gb24gZmFpbHVyZQ0KPiA+ICsgKi8NCj4g PiArc3RhdGljIGludCBwbDM1M19uYW5kX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwg c3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4gPiArCQkJCWludCBwYWdlKQ0KPiA+ICt7DQo+ID4g Kwljb25zdCB1OCAqYnVmID0gY2hpcC0+b29iX3BvaTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgZGF0 YV9waGFzZV9hZGRyOw0KPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfaW5mbyAqeG5hbmQgPQ0KPiA+ ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNfbmFuZF9pbmZvLCBjaGlwKTsNCj4g PiArCXVuc2lnbmVkIGxvbmcgbmFuZF9vZmZzZXQgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhu YW5kLT5uYW5kX2Jhc2U7DQo+ID4gKwl1MzIgYWRkcmN5Y2xlcyA9IDA7DQo+ID4gKw0KPiA+ICsJ Y2hpcC0+cGFnZWJ1ZiA9IC0xOw0KPiA+ICsJYWRkcmN5Y2xlcyA9IHhuYW5kLT5hZGRyX2N5Y2xl czsNCj4gPiArCXBsMzUzX3ByZXBhcmVfY21kKG10ZCwgY2hpcCwgcGFnZSwgbXRkLT53cml0ZXNp emUsIE5BTkRfQ01EX1NFUUlOLA0KPiA+ICsJCQkgIE5BTkRfQ01EX1BBR0VQUk9HLCAwKTsNCj4g PiArCW5kZWxheSgxMDApOw0KPiA+ICsJcGwzNTNfbmFuZF93cml0ZV9kYXRhX29wKG10ZCwgYnVm LA0KPiA+ICsJCQkJIChtdGQtPm9vYnNpemUgLQ0KPiA+ICsJCQkJIFBMMzUzX05BTkRfTEFTVF9U UkFOU0ZFUl9MRU5HVEgpKTsNCj4gPiArCWJ1ZiArPSAobXRkLT5vb2JzaXplIC0gUEwzNTNfTkFO RF9MQVNUX1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gKw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyID0g KHVuc2lnbmVkIGxvbmcgX19mb3JjZSljaGlwLT5JT19BRERSX1c7DQo+ID4gKwlkYXRhX3BoYXNl X2FkZHIgLT0gbmFuZF9vZmZzZXQ7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgfD0gUEwzNTNfTkFO RF9DTEVBUl9DUzsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciB8PSAoMSA8PCBFTkRfQ01EX1ZBTElE X1NISUZUKTsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciArPSBuYW5kX29mZnNldDsNCj4gDQo+IFdo YXQgeW91IGRvIGhlcmUgaXMgdW5jbGVhciBhbmQgc3VzcGVjdC4uLg0KPiANCj4gPiArCWNoaXAt PklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRkcjsNCj4g PiArCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChtdGQsIGJ1ZiwNCj4gUEwzNTNfTkFORF9MQVNU X1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gKwluYW5kX3dhaXRfcmVhZHkobXRkKTsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHBsMzUzX25h bmRfcmVhZF9wYWdlX3JhdyAtIFtJbnRlcm5dIHJlYWQgcmF3IHBhZ2UgZGF0YSB3aXRob3V0IGVj Yw0KPiA+ICsgKiBAbXRkOgkJUG9pbnRlciB0byB0aGUgbXRkIGluZm8gc3RydWN0dXJlDQo+ID4g KyAqIEBjaGlwOgkJUG9pbnRlciB0byB0aGUgTkFORCBjaGlwIGluZm8gc3RydWN0dXJlDQo+ID4g KyAqIEBidWY6CQlQb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlcg0KPiA+ICsgKiBAb29iX3JlcXVp cmVkOglDYWxsZXIgcmVxdWlyZXMgT09CIGRhdGEgcmVhZCB0byBjaGlwLT5vb2JfcG9pDQo+ID4g KyAqIEBwYWdlOgkJUGFnZSBudW1iZXIgdG8gcmVhZA0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46 CUFsd2F5cyByZXR1cm4gemVybw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBwbDM1M19uYW5k X3JlYWRfcGFnZV9yYXcoc3RydWN0IG10ZF9pbmZvICptdGQsDQo+ID4gKwkJCQkgICAgc3RydWN0 IG5hbmRfY2hpcCAqY2hpcCwNCj4gPiArCQkJCSAgICB1OCAqYnVmLCBpbnQgb29iX3JlcXVpcmVk LCBpbnQgcGFnZSkgew0KPiA+ICsJdW5zaWduZWQgbG9uZyBkYXRhX3BoYXNlX2FkZHI7DQo+ID4g Kwl1OCAqcDsNCj4gPiArCXN0cnVjdCBwbDM1M19uYW5kX2luZm8gKnhuYW5kID0NCj4gPiArCQlj b250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBsMzUzX25hbmRfaW5mbywgY2hpcCk7DQo+ID4gKwl1 bnNpZ25lZCBsb25nIG5hbmRfb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSl4bmFuZC0+ bmFuZF9iYXNlOw0KPiA+ICsNCj4gPiArCXBsMzUzX25hbmRfcmVhZF9kYXRhX29wKGNoaXAsIGJ1 ZiwgbXRkLT53cml0ZXNpemUpOw0KPiA+ICsJcCA9IGNoaXAtPm9vYl9wb2k7DQo+ID4gKwlwbDM1 M19uYW5kX3JlYWRfZGF0YV9vcChjaGlwLCBwLA0KPiA+ICsJCQkJKG10ZC0+b29ic2l6ZSAtDQo+ ID4gKwkJCQlQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSk7DQo+ID4gKwlwICs9ICht dGQtPm9vYnNpemUgLSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4gPiArDQo+ ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FE RFJfUjsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiArCWRhdGFf cGhhc2VfYWRkciB8PSBQTDM1M19OQU5EX0NMRUFSX0NTOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRy ICs9IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJY2hpcC0+SU9fQUREUl9SID0gKHZvaWQgX19pb21lbSAq IF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsNCj4gPiArCXBsMzUzX25hbmRfcmVhZF9k YXRhX29wKGNoaXAsIHAsIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ICsN Cj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogcGwzNTNf bmFuZF93cml0ZV9wYWdlX3JhdyAtIFtJbnRlcm5dIHJhdyBwYWdlIHdyaXRlIGZ1bmN0aW9uDQo+ ID4gKyAqIEBtdGQ6CQlQb2ludGVyIHRvIHRoZSBtdGQgaW5mbyBzdHJ1Y3R1cmUNCj4gPiArICog QGNoaXA6CQlQb2ludGVyIHRvIHRoZSBOQU5EIGNoaXAgaW5mbyBzdHJ1Y3R1cmUNCj4gPiArICog QGJ1ZjoJCVBvaW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyDQo+ID4gKyAqIEBvb2JfcmVxdWlyZWQ6 CUNhbGxlciByZXF1aXJlcyBPT0IgZGF0YSByZWFkIHRvIGNoaXAtPm9vYl9wb2kNCj4gPiArICog QHBhZ2U6CQlQYWdlIG51bWJlciB0byB3cml0ZQ0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46CUFs d2F5cyByZXR1cm4gemVybw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBwbDM1M19uYW5kX3dy aXRlX3BhZ2VfcmF3KHN0cnVjdCBtdGRfaW5mbyAqbXRkLA0KPiA+ICsJCQkJICAgICBzdHJ1Y3Qg bmFuZF9jaGlwICpjaGlwLA0KPiA+ICsJCQkJICAgICBjb25zdCB1OCAqYnVmLCBpbnQgb29iX3Jl cXVpcmVkLA0KPiA+ICsJCQkJICAgICBpbnQgcGFnZSkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQg bG9uZyBkYXRhX3BoYXNlX2FkZHI7DQo+ID4gKwl1OCAqcDsNCj4gPiArDQo+ID4gKwlzdHJ1Y3Qg cGwzNTNfbmFuZF9pbmZvICp4bmFuZCA9DQo+ID4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVj dCBwbDM1M19uYW5kX2luZm8sIGNoaXApOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBuYW5kX29mZnNl dCA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5hbmQtPm5hbmRfYmFzZTsNCj4gPiArDQo+ID4g KwlwbDM1M19uYW5kX3dyaXRlX2RhdGFfb3AobXRkLCBidWYsIG10ZC0+d3JpdGVzaXplKTsNCj4g PiArCXAgPSBjaGlwLT5vb2JfcG9pOw0KPiA+ICsJcGwzNTNfbmFuZF93cml0ZV9kYXRhX29wKG10 ZCwgcCwNCj4gPiArCQkJCSAobXRkLT5vb2JzaXplIC0NCj4gPiArCQkJCSBQTDM1M19OQU5EX0xB U1RfVFJBTlNGRVJfTEVOR1RIKSk7DQo+ID4gKwlwICs9IChtdGQtPm9vYnNpemUgLSBQTDM1M19O QU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4gPiArDQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIg PSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FERFJfVzsNCj4gPiArCWRhdGFfcGhh c2VfYWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciB8PSBQTDM1M19O QU5EX0NMRUFSX0NTOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIHw9ICgxIDw8IEVORF9DTURfVkFM SURfU0hJRlQpOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyICs9IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJ Y2hpcC0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRy Ow0KPiA+ICsNCj4gPiArCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChtdGQsIHAsIFBMMzUzX05B TkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ICsJbmRlbGF5KDEwMCk7DQo+ID4gKwluYW5k X3dhaXRfcmVhZHkobXRkKTsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICogbmFuZF93cml0ZV9wYWdlX2h3ZWNjIC0gSGFyZHdhcmUgRUNDIGJhc2VkIHBh Z2Ugd3JpdGUgZnVuY3Rpb24NCj4gPiArICogQG10ZDoJCVBvaW50ZXIgdG8gdGhlIG10ZCBpbmZv IHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2hpcDoJCVBvaW50ZXIgdG8gdGhlIE5BTkQgY2hpcCBpbmZv IHN0cnVjdHVyZQ0KPiA+ICsgKiBAYnVmOgkJUG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXINCj4g PiArICogQG9vYl9yZXF1aXJlZDoJQ2FsbGVyIHJlcXVpcmVzIE9PQiBkYXRhIHJlYWQgdG8gY2hp cC0+b29iX3BvaQ0KPiA+ICsgKiBAcGFnZToJCVBhZ2UgbnVtYmVyIHRvIHdyaXRlDQo+ID4gKyAq DQo+ID4gKyAqIFRoaXMgZnVuY3Rpb25zIHdyaXRlcyBkYXRhIGFuZCBoYXJkd2FyZSBnZW5lcmF0 ZWQgRUNDIHZhbHVlcyBpbiB0byB0aGUgcGFnZS4NCj4gPiArICoNCj4gPiArICogUmV0dXJuOglB bHdheXMgcmV0dXJuIHplcm8NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF93 cml0ZV9wYWdlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLA0KPiA+ICsJCQkJICAgICAgIHN0 cnVjdCBuYW5kX2NoaXAgKmNoaXAsDQo+ID4gKwkJCQkgICAgICAgY29uc3QgdTggKmJ1ZiwgaW50 IG9vYl9yZXF1aXJlZCwNCj4gPiArCQkJCSAgICAgICBpbnQgcGFnZSkNCj4gPiArew0KPiA+ICsJ aW50IGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsNCj4gPiArCWludCBlY2NzdGVwcyA9IGNoaXAt PmVjYy5zdGVwczsNCj4gPiArCXU4ICplY2NfY2FsYyA9IGNoaXAtPmVjYy5jYWxjX2J1ZjsNCj4g PiArCXU4ICpvb2JfcHRyOw0KPiA+ICsJY29uc3QgdTggKnAgPSBidWY7DQo+ID4gKwl1MzIgcmV0 Ow0KPiA+ICsJdW5zaWduZWQgbG9uZyBkYXRhX3BoYXNlX2FkZHI7DQo+ID4gKwlzdHJ1Y3QgcGwz NTNfbmFuZF9pbmZvICp4bmFuZCA9DQo+ID4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBw bDM1M19uYW5kX2luZm8sIGNoaXApOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBuYW5kX29mZnNldCA9 ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5hbmQtPm5hbmRfYmFzZTsNCj4gPiArDQo+ID4gKwlw bDM1M19wcmVwYXJlX2NtZChtdGQsIGNoaXAsIHBhZ2UsIDAsIE5BTkRfQ01EX1NFUUlOLA0KPiA+ ICsJCQkgIE5BTkRfQ01EX1BBR0VQUk9HLCAwKTsNCj4gPiArCW5kZWxheSgxMDApOw0KPiA+ICsJ Zm9yICggOyAoZWNjc3RlcHMgLSAxKTsgZWNjc3RlcHMtLSkgew0KPiA+ICsJCXBsMzUzX25hbmRf d3JpdGVfZGF0YV9vcChtdGQsIHAsIGVjY3NpemUpOw0KPiA+ICsJCXAgKz0gZWNjc2l6ZTsNCj4g PiArCX0NCj4gPiArCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChtdGQsIHAsDQo+ID4gKwkJCQkg KGVjY3NpemUgLSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSk7DQo+ID4gKwlwICs9 IChlY2NzaXplIC0gUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gKw0KPiA+ ICsJLyogU2V0IEVDQyBMYXN0IGJpdCB0byAxICovDQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAo dW5zaWduZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FERFJfVzsNCj4gPiArCWRhdGFfcGhhc2Vf YWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciB8PSBQTDM1M19OQU5E X0VDQ19MQVNUOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyICs9IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJ Y2hpcC0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRy Ow0KPiA+ICsJcGwzNTNfbmFuZF93cml0ZV9kYXRhX29wKG10ZCwgcCwgUEwzNTNfTkFORF9MQVNU X1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gKw0KPiA+ICsJcCA9IGJ1ZjsNCj4gPiArCWNoaXAtPmVj Yy5jYWxjdWxhdGUobXRkLCBwLCAmZWNjX2NhbGNbMF0pOw0KPiA+ICsNCj4gPiArCS8qIFdhaXQg Zm9yIEVDQyB0byBiZSBjYWxjdWxhdGVkIGFuZCByZWFkIHRoZSBlcnJvciB2YWx1ZXMgKi8NCj4g PiArCXJldCA9IG10ZF9vb2JsYXlvdXRfc2V0X2VjY2J5dGVzKG10ZCwgZWNjX2NhbGMsIGNoaXAt Pm9vYl9wb2ksDQo+ID4gKwkJCQkJIDAsIGNoaXAtPmVjYy50b3RhbCk7DQo+ID4gKwlpZiAocmV0 KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+IA0KPiBTcGFjZQ0KV2lsbCBjb3JyZWN0IGl0Lg0KDQo+ IA0KPiA+ICsJLyogQ2xlYXIgRUNDIGxhc3QgYml0ICovDQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIg PSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FERFJfVzsNCj4gPiArCWRhdGFfcGhh c2VfYWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciAmPSB+UEwzNTNf TkFORF9FQ0NfTEFTVDsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciArPSBuYW5kX29mZnNldDsNCj4g PiArCWNoaXAtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2Vf YWRkcjsNCj4gPiArDQo+ID4gKwkvKiBXcml0ZSB0aGUgc3BhcmUgYXJlYSB3aXRoIEVDQyBieXRl cyAqLw0KPiA+ICsJb29iX3B0ciA9IGNoaXAtPm9vYl9wb2k7DQo+ID4gKwlwbDM1M19uYW5kX3dy aXRlX2RhdGFfb3AobXRkLCBvb2JfcHRyLA0KPiA+ICsJCQkJIChtdGQtPm9vYnNpemUgLQ0KPiA+ ICsJCQkJIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpKTsNCj4gPiArDQo+ID4gKwlk YXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FERFJfVzsN Cj4gPiArCWRhdGFfcGhhc2VfYWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiArCWRhdGFfcGhhc2Vf YWRkciB8PSBQTDM1M19OQU5EX0NMRUFSX0NTOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIHw9ICgx IDw8IEVORF9DTURfVkFMSURfU0hJRlQpOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyICs9IG5hbmRf b2Zmc2V0Ow0KPiA+ICsJY2hpcC0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2Up ZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsJb29iX3B0ciArPSAobXRkLT5vb2JzaXplIC0gUEwzNTNf TkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gKwlwbDM1M19uYW5kX3dyaXRlX2RhdGFf b3AobXRkLCBvb2JfcHRyLA0KPiA+ICtQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsN Cj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogQXBwbHkgdGhpcyBzaG9ydCBkZWxheSBhbHdheXMg dG8gZW5zdXJlIHRoYXQgd2UgZG8gd2FpdCB0V0IgaW4gYW55DQo+ID4gKwkgKiBjYXNlIG9uIGFu eSBtYWNoaW5lLg0KPiA+ICsJICovDQo+ID4gKwluZGVsYXkoMTAwKTsNCj4gPiArCW5hbmRfd2Fp dF9yZWFkeShtdGQpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICogcGwzNTNfbmFuZF9yZWFkX3BhZ2VfaHdlY2MgLSBIYXJkd2FyZSBFQ0Mg YmFzZWQgcGFnZSByZWFkIGZ1bmN0aW9uDQo+ID4gKyAqIEBtdGQ6CQlQb2ludGVyIHRvIHRoZSBt dGQgaW5mbyBzdHJ1Y3R1cmUNCj4gPiArICogQGNoaXA6CQlQb2ludGVyIHRvIHRoZSBOQU5EIGNo aXAgaW5mbyBzdHJ1Y3R1cmUNCj4gPiArICogQGJ1ZjoJCVBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0 byBzdG9yZSByZWFkIGRhdGENCj4gPiArICogQG9vYl9yZXF1aXJlZDoJQ2FsbGVyIHJlcXVpcmVz IE9PQiBkYXRhIHJlYWQgdG8gY2hpcC0+b29iX3BvaQ0KPiA+ICsgKiBAcGFnZToJCVBhZ2UgbnVt YmVyIHRvIHJlYWQNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbnMgcmVhZHMgZGF0YSBh bmQgY2hlY2tzIHRoZSBkYXRhIGludGVncml0eSBieQ0KPiA+ICtjb21wYXJpbmcgaGFyZHdhcmUN Cj4gPiArICogZ2VuZXJhdGVkIEVDQyB2YWx1ZXMgYW5kIHJlYWQgRUNDIHZhbHVlcyBmcm9tIHNw YXJlIGFyZWEuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJMCBhbHdheXMgYW5kIHVwZGF0ZXMg RUNDIG9wZXJhdGlvbiBzdGF0dXMgaW4gdG8gTVREIHN0cnVjdHVyZQ0KPiA+ICsgKi8NCj4gPiAr c3RhdGljIGludCBwbDM1M19uYW5kX3JlYWRfcGFnZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10 ZCwNCj4gPiArCQkJCSAgICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsDQo+ID4gKwkJCQkgICAg ICB1OCAqYnVmLCBpbnQgb29iX3JlcXVpcmVkLCBpbnQgcGFnZSkgew0KPiA+ICsJaW50IGksIHN0 YXQsIGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsNCj4gPiArCWludCBlY2NieXRlcyA9IGNoaXAt PmVjYy5ieXRlczsNCj4gPiArCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsNCj4gPiAr CXU4ICpwID0gYnVmOw0KPiA+ICsJdTggKmVjY19jYWxjID0gY2hpcC0+ZWNjLmNhbGNfYnVmOw0K PiA+ICsJdTggKmVjYyA9IGNoaXAtPmVjYy5jb2RlX2J1ZjsNCj4gPiArCXVuc2lnbmVkIGludCBt YXhfYml0ZmxpcHMgPSAwOw0KPiA+ICsJdTggKm9vYl9wdHI7DQo+ID4gKwl1MzIgcmV0Ow0KPiA+ ICsJdW5zaWduZWQgbG9uZyBkYXRhX3BoYXNlX2FkZHI7DQo+ID4gKwlzdHJ1Y3QgcGwzNTNfbmFu ZF9pbmZvICp4bmFuZCA9DQo+ID4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbDM1M19u YW5kX2luZm8sIGNoaXApOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBuYW5kX29mZnNldCA9ICh1bnNp Z25lZCBsb25nIF9fZm9yY2UpeG5hbmQtPm5hbmRfYmFzZTsNCj4gPiArDQo+ID4gKwlwbDM1M19w cmVwYXJlX2NtZChtdGQsIGNoaXAsIHBhZ2UsIDAsIE5BTkRfQ01EX1JFQUQwLA0KPiA+ICsJCQkg IE5BTkRfQ01EX1JFQURTVEFSVCwgMSk7DQo+ID4gKwluZGVsYXkoMTAwKTsNCj4gPiArCXBsMzUz X2Rldl90aW1lb3V0KG10ZCwgY2hpcCk7DQo+ID4gKw0KPiA+ICsJZm9yICggOyAoZWNjc3RlcHMg LSAxKTsgZWNjc3RlcHMtLSkgew0KPiA+ICsJCXBsMzUzX25hbmRfcmVhZF9kYXRhX29wKGNoaXAs IHAsIGVjY3NpemUpOw0KPiA+ICsJCXAgKz0gZWNjc2l6ZTsNCj4gPiArCX0NCj4gPiArCXBsMzUz X25hbmRfcmVhZF9kYXRhX29wKGNoaXAsIHAsDQo+ID4gKwkJCQkoZWNjc2l6ZSAtIFBMMzUzX05B TkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpKTsNCj4gPiArCXAgKz0gKGVjY3NpemUgLSBQTDM1M19O QU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4gPiArDQo+ID4gKwkvKiBTZXQgRUNDIExhc3Qg Yml0IHRvIDEgKi8NCj4gPiArCWRhdGFfcGhhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9y Y2UpY2hpcC0+SU9fQUREUl9SOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIC09IG5hbmRfb2Zmc2V0 Ow0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIHw9IFBMMzUzX05BTkRfRUNDX0xBU1Q7DQo+ID4gKwlk YXRhX3BoYXNlX2FkZHIgKz0gbmFuZF9vZmZzZXQ7DQo+ID4gKwljaGlwLT5JT19BRERSX1IgPSAo dm9pZCBfX2lvbWVtICogX19mb3JjZSlkYXRhX3BoYXNlX2FkZHI7DQo+ID4gKwlwbDM1M19uYW5k X3JlYWRfZGF0YV9vcChjaGlwLCBwLCBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsN Cj4gPiArDQo+ID4gKwkvKiBSZWFkIHRoZSBjYWxjdWxhdGVkIEVDQyB2YWx1ZSAqLw0KPiA+ICsJ cCA9IGJ1ZjsNCj4gPiArCWNoaXAtPmVjYy5jYWxjdWxhdGUobXRkLCBwLCAmZWNjX2NhbGNbMF0p Ow0KPiA+ICsNCj4gPiArCS8qIENsZWFyIEVDQyBsYXN0IGJpdCAqLw0KPiA+ICsJZGF0YV9waGFz ZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSljaGlwLT5JT19BRERSX1I7DQo+ID4gKwlk YXRhX3BoYXNlX2FkZHIgLT0gbmFuZF9vZmZzZXQ7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgJj0g flBMMzUzX05BTkRfRUNDX0xBU1Q7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgKz0gbmFuZF9vZmZz ZXQ7DQo+ID4gKwljaGlwLT5JT19BRERSX1IgPSAodm9pZCBfX2lvbWVtICogX19mb3JjZSlkYXRh X3BoYXNlX2FkZHI7DQo+ID4gKw0KPiA+ICsJLyogUmVhZCB0aGUgc3RvcmVkIEVDQyB2YWx1ZSAq Lw0KPiA+ICsJb29iX3B0ciA9IGNoaXAtPm9vYl9wb2k7DQo+ID4gKwlwbDM1M19uYW5kX3JlYWRf ZGF0YV9vcChjaGlwLCBvb2JfcHRyLA0KPiA+ICsJCQkJKG10ZC0+b29ic2l6ZSAtDQo+ID4gKwkJ CQlQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSk7DQo+ID4gKw0KPiA+ICsJLyogZGUt YXNzZXJ0IGNoaXAgc2VsZWN0ICovDQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQg bG9uZyBfX2ZvcmNlKWNoaXAtPklPX0FERFJfUjsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciAtPSBu YW5kX29mZnNldDsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciB8PSBQTDM1M19OQU5EX0NMRUFSX0NT Ow0KPiA+ICsJZGF0YV9waGFzZV9hZGRyICs9IG5hbmRfb2Zmc2V0Ow0KPiANCj4gT2ssIG5vdyBJ IGFtIGNvbnZpbmNlZCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgd2F5LiBQbGVhc2UgZm9yZ2V0IGFi b3V0DQo+IGNoaXAtPklPX0FERFJfKi4NCk9rLiBJIHdpbGwgdXBkYXRlIGl0Lg0KPiANCj4gPiAr CWNoaXAtPklPX0FERFJfUiA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRk cjsNCj4gPiArDQo+ID4gKwlvb2JfcHRyICs9IChtdGQtPm9vYnNpemUgLSBQTDM1M19OQU5EX0xB U1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4gPiArCXBsMzUzX25hbmRfcmVhZF9kYXRhX29wKGNoaXAs IG9vYl9wdHIsDQo+ID4gK1BMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ICsN Cj4gPiArCXJldCA9IG10ZF9vb2JsYXlvdXRfZ2V0X2VjY2J5dGVzKG10ZCwgZWNjLCBjaGlwLT5v b2JfcG9pLCAwLA0KPiA+ICsJCQkJCSBjaGlwLT5lY2MudG90YWwpOw0KPiA+ICsJaWYgKHJldCkN Cj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCWVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0 ZXBzOw0KPiA+ICsJcCA9IGJ1ZjsNCj4gPiArDQo+ID4gKwkvKiBDaGVjayBFQ0MgZXJyb3IgZm9y IGFsbCBibG9ja3MgYW5kIGNvcnJlY3QgaWYgaXQgaXMgY29ycmVjdGFibGUgKi8NCj4gPiArCWZv ciAoaSA9IDAgOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2Nz aXplKSB7DQo+ID4gKwkJc3RhdCA9IGNoaXAtPmVjYy5jb3JyZWN0KG10ZCwgcCwgJmVjY1tpXSwg JmVjY19jYWxjW2ldKTsNCj4gPiArCQlpZiAoc3RhdCA8IDApIHsNCj4gPiArCQkJbXRkLT5lY2Nf c3RhdHMuZmFpbGVkKys7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJbXRkLT5lY2Nfc3RhdHMu Y29ycmVjdGVkICs9IHN0YXQ7DQo+ID4gKwkJCW1heF9iaXRmbGlwcyA9IG1heF90KHVuc2lnbmVk IGludCwgbWF4X2JpdGZsaXBzLCBzdGF0KTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJcmV0dXJuIG1heF9iaXRmbGlwczsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IHBsMzUzX25hbmRfc2VsZWN0X2NoaXAgLSBTZWxlY3QgdGhlIGZsYXNoIGRldmljZQ0KPiA+ICsg KiBAbXRkOglQb2ludGVyIHRvIHRoZSBtdGQgaW5mbyBzdHJ1Y3R1cmUNCj4gPiArICogQGNoaXA6 CVBvaW50ZXIgdG8gdGhlIE5BTkQgY2hpcCBpbmZvIHN0cnVjdHVyZQ0KPiA+ICsgKg0KPiA+ICsg KiBUaGlzIGZ1bmN0aW9uIGlzIGVtcHR5IGFzIHRoZSBOQU5EIGNvbnRyb2xsZXIgaGFuZGxlcyBj aGlwIHNlbGVjdA0KPiA+ICtsaW5lDQo+ID4gKyAqIGludGVybmFsbHkgYmFzZWQgb24gdGhlIGNo aXAgYWRkcmVzcyBwYXNzZWQgaW4gY29tbWFuZCBhbmQgZGF0YSBwaGFzZS4NCj4gPiArICovDQo+ ID4gK3N0YXRpYyB2b2lkIHBsMzUzX25hbmRfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICpt dGQsIGludCBjaGlwKSB7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIE5BTkQgZnJhbWV3b3JrIC0+ ZXhlY19vcCgpIGhvb2tzIGFuZCByZWxhdGVkIGhlbHBlcnMgKi8gc3RhdGljDQo+ID4gK3ZvaWQg cGwzNTNfbmZjX3BhcnNlX2luc3RydWN0aW9ucyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiA+ ICsJCQkJCSBjb25zdCBzdHJ1Y3QgbmFuZF9zdWJvcCAqc3Vib3AsDQo+ID4gKwkJCQkJIHN0cnVj dCBwbDM1M19uZmNfb3AgKm5mY19vcCkNCj4gPiArew0KPiA+ICsJY29uc3Qgc3RydWN0IG5hbmRf b3BfaW5zdHIgKmluc3RyID0gTlVMTDsNCj4gPiArCXVuc2lnbmVkIGludCBvcF9pZCwgb2Zmc2V0 LCBuYWRkcnM7DQo+ID4gKwlpbnQgaSwgbGVuOw0KPiA+ICsJY29uc3QgdTggKmFkZHJzOw0KPiA+ ICsNCj4gPiArCW1lbXNldChuZmNfb3AsIDAsIHNpemVvZihzdHJ1Y3QgcGwzNTNfbmZjX29wKSk7 DQo+ID4gKwlmb3IgKG9wX2lkID0gMDsgb3BfaWQgPCBzdWJvcC0+bmluc3Ryczsgb3BfaWQrKykg ew0KPiA+ICsJCW5mY19vcC0+bGVuID0gbmFuZF9zdWJvcF9nZXRfZGF0YV9sZW4oc3Vib3AsIG9w X2lkKTsNCj4gPiArCQlsZW4gPSBuYW5kX3N1Ym9wX2dldF9kYXRhX2xlbihzdWJvcCwgb3BfaWQp Ow0KPiA+ICsJCWluc3RyID0gJnN1Ym9wLT5pbnN0cnNbb3BfaWRdOw0KPiA+ICsJCWlmIChzdWJv cC0+bmluc3RycyA9PSAxKQ0KPiA+ICsJCQluZmNfb3AtPmNtbmRzWzBdID0gLTE7DQo+ID4gKwkJ c3dpdGNoIChpbnN0ci0+dHlwZSkgew0KPiA+ICsJCWNhc2UgTkFORF9PUF9DTURfSU5TVFI6DQo+ ID4gKwkJCW5mY19vcC0+dHlwZSA9IE5BTkRfT1BfQ01EX0lOU1RSOw0KPiA+ICsJCQlpZiAob3Bf aWQpDQo+ID4gKwkJCQluZmNfb3AtPmNtbmRzWzFdID0gaW5zdHItPmN0eC5jbWQub3Bjb2RlOw0K PiA+ICsJCQllbHNlDQo+ID4gKwkJCQluZmNfb3AtPmNtbmRzWzBdID0gaW5zdHItPmN0eC5jbWQu b3Bjb2RlOw0KPiA+ICsJCQluZmNfb3AtPmNsZV9hbGVfZGVsYXlfbnMgPSBpbnN0ci0+ZGVsYXlf bnM7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsNCj4gPiArCQljYXNlIE5BTkRfT1BfQUREUl9JTlNU UjoNCj4gPiArCQkJb2Zmc2V0ID0gbmFuZF9zdWJvcF9nZXRfYWRkcl9zdGFydF9vZmYoc3Vib3As IG9wX2lkKTsNCj4gPiArCQkJbmFkZHJzID0gbmFuZF9zdWJvcF9nZXRfbnVtX2FkZHJfY3ljKHN1 Ym9wLCBvcF9pZCk7DQo+ID4gKwkJCWFkZHJzID0gJmluc3RyLT5jdHguYWRkci5hZGRyc1tvZmZz ZXRdOw0KPiA+ICsJCQluZmNfb3AtPmFkZHJzID0gaW5zdHItPmN0eC5hZGRyLmFkZHJzW29mZnNl dF07DQo+ID4gKwkJCWZvciAoaSA9IDA7IGkgPCBtaW5fdCh1bnNpZ25lZCBpbnQsIDQsIG5hZGRy cyk7IGkrKykgew0KPiA+ICsJCQkJbmZjX29wLT5hZGRycyB8PSBpbnN0ci0+Y3R4LmFkZHIuYWRk cnNbaV0gPDwNCj4gPiArCQkJCQkJICg4ICogaSk7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4gKwkJ CWlmIChuYWRkcnMgPj0gNSkNCj4gPiArCQkJCW5mY19vcC0+YWRkcjUgPSBhZGRyc1s0XTsNCj4g PiArCQkJaWYgKG5hZGRycyA+PSA2KQ0KPiA+ICsJCQkJbmZjX29wLT5hZGRyNiA9IGFkZHJzWzVd Ow0KPiA+ICsJCQluZmNfb3AtPm5hZGRycyA9IG5hbmRfc3Vib3BfZ2V0X251bV9hZGRyX2N5Yyhz dWJvcCwNCj4gPiArCQkJCQkJCQkgICAgIG9wX2lkKTsNCj4gPiArCQkJbmZjX29wLT5jbGVfYWxl X2RlbGF5X25zID0gaW5zdHItPmRlbGF5X25zOw0KPiA+ICsJCQlicmVhazsNCj4gPiArDQo+ID4g KwkJY2FzZSBOQU5EX09QX0RBVEFfSU5fSU5TVFI6DQo+ID4gKwkJCW5mY19vcC0+ZGF0YV9pbnN0 ciA9IGluc3RyOw0KPiA+ICsJCQluZmNfb3AtPnR5cGUgPSBOQU5EX09QX0RBVEFfSU5fSU5TVFI7 DQo+ID4gKwkJCW5mY19vcC0+ZGF0YV9pbnN0cl9pZHggPSBvcF9pZDsNCj4gPiArCQkJbmZjX29w LT5kYXRhX2RlbGF5X25zID0gaW5zdHItPmRlbGF5X25zOw0KPiA+ICsJCQlicmVhazsNCj4gPiAr DQo+ID4gKwkJY2FzZSBOQU5EX09QX0RBVEFfT1VUX0lOU1RSOg0KPiA+ICsJCQluZmNfb3AtPmRh dGFfaW5zdHIgPSBpbnN0cjsNCj4gPiArCQkJbmZjX29wLT50eXBlID0gTkFORF9PUF9EQVRBX0lO X0lOU1RSOw0KPiA+ICsJCQluZmNfb3AtPmRhdGFfaW5zdHJfaWR4ID0gb3BfaWQ7DQo+ID4gKwkJ CW5mY19vcC0+ZGF0YV9kZWxheV9ucyA9IGluc3RyLT5kZWxheV9uczsNCj4gPiArCQkJYnJlYWs7 DQo+ID4gKw0KPiA+ICsJCWNhc2UgTkFORF9PUF9XQUlUUkRZX0lOU1RSOg0KPiA+ICsJCQluZmNf b3AtPnJkeV90aW1lb3V0X21zID0gaW5zdHItPmN0eC53YWl0cmR5LnRpbWVvdXRfbXM7DQo+ID4g KwkJCW5mY19vcC0+cmR5X2RlbGF5X25zID0gaW5zdHItPmRlbGF5X25zOw0KPiA+ICsJCQluZmNf b3AtPndhaXQgPSB0cnVlOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGNvbmRfZGVsYXkodW5zaWduZWQgaW50IG5zKSB7 DQo+ID4gKwlpZiAoIW5zKQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwlpZiAobnMgPCAx MDAwMCkNCj4gPiArCQluZGVsYXkobnMpOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXVkZWxheShESVZf Uk9VTkRfVVAobnMsIDEwMDApKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHBs MzUzX25hbmRfY21kX2Z1bmN0aW9uIC0gU2VuZCBjb21tYW5kIHRvIE5BTkQgZGV2aWNlDQo+ID4g KyAqIEBjaGlwOglQb2ludGVyIHRvIHRoZSBOQU5EIGNoaXAgaW5mbyBzdHJ1Y3R1cmUNCj4gPiAr ICogQHN1Ym9wOglQb2ludGVyIHRvIGFycmF5IG9mIGluc3RydWN0aW9ucw0KPiA+ICsgKiBSZXR1 cm46CUFsd2F5cyByZXR1cm4gemVybw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBwbDM1M19u YW5kX2NtZF9mdW5jdGlvbihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiA+ICsJCQkJICAgY29u c3Qgc3RydWN0IG5hbmRfc3Vib3AgKnN1Ym9wKSB7DQo+ID4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10 ZCA9IG5hbmRfdG9fbXRkKGNoaXApOw0KPiA+ICsJY29uc3Qgc3RydWN0IG5hbmRfb3BfaW5zdHIg Kmluc3RyOw0KPiA+ICsJc3RydWN0IHBsMzUzX25mY19vcCBuZmNfb3AgPSB7fTsNCj4gPiArCXN0 cnVjdCBwbDM1M19uYW5kX2luZm8gKnhuYW5kID0NCj4gPiArCQljb250YWluZXJfb2YoY2hpcCwg c3RydWN0IHBsMzUzX25hbmRfaW5mbywgY2hpcCk7DQo+ID4gKwl2b2lkIF9faW9tZW0gKmNtZF9h ZGRyOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBjbWRfZGF0YSA9IDAsIGVuZF9jbWRfdmFsaWQgPSAw Ow0KPiA+ICsJdW5zaWduZWQgbG9uZyBjbWRfcGhhc2VfYWRkciwgZGF0YV9waGFzZV9hZGRyLCBl bmRfY21kOw0KPiA+ICsJdW5zaWduZWQgaW50IG9wX2lkLCBsZW4sIG9mZnNldDsNCj4gPiArCWJv b2wgcmVhZGluZzsNCj4gPiArDQo+ID4gKwlwbDM1M19uZmNfcGFyc2VfaW5zdHJ1Y3Rpb25zKGNo aXAsIHN1Ym9wLCAmbmZjX29wKTsNCj4gPiArCWluc3RyID0gbmZjX29wLmRhdGFfaW5zdHI7DQo+ ID4gKwlvcF9pZCA9IG5mY19vcC5kYXRhX2luc3RyX2lkeDsNCj4gPiArCWxlbiA9IG5hbmRfc3Vi b3BfZ2V0X2RhdGFfbGVuKHN1Ym9wLCBvcF9pZCk7DQo+ID4gKwlvZmZzZXQgPSBuYW5kX3N1Ym9w X2dldF9kYXRhX3N0YXJ0X29mZihzdWJvcCwgb3BfaWQpOw0KPiA+ICsNCj4gPiArCWlmIChuZmNf b3AuY21uZHNbMF0gIT0gLTEpIHsNCj4gPiArCQlwbDM1M19zbWNfY2xyX25hbmRfaW50KCk7DQo+ ID4gKwkJLyogR2V0IHRoZSBjb21tYW5kIHBoYXNlIGFkZHJlc3MgKi8NCj4gPiArCQlpZiAobmZj X29wLmNtbmRzWzFdICE9IDApIHsNCj4gPiArCQkJaWYgKG5mY19vcC5jbW5kc1swXSA9PSBOQU5E X0NNRF9TRVFJTikNCj4gPiArCQkJCWVuZF9jbWRfdmFsaWQgPSAwOw0KPiA+ICsJCQllbHNlDQo+ ID4gKwkJCQllbmRfY21kX3ZhbGlkID0gMTsNCj4gPiArCQkJZW5kX2NtZCA9IG5mY19vcC5jbW5k c1sxXTsNCj4gPiArCQl9ICBlbHNlIHsNCj4gPiArCQkJZW5kX2NtZCA9IDB4MDsNCj4gPiArCQl9 DQo+ID4gKwkJY21kX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuYW5kLT5u YW5kX2Jhc2UgKw0KPiA+ICsJCQkJICgobmZjX29wLm5hZGRycyA8PCBBRERSX0NZQ0xFU19TSElG VCkgfA0KPiA+ICsJCQkJIChlbmRfY21kX3ZhbGlkIDw8IEVORF9DTURfVkFMSURfU0hJRlQpIHwN Cj4gPiArCQkJCSAoQ09NTUFORF9QSEFTRSkgfA0KPiA+ICsJCQkJIChlbmRfY21kIDw8IEVORF9D TURfU0hJRlQpIHwNCj4gPiArCQkJCSAobmZjX29wLmNtbmRzWzBdIDw8IFNUQVJUX0NNRF9TSElG VCkpOw0KPiA+ICsNCj4gPiArCQljbWRfYWRkciA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWNt ZF9waGFzZV9hZGRyOw0KPiA+ICsJCS8qIEdldCB0aGUgZGF0YSBwaGFzZSBhZGRyZXNzICovDQo+ ID4gKwkJZW5kX2NtZF92YWxpZCA9IDA7DQo+ID4gKw0KPiA+ICsJCWRhdGFfcGhhc2VfYWRkciA9 ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5hbmQtPm5hbmRfYmFzZSArDQo+ID4gKwkJCQkgICgo MHgwIDw8IENMRUFSX0NTX1NISUZUKSB8DQo+ID4gKwkJCQkgIChlbmRfY21kX3ZhbGlkIDw8IEVO RF9DTURfVkFMSURfU0hJRlQpIHwNCj4gPiArCQkJCSAgKERBVEFfUEhBU0UpIHwNCj4gPiArCQkJ CSAgKGVuZF9jbWQgPDwgRU5EX0NNRF9TSElGVCkgfA0KPiA+ICsJCQkJICAoMHgwIDw8IEVDQ19M QVNUX1NISUZUKSk7DQo+ID4gKwkJY2hpcC0+SU9fQUREUl9SID0gKHZvaWQgX19pb21lbSAqIF9f Zm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsJCWNoaXAtPklPX0FERFJfVyA9IGNoaXAtPklP X0FERFJfUjsNCj4gPiArCQkvKiBDb21tYW5kIHBoYXNlIEFYSSBSZWFkICYgV3JpdGUgKi8NCj4g PiArCQlpZiAobmZjX29wLm5hZGRycyA+PSA1KSB7DQo+ID4gKwkJCWlmIChtdGQtPndyaXRlc2l6 ZSA+IFBMMzUzX05BTkRfRUNDX1NJWkUpIHsNCj4gPiArCQkJCWNtZF9kYXRhID0gbmZjX29wLmFk ZHJzOw0KPiA+ICsJCQkJLyogQW5vdGhlciBhZGRyZXNzIGN5Y2xlIGZvciBkZXZpY2VzID4gMTI4 TWlCICovDQo+ID4gKwkJCQlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfUk9XX0FERFJfMykgew0K PiA+ICsJCQkJCXdyaXRlbF9yZWxheGVkKGNtZF9kYXRhLCBjbWRfYWRkcik7DQo+ID4gKwkJCQkJ Y21kX2RhdGEgPSBuZmNfb3AuYWRkcjU7DQo+ID4gKwkJCQkJaWYgKG5mY19vcC5uYWRkcnMgPj0g NikNCj4gPiArCQkJCQkJY21kX2RhdGEgfD0gKG5mY19vcC5hZGRyNiA8PCA4KTsNCj4gPiArCQkJ CX0NCj4gPiArCQkJfQ0KPiA+ICsJCX0gIGVsc2Ugew0KPiA+ICsJCQlpZiAobmZjX29wLmFkZHJz ICE9IC0xKSB7DQo+ID4gKwkJCQlpbnQgY29sdW1uID0gbmZjX29wLmFkZHJzOw0KPiA+ICsJCQkJ LyoNCj4gPiArCQkJCSAqIENoYW5nZSByZWFkL3dyaXRlIGNvbHVtbiwgcmVhZCBpZCBldGMNCj4g PiArCQkJCSAqIEFkanVzdCBjb2x1bW5zIGZvciAxNiBiaXQgYnVzIHdpZHRoDQo+ID4gKwkJCQkg Ki8NCj4gPiArCQkJCWlmICgoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpICYmDQo+ ID4gKwkJCQkgICAgKG5mY19vcC5jbW5kc1swXSA9PSBOQU5EX0NNRF9SRUFEMCB8fA0KPiA+ICsJ CQkJCW5mY19vcC5jbW5kc1swXSA9PSBOQU5EX0NNRF9TRVFJTiB8fA0KPiA+ICsJCQkJCW5mY19v cC5jbW5kc1swXSA9PSBOQU5EX0NNRF9STkRPVVQgfHwNCj4gPiArCQkJCQluZmNfb3AuY21uZHNb MF0gPT0gTkFORF9DTURfUk5ESU4pKSB7DQo+ID4gKwkJCQkJY29sdW1uID4+PSAxOw0KPiA+ICsJ CQkJfQ0KPiA+ICsJCQkJY21kX2RhdGEgPSBjb2x1bW47DQo+ID4gKwkJCX0NCj4gPiArCQl9DQo+ ID4gKwkJd3JpdGVsX3JlbGF4ZWQoY21kX2RhdGEsIGNtZF9hZGRyKTsNCj4gPiArCW5kZWxheSgx MDApOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWNvbmRfZGVsYXkobmZjX29wLmNsZV9hbGVfZGVs YXlfbnMpOw0KPiA+ICsJaWYgKCFuZmNfb3AuZGF0YV9pbnN0cikNCj4gPiArCQlyZXR1cm4gMDsN Cj4gPiArDQo+ID4gKwlyZWFkaW5nID0gKG5mY19vcC5kYXRhX2luc3RyLT50eXBlID09IE5BTkRf T1BfREFUQV9JTl9JTlNUUik7DQo+ID4gKwl1ZGVsYXkoMTAwMCk7DQo+IA0KPiBXaGF0IGlzIHRo aXMgZGVsYXkgPw0KSSB0cmllZCByZW1vdmluZyB0aGlzLCBCdXQgd2l0aCBvdXQgdGhpcyBkZWxh eSB0aGUgZHJpdmVyIGlzIHRocm93aW5nIHRpbWVvdXRzLg0KPiANCj4gPiArDQo+ID4gKwlpZiAo IXJlYWRpbmcpIHsNCj4gPiArCQljb25kX2RlbGF5KG5mY19vcC5yZHlfZGVsYXlfbnMpOw0KPiA+ ICsNCj4gPiArCQlpZiAobmZjX29wLmNtbmRzWzBdID09IE5BTkRfQ01EX1NFUUlOICYmDQo+ID4g KwkJICAgIG5mY19vcC5jbW5kc1sxXSA9PSBOQU5EX0NNRF9QQUdFUFJPRykgew0KPiA+ICsJCQlw bDM1M19uYW5kX3dyaXRlX3BhZ2VfcmF3KG10ZCwgY2hpcCwNCj4gPiArCQkJCQkJICBpbnN0ci0+ Y3R4LmRhdGEuYnVmLm91dCwgMCwNCj4gPiArCQkJCQkJICBuZmNfb3AuYWRkcnMpOw0KPiA+ICsJ CX0gZWxzZSB7DQo+ID4gKwkJCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChtdGQsIGluc3RyLT5j dHguZGF0YS5idWYub3V0LA0KPiA+ICsJCQkJCQkgbGVuKTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJZWxzZSBpZiAocmVhZGluZykgew0KPiA+ICsJCWNvbmRfZGVsYXkobmZjX29w LnJkeV9kZWxheV9ucyk7DQo+ID4gKwkJcGwzNTNfbmFuZF9yZWFkX2RhdGFfb3AoY2hpcCwgaW5z dHItPmN0eC5kYXRhLmJ1Zi5pbiwgbGVuKTsNCj4gPiArCX0NCj4gPiArCWNvbmRfZGVsYXkobmZj X29wLmRhdGFfZGVsYXlfbnMpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG5hbmRfb3BfcGFyc2VyIHBsMzUzX25mY19vcF9w YXJzZXIgPSBOQU5EX09QX1BBUlNFUg0KPiA+ICsJKE5BTkRfT1BfUEFSU0VSX1BBVFRFUk4NCj4g PiArCQkocGwzNTNfbmFuZF9jbWRfZnVuY3Rpb24sDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFU X0NNRF9FTEVNKHRydWUpLA0KPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9BRERSX0VMRU0odHJ1 ZSwgNyksDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0RBVEFfSU5fRUxFTShmYWxzZSwgMjA0 OCkpLA0KPiA+ICsJTkFORF9PUF9QQVJTRVJfUEFUVEVSTg0KPiA+ICsJCShwbDM1M19uYW5kX2Nt ZF9mdW5jdGlvbiwNCj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQ01EX0VMRU0oZmFsc2UpLA0K PiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9BRERSX0VMRU0oZmFsc2UsIDcpLA0KPiA+ICsJCU5B TkRfT1BfUEFSU0VSX1BBVF9DTURfRUxFTShmYWxzZSksDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJf UEFUX1dBSVRSRFlfRUxFTShmYWxzZSksDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0RBVEFf SU5fRUxFTShmYWxzZSwgMjA0OCkpLA0KPiA+ICsJTkFORF9PUF9QQVJTRVJfUEFUVEVSTg0KPiA+ ICsJCShwbDM1M19uYW5kX2NtZF9mdW5jdGlvbiwNCj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRf Q01EX0VMRU0oZmFsc2UpLA0KPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9BRERSX0VMRU0odHJ1 ZSwgNyksDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0NNRF9FTEVNKHRydWUpLA0KPiA+ICsJ CU5BTkRfT1BfUEFSU0VSX1BBVF9XQUlUUkRZX0VMRU0oZmFsc2UpKSwNCj4gPiArCU5BTkRfT1Bf UEFSU0VSX1BBVFRFUk4NCj4gPiArCQkocGwzNTNfbmFuZF9jbWRfZnVuY3Rpb24sDQo+ID4gKwkJ TkFORF9PUF9QQVJTRVJfUEFUX0NNRF9FTEVNKGZhbHNlKSwNCj4gPiArCQlOQU5EX09QX1BBUlNF Ul9QQVRfQUREUl9FTEVNKGZhbHNlLCA4KSwNCj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfREFU QV9PVVRfRUxFTShmYWxzZSwgMjA0OCksDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0NNRF9F TEVNKHRydWUpLA0KPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9XQUlUUkRZX0VMRU0odHJ1ZSkp LA0KPiA+ICsJTkFORF9PUF9QQVJTRVJfUEFUVEVSTg0KPiA+ICsJCShwbDM1M19uYW5kX2NtZF9m dW5jdGlvbiwNCj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQ01EX0VMRU0oZmFsc2UpKSwNCj4g PiArCSk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX25mY19leGVjX29wKHN0cnVjdCBu YW5kX2NoaXAgKmNoaXAsDQo+ID4gKwkJCSAgICAgY29uc3Qgc3RydWN0IG5hbmRfb3BlcmF0aW9u ICpvcCwNCj4gPiArCQkJICAgICBib29sIGNoZWNrX29ubHkpDQo+ID4gK3sNCj4gPiArCXJldHVy biBuYW5kX29wX3BhcnNlcl9leGVjX29wKGNoaXAsICZwbDM1M19uZmNfb3BfcGFyc2VyLA0KPiA+ ICsJCQkJCSAgICAgIG9wLCBjaGVja19vbmx5KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAqIHBsMzUzX25hbmRfZGV2aWNlX3JlYWR5IC0gQ2hlY2sgZGV2aWNlIHJlYWR5L2J1c3kg bGluZQ0KPiA+ICsgKiBAbXRkOglQb2ludGVyIHRvIHRoZSBtdGRfaW5mbyBzdHJ1Y3R1cmUNCj4g PiArICoNCj4gPiArICogUmV0dXJuOgkwIG9uIGJ1c3kgb3IgMSBvbiByZWFkeSBzdGF0ZQ0KPiA+ ICsgKi8NCj4gPiArc3RhdGljIGludCBwbDM1M19uYW5kX2RldmljZV9yZWFkeShzdHJ1Y3QgbXRk X2luZm8gKm10ZCkgew0KPiA+ICsJaWYgKHBsMzUzX3NtY19nZXRfbmFuZF9pbnRfc3RhdHVzX3Jh dygpKSB7DQo+ID4gKwkJcGwzNTNfc21jX2Nscl9uYW5kX2ludCgpOw0KPiANCj4gQSBjbGVhciBp cyByZWFsbHkgbmVlZGVkIGhlcmU/DQpZZXMsIGNmZ19jbHIgcmVnaXN0ZXIgaXMgd3JpdGUgb25s eSwgc28gd2hlbiBldmVyIGFuIGludGVycnVwdCBoaXRzLCB0aGVuIGl0IG5lZWRzIHRvIGJlIGNs ZWFyZWQuDQo+IA0KPiA+ICsJCXJldHVybiAxOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogcGwzNTNfbmFuZF9lY2NfaW5p dCAtIEluaXRpYWxpemUgdGhlIGVjYyBpbmZvcm1hdGlvbiBhcyBwZXIgdGhlIGVjYyBtb2RlDQo+ ID4gKyAqIEBtdGQ6CVBvaW50ZXIgdG8gdGhlIG10ZF9pbmZvIHN0cnVjdHVyZQ0KPiA+ICsgKiBA ZWNjOglQb2ludGVyIHRvIEVDQyBjb250cm9sIHN0cnVjdHVyZQ0KPiA+ICsgKiBAZWNjX21vZGU6 CW9uZGllIGVjYyBzdGF0dXMNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBpbml0aWFs aXplcyB0aGUgZWNjIGJsb2NrIGFuZCBmdW5jdGlvbmFsIHBvaW50ZXJzIGFzDQo+ID4gK3BlciB0 aGUNCj4gPiArICogZWNjIG1vZGUNCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIHBsMzUzX25h bmRfZWNjX2luaXQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2VjY19jdHJsICpl Y2MsDQo+ID4gKwkJCQlpbnQgZWNjX21vZGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBuYW5kX2No aXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOw0KPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfaW5m byAqeG5hbmQgPQ0KPiA+ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNfbmFuZF9p bmZvLCBjaGlwKTsNCj4gPiArDQo+ID4gKw0KPiA+ICsJaWYgKGVjY19tb2RlID09IE5BTkRfRUND X09OX0RJRSkgew0KPiA+ICsJCXBsMzUzX3NtY19zZXRfZWNjX21vZGUoUEwzNTNfU01DX0VDQ01P REVfQllQQVNTKTsNCj4gPiArCQkvKg0KPiA+ICsJCSAqIE9uLURpZSBFQ0Mgc3BhcmUgYnl0ZXMg b2Zmc2V0IDggaXMgdXNlZCBmb3IgRUNDIGNvZGVzDQo+ID4gKwkJICogVXNlIHRoZSBCQlQgcGF0 dGVybiBkZXNjcmlwdG9ycw0KPiA+ICsJCSAqLw0KPiA+ICsJCWNoaXAtPmJidF90ZCA9ICZiYnRf bWFpbl9kZXNjcjsNCj4gPiArCQljaGlwLT5iYnRfbWQgPSAmYmJ0X21pcnJvcl9kZXNjcjsNCj4g PiArCQliaXRtYXBfc2V0KGNoaXAtPnBhcmFtZXRlcnMuZ2V0X2ZlYXR1cmVfbGlzdCwNCj4gPiAr CQkJICAgT05GSV9GRUFUVVJFX09OX0RJRV9FQ0MsDQo+IE9ORklfRkVBVFVSRV9PTl9ESUVfRUND X0VOKTsNCj4gPiArCQliaXRtYXBfc2V0KGNoaXAtPnBhcmFtZXRlcnMuc2V0X2ZlYXR1cmVfbGlz dCwNCj4gPiArCQkJICAgT05GSV9GRUFUVVJFX09OX0RJRV9FQ0MsDQo+IE9ORklfRkVBVFVSRV9P Tl9ESUVfRUNDX0VOKTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZWNjLT5yZWFkX29vYiA9IHBs MzUzX25hbmRfcmVhZF9vb2I7DQo+ID4gKwkJZWNjLT53cml0ZV9vb2IgPSBwbDM1M19uYW5kX3dy aXRlX29vYjsNCj4gPiArDQo+ID4gKwkJZWNjLT5tb2RlID0gTkFORF9FQ0NfSFc7DQo+ID4gKwkJ LyogSGFyZHdhcmUgRUNDIGdlbmVyYXRlcyAzIGJ5dGVzIEVDQyBjb2RlIGZvciBlYWNoIDUxMiBi eXRlcyAqLw0KPiA+ICsJCWVjYy0+Ynl0ZXMgPSAzOw0KPiA+ICsJCWVjYy0+c3RyZW5ndGggPSAx Ow0KPiA+ICsJCWVjYy0+Y2FsY3VsYXRlID0gcGwzNTNfbmFuZF9jYWxjdWxhdGVfaHdlY2M7DQo+ IA0KPiBJJ20gbm90IHN1cmUgeW91IG5lZWQgdGhpcyBjYWxjdWxhdGUoKS4uLg0KVGhlIEVDQyBj YWxjdWxhdGlvbiBpcyBzcGVjaWZpYyB0byB0aGlzIGNvbnRyb2xsZXIsIGhlbmNlIGEgc2VwYXJh dGUgaHdlY2MgY2FsY3VsYXRpb24gaXMgbmVlZGVkLg0KPiANCj4gPiArCQllY2MtPmNvcnJlY3Qg PSBwbDM1M19uYW5kX2NvcnJlY3RfZGF0YTsNCj4gPiArCQllY2MtPmh3Y3RsID0gTlVMTDsNCj4g DQo+IFlvdSBjYW4gZHJvcCB0aGUgbGluZS4NCk9rLCBJIHdpbGwgdXBkYXRlIGluIG5leHQgdmVy c2lvbi4NCj4gDQo+ID4gKwkJZWNjLT5yZWFkX3BhZ2UgPSBwbDM1M19uYW5kX3JlYWRfcGFnZV9o d2VjYzsNCj4gPiArCQllY2MtPnNpemUgPSBQTDM1M19OQU5EX0VDQ19TSVpFOw0KPiA+ICsJCWVj Yy0+d3JpdGVfcGFnZSA9IHBsMzUzX25hbmRfd3JpdGVfcGFnZV9od2VjYzsNCj4gPiArCQlwbDM1 M19zbWNfc2V0X2VjY19wZ19zaXplKG10ZC0+d3JpdGVzaXplKTsNCj4gPiArCQlzd2l0Y2ggKG10 ZC0+d3JpdGVzaXplKSB7DQo+ID4gKwkJY2FzZSBTWl81MTI6DQo+ID4gKwkJY2FzZSBTWl8xSzoN Cj4gPiArCQljYXNlIFNaXzJLOg0KPiA+ICsJCQlwbDM1M19zbWNfc2V0X2VjY19tb2RlKFBMMzUz X1NNQ19FQ0NNT0RFX0FQQik7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWRlZmF1bHQ6DQo+ID4g KwkJCS8qDQo+ID4gKwkJCSAqIFRoZSBzb2Z0d2FyZSBFQ0Mgcm91dGluZXMgd29uJ3Qgd29yayB3 aXRoIHRoZQ0KPiA+ICsJCQkgKiBTTUMgY29udHJvbGxlcg0KPiA+ICsJCQkgKi8NCj4gPiArCQkJ ZWNjLT5jYWxjdWxhdGUgPSBuYW5kX2NhbGN1bGF0ZV9lY2M7DQo+ID4gKwkJCWVjYy0+Y29ycmVj dCA9IG5hbmRfY29ycmVjdF9kYXRhOw0KPiA+ICsJCQllY2MtPnNpemUgPSAyNTY7DQo+ID4gKwkJ CWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCQlpZiAobXRkLT53cml0ZXNpemUgPD0gU1pfNTEyKQ0K PiA+ICsJCQl4bmFuZC0+YWRkcl9jeWNsZXMgPSAxOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJeG5h bmQtPmFkZHJfY3ljbGVzID0gMjsNCj4gPiArDQo+ID4gKwkJaWYgKGNoaXAtPm9wdGlvbnMgJiBO QU5EX1JPV19BRERSXzMpDQo+ID4gKwkJCXhuYW5kLT5hZGRyX2N5Y2xlcyArPSAzOw0KPiA+ICsJ CWVsc2UNCj4gPiArCQkJeG5hbmQtPmFkZHJfY3ljbGVzICs9IDI7DQo+ID4gKw0KPiA+ICsJCWlm IChtdGQtPm9vYnNpemUgPT0gMTYpDQo+ID4gKwkJCW10ZF9zZXRfb29ibGF5b3V0KG10ZCwgJnBs MzUzX2VjY19vb2JsYXlvdXQxNl9vcHMpOw0KPiA+ICsJCWVsc2UgaWYgKG10ZC0+b29ic2l6ZSA9 PSA2NCkNCj4gPiArCQkJbXRkX3NldF9vb2JsYXlvdXQobXRkLCAmcGwzNTNfZWNjX29vYmxheW91 dDY0X29wcyk7DQo+IA0KPiBlbHNlPw0KWW91IG1lYW4gdG8gc2F5LCBhZGQgYW4gZXJyb3IgY29u ZGl0aW9uPw0KPiANCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHBs MzUzX25hbmRfcHJvYmUgLSBQcm9iZSBtZXRob2QgZm9yIHRoZSBOQU5EIGRyaXZlcg0KPiA+ICsg KiBAcGRldjoJUG9pbnRlciB0byB0aGUgcGxhdGZvcm1fZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsg Kg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBkcml2ZXIgZGF0YSBzdHJ1 Y3R1cmVzIGFuZCB0aGUgaGFyZHdhcmUuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJMCBvbiBz dWNjZXNzIG9yIGVycm9yIHZhbHVlIG9uIGZhaWx1cmUNCj4gPiArICovDQo+ID4gK3N0YXRpYyBp bnQgcGwzNTNfbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KSB7DQo+ID4g KwlzdHJ1Y3QgcGwzNTNfbmFuZF9pbmZvICp4bmFuZDsNCj4gDQo+IHhuYW5kIGlzIGEgc3RyYW5n ZSBuYW1lLCBtb3JlIGFuZCBtb3JlIGJlY2F1c2UgaXRzIGEgYm91dCBOQU5EIGNvbnRyb2xsZXIg ZGF0YSwgbm90IE5BTkQNCj4gY2hpcC4NCldlIGFkZGVkIHRoaXMgbmFtZSB0byByZXByZXNlbnQg WGlsaW54IE5hbmQoeG5hbmQpLCANCj4gDQo+ID4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsNCj4g PiArCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcDsNCj4gDQo+IFRoaXMgb25lIHlvdSBjYW4g Y2FsbCBpdCBqdXN0ICJuYW5kIiBvciAiY2hpcCIuDQpPaywgSSB3aWxsIHVwZGF0ZS4NCg0KPiAN Cj4gPiArCXN0cnVjdCByZXNvdXJjZSAqcmVzOw0KPiA+ICsNCj4gPiArCXhuYW5kID0gZGV2bV9r emFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqeG5hbmQpLCBHRlBfS0VSTkVMKTsNCj4gPiArCWlm ICgheG5hbmQpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJLyogTWFwIHBo eXNpY2FsIGFkZHJlc3Mgb2YgTkFORCBmbGFzaCAqLw0KPiA+ICsJcmVzID0gcGxhdGZvcm1fZ2V0 X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsNCj4gPiArCXhuYW5kLT5uYW5kX2Jh c2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsNCj4gPiArCWlmIChJ U19FUlIoeG5hbmQtPm5hbmRfYmFzZSkpDQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIoeG5hbmQtPm5h bmRfYmFzZSk7DQo+ID4gKw0KPiA+ICsJbmFuZF9jaGlwID0gJnhuYW5kLT5jaGlwOw0KPiA+ICsJ bXRkID0gbmFuZF90b19tdGQobmFuZF9jaGlwKTsNCj4gPiArCW5hbmRfY2hpcC0+ZXhlY19vcCA9 IHBsMzUzX25mY19leGVjX29wOw0KPiA+ICsJbmFuZF9zZXRfY29udHJvbGxlcl9kYXRhKG5hbmRf Y2hpcCwgeG5hbmQpOw0KPiA+ICsJbXRkLT5wcml2ID0gbmFuZF9jaGlwOw0KPiA+ICsJbXRkLT5v d25lciA9IFRISVNfTU9EVUxFOw0KPiA+ICsJbXRkLT5uYW1lID0gUEwzNTNfTkFORF9EUklWRVJf TkFNRTsNCj4gDQo+IEEgbGFiZWwgcHJvcGVydHkgaW4gdGhlIERUIG1pZ2h0IG92ZXJ3cml0ZSB0 aGlzIHZhbHVlLg0KQ291bGQgeW91IHBsZWFzZSBleHBsYWluIGEgYml0IG1vcmUgPw0KDQo+IA0K PiA+ICsJbmFuZF9zZXRfZmxhc2hfbm9kZShuYW5kX2NoaXAsIHBkZXYtPmRldi5vZl9ub2RlKTsN Cj4gPiArDQo+ID4gKwkvKiBTZXQgYWRkcmVzcyBvZiBOQU5EIElPIGxpbmVzICovDQo+ID4gKwlu YW5kX2NoaXAtPklPX0FERFJfUiA9IHhuYW5kLT5uYW5kX2Jhc2U7DQo+ID4gKwluYW5kX2NoaXAt PklPX0FERFJfVyA9IHhuYW5kLT5uYW5kX2Jhc2U7DQo+ID4gKwkvKiBTZXQgdGhlIGRyaXZlciBl bnRyeSBwb2ludHMgZm9yIE1URCAqLw0KPiA+ICsJbmFuZF9jaGlwLT5kZXZfcmVhZHkgPSBwbDM1 M19uYW5kX2RldmljZV9yZWFkeTsNCj4gPiArCW5hbmRfY2hpcC0+c2VsZWN0X2NoaXAgPSBwbDM1 M19uYW5kX3NlbGVjdF9jaGlwOw0KPiA+ICsJLyogSWYgd2UgZG9uJ3Qgc2V0IHRoaXMgZGVsYXkg ZHJpdmVyIHNldHMgMjB1cyBieSBkZWZhdWx0ICovDQo+ID4gKwluYW5kX2NoaXAtPmNoaXBfZGVs YXkgPSAzMDsNCj4gDQo+IEFuZCB3aHkgMzAgaXMgYmV0dGVyPw0KTGV0IG1lIGdldCBiYWNrIHRv IHlvdSBvbiB0aGlzLg0KPiANCj4gSSBzdXBwb3NlIHlvdSBtZWFuIHRoZSBjb3JlLCBub3QgdGhl IGRyaXZlci4gVGhlIGRyaXZlciBpcyB0aGlzIGZpbGUuDQpZZXMsIEkgd2lsbCB1cGRhdGUNCj4g DQo+ID4gKw0KPiA+ICsJLyogU2V0IHRoZSBkZXZpY2Ugb3B0aW9uIGFuZCBmbGFzaCB3aWR0aCAq Lw0KPiA+ICsJbmFuZF9jaGlwLT5vcHRpb25zID0gTkFORF9CVVNXSURUSF9BVVRPOw0KPiA+ICsJ bmFuZF9jaGlwLT5iYnRfb3B0aW9ucyA9IE5BTkRfQkJUX1VTRV9GTEFTSDsNCj4gPiArCXBsYXRm b3JtX3NldF9kcnZkYXRhKHBkZXYsIHhuYW5kKTsNCj4gPiArDQo+ID4gKwkvKiBmaXJzdCBzY2Fu IHRvIGZpbmQgdGhlIGRldmljZSBhbmQgZ2V0IHRoZSBwYWdlIHNpemUgKi8NCj4gPiArCWlmIChu YW5kX3NjYW5faWRlbnQobXRkLCAxLCBOVUxMKSkgew0KPiA+ICsJCWRldl9lcnIoJnBkZXYtPmRl diwgIm5hbmRfc2Nhbl9pZGVudCBmb3IgTkFORCBmYWlsZWRcbiIpOw0KPiA+ICsJCXJldHVybiAt RU5YSU87DQo+ID4gKwl9DQo+ID4gKwlwbDM1M19uYW5kX2VjY19pbml0KG10ZCwgJm5hbmRfY2hp cC0+ZWNjLCBuYW5kX2NoaXAtPmVjYy5tb2RlKTsNCj4gPiArCWlmIChuYW5kX2NoaXAtPm9wdGlv bnMgJiBOQU5EX0JVU1dJRFRIXzE2KQ0KPiA+ICsJCXBsMzUzX3NtY19zZXRfYnVzd2lkdGgoUEwz NTNfU01DX01FTV9XSURUSF8xNik7DQo+ID4gKwkvKiBzZWNvbmQgcGhhc2Ugc2NhbiAqLw0KPiA+ ICsJaWYgKG5hbmRfc2Nhbl90YWlsKG10ZCkpIHsNCj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYs ICJuYW5kX3NjYW5fdGFpbCBmb3IgTkFORCBmYWlsZWRcbiIpOw0KPiA+ICsJCXJldHVybiAtRU5Y SU87DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbXRkX2RldmljZV9yZWdpc3RlcihtdGQsIE5VTEws IDApOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICogcGwzNTNfbmFuZF9yZW1vdmUgLSBSZW1vdmUgbWV0aG9kIGZvciB0aGUgTkFORCBkcml2 ZXINCj4gPiArICogQHBkZXY6CVBvaW50ZXIgdG8gdGhlIHBsYXRmb3JtX2RldmljZSBzdHJ1Y3R1 cmUNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaWYgdGhlIGRyaXZl ciBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQuIEl0DQo+ID4gK2ZyZWVzIGFsbA0KPiA+ICsgKiBy ZXNvdXJjZXMgYWxsb2NhdGVkIHRvIHRoZSBkZXZpY2UuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVy bjoJMCBvbiBzdWNjZXNzIG9yIGVycm9yIHZhbHVlIG9uIGZhaWx1cmUNCj4gPiArICovDQo+ID4g K3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikgew0KPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfaW5mbyAqeG5hbmQgPSBwbGF0Zm9ybV9nZXRf ZHJ2ZGF0YShwZGV2KTsNCj4gPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQo JnhuYW5kLT5jaGlwKTsNCj4gPiArDQo+ID4gKwkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdp c3RlciBkZXZpY2UgKi8NCj4gPiArCW5hbmRfcmVsZWFzZShtdGQpOw0KPiA+ICsNCj4gPiArCXJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBNYXRjaCB0YWJsZSBmb3IgZGV2aWNlIHRy ZWUgYmluZGluZyAqLyBzdGF0aWMgY29uc3Qgc3RydWN0DQo+ID4gK29mX2RldmljZV9pZCBwbDM1 M19uYW5kX29mX21hdGNoW10gPSB7DQo+ID4gKwl7IC5jb21wYXRpYmxlID0gImFybSxwbDM1My1u YW5kLXIycDEiIH0sDQo+ID4gKwl7fSwNCj4gPiArfTsNCj4gPiArTU9EVUxFX0RFVklDRV9UQUJM RShvZiwgcGwzNTNfbmFuZF9vZl9tYXRjaCk7DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBwbDM1 M19uYW5kX2RyaXZlciAtIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIE5BTkQgc3Vic3lzdGVt DQo+ID4gK3BsYXRmb3JtIGRyaXZlciAgKi8gc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg cGwzNTNfbmFuZF9kcml2ZXIgPQ0KPiA+ICt7DQo+ID4gKwkucHJvYmUJCT0gcGwzNTNfbmFuZF9w cm9iZSwNCj4gPiArCS5yZW1vdmUJCT0gcGwzNTNfbmFuZF9yZW1vdmUsDQo+ID4gKwkuZHJpdmVy CQk9IHsNCj4gPiArCQkubmFtZQk9IFBMMzUzX05BTkRfRFJJVkVSX05BTUUsDQo+ID4gKwkJLm9m X21hdGNoX3RhYmxlID0gcGwzNTNfbmFuZF9vZl9tYXRjaCwNCj4gPiArCX0sDQo+ID4gK307DQo+ ID4gKw0KPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHBsMzUzX25hbmRfZHJpdmVyKTsNCj4g PiArDQo+ID4gK01PRFVMRV9BVVRIT1IoIlhpbGlueCwgSW5jLiIpOw0KPiA+ICtNT0RVTEVfQUxJ QVMoInBsYXRmb3JtOiIgUEwzNTNfTkFORF9EUklWRVJfTkFNRSk7DQo+ID4gK01PRFVMRV9ERVND UklQVElPTigiQVJNIFBMMzUzIE5BTkQgRmxhc2ggRHJpdmVyIik7DQo+ID4gK01PRFVMRV9MSUNF TlNFKCJHUEwiKTsNCj4gDQo+IFRoYW5rcywNCj4gTWlxdcOobA0KPiANCj4gLS0NCj4gTWlxdWVs IFJheW5hbCwgQm9vdGxpbiAoZm9ybWVybHkgRnJlZSBFbGVjdHJvbnMpIEVtYmVkZGVkIExpbnV4 IGFuZCBLZXJuZWwgZW5naW5lZXJpbmcNCj4gaHR0cHM6Ly9ib290bGluLmNvbQ0KDQpUaGFua3Ms DQpOYWdhIFN1cmVzaGt1bWFyIFJlbGxpLg0K