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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 501DDC433F5 for ; Wed, 1 Dec 2021 18:40:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=+vVY6mrczUxpBQxofnr9xJ5nQA5Fztt7s4SsJNQKoR0=; b=1EfyrC2wKN1BnG b8LDzcKVxdZBBqmGMW4VwI/sIbTIAO3F4AImc3PwnXmX53C8wlNNJdYXPv7AZ0r7xT5ARMd4uIaZk PeRe8bvA/JQYj0nNPRQnyc2OSI0VJ9/4hykj124BJ/4FnrnkEv8RztYMC35+IBbLa+F9Q2ne1kHVP rKuYlmwuXOA+n8QIeMkRxHhPZU96TAiJ5Q2dUTT/Zckqsyf3oq1rS78ERYkJQmmlVG0qOc7XEJuKM 29e1i/POaOsOXRDYdA1fCQ7gFVZw4RghWidfgeq0wAlPEx0QWDYCSStYym7F2f+kVACJHP5md6E7r WhRUePKswNcN8sHQkc+A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1msUUl-009q8w-GN; Wed, 01 Dec 2021 18:38:19 +0000 Received: from mail-bn8nam12on2075.outbound.protection.outlook.com ([40.107.237.75] helo=NAM12-BN8-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1msUUd-009q5t-71 for linux-arm-kernel@lists.infradead.org; Wed, 01 Dec 2021 18:38:15 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ThE2EYO57YRjTT5SbDl1yg4QCoOiKp42YRv2KGEJv+kc01A8khZqRoD7L7Zik6/3kA+VXuCWNIxuM3W2PvnY1nczfdoLSpoRJRFbIEmI8t8PRVSY0yp9hbeYjEwnYNPM+FhEJM82xlU7lWUAWP5noiOJsXnquL3gJ8yv8k5tu2o1Q38eWdED1QSfxHKax5q8m1ziDiQcsac81lAocmxuOqw/nxlZfcQvTbawtCWU8LlvysoB5RZqCngAOq4jm7ZdPpUjRloCqanOM4puF190Da1ljG/zZixs4QlKX+yV8mPVvIQ2VO7EGm/KRXcNTOLOEe3mEohoI1DZhWK9Hcpsvg== 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=+Bkrr9cKEDqFPSlC5zaNK6aYGjc5LiZ5PtevjE2794I=; b=Rg9sHhJ9WRDPLhyIL74Le6Is3+jvWlpU3YLvmX47aowWDLTzLD5VLZEU76PHyO+K90Z+2Qn9pwhIBgjZALb++uu9HNZzs2F4qJ+whMoCsPGmWZ6WLbL1UF4hsa2LtZJp1v9AMHCoHrzrq0UGY3ZK7rb/I8VEdp3SLfwFHukUkTbtbUH9eUMbkxnIsmDRKN1aWxbFe1nDbdQqGdzpS50L9NLRHpOFJ1UmfWVpqZ+SAahvpSJraK/FTc1kkeVkw8zDEHLVPLW43g48ZYMG6GkgeebO7EGi+3/xgcyACAfc9O6zfCq0RfW3ysjqs07TEQ5d437BJWmtna0F1lFyUI3aQA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 149.199.80.198) smtp.rcpttodomain=linaro.org smtp.mailfrom=xilinx.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=xilinx.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+Bkrr9cKEDqFPSlC5zaNK6aYGjc5LiZ5PtevjE2794I=; b=r9V6gwGi2h2r4ma++XgGHBoJvstk8dU5Wt50su5giwJxQ5/lCqAweOEfNxjiFDzF/Kjio2lTQ14nUGgxBBrv7swG8oDFn1hTh33Uxc5yMC9WiPwt8T+VlslqVH9mxBkKZd54PqwdFcgU0CNZp5Ipl3yuem8vilUEuu7nlzUl7HE= Received: from BN8PR03CA0016.namprd03.prod.outlook.com (2603:10b6:408:94::29) by PH0PR02MB7573.namprd02.prod.outlook.com (2603:10b6:510:4e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.23; Wed, 1 Dec 2021 18:38:06 +0000 Received: from BN1NAM02FT018.eop-nam02.prod.protection.outlook.com (2603:10b6:408:94:cafe::d3) by BN8PR03CA0016.outlook.office365.com (2603:10b6:408:94::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.11 via Frontend Transport; Wed, 1 Dec 2021 18:38:05 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 149.199.80.198) smtp.mailfrom=xilinx.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.80.198 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.80.198; helo=xir-pvapexch01.xlnx.xilinx.com; Received: from xir-pvapexch01.xlnx.xilinx.com (149.199.80.198) by BN1NAM02FT018.mail.protection.outlook.com (10.13.3.159) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.4755.13 via Frontend Transport; Wed, 1 Dec 2021 18:38:05 +0000 Received: from xir-pvapexch01.xlnx.xilinx.com (172.21.17.15) by xir-pvapexch01.xlnx.xilinx.com (172.21.17.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Wed, 1 Dec 2021 18:38:04 +0000 Received: from smtp.xilinx.com (172.21.105.198) by xir-pvapexch01.xlnx.xilinx.com (172.21.17.15) with Microsoft SMTP Server id 15.1.2176.14 via Frontend Transport; Wed, 1 Dec 2021 18:38:04 +0000 Received: from [10.71.118.169] (port=54103) by smtp.xilinx.com with esmtp (Exim 4.90) (envelope-from ) id 1msUUT-0000S5-ON; Wed, 01 Dec 2021 18:38:03 +0000 Message-ID: <8f9b0c97-d7d8-9957-4525-391aaa27a9a2@xilinx.com> Date: Thu, 2 Dec 2021 00:07:51 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Subject: Re: [PATCH v2 6/6] drivers: remoteproc: Add Xilinx r5 remoteproc driver Content-Language: en-US To: Mathieu Poirier CC: Bjorn Andersson , Rob Herring , Michal Simek , "Laurent Pinchart" , Ben Levinsky , Bill Mills , "Sergei Korneichuk" , , , , References: <20211123062050.1442712-1-tanmay.shah@xilinx.com> <20211123062050.1442712-7-tanmay.shah@xilinx.com> <20211129184219.GC676889@p14s> <3d0b7062-12d4-bc58-9b37-931921881a1f@xilinx.com> From: Tanmay Shah In-Reply-To: X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6774244c-0163-487f-5016-08d9b4f9b6d6 X-MS-TrafficTypeDiagnostic: PH0PR02MB7573: X-Microsoft-Antispam-PRVS: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AbL7ODJQrbxmP41SOhk7gCrMheu31eVEaUT2Ck6vq/3PuJ+6AEWRXIFnuff6YgM3gXozF4wCuG5H0iDniyMjaanCe1YqiqytmlqLpk4y3xSfGAh2xQ9/NpuCB/IGXcWyKZQbFbYp9fpXZs1siPUNoqsTerEUmbwl5YeSJ72PFtbYOKgi8Grb8LuZ19jaU5G9D7GaMmdYRR33+3XTUYyfcA4XbAvh+zoQATUYxRg3on9FA33YKhg+1pkHRe8as1v3GDu5zu6XXU1xDXvsPEQdqGMGCmHluYBP0m0DXB5r+X6dKktW79J8bJZ1S7YtfuwC7XpswtwyMOUaAHFpeD3MmkmUge8XylgPiNLJuk3V2tEbeuLQy51YgGyiJQ2MxqqB0wiMbwcPzPZNQElwiCiM8pLCadML0s/w5WEoYKeziZIo+NbyYIYLLcTZhN+BSMdG1Qxd9nevOrkHZy++KwegXjXh1Y87+FBgNKiH23ECz0l22bWhqIbXyCK/f7pSYmwtUesI8Bx/4rr08APgj05VNL/iMFBh/Ia7d9R9+6uAKcyK5vj0Klh9A0+7kmu54hM45cNSArSAEG/RZfHajar4iExDNbMyrIBRMib/TgbN7Wbvs5pW3oJf6QAte6nOSlbTqEdrzZgp8FrLVdVnmXWkJQafxNz/mHYelPlEtA4FRsJMyZMsE02p+P12ixY8qX5YcJy3qdWKiM37wynvlg4AOKyW/9PuD08s5cFImIycMIuNXwsjrowIeonskFv6K0cJLSFfAbgZFiGNkOIiJWkiMz13l/qmxUtgij+rYtD0JXl/zJqDbAIJELYL2awTmX4cDCEQcDpejFK8hTZOSrniWPmrxXx6ZQlS6YN9duYFlgkDmczs1l4H59RMZwDsrcaf X-Forefront-Antispam-Report: CIP:149.199.80.198; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:xir-pvapexch01.xlnx.xilinx.com; PTR:unknown-80-198.xilinx.com; CAT:NONE; SFS:(46966006)(36840700001)(8676002)(6916009)(2906002)(316002)(4326008)(186003)(336012)(8936002)(2616005)(31686004)(26005)(82310400004)(53546011)(36756003)(426003)(7636003)(70586007)(966005)(508600001)(47076005)(356005)(54906003)(70206006)(9786002)(83380400001)(31696002)(44832011)(6666004)(30864003)(5660300002)(36860700001)(50156003)(43740500002)(579004); DIR:OUT; SFP:1101; X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Dec 2021 18:38:05.4959 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6774244c-0163-487f-5016-08d9b4f9b6d6 X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.80.198]; Helo=[xir-pvapexch01.xlnx.xilinx.com] X-MS-Exchange-CrossTenant-AuthSource: BN1NAM02FT018.eop-nam02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR02MB7573 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211201_103811_465136_5187C94F X-CRM114-Status: GOOD ( 32.59 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Ck9uIDEyLzEvMjEgMTo0NCBBTSwgTWF0aGlldSBQb2lyaWVyIHdyb3RlOgo+IE9uIFR1ZSwgMzAg Tm92IDIwMjEgYXQgMDE6MDEsIFRhbm1heSBTaGFoIDx0YW5tYXkuc2hhaEB4aWxpbnguY29tPiB3 cm90ZToKPj4KPj4gT24gMTEvMzAvMjEgMTI6MTIgQU0sIE1hdGhpZXUgUG9pcmllciB3cm90ZToK Pj4+IE9uIE1vbiwgTm92IDIyLCAyMDIxIGF0IDEwOjIwOjUwUE0gLTA4MDAsIFRhbm1heSBTaGFo IHdyb3RlOgo+Pj4+IFRoaXMgZHJpdmVyIGVuYWJsZXMgcjVmIGR1YWwgY29yZSBSZWFsIHRpbWUg UHJvY2Vzc2luZyBVbml0IHN1YnN5c3RlbQo+Pj4+IGF2YWlsYWJsZSBvbiBYaWxpbnggWnlucSBV bHRyYXNjYWxlIE1QU29DIFBsYXRmb3JtLiBSUFUgc3Vic3lzdGVtCj4+Pj4gKGNsdXN0ZXIpIGNh biBiZSBjb25maWd1cmVkIGluIGRpZmZlcmVudCBtb2RlcyBlLmcuIHNwbGl0IG1vZGUgaW4gd2hp Y2gKPj4+PiB0d28gcjVmIGNvcmVzIHdvcmsgaW5kZXBlbmRlbnQgb2YgZWFjaCBvdGhlciBhbmQg bG9jay1zdGVwIG1vZGUgaW4gd2hpY2gKPj4+PiBib3RoIHI1ZiBjb3JlcyBleGVjdXRlIHNhbWUg Y29kZSBjbG9jay1mb3ItY2xvY2sgYW5kIG5vdGlmeSBpZiB0aGUKPj4+PiByZXN1bHQgaXMgZGlm ZmVyZW50Lgo+Pj4+Cj4+Pj4gVGhlIFhpbGlueCByNSBSZW1vdGVwcm9jIERyaXZlciBib290cyB0 aGUgUlBVIGNvcmVzIHZpYSBjYWxscyB0byB0aGUgWGlsaW54Cj4+Pj4gUGxhdGZvcm0gTWFuYWdl bWVudCBVbml0IHRoYXQgaGFuZGxlcyB0aGUgUjUgY29uZmlndXJhdGlvbiwgbWVtb3J5IGFjY2Vz cwo+Pj4+IGFuZCBSNSBsaWZlY3ljbGUgbWFuYWdlbWVudC4gVGhlIGludGVyZmFjZSB0byB0aGlz IG1hbmFnZXIgaXMgZG9uZSBpbiB0aGlzCj4+Pj4gZHJpdmVyIHZpYSB6eW5xbXBfcG1fKiBmdW5j dGlvbiBjYWxscy4KPj4+Pgo+Pj4+IFNpZ25lZC1vZmYtYnk6IEJlbiBMZXZpbnNreSA8YmVuLmxl dmluc2t5QHhpbGlueC5jb20+Cj4+Pj4gU2lnbmVkLW9mZi1ieTogVGFubWF5IFNoYWggPHRhbm1h eS5zaGFoQHhpbGlueC5jb20+Cj4+Pj4gLS0tCj4+Pj4gICAgZHJpdmVycy9yZW1vdGVwcm9jL0tj b25maWcgICAgICAgICAgICAgIHwgIDEyICsKPj4+PiAgICBkcml2ZXJzL3JlbW90ZXByb2MvTWFr ZWZpbGUgICAgICAgICAgICAgfCAgIDEgKwo+Pj4+ICAgIGRyaXZlcnMvcmVtb3RlcHJvYy94bG54 X3I1X3JlbW90ZXByb2MuYyB8IDk1OSArKysrKysrKysrKysrKysrKysrKysrKysKPj4+PiAgICAz IGZpbGVzIGNoYW5nZWQsIDk3MiBpbnNlcnRpb25zKCspCj4+Pj4gICAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvcmVtb3RlcHJvYy94bG54X3I1X3JlbW90ZXByb2MuYwo+Pj4gLi4uYW5kIHRo aXMgcGF0Y2ggZ2l2ZXMgbWUgY29tcGxhdGlvbiB3YXJuaW5nczoKPj4+Cj4+PiAgICAgQ0MgICAg ICBkcml2ZXJzL3JlbW90ZXByb2MveGxueF9yNV9yZW1vdGVwcm9jLm8KPj4+IGtlcm5lbC1yZXZp ZXcvZHJpdmVycy9yZW1vdGVwcm9jL3hsbnhfcjVfcmVtb3RlcHJvYy5jOiBJbiBmdW5jdGlvbiDi gJhhZGRfdGNtX2NhcnZlb3V0X2xvY2tzdGVwX21vZGXigJk6Cj4+PiBrZXJuZWwtcmV2aWV3L2Ry aXZlcnMvcmVtb3RlcHJvYy94bG54X3I1X3JlbW90ZXByb2MuYzo0MTI6Mjg6IHdhcm5pbmc6IHVu dXNlZCB2YXJpYWJsZSDigJhjbHVzdGVy4oCZIFstV3VudXNlZC12YXJpYWJsZV0KPj4+ICAgICA0 MTIgfCAgc3RydWN0IHp5bnFtcF9yNV9jbHVzdGVyICpjbHVzdGVyOwo+Pj4gICAgICAgICB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn4KPj4+IGtlcm5lbC1yZXZpZXcvZHJpdmVy cy9yZW1vdGVwcm9jL3hsbnhfcjVfcmVtb3RlcHJvYy5jOjQxMToyNjogd2FybmluZzogdW51c2Vk IHZhcmlhYmxlIOKAmHBhcmVudF9wZGV24oCZIFstV3VudXNlZC12YXJpYWJsZV0KPj4+ICAgICA0 MTEgfCAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGFyZW50X3BkZXY7Cj4+PiAgICAgICAgIHwg ICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn5+fn5+Cj4+Pgo+Pj4gVGhlIGFib3ZlIGxl YWRzIG1lIHRvIGJlbGlldmUgdGhpcyBwYXRjaHNldCB3YXMgbm90IGNvbXBpbGVkIGJlZm9yZSBp dCB3YXMgc2VudAo+Pj4gb3V0Lgo+PiBQbGVhc2UgZG9uJ3QgYXNzdW1lIHRoYXQgdGhpcyBwYXRj aC1zZXQgd2FzIG5vdCBjb21waWxlZC4gIFRoaXMgZHJpdmVyCj4+IHdhcyBjb21waWxlZCBhbmQg dGVzdGVkIG9uIFhpbGlueCBRRU1VIGFuZCB6eW5xbXAgcGxhdGZvcm0gZm9yIGl0cwo+PiBmdW5j dGlvbmFsaXR5Lgo+Pgo+PiBUaGlzIGRyaXZlciB3ZW50IHRocm91Z2ggbXVsdGlwbGUgaW50ZXJu YWwgcmV2aWV3cyBhbmQgSSBoYWQgdG8KPj4gcmUtYXJjaGl0ZWN0dXJlIGl0IG11bHRpcGxlIHRp bWVzLgo+IEFuZCB5ZXQgdHdvIHVudXNlZCB2YXJpYWJsZXMgKHdoaWNoICBpcyBwcmV0dHkgZWFz eSB0byBzcG90KSBnb3QgYnkuCj4KPj4gSSBzaW1wbHkgbWlzc2VkIHRvIGZpeCBhYm92ZSB3YXJu aW5ncyBiZWZvcmUgc3VibWl0dGluZyBkcml2ZXIuIEkgaGF2ZQo+PiBjb21waWxlZCBkcml2ZXIg d2l0aCBmb2xsb3dpbmcgY29tbWFuZDoKPj4KPj4gLy9tYWtlIEFSQ0g9YXJtNjQgVz0xIEM9MSBD Uk9TU19DT01QSUxFPSJhYXJjaDY0LWxpbnV4LWdudS0iIC1qMzIgLVJyCj4+IE89JHp5bnFtcF9r ZXJuZWxfYnVpbGQvcnByb2MtbmV4dAo+Pgo+PiBJIGRpZCBteSBiZXN0IHRvIG1ha2Ugc3VyZSBk cml2ZXIgc3RheXMgd2FybmluZyBmcmVlLCBob3dldmVyIGZldwo+PiB3YXJuaW5ncyB3ZXJlIHN0 aWxsIG1pc3NlZC4gVGhhdCBpcyBub3QgaW50ZW50aW9uYWwgYW5kIGJ5IG1pc3Rha2UuIEkKPj4g ZnVsbHkgaW50ZW5kIHRvIGNvbXBseSB3aXRoIExpbnV4IEtlcm5lbCBjb21tdW5pdHkgZ3VpZGVs aW5lIGFuZAo+PiBjaGVja2xpc3QgYmVmb3JlIHN1Ym1pdHRpbmcgcGF0Y2hlcy4KPj4KPiBJIGFt IHN1cmUgeW91IGRvLgo+Cj4+IEFwYXJ0IGZyb20gYWJvdmUgd2FybmluZ3MsIHR3byBtb3JlIHdh cm5pbmdzIGFyZSB0aGVyZSBpbiB2MiBpLmUuIGR1ZSB0bwo+PiB0eXBlY2FzdCBpc3N1ZSBiZXR3 ZWVuICh2b2lkIF9faW9tZW0gKikgYW5kICh2b2lkICopLiBCdXQsIEkgaGFkIG5vdAo+PiBzb2x1 dGlvbiBiZWZvcmUuIEFsc28gdGhleSB3ZXJlIHVzZWQgYmVmb3JlIGluIGRpZmZlcmVudCBkcml2 ZXIgc28sIEkKPj4gY2hvc2UgdG8gdXNlIHRoZW0gYW55d2F5Lgo+Pgo+IFRoZSBzcGFyc2Ugd2Fy bmluZ3MgcmVsYXRlZCB0byB0aGUgIl9faW9tZW0gKiIgY2FuIGJlIGlnbm9yZWQuICBJIGFsc28K PiB0cmllZCB0byBmaW5kIGEgc29sdXRpb24gdG8gdGhvc2UgYnV0IHJlYWxpc2VkIGl0IHdhcyBt b3JlIGludm9sdmVkCj4gdGhhbiBleHBlY3RlZC4KPgo+PiBJIGp1c3QgZm91bmQgdGhhdCB1c2lu ZyBtZW1yZW1hcCBzZXQgb2YgZnVuY3Rpb25zIHdpbGwgZml4IHRoZW0uIEkgd2lsbAo+PiB1c2Ug dGhvc2UgZnVuY3Rpb25zIGluIG5leHQgcGF0Y2ggc2V0IGluc3RlYWQgb2YgaW9yZW1hcF93YyBh cyBleHBsYWluZWQKPj4gaW4gdGhpcyBhcnRpY2xlOiBodHRwczovL2x3bi5uZXQvQXJ0aWNsZXMv NjUzNTg1Lwo+Pgo+IFRoaXMgaXMgdmVyeSBpbnRlcmVzdGluZy4uLgo+Cj4+PiBCZWluZyBuZXcg dG8gdGhpcyBJIGNhbiB1bmRlcnN0YW5kIHRoYXQgY2hlY2twYXRjaC5wbCB3YXMgb21pdHRlZCAo YWxiZWl0IGFtcGx5Cj4+PiBkb2N1bWVudGVkKSBidXQgb2J2aW91cyBjb21waWxhdGlvbiB3YXJu aW5ncyBjYW4ndCBiZSBleGN1c2VkLiAgQXMgc3VjaCBJCj4+PiBhbSBkcm9wcGluZyB0aGlzIHNl dCBhbmQgd2lsbCBub3QgcmV2aWV3IGFub3RoZXIgdmVyc2lvbiB1bnRpbCBKYW51YXJ5Lgo+Pgo+ PiBJIHVuZGVyc3RhbmQgaGF2aW5nIHdhcm5pbmdzIGluIGRyaXZlciBtYXkgbGVhZCB0byBmcnVz dHJhdGlvbiBhbmQgbWF5Cj4+IGNhdXNlIHRydXN0IGlzc3VlcyBmb3IgdGhlIHJlc3Qgb2YgdGhl IGNvZGUgYW5kIGl0IGNhbid0IGJlIGV4Y3VzZWQgYXQgYWxsLgo+Pgo+IFZlcnkgbXVjaCBzby4K Pgo+PiBJIGFtIGF3YXJlIG9mIGd1aWRlbGluZXMgb2Ygc2VuZGluZyBwYXRjaGVzIHVwc3RyZWFt Cj4+IChodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9wcm9jZXNzL3N1Ym1p dHRpbmctcGF0Y2hlcy5odG1sKQo+PiBhbmQgZnVsbHkgaW50ZW5kIHRvIGNvbXBseSB3aXRoIHRo YXQgYW5kIGxpa2UgSSBzYWlkLCBpZiBJIG1pc3MKPj4gc29tZXRoaW5nIGl0IGlzIG5vdCBieSBp bnRlbnRpb24gYnV0IGh1bWFuIGVycm9yLgo+Pgo+PiBJIGNvbnN0YW50bHkgdHJ5IHRvIGltcHJv dmUgcHJvY2Vzc2VzIHRvIHVwc3RyZWFtIHBhdGNoZXMgc28gd2UgZG9uJ3QKPj4gZmFjZSBhYm92 ZSB0eXBlIG9mIGlzc3Vlcy4KPj4KPj4gSSBkaWQgcnVuIGNoZWNrcGF0Y2gucGwgYXMgcGVyIGJl c3Qgb2YgbXkga25vd2xlZGdlIGFuZCBmaXhlZCBsb3Qgb2YKPj4gc3R5bGUgcmVsYXRlZCB3YXJu aW5ncyByZXBvcnRlZCBieSBpdC4gQWxzbyBJIGVuYWJsZWQgVz0xIG9wdGlvbiBpbiBteQo+PiBj b21waWxhdGlvbiBjb21tYW5kIGFuZCBmaXhlZCBsb3RzIG9mIHdhcm5pbmdzIHJlcG9ydGVkIGJ5 IGNvbXBpbGVyIHRvby4KPj4gQXMgSSBleHBsYWluZWQgZWFybGllciwgSSB3YXNuJ3QgYXdhcmUg b2YgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdzLCBhbmQKPj4gc28gSSBtaXNzZWQgdG8gZml4IHRo ZW0uCj4+Cj4gT2sKPgo+PiBXaXRoIHRoaXMsIEkgcmVxdWVzdCB0byByZXZpZXcgZHJpdmVyIGZy b20gZnVuY3Rpb25hbGl0eSBwb2ludCBvZiB2aWV3Cj4+IGFzIHdlbGwgYWxvbmcgd2l0aCBzdHls ZSBlcnJvcnMuIFNvLCBJIGNhbiBhZGRyZXNzIG1vcmUgbnVtYmVyIG9mCj4+IGNvbW1lbnRzIC8g Y29uY2VybnMgaW4gbGVzcyBudW1iZXIgb2YgcGF0Y2hlcy4gSWYgeW91IHdhbnQgdGhlc2UKPj4g d2FybmluZ3MgdG8gYmUgZml4ZWQsIEkgd2lsbCBzZW5kIHYzIGFuZCB5b3UgY2FuIHB1dCBtb3Jl IGNvbW1lbnRzIG9uCj4+IHYzLiBIb3dldmVyLCBJIGhpZ2hseSBhcHByZWNpYXRlIGlmIHdlIGNh biBjb250aW51ZSByZXZpZXdzIGFuZCBub3QKPj4gcG9zdHBvbmUgdGlsbCBKYW51YXJ5LiBQbGVh c2UgbGV0IG1lIGtub3cgeW91ciB0aG91Z2h0cy4KPj4KPiBJIHdpbGwgZ2l2ZSB0aGlzIHBhdGNo c2V0IGFub3RoZXIgY2hhbmNlIGxhdGVyIHRoaXMgd2Vlay4KCgpUaGFua3MgZm9yIHRoaXMgY29u c2lkZXJhdGlvbi4KCgo+Cj4+IFRoYW5rcywKPj4KPj4gVGFubWF5Cj4+Cj4+Cj4+PiBNYXRoaWV1 Cj4+Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnIGIvZHJpdmVy cy9yZW1vdGVwcm9jL0tjb25maWcKPj4+PiBpbmRleCBmMzBkMDBhM2FhYmUuLjI3ZjY2OTEwZDhk MyAxMDA2NDQKPj4+PiAtLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZwo+Pj4+ICsrKyBi L2RyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnCj4+Pj4gQEAgLTMxNSw2ICszMTUsMTggQEAgY29u ZmlnIFRJX0szX1I1X1JFTU9URVBST0MKPj4+PiAgICAgICAgIEl0J3Mgc2FmZSB0byBzYXkgTiBo ZXJlIGlmIHlvdSdyZSBub3QgaW50ZXJlc3RlZCBpbiB1dGlsaXppbmcKPj4+PiAgICAgICAgIGEg c2xhdmUgcHJvY2Vzc29yLgo+Pj4+Cj4+Pj4gK2NvbmZpZyBYTE5YX1I1X1JFTU9URVBST0MKPj4+ PiArICAgIHRyaXN0YXRlICJYaWxpbnggUjUgcmVtb3RlcHJvYyBzdXBwb3J0Igo+Pj4+ICsgICAg ZGVwZW5kcyBvbiBQTSAmJiBBUkNIX1pZTlFNUAo+Pj4+ICsgICAgZGVwZW5kcyBvbiBaWU5RTVBf RklSTVdBUkUKPj4+PiArICAgIHNlbGVjdCBSUE1TR19WSVJUSU8KPj4+PiArICAgIHNlbGVjdCBa WU5RTVBfSVBJX01CT1gKPj4+PiArICAgIGhlbHAKPj4+PiArICAgICAgU2F5IHkgb3IgbSBoZXJl IHRvIHN1cHBvcnQgWGlsaW54IFI1IHJlbW90ZSBwcm9jZXNzb3JzIHZpYSB0aGUgcmVtb3RlCj4+ Pj4gKyAgICAgIHByb2Nlc3NvciBmcmFtZXdvcmsuCj4+Pj4gKwo+Pj4+ICsgICAgICBJdCdzIHNh ZmUgdG8gc2F5IE4gaWYgbm90IGludGVyZXN0ZWQgaW4gdXNpbmcgUlBVIHI1ZiBjb3Jlcy4KPj4+ PiArCj4+Pj4gICAgZW5kaWYgIyBSRU1PVEVQUk9DCj4+Pj4KPj4+PiAgICBlbmRtZW51Cj4+Pj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZSBiL2RyaXZlcnMvcmVtb3Rl cHJvYy9NYWtlZmlsZQo+Pj4+IGluZGV4IGJiMjZjOWU0ZWY5Yy4uMzM0YThiZWQ0YzE0IDEwMDY0 NAo+Pj4+IC0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy9NYWtlZmlsZQo+Pj4+ICsrKyBiL2RyaXZl cnMvcmVtb3RlcHJvYy9NYWtlZmlsZQo+Pj4+IEBAIC0zNSwzICszNSw0IEBAIG9iai0kKENPTkZJ R19TVF9TTElNX1JFTU9URVBST0MpICAgKz0gc3Rfc2xpbV9ycHJvYy5vCj4+Pj4gICAgb2JqLSQo Q09ORklHX1NUTTMyX1JQUk9DKSAgICAgICAgICArPSBzdG0zMl9ycHJvYy5vCj4+Pj4gICAgb2Jq LSQoQ09ORklHX1RJX0szX0RTUF9SRU1PVEVQUk9DKSArPSB0aV9rM19kc3BfcmVtb3RlcHJvYy5v Cj4+Pj4gICAgb2JqLSQoQ09ORklHX1RJX0szX1I1X1JFTU9URVBST0MpICArPSB0aV9rM19yNV9y ZW1vdGVwcm9jLm8KPj4+PiArb2JqLSQoQ09ORklHX1hMTlhfUjVfUkVNT1RFUFJPQykgICAgKz0g eGxueF9yNV9yZW1vdGVwcm9jLm8KPj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZW1vdGVwcm9j L3hsbnhfcjVfcmVtb3RlcHJvYy5jIGIvZHJpdmVycy9yZW1vdGVwcm9jL3hsbnhfcjVfcmVtb3Rl cHJvYy5jCj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+PiBpbmRleCAwMDAwMDAwMDAwMDAu LmMyMTY3ZmQzODY5ZAo+Pj4+IC0tLSAvZGV2L251bGwKPj4+PiArKysgYi9kcml2ZXJzL3JlbW90 ZXByb2MveGxueF9yNV9yZW1vdGVwcm9jLmMKPj4+PiBAQCAtMCwwICsxLDk1OSBAQAo+Pj4+ICsv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+Pj4+ICsvKgo+Pj4+ICsgKiBaeW5x TVAgUjUgUmVtb3RlIFByb2Nlc3NvciBkcml2ZXIKPj4+PiArICoKPj4+PiArICovCj4+Pj4gKwo+ Pj4+ICsjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcG93ZXIveGxueC16eW5xbXAtcG93ZXIuaD4KPj4+ PiArI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlL3hsbngtenlucW1wLmg+Cj4+Pj4gKyNpbmNsdWRl IDxsaW51eC9pbnRlcnJ1cHQuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+Pj4+ ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvbWFpbGJveF9j bGllbnQuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L21haWxib3gvenlucW1wLWlwaS1tZXNzYWdl Lmg+Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4 L29mX2FkZHJlc3MuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Cj4+Pj4g KyNpbmNsdWRlIDxsaW51eC9vZl9yZXNlcnZlZF9tZW0uaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4 L3BsYXRmb3JtX2RldmljZS5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvcmVtb3RlcHJvYy5oPgo+ Pj4+ICsjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9zeXNm cy5oPgo+Pj4+ICsKPj4+PiArI2luY2x1ZGUgInJlbW90ZXByb2NfaW50ZXJuYWwuaCIKPj4+PiAr Cj4+Pj4gKy8qIHNldHRpbmdzIGZvciBSUFUgY2x1c3RlciBtb2RlICovCj4+Pj4gK2VudW0genlu cW1wX3I1X2NsdXN0ZXJfbW9kZSB7Cj4+Pj4gKyAgICBTUExJVF9NT0RFID0gMCwgLy8gUlBVIGNs dXN0ZXIgbW9kZSB3aGVuIGNvcmVzIHJ1biBhcyBzZXBhcmF0ZSBwcm9jZXNzb3IKPj4+PiArICAg IExPQ0tTVEVQX01PREUgPSAxLCAvLyBjb3JlcyBleGVjdXRlIHNhbWUgY29kZSBpbiBsb2Nrc3Rl cCxjbGstZm9yLWNsawo+Pj4+ICsgICAgU0lOR0xFX0NQVV9NT0RFID0gMiwgLy8gY29yZTAgaXMg aGVsZCBpbiByZXNldCBhbmQgb25seSBjb3JlMSBydW5zCj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICsv KioKPj4+PiArICogc3RydWN0IG1lbV9iYW5rX2RhdGEgLSBNZW1vcnkgQmFuayBkZXNjcmlwdGlv bgo+Pj4+ICsgKgo+Pj4+ICsgKiBAYWRkcjogU3RhcnQgYWRkcmVzcyBvZiBtZW1vcnkgYmFuawo+ Pj4+ICsgKiBAc2l6ZTogU2l6ZSBvZiBNZW1vcnkgYmFuawo+Pj4+ICsgKiBAcG1fZG9tYWluX2lk OiBQb3dlci1kb21haW5zIGlkIG9mIG1lbW9yeSBiYW5rIGZvciBmaXJtd2FyZSB0byB0dXJuIG9u L29mZgo+Pj4+ICsgKiBAYmFua19uYW1lOiBuYW1lIG9mIHRoZSBiYW5rIGZvciByZW1vdGVwcm9j IGZyYW1ld29yawo+Pj4+ICsgKi8KPj4+PiArc3RydWN0IG1lbV9iYW5rX2RhdGEgewo+Pj4+ICsg ICAgcGh5c19hZGRyX3QgYWRkcjsKPj4+PiArICAgIHNpemVfdCBzaXplOwo+Pj4+ICsgICAgZW51 bSBwbV9ub2RlX2lkIHBtX2RvbWFpbl9pZDsKPj4+PiArICAgIGNoYXIgKmJhbmtfbmFtZTsKPj4+ PiArfTsKPj4+PiArCj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtX2JhbmtfZGF0YSB6eW5x bXBfdGNtX2JhbmtzW10gPSB7Cj4+Pj4gKyAgICB7MHhmZmUwMDAwMFVMLCAweDEwMDAwVUwsIFBE X1I1XzBfQVRDTSwgImF0Y20wIn0sIC8qIFRDTSA2NEtCIGVhY2ggKi8KPj4+PiArICAgIHsweGZm ZTIwMDAwVUwsIDB4MTAwMDBVTCwgUERfUjVfMF9CVENNLCAiYnRjbTAifSwKPj4+PiArICAgIHsw eGZmZTkwMDAwVUwsIDB4MTAwMDBVTCwgUERfUjVfMV9BVENNLCAiYXRjbTEifSwKPj4+PiArICAg IHsweGZmZWIwMDAwVUwsIDB4MTAwMDBVTCwgUERfUjVfMV9CVENNLCAiYnRjbTEifSwKPj4+PiAr fTsKPj4+PiArCj4+Pj4gKy8qKgo+Pj4+ICsgKiBzdHJ1Y3QgenlucW1wX3I1X2NvcmUgLSBaeW5x TVAgUjUgY29yZSBzdHJ1Y3R1cmUKPj4+PiArICoKPj4+PiArICogQGRldjogZGV2aWNlIG9mIFJQ VSBpbnN0YW5jZQo+Pj4+ICsgKiBAbnA6IGRldmljZSBub2RlIG9mIFJQVSBpbnN0YW5jZQo+Pj4+ ICsgKiBAdGNtX2JhbmtfY291bnQ6IG51bWJlciBUQ00gYmFua3MgYWNjZXNzaWJsZSB0byB0aGlz IFJQVQo+Pj4+ICsgKiBAdGNtX2JhbmtzOiBhcnJheSBvZiBlYWNoIFRDTSBiYW5rIGRhdGEKPj4+ PiArICogQHJlc19tZW1fY291bnQ6IG51bWJlciBvZiBSZXNlcnZlZCBNZW1vcnkgcmVnaW9ucyBw ZXIgY29yZQo+Pj4+ICsgKiBAcmVzX21lbTogYXJyYXkgb2YgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lv bnMKPj4+PiArICogQHJwcm9jOiBycHJvYyBoYW5kbGUKPj4+PiArICogQHBtX2RvbWFpbl9pZDog UlBVIENQVSBwb3dlciBkb21haW4gaWQKPj4+PiArICovCj4+Pj4gK3N0cnVjdCB6eW5xbXBfcjVf Y29yZSB7Cj4+Pj4gKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+Pj4gKyAgICBzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wOwo+Pj4+ICsgICAgaW50IHRjbV9iYW5rX2NvdW50Owo+Pj4+ICsgICAgc3Ry dWN0IG1lbV9iYW5rX2RhdGEgKnRjbV9iYW5rczsKPj4+PiArICAgIGludCByZXNfbWVtX2NvdW50 Owo+Pj4+ICsgICAgc3RydWN0IHJlc2VydmVkX21lbSAqcmVzX21lbTsKPj4+PiArICAgIHN0cnVj dCBycHJvYyAqcnByb2M7Cj4+Pj4gKyAgICBlbnVtIHBtX25vZGVfaWQgcG1fZG9tYWluX2lkOwo+ Pj4+ICt9Owo+Pj4+ICsKPj4+PiArLyoqCj4+Pj4gKyAqIHN0cnVjdCB6eW5xbXBfcjVfY2x1c3Rl ciAtIFp5bnFNUCBSNSBjbHVzdGVyIHN0cnVjdHVyZQo+Pj4+ICsgKgo+Pj4+ICsgKiBAZGV2OiBy NWYgc3Vic3lzdGVtIGNsdXN0ZXIgZGV2aWNlIG5vZGUKPj4+PiArICogQG1vZGU6IGNsdXN0ZXIg bW9kZSBvZiB0eXBlIHp5bnFtcF9yNV9jbHVzdGVyX21vZGUKPj4+PiArICogQGNvcmVfY291bnQ6 IG51bWJlciBvZiByNSBjb3JlcyB1c2VkIGZvciB0aGlzIGNsdXN0ZXIgbW9kZQo+Pj4+ICsgKiBA cjVfY29yZXM6IEFycmF5IG9mIHI1IGNvcmVzIG9mIHR5cGUgc3RydWN0IHp5bnFtcF9yNV9jb3Jl Cj4+Pj4gKyAqLwo+Pj4+ICtzdHJ1Y3QgenlucW1wX3I1X2NsdXN0ZXIgewo+Pj4+ICsgICAgc3Ry dWN0IGRldmljZSAqZGV2Owo+Pj4+ICsgICAgZW51bSAgenlucW1wX3I1X2NsdXN0ZXJfbW9kZSBt b2RlOwo+Pj4+ICsgICAgaW50IGNvcmVfY291bnQ7Cj4+Pj4gKyAgICBzdHJ1Y3QgenlucW1wX3I1 X2NvcmUgKnI1X2NvcmVzOwo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArLyoKPj4+PiArICogenlucW1w X3I1X3NldF9tb2RlIC0gc2V0IFJQVSBvcGVyYXRpb24gbW9kZQo+Pj4+ICsgKgo+Pj4+ICsgKiBz ZXQgUlBVIG9wZXJhdGlvbiBtb2RlCj4+Pj4gKyAqCj4+Pj4gKyAqIFJldHVybjogMCBmb3Igc3Vj Y2VzcywgbmVnYXRpdmUgdmFsdWUgZm9yIGZhaWx1cmUKPj4+PiArICovCj4+Pj4gK3N0YXRpYyBp bnQgenlucW1wX3I1X3NldF9tb2RlKHN0cnVjdCB6eW5xbXBfcjVfY29yZSAqcjVfY29yZSwKPj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHp5bnFtcF9yNV9jbHVzdGVyX21vZGUg cnB1X21vZGUpCj4+Pj4gK3sKPj4+PiArICAgIGVudW0gcnB1X3RjbV9jb21iIHRjbV9tb2RlOwo+ Pj4+ICsgICAgaW50IHJldCwgcmVnX3ZhbDsKPj4+PiArCj4+Pj4gKyAgICByZWdfdmFsID0gKHJw dV9tb2RlID09IExPQ0tTVEVQX01PREUgPyAwIDogMSk7Cj4+Pj4gKwo+Pj4+ICsgICAgcmV0ID0g enlucW1wX3BtX3NldF9ycHVfbW9kZShyNV9jb3JlLT5wbV9kb21haW5faWQsIHJlZ192YWwpOwo+ Pj4+ICsgICAgaWYgKHJldCA8IDApIHsKPj4+PiArICAgICAgICAgICAgcHJfZXJyKCJmYWlsZWQg dG8gc2V0IFJQVSBtb2RlXG4iKTsKPj4+PiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4+PiAr ICAgIH0KPj4+PiArCj4+Pj4gKyAgICB0Y21fbW9kZSA9IChycHVfbW9kZSA9PSBMT0NLU1RFUF9N T0RFKSA/Cj4+Pj4gKyAgICAgICAgICAgICAgICBQTV9SUFVfVENNX0NPTUIgOiBQTV9SUFVfVENN X1NQTElUOwo+Pj4+ICsgICAgcmV0ID0genlucW1wX3BtX3NldF90Y21fY29uZmlnKHI1X2NvcmUt PnBtX2RvbWFpbl9pZCwgdGNtX21vZGUpOwo+Pj4+ICsgICAgaWYgKHJldCA8IDApCj4+Pj4gKyAg ICAgICAgICAgIHByX2VycigiZmFpbGVkIHRvIGNvbmZpZ3VyZSBUQ01cbiIpOwo+Pj4+ICsKPj4+ PiArICAgIHJldHVybiByZXQ7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gKy8qCj4+Pj4gKyAqIHp5bnFt cF9yNV9ycHJvY19zdGFydAo+Pj4+ICsgKiBAcnByb2M6IHNpbmdsZSBSNSBjb3JlJ3MgY29ycmVz cG9uZGluZyBycHJvYyBpbnN0YW5jZQo+Pj4+ICsgKgo+Pj4+ICsgKiBTdGFydCBSNSBDb3JlIGZy b20gZGVzaWduYXRlZCBib290IGFkZHJlc3MuCj4+Pj4gKyAqCj4+Pj4gKyAqIHJldHVybiAwIG9u IHN1Y2Nlc3MsIG90aGVyd2lzZSBub24temVybyB2YWx1ZSBvbiBmYWlsdXJlCj4+Pj4gKyAqLwo+ Pj4+ICtzdGF0aWMgaW50IHp5bnFtcF9yNV9ycHJvY19zdGFydChzdHJ1Y3QgcnByb2MgKnJwcm9j KQo+Pj4+ICt7Cj4+Pj4gKyAgICBzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1X2NvcmUgPSBycHJv Yy0+cHJpdjsKPj4+PiArICAgIGVudW0gcnB1X2Jvb3RfbWVtIGJvb3RtZW07Cj4+Pj4gKyAgICBp bnQgcmV0Owo+Pj4+ICsKPj4+PiArICAgIGlmICghcjVfY29yZSkgewo+Pj4+ICsgICAgICAgICAg ICBwcl9lcnIoImNhbid0IGdldCByNSBjb3JlXG4iKTsKPj4+PiArICAgICAgICAgICAgcmV0dXJu IC1FSU5WQUw7Cj4+Pj4gKyAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgYm9vdG1lbSA9IChycHJvYy0+ Ym9vdGFkZHIgPj0gMHhGRkZDMDAwMCkgPwo+Pj4+ICsgICAgICAgICAgICAgICBQTV9SUFVfQk9P VE1FTV9ISVZFQyA6IFBNX1JQVV9CT09UTUVNX0xPVkVDOwo+Pj4+ICsKPj4+PiArICAgIGRldl9k YmcocjVfY29yZS0+ZGV2LCAiUlBVIGJvb3QgYWRkciAweCVsbHggZnJvbSAlcy4iLCBycHJvYy0+ Ym9vdGFkZHIsCj4+Pj4gKyAgICAgICAgICAgIGJvb3RtZW0gPT0gUE1fUlBVX0JPT1RNRU1fSElW RUMgPyAiT0NNIiA6ICJUQ00iKTsKPj4+PiArCj4+Pj4gKyAgICByZXQgPSB6eW5xbXBfcG1fcmVx dWVzdF93YWtlKHI1X2NvcmUtPnBtX2RvbWFpbl9pZCwgMSwKPj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYm9vdG1lbSwgWllOUU1QX1BNX1JFUVVFU1RfQUNLX05PKTsKPj4+ PiArICAgIGlmIChyZXQpCj4+Pj4gKyAgICAgICAgICAgIHByX2VycigiZmFpbGVkIHRvIHN0YXJ0 IFJQVSA9ICVkXG4iLCByNV9jb3JlLT5wbV9kb21haW5faWQpOwo+Pj4+ICsgICAgcmV0dXJuIHJl dDsKPj4+PiArfQo+Pj4+ICsKPj4+PiArLyoKPj4+PiArICogenlucW1wX3I1X3Jwcm9jX3N0b3AK Pj4+PiArICogQHJwcm9jOiBzaW5nbGUgUjUgY29yZSdzIGNvcnJlc3BvbmRpbmcgcnByb2MgaW5z dGFuY2UKPj4+PiArICoKPj4+PiArICogUG93ZXIgZG93biAgUjUgQ29yZS4KPj4+PiArICoKPj4+ PiArICogcmV0dXJuIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5vbi16ZXJvIHZhbHVlIG9uIGZh aWx1cmUKPj4+PiArICovCj4+Pj4gK3N0YXRpYyBpbnQgenlucW1wX3I1X3Jwcm9jX3N0b3Aoc3Ry dWN0IHJwcm9jICpycHJvYykKPj4+PiArewo+Pj4+ICsgICAgc3RydWN0IHp5bnFtcF9yNV9jb3Jl ICpyNV9jb3JlID0gcnByb2MtPnByaXY7Cj4+Pj4gKyAgICBpbnQgcmV0Owo+Pj4+ICsKPj4+PiAr ICAgIHJldCA9IHp5bnFtcF9wbV9mb3JjZV9wd3Jkd24ocjVfY29yZS0+cG1fZG9tYWluX2lkLAo+ Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaWU5RTVBfUE1fUkVRVUVTVF9B Q0tfQkxPQ0tJTkcpOwo+Pj4+ICsgICAgaWYgKHJldCkKPj4+PiArICAgICAgICAgICAgcHJfZXJy KCJmYWlsZWQgdG8gc3RvcCByZW1vdGVwcm9jIFJQVSAlZFxuIiwgcmV0KTsKPj4+PiArCj4+Pj4g KyAgICByZXR1cm4gcmV0Owo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICsvKgo+Pj4+ICsgKiB6eW5xbXBf cjVfcnByb2NfbWVtX21hcAo+Pj4+ICsgKiBAcnByb2M6IHNpbmdsZSBSNSBjb3JlJ3MgY29ycmVz cG9uZGluZyBycHJvYyBpbnN0YW5jZQo+Pj4+ICsgKiBAbWVtOiBtZW0gZW50cnkgdG8gbWFwCj4+ Pj4gKyAqCj4+Pj4gKyAqIENhbGxiYWNrIHRvIG1hcCB2YSBmb3IgbWVtb3J5LXJlZ2lvbidzIGNh cnZlb3V0Lgo+Pj4+ICsgKgo+Pj4+ICsgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndpc2Ug bm9uLXplcm8gdmFsdWUgb24gZmFpbHVyZQo+Pj4+ICsgKi8KPj4+PiArc3RhdGljIGludCB6eW5x bXBfcjVfcnByb2NfbWVtX21hcChzdHJ1Y3QgcnByb2MgKnJwcm9jLAo+Pj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJwcm9jX21lbV9lbnRyeSAqbWVtKQo+Pj4+ICt7 Cj4+Pj4gKyAgICB2b2lkIF9faW9tZW0gKnZhOwo+Pj4+ICsKPj4+PiArICAgIHZhID0gaW9yZW1h cF93YyhtZW0tPmRtYSwgbWVtLT5sZW4pOwo+Pj4+ICsgICAgaWYgKElTX0VSUl9PUl9OVUxMKHZh KSkKPj4+PiArICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+Pj4gKwo+Pj4+ICsgICAgbWVt LT52YSA9ICh2b2lkICopdmE7Cj4+Pj4gKwo+Pj4+ICsgICAgcmV0dXJuIDA7Cj4+Pj4gK30KPj4+ PiArCj4+Pj4gKy8qCj4+Pj4gKyAqIHp5bnFtcF9yNV9ycHJvY19tZW1fdW5tYXAKPj4+PiArICog QHJwcm9jOiBzaW5nbGUgUjUgY29yZSdzIGNvcnJlc3BvbmRpbmcgcnByb2MgaW5zdGFuY2UKPj4+ PiArICogQG1lbTogbWVtIGVudHJ5IHRvIHVubWFwCj4+Pj4gKyAqCj4+Pj4gKyAqIFVubWFwIG1l bW9yeS1yZWdpb24gY2FydmVvdXQKPj4+PiArICoKPj4+PiArICogcmV0dXJuIDAgb24gc3VjY2Vz cywgb3RoZXJ3aXNlIG5vbi16ZXJvIHZhbHVlIG9uIGZhaWx1cmUKPj4+PiArICovCj4+Pj4gK3N0 YXRpYyBpbnQgenlucW1wX3I1X3Jwcm9jX21lbV91bm1hcChzdHJ1Y3QgcnByb2MgKnJwcm9jLAo+ Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnByb2NfbWVtX2Vu dHJ5ICptZW0pCj4+Pj4gK3sKPj4+PiArICAgIGlvdW5tYXAoKHZvaWQgX19pb21lbSAqKW1lbS0+ dmEpOwo+Pj4+ICsgICAgcmV0dXJuIDA7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gKy8qCj4+Pj4gKyAq IGFkZF9tZW1fcmVnaW9ucwo+Pj4+ICsgKiBAcnByb2M6IHNpbmdsZSBSNSBjb3JlJ3MgY29ycmVz cG9uZGluZyBycHJvYyBpbnN0YW5jZQo+Pj4+ICsgKgo+Pj4+ICsgKiBDb25zdHJ1Y3QgcnByb2Mg bWVtIGNhcnZlb3V0cyBmcm9tIGNhcnZlb3V0IHByb3ZpZGVkIGluCj4+Pj4gKyAqIG1lbW9yeS1y ZWdpb24gcHJvcGVydHkKPj4+PiArICoKPj4+PiArICogcmV0dXJuIDAgb24gc3VjY2Vzcywgb3Ro ZXJ3aXNlIG5vbi16ZXJvIHZhbHVlIG9uIGZhaWx1cmUKPj4+PiArICovCj4+Pj4gK3N0YXRpYyBp bnQgYWRkX21lbV9yZWdpb25zKHN0cnVjdCBycHJvYyAqcnByb2MpCj4+Pj4gK3sKPj4+PiArICAg IHN0cnVjdCBkZXZpY2UgKmRldjsKPj4+PiArICAgIHN0cnVjdCBycHJvY19tZW1fZW50cnkgKm1l bTsKPj4+PiArICAgIHN0cnVjdCByZXNlcnZlZF9tZW0gKnJtZW07Cj4+Pj4gKyAgICBzdHJ1Y3Qg enlucW1wX3I1X2NvcmUgKnI1X2NvcmU7Cj4+Pj4gKyAgICBpbnQgaTsKPj4+PiArCj4+Pj4gKyAg ICByNV9jb3JlID0gcnByb2MtPnByaXY7Cj4+Pj4gKyAgICBkZXYgPSByNV9jb3JlLT5kZXY7Cj4+ Pj4gKwo+Pj4+ICsgICAgLyogUmVnaXN0ZXIgYXNzb2NpYXRlZCByZXNlcnZlZCBtZW1vcnkgcmVn aW9ucyAqLwo+Pj4+ICsgICAgZm9yIChpID0gMDsgaSA8IHI1X2NvcmUtPnJlc19tZW1fY291bnQ7 IGkrKykgewo+Pj4+ICsgICAgICAgICAgICBybWVtID0gJnI1X2NvcmUtPnJlc19tZW1baV07Cj4+ Pj4gKyAgICAgICAgICAgIG1lbSA9IHJwcm9jX21lbV9lbnRyeV9pbml0KGRldiwgTlVMTCwKPj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRtYV9hZGRyX3Qpcm1l bS0+YmFzZSwKPj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1l bS0+c2l6ZSwgcm1lbS0+YmFzZSwKPj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgenlucW1wX3I1X3Jwcm9jX21lbV9tYXAsCj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHp5bnFtcF9yNV9ycHJvY19tZW1fdW5tYXAsCj4+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtZW0tPm5hbWUpOwo+Pj4+ICsg ICAgICAgICAgICBpZiAoSVNfRVJSX09SX05VTEwobWVtKSkKPj4+PiArICAgICAgICAgICAgICAg ICAgICByZXR1cm4gLUVOT01FTTsKPj4+PiArCj4+Pj4gKyAgICAgICAgICAgIHJwcm9jX2FkZF9j YXJ2ZW91dChycHJvYywgbWVtKTsKPj4+PiArICAgIH0KPj4+PiArCj4+Pj4gKyAgICByZXR1cm4g MDsKPj4+PiArfQo+Pj4+ICsKPj4+PiArLyoKPj4+PiArICogenlucW1wX3I1X3Jwcm9jX21lbV91 bm1hcAo+Pj4+ICsgKiBAcnByb2M6IHNpbmdsZSBSNSBjb3JlJ3MgY29ycmVzcG9uZGluZyBycHJv YyBpbnN0YW5jZQo+Pj4+ICsgKiBAbWVtOiBtZW0gZW50cnkgdG8gdW5tYXAKPj4+PiArICoKPj4+ PiArICogVW5tYXAgVENNIGJhbmtzIHdoZW4gcG93ZXJpbmcgZG93biBSNSBjb3JlLgo+Pj4+ICsg Kgo+Pj4+ICsgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndpc2Ugbm9uLXplcm8gdmFsdWUg b24gZmFpbHVyZQo+Pj4+ICsgKi8KPj4+PiArc3RhdGljIGludCB0Y21fbWVtX3VubWFwKHN0cnVj dCBycHJvYyAqcnByb2MsIHN0cnVjdCBycHJvY19tZW1fZW50cnkgKm1lbSkKPj4+PiArewo+Pj4+ ICsgICAgc3RydWN0IHp5bnFtcF9yNV9jb3JlICpyNV9jb3JlOwo+Pj4+ICsgICAgaW50IGk7Cj4+ Pj4gKyAgICBlbnVtIHBtX25vZGVfaWQgcG1fZG9tYWluX2lkOwo+Pj4+ICsKPj4+PiArICAgIHI1 X2NvcmUgPSBycHJvYy0+cHJpdjsKPj4+PiArICAgIGlmICghcjVfY29yZSkgewo+Pj4+ICsgICAg ICAgICAgICBwcl9lcnIoInI1IGNvcmUgaXMgbm90IGF2YWlsYWJsZVxuIik7Cj4+Pj4gKyAgICAg ICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiArICAgIGlvdW5t YXAoKHZvaWQgX19pb21lbSAqKW1lbS0+dmEpOwo+Pj4+ICsKPj4+PiArICAgIGZvciAoaSA9IDA7 IGkgPCByNV9jb3JlLT50Y21fYmFua19jb3VudDsgaSsrKSB7Cj4+Pj4gKyAgICAgICAgICAgIHBt X2RvbWFpbl9pZCA9IHI1X2NvcmUtPnRjbV9iYW5rc1tpXS5wbV9kb21haW5faWQ7Cj4+Pj4gKyAg ICAgICAgICAgIGlmICh6eW5xbXBfcG1fcmVsZWFzZV9ub2RlKHBtX2RvbWFpbl9pZCkpCj4+Pj4g KyAgICAgICAgICAgICAgICAgICAgcHJfd2FybigiY2FuJ3QgdHVybiBvZmYgVENNIGJhbmsgJWQi LCBwbV9kb21haW5faWQpOwo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiArICAgIHJldHVybiAwOwo+ Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICsvKgo+Pj4+ICsgKiB0Y21fbWVtX21hcAo+Pj4+ICsgKiBAcnBy b2M6IHNpbmdsZSBSNSBjb3JlJ3MgY29ycmVzcG9uZGluZyBycHJvYyBpbnN0YW5jZQo+Pj4+ICsg KiBAbWVtOiBtZW0gZW50cnkgdG8gaW5pdGlhbGl6ZSB0aGUgdmEgYW5kIGRhIGZpZWxkcyBvZgo+ Pj4+ICsgKgo+Pj4+ICsgKiBHaXZlbiBUQ00gYmFuayBlbnRyeSwgdGhpcyBjYWxsYmFjayB3aWxs IHNldCBkZXZpY2UgYWRkcmVzcyBmb3IgUjUKPj4+PiArICogcnVubmluZyBvbiBUQ00gYW5kIGFs c28gc2V0dXAgdmlydHVhbCBhZGRyZXNzIGZvciBUQ00gYmFuawo+Pj4+ICsgKiByZW1vdGVwcm9j IGNhcnZlb3V0Lgo+Pj4+ICsgKgo+Pj4+ICsgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndp c2Ugbm9uLXplcm8gdmFsdWUgb24gZmFpbHVyZQo+Pj4+ICsgKi8KPj4+PiArc3RhdGljIGludCB0 Y21fbWVtX21hcChzdHJ1Y3QgcnByb2MgKnJwcm9jLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgcnByb2NfbWVtX2VudHJ5ICptZW0pCj4+Pj4gK3sKPj4+PiArICAgIHZvaWQgX19p b21lbSAqdmE7Cj4+Pj4gKwo+Pj4+ICsgICAgdmEgPSBpb3JlbWFwX3djKG1lbS0+ZG1hLCBtZW0t Pmxlbik7Cj4+Pj4gKyAgICBpZiAoSVNfRVJSX09SX05VTEwodmEpKQo+Pj4+ICsgICAgICAgICAg ICByZXR1cm4gLUVOT01FTTsKPj4+PiArCj4+Pj4gKyAgICAvKiBVcGRhdGUgbWVtb3J5IGVudHJ5 IHZhICovCj4+Pj4gKyAgICBtZW0tPnZhID0gKHZvaWQgKil2YTsKPj4+PiArCj4+Pj4gKyAgICAv KiBjbGVhciBUQ01zICovCj4+Pj4gKyAgICBtZW1zZXRfaW8odmEsIDAsIG1lbS0+bGVuKTsKPj4+ PiArCj4+Pj4gKyAgICAvKgo+Pj4+ICsgICAgICogVGhlIFI1cyBleHBlY3QgdGhlaXIgVENNIGJh bmtzIHRvIGJlIGF0IGFkZHJlc3MgMHgwIGFuZCAweDIwMDAsCj4+Pj4gKyAgICAgKiB3aGlsZSBv biB0aGUgTGludXggc2lkZSB0aGV5IGFyZSBhdCAweGZmZXh4eHh4Lgo+Pj4+ICsgICAgICoKPj4+ PiArICAgICAqIFplcm8gb3V0IHRoZSBoaWdoIDEyIGJpdHMgb2YgdGhlIGFkZHJlc3MuIFRoaXMg d2lsbCBnaXZlCj4+Pj4gKyAgICAgKiBleHBlY3RlZCB2YWx1ZXMgZm9yIFRDTSBCYW5rcyAwQSBh bmQgMEIgKDB4MCBhbmQgMHgyMDAwMCkuCj4+Pj4gKyAgICAgKi8KPj4+PiArICAgIG1lbS0+ZGEg Jj0gMHgwMDBmZmZmZjsKPj4+PiArCj4+Pj4gKyAgICAvKgo+Pj4+ICsgICAgICogVENNIEJhbmtz IDFBIGFuZCAxQiBzdGlsbCBoYXZlIHRvIGJlIHRyYW5zbGF0ZWQuCj4+Pj4gKyAgICAgKgo+Pj4+ ICsgICAgICogQmVsb3cgaGFuZGxlIHRoZXNlIHR3byBiYW5rcycgYWJzb2x1dGUgYWRkcmVzc2Vz ICgweGZmZTkwMDAwIGFuZAo+Pj4+ICsgICAgICogMHhmZmViMDAwMCkgYW5kIGNvbnZlcnQgdG8g dGhlIGV4cGVjdGVkIHJlbGF0aXZlIGFkZHJlc3Nlcwo+Pj4+ICsgICAgICogKDB4MCBhbmQgMHgy MDAwMCkuCj4+Pj4gKyAgICAgKi8KPj4+PiArICAgIGlmIChtZW0tPmRhID09IDB4OTAwMDAgfHwg bWVtLT5kYSA9PSAweEIwMDAwKQo+Pj4+ICsgICAgICAgICAgICBtZW0tPmRhIC09IDB4OTAwMDA7 Cj4+Pj4gKwo+Pj4+ICsgICAgLyogaWYgdHJhbnNsYXRlZCBUQ00gYmFuayBhZGRyZXNzIGlzIG5v dCB2YWxpZCByZXBvcnQgZXJyb3IgKi8KPj4+PiArICAgIGlmIChtZW0tPmRhICE9IDB4MCAmJiBt ZW0tPmRhICE9IDB4MjAwMDApIHsKPj4+PiArICAgICAgICAgICAgZGV2X2VycigmcnByb2MtPmRl diwgImludmFsaWQgVENNIGFkZHJlc3M6ICV4XG4iLCBtZW0tPmRhKTsKPj4+PiArICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4gKyAgICB9Cj4+Pj4gKyAgICByZXR1cm4gMDsKPj4+PiAr fQo+Pj4+ICsKPj4+PiArc3RhdGljIGludCBhZGRfdGNtX2NhcnZlb3V0X3NwbGl0X21vZGUoc3Ry dWN0IHJwcm9jICpycHJvYykKPj4+PiArewo+Pj4+ICsgICAgaW50IGksIG51bV9iYW5rcywgcmV0 Owo+Pj4+ICsgICAgc3RydWN0IHJwcm9jX21lbV9lbnRyeSAqbWVtOwo+Pj4+ICsgICAgZW51bSBw bV9ub2RlX2lkIHBtX2RvbWFpbl9pZDsKPj4+PiArICAgIHUzMiBiYW5rX2FkZHI7Cj4+Pj4gKyAg ICBzaXplX3QgYmFua19zaXplID0gMDsKPj4+PiArICAgIGNoYXIgKmJhbmtfbmFtZTsKPj4+PiAr ICAgIHN0cnVjdCBkZXZpY2UgKmRldjsKPj4+PiArICAgIHN0cnVjdCB6eW5xbXBfcjVfY29yZSAq cjVfY29yZTsKPj4+PiArCj4+Pj4gKyAgICByNV9jb3JlID0gKHN0cnVjdCB6eW5xbXBfcjVfY29y ZSAqKXJwcm9jLT5wcml2Owo+Pj4+ICsgICAgaWYgKCFyNV9jb3JlKQo+Pj4+ICsgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsKPj4+PiArCj4+Pj4gKyAgICBkZXYgPSByNV9jb3JlLT5kZXY7Cj4+ Pj4gKwo+Pj4+ICsgICAgLyogZ28gdGhyb3VnaCB6eW5xbXAgYmFua3MgZm9yIHI1IG5vZGUgKi8K Pj4+PiArICAgIG51bV9iYW5rcyA9IHI1X2NvcmUtPnRjbV9iYW5rX2NvdW50Owo+Pj4+ICsgICAg aWYgKG51bV9iYW5rcyA8PSAwKSB7Cj4+Pj4gKyAgICAgICAgICAgIGRldl9lcnIoZGV2LCAibmVl ZCB0byBzcGVjaWZ5IFRDTSBiYW5rc1xuIik7Cj4+Pj4gKyAgICAgICAgICAgIHJldHVybiAtRUlO VkFMOwo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiArICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYmFu a3M7IGkrKykgewo+Pj4+ICsgICAgICAgICAgICBiYW5rX2FkZHIgPSAodTMyKXI1X2NvcmUtPnRj bV9iYW5rc1tpXS5hZGRyOwo+Pj4+ICsgICAgICAgICAgICBiYW5rX25hbWUgPSByNV9jb3JlLT50 Y21fYmFua3NbaV0uYmFua19uYW1lOwo+Pj4+ICsgICAgICAgICAgICBiYW5rX3NpemUgPSByNV9j b3JlLT50Y21fYmFua3NbaV0uc2l6ZTsKPj4+PiArICAgICAgICAgICAgcG1fZG9tYWluX2lkID0g cjVfY29yZS0+dGNtX2JhbmtzW2ldLnBtX2RvbWFpbl9pZDsKPj4+PiArCj4+Pj4gKyAgICAgICAg ICAgIHJldCA9IHp5bnFtcF9wbV9yZXF1ZXN0X25vZGUocG1fZG9tYWluX2lkLAo+Pj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpZTlFNUF9QTV9DQVBBQklMSVRZ X0FDQ0VTUywgMCwKPj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBaWU5RTVBfUE1fUkVRVUVTVF9BQ0tfQkxPQ0tJTkcpOwo+Pj4+ICsgICAgICAgICAgICBpZiAo cmV0IDwgMCkgewo+Pj4+ICsgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIHR1cm4gb24gVENNICVkIiwgcG1fZG9tYWluX2lkKTsKPj4+PiArICAgICAgICAgICAgICAg ICAgICByZXR1cm4gcmV0Owo+Pj4+ICsgICAgICAgICAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgICAg ICAgICBkZXZfZGJnKGRldiwgIlRDTSBjYXJ2ZW91dCBzcGxpdCBtb2RlICVzIGFkZHI9JXgsIHNp emU9MHglbHgiLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgIGJhbmtfbmFtZSwgYmFua19hZGRy LCBiYW5rX3NpemUpOwo+Pj4+ICsKPj4+PiArICAgICAgICAgICAgLyogYWRkIGNhcnZlb3V0ICov Cj4+Pj4gKyAgICAgICAgICAgIG1lbSA9IHJwcm9jX21lbV9lbnRyeV9pbml0KGRldiwgTlVMTCwg YmFua19hZGRyLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi YW5rX3NpemUsIGJhbmtfYWRkciwKPj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGNtX21lbV9tYXAsIHRjbV9tZW1fdW5tYXAsCj4+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJhbmtfbmFtZSk7Cj4+Pj4gKyAgICAgICAgICAgIGlm IChJU19FUlJfT1JfTlVMTChtZW0pKSB7Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgLyogVHVy biBvZmYgYWxsIFRDTSBiYW5rcyB0dXJuZWQgb24gYmVmb3JlICovCj4+Pj4gKyAgICAgICAgICAg ICAgICAgICAgZG8gewo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG1fZG9tYWlu X2lkID0gcjVfY29yZS0+dGNtX2JhbmtzW2ldLnBtX2RvbWFpbl9pZDsKPj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldCA9IHp5bnFtcF9wbV9yZWxlYXNlX25vZGUoKHUzMilwbV9k b21haW5faWQpOwo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkKPj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X3dhcm4oZGV2LAo+Pj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbCB0byBy ZWxlYXNlIG5vZGU6ICV4LCAleFxuIiwKPj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHUzMilwbV9kb21haW5faWQsIHJldCk7Cj4+Pj4gKyAgICAgICAg ICAgICAgICAgICAgfSB3aGlsZSAoaS0tKTsKPj4+PiArICAgICAgICAgICAgICAgICAgICByZXR1 cm4gLUVOT01FTTsKPj4+PiArICAgICAgICAgICAgfQo+Pj4+ICsKPj4+PiArICAgICAgICAgICAg cnByb2NfYWRkX2NhcnZlb3V0KHJwcm9jLCBtZW0pOwo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiAr ICAgIHJldHVybiAwOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGFkZF90Y21fY2Fy dmVvdXRfbG9ja3N0ZXBfbW9kZShzdHJ1Y3QgcnByb2MgKnJwcm9jKQo+Pj4+ICt7Cj4+Pj4gKyAg ICBpbnQgaSwgbnVtX2JhbmtzLCByZXQ7Cj4+Pj4gKyAgICBzdHJ1Y3QgcnByb2NfbWVtX2VudHJ5 ICptZW07Cj4+Pj4gKyAgICBlbnVtIHBtX25vZGVfaWQgcG1fZG9tYWluX2lkOwo+Pj4+ICsgICAg dTMyIGJhbmtfYWRkcjsKPj4+PiArICAgIHNpemVfdCBiYW5rX3NpemUgPSAwOwo+Pj4+ICsgICAg Y2hhciAqYmFua19uYW1lOwo+Pj4+ICsgICAgc3RydWN0IGRldmljZSAqZGV2Owo+Pj4+ICsgICAg c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGFyZW50X3BkZXY7Cj4+Pj4gKyAgICBzdHJ1Y3Qgenlu cW1wX3I1X2NsdXN0ZXIgKmNsdXN0ZXI7Cj4+Pj4gKyAgICBzdHJ1Y3QgenlucW1wX3I1X2NvcmUg KnI1X2NvcmU7Cj4+Pj4gKwo+Pj4+ICsgICAgcjVfY29yZSA9IChzdHJ1Y3QgenlucW1wX3I1X2Nv cmUgKilycHJvYy0+cHJpdjsKPj4+PiArICAgIGlmICghcjVfY29yZSkKPj4+PiArICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4gKwo+Pj4+ICsgICAgZGV2ID0gcjVfY29yZS0+ZGV2Owo+ Pj4+ICsgICAgaWYgKCFkZXYpIHsKPj4+PiArICAgICAgICAgICAgcHJfZXJyKCJyNSBjb3JlIGRl dmljZSB1bmF2YWlsYWJsZVxuIik7Cj4+Pj4gKyAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwo+ Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiArICAgIC8qIGdvIHRocm91Z2ggenlucW1wIGJhbmtzIGZv ciByNSBub2RlICovCj4+Pj4gKyAgICBudW1fYmFua3MgPSByNV9jb3JlLT50Y21fYmFua19jb3Vu dDsKPj4+PiArICAgIGlmIChudW1fYmFua3MgPD0gMCkgewo+Pj4+ICsgICAgICAgICAgICBkZXZf ZXJyKGRldiwgIm5lZWQgdG8gc3BlY2lmeSBUQ00gYmFua3NcbiIpOwo+Pj4+ICsgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsKPj4+PiArICAgIH0KPj4+PiArCj4+Pj4gKyAgICBiYW5rX2FkZHIg PSAodTMyKXI1X2NvcmUtPnRjbV9iYW5rc1swXS5hZGRyOwo+Pj4+ICsgICAgYmFua19uYW1lID0g cjVfY29yZS0+dGNtX2JhbmtzWzBdLmJhbmtfbmFtZTsKPj4+PiArICAgIGZvciAoaSA9IDA7IGkg PCBudW1fYmFua3M7IGkrKykgewo+Pj4+ICsgICAgICAgICAgICBiYW5rX3NpemUgKz0gcjVfY29y ZS0+dGNtX2JhbmtzW2ldLnNpemU7Cj4+Pj4gKyAgICAgICAgICAgIHBtX2RvbWFpbl9pZCA9IHI1 X2NvcmUtPnRjbV9iYW5rc1tpXS5wbV9kb21haW5faWQ7Cj4+Pj4gKwo+Pj4+ICsgICAgICAgICAg ICByZXQgPSB6eW5xbXBfcG1fcmVxdWVzdF9ub2RlKHBtX2RvbWFpbl9pZCwKPj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaWU5RTVBfUE1fQ0FQQUJJTElUWV9B Q0NFU1MsIDAsCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg WllOUU1QX1BNX1JFUVVFU1RfQUNLX0JMT0NLSU5HKTsKPj4+PiArICAgICAgICAgICAgaWYgKHJl dCA8IDApIHsKPj4+PiArICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGRldiwgImZhaWxlZCB0 byB0dXJuIG9uIFRDTSAlZCIsIHBtX2RvbWFpbl9pZCk7Cj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsKPj4+PiArICAgICAgICAgICAgfQo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+ PiArICAgIGRldl9kYmcoZGV2LCAiVENNIGFkZCBjYXJ2ZW91dCBsb2Nrc3RlcCBtb2RlICVzIGFk ZHI9MHgleCwgc2l6ZT0weCVseCIsCj4+Pj4gKyAgICAgICAgICAgIGJhbmtfbmFtZSwgYmFua19h ZGRyLCBiYW5rX3NpemUpOwo+Pj4+ICsKPj4+PiArICAgIC8qIGFkZCBjYXJ2ZW91dCAqLwo+Pj4+ ICsgICAgbWVtID0gcnByb2NfbWVtX2VudHJ5X2luaXQoZGV2LCBOVUxMLCBiYW5rX2FkZHIsCj4+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYW5rX3NpemUsIGJhbmtfYWRkciwK Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbV9tZW1fbWFwLCB0Y21fbWVt X3VubWFwLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFua19uYW1lKTsK Pj4+PiArICAgIGlmIChJU19FUlJfT1JfTlVMTChtZW0pKSB7Cj4+Pj4gKyAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBudW1fYmFua3M7IGkrKykgewo+Pj4+ICsgICAgICAgICAgICAgICAgICAg IHBtX2RvbWFpbl9pZCA9IHI1X2NvcmUtPnRjbV9iYW5rc1tpXS5wbV9kb21haW5faWQ7Cj4+Pj4g KyAgICAgICAgICAgICAgICAgICAgcmV0ID0genlucW1wX3BtX3JlbGVhc2Vfbm9kZSgodTMyKXBt X2RvbWFpbl9pZCk7Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkKPj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRldl93YXJuKGRldiwKPj4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsIHRvIHJlbGVhc2Ugbm9kZTogJXggcmV0OiAl eFxuIiwKPj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzIpcG1f ZG9tYWluX2lkLCByZXQpOwo+Pj4+ICsgICAgICAgICAgICB9Cj4+Pj4gKyAgICAgICAgICAgIHJl dHVybiAtRU5PTUVNOwo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiArICAgIHJwcm9jX2FkZF9jYXJ2 ZW91dChycHJvYywgbWVtKTsKPj4+PiArCj4+Pj4gKyAgICByZXR1cm4gMDsKPj4+PiArfQo+Pj4+ ICsKPj4+PiArLyoKPj4+PiArICogYWRkX3RjbV9iYW5rcygpCj4+Pj4gKyAqIEBycHJvYzogc2lu Z2xlIFI1IGNvcmUncyBjb3JyZXNwb25kaW5nIHJwcm9jIGluc3RhbmNlCj4+Pj4gKyAqCj4+Pj4g KyAqIEdpdmVuIFI1IG5vZGUgaW4gcmVtb3RlcHJvYyBpbnN0YW5jZQo+Pj4+ICsgKiBhbGxvY2F0 ZSByZW1vdGVwcm9jIGNhcnZlb3V0IGZvciBUQ00gbWVtb3J5Cj4+Pj4gKyAqIG5lZWRlZCBmb3Ig ZmlybXdhcmUgdG8gYmUgbG9hZGVkCj4+Pj4gKyAqCj4+Pj4gKyAqIHJldHVybiAwIG9uIHN1Y2Nl c3MsIG90aGVyd2lzZSBub24temVybyB2YWx1ZSBvbiBmYWlsdXJlCj4+Pj4gKyAqLwo+Pj4+ICtz dGF0aWMgaW50IGFkZF90Y21fYmFua3Moc3RydWN0IHJwcm9jICpycHJvYykKPj4+PiArewo+Pj4+ ICsgICAgc3RydWN0IGRldmljZSAqZGV2Owo+Pj4+ICsgICAgc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGFyZW50X3BkZXY7Cj4+Pj4gKyAgICBzdHJ1Y3QgenlucW1wX3I1X2NsdXN0ZXIgKmNsdXN0 ZXI7Cj4+Pj4gKyAgICBzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1X2NvcmU7Cj4+Pj4gKwo+Pj4+ ICsgICAgcjVfY29yZSA9IChzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKilycHJvYy0+cHJpdjsKPj4+ PiArICAgIGlmICghcjVfY29yZSkKPj4+PiArICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ Pj4gKwo+Pj4+ICsgICAgZGV2ID0gcjVfY29yZS0+ZGV2Owo+Pj4+ICsgICAgaWYgKCFkZXYpIHsK Pj4+PiArICAgICAgICAgICAgcHJfZXJyKCJyNSBjb3JlIGRldmljZSB1bmF2YWlsYWJsZVxuIik7 Cj4+Pj4gKyAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+ PiArICAgIHBhcmVudF9wZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldi0+cGFyZW50KTsKPj4+ PiArICAgIGlmICghcGFyZW50X3BkZXYpIHsKPj4+PiArICAgICAgICAgICAgZGV2X2VycihkZXYs ICJwYXJlbnQgcGxhdGZvcm0gZGV2IHVuYXZhaWxhYmxlXG4iKTsKPj4+PiArICAgICAgICAgICAg cmV0dXJuIC1FTk9ERVY7Cj4+Pj4gKyAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgY2x1c3RlciA9IHBs YXRmb3JtX2dldF9kcnZkYXRhKHBhcmVudF9wZGV2KTsKPj4+PiArICAgIGlmICghY2x1c3Rlcikg ewo+Pj4+ICsgICAgICAgICAgICBkZXZfZXJyKCZwYXJlbnRfcGRldi0+ZGV2LCAiSW52YWxpZCBk cml2ZXIgZGF0YVxuIik7Cj4+Pj4gKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4+ICsg ICAgfQo+Pj4+ICsKPj4+PiArICAgIGlmIChjbHVzdGVyLT5tb2RlID09IFNQTElUX01PREUpCj4+ Pj4gKyAgICAgICAgICAgIHJldHVybiBhZGRfdGNtX2NhcnZlb3V0X3NwbGl0X21vZGUocnByb2Mp Owo+Pj4+ICsgICAgZWxzZSBpZiAoY2x1c3Rlci0+bW9kZSA9PSBMT0NLU1RFUF9NT0RFKQo+Pj4+ ICsgICAgICAgICAgICByZXR1cm4gYWRkX3RjbV9jYXJ2ZW91dF9sb2Nrc3RlcF9tb2RlKHJwcm9j KTsKPj4+PiArCj4+Pj4gKyAgICBkZXZfZXJyKGNsdXN0ZXItPmRldiwgImludmFsaWQgY2x1c3Rl ciBtb2RlXG4iKTsKPj4+PiArICAgIHJldHVybiAtRUlOVkFMOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ ICsvKgo+Pj4+ICsgKiB6eW5xbXBfcjVfcGFyc2VfZncoKQo+Pj4+ICsgKiBAcnByb2M6IHNpbmds ZSBSNSBjb3JlJ3MgY29ycmVzcG9uZGluZyBycHJvYyBpbnN0YW5jZQo+Pj4+ICsgKiBAZnc6IHB0 ciB0byBmaXJtd2FyZSB0byBiZSBsb2FkZWQgb250byByNSBjb3JlCj4+Pj4gKyAqCj4+Pj4gKyAq IFdoZW4gbG9hZGluZyBmaXJtd2FyZSwgZW5zdXJlIHRoZSBuZWNlc3NhcnkgY2FydmVvdXRzIGFy ZSBpbiByZW1vdGVwcm9jCj4+Pj4gKyAqCj4+Pj4gKyAqIHJldHVybiAwIG9uIHN1Y2Nlc3MsIG90 aGVyd2lzZSBub24temVybyB2YWx1ZSBvbiBmYWlsdXJlCj4+Pj4gKyAqLwo+Pj4+ICtzdGF0aWMg aW50IHp5bnFtcF9yNV9wYXJzZV9mdyhzdHJ1Y3QgcnByb2MgKnJwcm9jLCBjb25zdCBzdHJ1Y3Qg ZmlybXdhcmUgKmZ3KQo+Pj4+ICt7Cj4+Pj4gKyAgICBpbnQgcmV0Owo+Pj4+ICsgICAgc3RydWN0 IHp5bnFtcF9yNV9jb3JlICpyNV9jb3JlOwo+Pj4+ICsgICAgc3RydWN0IGRldmljZSAqZGV2Owo+ Pj4+ICsKPj4+PiArICAgIHI1X2NvcmUgPSBycHJvYy0+cHJpdjsKPj4+PiArICAgIGlmICghcjVf Y29yZSkgewo+Pj4+ICsgICAgICAgICAgICBkZXZfZXJyKCZycHJvYy0+ZGV2LCAicjUgY29yZSBu b3QgYXZhaWxhYmxlXG4iKTsKPj4+PiArICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4g KyAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgZGV2ID0gcjVfY29yZS0+ZGV2Owo+Pj4+ICsKPj4+PiAr ICAgIHJldCA9IGFkZF90Y21fYmFua3MocnByb2MpOwo+Pj4+ICsgICAgaWYgKHJldCkgewo+Pj4+ ICsgICAgICAgICAgICBkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgVENNIGJhbmtzLCBlcnIg JWRcbiIsIHJldCk7Cj4+Pj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+Pj4gKyAgICB9Cj4+ Pj4gKwo+Pj4+ICsgICAgcmV0ID0gYWRkX21lbV9yZWdpb25zKHJwcm9jKTsKPj4+PiArICAgIGlm IChyZXQpCj4+Pj4gKyAgICAgICAgICAgIGRldl93YXJuKGRldiwgImZhaWxlZCB0byBnZXQgcmVz ZXJ2ZSBtZW0gcmVnaW9ucyAlZFxuIiwgcmV0KTsKPj4+PiArCj4+Pj4gKyAgICByZXQgPSBycHJv Y19lbGZfbG9hZF9yc2NfdGFibGUocnByb2MsIGZ3KTsKPj4+PiArICAgIGlmIChyZXQgPT0gLUVJ TlZBTCkgewo+Pj4+ICsgICAgICAgICAgICAvKgo+Pj4+ICsgICAgICAgICAgICAgKiByZXNvdXJj ZSB0YWJsZSBvbmx5IHJlcXVpcmVkIGZvciBJUEMuCj4+Pj4gKyAgICAgICAgICAgICAqIGlmIG5v dCBwcmVzZW50LCB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBlcnJvcjsKPj4+PiArICAgICAg ICAgICAgICogZm9yIGV4YW1wbGUsIGxvYWRpbmcgcjUgaGVsbG8gd29ybGQgYXBwbGljYXRpb24K Pj4+PiArICAgICAgICAgICAgICogc28gc2ltcGx5IGluZm9ybSB1c2VyIGFuZCBrZWVwIGdvaW5n Lgo+Pj4+ICsgICAgICAgICAgICAgKi8KPj4+PiArICAgICAgICAgICAgZGV2X2luZm8oJnJwcm9j LT5kZXYsICJubyByZXNvdXJjZSB0YWJsZSBmb3VuZC5cbiIpOwo+Pj4+ICsgICAgICAgICAgICBy ZXQgPSAwOwo+Pj4+ICsgICAgfQo+Pj4+ICsgICAgcmV0dXJuIHJldDsKPj4+PiArfQo+Pj4+ICsK Pj4+PiArc3RhdGljIHN0cnVjdCBycHJvY19vcHMgenlucW1wX3I1X3Jwcm9jX29wcyA9IHsKPj4+ PiArICAgIC5zdGFydCAgICAgICAgICA9IHp5bnFtcF9yNV9ycHJvY19zdGFydCwKPj4+PiArICAg IC5zdG9wICAgICAgICAgICA9IHp5bnFtcF9yNV9ycHJvY19zdG9wLAo+Pj4+ICsgICAgLmxvYWQg ICAgICAgICAgID0gcnByb2NfZWxmX2xvYWRfc2VnbWVudHMsCj4+Pj4gKyAgICAucGFyc2VfZncg ICAgICAgPSB6eW5xbXBfcjVfcGFyc2VfZncsCj4+Pj4gKyAgICAuZmluZF9sb2FkZWRfcnNjX3Rh YmxlID0gcnByb2NfZWxmX2ZpbmRfbG9hZGVkX3JzY190YWJsZSwKPj4+PiArICAgIC5zYW5pdHlf Y2hlY2sgICA9IHJwcm9jX2VsZl9zYW5pdHlfY2hlY2ssCj4+Pj4gKyAgICAuZ2V0X2Jvb3RfYWRk ciAgPSBycHJvY19lbGZfZ2V0X2Jvb3RfYWRkciwKPj4+PiArfTsKPj4+PiArCj4+Pj4gK3N0YXRp YyB2b2lkIHp5bnFtcF9yNV9wcmludF9kdF9ub2RlX2luZm8oc3RydWN0IHp5bnFtcF9yNV9jbHVz dGVyICpjbHVzdGVyKQo+Pj4+ICt7Cj4+Pj4gKyAgICBpbnQgaSwgaiwgazsKPj4+PiArICAgIHN0 cnVjdCB6eW5xbXBfcjVfY29yZSAqcjVfY29yZTsKPj4+PiArCj4+Pj4gKyAgICBkZXZfZGJnKGNs dXN0ZXItPmRldiwgIlByaW50aW5nIGR0IG5vZGUgaW5mb1xuIik7Cj4+Pj4gKwo+Pj4+ICsgICAg cHJfZGVidWcoImNsdXN0ZXIgbW9kZSA9ICVkXG4iLCBjbHVzdGVyLT5tb2RlKTsKPj4+PiArICAg IHByX2RlYnVnKCJyNWYgY2x1c3RlciBpbiAlcyBtb2RlXG4iLCAoY2x1c3Rlci0+bW9kZSA9PSAw KSA/ICJTUExJVCIgOgo+Pj4+ICsgICAgICAgICAgICAgY2x1c3Rlci0+bW9kZSA9PSAxID8gIkxP Q0tTVEVQIiA6ICJTSU5HTEVfQ1BVIik7Cj4+Pj4gKyAgICBwcl9kZWJ1ZygicjVmIG51bSBjb3Jl cyA9ICVkXG4iLCBjbHVzdGVyLT5jb3JlX2NvdW50KTsKPj4+PiArCj4+Pj4gKyAgICBmb3IgKGkg PSAwOyBpIDwgY2x1c3Rlci0+Y29yZV9jb3VudDsgaSsrKSB7Cj4+Pj4gKyAgICAgICAgICAgIHI1 X2NvcmUgPSAmY2x1c3Rlci0+cjVfY29yZXNbaV07Cj4+Pj4gKyAgICAgICAgICAgIGlmICghcjVf Y29yZSkgewo+Pj4+ICsgICAgICAgICAgICAgICAgICAgIHByX2VycigiY2FuJ3QgZ2V0IHI1X2Nv cmVcbiIpOwo+Pj4+ICsgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+Pj4+ICsgICAgICAg ICAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgICAgICAgICBwcl9kZWJ1ZygicjUgY29yZSAlZCBub2Rl c1xuIiwgaSk7Cj4+Pj4gKyAgICAgICAgICAgIHByX2RlYnVnKCJUQ00gYmFua3MgPSAlZFxuIiwg cjVfY29yZS0+dGNtX2JhbmtfY291bnQpOwo+Pj4+ICsgICAgICAgICAgICBmb3IgKGsgPSAwOyBr IDwgcjVfY29yZS0+dGNtX2JhbmtfY291bnQ7IGsrKykgewo+Pj4+ICsgICAgICAgICAgICAgICAg ICAgIHByX2RlYnVnKCJ0Y20gJWQgYWRkcj0weCVsbHggc2l6ZT0weCVseCwgcG1faWQ9JWQsICVz XG4iLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGssIHI1X2NvcmUtPnRjbV9i YW5rc1trXS5hZGRyLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHI1X2NvcmUt PnRjbV9iYW5rc1trXS5zaXplLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHI1 X2NvcmUtPnRjbV9iYW5rc1trXS5wbV9kb21haW5faWQsCj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcjVfY29yZS0+dGNtX2JhbmtzW2tdLmJhbmtfbmFtZSk7Cj4+Pj4gKyAgICAg ICAgICAgIH0KPj4+PiArCj4+Pj4gKyAgICAgICAgICAgIHByX2RlYnVnKCJyZXNlcnZlIG1lbSBy ZWdpb25zID0gJWRcbiIsIHI1X2NvcmUtPnJlc19tZW1fY291bnQpOwo+Pj4+ICsKPj4+PiArICAg ICAgICAgICAgZm9yIChqID0gMDsgaiA8IHI1X2NvcmUtPnJlc19tZW1fY291bnQ7IGorKykgewo+ Pj4+ICsgICAgICAgICAgICAgICAgICAgIHByX2RlYnVnKCJtZW0gJWQgYWRkcj0weCVsbHgsIHNp emU9MHglbGx4LCBuYW1lPSVzXG4iLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGosIHI1X2NvcmUtPnJlc19tZW1bal0uYmFzZSwKPj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByNV9jb3JlLT5yZXNfbWVtW2pdLnNpemUsCj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcjVfY29yZS0+cmVzX21lbVtqXS5uYW1lKTsKPj4+PiArICAgICAgICAgICAg fQo+Pj4+ICsgICAgfQo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICsvKioKPj4+PiArICogenlucW1wX3I1 X2FkZF9ycHJvY19jb3JlKCkgLSBQcm9iZXMgWnlucU1QIFI1IHByb2Nlc3NvciBkZXZpY2Ugbm9k ZQo+Pj4+ICsgKiAgICAgICAgICAgICAgICAgdGhpcyBpcyBjYWxsZWQgZm9yIGVhY2ggaW5kaXZp ZHVhbCBSNSBjb3JlIHRvCj4+Pj4gKyAqICAgICAgICAgICAgICAgICBzZXQgdXAgbWFpbGJveCwg WGlsaW54IHBsYXRmb3JtIG1hbmFnZXIgdW5pcXVlIElELAo+Pj4+ICsgKiAgICAgICAgICAgICAg ICAgYWRkIHRvIHJwcm9jIGNvcmUKPj4+PiArICoKPj4+PiArICogQHI1X2NvcmU6IHp5bnFtcF9y NV9jb3JlIHI1IGNvcmUgb2JqZWN0IHRvIGluaXRpYWxpemUKPj4+PiArICoKPj4+PiArICogUmV0 dXJuOiAwIGZvciBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZmFpbHVyZS4KPj4+PiArICov Cj4+Pj4gK3N0YXRpYyBpbnQgenlucW1wX3I1X2FkZF9ycHJvY19jb3JlKHN0cnVjdCB6eW5xbXBf cjVfY29yZSAqcjVfY29yZSkKPj4+PiArewo+Pj4+ICsgICAgaW50IHJldDsKPj4+PiArICAgIHN0 cnVjdCBycHJvYyAqcjVfcnByb2M7Cj4+Pj4gKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+Pj4g Kwo+Pj4+ICsgICAgZGV2ID0gcjVfY29yZS0+ZGV2Owo+Pj4+ICsKPj4+PiArICAgIC8qIFNldCB1 cCBETUEgbWFzayAqLwo+Pj4+ICsgICAgcmV0ID0gZG1hX3NldF9jb2hlcmVudF9tYXNrKGRldiwg RE1BX0JJVF9NQVNLKDMyKSk7Cj4+Pj4gKyAgICBpZiAocmV0KQo+Pj4+ICsgICAgICAgICAgICBy ZXR1cm4gcmV0Owo+Pj4+ICsKPj4+PiArICAgIC8qIEFsbG9jYXRlIHJlbW90ZXByb2MgaW5zdGFu Y2UgKi8KPj4+PiArICAgIHI1X3Jwcm9jID0gZGV2bV9ycHJvY19hbGxvYyhkZXYsIGRldl9uYW1l KGRldiksICZ6eW5xbXBfcjVfcnByb2Nfb3BzLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsIHNpemVvZihzdHJ1Y3QgenlucW1wX3I1X2NvcmUpKTsKPj4+PiArICAg IGlmIChJU19FUlJfT1JfTlVMTChyNV9ycHJvYykpCj4+Pj4gKyAgICAgICAgICAgIHJldHVybiAt RU5PTUVNOwo+Pj4+ICsKPj4+PiArICAgIHI1X3Jwcm9jLT5hdXRvX2Jvb3QgPSBmYWxzZTsKPj4+ PiArICAgIHI1X3Jwcm9jLT5wcml2ID0gcjVfY29yZTsKPj4+PiArCj4+Pj4gKyAgICAvKiBBZGQg UjUgcmVtb3RlcHJvYyAqLwo+Pj4+ICsgICAgcmV0ID0gZGV2bV9ycHJvY19hZGQoZGV2LCByNV9y cHJvYyk7Cj4+Pj4gKyAgICBpZiAocmV0KSB7Cj4+Pj4gKyAgICAgICAgICAgIHByX2VycigiZmFp bGVkIHRvIGFkZCByNSByZW1vdGVwcm9jXG4iKTsKPj4+PiArICAgICAgICAgICAgcmV0dXJuIHJl dDsKPj4+PiArICAgIH0KPj4+PiArCj4+Pj4gKyAgICByZXR1cm4gMDsKPj4+PiArfQo+Pj4+ICsK Pj4+PiArc3RhdGljIGludCB6eW5xbXBfcjVfZ2V0X3RjbV9ub2RlKHN0cnVjdCB6eW5xbXBfcjVf Y2x1c3RlciAqY2x1c3RlcikKPj4+PiArewo+Pj4+ICsgICAgaW50IHRjbV9iYW5rX2NvdW50LCB0 Y21fbm9kZTsKPj4+PiArICAgIGludCBpID0gMCwgajsKPj4+PiArICAgIHN0cnVjdCB6eW5xbXBf cjVfY29yZSAqcjVfY29yZTsKPj4+PiArICAgIGNvbnN0IHN0cnVjdCBtZW1fYmFua19kYXRhICp0 Y20gPSB6eW5xbXBfdGNtX2JhbmtzOwo+Pj4+ICsgICAgc3RydWN0IGRldmljZSAqZGV2ID0gY2x1 c3Rlci0+ZGV2Owo+Pj4+ICsKPj4+PiArICAgIC8qIFRvRG86IFVzZSBwcmVkZWZpbmVkIFRDTSBh ZGRyZXNzIHNwYWNlIHZhbHVlcyBmcm9tIGRyaXZlciB1bnRpbAo+Pj4+ICsgICAgICogc3lzdGVt LWR0IHNwZWMgaXMgbm90IGZpbmFsIGZvdCBUQ00KPj4+PiArICAgICAqLwo+Pj4+ICsgICAgdGNt X2JhbmtfY291bnQgPSBBUlJBWV9TSVpFKHp5bnFtcF90Y21fYmFua3MpOwo+Pj4+ICsKPj4+PiAr ICAgIC8qIGNvdW50IHBlciBjb3JlIHRjbSBiYW5rcyAqLwo+Pj4+ICsgICAgdGNtX2JhbmtfY291 bnQgPSB0Y21fYmFua19jb3VudCAvIGNsdXN0ZXItPmNvcmVfY291bnQ7Cj4+Pj4gKwo+Pj4+ICsg ICAgLyogcjUgY29yZSAwIHdpbGwgdXNlIGFsbCBvZiBUQ00gYmFua3MgaW4gbG9ja3N0ZXAgbW9k ZS4KPj4+PiArICAgICAqIEluIHNwbGl0IG1vZGUsIHI1IGNvcmUwIHdpbGwgdXNlIDEyOGsgYW5k IHI1IGNvcmUxIHdpbGwgdXNlIGFub3RoZXIKPj4+PiArICAgICAqIDEyOGsuIEFzc2lnbiBUQ00g YmFua3MgdG8gZWFjaCBjb3JlIGFjY29yZGluZ2x5Cj4+Pj4gKyAgICAgKi8KPj4+PiArICAgIHRj bV9ub2RlID0gMDsKPj4+PiArICAgIGZvciAoaiA9IDA7IGogPCBjbHVzdGVyLT5jb3JlX2NvdW50 OyBqKyspIHsKPj4+PiArICAgICAgICAgICAgcjVfY29yZSA9ICZjbHVzdGVyLT5yNV9jb3Jlc1tq XTsKPj4+PiArICAgICAgICAgICAgcjVfY29yZS0+dGNtX2JhbmtzID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKHN0cnVjdCBtZW1fYmFua19kYXRhKSAqCj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y21fYmFua19jb3VudCwgR0ZQX0tFUk5FTCk7 Cj4+Pj4gKyAgICAgICAgICAgIGlmIChJU19FUlJfT1JfTlVMTChyNV9jb3JlLT50Y21fYmFua3Mp KQo+Pj4+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+Pj4+ICsKPj4+PiAr ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRjbV9iYW5rX2NvdW50OyBpKyspIHsKPj4+PiAr ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgcHJlLWRlZmluZWQgVENNIHJlZyB2YWx1ZXMuCj4+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICogRXZlbnR1YWxseSB0aGlzIHNob3VsZCBiZSByZXBs YWNlZCBieSB2YWx1ZXMKPj4+PiArICAgICAgICAgICAgICAgICAgICAgKiBwYXJzZWQgZnJvbSBk dHMuCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICovCj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgcjVfY29yZS0+dGNtX2JhbmtzW2ldLmFkZHIgPSB0Y21bdGNtX25vZGVdLmFkZHI7Cj4+Pj4g KyAgICAgICAgICAgICAgICAgICAgcjVfY29yZS0+dGNtX2JhbmtzW2ldLnNpemUgPSB0Y21bdGNt X25vZGVdLnNpemU7Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgcjVfY29yZS0+dGNtX2Jhbmtz W2ldLnBtX2RvbWFpbl9pZCA9IHRjbVt0Y21fbm9kZV0ucG1fZG9tYWluX2lkOwo+Pj4+ICsgICAg ICAgICAgICAgICAgICAgIHI1X2NvcmUtPnRjbV9iYW5rc1tpXS5iYW5rX25hbWUgPSB0Y21bdGNt X25vZGVdLmJhbmtfbmFtZTsKPj4+PiArICAgICAgICAgICAgICAgICAgICB0Y21fbm9kZSsrOwo+ Pj4+ICsgICAgICAgICAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgICAgICAgICByNV9jb3JlLT50Y21f YmFua19jb3VudCA9IHRjbV9iYW5rX2NvdW50Owo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiArICAg IHJldHVybiAwOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IHp5bnFtcF9yNV9nZXRf bWVtX3JlZ2lvbl9ub2RlKHN0cnVjdCB6eW5xbXBfcjVfY29yZSAqcjVfY29yZSkKPj4+PiArewo+ Pj4+ICsgICAgaW50IHJlc19tZW1fY291bnQsIGk7Cj4+Pj4gKyAgICBzdHJ1Y3QgZGV2aWNlICpk ZXY7Cj4+Pj4gKyAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCAqcm1lbV9ucDsKPj4+PiArICAg IHN0cnVjdCByZXNlcnZlZF9tZW0gKnJtZW07Cj4+Pj4gKwo+Pj4+ICsgICAgZGV2ID0gcjVfY29y ZS0+ZGV2Owo+Pj4+ICsKPj4+PiArICAgIG5wID0gcjVfY29yZS0+bnA7Cj4+Pj4gKyAgICBpZiAo SVNfRVJSX09SX05VTEwobnApKSB7Cj4+Pj4gKyAgICAgICAgICAgIHByX2VycigiaW52YWxpZCBk ZXZpY2Ugbm9kZSBvZiByNSBjb3JlXG4iKTsKPj4+PiArICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7Cj4+Pj4gKyAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgcmVzX21lbV9jb3VudCA9IG9mX3Byb3Bl cnR5X2NvdW50X2VsZW1zX29mX3NpemUobnAsICJtZW1vcnktcmVnaW9uIiwKPj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwaGFu ZGxlKSk7Cj4+Pj4gKyAgICBpZiAocmVzX21lbV9jb3VudCA8PSAwKSB7Cj4+Pj4gKyAgICAgICAg ICAgIGRldl93YXJuKGRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5LXJlZ2lvbiBwcm9wZXJ0eSAl ZFxuIiwKPj4+PiArICAgICAgICAgICAgICAgICAgICAgcmVzX21lbV9jb3VudCk7Cj4+Pj4gKyAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiArICAgIHI1 X2NvcmUtPnJlc19tZW0gPSBkZXZtX2t6YWxsb2MoZGV2LAo+Pj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXNfbWVtX2NvdW50ICogc2l6ZW9mKHN0cnVjdCByZXNlcnZl ZF9tZW0pLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRlBfS0VS TkVMKTsKPj4+PiArICAgIGlmICghcjVfY29yZS0+cmVzX21lbSkgewo+Pj4+ICsgICAgICAgICAg ICBkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW0gcmVnaW9uIG1lbW9yeVxuIik7 Cj4+Pj4gKyAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+ PiArICAgIGZvciAoaSA9IDA7IGkgPCByZXNfbWVtX2NvdW50OyBpKyspIHsKPj4+PiArICAgICAg ICAgICAgcm1lbV9ucCA9IG9mX3BhcnNlX3BoYW5kbGUobnAsICJtZW1vcnktcmVnaW9uIiwgaSk7 Cj4+Pj4gKyAgICAgICAgICAgIGlmICghcm1lbV9ucCkKPj4+PiArICAgICAgICAgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsKPj4+PiArCj4+Pj4gKyAgICAgICAgICAgIHJtZW0gPSBvZl9yZXNl cnZlZF9tZW1fbG9va3VwKHJtZW1fbnApOwo+Pj4+ICsgICAgICAgICAgICBpZiAoIXJtZW0pIHsK Pj4+PiArICAgICAgICAgICAgICAgICAgICBvZl9ub2RlX3B1dChybWVtX25wKTsKPj4+PiArICAg ICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+PiArICAgICAgICAgICAgfQo+Pj4+ ICsKPj4+PiArICAgICAgICAgICAgbWVtY3B5KCZyNV9jb3JlLT5yZXNfbWVtW2ldLCBybWVtLAo+ Pj4+ICsgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCByZXNlcnZlZF9tZW0pKTsKPj4+ PiArICAgICAgICAgICAgb2Zfbm9kZV9wdXQocm1lbV9ucCk7Cj4+Pj4gKyAgICB9Cj4+Pj4gKwo+ Pj4+ICsgICAgcjVfY29yZS0+cmVzX21lbV9jb3VudCA9IHJlc19tZW1fY291bnQ7Cj4+Pj4gKwo+ Pj4+ICsgICAgcmV0dXJuIDA7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgenlucW1w X3I1X2NvcmVfaW5pdChzdHJ1Y3QgenlucW1wX3I1X2NsdXN0ZXIgKmNsdXN0ZXIpCj4+Pj4gK3sK Pj4+PiArICAgIGludCByZXQsIGk7Cj4+Pj4gKyAgICBzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1 X2NvcmU7Cj4+Pj4gKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjbHVzdGVyLT5kZXY7Cj4+Pj4g Kwo+Pj4+ICsgICAgcmV0ID0genlucW1wX3I1X2dldF90Y21fbm9kZShjbHVzdGVyKTsKPj4+PiAr ICAgIGlmIChyZXQgPCAwKSB7Cj4+Pj4gKyAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiY2FuJ3Qg Z2V0IHRjbSBub2RlLCBlcnIgJWRcbiIsIHJldCk7Cj4+Pj4gKyAgICAgICAgICAgIHJldHVybiBy ZXQ7Cj4+Pj4gKyAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgZm9yIChpID0gMDsgaSA8IGNsdXN0ZXIt PmNvcmVfY291bnQ7IGkrKykgewo+Pj4+ICsgICAgICAgICAgICByNV9jb3JlID0gJmNsdXN0ZXIt PnI1X2NvcmVzW2ldOwo+Pj4+ICsgICAgICAgICAgICBpZiAoIXI1X2NvcmUpIHsKPj4+PiArICAg ICAgICAgICAgICAgICAgICBwcl9lcnIoImludmFsaWQgcjUgY29yZVxuIik7Cj4+Pj4gKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4gKyAgICAgICAgICAgIH0KPj4+PiAr Cj4+Pj4gKyAgICAgICAgICAgIHJldCA9IHp5bnFtcF9yNV9nZXRfbWVtX3JlZ2lvbl9ub2RlKHI1 X2NvcmUpOwo+Pj4+ICsgICAgICAgICAgICBpZiAocmV0KQo+Pj4+ICsgICAgICAgICAgICAgICAg ICAgIGRldl93YXJuKGRldiwgIm1lbW9yeS1yZWdpb24gcHJvcCBmYWlsZWQgJWRcbiIsIHJldCk7 Cj4+Pj4gKwo+Pj4+ICsgICAgICAgICAgICByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRl eChyNV9jb3JlLT5ucCwgInBvd2VyLWRvbWFpbnMiLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAmcjVfY29yZS0+cG1fZG9tYWluX2lkKTsKPj4+ PiArICAgICAgICAgICAgaWYgKHJldCkgewo+Pj4+ICsgICAgICAgICAgICAgICAgICAgIGRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGdldCBwb3dlci1kb21haW5zIHByb3BlcnR5XG4iKTsKPj4+PiAr ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+Pj4+ICsgICAgICAgICAgICB9Cj4+Pj4g Kwo+Pj4+ICsgICAgICAgICAgICByZXQgPSB6eW5xbXBfcjVfc2V0X21vZGUocjVfY29yZSwgY2x1 c3Rlci0+bW9kZSk7Cj4+Pj4gKyAgICAgICAgICAgIGlmIChyZXQpCj4+Pj4gKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHJldDsKPj4+PiArCj4+Pj4gKyAgICAgICAgICAgIHJldCA9IHp5bnFt cF9yNV9hZGRfcnByb2NfY29yZShyNV9jb3JlKTsKPj4+PiArICAgICAgICAgICAgaWYgKHJldCkg ewo+Pj4+ICsgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQg cjUgY29yZSAlZFxuIiwgaSk7Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK Pj4+PiArICAgICAgICAgICAgfQo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiArICAgIHJldHVybiAw Owo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IHp5bnFtcF9yNV9jbHVzdGVyX2luaXQo c3RydWN0IHp5bnFtcF9yNV9jbHVzdGVyICpjbHVzdGVyKQo+Pj4+ICt7Cj4+Pj4gKyAgICBzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBjbHVzdGVyLT5kZXY7Cj4+Pj4gKyAgICBzdHJ1Y3QgZGV2aWNlX25v ZGUgKmRldl9ub2RlID0gZGV2X29mX25vZGUoZGV2KTsKPj4+PiArICAgIHN0cnVjdCBkZXZpY2Vf bm9kZSAqY2hpbGQ7Cj4+Pj4gKyAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjaGlsZF9wZGV2 Owo+Pj4+ICsgICAgaW50IGNvcmVfY291bnQgPSAwLCByZXQsIGk7Cj4+Pj4gKyAgICBlbnVtIHp5 bnFtcF9yNV9jbHVzdGVyX21vZGUgY2x1c3Rlcl9tb2RlID0gTE9DS1NURVBfTU9ERTsKPj4+PiAr ICAgIHN0cnVjdCB6eW5xbXBfcjVfY29yZSAqcjVfY29yZXM7Cj4+Pj4gKwo+Pj4+ICsgICAgcmV0 ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2X25vZGUsICJ4bG54LGNsdXN0ZXItbW9kZSIsICZj bHVzdGVyX21vZGUpOwo+Pj4+ICsKPj4+PiArICAgIC8qIG9uIHN1Y2Nlc3MgcmV0dXJucyAwLCBp ZiBub3QgZGVmaW5lZCB0aGVuIHJldHVybnMgLUVJTlZBTCwKPj4+PiArICAgICAqIEluIHRoYXQg Y2FzZSwgZGVmYXVsdCBpcyBMT0NLU1RFUCBtb2RlCj4+Pj4gKyAgICAgKi8KPj4+PiArICAgIGlm IChyZXQgIT0gLUVJTlZBTCAmJiByZXQgIT0gMCkgewo+Pj4+ICsgICAgICAgICAgICBkZXZfZXJy KGRldiwgIkludmFsaWQgeGxueCxjbHVzdGVyLW1vZGUgcHJvcGVydHlcbiIpOwo+Pj4+ICsgICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+PiArICAgIH0KPj4+PiArCj4+Pj4gKyAgICBpZiAo Y2x1c3Rlcl9tb2RlID09IFNJTkdMRV9DUFVfTU9ERSkgewo+Pj4+ICsgICAgICAgICAgICBkZXZf ZXJyKGRldiwgImRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHNpbmdsZSBjcHUgbW9kZVxuIik7Cj4+ Pj4gKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4+ICsgICAgfSBlbHNlIGlmICgoY2x1 c3Rlcl9tb2RlICE9IFNQTElUX01PREUgJiYKPj4+PiArICAgICAgICAgICAgICAgY2x1c3Rlcl9t b2RlICE9IExPQ0tTVEVQX01PREUpKSB7Cj4+Pj4gKyAgICAgICAgICAgIGRldl9lcnIoZGV2LCAi SW52YWxpZCBjbHVzdGVyIG1vZGVcbiIpOwo+Pj4+ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZB TDsKPj4+PiArICAgIH0KPj4+PiArCj4+Pj4gKyAgICBjb3JlX2NvdW50ID0gb2ZfZ2V0X2F2YWls YWJsZV9jaGlsZF9jb3VudChkZXZfbm9kZSk7Cj4+Pj4gKyAgICBpZiAoY29yZV9jb3VudCA8PSAw KSB7Cj4+Pj4gKyAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiSW52YWxpZCBudW1iZXIgb2YgcjUg Y29yZXMgJWQiLCBjb3JlX2NvdW50KTsKPj4+PiArICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 Cj4+Pj4gKyAgICB9IGVsc2UgaWYgKGNsdXN0ZXJfbW9kZSA9PSBTUExJVF9NT0RFICYmIGNvcmVf Y291bnQgIT0gMikgewo+Pj4+ICsgICAgICAgICAgICBkZXZfZXJyKGRldiwgIkludmFsaWQgbnVt YmVyIG9mIHI1IGNvcmVzIGZvciBzcGxpdCBtb2RlXG4iKTsKPj4+PiArICAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7Cj4+Pj4gKyAgICB9IGVsc2UgaWYgKGNsdXN0ZXJfbW9kZSA9PSBMT0NLU1RF UF9NT0RFICYmIGNvcmVfY291bnQgPT0gMikgewo+Pj4+ICsgICAgICAgICAgICBkZXZfd2Fybihk ZXYsICJPbmx5IHI1IGNvcmUwIHdpbGwgYmUgdXNlZFxuIik7Cj4+Pj4gKyAgICAgICAgICAgIGNv cmVfY291bnQgPSAxOwo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiArICAgIHI1X2NvcmVzID0gZGV2 bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCB6eW5xbXBfcjVfY29yZSkgKgo+Pj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlX2NvdW50LCBHRlBf S0VSTkVMKTsKPj4+PiArICAgIGlmIChJU19FUlJfT1JfTlVMTChyNV9jb3JlcykpIHsKPj4+PiAr ICAgICAgICAgICAgZGV2X2VycihkZXYsICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvcmVz XG4iKTsKPj4+PiArICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+Pj4gKyAgICB9Cj4+Pj4g Kwo+Pj4+ICsgICAgaSA9IDA7Cj4+Pj4gKyAgICBmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zf bm9kZShkZXZfbm9kZSwgY2hpbGQpIHsKPj4+PiArICAgICAgICAgICAgY2hpbGRfcGRldiA9IG9m X2ZpbmRfZGV2aWNlX2J5X25vZGUoY2hpbGQpOwo+Pj4+ICsgICAgICAgICAgICBpZiAoIWNoaWxk X3BkZXYpCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Cj4+Pj4gKwo+ Pj4+ICsgICAgICAgICAgICByNV9jb3Jlc1tpXS5kZXYgPSAmY2hpbGRfcGRldi0+ZGV2Owo+Pj4+ ICsgICAgICAgICAgICBpZiAoIXI1X2NvcmVzW2ldLmRldikgewo+Pj4+ICsgICAgICAgICAgICAg ICAgICAgIHByX2VycigiY2FuJ3QgZ2V0IGRldmljZSBmb3IgcjUgY29yZSAlZFxuIiwgaSk7Cj4+ Pj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Cj4+Pj4gKyAgICAgICAgICAg IH0KPj4+PiArCj4+Pj4gKyAgICAgICAgICAgIHI1X2NvcmVzW2ldLm5wID0gZGV2X29mX25vZGUo cjVfY29yZXNbaV0uZGV2KTsKPj4+PiArICAgICAgICAgICAgaWYgKCFyNV9jb3Jlc1tpXS5ucCkg ewo+Pj4+ICsgICAgICAgICAgICAgICAgICAgIHByX2VycigiY2FuJ3QgZ2V0IGRldmljZSBub2Rl IGZvciByNSBjb3JlICVkXG4iLCBpKTsKPj4+PiArICAgICAgICAgICAgICAgICAgICByZXR1cm4g LUVOT0RFVjsKPj4+PiArICAgICAgICAgICAgfQo+Pj4+ICsKPj4+PiArICAgICAgICAgICAgaSsr Owo+Pj4+ICsgICAgICAgICAgICBpZiAoaSA9PSBjb3JlX2NvdW50KQo+Pj4+ICsgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiArICAgIGNsdXN0ZXItPm1v ZGUgPSBjbHVzdGVyX21vZGU7Cj4+Pj4gKyAgICBjbHVzdGVyLT5jb3JlX2NvdW50ID0gY29yZV9j b3VudDsKPj4+PiArICAgIGNsdXN0ZXItPnI1X2NvcmVzID0gcjVfY29yZXM7Cj4+Pj4gKwo+Pj4+ ICsgICAgcmV0ID0genlucW1wX3I1X2NvcmVfaW5pdChjbHVzdGVyKTsKPj4+PiArICAgIGlmIChy ZXQgPCAwKSB7Cj4+Pj4gKyAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQg cjUgY29yZSBlcnIgJWRcbiIsIHJldCk7Cj4+Pj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+ Pj4gKyAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgenlucW1wX3I1X3ByaW50X2R0X25vZGVfaW5mbyhj bHVzdGVyKTsKPj4+PiArCj4+Pj4gKyAgICByZXR1cm4gMDsKPj4+PiArfQo+Pj4+ICsKPj4+PiAr c3RhdGljIHZvaWQgenlucW1wX3I1X2NsdXN0ZXJfZXhpdCh2b2lkICpkYXRhKQo+Pj4+ICt7Cj4+ Pj4gKyAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKilkYXRhOwo+Pj4+ICsKPj4+PiArICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs IE5VTEwpOwo+Pj4+ICsKPj4+PiArICAgIHByX2luZm8oIkV4aXQgcjVmIHN1YnN5c3RlbSBkcml2 ZXJcbiIpOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICsvKgo+Pj4+ICsgKiB6eW5xbXBfcjVfcmVtb3Rl cHJvY19wcm9iZSgpCj4+Pj4gKyAqCj4+Pj4gKyAqIEBwZGV2OiBkb21haW4gcGxhdGZvcm0gZGV2 aWNlIGZvciBSNSBjbHVzdGVyCj4+Pj4gKyAqCj4+Pj4gKyAqIGNhbGxlZCB3aGVuIGRyaXZlciBp cyBwcm9iZWQsIGZvciBlYWNoIFI1IGNvcmUgc3BlY2lmaWVkIGluIERULAo+Pj4+ICsgKiBzZXR1 cCBhcyBuZWVkZWQgdG8gZG8gcmVtb3RlcHJvYy1yZWxhdGVkIG9wZXJhdGlvbnMKPj4+PiArICoK Pj4+PiArICogUmV0dXJuOiAwIGZvciBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZmFpbHVy ZS4KPj4+PiArICovCj4+Pj4gK3N0YXRpYyBpbnQgenlucW1wX3I1X3JlbW90ZXByb2NfcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4+PiArewo+Pj4+ICsgICAgaW50IHJldDsK Pj4+PiArICAgIHN0cnVjdCB6eW5xbXBfcjVfY2x1c3RlciAqY2x1c3RlcjsKPj4+PiArICAgIHN0 cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4+Pj4gKwo+Pj4+ICsgICAgY2x1c3RlciA9 IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY2x1c3RlciksIEdGUF9LRVJORUwpOwo+Pj4+ICsg ICAgaWYgKElTX0VSUl9PUl9OVUxMKGNsdXN0ZXIpKQo+Pj4+ICsgICAgICAgICAgICByZXR1cm4g LUVOT01FTTsKPj4+PiArCj4+Pj4gKyAgICBjbHVzdGVyLT5kZXYgPSBkZXY7Cj4+Pj4gKwo+Pj4+ ICsgICAgcmV0ID0gZGV2bV9vZl9wbGF0Zm9ybV9wb3B1bGF0ZShkZXYpOwo+Pj4+ICsgICAgaWYg KHJldCkgewo+Pj4+ICsgICAgICAgICAgICBkZXZfZXJyKGRldiwgImZhaWxlZCB0byBwb3B1bGF0 ZSBwbGF0Zm9ybSBkZXYgJWRcbiIsIHJldCk7Cj4+Pj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7 Cj4+Pj4gKyAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgLyogd2lyZSBpbiBzbyBlYWNoIGNvcmUgY2Fu IGJlIGNsZWFuZWQgdXAgYXQgZHJpdmVyIHJlbW92ZSAqLwo+Pj4+ICsgICAgcGxhdGZvcm1fc2V0 X2RydmRhdGEocGRldiwgY2x1c3Rlcik7Cj4+Pj4gKwo+Pj4+ICsgICAgcmV0ID0gZGV2bV9hZGRf YWN0aW9uX29yX3Jlc2V0KGRldiwgenlucW1wX3I1X2NsdXN0ZXJfZXhpdCwgcGRldik7Cj4+Pj4g KyAgICBpZiAocmV0KQo+Pj4+ICsgICAgICAgICAgICByZXR1cm4gcmV0Owo+Pj4+ICsKPj4+PiAr ICAgIHJldCA9IHp5bnFtcF9yNV9jbHVzdGVyX2luaXQoY2x1c3Rlcik7Cj4+Pj4gKyAgICBpZiAo cmV0KSB7Cj4+Pj4gKyAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiSW52YWxpZCByNWYgc3Vic3lz dGVtIGRldmljZSB0cmVlXG4iKTsKPj4+PiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4+PiAr ICAgIH0KPj4+PiArCj4+Pj4gKyAgICBkZXZfaW5mbyhkZXYsICJYaWxpbnggcjVmIHJlbW90ZXBy b2MgZHJpdmVyIHByb2JlIHN1Y2Nlc3NcbiIpOwo+Pj4+ICsgICAgcmV0dXJuIDA7Cj4+Pj4gK30K Pj4+PiArCj4+Pj4gKy8qIE1hdGNoIHRhYmxlIGZvciBPRiBwbGF0Zm9ybSBiaW5kaW5nICovCj4+ Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHp5bnFtcF9yNV9yZW1vdGVwcm9j X21hdGNoW10gPSB7Cj4+Pj4gKyAgICB7IC5jb21wYXRpYmxlID0gInhsbngsenlucW1wLXI1ZnNz IiwgfSwKPj4+PiArICAgIHsgLyogZW5kIG9mIGxpc3QgKi8gfSwKPj4+PiArfTsKPj4+PiArTU9E VUxFX0RFVklDRV9UQUJMRShvZiwgenlucW1wX3I1X3JlbW90ZXByb2NfbWF0Y2gpOwo+Pj4+ICsK Pj4+PiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgenlucW1wX3I1X3JlbW90ZXByb2Nf ZHJpdmVyID0gewo+Pj4+ICsgICAgLnByb2JlID0genlucW1wX3I1X3JlbW90ZXByb2NfcHJvYmUs Cj4+Pj4gKyAgICAuZHJpdmVyID0gewo+Pj4+ICsgICAgICAgICAgICAubmFtZSA9ICJ6eW5xbXBf cjVfcmVtb3RlcHJvYyIsCj4+Pj4gKyAgICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9IHp5bnFt cF9yNV9yZW1vdGVwcm9jX21hdGNoLAo+Pj4+ICsgICAgfSwKPj4+PiArfTsKPj4+PiArbW9kdWxl X3BsYXRmb3JtX2RyaXZlcih6eW5xbXBfcjVfcmVtb3RlcHJvY19kcml2ZXIpOwo+Pj4+ICsKPj4+ PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJYaWxpbnggUjVGIHJlbW90ZSBwcm9jZXNzb3IgZHJpdmVy Iik7Cj4+Pj4gK01PRFVMRV9BVVRIT1IoIlhpbGlueCBJbmMuIik7Cj4+Pj4gK01PRFVMRV9MSUNF TlNFKCJHUEwgdjIiKTsKPj4+PiAtLQo+Pj4+IDIuMjUuMQo+Pj4+CgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==