From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 64F01C433EF for ; Thu, 24 Mar 2022 16:53:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version: Content-Transfer-Encoding:Content-ID:Content-Type:In-Reply-To:References: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=/9ynJMWpQXXkIgDtzLHnK4vRAwOOjXwH/pfzXyb2sLk=; b=bENygH3WVk/ijETFsCw+Ot9jic JWjn2PxV0EYvAIq2btuhfzXyzFVRMllIGuacFNl7tbPVyfGeo9Jvx47E5L2zEloxPi+HpBoU9ocFv XZVZcvgRIZcFsBS03NPE/VXvU9ltVc7+MBnVYvyBdIH4Y885QBNibwMn/95q8/O63nbhkJWzopyzr u11ZD17zes27j47bFFkBKo/FVvkRlf4HmqG+d0T2ayyZTC+z2uGcMLq0dChPxiPoTypzWskPYk314 irhAvd2Av89dljJHyZHoay8RrT+9HRjuLy+8UOAy+Icc0VN0J+jEfJZXpJ6O6QkyiFTe2utqSy1uJ sigKj/og==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nXQiV-00HG6F-S2; Thu, 24 Mar 2022 16:53:43 +0000 Received: from mail-dm6nam11on2062a.outbound.protection.outlook.com ([2a01:111:f400:7eaa::62a] helo=NAM11-DM6-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nXQiR-00HG5Y-32 for linux-nvme@lists.infradead.org; Thu, 24 Mar 2022 16:53:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=InxZLv2ps9qGvdcYATwOLBKA/GUZYk8QvuMgNvq+4thBWmR/g/jMiVPi2o58XbIjYyg8krBQnKr2oduub9EeUK76Q2X7hrqEYQmet4p8g2sX/5lUn0jCzhEKubELfoYkOC+q3myK5AQZ0huTZ28MP0Bys/DQAmcgA/63cIkVcEQf1Ald1KxxrIB/ZIEPg31ATDpZScpImWyqMN9Pixwf4lwR4y84lxvps2Q3Pcl75psk3HWE88WvciJQOWg/YcCwUbMVa69IhIdRq6Hezme6paSeZ6DAdmCQVMNN6kPsKyNTfflsqAbbbD1areBR30tvxgXNv7i/bG9/+nj1RMIG2Q== 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=/9ynJMWpQXXkIgDtzLHnK4vRAwOOjXwH/pfzXyb2sLk=; b=gw+ddDDg4htcUKUbc06ZFQnj1C2LvKyPAPo6AbvaHHoU0g3uFK5k4UVzxI2xEMKRouyl7Hi4rKN4a/2TFitI+2y4o2XnNFpK0apQzmIuJvvvgqizZvWzm0P0GsnRwvQD5Vk93zgZtG1bLRyheu7DJd1r1Se9FxlVh4Fx4cbVMqMkNQM1uQxwsxj6cfOAhOkLbchs2zMJjAE2BEY+QulKaSag8q8IpF87jE53Is8hGBk8pPs6kzBCLSJ2qJofdNbRH1w368brdciU2lWxeZP/m8I1AQ3frdd3FTvwdrKxthCXr6Ftk1ZoOfYXZw1orMdI8xmDLiitMsOJFW9q4eiWrw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/9ynJMWpQXXkIgDtzLHnK4vRAwOOjXwH/pfzXyb2sLk=; b=iosGjP+V+KsAclJInQu2AbM/XTG0MP0M8pLKtaIIK4gnK1jqJxeRBxeNmvV2L3bcPTYgueLBSWlc43LI9abHAgyimGZpjO8UYSN+Xl2BNYauplLWZlmf8UyfH+vXkoK1NPAA1+M17sI7iJXp1Cy7eDw4Re5c8vOoS25Jd5Z42n9UOlNjC3k+2cSViMSnOEP0SEiK0j4LeblaAwq9n+BzjtXMUpzsOS6jsICMuidnOt2Kgv+t0CkE9BK1xoPLz1nVrIotP3Yes5boRmY48a/fUh5NEkvwli+0jxnNFDPVs37qKiNZg9+xK689rMZJmiL3vwf3IVYCSFr1Lg1pXbpCPA== Received: from MW2PR12MB4667.namprd12.prod.outlook.com (2603:10b6:302:12::28) by BN9PR12MB5146.namprd12.prod.outlook.com (2603:10b6:408:137::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5102.16; Thu, 24 Mar 2022 16:53:35 +0000 Received: from MW2PR12MB4667.namprd12.prod.outlook.com ([fe80::3dbb:6c2c:eecf:a279]) by MW2PR12MB4667.namprd12.prod.outlook.com ([fe80::3dbb:6c2c:eecf:a279%6]) with mapi id 15.20.5102.019; Thu, 24 Mar 2022 16:53:35 +0000 From: Chaitanya Kulkarni To: Hannes Reinecke , Sagi Grimberg CC: Christoph Hellwig , Keith Busch , "linux-nvme@lists.infradead.org" Subject: Re: [PATCH 06/11] nvme: Implement In-Band authentication Thread-Topic: [PATCH 06/11] nvme: Implement In-Band authentication Thread-Index: AQHYPoYWsoP/nvI8NUCbOAqunDIu5KzOwlkA Date: Thu, 24 Mar 2022 16:53:35 +0000 Message-ID: References: <20220323071303.14671-1-hare@suse.de> <20220323071303.14671-7-hare@suse.de> In-Reply-To: <20220323071303.14671-7-hare@suse.de> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3ae9ee98-fe06-4eb4-f3b0-08da0db6d5f8 x-ms-traffictypediagnostic: BN9PR12MB5146:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: bHsfI4O2MHGnMe9gRqXrRKePs6EMi005t2i8onGvoyFh4d1YCX50pffaMZO4M/wnrKHsu4R5eQEdcFMTwwhays7z2bAmVJH1tBSUsQmX3Q5bR03lFaqOXmo5zlnCXF5H39VJFx5WbR8TIqSVKuqE7/WAApgOMbNB6M2laSLEH2UwX0wFNtfZNjKQN9/lg0bPy/gQt7vzddNHl5LS9pNTOBmPZxRSyjXwJJqKhP+B2kBFsqeE9azdIabSlBA4XRqyw98bQCzGp7cTPIQpv9eNZid4YmoFLkmaWaZ2plT+E/fgJgj0Egh179b1RSwow2Wd0JvZrao2QrqB5kTK3uM0XKJ8EIthU7BfbjalvPBeERMKyOUVCQOJkWjrHtAgIaIocQzPrSBZr/BFOf8vHRV6568f7OU+3upYq9nzdcRz4Sj0rVYwqNqa0AcrNPjTV2TnpJaeWnboKA0U23jpCCE36PriYtqSdKPcFwDyhLieeNB0xhGlMWA3D9rmF5ouVS8u7/FF5NXHUrjR7EPDd/HlQSoI3vyL22k54TB3nqvKd4PXgOi3SDLXoxEHaoSkU4d7y/BudoKPIjAzRCd+tStsYI83tMIytAv2xvbHIw7PleKxzF/l7Pr1bm2ZC3j/Ol0Qeo4RzYHbUNty6Oycqn/kULKtihM9NvdopYaGCC0WS/hERtsUwdlUMrHKbS+fZxQvHFZAmH+IbZ6v7ZI2c61ZrxB2WjE5ZzD3uKb19Yc2zlLXztd6ve9EktFsP6i7RvlzV6bRT/9XnJ/nolKOe23M4D406CNQSWsM4iyZb5aV9yPtP0h//RYRabypU3SvIeHcFtf3gC04/WftUtIOKNRh0V2PJq1ZAP6VWAjLKWyxXBU= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MW2PR12MB4667.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(366004)(508600001)(966005)(6486002)(38070700005)(38100700002)(71200400001)(64756008)(66446008)(8676002)(31696002)(86362001)(66476007)(66556008)(91956017)(76116006)(66946007)(54906003)(110136005)(316002)(4326008)(122000001)(53546011)(6512007)(6506007)(2616005)(83380400001)(186003)(30864003)(31686004)(36756003)(8936002)(5660300002)(2906002)(45980500001)(43740500002)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TDM0TE1aOVBkcGJPR2VCL3YzVVhBU3U4TUNLZVZhU3lFWFlScVJKVC9oS0Z6?= =?utf-8?B?WFFrd1RQUUNFaUV3MnllemtFOGlTRkNjQVI2dVV0Q05RU1dBeG44Yi9zUDVL?= =?utf-8?B?MEJyK0NIekxmSzY4azdzMVpGTFdpdW9FaWxZTzlucDduL29jdkEwY00zR2hR?= =?utf-8?B?V2RlVzhiVEhPVGFWZkFXM3R6MU5ja3ZqbU9zaUNpNjZITTB4dmNkemFMYk12?= =?utf-8?B?Z1VNV2RvYWNWb1BKMW14MWh5KzA1a2g0T0pZL0tWNHR6VmgzeER1ZzRIbStL?= =?utf-8?B?M3o2Y1pPTVZHZVJFRE5GV0xVbnRaN0ZlZ2FHajNPZzFndDlDYm11VCtlMjMy?= =?utf-8?B?MDdVS3Z2STV6dmwzVWUxS0NDNjIwVHlscytzRUZjdURiT3JSaW1WcXFydU5l?= =?utf-8?B?VXJSd1FJYXd2elAzeVM4NmZzR0lLQmwyY3pYMDJ3UFdrdDF3eHFpRm9DR0s4?= =?utf-8?B?VlVGYlFZd2FHcWYvdlZqbWNlRUpWN2trNXNEVHFZdWZTWXRqa1c4VWdTQjdV?= =?utf-8?B?VTAxVHZNTStCQmMxT1gzejJSTUpjUXNWdXREUWNTeEZoYkNzS0VHeDlMeGNq?= =?utf-8?B?QXB1VFo0anZDS1kyQjNnS0h0YWhEU2drRjlUMFpQTmJzSXlHL0JPemhOd0ZU?= =?utf-8?B?bFlZUUM5MndvNU5NaFFqTFBhbkZpQVFWN0ltWUlWYXl2NTBwaWtsLzlHTEpr?= =?utf-8?B?TnM2UDJjTUdmalpTbmxaQTVnZExUV0FSaEFMcm9mZk0rRUVuMlRlblJFcE9K?= =?utf-8?B?Q1pGL05RbE1uVWNBbG9mYzZkTGd2bEkzcWZUeGxISUFEVmFmZ3kzZTJOalpl?= =?utf-8?B?WWN2YTc0K1o5bHluOXlTUTQ2OWhzNGwrZUtZTlM3dm8wQlc3YXNOdXJiV3l0?= =?utf-8?B?NElWVUh5SG1ENTFnVHRiOW81QTdVWGhlNitaMEhyWXA2VjRvMVRaN2FRYUtR?= =?utf-8?B?OXZ2SmpHNjZrSllVZ1Fic1Rad3ZXWmFnNDFScE94L3pEUzZ2WVJ6cnM3M2Fx?= =?utf-8?B?ZlZNbVhGdytmY1RPS0N1cE0zelZONW1HVy9wU2o5Qk4rV08wTm5FWXlNRnpH?= =?utf-8?B?TzdyQlVSa2NKY1dBaHUxSVBHWkdVSU1yRXZxWXZac05VNmxBU2l2djNVS21L?= =?utf-8?B?OWlvcGw5NUVvekpNTlcwakpCcmZIVWRaMVQ5YlJ2NERiQnVsQnlmVFpDZmtu?= =?utf-8?B?eG5kYTJqaWVCenJzL2hFQld0S2xaSnhLUTZEY1BnYXVxdEluMGxVQ2o3QjFJ?= =?utf-8?B?Zm1uakg2Kzg2cTJxNk1yZWE4OUhvWnlWS0FzWEtVVFFYN0F5UHFZd1JEQisr?= =?utf-8?B?SHJFYVNhNXEySGFKVUIxRXhxSjVsSzdWdDBYK0dDd1NGYlF4OTllNndGYy93?= =?utf-8?B?M0RDQTRPdUlNSHZQcGxrNEYrVTFHcm9VblNkVTJlQ1g3bFZxcHVzT1MzaXRl?= =?utf-8?B?engvUit4WnZUMFQ0TkRZRkJremRNcjlLUXFtY3N6amc1V1pHOXZROWZJY2hW?= =?utf-8?B?azNqUWhiMEhtK0lhQXJVM1d0WkM5YzBXRVFhY0hvbFYxTFRkd2pNdkNXWmtU?= =?utf-8?B?cnNWZEcyM0RoVVRJb1oybHMzbi9PVXhmWGZnaFppL1RqSGZNNUtoRGs3cnFM?= =?utf-8?B?RitmWkczaGhYRmc5ZTB5eTlOeEQwSjVmSWdCdXZJQVNWaTdWcVYydXFieU5I?= =?utf-8?B?R3orZ2pMeHBscThHMGNlTHpKWDJ5ZXI3WTJrbVRSYS9UWnZ0NkFzK201YWV3?= =?utf-8?B?Mld5dHR6MDNLSmQ3eXEzaS8reEd6cm12OWRoc1J1d1MwNGhWcEtqSnk3VHlH?= =?utf-8?B?cEtvcGJ3UGYwWTFyMlptSVdnRzhCZHNFMkp6RDdiNUZyQ2MzTGJZVHAvVHln?= =?utf-8?B?d0ZSU1BKa2g1TS9FQ1NLeXNRaEVyRFhWNU8rWTZuckNDSDVPTHpuRm8vL2dH?= =?utf-8?B?MDZqY3lKUkcrUEJkNDNmV1JJbm1XN3IySkp2R0lPTGF0a2xESHdxU3hjS3dq?= =?utf-8?B?cndPTTZ6Z3E2M0g2akJWUXpnTXNwVHh3M3I3OTN4ZytCOUlvOWhyeG9QWFRa?= =?utf-8?B?SDlIbnZVSWQvTFp2d1l1amxIUm91SExEY1lXYXllNzQrQkFDZ3VsQkFYNk9U?= =?utf-8?B?QjRMSndSeHZCaG9ub2g2c3VJUGtKdjhTUU5pdXNicU0zb0dZMzJIWTBPS0Zl?= =?utf-8?B?YXc0SHBtSFllT3ZCQW0xNmtsU3hJQldUYmNsVzRrMm9IaHhtK3RtK3ZFdTFJ?= =?utf-8?B?SlZiN084d1NwdDZRMnJvOW1QdEs3aEorM3JrUHMva25leTJ2VkVSdHpmZ3Ry?= =?utf-8?B?UjNMQzFCdmVpK3g2UHJJVFJ3N0pQT20zbXh3VEt1YTFlRWxqS1JJRzZES291?= =?utf-8?Q?3ccodq+4KFgKcr60=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW2PR12MB4667.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3ae9ee98-fe06-4eb4-f3b0-08da0db6d5f8 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Mar 2022 16:53:35.0636 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: onEo7yMXjRZ57/rsnJxIbICJ6OWXgVte3gmnb1ih8QG3P/HW3MBWVsUrATTYPmgx2cPBvx7dqgHbTLo3Mrm5wg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR12MB5146 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220324_095339_416779_0633E879 X-CRM114-Status: GOOD ( 28.01 ) X-BeenThere: linux-nvme@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-nvme" Errors-To: linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org T24gMy8yMy8yMiAwMDoxMiwgSGFubmVzIFJlaW5lY2tlIHdyb3RlOg0KPiBJbXBsZW1lbnQgTlZN ZS1vRiBJbi1CYW5kIGF1dGhlbnRpY2F0aW9uIGFjY29yZGluZyB0byBOVk1lIFRQQVIgODAwNi4N Cj4gVGhpcyBwYXRjaCBhZGRzIHR3byBuZXcgZmFicmljIG9wdGlvbnMgJ2RoY2hhcF9zZWNyZXQn IHRvIHNwZWNpZnkgdGhlDQo+IHByZS1zaGFyZWQga2V5IChpbiBBU0NJSSByZXNwcmVzZW50YXRp b24gYWNjb3JkaW5nIHRvIE5WTWUgMi4wIHNlY3Rpb24NCj4gOC4xMy41LjggJ1NlY3JldCByZXBy ZXNlbnRhdGlvbicpIGFuZCAnZGhjaGFwX2N0cmxfc2VjcmV0JyB0byBzcGVjaWZ5DQo+IHRoZSBw cmUtc2hhcmVkIGNvbnRyb2xsZXIga2V5IGZvciBiaS1kaXJlY3Rpb25hbCBhdXRoZW50aWNhdGlv biBvZiBib3RoDQo+IHRoZSBob3N0IGFuZCB0aGUgY29udHJvbGxlci4NCj4gUmUtYXV0aGVudGlj YXRpb24gY2FuIGJlIHRyaWdnZXJlZCBieSB3cml0aW5nIHRoZSBQU0sgaW50byB0aGUgbmV3DQo+ IGNvbnRyb2xsZXIgc3lzZnMgYXR0cmlidXRlICdkaGNoYXBfc2VjcmV0JyBvciAnZGhjaGFwX2N0 cmxfc2VjcmV0Jy4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IEhhbm5lcyBSZWluZWNrZSA8aGFyZUBz dXNlLmRlPg0KPiAtLS0NCj4gICBkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnICAgfCAgIDExICsN Cj4gICBkcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZSAgfCAgICAxICsNCj4gICBkcml2ZXJzL252 bWUvaG9zdC9hdXRoLmMgICAgfCAxMTQwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrDQo+ICAgZHJpdmVycy9udm1lL2hvc3QvYXV0aC5oICAgIHwgICAzMiArDQo+ICAgZHJpdmVy cy9udm1lL2hvc3QvY29yZS5jICAgIHwgIDE0MSArKysrLQ0KPiAgIGRyaXZlcnMvbnZtZS9ob3N0 L2ZhYnJpY3MuYyB8ICAgNzkgKystDQo+ICAgZHJpdmVycy9udm1lL2hvc3QvZmFicmljcy5oIHwg ICAgNyArDQo+ICAgZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oICAgIHwgICAzMSArDQo+ICAgZHJp dmVycy9udm1lL2hvc3QvcmRtYS5jICAgIHwgICAgMSArDQo+ICAgZHJpdmVycy9udm1lL2hvc3Qv dGNwLmMgICAgIHwgICAgMSArDQo+ICAgZHJpdmVycy9udm1lL2hvc3QvdHJhY2UuYyAgIHwgICAz MiArDQo+ICAgMTEgZmlsZXMgY2hhbmdlZCwgMTQ2OSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9u cygtKQ0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL252bWUvaG9zdC9hdXRoLmMNCj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9udm1lL2hvc3QvYXV0aC5oDQo+IA0KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvbnZtZS9ob3N0L0tj b25maWcNCj4gaW5kZXggZDZkMDU2OTYzYzA2Li5kZDBlOTFmYjA2MTUgMTAwNjQ0DQo+IC0tLSBh L2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWcNCj4gKysrIGIvZHJpdmVycy9udm1lL2hvc3QvS2Nv bmZpZw0KPiBAQCAtOTEsMyArOTEsMTQgQEAgY29uZmlnIE5WTUVfVENQDQo+ICAgCSAgZnJvbSBo dHRwczovL2dpdGh1Yi5jb20vbGludXgtbnZtZS9udm1lLWNsaS4NCj4gICANCj4gICAJICBJZiB1 bnN1cmUsIHNheSBOLg0KPiArDQo+ICtjb25maWcgTlZNRV9BVVRIDQo+ICsJYm9vbCAiTlZNIEV4 cHJlc3Mgb3ZlciBGYWJyaWNzIEluLUJhbmQgQXV0aGVudGljYXRpb24iDQo+ICsJZGVwZW5kcyBv biBOVk1FX0NPUkUNCj4gKwlzZWxlY3QgQ1JZUFRPX0hNQUMNCj4gKwlzZWxlY3QgQ1JZUFRPX1NI QTI1Ng0KPiArCXNlbGVjdCBDUllQVE9fU0hBNTEyDQo+ICsJaGVscA0KPiArCSAgVGhpcyBwcm92 aWRlcyBzdXBwb3J0IGZvciBOVk1lIG92ZXIgRmFicmljcyBJbi1CYW5kIEF1dGhlbnRpY2F0aW9u Lg0KPiArDQo+ICsJICBJZiB1bnN1cmUsIHNheSBOLg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9u dm1lL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZQ0KPiBpbmRleCA0 NzZjNWM5ODg0OTYuLjc3NTVmNWUzYjI4MSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9udm1lL2hv c3QvTWFrZWZpbGUNCj4gKysrIGIvZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGUNCj4gQEAgLTE1 LDYgKzE1LDcgQEAgbnZtZS1jb3JlLSQoQ09ORklHX05WTUVfTVVMVElQQVRIKQkrPSBtdWx0aXBh dGgubw0KPiAgIG52bWUtY29yZS0kKENPTkZJR19CTEtfREVWX1pPTkVEKQkrPSB6bnMubw0KPiAg IG52bWUtY29yZS0kKENPTkZJR19GQVVMVF9JTkpFQ1RJT05fREVCVUdfRlMpCSs9IGZhdWx0X2lu amVjdC5vDQo+ICAgbnZtZS1jb3JlLSQoQ09ORklHX05WTUVfSFdNT04pCQkrPSBod21vbi5vDQo+ ICtudm1lLWNvcmUtJChDT05GSUdfTlZNRV9BVVRIKQkJKz0gYXV0aC5vDQo+ICAgDQo+ICAgbnZt ZS15CQkJCQkrPSBwY2kubw0KPiAgIA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3Qv YXV0aC5jIGIvZHJpdmVycy9udm1lL2hvc3QvYXV0aC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNGJjYTRiYTFjY2VhDQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvZHJpdmVycy9udm1lL2hvc3QvYXV0aC5jDQo+IEBAIC0wLDAgKzEsMTE0MCBAQA0KPiAr Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gKy8qDQo+ICsgKiBDb3B5cmln aHQgKGMpIDIwMjAgSGFubmVzIFJlaW5lY2tlLCBTVVNFIExpbnV4DQo+ICsgKi8NCj4gKw0KPiAr I2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvYmFzZTY0Lmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvcHJhbmRvbS5oPg0KPiArI2luY2x1ZGUgPGFzbS91bmFsaWduZWQu aD4NCj4gKyNpbmNsdWRlIDxjcnlwdG8vaGFzaC5oPg0KPiArI2luY2x1ZGUgPGNyeXB0by9kaC5o Pg0KPiArI2luY2x1ZGUgIm52bWUuaCINCj4gKyNpbmNsdWRlICJmYWJyaWNzLmgiDQo+ICsjaW5j bHVkZSAiYXV0aC5oIg0KPiArDQo+ICtzdGF0aWMgdTMyIG52bWVfZGhjaGFwX3NlcW51bTsNCj4g K3N0YXRpYyBERUZJTkVfTVVURVgobnZtZV9kaGNoYXBfbXV0ZXgpOw0KPiArDQo+ICtzdHJ1Y3Qg bnZtZV9kaGNoYXBfcXVldWVfY29udGV4dCB7DQo+ICsJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsN Cj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXV0aF93b3JrOw0KPiArCXN0cnVjdCBudm1lX2N0cmwg KmN0cmw7DQo+ICsJc3RydWN0IGNyeXB0b19zaGFzaCAqc2hhc2hfdGZtOw0KPiArCXZvaWQgKmJ1 ZjsNCj4gKwlzaXplX3QgYnVmX3NpemU7DQo+ICsJaW50IHFpZDsNCj4gKwlpbnQgZXJyb3I7DQo+ ICsJdTMyIHMxOw0KPiArCXUzMiBzMjsNCj4gKwl1MTYgdHJhbnNhY3Rpb247DQo+ICsJdTggc3Rh dHVzOw0KPiArCXU4IGhhc2hfaWQ7DQo+ICsJc2l6ZV90IGhhc2hfbGVuOw0KPiArCXU4IGRoZ3Jv dXBfaWQ7DQo+ICsJdTggYzFbNjRdOw0KPiArCXU4IGMyWzY0XTsNCj4gKwl1OCByZXNwb25zZVs2 NF07DQo+ICsJdTggKmhvc3RfcmVzcG9uc2U7DQo+ICt9Ow0KPiArDQo+ICt1MzIgbnZtZV9hdXRo X2dldF9zZXFudW0odm9pZCkNCj4gK3sNCj4gKwl1MzIgc2VxbnVtOw0KPiArDQo+ICsJbXV0ZXhf bG9jaygmbnZtZV9kaGNoYXBfbXV0ZXgpOw0KPiArCWlmICghbnZtZV9kaGNoYXBfc2VxbnVtKQ0K PiArCQludm1lX2RoY2hhcF9zZXFudW0gPSBwcmFuZG9tX3UzMigpOw0KPiArCWVsc2Ugew0KPiAr CQludm1lX2RoY2hhcF9zZXFudW0rKzsNCj4gKwkJaWYgKCFudm1lX2RoY2hhcF9zZXFudW0pDQo+ ICsJCQludm1lX2RoY2hhcF9zZXFudW0rKzsNCj4gKwl9DQo+ICsJc2VxbnVtID0gbnZtZV9kaGNo YXBfc2VxbnVtOw0KPiArCW11dGV4X3VubG9jaygmbnZtZV9kaGNoYXBfbXV0ZXgpOw0KPiArCXJl dHVybiBzZXFudW07DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChudm1lX2F1dGhfZ2V0X3Nl cW51bSk7DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgbnZtZV9hdXRoX2RoZ3JvdXBfbWFwIHsNCj4g Kwl1OCBpZDsNCj4gKwljb25zdCBjaGFyIG5hbWVbMTZdOw0KPiArCWNvbnN0IGNoYXIga3BwWzE2 XTsNCj4gK30gZGhncm91cF9tYXBbXSA9IHsNCj4gKwl7IC5pZCA9IE5WTUVfQVVUSF9ESEdST1VQ X05VTEwsDQo+ICsJICAubmFtZSA9ICJudWxsIiwgLmtwcCA9ICJudWxsIiB9LA0KPiArCXsgLmlk ID0gTlZNRV9BVVRIX0RIR1JPVVBfMjA0OCwNCj4gKwkgIC5uYW1lID0gImZmZGhlMjA0OCIsIC5r cHAgPSAiZmZkaGUyMDQ4KGRoKSIgfSwNCj4gKwl7IC5pZCA9IE5WTUVfQVVUSF9ESEdST1VQXzMw NzIsDQo+ICsJICAubmFtZSA9ICJmZmRoZTMwNzIiLCAua3BwID0gImZmZGhlMzA3MihkaCkiIH0s DQo+ICsJeyAuaWQgPSBOVk1FX0FVVEhfREhHUk9VUF80MDk2LA0KPiArCSAgLm5hbWUgPSAiZmZk aGU0MDk2IiwgLmtwcCA9ICJmZmRoZTQwOTYoZGgpIiB9LA0KPiArCXsgLmlkID0gTlZNRV9BVVRI X0RIR1JPVVBfNjE0NCwNCj4gKwkgIC5uYW1lID0gImZmZGhlNjE0NCIsIC5rcHAgPSAiZmZkaGU2 MTQ0KGRoKSIgfSwNCj4gKwl7IC5pZCA9IE5WTUVfQVVUSF9ESEdST1VQXzgxOTIsDQo+ICsJICAu bmFtZSA9ICJmZmRoZTgxOTIiLCAua3BwID0gImZmZGhlODE5MihkaCkiIH0sDQo+ICt9Ow0KPiAr DQo+ICtjb25zdCBjaGFyICpudm1lX2F1dGhfZGhncm91cF9uYW1lKHU4IGRoZ3JvdXBfaWQpDQo+ ICt7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkaGdy b3VwX21hcCk7IGkrKykgew0KPiArCQlpZiAoZGhncm91cF9tYXBbaV0uaWQgPT0gZGhncm91cF9p ZCkNCj4gKwkJCXJldHVybiBkaGdyb3VwX21hcFtpXS5uYW1lOw0KPiArCX0NCj4gKwlyZXR1cm4g TlVMTDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKG52bWVfYXV0aF9kaGdyb3VwX25hbWUp Ow0KPiArDQo+ICtjb25zdCBjaGFyICpudm1lX2F1dGhfZGhncm91cF9rcHAodTggZGhncm91cF9p ZCkNCj4gK3sNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGRoZ3JvdXBfbWFwKTsgaSsrKSB7DQo+ICsJCWlmIChkaGdyb3VwX21hcFtpXS5pZCA9PSBkaGdy b3VwX2lkKQ0KPiArCQkJcmV0dXJuIGRoZ3JvdXBfbWFwW2ldLmtwcDsNCj4gKwl9DQo+ICsJcmV0 dXJuIE5VTEw7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChudm1lX2F1dGhfZGhncm91cF9r cHApOw0KPiArDQo+ICt1OCBudm1lX2F1dGhfZGhncm91cF9pZChjb25zdCBjaGFyICpkaGdyb3Vw X25hbWUpDQo+ICt7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShkaGdyb3VwX21hcCk7IGkrKykgew0KPiArCQlpZiAoIXN0cm5jbXAoZGhncm91cF9tYXBb aV0ubmFtZSwgZGhncm91cF9uYW1lLA0KPiArCQkJICAgICBzdHJsZW4oZGhncm91cF9tYXBbaV0u bmFtZSkpKQ0KPiArCQkJcmV0dXJuIGRoZ3JvdXBfbWFwW2ldLmlkOw0KPiArCX0NCj4gKwlyZXR1 cm4gTlZNRV9BVVRIX0RIR1JPVVBfSU5WQUxJRDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xfR1BM KG52bWVfYXV0aF9kaGdyb3VwX2lkKTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBudm1lX2RoY2hh cF9oYXNoX21hcCB7DQo+ICsJaW50IGlkOw0KPiArCWludCBsZW47DQo+ICsJY29uc3QgY2hhciBo bWFjWzE1XTsNCj4gKwljb25zdCBjaGFyIGRpZ2VzdFsxNV07DQo+ICt9IGhhc2hfbWFwW10gPSB7 DQo+ICsJey5pZCA9IE5WTUVfQVVUSF9IQVNIX1NIQTI1NiwgLmxlbiA9IDMyLA0KPiArCSAuaG1h YyA9ICJobWFjKHNoYTI1NikiLCAuZGlnZXN0ID0gInNoYTI1NiIgfSwNCj4gKwl7LmlkID0gTlZN RV9BVVRIX0hBU0hfU0hBMzg0LCAubGVuID0gNDgsDQo+ICsJIC5obWFjID0gImhtYWMoc2hhMzg0 KSIsIC5kaWdlc3QgPSAic2hhMzg0IiB9LA0KPiArCXsuaWQgPSBOVk1FX0FVVEhfSEFTSF9TSEE1 MTIsIC5sZW4gPSA2NCwNCj4gKwkgLmhtYWMgPSAiaG1hYyhzaGE1MTIpIiwgLmRpZ2VzdCA9ICJz aGE1MTIiIH0sDQo+ICt9Ow0KPiArDQo+ICtjb25zdCBjaGFyICpudm1lX2F1dGhfaG1hY19uYW1l KHU4IGhtYWNfaWQpDQo+ICt7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShoYXNoX21hcCk7IGkrKykgew0KPiArCQlpZiAoaGFzaF9tYXBbaV0uaWQgPT0g aG1hY19pZCkNCj4gKwkJCXJldHVybiBoYXNoX21hcFtpXS5obWFjOw0KPiArCX0NCj4gKwlyZXR1 cm4gTlVMTDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKG52bWVfYXV0aF9obWFjX25hbWUp Ow0KPiArDQo+ICtjb25zdCBjaGFyICpudm1lX2F1dGhfZGlnZXN0X25hbWUodTggaG1hY19pZCkN Cj4gK3sNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhh c2hfbWFwKTsgaSsrKSB7DQo+ICsJCWlmIChoYXNoX21hcFtpXS5pZCA9PSBobWFjX2lkKQ0KPiAr CQkJcmV0dXJuIGhhc2hfbWFwW2ldLmRpZ2VzdDsNCj4gKwl9DQo+ICsJcmV0dXJuIE5VTEw7DQo+ ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChudm1lX2F1dGhfZGlnZXN0X25hbWUpOw0KPiArDQo+ ICt1OCBudm1lX2F1dGhfaG1hY19pZChjb25zdCBjaGFyICpobWFjX25hbWUpDQo+ICt7DQo+ICsJ aW50IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoYXNoX21hcCk7IGkr Kykgew0KPiArCQlpZiAoIXN0cm5jbXAoaGFzaF9tYXBbaV0uaG1hYywgaG1hY19uYW1lLA0KPiAr CQkJICAgICBzdHJsZW4oaGFzaF9tYXBbaV0uaG1hYykpKQ0KPiArCQkJcmV0dXJuIGhhc2hfbWFw W2ldLmlkOw0KPiArCX0NCj4gKwlyZXR1cm4gTlZNRV9BVVRIX0hBU0hfSU5WQUxJRDsNCj4gK30N Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKG52bWVfYXV0aF9obWFjX2lkKTsNCj4gKw0KPiArc2l6ZV90 IG52bWVfYXV0aF9obWFjX2hhc2hfbGVuKHU4IGhtYWNfaWQpDQo+ICt7DQo+ICsJaW50IGk7DQo+ ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoYXNoX21hcCk7IGkrKykgew0KPiAr CQlpZiAoaGFzaF9tYXBbaV0uaWQgPT0gaG1hY19pZCkNCj4gKwkJCXJldHVybiBoYXNoX21hcFtp XS5sZW47DQo+ICsJfQ0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwo bnZtZV9hdXRoX2htYWNfaGFzaF9sZW4pOw0KDQp3ZSBjYW4gcmVtb3ZlIGxvb3BzIGluIHRoZSBh Ym92ZSBoZWxwZXJzIGFuZCB0aGUgaWQgbWVtYmVyIGluDQp0aGUgc3RydWN0IHdpdGggdGhlIGhl bHAgb2YgdGhlIHNwYXJzZSBhcnJheSwgd2h5IG5vdCA6LQ0KDQovKiBEZWZpbmVkIGhhc2ggZnVu Y3Rpb25zIGZvciBESC1ITUFDLUNIQVAgYXV0aGVudGljYXRpb24gKi8NCmVudW0geyANCg0KICAg ICAgICBOVk1FX0FVVEhfSEFTSF9TSEEyNTYgICA9IDB4MDEsDQogICAgICAgIE5WTUVfQVVUSF9I QVNIX1NIQTM4NCAgID0gMHgwMiwNCiAgICAgICAgTlZNRV9BVVRIX0hBU0hfU0hBNTEyICAgPSAw eDAzLA0KICAgICAgICBOVk1FX0FVVEhfSEFTSF9JTlZBTElEICA9IDB4ZmYsDQp9Ow0KDQpzdGF0 aWMgc3RydWN0IG52bWVfZGhjaGFwX2hhc2hfbWFwIHsNCglpbnQgbGVuOw0KCWNvbnN0IGNoYXIg KmhtYWM7DQoJY29uc3QgY2hhciAqZGlnZXN0Ow0KfSBoYXNoX21hcFtdID0gew0KCVtOVk1FX0FV VEhfSEFTSF9TSEEyNTZdID0gewkubGVuID0gMzIsDQoJCQkJCS5obWFjID0gImhtYWMoc2hhMjU2 KSIsDQoJCQkJCS5kaWdlc3QgPSAic2hhMjU2Ig0KCQkJCX0sDQoJW05WTUVfQVVUSF9IQVNIX1NI QTM4NF0gPSB7CS5sZW4gPSA0OCwNCgkJCQkJLmhtYWMgPSAiaG1hYyhzaGEzODQpIiwNCgkJCQkJ LmRpZ2VzdCA9ICJzaGEzODQiDQoJCQkJfSwNCglbTlZNRV9BVVRIX0hBU0hfU0hBNTEyXSA9IHsJ LmxlbiA9IDY0LA0KCQkJCQkuaG1hYyA9ICJobWFjKHNoYTUxMikiLA0KCQkJCQkuZGlnZXN0ID0g InNoYTUxMiINCgkJCQl9LA0KfTsNCg0KY29uc3QgY2hhciAqbnZtZV9hdXRoX2htYWNfbmFtZSh1 bnNpZ25lZCBpbnQgaG1hY19pZCkNCnsNCglpZiAoKGhtYWNfaWQgPiBBUlJBWV9TSVpFKGhhc2hf bWFwKSkgfHwgIWhhc2hfbWFwW2htYWNfaWRdLmhtYWMpDQoJCXJldHVybiBOVUxMOw0KCXJldHVy biBoYXNoX21hcFtobWFjX2lkXS5obWFjOw0KfQ0KDQpjb25zdCBjaGFyICpudm1lX2F1dGhfZGln ZXN0X25hbWUodW5zaWduZWQgaW50IGhtYWNfaWQpDQp7DQoJaWYgKChobWFjX2lkID4gQVJSQVlf U0laRShoYXNoX21hcCkpIHx8ICFoYXNoX21hcFtobWFjX2lkXS5obWFjKQ0KCQlyZXR1cm4gTlVM TDsNCglyZXR1cm4gaGFzaF9tYXBbaG1hY19pZF0uZGlnZXN0Ow0KfQ0KDQpzaXplX3QgbnZtZV9h dXRoX2htYWNfaGFzaF9sZW4odW5zaWduZWQgaW50IGhtYWNfaWQpDQp7DQoJaWYgKChobWFjX2lk ID4gQVJSQVlfU0laRShoYXNoX21hcCkpIHx8ICFoYXNoX21hcFtobWFjX2lkXS5obWFjKQ0KCQly ZXR1cm4gMDsNCglyZXR1cm4gaGFzaF9tYXBbaG1hY19pZF0ubGVuOw0KfQ0KDQp1bnNpZ25lZCBp bnQgbnZtZV9hdXRoX2htYWNfaWQoY29uc3QgY2hhciAqaG1hY19uYW1lKQ0Kew0KCWludCBpOw0K DQoJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaGFzaF9tYXApOyBpKyspIHsNCgkJaWYgKCFo YXNoX21hcFtpXS5obWFjKQ0KCQkJY29udGludWU7DQoJCWlmICghc3RybmNtcChoYXNoX21hcFtp XS5obWFjLCBobWFjX25hbWUsDQoJCQkgICAgIHN0cmxlbihoYXNoX21hcFtpXS5obWFjKSkpDQoJ CQlyZXR1cm4gaTsNCgl9DQoJcmV0dXJuIE5WTUVfQVVUSF9IQVNIX0lOVkFMSUQ7DQp9DQoNClNl ZSBbMV0gdGhhdCBoYXMgYSB0ZXN0IHByb2dyYW0gZXhlY3V0aW9uLCBzYW1lIGNhbiBiZSBhcHBs aWVkIHRvDQpudm1lX2RoY2hhcF9oYXNoX21hcC4NCg0KPiArDQo+ICtzdHJ1Y3QgbnZtZV9kaGNo YXBfa2V5ICpudm1lX2F1dGhfZXh0cmFjdF9rZXkodW5zaWduZWQgY2hhciAqc2VjcmV0LA0KPiAr CQkJCQkgICAgICB1OCBrZXlfaGFzaCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbnZtZV9kaGNoYXBfa2V5 ICprZXk7DQo+ICsJdW5zaWduZWQgY2hhciAqcDsNCj4gKwl1MzIgY3JjOw0KPiArCWludCByZXQs IGtleV9sZW47DQo+ICsJc2l6ZV90IGFsbG9jYXRlZF9sZW4gPSBzdHJsZW4oc2VjcmV0KTsNCj4g Kw0KPiArCS8qIFNlY3JldCBtaWdodCBiZSBhZmZpeGVkIHdpdGggYSAnOicgKi8NCj4gKwlwID0g c3RycmNocihzZWNyZXQsICc6Jyk7DQo+ICsJaWYgKHApDQo+ICsJCWFsbG9jYXRlZF9sZW4gPSBw IC0gc2VjcmV0Ow0KPiArCWtleSA9IGt6YWxsb2Moc2l6ZW9mKCprZXkpLCBHRlBfS0VSTkVMKTsN Cj4gKwlpZiAoIWtleSkNCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ICsJa2V5LT5r ZXkgPSBremFsbG9jKGFsbG9jYXRlZF9sZW4sIEdGUF9LRVJORUwpOw0KPiArCWlmICgha2V5LT5r ZXkpIHsNCj4gKwkJcmV0ID0gLUVOT01FTTsNCj4gKwkJZ290byBvdXRfZnJlZV9rZXk7DQo+ICsJ fQ0KPiArDQo+ICsJa2V5X2xlbiA9IGJhc2U2NF9kZWNvZGUoc2VjcmV0LCBhbGxvY2F0ZWRfbGVu LCBrZXktPmtleSk7DQo+ICsJaWYgKGtleV9sZW4gPCAwKSB7DQo+ICsJCXByX2RlYnVnKCJiYXNl NjQga2V5IGRlY29kaW5nIGVycm9yICVkXG4iLA0KPiArCQkJIGtleV9sZW4pOw0KPiArCQlyZXQg PSBrZXlfbGVuOw0KPiArCQlnb3RvIG91dF9mcmVlX3NlY3JldDsNCj4gKwl9DQo+ICsNCj4gKwlp ZiAoa2V5X2xlbiAhPSAzNiAmJiBrZXlfbGVuICE9IDUyICYmDQo+ICsJICAgIGtleV9sZW4gIT0g NjgpIHsNCj4gKwkJcHJfZXJyKCJJbnZhbGlkIERILUhNQUMtQ0hBUCBrZXkgbGVuICVkXG4iLA0K PiArCQkgICAgICAga2V5X2xlbik7DQo+ICsJCXJldCA9IC1FSU5WQUw7DQo+ICsJCWdvdG8gb3V0 X2ZyZWVfc2VjcmV0Ow0KPiArCX0NCj4gKw0KPiArCWlmIChrZXlfaGFzaCA+IDAgJiYNCj4gKwkg ICAgKGtleV9sZW4gLSA0KSAhPSBudm1lX2F1dGhfaG1hY19oYXNoX2xlbihrZXlfaGFzaCkpIHsN Cj4gKwkJcHJfZXJyKCJJbnZhbGlkIERILUhNQUMtQ0hBUCBrZXkgbGVuICVkIGZvciAlc1xuIiwg a2V5X2xlbiwNCj4gKwkJICAgICAgIG52bWVfYXV0aF9obWFjX25hbWUoa2V5X2hhc2gpKTsNCj4g KwkJcmV0ID0gLUVJTlZBTDsNCj4gKwkJZ290byBvdXRfZnJlZV9zZWNyZXQ7DQo+ICsJfQ0KPiAr DQo+ICsJLyogVGhlIGxhc3QgZm91ciBieXRlcyBpcyB0aGUgQ1JDIGluIGxpdHRsZS1lbmRpYW4g Zm9ybWF0ICovDQo+ICsJa2V5X2xlbiAtPSA0Ow0KPiArCS8qDQo+ICsJICogVGhlIGxpbnV4IGlt cGxlbWVudGF0aW9uIGRvZXNuJ3QgZG8gcHJlLSBhbmQgcG9zdC1pbmNyZW1lbnRzLA0KPiArCSAq IHNvIHdlIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuDQo+ICsJICovDQo+ICsJY3JjID0gfmNyYzMy KH4wLCBrZXktPmtleSwga2V5X2xlbik7DQo+ICsNCj4gKwlpZiAoZ2V0X3VuYWxpZ25lZF9sZTMy KGtleS0+a2V5ICsga2V5X2xlbikgIT0gY3JjKSB7DQo+ICsJCXByX2VycigiREgtSE1BQy1DSEFQ IGtleSBjcmMgbWlzbWF0Y2ggKGtleSAlMDh4LCBjcmMgJTA4eClcbiIsDQo+ICsJCSAgICAgICBn ZXRfdW5hbGlnbmVkX2xlMzIoa2V5LT5rZXkgKyBrZXlfbGVuKSwgY3JjKTsNCj4gKwkJcmV0ID0g LUVLRVlSRUpFQ1RFRDsNCj4gKwkJZ290byBvdXRfZnJlZV9zZWNyZXQ7DQo+ICsJfQ0KPiArCWtl eS0+bGVuID0ga2V5X2xlbjsNCj4gKwlrZXktPmhhc2ggPSBrZXlfaGFzaDsNCj4gKwlyZXR1cm4g a2V5Ow0KPiArb3V0X2ZyZWVfc2VjcmV0Og0KPiArCWtmcmVlX3NlbnNpdGl2ZShrZXktPmtleSk7 DQo+ICtvdXRfZnJlZV9rZXk6DQo+ICsJa2ZyZWUoa2V5KTsNCj4gKwlyZXR1cm4gRVJSX1BUUihy ZXQpOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwobnZtZV9hdXRoX2V4dHJhY3Rfa2V5KTsN Cj4gKw0KPiArdm9pZCBudm1lX2F1dGhfZnJlZV9rZXkoc3RydWN0IG52bWVfZGhjaGFwX2tleSAq a2V5KQ0KPiArew0KPiArCWlmICgha2V5KQ0KPiArCQlyZXR1cm47DQo+ICsJa2ZyZWVfc2Vuc2l0 aXZlKGtleS0+a2V5KTsNCj4gKwlrZnJlZShrZXkpOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9H UEwobnZtZV9hdXRoX2ZyZWVfa2V5KTsNCj4gKw0KPiArdTggKm52bWVfYXV0aF90cmFuc2Zvcm1f a2V5KHN0cnVjdCBudm1lX2RoY2hhcF9rZXkgKmtleSwgY2hhciAqbnFuKQ0KPiArew0KPiArCWNv bnN0IGNoYXIgKmhtYWNfbmFtZSA9IG52bWVfYXV0aF9obWFjX25hbWUoa2V5LT5oYXNoKTsNCj4g KwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICprZXlfdGZtOw0KPiArCXN0cnVjdCBzaGFzaF9kZXNjICpz aGFzaDsNCj4gKwl1OCAqdHJhbnNmb3JtZWRfa2V5Ow0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlp ZiAoa2V5LT5oYXNoID09IDApIHsNCj4gKwkJdHJhbnNmb3JtZWRfa2V5ID0ga21lbWR1cChrZXkt PmtleSwga2V5LT5sZW4sIEdGUF9LRVJORUwpOw0KPiArCQlyZXR1cm4gdHJhbnNmb3JtZWRfa2V5 ID8gdHJhbnNmb3JtZWRfa2V5IDogRVJSX1BUUigtRU5PTUVNKTsNCj4gKwl9DQo+ICsNCj4gKwlp ZiAoIWtleSB8fCAha2V5LT5rZXkpIHsNCj4gKwkJcHJfd2FybigiTm8ga2V5IHNwZWNpZmllZFxu Iik7DQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9LRVkpOw0KPiArCX0NCj4gKwlpZiAoIWhtYWNf bmFtZSkgew0KPiArCQlwcl93YXJuKCJJbnZhbGlkIGtleSBoYXNoIGlkICVkXG4iLCBrZXktPmhh c2gpOw0KPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsNCj4gKwl9DQo+ICsNCj4gKwlrZXlf dGZtID0gY3J5cHRvX2FsbG9jX3NoYXNoKGhtYWNfbmFtZSwgMCwgMCk7DQo+ICsJaWYgKElTX0VS UihrZXlfdGZtKSkNCj4gKwkJcmV0dXJuICh1OCAqKWtleV90Zm07DQo+ICsNCj4gKwlzaGFzaCA9 IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzaGFzaF9kZXNjKSArDQo+ICsJCQljcnlwdG9fc2hhc2hf ZGVzY3NpemUoa2V5X3RmbSksDQo+ICsJCQlHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIXNoYXNoKSB7 DQo+ICsJCXJldCA9IC1FTk9NRU07DQo+ICsJCWdvdG8gb3V0X2ZyZWVfa2V5Ow0KPiArCX0NCj4g Kw0KPiArCXRyYW5zZm9ybWVkX2tleSA9IGt6YWxsb2MoY3J5cHRvX3NoYXNoX2RpZ2VzdHNpemUo a2V5X3RmbSksIEdGUF9LRVJORUwpOw0KPiArCWlmICghdHJhbnNmb3JtZWRfa2V5KSB7DQo+ICsJ CXJldCA9IC1FTk9NRU07DQo+ICsJCWdvdG8gb3V0X2ZyZWVfc2hhc2g7DQo+ICsJfQ0KPiArDQo+ ICsJc2hhc2gtPnRmbSA9IGtleV90Zm07DQo+ICsJcmV0ID0gY3J5cHRvX3NoYXNoX3NldGtleShr ZXlfdGZtLCBrZXktPmtleSwga2V5LT5sZW4pOw0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQlnb3Rv IG91dF9mcmVlX3NoYXNoOw0KPiArCXJldCA9IGNyeXB0b19zaGFzaF9pbml0KHNoYXNoKTsNCj4g KwlpZiAocmV0IDwgMCkNCj4gKwkJZ290byBvdXRfZnJlZV9zaGFzaDsNCj4gKwlyZXQgPSBjcnlw dG9fc2hhc2hfdXBkYXRlKHNoYXNoLCBucW4sIHN0cmxlbihucW4pKTsNCj4gKwlpZiAocmV0IDwg MCkNCj4gKwkJZ290byBvdXRfZnJlZV9zaGFzaDsNCj4gKwlyZXQgPSBjcnlwdG9fc2hhc2hfdXBk YXRlKHNoYXNoLCAiTlZNZS1vdmVyLUZhYnJpY3MiLCAxNyk7DQo+ICsJaWYgKHJldCA8IDApDQo+ ICsJCWdvdG8gb3V0X2ZyZWVfc2hhc2g7DQo+ICsJcmV0ID0gY3J5cHRvX3NoYXNoX2ZpbmFsKHNo YXNoLCB0cmFuc2Zvcm1lZF9rZXkpOw0KPiArb3V0X2ZyZWVfc2hhc2g6DQo+ICsJa2ZyZWUoc2hh c2gpOw0KPiArb3V0X2ZyZWVfa2V5Og0KPiArCWNyeXB0b19mcmVlX3NoYXNoKGtleV90Zm0pOw0K PiArCWlmIChyZXQgPCAwKSB7DQo+ICsJCWtmcmVlX3NlbnNpdGl2ZSh0cmFuc2Zvcm1lZF9rZXkp Ow0KPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOw0KPiArCX0NCj4gKwlyZXR1cm4gdHJhbnNmb3Jt ZWRfa2V5Ow0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwobnZtZV9hdXRoX3RyYW5zZm9ybV9r ZXkpOw0KPiArDQo+ICsjZGVmaW5lIG52bWVfYXV0aF9mbGFnc19mcm9tX3FpZChxaWQpIFwNCj4g KwkocWlkID09IDApID8gMCA6IEJMS19NUV9SRVFfTk9XQUlUIHwgQkxLX01RX1JFUV9SRVNFUlZF RA0KPiArI2RlZmluZSBudm1lX2F1dGhfcXVldWVfZnJvbV9xaWQoY3RybCwgcWlkKSBcDQo+ICsJ KHFpZCA9PSAwKSA/IChjdHJsKS0+ZmFicmljc19xIDogKGN0cmwpLT5jb25uZWN0X3ENCj4gKw0K PiArc3RhdGljIGludCBudm1lX2F1dGhfc2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBpbnQg cWlkLA0KPiArCQl2b2lkICpkYXRhLCBzaXplX3QgdGwpDQo+ICt7DQo+ICsJc3RydWN0IG52bWVf Y29tbWFuZCBjbWQgPSB7fTsNCj4gKwlibGtfbXFfcmVxX2ZsYWdzX3QgZmxhZ3MgPSBudm1lX2F1 dGhfZmxhZ3NfZnJvbV9xaWQocWlkKTsNCj4gKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG52 bWVfYXV0aF9xdWV1ZV9mcm9tX3FpZChjdHJsLCBxaWQpOw0KPiArCWludCByZXQ7DQo+ICsNCj4g KwljbWQuYXV0aF9zZW5kLm9wY29kZSA9IG52bWVfZmFicmljc19jb21tYW5kOw0KPiArCWNtZC5h dXRoX3NlbmQuZmN0eXBlID0gbnZtZV9mYWJyaWNzX3R5cGVfYXV0aF9zZW5kOw0KPiArCWNtZC5h dXRoX3NlbmQuc2VjcCA9IE5WTUVfQVVUSF9ESENIQVBfUFJPVE9DT0xfSURFTlRJRklFUjsNCj4g KwljbWQuYXV0aF9zZW5kLnNwc3AwID0gMHgwMTsNCj4gKwljbWQuYXV0aF9zZW5kLnNwc3AxID0g MHgwMTsNCj4gKwljbWQuYXV0aF9zZW5kLnRsID0gY3B1X3RvX2xlMzIodGwpOw0KPiArDQo+ICsJ cmV0ID0gX19udm1lX3N1Ym1pdF9zeW5jX2NtZChxLCAmY21kLCBOVUxMLCBkYXRhLCB0bCwgMCwN Cj4gKwkJCQkgICAgIHFpZCA9PSAwID8gTlZNRV9RSURfQU5ZIDogcWlkLA0KPiArCQkJCSAgICAg MCwgZmxhZ3MpOw0KPiArCWlmIChyZXQgPiAwKQ0KPiArCQlkZXZfd2FybihjdHJsLT5kZXZpY2Us DQo+ICsJCQkicWlkICVkIGF1dGhfc2VuZCBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHFpZCwg cmV0KTsNCj4gKwllbHNlIGlmIChyZXQgPCAwKQ0KPiArCQlkZXZfZXJyKGN0cmwtPmRldmljZSwN Cj4gKwkJCSJxaWQgJWQgYXV0aF9zZW5kIGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLCBxaWQsIHJl dCk7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBudm1lX2F1dGhf cmVjZWl2ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBpbnQgcWlkLA0KPiArCQl2b2lkICpidWYs IHNpemVfdCBhbCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbnZtZV9jb21tYW5kIGNtZCA9IHt9Ow0KPiAr CWJsa19tcV9yZXFfZmxhZ3NfdCBmbGFncyA9IG52bWVfYXV0aF9mbGFnc19mcm9tX3FpZChxaWQp Ow0KPiArCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gbnZtZV9hdXRoX3F1ZXVlX2Zyb21fcWlk KGN0cmwsIHFpZCk7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWNtZC5hdXRoX3JlY2VpdmUub3Bj b2RlID0gbnZtZV9mYWJyaWNzX2NvbW1hbmQ7DQo+ICsJY21kLmF1dGhfcmVjZWl2ZS5mY3R5cGUg PSBudm1lX2ZhYnJpY3NfdHlwZV9hdXRoX3JlY2VpdmU7DQo+ICsJY21kLmF1dGhfcmVjZWl2ZS5z ZWNwID0gTlZNRV9BVVRIX0RIQ0hBUF9QUk9UT0NPTF9JREVOVElGSUVSOw0KPiArCWNtZC5hdXRo X3JlY2VpdmUuc3BzcDAgPSAweDAxOw0KPiArCWNtZC5hdXRoX3JlY2VpdmUuc3BzcDEgPSAweDAx Ow0KPiArCWNtZC5hdXRoX3JlY2VpdmUuYWwgPSBjcHVfdG9fbGUzMihhbCk7DQo+ICsNCj4gKwly ZXQgPSBfX252bWVfc3VibWl0X3N5bmNfY21kKHEsICZjbWQsIE5VTEwsIGJ1ZiwgYWwsIDAsDQo+ ICsJCQkJICAgICBxaWQgPT0gMCA/IE5WTUVfUUlEX0FOWSA6IHFpZCwNCj4gKwkJCQkgICAgIDAs IGZsYWdzKTsNCj4gKwlpZiAocmV0ID4gMCkgew0KPiArCQlkZXZfd2FybihjdHJsLT5kZXZpY2Us DQo+ICsJCQkgInFpZCAlZCBhdXRoX3JlY3YgZmFpbGVkIHdpdGggc3RhdHVzICV4XG4iLCBxaWQs IHJldCk7DQo+ICsJCXJldCA9IC1FSU87DQo+ICsJfSBlbHNlIGlmIChyZXQgPCAwKSB7DQo+ICsJ CWRldl9lcnIoY3RybC0+ZGV2aWNlLA0KPiArCQkJInFpZCAlZCBhdXRoX3JlY3YgZmFpbGVkIHdp dGggZXJyb3IgJWRcbiIsIHFpZCwgcmV0KTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0K PiArfQ0KPiArDQoNCldoeSBub3QgdXNlIHNvbWV0aGluZyBsaWtlIHRoaXMgPyBJdCByZWR1Y2Vz IHRoZSBkdXBsaWNhdGUgY29kZSBhbmQNCm5lZWQgZm9yIG1hY3JvcyA6LQ0KDQpzdGF0aWMgaW50 IG52bWVfYXV0aF9zZW5kX3JlY3ZfY29tbW9uKGJvb2wgc2VuZCwgc3RydWN0IG52bWVfY3RybCAq Y3RybCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBxaWQsIHZv aWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikNCg0Kew0KICAgICAgICAgc3RydWN5IG52bWVfY21kIGNt ZCA9IHsgfTsNCiAgICAgICAgIGJsa19tcV9yZXFfZmxhZ3NfdCBmbGFnczsNCiAgICAgICAgIHN0 cnVjdCByZXF1ZXN0X3F1ZXVlICpxOw0KICAgICAgICAgaW50IHJldDsNCg0KICAgICAgICAgZmxh Z3MgPSBxaWQgPT0gMCA/IDAgOiBCTEtfTVFfUkVRX1JFU0VSVkVEIHwgQkxLX01RX1JFUV9OT1dB SVQ7DQogICAgICAgICBxID0gcWlkID09IDAgPyBjdHJsLT5mYWJyaWNzX3EgOiBjdHJsLT5jb25u ZWN0X3E7DQoNCiAgICAgICAgIC8qIGF1dGggc2VuZC9yZWN2IHNoYXJlIGNvbW1vbiBvZmZzZXQg Zm9yIHRoZSB2YXJpb3VzIGZpZWxkcyBpbiANCmNtZCAqLw0KICAgICAgICAgY21kLmF1dGhfc2Vu ZC5vcGNvZGUgPSBudm1lX2ZhYnJpY3NfY29tbWFuZDsNCiAgICAgICAgIGNtZC5hdXRoX3NlbmQu c2VjcCA9IE5WTUVfQVVUSF9ESENIQVBfUFJPVE9DT0xfSURFTlRJRklFUjsNCiAgICAgICAgIGNt ZC5hdXRoX3NlbmQuc3BzcDAgPSAweDAxOw0KICAgICAgICAgY21kLmF1dGhfc2VuZC5zcHNwMSA9 IDB4MDE7DQogICAgICAgICBjbWQuYXV0aF9zZW5kLmFsID0gY3B1X3RvX2xlMzIoYnVmbGVuKTsN CiAgICAgICAgIGNtZC5hdXRoX3JlY2VpdmUuZmN0eXBlID0gc2VuZCA/IG52bWVfZmFicmljc190 eXBlX2F1dGhfc2VuZCA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBudm1lX2ZhYnJpY3NfdHlwZV9hdXRoX3JlY2VpdmU7DQoNCiAgICAgICAgIHJldCA9IG52bWVf c3VibWl0X3N5bmNfY21kKHEsICZjbWQsIE5VTEwsIGJ1ZiwgYnVmbGVuLCAwLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcWlkID09IDAgPyBOVk1FX1FJRF9BTlkgOiBxaWQs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBmbGFncyk7DQogICAgICAg ICBpZiAocmV0ID4gMCkNCiAgICAgICAgICAgICAgICAgZGV2X3dhcm4oY3RybC0+ZGV2aWNlLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICJxaWQgJWQgZmN0eXBlIDB4JXggZmFpbGVkIHdpdGgg c3RhdHVzICVkXG4iLCBxaWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgY21kLmF1dGhfc2Vu ZC5mY3R5cGUsIHJldCk7DQogICAgICAgICBlbHNlIGlmIChyZXQgPCAwKQ0KICAgICAgICAgICAg ICAgICBkZXZfZXJyKGN0cmwtPmRldmljZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAicWlk ICVkIGZjdHlwZSAweCV4IGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLCBxaWQsDQogICAgICAgICAg ICAgICAgICAgICAgICAgY21kLmF1dGhfc2VuZC5mY3R5cGUsIHJldCk7DQogICAgICAgICByZXR1 cm4gcmV0Ow0KfQ0KDQoNCnN0YXRpYyBpbnQgbnZtZV9hdXRoX3NlbmQoc3RydWN0IG52bWVfY3Ry bCAqYywgaW50IHFpZCwgdm9pZCAqZGF0YSwgDQpzaXplX3QgdGwpDQp7DQogICAgICAgICByZXR1 cm4gbnZtZV9hdXRoX3NlbmRfcmVjdl9jb21tb24odHJ1ZSwgYywgcWlkLCBkYXRhLCB0bCk7DQp9 DQoNCnN0YXRpYyBpbnQgbnZtZV9hdXRoX3JlY2VpdmUoc3RydWN0IG52bWVfY3RybCAqY3RybCwg aW50IHFpZCwNCiAgICAgICAgICAgICAgICAgdm9pZCAqYnVmLCBzaXplX3QgYWwpDQp7DQogICAg ICAgICByZXR1cm4gbnZtZV9hdXRoX3NlbmRfcmVjdl9jb21tb24oZmFsc2UsIGMsIHFpZCwgZGF0 YSwgdGwpOw0KDQp9DQoNCg0KDQo+ICtzdGF0aWMgaW50IG52bWVfYXV0aF9yZWNlaXZlX3ZhbGlk YXRlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGludCBxaWQsDQo+ICsJCXN0cnVjdCBudm1mX2F1 dGhfZGhjaGFwX2ZhaWx1cmVfZGF0YSAqZGF0YSwNCj4gKwkJdTE2IHRyYW5zYWN0aW9uLCB1OCBl eHBlY3RlZF9tc2cpDQo+ICt7DQo+ICsJZGV2X2RiZyhjdHJsLT5kZXZpY2UsICIlczogcWlkICVk IGF1dGhfdHlwZSAlZCBhdXRoX2lkICV4XG4iLA0KPiArCQlfX2Z1bmNfXywgcWlkLCBkYXRhLT5h dXRoX3R5cGUsIGRhdGEtPmF1dGhfaWQpOw0KPiArDQo+ICsJaWYgKGRhdGEtPmF1dGhfdHlwZSA9 PSBOVk1FX0FVVEhfQ09NTU9OX01FU1NBR0VTICYmDQo+ICsJICAgIGRhdGEtPmF1dGhfaWQgPT0g TlZNRV9BVVRIX0RIQ0hBUF9NRVNTQUdFX0ZBSUxVUkUxKSB7DQo+ICsJCXJldHVybiBkYXRhLT5y ZXNjb2RlX2V4cDsNCj4gKwl9DQo+ICsJaWYgKGRhdGEtPmF1dGhfdHlwZSAhPSBOVk1FX0FVVEhf REhDSEFQX01FU1NBR0VTIHx8DQo+ICsJICAgIGRhdGEtPmF1dGhfaWQgIT0gZXhwZWN0ZWRfbXNn KSB7DQo+ICsJCWRldl93YXJuKGN0cmwtPmRldmljZSwNCj4gKwkJCSAicWlkICVkIGludmFsaWQg bWVzc2FnZSAlMDJ4LyUwMnhcbiIsDQo+ICsJCQkgcWlkLCBkYXRhLT5hdXRoX3R5cGUsIGRhdGEt PmF1dGhfaWQpOw0KPiArCQlyZXR1cm4gTlZNRV9BVVRIX0RIQ0hBUF9GQUlMVVJFX0lOQ09SUkVD VF9NRVNTQUdFOw0KPiArCX0NCj4gKwlpZiAobGUxNl90b19jcHUoZGF0YS0+dF9pZCkgIT0gdHJh bnNhY3Rpb24pIHsNCj4gKwkJZGV2X3dhcm4oY3RybC0+ZGV2aWNlLA0KPiArCQkJICJxaWQgJWQg aW52YWxpZCB0cmFuc2FjdGlvbiBJRCAlZFxuIiwNCj4gKwkJCSBxaWQsIGxlMTZfdG9fY3B1KGRh dGEtPnRfaWQpKTsNCj4gKwkJcmV0dXJuIE5WTUVfQVVUSF9ESENIQVBfRkFJTFVSRV9JTkNPUlJF Q1RfTUVTU0FHRTsNCj4gKwl9DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNClsuLi5dDQoNCg0K WzFdICMgY2F0ICBhLmMNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN5cy90eXBlcy5o Pg0KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8 ZmNudGwuaD4NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCiNpbmNs dWRlIDxzeXMvdWlvLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQoNCiNkZWZpbmUgQ09VTlQgKDEw KQ0KI2RlZmluZSBMRU4gKDEwMjQpDQoNCiNkZWZpbmUgQVJSQVlfU0laRShhcnIpICgoc2l6ZW9m KGFycikgLyBzaXplb2YoYXJyWzBdKSkpDQoNCi8qIERlZmluZWQgaGFzaCBmdW5jdGlvbnMgZm9y IERILUhNQUMtQ0hBUCBhdXRoZW50aWNhdGlvbiAqLw0KZW51bSB7IA0KDQogICAgICAgIE5WTUVf QVVUSF9IQVNIX1NIQTI1NiAgID0gMHgwMSwNCiAgICAgICAgTlZNRV9BVVRIX0hBU0hfU0hBMzg0 ICAgPSAweDAyLA0KICAgICAgICBOVk1FX0FVVEhfSEFTSF9TSEE1MTIgICA9IDB4MDMsDQogICAg ICAgIE5WTUVfQVVUSF9IQVNIX0lOVkFMSUQgID0gMHhmZiwNCn07DQoNCnN0YXRpYyBzdHJ1Y3Qg bnZtZV9kaGNoYXBfaGFzaF9tYXAgew0KCWludCBsZW47DQoJY29uc3QgY2hhciAqaG1hYzsNCglj b25zdCBjaGFyICpkaWdlc3Q7DQp9IGhhc2hfbWFwW10gPSB7DQoJW05WTUVfQVVUSF9IQVNIX1NI QTI1Nl0gPSB7CS5sZW4gPSAzMiwNCgkJCQkJLmhtYWMgPSAiaG1hYyhzaGEyNTYpIiwNCgkJCQkJ LmRpZ2VzdCA9ICJzaGEyNTYiDQoJCQkJfSwNCglbTlZNRV9BVVRIX0hBU0hfU0hBMzg0XSA9IHsJ LmxlbiA9IDQ4LA0KCQkJCQkuaG1hYyA9ICJobWFjKHNoYTM4NCkiLA0KCQkJCQkuZGlnZXN0ID0g InNoYTM4NCINCgkJCQl9LA0KCVtOVk1FX0FVVEhfSEFTSF9TSEE1MTJdID0gewkubGVuID0gNjQs DQoJCQkJCS5obWFjID0gImhtYWMoc2hhNTEyKSIsDQoJCQkJCS5kaWdlc3QgPSAic2hhNTEyIg0K CQkJCX0sDQp9Ow0KDQpjb25zdCBjaGFyICpudm1lX2F1dGhfaG1hY19uYW1lKHVuc2lnbmVkIGlu dCBobWFjX2lkKQ0Kew0KCWlmICgoaG1hY19pZCA+IEFSUkFZX1NJWkUoaGFzaF9tYXApKSB8fCAh aGFzaF9tYXBbaG1hY19pZF0uaG1hYykNCgkJcmV0dXJuIE5VTEw7DQoJcmV0dXJuIGhhc2hfbWFw W2htYWNfaWRdLmhtYWM7DQp9DQoNCmNvbnN0IGNoYXIgKm52bWVfYXV0aF9kaWdlc3RfbmFtZSh1 bnNpZ25lZCBpbnQgaG1hY19pZCkNCnsNCglpZiAoKGhtYWNfaWQgPiBBUlJBWV9TSVpFKGhhc2hf bWFwKSkgfHwgIWhhc2hfbWFwW2htYWNfaWRdLmhtYWMpDQoJCXJldHVybiBOVUxMOw0KCXJldHVy biBoYXNoX21hcFtobWFjX2lkXS5kaWdlc3Q7DQp9DQoNCnNpemVfdCBudm1lX2F1dGhfaG1hY19o YXNoX2xlbih1bnNpZ25lZCBpbnQgaG1hY19pZCkNCnsNCglpZiAoKGhtYWNfaWQgPiBBUlJBWV9T SVpFKGhhc2hfbWFwKSkgfHwgIWhhc2hfbWFwW2htYWNfaWRdLmhtYWMpDQoJCXJldHVybiAwOw0K CXJldHVybiBoYXNoX21hcFtobWFjX2lkXS5sZW47DQp9DQoNCnVuc2lnbmVkIGludCBudm1lX2F1 dGhfaG1hY19pZChjb25zdCBjaGFyICpobWFjX25hbWUpDQp7DQoJaW50IGk7DQoNCglmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShoYXNoX21hcCk7IGkrKykgew0KCQlpZiAoIWhhc2hfbWFwW2ld LmhtYWMpDQoJCQljb250aW51ZTsNCgkJaWYgKCFzdHJuY21wKGhhc2hfbWFwW2ldLmhtYWMsIGht YWNfbmFtZSwNCgkJCSAgICAgc3RybGVuKGhhc2hfbWFwW2ldLmhtYWMpKSkNCgkJCXJldHVybiBp Ow0KCX0NCglyZXR1cm4gTlZNRV9BVVRIX0hBU0hfSU5WQUxJRDsNCn0NCg0KaW50IG1haW4odm9p ZCkNCnsNCglwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS1cbiIpOw0KCXByaW50ZigiaG1hY19pZCA9IDB4JXMgbmFtZSAweCV4XG4i LCAiaG1hYyhzaGEyNTYpIiwNCgkJCW52bWVfYXV0aF9obWFjX2lkKCJobWFjKHNoYTI1NikiKSk7 DQoJcHJpbnRmKCJobWFjX2lkID0gMHglcyBuYW1lIDB4JXhcbiIsICJobWFjKHNoYTM4NCkiLA0K CQkJbnZtZV9hdXRoX2htYWNfaWQoImhtYWMoc2hhMzg0KSIpKTsNCglwcmludGYoImhtYWNfaWQg PSAweCVzIG5hbWUgMHgleFxuIiwgImhtYWMoc2hhNTEyKSIsDQoJCQludm1lX2F1dGhfaG1hY19p ZCgiaG1hYyhzaGE1MTIpIikpOw0KCXByaW50ZigiaG1hY19pZCA9IDB4JXMgbmFtZSAweCV4XG4i LCAiIiwNCgkJCW52bWVfYXV0aF9obWFjX2lkKCIiKSk7DQoJcHJpbnRmKCJobWFjX2lkID0gMHgl cyBuYW1lIDB4JXhcbiIsICJhc2RmYWRzZiIsDQoJCQludm1lX2F1dGhfaG1hY19pZCgiYXNkZmFk c2YiKSk7DQoNCglwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS1cbiIpOw0KCXByaW50ZigiaG1hY19pZCA9IDB4JXggbmFtZSAlc1xu IiwgTlZNRV9BVVRIX0hBU0hfU0hBMjU2LA0KCQkJbnZtZV9hdXRoX2htYWNfbmFtZShOVk1FX0FV VEhfSEFTSF9TSEEyNTYpKTsNCglwcmludGYoImhtYWNfaWQgPSAweCV4IG5hbWUgJXNcbiIsIE5W TUVfQVVUSF9IQVNIX1NIQTM4NCwNCgkJCW52bWVfYXV0aF9obWFjX25hbWUoTlZNRV9BVVRIX0hB U0hfU0hBMzg0KSk7DQoJcHJpbnRmKCJobWFjX2lkID0gMHgleCBuYW1lICVzXG4iLCBOVk1FX0FV VEhfSEFTSF9TSEE1MTIsDQoJCQludm1lX2F1dGhfaG1hY19uYW1lKE5WTUVfQVVUSF9IQVNIX1NI QTUxMikpOw0KCXByaW50ZigiaG1hY19pZCA9IDB4JXggbmFtZSAlc1xuIiwgMHgwNSwNCgkJCW52 bWVfYXV0aF9obWFjX25hbWUoMHgwNSkpOw0KCXByaW50ZigiaG1hY19pZCA9IDB4JXggbmFtZSAl c1xuIiwgMHgwZmYsDQoJCQludm1lX2F1dGhfaG1hY19uYW1lKDB4ZmYpKTsNCglwcmludGYoImht YWNfaWQgPSAweCV4IG5hbWUgJXNcbiIsIDB4MGZmMSwNCgkJCW52bWVfYXV0aF9obWFjX25hbWUo MHhmZjEpKTsNCg0KCXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7DQoJcHJpbnRmKCJobWFjX2lkID0gMHgleCBkaWdlc3Qg JXNcbiIsIE5WTUVfQVVUSF9IQVNIX1NIQTI1NiwNCgkJCW52bWVfYXV0aF9kaWdlc3RfbmFtZShO Vk1FX0FVVEhfSEFTSF9TSEEyNTYpKTsNCglwcmludGYoImhtYWNfaWQgPSAweCV4IGRpZ2VzdCAl c1xuIiwgTlZNRV9BVVRIX0hBU0hfU0hBMzg0LA0KCQkJbnZtZV9hdXRoX2RpZ2VzdF9uYW1lKE5W TUVfQVVUSF9IQVNIX1NIQTM4NCkpOw0KCXByaW50ZigiaG1hY19pZCA9IDB4JXggZGlnZXN0ICVz XG4iLCBOVk1FX0FVVEhfSEFTSF9TSEE1MTIsDQoJCQludm1lX2F1dGhfZGlnZXN0X25hbWUoTlZN RV9BVVRIX0hBU0hfU0hBNTEyKSk7DQoJcHJpbnRmKCJobWFjX2lkID0gMHgleCBkaWdlc3QgJXNc biIsIDB4MDUsDQoJCQludm1lX2F1dGhfZGlnZXN0X25hbWUoMHgwNSkpOw0KCXByaW50ZigiaG1h Y19pZCA9IDB4JXggZGlnZXN0ICVzXG4iLCAweDBmZiwNCgkJCW52bWVfYXV0aF9kaWdlc3RfbmFt ZSgweGZmKSk7DQoJcHJpbnRmKCJobWFjX2lkID0gMHgleCBkaWdlc3QgJXNcbiIsIDB4MGZmMSwN CgkJCW52bWVfYXV0aF9kaWdlc3RfbmFtZSgweGZmMSkpOw0KDQoJcHJpbnRmKCItLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsNCglwcmlu dGYoImhtYWNfaWQgPSAweCV4IGxlbiAlZFxuIiwgTlZNRV9BVVRIX0hBU0hfU0hBMjU2LA0KCQkJ bnZtZV9hdXRoX2htYWNfaGFzaF9sZW4oTlZNRV9BVVRIX0hBU0hfU0hBMjU2KSk7DQoJcHJpbnRm KCJobWFjX2lkID0gMHgleCBsZW4gJWRcbiIsIE5WTUVfQVVUSF9IQVNIX1NIQTM4NCwNCgkJCW52 bWVfYXV0aF9obWFjX2hhc2hfbGVuKE5WTUVfQVVUSF9IQVNIX1NIQTM4NCkpOw0KCXByaW50Zigi aG1hY19pZCA9IDB4JXggbGVuICVkXG4iLCBOVk1FX0FVVEhfSEFTSF9TSEE1MTIsDQoJCQludm1l X2F1dGhfaG1hY19oYXNoX2xlbihOVk1FX0FVVEhfSEFTSF9TSEE1MTIpKTsNCglwcmludGYoImht YWNfaWQgPSAweCV4IGxlbiAlZFxuIiwgMHgwNSwNCgkJCW52bWVfYXV0aF9obWFjX2hhc2hfbGVu KDB4MDUpKTsNCglwcmludGYoImhtYWNfaWQgPSAweCV4IGxlbiAlZFxuIiwgMHgwZmYsDQoJCQlu dm1lX2F1dGhfaG1hY19oYXNoX2xlbigweGZmKSk7DQoJcHJpbnRmKCJobWFjX2lkID0gMHgleCBs ZW4gJWRcbiIsIDB4MGZmMSwNCgkJCW52bWVfYXV0aF9obWFjX2hhc2hfbGVuKDB4ZmYxKSk7DQoN CiAgICAgICAgIHJldHVybiAwOw0KfQ0KbnZtZSAobnZtZS01LjE4KSAjIGdjYyBhLmMNCm52bWUg KG52bWUtNS4xOCkgIyAuL2Eub3V0DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpobWFjX2lkID0gMHhobWFjKHNoYTI1NikgbmFtZSAweDEN CmhtYWNfaWQgPSAweGhtYWMoc2hhMzg0KSBuYW1lIDB4Mg0KaG1hY19pZCA9IDB4aG1hYyhzaGE1 MTIpIG5hbWUgMHgzDQpobWFjX2lkID0gMHggbmFtZSAweGZmDQpobWFjX2lkID0gMHhhc2RmYWRz ZiBuYW1lIDB4ZmYNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmhtYWNfaWQgPSAweDEgbmFtZSBobWFjKHNoYTI1NikNCmhtYWNfaWQgPSAw eDIgbmFtZSBobWFjKHNoYTM4NCkNCmhtYWNfaWQgPSAweDMgbmFtZSBobWFjKHNoYTUxMikNCmht YWNfaWQgPSAweDUgbmFtZSAobnVsbCkNCmhtYWNfaWQgPSAweGZmIG5hbWUgKG51bGwpDQpobWFj X2lkID0gMHhmZjEgbmFtZSAobnVsbCkNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmhtYWNfaWQgPSAweDEgZGlnZXN0IHNoYTI1Ng0KaG1h Y19pZCA9IDB4MiBkaWdlc3Qgc2hhMzg0DQpobWFjX2lkID0gMHgzIGRpZ2VzdCBzaGE1MTINCmht YWNfaWQgPSAweDUgZGlnZXN0IChudWxsKQ0KaG1hY19pZCA9IDB4ZmYgZGlnZXN0IChudWxsKQ0K aG1hY19pZCA9IDB4ZmYxIGRpZ2VzdCAobnVsbCkNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmhtYWNfaWQgPSAweDEgbGVuIDMyDQpobWFj X2lkID0gMHgyIGxlbiA0OA0KaG1hY19pZCA9IDB4MyBsZW4gNjQNCmhtYWNfaWQgPSAweDUgbGVu IDANCmhtYWNfaWQgPSAweGZmIGxlbiAwDQpobWFjX2lkID0gMHhmZjEgbGVuIDANCg0KDQo=