From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1C81FC3F6B0 for ; Tue, 9 Aug 2022 09:43:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231464AbiHIJnG (ORCPT ); Tue, 9 Aug 2022 05:43:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37018 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230378AbiHIJnF (ORCPT ); Tue, 9 Aug 2022 05:43:05 -0400 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.153.233]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D6CE522B29; Tue, 9 Aug 2022 02:43:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1660038180; x=1691574180; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=dIz9+nOcwrvL36INnva9eUYJYBVv9j/CRBtG98gje+I=; b=okbp6JsHg3hec1zLW0ilcoP3xZ37S+b+nLsii1x37AUwNeVyX+/LLSb3 U7X1uBHouVqqEJa6TORvJ788cKL2Ikvs9WqKw4d2B4BmLjgLM4fCrB/QQ 5kjG32UU5erl0h5MlzjSnpMhl8TUyeCb10gKyIUdwMpXRBEDWK9TNAX6c AizAq9W3JeYdlVKoSALvlhDwB6YXmsnEID0ycdVsEv1kQTMNLSmtEmBoJ eAcwN1yMtFlZVHSi/jGaxJC7X0pbrxp61YeQ2KHQcTbgoUXQkwByyeWyB WfGilMY756J4Ay4BmtDNwPMh4YCK+6F1x3I8otJU+h03j8qPl+WS88FwO g==; X-IronPort-AV: E=Sophos;i="5.93,224,1654585200"; d="scan'208";a="185705578" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa1.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 09 Aug 2022 02:42:59 -0700 Received: from chn-vm-ex03.mchp-main.com (10.10.85.151) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.17; Tue, 9 Aug 2022 02:42:59 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28 via Frontend Transport; Tue, 9 Aug 2022 02:42:59 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eFdbhjie20Ai8WJ2GPOZ56xt4HKd67SiZXoT9s9FJIRhAs8S2YpDtPS2fC2Nwo/AwQIcZXDsaKQ74urV+oIo6mYiT+gZwVkZAGTeFzErUwk2oJ9LydjWvIxYRmIG+jpY9J8/1kJZnTyaMXDKga5zEBG4XVIGH8OLz+AhC6tXcpqkO0cRbIfVAc3ov8PYhxA7K8EggQr+GSBmRATReWOiPYJVaK6jtNFr25WfOGQuTJuq4eflxHZwdldeRLhb8vS0mAxwp7Q1oCBf8pFbVsvTY8YJyygmxNngaTdHywOPrYiY3AUuoVkbELGIxmwrsyGQwm4XqZEHzcAWZX1YuAvzcA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=dIz9+nOcwrvL36INnva9eUYJYBVv9j/CRBtG98gje+I=; b=CPUs5wPGiiKIOomODXUMsYmGWfggO6PeCYfQOYTVopJbCicSRWMYqKEZEXgqQ41dBf4DyeQT58yUUZAnpH71u4hP5m4INRE5oltPHvzb4TubReAAOkIDlRFirsp00h+vmIfm3APtjJ4XvYcp5N7aLirKEn2fp6DwDZPdfSNYE8puoCtrK0Kd1FBMwAaOgik/kepfPQ4Z9x9SWaUDsPL9esTv4BTtFE94hax6Acb8LEDaL344bBpKeN1/Xuj1i1/DWYkMVFiKXfuQMSwxAOGkPsSI78NEktq7Gd/q2OkP5XjvZ8jVyZIIryWllJ0Cf04KzCt0XShCySln5vAXK+GAyw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microchip.com; dmarc=pass action=none header.from=microchip.com; dkim=pass header.d=microchip.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector2-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dIz9+nOcwrvL36INnva9eUYJYBVv9j/CRBtG98gje+I=; b=QLLryakLMQXBalze6TRH21SzWwZPE/5/BCSBalR1q3Vg5YHFvio18Ou6TtMNdg35JxdSH27p/rpEAJ17s8VabW4aXHiLh4Bi4TdqAbXsct5/kxszBYUWOjH2uKK+eVOQXXvZG2Dcih0yegSskGOcn+VWWnmoJnWAcT9qMTjOJQI= Received: from DM6PR11MB2652.namprd11.prod.outlook.com (2603:10b6:5:c7::10) by PH7PR11MB5913.namprd11.prod.outlook.com (2603:10b6:510:137::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.18; Tue, 9 Aug 2022 09:42:53 +0000 Received: from DM6PR11MB2652.namprd11.prod.outlook.com ([fe80::985a:6051:905:4849]) by DM6PR11MB2652.namprd11.prod.outlook.com ([fe80::985a:6051:905:4849%2]) with mapi id 15.20.5504.020; Tue, 9 Aug 2022 09:42:52 +0000 From: To: , , , , CC: , , Subject: Re: [PATCH v4 3/4] spi: microchip-core-qspi: Add support for microchip fpga qspi controllers Thread-Topic: [PATCH v4 3/4] spi: microchip-core-qspi: Add support for microchip fpga qspi controllers Thread-Index: AQHYqvKhA3rfZ658OkiT23nSVHXOq62mU+oA Date: Tue, 9 Aug 2022 09:42:52 +0000 Message-ID: References: <20220808064603.1174906-1-nagasuresh.relli@microchip.com> <20220808064603.1174906-4-nagasuresh.relli@microchip.com> In-Reply-To: <20220808064603.1174906-4-nagasuresh.relli@microchip.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.36.5-0ubuntu1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microchip.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d9eeb2d6-74be-497e-1ce3-08da79eb87c7 x-ms-traffictypediagnostic: PH7PR11MB5913:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: njBtv7cjlO+bfRSBDE4Lp6VspYNx6ZtSn3pkIyK9iO9KPUEgSMMWo4IXWmNe4qdxfkfjctMZtSrCTlyuuyKI8qRsTB0N7f2ATuj8AnbRTb/qJcAzlQ5cq2kWr3qKuIt+h/AOcikPK5AyL9eAhdY4QmxBPLu4Wwe1BY8HUMqEnOHCIQoQ9j2fcbyPFKLI7hKUS8mLWyrRzfvsQ20h0FKXXeo7636xQSeUDerDwb9cQFKI5QietXQBPZ0PCn4kju9o1EfxxjdPYyHL+PeieuH+STSLbqX5/uxUz5vblMEaKM3qYpoMn7NVTfWOQFEiWc6oKPQaYHDEj3DffZhf/sS6hqWxmMW2tSnlgj2hIHHh3sbQj13KOtJtHmr/enpcBKfrxmot4yvSdGOBBluWMPTur0NObDcmkHyofMpu2/+2U9qjP6HEAamC8DDjsXy11zGrY+svOWh5tFjiZJ2Et5k8uOLL2jt3w9tbBQVp4IlmX91fJJxS3KXBFy2durFtPSOvzHmpiAedN6vrjbbkufE7jGVY6Jm82a4KAeI4PRA+9bJTDlEOKozTsp/mfYtZwx34BfWdullEB1+bvgd5UcjeIylbq5lOfYmmsdDb0eHC56PdoxxHtRHlUz/ocz91SJMowYqwjvlyidE0kzL7ciUlYNkkYpcDZVIp2I4CKOv+HPAN9gPrHvPMzjSvDkrmhZk7YwHVEkvf1up0W01u07jWtXFNXlTjtB5T61eyLd+WzpRYNVzpUfe6c8RxUIyqxoOR8f9XhTW5fplE15i18E0O1teRkbK0JAI1t28fLRtsCYHTmcoKVOWUAFz5uoV3jCPW x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR11MB2652.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(396003)(376002)(366004)(346002)(39860400002)(136003)(91956017)(6486002)(478600001)(316002)(71200400001)(54906003)(66446008)(66556008)(76116006)(2906002)(66476007)(66946007)(64756008)(110136005)(8676002)(4326008)(30864003)(8936002)(5660300002)(122000001)(38100700002)(36756003)(38070700005)(86362001)(41300700001)(186003)(2616005)(6512007)(6506007)(26005)(83380400001)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bVJIb0xTTGVLaXY5VURBRnA1cnF3dHJlSW1iWEZPbWxUUzVZd0xFeENoSis4?= =?utf-8?B?VTJQYVRQRzZQZnFCZGdjOHFHS3hsQlpWeTBnUzY0WEwyUmJDREhOSkh6dFFh?= =?utf-8?B?aVN2d2lKWDRMK2hrY1hYNk5QcjlWcTN6NFVkeGdQdDdIcW5ZcTVrdDZyZW1D?= =?utf-8?B?SXJaREEydW83eTlLOUxjYVNhbEU5bmZKSnFOakxSZXdHelNxankrclVla1U3?= =?utf-8?B?ditDakRkMjloemhMU0R0eVNzYmxUSVlXbkRyNGRabXRVZnY2d1pmL0dVM05y?= =?utf-8?B?Y28ySWdMWUJzVzltUXpHcHRUbkQxbGtWdmVkSklWL1ZPeERYelRKZExUTUV6?= =?utf-8?B?czdIV2JDSnBjYjRWZVJ6SWtlVVpEK09kNnFlRk1ONHdtdVVkZzgyUjhQZ3pP?= =?utf-8?B?TENSZkExUjFMUE5mWU1TY29ZWkh4R1FhYWpqck5lYkwveUltaUphYlF6UXJL?= =?utf-8?B?dGd4L0RrS2ZHeXNqNU9zOFBYU0ZOSUEzb3d4cVRxd2xXUEJ1cVlVUnB0QWNT?= =?utf-8?B?bExUdVQrdjV4NEJGc0hHS2N2V3VzUk1pT1paKzJ1K3M2cm84NTJCZDE3Qlk1?= =?utf-8?B?MzV4M2M4SUxKSUxoM1BEWktVMnJSbHpQMXR4T0hyNmN2VEs3TTJZVkZmaUpW?= =?utf-8?B?L3JzWmVma2FMc0tRcEl6Z1FvWFFRK3lUUkFLb1grbFBZUGt6dlY1eTRvTVlL?= =?utf-8?B?QWgvbEhTeEdJak42TVdPZWdKQWVPTVBHU2JXaUg3aGlqcnJ4Q05ObVpGVGJ6?= =?utf-8?B?K2pWT0VtdFRNNmNpTktFdE5ESWZKWUN1WGUyd3NaQzJkdVJhWU15dUh6UW8w?= =?utf-8?B?UDcyZW5UV3hTdDZFamhxeElkMk9FWTV6cVZWYUtuUUNEYUNXaUJrckRLZTZ0?= =?utf-8?B?MjF0UFEvUkh2eHhiYVhITjNRTGFTRDNrZFIrSkJ0YmVSMUJYVElMdG1qN2lF?= =?utf-8?B?MUxadGFMaE9Gd0lNYmwySXJqVHpHWGs2cTl0SlAzSlBYZjczdXRTajE2YWFG?= =?utf-8?B?bHFhVDFFQXFkMTNEL0ZSZU5DTlBXektwSCtiOHcxbnVUUHgrYVR1aTUxK0hT?= =?utf-8?B?Q0ZsOHVBdVM3WTAyUjFISWpqK2dWZGRHWERPL1V6bHFQYVp1WGJiNEdtWEti?= =?utf-8?B?cVF4VFYwZTVJcHZ0TzZiV25vRFJUeWJvUFVsWWVsSWtDWG9SZkRlcllkb2xz?= =?utf-8?B?ejRTZzlLeEdDRFVRRFhUaXBNQUllaGxqWmxWYnlIVityMUxTaDJNN3VmRWNS?= =?utf-8?B?UHJwSUt0Z1MyWjNkQ3Roa0dqVXZ3dEh1MjdDb2VZU0tyNklKTUZQSjEybW0r?= =?utf-8?B?Zm0xOTc0S2UrU2JZQ3E3RkZVaktwRmd6MlAxaDFma0ZqbFJTZVFzOU9UUkhj?= =?utf-8?B?d1lvNDNrR3UxVFJPc3VSRlp4eUVEeXBXRk5NUUhHMGJYY0RLRERzaHhYM3dk?= =?utf-8?B?SnQrL2pKSnhIekhraGpzenFYYUVscWo0bnNLdldHNWFnc1diZXdoeXMwMGdk?= =?utf-8?B?VlA1cDhsSFRyWk1Bais2UlZ4L2k3WXJKMWJ2RVVlb2lLZ0xhU1RXb2p5NXZS?= =?utf-8?B?Y2ZxK2YzQWFMbmUwWElqNlhFN0Y5MGRlY2FjZnJnNDJOL1lKSGRkL0JKMXQz?= =?utf-8?B?anVyVkx2MEJ4R2Y3bElpemFVbDhOemVIZCtBVG1zZWkvZnI1dmZ5RzlySE5V?= =?utf-8?B?Smg0R1ZWa1pzNkJ5OHZrWFBScDdSZEpmV0lhbEpLZkx3UDVjdnNUMzJkdW12?= =?utf-8?B?bklZbWpncjYvQ0JFQ3J4a2c2Tk4ydTZoSTR0a2RTbGtBRjFHK1NKRGljMWVI?= =?utf-8?B?TmM2ZzFnMENkQjRmWUFrays0aitNZmF0aVpsZ2dJQ0oweHFGODBGa0hVdkRS?= =?utf-8?B?eVRYK0pjZHhXV3hwZitvTTVuZFVnenhSK0lQeFNsWTZHUDJYd0FMc1UrTzZJ?= =?utf-8?B?QnNTUlNFM3BLVHMrbUNlbkpodFNtck9xRzNPelhaQ0ZINzVYdkd1QlR6QVNj?= =?utf-8?B?QVp5VTR4cURSak1qRFlza2NDVGVRY0xZNXQzNHA2MWNkMEZSTGhBRzYxRFhZ?= =?utf-8?B?WnVqbWtWaFlsWkMyUDYzekxCUlM0aHdDTDcyNkV6dERMTkQ0anFxSlArY0dy?= =?utf-8?B?YWFoQVNQYVR1S2Z1ZVY1MHc3QTBqNUhJMlRVVnBxdEIvLzFUTXpjMTBVcTFR?= =?utf-8?Q?FzunHxJn7Lk56e615CtUwcY+J8FULAMFWFL6e6u328Co?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB2652.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d9eeb2d6-74be-497e-1ce3-08da79eb87c7 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Aug 2022 09:42:52.8282 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: /4TGFWUG0cfOuokKgbo15dPGJNPU8Bhw3buerTGMZtsBdFvaFBJ35mPmAi8MdKhMZkbLTJUez6IMy3oFbPnZke8eKaz1FXnJAr5gPAz2+bs4594yVgsUxzqXqdEeQPih X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR11MB5913 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org VGVzdGVkLWJ5OiBWYWxlbnRpbmEgRmVybmFuZGV6IDx2YWxlbnRpbmEuZmVybmFuZGV6YWxhbmlz QG1pY3JvY2hpcC5jb20NCj4NCg0KT24gTW9uLCAyMDIyLTA4LTA4IGF0IDEyOjE2ICswNTMwLCBO YWdhIFN1cmVzaGt1bWFyIFJlbGxpIHdyb3RlOg0KPiBBZGQgYSBkcml2ZXIgZm9yIE1pY3JvY2hp cCBGUEdBIFFTUEkgY29udHJvbGxlcnMuIFRoaXMgZHJpdmVyIGFsc28NCj4gc3VwcG9ydHMgImhh cmQiIFFTUEkgY29udHJvbGxlcnMgb24gUG9sYXJmaXJlIFNvQy4NCj4gDQo+IFNpZ25lZC1vZmYt Ynk6IE5hZ2EgU3VyZXNoa3VtYXIgUmVsbGkgPG5hZ2FzdXJlc2gucmVsbGlAbWljcm9jaGlwLmNv bQ0KPiA+DQo+IFJldmlld2VkLWJ5OiBDb25vciBEb29sZXkgPGNvbm9yLmRvb2xleUBtaWNyb2No aXAuY29tPg0KPiAtLS0NCj4gIGRyaXZlcnMvc3BpL0tjb25maWcgICAgICAgICAgICAgICAgICAg fCAgIDkgKw0KPiAgZHJpdmVycy9zcGkvTWFrZWZpbGUgICAgICAgICAgICAgICAgICB8ICAgMSAr DQo+ICBkcml2ZXJzL3NwaS9zcGktbWljcm9jaGlwLWNvcmUtcXNwaS5jIHwgNjAwDQo+ICsrKysr KysrKysrKysrKysrKysrKysrKysrDQo+ICAzIGZpbGVzIGNoYW5nZWQsIDYxMCBpbnNlcnRpb25z KCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zcGkvc3BpLW1pY3JvY2hpcC1jb3Jl LXFzcGkuYw0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL0tjb25maWcgYi9kcml2ZXJz L3NwaS9LY29uZmlnDQo+IGluZGV4IDk5ODdjM2YyYmQxYy4uNzhlNDQ3MzI3Y2M0IDEwMDY0NA0K PiAtLS0gYS9kcml2ZXJzL3NwaS9LY29uZmlnDQo+ICsrKyBiL2RyaXZlcnMvc3BpL0tjb25maWcN Cj4gQEAgLTU5MSw2ICs1OTEsMTUgQEAgY29uZmlnIFNQSV9NSUNST0NISVBfQ09SRQ0KPiAgCSAg UG9sYXJGaXJlIFNvQy4NCj4gIAkgIElmIGJ1aWx0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNh bGxlZCBzcGktbWljcm9jaGlwLWNvcmUuDQo+ICANCj4gK2NvbmZpZyBTUElfTUlDUk9DSElQX0NP UkVfUVNQSQ0KPiArCXRyaXN0YXRlICJNaWNyb2NoaXAgRlBHQSBRU1BJIGNvbnRyb2xsZXJzIg0K PiArCWRlcGVuZHMgb24gU1BJX01BU1RFUg0KPiArCWhlbHANCj4gKwkgIFRoaXMgZW5hYmxlcyB0 aGUgUVNQSSBkcml2ZXIgZm9yIE1pY3JvY2hpcCBGUEdBIFFTUEkNCj4gY29udHJvbGxlcnMuDQo+ ICsJICBTYXkgWSBvciBNIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBRU1BJIGNvbnRyb2xs ZXJzIG9uDQo+ICsJICBQb2xhckZpcmUgU29DLg0KPiArCSAgSWYgYnVpbHQgYXMgYSBtb2R1bGUs IGl0IHdpbGwgYmUgY2FsbGVkIHNwaS1taWNyb2NoaXAtY29yZS0NCj4gcXNwaS4NCj4gKw0KPiAg Y29uZmlnIFNQSV9NVDY1WFgNCj4gIAl0cmlzdGF0ZSAiTWVkaWFUZWsgU1BJIGNvbnRyb2xsZXIi DQo+ICAJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IENPTVBJTEVfVEVTVA0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9zcGkvTWFrZWZpbGUgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQ0KPiBpbmRl eCAxNWQyZjM4MzVlNDUuLjRiMzRlODU1Yzg0MSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9zcGkv TWFrZWZpbGUNCj4gKysrIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUNCj4gQEAgLTczLDYgKzczLDcg QEAgb2JqLSQoQ09ORklHX1NQSV9MUDg4NDFfUlRDKQkJKz0gc3BpLQ0KPiBscDg4NDEtcnRjLm8N Cj4gIG9iai0kKENPTkZJR19TUElfTUVTT05fU1BJQ0MpCQkrPSBzcGktbWVzb24tc3BpY2Mubw0K PiAgb2JqLSQoQ09ORklHX1NQSV9NRVNPTl9TUElGQykJCSs9IHNwaS1tZXNvbi1zcGlmYy5vDQo+ ICBvYmotJChDT05GSUdfU1BJX01JQ1JPQ0hJUF9DT1JFKQkrPSBzcGktbWljcm9jaGlwLWNvcmUu bw0KPiArb2JqLSQoQ09ORklHX1NQSV9NSUNST0NISVBfQ09SRV9RU1BJKQkrPSBzcGktbWljcm9j aGlwLWNvcmUtDQo+IHFzcGkubw0KPiAgb2JqLSQoQ09ORklHX1NQSV9NUEM1MTJ4X1BTQykJCSs9 IHNwaS1tcGM1MTJ4LXBzYy5vDQo+ICBvYmotJChDT05GSUdfU1BJX01QQzUyeHhfUFNDKQkJKz0g c3BpLW1wYzUyeHgtcHNjLm8NCj4gIG9iai0kKENPTkZJR19TUElfTVBDNTJ4eCkJCSs9IHNwaS1t cGM1Mnh4Lm8NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1taWNyb2NoaXAtY29yZS1x c3BpLmMgYi9kcml2ZXJzL3NwaS9zcGktDQo+IG1pY3JvY2hpcC1jb3JlLXFzcGkuYw0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjE5YTZhNDY4MjlmNg0KPiAt LS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvc3BpL3NwaS1taWNyb2NoaXAtY29yZS1xc3Bp LmMNCj4gQEAgLTAsMCArMSw2MDAgQEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAo R1BMLTIuMCkNCj4gKy8qDQo+ICsgKiBNaWNyb2NoaXAgY29yZVFTUEkgUVNQSSBjb250cm9sbGVy IGRyaXZlcg0KPiArICoNCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIE1pY3JvY2hpcCBU ZWNobm9sb2d5IEluYy4gYW5kIGl0cw0KPiBzdWJzaWRpYXJpZXMNCj4gKyAqDQo+ICsgKiBBdXRo b3I6IE5hZ2EgU3VyZXNoa3VtYXIgUmVsbGkgPG5hZ2FzdXJlc2gucmVsbGlAbWljcm9jaGlwLmNv bT4NCj4gKyAqDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiArI2lu Y2x1ZGUgPGxpbnV4L2Vyci5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gKyNpbmNs dWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPg0KPiArI2lu Y2x1ZGUgPGxpbnV4L2lvcG9sbC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiAr I2luY2x1ZGUgPGxpbnV4L29mLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+DQo+ICsj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc3Bp L3NwaS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGktbWVtLmg+DQo+ICsNCj4gKy8qDQo+ ICsgKiBRU1BJIENvbnRyb2wgcmVnaXN0ZXIgbWFzayBkZWZpbmVzDQo+ICsgKi8NCj4gKyNkZWZp bmUgQ09OVFJPTF9FTkFCTEUJCUJJVCgwKQ0KPiArI2RlZmluZSBDT05UUk9MX01BU1RFUgkJQklU KDEpDQo+ICsjZGVmaW5lIENPTlRST0xfWElQCQlCSVQoMikNCj4gKyNkZWZpbmUgQ09OVFJPTF9Y SVBBRERSCQlCSVQoMykNCj4gKyNkZWZpbmUgQ09OVFJPTF9DTEtJRExFCQlCSVQoMTApDQo+ICsj ZGVmaW5lIENPTlRST0xfU0FNUExFX01BU0sJR0VOTUFTSygxMiwgMTEpDQo+ICsjZGVmaW5lIENP TlRST0xfTU9ERTAJCUJJVCgxMykNCj4gKyNkZWZpbmUgQ09OVFJPTF9NT0RFMTJfTUFTSwlHRU5N QVNLKDE1LCAxNCkNCj4gKyNkZWZpbmUgQ09OVFJPTF9NT0RFMTJfRVhfUk8JQklUKDE0KQ0KPiAr I2RlZmluZSBDT05UUk9MX01PREUxMl9FWF9SVwlCSVQoMTUpDQo+ICsjZGVmaW5lIENPTlRST0xf TU9ERTEyX0ZVTEwJR0VOTUFTSygxNSwgMTQpDQo+ICsjZGVmaW5lIENPTlRST0xfRkxBR1NYNAkJ QklUKDE2KQ0KPiArI2RlZmluZSBDT05UUk9MX0NMS1JBVEVfTUFTSwlHRU5NQVNLKDI3LCAyNCkN Cj4gKyNkZWZpbmUgQ09OVFJPTF9DTEtSQVRFX1NISUZUCTI0DQo+ICsNCj4gKy8qDQo+ICsgKiBR U1BJIEZyYW1lcyByZWdpc3RlciBtYXNrIGRlZmluZXMNCj4gKyAqLw0KPiArI2RlZmluZSBGUkFN RVNfVE9UQUxCWVRFU19NQVNLCUdFTk1BU0soMTUsIDApDQo+ICsjZGVmaW5lIEZSQU1FU19DTURC WVRFU19NQVNLCUdFTk1BU0soMjQsIDE2KQ0KPiArI2RlZmluZSBGUkFNRVNfQ01EQllURVNfU0hJ RlQJMTYNCj4gKyNkZWZpbmUgRlJBTUVTX1NISUZUCQkyNQ0KPiArI2RlZmluZSBGUkFNRVNfSURM RV9NQVNLCUdFTk1BU0soMjksIDI2KQ0KPiArI2RlZmluZSBGUkFNRVNfSURMRV9TSElGVAkyNg0K PiArI2RlZmluZSBGUkFNRVNfRkxBR0JZVEUJCUJJVCgzMCkNCj4gKyNkZWZpbmUgRlJBTUVTX0ZM QUdXT1JECQlCSVQoMzEpDQo+ICsNCj4gKy8qDQo+ICsgKiBRU1BJIEludGVycnVwdCBFbmFibGUg cmVnaXN0ZXIgbWFzayBkZWZpbmVzDQo+ICsgKi8NCj4gKyNkZWZpbmUgSUVOX1RYRE9ORQkJQklU KDApDQo+ICsjZGVmaW5lIElFTl9SWERPTkUJCUJJVCgxKQ0KPiArI2RlZmluZSBJRU5fUlhBVkFJ TEFCTEUJCUJJVCgyKQ0KPiArI2RlZmluZSBJRU5fVFhBVkFJTEFCTEUJCUJJVCgzKQ0KPiArI2Rl ZmluZSBJRU5fUlhGSUZPRU1QVFkJCUJJVCg0KQ0KPiArI2RlZmluZSBJRU5fVFhGSUZPRlVMTAkJ QklUKDUpDQo+ICsNCj4gKy8qDQo+ICsgKiBRU1BJIFN0YXR1cyByZWdpc3RlciBtYXNrIGRlZmlu ZXMNCj4gKyAqLw0KPiArI2RlZmluZSBTVEFUVVNfVFhET05FCQlCSVQoMCkNCj4gKyNkZWZpbmUg U1RBVFVTX1JYRE9ORQkJQklUKDEpDQo+ICsjZGVmaW5lIFNUQVRVU19SWEFWQUlMQUJMRQlCSVQo MikNCj4gKyNkZWZpbmUgU1RBVFVTX1RYQVZBSUxBQkxFCUJJVCgzKQ0KPiArI2RlZmluZSBTVEFU VVNfUlhGSUZPRU1QVFkJQklUKDQpDQo+ICsjZGVmaW5lIFNUQVRVU19UWEZJRk9GVUxMCUJJVCg1 KQ0KPiArI2RlZmluZSBTVEFUVVNfUkVBRFkJCUJJVCg3KQ0KPiArI2RlZmluZSBTVEFUVVNfRkxB R1NYNAkJQklUKDgpDQo+ICsjZGVmaW5lIFNUQVRVU19NQVNLCQlHRU5NQVNLKDgsIDApDQo+ICsN Cj4gKyNkZWZpbmUgQllURVNVUFBFUl9NQVNLCQlHRU5NQVNLKDMxLCAxNikNCj4gKyNkZWZpbmUg QllURVNMT1dFUl9NQVNLCQlHRU5NQVNLKDE1LCAwKQ0KPiArDQo+ICsjZGVmaW5lIE1BWF9ESVZJ REVSCQkxNg0KPiArI2RlZmluZSBNSU5fRElWSURFUgkJMA0KPiArI2RlZmluZSBNQVhfREFUQV9D TURfTEVOCTI1Ng0KPiArDQo+ICsvKiBRU1BJIHJlYWR5IHRpbWUgb3V0IHZhbHVlICovDQo+ICsj ZGVmaW5lIFRJTUVPVVRfTVMJCTUwMA0KPiArDQo+ICsvKg0KPiArICogUVNQSSBSZWdpc3RlciBv ZmZzZXRzLg0KPiArICovDQo+ICsjZGVmaW5lIFJFR19DT05UUk9MCQkoMHgwMCkNCj4gKyNkZWZp bmUgUkVHX0ZSQU1FUwkJKDB4MDQpDQo+ICsjZGVmaW5lIFJFR19JRU4JCQkoMHgwYykNCj4gKyNk ZWZpbmUgUkVHX1NUQVRVUwkJKDB4MTApDQo+ICsjZGVmaW5lIFJFR19ESVJFQ1RfQUNDRVNTCSgw eDE0KQ0KPiArI2RlZmluZSBSRUdfVVBQRVJfQUNDRVNTCSgweDE4KQ0KPiArI2RlZmluZSBSRUdf UlhfREFUQQkJKDB4NDApDQo+ICsjZGVmaW5lIFJFR19UWF9EQVRBCQkoMHg0NCkNCj4gKyNkZWZp bmUgUkVHX1g0X1JYX0RBVEEJCSgweDQ4KQ0KPiArI2RlZmluZSBSRUdfWDRfVFhfREFUQQkJKDB4 NGMpDQo+ICsjZGVmaW5lIFJFR19GUkFNRVNVUAkJKDB4NTApDQo+ICsNCj4gKy8qKg0KPiArICog c3RydWN0IG1jaHBfY29yZXFzcGkgLSBEZWZpbmVzIHFzcGkgZHJpdmVyIGluc3RhbmNlDQo+ICsg KiBAcmVnczogICAgICAgICAgICAgIFZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgUVNQSSBjb250cm9s bGVyDQo+IHJlZ2lzdGVycw0KPiArICogQGNsazogICAgICAgICAgICAgICBRU1BJIE9wZXJhdGlu ZyBjbG9jaw0KPiArICogQGRhdGFfY29tcGxldGlvbjogICBjb21wbGV0aW9uIHN0cnVjdHVyZQ0K PiArICogQG9wX2xvY2s6ICAgICAgICAgICBsb2NrIGFjY2VzcyB0byB0aGUgZGV2aWNlDQo+ICsg KiBAdHhidWY6ICAgICAgICAgICAgIFRYIGJ1ZmZlcg0KPiArICogQHJ4YnVmOiAgICAgICAgICAg ICBSWCBidWZmZXINCj4gKyAqIEBpcnE6ICAgICAgICAgICAgICAgSVJRIG51bWJlcg0KPiArICog QHR4X2xlbjogICAgICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgbGVmdCB0byB0cmFuc2Zlcg0KPiAr ICogQHJ4X2xlbjogICAgICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgbGVmdCB0byByZWNlaXZlDQo+ ICsgKi8NCj4gK3N0cnVjdCBtY2hwX2NvcmVxc3BpIHsNCj4gKwl2b2lkIF9faW9tZW0gKnJlZ3M7 DQo+ICsJc3RydWN0IGNsayAqY2xrOw0KPiArCXN0cnVjdCBjb21wbGV0aW9uIGRhdGFfY29tcGxl dGlvbjsNCj4gKwlzdHJ1Y3QgbXV0ZXggb3BfbG9jazsgLyogbG9jayBhY2Nlc3MgdG8gdGhlIGRl dmljZSAqLw0KPiArCXU4ICp0eGJ1ZjsNCj4gKwl1OCAqcnhidWY7DQo+ICsJaW50IGlycTsNCj4g KwlpbnQgdHhfbGVuOw0KPiArCWludCByeF9sZW47DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW50 IG1jaHBfY29yZXFzcGlfc2V0X21vZGUoc3RydWN0IG1jaHBfY29yZXFzcGkgKnFzcGksIGNvbnN0 DQo+IHN0cnVjdCBzcGlfbWVtX29wICpvcCkNCj4gK3sNCj4gKwl1MzIgY29udHJvbCA9IHJlYWRs X3JlbGF4ZWQocXNwaS0+cmVncyArIFJFR19DT05UUk9MKTsNCj4gKw0KPiArCS8qDQo+ICsJICog VGhlIG9wZXJhdGluZyBtb2RlIGNhbiBiZSBjb25maWd1cmVkIGJhc2VkIG9uIHRoZSBjb21tYW5k DQo+IHRoYXQgbmVlZHMgdG8gYmUgc2VuZC4NCj4gKwkgKiBiaXRzWzE1OjE0XTogU2V0cyB3aGV0 aGVyIG11bHRpcGxlIGJpdCBTUEkgb3BlcmF0ZXMgaW4NCj4gbm9ybWFsLCBleHRlbmRlZCBvciBm dWxsIG1vZGVzLg0KPiArCSAqCQkwMDogTm9ybWFsIChzaW5nbGUgRFEwIFRYIGFuZCBzaW5nbGUg RFExIFJYDQo+IGxpbmVzKQ0KPiArCSAqCQkwMTogRXh0ZW5kZWQgUk8gKGNvbW1hbmQgYW5kIGFk ZHJlc3MgYnl0ZXMgb24NCj4gRFEwIG9ubHkpDQo+ICsJICoJCTEwOiBFeHRlbmRlZCBSVyAoY29t bWFuZCBieXRlIG9uIERRMCBvbmx5KQ0KPiArCSAqCQkxMTogRnVsbC4gKGNvbW1hbmQgYW5kIGFk ZHJlc3MgYXJlIG9uIGFsbCBEUQ0KPiBsaW5lcykNCj4gKwkgKiBiaXRbMTNdOglTZXRzIHdoZXRo ZXIgbXVsdGlwbGUgYml0IFNQSSB1c2VzIDIgb3IgNA0KPiBiaXRzIG9mIGRhdGENCj4gKwkgKgkJ MDogMi1iaXRzIChCU1BJKQ0KPiArCSAqCQkxOiA0LWJpdHMgKFFTUEkpDQo+ICsJICovDQo+ICsJ aWYgKG9wLT5kYXRhLmJ1c3dpZHRoID09IDQgfHwgb3AtPmRhdGEuYnVzd2lkdGggPT0gMikgew0K PiArCQljb250cm9sICY9IH5DT05UUk9MX01PREUxMl9NQVNLOw0KPiArCQlpZiAob3AtPmNtZC5i dXN3aWR0aCA9PSAxICYmIChvcC0+YWRkci5idXN3aWR0aCA9PSAxIHx8DQo+IG9wLT5hZGRyLmJ1 c3dpZHRoID09IDApKQ0KPiArCQkJY29udHJvbCB8PSBDT05UUk9MX01PREUxMl9FWF9STzsNCj4g KwkJZWxzZSBpZiAob3AtPmNtZC5idXN3aWR0aCA9PSAxKQ0KPiArCQkJY29udHJvbCB8PSBDT05U Uk9MX01PREUxMl9FWF9SVzsNCj4gKwkJZWxzZQ0KPiArCQkJY29udHJvbCB8PSBDT05UUk9MX01P REUxMl9GVUxMOw0KPiArDQo+ICsJCWNvbnRyb2wgfD0gQ09OVFJPTF9NT0RFMDsNCj4gKwl9IGVs c2Ugew0KPiArCQljb250cm9sICY9IH4oQ09OVFJPTF9NT0RFMTJfTUFTSyB8DQo+ICsJCQkgICAg IENPTlRST0xfTU9ERTApOw0KPiArCX0NCj4gKw0KPiArCXdyaXRlbF9yZWxheGVkKGNvbnRyb2ws IHFzcGktPnJlZ3MgKyBSRUdfQ09OVFJPTCk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGlubGluZSB2b2lkIG1jaHBfY29yZXFzcGlfcmVhZF9vcChzdHJ1Y3QgbWNo cF9jb3JlcXNwaSAqcXNwaSkNCj4gK3sNCj4gKwl1MzIgY29udHJvbCwgZGF0YTsNCj4gKw0KPiAr CWlmICghcXNwaS0+cnhfbGVuKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwljb250cm9sID0gcmVh ZGxfcmVsYXhlZChxc3BpLT5yZWdzICsgUkVHX0NPTlRST0wpOw0KPiArDQo+ICsJLyoNCj4gKwkg KiBSZWFkIDQtYnl0ZXMgZnJvbSB0aGUgU1BJIEZJRk8gaW4gc2luZ2xlIHRyYW5zYWN0aW9uIGFu ZA0KPiB0aGVuIHJlYWQNCj4gKwkgKiB0aGUgcmVhbWFpbmluZyBkYXRhIGJ5dGUgd2lzZS4NCj4g KwkgKi8NCj4gKwljb250cm9sIHw9IENPTlRST0xfRkxBR1NYNDsNCj4gKwl3cml0ZWxfcmVsYXhl ZChjb250cm9sLCBxc3BpLT5yZWdzICsgUkVHX0NPTlRST0wpOw0KPiArDQo+ICsJd2hpbGUgKHFz cGktPnJ4X2xlbiA+PSA0KSB7DQo+ICsJCXdoaWxlIChyZWFkbF9yZWxheGVkKHFzcGktPnJlZ3Mg KyBSRUdfU1RBVFVTKSAmDQo+IFNUQVRVU19SWEZJRk9FTVBUWSkNCj4gKwkJCTsNCj4gKwkJZGF0 YSA9IHJlYWRsX3JlbGF4ZWQocXNwaS0+cmVncyArIFJFR19YNF9SWF9EQVRBKTsNCj4gKwkJKih1 MzIgKilxc3BpLT5yeGJ1ZiA9IGRhdGE7DQo+ICsJCXFzcGktPnJ4YnVmICs9IDQ7DQo+ICsJCXFz cGktPnJ4X2xlbiAtPSA0Ow0KPiArCX0NCj4gKw0KPiArCWNvbnRyb2wgJj0gfkNPTlRST0xfRkxB R1NYNDsNCj4gKwl3cml0ZWxfcmVsYXhlZChjb250cm9sLCBxc3BpLT5yZWdzICsgUkVHX0NPTlRS T0wpOw0KPiArDQo+ICsJd2hpbGUgKHFzcGktPnJ4X2xlbi0tKSB7DQo+ICsJCXdoaWxlIChyZWFk bF9yZWxheGVkKHFzcGktPnJlZ3MgKyBSRUdfU1RBVFVTKSAmDQo+IFNUQVRVU19SWEZJRk9FTVBU WSkNCj4gKwkJCTsNCj4gKwkJZGF0YSA9IHJlYWRsX3JlbGF4ZWQocXNwaS0+cmVncyArIFJFR19S WF9EQVRBKTsNCj4gKwkJKnFzcGktPnJ4YnVmKysgPSAoZGF0YSAmIDB4RkYpOw0KPiArCX0NCj4g K30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIG1jaHBfY29yZXFzcGlfd3JpdGVfb3Aoc3Ry dWN0IG1jaHBfY29yZXFzcGkNCj4gKnFzcGksIGJvb2wgd29yZCkNCj4gK3sNCj4gKwl1MzIgY29u dHJvbCwgZGF0YTsNCj4gKw0KPiArCWNvbnRyb2wgPSByZWFkbF9yZWxheGVkKHFzcGktPnJlZ3Mg KyBSRUdfQ09OVFJPTCk7DQo+ICsJY29udHJvbCB8PSBDT05UUk9MX0ZMQUdTWDQ7DQo+ICsJd3Jp dGVsX3JlbGF4ZWQoY29udHJvbCwgcXNwaS0+cmVncyArIFJFR19DT05UUk9MKTsNCj4gKw0KPiAr CXdoaWxlIChxc3BpLT50eF9sZW4gPj0gNCkgew0KPiArCQl3aGlsZSAocmVhZGxfcmVsYXhlZChx c3BpLT5yZWdzICsgUkVHX1NUQVRVUykgJg0KPiBTVEFUVVNfVFhGSUZPRlVMTCkNCj4gKwkJCTsN Cj4gKwkJZGF0YSA9ICoodTMyICopcXNwaS0+dHhidWY7DQo+ICsJCXFzcGktPnR4YnVmICs9IDQ7 DQo+ICsJCXFzcGktPnR4X2xlbiAtPSA0Ow0KPiArCQl3cml0ZWxfcmVsYXhlZChkYXRhLCBxc3Bp LT5yZWdzICsgUkVHX1g0X1RYX0RBVEEpOw0KPiArCX0NCj4gKw0KPiArCWNvbnRyb2wgJj0gfkNP TlRST0xfRkxBR1NYNDsNCj4gKwl3cml0ZWxfcmVsYXhlZChjb250cm9sLCBxc3BpLT5yZWdzICsg UkVHX0NPTlRST0wpOw0KPiArDQo+ICsJd2hpbGUgKHFzcGktPnR4X2xlbi0tKSB7DQo+ICsJCXdo aWxlIChyZWFkbF9yZWxheGVkKHFzcGktPnJlZ3MgKyBSRUdfU1RBVFVTKSAmDQo+IFNUQVRVU19U WEZJRk9GVUxMKQ0KPiArCQkJOw0KPiArCQlkYXRhID0gICpxc3BpLT50eGJ1ZisrOw0KPiArCQl3 cml0ZWxfcmVsYXhlZChkYXRhLCBxc3BpLT5yZWdzICsgUkVHX1RYX0RBVEEpOw0KPiArCX0NCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgbWNocF9jb3JlcXNwaV9lbmFibGVfaW50cyhzdHJ1Y3Qg bWNocF9jb3JlcXNwaSAqcXNwaSkNCj4gK3sNCj4gKwl1MzIgbWFzayA9IElFTl9UWERPTkUgfA0K PiArCQkgICBJRU5fUlhET05FIHwNCj4gKwkJICAgSUVOX1JYQVZBSUxBQkxFOw0KPiArDQo+ICsJ d3JpdGVsX3JlbGF4ZWQobWFzaywgcXNwaS0+cmVncyArIFJFR19JRU4pOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCBtY2hwX2NvcmVxc3BpX2Rpc2FibGVfaW50cyhzdHJ1Y3QgbWNocF9jb3Jl cXNwaSAqcXNwaSkNCj4gK3sNCj4gKwl3cml0ZWxfcmVsYXhlZCgwLCBxc3BpLT5yZWdzICsgUkVH X0lFTik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBtY2hwX2NvcmVxc3BpX2lz cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpDQo+ICt7DQo+ICsJc3RydWN0IG1jaHBfY29yZXFzcGkg KnFzcGkgPSAoc3RydWN0IG1jaHBfY29yZXFzcGkgKilkZXZfaWQ7DQo+ICsJaXJxcmV0dXJuX3Qg cmV0ID0gSVJRX05PTkU7DQo+ICsJaW50IGludGZpZWxkID0gcmVhZGxfcmVsYXhlZChxc3BpLT5y ZWdzICsgUkVHX1NUQVRVUykgJg0KPiBTVEFUVVNfTUFTSzsNCj4gKw0KPiArCWlmIChpbnRmaWVs ZCA9PSAwKQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJaWYgKGludGZpZWxkICYgSUVOX1RY RE9ORSkgew0KPiArCQl3cml0ZWxfcmVsYXhlZChJRU5fVFhET05FLCBxc3BpLT5yZWdzICsgUkVH X1NUQVRVUyk7DQo+ICsJCXJldCA9IElSUV9IQU5ETEVEOw0KPiArCX0NCj4gKw0KPiArCWlmIChp bnRmaWVsZCAmIElFTl9SWEFWQUlMQUJMRSkgew0KPiArCQl3cml0ZWxfcmVsYXhlZChJRU5fUlhB VkFJTEFCTEUsIHFzcGktPnJlZ3MgKw0KPiBSRUdfU1RBVFVTKTsNCj4gKwkJbWNocF9jb3JlcXNw aV9yZWFkX29wKHFzcGkpOw0KPiArCQlyZXQgPSBJUlFfSEFORExFRDsNCj4gKwl9DQo+ICsNCj4g KwlpZiAoaW50ZmllbGQgJiBJRU5fUlhET05FKSB7DQo+ICsJCXdyaXRlbF9yZWxheGVkKElFTl9S WERPTkUsIHFzcGktPnJlZ3MgKyBSRUdfU1RBVFVTKTsNCj4gKwkJY29tcGxldGUoJnFzcGktPmRh dGFfY29tcGxldGlvbik7DQo+ICsJCXJldCA9IElSUV9IQU5ETEVEOw0KPiArCX0NCj4gKw0KPiAr CXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbWNocF9jb3JlcXNwaV9zZXR1 cF9jbG9jayhzdHJ1Y3QgbWNocF9jb3JlcXNwaSAqcXNwaSwNCj4gc3RydWN0IHNwaV9kZXZpY2Ug KnNwaSkNCj4gK3sNCj4gKwl1bnNpZ25lZCBsb25nIGNsa19oejsNCj4gKwl1MzIgY29udHJvbCwg YmF1ZF9yYXRlX3ZhbCA9IDA7DQo+ICsNCj4gKwljbGtfaHogPSBjbGtfZ2V0X3JhdGUocXNwaS0+ Y2xrKTsNCj4gKwlpZiAoIWNsa19oeikNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwli YXVkX3JhdGVfdmFsID0gRElWX1JPVU5EX1VQKGNsa19oeiwgMiAqIHNwaS0+bWF4X3NwZWVkX2h6 KTsNCj4gKwlpZiAoYmF1ZF9yYXRlX3ZhbCA+IE1BWF9ESVZJREVSIHx8IGJhdWRfcmF0ZV92YWwg PCBNSU5fRElWSURFUikNCj4gew0KPiArCQlkZXZfZXJyKCZzcGktPmRldiwNCj4gKwkJCSJjb3Vs ZCBub3QgY29uZmlndXJlIHRoZSBjbG9jayBmb3Igc3BpIGNsb2NrICVkDQo+IEh6ICYgc3lzdGVt IGNsb2NrICVsZCBIelxuIiwNCj4gKwkJCXNwaS0+bWF4X3NwZWVkX2h6LCBjbGtfaHopOw0KPiAr CQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwljb250cm9sID0gcmVhZGxfcmVsYXhl ZChxc3BpLT5yZWdzICsgUkVHX0NPTlRST0wpOw0KPiArCWNvbnRyb2wgfD0gYmF1ZF9yYXRlX3Zh bCA8PCBDT05UUk9MX0NMS1JBVEVfU0hJRlQ7DQo+ICsJd3JpdGVsX3JlbGF4ZWQoY29udHJvbCwg cXNwaS0+cmVncyArIFJFR19DT05UUk9MKTsNCj4gKwljb250cm9sID0gcmVhZGxfcmVsYXhlZChx c3BpLT5yZWdzICsgUkVHX0NPTlRST0wpOw0KPiArDQo+ICsJaWYgKChzcGktPm1vZGUgJiBTUElf Q1BPTCkgJiYgKHNwaS0+bW9kZSAmIFNQSV9DUEhBKSkNCj4gKwkJY29udHJvbCB8PSBDT05UUk9M X0NMS0lETEU7DQo+ICsJZWxzZQ0KPiArCQljb250cm9sICY9IH5DT05UUk9MX0NMS0lETEU7DQo+ ICsNCj4gKwl3cml0ZWxfcmVsYXhlZChjb250cm9sLCBxc3BpLT5yZWdzICsgUkVHX0NPTlRST0wp Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbWNocF9jb3Jl cXNwaV9zZXR1cF9vcChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpX2RldikNCj4gK3sNCj4gKwlzdHJ1 Y3Qgc3BpX2NvbnRyb2xsZXIgKmN0bHIgPSBzcGlfZGV2LT5tYXN0ZXI7DQo+ICsJc3RydWN0IG1j aHBfY29yZXFzcGkgKnFzcGkgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShjdGxyKTsNCj4g Kwl1MzIgY29udHJvbCA9IHJlYWRsX3JlbGF4ZWQocXNwaS0+cmVncyArIFJFR19DT05UUk9MKTsN Cj4gKw0KPiArCWNvbnRyb2wgfD0gKENPTlRST0xfTUFTVEVSIHwgQ09OVFJPTF9FTkFCTEUpOw0K PiArCWNvbnRyb2wgJj0gfkNPTlRST0xfQ0xLSURMRTsNCj4gKwl3cml0ZWxfcmVsYXhlZChjb250 cm9sLCBxc3BpLT5yZWdzICsgUkVHX0NPTlRST0wpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtY2hwX2NvcmVxc3BpX2NvbmZpZ19vcChzdHJ1 Y3QgbWNocF9jb3JlcXNwaQ0KPiAqcXNwaSwgY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQ0K PiArew0KPiArCXUzMiBpZGxlX2N5Y2xlcyA9IDA7DQo+ICsJaW50IHRvdGFsX2J5dGVzLCBjbWRf Ynl0ZXMsIGZyYW1lcywgY3RybDsNCj4gKw0KPiArCWNtZF9ieXRlcyA9IG9wLT5jbWQubmJ5dGVz ICsgb3AtPmFkZHIubmJ5dGVzOw0KPiArCXRvdGFsX2J5dGVzID0gY21kX2J5dGVzICsgb3AtPmRh dGEubmJ5dGVzOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBBcyBwZXIgdGhlIGNvcmVRU1BJIElQIHNw ZWMsdGhlIG51bWJlciBvZiBjb21tYW5kIGFuZCBkYXRhDQo+IGJ5dGVzIGFyZQ0KPiArCSAqIGNv bnRyb2xsZWQgYnkgdGhlIGZyYW1lcyByZWdpc3RlciBmb3IgZWFjaCBTUEkgc2VxdWVuY2UuDQo+ IFRoaXMgc3VwcG9ydHMNCj4gKwkgKiB0aGUgU1BJIGZsYXNoIG1lbW9yeSByZWFkIGFuZCB3cml0 ZXMgc2VxdWVuY2VzIGFzIGJlbG93LiBzbw0KPiBjb25maWd1cmUNCj4gKwkgKiB0aGUgY21kIGFu ZCB0b3RhbCBieXRlcyBhY2NvcmRpbmdseS4NCj4gKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gLS0tLS0tLS0tDQo+ICsJ ICogVE9UQUwgQllURVMgIHwgIENNRCBCWVRFUyB8IFdoYXQNCj4gaGFwcGVucyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfA0KPiArCSAqDQo+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiBfDQo+ICsJICog ICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgDQo+ICAgICAgICAgIHwNCj4gKwkgKiAgICAgMSAgICAgICAgfCAgIDEgICAgICAgIHwgVGhl IFNQSSBjb3JlIHdpbGwgdHJhbnNtaXQgYQ0KPiBzaW5nbGUgYnl0ZSB8DQo+ICsJICogICAgICAg ICAgICAgIHwgICAgICAgICAgICB8IGFuZCByZWNlaXZlIGRhdGEgaXMNCj4gZGlzY2FyZGVkICAg ICAgICAgICAgfA0KPiArCSAqICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIA0KPiAgICAgICAgICB8DQo+ICsJICogICAgIDEgICAgICAg IHwgICAwICAgICAgICB8IFRoZSBTUEkgY29yZSB3aWxsIHRyYW5zbWl0IGENCj4gc2luZ2xlIGJ5 dGUgfA0KPiArCSAqICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCBhbmQgcmV0dXJuIGEgc2lu Z2xlDQo+IGJ5dGUgICAgICAgICAgICAgICAgIHwNCj4gKwkgKiAgICAgICAgICAgICAgfCAgICAg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCj4gICAgICAgICAgfA0K PiArCSAqICAgICAxMCAgICAgICB8ICAgNCAgICAgICAgfCBUaGUgU1BJIGNvcmUgd2lsbCB0cmFu c21pdCA0DQo+IGNvbW1hbmQgICAgIHwNCj4gKwkgKiAgICAgICAgICAgICAgfCAgICAgICAgICAg IHwgYnl0ZXMgZGlzY2FyZGluZyB0aGUgcmVjZWl2ZQ0KPiBkYXRhIGFuZCAgICB8DQo+ICsJICog ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IHRyYW5zbWl0cyA2IGR1bW15IGJ5dGVzDQo+IHJl dHVybmluZyB0aGUgNiAgfA0KPiArCSAqICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCByZWNl aXZlZCBieXRlcyBhbmQgcmV0dXJuIGENCj4gc2luZ2xlIGJ5dGUgIHwNCj4gKwkgKiAgICAgICAg ICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCj4g ICAgICAgICAgfA0KPiArCSAqICAgICAxMCAgICAgICB8ICAgMTAgICAgICAgfCBUaGUgU1BJIGNv cmUgd2lsbCB0cmFuc21pdCAxMA0KPiBjb21tYW5kICAgIHwNCj4gKwkgKiAgICAgICAgICAgICAg fCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCj4gICAgICAg ICAgfA0KPiArCSAqICAgICAxMCAgICAgICB8ICAgIDAgICAgICAgfCBUaGUgU1BJIGNvcmUgd2ls bCB0cmFuc21pdCAxMA0KPiBjb21tYW5kICAgIHwNCj4gKwkgKiAgICAgICAgICAgICAgfCAgICAg ICAgICAgIHwgYnl0ZXMgYW5kIHJldHVybmluZyAxMCByZWNlaXZlZA0KPiBieXRlcyAgICB8DQo+ ICsJICoNCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fDQo+IF8NCj4gKwkgKi8NCj4gKwlpZiAoIShvcC0+ZGF0YS5k aXIgPT0gU1BJX01FTV9EQVRBX0lOKSkNCj4gKwkJY21kX2J5dGVzID0gdG90YWxfYnl0ZXM7DQo+ ICsNCj4gKwlmcmFtZXMgPSB0b3RhbF9ieXRlcyAmIEJZVEVTVVBQRVJfTUFTSzsNCj4gKwl3cml0 ZWxfcmVsYXhlZChmcmFtZXMsIHFzcGktPnJlZ3MgKyBSRUdfRlJBTUVTVVApOw0KPiArCWZyYW1l cyA9IHRvdGFsX2J5dGVzICYgQllURVNMT1dFUl9NQVNLOw0KPiArCWZyYW1lcyB8PSBjbWRfYnl0 ZXMgPDwgRlJBTUVTX0NNREJZVEVTX1NISUZUOw0KPiArDQo+ICsJaWYgKG9wLT5kdW1teS5idXN3 aWR0aCkNCj4gKwkJaWRsZV9jeWNsZXMgPSBvcC0+ZHVtbXkubmJ5dGVzICogOCAvIG9wLQ0KPiA+ ZHVtbXkuYnVzd2lkdGg7DQo+ICsNCj4gKwlmcmFtZXMgfD0gaWRsZV9jeWNsZXMgPDwgRlJBTUVT X0lETEVfU0hJRlQ7DQo+ICsJY3RybCA9IHJlYWRsX3JlbGF4ZWQocXNwaS0+cmVncyArIFJFR19D T05UUk9MKTsNCj4gKw0KPiArCWlmIChjdHJsICYgQ09OVFJPTF9NT0RFMTJfTUFTSykNCj4gKwkJ ZnJhbWVzIHw9ICgxIDw8IEZSQU1FU19TSElGVCk7DQo+ICsNCj4gKwlmcmFtZXMgfD0gRlJBTUVT X0ZMQUdXT1JEOw0KPiArCXdyaXRlbF9yZWxheGVkKGZyYW1lcywgcXNwaS0+cmVncyArIFJFR19G UkFNRVMpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1jaHBfcXNwaV93YWl0X2Zvcl9yZWFk eShzdHJ1Y3Qgc3BpX21lbSAqbWVtKQ0KPiArew0KPiArCXN0cnVjdCBtY2hwX2NvcmVxc3BpICpx c3BpID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRhdGENCj4gKwkJCQkgICAgKG1lbS0+c3BpLT5t YXN0ZXIpOw0KPiArCXUzMiBzdGF0dXM7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IHJl YWRsX3BvbGxfdGltZW91dChxc3BpLT5yZWdzICsgUkVHX1NUQVRVUywgc3RhdHVzLA0KPiArCQkJ CSAoc3RhdHVzICYgU1RBVFVTX1JFQURZKSwgMCwNCj4gKwkJCQkgVElNRU9VVF9NUyk7DQo+ICsJ aWYgKHJldCkgew0KPiArCQlkZXZfZXJyKCZtZW0tPnNwaS0+ZGV2LA0KPiArCQkJIlRpbWVvdXQg d2FpdGluZyBvbiBRU1BJIHJlYWR5LlxuIik7DQo+ICsJCXJldHVybiAtRVRJTUVET1VUOw0KPiAr CX0NCj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbWNocF9j b3JlcXNwaV9leGVjX29wKHN0cnVjdCBzcGlfbWVtICptZW0sIGNvbnN0IHN0cnVjdA0KPiBzcGlf bWVtX29wICpvcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbWNocF9jb3JlcXNwaSAqcXNwaSA9IHNwaV9j b250cm9sbGVyX2dldF9kZXZkYXRhDQo+ICsJCQkJICAgIChtZW0tPnNwaS0+bWFzdGVyKTsNCj4g Kwl1MzIgYWRkcmVzcyA9IG9wLT5hZGRyLnZhbDsNCj4gKwl1OCBvcGNvZGUgPSBvcC0+Y21kLm9w Y29kZTsNCj4gKwl1OCBvcGFkZHJbNV07DQo+ICsJaW50IGVyciwgaTsNCj4gKw0KPiArCW11dGV4 X2xvY2soJnFzcGktPm9wX2xvY2spOw0KPiArCWVyciA9IG1jaHBfcXNwaV93YWl0X2Zvcl9yZWFk eShtZW0pOw0KPiArCWlmIChlcnIpDQo+ICsJCWdvdG8gZXJyb3I7DQo+ICsNCj4gKwllcnIgPSBt Y2hwX2NvcmVxc3BpX3NldHVwX2Nsb2NrKHFzcGksIG1lbS0+c3BpKTsNCj4gKwlpZiAoZXJyKQ0K PiArCQlnb3RvIGVycm9yOw0KPiArDQo+ICsJZXJyID0gbWNocF9jb3JlcXNwaV9zZXRfbW9kZShx c3BpLCBvcCk7DQo+ICsJaWYgKGVycikNCj4gKwkJZ290byBlcnJvcjsNCj4gKw0KPiArCXJlaW5p dF9jb21wbGV0aW9uKCZxc3BpLT5kYXRhX2NvbXBsZXRpb24pOw0KPiArCW1jaHBfY29yZXFzcGlf Y29uZmlnX29wKHFzcGksIG9wKTsNCj4gKwlpZiAob3AtPmNtZC5vcGNvZGUpIHsNCj4gKwkJcXNw aS0+dHhidWYgPSAmb3Bjb2RlOw0KPiArCQlxc3BpLT5yeGJ1ZiA9IE5VTEw7DQo+ICsJCXFzcGkt PnR4X2xlbiA9IG9wLT5jbWQubmJ5dGVzOw0KPiArCQlxc3BpLT5yeF9sZW4gPSAwOw0KPiArCQlt Y2hwX2NvcmVxc3BpX3dyaXRlX29wKHFzcGksIGZhbHNlKTsNCj4gKwl9DQo+ICsNCj4gKwlxc3Bp LT50eGJ1ZiA9ICZvcGFkZHJbMF07DQo+ICsJaWYgKG9wLT5hZGRyLm5ieXRlcykgew0KPiArCQlm b3IgKGkgPSAwOyBpIDwgb3AtPmFkZHIubmJ5dGVzOyBpKyspDQo+ICsJCQlxc3BpLT50eGJ1Zltp XSA9IGFkZHJlc3MgPj4gKDggKiAob3AtDQo+ID5hZGRyLm5ieXRlcyAtIGkgLSAxKSk7DQo+ICsN Cj4gKwkJcXNwaS0+cnhidWYgPSBOVUxMOw0KPiArCQlxc3BpLT50eF9sZW4gPSBvcC0+YWRkci5u Ynl0ZXM7DQo+ICsJCXFzcGktPnJ4X2xlbiA9IDA7DQo+ICsJCW1jaHBfY29yZXFzcGlfd3JpdGVf b3AocXNwaSwgZmFsc2UpOw0KPiArCX0NCj4gKw0KPiArCWlmIChvcC0+ZGF0YS5uYnl0ZXMpIHsN Cj4gKwkJaWYgKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfT1VUKSB7DQo+ICsJCQlxc3Bp LT50eGJ1ZiA9ICh1OCAqKW9wLT5kYXRhLmJ1Zi5vdXQ7DQo+ICsJCQlxc3BpLT5yeGJ1ZiA9IE5V TEw7DQo+ICsJCQlxc3BpLT5yeF9sZW4gPSAwOw0KPiArCQkJcXNwaS0+dHhfbGVuID0gb3AtPmRh dGEubmJ5dGVzOw0KPiArCQkJbWNocF9jb3JlcXNwaV93cml0ZV9vcChxc3BpLCB0cnVlKTsNCj4g KwkJfSBlbHNlIHsNCj4gKwkJCXFzcGktPnR4YnVmID0gTlVMTDsNCj4gKwkJCXFzcGktPnJ4YnVm ID0gKHU4ICopb3AtPmRhdGEuYnVmLmluOw0KPiArCQkJcXNwaS0+cnhfbGVuID0gb3AtPmRhdGEu bmJ5dGVzOw0KPiArCQkJcXNwaS0+dHhfbGVuID0gMDsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiAr CW1jaHBfY29yZXFzcGlfZW5hYmxlX2ludHMocXNwaSk7DQo+ICsNCj4gKwlpZiAoIXdhaXRfZm9y X2NvbXBsZXRpb25fdGltZW91dCgmcXNwaS0+ZGF0YV9jb21wbGV0aW9uLA0KPiBtc2Vjc190b19q aWZmaWVzKDEwMDApKSkNCj4gKwkJZXJyID0gLUVUSU1FRE9VVDsNCj4gKw0KPiArZXJyb3I6DQo+ ICsJbXV0ZXhfdW5sb2NrKCZxc3BpLT5vcF9sb2NrKTsNCj4gKwltY2hwX2NvcmVxc3BpX2Rpc2Fi bGVfaW50cyhxc3BpKTsNCj4gKw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBib29sIG1jaHBfY29yZXFzcGlfc3VwcG9ydHNfb3Aoc3RydWN0IHNwaV9tZW0gKm1lbSwgY29u c3QNCj4gc3RydWN0IHNwaV9tZW1fb3AgKm9wKQ0KPiArew0KPiArCWlmICghc3BpX21lbV9kZWZh dWx0X3N1cHBvcnRzX29wKG1lbSwgb3ApKQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwlp ZiAoKG9wLT5kYXRhLmJ1c3dpZHRoID09IDQgfHwgb3AtPmRhdGEuYnVzd2lkdGggPT0gMikgJiYN Cj4gKwkgICAgKG9wLT5jbWQuYnVzd2lkdGggPT0gMSAmJiAob3AtPmFkZHIuYnVzd2lkdGggPT0g MSB8fCBvcC0NCj4gPmFkZHIuYnVzd2lkdGggPT0gMCkpKSB7DQo+ICsJCS8qDQo+ICsJCSAqIElm IHRoZSBjb21tYW5kIGFuZCBhZGRyZXNzIGFyZSBvbiBEUTAgb25seSwgdGhlbg0KPiB0aGlzDQo+ ICsJCSAqIGNvbnRyb2xsZXIgZG9lc24ndCBzdXBwb3J0IHNlbmRpbmcgZGF0YSBvbiBkdWFsIGFu ZA0KPiArCQkgKiBxdWFkIGxpbmVzLiBidXQgaXQgc3VwcG9ydHMgcmVhZGluZyBkYXRhIG9uIGR1 YWwgYW5kDQo+ICsJCSAqIHF1YWQgbGluZXMgd2l0aCBzYW1lIGNvbmZpZ3VyYXRpb24gYXMgY29t bWFuZCBhbmQNCj4gKwkJICogYWRkcmVzcyBvbiBEUTAuDQo+ICsJCSAqIGkuZS4gVGhlIGNvbnRy b2wgcmVnaXN0ZXJbMTU6MTNdIDpFWF9STyhyZWFkIG9ubHkpDQo+IGlzDQo+ICsJCSAqIG1lYW50 IG9ubHkgZm9yIHRoZSBjb21tYW5kIGFuZCBhZGRyZXNzIGFyZSBvbiBEUTANCj4gYnV0DQo+ICsJ CSAqIG5vdCB0byB3cml0ZSBkYXRhLCBpdCBpcyBqdXN0IHRvIHJlYWQuDQo+ICsJCSAqIEV4OiAw eDM0aCBpcyBRdWFkIExvYWQgUHJvZ3JhbSBEYXRhIHdoaWNoIGlzIG5vdA0KPiArCQkgKiBzdXBw b3J0ZWQuIFRoZW4gdGhlIHNwaS1tZW0gbGF5ZXIgd2lsbCBpdGVyYXRlIG92ZXINCj4gKwkJICog ZWFjaCBjb21tYW5kIGFuZCBpdCB3aWxsIGNob3NlIHRoZSBzdXBwb3J0ZWQgb25lLg0KPiArCQkg Ki8NCj4gKwkJaWYgKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfT1VUKQ0KPiArCQkJcmV0 dXJuIGZhbHNlOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiB0cnVlOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgaW50IG1jaHBfY29yZXFzcGlfYWRqdXN0X29wX3NpemUoc3RydWN0IHNwaV9tZW0gKm1l bSwgc3RydWN0DQo+IHNwaV9tZW1fb3AgKm9wKQ0KPiArew0KPiArCWlmIChvcC0+ZGF0YS5kaXIg PT0gU1BJX01FTV9EQVRBX09VVCB8fCBvcC0+ZGF0YS5kaXIgPT0NCj4gU1BJX01FTV9EQVRBX0lO KSB7DQo+ICsJCWlmIChvcC0+ZGF0YS5uYnl0ZXMgPiBNQVhfREFUQV9DTURfTEVOKQ0KPiArCQkJ b3AtPmRhdGEubmJ5dGVzID0gTUFYX0RBVEFfQ01EX0xFTjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1 cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfY29udHJvbGxlcl9t ZW1fb3BzIG1jaHBfY29yZXFzcGlfbWVtX29wcyA9IHsNCj4gKwkuYWRqdXN0X29wX3NpemUgPSBt Y2hwX2NvcmVxc3BpX2FkanVzdF9vcF9zaXplLA0KPiArCS5zdXBwb3J0c19vcCA9IG1jaHBfY29y ZXFzcGlfc3VwcG9ydHNfb3AsDQo+ICsJLmV4ZWNfb3AgPSBtY2hwX2NvcmVxc3BpX2V4ZWNfb3As DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW50IG1jaHBfY29yZXFzcGlfcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikNCj4gK3sNCj4gKwlzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXIgKmN0 bHI7DQo+ICsJc3RydWN0IG1jaHBfY29yZXFzcGkgKnFzcGk7DQo+ICsJc3RydWN0IGRldmljZSAq ZGV2ID0gJnBkZXYtPmRldjsNCj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9u b2RlOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwljdGxyID0gZGV2bV9zcGlfYWxsb2NfbWFzdGVy KCZwZGV2LT5kZXYsIHNpemVvZigqcXNwaSkpOw0KPiArCWlmICghY3RscikNCj4gKwkJcmV0dXJu IGRldl9lcnJfcHJvYmUoJnBkZXYtPmRldiwgLUVOT01FTSwNCj4gKwkJCQkgICAgICJ1bmFibGUg dG8gYWxsb2NhdGUgbWFzdGVyIGZvcg0KPiBRU1BJIGNvbnRyb2xsZXJcbiIpOw0KPiArDQo+ICsJ cXNwaSA9IHNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKGN0bHIpOw0KPiArCXBsYXRmb3JtX3Nl dF9kcnZkYXRhKHBkZXYsIHFzcGkpOw0KPiArDQo+ICsJcXNwaS0+cmVncyA9IGRldm1fcGxhdGZv cm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsNCj4gKwlpZiAoSVNfRVJSKHFzcGktPnJlZ3Mp KQ0KPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmcGRldi0+ZGV2LCBQVFJfRVJSKHFzcGktPnJl Z3MpLA0KPiArCQkJCSAgICAgImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iKTsNCj4gKw0KPiAr CXFzcGktPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsNCj4gKwlpZiAoSVNf RVJSKHFzcGktPmNsaykpDQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKCZwZGV2LT5kZXYsIFBU Ul9FUlIocXNwaS0+Y2xrKSwNCj4gKwkJCQkgICAgICJjb3VsZCBub3QgZ2V0IGNsb2NrXG4iKTsN Cj4gKw0KPiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShxc3BpLT5jbGspOw0KPiArCWlmIChy ZXQpDQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKCZwZGV2LT5kZXYsIHJldCwNCj4gKwkJCQkg ICAgICJmYWlsZWQgdG8gZW5hYmxlIGNsb2NrXG4iKTsNCj4gKw0KPiArCWluaXRfY29tcGxldGlv bigmcXNwaS0+ZGF0YV9jb21wbGV0aW9uKTsNCj4gKwltdXRleF9pbml0KCZxc3BpLT5vcF9sb2Nr KTsNCj4gKw0KPiArCXFzcGktPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQo+ICsJ aWYgKHFzcGktPmlycSA8IDApIHsNCj4gKwkJcmV0ID0gcXNwaS0+aXJxOw0KPiArCQlnb3RvIG91 dDsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIHFz cGktPmlycSwNCj4gbWNocF9jb3JlcXNwaV9pc3IsDQo+ICsJCQkgICAgICAgSVJRRl9TSEFSRUQs IHBkZXYtPm5hbWUsIHFzcGkpOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X2VycigmcGRldi0+ ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkICVkXG4iLCByZXQpOw0KPiArCQlnb3RvIG91dDsNCj4g Kwl9DQo+ICsNCj4gKwljdGxyLT5iaXRzX3Blcl93b3JkX21hc2sgPSBTUElfQlBXX01BU0soOCk7 DQo+ICsJY3Rsci0+bWVtX29wcyA9ICZtY2hwX2NvcmVxc3BpX21lbV9vcHM7DQo+ICsJY3Rsci0+ c2V0dXAgPSBtY2hwX2NvcmVxc3BpX3NldHVwX29wOw0KPiArCWN0bHItPm1vZGVfYml0cyA9IFNQ SV9DUE9MIHwgU1BJX0NQSEEgfCBTUElfUlhfRFVBTCB8DQo+IFNQSV9SWF9RVUFEIHwNCj4gKwkJ CSAgU1BJX1RYX0RVQUwgfCBTUElfVFhfUVVBRDsNCj4gKwljdGxyLT5kZXYub2Zfbm9kZSA9IG5w Ow0KPiArDQo+ICsJcmV0ID0gZGV2bV9zcGlfcmVnaXN0ZXJfY29udHJvbGxlcigmcGRldi0+ZGV2 LCBjdGxyKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCWRldl9lcnJfcHJvYmUoJnBkZXYtPmRldiwg cmV0LA0KPiArCQkJICAgICAgInNwaV9yZWdpc3Rlcl9jb250cm9sbGVyIGZhaWxlZFxuIik7DQo+ ICsJCWdvdG8gb3V0Ow0KPiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArDQo+ICtvdXQ6DQo+ ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHFzcGktPmNsayk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0 Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1jaHBfY29yZXFzcGlfcmVtb3ZlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICsJc3RydWN0IG1jaHBfY29yZXFzcGkgKnFz cGkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gKwl1MzIgY29udHJvbCA9IHJlYWRs X3JlbGF4ZWQocXNwaS0+cmVncyArIFJFR19DT05UUk9MKTsNCj4gKw0KPiArCW1jaHBfY29yZXFz cGlfZGlzYWJsZV9pbnRzKHFzcGkpOw0KPiArCWNvbnRyb2wgJj0gfkNPTlRST0xfRU5BQkxFOw0K PiArCXdyaXRlbF9yZWxheGVkKGNvbnRyb2wsIHFzcGktPnJlZ3MgKyBSRUdfQ09OVFJPTCk7DQo+ ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHFzcGktPmNsayk7DQo+ICsNCj4gKwlyZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWNocF9jb3Jl cXNwaV9vZl9tYXRjaFtdID0gew0KPiArCXsgLmNvbXBhdGlibGUgPSAibWljcm9jaGlwLGNvcmVx c3BpLXJ0bC12MiIgfSwNCj4gKwl7IC8qIHNlbnRpbmVsICovIH0NCj4gK307DQo+ICtNT0RVTEVf REVWSUNFX1RBQkxFKG9mLCBtY2hwX2NvcmVxc3BpX29mX21hdGNoKTsNCj4gKw0KPiArc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWNocF9jb3JlcXNwaV9kcml2ZXIgPSB7DQo+ICsJLnBy b2JlID0gbWNocF9jb3JlcXNwaV9wcm9iZSwNCj4gKwkuZHJpdmVyID0gew0KPiArCQkubmFtZSA9 ICJtaWNyb2NoaXAsY29yZXFzcGkiLA0KPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBtY2hwX2NvcmVx c3BpX29mX21hdGNoLA0KPiArCX0sDQo+ICsJLnJlbW92ZSA9IG1jaHBfY29yZXFzcGlfcmVtb3Zl LA0KPiArfTsNCj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobWNocF9jb3JlcXNwaV9kcml2ZXIp Ow0KPiArDQo+ICtNT0RVTEVfQVVUSE9SKCJOYWdhIFN1cmVzaGt1bWFyIFJlbGxpIDwNCj4gbmFn YXN1cmVzaC5yZWxsaUBtaWNyb2NoaXAuY29tIik7DQo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk1p Y3JvY2hpcCBjb3JlUVNQSSBRU1BJIGNvbnRyb2xsZXIgZHJpdmVyIik7DQo+ICtNT0RVTEVfTElD RU5TRSgiR1BMIik7DQo=