Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp6918162imm; Tue, 24 Jul 2018 05:32:40 -0700 (PDT) X-Google-Smtp-Source: AAOMgperR1Qjxq8vaEwdsD3slkVWGON+vnE4Iqm4ghgEaZFRmg0xzYD4dZiqXPNvd6SNkf6ulw8J X-Received: by 2002:a65:52cc:: with SMTP id z12-v6mr16295999pgp.69.1532435560450; Tue, 24 Jul 2018 05:32:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532435560; cv=none; d=google.com; s=arc-20160816; b=LQeLVVu/Mx/jzqctU62u28UFBk9LCmIOjgy06FeFQH4SKgz7OMY0pxB6ECGqpOLlh8 6a5FqsE46+N2fjDhOpMqUKNmb2iweTMh/89eXFwu+GqKJPkFMJIAsGJvo6QqQ/IBsI07 8TqtiyKh6UKey0KXt2EZFU+bs5+LgEXJc4KYGWXSkaMPRKQNaKDo+V9eFOPXYWozmu+l VcxZ5JJT762Ta8mZsUcLfYdAgKs+Cxvb4wG6VTrZNd9Sv91pWybwrjig8Xqab2vmOEHq k+qiTIzH+CD9j0wejmxec0dg1UKScdflB/42fd+xA1b5QSEceOwCBT/2WxcHyCWwCpVV xg2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :spamdiagnosticmetadata:spamdiagnosticoutput:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=4zNGCkgqBqIHxz18cB2sVM2rsvi1VQsb+gGF4UBb/qQ=; b=PgWEvR9GosSsjqTynQ9NAJQMWJ4m7dSopYF1IDjMRpFmm/X5kH1ZnIFJOdCuvL2hVa wknV37+jCHHKzDjHW5gduoacuXygkzBv5WfL+3A0D1KdS0Oe0MUxRpBKmoJwP8Zp4j87 dBTdp/g3Yzm6jbOZ1CJhP+udS36WMt+YuU0tZIDmaqqiaAKEO7XnFgCWE4EFaav41Oto qTC80hKPfTJzKV9Uezzj0aqz2AUqjJnX0+CD+gUOy7ZY44VQzVc2est/pNErBhDZlJiA KfB3yovrJ0jiiZX/vK6DD2UR6ZWSs5bQZNp4LTVA8CAjJDYMbKK9ksdZMvJP/htqcGi1 13ig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=H6rgZ+x4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s24-v6si11172208plq.358.2018.07.24.05.32.24; Tue, 24 Jul 2018 05:32:40 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=H6rgZ+x4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388369AbeGXNhw (ORCPT + 99 others); Tue, 24 Jul 2018 09:37:52 -0400 Received: from mail-eopbgr80048.outbound.protection.outlook.com ([40.107.8.48]:46048 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2388172AbeGXNhw (ORCPT ); Tue, 24 Jul 2018 09:37:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4zNGCkgqBqIHxz18cB2sVM2rsvi1VQsb+gGF4UBb/qQ=; b=H6rgZ+x4onWhLfmdR6bMLQA0TsSLlDWHcZ0+YYJdXegQr4czUmReMaN27hEFVj0mw+pW1Co8MRmMfFhRSC/srVp9L+DHTw5s4jPn9jpyUuvhf3oshSqFLBZJdazT1LFSfsl8tBzHs4bVkZKO8qpt41YqEj4SjUyQMRYwswILkTw= Received: from AM5PR0401MB2660.eurprd04.prod.outlook.com (10.169.245.151) by AM5PR0401MB2532.eurprd04.prod.outlook.com (10.169.245.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.973.16; Tue, 24 Jul 2018 12:31:22 +0000 Received: from AM5PR0401MB2660.eurprd04.prod.outlook.com ([fe80::1409:d2c7:1a1d:c23f]) by AM5PR0401MB2660.eurprd04.prod.outlook.com ([fe80::1409:d2c7:1a1d:c23f%5]) with mapi id 15.20.0973.022; Tue, 24 Jul 2018 12:31:22 +0000 From: Udit Agarwal To: Mimi Zohar , "dhowells@redhat.com" , "zohar@linux.vnet.ibm.com" , "jmorris@namei.org" , "serge@hallyn.com" , "linux-integrity@vger.kernel.org" , "keyrings@vger.kernel.org" , "linux-security-module@vger.kernel.org" , "linux-kernel@vger.kernel.org" CC: Sahil Malhotra , Ruchika Gupta , Horia Geanta , Aymen Sghaier Subject: RE: [PATCH 1/2] security/keys/secure_key: Adds the secure key support based on CAAM. Thread-Topic: [PATCH 1/2] security/keys/secure_key: Adds the secure key support based on CAAM. Thread-Index: AQHUH+0bPh9PV6wYhESslN19K1K/AKSb6SGAgAHx2BA= Date: Tue, 24 Jul 2018 12:31:22 +0000 Message-ID: References: <20180720054656.29143-1-udit.agarwal@nxp.com> <1532302451.6206.22.camel@linux.ibm.com> In-Reply-To: <1532302451.6206.22.camel@linux.ibm.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=udit.agarwal@nxp.com; x-originating-ip: [14.142.187.166] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;AM5PR0401MB2532;6:8p4n09EX+KJqVAEyRbYTmqdUr2eSajyJazRHsuhVW8Pf8dNQbEmcXPRg2zcAc5YVxhtUWeSOpQbryVmU1bm8EeSNnRLq6vSuh20xXIgt9bm8HCIz6OJdmqRKIu6/TDDPnIfVlT266kHVrykTeAj+nuSwvOFNrwdJBFTSv2PH7K1QwHIyhdB+LWEyx5O+pc64bJIKFnsBwfuKBJUtghCMaohyF2YVvZjTPNuLc+c/cjTHlfeIzIF/6fCW/okzKvRuUX+liLubNhuq2pVsxDO0tf9vD7yuqTHwOgSuW5cQTvvPn0XchHPFnW3X7PihsqPdzQVGC7bz4E8xZq4776qPwzSl4Uy51s+cw9AeIDlIqsrmJdtV9wn+hhPK/ui+dbBYLDJ+9ldjwTwvuMAUDXHxaTUypG2LvjoW4ojkVhUE2owJKHslANQO7+Y/KNLD5DlM9/G1RFaCzvGGrnvT84eOFg==;5:YNrRV54cMbYxMxxyqHaQPYem781Dc4qEcE9b7yeGihwrbbJ7/RED4ngj1ivfZVAvOl2MCsLrCg6KlV34qf38SXt8iMsfE31ZvnEOyZ/x6cR1ZkhVNAqT3BT1M88GdzuvcNcXu6c5gzZTY/z9/JzEZxJXYgG9CEsUXyisxjYDzso=;7:BODwZBBQplQwxbSe04eWGIuxa6fwxE8mLHrrvxObU33wbfG7k5h9viG6gJShvgmjG2y0wrzLF7nVrzNtzingA5EoqKQ0oFO1/72ao4amlWEBHhjx/HPsOEwCMipVBvet6Nxq9bNZfNzHsY7Kudjp0JjpXHeLBxOmxGBrPjwQfA4X2fUhRMlY+3ZWMaqbLOpflpsdCpI5qu7N9k2nhSQNv+vZW19NnLFfIXNvih6K7tJv0DhmkNGVmgkrtNXQburK x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: 53def9f5-5c3b-4ecc-bd92-08d5f1615d85 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989117)(5600073)(711020)(4618075)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(2017052603328)(7153060)(7193020);SRVR:AM5PR0401MB2532; x-ms-traffictypediagnostic: AM5PR0401MB2532: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(192374486261705)(9452136761055)(185117386973197); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(10201501046)(3231311)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123562045)(20161123558120)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011)(7699016);SRVR:AM5PR0401MB2532;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0401MB2532; x-forefront-prvs: 0743E8D0A6 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(136003)(366004)(39860400002)(376002)(346002)(396003)(199004)(189003)(11346002)(316002)(106356001)(74316002)(7736002)(478600001)(105586002)(81166006)(54906003)(14454004)(7696005)(305945005)(102836004)(26005)(66066001)(6506007)(76176011)(110136005)(81156014)(8676002)(53936002)(186003)(5250100002)(6246003)(15650500001)(68736007)(229853002)(16200700003)(25786009)(8936002)(33656002)(2906002)(55016002)(3846002)(9686003)(6116002)(4326008)(2900100001)(6436002)(14444005)(446003)(97736004)(476003)(5660300001)(486006)(2501003)(44832011)(2201001)(86362001)(575784001)(53946003)(256004)(99286004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:AM5PR0401MB2532;H:AM5PR0401MB2660.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: zwT6xiLNdrCtPbHp98uR+Vc22Dvaq5sxrwbHn2/ApRsm5opu7o8xHTzWJEciHSjZRwhzzs/EE9VoU7r9gCc4pE9eYAtBIijCUzguQJLF5JHjkcQVRjLuuvWoJkfn9WwHWqZroJxFAFXjAHxXGIdm5ED1gyIK5kVcIT8gu46NvfxVdfpU9fbWKZNnYHHC9W4Lfl629SuAprTU34lYAIPysf0Dcy4QIZBzrHc/BqNaIUFQ8IjUvZ/F92/a5llc23GvUE5iRGAxvY2lZ7LnvuMAr9aLlz6MYxNm/HWb0QAIrIbxaJJ7ckF3Nx9TA45l/uYFEAIL2B5HaiDmmGXm9Vqd5NxGsM/fGnIOr0BHX4I8HHs= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 53def9f5-5c3b-4ecc-bd92-08d5f1615d85 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Jul 2018 12:31:22.4398 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0401MB2532 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiBPbiBGcmksIDIwMTgtMDctMjAgYXQgMTE6MTYgKzA1MzAsIFVkaXQgQWdhcndhbCB3cm90ZToN Cj4gPiBTZWN1cmUga2V5cyBhcmUgZGVyaWV2ZWQgdXNpbmcgQ0FBTSBjcnlwdG8gYmxvY2suDQo+ ID4NCj4gPiBTZWN1cmUga2V5cyBkZXJpZXZlZCBhcmUgdGhlIHJhbmRvbSBudW1iZXIgc3ltbWV0 cmljIGtleXMgZnJvbSBDQUFNLg0KPiA+IEJsb2JzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGtleSBh cmUgZm9ybWVkIHVzaW5nIENBQU0uIFVzZXIgc3BhY2Ugd2lsbA0KPiA+IG9ubHkgYmUgYWJsZSB0 byB2aWV3IHRoZSBibG9iIG9mIHRoZSBrZXkuDQo+IA0KPiBUaGUgdGVybSAidHJ1c3RlZCBrZXlz IiBjb21lcyBmcm9tIHRoZSB1c2FnZSBvZiB0aGUgVHJ1c3RlZCBQbGF0Zm9ybSBNb2R1bGUNCj4g KFRQTSkuIMKgVGhlIHRlcm0gInRydXN0ZWQiIG5vdyBhbHNvIHJlZmVycyB0byBrZXlyaW5ncywg d2hpY2ggaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBhDQo+IFRQTS4NCj4gDQo+IFdoYXQgaXMgdGhl IGNvcnJlbGF0aW9uIGJldHdlZW4gdGhlIHRlcm0gInNlY3VyZSBrZXlzIiBhbmQgQ0FBTT8gwqBB cmUgInNlY3VyZSBrZXlzIiwgYXMNCj4gZGVmaW5lZCBpbiB0aGlzIHBhdGNoLCBsaW1pdGVkIHRv IGEgc3BlY2lmaWMgSFcgY3J5cHRvIGRldmljZT8NCj4gDQo+IE1pbWkNCj4gDQoNClllcyB0aGUg c2VjdXJlIGtleXMgYW5kIENBQU0gYXJlIGNvcnJlbGF0ZWQuIFNlY3VyZSBrZXlzIGRlcGVuZHMg b24gTlhQIENBQU0gY3J5cHRvIEhXDQphY2NlbGVyYXRvci4gU2VjdXJlIGtleSBpcyBhIHJhbmRv bSBkYXRhIG9mIGxlbmd0aCBYIChwYXNzZWQgdXNpbmcga2V5Y3RsIGNvbW1hbmQpICYgZGVyaXZl ZA0KdXNpbmcgQ0FBTS4gQmxvYiBvZiB0aGlzIGRhdGEgaXMgYWxzbyBjcmVhdGVkIHVzaW5nIENB QU0uIE9ubHkgYmxvYiBpcyB2aXNpYmxlIHRvIHVzZXIgc3BhY2UuDQoNClJlZ2FyZHMsDQpVZGl0 IA0KDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBVZGl0IEFnYXJ3YWwgPHVkaXQuYWdhcndhbEBu eHAuY29tPg0KPiA+IFJldmlld2VkLWJ5OiBTYWhpbCBNYWxob3RyYSA8c2FoaWwubWFsaG90cmFA bnhwLmNvbT4NCj4gPiAtLS0NCj4gPiAgRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9rZXlzL3NlY3Vy ZS1rZXkucnN0IHwgIDY3ICsrKw0KPiA+ICBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgMTEgKw0KPiA+ICBpbmNsdWRlL2tleXMvc2VjdXJlLXR5cGUuaCAgICAg ICAgICAgICAgICAgfCAgMzMgKysNCj4gPiAgc2VjdXJpdHkva2V5cy9LY29uZmlnICAgICAgICAg ICAgICAgICAgICAgIHwgIDExICsNCj4gPiAgc2VjdXJpdHkva2V5cy9NYWtlZmlsZSAgICAgICAg ICAgICAgICAgICAgIHwgICAzICsNCj4gPiAgc2VjdXJpdHkva2V5cy9zZWN1cmVfa2V5LmMgICAg ICAgICAgICAgICAgIHwgMzM5ICsrKysrKysrKysrKw0KPiA+ICBzZWN1cml0eS9rZXlzL3NlY3Vy ZWtleV9kZXNjLmMgICAgICAgICAgICAgfCA2MDYgKysrKysrKysrKysrKysrKysrKysrDQo+ID4g IHNlY3VyaXR5L2tleXMvc2VjdXJla2V5X2Rlc2MuaCAgICAgICAgICAgICB8IDE0MSArKysrKw0K PiA+ICA4IGZpbGVzIGNoYW5nZWQsIDEyMTEgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9rZXlzL3NlY3VyZS1rZXkucnN0DQo+ID4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2tleXMvc2VjdXJlLXR5cGUuaCAgY3JlYXRlIG1v ZGUgMTAwNjQ0DQo+ID4gc2VjdXJpdHkva2V5cy9zZWN1cmVfa2V5LmMgIGNyZWF0ZSBtb2RlIDEw MDY0NA0KPiA+IHNlY3VyaXR5L2tleXMvc2VjdXJla2V5X2Rlc2MuYyAgY3JlYXRlIG1vZGUgMTAw NjQ0DQo+ID4gc2VjdXJpdHkva2V5cy9zZWN1cmVrZXlfZGVzYy5oDQo+ID4NCj4gPiBkaWZmIC0t Z2l0IGEvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9rZXlzL3NlY3VyZS1rZXkucnN0DQo+ID4gYi9E b2N1bWVudGF0aW9uL3NlY3VyaXR5L2tleXMvc2VjdXJlLWtleS5yc3QNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMGZjMzM2N2IwMGY4DQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKyBiL0RvY3VtZW50YXRpb24vc2VjdXJpdHkva2V5cy9zZWN1cmUt a2V5LnJzdA0KPiA+IEBAIC0wLDAgKzEsNjcgQEANCj4gPiArPT09PT09PT09PQ0KPiA+ICtTZWN1 cmUgS2V5DQo+ID4gKz09PT09PT09PT0NCj4gPiArDQo+ID4gK1NlY3VyZSBrZXkgaXMgdGhlIG5l dyB0eXBlIGFkZGVkIHRvIGtlcm5lbCBrZXkgcmluZyBzZXJ2aWNlLg0KPiA+ICtTZWN1cmUga2V5 IGlzIGEgc3ltbWV0cmljIHR5cGUga2V5IG9mIG1pbmltdW0gbGVuZ3RoIDMyIGJ5dGVzIGFuZA0K PiA+ICt3aXRoIG1heGltdW0gcG9zc2libGUgbGVuZ3RoIHRvIGJlIDEyOCBieXRlcy4gSXQgaXMg cHJvZHVjZWQgaW4NCj4gPiAra2VybmVsIHVzaW5nIHRoZSBDQUFNIGNyeXB0byBlbmdpbmUuIFVz ZXJzcGFjZSBjYW4gb25seSBzZWUgdGhlIGJsb2INCj4gPiArZm9yIHRoZSBjb3JyZXNwb25kaW5n IGtleS4gQWxsIHRoZSBibG9icyBhcmUgZGlzcGxheWVkIG9yIGxvYWRlZCBpbg0KPiA+ICtoZXgg YXNjaWkuDQo+ID4gKw0KPiA+ICtTZWN1cmUga2V5IGNhbiBvbmx5IGJlIGNyZWF0ZWQgb24gcGxh dGZvcm1zIHdoaWNoIHN1cHBvcnRzIENBQU0NCj4gPiAraGFyZHdhcmUgYmxvY2suIFNlY3VyZSBr ZXkgY2FuIGFsc28gYmUgdXNlZCBhcyBhIG1hc3RlciBrZXkgdG8gY3JlYXRlDQo+ID4gK3RoZSBl bmNyeXB0ZWQga2V5cyBhbG9uZyB3aXRoIHRoZSBleGlzdGluZyBrZXkgdHlwZXMgaW4ga2VybmVs Lg0KPiA+ICsNCj4gPiArU2VjdXJlIGtleSB1c2VzIENBQU0gaGFyZHdhcmUgdG8gZ2VuZXJhdGUg dGhlIGtleSBhbmQgYmxvYmlmeSBpdHMNCj4gPiArY29udGVudCBmb3IgdXNlcnNwYWNlLiBHZW5l cmF0ZWQgYmxvYnMgYXJlIHRpZWQgdXAgd2l0aCB0aGUgaGFyZHdhcmUNCj4gPiArc2VjcmV0IGtl eSBzdG9yZWQgaW4gQ0FBTSwgaGVuY2UgdGhlIHNhbWUgYmxvYiB3aWxsIG5vdCBiZSBhYmxlIHRv DQo+ID4gK2RlLWJsb2JpZnkgd2l0aCB0aGUgZGlmZmVyZW50IHNlY3JldCBrZXkgb24gYW5vdGhl ciBtYWNoaW5lLg0KPiA+ICsNCj4gPiArVXNhZ2U6Og0KPiA+ICsNCj4gPiArCWtleWN0bCBhZGQg c2VjdXJlIDxuYW1lPiAibmV3IDxrZXlsZW4+IiA8cmluZz4NCj4gPiArCWtleWN0bCBsb2FkIHNl Y3VyZSA8bmFtZT4gImxvYWQgPGhleF9ibG9iPiIgPHJpbmc+DQo+ID4gKwlrZXljdGwgcHJpbnQg PGtleV9pZD4NCj4gPiArDQo+ID4gKyJrZXljdGwgYWRkIHNlY3VyZSIgb3B0aW9uIHdpbGwgY3Jl YXRlIHRoZSByYW5kb20gZGF0YSBvZiB0aGUNCj4gPiArc3BlY2lmaWVkIGtleSBsZW4gdXNpbmcg Q0FBTSBhbmQgc3RvcmUgaXQgYXMgYSBrZXkgaW4ga2VybmVsLg0KPiA+ICtLZXkgY29udGVudHMg d2lsbCBiZSBkaXNwbGF5ZWQgYXMgYmxvYnMgdG8gdGhlIHVzZXIgaW4gaGV4IGFzY2lpLg0KPiA+ ICtVc2VyIGNhbiBpbnB1dCBrZXkgbGVuIGZyb20gMzIgYnl0ZXMgdG8gMTI4IGJ5dGVzLg0KPiA+ ICsNCj4gPiArImtleWN0bCBsb2FkIHNlY3VyZSIgb3B0aW9uIHdpbGwgbG9hZCB0aGUgYmxvYiBj b250ZW50cy4gSW4ga2VybmVsLA0KPiA+ICtrZXkgd2lsbCBiZSBkZWlydmVkIHVzaW5nIGlucHV0 IGJsb2IgYW5kIENBQU0sIGFsb25nIHdpdGggdGhlIHNlY3JldA0KPiA+ICtrZXkgc3RvcmVkIGlu IENBQU0uDQo+ID4gKw0KPiA+ICsia2V5Y3RsIHByaW50IiB3aWxsIHJldHVybiB0aGUgaGV4IHN0 cmluZyBvZiB0aGUgYmxvYiBjb3JyZXNwb25kaW5nDQo+ID4gK3RvIGtleV9pZC4gUmV0dXJuZWQg YmxvYiB3aWxsIGJlIG9mIGtleV9sZW4gKyA0OCBieXRlcy4gRXh0cmEgNDgNCj4gPiArYnl0ZXMg YXJlIHRoZSBoZWFkZXIgYnl0ZXMgYWRkZWQgYnkgdGhlIENBQU0uDQo+ID4gKw0KPiA+ICtFeGFt cGxlIG9mIHNlY3VyZSBrZXkgdXNhZ2U6Og0KPiA+ICsNCj4gPiArMS4gQ3JlYXRlIHRoZSBzZWN1 cmUga2V5IHdpdGggbmFtZSBrbWstbWFzdGVyIG9mIGxlbmd0aCAzMiBieXRlczo6DQo+ID4gKw0K PiA+ICsJJCBrZXljdGwgYWRkIHNlY3VyZSBrbWstbWFzdGVyICJuZXcgMzIiIEB1DQo+ID4gKwk0 NjAwMTkyOA0KPiA+ICsNCj4gPiArCSRrZXljdGwgc2hvdw0KPiA+ICsJU2Vzc2lvbiBLZXlyaW5n DQo+ID4gKwkxMDMwNzgzNjI2IC0tYWxzd3J2ICAgICAgMCA2NTUzNCAga2V5cmluZzogX3VpZF9z ZXMuMA0KPiA+ICsJIDY5NTkyNzc0NSAtLWFsc3dydiAgICAgIDAgNjU1MzQgICBcXyBrZXlyaW5n OiBfdWlkLjANCj4gPiArCSAgNDYwMDE5MjggLS1hbHMtcnYgICAgICAwICAgICAwICAgICAgIFxf IHNlY3VyZToga21rLW1hc3Rlcg0KPiA+ICsNCj4gPiArMi4gUHJpbnQgdGhlIGJsb2IgY29udGVu dHMgZm9yIHRoZSBrbWstbWFzdGVyIGtleTo6DQo+ID4gKw0KPiA+ICsJJCBrZXljdGwgcHJpbnQg NDYwMDE5MjgNCj4gPiArCWQ5NzQzNDQ1YjY0MGYzZDU5YzE2NzBkZGRjMGJjOWMyDQo+ID4gKwkz NGZjOWFhYjdkZDA1Yzk2NWU2MTIwMDI1MDEyZjAyOWINCj4gPiArCTA3ZmFhNDc3NmM0ZjZlZDAy ODk5ZTM1YTEzNTUzMWU5YQ0KPiA+ICsJNmU1YzJiNTExMzJmOWQ1YWVmMjhmNjg3MzhlNjU4Mjk2 DQo+ID4gKwkzZmU1ODMxNzdjZmU1MGQyNTQyYjY1OWExMzAzOQ0KPiA+ICsNCj4gPiArCSQga2V5 Y3RsIHBpcGUgNDYwMDE5MjggPiBzZWN1cmVfa2V5LmJsb2INCj4gPiArDQo+ID4gKzMuIExvYWQg dGhlIGJsb2IgaW4gdGhlIHVzZXIga2V5IHJpbmc6Og0KPiA+ICsNCj4gPiArCSQga2V5Y3RsIGxv YWQgc2VjdXJlIGttay1tYXN0ZXIgImxvYWQgJ2NhdCBzZWN1cmVfa2V5LmJsb2InIiBAdQ0KPiA+ IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTIGluZGV4DQo+ID4gOWZkNWU4 ODA4MjA4Li42NTRiZTJlZTRiMGEgMTAwNjQ0DQo+ID4gLS0tIGEvTUFJTlRBSU5FUlMNCj4gPiAr KysgYi9NQUlOVEFJTkVSUw0KPiA+IEBAIC03OTM5LDYgKzc5MzksMTcgQEAgRjoJaW5jbHVkZS9r ZXlzL3RydXN0ZWQtdHlwZS5oDQo+ID4gIEY6CXNlY3VyaXR5L2tleXMvdHJ1c3RlZC5jDQo+ID4g IEY6CXNlY3VyaXR5L2tleXMvdHJ1c3RlZC5oDQo+ID4NCj4gPiArS0VZUy1TRUNVUkUNCj4gPiAr TToJVWRpdCBBZ2Fyd2FsIDx1ZGl0LmFnYXJ3YWxAbnhwLmNvbT4NCj4gPiArUjoJU2FoaWwgTWFs aG90cmEgPHNhaGlsLm1hbGhvdHJhQG54cC5jb20+DQo+ID4gK0w6CWxpbnV4LXNlY3VyaXR5LW1v ZHVsZUB2Z2VyLmtlcm5lbC5vcmcNCj4gPiArTDoJa2V5cmluZ3NAdmdlci5rZXJuZWwub3JnDQo+ ID4gK1M6CVN1cHBvcnRlZA0KPiA+ICtGOglpbmNsdWRlL2tleXMvc2VjdXJlLXR5cGUuaA0KPiA+ ICtGOglzZWN1cml0eS9rZXlzL3NlY3VyZV9rZXkuYw0KPiA+ICtGOglzZWN1cml0eS9rZXlzL3Nl Y3VyZWtleV9kZXNjLmMNCj4gPiArRjoJc2VjdXJpdHkva2V5cy9zZWN1cmVrZXlfZGVzYy5oDQo+ ID4gKw0KPiA+ICBLRVlTL0tFWVJJTkdTOg0KPiA+ICBNOglEYXZpZCBIb3dlbGxzIDxkaG93ZWxs c0ByZWRoYXQuY29tPg0KPiA+ICBMOglrZXlyaW5nc0B2Z2VyLmtlcm5lbC5vcmcNCj4gPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9rZXlzL3NlY3VyZS10eXBlLmggYi9pbmNsdWRlL2tleXMvc2VjdXJl LXR5cGUuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAwMC4uNWI3 YTVmMTQ0ZTQxDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2luY2x1ZGUva2V5cy9zZWN1 cmUtdHlwZS5oDQo+ID4gQEAgLTAsMCArMSwzMyBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCAqLw0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTgg TlhQLg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgX0tFWVNfU0VDVVJF X1RZUEVfSA0KPiA+ICsjZGVmaW5lIF9LRVlTX1NFQ1VSRV9UWVBFX0gNCj4gPiArDQo+ID4gKyNp bmNsdWRlIDxsaW51eC9rZXkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+DQo+ ID4gKw0KPiA+ICsvKiBNaW5pbXVtIGtleSBzaXplIHRvIGJlIHVzZWQgaXMgMzIgYnl0ZXMgYW5k IG1heGltdW0ga2V5IHNpemUgZml4ZWQNCj4gPiArICogaXMgMTI4IGJ5dGVzLg0KPiA+ICsgKiBC bG9iIHNpemUgdG8gYmUga2VwdCBpcyBNYXhpbXVtIGtleSBzaXplICsgYmxvYiBoZWFkZXIgYWRk ZWQgYnkgQ0FBTS4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE1JTl9LRVlfU0laRSAg ICAgICAgICAgICAgICAgICAgMzINCj4gPiArI2RlZmluZSBNQVhfS0VZX1NJWkUgICAgICAgICAg ICAgICAgICAgIDEyOA0KPiA+ICsjZGVmaW5lIEJMT0JfSEVBREVSX1NJWkUJCTQ4DQo+ID4gKw0K PiA+ICsjZGVmaW5lIE1BWF9CTE9CX1NJWkUgICAgICAgICAgICAgICAgICAgKE1BWF9LRVlfU0la RSArIEJMT0JfSEVBREVSX1NJWkUpDQo+ID4gKw0KPiA+ICtzdHJ1Y3Qgc2VjdXJlX2tleV9wYXls b2FkIHsNCj4gPiArCXN0cnVjdCByY3VfaGVhZCByY3U7DQo+ID4gKwl1bnNpZ25lZCBpbnQga2V5 X2xlbjsNCj4gPiArCXVuc2lnbmVkIGludCBibG9iX2xlbjsNCj4gPiArCXVuc2lnbmVkIGNoYXIg a2V5W01BWF9LRVlfU0laRSArIDFdOw0KPiA+ICsJdW5zaWduZWQgY2hhciBibG9iW01BWF9CTE9C X1NJWkVdOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArZXh0ZXJuIHN0cnVjdCBrZXlfdHlwZSBrZXlf dHlwZV9zZWN1cmU7ICNlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL0tjb25m aWcgYi9zZWN1cml0eS9rZXlzL0tjb25maWcgaW5kZXgNCj4gPiA2NDYyZTY2NTRjY2YuLjdlYjEz OGI1YTU0ZiAxMDA2NDQNCj4gPiAtLS0gYS9zZWN1cml0eS9rZXlzL0tjb25maWcNCj4gPiArKysg Yi9zZWN1cml0eS9rZXlzL0tjb25maWcNCj4gPiBAQCAtNzEsNiArNzEsMTcgQEAgY29uZmlnIFRS VVNURURfS0VZUw0KPiA+DQo+ID4gIAkgIElmIHlvdSBhcmUgdW5zdXJlIGFzIHRvIHdoZXRoZXIg dGhpcyBpcyByZXF1aXJlZCwgYW5zd2VyIE4uDQo+ID4NCj4gPiArY29uZmlnIFNFQ1VSRV9LRVlT DQo+ID4gKwl0cmlzdGF0ZSAiU0VDVVJFX0tFWVMiDQo+ID4gKwlkZXBlbmRzIG9uIEtFWVMgJiYg Q1JZUFRPX0RFVl9GU0xfQ0FBTSAmJg0KPiBDUllQVE9fREVWX0ZTTF9DQUFNX0pSDQo+ID4gKwlo ZWxwDQo+ID4gKwkgIFRoaXMgb3B0aW9uIHByb3ZpZGUgc3VwcG9ydCBmb3IgY3JlYXRpbmcgc2Vj dXJlLXR5cGUga2V5IGFuZCBibG9icw0KPiA+ICsJICBpbiBrZXJuZWwuIFNlY3VyZSBrZXlzIGFy ZSByYW5kb20gbnVtYmVyIHN5bW1ldHJpYyBrZXlzIGdlbmVyYXRlZA0KPiA+ICsJICBmcm9tIENB QU0uIFRoZSBDQUFNIGNyZWF0ZXMgdGhlIGJsb2JzIGZvciB0aGUgcmFuZG9tIGtleS4NCj4gPiAr CSAgVXNlcnNwYWNlIHdpbGwgb25seSBiZSBhYmxlIHRvIHNlZSB0aGUgYmxvYi4NCj4gPiArDQo+ ID4gKwkgIElmIHlvdSBhcmUgdW5zdXJlIGFzIHRvIHdoZXRoZXIgdGhpcyBpcyByZXF1aXJlZCwg YW5zd2VyIE4uDQo+ID4gKw0KPiA+ICBjb25maWcgRU5DUllQVEVEX0tFWVMNCj4gPiAgCXRyaXN0 YXRlICJFTkNSWVBURUQgS0VZUyINCj4gPiAgCWRlcGVuZHMgb24gS0VZUw0KPiA+IGRpZmYgLS1n aXQgYS9zZWN1cml0eS9rZXlzL01ha2VmaWxlIGIvc2VjdXJpdHkva2V5cy9NYWtlZmlsZSBpbmRl eA0KPiA+IGVmMTU4MWIzMzdhMy4uNjA2YmE0ZWZiOWU2IDEwMDY0NA0KPiA+IC0tLSBhL3NlY3Vy aXR5L2tleXMvTWFrZWZpbGUNCj4gPiArKysgYi9zZWN1cml0eS9rZXlzL01ha2VmaWxlDQo+ID4g QEAgLTI4LDQgKzI4LDcgQEAgb2JqLSQoQ09ORklHX0tFWV9ESF9PUEVSQVRJT05TKSArPSBkaC5v ICAjDQo+ID4gIG9iai0kKENPTkZJR19CSUdfS0VZUykgKz0gYmlnX2tleS5vDQo+ID4gIG9iai0k KENPTkZJR19UUlVTVEVEX0tFWVMpICs9IHRydXN0ZWQubw0KPiA+ICtjY2ZsYWdzLSQoQ09ORklH X1NFQ1VSRV9LRVlTKSArPSAtSSQob2JqKS8uLi8uLi9kcml2ZXJzL2NyeXB0by9jYWFtLw0KPiA+ ICtvYmotJChDT05GSUdfU0VDVVJFX0tFWVMpICs9IHNlY3VyZWtleV9kZXNjLm8NCj4gPiArb2Jq LSQoQ09ORklHX1NFQ1VSRV9LRVlTKSArPSBzZWN1cmVfa2V5Lm8NCj4gPiAgb2JqLSQoQ09ORklH X0VOQ1JZUFRFRF9LRVlTKSArPSBlbmNyeXB0ZWQta2V5cy8gZGlmZiAtLWdpdA0KPiA+IGEvc2Vj dXJpdHkva2V5cy9zZWN1cmVfa2V5LmMgYi9zZWN1cml0eS9rZXlzL3NlY3VyZV9rZXkuYyBuZXcg ZmlsZQ0KPiA+IG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAwMC4uZWM4YWQ0Mzk0NTQ5DQo+ ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL3NlY3VyaXR5L2tleXMvc2VjdXJlX2tleS5jDQo+ ID4gQEAgLTAsMCArMSwzMzkgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjANCj4gPiArLyogQ29weXJpZ2h0IChDKSAyMDE4IE5YUA0KPiA+ICsgKiBTZWN1cmUga2V5 IGlzIGdlbmVyYXRlZCB1c2luZyBOWFAgQ0FBTSBoYXJkd2FyZSBibG9jay4gQ0FBTQ0KPiA+ICtn ZW5lcmF0ZXMgdGhlDQo+ID4gKyAqIHJhbmRvbSBudW1iZXIgKHVzZWQgYXMgYSBrZXkpIGFuZCBj cmVhdGVzIGl0cyBibG9iIGZvciB0aGUgdXNlci4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5j bHVkZSA8bGludXgvc2xhYi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+DQo+ID4g KyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2tleS10eXBl Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPg0KPiA+ICsjaW5jbHVkZSA8a2V5 cy9zZWN1cmUtdHlwZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPg0KPiA+ ICsNCj4gPiArI2luY2x1ZGUgInNlY3VyZWtleV9kZXNjLmgiDQo+ID4gKw0KPiA+ICtzdGF0aWMg Y29uc3QgY2hhciBobWFjX2FsZ1tdID0gImhtYWMoc2hhMSkiOyBzdGF0aWMgY29uc3QgY2hhcg0K PiA+ICtoYXNoX2FsZ1tdID0gInNoYTEiOw0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBjcnlw dG9fc2hhc2ggKmhhc2hhbGc7DQo+ID4gK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX3NoYXNoICpobWFj YWxnOw0KPiA+ICsNCj4gPiArZW51bSB7DQo+ID4gKwllcnJvciA9IC0xLA0KPiA+ICsJbmV3X2tl eSwNCj4gPiArCWxvYWRfYmxvYiwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBt YXRjaF90YWJsZV90IGtleV90b2tlbnMgPSB7DQo+ID4gKwl7bmV3X2tleSwgIm5ldyJ9LA0KPiA+ ICsJe2xvYWRfYmxvYiwgImxvYWQifSwNCj4gPiArCXtlcnJvciwgTlVMTH0NCj4gPiArfTsNCj4g PiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3Qgc2VjdXJlX2tleV9wYXlsb2FkICpzZWN1cmVfcGF5bG9h ZF9hbGxvYyhzdHJ1Y3Qga2V5DQo+ID4gKyprZXkpIHsNCj4gPiArCXN0cnVjdCBzZWN1cmVfa2V5 X3BheWxvYWQgKnNlY19rZXkgPSBOVUxMOw0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ ICsJcmV0ID0ga2V5X3BheWxvYWRfcmVzZXJ2ZShrZXksIHNpemVvZigqc2VjX2tleSkpOw0KPiA+ ICsJaWYgKHJldCA8IDApDQo+ID4gKwkJZ290byBvdXQ7DQo+ID4gKw0KPiA+ICsJc2VjX2tleSA9 IGt6YWxsb2Moc2l6ZW9mKCpzZWNfa2V5KSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAoIXNlY19r ZXkpDQo+ID4gKwkJZ290byBvdXQ7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKwlyZXR1cm4gc2Vj X2tleTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogcGFyc2VfaW5wdXRkYXRhIC0g cGFyc2UgdGhlIGtleWN0bCBpbnB1dCBkYXRhIGFuZCBmaWxsIGluIHRoZQ0KPiA+ICsgKgkJICAg ICBwYXlsb2FkIHN0cnVjdHVyZSBmb3Iga2V5IG9yIGl0cyBibG9iLg0KPiA+ICsgKiBwYXJhbVtp bl06IGRhdGEgcG9pbnRlciB0byB0aGUgZGF0YSB0byBiZSBwYXJzZWQgZm9yIGNyZWF0aW5nIGtl eS4NCj4gPiArICogcGFyYW1baW5dOiBwIHBvaW50ZXIgdG8gc2VjdXJlIGtleSBwYXlsb2FkIHN0 cnVjdHVyZSB0byBmaWxsDQo+ID4gK3BhcnNlZCBkYXRhDQo+ID4gKyAqIE9uIHN1Y2Nlc3MgcmV0 dXJucyAwLCBvdGhlcndpc2UgLUVJTlZBTC4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcGFy c2VfaW5wdXRkYXRhKGNoYXIgKmRhdGEsIHN0cnVjdCBzZWN1cmVfa2V5X3BheWxvYWQgKnApDQo+ ID4gK3sNCj4gPiArCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsNCj4gPiArCWxvbmcg a2V5bGVuID0gMDsNCj4gPiArCWludCByZXQgPSAtRUlOVkFMOw0KPiA+ICsJaW50IGtleV9jbWQg PSAtRUlOVkFMOw0KPiA+ICsJY2hhciAqYyA9IE5VTEw7DQo+ID4gKw0KPiA+ICsJYyA9IHN0cnNl cCgmZGF0YSwgIiBcdCIpOw0KPiA+ICsJaWYgKCFjKSB7DQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsN Cj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBHZXQgdGhlIGtleWN0 bCBjb21tYW5kIGkuZS4gbmV3X2tleSBvciBsb2FkX2Jsb2IgZXRjICovDQo+ID4gKwlrZXlfY21k ID0gbWF0Y2hfdG9rZW4oYywga2V5X3Rva2VucywgYXJncyk7DQo+ID4gKw0KPiA+ICsJc3dpdGNo IChrZXlfY21kKSB7DQo+ID4gKwljYXNlIG5ld19rZXk6DQo+ID4gKwkJLyogZmlyc3QgYXJndW1l bnQgaXMga2V5IHNpemUgKi8NCj4gPiArCQljID0gc3Ryc2VwKCZkYXRhLCAiIFx0Iik7DQo+ID4g KwkJaWYgKCFjKSB7DQo+ID4gKwkJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwkJCWdvdG8gb3V0Ow0K PiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJcmV0ID0ga3N0cnRvbChjLCAxMCwgJmtleWxlbik7DQo+ ID4gKwkJaWYgKHJldCA8IDAgfHwga2V5bGVuIDwgTUlOX0tFWV9TSVpFIHx8DQo+ID4gKwkJCQkJ CWtleWxlbiA+IE1BWF9LRVlfU0laRSkgew0KPiA+ICsJCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJ CQlnb3RvIG91dDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXAtPmtleV9sZW4gPSBrZXlsZW47 DQo+ID4gKwkJcmV0ID0gbmV3X2tleTsNCj4gPiArDQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNl IGxvYWRfYmxvYjoNCj4gPiArCQkvKiBmaXJzdCBhcmd1bWVudCBpcyBibG9iIGRhdGEgZm9yIENB QU0qLw0KPiA+ICsJCWMgPSBzdHJzZXAoJmRhdGEsICIgXHQiKTsNCj4gPiArCQlpZiAoIWMpIHsN Cj4gPiArCQkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQkJZ290byBvdXQ7DQo+ID4gKwkJfQ0KPiA+ ICsNCj4gPiArCQkvKiBCbG9iX2xlbiA9IE5vIG9mIGNoYXJhY3RlcnMgaW4gYmxvYi8yICovDQo+ ID4gKwkJcC0+YmxvYl9sZW4gPSBzdHJsZW4oYykgLyAyOw0KPiA+ICsJCWlmIChwLT5ibG9iX2xl biA+IE1BWF9CTE9CX1NJWkUpIHsNCj4gPiArCQkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQkJZ290 byBvdXQ7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlyZXQgPSBoZXgyYmluKHAtPmJsb2IsIGMs IHAtPmJsb2JfbGVuKTsNCj4gPiArCQlpZiAocmV0IDwgMCkgew0KPiA+ICsJCQlyZXQgPSAtRUlO VkFMOw0KPiA+ICsJCQlnb3RvIG91dDsNCj4gPiArCQl9DQo+ID4gKwkJcmV0ID0gbG9hZF9ibG9i Ow0KPiA+ICsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgZXJyb3I6DQo+ID4gKwkJcmV0ID0g LUVJTlZBTDsNCj4gPiArCQlicmVhazsNCj4gPiArCX0NCj4gPiArDQo+ID4gK291dDoNCj4gPiAr CXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIHNlY3VyZV9pbnN0 YW50aWF0ZSAtIGNyZWF0ZSBhIG5ldyBzZWN1cmUgdHlwZSBrZXkuDQo+ID4gKyAqIFN1cHBvcnRz IHRoZSBvcGVyYXRpb24gdG8gZ2VuZXJhdGUgYSBuZXcga2V5LiBBIHJhbmRvbSBudW1iZXINCj4g PiArICogaXMgZ2VuZXJhdGVkIGZyb20gQ0FBTSBhcyBrZXkgZGF0YSBhbmQgdGhlIGNvcnJlc3Bv bmRpbmcgcmVkIGJsb2INCj4gPiArICogaXMgZm9ybWVkIGFuZCBzdG9yZWQgYXMga2V5X2Jsb2Iu DQo+ID4gKyAqIEFsc28gc3VwcG9ydHMgdGhlIG9wZXJhdGlvbiB0byBsb2FkIHRoZSBibG9iIGFu ZCBrZXkgaXMgZGVyaXZlZA0KPiA+ICt1c2luZw0KPiA+ICsgKiB0aGF0IGJsb2IgZnJvbSBDQUFN Lg0KPiA+ICsgKiBPbiBzdWNjZXNzLCByZXR1cm4gMC4gT3RoZXJ3aXNlIHJldHVybiBlcnJuby4N Cj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgc2VjdXJlX2luc3RhbnRpYXRlKHN0cnVjdCBrZXkg KmtleSwNCj4gPiArCQlzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKSB7DQo+ID4g KwlzdHJ1Y3Qgc2VjdXJlX2tleV9wYXlsb2FkICpwYXlsb2FkID0gTlVMTDsNCj4gPiArCXNpemVf dCBkYXRhbGVuID0gcHJlcC0+ZGF0YWxlbjsNCj4gPiArCWNoYXIgKmRhdGEgPSBOVUxMOw0KPiA+ ICsJaW50IGtleV9jbWQgPSAwOw0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKwllbnVtIHNrX3Jl cV90eXBlIHNrX29wX3R5cGU7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMOw0KPiA+ ICsNCj4gPiArCWlmIChkYXRhbGVuIDw9IDAgfHwgZGF0YWxlbiA+IDMyNzY3IHx8ICFwcmVwLT5k YXRhKSB7DQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlkYXRhID0ga21hbGxvYyhkYXRhbGVuICsgMSwgR0ZQX0tFUk5FTCk7DQo+ ID4gKwlpZiAoIWRhdGEpIHsNCj4gPiArCQlyZXQgPSAtRU5PTUVNOw0KPiA+ICsJCWdvdG8gb3V0 Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW1lbWNweShkYXRhLCBwcmVwLT5kYXRhLCBkYXRhbGVu KTsNCj4gPiArCWRhdGFbZGF0YWxlbl0gPSAnXDAnOw0KPiA+ICsNCj4gPiArCXBheWxvYWQgPSBz ZWN1cmVfcGF5bG9hZF9hbGxvYyhrZXkpOw0KPiA+ICsJaWYgKCFwYXlsb2FkKSB7DQo+ID4gKwkJ cmV0ID0gLUVOT01FTTsNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkv KiBBbGxvY2F0ZSBjYWFtIGpvYiByaW5nIGZvciBvcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkIGZy b20gQ0FBTSAqLw0KPiA+ICsJZGV2ID0gY2FhbV9qcl9hbGxvYygpOw0KPiA+ICsJaWYgKCFkZXYp IHsNCj4gPiArCQlwcl9pbmZvKCJjYWFtX2pyX2FsbG9jIGZhaWxlZFxuIik7DQo+ID4gKwkJcmV0 ID0gLUVOT0RFVjsNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlrZXlf Y21kID0gcGFyc2VfaW5wdXRkYXRhKGRhdGEsIHBheWxvYWQpOw0KPiA+ICsJaWYgKGtleV9jbWQg PCAwKSB7DQo+ID4gKwkJcmV0ID0ga2V5X2NtZDsNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlzd2l0Y2ggKGtleV9jbWQpIHsNCj4gPiArCWNhc2UgbG9hZF9ibG9iOg0K PiA+ICsJCS8qDQo+ID4gKwkJICogUmVkIGJsb2IgZGVjcnlwdGlvbiB0byBiZSBkb25lIGZvciBs b2FkIG9wZXJhdGlvbg0KPiA+ICsJCSAqIHRvIGRlcml2ZSB0aGUga2V5Lg0KPiA+ICsJCSAqLw0K PiA+ICsJCXNrX29wX3R5cGUgPSBza19yZWRfYmxvYl9kZWM7DQo+ID4gKwkJcmV0ID0ga2V5X2Rl YmxvYihwYXlsb2FkLCBza19vcF90eXBlLCBkZXYpOw0KPiA+ICsJCWlmIChyZXQgIT0gMCkgew0K PiA+ICsJCQlwcl9pbmZvKCJzZWN1cmVfa2V5OiBrZXlfYmxvYiBkZWNhcCBmYWlsICglZClcbiIs IHJldCk7DQo+ID4gKwkJCWdvdG8gb3V0Ow0KPiA+ICsJCX0NCj4gPiArCQlicmVhazsNCj4gPiAr CWNhc2UgbmV3X2tleToNCj4gPiArCQkvKiBHZXQgUmFuZG9tIG51bWJlciBmcm9tIGNhYW0gb2Yg dGhlIHNwZWNpZmllZCBsZW5ndGggKi8NCj4gPiArCQlza19vcF90eXBlID0gc2tfZ2V0X3JhbmRv bTsNCj4gPiArCQlyZXQgPSBjYWFtX2dldF9yYW5kb20ocGF5bG9hZCwgc2tfb3BfdHlwZSwgZGV2 KTsNCj4gPiArCQlpZiAocmV0ICE9IDApIHsNCj4gPiArCQkJcHJfaW5mbygic2VjdXJlX2tleTog Z2V0X3JhbmRvbSBmYWlsICglZClcbiIsIHJldCk7DQo+ID4gKwkJCWdvdG8gb3V0Ow0KPiA+ICsJ CX0NCj4gPiArDQo+ID4gKwkJLyogR2VuZXJhdGUgcmVkIGJsb2Igb2Yga2V5IHJhbmRvbSBieXRl cyB3aXRoIENBQU0gKi8NCj4gPiArCQlza19vcF90eXBlID0gc2tfcmVkX2Jsb2JfZW5jOw0KPiA+ ICsJCXJldCA9IGtleV9ibG9iKHBheWxvYWQsIHNrX29wX3R5cGUsIGRldik7DQo+ID4gKwkJaWYg KHJldCAhPSAwKSB7DQo+ID4gKwkJCXByX2luZm8oInNlY3VyZV9rZXk6IGtleV9ibG9iIGVuY2Fw IGZhaWwgKCVkKVxuIiwgcmV0KTsNCj4gPiArCQkJZ290byBvdXQ7DQo+ID4gKwkJfQ0KPiA+ICsJ CWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJCWdv dG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICtvdXQ6DQo+ID4gKwlpZiAoZGF0YSkNCj4gPiArCQlremZy ZWUoZGF0YSk7DQo+ID4gKwlpZiAoZGV2KQ0KPiA+ICsJCWNhYW1fanJfZnJlZShkZXYpOw0KPiA+ ICsNCj4gPiArCWlmICghcmV0KQ0KPiA+ICsJCXJjdV9hc3NpZ25fa2V5cG9pbnRlcihrZXksIHBh eWxvYWQpOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCWt6ZnJlZShwYXlsb2FkKTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBzZWN1cmVfcmVh ZCAtIGNvcHkgdGhlICBibG9iIGRhdGEgdG8gdXNlcnNwYWNlIGluIGhleC4NCj4gPiArICogcGFy YW1baW5dOiBrZXkgcG9pbnRlciB0byBrZXkgc3RydWN0DQo+ID4gKyAqIHBhcmFtW2luXTogYnVm ZmVyIHBvaW50ZXIgdG8gdXNlciBkYXRhIGZvciBjcmVhdGluZyBrZXkNCj4gPiArICogcGFyYW1b aW5dOiBidWZsZW4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyDQo+ID4gKyAqIE9uIHN1Y2Nl c3MsIHJldHVybiB0byB1c2Vyc3BhY2UgdGhlIHNlY3VyZSBrZXkgZGF0YSBzaXplLg0KPiA+ICsg Ki8NCj4gPiArc3RhdGljIGxvbmcgc2VjdXJlX3JlYWQoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBj aGFyIF9fdXNlciAqYnVmZmVyLA0KPiA+ICsJCQkgc2l6ZV90IGJ1ZmxlbikNCj4gPiArew0KPiA+ ICsJY29uc3Qgc3RydWN0IHNlY3VyZV9rZXlfcGF5bG9hZCAqcCA9IE5VTEw7DQo+ID4gKwljaGFy ICphc2NpaV9idWY7DQo+ID4gKwljaGFyICpidWZwOw0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ ICsJcCA9IGRlcmVmZXJlbmNlX2tleV9sb2NrZWQoa2V5KTsNCj4gPiArCWlmICghcCkNCj4gPiAr CQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlpZiAoYnVmZmVyICYmIGJ1ZmxlbiA+PSAy ICogcC0+YmxvYl9sZW4pIHsNCj4gPiArCQlhc2NpaV9idWYgPSBrbWFsbG9jKDIgKiBwLT5ibG9i X2xlbiwgR0ZQX0tFUk5FTCk7DQo+ID4gKwkJaWYgKCFhc2NpaV9idWYpDQo+ID4gKwkJCXJldHVy biAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCQlidWZwID0gYXNjaWlfYnVmOw0KPiA+ICsJCWZvciAo aSA9IDA7IGkgPCBwLT5ibG9iX2xlbjsgaSsrKQ0KPiA+ICsJCQlidWZwID0gaGV4X2J5dGVfcGFj ayhidWZwLCBwLT5ibG9iW2ldKTsNCj4gPiArCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgYXNj aWlfYnVmLCAyICogcC0+YmxvYl9sZW4pICE9IDApIHsNCj4gPiArCQkJa3pmcmVlKGFzY2lpX2J1 Zik7DQo+ID4gKwkJCXJldHVybiAtRUZBVUxUOw0KPiA+ICsJCX0NCj4gPiArCQlremZyZWUoYXNj aWlfYnVmKTsNCj4gPiArCX0NCj4gPiArCXJldHVybiAyICogcC0+YmxvYl9sZW47DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIHNlY3VyZV9kZXN0cm95IC0gY2xlYXIgYW5kIGZyZWUg dGhlIGtleSdzIHBheWxvYWQgICovIHN0YXRpYyB2b2lkDQo+ID4gK3NlY3VyZV9kZXN0cm95KHN0 cnVjdCBrZXkgKmtleSkgew0KPiA+ICsJa3pmcmVlKGtleS0+cGF5bG9hZC5kYXRhWzBdKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RydWN0IGtleV90eXBlIGtleV90eXBlX3NlY3VyZSA9IHsNCj4g PiArCS5uYW1lID0gInNlY3VyZSIsDQo+ID4gKwkuaW5zdGFudGlhdGUgPSBzZWN1cmVfaW5zdGFu dGlhdGUsDQo+ID4gKwkuZGVzdHJveSA9IHNlY3VyZV9kZXN0cm95LA0KPiA+ICsJLnJlYWQgPSBz ZWN1cmVfcmVhZCwNCj4gPiArfTsNCj4gPiArRVhQT1JUX1NZTUJPTF9HUEwoa2V5X3R5cGVfc2Vj dXJlKTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHNlY3VyZV9zaGFzaF9yZWxlYXNlKHZvaWQp IHsNCj4gPiArCWlmIChoYXNoYWxnKQ0KPiA+ICsJCWNyeXB0b19mcmVlX3NoYXNoKGhhc2hhbGcp Ow0KPiA+ICsJaWYgKGhtYWNhbGcpDQo+ID4gKwkJY3J5cHRvX2ZyZWVfc2hhc2goaG1hY2FsZyk7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgX19pbml0IHNlY3VyZV9zaGFzaF9hbGxv Yyh2b2lkKSB7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWhtYWNhbGcgPSBjcnlwdG9f YWxsb2Nfc2hhc2goaG1hY19hbGcsIDAsIENSWVBUT19BTEdfQVNZTkMpOw0KPiA+ICsJaWYgKElT X0VSUihobWFjYWxnKSkgew0KPiA+ICsJCXByX2luZm8oInNlY3VyZV9rZXk6IGNvdWxkIG5vdCBh bGxvY2F0ZSBjcnlwdG8gJXNcbiIsDQo+ID4gKwkJCQlobWFjX2FsZyk7DQo+ID4gKwkJcmV0dXJu IFBUUl9FUlIoaG1hY2FsZyk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaGFzaGFsZyA9IGNyeXB0 b19hbGxvY19zaGFzaChoYXNoX2FsZywgMCwgQ1JZUFRPX0FMR19BU1lOQyk7DQo+ID4gKwlpZiAo SVNfRVJSKGhhc2hhbGcpKSB7DQo+ID4gKwkJcHJfaW5mbygic2VjdXJlX2tleTogY291bGQgbm90 IGFsbG9jYXRlIGNyeXB0byAlc1xuIiwNCj4gPiArCQkJCWhhc2hfYWxnKTsNCj4gPiArCQlyZXQg PSBQVFJfRVJSKGhhc2hhbGcpOw0KPiA+ICsJCWdvdG8gaGFzaGFsZ19mYWlsOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICsNCj4gPiAraGFzaGFsZ19mYWlsOg0KPiA+ICsJ Y3J5cHRvX2ZyZWVfc2hhc2goaG1hY2FsZyk7DQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IF9faW5pdCBpbml0X3NlY3VyZV9rZXkodm9pZCkgew0KPiA+ ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlyZXQgPSBzZWN1cmVfc2hhc2hfYWxsb2MoKTsNCj4g PiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0g cmVnaXN0ZXJfa2V5X3R5cGUoJmtleV90eXBlX3NlY3VyZSk7DQo+ID4gKwlpZiAocmV0IDwgMCkN Cj4gPiArCQlzZWN1cmVfc2hhc2hfcmVsZWFzZSgpOw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfc2VjdXJlX2tleSh2b2lk KSB7DQo+ID4gKwlzZWN1cmVfc2hhc2hfcmVsZWFzZSgpOw0KPiA+ICsJdW5yZWdpc3Rlcl9rZXlf dHlwZSgma2V5X3R5cGVfc2VjdXJlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArbGF0ZV9pbml0Y2Fs bChpbml0X3NlY3VyZV9rZXkpOw0KPiA+ICttb2R1bGVfZXhpdChjbGVhbnVwX3NlY3VyZV9rZXkp Ow0KPiA+ICsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KPiA+IGRpZmYgLS1naXQgYS9z ZWN1cml0eS9rZXlzL3NlY3VyZWtleV9kZXNjLmMNCj4gPiBiL3NlY3VyaXR5L2tleXMvc2VjdXJl a2V5X2Rlc2MuYyBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleA0KPiA+IDAwMDAwMDAwMDAwMC4u YTRmYTgxMWE1NzUzDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL3NlY3VyaXR5L2tleXMv c2VjdXJla2V5X2Rlc2MuYw0KPiA+IEBAIC0wLDAgKzEsNjA2IEBADQo+ID4gKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ID4gKy8qDQo+ID4gKyAqIENvcHlyaWdodCAoQykg MjAxOCBOWFANCj4gPiArICoNCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8a2V5cy9z ZWN1cmUtdHlwZS5oPg0KPiA+ICsjaW5jbHVkZSAic2VjdXJla2V5X2Rlc2MuaCINCj4gPiArDQo+ ID4gKy8qIGtleSBtb2RpZmllciBmb3IgYmxvYiBlbmNhcHN1bGF0aW9uICYgZGVjYXBzdWxhdGlv biBkZXNjcmlwdG9yICovDQo+ID4gK3U4IGtleV9tb2RpZmllcltdID0gIlNFQ1VSRV9LRVkiOw0K PiA+ICt1MzIga2V5X21vZGlmaWVyX2xlbiA9IDEwOw0KPiA+ICsNCj4gPiArdm9pZCBjYWFtX3Nr X3JuZ19kZXNjKHN0cnVjdCBza19yZXEgKnNrcmVxLCBzdHJ1Y3Qgc2tfZGVzYyAqc2tkZXNjKSB7 DQo+ID4gKwlzdHJ1Y3Qgc2tfZmV0Y2hfcm5kX2RhdGEgKmZldGNoX3JuZF9kYXRhID0gTlVMTDsN Cj4gPiArCXN0cnVjdCByYW5kb21fZGVzYyAqcm5kX2Rlc2MgPSBOVUxMOw0KPiA+ICsJc2l6ZV90 IGxlbiA9IDA7DQo+ID4gKwl1MzIgKmRlc2MgPSBza3JlcS0+aHdkZXNjOw0KPiA+ICsNCj4gPiAr CWluaXRfam9iX2Rlc2MoZGVzYywgMCk7DQo+ID4gKw0KPiA+ICsJZmV0Y2hfcm5kX2RhdGEgPSAm c2tyZXEtPnJlcV91LnNrX2ZldGNoX3JuZF9kYXRhOw0KPiA+ICsJcm5kX2Rlc2MgPSAmc2tkZXNj LT5kbWFfdS5yYW5kb21fZGVzY3A7DQo+ID4gKwlsZW4gPSBmZXRjaF9ybmRfZGF0YS0+a2V5X2xl bjsNCj4gPiArDQo+ID4gKwkvKiBjb21tYW5kIDB4ODI1MDAwMDAgKi8NCj4gPiArCWFwcGVuZF9j bWQoZGVzYywgQ01EX09QRVJBVElPTiB8IE9QX1RZUEVfQ0xBU1MxX0FMRyB8DQo+ID4gKwkJCU9Q X0FMR19BTEdTRUxfUk5HKTsNCj4gPiArCS8qIGNvbW1hbmQgMHg2MDM0MDAwMCB8IGxlbiAqLw0K PiA+ICsJYXBwZW5kX2NtZChkZXNjLCBDTURfRklGT19TVE9SRSB8IEZJRk9TVF9UWVBFX1JOR1NU T1JFIHwgbGVuKTsNCj4gPiArCWFwcGVuZF9wdHIoZGVzYywgcm5kX2Rlc2MtPnJuZF9kYXRhKTsg fQ0KPiA+ICsNCj4gPiArdm9pZCBjYWFtX3NrX3JlZGJsb2JfZW5jYXBfZGVzYyhzdHJ1Y3Qgc2tf cmVxICpza3JlcSwgc3RydWN0IHNrX2Rlc2MNCj4gPiArKnNrZGVzYykgew0KPiA+ICsJc3RydWN0 IHJlZGJsb2JfZW5jYXBfZGVzYyAqcmVkX2Jsb2JfZGVzYyA9DQo+ID4gKwkJCQkJJnNrZGVzYy0+ ZG1hX3UucmVkYmxvYl9lbmNhcGRlc2M7DQo+ID4gKwlzdHJ1Y3Qgc2tfcmVkX2Jsb2JfZW5jYXAg KnJlZF9ibG9iX3JlcSA9DQo+ID4gKwkJCQkJJnNrcmVxLT5yZXFfdS5za19yZWRfYmxvYl9lbmNh cDsNCj4gPiArCXUzMiAqZGVzYyA9IHNrcmVxLT5od2Rlc2M7DQo+ID4gKw0KPiA+ICsJaW5pdF9q b2JfZGVzYyhkZXNjLCAwKTsNCj4gPiArDQo+ID4gKwkvKiBMb2FkIGNsYXNzIDIga2V5IHdpdGgg a2V5IG1vZGlmaWVyLiAqLw0KPiA+ICsJYXBwZW5kX2tleV9hc19pbW0oZGVzYywga2V5X21vZGlm aWVyLCBrZXlfbW9kaWZpZXJfbGVuLA0KPiA+ICsJCQkgIGtleV9tb2RpZmllcl9sZW4sIENMQVNT XzIgfCBLRVlfREVTVF9DTEFTU19SRUcpOw0KPiA+ICsNCj4gPiArCS8qIFNFUSBJTiBQVFIgQ29t bWFuZC4gKi8NCj4gPiArCWFwcGVuZF9zZXFfaW5fcHRyKGRlc2MsIHJlZF9ibG9iX2Rlc2MtPmlu X2RhdGEsIHJlZF9ibG9iX3JlcS0+ZGF0YV9zeiwNCj4gPiArCQkJICAwKTsNCj4gPiArDQo+ID4g KwkvKiBTRVEgT1VUIFBUUiBDb21tYW5kLiAqLw0KPiA+ICsJYXBwZW5kX3NlcV9vdXRfcHRyKGRl c2MsIHJlZF9ibG9iX2Rlc2MtPnJlZGJsb2IsDQo+ID4gKwkJCSAgIHJlZF9ibG9iX3JlcS0+cmVk YmxvYl9zeiwgMCk7DQo+ID4gKw0KPiA+ICsJLyogUmVkQmxvYiBlbmNhcHN1bGF0aW9uIFBST1RP Q09MIENvbW1hbmQuICovDQo+ID4gKwlhcHBlbmRfb3BlcmF0aW9uKGRlc2MsIE9QX1RZUEVfRU5D QVBfUFJPVE9DT0wgfCBPUF9QQ0xJRF9CTE9CKTsgfQ0KPiA+ICsNCj4gPiArLyogdm9pZCBjYWFt X3NrX3JlZGJsb2JfZGVjYXBfZGVzYyhzdHJ1Y3Qgc2tfcmVxICpza3JlcSwgc3RydWN0DQo+ID4g K3NrX2Rlc2MgKnNrZGVzYykNCj4gPiArICogYnJpZWYgQ0FBTSBEZXNjcmlwdG9yIGNyZWF0b3Ig ZnJvbSByZWRibG9iIHRvIHBsYWluZGF0YS4NCj4gPiArICogcGFyYW1baW5dIHNrcmVxIFBvaW50 ZXIgdG8gc2VjdXJlIGtleSByZXF1ZXN0IHN0cnVjdHVyZQ0KPiA+ICsgKiBwYXJhbVtpbl0gc2tk ZXNjIFBvaW50ZXIgdG8gc2VjdXJlIGtleSBkZXNjcmlwdG9yIHN0cnVjdHVyZSAgKi8NCj4gPiAr dm9pZCBjYWFtX3NrX3JlZGJsb2JfZGVjYXBfZGVzYyhzdHJ1Y3Qgc2tfcmVxICpza3JlcSwgc3Ry dWN0IHNrX2Rlc2MNCj4gPiArKnNrZGVzYykgew0KPiA+ICsJc3RydWN0IHJlZGJsb2JfZGVjYXBf ZGVzYyAqcmVkX2Jsb2JfZGVzYyA9DQo+ID4gKwkJCQkJJnNrZGVzYy0+ZG1hX3UucmVkYmxvYl9k ZWNhcGRlc2M7DQo+ID4gKwlzdHJ1Y3Qgc2tfcmVkX2Jsb2JfZGVjYXAgKnJlZF9ibG9iX3JlcSA9 DQo+ID4gKwkJCQkJJnNrcmVxLT5yZXFfdS5za19yZWRfYmxvYl9kZWNhcDsNCj4gPiArCXUzMiAq ZGVzYyA9IHNrcmVxLT5od2Rlc2M7DQo+ID4gKw0KPiA+ICsJaW5pdF9qb2JfZGVzYyhkZXNjLCAw KTsNCj4gPiArDQo+ID4gKwkvKiBMb2FkIGNsYXNzIDIga2V5IHdpdGgga2V5IG1vZGlmaWVyLiAq Lw0KPiA+ICsJYXBwZW5kX2tleV9hc19pbW0oZGVzYywga2V5X21vZGlmaWVyLCBrZXlfbW9kaWZp ZXJfbGVuLA0KPiA+ICsJCQkgIGtleV9tb2RpZmllcl9sZW4sIENMQVNTXzIgfCBLRVlfREVTVF9D TEFTU19SRUcpOw0KPiA+ICsNCj4gPiArCS8qIFNFUSBJTiBQVFIgQ29tbWFuZC4gKi8NCj4gPiAr CWFwcGVuZF9zZXFfaW5fcHRyKGRlc2MsIHJlZF9ibG9iX2Rlc2MtPnJlZGJsb2IsDQo+ID4gKwkJ CSAgcmVkX2Jsb2JfcmVxLT5yZWRibG9iX3N6LCAwKTsNCj4gPiArDQo+ID4gKwkvKiBTRVEgT1VU IFBUUiBDb21tYW5kLiAqLw0KPiA+ICsJYXBwZW5kX3NlcV9vdXRfcHRyKGRlc2MsIHJlZF9ibG9i X2Rlc2MtPm91dF9kYXRhLA0KPiA+ICsJCQkgICByZWRfYmxvYl9yZXEtPmRhdGFfc3osIDApOw0K PiA+ICsNCj4gPiArCS8qIFJlZEJsb2IgZGVjYXBzdWxhdGlvbiBQUk9UT0NPTCBDb21tYW5kLiAq Lw0KPiA+ICsJYXBwZW5kX29wZXJhdGlvbihkZXNjLCBPUF9UWVBFX0RFQ0FQX1BST1RPQ09MIHwg T1BfUENMSURfQkxPQik7IH0NCj4gPiArDQo+ID4gKy8qIGludCBjYWFtX3NrX2dldF9yYW5kb21f bWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNrX3JlcSAqcmVxLA0KPiA+ICsgKgkJCSAg ICAgIHN0cnVjdCBza19kZXNjICpza2Rlc2MpDQo+ID4gKyAqIGJyaWVmIERNQSBtYXAgdGhlIGJ1 ZmZlciB2aXJ0dWFsIHBvaW50ZXJzIHRvIHBoeXNpY2FsIGFkZHJlc3MuDQo+ID4gKyAqIHBhcmFt W2luXSBkZXYgUG9pbnRlciB0byBqb2IgcmluZyBkZXZpY2Ugc3RydWN0dXJlDQo+ID4gKyAqIHBh cmFtW2luXSByZXEgUG9pbnRlciB0byBzZWN1cmUga2V5IHJlcXVlc3Qgc3RydWN0dXJlDQo+ID4g KyAqIHBhcmFtW2luXSBza2Rlc2MgUG9pbnRlciB0byBzZWN1cmUga2V5IGRlc2NyaXB0b3Igc3Ry dWN0dXJlDQo+ID4gKyAqIHJldHVybiAwIG9uIHN1Y2Nlc3MsIGVycm9yIHZhbHVlIG90aGVyd2lz ZS4NCj4gPiArICovDQo+ID4gK2ludCBjYWFtX3NrX2dldF9yYW5kb21fbWFwKHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IHNrX3JlcSAqcmVxLA0KPiA+ICsJCQkgICBzdHJ1Y3Qgc2tfZGVzYyAq c2tkZXNjKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qgc2tfZmV0Y2hfcm5kX2RhdGEgKmZldGNoX3Ju ZF9kYXRhOw0KPiA+ICsJc3RydWN0IHJhbmRvbV9kZXNjICpybmRfZGVzYzsNCj4gPiArDQo+ID4g KwlmZXRjaF9ybmRfZGF0YSA9ICZyZXEtPnJlcV91LnNrX2ZldGNoX3JuZF9kYXRhOw0KPiA+ICsJ cm5kX2Rlc2MgPSAmc2tkZXNjLT5kbWFfdS5yYW5kb21fZGVzY3A7DQo+ID4gKw0KPiA+ICsJcm5k X2Rlc2MtPnJuZF9kYXRhID0gZG1hX21hcF9zaW5nbGUoZGV2LCBmZXRjaF9ybmRfZGF0YS0+ZGF0 YSwNCj4gPiArCQkJCWZldGNoX3JuZF9kYXRhLT5rZXlfbGVuLCBETUFfRlJPTV9ERVZJQ0UpOw0K PiA+ICsNCj4gPiArCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIHJuZF9kZXNjLT5ybmRfZGF0 YSkpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBtYXAgbWVtb3J5XG4iKTsNCj4g PiArCQlnb3RvIHNrX3JhbmRvbV9tYXBfZmFpbDsNCj4gPiArCX0NCj4gPiArCXJldHVybiAwOw0K PiA+ICsNCj4gPiArc2tfcmFuZG9tX21hcF9mYWlsOg0KPiA+ICsJcmV0dXJuIC1FTk9NRU07DQo+ ID4gK30NCj4gPiArDQo+ID4gKy8qIGludCBjYWFtX3NrX3JlZGJsb2JfZW5jYXBfbWFwKHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IHNrX3JlcSAqcmVxLA0KPiA+ICsgKgkJCQkJc3RydWN0IHNr X2Rlc2MgKnNrZGVzYykNCj4gPiArICogYnJpZWYgRE1BIG1hcCB0aGUgYnVmZmVyIHZpcnR1YWwg cG9pbnRlcnMgdG8gcGh5c2ljYWwgYWRkcmVzcy4NCj4gPiArICogcGFyYW1baW5dIGRldiBQb2lu dGVyIHRvIGpvYiByaW5nIGRldmljZSBzdHJ1Y3R1cmUNCj4gPiArICogcGFyYW1baW5dIHJlcSBQ b2ludGVyIHRvIHNlY3VyZSBrZXkgcmVxdWVzdCBzdHJ1Y3R1cmUNCj4gPiArICogcGFyYW1baW5d IHNrZGVzYyBQb2ludGVyIHRvIHNlY3VyZSBrZXkgZGVzY3JpcHRvciBzdHJ1Y3R1cmUNCj4gPiAr ICogcmV0dXJuIDAgb24gc3VjY2VzcywgZXJyb3IgdmFsdWUgb3RoZXJ3aXNlLg0KPiA+ICsgKi8N Cj4gPiAraW50IGNhYW1fc2tfcmVkYmxvYl9lbmNhcF9tYXAoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3Qgc2tfcmVxICpyZXEsDQo+ID4gKwkJCSAgICAgIHN0cnVjdCBza19kZXNjICpza2Rlc2Mp DQo+ID4gK3sNCj4gPiArCXN0cnVjdCBza19yZWRfYmxvYl9lbmNhcCAqcmVkX2Jsb2JfZW5jYXA7 DQo+ID4gKwlzdHJ1Y3QgcmVkYmxvYl9lbmNhcF9kZXNjICpyZWRfYmxvYl9kZXNjOw0KPiA+ICsN Cj4gPiArCXJlZF9ibG9iX2VuY2FwID0gJnJlcS0+cmVxX3Uuc2tfcmVkX2Jsb2JfZW5jYXA7DQo+ ID4gKwlyZWRfYmxvYl9kZXNjID0gJnNrZGVzYy0+ZG1hX3UucmVkYmxvYl9lbmNhcGRlc2M7DQo+ ID4gKw0KPiA+ICsJcmVkX2Jsb2JfZGVzYy0+aW5fZGF0YSA9IGRtYV9tYXBfc2luZ2xlKGRldiwg cmVkX2Jsb2JfZW5jYXAtPmRhdGEsDQo+ID4gKwkJCQkJcmVkX2Jsb2JfZW5jYXAtPmRhdGFfc3os IERNQV9UT19ERVZJQ0UpOw0KPiA+ICsJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgcmVkX2Js b2JfZGVzYy0+aW5fZGF0YSkpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBtYXAg bWVtb3J5XG4iKTsNCj4gPiArCQlnb3RvIHNrX2RhdGFfZmFpbDsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlyZWRfYmxvYl9kZXNjLT5yZWRibG9iID0gZG1hX21hcF9zaW5nbGUoZGV2LCByZWRfYmxv Yl9lbmNhcC0+cmVkYmxvYiwNCj4gPiArCQkJCXJlZF9ibG9iX2VuY2FwLT5yZWRibG9iX3N6LCBE TUFfRlJPTV9ERVZJQ0UpOw0KPiA+ICsJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgcmVkX2Js b2JfZGVzYy0+cmVkYmxvYikpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBtYXAg bWVtb3J5XG4iKTsNCj4gPiArCQlnb3RvIHNrX3JlZGJsb2JfZmFpbDsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArDQo+ID4gK3NrX3JlZGJsb2JfZmFpbDoNCj4gPiArCWRt YV91bm1hcF9zaW5nbGUoZGV2LCByZWRfYmxvYl9kZXNjLT5pbl9kYXRhLCByZWRfYmxvYl9lbmNh cC0+ZGF0YV9zeiwNCj4gPiArCQkJIERNQV9UT19ERVZJQ0UpOw0KPiA+ICtza19kYXRhX2ZhaWw6 DQo+ID4gKwlyZXR1cm4gLUVOT01FTTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogc3RhdGljIGlu dCBjYWFtX3NrX3JlZGJsb2JfZGVjYXBfbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gPiArICoJ CQkJCSAgICBzdHJ1Y3Qgc2tfcmVxICpyZXEsDQo+ID4gKyAqCQkJCQkgICAgc3RydWN0IHNrX2Rl c2MgKnNrZGVzYykNCj4gPiArICogYnJpZWYgRE1BIG1hcCB0aGUgYnVmZmVyIHZpcnR1YWwgcG9p bnRlcnMgdG8gcGh5c2ljYWwgYWRkcmVzcy4NCj4gPiArICogcGFyYW1baW5dIGRldiBQb2ludGVy IHRvIGpvYiByaW5nIGRldmljZSBzdHJ1Y3R1cmUNCj4gPiArICogcGFyYW1baW5dIHJlcSBQb2lu dGVyIHRvIHNlY3VyZSBrZXkgcmVxdWVzdCBzdHJ1Y3R1cmUNCj4gPiArICogcGFyYW1baW5dIHNr ZGVzYyBQb2ludGVyIHRvIHNlY3VyZSBrZXkgZGVzY3JpcHRvciBzdHJ1Y3R1cmUNCj4gPiArICog cmV0dXJuIDAgb24gc3VjY2VzcywgZXJyb3IgdmFsdWUgb3RoZXJ3aXNlLg0KPiA+ICsgKi8NCj4g PiAraW50IGNhYW1fc2tfcmVkYmxvYl9kZWNhcF9tYXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3Qgc2tfcmVxICpyZXEsDQo+ID4gKwkJCSAgICAgIHN0cnVjdCBza19kZXNjICpza2Rlc2MpDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCBza19yZWRfYmxvYl9kZWNhcCAqcmVkX2Jsb2JfZGVjYXA7DQo+ ID4gKwlzdHJ1Y3QgcmVkYmxvYl9kZWNhcF9kZXNjICpyZWRfYmxvYl9kZXNjOw0KPiA+ICsNCj4g PiArCXJlZF9ibG9iX2RlY2FwID0gJnJlcS0+cmVxX3Uuc2tfcmVkX2Jsb2JfZGVjYXA7DQo+ID4g KwlyZWRfYmxvYl9kZXNjID0gJnNrZGVzYy0+ZG1hX3UucmVkYmxvYl9kZWNhcGRlc2M7DQo+ID4g Kw0KPiA+ICsJcmVkX2Jsb2JfZGVzYy0+cmVkYmxvYiA9IGRtYV9tYXBfc2luZ2xlKGRldiwgcmVk X2Jsb2JfZGVjYXAtPnJlZGJsb2IsDQo+ID4gKwkJCQlyZWRfYmxvYl9kZWNhcC0+cmVkYmxvYl9z eiwgRE1BX1RPX0RFVklDRSk7DQo+ID4gKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCByZWRf YmxvYl9kZXNjLT5yZWRibG9iKSkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIG1h cCBtZW1vcnlcbiIpOw0KPiA+ICsJCWdvdG8gc2tfcmVkYmxvYl9mYWlsOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCXJlZF9ibG9iX2Rlc2MtPm91dF9kYXRhID0gZG1hX21hcF9zaW5nbGUoZGV2LCBy ZWRfYmxvYl9kZWNhcC0+ZGF0YSwNCj4gPiArCQkJCXJlZF9ibG9iX2RlY2FwLT5kYXRhX3N6LCBE TUFfRlJPTV9ERVZJQ0UpOw0KPiA+ICsJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgcmVkX2Js b2JfZGVzYy0+b3V0X2RhdGEpKSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gbWFw IG1lbW9yeVxuIik7DQo+ID4gKwkJZ290byBza19kYXRhX2ZhaWw7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtza19kYXRhX2ZhaWw6DQo+ID4gKwlkbWFfdW5t YXBfc2luZ2xlKGRldiwgcmVkX2Jsb2JfZGVzYy0+cmVkYmxvYiwNCj4gPiArCQkJIHJlZF9ibG9i X2RlY2FwLT5yZWRibG9iX3N6LCBETUFfVE9fREVWSUNFKTsNCj4gPiArc2tfcmVkYmxvYl9mYWls Og0KPiA+ICsJcmV0dXJuIC1FTk9NRU07DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIEBmbiB2b2lk IHNlY3VyZWtleV91bm1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4gKyAqCQkJICAgIHN0cnVj dCBza19kZXNjICpza2Rlc2MsIHN0cnVjdCBza19yZXEgKnJlcSkNCj4gPiArICogQGJyaWVmIERN QSB1bm1hcCB0aGUgYnVmZmVyIHBvaW50ZXJzLg0KPiA+ICsgKiBAcGFyYW1baW5dIGRldiBQb2lu dGVyIHRvIGpvYiByaW5nIGRldmljZSBzdHJ1Y3R1cmUNCj4gPiArICogQHBhcmFtW2luXSBza2Rl c2MgUG9pbnRlciB0byBzZWN1cmUga2V5IGRlc2NyaXB0b3Igc3RydWN0dXJlDQo+ID4gKyAqIEBw YXJhbVtpbl0gcmVxIFBvaW50ZXIgdG8gc2VjdXJlIGtleSByZXF1ZXN0IHN0cnVjdHVyZSAgKi8g dm9pZA0KPiA+ICtzZWN1cmVrZXlfdW5tYXAoc3RydWN0IGRldmljZSAqZGV2LA0KPiA+ICsJCSAg ICAgc3RydWN0IHNrX2Rlc2MgKnNrZGVzYywgc3RydWN0IHNrX3JlcSAqcmVxKSB7DQo+ID4gKw0K PiA+ICsJc3dpdGNoIChyZXEtPnR5cGUpIHsNCj4gPiArCWNhc2Ugc2tfZ2V0X3JhbmRvbToNCj4g PiArCQl7DQo+ID4gKwkJCXN0cnVjdCBza19mZXRjaF9ybmRfZGF0YSAqZmV0Y2hfcm5kX2RhdGE7 DQo+ID4gKwkJCXN0cnVjdCByYW5kb21fZGVzYyAqcm5kX2Rlc2M7DQo+ID4gKw0KPiA+ICsJCQlm ZXRjaF9ybmRfZGF0YSA9ICZyZXEtPnJlcV91LnNrX2ZldGNoX3JuZF9kYXRhOw0KPiA+ICsJCQly bmRfZGVzYyA9ICZza2Rlc2MtPmRtYV91LnJhbmRvbV9kZXNjcDsNCj4gPiArDQo+ID4gKwkJCS8q IFVubWFwIERlc2NyaXB0b3IgYnVmZmVyIHBvaW50ZXJzLiAqLw0KPiA+ICsJCQlkbWFfdW5tYXBf c2luZ2xlKGRldiwgcm5kX2Rlc2MtPnJuZF9kYXRhLA0KPiA+ICsJCQkJCSBmZXRjaF9ybmRfZGF0 YS0+a2V5X2xlbiwNCj4gPiArCQkJCQkgRE1BX0ZST01fREVWSUNFKTsNCj4gPiArCQkJYnJlYWs7 DQo+ID4gKwkJfQ0KPiA+ICsJY2FzZSBza19yZWRfYmxvYl9lbmM6DQo+ID4gKwkJew0KPiA+ICsJ CQlzdHJ1Y3Qgc2tfcmVkX2Jsb2JfZW5jYXAgKnJlZF9ibG9iX2VuY2FwOw0KPiA+ICsJCQlzdHJ1 Y3QgcmVkYmxvYl9lbmNhcF9kZXNjICpyZWRfYmxvYl9kZXNjOw0KPiA+ICsNCj4gPiArCQkJcmVk X2Jsb2JfZW5jYXAgPSAmcmVxLT5yZXFfdS5za19yZWRfYmxvYl9lbmNhcDsNCj4gPiArCQkJcmVk X2Jsb2JfZGVzYyA9ICZza2Rlc2MtPmRtYV91LnJlZGJsb2JfZW5jYXBkZXNjOw0KPiA+ICsNCj4g PiArCQkJLyogVW5tYXAgRGVzY3JpcHRvciBidWZmZXIgcG9pbnRlcnMuICovDQo+ID4gKwkJCWRt YV91bm1hcF9zaW5nbGUoZGV2LCByZWRfYmxvYl9kZXNjLT5pbl9kYXRhLA0KPiA+ICsJCQkJCSBy ZWRfYmxvYl9lbmNhcC0+ZGF0YV9zeiwNCj4gPiArCQkJCQkgRE1BX1RPX0RFVklDRSk7DQo+ID4g Kw0KPiA+ICsJCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgcmVkX2Jsb2JfZGVzYy0+cmVkYmxvYiwN Cj4gPiArCQkJCQkgcmVkX2Jsb2JfZW5jYXAtPnJlZGJsb2Jfc3osDQo+ID4gKwkJCQkJIERNQV9G Uk9NX0RFVklDRSk7DQo+ID4gKw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwljYXNl IHNrX3JlZF9ibG9iX2RlYzoNCj4gPiArCQl7DQo+ID4gKwkJCXN0cnVjdCBza19yZWRfYmxvYl9k ZWNhcCAqcmVkX2Jsb2JfZGVjYXA7DQo+ID4gKwkJCXN0cnVjdCByZWRibG9iX2RlY2FwX2Rlc2Mg KnJlZF9ibG9iX2Rlc2M7DQo+ID4gKw0KPiA+ICsJCQlyZWRfYmxvYl9kZWNhcCA9ICZyZXEtPnJl cV91LnNrX3JlZF9ibG9iX2RlY2FwOw0KPiA+ICsJCQlyZWRfYmxvYl9kZXNjID0gJnNrZGVzYy0+ ZG1hX3UucmVkYmxvYl9kZWNhcGRlc2M7DQo+ID4gKw0KPiA+ICsJCQkvKiBVbm1hcCBEZXNjcmlw dG9yIGJ1ZmZlciBwb2ludGVycy4gKi8NCj4gPiArCQkJZG1hX3VubWFwX3NpbmdsZShkZXYsIHJl ZF9ibG9iX2Rlc2MtPnJlZGJsb2IsDQo+ID4gKwkJCQkJIHJlZF9ibG9iX2RlY2FwLT5yZWRibG9i X3N6LA0KPiA+ICsJCQkJCSBETUFfVE9fREVWSUNFKTsNCj4gPiArDQo+ID4gKwkJCWRtYV91bm1h cF9zaW5nbGUoZGV2LCByZWRfYmxvYl9kZXNjLT5vdXRfZGF0YSwNCj4gPiArCQkJCQkgcmVkX2Js b2JfZGVjYXAtPmRhdGFfc3osDQo+ID4gKwkJCQkJIERNQV9GUk9NX0RFVklDRSk7DQo+ID4gKw0K PiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWRldl9lcnIo ZGV2LCAiVW5hYmxlIHRvIGZpbmQgcmVxdWVzdCB0eXBlXG4iKTsNCj4gPiArCQlicmVhazsNCj4g PiArCX0NCj4gPiArCWtmcmVlKHNrZGVzYyk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qICBpbnQg Y2FhbV9zZWN1cmVrZXlfZGVzY19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNrX3Jl cQ0KPiA+ICsqcmVxKQ0KPiA+ICsgKiAgYnJpZWYgQ0FBTSBEZXNjcmlwdG9yIGNyZWF0b3IgZm9y IHNlY3VyZSBrZXkgb3BlcmF0aW9ucy4NCj4gPiArICogIHBhcmFtW2luXSBkZXYgUG9pbnRlciB0 byBqb2IgcmluZyBkZXZpY2Ugc3RydWN0dXJlDQo+ID4gKyAqICBwYXJhbVtpbl0gcmVxIFBvaW50 ZXIgdG8gc2VjdXJlIGtleSByZXF1ZXN0IHN0cnVjdHVyZQ0KPiA+ICsgKiAgcmV0dXJuIDAgb24g c3VjY2VzcywgZXJyb3IgdmFsdWUgb3RoZXJ3aXNlLg0KPiA+ICsgKi8NCj4gPiAraW50IGNhYW1f c2VjdXJla2V5X2Rlc2NfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBza19yZXEgKnJl cSkNCj4gPiArew0KPiA+ICsJc3RydWN0IHNrX2Rlc2MgKnNrZGVzYyA9IE5VTEw7DQo+ID4gKwlp bnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKHJlcS0+dHlwZSkgew0KPiA+ICsJY2Fz ZSBza19nZXRfcmFuZG9tOg0KPiA+ICsJCXsNCj4gPiArCQkJc2tkZXNjID0ga21hbGxvYyhzaXpl b2YoKnNrZGVzYyksIEdGUF9ETUEpOw0KPiA+ICsJCQlpZiAoIXNrZGVzYykgew0KPiA+ICsJCQkJ cmV0ID0gLUVOT01FTTsNCj4gPiArCQkJCWdvdG8gb3V0Ow0KPiA+ICsJCQl9DQo+ID4gKwkJCXNr ZGVzYy0+cmVxX3R5cGUgPSByZXEtPnR5cGU7DQo+ID4gKw0KPiA+ICsJCQlpZiAoY2FhbV9za19n ZXRfcmFuZG9tX21hcChkZXYsIHJlcSwgc2tkZXNjKSkgew0KPiA+ICsJCQkJZGV2X2VycihkZXYs ICJjYWFtIGdldF9yYW5kb20gbWFwIGZhaWxcbiIpOw0KPiA+ICsJCQkJcmV0ID0gLUVOT01FTTsN Cj4gPiArCQkJCWdvdG8gb3V0Ow0KPiA+ICsJCQl9DQo+ID4gKwkJCWNhYW1fc2tfcm5nX2Rlc2Mo cmVxLCBza2Rlc2MpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwljYXNlIHNrX3Jl ZF9ibG9iX2VuYzoNCj4gPiArCQl7DQo+ID4gKwkJCXNrZGVzYyA9IGttYWxsb2Moc2l6ZW9mKCpz a2Rlc2MpLCBHRlBfRE1BKTsNCj4gPiArCQkJaWYgKCFza2Rlc2MpIHsNCj4gPiArCQkJCXJldCA9 IC1FTk9NRU07DQo+ID4gKwkJCQlnb3RvIG91dDsNCj4gPiArCQkJfQ0KPiA+ICsNCj4gPiArCQkJ c2tkZXNjLT5yZXFfdHlwZSA9IHJlcS0+dHlwZTsNCj4gPiArDQo+ID4gKwkJCWlmIChjYWFtX3Nr X3JlZGJsb2JfZW5jYXBfbWFwKGRldiwgcmVxLCBza2Rlc2MpKSB7DQo+ID4gKwkJCQlkZXZfZXJy KGRldiwgImNhYW0gcmVkYmxvYl9lbmNhcCBtYXAgZmFpbFxuIik7DQo+ID4gKwkJCQlyZXQgPSAt RU5PTUVNOw0KPiA+ICsJCQkJZ290byBvdXQ7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4gKwkJCS8q IERlc2NyaXB0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHJlZGJsb2IgZnJvbSBkYXRhLiAqLw0KPiA+ ICsJCQljYWFtX3NrX3JlZGJsb2JfZW5jYXBfZGVzYyhyZXEsIHNrZGVzYyk7DQo+ID4gKwkJCWJy ZWFrOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwljYXNlIHNrX3JlZF9ibG9iX2RlYzoNCj4gPiAr CQl7DQo+ID4gKwkJCXNrZGVzYyA9IGttYWxsb2Moc2l6ZW9mKCpza2Rlc2MpLCBHRlBfRE1BKTsN Cj4gPiArCQkJaWYgKCFza2Rlc2MpIHsNCj4gPiArCQkJCXJldCA9IC1FTk9NRU07DQo+ID4gKwkJ CQlnb3RvIG91dDsNCj4gPiArCQkJfQ0KPiA+ICsNCj4gPiArCQkJc2tkZXNjLT5yZXFfdHlwZSA9 IHJlcS0+dHlwZTsNCj4gPiArDQo+ID4gKwkJCWlmIChjYWFtX3NrX3JlZGJsb2JfZGVjYXBfbWFw KGRldiwgcmVxLCBza2Rlc2MpKSB7DQo+ID4gKwkJCQlkZXZfZXJyKGRldiwgImNhYW0gcmVkYmxv Yl9kZWNhcCBtYXAgZmFpbFxuIik7DQo+ID4gKwkJCQlyZXQgPSAtRU5PTUVNOw0KPiA+ICsJCQkJ Z290byBvdXQ7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4gKwkJCS8qIERlc2NyaXB0b3IgZnVuY3Rp b24gdG8gZGVjYXAgZGF0YSBmcm9tIHJlZGJsb2IuICovDQo+ID4gKwkJCWNhYW1fc2tfcmVkYmxv Yl9kZWNhcF9kZXNjKHJlcSwgc2tkZXNjKTsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJfQ0KPiA+ ICsJZGVmYXVsdDoNCj4gPiArCQlwcl9kZWJ1ZygiVW5rbm93biByZXF1ZXN0IHR5cGVcbiIpOw0K PiA+ICsJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwkJZ290byBvdXQ7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJcmVxLT5kZXNjX3BvaW50ZXIgPSAodm9pZCAqKXNrZGVzYzsNCj4gPiArDQo+ID4gK291 dDoNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIHN0YXRpYyB2b2lk IGNhYW1fb3BfZG9uZSAoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgKmRlc2MsIHUzMiByZXQsDQo+ ID4gKyAqCQkJICAgICB2b2lkICpjb250ZXh0KQ0KPiA+ICsgKiBicmllZiBjYWxsYmFjayBmdW5j dGlvbiB0byBiZSBjYWxsZWQgd2hlbiBkZXNjcmlwdG9yIGV4ZWN1dGVkLg0KPiA+ICsgKiBwYXJh bVtpbl0gZGV2IFBvaW50ZXIgdG8gZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKiBwYXJhbVtpbl0g ZGVzYyBkZXNjcmlwdG9yIHBvaW50ZXINCj4gPiArICogcGFyYW1baW5dIHJldCByZXR1cm4gc3Rh dHVzIG9mIEpvYiBzdWJtaXR0ZWQNCj4gPiArICogcGFyYW1baW5dIGNvbnRleHQgdm9pZCBwb2lu dGVyDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCBjYWFtX29wX2RvbmUoc3RydWN0IGRldmlj ZSAqZGV2LCB1MzIgKmRlc2MsIHUzMiByZXQsDQo+ID4gKwkJCSB2b2lkICpjb250ZXh0KQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3Qgc2tfcmVxICpyZXEgPSBjb250ZXh0Ow0KPiA+ICsNCj4gPiArCWlm IChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImNhYW0gb3AgZG9uZSBlcnI6ICV4XG4iLCBy ZXQpOw0KPiA+ICsJCS8qIHByaW50IHRoZSBlcnJvciBzb3VyY2UgbmFtZS4gKi8NCj4gPiArCQlj YWFtX2pyX3N0cnN0YXR1cyhkZXYsIHJldCk7DQo+ID4gKwl9DQo+ID4gKwkvKiBDYWxsIHNlY3Vy ZWtleV91bm1hcCBmdW5jdGlvbiBmb3IgdW5tYXBwaW5nIHRoZSBidWZmZXIgcG9pbnRlcnMuICov DQo+ID4gKwlzZWN1cmVrZXlfdW5tYXAoZGV2LCByZXEtPmRlc2NfcG9pbnRlciwgcmVxKTsNCj4g PiArDQo+ID4gKwlyZXEtPnJldCA9IHJldDsNCj4gPiArCWNvbXBsZXRlKCZyZXEtPmNvbXApOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyogIHN0YXRpYyBpbnQgc2tfam9iX3N1Ym1pdChz dHJ1Y3QgZGV2aWNlICpqcmRldiwgc3RydWN0IHNrX3JlcQ0KPiA+ICsqcmVxKQ0KPiA+ICsgKiAg YnJpZWYgRW5xdWV1ZSBhIEpvYiBkZXNjcmlwdG9yIHRvIEpvYiByaW5nIGFuZCB3YWl0IHVudGls IFNFQyByZXR1cm5zLg0KPiA+ICsgKiAgcGFyYW1baW5dIGpyZGV2IFBvaW50ZXIgdG8gam9iIHJp bmcgZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKiAgcGFyYW1baW5dIHJlcSBQb2ludGVyIHRvIHNl Y3VyZSBrZXkgcmVxdWVzdCBzdHJ1Y3R1cmUNCj4gPiArICogIHJldHVybiAwIG9uIHN1Y2Nlc3Ms IGVycm9yIHZhbHVlIG90aGVyd2lzZS4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgc2tfam9i X3N1Ym1pdChzdHJ1Y3QgZGV2aWNlICpqcmRldiwgc3RydWN0IHNrX3JlcSAqcmVxKSB7DQo+ID4g KwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWluaXRfY29tcGxldGlvbigmcmVxLT5jb21wKTsNCj4g PiArDQo+ID4gKwkvKiBjYWFtX2pyX2VucXVldWUgZnVuY3Rpb24gZm9yIEVucXVldWUgYSBqb2Ig ZGVzY3JpcHRvciAqLw0KPiA+ICsJcmV0ID0gY2FhbV9qcl9lbnF1ZXVlKGpyZGV2LCByZXEtPmh3 ZGVzYywgY2FhbV9vcF9kb25lLCByZXEpOw0KPiA+ICsJaWYgKCFyZXQpDQo+ID4gKwkJd2FpdF9m b3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZyZXEtPmNvbXApOw0KPiA+ICsNCj4gPiArCXJl dCA9IHJlcS0+cmV0Ow0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyog Y2FhbV9nZXRfcmFuZG9tKHN0cnVjdCBzZWN1cmVfa2V5X3BheWxvYWQgKnAsICBlbnVtIHNrX3Jl cV90eXBlIGZldGNoX3JuZCwNCj4gPiArICoJCSAgIHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiAr ICogQ3JlYXRlIHRoZSByYW5kb20gbnVtYmVyIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIHVzaW5n IENBQU0gYmxvY2sNCj4gPiArICogcGFyYW1baW5dOiBvdXQgcG9pbnRlciB0byBwbGFjZSB0aGUg cmFuZG9tIGJ5dGVzDQo+ID4gKyAqIHBhcmFtW2luXTogbGVuZ3RoIGZvciB0aGUgcmFuZG9tIGRh dGEgYnl0ZXMuDQo+ID4gKyAqIHBhcmFtW2luXTogZGV2IFBvaW50ZXIgdG8gam9iIHJpbmcgZGV2 aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKiBJZiBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bCByZXR1cm4g MCwgb3RoZXJ3aXNlIGVycm9yLg0KPiA+ICsgKi8NCj4gPiAraW50IGNhYW1fZ2V0X3JhbmRvbShz dHJ1Y3Qgc2VjdXJlX2tleV9wYXlsb2FkICpwLCAgZW51bSBza19yZXFfdHlwZSBmZXRjaF9ybmQs DQo+ID4gKwkJICAgIHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IHNr X2ZldGNoX3JuZF9kYXRhICpmZXRjaF9ybmRfZGF0YSA9IE5VTEw7DQo+ID4gKwlzdHJ1Y3Qgc2tf cmVxICpyZXEgPSBOVUxMOw0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKwl2b2lkICp0ZW1wID0g TlVMTDsNCj4gPiArDQo+ID4gKwlyZXEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2tfcmVxKSwg R0ZQX0RNQSk7DQo+ID4gKwlpZiAoIXJlcSkgew0KPiA+ICsJCXJldCA9IC1FTk9NRU07DQo+ID4g KwkJZ290byBvdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmVxLT50eXBlID0gZmV0Y2hfcm5k Ow0KPiA+ICsJZmV0Y2hfcm5kX2RhdGEgPSAmKHJlcS0+cmVxX3Uuc2tfZmV0Y2hfcm5kX2RhdGEp Ow0KPiA+ICsNCj4gPiArCS8qIGluaXRpYWxpc2Ugd2l0aCBrZXkgbGVuZ3RoICovDQo+ID4gKwlm ZXRjaF9ybmRfZGF0YS0+a2V5X2xlbiA9IHAtPmtleV9sZW47DQo+ID4gKw0KPiA+ICsJdGVtcCA9 IGttYWxsb2MoZmV0Y2hfcm5kX2RhdGEtPmtleV9sZW4sIEdGUF9ETUEpOw0KPiA+ICsJaWYgKCF0 ZW1wKSB7DQo+ID4gKwkJcmV0ID0gLUVOT01FTTsNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0N Cj4gPiArCWZldGNoX3JuZF9kYXRhLT5kYXRhID0gdGVtcDsNCj4gPiArDQo+ID4gKwlyZXQgPSBj YWFtX3NlY3VyZWtleV9kZXNjX2luaXQoZGV2LCByZXEpOw0KPiA+ICsNCj4gPiArCWlmIChyZXQp IHsNCj4gPiArCQlwcl9pbmZvKCJjYWFtX3NlY3VyZWtleV9kZXNjX2luaXQgZmFpbGVkXG4iKTsN Cj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSBza19qb2Jfc3Vi bWl0KGRldiwgcmVxKTsNCj4gPiArCWlmICghcmV0KSB7DQo+ID4gKwkJLypDb3B5IG91dHB1dCB0 byBrZXkgYnVmZmVyLiAqLw0KPiA+ICsJCW1lbWNweShwLT5rZXksIGZldGNoX3JuZF9kYXRhLT5k YXRhLCBwLT5rZXlfbGVuKTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsN Cj4gPiArCX0NCj4gPiArDQo+ID4gK291dDoNCj4gPiArCWlmIChyZXEpDQo+ID4gKwkJa2ZyZWUo cmVxKTsNCj4gPiArDQo+ID4gKwlpZiAodGVtcCkNCj4gPiArCQlrZnJlZSh0ZW1wKTsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBrZXlfZGVibG9iKHN0 cnVjdCBzZWN1cmVfa2V5X3BheWxvYWQgKnAsIGVudW0gc2tfcmVxX3R5cGUgZGVjYXBfdHlwZQ0K PiA+ICsgKgkJc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICsgKiBEZWJsb2JpZnkgdGhlIGJsb2Ig dG8gZ2V0IHRoZSBrZXkgZGF0YSBhbmQgZmlsbCBpbiBzZWN1cmUga2V5DQo+ID4gK3BheWxvYWQg c3RydWN0DQo+ID4gKyAqIHBhcmFtW2luXSBwIHBvaW50ZXIgdG8gdGhlIHNlY3VyZSBrZXkgcGF5 bG9hZA0KPiA+ICsgKiBwYXJhbVtpbl0gZGVjYXBfdHlwZSBvcGVyYXRpb24gdG8gYmUgZG9uZS4N Cj4gPiArICogcGFyYW1baW5dIGRldiBkZXYgUG9pbnRlciB0byBqb2IgcmluZyBkZXZpY2Ugc3Ry dWN0dXJlDQo+ID4gKyAqIElmIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsIHJldHVybiAwLCBvdGhl cndpc2UgZXJyb3IuDQo+ID4gKyAqLw0KPiA+ICtpbnQga2V5X2RlYmxvYihzdHJ1Y3Qgc2VjdXJl X2tleV9wYXlsb2FkICpwLCBlbnVtIHNrX3JlcV90eXBlIGRlY2FwX3R5cGUsDQo+ID4gKwkgICAg ICAgc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKwl1bnNpZ25lZCBpbnQgYmxvYl9s ZW47DQo+ID4gKwlzdHJ1Y3Qgc2tfcmVkX2Jsb2JfZGVjYXAgKmRfYmxvYjsNCj4gPiArCXN0cnVj dCBza19yZXEgKnJlcSA9IE5VTEw7DQo+ID4gKwlpbnQgdG90YWxfc3ogPSAwLCAqdGVtcCA9IE5V TEwsIHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJcmVxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNr X3JlcSksIEdGUF9ETUEpOw0KPiA+ICsJaWYgKCFyZXEpIHsNCj4gPiArCQlyZXQgPSAtRU5PTUVN Ow0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWRfYmxvYiA9ICYocmVx LT5yZXFfdS5za19yZWRfYmxvYl9kZWNhcCk7DQo+ID4gKwlibG9iX2xlbiA9IHAtPmJsb2JfbGVu Ow0KPiA+ICsJcmVxLT50eXBlID0gZGVjYXBfdHlwZTsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJ ICogUmVkIGJsb2Igc2l6ZSBpcyB0aGUgYmxvYl9sZW4gZmlsbGVkIGluIHBheWxvYWQgc3RydWN0 DQo+ID4gKwkgKiBEYXRhX3N6IGkuZS4ga2V5IGlzIHRoZSBibG9iX2xlbiAtIGJsb2IgaGVhZGVy IHNpemUNCj4gPiArCSAqLw0KPiA+ICsNCj4gPiArCWRfYmxvYi0+cmVkYmxvYl9zeiA9IGJsb2Jf bGVuOw0KPiA+ICsJZF9ibG9iLT5kYXRhX3N6ID0gYmxvYl9sZW4gLSAoU0tfQkxPQl9LRVlfU1og KyBTS19CTE9CX01BQ19TWik7DQo+ID4gKwl0b3RhbF9zeiA9IGRfYmxvYi0+ZGF0YV9zeiArIGRf YmxvYi0+cmVkYmxvYl9zejsNCj4gPiArDQo+ID4gKwl0ZW1wID0ga21hbGxvYyh0b3RhbF9zeiwg R0ZQX0RNQSk7DQo+ID4gKwlpZiAoIXRlbXApIHsNCj4gPiArCQlyZXQgPSAtRU5PTUVNOw0KPiA+ ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJlcS0+bWVtX3BvaW50ZXIgPSB0 ZW1wOw0KPiA+ICsJZF9ibG9iLT5yZWRibG9iID0gdGVtcDsNCj4gPiArCWRfYmxvYi0+ZGF0YSA9 IGRfYmxvYi0+cmVkYmxvYiArIGRfYmxvYi0+cmVkYmxvYl9zejsNCj4gPiArCW1lbWNweShkX2Js b2ItPnJlZGJsb2IsIHAtPmJsb2IsIGJsb2JfbGVuKTsNCj4gPiArDQo+ID4gKwlyZXQgPSBjYWFt X3NlY3VyZWtleV9kZXNjX2luaXQoZGV2LCByZXEpOw0KPiA+ICsNCj4gPiArCWlmIChyZXQpIHsN Cj4gPiArCQlwcl9pbmZvKCJjYWFtX3NlY3VyZWtleV9kZXNjX2luaXQ6IEZhaWxlZFxuIik7DQo+ ID4gKwkJZ290byBvdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gc2tfam9iX3N1Ym1p dChkZXYsIHJlcSk7DQo+ID4gKwlpZiAoIXJldCkgew0KPiA+ICsJCS8qQ29weSBvdXRwdXQgdG8g a2V5IGJ1ZmZlci4gKi8NCj4gPiArCQlwLT5rZXlfbGVuID0gZF9ibG9iLT5kYXRhX3N6Ow0KPiA+ ICsJCW1lbWNweShwLT5rZXksIGRfYmxvYi0+ZGF0YSwgcC0+a2V5X2xlbik7DQo+ID4gKwl9IGVs c2Ugew0KPiA+ICsJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ ID4gKwlpZiAodGVtcCkNCj4gPiArCQlrZnJlZSh0ZW1wKTsNCj4gPiArCWlmIChyZXEpDQo+ID4g KwkJa2ZyZWUocmVxKTsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q IGtleV9ibG9iKHN0cnVjdCBzZWN1cmVfa2V5X3BheWxvYWQgKnAsIGVudW0gc2tfcmVxX3R5cGUg ZW5jYXBfdHlwZSwNCj4gPiArICoJCXN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiArICogVG8gYmxv YmlmeSB0aGUga2V5IGRhdGEgdG8gZ2V0IHRoZSBibG9iLiBUaGlzIGJsb2IgY2FuIG9ubHkgYmUN Cj4gPiArc2VlbiBieQ0KPiA+ICsgKiB1c2Vyc3BhY2UuDQo+ID4gKyAqIHBhcmFtW2luXSBwIHBv aW50ZXIgdG8gdGhlIHNlY3VyZSBrZXkgcGF5bG9hZA0KPiA+ICsgKiBwYXJhbVtpbl0gZGVjYXBf dHlwZSBvcGVyYXRpb24gdG8gYmUgZG9uZS4NCj4gPiArICogcGFyYW1baW5dIGRldiBkZXYgUG9p bnRlciB0byBqb2IgcmluZyBkZXZpY2Ugc3RydWN0dXJlDQo+ID4gKyAqIElmIG9wZXJhdGlvbiBp cyBzdWNjZXNzZnVsIHJldHVybiAwLCBvdGhlcndpc2UgZXJyb3IuDQo+ID4gKyAqLw0KPiA+ICtp bnQga2V5X2Jsb2Ioc3RydWN0IHNlY3VyZV9rZXlfcGF5bG9hZCAqcCwgZW51bSBza19yZXFfdHlw ZSBlbmNhcF90eXBlLA0KPiA+ICsJICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4g PiArCXVuc2lnbmVkIGludCBrZXlfbGVuOw0KPiA+ICsJc3RydWN0IHNrX3JlZF9ibG9iX2VuY2Fw ICprX2Jsb2I7DQo+ID4gKwlzdHJ1Y3Qgc2tfcmVxICpyZXEgPSBOVUxMOw0KPiA+ICsJaW50IHRv dGFsX3N6ID0gMCwgKnRlbXAgPSBOVUxMLCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCXJlcSA9IGtt YWxsb2Moc2l6ZW9mKHN0cnVjdCBza19yZXEpLCBHRlBfRE1BKTsNCj4gPiArCWlmICghcmVxKSB7 DQo+ID4gKwkJcmV0ID0gLUVOT01FTTsNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlrZXlfbGVuID0gcC0+a2V5X2xlbjsNCj4gPiArDQo+ID4gKwlyZXEtPnR5cGUgPSBl bmNhcF90eXBlOw0KPiA+ICsJa19ibG9iID0gJihyZXEtPnJlcV91LnNrX3JlZF9ibG9iX2VuY2Fw KTsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogRGF0YV9zeiBpLmUuIGtleSBsZW4gYW5kIHRo ZSBjb3JyZXNwb25kaW5nIGJsb2JfbGVuIGlzDQo+ID4gKwkgKiBrZXlfbGVuICsgQkxPQiBoZWFk ZXIgc2l6ZS44N2VhNTg0MzMyMDgNCj4gPiArCSAqLw0KPiA+ICsNCj4gPiArCWtfYmxvYi0+ZGF0 YV9zeiA9IGtleV9sZW47DQo+ID4gKwlrX2Jsb2ItPnJlZGJsb2Jfc3ogPSBrZXlfbGVuICsgU0tf QkxPQl9LRVlfU1ogKyBTS19CTE9CX01BQ19TWjsNCj4gPiArCXRvdGFsX3N6ID0ga19ibG9iLT5k YXRhX3N6ICsga19ibG9iLT5yZWRibG9iX3N6Ow0KPiA+ICsNCj4gPiArCXRlbXAgPSBrbWFsbG9j KHRvdGFsX3N6LCBHRlBfRE1BKTsNCj4gPiArCWlmICghdGVtcCkgew0KPiA+ICsJCXJldCA9IC1F Tk9NRU07DQo+ID4gKwkJZ290byBvdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmVxLT5tZW1f cG9pbnRlciA9IHRlbXA7DQo+ID4gKwlrX2Jsb2ItPmRhdGEgPSB0ZW1wOw0KPiA+ICsNCj4gPiAr CWtfYmxvYi0+cmVkYmxvYiA9IGtfYmxvYi0+ZGF0YSArIGtfYmxvYi0+ZGF0YV9zejsNCj4gPiAr CW1lbWNweShrX2Jsb2ItPmRhdGEsIHAtPmtleSwga2V5X2xlbik7DQo+ID4gKw0KPiA+ICsJcmV0 ID0gY2FhbV9zZWN1cmVrZXlfZGVzY19pbml0KGRldiwgcmVxKTsNCj4gPiArDQo+ID4gKwlpZiAo cmV0KSB7DQo+ID4gKwkJcHJfaW5mbygiY2FhbV9zZWN1cmVrZXlfZGVzY19pbml0IGZhaWxlZFxu Iik7DQo+ID4gKwkJZ290byBvdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gc2tfam9i X3N1Ym1pdChkZXYsIHJlcSk7DQo+ID4gKwlpZiAoIXJldCkgew0KPiA+ICsJCS8qQ29weSBvdXRw dXQgdG8ga2V5IGJ1ZmZlci4gKi8NCj4gPiArCQlwLT5ibG9iX2xlbiA9IGtfYmxvYi0+cmVkYmxv Yl9zejsNCj4gPiArCQltZW1jcHkocC0+YmxvYiwga19ibG9iLT5yZWRibG9iLCBwLT5ibG9iX2xl bik7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICtvdXQ6DQo+ID4gKwlpZiAodGVtcCkNCj4gPiArCQlrZnJlZShyZXEtPm1lbV9wb2lu dGVyKTsNCj4gPiArCWlmIChyZXEpDQo+ID4gKwkJa2ZyZWUocmVxKTsNCj4gPiArCXJldHVybiBy ZXQ7DQo+ID4gKw0KPiA+ICt9DQo+ID4gKw0KPiA+IGRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlz L3NlY3VyZWtleV9kZXNjLmgNCj4gPiBiL3NlY3VyaXR5L2tleXMvc2VjdXJla2V5X2Rlc2MuaCBu ZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleA0KPiA+IDAwMDAwMDAwMDAwMC4uMGVlMjZlOTViMjA1 DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL3NlY3VyaXR5L2tleXMvc2VjdXJla2V5X2Rl c2MuaA0KPiA+IEBAIC0wLDAgKzEsMTQxIEBADQo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wICovDQo+ID4gKy8qDQo+ID4gKyAqIENvcHlyaWdodCAyMDE4IE5YUA0KPiA+ ICsgKg0KPiA+ICsgKi8NCj4gPiArI2lmbmRlZiBfU0VDVVJFS0VZX0RFU0NfSF8NCj4gPiArI2Rl ZmluZSBfU0VDVVJFS0VZX0RFU0NfSF8NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJjb21wYXQuaCIN Cj4gPiArI2luY2x1ZGUgInJlZ3MuaCINCj4gPiArI2luY2x1ZGUgImludGVybi5oIg0KPiA+ICsj aW5jbHVkZSAiZGVzYy5oIg0KPiA+ICsjaW5jbHVkZSAiZGVzY19jb25zdHIuaCINCj4gPiArI2lu Y2x1ZGUgImpyLmgiDQo+ID4gKyNpbmNsdWRlICJlcnJvci5oIg0KPiA+ICsjaW5jbHVkZSAicGRi LmgiDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFNLX0JMT0JfS0VZX1NaCQkzMgkvKiBCbG9iIGtleSBz aXplLiAqLw0KPiA+ICsjZGVmaW5lIFNLX0JMT0JfTUFDX1NaCQkxNgkvKiBCbG9iIE1BQyBzaXpl LiAqLw0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogYnJpZWYgZGVmaW5lcyBkaWZmZXJlbnQga2lu ZHMgb2Ygb3BlcmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBtb2R1bGUuDQo+ID4gKyAqLw0KPiA+ ICtlbnVtIHNrX3JlcV90eXBlIHsNCj4gPiArCXNrX2dldF9yYW5kb20sDQo+ID4gKwlza19yZWRf YmxvYl9lbmMsDQo+ID4gKwlza19yZWRfYmxvYl9kZWMsDQo+ID4gK307DQo+ID4gKw0KPiA+ICsN Cj4gPiArLyoNCj4gPiArICogc3RydWN0IHJhbmRvbV9kZXMNCj4gPiArICogcGFyYW1bb3V0XSBy bmRfZGF0YSBvdXRwdXQgYnVmZmVyIGZvciByYW5kb20gZGF0YS4NCj4gPiArICovDQo+ID4gK3N0 cnVjdCByYW5kb21fZGVzYyB7DQo+ID4gKwlkbWFfYWRkcl90IHJuZF9kYXRhOw0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArLyogc3RydWN0IHJlZGJsb2JfZW5jYXBfZGVzYw0KPiA+ICsgKiBkZXRhaWxz IFN0cnVjdHVyZSBjb250YWluaW5nIGRtYSBhZGRyZXNzIGZvciByZWRibG9iIGVuY2Fwc3VsYXRp b24uDQo+ID4gKyAqIHBhcmFtW2luXSBpbl9kYXRhIGlucHV0IGRhdGEgdG8gcmVkYmxvYiBlbmNh cCBkZXNjcmlwdG9yLg0KPiA+ICsgKiBwYXJhbVtvdXRdIHJlZGJsb2Igb3V0cHV0IGJ1ZmZlciBm b3IgcmVkYmxvYi4NCj4gPiArICovDQo+ID4gK3N0cnVjdCByZWRibG9iX2VuY2FwX2Rlc2Mgew0K PiA+ICsJZG1hX2FkZHJfdCBpbl9kYXRhOw0KPiA+ICsJZG1hX2FkZHJfdCByZWRibG9iOw0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArLyogc3RydWN0IHJlZGJsb2JfZGVjYXBfZGVzYw0KPiA+ICsgKiBk ZXRhaWxzIFN0cnVjdHVyZSBjb250YWluaW5nIGRtYSBhZGRyZXNzIGZvciByZWRibG9iIGRlY2Fw c3VsYXRpb24uDQo+ID4gKyAqIHBhcmFtW2luXSByZWRibG9iIGlucHV0IGJ1ZmZlciB0byByZWRi bG9iIGRlY2FwIGRlc2NyaXB0b3IuDQo+ID4gKyAqIHBhcmFtW291dF0gb3V0X2RhdGEgb3V0cHV0 IGRhdGEgZnJvbSByZWRibG9iIGRlY2FwIGRlc2NyaXB0b3IuDQo+ID4gKyAqLw0KPiA+ICtzdHJ1 Y3QgcmVkYmxvYl9kZWNhcF9kZXNjIHsNCj4gPiArCWRtYV9hZGRyX3QgcmVkYmxvYjsNCj4gPiAr CWRtYV9hZGRyX3Qgb3V0X2RhdGE7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiBzdHJ1Y3Qgc2tf ZGVzYw0KPiA+ICsgKiBkZXRhaWxzIFN0cnVjdHVyZSBmb3Igc2VjdXJla2V5IGRlc2NyaXB0b3Ig Y3JlYXRpb24uDQo+ID4gKyAqIHBhcmFtW2luXSByZXFfdHlwZSBvcGVyYXRpb24gc3VwcG9ydGVk Lg0KPiA+ICsgKiBwYXJhbVtpbl0gZG1hX3UgdW5pb24gb2Ygc3RydWN0IGZvciBzdXBwb3J0ZWQg b3BlcmF0aW9uLg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHNrX2Rlc2Mgew0KPiA+ICsJdTMyIHJl cV90eXBlOw0KPiA+ICsJdW5pb24gew0KPiA+ICsJCXN0cnVjdCByZWRibG9iX2VuY2FwX2Rlc2Mg cmVkYmxvYl9lbmNhcGRlc2M7DQo+ID4gKwkJc3RydWN0IHJlZGJsb2JfZGVjYXBfZGVzYyByZWRi bG9iX2RlY2FwZGVzYzsNCj4gPiArCQlzdHJ1Y3QgcmFuZG9tX2Rlc2MgcmFuZG9tX2Rlc2NwOw0K PiA+ICsJfSBkbWFfdTsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qIHN0cnVjdCBza19mZXRjaF9y bmRfZGF0YQ0KPiA+ICsgKiBkZWNyaXB0b3Igc3RydWN0dXJlIGNvbnRhaW5pbmcga2V5IGxlbmd0 aC4NCj4gPiArICovDQo+ID4gK3N0cnVjdCBza19mZXRjaF9ybmRfZGF0YSB7DQo+ID4gKwl2b2lk ICpkYXRhOw0KPiA+ICsJc2l6ZV90IGtleV9sZW47DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiBz dHJ1Y3Qgc2tfcmVkX2Jsb2JfZW5jYXANCj4gPiArICogZGV0YWlscyBTdHJ1Y3R1cmUgY29udGFp bmluZyBidWZmZXIgcG9pbnRlcnMgZm9yIHJlZGJsb2IgZW5jYXBzdWxhdGlvbi4NCj4gPiArICog cGFyYW1baW5dIGRhdGEgSW5wdXQgZGF0YS4NCj4gPiArICogcGFyYW1baW5dIGRhdGFfc3ogc2l6 ZSBvZiBJbnB1dCBkYXRhLg0KPiA+ICsgKiBwYXJhbVtvdXRdIHJlZGJsb2Igb3V0cHV0IGJ1ZmZl ciBmb3IgcmVkYmxvYi4NCj4gPiArICogcGFyYW1baW5dIHJlZGJsb2Jfc3ogc2l6ZSBvZiByZWRi bG9iLg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHNrX3JlZF9ibG9iX2VuY2FwIHsNCj4gPiArCXZv aWQgKmRhdGE7DQo+ID4gKwl1aW50MzJfdCBkYXRhX3N6Ow0KPiA+ICsJdm9pZCAqcmVkYmxvYjsN Cj4gPiArCXVpbnQzMl90IHJlZGJsb2Jfc3o7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiBzdHJ1 Y3Qgc2tfcmVkX2Jsb2JfZGVjYXANCj4gPiArICogZGV0YWlscyBTdHJ1Y3R1cmUgY29udGFpbmlu ZyBidWZmZXIgcG9pbnRlcnMgZm9yIHJlZGJsb2IgZGVjYXBzdWxhdGlvbi4NCj4gPiArICogcGFy YW1baW5dIHJlZGJsb2IgSW5wdXQgcmVkYmxvYi4NCj4gPiArICogcGFyYW1baW5dIHJlZGJsb2Jf c3ogc2l6ZSBvZiByZWRibG9iLg0KPiA+ICsgKiBwYXJhbVtvdXRdIGRhdGEgb3V0cHV0IGJ1ZmZl ciBmb3IgZGF0YS4NCj4gPiArICogcGFyYW1baW5dIGRhdGFfc3ogc2l6ZSBvZiBvdXRwdXQgZGF0 YS4NCj4gPiArICovDQo+ID4gK3N0cnVjdCBza19yZWRfYmxvYl9kZWNhcCB7DQo+ID4gKwl2b2lk ICpyZWRibG9iOw0KPiA+ICsJdWludDMyX3QgcmVkYmxvYl9zejsNCj4gPiArCXZvaWQgKmRhdGE7 DQo+ID4gKwl1aW50MzJfdCBkYXRhX3N6Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyogc3RydWN0 IHNrX3JlcQ0KPiA+ICsgKiBkZXRhaWxzIFN0cnVjdHVyZSBmb3Igc2VjdXJla2V5IHJlcXVlc3Qg Y3JlYXRpb24uDQo+ID4gKyAqIHBhcmFtW2luXSB0eXBlIG9wZXJhdGlvbiBzdXBwb3J0ZWQuDQo+ ID4gKyAqIHBhcmFtW2luXSByZXFfdSB1bmlvbiBvZiBzdHJ1Y3QgZm9yIHN1cHBvcnRlZCBvcGVy YXRpb24uDQo+ID4gKyAqIHBhcmFtW291dF0gcmV0IHJldHVybiBzdGF0dXMgb2YgQ0FBTSBvcGVy YXRpb24uDQo+ID4gKyAqIHBhcmFtW2luXSBtZW1fcG9pbnRlciBtZW1vcnkgcG9pbnRlciBmb3Ig YWxsb2NhdGVkIGtlcm5lbCBtZW1vcnkuDQo+ID4gKyAqIHBhcmFtW2luXSBkZXNjX3BvaW50ZXIg UG9pbnRlciB0byBzZWN1cmVrZXkgZGVzY3JpcHRvciBjcmVhdGlvbiBzdHJ1Y3R1cmUuDQo+ID4g KyAqIHBhcmFtW2luXSBjb21wIHN0cnVjdCBjb21wbGV0aW9uIG9iamVjdC4NCj4gPiArICogcGFy YW1baW5dIGh3ZGVzYyBjb250YWlucyBkZXNjcmlwdG9yIGluc3RydWN0aW9ucy4NCj4gPiArICov DQo+ID4gK3N0cnVjdCBza19yZXEgew0KPiA+ICsJZW51bSBza19yZXFfdHlwZSB0eXBlOw0KPiA+ ICsJdm9pZCAqYXJnOw0KPiA+ICsJdW5pb24gew0KPiA+ICsJCXN0cnVjdCBza19yZWRfYmxvYl9l bmNhcCBza19yZWRfYmxvYl9lbmNhcDsNCj4gPiArCQlzdHJ1Y3Qgc2tfcmVkX2Jsb2JfZGVjYXAg c2tfcmVkX2Jsb2JfZGVjYXA7DQo+ID4gKwkJc3RydWN0IHNrX2ZldGNoX3JuZF9kYXRhIHNrX2Zl dGNoX3JuZF9kYXRhOw0KPiA+ICsJfSByZXFfdTsNCj4gPiArCWludCByZXQ7DQo+ID4gKwl2b2lk ICptZW1fcG9pbnRlcjsNCj4gPiArCXZvaWQgKmRlc2NfcG9pbnRlcjsNCj4gPiArCXN0cnVjdCBj b21wbGV0aW9uIGNvbXA7DQo+ID4gKwl1MzIgaHdkZXNjW01BWF9DQUFNX0RFU0NTSVpFXTsNCj4g PiArfTsNCj4gPiArDQo+ID4gK2ludCBjYWFtX2dldF9yYW5kb20oc3RydWN0IHNlY3VyZV9rZXlf cGF5bG9hZCAqcCwgIGVudW0gc2tfcmVxX3R5cGUgZmV0Y2hfcm5kLA0KPiA+ICsJCSAgICBzdHJ1 Y3QgZGV2aWNlICpkZXYpOw0KPiA+ICtpbnQga2V5X2Jsb2Ioc3RydWN0IHNlY3VyZV9rZXlfcGF5 bG9hZCAqcCwgZW51bSBza19yZXFfdHlwZSBlbmNhcF90eXBlLA0KPiA+ICsJICAgICBzdHJ1Y3Qg ZGV2aWNlICpkZXYpOw0KPiA+ICtpbnQga2V5X2RlYmxvYihzdHJ1Y3Qgc2VjdXJlX2tleV9wYXls b2FkICpwLCBlbnVtIHNrX3JlcV90eXBlIGRlY2FwX3R5cGUsDQo+ID4gKwkgICAgICAgc3RydWN0 IGRldmljZSAqZGV2KTsNCj4gPiArDQo+ID4gKyNlbmRpZiAvKl9TRUNVUkVLRVlfREVTQ19IXyov DQoNCg==