From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2211430D3FA; Fri, 16 Oct 2026 00:58:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=148.163.129.52 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792112326; cv=fail; b=PCUvoHJCRxZuW15VKI3Hq7qXRofvxV6VjDU3N2yb7nai5J1Gx08nkMvrruyqnCgb4lv2f5RghJx9ad3D0V7tJVRirrQ3D1+M6WXpFEdosKaJ2vOkGSiUL9WwAovxX2lmTB9OSgv0HTWv/yx+mwJQD55JwtZfcqZeKY4kXZDlz2g= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792112326; c=relaxed/simple; bh=YwYeWqvF0HylRIT1XEWFVxlTRuFJZ37Ba1VqxieQ/hY=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=ui8EPH6qZRbsjDx/vLJyWtc3+YBkTJbxhQ2sA+CowcEuNAnGFHrYtWiIgS3tDGkpWe/ArnwwF1mtG/F7DFSb4+QPEpr52YAQlFpiAmc9h5NyTM8JO+YI+ZCj/L8b6MSC++4ZWZoO8Ia6+Fj9AL+NBrsJGU791/uf3UbdNtH3pVE= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sitime.com; spf=pass smtp.mailfrom=sitime.com; dkim=pass (2048-bit key) header.d=sitime.com header.i=@sitime.com header.b=eJ1wfZO0; dkim=pass (2048-bit key) header.d=Sitime.onmicrosoft.com header.i=@Sitime.onmicrosoft.com header.b=kDEPrr3D; arc=fail smtp.client-ip=148.163.129.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sitime.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sitime.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sitime.com header.i=@sitime.com header.b="eJ1wfZO0"; dkim=pass (2048-bit key) header.d=Sitime.onmicrosoft.com header.i=@Sitime.onmicrosoft.com header.b="kDEPrr3D" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sitime.com; h=cc:cc:content-transfer-encoding:content-transfer-encoding:content-type:content-type:date:date:from:from:in-reply-to:in-reply-to:message-id:message-id:mime-version:mime-version:references:references:subject:subject:to:to; s=mail; bh=YwYeWqvF0HylRIT1XEWFVxlTRuFJZ37Ba1VqxieQ/hY=; b=eJ1wfZO05QjihovwzIAUGCrcmdPcmCj5PFXvviJFZ1cr9Ozc41J/TEMJNdbXbODO6l4Eslnxh7uqSTbqTMco5OBl+VVSuAfL3jLwu/BARKjAlJoj6zIWNZ+tygfbZP6YIwny5U+SEZq/8CDMA2dV2PUSrxEu4f0j8psZvui+io5xwsDJCO1IPSGZbTyZuBawk0sofeSdgv6M+Oyjdj7yuzjHHe6qzCApCk+ePbGECf57f3nhCyWG6JNX3CYwnAhjyRDDYrkjrw8CcgYIPi/giy3QyNIAj/dKeQerVv63eePB2wBBrMVqmQt2SplbJjOx/L3ZnBR+uaHQrpqrZHNUOw== X-Virus-Scanned: Proofpoint Essentials engine Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11021084.outbound.protection.outlook.com [52.101.52.84]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 65608100068; Fri, 16 Oct 2026 00:58:30 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IkTdAxUsyaOIt6hN1fmUOzFylCD3tA6mWysBwpH0gV4oLH3GZppKd09i2RULknvNA6o2LUTHiEnjADsOiOiCXXtW1cVGVrYFvtlNklFeDdTFOirLL1KjWBu7buZgDEw1uXqGm1PmYJJbAW9pdIzzl2n2YtZZ9flAQfDZ5hE30A8QMojV/qCg269VqC8tIBWtTkrvMOAEE6zY8loaQbK6zmpapihI9YrGilmSQ6D8Qc4n2GNMPWhK9EetK1eM9az4GEAZNw6+dMCo9Nzgv69xFLsAsM9KzBnjgJaJ5V30bQaJ7iSuN9YSld9MFqCuFjtV9qlPfvXp0jJg3TXoD4Sxlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=YwYeWqvF0HylRIT1XEWFVxlTRuFJZ37Ba1VqxieQ/hY=; b=dyKkdvBAdQxZLTCT5nJdnFbxNp4kbyMkqum/ZCuxsJ3ug7IMbYCeVTLbtTJVEmgBp28YxyTOY5wLXs96J5CauLkIWBzA6N65LWdxNjkVIex8ytceZa42lhWnJkvKKAmC9406EFDA24Ks7fFQRqXahVAgsEjTh8DMaEqza86AEqOmOdQtiG3a39pVERtM+32I2BMVZTvT2HP3POYPntlub0wf1rNCHK/rjRbie8fPyEKW3DLAR07obDXBJ2/F0lOrkS44N/PurD92mn7bQKw+RFj/YY36zWFhpVMJVdxR+PMzUlgpT20a97lVjit3HZcoCRUsm2uQF5Omks4a1TW92Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=sitime.com; dmarc=pass action=none header.from=sitime.com; dkim=pass header.d=sitime.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Sitime.onmicrosoft.com; s=selector1-Sitime-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YwYeWqvF0HylRIT1XEWFVxlTRuFJZ37Ba1VqxieQ/hY=; b=kDEPrr3Doh8kIorz5WptnXNa8s7ULuk653IhzK2/zm/ByUtRy9ixzHP3xanHCNPBjn1r8z3XY/ycRVHJQ0IcFzx8D3I9GEg6qRuSTQlR4DwyBopAZke1dtrF8vxXU3YfJZL8kEngQZAA/nieZwEvHm+oejhi5pLi/z+YEdykn7PKt0QbKpsn7IQBjgSNxLAf4bH55j3IF/Yh/qiihAyxYdAeWIx0F8nECepe8PVt4uwwsjIS3z7YB3vdCLFcmBD38sKa4EC7QtEYpzhJ7qmRMkSmjCNBCrRK+ONSQUk3fS4eK4+Q6BCrVedBkfRHIfxWZD+8wsKv+V4YTH6s/J13Lw== Received: from LVWPR20MB994915.namprd20.prod.outlook.com (2603:10b6:408:3bf::16) by MN0PR20MB4789.namprd20.prod.outlook.com (2603:10b6:208:3c7::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.13; Fri, 16 Oct 2026 00:58:27 +0000 Received: from LVWPR20MB994915.namprd20.prod.outlook.com ([fe80::9551:3864:128b:8c01]) by LVWPR20MB994915.namprd20.prod.outlook.com ([fe80::9551:3864:128b:8c01%4]) with mapi id 15.21.0522.013; Fri, 16 Oct 2026 00:58:27 +0000 From: Ali Rouhi To: "jiri@resnulli.us" CC: "vadim.fedorenko@linux.dev" , "arkadiusz.kubalewski@intel.com" , "ivecera@redhat.com" , "kuba@kernel.org" , "pabeni@redhat.com" , "robh@kernel.org" , "krzk+dt@kernel.org" , "conor+dt@kernel.org" , "prabhakar.mahadev-lad.rj@bp.renesas.com" , "cjubran@nvidia.com" , "Oleg.Zadorozhnyi@devoxsoftware.com" , "devicetree@vger.kernel.org" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH net-next v14 05/12] dpll: sit9531x: register DPLL devices and pins Thread-Topic: [PATCH net-next v14 05/12] dpll: sit9531x: register DPLL devices and pins Thread-Index: AQHdXQlz0E5xFPCU7keKIdV2pUjlBQ== Date: Fri, 16 Oct 2026 00:58:27 +0000 Message-ID: <20261016005823.13690-6-arouhi@sitime.com> References: <20261016005823.13690-1-arouhi@sitime.com> In-Reply-To: <20261016005823.13690-1-arouhi@sitime.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=sitime.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: LVWPR20MB994915:EE_|MN0PR20MB4789:EE_ x-ms-office365-filtering-correlation-id: d85e64b0-a6d4-44b8-14e8-08df2b20964f x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|1800799024|376014|23010399003|38070700021|5023799004|56012099006|261009223027099003|261009221227099003|18002099003|10067099003|6133799003|260925021911599003|22082099003|260925022911599003|3023799007|260925021311599003; x-microsoft-antispam-message-info: xpTcyaLvNd+xGF8ub7YP6wKnRv63fTkLLiQG+FE/1MB5Kv2blpqTwGR0Vc7I0R0R+TzVP0p+KyjcK44yjyAwYJ3xUzT/jmbFHMhyZCylwZ0CmD16EZFZk9ckQXDguFnxpDg6ZPV1cKoI9VzuGcsjyqggm8RzmJ2K7pYLOJsTFFyeLq5VWzDX2rKwgIQVAWVpPIVxUzyQ56531QTCKGVq5YX84GUaQEBOx2byWzyR2bGM5a6NnTBmCTRsnNrBdkvjLnFGoTHUUukT7Z+vrpYtnSqD/3BUVeHg8mprA0x8VCyPT9tvq6qTASM4qyDqMJTic4cOFtBzwdRpvWFIpHYWPZgwY7P2EGiyZiHVqGTeaNte2QnOuZ/LtiOJySFYi2JrzBJzWsFc+9Rz5Fr6UrCRmifDbKeOwl0K/dpP524eoLYtDXu6ent0UXT/cdvQOMWLg6hmAgTcTujl4xBpWpb57MHJ9wO0g9Zu0UpC4XO6ylCkOzB3ICQg/7HGAgyZI+77rmBQvZzk6AhxtLhZY7FnZb0VeTbua6AIN7WvsA0n1UgTcp+Rlz6DTuulnL0vHeQbpcfDEzld1Nz/fsP9ax3p6OVMbLVw9TuLKObqKtsJ7iycOlLsxHlB3aey1c4919go1Cto//VCdz9D/o2GeDEU3ckQ1MjSHFFa1iXihL1N38gtvTUOudn9I4SfsOU+Bh3GpxqM1rk7i6m5gnDLbCFsoL/N6rxS1JuJmYOE3gJc5cY= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LVWPR20MB994915.namprd20.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(23010399003)(38070700021)(5023799004)(56012099006)(261009223027099003)(261009221227099003)(18002099003)(10067099003)(6133799003)(260925021911599003)(22082099003)(260925022911599003)(3023799007)(260925021311599003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?MU5RcWtRQmNaWVhTcWlkVXczSzhFb0J1VzlvS2pvRWVDTHJsQnRKdTg1ZStn?= =?utf-8?B?anFsczF6UkQ2UDhUMEZjSFFKd3dWSGpDMkwxWnM3d3NTY0kxbjBXd3hqeGx5?= =?utf-8?B?amNHUGZtMDFJSytiNi9hWlF6Q3RPa3FraEt2NkVDa2wyNlAzWEJKS2xRZGpu?= =?utf-8?B?M3VwMFRNZGRWQUdkQkkzU2x0M01MSFVmMzhzUnZwcS9OK252SXBBaVdMRkR0?= =?utf-8?B?NFpSRUw0RUFqYXhqYUpqWTc0QUlBVmI2S1NmeElORFFnS1JOQTNwRWpNcHB0?= =?utf-8?B?UXlYWTFZUFNoRG55emdKSUhYSm1sY0IyOG56WTlUMUZ0bWEwbnNTVXRodnBQ?= =?utf-8?B?SEN2UEIwek1Vam5UK3ZBbHhtMGI2eXZFVkpZMUVQWll2dk53Mml5aFhRZmxJ?= =?utf-8?B?a1NpRHFZN3N3blAzWkVsV3RSdzl2Ry8rekdjRkg4VjRFRGwwNG1BMjRidmsx?= =?utf-8?B?dkNzaFBZVjFZbHM5TWNBMjRYaUhrZDBmU2ltUUYxV3RzUEd6K2w0Zk44Szlo?= =?utf-8?B?TmxobVhDUlhibGR4Q1g5S2hKNEg4TGc3SklFMERKbjBYSG1OTldzSEV5YzQ5?= =?utf-8?B?ejYwOGpEYVl5K001K0sybUZKYm1RWSs2eHEvVGVHTVFmaTQzaW5idXBRT0NK?= =?utf-8?B?RFhKc2pDM1pJL2tiamY3dUpSN2dENGJzeFJZOTVTd0RSSkxQVHV6a3BJN2hO?= =?utf-8?B?TUtiU1ZPdHk5U3Uxem44aXZLck4vb2xVbjNneVk1c1VURnpEWlAxZmZETTNo?= =?utf-8?B?bDRLdm9aaEhYQ01WejVyKzQvQ3ZNcTNROHlNbWxRNElIcHpNTkJodmNHY3Ny?= =?utf-8?B?OG9CaEZUbzc1UDZ4K0EvS3kyc2RKZzRGN2FqUXh1MnlJenZ5Z2hHenFlbllW?= =?utf-8?B?a3k5b2lxU28vYzVob0VDMThtSXJyZE5wOElRZEtOa093c2ZObjJncFVWZkN6?= =?utf-8?B?UW5EbkoyOE84d1lQN2cyYTVsZUVXOEtzVEduOFpMVS96anozTVZkWjB3eXp1?= =?utf-8?B?R2ZjczFOL0NvL0RTak5QL1RPOVEyMGdYc2YvYmlQVVBSZ204eG9UeTQzRW1U?= =?utf-8?B?L2orQXE2RDBJM1gzVExBK2ZrRVlJMzEwL1hlSDJFaG5BZkFXWG1UUW82ZXZN?= =?utf-8?B?WlB1bWJwVHE4OVMrY1hZRS9FT1BSUDhmTWgzdFBEVlRNRFpmS2JXQnlJcWRH?= =?utf-8?B?WjhyQk9mUmh6QVFIT3g4ZVJobHdubWpBWC84eDY5OVVhTTRzZ3lNYmhacUJk?= =?utf-8?B?NU1iQTY0WUp5T2o4VmN0THV4UDZqZG5DQzVjaXRqTlhqUHR6c05ad1JrVFln?= =?utf-8?B?NlVMbjMrRmsrSWU3TUpHcGVDZ3Z2RU9qYWdzVWtRSkZpaFlmWndzUlFCUUlN?= =?utf-8?B?MEdNUGJJQ2pXWFRNZmVObGp2cVdqN2NDUkprdUdIY2ZtVUdXa2ZuQkovTFBR?= =?utf-8?B?c2pRODhSREdLS1pqTzFEek5rS1pUdnowWUl2MlF2VnRVRS9jd1ZKNU9QNVFu?= =?utf-8?B?TkM1YlhTVU80MFN3WVBxUCtaWUxjVVBhWklNb3duRjlwR3B4eHZnc1NmNzhQ?= =?utf-8?B?OG45dUNFdVl6UnR2elREZ0V6M2RhaUlFeERyQW9aaG95dmtGaEJEWm41cUxi?= =?utf-8?B?ZFVuMmVTYWFuWVU3ZWdwRVRDVVVKRnV6OU5MclFVYVRMbTlDOHhqeTZuZWtR?= =?utf-8?B?ZkVUUDZhd1h5bk9tZ2xmMFNvekZxSkEzQ1h0MzJsWFFxaFI1clp0VnZnR1NB?= =?utf-8?B?dDZZbDIwT2dGcE8yV2ozTnhxSjBHaDFZQkZlUnRraVFKL1hYa3h3ZG9LdE1K?= =?utf-8?B?Nnl3WllVSUdlb2tGWTRIMmNqUW9oMEkxNVRsM09FZFlqbFhHMG16RGNlQW5r?= =?utf-8?B?OVZFNExPdExnNXZuaU4yS1NNdUxFQVVqQlhwV24vK0hYaW84eEZtaXR5UVlV?= =?utf-8?B?NXA5aEdER2gxT0VGblB5ZDRva1pXekxYdUpEQ1M2L3dpdi9QNERuU0VuMUNY?= =?utf-8?B?bkFOY25wN2lZUTdDcmpDT1pCbXNBaVBTUnVhUWxoaVcvdC9aK2huYWEwUDRO?= =?utf-8?B?QmdXRC9MeUR3WEoxN0lJcmMwamNPQUlMODdXanNTRnQxekhDaGVFcldsc2NZ?= =?utf-8?B?VXc0WU1FT3g5Z3NiNmZPZ2U3NnN2YVZaY3VMWmRubmQyMVp3cFZyU3FOeEk2?= =?utf-8?B?NEFoSXZFWjMwZ1NRbUxNME5EaGZCTHpMRlJHQXhlL3JEQlg4d1Vkay9HUWlB?= =?utf-8?B?NFFkaktaUmsxbVR1WmhvM05uY3lMUndwQkNiTllRQzRTaE8zMzFnUnIraWI5?= =?utf-8?Q?BKkFQKwTQsn60DRld+?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: hLRFHevczP6BG6M0w7fUwnpAWGsplxcG/ywTip4RmoVkOugbaVCFHuYpA0jO0Cm6If6Ka1uFCrBqO728EA+QIURM6dfejWsCI5hMGXp/3syhSXe96n7NTHZbq1nLeKulEL8MCRyr/SBUvQdgiGj7KvZnQWKqmI5HNxeXd0kN9ajvufpRPQKt/PfN4a7xIdAVwmw8qiFPOmG2cUr2dsGPaeVIu/2Zsj6DWEHyOrVNii/+nkAgchf43PIBPfMZZDQlnysYe1iZ4xRINFrKK2Vx+hrh0op2w/XQ1c9joKy9qobw3Y7uT0Jh+kSECQRBxs768uFO+fz8Bb1W2fAYwMmXLA== X-OriginatorOrg: sitime.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: LVWPR20MB994915.namprd20.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d85e64b0-a6d4-44b8-14e8-08df2b20964f X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Oct 2026 00:58:27.0455 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 8fb55916-cf10-4b0d-96f4-cf3952657263 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: NU6KFoJOfR1kzsNREqCuHnbqtSOhypoKXVVn2KLgxEmclN+gkPlRbEp8VEJy5O8tBD6M0vcah/1xVq06VD1dxw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR20MB4789 X-MDID: 1792112311-F1o6y8G3dIMD X-PPE-STACK: {"stack":"us1"} X-MDID-O: us1;ut7;1792112311;F1o6y8G3dIMD;;ba04557de9d2da8490f5f1e6de07b967 X-PPE-TRUSTED: V=1;DIR=OUT; RnJvbTogT2xlZyBaYWRvcm96aG55aSA8T2xlZy5aYWRvcm96aG55aUBkZXZveHNvZnR3YXJlLmNv bT4KClJlZ2lzdGVyIGVhY2ggb2YgdGhlIGZvdXIgb24tY2hpcCBQTExzIGFzIGEgRFBMTCBkZXZp Y2UsIGFuZCB0aGUgY3J5c3RhbAp0aGF0IGZlZWRzIHRoZW0gYXMgYSBwaW4gb24gZWFjaC4gIFRo ZSBpbnB1dHMgYW5kIHRoZSBvdXRwdXRzIG5lZWQgYQpzdGF0ZSBjYWxsYmFjayB0aGUgY29yZSBp bnNpc3RzIG9uIGJlZm9yZSBpdCB3aWxsIHRha2UgYSBwaW4sIHNvIHRoZXkgYXJlCnJlZ2lzdGVy ZWQgYnkgdGhlIHBhdGNoZXMgdGhhdCBhZGQgdGhlaXJzOyB3aGF0IHRoaXMgcGF0Y2ggYnVpbGRz IGlzIHRoZQpkZXZpY2UsIHRoZSBwaW4gbWFjaGluZXJ5IGFyb3VuZCBpdCwgYW5kIHRoZSBvbmUg cGluIHdob3NlIHN0YXRlIG5ldmVyCmNoYW5nZXMuCgpUaGUgY2FsbGJhY2tzIGEgZGV2aWNlIG5l ZWRzIGZyb20gdGhlIHN0YXJ0IGNvbWUgd2l0aCBpdCAtLSBsb2NrIHN0YXR1cwphbmQgdGhlIG9w ZXJhdGluZyBtb2RlIC0tIGFsb25nIHdpdGggdGhlIGRpcmVjdGlvbiBvZiBlYWNoIHBpbi4gIFRo ZSByZXN0Cm9mIHRoZSBwaW4gb3BlcmF0aW9ucyBmb2xsb3cgaW4gbGF0ZXIgcGF0Y2hlcy4gIFRo ZSBkZXZpY2Ugc2VsZWN0cyBpdHMKcmVmZXJlbmNlIGJ5IHByaW9yaXR5LCBzbyBhdXRvbWF0aWMg aXMgdGhlIG9uZSBtb2RlIGFkdmVydGlzZWQuICBBCnByb2ZpbGUgdGhhdCBzZXRzIG1hbnVhbCBh Y3RpdmUgc2VsZWN0IGlzIHN0aWxsIHJlcG9ydGVkIGFzIGF1dG9tYXRpYywKc2luY2Ugbm90aGlu ZyBpbiB0aGUgZHJpdmVyIGRyaXZlcyBhIG1hbnVhbCBzZWxlY3Rpb24sIGFuZCBwcm9iZSB3YXJu cwphYm91dCBpdC4KCkJvdGggbmVlZCBzb21ld2hlcmUgdG8gcmVhZCBmcm9tLiAgVGhlIGNoaXAg cmVwb3J0cyBpdHMgc3RhdGUgYWNyb3NzCnNldmVyYWwgcGFnZXMsIGFuZCBhIG5ldGxpbmsgY2Fs bCBtdXN0IG5vdCB0dXJuIGludG8gYSBidXJzdCBvZiBJMkMKdHJhbnNhY3Rpb25zLCBzbyBhIGt0 aHJlYWQgd29ya2VyIHBvbGxzIHRoZSBpbnRlcmVzdGluZyByZWdpc3RlcnMgdHdpY2UgYQpzZWNv bmQgaW50byBhIHBlci1pbnB1dCBhbmQgcGVyLVBMTCBjYWNoZSwgYW5kIHRoZSBjYWxsYmFja3Mg YW5zd2VyIGZyb20KaXQuICBPdXRwdXQgc3RhdGUgaXMgbm90IHBvbGxlZDogaXQgY2hhbmdlcyBv bmx5IHRocm91Z2ggYSByZXF1ZXN0LCBhbmQKdGhlIGdldHRlciByZWFkcyB0aGUgZGV2aWNlIGFn YWluIHdoZW4gb25lIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuICBUaGUKc2FtZSB0aWNrIGNvbXBh cmVzIHRoZSBuZXcgc3RhdGUgYWdhaW5zdCB0aGUgb2xkIGFuZCBub3RpZmllcyB0aGUgY29yZQpv bmx5IG9uIGEgY2hhbmdlOyB0aGUgZmlyc3QgdGljayB0YWtlcyB0aGUgYmFzZWxpbmUuICBXaGVy ZSBhIGJvYXJkIHdpcmVzCklOVFJCLCB0aGUgaW50ZXJydXB0IHNjaGVkdWxlcyB0aGF0IHRpY2sg aW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4KcmVwbGFjaW5nIGl0OiB0aGUgcG9sbCBzdGF5cyBhcyB0 aGUgZmFsbGJhY2ssIHNpbmNlIHRoaXMgZGV2aWNlIGdpdmVzIG5vCndheSB0byBiZSBzdXJlIGFu IGVkZ2Ugd2FzIG5vdCBtaXNzZWQuCgpXaGljaCBQTEwgZHJpdmVzIGFuIG91dHB1dCBpcyByZWFk IGZyb20gdGhlIFBMTHMnIG91dHB1dC1lbmFibGUgbWFza3MsCndoaWNoIFBMTEMgYW5kIFBMTEQg a2VlcCBpbiBtaXJyb3JlZCBiaXQgb3JkZXIuICBBbiBvdXRwdXQgdHdvIG1hc2tzCmNsYWltIGdv ZXMgdG8gdGhlIGZpcnN0IFBMTCwgd2l0aCBhIHdhcm5pbmcuCgpUaGUgY2xvY2tfaWQgdGhhdCBr ZXlzIGEgZGV2aWNlIGluIHRoZSBEUExMIGNvcmUgaXMgYnVpbHQgZnJvbSB0aGUgU2lUaW1lCk9V SSBhbmQgdGhlIHBhcnQncyBwb3NpdGlvbjogc2l4dGVlbiBiaXRzIG9mIHRoZSBJMkMgYnVzIG51 bWJlciBhbmQgdGhlCmFkZHJlc3MuICBCdXMgbnVtYmVycyBhcmUgbm90IGJvdW5kZWQgYnkgdGhl IG51bWJlciBvZiBhZGFwdGVycyAtLSBhIERUCmFsaWFzIG9yIGEgbXV4IGNoaWxkIGNhbiBudW1i ZXIgYSBidXMgMjU2IG9yIGFib3ZlIG9uIGEgYm9hcmQgd2l0aCBhCmhhbmRmdWwgb2YgdGhlbSAt LSBzbyB0aGUgYnVzIGdldHMgdGhlIHdpZHRoOyB0aGUgdmFyaWFudCBuZWVkcyBubyBmaWVsZCwK c2luY2Ugb25lIGFkZHJlc3Mgb24gb25lIGJ1cyBob2xkcyBvbmUgcGFydC4KClNpZ25lZC1vZmYt Ynk6IE9sZWcgWmFkb3JvemhueWkgPE9sZWcuWmFkb3JvemhueWlAZGV2b3hzb2Z0d2FyZS5jb20+ CkFzc2lzdGVkLWJ5OiBMTE0KU2lnbmVkLW9mZi1ieTogQWxpIFJvdWhpIDxhcm91aGlAc2l0aW1l LmNvbT4KLS0tCiBkcml2ZXJzL2RwbGwvc2l0OTUzMXgvS2NvbmZpZyAgfCAgICA0ICsKIGRyaXZl cnMvZHBsbC9zaXQ5NTMxeC9NYWtlZmlsZSB8ICAgIDIgKy0KIGRyaXZlcnMvZHBsbC9zaXQ5NTMx eC9jb3JlLmMgICB8IDE3NzggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIGRyaXZl cnMvZHBsbC9zaXQ5NTMxeC9jb3JlLmggICB8ICAyNDcgKysrKy0KIGRyaXZlcnMvZHBsbC9zaXQ5 NTMxeC9kcGxsLmMgICB8ICA0MTEgKysrKysrKysKIGRyaXZlcnMvZHBsbC9zaXQ5NTMxeC9kcGxs LmggICB8ICAgNjggKysKIGRyaXZlcnMvZHBsbC9zaXQ5NTMxeC9yZWdzLmggICB8ICAyNTkgKysr Ky0KIDcgZmlsZXMgY2hhbmdlZCwgMjY3OCBpbnNlcnRpb25zKCspLCA5MSBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RwbGwvc2l0OTUzMXgvZHBsbC5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9kcGxsL3NpdDk1MzF4L2RwbGwuaAoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZHBsbC9zaXQ5NTMxeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3NpdDk1MzF4L0tjb25m aWcKaW5kZXggYWM1YjdmMzFhMDM0Li40N2FlYTg2NzQzMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv ZHBsbC9zaXQ5NTMxeC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9LY29uZmln CkBAIC05LDUgKzksOSBAQCBjb25maWcgU0lUOTUzMVhfRFBMTAogCSAgRHJpdmVyIGZvciBTaVRp bWUgU2lUOTUzMXggZmFtaWx5IGNsb2NrIGdlbmVyYXRvcnMKIAkgIChTaVQ5NTMxNywgU2lUOTUz MTYpLgogCisJICBUaGlzIGRyaXZlciByZWdpc3RlcnMgZWFjaCBvbi1jaGlwIFBMTCBhcyBhIERQ TEwgZGV2aWNlCisJICBhbmQgZXhwb3NlcyBpbnB1dC9vdXRwdXQgY2xvY2tzIGFzIERQTEwgcGlu cywgcHJvdmlkaW5nCisJICBydW50aW1lIGNvbmZpZ3VyYXRpb24gdmlhIEdlbmVyaWMgTmV0bGlu ay4KKwogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVy ZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2l0OTUzMXguCmRpZmYgLS1naXQgYS9k cml2ZXJzL2RwbGwvc2l0OTUzMXgvTWFrZWZpbGUgYi9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvTWFr ZWZpbGUKaW5kZXggODE5YWY2MTEyM2Y1Li5iOTdkMjY1NmE0NjAgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZHBsbC9zaXQ5NTMxeC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvTWFr ZWZpbGUKQEAgLTEsNCArMSw0IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w LW9ubHkKIAogb2JqLSQoQ09ORklHX1NJVDk1MzFYX0RQTEwpICs9IHNpdDk1MzF4Lm8KLXNpdDk1 MzF4LXkgOj0gY29yZS5vIHByb3Aubworc2l0OTUzMXgteSA6PSBjb3JlLm8gZHBsbC5vIHByb3Au bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3NpdDk1MzF4L2NvcmUuYyBiL2RyaXZlcnMvZHBs bC9zaXQ5NTMxeC9jb3JlLmMKaW5kZXggMjBjY2YwMjQwNzdiLi43OGE3YTFkZWYyMTMgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9jb3JlLmMKKysrIGIvZHJpdmVycy9kcGxsL3Np dDk1MzF4L2NvcmUuYwpAQCAtNiw5ICs2LDExIEBACiAgKiBBdXRob3I6IEFsaSBSb3VoaSA8YXJv dWhpQHNpdGltZS5jb20+CiAgKiBBdXRob3I6IE9sZWcgWmFkb3JvemhueWkgPE9sZWcuWmFkb3Jv emhueWlAZGV2b3hzb2Z0d2FyZS5jb20+CiAgKgotICogSTJDIHByb2JlLCBwYWdlZCByZWdtYXAg Y29uZmlndXJhdGlvbiBhbmQgcmVnaXN0ZXIgYWNjZXNzIGhlbHBlcnMuCisgKiBDb3JlIEkyQyBw cm9iZSwgcmVnbWFwIGNvbmZpZ3VyYXRpb24sIGhhcmR3YXJlIHN0YXRlIG1hbmFnZW1lbnQsCisg KiBhbmQgcGVyaW9kaWMgd29yayB0aHJlYWQuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2JpdGZp ZWxkLmg+CiAjaW5jbHVkZSA8bGludXgvYml0cy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgog I2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0xNiwxNCArMTgsMzEgQEAKICNpbmNsdWRlIDxs aW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+CiAjaW5jbHVk ZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8 bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcHJv cGVydHkuaD4KICNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKICNpbmNsdWRlICJjb3JlLmgiCisjaW5j bHVkZSAiZHBsbC5oIgorI2luY2x1ZGUgInByb3AuaCIKICNpbmNsdWRlICJyZWdzLmgiCiAKKy8q CisgKiBOdW1iZXIgb2YgaW5wdXQgKyBvdXRwdXQgcGluIHBvc2l0aW9ucyBmb3IgcGluIGluZGV4 IGFsbG9jYXRpb24uICBUaGUgdHdvCisgKiBleHRyYSBpbnB1dCBwb3NpdGlvbnMgYXJlIHRoZSBj cnlzdGFsIGFuZCB0aGUgSU5UU1lOQyBkZXN0aW5hdGlvbiwgdGhlCisgKiBleHRyYSBvdXRwdXQg cG9zaXRpb24gaXMgdGhlIElOVFNZTkMgc291cmNlLgorICovCisjZGVmaW5lIFNJVDk1MzFYX05V TV9JTlBVVF9QSU5TCQkoU0lUOTUzMVhfTUFYX0lOUFVUUyArIDIpCisjZGVmaW5lIFNJVDk1MzFY X05VTV9PVVRQVVRfUElOUwkoU0lUOTUzMVhfTUFYX09VVFBVVFMgKyAxKQorI2RlZmluZSBTSVQ5 NTMxWF9OVU1fUElOU19UT1RBTAkJKFNJVDk1MzFYX05VTV9JTlBVVF9QSU5TICsgXAorCQkJCQkg U0lUOTUzMVhfTlVNX09VVFBVVF9QSU5TKQorCiAjZGVmaW5lIFNJVDk1MzFYX0NISVAoX2lkLCBf bmluLCBfbm91dCwgX25hbWUsIF9tYXApIFwKIAl7IC5pZCA9IChfaWQpLCAubnVtX2lucHV0cyA9 IChfbmluKSwgLm51bV9vdXRwdXRzID0gKF9ub3V0KSwgXAogCSAgLm5hbWUgPSAoX25hbWUpLCAu Y2xrb3V0X21hcCA9IChfbWFwKSB9CkBAIC01MCw4ICs2OSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3Qgc2l0OTUzMXhfY2hpcF9pbmZvIHNpdDk1MzF4X2NoaXBfaWRzW10gPSB7CiAgKgogICogVGhl IGNhY2hlZCB2YWx1ZSBpcyBvbmx5IGFzIGdvb2QgYXMgdGhlIGxhc3QgdHJhbnNmZXIsIHRob3Vn aC4gIEEKICAqIHRyYW5zZmVyIHRoYXQgZmFpbHMgY2FuIGxlYXZlIHRoZSBwYXJ0IG9uIGFub3Ro ZXIgcGFnZSB0aGFuIHRoZSBjYWNoZQotICogcmVjb3Jkcywgc28gZXZlcnkgYWNjZXNzb3IgZHJv cHMgdGhlIGVudHJ5IG9uIGFuIGVycm9yIGFuZCB0aGUgbmV4dAotICogYWNjZXNzIHJlYWRzIHRo ZSBzZWxlY3RvciBhZ2Fpbi4KKyAqIHJlY29yZHMsIGFuZCBhIHBhcnQgdGhhdCBsb3N0IHBvd2Vy IGFjcm9zcyBzdXNwZW5kIGlzIGJhY2sgb24gcGFnZSAwLgorICogRXZlcnkgYWNjZXNzb3IgZHJv cHMgdGhlIGVudHJ5IG9uIGFuIGVycm9yIGFuZCByZXN1bWUgZHJvcHMgaXQgdG9vLCBzbworICog dGhlIG5leHQgYWNjZXNzIHJlYWRzIHRoZSBzZWxlY3RvciBhZ2Fpbi4KICAqLwogc3RhdGljIGJv b2wgc2l0OTUzMXhfdm9sYXRpbGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiBfX21heWJlX3VudXNl ZCwKIAkJCQkgIHVuc2lnbmVkIGludCByZWcpCkBAIC0xOTMsMTA5ICsyMTMsMTY5MCBAQCBpbnQg c2l0OTUzMXhfdXBkYXRlX3BsbF91OChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4IHBs bF9pZHgsCiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHNpdDk1MzF4X3JlYWRfdmFyaWFu dF9pZChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4ICppZCkKKy8qCisgKiBzaXQ5NTMx eF9pbnB1dF9nZXRfcmVncyAtIGdldCBmb3JjZSBtYXNrIGFuZCBzdGF0ZSByZWdpc3RlciBhZGRy ZXNzZXMKKyAqIEBpbmRleDoJbG9naWNhbCBpbnB1dCBpbmRleAorICogQGZvcmNlX3JlZzoJb3V0 cHV0IGZvcmNlIG1hc2sgcmVnaXN0ZXIgYWRkcmVzcworICogQHN0YXRlX3JlZzoJb3V0cHV0IHN0 YXRlIHJlZ2lzdGVyIGFkZHJlc3MKKyAqCisgKiBTZWxlY3RzIHRoZSBjb3JyZWN0IFBhZ2UgMHgw MiByZWdpc3RlciBwYWlyIGJhc2VkIG9uIHRoZSBwYWlyJ3MKKyAqIHNpZ25hbCBtb2RlIGFuZCB0 aGUgbGFuZSAoUC9OKSB0aGUgaW5kZXggcmVmZXJzIHRvLgorICovCitzdGF0aWMgdm9pZCBzaXQ5 NTMxeF9pbnB1dF9nZXRfcmVncyhjb25zdCBzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsCisJ CQkJICAgIHU4IGluZGV4LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmZvcmNlX3JlZywKKwkJCQkg ICAgdW5zaWduZWQgaW50ICpzdGF0ZV9yZWcpCiB7Ci0JcmV0dXJuIHNpdDk1MzF4X3JlYWRfdTgo c2l0ZGV2LCBTSVQ5NTMxWF9SRUdfVkFSSUFOVF9JRCwgaWQpOworCWlmIChzaXRkZXYtPnJlZltp bmRleF0uc2lnX21vZGUgPT0gU0lUOTUzMVhfTU9ERV9ERSkgeworCQkqZm9yY2VfcmVnID0gU0lU OTUzMVhfUkVHX0lOX0RFX0ZPUkNFOworCQkqc3RhdGVfcmVnID0gU0lUOTUzMVhfUkVHX0lOX0RF X1NUQVRFOworCX0gZWxzZSBpZiAoc2l0OTUzMXhfaW5wdXRfaXNfbihpbmRleCkpIHsKKwkJKmZv cmNlX3JlZyA9IFNJVDk1MzFYX1JFR19JTl9TRU5fRk9SQ0U7CisJCSpzdGF0ZV9yZWcgPSBTSVQ5 NTMxWF9SRUdfSU5fU0VOX1NUQVRFOworCX0gZWxzZSB7CisJCSpmb3JjZV9yZWcgPSBTSVQ5NTMx WF9SRUdfSU5fU0VQX0ZPUkNFOworCQkqc3RhdGVfcmVnID0gU0lUOTUzMVhfUkVHX0lOX1NFUF9T VEFURTsKKwl9CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2l0OTUzMXhfY2hpcF9pbmZvICpz aXQ5NTMxeF9tYXRjaF92YXJpYW50KHU4IGlkKQorLyoKKyAqIE91dHB1dCBlbmFibGUgLyBkaXNh YmxlIChIaS1aIGNvbnRyb2wpCisgKgorICogU2lUOTUzMXggb3V0cHV0cyBjYW4gYmUgY29uZmln dXJlZCBhcyBkaWZmZXJlbnRpYWwgKERJRkYpIG9yCisgKiBzaW5nbGUtZW5kZWQgKENNT1MpIGRl cGVuZGluZyBvbiB0aGUgZmFjdG9yeSBibG9iLiAgRWFjaCBvdXRwdXQgc2xvdAorICogaGFzIFRI UkVFIEhpLVogZm9yY2Uvc3RhdGUgcmVnaXN0ZXIgcGFpcnMgb24gUGFnZSAweDAzOiBvbmUgZm9y IHRoZQorICogZGlmZmVyZW50aWFsIHBhdGggYW5kIG9uZSBmb3IgZWFjaCBDTU9TIHBhZCwgT3V0 UCBhbmQgT3V0Ti4KKyAqCisgKiBBIG11dGUgd3JpdGVzIGFsbCB0aHJlZSBzbyB0aGUgb3V0cHV0 IGdvZXMgcXVpZXQgaG93ZXZlciBpdCBpcyB3aXJlZC4KKyAqIFRoYXQgaW5jbHVkZXMgYm90aCBD TU9TIHBhZHMsIGFzIFNpVGltZSdzIE91dHB1dF9EaXNhYmxlX0NvbnRyb2xfSGlaLnB5CisgKiBk b2VzOiB0aGUgcmVnaXN0ZXIgbWFwIG5hbWVzIGJpdCAzIG9mIE9EUm5fTUlTQzAgQ01PU19FTlAg YW5kIGJpdCAyCisgKiBDTU9TX0VOTiwgd2hpbGUgaXRzIHRhYmxlIG9mIHZhbHVlcyBnaXZlcyAw MTAwIGFzIENNT1Mgb24gT3V0UCwgc28gdGhlCisgKiBvbmUgcGFkIGEgc2luZ2xlLWVuZGVkIGNv bmZpZ3VyYXRpb24gZHJpdmVzIGNhbm5vdCBiZSB0b2xkIGZyb20gaXQuCisgKgorICogICBzbG90 IDAtNyA6CisgKiAgICAgRElGRiAweEYyLzB4RjMgICBDTU9TIE91dFAgMHhGOC8weEY5ICAgQ01P UyBPdXROIDB4RjYvMHhGNworICogICBzbG90IDgtMTE6CisgKiAgICAgRElGRiAweEY0LzB4RjUg Yml0cyAzOjAgICBDTU9TIE91dFAgMHhGQS8weEZCCisgKiAgICAgQ01PUyBPdXROIDB4RjQvMHhG NSBiaXRzIDc6NAorICoKKyAqIE1BU0sgYml0ID0gMSAgLT4gZHJpdmVyIHRha2VzIGNvbnRyb2wg b2YgdGhhdCBvdXRwdXQncyBIaS1aIHN0YXRlCisgKiBTVEFURSBiaXQgPSAwIC0+IG91dHB1dCBp cyBmb3JjZWQgdG8gSGktWiAobXV0ZWQpCisgKiBTVEFURSBiaXQgPSAxIC0+IG91dHB1dCBpcyBk cml2ZW4gKGFjdGl2ZSkKKyAqCisgKiBUaGUgb3V0cHV0ICJpbmRleCIgaW4gdGhlIGRyaXZlciBp cyBsb2dpY2FsOyB0aGUgcGh5c2ljYWwgc2xvdCBjb21lcworICogZnJvbSBpbmZvLT5jbGtvdXRf bWFwW10uCisgKi8KKworZW51bSB7CisJU0lUOTUzMVhfSElaX0RJRkYsCisJU0lUOTUzMVhfSEla X0NNT1NfUCwKKwlTSVQ5NTMxWF9ISVpfQ01PU19OLAorCVNJVDk1MzFYX0hJWl9QQUlSUywKK307 CisKK3N0cnVjdCBzaXQ5NTMxeF9oaXpfcGFpciB7CisJdW5zaWduZWQgaW50IG1hc2s7CisJdW5z aWduZWQgaW50IHN0YXRlOworCXU4IGJpdDsKK307CisKK3N0YXRpYyB2b2lkIHNpdDk1MzF4X291 dHB1dF9nZXRfaGl6X3JlZ3ModTggc2xvdCwKKwkJCQkJIHN0cnVjdCBzaXQ5NTMxeF9oaXpfcGFp ciAqcCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3Qgc2l0OTUzMXhfaGl6X3BhaXIgKmNt b3NfcCA9ICZwW1NJVDk1MzFYX0hJWl9DTU9TX1BdOworCXN0cnVjdCBzaXQ5NTMxeF9oaXpfcGFp ciAqY21vc19uID0gJnBbU0lUOTUzMVhfSElaX0NNT1NfTl07CisJc3RydWN0IHNpdDk1MzF4X2hp el9wYWlyICpkaWZmID0gJnBbU0lUOTUzMVhfSElaX0RJRkZdOwogCi0JZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoc2l0OTUzMXhfY2hpcF9pZHMpOyBpKyspIHsKLQkJaWYgKHNpdDk1MzF4X2No aXBfaWRzW2ldLmlkID09IGlkKQotCQkJcmV0dXJuICZzaXQ5NTMxeF9jaGlwX2lkc1tpXTsKKwlp ZiAoc2xvdCA8PSA3KSB7CisJCWRpZmYtPm1hc2sgPSBTSVQ5NTMxWF9SRUdfSElaX0RJRkZfMDdf TUFTSzsKKwkJZGlmZi0+c3RhdGUgPSBTSVQ5NTMxWF9SRUdfSElaX0RJRkZfMDdfU1RBVEU7CisJ CWRpZmYtPmJpdCA9IHNsb3Q7CisJCWNtb3NfcC0+bWFzayA9IFNJVDk1MzFYX1JFR19ISVpfU0Vf MDdfTUFTSzsKKwkJY21vc19wLT5zdGF0ZSA9IFNJVDk1MzFYX1JFR19ISVpfU0VfMDdfU1RBVEU7 CisJCWNtb3NfcC0+Yml0ID0gc2xvdDsKKwkJY21vc19uLT5tYXNrID0gU0lUOTUzMVhfUkVHX0hJ Wl9TRU5fMDdfTUFTSzsKKwkJY21vc19uLT5zdGF0ZSA9IFNJVDk1MzFYX1JFR19ISVpfU0VOXzA3 X1NUQVRFOworCQljbW9zX24tPmJpdCA9IHNsb3Q7CisJfSBlbHNlIHsKKwkJZGlmZi0+bWFzayA9 IFNJVDk1MzFYX1JFR19ISVpfRElGRl84MTFfTUFTSzsKKwkJZGlmZi0+c3RhdGUgPSBTSVQ5NTMx WF9SRUdfSElaX0RJRkZfODExX1NUQVRFOworCQlkaWZmLT5iaXQgPSBzbG90IC0gODsKKwkJY21v c19wLT5tYXNrID0gU0lUOTUzMVhfUkVHX0hJWl9TRV84MTFfTUFTSzsKKwkJY21vc19wLT5zdGF0 ZSA9IFNJVDk1MzFYX1JFR19ISVpfU0VfODExX1NUQVRFOworCQljbW9zX3AtPmJpdCA9IHNsb3Qg LSA4OworCQljbW9zX24tPm1hc2sgPSBTSVQ5NTMxWF9SRUdfSElaX0RJRkZfODExX01BU0s7CisJ CWNtb3Nfbi0+c3RhdGUgPSBTSVQ5NTMxWF9SRUdfSElaX0RJRkZfODExX1NUQVRFOworCQljbW9z X24tPmJpdCA9IHNsb3QgLSA4ICsgU0lUOTUzMVhfSElaX1NFTl84MTFfU0hJRlQ7CiAJfQorfQog Ci0JcmV0dXJuIE5VTEw7CisvKgorICogc2l0OTUzMXhfb3V0cHV0X21vZGVfZmV0Y2ggLSByZWFk IGhvdyBhbiBvdXRwdXQgaXMgd2lyZWQKKyAqCisgKiBUaGUgSGktWiBmb3JjZSBpcyBhIHNlcGFy YXRlIHJlZ2lzdGVyIHBhaXIgZm9yIHRoZSBkaWZmZXJlbnRpYWwgcGF0aAorICogYW5kIGZvciBl YWNoIENNT1MgcGFkLCBhbmQgb25seSB0aGUgcGFpcnMgYmVsb25naW5nIHRvIHRoZSB3YXkgdGhl CisgKiBvdXRwdXQgaXMgYWN0dWFsbHkgd2lyZWQgc2F5IGFueXRoaW5nIGFib3V0IHdoZXRoZXIg aXQgaXMgcXVpZXQuICBUaGUKKyAqIG90aGVycyBob2xkIHdoYXRldmVyIHRoZSBsb2FkZWQgY29u ZmlndXJhdGlvbiBsZWZ0IGluIHRoZW0uCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCBzaXRkZXYt Pm11bHRpb3BfbG9jay4KKyAqLworc3RhdGljIGludCBzaXQ5NTMxeF9vdXRwdXRfbW9kZV9mZXRj aChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4IG91dF9pZHgpCit7CisJY29uc3Qgc3Ry dWN0IHNpdDk1MzF4X2NoaXBfaW5mbyAqaW5mbyA9IHNpdGRldi0+aW5mbzsKKwl1OCBzbG90LCBw YWdlLCByZWcsIHZhbDsKKwlpbnQgcmM7CisKKwlzbG90ID0gaW5mby0+Y2xrb3V0X21hcFtvdXRf aWR4XTsKKwlwYWdlID0gKHNsb3QgPiBTSVQ5NTMxWF9QQUdFX09VVFNZUzBfU0xPVF9NQVgpID8K KwkJU0lUOTUzMVhfUEFHRV9PVVRTWVMxIDogU0lUOTUzMVhfUEFHRV9PVVRTWVMwOworCXJlZyA9 IFNJVDk1MzFYX09VVF9NSVNDMF9CQVNFICsKKwkgICAgICBTSVQ5NTMxWF9PVVRfTUlTQzBfU1RS SURFICogKHNsb3QgJSA2KTsKKworCXJjID0gc2l0OTUzMXhfcmVhZF91OChzaXRkZXYsIFNJVDk1 MzFYX1JFRyhwYWdlLCByZWcpLCAmdmFsKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXNp dGRldi0+b3V0W291dF9pZHhdLmNtb3MgPSAhISh2YWwgJiAoU0lUOTUzMVhfT1VUX0NNT1NfRU5Q IHwKKwkJCQkJICAgICAgU0lUOTUzMVhfT1VUX0NNT1NfRU5OKSk7CisKKwlyZXR1cm4gMDsKIH0K IAotc3RhdGljIGludCBzaXQ5NTMxeF9kZXZfcHJvYmUoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0 ZGV2KQorc3RhdGljIGludCBzaXQ5NTMxeF9oaXpfcGFpcl9mb3JjZWQoc3RydWN0IHNpdDk1MzF4 X2RldiAqc2l0ZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc2l0OTUzMXhfaGl6X3BhaXIgKnAs CisJCQkJICAgIGJvb2wgKmZvcmNlZCkKIHsKLQlzdHJ1Y3QgY2xrICp4dGFsX2NsazsKLQl1OCB2 YXJpYW50X2lkOworCXU4IG1hc2ssIHN0YXRlOworCWludCByYzsKKworCXJjID0gc2l0OTUzMXhf cmVhZF91OChzaXRkZXYsIHAtPm1hc2ssICZtYXNrKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsK KwlyYyA9IHNpdDk1MzF4X3JlYWRfdTgoc2l0ZGV2LCBwLT5zdGF0ZSwgJnN0YXRlKTsKKwlpZiAo cmMpCisJCXJldHVybiByYzsKKworCSpmb3JjZWQgPSAobWFzayAmIEJJVChwLT5iaXQpKSAmJiAh KHN0YXRlICYgQklUKHAtPmJpdCkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXBvcnQg d2hldGhlciBhIHNsb3QgaXMgY3VycmVudGx5IGZvcmNlZCBpbnRvIEhpLVosIGkuZS4gdGhlIGRy aXZlcgorICogKG9yIHRoZSBsb2FkZWQgcHJvZmlsZSkgdG9vayBjb250cm9sIG9mIHRoZSBwaW4g KE1BU0sgYml0IHNldCkgYW5kCisgKiBmb3JjZXMgaXQgdG8gSGktWiAoU1RBVEUgYml0IGNsZWFy KS4gIE9ubHkgdGhlIHBhaXJzIHRoYXQgbWF0Y2ggaG93CisgKiB0aGUgb3V0cHV0IGlzIHdpcmVk IGFyZSByZWFkOiB0aGF0IGlzIHdoYXQgY29udHJvbHMgdGhlIHBhZC4gIEEgQ01PUworICogb3V0 cHV0IHJlYWRzIGFzIG11dGVkIG9ubHkgd2hlbiBib3RoIG9mIGl0cyBwYWRzIGFyZSBmb3JjZWQs IHNpbmNlCisgKiB3aGljaCBvbmUgdGhlIGNvbmZpZ3VyYXRpb24gZHJpdmVzIGNhbm5vdCBiZSB0 b2xkIChzZWUgYWJvdmUpLgorICovCitzdGF0aWMgaW50IHNpdDk1MzF4X291dHB1dF9mb3JjZWRf aGl6KHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwKKwkJCQkgICAgICB1OCBvdXRfaWR4LCBi b29sICptdXRlZCkKK3sKKwlzdHJ1Y3Qgc2l0OTUzMXhfaGl6X3BhaXIgcFtTSVQ5NTMxWF9ISVpf UEFJUlNdOwogCWludCByYzsKIAorCXNpdDk1MzF4X291dHB1dF9nZXRfaGl6X3JlZ3Moc2l0ZGV2 LT5pbmZvLT5jbGtvdXRfbWFwW291dF9pZHhdLCBwKTsKKwogCS8qCi0JICogRnZjbyA9IEZyZWYg KiAoRElWTiArIGZyYWMvMl4zMikgd2l0aCBGcmVmIGRlcml2ZWQgZnJvbSB0aGUgWE8KLQkgKiBm ZWVkaW5nIFhJTi9YT19DTEssIHNvIHRoZSByYXRlIGlzIG5lZWRlZCBiZWZvcmUgYW55dGhpbmcg Y2FuIGJlCi0JICogY29tcHV0ZWQgZnJvbSBhIGRpdmlkZXIuICBUaGUgcmF0ZSBub3JtYWxseSBj b21lcyBmcm9tIGEgImNsb2NrcyIKLQkgKiBwaGFuZGxlIChjbG9jay1uYW1lcyA9ICJ4dGFsIiku ICBPbiBwbGF0Zm9ybXMgd2hlcmUgdGhlIGZpcm13YXJlCi0JICogZG9lcyBub3QgZXhwb3NlIHRo ZSBYTyB0aHJvdWdoIHRoZSBjbG9jayBmcmFtZXdvcmssIGZhbGwgYmFjayB0bwotCSAqIGEgImNs b2NrLWZyZXF1ZW5jeSIgZGV2aWNlIHByb3BlcnR5LgorCSAqIFRlc3RpbmcgYSBwYWlyIHRoZSBv dXRwdXQgaXMgbm90IHdpcmVkIHRocm91Z2ggYW5kIHRha2luZyBpdCBhcworCSAqIHByb29mIG9m IGEgbXV0ZSBhbnN3ZXJzIGZyb20gYSByZWdpc3RlciBub3RoaW5nIGRyaXZlcywgYW5kCisJICog ZGlzYWdyZWVzIHdpdGggaXRzZWxmIHdoZW4gYSBtdXRlIGxhbmRzIG9uIG9uZSBwYWlyIGFuZCBm YWlscworCSAqIG9uIGFub3RoZXIuCiAJICovCi0JeHRhbF9jbGsgPSBkZXZtX2Nsa19nZXRfb3B0 aW9uYWxfZW5hYmxlZChzaXRkZXYtPmRldiwgInh0YWwiKTsKLQlpZiAoSVNfRVJSKHh0YWxfY2xr KSkKLQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoc2l0ZGV2LT5kZXYsIFBUUl9FUlIoeHRhbF9jbGsp LAotCQkJCSAgICAgIkZhaWxlZCB0byBnZXQgeHRhbCBjbG9ja1xuIik7Ci0Jc2l0ZGV2LT54dGFs X2ZyZXEgPSBjbGtfZ2V0X3JhdGUoeHRhbF9jbGspOwotCWlmICghc2l0ZGV2LT54dGFsX2ZyZXEp IHsKLQkJdTMyIGZyZXE7CisJaWYgKCFzaXRkZXYtPm91dFtvdXRfaWR4XS5jbW9zKQorCQlyZXR1 cm4gc2l0OTUzMXhfaGl6X3BhaXJfZm9yY2VkKHNpdGRldiwKKwkJCQkJCSZwW1NJVDk1MzFYX0hJ Wl9ESUZGXSwgbXV0ZWQpOwogCi0JCWlmICghZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKHNpdGRl di0+ZGV2LCAiY2xvY2stZnJlcXVlbmN5IiwKLQkJCQkJICAgICAgJmZyZXEpKQotCQkJc2l0ZGV2 LT54dGFsX2ZyZXEgPSBmcmVxOworCXJjID0gc2l0OTUzMXhfaGl6X3BhaXJfZm9yY2VkKHNpdGRl diwgJnBbU0lUOTUzMVhfSElaX0NNT1NfUF0sIG11dGVkKTsKKwlpZiAocmMgfHwgISptdXRlZCkK KwkJcmV0dXJuIHJjOworCisJcmV0dXJuIHNpdDk1MzF4X2hpel9wYWlyX2ZvcmNlZChzaXRkZXYs ICZwW1NJVDk1MzFYX0hJWl9DTU9TX05dLAorCQkJCQltdXRlZCk7Cit9CisKKy8qCisgKiBJbnB1 dCBwcmlvcml0eSBzZWxlY3Rpb24KKyAqCisgKiBUaGUgU2lUOTUzMXggaGFzIGFuIDExLXNsb3Qg cHJpb3JpdHkgdGFibGUgcGVyIFBMTCBvbiBQYWdlIDEuICBFYWNoCisgKiByZWdpc3RlciBob2xk cyB0d28gc2xvdHMgbmliYmxlLXBhY2tlZDogdGhlIGVhcmxpZXIgKGV2ZW4sIDJuKSBzbG90Cisg KiBpbiBbNzo0XSBhbmQgdGhlIGxhdGVyIChvZGQsIDJuKzEpIHNsb3QgaW4gWzM6MF0uCisgKgor ICogVGhlIHByb2NlZHVyZToKKyAqICAgMS4gRm9yY2UgUExMIGludG8gaG9sZG92ZXIgKFBMTCBw YWdlIHJlZyAweDZGIGJpdCA0KQorICogICAyLiBXcml0ZSBwcmlvcml0eSBzbG90cyBvbiBQYWdl IDEKKyAqICAgMy4gU21hbGwgY2hhbmdlIHVwZGF0ZSAoUGFnZSAwIHJlZyAweDBGIGJpdCAxKQor ICogICA0LiBSZWxlYXNlIGhvbGRvdmVyCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCBzaXRkZXYt Pm11bHRpb3BfbG9jay4KKyAqLworCisvKiBQYWdlLTEgcmVnaXN0ZXIgaG9sZGluZyBwcmlvcml0 eSBzbG90IEBzbG90IG9mIEBwbGxfaWR4LiAqLworc3RhdGljIHUxNiBzaXQ5NTMxeF9wcmlvX3Jl Zyh1OCBwbGxfaWR4LCB1OCBzbG90KQoreworCXJldHVybiBTSVQ5NTMxWF9SRUcoU0lUOTUzMVhf UEFHRV9QUklPU1lTLAorCQkJICAgIFNJVDk1MzFYX1BSSU9fQkFTRV9SRUcgKworCQkJICAgIFNJ VDk1MzFYX1BSSU9fUkVHU19QRVJfUExMICogcGxsX2lkeCArCisJCQkgICAgc2xvdCAvIFNJVDk1 MzFYX1BSSU9fU0xPVFNfUEVSX1JFRyk7Cit9CisKKy8qCisgKiBFeHRyYWN0IHByaW9yaXR5IHNs b3QgQHNsb3QgZnJvbSBpdHMgcmVnaXN0ZXIgdmFsdWUuICBUaGUgcmVnaXN0ZXIKKyAqIGhvbGRp bmcgc2xvdHMgMm4gYW5kIDJuKzEga2VlcHMgdGhlIGVhcmxpZXIgc2xvdCBpbiB0aGUgaGlnaCBu aWJibGUKKyAqIChDTEtfU1BBUkU8Mm4+U0VMKSBhbmQgdGhlIGxhdGVyIG9uZSBpbiB0aGUgbG93 IG5pYmJsZS4KKyAqLworc3RhdGljIHU4IHNpdDk1MzF4X3ByaW9fc2xvdF9nZXQodTggdmFsLCB1 OCBzbG90KQoreworCWlmIChzbG90ICYgMSkKKwkJcmV0dXJuIHZhbCAmIFNJVDk1MzFYX1BSSU9f TklCQkxFX01BU0s7CisKKwlyZXR1cm4gdmFsID4+IFNJVDk1MzFYX1BSSU9fSElfU0hJRlQ7Cit9 CisKKy8qCisgKiBSZWJ1aWxkIGEgUExMJ3MgbWVtYmVyc2hpcCBtYXNrIGZyb20gdGhlIHNvdXJj ZSBjb2RlcyBvZiBpdHMgcHJpb3JpdHkKKyAqIHRhYmxlLiAgVGhlIG1hc2sgaXMgd2hhdCB0aGUg cGluIHN0YXRlIGdldHRlcnMgdGVzdCwgc28gaXQgaXMgcmVmcmVzaGVkCisgKiBmcm9tIGV4YWN0 bHkgdGhlIHZhbHVlcyB0aGUgdGFibGUgaG9sZHMgLS0gaGVyZSBhZnRlciBhIHdyaXRlLCBhbmQg b25jZQorICogcGVyIHBvbGwgZnJvbSB0aGUgcmVhZC1iYWNrIGluIHNpdDk1MzF4X2NoYW5fc3Rh dGVfZmV0Y2goKS4KKyAqLworc3RhdGljIHZvaWQgc2l0OTUzMXhfcHJpb19tYXNrX2J1aWxkKHN0 cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggcGxsX2lkeCwKKwkJCQkgICAgIGNvbnN0IHU4 ICpzcmNzKQoreworCXUxNiBtYXNrID0gMDsKKwl1OCBzbG90OworCisJZm9yIChzbG90ID0gMDsg c2xvdCA8IFNJVDk1MzFYX1BSSU9fTUFYX1NMT1RTOyBzbG90KyspIHsKKwkJdTggc3JjID0gc3Jj c1tzbG90XSAmIFNJVDk1MzFYX1BSSU9fTklCQkxFX01BU0s7CisKKwkJaWYgKHNpdDk1MzF4X3By aW9fc3JjX3VzYWJsZShzcmMpKQorCQkJbWFzayB8PSBCSVQoc3JjKTsKIAl9Ci0JaWYgKCFzaXRk ZXYtPnh0YWxfZnJlcSkKLQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoc2l0ZGV2LT5kZXYsIC1FSU5W QUwsCi0JCQkJICAgICAibm8geHRhbCByYXRlOiBwcm92aWRlIGNsb2Nrcz08JnhvPiArIGNsb2Nr LW5hbWVzPVwieHRhbFwiLCBvciBhIGNsb2NrLWZyZXF1ZW5jeSBwcm9wZXJ0eVxuIik7CisKKwlz aXRkZXYtPmNoYW5bcGxsX2lkeF0ucHJpb19tYXNrID0gbWFzazsKK30KKworLyoKKyAqIHNpdDk1 MzF4X3ByaW9fdGFibGVfcmVhZCAtIHJlYWQgYSBQTEwncyBwcmlvcml0eS10YWJsZSBzb3VyY2Ug Y29kZXMKKyAqIEBzcmNzOglvdXRwdXQgYXJyYXkgb2YgU0lUOTUzMVhfUFJJT19NQVhfU0xPVFMg c291cmNlIGNvZGVzCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCBzaXRkZXYtPm11bHRpb3BfbG9j ay4KKyAqLworc3RhdGljIGludCBzaXQ5NTMxeF9wcmlvX3RhYmxlX3JlYWQoc3RydWN0IHNpdDk1 MzF4X2RldiAqc2l0ZGV2LCB1OCBwbGxfaWR4LAorCQkJCSAgICB1OCAqc3JjcykKK3sKKwl1OCB2 YWwsIHNsb3Q7CisJaW50IHJjOworCisJZm9yIChzbG90ID0gMDsgc2xvdCA8IFNJVDk1MzFYX1BS SU9fTUFYX1NMT1RTOyBzbG90KyspIHsKKwkJcmMgPSBzaXQ5NTMxeF9yZWFkX3U4KHNpdGRldiwK KwkJCQkgICAgICBzaXQ5NTMxeF9wcmlvX3JlZyhwbGxfaWR4LCBzbG90KSwgJnZhbCk7CisJCWlm IChyYykKKwkJCXJldHVybiByYzsKKworCQlzcmNzW3Nsb3RdID0gc2l0OTUzMXhfcHJpb19zbG90 X2dldCh2YWwsIHNsb3QpOworCX0KKworCXJldHVybiAwOworfQorCisvKiBYTyBkb3VibGVyIHJl Z2lzdGVyICovCisjZGVmaW5lIFNJVDk1MzFYX1JFR19YTzJfR0VORVJJQwkJU0lUOTUzMVhfUkVH KDB4MDAsIDB4MkQpCisjZGVmaW5lIFNJVDk1MzFYX1hPX0RPVUJMRVJfRU5CX0JJVAkJNyAgIC8q IGludmVydGVkOiAwID0gZW5hYmxlZCAqLworCisvKiBWQ08gZnJlcXVlbmN5IGJhbmRzIChIeikg Ki8KKyNkZWZpbmUgU0lUOTUzMVhfRlZDT19MT1dCQU5EX01JTgkJNDkxNTIwMDAwMFVMTAorI2Rl ZmluZSBTSVQ5NTMxWF9GVkNPX0xPV0JBTkRfTUFYCQk1ODk4MjQwMDAwVUxMCisjZGVmaW5lIFNJ VDk1MzFYX0ZWQ09fSElHSEJBTkRfTUlOCQk2ODc1MDAwMDAwVUxMCisjZGVmaW5lIFNJVDk1MzFY X0ZWQ09fSElHSEJBTkRfTUFYCQk3ODEyNTAwMDAwVUxMCisKKy8qIFRoZSBvdXRwdXQgZGl2aWRl ciBpcyBhIDM0LWJpdCBmaWVsZCAqLworI2RlZmluZSBTSVQ5NTMxWF9ESVZPX01BWAkJCUdFTk1B U0tfVUxMKDMzLCAwKQorCisvKgorICogUGhhc2UgYWRqdXN0IChQUkdfUlNUX0RFTEFZIHJlZ2lz dGVyLWJhc2VkKS4KKyAqCisgKiBUaGUgY2hpcCBleHBvc2VzIGEgcGVyLW91dHB1dCAzNC1iaXQg Y29hcnNlIGRlbGF5IG1lYXN1cmVkIGluIFZDTworICogY2xvY2sgcGVyaW9kcyBwbHVzIGEgMy1i aXQgZmluZSBkZWxheSBpbiBmaXhlZCAzMCBwcyBzdGVwcy4gIFRoZQorICogZml2ZSBieXRlcyBQ Uk9HNi4uUFJPRzIgaG9sZCB0aGUgZmllbGQgYWNyb3NzIHJlZ2lzdGVyczoKKyAqICAgYmFzZSAr IDAgIFBST0c2ICBbNzo1XSBPUFNUR19WQ0FTQ19CVU1QIChwcmVzZXJ2ZWQgdmlhIFJNVykKKyAq ICAgICAgICAgICAgICAgICAgICBbNDoyXSBQUkdfUlNUX0ZJTkVfREVMQVkKKyAqICAgICAgICAg ICAgICAgICAgICBbMTowXSBQUkdfUlNUX0RFTEFZWzMzOjMyXQorICogICBiYXNlICsgMSAgUFJP RzUgIFBSR19SU1RfREVMQVlbMzE6MjRdCisgKiAgIGJhc2UgKyAyICBQUk9HNCAgUFJHX1JTVF9E RUxBWVsyMzoxNl0KKyAqICAgYmFzZSArIDMgIFBST0czICBQUkdfUlNUX0RFTEFZWzE1OjhdCisg KiAgIGJhc2UgKyA0ICBQUk9HMiAgUFJHX1JTVF9ERUxBWVs3OjBdCisgKgorICogT3V0cHV0cyAw LTUgbGl2ZSBvbiBQYWdlIDMsIG91dHB1dHMgNi0xMSBvbiBQYWdlIDQsIHdpdGggZWFjaAorICog b3V0cHV0J3MgYmxvY2sgYXQgYmFzZSA9IDB4MTUgKyAxNiAqIChvdXRfaWR4ICUgNikuCisgKgor ICogVGhlIGNoaXAgb25seSBzdXBwb3J0cyB1bnNpZ25lZCBwb3NpdGl2ZSBkZWxheS4gIEEgbmVn YXRpdmUgcGhhc2UKKyAqIGFkanVzdG1lbnQgKGFkdmFuY2UpIGlzIHdyYXBwZWQgdG8gKFRfb3V0 IC0gfHBoYXNlfCkgbW9kdWxvIG9uZQorICogb3V0cHV0IHBlcmlvZCwgd2hpY2ggaXMgaWRlbnRp Y2FsIGZvciBhIHBlcmlvZGljIHNpZ25hbC4KKyAqLworCisvKgorICogc2l0OTUzMXhfY2xlYXJf bm90aWZpY2F0aW9ucyAtIGNsZWFyIGFsbCBub3RpZmljYXRpb24gcmVnaXN0ZXJzCisgKgorICog Q2xlYXJzIGFsbCB3cml0ZS0xLXRvLWNsZWFyIG5vdGlmaWNhdGlvbiByZWdpc3RlcnM6CisgKiAg IC0gUExMIG91dGVyIExPTCBub3RpZmljYXRpb24gKFBhZ2UgMCwgcmVnIDB4MDcpCisgKiAgIC0g UExMIGhvbGRvdmVyIGZyZWV6ZSBub3RpZmljYXRpb24gKFBhZ2UgMCwgcmVnIDB4MEIpCisgKiAg IC0gUExMIGlubmVyIExPTCBub3RpZmljYXRpb24gKFBhZ2UgMCwgcmVnIDB4OTMpCisgKiAgIC0g Q2xvY2sgbW9uaXRvciBYTy9QTEwgbm90aWZpY2F0aW9uIChQYWdlIDAsIHJlZyAweDlFKQorICog ICAtIENsb2NrIGlucHV0IG5vdGlmaWNhdGlvbnMgKFBhZ2UgNiwgcmVncyAweDAzLzB4MDcvMHg5 My8weDk3KQorICoKKyAqIENhbGxlciBtdXN0IGhvbGQgc2l0ZGV2LT5tdWx0aW9wX2xvY2suCisg Ki8KK3N0YXRpYyBpbnQgc2l0OTUzMXhfY2xlYXJfbm90aWZpY2F0aW9ucyhzdHJ1Y3Qgc2l0OTUz MXhfZGV2ICpzaXRkZXYpCit7CisJaW50IHJjOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc2l0 ZGV2LT5tdWx0aW9wX2xvY2spOworCisJLyogUGFnZSAweDAwIFcxQyBub3RpZmljYXRpb24gcmVn aXN0ZXJzICovCisJcmMgPSBzaXQ5NTMxeF93cml0ZV91OChzaXRkZXYsIFNJVDk1MzFYX1JFR19P VVRFUl9MT0xfTk9USUYsIDB4RkYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXJjID0gc2l0 OTUzMXhfd3JpdGVfdTgoc2l0ZGV2LCBTSVQ5NTMxWF9SRUdfSE9fRlJFRVpFX05PVElGLCAweEZG KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IHNpdDk1MzF4X3dyaXRlX3U4KHNpdGRl diwgU0lUOTUzMVhfUkVHX1BMTF9JTk5FUl9MT0xfTk9USUYsIDB4RkYpOworCWlmIChyYykKKwkJ cmV0dXJuIHJjOworCXJjID0gc2l0OTUzMXhfd3JpdGVfdTgoc2l0ZGV2LCBTSVQ5NTMxWF9SRUdf Q01PTl9OT1RJRiwgMHhGRik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKiBQYWdlIDB4 MDYgY2xvY2sgaW5wdXQgbW9uaXRvciBub3RpZmljYXRpb25zICovCisJcmMgPSBzaXQ5NTMxeF93 cml0ZV91OChzaXRkZXYsIFNJVDk1MzFYX0NMS01PTl9QX05PVElGXzAxLCAweEZGKTsKKwlpZiAo cmMpCisJCXJldHVybiByYzsKKwlyYyA9IHNpdDk1MzF4X3dyaXRlX3U4KHNpdGRldiwgU0lUOTUz MVhfQ0xLTU9OX1BfTk9USUZfMjMsIDB4RkYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXJj ID0gc2l0OTUzMXhfd3JpdGVfdTgoc2l0ZGV2LCBTSVQ5NTMxWF9DTEtNT05fTl9OT1RJRl8wMSwg MHhGRik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJcmMgPSBzaXQ5NTMxeF93cml0ZV91OChz aXRkZXYsIFNJVDk1MzFYX0NMS01PTl9OX05PVElGXzIzLCAweEZGKTsKKwlpZiAocmMpCisJCXJl dHVybiByYzsKKworCWRldl9kYmcoc2l0ZGV2LT5kZXYsICJBbGwgbm90aWZpY2F0aW9uIHJlZ2lz dGVycyBjbGVhcmVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNpdDk1MzF4X3JlZl9z dGF0ZV9mZXRjaCAtIHJlYWQgaW5wdXQgcmVmZXJlbmNlIHN0YXR1cyBmcm9tIGhhcmR3YXJlCisg KiBAaW5kZXg6CWxvZ2ljYWwgaW5wdXQgaW5kZXgKKyAqCisgKiBSZWFkcyB3aGV0aGVyIHRoZSBs YW5lJ3MgcmVjZWl2ZXIgaXMgb24sIGZyb20gdGhlIFBhZ2UgMHgwMiBmb3JjZSBhbmQKKyAqIHN0 YXRlIGJpdHMuCisgKi8KK3N0YXRpYyBpbnQgc2l0OTUzMXhfcmVmX3N0YXRlX2ZldGNoKHN0cnVj dCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggaW5kZXgpCit7CisJdW5zaWduZWQgaW50IGZvcmNl X3JlZywgc3RhdGVfcmVnOworCXN0cnVjdCBzaXQ5NTMxeF9yZWYgKnJlZjsKKwl1OCBwYWlyLCBm b3JjZSwgc3RhdGU7CisJaW50IHJjOwogCiAJLyoKLQkgKiBIZWxkIGRlYXNzZXJ0ZWQsIG5ldmVy IHB1bHNlZDogdGhlIGNoaXAgY29uZmlndXJhdGlvbiBjb21lcyBmcm9tCi0JICogZWZ1c2Ugb3Ig YW4gTlZNIGJsb2IgYXBwbGllZCBiZWZvcmUgcHJvYmUsIGFuZCBhIHJlc2V0IHdvdWxkCi0JICog ZGlzY2FyZCBpdC4gIE11c3QgcHJlY2VkZSB0aGUgZmlyc3QgSTJDIGFjY2VzcywgYXMgYSBib2Fy ZCB0aGF0Ci0JICogcG93ZXJzIHVwIGFzc2VydGVkIGtlZXBzIHRoZSBjaGlwIHVucmVhY2hhYmxl IHVudGlsIHJlbGVhc2VkLgorCSAqIFRoZSBYVEFML1hPIHJlZmVyZW5jZSAoaW5kZXggU0lUOTUz MVhfTUFYX0lOUFVUUykgaXMgdGhlIG9uLWNoaXAKKwkgKiBvc2NpbGxhdG9yIHRoYXQgZmVlZHMg ZXZlcnkgUExMLiAgSXQgY2Fubm90IGJlIHJvdXRlZCBvciBkZXNlbGVjdGVkLAorCSAqIHNvIGl0 cyBwaW4gaXMgbW9kZWxlZCBhcyBwZXJtYW5lbnRseSBjb25uZWN0ZWQgKHNlZQorCSAqIHNpdDk1 MzF4X2RwbGxfeG9fcGluX29wcykgYW5kIGhhcyBubyByZWNlaXZlciB0byBnYXRlLiAgT25seSB0 aGUKKwkgKiByb3V0YWJsZSBwZXItbGFuZSBpbnB1dHMgKDAuLm51bV9pbnB1dHMtMSkgYXJlIHBv bGxlZCBoZXJlLgogCSAqLwotCXNpdGRldi0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29w dGlvbmFsKHNpdGRldi0+ZGV2LCAicmVzZXQiLAotCQkJCQkJICAgICBHUElPRF9PVVRfTE9XKTsK LQlpZiAoSVNfRVJSKHNpdGRldi0+cmVzZXRfZ3BpbykpCi0JCXJldHVybiBkZXZfZXJyX3Byb2Jl KHNpdGRldi0+ZGV2LCBQVFJfRVJSKHNpdGRldi0+cmVzZXRfZ3BpbyksCi0JCQkJICAgICAiRmFp bGVkIHRvIHJlcXVlc3QgcmVzZXQgZ3Bpb1xuIik7Ci0JaWYgKHNpdGRldi0+cmVzZXRfZ3BpbykK LQkJZnNsZWVwKDEwMDAwKTsJLyogaW50ZXJuYWwgYm9vdCBhZnRlciByZWxlYXNlICovCisJaWYg KGluZGV4ID49IFNJVDk1MzFYX01BWF9JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOwogCi0JcmMg PSBzaXQ5NTMxeF9yZWFkX3ZhcmlhbnRfaWQoc2l0ZGV2LCAmdmFyaWFudF9pZCk7CisJcmVmID0g JnNpdGRldi0+cmVmW2luZGV4XTsKKwlwYWlyID0gc2l0OTUzMXhfaW5wdXRfcGFpcihpbmRleCk7 CisKKwkvKgorCSAqIFdoZXRoZXIgdGhlIHJlY2VpdmVyIGlzIG9uLiAgVGhpcyBoYXMgdG8gY29t ZSBmcm9tIHRoZSBjaGlwOiBpdAorCSAqIGlzIHRoZSBsb2FkZWQgY29uZmlndXJhdGlvbiB0aGF0 IGRlY2lkZXMsIGFuZCB3aXRob3V0IHJlYWRpbmcgaXQKKwkgKiBiYWNrIGV2ZXJ5IGlucHV0IHdv dWxkIGxvb2sgZGlzYWJsZWQgdW50aWwgc29tZXRoaW5nIGNhbGxlZAorCSAqIHNpdDk1MzF4X2lu cHV0X2VuYWJsZSgpLiAgQSBsYW5lIGNvdW50cyBhcyBkaXNhYmxlZCBvbmx5IHdoaWxlCisJICog dGhlIGZvcmNlIGJpdCBvdmVycmlkZXMgaXQgdG8gdGhlIG9mZiBzdGF0ZTsgd2l0aCB0aGUgZm9y Y2UgYml0CisJICogY2xlYXIgaXQgZm9sbG93cyB0aGUgY29uZmlndXJhdGlvbiwgd2hpY2ggaXMg dGhlIGVuYWJsZWQgY2FzZS4KKwkgKi8KKwlzaXQ5NTMxeF9pbnB1dF9nZXRfcmVncyhzaXRkZXYs IGluZGV4LCAmZm9yY2VfcmVnLCAmc3RhdGVfcmVnKTsKKworCXJjID0gc2l0OTUzMXhfcmVhZF91 OChzaXRkZXYsIGZvcmNlX3JlZywgJmZvcmNlKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwly YyA9IHNpdDk1MzF4X3JlYWRfdTgoc2l0ZGV2LCBzdGF0ZV9yZWcsICZzdGF0ZSk7CiAJaWYgKHJj KQogCQlyZXR1cm4gcmM7CiAKLQlzaXRkZXYtPmluZm8gPSBzaXQ5NTMxeF9tYXRjaF92YXJpYW50 KHZhcmlhbnRfaWQpOwotCWlmICghc2l0ZGV2LT5pbmZvKQotCQlyZXR1cm4gZGV2X2Vycl9wcm9i ZShzaXRkZXYtPmRldiwgLUVOT0RFViwKLQkJCQkgICAgICJVbmtub3duIHZhcmlhbnQgSUQ6IDB4 JTAyeFxuIiwKLQkJCQkgICAgIHZhcmlhbnRfaWQpOworCXJlZi0+ZW5hYmxlZCA9ICEoKGZvcmNl ICYgQklUKHBhaXIpKSAmJiAhKHN0YXRlICYgQklUKHBhaXIpKSk7CiAKLQlyYyA9IGRldm1fbXV0 ZXhfaW5pdChzaXRkZXYtPmRldiwgJnNpdGRldi0+bXVsdGlvcF9sb2NrKTsKKwlyZXR1cm4gMDsK K30KKworLyoKKyAqIHNpdDk1MzF4X2lucHV0X21vZGVfZmV0Y2ggLSBkZXRlY3QgU0UvREUgY29u ZmlndXJhdGlvbiBvZiBhbiBpbnB1dCBwYWlyCisgKiBAcGFpcjoJaW5wdXQgcGFpciBudW1iZXIg KDAtMykKKyAqCisgKiBSZWFkcyBDTEtJTnhfSU5QVVRfTU9ERSBhbmQgc3RvcmVzIHRoZSBkZXRl Y3RlZCBzaWduYWwgbW9kZSBvbiBib3RoCisgKiBsYW5lcyBvZiB0aGUgcGFpci4gIEEgcGFpciB3 aXRoIG5laXRoZXIgU0UgbGFuZSBlbmFibGVkIGlzIHJ1bm5pbmcKKyAqIGRpZmZlcmVudGlhbC4K KyAqLworc3RhdGljIGludCBzaXQ5NTMxeF9pbnB1dF9tb2RlX2ZldGNoKHN0cnVjdCBzaXQ5NTMx eF9kZXYgKnNpdGRldiwgdTggcGFpcikKK3sKKwllbnVtIHNpdDk1MzF4X3NpZ25hbF9tb2RlIHNp Z19tb2RlOworCXU4IG1vZGU7CisJaW50IHJjOworCisJcmMgPSBzaXQ5NTMxeF9yZWFkX3U4KHNp dGRldiwgU0lUOTUzMVhfUkVHX0lOX01PREUocGFpciksICZtb2RlKTsKIAlpZiAocmMpCi0JCXJl dHVybiBkZXZfZXJyX3Byb2JlKHNpdGRldi0+ZGV2LCByYywKLQkJCQkgICAgICJGYWlsZWQgdG8g aW5pdGlhbGl6ZSBtdXRleFxuIik7CisJCXJldHVybiByYzsKIAotCWRldl9pbmZvKHNpdGRldi0+ ZGV2LCAiJXMgZGV0ZWN0ZWQsICV1IGlucHV0cywgJXUgb3V0cHV0c1xuIiwKLQkJIHNpdGRldi0+ aW5mby0+bmFtZSwgc2l0ZGV2LT5pbmZvLT5udW1faW5wdXRzLAotCQkgc2l0ZGV2LT5pbmZvLT5u dW1fb3V0cHV0cyk7CisJaWYgKG1vZGUgJiAoU0lUOTUzMVhfSU5fTU9ERV9TRV9QX0VOIHwgU0lU OTUzMVhfSU5fTU9ERV9TRV9OX0VOKSkKKwkJc2lnX21vZGUgPSBTSVQ5NTMxWF9NT0RFX1NFOwor CWVsc2UKKwkJc2lnX21vZGUgPSBTSVQ5NTMxWF9NT0RFX0RFOworCisJc2l0ZGV2LT5yZWZbcGFp ciAqIDJdLnNpZ19tb2RlID0gc2lnX21vZGU7CisJc2l0ZGV2LT5yZWZbcGFpciAqIDIgKyAxXS5z aWdfbW9kZSA9IHNpZ19tb2RlOworCisJZGV2X2RiZyhzaXRkZXYtPmRldiwgIkNMS0lOJXUgbW9k ZSByZWcgMHglMDJ4IC0+ICVzXG4iLCBwYWlyLCBtb2RlLAorCQlzaWdfbW9kZSA9PSBTSVQ5NTMx WF9NT0RFX0RFID8gImRpZmZlcmVudGlhbCIgOiAic2luZ2xlLWVuZGVkIik7CiAKIAlyZXR1cm4g MDsKIH0KIAotc3RhdGljIGludCBzaXQ5NTMxeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQg KmNsaWVudCkKKy8qIFJlYWQgdGhlIFBMTCBhY3RpdmUtc3RhdGUgYml0IChQTEwgcGFnZSByZWcg MHgwMiBiaXQgMCkuICovCitzdGF0aWMgaW50IHNpdDk1MzF4X3BsbF9pc19hY3RpdmUoc3RydWN0 IHNpdDk1MzF4X2RldiAqc2l0ZGV2LCB1OCBwbGxfaWR4LAorCQkJCSAgYm9vbCAqYWN0aXZlKQog ewotCXN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldjsKLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7 CisJaW50IHJjOworCXU4IHY7CiAKLQlyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGll bnQsICZzaXQ5NTMxeF9yZWdtYXBfY29uZmlnKTsKLQlpZiAoSVNfRVJSKHJlZ21hcCkpCi0JCXJl dHVybiBkZXZfZXJyX3Byb2JlKCZjbGllbnQtPmRldiwgUFRSX0VSUihyZWdtYXApLAotCQkJCSAg ICAgIkZhaWxlZCB0byBpbml0aWFsaXplIHJlZ21hcFxuIik7CisJcmMgPSBzaXQ5NTMxeF9yZWFk X3BsbF91OChzaXRkZXYsIHBsbF9pZHgsIFNJVDk1MzFYX1BMTF9SRUdfQUNUSVZFLCAmdik7CisJ aWYgKHJjKQorCQlyZXR1cm4gcmM7CiAKLQlzaXRkZXYgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ ZGV2LCBzaXplb2YoKnNpdGRldiksIEdGUF9LRVJORUwpOwotCWlmICghc2l0ZGV2KQotCQlyZXR1 cm4gLUVOT01FTTsKKwkqYWN0aXZlID0gISEodiAmIFNJVDk1MzFYX1BMTF9BQ1RJVkVfQklUKTsK IAotCXNpdGRldi0+ZGV2ID0gJmNsaWVudC0+ZGV2OwotCXNpdGRldi0+Y2xpZW50ID0gY2xpZW50 OwotCXNpdGRldi0+cmVnbWFwID0gcmVnbWFwOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQs IHNpdGRldik7CisJcmV0dXJuIDA7Cit9CiAKLQlyZXR1cm4gc2l0OTUzMXhfZGV2X3Byb2JlKHNp dGRldik7CisvKgorICogc2l0OTUzMXhfY2hhbl9zdGF0ZV9mZXRjaCAtIHJlYWQgUExMIGNoYW5u ZWwgc3RhdHVzIGZyb20gaGFyZHdhcmUKKyAqCisgKiBSZWFkcyB3aGV0aGVyIHRoZSBQTEwgcnVu cywgaXRzIGxvY2sgYW5kIGhvbGRvdmVyIHN0YXRlLCBpdHMgbW9kZSwgdGhlCisgKiBhY3RpdmUg c2VsZWN0aW9uIGFuZCBpdHMgcHJpb3JpdHkgdGFibGUuCisgKi8KK3N0YXRpYyBpbnQgc2l0OTUz MXhfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4IHBsbF9p ZHgpCit7CisJdTggc3RhdHVzLCBvdXRlcl9sb2wsIGlucHV0X3NlbCwgaW5uZXJfbG9sLCBob19m cmVlemUsIGFjdGl2ZXNlbF9yZWc7CisJc3RydWN0IHNpdDk1MzF4X2NoYW4gKmNoYW4gPSAmc2l0 ZGV2LT5jaGFuW3BsbF9pZHhdOworCXU4IHNyY3NbU0lUOTUzMVhfUFJJT19NQVhfU0xPVFNdOwor CXU4IHBsbF9zdGF0dXNfMTsKKwlib29sIGFjdGl2ZTsKKwlpbnQgcmM7CisKKwkvKgorCSAqIFdo ZXRoZXIgdGhlIFBMTCBpcyBydW5uaW5nIGF0IGFsbC4gIFRoZSBsb3NzLW9mLWxvY2sgYml0IHJl YWQKKwkgKiBiZWxvdyBpcyBkcml2ZW4gYnkgdGhlIFBMTCBpdHNlbGYsIHNvIG9uIG9uZSB0aGUg bG9hZGVkCisJICogY29uZmlndXJhdGlvbiBsZWF2ZXMgdW51c2VkIGl0IHNpbXBseSBzdGF5cyBj bGVhciBhbmQgd291bGQKKwkgKiBvdGhlcndpc2UgcmVhZCBhcyBhIGxvY2suCisJICovCisJcmMg PSBzaXQ5NTMxeF9wbGxfaXNfYWN0aXZlKHNpdGRldiwgcGxsX2lkeCwgJmFjdGl2ZSk7CisJaWYg KHJjKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHNpdDk1MzF4X3JlYWRfcGxsX3U4KHNpdGRldiwg cGxsX2lkeCwKKwkJCQkgIFNJVDk1MzFYX1BMTF9SRUdfU1RBVFVTLCAmc3RhdHVzKTsKKwlpZiAo cmMpCisJCXJldHVybiByYzsKKworCXJjID0gc2l0OTUzMXhfcmVhZF91OChzaXRkZXYsIFNJVDk1 MzFYX1JFR19PVVRFUl9MT0xfU1RBVFVTLAorCQkJICAgICAgJm91dGVyX2xvbCk7CisJaWYgKHJj KQorCQlyZXR1cm4gcmM7CisKKwkvKgorCSAqIFJlYWQgdGhlIGlucHV0IHNvdXJjZSB0aGUgUExM IGhhcyBjdXJyZW50bHkgc2VsZWN0ZWQgYXMgaXRzCisJICogYWN0aXZlIHJlZmVyZW5jZS4gIFRo aXMgbGl2ZXMgaW4gdGhlIGxvdyBuaWJibGUgb2YgdGhlIGxhc3QKKwkgKiByZWdpc3RlciBvZiB0 aGUgUExMJ3MgcGFnZS0xIHByaW9yaXR5IGJsb2NrIChDTEtfQUNUSVZFU0VMX1BMTCksCisJICog bm90IG9uIHRoZSBQTEwgcGFnZSAtLSBQTEwtcGFnZSAweDI5IGlzIGEgY29uZmlnIHJlZ2lzdGVy LgorCSAqLworCWFjdGl2ZXNlbF9yZWcgPSBTSVQ5NTMxWF9QUklPX0JBU0VfUkVHICsKKwkJCVNJ VDk1MzFYX1BSSU9fUkVHU19QRVJfUExMICogcGxsX2lkeCArCisJCQlTSVQ5NTMxWF9QUklPX0FD VElWRVNFTF9PRkY7CisJcmMgPSBzaXQ5NTMxeF9yZWFkX3U4KHNpdGRldiwKKwkJCSAgICAgIFNJ VDk1MzFYX1JFRyhTSVQ5NTMxWF9QQUdFX1BSSU9TWVMsCisJCQkJCSAgIGFjdGl2ZXNlbF9yZWcp LAorCQkJICAgICAgJmlucHV0X3NlbCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9 IHNpdDk1MzF4X3JlYWRfdTgoc2l0ZGV2LCBTSVQ5NTMxWF9SRUdfUExMX0lOTkVSX0xPTF9TVEFU VVMsCisJCQkgICAgICAmaW5uZXJfbG9sKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJj ID0gc2l0OTUzMXhfcmVhZF91OChzaXRkZXYsIFNJVDk1MzFYX1JFR19IT19GUkVFWkVfU1RBVFVT LAorCQkJICAgICAgJmhvX2ZyZWV6ZSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9 IHNpdDk1MzF4X3JlYWRfcGxsX3U4KHNpdGRldiwgcGxsX2lkeCwgU0lUOTUzMVhfUExMX1JFR19T VEFUVVNfMSwKKwkJCQkgICZwbGxfc3RhdHVzXzEpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwor CisJLyoKKwkgKiBXaGljaCBzb3VyY2VzIHRoaXMgUExMIG1heSBzZWxlY3QuICBUaGUgdGFibGUg aXMgY29uZmlndXJhdGlvbiBhbmQKKwkgKiBjaGFuZ2VzIG9ubHkgdGhyb3VnaCB0aGUgZHJpdmVy LCBidXQgcmVhZGluZyBpdCBiYWNrIGtlZXBzIHRoZQorCSAqIG1lbWJlcnNoaXAgdGhlIHBpbiBz dGF0ZSBnZXR0ZXJzIHJlcG9ydCB0aWVkIHRvIHRoZSBoYXJkd2FyZQorCSAqIGluc3RlYWQgb2Yg dG8gYSB2YWx1ZSB0aGUgZHJpdmVyIG1haW50YWlucyBvbiB0aGUgc2lkZS4KKwkgKi8KKwlyYyA9 IHNpdDk1MzF4X3ByaW9fdGFibGVfcmVhZChzaXRkZXYsIHBsbF9pZHgsIHNyY3MpOworCWlmIChy YykKKwkJcmV0dXJuIHJjOworCisJc2l0OTUzMXhfcHJpb19tYXNrX2J1aWxkKHNpdGRldiwgcGxs X2lkeCwgc3Jjcyk7CisKKwkvKiBTVEFUVVNfMV9HRU5FUklDIHJlcG9ydHMgbG9zcyBvZiBsb2Nr LCBzbyBpbnZlcnQgaXQuICovCisJY2hhbi0+YWN0aXZlID0gYWN0aXZlOworCWNoYW4tPmxvY2tl ZCA9IGFjdGl2ZSAmJiAhKG91dGVyX2xvbCAmIEJJVChwbGxfaWR4KSk7CisJY2hhbi0+bW9kZSA9 ICEhKHN0YXR1cyAmIFNJVDk1MzFYX1BMTF9TVEFUVVNfT1VURVJfRElTKTsKKwljaGFuLT5zZWxl Y3RlZF9yZWYgPQorCQlzaXQ5NTMxeF9od19zcmNfaW5wdXQoaW5wdXRfc2VsICYgU0lUOTUzMVhf UFJJT19OSUJCTEVfTUFTSyk7CisJY2hhbi0+aW5uZXJfbG9sID0gISEoaW5uZXJfbG9sICYgQklU KHBsbF9pZHgpKTsKKwljaGFuLT5ob19mcmVlemUgPSAhIShob19mcmVlemUgJiBCSVQocGxsX2lk eCkpOworCWNoYW4tPmhvX3ZhbGlkID0gISEocGxsX3N0YXR1c18xICYgU0lUOTUzMVhfUExMX1NU QVRVU18xX0hPX1ZBTElEKTsKKworCXJldHVybiAwOworfQorCisvKgorICogc2l0OTUzMXhfb3V0 X3N0YXRlX2ZldGNoIC0gcmVhZCBvdXRwdXQgc3RhdHVzIGZyb20gaGFyZHdhcmUKKyAqCisgKiBU YWtlcyB0aGUgb3V0cHV0IFBMTCBhc3NvY2lhdGlvbiBmcm9tIHRoZSBQTEwgcGFnZSBvdXRwdXQg bWFwCisgKiByZWdpc3RlcnMgaW50byBvdXQtPnJvdXRlZCAvIG91dC0+cGxsX2lkeCwgYW5kIHRo ZSBjdXJyZW50IGRyaXZlIHN0YXRlCisgKiBmcm9tIHRoZSBIaS1aIGZvcmNlIGJpdHMgaW50byBv dXQtPmVuYWJsZWQuICBUaGUgdHdvIGFyZSBzZXBhcmF0ZToKKyAqIHJvdXRpbmcgZGVjaWRlcyB3 aGV0aGVyIHRoZSBvdXRwdXQgZ2V0cyBhIERQTEwgcGluIGF0IGFsbCwKKyAqIHdoaWxlIGEgbXV0 ZWQgYnV0IHJvdXRlZCBvdXRwdXQga2VlcHMgaXRzIHBpbiBhbmQgcmVwb3J0cworICogRFBMTF9Q SU5fU1RBVEVfRElTQ09OTkVDVEVEIHVudGlsIGl0IGlzIHVuLW11dGVkLgorICovCitzdGF0aWMg aW50IHNpdDk1MzF4X291dF9zdGF0ZV9mZXRjaChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYs IHU4IGluZGV4KQoreworCXN0cnVjdCBzaXQ5NTMxeF9vdXQgKm91dCA9ICZzaXRkZXYtPm91dFtp bmRleF07CisJdTggbWFwX2xvLCBtYXBfaGksIHNsb3QsIGJpdCwgY2xhaW1lZDsKKwlpbnQgcGxs X2lkeDsKKwlib29sIG11dGVkOworCXUxNiBtYXNrOworCWludCByYzsKKworCXNsb3QgPSBzaXRk ZXYtPmluZm8tPmNsa291dF9tYXBbaW5kZXhdOworCisJcmMgPSBzaXQ5NTMxeF9vdXRwdXRfbW9k ZV9mZXRjaChzaXRkZXYsIGluZGV4KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0g c2l0OTUzMXhfb3V0cHV0X2ZvcmNlZF9oaXooc2l0ZGV2LCBpbmRleCwgJm11dGVkKTsKKwlpZiAo cmMpCisJCXJldHVybiByYzsKKworCS8qCisJICogRWFjaCBQTEwgcGFnZSBob2xkcyB0aGUgUExM J3Mgb3V0cHV0LWVuYWJsZSBtYXNrLCB0d2VsdmUgYml0czoKKwkgKiBiaXRzIDAtNyBpbiBPVVRf TUFQX0xPIGFuZCBiaXRzIDgtMTEgaW4gT1VUX01BUF9ISVszOjBdLiAgUExMQSBhbmQKKwkgKiBQ TExCIGtlZXAgT1VUbiBhdCBiaXQgbjsgUExMQyBhbmQgUExMRCBrZWVwIHRoZSBvdXRwdXRzIGlu IG1pcnJvcmVkCisJICogb3JkZXIsIE9VVG4gYXQgYml0IDExIC0gbiwgYXMgU2lUaW1lJ3MgcHJv Y2VkdXJlIHNjcmlwdHMgcmVhZAorCSAqIHRoZW0uICBUaGUgaW5kZXggaXMgdGhlIHBoeXNpY2Fs IG91dHB1dCB0aGUgcGluIGRyaXZlcywgbm90CisJICogdGhlIGRyaXZlcidzIGxvZ2ljYWwgb25l ICh0cmFuc2xhdGVkIGFib3ZlIHZpYSB0aGUgY2hpcC1pbmZvCisJICogY2xrb3V0X21hcFtdOiBp ZGVudGl0eSBvbiBTaVQ5NTMxNiwgbm9uLWNvbnRpZ3VvdXMgb24gU2lUOTUzMTcpLgorCSAqCisJ ICogQW4gb3V0cHV0IGJlbG9uZ3MgdG8gb25lIFBMTC4gIFRha2UgdGhlIGZpcnN0IHRoYXQgY2xh aW1zIGl0LCBhbmQKKwkgKiBzYXkgc28gaWYgYW5vdGhlciBkb2VzIHRvby4KKwkgKi8KKwljbGFp bWVkID0gMDsKKwlmb3IgKHBsbF9pZHggPSAwOyBwbGxfaWR4IDwgU0lUOTUzMVhfTlVNX1BMTFM7 IHBsbF9pZHgrKykgeworCQlyYyA9IHNpdDk1MzF4X3JlYWRfcGxsX3U4KHNpdGRldiwgcGxsX2lk eCwKKwkJCQkJICBTSVQ5NTMxWF9QTExfUkVHX09VVF9NQVBfTE8sICZtYXBfbG8pOworCQlpZiAo cmMpCisJCQlyZXR1cm4gcmM7CisKKwkJcmMgPSBzaXQ5NTMxeF9yZWFkX3BsbF91OChzaXRkZXYs IHBsbF9pZHgsCisJCQkJCSAgU0lUOTUzMVhfUExMX1JFR19PVVRfTUFQX0hJLCAmbWFwX2hpKTsK KwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCisJCW1hc2sgPSBtYXBfbG8gfCAobWFwX2hpICYg R0VOTUFTSygzLCAwKSkgPDwgODsKKwkJYml0ID0gcGxsX2lkeCA8IDIgPyBzbG90IDogU0lUOTUz MVhfTUFYX09VVFBVVFMgLSAxIC0gc2xvdDsKKwkJaWYgKG1hc2sgJiBCSVQoYml0KSkKKwkJCWNs YWltZWQgfD0gQklUKHBsbF9pZHgpOworCX0KKworCWlmICghY2xhaW1lZCkgeworCQkvKiBPdXRw dXQgbm90IG1hcHBlZCB0byBhbnkgUExMICovCisJCW91dC0+cGxsX2lkeCA9IDA7CisJCW91dC0+ cm91dGVkID0gZmFsc2U7CisJCW91dC0+ZW5hYmxlZCA9IGZhbHNlOworCQlyZXR1cm4gMDsKKwl9 CisKKwlvdXQtPnBsbF9pZHggPSBfX2ZmcyhjbGFpbWVkKTsKKwlvdXQtPnJvdXRlZCA9IHRydWU7 CisJb3V0LT5lbmFibGVkID0gIW11dGVkOworCisJaWYgKGNsYWltZWQgJiAoY2xhaW1lZCAtIDEp KQorCQlkZXZfd2FybihzaXRkZXYtPmRldiwKKwkJCSAiT1VUJXUgaXMgaW4gdGhlIG91dHB1dC1l bmFibGUgbWFzayBvZiBtb3JlIHRoYW4gb25lIFBMTCAoMHgleCk7IHRha2luZyBQTEwlY1xuIiwK KwkJCSBzbG90LCBjbGFpbWVkLCAnQScgKyBvdXQtPnBsbF9pZHgpOworCisJcmV0dXJuIDA7Cit9 CisKKy8qCisgKiBzaXQ5NTMxeF9yZWZfcGxsX21hc2tfZmV0Y2ggLSBzZWVkIHRoZSBpbnB1dC10 by1QTEwgdXNhZ2UgbWFza3MKKyAqCisgKiByZWYtPnBsbF9tYXNrIGlzIHRoZSByZWZjb3VudCB0 aGUgZGlzY29ubmVjdCBwYXRoIHVzZXMgdG8gZGVjaWRlIHdoZW4KKyAqIGFuIGlucHV0IHJlY2Vp dmVyIG1heSBiZSBwb3dlcmVkIGRvd246IHRoZSBwaHlzaWNhbCBpbnB1dCBpcyBvbmx5CisgKiBk aXNhYmxlZCBvbmNlIHRoZSBsYXN0IERQTEwgaGFzIHJlbGVhc2VkIGl0LiAgSXQgdGhlcmVmb3Jl IGhhcyB0bworICogc3RhcnQgb3V0IG1hdGNoaW5nIHRoZSBoYXJkd2FyZS4gIFdpdGhvdXQgdGhp cyBwYXNzIGV2ZXJ5IG1hc2sgc3RhcnRzCisgKiBhdCB6ZXJvLCBhbmQgZGlzY29ubmVjdGluZyBh biBpbnB1dCBmcm9tIG9uZSBEUExMIGRyb3BzIHRoZSBtYXNrIHRvCisgKiB6ZXJvIGFuZCBkaXNh YmxlcyBhIHJlY2VpdmVyIHRoZSBvdGhlciBEUExMcyBhcmUgc3RpbGwgbG9ja2VkIHRvLgorICoK KyAqIEFuIGlucHV0IGlzIGNvdW50ZWQgZm9yIGEgUExMIHdoZW4gaXQgYXBwZWFycyBpbiB0aGF0 IFBMTCdzIFBhZ2UtMQorICogcHJpb3JpdHkgdGFibGUsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGNv bmRpdGlvbiB0aGUgY29ubmVjdCBhbmQKKyAqIGRpc2Nvbm5lY3QgY2FsbGJhY2tzIG1haW50YWlu LiAgU291cmNlcyB0aGF0IGFyZSBub3QgcGh5c2ljYWwgaW5wdXRzCisgKiAoT0NYTywgSU5UU1lO QykgYW5kIHJlc2VydmVkIGNvZGVzIGFyZSBza2lwcGVkLgorICoKKyAqIENhbGxlciBtdXN0IGhv bGQgc2l0ZGV2LT5tdWx0aW9wX2xvY2suCisgKi8KK3N0YXRpYyBpbnQgc2l0OTUzMXhfcmVmX3Bs bF9tYXNrX2ZldGNoKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldikKK3sKKwl1OCBzcmNzW1NJ VDk1MzFYX1BSSU9fTUFYX1NMT1RTXTsKKwl1OCBwbGxfaWR4LCBzbG90LCBpbmRleDsKKwlpbnQg cmM7CisKKwlmb3IgKHBsbF9pZHggPSAwOyBwbGxfaWR4IDwgU0lUOTUzMVhfTlVNX1BMTFM7IHBs bF9pZHgrKykgeworCQlyYyA9IHNpdDk1MzF4X3ByaW9fdGFibGVfcmVhZChzaXRkZXYsIHBsbF9p ZHgsIHNyY3MpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisKKwkJZm9yIChzbG90ID0gMDsg c2xvdCA8IFNJVDk1MzFYX1BSSU9fTUFYX1NMT1RTOyBzbG90KyspIHsKKwkJCWluZGV4ID0gc2l0 OTUzMXhfaHdfc3JjX2lucHV0KHNyY3Nbc2xvdF0pOworCQkJaWYgKGluZGV4ID49IHNpdGRldi0+ aW5mby0+bnVtX2lucHV0cykKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIE9uIGEgZGlm ZmVyZW50aWFsbHkgY29uZmlndXJlZCBwYWlyIG9ubHkgdGhlIFAgbGFuZQorCQkJICogaGFzIGEg RFBMTCBwaW4sIHNvIHRoYXQgaXMgdGhlIGxhbmUgdGhlIGNvbm5lY3QgYW5kCisJCQkgKiBkaXNj b25uZWN0IGNhbGxiYWNrcyBhY2NvdW50IGZvci4gIEZvbGQgYW4gTi1sYW5lCisJCQkgKiB0YWJs ZSBlbnRyeSBvbnRvIGl0cyBQIGxhbmUsIG90aGVyd2lzZSB0aGUgY291bnQKKwkJCSAqIHdvdWxk IGxhbmQgb24gYSBsYW5lIG5vdGhpbmcgZXZlciByZWxlYXNlcy4gIFRoZQorCQkJICogc2lnbmFs aW5nIG1vZGUgaXMgYWxyZWFkeSBrbm93biBoZXJlOgorCQkJICogc2l0OTUzMXhfaW5wdXRfbW9k ZV9mZXRjaCgpIHJ1bnMgZmlyc3QuCisJCQkgKi8KKwkJCWlmIChzaXQ5NTMxeF9pbnB1dF9pc19u KGluZGV4KSAmJgorCQkJICAgIHNpdGRldi0+cmVmW2luZGV4XS5zaWdfbW9kZSA9PSBTSVQ5NTMx WF9NT0RFX0RFKQorCQkJCWluZGV4LS07CisKKwkJCXNpdGRldi0+cmVmW2luZGV4XS5wbGxfbWFz ayB8PSBCSVQocGxsX2lkeCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNp dDk1MzF4X2Rldl9zdGF0ZV9mZXRjaCAtIHJlYWQgYWxsIGhhcmR3YXJlIHN0YXRlIGF0IHN0YXJ0 dXAKKyAqCisgKiBDYWxsZWQgb25jZSBkdXJpbmcgcHJvYmUgdG8gcG9wdWxhdGUgdGhlIGluaXRp YWwgc3RhdGUgY2FjaGUuCisgKi8KK3N0YXRpYyBpbnQgc2l0OTUzMXhfZGV2X3N0YXRlX2ZldGNo KHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldikKK3sKKwlpbnQgcmM7CisJdTggaTsKKworCS8q IERldGVjdCBTRS9ERSBjb25maWd1cmF0aW9uIGJlZm9yZSBhbnkgcGVyLWxhbmUgYWNjZXNzICov CisJZm9yIChpID0gMDsgaSA8IHNpdGRldi0+aW5mby0+bnVtX2lucHV0cyAvIDI7IGkrKykgewor CQlyYyA9IHNpdDk1MzF4X2lucHV0X21vZGVfZmV0Y2goc2l0ZGV2LCBpKTsKKwkJaWYgKHJjKSB7 CisJCQlkZXZfZXJyKHNpdGRldi0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gZmV0Y2ggQ0xLSU4ldSBt b2RlOiAlZFxuIiwgaSwgcmMpOworCQkJcmV0dXJuIHJjOworCQl9CisJfQorCisJZm9yIChpID0g MDsgaSA8IHNpdGRldi0+aW5mby0+bnVtX2lucHV0czsgaSsrKSB7CisJCXJjID0gc2l0OTUzMXhf cmVmX3N0YXRlX2ZldGNoKHNpdGRldiwgaSk7CisJCWlmIChyYykgeworCQkJZGV2X2VycihzaXRk ZXYtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGZldGNoIGlucHV0ICV1IHN0YXRlOiAlZFxuIiwgaSwg cmMpOworCQkJcmV0dXJuIHJjOworCQl9CisJfQorCisJLyoKKwkgKiBUaGUgcHJpb3JpdHktdGFi bGUgcmVhZCB3YWxrcyB0aGUgUGFnZS0xIHJlZ2lzdGVycywgc28gaXQgcnVucworCSAqIHdpdGgg bXVsdGlvcF9sb2NrIGhlbGQgbGlrZSBldmVyeSBvdGhlciBtdWx0aS1yZWdpc3RlciBzZXF1ZW5j ZS4KKwkgKiBOb3RoaW5nIGNhbiByYWNlIHdpdGggaXQgaGVyZSAtLSB0aGUgRFBMTHMgYXJlIG5v dCByZWdpc3RlcmVkIGFuZAorCSAqIHRoZSBtb25pdG9yIGlzIG5vdCBydW5uaW5nIHlldCAtLSBi dXQgdGhlIHBhZ2UgaGFuZGxpbmcgc3RheXMKKwkgKiBzZXJpYWxpemVkIHRoZSBzYW1lIHdheSBh cyBhdCBydW50aW1lLgorCSAqLworCW11dGV4X2xvY2soJnNpdGRldi0+bXVsdGlvcF9sb2NrKTsK KwlyYyA9IHNpdDk1MzF4X3JlZl9wbGxfbWFza19mZXRjaChzaXRkZXYpOworCW11dGV4X3VubG9j aygmc2l0ZGV2LT5tdWx0aW9wX2xvY2spOworCWlmIChyYykgeworCQlkZXZfZXJyKHNpdGRldi0+ ZGV2LAorCQkJIkZhaWxlZCB0byBmZXRjaCBpbnB1dCBwcmlvcml0eSB0YWJsZXM6ICVkXG4iLCBy Yyk7CisJCXJldHVybiByYzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l0ZGV2LT5pbmZvLT5u dW1fb3V0cHV0czsgaSsrKSB7CisJCS8qCisJCSAqIE5vdGhpbmcgcnVucyBjb25jdXJyZW50bHkg YmVmb3JlIHJlZ2lzdHJhdGlvbiwgYnV0IHRoZQorCQkgKiBvdXRwdXQgZmV0Y2ggd2Fsa3MgcGFn ZWQgcmVnaXN0ZXJzIHVuZGVyIHRoZSBzYW1lIGNvbnRyYWN0CisJCSAqIGFzIGF0IHJ1bnRpbWUs IHNvIGl0IGhvbGRzIHRoZSBsb2NrIHRoZSBzYW1lIHdheS4KKwkJICovCisJCW11dGV4X2xvY2so JnNpdGRldi0+bXVsdGlvcF9sb2NrKTsKKwkJcmMgPSBzaXQ5NTMxeF9vdXRfc3RhdGVfZmV0Y2go c2l0ZGV2LCBpKTsKKwkJbXV0ZXhfdW5sb2NrKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CisJCWlm IChyYykgeworCQkJZGV2X2VycihzaXRkZXYtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGZldGNoIG91 dHB1dCAldSBzdGF0ZTogJWRcbiIsIGksIHJjKTsKKwkJCXJldHVybiByYzsKKwkJfQorCX0KKwor CS8qCisJICogVGhlIGNoYW5uZWwgZmV0Y2ggd2Fsa3MgdGhlIHByaW9yaXR5IHRhYmxlLCBhIG11 bHRpLXJlZ2lzdGVyCisJICogc2VxdWVuY2UgdGhhdCBleHBlY3RzIHRoZSBsb2NrOyBub3RoaW5n IHJhY2VzIHdpdGggaXQgeWV0LCBidXQgaXQKKwkgKiBpcyBzZXJpYWxpemVkIHRoZSBzYW1lIHdh eSBhcyBhdCBydW50aW1lLgorCSAqLworCW11dGV4X2xvY2soJnNpdGRldi0+bXVsdGlvcF9sb2Nr KTsKKwlmb3IgKGkgPSAwOyBpIDwgU0lUOTUzMVhfTlVNX1BMTFM7IGkrKykgeworCQlyYyA9IHNp dDk1MzF4X2NoYW5fc3RhdGVfZmV0Y2goc2l0ZGV2LCBpKTsKKwkJaWYgKHJjKQorCQkJYnJlYWs7 CisJfQorCW11dGV4X3VubG9jaygmc2l0ZGV2LT5tdWx0aW9wX2xvY2spOworCWlmIChyYykgewor CQlkZXZfZXJyKHNpdGRldi0+ZGV2LCAiRmFpbGVkIHRvIGZldGNoIFBMTCVjIHN0YXRlOiAlZFxu IiwKKwkJCSdBJyArIGksIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiAwOworfQor CitzdGF0aWMgdm9pZCBzaXQ5NTMxeF9kZXZfcmVmX3N0YXRlc191cGRhdGUoc3RydWN0IHNpdDk1 MzF4X2RldiAqc2l0ZGV2KQoreworCWludCBpLCByYzsKKworCWZvciAoaSA9IDA7IGkgPCBzaXRk ZXYtPmluZm8tPm51bV9pbnB1dHM7IGkrKykgeworCQlyYyA9IHNpdDk1MzF4X3JlZl9zdGF0ZV9m ZXRjaChzaXRkZXYsIGkpOworCQlpZiAocmMpCisJCQlkZXZfd2FybihzaXRkZXYtPmRldiwKKwkJ CQkgIkZhaWxlZCB0byBnZXQgUkVGJXUgc3RhdHVzOiAlZFxuIiwgaSwgcmMpOworCX0KK30KKwor c3RhdGljIHZvaWQgc2l0OTUzMXhfZGV2X2NoYW5fc3RhdGVzX3VwZGF0ZShzdHJ1Y3Qgc2l0OTUz MXhfZGV2ICpzaXRkZXYpCit7CisJaW50IGksIHJjOworCisJZm9yIChpID0gMDsgaSA8IFNJVDk1 MzFYX05VTV9QTExTOyBpKyspIHsKKwkJcmMgPSBzaXQ5NTMxeF9jaGFuX3N0YXRlX2ZldGNoKHNp dGRldiwgaSk7CisJCWlmIChyYykKKwkJCWRldl93YXJuKHNpdGRldi0+ZGV2LAorCQkJCSAiRmFp bGVkIHRvIGdldCBQTEwlYyBzdGF0ZTogJWRcbiIsCisJCQkJICdBJyArIGksIHJjKTsKKwl9Cit9 CisKKy8qCisgKiBzaXQ5NTMxeF9kZXZfcGVyaW9kaWNfd29yayAtIHBlcmlvZGljIGhhcmR3YXJl IHN0YXRlIHBvbGxpbmcKKyAqIEB3b3JrOglrdGhyZWFkX3dvcmsgcG9pbnRlcgorICoKKyAqIFBv bGxzIGhhcmR3YXJlIHN0YXRlIGF0IFNJVDk1MzFYX1NUQVRVU19QT0xMX01TIGludGVydmFscy4K KyAqIFVwZGF0ZXMgcmVmZXJlbmNlIGFuZCBjaGFubmVsIHN0YXRlcywgdGhlbiBkZWxlZ2F0ZXMg Y2hhbmdlCisgKiBkZXRlY3Rpb24gdG8gc2l0OTUzMXhfZHBsbF9jaGFuZ2VzX2NoZWNrKCkgZm9y IGVhY2ggcmVnaXN0ZXJlZCBEUExMLgorICovCitzdGF0aWMgdm9pZCBzaXQ5NTMxeF9kZXZfcGVy aW9kaWNfd29yayhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKQoreworCXN0cnVjdCBzaXQ5NTMx eF9kZXYgKnNpdGRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2l0OTUzMXhfZGV2LAor CQkJCQkJICAgd29yay53b3JrKTsKKwlzdHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0ZHBsbDsKKwlp bnQgcmM7CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgY2FjaGVkIHJlZltdL2NoYW5bXSBhcnJheXMg dW5kZXIgbXVsdGlvcF9sb2NrIHNvIHRoZQorCSAqIGZldGNoZXMgYXJlIHNlcmlhbGl6ZWQgYWdh aW5zdCB0aGUgRFBMTCBjYWxsYmFja3MgdGhhdCByZWFkCisJICogdGhlc2UgZmllbGRzIGFuZCBh Z2FpbnN0IHRoZSBjaGlwJ3MgcGFnZSBzZWxlY3Rvci4KKwkgKgorCSAqIFRoZSBsb2NrIGlzIHRo ZW4gZHJvcHBlZCBiZWZvcmUgc2l0OTUzMXhfZHBsbF9jaGFuZ2VzX2NoZWNrKCksCisJICogd2hp Y2ggY2FsbHMgZHBsbF9waW5fY2hhbmdlX250ZigpIC8gZHBsbF9kZXZpY2VfY2hhbmdlX250Zigp LgorCSAqIFRob3NlIG5vdGlmaWNhdGlvbiBoZWxwZXJzIHRha2UgRFBMTC1zdWJzeXN0ZW0gbG9j a3MgdGhhdCBhcmUKKwkgKiBhbHJlYWR5IGhlbGQgd2hlbiBvdXIgY2FsbGJhY2tzIGFyZSBpbnZv a2VkIGZyb20gbmV0bGluaworCSAqIGNvbnRleHQsIGFuZCBuZXN0aW5nIG11bHRpb3BfbG9jayBh cm91bmQgdGhlbSB3b3VsZCBpbnZlcnQgdGhlCisJICogbG9jayBvcmRlci4gIGNoYW5nZXNfY2hl Y2soKSByZWFkcyB0aGUgY2FjaGUgcHVibGlzaGVkIGFib3ZlLAorCSAqIHdoaWNoIGlzIGFscmVh ZHkgY29uc2lzdGVudC4KKwkgKi8KKwltdXRleF9sb2NrKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7 CisJc2l0OTUzMXhfZGV2X3JlZl9zdGF0ZXNfdXBkYXRlKHNpdGRldik7CisJc2l0OTUzMXhfZGV2 X2NoYW5fc3RhdGVzX3VwZGF0ZShzaXRkZXYpOworCW11dGV4X3VubG9jaygmc2l0ZGV2LT5tdWx0 aW9wX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzaXRkcGxsLCAmc2l0ZGV2LT5kcGxs cywgbGlzdCkKKwkJc2l0OTUzMXhfZHBsbF9jaGFuZ2VzX2NoZWNrKHNpdGRwbGwpOworCisJLyoK KwkgKiBBY2tub3dsZWRnZSB0aGUgY2hpcCdzIG5vdGlmaWNhdGlvbiBsYXRjaGVzIGFmdGVyIHRo ZSB0aWNrIGhhcworCSAqIHJlYWQgYW5kIGFjdGVkIG9uIHRoZW0uICBXaXRob3V0IHRoaXMsIHRo ZSBXMUMgYml0cyByZW1haW4gc2V0CisJICogYW5kIC0tIG9uIGJvYXJkcyB0aGF0IHdpcmUgSU5U UkIgLS0gdGhlIGxpbmUgc3RheXMgYXNzZXJ0ZWQsCisJICogcmUtZmlyaW5nIHRoZSB0aHJlYWRl ZCBoYW5kbGVyIGJhY2sgdG8gYmFjay4gIFRoZSBoZWxwZXIgd3JpdGVzCisJICogVzFDIGJpdHMg YWNyb3NzIHBhZ2UgMCBhbmQgcGFnZSA2IGFuZCBtdXN0IHJ1biB1bmRlcgorCSAqIG11bHRpb3Bf bG9jayB0byBzZXJpYWxpemUgdGhlIHBhZ2Ugc2VsZWN0b3IgYWdhaW5zdCB1c2Vyc3BhY2UKKwkg KiBkcGxsIG9wcy4gIEZhaWx1cmUgaXMgbm9uLWZhdGFsOiBzdGF0dXMgd2FzIGFscmVhZHkgY29u c3VtZWQKKwkgKiBmb3IgdGhpcyB0aWNrIGFuZCB0aGUgbmV4dCB0aWNrIHJlLXByb2Nlc3NlcyB3 aGF0ZXZlciBzdGF5ZWQKKwkgKiBsYXRjaGVkLgorCSAqLworCW11dGV4X2xvY2soJnNpdGRldi0+ bXVsdGlvcF9sb2NrKTsKKwlyYyA9IHNpdDk1MzF4X2NsZWFyX25vdGlmaWNhdGlvbnMoc2l0ZGV2 KTsKKwltdXRleF91bmxvY2soJnNpdGRldi0+bXVsdGlvcF9sb2NrKTsKKwlpZiAocmMpCisJCWRl dl93YXJuX3JhdGVsaW1pdGVkKHNpdGRldi0+ZGV2LAorCQkJCSAgICAgIkZhaWxlZCB0byBjbGVh ciBub3RpZmljYXRpb25zOiAlZFxuIiwKKwkJCQkgICAgIHJjKTsKKworCS8qIFJ1biB0d2ljZSBh IHNlY29uZCAqLworCWt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHNpdGRldi0+a3dvcmtlciwg JnNpdGRldi0+d29yaywKKwkJCQkgICBtc2Vjc190b19qaWZmaWVzKFNJVDk1MzFYX1NUQVRVU19Q T0xMX01TKSk7Cit9CisKKy8qCisgKiBzaXQ5NTMxeF9pcnFfdGhyZWFkX2ZuIC0gdGhyZWFkZWQg SVJRIGhhbmRsZXIgZm9yIHRoZSBjaGlwJ3MgSU5UUkIgbGluZQorICoKKyAqIFRyaWdnZXJlZCB3 aGVuIHRoZSBjaGlwIGFzc2VydHMgSU5UUkIgKGFuZCBvbmx5IHdoZW4gRFQgd2lyZXMgdXAgdGhl CisgKiBjbGllbnQgaW50ZXJydXB0OyBhYnNlbnQgcHJvcGVydHkgPT0gaGFuZGxlciBuZXZlciBp bnN0YWxsZWQpLiAgVGhlCisgKiBhY3Rpb24gbWlycm9ycyBhIHBlcmlvZGljLXdvcmsgdGljazog cXVldWUgYW4gaW1tZWRpYXRlIHJ1biBzbyBzdGF0dXMKKyAqIHJlZ2lzdGVycyBhcmUgcmVhZCBh bmQgRFBMTCBjaGFuZ2VzX2NoZWNrIGZpcmVzIHdpdGhvdXQgd2FpdGluZyBmb3IKKyAqIHRoZSBu ZXh0IHBvbGwgZGVhZGxpbmUuICBQb2xsaW5nIGNvbnRpbnVlcyB0byBydW4gYXMgYSBmYWxsYmFj ay4KKyAqLworc3RhdGljIGlycXJldHVybl90IHNpdDk1MzF4X2lycV90aHJlYWRfZm4oaW50IGly cSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYgPSBkYXRhOwor CWludCByYzsKKworCS8qCisJICogQWNrbm93bGVkZ2UgdGhlIGNoaXAncyBub3RpZmljYXRpb24g bGF0Y2hlcyBmcm9tIHRoZSB0aHJlYWRlZAorCSAqIGhhbmRsZXIgaXRzZWxmLiAgV2l0aCBJUlFG X09ORVNIT1QgdGhlIGxpbmUgaXMgdW5tYXNrZWQgb24KKwkgKiByZXR1cm4sIHNvIGRlZmVycmlu ZyB0aGUgVzFDIGNsZWFyIHRvIHRoZSBhc3luYyBrd29ya2VyIHdvdWxkCisJICogbGV0IGEgc3Rp bGwtYXNzZXJ0ZWQgSU5UUkIgcmUtZmlyZSBpbW1lZGlhdGVseSAoaW50ZXJydXB0IHN0b3JtKS4K KwkgKiBDbGVhciBoZXJlLCB0aGVuIGtpY2sgdGhlIHBvbGwgd29ya2VyIHRvIHJlYWQgc3RhdGUg YW5kIHJ1bgorCSAqIGNoYW5nZXNfY2hlY2suCisJICovCisJbXV0ZXhfbG9jaygmc2l0ZGV2LT5t dWx0aW9wX2xvY2spOworCXJjID0gc2l0OTUzMXhfY2xlYXJfbm90aWZpY2F0aW9ucyhzaXRkZXYp OworCW11dGV4X3VubG9jaygmc2l0ZGV2LT5tdWx0aW9wX2xvY2spOworCWlmIChyYykgeworCQlk ZXZfd2Fybl9yYXRlbGltaXRlZChzaXRkZXYtPmRldiwKKwkJCQkgICAgICJJUlE6IGZhaWxlZCB0 byBjbGVhciBub3RpZmljYXRpb25zOiAlZFxuIiwKKwkJCQkgICAgIHJjKTsKKwkJLyoKKwkJICog VGhlIGxhdGNoIHdhcyBub3QgYWNrbm93bGVkZ2VkLCBzbyB3aXRoIElSUUZfT05FU0hPVCB0aGUK KwkJICogc3RpbGwtYXNzZXJ0ZWQgbGluZSByZS1lbnRlcnMgdGhpcyBoYW5kbGVyIGFzIHNvb24g YXMgaXQKKwkJICogcmV0dXJucy4gIFJldHVybmluZyBJUlFfTk9ORSBsZWF2ZXMgdGhhdCB0byB0 aGUgc3B1cmlvdXMKKwkJICogZGV0ZWN0b3IsIHdoaWNoIG5lZWRzIHJvdWdobHkgMTAwMDAwIGlu dGVycnVwdHMgYW5kIHJlc2V0cworCQkgKiBpdHMgY291bnQgZXZlcnkgdGVudGggb2YgYSBzZWNv bmQgLS0gdW5yZWFjaGFibGUgd2hlbiBlYWNoCisJCSAqIHBhc3MgY29zdHMgYW4gSTJDIHRpbWVv dXQuICBHaXZlIHVwIG9uIHRoZSBsaW5lIGluc3RlYWQ6CisJCSAqIHRoZSBwZXJpb2RpYyBwb2xs IHJlYWRzIHRoZSBzYW1lIHN0YXRlIHdpdGhvdXQgaXQsIHNvIHRoZQorCQkgKiBkcml2ZXIga2Vl cHMgd29ya2luZyBvbiBhIGJvYXJkIHdob3NlIElOVFJCIGNhbm5vdCBiZQorCQkgKiBhY2tub3ds ZWRnZWQuCisJCSAqLworCQlpZiAoKytzaXRkZXYtPmlycV9hY2tfZmFpbHMgPCBTSVQ5NTMxWF9J UlFfQUNLX1RSSUVTKQorCQkJcmV0dXJuIElSUV9OT05FOworCisJCWRldl9lcnIoc2l0ZGV2LT5k ZXYsCisJCQkiSVJRICVkIGRpc2FibGVkOiBub3RpZmljYXRpb25zIGNhbm5vdCBiZSBjbGVhcmVk LCBwb2xsaW5nIG9ubHlcbiIsCisJCQlpcnEpOworCQlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsK KwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCXNpdGRldi0+aXJxX2Fja19mYWlscyA9IDA7CisK KwlrdGhyZWFkX21vZF9kZWxheWVkX3dvcmsoc2l0ZGV2LT5rd29ya2VyLCAmc2l0ZGV2LT53b3Jr LCAwKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBUaGUgZHJpdmVyIHJlcG9y dHMgZXZlcnkgUExMIGFzIHNlbGVjdGluZyBieSBwcmlvcml0eS4gIEEgcHJvZmlsZSBjYW4KKyAq IHB1dCBhIFBMTCBpbiBtYW51YWwgYWN0aXZlIHNlbGVjdCBpbnN0ZWFkIChQTExfQ09ORklHMUZf UExMIGJpdCA2KSwgYW5kCisgKiB0aGUgbW9kZSB1c2Vyc3BhY2Ugc2VlcyB3b3VsZCB0aGVuIGJl IHdyb25nOyBzYXkgc28gcmF0aGVyIHRoYW4KKyAqIHJlY29uZmlndXJlIHdoYXQgdGhlIHByb2Zp bGUgY2hvc2UuICBUaGUgd2FybmluZyBhbHNvIHNheXMgd2hhdCB0aGUgUExMCisgKiB0aGVuIGZv bGxvd3M6IGl0cyBhY3RpdmUgc2VsZWN0aW9uLCBvciB3aXRoIE1JU0NJTk5FUl9QTEwgYml0IDUg dGhlCisgKiBtYW51YWwgaW5wdXQgc2VsZWN0IC0tIHRoZSBpbnB1dC1zZWxlY3QgcGlucywgb3Ig dGhlIGlucHV0IGNvZGUgdGhhdAorICogR1BJT19JTlBVVF9GVU5DX0NUUkw1Li44IGhvbGRzIHdo ZW4gaXRzIGJpdCA0IGlzIHNldC4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIHNpdGRldi0+bXVs dGlvcF9sb2NrLgorICovCitzdGF0aWMgdm9pZCBzaXQ5NTMxeF9tYW51YWxfc2VsX3JlcG9ydChz dHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYpCit7CisJdTggY2ZnLCBtaXNjLCBzZWwsIGk7CisK Kwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CisKKwlmb3IgKGkg PSAwOyBpIDwgU0lUOTUzMVhfTlVNX1BMTFM7IGkrKykgeworCQlpZiAoc2l0OTUzMXhfcmVhZF9w bGxfdTgoc2l0ZGV2LCBpLCBTSVQ5NTMxWF9QTExfUkVHX0NPTkZJRzFGLAorCQkJCQkgJmNmZykp CisJCQlyZXR1cm47CisJCWlmICghKGNmZyAmIFNJVDk1MzFYX1BMTF9DT05GSUcxRl9NQU5VQUxf U0VMKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzaXQ5NTMxeF9yZWFkX3BsbF91OChzaXRkZXYs IGksIFNJVDk1MzFYX1BMTF9SRUdfTUlTQ0lOTkVSLAorCQkJCQkgJm1pc2MpKQorCQkJcmV0dXJu OworCQlpZiAoIShtaXNjICYgU0lUOTUzMVhfUExMX01JU0NJTk5FUl9NQU5fSU5fU0VMKSkgewor CQkJZGV2X3dhcm4oc2l0ZGV2LT5kZXYsCisJCQkJICJQTEwlYzogdGhlIHByb2ZpbGUgc2VsZWN0 cyBpdHMgcmVmZXJlbmNlIG1hbnVhbGx5LCBmb2xsb3dpbmcgaXRzIGFjdGl2ZSBzZWxlY3Rpb247 IGl0IGlzIHJlcG9ydGVkIGFzIGF1dG9tYXRpY1xuIiwKKwkJCQkgJ0EnICsgaSk7CisJCQljb250 aW51ZTsKKwkJfQorCisJCWlmIChzaXQ5NTMxeF9yZWFkX3U4KHNpdGRldiwgU0lUOTUzMVhfUkVH X01BTl9JTl9TRUwoaSksICZzZWwpKQorCQkJcmV0dXJuOworCQlpZiAoc2VsICYgU0lUOTUzMVhf TUFOX0lOX1NFTF9GUk9NX1JFRykgeworCQkJc2VsID0gRklFTERfR0VUKFNJVDk1MzFYX01BTl9J Tl9TRUxfTUFTSywgc2VsKTsKKwkJCWRldl93YXJuKHNpdGRldi0+ZGV2LAorCQkJCSAiUExMJWM6 IHRoZSBwcm9maWxlIHNlbGVjdHMgaXRzIHJlZmVyZW5jZSBtYW51YWxseSwgaW5wdXQgY29kZSAl dSBmcm9tIHRoZSByZWdpc3RlcjsgaXQgaXMgcmVwb3J0ZWQgYXMgYXV0b21hdGljXG4iLAorCQkJ CSAnQScgKyBpLCBzZWwpOworCQl9IGVsc2UgeworCQkJZGV2X3dhcm4oc2l0ZGV2LT5kZXYsCisJ CQkJICJQTEwlYzogdGhlIHByb2ZpbGUgc2VsZWN0cyBpdHMgcmVmZXJlbmNlIG1hbnVhbGx5LCBm cm9tIHRoZSBpbnB1dC1zZWxlY3QgcGluczsgaXQgaXMgcmVwb3J0ZWQgYXMgYXV0b21hdGljXG4i LAorCQkJCSAnQScgKyBpKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFJlcG9ydCB3aGF0IHRoZSBk ZXZpY2UgbG9hZGVkIGZyb20gaXRzIEVFUFJPTSwgYW5kIHdhcm4gaWYgaXQgZG9lcyBub3QKKyAq IGxvb2sgbGlrZSBhIGhlYWx0aHkgbG9hZC4KKyAqCisgKiBBIHByb2ZpbGUgdGhhdCBmYWlsZWQg dG8gbG9hZCBsZWF2ZXMgdGhlIHBhcnQgcnVubmluZyBzb21ldGhpbmcgb3RoZXIKKyAqIHRoYW4g d2hhdCB0aGUgYm9hcmQgd2FzIGRlc2lnbmVkIGFyb3VuZCAtLSBkaXZpZGVycywgb3V0cHV0IHJv dXRpbmcKKyAqIGFuZCBwcmlvcml0eSB0YWJsZXMgYWxsIGRpZmZlciAtLSB3aGlsZSBldmVyeSBy ZWdpc3RlciBzdGlsbCByZWFkcworICogYmFjayBhIHBsYXVzaWJsZSB2YWx1ZS4gIE5hbWluZyB0 aGUgcHJvZmlsZSBhbmQgc2F5aW5nIHdoZXRoZXIgdGhlCisgKiBsb2FkIHdhcyBjbGVhbiB0dXJu cyB0aGF0IGludG8gc29tZXRoaW5nIHZpc2libGUgYXQgc3RhcnR1cCBpbnN0ZWFkIG9mCisgKiBz b21ldGhpbmcgaW5mZXJyZWQgZnJvbSBtZWFzdXJlbWVudHMgbGF0ZXIuCisgKgorICogVGhpcyBv bmx5IHJlcG9ydHMuICBCb2FyZHMgaW4gdGhpcyBmYW1pbHkgbWF5IGhhdmUgdGhlaXIKKyAqIGNv bmZpZ3VyYXRpb24gcHVzaGVkIG92ZXIgSTJDIHJhdGhlciB0aGFuIGhlbGQgaW4gYW4gRUVQUk9N LCBhbmQgdGhlcmUKKyAqIHRoZSBDUkMgcGFpciBtZWFucyBub3RoaW5nLCBzbyBhIG1pc21hdGNo IGlzIG5vdCBncm91bmRzIGZvciByZWZ1c2luZworICogdG8gZHJpdmUgdGhlIGRldmljZS4KKyAq CisgKiBDYWxsZXIgbXVzdCBob2xkIHNpdGRldi0+bXVsdGlvcF9sb2NrLgorICovCitzdGF0aWMg dm9pZCBzaXQ5NTMxeF9lZXByb21fc3RhdGVfcmVwb3J0KHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNp dGRldikKK3sKKwl1MzIgcmVjX2NyYyA9IDAsIGNhbF9jcmMgPSAwLCBwcm9mX2lkID0gMDsKKwl1 OCBub3RpZiwgdjsKKwlpbnQgcmMsIGk7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzaXRkZXYt Pm11bHRpb3BfbG9jayk7CisKKwkvKiBQcm9maWxlIGlkOiB0aHJlZSBieXRlcywgbGVhc3Qgc2ln bmlmaWNhbnQgZmlyc3QuICovCisJZm9yIChpID0gMjsgaSA+PSAwOyBpLS0pIHsKKwkJcmMgPSBz aXQ5NTMxeF9yZWFkX3U4KHNpdGRldiwgU0lUOTUzMVhfUkVHX1BST0ZJTEVfSUQgKyBpLCAmdik7 CisJCWlmIChyYykKKwkJCXJldHVybjsKKwkJcHJvZl9pZCA9IHByb2ZfaWQgPDwgOCB8IHY7CisJ fQorCisJZGV2X2luZm8oc2l0ZGV2LT5kZXYsICJwcm9maWxlIGlkICV1XG4iLCBwcm9mX2lkKTsK KworCS8qIEJvdGggQ1JDczogZm91ciBieXRlcywgbW9zdCBzaWduaWZpY2FudCBmaXJzdC4gKi8K Kwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXJjID0gc2l0OTUzMXhfcmVhZF91OChzaXRk ZXYsIFNJVDk1MzFYX1JFR19SRUNfQ1JDICsgaSwgJnYpOworCQlpZiAocmMpCisJCQlyZXR1cm47 CisJCXJlY19jcmMgPSByZWNfY3JjIDw8IDggfCB2OworCisJCXJjID0gc2l0OTUzMXhfcmVhZF91 OChzaXRkZXYsIFNJVDk1MzFYX1JFR19DQUxfQ1JDICsgaSwgJnYpOworCQlpZiAocmMpCisJCQly ZXR1cm47CisJCWNhbF9jcmMgPSBjYWxfY3JjIDw8IDggfCB2OworCX0KKworCXJjID0gc2l0OTUz MXhfcmVhZF91OChzaXRkZXYsIFNJVDk1MzFYX1JFR19FRVBST01fTk9USUYsICZub3RpZik7CisJ aWYgKHJjKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEEgY2xlYW4gbG9hZCBsZWF2ZXMgdGhlIHJl YWQtZG9uZSBiaXQgc2V0IGFuZCBldmVyeSBkZWZlY3QgYml0CisJICogY2xlYXIuICBCb3RoIENS Q3MgemVybyBtZWFucyBubyBFRVBST00gcmVhZCBoYXBwZW5lZCBhdCBhbGw6CisJICogYm9hcmRz IGluIHRoaXMgZmFtaWx5IG1heSB0YWtlIHRoZWlyIGNvbmZpZ3VyYXRpb24gb3ZlciBJMkMKKwkg KiBpbnN0ZWFkIG9mIGFuIEVFUFJPTSwgYW5kIHRoZXJlIHRoZSBDUkMgcGFpciBtZWFucyBub3Ro aW5nLCBzbworCSAqIHRoYXQgY2FzZSBpcyBub3QgYSBtaXNtYXRjaCB3b3J0aCB3YXJuaW5nIGFi b3V0LgorCSAqLworCWlmICghcmVjX2NyYyAmJiAhY2FsX2NyYykKKwkJZGV2X2RiZyhzaXRkZXYt PmRldiwKKwkJCSJubyBFRVBST00gcHJvZmlsZSAoY29uZmlndXJhdGlvbiBwdXNoZWQgb3ZlciBJ MkMpXG4iKTsKKwllbHNlIGlmIChyZWNfY3JjICE9IGNhbF9jcmMpCisJCWRldl93YXJuKHNpdGRl di0+ZGV2LAorCQkJICJFRVBST00gQ1JDIG1pc21hdGNoOiBzdG9yZWQgJTA4eCwgY29tcHV0ZWQg JTA4eFxuIiwKKwkJCSByZWNfY3JjLCBjYWxfY3JjKTsKKwllbHNlIGlmIChub3RpZiAhPSBTSVQ5 NTMxWF9FRVBST01fUkVBRF9ET05FKQorCQlkZXZfd2FybihzaXRkZXYtPmRldiwKKwkJCSAiRUVQ Uk9NIHJlYWQgcmVwb3J0ZWQgZGVmZWN0cyAobm90aWZ5ICUwMngpXG4iLAorCQkJIG5vdGlmKTsK KwllbHNlCisJCWRldl9kYmcoc2l0ZGV2LT5kZXYsICJFRVBST00gcHJvZmlsZSBsb2FkZWQsIENS QyAlMDh4XG4iLAorCQkJY2FsX2NyYyk7Cit9CisKKy8qCisgKiBSZXBvcnQgd2hpY2ggUExMcyBj YW1lIHVwLCBhbmQgZmxhZyB0aGUgb25lIGNhc2UgdGhhdCBpcyBhIHJlYWwKKyAqIGluY29uc2lz dGVuY3kgcmF0aGVyIHRoYW4gYSBjb25maWd1cmF0aW9uIGNob2ljZS4KKyAqCisgKiBBIFBMTCB0 aGUgbG9hZGVkIGNvbmZpZ3VyYXRpb24gbGVhdmVzIHVudXNlZCBuZXZlciByZWFjaGVzIGl0cyBh Y3RpdmUKKyAqIHN0YXRlLCB3aGljaCBpcyBub3JtYWwgYW5kIG5vdCB3b3J0aCBhIHdhcm5pbmcu ICBBIFBMTCB0aGF0IGhhcworICogb3V0cHV0cyByb3V0ZWQgdG8gaXQgYW5kIGlzIHN0aWxsIG5v dCBhY3RpdmUgaXMgZGlmZmVyZW50OiBzb21ldGhpbmcKKyAqIHRoYXQgaXMgbWVhbnQgdG8gYmUg Z2VuZXJhdGluZyBjbG9ja3MgaXMgbm90IHJ1bm5pbmcsIGFuZCBldmVyeSB2YWx1ZQorICogcmVh ZCBmcm9tIGl0IC0tIGxvY2sgc3RhdGUsIHBoYXNlLCBmcmVxdWVuY3kgb2Zmc2V0IC0tIGRlc2Ny aWJlcyBhCisgKiBzdG9wcGVkIGxvb3AuICBTYXkgc28gb25jZSBhdCBzdGFydHVwIHJhdGhlciB0 aGFuIGxlYXZpbmcgaXQgdG8gYmUKKyAqIGRpc2NvdmVyZWQgdGhyb3VnaCBtZWFzdXJlbWVudHMg dGhhdCBxdWlldGx5IHJlYWQgYXMgemVyby4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIHNpdGRl di0+bXVsdGlvcF9sb2NrLgorICovCitzdGF0aWMgdm9pZCBzaXQ5NTMxeF9wbGxfc3RhdGVzX3Jl cG9ydChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYpCit7CisJdW5zaWduZWQgaW50IGlkeCwg aTsKKwlib29sIHJvdXRlZDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnNpdGRldi0+bXVsdGlv cF9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBTSVQ5NTMxWF9OVU1fUExMUzsgaSsrKSB7CisJ CWlmIChzaXRkZXYtPmNoYW5baV0uYWN0aXZlKSB7CisJCQlkZXZfZGJnKHNpdGRldi0+ZGV2LCAi UExMJWMgYWN0aXZlXG4iLCAnQScgKyBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcm91dGVk ID0gZmFsc2U7CisJCWZvciAoaWR4ID0gMDsgaWR4IDwgc2l0ZGV2LT5pbmZvLT5udW1fb3V0cHV0 czsgaWR4KyspIHsKKwkJCWNvbnN0IHN0cnVjdCBzaXQ5NTMxeF9vdXQgKm91dDsKKworCQkJb3V0 ID0gc2l0OTUzMXhfb3V0X3N0YXRlX2dldChzaXRkZXYsIGlkeCk7CisJCQlpZiAob3V0LT5yb3V0 ZWQgJiYgb3V0LT5wbGxfaWR4ID09IGkpIHsKKwkJCQlyb3V0ZWQgPSB0cnVlOworCQkJCWJyZWFr OworCQkJfQorCQl9CisKKwkJaWYgKHJvdXRlZCkKKwkJCWRldl93YXJuKHNpdGRldi0+ZGV2LAor CQkJCSAiUExMJWMgZHJpdmVzIG91dHB1dHMgYnV0IGlzIG5vdCBpbiBpdHMgYWN0aXZlIHN0YXRl XG4iLAorCQkJCSAnQScgKyBpKTsKKwkJZWxzZQorCQkJZGV2X2RiZyhzaXRkZXYtPmRldiwgIlBM TCVjIHVudXNlZCBieSB0aGUgbG9hZGVkIGNvbmZpZ3VyYXRpb25cbiIsCisJCQkJJ0EnICsgaSk7 CisJfQorfQorCisvKgorICogc2l0OTUzMXhfZGV2X3N0YXJ0IC0gc3RhcnQgbm9ybWFsIG9wZXJh dGlvbgorICoKKyAqIEZldGNoZXMgaW5pdGlhbCBoYXJkd2FyZSBzdGF0ZSwgcmVnaXN0ZXJzIGFs bCBEUExMIGRldmljZXMgYW5kCisgKiB0aGVpciBwaW5zLCBhbmQgc3RhcnRzIHRoZSBwZXJpb2Rp YyBtb25pdG9yaW5nIHRocmVhZC4KKyAqLworc3RhdGljIGludCBzaXQ5NTMxeF9kZXZfc3RhcnQo c3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2KQoreworCXN0cnVjdCBzaXQ5NTMxeF9kcGxsICpz aXRkcGxsOworCWludCByYzsKKworCS8qIEZldGNoIGRldmljZSBzdGF0ZSAqLworCXJjID0gc2l0 OTUzMXhfZGV2X3N0YXRlX2ZldGNoKHNpdGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisK KwltdXRleF9sb2NrKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CisJc2l0OTUzMXhfZWVwcm9tX3N0 YXRlX3JlcG9ydChzaXRkZXYpOworCXNpdDk1MzF4X21hbnVhbF9zZWxfcmVwb3J0KHNpdGRldik7 CisJc2l0OTUzMXhfcGxsX3N0YXRlc19yZXBvcnQoc2l0ZGV2KTsKKwltdXRleF91bmxvY2soJnNp dGRldi0+bXVsdGlvcF9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2l0ZHBsbCwgJnNp dGRldi0+ZHBsbHMsIGxpc3QpIHsKKwkJcmMgPSBzaXQ5NTMxeF9kcGxsX3JlZ2lzdGVyKHNpdGRw bGwpOworCQlpZiAocmMpIHsKKwkJCWRldl9lcnJfcHJvYmUoc2l0ZGV2LT5kZXYsIHJjLAorCQkJ CSAgICAgICJGYWlsZWQgdG8gcmVnaXN0ZXIgRFBMTCV1XG4iLAorCQkJCSAgICAgIHNpdGRwbGwt PmlkKTsKKwkJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CisJCX0KKwl9CisKKwlrdGhyZWFkX3F1ZXVl X2RlbGF5ZWRfd29yayhzaXRkZXYtPmt3b3JrZXIsICZzaXRkZXYtPndvcmssIDApOworCisJcmV0 dXJuIDA7CisKK2Vycl91bnJlZ2lzdGVyOgorCS8qCisJICogVW5yZWdpc3RlciB3aGF0IGRpZCBy ZWdpc3Rlci4gIFRoZSBjYWxsZXIgZnJlZXMgdGhlIGxpc3Qgb24gdGhpcworCSAqIHBhdGgsIHNv IGxlYXZpbmcgYSBEUExMIHJlZ2lzdGVyZWQgd291bGQgaGFuZCB0aGUgc3Vic3lzdGVtIGEKKwkg KiBwb2ludGVyIHRvIGZyZWVkIG1lbW9yeS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Nv bnRpbnVlX3JldmVyc2Uoc2l0ZHBsbCwgJnNpdGRldi0+ZHBsbHMsIGxpc3QpCisJCXNpdDk1MzF4 X2RwbGxfdW5yZWdpc3RlcihzaXRkcGxsKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIHNp dDk1MzF4X2Rldl9zdG9wIC0gc3RvcCBub3JtYWwgb3BlcmF0aW9uCisgKgorICogQ2FuY2VscyB0 aGUgbW9uaXRvcmluZyB0aHJlYWQgYW5kIHVucmVnaXN0ZXJzIGFsbCBEUExMIGRldmljZXMKKyAq IGFuZCB0aGVpciBwaW5zLgorICovCitzdGF0aWMgdm9pZCBzaXQ5NTMxeF9kZXZfc3RvcChzdHJ1 Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYpCit7CisJc3RydWN0IHNpdDk1MzF4X2RwbGwgKnNpdGRw bGw7CisKKwlrdGhyZWFkX2NhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2l0ZGV2LT53b3JrKTsK KworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2l0ZHBsbCwgJnNpdGRldi0+ZHBsbHMsIGxpc3QpIHsK KwkJaWYgKHNpdGRwbGwtPmRwbGxfZGV2KQorCQkJc2l0OTUzMXhfZHBsbF91bnJlZ2lzdGVyKHNp dGRwbGwpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBzaXQ5NTMxeF9kcGxsX3BpbiAqCitzaXQ5 NTMxeF9kcGxsX3Bpbl9hbGxvYyhzdHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0ZHBsbCwKKwkJCWVu dW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpciwgdTggaWQpCit7CisJc3RydWN0IHNpdDk1MzF4X2Rw bGxfcGluICpwaW47CisKKwlwaW4gPSBremFsbG9jX29iaigqcGluLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIXBpbikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlwaW4tPmRwbGwgPSBzaXRk cGxsOworCXBpbi0+ZGlyID0gZGlyOworCXBpbi0+aWQgPSBpZDsKKworCXJldHVybiBwaW47Cit9 CisKKy8qCisgKiBzaXQ5NTMxeF9kcGxsX3Bpbl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgRFBMTCBw aW4gd2l0aCB0aGUgc3Vic3lzdGVtCisgKiBAaW5kZXg6CWFic29sdXRlIHBpbiBpbmRleCBmb3Ig Y2xvY2tfaWQgbmFtZXNwYWNlCisgKgorICogR2V0cyBwaW4gcHJvcGVydGllcyBmcm9tIGZpcm13 YXJlLCBjcmVhdGVzIG9yIGdldHMgYSBkcGxsX3BpbiwKKyAqIGFuZCByZWdpc3RlcnMgaXQgd2l0 aCB0aGUgcGFyZW50IERQTEwgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHNpdDk1MzF4X2RwbGxf cGluX3JlZ2lzdGVyKHN0cnVjdCBzaXQ5NTMxeF9kcGxsX3BpbiAqcGluLAorCQkJCSAgICAgIHUz MiBpbmRleCkKK3sKKwlzdHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0ZHBsbCA9IHBpbi0+ZHBsbDsK KwlzdHJ1Y3Qgc2l0OTUzMXhfcGluX3Byb3BzICpwcm9wczsKKwljb25zdCBzdHJ1Y3QgZHBsbF9w aW5fb3BzICpvcHM7CisJaW50IHJjOworCisJcHJvcHMgPSBzaXQ5NTMxeF9waW5fcHJvcHNfZ2V0 KHNpdGRwbGwtPmRldiwgcGluLT5kaXIsIHBpbi0+aWQpOworCWlmIChJU19FUlIocHJvcHMpKQor CQlyZXR1cm4gUFRSX0VSUihwcm9wcyk7CisKKwlzdHJzY3B5KHBpbi0+bGFiZWwsIHByb3BzLT5w YWNrYWdlX2xhYmVsLCBzaXplb2YocGluLT5sYWJlbCkpOworCXBpbi0+Zndub2RlID0gZndub2Rl X2hhbmRsZV9nZXQocHJvcHMtPmZ3bm9kZSk7CisKKwlwaW4tPmRwbGxfcGluID0gZHBsbF9waW5f Z2V0KHNpdGRwbGwtPmRldi0+Y2xvY2tfaWQsIGluZGV4LAorCQkJCSAgICAgVEhJU19NT0RVTEUs ICZwcm9wcy0+ZHBsbF9wcm9wcywKKwkJCQkgICAgICZwaW4tPnRyYWNrZXIpOworCWlmIChJU19F UlIocGluLT5kcGxsX3BpbikpIHsKKwkJcmMgPSBQVFJfRVJSKHBpbi0+ZHBsbF9waW4pOworCQln b3RvIGVycl9waW5fZ2V0OworCX0KKwlkcGxsX3Bpbl9md25vZGVfc2V0KHBpbi0+ZHBsbF9waW4s IHByb3BzLT5md25vZGUpOworCisJb3BzID0gc2l0OTUzMXhfZHBsbF9waW5fb3BzX2dldChwaW4p OworCisJcmMgPSBkcGxsX3Bpbl9yZWdpc3RlcihzaXRkcGxsLT5kcGxsX2RldiwgcGluLT5kcGxs X3Bpbiwgb3BzLCBwaW4pOworCWlmIChyYykKKwkJZ290byBlcnJfcmVnaXN0ZXI7CisKKwlzaXQ5 NTMxeF9waW5fcHJvcHNfcHV0KHByb3BzKTsKKworCXJldHVybiAwOworCitlcnJfcmVnaXN0ZXI6 CisJZHBsbF9waW5fcHV0KHBpbi0+ZHBsbF9waW4sICZwaW4tPnRyYWNrZXIpOworZXJyX3Bpbl9n ZXQ6CisJLyogZHBsbF9waW5fZ2V0KCkgbGVmdCBhbiBFUlJfUFRSIGhlcmUuICovCisJcGluLT5k cGxsX3BpbiA9IE5VTEw7CisJZndub2RlX2hhbmRsZV9wdXQocGluLT5md25vZGUpOworCXBpbi0+ Zndub2RlID0gTlVMTDsKKwlzaXQ5NTMxeF9waW5fcHJvcHNfcHV0KHByb3BzKTsKKworCXJldHVy biByYzsKK30KKworc3RhdGljIHZvaWQgc2l0OTUzMXhfZHBsbF9waW5fdW5yZWdpc3RlcihzdHJ1 Y3Qgc2l0OTUzMXhfZHBsbF9waW4gKnBpbikKK3sKKwlzdHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0 ZHBsbCA9IHBpbi0+ZHBsbDsKKwlzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluID0gcGluLT5kcGxs X3BpbjsKKwljb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHM7CisKKwlvcHMgPSBzaXQ5NTMx eF9kcGxsX3Bpbl9vcHNfZ2V0KHBpbik7CisKKwkvKgorCSAqIENsZWFyIHRoZSBwb2ludGVyIGJl Zm9yZSB0aGUgc3Vic3lzdGVtIGlzIHRvbGQgdG8gZHJvcCB0aGUgcGluLgorCSAqIEEgY2FsbGJh Y2sgdGVzdHMgdGhpcyBmaWVsZCB0byB0ZWxsIGEgcGluIG9uIGl0cyB3YXkgb3V0IGZyb20gYQor CSAqIGxpdmUgb25lLCBhbmQgaXQgcnVucyB1bmRlciB0aGUgc3Vic3lzdGVtJ3MgZGV2aWNlIGxv Y2ssIHdoaWNoCisJICogZHBsbF9waW5fdW5yZWdpc3RlcigpIHRha2VzIGFzIHdlbGwuICBDbGVh cmluZyBmaXJzdCBtZWFucyBzdWNoIGEKKwkgKiBjYWxsYmFjayBlaXRoZXIgc2VlcyBOVUxMIGFu ZCBsZWF2ZXMgdGhlIHBpbiBhbG9uZSwgb3Igc3RpbGwgc2VlcworCSAqIHRoZSBwaW4gYW5kIGZp bmlzaGVzIGJlZm9yZSB0aGUgdW5yZWdpc3RlciBjYW4gcHJvY2VlZC4gIENsZWFyaW5nCisJICog YWZ0ZXJ3YXJkcyBsZWF2ZXMgYSB3aW5kb3cgd2hlcmUgdGhlIGZpZWxkIHN0aWxsIHJlYWRzIGFz IGxpdmUKKwkgKiBhbmQgdGhlIHBpbiBiZWhpbmQgaXQgaXMgYWxyZWFkeSBnb25lLgorCSAqLwor CXBpbi0+ZHBsbF9waW4gPSBOVUxMOworCisJZHBsbF9waW5fdW5yZWdpc3RlcihzaXRkcGxsLT5k cGxsX2RldiwgZHBsbF9waW4sIG9wcywgcGluKTsKKwlkcGxsX3Bpbl9wdXQoZHBsbF9waW4sICZw aW4tPnRyYWNrZXIpOworCisJZndub2RlX2hhbmRsZV9wdXQocGluLT5md25vZGUpOworCXBpbi0+ Zndub2RlID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgc2l0OTUzMXhfZHBsbF9waW5zX3VucmVn aXN0ZXIoc3RydWN0IHNpdDk1MzF4X2RwbGwgKnNpdGRwbGwpCit7CisJc3RydWN0IHNpdDk1MzF4 X2RldiAqc2l0ZGV2ID0gc2l0ZHBsbC0+ZGV2OworCXN0cnVjdCBzaXQ5NTMxeF9kcGxsX3BpbiAq cGluLCAqbmV4dDsKKwlMSVNUX0hFQUQoZGVhZCk7CisKKwkvKgorCSAqIFRha2UgdGhlIHBpbnMg b3V0IG9mIHRoZSBzdWJzeXN0ZW0gZmlyc3QuICBUaGF0IGNhbGwgdGFrZXMgdGhlCisJICogRFBM TCBkZXZpY2UgbG9jaywgd2hpY2ggdGhlIGRyaXZlcidzIG93biBjYWxsYmFja3MgYXJlIGFscmVh ZHkKKwkgKiB1bmRlciB3aGVuIHRoZXkgdGFrZSBtdWx0aW9wX2xvY2ssIHNvIGl0IG11c3Qgbm90 IHJ1biB3aXRoCisJICogbXVsdGlvcF9sb2NrIGhlbGQgb3IgdGhlIHR3byBvcmRlcnMgY3Jvc3Mu CisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sICZzaXRkcGxsLT5waW5zLCBsaXN0KQor CQlzaXQ5NTMxeF9kcGxsX3Bpbl91bnJlZ2lzdGVyKHBpbik7CisKKwkvKgorCSAqIFRoZW4gZGV0 YWNoIHRoZSBsaXN0IHVuZGVyIG11bHRpb3BfbG9jaywgd2hpY2ggZXZlcnkgY2FsbGJhY2sgdGhh dAorCSAqIHdhbGtzIGl0IGhvbGRzLCBzbyBvbmNlIHRoZSBzcGxpY2UgcmV0dXJucyBubyBjYWxs YmFjayBjYW4gcmVhY2gKKwkgKiB0aGVzZSBub2Rlcy4gIFRoZSBwb2xsIHdhbGtzIHRoZSBsaXN0 IGFzIHdlbGwgd2l0aG91dCBob2xkaW5nIHRoZQorCSAqIGxvY2sgdGhyb3VnaG91dCwgYnV0IGl0 IGlzIG5vdCBydW5uaW5nIGhlcmU6IHNpdDk1MzF4X2Rldl9zdG9wKCkKKwkgKiBjYW5jZWxzIGl0 IGJlZm9yZSB1bnJlZ2lzdGVyaW5nLCBhbmQgdGhlIElSUSB0aGF0IGNvdWxkIHF1ZXVlIGl0CisJ ICogYWdhaW4gaXMgcmVsZWFzZWQgYmVmb3JlIHRoYXQsIGl0cyBkZXZtIGFjdGlvbiBoYXZpbmcg YmVlbiBhZGRlZAorCSAqIGFmdGVyIHRoZSBEUExMcyB3ZXJlIHNldCB1cC4gIE9uIHRoZSByZWdp c3RyYXRpb24gZXJyb3IgcGF0aCB0aGUKKwkgKiBwb2xsIGhhcyBub3QgYmVlbiBxdWV1ZWQgeWV0 LiAgU28gdGhlIG5vZGVzIGFyZSBzYWZlIHRvIGZyZWUuCisJICovCisJbXV0ZXhfbG9jaygmc2l0 ZGV2LT5tdWx0aW9wX2xvY2spOworCWxpc3Rfc3BsaWNlX2luaXQoJnNpdGRwbGwtPnBpbnMsICZk ZWFkKTsKKwltdXRleF91bmxvY2soJnNpdGRldi0+bXVsdGlvcF9sb2NrKTsKKworCWxpc3RfZm9y X2VhY2hfZW50cnlfc2FmZShwaW4sIG5leHQsICZkZWFkLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZw aW4tPmxpc3QpOworCQlrZnJlZShwaW4pOworCX0KK30KKworLyoKKyAqIHNpdDk1MzF4X2RwbGxf cGluX2lzX3JlZ2lzdHJhYmxlIC0gY2hlY2sgaWYgYSBwaW4gc2hvdWxkIGJlIHJlZ2lzdGVyZWQK KyAqIEBkaXI6CXBpbiBkaXJlY3Rpb24KKyAqIEBpbmRleDoJcGluIGhhcmR3YXJlIGluZGV4Cisg KgorICogT25seSB0aGUgWE8gcGluIGhhcyBhIGNvbXBsZXRlIHBpbi1vcCB0YWJsZSBpbiB0aGlz IHBhdGNoLCBzbyBvbmx5CisgKiB0aGUgWE8gcGluIGlzIHJlZ2lzdHJhYmxlIGhlcmUuICBPdGhl ciBwaW4gY2xhc3NlcyBhcmUgcmVnaXN0ZXJlZAorICogb25jZSB0aGVpciBzdGF0ZSBjYWxsYmFj a3MgbGFuZCBpbiB0aGUgZm9sbG93aW5nIHBhdGNoZXMuCisgKgorICogUmV0dXJuOiB0cnVlIGlm IHBpbiBzaG91bGQgYmUgcmVnaXN0ZXJlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBi b29sIHNpdDk1MzF4X2RwbGxfcGluX2lzX3JlZ2lzdHJhYmxlKHN0cnVjdCBzaXQ5NTMxeF9kcGxs ICpzaXRkcGxsLAorCQkJCQkgICAgIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpciwKKwkJCQkJ ICAgICB1OCBpbmRleCkKK3sKKwkvKgorCSAqIE9ubHkgdGhlIFhPIHBpbiBoYXMgYSBjb21wbGV0 ZSBwaW4tb3AgdGFibGUgaW4gdGhpcyBwYXRjaC4KKwkgKiBPdGhlciBwaW4gY2xhc3NlcyBhcmUg cmVnaXN0ZXJlZCBvbmNlIHRoZWlyIHN0YXRlIGNhbGxiYWNrcworCSAqIGxhbmQgaW4gdGhlIGZv bGxvd2luZyBwYXRjaGVzLgorCSAqLworCWlmIChkaXIgIT0gRFBMTF9QSU5fRElSRUNUSU9OX0lO UFVUKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gaW5kZXggPT0gU0lUOTUzMVhfTUFYX0lO UFVUUzsKK30KKworLyoKKyAqIHNpdDk1MzF4X2RwbGxfcGluc19yZWdpc3RlciAtIHJlZ2lzdGVy IGFsbCByZWdpc3RyYWJsZSBwaW5zCisgKgorICogRW51bWVyYXRlcyBhbGwgcG9zc2libGUgaW5w dXQgYW5kIG91dHB1dCBwaW5zLCBjaGVja3MgcmVnaXN0cmFiaWxpdHksCisgKiBhbmQgcmVnaXN0 ZXJzIGVhY2ggb25lLiAgSW5wdXQgcGlucyBjb21lIGZpcnN0LCB0aGVuIG91dHB1dCBwaW5zLAor ICogd2l0aCBpbnB1dCBwaW5zIGZpcnN0LCB0aGVuIG91dHB1dCBwaW5zLgorICovCitzdGF0aWMg aW50IHNpdDk1MzF4X2RwbGxfcGluc19yZWdpc3RlcihzdHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0 ZHBsbCkKK3sKKwlzdHJ1Y3Qgc2l0OTUzMXhfZHBsbF9waW4gKnBpbjsKKwllbnVtIGRwbGxfcGlu X2RpcmVjdGlvbiBkaXI7CisJdTggaWQsIGluZGV4OworCWludCByYzsKKworCWZvciAoaW5kZXgg PSAwOyBpbmRleCA8IFNJVDk1MzFYX05VTV9QSU5TX1RPVEFMOyBpbmRleCsrKSB7CisJCWlmIChp bmRleCA8IFNJVDk1MzFYX05VTV9JTlBVVF9QSU5TKSB7CisJCQlpZCA9IGluZGV4OworCQkJZGly ID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUOworCQl9IGVsc2UgeworCQkJaWQgPSBpbmRleCAt IFNJVDk1MzFYX05VTV9JTlBVVF9QSU5TOworCQkJZGlyID0gRFBMTF9QSU5fRElSRUNUSU9OX09V VFBVVDsKKwkJfQorCisJCWlmICghc2l0OTUzMXhfZHBsbF9waW5faXNfcmVnaXN0cmFibGUoc2l0 ZHBsbCwgZGlyLCBpZCkpCisJCQljb250aW51ZTsKKworCQlwaW4gPSBzaXQ5NTMxeF9kcGxsX3Bp bl9hbGxvYyhzaXRkcGxsLCBkaXIsIGlkKTsKKwkJaWYgKElTX0VSUihwaW4pKSB7CisJCQlyYyA9 IFBUUl9FUlIocGluKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlyYyA9IHNpdDk1MzF4X2Rw bGxfcGluX3JlZ2lzdGVyKHBpbiwgaW5kZXgpOworCQlpZiAocmMpIHsKKwkJCWtmcmVlKHBpbik7 CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJLyoKKwkJICogUGlucyByZWdpc3RlcmVkIGJlZm9y ZSB0aGlzIG9uZSBhcmUgYWxyZWFkeSByZWFjaGFibGUgZnJvbQorCQkgKiBuZXRsaW5rLCBhbmQg dGhlIHdhbGtzIG92ZXIgdGhpcyBsaXN0IHJ1biB1bmRlcgorCQkgKiBtdWx0aW9wX2xvY2ssIHNv IHRoZSBpbnNlcnRpb24gZG9lcyB0b28uCisJCSAqLworCQltdXRleF9sb2NrKCZzaXRkcGxsLT5k ZXYtPm11bHRpb3BfbG9jayk7CisJCWxpc3RfYWRkKCZwaW4tPmxpc3QsICZzaXRkcGxsLT5waW5z KTsKKwkJbXV0ZXhfdW5sb2NrKCZzaXRkcGxsLT5kZXYtPm11bHRpb3BfbG9jayk7CisJfQorCisJ cmV0dXJuIDA7CisKK2Vycm9yOgorCXNpdDk1MzF4X2RwbGxfcGluc191bnJlZ2lzdGVyKHNpdGRw bGwpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBzaXQ5NTMxeF9kcGxsX2RldmljZV9y ZWdpc3RlcihzdHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0ZHBsbCkKK3sKKwlzdHJ1Y3Qgc2l0OTUz MXhfZGV2ICpzaXRkZXYgPSBzaXRkcGxsLT5kZXY7CisJaW50IHJjOworCisJc2l0ZHBsbC0+b3Bz ID0gc2l0OTUzMXhfZHBsbF9kZXZpY2Vfb3BzOworCisJc2l0ZHBsbC0+ZHBsbF9kZXYgPSBkcGxs X2RldmljZV9nZXQoc2l0ZGV2LT5jbG9ja19pZCwgc2l0ZHBsbC0+aWQsCisJCQkJCSAgICBUSElT X01PRFVMRSwgJnNpdGRwbGwtPnRyYWNrZXIpOworCWlmIChJU19FUlIoc2l0ZHBsbC0+ZHBsbF9k ZXYpKSB7CisJCXJjID0gUFRSX0VSUihzaXRkcGxsLT5kcGxsX2Rldik7CisJCXNpdGRwbGwtPmRw bGxfZGV2ID0gTlVMTDsKKwkJcmV0dXJuIHJjOworCX0KKworCXJjID0gZHBsbF9kZXZpY2VfcmVn aXN0ZXIoc2l0ZHBsbC0+ZHBsbF9kZXYsCisJCQkJICBzaXQ5NTMxeF9wcm9wX2RwbGxfdHlwZV9n ZXQoc2l0ZGV2LAorCQkJCQkJCSAgICAgIHNpdGRwbGwtPmlkKSwKKwkJCQkgICZzaXRkcGxsLT5v cHMsIHNpdGRwbGwpOworCWlmIChyYykgeworCQlkcGxsX2RldmljZV9wdXQoc2l0ZHBsbC0+ZHBs bF9kZXYsICZzaXRkcGxsLT50cmFja2VyKTsKKwkJc2l0ZHBsbC0+ZHBsbF9kZXYgPSBOVUxMOwor CX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgc2l0OTUzMXhfZHBsbF9kZXZpY2Vf dW5yZWdpc3RlcihzdHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0ZHBsbCkKK3sKKwlkcGxsX2Rldmlj ZV91bnJlZ2lzdGVyKHNpdGRwbGwtPmRwbGxfZGV2LCAmc2l0ZHBsbC0+b3BzLCBzaXRkcGxsKTsK KwlkcGxsX2RldmljZV9wdXQoc2l0ZHBsbC0+ZHBsbF9kZXYsICZzaXRkcGxsLT50cmFja2VyKTsK KwlzaXRkcGxsLT5kcGxsX2RldiA9IE5VTEw7Cit9CisKKy8qCisgKiBzaXQ5NTMxeF9kcGxsX2Fs bG9jIC0gYWxsb2NhdGUgYSBEUExMIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBzaXRkZXY6CXBhcmVu dCBkZXZpY2UKKyAqIEBjaDoJCVBMTCBjaGFubmVsIG51bWJlciAoMC0zKQorICoKKyAqIFJldHVy bjogcG9pbnRlciB0byBhbGxvY2F0ZWQgRFBMTCBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9u IGVycm9yCisgKi8KK3N0cnVjdCBzaXQ5NTMxeF9kcGxsICpzaXQ5NTMxeF9kcGxsX2FsbG9jKHN0 cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggY2gpCit7CisJc3RydWN0IHNpdDk1MzF4X2Rw bGwgKnNpdGRwbGw7CisKKwlzaXRkcGxsID0ga3phbGxvY19vYmooKnNpdGRwbGwsIEdGUF9LRVJO RUwpOworCWlmICghc2l0ZHBsbCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzaXRk cGxsLT5kZXYgPSBzaXRkZXY7CisJc2l0ZHBsbC0+aWQgPSBjaDsKKwlzaXRkcGxsLT5sb2NrX3N0 YXR1cyA9IERQTExfTE9DS19TVEFUVVNfVU5MT0NLRUQ7CisJc2l0ZHBsbC0+bG9ja19zdGF0dXNf ZXJyb3IgPSBEUExMX0xPQ0tfU1RBVFVTX0VSUk9SX05PTkU7CisJSU5JVF9MSVNUX0hFQUQoJnNp dGRwbGwtPnBpbnMpOworCisJcmV0dXJuIHNpdGRwbGw7Cit9CisKKy8qCisgKiBzaXQ5NTMxeF9k cGxsX2ZyZWUgLSBkZWFsbG9jYXRlIGEgRFBMTCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAc2l0ZHBs bDoJRFBMTCB0byBmcmVlCisgKi8KK3ZvaWQgc2l0OTUzMXhfZHBsbF9mcmVlKHN0cnVjdCBzaXQ5 NTMxeF9kcGxsICpzaXRkcGxsKQoreworCWtmcmVlKHNpdGRwbGwpOworfQorCisvKgorICogc2l0 OTUzMXhfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBp bnMKKyAqCisgKiBSZWdpc3RlcnMgdGhlIERQTEwgZGV2aWNlIHdpdGggdGhlIHN1YnN5c3RlbSBh bmQgdGhlbiByZWdpc3RlcnMKKyAqIGFsbCBpbnB1dCBhbmQgb3V0cHV0IHBpbnMgdGhhdCBhcmUg Y29ubmVjdGVkIHRvIHRoaXMgUExMLgorICovCitpbnQgc2l0OTUzMXhfZHBsbF9yZWdpc3Rlcihz dHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0ZHBsbCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHNpdDk1 MzF4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyKHNpdGRwbGwpOworCWlmIChyYykKKwkJcmV0dXJuIHJj OworCisJc2l0OTUzMXhfZHBsbF9sb2NrX3N0YXR1c19iYXNlbGluZShzaXRkcGxsKTsKKworCXJj ID0gc2l0OTUzMXhfZHBsbF9waW5zX3JlZ2lzdGVyKHNpdGRwbGwpOworCWlmIChyYykgeworCQlz aXQ5NTMxeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHNpdGRwbGwpOworCQlyZXR1cm4gcmM7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKKy8qIHNpdDk1MzF4X2RwbGxfdW5yZWdpc3RlciAtIHVucmVn aXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGl0cyBwaW5zICovCit2b2lkIHNpdDk1MzF4X2RwbGxfdW5y ZWdpc3RlcihzdHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0ZHBsbCkKK3sKKwlzaXQ5NTMxeF9kcGxs X3BpbnNfdW5yZWdpc3RlcihzaXRkcGxsKTsKKwlzaXQ5NTMxeF9kcGxsX2RldmljZV91bnJlZ2lz dGVyKHNpdGRwbGwpOworfQorCitzdGF0aWMgdm9pZCBzaXQ5NTMxeF9kcGxsX2xpc3RfZnJlZShz dHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYpCit7CisJc3RydWN0IHNpdDk1MzF4X2RwbGwgKnNp dGRwbGwsICpuZXh0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpdGRwbGwsIG5leHQs ICZzaXRkZXYtPmRwbGxzLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZzaXRkcGxsLT5saXN0KTsKKwkJ c2l0OTUzMXhfZHBsbF9mcmVlKHNpdGRwbGwpOworCX0KK30KKworLyogUnVucyBvbmx5IG9uY2Ug dGhlIGRldmljZSBpcyBmdWxseSBzdGFydGVkLCBzZWUgdGhlIGNhbGxlci4gKi8KK3N0YXRpYyB2 b2lkIHNpdDk1MzF4X2Rldl9kcGxsX2Zpbmkodm9pZCAqcHRyKQoreworCXN0cnVjdCBzaXQ5NTMx eF9kZXYgKnNpdGRldiA9IHB0cjsKKworCXNpdDk1MzF4X2Rldl9zdG9wKHNpdGRldik7CisJa3Ro cmVhZF9kZXN0cm95X3dvcmtlcihzaXRkZXYtPmt3b3JrZXIpOworCXNpdDk1MzF4X2RwbGxfbGlz dF9mcmVlKHNpdGRldik7Cit9CisKK3N0YXRpYyBpbnQgc2l0OTUzMXhfZGV2bV9kcGxsX2luaXQo c3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2KQoreworCXN0cnVjdCBrdGhyZWFkX3dvcmtlciAq a3dvcmtlcjsKKwlzdHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0ZHBsbDsKKwl1bnNpZ25lZCBpbnQg aTsKKwlpbnQgcmM7CisKKwlJTklUX0xJU1RfSEVBRCgmc2l0ZGV2LT5kcGxscyk7CisJa3RocmVh ZF9pbml0X2RlbGF5ZWRfd29yaygmc2l0ZGV2LT53b3JrLCBzaXQ5NTMxeF9kZXZfcGVyaW9kaWNf d29yayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU0lUOTUzMVhfTlVNX1BMTFM7IGkrKykgeworCQlz aXRkcGxsID0gc2l0OTUzMXhfZHBsbF9hbGxvYyhzaXRkZXYsIGkpOworCQlpZiAoSVNfRVJSKHNp dGRwbGwpKSB7CisJCQlyYyA9IGRldl9lcnJfcHJvYmUoc2l0ZGV2LT5kZXYsIFBUUl9FUlIoc2l0 ZHBsbCksCisJCQkJCSAgICJGYWlsZWQgdG8gYWxsb2MgRFBMTCV1XG4iLCBpKTsKKwkJCWdvdG8g ZXJyX2ZyZWVfZHBsbHM7CisJCX0KKworCQlsaXN0X2FkZF90YWlsKCZzaXRkcGxsLT5saXN0LCAm c2l0ZGV2LT5kcGxscyk7CisJfQorCisJa3dvcmtlciA9IGt0aHJlYWRfcnVuX3dvcmtlcigwLCAi c2l0OTUzMXgtJXMiLCBkZXZfbmFtZShzaXRkZXYtPmRldikpOworCWlmIChJU19FUlIoa3dvcmtl cikpIHsKKwkJcmMgPSBQVFJfRVJSKGt3b3JrZXIpOworCQlnb3RvIGVycl9mcmVlX2RwbGxzOwor CX0KKwlzaXRkZXYtPmt3b3JrZXIgPSBrd29ya2VyOworCisJcmMgPSBzaXQ5NTMxeF9kZXZfc3Rh cnQoc2l0ZGV2KTsKKwlpZiAocmMpIHsKKwkJcmMgPSBkZXZfZXJyX3Byb2JlKHNpdGRldi0+ZGV2 LCByYywgIkZhaWxlZCB0byBzdGFydCBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9kZXN0cm95X3dv cmtlcjsKKwl9CisKKwkvKgorCSAqIE9ubHkgbm93IGlzIGV2ZXJ5IGZpZWxkIHRoZSBjbGVhbnVw IHRvdWNoZXMgdmFsaWQsIHNvIHRoaXMgaXMgdGhlCisJICogZmlyc3QgcG9pbnQgYXQgd2hpY2gg dGhlIGFjdGlvbiBtYXkgYmUgcmVnaXN0ZXJlZC4gIE9uIGZhaWx1cmUgaXQKKwkgKiBydW5zIHRo ZSBhY3Rpb24gaXRzZWxmLCB3aGljaCBpcyBjb3JyZWN0IGhlcmUgYW5kIG9ubHkgaGVyZS4KKwkg Ki8KKwlyZXR1cm4gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHNpdGRldi0+ZGV2LCBzaXQ5NTMx eF9kZXZfZHBsbF9maW5pLAorCQkJCQlzaXRkZXYpOworCitlcnJfZGVzdHJveV93b3JrZXI6CisJ a3RocmVhZF9kZXN0cm95X3dvcmtlcihzaXRkZXYtPmt3b3JrZXIpOworZXJyX2ZyZWVfZHBsbHM6 CisJc2l0OTUzMXhfZHBsbF9saXN0X2ZyZWUoc2l0ZGV2KTsKKworCXJldHVybiByYzsKK30KKwor LyoKKyAqIHNpdDk1MzF4X3JlYWRfdmFyaWFudF9pZCAtIHJlYWQgY2hpcCB2YXJpYW50IElEIGJ5 dGUgZnJvbSBoYXJkd2FyZQorICogQGlkOgkJb3V0cHV0IHZhcmlhbnQgSUQgYnl0ZQorICoKKyAq IFJlYWRzIHRoZSBzaW5nbGUtYnl0ZSB2YXJpYW50IGlkZW50aWZpY2F0aW9uIHJlZ2lzdGVyIGZy b20gUGFnZSAwCisgKiByZWcgMHgwMiAoOTUzMTcgPSAweDE3LCA5NTMxNiA9IDB4MzEpLiAgUmVn IDB4MDMgaG9sZHMgYSBzZXBhcmF0ZQorICogcmV2aXNpb24gYnl0ZSBhbmQgaXMgaW50ZW50aW9u YWxseSBub3QgY29uc3VtZWQgaGVyZS4KKyAqLworc3RhdGljIGludCBzaXQ5NTMxeF9yZWFkX3Zh cmlhbnRfaWQoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LCB1OCAqaWQpCit7CisJcmV0dXJu IHNpdDk1MzF4X3JlYWRfdTgoc2l0ZGV2LCBTSVQ5NTMxWF9SRUdfVkFSSUFOVF9JRCwgaWQpOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNpdDk1MzF4X2NoaXBfaW5mbyAqc2l0OTUzMXhfbWF0 Y2hfdmFyaWFudCh1OCBpZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKHNpdDk1MzF4X2NoaXBfaWRzKTsgaSsrKSB7CisJCWlmIChzaXQ5NTMxeF9j aGlwX2lkc1tpXS5pZCA9PSBpZCkKKwkJCXJldHVybiAmc2l0OTUzMXhfY2hpcF9pZHNbaV07CisJ fQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBzaXQ5NTMxeF9kZXJpdmVfY2xvY2tfaWQg LSBidWlsZCBFVUktNjQgY2xvY2sgaWRlbnRpZmllcgorICoKKyAqIEdlbmVyYXRlcyBhIGRldGVy bWluaXN0aWMgNjQtYml0IGlkZW50aWZpZXIgZnJvbSB0aGUgU2lUaW1lIE9VSSwKKyAqIHRoZSBJ MkMgYnVzIG51bWJlciBhbmQgdGhlIEkyQyBhZGRyZXNzLiAgVGhlIGJ1cyBudW1iZXIKKyAqIGRp c2FtYmlndWF0ZXMgdHdvIHNhbWUtdmFyaWFudCBwYXJ0cyBhdCB0aGUgc2FtZSBhZGRyZXNzIG9u CisgKiBkaWZmZXJlbnQgYWRhcHRlcnMgKG9yIGJlaGluZCBhIG11eCksIHdoaWNoIHRoZSBEUExM IGNvcmUgd291bGQKKyAqIG90aGVyd2lzZSBmb2xkIG9udG8gb25lIHNldCBvZiBvYmplY3RzOyBE VCBidXMgYWxpYXNlcyBrZWVwIHRoZQorICogbnVtYmVyaW5nLCBhbmQgd2l0aCBpdCB0aGUgY2xv Y2tfaWQsIHN0YWJsZSBhY3Jvc3MgcmVib290cy4KKyAqCisgKiBSZXR1cm46IDY0LWJpdCBjbG9j ayBpZGVudGlmaWVyCisgKi8KK3N0YXRpYyB1NjQgc2l0OTUzMXhfZGVyaXZlX2Nsb2NrX2lkKHN0 cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldikKK3sKKwl1NjQgY2xraWQ7CisJaW50IGFkYXA7CisK KwlhZGFwID0gaTJjX2FkYXB0ZXJfaWQoc2l0ZGV2LT5jbGllbnQtPmFkYXB0ZXIpOworCisJLyoK KwkgKiBUaGUgT1VJIHdpdGggaXRzIEVVSS02NCBmaWxsZXIgdGFrZXMgdGhlIHRvcCA0MCBiaXRz LiAgQnVzIG51bWJlcnMKKwkgKiBhcmUgbm90IGJvdW5kZWQgYnkgdGhlIG51bWJlciBvZiBhZGFw dGVycyAtLSBhIERUIGFsaWFzIG9yIGEgbXV4CisJICogY2hpbGQgY2FuIG51bWJlciBhIGJ1cyAy NTYgb3IgYWJvdmUgb24gYSBib2FyZCB3aXRoIGEgaGFuZGZ1bCBvZgorCSAqIHRoZW0gLS0gc28g dGhlIGJ1cyBnZXRzIDE2IGJpdHMuICBUaGUgdmFyaWFudCBkb2VzIG5vdCBuZWVkIGEKKwkgKiBm aWVsZDogb25lIGFkZHJlc3Mgb24gb25lIGJ1cyBob2xkcyBvbmUgcGFydC4KKwkgKi8KKwljbGtp ZCAgPSBTSVQ5NTMxWF9PVUkgPDwgMjQ7CisJY2xraWQgfD0gKHU2NCkoYWRhcCAmIDB4ZmZmZikg PDwgODsKKwljbGtpZCB8PSAodTY0KXNpdGRldi0+Y2xpZW50LT5hZGRyOworCisJcmV0dXJuIGNs a2lkOworfQorCitzdGF0aWMgaW50IHNpdDk1MzF4X2Rldl9wcm9iZShzdHJ1Y3Qgc2l0OTUzMXhf ZGV2ICpzaXRkZXYpCit7CisJc3RydWN0IGNsayAqeHRhbF9jbGs7CisJdTggdmFyaWFudF9pZDsK KwlpbnQgcmM7CisKKwkvKgorCSAqIEZ2Y28gPSBGcmVmICogKERJVk4gKyBmcmFjLzJeMzIpIHdp dGggRnJlZiA9IHh0YWxfZnJlcSA8PCBkb3VibGVyLAorCSAqIHNvIGV2ZXJ5IGZyZXFfc2V0IGFu ZCBwaGFzZV9hZGp1c3QgcGF0aCBkaXZpZGVzIGJ5IGEgcmF0ZSBkZXJpdmVkCisJICogZnJvbSB0 aGUgWE8gZmVlZGluZyBYSU4vWE9fQ0xLLiAgVGhlIHJhdGUgbm9ybWFsbHkgY29tZXMgZnJvbSBh CisJICogImNsb2NrcyIgcGhhbmRsZSAoY2xvY2stbmFtZXMgPSAieHRhbCIpLiAgT24gcGxhdGZv cm1zIHdoZXJlIHRoZQorCSAqIGZpcm13YXJlIGRvZXMgbm90IGV4cG9zZSB0aGUgWE8gdGhyb3Vn aCB0aGUgY2xvY2sgZnJhbWV3b3JrLCBmYWxsCisJICogYmFjayB0byBhICJjbG9jay1mcmVxdWVu Y3kiIGRldmljZSBwcm9wZXJ0eS4KKwkgKi8KKwl4dGFsX2NsayA9IGRldm1fY2xrX2dldF9vcHRp b25hbF9lbmFibGVkKHNpdGRldi0+ZGV2LCAieHRhbCIpOworCWlmIChJU19FUlIoeHRhbF9jbGsp KQorCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShzaXRkZXYtPmRldiwgUFRSX0VSUih4dGFsX2Nsayks CisJCQkJICAgICAiRmFpbGVkIHRvIGdldCB4dGFsIGNsb2NrXG4iKTsKKwlzaXRkZXYtPnh0YWxf ZnJlcSA9IGNsa19nZXRfcmF0ZSh4dGFsX2Nsayk7CisJaWYgKCFzaXRkZXYtPnh0YWxfZnJlcSkg eworCQl1MzIgZnJlcTsKKworCQlpZiAoIWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihzaXRkZXYt PmRldiwgImNsb2NrLWZyZXF1ZW5jeSIsCisJCQkJCSAgICAgICZmcmVxKSkKKwkJCXNpdGRldi0+ eHRhbF9mcmVxID0gZnJlcTsKKwl9CisJaWYgKCFzaXRkZXYtPnh0YWxfZnJlcSkKKwkJcmV0dXJu IGRldl9lcnJfcHJvYmUoc2l0ZGV2LT5kZXYsIC1FSU5WQUwsCisJCQkJICAgICAibm8geHRhbCBy YXRlOiBwcm92aWRlIGNsb2Nrcz08JnhvPiArIGNsb2NrLW5hbWVzPVwieHRhbFwiLCBvciBhIGNs b2NrLWZyZXF1ZW5jeSBwcm9wZXJ0eVxuIik7CisKKwkvKgorCSAqIEhlbGQgZGVhc3NlcnRlZCwg bmV2ZXIgcHVsc2VkOiB0aGUgY2hpcCBjb25maWd1cmF0aW9uIGNvbWVzIGZyb20KKwkgKiBlZnVz ZSBvciBhbiBOVk0gYmxvYiBhcHBsaWVkIGJlZm9yZSBwcm9iZSwgYW5kIGEgcmVzZXQgd291bGQK KwkgKiBkaXNjYXJkIGl0LiAgTXVzdCBwcmVjZWRlIHRoZSBmaXJzdCBJMkMgYWNjZXNzLCBhcyBh IGJvYXJkIHRoYXQKKwkgKiBwb3dlcnMgdXAgYXNzZXJ0ZWQga2VlcHMgdGhlIGNoaXAgdW5yZWFj aGFibGUgdW50aWwgcmVsZWFzZWQuCisJICovCisJc2l0ZGV2LT5yZXNldF9ncGlvID0gZGV2bV9n cGlvZF9nZXRfb3B0aW9uYWwoc2l0ZGV2LT5kZXYsICJyZXNldCIsCisJCQkJCQkgICAgIEdQSU9E X09VVF9MT1cpOworCWlmIChJU19FUlIoc2l0ZGV2LT5yZXNldF9ncGlvKSkKKwkJcmV0dXJuIGRl dl9lcnJfcHJvYmUoc2l0ZGV2LT5kZXYsIFBUUl9FUlIoc2l0ZGV2LT5yZXNldF9ncGlvKSwKKwkJ CQkgICAgICJGYWlsZWQgdG8gcmVxdWVzdCByZXNldCBncGlvXG4iKTsKKwlpZiAoc2l0ZGV2LT5y ZXNldF9ncGlvKQorCQlmc2xlZXAoMTAwMDApOwkvKiBpbnRlcm5hbCBib290IGFmdGVyIHJlbGVh c2UgKi8KKworCXJjID0gc2l0OTUzMXhfcmVhZF92YXJpYW50X2lkKHNpdGRldiwgJnZhcmlhbnRf aWQpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJc2l0ZGV2LT5pbmZvID0gc2l0OTUzMXhf bWF0Y2hfdmFyaWFudCh2YXJpYW50X2lkKTsKKwlpZiAoIXNpdGRldi0+aW5mbykKKwkJcmV0dXJu IGRldl9lcnJfcHJvYmUoc2l0ZGV2LT5kZXYsIC1FTk9ERVYsCisJCQkJICAgICAiVW5rbm93biB2 YXJpYW50IElEOiAweCUwMnhcbiIsCisJCQkJICAgICB2YXJpYW50X2lkKTsKKworCXNpdGRldi0+ Y2xvY2tfaWQgPSBzaXQ5NTMxeF9kZXJpdmVfY2xvY2tfaWQoc2l0ZGV2KTsKKwlzaXRkZXYtPmlu dHN5bmNfc3JjID0gLTE7CisKKwlyYyA9IGRldm1fbXV0ZXhfaW5pdChzaXRkZXYtPmRldiwgJnNp dGRldi0+bXVsdGlvcF9sb2NrKTsKKwlpZiAocmMpCisJCXJldHVybiBkZXZfZXJyX3Byb2JlKHNp dGRldi0+ZGV2LCByYywKKwkJCQkgICAgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuIik7 CisKKwlkZXZfaW5mbyhzaXRkZXYtPmRldiwgIiVzIGRldGVjdGVkLCAldSBpbnB1dHMsICV1IG91 dHB1dHNcbiIsCisJCSBzaXRkZXYtPmluZm8tPm5hbWUsIHNpdGRldi0+aW5mby0+bnVtX2lucHV0 cywKKwkJIHNpdGRldi0+aW5mby0+bnVtX291dHB1dHMpOworCisJLyoKKwkgKiBCZWZvcmUgdGhl IElSUTogdGhlIGhhbmRsZXIgcmVhY2hlcyBzaXRkZXYtPmt3b3JrZXIgdGhyb3VnaAorCSAqIGt0 aHJlYWRfbW9kX2RlbGF5ZWRfd29yaygpLCBzbyB0aGUgd29ya2VyIGhhcyB0byBleGlzdCBiZWZv cmUgYW4KKwkgKiBJTlRSQiBhc3NlcnRpb24gY2FuIGxhbmQuCisJICovCisJcmMgPSBzaXQ5NTMx eF9kZXZtX2RwbGxfaW5pdChzaXRkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyog QWJzZW50ICJpbnRlcnJ1cHRzIiBsZWF2ZXMgY2xpZW50LT5pcnEgMCBhbmQgdGhlIHBvbGwgaW4g Y2hhcmdlLiAqLworCXNpdGRldi0+aXJxID0gc2l0ZGV2LT5jbGllbnQgPyBzaXRkZXYtPmNsaWVu dC0+aXJxIDogMDsKKwlpZiAoc2l0ZGV2LT5pcnEgPiAwKSB7CisJCXJjID0gZGV2bV9yZXF1ZXN0 X3RocmVhZGVkX2lycShzaXRkZXYtPmRldiwgc2l0ZGV2LT5pcnEsCisJCQkJCSAgICAgICBOVUxM LCBzaXQ5NTMxeF9pcnFfdGhyZWFkX2ZuLAorCQkJCQkgICAgICAgSVJRRl9PTkVTSE9ULAorCQkJ CQkgICAgICAgZGV2X25hbWUoc2l0ZGV2LT5kZXYpLCBzaXRkZXYpOworCQlpZiAocmMpCisJCQly ZXR1cm4gZGV2X2Vycl9wcm9iZShzaXRkZXYtPmRldiwgcmMsCisJCQkJCSAgICAgIkZhaWxlZCB0 byByZXF1ZXN0IElSUSAlZFxuIiwKKwkJCQkJICAgICBzaXRkZXYtPmlycSk7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2l0OTUzMXhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xp ZW50ICpjbGllbnQpCit7CisJc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2OworCXN0cnVjdCBy ZWdtYXAgKnJlZ21hcDsKKworCXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwg JnNpdDk1MzF4X3JlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIocmVnbWFwKSkKKwkJcmV0dXJu IGRldl9lcnJfcHJvYmUoJmNsaWVudC0+ZGV2LCBQVFJfRVJSKHJlZ21hcCksCisJCQkJICAgICAi RmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwXG4iKTsKKworCXNpdGRldiA9IGRldm1fa3phbGxv YygmY2xpZW50LT5kZXYsIHNpemVvZigqc2l0ZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzaXRk ZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJc2l0ZGV2LT5kZXYgPSAmY2xpZW50LT5kZXY7CisJ c2l0ZGV2LT5jbGllbnQgPSBjbGllbnQ7CisJc2l0ZGV2LT5yZWdtYXAgPSByZWdtYXA7CisJaTJj X3NldF9jbGllbnRkYXRhKGNsaWVudCwgc2l0ZGV2KTsKKworCXJldHVybiBzaXQ5NTMxeF9kZXZf cHJvYmUoc2l0ZGV2KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2l0 OTUzMXhfb2ZfbWF0Y2hbXSA9IHsKQEAgLTMwNSwxMCArMTkwNiw0NSBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCBzaXQ5NTMxeF9vZl9tYXRjaFtdID0gewogfTsKIE1PRFVMRV9E RVZJQ0VfVEFCTEUob2YsIHNpdDk1MzF4X29mX21hdGNoKTsKIAorLyoKKyAqIFRoZSBwb2xsIHdv cmtlciBpcyBub3QgZnJlZXphYmxlIGFuZCB3b3VsZCBrZWVwIGlzc3VpbmcgcGFnZWQgSTJDCisg KiB0cmFuc2ZlcnMgaW50byBhIHN1c3BlbmRlZCBhZGFwdGVyLCB3aGVyZSBpMmNfdHJhbnNmZXIo KSBmYWlscyBhbmQgYQorICogdGljayBsYW5kaW5nIG1pZC1zdXNwZW5kIGNvdWxkIHRlYXIgYSBw YWdlZCBzZXF1ZW5jZSBiZXR3ZWVuIHRoZQorICogcGFnZS1zZWxlY3RvciB3cml0ZSBhbmQgdGhl IHJlZ2lzdGVyIGFjY2Vzcy4gIFBhcmsgdGhlIHdvcmtlciAoYW5kCisgKiB0aGUgSVJRIHRoYXQg a2lja3MgaXQpIGFjcm9zcyBzdXNwZW5kIGFuZCB0YWtlIGEgZnJlc2ggc2FtcGxlIG9uCisgKiBy ZXN1bWUuCisgKi8KK3N0YXRpYyBpbnQgc2l0OTUzMXhfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpk ZXYpCit7CisJc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRl dik7CisKKwlpZiAoc2l0ZGV2LT5pcnEgPiAwKQorCQlkaXNhYmxlX2lycShzaXRkZXYtPmlycSk7 CisJa3RocmVhZF9jYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNpdGRldi0+d29yayk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXQ5NTMxeF9yZXN1bWUoc3RydWN0IGRldmljZSAq ZGV2KQoreworCXN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOworCisJc2l0OTUzMXhfcGFnZV9jYWNoZV9kcm9wKHNpdGRldik7CisJaWYgKHNpdGRldi0+ aXJxID4gMCkKKwkJZW5hYmxlX2lycShzaXRkZXYtPmlycSk7CisJa3RocmVhZF9xdWV1ZV9kZWxh eWVkX3dvcmsoc2l0ZGV2LT5rd29ya2VyLCAmc2l0ZGV2LT53b3JrLCAwKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKHNpdDk1MzF4X3BtX29wcywK KwkJCQlzaXQ5NTMxeF9zdXNwZW5kLCBzaXQ5NTMxeF9yZXN1bWUpOworCiBzdGF0aWMgc3RydWN0 IGkyY19kcml2ZXIgc2l0OTUzMXhfaTJjX2RyaXZlciA9IHsKIAkuZHJpdmVyCQkJPSB7CiAJCS5u YW1lCQk9ICJzaXQ5NTMxeCIsCiAJCS5vZl9tYXRjaF90YWJsZQk9IHNpdDk1MzF4X29mX21hdGNo LAorCQkucG0JCT0gcG1fc2xlZXBfcHRyKCZzaXQ5NTMxeF9wbV9vcHMpLAogCX0sCiAJLnByb2Jl CQk9IHNpdDk1MzF4X2kyY19wcm9iZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvc2l0 OTUzMXgvY29yZS5oIGIvZHJpdmVycy9kcGxsL3NpdDk1MzF4L2NvcmUuaAppbmRleCA2ZTM3NjAx YzhjNTkuLmM4ODgyMmQ1NDJjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3NpdDk1MzF4L2Nv cmUuaAorKysgYi9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvY29yZS5oCkBAIC0xNSw2ICsxNSw4IEBA CiAKICNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJj Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4K ICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgogI2lu Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0zNCw2ICszNiwxNSBAQAogICovCiAjZGVmaW5lIFNJ VDk1MzFYX0lOVFNZTkNfUElOX0lECQkoU0lUOTUzMVhfTUFYX0lOUFVUUyArIDEpCiAjZGVmaW5l IFNJVDk1MzFYX0lOVFNZTkNfT1VUX1BJTl9JRAlTSVQ5NTMxWF9NQVhfT1VUUFVUUworI2RlZmlu ZSBTSVQ5NTMxWF9TVEFUVVNfUE9MTF9NUwkJNTAwCisKKy8qIHNlbGVjdGVkX3JlZiB2YWx1ZSB3 aGVuIHRoZSBhY3RpdmUgc291cmNlIGlzIG5vdCBhIHJlZ2lzdGVyZWQgaW5wdXQgKi8KKyNkZWZp bmUgU0lUOTUzMVhfUkVGX0lOVkFMSUQJCTB4RkYKKworLyogU2lUaW1lIElFRUUgT1VJIGZvciBF VUktNjQgZ2VuZXJhdGlvbiAqLworI2RlZmluZSBTSVQ5NTMxWF9PVUkJCQkweDAwOTBDMkZGRkVV TEwKKworc3RydWN0IHNpdDk1MzF4X2RwbGw7CiAKIC8qCiAgKiBzdHJ1Y3Qgc2l0OTUzMXhfY2hp cF9pbmZvIC0gY2hpcCB2YXJpYW50IGlkZW50aWZpY2F0aW9uCkBAIC02NCwzMyArNzUsMTA1IEBA IGVudW0gc2l0OTUzMXhfc2lnbmFsX21vZGUgewogLyoKICAqIHN0cnVjdCBzaXQ5NTMxeF9yZWYg LSBpbnB1dCByZWZlcmVuY2Ugc3RhdGUKICAqIEBmcmVxOgkJY29uZmlndXJlZCBmcmVxdWVuY3kg aW4gSHoKKyAqIEBlbmFibGVkOgkJdGhlIGxhbmUncyByZWNlaXZlciBpcyBvbgorICogQHBsbF9t YXNrOgkJYml0bWFzayBvZiBQTExzIHRoaXMgaW5wdXQgZmVlZHMgKGJpdCAwID0gUExMQSkKICAq IEBzaWdfbW9kZToJCXNpZ25hbCBtb2RlIG9mIHRoZSBwYWlyIHRoaXMgbGFuZSBiZWxvbmdzIHRv CiAgKgkJCShkZXRlY3RlZCBmcm9tIENMS0lOeF9JTlBVVF9NT0RFIGF0IHByb2JlKQogICovCiBz dHJ1Y3Qgc2l0OTUzMXhfcmVmIHsKIAl1NjQJCWZyZXE7CisJYm9vbAkJZW5hYmxlZDsKKwl1OAkJ cGxsX21hc2s7CiAJZW51bSBzaXQ5NTMxeF9zaWduYWxfbW9kZQlzaWdfbW9kZTsKIH07CiAKIC8q CiAgKiBzdHJ1Y3Qgc2l0OTUzMXhfb3V0IC0gb3V0cHV0IHN0YXRlCi0gKiBAZnJlcToJCWNvbmZp Z3VyZWQgZnJlcXVlbmN5IGluIEh6CisgKiBAZnJlcToJCXJhdGUgdGhlIG91dHB1dCBpcyBydW5u aW5nIGF0LCBpbiBIegorICogQGVuYWJsZWQ6CQlvdXRwdXQgaXMgZHJpdmluZywgaS5lLiBub3Qg Zm9yY2VkIGludG8gSGktWgorICogQGNtb3M6CQlvdXRwdXQgaXMgd2lyZWQgc2luZ2xlLWVuZGVk OyB0aGUgSGktWiBwYWlycyB0aGF0CisgKgkJCXNwZWFrIGZvciBpdCBhcmUgdGhlIHR3byBDTU9T IHBhZCBvbmVzLCBub3QgdGhlCisgKgkJCWRpZmZlcmVudGlhbAorICogQHJvdXRlZDoJCW91dHB1 dCBpcyBtYXBwZWQgdG8gQHBsbF9pZHggYnkgdGhlIGluaXRpYWwKKyAqCQkJY29uZmlndXJhdGlv bjsgYW4gdW5yb3V0ZWQgb3V0cHV0IGhhcyBubyBEUExMIHBpbgorICogQHBsbF9pZHg6CQlQTEwg ZHJpdmluZyB0aGlzIG91dHB1dCAoMC0zKQogICovCiBzdHJ1Y3Qgc2l0OTUzMXhfb3V0IHsKIAl1 NjQJCWZyZXE7CisJYm9vbAkJZW5hYmxlZDsKKwlib29sCQljbW9zOworCWJvb2wJCXJvdXRlZDsK Kwl1OAkJcGxsX2lkeDsKK307CisKKy8qCisgKiBzdHJ1Y3Qgc2l0OTUzMXhfY2hhbiAtIHBlci1Q TEwgY2hhbm5lbCBzdGF0ZQorICogQGFjdGl2ZToJCVBMTCBoYXMgcmVhY2hlZCBpdHMgYWN0aXZl IHN0YXRlOyBhIFBMTCB0aGUgbG9hZGVkCisgKgkJCWNvbmZpZ3VyYXRpb24gbGVhdmVzIHVudXNl ZCBuZXZlciBkb2VzLCBhbmQgaXRzCisgKgkJCWxvc3Mtb2YtbG9jayBiaXQgc3RheXMgY2xlYXIg YmVjYXVzZSBub3RoaW5nIGRyaXZlcyBpdAorICogQGxvY2tlZDoJCVBMTCBpcyBhY3RpdmUgYW5k IGl0cyBvdXRlciBsb29wIHJlcG9ydHMgbG9jaworICogQG1vZGU6CQkwID0gc3luYyAob3V0ZXIg bG9vcCBlbmFibGVkKSwgMSA9IGZyZWUtcnVuCisgKiBAc2VsZWN0ZWRfcmVmOglsb2dpY2FsIGlu cHV0IGluZGV4IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQKKyAqCQkJcmVmZXJlbmNlICh0aGUg SU5UU1lOQyBuZXQgbWFwcyB0bworICoJCQlTSVQ5NTMxWF9JTlRTWU5DX1BJTl9JRCksIG9yIFNJ VDk1MzFYX1JFRl9JTlZBTElECisgKgkJCXdoZW4gdGhlIGhhcmR3YXJlIHNvdXJjZSBlbmNvZGlu ZyBpcyByZXNlcnZlZAorICogQGlubmVyX2xvbDoJCVBMTCBpbm5lciBsb29wIGxvc3Mtb2YtbG9j ayBkZXRlY3RlZAorICogQGhvX2ZyZWV6ZToJCWhvbGRvdmVyIGZyZWV6ZSBhY3RpdmUKKyAqIEBo b192YWxpZDoJCWhvbGRvdmVyIG1lbW9yeSBhY3F1aXJlZCwgaS5lLiB0aGUgaG9sZG92ZXIgd2lu ZG93CisgKgkJCWhvbGRzIGEgdmFsaWQgZXN0aW1hdGUgdG8gZmFsbCBiYWNrIG9uCisgKiBAcHJp b19tYXNrOgkJYml0IHBlciBoYXJkd2FyZSBzb3VyY2UgY29kZSBwcmVzZW50IGluIHRoaXMgUExM J3MKKyAqCQkJcHJpb3JpdHkgdGFibGUsIGkuZS4gdGhlIHNvdXJjZXMgaXQgbWF5IHNlbGVjdC4g IFJlYWQKKyAqCQkJYmFjayBmcm9tIHRoZSB0YWJsZSBieSB0aGUgcGVyaW9kaWMgd29ya2VyIGFu ZAorICoJCQlyZWZyZXNoZWQgYnkgZXZlcnkgdGFibGUgd3JpdGUsIHNvIGl0IHRyYWNrcyB0aGUK KyAqCQkJaGFyZHdhcmUgcmF0aGVyIHRoYW4gdGhlIGRyaXZlcidzIGludGVudAorICogQGNmZ19w cmlvOgkJcHJpb3JpdHkgY29uZmlndXJlZCBmb3IgZWFjaCBjYW5vbmljYWwgc291cmNlLAorICoJ CQl3aGV0aGVyIG9yIG5vdCBpdCBpcyBpbiB0aGUgdGFibGU7IHRoZSB0YWJsZSBpcworICoJCQli dWlsdCBmcm9tIGl0LCBzbyB0YWtpbmcgYSBzb3VyY2Ugb3V0IGFuZCBwdXR0aW5nIGl0CisgKgkJ CWJhY2sgZG9lcyBub3QgY2hhbmdlIGFueW9uZSdzIHByaW9yaXR5CisgKiBAY2ZnX2tub3duOgkJ Yml0IHBlciBjYW5vbmljYWwgc291cmNlIHRoYXQgaGFzIGEgQGNmZ19wcmlvCisgKiBAc2Vlbl9z cmNzOgkJdGhlIHRhYmxlIGFzIHRoZSBkcml2ZXIgbGFzdCB3cm90ZSBvciBzZWVkZWQKKyAqCQkJ QGNmZ19wcmlvIGZyb207IGEgcmVhZC1iYWNrIHRoYXQgZGlmZmVycyBtZWFucworICoJCQlzb21l dGhpbmcgZWxzZSByZXdyb3RlIGl0LCBhbmQgQGNmZ19wcmlvIGlzCisgKgkJCXJlLXNlZWRlZCBm cm9tIHRoZSBoYXJkd2FyZQorICogQHNlZW5fdmFsaWQ6CQlAc2Vlbl9zcmNzIGhvbGRzIGEgdGFi bGUKKyAqLworc3RydWN0IHNpdDk1MzF4X2NoYW4geworCWJvb2wJCWFjdGl2ZTsKKwlib29sCQls b2NrZWQ7CisJdTgJCW1vZGU7CisJdTgJCXNlbGVjdGVkX3JlZjsKKwlib29sCQlpbm5lcl9sb2w7 CisJYm9vbAkJaG9fZnJlZXplOworCWJvb2wJCWhvX3ZhbGlkOworCXUxNgkJcHJpb19tYXNrOwor CXU4CQljZmdfcHJpb1tTSVQ5NTMxWF9QUklPX05VTV9TUkNdOworCXUxNgkJY2ZnX2tub3duOwor CXU4CQlzZWVuX3NyY3NbU0lUOTUzMVhfUFJJT19NQVhfU0xPVFNdOworCWJvb2wJCXNlZW5fdmFs aWQ7CiB9OwogCiAvKgogICogc3RydWN0IHNpdDk1MzF4X2RldiAtIFNpVDk1MzF4IGRldmljZSBp bnN0YW5jZQotICogQGRldjoJCXBhcmVudCBkZXZpY2UKLSAqIEBjbGllbnQ6CQlJMkMgY2xpZW50 Ci0gKiBAcmVnbWFwOgkJcGFnZWQgcmVnaXN0ZXIgbWFwCiAgKiBAaW5mbzoJCWRldGVjdGVkIGNo aXAgdmFyaWFudCBpbmZvCi0gKiBAbXVsdGlvcF9sb2NrOglzZXJpYWxpemVzIG11bHRpLXJlZ2lz dGVyIHNlcXVlbmNlcworICogQGRldjoJCXBhcmVudCBkZXZpY2UKKyAqIEBjbGllbnQ6CQlJMkMg Y2xpZW50IGJhY2tpbmcgQHJlZ21hcAorICogQHJlZ21hcDoJCXBhZ2VkIHJlZ2lzdGVyIG1hcCBv ZiB0aGUgZGV2aWNlCisgKiBAZHBsbHM6CQlEUExMIGRldmljZXMgcmVnaXN0ZXJlZCBmb3IgdGhp cyBjaGlwCisgKiBAbXVsdGlvcF9sb2NrOgltdXRleCBmb3IgbXVsdGktcmVnaXN0ZXIgYXRvbWlj IG9wZXJhdGlvbnMKICAqIEByZWY6CQlhcnJheSBvZiBpbnB1dCByZWZlcmVuY2Ugc3RhdGVzCiAg KiBAb3V0OgkJYXJyYXkgb2Ygb3V0cHV0IHN0YXRlcworICogQGNoYW46CQlhcnJheSBvZiBwZXIt UExMIGNoYW5uZWwgc3RhdGVzCiAgKiBAeHRhbF9mcmVxOgkJY3J5c3RhbCBvc2NpbGxhdG9yIGZy ZXF1ZW5jeSBpbiBIegorICogQGt3b3JrZXI6CQlrdGhyZWFkIHdvcmtlciBmb3IgcGVyaW9kaWMg cG9sbGluZworICogQHdvcms6CQlkZWxheWVkIHdvcmsgZm9yIHBlcmlvZGljIHN0YXRlIGNoZWNr cworICogQGNsb2NrX2lkOgkJSUVFRSAxNTg4IEVVSS02NCBjbG9jayBpZGVudGlmaWVyCiAgKiBA cmVzZXRfZ3BpbzoJCW9wdGlvbmFsIHJlc2V0IGxpbmUgKERUICJyZXNldC1ncGlvcyIpLCBOVUxM IGlmIGFic2VudAorICogQGlycToJCW9wdGlvbmFsIElOVFJCIElSUSBudW1iZXIgKGZyb20gRFQg ImludGVycnVwdHMiIHZpYSB0aGUKKyAqCQkJSTJDIGNsaWVudCksIDAgaWYgbm8gSVJRIGlzIHdp cmVkCisgKiBAaW50c3luY19zcmM6CVBMTCBpbmRleCBjdXJyZW50bHkgc291cmNpbmcgaW50ZXIt UExMCisgKgkJCXN5bmNocm9uaXphdGlvbiAoSU5UU1lOQyksIG9yIC0xIHdoZW4gZGlzYWJsZWQK KyAqIEBpcnFfYWNrX2ZhaWxzOgljb25zZWN1dGl2ZSBmYWlsdXJlcyB0byBhY2tub3dsZWRnZSB0 aGUKKyAqCQkJbm90aWZpY2F0aW9uIGxhdGNoZXMgZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXIK ICAqLwogc3RydWN0IHNpdDk1MzF4X2RldiB7CiAJc3RydWN0IGRldmljZQkJCSpkZXY7CkBAIC0x MDEsMTMgKzE4NCw2OCBAQCBzdHJ1Y3Qgc2l0OTUzMXhfZGV2IHsKIAlzdHJ1Y3QgbXV0ZXgJCQlt dWx0aW9wX2xvY2s7CiAKIAkvKiBIYXJkd2FyZSBzdGF0ZSAqLworCXU4CQkJaXJxX2Fja19mYWls czsKIAlzdHJ1Y3Qgc2l0OTUzMXhfcmVmCXJlZltTSVQ5NTMxWF9NQVhfSU5QVVRTICsgMV07IC8q ICsxIGZvciB4dGFsICovCiAJc3RydWN0IHNpdDk1MzF4X291dAlvdXRbU0lUOTUzMVhfTUFYX09V VFBVVFNdOworCXN0cnVjdCBzaXQ5NTMxeF9jaGFuCWNoYW5bU0lUOTUzMVhfTlVNX1BMTFNdOwog CXUzMgkJCXh0YWxfZnJlcTsKIAorCS8qIERQTEwgY2hhbm5lbHMgKi8KKwlzdHJ1Y3QgbGlzdF9o ZWFkCWRwbGxzOworCisJLyogTW9uaXRvciAqLworCXN0cnVjdCBrdGhyZWFkX3dvcmtlcgkJKmt3 b3JrZXI7CisJc3RydWN0IGt0aHJlYWRfZGVsYXllZF93b3JrCXdvcms7CisKKwkvKiBEZXZpY2Ug aWRlbnRpdHkgKi8KKwl1NjQJCQljbG9ja19pZDsKKworCS8qIE9wdGlvbmFsIERULWRlc2NyaWJl ZCBHUElPIC8gSVJRIGxpbmVzICovCiAJc3RydWN0IGdwaW9fZGVzYwkqcmVzZXRfZ3BpbzsKKwlp bnQJCQlpcnE7CisKKwkvKiBJbnRlci1QTEwgc3luY2hyb25pemF0aW9uIHN0YXRlICovCisJczgJ CQlpbnRzeW5jX3NyYzsKKwogfTsKIAorLyogLS0tLSBSZWdpc3RlciBhY2Nlc3MgLS0tLSAqLwor aW50IHNpdDk1MzF4X3JlYWRfdTgoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LCB1bnNpZ25l ZCBpbnQgcmVnLAorCQkgICAgIHU4ICp2YWwpOworaW50IHNpdDk1MzF4X3dyaXRlX3U4KHN0cnVj dCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdW5zaWduZWQgaW50IHJlZywKKwkJICAgICAgdTggdmFs KTsKK2ludCBzaXQ5NTMxeF9yZWFkX3BsbF91OChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYs IHU4IHBsbF9pZHgsCisJCQkgdTggb2Zmc2V0LCB1OCAqdmFsKTsKK2ludCBzaXQ5NTMxeF93cml0 ZV9wbGxfdTgoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LCB1OCBwbGxfaWR4LAorCQkJICB1 OCBvZmZzZXQsIHU4IHZhbCk7CitpbnQgc2l0OTUzMXhfdXBkYXRlX3BsbF91OChzdHJ1Y3Qgc2l0 OTUzMXhfZGV2ICpzaXRkZXYsIHU4IHBsbF9pZHgsCisJCQkgICB1OCBvZmZzZXQsIHU4IG1hc2ss IHU4IHZhbCk7CisKKy8qIC0tLS0gSW5wdXQgZW5hYmxlL2Rpc2FibGUgLS0tLSAqLworCisvKiAt LS0tIElucHV0IHByaW9yaXR5IC0tLS0gKi8KKworLyogLS0tLSBPdXRwdXQgZW5hYmxlL2Rpc2Fi bGUgKEhpLVogY29udHJvbCkgLS0tLSAqLworCisvKiAtLS0tIE91dHB1dCBmcmVxdWVuY3kgLS0t LSAqLworCisvKiAtLS0tIE91dHB1dCBwaGFzZSBhZGp1c3QgKFBSR19SU1RfREVMQVkgcmVnaXN0 ZXItYmFzZWQpIC0tLS0gKi8KKworLyogLS0tLSBJTlRTWU5DIChpbnRlci1QTEwgc3luY2hyb25p emF0aW9uKSAtLS0tICovCisKKy8qIC0tLS0gUGhhc2Ugb2Zmc2V0IChUREMgcmVhZGJhY2spIC0t LS0gKi8KKworLyogLS0tLSBTdGF0ZSBoZWxwZXJzIC0tLS0gKi8KKworLyoKKyAqIHNpdDk1MzF4 X3BsbF9wYWdlIC0gZ2V0IHJlZ2lzdGVyIHBhZ2UgZm9yIFBMTCBpbmRleAorICogQHBsbF9pZHg6 IFBMTCBpbmRleCAoMCA9IFBMTEEsIDMgPSBQTExEKQorICovCitzdGF0aWMgaW5saW5lIHU4IHNp dDk1MzF4X3BsbF9wYWdlKHU4IHBsbF9pZHgpCit7CisJcmV0dXJuIFNJVDk1MzFYX1BBR0VfUExM QSArIHBsbF9pZHg7Cit9CisKIC8qCiAgKiBMb2dpY2FsIGlucHV0IHBpbnMgYXJlIGludGVybGVh dmVkOiBldmVuIGluZGV4ID0gUCBsYW5lLCBvZGQKICAqIGluZGV4ID0gTiBsYW5lIG9mIHBhaXIg aW5kZXgvMiAoSU4wUCwgSU4wTiwgSU4xUCwgSU4xTiwgLi4uKS4KQEAgLTEzMywyMiArMjcxLDk1 IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaXQ5NTMxeF9pbnB1dF9pc19uKHU4IGluZGV4KQogfQog CiAvKgotICogc2l0OTUzMXhfcGxsX3BhZ2UgLSBnZXQgcmVnaXN0ZXIgcGFnZSBmb3IgUExMIGlu ZGV4Ci0gKiBAcGxsX2lkeDogUExMIGluZGV4ICgwID0gUExMQSwgMyA9IFBMTEQpCisgKiBzaXQ5 NTMxeF9pbnB1dF9od19zcmMgLSB0cmFuc2xhdGUgbG9naWNhbCBpbnB1dCBpbmRleCB0byBzb3Vy Y2UgZW5jb2RpbmcKKyAqIEBpbmRleDogbG9naWNhbCBpbnB1dCBwaW4gaW5kZXgKKyAqCisgKiBU aGUgcHJpb3JpdHkgdGFibGUgYW5kIENMS19BQ1RJVkVTRUwgcmVnaXN0ZXJzIHVzZSBhIG5vbi1j b250aWd1b3VzCisgKiBzb3VyY2UgZW5jb2Rpbmc6IDAtMyA9IENMSzBQLi5DTEszUCwgNSA9IE9D WE8sIDYgPSBJTlRTWU5DLAorICogNy0xMCA9IENMSzBOLi5DTEszTi4KICAqLwotc3RhdGljIGlu bGluZSB1OCBzaXQ5NTMxeF9wbGxfcGFnZSh1OCBwbGxfaWR4KQorc3RhdGljIGlubGluZSB1OCBz aXQ5NTMxeF9pbnB1dF9od19zcmModTggaW5kZXgpCiB7Ci0JcmV0dXJuIFNJVDk1MzFYX1BBR0Vf UExMQSArIHBsbF9pZHg7CisJaWYgKGluZGV4ID09IFNJVDk1MzFYX01BWF9JTlBVVFMpCisJCXJl dHVybiBTSVQ5NTMxWF9QUklPX1NSQ19PQ1hPOworCWlmIChpbmRleCA9PSBTSVQ5NTMxWF9JTlRT WU5DX1BJTl9JRCkKKwkJcmV0dXJuIFNJVDk1MzFYX1BSSU9fU1JDX0lOVFNZTkM7CisJaWYgKHNp dDk1MzF4X2lucHV0X2lzX24oaW5kZXgpKQorCQlyZXR1cm4gU0lUOTUzMVhfUFJJT19TUkNfTl9C QVNFICsgc2l0OTUzMXhfaW5wdXRfcGFpcihpbmRleCk7CisJcmV0dXJuIHNpdDk1MzF4X2lucHV0 X3BhaXIoaW5kZXgpOwogfQogCi0vKiAtLS0tIFJlZ2lzdGVyIGFjY2VzcyAtLS0tICovCi1pbnQg c2l0OTUzMXhfcmVhZF91OChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHVuc2lnbmVkIGlu dCByZWcsIHU4ICp2YWwpOwotaW50IHNpdDk1MzF4X3dyaXRlX3U4KHN0cnVjdCBzaXQ5NTMxeF9k ZXYgKnNpdGRldiwgdW5zaWduZWQgaW50IHJlZywgdTggdmFsKTsKLWludCBzaXQ5NTMxeF9yZWFk X3BsbF91OChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4IHBsbF9pZHgsIHU4IG9mZnNl dCwKLQkJCSB1OCAqdmFsKTsKLWludCBzaXQ5NTMxeF93cml0ZV9wbGxfdTgoc3RydWN0IHNpdDk1 MzF4X2RldiAqc2l0ZGV2LCB1OCBwbGxfaWR4LCB1OCBvZmZzZXQsCi0JCQkgIHU4IHZhbCk7Ci1p bnQgc2l0OTUzMXhfdXBkYXRlX3BsbF91OChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4 IHBsbF9pZHgsIHU4IG9mZnNldCwKLQkJCSAgIHU4IG1hc2ssIHU4IHZhbCk7CisvKgorICogc2l0 OTUzMXhfaHdfc3JjX2lucHV0IC0gdHJhbnNsYXRlIHNvdXJjZSBlbmNvZGluZyB0byBsb2dpY2Fs IGlucHV0IGluZGV4CisgKiBAc3JjOiA0LWJpdCBoYXJkd2FyZSBzb3VyY2UgZW5jb2RpbmcKKyAq CisgKiBSZXR1cm46IGxvZ2ljYWwgaW5wdXQgaW5kZXggKElOVFNZTkMgbWFwcyB0byBTSVQ5NTMx WF9JTlRTWU5DX1BJTl9JRCksCisgKiBvciBTSVQ5NTMxWF9SRUZfSU5WQUxJRCBpZiBAc3JjIGlz IGEgcmVzZXJ2ZWQgdmFsdWUKKyAqLworc3RhdGljIGlubGluZSB1OCBzaXQ5NTMxeF9od19zcmNf aW5wdXQodTggc3JjKQoreworCWlmIChzcmMgPCBTSVQ5NTMxWF9OVU1fSU5QVVRfUEFJUlMpCisJ CXJldHVybiBzcmMgKiAyOworCWlmIChzcmMgPT0gU0lUOTUzMVhfUFJJT19TUkNfT0NYTykKKwkJ cmV0dXJuIFNJVDk1MzFYX01BWF9JTlBVVFM7CisJaWYgKHNyYyA9PSBTSVQ5NTMxWF9QUklPX1NS Q19JTlRTWU5DKQorCQlyZXR1cm4gU0lUOTUzMVhfSU5UU1lOQ19QSU5fSUQ7CisJaWYgKHNyYyA+ PSBTSVQ5NTMxWF9QUklPX1NSQ19OX0JBU0UgJiYKKwkgICAgc3JjIDwgU0lUOTUzMVhfUFJJT19T UkNfTl9CQVNFICsgU0lUOTUzMVhfTlVNX0lOUFVUX1BBSVJTKQorCQlyZXR1cm4gKHNyYyAtIFNJ VDk1MzFYX1BSSU9fU1JDX05fQkFTRSkgKiAyICsgMTsKKwlyZXR1cm4gU0lUOTUzMVhfUkVGX0lO VkFMSUQ7Cit9CisKKy8qCisgKiBzaXQ5NTMxeF9wcmlvX3NyY191c2FibGUgLSBkb2VzIGEgcHJp b3JpdHkgc2xvdCBuYW1lIGEgcmVmZXJlbmNlPworICogQHNyYzogNC1iaXQgaGFyZHdhcmUgc291 cmNlIGVuY29kaW5nIGhlbGQgaW4gYSB0YWJsZSBzbG90CisgKgorICogQ29kZXMgNCBhbmQgMTEg YWRkcmVzcyBhIGZpZnRoIGlucHV0IHBhaXIgdGhpcyBwYXJ0IGRvZXMgbm90IGhhdmUsIGFuZAor ICogYSB2YWx1ZSBvdXRzaWRlIHRoZSBlbmNvZGluZyBpcyBub3QgYSBzb3VyY2UgZWl0aGVyLCBz byBhIHNsb3QgaG9sZGluZworICogb25lIG9mIHRoZW0gbmFtZXMgbm90aGluZyB0aGUgZGV2aWNl IGNhbiBzZWxlY3QuICBDYW5vbmljYWxpemluZyBhbiBOCisgKiBsYW5lIHRvIGl0cyBwYWlyIGZp cnN0IHdvdWxkIG5vdCBjaGFuZ2UgdGhlIGFuc3dlciAtLSBib3RoIGxhbmVzIGFyZQorICogcmVm ZXJlbmNlcyAtLSBzbyB0aGlzIG5lZWRzIG5vIGRldmljZSBzdGF0ZS4KKyAqCisgKiBSZXR1cm46 IHRydWUgd2hlbiB0aGUgY29kZSByZXNvbHZlcyB0byBhIHJlZmVyZW5jZSB0aGUgZGV2aWNlIGNh biB1c2UKKyAqLworc3RhdGljIGlubGluZSBib29sIHNpdDk1MzF4X3ByaW9fc3JjX3VzYWJsZSh1 OCBzcmMpCit7CisJcmV0dXJuIHNpdDk1MzF4X2h3X3NyY19pbnB1dChzcmMpICE9IFNJVDk1MzFY X1JFRl9JTlZBTElEOworfQorCisvKgorICogc2l0OTUzMXhfcmVmX3N0YXRlX2dldCAtIGdldCBy ZWZlcmVuY2Ugc3RhdGUgYnkgaW5kZXgKKyAqIEBpbmRleDoJbG9naWNhbCBpbnB1dCBpbmRleAor ICoKKyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgY2FjaGVkIGlucHV0IHJlZmVyZW5jZSBzdGF0 ZQorICovCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBzaXQ5NTMxeF9yZWYgKgorc2l0OTUz MXhfcmVmX3N0YXRlX2dldChjb25zdCBzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4IGlu ZGV4KQoreworCXJldHVybiAmc2l0ZGV2LT5yZWZbaW5kZXhdOworfQorCisvKgorICogc2l0OTUz MXhfb3V0X3N0YXRlX2dldCAtIGdldCBvdXRwdXQgc3RhdGUgYnkgaW5kZXgKKyAqIEBpbmRleDoJ bG9naWNhbCBvdXRwdXQgaW5kZXgKKyAqCisgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIGNhY2hl ZCBvdXRwdXQgc3RhdGUKKyAqLworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3Qgc2l0OTUzMXhf b3V0ICoKK3NpdDk1MzF4X291dF9zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IHNpdDk1MzF4X2RldiAq c2l0ZGV2LCB1OCBpbmRleCkKK3sKKwlyZXR1cm4gJnNpdGRldi0+b3V0W2luZGV4XTsKK30KKwor LyoKKyAqIHNpdDk1MzF4X2NoYW5fc3RhdGVfZ2V0IC0gZ2V0IGNoYW5uZWwgc3RhdGUgYnkgUExM IGluZGV4CisgKgorICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBjYWNoZWQgcGVyLVBMTCBjaGFu bmVsIHN0YXRlCisgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHNpdDk1MzF4X2NoYW4g Kgorc2l0OTUzMXhfY2hhbl9zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0 ZGV2LCB1OCBwbGxfaWR4KQoreworCXJldHVybiAmc2l0ZGV2LT5jaGFuW3BsbF9pZHhdOworfQog CiAjZW5kaWYgLyogX1NJVDk1MzFYX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxs L3NpdDk1MzF4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9kcGxsLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lODhmYTRlMjliZGYKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvZHBsbC5jCkBAIC0wLDAgKzEsNDExIEBACisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIFNpVGltZSBTaVQ5NTMx eCBEUExMIHN1YnN5c3RlbSBjYWxsYmFja3MgYW5kIHJlZ2lzdHJhdGlvbgorICoKKyAqIENvcHly aWdodCAoQykgMjAyNiBTaVRpbWUgQ29ycC4KKyAqIEF1dGhvcjogQWxpIFJvdWhpIDxhcm91aGlA c2l0aW1lLmNvbT4KKyAqIEF1dGhvcjogT2xlZyBaYWRvcm96aG55aSA8T2xlZy5aYWRvcm96aG55 aUBkZXZveHNvZnR3YXJlLmNvbT4KKyAqCisgKiBEUExMIGRldmljZSBvcHMsIHBpbiBvcHMgKHNl cGFyYXRlIGlucHV0L291dHB1dCksIHBpbiByZWdpc3RyYXRpb24sCisgKiBhbmQgcGVyaW9kaWMg Y2hhbmdlIGRldGVjdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZHBsbC5oPgorI2luY2x1 ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxs aW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4 L3NsYWIuaD4KKworI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJkcGxsLmgiCisjaW5jbHVk ZSAicHJvcC5oIgorI2luY2x1ZGUgInJlZ3MuaCIKKworc3RhdGljIGJvb2wgc2l0OTUzMXhfZHBs bF9pc19pbnB1dF9waW4oY29uc3Qgc3RydWN0IHNpdDk1MzF4X2RwbGxfcGluICpwaW4pCit7CisJ cmV0dXJuIHBpbi0+ZGlyID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVDsKK30KKworc3RhdGlj IGJvb2wKK3NpdDk1MzF4X2RwbGxfaXNfeG9fcGluKGNvbnN0IHN0cnVjdCBzaXQ5NTMxeF9kcGxs X3BpbiAqcGluKQoreworCXJldHVybiBzaXQ5NTMxeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pICYm CisJICAgICAgIHBpbi0+aWQgPT0gU0lUOTUzMVhfTUFYX0lOUFVUUzsKK30KKworLyoKKyAqIFRo ZSBjYWNoZWQgc3RhdGUgdGhpcyByZXBvcnRzIGNvbWVzIGZyb20gdGhlIG91dGVyIGxvc3Mtb2Yt bG9jayBieXRlCisgKiAocGFnZSAwLCByZWcgMHgwNiksIHRoZSBQTEwgbW9kZSBiaXQgKFBMTCBw YWdlLCByZWcgMHgzMSksIGlubmVyIExPTAorICogKHJlZyAweDkyKSwgdGhlIGhvbGRvdmVyIGZy ZWV6ZSBieXRlIChyZWcgMHgwQSkgYW5kIHRoZSBwZXItUExMCisgKiBob2xkb3Zlci12YWxpZCBi aXQgKFBMTCBwYWdlLCByZWcgMHgwNikuCisgKi8KK3N0YXRpYyBpbnQKK3NpdDk1MzF4X2RwbGxf bG9ja19zdGF0dXNfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBs bF9wcml2LAorCQkJICAgICAgZW51bSBkcGxsX2xvY2tfc3RhdHVzICpzdGF0dXMsCisJCQkgICAg ICBlbnVtIGRwbGxfbG9ja19zdGF0dXNfZXJyb3IgKnN0YXR1c19lcnJvciwKKwkJCSAgICAgIHN0 cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKK3sKKwlzdHJ1Y3Qgc2l0OTUzMXhfZHBsbCAq c2l0ZHBsbCA9IGRwbGxfcHJpdjsKKwlzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYgPSBzaXRk cGxsLT5kZXY7CisJY29uc3Qgc3RydWN0IHNpdDk1MzF4X2NoYW4gKmNoYW47CisKKwlpZiAoc3Rh dHVzX2Vycm9yKQorCQkqc3RhdHVzX2Vycm9yID0gRFBMTF9MT0NLX1NUQVRVU19FUlJPUl9OT05F OworCisJY2hhbiA9IHNpdDk1MzF4X2NoYW5fc3RhdGVfZ2V0KHNpdGRldiwgc2l0ZHBsbC0+aWQp OworCisJbXV0ZXhfbG9jaygmc2l0ZGV2LT5tdWx0aW9wX2xvY2spOworCisJaWYgKCFjaGFuLT5h Y3RpdmUpIHsKKwkJLyoKKwkJICogQSBQTEwgdGhlIGxvYWRlZCBjb25maWd1cmF0aW9uIGxlYXZl cyB1bnVzZWQgbmV2ZXIgcmVhY2hlcworCQkgKiBpdHMgYWN0aXZlIHN0YXRlLiAgTm90aGluZyBk cml2ZXMgaXRzIGxvc3Mtb2YtbG9jayBiaXQsIHNvCisJCSAqIHdpdGhvdXQgdGhpcyBpdCB3b3Vs ZCByZXBvcnQgYSBsb2NrIGl0IGRvZXMgbm90IGhhdmUuCisJCSAqLworCQkqc3RhdHVzID0gRFBM TF9MT0NLX1NUQVRVU19VTkxPQ0tFRDsKKwl9IGVsc2UgaWYgKGNoYW4tPmlubmVyX2xvbCkgewor CQkvKgorCQkgKiBUaGUgY29yZSBwdWJsaXNoZXMgdGhlIGVycm9yIGRldGFpbCBvbmx5IGZvciB0 aGUgdW5sb2NrZWQKKwkJICogYW5kIGhvbGRvdmVyIHN0YXRlcywgc28gYW4gaW5uZXIgbG9zcyBv ZiBsb2NrIHJlcG9ydGVkCisJCSAqIHVuZGVyIGEgbG9ja2VkIHN0YXR1cyB3b3VsZCBuZXZlciBy ZWFjaCB1c2Vyc3BhY2UuICBBbgorCQkgKiBpbm5lciBsb29wIHRoYXQgaXMgbm90IGxvY2tlZCBp cyBub3QgYSBsb2NrZWQgUExMLgorCQkgKi8KKwkJKnN0YXR1cyA9IGNoYW4tPmhvX2ZyZWV6ZSA/ IERQTExfTE9DS19TVEFUVVNfSE9MRE9WRVIgOgorCQkJCQkgICAgRFBMTF9MT0NLX1NUQVRVU19V TkxPQ0tFRDsKKwl9IGVsc2UgaWYgKGNoYW4tPm1vZGUpIHsKKwkJLyoKKwkJICogRnJlZS1ydW46 IHRoZSBvdXRlciBsb29wIGlzIGRpc2FibGVkLCBzbyB0aGUgUExMIHRyYWNrcyBubworCQkgKiBy ZWZlcmVuY2UgYXQgYWxsIGFuZCBpdHMgbG9zcy1vZi1sb2NrIGJpdCBtZWFucyBub3RoaW5nLgor CQkgKiBUaGF0IGlzIHdoYXQgVU5MT0NLRUQgZGVzY3JpYmVzIC0tICJub3QgeWV0IGxvY2tlZCB0 byBhbnkKKwkJICogdmFsaWQgaW5wdXQgKG9yIHdhcyBmb3JjZWQgYnkgdXNlcikiLgorCQkgKi8K KwkJKnN0YXR1cyA9IERQTExfTE9DS19TVEFUVVNfVU5MT0NLRUQ7CisJfSBlbHNlIGlmIChjaGFu LT5ob19mcmVlemUpIHsKKwkJLyoKKwkJICogVGVzdGVkIGJlZm9yZSB0aGUgbG9jazogdGhlIGZy ZWV6ZSBhbmQgdGhlIG91dGVyCisJCSAqIGxvc3Mtb2YtbG9jayBiaXQgYXJlIHJlYWQgaW5kZXBl bmRlbnRseSwgYW5kIGEgUExMIGZyb3plbgorCQkgKiBpbiBob2xkb3ZlciBpcyBub3QgdHJhY2tp bmcgYSByZWZlcmVuY2Ugd2hhdGV2ZXIgaXRzCisJCSAqIGxvc3Mtb2YtbG9jayBiaXQgc2F5cyAt LSB0aGUgcGluLXN0YXRlIGNvbnRyYWN0IGJlbG93CisJCSAqIGNvdW50cyBhIGZyb3plbiBQTEwg YXMgdHJhY2tpbmcgbm90aGluZyBmb3IgdGhlIHNhbWUKKwkJICogcmVhc29uLgorCQkgKi8KKwkJ KnN0YXR1cyA9IERQTExfTE9DS19TVEFUVVNfSE9MRE9WRVI7CisJfSBlbHNlIGlmIChjaGFuLT5s b2NrZWQpIHsKKwkJLyoKKwkJICogSE9fQUNRIGlzIGxvY2tlZCAqYW5kKiBob2xkb3ZlciBtZW1v cnkgYWNxdWlyZWQsIHNvIGl0IG5lZWRzCisJCSAqIHRoZSBob2xkb3Zlci12YWxpZCBiaXQgcmF0 aGVyIHRoYW4gZm9sbG93aW5nIGZyb20gdGhlIGxvY2suCisJCSAqLworCQlpZiAoY2hhbi0+aG9f dmFsaWQpCisJCQkqc3RhdHVzID0gRFBMTF9MT0NLX1NUQVRVU19MT0NLRURfSE9fQUNROworCQll bHNlCisJCQkqc3RhdHVzID0gRFBMTF9MT0NLX1NUQVRVU19MT0NLRUQ7CisJfSBlbHNlIHsKKwkJ KnN0YXR1cyA9IERQTExfTE9DS19TVEFUVVNfVU5MT0NLRUQ7CisJfQorCisJLyogUmVwb3J0IGlu bmVyIExPTCBhcyBhbiBlcnJvciBjb25kaXRpb24gKi8KKwlpZiAoc3RhdHVzX2Vycm9yICYmIGNo YW4tPmlubmVyX2xvbCkKKwkJKnN0YXR1c19lcnJvciA9IERQTExfTE9DS19TVEFUVVNfRVJST1Jf VU5ERUZJTkVEOworCisJbXV0ZXhfdW5sb2NrKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CisKKwly ZXR1cm4gMDsKK30KKworLyoKKyAqIHNpdDk1MzF4X2RwbGxfbG9ja19zdGF0dXNfYmFzZWxpbmUg LSBzZWVkIHRoZSBzdGF0dXMgdGhlIHBvbGwgY29tcGFyZXMgdG8KKyAqCisgKiBDYWxsZWQgb25j ZSB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQuICBUaGUgY3JlYXRlIG5vdGlmaWNhdGlvbiBjYXJy aWVkCisgKiB0aGUgbG9jayBzdGF0dXMgdGhlIGNhY2hlIGhvbGRzLCBzbyB0aGF0IGlzIHRoZSBi YXNlbGluZSB0aGUgZmlyc3QgdGljaworICogY29tcGFyZXMgYWdhaW5zdDsgdGFrZW4gZnJvbSB0 aGUgcGxhY2Vob2xkZXIgdGhlIGFsbG9jYXRpb24gbGVmdCwgZXZlcnkKKyAqIFBMTCB0aGF0IGlz IGxvY2tlZCBvciBpbiBob2xkb3ZlciB3b3VsZCBsb29rIGxpa2UgaXQgaGFkIGp1c3QgY2hhbmdl ZC4KKyAqLwordm9pZCBzaXQ5NTMxeF9kcGxsX2xvY2tfc3RhdHVzX2Jhc2VsaW5lKHN0cnVjdCBz aXQ5NTMxeF9kcGxsICpzaXRkcGxsKQoreworCXNpdDk1MzF4X2RwbGxfbG9ja19zdGF0dXNfZ2V0 KHNpdGRwbGwtPmRwbGxfZGV2LCBzaXRkcGxsLAorCQkJCSAgICAgICZzaXRkcGxsLT5sb2NrX3N0 YXR1cywKKwkJCQkgICAgICAmc2l0ZHBsbC0+bG9ja19zdGF0dXNfZXJyb3IsIE5VTEwpOworfQor CisvKgorICogTW9kZQorICogPT09PQorICogZW51bSBkcGxsX21vZGUgZGlmZmVyZW50aWF0ZXMg aG93IGEgRFBMTCBzZWxlY3RzIGFuIGlucHV0OiBBVVRPTUFUSUMKKyAqIGhhcyB0aGUgZGV2aWNl IHBpY2sgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgb25lLCBNQU5VQUwgaGFzIHVzZXJzcGFjZQorICog cmVxdWVzdCBvbmUuICBUaGUgZGV2aWNlIG9ubHkgaW1wbGVtZW50cyB0aGUgZm9ybWVyIHRocm91 Z2ggdGhpcworICogZHJpdmVyLCBzbyBBVVRPTUFUSUMgaXMgdGhlIG9ubHkgbW9kZSBhZHZlcnRp c2VkLgorICoKKyAqIFdpdGggYSBzaW5nbGUgbW9kZSB0aGVyZSBpcyBub3RoaW5nIHRvIHN3aXRj aCwgc28gbm8gLm1vZGVfc2V0OiB0aGUgY29yZQorICogYW5zd2VycyBhIG1vZGUgcmVxdWVzdCB3 aXRoIC1FT1BOT1RTVVBQLiAgRnJlZS1ydW4gLS0gdGhlIG91dGVyIGxvb3AKKyAqIGRpc2FibGVk IHRocm91Z2ggUExMIHBhZ2UgcmVnIDB4MzFbNV0gLS0gaXMgbm90IGEgbW9kZSBpbiB0aG9zZSB0 ZXJtcywKKyAqIGJlY2F1c2Ugbm8gaW5wdXQgaXMgc2VsZWN0ZWQgZWl0aGVyIHdheS4gIEl0IGlz IHJlcG9ydGVkIHRocm91Z2ggbG9jaworICogc3RhdHVzIGluc3RlYWQsIGFuZCBlbnRlcmVkIGFu ZCBsZWZ0IHRocm91Z2ggdGhlIGNoaXAtc3BlY2lmaWMgdG9vbAorICogcmF0aGVyIHRoYW4gb3Zl ciBuZXRsaW5rLgorICoKKyAqIFRoZSBkZXZpY2UgY291bGQgaW1wbGVtZW50IHJlYWwgTUFOVUFM OiBQTExfQ09ORklHMUZfUExMIChQTEwgcGFnZSByZWcKKyAqIDB4MUYpIGJpdCA2IHN3aXRjaGVz IGEgUExMIGZyb20gcHJpb3JpdHktYmFzZWQgdG8gbWFudWFsIGFjdGl2ZSBzZWxlY3QsCisgKiBh bmQgd2l0aCBNSVNDSU5ORVJfUExMIChyZWcgMHgxOCkgYml0IDUgdGhlIFBMTCBmb2xsb3dzIGEg bWFudWFsIGlucHV0CisgKiBzZWxlY3QgLS0gdGhlIGlucHV0LXNlbGVjdCBwaW5zLCBvciB3aXRo IEdQSU9fSU5QVVRfRlVOQ19DVFJMNS4uOAorICogKHBhZ2UgMCwgcmVncyAweEU4LTB4RUIpIGJp dCA0IHRoZSByZWdpc3RlcidzIG93biBsb3cgbmliYmxlIC0tIHdoaWNoCisgKiBwaW5zIG9uZSBy ZWZlcmVuY2Ugd2hpbGUgdGhlIGxvb3Aga2VlcHMgcnVubmluZy4gIFdpcmluZyB0aGF0IHVwIHdv dWxkCisgKiBsZXQgLnN0YXRlX29uX2RwbGxfc2V0KCkgYWNjZXB0IENPTk5FQ1RFRCwgYnV0IHJl Z3MgMHgxOCBhbmQgMHgxRiBjYXJyeQorICogR1VJLWdlbmVyYXRlZCBjb25maWd1cmF0aW9uIGlu IHRoZWlyIG90aGVyIGJpdHMsIHNvIGl0IGlzIGxlZnQgb3V0LgorICogQWR2ZXJ0aXNpbmcgTUFO VUFMIGFuZCB0aGVuIHJlZnVzaW5nIHRoZSBvbmUgcmVxdWVzdCBNQU5VQUwgZXhpc3RzIGZvcgor ICogaXMgdGhlIHdvcnNlIG9mIHRoZSB0d28gaW5jb21wbGV0ZSBhbnN3ZXJzLCBhbmQgYWZ0ZXIg bWVyZ2UgaXQgd291bGQgYmUKKyAqIEFCSS4gIEEgcHJvZmlsZSB0aGF0IHNldHMgbWFudWFsIHNl bGVjdCBhbnl3YXkgaXMgcmVwb3J0ZWQgYXQgcHJvYmUsCisgKiBzaW5jZSB0aGUgbW9kZSB0aGlz IGRyaXZlciByZXBvcnRzIHdvdWxkIHRoZW4gYmUgd3JvbmcuCisgKi8KK3N0YXRpYyBpbnQKK3Np dDk1MzF4X2RwbGxfbW9kZV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCB2b2lk ICpkcGxsX3ByaXYsCisJCSAgICAgICBlbnVtIGRwbGxfbW9kZSAqbW9kZSwgc3RydWN0IG5ldGxp bmtfZXh0X2FjayAqZXh0YWNrKQoreworCSptb2RlID0gRFBMTF9NT0RFX0FVVE9NQVRJQzsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzaXQ5NTMxeF9kcGxsX3N1cHBvcnRlZF9tb2Rl c19nZXQoY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLAorCQkJCSAgdm9pZCAqZHBsbF9w cml2LCB1bnNpZ25lZCBsb25nICptb2RlcywKKwkJCQkgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sg KmV4dGFjaykKK3sKKwlfX3NldF9iaXQoRFBMTF9NT0RFX0FVVE9NQVRJQywgbW9kZXMpOworCisJ cmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgc2l0OTUzMXhfZHBs bF9kZXZpY2Vfb3BzID0geworCS5sb2NrX3N0YXR1c19nZXQJPSBzaXQ5NTMxeF9kcGxsX2xvY2tf c3RhdHVzX2dldCwKKwkubW9kZV9nZXQJCT0gc2l0OTUzMXhfZHBsbF9tb2RlX2dldCwKKwkuc3Vw cG9ydGVkX21vZGVzX2dldAk9IHNpdDk1MzF4X2RwbGxfc3VwcG9ydGVkX21vZGVzX2dldCwKKwkv KiB0ZW1wX2dldCBub3QgYXZhaWxhYmxlIC0tIFNpVDk1MzF4IGhhcyBubyBvbi1kaWUgdGVtcCBz ZW5zb3IgKi8KK307CisKKy8qCisgKiBQaW4tc3RhdGUgY29udHJhY3QKKyAqID09PT09PT09PT09 PT09PT09PQorICogVGhlIGZpdmUgcGluIG9wcyB0YWJsZXMgYmVsb3cgZmFsbCBpbnRvIHRocmVl IHJvbGVzLCBhbmQgb25seSB0aGUgZmlyc3QKKyAqIGhhcyBhIHNlbGVjdGlvbiBzdGF0ZSBtYWNo aW5lLiAgRWFjaCBzdGF0ZV9vbl9kcGxsIGNhbGxiYWNrIGltcGxlbWVudHMKKyAqIHRoZSBydWxl cyBmb3IgaXRzIHJvbGUgYW5kIG5vdGhpbmcgZWxzZSwgc28gdGhlIHRhYmxlcyBjYW5ub3QgZHJp ZnQKKyAqIGFwYXJ0IHRoZSB3YXkgZml2ZSBpbmRlcGVuZGVudCBlbmNvZGluZ3Mgb2YgdGhpcyBk aWQuCisgKgorICogU0VMRUNUSU9OIHJvbGUgLS0gcGh5c2ljYWwgaW5wdXQgcGlucywgSU5UU1lO QyBkZXN0aW5hdGlvbiBwaW4uCisgKiAgIFRoZSBzdGF0ZSBpcyB3aGF0IHVzZXJzcGFjZSBhc2tl ZCBmb3I7IHdoYXQgdGhlIGRldmljZSBpcyBkb2luZyB3aXRoCisgKiAgIHRoZSBwaW4gaXMgdGhl IG9wZXJhdGlvbmFsIHN0YXRlLiAgUHJlZGljYXRlcywgYWxsIGV2YWx1YXRlZCB1bmRlcgorICog ICBtdWx0aW9wX2xvY2s6CisgKiAgICAgTSAgc291cmNlIGlzIHByZXNlbnQgaW4gVEhJUyBQTEwn cyBoYXJkd2FyZSBwcmlvcml0eSB0YWJsZQorICogICAgIFMgIGNoYW4tPnNlbGVjdGVkX3JlZiA9 PSB0aGlzIHBpbidzIGlkICh0aGUgYWN0aXZlIHNlbGVjdGlvbikKKyAqICAgICBMICBjaGFuLT5s b2NrZWQgJiYgIWNoYW4tPm1vZGUgJiYgIWNoYW4tPmhvX2ZyZWV6ZQorICogICAgICAgICh0cmFj a2luZyBhIHJlZmVyZW5jZTogb3V0ZXIgbG9vcCBydW5uaW5nLCBsb2NrZWQsIG5vdCBmcm96ZW4p CisgKiAgICAgTiAgdGhlIGlucHV0IGxhbmUncyBjbG9jayBtb25pdG9yIHJlcG9ydHMgbG9zcyBv ZiBzaWduYWwKKyAqICAgICBRICB0aGUgbGFuZSdzIG1vbml0b3IgcmVwb3J0cyBhIGZyZXF1ZW5j eSBkcmlmdCwgd2l0aCBzaWduYWwKKyAqICAgc3RhdGUgZ2V0OgorICogICAgIFNFTEVDVEFCTEUg ICAgTQorICogICAgIERJU0NPTk5FQ1RFRCAgIU0KKyAqICAgb3BlcnN0YXRlIGdldDoKKyAqICAg ICBBQ1RJVkUgICAgICAgIFMgJiYgTCAmJiAhTgorICogICAgIE5PX1NJR05BTCAgICAgTgorICog ICAgIFFVQUxfRkFJTEVEICAgIU4gJiYgUSAmJiAhKFMgJiYgTCkKKyAqICAgICBTVEFOREJZICAg ICAgIG90aGVyd2lzZQorICogICBzZXQ6CisgKiAgICAgRElTQ09OTkVDVEVEICByZW1vdmUgZnJv bSB0aGlzIFBMTCdzIHRhYmxlOyBhIHBoeXNpY2FsIGlucHV0IGFsc28KKyAqICAgICAgICAgICAg ICAgICAgIHJlbGVhc2VzIHRoaXMgRFBMTCdzIGNsYWltIGFuZCBwb3dlcnMgdGhlIHNoYXJlZAor ICogICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIgZG93biBvbiB0aGUgbGFzdCByZWxlYXNlCisg KiAgICAgU0VMRUNUQUJMRSAgICBhZGQgdG8gdGhpcyBQTEwncyB0YWJsZTsgYSBwaHlzaWNhbCBp bnB1dCBwb3dlcnMgdGhlCisgKiAgICAgICAgICAgICAgICAgICByZWNlaXZlciB1cCBhbmQgdGFr ZXMgdGhlIGNsYWltLCBpbiB0aGF0IG9yZGVyCisgKiAgICAgQ09OTkVDVEVEICAgICAtRU9QTk9U U1VQUCAtLSB0aGUgZGV2aWNlIHNlbGVjdHMgYnkgcHJpb3JpdHkgYW5kIGhhcworICogICAgICAg ICAgICAgICAgICAgbm8gbW9kZSB0aGF0IHBpbnMgb25lIHJlZmVyZW5jZSAoc2VlICJNb2RlIiBh Ym92ZSkKKyAqICAgICBvdGhlciAgICAgICAgIC1FSU5WQUwKKyAqCisgKiAgIFRoZSBBQ1RJVkUg dGVzdCBuZWVkcyBMIGFzIHdlbGwgYXMgUyBiZWNhdXNlIHRoZSBzZWxlY3Rpb24gaXMgd2hhdCB0 aGUKKyAqICAgZHJpdmVyIGxhc3Qgd3JvdGUgb3IgdGhlIGRldmljZSBsYXN0IGNob3NlLCBub3Qg cHJvb2YgdGhlIGxvb3AgdXNlcworICogICBpdDogYSBmcmVlLXJ1bm5pbmcsIGZyb3plbiBvciB1 bmxvY2tlZCBQTEwgZm9sbG93cyBub3RoaW5nLiAgSXQgbmVlZHMKKyAqICAgIU4gYmVjYXVzZSBh IFBMTCB3aG9zZSBzZWxlY3Rpb24gbmFtZXMgYSBsYW5lIHdpdGhvdXQgc2lnbmFsIGhhcworICog ICBmYWxsZW4gYmFjayB0byBhbm90aGVyIGxpc3RlZCBzb3VyY2Ugb24gaXRzIG93biwgYW5kIG5v IHJlZ2lzdGVyCisgKiAgIHNheXMgd2hpY2ggLS0gbm8gcGluIGlzIHJlcG9ydGVkIGFjdGl2ZSB0 aGVuLiAgVGhlIElOVFNZTkMgZGVzdGluYXRpb24KKyAqICAgaGFzIG5vIG1vbml0b3IsIHNvIE4g YW5kIFEgbmV2ZXIgaG9sZCBmb3IgaXQuCisgKgorICogICBNIGlzIHJlYWQgZnJvbSB0aGUgaGFy ZHdhcmUgcHJpb3JpdHkgdGFibGUsIG5vdCBmcm9tIHJlZi0+cGxsX21hc2ssCisgKiAgIHdoaWNo IGlzIG9ubHkgdGhlIHNoYXJlZC1yZWNlaXZlciByZWZjb3VudCBhbmQgc2F5cyBub3RoaW5nIGFi b3V0IG9uZQorICogICBEUExMJ3MgZWxpZ2liaWxpdHkuICBQcmlvcml0eSBpcyBrZXB0IGJ5IHRo ZSBkcml2ZXIgcGVyIHNvdXJjZSBhbmQKKyAqICAgUExMLCBpbmRlcGVuZGVudCBvZiBNLCBzbyBh IHBpbiByZXBvcnRzIHRoZSBzYW1lIHByaW9yaXR5IHdoZXRoZXIgaXQKKyAqICAgaXMgY29ubmVj dGVkIG9yIG5vdC4KKyAqCisgKiBEUklWRSByb2xlIC0tIG91dHB1dCBwaW5zLCBJTlRTWU5DIHNv dXJjZSBwaW4uCisgKiAgIElzIHRoaXMgcGluIG9yIG5ldCBiZWluZyBkcml2ZW4/ICBOb3RoaW5n IGlzIHNlbGVjdGVkIGhlcmUsIHNvOgorICogICAgIENPTk5FQ1RFRCAgICAgcGluIG9yIG5ldCBp cyBkcml2ZW4KKyAqICAgICBESVNDT05ORUNURUQgIHBpbiBpcyBtdXRlZCAoSGktWiksIG9yIHRo aXMgUExMIGRvZXMgbm90IGRyaXZlIGl0CisgKiAgICAgU0VMRUNUQUJMRSAgICAtRUlOVkFMIG9u IHNldCwgbmV2ZXIgcmVwb3J0ZWQgYnkgZ2V0CisgKgorICogRklYRUQgcm9sZSAtLSBYTyBwaW4u ICBBbHdheXMgQ09OTkVDVEVEOyBpdCBjYW5ub3QgYmUgcm91dGVkLgorICovCisKK3N0YXRpYyBp bnQKK3NpdDk1MzF4X2RwbGxfaW5wdXRfcGluX2RpcmVjdGlvbl9nZXQoY29uc3Qgc3RydWN0IGRw bGxfcGluICpwaW4sCisJCQkJICAgICAgdm9pZCAqcGluX3ByaXYsCisJCQkJICAgICAgY29uc3Qg c3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLAorCQkJCSAgICAgIHZvaWQgKmRwbGxfcHJpdiwKKwkJ CQkgICAgICBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiAqZGlyZWN0aW9uLAorCQkJCSAgICAgIHN0 cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKK3sKKwkqZGlyZWN0aW9uID0gRFBMTF9QSU5f RElSRUNUSU9OX0lOUFVUOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRw bGxfcGluX29wcyBzaXQ5NTMxeF9kcGxsX2lucHV0X3Bpbl9vcHMgPSB7CisJLmRpcmVjdGlvbl9n ZXQJCT0gc2l0OTUzMXhfZHBsbF9pbnB1dF9waW5fZGlyZWN0aW9uX2dldCwKK307CisKKy8qCisg KiBJTlRTWU5DIHBpbiBvcHMKKyAqCisgKiBJTlRTWU5DIGlzIHRoZSBjaGlwJ3MgaW50ZXItUExM IHN5bmMgbmV0OiBvbmUgUExMIGRyaXZlcyBpdCBhbmQgb3RoZXIKKyAqIFBMTHMgbWF5IGxvY2sg dG8gaXQgaW5zdGVhZCBvZiB0byBhbiBleHRlcm5hbCByZWZlcmVuY2UuICBUaGUgdHdvCisgKiBy b2xlcyBhcmUgZXhwb3NlZCBhcyB0d28gc2VwYXJhdGUgcGlucyBzbyBuZWl0aGVyIG92ZXJsb2Fk cyB0aGUgb3RoZXI6CisgKgorICogICAtIGEgc291cmNlIChvdXRwdXQpIHBpbiByZWdpc3RlcmVk IG9uIGV2ZXJ5IERQTEwuICBDb25uZWN0aW5nIGl0IG9uIGEKKyAqICAgICBEUExMIG1ha2VzIHRo YXQgRFBMTCBkcml2ZSBJTlRTWU5DOyBvbmx5IG9uZSBEUExMIG1heSBkcml2ZSBpdCBhdCBhCisg KiAgICAgdGltZS4gIEl0IGhhcyBubyBwcmlvcml0eSBvcHMgLS0gZHJpdmluZyB0aGUgbmV0IGlz IG5vdCBhIHJlZmVyZW5jZQorICogICAgIHNlbGVjdGlvbi4KKyAqICAgLSBhIGRlc3RpbmF0aW9u IChpbnB1dCkgcGluIHJlZ2lzdGVyZWQgb24gZXZlcnkgRFBMTC4gIENvbm5lY3RpbmcgaXQKKyAq ICAgICBvbiBhIERQTEwgbWFrZXMgdGhhdCBEUExMIGVsaWdpYmxlIHRvIGxvY2sgdG8gSU5UU1lO QyBhcyBhCisgKiAgICAgcmVmZXJlbmNlLCBzbyBpdCBjYXJyaWVzIHRoZSBwcmlvcml0eSBvcHMu CisgKi8KKworLyogLS0tLSBJTlRTWU5DIHNvdXJjZSAob3V0cHV0KSBwaW4gLS0tLSAqLworCisv KiBUaGUgSU5UU1lOQyBzb3VyY2UgcGluIGlzIGFuIG91dHB1dDsgaXRzIGRpcmVjdGlvbl9nZXQg aXMgZGVmaW5lZCBiZWxvdy4gKi8KK3N0YXRpYyBpbnQKK3NpdDk1MzF4X2RwbGxfb3V0cHV0X3Bp bl9kaXJlY3Rpb25fZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLAorCQkJCSAgICAgICB2 b2lkICpwaW5fcHJpdiwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxs LAorCQkJCSAgICAgICB2b2lkICpkcGxsX3ByaXYsCisJCQkJICAgICAgIGVudW0gZHBsbF9waW5f ZGlyZWN0aW9uICpkaXJlY3Rpb24sCisJCQkJICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sg KmV4dGFjayk7CisKKy8qIC0tLS0gSU5UU1lOQyBkZXN0aW5hdGlvbiAoaW5wdXQpIHBpbiAtLS0t ICovCisKKy8qCisgKiBYTyAoY3J5c3RhbCBvc2NpbGxhdG9yKSBwaW4gb3BzCisgKgorICogVGhl IFhPIGlzIHRoZSBjaGlwJ3MgaW50ZXJuYWwgcmVmZXJlbmNlIG9zY2lsbGF0b3IgdGhhdCBmZWVk cyBldmVyeQorICogUExMLiAgSXQgaXMgZXhwb3NlZCBzbyB1c2Vyc3BhY2UgY2FuIHNlZSB0aGUg b24tY2hpcCByZWZlcmVuY2UsIGJ1dCBpdAorICogY2Fubm90IGJlIHJvdXRlZCBvciBkaXNjb25u ZWN0ZWQsIHNvIGl0IGlzIHJlcG9ydGVkIHBlcm1hbmVudGx5CisgKiBjb25uZWN0ZWQgYW5kIG9m ZmVycyBubyBzdGF0ZV9vbl9kcGxsX3NldCAvIHByaW8gb3BzLgorICovCisKK3N0YXRpYyBpbnQK K3NpdDk1MzF4X2RwbGxfeG9fcGluX3N0YXRlX29uX2RwbGxfZ2V0KGNvbnN0IHN0cnVjdCBkcGxs X3BpbiAqcGluLAorCQkJCSAgICAgICB2b2lkICpwaW5fcHJpdiwKKwkJCQkgICAgICAgY29uc3Qg c3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLAorCQkJCSAgICAgICB2b2lkICpkcGxsX3ByaXYsCisJ CQkJICAgICAgIGVudW0gZHBsbF9waW5fc3RhdGUgKnN0YXRlLAorCQkJCSAgICAgICBzdHJ1Y3Qg bmV0bGlua19leHRfYWNrICpleHRhY2spCit7CisJKnN0YXRlID0gRFBMTF9QSU5fU1RBVEVfQ09O TkVDVEVEOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29w cyBzaXQ5NTMxeF9kcGxsX3hvX3Bpbl9vcHMgPSB7CisJLmRpcmVjdGlvbl9nZXQJCT0gc2l0OTUz MXhfZHBsbF9pbnB1dF9waW5fZGlyZWN0aW9uX2dldCwKKwkuc3RhdGVfb25fZHBsbF9nZXQJPSBz aXQ5NTMxeF9kcGxsX3hvX3Bpbl9zdGF0ZV9vbl9kcGxsX2dldCwKK307CisKK3N0YXRpYyBpbnQK K3NpdDk1MzF4X2RwbGxfb3V0cHV0X3Bpbl9kaXJlY3Rpb25fZ2V0KGNvbnN0IHN0cnVjdCBkcGxs X3BpbiAqcGluLAorCQkJCSAgICAgICB2b2lkICpwaW5fcHJpdiwKKwkJCQkgICAgICAgY29uc3Qg c3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLAorCQkJCSAgICAgICB2b2lkICpkcGxsX3ByaXYsCisJ CQkJICAgICAgIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uICpkaXJlY3Rpb24sCisJCQkJICAgICAg IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKK3sKKwkqZGlyZWN0aW9uID0gRFBMTF9Q SU5fRElSRUNUSU9OX09VVFBVVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBkcGxsX3Bpbl9vcHMgc2l0OTUzMXhfZHBsbF9vdXRwdXRfcGluX29wcyA9IHsKKwkuZGlyZWN0 aW9uX2dldAkJPSBzaXQ5NTMxeF9kcGxsX291dHB1dF9waW5fZGlyZWN0aW9uX2dldCwKK307CisK K2NvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKgorc2l0OTUzMXhfZHBsbF9waW5fb3BzX2dldChj b25zdCBzdHJ1Y3Qgc2l0OTUzMXhfZHBsbF9waW4gKnBpbikKK3sKKwlpZiAoIXNpdDk1MzF4X2Rw bGxfaXNfaW5wdXRfcGluKHBpbikpCisJCXJldHVybiAmc2l0OTUzMXhfZHBsbF9vdXRwdXRfcGlu X29wczsKKwlpZiAoc2l0OTUzMXhfZHBsbF9pc194b19waW4ocGluKSkKKwkJcmV0dXJuICZzaXQ5 NTMxeF9kcGxsX3hvX3Bpbl9vcHM7CisJcmV0dXJuICZzaXQ5NTMxeF9kcGxsX2lucHV0X3Bpbl9v cHM7Cit9CisKKy8qCisgKiBzaXQ5NTMxeF9kcGxsX2NoYW5nZXNfY2hlY2sgLSBjaGVjayBmb3Ig c3RhdGUgY2hhbmdlcyBhbmQgbm90aWZ5CisgKgorICogQ2FsbGVkIGZyb20gc2l0OTUzMXhfZGV2 X3BlcmlvZGljX3dvcmsoKS4gIENvbXBhcmVzIGN1cnJlbnQgaGFyZHdhcmUKKyAqIHN0YXRlIGFn YWluc3QgY2FjaGVkIHZhbHVlcyBhbmQgc2VuZHMgbmV0bGluayBub3RpZmljYXRpb25zIG9uIGNo YW5nZXMuCisgKi8KK3ZvaWQgc2l0OTUzMXhfZHBsbF9jaGFuZ2VzX2NoZWNrKHN0cnVjdCBzaXQ5 NTMxeF9kcGxsICpzaXRkcGxsKQoreworCWVudW0gZHBsbF9sb2NrX3N0YXR1c19lcnJvciBzdGF0 dXNfZXJyb3IgPSBEUExMX0xPQ0tfU1RBVFVTX0VSUk9SX05PTkU7CisJc3RydWN0IHNpdDk1MzF4 X2RldiAqc2l0ZGV2ID0gc2l0ZHBsbC0+ZGV2OworCWVudW0gZHBsbF9sb2NrX3N0YXR1cyBsb2Nr X3N0YXR1czsKKwlzdHJ1Y3Qgc2l0OTUzMXhfZHBsbF9waW4gKnBpbjsKKwlpbnQgcmM7CisKKwly YyA9IHNpdDk1MzF4X2RwbGxfbG9ja19zdGF0dXNfZ2V0KHNpdGRwbGwtPmRwbGxfZGV2LCBzaXRk cGxsLAorCQkJCQkgICAmbG9ja19zdGF0dXMsICZzdGF0dXNfZXJyb3IsIE5VTEwpOworCWlmIChy YykgeworCQlkZXZfZXJyKHNpdGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBEUExMJXUgbG9jayBz dGF0dXM6ICVkXG4iLAorCQkJc2l0ZHBsbC0+aWQsIHJjKTsKKwkJcmV0dXJuOworCX0KKworCS8q CisJICogVGhlIGNvcmUgcHVibGlzaGVzIHRoZSBlcnJvciBkZXRhaWwgYWxvbmdzaWRlIHRoZSBz dGF0dXMsIHNvIGEKKwkgKiBjaGFuZ2UgaW4gZWl0aGVyIGlzIGEgY2hhbmdlIHN1YnNjcmliZXJz IGhhdmUgdG8gYmUgdG9sZCBhYm91dDoKKwkgKiBhbiBpbm5lciBsb3NzIG9mIGxvY2sgYXBwZWFy aW5nIG9yIGNsZWFyaW5nIHdoaWxlIHRoZSBzdGF0dXMKKwkgKiBzdGF5cyBVTkxPQ0tFRCB3b3Vs ZCBvdGhlcndpc2UgYmUgdmlzaWJsZSBvbmx5IHRvIGEgbGF0ZXIgR0VULgorCSAqLworCWlmIChz aXRkcGxsLT5sb2NrX3N0YXR1cyAhPSBsb2NrX3N0YXR1cyB8fAorCSAgICBzaXRkcGxsLT5sb2Nr X3N0YXR1c19lcnJvciAhPSBzdGF0dXNfZXJyb3IpIHsKKwkJc2l0ZHBsbC0+bG9ja19zdGF0dXMg PSBsb2NrX3N0YXR1czsKKwkJc2l0ZHBsbC0+bG9ja19zdGF0dXNfZXJyb3IgPSBzdGF0dXNfZXJy b3I7CisJCWRwbGxfZGV2aWNlX2NoYW5nZV9udGYoc2l0ZHBsbC0+ZHBsbF9kZXYpOworCX0KKwor CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmc2l0ZHBsbC0+cGlucywgbGlzdCkgeworCQljb25z dCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHM7CisJCWVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGU7 CisJCWJvb2wgY2hhbmdlZDsKKworCQkvKgorCQkgKiBQb2xsIGlucHV0IHBpbnMgd2hvc2Ugc3Rh dGUgY2FuIGNoYW5nZSBhdXRvbm9tb3VzbHk6IHJlZ3VsYXIKKwkJICogcmVmZXJlbmNlcyBhbmQg dGhlIElOVFNZTkMgZGVzdGluYXRpb24gcGluLiAgT3V0cHV0cyAoaW5jbC4KKwkJICogdGhlIElO VFNZTkMgc291cmNlKSBjaGFuZ2Ugb25seSB0aHJvdWdoIHRoZWlyIG93biBzZXQKKwkJICogY2Fs bGJhY2sgYW5kIHRoZSBYTyBpcyBwZXJtYW5lbnRseSBjb25uZWN0ZWQsIHNvIHNraXAgdGhvc2Uu CisJCSAqIEVhY2ggcGluJ3Mgc3RhdGVfb25fZHBsbF9nZXQgcmVzb2x2ZXMgdG8gdGhlIHJpZ2h0 IGdldHRlci4KKwkJICovCisJCWlmICghc2l0OTUzMXhfZHBsbF9pc19pbnB1dF9waW4ocGluKSB8 fAorCQkgICAgc2l0OTUzMXhfZHBsbF9pc194b19waW4ocGluKSkKKwkJCWNvbnRpbnVlOworCisJ CW9wcyA9IHNpdDk1MzF4X2RwbGxfcGluX29wc19nZXQocGluKTsKKwkJcmMgPSBvcHMtPnN0YXRl X29uX2RwbGxfZ2V0KHBpbi0+ZHBsbF9waW4sIHBpbiwKKwkJCQkJICAgIHNpdGRwbGwtPmRwbGxf ZGV2LCBzaXRkcGxsLAorCQkJCQkgICAgJnN0YXRlLCBOVUxMKTsKKwkJaWYgKHJjKQorCQkJY29u dGludWU7CisKKwkJLyoKKwkJICogVGhlIGZpcnN0IHBhc3Mgb25seSB0YWtlcyB0aGUgYmFzZWxp bmU6IHRoZSBwaW4gd2FzCisJCSAqIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIHN0YXRlLCBzbyBub3Ro aW5nIGhhcyBjaGFuZ2VkIHlldC4KKwkJICovCisJCWNoYW5nZWQgPSBwaW4tPnNlZW4gJiYgc3Rh dGUgIT0gcGluLT5waW5fc3RhdGU7CisJCXBpbi0+cGluX3N0YXRlID0gc3RhdGU7CisJCXBpbi0+ c2VlbiA9IHRydWU7CisJCWlmIChjaGFuZ2VkKSB7CisJCQlkZXZfZGJnKHNpdGRldi0+ZGV2LCAi JXMgc3RhdGUgY2hhbmdlZFxuIiwgcGluLT5sYWJlbCk7CisJCQlkcGxsX3Bpbl9jaGFuZ2VfbnRm KHBpbi0+ZHBsbF9waW4pOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3Np dDk1MzF4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9kcGxsLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45ZWIyNjUwNWY5NGUKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvZHBsbC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogU2lUaW1lIFNpVDk1MzF4 IERQTEwgc3Vic3lzdGVtIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAyNiBTaVRp bWUgQ29ycC4KKyAqIEF1dGhvcjogQWxpIFJvdWhpIDxhcm91aGlAc2l0aW1lLmNvbT4KKyAqIEF1 dGhvcjogT2xlZyBaYWRvcm96aG55aSA8T2xlZy5aYWRvcm96aG55aUBkZXZveHNvZnR3YXJlLmNv bT4KKyAqCisgKiBEUExMIGRldmljZSBhbmQgcGluIHN0cnVjdHVyZXMsIGFuZCBmdW5jdGlvbiBk ZWNsYXJhdGlvbnMgZm9yCisgKiB0aGUgRFBMTCByZWdpc3RyYXRpb24gYW5kIGNhbGxiYWNrIGxh eWVyLgorICovCisKKyNpZm5kZWYgX1NJVDk1MzFYX0RQTExfSAorI2RlZmluZSBfU0lUOTUzMVhf RFBMTF9ICisKKyNpbmNsdWRlIDxsaW51eC9kcGxsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5o PgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBzaXQ5NTMxeF9kZXY7CisKKy8q IFBlci1waW4gRFBMTCBzdGF0ZS4gKi8KK3N0cnVjdCBzaXQ5NTMxeF9kcGxsX3BpbiB7CisJc3Ry dWN0IGxpc3RfaGVhZAkJbGlzdDsKKwlzdHJ1Y3Qgc2l0OTUzMXhfZHBsbAkJKmRwbGw7CisJc3Ry dWN0IGRwbGxfcGluCQkJKmRwbGxfcGluOworCWRwbGxfdHJhY2tlcgkJCXRyYWNrZXI7CisJc3Ry dWN0IGZ3bm9kZV9oYW5kbGUJCSpmd25vZGU7CisJY2hhcgkJCQlsYWJlbFs4XTsJLyogIklOMCIs ICJPVVQzIiAqLworCWVudW0gZHBsbF9waW5fZGlyZWN0aW9uCQlkaXI7CisJdTgJCQkJaWQ7CQkv KiBoYXJkd2FyZSBpbmRleCAqLworCXU4CQkJCXByaW87CisJZW51bSBkcGxsX3Bpbl9zdGF0ZQkJ cGluX3N0YXRlOworCWJvb2wJCQkJc2VlbjsJLyogYmFzZWxpbmUgdGFrZW4gYnkgdGhlIHBvbGwg Ki8KK307CisKKy8qIFBlci1QTEwgRFBMTCBkZXZpY2Ugc3RhdGUuICovCitzdHJ1Y3Qgc2l0OTUz MXhfZHBsbCB7CisJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKKwlzdHJ1Y3Qgc2l0OTUzMXhfZGV2 CQkqZGV2OworCXN0cnVjdCBkcGxsX2RldmljZQkJKmRwbGxfZGV2OworCWRwbGxfdHJhY2tlcgkJ CXRyYWNrZXI7CisJc3RydWN0IGRwbGxfZGV2aWNlX29wcwkJb3BzOwkvKiBwZXItaW5zdGFuY2Ug Y29weSAqLworCXN0cnVjdCBsaXN0X2hlYWQJCXBpbnM7CisJdTgJCQkJaWQ7CS8qIDAgPSBQTExB IC4uIDMgPSBQTExEICovCisJZW51bSBkcGxsX2xvY2tfc3RhdHVzCQlsb2NrX3N0YXR1czsKKwll bnVtIGRwbGxfbG9ja19zdGF0dXNfZXJyb3IJbG9ja19zdGF0dXNfZXJyb3I7Cit9OworCisvKiAt LS0tIERQTEwgYWxsb2NhdGlvbiBhbmQgcmVnaXN0cmF0aW9uIC0tLS0gKi8KKy8qCisgKiBUaGUg Y2FsbGJhY2sgdGFibGVzIHN0YXkgd2l0aCB0aGUgY2FsbGJhY2tzOyB0aGUgcmVnaXN0cmF0aW9u IGNvZGUgdGhhdAorICogaGFuZHMgdGhlbSB0byB0aGUgc3Vic3lzdGVtIGxpdmVzIG5leHQgdG8g cHJvYmUoKSBpbiBjb3JlLmMuCisgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vf b3BzIHNpdDk1MzF4X2RwbGxfZGV2aWNlX29wczsKK2NvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMg Kgorc2l0OTUzMXhfZHBsbF9waW5fb3BzX2dldChjb25zdCBzdHJ1Y3Qgc2l0OTUzMXhfZHBsbF9w aW4gKnBpbik7CisKK3N0cnVjdCBzaXQ5NTMxeF9kcGxsICpzaXQ5NTMxeF9kcGxsX2FsbG9jKHN0 cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggY2gpOwordm9pZCBzaXQ5NTMxeF9kcGxsX2Zy ZWUoc3RydWN0IHNpdDk1MzF4X2RwbGwgKnNpdGRwbGwpOworaW50ICBzaXQ5NTMxeF9kcGxsX3Jl Z2lzdGVyKHN0cnVjdCBzaXQ5NTMxeF9kcGxsICpzaXRkcGxsKTsKK3ZvaWQgc2l0OTUzMXhfZHBs bF91bnJlZ2lzdGVyKHN0cnVjdCBzaXQ5NTMxeF9kcGxsICpzaXRkcGxsKTsKKworLyogLS0tLSBQ ZXJpb2RpYyBjaGFuZ2UgZGV0ZWN0aW9uIC0tLS0gKi8KK3ZvaWQgc2l0OTUzMXhfZHBsbF9sb2Nr X3N0YXR1c19iYXNlbGluZShzdHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0ZHBsbCk7Cit2b2lkIHNp dDk1MzF4X2RwbGxfY2hhbmdlc19jaGVjayhzdHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0ZHBsbCk7 CisKKyNlbmRpZiAvKiBfU0lUOTUzMVhfRFBMTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Rw bGwvc2l0OTUzMXgvcmVncy5oIGIvZHJpdmVycy9kcGxsL3NpdDk1MzF4L3JlZ3MuaAppbmRleCA2 NzA3N2QxMTI2NTMuLjkzNDllYzcyMjU2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3NpdDk1 MzF4L3JlZ3MuaAorKysgYi9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvcmVncy5oCkBAIC0zNyw3ICsz NywyNjQgQEAKICAqLwogI2RlZmluZSBTSVQ5NTMxWF9SRUdfVkFSSUFOVF9JRAkJU0lUOTUzMVhf UkVHKDB4MDAsIDB4MDIpCiAKLS8qIFZhcmlhbnQgSUQgdmFsdWVzIChwYWdlIDAgcmVnIDB4MDIp ICovCisvKiBEQ08gdHJpZ2dlciBwdWxzZSB0aW1pbmc6IG1pbmltdW0gNiBucyByZXF1aXJlZCBi eSBoYXJkd2FyZSAqLworCisvKiBQYWdlIDAgLS0gUExMIGlubmVyIGxvb3AgbG9zcy1vZi1sb2Nr ICovCisjZGVmaW5lIFNJVDk1MzFYX1JFR19QTExfSU5ORVJfTE9MX1NUQVRVUwlTSVQ5NTMxWF9S RUcoMHgwMCwgMHg5MikKKyNkZWZpbmUgU0lUOTUzMVhfUkVHX1BMTF9JTk5FUl9MT0xfTk9USUYJ U0lUOTUzMVhfUkVHKDB4MDAsIDB4OTMpCisKKy8qIFBhZ2UgMCAtLSBDbG9jayBtb25pdG9yIFBM TCAvIFhPIHN0YXR1cyAqLworI2RlZmluZSBTSVQ5NTMxWF9SRUdfQ01PTl9OT1RJRgkJU0lUOTUz MVhfUkVHKDB4MDAsIDB4OUUpCisKKy8qIFBhZ2UgMCAtLSBQTEwgb3V0ZXItbG9vcCBsb3NzLW9m LWxvY2sgKi8KKyNkZWZpbmUgU0lUOTUzMVhfUkVHX09VVEVSX0xPTF9TVEFUVVMJU0lUOTUzMVhf UkVHKDB4MDAsIDB4MDYpCisjZGVmaW5lIFNJVDk1MzFYX1JFR19PVVRFUl9MT0xfTk9USUYJCVNJ VDk1MzFYX1JFRygweDAwLCAweDA3KQorCisvKiBQYWdlIDAgLS0gUExMIGhvbGRvdmVyIGZyZWV6 ZSBzdGF0dXMgKi8KKyNkZWZpbmUgU0lUOTUzMVhfUkVHX0hPX0ZSRUVaRV9TVEFUVVMJU0lUOTUz MVhfUkVHKDB4MDAsIDB4MEEpCisjZGVmaW5lIFNJVDk1MzFYX1JFR19IT19GUkVFWkVfTk9USUYJ U0lUOTUzMVhfUkVHKDB4MDAsIDB4MEIpCisKKy8qIFBhZ2UgMCAtLSBJTlRTWU5DIChpbnRlci1Q TEwgc3luY2hyb25pemF0aW9uKSBnbG9iYWwgZW5hYmxlICovCisjZGVmaW5lIFNJVDk1MzFYX1JF R19JTlRTWU5DX0dMT0JBTAkJU0lUOTUzMVhfUkVHKDB4MDAsIDB4NDApCisjZGVmaW5lIFNJVDk1 MzFYX0lOVFNZTkNfRU5fQklUCQk2CisKKy8qCisgKiBQcmlvcml0eSB0YWJsZTogNiByZWdpc3Rl cnMgcGVyIFBMTCwgZWFjaCBob2xkcyB0d28gcHJpb3JpdHkgc2xvdHMKKyAqIG5pYmJsZS1wYWNr ZWQuICBUaGUgcmVnaXN0ZXIgaG9sZGluZyBzbG90cyAybiBhbmQgMm4rMSBrZWVwcyB0aGUKKyAq IGVhcmxpZXIgc2xvdCAoQ0xLX1NQQVJFPDJuPlNFTF9QTEwpIGluIFs3OjRdIGFuZCB0aGUgbGF0 ZXIgb25lIGluCisgKiBbMzowXS4KKyAqCisgKiBCYXNlIHJlZ2lzdGVycyBmb3IgUExMQTogMHgx Ni0weDFCIChzbG90cyAwLTEwIHBsdXMgdGhlCisgKiBhY3RpdmUtcmVmZXJlbmNlIG5pYmJsZSku CisgKiBGb3IgUExMIE46ICBiYXNlICsgNiAqIE4gIChlLmcuIFBMTEIgc3RhcnRzIGF0IDB4MUMp LgorICoKKyAqIElucHV0IHNvdXJjZSBlbmNvZGluZyAoNC1iaXQgdmFsdWUpOgorICogICAwPUlO MFAsIDE9SU4xUCwgMj1JTjJQLCAzPUlOM1AsCisgKiAgIDU9T0NYTywgNj1JTlRTWU5DLAorICog ICA3PUlOME4sIDg9SU4xTiwgOT1JTjJOLCAxMD1JTjNOCisgKgorICogQ29kZXMgNCBhbmQgMTEg YWRkcmVzcyBhIGZpZnRoIGlucHV0IHBhaXIgdGhhdCB0aGlzIHBhcnQgZG9lcworICogbm90IGhh dmUuICBUaGV5IHJlYWQgYmFjayBhcyBubyB2YWxpZCByZWZlcmVuY2UuCisgKi8KKyNkZWZpbmUg U0lUOTUzMVhfUEFHRV9QUklPU1lTCQkweDAxCisjZGVmaW5lIFNJVDk1MzFYX1BSSU9fQkFTRV9S RUcJCTB4MTYKKyNkZWZpbmUgU0lUOTUzMVhfUFJJT19SRUdTX1BFUl9QTEwJCTYKKyNkZWZpbmUg U0lUOTUzMVhfUFJJT19TTE9UU19QRVJfUkVHCQkyCisvKgorICogMTEgcHJpb3JpdHkgc2xvdHMs IENMS19TUEFSRTBTRUxfUExMIHRocm91Z2ggQ0xLX1NQQVJFMTBTRUxfUExMLgorICogVGhlIHR3 ZWxmdGggbmliYmxlIG9mIHRoZSBibG9jayBpcyBub3QgYSBzbG90OiBpdCBpcworICogQ0xLX0FD VElWRVNFTF9QTEwsIHNlZSBTSVQ5NTMxWF9QUklPX0FDVElWRVNFTF9PRkYgYmVsb3cuCisgKi8K KyNkZWZpbmUgU0lUOTUzMVhfUFJJT19NQVhfU0xPVFMJCTExCisvKiBOdW1iZXIgb2Ygc291cmNl IGVuY29kaW5ncyAoMC0xMSksIHVucmVsYXRlZCB0byB0aGUgc2xvdCBjb3VudCAqLworI2RlZmlu ZSBTSVQ5NTMxWF9QUklPX05VTV9TUkMJCTEyCisjZGVmaW5lIFNJVDk1MzFYX1BSSU9fTklCQkxF X01BU0sJCTB4MEYKKyNkZWZpbmUgU0lUOTUzMVhfUFJJT19ISV9TSElGVAkJNAorLyogSW5wdXQg c291cmNlIGVuY29kaW5nIHZhbHVlcyAoc2VlIHRhYmxlIGFib3ZlKSAqLworLyoKKyAqIEVpdGhl ciBvZiB0aGUgdHdvIGNvZGVzIGZvciB0aGUgYWJzZW50IGZpZnRoIHBhaXIgd29ya3MgYXMgIm5v IHNvdXJjZSI7CisgKiB0aGUgZHJpdmVyIHdyaXRlcyB0aGlzIG9uZSB3aGVuIGl0IGVtcHRpZXMg YSBzbG90LgorICovCisjZGVmaW5lIFNJVDk1MzFYX1BSSU9fU1JDX05PTkUJCQk0CisjZGVmaW5l IFNJVDk1MzFYX1BSSU9fU1JDX09DWE8JCTUKKyNkZWZpbmUgU0lUOTUzMVhfUFJJT19TUkNfSU5U U1lOQwkJNgorI2RlZmluZSBTSVQ5NTMxWF9QUklPX1NSQ19OX0JBU0UJCTcKKy8qCisgKiBUaGUg bGFzdCByZWdpc3RlciBvZiBlYWNoIFBMTCdzIHByaW9yaXR5IGJsb2NrIGhvbGRzLCBpbiBpdHMg bG93CisgKiBuaWJibGUsIHRoZSBpbnB1dCBzb3VyY2UgdGhlIFBMTCBoYXMgY3VycmVudGx5IHNl bGVjdGVkIGFzIGl0cworICogYWN0aXZlIHJlZmVyZW5jZSAoQ0xLX0FDVElWRVNFTF9QTEwsIHNh bWUgNC1iaXQgZW5jb2RpbmcgYXMgYWJvdmUpLgorICovCisjZGVmaW5lIFNJVDk1MzFYX1BSSU9f QUNUSVZFU0VMX09GRgkJNQorCisvKgorICogUGFnZSAwIC0tIFBSR19EaXJlY3RpdmVzX0dFTkVS SUNfMCwgdGhlIG1haW4gc3lzdGVtJ3MgcHJvZ3JhbW1pbmcKKyAqIGRpcmVjdGl2ZSByZWdpc3Rl ci4gIEV2ZXJ5IHBhZ2UgY2FycmllcyBpdHMgb3duIGNvcHkgb2YgdGhpcworICogcmVnaXN0ZXIg YXQgb2Zmc2V0IDB4MEYgd2l0aCB0aGUgc2FtZSBiaXQgbGF5b3V0OgorICoKKyAqICAgYml0IDYg IHByb2NlZWQgdG8gbG9vcCBsb2NrIC8gYWN0aXZlIHN0YXRlIGZyb20gdGhlIFBSR19DTUQgc3Rh dGUKKyAqICAgYml0IDQgIHVwZGF0ZSB0aGUgTlZNIGJhbmsgZnJvbSB0aGUgZWZ1c2UgY29udGVu dHMKKyAqICAgYml0IDMgIHJlYWQgdGhlIGVmdXNlIGludG8gdGhlIHZvbGF0aWxlIHJlZ2lzdGVy cworICogICBiaXQgMiAgcHJvZ3JhbSB0aGUgZWZ1c2UKKyAqICAgYml0IDEgIHNtYWxsIGNoYW5n ZSB1cGRhdGUgKFNJVDk1MzFYX1NNQUxMX1VQREFURV9DTUQpCisgKiAgIGJpdCAwICBlc2NhcGUg dG8gdGhlIFBSR19DTUQgc3RhdGUKKyAqCisgKiBUaGUgTlZNIGJhbmsgaXMgYSB2b2xhdGlsZSBz aGFkb3csIHNvIGJpdHMgNCBhbmQgMSBhcmUgYm90aCBmaW5lIGluCisgKiBhIHJ1bnRpbWUgcGF0 aDogYml0IDEgZm9yIGEgY2hhbmdlIG1hZGUgaW4gdGhlIGFjdGl2ZSBzdGF0ZSwgYml0IDQKKyAq IHRvIGNsb3NlIGEgUFJHX0NNRCBzZXF1ZW5jZS4gIE9ubHkgYml0IDIgd3JpdGVzIG5vbi12b2xh dGlsZQorICogc3RvcmFnZSwgYW5kIHRoZSBkcml2ZXIgbmV2ZXIgaXNzdWVzIGl0LgorICovCisj ZGVmaW5lIFNJVDk1MzFYX1JFR19HTE9CQUxfVVBEQVRFCQlTSVQ5NTMxWF9SRUcoMHgwMCwgMHgw RikKKyNkZWZpbmUgU0lUOTUzMVhfU01BTExfVVBEQVRFX0NNRAkJMHgwMgorCisvKiBPbmUgYml0 IHBlciBpbnB1dCBQQUlSIChiaXQgMCA9IENMS0lOMCwgLi4uLCBiaXQgMyA9IENMS0lOMykgKi8K KyNkZWZpbmUgU0lUOTUzMVhfUkVHX0lOX0RFX0ZPUkNFCQlTSVQ5NTMxWF9SRUcoMHgwMiwgMHhF OCkKKyNkZWZpbmUgU0lUOTUzMVhfUkVHX0lOX0RFX1NUQVRFCQlTSVQ5NTMxWF9SRUcoMHgwMiwg MHhFOSkKKyNkZWZpbmUgU0lUOTUzMVhfUkVHX0lOX1NFUF9GT1JDRQkJU0lUOTUzMVhfUkVHKDB4 MDIsIDB4RUEpCisjZGVmaW5lIFNJVDk1MzFYX1JFR19JTl9TRVBfU1RBVEUJCVNJVDk1MzFYX1JF RygweDAyLCAweEVCKQorI2RlZmluZSBTSVQ5NTMxWF9SRUdfSU5fU0VOX0ZPUkNFCQlTSVQ5NTMx WF9SRUcoMHgwMiwgMHhGMikKKyNkZWZpbmUgU0lUOTUzMVhfUkVHX0lOX1NFTl9TVEFURQkJU0lU OTUzMVhfUkVHKDB4MDIsIDB4RjMpCisKKy8qCisgKiBPbmUgcmVnaXN0ZXIgcGVyIGlucHV0IHBh aXIgYXQgMHgxQiArIDB4MTAgKiBwYWlyCisgKiAoQ0xLSU4wID0gMHgxQiwgQ0xLSU4xID0gMHgy QiwgQ0xLSU4yID0gMHgzQiwgQ0xLSU4zID0gMHg0QikuCisgKiBTRV9QX0VOL1NFX05fRU4gc2V0 IG1lYW5zIHRoZSBjb3JyZXNwb25kaW5nIGxhbmUgaXMgY29uZmlndXJlZAorICogc2luZ2xlLWVu ZGVkOyBib3RoIGNsZWFyIG1lYW5zIHRoZSBwYWlyIHJ1bnMgZGlmZmVyZW50aWFsLgorICovCisj ZGVmaW5lIFNJVDk1MzFYX1JFR19JTl9NT0RFKF9wYWlyKQkJXAorCVNJVDk1MzFYX1JFRygweDAy LCAweDFCICsgMHgxMCAqIChfcGFpcikpCisjZGVmaW5lIFNJVDk1MzFYX0lOX01PREVfU0VfUF9F TgkJQklUKDApCisjZGVmaW5lIFNJVDk1MzFYX0lOX01PREVfU0VfTl9FTgkJQklUKDEpCisKKy8q IC0tLS0gUGFnZSAweDAzIChPdXRwdXQgU3lzdGVtKSByZWdpc3RlcnMgLS0gSGktWiBjb250cm9s IC0tLS0gKi8KKyNkZWZpbmUgU0lUOTUzMVhfUkVHX0hJWl9ESUZGXzA3X01BU0sJU0lUOTUzMVhf UkVHKDB4MDMsIDB4RjIpCisjZGVmaW5lIFNJVDk1MzFYX1JFR19ISVpfRElGRl8wN19TVEFURQlT SVQ5NTMxWF9SRUcoMHgwMywgMHhGMykKKyNkZWZpbmUgU0lUOTUzMVhfUkVHX0hJWl9ESUZGXzgx MV9NQVNLCVNJVDk1MzFYX1JFRygweDAzLCAweEY0KQorI2RlZmluZSBTSVQ5NTMxWF9SRUdfSEla X0RJRkZfODExX1NUQVRFCVNJVDk1MzFYX1JFRygweDAzLCAweEY1KQorI2RlZmluZSBTSVQ5NTMx WF9SRUdfSElaX1NFXzA3X01BU0sJCVNJVDk1MzFYX1JFRygweDAzLCAweEY4KQorI2RlZmluZSBT SVQ5NTMxWF9SRUdfSElaX1NFXzA3X1NUQVRFCQlTSVQ5NTMxWF9SRUcoMHgwMywgMHhGOSkKKyNk ZWZpbmUgU0lUOTUzMVhfUkVHX0hJWl9TRV84MTFfTUFTSwkJU0lUOTUzMVhfUkVHKDB4MDMsIDB4 RkEpCisjZGVmaW5lIFNJVDk1MzFYX1JFR19ISVpfU0VfODExX1NUQVRFCVNJVDk1MzFYX1JFRygw eDAzLCAweEZCKQorLyoKKyAqIFRoZSBTRSBwYWlycyBhYm92ZSBmb3JjZSB0aGUgT3V0UCBwYWQg b2YgYSBDTU9TIG91dHB1dC4gIFRoZSBPdXROIHBhZAorICogaGFzIGl0cyBvd246IDB4RjYvMHhG NyBmb3Igc2xvdHMgMC03LCBhbmQgZm9yIHNsb3RzIDgtMTEgdGhlIHVwcGVyCisgKiBuaWJibGUg b2YgdGhlIGRpZmZlcmVudGlhbCBwYWlyLCAweEY0LzB4RjUgYml0cyA3OjQuCisgKi8KKyNkZWZp bmUgU0lUOTUzMVhfUkVHX0hJWl9TRU5fMDdfTUFTSwlTSVQ5NTMxWF9SRUcoMHgwMywgMHhGNikK KyNkZWZpbmUgU0lUOTUzMVhfUkVHX0hJWl9TRU5fMDdfU1RBVEUJU0lUOTUzMVhfUkVHKDB4MDMs IDB4RjcpCisjZGVmaW5lIFNJVDk1MzFYX0hJWl9TRU5fODExX1NISUZUCQk0CisKKy8qCisgKiBP dXRwdXQgZHJpdmVyIGNvbmZpZ3VyYXRpb24uICBFaXRoZXIgQ01PUyBlbmFibGUgbWVhbnMgdGhl IG91dHB1dAorICogaXMgd2lyZWQgc2luZ2xlLWVuZGVkIC0tIG9uZSBsYW5lLCBvciBib3RoIGRy aXZlbiBhcyBDTU9TOyB3aXRoCisgKiBuZWl0aGVyIHNldCBpdCBpcyBhIGRpZmZlcmVudGlhbCBw YWlyLgorICovCisjZGVmaW5lIFNJVDk1MzFYX09VVF9NSVNDMF9CQVNFCQkweDFFCisjZGVmaW5l IFNJVDk1MzFYX09VVF9NSVNDMF9TVFJJREUJCTB4MTAKKyNkZWZpbmUgU0lUOTUzMVhfT1VUX0NN T1NfRU5QCQlCSVQoMykKKyNkZWZpbmUgU0lUOTUzMVhfT1VUX0NNT1NfRU5OCQlCSVQoMikKKwor LyoKKyAqIE91dHB1dCBkaXZpZGVyIHJlZ2lzdGVycyBpbiBQYWdlcyAzLzQuICBFYWNoIG91dHB1 dCBoYXMgYSAzNC1iaXQKKyAqIGludGVnZXIgZGl2aWRlciBtYXBwZWQgdG8gNSBieXRlcyAoTFNC IGF0IGJhc2UgcmVnLCBNU0IgYXQgYmFzZS00KS4KKyAqIE91dHB1dHMgMC01IGFyZSBvbiBQYWdl IDMsIG91dHB1dHMgNi0xMSBhcmUgb24gUGFnZSA0LgorICoKKyAqIFRoZSBiYXNlIHJlZ2lzdGVy IGZvciBzbG90IE4gd2l0aGluIGEgcGFnZSBpczoKKyAqICAgY2xrb3V0X29kcl9kaXZuX2Jhc2Vb c2xvdF0gPSB7IDB4MTQsIDB4MjQsIDB4MzQsIDB4NDQsIDB4NTQsIDB4NjQgfQorICoKKyAqIExh eW91dDogYmFzZT1MU0IsIGJhc2UtMSwgYmFzZS0yLCBiYXNlLTMsIGJhc2UtNFsxOjBdPU1TQi4K KyAqCisgKiBQZXItY2hpcCBjbGtvdXRfbWFwW10gdHJhbnNsYXRlcyBvdXRwdXQgaW5kZXggdG8g c2xvdCBwb3NpdGlvbi4KKyAqLworI2RlZmluZSBTSVQ5NTMxWF9QQUdFX09VVFNZUzBfU0xPVF9N QVgJNSAgIC8qIHNsb3RzIDAtNSBvbiBQYWdlIDB4MDMgKi8KKworLyogTWlzYyBvdXRwdXQgc3lz dGVtIHJlZ2lzdGVycyAqLworI2RlZmluZSBTSVQ5NTMxWF9SRUdfUFJHX0RJUl9HRU4JCVNJVDk1 MzFYX1JFRygweDAzLCAweDBGKQorI2RlZmluZSBTSVQ5NTMxWF9QUkdfQ01EX1NUQVRFCQkweDAx CisjZGVmaW5lIFNJVDk1MzFYX1VQREFURV9OVk0JCQkweDEwCisjZGVmaW5lIFNJVDk1MzFYX0xP T1BfTE9DSwkJCTB4NDAKKworLyogRGVidWcgcmVnaXN0ZXIgKHNhbWUgb2Zmc2V0LCBwZXItcGFn ZSkgKi8KKyNkZWZpbmUgU0lUOTUzMVhfUkVHX09VVFNZU19ERUJVRwkJU0lUOTUzMVhfUkVHKDB4 MDMsIDB4QkQpCisjZGVmaW5lIFNJVDk1MzFYX0RFQlVHX1VOTE9DS19WQUwJCTB4QzMKKworLyoK KyAqIE9uLWRlbWFuZCBwaGFzZS1mbHVzaCBmaXJlZCBmcm9tIGEgcmVnaXN0ZXIgcmF0aGVyIHRo YW4gYSBHUElPIHBpbi4KKyAqIERJVk9fUEhBU0VfU0VMX1JFRyBzZWxlY3RzIHRoZSBpbi1yZWdp c3RlciB0cmlnZ2VyIHNvdXJjZSBhbmQKKyAqIERJVk9fUEhBU0VfVFJJRyBmbHVzaGVzIHRoZSBv dXRwdXQgcGhhc2Ugd2hlbiBwdWxzZWQgaGlnaCB0aGVuIGxvdy4KKyAqIFRoZSB1bnJlbGF0ZWQg T0ViIHRyaWdnZXIgcGFpciBpbiBiaXRzIFs3OjZdIG11c3QgYmUgcHJlc2VydmVkLgorICovCisj ZGVmaW5lIFNJVDk1MzFYX1JFR19HUElPX0ZVTkNfQ1RSTDEJU0lUOTUzMVhfUkVHKDB4MDAsIDB4 NjUpCisjZGVmaW5lIFNJVDk1MzFYX0RJVk9fUEhBU0VfU0VMX1JFRwlCSVQoNSkKKyNkZWZpbmUg U0lUOTUzMVhfRElWT19QSEFTRV9UUklHCUJJVCg0KQorCisvKiAtLS0tIFBMTCBwYWdlIHJlZ2lz dGVycyAoYXBwbHkgdG8gcGFnZXMgMHgwQS0weDBEKSAtLS0tICovCisjZGVmaW5lIFNJVDk1MzFY X1BMTF9SRUdfU01BTExfVVBEQVRFCTB4MEYKKworLyoKKyAqIExvb3AtZmlsdGVyIGNvZWZmaWNp ZW50cyBvbiBQTExfUEFHRSByZWdzIDB4MTAtMHgxNSAoMyBub3JtYWwgKworICogMyBmYXN0LWxv Y2spIGFyZSBHVUkvTlZNLWdlbmVyYXRlZCBieSB0aGUgdGltaW5nIGNvbmZpZ3VyYXRvciBhbmQg bXVzdCBub3QgYmUKKyAqIHJlcHJvZ3JhbW1lZCBhdCBydW50aW1lOyB0aGUgcmVnaXN0ZXIgbWFw IGZsYWdzIHRoZW0gYXMKKyAqICJHVUkgZ2VuZXJhdGVkIGNvbmZpZ3VyYXRpb24gc2hvdWxkIG5v dCBjaGFuZ2UgbWFudWFsbHkiLgorICovCisKKy8qCisgKiBPdXRwdXQtZW5hYmxlIG1hc2ssIHR3 ZWx2ZSBiaXRzOiBiaXRzIDAtNyBpbiBMTywgYml0cyA4LTExIGluIEhJWzM6MF0uCisgKiBPVVRu IGlzIGJpdCBuIG9uIFBMTEEgYW5kIFBMTEIgYW5kIGJpdCAxMSAtIG4gb24gUExMQyBhbmQgUExM RC4KKyAqLworI2RlZmluZSBTSVQ5NTMxWF9QTExfUkVHX09VVF9NQVBfSEkJCTB4MjcKKyNkZWZp bmUgU0lUOTUzMVhfUExMX1JFR19PVVRfTUFQX0xPCQkweDI4CisjZGVmaW5lIFNJVDk1MzFYX1BM TF9SRUdfU1RBVFVTCQkweDMxCisKKyNkZWZpbmUgU0lUOTUzMVhfUExMX1JFR19BQ1RJVkUJCTB4 MDIKKyNkZWZpbmUgU0lUOTUzMVhfUExMX0FDVElWRV9CSVQJCUJJVCgwKSAgLyogUExMIHJlYWNo ZWQgYWN0aXZlIHN0YXRlICovCisKKyNkZWZpbmUgU0lUOTUzMVhfUExMX1NUQVRVU19PVVRFUl9E SVMJQklUKDUpCisKKy8qCisgKiBQTExfQ09ORklHMUZfUExMOiBiaXQgNiBwdXRzIHRoZSBQTEwg aW4gbWFudWFsIGFjdGl2ZSBzZWxlY3QsIHdoZXJlIGl0CisgKiBubyBsb25nZXIgYXJiaXRyYXRl cyBieSBwcmlvcml0eS4gIFRoZSBvdGhlciBiaXRzIGFyZSBHVUktZ2VuZXJhdGVkCisgKiBjb25m aWd1cmF0aW9uLgorICovCisjZGVmaW5lIFNJVDk1MzFYX1BMTF9SRUdfQ09ORklHMUYJCTB4MUYK KyNkZWZpbmUgU0lUOTUzMVhfUExMX0NPTkZJRzFGX01BTlVBTF9TRUwJQklUKDYpCisKKy8qCisg KiBNSVNDSU5ORVJfUExMOiBpbiBtYW51YWwgYWN0aXZlIHNlbGVjdCwgYml0IDUgbWFrZXMgdGhl IFBMTCBmb2xsb3cgdGhlCisgKiBtYW51YWwgaW5wdXQgc2VsZWN0IGluc3RlYWQgb2YgaXRzIGFj dGl2ZSBzZWxlY3Rpb24uICBUaGUgb3RoZXIgYml0cworICogYXJlIEdVSS1nZW5lcmF0ZWQgY29u ZmlndXJhdGlvbi4KKyAqLworI2RlZmluZSBTSVQ5NTMxWF9QTExfUkVHX01JU0NJTk5FUgkJMHgx OAorI2RlZmluZSBTSVQ5NTMxWF9QTExfTUlTQ0lOTkVSX01BTl9JTl9TRUwJQklUKDUpCisKKy8q CisgKiBHUElPX0lOUFVUX0ZVTkNfQ1RSTDUuLjggKHBhZ2UgMCksIG9uZSBwZXIgUExMOiB0aGUg bWFudWFsIGlucHV0CisgKiBzZWxlY3QuICBXaXRoIGJpdCA0IHNldCB0aGUgaW5wdXQgaXMgdGhl IGxvdyBuaWJibGUgb2YgdGhpcyByZWdpc3RlciwKKyAqIG90aGVyd2lzZSBpdCBjb21lcyBmcm9t IHRoZSBpbnB1dC1zZWxlY3QgcGlucy4gIEJpdHMgNjo1IGFyZSB0aGUKKyAqIGFjdGl2ZS9zcGFy ZSBjaG9pY2Ugb2YgYW4gaW5kaXJlY3Qgc2VsZWN0aW9uIChiaXQgNiBlbmFibGVzIGJpdCA1LAor ICogd2hpY2ggcGlja3MgdGhlIGFjdGl2ZSBvciB0aGUgc3BhcmUgY2xvY2spIGFuZCBhcmUgbm90 IGRlY29kZWQgaGVyZS4KKyAqLworI2RlZmluZSBTSVQ5NTMxWF9SRUdfTUFOX0lOX1NFTChfcGxs KQlTSVQ5NTMxWF9SRUcoMHgwMCwgMHhFOCArIChfcGxsKSkKKyNkZWZpbmUgU0lUOTUzMVhfTUFO X0lOX1NFTF9GUk9NX1JFRwkJQklUKDQpCisjZGVmaW5lIFNJVDk1MzFYX01BTl9JTl9TRUxfTUFT SwkJR0VOTUFTSygzLCAwKQorCisvKgorICogUGVyLVBMTCBzdGF0dXMgcmVnaXN0ZXIuICBIT19W QUxJRCBzYXlzIHRoZSBob2xkb3ZlciB3aW5kb3cgaG9sZHMgYQorICogdmFsaWQgZnJlcXVlbmN5 IGVzdGltYXRlLCBpLmUuIGhvbGRvdmVyIG1lbW9yeSBoYXMgYmVlbiBhY3F1aXJlZDsgaXQgaXMK KyAqIG5vdCB0aGUgc2FtZSBhcyBIT19GUkVFWkUgKHBhZ2UgMCwgcmVnIDB4MEEpLCB3aGljaCBz YXlzIHRoZSBQTEwgaGFzCisgKiBhbHJlYWR5IHN3aXRjaGVkIG92ZXIgdG8gaG9sZG92ZXIuCisg Ki8KKyNkZWZpbmUgU0lUOTUzMVhfUExMX1JFR19TVEFUVVNfMQkJMHgwNgorI2RlZmluZSBTSVQ5 NTMxWF9QTExfU1RBVFVTXzFfSE9fVkFMSUQJQklUKDIpCisKKyNkZWZpbmUgU0lUOTUzMVhfQ0xL TU9OX1BfTk9USUZfMDEJCVNJVDk1MzFYX1JFRygweDA2LCAweDAzKQorI2RlZmluZSBTSVQ5NTMx WF9DTEtNT05fUF9OT1RJRl8yMwkJU0lUOTUzMVhfUkVHKDB4MDYsIDB4MDcpCisKKyNkZWZpbmUg U0lUOTUzMVhfQ0xLTU9OX05fTk9USUZfMDEJCVNJVDk1MzFYX1JFRygweDA2LCAweDkzKQorI2Rl ZmluZSBTSVQ5NTMxWF9DTEtNT05fTl9OT1RJRl8yMwkJU0lUOTUzMVhfUkVHKDB4MDYsIDB4OTcp CisKKy8qIFBlci1pbnB1dCBiaXQgb2Zmc2V0cyB3aXRoaW4gY2xvY2sgbW9uaXRvciBuaWJibGUg Ki8KKworLyoKKyAqIEVFUFJPTSBwcm9maWxlIGxvYWQsIHBhZ2UgMC4gIFRoZSBkZXZpY2UgY29t cGFyZXMgdGhlIENSQyBzdG9yZWQgaW4gdGhlCisgKiBFRVBST00gYWdhaW5zdCB0aGUgb25lIGl0 IGNvbXB1dGVzIGZyb20gd2hhdCBpdCByZWFkOyBhIG1pc21hdGNoIG1lYW5zCisgKiB0aGUgcHJv ZmlsZSBvbiB0aGUgcGFydCBpcyBub3QgdGhlIHByb2ZpbGUgdGhlIGJvYXJkIGV4cGVjdHMuCisg KiBOT1RJRllfNCBjb2xsZWN0cyB0aGUgcmVhZC1kb25lIGJpdCBhbmQgdGhlIGRlZmVjdCBiaXRz LCBhbGwgc3RpY2t5LCBzbworICogYSBoZWFsdGh5IGxvYWQgbGVhdmVzIGV4YWN0bHkgdGhlIHJl YWQtZG9uZSBiaXQgc2V0LgorICovCisvKiA0IGJ5dGVzIGVhY2gsIE1TQiBmaXJzdCAqLworI2Rl ZmluZSBTSVQ5NTMxWF9SRUdfUkVDX0NSQwkJU0lUOTUzMVhfUkVHKDB4MDAsIDB4OEEpCisjZGVm aW5lIFNJVDk1MzFYX1JFR19DQUxfQ1JDCQlTSVQ5NTMxWF9SRUcoMHgwMCwgMHg4RSkKKyNkZWZp bmUgU0lUOTUzMVhfUkVHX0VFUFJPTV9OT1RJRgkJU0lUOTUzMVhfUkVHKDB4MDAsIDB4OTcpCisj ZGVmaW5lIFNJVDk1MzFYX0VFUFJPTV9SRUFEX0RPTkUJCUJJVCgwKQorCisvKiBQcm9maWxlIGlk ZW50aWZpZXIgdGhlIGxvYWRlZCBjb25maWd1cmF0aW9uIGNhcnJpZXMsIHBhZ2UgMSwgMjQgYml0 cyAqLworLyogMyBieXRlcywgTFNCIGZpcnN0ICovCisjZGVmaW5lIFNJVDk1MzFYX1JFR19QUk9G SUxFX0lECQlTSVQ5NTMxWF9SRUcoMHgwMSwgMHg0NCkKKworLyogQ29uc2VjdXRpdmUgZmFpbGVk IElOVFJCIGFja25vd2xlZGdlbWVudHMgYmVmb3JlIHRoZSBsaW5lIGlzIGdpdmVuIHVwICovCisj ZGVmaW5lIFNJVDk1MzFYX0lSUV9BQ0tfVFJJRVMJCQk4CisKKy8qIC0tLS0gVmFyaWFudCBJRCB2 YWx1ZXMgKG9uZSBieXRlIGF0IFNJVDk1MzFYX1JFR19WQVJJQU5UX0lEKSAtLS0tICovCiAjZGVm aW5lIFNJVDk1MzFYX1ZBUklBTlRfSURfOTUzMTcJMHgxNwogI2RlZmluZSBTSVQ5NTMxWF9WQVJJ QU5UX0lEXzk1MzE2CTB4MzEKIAotLSAKMi4zOS4yIChBcHBsZSBHaXQtMTQzKQoK