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=-9.8 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_GIT 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 C1964C433DF for ; Thu, 18 Jun 2020 05:34:38 +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 77DC6217A0 for ; Thu, 18 Jun 2020 05:34:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="tLoWCiU6"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=xilinx.onmicrosoft.com header.i=@xilinx.onmicrosoft.com header.b="BRJH9VGo" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 77DC6217A0 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:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=g1jOLbyV5R6lDX1UP72du7Q0sg8pX7q+7g26KTTllNw=; b=tLoWCiU6DPRMAV b42q2sCcHQpmlwNKNVwK7Zw0c99PHPF0vRA08M//SH5HV49e8Q4BQaiqxno4t4PxJCj7VoTfEanEX fbR8E6o6Rd2VnR0CAtF59Bwd0lH2hTq3zkqHmDmEG8vL9rgS/VNGXhq4s71jeF0j0nNFGD/3R+vfh /8pOHb+0iigcA4aniS93ceQE3MDhJy1BTCICwPDFx5jSk8OJYvzB56QT7F5WF9yJlITwgce3foYz2 i0gp8HuRtNGmAWB3TO/9zZHEA5xFFRUwTHplbUnAdWH8f90xE/TbWvAN72ckxf0UYhWPZNsLXWvKh y33zUL8U3eFR6UoE6G2w==; 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 1jlnC0-0006QP-EE; Thu, 18 Jun 2020 05:34:28 +0000 Received: from mail-co1nam11on2051.outbound.protection.outlook.com ([40.107.220.51] helo=NAM11-CO1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jlnBP-0005zc-O8 for linux-arm-kernel@lists.infradead.org; Thu, 18 Jun 2020 05:33:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l4P+NLPFvGRJ9dngVU/L9sF3tLH73jUKUYGvrNh1NzvLRJzgpPWc5Cb4HNINdjFkzHjBAnZHeb5Z+D9R3SOf4WsM/Re20CdQXzJIHWWQPogW+jPyIKdRcDFnkYvtygH1BbxVlFEqoHo9SgJ9on1Np6Ot7ZGCqFtmQ2C5ScwT/GJUvlTfVixVycYH2Yran9n7NXROOSBhv+LKFJFFGYlXT8C1OODhIZ8+2nM5jvWnCYdTW/4EEdCnOmimIVJO7pFcToqIqbVxF+Ve74CIenFmNreuGzab9q3qmYJzLGW8kuE6HGK37bc5TQnsn621dC8K36m8wQoPXfh9DOq/3CjHrQ== 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=6ItmItRxXi7rL08dUX3m95JBrH4uUtr0duobUEi3J/Y=; b=bGI+XL81Lzo8GQWbVw6dGVTJ1iw3lWLnW38GUkjKX5dXImi+rMNztjfpz1eEoZOF6o/3vN4wBsTdvJtGc81IN32ekrL4D34FoQK3ugia/xDW24+S2FR3dxV1wi7SVQCr7QCtcibt3OBuEdGNrqlHo1xXaQrD2/DKPWP4UjlYXjBRu+R3+ewEETMYI6EW+qC1crIWzvZfR5DJcayXDbCJZ0eAGYUTYaZLwMoaU7ojOr0Ct9yAmpDr0T1mEWvhbPgPJ25HJACiSrK3EnNe0wX+oudXQCYL56eHCkiCZ7ga9gcHeXssfuKPh8ppycHoYhN5R9oDXz7HxuhsuwXS3RCiHQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 149.199.60.83) smtp.rcpttodomain=ideasonboard.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=6ItmItRxXi7rL08dUX3m95JBrH4uUtr0duobUEi3J/Y=; b=BRJH9VGomsxq/Eb41pS8OGdYbN4N+2XJT6Hwps98b01wJvD8aWlRlGcdJZ66z/XuFvSr3d39ekWPuSRGAqqqPkWsdbL54CWGJuj69CknrpbTMx6Z8dIwF58rDTljX9wOg92kGV8BG74Gs+hkTvaFm/KUz+bLTzF5fMpMnHXe2Sc= Received: from SN2PR01CA0083.prod.exchangelabs.com (2603:10b6:800::51) by SN6PR02MB5677.namprd02.prod.outlook.com (2603:10b6:805:ed::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22; Thu, 18 Jun 2020 05:33:42 +0000 Received: from SN1NAM02FT036.eop-nam02.prod.protection.outlook.com (2603:10b6:800:0:cafe::c5) by SN2PR01CA0083.outlook.office365.com (2603:10b6:800::51) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22 via Frontend Transport; Thu, 18 Jun 2020 05:33:42 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 149.199.60.83) smtp.mailfrom=xilinx.com; ideasonboard.com; dkim=none (message not signed) header.d=none;ideasonboard.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 SN1NAM02FT036.mail.protection.outlook.com (10.152.72.149) with Microsoft SMTP Server id 15.20.3088.18 via Frontend Transport; Thu, 18 Jun 2020 05:33:41 +0000 Received: from [149.199.38.66] (port=59175 helo=xsj-pvapsmtp01) by xsj-pvapsmtpgw01 with esmtp (Exim 4.90) (envelope-from ) id 1jlnAC-0006zB-14; Wed, 17 Jun 2020 22:32:36 -0700 Received: from [127.0.0.1] (helo=localhost) by xsj-pvapsmtp01 with smtp (Exim 4.63) (envelope-from ) id 1jlnBF-0003UH-Cc; Wed, 17 Jun 2020 22:33:41 -0700 Received: from [10.140.6.6] (helo=xhdappanad40.xilinx.com) by xsj-pvapsmtp01 with esmtp (Exim 4.63) (envelope-from ) id 1jlnAx-0003Ok-A8; Wed, 17 Jun 2020 22:33:24 -0700 From: Vishal Sagar To: hyunk@xilinx.com, laurent.pinchart@ideasonboard.com, hverkuil@xs4all.nl, mchehab@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, michals@xilinx.com, linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, joe@perches.com Subject: [PATCH v3 3/3] media: v4l: xilinx: Add Xilinx UHD-SDI Rx Subsystem driver Date: Thu, 18 Jun 2020 11:03:04 +0530 Message-Id: <20200618053304.14551-4-vishal.sagar@xilinx.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200618053304.14551-1-vishal.sagar@xilinx.com> References: <20200618053304.14551-1-vishal.sagar@xilinx.com> MIME-Version: 1.0 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)(346002)(136003)(376002)(39860400002)(46966005)(44832011)(336012)(2616005)(36756003)(426003)(1076003)(478600001)(83380400001)(8676002)(81166007)(356005)(7416002)(8936002)(82310400002)(9786002)(186003)(70206006)(6666004)(82740400003)(26005)(2906002)(107886003)(47076004)(4326008)(316002)(5660300002)(30864003)(7696005)(70586007)(921003)(579004)(559001); DIR:OUT; SFP:1101; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 45d1963c-8b7d-4204-e79f-08d813492928 X-MS-TrafficTypeDiagnostic: SN6PR02MB5677: X-Microsoft-Antispam-PRVS: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-Oob-TLC-OOBClassifiers: OLM:1148; X-Forefront-PRVS: 0438F90F17 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2WPDruyDz2MWNYpE4TrswqVg1+yFQ1lO94+ZOUsEDd/Ey44Iji3rEoaeHcd27LpfckF42I4f8dIS0oX6IL5ADRldTvJdvAZYa7n0qPfBALYqsZ+/+CB6AocHEEo7rfHfSjzS8KUaMfbJZXey4Uv8cJXt2LxTR+8mM4fulL0wand8qiAinyGN+UAR13Hpf+c9erqqyg/cYhF7B9/DPeu0nUublVLg77WpWYgSzUj+eu2eyzAedvV9gaH6WYSlWLFAnva255zPULJOVzdF6sehFI3Gi1poc/ogdHNokYCJy+nIVJvroLboRs8fbzD79XcbdD93PVbzz8KVwZdd/s1V4lgtQK4JrpW1YxSf4IqoR4kgobDdbEtzztAnP3NJs4QkzImHJroDyXSdVqG4CFPigqTq9SZwWRlPwt8ehxC7D1I= X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jun 2020 05:33:41.6857 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 45d1963c-8b7d-4204-e79f-08d813492928 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: SN6PR02MB5677 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200617_223351_957605_D43B5614 X-CRM114-Status: GOOD ( 13.01 ) 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: sandipk@xilinx.com, dineshk@xilinx.com, Vishal Sagar 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 VGhlIFhpbGlueCBVSEQtU0RJIFJ4IHN1YnN5c3RlbSBzb2Z0IElQIGlzIHVzZWQgdG8gY2FwdHVy ZSBuYXRpdmUgU0RJCnN0cmVhbXMgZnJvbSBTREkgc291cmNlcyBsaWtlIFNESSBicm9hZGNhc3Qg ZXF1aXBtZW50IGxpa2UgY2FtZXJhcyBhbmQKbWl4ZXJzLiBUaGlzIGJsb2NrIG91dHB1dHMgZWl0 aGVyIG5hdGl2ZSBTREksIG5hdGl2ZSB2aWRlbyBvcgpBWEk0LVN0cmVhbSBjb21wbGlhbnQgZGF0 YSBzdHJlYW0gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4gUGxlYXNlIHJlZmVyCnRvIFBHMjkwIGZv ciBkZXRhaWxzLgoKVGhlIGRyaXZlciBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgSVAgdG8gYWRk IGZyYW1lciwgc2VhcmNoIGZvcgpzcGVjaWZpYyBtb2RlcywgZ2V0IHRoZSBkZXRlY3RlZCBtb2Rl LCBzdHJlYW0gcGFyYW1ldGVycywgZXJyb3JzLCBldGMuCkl0IGFsc28gZ2VuZXJhdGVzIGV2ZW50 cyBmb3IgdmlkZW8gbG9jay91bmxvY2ssIGJyaWRnZSBvdmVyL3VuZGVyIGZsb3cuCgpUaGUgZHJp dmVyIHN1cHBvcnRzIDEwLzEyIGJwYyBZVVYgNDIyIG1lZGlhIGJ1cyBmb3JtYXQgY3VycmVudGx5 LiBJdAphbHNvIGRlY29kZXMgdGhlIHN0cmVhbSBwYXJhbWV0ZXJzIGJhc2VkIG9uIHRoZSBTVDM1 MiBwYWNrZXQgZW1iZWRkZWQgaW4gdGhlCnN0cmVhbS4gSW4gY2FzZSB0aGUgU1QzNTIgcGFja2V0 IGlzbid0IHByZXNlbnQgaW4gdGhlIHN0cmVhbSwgdGhlIGNvcmUncwpkZXRlY3RlZCBwcm9wZXJ0 aWVzIGFyZSB1c2VkIHRvIHNldCBzdHJlYW0gcHJvcGVydGllcy4KClRoZSBkcml2ZXIgY3VycmVu dGx5IHN1cHBvcnRzIG9ubHkgdGhlIEFYSTQtU3RyZWFtIElQIGNvbmZpZ3VyYXRpb24uCgpTaWdu ZWQtb2ZmLWJ5OiBWaXNoYWwgU2FnYXIgPHZpc2hhbC5zYWdhckB4aWxpbnguY29tPgotLS0KdjMK LSBmaXhlZCBLQ29uZmlnIHdpdGggYmV0dGVyIGRlc2NyaXB0aW9uCi0gcmVtb3ZlZCB1bm5lY2Vz c2FyeSBoZWFkZXIgZmlsZXMKLSBjb252ZXJ0ZWQgdXBwZXJjYXNlIHRvIGxvd2VyY2FzZSBmb3Ig YWxsIGhleCB2YWx1ZXMKLSBtZXJnZWQgY29yZSBzdHJ1Y3QgdG8gc3RhdGUgc3RydWN0Ci0gcmVt b3ZlZCBtb3N0IG9uZSBsaW5lIGZ1bmN0aW9ucyBhbmQgcmVwbGFjZWQgd2l0aCBkaXJlY3QgcmVn CiAgcmVhZC93cml0ZSBvciBtYWNyb3MKLSBkdCBwcm9wZXJ0eSBicHAgdG8gYnBjLiBkZWZhdWx0 IDEwLiBub3QgbWFuZGF0b3J5LgotIGZpeGVkIHN1YnNjcmliZSBldmVudHMsIGxvZ19zdGF0dXMs IHNfc3RyZWFtCi0gbWVyZ2VkIG92ZXJmbG93L3VuZGVyZmxvdyB0byBvbmUgZXZlbnQKLSBtb3Zl ZCBhbGwgY29udHJvbHMgdG8geGlsaW54LXNkaXJ4c3MuaAotIG1heCBldmVudHMgZnJvbSAxMjgg dG8gOAotIHVzZWQgRklFTERfR0VUKCkgaW5zdGVhZCBvZiBjdXN0b20gbWFjcm8KLSB1cGRhdGVk IHRoZSBjb250cm9scyBkb2N1bWVudGF0aW9uCi0gYWRkZWQgc3BpbmxvY2sKLSByZW1vdmVkIDNH QiBjb250cm9sIGFuZCBhZGRlZCBtb2RlIHRvIGRldGVjdCBiaXRtYXNrCi0gZml4ZWQgZm9ybWF0 IGZvciAod2lkdGgsIGhlaWdodCwgY29sb3JzcGFjZSwgeGZlciBmdW5jLCBldGMpCi0gYWRkZWQg ZHZfdGltaW5nc19jYXAsIHMvZ19kdl90aW1pbmdzCi0gZml4ZWQgc2V0L2dldF9mb3JtYXQKLSBm aXggdjRsIGNvbnRyb2wgcmVnaXN0cmF0aW9ucwotIGZpeCBvcmRlciBvZiByZWdpc3RyYXRpb24g LyBkZXJlZ2lzdHJhdGlvbiBpbiBwcm9iZSgpIHJlbW92ZSgpCi0gZml4ZWQgb3RoZXIgY29tbWVu dHMgZnJvbSBIeXVuLCBMYXVyZW50IGFuZCBIYW5zCi0gdGhpbmdzIHlldCB0byBjbG9zZQogIC0g YWRkaW5nIHNvdXJjZSBwb3J0IGZvciBjb25uZWN0b3IgKExhdXJlbnQncyBzdWdnZXN0aW9uKQog IC0gYWRkaW5nIG5ldyBGSUVMRCB0eXBlIGZvciBUcmFuc3BvcnQgU3RyZWFtIFY0TDJfRklFTERf QUxURVJOQVRFX1BST0cgKEhhbidzIHN1Z2dlc3Rpb24pCiAgLSBVcGRhdGUgLyByZW1vdmUgRURI IG9yIENSQyByZWxhdGVkIGNvbnRyb2xzCgp2MgotIEFkZGVkIERWIHRpbWluZyBzdXBwb3J0IGJh c2VkIG9uIEhhbnMgVmVya3VpbMWbIGZlZWRiYWNrCi0gTW9yZSBkb2N1bWVudGF0aW9uIHRvIGN1 c3RvbSB2NGwgY29udHJvbHMgYW5kIGV2ZW50cwotIEZpeGVkIEh5dW7FmyBjb21tZW50cwotIEFk ZGVkIG1hY3JvIGZvciBtYXNraW5nIGFuZCBzaGlmdGluZyBhcyBwZXIgSm9lIFBlcmNoZXMgY29t bWVudHMKLSBVcGRhdGVkIHRvIGxhdGVzdCBhcyBwZXIgWGlsaW54IGdpdGh1YiByZXBvIGRyaXZl ciBsaWtlCiAgYWRkaW5nIG5ldyBEViB0aW1pbmdzIG5vdCBpbiBtYWlubGluZSB5ZXQgdXB0aWxs IDAzLzIxLzIwCgogZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvS2NvbmZpZyAgICAgICAg IHwgICAxMSArCiBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9NYWtlZmlsZSAgICAgICAg fCAgICAxICsKIC4uLi9tZWRpYS9wbGF0Zm9ybS94aWxpbngveGlsaW54LXNkaXJ4c3MuYyAgICB8 IDIxMjEgKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvdWFwaS9saW51eC92NGwyLWNvbnRyb2xz LmggICAgICAgICAgICB8ICAgIDYgKwogaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC1zZGlyeHNz LmggICAgICAgICAgIHwgIDI4MyArKysKIDUgZmlsZXMgY2hhbmdlZCwgMjQyMiBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngveGls aW54LXNkaXJ4c3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWFwaS9saW51eC94aWxp bngtc2Rpcnhzcy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngv S2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcKaW5kZXggMDFj OTZmYjY2NDE0Li41NzhjZGNjMTAzNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0veGlsaW54L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvS2Nv bmZpZwpAQCAtMTIsNiArMTIsMTcgQEAgY29uZmlnIFZJREVPX1hJTElOWAogCiBpZiBWSURFT19Y SUxJTlgKIAorY29uZmlnIFZJREVPX1hJTElOWF9TRElSWFNTCisJdHJpc3RhdGUgIlhpbGlueCBV SEQgU0RJIFJ4IFN1YnN5c3RlbSIKKwloZWxwCisJICBEcml2ZXIgZm9yIFhpbGlueCBVSEQtU0RJ IFJ4IFN1YnN5c3RlbS4gVGhpcyBpcyBhIFY0TCBzdWItZGV2aWNlCisJICBiYXNlZCBkcml2ZXIg dGhhdCB0YWtlcyBpbnB1dCBmcm9tIGEgU0RJIHNvdXJjZSBsaWtlIFNESSBjYW1lcmEgYW5kCisJ ICBjb252ZXJ0cyBpdCBpbnRvIGFuIEFYSTQtU3RyZWFtLiBUaGUgc3Vic3lzdGVtIGNvbXByaXNl cyBhIFNNUFRFCisJICBVSEQtU0RJIFJ4IGNvcmUsIGEgU0RJIFJ4IHRvIE5hdGl2ZSBWaWRlbyBi cmlkZ2UgYW5kIGEgVmlkZW8gSW4gdG8KKwkgIEFYSTQtU3RyZWFtIGJyaWRnZS4gVGhlIGRyaXZl ciBpcyB1c2VkIHRvIHNldCBkaWZmZXJlbnQgc3RyZWFtCisJICBkZXRlY3Rpb24gbW9kZXMgYW5k IGlkZW50aWZ5IHN0cmVhbSBwcm9wZXJ0aWVzIHRvIHByb3Blcmx5IGNvbmZpZ3VyZQorCSAgZG93 bnN0cmVhbS4KKwogY29uZmlnIFZJREVPX1hJTElOWF9UUEcKIAl0cmlzdGF0ZSAiWGlsaW54IFZp ZGVvIFRlc3QgUGF0dGVybiBHZW5lcmF0b3IiCiAJZGVwZW5kcyBvbiBWSURFT19YSUxJTlgKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L01ha2VmaWxlIGIvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvTWFrZWZpbGUKaW5kZXggNGNkYzBiMWVjN2E1Li4zYmVh ZjI0ZDgzMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L01ha2Vm aWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L01ha2VmaWxlCkBAIC0zLDUg KzMsNiBAQAogeGlsaW54LXZpZGVvLW9ianMgKz0geGlsaW54LWRtYS5vIHhpbGlueC12aXAubyB4 aWxpbngtdmlwcC5vCiAKIG9iai0kKENPTkZJR19WSURFT19YSUxJTlgpICs9IHhpbGlueC12aWRl by5vCitvYmotJChDT05GSUdfVklERU9fWElMSU5YX1NESVJYU1MpICs9IHhpbGlueC1zZGlyeHNz Lm8KIG9iai0kKENPTkZJR19WSURFT19YSUxJTlhfVFBHKSArPSB4aWxpbngtdHBnLm8KIG9iai0k KENPTkZJR19WSURFT19YSUxJTlhfVlRDKSArPSB4aWxpbngtdnRjLm8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L3hpbGlueC1zZGlyeHNzLmMgYi9kcml2ZXJzL21l ZGlhL3BsYXRmb3JtL3hpbGlueC94aWxpbngtc2Rpcnhzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uZTM5YWFiN2M2NTZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngveGlsaW54LXNkaXJ4c3MuYwpAQCAtMCwwICsxLDIx MjEgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogRHJpdmVy IGZvciBYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNyAt IDIwMjAgWGlsaW54LCBJbmMuCisgKgorICogQ29udGFjdHM6IFZpc2hhbCBTYWdhciA8dmlzaGFs LnNhZ2FyQHhpbGlueC5jb20+CisgKi8KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL21lZGlhL3hp bGlueC1zZGkuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRzLmg+CisjaW5jbHVkZSA8bGludXgvYml0 ZmllbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC94 aWxpbngtc2Rpcnhzcy5oPgorI2luY2x1ZGUgPG1lZGlhL21lZGlhLWVudGl0eS5oPgorI2luY2x1 ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWR2LXRpbWluZ3Mu aD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1z dWJkZXYuaD4KKworLyoKKyAqIFNESSBSeCByZWdpc3RlciBtYXAsIGJpdG1hc2sgYW5kIG9mZnNl dHMKKyAqLworI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfUkVHCQkweDAwCisjZGVmaW5lIFhTRElS WF9NRExfQ1RSTF9SRUcJCTB4MDQKKyNkZWZpbmUgWFNESVJYX0dMQkxfSUVSX1JFRwkJMHgwYwor I2RlZmluZSBYU0RJUlhfSVNSX1JFRwkJCTB4MTAKKyNkZWZpbmUgWFNESVJYX0lFUl9SRUcJCQkw eDE0CisjZGVmaW5lIFhTRElSWF9TVDM1Ml9WQUxJRF9SRUcJCTB4MTgKKyNkZWZpbmUgWFNESVJY X1NUMzUyX0RTMV9SRUcJCTB4MWMKKyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTM19SRUcJCTB4MjAK KyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTNV9SRUcJCTB4MjQKKyNkZWZpbmUgWFNESVJYX1NUMzUy X0RTN19SRUcJCTB4MjgKKyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTOV9SRUcJCTB4MmMKKyNkZWZp bmUgWFNESVJYX1NUMzUyX0RTMTFfUkVHCQkweDMwCisjZGVmaW5lIFhTRElSWF9TVDM1Ml9EUzEz X1JFRwkJMHgzNAorI2RlZmluZSBYU0RJUlhfU1QzNTJfRFMxNV9SRUcJCTB4MzgKKyNkZWZpbmUg WFNESVJYX1ZFUlNJT05fUkVHCQkweDNjCisjZGVmaW5lIFhTRElSWF9TU19DT05GSUdfUkVHCQkw eDQwCisjZGVmaW5lIFhTRElSWF9NT0RFX0RFVF9TVEFUX1JFRwkweDQ0CisjZGVmaW5lIFhTRElS WF9UU19ERVRfU1RBVF9SRUcJCTB4NDgKKyNkZWZpbmUgWFNESVJYX0VESF9TVEFUX1JFRwkJMHg0 YworI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9FTl9SRUcJMHg1MAorI2RlZmluZSBYU0RJUlhf RURIX0VSUkNOVF9SRUcJCTB4NTQKKyNkZWZpbmUgWFNESVJYX0NSQ19FUlJDTlRfUkVHCQkweDU4 CisjZGVmaW5lIFhTRElSWF9WSURfTE9DS19XSU5ET1dfUkVHCTB4NWMKKyNkZWZpbmUgWFNESVJY X1NUMzUyX0RTMl9SRUcJCTB4NzAKKyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTNF9SRUcJCTB4NzQK KyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTNl9SRUcJCTB4NzgKKyNkZWZpbmUgWFNESVJYX1NUMzUy X0RTOF9SRUcJCTB4N2MKKyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTMTBfUkVHCQkweDgwCisjZGVm aW5lIFhTRElSWF9TVDM1Ml9EUzEyX1JFRwkJMHg4NAorI2RlZmluZSBYU0RJUlhfU1QzNTJfRFMx NF9SRUcJCTB4ODgKKyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTMTZfUkVHCQkweDhjCisKKyNkZWZp bmUgWFNESVJYX1JTVF9DVFJMX1NTX0VOX01BU0sJCQlCSVQoMCkKKyNkZWZpbmUgWFNESVJYX1JT VF9DVFJMX1NSU1RfTUFTSwkJCUJJVCgxKQorI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfUlNUX0NS Q19FUlJDTlRfTUFTSwkJQklUKDIpCisjZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9SU1RfRURIX0VS UkNOVF9NQVNLCQlCSVQoMykKKyNkZWZpbmUgWFNESVJYX1JTVF9DVFJMX1NESVJYX0JSSURHRV9F TkJfTUFTSwkJQklUKDgpCisjZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9WSURJTl9BWEk0U19NT0Rf RU5CX01BU0sJQklUKDkpCisjZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9CUklER0VfQ0hfRk1UX09G RlNFVAkJMTAKKyNkZWZpbmUgWFNESVJYX1JTVF9DVFJMX0JSSURHRV9DSF9GTVRfTUFTSwkJR0VO TUFTSygxMiwgMTApCisjZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9CUklER0VfQ0hfRk1UX1lVVjQ0 NAkJMQorCisjZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9GUk1fRU5fTUFTSwkJQklUKDQpCisjZGVm aW5lIFhTRElSWF9NRExfQ1RSTF9NT0RFX0RFVF9FTl9NQVNLCUJJVCg1KQorI2RlZmluZSBYU0RJ UlhfTURMX0NUUkxfTU9ERV9IRF9FTl9NQVNLCQlCSVQoOCkKKyNkZWZpbmUgWFNESVJYX01ETF9D VFJMX01PREVfU0RfRU5fTUFTSwkJQklUKDkpCisjZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9NT0RF XzNHX0VOX01BU0sJCUJJVCgxMCkKKyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX01PREVfNkdfRU5f TUFTSwkJQklUKDExKQorI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV8xMkdJX0VOX01BU0sJ QklUKDEyKQorI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV8xMkdGX0VOX01BU0sJQklUKDEz KQorI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV9BVVRPX0RFVF9NQVNLCUdFTk1BU0soMTMs IDgpCisKKyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX0ZPUkNFRF9NT0RFX09GRlNFVAkxNgorI2Rl ZmluZSBYU0RJUlhfTURMX0NUUkxfRk9SQ0VEX01PREVfTUFTSwlHRU5NQVNLKDE4LCAxNikKKwor I2RlZmluZSBYU0RJUlhfR0xCTF9JTlRSX0VOX01BU0sJQklUKDApCisKKyNkZWZpbmUgWFNESVJY X0lOVFJfVklETE9DS19NQVNLCUJJVCgwKQorI2RlZmluZSBYU0RJUlhfSU5UUl9WSURVTkxPQ0tf TUFTSwlCSVQoMSkKKyNkZWZpbmUgWFNESVJYX0lOVFJfT1ZFUkZMT1dfTUFTSwlCSVQoOSkKKyNk ZWZpbmUgWFNESVJYX0lOVFJfVU5ERVJGTE9XX01BU0sJQklUKDEwKQorCisjZGVmaW5lIFhTRElS WF9JTlRSX0FMTF9NQVNLCShYU0RJUlhfSU5UUl9WSURMT0NLX01BU0sgfFwKKwkJCQlYU0RJUlhf SU5UUl9WSURVTkxPQ0tfTUFTSyB8XAorCQkJCVhTRElSWF9JTlRSX09WRVJGTE9XX01BU0sgfFwK KwkJCQlYU0RJUlhfSU5UUl9VTkRFUkZMT1dfTUFTSykKKworI2RlZmluZSBYU0RJUlhfU1QzNTJf VkFMSURfRFMxX01BU0sJQklUKDApCisjZGVmaW5lIFhTRElSWF9TVDM1Ml9WQUxJRF9EUzNfTUFT SwlCSVQoMSkKKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElEX0RTNV9NQVNLCUJJVCgyKQorI2Rl ZmluZSBYU0RJUlhfU1QzNTJfVkFMSURfRFM3X01BU0sJQklUKDMpCisjZGVmaW5lIFhTRElSWF9T VDM1Ml9WQUxJRF9EUzlfTUFTSwlCSVQoNCkKKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElEX0RT MTFfTUFTSwlCSVQoNSkKKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElEX0RTMTNfTUFTSwlCSVQo NikKKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElEX0RTMTVfTUFTSwlCSVQoNykKKworI2RlZmlu ZSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SWF9NT0RFX01BU0sJR0VOTUFTSygyLCAwKQorI2RlZmlu ZSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9NT0RFX0xPQ0tfTUFTSwlCSVQoMykKKyNkZWZpbmUgWFNE SVJYX01PREVfREVUX1NUQVRfQUNUX1NUUkVBTV9NQVNLCUdFTk1BU0soNiwgNCkKKyNkZWZpbmUg WFNESVJYX01PREVfREVUX1NUQVRfQUNUX1NUUkVBTV9PRkZTRVQJNAorI2RlZmluZSBYU0RJUlhf TU9ERV9ERVRfU1RBVF9MVkxCXzNHX01BU0sJQklUKDcpCisKKyNkZWZpbmUgWFNESVJYX1RTX0RF VF9TVEFUX0xPQ0tFRF9NQVNLCQlCSVQoMCkKKyNkZWZpbmUgWFNESVJYX1RTX0RFVF9TVEFUX1ND QU5fTUFTSwkJQklUKDEpCisjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9GQU1JTFlfTUFTSwkJ R0VOTUFTSyg3LCA0KQorI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV9NQVNLCQlHRU5N QVNLKDExLCA4KQorCisjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFX05PTkUJCTB4MAor I2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8yM185OEhaCQkweDIKKyNkZWZpbmUgWFNE SVJYX1RTX0RFVF9TVEFUX1JBVEVfMjRIWgkJMHgzCisjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RB VF9SQVRFXzQ3Xzk1SFoJCTB4NAorI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8yNUha CQkweDUKKyNkZWZpbmUgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfMjlfOTdIWgkJMHg2CisjZGVm aW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzMwSFoJCTB4NworI2RlZmluZSBYU0RJUlhfVFNf REVUX1NUQVRfUkFURV80OEhaCQkweDgKKyNkZWZpbmUgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVf NTBIWgkJMHg5CisjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzU5Xzk0SFoJCTB4YQor I2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV82MEhaCQkweGIKKworI2RlZmluZSBYU0RJ UlhfRURIX1NUQVRfRURIX0FQX01BU0sJQklUKDApCisjZGVmaW5lIFhTRElSWF9FREhfU1RBVF9F REhfRkZfTUFTSwlCSVQoMSkKKyNkZWZpbmUgWFNESVJYX0VESF9TVEFUX0VESF9BTkNfTUFTSwlC SVQoMikKKyNkZWZpbmUgWFNESVJYX0VESF9TVEFUX0FQX0ZMQUdfTUFTSwlHRU5NQVNLKDgsIDQp CisjZGVmaW5lIFhTRElSWF9FREhfU1RBVF9GRl9GTEFHX01BU0sJR0VOTUFTSygxMywgOSkKKyNk ZWZpbmUgWFNESVJYX0VESF9TVEFUX0FOQ19GTEFHX01BU0sJR0VOTUFTSygxOCwgMTQpCisjZGVm aW5lIFhTRElSWF9FREhfU1RBVF9QS1RfRkxBR19NQVNLCUdFTk1BU0soMjIsIDE5KQorCisjZGVm aW5lIFhTRElSWF9FREhfRVJSQ05UX0NPVU5UX01BU0sJR0VOTUFTSygxNSwgMCkKKworI2RlZmlu ZSBYU0RJUlhfQ1JDX0VSUkNOVF9DT1VOVF9NQVNLCUdFTk1BU0soMzEsIDE2KQorI2RlZmluZSBY U0RJUlhfQ1JDX0VSUkNOVF9EU19DUkNfTUFTSwlHRU5NQVNLKDE1LCAwKQorCisjZGVmaW5lIFhT RElSWF9WRVJTSU9OX1JFVl9NQVNLCQlHRU5NQVNLKDcsIDApCisjZGVmaW5lIFhTRElSWF9WRVJT SU9OX1BBVENISURfTUFTSwlHRU5NQVNLKDExLCA4KQorI2RlZmluZSBYU0RJUlhfVkVSU0lPTl9W RVJfUkVWX01BU0sJR0VOTUFTSygxNSwgMTIpCisjZGVmaW5lIFhTRElSWF9WRVJTSU9OX1ZFUl9N SU5fTUFTSwlHRU5NQVNLKDIzLCAxNikKKyNkZWZpbmUgWFNESVJYX1ZFUlNJT05fVkVSX01BSl9N QVNLCUdFTk1BU0soMzEsIDI0KQorCisjZGVmaW5lIFhTRElSWF9TU19DT05GSUdfRURIX0lOQ0xV REVEX01BU0sJCUJJVCgxKQorCisjZGVmaW5lIFhTRElSWF9TVEFUX1NCX1JYX1REQVRBX0NIQU5H RV9ET05FX01BU0sJQklUKDApCisjZGVmaW5lIFhTRElSWF9TVEFUX1NCX1JYX1REQVRBX0NIQU5H RV9GQUlMX01BU0sJQklUKDEpCisjZGVmaW5lIFhTRElSWF9TVEFUX1NCX1JYX1REQVRBX0dUX1JF U0VURE9ORV9NQVNLCUJJVCgyKQorI2RlZmluZSBYU0RJUlhfU1RBVF9TQl9SWF9UREFUQV9HVF9C SVRSQVRFX01BU0sJCUJJVCgzKQorCisjZGVmaW5lIFhTRElSWF9ERUZBVUxUX1dJRFRICTE5MjAK KyNkZWZpbmUgWFNESVJYX0RFRkFVTFRfSEVJR0hUCTEwODAKKworI2RlZmluZSBYU0RJUlhfTUFY X1NUUl9MRU5HVEgJMTYKKworI2RlZmluZSBYU0RJUlhfREVGQVVMVF9WSURFT19MT0NLX1dJTkRP VwkweDMwMDAKKworI2RlZmluZSBYU0RJUlhfTU9ERV9IRF9NQVNLCTB4MAorI2RlZmluZSBYU0RJ UlhfTU9ERV9TRF9NQVNLCTB4MQorI2RlZmluZSBYU0RJUlhfTU9ERV8zR19NQVNLCTB4MgorI2Rl ZmluZSBYU0RJUlhfTU9ERV82R19NQVNLCTB4NAorI2RlZmluZSBYU0RJUlhfTU9ERV8xMkdJX01B U0sJMHg1CisjZGVmaW5lIFhTRElSWF9NT0RFXzEyR0ZfTUFTSwkweDYKKworLyogTWF4aW11bSBu dW1iZXIgb2YgZXZlbnRzIHBlciBmaWxlIGhhbmRsZS4gKi8KKyNkZWZpbmUgWFNESVJYX01BWF9F VkVOVFMJOAorCisvKiBTVDM1MiByZWxhdGVkIG1hY3JvcyAqLworI2RlZmluZSBYU1QzNTJfUEFZ TE9BRF9CWVRFMV9NQVNLCUdFTk1BU0soNywgMCkKKyNkZWZpbmUgWFNUMzUyX1BBWUxPQURfQllU RTJfT0ZGU0VUCTgKKyNkZWZpbmUgWFNUMzUyX1BBWUxPQURfQllURTNfT0ZGU0VUCTE2CisjZGVm aW5lIFhTVDM1Ml9QQVlMT0FEX0JZVEU0X09GRlNFVAkyNAorCisjZGVmaW5lIFhTVDM1Ml9CWVRF MV9TVDI5Ml8xeDcyMExfMV81RwkJMHg4NAorI2RlZmluZSBYU1QzNTJfQllURTFfU1QyOTJfMXgx MDgwTF8xXzVHCQkweDg1CisjZGVmaW5lIFhTVDM1Ml9CWVRFMV9TVDQyNV8yMDA4Xzc1MExfM0dC CTB4ODgKKyNkZWZpbmUgWFNUMzUyX0JZVEUxX1NUNDI1XzIwMDhfMTEyNUxfM0dBCTB4ODkKKyNk ZWZpbmUgWFNUMzUyX0JZVEUxX1NUMzcyX0RMXzNHQgkJMHg4YQorI2RlZmluZSBYU1QzNTJfQllU RTFfU1QzNzJfMng3MjBMXzNHQgkJMHg4YgorI2RlZmluZSBYU1QzNTJfQllURTFfU1QzNzJfMngx MDgwTF8zR0IJCTB4OGMKKyNkZWZpbmUgWFNUMzUyX0JZVEUxX1NUMjA4MV8xMF8yMTYwTF82RwkJ MHhjMAorI2RlZmluZSBYU1QzNTJfQllURTFfU1QyMDgxXzEwXzJfMTA4MExfNkcJMHhjMQorI2Rl ZmluZSBYU1QzNTJfQllURTFfU1QyMDgxXzEwX0RMXzIxNjBMXzZHCTB4YzIKKyNkZWZpbmUgWFNU MzUyX0JZVEUxX1NUMjA4Ml8xMF8yMTYwTF8xMkcJMHhjZQorCisjZGVmaW5lIFhTVDM1Ml9CWVRF Ml9UU19UWVBFX01BU0sJCUJJVCgxNSkKKyNkZWZpbmUgWFNUMzUyX0JZVEUyX1BJQ19UWVBFX01B U0sJCUJJVCgxNCkKKyNkZWZpbmUgWFNUMzUyX0JZVEUyX1RTX1BJQ19UWVBFX0lOVEVSTEFDRUQJ MAorI2RlZmluZSBYU1QzNTJfQllURTJfVFNfUElDX1RZUEVfUFJPR1JFU1NJVkUJMQorCisjZGVm aW5lIFhTVDM1Ml9CWVRFMl9GUFNfTUFTSwkJCUdFTk1BU0soMTEsIDgpCisjZGVmaW5lIFhTVDM1 Ml9CWVRFMl9GUFNfMjRGCQkJMHgyCisjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfMjQJCQkweDMK KyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU180OEYJCQkweDQKKyNkZWZpbmUgWFNUMzUyX0JZVEUy X0ZQU18yNQkJCTB4NQorI2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzMwRgkJCTB4NgorI2RlZmlu ZSBYU1QzNTJfQllURTJfRlBTXzMwCQkJMHg3CisjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfNDgJ CQkweDgKKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU181MAkJCTB4OQorI2RlZmluZSBYU1QzNTJf QllURTJfRlBTXzYwRgkJCTB4YQorI2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzYwCQkJMHhiCisv KiBUYWJsZSA0IFNUIDIwODEtMTA6MjAxNSAqLworI2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzk2 CQkJMHhjCisjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfMTAwCQkJMHhkCisjZGVmaW5lIFhTVDM1 Ml9CWVRFMl9GUFNfMTIwCQkJMHhlCisjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfMTIwRgkJCTB4 ZgorCisjZGVmaW5lIFhTVDM1Ml9CWVRFM19BQ1RfTFVNQV9DT1VOVF9NQVNLCUJJVCgyMikKKwor I2RlZmluZSBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFUX01BU0sJCUdFTk1BU0soMTksIDE2KQor I2RlZmluZSBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFUXzQyMgkJMHgwCisjZGVmaW5lIFhTVDM1 Ml9CWVRFM19DT0xPUl9GT1JNQVRfWVVWNDQ0CTB4MQorI2RlZmluZSBYU1QzNTJfQllURTNfQ09M T1JfRk9STUFUXzQyMAkJMHgzCisjZGVmaW5lIFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfR0JS CQkweDIKKworI2RlZmluZSBYU1QzNTJfQllURTNfQ09MT1JJTUVUUllfTUFTSwkJR0VOTUFTSygy MSwgMjApCisjZGVmaW5lIFhTVDM1Ml9CWVRFM19DT0xPUklNRVRSWV9CVDcwOQkJMAorI2RlZmlu ZSBYU1QzNTJfQllURTNfQ09MT1JJTUVUUllfQ09MT1JfVkFOQwkxCisjZGVmaW5lIFhTVDM1Ml9C WVRFM19DT0xPUklNRVRSWV9VSERUVgkJMgorI2RlZmluZSBYU1QzNTJfQllURTNfQ09MT1JJTUVU UllfVU5LTk9XTgkzCisKKyNkZWZpbmUgWFNUMzUyX0JZVEU0X0JJVF9ERVBUSF9NQVNLCQlHRU5N QVNLKDI1LCAyNCkKKyNkZWZpbmUgWFNUMzUyX0JZVEU0X0JJVF9ERVBUSF8xMAkJMHgxCisjZGVm aW5lIFhTVDM1Ml9CWVRFNF9CSVRfREVQVEhfMTIJCTB4MgorCisvKiBHVCBpbnB1dCBjbG9jayBm b3Igc2RpX3J4X2NsayAqLworI2RlZmluZSBDTEtfSU5UCQkxNDg1MDAwMDBVTAorCisjZGVmaW5l IFhTRElSWFNTX1dJRFRIX01JTiAgICAgICAgICAgICAgICAgICAgNzIwCisjZGVmaW5lIFhTRElS WFNTX1dJRFRIX01BWCAgICAgICAgICAgICAgICAgICAgNDA5NgorI2RlZmluZSBYU0RJUlhTU19I RUlHSFRfTUlOICAgICAgICAgICAgICAgICAgIDI0MworI2RlZmluZSBYU0RJUlhTU19IRUlHSFRf TUFYICAgICAgICAgICAgICAgICAgIDIxNjAKKyNkZWZpbmUgWFNESVJYU1NfUElYRUxDTE9DS19N SU4gICAgICAgICAgICAgICAxMzUwMDAwMAorI2RlZmluZSBYU0RJUlhTU19QSVhFTENMT0NLX01B WCAgICAgICAgICAgICAgIDU5NDAwMDAwMAorCisvKioKKyAqIGVudW0gc2RpX2ZhbWlseV9lbmMg LSBTREkgVHJhbnNwb3J0IFZpZGVvIEZvcm1hdCBEZXRlY3RlZCB3aXRoIEFjdGl2ZSBQaXhlbHMK KyAqIEBYU0RJUlhfU01QVEVfU1RfMjc0OiBTTVBURSBTVCAyNzQgZGV0ZWN0ZWQgd2l0aCBBUCAx OTIweDEwODAKKyAqIEBYU0RJUlhfU01QVEVfU1RfMjk2OiBTTVBURSBTVCAyOTYgZGV0ZWN0ZWQg d2l0aCBBUCAxMjgweDcyMAorICogQFhTRElSWF9TTVBURV9TVF8yMDQ4XzI6IFNNUFRFIFNUIDIw NDgtMiBkZXRlY3RlZCB3aXRoIEFQIDIwNDh4MTA4MAorICogQFhTRElSWF9TTVBURV9TVF8yOTU6 IFNNUFRFIFNUIDI5NSBkZXRlY3RlZCB3aXRoIEFQIDE5MjB4MTA4MAorICogQFhTRElSWF9OVFND OiBOVFNDIGVuY29kaW5nIGRldGVjdGVkIHdpdGggQVAgNzIweDQ4NgorICogQFhTRElSWF9QQUw6 IFBBTCBlbmNvZGluZyBkZXRlY3RlZCB3aXRoIEFQIDcyMHg1NzYKKyAqIEBYU0RJUlhfVFNfVU5L Tk9XTjogVW5rbm93biBTTVBURSBUcmFuc3BvcnQgZmFtaWx5IHR5cGUKKyAqLworZW51bSBzZGlf ZmFtaWx5X2VuYyB7CisJWFNESVJYX1NNUFRFX1NUXzI3NAk9IDAsCisJWFNESVJYX1NNUFRFX1NU XzI5Ngk9IDEsCisJWFNESVJYX1NNUFRFX1NUXzIwNDhfMgk9IDIsCisJWFNESVJYX1NNUFRFX1NU XzI5NQk9IDMsCisJWFNESVJYX05UU0MJCT0gOCwKKwlYU0RJUlhfUEFMCQk9IDksCisJWFNESVJY X1RTX1VOS05PV04JPSAxNQorfTsKKworLyoqCisgKiBzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgLSBT REkgUnggU3Vic3lzdGVtIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBzdWJkZXY6IFRoZSB2NGwyIHN1 YmRldiBzdHJ1Y3R1cmUKKyAqIEBjdHJsX2hhbmRsZXI6IGNvbnRyb2wgaGFuZGxlcgorICogQGRl ZmF1bHRfZm9ybWF0OiBkZWZhdWx0IFY0TDIgbWVkaWEgYnVzIGZvcm1hdAorICogQHBhZDogc291 cmNlIG1lZGlhIHBhZAorICogQGRldjogUGxhdGZvcm0gc3RydWN0dXJlCisgKiBAaW9tZW06IEJh c2UgYWRkcmVzcyBvZiBzdWJzeXN0ZW0KKyAqIEBjbGtzOiBhcnJheSBvZiBjbG9ja3MKKyAqIEBw cmV2X2lzX2ZyYWM6IFByZXZpb3VzIGNsb2NrIGlzIGZyYWN0aW9uYWwgb3Igbm90IGZsYWcKKyAq IEBicGM6IEJpdHMgcGVyIGNvbXBvbmVudCwgY2FuIGJlIDEwIG9yIDEyCisgKiBAbW9kZTogM0cv NkcvMTJHIG1vZGUKKyAqIEBudW1fY2xrczogbnVtYmVyIG9mIGNsb2NrcworICogQGluY2x1ZGVf ZWRoOiBFREggcHJvY2Vzc29yIHByZXNlbmNlCisgKiBAc2xvY2s6IHNwaW5sb2NrIHRvIHByb3Rl Y3QgYmVsb3cgbWVtYmVycworICogQGZvcm1hdDogQWN0aXZlIFY0TDIgZm9ybWF0IGRldGVjdGVk CisgKiBAc3JjX2Zvcm1hdDogQWN0aXZlIFY0TDIgZm9ybWF0IG9uIHNvdXJjZSBwYWQKKyAqIEBm cmFtZV9pbnRlcnZhbDogQ2FwdHVyZXMgdGhlIGZyYW1lIHJhdGUKKyAqIEBjdXJyZW50X3RpbWlu Z3M6IERWIHRpbWluZ3MgZnJvbSBhcHBsaWNhdGlvbgorICogQGRldGVjdGVkX3RpbWluZ3NfaW5k ZXg6IGluZGV4IG9mIERWIHRpbWluZ3MgZGV0ZWN0ZWQgb24gaW5jb21pbmcgc3RyZWFtCisgKiBA dmlkbG9ja3dpbjogVmlkZW8gbG9jayB3aW5kb3cgdmFsdWUgc2V0IGJ5IGNvbnRyb2wKKyAqIEBl ZGhtYXNrOiBFREggbWFzayBzZXQgYnkgY29udHJvbAorICogQHNlYXJjaG1hc2s6IFNlYXJjaCBt YXNrIHNldCBieSBjb250cm9sCisgKiBAc3RyZWFtaW5nOiBGbGFnIGZvciBzdG9yaW5nIHN0cmVh bWluZyBzdGF0ZQorICogQHZpZGxvY2tlZDogRmxhZyBpbmRpY2F0aW5nIFNESSBSeCBoYXMgbG9j a2VkIG9udG8gdmlkZW8gc3RyZWFtCisgKiBAdHNfaXNfaW50ZXJsYWNlZDogRmxhZyBpbmRpY2F0 aW5nIFRyYW5zcG9ydCBTdHJlYW0gaXMgaW50ZXJsYWNlZC4KKyAqIEBmcmFtZXJfZW5hYmxlOiBG bGFnIGZvciBmcmFtZXIgZW5hYmxlZCBvciBub3Qgc2V0IGJ5IGNvbnRyb2wKKyAqCisgKiBUaGlz IHN0cnVjdHVyZSBjb250YWlucyB0aGUgZGV2aWNlIGRyaXZlciByZWxhdGVkIHBhcmFtZXRlcnMK KyAqLworc3RydWN0IHhzZGlyeHNzX3N0YXRlIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc3ViZGV2 OworCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBjdHJsX2hhbmRsZXI7CisJc3RydWN0IHY0bDJf bWJ1c19mcmFtZWZtdCBkZWZhdWx0X2Zvcm1hdDsKKwlzdHJ1Y3QgbWVkaWFfcGFkIHBhZDsKKwlz dHJ1Y3QgZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICppb21lbTsKKwlzdHJ1Y3QgY2xrX2J1 bGtfZGF0YSAqY2xrczsKKwlpbnQgcHJldl9pc19mcmFjOworCXUzMiBicGM7CisJdTMyIG1vZGU7 CisJdW5zaWduZWQgaW50IG51bV9jbGtzOworCWJvb2wgaW5jbHVkZV9lZGg7CisKKwkvKgorCSAq IFRoaXMgc3BpbmxvY2sgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBiZWxvdyBtZW1iZXJzCisJICog Zm9ybWF0LCBzcmNfZm9ybWF0LCBmcmFtZV9pbnRlcnZhbCwgY3VycmVudF90aW1pbmdzLAorCSAq IGRldGVjdGVkX3RpbWluZ3NfaW5kZXgsIHZpZGxvY2t3aW4sIGVkaG1hc2ssIHNlYXJjaG1hc2ss CisJICogc3RyZWFtaW5nLCB2aWRsb2NrZWQsIHRzX2lzX2ludGVybGFjZWQsIGZyYW1lcl9lbmFi bGUKKwkgKi8KKwlzcGlubG9ja190IHNsb2NrOworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQg Zm9ybWF0OworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgc3JjX2Zvcm1hdDsKKwlzdHJ1Y3Qg djRsMl9mcmFjdCBmcmFtZV9pbnRlcnZhbDsKKwlzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzIGN1cnJl bnRfdGltaW5nczsKKwl1MzIgZGV0ZWN0ZWRfdGltaW5nc19pbmRleDsKKwl1MzIgdmlkbG9ja3dp bjsKKwl1MzIgZWRobWFzazsKKwl1MTYgc2VhcmNobWFzazsKKwlib29sIHN0cmVhbWluZzsKKwli b29sIHZpZGxvY2tlZDsKKwlib29sIHRzX2lzX2ludGVybGFjZWQ7CisJYm9vbCBmcmFtZXJfZW5h YmxlOworfTsKKworLyogTGlzdCBvZiBjbG9ja3MgcmVxdWlyZWQgYnkgVUhELVNESSBSeCBzdWJz eXN0ZW0gKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgeHNkaXJ4c3NfY2xrc1tdID0gewor CSJzX2F4aV9hY2xrIiwgInNkaV9yeF9jbGsiLCAidmlkZW9fb3V0X2NsayIsCit9OworCisvKiBU T0RPIC0gQWRkIFlVViA0NDQvNDIwIGFuZCBSQkcgMTAvMTIgYnBjIG1idXMgZm9ybWF0cyBoZXJl ICovCitzdGF0aWMgY29uc3QgdTMyIHhzZGlyeHNzXzEwYnBjX21idXNfZm10c1tdID0geworCU1F RElBX0JVU19GTVRfVVlWWTEwXzFYMjAsCit9OworCitzdGF0aWMgY29uc3QgdTMyIHhzZGlyeHNz XzEyYnBjX21idXNfZm10c1tdID0geworCU1FRElBX0JVU19GTVRfVVlWWTEyXzFYMjQsCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZHZfdGltaW5ncyBmbXRfY2FwW10gPSB7CisJVjRM Ml9EVl9CVF9TRElfNzIwWDQ4N0k2MCwKKwlWNEwyX0RWX0JUX0NFQV83MjBYNTc2STUwLAorCVY0 TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDI0LAorCVY0TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDI1LAor CVY0TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDMwLAorCVY0TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDUw LAorCVY0TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDYwLAorCVY0TDJfRFZfQlRfQ0VBXzE5MjBYMTA4 MFAyNCwKKwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQMzAsCisJVjRMMl9EVl9CVF9DRUFfMTky MFgxMDgwSTUwLAorCVY0TDJfRFZfQlRfQ0VBXzE5MjBYMTA4MEk2MCwKKwlWNEwyX0RWX0JUX0NF QV8xOTIwWDEwODBQNDgsCisJVjRMMl9EVl9CVF9DRUFfMTkyMFgxMDgwUDUwLAorCVY0TDJfRFZf QlRfQ0VBXzE5MjBYMTA4MFA2MCwKKwlWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQMjQsCisJVjRM Ml9EVl9CVF9DRUFfMzg0MFgyMTYwUDMwLAorCVY0TDJfRFZfQlRfQ0VBXzM4NDBYMjE2MFA0OCwK KwlWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQNTAsCisJVjRMMl9EVl9CVF9DRUFfMzg0MFgyMTYw UDYwLAorCVY0TDJfRFZfQlRfQ0VBXzQwOTZYMjE2MFAyNCwKKwlWNEwyX0RWX0JUX0NFQV80MDk2 WDIxNjBQMjUsCisJVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDMwLAorCVY0TDJfRFZfQlRfQ0VB XzQwOTZYMjE2MFA0OCwKKwlWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQNTAsCisJVjRMMl9EVl9C VF9DRUFfNDA5NlgyMTYwUDYwLAorCisJWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFAyNCwKKwlY TE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDI1LAorCVhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQ MzAsCisJWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MEk0OCwKKwlYTE5YX1Y0TDJfRFZfQlRfMjA0 OFgxMDgwSTUwLAorCVhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBJNjAsCisJWExOWF9WNEwyX0RW X0JUXzIwNDhYMTA4MFA0OCwKKwlYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDUwLAorCVhMTlhf VjRMMl9EVl9CVF8yMDQ4WDEwODBQNjAsCisJWExOWF9WNEwyX0RWX0JUXzE5MjBYMTA4MEk0OCwK K307CisKK3N0cnVjdCB4c2Rpcnhzc19kdl9tYXAgeworCXUzMiB3aWR0aDsKKwl1MzIgaGVpZ2h0 OworCXUzMiBmcHM7CisJc3RydWN0IHY0bDJfZHZfdGltaW5ncyB0aW1pbmc7Cit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IHhzZGlyeHNzX2R2X21hcCB4c2Rpcnhzc19kdl90aW1pbmdzW10gPSB7 CisJLyogU0QgLSA3MjB4NDg3aTYwICovCisJeyA3MjAsIDI0MywgMzAsIFY0TDJfRFZfQlRfU0RJ XzcyMFg0ODdJNjAgfSwKKwkvKiBTRCAtIDcyMHg1NzZpNTAgKi8KKwl7IDcyMCwgMjg4LCAyNSwg VjRMMl9EVl9CVF9DRUFfNzIwWDU3Nkk1MCB9LAorCS8qIEhEIC0gMTI4MHg3MjBwMjMuOTggKi8K KwkvKiBIRCAtIDEyODB4NzIwcDI0ICovCisJeyAxMjgwLCA3MjAsIDI0LCBWNEwyX0RWX0JUX0NF QV8xMjgwWDcyMFAyNCB9LAorCS8qIEhEIC0gMTI4MHg3MjBwMjUgKi8KKwl7IDEyODAsIDcyMCwg MjUsIFY0TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDI1IH0sCisJLyogSEQgLSAxMjgweDcyMHAyOS45 NyAqLworCS8qIEhEIC0gMTI4MHg3MjBwMzAgKi8KKwl7IDEyODAsIDcyMCwgMzAsIFY0TDJfRFZf QlRfQ0VBXzEyODBYNzIwUDMwIH0sCisJLyogSEQgLSAxMjgweDcyMHA1MCAqLworCXsgMTI4MCwg NzIwLCA1MCwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQNTAgfSwKKwkvKiBIRCAtIDEyODB4NzIw cDU5Ljk0ICovCisJLyogSEQgLSAxMjgweDcyMHA2MCAqLworCXsgMTI4MCwgNzIwLCA2MCwgVjRM Ml9EVl9CVF9DRUFfMTI4MFg3MjBQNjAgfSwKKwkvKiBIRCAtIDE5MjB4MTA4MHAyMy45OCAqLwor CS8qIEhEIC0gMTkyMHgxMDgwcDI0ICovCisJeyAxOTIwLCAxMDgwLCAyNCwgVjRMMl9EVl9CVF9D RUFfMTkyMFgxMDgwUDI0IH0sCisJLyogSEQgLSAxOTIweDEwODBwMjUgKi8KKwl7IDE5MjAsIDEw ODAsIDI1LCBWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQMjUgfSwKKwkvKiBIRCAtIDE5MjB4MTA4 MHAyOS45NyAqLworCS8qIEhEIC0gMTkyMHgxMDgwcDMwICovCisJeyAxOTIwLCAxMDgwLCAzMCwg VjRMMl9EVl9CVF9DRUFfMTkyMFgxMDgwUDMwIH0sCisKKwkvKiBIRCAtIDIwNDh4MTA4MHAyMy45 OCAqLworCS8qIEhEIC0gMjA0OHgxMDgwcDI0ICovCisJeyAyMDQ4LCAxMDgwLCAyNCwgWExOWF9W NEwyX0RWX0JUXzIwNDhYMTA4MFAyNCB9LAorCS8qIEhEIC0gMjA0OHgxMDgwcDI1ICovCisJeyAy MDQ4LCAxMDgwLCAyNCwgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFAyNSB9LAorCS8qIEhEIC0g MjA0OHgxMDgwcDI5Ljk3ICovCisJLyogSEQgLSAyMDQ4eDEwODBwMzAgKi8KKwl7IDIwNDgsIDEw ODAsIDI0LCBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDMwIH0sCisJLyogSEQgLSAxOTIweDEw ODBpNDcuOTUgKi8KKwkvKiBIRCAtIDE5MjB4MTA4MGk0OCAqLworCXsgMTkyMCwgNTQwLCAyNCwg WExOWF9WNEwyX0RWX0JUXzE5MjBYMTA4MEk0OCB9LAorCisJLyogSEQgLSAxOTIweDEwODBpNTAg Ki8KKwl7IDE5MjAsIDU0MCwgMjUsIFY0TDJfRFZfQlRfQ0VBXzE5MjBYMTA4MEk1MCB9LAorCS8q IEhEIC0gMTkyMHgxMDgwaTU5Ljk0ICovCisJLyogSEQgLSAxOTIweDEwODBpNjAgKi8KKwl7IDE5 MjAsIDU0MCwgMzAsIFY0TDJfRFZfQlRfQ0VBXzE5MjBYMTA4MEk2MCB9LAorCisJLyogSEQgLSAy MDQ4eDEwODBpNDcuOTUgKi8KKwkvKiBIRCAtIDIwNDh4MTA4MGk0OCAqLworCXsgMjA0OCwgNTQw LCAyNCwgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MEk0OCB9LAorCS8qIEhEIC0gMjA0OHgxMDgw aTUwICovCisJeyAyMDQ4LCA1NDAsIDI1LCBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwSTUwIH0s CisJLyogSEQgLSAyMDQ4eDEwODBpNTkuOTQgKi8KKwkvKiBIRCAtIDIwNDh4MTA4MGk2MCAqLwor CXsgMjA0OCwgNTQwLCAzMCwgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MEk2MCB9LAorCS8qIDNH IC0gMTkyMHgxMDgwcDQ3Ljk1ICovCisJLyogM0cgLSAxOTIweDEwODBwNDggKi8KKwl7IDE5MjAs IDEwODAsIDQ4LCBWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQNDggfSwKKworCS8qIDNHIC0gMTky MHgxMDgwcDUwIDE0OC41ICovCisJeyAxOTIwLCAxMDgwLCA1MCwgVjRMMl9EVl9CVF9DRUFfMTky MFgxMDgwUDUwIH0sCisJLyogM0cgLSAxOTIweDEwODBwNTkuOTQgMTQ4LjUvMS4wMDEgKi8KKwkv KiAzRyAtIDE5MjB4MTA4MHA2MCAxNDguNSAqLworCXsgMTkyMCwgMTA4MCwgNjAsIFY0TDJfRFZf QlRfQ0VBXzE5MjBYMTA4MFA2MCB9LAorCisJLyogM0cgLSAyMDQ4eDEwODBwNDcuOTUgKi8KKwkv KiAzRyAtIDIwNDh4MTA4MHA0OCAqLworCXsgMjA0OCwgMTA4MCwgNDgsIFhMTlhfVjRMMl9EVl9C VF8yMDQ4WDEwODBQNDggfSwKKwkvKiAzRyAtIDIwNDh4MTA4MHA1MCAqLworCXsgMjA0OCwgMTA4 MCwgNTAsIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQNTAgfSwKKwkvKiAzRyAtIDIwNDh4MTA4 MHA1OS45NCAqLworCS8qIDNHIC0gMjA0OHgxMDgwcDYwICovCisJeyAyMDQ4LCAxMDgwLCA2MCwg WExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFA2MCB9LAorCisJLyogNkcgLSAzODQwWDIxNjBwMjMu OTggKi8KKwkvKiA2RyAtIDM4NDBYMjE2MHAyNCAqLworCXsgMzg0MCwgMjE2MCwgMjQsIFY0TDJf RFZfQlRfQ0VBXzM4NDBYMjE2MFAyNCB9LAorCS8qIDZHIC0gMzg0MFgyMTYwcDI1ICovCisJeyAz ODQwLCAyMTYwLCAyNSwgVjRMMl9EVl9CVF9DRUFfMzg0MFgyMTYwUDI1IH0sCisJLyogNkcgLSAz ODQwWDIxNjBwMjkuOTcgKi8KKwkvKiA2RyAtIDM4NDBYMjE2MHAzMCAqLworCXsgMzg0MCwgMjE2 MCwgMzAsIFY0TDJfRFZfQlRfQ0VBXzM4NDBYMjE2MFAzMCB9LAorCS8qIDZHIC0gNDA5NlgyMTYw cDIzLjk4ICovCisJLyogNkcgLSA0MDk2WDIxNjBwMjQgKi8KKwl7IDQwOTYsIDIxNjAsIDI0LCBW NEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQMjQgfSwKKwkvKiA2RyAtIDQwOTZYMjE2MHAyNSAqLwor CXsgNDA5NiwgMjE2MCwgMjUsIFY0TDJfRFZfQlRfQ0VBXzQwOTZYMjE2MFAyNSB9LAorCS8qIDZH IC0gNDA5NlgyMTYwcDI5Ljk3ICovCisJLyogNkcgLSA0MDk2WDIxNjBwMzAgKi8KKwl7IDQwOTYs IDIxNjAsIDMwLCBWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQMzAgfSwKKwkvKiAxMkcgLSAzODQw WDIxNjBwNDcuOTUgKi8KKwkvKiAxMkcgLSAzODQwWDIxNjBwNDggKi8KKwl7IDM4NDAsIDIxNjAs IDQ4LCBWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQNDggfSwKKworCS8qIDEyRyAtIDM4NDBYMjE2 MHA1MCAqLworCXsgMzg0MCwgMjE2MCwgNTAsIFY0TDJfRFZfQlRfQ0VBXzM4NDBYMjE2MFA1MCB9 LAorCS8qIDEyRyAtIDM4NDBYMjE2MHA1OS45NCAqLworCS8qIDEyRyAtIDM4NDBYMjE2MHA2MCAq LworCXsgMzg0MCwgMjE2MCwgNjAsIFY0TDJfRFZfQlRfQ0VBXzM4NDBYMjE2MFA2MCB9LAorCisJ LyogMTJHIC0gNDA5NlgyMTYwcDQ3Ljk1ICovCisJLyogMTJHIC0gNDA5NlgyMTYwcDQ4ICovCisJ eyAzODQwLCAyMTYwLCA0OCwgVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDQ4IH0sCisKKwkvKiAx MkcgLSA0MDk2WDIxNjBwNTAgKi8KKwl7IDQwOTYsIDIxNjAsIDUwLCBWNEwyX0RWX0JUX0NFQV80 MDk2WDIxNjBQNTAgfSwKKwkvKiAxMkcgLSA0MDk2WDIxNjBwNTkuOTQgKi8KKwkvKiAxMkcgLSA0 MDk2WDIxNjBwNjAgKi8KKwl7IDQwOTYsIDIxNjAsIDYwLCBWNEwyX0RWX0JUX0NFQV80MDk2WDIx NjBQNjAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzX2NhcCB4 c2Rpcnhzc190aW1pbmdzX2NhcCA9IHsKKwkudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsCisJ LnBhZCA9IDAsCisJLnJlc2VydmVkID0geyAwIH0sCisJVjRMMl9JTklUX0JUX1RJTUlOR1MoWFNE SVJYU1NfV0lEVEhfTUlOLCBYU0RJUlhTU19XSURUSF9NQVgsCisJCQkgICAgIFhTRElSWFNTX0hF SUdIVF9NSU4sIFhTRElSWFNTX0hFSUdIVF9NQVgsCisJCQkgICAgIFhTRElSWFNTX1BJWEVMQ0xP Q0tfTUlOLCBYU0RJUlhTU19QSVhFTENMT0NLX01BWCwKKwkJCSAgICAgVjRMMl9EVl9CVF9TVERf Q0VBODYxIHwgVjRMMl9EVl9CVF9TVERfU0RJLAorCQkJICAgICBWNEwyX0RWX0JUX0NBUF9QUk9H UkVTU0lWRQorCQkJICAgICB8IFY0TDJfRFZfQlRfQ0FQX0lOVEVSTEFDRUQpCisKK307CisKK3N0 cnVjdCByZWdtYXAgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIG9mZnNldDsKK307CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwIHhzZGlyeHNzX3JlZ21hcFtdID0geworCXsgLm5hbWUg PSAiUmVzZXQgQ29udHJvbCIsIC5vZmZzZXQgPSBYU0RJUlhfUlNUX0NUUkxfUkVHIH0sCisJeyAu bmFtZSA9ICJNb2R1bGUgQ29udHJvbCIsIC5vZmZzZXQgPSBYU0RJUlhfTURMX0NUUkxfUkVHIH0s CisJeyAubmFtZSA9ICJJbnRlcnJ1cHQgRW5hYmxlIiwgLm9mZnNldCA9IFhTRElSWF9JRVJfUkVH IH0sCisJeyAubmFtZSA9ICJHbG9iYWwgSW50ZXJydXB0IEVuYWJsZSIsIC5vZmZzZXQgPSBYU0RJ UlhfR0xCTF9JRVJfUkVHIH0sCisJeyAubmFtZSA9ICJTVDM1MiBWYWxpZCIsIC5vZmZzZXQgPSBY U0RJUlhfU1QzNTJfVkFMSURfUkVHIH0sCisJeyAubmFtZSA9ICJTVDM1MiBEUzEiLCAub2Zmc2V0 ID0gWFNESVJYX1NUMzUyX0RTMV9SRUcgfSwKKwl7IC5uYW1lID0gIlNUMzUyIERTMiIsIC5vZmZz ZXQgPSBYU0RJUlhfU1QzNTJfRFMyX1JFRyB9LAorCXsgLm5hbWUgPSAiU1QzNTIgRFMzIiwgLm9m ZnNldCA9IFhTRElSWF9TVDM1Ml9EUzNfUkVHIH0sCisJeyAubmFtZSA9ICJTVDM1MiBEUzQiLCAu b2Zmc2V0ID0gWFNESVJYX1NUMzUyX0RTNF9SRUcgfSwKKwl7IC5uYW1lID0gIlNUMzUyIERTNSIs IC5vZmZzZXQgPSBYU0RJUlhfU1QzNTJfRFM1X1JFRyB9LAorCXsgLm5hbWUgPSAiU1QzNTIgRFM2 IiwgLm9mZnNldCA9IFhTRElSWF9TVDM1Ml9EUzZfUkVHIH0sCisJeyAubmFtZSA9ICJTVDM1MiBE UzciLCAub2Zmc2V0ID0gWFNESVJYX1NUMzUyX0RTN19SRUcgfSwKKwl7IC5uYW1lID0gIlNUMzUy IERTOCIsIC5vZmZzZXQgPSBYU0RJUlhfU1QzNTJfRFM4X1JFRyB9LAorCXsgLm5hbWUgPSAiU1Qz NTIgRFM5IiwgLm9mZnNldCA9IFhTRElSWF9TVDM1Ml9EUzlfUkVHIH0sCisJeyAubmFtZSA9ICJT VDM1MiBEUzEwIiwgLm9mZnNldCA9IFhTRElSWF9TVDM1Ml9EUzEwX1JFRyB9LAorCXsgLm5hbWUg PSAiU1QzNTIgRFMxMSIsIC5vZmZzZXQgPSBYU0RJUlhfU1QzNTJfRFMxMV9SRUcgfSwKKwl7IC5u YW1lID0gIlNUMzUyIERTMTIiLCAub2Zmc2V0ID0gWFNESVJYX1NUMzUyX0RTMTJfUkVHIH0sCisJ eyAubmFtZSA9ICJTVDM1MiBEUzEzIiwgLm9mZnNldCA9IFhTRElSWF9TVDM1Ml9EUzEzX1JFRyB9 LAorCXsgLm5hbWUgPSAiU1QzNTIgRFMxNCIsIC5vZmZzZXQgPSBYU0RJUlhfU1QzNTJfRFMxNF9S RUcgfSwKKwl7IC5uYW1lID0gIlNUMzUyIERTMTUiLCAub2Zmc2V0ID0gWFNESVJYX1NUMzUyX0RT MTVfUkVHIH0sCisJeyAubmFtZSA9ICJTVDM1MiBEUzE2IiwgLm9mZnNldCA9IFhTRElSWF9TVDM1 Ml9EUzE2X1JFRyB9LAorCXsgLm5hbWUgPSAiVmVyc2lvbiIsIC5vZmZzZXQgPSBYU0RJUlhfVkVS U0lPTl9SRUcgfSwKKwl7IC5uYW1lID0gIlN1YnN5c3RlbSBDb25maWcgIiwgLm9mZnNldCA9IFhT RElSWF9TU19DT05GSUdfUkVHIH0sCisJeyAubmFtZSA9ICJNb2RlIERldGVjdCIsIC5vZmZzZXQg PSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcgfSwKKwl7IC5uYW1lID0gIlRyYW5zcG9ydCBTdHJl YW0gRGV0ZWN0IiwgLm9mZnNldCA9IFhTRElSWF9UU19ERVRfU1RBVF9SRUcgfSwKKwl7IC5uYW1l ID0gIkVESCBTdGF0dXMiLCAub2Zmc2V0ID0gWFNESVJYX0VESF9TVEFUX1JFRyB9LAorCXsgLm5h bWUgPSAiRURIIEVycm9yIENvdW50IiwgLm9mZnNldCA9IFhTRElSWF9FREhfRVJSQ05UX0VOX1JF RyB9LAorCXsgLm5hbWUgPSAiQ1JDIGVycm9yIGluZGljYXRpb24iLCAub2Zmc2V0ID0gWFNESVJY X0NSQ19FUlJDTlRfUkVHIH0sCisJeyAubmFtZSA9ICJWaWRlbyBMb2NrIFdpbmRvdyIsIC5vZmZz ZXQgPSBYU0RJUlhfVklEX0xPQ0tfV0lORE9XX1JFRyB9LAorfTsKKworc3RhdGljIGlubGluZSBz dHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKgordG9feHNkaXJ4c3NzdGF0ZShzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnN1YmRldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHN1YmRldiwgc3RydWN0IHhzZGly eHNzX3N0YXRlLCBzdWJkZXYpOworfQorCisvKgorICogUmVnaXN0ZXIgcmVsYXRlZCBvcGVyYXRp b25zCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHhzZGlyeHNzX3JlYWQoc3RydWN0IHhzZGlyeHNz X3N0YXRlICp4c2RpcnhzcywgdTMyIGFkZHIpCit7CisJcmV0dXJuIGlvcmVhZDMyKHhzZGlyeHNz LT5pb21lbSArIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4c3Nfd3JpdGUo c3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcywgdTMyIGFkZHIsCisJCQkJICB1MzIgdmFs dWUpCit7CisJaW93cml0ZTMyKHZhbHVlLCB4c2Rpcnhzcy0+aW9tZW0gKyBhZGRyKTsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIHhzZGlyeHNzX2NscihzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhz ZGlyeHNzLCB1MzIgYWRkciwKKwkJCQl1MzIgY2xyKQoreworCXhzZGlyeHNzX3dyaXRlKHhzZGly eHNzLCBhZGRyLCB4c2Rpcnhzc19yZWFkKHhzZGlyeHNzLCBhZGRyKSAmIH5jbHIpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4c3Nfc2V0KHN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNk aXJ4c3MsIHUzMiBhZGRyLAorCQkJCXUzMiBzZXQpCit7CisJeHNkaXJ4c3Nfd3JpdGUoeHNkaXJ4 c3MsIGFkZHIsIHhzZGlyeHNzX3JlYWQoeHNkaXJ4c3MsIGFkZHIpIHwgc2V0KTsKK30KKworI2Rl ZmluZSBYU0RJUlhfQ09SRV9ESVNBQkxFKHN0YXRlKSAgeHNkaXJ4c3NfY2xyKChzdGF0ZSksIFhT RElSWF9SU1RfQ1RSTF9SRUcsXAorCQkJCQkJIFhTRElSWF9SU1RfQ1RSTF9TU19FTl9NQVNLKQor CisjZGVmaW5lIFhTRElSWF9DT1JFX0VOQUJMRShzdGF0ZSkgIHhzZGlyeHNzX3NldCgoc3RhdGUp LCBYU0RJUlhfUlNUX0NUUkxfUkVHLFwKKwkJCQkJCVhTRElSWF9SU1RfQ1RSTF9TU19FTl9NQVNL KQorCisjZGVmaW5lIFhTRElSWF9HTE9CQUxfSU5UUl9FTkFCTEUoc3RhdGUpCVwKKwl4c2Rpcnhz c19zZXQoKHN0YXRlKSwgWFNESVJYX0dMQkxfSUVSX1JFRywgWFNESVJYX0dMQkxfSU5UUl9FTl9N QVNLKQorCisjZGVmaW5lIFhTRElSWF9HTE9CQUxfSU5UUl9ESVNBQkxFKHN0YXRlKQlcCisJeHNk aXJ4c3NfY2xyKChzdGF0ZSksIFhTRElSWF9HTEJMX0lFUl9SRUcsIFhTRElSWF9HTEJMX0lOVFJf RU5fTUFTSykKKworc3RhdGljIGludCB4c2Rpcnhfc2V0X21vZGVkZXRlY3Qoc3RydWN0IHhzZGly eHNzX3N0YXRlICpzdGF0ZSwgdTE2IG1hc2spCit7CisJdTMyIHZhbDsKKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSBzdGF0ZS0+ZGV2OworCisJbWFzayAmPSBYU0RJUlhfREVURUNUX0FMTF9NT0RFUzsK KwlpZiAoIW1hc2spIHsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIGJpdCBtYXNrID0gMHglMDh4 XG4iLCBtYXNrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhkZXYsICJtYXNr ID0gMHgleFxuIiwgbWFzayk7CisKKwl2YWwgPSB4c2Rpcnhzc19yZWFkKHN0YXRlLCBYU0RJUlhf TURMX0NUUkxfUkVHKTsKKwl2YWwgJj0gflhTRElSWF9NRExfQ1RSTF9NT0RFX0RFVF9FTl9NQVNL OworCXZhbCAmPSB+WFNESVJYX01ETF9DVFJMX01PREVfQVVUT19ERVRfTUFTSzsKKwl2YWwgJj0g flhTRElSWF9NRExfQ1RSTF9GT1JDRURfTU9ERV9NQVNLOworCisJaWYgKGh3ZWlnaHQxNihtYXNr KSA+IDEpIHsKKwkJLyogTXVsdGkgbW9kZSBkZXRlY3Rpb24gYXMgbW9yZSB0aGFuIDEgYml0IHNl dCBpbiBtYXNrICovCisJCWRldl9kYmcoZGV2LCAiRGV0ZWN0IG11bHRpcGxlIG1vZGVzXG4iKTsK KworCQlpZiAobWFzayAmIEJJVChYU0RJUlhfTU9ERV9TRF9PRkZTRVQpKQorCQkJdmFsIHw9IFhT RElSWF9NRExfQ1RSTF9NT0RFX1NEX0VOX01BU0s7CisJCWlmIChtYXNrICYgQklUKFhTRElSWF9N T0RFX0hEX09GRlNFVCkpCisJCQl2YWwgfD0gWFNESVJYX01ETF9DVFJMX01PREVfSERfRU5fTUFT SzsKKwkJLyoKKwkJICogVGhlcmUgaXMgb25seSBvbmUgYml0IGluIElQIHRvIGRldGVjdCAzRyBt b2RlLgorCQkgKiBTbyBzZXQgaXQgd2hlbiAzR0Egb3IgM0dCIG1hc2sgaXMgc2V0LgorCQkgKi8K KwkJaWYgKG1hc2sgJiAoQklUKFhTRElSWF9NT0RFXzNHQV9PRkZTRVQpIHwKKwkJCSAgICBCSVQo WFNESVJYX01PREVfM0dCX09GRlNFVCkpKQorCQkJdmFsIHw9IFhTRElSWF9NRExfQ1RSTF9NT0RF XzNHX0VOX01BU0s7CisJCWlmIChtYXNrICYgQklUKFhTRElSWF9NT0RFXzZHX09GRlNFVCkpCisJ CQl2YWwgfD0gWFNESVJYX01ETF9DVFJMX01PREVfNkdfRU5fTUFTSzsKKwkJaWYgKG1hc2sgJiBC SVQoWFNESVJYX01PREVfMTJHSV9PRkZTRVQpKQorCQkJdmFsIHw9IFhTRElSWF9NRExfQ1RSTF9N T0RFXzEyR0lfRU5fTUFTSzsKKwkJaWYgKG1hc2sgJiBCSVQoWFNESVJYX01PREVfMTJHRl9PRkZT RVQpKQorCQkJdmFsIHw9IFhTRElSWF9NRExfQ1RSTF9NT0RFXzEyR0ZfRU5fTUFTSzsKKworCQl2 YWwgfD0gWFNESVJYX01ETF9DVFJMX01PREVfREVUX0VOX01BU0s7CisJfSBlbHNlIHsKKwkJLyog Rml4ZWQgTW9kZSAqLworCQl1MzIgZm9yY2VkX21vZGVfbWFzazsKKworCQlkZXZfZGJnKGRldiwg IkRldGVjdCBmaXhlZCBtb2RlXG4iKTsKKworCQkvKiBGaW5kIG9mZnNldCBvZiBmaXJzdCBiaXQg c2V0ICovCisJCXN3aXRjaCAobWFzaykgeworCQljYXNlIFhTRElSWF9NT0RFX1NEX09GRlNFVDoK KwkJCWZvcmNlZF9tb2RlX21hc2sgPSBYU0RJUlhfTU9ERV9TRF9NQVNLOworCQkJYnJlYWs7CisJ CWNhc2UgWFNESVJYX01PREVfSERfT0ZGU0VUOgorCQkJZm9yY2VkX21vZGVfbWFzayA9IFhTRElS WF9NT0RFX0hEX01BU0s7CisJCQlicmVhazsKKwkJLyoKKwkJICogVGhlcmUgaXMgb25seSBvbmUg Yml0IGluIElQIHRvIGRldGVjdCAzRyBtb2RlLgorCQkgKiBTbyBzZXQgaXQgd2hlbiAzR0Egb3Ig M0dCIG1hc2sgaXMgc2V0LgorCQkgKi8KKwkJY2FzZSBYU0RJUlhfTU9ERV8zR0FfT0ZGU0VUOgor CQljYXNlIFhTRElSWF9NT0RFXzNHQl9PRkZTRVQ6CisJCQlmb3JjZWRfbW9kZV9tYXNrID0gWFNE SVJYX01PREVfM0dfTUFTSzsKKwkJCWJyZWFrOworCQljYXNlIFhTRElSWF9NT0RFXzZHX09GRlNF VDoKKwkJCWZvcmNlZF9tb2RlX21hc2sgPSBYU0RJUlhfTU9ERV82R19NQVNLOworCQkJYnJlYWs7 CisJCWNhc2UgWFNESVJYX01PREVfMTJHSV9PRkZTRVQ6CisJCQlmb3JjZWRfbW9kZV9tYXNrID0g WFNESVJYX01PREVfMTJHSV9NQVNLOworCQkJYnJlYWs7CisJCWNhc2UgWFNESVJYX01PREVfMTJH Rl9PRkZTRVQ6CisJCQlmb3JjZWRfbW9kZV9tYXNrID0gWFNESVJYX01PREVfMTJHRl9NQVNLOwor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGRldiwgIkludmFsaWQgbWFzayBmb3Ig Zml4ZWQgZGV0ZWN0IG1vZGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZGV2X2Ri ZyhkZXYsICJGb3JjZWQgTW9kZSBNYXNrIDogMHgleFxuIiwKKwkJCWZvcmNlZF9tb2RlX21hc2sp OworCQl2YWwgfD0gZm9yY2VkX21vZGVfbWFzayA8PCBYU0RJUlhfTURMX0NUUkxfRk9SQ0VEX01P REVfT0ZGU0VUOworCX0KKworCWRldl9kYmcoZGV2LCAiTW9kZXMgdG8gYmUgZGV0ZWN0ZWQgOiBz ZGkgY3RybCByZWcgPSAweCUwOHhcbiIsCisJCXZhbCk7CisJeHNkaXJ4c3Nfd3JpdGUoc3RhdGUs IFhTRElSWF9NRExfQ1RSTF9SRUcsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgeHNkaXJ4X3N0cmVhbWZsb3dfY29udHJvbChzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnN0YXRl LCBib29sIGVuYWJsZSkKK3sKKwkvKiBUaGUgc2RpIHRvIG5hdGl2ZSBicmlkZ2UgaXMgZm9sbG93 ZWQgYnkgbmF0aXZlIHRvIGF4aXM0IGJyaWRnZSAqLworCS8qCisJICogVE9ETyAtIEVuYWJsZSBZ VVY0NDQvUkJHIGZvcm1hdCBpbiB0aGUgYnJpZGdlIGJhc2VkCisJICogb24gQllURTMgY29sb3Ig Zm9ybWF0LgorCSAqIFhTRElSWF9SU1RfQ1RSTF9CUklER0VfQ0hfRk1UX1lVVjQ0NAorCSAqLwor CWlmIChlbmFibGUpIHsKKwkJeHNkaXJ4c3Nfc2V0KHN0YXRlLCBYU0RJUlhfUlNUX0NUUkxfUkVH LAorCQkJICAgICBYU0RJUlhfUlNUX0NUUkxfVklESU5fQVhJNFNfTU9EX0VOQl9NQVNLKTsKKwkJ eHNkaXJ4c3Nfc2V0KHN0YXRlLCBYU0RJUlhfUlNUX0NUUkxfUkVHLAorCQkJICAgICBYU0RJUlhf UlNUX0NUUkxfU0RJUlhfQlJJREdFX0VOQl9NQVNLKTsKKwl9IGVsc2UgeworCQl4c2Rpcnhzc19j bHIoc3RhdGUsIFhTRElSWF9SU1RfQ1RSTF9SRUcsCisJCQkgICAgIFhTRElSWF9SU1RfQ1RSTF9T RElSWF9CUklER0VfRU5CX01BU0spOworCQl4c2Rpcnhzc19jbHIoc3RhdGUsIFhTRElSWF9SU1Rf Q1RSTF9SRUcsCisJCQkgICAgIFhTRElSWF9SU1RfQ1RSTF9WSURJTl9BWEk0U19NT0RfRU5CX01B U0spOworCX0KKwlzdGF0ZS0+c3RyZWFtaW5nID0gZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCB4 c2Rpcnhzc19nZXRfZnJhbWVyYXRlKHN0cnVjdCB2NGwyX2ZyYWN0ICpmcmFtZV9pbnRlcnZhbCwK KwkJCQkgICB1MzIgZnJhbWVyYXRlKQoreworCXN3aXRjaCAoZnJhbWVyYXRlKSB7CisJY2FzZSBY U0RJUlhfVFNfREVUX1NUQVRfUkFURV8yM185OEhaOgorCQlmcmFtZV9pbnRlcnZhbC0+bnVtZXJh dG9yID0gMTAwMTsKKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0gMjQwMDA7CisJCWJy ZWFrOworCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfMjRIWjoKKwkJZnJhbWVfaW50ZXJ2 YWwtPm51bWVyYXRvciA9IDEwMDA7CisJCWZyYW1lX2ludGVydmFsLT5kZW5vbWluYXRvciA9IDI0 MDAwOworCQlicmVhazsKKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI1SFo6CisJCWZy YW1lX2ludGVydmFsLT5udW1lcmF0b3IgPSAxMDAwOworCQlmcmFtZV9pbnRlcnZhbC0+ZGVub21p bmF0b3IgPSAyNTAwMDsKKwkJYnJlYWs7CisJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8y OV85N0haOgorCQlmcmFtZV9pbnRlcnZhbC0+bnVtZXJhdG9yID0gMTAwMTsKKwkJZnJhbWVfaW50 ZXJ2YWwtPmRlbm9taW5hdG9yID0gMzAwMDA7CisJCWJyZWFrOworCWNhc2UgWFNESVJYX1RTX0RF VF9TVEFUX1JBVEVfMzBIWjoKKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEwMDA7CisJ CWZyYW1lX2ludGVydmFsLT5kZW5vbWluYXRvciA9IDMwMDAwOworCQlicmVhazsKKwljYXNlIFhT RElSWF9UU19ERVRfU1RBVF9SQVRFXzQ3Xzk1SFo6CisJCWZyYW1lX2ludGVydmFsLT5udW1lcmF0 b3IgPSAxMDAxOworCQlmcmFtZV9pbnRlcnZhbC0+ZGVub21pbmF0b3IgPSA0ODAwMDsKKwkJYnJl YWs7CisJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV80OEhaOgorCQlmcmFtZV9pbnRlcnZh bC0+bnVtZXJhdG9yID0gMTAwMDsKKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0gNDgw MDA7CisJCWJyZWFrOworCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfNTBIWjoKKwkJZnJh bWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEwMDA7CisJCWZyYW1lX2ludGVydmFsLT5kZW5vbWlu YXRvciA9IDUwMDAwOworCQlicmVhazsKKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzU5 Xzk0SFo6CisJCWZyYW1lX2ludGVydmFsLT5udW1lcmF0b3IgPSAxMDAxOworCQlmcmFtZV9pbnRl cnZhbC0+ZGVub21pbmF0b3IgPSA2MDAwMDsKKwkJYnJlYWs7CisJY2FzZSBYU0RJUlhfVFNfREVU X1NUQVRfUkFURV82MEhaOgorCQlmcmFtZV9pbnRlcnZhbC0+bnVtZXJhdG9yID0gMTAwMDsKKwkJ ZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0gNjAwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCWZyYW1lX2ludGVydmFsLT5udW1lcmF0b3IgPSAxOworCQlmcmFtZV9pbnRlcnZhbC0+ZGVu b21pbmF0b3IgPSAxOworCX0KK30KKworc3RhdGljIHZvaWQgeHNkaXJ4c3Nfc2V0X2d0Y2xrKHN0 cnVjdCB4c2Rpcnhzc19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGNsayAqZ3RjbGs7CisJdW5z aWduZWQgbG9uZyBjbGtyYXRlOworCWludCByZXQsIGlzX2ZyYWM7CisJdTMyIG1vZGU7CisKKwlt b2RlID0geHNkaXJ4c3NfcmVhZChzdGF0ZSwgWFNESVJYX01PREVfREVUX1NUQVRfUkVHKTsKKwlt b2RlICY9IFhTRElSWF9NT0RFX0RFVF9TVEFUX1JYX01PREVfTUFTSzsKKworCS8qCisJICogVE9E TzogRm9yIG5vdywgZG9uJ3QgY2hhbmdlIHRoZSBjbG9jayByYXRlIGZvciBhbnkgbW9kZSBleGNl cHQgMTJHLgorCSAqIEluIGZ1dHVyZSwgY29uZmlndXJlIGd0IGNsb2NrIGZvciBhbGwgbW9kZXMg YW5kIGVuYWJsZSBjbG9jayBvbmx5CisJICogd2hlbiBuZWVkZWQgKHN0cmVhbSBvbi9vZmYpLgor CSAqLworCWlmIChtb2RlICE9IFhTRElSWF9NT0RFXzEyR0lfTUFTSyAmJiBtb2RlICE9IFhTRElS WF9NT0RFXzEyR0ZfTUFTSykKKwkJcmV0dXJuOworCisJLyogV2hlbiBudW1lcmF0b3IgaXMgMTAw MSB0aGVuIGZyYW1lIHJhdGUgaXMgZnJhY3Rpb25hbCBlbHNlIGludGVnZXIgKi8KKwlpc19mcmFj ID0gc3RhdGUtPmZyYW1lX2ludGVydmFsLm51bWVyYXRvciA9PSAxMDAxID8gMSA6IDA7CisKKwlp ZiAoc3RhdGUtPnByZXZfaXNfZnJhYyA9PSBpc19mcmFjKQorCQlyZXR1cm47CisKKwlYU0RJUlhf R0xPQkFMX0lOVFJfRElTQUJMRShzdGF0ZSk7CisJeHNkaXJ4c3NfY2xyKHN0YXRlLCBYU0RJUlhf SUVSX1JFRywgWFNESVJYX0lOVFJfQUxMX01BU0spOworCVhTRElSWF9DT1JFX0RJU0FCTEUoc3Rh dGUpOworCisJLyogZ2V0IHNkaV9yeF9jbGsgKi8KKwlndGNsayA9IHN0YXRlLT5jbGtzWzFdLmNs azsKKworCS8qIGNhbGN1bGF0ZSBjbGtyYXRlICovCisJaWYgKCFpc19mcmFjKQorCQljbGtyYXRl ID0gQ0xLX0lOVDsKKwllbHNlCisJCWNsa3JhdGUgPSAoQ0xLX0lOVCAqIDEwMDApIC8gMTAwMTsK KworCXJldCA9IGNsa19zZXRfcmF0ZShndGNsaywgY2xrcmF0ZSk7CisJaWYgKHJldCkKKwkJZGV2 X2VycihzdGF0ZS0+ZGV2LCAiZmFpbGVkIHRvIHNldCBjbGsgcmF0ZSA9ICVkXG4iLCByZXQpOwor CisJc3RhdGUtPnByZXZfaXNfZnJhYyA9IGlzX2ZyYWM7CisJY2xrcmF0ZSA9IGNsa19nZXRfcmF0 ZShndGNsayk7CisKKwlkZXZfZGJnKHN0YXRlLT5kZXYsICJjbGtyYXRlID0gJWx1IGlzX2ZyYWMg PSAlZFxuIiwKKwkJY2xrcmF0ZSwgaXNfZnJhYyk7CisKKwlpZiAoc3RhdGUtPmZyYW1lcl9lbmFi bGUpIHsKKwkJeHNkaXJ4c3Nfc2V0KHN0YXRlLCBYU0RJUlhfTURMX0NUUkxfUkVHLAorCQkJICAg ICBYU0RJUlhfTURMX0NUUkxfRlJNX0VOX01BU0spOworCX0gZWxzZSB7CisJCXhzZGlyeHNzX2Ns cihzdGF0ZSwgWFNESVJYX01ETF9DVFJMX1JFRywKKwkJCSAgICAgWFNESVJYX01ETF9DVFJMX0ZS TV9FTl9NQVNLKTsKKwl9CisJeHNkaXJ4c3Nfd3JpdGUoc3RhdGUsIFhTRElSWF9FREhfRVJSQ05U X0VOX1JFRywKKwkJICAgICAgIHN0YXRlLT5lZGhtYXNrICYgWFNESVJYX0VESF9BTExFUlJfTUFT Syk7CisJeHNkaXJ4c3Nfd3JpdGUoc3RhdGUsIFhTRElSWF9WSURfTE9DS19XSU5ET1dfUkVHLCBz dGF0ZS0+dmlkbG9ja2VkKTsKKwl4c2Rpcnhfc2V0X21vZGVkZXRlY3Qoc3RhdGUsIHN0YXRlLT5z ZWFyY2htYXNrKTsKKwlYU0RJUlhfQ09SRV9FTkFCTEUoc3RhdGUpOworCXhzZGlyeHNzX3NldChz dGF0ZSwgWFNESVJYX0lFUl9SRUcsIFhTRElSWF9JTlRSX0FMTF9NQVNLKTsKKwlYU0RJUlhfR0xP QkFMX0lOVFJfRU5BQkxFKHN0YXRlKTsKK30KKworLyoqCisgKiB4c2RpcnhfZ2V0X3N0cmVhbV9w cm9wZXJ0aWVzIC0gR2V0IFNESSBSeCBzdHJlYW0gcHJvcGVydGllcworICogQHN0YXRlOiBwb2lu dGVyIHRvIGRyaXZlciBzdGF0ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGVjb2RlcyB0aGUgc3Ry ZWFtJ3MgU1QzNTIgcGF5bG9hZCAoaWYgYXZhaWxhYmxlKSB0byBnZXQKKyAqIHN0cmVhbSBwcm9w ZXJ0aWVzIGxpa2Ugd2lkdGgsIGhlaWdodCwgcGljdHVyZSB0eXBlIChpbnRlcmxhY2VkL3Byb2dy ZXNzaXZlKSwKKyAqIGV0Yy4KKyAqCisgKiBSZXR1cm46IDAgZm9yIHN1Y2Nlc3MgZWxzZSBlcnJv cnMKKyAqLworc3RhdGljIGludCB4c2RpcnhfZ2V0X3N0cmVhbV9wcm9wZXJ0aWVzKHN0cnVjdCB4 c2Rpcnhzc19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3RhdGUtPmRl djsKKwl1MzIgbW9kZSwgcGF5bG9hZCA9IDAsIHZhbCwgZmFtaWx5LCB2YWxpZCwgdHNjYW47CisJ dTggYnl0ZTEgPSAwLCBhY3RpdmVfbHVtYSA9IDAsIHBpY190eXBlID0gMCwgZnJhbWVyYXRlID0g MDsKKwl1OCBzYW1wbGluZyA9IFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfNDIyOworCXN0cnVj dCB2NGwyX21idXNfZnJhbWVmbXQgKmZvcm1hdCA9ICZzdGF0ZS0+Zm9ybWF0OworCXUzMiBicGMg PSBYU1QzNTJfQllURTRfQklUX0RFUFRIXzEwOworCXUzMiBjb2xvcmltZXRyeSA9IFhTVDM1Ml9C WVRFM19DT0xPUklNRVRSWV9CVDcwOTsKKworCW1vZGUgPSB4c2Rpcnhzc19yZWFkKHN0YXRlLCBY U0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOworCW1vZGUgJj0gWFNESVJYX01PREVfREVUX1NUQVRf UlhfTU9ERV9NQVNLOworCisJdmFsaWQgPSB4c2Rpcnhzc19yZWFkKHN0YXRlLCBYU0RJUlhfU1Qz NTJfVkFMSURfUkVHKTsKKworCWlmIChtb2RlID49IFhTRElSWF9NT0RFXzNHX01BU0sgJiYgIXZh bGlkKSB7CisJCWRldl9lcnIoZGV2LCAiTm8gdmFsaWQgU1QzNTIgcGF5bG9hZCBwcmVzZW50IGV2 ZW4gZm9yIDNHIG1vZGUgYW5kIGFib3ZlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ dmFsID0geHNkaXJ4c3NfcmVhZChzdGF0ZSwgWFNESVJYX1RTX0RFVF9TVEFUX1JFRyk7CisJaWYg KHZhbGlkICYgWFNESVJYX1NUMzUyX1ZBTElEX0RTMV9NQVNLKSB7CisJCXBheWxvYWQgPSB4c2Rp cnhzc19yZWFkKHN0YXRlLCBYU0RJUlhfU1QzNTJfRFMxX1JFRyk7CisJCWJ5dGUxID0gRklFTERf R0VUKFhTVDM1Ml9QQVlMT0FEX0JZVEUxX01BU0ssIHBheWxvYWQpOworCQlhY3RpdmVfbHVtYSA9 IEZJRUxEX0dFVChYU1QzNTJfQllURTNfQUNUX0xVTUFfQ09VTlRfTUFTSywKKwkJCQkJcGF5bG9h ZCk7CisJCXBpY190eXBlID0gRklFTERfR0VUKFhTVDM1Ml9CWVRFMl9QSUNfVFlQRV9NQVNLLCBw YXlsb2FkKTsKKwkJZnJhbWVyYXRlID0gRklFTERfR0VUKFhTVDM1Ml9CWVRFMl9GUFNfTUFTSywg cGF5bG9hZCk7CisJCXRzY2FuID0gRklFTERfR0VUKFhTVDM1Ml9CWVRFMl9UU19UWVBFX01BU0ss IHBheWxvYWQpOworCQlzYW1wbGluZyA9IEZJRUxEX0dFVChYU1QzNTJfQllURTNfQ09MT1JfRk9S TUFUX01BU0ssIHBheWxvYWQpOworCQlicGMgPSBGSUVMRF9HRVQoWFNUMzUyX0JZVEU0X0JJVF9E RVBUSF9NQVNLLCBwYXlsb2FkKTsKKwkJY29sb3JpbWV0cnkgPSBGSUVMRF9HRVQoWFNUMzUyX0JZ VEUzX0NPTE9SSU1FVFJZX01BU0ssIHBheWxvYWQpOworCX0gZWxzZSB7CisJCWRldl9kYmcoZGV2 LCAiTm8gU1QzNTIgcGF5bG9hZCBhdmFpbGFibGUgOiBNb2RlID0gJWRcbiIsIG1vZGUpOworCQlm cmFtZXJhdGUgPSBGSUVMRF9HRVQoWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfTUFTSywgdmFsKTsK KwkJdHNjYW4gPSBGSUVMRF9HRVQoWFNESVJYX1RTX0RFVF9TVEFUX1NDQU5fTUFTSywgdmFsKTsK Kwl9CisKKwlpZiAoKGJwYyA9PSBYU1QzNTJfQllURTRfQklUX0RFUFRIXzEwICYmIHN0YXRlLT5i cGMgIT0gMTApIHx8CisJICAgIChicGMgPT0gWFNUMzUyX0JZVEU0X0JJVF9ERVBUSF8xMiAmJiBz dGF0ZS0+YnBjICE9IDEyKSkgeworCQlkZXZfZGJnKGRldiwgIkJpdCBkZXB0aCBub3Qgc3VwcG9y dGVkLiBicGMgPSAlZCBzdGF0ZS0+YnBjID0gJWRcbiIsCisJCQlicGMsIHN0YXRlLT5icGMpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmYW1pbHkgPSBGSUVMRF9HRVQoWFNESVJYX1RTX0RF VF9TVEFUX0ZBTUlMWV9NQVNLLCB2YWwpOworCXN0YXRlLT50c19pc19pbnRlcmxhY2VkID0gdHNj YW4gPyBmYWxzZSA6IHRydWU7CisKKwlkZXZfZGJnKGRldiwgInRzX2lzX2ludGVybGFjZWQgPSAl ZCwgZmFtaWx5ID0gJWRcbiIsCisJCXN0YXRlLT50c19pc19pbnRlcmxhY2VkLCBmYW1pbHkpOwor CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBYU0RJUlhfTU9ERV9IRF9NQVNLOgorCQlpZiAoIXZh bGlkKSB7CisJCQkvKiBObyBwYXlsb2FkIG9idGFpbmVkICovCisJCQlkZXZfZGJnKGRldiwgImZy YW1lIHJhdGUgOiAlZCwgdHNjYW4gPSAlZFxuIiwKKwkJCQlmcmFtZXJhdGUsIHRzY2FuKTsKKwkJ CS8qCisJCQkgKiBOT1RFIDogQSBwcm9ncmVzc2l2ZSBzZWdtZW50ZWQgZnJhbWUgcFNGIHdpbGwg YmUKKwkJCSAqIHJlcG9ydGVkIGluY29ycmVjdGx5IGFzIEludGVybGFjZWQgYXMgd2UgcmVseSBv biBJUCdzCisJCQkgKiB0cmFuc3BvcnQgc2NhbiBsb2NrZWQgYml0LgorCQkJICovCisJCQlkZXZf d2FybihkZXYsICJwU0Ygd2lsbCBiZSBpbmNvcnJlY3RseSByZXBvcnRlZCBhcyBJbnRlcmxhY2Vk XG4iKTsKKworCQkJc3dpdGNoIChmcmFtZXJhdGUpIHsKKwkJCWNhc2UgWFNESVJYX1RTX0RFVF9T VEFUX1JBVEVfMjNfOThIWjoKKwkJCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfMjRIWjoK KwkJCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfMjVIWjoKKwkJCWNhc2UgWFNESVJYX1RT X0RFVF9TVEFUX1JBVEVfMjlfOTdIWjoKKwkJCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVf MzBIWjoKKwkJCQlpZiAoZmFtaWx5ID09IFhTRElSWF9TTVBURV9TVF8yOTYpIHsKKwkJCQkJZm9y bWF0LT53aWR0aCA9IDEyODA7CisJCQkJCWZvcm1hdC0+aGVpZ2h0ID0gNzIwOworCQkJCQlmb3Jt YXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQkJCX0gZWxzZSBpZiAoZmFtaWx5ID09IFhT RElSWF9TTVBURV9TVF8yMDQ4XzIpIHsKKwkJCQkJZm9ybWF0LT53aWR0aCA9IDIwNDg7CisJCQkJ CWZvcm1hdC0+aGVpZ2h0ID0gMTA4MDsKKwkJCQkJaWYgKHRzY2FuKQorCQkJCQkJZm9ybWF0LT5m aWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwkJCQkJZWxzZQorCQkJCQkJZm9ybWF0LT5maWVsZCA9 CisJCQkJCQkJVjRMMl9GSUVMRF9BTFRFUk5BVEU7CisJCQkJfSBlbHNlIHsKKwkJCQkJZm9ybWF0 LT53aWR0aCA9IDE5MjA7CisJCQkJCWZvcm1hdC0+aGVpZ2h0ID0gMTA4MDsKKwkJCQkJaWYgKHRz Y2FuKQorCQkJCQkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwkJCQkJZWxzZQor CQkJCQkJZm9ybWF0LT5maWVsZCA9CisJCQkJCQkJVjRMMl9GSUVMRF9BTFRFUk5BVEU7CisJCQkJ fQorCQkJCWJyZWFrOworCQkJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV81MEhaOgorCQkJ Y2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV81OV85NEhaOgorCQkJY2FzZSBYU0RJUlhfVFNf REVUX1NUQVRfUkFURV82MEhaOgorCQkJCWlmIChmYW1pbHkgPT0gWFNESVJYX1NNUFRFX1NUXzI3 NCkgeworCQkJCQlmb3JtYXQtPndpZHRoID0gMTkyMDsKKwkJCQkJZm9ybWF0LT5oZWlnaHQgPSAx MDgwOworCQkJCX0gZWxzZSB7CisJCQkJCWZvcm1hdC0+d2lkdGggPSAxMjgwOworCQkJCQlmb3Jt YXQtPmhlaWdodCA9IDcyMDsKKwkJCQl9CisJCQkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERf Tk9ORTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZm9ybWF0LT53aWR0aCA9IDE5MjA7 CisJCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOworCQkJCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJ RUxEX05PTkU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKGRldiwgIkdvdCB0aGUgcGF5 bG9hZFxuIik7CisJCQlzd2l0Y2ggKGJ5dGUxKSB7CisJCQljYXNlIFhTVDM1Ml9CWVRFMV9TVDI5 Ml8xeDcyMExfMV81RzoKKwkJCQkvKiBTTVBURSBTVCAyOTItMSBmb3IgNzIwIGxpbmUgcGF5bG9h ZHMgKi8KKwkJCQlmb3JtYXQtPndpZHRoID0gMTI4MDsKKwkJCQlmb3JtYXQtPmhlaWdodCA9IDcy MDsKKwkJCQlicmVhazsKKwkJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMjkyXzF4MTA4MExfMV81RzoK KwkJCQkvKiBTTVBURSBTVCAyOTItMSBmb3IgMTA4MCBsaW5lIHBheWxvYWRzICovCisJCQkJZm9y bWF0LT5oZWlnaHQgPSAxMDgwOworCQkJCWlmIChhY3RpdmVfbHVtYSkKKwkJCQkJZm9ybWF0LT53 aWR0aCA9IDIwNDg7CisJCQkJZWxzZQorCQkJCQlmb3JtYXQtPndpZHRoID0gMTkyMDsKKwkJCQli cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZGV2X2RiZyhkZXYsICJVbmtub3duIEhEIE1vZGUgU01Q VEUgc3RhbmRhcmRcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisJCWJyZWFr OworCWNhc2UgWFNESVJYX01PREVfU0RfTUFTSzoKKwkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklF TERfQUxURVJOQVRFOworCisJCXN3aXRjaCAoZmFtaWx5KSB7CisJCWNhc2UgWFNESVJYX05UU0M6 CisJCQlmb3JtYXQtPndpZHRoID0gNzIwOworCQkJZm9ybWF0LT5oZWlnaHQgPSA0ODY7CisJCQli cmVhazsKKwkJY2FzZSBYU0RJUlhfUEFMOgorCQkJZm9ybWF0LT53aWR0aCA9IDcyMDsKKwkJCWZv cm1hdC0+aGVpZ2h0ID0gNTc2OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZGJnKGRl diwgIlVua25vd24gU0QgTW9kZSBTTVBURSBzdGFuZGFyZFxuIik7CisJCQlyZXR1cm4gLUVJTlZB TDsKKwkJfQorCQlicmVhazsKKwljYXNlIFhTRElSWF9NT0RFXzNHX01BU0s6CisJCXN3aXRjaCAo Ynl0ZTEpIHsKKwkJY2FzZSBYU1QzNTJfQllURTFfU1Q0MjVfMjAwOF83NTBMXzNHQjoKKwkJCS8q IFNlYyA0LjEuNi4xIFNNUFRFIDQyNS0yMDA4ICovCisJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMzcy XzJ4NzIwTF8zR0I6CisJCQkvKiBUYWJsZSAxMyBTTVBURSA0MjUtMjAwOCAqLworCQkJZm9ybWF0 LT53aWR0aCA9IDEyODA7CisJCQlmb3JtYXQtPmhlaWdodCA9IDcyMDsKKwkJCWJyZWFrOworCQlj YXNlIFhTVDM1Ml9CWVRFMV9TVDQyNV8yMDA4XzExMjVMXzNHQToKKwkJCS8qIFNUMzUyIFRhYmxl IFNNUFRFIDQyNS0xICovCisJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMzcyX0RMXzNHQjoKKwkJCS8q IFRhYmxlIDEzIFNNUFRFIDQyNS0yMDA4ICovCisJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMzcyXzJ4 MTA4MExfM0dCOgorCQkJLyogVGFibGUgMTMgU01QVEUgNDI1LTIwMDggKi8KKwkJCWZvcm1hdC0+ aGVpZ2h0ID0gMTA4MDsKKwkJCWlmIChhY3RpdmVfbHVtYSkKKwkJCQlmb3JtYXQtPndpZHRoID0g MjA0ODsKKwkJCWVsc2UKKwkJCQlmb3JtYXQtPndpZHRoID0gMTkyMDsKKwkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJZGV2X2RiZyhkZXYsICJVbmtub3duIDNHIE1vZGUgU01QVEUgc3RhbmRhcmRc biIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBYU0RJUlhfTU9E RV82R19NQVNLOgorCQlzd2l0Y2ggKGJ5dGUxKSB7CisJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMjA4 MV8xMF9ETF8yMTYwTF82RzoKKwkJCS8qIER1YWwgbGluayA2RyAqLworCQljYXNlIFhTVDM1Ml9C WVRFMV9TVDIwODFfMTBfMjE2MExfNkc6CisJCQkvKiBUYWJsZSAzIFNNUFRFIFNUIDIwODEtMTAg Ki8KKwkJCWZvcm1hdC0+aGVpZ2h0ID0gMjE2MDsKKwkJCWlmIChhY3RpdmVfbHVtYSkKKwkJCQlm b3JtYXQtPndpZHRoID0gNDA5NjsKKwkJCWVsc2UKKwkJCQlmb3JtYXQtPndpZHRoID0gMzg0MDsK KwkJCWJyZWFrOworCQljYXNlIFhTVDM1Ml9CWVRFMV9TVDIwODFfMTBfMl8xMDgwTF82RzoKKwkJ CWZvcm1hdC0+aGVpZ2h0ID0gMTA4MDsKKwkJCWlmIChhY3RpdmVfbHVtYSkKKwkJCQlmb3JtYXQt PndpZHRoID0gMjA0ODsKKwkJCWVsc2UKKwkJCQlmb3JtYXQtPndpZHRoID0gMTkyMDsKKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2RiZyhkZXYsICJVbmtub3duIDZHIE1vZGUgU01QVEUg c3RhbmRhcmRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBY U0RJUlhfTU9ERV8xMkdJX01BU0s6CisJY2FzZSBYU0RJUlhfTU9ERV8xMkdGX01BU0s6CisJCXN3 aXRjaCAoYnl0ZTEpIHsKKwkJY2FzZSBYU1QzNTJfQllURTFfU1QyMDgyXzEwXzIxNjBMXzEyRzoK KwkJCS8qIFNlY3Rpb24gNC4zLjEgU01QVEUgU1QgMjA4Mi0xMCAqLworCQkJZm9ybWF0LT5oZWln aHQgPSAyMTYwOworCQkJaWYgKGFjdGl2ZV9sdW1hKQorCQkJCWZvcm1hdC0+d2lkdGggPSA0MDk2 OworCQkJZWxzZQorCQkJCWZvcm1hdC0+d2lkdGggPSAzODQwOworCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQlkZXZfZGJnKGRldiwgIlVua25vd24gMTJHIE1vZGUgU01QVEUgc3RhbmRhcmRcbiIp OworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vy cihkZXYsICJJbnZhbGlkIE1vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAo dmFsaWQpIHsKKwkJaWYgKHBpY190eXBlKQorCQkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERf Tk9ORTsKKwkJZWxzZQorCQkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfQUxURVJOQVRFOwor CisJCWlmIChmb3JtYXQtPmhlaWdodCA9PSAxMDgwICYmIHBpY190eXBlICYmICF0c2NhbikKKwkJ CWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0FMVEVSTkFURTsKKworCQkvKgorCQkgKiBJbiAz R0IgREwgcFNGIG1vZGUgdGhlIHZpZGVvIGlzIHNpbWlsYXIgdG8gaW50ZXJsYWNlZC4KKwkJICog U28gdGhvdWdoIGl0IGlzIGEgcHJvZ3Jlc3NpdmUgdmlkZW8sIGl0cyB0cmFuc3BvcnQgaXMKKwkJ ICogaW50ZXJsYWNlZCBhbmQgaXMgc2VudCBhcyB0d28gd2lkdGggeCAoaGVpZ2h0LzIpIGJ1ZmZl cnMuCisJCSAqLworCQlpZiAoYnl0ZTEgPT0gWFNUMzUyX0JZVEUxX1NUMzcyX0RMXzNHQikgewor CQkJaWYgKHN0YXRlLT50c19pc19pbnRlcmxhY2VkKQorCQkJCWZvcm1hdC0+ZmllbGQgPSBWNEwy X0ZJRUxEX0FMVEVSTkFURTsKKwkJCWVsc2UKKwkJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVM RF9OT05FOworCQl9CisJfQorCisJaWYgKGZvcm1hdC0+ZmllbGQgPT0gVjRMMl9GSUVMRF9BTFRF Uk5BVEUpCisJCWZvcm1hdC0+aGVpZ2h0ID0gZm9ybWF0LT5oZWlnaHQgLyAyOworCisJc3dpdGNo IChzYW1wbGluZykgeworCWNhc2UgWFNUMzUyX0JZVEUzX0NPTE9SX0ZPUk1BVF80MjI6CisJCWlm IChzdGF0ZS0+YnBjID09IDEwKQorCQkJZm9ybWF0LT5jb2RlID0gTUVESUFfQlVTX0ZNVF9VWVZZ MTBfMVgyMDsKKwkJZWxzZQorCQkJZm9ybWF0LT5jb2RlID0gTUVESUFfQlVTX0ZNVF9VWVZZMTJf MVgyNDsKKwkJYnJlYWs7CisJY2FzZSBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFUXzQyMDoKKwlj YXNlIFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfWVVWNDQ0OgorCWNhc2UgWFNUMzUyX0JZVEUz X0NPTE9SX0ZPUk1BVF9HQlI6CisJCWZvcm1hdC0+Y29kZSA9IDA7CisJCWRldl9kYmcoZGV2LCAi Tm8gY29ycmVzcG9uZGluZyBtZWRpYSBidXMgZm9ybWF0c1xuIik7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCWRldl9lcnIoZGV2LCAiVW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0IDogJWRcbiIsIHNh bXBsaW5nKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmVmZXIgVGFibGUgMyBTTVBU RSBTVCAyMDgxLTEwOjIwMTggKi8KKwlzd2l0Y2ggKGNvbG9yaW1ldHJ5KSB7CisJY2FzZSBYU1Qz NTJfQllURTNfQ09MT1JJTUVUUllfQlQ3MDk6CisJCWZvcm1hdC0+Y29sb3JzcGFjZSA9IFY0TDJf Q09MT1JTUEFDRV9SRUM3MDk7CisJCWJyZWFrOworCS8qIFdoZW4gSERSIHN1cHBvcnQgaXMgYWRk ZWQgVUhEVFYgd2lsbCBoYXZlIEJUMjAyMCBjb2xvcnNwYWNlICovCisJY2FzZSBYU1QzNTJfQllU RTNfQ09MT1JJTUVUUllfVUhEVFY6CisJY2FzZSBYU1QzNTJfQllURTNfQ09MT1JJTUVUUllfQ09M T1JfVkFOQzoKKwljYXNlIFhTVDM1Ml9CWVRFM19DT0xPUklNRVRSWV9VTktOT1dOOgorCWRlZmF1 bHQ6CisJCWRldl9lcnIoZGV2LCAiVW5rbm93biBjb2xvcmltZXRyeSA6ICVkXG4iLCBjb2xvcmlt ZXRyeSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXhzZGlyeHNzX2dldF9mcmFtZXJhdGUo JnN0YXRlLT5mcmFtZV9pbnRlcnZhbCwgZnJhbWVyYXRlKTsKKworCWRldl9kYmcoZGV2LCAiU3Ry ZWFtIHdpZHRoID0gJWQgaGVpZ2h0ID0gJWQgRmllbGQgPSAlZCBwYXlsb2FkID0gMHglMDh4IHRz ID0gMHglMDh4XG4iLAorCQlmb3JtYXQtPndpZHRoLCBmb3JtYXQtPmhlaWdodCwgZm9ybWF0LT5m aWVsZCwgcGF5bG9hZCwgdmFsKTsKKwlkZXZfZGJnKGRldiwgImZyYW1lIHJhdGUgbnVtZXJhdG9y ID0gJWQgZGVub21pbmF0b3IgPSAlZFxuIiwKKwkJc3RhdGUtPmZyYW1lX2ludGVydmFsLm51bWVy YXRvciwKKwkJc3RhdGUtPmZyYW1lX2ludGVydmFsLmRlbm9taW5hdG9yKTsKKwlkZXZfZGJnKGRl diwgIlN0cmVhbSBjb2RlID0gMHgleFxuIiwgZm9ybWF0LT5jb2RlKTsKKwlyZXR1cm4gMDsKK30K KworLyoqCisgKiB4c2Rpcnhzc19pcnFfaGFuZGxlciAtIEludGVycnVwdCBoYW5kbGVyIGZvciBT REkgUngKKyAqIEBpcnE6IElSUSBudW1iZXIKKyAqIEBkZXZfaWQ6IFBvaW50ZXIgdG8gZGV2aWNl IHN0YXRlCisgKgorICogVGhlIFNESSBSeCBpbnRlcnJ1cHRzIGFyZSBjbGVhcmVkIGJ5IHdyaXRp bmcgMSB0byBjb3JyZXNwb25kaW5nIGJpdC4KKyAqCisgKiBSZXR1cm46IElSUV9IQU5ETEVEIGFm dGVyIGhhbmRsaW5nIGludGVycnVwdHMKKyAqLworc3RhdGljIGlycXJldHVybl90IHhzZGlyeHNz X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgeHNkaXJ4c3Nf c3RhdGUgKnN0YXRlID0gKHN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqKWRldl9pZDsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBzdGF0ZS0+ZGV2OworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSB4c2Rp cnhzc19yZWFkKHN0YXRlLCBYU0RJUlhfSVNSX1JFRyk7CisJeHNkaXJ4c3Nfd3JpdGUoc3RhdGUs IFhTRElSWF9JU1JfUkVHLCBzdGF0dXMpOworCWRldl9kYmcoZGV2LCAiaW50ZXJydXB0IHN0YXR1 cyA9IDB4JTA4eFxuIiwgc3RhdHVzKTsKKworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gSVJRX05P TkU7CisKKwlpZiAoc3RhdHVzICYgWFNESVJYX0lOVFJfVklETE9DS19NQVNLIHx8CisJICAgIHN0 YXR1cyAmIFhTRElSWF9JTlRSX1ZJRFVOTE9DS19NQVNLKSB7CisJCXUzMiB2YWwxLCB2YWwyOwor CQlzdHJ1Y3QgdjRsMl9ldmVudCBldmVudCA9IHsgMCB9OworCQl1bnNpZ25lZCBsb25nIGZsYWdz OworCisJCWRldl9kYmcoZGV2LCAidmlkZW8gbG9jay91bmxvY2sgaW50ZXJydXB0XG4iKTsKKwor CQlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhdGUtPnNsb2NrLCBmbGFncyk7CisJCXhzZGlyeF9zdHJl YW1mbG93X2NvbnRyb2woc3RhdGUsIGZhbHNlKTsKKworCQl2YWwxID0geHNkaXJ4c3NfcmVhZChz dGF0ZSwgWFNESVJYX01PREVfREVUX1NUQVRfUkVHKTsKKwkJdmFsMiA9IHhzZGlyeHNzX3JlYWQo c3RhdGUsIFhTRElSWF9UU19ERVRfU1RBVF9SRUcpOworCisJCWlmICgodmFsMSAmIFhTRElSWF9N T0RFX0RFVF9TVEFUX01PREVfTE9DS19NQVNLKSAmJgorCQkgICAgKHZhbDIgJiBYU0RJUlhfVFNf REVUX1NUQVRfTE9DS0VEX01BU0spKSB7CisJCQl1MzIgbWFzayA9IFhTRElSWF9SU1RfQ1RSTF9S U1RfQ1JDX0VSUkNOVF9NQVNLIHwKKwkJCQkgICBYU0RJUlhfUlNUX0NUUkxfUlNUX0VESF9FUlJD TlRfTUFTSzsKKworCQkJZGV2X2RiZyhkZXYsICJ2aWRlbyBsb2NrIGludGVycnVwdFxuIik7CisK KwkJCXhzZGlyeHNzX3NldChzdGF0ZSwgWFNESVJYX1JTVF9DVFJMX1JFRywgbWFzayk7CisJCQl4 c2Rpcnhzc19jbHIoc3RhdGUsIFhTRElSWF9SU1RfQ1RSTF9SRUcsIG1hc2spOworCisJCQl2YWwx ID0geHNkaXJ4c3NfcmVhZChzdGF0ZSwgWFNESVJYX1NUMzUyX1ZBTElEX1JFRyk7CisJCQl2YWwy ID0geHNkaXJ4c3NfcmVhZChzdGF0ZSwgWFNESVJYX1NUMzUyX0RTMV9SRUcpOworCisJCQlkZXZf ZGJnKGRldiwgInZhbGlkIHN0MzUyIG1hc2sgPSAweCUwOHhcbiIsIHZhbDEpOworCQkJZGV2X2Ri ZyhkZXYsICJzdDM1MiBwYXlsb2FkID0gMHglMDh4XG4iLCB2YWwyKTsKKworCQkJaWYgKCF4c2Rp cnhfZ2V0X3N0cmVhbV9wcm9wZXJ0aWVzKHN0YXRlKSkgeworCQkJCXN0YXRlLT52aWRsb2NrZWQg PSB0cnVlOworCQkJCXhzZGlyeHNzX3NldF9ndGNsayhzdGF0ZSk7CisJCQl9IGVsc2UgeworCQkJ CWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGdldCBzdHJlYW0gcHJvcGVydGllcyFcbiIpOworCQkJ CXN0YXRlLT52aWRsb2NrZWQgPSBmYWxzZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRldl9kYmco ZGV2LCAidmlkZW8gdW5sb2NrIGludGVycnVwdFxuIik7CisJCQlzdGF0ZS0+dmlkbG9ja2VkID0g ZmFsc2U7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhdGUtPnNsb2NrLCBmbGFn cyk7CisKKwkJZXZlbnQudHlwZSA9IFY0TDJfRVZFTlRfU09VUkNFX0NIQU5HRTsKKwkJZXZlbnQu dS5zcmNfY2hhbmdlLmNoYW5nZXMgPSBWNEwyX0VWRU5UX1NSQ19DSF9SRVNPTFVUSU9OOworCQl2 NGwyX3N1YmRldl9ub3RpZnlfZXZlbnQoJnN0YXRlLT5zdWJkZXYsICZldmVudCk7CisJfQorCisJ aWYgKHN0YXR1cyAmIChYU0RJUlhfSU5UUl9VTkRFUkZMT1dfTUFTSyB8IFhTRElSWF9JTlRSX09W RVJGTE9XX01BU0spKSB7CisJCXN0cnVjdCB2NGwyX2V2ZW50IGV2ZW50ID0geyAwIH07CisKKwkJ ZGV2X2RiZyhkZXYsICJWaWRlbyBpbiB0byBBWEk0IFN0cmVhbSBjb3JlIHVuZGVyL292ZXJmbG93 IGludGVycnVwdFxuIik7CisKKwkJZXZlbnQudHlwZSA9IFY0TDJfRVZFTlRfWElMSU5YX1NESVJY X1VORF9PVlJfRkxPVzsKKwkJaWYgKHN0YXR1cyAmIFhTRElSWF9JTlRSX1VOREVSRkxPV19NQVNL KQorCQkJZXZlbnQudS5kYXRhWzBdID0gWElMSU5YX1NESVJYX1VOREVSRkxPV19FVkVOVDsKKwkJ aWYgKHN0YXR1cyAmIFhTRElSWF9JTlRSX09WRVJGTE9XX01BU0spCisJCQlldmVudC51LmRhdGFb MF0gPSBYSUxJTlhfU0RJUlhfT1ZFUkZMT1dfRVZFTlQ7CisKKwkJdjRsMl9zdWJkZXZfbm90aWZ5 X2V2ZW50KCZzdGF0ZS0+c3ViZGV2LCAmZXZlbnQpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7 Cit9CisKKy8qKgorICogeHNkaXJ4c3Nfc3Vic2NyaWJlX2V2ZW50IC0gU3Vic2NyaWJlIHRvIHZp ZGVvIGxvY2sgYW5kIHVubG9jayBldmVudAorICogQHNkOiBWNEwyIFN1YiBkZXZpY2UKKyAqIEBm aDogVjRMMiBGaWxlIEhhbmRsZQorICogQHN1YjogU3ViY3JpYmUgZXZlbnQgc3RydWN0dXJlCisg KgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9ycyBvdGhlcndpc2UKKyAqLworc3RhdGlj IGludCB4c2Rpcnhzc19zdWJzY3JpYmVfZXZlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJ CQkgICAgc3RydWN0IHY0bDJfZmggKmZoLAorCQkJCSAgICBzdHJ1Y3QgdjRsMl9ldmVudF9zdWJz Y3JpcHRpb24gKnN1YikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNk aXJ4c3MgPSB0b194c2Rpcnhzc3N0YXRlKHNkKTsKKworCWRldl9kYmcoeHNkaXJ4c3MtPmRldiwg IkV2ZW50IHN1YnNjcmliZWQgOiAweCUwOHhcbiIsIHN1Yi0+dHlwZSk7CisJc3dpdGNoIChzdWIt PnR5cGUpIHsKKwljYXNlIFY0TDJfRVZFTlRfWElMSU5YX1NESVJYX1VORF9PVlJfRkxPVzoKKwkJ cmV0ID0gdjRsMl9ldmVudF9zdWJzY3JpYmUoZmgsIHN1YiwgWFNESVJYX01BWF9FVkVOVFMsIE5V TEwpOworCQlicmVhazsKKwljYXNlIFY0TDJfRVZFTlRfU09VUkNFX0NIQU5HRToKKwkJcmV0ID0g djRsMl9zcmNfY2hhbmdlX2V2ZW50X3N1YnNjcmliZShmaCwgc3ViKTsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJcmV0ID0gdjRsMl9jdHJsX3N1YnNjcmliZV9ldmVudChmaCwgc3ViKTsKKwl9CisJ cmV0dXJuIHJldDsKK30KKworLyoqCisgKiB4c2Rpcnhzc19zX2N0cmwgLSBUaGlzIGlzIHVzZWQg dG8gc2V0IHRoZSBYaWxpbnggU0RJIFJ4IFY0TDIgY29udHJvbHMKKyAqIEBjdHJsOiBWNEwyIGNv bnRyb2wgdG8gYmUgc2V0CisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUg VjRMMiBjb250cm9scyBmb3IgdGhlIFhpbGlueCBTREkgUngKKyAqIFN1YnN5c3RlbS4KKyAqCisg KiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3JzIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50 IHhzZGlyeHNzX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQoreworCWludCByZXQgPSAw OworCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPQorCQljb250YWluZXJfb2YoY3Ry bC0+aGFuZGxlciwgc3RydWN0IHhzZGlyeHNzX3N0YXRlLAorCQkJICAgICBjdHJsX2hhbmRsZXIp OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHhzZGlyeHNzLT5kZXY7CisJdW5zaWduZWQgbG9uZyBm bGFnczsKKworCWRldl9kYmcoZGV2LCAic2V0IGN0cmwgaWQgPSAweCUwOHggdmFsID0gMHglMDh4 XG4iLAorCQljdHJsLT5pZCwgY3RybC0+dmFsKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ4c2Rp cnhzcy0+c2xvY2ssIGZsYWdzKTsKKworCWlmICh4c2Rpcnhzcy0+c3RyZWFtaW5nKSB7CisJCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnhzZGlyeHNzLT5zbG9jaywgZmxhZ3MpOworCQlkZXZfZXJy KGRldiwgIkNhbm5vdCBzZXQgY29udHJvbHMgd2hpbGUgc3RyZWFtaW5nXG4iKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJWFNESVJYX0NPUkVfRElTQUJMRSh4c2Rpcnhzcyk7CisJc3dpdGNo IChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfWElMSU5YX1NESVJYX0ZSQU1FUjoKKwkJeHNk aXJ4c3MtPmZyYW1lcl9lbmFibGUgPSBjdHJsLT52YWw7CisJCWlmICh4c2Rpcnhzcy0+ZnJhbWVy X2VuYWJsZSkgeworCQkJeHNkaXJ4c3Nfc2V0KHhzZGlyeHNzLCBYU0RJUlhfTURMX0NUUkxfUkVH LAorCQkJCSAgICAgWFNESVJYX01ETF9DVFJMX0ZSTV9FTl9NQVNLKTsKKwkJfSBlbHNlIHsKKwkJ CXhzZGlyeHNzX2Nscih4c2RpcnhzcywgWFNESVJYX01ETF9DVFJMX1JFRywKKwkJCQkgICAgIFhT RElSWF9NRExfQ1RSTF9GUk1fRU5fTUFTSyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJ RF9YSUxJTlhfU0RJUlhfVklETE9DS19XSU5ET1c6CisJCS8qCisJCSAqIFRoZSB2aWRlbyBsb2Nr IHdpbmRvdyBpcyB0aGUgYW1vdW50IG9mIHRpbWUgZm9yIHdoaWNoIHRoZQorCQkgKiB0aGUgbW9k ZSBhbmQgdHJhbnNwb3J0IHN0cmVhbSBzaG91bGQgYmUgbG9ja2VkIHRvIGdldCB0aGUKKwkJICog dmlkZW8gbG9jayBpbnRlcnJ1cHQuCisJCSAqLworCQl4c2Rpcnhzcy0+dmlkbG9ja3dpbiA9IGN0 cmwtPnZhbDsKKwkJeHNkaXJ4c3Nfd3JpdGUoeHNkaXJ4c3MsIFhTRElSWF9WSURfTE9DS19XSU5E T1dfUkVHLAorCQkJICAgICAgIHhzZGlyeHNzLT52aWRsb2Nrd2luKTsKKwkJYnJlYWs7CisJY2Fz ZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX0VSUk9SX1NPVVJDRVM6CisJCXhzZGlyeHNzLT5l ZGhtYXNrID0gY3RybC0+dmFsICYgWFNESVJYX0VESF9BTExFUlJfTUFTSzsKKwkJeHNkaXJ4c3Nf d3JpdGUoeHNkaXJ4c3MsIFhTRElSWF9FREhfRVJSQ05UX0VOX1JFRywKKwkJCSAgICAgICB4c2Rp cnhzcy0+ZWRobWFzayk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfWElMSU5YX1NESVJYX1NF QVJDSF9NT0RFUzoKKwkJaWYgKCFjdHJsLT52YWwpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnhzZGlyeHNzLT5zbG9jaywgZmxhZ3MpOworCQkJZGV2X2VycihkZXYsICJTZWxlY3QgYXQg bGVhc3Qgb25lIG1vZGUhXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHhz ZGlyeHNzLT5tb2RlID09IFhTRElfU1REXzNHKSB7CisJCQlkZXZfZGJnKGRldiwgIlVwdG8gM0cg c3VwcG9ydGVkXG4iKTsKKwkJCWN0cmwtPnZhbCAmPSB+KEJJVChYU0RJUlhfTU9ERV82R19PRkZT RVQpIHwKKwkJCQkgICAgICAgQklUKFhTRElSWF9NT0RFXzEyR0lfT0ZGU0VUKSB8CisJCQkJICAg ICAgIEJJVChYU0RJUlhfTU9ERV8xMkdGX09GRlNFVCkpOworCQl9CisKKwkJaWYgKHhzZGlyeHNz LT5tb2RlID09IFhTRElfU1REXzZHKSB7CisJCQlkZXZfZGJnKGRldiwgIlVwdG8gNkcgc3VwcG9y dGVkXG4iKTsKKwkJCWN0cmwtPnZhbCAmPSB+KEJJVChYU0RJUlhfTU9ERV8xMkdJX09GRlNFVCkg fAorCQkJCSAgICAgICBCSVQoWFNESVJYX01PREVfMTJHRl9PRkZTRVQpKTsKKwkJfQorCisJCXJl dCA9IHhzZGlyeF9zZXRfbW9kZWRldGVjdCh4c2RpcnhzcywgY3RybC0+dmFsKTsKKwkJaWYgKCFy ZXQpCisJCQl4c2Rpcnhzcy0+c2VhcmNobWFzayA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCVhTRElSWF9DT1JFX0VOQUJM RSh4c2Rpcnhzcyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4c2Rpcnhzcy0+c2xvY2ss IGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHhzZGlyeHNzX2dfdm9sYXRpbGVf Y3RybCAtIGdldCB0aGUgWGlsaW54IFNESSBSeCBjb250cm9scworICogQGN0cmw6IFBvaW50ZXIg dG8gVjRMMiBjb250cm9sCisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9ycyBvdGhl cndpc2UKKyAqLworc3RhdGljIGludCB4c2Rpcnhzc19nX3ZvbGF0aWxlX2N0cmwoc3RydWN0IHY0 bDJfY3RybCAqY3RybCkKK3sKKwl1MzIgdmFsOworCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNk aXJ4c3MgPQorCQljb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwKKwkJCSAgICAgc3RydWN0IHhz ZGlyeHNzX3N0YXRlLCBjdHJsX2hhbmRsZXIpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHhzZGly eHNzLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ4 c2Rpcnhzcy0+c2xvY2ssIGZsYWdzKTsKKwlpZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQpIHsKKwkJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeHNkaXJ4c3MtPnNsb2NrLCBmbGFncyk7CisJCWRldl9l cnIoZGV2LCAiQ2FuJ3QgZ2V0IHZhbHVlcyB3aGVuIHZpZGVvIG5vdCBsb2NrZWQhXG4iKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lE X1hJTElOWF9TRElSWF9NT0RFX0RFVEVDVDoKKwkJdmFsID0geHNkaXJ4c3NfcmVhZCh4c2Rpcnhz cywgWFNESVJYX01PREVfREVUX1NUQVRfUkVHKTsKKwkJdmFsICY9IFhTRElSWF9NT0RFX0RFVF9T VEFUX1JYX01PREVfTUFTSzsKKworCQlzd2l0Y2ggKHZhbCkgeworCQljYXNlIFhTRElSWF9NT0RF X1NEX01BU0s6CisJCQljdHJsLT52YWwgPSBYU0RJUlhfTU9ERV9TRF9PRkZTRVQ7CisJCQlicmVh azsKKwkJY2FzZSBYU0RJUlhfTU9ERV9IRF9NQVNLOgorCQkJY3RybC0+dmFsID0gWFNESVJYX01P REVfSERfT0ZGU0VUOworCQkJYnJlYWs7CisJCWNhc2UgWFNESVJYX01PREVfM0dfTUFTSzoKKwkJ CXZhbCA9IHhzZGlyeHNzX3JlYWQoeHNkaXJ4c3MsIFhTRElSWF9NT0RFX0RFVF9TVEFUX1JFRyk7 CisJCQl2YWwgJj0gWFNESVJYX01PREVfREVUX1NUQVRfTFZMQl8zR19NQVNLOworCQkJY3RybC0+ dmFsID0gdmFsID8gWFNESVJYX01PREVfM0dCX09GRlNFVCA6CisJCQkJWFNESVJYX01PREVfM0dB X09GRlNFVDsKKwkJCWJyZWFrOworCQljYXNlIFhTRElSWF9NT0RFXzZHX01BU0s6CisJCQljdHJs LT52YWwgPSBYU0RJUlhfTU9ERV82R19PRkZTRVQ7CisJCQlicmVhazsKKwkJY2FzZSBYU0RJUlhf TU9ERV8xMkdJX01BU0s6CisJCQljdHJsLT52YWwgPSBYU0RJUlhfTU9ERV8xMkdJX09GRlNFVDsK KwkJCWJyZWFrOworCQljYXNlIFhTRElSWF9NT0RFXzEyR0ZfTUFTSzoKKwkJCWN0cmwtPnZhbCA9 IFhTRElSWF9NT0RFXzEyR0ZfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2Fz ZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfQ1JDOgorCQljdHJsLT52YWwgPSB4c2Rpcnhzc19yZWFk KHhzZGlyeHNzLCBYU0RJUlhfQ1JDX0VSUkNOVF9SRUcpOworCQl4c2Rpcnhzc193cml0ZSh4c2Rp cnhzcywgWFNESVJYX0NSQ19FUlJDTlRfUkVHLCAweGZmZmYpOworCQlicmVhazsKKwljYXNlIFY0 TDJfQ0lEX1hJTElOWF9TRElSWF9FREhfRVJSQ05UOgorCQl2YWwgPSB4c2Rpcnhzc19yZWFkKHhz ZGlyeHNzLCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOworCQl2YWwgJj0gWFNESVJYX01PREVf REVUX1NUQVRfUlhfTU9ERV9NQVNLOworCQlpZiAodmFsID09IFhTRElSWF9NT0RFX1NEX01BU0sp IHsKKwkJCWN0cmwtPnZhbCA9IHhzZGlyeHNzX3JlYWQoeHNkaXJ4c3MsCisJCQkJCQkgIFhTRElS WF9FREhfRVJSQ05UX1JFRyk7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZ4c2Rpcnhzcy0+c2xvY2ssIGZsYWdzKTsKKwkJCWRldl9kYmcoZGV2LCAiJWQgLSBub3QgaW4g U0QgbW9kZVxuIiwgY3RybC0+aWQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7 CisJY2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX1NUQVRVUzoKKwkJdmFsID0geHNkaXJ4 c3NfcmVhZCh4c2RpcnhzcywgWFNESVJYX01PREVfREVUX1NUQVRfUkVHKTsKKwkJdmFsICY9IFhT RElSWF9NT0RFX0RFVF9TVEFUX1JYX01PREVfTUFTSzsKKwkJaWYgKHZhbCA9PSBYU0RJUlhfTU9E RV9TRF9NQVNLKSB7CisJCQljdHJsLT52YWwgPSB4c2Rpcnhzc19yZWFkKHhzZGlyeHNzLAorCQkJ CQkJICBYU0RJUlhfRURIX1NUQVRfUkVHKTsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnhzZGlyeHNzLT5zbG9jaywgZmxhZ3MpOworCQkJZGV2X2RiZyhkZXYsICIlZCAt IG5vdCBpbiBTRCBtb2RlXG4iLCBjdHJsLT5pZCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQor CQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9UU19JU19JTlRFUkxBQ0VEOgor CQljdHJsLT52YWwgPSB4c2Rpcnhzcy0+dHNfaXNfaW50ZXJsYWNlZDsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeHNkaXJ4c3MtPnNsb2NrLCBmbGFncyk7 CisJCWRldl9lcnIoZGV2LCAiR2V0IEludmFsaWQgY29udHJvbCBpZCAweCUweFxuIiwgY3RybC0+ aWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4 c2Rpcnhzcy0+c2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB4c2Rpcnhz c19sb2dfc3RhdHVzIC0gTG9ncyB0aGUgc3RhdHVzIG9mIHRoZSBTREkgUnggU3Vic3lzdGVtCisg KiBAc2Q6IFBvaW50ZXIgdG8gVjRMMiBzdWJkZXZpY2Ugc3RydWN0dXJlCisgKgorICogVGhpcyBm dW5jdGlvbiBwcmludHMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIFhpbGlueCBTREkgUnggU3Vic3lz dGVtCisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludCB4c2Rpcnhz c19sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IHhzZGlyeHNz X3N0YXRlICp4c2RpcnhzcyA9IHRvX3hzZGlyeHNzc3RhdGUoc2QpOworCXUzMiBpOworCisJdjRs Ml9pbmZvKHNkLCAiKioqKiogU0RJIFJ4IHN1YnN5c3RlbSByZWcgZHVtcCBzdGFydCAqKioqKlxu Iik7CisJdjRsMl9pbmZvKHNkLCAiTm8gOiBSZWdpc3RlciBOYW1lIDogVmFsdWVcbiIpOworCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHhzZGlyeHNzX3JlZ21hcCk7IGkrKykgeworCQl2NGwy X2luZm8oc2QsICIlMDJkIDogJXMgcmVnaXN0ZXIgOiAweCUwOHhcbiIsIGksCisJCQkgIHhzZGly eHNzX3JlZ21hcFtpXS5uYW1lLAorCQkJICB4c2Rpcnhzc19yZWFkKHhzZGlyeHNzLCB4c2Rpcnhz c19yZWdtYXBbaV0ub2Zmc2V0KSk7CisJfQorCXY0bDJfaW5mbyhzZCwgIioqKioqIFNESSBSeCBz dWJzeXN0ZW0gcmVnIGR1bXAgZW5kICoqKioqXG4iKTsKKworCXY0bDJfY3RybF9zdWJkZXZfbG9n X3N0YXR1cyhzZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB4c2Rpcnhzc19nX2ZyYW1l X2ludGVydmFsIC0gR2V0IHRoZSBmcmFtZSBpbnRlcnZhbAorICogQHNkOiBWNEwyIFN1YiBkZXZp Y2UKKyAqIEBmaTogUG9pbnRlciB0byBWNGwyIFN1YiBkZXZpY2UgZnJhbWUgaW50ZXJ2YWwgc3Ry dWN0dXJlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgZnJhbWUgaW50 ZXJ2YWwuCisgKiBUaGUgZnJhbWUgcmF0ZSBjYW4gYmUgaW50ZWdyYWwgb3IgZnJhY3Rpb25hbC4K KyAqIEludGVncmFsIGZyYW1lIHJhdGUgZS5nLiBudW1lcmF0b3IgPSAxMDAwLCBkZW5vbWluYXRv ciA9IDI0MDAwID0+IDI0IGZwcworICogRnJhY3Rpb25hbCBmcmFtZSByYXRlIGUuZy4gbnVtZXJh dG9yID0gMTAwMSwgZGVub21pbmF0b3IgPSAyNDAwMCA9PiAyMy45NyBmcHMKKyAqCisgKiBSZXR1 cm46IDAgb24gc3VjY2VzcworICovCitzdGF0aWMgaW50IHhzZGlyeHNzX2dfZnJhbWVfaW50ZXJ2 YWwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9m cmFtZV9pbnRlcnZhbCAqZmkpCit7CisJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcyA9 IHRvX3hzZGlyeHNzc3RhdGUoc2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXhz ZGlyeHNzLT52aWRsb2NrZWQpIHsKKwkJZGV2X2Vycih4c2Rpcnhzcy0+ZGV2LCAiVmlkZW8gbm90 IGxvY2tlZCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmeHNkaXJ4c3MtPnNsb2NrLCBmbGFncyk7CisJZmktPmludGVydmFsID0geHNkaXJ4c3MtPmZy YW1lX2ludGVydmFsOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhzZGlyeHNzLT5zbG9jaywg ZmxhZ3MpOworCisJZGV2X2RiZyh4c2Rpcnhzcy0+ZGV2LCAiZnJhbWUgcmF0ZSBudW1lcmF0b3Ig PSAlZCBkZW5vbWluYXRvciA9ICVkXG4iLAorCQl4c2Rpcnhzcy0+ZnJhbWVfaW50ZXJ2YWwubnVt ZXJhdG9yLAorCQl4c2Rpcnhzcy0+ZnJhbWVfaW50ZXJ2YWwuZGVub21pbmF0b3IpOworCXJldHVy biAwOworfQorCisvKioKKyAqIHhzZGlyeHNzX3Nfc3RyZWFtIC0gSXQgaXMgdXNlZCB0byBzdGFy dC9zdG9wIHRoZSBzdHJlYW1pbmcuCisgKiBAc2Q6IFY0TDIgU3ViIGRldmljZQorICogQGVuYWJs ZTogRmxhZyAoVHJ1ZSAvIEZhbHNlKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29udHJvbHMgdGhl IHN0YXJ0IG9yIHN0b3Agb2Ygc3RyZWFtaW5nIGZvciB0aGUKKyAqIFhpbGlueCBTREkgUnggU3Vi c3lzdGVtLgorICoKKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvcnMgb3RoZXJ3aXNlCisg Ki8KK3N0YXRpYyBpbnQgeHNkaXJ4c3Nfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwg aW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0gdG9feHNk aXJ4c3NzdGF0ZShzZCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0geHNkaXJ4c3MtPmRldjsKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnhzZGlyeHNzLT5zbG9j aywgZmxhZ3MpOworCWlmIChlbmFibGUgPT0geHNkaXJ4c3MtPnN0cmVhbWluZykgeworCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZ4c2Rpcnhzcy0+c2xvY2ssIGZsYWdzKTsKKwkJZGV2X2RiZyhk ZXYsICJhbHJlYWR5IGluIHNhbWUgc3RyZWFtaW5nIHN0YXRlIGFzIHJlcXVlc3RlZFxuIik7CisJ CXJldHVybiAwOworCX0KKworCWlmIChlbmFibGUpIHsKKwkJaWYgKCF4c2Rpcnhzcy0+dmlkbG9j a2VkKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4c2Rpcnhzcy0+c2xvY2ssIGZsYWdz KTsKKwkJCWRldl9lcnIoZGV2LCAiVmlkZW8gaXMgbm90IGxvY2tlZFxuIik7CisJCQlyZXR1cm4g LUVJTlZBTDsKKwkJfQorCQl4c2Rpcnhfc3RyZWFtZmxvd19jb250cm9sKHhzZGlyeHNzLCB0cnVl KTsKKwl9IGVsc2UgeworCQl4c2Rpcnhfc3RyZWFtZmxvd19jb250cm9sKHhzZGlyeHNzLCBmYWxz ZSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhzZGlyeHNzLT5zbG9jaywgZmxhZ3Mp OworCWRldl9kYmcoZGV2LCAiU3RyZWFtaW5nICVzXG4iLCBlbmFibGUgPyAic3RhcnRlZCIgOiAi c3RvcHBlZCIpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHhzZGlyeHNzX2dfaW5wdXRfc3Rh dHVzIC0gSXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHZpZGVvIHNpZ25hbAorICogaXMg cHJlc2VudCAvIGxvY2tlZCBvbnRvIG9yIG5vdC4KKyAqCisgKiBAc2Q6IFY0TDIgU3ViIGRldmlj ZQorICogQHN0YXR1czogc3RhdHVzIG9mIHNpZ25hbCBsb2NrZWQKKyAqCisgKiBUaGlzIGlzIHVz ZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSB2aWRlbyBzaWduYWwgaXMgcHJlc2VudCBhbmQgbG9ja2Vk IG9udG8KKyAqIGJ5IHRoZSBTREkgUnggY29yZSBvciBub3QgYmFzZWQgb24gdmlkbG9ja2VkIGZs YWcuCisgKgorICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludCB4c2Rp cnhzc19nX2lucHV0X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnN0YXR1cykK K3sKKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0gdG9feHNkaXJ4c3NzdGF0ZShz ZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ4c2Rpcnhz cy0+c2xvY2ssIGZsYWdzKTsKKwlpZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQpCisJCSpzdGF0dXMg PSBWNEwyX0lOX1NUX05PX1NZTkMgfCBWNEwyX0lOX1NUX05PX1NJR05BTDsKKwllbHNlCisJCSpz dGF0dXMgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeHNkaXJ4c3MtPnNsb2NrLCBm bGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10 ICoKK19feHNkaXJ4c3NfZ2V0X3BhZF9mb3JtYXQoc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2Rp cnhzcywKKwkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywKKwkJCSAgdW5z aWduZWQgaW50IHBhZCwgdTMyIHdoaWNoKQoreworCXN3aXRjaCAod2hpY2gpIHsKKwljYXNlIFY0 TDJfU1VCREVWX0ZPUk1BVF9UUlk6CisJCXJldHVybiB2NGwyX3N1YmRldl9nZXRfdHJ5X2Zvcm1h dCgmeHNkaXJ4c3MtPnN1YmRldiwgY2ZnLCBwYWQpOworCWNhc2UgVjRMMl9TVUJERVZfRk9STUFU X0FDVElWRToKKwkJcmV0dXJuICZ4c2Rpcnhzcy0+c3JjX2Zvcm1hdDsKKwlkZWZhdWx0OgorCQly ZXR1cm4gTlVMTDsKKwl9Cit9CisKKy8qKgorICogeHNkaXJ4c3NfaW5pdF9jZmcgLSBJbml0aWFs aXNlIHRoZSBwYWQgZm9ybWF0IGNvbmZpZyB0byBkZWZhdWx0CisgKiBAc2Q6IFBvaW50ZXIgdG8g VjRMMiBTdWIgZGV2aWNlIHN0cnVjdHVyZQorICogQGNmZzogUG9pbnRlciB0byBzdWIgZGV2aWNl IHBhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQg dG8gaW5pdGlhbGl6ZSB0aGUgcGFkIGZvcm1hdCB3aXRoIHRoZSBkZWZhdWx0CisgKiB2YWx1ZXMu CisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludCB4c2Rpcnhzc19p bml0X2NmZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9zdWJk ZXZfcGFkX2NvbmZpZyAqY2ZnKQoreworCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3Mg PSB0b194c2Rpcnhzc3N0YXRlKHNkKTsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmb3Jt YXQ7CisKKwlmb3JtYXQgPSB2NGwyX3N1YmRldl9nZXRfdHJ5X2Zvcm1hdChzZCwgY2ZnLCAwKTsK KwkqZm9ybWF0ID0geHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0OworCisJcmV0dXJuIDA7Cit9CisK Ky8qKgorICogeHNkaXJ4c3NfZ2V0X3NldF9mb3JtYXQgLSBUaGlzIGlzIHVzZWQgdG8gZ2V0L3Nl dCB0aGUgcGFkIGZvcm1hdAorICogQHNkOiBQb2ludGVyIHRvIFY0TDIgU3ViIGRldmljZSBzdHJ1 Y3R1cmUKKyAqIEBjZmc6IFBvaW50ZXIgdG8gc3ViIGRldmljZSBwYWQgaW5mb3JtYXRpb24gc3Ry dWN0dXJlCisgKiBAZm10OiBQb2ludGVyIHRvIHBhZCBsZXZlbCBtZWRpYSBidXMgZm9ybWF0Cisg KgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBhbmQgc2V0IHRoZSBwYWQgZm9ybWF0 LgorICogU2luY2UgdGhlIHBhZCBmb3JtYXQgaXMgZml4ZWQgaW4gaGFyZHdhcmUsIGl0IGNhbid0 IGJlCisgKiBtb2RpZmllZCBvbiBydW4gdGltZS4gU28gc2V0IGFuZCBnZXQgYXJlIHNhbWUuCisg KgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludCB4c2Rpcnhzc19nZXRf c2V0X2Zvcm1hdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCSAgIHN0cnVjdCB2NGwyX3N1 YmRldl9wYWRfY29uZmlnICpjZmcsCisJCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAq Zm10KQoreworCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194c2Rpcnhzc3N0 YXRlKHNkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnhz ZGlyeHNzLT5zbG9jaywgZmxhZ3MpOworCWlmICgheHNkaXJ4c3MtPnZpZGxvY2tlZCkgeworCQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZ4c2Rpcnhzcy0+c2xvY2ssIGZsYWdzKTsKKwkJZGV2X2Vy cih4c2Rpcnhzcy0+ZGV2LCAiVmlkZW8gbm90IGxvY2tlZCFcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlmbXQtPmZvcm1hdCA9ICpfX3hzZGlyeHNzX2dldF9wYWRfZm9ybWF0KHhzZGly eHNzLCBjZmcsCisJCQkJCQkgZm10LT5wYWQsIGZtdC0+d2hpY2gpOworCisJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmeHNkaXJ4c3MtPnNsb2NrLCBmbGFncyk7CisJZGV2X2RiZyh4c2Rpcnhzcy0+ ZGV2LAorCQkic3RyZWFtIHdpZHRoICVkIGhlaWdodCAlZCBjb2RlICVkIGZpZWxkICVkIGNvbG9y c3BhY2UgJWQgeGZlcl9mdW5jICVkIHF1YW50aXphdGlvbiAlZFxuIiwKKwkJZm10LT5mb3JtYXQu d2lkdGgsIGZtdC0+Zm9ybWF0LmhlaWdodCwKKwkJZm10LT5mb3JtYXQuY29kZSwgZm10LT5mb3Jt YXQuZmllbGQsCisJCWZtdC0+Zm9ybWF0LmNvbG9yc3BhY2UsIGZtdC0+Zm9ybWF0LnhmZXJfZnVu YywKKwkJZm10LT5mb3JtYXQucXVhbnRpemF0aW9uKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisg KiB4c2Rpcnhzc19lbnVtX21idXNfY29kZSAtIEhhbmRsZSBwaXhlbCBmb3JtYXQgZW51bWVyYXRp b24KKyAqIEBzZDogcG9pbnRlciB0byB2NGwyIHN1YmRldiBzdHJ1Y3R1cmUKKyAqIEBjZmc6IFY0 TDIgc3ViZGV2IHBhZCBjb25maWd1cmF0aW9uCisgKiBAY29kZTogcG9pbnRlciB0byB2NGwyX3N1 YmRldl9tYnVzX2NvZGVfZW51bSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm46IC1FSU5WQUwgb3Ig emVybyBvbiBzdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQgeHNkaXJ4c3NfZW51bV9tYnVzX2NvZGUo c3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2Nv bmZpZyAqY2ZnLAorCQkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51bSAqY29k ZSkKK3sKKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0gdG9feHNkaXJ4c3NzdGF0 ZShzZCk7CisJdTMyIGluZGV4ID0gY29kZS0+aW5kZXg7CisJdTMyIG1heGluZGV4OworCisJaWYg KHhzZGlyeHNzLT5icGMgPT0gMTApCisJCW1heGluZGV4ID0gQVJSQVlfU0laRSh4c2Rpcnhzc18x MGJwY19tYnVzX2ZtdHMpOworCWVsc2UKKwkJbWF4aW5kZXggPSBBUlJBWV9TSVpFKHhzZGlyeHNz XzEyYnBjX21idXNfZm10cyk7CisKKwlpZiAoY29kZS0+cGFkIHx8IGluZGV4ID49IG1heGluZGV4 KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh4c2Rpcnhzcy0+YnBjID09IDEwKQorCQljb2Rl LT5jb2RlID0geHNkaXJ4c3NfMTBicGNfbWJ1c19mbXRzW2luZGV4XTsKKwllbHNlCisJCWNvZGUt PmNvZGUgPSB4c2Rpcnhzc18xMmJwY19tYnVzX2ZtdHNbaW5kZXhdOworCisJcmV0dXJuIDA7Cit9 CisKKy8qKgorICogeHNkaXJ4c3NfZW51bV9kdl90aW1pbmdzIC0gRW51bWVyYXRlIGFsbCB0aGUg c3VwcG9ydGVkIERWIHRpbWluZ3MKKyAqIEBzZDogcG9pbnRlciB0byB2NGwyIHN1YmRldiBzdHJ1 Y3R1cmUKKyAqIEB0aW1pbmdzOiBEViB0aW1pbmdzIHN0cnVjdHVyZSB0byBiZSByZXR1cm5lZC4K KyAqCisgKiBSZXR1cm46IC1FSU5WQUwgaW5jYXNlIG9mIGludmFsaWQgaW5kZXggYW5kIHBhZCBv ciB6ZXJvIG9uIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludCB4c2Rpcnhzc19lbnVtX2R2X3RpbWlu Z3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICAgc3RydWN0IHY0bDJfZW51bV9kdl90 aW1pbmdzICp0aW1pbmdzKQoreworCWlmICh0aW1pbmdzLT5pbmRleCA+PSBBUlJBWV9TSVpFKGZt dF9jYXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0aW1pbmdzLT5wYWQgIT0gMCkKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwl0aW1pbmdzLT50aW1pbmdzID0gZm10X2NhcFt0aW1pbmdzLT5p bmRleF07CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogeHNkaXJ4c3NfcXVlcnlfZHZfdGltaW5n cyAtIFF1ZXJ5IGZvciB0aGUgY3VycmVudCBEViB0aW1pbmdzCisgKiBAc2Q6IHBvaW50ZXIgdG8g djRsMiBzdWJkZXYgc3RydWN0dXJlCisgKiBAdGltaW5nczogRFYgdGltaW5ncyBzdHJ1Y3R1cmUg dG8gYmUgcmV0dXJuZWQuCisgKgorICogUmV0dXJuOiAtRU5PTENLIHdoZW4gdmlkZW8gaXMgbm90 IGxvY2tlZCwgLUVSQU5HRSB3aGVuIGNvcnJlc3BvbmRpbmcgdGltaW5nCisgKiBlbnRyeSBpcyBu b3QgZm91bmQgb3IgemVybyBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IHhzZGlyeHNzX3F1 ZXJ5X2R2X3RpbWluZ3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICAgIHN0cnVjdCB2 NGwyX2R2X3RpbWluZ3MgKnRpbWluZ3MpCit7CisJc3RydWN0IHhzZGlyeHNzX3N0YXRlICpzdGF0 ZSA9IHRvX3hzZGlyeHNzc3RhdGUoc2QpOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGxv bmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhdGUtPnNsb2NrLCBmbGFncyk7CisJ aWYgKCFzdGF0ZS0+dmlkbG9ja2VkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRl LT5zbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT0xDSzsKKwl9CisKKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRSh4c2Rpcnhzc19kdl90aW1pbmdzKTsgaSsrKSB7CisJCWlmIChzdGF0ZS0+ Zm9ybWF0LndpZHRoID09IHhzZGlyeHNzX2R2X3RpbWluZ3NbaV0ud2lkdGggJiYKKwkJICAgIHN0 YXRlLT5mb3JtYXQuaGVpZ2h0ID09IHhzZGlyeHNzX2R2X3RpbWluZ3NbaV0uaGVpZ2h0ICYmCisJ CSAgICBzdGF0ZS0+ZnJhbWVfaW50ZXJ2YWwuZGVub21pbmF0b3IgPT0KKwkJICAgICh4c2Rpcnhz c19kdl90aW1pbmdzW2ldLmZwcyAqIDEwMDApKSB7CisJCQkqdGltaW5ncyA9IHhzZGlyeHNzX2R2 X3RpbWluZ3NbaV0udGltaW5nOworCQkJc3RhdGUtPmRldGVjdGVkX3RpbWluZ3NfaW5kZXggPSBp OworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhdGUtPnNsb2NrLCBmbGFncyk7CisJCQly ZXR1cm4gMDsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGF0ZS0+c2xvY2ss IGZsYWdzKTsKKworCXJldHVybiAtRVJBTkdFOworfQorCitzdGF0aWMgaW50IHhzZGlyeHNzX3Nf ZHZfdGltaW5ncyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCSBzdHJ1Y3QgdjRsMl9kdl90 aW1pbmdzICp0aW1pbmdzKQoreworCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqc3RhdGUgPSB0b194 c2Rpcnhzc3N0YXRlKHNkKTsKKwl1MzIgaSA9IHN0YXRlLT5kZXRlY3RlZF90aW1pbmdzX2luZGV4 OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhdGUtPnNs b2NrLCBmbGFncyk7CisJaWYgKCFzdGF0ZS0+dmlkbG9ja2VkKSB7CisJCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnN0YXRlLT5zbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwkvKiBpbnB1dCB0aW1pbmcgc2hvdWxkIG1hdGNoIHF1ZXJ5IGR2X3RpbWluZyAqLworCWlmICgh djRsMl9tYXRjaF9kdl90aW1pbmdzKHRpbWluZ3MsCisJCQkJICAgJnhzZGlyeHNzX2R2X3RpbWlu Z3NbaV0udGltaW5nLAorCQkJCSAgIDAsIGZhbHNlKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZzdGF0ZS0+c2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Rh dGUtPmN1cnJlbnRfdGltaW5ncyA9ICp0aW1pbmdzOworCisJLyogVXBkYXRlIHRoZSBtZWRpYSBi dXMgZm9ybWF0ICovCisJc3RhdGUtPnNyY19mb3JtYXQgPSBzdGF0ZS0+Zm9ybWF0OworCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlLT5zbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgeHNkaXJ4c3NfZ19kdl90aW1pbmdzKHN0cnVjdCB2NGwyX3N1YmRldiAq c2QsCisJCQkJIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgKnRpbWluZ3MpCit7CisJc3RydWN0IHhz ZGlyeHNzX3N0YXRlICpzdGF0ZSA9IHRvX3hzZGlyeHNzc3RhdGUoc2QpOworCisJKnRpbWluZ3Mg PSBzdGF0ZS0+Y3VycmVudF90aW1pbmdzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHhz ZGlyeHNzX2R2X3RpbWluZ3NfY2FwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJICAgc3Ry dWN0IHY0bDJfZHZfdGltaW5nc19jYXAgKmNhcCkKK3sKKwlpZiAoY2FwLT5wYWQgIT0gMCkKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwkqY2FwID0geHNkaXJ4c3NfdGltaW5nc19jYXA7CisJcmV0dXJu IDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNZWRpYSBPcGVyYXRpb25zCisg Ki8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtZWRpYV9lbnRpdHlfb3BlcmF0aW9ucyB4c2Rpcnhz c19tZWRpYV9vcHMgPSB7CisJLmxpbmtfdmFsaWRhdGUgPSB2NGwyX3N1YmRldl9saW5rX3ZhbGlk YXRlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgeHNkaXJ4c3NfY3Ry bF9vcHMgPSB7CisJLmdfdm9sYXRpbGVfY3RybCA9IHhzZGlyeHNzX2dfdm9sYXRpbGVfY3RybCwK Kwkuc19jdHJsCT0geHNkaXJ4c3Nfc19jdHJsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0 bDJfY3RybF9jb25maWcgeHNkaXJ4c3NfZWRoX2N0cmxzW10gPSB7CisJeworCQkub3BzCT0gJnhz ZGlyeHNzX2N0cmxfb3BzLAorCQkuaWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX0VSUk9S X1NPVVJDRVMsCisJCS5uYW1lCT0gIlNESSBSeCA6IEVESCBFcnJvciBDb3VudCBFbmFibGUiLAor CQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0JJVE1BU0ssCisJCS5taW4JPSAwLAorCQkubWF4CT0g WFNESVJYX0VESF9BTExFUlJfTUFTSywKKwkJLmRlZgk9IDAsCisJfSwgeworCQkub3BzCT0gJnhz ZGlyeHNzX2N0cmxfb3BzLAorCQkuaWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX0VSUkNO VCwKKwkJLm5hbWUJPSAiU0RJIFJ4IDogRURIIEVycm9yIENvdW50IiwKKwkJLnR5cGUJPSBWNEwy X0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubWluCT0gMCwKKwkJLm1heAk9IDB4ZmZmZiwKKwkJLnN0 ZXAJPSAxLAorCQkuZGVmCT0gMCwKKwkJLmZsYWdzICA9IFY0TDJfQ1RSTF9GTEFHX1ZPTEFUSUxF IHwgVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZLAorCX0sIHsKKwkJLm9wcwk9ICZ4c2Rpcnhzc19j dHJsX29wcywKKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9TVEFUVVMsCisJCS5u YW1lCT0gIlNESSBSeCA6IEVESCBTdGF0dXMiLAorCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lO VEVHRVIsCisJCS5taW4JPSAwLAorCQkubWF4CT0gMHhmZmZmZmZmZiwKKwkJLnN0ZXAJPSAxLAor CQkuZGVmCT0gMCwKKwkJLmZsYWdzICA9IFY0TDJfQ1RSTF9GTEFHX1ZPTEFUSUxFIHwgVjRMMl9D VFJMX0ZMQUdfUkVBRF9PTkxZLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9j dHJsX2NvbmZpZyB4c2Rpcnhzc19jdHJsc1tdID0geworCXsKKwkJLm9wcwk9ICZ4c2Rpcnhzc19j dHJsX29wcywKKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NESVJYX0ZSQU1FUiwKKwkJLm5hbWUJ PSAiU0RJIFJ4IDogRW5hYmxlIEZyYW1lciIsCisJCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfQk9P TEVBTiwKKwkJLm1pbgk9IGZhbHNlLAorCQkubWF4CT0gdHJ1ZSwKKwkJLnN0ZXAJPSAxLAorCQku ZGVmCT0gdHJ1ZSwKKwl9LCB7CisJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMsCisJCS5pZAk9 IFY0TDJfQ0lEX1hJTElOWF9TRElSWF9WSURMT0NLX1dJTkRPVywKKwkJLm5hbWUJPSAiU0RJIFJ4 IDogVmlkZW8gTG9jayBXaW5kb3ciLAorCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIs CisJCS5taW4JPSAwLAorCQkubWF4CT0gMHhmZmZmZmZmZiwKKwkJLnN0ZXAJPSAxLAorCQkuZGVm CT0gWFNESVJYX0RFRkFVTFRfVklERU9fTE9DS19XSU5ET1csCisJfSwgeworCQkub3BzCT0gJnhz ZGlyeHNzX2N0cmxfb3BzLAorCQkuaWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfU0VBUkNIX01P REVTLAorCQkubmFtZQk9ICJTREkgUnggOiBNb2RlcyBzZWFyY2ggTWFzayIsCisJCS50eXBlCT0g VjRMMl9DVFJMX1RZUEVfQklUTUFTSywKKwkJLm1pbgk9IDAsCisJCS5tYXgJPSBYU0RJUlhfREVU RUNUX0FMTF9NT0RFUywKKwkJLmRlZgk9IFhTRElSWF9ERVRFQ1RfQUxMX01PREVTLAorCX0sIHsK KwkJLm9wcwk9ICZ4c2Rpcnhzc19jdHJsX29wcywKKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NE SVJYX01PREVfREVURUNULAorCQkubmFtZQk9ICJTREkgUnggOiBNb2RlIERldGVjdCBTdGF0dXMi LAorCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5taW4JPSBYU0RJUlhfTU9E RV9TRF9PRkZTRVQsCisJCS5tYXgJPSBYU0RJUlhfTU9ERV8xMkdGX09GRlNFVCwKKwkJLnN0ZXAJ PSAxLAorCQkuZmxhZ3MgID0gVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUgfCBWNEwyX0NUUkxfRkxB R19SRUFEX09OTFksCisJfSwgeworCQkub3BzCT0gJnhzZGlyeHNzX2N0cmxfb3BzLAorCQkuaWQJ PSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfQ1JDLAorCQkubmFtZQk9ICJTREkgUnggOiBDUkMgRXJy b3Igc3RhdHVzIiwKKwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubWluCT0g MCwKKwkJLm1heAk9IDB4ZmZmZmZmZmYsCisJCS5zdGVwCT0gMSwKKwkJLmRlZgk9IDAsCisJCS5m bGFncyAgPSBWNEwyX0NUUkxfRkxBR19WT0xBVElMRSB8IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05M WSwKKwl9LCB7CisJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMsCisJCS5pZAk9IFY0TDJfQ0lE X1hJTElOWF9TRElSWF9UU19JU19JTlRFUkxBQ0VELAorCQkubmFtZQk9ICJTREkgUnggOiBUUyBp cyBJbnRlcmxhY2VkIiwKKwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubWlu CT0gZmFsc2UsCisJCS5tYXgJPSB0cnVlLAorCQkuZGVmCT0gZmFsc2UsCisJCS5zdGVwCT0gMSwK KwkJLmZsYWdzICA9IFY0TDJfQ1RSTF9GTEFHX1ZPTEFUSUxFIHwgVjRMMl9DVFJMX0ZMQUdfUkVB RF9PTkxZLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVf b3BzIHhzZGlyeHNzX2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0geHNkaXJ4c3NfbG9nX3N0 YXR1cywKKwkuc3Vic2NyaWJlX2V2ZW50ID0geHNkaXJ4c3Nfc3Vic2NyaWJlX2V2ZW50LAorCS51 bnN1YnNjcmliZV9ldmVudCA9IHY0bDJfZXZlbnRfc3ViZGV2X3Vuc3Vic2NyaWJlLAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgeHNkaXJ4c3NfdmlkZW9f b3BzID0geworCS5nX2ZyYW1lX2ludGVydmFsID0geHNkaXJ4c3NfZ19mcmFtZV9pbnRlcnZhbCwK Kwkuc19zdHJlYW0gPSB4c2Rpcnhzc19zX3N0cmVhbSwKKwkuZ19pbnB1dF9zdGF0dXMgPSB4c2Rp cnhzc19nX2lucHV0X3N0YXR1cywKKwkucXVlcnlfZHZfdGltaW5ncyA9IHhzZGlyeHNzX3F1ZXJ5 X2R2X3RpbWluZ3MsCisJLmdfZHZfdGltaW5ncyA9IHhzZGlyeHNzX2dfZHZfdGltaW5ncywKKwku c19kdl90aW1pbmdzID0geHNkaXJ4c3Nfc19kdl90aW1pbmdzLAorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfb3BzIHhzZGlyeHNzX3BhZF9vcHMgPSB7CisJLmluaXRf Y2ZnID0geHNkaXJ4c3NfaW5pdF9jZmcsCisJLmdldF9mbXQgPSB4c2Rpcnhzc19nZXRfc2V0X2Zv cm1hdCwKKwkuc2V0X2ZtdCA9IHhzZGlyeHNzX2dldF9zZXRfZm9ybWF0LAorCS5lbnVtX21idXNf Y29kZSA9IHhzZGlyeHNzX2VudW1fbWJ1c19jb2RlLAorCS5lbnVtX2R2X3RpbWluZ3MgPSB4c2Rp cnhzc19lbnVtX2R2X3RpbWluZ3MsCisJLmR2X3RpbWluZ3NfY2FwID0geHNkaXJ4c3NfZHZfdGlt aW5nc19jYXAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB4c2Rp cnhzc19vcHMgPSB7CisJLmNvcmUgPSAmeHNkaXJ4c3NfY29yZV9vcHMsCisJLnZpZGVvID0gJnhz ZGlyeHNzX3ZpZGVvX29wcywKKwkucGFkID0gJnhzZGlyeHNzX3BhZF9vcHMKK307CisKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQbGF0Zm9ybSBEZXZpY2UgRHJpdmVyCisgKi8KKworc3Rh dGljIGludCB4c2Rpcnhzc19wYXJzZV9vZihzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNz KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHhzZGlyeHNzLT5kZXYtPm9mX25vZGU7 CisJc3RydWN0IGRldmljZSAqZGV2ID0geHNkaXJ4c3MtPmRldjsKKwlpbnQgcmV0OworCisJeHNk aXJ4c3MtPmluY2x1ZGVfZWRoID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5vZGUsICJ4bG54LGlu Y2x1ZGUtZWRoIik7CisJZGV2X2RiZyhkZXYsICJFREggcHJvcGVydHkgPSAlc1xuIiwKKwkJeHNk aXJ4c3MtPmluY2x1ZGVfZWRoID8gIlByZXNlbnQiIDogIkFic2VudCIpOworCisJcmV0ID0gb2Zf cHJvcGVydHlfcmVhZF91MzIobm9kZSwgInhsbngsbGluZS1yYXRlIiwgJnhzZGlyeHNzLT5tb2Rl KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInhsbngsbGluZS1yYXRlIHByb3Bl cnR5IG5vdCBmb3VuZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHhzZGlyeHNzLT5t b2RlICE9IFhTRElfU1REXzNHICYmIHhzZGlyeHNzLT5tb2RlICE9IFhTRElfU1REXzZHICYmCisJ ICAgIHhzZGlyeHNzLT5tb2RlICE9IFhTRElfU1REXzEyR184RFMpIHsKKwkJZGV2X2VycihkZXYs ICJJbnZhbGlkIExpbmUgUmF0ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9k YmcoZGV2LCAiU0RJIFJ4IExpbmUgUmF0ZSAvIG1vZGUgPSAlZFxuIiwgeHNkaXJ4c3MtPm1vZGUp OworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInhsbngsYnBjIiwgJnhzZGly eHNzLT5icGMpOworCWlmIChyZXQgPT0gLUVJTlZBTCkgeworCQl4c2Rpcnhzcy0+YnBjID0gMTA7 CisJCWRldl9kYmcoZGV2LCAic2V0IGRlZmF1bHQgYnBjIGFzIDEwXG4iKTsKKwl9IGVsc2UgaWYg KHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHhsbngsYnBjXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoeHNkaXJ4c3MtPmJwYyAhPSAxMCAmJiB4c2Rpcnhz cy0+YnBjICE9IDEyKSB7CisJCWRldl9lcnIoZGV2LCAiYml0cyBwZXIgY29tcG9uZW50PSV1LiBD YW4gYmUgMTAgb3IgMTIgb25seVxuIiwKKwkJCXhzZGlyeHNzLT5icGMpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHhzZGlyeHNzX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpz dWJkZXY7CisJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzczsKKwlzdHJ1Y3QgZGV2aWNl ICpkZXY7CisJaW50IHJldCwgaXJxOworCXVuc2lnbmVkIGludCBudW1fY3RybHMsIGk7CisKKwl4 c2RpcnhzcyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnhzZGlyeHNzKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCF4c2RpcnhzcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl4c2Rpcnhz cy0+ZGV2ID0gJnBkZXYtPmRldjsKKwlkZXYgPSB4c2Rpcnhzcy0+ZGV2OworCisJc3Bpbl9sb2Nr X2luaXQoJnhzZGlyeHNzLT5zbG9jayk7CisJcmV0ID0geHNkaXJ4c3NfcGFyc2Vfb2YoeHNkaXJ4 c3MpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJeHNkaXJ4c3MtPmlvbWVtID0g ZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApOworCWlmIChJU19FUlIoeHNk aXJ4c3MtPmlvbWVtKSkKKwkJcmV0dXJuIFBUUl9FUlIoeHNkaXJ4c3MtPmlvbWVtKTsKKworCXhz ZGlyeHNzLT5udW1fY2xrcyA9IEFSUkFZX1NJWkUoeHNkaXJ4c3NfY2xrcyk7CisJeHNkaXJ4c3Mt PmNsa3MgPSBkZXZtX2tjYWxsb2MoZGV2LCB4c2Rpcnhzcy0+bnVtX2Nsa3MsCisJCQkJICAgICAg c2l6ZW9mKCp4c2Rpcnhzcy0+Y2xrcyksIEdGUF9LRVJORUwpOworCWlmICgheHNkaXJ4c3MtPmNs a3MpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IHhzZGlyeHNzLT5udW1f Y2xrczsgaSsrKQorCQl4c2Rpcnhzcy0+Y2xrc1tpXS5pZCA9IHhzZGlyeHNzX2Nsa3NbaV07CisK KwlyZXQgPSBkZXZtX2Nsa19idWxrX2dldChkZXYsIHhzZGlyeHNzLT5udW1fY2xrcywgeHNkaXJ4 c3MtPmNsa3MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBjbGtfYnVsa19w cmVwYXJlX2VuYWJsZSh4c2Rpcnhzcy0+bnVtX2Nsa3MsIHhzZGlyeHNzLT5jbGtzKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogUmVzZXQgdGhlIGNvcmUgKi8KKwl4c2Rpcnhfc3Ry ZWFtZmxvd19jb250cm9sKHhzZGlyeHNzLCBmYWxzZSk7CisJWFNESVJYX0NPUkVfRElTQUJMRSh4 c2Rpcnhzcyk7CisJLyogQ2xlYXIgYWxsIGludGVycnVwdHMgKi8KKwl4c2Rpcnhzc19zZXQoeHNk aXJ4c3MsIFhTRElSWF9JU1JfUkVHLCBYU0RJUlhfSU5UUl9BTExfTUFTSyk7CisJeHNkaXJ4c3Nf Y2xyKHhzZGlyeHNzLCBYU0RJUlhfSUVSX1JFRywgWFNESVJYX0lOVFJfQUxMX01BU0spOworCXhz ZGlyeHNzX3NldCh4c2RpcnhzcywgWFNESVJYX0lFUl9SRUcsIFhTRElSWF9JTlRSX0FMTF9NQVNL KTsKKwlYU0RJUlhfR0xPQkFMX0lOVFJfRU5BQkxFKHhzZGlyeHNzKTsKKwl4c2Rpcnhzc193cml0 ZSh4c2RpcnhzcywgWFNESVJYX0NSQ19FUlJDTlRfUkVHLCAweGZmZmYpOworCisJLyogUmVnaXN0 ZXIgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDAp OworCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBpcnEsIE5VTEwsIHhzZGly eHNzX2lycV9oYW5kbGVyLAorCQkJCQlJUlFGX09ORVNIT1QsIGRldl9uYW1lKGRldiksIHhzZGly eHNzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRXJyID0gJWQgSW50ZXJydXB0IGhh bmRsZXIgcmVnIGZhaWxlZCFcbiIsCisJCQlyZXQpOworCQlnb3RvIGNsa19lcnI7CisJfQorCisJ LyogSW5pdGlhbGl6ZSBWNEwyIHN1YmRldmljZSBhbmQgbWVkaWEgZW50aXR5ICovCisJeHNkaXJ4 c3MtPnBhZC5mbGFncyA9IE1FRElBX1BBRF9GTF9TT1VSQ0U7CisKKwkvKiBJbml0aWFsaXplIHRo ZSBkZWZhdWx0IGZvcm1hdCAqLworCWlmICh4c2Rpcnhzcy0+YnBjID09IDEwKQorCQl4c2Rpcnhz cy0+ZGVmYXVsdF9mb3JtYXQuY29kZSA9IE1FRElBX0JVU19GTVRfVVlWWTEwXzFYMjA7CisJZWxz ZQorCQl4c2Rpcnhzcy0+ZGVmYXVsdF9mb3JtYXQuY29kZSA9IE1FRElBX0JVU19GTVRfVVlWWTEy XzFYMjQ7CisJeHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0LmZpZWxkID0gVjRMMl9GSUVMRF9OT05F OworCXhzZGlyeHNzLT5kZWZhdWx0X2Zvcm1hdC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNF X1JFQzcwOTsKKwl4c2Rpcnhzcy0+ZGVmYXVsdF9mb3JtYXQud2lkdGggPSBYU0RJUlhfREVGQVVM VF9XSURUSDsKKwl4c2Rpcnhzcy0+ZGVmYXVsdF9mb3JtYXQuaGVpZ2h0ID0gWFNESVJYX0RFRkFV TFRfSEVJR0hUOworCXhzZGlyeHNzLT5kZWZhdWx0X2Zvcm1hdC54ZmVyX2Z1bmMgPSBWNEwyX1hG RVJfRlVOQ183MDk7CisJeHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0LnF1YW50aXphdGlvbiA9IFY0 TDJfUVVBTlRJWkFUSU9OX0xJTV9SQU5HRTsKKworCXhzZGlyeHNzLT5mb3JtYXQgPSB4c2Rpcnhz cy0+ZGVmYXVsdF9mb3JtYXQ7CisKKwkvKiBJbml0aWFsaXplIFY0TDIgc3ViZGV2aWNlIGFuZCBt ZWRpYSBlbnRpdHkgKi8KKwlzdWJkZXYgPSAmeHNkaXJ4c3MtPnN1YmRldjsKKwl2NGwyX3N1YmRl dl9pbml0KHN1YmRldiwgJnhzZGlyeHNzX29wcyk7CisKKwlzdWJkZXYtPmRldiA9ICZwZGV2LT5k ZXY7CisJc3Ryc2NweShzdWJkZXYtPm5hbWUsIGRldl9uYW1lKGRldiksIHNpemVvZihzdWJkZXYt Pm5hbWUpKTsKKworCXN1YmRldi0+ZmxhZ3MgPSBWNEwyX1NVQkRFVl9GTF9IQVNfRVZFTlRTIHwg VjRMMl9TVUJERVZfRkxfSEFTX0RFVk5PREU7CisKKwlzdWJkZXYtPmVudGl0eS5vcHMgPSAmeHNk aXJ4c3NfbWVkaWFfb3BzOworCisJdjRsMl9zZXRfc3ViZGV2ZGF0YShzdWJkZXYsIHhzZGlyeHNz KTsKKworCXJldCA9IG1lZGlhX2VudGl0eV9wYWRzX2luaXQoJnN1YmRldi0+ZW50aXR5LCAxLCAm eHNkaXJ4c3MtPnBhZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBJbml0 aWFsaXNlIGFuZCByZWdpc3RlciB0aGUgY29udHJvbHMgKi8KKwludW1fY3RybHMgPSBBUlJBWV9T SVpFKHhzZGlyeHNzX2N0cmxzKTsKKworCWlmICh4c2Rpcnhzcy0+aW5jbHVkZV9lZGgpCisJCW51 bV9jdHJscyArPSBBUlJBWV9TSVpFKHhzZGlyeHNzX2VkaF9jdHJscyk7CisKKwl2NGwyX2N0cmxf aGFuZGxlcl9pbml0KCZ4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyLCBudW1fY3RybHMpOworCisJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoeHNkaXJ4c3NfY3RybHMpOyBpKyspIHsKKwkJc3RydWN0 IHY0bDJfY3RybCAqY3RybDsKKworCQlkZXZfZGJnKGRldiwgIiVkICVzIGN0cmwgPSAweCV4XG4i LCBpLCB4c2Rpcnhzc19jdHJsc1tpXS5uYW1lLAorCQkJeHNkaXJ4c3NfY3RybHNbaV0uaWQpOwor CisJCWN0cmwgPSB2NGwyX2N0cmxfbmV3X2N1c3RvbSgmeHNkaXJ4c3MtPmN0cmxfaGFuZGxlciwK KwkJCQkJICAgICZ4c2Rpcnhzc19jdHJsc1tpXSwgTlVMTCk7CisJfQorCisJaWYgKHhzZGlyeHNz LT5pbmNsdWRlX2VkaCkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh4c2Rpcnhzc19l ZGhfY3RybHMpOyBpKyspIHsKKwkJCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmw7CisKKwkJCWRldl9k YmcoZGV2LCAiJWQgJXMgY3RybCA9IDB4JXhcbiIsIGksCisJCQkJeHNkaXJ4c3NfZWRoX2N0cmxz W2ldLm5hbWUsCisJCQkJeHNkaXJ4c3NfZWRoX2N0cmxzW2ldLmlkKTsKKworCQkJY3RybCA9IHY0 bDJfY3RybF9uZXdfY3VzdG9tKCZ4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyLAorCQkJCQkJICAgICZ4 c2Rpcnhzc19lZGhfY3RybHNbaV0sCisJCQkJCQkgICAgTlVMTCk7CisJCX0KKwl9CisKKwlpZiAo eHNkaXJ4c3MtPmN0cmxfaGFuZGxlci5lcnJvcikgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byBhZGQgY29udHJvbHNcbiIpOworCQlyZXQgPSB4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyLmVycm9y OworCQlnb3RvIGVycm9yOworCX0KKworCXN1YmRldi0+Y3RybF9oYW5kbGVyID0gJnhzZGlyeHNz LT5jdHJsX2hhbmRsZXI7CisKKwlyZXQgPSB2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgmeHNkaXJ4 c3MtPmN0cmxfaGFuZGxlcik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gc2V0IGNvbnRyb2xzXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwbGF0Zm9ybV9z ZXRfZHJ2ZGF0YShwZGV2LCB4c2Rpcnhzcyk7CisKKwlyZXQgPSB2NGwyX2FzeW5jX3JlZ2lzdGVy X3N1YmRldihzdWJkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIHJlZ2lzdGVyIHN1YmRldlxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJeHNkaXJ4c3Mt PnByZXZfaXNfZnJhYyA9IC0xOworCisJWFNESVJYX0NPUkVfRU5BQkxFKHhzZGlyeHNzKTsKKwor CXJldHVybiAwOworZXJyb3I6CisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmeHNkaXJ4c3MtPmN0 cmxfaGFuZGxlcik7CisJbWVkaWFfZW50aXR5X2NsZWFudXAoJnN1YmRldi0+ZW50aXR5KTsKKwlY U0RJUlhfR0xPQkFMX0lOVFJfRElTQUJMRSh4c2Rpcnhzcyk7CisJeHNkaXJ4c3NfY2xyKHhzZGly eHNzLCBYU0RJUlhfSUVSX1JFRywgWFNESVJYX0lOVFJfQUxMX01BU0spOworY2xrX2VycjoKKwlj bGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZSh4c2Rpcnhzcy0+bnVtX2Nsa3MsIHhzZGlyeHNzLT5j bGtzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHhzZGlyeHNzX3JlbW92ZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNk aXJ4c3MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYg KnN1YmRldiA9ICZ4c2Rpcnhzcy0+c3ViZGV2OworCisJWFNESVJYX0NPUkVfRElTQUJMRSh4c2Rp cnhzcyk7CisJWFNESVJYX0dMT0JBTF9JTlRSX0RJU0FCTEUoeHNkaXJ4c3MpOworCXhzZGlyeHNz X2Nscih4c2RpcnhzcywgWFNESVJYX0lFUl9SRUcsIFhTRElSWF9JTlRSX0FMTF9NQVNLKTsKKwl4 c2Rpcnhfc3RyZWFtZmxvd19jb250cm9sKHhzZGlyeHNzLCBmYWxzZSk7CisKKwl2NGwyX2FzeW5j X3VucmVnaXN0ZXJfc3ViZGV2KHN1YmRldik7CisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmeHNk aXJ4c3MtPmN0cmxfaGFuZGxlcik7CisJbWVkaWFfZW50aXR5X2NsZWFudXAoJnN1YmRldi0+ZW50 aXR5KTsKKworCWNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKHhzZGlyeHNzLT5udW1fY2xrcywg eHNkaXJ4c3MtPmNsa3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIHhzZGlyeHNzX29mX2lkX3RhYmxlW10gPSB7CisJeyAuY29tcGF0aWJsZSA9 ICJ4bG54LHYtc21wdGUtdWhkc2RpLXJ4LXNzLTIuMCIgfSwKKwl7IH0KK307CitNT0RVTEVfREVW SUNFX1RBQkxFKG9mLCB4c2Rpcnhzc19vZl9pZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxh dGZvcm1fZHJpdmVyIHhzZGlyeHNzX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJ PSAieGlsaW54LXNkaXJ4c3MiLAorCQkub2ZfbWF0Y2hfdGFibGUJPSB4c2Rpcnhzc19vZl9pZF90 YWJsZSwKKwl9LAorCS5wcm9iZQkJCT0geHNkaXJ4c3NfcHJvYmUsCisJLnJlbW92ZQkJCT0geHNk aXJ4c3NfcmVtb3ZlLAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih4c2Rpcnhzc19kcml2 ZXIpOworCitNT0RVTEVfQVVUSE9SKCJWaXNoYWwgU2FnYXIgPHZzYWdhckB4aWxpbnguY29tPiIp OworTU9EVUxFX0RFU0NSSVBUSU9OKCJYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbSBEcml2ZXIiKTsK K01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51 eC92NGwyLWNvbnRyb2xzLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdjRsMi1jb250cm9scy5oCmlu ZGV4IDYyMjcxNDE4YzFiZS4uOTUyNmE2YWNjNmY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkv bGludXgvdjRsMi1jb250cm9scy5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92NGwyLWNvbnRy b2xzLmgKQEAgLTE5OCw2ICsxOTgsMTIgQEAgZW51bSB2NGwyX2NvbG9yZnggewogICovCiAjZGVm aW5lIFY0TDJfQ0lEX1VTRVJfQVRNRUxfSVNDX0JBU0UJCShWNEwyX0NJRF9VU0VSX0JBU0UgKyAw eDEwYzApCiAKKy8qCisgKiBUaGUgYmFzZSBmb3IgdGhlIFhpbGlueCBTREkgUnggZHJpdmVyIGNv bnRyb2xzLgorICogV2UgcmVzZXJ2ZSAxNiBjb250cm9scyBmb3IgdGhpcyBkcml2ZXIuCisgKi8K KyNkZWZpbmUgVjRMMl9DSURfVVNFUl9YSUxJTlhfU0RJUlhfQkFTRQkJKFY0TDJfQ0lEX1VTRVJf QkFTRSArIDB4MTBlMCkKKwogLyogTVBFRy1jbGFzcyBjb250cm9sIElEcyAqLwogLyogVGhlIE1Q RUcgY29udHJvbHMgYXJlIGFwcGxpY2FibGUgdG8gYWxsIGNvZGVjIGNvbnRyb2xzCiAgKiBhbmQg dGhlICdNUEVHJyBwYXJ0IG9mIHRoZSBkZWZpbmUgaXMgaGlzdG9yaWNhbCAqLwpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC1zZGlyeHNzLmggYi9pbmNsdWRlL3VhcGkvbGlu dXgveGlsaW54LXNkaXJ4c3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLjFiY2JmNTg1MmIyMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC94 aWxpbngtc2Rpcnhzcy5oCkBAIC0wLDAgKzEsMjgzIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqLworLyoKKyAqIFhpbGlueCBT REkgUnggU3Vic3lzdGVtIG1vZGUsIGV2ZW50LCBjdXN0b20gdGltaW5ncyBhbmQKKyAqIGZsYWcg ZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE5IC0gMjAyMCBYaWxpbngsIElu Yy4KKyAqCisgKiBDb250YWN0czogVmlzaGFsIFNhZ2FyIDx2aXNoYWwuc2FnYXJAeGlsaW54LmNv bT4KKyAqLworCisjaWZuZGVmIF9fVUFQSV9YSUxJTlhfU0RJUlhTU19IX18KKyNkZWZpbmUgX19V QVBJX1hJTElOWF9TRElSWFNTX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNs dWRlIDxsaW51eC92NGwyLWNvbnRyb2xzLmg+CisjaW5jbHVkZSA8bGludXgvdjRsMi1kdi10aW1p bmdzLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKKy8qCisgKiBFdmVudHMKKyAq CisgKiBWNEwyX0VWRU5UX1hJTElOWF9TRElSWF9VTkRfT1ZSX0ZMT1c6IFZpZGVvIGluIHRvIEFY STQgU3RyZWFtIGNvcmUKKyAqIHVuZGVyL292ZXJmbG93ZWQgZHVyaW5nIGEgcmVzb2x1dGlvbiBv ciBmcmFtZSByYXRlIGNoYW5nZS4KKyAqLworI2RlZmluZSBWNEwyX0VWRU5UX1hJTElOWF9TRElS WF9DTEFTUyAgICAgIChWNEwyX0VWRU5UX1BSSVZBVEVfU1RBUlQgfCAweDIwMCkKKyNkZWZpbmUg VjRMMl9FVkVOVF9YSUxJTlhfU0RJUlhfVU5EX09WUl9GTE9XCVwKKwkJCQkJKFY0TDJfRVZFTlRf WElMSU5YX1NESVJYX0NMQVNTIHwgMHgxKQorCisjZGVmaW5lIFhJTElOWF9TRElSWF9VTkRFUkZM T1dfRVZFTlQJQklUKDEpCisjZGVmaW5lIFhJTElOWF9TRElSWF9PVkVSRkxPV19FVkVOVAlCSVQo MikKKy8qCisgKiBUaGlzIGVudW0gaXMgdXNlZCB0byBwcmVwYXJlIHRoZSBiaXRtYXNrIG9mIG1v ZGVzIHRvIGJlIGRldGVjdGVkCisgKi8KK2VudW0geworCVhTRElSWF9NT0RFX1NEX09GRlNFVCA9 IDAsCisJWFNESVJYX01PREVfSERfT0ZGU0VULAorCVhTRElSWF9NT0RFXzNHQV9PRkZTRVQsCisJ WFNESVJYX01PREVfM0dCX09GRlNFVCwKKwlYU0RJUlhfTU9ERV82R19PRkZTRVQsCisJWFNESVJY X01PREVfMTJHSV9PRkZTRVQsCisJWFNESVJYX01PREVfMTJHRl9PRkZTRVQsCisJWFNESVJYX01P REVfTlVNX1NVUFBPUlRFRCwKK307CisKKyNkZWZpbmUgWFNESVJYX0RFVEVDVF9BTExfTU9ERVMJ CShCSVQoWFNESVJYX01PREVfU0RfT0ZGU0VUKSB8IFwKKwkJCQkJQklUKFhTRElSWF9NT0RFX0hE X09GRlNFVCkgfCBcCisJCQkJCUJJVChYU0RJUlhfTU9ERV8zR0FfT0ZGU0VUKSB8IFwKKwkJCQkJ QklUKFhTRElSWF9NT0RFXzNHQl9PRkZTRVQpIHwgXAorCQkJCQlCSVQoWFNESVJYX01PREVfNkdf T0ZGU0VUKSB8IFwKKwkJCQkJQklUKFhTRElSWF9NT0RFXzEyR0lfT0ZGU0VUKSB8IFwKKwkJCQkJ QklUKFhTRElSWF9NT0RFXzEyR0ZfT0ZGU0VUKSkKKworLyoKKyAqIEVESCAtIEVycm9yIERldGVj dGlvbiBhbmQgSGFuZGxpbmcuCisgKiBJbiB0aGUgU0QtU0RJIG1vZGUsIHRoZSBVSEQtU0RJIGNv cmUgZnVsbHkgc3VwcG9ydHMgUlAgMTY1LgorICogVGhlIGJpdG1hc2sgaXMgbmFtZWQgYXMgWFNE SVJYX0VESF9FUlJDTlRfWFhfWVlfRVJSIGV4Y2VwdAorICogZm9yIHBhY2tldCBjaGVja3N1bSBl cnJvci4KKyAqCisgKiBYWCAtIEVESCBFcnJvciBUeXBlcworICogQU5DIC0gQW5jaWxsYXJ5IERh dGEgUGFja2V0IEVycm9ycworICogRkYgLSBGdWxsIEZpZWxkIEVycm9ycworICogQVAgLSBBY3Rp dmUgUG9ydGlvbiBFcnJvcnMKKyAqCisgKiBZWSAtIEVycm9yIEZsYWdzCisgKiBFREggLSBlcnJv ciBkZXRlY3RlZCBoZXJlCisgKiBFREEgLSBlcnJvciBEZXRlY3RlZCBhbHJlYWR5CisgKiBJREgg LSBpbnRlcm5hbCBlcnJvciBkZXRlY3RlZCBoZXJlCisgKiBJREEgLSBpbnRlcm5hbCBlcnJvciBk ZXRlY3RlZCBhbHJlYWR5CisgKiBVRVMgLSB1bmtub3duIGVycm9yIHN0YXR1cworICoKKyAqIFJl ZmVyIHRvIFNlYyA0LjMgRXJyb3IgRmxhZ3MgaW4gUlAgMTY1LTE5OTQgZm9yIGRldGFpbHMKKyAq LworCisjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FOQ19FREhfRVJSCQlCSVQoMCkKKyNkZWZp bmUgWFNESVJYX0VESF9FUlJDTlRfQU5DX0VEQV9FUlIJCUJJVCgxKQorI2RlZmluZSBYU0RJUlhf RURIX0VSUkNOVF9BTkNfSURIX0VSUgkJQklUKDIpCisjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05U X0FOQ19JREFfRVJSCQlCSVQoMykKKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQU5DX1VFU19F UlIJCUJJVCg0KQorI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9GRl9FREhfRVJSCQlCSVQoNSkK KyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfRkZfRURBX0VSUgkJQklUKDYpCisjZGVmaW5lIFhT RElSWF9FREhfRVJSQ05UX0ZGX0lESF9FUlIJCUJJVCg3KQorI2RlZmluZSBYU0RJUlhfRURIX0VS UkNOVF9GRl9JREFfRVJSCQlCSVQoOCkKKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfRkZfVUVT X0VSUgkJQklUKDkpCisjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FQX0VESF9FUlIJCUJJVCgx MCkKKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQVBfRURBX0VSUgkJQklUKDExKQorI2RlZmlu ZSBYU0RJUlhfRURIX0VSUkNOVF9BUF9JREhfRVJSCQlCSVQoMTIpCisjZGVmaW5lIFhTRElSWF9F REhfRVJSQ05UX0FQX0lEQV9FUlIJCUJJVCgxMykKKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRf QVBfVUVTX0VSUgkJQklUKDE0KQorI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9QS1RfQ0hLU1VN X0VSUglCSVQoMTUpCisKKyNkZWZpbmUgWFNESVJYX0VESF9BTExFUlJfTUFTSwkJMHhGRkZGCisK Ky8qCisgKiBWNEwyIENvbnRyb2xzIC0gV2UgcmVzZXJ2ZWQgMTYgY29udHJvbHMgZm9yIHRoaXMg ZHJpdmVyLgorICoKKyAqIFRoZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIXyogY29udHJvbHMg YXJlIHByZXNlbnQgb25seSBpZgorICogRURIIGlzIGVuYWJsZWQuCisgKiBUaGUgY29udHJvbHMg d2hpY2ggY2FuIGJlIHNldCBzaG91bGQgb25seSBiZSBzZXQgYmVmb3JlIGVuYWJsaW5nCisgKiBz dHJlYW1pbmcuIFRoZSBjb250cm9scyB3aGljaCBjYW4gYmUgZ290IHNob3VsZCBiZSBjYWxsZWQg d2hpbGUKKyAqIHN0cmVhbWluZyB0byBnZXQgY29ycmVjdCB2YWx1ZXMuCisgKiBUaGUgVjRMMl9D SURfWElMSU5YX1NESVJYX01PREVfREVURUNUIGNhbiBiZSBjYWxsZWQgd2hlbiBxdWVyeSBkdiB0 aW1pbmcKKyAqIHJldHVybnMgYSB2YWxpZCB0aW1pbmcuCisgKi8KKworLyoKKyAqIEZyYW1lciBD b250cm9sIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBmcmFtZXIuIFdoZW4gdGhpcyBpcyBzZXQs IHRoZSBmcmFtZXIKKyAqIGF1dG9tYXRpY2FsbHkgcmVhZGp1c3RzIHRoZSBvdXRwdXQgd29yZCBh bGlnbm1lbnQgdG8gbWF0Y2ggdGhlIGFsaWdubWVudCBvZgorICogZWFjaCB0aW1pbmcgcmVmZXJl bmNlIHNpZ25hbChUUlMpLiBOb3JtYWxseSB0aGlzIHNob3VsZCBiZSBzZXQuIEJ1dCB1c2VyIG1h eQorICogY29udHJvbCB0aGlzIGlucHV0IHRvIGltcGxlbWVudCBUUlMgZmlsdGVyaW5nIHRvIHBy ZXZlbnQgYSBzaWduYWwgbWlzYWxpZ25lZAorICogVFJTIGZyb20gY2F1c2luZyBlcnJvbmVvdXMg YWxpZ25tZW50IGNoYW5nZXMuCisgKiBSZWZlciB0byBQRzIwNSByeF9mcmFtZV9lbiBmb3IgbW9y ZSBkZXRhaWxzLgorICovCisjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9GUkFNRVIJCShW NEwyX0NJRF9VU0VSX1hJTElOWF9TRElSWF9CQVNFICsgMSkKKworLyoKKyAqIFZpZGVvIExvY2sg V2luZG93IENvbnRyb2wgdG8gc2V0IHRoZSB2aWRlbyBsb2NrIHdpbmRvdyB2YWx1ZQorICogVGhp cyBpcyB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIG1vZGUgYW5kIHRyYW5zcG9ydCBzdHJlYW0gbmVl ZAorICogdG8gYmUgbG9ja2VkIGJlZm9yZSBhIHZpZGVvIGxvY2sgaW50ZXJydXB0IG9jY3Vycy4K KyAqLworI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfVklETE9DS19XSU5ET1cJKFY0TDJf Q0lEX1VTRVJfWElMSU5YX1NESVJYX0JBU0UgKyAyKQorCisvKgorICogRURIIEVycm9yIE1hc2sg Q29udHJvbCB0byBlbmFibGUgRURIIGVycm9yIGNvdW50CisgKiBUaGlzIGNvbnRyb2wgdGFrZXMg aW4gdGhlIGJpdG1hc2sgb2YgWFNESVJYX0VESF9FUlJDTlRfKl9FUlIgdG8gZW5hYmxlIGNvdW50 aW5nCisgKiBzdWNoIGVycm9ycy4KKyAqLworI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhf RURIX0VSUk9SX1NPVVJDRVMJKFY0TDJfQ0lEX1VTRVJfWElMSU5YX1NESVJYX0JBU0UgKyAzKQor CisvKgorICogTW9kZSBzZWFyY2ggQ29udHJvbCB0byBwYXNzIHRoZSBiaXQgbWFzayBvZiBtb2Rl cyB0byBkZXRlY3QuCisgKiBJZiBvbmx5IDEgYml0IGlzIHNldCwgdGhlIGRyaXZlciBwcm9ncmFt cyBJUCB0byBiZSBpbiBmaXhlZCBtb2RlIGVsc2UKKyAqIGluIG11bHRpIGRldGVjdGlvbiBtb2Rl LgorICoKKyAqIFNldCB0aGlzIHdoZW4gbm90IHN0cmVhbWluZy4KKyAqCisgKiBiaXQgMCBzZXQg dG8gZGV0ZWN0IFNEICBtb2RlLAorICogYml0IDEgc2V0IHRvIGRldGVjdCBIRCAgbW9kZSwKKyAq IGJpdCAyIHNldCB0byBkZXRlY3QgM0dBIG1vZGUsCisgKiBiaXQgMyBzZXQgdG8gZGV0ZWN0IDNH QiBtb2RlLAorICogYml0IDQgc2V0IHRvIGRldGVjdCA2RyAgbW9kZSwKKyAqIGJpdCA1IHNldCB0 byBkZXRlY3QgMTJHIGludGVnZXIgZnJhbWUgcmF0ZSBtb2RlLAorICogYml0IDYgc2V0IHRvIGRl dGVjdCAxMkcgZnJhY3Rpb25hbCBmcmFtZSByYXRlIG1vZGUsCisgKi8KKyNkZWZpbmUgVjRMMl9D SURfWElMSU5YX1NESVJYX1NFQVJDSF9NT0RFUwkoVjRMMl9DSURfVVNFUl9YSUxJTlhfU0RJUlhf QkFTRSArIDQpCisKKy8qCisgKiBHZXQgRGV0ZWN0ZWQgU0RJIE1vZGUgY29udHJvbCAocmVhZCBv bmx5KQorICoKKyAqIENvbnRyb2wgVmFsdWUgLSBNb2RlIGRldGVjdGVkCisgKiAgICAgICAgMCAg ICAgIC0gICAgIFNECisgKiAgICAgICAgMSAgICAgIC0gICAgIEhECisgKiAgICAgICAgMiAgICAg IC0gICAgIDNHQQorICogICAgICAgIDMgICAgICAtICAgICAzR0IKKyAqICAgICAgICA0ICAgICAg LSAgICAgNkcKKyAqICAgICAgICA1ICAgICAgLSAgICAgMTJHIGludGVnZXIgZnJhbWUgcmF0ZQor ICogICAgICAgIDYgICAgICAtICAgICAxMkcgZnJhY3Rpb25hbCBmcmFtZSByYXRlCisgKi8KKyNk ZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYX01PREVfREVURUNUCShWNEwyX0NJRF9VU0VSX1hJ TElOWF9TRElSWF9CQVNFICsgNSkKKworLyogR2V0IG51bWJlciBvZiBDUkMgZXJyb3JzIHN0YXR1 cyBjb250cm9sCisgKgorICogV2hlbiBhIENSQyBpcyBkZXRlY3RlZCBvbiBhIGxpbmUsIHRoZSBD UkMgZXJyb3Igc2lnbmFsIG9mIHRoYXQgZGF0YSBzdHJlYW0KKyAqIGJlY29tZXMgYXNzZXJ0ZWQg c3RhcnRpbmcgYSBmZXcgY2xvY2sgY3ljbGVzIGFmdGVyIHRoZSBsYXN0IENSQyB3b3JkIGlzCisg KiBvdXRwdXQgb24gdGhlIGRhdGEgc3RyZWFtIHBvcnRzIGZvbGxvd2luZyB0aGUgRUFWIHRoYXQg ZW5kcyB0aGUgbGluZQorICogY29udGFpbmluZyB0aGUgZXJyb3IuIFRoZSBDUkMgc2lnbmFsIHJl bWFpbnMgYXNzZXJ0ZWQgZm9yIG9uZSBsaW5lIHRpbWUuCisgKgorICogVGhlIExTQiAxNiBiaXRz IG9mIHZhbHVlIHJldHVybmVkIGJ5IHRoc2kgY29udHJvbCByZXByZXNlbnQgdGhlIGVycm9yCisg KiBzaWduYWwgb24gZWFjaCBvZiAxNiBkYXRhIHN0cmVhbXMuIFRoZSBNU0IgMTYgYml0cyBjb250 YWlucyB0aGUgYWNjdW11bGF0ZWQKKyAqIGVycm9yIGNvdW50LgorICoKKyAqIFJlZmVyIHRvIFBH MjA1IHJ4X2NyY19lcnJfZHNYIChYID0gMSB0byAxNikgZGVzY3JpcHRpb24gZm9yIGRldGFpbHMu CisgKi8KKyNkZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYX0NSQwkJKFY0TDJfQ0lEX1VTRVJf WElMSU5YX1NESVJYX0JBU0UgKyA2KQorCisvKgorICogR2V0IEVESCBlcnJvciBjb3VudCBjb250 cm9sCisgKgorICogUmVhZGluZyB0aGlzIGNvbnRyb2wgd2lsbCBnaXZlIHRoZSBudW1iZXIgb2Yg RURIIGVycm9ycyBvY2N1cnJlZCBiYXNlZAorICogb24gdGhlIGJpdG1hc2sgcGFzc2VkIGluIFY0 TDJfQ0lEX1hJTElOWF9TRElSWF9FREhfRVJST1JfU09VUkNFUy4KKyAqCisgKiBJdCBpbmNyZW1l bnRzIG9uY2UgcGVyIGZpZWxkIHdoZW4gYW55IG9mIHRoZSBlcnJvciBjb25kaXRpb25zIGVuYWJs ZWQgYnkKKyAqIHRoZSBSWF9FREhfRVJSQ05UX0VOIHJlZ2lzdGVyIGJpdChzKSBvY2N1ciBkdXJp bmcgdGhhdCBmaWVsZC4KKyAqCisgKiBSZWZlciB0byBQRzIwNSByeF9lZGhfZXJyY250CisgKi8K KyNkZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9FUlJDTlQJKFY0TDJfQ0lEX1VTRVJf WElMSU5YX1NESVJYX0JBU0UgKyA3KQorCisvKgorICogR2V0IEVESCBzdGF0dXMgY29udHJvbAor ICoKKyAqIFRoaXMgY29udHJvbCByZXR1cm5zIHRoZSBSWF9FREhfU1RTIHJlZ2lzdGVyIGNvbnRl bnRzLgorICogUmVmZXIgdG8gUEcyOTAgcmVnaXN0ZXIgc3BhY2Ugc2VjdGlvbiBmb3IgbW9yZSBk ZXRhaWxzLgorICovCisjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9FREhfU1RBVFVTCShW NEwyX0NJRF9VU0VSX1hJTElOWF9TRElSWF9CQVNFICsgOCkKKworLyogR2V0IFRyYW5zcG9ydCBJ bnRlcmxhY2VkIHN0YXR1cyB3aGV0aGVyIGl0IGlzIGludGVybGFjZWQgb3Igbm90ICovCisjZGVm aW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9UU19JU19JTlRFUkxBQ0VECShWNEwyX0NJRF9VU0VS X1hJTElOWF9TRElSWF9CQVNFICsgOSkKKworLyoKKyAqIFhpbGlueCBEViB0aW1pbmdzCisgKiBU T0RPIC0gUmVtb3ZlIHRoZXNlIG9uY2UgdGhleSBhcmUgaW4gdjRsMi1kdi10aW1pbmdzLmgKKyAq LworI2RlZmluZSBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDI0IHsgXAorCS50eXBlID0gVjRM Ml9EVl9CVF82NTZfMTEyMCwgXAorCVY0TDJfSU5JVF9CVF9USU1JTkdTKDIwNDgsIDEwODAsIDAs IFwKKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCBcCisJ CTc0MjUwMDAwLCA1MTAsIDQ0LCAxNDgsIDQsIDUsIDM2LCAwLCAwLCAwLCBcCisJCVY0TDJfRFZf QlRfU1REX1NESSkgXAorfQorCisjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQMjUg eyBcCisJLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCBcCisJVjRMMl9JTklUX0JUX1RJTUlO R1MoMjA0OCwgMTA4MCwgMCwgXAorCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZT WU5DX1BPU19QT0wsIFwKKwkJNzQyNTAwMDAsIDQwMCwgNDQsIDE0OCwgNCwgNSwgMzYsIDAsIDAs IDAsIFwKKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcCit9CisKKyNkZWZpbmUgWExOWF9WNEwyX0RW X0JUXzIwNDhYMTA4MFAzMCB7IFwKKwkudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsIFwKKwlW NEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgwLCAwLCBcCisJCVY0TDJfRFZfSFNZTkNfUE9T X1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXAorCQk3NDI1MDAwMCwgNjYsIDIwLCA2Niwg NCwgNSwgMzYsIDAsIDAsIDAsIFwKKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcCit9CisKKyNkZWZp bmUgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MEk0OCB7IFwKKwkudHlwZSA9IFY0TDJfRFZfQlRf NjU2XzExMjAsIFwKKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgwLCAxLCBcCisJCVY0 TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXAorCQk3NDI1MDAw MCwgMzI5LCA0NCwgMzI5LCAyLCA1LCAxNSwgMywgNSwgMTUsIFwKKwkJVjRMMl9EVl9CVF9TVERf U0RJKSBcCit9CisKKyNkZWZpbmUgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MEk1MCB7IFwKKwku dHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsIFwKKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4 LCAxMDgwLCAxLCBcCisJCVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9T X1BPTCwgXAorCQk3NDI1MDAwMCwgMjc0LCA0NCwgMjc0LCAyLCA1LCAxNSwgMywgNSwgMTUsIFwK KwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcCit9CisKKyNkZWZpbmUgWExOWF9WNEwyX0RWX0JUXzIw NDhYMTA4MEk2MCB7IFwKKwkudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsIFwKKwlWNEwyX0lO SVRfQlRfVElNSU5HUygyMDQ4LCAxMDgwLCAxLCBcCisJCVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8 IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXAorCQk3NDI1MDAwMCwgNjYsIDIwLCA2NiwgMiwgNSwg MTUsIDMsIDUsIDE1LCBcCisJCVY0TDJfRFZfQlRfU1REX1NESSkgXAorfQorCisjZGVmaW5lIFhM TlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQNDggeyBcCisJLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8x MTIwLCBcCisJVjRMMl9JTklUX0JUX1RJTUlOR1MoMjA0OCwgMTA4MCwgMCwgXAorCQlWNEwyX0RW X0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwKKwkJMTQ4NTAwMDAwLCA1 MTAsIDQ0LCAxNDgsIDQsIDUsIDM2LCAwLCAwLCAwLCBcCisJCVY0TDJfRFZfQlRfU1REX1NESSkg XAorfQorCisjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQNTAgeyBcCisJLnR5cGUg PSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCBcCisJVjRMMl9JTklUX0JUX1RJTUlOR1MoMjA0OCwgMTA4 MCwgMCwgXAorCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0ws IFwKKwkJMTQ4NTAwMDAwLCA0MDAsIDQ0LCAxNDgsIDQsIDUsIDM2LCAwLCAwLCAwLCBcCisJCVY0 TDJfRFZfQlRfU1REX1NESSkgXAorfQorCisjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEw ODBQNjAgeyBcCisJLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCBcCisJVjRMMl9JTklUX0JU X1RJTUlOR1MoMjA0OCwgMTA4MCwgMCwgXAorCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwy X0RWX1ZTWU5DX1BPU19QT0wsIFwKKwkJMTQ4NTAwMDAwLCA4OCwgNDQsIDIwLCA0LCA1LCAzNiwg MCwgMCwgMCwgXAorCQlWNEwyX0RWX0JUX1NURF9TREkpIFwKK30KKworI2RlZmluZSBYTE5YX1Y0 TDJfRFZfQlRfMTkyMFgxMDgwSTQ4IHsgXAorCS50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwg XAorCVY0TDJfSU5JVF9CVF9USU1JTkdTKDE5MjAsIDEwODAsIDEsIFwKKwkJVjRMMl9EVl9IU1lO Q19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCBcCisJCTE0ODUwMDAwMCwgMzcxLCA4 OCwgMzcxLCAyLCA1LCAxNSwgMywgNSwgMTUsIFwKKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcCit9 CisKKyNlbmRpZiAvKiBfX1VBUElfWElMSU5YX1NESVJYU1NfSF9fICovCi0tIAoyLjIxLjAKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0t a2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2Vy bmVsCg==