Received: by 2002:ab2:3350:0:b0:1f4:6588:b3a7 with SMTP id o16csp668375lqe; Sat, 6 Apr 2024 20:17:38 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCV+/F8UQezjBkJqZzHlg1VJ7Fw9/NN2GvxJjHOo2v+obKka1zkeXcwUx7P49hIpMv6g1XDKuy8OtBa4QQ8hDfdDhWBBJzb1GpFDF5hhUQ== X-Google-Smtp-Source: AGHT+IGWX3dbgj7kDoSu19frapbOEvLWeBa7Al5S1ZhyM5d0hjGUSQzuaxDMDzWMXosCYUhZ2lHi X-Received: by 2002:a9d:6652:0:b0:6ea:1036:582 with SMTP id q18-20020a9d6652000000b006ea10360582mr1281683otm.25.1712459858479; Sat, 06 Apr 2024 20:17:38 -0700 (PDT) Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id r10-20020a0cf60a000000b006992f927fe0si5504211qvm.381.2024.04.06.20.17.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Apr 2024 20:17:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-134146-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=HkSDlv0V; arc=fail (signature failed); spf=pass (google.com: domain of linux-kernel+bounces-134146-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-134146-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 25D321C20AC9 for ; Sun, 7 Apr 2024 03:17:38 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0DDAD523D; Sun, 7 Apr 2024 03:17:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="HkSDlv0V" Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on2137.outbound.protection.outlook.com [40.107.13.137]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5A1F1876; Sun, 7 Apr 2024 03:17:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.13.137 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712459850; cv=fail; b=Nam7lPpDSSuM6r9SSIIFRu3P9Dl1iohTWKRDgmNFc2LBtPePxL/SS0prCXi5BW6Xafxbza8tvqlGMJXt1qGWEvKzZ3h95a5HjOCv/PZOfbe/RXqktqlDH1xVYmxl1y46N4qzaCOEGExBwVY8I2O+0N7J1OvJdD78hJ8Y2SzKan0= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712459850; c=relaxed/simple; bh=vHZ7iYTEz//z5tsPEg3c097YnGaWI6olHOdk0AT7phQ=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=dRozWj32I1K9/tRnVnG61gV3L1N9MQtNaYMRpwZhhWWWti/OOfU86slHlAYzhnnURHO+1FLbJNQGGdX7gkGgIJrQEx5olYVUk9BR23aORWMFQ08BaJAiz5jmUhlWVHztYTpT0lIOJWlXvzTxu090WE9kztUHwnNJ9CHctgvFaEs= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b=HkSDlv0V; arc=fail smtp.client-ip=40.107.13.137 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H9KTnvQgOA8BzG0frxm25AIvyO0sbG84eBZDeLNgFlsM9rob3LtkMqyGrq5IFQbodcCMT0r4l1KEfHw+GUpyYaJleItydO9JD0UGbuUe9qGOXCpVqrbYEJ8K0heVByz+Wu1/pIuZ2z1N9d4OTgd5ZeXBcvScbEpuphXPcDz/tFN2U+Q4oP7tEiXQ0ZlUAi4lPmIYmo1ln/VCijtx2gqOUTEycmD6uA8/I+B15gCx6Ia8IimRsc7vq/Dj8CzaGjF6TLQKKA12/fOk6q3rzKnn4wIhqRCrlEP/VoYNtWWp8lgBk0viLL7MLrCi9fM/k9Dpxmi3jyGw69eC+iRUOqx8Pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=vHZ7iYTEz//z5tsPEg3c097YnGaWI6olHOdk0AT7phQ=; b=O8Pq/Hu+KqC6tYRP5ecqvoq4Y4/6F9S3ctzlKcSFSNuQ5cdX5GyFm+CZT5iKJolzJBng3fjp2EwSzwch6EmOvUC/TWGHOn6hy5G43HAhnQd/C8a7+IRQFJzKTBGSphhlD9NjyGfa94k/y9KMAz78ouI8q8gFzQA6yjxFi0F1uSFZLOLXce1jdBUtcn4fHes3o49OlTC2qCD9dd0ILnLaCzeeW1kV4kZaJn0Ozt7HykgajOOF/JnkR3lUTHSMAHqPZrHWBlQ2PX0/evuDKk0uMTUiJzNCsCZ86BbkZTUKrrnKu+fv3hpwxu1nSCAZtUfQh/nWks4svSE8uupoILQHqw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vHZ7iYTEz//z5tsPEg3c097YnGaWI6olHOdk0AT7phQ=; b=HkSDlv0VinrWnaaBVtRZSyetFL42XWj73XhdeCzJwIFux7/8jcnTou3stVzvLTfCbbSie5mu35X37bIMz/1uu8L5jC7L05t2idp49AZ4YKJfzILBzDIn8EUGJ9K0Rs8PX1j6Nnfgw9W/ve7O+CP4U1sHg4FhWjvwz12jCLkCyHU= Received: from DU0PR04MB9417.eurprd04.prod.outlook.com (2603:10a6:10:358::11) by DB8PR04MB6875.eurprd04.prod.outlook.com (2603:10a6:10:11f::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.54; Sun, 7 Apr 2024 03:17:23 +0000 Received: from DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::d30b:44e7:e78e:662d]) by DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::d30b:44e7:e78e:662d%4]) with mapi id 15.20.7386.037; Sun, 7 Apr 2024 03:17:23 +0000 From: Peng Fan To: "Peng Fan (OSS)" , Sudeep Holla , Cristian Marussi , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Linus Walleij , Dan Carpenter CC: Andy Shevchenko , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-gpio@vger.kernel.org" , Oleksii Moisieiev Subject: RE: [PATCH v8 4/4] pinctrl: Implementation of the generic scmi-pinctrl driver Thread-Topic: [PATCH v8 4/4] pinctrl: Implementation of the generic scmi-pinctrl driver Thread-Index: AQHahvvRR3vNcBlC80iJ2c68Frcsr7FcJb7g Date: Sun, 7 Apr 2024 03:17:23 +0000 Message-ID: References: <20240405-pinctrl-scmi-v8-0-5fc8e33871bf@nxp.com> <20240405-pinctrl-scmi-v8-4-5fc8e33871bf@nxp.com> In-Reply-To: <20240405-pinctrl-scmi-v8-4-5fc8e33871bf@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DU0PR04MB9417:EE_|DB8PR04MB6875:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: EBpU+coJhQbXbu5jqHq7RgQjzrdaHAhD1uw4ug0r4zvbaJyewQqpCXxEWGpNXviSIFFSSBoLo2pWAqN2wnRVHNy5d3wnszDCEeoaQtOwYvbrPWJ9fMSTcpU57Z0rCSUf+6gpjC0L3mTvZIfpwVxYLBYu9OqsmW+o9GodXErg0GQ8uMD/YnCN+u7muqaSRmgz7LByi9bFXiOnmDefncALG0PfohFMuu9Wh/dd3wcgsQoCW9Nol1JnIa01qlY5tXCVqWU9y8Nxg/wWOy8lvoYVFL7pI/OeIHCLSxv2yAQWvbvI/4bdhfaipMyewlnfDswTzHCqzNoR/k+hdjjVlsA2FvxfEjvMnYFrXjngsjVMAp86kIo9GueEmh02kd6b0V/DCpuJr3xCyZnkJcwyh9mR4/Eu1yvYVR8rlh7RGhgUwt5lZsrQR9enrArKODOeWMl3UBD3yjcNGS/1QMV3I9D1LQ70YhwR9E33hpE2M6hHLSzsJzvGBqMS7iB8zO4nG7GEmLY3q1/z68tc60FYTgepLLtN8UiWA2Qs5kMQaxoccAnNs1pkHnJ/kKZmGhI7EOLTJ7kfjvh4qvdiAjGdg2/B2D0Ns2ABg8ccxDmGkgcc9yZ97b4gpl4mNmbQTj/3F60CPsB3JkZ5UQgYL+iPNm7ALlACetwiJDSJhSAYKxdwd1g= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU0PR04MB9417.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(376005)(7416005)(1800799015)(366007);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Q1g0RnhOU0dUV1NMY0FMUmFIaHM2MWl0MmVPSkhJR3ZxcDlIMTNmNDVHSitL?= =?utf-8?B?Z3dsYVhnK3ZUQ3VMV2RnN0NhOC82TFJLcEJpZ3J4TmZscG9YMVU4TTlGR0Fh?= =?utf-8?B?RHpXVmtCTW1yUnVVWFhiRXFaWHpZaHFNVVByMy9Jak9HNDdvV3F4clZjZVZq?= =?utf-8?B?enVENktrSlJxRGZqZkNIMkxoRXRaRVVndkxFMnJsSkkzQ2RyUjJoSTNJdE83?= =?utf-8?B?U05Zc2xvSXg3SktFUXFLMVJuNmZpWW5jOHNzRUVkemFnOHNUSGlnTnZ4ZzB2?= =?utf-8?B?cmNSVWFvaXdqZ01kZlJJbHJIRk1YTm96d0FmL05keGkvMGFxUXZxYmZRNG1L?= =?utf-8?B?R2g1RWswNTI4WkZsNStVWUgydmN5bFg0ZktKemVtT3NHL1dhalhUMWxkSEd5?= =?utf-8?B?Rmcwa0lOZGRhcDBwcGRhWlhiNEYzSGtteGhqTXA4bk1pWVZnNkJCb21IaGpF?= =?utf-8?B?NG53UWVYbWtUaWZGeFZITXQwRUNJa0JoRHEzRURlSlNQckU0Q2VyZWw1UWZp?= =?utf-8?B?YVhKdHdaSExZdU03elVkV1l5elBRekJWd085Z3BGS3JIK3h3RDBIdTJPZFVH?= =?utf-8?B?STRZMFdpTWhibHZWSnI3ZENGd3VWdFc1T29jOG9TVEVQQ1B0ZCs4dS8rendN?= =?utf-8?B?bDNZTjk0Vyt2ZC85TXR6bDZNaWw4akNoRkRqSGNna3p1QS9uKzBQaU1HZk9D?= =?utf-8?B?ME9kOTAxNzBpRXlMTGc2U1ltUitROUpGZGlFeS93cWxRZWNjS2F5UFJmQ1A1?= =?utf-8?B?aEFCSlNhQU92YWVadVNRb2VUckltYVdlVjVlR3hIVGZCd2c5SnFIMkdLNUNo?= =?utf-8?B?T0ZjMTg0NVVYeWIxWUE2a2p6Ti94YjhkSjIwZnRRdStTSDNYeXVQTzFPaE1r?= =?utf-8?B?eXBrRVpuRUtISTl1Q3NqMFVzVmUzeVUyb2pqL0pVNnBwWVF2Z1g3bndqZGJp?= =?utf-8?B?VTh2VjBPV2NJeTA2WFIyMlh2ME50VElieFR1eURhUmM2OExrNnE5WGlTaXZJ?= =?utf-8?B?clczeExNK09aRkdWYVZNcE12RUZDR2VUc3prUmRUaXZISjI2bTgzUEFJZDNu?= =?utf-8?B?ZEZGQ0dHK2NCaXdJbUdjQXgveXkwZVVOK0V0Q1RuM0NjOGdwR3BBSUhGeVFw?= =?utf-8?B?TXN6SmJzSVRJYnJLeWV4bXdHTmFyckhYUHgwelVvaDhwTys0TTFnM3hvM1Fp?= =?utf-8?B?Nmd4NStXOVJCRjU1RmZqbUZ6dGZiQ0MwbmR1M0ZYaVNkZEZTR3plY1VhUUYv?= =?utf-8?B?bVdvdkgySW0vdTQxWU9aZGhnNThqeElGbkFKSC9YR0NDL3duWUZJcFp5ZjVj?= =?utf-8?B?UENGbjNua3BodG5kVGJyMlRCWVZIOU1zSWoyZHN0QzVFekFBbW02c0pvS242?= =?utf-8?B?WWhManFSZ2xhYXhQWVZPT1VKV3RsQWIxLzl4R3ZDcnoxNVVxdGg4cHpDQXIw?= =?utf-8?B?TVhObTJOTTA2VjF4Qzd1aUdISktxN3VTSjBJdnl5MGZEVmJUQ2o1d2VrdzRV?= =?utf-8?B?REpZM3R5bDdvT2pQSlZBM2N4c090QXljWHhiNjRoa3ZHTFZraDhOVFczWHo4?= =?utf-8?B?TUVRaktMc2c4NGExM2U0dHdhc0RkbnFaY2VjYXhielNta2E3NjYzZjFzVlpL?= =?utf-8?B?dExZT0dJMFdkSlArNldFRHhVUk9GT2ZEdnRZamJUODhpaHdmNkFwSXVNZWdB?= =?utf-8?B?NWFzRndoZU4zT2NSblNUTVZNMjNMdmY3MktxYXVPSWNzTC9GTkkwTWgwNWhv?= =?utf-8?B?M0lxaVB2cmM0aGJldXVsdUVad00yMGN0S0tsbFFqWVl2VUNESXM4TUhOYUc1?= =?utf-8?B?OVg0QVp5cnIzS0ZIdXFTMkJyQWpEOXErVmVzYTUwV1dQek9JdEU0b0ZRby9q?= =?utf-8?B?VmdEZkxSSHFnQTJpeXBneGMycG1XaEhuT3BjQU8vaE9CbENBRldXQ1BIdzBv?= =?utf-8?B?UXpXNUlGb1NQdy9FNWhhWEFhSWFaL2FDWlFpeXREamNCa280L3J5TXFJMENB?= =?utf-8?B?bDN1U3NJZ3N1NzFnci9wOG05bDc2MnMyTEFhc1pIWGtBL3RQSjhjUXV2MkhZ?= =?utf-8?B?LzhrbUdRL1NvV1dVdHplOXZCZmJQRzFSNnVEbEI4Q284K1o0UU5BN0FiSG5I?= =?utf-8?Q?BR3g=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DU0PR04MB9417.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 861c2a29-4b4b-4276-c615-08dc56b13e77 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Apr 2024 03:17:23.6508 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: NQ46WLV80fo3e8pqArYL7crrBvpIsGGsytHpDf408S3itED+fZfpfKk1B3BXq0dmTGoLzmm4L+ctqI6r50zHjg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB6875 PiBTdWJqZWN0OiBbUEFUQ0ggdjggNC80XSBwaW5jdHJsOiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUg Z2VuZXJpYyBzY21pLXBpbmN0cmwNCj4gZHJpdmVyDQo+IA0KPiBGcm9tOiBQZW5nIEZhbiA8cGVu Zy5mYW5AbnhwLmNvbT4NCj4gDQo+IHNjbWktcGluY3RybCBkcml2ZXIgaW1wbGVtZW50cyBwaW5j dHJsIGRyaXZlciBpbnRlcmZhY2UgYW5kIHVzaW5nIFNDTUkNCj4gcHJvdG9jb2wgdG8gcmVkaXJl Y3QgbWVzc2FnZXMgZnJvbSBwaW5jdHJsIHN1YnN5c3RlbSBTREsgdG8gU0NNSSBwbGF0Zm9ybQ0K PiBmaXJtd2FyZSwgd2hpY2ggZG9lcyB0aGUgY2hhbmdlcyBpbiBIVy4NCg0KQ29uc2lkZXJpbmcg cGluY3RybCBleHBlY3RzIEVOT1RTVVBQLCBzbyBJIHdvdWxkIGFkZCB0aGlzIGluIHY5Lg0KDQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtc2NtaS5jIGIvZHJpdmVycy9waW5j dHJsL3BpbmN0cmwtc2NtaS5jDQppbmRleCAwZjU1ZjAwMGE2NzkuLmFjY2ViZTNmMDcwNiAxMDA2 NDQNCi0tLSBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXNjbWkuYw0KKysrIGIvZHJpdmVycy9w aW5jdHJsL3BpbmN0cmwtc2NtaS5jDQpAQCAtMjk2LDggKzI5NiwxMiBAQCBzdGF0aWMgaW50IHBp bmN0cmxfc2NtaV9waW5jb25mX2dldChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsDQogDQog ICAgICAgIHJldCA9IHBpbmN0cmxfb3BzLT5zZXR0aW5nc19nZXRfb25lKHBteC0+cGgsIHBpbiwg UElOX1RZUEUsIHR5cGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZjb25maWdfdmFsdWUpOw0KLSAgICAgICBpZiAocmV0KQ0KKyAgICAgICBpZiAocmV0KSB7 DQorICAgICAgICAgICAgICAgLyogQ29udmVydCBTQ01JIGVycm9yIGNvZGUgdG8gUElOQ1RSTCBl eHBlY3RlZCBlcnJvciBjb2RlICovDQorICAgICAgICAgICAgICAgaWYgKHJldCA9PSAtRU9QTk9U U1VQUCkNCisgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FTk9UU1VQUDsNCiAgICAgICAg ICAgICAgICByZXR1cm4gcmV0Ow0KKyAgICAgICB9DQogDQogICAgICAgICpjb25maWcgPSBwaW5j b25mX3RvX2NvbmZpZ19wYWNrZWQoY29uZmlnX3R5cGUsIGNvbmZpZ192YWx1ZSk7DQogDQpAQCAt NDQ1LDggKzQ0OSwxMiBAQCBzdGF0aWMgaW50IHBpbmN0cmxfc2NtaV9waW5jb25mX2dyb3VwX2dl dChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsDQogDQogICAgICAgIHJldCA9IHBpbmN0cmxf b3BzLT5zZXR0aW5nc19nZXRfb25lKHBteC0+cGgsIGdyb3VwLCBHUk9VUF9UWVBFLCB0eXBlLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uZmlnX3ZhbHVl KTsNCi0gICAgICAgaWYgKHJldCkNCisgICAgICAgaWYgKHJldCkgew0KKyAgICAgICAgICAgICAg IC8qIENvbnZlcnQgU0NNSSBlcnJvciBjb2RlIHRvIFBJTkNUUkwgZXhwZWN0ZWQgZXJyb3IgY29k ZSAqLw0KKyAgICAgICAgICAgICAgIGlmIChyZXQgPT0gLUVPUE5PVFNVUFApDQorICAgICAgICAg ICAgICAgICAgICAgICByZXQgPSAtRU5PVFNVUFA7DQogICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsNCisgICAgICAgfQ0KIA0KICAgICAgICAqY29uZmlnID0gcGluY29uZl90b19jb25maWdfcGFj a2VkKGNvbmZpZ190eXBlLCBjb25maWdfdmFsdWUpOw0KDQpJIHdpbGwgY29sbGVjdCBtb3JlIGNv bW1lbnRzIGJlZm9yZSBwb3N0IHY5LiBKdXN0IHBvc3Qgb3V0IHVwcGVyIGRpZmYNCnRvIHNlZSBh bnkgZGlzYWdyZWVtZW50cy4NCg0KVGhhbmtzLA0KUGVuZy4NCj4gDQo+IENvLWRldmVsb3BlZC1i eTogT2xla3NpaSBNb2lzaWVpZXYgPG9sZWtzaWlfbW9pc2llaWV2QGVwYW0uY29tPg0KPiBTaWdu ZWQtb2ZmLWJ5OiBPbGVrc2lpIE1vaXNpZWlldiA8b2xla3NpaV9tb2lzaWVpZXZAZXBhbS5jb20+ DQo+IFNpZ25lZC1vZmYtYnk6IFBlbmcgRmFuIDxwZW5nLmZhbkBueHAuY29tPg0KPiAtLS0NCj4g IE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICB8ICAgMSArDQo+ICBkcml2ZXJzL3BpbmN0 cmwvS2NvbmZpZyAgICAgICAgfCAgMTEgKw0KPiAgZHJpdmVycy9waW5jdHJsL01ha2VmaWxlICAg ICAgIHwgICAxICsNCj4gIGRyaXZlcnMvcGluY3RybC9waW5jdHJsLXNjbWkuYyB8IDU2NA0KPiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgNCBmaWxlcyBjaGFu Z2VkLCA1NzcgaW5zZXJ0aW9ucygrKQ0KPiANCj4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIv TUFJTlRBSU5FUlMNCj4gaW5kZXggNGI1MTFhNTUxMDFjLi5kODI3MGFjNjY1MWEgMTAwNjQ0DQo+ IC0tLSBhL01BSU5UQUlORVJTDQo+ICsrKyBiL01BSU5UQUlORVJTDQo+IEBAIC0yMTQ1Nyw2ICsy MTQ1Nyw3IEBAIEY6CWRyaXZlcnMvY3B1ZnJlcS9zY1ttcF1pLWNwdWZyZXEuYw0KPiAgRjoJZHJp dmVycy9maXJtd2FyZS9hcm1fc2NtaS8NCj4gIEY6CWRyaXZlcnMvZmlybXdhcmUvYXJtX3NjcGku Yw0KPiAgRjoJZHJpdmVycy9od21vbi9zY21pLWh3bW9uLmMNCj4gK0Y6CWRyaXZlcnMvcGluY3Ry bC9waW5jdHJsLXNjbWkuYw0KPiAgRjoJZHJpdmVycy9wbWRvbWFpbi9hcm0vDQo+ICBGOglkcml2 ZXJzL3Bvd2VyY2FwL2FybV9zY21pX3Bvd2VyY2FwLmMNCj4gIEY6CWRyaXZlcnMvcmVndWxhdG9y L3NjbWktcmVndWxhdG9yLmMNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9LY29uZmln IGIvZHJpdmVycy9waW5jdHJsL0tjb25maWcgaW5kZXgNCj4gZDQ1NjU3YWE5ODZhLi40ZTZmNjVj ZjBlNzYgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvcGluY3RybC9LY29uZmlnDQo+ICsrKyBiL2Ry aXZlcnMvcGluY3RybC9LY29uZmlnDQo+IEBAIC00NTAsNiArNDUwLDE3IEBAIGNvbmZpZyBQSU5D VFJMX1JPQ0tDSElQDQo+ICAJaGVscA0KPiAgICAgICAgICAgIFRoaXMgc3VwcG9ydCBwaW5jdHJs IGFuZCBHUElPIGRyaXZlciBmb3IgUm9ja2NoaXAgU29Dcy4NCj4gDQo+ICtjb25maWcgUElOQ1RS TF9TQ01JDQo+ICsJdHJpc3RhdGUgIlBpbmN0cmwgZHJpdmVyIHVzaW5nIFNDTUkgcHJvdG9jb2wg aW50ZXJmYWNlIg0KPiArCWRlcGVuZHMgb24gQVJNX1NDTUlfUFJPVE9DT0wgfHwgQ09NUElMRV9U RVNUDQo+ICsJc2VsZWN0IFBJTk1VWA0KPiArCXNlbGVjdCBHRU5FUklDX1BJTkNPTkYNCj4gKwlo ZWxwDQo+ICsJICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciBwaW5jdHJsIHdoaWNo IGlzIGNvbnRyb2xsZWQNCj4gKwkgIGJ5IGZpcm13YXJlIHRoYXQgaW1wbGVtZW50cyB0aGUgU0NN SSBpbnRlcmZhY2UuDQo+ICsJICBJdCB1c2VzIFNDTUkgTWVzc2FnZSBQcm90b2NvbCB0byBpbnRl cmFjdCB3aXRoIHRoZQ0KPiArCSAgZmlybXdhcmUgcHJvdmlkaW5nIGFsbCB0aGUgcGluY3RybCBj b250cm9scy4NCj4gKw0KPiAgY29uZmlnIFBJTkNUUkxfU0lOR0xFDQo+ICAJdHJpc3RhdGUgIk9u ZS1yZWdpc3Rlci1wZXItcGluIHR5cGUgZGV2aWNlIHRyZWUgYmFzZWQgcGluY3RybCBkcml2ZXIi DQo+ICAJZGVwZW5kcyBvbiBPRg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL01ha2Vm aWxlIGIvZHJpdmVycy9waW5jdHJsL01ha2VmaWxlIGluZGV4DQo+IDIxNTI1MzliNTNkNS4uY2M4 MDk2Njk0MDVhIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL3BpbmN0cmwvTWFrZWZpbGUNCj4gKysr IGIvZHJpdmVycy9waW5jdHJsL01ha2VmaWxlDQo+IEBAIC00NSw2ICs0NSw3IEBAIG9iai0kKENP TkZJR19QSU5DVFJMX1BJQzMyKQkrPSBwaW5jdHJsLXBpYzMyLm8NCj4gIG9iai0kKENPTkZJR19Q SU5DVFJMX1BJU1RBQ0hJTykJKz0gcGluY3RybC1waXN0YWNoaW8ubw0KPiAgb2JqLSQoQ09ORklH X1BJTkNUUkxfUks4MDUpCSs9IHBpbmN0cmwtcms4MDUubw0KPiAgb2JqLSQoQ09ORklHX1BJTkNU UkxfUk9DS0NISVApCSs9IHBpbmN0cmwtcm9ja2NoaXAubw0KPiArb2JqLSQoQ09ORklHX1BJTkNU UkxfU0NNSSkJKz0gcGluY3RybC1zY21pLm8NCj4gIG9iai0kKENPTkZJR19QSU5DVFJMX1NJTkdM RSkJKz0gcGluY3RybC1zaW5nbGUubw0KPiAgb2JqLSQoQ09ORklHX1BJTkNUUkxfU1QpIAkrPSBw aW5jdHJsLXN0Lm8NCj4gIG9iai0kKENPTkZJR19QSU5DVFJMX1NUTUZYKSAJKz0gcGluY3RybC1z dG1meC5vDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1zY21pLmMgYi9k cml2ZXJzL3BpbmN0cmwvcGluY3RybC1zY21pLmMgbmV3DQo+IGZpbGUgbW9kZSAxMDA2NDQgaW5k ZXggMDAwMDAwMDAwMDAwLi4wZjU1ZjAwMGE2NzkNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9k cml2ZXJzL3BpbmN0cmwvcGluY3RybC1zY21pLmMNCj4gQEAgLTAsMCArMSw1NjQgQEANCj4gKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ICsvKg0KPiArICogU3lzdGVtIENv bnRyb2wgYW5kIFBvd2VyIEludGVyZmFjZSAoU0NNSSkgUHJvdG9jb2wgYmFzZWQgcGluY3RybA0K PiArZHJpdmVyDQo+ICsgKg0KPiArICogQ29weXJpZ2h0IChDKSAyMDI0IEVQQU0NCj4gKyAqIENv cHlyaWdodCAyMDI0IE5YUA0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2Uu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kZXZfcHJpbnRrLmg+DQo+ICsjaW5jbHVkZSA8bGludXgv ZXJyLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgv c2NtaV9wcm90b2NvbC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPg0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvcGluY3RybC9tYWNoaW5l Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jb25mLmg+DQo+ICsjaW5jbHVkZSA8 bGludXgvcGluY3RybC9waW5jb25mLWdlbmVyaWMuaD4gI2luY2x1ZGUNCj4gKzxsaW51eC9waW5j dHJsL3BpbmN0cmwuaD4gI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvcGlubXV4Lmg+DQo+ICsNCj4g KyNpbmNsdWRlICJwaW5jdHJsLXV0aWxzLmgiDQo+ICsjaW5jbHVkZSAiY29yZS5oIg0KPiArI2lu Y2x1ZGUgInBpbmNvbmYuaCINCj4gKw0KPiArI2RlZmluZSBEUlZfTkFNRSAic2NtaS1waW5jdHJs Ig0KPiArDQo+ICsvKiBEZWZpbmUgbnVtIGNvbmZpZ3MsIGlmIG5vdCBsYXJnZSB0aGFuIDQgdXNl IHN0YWNrLCBlbHNlIHVzZSBrY2FsbG9jICovDQo+ICsjZGVmaW5lIFNDTUlfTlVNX0NPTkZJR1MJ NA0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHNjbWlfcGluY3RybF9wcm90b19vcHMgKnBp bmN0cmxfb3BzOw0KPiArDQo+ICtzdHJ1Y3Qgc2NtaV9waW5jdHJsIHsNCj4gKwlzdHJ1Y3QgZGV2 aWNlICpkZXY7DQo+ICsJc3RydWN0IHNjbWlfcHJvdG9jb2xfaGFuZGxlICpwaDsNCj4gKwlzdHJ1 Y3QgcGluY3RybF9kZXYgKnBjdGxkZXY7DQo+ICsJc3RydWN0IHBpbmN0cmxfZGVzYyBwY3RsX2Rl c2M7DQo+ICsJc3RydWN0IHBpbmZ1bmN0aW9uICpmdW5jdGlvbnM7DQo+ICsJdW5zaWduZWQgaW50 IG5yX2Z1bmN0aW9uczsNCj4gKwlzdHJ1Y3QgcGluY3RybF9waW5fZGVzYyAqcGluczsNCj4gKwl1 bnNpZ25lZCBpbnQgbnJfcGluczsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgcGluY3RybF9z Y21pX2dldF9ncm91cHNfY291bnQoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2KSB7DQo+ICsJ c3RydWN0IHNjbWlfcGluY3RybCAqcG14ID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRl dik7DQo+ICsNCj4gKwlyZXR1cm4gcGluY3RybF9vcHMtPmNvdW50X2dldChwbXgtPnBoLCBHUk9V UF9UWVBFKTsgfQ0KPiArDQo+ICtzdGF0aWMgY29uc3QgY2hhciAqcGluY3RybF9zY21pX2dldF9n cm91cF9uYW1lKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwNCj4gKwkJCQkJICAgICAgIHVu c2lnbmVkIGludCBzZWxlY3RvcikNCj4gK3sNCj4gKwlpbnQgcmV0Ow0KPiArCWNvbnN0IGNoYXIg Km5hbWU7DQo+ICsJc3RydWN0IHNjbWlfcGluY3RybCAqcG14ID0gcGluY3RybF9kZXZfZ2V0X2Ry dmRhdGEocGN0bGRldik7DQo+ICsNCj4gKwlyZXQgPSBwaW5jdHJsX29wcy0+bmFtZV9nZXQocG14 LT5waCwgc2VsZWN0b3IsIEdST1VQX1RZUEUsDQo+ICZuYW1lKTsNCj4gKwlpZiAocmV0KSB7DQo+ ICsJCWRldl9lcnIocG14LT5kZXYsICJnZXQgbmFtZSBmYWlsZWQgd2l0aCBlcnIgJWQiLCByZXQp Ow0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gbmFtZTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGludCBwaW5jdHJsX3NjbWlfZ2V0X2dyb3VwX3BpbnMoc3RydWN0IHBp bmN0cmxfZGV2ICpwY3RsZGV2LA0KPiArCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2VsZWN0b3Is DQo+ICsJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqKnBpbnMsDQo+ICsJCQkJICAgICAg IHVuc2lnbmVkIGludCAqbnVtX3BpbnMpDQo+ICt7DQo+ICsJc3RydWN0IHNjbWlfcGluY3RybCAq cG14ID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7DQo+ICsNCj4gKwlyZXR1cm4g cGluY3RybF9vcHMtPmdyb3VwX3BpbnNfZ2V0KHBteC0+cGgsIHNlbGVjdG9yLCBwaW5zLA0KPiBu dW1fcGlucyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGluY3RybF9vcHMg cGluY3RybF9zY21pX3BpbmN0cmxfb3BzID0gew0KPiArCS5nZXRfZ3JvdXBzX2NvdW50ID0gcGlu Y3RybF9zY21pX2dldF9ncm91cHNfY291bnQsDQo+ICsJLmdldF9ncm91cF9uYW1lID0gcGluY3Ry bF9zY21pX2dldF9ncm91cF9uYW1lLA0KPiArCS5nZXRfZ3JvdXBfcGlucyA9IHBpbmN0cmxfc2Nt aV9nZXRfZ3JvdXBfcGlucywgI2lmZGVmIENPTkZJR19PRg0KPiArCS5kdF9ub2RlX3RvX21hcCA9 IHBpbmNvbmZfZ2VuZXJpY19kdF9ub2RlX3RvX21hcF9hbGwsDQo+ICsJLmR0X2ZyZWVfbWFwID0g cGluY29uZl9nZW5lcmljX2R0X2ZyZWVfbWFwLCAjZW5kaWYgfTsNCj4gKw0KPiArc3RhdGljIGlu dCBwaW5jdHJsX3NjbWlfZ2V0X2Z1bmN0aW9uc19jb3VudChzdHJ1Y3QgcGluY3RybF9kZXYNCj4g KypwY3RsZGV2KSB7DQo+ICsJc3RydWN0IHNjbWlfcGluY3RybCAqcG14ID0gcGluY3RybF9kZXZf Z2V0X2RydmRhdGEocGN0bGRldik7DQo+ICsNCj4gKwlyZXR1cm4gcGluY3RybF9vcHMtPmNvdW50 X2dldChwbXgtPnBoLCBGVU5DVElPTl9UWVBFKTsgfQ0KPiArDQo+ICtzdGF0aWMgY29uc3QgY2hh ciAqcGluY3RybF9zY21pX2dldF9mdW5jdGlvbl9uYW1lKHN0cnVjdCBwaW5jdHJsX2Rldg0KPiAq cGN0bGRldiwNCj4gKwkJCQkJCSAgdW5zaWduZWQgaW50IHNlbGVjdG9yKQ0KPiArew0KPiArCWlu dCByZXQ7DQo+ICsJY29uc3QgY2hhciAqbmFtZTsNCj4gKwlzdHJ1Y3Qgc2NtaV9waW5jdHJsICpw bXggPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3RsZGV2KTsNCj4gKw0KPiArCXJldCA9IHBp bmN0cmxfb3BzLT5uYW1lX2dldChwbXgtPnBoLCBzZWxlY3RvciwgRlVOQ1RJT05fVFlQRSwNCj4g Jm5hbWUpOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X2VycihwbXgtPmRldiwgImdldCBuYW1l IGZhaWxlZCB3aXRoIGVyciAlZCIsIHJldCk7DQo+ICsJCXJldHVybiBOVUxMOw0KPiArCX0NCj4g Kw0KPiArCXJldHVybiBuYW1lOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHBpbmN0cmxfc2Nt aV9nZXRfZnVuY3Rpb25fZ3JvdXBzKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwNCj4gKwkJ CQkJICAgIHVuc2lnbmVkIGludCBzZWxlY3RvciwNCj4gKwkJCQkJICAgIGNvbnN0IGNoYXIgKiBj b25zdCAqKnBfZ3JvdXBzLA0KPiArCQkJCQkgICAgdW5zaWduZWQgaW50ICogY29uc3QNCj4gcF9u dW1fZ3JvdXBzKSB7DQo+ICsJc3RydWN0IHBpbmZ1bmN0aW9uICpmdW5jOw0KPiArCWNvbnN0IHVu c2lnbmVkIGludCAqZ3JvdXBfaWRzOw0KPiArCXVuc2lnbmVkIGludCBudW1fZ3JvdXBzOw0KPiAr CWNvbnN0IGNoYXIgKipncm91cHM7DQo+ICsJaW50IHJldCwgaTsNCj4gKwlzdHJ1Y3Qgc2NtaV9w aW5jdHJsICpwbXggPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3RsZGV2KTsNCj4gKw0KPiAr CWlmICghcF9ncm91cHMgfHwgIXBfbnVtX2dyb3VwcykNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ ICsNCj4gKwlpZiAoc2VsZWN0b3IgPj0gcG14LT5ucl9mdW5jdGlvbnMpDQo+ICsJCXJldHVybiAt RUlOVkFMOw0KPiArDQo+ICsJZnVuYyA9ICZwbXgtPmZ1bmN0aW9uc1tzZWxlY3Rvcl07DQo+ICsJ aWYgKGZ1bmMtPm5ncm91cHMpDQo+ICsJCWdvdG8gZG9uZTsNCj4gKw0KPiArCXJldCA9IHBpbmN0 cmxfb3BzLT5mdW5jdGlvbl9ncm91cHNfZ2V0KHBteC0+cGgsIHNlbGVjdG9yLA0KPiAmbnVtX2dy b3VwcywNCj4gKwkJCQkJICAgICAgICZncm91cF9pZHMpOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJ ZGV2X2VycihwbXgtPmRldiwgIlVuYWJsZSB0byBnZXQgZnVuY3Rpb24gZ3JvdXBzLCBlcnIgJWQi LA0KPiByZXQpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKwlpZiAoIW51bV9ncm91cHMp DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsJZ3JvdXBzID0ga2NhbGxvYyhudW1fZ3Jv dXBzLCBzaXplb2YoKmdyb3VwcyksIEdGUF9LRVJORUwpOw0KPiArCWlmICghZ3JvdXBzKQ0KPiAr CQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBudW1fZ3JvdXBzOyBp KyspIHsNCj4gKwkJZ3JvdXBzW2ldID0gcGluY3RybF9zY21pX2dldF9ncm91cF9uYW1lKHBjdGxk ZXYsDQo+IGdyb3VwX2lkc1tpXSk7DQo+ICsJCWlmICghZ3JvdXBzW2ldKSB7DQo+ICsJCQlyZXQg PSAtRUlOVkFMOw0KPiArCQkJZ290byBlcnJfZnJlZTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiAr CWZ1bmMtPm5ncm91cHMgPSBudW1fZ3JvdXBzOw0KPiArCWZ1bmMtPmdyb3VwcyA9IGdyb3VwczsN Cj4gK2RvbmU6DQo+ICsJKnBfZ3JvdXBzID0gZnVuYy0+Z3JvdXBzOw0KPiArCSpwX251bV9ncm91 cHMgPSBmdW5jLT5uZ3JvdXBzOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICsNCj4gK2Vycl9mcmVl Og0KPiArCWtmcmVlKGdyb3Vwcyk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IHBpbmN0cmxfc2NtaV9mdW5jX3NldF9tdXgoc3RydWN0IHBpbmN0cmxfZGV2 ICpwY3RsZGV2LA0KPiArCQkJCSAgICAgdW5zaWduZWQgaW50IHNlbGVjdG9yLCB1bnNpZ25lZCBp bnQgZ3JvdXApDQo+IHsNCj4gKwlzdHJ1Y3Qgc2NtaV9waW5jdHJsICpwbXggPSBwaW5jdHJsX2Rl dl9nZXRfZHJ2ZGF0YShwY3RsZGV2KTsNCj4gKw0KPiArCXJldHVybiBwaW5jdHJsX29wcy0+bXV4 X3NldChwbXgtPnBoLCBzZWxlY3RvciwgZ3JvdXApOyB9DQo+ICsNCj4gK3N0YXRpYyBpbnQgcGlu Y3RybF9zY21pX3JlcXVlc3Qoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LA0KPiArCQkJCXVu c2lnbmVkIGludCBvZmZzZXQpDQo+ICt7DQo+ICsJc3RydWN0IHNjbWlfcGluY3RybCAqcG14ID0g cGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7DQo+ICsNCj4gKwlyZXR1cm4gcGluY3Ry bF9vcHMtPnBpbl9yZXF1ZXN0KHBteC0+cGgsIG9mZnNldCk7IH0NCj4gKw0KPiArc3RhdGljIGlu dCBwaW5jdHJsX3NjbWlfZnJlZShzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsIHVuc2lnbmVk IGludA0KPiArb2Zmc2V0KSB7DQo+ICsJc3RydWN0IHNjbWlfcGluY3RybCAqcG14ID0gcGluY3Ry bF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7DQo+ICsNCj4gKwlyZXR1cm4gcGluY3RybF9vcHMt PnBpbl9mcmVlKHBteC0+cGgsIG9mZnNldCk7IH0NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVj dCBwaW5tdXhfb3BzIHBpbmN0cmxfc2NtaV9waW5tdXhfb3BzID0gew0KPiArCS5yZXF1ZXN0ID0g cGluY3RybF9zY21pX3JlcXVlc3QsDQo+ICsJLmZyZWUgPSBwaW5jdHJsX3NjbWlfZnJlZSwNCj4g KwkuZ2V0X2Z1bmN0aW9uc19jb3VudCA9IHBpbmN0cmxfc2NtaV9nZXRfZnVuY3Rpb25zX2NvdW50 LA0KPiArCS5nZXRfZnVuY3Rpb25fbmFtZSA9IHBpbmN0cmxfc2NtaV9nZXRfZnVuY3Rpb25fbmFt ZSwNCj4gKwkuZ2V0X2Z1bmN0aW9uX2dyb3VwcyA9IHBpbmN0cmxfc2NtaV9nZXRfZnVuY3Rpb25f Z3JvdXBzLA0KPiArCS5zZXRfbXV4ID0gcGluY3RybF9zY21pX2Z1bmNfc2V0X211eCwNCj4gK307 DQo+ICsNCj4gK3N0YXRpYyBpbnQgcGluY3RybF9zY21pX21hcF9waW5jb25mX3R5cGUoZW51bSBw aW5fY29uZmlnX3BhcmFtIHBhcmFtLA0KPiArCQkJCQkgZW51bSBzY21pX3BpbmN0cmxfY29uZl90 eXBlDQo+ICp0eXBlKSB7DQo+ICsJdTMyIGFyZyA9IHBhcmFtOw0KPiArDQo+ICsJc3dpdGNoIChh cmcpIHsNCj4gKwljYXNlIFBJTl9DT05GSUdfQklBU19CVVNfSE9MRDoNCj4gKwkJKnR5cGUgPSBT Q01JX1BJTl9CSUFTX0JVU19IT0xEOw0KPiArCQlicmVhazsNCj4gKwljYXNlIFBJTl9DT05GSUdf QklBU19ESVNBQkxFOg0KPiArCQkqdHlwZSA9IFNDTUlfUElOX0JJQVNfRElTQUJMRTsNCj4gKwkJ YnJlYWs7DQo+ICsJY2FzZSBQSU5fQ09ORklHX0JJQVNfSElHSF9JTVBFREFOQ0U6DQo+ICsJCSp0 eXBlID0gU0NNSV9QSU5fQklBU19ISUdIX0lNUEVEQU5DRTsNCj4gKwkJYnJlYWs7DQo+ICsJY2Fz ZSBQSU5fQ09ORklHX0JJQVNfUFVMTF9ET1dOOg0KPiArCQkqdHlwZSA9IFNDTUlfUElOX0JJQVNf UFVMTF9ET1dOOw0KPiArCQlicmVhazsNCj4gKwljYXNlIFBJTl9DT05GSUdfQklBU19QVUxMX1BJ Tl9ERUZBVUxUOg0KPiArCQkqdHlwZSA9IFNDTUlfUElOX0JJQVNfUFVMTF9ERUZBVUxUOw0KPiAr CQlicmVhazsNCj4gKwljYXNlIFBJTl9DT05GSUdfQklBU19QVUxMX1VQOg0KPiArCQkqdHlwZSA9 IFNDTUlfUElOX0JJQVNfUFVMTF9VUDsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBQSU5fQ09ORklH X0RSSVZFX09QRU5fRFJBSU46DQo+ICsJCSp0eXBlID0gU0NNSV9QSU5fRFJJVkVfT1BFTl9EUkFJ TjsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBQSU5fQ09ORklHX0RSSVZFX09QRU5fU09VUkNFOg0K PiArCQkqdHlwZSA9IFNDTUlfUElOX0RSSVZFX09QRU5fU09VUkNFOw0KPiArCQlicmVhazsNCj4g KwljYXNlIFBJTl9DT05GSUdfRFJJVkVfUFVTSF9QVUxMOg0KPiArCQkqdHlwZSA9IFNDTUlfUElO X0RSSVZFX1BVU0hfUFVMTDsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBQSU5fQ09ORklHX0RSSVZF X1NUUkVOR1RIOg0KPiArCQkqdHlwZSA9IFNDTUlfUElOX0RSSVZFX1NUUkVOR1RIOw0KPiArCQli cmVhazsNCj4gKwljYXNlIFBJTl9DT05GSUdfRFJJVkVfU1RSRU5HVEhfVUE6DQo+ICsJCSp0eXBl ID0gU0NNSV9QSU5fRFJJVkVfU1RSRU5HVEg7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgUElOX0NP TkZJR19JTlBVVF9ERUJPVU5DRToNCj4gKwkJKnR5cGUgPSBTQ01JX1BJTl9JTlBVVF9ERUJPVU5D RTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBQSU5fQ09ORklHX0lOUFVUX0VOQUJMRToNCj4gKwkJ KnR5cGUgPSBTQ01JX1BJTl9JTlBVVF9NT0RFOw0KPiArCQlicmVhazsNCj4gKwljYXNlIFBJTl9D T05GSUdfSU5QVVRfU0NITUlUVDoNCj4gKwkJKnR5cGUgPSBTQ01JX1BJTl9JTlBVVF9TQ0hNSVRU Ow0KPiArCQlicmVhazsNCj4gKwljYXNlIFBJTl9DT05GSUdfSU5QVVRfU0NITUlUVF9FTkFCTEU6 DQo+ICsJCSp0eXBlID0gU0NNSV9QSU5fSU5QVVRfTU9ERTsNCj4gKwkJYnJlYWs7DQo+ICsJY2Fz ZSBQSU5fQ09ORklHX01PREVfTE9XX1BPV0VSOg0KPiArCQkqdHlwZSA9IFNDTUlfUElOX0xPV19Q T1dFUl9NT0RFOw0KPiArCQlicmVhazsNCj4gKwljYXNlIFBJTl9DT05GSUdfT1VUUFVUOg0KPiAr CQkqdHlwZSA9IFNDTUlfUElOX09VVFBVVF9WQUxVRTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBQ SU5fQ09ORklHX09VVFBVVF9FTkFCTEU6DQo+ICsJCSp0eXBlID0gU0NNSV9QSU5fT1VUUFVUX01P REU7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgUElOX0NPTkZJR19PVVRQVVRfSU1QRURBTkNFX09I TVM6DQo+ICsJCSp0eXBlID0gU0NNSV9QSU5fT1VUUFVUX1ZBTFVFOw0KPiArCQlicmVhazsNCj4g KwljYXNlIFBJTl9DT05GSUdfUE9XRVJfU09VUkNFOg0KPiArCQkqdHlwZSA9IFNDTUlfUElOX1BP V0VSX1NPVVJDRTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBQSU5fQ09ORklHX1NMRVdfUkFURToN Cj4gKwkJKnR5cGUgPSBTQ01JX1BJTl9TTEVXX1JBVEU7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2Ug U0NNSV9QSU5fT0VNX1NUQVJUIC4uLiBTQ01JX1BJTl9PRU1fRU5EOg0KPiArCQkqdHlwZSA9IGFy ZzsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJ fQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgcGluY3RybF9z Y21pX3BpbmNvbmZfZ2V0KHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwNCj4gKwkJCQkgICAg dW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgbG9uZyAqY29uZmlnKSB7DQo+ICsJaW50IHJldDsN Cj4gKwlzdHJ1Y3Qgc2NtaV9waW5jdHJsICpwbXggPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShw Y3RsZGV2KTsNCj4gKwllbnVtIHBpbl9jb25maWdfcGFyYW0gY29uZmlnX3R5cGU7DQo+ICsJZW51 bSBzY21pX3BpbmN0cmxfY29uZl90eXBlIHR5cGU7DQo+ICsJdTMyIGNvbmZpZ192YWx1ZTsNCj4g Kw0KPiArCWlmICghY29uZmlnKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWNvbmZp Z190eXBlID0gcGluY29uZl90b19jb25maWdfcGFyYW0oKmNvbmZpZyk7DQo+ICsNCj4gKwlyZXQg PSBwaW5jdHJsX3NjbWlfbWFwX3BpbmNvbmZfdHlwZShjb25maWdfdHlwZSwgJnR5cGUpOw0KPiAr CWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlyZXQgPSBwaW5jdHJsX29wcy0+ c2V0dGluZ3NfZ2V0X29uZShwbXgtPnBoLCBwaW4sIFBJTl9UWVBFLCB0eXBlLA0KPiArCQkJCQkg ICAgJmNvbmZpZ192YWx1ZSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0K PiArCSpjb25maWcgPSBwaW5jb25mX3RvX2NvbmZpZ19wYWNrZWQoY29uZmlnX3R5cGUsIGNvbmZp Z192YWx1ZSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0K PiArcGluY3RybF9zY21pX2FsbG9jX2NvbmZpZ3Moc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2 LCB1MzIgbnVtX2NvbmZpZ3MsDQo+ICsJCQkgICB1MzIgKipwX2NvbmZpZ192YWx1ZSwNCj4gKwkJ CSAgIGVudW0gc2NtaV9waW5jdHJsX2NvbmZfdHlwZSAqKnBfY29uZmlnX3R5cGUpIHsNCj4gKwlp ZiAobnVtX2NvbmZpZ3MgPD0gU0NNSV9OVU1fQ09ORklHUykNCj4gKwkJcmV0dXJuIDA7DQo+ICsN Cj4gKwkqcF9jb25maWdfdmFsdWUgPSBrY2FsbG9jKG51bV9jb25maWdzLCBzaXplb2YoKipwX2Nv bmZpZ192YWx1ZSksDQo+IEdGUF9LRVJORUwpOw0KPiArCWlmICghKnBfY29uZmlnX3ZhbHVlKQ0K PiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCSpwX2NvbmZpZ190eXBlID0ga2NhbGxvYyhu dW1fY29uZmlncywgc2l6ZW9mKCoqcF9jb25maWdfdHlwZSksDQo+IEdGUF9LRVJORUwpOw0KPiAr CWlmICghKnBfY29uZmlnX3R5cGUpIHsNCj4gKwkJa2ZyZWUoKnBfY29uZmlnX3ZhbHVlKTsNCj4g KwkJcmV0dXJuIC1FTk9NRU07DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkDQo+ICtwaW5jdHJsX3NjbWlfZnJlZV9jb25maWdzKHN0cnVjdCBwaW5j dHJsX2RldiAqcGN0bGRldiwgdTMyIG51bV9jb25maWdzLA0KPiArCQkJICB1MzIgKipwX2NvbmZp Z192YWx1ZSwNCj4gKwkJCSAgZW51bSBzY21pX3BpbmN0cmxfY29uZl90eXBlICoqcF9jb25maWdf dHlwZSkgew0KPiArCWlmIChudW1fY29uZmlncyA8PSBTQ01JX05VTV9DT05GSUdTKQ0KPiArCQly ZXR1cm47DQo+ICsNCj4gKwlrZnJlZSgqcF9jb25maWdfdmFsdWUpOw0KPiArCWtmcmVlKCpwX2Nv bmZpZ190eXBlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBwaW5jdHJsX3NjbWlfcGluY29u Zl9zZXQoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LA0KPiArCQkJCSAgICB1bnNpZ25lZCBp bnQgcGluLA0KPiArCQkJCSAgICB1bnNpZ25lZCBsb25nICpjb25maWdzLA0KPiArCQkJCSAgICB1 bnNpZ25lZCBpbnQgbnVtX2NvbmZpZ3MpDQo+ICt7DQo+ICsJaW50IGksIHJldDsNCj4gKwlzdHJ1 Y3Qgc2NtaV9waW5jdHJsICpwbXggPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3RsZGV2KTsN Cj4gKwllbnVtIHNjbWlfcGluY3RybF9jb25mX3R5cGUgY29uZmlnX3R5cGVbU0NNSV9OVU1fQ09O RklHU107DQo+ICsJdTMyIGNvbmZpZ192YWx1ZVtTQ01JX05VTV9DT05GSUdTXTsNCj4gKwllbnVt IHNjbWlfcGluY3RybF9jb25mX3R5cGUgKnBfY29uZmlnX3R5cGUgPSBjb25maWdfdHlwZTsNCj4g Kwl1MzIgKnBfY29uZmlnX3ZhbHVlID0gY29uZmlnX3ZhbHVlOw0KPiArCWVudW0gcGluX2NvbmZp Z19wYXJhbSBwYXJhbTsNCj4gKw0KPiArCWlmICghY29uZmlncyB8fCAhbnVtX2NvbmZpZ3MpDQo+ ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsJcmV0ID0gcGluY3RybF9zY21pX2FsbG9jX2Nv bmZpZ3MocGN0bGRldiwgbnVtX2NvbmZpZ3MsDQo+ICZwX2NvbmZpZ190eXBlLA0KPiArCQkJCQkg JnBfY29uZmlnX3ZhbHVlKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ ICsJZm9yIChpID0gMDsgaSA8IG51bV9jb25maWdzOyBpKyspIHsNCj4gKwkJcGFyYW0gPSBwaW5j b25mX3RvX2NvbmZpZ19wYXJhbShjb25maWdzW2ldKTsNCj4gKwkJcmV0ID0gcGluY3RybF9zY21p X21hcF9waW5jb25mX3R5cGUocGFyYW0sDQo+ICZwX2NvbmZpZ190eXBlW2ldKTsNCj4gKwkJaWYg KHJldCkgew0KPiArCQkJZGV2X2VycihwbXgtPmRldiwgIkVycm9yIG1hcCBwaW5jb25mX3R5cGUg JWRcbiIsDQo+IHJldCk7DQo+ICsJCQlnb3RvIGZyZWVfY29uZmlnOw0KPiArCQl9DQo+ICsJCXBf Y29uZmlnX3ZhbHVlW2ldID0gcGluY29uZl90b19jb25maWdfYXJndW1lbnQoY29uZmlnc1tpXSk7 DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gcGluY3RybF9vcHMtPnNldHRpbmdzX2NvbmYocG14LT5w aCwgcGluLCBQSU5fVFlQRSwNCj4gbnVtX2NvbmZpZ3MsDQo+ICsJCQkJCSBwX2NvbmZpZ190eXBl LCAgcF9jb25maWdfdmFsdWUpOw0KPiArCWlmIChyZXQpDQo+ICsJCWRldl9lcnIocG14LT5kZXYs ICJFcnJvciBwYXJzaW5nIGNvbmZpZyAlZFxuIiwgcmV0KTsNCj4gKw0KPiArZnJlZV9jb25maWc6 DQo+ICsJcGluY3RybF9zY21pX2ZyZWVfY29uZmlncyhwY3RsZGV2LCBudW1fY29uZmlncywgJnBf Y29uZmlnX3R5cGUsDQo+ICsJCQkJICAmcF9jb25maWdfdmFsdWUpOw0KPiArCXJldHVybiByZXQ7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgcGluY3RybF9zY21pX3BpbmNvbmZfZ3JvdXBfc2V0 KHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwNCj4gKwkJCQkJICB1bnNpZ25lZCBpbnQgZ3Jv dXAsDQo+ICsJCQkJCSAgdW5zaWduZWQgbG9uZyAqY29uZmlncywNCj4gKwkJCQkJICB1bnNpZ25l ZCBpbnQgbnVtX2NvbmZpZ3MpDQo+ICt7DQo+ICsJaW50IGksIHJldDsNCj4gKwlzdHJ1Y3Qgc2Nt aV9waW5jdHJsICpwbXggPSAgcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7DQo+ICsJ ZW51bSBzY21pX3BpbmN0cmxfY29uZl90eXBlIGNvbmZpZ190eXBlW1NDTUlfTlVNX0NPTkZJR1Nd Ow0KPiArCXUzMiBjb25maWdfdmFsdWVbU0NNSV9OVU1fQ09ORklHU107DQo+ICsJZW51bSBzY21p X3BpbmN0cmxfY29uZl90eXBlICpwX2NvbmZpZ190eXBlID0gY29uZmlnX3R5cGU7DQo+ICsJdTMy ICpwX2NvbmZpZ192YWx1ZSA9IGNvbmZpZ192YWx1ZTsNCj4gKwllbnVtIHBpbl9jb25maWdfcGFy YW0gcGFyYW07DQo+ICsNCj4gKwlpZiAoIWNvbmZpZ3MgfHwgIW51bV9jb25maWdzKQ0KPiArCQly ZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCXJldCA9IHBpbmN0cmxfc2NtaV9hbGxvY19jb25maWdz KHBjdGxkZXYsIG51bV9jb25maWdzLA0KPiAmcF9jb25maWdfdHlwZSwNCj4gKwkJCQkJICZwX2Nv bmZpZ192YWx1ZSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCWZv ciAoaSA9IDA7IGkgPCBudW1fY29uZmlnczsgaSsrKSB7DQo+ICsJCXBhcmFtID0gcGluY29uZl90 b19jb25maWdfcGFyYW0oY29uZmlnc1tpXSk7DQo+ICsJCXJldCA9IHBpbmN0cmxfc2NtaV9tYXBf cGluY29uZl90eXBlKHBhcmFtLA0KPiAmcF9jb25maWdfdHlwZVtpXSk7DQo+ICsJCWlmIChyZXQp IHsNCj4gKwkJCWRldl9lcnIocG14LT5kZXYsICJFcnJvciBtYXAgcGluY29uZl90eXBlICVkXG4i LA0KPiByZXQpOw0KPiArCQkJZ290byBmcmVlX2NvbmZpZzsNCj4gKwkJfQ0KPiArDQo+ICsJCXBf Y29uZmlnX3ZhbHVlW2ldID0gcGluY29uZl90b19jb25maWdfYXJndW1lbnQoY29uZmlnc1tpXSk7 DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gcGluY3RybF9vcHMtPnNldHRpbmdzX2NvbmYocG14LT5w aCwgZ3JvdXAsIEdST1VQX1RZUEUsDQo+ICsJCQkJCSBudW1fY29uZmlncywgcF9jb25maWdfdHlw ZSwNCj4gKwkJCQkJIHBfY29uZmlnX3ZhbHVlKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlkZXZfZXJy KHBteC0+ZGV2LCAiRXJyb3IgcGFyc2luZyBjb25maWcgJWQiLCByZXQpOw0KPiArDQo+ICtmcmVl X2NvbmZpZzoNCj4gKwlwaW5jdHJsX3NjbWlfZnJlZV9jb25maWdzKHBjdGxkZXYsIG51bV9jb25m aWdzLCAmcF9jb25maWdfdHlwZSwNCj4gKwkJCQkgICZwX2NvbmZpZ192YWx1ZSk7DQo+ICsJcmV0 dXJuIHJldDsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgcGluY3RybF9zY21pX3BpbmNvbmZf Z3JvdXBfZ2V0KHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwNCj4gKwkJCQkJICB1bnNpZ25l ZCBpbnQgZ3JvdXAsDQo+ICsJCQkJCSAgdW5zaWduZWQgbG9uZyAqY29uZmlnKQ0KPiArew0KPiAr CWludCByZXQ7DQo+ICsJc3RydWN0IHNjbWlfcGluY3RybCAqcG14ID0gcGluY3RybF9kZXZfZ2V0 X2RydmRhdGEocGN0bGRldik7DQo+ICsJZW51bSBwaW5fY29uZmlnX3BhcmFtIGNvbmZpZ190eXBl Ow0KPiArCWVudW0gc2NtaV9waW5jdHJsX2NvbmZfdHlwZSB0eXBlOw0KPiArCXUzMiBjb25maWdf dmFsdWU7DQo+ICsNCj4gKwlpZiAoIWNvbmZpZykNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsN Cj4gKwljb25maWdfdHlwZSA9IHBpbmNvbmZfdG9fY29uZmlnX3BhcmFtKCpjb25maWcpOw0KPiAr CXJldCA9IHBpbmN0cmxfc2NtaV9tYXBfcGluY29uZl90eXBlKGNvbmZpZ190eXBlLCAmdHlwZSk7 DQo+ICsJaWYgKHJldCkgew0KPiArCQlkZXZfZXJyKHBteC0+ZGV2LCAiRXJyb3IgbWFwIHBpbmNv bmZfdHlwZSAlZFxuIiwgcmV0KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwly ZXQgPSBwaW5jdHJsX29wcy0+c2V0dGluZ3NfZ2V0X29uZShwbXgtPnBoLCBncm91cCwgR1JPVVBf VFlQRSwNCj4gdHlwZSwNCj4gKwkJCQkJICAgICZjb25maWdfdmFsdWUpOw0KPiArCWlmIChyZXQp DQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkqY29uZmlnID0gcGluY29uZl90b19jb25maWdf cGFja2VkKGNvbmZpZ190eXBlLCBjb25maWdfdmFsdWUpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGluY29uZl9vcHMgcGluY3RybF9zY21p X3BpbmNvbmZfb3BzID0gew0KPiArCS5pc19nZW5lcmljID0gdHJ1ZSwNCj4gKwkucGluX2NvbmZp Z19nZXQgPSBwaW5jdHJsX3NjbWlfcGluY29uZl9nZXQsDQo+ICsJLnBpbl9jb25maWdfc2V0ID0g cGluY3RybF9zY21pX3BpbmNvbmZfc2V0LA0KPiArCS5waW5fY29uZmlnX2dyb3VwX3NldCA9IHBp bmN0cmxfc2NtaV9waW5jb25mX2dyb3VwX3NldCwNCj4gKwkucGluX2NvbmZpZ19ncm91cF9nZXQg PSBwaW5jdHJsX3NjbWlfcGluY29uZl9ncm91cF9nZXQsDQo+ICsJLnBpbl9jb25maWdfY29uZmln X2RiZ19zaG93ID0gcGluY29uZl9nZW5lcmljX2R1bXBfY29uZmlnLCB9Ow0KPiArDQo+ICtzdGF0 aWMgaW50IHBpbmN0cmxfc2NtaV9nZXRfcGlucyhzdHJ1Y3Qgc2NtaV9waW5jdHJsICpwbXgsDQo+ ICsJCQkJIHN0cnVjdCBwaW5jdHJsX2Rlc2MgKmRlc2MpDQo+ICt7DQo+ICsJc3RydWN0IHBpbmN0 cmxfcGluX2Rlc2MgKnBpbnM7DQo+ICsJdW5zaWduZWQgaW50IG5waW5zOw0KPiArCWludCByZXQs IGk7DQo+ICsNCj4gKwlucGlucyA9IHBpbmN0cmxfb3BzLT5jb3VudF9nZXQocG14LT5waCwgUElO X1RZUEUpOw0KPiArCS8qDQo+ICsJICogbnBpbnMgd2lsbCBuZXZlciBiZSB6ZXJvLCB0aGUgc2Nt aSBwaW5jdHJsIGRyaXZlciBoYXMgYmFpbGVkIG91dA0KPiArCSAqIGlmIG5waW5zIGlzIHplcm8u DQo+ICsJICovDQo+ICsJcGlucyA9IGRldm1fa21hbGxvY19hcnJheShwbXgtPmRldiwgbnBpbnMs IHNpemVvZigqcGlucyksDQo+IEdGUF9LRVJORUwpOw0KPiArCWlmICghcGlucykNCj4gKwkJcmV0 dXJuIC1FTk9NRU07DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnBpbnM7IGkrKykgew0KPiAr CQlwaW5zW2ldLm51bWJlciA9IGk7DQo+ICsJCS8qDQo+ICsJCSAqIFRoZSBtZW1vcnkgZm9yIG5h bWUgaXMgaGFuZGxlZCBieSB0aGUgc2NtaSBmaXJtd2FyZQ0KPiBkcml2ZXIsDQo+ICsJCSAqIG5v IG5lZWQgZnJlZSBoZXJlDQo+ICsJCSAqLw0KPiArCQlyZXQgPSBwaW5jdHJsX29wcy0+bmFtZV9n ZXQocG14LT5waCwgaSwgUElOX1RZUEUsDQo+ICZwaW5zW2ldLm5hbWUpOw0KPiArCQlpZiAocmV0 KQ0KPiArCQkJcmV0dXJuIGRldl9lcnJfcHJvYmUocG14LT5kZXYsIHJldCwNCj4gKwkJCQkJICAg ICAiQ2FuJ3QgZ2V0IG5hbWUgZm9yIHBpbiAlZCIsIGkpOw0KPiArCX0NCj4gKw0KPiArCWRlc2Mt Pm5waW5zID0gbnBpbnM7DQo+ICsJZGVzYy0+cGlucyA9IHBpbnM7DQo+ICsJZGV2X2RiZyhwbXgt PmRldiwgImdvdCBwaW5zICV1IiwgbnBpbnMpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBpbnQgc2NtaV9waW5jdHJsX3Byb2JlKHN0cnVjdCBzY21pX2RldmljZSAq c2Rldikgew0KPiArCWludCByZXQ7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnNkZXYtPmRl djsNCj4gKwlzdHJ1Y3Qgc2NtaV9waW5jdHJsICpwbXg7DQo+ICsJY29uc3Qgc3RydWN0IHNjbWlf aGFuZGxlICpoYW5kbGU7DQo+ICsJc3RydWN0IHNjbWlfcHJvdG9jb2xfaGFuZGxlICpwaDsNCj4g Kw0KPiArCWlmICghc2Rldi0+aGFuZGxlKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiAr CWhhbmRsZSA9IHNkZXYtPmhhbmRsZTsNCj4gKw0KPiArCXBpbmN0cmxfb3BzID0gaGFuZGxlLT5k ZXZtX3Byb3RvY29sX2dldChzZGV2LA0KPiBTQ01JX1BST1RPQ09MX1BJTkNUUkwsICZwaCk7DQo+ ICsJaWYgKElTX0VSUihwaW5jdHJsX29wcykpDQo+ICsJCXJldHVybiBQVFJfRVJSKHBpbmN0cmxf b3BzKTsNCj4gKw0KPiArCXBteCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcG14KSwgR0ZQ X0tFUk5FTCk7DQo+ICsJaWYgKCFwbXgpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJ cG14LT5waCA9IHBoOw0KPiArDQo+ICsJcG14LT5kZXYgPSBkZXY7DQo+ICsJcG14LT5wY3RsX2Rl c2MubmFtZSA9IERSVl9OQU1FOw0KPiArCXBteC0+cGN0bF9kZXNjLm93bmVyID0gVEhJU19NT0RV TEU7DQo+ICsJcG14LT5wY3RsX2Rlc2MucGN0bG9wcyA9ICZwaW5jdHJsX3NjbWlfcGluY3RybF9v cHM7DQo+ICsJcG14LT5wY3RsX2Rlc2MucG14b3BzID0gJnBpbmN0cmxfc2NtaV9waW5tdXhfb3Bz Ow0KPiArCXBteC0+cGN0bF9kZXNjLmNvbmZvcHMgPSAmcGluY3RybF9zY21pX3BpbmNvbmZfb3Bz Ow0KPiArDQo+ICsJcmV0ID0gcGluY3RybF9zY21pX2dldF9waW5zKHBteCwgJnBteC0+cGN0bF9k ZXNjKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJcmV0ID0gZGV2 bV9waW5jdHJsX3JlZ2lzdGVyX2FuZF9pbml0KGRldiwgJnBteC0+cGN0bF9kZXNjLCBwbXgsDQo+ ICsJCQkJCSAgICAgJnBteC0+cGN0bGRldik7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIGRl dl9lcnJfcHJvYmUoZGV2LCByZXQsICJGYWlsZWQgdG8gcmVnaXN0ZXIgcGluY3RybFxuIik7DQo+ ICsNCj4gKwlwbXgtPm5yX2Z1bmN0aW9ucyA9IHBpbmN0cmxfc2NtaV9nZXRfZnVuY3Rpb25zX2Nv dW50KHBteC0NCj4gPnBjdGxkZXYpOw0KPiArCXBteC0+ZnVuY3Rpb25zID0gZGV2bV9rY2FsbG9j KGRldiwgcG14LT5ucl9mdW5jdGlvbnMsDQo+ICsJCQkJICAgICAgc2l6ZW9mKCpwbXgtPmZ1bmN0 aW9ucyksIEdGUF9LRVJORUwpOw0KPiArCWlmICghcG14LT5mdW5jdGlvbnMpDQo+ICsJCXJldHVy biAtRU5PTUVNOw0KPiArDQo+ICsJcmV0dXJuIHBpbmN0cmxfZW5hYmxlKHBteC0+cGN0bGRldik7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NtaV9kZXZpY2VfaWQgc2NtaV9p ZF90YWJsZVtdID0gew0KPiArCXsgU0NNSV9QUk9UT0NPTF9QSU5DVFJMLCAicGluY3RybCIgfSwN Cj4gKwl7IH0NCj4gK307DQo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKHNjbWksIHNjbWlfaWRfdGFi bGUpOw0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHNjbWlfZHJpdmVyIHNjbWlfcGluY3RybF9kcml2 ZXIgPSB7DQo+ICsJLm5hbWUgPSBEUlZfTkFNRSwNCj4gKwkucHJvYmUgPSBzY21pX3BpbmN0cmxf cHJvYmUsDQo+ICsJLmlkX3RhYmxlID0gc2NtaV9pZF90YWJsZSwNCj4gK307DQo+ICttb2R1bGVf c2NtaV9kcml2ZXIoc2NtaV9waW5jdHJsX2RyaXZlcik7DQo+ICsNCj4gK01PRFVMRV9BVVRIT1Io Ik9sZWtzaWkgTW9pc2llaWV2IDxvbGVrc2lpX21vaXNpZWlldkBlcGFtLmNvbT4iKTsNCj4gK01P RFVMRV9BVVRIT1IoIlBlbmcgRmFuIDxwZW5nLmZhbkBueHAuY29tPiIpOw0KPiBNT0RVTEVfREVT Q1JJUFRJT04oIkFSTQ0KPiArU0NNSSBwaW4gY29udHJvbGxlciBkcml2ZXIiKTsgTU9EVUxFX0xJ Q0VOU0UoIkdQTCIpOw0KPiANCj4gLS0NCj4gMi4zNy4xDQoNCg==