From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on archive.lwn.net X-Spam-Level: X-Spam-Status: No, score=-5.7 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by archive.lwn.net (Postfix) with ESMTP id C885B7D2F0 for ; Fri, 4 Oct 2019 07:46:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729688AbfJDHqT (ORCPT ); Fri, 4 Oct 2019 03:46:19 -0400 Received: from mx0b-00128a01.pphosted.com ([148.163.139.77]:53976 "EHLO mx0b-00128a01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729103AbfJDHqT (ORCPT ); Fri, 4 Oct 2019 03:46:19 -0400 Received: from pps.filterd (m0167090.ppops.net [127.0.0.1]) by mx0b-00128a01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id x947hOwA023341; Fri, 4 Oct 2019 03:45:10 -0400 Received: from nam03-by2-obe.outbound.protection.outlook.com (mail-by2nam03lp2054.outbound.protection.outlook.com [104.47.42.54]) by mx0b-00128a01.pphosted.com with ESMTP id 2vdtmx8ryh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Fri, 04 Oct 2019 03:45:10 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CyAD3euV0qzF5Gvi6NEt4S++QgoyvnUh1B2yup8V6fkg8Vvjm6hhyCGAkDTvO7iN+iv9uD2MRVan9XYGqTNXf/Nn9B4fZDqGszhMjjPd/hOn+Y0ezo4iVmKcX4t4ykIugk4rwl7Oo0k3UKyklA5O91T+Qpcb9EsqkPGRnoUAwemu9w4iByzFRHyntZZHFXsFelDc87Sbo9wzeKKwssdpCwLZ0YDjM54Z3xrmlWHRWm8d3q9b4ejt7ERLAW7/t0Om6+JTQ8K5pOaL5N4dgje6pkKzXn+TgRWPBG0O1Oa50jVPOk7IfgDobOOuw6k5e59qIP4V0bKOMTwqkhnAbHY8ew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yXGBNkrKm5898YNavxMFTrds+6naKd1DuFjYguv47J0=; b=F0wgaKedS8t6HXfX2a48mZo9iCmwAeaKqJj1SiTyi4yaL2M5DkC4DavO5mIo4tR4IH4QxaC4ICkgcEBSOSawCM91l3z/LSSSxWwlRbN9wl45Ig9dLK0jPJOHfa+/UBk5I7FGJFfuoj1x2hjqFjRuKcPbHde0/v8GDCsSDbhE1lm7W3jzCoJSHA41oIAP6wHFynntINboClq0Uq95wiT9Buo7COcjiOVBi73HeP2Ht2zFL2Yk9ahLRoiYtl1iZ7KfolsqCE8DOrDcleDa6T+h/t1y84K3zrOor6oPYcBxeqhAm1uKhFBj3W62Duuolb7x73xc8d7a/hUBNyMNcs1FRQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=analog.com; dmarc=pass action=none header.from=analog.com; dkim=pass header.d=analog.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=analog.onmicrosoft.com; s=selector2-analog-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yXGBNkrKm5898YNavxMFTrds+6naKd1DuFjYguv47J0=; b=wdwGLdMNtH3kQyYxs8H2KcTfL7pohr4vG4u5uxJ/joAvA35ZFeyY779XC6BPMMjz9zmP1T97V6ihi3d4URxhq13LXyrk8P+ieqDes4QsR+/i4Ej5XNjwSSdaImaOtMpBloGwgix2O/WwZ+CiI9QrECD162oZBLwy2y6B5XBQrrA= Received: from BY5PR03MB5110.namprd03.prod.outlook.com (52.133.251.151) by BY5PR03MB5346.namprd03.prod.outlook.com (10.186.133.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.20; Fri, 4 Oct 2019 07:45:08 +0000 Received: from BY5PR03MB5110.namprd03.prod.outlook.com ([fe80::a46a:f74a:47e8:349f]) by BY5PR03MB5110.namprd03.prod.outlook.com ([fe80::a46a:f74a:47e8:349f%2]) with mapi id 15.20.2305.023; Fri, 4 Oct 2019 07:45:08 +0000 From: "Sa, Nuno" To: "linux@roeck-us.net" CC: "corbet@lwn.net" , "linux-hwmon@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-doc@vger.kernel.org" , "mark.rutland@arm.com" , "robh+dt@kernel.org" , "jdelvare@suse.com" Subject: Re: [PATCH 2/3] hwmon: Add support for ltc2947 Thread-Topic: [PATCH 2/3] hwmon: Add support for ltc2947 Thread-Index: AQHVctaaRoH0g8eimU2Gaa/u2JCpzKdIXIAAgAHNOAA= Date: Fri, 4 Oct 2019 07:45:07 +0000 Message-ID: References: <20190924124945.491326-1-nuno.sa@analog.com> <20190924124945.491326-3-nuno.sa@analog.com> <20191003041446.GA2332@roeck-us.net> In-Reply-To: <20191003041446.GA2332@roeck-us.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [137.71.226.54] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 124ebd52-e250-465b-6fd4-08d7489ec745 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: BY5PR03MB5346: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-forefront-prvs: 018093A9B5 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(376002)(39860400002)(396003)(366004)(136003)(189003)(199004)(476003)(2351001)(118296001)(6436002)(2906002)(1730700003)(6116002)(6486002)(3846002)(8936002)(8676002)(6306002)(6512007)(966005)(229853002)(14454004)(11346002)(66946007)(91956017)(66556008)(64756008)(66446008)(6246003)(36756003)(66476007)(316002)(2616005)(81156014)(54906003)(446003)(26005)(305945005)(186003)(71190400001)(2501003)(71200400001)(7736002)(81166006)(76116006)(4326008)(86362001)(478600001)(102836004)(14444005)(486006)(256004)(76176011)(25786009)(6506007)(66066001)(5660300002)(6916009)(5640700003)(99286004)(30864003)(559001)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:BY5PR03MB5346;H:BY5PR03MB5110.namprd03.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: analog.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: e6wxriNJyxKu5hUjXOws5EIshI5geni9ESQ0/QsY2Ie8COSGjvhkzdg/hVfi0yzqwj3DQ2c4Vpvq2JJUIWxtmHQaPBveLlkKrwpG1mFYQWo1xcWM3JzlC9TAn/JklqeetK8O8wTPLZktlGSOr1kTY8OdS8yvk2nBBCIwtIy4i9tblhHTuMAZ3euvxjxPO/Y945rj/hmr4s7pOb99eS8jC2yqc9boWrylPP5pBXON/4e2i5N9EHbBbKBp9gQhpRw++NZi2Pr4ZZLu9UTdmPySZwG973vp6o3w0igeHibJ6sbogrwkfHYDWM6vb0zmd7I7mnyBjVopHGIW8Q1nG/+qfrJY++agbKLW44KZGp95vMp7IfpkyRVSHYgH20FXyVAOlhsuaStyB6TaN0M8ehyZtNlR/BhvVu6kUcTOFvob1CZ5mYFEntySwQaLfIkHpT9gLzNhyT2pJMC+80TO7fKkOg== x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <5E521824876A1647A9E00B7DCD6F9C6A@namprd03.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: analog.com X-MS-Exchange-CrossTenant-Network-Message-Id: 124ebd52-e250-465b-6fd4-08d7489ec745 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Oct 2019 07:45:07.9162 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: eaa689b4-8f87-40e0-9c6f-7228de4d754a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: gK44AQMk+7Kym5B+k1r9E2SJuAvC2KIjtmdQOBbSyHxT+gOXCMlxdSWdq8GcDTi3H/JdKQaL39Q1qLh0JfqvDQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5346 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.95,1.0.8 definitions=2019-10-04_05:2019-10-03,2019-10-04 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 adultscore=0 impostorscore=0 bulkscore=0 mlxlogscore=999 suspectscore=0 spamscore=0 lowpriorityscore=0 malwarescore=0 phishscore=0 clxscore=1015 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-1908290000 definitions=main-1910040071 Sender: linux-doc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-doc@vger.kernel.org T24gV2VkLCAyMDE5LTEwLTAyIGF0IDIxOjE0IC0wNzAwLCBHdWVudGVyIFJvZWNrIHdyb3RlOg0K PiANCj4gT24gVHVlLCBTZXAgMjQsIDIwMTkgYXQgMDI6NDk6NDRQTSArMDIwMCwgTnVubyBTw6Eg d3JvdGU6DQo+ID4gVGhlIGx0YzI5NDcgaXMgYSBoaWdoIHByZWNpc2lvbiBwb3dlciBhbmQgZW5l cmd5IG1vbml0b3Igd2l0aCBhbg0KPiA+IGludGVybmFsIHNlbnNlIHJlc2lzdG9yIHN1cHBvcnRp bmcgdXAgdG8gKy8tIDMwQS4gVGhyZWUgaW50ZXJuYWwgbm8NCj4gPiBMYXRlbmN5IEFEQ3MgZW5z dXJlIGFjY3VyYXRlIG1lYXN1cmVtZW50IG9mIHZvbHRhZ2UgYW5kIGN1cnJlbnQsDQo+ID4gd2hp bGUNCj4gPiBoaWdoLWJhbmR3aWR0aCBhbmFsb2cgbXVsdGlwbGljYXRpb24gb2Ygdm9sdGFnZSBh bmQgY3VycmVudA0KPiA+IHByb3ZpZGVzDQo+ID4gYWNjdXJhdGUgcG93ZXIgbWVhc3VyZW1lbnQg aW4gYSB3aWRlIHJhbmdlIG9mIGFwcGxpY2F0aW9ucy4NCj4gPiBJbnRlcm5hbCBvcg0KPiA+IGV4 dGVybmFsIGNsb2NraW5nIG9wdGlvbnMgZW5hYmxlIHByZWNpc2UgY2hhcmdlIGFuZCBlbmVyZ3kN Cj4gPiBtZWFzdXJlbWVudHMuDQo+ID4gDQo+ID4gU2lnbmVkLW9mZi1ieTogTnVubyBTw6EgPG51 bm8uc2FAYW5hbG9nLmNvbT4NCj4gPiAtLS0NCj4gPiAgRG9jdW1lbnRhdGlvbi9od21vbi9sdGMy OTQ3LnJzdCB8ICAxMTAgKysrDQo+ID4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAg fCAgIDEwICsNCj4gPiAgZHJpdmVycy9od21vbi9LY29uZmlnICAgICAgICAgICB8ICAgMjcgKw0K PiA+ICBkcml2ZXJzL2h3bW9uL01ha2VmaWxlICAgICAgICAgIHwgICAgMyArDQo+ID4gIGRyaXZl cnMvaHdtb24vbHRjMjk0Ny1jb3JlLmMgICAgfCAxNDIxDQo+ID4gKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKw0KPiA+ICBkcml2ZXJzL2h3bW9uL2x0YzI5NDctaTJjLmMgICAgIHwgICA0 OSArKw0KPiA+ICBkcml2ZXJzL2h3bW9uL2x0YzI5NDctc3BpLmMgICAgIHwgICA1MCArKw0KPiA+ ICBkcml2ZXJzL2h3bW9uL2x0YzI5NDcuaCAgICAgICAgIHwgICAxMiArDQo+ID4gIDggZmlsZXMg Y2hhbmdlZCwgMTY4MiBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1 bWVudGF0aW9uL2h3bW9uL2x0YzI5NDcucnN0DQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2h3bW9uL2x0YzI5NDctY29yZS5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2h3bW9uL2x0YzI5NDctaTJjLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaHdt b24vbHRjMjk0Ny1zcGkuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9od21vbi9s dGMyOTQ3LmgNCj4gPiANCj4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sdGMy OTQ3LnJzdA0KPiA+IGIvRG9jdW1lbnRhdGlvbi9od21vbi9sdGMyOTQ3LnJzdA0KPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4yZGNmNzQ4NzA3NmQNCj4g PiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sdGMyOTQ3LnJz dA0KPiA+IEBAIC0wLDAgKzEsMTEwIEBADQo+ID4gK0tlcm5lbCBkcml2ZXJzIGx0YzI5NDctaTJj IGFuZCBsdGMyOTQ3LXNwaQ0KPiA+ICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KPiA+ICsNCj4gPiArU3VwcG9ydGVkIGNoaXBzOg0KPiA+ICsgICogQW5hbG9nIERl dmljZXMgTFRDMjk0Nw0KPiA+ICsgICAgUHJlZml4OiAnbHRjMjk0NycNCj4gPiArICAgIEFkZHJl c3NlcyBzY2FubmVkOiAtDQo+ID4gKyAgICBEYXRhc2hlZXQ6DQo+ID4gKyAgICAgICANCj4gPiBo dHRwczovL3d3dy5hbmFsb2cuY29tL21lZGlhL2VuL3RlY2huaWNhbC1kb2N1bWVudGF0aW9uL2Rh dGEtc2hlZXRzL0xUQzI5NDcucGRmDQo+ID4gKw0KPiA+ICtBdXRob3I6IE51bm8gU2EgPG51bm8u c2FAYW5hbG9nLmNvbT4NCj4gPiArDQo+ID4gK0Rlc2NyaXB0aW9uDQo+ID4gK19fX19fX19fX19f DQo+ID4gKw0KPiA+ICtUaGUgTFRDMjk0NyBpcyBhIGhpZ2ggcHJlY2lzaW9uIHBvd2VyIGFuZCBl bmVyZ3kgbW9uaXRvciB0aGF0DQo+ID4gbWVhc3VyZXMgY3VycmVudCwNCj4gPiArdm9sdGFnZSwg cG93ZXIsIHRlbXBlcmF0dXJlLCBjaGFyZ2UgYW5kIGVuZXJneS4gVGhlIGRldmljZQ0KPiA+IHN1 cHBvcnRzIGJvdGggU1BJDQo+ID4gK2FuZCBJMkMgZGVwZW5kaW5nIG9uIHRoZSBjaGlwIGNvbmZp Z3VyYXRpb24uDQo+ID4gK1RoZSBkZXZpY2UgYWxzbyBtZWFzdXJlcyBhY2N1bXVsYXRlZCBxdWFu dGl0aWVzIGFzIGVuZXJneS4gSXQgaGFzDQo+ID4gdHdvIGJhbmtzIG9mDQo+ID4gK3JlZ2lzdGVy J3MgdG8gcmVhZC9zZXQgZW5lcmd5IHJlbGF0ZWQgdmFsdWVzLiBUaGVzZSBiYW5rcyBjYW4gYmUN Cj4gPiBjb25maWd1cmVkDQo+ID4gK2luZGVwZW5kZW50bHkgdG8gaGF2ZSBzZXR1cHMgbGlrZTog ZW5lcmd5MSBhY2N1bXVsYXRlcyBhbHdheXMgYW5kDQo+ID4gZW5yZ3kyIG9ubHkNCj4gPiArYWNj dW11bGF0ZXMgaWYgY3VycmVudCBpcyBwb3NpdGl2ZSAodG8gY2hlY2sgYmF0dGVyeSBjaGFyZ2lu Zw0KPiA+IGVmZmljaWVuY3kgZm9yDQo+ID4gK2V4YW1wbGUpLiBUaGUgZGV2aWNlIGFsc28gc3Vw cG9ydHMgYSBHUElPIHBpbiB0aGF0IGNhbiBiZQ0KPiA+IGNvbmZpZ3VyZWQgYXMgb3V0cHV0DQo+ ID4gK3RvIGNvbnRyb2wgYSBmYW4gYXMgYSBmdW5jdGlvbiBvZiBtZWFzdXJlZCB0ZW1wZXJhdHVy ZS4gVGhlbiwgdGhlDQo+ID4gR1BJTyBiZWNvbWVzDQo+ID4gK2FjdGl2ZSBhcyBzb29uIGFzIGEg dGVtcGVyYXR1cmUgcmVhZGluZyBpcyBoaWdoZXIgdGhhbiBhIGRlZmluZWQNCj4gPiB0aHJlc2hv bGQuIFRoZQ0KPiA+ICt0ZW1wMiBjaGFubmVsIGlzIHVzZWQgdG8gY29udHJvbCB0aGlzIHRocmVz aG9sZHMgYW5kIHRvIHJlYWQgdGhlDQo+ID4gcmVzcGVjdGl2ZQ0KPiA+ICthbGFybXMuDQo+ID4g Kw0KPiA+ICtTeXNmcyBlbnRyaWVzDQo+ID4gK19fX19fX19fX19fX18NCj4gPiArDQo+ID4gK1Ro ZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgc3VwcG9ydGVkLiBMaW1pdHMgYXJlIHJlYWQtd3Jp dGUsDQo+ID4gcmVzZXRfaGlzdG9yeQ0KPiA+ICtpcyB3cml0ZS1vbmx5IGFuZCBhbGwgdGhlIG90 aGVyIGF0dHJpYnV0ZXMgYXJlIHJlYWQtb25seS4NCj4gPiArDQo+ID4gK2luMF9pbnB1dAkJVlAt Vk0gdm9sdGFnZSAobVYpLg0KPiA+ICtpbjBfbWluCQkJVW5kZXJ2b2x0YWdlIHRocmVzaG9sZA0K PiA+ICtpbjBfbWF4CQkJT3ZlcnZvbHRhZ2UgdGhyZXNob2xkDQo+ID4gK2luMF9sb3dlc3QJCUxv d2VzdCBtZWFzdXJlZCB2b2x0YWdlDQo+ID4gK2luMF9oaWdoZXN0CQlIaWdoZXN0IG1lYXN1cmVk IHZvbHRhZ2UNCj4gPiAraW4wX3Jlc2V0X2hpc3RvcnkJV3JpdGUgMSB0byByZXNldCBpbjEgaGlz dG9yeQ0KPiA+ICtpbjBfbWluX2FsYXJtCQlVbmRlcnZvbHRhZ2UgYWxhcm0NCj4gPiAraW4wX21h eF9hbGFybQkJT3ZlcnZvbHRhZ2UgYWxhcm0NCj4gPiAraW4wX2ZhdWx0CQlGYXVsdCB2YWx1ZQ0K PiANCj4gVGhpcyBpcyBhIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGUuIFdoYXQgZXhhY3RseSBkb2Vz IGl0IHJlZmxlY3QgPw0KPiA+ICtpbjBfbGFiZWwJCUNoYW5uZWwgbGFiZWwgKFZQLVZNKQ0KPiA+ ICsNCj4gPiAraW4xX2lucHV0CQlEVkNDIHZvbHRhZ2UgKG1WKQ0KPiA+ICtpbjFfbWluCQkJVW5k ZXJ2b2x0YWdlIHRocmVzaG9sZA0KPiA+ICtpbjFfbWF4CQkJT3ZlcnZvbHRhZ2UgdGhyZXNob2xk DQo+ID4gK2luMV9sb3dlc3QJCUxvd2VzdCBtZWFzdXJlZCB2b2x0YWdlDQo+ID4gK2luMV9oaWdo ZXN0CQlIaWdoZXN0IG1lYXN1cmVkIHZvbHRhZ2UNCj4gPiAraW4xX3Jlc2V0X2hpc3RvcnkJV3Jp dGUgMSB0byByZXNldCBpbjIgaGlzdG9yeQ0KPiA+ICtpbjFfbWluX2FsYXJtCQlVbmRlcnZvbHRh Z2UgYWxhcm0NCj4gPiAraW4xX21heF9hbGFybQkJT3ZlcnZvbHRhZ2UgYWxhcm0NCj4gPiAraW4x X2ZhdWx0CQlGYXVsdCB2YWx1ZQ0KPiA+ICtpbjFfbGFiZWwJCUNoYW5uZWwgbGFiZWwgKERWQ0Mp DQo+ID4gKw0KPiA+ICtjdXJyMV9pbnB1dAkJSVAtSU0gU2Vuc2UgY3VycmVudCAobUEpDQo+ID4g K2N1cnIxX21pbgkJVW5kZXJjdXJyZW50IHRocmVzaG9sZA0KPiA+ICtjdXJyMV9tYXgJCU92ZXJj dXJyZW50IHRocmVzaG9sZA0KPiA+ICtjdXJyMV9sb3dlc3QJCUxvd2VzdCBtZWFzdXJlZCBjdXJy ZW50DQo+ID4gK2N1cnIxX2hpZ2hlc3QJCUhpZ2hlc3QgbWVhc3VyZWQgY3VycmVudA0KPiA+ICtj dXJyMV9yZXNldF9oaXN0b3J5CVdyaXRlIDEgdG8gcmVzZXQgY3VycjEgaGlzdG9yeQ0KPiA+ICtj dXJyMV9taW5fYWxhcm0JCVVuZGVyY3VycmVudCBhbGFybQ0KPiA+ICtjdXJyMV9tYXhfYWxhcm0J CU92ZXJjdXJyZW50IGFsYXJtDQo+ID4gK2N1cnIxX2ZhdWx0CQlGYXVsdCB2YWx1ZQ0KPiA+ICtj dXJyMV9sYWJlbAkJQ2hhbm5lbCBsYWJlbCAoSVAtSU0pDQo+ID4gKw0KPiA+ICtwb3dlcjFfaW5w dXQJCVBvd2VyIChpbiB1VykNCj4gPiArcG93ZXIxX21pbgkJTG93IHBvd2VyIHRocmVzaG9sZA0K PiA+ICtwb3dlcjFfbWF4CQlIaWdoIHBvd2VyIHRocmVzaG9sZA0KPiA+ICtwb3dlcjFfaW5wdXRf bG93ZXN0CUhpc3RvcmljYWwgbWluaW11bSBwb3dlciB1c2UNCj4gPiArcG93ZXIxX2lucHV0X2hp Z2hlc3QJSGlzdG9yaWNhbCBtYXhpbXVtIHBvd2VyIHVzZQ0KPiA+ICtwb3dlcjFfcmVzZXRfaGlz dG9yeQlXcml0ZSAxIHRvIHJlc2V0IHBvd2VyMSBoaXN0b3J5DQo+ID4gK3Bvd2VyMV9taW5fYWxh cm0JTG93IHBvd2VyIGFsYXJtDQo+ID4gK3Bvd2VyMV9tYXhfYWxhcm0JSGlnaCBwb3dlciBhbGFy bQ0KPiA+ICtwb3dlcjFfZmF1bHQJCUZhdWx0IHZhbHVlDQo+ID4gK3Bvd2VyMV9sYWJlbAkJQ2hh bm5lbCBsYWJlbCAoUG93ZXIpDQo+ID4gKw0KPiA+ICt0ZW1wMV9pbnB1dAkJQ2hpcCBUZW1wZXJh dHVyZSAoaW4gbWlsbGlDKQ0KPiA+ICt0ZW1wMV9taW4JCUxvdyB0ZW1wZXJhdHVyZSB0aHJlc2hv bGQNCj4gPiArdGVtcDFfbWF4CQlIaWdoIHRlbXBlcmF0dXJlIHRocmVzaG9sZA0KPiA+ICt0ZW1w MV9pbnB1dF9sb3dlc3QJSGlzdG9yaWNhbCBtaW5pbXVtIHRlbXBlcmF0dXJlIHVzZQ0KPiA+ICt0 ZW1wMV9pbnB1dF9oaWdoZXN0CUhpc3RvcmljYWwgbWF4aW11bSB0ZW1wZXJhdHVyZSB1c2UNCj4g PiArdGVtcDFfcmVzZXRfaGlzdG9yeQlXcml0ZSAxIHRvIHJlc2V0IHRlbXAxIGhpc3RvcnkNCj4g PiArdGVtcDFfbWluX2FsYXJtCQlMb3cgdGVtcGVyYXR1cmUgYWxhcm0NCj4gPiArdGVtcDFfbWF4 X2FsYXJtCQlIaWdoIHRlbXBlcmF0dXJlIGFsYXJtDQo+ID4gK3RlbXAxX2ZhdWx0CQlGYXVsdCB2 YWx1ZQ0KPiA+ICt0ZW1wMV9sYWJlbAkJQ2hhbm5lbCBsYWJlbCAoQW1iaWVudCkNCj4gPiArDQo+ ID4gK3RlbXAyX21pbgkJTG93IHRlbXBlcmF0dXJlIHRocmVzaG9sZCBmb3IgZmFuIGNvbnRyb2wN Cj4gPiArdGVtcDJfbWF4CQlIaWdoIHRlbXBlcmF0dXJlIHRocmVzaG9sZCBmb3IgZmFuIGNvbnRy b2wNCj4gPiArdGVtcDJfbWluX2FsYXJtCQlMb3cgdGVtcGVyYXR1cmUgZmFuIGNvbnRyb2wgYWxh cm0NCj4gPiArdGVtcDJfbWF4X2FsYXJtCQlIaWdoIHRlbXBlcmF0dXJlIGZhbiBjb250cm9sIGFs YXJtDQo+ID4gK3RlbXAyX2xhYmVsCQlDaGFubmVsIGxhYmVsIChURU1QRkFOKQ0KPiA+ICsNCj4g PiArZW5lcmd5MV9pbnB1dAkJTWVhc3VyZWQgZW5lcmd5IG92ZXIgdGltZSAoaW4NCj4gPiBtaWNy b0pvdWxlKQ0KPiA+ICtlbmVyZ3kxX21heAkJSGlnaCBlbmVyZ3kgdGhyZXNob2xkDQo+ID4gK2Vu ZXJneTFfbWF4X2FsYXJtCUhpZ2ggZW5lcmd5IGFsYXJtDQo+ID4gK2VuZXJneTFfbWluCQlMb3cg ZW5lcmd5IHRocmVzaG9sZA0KPiA+ICtlbmVyZ3kxX21pbl9hbGFybQlMb3cgZW5lcmd5IGFsYXJt DQo+ID4gK2VuZXJneTFfb3ZlcmZsb3dfYWxhcm0JRW5lcmd5MSByZWdpc3RlciBpcyBhYm91dCB0 byBvdmVyZmxvdw0KPiA+ICtlbmVyZ3kxX2ZhdWx0CQlGYXVsdCB2YWx1ZQ0KPiA+ICsNCj4gPiAr ZW5lcmd5Ml9pbnB1dAkJTWVhc3VyZWQgZW5lcmd5IG92ZXIgdGltZSAoaW4NCj4gPiBtaWNyb0pv dWxlKQ0KPiA+ICtlbmVyZ3kyX21heAkJSGlnaCBlbmVyZ3kgdGhyZXNob2xkDQo+ID4gK2VuZXJn eTJfbWF4X2FsYXJtCUhpZ2ggZW5lcmd5IGFsYXJtDQo+ID4gK2VuZXJneTJfbWluCQlMb3cgZW5l cmd5IHRocmVzaG9sZA0KPiA+ICtlbmVyZ3kyX21pbl9hbGFybQlMb3cgZW5lcmd5IGFsYXJtDQo+ ID4gK2VuZXJneTJfb3ZlcmZsb3dfYWxhcm0JRW5lcmd5MiByZWdpc3RlciBpcyBhYm91dCB0byBv dmVyZmxvdw0KPiA+ICtlbmVyZ3kyX2ZhdWx0CQlGYXVsdCB2YWx1ZQ0KPiA+IGRpZmYgLS1naXQg YS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTDQo+ID4gaW5kZXggYzcwMzVjZTI0NjBiLi44ODlm MzhjMWM5MzAgMTAwNjQ0DQo+ID4gLS0tIGEvTUFJTlRBSU5FUlMNCj4gPiArKysgYi9NQUlOVEFJ TkVSUw0KPiA+IEBAIC05NDk2LDYgKzk0OTYsMTYgQEAgUzoJTWFpbnRhaW5lZA0KPiA+ICBGOglE b2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyNjEucnN0DQo+ID4gIEY6CWRyaXZlcnMvaHdtb24vbHRj NDI2MS5jDQo+ID4gIA0KPiA+ICtMVEMyOTQ3IEhBUkRXQVJFIE1PTklUT1IgRFJJVkVSDQo+ID4g K006CU51bm8gU8OhIDxudW5vLnNhQGFuYWxvZy5jb20+DQo+ID4gK1c6CWh0dHA6Ly9lei5hbmFs b2cuY29tL2NvbW11bml0eS9saW51eC1kZXZpY2UtZHJpdmVycw0KPiA+ICtMOglsaW51eC1od21v bkB2Z2VyLmtlcm5lbC5vcmcNCj4gPiArUzoJU3VwcG9ydGVkDQo+ID4gK0Y6CWRyaXZlcnMvaHdt b24vbHRjMjk0Ny1jb3JlLmMNCj4gPiArRjoJZHJpdmVycy9od21vbi9sdGMyOTQ3LXNwaS5jDQo+ ID4gK0Y6CWRyaXZlcnMvaHdtb24vbHRjMjk0Ny1pMmMuYw0KPiA+ICtGOglkcml2ZXJzL2h3bW9u L2x0YzI5NDcuaA0KPiA+ICsNCj4gPiAgTFRDNDMwNiBJMkMgTVVMVElQTEVYRVIgRFJJVkVSDQo+ ID4gIE06CU1pY2hhZWwgSGVubmVyaWNoIDxtaWNoYWVsLmhlbm5lcmljaEBhbmFsb2cuY29tPg0K PiA+ICBXOglodHRwOi8vZXouYW5hbG9nLmNvbS9jb21tdW5pdHkvbGludXgtZGV2aWNlLWRyaXZl cnMNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21v bi9LY29uZmlnDQo+ID4gaW5kZXggMmNhNTY2OGJkYjYyLi5hZDM1ZDYyNWI2ZDMgMTAwNjQ0DQo+ ID4gLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy9od21vbi9L Y29uZmlnDQo+ID4gQEAgLTczNyw2ICs3MzcsMzMgQEAgY29uZmlnIFNFTlNPUlNfTFRDMjk0NQ0K PiA+ICAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28s IHRoZSBtb2R1bGUNCj4gPiB3aWxsDQo+ID4gIAkgIGJlIGNhbGxlZCBsdGMyOTQ1Lg0KPiA+ICAN Cj4gPiArY29uZmlnIFNFTlNPUlNfTFRDMjk0Nw0KPiA+ICsJdHJpc3RhdGUNCj4gPiArDQo+ID4g K2NvbmZpZyBTRU5TT1JTX0xUQzI5NDdfSTJDDQo+ID4gKwl0cmlzdGF0ZSAiQW5hbG9nIERldmlj ZXMgTFRDMjk0NyBIaWdoIFByZWNpc2lvbiBQb3dlciBhbmQNCj4gPiBFbmVyZ3kgTW9uaXRvciBv dmVyIEkyQyINCj4gPiArCWRlcGVuZHMgb24gSTJDDQo+ID4gKwlzZWxlY3QgUkVHTUFQX0kyQw0K PiA+ICsJc2VsZWN0IFNFTlNPUlNfTFRDMjk0Nw0KPiA+ICsJaGVscA0KPiA+ICsJICBJZiB5b3Ug c2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTGluZWFyIFRlY2hub2xvZ3kNCj4gPiBM VEMyOTQ3DQo+ID4gKwkgIEkyQyBIaWdoIFByZWNpc2lvbiBQb3dlciBhbmQgRW5lcmd5IE1vbml0 b3INCj4gPiArDQo+ID4gKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9k dWxlLiBJZiBzbywgdGhlIG1vZHVsZQ0KPiA+IHdpbGwNCj4gPiArCSAgYmUgY2FsbGVkIGx0YzI5 NDctaTJjLg0KPiA+ICsNCj4gPiArY29uZmlnIFNFTlNPUlNfTFRDMjk0N19TUEkNCj4gPiArCXRy aXN0YXRlICJBbmFsb2cgRGV2aWNlcyBMVEMyOTQ3IEhpZ2ggUHJlY2lzaW9uIFBvd2VyIGFuZA0K PiA+IEVuZXJneSBNb25pdG9yIG92ZXIgU1BJIg0KPiA+ICsJZGVwZW5kcyBvbiBTUElfTUFTVEVS DQo+ID4gKwlzZWxlY3QgUkVHTUFQX1NQSQ0KPiA+ICsJc2VsZWN0IFNFTlNPUlNfTFRDMjk0Nw0K PiA+ICsJaGVscA0KPiA+ICsJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBm b3IgTGluZWFyIFRlY2hub2xvZ3kNCj4gPiBMVEMyOTQ3DQo+ID4gKwkgIFNQSSBIaWdoIFByZWNp c2lvbiBQb3dlciBhbmQgRW5lcmd5IE1vbml0b3INCj4gPiArDQo+ID4gKwkgIFRoaXMgZHJpdmVy IGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQ0KPiA+IHdp bGwNCj4gPiArCSAgYmUgY2FsbGVkIGx0YzI5NDctc3BpLg0KPiA+ICsNCj4gPiAgY29uZmlnIFNF TlNPUlNfTFRDMjk5MA0KPiA+ICAJdHJpc3RhdGUgIkxpbmVhciBUZWNobm9sb2d5IExUQzI5OTAi DQo+ID4gIAlkZXBlbmRzIG9uIEkyQw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL01h a2VmaWxlIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQ0KPiA+IGluZGV4IGM4NmNlNGQzZDM2Yi4u YjU0YTRjZWMzMjAzIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUNCj4g PiArKysgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlDQo+ID4gQEAgLTEwNyw2ICsxMDcsOSBAQCBv YmotJChDT05GSUdfU0VOU09SU19MTTk1MjM0KQkrPSBsbTk1MjM0Lm8NCj4gPiAgb2JqLSQoQ09O RklHX1NFTlNPUlNfTE05NTI0MSkJKz0gbG05NTI0MS5vDQo+ID4gIG9iai0kKENPTkZJR19TRU5T T1JTX0xNOTUyNDUpCSs9IGxtOTUyNDUubw0KPiA+ICBvYmotJChDT05GSUdfU0VOU09SU19MVEMy OTQ1KQkrPSBsdGMyOTQ1Lm8NCj4gPiArb2JqLSQoQ09ORklHX1NFTlNPUlNfTFRDMjk0NykJKz0g bHRjMjk0Ny1jb3JlLm8NCj4gPiArb2JqLSQoQ09ORklHX1NFTlNPUlNfTFRDMjk0N19JMkMpICs9 IGx0YzI5NDctaTJjLm8NCj4gPiArb2JqLSQoQ09ORklHX1NFTlNPUlNfTFRDMjk0N19TUEkpICs9 IGx0YzI5NDctc3BpLm8NCj4gPiAgb2JqLSQoQ09ORklHX1NFTlNPUlNfTFRDMjk5MCkJKz0gbHRj Mjk5MC5vDQo+ID4gIG9iai0kKENPTkZJR19TRU5TT1JTX0xUQzQxNTEpCSs9IGx0YzQxNTEubw0K PiA+ICBvYmotJChDT05GSUdfU0VOU09SU19MVEM0MjE1KQkrPSBsdGM0MjE1Lm8NCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9od21vbi9sdGMyOTQ3LWNvcmUuYyBiL2RyaXZlcnMvaHdtb24vbHRj Mjk0Ny0NCj4gPiBjb3JlLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAw MDAwMDAwMDAwMC4uMzUwYjJiNzY0NjdjDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2Ry aXZlcnMvaHdtb24vbHRjMjk0Ny1jb3JlLmMNCj4gPiBAQCAtMCwwICsxLDE0MjEgQEANCj4gPiAr Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogQW5h bG9nIERldmljZXMgTFRDMjk0NyBoaWdoIHByZWNpc2lvbiBwb3dlciBhbmQgZW5lcmd5IG1vbml0 b3INCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IDIwMTkgQW5hbG9nIERldmljZXMgSW5jLg0K PiA+ICsgKi8NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+DQo+IA0KPiBCSVQoKSBp cyBkZWZpbmVkIGluIGxpbnV4L2JpdHMuaC4NCg0KYWNrLg0KDQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9jbGsuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvaHdtb24uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+DQo+ID4g KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJsdGMy OTQ3LmgiDQo+ID4gKw0KPiA+ICsvKiByZWdpc3RlcidzICovDQo+ID4gKyNkZWZpbmUgTFRDMjk0 N19SRUdfUEFHRV9DVFJMCQkweEZGDQo+ID4gKyNkZWZpbmUgTFRDMjk0N19SRUdfQ1RSTAkJMHhG MA0KPiA+ICsjZGVmaW5lIExUQzI5NDdfUkVHX1RCQ1RMCQkweEU5DQo+ID4gKyNkZWZpbmUgTFRD Mjk0N19DT05UX01PREVfTUFTSwkJQklUKDMpDQo+ID4gKyNkZWZpbmUgTFRDMjk0N19DT05UX01P REUoeCkJCUZJRUxEX1BSRVAoTFRDMjk0N19DT05UDQo+ID4gX01PREVfTUFTSywgeCkNCj4gPiAr I2RlZmluZSBMVEMyOTQ3X1BSRV9NQVNLCQlHRU5NQVNLKDIsIDApDQo+ID4gKyNkZWZpbmUgTFRD Mjk0N19QUkUoeCkJCQlGSUVMRF9QUkVQKExUQzI5NDdfUFJFXw0KPiA+IE1BU0ssIHgpDQo+ID4g KyNkZWZpbmUgTFRDMjk0N19ESVZfTUFTSwkJR0VOTUFTSyg3LCAzKQ0KPiA+ICsjZGVmaW5lIExU QzI5NDdfRElWKHgpCQkJRklFTERfUFJFUChMVEMyOTQ3X0RJVl8NCj4gPiBNQVNLLCB4KQ0KPiA+ ICsjZGVmaW5lIExUQzI5NDdfU0hVVERPV05fTUFTSwkJQklUKDApDQo+ID4gKyNkZWZpbmUgTFRD Mjk0N19SRUdfQUNDVU1fUE9MCQkweEUxDQo+ID4gKyNkZWZpbmUgTFRDMjk0N19BQ0NVTV9QT0xf MV9NQVNLCUdFTk1BU0soMSwgMCkNCj4gPiArI2RlZmluZSBMVEMyOTQ3X0FDQ1VNX1BPTF8xKHgp CQlGSUVMRF9QUkVQKExUQzI5NDdfQUNDVQ0KPiA+IE1fUE9MXzFfTUFTSywgeCkNCj4gPiArI2Rl ZmluZSBMVEMyOTQ3X0FDQ1VNX1BPTF8yX01BU0sJR0VOTUFTSygzLCAyKQ0KPiA+ICsjZGVmaW5l IExUQzI5NDdfQUNDVU1fUE9MXzIoeCkJCUZJRUxEX1BSRVAoTFRDMjk0N19BQ0NVDQo+ID4gTV9Q T0xfMl9NQVNLLCB4KQ0KPiA+ICsjZGVmaW5lIExUQzI5NDdfUkVHX0FDQ1VNX0RFQURCQU5ECTB4 RTQNCj4gPiArI2RlZmluZSBMVEMyOTQ3X1JFR19HUElPU1RBVENUTAkJMHg2Nw0KPiA+ICsjZGVm aW5lIExUQzI5NDdfR1BJT19FTl9NQVNLCQlCSVQoMCkNCj4gPiArI2RlZmluZSBMVEMyOTQ3X0dQ SU9fRU4oeCkJCUZJRUxEX1BSRVAoTFRDMjk0N19HUElPX0VOX01BU0sNCj4gPiAsIHgpDQo+ID4g KyNkZWZpbmUgTFRDMjk0N19HUElPX0ZBTl9FTl9NQVNLCUJJVCg2KQ0KPiA+ICsjZGVmaW5lIExU QzI5NDdfR1BJT19GQU5fRU4oeCkJCUZJRUxEX1BSRVAoTFRDMjk0N19HUElPDQo+ID4gX0ZBTl9F Tl9NQVNLLCB4KQ0KPiA+ICsjZGVmaW5lIExUQzI5NDdfR1BJT19GQU5fUE9MX01BU0sJQklUKDcp DQo+ID4gKyNkZWZpbmUgTFRDMjk0N19HUElPX0ZBTl9QT0woeCkJCUZJRUxEX1BSRVAoTFRDMjk0 N19HUElPDQo+ID4gX0ZBTl9QT0xfTUFTSywgeCkNCj4gPiArI2RlZmluZSBMVEMyOTQ3X1JFR19H UElPX0FDQ1VNCQkweEUzDQo+ID4gKy8qIDIwMEtoeiAqLw0KPiA+ICsjZGVmaW5lIExUQzI5NDdf Q0xLX01JTgkJCTIwMDAwMA0KPiA+ICsvKiAyNU1oeiAqLw0KPiA+ICsjZGVmaW5lIExUQzI5NDdf Q0xLX01BWAkJCTI1MDAwMDAwDQo+ID4gKyNkZWZpbmUgUEFHRTAJCQkJMA0KPiA+ICsjZGVmaW5l IFBBR0UxCQkJCTENCj4gPiArLyogVm9sdGFnZSByZWdpc3RlcnMgKi8NCj4gPiArI2RlZmluZSBM VEMyOTQ3X1JFR19WT0xUQUdFCQkweEEwDQo+ID4gKyNkZWZpbmUgTFRDMjk0N19SRUdfVk9MVEFH RV9NQVgJCTB4NTANCj4gPiArI2RlZmluZSBMVEMyOTQ3X1JFR19WT0xUQUdFX01JTgkJMHg1Mg0K PiA+ICsjZGVmaW5lIExUQzI5NDdfUkVHX1ZPTFRBR0VfVEhSRV9ICTB4OTANCj4gPiArI2RlZmlu ZSBMVEMyOTQ3X1JFR19WT0xUQUdFX1RIUkVfTAkweDkyDQo+ID4gKyNkZWZpbmUgTFRDMjk0N19S RUdfRFZDQwkJMHhBNA0KPiA+ICsjZGVmaW5lIExUQzI5NDdfUkVHX0RWQ0NfTUFYCQkweDU4DQo+ ID4gKyNkZWZpbmUgTFRDMjk0N19SRUdfRFZDQ19NSU4JCTB4NUENCj4gPiArI2RlZmluZSBMVEMy OTQ3X1JFR19EVkNDX1RIUkVfSAkJMHg5OA0KPiA+ICsjZGVmaW5lIExUQzI5NDdfUkVHX0RWQ0Nf VEhSRV9MCQkweDlBDQo+ID4gKyNkZWZpbmUgTFRDMjk0N19WT0xUQUdFX0dFTl9DSEFOCTANCj4g PiArI2RlZmluZSBMVEMyOTQ3X1ZPTFRBR0VfRFZDQ19DSEFOCTENCj4gPiArLyogQ3VycmVudCBy ZWdpc3RlcnMgKi8NCj4gPiArI2RlZmluZSBMVEMyOTQ3X1JFR19DVVJSRU5UCQkweDkwDQo+ID4g KyNkZWZpbmUgTFRDMjk0N19SRUdfQ1VSUkVOVF9NQVgJCTB4NDANCj4gPiArI2RlZmluZSBMVEMy OTQ3X1JFR19DVVJSRU5UX01JTgkJMHg0Mg0KPiA+ICsjZGVmaW5lIExUQzI5NDdfUkVHX0NVUlJF TlRfVEhSRV9ICTB4ODANCj4gPiArI2RlZmluZSBMVEMyOTQ3X1JFR19DVVJSRU5UX1RIUkVfTAkw eDgyDQo+ID4gKy8qIFBvd2VyIHJlZ2lzdGVycyAqLw0KPiA+ICsjZGVmaW5lIExUQzI5NDdfUkVH X1BPV0VSCQkweDkzDQo+ID4gKyNkZWZpbmUgTFRDMjk0N19SRUdfUE9XRVJfTUFYCQkweDQ0DQo+ ID4gKyNkZWZpbmUgTFRDMjk0N19SRUdfUE9XRVJfTUlOCQkweDQ2DQo+ID4gKyNkZWZpbmUgTFRD Mjk0N19SRUdfUE9XRVJfVEhSRV9ICTB4ODQNCj4gPiArI2RlZmluZSBMVEMyOTQ3X1JFR19QT1dF Ul9USFJFX0wJMHg4Ng0KPiA+ICsvKiBUZW1wZXJhdHVyZSByZWdpc3RlcnMgKi8NCj4gPiArI2Rl ZmluZSBMVEMyOTQ3X1JFR19URU1QCQkweEEyDQo+ID4gKyNkZWZpbmUgTFRDMjk0N19SRUdfVEVN UF9NQVgJCTB4NTQNCj4gPiArI2RlZmluZSBMVEMyOTQ3X1JFR19URU1QX01JTgkJMHg1Ng0KPiA+ ICsjZGVmaW5lIExUQzI5NDdfUkVHX1RFTVBfVEhSRV9ICQkweDk0DQo+ID4gKyNkZWZpbmUgTFRD Mjk0N19SRUdfVEVNUF9USFJFX0wJCTB4OTYNCj4gPiArI2RlZmluZSBMVEMyOTQ3X1JFR19URU1Q X0ZBTl9USFJFX0gJMHg5Qw0KPiA+ICsjZGVmaW5lIExUQzI5NDdfUkVHX1RFTVBfRkFOX1RIUkVf TAkweDlFDQo+ID4gKyNkZWZpbmUgTFRDMjk0N19URU1QX0ZBTl9DSEFOCQkxDQo+ID4gKy8qIEVu ZXJneSByZWdpc3RlcnMgKi8NCj4gPiArI2RlZmluZSBMVEMyOTQ3X1JFR19FTkVSR1kxCQkweDA2 DQo+ID4gKyNkZWZpbmUgTFRDMjk0N19SRUdfRU5FUkdZMV9USFJFX0gJMHgxMA0KPiA+ICsjZGVm aW5lIExUQzI5NDdfUkVHX0VORVJHWTFfVEhSRV9MCTB4MTYNCj4gPiArI2RlZmluZSBMVEMyOTQ3 X1JFR19FTkVSR1kyCQkweDE2DQo+ID4gKyNkZWZpbmUgTFRDMjk0N19SRUdfRU5FUkdZMl9USFJF X0gJMHgzMA0KPiA+ICsjZGVmaW5lIExUQzI5NDdfUkVHX0VORVJHWTJfVEhSRV9MCTB4MzYNCj4g PiArI2RlZmluZSBFTkVSR1lfTUlOCQkJMHhGRkZGODAwMDAwMDAwMDAwTEwNCj4gPiArI2RlZmlu ZSBFTkVSR1lfTUFYCQkJMHgwMDAwN0ZGRkZGRkZGRkZGTEwNCj4gPiArLyogU3RhdHVzL0FsYXJt L092ZXJmbG93IHJlZ2lzdGVycyAqLw0KPiA+ICsjZGVmaW5lIExUQzI5NDdfUkVHX1NUQVRVUwkJ MHg4MA0KPiA+ICsjZGVmaW5lIExUQzI5NDdfUkVHX1NUQVRWVAkJMHg4MQ0KPiA+ICsjZGVmaW5l IExUQzI5NDdfUkVHX1NUQVRJUAkJMHg4Mg0KPiA+ICsjZGVmaW5lIExUQzI5NDdfUkVHX1NUQVRD CQkweDgzDQo+ID4gKyNkZWZpbmUgTFRDMjk0N19SRUdfU1RBVEUJCTB4ODQNCj4gPiArI2RlZmlu ZSBMVEMyOTQ3X1JFR19TVEFUQ0VPRgkJMHg4NQ0KPiA+ICsjZGVmaW5lIExUQzI5NDdfUkVHX1NU QVRWRFZDQwkJMHg4Nw0KPiA+ICsNCj4gPiArI2RlZmluZSBMVEMyOTQ3X0FMRVJUU19TSVpFCShM VEMyOTQ3X1JFR19TVEFUVkRWQ0MgLQ0KPiA+IExUQzI5NDdfUkVHX1NUQVRVUykNCj4gPiArI2Rl ZmluZSBMVEMyOTQ3X1VQREFURV9WQUxfTUFTSwkJQklUKDQpDQo+ID4gKyNkZWZpbmUgTFRDMjk0 N19NQVhfVk9MVEFHRV9NQVNLCUJJVCgwKQ0KPiA+ICsjZGVmaW5lIExUQzI5NDdfTUlOX1ZPTFRB R0VfTUFTSwlCSVQoMSkNCj4gPiArI2RlZmluZSBMVEMyOTQ3X01BWF9DVVJSRU5UX01BU0sJQklU KDApDQo+ID4gKyNkZWZpbmUgTFRDMjk0N19NSU5fQ1VSUkVOVF9NQVNLCUJJVCgxKQ0KPiA+ICsj ZGVmaW5lIExUQzI5NDdfTUFYX1BPV0VSX01BU0sJCUJJVCgyKQ0KPiA+ICsjZGVmaW5lIExUQzI5 NDdfTUlOX1BPV0VSX01BU0sJCUJJVCgzKQ0KPiA+ICsjZGVmaW5lIExUQzI5NDdfTUFYX1RFTVBf TUFTSwkJQklUKDIpDQo+ID4gKyNkZWZpbmUgTFRDMjk0N19NSU5fVEVNUF9NQVNLCQlCSVQoMykN Cj4gPiArI2RlZmluZSBMVEMyOTQ3X01BWF9URU1QX0ZBTl9NQVNLCUJJVCg0KQ0KPiA+ICsjZGVm aW5lIExUQzI5NDdfTUlOX1RFTVBfRkFOX01BU0sJQklUKDUpDQo+ID4gKyNkZWZpbmUgTFRDMjk0 N19TSU5HTEVfU0hPVF9NQVNLCUJJVCgyKQ0KPiA+ICsjZGVmaW5lIExUQzI5NDdfTUFYX0VORVJH WTFfTUFTSwlCSVQoMCkNCj4gPiArI2RlZmluZSBMVEMyOTQ3X01JTl9FTkVSR1kxX01BU0sJQklU KDEpDQo+ID4gKyNkZWZpbmUgTFRDMjk0N19NQVhfRU5FUkdZMl9NQVNLCUJJVCgyKQ0KPiA+ICsj ZGVmaW5lIExUQzI5NDdfTUlOX0VORVJHWTJfTUFTSwlCSVQoMykNCj4gPiArI2RlZmluZSBMVEMy OTQ3X01JTl9FTkVSR1kxX09fTUFTSwlCSVQoNCkNCj4gPiArI2RlZmluZSBMVEMyOTQ3X01JTl9F TkVSR1kyX09fTUFTSwlCSVQoNSkNCj4gPiArI2RlZmluZSBMVEMyOTQ3X0FEQ0VSUl9NQVNLCQlC SVQoNSkNCj4gPiArLyoNCj4gPiArICogRm9yIGFjY3VtdWxhdGVkIHZhbHVlcyB0aGVyZSdzIGEg ZmF1bHQgaWYgdGhlIEFEQyBjb252ZXJzaW9ucw0KPiA+IGFyZSBpbnZhbGlkDQo+ID4gKyAqIChB RENFUlIpIG9yIGlmIHRoZXJlIGlzIGFuIG92ZXJmbG93IG9mIHRoZSBpbnRlcm5hbCB0aW1lYmFz ZQ0KPiA+IHJlZ2lzdGVyDQo+ID4gKyAqICh3aGljaCBpbmRpY2F0ZXMgaW52YWxpZCBUQkNUTCBj b25maWd1cmF0aW9uKS4NCj4gPiArICovDQo+ID4gKyNkZWZpbmUgTFRDMjk0N19FTkVSR1lfRkFV TFRfTUFTSwlHRU5NQVNLKDYsIDUpDQo+ID4gKw0KPiA+ICtzdHJ1Y3QgbHRjMjk0N19kYXRhIHsN Cj4gPiArCXN0cnVjdCByZWdtYXAgKm1hcDsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4g PiArCS8qDQo+ID4gKwkgKiBUaGUgbXV0ZXggaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGRldmljZSBo YXMgMiBtZW1vcnkgcGFnZXMuDQo+ID4gV2hlbg0KPiA+ICsJICogcmVhZGluZy93cml0aW5nIHRo ZSBjb3JyZWN0IHBhZ2UgbmVlZHMgdG8gYmUgc2V0IHNvIHRoYXQsDQo+ID4gdGhlDQo+ID4gKwkg KiBjb21wbGV0ZSBzZXF1ZW5jZSBzZWxlY3RfcGFnZS0+cmVhZC93cml0ZSBuZWVkcyB0byBiZQ0K PiA+IHByb3RlY3RlZC4NCj4gPiArCSAqLw0KPiA+ICsJc3RydWN0IG11dGV4IGxvY2s7DQo+ID4g Kwl1MzIgbHNiX2VuZXJneTsNCj4gPiArCWJvb2wgcmVzZXQ7DQo+ID4gKwlib29sIGdwaW9fb3V0 Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyogdXNlZCBmb3IgcmF3IHN5c2ZzIGVudHJpZXMgKi8N Cj4gPiArZW51bSB7DQo+ID4gKwlMVEMyOTQ3X1BPV0VSX0lOUFVULA0KPiA+ICsJTFRDMjk0N19Q T1dFUl9USFJFX0wsDQo+ID4gKwlMVEMyOTQ3X1BPV0VSX1RIUkVfSCwNCj4gPiArCUxUQzI5NDdf UE9XRVJfSElHSEVTVCwNCj4gPiArCUxUQzI5NDdfUE9XRVJfTE9XRVNULA0KPiA+ICsJTFRDMjk0 N19FTkVSR1kxX0lOUFVULA0KPiA+ICsJTFRDMjk0N19FTkVSR1kxX1RIUkVfSCwNCj4gPiArCUxU QzI5NDdfRU5FUkdZMV9USFJFX0wsDQo+ID4gKwlMVEMyOTQ3X0VORVJHWTFfTUFYX0FMQVJNLA0K PiA+ICsJTFRDMjk0N19FTkVSR1kxX01JTl9BTEFSTSwNCj4gPiArCUxUQzI5NDdfRU5FUkdZMl9J TlBVVCwNCj4gPiArCUxUQzI5NDdfRU5FUkdZMl9USFJFX0gsDQo+ID4gKwlMVEMyOTQ3X0VORVJH WTJfVEhSRV9MLA0KPiA+ICsJTFRDMjk0N19FTkVSR1kyX01BWF9BTEFSTSwNCj4gPiArCUxUQzI5 NDdfRU5FUkdZMl9NSU5fQUxBUk0sDQo+ID4gKwlMVEMyOTQ3X0VORVJHWTFfT1ZFUkZfQUxBUk0s DQo+ID4gKwlMVEMyOTQ3X0VORVJHWTJfT1ZFUkZfQUxBUk0sDQo+ID4gKwlMVEMyOTQ3X0ZBVUxU ID0gTFRDMjk0N19BRENFUlJfTUFTSywNCj4gPiArCUxUQzI5NDdfRU5FUkdZX0ZBVUxUID0gTFRD Mjk0N19FTkVSR1lfRkFVTFRfTUFTSywNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg X19sdGMyOTQ3X3ZhbF9yZWFkMTYoY29uc3Qgc3RydWN0IGx0YzI5NDdfZGF0YSAqc3QsDQo+ID4g Y29uc3QgdTggcmVnLA0KPiA+ICsJCQkJdTY0ICp2YWwpDQo+ID4gK3sNCj4gPiArCV9fYmUxNiBf X3ZhbCA9IDA7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IHJlZ21hcF9idWxr X3JlYWQoc3QtPm1hcCwgcmVnLCAmX192YWwsIDIpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQly ZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCSp2YWwgPSBiZTE2X3RvX2NwdShfX3ZhbCk7DQo+ID4g Kw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgX19sdGMy OTQ3X3ZhbF9yZWFkMjQoY29uc3Qgc3RydWN0IGx0YzI5NDdfZGF0YSAqc3QsDQo+ID4gY29uc3Qg dTggcmVnLA0KPiA+ICsJCQkJdTY0ICp2YWwpDQo+ID4gK3sNCj4gPiArCV9fYmUzMiBfX3ZhbCA9 IDA7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IHJlZ21hcF9idWxrX3JlYWQo c3QtPm1hcCwgcmVnLCAmX192YWwsIDMpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4g cmV0Ow0KPiA+ICsNCj4gPiArCSp2YWwgPSBiZTMyX3RvX2NwdShfX3ZhbCkgPj4gODsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX2x0YzI5 NDdfdmFsX3JlYWQ2NChjb25zdCBzdHJ1Y3QgbHRjMjk0N19kYXRhICpzdCwNCj4gPiBjb25zdCB1 OCByZWcsDQo+ID4gKwkJCQl1NjQgKnZhbCkNCj4gPiArew0KPiA+ICsJX19iZTY0IF9fdmFsID0g MDsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gcmVnbWFwX2J1bGtfcmVhZChz dC0+bWFwLCByZWcsICZfX3ZhbCwgNik7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiBy ZXQ7DQo+ID4gKw0KPiA+ICsJKnZhbCA9IGJlNjRfdG9fY3B1KF9fdmFsKSA+PiAxNjsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBsdGMyOTQ3 X3ZhbF9yZWFkKHN0cnVjdCBsdGMyOTQ3X2RhdGEgKnN0LCBjb25zdCB1OCByZWcsDQo+ID4gKwkJ CSAgICBjb25zdCB1OCBwYWdlLCBjb25zdCBzaXplX3Qgc2l6ZSwgczY0ICp2YWwpDQo+ID4gK3sN Cj4gPiArCWludCByZXQ7DQo+ID4gKwl1NjQgX192YWwgPSAwOw0KPiA+ICsNCj4gPiArCW11dGV4 X2xvY2soJnN0LT5sb2NrKTsNCj4gPiArDQo+ID4gKwlpZiAoc3QtPnJlc2V0KSB7DQo+ID4gKwkJ bXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7DQo+ID4gKwkJcmV0dXJuIC1FUEVSTTsNCj4gDQo+IE5v dCBzdXJlIHdoYXQgdGhlIGVycm9yIGhlcmUgc2hvdWxkIGJlLCBidXQgRVBFUk0gaXMgbm90IGNv cnJlY3QuDQo+IA0KPiBVbmRlciB3aGljaCBjb25kaXRpb25zIHdvdWxkIHRoaXMgZnVuY3Rpb24g YmUgY2FsbGVkIHdoaWxlIGluDQo+IHN1c3BlbmQgPw0KDQpIb25lc3RseSwgdGhpcyBpcyBtb3Jl IGxpa2UgYSBzYW5pdHkgY2hlY2suIEknbSBub3Qgc3VyZSBpZiB3ZSBjYW4gZ2V0DQpoZXJlIGlu IHN1c3BlbmQgbW9kZS4gRG9uJ3QgdXNlcmxhbmQgYXBwcyBjYW4gc3RpbGwgcnVuIGluIHN1c3Bl bmQ/IEkNCmd1ZXNzIHNvIGJ1dCBJJ20gbm90IDEwMCUgc3VyZSBvbiB0aGlzLiBEbyB5b3UgaGF2 ZSBhbnkgcmVjb21tZW5kYXRpb24NCmZvciB0aGUgZXJyb3IgaGVyZT8NCg0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCXJldCA9IHJlZ21hcF93cml0ZShzdC0+bWFwLCBMVEMyOTQ3X1JFR19QQUdFX0NU UkwsIHBhZ2UpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCW11dGV4X3VubG9jaygmc3QtPmxv Y2spOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhz dC0+ZGV2LCAiUmVhZCB2YWwsIHJlZzolMDJYLCBwOiVkIHN6OiV6dVxuIiwgcmVnLA0KPiA+IHBh Z2UsDQo+ID4gKwkJc2l6ZSk7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChzaXplKSB7DQo+ID4gKwlj YXNlIDI6DQo+ID4gKwkJcmV0ID0gX19sdGMyOTQ3X3ZhbF9yZWFkMTYoc3QsIHJlZywgJl9fdmFs KTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgMzoNCj4gPiArCQlyZXQgPSBfX2x0YzI5NDdf dmFsX3JlYWQyNChzdCwgcmVnLCAmX192YWwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSA2 Og0KPiA+ICsJCXJldCA9IF9fbHRjMjk0N192YWxfcmVhZDY0KHN0LCByZWcsICZfX3ZhbCk7DQo+ ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWRldl9lcnIoc3QtPmRldiwgIklu dmFsaWQgc2l6ZSglenUpIHRvIHJlYWQiLCBzaXplKTsNCj4gDQo+IEZvbGxvd2luZyB0aGUgY29k ZSBmbG93LCB0aGlzIGlzIGRlYWQgY29kZS4gQW4gZXJyb3IgbWVzc2FnZQ0KPiBzZWVtcyBwb2lu dGxlc3MuDQoNCldpbGwgcmVtb3ZlIHRoZSBgZGV2X2VycmAgY2FsbC4NCg0KPiA+ICsJCXJldCA9 IC1FSU5WQUw7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbXV0ZXhfdW5s b2NrKCZzdC0+bG9jayk7DQo+ID4gKw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0 Ow0KPiA+ICsNCj4gPiArCSp2YWwgPSBzaWduX2V4dGVuZDY0KF9fdmFsLCAoOCAqIHNpemUpIC0g MSk7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhzdC0+ZGV2LCAiR290IHM6JWxsZCwgdTolMDE2bGxY XG4iLCAqdmFsLCBfX3ZhbCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbnQgX19sdGMyOTQ3X3ZhbF93cml0ZTY0KGNvbnN0IHN0cnVjdCBsdGMy OTQ3X2RhdGEgKnN0LA0KPiA+IGNvbnN0IHU4IHJlZywNCj4gPiArCQkJCSBjb25zdCB1NjQgdmFs KQ0KPiA+ICt7DQo+ID4gKwlfX2JlNjQgX192YWw7DQo+ID4gKw0KPiA+ICsJX192YWwgPSBjcHVf dG9fYmU2NCh2YWwgPDwgMTYpOw0KPiA+ICsJcmV0dXJuIHJlZ21hcF9idWxrX3dyaXRlKHN0LT5t YXAsIHJlZywgJl9fdmFsLCA2KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX2x0 YzI5NDdfdmFsX3dyaXRlMTYoY29uc3Qgc3RydWN0IGx0YzI5NDdfZGF0YSAqc3QsDQo+ID4gY29u c3QgdTggcmVnLA0KPiA+ICsJCQkJIGNvbnN0IHUxNiB2YWwpDQo+ID4gK3sNCj4gPiArCV9fYmUx NiBfX3ZhbDsNCj4gPiArDQo+ID4gKwlfX3ZhbCA9IGNwdV90b19iZTE2KHZhbCk7DQo+ID4gKwly ZXR1cm4gcmVnbWFwX2J1bGtfd3JpdGUoc3QtPm1hcCwgcmVnLCAmX192YWwsIDIpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGx0YzI5NDdfdmFsX3dyaXRlKHN0cnVjdCBsdGMyOTQ3 X2RhdGEgKnN0LCBjb25zdCB1OA0KPiA+IHJlZywNCj4gPiArCQkJICAgICBjb25zdCB1OCBwYWdl LCBjb25zdCBzaXplX3Qgc2l6ZSwgY29uc3QNCj4gPiB1NjQgdmFsKQ0KPiA+ICt7DQo+ID4gKwlp bnQgcmV0Ow0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJnN0LT5sb2NrKTsNCj4gPiArCS8qDQo+ ID4gKwkgKiBEbyBub3QgYWxsb3cgY2hhbm5lbCByZWFkaW5ncyBpZiBkZXZpY2UgaXMgaW4gc2xl ZXAgc3RhdGUuDQo+ID4gKwkgKiBBIHJlYWQvd3JpdGUgb24gdGhlIHNwaS9pMmMgYnVzIHdvdWxk IGJyaW5nIHRoZSBkZXZpY2UNCj4gPiBwcmVtYXR1cmVseQ0KPiA+ICsJICogb3V0IG9mIHNsZWVw Lg0KPiA+ICsJICovDQo+ID4gKwlpZiAoc3QtPnJlc2V0KSB7DQo+ID4gKwkJbXV0ZXhfdW5sb2Nr KCZzdC0+bG9jayk7DQo+ID4gKwkJcmV0dXJuIC1FUEVSTTsNCj4gPiArCX0NCj4gPiArCS8qIHNl dCBkZXZpY2Ugb24gY29ycmVjdCBwYWdlICovDQo+ID4gKwlyZXQgPSByZWdtYXBfd3JpdGUoc3Qt Pm1hcCwgTFRDMjk0N19SRUdfUEFHRV9DVFJMLCBwYWdlKTsNCj4gPiArCWlmIChyZXQpIHsNCj4g PiArCQltdXRleF91bmxvY2soJnN0LT5sb2NrKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCWRldl9kYmcoc3QtPmRldiwgIldyaXRlIHZhbCwgcjolMDJYLCBwOiVk LCBzejolenUsDQo+ID4gdmFsOiUwMTZsbFhcbiIsDQo+ID4gKwkJcmVnLCBwYWdlLCBzaXplLCB2 YWwpOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAoc2l6ZSkgew0KPiA+ICsJY2FzZSAyOg0KPiA+ICsJ CXJldCA9IF9fbHRjMjk0N192YWxfd3JpdGUxNihzdCwgcmVnLCB2YWwpOw0KPiA+ICsJCWJyZWFr Ow0KPiA+ICsJY2FzZSA2Og0KPiA+ICsJCXJldCA9IF9fbHRjMjk0N192YWxfd3JpdGU2NChzdCwg cmVnLCB2YWwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlkZXZfZXJy KHN0LT5kZXYsICJJbnZhbGlkIHNpemUoJXp1KSB0byB3cml0ZSIsIHNpemUpOw0KPiA+ICsJCXJl dCA9IC1FSU5WQUw7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbXV0ZXhf dW5sb2NrKCZzdC0+bG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCBsdGMyOTQ3X3Jlc2V0X2hpc3Rvcnkoc3RydWN0IGx0YzI5NDdf ZGF0YSAqc3QsIGNvbnN0IHU4DQo+ID4gcmVnX2gsDQo+ID4gKwkJCQkgY29uc3QgdTggcmVnX2wp DQo+ID4gK3sNCj4gPiArCWludCByZXQ7DQo+ID4gKwkvKg0KPiA+ICsJICogbGV0J3MgcmVzZXQg dGhlIHRyYWNraW5nIHJlZ2lzdGVyJ3MuIFRyYWNraW5nIHJlZ2lzdGVyJ3MNCj4gPiBoYXZlIGFs bA0KPiA+ICsJICogMiBieXRlcyBzaXplDQo+ID4gKwkgKi8NCj4gPiArCXJldCA9IGx0YzI5NDdf dmFsX3dyaXRlKHN0LCByZWdfaCwgUEFHRTAsIDIsIDB4ODAwMFUpOw0KPiA+ICsJaWYgKHJldCkN Cj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXJldHVybiBsdGMyOTQ3X3ZhbF93cml0 ZShzdCwgcmVnX2wsIFBBR0UwLCAyLCAweDdGRkZVKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBsdGMyOTQ3X2FsYXJtX3JlYWQoc3RydWN0IGx0YzI5NDdfZGF0YSAqc3QsIGNvbnN0 IHU4DQo+ID4gcmVnLA0KPiA+ICsJCQkgICAgICBjb25zdCB1MzIgbWFzaywgbG9uZyAqdmFsKQ0K PiA+ICt7DQo+ID4gKwl1OCBvZmZzZXQgPSByZWcgLSBMVEMyOTQ3X1JFR19TVEFUVVM7DQo+ID4g KwkvKiArMSB0byBpbmNsdWRlIHN0YXR1cyByZWcgKi8NCj4gPiArCWNoYXIgYWxhcm1zW0xUQzI5 NDdfQUxFUlRTX1NJWkUgKyAxXTsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCW1l bXNldChhbGFybXMsIDAsIHNpemVvZihhbGFybXMpKTsNCj4gPiArDQo+ID4gKwltdXRleF9sb2Nr KCZzdC0+bG9jayk7DQo+ID4gKw0KPiA+ICsJaWYgKHN0LT5yZXNldCkgew0KPiA+ICsJCXJldCA9 IC1FUEVSTTsNCj4gPiArCQlnb3RvIHVubG9jazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQg PSByZWdtYXBfd3JpdGUoc3QtPm1hcCwgTFRDMjk0N19SRUdfUEFHRV9DVFJMLCBQQUdFMCk7DQo+ ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWdvdG8gdW5sb2NrOw0KPiA+ICsNCj4gPiArCWRldl9kYmco c3QtPmRldiwgIlJlYWQgYWxhcm0sIHJlZzolMDJYLCBtYXNrOiUwMlhcbiIsIHJlZywNCj4gPiBt YXNrKTsNCj4gPiArCS8qDQo+ID4gKwkgKiBBcyBzdGF0ZWQgaW4gdGhlIGRhdGFzaGVldCwgd2hl biBUaHJlc2hvbGQgYW5kIE92ZXJmbG93DQo+ID4gcmVnaXN0ZXJzDQo+ID4gKwkgKiBhcmUgdXNl ZCwgdGhlIHN0YXR1cyBhbmQgYWxsIGFsZXJ0IHJlZ2lzdGVycyBtdXN0IGJlIHJlYWQgaW4NCj4g PiBvbmUNCj4gPiArCSAqIG11bHRpLWJ5dGUgdHJhbnNhY3Rpb24uDQo+ID4gKwkgKi8NCj4gPiAr CXJldCA9IHJlZ21hcF9idWxrX3JlYWQoc3QtPm1hcCwgTFRDMjk0N19SRUdfU1RBVFVTLCBhbGFy bXMsDQo+ID4gKwkJCSAgICAgICBzaXplb2YoYWxhcm1zKSk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ ICsJCWdvdG8gdW5sb2NrOw0KPiA+ICsNCj4gPiArCS8qIGdldCB0aGUgYWxhcm0gKi8NCj4gPiAr CSp2YWwgPSAhIShhbGFybXNbb2Zmc2V0XSAmIG1hc2spOw0KPiA+ICt1bmxvY2s6DQo+ID4gKwlt dXRleF91bmxvY2soJnN0LT5sb2NrKTsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBzc2l6ZV90IGx0YzI5NDdfc2V0X3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRl diwNCj4gPiArCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsDQo+ID4gKwkJCQkgY29u c3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBsdGMyOTQ3 X2RhdGEgKnN0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gKwlzdHJ1Y3Qgc2Vuc29yX2Rl dmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGEpOw0KPiA+ICsJaW50 IHJldDsNCj4gPiArCXU4IHJlZywgcGFnZSA9IFBBR0UxOw0KPiA+ICsJczY0IHZhbCA9IDA7DQo+ ID4gKw0KPiA+ICsJcmV0ID0ga3N0cnRvbGwoYnVmLCAxMCwgJnZhbCk7DQo+ID4gKwlpZiAocmV0 KSB7DQo+ID4gKwkJZGV2X2VycihzdC0+ZGV2LCAiRmFpbGVkIHRvIGNvbnZlcnQgdGhlIHZhbHVl XG4iKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXN3aXRjaCAo YXR0ci0+aW5kZXgpIHsNCj4gPiArCWNhc2UgTFRDMjk0N19QT1dFUl9USFJFX0g6DQo+ID4gKwkJ dmFsID0gY2xhbXBfdmFsKHZhbCwgU0hSVF9NSU4sIFNIUlRfTUFYKTsNCj4gPiArCQlyZXQgPSBs dGMyOTQ3X3ZhbF93cml0ZShzdCwgTFRDMjk0N19SRUdfUE9XRVJfVEhSRV9ILA0KPiA+IFBBR0Ux LCAyLA0KPiA+ICsJCQkJCWRpdl9zNjQodmFsLCAyMDAwMDApKTsNCj4gPiArCQlyZXR1cm4gcmV0 ID8gcmV0IDogY291bnQ7DQo+ID4gKwljYXNlIExUQzI5NDdfUE9XRVJfVEhSRV9MOg0KPiA+ICsJ CXZhbCA9IGNsYW1wX3ZhbCh2YWwsIFNIUlRfTUlOLCBTSFJUX01BWCk7DQo+ID4gKwkJcmV0ID0g bHRjMjk0N192YWxfd3JpdGUoc3QsIExUQzI5NDdfUkVHX1BPV0VSX1RIUkVfTCwNCj4gPiBQQUdF MSwgMiwNCj4gPiArCQkJCQlkaXZfczY0KHZhbCwgMjAwMDAwKSk7DQo+ID4gKwkJcmV0dXJuIHJl dCA/IHJldCA6IGNvdW50Ow0KPiA+ICsJY2FzZSBMVEMyOTQ3X0VORVJHWTFfVEhSRV9IOg0KPiA+ ICsJCXJlZyA9IExUQzI5NDdfUkVHX0VORVJHWTFfVEhSRV9IOw0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsJY2FzZSBMVEMyOTQ3X0VORVJHWTFfVEhSRV9MOg0KPiA+ICsJCXJlZyA9IExUQzI5NDdfUkVH X0VORVJHWTFfVEhSRV9MOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBMVEMyOTQ3X0VORVJH WTJfVEhSRV9IOg0KPiA+ICsJCXJlZyA9IExUQzI5NDdfUkVHX0VORVJHWTJfVEhSRV9IOw0KPiA+ ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBMVEMyOTQ3X0VORVJHWTJfVEhSRV9MOg0KPiA+ICsJCXJl ZyA9IExUQzI5NDdfUkVHX0VORVJHWTJfVEhSRV9MOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2Fz ZSBMVEMyOTQ3X0VORVJHWTFfSU5QVVQ6DQo+ID4gKwkJcmVnID0gTFRDMjk0N19SRUdfRU5FUkdZ MTsNCj4gPiArCQlwYWdlID0gUEFHRTA7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIExUQzI5 NDdfRU5FUkdZMl9JTlBVVDoNCj4gPiArCQlyZWcgPSBMVEMyOTQ3X1JFR19FTkVSR1kyOw0KPiA+ ICsJCXBhZ2UgPSBQQUdFMDsNCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJ cmV0dXJuIC1FTk9UU1VQUDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwl2YWwgPSBjbGFtcF92YWwo dmFsLCBFTkVSR1lfTUlOLCBFTkVSR1lfTUFYKTsNCj4gPiArCS8qIHdlIGFyZSBsb3NpbmcgdGhl IGZyYWN0aW9uYWwgcGFydCBoZXJlLi4uICovDQo+ID4gKwl2YWwgPSBkaXZfczY0KHZhbCAqIDEw MDAsIHN0LT5sc2JfZW5lcmd5KTsNCj4gPiArDQo+ID4gKwlyZXQgPSBsdGMyOTQ3X3ZhbF93cml0 ZShzdCwgcmVnLCBwYWdlLCA2LCB2YWwpOw0KPiA+ICsNCj4gPiArCXJldHVybiByZXQgPyByZXQg OiBjb3VudDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3QgbHRjMjk0N19zaG93 X3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gPiArCQkJCSAgc3RydWN0IGRldmljZV9hdHRy aWJ1dGUgKmRhLCBjaGFyDQo+ID4gKmJ1ZikNCj4gPiArew0KPiA+ICsJc3RydWN0IGx0YzI5NDdf ZGF0YSAqc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArCXN0cnVjdCBzZW5zb3JfZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7DQo+ID4gKwlpbnQg cmV0Ow0KPiA+ICsJczY0IHZhbCA9IDA7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChhdHRyLT5pbmRl eCkgew0KPiA+ICsJY2FzZSBMVEMyOTQ3X1BPV0VSX0lOUFVUOg0KPiA+ICsJCXJldCA9IGx0YzI5 NDdfdmFsX3JlYWQoc3QsIExUQzI5NDdfUkVHX1BPV0VSLCBQQUdFMCwgMywNCj4gPiAmdmFsKTsN Cj4gPiArCQlyZXR1cm4gcmV0ID8gcmV0IDogc3ByaW50ZihidWYsICIlbGxkXG4iLCB2YWwgKiA1 MDAwMCk7DQo+ID4gKwljYXNlIExUQzI5NDdfUE9XRVJfVEhSRV9IOg0KPiA+ICsJCXJldCA9IGx0 YzI5NDdfdmFsX3JlYWQoc3QsIExUQzI5NDdfUkVHX1BPV0VSX1RIUkVfSCwNCj4gPiBQQUdFMSwg MiwNCj4gPiArCQkJCSAgICAgICAmdmFsKTsNCj4gPiArCQlyZXR1cm4gcmV0ID8gcmV0IDogc3By aW50ZihidWYsICIlbGxkXG4iLCB2YWwgKg0KPiA+IDIwMDAwMCk7DQo+ID4gKwljYXNlIExUQzI5 NDdfUE9XRVJfVEhSRV9MOg0KPiA+ICsJCXJldCA9IGx0YzI5NDdfdmFsX3JlYWQoc3QsIExUQzI5 NDdfUkVHX1BPV0VSX1RIUkVfTCwNCj4gPiBQQUdFMSwgMiwNCj4gPiArCQkJCSAgICAgICAmdmFs KTsNCj4gPiArCQlyZXR1cm4gcmV0ID8gcmV0IDogc3ByaW50ZihidWYsICIlbGxkXG4iLCB2YWwg Kg0KPiA+IDIwMDAwMCk7DQo+ID4gKwljYXNlIExUQzI5NDdfUE9XRVJfSElHSEVTVDoNCj4gPiAr CQlyZXQgPSBsdGMyOTQ3X3ZhbF9yZWFkKHN0LCBMVEMyOTQ3X1JFR19QT1dFUl9NQVgsDQo+ID4g UEFHRTAsIDIsDQo+ID4gKwkJCQkgICAgICAgJnZhbCk7DQo+ID4gKwkJcmV0dXJuIHJldCA/IHJl dCA6IHNwcmludGYoYnVmLCAiJWxsZFxuIiwgdmFsICoNCj4gPiAyMDAwMDApOw0KPiA+ICsJY2Fz ZSBMVEMyOTQ3X1BPV0VSX0xPV0VTVDoNCj4gPiArCQlyZXQgPSBsdGMyOTQ3X3ZhbF9yZWFkKHN0 LCBMVEMyOTQ3X1JFR19QT1dFUl9NSU4sDQo+ID4gUEFHRTAsIDIsDQo+ID4gKwkJCQkgICAgICAg JnZhbCk7DQo+ID4gKwkJcmV0dXJuIHJldCA/IHJldCA6IHNwcmludGYoYnVmLCAiJWxsZFxuIiwg dmFsICoNCj4gPiAyMDAwMDApOw0KPiA+ICsJY2FzZSBMVEMyOTQ3X0VORVJHWTFfVEhSRV9IOg0K PiA+ICsJCXJldCA9IGx0YzI5NDdfdmFsX3JlYWQoc3QsIExUQzI5NDdfUkVHX0VORVJHWTFfVEhS RV9ILA0KPiA+IFBBR0UxLCA2LA0KPiA+ICsJCQkJICAgICAgICZ2YWwpOw0KPiA+ICsJCWJyZWFr Ow0KPiA+ICsJY2FzZSBMVEMyOTQ3X0VORVJHWTFfVEhSRV9MOg0KPiA+ICsJCXJldCA9IGx0YzI5 NDdfdmFsX3JlYWQoc3QsIExUQzI5NDdfUkVHX0VORVJHWTFfVEhSRV9MLA0KPiA+IFBBR0UxLCA2 LA0KPiA+ICsJCQkJICAgICAgICZ2YWwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBMVEMy OTQ3X0VORVJHWTJfVEhSRV9IOg0KPiA+ICsJCXJldCA9IGx0YzI5NDdfdmFsX3JlYWQoc3QsIExU QzI5NDdfUkVHX0VORVJHWTJfVEhSRV9ILA0KPiA+IFBBR0UxLCA2LA0KPiA+ICsJCQkJICAgICAg ICZ2YWwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBMVEMyOTQ3X0VORVJHWTJfVEhSRV9M Og0KPiA+ICsJCXJldCA9IGx0YzI5NDdfdmFsX3JlYWQoc3QsIExUQzI5NDdfUkVHX0VORVJHWTJf VEhSRV9MLA0KPiA+IFBBR0UxLCA2LA0KPiA+ICsJCQkJICAgICAgICZ2YWwpOw0KPiA+ICsJCWJy ZWFrOw0KPiA+ICsJY2FzZSBMVEMyOTQ3X0VORVJHWTFfSU5QVVQ6DQo+ID4gKwkJcmV0ID0gbHRj Mjk0N192YWxfcmVhZChzdCwgTFRDMjk0N19SRUdfRU5FUkdZMSwgUEFHRTAsDQo+ID4gNiwgJnZh bCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIExUQzI5NDdfRU5FUkdZMl9JTlBVVDoNCj4g PiArCQlyZXQgPSBsdGMyOTQ3X3ZhbF9yZWFkKHN0LCBMVEMyOTQ3X1JFR19FTkVSR1kyLCBQQUdF MCwNCj4gPiA2LCAmdmFsKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogaWYgd2UgZ290IGhlcmUs IG11c3QgYmUgYW4gZW5lcmd5IHJlYWRpbmcuLi4gKi8NCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJ cmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwkvKiB2YWx1ZSBpbiBtaWNyb0pvdWxlLiBzdC0+bHNi X2VuZXJneSB3YXMgbXVsdGlwbGllZCBieSAxMEU5DQo+ID4gKi8NCj4gPiArCXZhbCA9IGRpdl9z NjQodmFsICogc3QtPmxzYl9lbmVyZ3ksIDEwMDApOw0KPiA+ICsNCj4gPiArCXJldHVybiBzcHJp bnRmKGJ1ZiwgIiVsbGRcbiIsIHZhbCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6 ZV90IGx0YzI5NDdfc2hvd19hbGVydChzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4gKwkJCQkgIHN0 cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwgY2hhcg0KPiA+ICpidWYpDQo+ID4gK3sNCj4gPiAr CXN0cnVjdCBsdGMyOTQ3X2RhdGEgKnN0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gKwlz dHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIo ZGEpOw0KPiA+ICsJbG9uZyBhbGVydDsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiAr CXN3aXRjaCAoYXR0ci0+aW5kZXgpIHsNCj4gPiArCWNhc2UgTFRDMjk0N19FTkVSR1kxX01BWF9B TEFSTToNCj4gPiArCQlyZXQgPSBsdGMyOTQ3X2FsYXJtX3JlYWQoc3QsIExUQzI5NDdfUkVHX1NU QVRFLA0KPiA+ICsJCQkJCSBMVEMyOTQ3X01BWF9FTkVSR1kxX01BU0ssDQo+ID4gJmFsZXJ0KTsN Cj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgTFRDMjk0N19FTkVSR1kxX01JTl9BTEFSTToNCj4g PiArCQlyZXQgPSBsdGMyOTQ3X2FsYXJtX3JlYWQoc3QsIExUQzI5NDdfUkVHX1NUQVRFLA0KPiA+ ICsJCQkJCSBMVEMyOTQ3X01JTl9FTkVSR1kxX01BU0ssDQo+ID4gJmFsZXJ0KTsNCj4gPiArCQli cmVhazsNCj4gPiArCWNhc2UgTFRDMjk0N19FTkVSR1kyX01BWF9BTEFSTToNCj4gPiArCQlyZXQg PSBsdGMyOTQ3X2FsYXJtX3JlYWQoc3QsIExUQzI5NDdfUkVHX1NUQVRFLA0KPiA+ICsJCQkJCSBM VEMyOTQ3X01BWF9FTkVSR1kyX01BU0ssDQo+ID4gJmFsZXJ0KTsNCj4gPiArCQlicmVhazsNCj4g PiArCWNhc2UgTFRDMjk0N19FTkVSR1kyX01JTl9BTEFSTToNCj4gPiArCQlyZXQgPSBsdGMyOTQ3 X2FsYXJtX3JlYWQoc3QsIExUQzI5NDdfUkVHX1NUQVRFLA0KPiA+ICsJCQkJCSBMVEMyOTQ3X01J Tl9FTkVSR1kyX01BU0ssDQo+ID4gJmFsZXJ0KTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2Ug TFRDMjk0N19FTkVSR1kxX09WRVJGX0FMQVJNOg0KPiA+ICsJCXJldCA9IGx0YzI5NDdfYWxhcm1f cmVhZChzdCwgTFRDMjk0N19SRUdfU1RBVENFT0YsDQo+ID4gKwkJCQkJIExUQzI5NDdfTUlOX0VO RVJHWTFfT19NQVNLLA0KPiA+ICZhbGVydCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIExU QzI5NDdfRU5FUkdZMl9PVkVSRl9BTEFSTToNCj4gPiArCQlyZXQgPSBsdGMyOTQ3X2FsYXJtX3Jl YWQoc3QsIExUQzI5NDdfUkVHX1NUQVRDRU9GLA0KPiA+ICsJCQkJCSBMVEMyOTQ3X01JTl9FTkVS R1kyX09fTUFTSywNCj4gPiAmYWxlcnQpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBMVEMy OTQ3X0ZBVUxUOg0KPiA+ICsJY2FzZSBMVEMyOTQ3X0VORVJHWV9GQVVMVDoNCj4gPiArCQlyZXQg PSBsdGMyOTQ3X2FsYXJtX3JlYWQoc3QsIExUQzI5NDdfUkVHX1NUQVRVUywgYXR0ci0NCj4gPiA+ aW5kZXgsDQo+ID4gKwkJCQkJICZhbGVydCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0 Og0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiBy ZXQgPyByZXQgOiBzcHJpbnRmKGJ1ZiwgIiVsaVxuIiwgYWxlcnQpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IGx0YzI5NDdfcmVhZF90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgY29u c3QgdTMyIGF0dHIsDQo+ID4gbG9uZyAqdmFsLA0KPiA+ICsJCQkgICAgIGNvbnN0IGludCBjaGFu bmVsKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJc3RydWN0IGx0YzI5NDdfZGF0YSAq c3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArCXM2NCBfX3ZhbCA9IDA7DQo+ID4gKw0K PiA+ICsJaWYgKGNoYW5uZWwgPCAwIHx8IGNoYW5uZWwgPiBMVEMyOTQ3X1RFTVBfRkFOX0NIQU4p IHsNCj4gPiArCQlkZXZfZXJyKHN0LT5kZXYsICJJbnZhbGlkIGNoYW4lZCBmb3IgdGVtcGVyYXR1 cmUiLA0KPiA+IGNoYW5uZWwpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCXN3aXRjaCAoYXR0cikgew0KPiA+ICsJY2FzZSBod21vbl90ZW1wX2lucHV0Og0K PiA+ICsJCXJldCA9IGx0YzI5NDdfdmFsX3JlYWQoc3QsIExUQzI5NDdfUkVHX1RFTVAsIFBBR0Uw LCAyLA0KPiA+ICZfX3ZhbCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIGh3bW9uX3RlbXBf aGlnaGVzdDoNCj4gPiArCQlyZXQgPSBsdGMyOTQ3X3ZhbF9yZWFkKHN0LCBMVEMyOTQ3X1JFR19U RU1QX01BWCwgUEFHRTAsDQo+ID4gMiwNCj4gPiArCQkJCSAgICAgICAmX192YWwpOw0KPiA+ICsJ CWJyZWFrOw0KPiA+ICsJY2FzZSBod21vbl90ZW1wX2xvd2VzdDoNCj4gPiArCQlyZXQgPSBsdGMy OTQ3X3ZhbF9yZWFkKHN0LCBMVEMyOTQ3X1JFR19URU1QX01JTiwgUEFHRTAsDQo+ID4gMiwNCj4g PiArCQkJCSAgICAgICAmX192YWwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBod21vbl90 ZW1wX21heF9hbGFybToNCj4gPiArCQlpZiAoY2hhbm5lbCA9PSBMVEMyOTQ3X1RFTVBfRkFOX0NI QU4pDQo+ID4gKwkJCXJldHVybiBsdGMyOTQ3X2FsYXJtX3JlYWQoc3QsDQo+ID4gTFRDMjk0N19S RUdfU1RBVFZULA0KPiA+ICsJCQkJCQkgIExUQzI5NDdfTUFYX1RFTVBfRkFOXw0KPiA+IE1BU0ss DQo+ID4gKwkJCQkJCSAgdmFsKTsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXJldHVybiBsdGMyOTQ3 X2FsYXJtX3JlYWQoc3QsDQo+ID4gTFRDMjk0N19SRUdfU1RBVFZULA0KPiA+ICsJCQkJCQkgIExU QzI5NDdfTUFYX1RFTVBfTUFTSw0KPiA+ICwgdmFsKTsNCj4gPiArCWNhc2UgaHdtb25fdGVtcF9t aW5fYWxhcm06DQo+ID4gKwkJaWYgKGNoYW5uZWwgPT0gTFRDMjk0N19URU1QX0ZBTl9DSEFOKQ0K PiA+ICsJCQlyZXR1cm4JbHRjMjk0N19hbGFybV9yZWFkKHN0LA0KPiA+IExUQzI5NDdfUkVHX1NU QVRWVCwNCj4gPiArCQkJCQkJICAgTFRDMjk0N19NSU5fVEVNUF9GQU4NCj4gPiBfTUFTSywNCj4g PiArCQkJCQkJICAgdmFsKTsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXJldHVybglsdGMyOTQ3X2Fs YXJtX3JlYWQoc3QsDQo+ID4gTFRDMjk0N19SRUdfU1RBVFZULA0KPiA+ICsJCQkJCQkgICBMVEMy OTQ3X01JTl9URU1QX01BUw0KPiA+IEssIHZhbCk7DQo+ID4gKwljYXNlIGh3bW9uX3RlbXBfbWF4 Og0KPiA+ICsJCWlmIChjaGFubmVsID09IExUQzI5NDdfVEVNUF9GQU5fQ0hBTikNCj4gPiArCQkJ cmV0ID0gbHRjMjk0N192YWxfcmVhZChzdCwNCj4gPiBMVEMyOTQ3X1JFR19URU1QX0ZBTl9USFJF X0gsDQo+ID4gKwkJCQkJICAgICAgIFBBR0UxLCAyLCAmX192YWwpOw0KPiA+ICsJCWVsc2UNCj4g PiArCQkJcmV0ID0gbHRjMjk0N192YWxfcmVhZChzdCwNCj4gPiBMVEMyOTQ3X1JFR19URU1QX1RI UkVfSCwNCj4gPiArCQkJCQkgICAgICAgUEFHRTEsIDIsICZfX3ZhbCk7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKwljYXNlIGh3bW9uX3RlbXBfbWluOg0KPiA+ICsJCWlmIChjaGFubmVsID09IExUQzI5 NDdfVEVNUF9GQU5fQ0hBTikNCj4gPiArCQkJcmV0ID0gbHRjMjk0N192YWxfcmVhZChzdCwNCj4g PiBMVEMyOTQ3X1JFR19URU1QX0ZBTl9USFJFX0wsDQo+ID4gKwkJCQkJICAgICAgIFBBR0UxLCAy LCAmX192YWwpOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJcmV0ID0gbHRjMjk0N192YWxfcmVhZChz dCwNCj4gPiBMVEMyOTQ3X1JFR19URU1QX1RIUkVfTCwNCj4gPiArCQkJCQkgICAgICAgUEFHRTEs IDIsICZfX3ZhbCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXJldHVy biAtRU5PVFNVUFA7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1 cm4gcmV0Ow0KPiA+ICsNCj4gPiArCS8qIGluIG1pbGlkZWdyZWVzIGNlbGNpdXMsIHRlbXAgaXMg Z2l2ZW4gYnk6ICovDQo+ID4gKwkqdmFsID0gKF9fdmFsICogMjA0KSArIDU1MDsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBsdGMyOTQ3X3Jl YWRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB1MzIgYXR0ciwNCj4gPiBsb25nICp2 YWwpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBsdGMyOTQ3X2RhdGEgKnN0ID0gZGV2X2dldF9kcnZk YXRhKGRldik7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChhdHRyKSB7DQo+ID4gKwljYXNlIGh3bW9u X3Bvd2VyX21heF9hbGFybToNCj4gPiArCQlyZXR1cm4gbHRjMjk0N19hbGFybV9yZWFkKHN0LCBM VEMyOTQ3X1JFR19TVEFUSVAsDQo+ID4gKwkJCQkJICBMVEMyOTQ3X01BWF9QT1dFUl9NQVNLLCB2 YWwpOw0KPiA+ICsJY2FzZSBod21vbl9wb3dlcl9taW5fYWxhcm06DQo+ID4gKwkJcmV0dXJuIGx0 YzI5NDdfYWxhcm1fcmVhZChzdCwgTFRDMjk0N19SRUdfU1RBVElQLA0KPiA+ICsJCQkJCSAgTFRD Mjk0N19NSU5fUE9XRVJfTUFTSywgdmFsKTsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcmV0dXJu IC1FTk9UU1VQUDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCBsdGMyOTQ3X3JlYWRfY3VycihzdHJ1Y3QgZGV2aWNlICpkZXYs IGNvbnN0IHUzMiBhdHRyLA0KPiA+IGxvbmcgKnZhbCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGx0 YzI5NDdfZGF0YSAqc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArCWludCByZXQ7DQo+ ID4gKwl1OCBsc2IgPSAxMjsgLyogaW4gbUEgKi8NCj4gPiArCXM2NCBfX3ZhbCA9IDA7DQo+ID4g Kw0KPiA+ICsJc3dpdGNoIChhdHRyKSB7DQo+ID4gKwljYXNlIGh3bW9uX2N1cnJfaW5wdXQ6DQo+ ID4gKwkJcmV0ID0gbHRjMjk0N192YWxfcmVhZChzdCwgTFRDMjk0N19SRUdfQ1VSUkVOVCwgUEFH RTAsDQo+ID4gMywNCj4gPiArCQkJCSAgICAgICAmX192YWwpOw0KPiA+ICsJCWxzYiA9IDM7DQo+ ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIGh3bW9uX2N1cnJfaGlnaGVzdDoNCj4gPiArCQlyZXQg PSBsdGMyOTQ3X3ZhbF9yZWFkKHN0LCBMVEMyOTQ3X1JFR19DVVJSRU5UX01BWCwNCj4gPiBQQUdF MCwgMiwNCj4gPiArCQkJCSAgICAgICAmX192YWwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2Fz ZSBod21vbl9jdXJyX2xvd2VzdDoNCj4gPiArCQlyZXQgPSBsdGMyOTQ3X3ZhbF9yZWFkKHN0LCBM VEMyOTQ3X1JFR19DVVJSRU5UX01JTiwNCj4gPiBQQUdFMCwgMiwNCj4gPiArCQkJCSAgICAgICAm X192YWwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBod21vbl9jdXJyX21heF9hbGFybToN Cj4gPiArCQlyZXR1cm4gbHRjMjk0N19hbGFybV9yZWFkKHN0LCBMVEMyOTQ3X1JFR19TVEFUSVAs DQo+ID4gKwkJCQkJICBMVEMyOTQ3X01BWF9DVVJSRU5UX01BU0ssDQo+ID4gdmFsKTsNCj4gPiAr CWNhc2UgaHdtb25fY3Vycl9taW5fYWxhcm06DQo+ID4gKwkJcmV0dXJuIGx0YzI5NDdfYWxhcm1f cmVhZChzdCwgTFRDMjk0N19SRUdfU1RBVElQLA0KPiA+ICsJCQkJCSAgTFRDMjk0N19NSU5fQ1VS UkVOVF9NQVNLLA0KPiA+IHZhbCk7DQo+ID4gKwljYXNlIGh3bW9uX2N1cnJfbWF4Og0KPiA+ICsJ CXJldCA9IGx0YzI5NDdfdmFsX3JlYWQoc3QsIExUQzI5NDdfUkVHX0NVUlJFTlRfVEhSRV9ILA0K PiA+IFBBR0UxLCAyLA0KPiA+ICsJCQkJICAgICAgICZfX3ZhbCk7DQo+ID4gKwkJYnJlYWs7DQo+ ID4gKwljYXNlIGh3bW9uX2N1cnJfbWluOg0KPiA+ICsJCXJldCA9IGx0YzI5NDdfdmFsX3JlYWQo c3QsIExUQzI5NDdfUkVHX0NVUlJFTlRfVEhSRV9MLA0KPiA+IFBBR0UxLCAyLA0KPiA+ICsJCQkJ ICAgICAgICZfX3ZhbCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXJl dHVybiAtRU5PVFNVUFA7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQly ZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCSp2YWwgPSBfX3ZhbCAqIGxzYjsNCj4gPiArDQo+ID4g KwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBsdGMyOTQ3X3JlYWRf aW4oc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB1MzIgYXR0ciwNCj4gPiBsb25nICp2YWwsDQo+ ID4gKwkJCSAgIGNvbnN0IGludCBjaGFubmVsKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbHRjMjk0 N19kYXRhICpzdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsJaW50IHJldDsNCj4gPiAr CXU4IGxzYiA9IDI7IC8qIGluIG1WICovDQo+ID4gKwlzNjQgX192YWwgPSAwOw0KPiA+ICsNCj4g PiArCWlmIChjaGFubmVsIDwgMCB8fCBjaGFubmVsID4gTFRDMjk0N19WT0xUQUdFX0RWQ0NfQ0hB Tikgew0KPiA+ICsJCWRldl9lcnIoc3QtPmRldiwgIkludmFsaWQgY2hhbiVkIGZvciB2b2x0YWdl IiwNCj4gPiBjaGFubmVsKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlzd2l0Y2ggKGF0dHIpIHsNCj4gPiArCWNhc2UgaHdtb25faW5faW5wdXQ6DQo+ID4g KwkJaWYgKGNoYW5uZWwgPT0gTFRDMjk0N19WT0xUQUdFX0RWQ0NfQ0hBTikgew0KPiA+ICsJCQly ZXQgPSBsdGMyOTQ3X3ZhbF9yZWFkKHN0LCBMVEMyOTQ3X1JFR19EVkNDLA0KPiA+IFBBR0UwLCAy LA0KPiA+ICsJCQkJCSAgICAgICAmX192YWwpOw0KPiA+ICsJCQlsc2IgPSAxNDU7DQo+ID4gKwkJ fSBlbHNlIHsNCj4gPiArCQkJcmV0ID0gbHRjMjk0N192YWxfcmVhZChzdCwgTFRDMjk0N19SRUdf Vk9MVEFHRSwNCj4gPiBQQUdFMCwNCj4gPiArCQkJCQkgICAgICAgMiwgJl9fdmFsKTsNCj4gPiAr CQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIGh3bW9uX2luX2hpZ2hlc3Q6DQo+ID4gKwkJ aWYgKGNoYW5uZWwgPT0gTFRDMjk0N19WT0xUQUdFX0RWQ0NfQ0hBTikgew0KPiA+ICsJCQlyZXQg PSBsdGMyOTQ3X3ZhbF9yZWFkKHN0LA0KPiA+IExUQzI5NDdfUkVHX0RWQ0NfTUFYLCBQQUdFMCwN Cj4gPiArCQkJCQkgICAgICAgMiwgJl9fdmFsKTsNCj4gPiArCQkJbHNiID0gMTQ1Ow0KPiA+ICsJ CX0gZWxzZSB7DQo+ID4gKwkJCXJldCA9IGx0YzI5NDdfdmFsX3JlYWQoc3QsDQo+ID4gTFRDMjk0 N19SRUdfVk9MVEFHRV9NQVgsDQo+ID4gKwkJCQkJICAgICAgIFBBR0UwLCAyLCAmX192YWwpOw0K PiA+ICsJCX0NCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgaHdtb25faW5fbG93ZXN0Og0KPiA+ ICsJCWlmIChjaGFubmVsID09IExUQzI5NDdfVk9MVEFHRV9EVkNDX0NIQU4pIHsNCj4gPiArCQkJ cmV0ID0gbHRjMjk0N192YWxfcmVhZChzdCwNCj4gPiBMVEMyOTQ3X1JFR19EVkNDX01JTiwgUEFH RTAsDQo+ID4gKwkJCQkJICAgICAgIDIsICZfX3ZhbCk7DQo+ID4gKwkJCWxzYiA9IDE0NTsNCj4g PiArCQl9IGVsc2Ugew0KPiA+ICsJCQlyZXQgPSBsdGMyOTQ3X3ZhbF9yZWFkKHN0LA0KPiA+IExU QzI5NDdfUkVHX1ZPTFRBR0VfTUlOLA0KPiA+ICsJCQkJCSAgICAgICBQQUdFMCwgMiwgJl9fdmFs KTsNCj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIGh3bW9uX2luX21heF9hbGFy bToNCj4gPiArCQlpZiAoY2hhbm5lbCA9PSBMVEMyOTQ3X1ZPTFRBR0VfRFZDQ19DSEFOKQ0KPiA+ ICsJCQlyZXR1cm4gbHRjMjk0N19hbGFybV9yZWFkKHN0LA0KPiA+IExUQzI5NDdfUkVHX1NUQVRW RFZDQywNCj4gPiArCQkJCQkJICBMVEMyOTQ3X01BWF9WT0xUQUdFX00NCj4gPiBBU0ssDQo+ID4g KwkJCQkJCSAgdmFsKTsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXJldHVybiBsdGMyOTQ3X2FsYXJt X3JlYWQoc3QsDQo+ID4gTFRDMjk0N19SRUdfU1RBVFZULA0KPiA+ICsJCQkJCQkgIExUQzI5NDdf TUFYX1ZPTFRBR0VfTQ0KPiA+IEFTSywNCj4gPiArCQkJCQkJICB2YWwpOw0KPiA+ICsJY2FzZSBo d21vbl9pbl9taW5fYWxhcm06DQo+ID4gKwkJaWYgKGNoYW5uZWwgPT0gTFRDMjk0N19WT0xUQUdF X0RWQ0NfQ0hBTikNCj4gPiArCQkJcmV0dXJuIGx0YzI5NDdfYWxhcm1fcmVhZChzdCwNCj4gPiBM VEMyOTQ3X1JFR19TVEFUVkRWQ0MsDQo+ID4gKwkJCQkJCSAgTFRDMjk0N19NSU5fVk9MVEFHRV9N DQo+ID4gQVNLLA0KPiA+ICsJCQkJCQkgIHZhbCk7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQlyZXR1 cm4gbHRjMjk0N19hbGFybV9yZWFkKHN0LA0KPiA+IExUQzI5NDdfUkVHX1NUQVRWVCwNCj4gPiAr CQkJCQkJICBMVEMyOTQ3X01JTl9WT0xUQUdFX00NCj4gPiBBU0ssDQo+ID4gKwkJCQkJCSAgdmFs KTsNCj4gPiArCWNhc2UgaHdtb25faW5fbWF4Og0KPiA+ICsJCWlmIChjaGFubmVsID09IExUQzI5 NDdfVk9MVEFHRV9EVkNDX0NIQU4pIHsNCj4gPiArCQkJcmV0ID0gbHRjMjk0N192YWxfcmVhZChz dCwNCj4gPiBMVEMyOTQ3X1JFR19EVkNDX1RIUkVfSCwNCj4gPiArCQkJCQkgICAgICAgUEFHRTEs IDIsICZfX3ZhbCk7DQo+ID4gKwkJCWxzYiA9IDE0NTsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJ CQlyZXQgPSBsdGMyOTQ3X3ZhbF9yZWFkKHN0LA0KPiA+IExUQzI5NDdfUkVHX1ZPTFRBR0VfVEhS RV9ILA0KPiA+ICsJCQkJCSAgICAgICBQQUdFMSwgMiwgJl9fdmFsKTsNCj4gPiArCQl9DQo+ID4g KwkJYnJlYWs7DQo+ID4gKwljYXNlIGh3bW9uX2luX21pbjoNCj4gPiArCQlpZiAoY2hhbm5lbCA9 PSBMVEMyOTQ3X1ZPTFRBR0VfRFZDQ19DSEFOKSB7DQo+ID4gKwkJCXJldCA9IGx0YzI5NDdfdmFs X3JlYWQoc3QsDQo+ID4gTFRDMjk0N19SRUdfRFZDQ19USFJFX0wsDQo+ID4gKwkJCQkJICAgICAg IFBBR0UxLCAyLCAmX192YWwpOw0KPiA+ICsJCQlsc2IgPSAxNDU7DQo+ID4gKwkJfSBlbHNlIHsN Cj4gPiArCQkJcmV0ID0gbHRjMjk0N192YWxfcmVhZChzdCwNCj4gPiBMVEMyOTQ3X1JFR19WT0xU QUdFX1RIUkVfTCwNCj4gPiArCQkJCQkgICAgICAgUEFHRTEsIDIsICZfX3ZhbCk7DQo+ID4gKwkJ fQ0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlyZXR1cm4gLUVOT1RTVVBQ Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4g PiArDQo+ID4gKwkqdmFsID0gX192YWwgKiBsc2I7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbHRjMjk0N19yZWFkKHN0cnVjdCBkZXZpY2Ug KmRldiwgZW51bQ0KPiA+IGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLA0KPiA+ICsJCQl1MzIgYXR0 ciwgaW50IGNoYW5uZWwsIGxvbmcgKnZhbCkNCj4gPiArew0KPiA+ICsJc3dpdGNoICh0eXBlKSB7 DQo+ID4gKwljYXNlIGh3bW9uX2luOg0KPiA+ICsJCXJldHVybiBsdGMyOTQ3X3JlYWRfaW4oZGV2 LCBhdHRyLCB2YWwsIGNoYW5uZWwpOw0KPiA+ICsJY2FzZSBod21vbl9jdXJyOg0KPiA+ICsJCXJl dHVybiBsdGMyOTQ3X3JlYWRfY3VycihkZXYsIGF0dHIsIHZhbCk7DQo+ID4gKwljYXNlIGh3bW9u X3Bvd2VyOg0KPiA+ICsJCXJldHVybiBsdGMyOTQ3X3JlYWRfcG93ZXIoZGV2LCBhdHRyLCB2YWwp Ow0KPiA+ICsJY2FzZSBod21vbl90ZW1wOg0KPiA+ICsJCXJldHVybiBsdGMyOTQ3X3JlYWRfdGVt cChkZXYsIGF0dHIsIHZhbCwgY2hhbm5lbCk7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXJldHVy biAtRU5PVFNVUFA7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbHRj Mjk0N193cml0ZV90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgdTMyIGF0dHIsDQo+ID4g KwkJCSAgICAgIGxvbmcgdmFsLCBjb25zdCBpbnQgY2hhbm5lbCkNCj4gPiArew0KPiA+ICsJc3Ry dWN0IGx0YzI5NDdfZGF0YSAqc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArDQo+ID4g KwlpZiAoY2hhbm5lbCA8IDAgfHwgY2hhbm5lbCA+IExUQzI5NDdfVEVNUF9GQU5fQ0hBTikgew0K PiA+ICsJCWRldl9lcnIoc3QtPmRldiwgIkludmFsaWQgY2hhbiVkIGZvciB0ZW1wZXJhdHVyZSIs DQo+ID4gY2hhbm5lbCk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJc3dpdGNoIChhdHRyKSB7DQo+ID4gKwljYXNlIGh3bW9uX3RlbXBfcmVzZXRfaGlzdG9y eToNCj4gPiArCQlpZiAodmFsICE9IDEpDQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJ CXJldHVybiBsdGMyOTQ3X3Jlc2V0X2hpc3Rvcnkoc3QsIExUQzI5NDdfUkVHX1RFTVBfTUFYLA0K PiA+ICsJCQkJCSAgICAgTFRDMjk0N19SRUdfVEVNUF9NSU4pOw0KPiA+ICsJY2FzZSBod21vbl90 ZW1wX21heDoNCj4gPiArCQl2YWwgPSBjbGFtcF92YWwodmFsLCBTSFJUX01JTiwgU0hSVF9NQVgp Ow0KPiA+ICsJCWlmIChjaGFubmVsID09IExUQzI5NDdfVEVNUF9GQU5fQ0hBTikgew0KPiA+ICsJ CQlpZiAoIXN0LT5ncGlvX291dCkNCj4gPiArCQkJCXJldHVybiAtRU5PVFNVUFA7DQo+ID4gKw0K PiA+ICsJCQlyZXR1cm4gbHRjMjk0N192YWxfd3JpdGUoc3QsDQo+ID4gKwkJCQkJTFRDMjk0N19S RUdfVEVNUF9GQU5fVEhSRV9ILA0KPiA+IFBBR0UxLCAyLA0KPiA+ICsJCQkJCURJVl9ST1VORF9D TE9TRVNUKHZhbCAtIDU1MCwNCj4gPiAyMDQpKTsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJCQly ZXR1cm4gbHRjMjk0N192YWxfd3JpdGUoc3QsDQo+ID4gTFRDMjk0N19SRUdfVEVNUF9USFJFX0gs DQo+ID4gKwkJCQkJUEFHRTEsIDIsDQo+ID4gKwkJCQkJRElWX1JPVU5EX0NMT1NFU1QodmFsIC0g NTUwLA0KPiA+IDIwNCkpOw0KPiA+ICsJCX0NCj4gPiArCWNhc2UgaHdtb25fdGVtcF9taW46DQo+ ID4gKwkJdmFsID0gY2xhbXBfdmFsKHZhbCwgU0hSVF9NSU4sIFNIUlRfTUFYKTsNCj4gPiArCQlp ZiAoY2hhbm5lbCA9PSBMVEMyOTQ3X1RFTVBfRkFOX0NIQU4pIHsNCj4gPiArCQkJaWYgKCFzdC0+ Z3Bpb19vdXQpDQo+ID4gKwkJCQlyZXR1cm4gLUVOT1RTVVBQOw0KPiA+ICsNCj4gPiArCQkJcmV0 dXJuIGx0YzI5NDdfdmFsX3dyaXRlKHN0LA0KPiA+ICsJCQkJCUxUQzI5NDdfUkVHX1RFTVBfRkFO X1RIUkVfTCwNCj4gPiBQQUdFMSwgMiwNCj4gPiArCQkJCQlESVZfUk9VTkRfQ0xPU0VTVCh2YWwg LSA1NTAsDQo+ID4gMjA0KSk7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJcmV0dXJuIGx0YzI5 NDdfdmFsX3dyaXRlKHN0LA0KPiA+IExUQzI5NDdfUkVHX1RFTVBfVEhSRV9MLA0KPiA+ICsJCQkJ CVBBR0UxLCAyLA0KPiA+ICsJCQkJCURJVl9ST1VORF9DTE9TRVNUKHZhbCAtIDU1MCwNCj4gPiAy MDQpKTsNCj4gPiArCQl9DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXJldHVybiAtRU5PVFNVUFA7 DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbHRjMjk0N193cml0ZV9w b3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHUzMiBhdHRyLA0KPiA+ICsJCQkgICAgICAg bG9uZyB2YWwpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBsdGMyOTQ3X2RhdGEgKnN0ID0gZGV2X2dl dF9kcnZkYXRhKGRldik7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChhdHRyKSB7DQo+ID4gKwljYXNl IGh3bW9uX3Bvd2VyX3Jlc2V0X2hpc3Rvcnk6DQo+ID4gKwkJaWYgKHZhbCAhPSAxKQ0KPiA+ICsJ CQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQlyZXR1cm4gbHRjMjk0N19yZXNldF9oaXN0b3J5KHN0 LCBMVEMyOTQ3X1JFR19QT1dFUl9NQVgsDQo+ID4gKwkJCQkJICAgICBMVEMyOTQ3X1JFR19QT1dF Ul9NSU4pOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlyZXR1cm4gLUVOT1RTVVBQOw0KPiA+ICsJ fQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGx0YzI5NDdfd3JpdGVfY3VycihzdHJ1 Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHUzMiBhdHRyLA0KPiA+ICsJCQkgICAgICBsb25nIHZhbCkN Cj4gPiArew0KPiA+ICsJc3RydWN0IGx0YzI5NDdfZGF0YSAqc3QgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKGF0dHIpIHsNCj4gPiArCWNhc2UgaHdtb25fY3Vy cl9yZXNldF9oaXN0b3J5Og0KPiA+ICsJCWlmICh2YWwgIT0gMSkNCj4gPiArCQkJcmV0dXJuIC1F SU5WQUw7DQo+ID4gKwkJcmV0dXJuIGx0YzI5NDdfcmVzZXRfaGlzdG9yeShzdCwNCj4gPiBMVEMy OTQ3X1JFR19DVVJSRU5UX01BWCwNCj4gPiArCQkJCQkgICAgIExUQzI5NDdfUkVHX0NVUlJFTlRf TUlOKTsNCj4gPiArCWNhc2UgaHdtb25fY3Vycl9tYXg6DQo+ID4gKwkJdmFsID0gY2xhbXBfdmFs KHZhbCwgU0hSVF9NSU4sIFNIUlRfTUFYKTsNCj4gPiArCQlyZXR1cm4gbHRjMjk0N192YWxfd3Jp dGUoc3QsDQo+ID4gTFRDMjk0N19SRUdfQ1VSUkVOVF9USFJFX0gsIFBBR0UxLA0KPiA+ICsJCQkJ CSAyLCBESVZfUk9VTkRfQ0xPU0VTVCh2YWwsDQo+ID4gMTIpKTsNCj4gPiArCWNhc2UgaHdtb25f Y3Vycl9taW46DQo+ID4gKwkJdmFsID0gY2xhbXBfdmFsKHZhbCwgU0hSVF9NSU4sIFNIUlRfTUFY KTsNCj4gPiArCQlyZXR1cm4gbHRjMjk0N192YWxfd3JpdGUoc3QsDQo+ID4gTFRDMjk0N19SRUdf Q1VSUkVOVF9USFJFX0wsIFBBR0UxLA0KPiA+ICsJCQkJCSAyLCBESVZfUk9VTkRfQ0xPU0VTVCh2 YWwsDQo+ID4gMTIpKTsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcmV0dXJuIC1FTk9UU1VQUDsN Cj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBsdGMyOTQ3X3dyaXRlX2lu KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgdTMyIGF0dHIsDQo+ID4gbG9uZyB2YWwsDQo+ID4g KwkJCSAgICBjb25zdCBpbnQgY2hhbm5lbCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGx0YzI5NDdf ZGF0YSAqc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArDQo+ID4gKwlpZiAoY2hhbm5l bCA+IExUQzI5NDdfVk9MVEFHRV9EVkNDX0NIQU4pIHsNCj4gPiArCQlkZXZfZXJyKHN0LT5kZXYs ICJJbnZhbGlkIGNoYW4lZCBmb3Igdm9sdGFnZSIsDQo+ID4gY2hhbm5lbCk7DQo+ID4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChhdHRyKSB7DQo+ID4g KwljYXNlIGh3bW9uX2luX3Jlc2V0X2hpc3Rvcnk6DQo+ID4gKwkJaWYgKHZhbCAhPSAxKQ0KPiA+ ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwkJaWYgKGNoYW5uZWwgPT0gTFRDMjk0 N19WT0xUQUdFX0RWQ0NfQ0hBTikNCj4gPiArCQkJcmV0dXJuIGx0YzI5NDdfcmVzZXRfaGlzdG9y eShzdCwNCj4gPiBMVEMyOTQ3X1JFR19EVkNDX01BWCwNCj4gPiArCQkJCQkJICAgICBMVEMyOTQ3 X1JFR19EVkNDX00NCj4gPiBJTik7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQlyZXR1cm4gbHRjMjk0 N19yZXNldF9oaXN0b3J5KHN0LA0KPiA+ICsJCQkJCQkgICAgIExUQzI5NDdfUkVHX1ZPTFRBRw0K PiA+IEVfTUFYLA0KPiA+ICsJCQkJCQkgICAgIExUQzI5NDdfUkVHX1ZPTFRBRw0KPiA+IEVfTUlO KTsNCj4gPiArCWNhc2UgaHdtb25faW5fbWF4Og0KPiA+ICsJCXZhbCA9IGNsYW1wX3ZhbCh2YWws IFNIUlRfTUlOLCBTSFJUX01BWCk7DQo+ID4gKw0KPiA+ICsJCWlmIChjaGFubmVsID09IExUQzI5 NDdfVk9MVEFHRV9EVkNDX0NIQU4pDQo+ID4gKwkJCXJldHVybiBsdGMyOTQ3X3ZhbF93cml0ZShz dCwNCj4gPiBMVEMyOTQ3X1JFR19EVkNDX1RIUkVfSCwNCj4gPiArCQkJCQkJIFBBR0UxLCAyLA0K PiA+ICsJCQkJCQkgRElWX1JPVU5EX0NMT1NFU1QodmFsLA0KPiA+IDE0NSkpOw0KPiA+ICsJCWVs c2UNCj4gPiArCQkJcmV0dXJuIGx0YzI5NDdfdmFsX3dyaXRlKHN0LA0KPiA+IExUQzI5NDdfUkVH X1ZPTFRBR0VfVEhSRV9ILA0KPiA+ICsJCQkJCQkgUEFHRTEsIDIsDQo+ID4gKwkJCQkJCSBESVZf Uk9VTkRfQ0xPU0VTVCh2YWwsDQo+ID4gMikpOw0KPiA+ICsJY2FzZSBod21vbl9pbl9taW46DQo+ ID4gKwkJdmFsID0gY2xhbXBfdmFsKHZhbCwgU0hSVF9NSU4sIFNIUlRfTUFYKTsNCj4gPiArDQo+ ID4gKwkJaWYgKGNoYW5uZWwgPT0gTFRDMjk0N19WT0xUQUdFX0RWQ0NfQ0hBTikNCj4gPiArCQkJ cmV0dXJuIGx0YzI5NDdfdmFsX3dyaXRlKHN0LA0KPiA+IExUQzI5NDdfUkVHX0RWQ0NfVEhSRV9M LA0KPiA+ICsJCQkJCQkgUEFHRTEsIDIsDQo+ID4gKwkJCQkJCSBESVZfUk9VTkRfQ0xPU0VTVCh2 YWwsDQo+ID4gMTQ1KSk7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQlyZXR1cm4gbHRjMjk0N192YWxf d3JpdGUoc3QsDQo+ID4gTFRDMjk0N19SRUdfVk9MVEFHRV9USFJFX0wsDQo+ID4gKwkJCQkJCSBQ QUdFMSwgMiwNCj4gPiArCQkJCQkJIERJVl9ST1VORF9DTE9TRVNUKHZhbCwNCj4gPiAyKSk7DQo+ ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXJldHVybiAtRU5PVFNVUFA7DQo+ID4gKwl9DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbHRjMjk0N193cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYs DQo+ID4gKwkJCSBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLA0KPiA+ICsJCQkgdTMyIGF0 dHIsIGludCBjaGFubmVsLCBsb25nIHZhbCkNCj4gPiArew0KPiA+ICsJc3dpdGNoICh0eXBlKSB7 DQo+ID4gKwljYXNlIGh3bW9uX2luOg0KPiA+ICsJCXJldHVybiBsdGMyOTQ3X3dyaXRlX2luKGRl diwgYXR0ciwgdmFsLCBjaGFubmVsKTsNCj4gPiArCWNhc2UgaHdtb25fY3VycjoNCj4gPiArCQly ZXR1cm4gbHRjMjk0N193cml0ZV9jdXJyKGRldiwgYXR0ciwgdmFsKTsNCj4gPiArCWNhc2UgaHdt b25fcG93ZXI6DQo+ID4gKwkJcmV0dXJuIGx0YzI5NDdfd3JpdGVfcG93ZXIoZGV2LCBhdHRyLCB2 YWwpOw0KPiA+ICsJY2FzZSBod21vbl90ZW1wOg0KPiA+ICsJCXJldHVybiBsdGMyOTQ3X3dyaXRl X3RlbXAoZGV2LCBhdHRyLCB2YWwsIGNoYW5uZWwpOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQly ZXR1cm4gLUVOT1RTVVBQOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IGx0YzI5NDdfcmVhZF9sYWJlbHMoc3RydWN0IGRldmljZSAqZGV2LA0KPiA+ICsJCQkgICAgICAg ZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSwNCj4gPiArCQkJICAgICAgIHUzMiBhdHRyLCBp bnQgY2hhbm5lbCwgY29uc3QgY2hhciAqKnN0cikNCj4gPiArew0KPiA+ICsJc3dpdGNoICh0eXBl KSB7DQo+ID4gKwljYXNlIGh3bW9uX2luOg0KPiA+ICsJCWlmIChjaGFubmVsID09IExUQzI5NDdf Vk9MVEFHRV9EVkNDX0NIQU4pDQo+ID4gKwkJCSpzdHIgPSAiRFZDQyI7DQo+ID4gKwkJZWxzZQ0K PiA+ICsJCQkqc3RyID0gIlZQLVZNIjsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCWNhc2UgaHdt b25fY3VycjoNCj4gPiArCQkqc3RyID0gIklQLUlNIjsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiAr CWNhc2UgaHdtb25fdGVtcDoNCj4gPiArCQlpZiAoY2hhbm5lbCA9PSBMVEMyOTQ3X1RFTVBfRkFO X0NIQU4pDQo+ID4gKwkJCSpzdHIgPSAiVEVNUEZBTiI7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQkq c3RyID0gIkFtYmllbnQiOw0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJY2FzZSBod21vbl9wb3dl cjoNCj4gPiArCQkqc3RyID0gIlBvd2VyIjsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCWRlZmF1 bHQ6DQo+ID4gKwkJcmV0dXJuIC1FTk9UU1VQUDsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGludCBsdGMyOTQ3X2luX2lzX3Zpc2libGUoY29uc3QgdTMyIGF0dHIpDQo+ID4g K3sNCj4gPiArCXN3aXRjaCAoYXR0cikgew0KPiA+ICsJY2FzZSBod21vbl9pbl9pbnB1dDoNCj4g PiArCWNhc2UgaHdtb25faW5faGlnaGVzdDoNCj4gPiArCWNhc2UgaHdtb25faW5fbG93ZXN0Og0K PiA+ICsJY2FzZSBod21vbl9pbl9tYXhfYWxhcm06DQo+ID4gKwljYXNlIGh3bW9uX2luX21pbl9h bGFybToNCj4gPiArCWNhc2UgaHdtb25faW5fbGFiZWw6DQo+ID4gKwkJcmV0dXJuIDA0NDQ7DQo+ ID4gKwljYXNlIGh3bW9uX2luX3Jlc2V0X2hpc3Rvcnk6DQo+ID4gKwkJcmV0dXJuIDAyMDA7DQo+ ID4gKwljYXNlIGh3bW9uX2luX21heDoNCj4gPiArCWNhc2UgaHdtb25faW5fbWluOg0KPiA+ICsJ CXJldHVybiAwNjQ0Ow0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCX0N Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBsdGMyOTQ3X2N1cnJfaXNfdmlzaWJsZShj b25zdCB1MzIgYXR0cikNCj4gPiArew0KPiA+ICsJc3dpdGNoIChhdHRyKSB7DQo+ID4gKwljYXNl IGh3bW9uX2N1cnJfaW5wdXQ6DQo+ID4gKwljYXNlIGh3bW9uX2N1cnJfaGlnaGVzdDoNCj4gPiAr CWNhc2UgaHdtb25fY3Vycl9sb3dlc3Q6DQo+ID4gKwljYXNlIGh3bW9uX2N1cnJfbWF4X2FsYXJt Og0KPiA+ICsJY2FzZSBod21vbl9jdXJyX21pbl9hbGFybToNCj4gPiArCWNhc2UgaHdtb25fY3Vy cl9sYWJlbDoNCj4gPiArCQlyZXR1cm4gMDQ0NDsNCj4gPiArCWNhc2UgaHdtb25fY3Vycl9yZXNl dF9oaXN0b3J5Og0KPiA+ICsJCXJldHVybiAwMjAwOw0KPiA+ICsJY2FzZSBod21vbl9jdXJyX21h eDoNCj4gPiArCWNhc2UgaHdtb25fY3Vycl9taW46DQo+ID4gKwkJcmV0dXJuIDA2NDQ7DQo+ID4g KwlkZWZhdWx0Og0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IGx0YzI5NDdfcG93ZXJfaXNfdmlzaWJsZShjb25zdCB1MzIgYXR0cikNCj4g PiArew0KPiA+ICsJc3dpdGNoIChhdHRyKSB7DQo+ID4gKwljYXNlIGh3bW9uX3Bvd2VyX2xhYmVs Og0KPiA+ICsJY2FzZSBod21vbl9wb3dlcl9tYXhfYWxhcm06DQo+ID4gKwljYXNlIGh3bW9uX3Bv d2VyX21pbl9hbGFybToNCj4gPiArCQlyZXR1cm4gMDQ0NDsNCj4gPiArCWNhc2UgaHdtb25fcG93 ZXJfcmVzZXRfaGlzdG9yeToNCj4gPiArCQlyZXR1cm4gMDIwMDsNCj4gPiArCWRlZmF1bHQ6DQo+ ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg bHRjMjk0N190ZW1wX2lzX3Zpc2libGUoY29uc3QgdTMyIGF0dHIpDQo+ID4gK3sNCj4gPiArCXN3 aXRjaCAoYXR0cikgew0KPiA+ICsJY2FzZSBod21vbl90ZW1wX2lucHV0Og0KPiA+ICsJY2FzZSBo d21vbl90ZW1wX2hpZ2hlc3Q6DQo+ID4gKwljYXNlIGh3bW9uX3RlbXBfbG93ZXN0Og0KPiA+ICsJ Y2FzZSBod21vbl90ZW1wX21heF9hbGFybToNCj4gPiArCWNhc2UgaHdtb25fdGVtcF9taW5fYWxh cm06DQo+ID4gKwljYXNlIGh3bW9uX3RlbXBfbGFiZWw6DQo+ID4gKwkJcmV0dXJuIDA0NDQ7DQo+ ID4gKwljYXNlIGh3bW9uX3RlbXBfcmVzZXRfaGlzdG9yeToNCj4gPiArCQlyZXR1cm4gMDIwMDsN Cj4gPiArCWNhc2UgaHdtb25fdGVtcF9tYXg6DQo+ID4gKwljYXNlIGh3bW9uX3RlbXBfbWluOg0K PiA+ICsJCXJldHVybiAwNjQ0Ow0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlyZXR1cm4gMDsNCj4g PiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHVtb2RlX3QgbHRjMjk0N19pc192aXNp YmxlKGNvbnN0IHZvaWQgKmRhdGEsDQo+ID4gKwkJCQkgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVz IHR5cGUsDQo+ID4gKwkJCQkgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCkNCj4gPiArew0KPiA+ICsJ c3dpdGNoICh0eXBlKSB7DQo+ID4gKwljYXNlIGh3bW9uX2luOg0KPiA+ICsJCXJldHVybiBsdGMy OTQ3X2luX2lzX3Zpc2libGUoYXR0cik7DQo+ID4gKwljYXNlIGh3bW9uX2N1cnI6DQo+ID4gKwkJ cmV0dXJuIGx0YzI5NDdfY3Vycl9pc192aXNpYmxlKGF0dHIpOw0KPiA+ICsJY2FzZSBod21vbl9w b3dlcjoNCj4gPiArCQlyZXR1cm4gbHRjMjk0N19wb3dlcl9pc192aXNpYmxlKGF0dHIpOw0KPiA+ ICsJY2FzZSBod21vbl90ZW1wOg0KPiA+ICsJCXJldHVybiBsdGMyOTQ3X3RlbXBfaXNfdmlzaWJs ZShhdHRyKTsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwl9DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hhbm5lbF9pbmZvICps dGMyOTQ3X2luZm9bXSA9IHsNCj4gPiArCUhXTU9OX0NIQU5ORUxfSU5GTyhpbiwNCj4gPiArCQkJ ICAgSFdNT05fSV9JTlBVVCB8IEhXTU9OX0lfTE9XRVNUIHwNCj4gPiBIV01PTl9JX0hJR0hFU1Qg fA0KPiA+ICsJCQkgICBIV01PTl9JX01BWCB8IEhXTU9OX0lfTUlOIHwNCj4gPiBIV01PTl9JX1JF U0VUX0hJU1RPUlkgfA0KPiA+ICsJCQkgICBIV01PTl9JX01JTl9BTEFSTSB8IEhXTU9OX0lfTUFY X0FMQVJNIHwNCj4gPiArCQkJICAgSFdNT05fSV9MQUJFTCwNCj4gPiArCQkJICAgSFdNT05fSV9J TlBVVCB8IEhXTU9OX0lfTE9XRVNUIHwNCj4gPiBIV01PTl9JX0hJR0hFU1QgfA0KPiA+ICsJCQkg ICBIV01PTl9JX01BWCB8IEhXTU9OX0lfTUlOIHwNCj4gPiBIV01PTl9JX1JFU0VUX0hJU1RPUlkg fA0KPiA+ICsJCQkgICBIV01PTl9JX01JTl9BTEFSTSB8IEhXTU9OX0lfTUFYX0FMQVJNIHwNCj4g PiArCQkJICAgSFdNT05fSV9MQUJFTCksDQo+ID4gKwlIV01PTl9DSEFOTkVMX0lORk8oY3VyciwN Cj4gPiArCQkJICAgSFdNT05fQ19JTlBVVCB8IEhXTU9OX0NfTE9XRVNUIHwNCj4gPiBIV01PTl9D X0hJR0hFU1QgfA0KPiA+ICsJCQkgICBIV01PTl9DX01BWCB8IEhXTU9OX0NfTUlOIHwNCj4gPiBI V01PTl9DX1JFU0VUX0hJU1RPUlkgfA0KPiA+ICsJCQkgICBIV01PTl9DX01JTl9BTEFSTSB8IEhX TU9OX0NfTUFYX0FMQVJNIHwNCj4gPiArCQkJICAgSFdNT05fQ19MQUJFTCksDQo+ID4gKwlIV01P Tl9DSEFOTkVMX0lORk8ocG93ZXIsDQo+ID4gKwkJCSAgIEhXTU9OX1BfUkVTRVRfSElTVE9SWSB8 IEhXTU9OX1BfTUFYX0FMQVJNIHwNCj4gPiArCQkJICAgSFdNT05fUF9NSU5fQUxBUk0gfCBIV01P Tl9QX0xBQkVMKSwNCj4gPiArCUhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLA0KPiA+ICsJCQkgICBI V01PTl9UX0lOUFVUIHwgSFdNT05fVF9MT1dFU1QgfA0KPiA+IEhXTU9OX1RfSElHSEVTVCB8DQo+ ID4gKwkJCSAgIEhXTU9OX1RfTUFYIHwgSFdNT05fVF9NSU4gfA0KPiA+IEhXTU9OX1RfUkVTRVRf SElTVE9SWSB8DQo+ID4gKwkJCSAgIEhXTU9OX1RfTUlOX0FMQVJNIHwgSFdNT05fVF9NQVhfQUxB Uk0gfA0KPiA+ICsJCQkgICBIV01PTl9UX0xBQkVMLA0KPiA+ICsJCQkgICBIV01PTl9UX01BWF9B TEFSTSB8IEhXTU9OX1RfTUlOX0FMQVJNIHwNCj4gPiBIV01PTl9UX01BWCB8DQo+ID4gKwkJCSAg IEhXTU9OX1RfTUlOIHwgSFdNT05fVF9MQUJFTCksDQo+ID4gKwlOVUxMDQo+ID4gK307DQo+ID4g Kw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX29wcyBsdGMyOTQ3X2h3bW9uX29wcyA9 IHsNCj4gPiArCS5pc192aXNpYmxlID0gbHRjMjk0N19pc192aXNpYmxlLA0KPiA+ICsJLnJlYWQg PSBsdGMyOTQ3X3JlYWQsDQo+ID4gKwkud3JpdGUgPSBsdGMyOTQ3X3dyaXRlLA0KPiA+ICsJLnJl YWRfc3RyaW5nID0gbHRjMjk0N19yZWFkX2xhYmVscywNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGx0YzI5NDdfY2hpcF9pbmZvID0gew0K PiA+ICsJLm9wcyA9ICZsdGMyOTQ3X2h3bW9uX29wcywNCj4gPiArCS5pbmZvID0gbHRjMjk0N19p bmZvLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyogcG93ZXIgYXR0cmlidXRlcyAtIG5lZWQgdTY0 IHZhbHVlICovDQo+ID4gK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocG93ZXIxX2lucHV0LCAw NDQ0LCBsdGMyOTQ3X3Nob3dfdmFsdWUsDQo+ID4gKwkJCSAgbHRjMjk0N19zZXRfdmFsdWUsIExU QzI5NDdfUE9XRVJfSU5QVVQpOw0KPiA+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHBvd2Vy MV9tYXgsIDA2NDQsIGx0YzI5NDdfc2hvd192YWx1ZSwNCj4gPiArCQkJICBsdGMyOTQ3X3NldF92 YWx1ZSwgTFRDMjk0N19QT1dFUl9USFJFX0gpOw0KPiA+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9B VFRSKHBvd2VyMV9taW4sIDA2NDQsIGx0YzI5NDdfc2hvd192YWx1ZSwNCj4gPiArCQkJICBsdGMy OTQ3X3NldF92YWx1ZSwgTFRDMjk0N19QT1dFUl9USFJFX0wpOw0KPiA+ICtzdGF0aWMgU0VOU09S X0RFVklDRV9BVFRSKHBvd2VyMV9pbnB1dF9oaWdoZXN0LCAwNDQ0LA0KPiA+IGx0YzI5NDdfc2hv d192YWx1ZSwNCj4gPiArCQkJICBsdGMyOTQ3X3NldF92YWx1ZSwgTFRDMjk0N19QT1dFUl9ISUdI RVNUKTsNCj4gPiArc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwb3dlcjFfaW5wdXRfbG93ZXN0 LCAwNDQ0LA0KPiA+IGx0YzI5NDdfc2hvd192YWx1ZSwNCj4gPiArCQkJICBsdGMyOTQ3X3NldF92 YWx1ZSwgTFRDMjk0N19QT1dFUl9MT1dFU1QpOw0KPiA+ICsvKiBlbmVyZ3kgYXR0cmlidXRlcyAq Lw0KPiA+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGVuZXJneTFfaW5wdXQsIDA0NDQsIGx0 YzI5NDdfc2hvd192YWx1ZSwNCj4gPiBOVUxMLA0KPiA+ICsJCQkgIExUQzI5NDdfRU5FUkdZMV9J TlBVVCk7DQo+ID4gK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZW5lcmd5MV9tYXgsIDA2NDQs IGx0YzI5NDdfc2hvd192YWx1ZSwNCj4gPiArCQkJICBsdGMyOTQ3X3NldF92YWx1ZSwgTFRDMjk0 N19FTkVSR1kxX1RIUkVfSCk7DQo+ID4gK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZW5lcmd5 MV9taW4sIDA2NDQsIGx0YzI5NDdfc2hvd192YWx1ZSwNCj4gPiArCQkJICBsdGMyOTQ3X3NldF92 YWx1ZSwgTFRDMjk0N19FTkVSR1kxX1RIUkVfTCk7DQo+ID4gK3N0YXRpYyBTRU5TT1JfREVWSUNF X0FUVFIoZW5lcmd5MV9tYXhfYWxhcm0sIDA0NDQsDQo+ID4gbHRjMjk0N19zaG93X2FsZXJ0LCBO VUxMLA0KPiA+ICsJCQkgIExUQzI5NDdfRU5FUkdZMV9NQVhfQUxBUk0pOw0KPiA+ICtzdGF0aWMg U0VOU09SX0RFVklDRV9BVFRSKGVuZXJneTFfbWluX2FsYXJtLCAwNDQ0LA0KPiA+IGx0YzI5NDdf c2hvd19hbGVydCwgTlVMTCwNCj4gPiArCQkJICBMVEMyOTQ3X0VORVJHWTFfTUlOX0FMQVJNKTsN Cj4gPiArc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihlbmVyZ3kyX2lucHV0LCAwNDQ0LCBsdGMy OTQ3X3Nob3dfdmFsdWUsDQo+ID4gTlVMTCwNCj4gPiArCQkJICBMVEMyOTQ3X0VORVJHWTJfSU5Q VVQpOw0KPiA+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGVuZXJneTJfbWF4LCAwNjQ0LCBs dGMyOTQ3X3Nob3dfdmFsdWUsDQo+ID4gKwkJCSAgbHRjMjk0N19zZXRfdmFsdWUsIExUQzI5NDdf RU5FUkdZMl9USFJFX0gpOw0KPiA+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGVuZXJneTJf bWluLCAwNjQ0LCBsdGMyOTQ3X3Nob3dfdmFsdWUsDQo+ID4gKwkJCSAgbHRjMjk0N19zZXRfdmFs dWUsIExUQzI5NDdfRU5FUkdZMl9USFJFX0wpOw0KPiA+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9B VFRSKGVuZXJneTJfbWF4X2FsYXJtLCAwNDQ0LA0KPiA+IGx0YzI5NDdfc2hvd19hbGVydCwgTlVM TCwNCj4gPiArCQkJICBMVEMyOTQ3X0VORVJHWTJfTUFYX0FMQVJNKTsNCj4gPiArc3RhdGljIFNF TlNPUl9ERVZJQ0VfQVRUUihlbmVyZ3kyX21pbl9hbGFybSwgMDQ0NCwNCj4gPiBsdGMyOTQ3X3No b3dfYWxlcnQsIE5VTEwsDQo+ID4gKwkJCSAgTFRDMjk0N19FTkVSR1kyX01JTl9BTEFSTSk7DQo+ ID4gKy8qDQo+ID4gKyAqIE92ZXJmbG93IGF0dHJpYnV0ZXMgaW5kaWNhdGUgdGhhdCB0aGUgcmVh ZGluZ3Mgb2YgdGhlDQo+ID4gYWNjdW11bGF0ZWQgcmVzdWx0DQo+ID4gKyAqIHJlZ2lzdGVycyBh cmUgaW52YWxpZC4gRnVydGhlcm1vcmUgaXQgc2hvdWxkIGluZGljYXRlIGludmFsaWQNCj4gPiBU QkNUTCBzZXR0aW5ncw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihl bmVyZ3kxX292ZXJmbG93X2FsYXJtLCAwNDQ0LA0KPiA+IGx0YzI5NDdfc2hvd19hbGVydCwNCj4g PiArCQkJICBOVUxMLCBMVEMyOTQ3X0VORVJHWTFfT1ZFUkZfQUxBUk0pOw0KPiA+ICtzdGF0aWMg U0VOU09SX0RFVklDRV9BVFRSKGVuZXJneTJfb3ZlcmZsb3dfYWxhcm0sIDA0NDQsDQo+ID4gbHRj Mjk0N19zaG93X2FsZXJ0LA0KPiA+ICsJCQkgIE5VTEwsIExUQzI5NDdfRU5FUkdZMl9PVkVSRl9B TEFSTSk7DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBGYXVsdCBhdHRyaWJ1dGVzIGluZGljYXRl IHRoYXQgdGhlIHJlYWRpbmdzIGluIHRoZSByZXNwZWN0aXZlDQo+ID4gY2hhbm5lbCBhcmUNCj4g PiArICogbm90IHRvIGJlIHRydXN0ZWQNCj4gPiArICovDQo+ID4gK3N0YXRpYyBTRU5TT1JfREVW SUNFX0FUVFIoZW5lcmd5MV9mYXVsdCwgMDQ0NCwgbHRjMjk0N19zaG93X2FsZXJ0LA0KPiA+ICsJ CQkgIE5VTEwsIExUQzI5NDdfRU5FUkdZX0ZBVUxUKTsNCj4gPiArc3RhdGljIFNFTlNPUl9ERVZJ Q0VfQVRUUihlbmVyZ3kyX2ZhdWx0LCAwNDQ0LCBsdGMyOTQ3X3Nob3dfYWxlcnQsDQo+ID4gKwkJ CSAgTlVMTCwgTFRDMjk0N19FTkVSR1lfRkFVTFQpOw0KPiA+ICtzdGF0aWMgU0VOU09SX0RFVklD RV9BVFRSKGluMF9mYXVsdCwgMDQ0NCwgbHRjMjk0N19zaG93X2FsZXJ0LA0KPiA+ICsJCQkgIE5V TEwsIExUQzI5NDdfRkFVTFQpOw0KPiA+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMV9m YXVsdCwgMDQ0NCwgbHRjMjk0N19zaG93X2FsZXJ0LA0KPiA+ICsJCQkgIE5VTEwsIExUQzI5NDdf RkFVTFQpOw0KPiA+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGN1cnIxX2ZhdWx0LCAwNDQ0 LCBsdGMyOTQ3X3Nob3dfYWxlcnQsDQo+ID4gKwkJCSAgTlVMTCwgTFRDMjk0N19GQVVMVCk7DQo+ ID4gK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfZmF1bHQsIDA0NDQsIGx0YzI5NDdf c2hvd19hbGVydCwNCj4gPiArCQkJICBOVUxMLCBMVEMyOTQ3X0ZBVUxUKTsNCj4gPiArc3RhdGlj IFNFTlNPUl9ERVZJQ0VfQVRUUihwb3dlcjFfZmF1bHQsIDA0NDQsIGx0YzI5NDdfc2hvd19hbGVy dCwNCj4gPiArCQkJICBOVUxMLCBMVEMyOTQ3X0ZBVUxUKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBz dHJ1Y3QgYXR0cmlidXRlICpsdGMyOTQ3X2F0dHJzW10gPSB7DQo+ID4gKwkmc2Vuc29yX2Rldl9h dHRyX2luMF9mYXVsdC5kZXZfYXR0ci5hdHRyLA0KPiA+ICsJJnNlbnNvcl9kZXZfYXR0cl9pbjFf ZmF1bHQuZGV2X2F0dHIuYXR0ciwNCj4gPiArCSZzZW5zb3JfZGV2X2F0dHJfY3VycjFfZmF1bHQu ZGV2X2F0dHIuYXR0ciwNCj4gPiArCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfZmF1bHQuZGV2X2F0 dHIuYXR0ciwNCj4gPiArCSZzZW5zb3JfZGV2X2F0dHJfcG93ZXIxX2lucHV0LmRldl9hdHRyLmF0 dHIsDQo+ID4gKwkmc2Vuc29yX2Rldl9hdHRyX3Bvd2VyMV9tYXguZGV2X2F0dHIuYXR0ciwNCj4g PiArCSZzZW5zb3JfZGV2X2F0dHJfcG93ZXIxX21pbi5kZXZfYXR0ci5hdHRyLA0KPiA+ICsJJnNl bnNvcl9kZXZfYXR0cl9wb3dlcjFfaW5wdXRfaGlnaGVzdC5kZXZfYXR0ci5hdHRyLA0KPiA+ICsJ JnNlbnNvcl9kZXZfYXR0cl9wb3dlcjFfaW5wdXRfbG93ZXN0LmRldl9hdHRyLmF0dHIsDQo+ID4g Kwkmc2Vuc29yX2Rldl9hdHRyX3Bvd2VyMV9mYXVsdC5kZXZfYXR0ci5hdHRyLA0KPiA+ICsJJnNl bnNvcl9kZXZfYXR0cl9lbmVyZ3kxX2lucHV0LmRldl9hdHRyLmF0dHIsDQo+ID4gKwkmc2Vuc29y X2Rldl9hdHRyX2VuZXJneTFfbWF4LmRldl9hdHRyLmF0dHIsDQo+ID4gKwkmc2Vuc29yX2Rldl9h dHRyX2VuZXJneTFfbWluLmRldl9hdHRyLmF0dHIsDQo+ID4gKwkmc2Vuc29yX2Rldl9hdHRyX2Vu ZXJneTFfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsDQo+ID4gKwkmc2Vuc29yX2Rldl9hdHRyX2Vu ZXJneTFfbWluX2FsYXJtLmRldl9hdHRyLmF0dHIsDQo+ID4gKwkmc2Vuc29yX2Rldl9hdHRyX2Vu ZXJneTJfaW5wdXQuZGV2X2F0dHIuYXR0ciwNCj4gPiArCSZzZW5zb3JfZGV2X2F0dHJfZW5lcmd5 Ml9tYXguZGV2X2F0dHIuYXR0ciwNCj4gPiArCSZzZW5zb3JfZGV2X2F0dHJfZW5lcmd5Ml9taW4u ZGV2X2F0dHIuYXR0ciwNCj4gPiArCSZzZW5zb3JfZGV2X2F0dHJfZW5lcmd5Ml9tYXhfYWxhcm0u ZGV2X2F0dHIuYXR0ciwNCj4gPiArCSZzZW5zb3JfZGV2X2F0dHJfZW5lcmd5Ml9taW5fYWxhcm0u ZGV2X2F0dHIuYXR0ciwNCj4gPiArCSZzZW5zb3JfZGV2X2F0dHJfZW5lcmd5MV9vdmVyZmxvd19h bGFybS5kZXZfYXR0ci5hdHRyLA0KPiA+ICsJJnNlbnNvcl9kZXZfYXR0cl9lbmVyZ3kyX292ZXJm bG93X2FsYXJtLmRldl9hdHRyLmF0dHIsDQoNClRoZXNlIG92ZXJmbG93IGF0dHJpYnV0ZXMgYXJl IGtpbmQgb2YgYW4gYWxhcm0gZm9yIHRoZSBlbmVyZ3kgb25lcy4gSXQNCnRlbGxzIHRoYXQgdGhl IGVuZXJneSByZWdpc3RlcnMgYXJlIGFib3V0IHRvIG92ZXJmbG93LiBJIGd1ZXNzIHRoYXQNCnNv bWUgYXBwbGljYXRpb24gY2FuIGVhc2lseSBmaW5kIG91dCB0aGUgbWF4aW11bSB2YWx1ZXMgc3Vw cG9ydGVkIG9uDQp0aGVzZSByZWdpc3RlcnMgYW5kIGltcGxlbWVudCB3aGF0ZXZlciBsb2dpYyB0 aGV5IHdhbnQgaW4gdGhlIGFwcA0KaXRzZWxmLiBTbywgaWYgeW91IHByZWZlciBJIGNhbiBqdXN0 IGRyb3AgdGhpcyBvbmVzPw0KDQo+ID4gKwkmc2Vuc29yX2Rldl9hdHRyX2VuZXJneTFfZmF1bHQu ZGV2X2F0dHIuYXR0ciwNCj4gPiArCSZzZW5zb3JfZGV2X2F0dHJfZW5lcmd5Ml9mYXVsdC5kZXZf YXR0ci5hdHRyLA0KPiANCj4gU29tZSBvZiB0aG9zZSBhcmUgbm9uLXN0YW5kYXJkIGF0dHJpYnV0 ZXMuIFlvdSdsbCBoYXZlDQo+IHRvIGV4cGxhaW4gZWFjaCBpbiBkZXRhaWwsIGVzcGVjaWFsbHkg d2h5IGl0IG1ha2VzIHNlbnNlDQo+IHRvIHByb3ZpZGUgc3VjaCBhdHRyaWJ1dGVzIHRvIHRoZSB1 c2VyIGFuZCB3aHkgeW91IGNhbid0DQo+IHVzZSBzdGFuZGFyZCBhdHRyaWJ1dGVzIGluc3RlYWQu IEFsc28sIGZvciB0aGUgX2ZhdWx0DQo+IGF0dHJpYnV0ZXMsIEkgZG9uJ3QgZW50aXJlbHkgc2Vl IHRoZSBwb2ludC4gSWYgdGhlIGZhdWx0IGJpdA0KPiBpcyBzZXQsIEFEQyByZWFkaW5ncyBhcmUg bm90IHZhbGlkIGJlY2F1c2Ugc3VwcGx5IHZvbHRhZ2UNCj4gaXMgbG93LiBUaGlzIG1lYW5zIHRo YXQgQURDIHJlZ2lzdGVyIHJlYWRzIHdpbGwgYmUgaW52YWxpZC4NCj4gV2hhdCBpcyB0aGUgcG9p bnQgb2YgaGF2aW5nIGEgbm9uLXN0YW5kYXJkIGF0dHJpYnV0ZSAtIHdoaWNoDQo+IGxpa2VseSB3 aWxsIGJlIGlnbm9yZWQgLSBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvciB3aGVuDQo+IGFu IGF0dGVtcHQgaXMgbWFkZSB0byByZWFkIGFuIEFEQyB2YWx1ZSA/DQoNCkkgd2FzIGFsc28gbm90 IHN1cmUgb24gdGhpcyAqX2ZhdWx0IGF0dHJpYnV0ZXMuIFRoZXkgYXJlIHRoZXJlIHRvIHRlbGwN CnRoYXQgdGhlIHJlYWRpbmdzIGFyZSBpbnZhbGlkLiBOb3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0 LCBJJ20gbm90IHN1cmUNCmlmIGl0IGV2ZW4gbWFrZXMgc2Vuc2UgdG8gcmV0dXJuIGVycm9yIGlm IHRoaXMgYml0IGlzIHNldC4gVGhlIHBhcnQgaXMNCmluIGNvbnRpbnVvdXMgbW9kZSBzbywgaXQg bWlnaHQgaGFwcGVuIHRoYXQgd2UgaGF2ZSB0aGUgZmF1bHQgYml0IHNldA0KZm9yIGEgc2hvcnQg dGltZSBidXQgYWZ0ZXJ3YXJkcyB0aGluZ3MgZ28gbm9ybWFsIGFuZCB0aGUgYml0IHdpbGwgc3Rp bGwNCmJlIHNldCB1bnRpbCB3ZSByZWFkIGl0LiBTbyBteSBwb2ludCBpcywgd2UgbWlnaHQgYmUg cmV0dXJuaW5nIGVycm9yDQpmb3IgYSBjb252ZXJzaW9uIHRoYXQgaGFwcGVuZWQgd2F5IGJlZm9y ZSBvdXIgY3VycmVudCByZWFkaW5nLiBBbnkNCnN1Z2dlc3Rpb24gaGVyZT8gV291bGQgeW91IGJl IGZpbmUgaWYgSSBqdXN0IGRyb3AgdGhpcyBhdHRyaWJ1dGVzPw0KICANCj4gT3RoZXJzLCBsaWtl IGVuZXJneTFfaW5wdXQsIG9yIG1vc3Qgb2YgdGhlIHBvd2VyIGF0dHJpYnV0ZXMsDQo+IGFyZSBz dGFuZGFyZCBhdHRyaWJ1dGVzLiBQbGVhc2UgZXhwbGFpbiB0aGUgcmVhc29uaW5nIGZvcg0KPiBu b3QgdXNpbmcgdGhlIHN0YW5kYXJkIEFQSSBmb3IgdGhvc2UuIA0KDQpUaGlzIG9uZXMgd2VyZSBi ZWNhdXNlIHdlIG5lZWQgNjRiaXQgdmFyaWFibGVzLiBGb3IgZW5lcmd5LCB0aGUgcGFydA0KYWxz byBzdXBwb3J0cyB0aGUgYWxhcm1zLCBtYXggYW5kIG1pbiBhdHRyaWJ1dGVzIHNvIEkgaW5jbHVk ZWQgdGhlbS4NCiANCj4gSSBhbSBzdG9wcHBpbmcgd2l0aCB0aGUgcmV2aWV3IGF0IHRoaXMgcG9p bnQuIFdlIHdpbGwgaGF2ZQ0KPiB0byBkaXNjdXNzIGFsbCBub24tc3RhbmRhcmQgYXR0cmlidXRl cyBmaXJzdC4NCj4gDQo+IEd1ZW50ZXINCj4gDQo+ID4gKwlOVUxMLA0KPiA+ICt9Ow0KPiA+ICtB VFRSSUJVVEVfR1JPVVBTKGx0YzI5NDcpOw0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbHRjMjk0 N19jbGtfZGlzYWJsZSh2b2lkICpkYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgY2xrICpleHRj bGsgPSBkYXRhOw0KPiA+ICsNCj4gPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShleHRjbGspOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGx0YzI5NDdfc2V0dXAoc3RydWN0IGx0YzI5 NDdfZGF0YSAqc3QpDQo+ID4gK3sNCj4gPiArCWludCByZXQ7DQo+ID4gKwlzdHJ1Y3QgY2xrICpl eHRjbGs7DQo+ID4gKwl1MzIgZHVtbXksIGRlYWRiYW5kLCBwb2w7DQo+ID4gKwl1MzIgYWNjdW1b Ml07DQo+ID4gKw0KPiA+ICsJLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyIGJ5IHJlYWRpbmcgaXQg Ki8NCj4gPiArCXJldCA9IHJlZ21hcF9yZWFkKHN0LT5tYXAsIExUQzI5NDdfUkVHX1NUQVRVUywg JmR1bW15KTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4g KwkvKiBjaGVjayBleHRlcm5hbCBjbG9jayBwcmVzZW5jZSAqLw0KPiA+ICsJZXh0Y2xrID0gZGV2 bV9jbGtfZ2V0KHN0LT5kZXYsIE5VTEwpOw0KPiA+ICsJaWYgKCFJU19FUlIoZXh0Y2xrKSkgew0K PiA+ICsJCXVuc2lnbmVkIGxvbmcgcmF0ZV9oejsNCj4gPiArCQl1OCBwcmUgPSAwLCBkaXYsIHRi Y3RsOw0KPiA+ICsJCXU2NCBhdXg7DQo+ID4gKw0KPiA+ICsJCS8qIGxldCdzIGNhbGN1bGF0ZSBh bmQgc2V0IHRoZSByaWdodCB2YWx1cyBpbiBUQkNUTCAqLw0KPiA+ICsJCXJhdGVfaHogPSBjbGtf Z2V0X3JhdGUoZXh0Y2xrKTsNCj4gPiArCQlpZiAocmF0ZV9oeiA8IExUQzI5NDdfQ0xLX01JTiB8 fCByYXRlX2h6ID4NCj4gPiBMVEMyOTQ3X0NMS19NQVgpIHsNCj4gPiArCQkJZGV2X2VycihzdC0+ ZGV2LCAiSW52YWxpZCByYXRlOiVsdSBmb3IgZXh0ZXJuYWwNCj4gPiBjbG9jayIsDQo+ID4gKwkJ CQlyYXRlX2h6KTsNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ICsNCj4g PiArCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZXh0Y2xrKTsNCj4gPiArCQlpZiAocmV0KQ0K PiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCQlyZXQgPSBkZXZtX2FkZF9hY3Rpb25f b3JfcmVzZXQoc3QtPmRldiwNCj4gPiBsdGMyOTQ3X2Nsa19kaXNhYmxlLA0KPiA+ICsJCQkJCSAg ICAgICBleHRjbGspOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4g KwkJLyogYXMgaW4gdGFibGUgMSBvZiB0aGUgZGF0YXNoZWV0ICovDQo+ID4gKwkJaWYgKHJhdGVf aHogPj0gTFRDMjk0N19DTEtfTUlOICYmIHJhdGVfaHogPD0gMTAwMDAwMCkNCj4gPiArCQkJcHJl ID0gMDsNCj4gPiArCQllbHNlIGlmIChyYXRlX2h6ID4gMTAwMDAwMCAmJiByYXRlX2h6IDw9IDIw MDAwMDApDQo+ID4gKwkJCXByZSA9IDE7DQo+ID4gKwkJZWxzZSBpZiAocmF0ZV9oeiA+IDIwMDAw MDAgJiYgcmF0ZV9oeiA8PSA0MDAwMDAwKQ0KPiA+ICsJCQlwcmUgPSAyOw0KPiA+ICsJCWVsc2Ug aWYgKHJhdGVfaHogPiA0MDAwMDAwICYmIHJhdGVfaHogPD0gODAwMDAwMCkNCj4gPiArCQkJcHJl ID0gMzsNCj4gPiArCQllbHNlIGlmIChyYXRlX2h6ID4gODAwMDAwMCAmJiByYXRlX2h6IDw9IDE2 MDAwMDAwKQ0KPiA+ICsJCQlwcmUgPSA0Ow0KPiA+ICsJCWVsc2UgaWYgKHJhdGVfaHogPiAxNjAw MDAwMCAmJiByYXRlX2h6IDw9DQo+ID4gTFRDMjk0N19DTEtfTUFYKQ0KPiA+ICsJCQlwcmUgPSA1 Ow0KPiA+ICsJCS8qDQo+ID4gKwkJICogRGl2IGlzIGdpdmVuIGJ5Og0KPiA+ICsJCSAqCWZsb29y KGZyZWYgLyAoMl5QUkUgKiAzMjc2OCkpDQo+ID4gKwkJICovDQo+ID4gKwkJZGl2ID0gcmF0ZV9o eiAvICgoMSA8PCBwcmUpICogMzI3NjgpOw0KPiA+ICsJCXRiY3RsID0gTFRDMjk0N19QUkUocHJl KSB8IExUQzI5NDdfRElWKGRpdik7DQo+ID4gKw0KPiA+ICsJCXJldCA9IHJlZ21hcF93cml0ZShz dC0+bWFwLCBMVEMyOTQ3X1JFR19UQkNUTCwgdGJjdGwpOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4g KwkJCXJldHVybiByZXQ7DQo+ID4gKwkJLyoNCj4gPiArCQkgKiBUaGUgZW5lcmd5IGxzYiBpcyBn aXZlbiBieSAoaW4gVypzKToNCj4gPiArCQkgKiAgICAgIDA2NDE2ICogKDEvZnJlZikgKiAyXlBS RSAqIChESVYgKyAxKQ0KPiA+ICsJCSAqIFRoZSB2YWx1ZSBpcyBtdWx0aXBsaWVkIGJ5IDEwRTkN Cj4gPiArCQkgKi8NCj4gPiArCQlhdXggPSAoZGl2ICsgMSkgKiAoKDEgPDwgcHJlKSAqIDY0MTYw MDAwMFVMTCk7DQo+ID4gKwkJc3QtPmxzYl9lbmVyZ3kgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwo YXV4LCByYXRlX2h6KTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJLyogMTkuODlFLTYgKiAxMEU5 ICovDQo+ID4gKwkJc3QtPmxzYl9lbmVyZ3kgPSAxOTg5MDsNCj4gPiArCX0NCj4gPiArCXJldCA9 IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KHN0LT5kZXYtPm9mX25vZGUsDQo+ID4gKwkJCQkJ ICJhZGksYWNjdW11bGF0b3ItY3RsLXBvbCIsDQo+ID4gYWNjdW0sDQo+ID4gKwkJCQkJICBBUlJB WV9TSVpFKGFjY3VtKSk7DQo+ID4gKwlpZiAoIXJldCkgew0KPiA+ICsJCXUzMiBhY2N1bV9yZWcg PSBMVEMyOTQ3X0FDQ1VNX1BPTF8xKGFjY3VtWzBdKSB8DQo+ID4gKwkJCQlMVEMyOTQ3X0FDQ1VN X1BPTF8yKGFjY3VtWzFdKTsNCj4gPiArDQo+ID4gKwkJcmV0ID0gcmVnbWFwX3dyaXRlKHN0LT5t YXAsIExUQzI5NDdfUkVHX0FDQ1VNX1BPTCwNCj4gPiBhY2N1bV9yZWcpOw0KPiA+ICsJCWlmIChy ZXQpDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKwlyZXQgPSBvZl9wcm9wZXJ0 eV9yZWFkX3UzMihzdC0+ZGV2LT5vZl9ub2RlLA0KPiA+ICsJCQkJICAgImFkaSxhY2N1bXVsYXRp b24tZGVhZGJhbmQtDQo+ID4gbWljcm9hbXAiLA0KPiA+ICsJCQkJICAgJmRlYWRiYW5kKTsNCj4g PiArCWlmICghcmV0KSB7DQo+ID4gKwkJLyogdGhlIExTQiBpcyB0aGUgc2FtZSBhcyB0aGUgY3Vy cmVudCwgc28gM21BICovDQo+ID4gKwkJcmV0ID0gcmVnbWFwX3dyaXRlKHN0LT5tYXAsIExUQzI5 NDdfUkVHX0FDQ1VNX0RFQURCQU5ELA0KPiA+ICsJCQkJICAgZGVhZGJhbmQgLyAoMTAwMCAqIDMp KTsNCj4gPiArCQlpZiAocmV0KQ0KPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsJ LyogY2hlY2sgZ3BpbyBjZmcgKi8NCj4gPiArCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHN0 LT5kZXYtPm9mX25vZGUsICJhZGksZ3Bpby1vdXQtDQo+ID4gcG9sIiwgJnBvbCk7DQo+ID4gKwlp ZiAoIXJldCkgew0KPiA+ICsJCS8qIHNldHVwIEdQSU8gYXMgb3V0cHV0ICovDQo+ID4gKwkJdTMy IGdwaW9fY3RsID0gTFRDMjk0N19HUElPX0VOKDEpIHwNCj4gPiBMVEMyOTQ3X0dQSU9fRkFOX0VO KDEpIHwNCj4gPiArCQkJTFRDMjk0N19HUElPX0ZBTl9QT0wocG9sKTsNCj4gPiArDQo+ID4gKwkJ c3QtPmdwaW9fb3V0ID0gdHJ1ZTsNCj4gPiArCQlyZXQgPSByZWdtYXBfd3JpdGUoc3QtPm1hcCwg TFRDMjk0N19SRUdfR1BJT1NUQVRDVEwsDQo+ID4gZ3Bpb19jdGwpOw0KPiA+ICsJCWlmIChyZXQp DQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9y ZWFkX3UzMl9hcnJheShzdC0+ZGV2LT5vZl9ub2RlLCAiYWRpLGdwaW8tDQo+ID4gaW4tYWNjdW0i LA0KPiA+ICsJCQkJCSBhY2N1bSwgQVJSQVlfU0laRShhY2N1bSkpOw0KPiA+ICsJaWYgKCFyZXQp IHsNCj4gPiArCQkvKg0KPiA+ICsJCSAqIFNldHVwIHRoZSBhY2N1bSBvcHRpb25zLiBUaGUgZ3Bp b2N0bCBpcyBhbHJlYWR5DQo+ID4gZGVmaW5lZCBhcw0KPiA+ICsJCSAqIGlucHV0IGJ5IGRlZmF1 bHQuDQo+ID4gKwkJICovDQo+ID4gKwkJdTMyIGFjY3VtX3ZhbCA9IExUQzI5NDdfQUNDVU1fUE9M XzEoYWNjdW1bMF0pIHwNCj4gPiArCQkJCUxUQzI5NDdfQUNDVU1fUE9MXzIoYWNjdW1bMV0pOw0K PiA+ICsNCj4gPiArCQlpZiAoc3QtPmdwaW9fb3V0KSB7DQo+ID4gKwkJCWRldl9lcnIoc3QtPmRl diwNCj4gPiArCQkJCSJDYW5ub3QgaGF2ZSBpbnB1dCBncGlvIGNvbmZpZyBpZg0KPiA+IGFscmVh ZHkgY29uZmlndXJlZCBhcyBvdXRwdXQiKTsNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4g KwkJfQ0KPiA+ICsNCj4gPiArCQlyZXQgPSByZWdtYXBfd3JpdGUoc3QtPm1hcCwgTFRDMjk0N19S RUdfR1BJT19BQ0NVTSwNCj4gPiBhY2N1bV92YWwpOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4gKwkJ CXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogc2V0IGNvbnRpbnVvcyBtb2Rl ICovDQo+ID4gKwlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHN0LT5tYXAsIExUQzI5NDdfUkVH X0NUUkwsDQo+ID4gKwkJCQkgIExUQzI5NDdfQ09OVF9NT0RFX01BU0ssDQo+ID4gTFRDMjk0N19D T05UX01PREUoMSkpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgbHRjMjk0N19jb3JlX3Byb2Jl KHN0cnVjdCByZWdtYXAgKm1hcCwgY29uc3QgY2hhciAqbmFtZSkNCj4gPiArew0KPiA+ICsJc3Ry dWN0IGx0YzI5NDdfZGF0YSAqc3Q7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByZWdtYXBf Z2V0X2RldmljZShtYXApOw0KPiA+ICsJc3RydWN0IGRldmljZSAqaHdtb247DQo+ID4gKwlpbnQg cmV0Ow0KPiA+ICsNCj4gPiArCXN0ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpzdCksIEdG UF9LRVJORUwpOw0KPiA+ICsJaWYgKCFzdCkNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiAr DQo+ID4gKwlzdC0+bWFwID0gbWFwOw0KPiA+ICsJc3QtPmRldiA9IGRldjsNCj4gPiArCWRldl9z ZXRfZHJ2ZGF0YShkZXYsIHN0KTsNCj4gPiArCW11dGV4X2luaXQoJnN0LT5sb2NrKTsNCj4gPiAr DQo+ID4gKwlyZXQgPSBsdGMyOTQ3X3NldHVwKHN0KTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJ cmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwlod21vbiA9IGRldm1faHdtb25fZGV2aWNlX3JlZ2lz dGVyX3dpdGhfaW5mbyhkZXYsIG5hbWUsIHN0LA0KPiA+ICsJCQkJCQkgICAgICZsdGMyOTQ3X2No aXBfaW5mbw0KPiA+ICwNCj4gPiArCQkJCQkJICAgICBsdGMyOTQ3X2dyb3Vwcyk7DQo+ID4gKwly ZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGh3bW9uKTsNCj4gPiArfQ0KPiA+ICtFWFBPUlRfU1lNQk9M X0dQTChsdGMyOTQ3X2NvcmVfcHJvYmUpOw0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX21heWJl X3VudXNlZCBsdGMyOTQ3X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiAr CXN0cnVjdCBsdGMyOTQ3X2RhdGEgKnN0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gKwl1 MzIgY3RybCA9IDA7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJnN0 LT5sb2NrKTsNCj4gPiArCS8qIGR1bW15IHJlYWQgdG8gd2FrZSB0aGUgZGV2aWNlICovDQo+ID4g KwlyZXQgPSByZWdtYXBfcmVhZChzdC0+bWFwLCBMVEMyOTQ3X1JFR19DVFJMLCAmY3RybCk7DQo+ ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWdvdG8gdW5sb2NrOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4g KwkgKiBXYWl0IGZvciB0aGUgZGV2aWNlLiBJdCB0YWtlcyAxMDBtcyB0byB3YWtlIHVwIHNvLCAx MG1zDQo+ID4gZXh0cmENCj4gPiArCSAqIHNob3VsZCBiZSBlbm91Z2guDQo+ID4gKwkgKi8NCj4g PiArCW1zbGVlcCgxMTApOw0KPiA+ICsJcmV0ID0gcmVnbWFwX3JlYWQoc3QtPm1hcCwgTFRDMjk0 N19SRUdfQ1RSTCwgJmN0cmwpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlnb3RvIHVubG9jazsN Cj4gPiArCS8qIGN0cmwgc2hvdWxkIGJlIDAgKi8NCj4gPiArCWlmIChjdHJsICE9IDApIHsNCj4g PiArCQlkZXZfZXJyKHN0LT5kZXYsICJEZXZpY2UgZmFpbGVkIHRvIHdha2UgdXAsDQo+ID4gY3Rs OiUwMlhcbiIsIGN0cmwpOw0KPiA+ICsJCXJldCA9IC1FVElNRURPVVQ7DQo+ID4gKwkJZ290byB1 bmxvY2s7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc3QtPnJlc2V0ID0gZmFsc2U7DQo+ID4gKwkv KiBzZXQgY29udGludW91cyBtb2RlICovDQo+ID4gKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMo c3QtPm1hcCwgTFRDMjk0N19SRUdfQ1RSTCwNCj4gPiArCQkJCSBMVEMyOTQ3X0NPTlRfTU9ERV9N QVNLLA0KPiA+IExUQzI5NDdfQ09OVF9NT0RFKDEpKTsNCj4gPiArdW5sb2NrOg0KPiA+ICsJbXV0 ZXhfdW5sb2NrKCZzdC0+bG9jayk7DQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGx0YzI5NDdfc3VzcGVuZChzdHJ1Y3QgZGV2 aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBsdGMyOTQ3X2RhdGEgKnN0ID0gZGV2X2dl dF9kcnZkYXRhKGRldik7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2so JnN0LT5sb2NrKTsNCj4gPiArCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhzdC0+bWFwLCBMVEMy OTQ3X1JFR19DVFJMLA0KPiA+ICsJCQkJIExUQzI5NDdfU0hVVERPV05fTUFTSywgMSk7DQo+ID4g KwlpZiAocmV0KQ0KPiA+ICsJCWdvdG8gdW5sb2NrOw0KPiA+ICsNCj4gPiArCXN0LT5yZXNldCA9 IHRydWU7DQo+ID4gK3VubG9jazoNCj4gPiArCW11dGV4X3VubG9jaygmc3QtPmxvY2spOw0KPiA+ ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArU0lNUExFX0RFVl9QTV9PUFMobHRj Mjk0N19wbV9vcHMsIGx0YzI5NDdfc3VzcGVuZCwNCj4gPiBsdGMyOTQ3X3Jlc3VtZSk7DQo+ID4g K0VYUE9SVF9TWU1CT0xfR1BMKGx0YzI5NDdfcG1fb3BzKTsNCj4gPiArDQo+ID4gK2NvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgbHRjMjk0N19vZl9tYXRjaFtdID0gew0KPiA+ICsJeyAuY29tcGF0 aWJsZSA9ICJhZGksbHRjMjk0NyIgfSwNCj4gPiArCXt9DQo+ID4gK307DQo+ID4gK0VYUE9SVF9T WU1CT0xfR1BMKGx0YzI5NDdfb2ZfbWF0Y2gpOw0KPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9m LCBsdGMyOTQ3X29mX21hdGNoKTsNCj4gPiArDQo+ID4gK01PRFVMRV9BVVRIT1IoIk51bm8gU2Eg PG51bm8uc2FAYW5hbG9nLmNvbT4iKTsNCj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJMVEMyOTQ3 IHBvd2VyIGFuZCBlbmVyZ3kgbW9uaXRvciBjb3JlDQo+ID4gZHJpdmVyIik7DQo+ID4gK01PRFVM RV9MSUNFTlNFKCJHUEwiKTsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sdGMyOTQ3 LWkyYy5jIGIvZHJpdmVycy9od21vbi9sdGMyOTQ3LQ0KPiA+IGkyYy5jDQo+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmNmNjA3NGIxMTBhZQ0KPiA+IC0t LSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL2h3bW9uL2x0YzI5NDctaTJjLmMNCj4gPiBA QCAtMCwwICsxLDQ5IEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w DQo+ID4gKy8qDQo+ID4gKyAqIEFuYWxvZyBEZXZpY2VzIExUQzI5NDcgaGlnaCBwcmVjaXNpb24g cG93ZXIgYW5kIGVuZXJneSBtb25pdG9yDQo+ID4gb3ZlciBJMkMNCj4gPiArICoNCj4gPiArICog Q29weXJpZ2h0IDIwMTkgQW5hbG9nIERldmljZXMgSW5jLg0KPiA+ICsgKi8NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L2kyYy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJsdGMyOTQ3Lmgi DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbHRjMjk0N19y ZWdtYXBfY29uZmlnID0gew0KPiA+ICsJLnJlZ19iaXRzID0gOCwNCj4gPiArCS52YWxfYml0cyA9 IDgsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGx0YzI5NDdfcHJvYmUoc3RydWN0 IGkyY19jbGllbnQgKmkyYywNCj4gPiArCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICpp ZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHJlZ21hcCAqbWFwOw0KPiA+ICsNCj4gPiArCW1hcCA9 IGRldm1fcmVnbWFwX2luaXRfaTJjKGkyYywgJmx0YzI5NDdfcmVnbWFwX2NvbmZpZyk7DQo+ID4g KwlpZiAoSVNfRVJSKG1hcCkpDQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIobWFwKTsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gbHRjMjk0N19jb3JlX3Byb2JlKG1hcCwgaTJjLT5uYW1lKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGx0YzI5NDdfaWRb XSA9IHsNCj4gPiArCXsibHRjMjk0NyIsIDB9LA0KPiA+ICsJe30NCj4gPiArfTsNCj4gPiArTU9E VUxFX0RFVklDRV9UQUJMRShpMmMsIGx0YzI5NDdfaWQpOw0KPiA+ICsNCj4gPiArc3RhdGljIHN0 cnVjdCBpMmNfZHJpdmVyIGx0YzI5NDdfZHJpdmVyID0gew0KPiA+ICsJLmRyaXZlciA9IHsNCj4g PiArCQkubmFtZSA9ICJsdGMyOTQ3IiwNCj4gPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBsdGMyOTQ3 X29mX21hdGNoLA0KPiA+ICsJCS5wbSA9ICZsdGMyOTQ3X3BtX29wcywNCj4gPiArCX0sDQo+ID4g KwkucHJvYmUgPSBsdGMyOTQ3X3Byb2JlLA0KPiA+ICsJLmlkX3RhYmxlID0gbHRjMjk0N19pZCwN Cj4gPiArfTsNCj4gPiArbW9kdWxlX2kyY19kcml2ZXIobHRjMjk0N19kcml2ZXIpOw0KPiA+ICsN Cj4gPiArTU9EVUxFX0FVVEhPUigiTnVubyBTYSA8bnVuby5zYUBhbmFsb2cuY29tPiIpOw0KPiA+ ICtNT0RVTEVfREVTQ1JJUFRJT04oIkxUQzI5NDcgSTJDIHBvd2VyIGFuZCBlbmVyZ3kgbW9uaXRv ciBkcml2ZXIiKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2h3bW9uL2x0YzI5NDctc3BpLmMgYi9kcml2ZXJzL2h3bW9uL2x0YzI5NDctDQo+ ID4gc3BpLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAw MC4uYzI0Y2E1NjlkYjFiDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvaHdt b24vbHRjMjk0Ny1zcGkuYw0KPiA+IEBAIC0wLDAgKzEsNTAgQEANCj4gPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogQW5hbG9nIERldmljZXMg TFRDMjk0NyBoaWdoIHByZWNpc2lvbiBwb3dlciBhbmQgZW5lcmd5IG1vbml0b3INCj4gPiBvdmVy IFNQSQ0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAxOSBBbmFsb2cgRGV2aWNlcyBJbmMu DQo+ID4gKyAqLw0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9vZi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9zcGkvc3BpLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAibHRjMjk0Ny5oIg0K PiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGx0YzI5NDdfcmVn bWFwX2NvbmZpZyA9IHsNCj4gPiArCS5yZWdfYml0cyA9IDE2LA0KPiA+ICsJLnZhbF9iaXRzID0g OCwNCj4gPiArCS5yZWFkX2ZsYWdfbWFzayA9IEJJVCgwKSwNCj4gPiArfTsNCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgbHRjMjk0N19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgcmVnbWFwICptYXA7DQo+ID4gKw0KPiA+ICsJbWFwID0gZGV2bV9yZWdt YXBfaW5pdF9zcGkoc3BpLCAmbHRjMjk0N19yZWdtYXBfY29uZmlnKTsNCj4gPiArCWlmIChJU19F UlIobWFwKSkNCj4gPiArCQlyZXR1cm4gUFRSX0VSUihtYXApOw0KPiA+ICsNCj4gPiArCXJldHVy biBsdGMyOTQ3X2NvcmVfcHJvYmUobWFwLCBzcGlfZ2V0X2RldmljZV9pZChzcGkpLT5uYW1lKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIGx0 YzI5NDdfaWRbXSA9IHsNCj4gPiArCXsibHRjMjk0NyIsIDB9LA0KPiA+ICsJe30NCj4gPiArfTsN Cj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShzcGksIGx0YzI5NDdfaWQpOw0KPiA+ICsNCj4gPiAr c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGx0YzI5NDdfZHJpdmVyID0gew0KPiA+ICsJLmRyaXZl ciA9IHsNCj4gPiArCQkubmFtZSA9ICJsdGMyOTQ3IiwNCj4gPiArCQkub2ZfbWF0Y2hfdGFibGUg PSBsdGMyOTQ3X29mX21hdGNoLA0KPiA+ICsJCS5wbSA9ICZsdGMyOTQ3X3BtX29wcywNCj4gPiAr CX0sDQo+ID4gKwkucHJvYmUgPSBsdGMyOTQ3X3Byb2JlLA0KPiA+ICsJLmlkX3RhYmxlID0gbHRj Mjk0N19pZCwNCj4gPiArfTsNCj4gPiArbW9kdWxlX3NwaV9kcml2ZXIobHRjMjk0N19kcml2ZXIp Ow0KPiA+ICsNCj4gPiArTU9EVUxFX0FVVEhPUigiTnVubyBTYSA8bnVuby5zYUBhbmFsb2cuY29t PiIpOw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkxUQzI5NDcgU1BJIHBvd2VyIGFuZCBlbmVy Z3kgbW9uaXRvciBkcml2ZXIiKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2x0YzI5NDcuaCBiL2RyaXZlcnMvaHdtb24vbHRjMjk0 Ny5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjVi OGZmODFhM2RiYQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL2h3bW9uL2x0 YzI5NDcuaA0KPiA+IEBAIC0wLDAgKzEsMTIgQEANCj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAgKi8NCj4gPiArI2lmbmRlZiBfTElOVVhfTFRDMjk0N19IDQo+ID4gKyNk ZWZpbmUgX0xJTlVYX0xUQzI5NDdfSA0KPiA+ICsNCj4gPiArc3RydWN0IHJlZ21hcDsNCj4gPiAr DQo+ID4gK2V4dGVybiBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGx0YzI5NDdfb2ZfbWF0Y2hb XTsNCj4gPiArZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGx0YzI5NDdfcG1fb3BzOw0K PiA+ICsNCj4gPiAraW50IGx0YzI5NDdfY29yZV9wcm9iZShzdHJ1Y3QgcmVnbWFwICptYXAsIGNv bnN0IGNoYXIgKm5hbWUpOw0KPiA+ICsNCj4gPiArI2VuZGlmDQoNCg==