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 X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3C071C47259 for ; Wed, 6 May 2020 18:43:07 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id E86E820736 for ; Wed, 6 May 2020 18:43:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="TZAa1iL9"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=xilinx.onmicrosoft.com header.i=@xilinx.onmicrosoft.com header.b="OFbJT+Xi" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E86E820736 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=xilinx.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=s7soxXj5yzprw0QpRuLVFt0r891b6jU7Dn2hStutBXM=; b=TZAa1iL9EVJCeg w5Vf/qmkcBEdmh1ZEEOu/DYfhUUIOnE6ljl+z7xZKw59EpWV8S6AtI4H60Lnx/irPOOKFL9iRrdY7 fBs/zJVF3ELFq6EB1N9V8NGfZcq90H9PkRycgRWmYKMB5Z5uYujUQREflF53HYGtH0L8SIg0z31KU d7kp8/ltGmLQXyWHfWfO6uPjmd0IGH3IZMpFeIKeraxGtKeJS/1UgfCMHSknMiOI536wpD77LChdN KCe4nyq8yu4VJX4LT5V2MN6VLNJmYHFsz5j6J7/swVAtInWP6OrArxGRHek8Mj0l5OS9gaGJ1Lba0 23/yh3IylOBCvbaLfT8Q==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jWP0L-0005js-1m; Wed, 06 May 2020 18:42:49 +0000 Received: from mail-bn8nam12on2040.outbound.protection.outlook.com ([40.107.237.40] helo=NAM12-BN8-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jWP0E-0005iR-Hp for linux-arm-kernel@lists.infradead.org; Wed, 06 May 2020 18:42:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JtweF6cl++7Wtd54T/FYHP5VC7YKaJt6YRj1fB+ckzVd6GanlDvIKduCGgQAs2I75yfmSo4cEzKZ6wVVfmh2PnWL95xmxxoXWIsMRMF1icjnrT8KfT+2hGoDslWvOvxpEA6vwlmUQ4+Cl7QV3Dgg5HHdVV4vu9vMMqjNynrb4KLk6wu8QydMXIulxmnaxcp5MuDOtzbUcfBYzGbpI0R76dA9QcdtpckTMG22AeW88PZwmsUaxF9ONcVz9qTy7DOV6MH4wO8oHa/sH9ngeO5FwwcSQG3Ka5mzVJeSXhr1scGZuVUGV/lZaBbrylASa1uQhAvZB23O3ueC9KuG0q0gbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rXFRpwjSrG1FqFKtzZMmer0hMa6snYVR8BKKe970ZIU=; b=e48QEm32HgLRVQXFv76k37Os5IbQvuztA8G5F0UAh1oYho0q5WzPCo7xlK+GjpKYIO0rDn/8lWnPCQPpOQ2WwRG/KHTski2Sva/GmTNxjqr7XHI7Jn47GWQNHbrvxug9MKNN/GqQoDGECiN8/cdOa3h5QuU14eS9VQfllu5zJ0cLOq3RwhvWV4jT0aOLMCjq1oBHcNtqdeudxZXJj9Zntk/7C+TR+BIWNNJoRBs0qh8iFj07VjmGzTWWPUsNovTL9ZcmeyKOkz2E8CLQ5qQuSAfkCaHbjIJsVSkIlCx5NF48hAD9mARo60K6hXgMexwgCwkS5Q4l81yHcstmjIRV/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 149.199.60.83) smtp.rcpttodomain=perches.com smtp.mailfrom=xilinx.com; dmarc=bestguesspass 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=rXFRpwjSrG1FqFKtzZMmer0hMa6snYVR8BKKe970ZIU=; b=OFbJT+XiGXuU+tORCN3dIE9k7qvpUgd86C0khzvTcyg6bkafWfo2EQYZl8GDZ4FwQbOYLy4Zo+wzBQ0rvihjdWqzxhFhJaoKodS5q+udDJcNlH648F0UEpfzfcC+PGddESaKfcqXLgZEovKvB/oDSMicA+9/SFcO9oos1k82jcs= Received: from DM3PR14CA0148.namprd14.prod.outlook.com (2603:10b6:0:53::32) by MN2PR02MB7087.namprd02.prod.outlook.com (2603:10b6:208:205::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2958.20; Wed, 6 May 2020 18:42:36 +0000 Received: from CY1NAM02FT008.eop-nam02.prod.protection.outlook.com (2603:10b6:0:53:cafe::ac) by DM3PR14CA0148.outlook.office365.com (2603:10b6:0:53::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2979.26 via Frontend Transport; Wed, 6 May 2020 18:42:36 +0000 Authentication-Results: spf=pass (sender IP is 149.199.60.83) smtp.mailfrom=xilinx.com; perches.com; dkim=none (message not signed) header.d=none;perches.com; dmarc=bestguesspass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.60.83 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.60.83; helo=xsj-pvapsmtpgw01; Received: from xsj-pvapsmtpgw01 (149.199.60.83) by CY1NAM02FT008.mail.protection.outlook.com (10.152.75.59) with Microsoft SMTP Server id 15.20.2958.27 via Frontend Transport; Wed, 6 May 2020 18:42:35 +0000 Received: from [149.199.38.66] (port=56742 helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw01 with esmtp (Exim 4.90) (envelope-from ) id 1jWOzz-0003G7-0K; Wed, 06 May 2020 11:42:27 -0700 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1jWP07-0006iX-Ib; Wed, 06 May 2020 11:42:35 -0700 Received: from xsj-pvapsmtp01 (xsj-mail.xilinx.com [149.199.38.66]) by xsj-smtp-dlp1.xlnx.xilinx.com (8.13.8/8.13.1) with ESMTP id 046IgUgu009756; Wed, 6 May 2020 11:42:31 -0700 Received: from [172.19.2.244] (helo=localhost) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1jWP02-0006hg-SQ; Wed, 06 May 2020 11:42:30 -0700 Date: Wed, 6 May 2020 11:42:30 -0700 From: Hyun Kwon To: Vishal Sagar Subject: Re: [PATCH v2 2/2] media: v4l: xilinx: Add Xilinx UHD-SDI Rx Subsystem driver Message-ID: <20200506184229.GA27667@smtp.xilinx.com> References: <20200429141705.18755-1-vishal.sagar@xilinx.com> <20200429141705.18755-3-vishal.sagar@xilinx.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200429141705.18755-3-vishal.sagar@xilinx.com> User-Agent: Mutt/1.5.24 (2015-08-30) X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.2.0.1013-23620.005 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.60.83; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:xsj-pvapsmtpgw01; PTR:unknown-60-83.xilinx.com; CAT:NONE; SFTY:; SFS:(396003)(136003)(376002)(346002)(39860400002)(46966005)(33430700001)(9786002)(6636002)(33440700001)(44832011)(1076003)(8936002)(4326008)(54906003)(336012)(26005)(316002)(6862004)(30864003)(70206006)(966005)(70586007)(107886003)(81166007)(186003)(478600001)(426003)(8676002)(356005)(82310400002)(82740400003)(7416002)(5660300002)(2906002)(33656002)(47076004)(559001)(579004); DIR:OUT; SFP:1101; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4000e125-a430-4a8b-12c0-08d7f1ed3ec1 X-MS-TrafficTypeDiagnostic: MN2PR02MB7087: X-Microsoft-Antispam-PRVS: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-Forefront-PRVS: 03950F25EC X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jiPIWb7WycFKKbzRrXAQLQPxhOW66eOze0O6HEGjIGY+U1sE9NSwZ6x3XAJwBR8sW206GCKU2sLNh77a2kUNJSIv71FAyCNEIPn7ogkaCuhtZrF2xmO9rDPwMRdCRG9yrIJqGfV18JAGiz2AVLZgfLMzmtVWxDFxSyDO5BUlE4e5/TZGBNTnRxDvDsUAKl70q0hcyno0JBJnSjNcM+C02o6EqJyXnXn+NemAuYe8QDRCDcyav6RlM5xSkFsDP3pS3lj/1FfDn4LTd9mXfG4zRXf3qy/M0WLaxIvZzh8YDykyqFP7mVgdy/+oko3bbwFixcQDY7o+0QO7s9lDunAkwmmeTzClk4v0Pno9htlaizl5kLqFZm5QpEDKNcOObgG+rmEAhHkwpr/jO6Yg525MimKjzOXBPmY0Nr07OPArHDonP50ENYgf4IghvANR084TpMwcnr4ueUdlbwj4U5zSWsVc3p62GaMEyrmITInEJ3WCkF4HYhGx70rWzgo+qqLBff7ePJE5ZN/jW5zMXmxg9P0uezg6KTewpmGMtQND0m94MIoLW2c+yY9c71y9zVIs4PChCfMVqB/EeSrgicOkXambT7jX4A+tiuDjbRY18dsbkMlXzOQCBpJ4N6S8OPtsTa0jcbyiH4fowx+T44j3pQ== X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 May 2020 18:42:35.8448 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4000e125-a430-4a8b-12c0-08d7f1ed3ec1 X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.60.83]; Helo=[xsj-pvapsmtpgw01] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR02MB7087 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200506_114242_798123_FEDD5CD5 X-CRM114-Status: GOOD ( 19.75 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "mark.rutland@arm.com" , "devicetree@vger.kernel.org" , Dinesh Kumar , Hyun Kwon , Sandip Kothari , "linux-kernel@vger.kernel.org" , "robh+dt@kernel.org" , Michal Simek , "laurent.pinchart@ideasonboard.com" , Vishal Sagar , Joe Perches , "hans.verkuil@cisco.com" , "mchehab@kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-media@vger.kernel.org" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgVmlzaGFsLAoKVGhhbmtzIGZvciB0aGUgcGF0Y2guIFNvcnJ5IGZvciBsYXRlIHJlcGx5LgoK T24gV2VkLCAyMDIwLTA0LTI5IGF0IDA3OjE3OjA0IC0wNzAwLCBWaXNoYWwgU2FnYXIgd3JvdGU6 Cj4gVGhlIFhpbGlueCBVSEQtU0RJIFJ4IHN1YnN5c3RlbSBzb2Z0IElQIGlzIHVzZWQgdG8gY2Fw dHVyZSBuYXRpdmUgU0RJCj4gc3RyZWFtcyBmcm9tIFNESSBzb3VyY2VzIGxpa2UgU0RJIGJyb2Fk Y2FzdCBlcXVpcG1lbnQgbGlrZSBjYW1lcmFzIGFuZAo+IG1peGVycy4gVGhpcyBibG9jayBvdXRw dXRzIGVpdGhlciBuYXRpdmUgU0RJLCBuYXRpdmUgdmlkZW8gb3IKPiBBWEk0LVN0cmVhbSBjb21w bGlhbnQgZGF0YSBzdHJlYW0gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4gUGxlYXNlIHJlZmVyCj4g dG8gUEcyOTAgZm9yIGRldGFpbHMuCj4gCj4gVGhlIGRyaXZlciBpcyB1c2VkIHRvIGNvbmZpZ3Vy ZSB0aGUgSVAgdG8gYWRkIGZyYW1lciwgc2VhcmNoIGZvcgo+IHNwZWNpZmljIG1vZGVzLCBnZXQg dGhlIGRldGVjdGVkIG1vZGUsIHN0cmVhbSBwYXJhbWV0ZXJzLCBlcnJvcnMsIGV0Yy4KPiBJdCBh bHNvIGdlbmVyYXRlcyBldmVudHMgZm9yIHZpZGVvIGxvY2svdW5sb2NrLCBicmlkZ2Ugb3Zlci91 bmRlciBmbG93Lgo+IAo+IFRoZSBkcml2ZXIgc3VwcG9ydHMgMTAvMTIgYnBjIFlVViA0MjIgbWVk aWEgYnVzIGZvcm1hdCBjdXJyZW50bHkuIEl0IGFsc28KPiBkZWNvZGVzIHRoZSBzdHJlYW0gcGFy YW1ldGVycyBiYXNlZCBvbiB0aGUgU1QzNTIgcGFja2V0IGVtYmVkZGVkIGluIHRoZQo+IHN0cmVh bS4gSW4gY2FzZSB0aGUgU1QzNTIgcGFja2V0IGlzbid0IHByZXNlbnQgaW4gdGhlIHN0cmVhbSwg dGhlIGNvcmUncwo+IGRldGVjdGVkIHByb3BlcnRpZXMgYXJlIHVzZWQgdG8gc2V0IHN0cmVhbSBw cm9wZXJ0aWVzLgo+IAo+IFRoZSBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIG9ubHkgdGhlIEFY STQtU3RyZWFtIElQIGNvbmZpZ3VyYXRpb24uCj4gCj4gU2lnbmVkLW9mZi1ieTogVmlzaGFsIFNh Z2FyIDx2aXNoYWwuc2FnYXJAeGlsaW54LmNvbT4KPiAtLS0KPiB2Mgo+IC0gQWRkZWQgRFYgdGlt aW5nIHN1cHBvcnQgYmFzZWQgb24gSGFucyBWZXJrdWlsxZsgZmVlZGJhY2sKPiAtIE1vcmUgZG9j dW1lbnRhdGlvbiB0byBjdXN0b20gdjRsIGNvbnRyb2xzIGFuZCBldmVudHMKPiAtIEZpeGVkIEh5 dW7FmyBjb21tZW50cwo+IC0gQWRkZWQgbWFjcm8gZm9yIG1hc2tpbmcgYW5kIHNoaWZ0aW5nIGFz IHBlciBKb2UgUGVyY2hlcyBjb21tZW50cwo+IC0gVXBkYXRlZCB0byBsYXRlc3QgYXMgcGVyIFhp bGlueCBnaXRodWIgcmVwbyBkcml2ZXIgbGlrZQo+ICAgYWRkaW5nIG5ldyBEViB0aW1pbmdzIG5v dCBpbiBtYWlubGluZSB5ZXQgdXB0aWxsIDAzLzIxLzIwCj4gCj4gIGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0veGlsaW54L0tjb25maWcgICAgICAgICB8ICAgMTEgKwo+ICBkcml2ZXJzL21lZGlhL3Bs YXRmb3JtL3hpbGlueC9NYWtlZmlsZSAgICAgICAgfCAgICAxICsKPiAgLi4uL21lZGlhL3BsYXRm b3JtL3hpbGlueC94aWxpbngtc2Rpcnhzcy5jICAgIHwgMjE2MiArKysrKysrKysrKysrKysrKwo+ ICBpbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXNkaXJ4c3MuaCAgICAgICAgICAgfCAgMTc5ICsr Cj4gIGluY2x1ZGUvdWFwaS9saW51eC94aWxpbngtdjRsMi1jb250cm9scy5oICAgICB8ICAgNjcg Kwo+ICA1IGZpbGVzIGNoYW5nZWQsIDI0MjAgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngveGlsaW54LXNkaXJ4c3MuYwo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC1zZGlyeHNzLmgKPiAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvS2NvbmZpZyBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcKPiBpbmRleCAwMWM5NmZiNjY0MTQu Ljc3MDkxMzE4YTljOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlu eC9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvS2NvbmZpZwo+ IEBAIC0xMiw2ICsxMiwxNyBAQCBjb25maWcgVklERU9fWElMSU5YCj4gIAo+ICBpZiBWSURFT19Y SUxJTlgKPiAgCj4gK2NvbmZpZyBWSURFT19YSUxJTlhfU0RJUlhTUwo+ICsJdHJpc3RhdGUgIlhp bGlueCBVSEQgU0RJIFJ4IFN1YnN5c3RlbSIKPiArCWhlbHAKPiArCSAgRHJpdmVyIGZvciBYaWxp bnggVUhELVNESSBSeCBTdWJzeXN0ZW0uIFRoaXMgaXMgYSBWNEwgc3ViLWRldmljZQo+ICsJICBi YXNlZCBkcml2ZXIgdGhhdCB0YWtlcyBpbnB1dCBmcm9tIGEgU0RJIHNvdXJjZSBsaWtlIFNESSBj YW1lcmEgYW5kCj4gKwkgIGNvbnZlcnRzIGl0IGludG8gYW4gQVhJNC1TdHJlYW0uIFRoZSBzdWJz eXN0ZW0gY29tcHJpc2VzIG9mIGEgU01QVEUKPiArCSAgVUhELVNESSBSeCBjb3JlLCBhIFNESSBS eCB0byBOYXRpdmUgVmlkZW8gYnJpZGdlIGFuZCBhIFZpZGVvIEluIHRvCj4gKwkgIEFYSTQtU3Ry ZWFtIGJyaWRnZS4gVGhlIGRyaXZlciBpcyB1c2VkIHRvIHNldCBkaWZmZXJlbnQgc3RyZWFtCj4g KwkgIGRldGVjdGlvbiBtb2RlcyBhbmQgaWRlbnRpZnkgc3RyZWFtIHByb3BlcnRpZXMgdG8gcHJv cGVybHkgY29uZmlndXJlCj4gKwkgIGRvd25zdHJlYW0uCj4gKwo+ICBjb25maWcgVklERU9fWElM SU5YX1RQRwo+ICAJdHJpc3RhdGUgIlhpbGlueCBWaWRlbyBUZXN0IFBhdHRlcm4gR2VuZXJhdG9y Igo+ICAJZGVwZW5kcyBvbiBWSURFT19YSUxJTlgKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS94aWxpbngvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlu eC9NYWtlZmlsZQo+IGluZGV4IDRjZGMwYjFlYzdhNS4uNmMzNzVmMDNmNTg3IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L01ha2VmaWxlCj4gKysrIGIvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvTWFrZWZpbGUKPiBAQCAtMiw2ICsyLDcgQEAKPiAgCj4g IHhpbGlueC12aWRlby1vYmpzICs9IHhpbGlueC1kbWEubyB4aWxpbngtdmlwLm8geGlsaW54LXZp cHAubwo+ICAKPiArb2JqLSQoQ09ORklHX1ZJREVPX1hJTElOWF9TRElSWFNTKSArPSB4aWxpbngt c2Rpcnhzcy5vCgpUaGlzIGJldHRlciBjb21lIGFmdGVyIENPTkZJR19WSURFT19YSUxJTlguCgo+ ICBvYmotJChDT05GSUdfVklERU9fWElMSU5YKSArPSB4aWxpbngtdmlkZW8ubwo+ICBvYmotJChD T05GSUdfVklERU9fWElMSU5YX1RQRykgKz0geGlsaW54LXRwZy5vCj4gIG9iai0kKENPTkZJR19W SURFT19YSUxJTlhfVlRDKSArPSB4aWxpbngtdnRjLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS94aWxpbngveGlsaW54LXNkaXJ4c3MuYyBiL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0veGlsaW54L3hpbGlueC1zZGlyeHNzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uYzUzNmVhM2FhYTBkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L3hpbGlueC1zZGlyeHNzLmMKPiBAQCAtMCwwICsx LDIxNjIgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiAr ICogRHJpdmVyIGZvciBYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbQo+ICsgKgo+ICsgKiBDb3B5cmln aHQgKEMpIDIwMTcgLSAyMDIwIFhpbGlueCwgSW5jLgo+ICsgKgo+ICsgKiBDb250YWN0czogVmlz aGFsIFNhZ2FyIDx2aXNoYWwuc2FnYXJAeGlsaW54LmNvbT4KPiArICoKPiArICovCj4gKwo+ICsj aW5jbHVkZSA8ZHQtYmluZGluZ3MvbWVkaWEveGlsaW54LXZpcC5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvYml0b3BzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgoKSXMgdGhpcyBuZWVk ZWQ/IE1heWJlIHVudXNlZCBvbmVzIGNhbiBiZSByZW1vdmVkLgoKPiArI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Rl dmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9pby5oPgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9p cnEuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8 bGludXgvcG0uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3NwaW5sb2NrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgo+ICsjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3Y0bDItZHYtdGltaW5ncy5o Pgo+ICsjaW5jbHVkZSA8bGludXgvdjRsMi1zdWJkZXYuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3hp bGlueC1zZGlyeHNzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC94aWxpbngtdjRsMi1jb250cm9scy5o Pgo+ICsjaW5jbHVkZSA8bWVkaWEvbWVkaWEtZW50aXR5Lmg+Cj4gKyNpbmNsdWRlIDxtZWRpYS92 NGwyLWNvbW1vbi5oPgo+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPgo+ICsjaW5jbHVk ZSA8bWVkaWEvdjRsMi1ldmVudC5oPgo+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1md25vZGUuaD4K PiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+Cj4gKyNpbmNsdWRlICJ4aWxpbngtdmlw LmgiCj4gKwo+ICsvKgo+ICsgKiBTREkgUnggcmVnaXN0ZXIgbWFwLCBiaXRtYXNrIGFuZCBvZmZz ZXRzCj4gKyAqLwo+ICsjZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9SRUcJCTB4MDAKPiArI2RlZmlu ZSBYU0RJUlhfTURMX0NUUkxfUkVHCQkweDA0Cj4gKyNkZWZpbmUgWFNESVJYX0dMQkxfSUVSX1JF RwkJMHgwQwo+ICsjZGVmaW5lIFhTRElSWF9JU1JfUkVHCQkJMHgxMAo+ICsjZGVmaW5lIFhTRElS WF9JRVJfUkVHCQkJMHgxNAo+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9WQUxJRF9SRUcJCTB4MTgK PiArI2RlZmluZSBYU0RJUlhfU1QzNTJfRFMxX1JFRwkJMHgxQwo+ICsjZGVmaW5lIFhTRElSWF9T VDM1Ml9EUzNfUkVHCQkweDIwCj4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTNV9SRUcJCTB4MjQK PiArI2RlZmluZSBYU0RJUlhfU1QzNTJfRFM3X1JFRwkJMHgyOAo+ICsjZGVmaW5lIFhTRElSWF9T VDM1Ml9EUzlfUkVHCQkweDJDCj4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTMTFfUkVHCQkweDMw Cj4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTMTNfUkVHCQkweDM0Cj4gKyNkZWZpbmUgWFNESVJY X1NUMzUyX0RTMTVfUkVHCQkweDM4Cj4gKyNkZWZpbmUgWFNESVJYX1ZFUlNJT05fUkVHCQkweDND Cj4gKyNkZWZpbmUgWFNESVJYX1NTX0NPTkZJR19SRUcJCTB4NDAKPiArI2RlZmluZSBYU0RJUlhf TU9ERV9ERVRfU1RBVF9SRUcJMHg0NAo+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SRUcJ CTB4NDgKPiArI2RlZmluZSBYU0RJUlhfRURIX1NUQVRfUkVHCQkweDRDCj4gKyNkZWZpbmUgWFNE SVJYX0VESF9FUlJDTlRfRU5fUkVHCTB4NTAKPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9S RUcJCTB4NTQKPiArI2RlZmluZSBYU0RJUlhfQ1JDX0VSUkNOVF9SRUcJCTB4NTgKPiArI2RlZmlu ZSBYU0RJUlhfVklEX0xPQ0tfV0lORE9XX1JFRwkweDVDCj4gKyNkZWZpbmUgWFNESVJYX1NCX1JY X1NUU19SRUcJCTB4NjAKPiArCj4gKyNkZWZpbmUgWFNESVJYX1JTVF9DVFJMX1NTX0VOX01BU0sJ CQlCSVQoMCkKPiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfU1JTVF9NQVNLCQkJQklUKDEpCj4g KyNkZWZpbmUgWFNESVJYX1JTVF9DVFJMX1JTVF9DUkNfRVJSQ05UX01BU0sJCUJJVCgyKQo+ICsj ZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9SU1RfRURIX0VSUkNOVF9NQVNLCQlCSVQoMykKPiArI2Rl ZmluZSBYU0RJUlhfUlNUX0NUUkxfU0RJUlhfQlJJREdFX0VOQl9NQVNLCQlCSVQoOCkKPiArI2Rl ZmluZSBYU0RJUlhfUlNUX0NUUkxfVklESU5fQVhJNFNfTU9EX0VOQl9NQVNLCUJJVCg5KQo+ICsj ZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9CUklER0VfQ0hfRk1UX09GRlNFVAkJMTAKPiArI2RlZmlu ZSBYU0RJUlhfUlNUX0NUUkxfQlJJREdFX0NIX0ZNVF9NQVNLCQlHRU5NQVNLKDEyLCAxMCkKPiAr I2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfQlJJREdFX0NIX0ZNVF9ZVVY0NDQJCTEKPiArCj4gKyNk ZWZpbmUgWFNESVJYX01ETF9DVFJMX0ZSTV9FTl9NQVNLCQlCSVQoNCkKPiArI2RlZmluZSBYU0RJ UlhfTURMX0NUUkxfTU9ERV9ERVRfRU5fTUFTSwlCSVQoNSkKPiArI2RlZmluZSBYU0RJUlhfTURM X0NUUkxfTU9ERV9IRF9FTl9NQVNLCQlCSVQoOCkKPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxf TU9ERV9TRF9FTl9NQVNLCQlCSVQoOSkKPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV8z R19FTl9NQVNLCQlCSVQoMTApCj4gKyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX01PREVfNkdfRU5f TUFTSwkJQklUKDExKQo+ICsjZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9NT0RFXzEyR0lfRU5fTUFT SwlCSVQoMTIpCj4gKyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX01PREVfMTJHRl9FTl9NQVNLCUJJ VCgxMykKPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV9BVVRPX0RFVF9NQVNLCUdFTk1B U0soMTMsIDgpCj4gKwo+ICsjZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9GT1JDRURfTU9ERV9PRkZT RVQJMTYKPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfRk9SQ0VEX01PREVfTUFTSwlHRU5NQVNL KDE4LCAxNikKPiArCj4gKyNkZWZpbmUgWFNESVJYX0dMQkxfSU5UUl9FTl9NQVNLCUJJVCgwKQo+ ICsKPiArI2RlZmluZSBYU0RJUlhfSU5UUl9WSURMT0NLX01BU0sJQklUKDApCj4gKyNkZWZpbmUg WFNESVJYX0lOVFJfVklEVU5MT0NLX01BU0sJQklUKDEpCj4gKyNkZWZpbmUgWFNESVJYX0lOVFJf T1ZFUkZMT1dfTUFTSwlCSVQoOSkKPiArI2RlZmluZSBYU0RJUlhfSU5UUl9VTkRFUkZMT1dfTUFT SwlCSVQoMTApCj4gKwo+ICsjZGVmaW5lIFhTRElSWF9JTlRSX0FMTF9NQVNLCShYU0RJUlhfSU5U Ul9WSURMT0NLX01BU0sgfFwKPiArCQkJCVhTRElSWF9JTlRSX1ZJRFVOTE9DS19NQVNLIHxcCj4g KwkJCQlYU0RJUlhfSU5UUl9PVkVSRkxPV19NQVNLIHxcCj4gKwkJCQlYU0RJUlhfSU5UUl9VTkRF UkZMT1dfTUFTSykKPiArCj4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElEX0RTMV9NQVNLCUJJ VCgwKQo+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9WQUxJRF9EUzNfTUFTSwlCSVQoMSkKPiArI2Rl ZmluZSBYU0RJUlhfU1QzNTJfVkFMSURfRFM1X01BU0sJQklUKDIpCj4gKyNkZWZpbmUgWFNESVJY X1NUMzUyX1ZBTElEX0RTN19NQVNLCUJJVCgzKQo+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9WQUxJ RF9EUzlfTUFTSwlCSVQoNCkKPiArI2RlZmluZSBYU0RJUlhfU1QzNTJfVkFMSURfRFMxMV9NQVNL CUJJVCg1KQo+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9WQUxJRF9EUzEzX01BU0sJQklUKDYpCj4g KyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElEX0RTMTVfTUFTSwlCSVQoNykKPiArCj4gKyNkZWZp bmUgWFNESVJYX01PREVfREVUX1NUQVRfUlhfTU9ERV9NQVNLCUdFTk1BU0soMiwgMCkKPiArI2Rl ZmluZSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9NT0RFX0xPQ0tfTUFTSwlCSVQoMykKPiArI2RlZmlu ZSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9BQ1RfU1RSRUFNX01BU0sJR0VOTUFTSyg2LCA0KQo+ICsj ZGVmaW5lIFhTRElSWF9NT0RFX0RFVF9TVEFUX0FDVF9TVFJFQU1fT0ZGU0VUCTQKPiArI2RlZmlu ZSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9MVkxCXzNHX01BU0sJQklUKDcpCj4gKwo+ICsjZGVmaW5l IFhTRElSWF9UU19ERVRfU1RBVF9MT0NLRURfTUFTSwkJQklUKDApCj4gKyNkZWZpbmUgWFNESVJY X1RTX0RFVF9TVEFUX1NDQU5fTUFTSwkJQklUKDEpCj4gKyNkZWZpbmUgWFNESVJYX1RTX0RFVF9T VEFUX1NDQU5fT0ZGU0VUCQkoMSkKPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfRkFNSUxZ X01BU0sJCUdFTk1BU0soNywgNCkKPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfRkFNSUxZ X09GRlNFVAkoNCkKPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV9NQVNLCQlHRU5N QVNLKDExLCA4KQo+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFX09GRlNFVAkJKDgp Cj4gKwo+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFX05PTkUJCTB4MAo+ICsjZGVm aW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzIzXzk4SFoJCTB4Mgo+ICsjZGVmaW5lIFhTRElS WF9UU19ERVRfU1RBVF9SQVRFXzI0SFoJCTB4Mwo+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RB VF9SQVRFXzQ3Xzk1SFoJCTB4NAo+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI1 SFoJCTB4NQo+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI5Xzk3SFoJCTB4Ngo+ ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzMwSFoJCTB4Nwo+ICsjZGVmaW5lIFhT RElSWF9UU19ERVRfU1RBVF9SQVRFXzQ4SFoJCTB4OAo+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRf U1RBVF9SQVRFXzUwSFoJCTB4OQo+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzU5 Xzk0SFoJCTB4QQo+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzYwSFoJCTB4Qgo+ ICsKPiArI2RlZmluZSBYU0RJUlhfRURIX1NUQVRfRURIX0FQX01BU0sJQklUKDApCj4gKyNkZWZp bmUgWFNESVJYX0VESF9TVEFUX0VESF9GRl9NQVNLCUJJVCgxKQo+ICsjZGVmaW5lIFhTRElSWF9F REhfU1RBVF9FREhfQU5DX01BU0sJQklUKDIpCj4gKyNkZWZpbmUgWFNESVJYX0VESF9TVEFUX0FQ X0ZMQUdfTUFTSwlHRU5NQVNLKDgsIDQpCj4gKyNkZWZpbmUgWFNESVJYX0VESF9TVEFUX0ZGX0ZM QUdfTUFTSwlHRU5NQVNLKDEzLCA5KQo+ICsjZGVmaW5lIFhTRElSWF9FREhfU1RBVF9BTkNfRkxB R19NQVNLCUdFTk1BU0soMTgsIDE0KQo+ICsjZGVmaW5lIFhTRElSWF9FREhfU1RBVF9QS1RfRkxB R19NQVNLCUdFTk1BU0soMjIsIDE5KQo+ICsKPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9D T1VOVF9NQVNLCUdFTk1BU0soMTUsIDApCj4gKwo+ICsjZGVmaW5lIFhTRElSWF9DUkNfRVJSQ05U X0NPVU5UX01BU0sJR0VOTUFTSygzMSwgMTYpCj4gKyNkZWZpbmUgWFNESVJYX0NSQ19FUlJDTlRf RFNfQ1JDX01BU0sJR0VOTUFTSygxNSwgMCkKPiArCj4gKyNkZWZpbmUgWFNESVJYX1ZFUlNJT05f UkVWX01BU0sJCUdFTk1BU0soNywgMCkKPiArI2RlZmluZSBYU0RJUlhfVkVSU0lPTl9QQVRDSElE X01BU0sJR0VOTUFTSygxMSwgOCkKPiArI2RlZmluZSBYU0RJUlhfVkVSU0lPTl9WRVJfUkVWX01B U0sJR0VOTUFTSygxNSwgMTIpCj4gKyNkZWZpbmUgWFNESVJYX1ZFUlNJT05fVkVSX01JTl9NQVNL CUdFTk1BU0soMjMsIDE2KQo+ICsjZGVmaW5lIFhTRElSWF9WRVJTSU9OX1ZFUl9NQUpfTUFTSwlH RU5NQVNLKDMxLCAyNCkKPiArCj4gKyNkZWZpbmUgWFNESVJYX1NTX0NPTkZJR19FREhfSU5DTFVE RURfTUFTSwkJQklUKDEpCj4gKwo+ICsjZGVmaW5lIFhTRElSWF9TVEFUX1NCX1JYX1REQVRBX0NI QU5HRV9ET05FX01BU0sJQklUKDApCj4gKyNkZWZpbmUgWFNESVJYX1NUQVRfU0JfUlhfVERBVEFf Q0hBTkdFX0ZBSUxfTUFTSwlCSVQoMSkKPiArI2RlZmluZSBYU0RJUlhfU1RBVF9TQl9SWF9UREFU QV9HVF9SRVNFVERPTkVfTUFTSwlCSVQoMikKPiArI2RlZmluZSBYU0RJUlhfU1RBVF9TQl9SWF9U REFUQV9HVF9CSVRSQVRFX01BU0sJCUJJVCgzKQo+ICsKPiArI2RlZmluZSBYU0RJUlhfREVGQVVM VF9XSURUSAkoMTkyMCkKPiArI2RlZmluZSBYU0RJUlhfREVGQVVMVF9IRUlHSFQJKDEwODApCj4g Kwo+ICsjZGVmaW5lIFhTRElSWF9NQVhfU1RSX0xFTkdUSAkxNgo+ICsKPiArI2RlZmluZSBYU0RJ UlhTU19TRElfU1REXzNHCQkwCj4gKyNkZWZpbmUgWFNESVJYU1NfU0RJX1NURF82RwkJMQo+ICsj ZGVmaW5lIFhTRElSWFNTX1NESV9TVERfMTJHXzhEUwkyCj4gKwo+ICsjZGVmaW5lIFhTRElSWF9E RUZBVUxUX1ZJREVPX0xPQ0tfV0lORE9XCTB4MzAwMAo+ICsKPiArI2RlZmluZSBYU0RJUlhfTU9E RV9IRF9NQVNLCTB4MAo+ICsjZGVmaW5lIFhTRElSWF9NT0RFX1NEX01BU0sJMHgxCj4gKyNkZWZp bmUgWFNESVJYX01PREVfM0dfTUFTSwkweDIKPiArI2RlZmluZSBYU0RJUlhfTU9ERV82R19NQVNL CTB4NAo+ICsjZGVmaW5lIFhTRElSWF9NT0RFXzEyR0lfTUFTSwkweDUKPiArI2RlZmluZSBYU0RJ UlhfTU9ERV8xMkdGX01BU0sJMHg2Cj4gKwo+ICsvKiBNYXhpbXVtIG51bWJlciBvZiBldmVudHMg cGVyIGZpbGUgaGFuZGxlLiAqLwo+ICsjZGVmaW5lIFhTRElSWF9NQVhfRVZFTlRTCSgxMjgpCj4g Kwo+ICsvKiBTVDM1MiByZWxhdGVkIG1hY3JvcyAqLwo+ICsjZGVmaW5lIFhTVDM1Ml9QQVlMT0FE X0JZVEUxX01BU0sJMHhGRgo+ICsjZGVmaW5lIFhTVDM1Ml9QQVlMT0FEX0JZVEUxX09GRlNFVAkw Cj4gKyNkZWZpbmUgWFNUMzUyX1BBWUxPQURfQllURTJfT0ZGU0VUCTgKPiArI2RlZmluZSBYU1Qz NTJfUEFZTE9BRF9CWVRFM19PRkZTRVQJMTYKPiArI2RlZmluZSBYU1QzNTJfUEFZTE9BRF9CWVRF NF9PRkZTRVQJMjQKPiArCj4gKyNkZWZpbmUgWFNUMzUyX0JZVEUxX1NUMjkyXzF4NzIwTF8xXzVH CQkweDg0Cj4gKyNkZWZpbmUgWFNUMzUyX0JZVEUxX1NUMjkyXzF4MTA4MExfMV81RwkJMHg4NQo+ ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMV9TVDQyNV8yMDA4Xzc1MExfM0dCCTB4ODgKPiArI2RlZmlu ZSBYU1QzNTJfQllURTFfU1Q0MjVfMjAwOF8xMTI1TF8zR0EJMHg4OQo+ICsjZGVmaW5lIFhTVDM1 Ml9CWVRFMV9TVDM3Ml9ETF8zR0IJCTB4OEEKPiArI2RlZmluZSBYU1QzNTJfQllURTFfU1QzNzJf Mng3MjBMXzNHQgkJMHg4Qgo+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMV9TVDM3Ml8yeDEwODBMXzNH QgkJMHg4Qwo+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMV9TVDIwODFfMTBfMjE2MExfNkcJCTB4QzAK PiArI2RlZmluZSBYU1QzNTJfQllURTFfU1QyMDgxXzEwXzJfMTA4MExfNkcJMHhDMQo+ICsjZGVm aW5lIFhTVDM1Ml9CWVRFMV9TVDIwODFfMTBfRExfMjE2MExfNkcJMHhDMgo+ICsjZGVmaW5lIFhT VDM1Ml9CWVRFMV9TVDIwODJfMTBfMjE2MExfMTJHCTB4Q0UKPiArCj4gKyNkZWZpbmUgWFNUMzUy X0JZVEUyX1RTX1RZUEVfTUFTSwkJQklUKDE1KQo+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9UU19U WVBFX09GRlNFVAkJMTUKPiArI2RlZmluZSBYU1QzNTJfQllURTJfUElDX1RZUEVfTUFTSwkJQklU KDE0KQo+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9QSUNfVFlQRV9PRkZTRVQJCTE0Cj4gKyNkZWZp bmUgWFNUMzUyX0JZVEUyX1RTX1BJQ19UWVBFX0lOVEVSTEFDRUQJMAo+ICsjZGVmaW5lIFhTVDM1 Ml9CWVRFMl9UU19QSUNfVFlQRV9QUk9HUkVTU0lWRQkxCj4gKwo+ICsjZGVmaW5lIFhTVDM1Ml9C WVRFMl9GUFNfTUFTSwkJCTB4Rgo+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfT0ZGU0VUCQkJ OAo+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfMjRGCQkJMHgyCj4gKyNkZWZpbmUgWFNUMzUy X0JZVEUyX0ZQU18yNAkJCTB4Mwo+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfNDhGCQkJMHg0 Cj4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU18yNQkJCTB4NQo+ICsjZGVmaW5lIFhTVDM1Ml9C WVRFMl9GUFNfMzBGCQkJMHg2Cj4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU18zMAkJCTB4Nwo+ ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfNDgJCQkweDgKPiArI2RlZmluZSBYU1QzNTJfQllU RTJfRlBTXzUwCQkJMHg5Cj4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU182MEYJCQkweEEKPiAr I2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzYwCQkJMHhCCj4gKy8qIFRhYmxlIDQgU1QgMjA4MS0x MDoyMDE1ICovCj4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU185NgkJCTB4Qwo+ICsjZGVmaW5l IFhTVDM1Ml9CWVRFMl9GUFNfMTAwCQkJMHhECj4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU18x MjAJCQkweEUKPiArI2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzEyMEYJCQkweEYKPiArCj4gKyNk ZWZpbmUgWFNUMzUyX0JZVEUzX0FDVF9MVU1BX0NPVU5UX01BU0sJQklUKDIyKQo+ICsjZGVmaW5l IFhTVDM1Ml9CWVRFM19BQ1RfTFVNQV9DT1VOVF9PRkZTRVQJMjIKPiArCj4gKyNkZWZpbmUgWFNU MzUyX0JZVEUzX0NPTE9SX0ZPUk1BVF9NQVNLCQlHRU5NQVNLKDE5LCAxNikKPiArI2RlZmluZSBY U1QzNTJfQllURTNfQ09MT1JfRk9STUFUX09GRlNFVAkxNgo+ICsjZGVmaW5lIFhTVDM1Ml9CWVRF M19DT0xPUl9GT1JNQVRfNDIyCQkweDAKPiArI2RlZmluZSBYU1QzNTJfQllURTNfQ09MT1JfRk9S TUFUX1lVVjQ0NAkweDEKPiArI2RlZmluZSBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFUXzQyMAkJ MHgzCj4gKyNkZWZpbmUgWFNUMzUyX0JZVEUzX0NPTE9SX0ZPUk1BVF9HQlIJCTB4Mgo+ICsKPiAr I2RlZmluZSBYU1QzNTJfQllURTRfQklUX0RFUFRIX01BU0sJCUdFTk1BU0soMjUsIDI0KQo+ICsj ZGVmaW5lIFhTVDM1Ml9CWVRFNF9CSVRfREVQVEhfT0ZGU0VUCQkyNAo+ICsjZGVmaW5lIFhTVDM1 Ml9CWVRFNF9CSVRfREVQVEhfMTAJCTB4MQo+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFNF9CSVRfREVQ VEhfMTIJCTB4Mgo+ICsKPiArI2RlZmluZSBDTEtfSU5UCQkxNDg1MDAwMDBVTAoKQSBjb21tZW50 IGZvciB0aGlzIHdvdWxkIGJlIGhlbHBmdWwuCgo+ICsKPiArI2RlZmluZSByc2hpZnRfYW5kX21h c2sodmFsLCB0eXBlKSBcCj4gKwkJKCgodmFsKSA+PiB0eXBlIyNfT0ZGU0VUKSAmIHR5cGUjI19N QVNLKQo+ICsKPiArI2RlZmluZSBtYXNrX2FuZF9yc2hpZnQodmFsLCB0eXBlKSBcCj4gKwkJKCgo dmFsKSAmIHR5cGUjI19NQVNLKSA+PiB0eXBlIyNfT0ZGU0VUKQo+ICsKPiArLyoqCj4gKyAqIGVu dW0gc2RpX2ZhbWlseV9lbmMgLSBTREkgVHJhbnNwb3J0IFZpZGVvIEZvcm1hdCBEZXRlY3RlZCB3 aXRoIEFjdGl2ZSBQaXhlbHMKPiArICogQFhTRElSWF9TTVBURV9TVF8yNzQ6IFNNUFRFIFNUIDI3 NCBkZXRlY3RlZCB3aXRoIEFQIDE5MjB4MTA4MAo+ICsgKiBAWFNESVJYX1NNUFRFX1NUXzI5Njog U01QVEUgU1QgMjk2IGRldGVjdGVkIHdpdGggQVAgMTI4MHg3MjAKPiArICogQFhTRElSWF9TTVBU RV9TVF8yMDQ4XzI6IFNNUFRFIFNUIDIwNDgtMiBkZXRlY3RlZCB3aXRoIEFQIDIwNDh4MTA4MAo+ ICsgKiBAWFNESVJYX1NNUFRFX1NUXzI5NTogU01QVEUgU1QgMjk1IGRldGVjdGVkIHdpdGggQVAg MTkyMHgxMDgwCj4gKyAqIEBYU0RJUlhfTlRTQzogTlRTQyBlbmNvZGluZyBkZXRlY3RlZCB3aXRo IEFQIDcyMHg0ODYKPiArICogQFhTRElSWF9QQUw6IFBBTCBlbmNvZGluZyBkZXRlY3RlZCB3aXRo IEFQIDcyMHg1NzYKPiArICogQFhTRElSWF9UU19VTktOT1dOOiBVbmtub3duIFNNUFRFIFRyYW5z cG9ydCBmYW1pbHkgdHlwZQo+ICsgKi8KPiArZW51bSBzZGlfZmFtaWx5X2VuYyB7Cj4gKwlYU0RJ UlhfU01QVEVfU1RfMjc0CT0gMCwKPiArCVhTRElSWF9TTVBURV9TVF8yOTYJPSAxLAo+ICsJWFNE SVJYX1NNUFRFX1NUXzIwNDhfMgk9IDIsCj4gKwlYU0RJUlhfU01QVEVfU1RfMjk1CT0gMywKPiAr CVhTRElSWF9OVFNDCQk9IDgsCj4gKwlYU0RJUlhfUEFMCQk9IDksCj4gKwlYU0RJUlhfVFNfVU5L Tk9XTgk9IDE1Cj4gK307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IHhzZGlyeHNzX2NvcmUgLSBD b3JlIGNvbmZpZ3VyYXRpb24gU0RJIFJ4IFN1YnN5c3RlbSBkZXZpY2Ugc3RydWN0dXJlCj4gKyAq IEBkZXY6IFBsYXRmb3JtIHN0cnVjdHVyZQo+ICsgKiBAaW9tZW06IEJhc2UgYWRkcmVzcyBvZiBz dWJzeXN0ZW0KPiArICogQGlycTogcmVxdWVzdGVkIGlycSBudW1iZXIKPiArICogQGluY2x1ZGVf ZWRoOiBFREggcHJvY2Vzc29yIHByZXNlbmNlCj4gKyAqIEBtb2RlOiAzRy82Ry8xMkcgbW9kZQo+ ICsgKiBAY2xrczogYXJyYXkgb2YgY2xvY2tzCj4gKyAqIEBudW1fY2xrczogbnVtYmVyIG9mIGNs b2Nrcwo+ICsgKiBAYnBjOiBCaXRzIHBlciBjb21wb25lbnQsIGNhbiBiZSAxMCBvciAxMgo+ICsg Ki8KPiArc3RydWN0IHhzZGlyeHNzX2NvcmUgewo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJ dm9pZCBfX2lvbWVtICppb21lbTsKPiArCWludCBpcnE7CgpJIGRvbid0IHRoaW5rIHRoaXMgaGFz IHRvIGJlIHN0b3JlZC4KCj4gKwlib29sIGluY2x1ZGVfZWRoOwo+ICsJaW50IG1vZGU7Cgp1bnNp Z25lZCB0eXBlPwoKPiArCXN0cnVjdCBjbGtfYnVsa19kYXRhICpjbGtzOwo+ICsJaW50IG51bV9j bGtzOwoKdW5zaWduZWQgdHlwZT8KCj4gKwl1MzIgYnBjOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAq IHN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAtIFNESSBSeCBTdWJzeXN0ZW0gZGV2aWNlIHN0cnVjdHVy ZQo+ICsgKiBAY29yZTogQ29yZSBzdHJ1Y3R1cmUgZm9yIE1JUEkgU0RJIFJ4IFN1YnN5c3RlbQo+ ICsgKiBAc3ViZGV2OiBUaGUgdjRsMiBzdWJkZXYgc3RydWN0dXJlCj4gKyAqIEBjdHJsX2hhbmRs ZXI6IGNvbnRyb2wgaGFuZGxlcgo+ICsgKiBAZXZlbnQ6IEhvbGRzIHRoZSB2aWRlbyB1bmxvY2sg ZXZlbnQKPiArICogQGZvcm1hdDogQWN0aXZlIFY0TDIgZm9ybWF0IG9uIHNvdXJjZSBwYWQKPiAr ICogQGRlZmF1bHRfZm9ybWF0OiBkZWZhdWx0IFY0TDIgbWVkaWEgYnVzIGZvcm1hdAo+ICsgKiBA ZnJhbWVfaW50ZXJ2YWw6IENhcHR1cmVzIHRoZSBmcmFtZSByYXRlCj4gKyAqIEBwYWQ6IHNvdXJj ZSBtZWRpYSBwYWQKPiArICogQHZpZGxvY2t3aW46IFZpZGVvIGxvY2sgd2luZG93IHZhbHVlIHNl dCBieSBjb250cm9sCj4gKyAqIEBlZGhtYXNrOiBFREggbWFzayBzZXQgYnkgY29udHJvbAo+ICsg KiBAc2VhcmNobWFzazogU2VhcmNoIG1hc2sgc2V0IGJ5IGNvbnRyb2wKPiArICogQHN0cmVhbWlu ZzogRmxhZyBmb3Igc3RvcmluZyBzdHJlYW1pbmcgc3RhdGUKPiArICogQHZpZGxvY2tlZDogRmxh ZyBpbmRpY2F0aW5nIFNESSBSeCBoYXMgbG9ja2VkIG9udG8gdmlkZW8gc3RyZWFtCj4gKyAqIEB0 c19pc19pbnRlcmxhY2VkOiBGbGFnIGluZGljYXRpbmcgVHJhbnNwb3J0IFN0cmVhbSBpcyBpbnRl cmxhY2VkLgo+ICsgKiBAZnJhbWVyX2VuYWJsZTogRmxhZyBmb3IgZnJhbWVyIGVuYWJsZWQgb3Ig bm90IHNldCBieSBjb250cm9sCj4gKyAqCj4gKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHRo ZSBkZXZpY2UgZHJpdmVyIHJlbGF0ZWQgcGFyYW1ldGVycwo+ICsgKi8KPiArc3RydWN0IHhzZGly eHNzX3N0YXRlIHsKPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlIGNvcmU7Cj4gKwlzdHJ1Y3QgdjRs Ml9zdWJkZXYgc3ViZGV2Owo+ICsJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGN0cmxfaGFuZGxl cjsKPiArCXN0cnVjdCB2NGwyX2V2ZW50IGV2ZW50Owo+ICsJc3RydWN0IHY0bDJfbWJ1c19mcmFt ZWZtdCBmb3JtYXQ7Cj4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IGRlZmF1bHRfZm9ybWF0 Owo+ICsJc3RydWN0IHY0bDJfZnJhY3QgZnJhbWVfaW50ZXJ2YWw7Cj4gKwlzdHJ1Y3QgbWVkaWFf cGFkIHBhZDsKPiArCXUzMiB2aWRsb2Nrd2luOwo+ICsJdTMyIGVkaG1hc2s7Cj4gKwl1MTYgc2Vh cmNobWFzazsKPiArCWJvb2wgc3RyZWFtaW5nOwo+ICsJYm9vbCB2aWRsb2NrZWQ7Cj4gKwlib29s IHRzX2lzX2ludGVybGFjZWQ7Cj4gKwlib29sIGZyYW1lcl9lbmFibGU7Cj4gK307Cj4gKwo+ICsv KiBMaXN0IG9mIGNsb2NrcyByZXF1aXJlZCBieSBVSEQtU0RJIFJ4IHN1YnN5c3RlbSAqLwo+ICtz dGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHhzZGlyeHNzX2Nsa3NbXSA9IHsKPiArCSJzX2F4aV9h Y2xrIiwgInNkaV9yeF9jbGsiLCAidmlkZW9fb3V0X2NsayIsCj4gK307Cj4gKwo+ICsvKiBUT0RP IC0gQWRkIFlVViA0NDQvNDIwIGFuZCBSQkcgMTAvMTIgYnBjIG1idXMgZm9ybWF0cyBoZXJlICov Cj4gK3N0YXRpYyBjb25zdCB1MzIgeHNkaXJ4c3NfMTBicGNfbWJ1c19mbXRzW10gPSB7Cj4gKwlN RURJQV9CVVNfRk1UX1VZVlkxMF8xWDIwLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHUzMiB4 c2Rpcnhzc18xMmJwY19tYnVzX2ZtdHNbXSA9IHsKPiArCU1FRElBX0JVU19GTVRfVVlWWTEyXzFY MjQsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZHZfdGltaW5ncyBmbXRf Y2FwW10gPSB7Cj4gKwlWNEwyX0RWX0JUX1NESV83MjBYNDg3STYwLAo+ICsJVjRMMl9EVl9CVF9D RUFfNzIwWDU3Nkk1MCwKPiArCVY0TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDI0LAo+ICsJVjRMMl9E Vl9CVF9DRUFfMTI4MFg3MjBQMjUsCj4gKwlWNEwyX0RWX0JUX0NFQV8xMjgwWDcyMFAzMCwKPiAr CVY0TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDUwLAo+ICsJVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQ NjAsCj4gKwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQMjQsCj4gKwlWNEwyX0RWX0JUX0NFQV8x OTIwWDEwODBQMzAsCj4gKwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBJNTAsCj4gKwlWNEwyX0RW X0JUX0NFQV8xOTIwWDEwODBJNjAsCj4gKwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQNTAsCj4g KwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQNjAsCj4gKwlWNEwyX0RWX0JUX0NFQV8zODQwWDIx NjBQMjQsCj4gKwlWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQMzAsCj4gKwlWNEwyX0RWX0JUX0NF QV8zODQwWDIxNjBQNTAsCj4gKwlWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQNjAsCj4gKwlWNEwy X0RWX0JUX0NFQV80MDk2WDIxNjBQMjQsCj4gKwlWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQMjUs Cj4gKwlWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQMzAsCj4gKwlWNEwyX0RWX0JUX0NFQV80MDk2 WDIxNjBQNTAsCj4gKwlWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQNjAsCj4gKwo+ICsJWExOWF9W NEwyX0RWX0JUXzIwNDhYMTA4MFAyNCwKPiArCVhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQMjUs Cj4gKwlYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDMwLAo+ICsJWExOWF9WNEwyX0RWX0JUXzIw NDhYMTA4MEk0OCwKPiArCVhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBJNTAsCj4gKwlYTE5YX1Y0 TDJfRFZfQlRfMjA0OFgxMDgwSTYwLAo+ICsJWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFA0OCwK PiArCVhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQNTAsCj4gKwlYTE5YX1Y0TDJfRFZfQlRfMjA0 OFgxMDgwUDYwLAo+ICsJWExOWF9WNEwyX0RWX0JUXzE5MjBYMTA4MFA0OCwKPiArCVhMTlhfVjRM Ml9EVl9CVF8xOTIwWDEwODBJNDgsCj4gKwlYTE5YX1Y0TDJfRFZfQlRfMzg0MFgyMTYwUDQ4LAo+ ICsJWExOWF9WNEwyX0RWX0JUXzQwOTZYMjE2MFA0OCwKPiArfTsKPiArCj4gK3N0cnVjdCB4c2Rp cnhzc19kdl9tYXAgewo+ICsJdTMyIHdpZHRoOwo+ICsJdTMyIGhlaWdodDsKPiArCXUzMiBmcHM7 Cj4gKwlzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzIGZvcm1hdDsKPiArfTsKPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgeHNkaXJ4c3NfZHZfbWFwIHhzZGlyeHNzX2R2X3RpbWluZ3NbXSA9IHsKPiAr CS8qIFNEIC0gNzIweDQ4N2k2MCAqLwo+ICsJeyA3MjAsIDI0MywgMzAsIFY0TDJfRFZfQlRfU0RJ XzcyMFg0ODdJNjAgfSwKPiArCS8qIFNEIC0gNzIweDU3Nmk1MCAqLwo+ICsJeyA3MjAsIDI4OCwg MjUsIFY0TDJfRFZfQlRfQ0VBXzcyMFg1NzZJNTAgfSwKPiArCS8qIEhEIC0gMTI4MHg3MjBwMjMu OTggKi8KPiArCS8qIEhEIC0gMTI4MHg3MjBwMjQgKi8KPiArCXsgMTI4MCwgNzIwLCAyNCwgVjRM Ml9EVl9CVF9DRUFfMTI4MFg3MjBQMjQgfSwKPiArCS8qIEhEIC0gMTI4MHg3MjBwMjUgKi8KPiAr CXsgMTI4MCwgNzIwLCAyNSwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQMjUgfSwKPiArCS8qIEhE IC0gMTI4MHg3MjBwMjkuOTcgKi8KPiArCS8qIEhEIC0gMTI4MHg3MjBwMzAgKi8KPiArCXsgMTI4 MCwgNzIwLCAzMCwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQMzAgfSwKPiArCS8qIEhEIC0gMTI4 MHg3MjBwNTAgKi8KPiArCXsgMTI4MCwgNzIwLCA1MCwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQ NTAgfSwKPiArCS8qIEhEIC0gMTI4MHg3MjBwNTkuOTQgKi8KPiArCS8qIEhEIC0gMTI4MHg3MjBw NjAgKi8KPiArCXsgMTI4MCwgNzIwLCA2MCwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQNjAgfSwK PiArCS8qIEhEIC0gMTkyMHgxMDgwcDIzLjk4ICovCj4gKwkvKiBIRCAtIDE5MjB4MTA4MHAyNCAq Lwo+ICsJeyAxOTIwLCAxMDgwLCAyNCwgVjRMMl9EVl9CVF9DRUFfMTkyMFgxMDgwUDI0IH0sCj4g KwkvKiBIRCAtIDE5MjB4MTA4MHAyNSAqLwo+ICsJeyAxOTIwLCAxMDgwLCAyNSwgVjRMMl9EVl9C VF9DRUFfMTkyMFgxMDgwUDI1IH0sCj4gKwkvKiBIRCAtIDE5MjB4MTA4MHAyOS45NyAqLwo+ICsJ LyogSEQgLSAxOTIweDEwODBwMzAgKi8KPiArCXsgMTkyMCwgMTA4MCwgMzAsIFY0TDJfRFZfQlRf Q0VBXzE5MjBYMTA4MFAzMCB9LAo+ICsKPiArCS8qIEhEIC0gMjA0OHgxMDgwcDIzLjk4ICovCj4g KwkvKiBIRCAtIDIwNDh4MTA4MHAyNCAqLwo+ICsJeyAyMDQ4LCAxMDgwLCAyNCwgWExOWF9WNEwy X0RWX0JUXzIwNDhYMTA4MFAyNCB9LAo+ICsJLyogSEQgLSAyMDQ4eDEwODBwMjUgKi8KPiArCXsg MjA0OCwgMTA4MCwgMjQsIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQMjUgfSwKPiArCS8qIEhE IC0gMjA0OHgxMDgwcDI5Ljk3ICovCj4gKwkvKiBIRCAtIDIwNDh4MTA4MHAzMCAqLwo+ICsJeyAy MDQ4LCAxMDgwLCAyNCwgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFAzMCB9LAo+ICsJLyogSEQg LSAxOTIweDEwODBpNDcuOTUgKi8KPiArCS8qIEhEIC0gMTkyMHgxMDgwaTQ4ICovCj4gKwl7IDE5 MjAsIDU0MCwgMjQsIFhMTlhfVjRMMl9EVl9CVF8xOTIwWDEwODBJNDggfSwKPiArCj4gKwkvKiBI RCAtIDE5MjB4MTA4MGk1MCAqLwo+ICsJeyAxOTIwLCA1NDAsIDI1LCBWNEwyX0RWX0JUX0NFQV8x OTIwWDEwODBJNTAgfSwKPiArCS8qIEhEIC0gMTkyMHgxMDgwaTU5Ljk0ICovCj4gKwkvKiBIRCAt IDE5MjB4MTA4MGk2MCAqLwo+ICsJeyAxOTIwLCA1NDAsIDMwLCBWNEwyX0RWX0JUX0NFQV8xOTIw WDEwODBJNjAgfSwKPiArCj4gKwkvKiBIRCAtIDIwNDh4MTA4MGk0Ny45NSAqLwo+ICsJLyogSEQg LSAyMDQ4eDEwODBpNDggKi8KPiArCXsgMjA0OCwgNTQwLCAyNCwgWExOWF9WNEwyX0RWX0JUXzIw NDhYMTA4MEk0OCB9LAo+ICsJLyogSEQgLSAyMDQ4eDEwODBpNTAgKi8KPiArCXsgMjA0OCwgNTQw LCAyNSwgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MEk1MCB9LAo+ICsJLyogSEQgLSAyMDQ4eDEw ODBpNTkuOTQgKi8KPiArCS8qIEhEIC0gMjA0OHgxMDgwaTYwICovCj4gKwl7IDIwNDgsIDU0MCwg MzAsIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBJNjAgfSwKPiArCS8qIDNHIC0gMTkyMHgxMDgw cDQ3Ljk1ICovCj4gKwkvKiAzRyAtIDE5MjB4MTA4MHA0OCAqLwo+ICsJeyAxOTIwLCAxMDgwLCA0 OCwgWExOWF9WNEwyX0RWX0JUXzE5MjBYMTA4MFA0OCB9LAo+ICsKPiArCS8qIDNHIC0gMTkyMHgx MDgwcDUwIDE0OC41ICovCj4gKwl7IDE5MjAsIDEwODAsIDUwLCBWNEwyX0RWX0JUX0NFQV8xOTIw WDEwODBQNTAgfSwKPiArCS8qIDNHIC0gMTkyMHgxMDgwcDU5Ljk0IDE0OC41LzEuMDAxICovCj4g KwkvKiAzRyAtIDE5MjB4MTA4MHA2MCAxNDguNSAqLwo+ICsJeyAxOTIwLCAxMDgwLCA2MCwgVjRM Ml9EVl9CVF9DRUFfMTkyMFgxMDgwUDYwIH0sCj4gKwo+ICsJLyogM0cgLSAyMDQ4eDEwODBwNDcu OTUgKi8KPiArCS8qIDNHIC0gMjA0OHgxMDgwcDQ4ICovCj4gKwl7IDIwNDgsIDEwODAsIDQ4LCBY TE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDQ4IH0sCj4gKwkvKiAzRyAtIDIwNDh4MTA4MHA1MCAq Lwo+ICsJeyAyMDQ4LCAxMDgwLCA1MCwgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFA1MCB9LAo+ ICsJLyogM0cgLSAyMDQ4eDEwODBwNTkuOTQgKi8KPiArCS8qIDNHIC0gMjA0OHgxMDgwcDYwICov Cj4gKwl7IDIwNDgsIDEwODAsIDYwLCBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDYwIH0sCj4g Kwo+ICsJLyogNkcgLSAzODQwWDIxNjBwMjMuOTggKi8KPiArCS8qIDZHIC0gMzg0MFgyMTYwcDI0 ICovCj4gKwl7IDM4NDAsIDIxNjAsIDI0LCBWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQMjQgfSwK PiArCS8qIDZHIC0gMzg0MFgyMTYwcDI1ICovCj4gKwl7IDM4NDAsIDIxNjAsIDI1LCBWNEwyX0RW X0JUX0NFQV8zODQwWDIxNjBQMjUgfSwKPiArCS8qIDZHIC0gMzg0MFgyMTYwcDI5Ljk3ICovCj4g KwkvKiA2RyAtIDM4NDBYMjE2MHAzMCAqLwo+ICsJeyAzODQwLCAyMTYwLCAzMCwgVjRMMl9EVl9C VF9DRUFfMzg0MFgyMTYwUDMwIH0sCj4gKwkvKiA2RyAtIDQwOTZYMjE2MHAyMy45OCAqLwo+ICsJ LyogNkcgLSA0MDk2WDIxNjBwMjQgKi8KPiArCXsgNDA5NiwgMjE2MCwgMjQsIFY0TDJfRFZfQlRf Q0VBXzQwOTZYMjE2MFAyNCB9LAo+ICsJLyogNkcgLSA0MDk2WDIxNjBwMjUgKi8KPiArCXsgNDA5 NiwgMjE2MCwgMjUsIFY0TDJfRFZfQlRfQ0VBXzQwOTZYMjE2MFAyNSB9LAo+ICsJLyogNkcgLSA0 MDk2WDIxNjBwMjkuOTcgKi8KPiArCS8qIDZHIC0gNDA5NlgyMTYwcDMwICovCj4gKwl7IDQwOTYs IDIxNjAsIDMwLCBWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQMzAgfSwKPiArCS8qIDEyRyAtIDM4 NDBYMjE2MHA0Ny45NSAqLwo+ICsJLyogMTJHIC0gMzg0MFgyMTYwcDQ4ICovCj4gKwl7IDM4NDAs IDIxNjAsIDQ4LCBYTE5YX1Y0TDJfRFZfQlRfMzg0MFgyMTYwUDQ4IH0sCj4gKwo+ICsJLyogMTJH IC0gMzg0MFgyMTYwcDUwICovCj4gKwl7IDM4NDAsIDIxNjAsIDUwLCBWNEwyX0RWX0JUX0NFQV8z ODQwWDIxNjBQNTAgfSwKPiArCS8qIDEyRyAtIDM4NDBYMjE2MHA1OS45NCAqLwo+ICsJLyogMTJH IC0gMzg0MFgyMTYwcDYwICovCj4gKwl7IDM4NDAsIDIxNjAsIDYwLCBWNEwyX0RWX0JUX0NFQV8z ODQwWDIxNjBQNjAgfSwKPiArCj4gKwkvKiAxMkcgLSA0MDk2WDIxNjBwNDcuOTUgKi8KPiArCS8q IDEyRyAtIDQwOTZYMjE2MHA0OCAqLwo+ICsJeyAzODQwLCAyMTYwLCA0OCwgWExOWF9WNEwyX0RW X0JUXzQwOTZYMjE2MFA0OCB9LAo+ICsKPiArCS8qIDEyRyAtIDQwOTZYMjE2MHA1MCAqLwo+ICsJ eyA0MDk2LCAyMTYwLCA1MCwgVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDUwIH0sCj4gKwkvKiAx MkcgLSA0MDk2WDIxNjBwNTkuOTQgKi8KPiArCS8qIDEyRyAtIDQwOTZYMjE2MHA2MCAqLwo+ICsJ eyA0MDk2LCAyMTYwLCA2MCwgVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDYwIH0sCj4gK307Cj4g Kwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqCj4gK3RvX3hzZGlyeHNz c3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYpCj4gK3sKPiArCXJldHVybiBjb250YWlu ZXJfb2Yoc3ViZGV2LCBzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUsIHN1YmRldik7Cj4gK30KPiArCj4g Ky8qCj4gKyAqIFJlZ2lzdGVyIHJlbGF0ZWQgb3BlcmF0aW9ucwo+ICsgKi8KPiArc3RhdGljIGlu bGluZSB1MzIgeHNkaXJ4c3NfcmVhZChzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqeHNkaXJ4c3MsIHUz MiBhZGRyKQo+ICt7Cj4gKwlyZXR1cm4gaW9yZWFkMzIoeHNkaXJ4c3MtPmlvbWVtICsgYWRkcik7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB4c2Rpcnhzc193cml0ZShzdHJ1Y3QgeHNk aXJ4c3NfY29yZSAqeHNkaXJ4c3MsIHUzMiBhZGRyLAo+ICsJCQkJICB1MzIgdmFsdWUpCj4gK3sK PiArCWlvd3JpdGUzMih2YWx1ZSwgeHNkaXJ4c3MtPmlvbWVtICsgYWRkcik7Cj4gK30KPiArCj4g K3N0YXRpYyBpbmxpbmUgdm9pZCB4c2Rpcnhzc19jbHIoc3RydWN0IHhzZGlyeHNzX2NvcmUgKnhz ZGlyeHNzLCB1MzIgYWRkciwKPiArCQkJCXUzMiBjbHIpCj4gK3sKPiArCXhzZGlyeHNzX3dyaXRl KHhzZGlyeHNzLCBhZGRyLCB4c2Rpcnhzc19yZWFkKHhzZGlyeHNzLCBhZGRyKSAmIH5jbHIpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4c3Nfc2V0KHN0cnVjdCB4c2Rpcnhz c19jb3JlICp4c2RpcnhzcywgdTMyIGFkZHIsCj4gKwkJCQl1MzIgc2V0KQo+ICt7Cj4gKwl4c2Rp cnhzc193cml0ZSh4c2RpcnhzcywgYWRkciwgeHNkaXJ4c3NfcmVhZCh4c2RpcnhzcywgYWRkcikg fCBzZXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4X2NvcmVfZGlzYWJs ZShzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSkKPiArewo+ICsJeHNkaXJ4c3NfY2xyKGNvcmUs IFhTRElSWF9SU1RfQ1RSTF9SRUcsIFhTRElSWF9SU1RfQ1RSTF9TU19FTl9NQVNLKTsKPiArfQo+ ICsKPiArc3RhdGljIGlubGluZSB2b2lkIHhzZGlyeF9jb3JlX2VuYWJsZShzdHJ1Y3QgeHNkaXJ4 c3NfY29yZSAqY29yZSkKPiArewo+ICsJeHNkaXJ4c3Nfc2V0KGNvcmUsIFhTRElSWF9SU1RfQ1RS TF9SRUcsIFhTRElSWF9SU1RfQ1RSTF9TU19FTl9NQVNLKTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCB4c2Rpcnhfc2V0X21vZGVkZXRlY3Qoc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUsIHUxNiBt YXNrKQo+ICt7Cj4gKwl1MzIgdmFsOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY29yZS0+ZGV2 Owo+ICsKPiArCW1hc2sgJj0gWFNESVJYX0RFVEVDVF9BTExfTU9ERVM7Cj4gKwlpZiAoIW1hc2sp IHsKPiArCQlkZXZfZXJyKGRldiwgIkludmFsaWQgYml0IG1hc2sgPSAweCUwOHhcbiIsIG1hc2sp Owo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWRldl9kYmcoZGV2LCAibWFzayA9 IDB4JXhcbiIsIG1hc2spOwo+ICsKPiArCXZhbCA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJY X01ETF9DVFJMX1JFRyk7Cj4gKwl2YWwgJj0gflhTRElSWF9NRExfQ1RSTF9NT0RFX0RFVF9FTl9N QVNLOwo+ICsJdmFsICY9IH5YU0RJUlhfTURMX0NUUkxfTU9ERV9BVVRPX0RFVF9NQVNLOwo+ICsJ dmFsICY9IH5YU0RJUlhfTURMX0NUUkxfRk9SQ0VEX01PREVfTUFTSzsKPiArCj4gKwlpZiAoaHdl aWdodDE2KG1hc2spID4gMSkgewo+ICsJCS8qIE11bHRpIG1vZGUgZGV0ZWN0aW9uIGFzIG1vcmUg dGhhbiAxIGJpdCBzZXQgaW4gbWFzayAqLwo+ICsJCWRldl9kYmcoZGV2LCAiRGV0ZWN0IG11bHRp cGxlIG1vZGVzXG4iKTsKPiArCj4gKwkJaWYgKG1hc2sgJiBCSVQoWFNESVJYX01PREVfU0RfT0ZG U0VUKSkKPiArCQkJdmFsIHw9IFhTRElSWF9NRExfQ1RSTF9NT0RFX1NEX0VOX01BU0s7Cj4gKwkJ aWYgKG1hc2sgJiBCSVQoWFNESVJYX01PREVfSERfT0ZGU0VUKSkKPiArCQkJdmFsIHw9IFhTRElS WF9NRExfQ1RSTF9NT0RFX0hEX0VOX01BU0s7Cj4gKwkJaWYgKG1hc2sgJiBCSVQoWFNESVJYX01P REVfM0dfT0ZGU0VUKSkKPiArCQkJdmFsIHw9IFhTRElSWF9NRExfQ1RSTF9NT0RFXzNHX0VOX01B U0s7Cj4gKwkJaWYgKG1hc2sgJiBCSVQoWFNESVJYX01PREVfNkdfT0ZGU0VUKSkKPiArCQkJdmFs IHw9IFhTRElSWF9NRExfQ1RSTF9NT0RFXzZHX0VOX01BU0s7Cj4gKwkJaWYgKG1hc2sgJiBCSVQo WFNESVJYX01PREVfMTJHSV9PRkZTRVQpKQo+ICsJCQl2YWwgfD0gWFNESVJYX01ETF9DVFJMX01P REVfMTJHSV9FTl9NQVNLOwo+ICsJCWlmIChtYXNrICYgQklUKFhTRElSWF9NT0RFXzEyR0ZfT0ZG U0VUKSkKPiArCQkJdmFsIHw9IFhTRElSWF9NRExfQ1RSTF9NT0RFXzEyR0ZfRU5fTUFTSzsKPiAr Cj4gKwkJdmFsIHw9IFhTRElSWF9NRExfQ1RSTF9NT0RFX0RFVF9FTl9NQVNLOwo+ICsJfSBlbHNl IHsKPiArCQkvKiBGaXhlZCBNb2RlICovCj4gKwkJdTMyIGZvcmNlZF9tb2RlX21hc2s7Cj4gKwo+ ICsJCWRldl9kYmcoZGV2LCAiRGV0ZWN0IGZpeGVkIG1vZGVcbiIpOwo+ICsKPiArCQkvKiBGaW5k IG9mZnNldCBvZiBmaXJzdCBiaXQgc2V0ICovCj4gKwkJc3dpdGNoIChfX2ZmcyhtYXNrKSkgewoK SXNuJ3QgaXQgc2luZ2xlIGJpdCBhdCB0aGlzIHBvaW50LCBzbyBfX2ZmcygpIGlzIG5vdCBuZWVk ZWQ/Cgo+ICsJCWNhc2UgWFNESVJYX01PREVfU0RfT0ZGU0VUOgo+ICsJCQlmb3JjZWRfbW9kZV9t YXNrID0gWFNESVJYX01PREVfU0RfTUFTSzsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBYU0RJUlhf TU9ERV9IRF9PRkZTRVQ6Cj4gKwkJCWZvcmNlZF9tb2RlX21hc2sgPSBYU0RJUlhfTU9ERV9IRF9N QVNLOwo+ICsJCQlicmVhazsKPiArCQljYXNlIFhTRElSWF9NT0RFXzNHX09GRlNFVDoKPiArCQkJ Zm9yY2VkX21vZGVfbWFzayA9IFhTRElSWF9NT0RFXzNHX01BU0s7Cj4gKwkJCWJyZWFrOwo+ICsJ CWNhc2UgWFNESVJYX01PREVfNkdfT0ZGU0VUOgo+ICsJCQlmb3JjZWRfbW9kZV9tYXNrID0gWFNE SVJYX01PREVfNkdfTUFTSzsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBYU0RJUlhfTU9ERV8xMkdJ X09GRlNFVDoKPiArCQkJZm9yY2VkX21vZGVfbWFzayA9IFhTRElSWF9NT0RFXzEyR0lfTUFTSzsK PiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBYU0RJUlhfTU9ERV8xMkdGX09GRlNFVDoKPiArCQkJZm9y Y2VkX21vZGVfbWFzayA9IFhTRElSWF9NT0RFXzEyR0ZfTUFTSzsKPiArCQkJYnJlYWs7Cj4gKwkJ ZGVmYXVsdDoKPiArCQkJZm9yY2VkX21vZGVfbWFzayA9IDA7CgpTaG91bGRuJ3QgdGhpcyBiZSBh biBlcnJvcj8KCj4gKwkJfQo+ICsJCWRldl9kYmcoZGV2LCAiRm9yY2VkIE1vZGUgTWFzayA6IDB4 JXhcbiIsCj4gKwkJCWZvcmNlZF9tb2RlX21hc2spOwo+ICsJCXZhbCB8PSBmb3JjZWRfbW9kZV9t YXNrIDw8IFhTRElSWF9NRExfQ1RSTF9GT1JDRURfTU9ERV9PRkZTRVQ7Cj4gKwl9Cj4gKwo+ICsJ ZGV2X2RiZyhkZXYsICJNb2RlcyB0byBiZSBkZXRlY3RlZCA6IHNkaSBjdHJsIHJlZyA9IDB4JTA4 eFxuIiwKPiArCQl2YWwpOwo+ICsJeHNkaXJ4c3Nfd3JpdGUoY29yZSwgWFNESVJYX01ETF9DVFJM X1JFRywgdmFsKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgeHNk aXJ4X2ZyYW1lcihzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSwgYm9vbCBmbGFnKQo+ICt7Cj4g KwlpZiAoZmxhZykKPiArCQl4c2Rpcnhzc19zZXQoY29yZSwgWFNESVJYX01ETF9DVFJMX1JFRywK PiArCQkJICAgICBYU0RJUlhfTURMX0NUUkxfRlJNX0VOX01BU0spOwo+ICsJZWxzZQo+ICsJCXhz ZGlyeHNzX2Nscihjb3JlLCBYU0RJUlhfTURMX0NUUkxfUkVHLAo+ICsJCQkgICAgIFhTRElSWF9N RExfQ1RSTF9GUk1fRU5fTUFTSyk7CgpJJ2QgdXNlIHt9LCBidXQgcHJvYmFibHkgdXAgdG8geW91 LgoKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgeHNkaXJ4X3NldGVkaGVycmNudHRyaWdnZXIoc3Ry dWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUsIHUzMiBlbmFibGUpCgpDYW4gdGhpcyBhbmQgc2ltaWxh ciBuYW1lcyBoYXZlIHNvbWUgJ18nPyBNYXliZSB0aGUgbmFtZSBnZXRzIHRvbyBsb25nLiBJIGtu b3cKaG93IGRpZmZpY3VsdCBuYW1pbmcgY2FuIGJlLiA6LSkKCj4gK3sKPiArCXUzMiB2YWwgPSB4 c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9FREhfRVJSQ05UX0VOX1JFRyk7Cj4gKwo+ICsJdmFs ID0gZW5hYmxlICYgWFNESVJYX0VESF9BTExFUlJfTUFTSzsKPiArCgpOaXQuIEknZCByZW1vdmUg dGhpcyBlbXB0eSBsaW5lLCBidXQgdXAgdG8geW91LgoKPiArCXhzZGlyeHNzX3dyaXRlKGNvcmUs IFhTRElSWF9FREhfRVJSQ05UX0VOX1JFRywgdmFsKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGlu ZSB2b2lkIHhzZGlyeF9zZXR2aWRsb2Nrd2luZG93KHN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3Jl LCB1MzIgdmFsKQo+ICt7Cj4gKwkvKgo+ICsJICogVGhlIHZpZGVvIGxvY2sgd2luZG93IGlzIHRo ZSBhbW91bnQgb2YgdGltZSBmb3Igd2hpY2ggdGhlCj4gKwkgKiB0aGUgbW9kZSBhbmQgdHJhbnNw b3J0IHN0cmVhbSBzaG91bGQgYmUgbG9ja2VkIHRvIGdldCB0aGUKPiArCSAqIHZpZGVvIGxvY2sg aW50ZXJydXB0Lgo+ICsJICovCj4gKwl4c2Rpcnhzc193cml0ZShjb3JlLCBYU0RJUlhfVklEX0xP Q0tfV0lORE9XX1JFRywgdmFsKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIHhzZGly eF9kaXNhYmxlaW50cihzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSwgdTMyIG1hc2spCj4gK3sK PiArCXhzZGlyeHNzX2Nscihjb3JlLCBYU0RJUlhfSUVSX1JFRywgbWFzayk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbmxpbmUgdm9pZCB4c2RpcnhfZW5hYmxlaW50cihzdHJ1Y3QgeHNkaXJ4c3NfY29y ZSAqY29yZSwgdTMyIG1hc2spCj4gK3sKPiArCXhzZGlyeHNzX3NldChjb3JlLCBYU0RJUlhfSUVS X1JFRywgbWFzayk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHhzZGlyeF9nbG9iYWxpbnRyKHN0 cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlLCBib29sIGZsYWcpCj4gK3sKPiArCWlmIChmbGFnKQo+ ICsJCXhzZGlyeHNzX3NldChjb3JlLCBYU0RJUlhfR0xCTF9JRVJfUkVHLAo+ICsJCQkgICAgIFhT RElSWF9HTEJMX0lOVFJfRU5fTUFTSyk7Cj4gKwllbHNlCj4gKwkJeHNkaXJ4c3NfY2xyKGNvcmUs IFhTRElSWF9HTEJMX0lFUl9SRUcsCj4gKwkJCSAgICAgWFNESVJYX0dMQkxfSU5UUl9FTl9NQVNL KTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIHhzZGlyeF9jbGVhcmludHIoc3RydWN0 IHhzZGlyeHNzX2NvcmUgKmNvcmUsIHUzMiBtYXNrKQo+ICt7Cj4gKwl4c2Rpcnhzc19zZXQoY29y ZSwgWFNESVJYX0lTUl9SRUcsIG1hc2spOwo+ICt9CgpOb3Qgc3VyZSBpZiB0aGVzZSBzaW5nbGUg bGluZSB3cmFwcGVycyBhcmUgbmVlZGVkLiBJbmxpbmluZyB3b3VsZCBiZSBzaW1wbGVyLgoKPiAr Cj4gK3N0YXRpYyB2b2lkIHhzZGlyeF92aWRfYnJpZGdlX2NvbnRyb2woc3RydWN0IHhzZGlyeHNz X2NvcmUgKmNvcmUsCj4gKwkJCQkgICAgICBib29sIGVuYWJsZSkKPiArewo+ICsJdTMyIG1hc2sg PSBYU0RJUlhfUlNUX0NUUkxfU0RJUlhfQlJJREdFX0VOQl9NQVNLOwo+ICsKPiArCS8qCj4gKwkg KiBUT0RPIC0gRW5hYmxlIFlVVjQ0NC9SQkcgZm9ybWF0IGluIHRoZSBicmlkZ2UgYmFzZWQKPiAr CSAqIG9uIEJZVEUzIGNvbG9yIGZvcm1hdC4KPiArCSAqIFhTRElSWF9SU1RfQ1RSTF9CUklER0Vf Q0hfRk1UX1lVVjQ0NAo+ICsJICovCj4gKwlpZiAoZW5hYmxlKQo+ICsJCXhzZGlyeHNzX3NldChj b3JlLCBYU0RJUlhfUlNUX0NUUkxfUkVHLCBtYXNrKTsKPiArCWVsc2UKPiArCQl4c2Rpcnhzc19j bHIoY29yZSwgWFNESVJYX1JTVF9DVFJMX1JFRywgbWFzayk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHhzZGlyeF9heGlzNF9icmlkZ2VfY29udHJvbChzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29y ZSwKPiArCQkJCQlib29sIGVuYWJsZSkKPiArewo+ICsJaWYgKGVuYWJsZSkKPiArCQl4c2Rpcnhz c19zZXQoY29yZSwgWFNESVJYX1JTVF9DVFJMX1JFRywKPiArCQkJICAgICBYU0RJUlhfUlNUX0NU UkxfVklESU5fQVhJNFNfTU9EX0VOQl9NQVNLKTsKPiArCWVsc2UKPiArCQl4c2Rpcnhzc19jbHIo Y29yZSwgWFNESVJYX1JTVF9DVFJMX1JFRywKPiArCQkJICAgICBYU0RJUlhfUlNUX0NUUkxfVklE SU5fQVhJNFNfTU9EX0VOQl9NQVNLKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgeHNkaXJ4X3N0 cmVhbWZsb3dfY29udHJvbChzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSwgYm9vbCBlbmFibGUp Cj4gK3sKPiArCS8qIFRoZSBzZGkgdG8gbmF0aXZlIGJyaWRnZSBpcyBmb2xsb3dlZCBieSBuYXRp dmUgdG8gYXhpczQgYnJpZGdlICovCj4gKwlpZiAoZW5hYmxlKSB7Cj4gKwkJeHNkaXJ4X2F4aXM0 X2JyaWRnZV9jb250cm9sKGNvcmUsIGVuYWJsZSk7Cj4gKwkJeHNkaXJ4X3ZpZF9icmlkZ2VfY29u dHJvbChjb3JlLCBlbmFibGUpOwo+ICsJfSBlbHNlIHsKPiArCQl4c2RpcnhfdmlkX2JyaWRnZV9j b250cm9sKGNvcmUsIGVuYWJsZSk7Cj4gKwkJeHNkaXJ4X2F4aXM0X2JyaWRnZV9jb250cm9sKGNv cmUsIGVuYWJsZSk7Cj4gKwl9Cj4gK30KCkV2ZW4gdGhlc2Ugd3JhcHBlcnMuIFRoZSBpZiBjaGVj ayBmb3IgZW5hYmxlIGNhbiBiZSByZW1vdmVkIHdoZW4gdGhlc2UgYXJlCmlubGluZWQsIGhlbmNl IGxlc3Mgb3BlcmF0aW9ucy4KCj4gKwo+ICtzdGF0aWMgdm9pZCB4c2Rpcnhzc19nZXRfZnJhbWVy YXRlKHN0cnVjdCB2NGwyX2ZyYWN0ICpmcmFtZV9pbnRlcnZhbCwKPiArCQkJCSAgIHUzMiBmcmFt ZXJhdGUpCj4gK3sKPiArCXN3aXRjaCAoZnJhbWVyYXRlKSB7Cj4gKwljYXNlIFhTRElSWF9UU19E RVRfU1RBVF9SQVRFXzIzXzk4SFo6Cj4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEw MDE7Cj4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0gMjQwMDA7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI0SFo6Cj4gKwkJZnJhbWVfaW50ZXJ2 YWwtPm51bWVyYXRvciA9IDEwMDA7Cj4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0g MjQwMDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI1SFo6 Cj4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEwMDA7Cj4gKwkJZnJhbWVfaW50ZXJ2 YWwtPmRlbm9taW5hdG9yID0gMjUwMDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFhTRElSWF9UU19E RVRfU1RBVF9SQVRFXzI5Xzk3SFo6Cj4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEw MDE7Cj4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0gMzAwMDA7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzMwSFo6Cj4gKwkJZnJhbWVfaW50ZXJ2 YWwtPm51bWVyYXRvciA9IDEwMDA7Cj4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0g MzAwMDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzQ3Xzk1 SFo6Cj4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEwMDE7Cj4gKwkJZnJhbWVfaW50 ZXJ2YWwtPmRlbm9taW5hdG9yID0gNDgwMDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFhTRElSWF9U U19ERVRfU1RBVF9SQVRFXzQ4SFo6Cj4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEw MDA7Cj4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0gNDgwMDA7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzUwSFo6Cj4gKwkJZnJhbWVfaW50ZXJ2 YWwtPm51bWVyYXRvciA9IDEwMDA7Cj4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0g NTAwMDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzU5Xzk0 SFo6Cj4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEwMDE7Cj4gKwkJZnJhbWVfaW50 ZXJ2YWwtPmRlbm9taW5hdG9yID0gNjAwMDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFhTRElSWF9U U19ERVRfU1RBVF9SQVRFXzYwSFo6Cj4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEw MDA7Cj4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0gNjAwMDA7Cj4gKwkJYnJlYWs7 Cj4gKwlkZWZhdWx0Ogo+ICsJCWZyYW1lX2ludGVydmFsLT5udW1lcmF0b3IgPSAxOwo+ICsJCWZy YW1lX2ludGVydmFsLT5kZW5vbWluYXRvciA9IDE7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHhzZGlyeHNzX3NldF9ndGNsayhzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnN0YXRlKQo+ICt7 Cj4gKwlzdHJ1Y3QgY2xrICpndGNsazsKPiArCXVuc2lnbmVkIGxvbmcgY2xrcmF0ZTsKPiArCWlu dCByZXQsIGlzX2ZyYWM7Cj4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSA9ICZzdGF0ZS0+ Y29yZTsKPiArCXUzMiBtb2RlOwo+ICsJc3RhdGljIGludCBwcmV2X2lzX2ZyYWMgPSAtMTsKClRo aXMgd291bGQgcHJldmVudCBtdWx0aXBsZSBpbnN0YW5jZXMuIENhbiBpdCBiZSBwYXJ0IG9mIHhz ZGlyeHNzX3N0YXRlPwoKQnV0IEkgd29uZGVyIHdoeSB0aGlzIHByZXZpb3VzIHNldHRpbmcgYW5k IGFsc28gYmVpbmcgZnJhY3Rpb25hbCBmcHMKcmVhbGx5IG1hdHRlci4gSW5zdGVhZCwgdGhpcyBh bHdheXMgaGFzIHRvIHNldCB0byB0aGUgcmVxdWlyZWQgcmF0ZS4KCj4gKwo+ICsJbW9kZSA9IHhz ZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX01PREVfREVUX1NUQVRfUkVHKTsKPiArCW1vZGUgJj0g WFNESVJYX01PREVfREVUX1NUQVRfUlhfTU9ERV9NQVNLOwo+ICsKPiArCS8qCj4gKwkgKiBUT0RP OiBGb3Igbm93LCBkb24ndCBjaGFuZ2UgdGhlIGNsb2NrIHJhdGUgZm9yIGFueSBtb2RlIGV4Y2Vw dCAxMkcuCj4gKwkgKiBJbiBmdXR1cmUsIGNvbmZpZ3VyZSBndCBjbG9jayBmb3IgYWxsIG1vZGVz IGFuZCBlbmFibGUgY2xvY2sgb25seQo+ICsJICogd2hlbiBuZWVkZWQgKHN0cmVhbSBvbi9vZmYp Lgo+ICsJICovCj4gKwlpZiAobW9kZSAhPSBYU0RJUlhfTU9ERV8xMkdJX01BU0sgJiYgbW9kZSAh PSBYU0RJUlhfTU9ERV8xMkdGX01BU0spCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlzX2ZyYWMgPSBz dGF0ZS0+ZnJhbWVfaW50ZXJ2YWwubnVtZXJhdG9yID09IDEwMDEgPyAxIDogMDsKClRoaXMgaXMg cmVsYXRlZCB0byBob3cgZnJhbWUgaW50ZXJ2YWxzIGFyZSBkZWZpbmVkIGluIHhzZGlyeHNzX2dl dF9mcmFtZXJhdGUoKSwKY29ycmVjdD8gTWF5YmUgc29tZSBjb21tZW50cyBvbiBib3RoIHNpZGVz IHdvdWxkIGJlIGhlbHBmdWwsIHNheWluZyBudW1lcmF0b3IKPT0gMTAwMSBpcyB0cmVhdGVkIGFz IGZyYWN0aW9uYWwgZnBzPwoKPiArCj4gKwlpZiAocHJldl9pc19mcmFjID09IGlzX2ZyYWMpCj4g KwkJcmV0dXJuOwo+ICsKPiArCXhzZGlyeF9jb3JlX2Rpc2FibGUoY29yZSk7Cj4gKwl4c2Rpcnhf Z2xvYmFsaW50cihjb3JlLCBmYWxzZSk7Cj4gKwl4c2RpcnhfZGlzYWJsZWludHIoY29yZSwgWFNE SVJYX0lOVFJfQUxMX01BU0spOwo+ICsKPiArCS8qIGdldCBzZGlfcnhfY2xrICovCj4gKwlndGNs ayA9IGNvcmUtPmNsa3NbMV0uY2xrOwo+ICsJY2xrcmF0ZSA9IGNsa19nZXRfcmF0ZShndGNsayk7 CgpUaGlzIGlzIG5vdCBuZWVkZWQuCgo+ICsJaXNfZnJhYyA9IHN0YXRlLT5mcmFtZV9pbnRlcnZh bC5udW1lcmF0b3IgPT0gMTAwMSA/IDEgOiAwOwoKTm90IG5lZWRlZC4KCj4gKwo+ICsJLyogY2Fs Y3VhbHRlIGNsa3JhdGUgKi8KPiArCWlmICghaXNfZnJhYykKPiArCQljbGtyYXRlID0gQ0xLX0lO VDsKPiArCWVsc2UKPiArCQljbGtyYXRlID0gKENMS19JTlQgKiAxMDAwKSAvIDEwMDE7Cj4gKwo+ ICsJcmV0ID0gY2xrX3NldF9yYXRlKGd0Y2xrLCBjbGtyYXRlKTsKPiArCWlmIChyZXQpCj4gKwkJ ZGV2X2Vycihjb3JlLT5kZXYsICJmYWlsZWQgdG8gc2V0IGNsayByYXRlID0gJWRcbiIsIHJldCk7 CgpJZiB0aGlzIHB1dHMgdGhlIGNvbnRyb2xsZXIgaW4gbm9uLWZ1bmN0aW9uYWwgc3RhdGUsIGJl dHRlciB0byBiZSBhbiBlcnJvciwKYW5kIHN0b3AuCgo+ICsKPiArCWNsa3JhdGUgPSBjbGtfZ2V0 X3JhdGUoZ3RjbGspOwoKU2hvdWxkbid0IHRoaXMgcmF0ZSBiZSBjaGVja2VkIGFzIHNldF9yYXRl KCkgZG9lc24ndCBndWFyYW50ZWUgdGhlIHJlcXVlc3RlZApyYXRlPwoKPiArCj4gKwlkZXZfZGJn KGNvcmUtPmRldiwgImNsa3JhdGUgPSAlbHUgaXNfZnJhYyA9ICVkXG4iLAo+ICsJCWNsa3JhdGUs IGlzX2ZyYWMpOwo+ICsKPiArCXhzZGlyeF9mcmFtZXIoY29yZSwgc3RhdGUtPmZyYW1lcl9lbmFi bGUpOwo+ICsJeHNkaXJ4X3NldGVkaGVycmNudHRyaWdnZXIoY29yZSwgc3RhdGUtPmVkaG1hc2sp Owo+ICsJeHNkaXJ4X3NldHZpZGxvY2t3aW5kb3coY29yZSwgc3RhdGUtPnZpZGxvY2t3aW4pOwo+ ICsJeHNkaXJ4X3NldF9tb2RlZGV0ZWN0KGNvcmUsIHN0YXRlLT5zZWFyY2htYXNrKTsKPiArCXhz ZGlyeF9lbmFibGVpbnRyKGNvcmUsIFhTRElSWF9JTlRSX0FMTF9NQVNLKTsKPiArCXhzZGlyeF9n bG9iYWxpbnRyKGNvcmUsIHRydWUpOwo+ICsJeHNkaXJ4X2NvcmVfZW5hYmxlKGNvcmUpOwo+ICsK PiArCXByZXZfaXNfZnJhYyA9IGlzX2ZyYWM7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4c2Rpcnhf Z2V0X3N0cmVhbV9wcm9wZXJ0aWVzIC0gR2V0IFNESSBSeCBzdHJlYW0gcHJvcGVydGllcwo+ICsg KiBAc3RhdGU6IHBvaW50ZXIgdG8gZHJpdmVyIHN0YXRlCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rp b24gZGVjb2RlcyB0aGUgc3RyZWFtJ3MgU1QzNTIgcGF5bG9hZCAoaWYgYXZhaWxhYmxlKSB0byBn ZXQKPiArICogc3RyZWFtIHByb3BlcnRpZXMgbGlrZSB3aWR0aCwgaGVpZ2h0LCBwaWN0dXJlIHR5 cGUgKGludGVybGFjZWQvcHJvZ3Jlc3NpdmUpLAo+ICsgKiBldGMuCj4gKyAqCj4gKyAqIFJldHVy bjogMCBmb3Igc3VjY2VzcyBlbHNlIGVycm9ycwo+ICsgKi8KPiArc3RhdGljIGludCB4c2Rpcnhf Z2V0X3N0cmVhbV9wcm9wZXJ0aWVzKHN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqc3RhdGUpCj4gK3sK PiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnN0YXRlLT5jb3JlOwo+ICsJc3RydWN0 IGRldmljZSAqZGV2ID0gY29yZS0+ZGV2Owo+ICsJdTMyIG1vZGUsIHBheWxvYWQgPSAwLCB2YWws IGZhbWlseSwgdmFsaWQsIHRzY2FuOwo+ICsJdTggYnl0ZTEgPSAwLCBhY3RpdmVfbHVtYSA9IDAs IHBpY190eXBlID0gMCwgZnJhbWVyYXRlID0gMDsKPiArCXU4IHNhbXBsaW5nID0gWFNUMzUyX0JZ VEUzX0NPTE9SX0ZPUk1BVF80MjI7Cj4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmb3Jt YXQgPSAmc3RhdGUtPmZvcm1hdDsKPiArCXUzMiBicGMgPSBYU1QzNTJfQllURTRfQklUX0RFUFRI XzEwOwo+ICsKPiArCW1vZGUgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9NT0RFX0RFVF9T VEFUX1JFRyk7Cj4gKwltb2RlICY9IFhTRElSWF9NT0RFX0RFVF9TVEFUX1JYX01PREVfTUFTSzsK PiArCj4gKwl2YWxpZCA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX1NUMzUyX1ZBTElEX1JF Ryk7Cj4gKwo+ICsJaWYgKG1vZGUgPj0gWFNESVJYX01PREVfM0dfTUFTSyAmJiAhdmFsaWQpIHsK PiArCQlkZXZfZXJyKGRldiwgIk5vIHZhbGlkIFNUMzUyIHBheWxvYWQgcHJlc2VudCBldmVuIGZv ciAzRyBtb2RlIGFuZCBhYm92ZVxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ ICsJdmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfVFNfREVUX1NUQVRfUkVHKTsKPiAr CWlmICh2YWxpZCAmIFhTRElSWF9TVDM1Ml9WQUxJRF9EUzFfTUFTSykgewo+ICsJCXBheWxvYWQg PSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9TVDM1Ml9EUzFfUkVHKTsKPiArCQlieXRlMSA9 IHJzaGlmdF9hbmRfbWFzayhwYXlsb2FkLCBYU1QzNTJfUEFZTE9BRF9CWVRFMSk7Cj4gKwkJYWN0 aXZlX2x1bWEgPSBtYXNrX2FuZF9yc2hpZnQocGF5bG9hZCwKPiArCQkJCQkgICAgICBYU1QzNTJf QllURTNfQUNUX0xVTUFfQ09VTlQpOwo+ICsJCXBpY190eXBlID0gbWFza19hbmRfcnNoaWZ0KHBh eWxvYWQsIFhTVDM1Ml9CWVRFMl9QSUNfVFlQRSk7Cj4gKwkJZnJhbWVyYXRlID0gcnNoaWZ0X2Fu ZF9tYXNrKHBheWxvYWQsIFhTVDM1Ml9CWVRFMl9GUFMpOwo+ICsJCXRzY2FuID0gbWFza19hbmRf cnNoaWZ0KHBheWxvYWQsIFhTVDM1Ml9CWVRFMl9UU19UWVBFKTsKPiArCQlzYW1wbGluZyA9IG1h c2tfYW5kX3JzaGlmdChwYXlsb2FkLCBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFUKTsKPiArCQli cGMgPSBtYXNrX2FuZF9yc2hpZnQocGF5bG9hZCwgWFNUMzUyX0JZVEU0X0JJVF9ERVBUSCk7Cj4g Kwl9IGVsc2Ugewo+ICsJCWRldl9kYmcoZGV2LCAiTm8gU1QzNTIgcGF5bG9hZCBhdmFpbGFibGUg OiBNb2RlID0gJWRcbiIsIG1vZGUpOwo+ICsJCWZyYW1lcmF0ZSA9IG1hc2tfYW5kX3JzaGlmdCh2 YWwsIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFKTsKPiArCQl0c2NhbiA9IG1hc2tfYW5kX3JzaGlm dCh2YWwsIFhTRElSWF9UU19ERVRfU1RBVF9TQ0FOKTsKPiArCX0KPiArCj4gKwlpZiAoKGJwYyA9 PSBYU1QzNTJfQllURTRfQklUX0RFUFRIXzEwICYmIGNvcmUtPmJwYyAhPSAxMCkgfHwKPiArCSAg ICAoYnBjID09IFhTVDM1Ml9CWVRFNF9CSVRfREVQVEhfMTIgJiYgY29yZS0+YnBjICE9IDEyKSkg ewo+ICsJCWRldl9kYmcoZGV2LCAiQml0IGRlcHRoIG5vdCBzdXBwb3J0ZWQuIGJwYyA9ICVkIGNv cmUtPmJwYyA9ICVkXG4iLAo+ICsJCQlicGMsIGNvcmUtPmJwYyk7Cj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwl9Cj4gKwo+ICsJZmFtaWx5ID0gbWFza19hbmRfcnNoaWZ0KHZhbCwgWFNESVJYX1RT X0RFVF9TVEFUX0ZBTUlMWSk7Cj4gKwlzdGF0ZS0+dHNfaXNfaW50ZXJsYWNlZCA9IHRzY2FuID8g ZmFsc2UgOiB0cnVlOwo+ICsKPiArCWRldl9kYmcoZGV2LCAidHNfaXNfaW50ZXJsYWNlZCA9ICVk LCBmYW1pbHkgPSAlZFxuIiwKPiArCQlzdGF0ZS0+dHNfaXNfaW50ZXJsYWNlZCwgZmFtaWx5KTsK PiArCj4gKwlzd2l0Y2ggKG1vZGUpIHsKPiArCWNhc2UgWFNESVJYX01PREVfSERfTUFTSzoKPiAr CQlpZiAoIXZhbGlkKSB7Cj4gKwkJCS8qIE5vIHBheWxvYWQgb2J0YWluZWQgKi8KPiArCQkJZGV2 X2RiZyhkZXYsICJmcmFtZSByYXRlIDogJWQsIHRzY2FuID0gJWRcbiIsCj4gKwkJCQlmcmFtZXJh dGUsIHRzY2FuKTsKPiArCQkJLyoKPiArCQkJICogTk9URSA6IEEgcHJvZ3Jlc3NpdmUgc2VnbWVu dGVkIGZyYW1lIHBTRiB3aWxsIGJlCj4gKwkJCSAqIHJlcG9ydGVkIGluY29ycmVjdGx5IGFzIElu dGVybGFjZWQgYXMgd2UgcmVseSBvbiBJUCdzCj4gKwkJCSAqIHRyYW5zcG9ydCBzY2FuIGxvY2tl ZCBiaXQuCj4gKwkJCSAqLwo+ICsJCQlkZXZfd2FybihkZXYsICJwU0Ygd2lsbCBiZSBpbmNvcnJl Y3RseSByZXBvcnRlZCBhcyBJbnRlcmxhY2VkXG4iKTsKPiArCj4gKwkJCXN3aXRjaCAoZnJhbWVy YXRlKSB7Cj4gKwkJCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfMjNfOThIWjoKPiArCQkJ Y2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8yNEhaOgo+ICsJCQljYXNlIFhTRElSWF9UU19E RVRfU1RBVF9SQVRFXzI1SFo6Cj4gKwkJCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfMjlf OTdIWjoKPiArCQkJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8zMEhaOgo+ICsJCQkJaWYg KGZhbWlseSA9PSBYU0RJUlhfU01QVEVfU1RfMjk2KSB7CgpUaGlzIHNlZW1zIGxpa2UgYSBsaXR0 bGUgdG9vIG11Y2ggbmVzdGVkIHN3aXRjaCAtIGNhc2UgYW5kIGlmIHN0YXRlbWVudHMgaW4Kc2lu Z2xlIGZ1bmN0aW9uLiBEbyB5b3UgdGhpbmsgdGhpcyBjYW4gYmUgY2xlYW5lZCB1cCB1c2luZyBz b21lIHRhYmxlLApleCB1c2luZyBYU0RJUlhfTU9ERV8qLCBYU0RJUlhfVFNfREVUX1NUQVRfUkFU RV8qLCBhZGp1c3RlZCBYU1QzNTJfQllURTFfKiwsLAphcyBpbmRleGVzIHRvIGl0PyBPciB3aXRo IHNlcGFyYXRlIGZ1bmN0aW9ucyBPciBpcyBpdCBvdmVya2lsbD8gSSBsZXQgeW91CmRlY2lkZSB0 aG91Z2guCgo+ICsJCQkJCWZvcm1hdC0+d2lkdGggPSAxMjgwOwo+ICsJCQkJCWZvcm1hdC0+aGVp Z2h0ID0gNzIwOwo+ICsJCQkJCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Cj4gKwkJ CQl9IGVsc2UgaWYgKGZhbWlseSA9PSBYU0RJUlhfU01QVEVfU1RfMjA0OF8yKSB7Cj4gKwkJCQkJ Zm9ybWF0LT53aWR0aCA9IDIwNDg7Cj4gKwkJCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOwo+ICsJ CQkJCWlmICh0c2NhbikKPiArCQkJCQkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsK PiArCQkJCQllbHNlCj4gKwkJCQkJCWZvcm1hdC0+ZmllbGQgPQo+ICsJCQkJCQkJVjRMMl9GSUVM RF9BTFRFUk5BVEU7Cj4gKwkJCQl9IGVsc2Ugewo+ICsJCQkJCWZvcm1hdC0+d2lkdGggPSAxOTIw Owo+ICsJCQkJCWZvcm1hdC0+aGVpZ2h0ID0gMTA4MDsKPiArCQkJCQlpZiAodHNjYW4pCj4gKwkJ CQkJCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Cj4gKwkJCQkJZWxzZQo+ICsJCQkJ CQlmb3JtYXQtPmZpZWxkID0KPiArCQkJCQkJCVY0TDJfRklFTERfQUxURVJOQVRFOwo+ICsJCQkJ fQo+ICsJCQkJYnJlYWs7Cj4gKwkJCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfNTBIWjoK PiArCQkJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV81OV85NEhaOgo+ICsJCQljYXNlIFhT RElSWF9UU19ERVRfU1RBVF9SQVRFXzYwSFo6Cj4gKwkJCQlpZiAoZmFtaWx5ID09IFhTRElSWF9T TVBURV9TVF8yNzQpIHsKPiArCQkJCQlmb3JtYXQtPndpZHRoID0gMTkyMDsKPiArCQkJCQlmb3Jt YXQtPmhlaWdodCA9IDEwODA7Cj4gKwkJCQl9IGVsc2Ugewo+ICsJCQkJCWZvcm1hdC0+d2lkdGgg PSAxMjgwOwo+ICsJCQkJCWZvcm1hdC0+aGVpZ2h0ID0gNzIwOwo+ICsJCQkJfQo+ICsJCQkJZm9y bWF0LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKPiArCQkJCWJyZWFrOwo+ICsJCQlkZWZhdWx0 Ogo+ICsJCQkJZm9ybWF0LT53aWR0aCA9IDE5MjA7Cj4gKwkJCQlmb3JtYXQtPmhlaWdodCA9IDEw ODA7Cj4gKwkJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwo+ICsJCQl9Cj4gKwkJ fSBlbHNlIHsKPiArCQkJZGV2X2RiZyhkZXYsICJHb3QgdGhlIHBheWxvYWRcbiIpOwo+ICsJCQlz d2l0Y2ggKGJ5dGUxKSB7Cj4gKwkJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMjkyXzF4NzIwTF8xXzVH Ogo+ICsJCQkJLyogU01QVEUgU1QgMjkyLTEgZm9yIDcyMCBsaW5lIHBheWxvYWRzICovCj4gKwkJ CQlmb3JtYXQtPndpZHRoID0gMTI4MDsKPiArCQkJCWZvcm1hdC0+aGVpZ2h0ID0gNzIwOwo+ICsJ CQkJYnJlYWs7Cj4gKwkJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMjkyXzF4MTA4MExfMV81RzoKPiAr CQkJCS8qIFNNUFRFIFNUIDI5Mi0xIGZvciAxMDgwIGxpbmUgcGF5bG9hZHMgKi8KPiArCQkJCWZv cm1hdC0+aGVpZ2h0ID0gMTA4MDsKPiArCQkJCWlmIChhY3RpdmVfbHVtYSkKPiArCQkJCQlmb3Jt YXQtPndpZHRoID0gMjA0ODsKPiArCQkJCWVsc2UKPiArCQkJCQlmb3JtYXQtPndpZHRoID0gMTky MDsKPiArCQkJCWJyZWFrOwo+ICsJCQlkZWZhdWx0Ogo+ICsJCQkJZGV2X2RiZyhkZXYsICJVbmtu b3duIEhEIE1vZGUgU01QVEUgc3RhbmRhcmRcbiIpOwo+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4g KwkJCX0KPiArCQl9Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFhTRElSWF9NT0RFX1NEX01BU0s6Cj4g KwkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfQUxURVJOQVRFOwo+ICsKPiArCQlzd2l0Y2gg KGZhbWlseSkgewo+ICsJCWNhc2UgWFNESVJYX05UU0M6Cj4gKwkJCWZvcm1hdC0+d2lkdGggPSA3 MjA7Cj4gKwkJCWZvcm1hdC0+aGVpZ2h0ID0gNDg2Owo+ICsJCQlicmVhazsKPiArCQljYXNlIFhT RElSWF9QQUw6Cj4gKwkJCWZvcm1hdC0+d2lkdGggPSA3MjA7Cj4gKwkJCWZvcm1hdC0+aGVpZ2h0 ID0gNTc2Owo+ICsJCQlicmVhazsKPiArCQlkZWZhdWx0Ogo+ICsJCQlkZXZfZGJnKGRldiwgIlVu a25vd24gU0QgTW9kZSBTTVBURSBzdGFuZGFyZFxuIik7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ ICsJCX0KPiArCQlicmVhazsKPiArCWNhc2UgWFNESVJYX01PREVfM0dfTUFTSzoKPiArCQlzd2l0 Y2ggKGJ5dGUxKSB7Cj4gKwkJY2FzZSBYU1QzNTJfQllURTFfU1Q0MjVfMjAwOF83NTBMXzNHQjoK PiArCQkJLyogU2VjIDQuMS42LjEgU01QVEUgNDI1LTIwMDggKi8KPiArCQljYXNlIFhTVDM1Ml9C WVRFMV9TVDM3Ml8yeDcyMExfM0dCOgo+ICsJCQkvKiBUYWJsZSAxMyBTTVBURSA0MjUtMjAwOCAq Lwo+ICsJCQlmb3JtYXQtPndpZHRoID0gMTI4MDsKPiArCQkJZm9ybWF0LT5oZWlnaHQgPSA3MjA7 Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgWFNUMzUyX0JZVEUxX1NUNDI1XzIwMDhfMTEyNUxfM0dB Ogo+ICsJCQkvKiBTVDM1MiBUYWJsZSBTTVBURSA0MjUtMSAqLwo+ICsJCWNhc2UgWFNUMzUyX0JZ VEUxX1NUMzcyX0RMXzNHQjoKPiArCQkJLyogVGFibGUgMTMgU01QVEUgNDI1LTIwMDggKi8KPiAr CQljYXNlIFhTVDM1Ml9CWVRFMV9TVDM3Ml8yeDEwODBMXzNHQjoKPiArCQkJLyogVGFibGUgMTMg U01QVEUgNDI1LTIwMDggKi8KPiArCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOwo+ICsJCQlpZiAo YWN0aXZlX2x1bWEpCj4gKwkJCQlmb3JtYXQtPndpZHRoID0gMjA0ODsKPiArCQkJZWxzZQo+ICsJ CQkJZm9ybWF0LT53aWR0aCA9IDE5MjA7Cj4gKwkJCWJyZWFrOwo+ICsJCWRlZmF1bHQ6Cj4gKwkJ CWRldl9kYmcoZGV2LCAiVW5rbm93biAzRyBNb2RlIFNNUFRFIHN0YW5kYXJkXG4iKTsKPiArCQkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsJCWJyZWFrOwo+ICsJY2FzZSBYU0RJUlhfTU9ERV82 R19NQVNLOgo+ICsJCXN3aXRjaCAoYnl0ZTEpIHsKPiArCQljYXNlIFhTVDM1Ml9CWVRFMV9TVDIw ODFfMTBfRExfMjE2MExfNkc6Cj4gKwkJCS8qIER1YWwgbGluayA2RyAqLwo+ICsJCWNhc2UgWFNU MzUyX0JZVEUxX1NUMjA4MV8xMF8yMTYwTF82RzoKPiArCQkJLyogVGFibGUgMyBTTVBURSBTVCAy MDgxLTEwICovCj4gKwkJCWZvcm1hdC0+aGVpZ2h0ID0gMjE2MDsKPiArCQkJaWYgKGFjdGl2ZV9s dW1hKQo+ICsJCQkJZm9ybWF0LT53aWR0aCA9IDQwOTY7Cj4gKwkJCWVsc2UKPiArCQkJCWZvcm1h dC0+d2lkdGggPSAzODQwOwo+ICsJCQlicmVhazsKPiArCQljYXNlIFhTVDM1Ml9CWVRFMV9TVDIw ODFfMTBfMl8xMDgwTF82RzoKPiArCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOwo+ICsJCQlpZiAo YWN0aXZlX2x1bWEpCj4gKwkJCQlmb3JtYXQtPndpZHRoID0gMjA0ODsKPiArCQkJZWxzZQo+ICsJ CQkJZm9ybWF0LT53aWR0aCA9IDE5MjA7Cj4gKwkJCWJyZWFrOwo+ICsJCWRlZmF1bHQ6Cj4gKwkJ CWRldl9kYmcoZGV2LCAiVW5rbm93biA2RyBNb2RlIFNNUFRFIHN0YW5kYXJkXG4iKTsKPiArCQkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsJCWJyZWFrOwo+ICsJY2FzZSBYU0RJUlhfTU9ERV8x MkdJX01BU0s6Cj4gKwljYXNlIFhTRElSWF9NT0RFXzEyR0ZfTUFTSzoKPiArCQlzd2l0Y2ggKGJ5 dGUxKSB7Cj4gKwkJY2FzZSBYU1QzNTJfQllURTFfU1QyMDgyXzEwXzIxNjBMXzEyRzoKPiArCQkJ LyogU2VjdGlvbiA0LjMuMSBTTVBURSBTVCAyMDgyLTEwICovCj4gKwkJCWZvcm1hdC0+aGVpZ2h0 ID0gMjE2MDsKPiArCQkJaWYgKGFjdGl2ZV9sdW1hKQo+ICsJCQkJZm9ybWF0LT53aWR0aCA9IDQw OTY7Cj4gKwkJCWVsc2UKPiArCQkJCWZvcm1hdC0+d2lkdGggPSAzODQwOwo+ICsJCQlicmVhazsK PiArCQlkZWZhdWx0Ogo+ICsJCQlkZXZfZGJnKGRldiwgIlVua25vd24gMTJHIE1vZGUgU01QVEUg c3RhbmRhcmRcbiIpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwkJYnJlYWs7Cj4g KwlkZWZhdWx0Ogo+ICsJCWRldl9lcnIoZGV2LCAiSW52YWxpZCBNb2RlXG4iKTsKPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlpZiAodmFsaWQpIHsKPiArCQlpZiAocGljX3R5cGUp Cj4gKwkJCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Cj4gKwkJZWxzZQo+ICsJCQlm b3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9BTFRFUk5BVEU7Cj4gKwo+ICsJCWlmIChmb3JtYXQt PmhlaWdodCA9PSAxMDgwICYmIHBpY190eXBlICYmICF0c2NhbikKPiArCQkJZm9ybWF0LT5maWVs ZCA9IFY0TDJfRklFTERfQUxURVJOQVRFOwo+ICsKPiArCQkvKgo+ICsJCSAqIEluIDNHQiBETCBw U0YgbW9kZSB0aGUgdmlkZW8gaXMgc2ltaWxhciB0byBpbnRlcmxhY2VkLgo+ICsJCSAqIFNvIHRo b3VnaCBpdCBpcyBhIHByb2dyZXNzaXZlIHZpZGVvLCBpdHMgdHJhbnNwb3J0IGlzCj4gKwkJICog aW50ZXJsYWNlZCBhbmQgaXMgc2VudCBhcyB0d28gd2lkdGggeCAoaGVpZ2h0LzIpIGJ1ZmZlcnMu Cj4gKwkJICovCj4gKwkJaWYgKGJ5dGUxID09IFhTVDM1Ml9CWVRFMV9TVDM3Ml9ETF8zR0IpIHsK PiArCQkJaWYgKHN0YXRlLT50c19pc19pbnRlcmxhY2VkKQo+ICsJCQkJZm9ybWF0LT5maWVsZCA9 IFY0TDJfRklFTERfQUxURVJOQVRFOwo+ICsJCQllbHNlCj4gKwkJCQlmb3JtYXQtPmZpZWxkID0g VjRMMl9GSUVMRF9OT05FOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoZm9ybWF0LT5maWVsZCA9 PSBWNEwyX0ZJRUxEX0FMVEVSTkFURSkKPiArCQlmb3JtYXQtPmhlaWdodCA9IGZvcm1hdC0+aGVp Z2h0IC8gMjsKPiArCj4gKwlzd2l0Y2ggKHNhbXBsaW5nKSB7Cj4gKwljYXNlIFhTVDM1Ml9CWVRF M19DT0xPUl9GT1JNQVRfNDIyOgo+ICsJCWlmIChjb3JlLT5icGMgPT0gMTApCj4gKwkJCWZvcm1h dC0+Y29kZSA9IE1FRElBX0JVU19GTVRfVVlWWTEwXzFYMjA7Cj4gKwkJZWxzZQo+ICsJCQlmb3Jt YXQtPmNvZGUgPSBNRURJQV9CVVNfRk1UX1VZVlkxMl8xWDI0Owo+ICsJCWJyZWFrOwo+ICsJY2Fz ZSBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFUXzQyMDoKPiArCWNhc2UgWFNUMzUyX0JZVEUzX0NP TE9SX0ZPUk1BVF9ZVVY0NDQ6Cj4gKwljYXNlIFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfR0JS Ogo+ICsJCWZvcm1hdC0+Y29kZSA9IDA7Cj4gKwkJZGV2X2RiZyhkZXYsICJObyBjb3JyZXNwb25k aW5nIG1lZGlhIGJ1cyBmb3JtYXRzXG4iKTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJ ZGV2X2VycihkZXYsICJVbnN1cHBvcnRlZCBjb2xvciBmb3JtYXQgOiAlZFxuIiwgc2FtcGxpbmcp Owo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXhzZGlyeHNzX2dldF9mcmFtZXJh dGUoJnN0YXRlLT5mcmFtZV9pbnRlcnZhbCwgZnJhbWVyYXRlKTsKPiArCj4gKwlkZXZfZGJnKGRl diwgIlN0cmVhbSB3aWR0aCA9ICVkIGhlaWdodCA9ICVkIEZpZWxkID0gJWQgcGF5bG9hZCA9IDB4 JTA4eCB0cyA9IDB4JTA4eFxuIiwKPiArCQlmb3JtYXQtPndpZHRoLCBmb3JtYXQtPmhlaWdodCwg Zm9ybWF0LT5maWVsZCwgcGF5bG9hZCwgdmFsKTsKPiArCWRldl9kYmcoZGV2LCAiZnJhbWUgcmF0 ZSBudW1lcmF0b3IgPSAlZCBkZW5vbWluYXRvciA9ICVkXG4iLAo+ICsJCXN0YXRlLT5mcmFtZV9p bnRlcnZhbC5udW1lcmF0b3IsCj4gKwkJc3RhdGUtPmZyYW1lX2ludGVydmFsLmRlbm9taW5hdG9y KTsKPiArCWRldl9kYmcoZGV2LCAiU3RyZWFtIGNvZGUgPSAweCV4XG4iLCBmb3JtYXQtPmNvZGUp Owo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4c2Rpcnhzc19pcnFfaGFuZGxl ciAtIEludGVycnVwdCBoYW5kbGVyIGZvciBTREkgUngKPiArICogQGlycTogSVJRIG51bWJlcgo+ ICsgKiBAZGV2X2lkOiBQb2ludGVyIHRvIGRldmljZSBzdGF0ZQo+ICsgKgo+ICsgKiBUaGUgU0RJ IFJ4IGludGVycnVwdHMgYXJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGNvcnJlc3BvbmRpbmcg Yml0Lgo+ICsgKgo+ICsgKiBSZXR1cm46IElSUV9IQU5ETEVEIGFmdGVyIGhhbmRsaW5nIGludGVy cnVwdHMKPiArICovCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCB4c2Rpcnhzc19pcnFfaGFuZGxlcihp bnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gK3sKPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqc3Rh dGUgPSAoc3RydWN0IHhzZGlyeHNzX3N0YXRlICopZGV2X2lkOwo+ICsJc3RydWN0IHhzZGlyeHNz X2NvcmUgKmNvcmUgPSAmc3RhdGUtPmNvcmU7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb3Jl LT5kZXY7Cj4gKwl1MzIgc3RhdHVzOwo+ICsKPiArCXN0YXR1cyA9IHhzZGlyeHNzX3JlYWQoY29y ZSwgWFNESVJYX0lTUl9SRUcpOwo+ICsJeHNkaXJ4c3Nfd3JpdGUoY29yZSwgWFNESVJYX0lTUl9S RUcsIHN0YXR1cyk7Cj4gKwlkZXZfZGJnKGRldiwgImludGVycnVwdCBzdGF0dXMgPSAweCUwOHhc biIsIHN0YXR1cyk7CgptYXliZSwKCWlmICghc3RhdHVzKQoJCXJldHVybiBJUlFfTk9ORTsKCj4g Kwo+ICsJaWYgKHN0YXR1cyAmIFhTRElSWF9JTlRSX1ZJRExPQ0tfTUFTSyB8fAo+ICsJICAgIHN0 YXR1cyAmIFhTRElSWF9JTlRSX1ZJRFVOTE9DS19NQVNLKSB7Cj4gKwkJdTMyIHZhbDEsIHZhbDI7 Cj4gKwo+ICsJCWRldl9kYmcoZGV2LCAidmlkZW8gbG9jay91bmxvY2sgaW50ZXJydXB0XG4iKTsK PiArCj4gKwkJeHNkaXJ4X3N0cmVhbWZsb3dfY29udHJvbChjb3JlLCBmYWxzZSk7Cj4gKwkJc3Rh dGUtPnN0cmVhbWluZyA9IGZhbHNlOwo+ICsKPiArCQl2YWwxID0geHNkaXJ4c3NfcmVhZChjb3Jl LCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOwo+ICsJCXZhbDIgPSB4c2Rpcnhzc19yZWFkKGNv cmUsIFhTRElSWF9UU19ERVRfU1RBVF9SRUcpOwo+ICsKPiArCQlpZiAoKHZhbDEgJiBYU0RJUlhf TU9ERV9ERVRfU1RBVF9NT0RFX0xPQ0tfTUFTSykgJiYKPiArCQkgICAgKHZhbDIgJiBYU0RJUlhf VFNfREVUX1NUQVRfTE9DS0VEX01BU0spKSB7Cj4gKwkJCXUzMiBtYXNrID0gWFNESVJYX1JTVF9D VFJMX1JTVF9DUkNfRVJSQ05UX01BU0sgfAo+ICsJCQkJICAgWFNESVJYX1JTVF9DVFJMX1JTVF9F REhfRVJSQ05UX01BU0s7Cj4gKwo+ICsJCQlkZXZfZGJnKGRldiwgInZpZGVvIGxvY2sgaW50ZXJy dXB0XG4iKTsKPiArCj4gKwkJCXhzZGlyeHNzX3NldChjb3JlLCBYU0RJUlhfUlNUX0NUUkxfUkVH LCBtYXNrKTsKPiArCQkJeHNkaXJ4c3NfY2xyKGNvcmUsIFhTRElSWF9SU1RfQ1RSTF9SRUcsIG1h c2spOwo+ICsKPiArCQkJdmFsMSA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX1NUMzUyX1ZB TElEX1JFRyk7Cj4gKwkJCXZhbDIgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9TVDM1Ml9E UzFfUkVHKTsKPiArCj4gKwkJCWRldl9kYmcoZGV2LCAidmFsaWQgc3QzNTIgbWFzayA9IDB4JTA4 eFxuIiwgdmFsMSk7Cj4gKwkJCWRldl9kYmcoZGV2LCAic3QzNTIgcGF5bG9hZCA9IDB4JTA4eFxu IiwgdmFsMik7Cj4gKwo+ICsJCQlpZiAoIXhzZGlyeF9nZXRfc3RyZWFtX3Byb3BlcnRpZXMoc3Rh dGUpKSB7Cj4gKwkJCQlzdGF0ZS0+dmlkbG9ja2VkID0gdHJ1ZTsKPiArCQkJCXhzZGlyeHNzX3Nl dF9ndGNsayhzdGF0ZSk7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlkZXZfZXJyKGRldiwgIlVuYWJs ZSB0byBnZXQgc3RyZWFtIHByb3BlcnRpZXMhXG4iKTsKPiArCQkJCXN0YXRlLT52aWRsb2NrZWQg PSBmYWxzZTsKPiArCQkJfQo+ICsJCX0gZWxzZSB7Cj4gKwkJCWRldl9kYmcoZGV2LCAidmlkZW8g dW5sb2NrIGludGVycnVwdFxuIik7Cj4gKwkJCXN0YXRlLT52aWRsb2NrZWQgPSBmYWxzZTsKPiAr CQl9Cj4gKwo+ICsJCW1lbXNldCgmc3RhdGUtPmV2ZW50LCAwLCBzaXplb2Yoc3RhdGUtPmV2ZW50 KSk7Cj4gKwkJc3RhdGUtPmV2ZW50LnR5cGUgPSBWNEwyX0VWRU5UX1NPVVJDRV9DSEFOR0U7Cj4g KwkJc3RhdGUtPmV2ZW50LnUuc3JjX2NoYW5nZS5jaGFuZ2VzID0KPiArCQkJVjRMMl9FVkVOVF9T UkNfQ0hfUkVTT0xVVElPTjsKPiArCQl2NGwyX3N1YmRldl9ub3RpZnlfZXZlbnQoJnN0YXRlLT5z dWJkZXYsICZzdGF0ZS0+ZXZlbnQpOwo+ICsJfQo+ICsKPiArCWlmIChzdGF0dXMgJiBYU0RJUlhf SU5UUl9VTkRFUkZMT1dfTUFTSykgewo+ICsJCWRldl9kYmcoZGV2LCAiVmlkZW8gaW4gdG8gQVhJ NCBTdHJlYW0gY29yZSB1bmRlcmZsb3cgaW50ZXJydXB0XG4iKTsKPiArCj4gKwkJbWVtc2V0KCZz dGF0ZS0+ZXZlbnQsIDAsIHNpemVvZihzdGF0ZS0+ZXZlbnQpKTsKPiArCQlzdGF0ZS0+ZXZlbnQu dHlwZSA9IFY0TDJfRVZFTlRfWElMSU5YX1NESVJYX1VOREVSRkxPVzsKPiArCQl2NGwyX3N1YmRl dl9ub3RpZnlfZXZlbnQoJnN0YXRlLT5zdWJkZXYsICZzdGF0ZS0+ZXZlbnQpOwo+ICsJfQo+ICsK PiArCWlmIChzdGF0dXMgJiBYU0RJUlhfSU5UUl9PVkVSRkxPV19NQVNLKSB7Cj4gKwkJZGV2X2Ri ZyhkZXYsICJWaWRlbyBpbiB0byBBWEk0IFN0cmVhbSBjb3JlIG92ZXJmbG93IGludGVycnVwdFxu Iik7Cj4gKwo+ICsJCW1lbXNldCgmc3RhdGUtPmV2ZW50LCAwLCBzaXplb2Yoc3RhdGUtPmV2ZW50 KSk7Cj4gKwkJc3RhdGUtPmV2ZW50LnR5cGUgPSBWNEwyX0VWRU5UX1hJTElOWF9TRElSWF9PVkVS RkxPVzsKPiArCQl2NGwyX3N1YmRldl9ub3RpZnlfZXZlbnQoJnN0YXRlLT5zdWJkZXYsICZzdGF0 ZS0+ZXZlbnQpOwo+ICsJfQo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ICsvKioK PiArICogeHNkaXJ4c3Nfc3Vic2NyaWJlX2V2ZW50IC0gU3Vic2NyaWJlIHRvIHZpZGVvIGxvY2sg YW5kIHVubG9jayBldmVudAo+ICsgKiBAc2Q6IFY0TDIgU3ViIGRldmljZQo+ICsgKiBAZmg6IFY0 TDIgRmlsZSBIYW5kbGUKPiArICogQHN1YjogU3ViY3JpYmUgZXZlbnQgc3RydWN0dXJlCj4gKyAq Cj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvcnMgb3RoZXJ3aXNlCj4gKyAqLwo+ICtz dGF0aWMgaW50IHhzZGlyeHNzX3N1YnNjcmliZV9ldmVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNk LAo+ICsJCQkJICAgIHN0cnVjdCB2NGwyX2ZoICpmaCwKPiArCQkJCSAgICBzdHJ1Y3QgdjRsMl9l dmVudF9zdWJzY3JpcHRpb24gKnN1YikKPiArewo+ICsJaW50IHJldDsKPiArCXN0cnVjdCB4c2Rp cnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194c2Rpcnhzc3N0YXRlKHNkKTsKPiArCXN0cnVjdCB4 c2Rpcnhzc19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5jb3JlOwo+ICsKPiArCXN3aXRjaCAoc3Vi LT50eXBlKSB7Cj4gKwljYXNlIFY0TDJfRVZFTlRfWElMSU5YX1NESVJYX1VOREVSRkxPVzoKPiAr CWNhc2UgVjRMMl9FVkVOVF9YSUxJTlhfU0RJUlhfT1ZFUkZMT1c6Cj4gKwkJcmV0ID0gdjRsMl9l dmVudF9zdWJzY3JpYmUoZmgsIHN1YiwgWFNESVJYX01BWF9FVkVOVFMsIE5VTEwpOwo+ICsJCWJy ZWFrOwo+ICsJY2FzZSBWNEwyX0VWRU5UX1NPVVJDRV9DSEFOR0U6Cj4gKwkJcmV0ID0gdjRsMl9z cmNfY2hhbmdlX2V2ZW50X3N1YnNjcmliZShmaCwgc3ViKTsKPiArCQlicmVhazsKPiArCWRlZmF1 bHQ6Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwlkZXZfZGJnKGNvcmUtPmRldiwgIkV2 ZW50IHN1YnNjcmliZWQgOiAweCUwOHhcbiIsIHN1Yi0+dHlwZSk7CgpIYXZpbmcgdGhpcyBpbiB0 aGUgYmVnaW5uaW5nIG1heSBoZWxwIGNhdGNoIGludmFsaWQgc3ViY3JpcHRpb24gdHlwZSB0b28/ Cgo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHhzZGlyeHNzX3Vuc3Vic2Ny aWJlX2V2ZW50IC0gVW5zdWJzY3JpYmUgZnJvbSBhbGwgZXZlbnRzIHJlZ2lzdGVyZWQKPiArICog QHNkOiBWNEwyIFN1YiBkZXZpY2UKPiArICogQGZoOiBWNEwyIGZpbGUgaGFuZGxlCj4gKyAqIEBz dWI6IHBvaW50ZXIgdG8gRXZlbnQgdW5zdWJzY3JpcHRpb24gc3RydWN0dXJlCj4gKyAqCj4gKyAq IFJldHVybjogemVybyBvbiBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KPiAr ICovCj4gK3N0YXRpYyBpbnQgeHNkaXJ4c3NfdW5zdWJzY3JpYmVfZXZlbnQoc3RydWN0IHY0bDJf c3ViZGV2ICpzZCwKPiArCQkJCSAgICAgIHN0cnVjdCB2NGwyX2ZoICpmaCwKPiArCQkJCSAgICAg IHN0cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbiAqc3ViKQo+ICt7Cj4gKwlzdHJ1Y3QgeHNk aXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0gdG9feHNkaXJ4c3NzdGF0ZShzZCk7Cj4gKwlzdHJ1Y3Qg eHNkaXJ4c3NfY29yZSAqY29yZSA9ICZ4c2Rpcnhzcy0+Y29yZTsKPiArCj4gKwlkZXZfZGJnKGNv cmUtPmRldiwgIkV2ZW50IHVuc3Vic2NyaWJlIDogMHglMDh4XG4iLCBzdWItPnR5cGUpOwo+ICsJ cmV0dXJuIHY0bDJfZXZlbnRfdW5zdWJzY3JpYmUoZmgsIHN1Yik7Cj4gK30KPiArCj4gKy8qKgo+ ICsgKiB4c2Rpcnhzc19zX2N0cmwgLSBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZSBYaWxpbnggU0RJ IFJ4IFY0TDIgY29udHJvbHMKPiArICogQGN0cmw6IFY0TDIgY29udHJvbCB0byBiZSBzZXQKPiAr ICoKPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgVjRMMiBjb250cm9scyBm b3IgdGhlIFhpbGlueCBTREkgUngKPiArICogU3Vic3lzdGVtLgo+ICsgKgo+ICsgKiBSZXR1cm46 IDAgb24gc3VjY2VzcywgZXJyb3JzIG90aGVyd2lzZQo+ICsgKi8KPiArc3RhdGljIGludCB4c2Rp cnhzc19zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKPiArewo+ICsJaW50IHJldCA9IDA7 Cj4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0KPiArCQljb250YWluZXJfb2Yo Y3RybC0+aGFuZGxlciwgc3RydWN0IHhzZGlyeHNzX3N0YXRlLAo+ICsJCQkgICAgIGN0cmxfaGFu ZGxlcik7Cj4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSA9ICZ4c2Rpcnhzcy0+Y29yZTsK PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvcmUtPmRldjsKPiArCj4gKwlkZXZfZGJnKGRldiwg InNldCBjdHJsIGlkID0gMHglMDh4IHZhbCA9IDB4JTA4eFxuIiwKPiArCQljdHJsLT5pZCwgY3Ry bC0+dmFsKTsKPiArCj4gKwlpZiAoeHNkaXJ4c3MtPnN0cmVhbWluZykgewo+ICsJCWRldl9lcnIo ZGV2LCAiQ2Fubm90IHNldCBjb250cm9scyB3aGlsZSBzdHJlYW1pbmdcbiIpOwo+ICsJCXJldHVy biAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXhzZGlyeF9jb3JlX2Rpc2FibGUoY29yZSk7Cj4gKwlz d2l0Y2ggKGN0cmwtPmlkKSB7Cj4gKwljYXNlIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9GUkFNRVI6 Cj4gKwkJeHNkaXJ4X2ZyYW1lcihjb3JlLCBjdHJsLT52YWwpOwo+ICsJCXhzZGlyeHNzLT5mcmFt ZXJfZW5hYmxlID0gY3RybC0+dmFsOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBWNEwyX0NJRF9YSUxJ TlhfU0RJUlhfVklETE9DS19XSU5ET1c6Cj4gKwkJeHNkaXJ4X3NldHZpZGxvY2t3aW5kb3coY29y ZSwgY3RybC0+dmFsKTsKPiArCQl4c2Rpcnhzcy0+dmlkbG9ja3dpbiA9IGN0cmwtPnZhbDsKPiAr CQlicmVhazsKPiArCWNhc2UgVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9FUlJDTlRfRU5BQkxF Ogo+ICsJCXhzZGlyeF9zZXRlZGhlcnJjbnR0cmlnZ2VyKGNvcmUsIGN0cmwtPnZhbCk7Cj4gKwkJ eHNkaXJ4c3MtPmVkaG1hc2sgPSBjdHJsLT52YWw7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFY0TDJf Q0lEX1hJTElOWF9TRElSWF9TRUFSQ0hfTU9ERVM6Cj4gKwkJaWYgKGN0cmwtPnZhbCkgewo+ICsJ CQlpZiAoY29yZS0+bW9kZSA9PSBYU0RJUlhTU19TRElfU1REXzNHKSB7Cj4gKwkJCQlkZXZfZGJn KGRldiwgIlVwdG8gM0cgc3VwcG9ydGVkXG4iKTsKPiArCQkJCWN0cmwtPnZhbCAmPSB+KEJJVChY U0RJUlhfTU9ERV82R19PRkZTRVQpIHwKPiArCQkJCQkgICAgICAgQklUKFhTRElSWF9NT0RFXzEy R0lfT0ZGU0VUKSB8Cj4gKwkJCQkJICAgICAgIEJJVChYU0RJUlhfTU9ERV8xMkdGX09GRlNFVCkp Owo+ICsJCQl9Cj4gKwo+ICsJCQlpZiAoY29yZS0+bW9kZSA9PSBYU0RJUlhTU19TRElfU1REXzZH KSB7Cj4gKwkJCQlkZXZfZGJnKGRldiwgIlVwdG8gNkcgc3VwcG9ydGVkXG4iKTsKPiArCQkJCWN0 cmwtPnZhbCAmPSB+KEJJVChYU0RJUlhfTU9ERV8xMkdJX09GRlNFVCkgfAo+ICsJCQkJCSAgICAg ICBCSVQoWFNESVJYX01PREVfMTJHRl9PRkZTRVQpKTsKPiArCQkJfQo+ICsKPiArCQkJcmV0ID0g eHNkaXJ4X3NldF9tb2RlZGV0ZWN0KGNvcmUsIGN0cmwtPnZhbCk7Cj4gKwkJCWlmICghcmV0KQo+ ICsJCQkJeHNkaXJ4c3MtPnNlYXJjaG1hc2sgPSBjdHJsLT52YWw7Cj4gKwkJfSBlbHNlIHsKClRo aXMgY2FuIGJlIGRvbmUgaW4gdGUgYmVnaW5pbmcuCgoJaWYgKCFjdHJsLT52YWwpIHsKCQlkZXZf ZXJyKCk7CgkJcmV0dXJuIC1FSU5WQUw7Cgl9CgoJaWYgKGNvcmUtPm1vZGUgLi4uKQoKPiArCQkJ ZGV2X2VycihkZXYsICJTZWxlY3QgYXQgbGVhc3Qgb25lIG1vZGUhXG4iKTsKPiArCQkJcmV0dXJu IC1FSU5WQUw7Cj4gKwkJfQo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQl4c2Rpcnhzc19z ZXQoY29yZSwgWFNESVJYX1JTVF9DVFJMX1JFRywKPiArCQkJICAgICBYU0RJUlhfUlNUX0NUUkxf U1NfRU5fTUFTSyk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwl4c2RpcnhfY29yZV9l bmFibGUoY29yZSk7CgpJIHJlYWxpemVkIHRoYXQgdGhlIGNvcmUgaXMgZW5hYmxlZCBhbGwgdGhl IHRpbWUuIENhbiBpdCBiZSBlbmFibGVkIC8gZGlzYWJsZWQKcGVyIHN0cmVhbSBvbiAvIG9mZj8g T3IgaXMgaXQgdHJpY2t5PwoKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4 c2Rpcnhzc19nX3ZvbGF0aWxlX2N0cmwgLSBnZXQgdGhlIFhpbGlueCBTREkgUnggY29udHJvbHMK PiArICogQGN0cmw6IFBvaW50ZXIgdG8gVjRMMiBjb250cm9sCj4gKyAqCj4gKyAqIFJldHVybjog MCBvbiBzdWNjZXNzLCBlcnJvcnMgb3RoZXJ3aXNlCj4gKyAqLwo+ICtzdGF0aWMgaW50IHhzZGly eHNzX2dfdm9sYXRpbGVfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQo+ICt7Cj4gKwl1MzIg dmFsOwo+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcyA9Cj4gKwkJY29udGFpbmVy X29mKGN0cmwtPmhhbmRsZXIsCj4gKwkJCSAgICAgc3RydWN0IHhzZGlyeHNzX3N0YXRlLCBjdHJs X2hhbmRsZXIpOwo+ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUgPSAmeHNkaXJ4c3MtPmNv cmU7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb3JlLT5kZXY7Cj4gKwo+ICsJc3dpdGNoIChj dHJsLT5pZCkgewo+ICsJY2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfTU9ERV9ERVRFQ1Q6Cj4g KwkJaWYgKCF4c2Rpcnhzcy0+dmlkbG9ja2VkKSB7Cj4gKwkJCWRldl9lcnIoZGV2LCAiQ2FuJ3Qg Z2V0IHZhbHVlcyB3aGVuIHZpZGVvIG5vdCBsb2NrZWQhXG4iKTsKPiArCQkJcmV0dXJuIC1FSU5W QUw7Cj4gKwkJfQo+ICsJCXZhbCA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX01PREVfREVU X1NUQVRfUkVHKTsKPiArCQl2YWwgJj0gWFNESVJYX01PREVfREVUX1NUQVRfUlhfTU9ERV9NQVNL Owo+ICsKPiArCQlzd2l0Y2ggKHZhbCkgewo+ICsJCWNhc2UgWFNESVJYX01PREVfU0RfTUFTSzoK PiArCQkJY3RybC0+dmFsID0gWFNESVJYX01PREVfU0RfT0ZGU0VUOwo+ICsJCQlicmVhazsKPiAr CQljYXNlIFhTRElSWF9NT0RFX0hEX01BU0s6Cj4gKwkJCWN0cmwtPnZhbCA9IFhTRElSWF9NT0RF X0hEX09GRlNFVDsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBYU0RJUlhfTU9ERV8zR19NQVNLOgo+ ICsJCQljdHJsLT52YWwgPSBYU0RJUlhfTU9ERV8zR19PRkZTRVQ7Cj4gKwkJCWJyZWFrOwo+ICsJ CWNhc2UgWFNESVJYX01PREVfNkdfTUFTSzoKPiArCQkJY3RybC0+dmFsID0gWFNESVJYX01PREVf NkdfT0ZGU0VUOwo+ICsJCQlicmVhazsKPiArCQljYXNlIFhTRElSWF9NT0RFXzEyR0lfTUFTSzoK PiArCQkJY3RybC0+dmFsID0gWFNESVJYX01PREVfMTJHSV9PRkZTRVQ7Cj4gKwkJCWJyZWFrOwo+ ICsJCWNhc2UgWFNESVJYX01PREVfMTJHRl9NQVNLOgo+ICsJCQljdHJsLT52YWwgPSBYU0RJUlhf TU9ERV8xMkdGX09GRlNFVDsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJCWJyZWFrOwo+ICsJY2Fz ZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfQ1JDOgo+ICsJCWN0cmwtPnZhbCA9IHhzZGlyeHNzX3Jl YWQoY29yZSwgWFNESVJYX0NSQ19FUlJDTlRfUkVHKTsKPiArCQl4c2Rpcnhzc193cml0ZShjb3Jl LCBYU0RJUlhfQ1JDX0VSUkNOVF9SRUcsIDB4RkZGRik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFY0 TDJfQ0lEX1hJTElOWF9TRElSWF9FREhfRVJSQ05UOgo+ICsJCXZhbCA9IHhzZGlyeHNzX3JlYWQo Y29yZSwgWFNESVJYX01PREVfREVUX1NUQVRfUkVHKTsKPiArCQl2YWwgJj0gWFNESVJYX01PREVf REVUX1NUQVRfUlhfTU9ERV9NQVNLOwo+ICsJCWlmICh2YWwgPT0gWFNESVJYX01PREVfU0RfTUFT Sykgewo+ICsJCQljdHJsLT52YWwgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9FREhfRVJS Q05UX1JFRyk7Cj4gKwkJfSBlbHNlIHsKPiArCQkJZGV2X2RiZyhkZXYsICIlZCAtIG5vdCBpbiBT RCBtb2RlXG4iLCBjdHJsLT5pZCk7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCQli cmVhazsKPiArCWNhc2UgVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9TVEFUVVM6Cj4gKwkJdmFs ID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOwo+ICsJCXZh bCAmPSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SWF9NT0RFX01BU0s7Cj4gKwkJaWYgKHZhbCA9PSBY U0RJUlhfTU9ERV9TRF9NQVNLKSB7Cj4gKwkJCWN0cmwtPnZhbCA9IHhzZGlyeHNzX3JlYWQoY29y ZSwgWFNESVJYX0VESF9TVEFUX1JFRyk7Cj4gKwkJfSBlbHNlIHsKPiArCQkJZGV2X2RiZyhkZXYs ICIlZCAtIG5vdCBpbiBTRCBtb2RlXG4iLCBjdHJsLT5pZCk7Cj4gKwkJCXJldHVybiAtRUlOVkFM Owo+ICsJCX0KPiArCQlicmVhazsKPiArCWNhc2UgVjRMMl9DSURfWElMSU5YX1NESVJYX1RTX0lT X0lOVEVSTEFDRUQ6Cj4gKwkJaWYgKCF4c2Rpcnhzcy0+dmlkbG9ja2VkKSB7Cj4gKwkJCWRldl9l cnIoZGV2LCAiQ2FuJ3QgZ2V0IHZhbHVlcyB3aGVuIHZpZGVvIG5vdCBsb2NrZWQhXG4iKTsKPiAr CQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsJCWN0cmwtPnZhbCA9IHhzZGlyeHNzLT50c19p c19pbnRlcmxhY2VkOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhf QUNUSVZFX1NUUkVBTVM6Cj4gKwkJaWYgKCF4c2Rpcnhzcy0+dmlkbG9ja2VkKSB7Cj4gKwkJCWRl dl9lcnIoZGV2LCAiQ2FuJ3QgZ2V0IHZhbHVlcyB3aGVuIHZpZGVvIG5vdCBsb2NrZWQhXG4iKTsK PiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsJCXZhbCA9IHhzZGlyeHNzX3JlYWQoY29y ZSwgWFNESVJYX01PREVfREVUX1NUQVRfUkVHKTsKPiArCQl2YWwgJj0gWFNESVJYX01PREVfREVU X1NUQVRfQUNUX1NUUkVBTV9NQVNLOwo+ICsJCXZhbCA+Pj0gWFNESVJYX01PREVfREVUX1NUQVRf QUNUX1NUUkVBTV9PRkZTRVQ7Cj4gKwkJY3RybC0+dmFsID0gMSA8PCB2YWw7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9JU18zR0I6Cj4gKwkJaWYgKCF4c2Rpcnhz cy0+dmlkbG9ja2VkKSB7Cj4gKwkJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgZ2V0IHZhbHVlcyB3aGVu IHZpZGVvIG5vdCBsb2NrZWQhXG4iKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsJ CXZhbCA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX01PREVfREVUX1NUQVRfUkVHKTsKPiAr CQl2YWwgJj0gWFNESVJYX01PREVfREVUX1NUQVRfTFZMQl8zR19NQVNLOwo+ICsJCWN0cmwtPnZh bCA9IHZhbCA/IHRydWUgOiBmYWxzZTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJZGV2 X2VycihkZXYsICJHZXQgSW52YWxpZCBjb250cm9sIGlkIDB4JTB4XG4iLCBjdHJsLT5pZCk7Cj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwlkZXZfZGJnKGRldiwgIkdldCBjdHJsIGlkID0g MHglMDh4IHZhbCA9IDB4JTA4eFxuIiwgY3RybC0+aWQsCj4gKwkJY3RybC0+dmFsKTsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogeHNkaXJ4c3NfbG9nX3N0YXR1cyAtIExvZ3Mg dGhlIHN0YXR1cyBvZiB0aGUgU0RJIFJ4IFN1YnN5c3RlbQo+ICsgKiBAc2Q6IFBvaW50ZXIgdG8g VjRMMiBzdWJkZXZpY2Ugc3RydWN0dXJlCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gcHJpbnRz IHRoZSBjdXJyZW50IHN0YXR1cyBvZiBYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbQo+ICsgKgo+ICsg KiBSZXR1cm46IDAgb24gc3VjY2Vzcwo+ICsgKi8KPiArc3RhdGljIGludCB4c2Rpcnhzc19sb2df c3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCj4gK3sKPiArCXN0cnVjdCB4c2Rpcnhzc19z dGF0ZSAqeHNkaXJ4c3MgPSB0b194c2Rpcnhzc3N0YXRlKHNkKTsKPiArCXN0cnVjdCB4c2Rpcnhz c19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5jb3JlOwo+ICsJdTMyIGk7Cj4gKwo+ICsJdjRsMl9p bmZvKHNkLCAiKioqKiogU0RJIFJ4IHN1YnN5c3RlbSByZWcgZHVtcCBzdGFydCAqKioqKlxuIik7 Cj4gKwlmb3IgKGkgPSAwOyBpIDwgMHgyODsgaSsrKSB7Cj4gKwkJdTMyIGRhdGE7Cj4gKwo+ICsJ CWRhdGEgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIGkgKiA0KTsKPiArCQl2NGwyX2luZm8oc2QsICJv ZmZzZXQgMHglMDh4IGRhdGEgMHglMDh4XG4iLAo+ICsJCQkgIGkgKiA0LCBkYXRhKTsKPiArCX0K PiArCXY0bDJfaW5mbyhzZCwgIioqKioqIFNESSBSeCBzdWJzeXN0ZW0gcmVnIGR1bXAgZW5kICoq KioqXG4iKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogeHNkaXJ4c3NfZ19m cmFtZV9pbnRlcnZhbCAtIEdldCB0aGUgZnJhbWUgaW50ZXJ2YWwKPiArICogQHNkOiBWNEwyIFN1 YiBkZXZpY2UKPiArICogQGZpOiBQb2ludGVyIHRvIFY0bDIgU3ViIGRldmljZSBmcmFtZSBpbnRl cnZhbCBzdHJ1Y3R1cmUKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0 aGUgZnJhbWUgaW50ZXJ2YWwuCj4gKyAqIFRoZSBmcmFtZSByYXRlIGNhbiBiZSBpbnRlZ3JhbCBv ciBmcmFjdGlvbmFsLgo+ICsgKiBJbnRlZ3JhbCBmcmFtZSByYXRlIGUuZy4gbnVtZXJhdG9yID0g MTAwMCwgZGVub21pbmF0b3IgPSAyNDAwMCA9PiAyNCBmcHMKPiArICogRnJhY3Rpb25hbCBmcmFt ZSByYXRlIGUuZy4gbnVtZXJhdG9yID0gMTAwMSwgZGVub21pbmF0b3IgPSAyNDAwMCA9PiAyMy45 NyBmcHMKPiArICoKPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MKPiArICovCj4gK3N0YXRpYyBp bnQgeHNkaXJ4c3NfZ19mcmFtZV9pbnRlcnZhbChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAo+ICsJ CQkJICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfaW50ZXJ2YWwgKmZpKQo+ICt7Cj4gKwlz dHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0gdG9feHNkaXJ4c3NzdGF0ZShzZCk7Cj4g KwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSA9ICZ4c2Rpcnhzcy0+Y29yZTsKPiArCj4gKwlp ZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQpIHsKPiArCQlkZXZfZXJyKGNvcmUtPmRldiwgIlZpZGVv IG5vdCBsb2NrZWQhXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlmaS0+ aW50ZXJ2YWwgPSB4c2Rpcnhzcy0+ZnJhbWVfaW50ZXJ2YWw7Cj4gKwo+ICsJZGV2X2RiZyhjb3Jl LT5kZXYsICJmcmFtZSByYXRlIG51bWVyYXRvciA9ICVkIGRlbm9taW5hdG9yID0gJWRcbiIsCj4g KwkJeHNkaXJ4c3MtPmZyYW1lX2ludGVydmFsLm51bWVyYXRvciwKPiArCQl4c2Rpcnhzcy0+ZnJh bWVfaW50ZXJ2YWwuZGVub21pbmF0b3IpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ ICsgKiB4c2Rpcnhzc19zX3N0cmVhbSAtIEl0IGlzIHVzZWQgdG8gc3RhcnQvc3RvcCB0aGUgc3Ry ZWFtaW5nLgo+ICsgKiBAc2Q6IFY0TDIgU3ViIGRldmljZQo+ICsgKiBAZW5hYmxlOiBGbGFnIChU cnVlIC8gRmFsc2UpCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gY29udHJvbHMgdGhlIHN0YXJ0 IG9yIHN0b3Agb2Ygc3RyZWFtaW5nIGZvciB0aGUKPiArICogWGlsaW54IFNESSBSeCBTdWJzeXN0 ZW0uCj4gKyAqCj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvcnMgb3RoZXJ3aXNlCj4g KyAqLwo+ICtzdGF0aWMgaW50IHhzZGlyeHNzX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAq c2QsIGludCBlbmFibGUpCj4gK3sKPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3Mg PSB0b194c2Rpcnhzc3N0YXRlKHNkKTsKPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0g JnhzZGlyeHNzLT5jb3JlOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY29yZS0+ZGV2Owo+ICsK PiArCWlmIChlbmFibGUpIHsKPiArCQlpZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQpIHsKPiArCQkJ ZGV2X2RiZyhkZXYsICJWaWRlbyBpcyBub3QgbG9ja2VkXG4iKTsKCmRldl9lcnIoKT8KCj4gKwkJ CXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCQlpZiAoeHNkaXJ4c3MtPnN0cmVhbWluZykgewo+ ICsJCQlkZXZfZGJnKGRldiwgIkFscmVhZHkgc3RyZWFtaW5nXG4iKTsKPiArCQkJcmV0dXJuIC1F SU5WQUw7CgpJcyB0aGlzIGFuIGVycm9yPyBJIHRoaW5rIGl0IGNhbiBqdXN0IHJldHVybiAwIGlu c3RlYWQuCgo+ICsJCX0KPiArCj4gKwkJeHNkaXJ4X3N0cmVhbWZsb3dfY29udHJvbChjb3JlLCB0 cnVlKTsKPiArCQl4c2Rpcnhzcy0+c3RyZWFtaW5nID0gdHJ1ZTsKPiArCQlkZXZfZGJnKGRldiwg IlN0cmVhbWluZyBzdGFydGVkXG4iKTsKPiArCX0gZWxzZSB7Cj4gKwkJaWYgKCF4c2Rpcnhzcy0+ c3RyZWFtaW5nKSB7Cj4gKwkJCWRldl9kYmcoZGV2LCAiU3RvcHBlZCBzdHJlYW1pbmcgYWxyZWFk eVxuIik7Cj4gKwkJCXJldHVybiAwOwo+ICsJCX0KPiArCj4gKwkJeHNkaXJ4X3N0cmVhbWZsb3df Y29udHJvbChjb3JlLCBmYWxzZSk7Cj4gKwkJeHNkaXJ4c3MtPnN0cmVhbWluZyA9IGZhbHNlOwo+ ICsJCWRldl9kYmcoZGV2LCAiU3RyZWFtaW5nIHN0b3BwZWRcbiIpOwo+ICsJfQo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogeHNkaXJ4c3NfZ19pbnB1dF9zdGF0dXMgLSBJ dCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgdmlkZW8gc2lnbmFsCj4gKyAqIGlzIHByZXNl bnQgLyBsb2NrZWQgb250byBvciBub3QuCj4gKyAqCj4gKyAqIEBzZDogVjRMMiBTdWIgZGV2aWNl Cj4gKyAqIEBzdGF0dXM6IHN0YXR1cyBvZiBzaWduYWwgbG9ja2VkCj4gKyAqCj4gKyAqIFRoaXMg aXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHZpZGVvIHNpZ25hbCBpcyBwcmVzZW50IGFuZCBs b2NrZWQgb250bwo+ICsgKiBieSB0aGUgU0RJIFJ4IGNvcmUgb3Igbm90IGJhc2VkIG9uIHZpZGxv Y2tlZCBmbGFnLgo+ICsgKgo+ICsgKiBSZXR1cm46IHplcm8gb24gc3VjY2Vzcwo+ICsgKi8KPiAr c3RhdGljIGludCB4c2Rpcnhzc19nX2lucHV0X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNk LCB1MzIgKnN0YXR1cykKPiArewo+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcyA9 IHRvX3hzZGlyeHNzc3RhdGUoc2QpOwo+ICsKPiArCWlmICgheHNkaXJ4c3MtPnZpZGxvY2tlZCkK PiArCQkqc3RhdHVzID0gVjRMMl9JTl9TVF9OT19TWU5DIHwgVjRMMl9JTl9TVF9OT19TSUdOQUw7 Cj4gKwllbHNlCj4gKwkJKnN0YXR1cyA9IDA7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICoKPiArX194c2Rpcnhzc19nZXRfcGFk X2Zvcm1hdChzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzLAo+ICsJCQkgIHN0cnVjdCB2 NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsCj4gKwkJCSAgdW5zaWduZWQgaW50IHBhZCwgdTMy IHdoaWNoKQo+ICt7Cj4gKwlzd2l0Y2ggKHdoaWNoKSB7Cj4gKwljYXNlIFY0TDJfU1VCREVWX0ZP Uk1BVF9UUlk6Cj4gKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KCZ4c2Rpcnhz cy0+c3ViZGV2LCBjZmcsIHBhZCk7Cj4gKwljYXNlIFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkU6 Cj4gKwkJcmV0dXJuICZ4c2Rpcnhzcy0+Zm9ybWF0Owo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4g TlVMTDsKPiArCX0KPiArfQo+ICsKPiArLyoqCj4gKyAqIHhzZGlyeHNzX2luaXRfY2ZnIC0gSW5p dGlhbGlzZSB0aGUgcGFkIGZvcm1hdCBjb25maWcgdG8gZGVmYXVsdAo+ICsgKiBAc2Q6IFBvaW50 ZXIgdG8gVjRMMiBTdWIgZGV2aWNlIHN0cnVjdHVyZQo+ICsgKiBAY2ZnOiBQb2ludGVyIHRvIHN1 YiBkZXZpY2UgcGFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0 aW9uIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcGFkIGZvcm1hdCB3aXRoIHRoZSBkZWZhdWx0 Cj4gKyAqIHZhbHVlcy4KPiArICoKPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MKPiArICovCj4g K3N0YXRpYyBpbnQgeHNkaXJ4c3NfaW5pdF9jZmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKPiAr CQkJICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnKQo+ICt7Cj4gKwlzdHJ1 Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0gdG9feHNkaXJ4c3NzdGF0ZShzZCk7Cj4gKwlz dHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmb3JtYXQ7Cj4gKwo+ICsJZm9ybWF0ID0gdjRsMl9z dWJkZXZfZ2V0X3RyeV9mb3JtYXQoc2QsIGNmZywgMCk7Cj4gKwkqZm9ybWF0ID0geHNkaXJ4c3Mt PmRlZmF1bHRfZm9ybWF0Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICog eHNkaXJ4c3NfZ2V0X2Zvcm1hdCAtIEdldCB0aGUgcGFkIGZvcm1hdAo+ICsgKiBAc2Q6IFBvaW50 ZXIgdG8gVjRMMiBTdWIgZGV2aWNlIHN0cnVjdHVyZQo+ICsgKiBAY2ZnOiBQb2ludGVyIHRvIHN1 YiBkZXZpY2UgcGFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQo+ICsgKiBAZm10OiBQb2ludGVyIHRv IHBhZCBsZXZlbCBtZWRpYSBidXMgZm9ybWF0Cj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMg dXNlZCB0byBnZXQgdGhlIHBhZCBmb3JtYXQgaW5mb3JtYXRpb24uCj4gKyAqCj4gKyAqIFJldHVy bjogMCBvbiBzdWNjZXNzCj4gKyAqLwo+ICtzdGF0aWMgaW50IHhzZGlyeHNzX2dldF9mb3JtYXQo c3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKPiArCQkJICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9w YWRfY29uZmlnICpjZmcsCj4gKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpm bXQpCj4gK3sKPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194c2Rpcnhz c3N0YXRlKHNkKTsKPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5j b3JlOwo+ICsKPiArCWlmICgheHNkaXJ4c3MtPnZpZGxvY2tlZCkgewo+ICsJCWRldl9lcnIoY29y ZS0+ZGV2LCAiVmlkZW8gbm90IGxvY2tlZCFcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJ fQo+ICsKPiArCWZtdC0+Zm9ybWF0ID0gKl9feHNkaXJ4c3NfZ2V0X3BhZF9mb3JtYXQoeHNkaXJ4 c3MsIGNmZywKPiArCQkJCQkJIGZtdC0+cGFkLCBmbXQtPndoaWNoKTsKPiArCj4gKwlkZXZfZGJn KGNvcmUtPmRldiwgIlN0cmVhbSB3aWR0aCA9ICVkIGhlaWdodCA9ICVkIEZpZWxkID0gJWRcbiIs Cj4gKwkJZm10LT5mb3JtYXQud2lkdGgsIGZtdC0+Zm9ybWF0LmhlaWdodCwgZm10LT5mb3JtYXQu ZmllbGQpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogeHNkaXJ4c3Nf c2V0X2Zvcm1hdCAtIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIHBhZCBmb3JtYXQKPiArICogQHNk OiBQb2ludGVyIHRvIFY0TDIgU3ViIGRldmljZSBzdHJ1Y3R1cmUKPiArICogQGNmZzogUG9pbnRl ciB0byBzdWIgZGV2aWNlIHBhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKPiArICogQGZtdDogUG9p bnRlciB0byBwYWQgbGV2ZWwgbWVkaWEgYnVzIGZvcm1hdAo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0 aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSBwYWQgZm9ybWF0Lgo+ICsgKiBTaW5jZSB0aGUgcGFkIGZv cm1hdCBpcyBmaXhlZCBpbiBoYXJkd2FyZSwgaXQgY2FuJ3QgYmUKPiArICogbW9kaWZpZWQgb24g cnVuIHRpbWUuCj4gKyAqCj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzCj4gKyAqLwo+ICtzdGF0 aWMgaW50IHhzZGlyeHNzX3NldF9mb3JtYXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKPiArCQkJ ICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsCj4gKwkJCSAgICAgICBz dHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpCj4gK3sKPiArCXN0cnVjdCB2NGwyX21idXNf ZnJhbWVmbXQgKl9fZm9ybWF0Owo+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcyA9 IHRvX3hzZGlyeHNzc3RhdGUoc2QpOwo+ICsKPiArCWRldl9kYmcoeHNkaXJ4c3MtPmNvcmUuZGV2 LAo+ICsJCSJzZXQgd2lkdGggJWQgaGVpZ2h0ICVkIGNvZGUgJWQgZmllbGQgJWQgY29sb3JzcGFj ZSAlZFxuIiwKPiArCQlmbXQtPmZvcm1hdC53aWR0aCwgZm10LT5mb3JtYXQuaGVpZ2h0LAo+ICsJ CWZtdC0+Zm9ybWF0LmNvZGUsIGZtdC0+Zm9ybWF0LmZpZWxkLAo+ICsJCWZtdC0+Zm9ybWF0LmNv bG9yc3BhY2UpOwo+ICsKPiArCV9fZm9ybWF0ID0gX194c2Rpcnhzc19nZXRfcGFkX2Zvcm1hdCh4 c2RpcnhzcywgY2ZnLAo+ICsJCQkJCSAgICAgZm10LT5wYWQsIGZtdC0+d2hpY2gpOwo+ICsKPiAr CS8qIEN1cnJlbnRseSByZXNldCB0aGUgY29kZSB0byBvbmUgZml4ZWQgaW4gaGFyZHdhcmUgKi8K PiArCS8qIFRPRE8gOiBBZGQgY2hlY2tzIGZvciB3aWR0aCBoZWlnaHQgKi8KCkFoLCB3aGF0IGJs b2NrcyB0byBpbXBsZW1lbnQgdGhpcz8gOi0pCgo+ICsJZm10LT5mb3JtYXQuY29kZSA9IF9fZm9y bWF0LT5jb2RlOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogeHNkaXJ4 c3NfZW51bV9tYnVzX2NvZGUgLSBIYW5kbGUgcGl4ZWwgZm9ybWF0IGVudW1lcmF0aW9uCj4gKyAq IEBzZDogcG9pbnRlciB0byB2NGwyIHN1YmRldiBzdHJ1Y3R1cmUKPiArICogQGNmZzogVjRMMiBz dWJkZXYgcGFkIGNvbmZpZ3VyYXRpb24KPiArICogQGNvZGU6IHBvaW50ZXIgdG8gdjRsMl9zdWJk ZXZfbWJ1c19jb2RlX2VudW0gc3RydWN0dXJlCj4gKyAqCj4gKyAqIFJldHVybjogLUVJTlZBTCBv ciB6ZXJvIG9uIHN1Y2Nlc3MKPiArICovCj4gK3N0YXRpYyBpbnQgeHNkaXJ4c3NfZW51bV9tYnVz X2NvZGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKPiArCQkJCSAgIHN0cnVjdCB2NGwyX3N1YmRl dl9wYWRfY29uZmlnICpjZmcsCj4gKwkJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfbWJ1c19jb2Rl X2VudW0gKmNvZGUpCj4gK3sKPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0 b194c2Rpcnhzc3N0YXRlKHNkKTsKPiArCXUzMiBpbmRleCA9IGNvZGUtPmluZGV4Owo+ICsJdTMy IG1heGluZGV4Owo+ICsKPiArCWlmICh4c2Rpcnhzcy0+Y29yZS5icGMgPT0gMTApCj4gKwkJbWF4 aW5kZXggPSBBUlJBWV9TSVpFKHhzZGlyeHNzXzEwYnBjX21idXNfZm10cyk7Cj4gKwllbHNlCj4g KwkJbWF4aW5kZXggPSBBUlJBWV9TSVpFKHhzZGlyeHNzXzEyYnBjX21idXNfZm10cyk7Cj4gKwo+ ICsJaWYgKGNvZGUtPnBhZCB8fCBpbmRleCA+PSBtYXhpbmRleCkKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCj4gKwlpZiAoeHNkaXJ4c3MtPmNvcmUuYnBjID09IDEwKQo+ICsJCWNvZGUtPmNvZGUg PSB4c2Rpcnhzc18xMGJwY19tYnVzX2ZtdHNbaW5kZXhdOwo+ICsJZWxzZQo+ICsJCWNvZGUtPmNv ZGUgPSB4c2Rpcnhzc18xMmJwY19tYnVzX2ZtdHNbaW5kZXhdOwo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICsvKioKPiArICogeHNkaXJ4c3NfZW51bV9kdl90aW1pbmdzOiBFbnVtZXJhdGUg YWxsIHRoZSBzdXBwb3J0ZWQgRFYgdGltaW5ncwo+ICsgKiBAc2Q6IHBvaW50ZXIgdG8gdjRsMiBz dWJkZXYgc3RydWN0dXJlCj4gKyAqIEB0aW1pbmdzOiBEViB0aW1pbmdzIHN0cnVjdHVyZSB0byBi ZSByZXR1cm5lZC4KPiArICoKPiArICogUmV0dXJuOiAtRUlOVkFMIGluY2FzZSBvZiBpbnZhbGlk IGluZGV4IGFuZCBwYWQgb3IgemVybyBvbiBzdWNjZXNzCj4gKyAqLwo+ICtzdGF0aWMgaW50IHhz ZGlyeHNzX2VudW1fZHZfdGltaW5ncyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAo+ICsJCQkJICAg IHN0cnVjdCB2NGwyX2VudW1fZHZfdGltaW5ncyAqdGltaW5ncykKPiArewo+ICsJaWYgKHRpbWlu Z3MtPmluZGV4ID49IEFSUkFZX1NJWkUoZm10X2NhcCkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwo+ICsJaWYgKHRpbWluZ3MtPnBhZCAhPSAwKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiAr CXRpbWluZ3MtPnRpbWluZ3MgPSBmbXRfY2FwW3RpbWluZ3MtPmluZGV4XTsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICsvKioKPiArICogeHNkaXJ4c3NfcXVlcnlfZHZfdGltaW5nczogUXVlcnkg Zm9yIHRoZSBjdXJyZW50IERWIHRpbWluZ3MKPiArICogQHNkOiBwb2ludGVyIHRvIHY0bDIgc3Vi ZGV2IHN0cnVjdHVyZQo+ICsgKiBAdGltaW5nczogRFYgdGltaW5ncyBzdHJ1Y3R1cmUgdG8gYmUg cmV0dXJuZWQuCj4gKyAqCj4gKyAqIFJldHVybjogLUVOT0xDSyB3aGVuIHZpZGVvIGlzIG5vdCBs b2NrZWQsIC1FUkFOR0Ugd2hlbiBjb3JyZXNwb25kaW5nIHRpbWluZwo+ICsgKiBlbnRyeSBpcyBu b3QgZm91bmQgb3IgemVybyBvbiBzdWNjZXNzLgo+ICsgKi8KPiArc3RhdGljIGludCB4c2Rpcnhz c19xdWVyeV9kdl90aW1pbmdzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCj4gKwkJCQkgICAgIHN0 cnVjdCB2NGwyX2R2X3RpbWluZ3MgKnRpbWluZ3MpCj4gK3sKPiArCXN0cnVjdCB4c2Rpcnhzc19z dGF0ZSAqc3RhdGUgPSB0b194c2Rpcnhzc3N0YXRlKHNkKTsKPiArCXVuc2lnbmVkIGludCBpOwo+ ICsKPiArCWlmICghc3RhdGUtPnZpZGxvY2tlZCkKPiArCQlyZXR1cm4gLUVOT0xDSzsKPiArCj4g Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh4c2Rpcnhzc19kdl90aW1pbmdzKTsgaSsrKSB7 Cj4gKwkJaWYgKHN0YXRlLT5mb3JtYXQud2lkdGggPT0geHNkaXJ4c3NfZHZfdGltaW5nc1tpXS53 aWR0aCAmJgo+ICsJCSAgICBzdGF0ZS0+Zm9ybWF0LmhlaWdodCA9PSB4c2Rpcnhzc19kdl90aW1p bmdzW2ldLmhlaWdodCAmJgo+ICsJCSAgICBzdGF0ZS0+ZnJhbWVfaW50ZXJ2YWwuZGVub21pbmF0 b3IgPT0KPiArCQkgICAgKHhzZGlyeHNzX2R2X3RpbWluZ3NbaV0uZnBzICogMTAwMCkpIHsKPiAr CQkJKnRpbWluZ3MgPSB4c2Rpcnhzc19kdl90aW1pbmdzW2ldLmZvcm1hdDsKPiArCQkJcmV0dXJu IDA7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAtRVJBTkdFOwo+ICt9Cj4gKwo+ICsvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsgKiBNZWRpYSBPcGVyYXRpb25zCj4gKyAqLwo+ICsKPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBtZWRpYV9lbnRpdHlfb3BlcmF0aW9ucyB4c2Rpcnhzc19tZWRp YV9vcHMgPSB7Cj4gKwkubGlua192YWxpZGF0ZSA9IHY0bDJfc3ViZGV2X2xpbmtfdmFsaWRhdGUK PiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyB4c2Rpcnhzc19j dHJsX29wcyA9IHsKPiArCS5nX3ZvbGF0aWxlX2N0cmwgPSB4c2Rpcnhzc19nX3ZvbGF0aWxlX2N0 cmwsCj4gKwkuc19jdHJsCT0geHNkaXJ4c3Nfc19jdHJsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IHY0bDJfY3RybF9jb25maWcgeHNkaXJ4c3NfZWRoX2N0cmxzW10gPSB7Cj4gKwl7 Cj4gKwkJLm9wcwk9ICZ4c2Rpcnhzc19jdHJsX29wcywKPiArCQkuaWQJPSBWNEwyX0NJRF9YSUxJ TlhfU0RJUlhfRURIX0VSUkNOVF9FTkFCTEUsCj4gKwkJLm5hbWUJPSAiU0RJIFJ4IDogRURIIEVy cm9yIENvdW50IEVuYWJsZSIsCj4gKwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9CSVRNQVNLLAo+ ICsJCS5taW4JPSAwLAo+ICsJCS5tYXgJPSBYU0RJUlhfRURIX0FMTEVSUl9NQVNLLAo+ICsJCS5k ZWYJPSAwLAo+ICsJfSwgewo+ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMsCj4gKwkJLmlk CT0gVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9FUlJDTlQsCj4gKwkJLm5hbWUJPSAiU0RJIFJ4 IDogRURIIEVycm9yIENvdW50IiwKPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIs Cj4gKwkJLm1pbgk9IDAsCj4gKwkJLm1heAk9IDB4RkZGRiwKPiArCQkuc3RlcAk9IDEsCj4gKwkJ LmRlZgk9IDAsCj4gKwkJLmZsYWdzICA9IFY0TDJfQ1RSTF9GTEFHX1ZPTEFUSUxFIHwgVjRMMl9D VFJMX0ZMQUdfUkVBRF9PTkxZLAo+ICsJfSwgewo+ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9v cHMsCj4gKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9TVEFUVVMsCj4gKwkJLm5h bWUJPSAiU0RJIFJ4IDogRURIIFN0YXR1cyIsCj4gKwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9J TlRFR0VSLAo+ICsJCS5taW4JPSAwLAo+ICsJCS5tYXgJPSAweEZGRkZGRkZGLAo+ICsJCS5zdGVw CT0gMSwKPiArCQkuZGVmCT0gMCwKPiArCQkuZmxhZ3MgID0gVjRMMl9DVFJMX0ZMQUdfVk9MQVRJ TEUgfCBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFksCj4gKwl9Cj4gK307Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IHY0bDJfY3RybF9jb25maWcgeHNkaXJ4c3NfY3RybHNbXSA9IHsKPiArCXsK PiArCQkub3BzCT0gJnhzZGlyeHNzX2N0cmxfb3BzLAo+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElO WF9TRElSWF9GUkFNRVIsCj4gKwkJLm5hbWUJPSAiU0RJIFJ4IDogRW5hYmxlIEZyYW1lciIsCj4g KwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAo+ICsJCS5taW4JPSBmYWxzZSwKPiAr CQkubWF4CT0gdHJ1ZSwKPiArCQkuc3RlcAk9IDEsCj4gKwkJLmRlZgk9IHRydWUsCj4gKwl9LCB7 Cj4gKwkJLm9wcwk9ICZ4c2Rpcnhzc19jdHJsX29wcywKPiArCQkuaWQJPSBWNEwyX0NJRF9YSUxJ TlhfU0RJUlhfVklETE9DS19XSU5ET1csCj4gKwkJLm5hbWUJPSAiU0RJIFJ4IDogVmlkZW8gTG9j ayBXaW5kb3ciLAo+ICsJCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKPiArCQkubWlu CT0gMCwKPiArCQkubWF4CT0gMHhGRkZGRkZGRiwKPiArCQkuc3RlcAk9IDEsCj4gKwkJLmRlZgk9 IFhTRElSWF9ERUZBVUxUX1ZJREVPX0xPQ0tfV0lORE9XLAo+ICsJfSwgewo+ICsJCS5vcHMJPSAm eHNkaXJ4c3NfY3RybF9vcHMsCj4gKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NESVJYX1NFQVJD SF9NT0RFUywKPiArCQkubmFtZQk9ICJTREkgUnggOiBNb2RlcyBzZWFyY2ggTWFzayIsCj4gKwkJ LnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9CSVRNQVNLLAo+ICsJCS5taW4JPSAwLAo+ICsJCS5tYXgJ PSBYU0RJUlhfREVURUNUX0FMTF9NT0RFUywKPiArCQkuZGVmCT0gWFNESVJYX0RFVEVDVF9BTExf TU9ERVMsCj4gKwl9LCB7Cj4gKwkJLm9wcwk9ICZ4c2Rpcnhzc19jdHJsX29wcywKPiArCQkuaWQJ PSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfTU9ERV9ERVRFQ1QsCj4gKwkJLm5hbWUJPSAiU0RJIFJ4 IDogTW9kZSBEZXRlY3QgU3RhdHVzIiwKPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVH RVIsCj4gKwkJLm1pbgk9IFhTRElSWF9NT0RFX1NEX09GRlNFVCwKPiArCQkubWF4CT0gWFNESVJY X01PREVfMTJHRl9PRkZTRVQsCj4gKwkJLnN0ZXAJPSAxLAo+ICsJCS5mbGFncyAgPSBWNEwyX0NU UkxfRkxBR19WT0xBVElMRSB8IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSwKPiArCX0sIHsKPiAr CQkub3BzCT0gJnhzZGlyeHNzX2N0cmxfb3BzLAo+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElOWF9T RElSWF9DUkMsCj4gKwkJLm5hbWUJPSAiU0RJIFJ4IDogQ1JDIEVycm9yIHN0YXR1cyIsCj4gKwkJ LnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAo+ICsJCS5taW4JPSAwLAo+ICsJCS5tYXgJ PSAweEZGRkZGRkZGLAo+ICsJCS5zdGVwCT0gMSwKPiArCQkuZGVmCT0gMCwKPiArCQkuZmxhZ3Mg ID0gVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUgfCBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFksCj4g Kwl9LCB7Cj4gKwkJLm9wcwk9ICZ4c2Rpcnhzc19jdHJsX29wcywKPiArCQkuaWQJPSBWNEwyX0NJ RF9YSUxJTlhfU0RJUlhfVFNfSVNfSU5URVJMQUNFRCwKPiArCQkubmFtZQk9ICJTREkgUnggOiBU UyBpcyBJbnRlcmxhY2VkIiwKPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCj4g KwkJLm1pbgk9IGZhbHNlLAo+ICsJCS5tYXgJPSB0cnVlLAo+ICsJCS5kZWYJPSBmYWxzZSwKPiAr CQkuc3RlcAk9IDEsCj4gKwkJLmZsYWdzICA9IFY0TDJfQ1RSTF9GTEFHX1ZPTEFUSUxFIHwgVjRM Ml9DVFJMX0ZMQUdfUkVBRF9PTkxZLAo+ICsJfSwgewo+ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3Ry bF9vcHMsCj4gKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NESVJYX0FDVElWRV9TVFJFQU1TLAo+ ICsJCS5uYW1lCT0gIlNESSBSeCA6IEFjdGl2ZSBTdHJlYW1zIiwKPiArCQkudHlwZQk9IFY0TDJf Q1RSTF9UWVBFX0lOVEVHRVIsCj4gKwkJLm1pbgk9IDEsCj4gKwkJLm1heAk9IDE2LAo+ICsJCS5k ZWYJPSAxLAo+ICsJCS5zdGVwCT0gMSwKPiArCQkuZmxhZ3MgID0gVjRMMl9DVFJMX0ZMQUdfVk9M QVRJTEUgfCBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFksCj4gKwl9LCB7Cj4gKwkJLm9wcwk9ICZ4 c2Rpcnhzc19jdHJsX29wcywKPiArCQkuaWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfSVNfM0dC LAo+ICsJCS5uYW1lCT0gIlNESSBSeCA6IElzIDNHQiIsCj4gKwkJLnR5cGUJPSBWNEwyX0NUUkxf VFlQRV9CT09MRUFOLAo+ICsJCS5taW4JPSBmYWxzZSwKPiArCQkubWF4CT0gdHJ1ZSwKPiArCQku ZGVmCT0gZmFsc2UsCj4gKwkJLnN0ZXAJPSAxLAo+ICsJCS5mbGFncyAgPSBWNEwyX0NUUkxfRkxB R19WT0xBVElMRSB8IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSwKPiArCX0KPiArfTsKPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgeHNkaXJ4c3NfY29yZV9v cHMgPSB7Cj4gKwkubG9nX3N0YXR1cyA9IHhzZGlyeHNzX2xvZ19zdGF0dXMsCj4gKwkuc3Vic2Ny aWJlX2V2ZW50ID0geHNkaXJ4c3Nfc3Vic2NyaWJlX2V2ZW50LAo+ICsJLnVuc3Vic2NyaWJlX2V2 ZW50ID0geHNkaXJ4c3NfdW5zdWJzY3JpYmVfZXZlbnQKPiArfTsKPiArCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHhzZGlyeHNzX3ZpZGVvX29wcyA9IHsKPiAr CS5nX2ZyYW1lX2ludGVydmFsID0geHNkaXJ4c3NfZ19mcmFtZV9pbnRlcnZhbCwKPiArCS5zX3N0 cmVhbSA9IHhzZGlyeHNzX3Nfc3RyZWFtLAo+ICsJLmdfaW5wdXRfc3RhdHVzID0geHNkaXJ4c3Nf Z19pbnB1dF9zdGF0dXMsCj4gKwkucXVlcnlfZHZfdGltaW5ncyA9IHhzZGlyeHNzX3F1ZXJ5X2R2 X3RpbWluZ3MsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3Bh ZF9vcHMgeHNkaXJ4c3NfcGFkX29wcyA9IHsKPiArCS5pbml0X2NmZyA9IHhzZGlyeHNzX2luaXRf Y2ZnLAo+ICsJLmdldF9mbXQgPSB4c2Rpcnhzc19nZXRfZm9ybWF0LAo+ICsJLnNldF9mbXQgPSB4 c2Rpcnhzc19zZXRfZm9ybWF0LAo+ICsJLmVudW1fbWJ1c19jb2RlID0geHNkaXJ4c3NfZW51bV9t YnVzX2NvZGUsCj4gKwkuZW51bV9kdl90aW1pbmdzID0geHNkaXJ4c3NfZW51bV9kdl90aW1pbmdz LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgeHNkaXJ4 c3Nfb3BzID0gewo+ICsJLmNvcmUgPSAmeHNkaXJ4c3NfY29yZV9vcHMsCj4gKwkudmlkZW8gPSAm eHNkaXJ4c3NfdmlkZW9fb3BzLAo+ICsJLnBhZCA9ICZ4c2Rpcnhzc19wYWRfb3BzCj4gK307Cj4g Kwo+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsgKiBQbGF0Zm9ybSBEZXZpY2UgRHJpdmVy Cj4gKyAqLwo+ICsKPiArc3RhdGljIGludCB4c2Rpcnhzc19wYXJzZV9vZihzdHJ1Y3QgeHNkaXJ4 c3Nfc3RhdGUgKnhzZGlyeHNzKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSB4 c2Rpcnhzcy0+Y29yZS5kZXYtPm9mX25vZGU7Cj4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29y ZSA9ICZ4c2Rpcnhzcy0+Y29yZTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvcmUtPmRldjsK PiArCXN0cnVjdCBmd25vZGVfaGFuZGxlICplcCwgKnJlcDsKPiArCWludCByZXQ7Cj4gKwljb25z dCBjaGFyICpzZGlfc3RkOwo+ICsKPiArCWNvcmUtPmluY2x1ZGVfZWRoID0gb2ZfcHJvcGVydHlf cmVhZF9ib29sKG5vZGUsICJ4bG54LGluY2x1ZGUtZWRoIik7Cj4gKwlkZXZfZGJnKGRldiwgIkVE SCBwcm9wZXJ0eSA9ICVzXG4iLAo+ICsJCWNvcmUtPmluY2x1ZGVfZWRoID8gIlByZXNlbnQiIDog IkFic2VudCIpOwo+ICsKPiArCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5vZGUsICJ4 bG54LGxpbmUtcmF0ZSIsICZzZGlfc3RkKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2Vy cihkZXYsICJ4bG54LGxpbmUtcmF0ZSBwcm9wZXJ0eSBub3QgZm91bmRcbiIpOwo+ICsJCXJldHVy biByZXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFzdHJuY21wKHNkaV9zdGQsICIxMkdfU0RJXzhEUyIs IFhTRElSWF9NQVhfU1RSX0xFTkdUSCkpIHsKPiArCQljb3JlLT5tb2RlID0gWFNESVJYU1NfU0RJ X1NURF8xMkdfOERTOwo+ICsJfSBlbHNlIGlmICghc3RybmNtcChzZGlfc3RkLCAiNkdfU0RJIiwg WFNESVJYX01BWF9TVFJfTEVOR1RIKSkgewo+ICsJCWNvcmUtPm1vZGUgPSBYU0RJUlhTU19TRElf U1REXzZHOwo+ICsJfSBlbHNlIGlmICghc3RybmNtcChzZGlfc3RkLCAiM0dfU0RJIiwgWFNESVJY X01BWF9TVFJfTEVOR1RIKSkgewo+ICsJCWNvcmUtPm1vZGUgPSBYU0RJUlhTU19TRElfU1REXzNH Owo+ICsJfSBlbHNlIHsKPiArCQlkZXZfZXJyKGRldiwgIkludmFsaWQgTGluZSBSYXRlXG4iKTsK PiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCWRldl9kYmcoZGV2LCAiU0RJIFJ4IExpbmUg UmF0ZSA9ICVzLCBtb2RlID0gJWRcbiIsIHNkaV9zdGQsCj4gKwkJY29yZS0+bW9kZSk7Cj4gKwo+ ICsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInhsbngsYnBwIiwgJmNvcmUtPmJw Yyk7CgpCdXQsIHRoZSBicHAgYW5kIGJwYyBhcmUgcXVpdGUgZGlmZmVyZW50LiBTaG91bGRuJ3Qg aXQgYmUgYnBjPwoKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gZ2V0IHhsbngsYnBwXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWlmIChj b3JlLT5icGMgIT0gMTAgJiYgY29yZS0+YnBjICE9IDEyKSB7Cj4gKwkJZGV2X2VycihkZXYsICJi aXRzIHBlciBjb21wb25lbnQ9JXUuIENhbiBiZSAxMCBvciAxMiBvbmx5XG4iLAo+ICsJCQljb3Jl LT5icGMpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWVwID0gZndub2RlX2dy YXBoX2dldF9lbmRwb2ludF9ieV9pZChkZXZfZndub2RlKGRldiksIDAsIDAsCj4gKwkJCQkJICAg ICBGV05PREVfR1JBUEhfRU5EUE9JTlRfTkVYVCk7Cj4gKwlpZiAoIWVwKSB7Cj4gKwkJZGV2X2Vy cihkZXYsICJubyBzb3VyY2UgcG9ydCBmb3VuZCIpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJ Z290byBkdF9wYXJzZV9kb25lOwo+ICsJfQo+ICsKPiArCXJlcCA9IGZ3bm9kZV9ncmFwaF9nZXRf cmVtb3RlX2VuZHBvaW50KGVwKTsKPiArCWlmICghcmVwKSB7Cj4gKwkJZGV2X2VycihkZXYsICJu byByZW1vdGUgc2luayBlbmRwb2ludCBmb3VuZCIpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwl9 Cj4gKwo+ICsJZndub2RlX2hhbmRsZV9wdXQocmVwKTsKPiArZHRfcGFyc2VfZG9uZToKPiArCWZ3 bm9kZV9oYW5kbGVfcHV0KGVwKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgeHNkaXJ4c3NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJ c3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXY7Cj4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhz ZGlyeHNzOwo+ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmU7Cj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXY7Cj4gKwlpbnQgcmV0Owo+ICsJdW5zaWduZWQgaW50IG51bV9jdHJscywgbnVtX2VkaF9j dHJscyA9IDAsIGk7Cj4gKwo+ICsJeHNkaXJ4c3MgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwg c2l6ZW9mKCp4c2RpcnhzcyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCF4c2RpcnhzcykKPiArCQly ZXR1cm4gLUVOT01FTTsKPiArCj4gKwl4c2Rpcnhzcy0+Y29yZS5kZXYgPSAmcGRldi0+ZGV2Owo+ ICsJY29yZSA9ICZ4c2Rpcnhzcy0+Y29yZTsKPiArCWRldiA9IGNvcmUtPmRldjsKPiArCj4gKwkv KiBSZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlciAqLwo+ICsJY29yZS0+aXJxID0gcGxhdGZvcm1f Z2V0X2lycShwZGV2LCAwKTsKCkFzIG1lbnRpb25lZCwgdGhpcyBkb2Vzbid0IGhhdmUgdG8gYmUg c3RvcmVkLgoKPiArCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBjb3JlLT5p cnEsIE5VTEwsCj4gKwkJCQkJeHNkaXJ4c3NfaXJxX2hhbmRsZXIsIElSUUZfT05FU0hPVCwKPiAr CQkJCQlkZXZfbmFtZShkZXYpLCB4c2Rpcnhzcyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vy cihkZXYsICJFcnIgPSAlZCBJbnRlcnJ1cHQgaGFuZGxlciByZWcgZmFpbGVkIVxuIiwKPiArCQkJ cmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWNvcmUtPm51bV9jbGtzID0gQVJS QVlfU0laRSh4c2Rpcnhzc19jbGtzKTsKPiArCWNvcmUtPmNsa3MgPSBkZXZtX2tjYWxsb2MoZGV2 LCBjb3JlLT5udW1fY2xrcywKPiArCQkJCSAgc2l6ZW9mKCpjb3JlLT5jbGtzKSwgR0ZQX0tFUk5F TCk7Cj4gKwlpZiAoIWNvcmUtPmNsa3MpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJZm9y IChpID0gMDsgaSA8IGNvcmUtPm51bV9jbGtzOyBpKyspCj4gKwkJY29yZS0+Y2xrc1tpXS5pZCA9 IHhzZGlyeHNzX2Nsa3NbaV07Cj4gKwo+ICsJcmV0ID0gZGV2bV9jbGtfYnVsa19nZXQoZGV2LCBj b3JlLT5udW1fY2xrcywgY29yZS0+Y2xrcyk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7 Cj4gKwo+ICsJcmV0ID0gY2xrX2J1bGtfcHJlcGFyZV9lbmFibGUoY29yZS0+bnVtX2Nsa3MsIGNv cmUtPmNsa3MpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldCA9IHhz ZGlyeHNzX3BhcnNlX29mKHhzZGlyeHNzKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gY2xr X2VycjsKPiArCj4gKwljb3JlLT5pb21lbSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJj ZShwZGV2LCAwKTsKPiArCWlmIChJU19FUlIoY29yZS0+aW9tZW0pKSB7Cj4gKwkJcmV0ID0gUFRS X0VSUihjb3JlLT5pb21lbSk7Cj4gKwkJZ290byBjbGtfZXJyOwo+ICsJfQo+ICsKPiArCS8qIFJl c2V0IHRoZSBjb3JlICovCj4gKwl4c2Rpcnhfc3RyZWFtZmxvd19jb250cm9sKGNvcmUsIGZhbHNl KTsKPiArCXhzZGlyeF9jb3JlX2Rpc2FibGUoY29yZSk7Cj4gKwl4c2RpcnhfY2xlYXJpbnRyKGNv cmUsIFhTRElSWF9JTlRSX0FMTF9NQVNLKTsKPiArCXhzZGlyeF9kaXNhYmxlaW50cihjb3JlLCBY U0RJUlhfSU5UUl9BTExfTUFTSyk7Cj4gKwl4c2RpcnhfZW5hYmxlaW50cihjb3JlLCBYU0RJUlhf SU5UUl9BTExfTUFTSyk7Cj4gKwl4c2RpcnhfZ2xvYmFsaW50cihjb3JlLCB0cnVlKTsKPiArCXhz ZGlyeHNzX3dyaXRlKGNvcmUsIFhTRElSWF9DUkNfRVJSQ05UX1JFRywgMHhGRkZGKTsKPiArCj4g KwkvKiBJbml0aWFsaXplIFY0TDIgc3ViZGV2aWNlIGFuZCBtZWRpYSBlbnRpdHkgKi8KPiArCXhz ZGlyeHNzLT5wYWQuZmxhZ3MgPSBNRURJQV9QQURfRkxfU09VUkNFOwo+ICsKPiArCS8qIEluaXRp YWxpemUgdGhlIGRlZmF1bHQgZm9ybWF0ICovCj4gKwlpZiAoY29yZS0+YnBjID09IDEwKQo+ICsJ CXhzZGlyeHNzLT5kZWZhdWx0X2Zvcm1hdC5jb2RlID0gTUVESUFfQlVTX0ZNVF9VWVZZMTBfMVgy MDsKPiArCWVsc2UKPiArCQl4c2Rpcnhzcy0+ZGVmYXVsdF9mb3JtYXQuY29kZSA9IE1FRElBX0JV U19GTVRfVVlWWTEyXzFYMjQ7Cj4gKwl4c2Rpcnhzcy0+ZGVmYXVsdF9mb3JtYXQuZmllbGQgPSBW NEwyX0ZJRUxEX05PTkU7Cj4gKwl4c2Rpcnhzcy0+ZGVmYXVsdF9mb3JtYXQuY29sb3JzcGFjZSA9 IFY0TDJfQ09MT1JTUEFDRV9ERUZBVUxUOwo+ICsJeHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0Lndp ZHRoID0gWFNESVJYX0RFRkFVTFRfV0lEVEg7Cj4gKwl4c2Rpcnhzcy0+ZGVmYXVsdF9mb3JtYXQu aGVpZ2h0ID0gWFNESVJYX0RFRkFVTFRfSEVJR0hUOwo+ICsKPiArCXhzZGlyeHNzLT5mb3JtYXQg PSB4c2Rpcnhzcy0+ZGVmYXVsdF9mb3JtYXQ7Cj4gKwo+ICsJLyogSW5pdGlhbGl6ZSBWNEwyIHN1 YmRldmljZSBhbmQgbWVkaWEgZW50aXR5ICovCj4gKwlzdWJkZXYgPSAmeHNkaXJ4c3MtPnN1YmRl djsKPiArCXY0bDJfc3ViZGV2X2luaXQoc3ViZGV2LCAmeHNkaXJ4c3Nfb3BzKTsKPiArCj4gKwlz dWJkZXYtPmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJzY3B5KHN1YmRldi0+bmFtZSwgZGV2X25h bWUoZGV2KSwgc2l6ZW9mKHN1YmRldi0+bmFtZSkpOwo+ICsKPiArCXN1YmRldi0+ZmxhZ3MgfD0g VjRMMl9TVUJERVZfRkxfSEFTX0VWRU5UUyB8IFY0TDJfU1VCREVWX0ZMX0hBU19ERVZOT0RFOwoK SSBndWVzcyBpdCBkb2Vzbid0IG1hdHRlciwgYnV0IHRoaXMgY2FuIGJlIGFzc2lnbmVkIGRpcmVj dGx5IHRvIGJlIGNsZWFyZXIsIG5vdApPUmVkLgoKPiArCj4gKwlzdWJkZXYtPmVudGl0eS5vcHMg PSAmeHNkaXJ4c3NfbWVkaWFfb3BzOwo+ICsKPiArCXY0bDJfc2V0X3N1YmRldmRhdGEoc3ViZGV2 LCB4c2Rpcnhzcyk7Cj4gKwo+ICsJcmV0ID0gbWVkaWFfZW50aXR5X3BhZHNfaW5pdCgmc3ViZGV2 LT5lbnRpdHksIDEsICZ4c2Rpcnhzcy0+cGFkKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8g ZXJyb3I7Cj4gKwo+ICsJLyogSW5pdGlhbGlzZSBhbmQgcmVnaXN0ZXIgdGhlIGNvbnRyb2xzICov Cj4gKwludW1fY3RybHMgPSBBUlJBWV9TSVpFKHhzZGlyeHNzX2N0cmxzKTsKPiArCj4gKwlpZiAo Y29yZS0+aW5jbHVkZV9lZGgpCj4gKwkJbnVtX2VkaF9jdHJscyA9IEFSUkFZX1NJWkUoeHNkaXJ4 c3NfZWRoX2N0cmxzKTsKPiArCj4gKwl2NGwyX2N0cmxfaGFuZGxlcl9pbml0KCZ4c2Rpcnhzcy0+ Y3RybF9oYW5kbGVyLAo+ICsJCQkgICAgICAgKG51bV9jdHJscyArIG51bV9lZGhfY3RybHMpKTsK PiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2N0cmxzOyBpKyspIHsKPiArCQlzdHJ1Y3QgdjRs Ml9jdHJsICpjdHJsOwo+ICsKPiArCQlkZXZfZGJnKGRldiwgIiVkICVzIGN0cmwgPSAweCV4XG4i LCBpLCB4c2Rpcnhzc19jdHJsc1tpXS5uYW1lLAo+ICsJCQl4c2Rpcnhzc19jdHJsc1tpXS5pZCk7 Cj4gKwo+ICsJCWN0cmwgPSB2NGwyX2N0cmxfbmV3X2N1c3RvbSgmeHNkaXJ4c3MtPmN0cmxfaGFu ZGxlciwKPiArCQkJCQkgICAgJnhzZGlyeHNzX2N0cmxzW2ldLCBOVUxMKTsKPiArCQlpZiAoIWN0 cmwpIHsKPiArCQkJZGV2X2RiZyhkZXYsICJGYWlsZWQgdG8gYWRkICVzIGN0cmxcbiIsCj4gKwkJ CQl4c2Rpcnhzc19jdHJsc1tpXS5uYW1lKTsKPiArCQkJZ290byBlcnJvcjsKPiArCQl9Cj4gKwl9 Cj4gKwo+ICsJaWYgKGNvcmUtPmluY2x1ZGVfZWRoKSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IG51 bV9lZGhfY3RybHM7IGkrKykgewo+ICsJCQlzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsOwo+ICsKPiAr CQkJZGV2X2RiZyhkZXYsICIlZCAlcyBjdHJsID0gMHgleFxuIiwgaSwKPiArCQkJCXhzZGlyeHNz X2VkaF9jdHJsc1tpXS5uYW1lLAo+ICsJCQkJeHNkaXJ4c3NfZWRoX2N0cmxzW2ldLmlkKTsKPiAr Cj4gKwkJCWN0cmwgPSB2NGwyX2N0cmxfbmV3X2N1c3RvbSgmeHNkaXJ4c3MtPmN0cmxfaGFuZGxl ciwKPiArCQkJCQkJICAgICZ4c2Rpcnhzc19lZGhfY3RybHNbaV0sCj4gKwkJCQkJCSAgICBOVUxM KTsKPiArCQkJaWYgKCFjdHJsKSB7Cj4gKwkJCQlkZXZfZGJnKGRldiwgIkZhaWxlZCB0byBhZGQg JXMgY3RybFxuIiwKPiArCQkJCQl4c2Rpcnhzc19lZGhfY3RybHNbaV0ubmFtZSk7Cj4gKwkJCQln b3RvIGVycm9yOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmICh4c2Rpcnhzcy0+Y3Ry bF9oYW5kbGVyLmVycm9yKSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIGNvbnRy b2xzXG4iKTsKPiArCQlyZXQgPSB4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyLmVycm9yOwo+ICsJCWdv dG8gZXJyb3I7Cj4gKwl9Cj4gKwo+ICsJc3ViZGV2LT5jdHJsX2hhbmRsZXIgPSAmeHNkaXJ4c3Mt PmN0cmxfaGFuZGxlcjsKPiArCj4gKwlyZXQgPSB2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgmeHNk aXJ4c3MtPmN0cmxfaGFuZGxlcik7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIHNldCBjb250cm9sc1xuIik7Cj4gKwkJZ290byBlcnJvcjsKPiArCX0KPiAr Cj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB4c2Rpcnhzcyk7Cj4gKwo+ICsJcmV0ID0g djRsMl9hc3luY19yZWdpc3Rlcl9zdWJkZXYoc3ViZGV2KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4g KwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgc3ViZGV2XG4iKTsKPiArCQlnb3Rv IGVycm9yOwo+ICsJfQo+ICsKPiArCXhzZGlyeHNzLT5zdHJlYW1pbmcgPSBmYWxzZTsKCklzIHRo aXMgbmVlZGVkPwoKPiArCj4gKwl4c2RpcnhfY29yZV9lbmFibGUoY29yZSk7Cj4gKwo+ICsJZGV2 X2luZm8oZGV2LCAicHJvYmUgc3VjY2Vzc1xuIik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK2Vycm9y Ogo+ICsJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmeHNkaXJ4c3MtPmN0cmxfaGFuZGxlcik7Cj4g KwltZWRpYV9lbnRpdHlfY2xlYW51cCgmc3ViZGV2LT5lbnRpdHkpOwo+ICsJeHNkaXJ4X2dsb2Jh bGludHIoY29yZSwgZmFsc2UpOwo+ICsJeHNkaXJ4X2Rpc2FibGVpbnRyKGNvcmUsIFhTRElSWF9J TlRSX0FMTF9NQVNLKTsKPiArY2xrX2VycjoKPiArCWNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJl KGNvcmUtPm51bV9jbGtzLCBjb3JlLT5jbGtzKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgeHNkaXJ4c3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cj4gK3sKPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSBwbGF0Zm9ybV9nZXRf ZHJ2ZGF0YShwZGV2KTsKPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnhzZGlyeHNz LT5jb3JlOwo+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYgPSAmeHNkaXJ4c3MtPnN1YmRl djsKPiArCj4gKwl2NGwyX2FzeW5jX3VucmVnaXN0ZXJfc3ViZGV2KHN1YmRldik7Cj4gKwl2NGwy X2N0cmxfaGFuZGxlcl9mcmVlKCZ4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyKTsKPiArCW1lZGlhX2Vu dGl0eV9jbGVhbnVwKCZzdWJkZXYtPmVudGl0eSk7Cj4gKwo+ICsJeHNkaXJ4X2dsb2JhbGludHIo Y29yZSwgZmFsc2UpOwo+ICsJeHNkaXJ4X2Rpc2FibGVpbnRyKGNvcmUsIFhTRElSWF9JTlRSX0FM TF9NQVNLKTsKPiArCXhzZGlyeF9jb3JlX2Rpc2FibGUoY29yZSk7CgpJIGJlbGlldmUgdGhlIGNv cmUgaGFzIHRvIGJlIGRpc2FibGVkIGZpcnN0LgoKPiArCXhzZGlyeF9zdHJlYW1mbG93X2NvbnRy b2woY29yZSwgZmFsc2UpOwoKQnV0IHRvIGJlIHNhZmVyIHNpZGUsIG1heWJlIGFsbCB0aGVzZSBj YW4gYmUgZG9uZSBmaXJzdD8gU2ltaWxhciBmb3IgZW5hYmxlLApzbyBlbmFibGluZyBhbGwgYWZ0 ZXIgdjRsL21lZGlhIHJlZ2lzdHJhdGlvbnM/CgpUaGFua3MsCi1oeXVuCgo+ICsKPiArCWNsa19i dWxrX2Rpc2FibGVfdW5wcmVwYXJlKGNvcmUtPm51bV9jbGtzLCBjb3JlLT5jbGtzKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg eHNkaXJ4c3Nfb2ZfaWRfdGFibGVbXSA9IHsKPiArCXsgLmNvbXBhdGlibGUgPSAieGxueCx2LXNt cHRlLXVoZHNkaS1yeC1zcy0yLjAiIH0sCj4gKwl7IH0KPiArfTsKPiArTU9EVUxFX0RFVklDRV9U QUJMRShvZiwgeHNkaXJ4c3Nfb2ZfaWRfdGFibGUpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgeHNkaXJ4c3NfZHJpdmVyID0gewo+ICsJLmRyaXZlciA9IHsKPiArCQkubmFt ZQkJPSAieGlsaW54LXNkaXJ4c3MiLAo+ICsJCS5vZl9tYXRjaF90YWJsZQk9IHhzZGlyeHNzX29m X2lkX3RhYmxlLAo+ICsJfSwKPiArCS5wcm9iZQkJCT0geHNkaXJ4c3NfcHJvYmUsCj4gKwkucmVt b3ZlCQkJPSB4c2Rpcnhzc19yZW1vdmUsCj4gK307Cj4gKwo+ICttb2R1bGVfcGxhdGZvcm1fZHJp dmVyKHhzZGlyeHNzX2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJWaXNoYWwgU2FnYXIg PHZzYWdhckB4aWxpbnguY29tPiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlhpbGlueCBTREkg UnggU3Vic3lzdGVtIERyaXZlciIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gZGlm ZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngtc2Rpcnhzcy5oIGIvaW5jbHVkZS91 YXBpL2xpbnV4L3hpbGlueC1zZGlyeHNzLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAwMDAwMC4uNmYyYTA5Mzk2OGQ5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1 ZGUvdWFwaS9saW51eC94aWxpbngtc2Rpcnhzcy5oCj4gQEAgLTAsMCArMSwxNzkgQEAKPiArLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUg Ki8KPiArLyoKPiArICogWGlsaW54IFNESSBSeCBTdWJzeXN0ZW0gbW9kZSwgZXZlbnQsIGN1c3Rv bSB0aW1pbmdzCgpOaXQuICcsJyBhdCB0aGUgZW5kLgoKPiArICogYW5kIGZsYWcgZGVmaW5pdGlv bnMuCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOSAtIDIwMjAgWGlsaW54LCBJbmMuCj4g KyAqCj4gKyAqIENvbnRhY3RzOiBWaXNoYWwgU2FnYXIgPHZpc2hhbC5zYWdhckB4aWxpbnguY29t Pgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19VQVBJX1hJTElOWF9TRElSWFNTX0hfXwo+ICsjZGVm aW5lIF9fVUFQSV9YSUxJTlhfU0RJUlhTU19IX18KPiArCj4gKyNpbmNsdWRlIDxsaW51eC90eXBl cy5oPgo+ICsjaW5jbHVkZSA8bGludXgvdjRsMi1kdi10aW1pbmdzLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC92aWRlb2RldjIuaD4KPiArCj4gKy8qCj4gKyAqIEV2ZW50cwo+ICsgKgo+ICsgKiBWNEwy X0VWRU5UX1hJTElOWF9TRElSWF9VTkRFUkZMT1c6IFZpZGVvIGluIHRvIEFYSTQgU3RyZWFtIGNv cmUgdW5kZXJmbG93ZWQKPiArICogVjRMMl9FVkVOVF9YSUxJTlhfU0RJUlhfT1ZFUkZMT1c6IFZp ZGVvIGluIHRvIEFYSTQgU3RyZWFtIGNvcmUgb3ZlcmZsb3dlZAo+ICsgKi8KPiArI2RlZmluZSBW NEwyX0VWRU5UX1hJTElOWF9TRElSWF9DTEFTUyAgICAgIChWNEwyX0VWRU5UX1BSSVZBVEVfU1RB UlQgfCAweDIwMCkKPiArI2RlZmluZSBWNEwyX0VWRU5UX1hJTElOWF9TRElSWF9VTkRFUkZMT1cg IChWNEwyX0VWRU5UX1hJTElOWF9TRElSWF9DTEFTUyB8IDB4MSkKPiArI2RlZmluZSBWNEwyX0VW RU5UX1hJTElOWF9TRElSWF9PVkVSRkxPVyAgIChWNEwyX0VWRU5UX1hJTElOWF9TRElSWF9DTEFT UyB8IDB4MikKClNpbmNlIHRoaXMgaXMgbWFueSBkZWZpbml0aW9ucyBmb3IgYSBzaW5nbGUgc3Vi ZGV2LCBkbyB5b3UgdGhpbmsgc29tZSBvZiB0aGVzZQpjYW4gYmUgbWluaW1pemVkPyBGb3IgZXhh bXBsZSwgaWYgdGhlIGFjdGlvbiBmb3IgdW5kZXJmbG93L292ZXJmbG93IGlzbid0CmRpZmZlcmVu dCwgcmVzZXR0aW5nIHRoZSBkZXZpY2UsIHRoZW4gdGhlc2UgY2FuIGZvbGQgaW50byBvbmUgZXZl bnQuCgoKQ291bGQgeW91IGRvdWJsZS1jaGVjayBzb21lIGJlbG93IHRvbz8gVW5sZXNzIGVhY2gg aXMgYXNzb2NpYXRlZCB3aXRoIGRpZmZlcmVudApoYW5kbGluZywgaXQnZCBiZSBnb29kIHRvIG1p bmltaXplIHRoZSB1c2VyIGludGVyZmFjZSwgZXggYnkgbWVyZ2luZyBvciBldmVuCnJlbW92aW5n LgoKVGhhbmtzLAotaHl1bgoKPiArCj4gKy8qCj4gKyAqIFRoaXMgZW51bSBpcyB1c2VkIHRvIHBy ZXBhcmUgdGhlIGJpdG1hc2sgb2YgbW9kZXMgdG8gYmUgZGV0ZWN0ZWQKPiArICovCj4gK2VudW0g ewo+ICsJWFNESVJYX01PREVfU0RfT0ZGU0VUID0gMCwKPiArCVhTRElSWF9NT0RFX0hEX09GRlNF VCwKPiArCVhTRElSWF9NT0RFXzNHX09GRlNFVCwKPiArCVhTRElSWF9NT0RFXzZHX09GRlNFVCwK PiArCVhTRElSWF9NT0RFXzEyR0lfT0ZGU0VULAo+ICsJWFNESVJYX01PREVfMTJHRl9PRkZTRVQs Cj4gKwlYU0RJUlhfTU9ERV9OVU1fU1VQUE9SVEVELAo+ICt9Owo+ICsKPiArI2RlZmluZSBYU0RJ UlhfREVURUNUX0FMTF9NT0RFUwkJKEJJVChYU0RJUlhfTU9ERV9TRF9PRkZTRVQpIHwgXAo+ICsJ CQkJCUJJVChYU0RJUlhfTU9ERV9IRF9PRkZTRVQpIHwgXAo+ICsJCQkJCUJJVChYU0RJUlhfTU9E RV8zR19PRkZTRVQpIHwgXAo+ICsJCQkJCUJJVChYU0RJUlhfTU9ERV82R19PRkZTRVQpIHwgXAo+ ICsJCQkJCUJJVChYU0RJUlhfTU9ERV8xMkdJX09GRlNFVCkgfCBcCj4gKwkJCQkJQklUKFhTRElS WF9NT0RFXzEyR0ZfT0ZGU0VUKSkKPiArCj4gKy8qCj4gKyAqIEVESCBFcnJvciBUeXBlcwo+ICsg KiBBTkMgLSBBbmNpbGxhcnkgRGF0YSBQYWNrZXQgRXJyb3JzCj4gKyAqIEZGIC0gRnVsbCBGaWVs ZCBFcnJvcnMKPiArICogQVAgLSBBY3RpdmUgUG9ydGlvbiBFcnJvcnMKPiArICovCj4gKwo+ICsj ZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FOQ19FREhfRVJSCQlCSVQoMCkKPiArI2RlZmluZSBY U0RJUlhfRURIX0VSUkNOVF9BTkNfRURBX0VSUgkJQklUKDEpCj4gKyNkZWZpbmUgWFNESVJYX0VE SF9FUlJDTlRfQU5DX0lESF9FUlIJCUJJVCgyKQo+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05U X0FOQ19JREFfRVJSCQlCSVQoMykKPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BTkNfVUVT X0VSUgkJQklUKDQpCj4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfRkZfRURIX0VSUgkJQklU KDUpCj4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfRkZfRURBX0VSUgkJQklUKDYpCj4gKyNk ZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfRkZfSURIX0VSUgkJQklUKDcpCj4gKyNkZWZpbmUgWFNE SVJYX0VESF9FUlJDTlRfRkZfSURBX0VSUgkJQklUKDgpCj4gKyNkZWZpbmUgWFNESVJYX0VESF9F UlJDTlRfRkZfVUVTX0VSUgkJQklUKDkpCj4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQVBf RURIX0VSUgkJQklUKDEwKQo+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FQX0VEQV9FUlIJ CUJJVCgxMSkKPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BUF9JREhfRVJSCQlCSVQoMTIp Cj4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQVBfSURBX0VSUgkJQklUKDEzKQo+ICsjZGVm aW5lIFhTRElSWF9FREhfRVJSQ05UX0FQX1VFU19FUlIJCUJJVCgxNCkKPiArI2RlZmluZSBYU0RJ UlhfRURIX0VSUkNOVF9QS1RfQ0hLU1VNX0VSUglCSVQoMTUpCj4gKwo+ICsjZGVmaW5lIFhTRElS WF9FREhfQUxMRVJSX01BU0sJCTB4RkZGRgo+ICsKPiArLyogWGlsaW54IERWIHRpbWluZ3Mgbm90 IGluIG1haW5saW5lIHlldCAqLwo+ICsjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQ MjQgeyBcCj4gKwkudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsIFwKPiArCVY0TDJfSU5JVF9C VF9USU1JTkdTKDIwNDgsIDEwODAsIDAsIFwKPiArCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBW NEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwKPiArCQk3NDI1MDAwMCwgNTEwLCA0NCwgMTQ4LCA0LCA1 LCAzNiwgMCwgMCwgMCwgXAo+ICsJCVY0TDJfRFZfQlRfU1REX1NESSkgXAo+ICt9Cj4gKwo+ICsj ZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQMjUgeyBcCj4gKwkudHlwZSA9IFY0TDJf RFZfQlRfNjU2XzExMjAsIFwKPiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDIwNDgsIDEwODAsIDAs IFwKPiArCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwK PiArCQk3NDI1MDAwMCwgNDAwLCA0NCwgMTQ4LCA0LCA1LCAzNiwgMCwgMCwgMCwgXAo+ICsJCVY0 TDJfRFZfQlRfU1REX1NESSkgXAo+ICt9Cj4gKwo+ICsjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8y MDQ4WDEwODBQMzAgeyBcCj4gKwkudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsIFwKPiArCVY0 TDJfSU5JVF9CVF9USU1JTkdTKDIwNDgsIDEwODAsIDAsIFwKPiArCQlWNEwyX0RWX0hTWU5DX1BP U19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwKPiArCQk3NDI1MDAwMCwgNjYsIDIwLCA2 NiwgNCwgNSwgMzYsIDAsIDAsIDAsIFwKPiArCQlWNEwyX0RWX0JUX1NURF9TREkpIFwKPiArfQo+ ICsKPiArI2RlZmluZSBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwSTQ4IHsgXAo+ICsJLnR5cGUg PSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCBcCj4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAx MDgwLCAxLCBcCj4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1Nf UE9MLCBcCj4gKwkJNzQyNTAwMDAsIDMyOSwgNDQsIDMyOSwgMiwgNSwgMTUsIDMsIDUsIDE1LCBc Cj4gKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcCj4gK30KPiArCj4gKyNkZWZpbmUgWExOWF9WNEwy X0RWX0JUXzIwNDhYMTA4MEk1MCB7IFwKPiArCS50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwg XAo+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMjA0OCwgMTA4MCwgMSwgXAo+ICsJCVY0TDJfRFZf SFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXAo+ICsJCTc0MjUwMDAwLCAy NzQsIDQ0LCAyNzQsIDIsIDUsIDE1LCAzLCA1LCAxNSwgXAo+ICsJCVY0TDJfRFZfQlRfU1REX1NE SSkgXAo+ICt9Cj4gKwo+ICsjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBJNjAgeyBc Cj4gKwkudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsIFwKPiArCVY0TDJfSU5JVF9CVF9USU1J TkdTKDIwNDgsIDEwODAsIDEsIFwKPiArCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RW X1ZTWU5DX1BPU19QT0wsIFwKPiArCQk3NDI1MDAwMCwgNjYsIDIwLCA2NiwgMiwgNSwgMTUsIDMs IDUsIDE1LCBcCj4gKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcCj4gK30KPiArCj4gKyNkZWZpbmUg WExOWF9WNEwyX0RWX0JUXzE5MjBYMTA4MFA0OCB7IFwKPiArCS50eXBlID0gVjRMMl9EVl9CVF82 NTZfMTEyMCwgXAo+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMTkyMCwgMTA4MCwgMCwgXAo+ICsJ CVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXAo+ICsJCTE0 ODUwMDAwMCwgNjM4LCA0NCwgMTQ4LCA0LCA1LCAzNiwgMCwgMCwgMCwgXAo+ICsJCVY0TDJfRFZf QlRfU1REX1NESSkgXAo+ICt9Cj4gKwo+ICsjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEw ODBQNDggeyBcCj4gKwkudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsIFwKPiArCVY0TDJfSU5J VF9CVF9USU1JTkdTKDIwNDgsIDEwODAsIDAsIFwKPiArCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wg fCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwKPiArCQkxNDg1MDAwMDAsIDUxMCwgNDQsIDE0OCwg NCwgNSwgMzYsIDAsIDAsIDAsIFwKPiArCQlWNEwyX0RWX0JUX1NURF9TREkpIFwKPiArfQo+ICsK PiArI2RlZmluZSBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDUwIHsgXAo+ICsJLnR5cGUgPSBW NEwyX0RWX0JUXzY1Nl8xMTIwLCBcCj4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgw LCAwLCBcCj4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9M LCBcCj4gKwkJMTQ4NTAwMDAwLCA0MDAsIDQ0LCAxNDgsIDQsIDUsIDM2LCAwLCAwLCAwLCBcCj4g KwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcCj4gK30KPiArCj4gKyNkZWZpbmUgWExOWF9WNEwyX0RW X0JUXzIwNDhYMTA4MFA2MCB7IFwKPiArCS50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgXAo+ ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMjA0OCwgMTA4MCwgMCwgXAo+ICsJCVY0TDJfRFZfSFNZ TkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXAo+ICsJCTE0ODUwMDAwMCwgODgs IDQ0LCAyMCwgNCwgNSwgMzYsIDAsIDAsIDAsIFwKPiArCQlWNEwyX0RWX0JUX1NURF9TREkpIFwK PiArfQo+ICsKPiArI2RlZmluZSBYTE5YX1Y0TDJfRFZfQlRfMzg0MFgyMTYwUDQ4IHsgXAo+ICsJ LnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCBcCj4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygz ODQwLCAyMTYwLCAwLCBcCj4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lO Q19QT1NfUE9MLCBcCj4gKwkJNTk0MDAwMDAwLCAxMjc2LCA4OCwgMjk2LCA4LCAxMCwgNzIsIDAs IDAsIDAsIFwKPiArCQlWNEwyX0RWX0JUX1NURF9TREkpIFwKPiArfQo+ICsKPiArI2RlZmluZSBY TE5YX1Y0TDJfRFZfQlRfNDA5NlgyMTYwUDQ4IHsgXAo+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1 Nl8xMTIwLCBcCj4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUyg0MDk2LCAyMTYwLCAwLCBcCj4gKwkJ VjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCBcCj4gKwkJNTk0 MDAwMDAwLCAxMDIwLCA4OCwgMjk2LCA4LCAxMCwgNzIsIDAsIDAsIDAsIFwKPiArCQlWNEwyX0RW X0JUX1NURF9TREkpIFwKPiArfQo+ICsKPiArI2RlZmluZSBYTE5YX1Y0TDJfRFZfQlRfMTkyMFgx MDgwSTQ4IHsgXAo+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCBcCj4gKwlWNEwyX0lO SVRfQlRfVElNSU5HUygxOTIwLCAxMDgwLCAxLCBcCj4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9M IHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCBcCj4gKwkJMTQ4NTAwMDAwLCAzNzEsIDg4LCAzNzEs IDIsIDUsIDE1LCAzLCA1LCAxNSwgXAo+ICsJCVY0TDJfRFZfQlRfU1REX1NESSkgXAo+ICt9Cj4g Kwo+ICsjZW5kaWYgLyogX19VQVBJX1hJTElOWF9TRElSWFNTX0hfXyAqLwo+IGRpZmYgLS1naXQg YS9pbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXY0bDItY29udHJvbHMuaCBiL2luY2x1ZGUvdWFw aS9saW51eC94aWxpbngtdjRsMi1jb250cm9scy5oCj4gaW5kZXggYjY0NDFmZTcwNWM1Li5lOWRl NjVlODI2NDIgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC12NGwyLWNv bnRyb2xzLmgKPiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXY0bDItY29udHJvbHMu aAo+IEBAIC03MSw0ICs3MSw3MSBAQAo+ICAvKiBOb2lzZSBsZXZlbCAqLwo+ICAjZGVmaW5lIFY0 TDJfQ0lEX1hJTElOWF9UUEdfTk9JU0VfR0FJTgkJKFY0TDJfQ0lEX1hJTElOWF9UUEcgKyAxNykK PiAgCj4gKy8qCj4gKyAqIFhpbGlueCBTREkgUnggU3Vic3lzdGVtCj4gKyAqLwo+ICsKPiArLyog VGhlIGJhc2UgZm9yIHRoZSBzZGkgcnggZHJpdmVyIGNvbnRyb2xzLgo+ICsgKiBXZSByZXNlcnZl IDMyIGNvbnRyb2xzIGZvciB0aGlzIGRyaXZlci4KPiArICoKPiArICogVGhlIFY0TDJfQ0lEX1hJ TElOWF9TRElSWF9FREhfKiBjb250cm9scyBhcmUgcHJlc2VudCBvbmx5IGlmCj4gKyAqIEVESCBp cyBlbmFibGVkLgo+ICsgKiBUaGUgY29udHJvbHMgd2hpY2ggY2FuIGJlIHNldCBzaG91bGQgb25s eSBiZSBzZXQgYmVmb3JlIGVuYWJsaW5nCj4gKyAqIHN0cmVhbWluZy4gVGhlIGNvbnRyb2xzIHdo aWNoIGNhbiBiZSBnb3Qgc2hvdWxkIGJlIGNhbGxlZCB3aGlsZQo+ICsgKiBzdHJlYW1pbmcgdG8g Z2V0IGNvcnJlY3QgdmFsdWVzLgo+ICsgKiBUaGUgVjRMMl9DSURfWElMSU5YX1NESVJYX01PREVf REVURUNUIGNhbiBiZSBjYWxsZWQgd2hlbiBxdWVyeSBkdiB0aW1pbmcKPiArICogcmV0dXJucyBh IHZhbGlkIHRpbWluZy4KPiArICovCj4gKwo+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElS WAkJCShWNEwyX0NJRF9YSUxJTlhfQkFTRSArIDB4MjApCj4gKwo+ICsvKiBGcmFtZXIgQ29udHJv bCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgZnJhbWVyICovCj4gKyNkZWZpbmUgVjRMMl9DSURf WElMSU5YX1NESVJYX0ZSQU1FUgkJKFY0TDJfQ0lEX1hJTElOWF9TRElSWCArIDEpCj4gKy8qCj4g KyAqIFZpZGVvIExvY2sgV2luZG93IENvbnRyb2wgdG8gc2V0IHRoZSB2aWRlbyBsb2NrIHdpbmRv dyB2YWx1ZQo+ICsgKiBUaGlzIGlzIHRoZSBhbW91bnQgb2YgdGltZSB0aGUgbW9kZSBhbmQgdHJh bnNwb3J0IHN0cmVhbSBuZWVkCj4gKyAqIHRvIGJlIGxvY2tlZCBiZWZvcmUgYSB2aWRlbyBsb2Nr IGludGVycnVwdCBvY2N1cnMuCj4gKyAqLwo+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElS WF9WSURMT0NLX1dJTkRPVwkoVjRMMl9DSURfWElMSU5YX1NESVJYICsgMikKPiArLyogRURIIEVy cm9yIE1hc2sgQ29udHJvbCB0byBlbmFibGUgRURIIGVycm9yIGNvdW50ICovCj4gKyNkZWZpbmUg VjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9FUlJDTlRfRU5BQkxFCShWNEwyX0NJRF9YSUxJTlhf U0RJUlggKyAzKQo+ICsvKgo+ICsgKiBNb2RlIHNlYXJjaCBDb250cm9sIHRvIHBhc3MgdGhlIGJp dCBtYXNrIG9mIG1vZGVzIHRvIGRldGVjdC4KPiArICoKPiArICogYml0IDAgc2V0IHRvIGRldGVj dCBTRCBtb2RlLAo+ICsgKiBiaXQgMSBzZXQgdG8gZGV0ZWN0IEhEIG1vZGUsCj4gKyAqIGJpdCAy IHNldCB0byBkZXRlY3QgM0cgKDNHQSAmIDNHQikgbW9kZSwKPiArICogYml0IDMgc2V0IHRvIGRl dGVjdCA2RyBtb2RlLAo+ICsgKiBiaXQgNCBzZXQgdG8gZGV0ZWN0IDEyRyBpbnRlZ2VyIGZyYW1l IHJhdGUgbW9kZSwKPiArICogYml0IDUgc2V0IHRvIGRldGVjdCAxMkcgZnJhY3Rpb25hbCBmcmFt ZSByYXRlIG1vZGUsCj4gKyAqLwo+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9TRUFS Q0hfTU9ERVMJKFY0TDJfQ0lEX1hJTElOWF9TRElSWCArIDQpCj4gKy8qCj4gKyAqIEdldCBEZXRl Y3RlZCBNb2RlIGNvbnRyb2wKPiArICoKPiArICogQ29udHJvbCBWYWx1ZSAtIE1vZGUgZGV0ZWN0 ZWQKPiArICogICAgICAgIDAgICAgICAtICAgICBTRAo+ICsgKiAgICAgICAgMSAgICAgIC0gICAg IEhECj4gKyAqICAgICAgICAyICAgICAgLSAgICAgM0cgKDNHQSAmIDNHQikKPiArICogICAgICAg IDMgICAgICAtICAgICA2Rwo+ICsgKiAgICAgICAgNCAgICAgIC0gICAgIDEyRyBpbnRlZ2VyIGZy YW1lIHJhdGUKPiArICogICAgICAgIDUgICAgICAtICAgICAxMkcgZnJhY3Rpb25hbCBmcmFtZSBy YXRlCj4gKyAqLwo+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9NT0RFX0RFVEVDVAko VjRMMl9DSURfWElMSU5YX1NESVJYICsgNSkKPiArLyogR2V0IG51bWJlciBvZiBDUkMgZXJyb3Jz IHN0YXR1cyBjb250cm9sICovCj4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYX0NSQwkJ KFY0TDJfQ0lEX1hJTElOWF9TRElSWCArIDYpCj4gKy8qIEdldCBFREggZXJyb3IgY291bnQgY29u dHJvbCAqLwo+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9FREhfRVJSQ05UCShWNEwy X0NJRF9YSUxJTlhfU0RJUlggKyA3KQo+ICsvKiBHZXQgRURIIHN0YXR1cyBjb250cm9sICovCj4g KyNkZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9TVEFUVVMJKFY0TDJfQ0lEX1hJTElO WF9TRElSWCArIDgpCj4gKy8qIEdldCBUcmFuc3BvcnQgSW50ZXJsYWNlZCBzdGF0dXMgd2hldGhl ciBpdCBpcyBpbnRlcmxhY2VkIG9yIG5vdCAqLwo+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9T RElSWF9UU19JU19JTlRFUkxBQ0VECShWNEwyX0NJRF9YSUxJTlhfU0RJUlggKyA5KQo+ICsvKiBH ZXQgbnVtYmVyIG9mIEFjdGl2ZSBTdHJlYW1zICovCj4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5Y X1NESVJYX0FDVElWRV9TVFJFQU1TCShWNEwyX0NJRF9YSUxJTlhfU0RJUlggKyAxMCkKPiArLyoK PiArICogR2V0IGlmIHRoZSBkZXRlY3RlZCBtb2RlIGlzIDNHQi4KPiArICogQ2FuIGJlIHVzZWQg dG8gZGlzdGluZ3Vpc2hlZCBiZXR3ZWVuIDNHQSBhbmQgM0dCCj4gKyAqLwo+ICsjZGVmaW5lIFY0 TDJfQ0lEX1hJTElOWF9TRElSWF9JU18zR0IJCShWNEwyX0NJRF9YSUxJTlhfU0RJUlggKyAxMSkK PiArCj4gICNlbmRpZiAvKiBfX1VBUElfWElMSU5YX1Y0TDJfQ09OVFJPTFNfSF9fICovCj4gLS0g Cj4gMi4yMS4wCj4gCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KPiBsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAo+IGxpbnV4LWFybS1rZXJu ZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwo+IGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo+IAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=