From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BA6C3C4740A for ; Tue, 10 Sep 2019 14:17:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2845B2081B for ; Tue, 10 Sep 2019 14:17:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=netapp.onmicrosoft.com header.i=@netapp.onmicrosoft.com header.b="aisMegtS" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388243AbfIJORU (ORCPT ); Tue, 10 Sep 2019 10:17:20 -0400 Received: from mail-eopbgr770044.outbound.protection.outlook.com ([40.107.77.44]:42692 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725935AbfIJORT (ORCPT ); Tue, 10 Sep 2019 10:17:19 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nxw2CHuGvx9wBn00X4L9vRdGXGmu4b/O0MJw7eCd7JrgfH7eOmaZ+IXf/qSKB1dwFRc38JPQua512qDqIGVOLFf5miabstt9DZkE3IlZjRdmxaWDEbDSUvhyr3x0ACeeyFXfQVE9VnyOcyJCrLzQIPkfTkIWaNahkp6mGscqTWDyIa2RcLexm21hzrPeJGJQb0iypRowLAamenYCsOv+k8yN6KbC5lhKGYYKILrz7ln+pPO0tq1dQl2G6oPiaDDFTSakpbHCnqBKxpdWjDfgg0L79DcHoMkrmyjTLKBE12FpPOJrXYNMIgkIGSXOka134+NwVEqNS6eeAY0pXgrzRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FHtLtaKG9l+7JCejBd3QhMsn23LzW188bdHYliDzMXE=; b=XZOvVHykaJvdgJGR2IdcsQiRbEgrnvdD4vi+4WSlibFSoxhDzBOEy3FLzq93/SRY3JQyk8FbR2xMjbiktbiMzkJpqOfeJK70vd17UEZ/JLpksVHbKKJkgA0TFIn21mz7z8QxJpHrVPbekzYkI6vQ1Yvysf1sOxzbdugiadqqJ6xLX24UfC9B5fxlmfykXRjfl2LJopKTESyw7MgM23J8TGmnS3aD/K+f/uHy78weqt0dFfkeNWj82Df05ULCw89SHkt2+OC5mBIpMOgHx/dnaO+sBaPdEbXeCHyJgIfayM74H8mBzYATj0DgmUqvpwg0/8g/42iYdyB7vF5hnWNxkg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=netapp.com; dmarc=pass action=none header.from=netapp.com; dkim=pass header.d=netapp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netapp.onmicrosoft.com; s=selector2-netapp-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FHtLtaKG9l+7JCejBd3QhMsn23LzW188bdHYliDzMXE=; b=aisMegtSOC3uc66V8Zv4EHZkm6tes+PZ7S5yleDEVBY+/Cq+5YvQSyAUEmO4FyOmekgeynAJOyoOlYh+MhMr535d4NexvCdcNd7O8UWMkFAmJqBY+XTtUv/u0Rqt4VDICdq+9cKyT+hKe/9rku0Xn13yVmvGn0je9EJGwx2LdUc= Received: from CY4PR06MB3479.namprd06.prod.outlook.com (10.175.117.23) by CY4PR06MB3272.namprd06.prod.outlook.com (10.171.247.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.18; Tue, 10 Sep 2019 14:14:48 +0000 Received: from CY4PR06MB3479.namprd06.prod.outlook.com ([fe80::dc3a:8fd7:ce1e:e18]) by CY4PR06MB3479.namprd06.prod.outlook.com ([fe80::dc3a:8fd7:ce1e:e18%11]) with mapi id 15.20.2241.018; Tue, 10 Sep 2019 14:14:48 +0000 From: "Schumaker, Anna" To: "smayhew@redhat.com" , "trond.myklebust@hammerspace.com" CC: "linux-nfs@vger.kernel.org" , "linux-fsdevel@vger.kernel.org" , "viro@zeniv.linux.org.uk" , "linux-kernel@vger.kernel.org" , "dhowells@redhat.com" Subject: Re: [PATCH v2 25/26] NFS: Add fs_context support. Thread-Topic: [PATCH v2 25/26] NFS: Add fs_context support. Thread-Index: AQHVYpawQMyIBnBWd0iH04dT6G4Y5qck/wQA Date: Tue, 10 Sep 2019 14:14:47 +0000 Message-ID: <65578e450e34309a12286f7715c6ed3361aaf4f0.camel@netapp.com> References: <20190903203215.9157-1-smayhew@redhat.com> <20190903203215.9157-26-smayhew@redhat.com> In-Reply-To: <20190903203215.9157-26-smayhew@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.32.4 authentication-results: spf=none (sender IP is ) smtp.mailfrom=Anna.Schumaker@netapp.com; x-originating-ip: [23.28.75.121] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b06b08f3-1fa7-4e7a-6623-08d735f93d0a x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:CY4PR06MB3272; x-ms-traffictypediagnostic: CY4PR06MB3272: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1360; x-forefront-prvs: 01565FED4C x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(376002)(136003)(346002)(39860400002)(366004)(396003)(199004)(189003)(102836004)(2616005)(36756003)(99286004)(4326008)(53936002)(6246003)(76176011)(66946007)(66476007)(53946003)(86362001)(66556008)(64756008)(66446008)(6512007)(316002)(5660300002)(54906003)(6436002)(110136005)(2501003)(478600001)(6116002)(3846002)(58126008)(66066001)(14444005)(2906002)(6506007)(7736002)(14454004)(71190400001)(81166006)(8676002)(26005)(30864003)(8936002)(118296001)(76116006)(25786009)(6486002)(229853002)(91956017)(11346002)(476003)(446003)(5024004)(256004)(486006)(305945005)(71200400001)(186003)(81156014)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR06MB3272;H:CY4PR06MB3479.namprd06.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: netapp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: xHsABIIXdRo8Gcy1mqnf3h9baSw8617OlB33PFyRqWOa7zs7umYhr0IbGfv9ROMfwgmJHhaW1hLjFGVs3pnlAHyZfXsazXHoZrtP8Hdhc4L6cPkFJjehEpCLhFkEn5m33TloxsyEy2XHsb0WucF9LrJTb+2fX3LT4fiUMGVaWlooPj6VShz4KnOcemenDNU+tl5bbcAYmMR1QRt8wMtJry3eMPwFZ5vypntwsNoPCldCWxUWxQRX/QDdJYgdN1qIli9/k957iUb93ZbFP0VpuFRhfJvQFp3pZfPrIeUWscEJk+l2jaKm+9MyTgkpR+tB8Z+S5vxgxi5ZrxgT+tmYzidQUP5yOU4t1rUde1XcozIIDId1Jh3nBy9VG2u3vYA32VDYLScQnT4Kg44xXnOoEzXomkHrmJ4/CiCFk/BXV74= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <8EB83BB6153CB24FADAE2D51C26E55E8@namprd06.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: netapp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b06b08f3-1fa7-4e7a-6623-08d735f93d0a X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Sep 2019 14:14:48.0366 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4b0911a0-929b-4715-944b-c03745165b3a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 88ep/chJvpOyGoTjSuWdOkJ5xutbc8g8VNvTwURsYUCu8oLwqlSWEgscQ1LmyeiTlhkSPB2hR2NCagXOKLQNSw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR06MB3272 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgU2NvdHQsDQoNCk9uIFR1ZSwgMjAxOS0wOS0wMyBhdCAxNjozMiAtMDQwMCwgU2NvdHQgTWF5 aGV3IHdyb3RlOg0KPiBGcm9tOiBEYXZpZCBIb3dlbGxzIDxkaG93ZWxsc0ByZWRoYXQuY29tPg0K PiANCj4gQWRkIGZpbGVzeXN0ZW0gY29udGV4dCBzdXBwb3J0IHRvIE5GUywgcGFyc2luZyB0aGUg b3B0aW9ucyBpbiBhZHZhbmNlDQo+IGFuZA0KPiBhdHRhY2hpbmcgdGhlIGluZm9ybWF0aW9uIHRv IHN0cnVjdCBuZnNfZnNfY29udGV4dC4gIFRoZSBoaWdobGlnaHRzDQo+IGFyZToNCj4gDQo+ICAo KikgTWVyZ2UgbmZzX21vdW50X2luZm8gYW5kIG5mc19jbG9uZV9tb3VudCBpbnRvDQo+IG5mc19m c19jb250ZXh0LiAgVGhpcw0KPiAgICAgIHN0cnVjdHVyZSByZXByZXNlbnRzIE5GUydzIHN1cGVy YmxvY2sgY29uZmlnLg0KPiANCj4gICgqKSBNYWtlIHVzZSBvZiB0aGUgVkZTJ3MgcGFyc2luZyBz dXBwb3J0IHRvIHNwbGl0IGNvbW1hLXNlcGFyYXRlZA0KPiBsaXN0cw0KPiANCj4gICgqKSBQaW4g dGhlIE5GUyBwcm90b2NvbCBtb2R1bGUgaW4gdGhlIG5mc19mc19jb250ZXh0Lg0KPiANCj4gICgq KSBBdHRhY2ggc3VwcGxlbWVudGFyeSBlcnJvciBpbmZvcm1hdGlvbiB0byBmc19jb250ZXh0LiAg VGhpcyBoYXMNCj4gdGhlDQo+ICAgICAgZG93bnNpZGUgdGhhdCB0aGVzZSBzdHJpbmdzIG11c3Qg YmUgc3RhdGljIGFuZCBjYW4ndCBiZQ0KPiBmb3JtYXR0ZWQuDQo+IA0KPiAgKCopIFJlbW92ZSB0 aGUgYXV4aWxpYXJ5IGZpbGVfc3lzdGVtX3R5cGUgc3RydWN0cyBzaW5jZSB0aGUNCj4gaW5mb3Jt YXRpb24NCj4gICAgICBuZWNlc3NhcnkgY2FuIGJlIGNvbnZleWVkIGluIHRoZSBuZnNfZnNfY29u dGV4dCBzdHJ1Y3QgaW5zdGVhZC4NCj4gDQo+ICAoKikgUm9vdCBtb3VudHMgYXJlIG1hZGUgYnkg ZHVwbGljYXRpbmcgdGhlIGNvbmZpZyBmb3IgdGhlIHJlcXVlc3RlZA0KPiBtb3VudA0KPiAgICAg IHNvIGFzIHRvIGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVycy4gIFN1Ym1vdW50cyBwaWNrIHVwIHRo ZWlyDQo+IHBhcmFtZXRlcnMNCj4gICAgICBmcm9tIHRoZSBwYXJlbnQgc3VwZXJibG9jay4NCj4g DQo+IFtBViAtLSByZXRyYW5zIGlzIHUzMiwgbm90IHN0cmluZ10NCj4gW1NNIC0tIFJlbmFtZWQg Y2ZnIHRvIGN0eCBpbiBhIGZldyBmdW5jdGlvbnMgaW4gYW4gZWFybGllciBwYXRjaF0NCj4gW1NN IC0tIE1vdmVkIGZzX2NvbnRleHQgbW91bnQgb3B0aW9uIHBhcnNpbmcgdG8gYW4gZWFybGllciBw YXRjaF0NCj4gW1NNIC0tIE1vdmVkIGZzX2NvbnRleHQgZXJyb3IgbG9nZ2luZyB0byBhIGxhdGVy IHBhdGNoXQ0KPiBbU00gLS0gRml4ZWQgcHJpbnRrcyBpbiBuZnM0X3RyeV9nZXRfdHJlZSgpIGFu ZA0KPiBuZnM0X2dldF9yZWZlcnJhbF90cmVlKCldDQo+IFtTTSAtLSBBZGRlZCBpc19yZW1vdW50 X2ZjKCkgaGVscGVyXQ0KPiANCj4gU2lnbmVkLW9mZi1ieTogRGF2aWQgSG93ZWxscyA8ZGhvd2Vs bHNAcmVkaGF0LmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogQWwgVmlybyA8dmlyb0B6ZW5pdi5saW51 eC5vcmcudWs+DQo+IFNpZ25lZC1vZmYtYnk6IFNjb3R0IE1heWhldyA8c21heWhld0ByZWRoYXQu Y29tPg0KPiAtLS0NCj4gIGZzL25mcy9jbGllbnQuYyAgICAgICAgIHwgIDIyICstDQo+ICBmcy9u ZnMvZnNfY29udGV4dC5jICAgICB8IDU3OCArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0NCj4gLS0tLQ0KPiAgZnMvbmZzL2ZzY2FjaGUuYyAgICAgICAgfCAgIDIgKy0NCj4gIGZz L25mcy9nZXRyb290LmMgICAgICAgIHwgIDcwICsrLS0tDQo+ICBmcy9uZnMvaW50ZXJuYWwuaCAg ICAgICB8IDEwMCArKystLS0tDQo+ICBmcy9uZnMvbmFtZXNwYWNlLmMgICAgICB8IDEzNCArKysr KystLS0tDQo+ICBmcy9uZnMvbmZzM19mcy5oICAgICAgICB8ICAgMiArLQ0KPiAgZnMvbmZzL25m czNjbGllbnQuYyAgICAgfCAgIDUgKy0NCj4gIGZzL25mcy9uZnMzcHJvYy5jICAgICAgIHwgICAy ICstDQo+ICBmcy9uZnMvbmZzNF9mcy5oICAgICAgICB8ICAgOSArLQ0KPiAgZnMvbmZzL25mczRj bGllbnQuYyAgICAgfCAgNjIgKystLS0NCj4gIGZzL25mcy9uZnM0bmFtZXNwYWNlLmMgIHwgMjg1 ICsrKysrKysrKysrLS0tLS0tLS0tDQo+ICBmcy9uZnMvbmZzNHByb2MuYyAgICAgICB8ICAgMiAr LQ0KPiAgZnMvbmZzL25mczRzdXBlci5jICAgICAgfCAxNjQgKysrKysrLS0tLS0tDQo+ICBmcy9u ZnMvcHJvYy5jICAgICAgICAgICB8ICAgMiArLQ0KPiAgZnMvbmZzL3N1cGVyLmMgICAgICAgICAg fCAzMTIgKysrKysrLS0tLS0tLS0tLS0tLS0tLQ0KPiAgaW5jbHVkZS9saW51eC9uZnNfeGRyLmgg fCAgIDggKy0NCj4gIDE3IGZpbGVzIGNoYW5nZWQsIDg5NiBpbnNlcnRpb25zKCspLCA4NjMgZGVs ZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL2NsaWVudC5jIGIvZnMvbmZzL2Ns aWVudC5jDQo+IGluZGV4IDUxMWQxZDYyOTc4Ni4uYTI2ZTdkMWQ3NGJjIDEwMDY0NA0KPiAtLS0g YS9mcy9uZnMvY2xpZW50LmMNCj4gKysrIGIvZnMvbmZzL2NsaWVudC5jDQo+IEBAIC02NDgsMTcg KzY0OCwxNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChuZnNfaW5pdF9jbGllbnQpOw0KPiAgICogQ3Jl YXRlIGEgdmVyc2lvbiAyIG9yIDMgY2xpZW50DQo+ICAgKi8NCj4gIHN0YXRpYyBpbnQgbmZzX2lu aXRfc2VydmVyKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsDQo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4LA0KPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX3N1YnZlcnNpb24gKm5mc19tb2QpDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0ICpmYykNCj4gIHsN Cj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19mYzJjb250 ZXh0KGZjKTsNCj4gICAgICAgICBzdHJ1Y3QgcnBjX3RpbWVvdXQgdGltZXBhcm1zOw0KPiAgICAg ICAgIHN0cnVjdCBuZnNfY2xpZW50X2luaXRkYXRhIGNsX2luaXQgPSB7DQo+ICAgICAgICAgICAg ICAgICAuaG9zdG5hbWUgPSBjdHgtPm5mc19zZXJ2ZXIuaG9zdG5hbWUsDQo+ICAgICAgICAgICAg ICAgICAuYWRkciA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmY3R4LQ0KPiA+bmZzX3NlcnZl ci5hZGRyZXNzLA0KPiAgICAgICAgICAgICAgICAgLmFkZHJsZW4gPSBjdHgtPm5mc19zZXJ2ZXIu YWRkcmxlbiwNCj4gLSAgICAgICAgICAgICAgIC5uZnNfbW9kID0gbmZzX21vZCwNCj4gKyAgICAg ICAgICAgICAgIC5uZnNfbW9kID0gY3R4LT5uZnNfbW9kLA0KPiAgICAgICAgICAgICAgICAgLnBy b3RvID0gY3R4LT5uZnNfc2VydmVyLnByb3RvY29sLA0KPiAtICAgICAgICAgICAgICAgLm5ldCA9 IGN0eC0+bmV0LA0KPiArICAgICAgICAgICAgICAgLm5ldCA9IGZjLT5uZXRfbnMsDQo+ICAgICAg ICAgICAgICAgICAudGltZXBhcm1zID0gJnRpbWVwYXJtcywNCj4gICAgICAgICAgICAgICAgIC5j cmVkID0gc2VydmVyLT5jcmVkLA0KPiAgICAgICAgICAgICAgICAgLm5jb25uZWN0ID0gY3R4LT5u ZnNfc2VydmVyLm5jb25uZWN0LA0KPiBAQCAtOTQwLDEwICs5NDAsMTAgQEAgRVhQT1JUX1NZTUJP TF9HUEwobmZzX2ZyZWVfc2VydmVyKTsNCj4gICAqIENyZWF0ZSBhIHZlcnNpb24gMiBvciAzIHZv bHVtZSByZWNvcmQNCj4gICAqIC0ga2V5ZWQgb24gc2VydmVyIGFuZCBGU0lEDQo+ICAgKi8NCj4g LXN0cnVjdCBuZnNfc2VydmVyICpuZnNfY3JlYXRlX3NlcnZlcihzdHJ1Y3QgbmZzX21vdW50X2lu Zm8NCj4gKm1vdW50X2luZm8pDQo+ICtzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzX2NyZWF0ZV9zZXJ2 ZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjKQ0KPiAgew0KPiArICAgICAgIHN0cnVjdCBuZnNfZnNf Y29udGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMpOw0KPiAgICAgICAgIHN0cnVjdCBuZnNf c2VydmVyICpzZXJ2ZXI7DQo+IC0gICAgICAgc3RydWN0IG5mc19zdWJ2ZXJzaW9uICpuZnNfbW9k ID0gbW91bnRfaW5mby0+bmZzX21vZDsNCj4gICAgICAgICBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0 cjsNCj4gICAgICAgICBpbnQgZXJyb3I7DQo+IA0KPiBAQCAtOTU5LDE4ICs5NTksMTggQEAgc3Ry dWN0IG5mc19zZXJ2ZXIgKm5mc19jcmVhdGVfc2VydmVyKHN0cnVjdA0KPiBuZnNfbW91bnRfaW5m byAqbW91bnRfaW5mbykNCj4gICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7DQo+IA0KPiAgICAg ICAgIC8qIEdldCBhIGNsaWVudCByZXByZXNlbnRhdGlvbiAqLw0KPiAtICAgICAgIGVycm9yID0g bmZzX2luaXRfc2VydmVyKHNlcnZlciwgbW91bnRfaW5mby0+Y3R4LCBuZnNfbW9kKTsNCj4gKyAg ICAgICBlcnJvciA9IG5mc19pbml0X3NlcnZlcihzZXJ2ZXIsIGZjKTsNCj4gICAgICAgICBpZiAo ZXJyb3IgPCAwKQ0KPiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsNCj4gDQo+ICAgICAgICAg LyogUHJvYmUgdGhlIHJvb3QgZmggdG8gcmV0cmlldmUgaXRzIEZTSUQgKi8NCj4gLSAgICAgICBl cnJvciA9IG5mc19wcm9iZV9mc2luZm8oc2VydmVyLCBtb3VudF9pbmZvLT5tbnRmaCwgZmF0dHIp Ow0KPiArICAgICAgIGVycm9yID0gbmZzX3Byb2JlX2ZzaW5mbyhzZXJ2ZXIsIGN0eC0+bW50Zmgs IGZhdHRyKTsNCj4gICAgICAgICBpZiAoZXJyb3IgPCAwKQ0KPiAgICAgICAgICAgICAgICAgZ290 byBlcnJvcjsNCj4gICAgICAgICBpZiAoc2VydmVyLT5uZnNfY2xpZW50LT5ycGNfb3BzLT52ZXJz aW9uID09IDMpIHsNCj4gICAgICAgICAgICAgICAgIGlmIChzZXJ2ZXItPm5hbWVsZW4gPT0gMCB8 fCBzZXJ2ZXItPm5hbWVsZW4gPg0KPiBORlMzX01BWE5BTUxFTikNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgc2VydmVyLT5uYW1lbGVuID0gTkZTM19NQVhOQU1MRU47DQo+IC0gICAgICAgICAg ICAgICBpZiAoIShtb3VudF9pbmZvLT5jdHgtPmZsYWdzICYgTkZTX01PVU5UX05PUkRJUlBMVVMp KQ0KPiArICAgICAgICAgICAgICAgaWYgKCEoY3R4LT5mbGFncyAmIE5GU19NT1VOVF9OT1JESVJQ TFVTKSkNCj4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLT5jYXBzIHw9IE5GU19DQVBf UkVBRERJUlBMVVM7DQo+ICAgICAgICAgfSBlbHNlIHsNCj4gICAgICAgICAgICAgICAgIGlmIChz ZXJ2ZXItPm5hbWVsZW4gPT0gMCB8fCBzZXJ2ZXItPm5hbWVsZW4gPg0KPiBORlMyX01BWE5BTUxF TikNCj4gQEAgLTk3OCw4ICs5NzgsOCBAQCBzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzX2NyZWF0ZV9z ZXJ2ZXIoc3RydWN0DQo+IG5mc19tb3VudF9pbmZvICptb3VudF9pbmZvKQ0KPiAgICAgICAgIH0N Cj4gDQo+ICAgICAgICAgaWYgKCEoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFIpKSB7DQo+ IC0gICAgICAgICAgICAgICBlcnJvciA9IG5mc19tb2QtPnJwY19vcHMtPmdldGF0dHIoc2VydmVy LCBtb3VudF9pbmZvLQ0KPiA+bW50ZmgsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZmF0dHIsIE5VTEwsIE5VTEwpOw0KPiArICAgICAgICAgICAgICAgZXJyb3IgPSBjdHgtPm5m c19tb2QtPnJwY19vcHMtPmdldGF0dHIoc2VydmVyLCBjdHgtDQo+ID5tbnRmaCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdHRyLCBO VUxMLA0KPiBOVUxMKTsNCj4gICAgICAgICAgICAgICAgIGlmIChlcnJvciA8IDApIHsNCj4gICAg ICAgICAgICAgICAgICAgICAgICAgZHByaW50aygibmZzX2NyZWF0ZV9zZXJ2ZXI6IGdldGF0dHIg ZXJyb3IgPQ0KPiAlZFxuIiwgLWVycm9yKTsNCj4gICAgICAgICAgICAgICAgICAgICAgICAgZ290 byBlcnJvcjsNCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9mc19jb250ZXh0LmMgYi9mcy9uZnMvZnNf Y29udGV4dC5jDQo+IGluZGV4IGQ2NWY1ZDdhNDg4ZS4uNzI4NGM1YTE4ZTJiIDEwMDY0NA0KPiAt LS0gYS9mcy9uZnMvZnNfY29udGV4dC5jDQo+ICsrKyBiL2ZzL25mcy9mc19jb250ZXh0LmMNCj4g QEAgLTI0NCw0MyArMjQ0LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZQ0K PiBuZnNfc2VjZmxhdm9yX3Rva2Vuc1tdID0gew0KPiAgICAgICAgIHsgInN5cyIsICAgICAgICBP cHRfc2VjX3N5cyB9LA0KPiAgfTsNCj4gDQo+IC1zdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKm5mc19h bGxvY19wYXJzZWRfbW91bnRfZGF0YSh2b2lkKQ0KPiAtew0KPiAtICAgICAgIHN0cnVjdCBuZnNf ZnNfY29udGV4dCAqY3R4Ow0KPiAtDQo+IC0gICAgICAgY3R4ID0ga3phbGxvYyhzaXplb2YoKmN0 eCksIEdGUF9LRVJORUwpOw0KPiAtICAgICAgIGlmIChjdHgpIHsNCj4gLSAgICAgICAgICAgICAg IGN0eC0+dGltZW8gICAgICAgICAgICAgID0gTkZTX1VOU1BFQ19USU1FTzsNCj4gLSAgICAgICAg ICAgICAgIGN0eC0+cmV0cmFucyAgICAgICAgICAgID0gTkZTX1VOU1BFQ19SRVRSQU5TOw0KPiAt ICAgICAgICAgICAgICAgY3R4LT5hY3JlZ21pbiAgICAgICAgICAgPSBORlNfREVGX0FDUkVHTUlO Ow0KPiAtICAgICAgICAgICAgICAgY3R4LT5hY3JlZ21heCAgICAgICAgICAgPSBORlNfREVGX0FD UkVHTUFYOw0KPiAtICAgICAgICAgICAgICAgY3R4LT5hY2Rpcm1pbiAgICAgICAgICAgPSBORlNf REVGX0FDRElSTUlOOw0KPiAtICAgICAgICAgICAgICAgY3R4LT5hY2Rpcm1heCAgICAgICAgICAg PSBORlNfREVGX0FDRElSTUFYOw0KPiAtICAgICAgICAgICAgICAgY3R4LT5tb3VudF9zZXJ2ZXIu cG9ydCAgPSBORlNfVU5TUEVDX1BPUlQ7DQo+IC0gICAgICAgICAgICAgICBjdHgtPm5mc19zZXJ2 ZXIucG9ydCAgICA9IE5GU19VTlNQRUNfUE9SVDsNCj4gLSAgICAgICAgICAgICAgIGN0eC0+bmZz X3NlcnZlci5wcm90b2NvbCA9IFhQUlRfVFJBTlNQT1JUX1RDUDsNCj4gLSAgICAgICAgICAgICAg IGN0eC0+c2VsZWN0ZWRfZmxhdm9yICAgID0gUlBDX0FVVEhfTUFYRkxBVk9SOw0KPiAtICAgICAg ICAgICAgICAgY3R4LT5taW5vcnZlcnNpb24gICAgICAgPSAwOw0KPiAtICAgICAgICAgICAgICAg Y3R4LT5uZWVkX21vdW50ID0gdHJ1ZTsNCj4gLSAgICAgICAgICAgICAgIGN0eC0+bmV0ICAgICAg ICAgICAgICAgID0gY3VycmVudC0+bnNwcm94eS0+bmV0X25zOw0KPiAtICAgICAgICAgICAgICAg Y3R4LT5sc21fb3B0cyA9IE5VTEw7DQo+IC0gICAgICAgfQ0KPiAtICAgICAgIHJldHVybiBjdHg7 DQo+IC19DQo+IC0NCj4gLXZvaWQgbmZzX2ZyZWVfcGFyc2VkX21vdW50X2RhdGEoc3RydWN0IG5m c19mc19jb250ZXh0ICpjdHgpDQo+IC17DQo+IC0gICAgICAgaWYgKGN0eCkgew0KPiAtICAgICAg ICAgICAgICAga2ZyZWUoY3R4LT5jbGllbnRfYWRkcmVzcyk7DQo+IC0gICAgICAgICAgICAgICBr ZnJlZShjdHgtPm1vdW50X3NlcnZlci5ob3N0bmFtZSk7DQo+IC0gICAgICAgICAgICAgICBrZnJl ZShjdHgtPm5mc19zZXJ2ZXIuZXhwb3J0X3BhdGgpOw0KPiAtICAgICAgICAgICAgICAga2ZyZWUo Y3R4LT5uZnNfc2VydmVyLmhvc3RuYW1lKTsNCj4gLSAgICAgICAgICAgICAgIGtmcmVlKGN0eC0+ ZnNjYWNoZV91bmlxKTsNCj4gLSAgICAgICAgICAgICAgIHNlY3VyaXR5X2ZyZWVfbW50X29wdHMo JmN0eC0+bHNtX29wdHMpOw0KPiAtICAgICAgICAgICAgICAga2ZyZWUoY3R4KTsNCj4gLSAgICAg ICB9DQo+IC19DQo+IC0NCj4gIC8qDQo+ICAgKiBTYW5pdHktY2hlY2sgYSBzZXJ2ZXIgYWRkcmVz cyBwcm92aWRlZCBieSB0aGUgbW91bnQgY29tbWFuZC4NCj4gICAqDQo+IEBAIC0zNDUsNyArMzA4 LDcgQEAgc3RhdGljIHZvaWQNCj4gbmZzX3NldF9tb3VudF90cmFuc3BvcnRfcHJvdG9jb2woc3Ry dWN0IG5mc19mc19jb250ZXh0ICpjdHgpDQo+ICAgKiBBZGQgJ2ZsYXZvcicgdG8gJ2F1dGhfaW5m bycgaWYgbm90IGFscmVhZHkgcHJlc2VudC4NCj4gICAqIFJldHVybnMgdHJ1ZSBpZiAnZmxhdm9y JyBlbmRzIHVwIGluIHRoZSBsaXN0LCBmYWxzZSBvdGhlcndpc2UNCj4gICAqLw0KPiAtc3RhdGlj IGludCBuZnNfYXV0aF9pbmZvX2FkZChzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCwNCj4gK3N0 YXRpYyBpbnQgbmZzX2F1dGhfaW5mb19hZGQoc3RydWN0IGZzX2NvbnRleHQgKmZjLA0KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfYXV0aF9pbmZvICphdXRoX2luZm8s DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnBjX2F1dGhmbGF2b3JfdCBmbGF2b3Ip DQo+ICB7DQo+IEBAIC0zNzAsOSArMzMzLDEwIEBAIHN0YXRpYyBpbnQgbmZzX2F1dGhfaW5mb19h ZGQoc3RydWN0DQo+IG5mc19mc19jb250ZXh0ICpjdHgsDQo+ICAvKg0KPiAgICogUGFyc2UgdGhl IHZhbHVlIG9mIHRoZSAnc2VjPScgb3B0aW9uLg0KPiAgICovDQo+IC1zdGF0aWMgaW50IG5mc19w YXJzZV9zZWN1cml0eV9mbGF2b3JzKHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4LA0KPiArc3Rh dGljIGludCBuZnNfcGFyc2Vfc2VjdXJpdHlfZmxhdm9ycyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMs DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZzX3BhcmFt ZXRlciAqcGFyYW0pDQo+ICB7DQo+ICsgICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHgg PSBuZnNfZmMyY29udGV4dChmYyk7DQo+ICAgICAgICAgcnBjX2F1dGhmbGF2b3JfdCBwc2V1ZG9m bGF2b3I7DQo+ICAgICAgICAgY2hhciAqc3RyaW5nID0gcGFyYW0tPnN0cmluZywgKnA7DQo+ICAg ICAgICAgaW50IHJldDsNCj4gQEAgLTQyMiw3ICszODYsNyBAQCBzdGF0aWMgaW50IG5mc19wYXJz ZV9zZWN1cml0eV9mbGF2b3JzKHN0cnVjdA0KPiBuZnNfZnNfY29udGV4dCAqY3R4LA0KPiAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gICAgICAgICAgICAgICAgIH0N Cj4gDQo+IC0gICAgICAgICAgICAgICByZXQgPSBuZnNfYXV0aF9pbmZvX2FkZChjdHgsICZjdHgt PmF1dGhfaW5mbywNCj4gcHNldWRvZmxhdm9yKTsNCj4gKyAgICAgICAgICAgICAgIHJldCA9IG5m c19hdXRoX2luZm9fYWRkKGZjLCAmY3R4LT5hdXRoX2luZm8sDQo+IHBzZXVkb2ZsYXZvcik7DQo+ ICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkNCj4gICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHJldDsNCj4gICAgICAgICB9DQo+IEBAIC00MzAsOSArMzk0LDExIEBAIHN0YXRpYyBp bnQgbmZzX3BhcnNlX3NlY3VyaXR5X2ZsYXZvcnMoc3RydWN0DQo+IG5mc19mc19jb250ZXh0ICpj dHgsDQo+ICAgICAgICAgcmV0dXJuIDA7DQo+ICB9DQo+IA0KPiAtc3RhdGljIGludCBuZnNfcGFy c2VfdmVyc2lvbl9zdHJpbmcoc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHgsDQo+ICtzdGF0aWMg aW50IG5mc19wYXJzZV92ZXJzaW9uX3N0cmluZyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsDQo+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZykNCj4g IHsNCj4gKyAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19mYzJjb250ZXh0 KGZjKTsNCj4gKw0KPiAgICAgICAgIGN0eC0+ZmxhZ3MgJj0gfk5GU19NT1VOVF9WRVIzOw0KPiAg ICAgICAgIHN3aXRjaCAobG9va3VwX2NvbnN0YW50KG5mc192ZXJzX3Rva2Vucywgc3RyaW5nLCAt MSkpIHsNCj4gICAgICAgICBjYXNlIE9wdF92ZXJzXzI6DQo+IEBAIC00NzEsMjEgKzQzNywzMSBA QCBzdGF0aWMgaW50IG5mc19wYXJzZV92ZXJzaW9uX3N0cmluZyhzdHJ1Y3QNCj4gbmZzX2ZzX2Nv bnRleHQgKmN0eCwNCj4gIC8qDQo+ICAgKiBQYXJzZSBhIHNpbmdsZSBtb3VudCBwYXJhbWV0ZXIu DQo+ICAgKi8NCj4gLXN0YXRpYyBpbnQgbmZzX2ZzX2NvbnRleHRfcGFyc2VfcGFyYW0oc3RydWN0 IG5mc19mc19jb250ZXh0ICpjdHgsDQo+ICtzdGF0aWMgaW50IG5mc19mc19jb250ZXh0X3BhcnNl X3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywNCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSkNCj4gIHsNCj4gICAgICAg ICBzdHJ1Y3QgZnNfcGFyc2VfcmVzdWx0IHJlc3VsdDsNCj4gKyAgICAgICBzdHJ1Y3QgbmZzX2Zz X2NvbnRleHQgKmN0eCA9IG5mc19mYzJjb250ZXh0KGZjKTsNCj4gICAgICAgICB1bnNpZ25lZCBz aG9ydCBwcm90b2ZhbWlseSwgbW91bnRmYW1pbHk7DQo+ICAgICAgICAgdW5zaWduZWQgaW50IGxl bjsNCj4gICAgICAgICBpbnQgcmV0LCBvcHQ7DQo+IA0KPiAgICAgICAgIGRmcHJpbnRrKE1PVU5U LCAiTkZTOiAgIHBhcnNpbmcgbmZzIG1vdW50IG9wdGlvbiAnJXMnXG4iLA0KPiBwYXJhbS0+a2V5 KTsNCj4gDQo+IC0gICAgICAgb3B0ID0gZnNfcGFyc2UoTlVMTCwgJm5mc19mc19wYXJhbWV0ZXJz LCBwYXJhbSwgJnJlc3VsdCk7DQo+ICsgICAgICAgb3B0ID0gZnNfcGFyc2UoZmMsICZuZnNfZnNf cGFyYW1ldGVycywgcGFyYW0sICZyZXN1bHQpOw0KPiAgICAgICAgIGlmIChvcHQgPCAwKQ0KPiAg ICAgICAgICAgICAgICAgcmV0dXJuIGN0eC0+c2xvcHB5ID8gMSA6IG9wdDsNCj4gDQo+ICAgICAg ICAgc3dpdGNoIChvcHQpIHsNCj4gKyAgICAgICBjYXNlIE9wdF9zb3VyY2U6DQo+ICsgICAgICAg ICAgICAgICBpZiAoZmMtPnNvdXJjZSkgew0KPiArICAgICAgICAgICAgICAgICAgICAgICBkZnBy aW50ayhNT1VOVCwgIk5GUzogTXVsdGlwbGUgc291cmNlcyBub3QNCj4gc3VwcG9ydGVkXG4iKTsN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ICsgICAgICAgICAg ICAgICB9DQo+ICsgICAgICAgICAgICAgICBmYy0+c291cmNlID0gcGFyYW0tPnN0cmluZzsNCj4g KyAgICAgICAgICAgICAgIHBhcmFtLT5zdHJpbmcgPSBOVUxMOw0KPiArICAgICAgICAgICAgICAg YnJlYWs7DQo+ICsNCj4gICAgICAgICAgICAgICAgIC8qDQo+ICAgICAgICAgICAgICAgICAgKiBi b29sZWFuIG9wdGlvbnM6ICBmb28vbm9mb28NCj4gICAgICAgICAgICAgICAgICAqLw0KPiBAQCAt NjQ5LDE3ICs2MjUsMTcgQEAgc3RhdGljIGludCBuZnNfZnNfY29udGV4dF9wYXJzZV9wYXJhbShz dHJ1Y3QNCj4gbmZzX2ZzX2NvbnRleHQgKmN0eCwNCj4gICAgICAgICAgICAgICAgICAqIG9wdGlv bnMgdGhhdCB0YWtlIHRleHQgdmFsdWVzDQo+ICAgICAgICAgICAgICAgICAgKi8NCj4gICAgICAg ICBjYXNlIE9wdF92Og0KPiAtICAgICAgICAgICAgICAgcmV0ID0gbmZzX3BhcnNlX3ZlcnNpb25f c3RyaW5nKGN0eCwgcGFyYW0tPmtleSArIDEpOw0KPiArICAgICAgICAgICAgICAgcmV0ID0gbmZz X3BhcnNlX3ZlcnNpb25fc3RyaW5nKGZjLCBwYXJhbS0+a2V5ICsgMSk7DQo+ICAgICAgICAgICAg ICAgICBpZiAocmV0IDwgMCkNCj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsN Cj4gICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAgICAgICAgIGNhc2UgT3B0X3ZlcnM6DQo+IC0g ICAgICAgICAgICAgICByZXQgPSBuZnNfcGFyc2VfdmVyc2lvbl9zdHJpbmcoY3R4LCBwYXJhbS0+ c3RyaW5nKTsNCj4gKyAgICAgICAgICAgICAgIHJldCA9IG5mc19wYXJzZV92ZXJzaW9uX3N0cmlu ZyhmYywgcGFyYW0tPnN0cmluZyk7DQo+ICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkNCj4g ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gICAgICAgICAgICAgICAgIGJy ZWFrOw0KPiAgICAgICAgIGNhc2UgT3B0X3NlYzoNCj4gLSAgICAgICAgICAgICAgIHJldCA9IG5m c19wYXJzZV9zZWN1cml0eV9mbGF2b3JzKGN0eCwgcGFyYW0pOw0KPiArICAgICAgICAgICAgICAg cmV0ID0gbmZzX3BhcnNlX3NlY3VyaXR5X2ZsYXZvcnMoZmMsIHBhcmFtKTsNCj4gICAgICAgICAg ICAgICAgIGlmIChyZXQgPCAwKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0 Ow0KPiAgICAgICAgICAgICAgICAgYnJlYWs7DQo+IEBAIC03MjIsNyArNjk4LDcgQEAgc3RhdGlj IGludCBuZnNfZnNfY29udGV4dF9wYXJzZV9wYXJhbShzdHJ1Y3QNCj4gbmZzX2ZzX2NvbnRleHQg KmN0eCwNCj4gICAgICAgICAgICAgICAgIGJyZWFrOw0KPiANCj4gICAgICAgICBjYXNlIE9wdF9h ZGRyOg0KPiAtICAgICAgICAgICAgICAgbGVuID0gcnBjX3B0b24oY3R4LT5uZXQsIHBhcmFtLT5z dHJpbmcsIHBhcmFtLT5zaXplLA0KPiArICAgICAgICAgICAgICAgbGVuID0gcnBjX3B0b24oZmMt Pm5ldF9ucywgcGFyYW0tPnN0cmluZywgcGFyYW0tDQo+ID5zaXplLA0KPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmN0eC0+bmZzX3NlcnZlci5hZGRyZXNzLA0KPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0eC0+bmZzX3NlcnZlci5fYWRkcmVzcykpOw0K PiAgICAgICAgICAgICAgICAgaWYgKGxlbiA9PSAwKQ0KPiBAQCAtNzQwLDcgKzcxNiw3IEBAIHN0 YXRpYyBpbnQgbmZzX2ZzX2NvbnRleHRfcGFyc2VfcGFyYW0oc3RydWN0DQo+IG5mc19mc19jb250 ZXh0ICpjdHgsDQo+ICAgICAgICAgICAgICAgICBwYXJhbS0+c3RyaW5nID0gTlVMTDsNCj4gICAg ICAgICAgICAgICAgIGJyZWFrOw0KPiAgICAgICAgIGNhc2UgT3B0X21vdW50YWRkcjoNCj4gLSAg ICAgICAgICAgICAgIGxlbiA9IHJwY19wdG9uKGN0eC0+bmV0LCBwYXJhbS0+c3RyaW5nLCBwYXJh bS0+c2l6ZSwNCj4gKyAgICAgICAgICAgICAgIGxlbiA9IHJwY19wdG9uKGZjLT5uZXRfbnMsIHBh cmFtLT5zdHJpbmcsIHBhcmFtLQ0KPiA+c2l6ZSwNCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZjdHgtPm1vdW50X3NlcnZlci5hZGRyZXNzLA0KPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKGN0eC0+bW91bnRfc2VydmVyLl9hZGRyZXNzKSk7DQo+ICAgICAg ICAgICAgICAgICBpZiAobGVuID09IDApDQo+IEBAIC04MTEsMTE0ICs3ODcsOCBAQCBzdGF0aWMg aW50IG5mc19mc19jb250ZXh0X3BhcnNlX3BhcmFtKHN0cnVjdA0KPiBuZnNfZnNfY29udGV4dCAq Y3R4LA0KPiAgICAgICAgIHJldHVybiAtRVJBTkdFOw0KPiAgfQ0KPiANCj4gLS8qIGNyaWJiZWQg ZnJvbSBnZW5lcmljX3BhcnNlX21vbm9saXRoaWMgYW5kIHZmc19wYXJzZV9mc19zdHJpbmcgKi8N Cj4gLXN0YXRpYyBpbnQgbmZzX2ZzX2NvbnRleHRfcGFyc2Vfb3B0aW9uKHN0cnVjdCBuZnNfZnNf Y29udGV4dCAqY3R4LA0KPiBjaGFyICpwKQ0KPiAtew0KPiAtICAgICAgIGludCByZXQ7DQo+IC0g ICAgICAgY2hhciAqa2V5ID0gcCwgKnZhbHVlOw0KPiAtICAgICAgIHNpemVfdCB2X3NpemUgPSAw Ow0KPiAtICAgICAgIHN0cnVjdCBmc19wYXJhbWV0ZXIgcGFyYW07DQo+IC0NCj4gLSAgICAgICBt ZW1zZXQoJnBhcmFtLCAwLCBzaXplb2YocGFyYW0pKTsNCj4gLSAgICAgICB2YWx1ZSA9IHN0cmNo cihrZXksICc9Jyk7DQo+IC0gICAgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9IGtleSkgew0KPiAt ICAgICAgICAgICAgICAgKnZhbHVlKysgPSAwOw0KPiAtICAgICAgICAgICAgICAgdl9zaXplID0g c3RybGVuKHZhbHVlKTsNCj4gLSAgICAgICB9DQo+IC0gICAgICAgcGFyYW0ua2V5ID0ga2V5Ow0K PiAtICAgICAgIHBhcmFtLnR5cGUgPSBmc192YWx1ZV9pc19mbGFnOw0KPiAtICAgICAgIHBhcmFt LnNpemUgPSB2X3NpemU7DQo+IC0gICAgICAgaWYgKHZfc2l6ZSA+IDApIHsNCj4gLSAgICAgICAg ICAgICAgIHBhcmFtLnR5cGUgPSBmc192YWx1ZV9pc19zdHJpbmc7DQo+IC0gICAgICAgICAgICAg ICBwYXJhbS5zdHJpbmcgPSBrbWVtZHVwX251bCh2YWx1ZSwgdl9zaXplLA0KPiBHRlBfS0VSTkVM KTsNCj4gLSAgICAgICAgICAgICAgIGlmICghcGFyYW0uc3RyaW5nKQ0KPiAtICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gLSAgICAgICB9DQo+IC0gICAgICAgcmV0ID0g bmZzX2ZzX2NvbnRleHRfcGFyc2VfcGFyYW0oY3R4LCAmcGFyYW0pOw0KPiAtICAgICAgIGtmcmVl KHBhcmFtLnN0cmluZyk7DQo+IC0gICAgICAgcmV0dXJuIHJldDsNCj4gLX0NCj4gLQ0KPiAgLyoN Cj4gLSAqIEVycm9yLWNoZWNrIGFuZCBjb252ZXJ0IGEgc3RyaW5nIG9mIG1vdW50IG9wdGlvbnMg ZnJvbSB1c2VyIHNwYWNlDQo+IGludG8NCj4gLSAqIGEgZGF0YSBzdHJ1Y3R1cmUuICBUaGUgd2hv bGUgbW91bnQgc3RyaW5nIGlzIHByb2Nlc3NlZDsgYmFkDQo+IG9wdGlvbnMgYXJlDQo+IC0gKiBz a2lwcGVkIGFzIHRoZXkgYXJlIGVuY291bnRlcmVkLiAgSWYgdGhlcmUgd2VyZSBubyBlcnJvcnMs IHJldHVybg0KPiAxOw0KPiAtICogb3RoZXJ3aXNlIHJldHVybiAwICh6ZXJvKS4NCj4gLSAqLw0K PiAtaW50IG5mc19wYXJzZV9tb3VudF9vcHRpb25zKGNoYXIgKnJhdywgc3RydWN0IG5mc19mc19j b250ZXh0ICpjdHgpDQo+IC17DQo+IC0gICAgICAgY2hhciAqcDsNCj4gLSAgICAgICBpbnQgcmMs IHNsb3BweSA9IDAsIGludmFsaWRfb3B0aW9uID0gMDsNCj4gLQ0KPiAtICAgICAgIGlmICghcmF3 KSB7DQo+IC0gICAgICAgICAgICAgICBkZnByaW50ayhNT1VOVCwgIk5GUzogbW91bnQgb3B0aW9u cyBzdHJpbmcgd2FzDQo+IE5VTEwuXG4iKTsNCj4gLSAgICAgICAgICAgICAgIHJldHVybiAxOw0K PiAtICAgICAgIH0NCj4gLSAgICAgICBkZnByaW50ayhNT1VOVCwgIk5GUzogbmZzIG1vdW50IG9w dHM9JyVzJ1xuIiwgcmF3KTsNCj4gLQ0KPiAtICAgICAgIHJjID0gc2VjdXJpdHlfc2JfZWF0X2xz bV9vcHRzKHJhdywgJmN0eC0+bHNtX29wdHMpOw0KPiAtICAgICAgIGlmIChyYykNCj4gLSAgICAg ICAgICAgICAgIGdvdG8gb3V0X3NlY3VyaXR5X2ZhaWx1cmU7DQo+IC0NCj4gLSAgICAgICB3aGls ZSAoKHAgPSBzdHJzZXAoJnJhdywgIiwiKSkgIT0gTlVMTCkgew0KPiAtICAgICAgICAgICAgICAg aWYgKCEqcCkNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+IC0gICAgICAg ICAgICAgICBpZiAobmZzX2ZzX2NvbnRleHRfcGFyc2Vfb3B0aW9uKGN0eCwgcCkgPCAwKQ0KPiAt ICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkX29wdGlvbiA9IHRydWU7DQo+IC0gICAgICAg fQ0KPiAtDQo+IC0gICAgICAgaWYgKCFzbG9wcHkgJiYgaW52YWxpZF9vcHRpb24pDQo+IC0gICAg ICAgICAgICAgICByZXR1cm4gMDsNCj4gLQ0KPiAtICAgICAgIGlmIChjdHgtPm1pbm9ydmVyc2lv biAmJiBjdHgtPnZlcnNpb24gIT0gNCkNCj4gLSAgICAgICAgICAgICAgIGdvdG8gb3V0X21pbm9y dmVyc2lvbl9taXNtYXRjaDsNCj4gLQ0KPiAtICAgICAgIGlmIChjdHgtPm9wdGlvbnMgJiBORlNf T1BUSU9OX01JR1JBVElPTiAmJg0KPiAtICAgICAgICAgICAoY3R4LT52ZXJzaW9uICE9IDQgfHwg Y3R4LT5taW5vcnZlcnNpb24gIT0gMCkpDQo+IC0gICAgICAgICAgICAgICBnb3RvIG91dF9taWdy YXRpb25fbWlzdXNlOw0KPiAtDQo+IC0gICAgICAgLyoNCj4gLSAgICAgICAgKiB2ZXJpZnkgdGhh dCBhbnkgcHJvdG89L21vdW50cHJvdG89IG9wdGlvbnMgbWF0Y2ggdGhlDQo+IGFkZHJlc3MNCj4g LSAgICAgICAgKiBmYW1pbGllcyBpbiB0aGUgYWRkcj0vbW91bnRhZGRyPSBvcHRpb25zLg0KPiAt ICAgICAgICAqLw0KPiAtICAgICAgIGlmIChjdHgtPnByb3RvZmFtaWx5ICE9IEFGX1VOU1BFQyAm Jg0KPiAtICAgICAgICAgICBjdHgtPnByb3RvZmFtaWx5ICE9IGN0eC0+bmZzX3NlcnZlci5hZGRy ZXNzLnNhX2ZhbWlseSkNCj4gLSAgICAgICAgICAgICAgIGdvdG8gb3V0X3Byb3RvX21pc21hdGNo Ow0KPiAtDQo+IC0gICAgICAgaWYgKGN0eC0+bW91bnRmYW1pbHkgIT0gQUZfVU5TUEVDKSB7DQo+ IC0gICAgICAgICAgICAgICBpZiAoY3R4LT5tb3VudF9zZXJ2ZXIuYWRkcmxlbikgew0KPiAtICAg ICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5tb3VudGZhbWlseSAhPSBjdHgtDQo+ID5tb3Vu dF9zZXJ2ZXIuYWRkcmVzcy5zYV9mYW1pbHkpDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ290byBvdXRfbW91bnRwcm90b19taXNtYXRjaDsNCj4gLSAgICAgICAgICAgICAgIH0g ZWxzZSB7DQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPm1vdW50ZmFtaWx5ICE9 IGN0eC0NCj4gPm5mc19zZXJ2ZXIuYWRkcmVzcy5zYV9mYW1pbHkpDQo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ290byBvdXRfbW91bnRwcm90b19taXNtYXRjaDsNCj4gLSAgICAg ICAgICAgICAgIH0NCj4gLSAgICAgICB9DQo+IC0NCj4gLSAgICAgICByZXR1cm4gMTsNCj4gLQ0K PiAtb3V0X21pbm9ydmVyc2lvbl9taXNtYXRjaDoNCj4gLSAgICAgICBwcmludGsoS0VSTl9JTkZP ICJORlM6IG1vdW50IG9wdGlvbiB2ZXJzPSV1IGRvZXMgbm90IHN1cHBvcnQNCj4gIg0KPiAtICAg ICAgICAgICAgICAgICAgICAgICAgIm1pbm9ydmVyc2lvbj0ldVxuIiwgY3R4LT52ZXJzaW9uLCBj dHgtDQo+ID5taW5vcnZlcnNpb24pOw0KPiAtICAgICAgIHJldHVybiAwOw0KPiAtb3V0X21vdW50 cHJvdG9fbWlzbWF0Y2g6DQo+IC0gICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiTkZTOiBtb3VudCBz ZXJ2ZXIgYWRkcmVzcyBkb2VzIG5vdCBtYXRjaA0KPiBtb3VudHByb3RvPSAiDQo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAib3B0aW9uXG4iKTsNCj4gLSAgICAgICByZXR1cm4gMDsNCj4gLW91 dF9wcm90b19taXNtYXRjaDoNCj4gLSAgICAgICBwcmludGsoS0VSTl9JTkZPICJORlM6IHNlcnZl ciBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIHByb3RvPQ0KPiBvcHRpb25cbiIpOw0KPiAtICAgICAg IHJldHVybiAwOw0KPiAtb3V0X21pZ3JhdGlvbl9taXN1c2U6DQo+IC0gICAgICAgcHJpbnRrKEtF Uk5fSU5GTw0KPiAtICAgICAgICAgICAgICAgIk5GUzogJ21pZ3JhdGlvbicgbm90IHN1cHBvcnRl ZCBmb3IgdGhpcyBORlMNCj4gdmVyc2lvblxuIik7DQo+IC0gICAgICAgcmV0dXJuIC1FSU5WQUw7 DQo+IC1vdXRfc2VjdXJpdHlfZmFpbHVyZToNCj4gLSAgICAgICBwcmludGsoS0VSTl9JTkZPICJO RlM6IHNlY3VyaXR5IG9wdGlvbnMgaW52YWxpZDogJWRcbiIsIHJjKTsNCj4gLSAgICAgICByZXR1 cm4gMDsNCj4gLX0NCj4gLQ0KPiAtLyoNCj4gLSAqIFNwbGl0ICJkZXZfbmFtZSIgaW50byAiaG9z dG5hbWU6ZXhwb3J0X3BhdGgiLg0KPiArICogU3BsaXQgZmMtPnNvdXJjZSBpbnRvICJob3N0bmFt ZTpleHBvcnRfcGF0aCIuDQo+ICAgKg0KPiAgICogVGhlIGxlZnRtb3N0IGNvbG9uIGRlbWFya3Mg dGhlIHNwbGl0IGJldHdlZW4gdGhlIHNlcnZlcidzDQo+IGhvc3RuYW1lDQo+ICAgKiBhbmQgdGhl IGV4cG9ydCBwYXRoLiAgSWYgdGhlIGhvc3RuYW1lIHN0YXJ0cyB3aXRoIGEgbGVmdCBzcXVhcmUN Cj4gQEAgLTkyNiwxMiArNzk2LDEzIEBAIGludCBuZnNfcGFyc2VfbW91bnRfb3B0aW9ucyhjaGFy ICpyYXcsIHN0cnVjdA0KPiBuZnNfZnNfY29udGV4dCAqY3R4KQ0KPiAgICoNCj4gICAqIE5vdGU6 IGNhbGxlciBmcmVlcyBob3N0bmFtZSBhbmQgZXhwb3J0IHBhdGgsIGV2ZW4gb24gZXJyb3IuDQo+ ICAgKi8NCj4gLXN0YXRpYyBpbnQgbmZzX3BhcnNlX2Rldm5hbWUoc3RydWN0IG5mc19mc19jb250 ZXh0ICpjdHgsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2 X25hbWUsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heG5hbWxlbiwg c2l6ZV90IG1heHBhdGhsZW4pDQo+ICtzdGF0aWMgaW50IG5mc19wYXJzZV9zb3VyY2Uoc3RydWN0 IGZzX2NvbnRleHQgKmZjLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1h eG5hbWxlbiwgc2l6ZV90IG1heHBhdGhsZW4pDQo+ICB7DQo+ICsgICAgICAgc3RydWN0IG5mc19m c19jb250ZXh0ICpjdHggPSBuZnNfZmMyY29udGV4dChmYyk7DQo+ICsgICAgICAgY29uc3QgY2hh ciAqZGV2X25hbWUgPSBmYy0+c291cmNlOw0KPiAgICAgICAgIHNpemVfdCBsZW47DQo+IC0gICAg ICAgY2hhciAqZW5kOw0KPiArICAgICAgIGNvbnN0IGNoYXIgKmVuZDsNCj4gDQo+ICAgICAgICAg aWYgKHVubGlrZWx5KCFkZXZfbmFtZSB8fCAhKmRldl9uYW1lKSkgew0KPiAgICAgICAgICAgICAg ICAgZGZwcmludGsoTU9VTlQsICJORlM6IGRldmljZSBuYW1lIG5vdCBzcGVjaWZpZWRcbiIpOw0K PiBAQCAtOTQ3LDcgKzgxOCw3IEBAIHN0YXRpYyBpbnQgbmZzX3BhcnNlX2Rldm5hbWUoc3RydWN0 DQo+IG5mc19mc19jb250ZXh0ICpjdHgsDQo+ICAgICAgICAgICAgICAgICBsZW4gPSBlbmQgLSBk ZXZfbmFtZTsNCj4gICAgICAgICAgICAgICAgIGVuZCsrOw0KPiAgICAgICAgIH0gZWxzZSB7DQo+ IC0gICAgICAgICAgICAgICBjaGFyICpjb21tYTsNCj4gKyAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmNvbW1hOw0KPiANCj4gICAgICAgICAgICAgICAgIGVuZCA9IHN0cmNocihkZXZfbmFtZSwg JzonKTsNCj4gICAgICAgICAgICAgICAgIGlmIChlbmQgPT0gTlVMTCkNCj4gQEAgLTk1NSw4ICs4 MjYsOCBAQCBzdGF0aWMgaW50IG5mc19wYXJzZV9kZXZuYW1lKHN0cnVjdA0KPiBuZnNfZnNfY29u dGV4dCAqY3R4LA0KPiAgICAgICAgICAgICAgICAgbGVuID0gZW5kIC0gZGV2X25hbWU7DQo+IA0K PiAgICAgICAgICAgICAgICAgLyoga2lsbCBwb3NzaWJsZSBob3N0bmFtZSBsaXN0OiBub3Qgc3Vw cG9ydGVkICovDQo+IC0gICAgICAgICAgICAgICBjb21tYSA9IHN0cmNocihkZXZfbmFtZSwgJywn KTsNCj4gLSAgICAgICAgICAgICAgIGlmIChjb21tYSAhPSBOVUxMICYmIGNvbW1hIDwgZW5kKQ0K PiArICAgICAgICAgICAgICAgY29tbWEgPSBtZW1jaHIoZGV2X25hbWUsICcsJywgbGVuKTsNCj4g KyAgICAgICAgICAgICAgIGlmIChjb21tYSkNCj4gICAgICAgICAgICAgICAgICAgICAgICAgbGVu ID0gY29tbWEgLSBkZXZfbmFtZTsNCj4gICAgICAgICB9DQo+IA0KPiBAQCAtOTk0LDYgKzg2NSwx MSBAQCBzdGF0aWMgaW50IG5mc19wYXJzZV9kZXZuYW1lKHN0cnVjdA0KPiBuZnNfZnNfY29udGV4 dCAqY3R4LA0KPiAgICAgICAgIHJldHVybiAtRU5BTUVUT09MT05HOw0KPiAgfQ0KPiANCj4gK3N0 YXRpYyBpbmxpbmUgYm9vbCBpc19yZW1vdW50X2ZjKHN0cnVjdCBmc19jb250ZXh0ICpmYykNCj4g K3sNCj4gKyAgICAgICByZXR1cm4gZmMtPnJvb3QgIT0gTlVMTDsNCj4gK30NCj4gKw0KPiAgLyoN Cj4gICAqIFBhcnNlIG1vbm9saXRoaWMgTkZTMi9ORlMzIG1vdW50IGRhdGENCj4gICAqIC0gZmls bHMgaW4gdGhlIG1vdW50IHJvb3QgZmlsZWhhbmRsZQ0KPiBAQCAtMTAxMCwxMiArODg2LDExIEBA IHN0YXRpYyBpbnQgbmZzX3BhcnNlX2Rldm5hbWUoc3RydWN0DQo+IG5mc19mc19jb250ZXh0ICpj dHgsDQo+ICAgKiArIGJyZWFraW5nIGJhY2s6IHRyeWluZyBwcm90bz11ZHAgYWZ0ZXIgcHJvdG89 dGNwLCB2MiBhZnRlciB2MywNCj4gICAqICAgbW91bnRwcm90bz10Y3AgYWZ0ZXIgbW91bnRwcm90 bz11ZHAsIGFuZCBzbyBvbg0KPiAgICovDQo+IC1zdGF0aWMgaW50IG5mczIzX3ZhbGlkYXRlX21v dW50X2RhdGEodm9pZCAqb3B0aW9ucywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4LA0KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IG5mc19maCAqbW50ZmgsDQo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZfbmFtZSkNCj4gK3N0YXRpYyBp bnQgbmZzMjNfcGFyc2VfbW9ub2xpdGhpYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX21vdW50X2RhdGEgKmRhdGEp DQo+ICB7DQo+IC0gICAgICAgc3RydWN0IG5mc19tb3VudF9kYXRhICpkYXRhID0gKHN0cnVjdCBu ZnNfbW91bnRfZGF0YQ0KPiAqKW9wdGlvbnM7DQo+ICsgICAgICAgc3RydWN0IG5mc19mc19jb250 ZXh0ICpjdHggPSBuZnNfZmMyY29udGV4dChmYyk7DQo+ICsgICAgICAgc3RydWN0IG5mc19maCAq bW50ZmggPSBjdHgtPm1udGZoOw0KPiAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc2FwID0gKHN0 cnVjdCBzb2NrYWRkciAqKSZjdHgtDQo+ID5uZnNfc2VydmVyLmFkZHJlc3M7DQo+ICAgICAgICAg aW50IGV4dHJhX2ZsYWdzID0gTkZTX01PVU5UX0xFR0FDWV9JTlRFUkZBQ0U7DQo+IA0KPiBAQCAt MTA4Nyw2ICs5NjIsOSBAQCBzdGF0aWMgaW50IG5mczIzX3ZhbGlkYXRlX21vdW50X2RhdGEodm9p ZA0KPiAqb3B0aW9ucywNCj4gICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5uZnNfc2VydmVy LnByb3RvY29sID0NCj4gWFBSVF9UUkFOU1BPUlRfVURQOw0KPiAgICAgICAgICAgICAgICAgLyog Ti5CLiBjYWxsZXIgd2lsbCBmcmVlIG5mc19zZXJ2ZXIuaG9zdG5hbWUgaW4gYWxsDQo+IGNhc2Vz ICovDQo+ICAgICAgICAgICAgICAgICBjdHgtPm5mc19zZXJ2ZXIuaG9zdG5hbWUgPSBrc3RyZHVw KGRhdGEtPmhvc3RuYW1lLA0KPiBHRlBfS0VSTkVMKTsNCj4gKyAgICAgICAgICAgICAgIGlmICgh Y3R4LT5uZnNfc2VydmVyLmhvc3RuYW1lKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IG91dF9ub21lbTsNCj4gKw0KPiAgICAgICAgICAgICAgICAgY3R4LT5uYW1sZW4gICAgICAgICAg ICAgPSBkYXRhLT5uYW1sZW47DQo+ICAgICAgICAgICAgICAgICBjdHgtPmJzaXplICAgICAgICAg ICAgICA9IGRhdGEtPmJzaXplOw0KPiANCj4gQEAgLTEwOTQsOCArOTcyLDYgQEAgc3RhdGljIGlu dCBuZnMyM192YWxpZGF0ZV9tb3VudF9kYXRhKHZvaWQNCj4gKm9wdGlvbnMsDQo+ICAgICAgICAg ICAgICAgICAgICAgICAgIGN0eC0+c2VsZWN0ZWRfZmxhdm9yID0gZGF0YS0+cHNldWRvZmxhdm9y Ow0KPiAgICAgICAgICAgICAgICAgZWxzZQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICBjdHgt PnNlbGVjdGVkX2ZsYXZvciA9IFJQQ19BVVRIX1VOSVg7DQo+IC0gICAgICAgICAgICAgICBpZiAo IWN0eC0+bmZzX3NlcnZlci5ob3N0bmFtZSkNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZ290 byBvdXRfbm9tZW07DQo+IA0KPiAgICAgICAgICAgICAgICAgaWYgKCEoZGF0YS0+ZmxhZ3MgJiBO RlNfTU9VTlRfTk9OTE0pKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmZsYWdzICY9 IH4oTkZTX01PVU5UX0xPQ0FMX0ZMT0NLfA0KPiBAQCAtMTEwMyw2ICs5NzksNyBAQCBzdGF0aWMg aW50IG5mczIzX3ZhbGlkYXRlX21vdW50X2RhdGEodm9pZA0KPiAqb3B0aW9ucywNCj4gICAgICAg ICAgICAgICAgIGVsc2UNCj4gICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5mbGFncyB8PSAo TkZTX01PVU5UX0xPQ0FMX0ZMT0NLfA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTkZTX01PVU5UX0xPQ0FMX0ZDTlRMKTsNCj4gKw0KPiAgICAgICAgICAgICAgICAg LyoNCj4gICAgICAgICAgICAgICAgICAqIFRoZSBsZWdhY3kgdmVyc2lvbiA2IGJpbmFyeSBtb3Vu dCBkYXRhIGZyb20NCj4gdXNlcnNwYWNlIGhhcyBhDQo+ICAgICAgICAgICAgICAgICAgKiBmaWVs ZCB1c2VkIG9ubHkgdG8gdHJhbnNwb3J0IHNlbGludXggaW5mb3JtYXRpb24NCj4gaW50byB0aGUN Cj4gQEAgLTExMTMsMTIgKzk5MCwxMyBAQCBzdGF0aWMgaW50IG5mczIzX3ZhbGlkYXRlX21vdW50 X2RhdGEodm9pZA0KPiAqb3B0aW9ucywNCj4gICAgICAgICAgICAgICAgICAqLw0KPiAgICAgICAg ICAgICAgICAgaWYgKGRhdGEtPmNvbnRleHRbMF0pew0KPiAgI2lmZGVmIENPTkZJR19TRUNVUklU WV9TRUxJTlVYDQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGludCByYzsNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgaW50IHJldDsNCj4gKw0KPiAgICAgICAgICAgICAgICAgICAgICAgICBk YXRhLT5jb250ZXh0W05GU19NQVhfQ09OVEVYVF9MRU5dID0gJ1wwJzsNCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgcmMgPSBzZWN1cml0eV9hZGRfbW50X29wdCgiY29udGV4dCIsIGRhdGEtDQo+ ID5jb250ZXh0LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry bGVuKGRhdGEtPmNvbnRleHQpLCBjdHgtDQo+ID5sc21fb3B0cyk7DQo+IC0gICAgICAgICAgICAg ICAgICAgICAgIGlmIChyYykNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gcmM7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHZmc19wYXJzZV9mc19zdHJp bmcoZmMsICJjb250ZXh0IiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkYXRhLT5jb250ZXh0LA0KPiBzdHJsZW4oZGF0YS0+Y29udGV4dCkpOw0K PiArICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiAgI2Vsc2UNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ICAjZW5kaWYNCj4gQEAgLTExMjYsMTIgKzEwMDQs MjAgQEAgc3RhdGljIGludCBuZnMyM192YWxpZGF0ZV9tb3VudF9kYXRhKHZvaWQNCj4gKm9wdGlv bnMsDQo+IA0KPiAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAgICAgZGVmYXVsdDoNCj4g LSAgICAgICAgICAgICAgIHJldHVybiBORlNfVEVYVF9EQVRBOw0KPiArICAgICAgICAgICAgICAg Z290byBnZW5lcmljOw0KPiAgICAgICAgIH0NCj4gDQo+ICsgICAgICAgY3R4LT5za2lwX3JlY29u ZmlnX29wdGlvbl9jaGVjayA9IHRydWU7DQo+ICAgICAgICAgcmV0dXJuIDA7DQo+IA0KPiArZ2Vu ZXJpYzoNCj4gKyAgICAgICByZXR1cm4gZ2VuZXJpY19wYXJzZV9tb25vbGl0aGljKGZjLCBkYXRh KTsNCj4gKw0KPiAgb3V0X25vX2RhdGE6DQo+ICsgICAgICAgaWYgKGlzX3JlbW91bnRfZmMoZmMp KSB7DQo+ICsgICAgICAgICAgICAgICBjdHgtPnNraXBfcmVjb25maWdfb3B0aW9uX2NoZWNrID0g dHJ1ZTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybiAwOw0KPiArICAgICAgIH0NCj4gICAgICAg ICBkZnByaW50ayhNT1VOVCwgIk5GUzogbW91bnQgcHJvZ3JhbSBkaWRuJ3QgcGFzcyBhbnkgbW91 bnQNCj4gZGF0YVxuIik7DQo+ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiBAQCAtMTE1 NywyMiArMTA0MywxNCBAQCBzdGF0aWMgaW50IG5mczIzX3ZhbGlkYXRlX21vdW50X2RhdGEodm9p ZA0KPiAqb3B0aW9ucywNCj4gICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gIH0NCj4gDQo+IC0j aWYgSVNfRU5BQkxFRChDT05GSUdfTkZTX1Y0KQ0KPiAtc3RhdGljIHZvaWQgbmZzNF92YWxpZGF0 ZV9tb3VudF9mbGFncyhzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCkNCj4gLXsNCj4gLSAgICAg ICBjdHgtPmZsYWdzICY9DQo+IH4oTkZTX01PVU5UX05PTkxNfE5GU19NT1VOVF9OT0FDTHxORlNf TU9VTlRfVkVSM3wNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIE5GU19NT1VOVF9MT0NBTF9G TE9DS3xORlNfTU9VTlRfTE9DQUxfRkNOVEwpDQo+IDsNCj4gLX0NCj4gLQ0KPiAgLyoNCj4gICAq IFZhbGlkYXRlIE5GU3Y0IG1vdW50IG9wdGlvbnMNCj4gICAqLw0KPiAtc3RhdGljIGludCBuZnM0 X3ZhbGlkYXRlX21vdW50X2RhdGEodm9pZCAqb3B0aW9ucywNCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHgsDQo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRldl9uYW1lKQ0KPiArc3Rh dGljIGludCBuZnM0X3BhcnNlX21vbm9saXRoaWMoc3RydWN0IGZzX2NvbnRleHQgKmZjLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzNF9tb3VudF9kYXRhICpk YXRhKQ0KDQpDYW4gd2Uga2VlcCB0aGUgSVNfRU5BQkxFRChDT05GSUdfTkZTX1Y0KSBkZWZpbmUg YXJvdW5kIHRoZQ0KbmZzNF9wYXJzZV9tb25vbGl0aGljKCkgZnVuY3Rpb24/IE90aGVyd2lzZSwg d2UnbGwgZ2V0IG5ldyBkZWZpbmVkLWJ1dC0NCm5vdC11c2VkIHdhcm5pbmdzIHdoZW4gY29tcGls aW5nOiANCg0KZnMvbmZzL2ZzX2NvbnRleHQuYzoxMDQ5OjEyOiBlcnJvcjog4oCYbmZzNF9wYXJz ZV9tb25vbGl0aGlj4oCZIGRlZmluZWQgYnV0DQpub3QgdXNlZCBbLVdlcnJvcj11bnVzZWQtZnVu Y3Rpb25dDQogMTA0OSB8IHN0YXRpYyBpbnQgbmZzNF9wYXJzZV9tb25vbGl0aGljKHN0cnVjdCBm c19jb250ZXh0ICpmYywNCiAgICAgIHwgICAgICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fn4N Cg0KVGhhbmtzLA0KQW5uYQ0KDQo+ICB7DQo+ICsgICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0 ICpjdHggPSBuZnNfZmMyY29udGV4dChmYyk7DQo+ICAgICAgICAgc3RydWN0IHNvY2thZGRyICpz YXAgPSAoc3RydWN0IHNvY2thZGRyICopJmN0eC0NCj4gPm5mc19zZXJ2ZXIuYWRkcmVzczsNCj4g LSAgICAgICBzdHJ1Y3QgbmZzNF9tb3VudF9kYXRhICpkYXRhID0gKHN0cnVjdCBuZnM0X21vdW50 X2RhdGENCj4gKilvcHRpb25zOw0KPiAgICAgICAgIGNoYXIgKmM7DQo+IA0KPiAgICAgICAgIGlm IChkYXRhID09IE5VTEwpDQo+IEBAIC0xMjIyLDcgKzExMDAsNyBAQCBzdGF0aWMgaW50IG5mczRf dmFsaWRhdGVfbW91bnRfZGF0YSh2b2lkDQo+ICpvcHRpb25zLA0KPiAgICAgICAgICAgICAgICAg Y3R4LT5jbGllbnRfYWRkcmVzcyA9IGM7DQo+IA0KPiAgICAgICAgICAgICAgICAgLyoNCj4gLSAg ICAgICAgICAgICAgICAqIFRyYW5zbGF0ZSB0byBuZnNfZnNfY29udGV4dCwgd2hpY2ggbmZzNF9m aWxsX3N1cGVyDQo+ICsgICAgICAgICAgICAgICAgKiBUcmFuc2xhdGUgdG8gbmZzX2ZzX2NvbnRl eHQsIHdoaWNoIG5mc19maWxsX3N1cGVyDQo+ICAgICAgICAgICAgICAgICAgKiBjYW4gZGVhbCB3 aXRoLg0KPiAgICAgICAgICAgICAgICAgICovDQo+IA0KPiBAQCAtMTI0MiwxMiArMTEyMCwyMCBA QCBzdGF0aWMgaW50IG5mczRfdmFsaWRhdGVfbW91bnRfZGF0YSh2b2lkDQo+ICpvcHRpb25zLA0K PiANCj4gICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAgICAgICAgIGRlZmF1bHQ6DQo+IC0gICAg ICAgICAgICAgICByZXR1cm4gTkZTX1RFWFRfREFUQTsNCj4gKyAgICAgICAgICAgICAgIGdvdG8g Z2VuZXJpYzsNCj4gICAgICAgICB9DQo+IA0KPiArICAgICAgIGN0eC0+c2tpcF9yZWNvbmZpZ19v cHRpb25fY2hlY2sgPSB0cnVlOw0KPiAgICAgICAgIHJldHVybiAwOw0KPiANCj4gK2dlbmVyaWM6 DQo+ICsgICAgICAgcmV0dXJuIGdlbmVyaWNfcGFyc2VfbW9ub2xpdGhpYyhmYywgZGF0YSk7DQo+ ICsNCj4gIG91dF9ub19kYXRhOg0KPiArICAgICAgIGlmIChpc19yZW1vdW50X2ZjKGZjKSkgew0K PiArICAgICAgICAgICAgICAgY3R4LT5za2lwX3JlY29uZmlnX29wdGlvbl9jaGVjayA9IHRydWU7 DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gKyAgICAgICB9DQo+ICAgICAgICAgZGZw cmludGsoTU9VTlQsICJORlM0OiBtb3VudCBwcm9ncmFtIGRpZG4ndCBwYXNzIGFueSBtb3VudA0K PiBkYXRhXG4iKTsNCj4gICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gDQo+IEBAIC0xMjY1LDU3 ICsxMTUxLDg1IEBAIHN0YXRpYyBpbnQgbmZzNF92YWxpZGF0ZV9tb3VudF9kYXRhKHZvaWQNCj4g Km9wdGlvbnMsDQo+ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ICB9DQo+IA0KPiAtaW50IG5m c192YWxpZGF0ZV9tb3VudF9kYXRhKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLA0K PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3B0aW9ucywNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4LA0KPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5mc19maCAqbW50ZmgsDQo+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZfbmFtZSkNCj4gLXsNCj4gLSAgICAgICBp ZiAoZnNfdHlwZSA9PSAmbmZzX2ZzX3R5cGUpDQo+IC0gICAgICAgICAgICAgICByZXR1cm4gbmZz MjNfdmFsaWRhdGVfbW91bnRfZGF0YShvcHRpb25zLCBjdHgsIG1udGZoLA0KPiBkZXZfbmFtZSk7 DQo+IC0gICAgICAgcmV0dXJuIG5mczRfdmFsaWRhdGVfbW91bnRfZGF0YShvcHRpb25zLCBjdHgs IGRldl9uYW1lKTsNCj4gLX0NCj4gLSNlbHNlDQo+IC1pbnQgbmZzX3ZhbGlkYXRlX21vdW50X2Rh dGEoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsDQo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpvcHRpb25zLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IG5mc19mc19jb250ZXh0ICpjdHgsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgbmZzX2ZoICptbnRmaCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKmRldl9uYW1lKQ0KPiArLyoNCj4gKyAqIFBhcnNlIGEgbW9ub2xpdGhpYyBibG9j ayBvZiBkYXRhIGZyb20gc3lzX21vdW50KCkuDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgbmZzX2Zz X2NvbnRleHRfcGFyc2VfbW9ub2xpdGhpYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQ0KPiAgew0K PiAtICAgICAgIHJldHVybiBuZnMyM192YWxpZGF0ZV9tb3VudF9kYXRhKG9wdGlvbnMsIGN0eCwg bW50ZmgsDQo+IGRldl9uYW1lKTsNCj4gLX0NCj4gKyAgICAgICBpZiAoZmMtPmZzX3R5cGUgPT0g Jm5mc19mc190eXBlKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuIG5mczIzX3BhcnNlX21vbm9s aXRoaWMoZmMsIGRhdGEpOw0KPiArDQo+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZTX1Y0KQ0K PiArICAgICAgIGlmIChmYy0+ZnNfdHlwZSA9PSAmbmZzNF9mc190eXBlKQ0KPiArICAgICAgICAg ICAgICAgcmV0dXJuIG5mczRfcGFyc2VfbW9ub2xpdGhpYyhmYywgZGF0YSk7DQo+ICAjZW5kaWYN Cj4gDQo+IC1pbnQgbmZzX3ZhbGlkYXRlX3RleHRfbW91bnRfZGF0YSh2b2lkICpvcHRpb25zLA0K PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQg KmN0eCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2 X25hbWUpDQo+ICsgICAgICAgZGZwcmludGsoTU9VTlQsICJORlM6IFVuc3VwcG9ydGVkIG1vbm9s aXRoaWMgZGF0YQ0KPiB2ZXJzaW9uXG4iKTsNCj4gKyAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4g K30NCj4gKw0KPiArLyoNCj4gKyAqIFZhbGlkYXRlIHRoZSBwcmVwYXJzZWQgaW5mb3JtYXRpb24g aW4gdGhlIGNvbmZpZy4NCj4gKyAqLw0KPiArc3RhdGljIGludCBuZnNfZnNfY29udGV4dF92YWxp ZGF0ZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpDQo+ICB7DQo+IC0gICAgICAgaW50IHBvcnQgPSAw Ow0KPiArICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQo ZmMpOw0KPiArICAgICAgIHN0cnVjdCBuZnNfc3VidmVyc2lvbiAqbmZzX21vZDsNCj4gKyAgICAg ICBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmY3R4LQ0KPiA+bmZz X3NlcnZlci5hZGRyZXNzOw0KPiAgICAgICAgIGludCBtYXhfbmFtZWxlbiA9IFBBR0VfU0laRTsN Cj4gICAgICAgICBpbnQgbWF4X3BhdGhsZW4gPSBORlNfTUFYUEFUSExFTjsNCj4gLSAgICAgICBz dHJ1Y3Qgc29ja2FkZHIgKnNhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmY3R4LQ0KPiA+bmZzX3Nl cnZlci5hZGRyZXNzOw0KPiArICAgICAgIGludCBwb3J0ID0gMDsNCj4gKyAgICAgICBpbnQgcmV0 Ow0KPiANCj4gLSAgICAgICBpZiAobmZzX3BhcnNlX21vdW50X29wdGlvbnMoKGNoYXIgKilvcHRp b25zLCBjdHgpID09IDApDQo+IC0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gKyAg ICAgICBpZiAoIWZjLT5zb3VyY2UpDQo+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9ub19kZXZp Y2VfbmFtZTsNCj4gKw0KPiArICAgICAgIC8qIENoZWNrIGZvciBzYW5pdHkgZmlyc3QuICovDQo+ ICsgICAgICAgaWYgKGN0eC0+bWlub3J2ZXJzaW9uICYmIGN0eC0+dmVyc2lvbiAhPSA0KQ0KPiAr ICAgICAgICAgICAgICAgZ290byBvdXRfbWlub3J2ZXJzaW9uX21pc21hdGNoOw0KPiArDQo+ICsg ICAgICAgaWYgKGN0eC0+b3B0aW9ucyAmIE5GU19PUFRJT05fTUlHUkFUSU9OICYmDQo+ICsgICAg ICAgICAgIChjdHgtPnZlcnNpb24gIT0gNCB8fCBjdHgtPm1pbm9ydmVyc2lvbiAhPSAwKSkNCj4g KyAgICAgICAgICAgICAgIGdvdG8gb3V0X21pZ3JhdGlvbl9taXN1c2U7DQo+ICsNCj4gKyAgICAg ICAvKiBWZXJpZnkgdGhhdCBhbnkgcHJvdG89L21vdW50cHJvdG89IG9wdGlvbnMgbWF0Y2ggdGhl DQo+IGFkZHJlc3MNCj4gKyAgICAgICAgKiBmYW1pbGllcyBpbiB0aGUgYWRkcj0vbW91bnRhZGRy PSBvcHRpb25zLg0KPiArICAgICAgICAqLw0KPiArICAgICAgIGlmIChjdHgtPnByb3RvZmFtaWx5 ICE9IEFGX1VOU1BFQyAmJg0KPiArICAgICAgICAgICBjdHgtPnByb3RvZmFtaWx5ICE9IGN0eC0+ bmZzX3NlcnZlci5hZGRyZXNzLnNhX2ZhbWlseSkNCj4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0 X3Byb3RvX21pc21hdGNoOw0KPiArDQo+ICsgICAgICAgaWYgKGN0eC0+bW91bnRmYW1pbHkgIT0g QUZfVU5TUEVDKSB7DQo+ICsgICAgICAgICAgICAgICBpZiAoY3R4LT5tb3VudF9zZXJ2ZXIuYWRk cmxlbikgew0KPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5tb3VudGZhbWlseSAh PSBjdHgtDQo+ID5tb3VudF9zZXJ2ZXIuYWRkcmVzcy5zYV9mYW1pbHkpDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfbW91bnRwcm90b19taXNtYXRjaDsNCj4gKyAg ICAgICAgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHgt Pm1vdW50ZmFtaWx5ICE9IGN0eC0NCj4gPm5mc19zZXJ2ZXIuYWRkcmVzcy5zYV9mYW1pbHkpDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfbW91bnRwcm90b19taXNt YXRjaDsNCj4gKyAgICAgICAgICAgICAgIH0NCj4gKyAgICAgICB9DQo+IA0KPiAgICAgICAgIGlm ICghbmZzX3ZlcmlmeV9zZXJ2ZXJfYWRkcmVzcyhzYXApKQ0KPiAgICAgICAgICAgICAgICAgZ290 byBvdXRfbm9fYWRkcmVzczsNCj4gDQo+ICAgICAgICAgaWYgKGN0eC0+dmVyc2lvbiA9PSA0KSB7 DQo+IC0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZTX1Y0KQ0KPiAtICAgICAgICAgICAgICAgaWYg KGN0eC0+bmZzX3NlcnZlci5wcm90b2NvbCA9PSBYUFJUX1RSQU5TUE9SVF9SRE1BKQ0KPiAtICAg ICAgICAgICAgICAgICAgICAgICBwb3J0ID0gTkZTX1JETUFfUE9SVDsNCj4gLSAgICAgICAgICAg ICAgIGVsc2UNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IE5GU19QT1JUOw0KPiAt ICAgICAgICAgICAgICAgbWF4X25hbWVsZW4gPSBORlM0X01BWE5BTUxFTjsNCj4gLSAgICAgICAg ICAgICAgIG1heF9wYXRobGVuID0gTkZTNF9NQVhQQVRITEVOOw0KPiAtICAgICAgICAgICAgICAg bmZzX3ZhbGlkYXRlX3RyYW5zcG9ydF9wcm90b2NvbChjdHgpOw0KPiAtICAgICAgICAgICAgICAg aWYgKGN0eC0+bmZzX3NlcnZlci5wcm90b2NvbCA9PSBYUFJUX1RSQU5TUE9SVF9VRFApDQo+IC0g ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X2ludmFsaWRfdHJhbnNwb3J0X3VkcDsNCj4g LSAgICAgICAgICAgICAgIG5mczRfdmFsaWRhdGVfbW91bnRfZmxhZ3MoY3R4KTsNCj4gLSNlbHNl DQo+IC0gICAgICAgICAgICAgICBnb3RvIG91dF92NF9ub3RfY29tcGlsZWQ7DQo+IC0jZW5kaWYg LyogQ09ORklHX05GU19WNCAqLw0KPiArICAgICAgICAgICAgICAgaWYgKElTX0VOQUJMRUQoQ09O RklHX05GU19WNCkpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+bmZzX3Nl cnZlci5wcm90b2NvbCA9PQ0KPiBYUFJUX1RSQU5TUE9SVF9SRE1BKQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBvcnQgPSBORlNfUkRNQV9QT1JUOw0KPiArICAgICAgICAgICAg ICAgICAgICAgICBlbHNlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9 IE5GU19QT1JUOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBtYXhfbmFtZWxlbiA9IE5GUzRf TUFYTkFNTEVOOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGF0aGxlbiA9IE5GUzRf TUFYUEFUSExFTjsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgbmZzX3ZhbGlkYXRlX3RyYW5z cG9ydF9wcm90b2NvbChjdHgpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5u ZnNfc2VydmVyLnByb3RvY29sID09DQo+IFhQUlRfVFJBTlNQT1JUX1VEUCkNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF9pbnZhbGlkX3RyYW5zcG9ydF91ZHA7DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ZmxhZ3MgJj0gfihORlNfTU9VTlRfTk9OTE0g fA0KPiBORlNfTU9VTlRfTk9BQ0wgfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTkZTX01PVU5UX1ZFUjMgfA0KPiBORlNfTU9VTlRfTE9DQUxfRkxPQ0sgfA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkZTX01PVU5UX0xPQ0FMX0ZD TlRMKTsNCj4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gb3V0X3Y0X25vdF9jb21waWxlZDsNCj4gKyAgICAgICAgICAgICAgIH0NCj4gICAg ICAgICB9IGVsc2Ugew0KPiAgICAgICAgICAgICAgICAgbmZzX3NldF9tb3VudF90cmFuc3BvcnRf cHJvdG9jb2woY3R4KTsNCj4gICAgICAgICAgICAgICAgIGlmIChjdHgtPm5mc19zZXJ2ZXIucHJv dG9jb2wgPT0gWFBSVF9UUkFOU1BPUlRfUkRNQSkNCj4gQEAgLTEzMjQsMTkgKzEyMzgsMjE5IEBA IGludCBuZnNfdmFsaWRhdGVfdGV4dF9tb3VudF9kYXRhKHZvaWQNCj4gKm9wdGlvbnMsDQo+IA0K PiAgICAgICAgIG5mc19zZXRfcG9ydChzYXAsICZjdHgtPm5mc19zZXJ2ZXIucG9ydCwgcG9ydCk7 DQo+IA0KPiAtICAgICAgIHJldHVybiBuZnNfcGFyc2VfZGV2bmFtZShjdHgsIGRldl9uYW1lLCBt YXhfbmFtZWxlbiwNCj4gbWF4X3BhdGhsZW4pOw0KPiArICAgICAgIHJldCA9IG5mc19wYXJzZV9z b3VyY2UoZmMsIG1heF9uYW1lbGVuLCBtYXhfcGF0aGxlbik7DQo+ICsgICAgICAgaWYgKHJldCA8 IDApDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiArDQo+ICsgICAgICAgLyogTG9h ZCB0aGUgTkZTIHByb3RvY29sIG1vZHVsZSBpZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0ICovDQo+ ICsgICAgICAgaWYgKCFjdHgtPm5mc19tb2QpIHsNCj4gKyAgICAgICAgICAgICAgIG5mc19tb2Qg PSBnZXRfbmZzX3ZlcnNpb24oY3R4LT52ZXJzaW9uKTsNCj4gKyAgICAgICAgICAgICAgIGlmIChJ U19FUlIobmZzX21vZCkpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gUFRSX0VS UihuZnNfbW9kKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfdmVyc2lvbl91 bmF2YWlsYWJsZTsNCj4gKyAgICAgICAgICAgICAgIH0NCj4gKyAgICAgICAgICAgICAgIGN0eC0+ bmZzX21vZCA9IG5mc19tb2Q7DQo+ICsgICAgICAgfQ0KPiArICAgICAgIHJldHVybiAwOw0KPiAN Cj4gLSNpZiAhSVNfRU5BQkxFRChDT05GSUdfTkZTX1Y0KQ0KPiArb3V0X25vX2RldmljZV9uYW1l Og0KPiArICAgICAgIGRmcHJpbnRrKE1PVU5ULCAiTkZTOiBEZXZpY2UgbmFtZSBub3Qgc3BlY2lm aWVkXG4iKTsNCj4gKyAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gIG91dF92NF9ub3RfY29tcGls ZWQ6DQo+ICAgICAgICAgZGZwcmludGsoTU9VTlQsICJORlM6IE5GU3Y0IGlzIG5vdCBjb21waWxl ZCBpbnRvIGtlcm5lbFxuIik7DQo+ICAgICAgICAgcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7DQo+ IC0jZWxzZQ0KPiAgb3V0X2ludmFsaWRfdHJhbnNwb3J0X3VkcDoNCj4gICAgICAgICBkZnByaW50 ayhNT1VOVCwgIk5GU3Y0OiBVbnN1cHBvcnRlZCB0cmFuc3BvcnQgcHJvdG9jb2wNCj4gdWRwXG4i KTsNCj4gICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gLSNlbmRpZiAvKiAhQ09ORklHX05GU19W NCAqLw0KPiAtDQo+ICBvdXRfbm9fYWRkcmVzczoNCj4gICAgICAgICBkZnByaW50ayhNT1VOVCwg Ik5GUzogbW91bnQgcHJvZ3JhbSBkaWRuJ3QgcGFzcyByZW1vdGUNCj4gYWRkcmVzc1xuIik7DQo+ ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ICtvdXRfbW91bnRwcm90b19taXNtYXRjaDoNCj4g KyAgICAgICBkZnByaW50ayhNT1VOVCwgIk5GUzogTW91bnQgc2VydmVyIGFkZHJlc3MgZG9lcyBu b3QgbWF0Y2gNCj4gbW91bnRwcm90bz0gb3B0aW9uXG4iKTsNCj4gKyAgICAgICByZXR1cm4gLUVJ TlZBTDsNCj4gK291dF9wcm90b19taXNtYXRjaDoNCj4gKyAgICAgICBkZnByaW50ayhNT1VOVCwg Ik5GUzogU2VydmVyIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggcHJvdG89DQo+IG9wdGlvblxuIik7 DQo+ICsgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ICtvdXRfbWlub3J2ZXJzaW9uX21pc21hdGNo Og0KPiArICAgICAgIGRmcHJpbnRrKE1PVU5ULCAiTkZTOiBNb3VudCBvcHRpb24gdmVycz0ldSBk b2VzIG5vdCBzdXBwb3J0DQo+IG1pbm9ydmVyc2lvbj0ldVxuIiwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICBjdHgtPnZlcnNpb24sIGN0eC0+bWlub3J2ZXJzaW9uKTsNCj4gKyAgICAgICBy ZXR1cm4gLUVJTlZBTDsNCj4gK291dF9taWdyYXRpb25fbWlzdXNlOg0KPiArICAgICAgIGRmcHJp bnRrKE1PVU5ULCAiTkZTOiAnTWlncmF0aW9uJyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIE5GUw0K PiB2ZXJzaW9uXG4iKTsNCj4gKyAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gK291dF92ZXJzaW9u X3VuYXZhaWxhYmxlOg0KPiArICAgICAgIGRmcHJpbnRrKE1PVU5ULCAiTkZTOiBWZXJzaW9uIHVu YXZhaWxhYmxlXG4iKTsNCj4gKyAgICAgICByZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICsvKg0K PiArICogQ3JlYXRlIGFuIE5GUyBzdXBlcmJsb2NrIGJ5IHRoZSBhcHByb3ByaWF0ZSBtZXRob2Qu DQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgbmZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpm YykNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19mYzJj b250ZXh0KGZjKTsNCj4gKyAgICAgICBpbnQgZXJyID0gbmZzX2ZzX2NvbnRleHRfdmFsaWRhdGUo ZmMpOw0KPiArDQo+ICsgICAgICAgaWYgKGVycikNCj4gKyAgICAgICAgICAgICAgIHJldHVybiBl cnI7DQo+ICsgICAgICAgaWYgKCFjdHgtPmludGVybmFsKQ0KPiArICAgICAgICAgICAgICAgcmV0 dXJuIGN0eC0+bmZzX21vZC0+cnBjX29wcy0+dHJ5X2dldF90cmVlKGZjKTsNCj4gKyAgICAgICBl bHNlDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gbmZzX2dldF90cmVlX2NvbW1vbihmYyk7DQo+ ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBIYW5kbGUgZHVwbGljYXRpb24gb2YgYSBjb25maWd1cmF0 aW9uLiAgVGhlIGNhbGxlciBjb3BpZWQgKnNyYw0KPiBpbnRvICpzYywgYnV0DQo+ICsgKiBpdCBj YW4ndCBkZWFsIHdpdGggcmVzb3VyY2UgcG9pbnRlcnMgaW4gdGhlIGZpbGVzeXN0ZW0gY29udGV4 dCwNCj4gc28gd2UgaGF2ZQ0KPiArICogdG8gZG8gdGhhdC4gIFdlIG5lZWQgdG8gY2xlYXIgcG9p bnRlcnMsIGNvcHkgZGF0YSBvciBnZXQgZXh0cmENCj4gcmVmcyBhcw0KPiArICogYXBwcm9wcmlh dGUuDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgbmZzX2ZzX2NvbnRleHRfZHVwKHN0cnVjdCBmc19j b250ZXh0ICpmYywgc3RydWN0DQo+IGZzX2NvbnRleHQgKnNyY19mYykNCj4gK3sNCj4gKyAgICAg ICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKnNyYyA9IG5mc19mYzJjb250ZXh0KHNyY19mYyksICpj dHg7DQo+ICsNCj4gKyAgICAgICBjdHggPSBrbWVtZHVwKHNyYywgc2l6ZW9mKHN0cnVjdCBuZnNf ZnNfY29udGV4dCksDQo+IEdGUF9LRVJORUwpOw0KPiArICAgICAgIGlmICghY3R4KQ0KPiArICAg ICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKyAgICAgICBjdHgtPm1udGZoID0g bmZzX2FsbG9jX2ZoYW5kbGUoKTsNCj4gKyAgICAgICBpZiAoIWN0eC0+bW50ZmgpIHsNCj4gKyAg ICAgICAgICAgICAgIGtmcmVlKGN0eCk7DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT01F TTsNCj4gKyAgICAgICB9DQo+ICsgICAgICAgbmZzX2NvcHlfZmgoY3R4LT5tbnRmaCwgc3JjLT5t bnRmaCk7DQo+ICsNCj4gKyAgICAgICBfX21vZHVsZV9nZXQoY3R4LT5uZnNfbW9kLT5vd25lcik7 DQo+ICsgICAgICAgY3R4LT5jbGllbnRfYWRkcmVzcyAgICAgICAgICAgICA9IE5VTEw7DQo+ICsg ICAgICAgY3R4LT5tb3VudF9zZXJ2ZXIuaG9zdG5hbWUgICAgICA9IE5VTEw7DQo+ICsgICAgICAg Y3R4LT5uZnNfc2VydmVyLmV4cG9ydF9wYXRoICAgICA9IE5VTEw7DQo+ICsgICAgICAgY3R4LT5u ZnNfc2VydmVyLmhvc3RuYW1lICAgICAgICA9IE5VTEw7DQo+ICsgICAgICAgY3R4LT5mc2NhY2hl X3VuaXEgICAgICAgICAgICAgICA9IE5VTEw7DQo+ICsgICAgICAgZmMtPmZzX3ByaXZhdGUgPSBj dHg7DQo+ICsgICAgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG5mc19m c19jb250ZXh0X2ZyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQ0KPiArew0KPiArICAgICAgIHN0 cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMpOw0KPiArDQo+ICsg ICAgICAgaWYgKGN0eCkgew0KPiArICAgICAgICAgICAgICAgaWYgKGN0eC0+c2VydmVyKQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICBuZnNfZnJlZV9zZXJ2ZXIoY3R4LT5zZXJ2ZXIpOw0KPiAr ICAgICAgICAgICAgICAgaWYgKGN0eC0+bmZzX21vZCkNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgcHV0X25mc192ZXJzaW9uKGN0eC0+bmZzX21vZCk7DQo+ICsgICAgICAgICAgICAgICBrZnJl ZShjdHgtPmNsaWVudF9hZGRyZXNzKTsNCj4gKyAgICAgICAgICAgICAgIGtmcmVlKGN0eC0+bW91 bnRfc2VydmVyLmhvc3RuYW1lKTsNCj4gKyAgICAgICAgICAgICAgIGtmcmVlKGN0eC0+bmZzX3Nl cnZlci5leHBvcnRfcGF0aCk7DQo+ICsgICAgICAgICAgICAgICBrZnJlZShjdHgtPm5mc19zZXJ2 ZXIuaG9zdG5hbWUpOw0KPiArICAgICAgICAgICAgICAga2ZyZWUoY3R4LT5mc2NhY2hlX3VuaXEp Ow0KPiArICAgICAgICAgICAgICAgbmZzX2ZyZWVfZmhhbmRsZShjdHgtPm1udGZoKTsNCj4gKyAg ICAgICAgICAgICAgIGtmcmVlKGN0eCk7DQo+ICsgICAgICAgfQ0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBuZnNfZnNfY29udGV4dF9vcHMg PSB7DQo+ICsgICAgICAgLmZyZWUgICAgICAgICAgICAgICAgICAgPSBuZnNfZnNfY29udGV4dF9m cmVlLA0KPiArICAgICAgIC5kdXAgICAgICAgICAgICAgICAgICAgID0gbmZzX2ZzX2NvbnRleHRf ZHVwLA0KPiArICAgICAgIC5wYXJzZV9wYXJhbSAgICAgICAgICAgID0gbmZzX2ZzX2NvbnRleHRf cGFyc2VfcGFyYW0sDQo+ICsgICAgICAgLnBhcnNlX21vbm9saXRoaWMgICAgICAgPSBuZnNfZnNf Y29udGV4dF9wYXJzZV9tb25vbGl0aGljLA0KPiArICAgICAgIC5nZXRfdHJlZSAgICAgICAgICAg ICAgID0gbmZzX2dldF90cmVlLA0KPiArICAgICAgIC5yZWNvbmZpZ3VyZSAgICAgICAgICAgID0g bmZzX3JlY29uZmlndXJlLA0KPiArfTsNCj4gKw0KPiArLyoNCj4gKyAqIFByZXBhcmUgc3VwZXJi bG9jayBjb25maWd1cmF0aW9uLiAgV2UgdXNlIHRoZSBuYW1lc3BhY2VzIGF0dGFjaGVkDQo+IHRv IHRoZQ0KPiArICogY29udGV4dC4gIFRoaXMgbWF5IGJlIHRoZSBjdXJyZW50IHByb2Nlc3MncyBu YW1lc3BhY2VzLCBvciBpdCBtYXkNCj4gYmUgYQ0KPiArICogY29udGFpbmVyJ3MgbmFtZXNwYWNl cy4NCj4gKyAqLw0KPiArc3RhdGljIGludCBuZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19j b250ZXh0ICpmYykNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eDsN Cj4gKw0KPiArICAgICAgIGN0eCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZnNfZnNfY29udGV4 dCksIEdGUF9LRVJORUwpOw0KPiArICAgICAgIGlmICh1bmxpa2VseSghY3R4KSkNCj4gKyAgICAg ICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsgICAgICAgY3R4LT5tbnRmaCA9IG5m c19hbGxvY19maGFuZGxlKCk7DQo+ICsgICAgICAgaWYgKHVubGlrZWx5KCFjdHgtPm1udGZoKSkg ew0KPiArICAgICAgICAgICAgICAga2ZyZWUoY3R4KTsNCj4gKyAgICAgICAgICAgICAgIHJldHVy biAtRU5PTUVNOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIGN0eC0+cHJvdG9mYW1pbHkg ICAgICAgID0gQUZfVU5TUEVDOw0KPiArICAgICAgIGN0eC0+bW91bnRmYW1pbHkgICAgICAgID0g QUZfVU5TUEVDOw0KPiArICAgICAgIGN0eC0+bW91bnRfc2VydmVyLnBvcnQgID0gTkZTX1VOU1BF Q19QT1JUOw0KPiArDQo+ICsgICAgICAgaWYgKGZjLT5yb290KSB7DQo+ICsgICAgICAgICAgICAg ICAvKiByZWNvbmZpZ3VyZSwgc3RhcnQgd2l0aCB0aGUgY3VycmVudCBjb25maWcgKi8NCj4gKyAg ICAgICAgICAgICAgIHN0cnVjdCBuZnNfc2VydmVyICpuZnNzID0gZmMtPnJvb3QtPmRfc2ItPnNf ZnNfaW5mbzsNCj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBuZXQgKm5ldCA9IG5mc3MtPm5mc19j bGllbnQtPmNsX25ldDsNCj4gKw0KPiArICAgICAgICAgICAgICAgY3R4LT5mbGFncyAgICAgICAg ICAgICAgPSBuZnNzLT5mbGFnczsNCj4gKyAgICAgICAgICAgICAgIGN0eC0+cnNpemUgICAgICAg ICAgICAgID0gbmZzcy0+cnNpemU7DQo+ICsgICAgICAgICAgICAgICBjdHgtPndzaXplICAgICAg ICAgICAgICA9IG5mc3MtPndzaXplOw0KPiArICAgICAgICAgICAgICAgY3R4LT5yZXRyYW5zICAg ICAgICAgICAgPSBuZnNzLT5jbGllbnQtPmNsX3RpbWVvdXQtDQo+ID50b19yZXRyaWVzOw0KPiAr ICAgICAgICAgICAgICAgY3R4LT5zZWxlY3RlZF9mbGF2b3IgICAgPSBuZnNzLT5jbGllbnQtPmNs X2F1dGgtDQo+ID5hdV9mbGF2b3I7DQo+ICsgICAgICAgICAgICAgICBjdHgtPmFjcmVnbWluICAg ICAgICAgICA9IG5mc3MtPmFjcmVnbWluIC8gSFo7DQo+ICsgICAgICAgICAgICAgICBjdHgtPmFj cmVnbWF4ICAgICAgICAgICA9IG5mc3MtPmFjcmVnbWF4IC8gSFo7DQo+ICsgICAgICAgICAgICAg ICBjdHgtPmFjZGlybWluICAgICAgICAgICA9IG5mc3MtPmFjZGlybWluIC8gSFo7DQo+ICsgICAg ICAgICAgICAgICBjdHgtPmFjZGlybWF4ICAgICAgICAgICA9IG5mc3MtPmFjZGlybWF4IC8gSFo7 DQo+ICsgICAgICAgICAgICAgICBjdHgtPnRpbWVvICAgICAgICAgICAgICA9IDEwVSAqIG5mc3Mt PmNsaWVudC0NCj4gPmNsX3RpbWVvdXQtPnRvX2luaXR2YWwgLyBIWjsNCj4gKyAgICAgICAgICAg ICAgIGN0eC0+bmZzX3NlcnZlci5wb3J0ICAgID0gbmZzcy0+cG9ydDsNCj4gKyAgICAgICAgICAg ICAgIGN0eC0+bmZzX3NlcnZlci5hZGRybGVuID0gbmZzcy0+bmZzX2NsaWVudC0NCj4gPmNsX2Fk ZHJsZW47DQo+ICsgICAgICAgICAgICAgICBjdHgtPnZlcnNpb24gICAgICAgICAgICA9IG5mc3Mt Pm5mc19jbGllbnQtPnJwY19vcHMtDQo+ID52ZXJzaW9uOw0KPiArICAgICAgICAgICAgICAgY3R4 LT5taW5vcnZlcnNpb24gICAgICAgPSBuZnNzLT5uZnNfY2xpZW50LQ0KPiA+Y2xfbWlub3J2ZXJz aW9uOw0KPiArDQo+ICsgICAgICAgICAgICAgICBtZW1jcHkoJmN0eC0+bmZzX3NlcnZlci5hZGRy ZXNzLCAmbmZzcy0+bmZzX2NsaWVudC0NCj4gPmNsX2FkZHIsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgIGN0eC0+bmZzX3NlcnZlci5hZGRybGVuKTsNCj4gKw0KPiArICAgICAgICAgICAgICAg aWYgKGZjLT5uZXRfbnMgIT0gbmV0KSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHB1dF9u ZXQoZmMtPm5ldF9ucyk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGZjLT5uZXRfbnMgPSBn ZXRfbmV0KG5ldCk7DQo+ICsgICAgICAgICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgICAg IGN0eC0+bmZzX21vZCA9IG5mc3MtPm5mc19jbGllbnQtPmNsX25mc19tb2Q7DQo+ICsgICAgICAg ICAgICAgICBfX21vZHVsZV9nZXQoY3R4LT5uZnNfbW9kLT5vd25lcik7DQo+ICsgICAgICAgfSBl bHNlIHsNCj4gKyAgICAgICAgICAgICAgIC8qIGRlZmF1bHRzICovDQo+ICsgICAgICAgICAgICAg ICBjdHgtPnRpbWVvICAgICAgICAgICAgICA9IE5GU19VTlNQRUNfVElNRU87DQo+ICsgICAgICAg ICAgICAgICBjdHgtPnJldHJhbnMgICAgICAgICAgICA9IE5GU19VTlNQRUNfUkVUUkFOUzsNCj4g KyAgICAgICAgICAgICAgIGN0eC0+YWNyZWdtaW4gICAgICAgICAgID0gTkZTX0RFRl9BQ1JFR01J TjsNCj4gKyAgICAgICAgICAgICAgIGN0eC0+YWNyZWdtYXggICAgICAgICAgID0gTkZTX0RFRl9B Q1JFR01BWDsNCj4gKyAgICAgICAgICAgICAgIGN0eC0+YWNkaXJtaW4gICAgICAgICAgID0gTkZT X0RFRl9BQ0RJUk1JTjsNCj4gKyAgICAgICAgICAgICAgIGN0eC0+YWNkaXJtYXggICAgICAgICAg ID0gTkZTX0RFRl9BQ0RJUk1BWDsNCj4gKyAgICAgICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5w b3J0ICAgID0gTkZTX1VOU1BFQ19QT1JUOw0KPiArICAgICAgICAgICAgICAgY3R4LT5uZnNfc2Vy dmVyLnByb3RvY29sID0gWFBSVF9UUkFOU1BPUlRfVENQOw0KPiArICAgICAgICAgICAgICAgY3R4 LT5zZWxlY3RlZF9mbGF2b3IgICAgPSBSUENfQVVUSF9NQVhGTEFWT1I7DQo+ICsgICAgICAgICAg ICAgICBjdHgtPm1pbm9ydmVyc2lvbiAgICAgICA9IDA7DQo+ICsgICAgICAgICAgICAgICBjdHgt Pm5lZWRfbW91bnQgICAgICAgICA9IHRydWU7DQo+ICsgICAgICAgfQ0KPiArICAgICAgIGZjLT5m c19wcml2YXRlID0gY3R4Ow0KPiArICAgICAgIGZjLT5vcHMgPSAmbmZzX2ZzX2NvbnRleHRfb3Bz Ow0KPiArICAgICAgIHJldHVybiAwOw0KPiAgfQ0KPiArDQo+ICtzdHJ1Y3QgZmlsZV9zeXN0ZW1f dHlwZSBuZnNfZnNfdHlwZSA9IHsNCj4gKyAgICAgICAub3duZXIgICAgICAgICAgICAgICAgICA9 IFRISVNfTU9EVUxFLA0KPiArICAgICAgIC5uYW1lICAgICAgICAgICAgICAgICAgID0gIm5mcyIs DQo+ICsgICAgICAgLmluaXRfZnNfY29udGV4dCAgICAgICAgPSBuZnNfaW5pdF9mc19jb250ZXh0 LA0KPiArICAgICAgIC5wYXJhbWV0ZXJzICAgICAgICAgICAgID0gJm5mc19mc19wYXJhbWV0ZXJz LA0KPiArICAgICAgIC5raWxsX3NiICAgICAgICAgICAgICAgID0gbmZzX2tpbGxfc3VwZXIsDQo+ ICsgICAgICAgLmZzX2ZsYWdzICAgICAgICAgICAgICAgPQ0KPiBGU19SRU5BTUVfRE9FU19EX01P VkV8RlNfQklOQVJZX01PVU5UREFUQSwNCj4gK307DQo+ICtNT0RVTEVfQUxJQVNfRlMoIm5mcyIp Ow0KPiArRVhQT1JUX1NZTUJPTF9HUEwobmZzX2ZzX3R5cGUpOw0KPiArDQo+ICsjaWYgSVNfRU5B QkxFRChDT05GSUdfTkZTX1Y0KQ0KPiArc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbmZzNF9mc190 eXBlID0gew0KPiArICAgICAgIC5vd25lciAgICAgICAgICAgICAgICAgID0gVEhJU19NT0RVTEUs DQo+ICsgICAgICAgLm5hbWUgICAgICAgICAgICAgICAgICAgPSAibmZzNCIsDQo+ICsgICAgICAg LmluaXRfZnNfY29udGV4dCAgICAgICAgPSBuZnNfaW5pdF9mc19jb250ZXh0LA0KPiArICAgICAg IC5wYXJhbWV0ZXJzICAgICAgICAgICAgID0gJm5mc19mc19wYXJhbWV0ZXJzLA0KPiArICAgICAg IC5raWxsX3NiICAgICAgICAgICAgICAgID0gbmZzX2tpbGxfc3VwZXIsDQo+ICsgICAgICAgLmZz X2ZsYWdzICAgICAgICAgICAgICAgPQ0KPiBGU19SRU5BTUVfRE9FU19EX01PVkV8RlNfQklOQVJZ X01PVU5UREFUQSwNCj4gK307DQo+ICtNT0RVTEVfQUxJQVNfRlMoIm5mczQiKTsNCj4gK01PRFVM RV9BTElBUygibmZzNCIpOw0KPiArRVhQT1JUX1NZTUJPTF9HUEwobmZzNF9mc190eXBlKTsNCj4g KyNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0ICovDQo+IGRpZmYgLS1naXQgYS9mcy9uZnMvZnNjYWNo ZS5jIGIvZnMvbmZzL2ZzY2FjaGUuYw0KPiBpbmRleCAzODAwYWI2ZjA4ZmEuLjRhOGRmOGMzMGEw MyAxMDA2NDQNCj4gLS0tIGEvZnMvbmZzL2ZzY2FjaGUuYw0KPiArKysgYi9mcy9uZnMvZnNjYWNo ZS5jDQo+IEBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBuZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29v a2llKHN0cnVjdA0KPiBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKnVuaXEsIGludA0KPiAg ICAgICAgICAgICAgICAgcmV0dXJuOw0KPiANCj4gICAgICAgICBrZXktPm5mc19jbGllbnQgPSBu ZnNzLT5uZnNfY2xpZW50Ow0KPiAtICAgICAgIGtleS0+a2V5LnN1cGVyLnNfZmxhZ3MgPSBzYi0+ c19mbGFncyAmIE5GU19NU19NQVNLOw0KPiArICAgICAgIGtleS0+a2V5LnN1cGVyLnNfZmxhZ3Mg PSBzYi0+c19mbGFncyAmIE5GU19TQl9NQVNLOw0KPiAgICAgICAgIGtleS0+a2V5Lm5mc19zZXJ2 ZXIuZmxhZ3MgPSBuZnNzLT5mbGFnczsNCj4gICAgICAgICBrZXktPmtleS5uZnNfc2VydmVyLnJz aXplID0gbmZzcy0+cnNpemU7DQo+ICAgICAgICAga2V5LT5rZXkubmZzX3NlcnZlci53c2l6ZSA9 IG5mc3MtPndzaXplOw0KPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL2dldHJvb3QuYyBiL2ZzL25mcy9n ZXRyb290LmMNCj4gaW5kZXggODc4YzRjNTk4MmQ5Li5hYjQ1NDk2ZDIzYTYgMTAwNjQ0DQo+IC0t LSBhL2ZzL25mcy9nZXRyb290LmMNCj4gKysrIGIvZnMvbmZzL2dldHJvb3QuYw0KPiBAQCAtNjQs NjYgKzY0LDY4IEBAIHN0YXRpYyBpbnQgbmZzX3N1cGVyYmxvY2tfc2V0X2R1bW15X3Jvb3Qoc3Ry dWN0DQo+IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppDQo+ICAvKg0KPiAgICogZ2V0 IGFuIE5GUzIvTkZTMyByb290IGRlbnRyeSBmcm9tIHRoZSByb290IGZpbGVoYW5kbGUNCj4gICAq Lw0KPiAtc3RydWN0IGRlbnRyeSAqbmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2Is IHN0cnVjdCBuZnNfZmgNCj4gKm1udGZoLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqZGV2bmFtZSkNCj4gK2ludCBuZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Js b2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpDQo+ICB7DQo+IC0gICAgICAgc3RydWN0IG5m c19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TQihzYik7DQo+ICsgICAgICAgc3RydWN0IG5mc19mc19j b250ZXh0ICpjdHggPSBuZnNfZmMyY29udGV4dChmYyk7DQo+ICsgICAgICAgc3RydWN0IG5mc19z ZXJ2ZXIgKnNlcnZlciA9IE5GU19TQihzKTsNCj4gICAgICAgICBzdHJ1Y3QgbmZzX2ZzaW5mbyBm c2luZm87DQo+IC0gICAgICAgc3RydWN0IGRlbnRyeSAqcmV0Ow0KPiArICAgICAgIHN0cnVjdCBk ZW50cnkgKnJvb3Q7DQo+ICAgICAgICAgc3RydWN0IGlub2RlICppbm9kZTsNCj4gLSAgICAgICB2 b2lkICpuYW1lID0ga3N0cmR1cChkZXZuYW1lLCBHRlBfS0VSTkVMKTsNCj4gLSAgICAgICBpbnQg ZXJyb3I7DQo+ICsgICAgICAgY2hhciAqbmFtZTsNCj4gKyAgICAgICBpbnQgZXJyb3IgPSAtRU5P TUVNOw0KPiANCj4gKyAgICAgICBuYW1lID0ga3N0cmR1cChmYy0+c291cmNlLCBHRlBfS0VSTkVM KTsNCj4gICAgICAgICBpZiAoIW5hbWUpDQo+IC0gICAgICAgICAgICAgICByZXR1cm4gRVJSX1BU UigtRU5PTUVNKTsNCj4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiANCj4gICAgICAgICAv KiBnZXQgdGhlIGFjdHVhbCByb290IGZvciB0aGlzIG1vdW50ICovDQo+ICAgICAgICAgZnNpbmZv LmZhdHRyID0gbmZzX2FsbG9jX2ZhdHRyKCk7DQo+IC0gICAgICAgaWYgKGZzaW5mby5mYXR0ciA9 PSBOVUxMKSB7DQo+IC0gICAgICAgICAgICAgICBrZnJlZShuYW1lKTsNCj4gLSAgICAgICAgICAg ICAgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiAtICAgICAgIH0NCj4gKyAgICAgICBpZiAo ZnNpbmZvLmZhdHRyID09IE5VTEwpDQo+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9uYW1lOw0K PiANCj4gLSAgICAgICBlcnJvciA9IHNlcnZlci0+bmZzX2NsaWVudC0+cnBjX29wcy0+Z2V0cm9v dChzZXJ2ZXIsIG1udGZoLA0KPiAmZnNpbmZvKTsNCj4gKyAgICAgICBlcnJvciA9IHNlcnZlci0+ bmZzX2NsaWVudC0+cnBjX29wcy0+Z2V0cm9vdChzZXJ2ZXIsIGN0eC0NCj4gPm1udGZoLCAmZnNp bmZvKTsNCj4gICAgICAgICBpZiAoZXJyb3IgPCAwKSB7DQo+ICAgICAgICAgICAgICAgICBkcHJp bnRrKCJuZnNfZ2V0X3Jvb3Q6IGdldGF0dHIgZXJyb3IgPSAlZFxuIiwNCj4gLWVycm9yKTsNCj4g LSAgICAgICAgICAgICAgIHJldCA9IEVSUl9QVFIoZXJyb3IpOw0KPiAtICAgICAgICAgICAgICAg Z290byBvdXQ7DQo+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9mYXR0cjsNCj4gICAgICAgICB9 DQo+IA0KPiAtICAgICAgIGlub2RlID0gbmZzX2ZoZ2V0KHNiLCBtbnRmaCwgZnNpbmZvLmZhdHRy LCBOVUxMKTsNCj4gKyAgICAgICBpbm9kZSA9IG5mc19maGdldChzLCBjdHgtPm1udGZoLCBmc2lu Zm8uZmF0dHIsIE5VTEwpOw0KPiAgICAgICAgIGlmIChJU19FUlIoaW5vZGUpKSB7DQo+ICAgICAg ICAgICAgICAgICBkcHJpbnRrKCJuZnNfZ2V0X3Jvb3Q6IGdldCByb290IGlub2RlIGZhaWxlZFxu Iik7DQo+IC0gICAgICAgICAgICAgICByZXQgPSBFUlJfQ0FTVChpbm9kZSk7DQo+IC0gICAgICAg ICAgICAgICBnb3RvIG91dDsNCj4gKyAgICAgICAgICAgICAgIGVycm9yID0gUFRSX0VSUihpbm9k ZSk7DQo+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9mYXR0cjsNCj4gICAgICAgICB9DQo+IA0K PiAtICAgICAgIGVycm9yID0gbmZzX3N1cGVyYmxvY2tfc2V0X2R1bW15X3Jvb3Qoc2IsIGlub2Rl KTsNCj4gLSAgICAgICBpZiAoZXJyb3IgIT0gMCkgew0KPiAtICAgICAgICAgICAgICAgcmV0ID0g RVJSX1BUUihlcnJvcik7DQo+IC0gICAgICAgICAgICAgICBnb3RvIG91dDsNCj4gLSAgICAgICB9 DQo+ICsgICAgICAgZXJyb3IgPSBuZnNfc3VwZXJibG9ja19zZXRfZHVtbXlfcm9vdChzLCBpbm9k ZSk7DQo+ICsgICAgICAgaWYgKGVycm9yICE9IDApDQo+ICsgICAgICAgICAgICAgICBnb3RvIG91 dF9mYXR0cjsNCj4gDQo+ICAgICAgICAgLyogcm9vdCBkZW50cmllcyBub3JtYWxseSBzdGFydCBv ZmYgYW5vbnltb3VzIGFuZCBnZXQgc3BsaWNlZA0KPiBpbiBsYXRlcg0KPiAgICAgICAgICAqIGlm IHRoZSBkZW50cnkgdHJlZSByZWFjaGVzIHRoZW07IGhvd2V2ZXIgaWYgdGhlIGRlbnRyeQ0KPiBh bHJlYWR5DQo+ICAgICAgICAgICogZXhpc3RzLCB3ZSdsbCBwaWNrIGl0IHVwIGF0IHRoaXMgcG9p bnQgYW5kIHVzZSBpdCBhcyB0aGUNCj4gcm9vdA0KPiAgICAgICAgICAqLw0KPiAtICAgICAgIHJl dCA9IGRfb2J0YWluX3Jvb3QoaW5vZGUpOw0KPiAtICAgICAgIGlmIChJU19FUlIocmV0KSkgew0K PiArICAgICAgIHJvb3QgPSBkX29idGFpbl9yb290KGlub2RlKTsNCj4gKyAgICAgICBpZiAoSVNf RVJSKHJvb3QpKSB7DQo+ICAgICAgICAgICAgICAgICBkcHJpbnRrKCJuZnNfZ2V0X3Jvb3Q6IGdl dCByb290IGRlbnRyeSBmYWlsZWRcbiIpOw0KPiAtICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+ ICsgICAgICAgICAgICAgICBlcnJvciA9IFBUUl9FUlIocm9vdCk7DQo+ICsgICAgICAgICAgICAg ICBnb3RvIG91dF9mYXR0cjsNCj4gICAgICAgICB9DQo+IA0KPiAtICAgICAgIHNlY3VyaXR5X2Rf aW5zdGFudGlhdGUocmV0LCBpbm9kZSk7DQo+IC0gICAgICAgc3Bpbl9sb2NrKCZyZXQtPmRfbG9j ayk7DQo+IC0gICAgICAgaWYgKElTX1JPT1QocmV0KSAmJiAhcmV0LT5kX2ZzZGF0YSAmJg0KPiAt ICAgICAgICAgICAhKHJldC0+ZF9mbGFncyAmIERDQUNIRV9ORlNGU19SRU5BTUVEKSkgew0KPiAt ICAgICAgICAgICAgICAgcmV0LT5kX2ZzZGF0YSA9IG5hbWU7DQo+ICsgICAgICAgc2VjdXJpdHlf ZF9pbnN0YW50aWF0ZShyb290LCBpbm9kZSk7DQo+ICsgICAgICAgc3Bpbl9sb2NrKCZyb290LT5k X2xvY2spOw0KPiArICAgICAgIGlmIChJU19ST09UKHJvb3QpICYmICFyb290LT5kX2ZzZGF0YSAm Jg0KPiArICAgICAgICAgICAhKHJvb3QtPmRfZmxhZ3MgJiBEQ0FDSEVfTkZTRlNfUkVOQU1FRCkp IHsNCj4gKyAgICAgICAgICAgICAgIHJvb3QtPmRfZnNkYXRhID0gbmFtZTsNCj4gICAgICAgICAg ICAgICAgIG5hbWUgPSBOVUxMOw0KPiAgICAgICAgIH0NCj4gLSAgICAgICBzcGluX3VubG9jaygm cmV0LT5kX2xvY2spOw0KPiAtb3V0Og0KPiAtICAgICAgIGtmcmVlKG5hbWUpOw0KPiArICAgICAg IHNwaW5fdW5sb2NrKCZyb290LT5kX2xvY2spOw0KPiArICAgICAgIGZjLT5yb290ID0gcm9vdDsN Cj4gKyAgICAgICBlcnJvciA9IDA7DQo+ICsNCj4gK291dF9mYXR0cjoNCj4gICAgICAgICBuZnNf ZnJlZV9mYXR0cihmc2luZm8uZmF0dHIpOw0KPiAtICAgICAgIHJldHVybiByZXQ7DQo+ICtvdXRf bmFtZToNCj4gKyAgICAgICBrZnJlZShuYW1lKTsNCj4gK291dDoNCj4gKyAgICAgICByZXR1cm4g ZXJyb3I7DQo+ICB9DQo+IGRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9p bnRlcm5hbC5oDQo+IGluZGV4IGNhYWYwYWYxYmM3Zi4uZTA5MTE4MTVlMTUzIDEwMDY0NA0KPiAt LS0gYS9mcy9uZnMvaW50ZXJuYWwuaA0KPiArKysgYi9mcy9uZnMvaW50ZXJuYWwuaA0KPiBAQCAt NCwxOCArNCwxOSBAQA0KPiAgICovDQo+IA0KPiAgI2luY2x1ZGUgIm5mczRfZnMuaCINCj4gLSNp bmNsdWRlIDxsaW51eC9tb3VudC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2ZzX2NvbnRleHQuaD4N Cj4gICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPg0KPiAgI2luY2x1ZGUgPGxpbnV4L2NyYzMy Lmg+DQo+ICAjaW5jbHVkZSA8bGludXgvc3VucnBjL2FkZHIuaD4NCj4gICNpbmNsdWRlIDxsaW51 eC9uZnNfcGFnZS5oPg0KPiAgI2luY2x1ZGUgPGxpbnV4L3dhaXRfYml0Lmg+DQo+IA0KPiAtI2Rl ZmluZSBORlNfTVNfTUFTSw0KPiAoU0JfUkRPTkxZfFNCX05PU1VJRHxTQl9OT0RFVnxTQl9OT0VY RUN8U0JfU1lOQ0hST05PVVMpDQo+ICsjZGVmaW5lIE5GU19TQl9NQVNLDQo+IChTQl9SRE9OTFl8 U0JfTk9TVUlEfFNCX05PREVWfFNCX05PRVhFQ3xTQl9TWU5DSFJPTk9VUykNCj4gDQo+ICBleHRl cm4gY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIG5mc19leHBvcnRfb3BzOw0KPiANCj4g IHN0cnVjdCBuZnNfc3RyaW5nOw0KPiArc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvcjsNCj4g DQo+ICAvKiBNYXhpbXVtIG51bWJlciBvZiByZWFkYWhlYWQgcmVxdWVzdHMNCj4gICAqIEZJWE1F OiB0aGlzIHNob3VsZCByZWFsbHkgYmUgYSBzeXNjdGwgc28gdGhhdCB1c2VycyBtYXkgdHVuZSBp dA0KPiB0byBzdWl0DQo+IEBAIC00MCwxNiArNDEsNiBAQCBzdGF0aWMgaW5saW5lIGludA0KPiBu ZnNfYXR0cl91c2VfbW91bnRlZF9vbl9maWxlaWQoc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpDQo+ ICAgICAgICAgcmV0dXJuIDE7DQo+ICB9DQo+IA0KPiAtc3RydWN0IG5mc19jbG9uZV9tb3VudCB7 DQo+IC0gICAgICAgY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsNCj4gLSAgICAgICBjb25z dCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7DQo+IC0gICAgICAgY2hhciAqaG9zdG5hbWU7DQo+IC0g ICAgICAgY2hhciAqbW50X3BhdGg7DQo+IC0gICAgICAgc3RydWN0IHNvY2thZGRyICphZGRyOw0K PiAtICAgICAgIHNpemVfdCBhZGRybGVuOw0KPiAtICAgICAgIHJwY19hdXRoZmxhdm9yX3QgYXV0 aGZsYXZvcjsNCj4gLX07DQo+IC0NCj4gIC8qDQo+ICAgKiBOb3RlOiBSRkMgMTgxMyBkb2Vzbid0 IGxpbWl0IHRoZSBudW1iZXIgb2YgYXV0aCBmbGF2b3JzIHRoYXQNCj4gICAqIGEgc2VydmVyIGNh biByZXR1cm4sIHNvIG1ha2Ugc29tZXRoaW5nIHVwLg0KPiBAQCAtOTAsNiArODEsMTAgQEAgc3Ry dWN0IG5mc19jbGllbnRfaW5pdGRhdGEgew0KPiAgICogSW4ta2VybmVsIG1vdW50IGFyZ3VtZW50 cw0KPiAgICovDQo+ICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgew0KPiArICAgICAgIGJvb2wgICAg ICAgICAgICAgICAgICAgIGludGVybmFsOw0KPiArICAgICAgIGJvb2wgICAgICAgICAgICAgICAg ICAgIHNraXBfcmVjb25maWdfb3B0aW9uX2NoZWNrOw0KPiArICAgICAgIGJvb2wgICAgICAgICAg ICAgICAgICAgIG5lZWRfbW91bnQ7DQo+ICsgICAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAg c2xvcHB5Ow0KPiAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIGZsYWdzOyAgICAgICAg ICAvKiBORlN7LDR9X01PVU5UXyoNCj4gZmxhZ3MgKi8NCj4gICAgICAgICB1bnNpZ25lZCBpbnQg ICAgICAgICAgICByc2l6ZSwgd3NpemU7DQo+ICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAg ICAgdGltZW8sIHJldHJhbnM7DQo+IEBAIC0xMDYsOCArMTAxLDYgQEAgc3RydWN0IG5mc19mc19j b250ZXh0IHsNCj4gICAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAqZnNjYWNoZV91bmlx Ow0KPiAgICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIHByb3RvZmFtaWx5Ow0KPiAgICAg ICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIG1vdW50ZmFtaWx5Ow0KPiAtICAgICAgIGJvb2wg ICAgICAgICAgICAgICAgICAgIG5lZWRfbW91bnQ7DQo+IC0gICAgICAgYm9vbCAgICAgICAgICAg ICAgICAgICAgc2xvcHB5Ow0KPiANCj4gICAgICAgICBzdHJ1Y3Qgew0KPiAgICAgICAgICAgICAg ICAgdW5pb24gew0KPiBAQCAtMTMyLDE0ICsxMjUsMjcgQEAgc3RydWN0IG5mc19mc19jb250ZXh0 IHsNCj4gICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIHBvcnQ7DQo+ICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBwcm90b2NvbDsNCj4gICAgICAg ICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIG5jb25uZWN0Ow0KPiArICAgICAgICAg ICAgICAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgZXhwb3J0X3BhdGhfbGVuOw0KPiAgICAgICAg IH0gbmZzX3NlcnZlcjsNCj4gDQo+IC0gICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKmxz bV9vcHRzOw0KPiAtICAgICAgIHN0cnVjdCBuZXQgICAgICAgICAgICAgICpuZXQ7DQo+IC0NCj4g LSAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICBidWZbMzJdOyAgICAgICAgLyogUGFyc2Ug YnVmZmVyICovDQo+ICsgICAgICAgc3RydWN0IG5mc19maCAgICAgICAgICAgKm1udGZoOw0KPiAr ICAgICAgIHN0cnVjdCBuZnNfc2VydmVyICAgICAgICpzZXJ2ZXI7DQo+ICsgICAgICAgc3RydWN0 IG5mc19zdWJ2ZXJzaW9uICAgKm5mc19tb2Q7DQo+ICsNCj4gKyAgICAgICAvKiBJbmZvcm1hdGlv biBmb3IgYSBjbG9uZWQgbW91bnQuICovDQo+ICsgICAgICAgc3RydWN0IG5mc19jbG9uZV9tb3Vu dCB7DQo+ICsgICAgICAgICAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgICAgICAqc2I7DQo+ICsg ICAgICAgICAgICAgICBzdHJ1Y3QgZGVudHJ5ICAgICAgICAgICAqZGVudHJ5Ow0KPiArICAgICAg ICAgICAgICAgc3RydWN0IG5mc19mYXR0ciAgICAgICAgKmZhdHRyOw0KPiArICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgaW5oZXJpdGVkX2JzaXplOw0KPiArICAgICAgIH0g Y2xvbmVfZGF0YTsNCj4gIH07DQo+IA0KPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzX2ZzX2Nv bnRleHQgKm5mc19mYzJjb250ZXh0KGNvbnN0IHN0cnVjdA0KPiBmc19jb250ZXh0ICpmYykNCj4g K3sNCj4gKyAgICAgICByZXR1cm4gZmMtPmZzX3ByaXZhdGU7DQo+ICt9DQo+ICsNCj4gIC8qIG1v dW50X2NsbnQuYyAqLw0KPiAgc3RydWN0IG5mc19tb3VudF9yZXF1ZXN0IHsNCj4gICAgICAgICBz dHJ1Y3Qgc29ja2FkZHIgICAgICAgICAqc2FwOw0KPiBAQCAtMTU1LDE1ICsxNjEsNiBAQCBzdHJ1 Y3QgbmZzX21vdW50X3JlcXVlc3Qgew0KPiAgICAgICAgIHN0cnVjdCBuZXQgICAgICAgICAgICAg ICpuZXQ7DQo+ICB9Ow0KPiANCj4gLXN0cnVjdCBuZnNfbW91bnRfaW5mbyB7DQo+IC0gICAgICAg dW5zaWduZWQgaW50IGluaGVyaXRlZF9ic2l6ZTsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX2ZzX2Nv bnRleHQgKmN0eDsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX2Nsb25lX21vdW50ICpjbG9uZWQ7DQo+ IC0gICAgICAgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcjsNCj4gLSAgICAgICBzdHJ1Y3QgbmZz X2ZoICptbnRmaDsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX3N1YnZlcnNpb24gKm5mc19tb2Q7DQo+ IC19Ow0KPiAtDQo+ICBleHRlcm4gaW50IG5mc19tb3VudChzdHJ1Y3QgbmZzX21vdW50X3JlcXVl c3QgKmluZm8pOw0KPiAgZXh0ZXJuIHZvaWQgbmZzX3Vtb3VudChjb25zdCBzdHJ1Y3QgbmZzX21v dW50X3JlcXVlc3QgKmluZm8pOw0KPiANCj4gQEAgLTE4OSwxMCArMTg2LDkgQEAgZXh0ZXJuIHN0 cnVjdCBuZnNfY2xpZW50DQo+ICpuZnM0X2ZpbmRfY2xpZW50X2lkZW50KHN0cnVjdCBuZXQgKiwg aW50KTsNCj4gIGV4dGVybiBzdHJ1Y3QgbmZzX2NsaWVudCAqDQo+ICBuZnM0X2ZpbmRfY2xpZW50 X3Nlc3Npb25pZChzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLA0KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqLCB1MzIp Ow0KPiAtZXh0ZXJuIHN0cnVjdCBuZnNfc2VydmVyICpuZnNfY3JlYXRlX3NlcnZlcihzdHJ1Y3Qg bmZzX21vdW50X2luZm8NCj4gKik7DQo+IC1leHRlcm4gc3RydWN0IG5mc19zZXJ2ZXIgKm5mczRf Y3JlYXRlX3NlcnZlcihzdHJ1Y3QgbmZzX21vdW50X2luZm8NCj4gKik7DQo+IC1leHRlcm4gc3Ry dWN0IG5mc19zZXJ2ZXIgKm5mczRfY3JlYXRlX3JlZmVycmFsX3NlcnZlcihzdHJ1Y3QNCj4gbmZz X2Nsb25lX21vdW50ICosDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfZmgNCj4gKik7DQo+ICtleHRlcm4gc3RydWN0IG5m c19zZXJ2ZXIgKm5mc19jcmVhdGVfc2VydmVyKHN0cnVjdCBmc19jb250ZXh0ICopOw0KPiArZXh0 ZXJuIHN0cnVjdCBuZnNfc2VydmVyICpuZnM0X2NyZWF0ZV9zZXJ2ZXIoc3RydWN0IGZzX2NvbnRl eHQgKik7DQo+ICtleHRlcm4gc3RydWN0IG5mc19zZXJ2ZXIgKm5mczRfY3JlYXRlX3JlZmVycmFs X3NlcnZlcihzdHJ1Y3QNCj4gZnNfY29udGV4dCAqKTsNCj4gIGV4dGVybiBpbnQgbmZzNF91cGRh dGVfc2VydmVyKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIGNvbnN0IGNoYXINCj4gKmhvc3Ru YW1lLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNv Y2thZGRyICpzYXAsIHNpemVfdA0KPiBzYWxlbiwNCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBuZXQgKm5ldCk7DQo+IEBAIC0yNDMsMjIgKzIzOSw4IEBA IHN0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNfcHJvY19leGl0KHZvaWQpDQo+ICBleHRlcm4gY29u c3Qgc3RydWN0IHN2Y192ZXJzaW9uIG5mczRfY2FsbGJhY2tfdmVyc2lvbjE7DQo+ICBleHRlcm4g Y29uc3Qgc3RydWN0IHN2Y192ZXJzaW9uIG5mczRfY2FsbGJhY2tfdmVyc2lvbjQ7DQo+IA0KPiAt c3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvcjsNCj4gLQ0KPiAtLyogbW91bnQuYyAqLw0KPiAt I2RlZmluZSBORlNfVEVYVF9EQVRBICAgICAgICAgIDENCj4gLQ0KPiAtZXh0ZXJuIHN0cnVjdCBu ZnNfZnNfY29udGV4dCAqbmZzX2FsbG9jX3BhcnNlZF9tb3VudF9kYXRhKHZvaWQpOw0KPiAtZXh0 ZXJuIHZvaWQgbmZzX2ZyZWVfcGFyc2VkX21vdW50X2RhdGEoc3RydWN0IG5mc19mc19jb250ZXh0 ICpjdHgpOw0KPiAtZXh0ZXJuIGludCBuZnNfcGFyc2VfbW91bnRfb3B0aW9ucyhjaGFyICpyYXcs IHN0cnVjdCBuZnNfZnNfY29udGV4dA0KPiAqY3R4KTsNCj4gLWV4dGVybiBpbnQgbmZzX3ZhbGlk YXRlX21vdW50X2RhdGEoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsDQo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3B0aW9ucywNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCwNCj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZoICptbnRmaCwN Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZfbmFt ZSk7DQo+IC1leHRlcm4gaW50IG5mc192YWxpZGF0ZV90ZXh0X21vdW50X2RhdGEodm9pZCAqb3B0 aW9ucywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBu ZnNfZnNfY29udGV4dCAqY3R4LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqZGV2X25hbWUpOw0KPiArLyogZnNfY29udGV4dC5jICovDQo+ICtl eHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbmZzX2ZzX3R5cGU7DQo+IA0KPiAgLyogcGFn ZWxpc3QuYyAqLw0KPiAgZXh0ZXJuIGludCBfX2luaXQgbmZzX2luaXRfbmZzcGFnZWNhY2hlKHZv aWQpOw0KPiBAQCAtNDE5LDE0ICs0MDEsOSBAQCBleHRlcm4gaW50IG5mc193YWl0X2F0b21pY19r aWxsYWJsZShhdG9taWNfdCAqcCwNCj4gdW5zaWduZWQgaW50IG1vZGUpOw0KPiANCj4gIC8qIHN1 cGVyLmMgKi8NCj4gIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBuZnNfc29w czsNCj4gLWV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBuZnNfZnNfdHlwZTsNCj4gLWV4 dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBuZnNfcHJlcGFyZWRfZnNfdHlwZTsNCj4gLSNp ZiBJU19FTkFCTEVEKENPTkZJR19ORlNfVjQpDQo+IC1leHRlcm4gc3RydWN0IGZpbGVfc3lzdGVt X3R5cGUgbmZzNF9yZWZlcnJhbF9mc190eXBlOw0KPiAtI2VuZGlmDQo+ICBib29sIG5mc19hdXRo X2luZm9fbWF0Y2goY29uc3Qgc3RydWN0IG5mc19hdXRoX2luZm8gKiwNCj4gcnBjX2F1dGhmbGF2 b3JfdCk7DQo+IC1zdHJ1Y3QgZGVudHJ5ICpuZnNfdHJ5X21vdW50KGludCwgY29uc3QgY2hhciAq LCBzdHJ1Y3QNCj4gbmZzX21vdW50X2luZm8gKik7DQo+IC1zdHJ1Y3QgZGVudHJ5ICpuZnNfZnNf bW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKiwgaW50LCBjb25zdA0KPiBjaGFyICosIHZv aWQgKik7DQo+ICtpbnQgbmZzX3RyeV9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqKTsNCj4g K2ludCBuZnNfZ2V0X3RyZWVfY29tbW9uKHN0cnVjdCBmc19jb250ZXh0ICopOw0KPiAgdm9pZCBu ZnNfa2lsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7DQo+IA0KPiAgZXh0ZXJuIHN0cnVj dCBycGNfc3RhdCBuZnNfcnBjc3RhdDsNCj4gQEAgLTQ1NCwxOCArNDMxLDEzIEBAIHN0YXRpYyBp bmxpbmUgYm9vbA0KPiBuZnNfZmlsZV9pb19pc19idWZmZXJlZChzdHJ1Y3QgbmZzX2lub2RlICpu ZnNpKQ0KPiAgZXh0ZXJuIGNoYXIgKm5mc19wYXRoKGNoYXIgKipwLCBzdHJ1Y3QgZGVudHJ5ICpk ZW50cnksDQo+ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNzaXplX3QgYnVm bGVuLCB1bnNpZ25lZCBmbGFncyk7DQo+ICBleHRlcm4gc3RydWN0IHZmc21vdW50ICpuZnNfZF9h dXRvbW91bnQoc3RydWN0IHBhdGggKnBhdGgpOw0KPiAtc3RydWN0IHZmc21vdW50ICpuZnNfc3Vi bW91bnQoc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IGRlbnRyeSAqLA0KPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZoICosIHN0cnVjdCBuZnNfZmF0dHIgKik7 DQo+IC1zdHJ1Y3QgdmZzbW91bnQgKm5mc19kb19zdWJtb3VudChzdHJ1Y3QgZGVudHJ5ICosIHN0 cnVjdCBuZnNfZmggKiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IG5mc19mYXR0ciAqLA0KPiBycGNfYXV0aGZsYXZvcl90KTsNCj4gK2ludCBuZnNfc3VibW91bnQo c3RydWN0IGZzX2NvbnRleHQgKiwgc3RydWN0IG5mc19zZXJ2ZXIgKik7DQo+ICtpbnQgbmZzX2Rv X3N1Ym1vdW50KHN0cnVjdCBmc19jb250ZXh0ICopOw0KPiANCj4gIC8qIGdldHJvb3QuYyAqLw0K PiAtZXh0ZXJuIHN0cnVjdCBkZW50cnkgKm5mc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sg Kiwgc3RydWN0DQo+IG5mc19maCAqLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKik7DQo+ICtleHRlcm4gaW50IG5mc19nZXRfcm9vdChzdHJ1Y3Qgc3Vw ZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0DQo+ICpmYyk7DQo+ICAjaWYgSVNfRU5BQkxF RChDT05GSUdfTkZTX1Y0KQ0KPiAtZXh0ZXJuIHN0cnVjdCBkZW50cnkgKm5mczRfZ2V0X3Jvb3Qo c3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdA0KPiBuZnNfZmggKiwNCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKTsNCj4gLQ0KPiArZXh0ZXJuIGlu dCBuZnM0X2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQN Cj4gKmNmZyk7DQo+ICBleHRlcm4gaW50IG5mczRfZ2V0X3Jvb3RmaChzdHJ1Y3QgbmZzX3NlcnZl ciAqc2VydmVyLCBzdHJ1Y3QgbmZzX2ZoDQo+ICptbnRmaCwgYm9vbCk7DQo+ICAjZW5kaWYNCj4g DQo+IEBAIC00ODQsNyArNDU2LDcgQEAgaW50ICBuZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFf ZmlsZSAqLCBzdHJ1Y3QNCj4gZGVudHJ5ICopOw0KPiAgaW50ICBuZnNfc2hvd19kZXZuYW1lKHN0 cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOw0KPiAgaW50ICBuZnNfc2hvd19wYXRo KHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOw0KPiAgaW50ICBuZnNfc2hvd19z dGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKiwgc3RydWN0IGRlbnRyeSAqKTsNCj4gLWludCBuZnNfcmVt b3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpyYXdfZGF0YSk7 DQo+ICtpbnQgIG5mc19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqKTsNCj4gDQo+ICAv KiB3cml0ZS5jICovDQo+ICBleHRlcm4gdm9pZCBuZnNfcGFnZWlvX2luaXRfd3JpdGUoc3RydWN0 IG5mc19wYWdlaW9fZGVzY3JpcHRvcg0KPiAqcGdpbywNCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9u YW1lc3BhY2UuYyBiL2ZzL25mcy9uYW1lc3BhY2UuYw0KPiBpbmRleCA3MmE5OWY5YzczOTAuLjNl NTY2YTYzMjIxNSAxMDA2NDQNCj4gLS0tIGEvZnMvbmZzL25hbWVzcGFjZS5jDQo+ICsrKyBiL2Zz L25mcy9uYW1lc3BhY2UuYw0KPiBAQCAtMTQwLDMxICsxNDAsNjIgQEAgRVhQT1JUX1NZTUJPTF9H UEwobmZzX3BhdGgpOw0KPiAgICovDQo+ICBzdHJ1Y3QgdmZzbW91bnQgKm5mc19kX2F1dG9tb3Vu dChzdHJ1Y3QgcGF0aCAqcGF0aCkNCj4gIHsNCj4gLSAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1u dDsNCj4gKyAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eDsNCj4gKyAgICAgICBzdHJ1 Y3QgZnNfY29udGV4dCAqZmM7DQo+ICsgICAgICAgc3RydWN0IHZmc21vdW50ICptbnQgPSBFUlJf UFRSKC1FTk9NRU0pOw0KPiAgICAgICAgIHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNf U0VSVkVSKGRfaW5vZGUocGF0aC0NCj4gPmRlbnRyeSkpOw0KPiAtICAgICAgIHN0cnVjdCBuZnNf ZmggKmZoID0gTlVMTDsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0ciA9IE5VTEw7 DQo+ICsgICAgICAgc3RydWN0IG5mc19jbGllbnQgKmNsaWVudCA9IHNlcnZlci0+bmZzX2NsaWVu dDsNCj4gKyAgICAgICBpbnQgcmV0Ow0KPiANCj4gICAgICAgICBpZiAoSVNfUk9PVChwYXRoLT5k ZW50cnkpKQ0KPiAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7DQo+IA0K PiAtICAgICAgIG1udCA9IEVSUl9QVFIoLUVOT01FTSk7DQo+IC0gICAgICAgZmggPSBuZnNfYWxs b2NfZmhhbmRsZSgpOw0KPiAtICAgICAgIGZhdHRyID0gbmZzX2FsbG9jX2ZhdHRyKCk7DQo+IC0g ICAgICAgaWYgKGZoID09IE5VTEwgfHwgZmF0dHIgPT0gTlVMTCkNCj4gLSAgICAgICAgICAgICAg IGdvdG8gb3V0Ow0KPiArICAgICAgIC8qIE9wZW4gYSBuZXcgZmlsZXN5c3RlbSBjb250ZXh0LCB0 cmFuc2ZlcnJpbmcgcGFyYW1ldGVycw0KPiBmcm9tIHRoZQ0KPiArICAgICAgICAqIHBhcmVudCBz dXBlcmJsb2NrLCBpbmNsdWRpbmcgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLg0KPiArICAgICAgICAq Lw0KPiArICAgICAgIGZjID0gZnNfY29udGV4dF9mb3Jfc3VibW91bnQoJm5mc19mc190eXBlLCBw YXRoLT5kZW50cnkpOw0KPiArICAgICAgIGlmIChJU19FUlIoZmMpKQ0KPiArICAgICAgICAgICAg ICAgcmV0dXJuIEVSUl9DQVNUKGZjKTsNCj4gDQo+IC0gICAgICAgbW50ID0gc2VydmVyLT5uZnNf Y2xpZW50LT5ycGNfb3BzLT5zdWJtb3VudChzZXJ2ZXIsIHBhdGgtDQo+ID5kZW50cnksIGZoLCBm YXR0cik7DQo+ICsgICAgICAgY3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMpOw0KPiArICAgICAgIGN0 eC0+Y2xvbmVfZGF0YS5kZW50cnkgID0gcGF0aC0+ZGVudHJ5Ow0KPiArICAgICAgIGN0eC0+Y2xv bmVfZGF0YS5zYiAgICAgID0gcGF0aC0+ZGVudHJ5LT5kX3NiOw0KPiArICAgICAgIGN0eC0+Y2xv bmVfZGF0YS5mYXR0ciAgID0gbmZzX2FsbG9jX2ZhdHRyKCk7DQo+ICsgICAgICAgaWYgKCFjdHgt PmNsb25lX2RhdGEuZmF0dHIpDQo+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9mYzsNCj4gKw0K PiArICAgICAgIGlmIChmYy0+bmV0X25zICE9IGNsaWVudC0+Y2xfbmV0KSB7DQo+ICsgICAgICAg ICAgICAgICBwdXRfbmV0KGZjLT5uZXRfbnMpOw0KPiArICAgICAgICAgICAgICAgZmMtPm5ldF9u cyA9IGdldF9uZXQoY2xpZW50LT5jbF9uZXQpOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAg IC8qIGZvciBzdWJtb3VudHMgd2Ugd2FudCB0aGUgc2FtZSBzZXJ2ZXI7IHJlZmVycmFscyB3aWxs DQo+IHJlYXNzaWduICovDQo+ICsgICAgICAgbWVtY3B5KCZjdHgtPm5mc19zZXJ2ZXIuYWRkcmVz cywgJmNsaWVudC0+Y2xfYWRkciwgY2xpZW50LQ0KPiA+Y2xfYWRkcmxlbik7DQo+ICsgICAgICAg Y3R4LT5uZnNfc2VydmVyLmFkZHJsZW4gPSBjbGllbnQtPmNsX2FkZHJsZW47DQo+ICsgICAgICAg Y3R4LT5uZnNfc2VydmVyLnBvcnQgICAgPSBzZXJ2ZXItPnBvcnQ7DQo+ICsNCj4gKyAgICAgICBj dHgtPnZlcnNpb24gICAgICAgICAgICA9IGNsaWVudC0+cnBjX29wcy0+dmVyc2lvbjsNCj4gKyAg ICAgICBjdHgtPm1pbm9ydmVyc2lvbiAgICAgICA9IGNsaWVudC0+Y2xfbWlub3J2ZXJzaW9uOw0K PiArICAgICAgIGN0eC0+bmZzX21vZCAgICAgICAgICAgID0gY2xpZW50LT5jbF9uZnNfbW9kOw0K PiArICAgICAgIF9fbW9kdWxlX2dldChjdHgtPm5mc19tb2QtPm93bmVyKTsNCj4gKw0KPiArICAg ICAgIHJldCA9IGNsaWVudC0+cnBjX29wcy0+c3VibW91bnQoZmMsIHNlcnZlcik7DQo+ICsgICAg ICAgaWYgKHJldCA8IDApIHsNCj4gKyAgICAgICAgICAgICAgIG1udCA9IEVSUl9QVFIocmV0KTsN Cj4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0X2ZjOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAg ICAgIHVwX3dyaXRlKCZmYy0+cm9vdC0+ZF9zYi0+c191bW91bnQpOw0KPiArICAgICAgIG1udCA9 IHZmc19jcmVhdGVfbW91bnQoZmMpOw0KPiAgICAgICAgIGlmIChJU19FUlIobW50KSkNCj4gLSAg ICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiArICAgICAgICAgICAgICAgZ290byBvdXRfZmM7DQo+ IA0KPiAgICAgICAgIG1udGdldChtbnQpOyAvKiBwcmV2ZW50IGltbWVkaWF0ZSBleHBpcmF0aW9u ICovDQo+ICAgICAgICAgbW50X3NldF9leHBpcnkobW50LCAmbmZzX2F1dG9tb3VudF9saXN0KTsN Cj4gICAgICAgICBzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm5mc19hdXRvbW91bnRfdGFzaywNCj4g bmZzX21vdW50cG9pbnRfZXhwaXJ5X3RpbWVvdXQpOw0KPiANCj4gLW91dDoNCj4gLSAgICAgICBu ZnNfZnJlZV9mYXR0cihmYXR0cik7DQo+IC0gICAgICAgbmZzX2ZyZWVfZmhhbmRsZShmaCk7DQo+ ICtvdXRfZmM6DQo+ICsgICAgICAgcHV0X2ZzX2NvbnRleHQoZmMpOw0KPiAgICAgICAgIHJldHVy biBtbnQ7DQo+ICB9DQo+IA0KPiBAQCAtMjE5LDYxICsyNTAsNjIgQEAgdm9pZCBuZnNfcmVsZWFz ZV9hdXRvbW91bnRfdGltZXIodm9pZCkNCj4gICAqIEBhdXRoZmxhdm9yOiBzZWN1cml0eSBmbGF2 b3IgdG8gdXNlIHdoZW4gcGVyZm9ybWluZyB0aGUgbW91bnQNCj4gICAqDQo+ICAgKi8NCj4gLXN0 cnVjdCB2ZnNtb3VudCAqbmZzX2RvX3N1Ym1vdW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3Ry dWN0DQo+IG5mc19maCAqZmgsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBuZnNfZmF0dHIgKmZhdHRyLA0KPiBycGNfYXV0aGZsYXZvcl90IGF1dGhmbGF2b3IpDQo+ ICtpbnQgbmZzX2RvX3N1Ym1vdW50KHN0cnVjdCBmc19jb250ZXh0ICpmYykNCj4gIHsNCj4gLSAg ICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOw0KPiAtICAgICAgIHN0 cnVjdCBuZnNfY2xvbmVfbW91bnQgbW91bnRkYXRhID0gew0KPiAtICAgICAgICAgICAgICAgLnNi ID0gc2IsDQo+IC0gICAgICAgICAgICAgICAuZGVudHJ5ID0gZGVudHJ5LA0KPiAtICAgICAgICAg ICAgICAgLmF1dGhmbGF2b3IgPSBhdXRoZmxhdm9yLA0KPiAtICAgICAgIH07DQo+IC0gICAgICAg c3RydWN0IG5mc19tb3VudF9pbmZvIG1vdW50X2luZm8gPSB7DQo+IC0gICAgICAgICAgICAgICAu aW5oZXJpdGVkX2JzaXplID0gc2ItPnNfYmxvY2tzaXplX2JpdHMsDQo+IC0gICAgICAgICAgICAg ICAuY2xvbmVkID0gJm1vdW50ZGF0YSwNCj4gLSAgICAgICAgICAgICAgIC5tbnRmaCA9IGZoLA0K PiAtICAgICAgICAgICAgICAgLm5mc19tb2QgPSBORlNfU0Ioc2IpLT5uZnNfY2xpZW50LT5jbF9u ZnNfbW9kLA0KPiAtICAgICAgIH07DQo+ICsgICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpj dHggPSBuZnNfZmMyY29udGV4dChmYyk7DQo+ICsgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5 ID0gY3R4LT5jbG9uZV9kYXRhLmRlbnRyeTsNCj4gICAgICAgICBzdHJ1Y3QgbmZzX3NlcnZlciAq c2VydmVyOw0KPiAtICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50Ow0KPiAtICAgICAgIGNoYXIg KnBhZ2UgPSAoY2hhciAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX1VTRVIpOw0KPiAtICAgICAgIGNo YXIgKmRldm5hbWU7DQo+ICsgICAgICAgY2hhciAqYnVmZmVyLCAqcDsNCj4gKyAgICAgICBpbnQg cmV0Ow0KPiANCj4gLSAgICAgICBpZiAocGFnZSA9PSBOVUxMKQ0KPiAtICAgICAgICAgICAgICAg cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ICsgICAgICAgLyogY3JlYXRlIGEgbmV3IHZvbHVt ZSByZXByZXNlbnRhdGlvbiAqLw0KPiArICAgICAgIHNlcnZlciA9IGN0eC0+bmZzX21vZC0+cnBj X29wcy0+Y2xvbmVfc2VydmVyKE5GU19TQihjdHgtDQo+ID5jbG9uZV9kYXRhLnNiKSwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPm1u dGZoLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGN0eC0NCj4gPmNsb25lX2RhdGEuZmF0dHIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LQ0KPiA+c2VsZWN0ZWRfZmxhdm9yKTsN Cj4gDQo+IC0gICAgICAgc2VydmVyID0gbW91bnRfaW5mby5uZnNfbW9kLT5ycGNfb3BzLQ0KPiA+ Y2xvbmVfc2VydmVyKE5GU19TQihzYiksIGZoLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdHRyLA0KPiBhdXRoZmxhdm9yKTsN Cj4gICAgICAgICBpZiAoSVNfRVJSKHNlcnZlcikpDQo+IC0gICAgICAgICAgICAgICByZXR1cm4g RVJSX0NBU1Qoc2VydmVyKTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKHNlcnZl cik7DQo+IA0KPiAtICAgICAgIG1vdW50X2luZm8uc2VydmVyID0gc2VydmVyOw0KPiArICAgICAg IGN0eC0+c2VydmVyID0gc2VydmVyOw0KPiANCj4gLSAgICAgICBkZXZuYW1lID0gbmZzX2Rldm5h bWUoZGVudHJ5LCBwYWdlLCBQQUdFX1NJWkUpOw0KPiAtICAgICAgIGlmIChJU19FUlIoZGV2bmFt ZSkpDQo+IC0gICAgICAgICAgICAgICBtbnQgPSBFUlJfQ0FTVChkZXZuYW1lKTsNCj4gLSAgICAg ICBlbHNlDQo+IC0gICAgICAgICAgICAgICBtbnQgPSB2ZnNfc3VibW91bnQoZGVudHJ5LCAmbmZz X3ByZXBhcmVkX2ZzX3R5cGUsDQo+IGRldm5hbWUsICZtb3VudF9pbmZvKTsNCj4gKyAgICAgICBi dWZmZXIgPSBrbWFsbG9jKDQwOTYsIEdGUF9VU0VSKTsNCj4gKyAgICAgICBpZiAoIWJ1ZmZlcikN Cj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiANCj4gLSAgICAgICBpZiAobW91 bnRfaW5mby5zZXJ2ZXIpDQo+IC0gICAgICAgICAgICAgICBuZnNfZnJlZV9zZXJ2ZXIobW91bnRf aW5mby5zZXJ2ZXIpOw0KPiAtICAgICAgIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwYWdlKTsN Cj4gLSAgICAgICByZXR1cm4gbW50Ow0KPiArICAgICAgIGN0eC0+aW50ZXJuYWwgICAgICAgICAg ID0gdHJ1ZTsNCj4gKyAgICAgICBjdHgtPmNsb25lX2RhdGEuaW5oZXJpdGVkX2JzaXplID0gY3R4 LT5jbG9uZV9kYXRhLnNiLQ0KPiA+c19ibG9ja3NpemVfYml0czsNCj4gKw0KPiArICAgICAgIHAg PSBuZnNfZGV2bmFtZShkZW50cnksIGJ1ZmZlciwgNDA5Nik7DQo+ICsgICAgICAgaWYgKElTX0VS UihwKSkgew0KPiArICAgICAgICAgICAgICAgZHByaW50aygiTkZTOiBDb3VsZG4ndCBkZXRlcm1p bmUgc3VibW91bnQNCj4gcGF0aG5hbWVcbiIpOw0KPiArICAgICAgICAgICAgICAgcmV0ID0gUFRS X0VSUihwKTsNCj4gKyAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAgcmV0ID0gdmZz X3BhcnNlX2ZzX3N0cmluZyhmYywgInNvdXJjZSIsIHAsIGJ1ZmZlciArDQo+IDQwOTYgLSBwKTsN Cj4gKyAgICAgICAgICAgICAgIGlmICghcmV0KQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBy ZXQgPSB2ZnNfZ2V0X3RyZWUoZmMpOw0KPiArICAgICAgIH0NCj4gKyAgICAgICBrZnJlZShidWZm ZXIpOw0KPiArICAgICAgIHJldHVybiByZXQ7DQo+ICB9DQo+ICBFWFBPUlRfU1lNQk9MX0dQTChu ZnNfZG9fc3VibW91bnQpOw0KPiANCj4gLXN0cnVjdCB2ZnNtb3VudCAqbmZzX3N1Ym1vdW50KHN0 cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdA0KPiBkZW50cnkgKmRlbnRyeSwNCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5mc19maCAqZmgsIHN0cnVjdCBuZnNf ZmF0dHINCj4gKmZhdHRyKQ0KPiAraW50IG5mc19zdWJtb3VudChzdHJ1Y3QgZnNfY29udGV4dCAq ZmMsIHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpDQo+ICB7DQo+IC0gICAgICAgaW50IGVycjsN Cj4gKyAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19mYzJjb250ZXh0KGZj KTsNCj4gKyAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBjdHgtPmNsb25lX2RhdGEuZGVu dHJ5Ow0KPiAgICAgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRnZXRfcGFyZW50KGRlbnRy eSk7DQo+ICsgICAgICAgaW50IGVycjsNCj4gDQo+ICAgICAgICAgLyogTG9vayBpdCB1cCBhZ2Fp biB0byBnZXQgaXRzIGF0dHJpYnV0ZXMgKi8NCj4gLSAgICAgICBlcnIgPSBzZXJ2ZXItPm5mc19j bGllbnQtPnJwY19vcHMtPmxvb2t1cChkX2lub2RlKHBhcmVudCksDQo+ICZkZW50cnktPmRfbmFt ZSwgZmgsIGZhdHRyLCBOVUxMKTsNCj4gKyAgICAgICBlcnIgPSBzZXJ2ZXItPm5mc19jbGllbnQt PnJwY19vcHMtPmxvb2t1cChkX2lub2RlKHBhcmVudCksDQo+ICZkZW50cnktPmRfbmFtZSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPm1u dGZoLCBjdHgtDQo+ID5jbG9uZV9kYXRhLmZhdHRyLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOw0KPiAgICAgICAgIGRwdXQocGFyZW50 KTsNCj4gICAgICAgICBpZiAoZXJyICE9IDApDQo+IC0gICAgICAgICAgICAgICByZXR1cm4gRVJS X1BUUihlcnIpOw0KPiArICAgICAgICAgICAgICAgcmV0dXJuIGVycjsNCj4gDQo+IC0gICAgICAg cmV0dXJuIG5mc19kb19zdWJtb3VudChkZW50cnksIGZoLCBmYXR0ciwgc2VydmVyLT5jbGllbnQt DQo+ID5jbF9hdXRoLT5hdV9mbGF2b3IpOw0KPiArICAgICAgIGN0eC0+c2VsZWN0ZWRfZmxhdm9y ID0gc2VydmVyLT5jbGllbnQtPmNsX2F1dGgtPmF1X2ZsYXZvcjsNCj4gKyAgICAgICByZXR1cm4g bmZzX2RvX3N1Ym1vdW50KGZjKTsNCj4gIH0NCj4gIEVYUE9SVF9TWU1CT0xfR1BMKG5mc19zdWJt b3VudCk7DQo+IGRpZmYgLS1naXQgYS9mcy9uZnMvbmZzM19mcy5oIGIvZnMvbmZzL25mczNfZnMu aA0KPiBpbmRleCAwOTYwMmRjMTg4OWYuLjFiOTUwYjY2YjNiYiAxMDA2NDQNCj4gLS0tIGEvZnMv bmZzL25mczNfZnMuaA0KPiArKysgYi9mcy9uZnMvbmZzM19mcy5oDQo+IEBAIC0yNyw3ICsyNyw3 IEBAIHN0YXRpYyBpbmxpbmUgaW50IG5mczNfcHJvY19zZXRhY2xzKHN0cnVjdCBpbm9kZQ0KPiAq aW5vZGUsIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwNCj4gICNlbmRpZiAvKiBDT05GSUdfTkZTX1Yz X0FDTCAqLw0KPiANCj4gIC8qIG5mczNjbGllbnQuYyAqLw0KPiAtc3RydWN0IG5mc19zZXJ2ZXIg Km5mczNfY3JlYXRlX3NlcnZlcihzdHJ1Y3QgbmZzX21vdW50X2luZm8gKik7DQo+ICtzdHJ1Y3Qg bmZzX3NlcnZlciAqbmZzM19jcmVhdGVfc2VydmVyKHN0cnVjdCBmc19jb250ZXh0ICopOw0KPiAg c3RydWN0IG5mc19zZXJ2ZXIgKm5mczNfY2xvbmVfc2VydmVyKHN0cnVjdCBuZnNfc2VydmVyICos IHN0cnVjdA0KPiBuZnNfZmggKiwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBuZnNfZmF0dHIgKiwNCj4gcnBjX2F1dGhmbGF2b3JfdCk7DQo+IA0KPiBkaWZm IC0tZ2l0IGEvZnMvbmZzL25mczNjbGllbnQuYyBiL2ZzL25mcy9uZnMzY2xpZW50LmMNCj4gaW5k ZXggYTM0MGI1ZDBlMWEzLi5iZmQ5YjVmMDM0NTUgMTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9uZnMz Y2xpZW50LmMNCj4gKysrIGIvZnMvbmZzL25mczNjbGllbnQuYw0KPiBAQCAtNDYsOSArNDYsMTAg QEAgc3RhdGljIGlubGluZSB2b2lkDQo+IG5mc19pbml0X3NlcnZlcl9hY2xjbGllbnQoc3RydWN0 IG5mc19zZXJ2ZXIgKnNlcnZlcikNCj4gIH0NCj4gICNlbmRpZg0KPiANCj4gLXN0cnVjdCBuZnNf c2VydmVyICpuZnMzX2NyZWF0ZV9zZXJ2ZXIoc3RydWN0IG5mc19tb3VudF9pbmZvDQo+ICptb3Vu dF9pbmZvKQ0KPiArc3RydWN0IG5mc19zZXJ2ZXIgKm5mczNfY3JlYXRlX3NlcnZlcihzdHJ1Y3Qg ZnNfY29udGV4dCAqZmMpDQo+ICB7DQo+IC0gICAgICAgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZl ciA9IG5mc19jcmVhdGVfc2VydmVyKG1vdW50X2luZm8pOw0KPiArICAgICAgIHN0cnVjdCBuZnNf c2VydmVyICpzZXJ2ZXIgPSBuZnNfY3JlYXRlX3NlcnZlcihmYyk7DQo+ICsNCj4gICAgICAgICAv KiBDcmVhdGUgYSBjbGllbnQgUlBDIGhhbmRsZSBmb3IgdGhlIE5GUyB2MyBBQ0wgbWFuYWdlbWVu dA0KPiBpbnRlcmZhY2UgKi8NCj4gICAgICAgICBpZiAoIUlTX0VSUihzZXJ2ZXIpKQ0KPiAgICAg ICAgICAgICAgICAgbmZzX2luaXRfc2VydmVyX2FjbGNsaWVudChzZXJ2ZXIpOw0KPiBkaWZmIC0t Z2l0IGEvZnMvbmZzL25mczNwcm9jLmMgYi9mcy9uZnMvbmZzM3Byb2MuYw0KPiBpbmRleCBhM2Fk MmQ0NmZkNDIuLjkxMmEwYjBjOWJiOSAxMDA2NDQNCj4gLS0tIGEvZnMvbmZzL25mczNwcm9jLmMN Cj4gKysrIGIvZnMvbmZzL25mczNwcm9jLmMNCj4gQEAgLTk2Myw3ICs5NjMsNyBAQCBjb25zdCBz dHJ1Y3QgbmZzX3JwY19vcHMgbmZzX3YzX2NsaWVudG9wcyA9IHsNCj4gICAgICAgICAubmxtY2xu dF9vcHMgICAgPSAmbmxtY2xudF9mbF9jbG9zZV9sb2NrX29wcywNCj4gICAgICAgICAuZ2V0cm9v dCAgICAgICAgPSBuZnMzX3Byb2NfZ2V0X3Jvb3QsDQo+ICAgICAgICAgLnN1Ym1vdW50ICAgICAg ID0gbmZzX3N1Ym1vdW50LA0KPiAtICAgICAgIC50cnlfbW91bnQgICAgICA9IG5mc190cnlfbW91 bnQsDQo+ICsgICAgICAgLnRyeV9nZXRfdHJlZSAgID0gbmZzX3RyeV9nZXRfdHJlZSwNCj4gICAg ICAgICAuZ2V0YXR0ciAgICAgICAgPSBuZnMzX3Byb2NfZ2V0YXR0ciwNCj4gICAgICAgICAuc2V0 YXR0ciAgICAgICAgPSBuZnMzX3Byb2Nfc2V0YXR0ciwNCj4gICAgICAgICAubG9va3VwICAgICAg ICAgPSBuZnMzX3Byb2NfbG9va3VwLA0KPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRfZnMuaCBi L2ZzL25mcy9uZnM0X2ZzLmgNCj4gaW5kZXggNjdlY2Q3YmI1MTJmLi5hNmVlNGRlNDc3NzQgMTAw NjQ0DQo+IC0tLSBhL2ZzL25mcy9uZnM0X2ZzLmgNCj4gKysrIGIvZnMvbmZzL25mczRfZnMuaA0K PiBAQCAtMjY4LDE0ICsyNjgsMTMgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0 aW9ucw0KPiBuZnM0X2RlbnRyeV9vcGVyYXRpb25zOw0KPiAgaW50IG5mc19hdG9taWNfb3Blbihz dHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZmlsZSAqLA0KPiAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkLCB1bW9kZV90KTsNCj4gDQo+IC0vKiBzdXBlci5jICovDQo+ ICsvKiBmc19jb250ZXh0LmMgKi8NCj4gIGV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBu ZnM0X2ZzX3R5cGU7DQo+IA0KPiAgLyogbmZzNG5hbWVzcGFjZS5jICovDQo+ICBzdHJ1Y3QgcnBj X2NsbnQgKm5mczRfbmVnb3RpYXRlX3NlY3VyaXR5KHN0cnVjdCBycGNfY2xudCAqLCBzdHJ1Y3QN Cj4gaW5vZGUgKiwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBzdHJ1Y3QgcXN0ciAqKTsNCj4gLXN0cnVjdCB2ZnNtb3VudCAqbmZzNF9zdWJtb3VudChz dHJ1Y3QgbmZzX3NlcnZlciAqLCBzdHJ1Y3QgZGVudHJ5ICosDQo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZoICosIHN0cnVjdCBuZnNfZmF0dHIgKik7DQo+ICtp bnQgbmZzNF9zdWJtb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqLCBzdHJ1Y3QgbmZzX3NlcnZlciAq KTsNCj4gIGludCBuZnM0X3JlcGxhY2VfdHJhbnNwb3J0KHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2 ZXIsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5mczRf ZnNfbG9jYXRpb25zDQo+ICpsb2NhdGlvbnMpOw0KPiANCj4gQEAgLTUxNyw3ICs1MTYsNiBAQCBl eHRlcm4gY29uc3QgbmZzNF9zdGF0ZWlkIGludmFsaWRfc3RhdGVpZDsNCj4gIC8qIG5mczRzdXBl ci5jICovDQo+ICBzdHJ1Y3QgbmZzX21vdW50X2luZm87DQo+ICBleHRlcm4gc3RydWN0IG5mc19z dWJ2ZXJzaW9uIG5mc192NDsNCj4gLXN0cnVjdCBkZW50cnkgKm5mczRfdHJ5X21vdW50KGludCwg Y29uc3QgY2hhciAqLCBzdHJ1Y3QNCj4gbmZzX21vdW50X2luZm8gKik7DQo+ICBleHRlcm4gYm9v bCBuZnM0X2Rpc2FibGVfaWRtYXBwaW5nOw0KPiAgZXh0ZXJuIHVuc2lnbmVkIHNob3J0IG1heF9z ZXNzaW9uX3Nsb3RzOw0KPiAgZXh0ZXJuIHVuc2lnbmVkIHNob3J0IG1heF9zZXNzaW9uX2NiX3Ns b3RzOw0KPiBAQCAtNTI3LDYgKzUyNSw5IEBAIGV4dGVybiBib29sIHJlY292ZXJfbG9zdF9sb2Nr czsNCj4gICNkZWZpbmUgTkZTNF9DTElFTlRfSURfVU5JUV9MRU4gICAgICAgICAgICAgICAgKDY0 KQ0KPiAgZXh0ZXJuIGNoYXIgbmZzNF9jbGllbnRfaWRfdW5pcXVpZmllcltORlM0X0NMSUVOVF9J RF9VTklRX0xFTl07DQo+IA0KPiArZXh0ZXJuIGludCBuZnM0X3RyeV9nZXRfdHJlZShzdHJ1Y3Qg ZnNfY29udGV4dCAqKTsNCj4gK2V4dGVybiBpbnQgbmZzNF9nZXRfcmVmZXJyYWxfdHJlZShzdHJ1 Y3QgZnNfY29udGV4dCAqKTsNCj4gKw0KPiAgLyogbmZzNHN5c2N0bC5jICovDQo+ICAjaWZkZWYg Q09ORklHX1NZU0NUTA0KPiAgaW50IG5mczRfcmVnaXN0ZXJfc3lzY3RsKHZvaWQpOw0KPiBkaWZm IC0tZ2l0IGEvZnMvbmZzL25mczRjbGllbnQuYyBiL2ZzL25mcy9uZnM0Y2xpZW50LmMNCj4gaW5k ZXggMmVlMjI4MWNlNDA0Li5iZTI2ZmJlMDY4NjMgMTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9uZnM0 Y2xpZW50LmMNCj4gKysrIGIvZnMvbmZzL25mczRjbGllbnQuYw0KPiBAQCAtMTA1Miw5ICsxMDUy LDkgQEAgc3RhdGljIGludCBuZnM0X3NlcnZlcl9jb21tb25fc2V0dXAoc3RydWN0DQo+IG5mc19z ZXJ2ZXIgKnNlcnZlciwNCj4gIC8qDQo+ICAgKiBDcmVhdGUgYSB2ZXJzaW9uIDQgdm9sdW1lIHJl Y29yZA0KPiAgICovDQo+IC1zdGF0aWMgaW50IG5mczRfaW5pdF9zZXJ2ZXIoc3RydWN0IG5mc19z ZXJ2ZXIgKnNlcnZlciwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNf ZnNfY29udGV4dCAqY3R4KQ0KPiArc3RhdGljIGludCBuZnM0X2luaXRfc2VydmVyKHN0cnVjdCBu ZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdA0KPiBmc19jb250ZXh0ICpmYykNCj4gIHsNCj4gKyAg ICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19mYzJjb250ZXh0KGZjKTsNCj4g ICAgICAgICBzdHJ1Y3QgcnBjX3RpbWVvdXQgdGltZXBhcm1zOw0KPiAgICAgICAgIGludCBlcnJv cjsNCj4gDQo+IEBAIC0xMDc2LDE1ICsxMDc2LDE1IEBAIHN0YXRpYyBpbnQgbmZzNF9pbml0X3Nl cnZlcihzdHJ1Y3QgbmZzX3NlcnZlcg0KPiAqc2VydmVyLA0KPiANCj4gICAgICAgICAvKiBHZXQg YSBjbGllbnQgcmVjb3JkICovDQo+ICAgICAgICAgZXJyb3IgPSBuZnM0X3NldF9jbGllbnQoc2Vy dmVyLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICBjdHgtPm5mc19zZXJ2ZXIuaG9zdG5hbWUs DQo+IC0gICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmY3R4 LQ0KPiA+bmZzX3NlcnZlci5hZGRyZXNzLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICBjdHgt Pm5mc19zZXJ2ZXIuYWRkcmxlbiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5jbGll bnRfYWRkcmVzcywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5uZnNfc2VydmVyLnBy b3RvY29sLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAmdGltZXBhcm1zLA0KPiAtICAgICAg ICAgICAgICAgICAgICAgICBjdHgtPm1pbm9ydmVyc2lvbiwNCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgY3R4LT5uZnNfc2VydmVyLm5jb25uZWN0LA0KPiAtICAgICAgICAgICAgICAgICAgICAg ICBjdHgtPm5ldCk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5uZnNf c2VydmVyLmhvc3RuYW1lLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgt Pm5mc19zZXJ2ZXIuYWRkcmVzcywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj dHgtPm5mc19zZXJ2ZXIuYWRkcmxlbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjdHgtPmNsaWVudF9hZGRyZXNzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGN0eC0+bmZzX3NlcnZlci5wcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmdGltZXBhcm1zLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ bWlub3J2ZXJzaW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+bmZz X3NlcnZlci5uY29ubmVjdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYy0+ bmV0X25zKTsNCj4gICAgICAgICBpZiAoZXJyb3IgPCAwKQ0KPiAgICAgICAgICAgICAgICAgcmV0 dXJuIGVycm9yOw0KPiANCj4gQEAgLTExMDcsMTAgKzExMDcsOSBAQCBzdGF0aWMgaW50IG5mczRf aW5pdF9zZXJ2ZXIoc3RydWN0IG5mc19zZXJ2ZXINCj4gKnNlcnZlciwNCj4gICAqIENyZWF0ZSBh IHZlcnNpb24gNCB2b2x1bWUgcmVjb3JkDQo+ICAgKiAtIGtleWVkIG9uIHNlcnZlciBhbmQgRlNJ RA0KPiAgICovDQo+IC0vKnN0cnVjdCBuZnNfc2VydmVyICpuZnM0X2NyZWF0ZV9zZXJ2ZXIoY29u c3Qgc3RydWN0IG5mc19mc19jb250ZXh0DQo+ICpkYXRhLA0KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfZmggKm1udGZoKSovDQo+IC1zdHJ1Y3QgbmZz X3NlcnZlciAqbmZzNF9jcmVhdGVfc2VydmVyKHN0cnVjdCBuZnNfbW91bnRfaW5mbw0KPiAqbW91 bnRfaW5mbykNCj4gK3N0cnVjdCBuZnNfc2VydmVyICpuZnM0X2NyZWF0ZV9zZXJ2ZXIoc3RydWN0 IGZzX2NvbnRleHQgKmZjKQ0KPiAgew0KPiArICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAq Y3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMpOw0KPiAgICAgICAgIHN0cnVjdCBuZnNfc2VydmVyICpz ZXJ2ZXI7DQo+ICAgICAgICAgYm9vbCBhdXRoX3Byb2JlOw0KPiAgICAgICAgIGludCBlcnJvcjsN Cj4gQEAgLTExMjEsMTQgKzExMjAsMTQgQEAgc3RydWN0IG5mc19zZXJ2ZXIgKm5mczRfY3JlYXRl X3NlcnZlcihzdHJ1Y3QNCj4gbmZzX21vdW50X2luZm8gKm1vdW50X2luZm8pDQo+IA0KPiAgICAg ICAgIHNlcnZlci0+Y3JlZCA9IGdldF9jcmVkKGN1cnJlbnRfY3JlZCgpKTsNCj4gDQo+IC0gICAg ICAgYXV0aF9wcm9iZSA9IG1vdW50X2luZm8tPmN0eC0+YXV0aF9pbmZvLmZsYXZvcl9sZW4gPCAx Ow0KPiArICAgICAgIGF1dGhfcHJvYmUgPSBjdHgtPmF1dGhfaW5mby5mbGF2b3JfbGVuIDwgMTsN Cj4gDQo+ICAgICAgICAgLyogc2V0IHVwIHRoZSBnZW5lcmFsIFJQQyBjbGllbnQgKi8NCj4gLSAg ICAgICBlcnJvciA9IG5mczRfaW5pdF9zZXJ2ZXIoc2VydmVyLCBtb3VudF9pbmZvLT5jdHgpOw0K PiArICAgICAgIGVycm9yID0gbmZzNF9pbml0X3NlcnZlcihzZXJ2ZXIsIGZjKTsNCj4gICAgICAg ICBpZiAoZXJyb3IgPCAwKQ0KPiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsNCj4gDQo+IC0g ICAgICAgZXJyb3IgPSBuZnM0X3NlcnZlcl9jb21tb25fc2V0dXAoc2VydmVyLCBtb3VudF9pbmZv LT5tbnRmaCwNCj4gYXV0aF9wcm9iZSk7DQo+ICsgICAgICAgZXJyb3IgPSBuZnM0X3NlcnZlcl9j b21tb25fc2V0dXAoc2VydmVyLCBjdHgtPm1udGZoLA0KPiBhdXRoX3Byb2JlKTsNCj4gICAgICAg ICBpZiAoZXJyb3IgPCAwKQ0KPiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsNCj4gDQo+IEBA IC0xMTQyLDkgKzExNDEsOSBAQCBzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzNF9jcmVhdGVfc2VydmVy KHN0cnVjdA0KPiBuZnNfbW91bnRfaW5mbyAqbW91bnRfaW5mbykNCj4gIC8qDQo+ICAgKiBDcmVh dGUgYW4gTkZTNCByZWZlcnJhbCBzZXJ2ZXIgcmVjb3JkDQo+ICAgKi8NCj4gLXN0cnVjdCBuZnNf c2VydmVyICpuZnM0X2NyZWF0ZV9yZWZlcnJhbF9zZXJ2ZXIoc3RydWN0DQo+IG5mc19jbG9uZV9t b3VudCAqZGF0YSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgbmZzX2ZoICptbnRmaCkNCj4gK3N0cnVjdCBuZnNfc2VydmVyICpuZnM0X2Ny ZWF0ZV9yZWZlcnJhbF9zZXJ2ZXIoc3RydWN0IGZzX2NvbnRleHQNCj4gKmZjKQ0KPiAgew0KPiAr ICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMpOw0K PiAgICAgICAgIHN0cnVjdCBuZnNfY2xpZW50ICpwYXJlbnRfY2xpZW50Ow0KPiAgICAgICAgIHN0 cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsICpwYXJlbnRfc2VydmVyOw0KPiAgICAgICAgIGJvb2wg YXV0aF9wcm9iZTsNCj4gQEAgLTExNTQsNyArMTE1Myw3IEBAIHN0cnVjdCBuZnNfc2VydmVyDQo+ ICpuZnM0X2NyZWF0ZV9yZWZlcnJhbF9zZXJ2ZXIoc3RydWN0IG5mc19jbG9uZV9tb3VudCAqZGF0 YSwNCj4gICAgICAgICBpZiAoIXNlcnZlcikNCj4gICAgICAgICAgICAgICAgIHJldHVybiBFUlJf UFRSKC1FTk9NRU0pOw0KPiANCj4gLSAgICAgICBwYXJlbnRfc2VydmVyID0gTkZTX1NCKGRhdGEt PnNiKTsNCj4gKyAgICAgICBwYXJlbnRfc2VydmVyID0gTkZTX1NCKGN0eC0+Y2xvbmVfZGF0YS5z Yik7DQo+ICAgICAgICAgcGFyZW50X2NsaWVudCA9IHBhcmVudF9zZXJ2ZXItPm5mc19jbGllbnQ7 DQo+IA0KPiAgICAgICAgIHNlcnZlci0+Y3JlZCA9IGdldF9jcmVkKHBhcmVudF9zZXJ2ZXItPmNy ZWQpOw0KPiBAQCAtMTE2NCwxMCArMTE2MywxMSBAQCBzdHJ1Y3QgbmZzX3NlcnZlcg0KPiAqbmZz NF9jcmVhdGVfcmVmZXJyYWxfc2VydmVyKHN0cnVjdCBuZnNfY2xvbmVfbW91bnQgKmRhdGEsDQo+ IA0KPiAgICAgICAgIC8qIEdldCBhIGNsaWVudCByZXByZXNlbnRhdGlvbiAqLw0KPiAgI2lmIElT X0VOQUJMRUQoQ09ORklHX1NVTlJQQ19YUFJUX1JETUEpDQo+IC0gICAgICAgcnBjX3NldF9wb3J0 KGRhdGEtPmFkZHIsIE5GU19SRE1BX1BPUlQpOw0KPiAtICAgICAgIGVycm9yID0gbmZzNF9zZXRf Y2xpZW50KHNlcnZlciwgZGF0YS0+aG9zdG5hbWUsDQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGF0YS0+YWRkciwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk YXRhLT5hZGRybGVuLA0KPiArICAgICAgIHJwY19zZXRfcG9ydCgmY3R4LT5uZnNfc2VydmVyLmFk ZHJlc3MsIE5GU19SRE1BX1BPUlQpOw0KPiArICAgICAgIGVycm9yID0gbmZzNF9zZXRfY2xpZW50 KHNlcnZlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPm5mc19zZXJ2 ZXIuaG9zdG5hbWUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+bmZz X3NlcnZlci5hZGRyZXNzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ bmZzX3NlcnZlci5hZGRybGVuLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh cmVudF9jbGllbnQtPmNsX2lwYWRkciwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBYUFJUX1RSQU5TUE9SVF9SRE1BLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBhcmVudF9zZXJ2ZXItPmNsaWVudC0+Y2xfdGltZW91dCwNCj4gQEAgLTExNzgsMTAgKzExNzgs MTEgQEAgc3RydWN0IG5mc19zZXJ2ZXINCj4gKm5mczRfY3JlYXRlX3JlZmVycmFsX3NlcnZlcihz dHJ1Y3QgbmZzX2Nsb25lX21vdW50ICpkYXRhLA0KPiAgICAgICAgICAgICAgICAgZ290byBpbml0 X3NlcnZlcjsNCj4gICNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfWFBSVF9SRE1B KSAqLw0KPiANCj4gLSAgICAgICBycGNfc2V0X3BvcnQoZGF0YS0+YWRkciwgTkZTX1BPUlQpOw0K PiAtICAgICAgIGVycm9yID0gbmZzNF9zZXRfY2xpZW50KHNlcnZlciwgZGF0YS0+aG9zdG5hbWUs DQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+YWRkciwNCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5hZGRybGVuLA0KPiArICAgICAgIHJwY19z ZXRfcG9ydCgmY3R4LT5uZnNfc2VydmVyLmFkZHJlc3MsIE5GU19QT1JUKTsNCj4gKyAgICAgICBl cnJvciA9IG5mczRfc2V0X2NsaWVudChzZXJ2ZXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3R4LT5uZnNfc2VydmVyLmhvc3RuYW1lLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZjdHgtPm5mc19zZXJ2ZXIuYWRkcmVzcywNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjdHgtPm5mc19zZXJ2ZXIuYWRkcmxlbiwNCj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwYXJlbnRfY2xpZW50LT5jbF9pcGFkZHIsDQo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgWFBSVF9UUkFOU1BPUlRfVENQLA0KPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF9zZXJ2ZXItPmNsaWVudC0+Y2xfdGltZW91dCwN Cj4gQEAgLTExOTQsMTMgKzExOTUsMTQgQEAgc3RydWN0IG5mc19zZXJ2ZXINCj4gKm5mczRfY3Jl YXRlX3JlZmVycmFsX3NlcnZlcihzdHJ1Y3QgbmZzX2Nsb25lX21vdW50ICpkYXRhLA0KPiAgI2lm IElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19YUFJUX1JETUEpDQo+ICBpbml0X3NlcnZlcjoNCj4g ICNlbmRpZg0KPiAtICAgICAgIGVycm9yID0gbmZzX2luaXRfc2VydmVyX3JwY2NsaWVudChzZXJ2 ZXIsIHBhcmVudF9zZXJ2ZXItDQo+ID5jbGllbnQtPmNsX3RpbWVvdXQsIGRhdGEtPmF1dGhmbGF2 b3IpOw0KPiArICAgICAgIGVycm9yID0gbmZzX2luaXRfc2VydmVyX3JwY2NsaWVudChzZXJ2ZXIs IHBhcmVudF9zZXJ2ZXItDQo+ID5jbGllbnQtPmNsX3RpbWVvdXQsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+c2VsZWN0ZWRfZmxhdm9yKTsNCj4gICAg ICAgICBpZiAoZXJyb3IgPCAwKQ0KPiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsNCj4gDQo+ ICAgICAgICAgYXV0aF9wcm9iZSA9IHBhcmVudF9zZXJ2ZXItPmF1dGhfaW5mby5mbGF2b3JfbGVu IDwgMTsNCj4gDQo+IC0gICAgICAgZXJyb3IgPSBuZnM0X3NlcnZlcl9jb21tb25fc2V0dXAoc2Vy dmVyLCBtbnRmaCwgYXV0aF9wcm9iZSk7DQo+ICsgICAgICAgZXJyb3IgPSBuZnM0X3NlcnZlcl9j b21tb25fc2V0dXAoc2VydmVyLCBjdHgtPm1udGZoLA0KPiBhdXRoX3Byb2JlKTsNCj4gICAgICAg ICBpZiAoZXJyb3IgPCAwKQ0KPiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsNCj4gDQo+IGRp ZmYgLS1naXQgYS9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jIGIvZnMvbmZzL25mczRuYW1lc3BhY2Uu Yw0KPiBpbmRleCAyZTQ2MGMzM2FlNDguLjM3OTk5OTI1MDQwYSAxMDA2NDQNCj4gLS0tIGEvZnMv bmZzL25mczRuYW1lc3BhY2UuYw0KPiArKysgYi9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jDQo+IEBA IC04LDYgKzgsNyBAQA0KPiAgICogTkZTdjQgbmFtZXNwYWNlDQo+ICAgKi8NCj4gDQo+ICsjaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ICAjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+DQo+ICAj aW5jbHVkZSA8bGludXgvbW91bnQuaD4NCj4gICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPg0KPiBA QCAtMjEsMzcgKzIyLDY0IEBADQo+ICAjaW5jbHVkZSA8bGludXgvaW5ldC5oPg0KPiAgI2luY2x1 ZGUgImludGVybmFsLmgiDQo+ICAjaW5jbHVkZSAibmZzNF9mcy5oIg0KPiArI2luY2x1ZGUgIm5m cy5oIg0KPiAgI2luY2x1ZGUgImRuc19yZXNvbHZlLmgiDQo+IA0KPiAgI2RlZmluZSBORlNEQkdf RkFDSUxJVFkgICAgICAgICAgICAgICAgTkZTREJHX1ZGUw0KPiANCj4gKy8qDQo+ICsgKiBXb3Jr IG91dCB0aGUgbGVuZ3RoIHRoYXQgYW4gTkZTdjQgcGF0aCB3b3VsZCByZW5kZXIgdG8gYXMgYQ0K PiBzdGFuZGFyZCBwb3NpeA0KPiArICogcGF0aCwgd2l0aCBhIGxlYWRpbmcgc2xhc2ggYnV0IG5v IHRlcm1pbmF0aW5nIHNsYXNoLg0KPiArICovDQo+ICtzdGF0aWMgc3NpemVfdCBuZnM0X3BhdGhu YW1lX2xlbihjb25zdCBzdHJ1Y3QgbmZzNF9wYXRobmFtZQ0KPiAqcGF0aG5hbWUpDQo+ICt7DQo+ ICsgICAgICAgc3NpemVfdCBsZW4gPSAwOw0KPiArICAgICAgIGludCBpOw0KPiArDQo+ICsgICAg ICAgZm9yIChpID0gMDsgaSA8IHBhdGhuYW1lLT5uY29tcG9uZW50czsgaSsrKSB7DQo+ICsgICAg ICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmZzNF9zdHJpbmcgKmNvbXBvbmVudCA9ICZwYXRobmFt ZS0NCj4gPmNvbXBvbmVudHNbaV07DQo+ICsNCj4gKyAgICAgICAgICAgICAgIGlmIChjb21wb25l bnQtPmxlbiA+IE5BTUVfTUFYKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHRvb19s b25nOw0KPiArICAgICAgICAgICAgICAgbGVuICs9IDEgKyBjb21wb25lbnQtPmxlbjsgLyogQWRk aW5nICIvZm9vIiAqLw0KPiArICAgICAgICAgICAgICAgaWYgKGxlbiA+IFBBVEhfTUFYKQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHRvb19sb25nOw0KPiArICAgICAgIH0NCj4gKyAg ICAgICByZXR1cm4gbGVuOw0KPiArDQo+ICt0b29fbG9uZzoNCj4gKyAgICAgICByZXR1cm4gLUVO QU1FVE9PTE9ORzsNCj4gK30NCj4gKw0KPiAgLyoNCj4gICAqIENvbnZlcnQgdGhlIE5GU3Y0IHBh dGhuYW1lIGNvbXBvbmVudHMgaW50byBhIHN0YW5kYXJkIHBvc2l4IHBhdGguDQo+IC0gKg0KPiAt ICogTm90ZSB0aGF0IHRoZSByZXN1bHRpbmcgc3RyaW5nIHdpbGwgYmUgcGxhY2VkIGF0IHRoZSBl bmQgb2YgdGhlDQo+IGJ1ZmZlcg0KPiAgICovDQo+IC1zdGF0aWMgaW5saW5lIGNoYXIgKm5mczRf cGF0aG5hbWVfc3RyaW5nKGNvbnN0IHN0cnVjdCBuZnM0X3BhdGhuYW1lDQo+ICpwYXRobmFtZSwN Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIs IHNzaXplX3QNCj4gYnVmbGVuKQ0KPiArc3RhdGljIGNoYXIgKm5mczRfcGF0aG5hbWVfc3RyaW5n KGNvbnN0IHN0cnVjdCBuZnM0X3BhdGhuYW1lDQo+ICpwYXRobmFtZSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfbGVuKQ0KPiAgew0KPiAtICAg ICAgIGNoYXIgKmVuZCA9IGJ1ZmZlciArIGJ1ZmxlbjsNCj4gLSAgICAgICBpbnQgbjsNCj4gKyAg ICAgICBzc2l6ZV90IGxlbjsNCj4gKyAgICAgICBjaGFyICpidWYsICpwOw0KPiArICAgICAgIGlu dCBpOw0KPiArDQo+ICsgICAgICAgbGVuID0gbmZzNF9wYXRobmFtZV9sZW4ocGF0aG5hbWUpOw0K PiArICAgICAgIGlmIChsZW4gPCAwKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIo bGVuKTsNCj4gKyAgICAgICAqX2xlbiA9IGxlbjsNCj4gDQo+IC0gICAgICAgKi0tZW5kID0gJ1ww JzsNCj4gLSAgICAgICBidWZsZW4tLTsNCj4gLQ0KPiAtICAgICAgIG4gPSBwYXRobmFtZS0+bmNv bXBvbmVudHM7DQo+IC0gICAgICAgd2hpbGUgKC0tbiA+PSAwKSB7DQo+IC0gICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3QgbmZzNF9zdHJpbmcgKmNvbXBvbmVudCA9ICZwYXRobmFtZS0NCj4gPmNv bXBvbmVudHNbbl07DQo+IC0gICAgICAgICAgICAgICBidWZsZW4gLT0gY29tcG9uZW50LT5sZW4g KyAxOw0KPiAtICAgICAgICAgICAgICAgaWYgKGJ1ZmxlbiA8IDApDQo+IC0gICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gRWxvbmc7DQo+IC0gICAgICAgICAgICAgICBlbmQgLT0gY29tcG9uZW50 LT5sZW47DQo+IC0gICAgICAgICAgICAgICBtZW1jcHkoZW5kLCBjb21wb25lbnQtPmRhdGEsIGNv bXBvbmVudC0+bGVuKTsNCj4gLSAgICAgICAgICAgICAgICotLWVuZCA9ICcvJzsNCj4gKyAgICAg ICBwID0gYnVmID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsNCj4gKyAgICAgICBpZiAo IWJ1ZikNCj4gKyAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiArDQo+ ICsgICAgICAgZm9yIChpID0gMDsgaSA8IHBhdGhuYW1lLT5uY29tcG9uZW50czsgaSsrKSB7DQo+ ICsgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmZzNF9zdHJpbmcgKmNvbXBvbmVudCA9ICZw YXRobmFtZS0NCj4gPmNvbXBvbmVudHNbaV07DQo+ICsNCj4gKyAgICAgICAgICAgICAgICpwKysg PSAnLyc7DQo+ICsgICAgICAgICAgICAgICBtZW1jcHkocCwgY29tcG9uZW50LT5kYXRhLCBjb21w b25lbnQtPmxlbik7DQo+ICsgICAgICAgICAgICAgICBwICs9IGNvbXBvbmVudC0+bGVuOw0KPiAg ICAgICAgIH0NCj4gLSAgICAgICByZXR1cm4gZW5kOw0KPiAtRWxvbmc6DQo+IC0gICAgICAgcmV0 dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7DQo+ICsNCj4gKyAgICAgICAqcCA9IDA7DQo+ICsg ICAgICAgcmV0dXJuIGJ1ZjsNCj4gIH0NCj4gDQo+ICAvKg0KPiBAQCAtMTAwLDIxICsxMjgsMjUg QEAgc3RhdGljIGNoYXIgKm5mczRfcGF0aChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksDQo+IGNoYXIg KmJ1ZmZlciwgc3NpemVfdCBidWZsZW4pDQo+ICAgKi8NCj4gIHN0YXRpYyBpbnQgbmZzNF92YWxp ZGF0ZV9mc3BhdGgoc3RydWN0IGRlbnRyeSAqZGVudHJ5LA0KPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZnM0X2ZzX2xvY2F0aW9ucw0KPiAqbG9jYXRpb25z LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBhZ2UsIGNoYXIgKnBh Z2UyKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfZnNfY29u dGV4dCAqY3R4KQ0KPiAgew0KPiAtICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsICpmc19wYXRoOw0K PiArICAgICAgIGNvbnN0IGNoYXIgKnBhdGg7DQo+ICsgICAgICAgY2hhciAqYnVmOw0KPiArICAg ICAgIGludCBuOw0KPiANCj4gLSAgICAgICBwYXRoID0gbmZzNF9wYXRoKGRlbnRyeSwgcGFnZSwg UEFHRV9TSVpFKTsNCj4gLSAgICAgICBpZiAoSVNfRVJSKHBhdGgpKQ0KPiArICAgICAgIGJ1ZiA9 IGttYWxsb2MoNDA5NiwgR0ZQX0tFUk5FTCk7DQo+ICsgICAgICAgcGF0aCA9IG5mczRfcGF0aChk ZW50cnksIGJ1ZiwgNDA5Nik7DQo+ICsgICAgICAgaWYgKElTX0VSUihwYXRoKSkgew0KPiArICAg ICAgICAgICAgICAga2ZyZWUoYnVmKTsNCj4gICAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJS KHBhdGgpOw0KPiArICAgICAgIH0NCj4gDQo+IC0gICAgICAgZnNfcGF0aCA9IG5mczRfcGF0aG5h bWVfc3RyaW5nKCZsb2NhdGlvbnMtPmZzX3BhdGgsIHBhZ2UyLA0KPiBQQUdFX1NJWkUpOw0KPiAt ICAgICAgIGlmIChJU19FUlIoZnNfcGF0aCkpDQo+IC0gICAgICAgICAgICAgICByZXR1cm4gUFRS X0VSUihmc19wYXRoKTsNCj4gLQ0KPiAtICAgICAgIGlmIChzdHJuY21wKHBhdGgsIGZzX3BhdGgs IHN0cmxlbihmc19wYXRoKSkgIT0gMCkgew0KPiArICAgICAgIG4gPSBzdHJuY21wKHBhdGgsIGN0 eC0+bmZzX3NlcnZlci5leHBvcnRfcGF0aCwNCj4gKyAgICAgICAgICAgICAgICAgICBjdHgtPm5m c19zZXJ2ZXIuZXhwb3J0X3BhdGhfbGVuKTsNCj4gKyAgICAgICBrZnJlZShidWYpOw0KPiArICAg ICAgIGlmIChuICE9IDApIHsNCj4gICAgICAgICAgICAgICAgIGRwcmludGsoIiVzOiBwYXRoICVz IGRvZXMgbm90IGJlZ2luIHdpdGggZnNyb290DQo+ICVzXG4iLA0KPiAtICAgICAgICAgICAgICAg ICAgICAgICBfX2Z1bmNfXywgcGF0aCwgZnNfcGF0aCk7DQo+ICsgICAgICAgICAgICAgICAgICAg ICAgIF9fZnVuY19fLCBwYXRoLCBjdHgtPm5mc19zZXJ2ZXIuZXhwb3J0X3BhdGgpOw0KPiAgICAg ICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7DQo+ICAgICAgICAgfQ0KPiANCj4gQEAgLTIzNiw1 NSArMjY4LDcwIEBAIG5mczRfbmVnb3RpYXRlX3NlY3VyaXR5KHN0cnVjdCBycGNfY2xudCAqY2xu dCwNCj4gc3RydWN0IGlub2RlICppbm9kZSwNCj4gICAgICAgICByZXR1cm4gbmV3Ow0KPiAgfQ0K PiANCj4gLXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnRyeV9sb2NhdGlvbihzdHJ1Y3QgbmZzX2Ns b25lX21vdW50DQo+ICptb3VudGRhdGEsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpwYWdlLCBjaGFyICpwYWdlMiwNCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZnM0X2ZzX2xvY2F0aW9uDQo+ICpsb2NhdGlv bikNCj4gK3N0YXRpYyBpbnQgdHJ5X2xvY2F0aW9uKHN0cnVjdCBmc19jb250ZXh0ICpmYywNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5mczRfZnNfbG9jYXRpb24gKmxv Y2F0aW9uKQ0KPiAgew0KPiAtICAgICAgIGNvbnN0IHNpemVfdCBhZGRyX2J1ZnNpemUgPSBzaXpl b2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpOw0KPiAtICAgICAgIHN0cnVjdCBuZXQgKm5ldCA9 IHJwY19uZXRfbnMoTkZTX1NCKG1vdW50ZGF0YS0+c2IpLT5jbGllbnQpOw0KPiAtICAgICAgIHN0 cnVjdCB2ZnNtb3VudCAqbW50ID0gRVJSX1BUUigtRU5PRU5UKTsNCj4gLSAgICAgICBjaGFyICpt bnRfcGF0aDsNCj4gLSAgICAgICB1bnNpZ25lZCBpbnQgbWF4YnVmbGVuOw0KPiAtICAgICAgIHVu c2lnbmVkIGludCBzOw0KPiArICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4ID0gbmZz X2ZjMmNvbnRleHQoZmMpOw0KPiArICAgICAgIHVuc2lnbmVkIGludCBsZW4sIHM7DQo+ICsgICAg ICAgY2hhciAqc291cmNlLCAqcDsNCj4gKyAgICAgICBpbnQgcmV0ID0gLUVOT0VOVDsNCj4gKw0K PiArICAgICAgIC8qIEFsbG9jYXRlIGEgYnVmZmVyIGJpZyBlbm91Z2ggdG8gaG9sZCBhbnkgb2Yg dGhlIGhvc3RuYW1lcw0KPiBwbHVzIGENCj4gKyAgICAgICAgKiB0ZXJtaW5hdGluZyBjaGFyIGFu ZCBhbHNvIGEgYnVmZmVyIGJpZyBlbm91Z2ggdG8gaG9sZCB0aGUNCj4gaG9zdG5hbWUNCj4gKyAg ICAgICAgKiBwbHVzIGEgY29sb24gcGx1cyB0aGUgcGF0aC4NCj4gKyAgICAgICAgKi8NCj4gKyAg ICAgICBsZW4gPSAwOw0KPiArICAgICAgIGZvciAocyA9IDA7IHMgPCBsb2NhdGlvbi0+bnNlcnZl cnM7IHMrKykgew0KPiArICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5mczRfc3RyaW5nICpi dWYgPSAmbG9jYXRpb24tDQo+ID5zZXJ2ZXJzW3NdOw0KPiArICAgICAgICAgICAgICAgaWYgKGJ1 Zi0+bGVuID4gbGVuKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSBidWYtPmxlbjsN Cj4gKyAgICAgICB9DQo+IA0KPiAtICAgICAgIG1udF9wYXRoID0gbmZzNF9wYXRobmFtZV9zdHJp bmcoJmxvY2F0aW9uLT5yb290cGF0aCwgcGFnZTIsDQo+IFBBR0VfU0laRSk7DQo+IC0gICAgICAg aWYgKElTX0VSUihtbnRfcGF0aCkpDQo+IC0gICAgICAgICAgICAgICByZXR1cm4gRVJSX0NBU1Qo bW50X3BhdGgpOw0KPiAtICAgICAgIG1vdW50ZGF0YS0+bW50X3BhdGggPSBtbnRfcGF0aDsNCj4g LSAgICAgICBtYXhidWZsZW4gPSBtbnRfcGF0aCAtIDEgLSBwYWdlMjsNCj4gKyAgICAgICBrZnJl ZShjdHgtPm5mc19zZXJ2ZXIuaG9zdG5hbWUpOw0KPiArICAgICAgIGN0eC0+bmZzX3NlcnZlci5o b3N0bmFtZSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7DQo+ICsgICAgICAgaWYgKCFj dHgtPm5mc19zZXJ2ZXIuaG9zdG5hbWUpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT01F TTsNCj4gDQo+IC0gICAgICAgbW91bnRkYXRhLT5hZGRyID0ga21hbGxvYyhhZGRyX2J1ZnNpemUs IEdGUF9LRVJORUwpOw0KPiAtICAgICAgIGlmIChtb3VudGRhdGEtPmFkZHIgPT0gTlVMTCkNCj4g LSAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiArICAgICAgIHNvdXJj ZSA9IGttYWxsb2MobGVuICsgMSArIGN0eC0+bmZzX3NlcnZlci5leHBvcnRfcGF0aF9sZW4gKw0K PiAxLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7DQo+ICsgICAgICAg aWYgKCFzb3VyY2UpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gDQo+ICsg ICAgICAga2ZyZWUoZmMtPnNvdXJjZSk7DQo+ICsgICAgICAgZmMtPnNvdXJjZSA9IHNvdXJjZTsN Cj4gICAgICAgICBmb3IgKHMgPSAwOyBzIDwgbG9jYXRpb24tPm5zZXJ2ZXJzOyBzKyspIHsNCj4g ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZnM0X3N0cmluZyAqYnVmID0gJmxvY2F0aW9u LQ0KPiA+c2VydmVyc1tzXTsNCj4gDQo+IC0gICAgICAgICAgICAgICBpZiAoYnVmLT5sZW4gPD0g MCB8fCBidWYtPmxlbiA+PSBtYXhidWZsZW4pDQo+IC0gICAgICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOw0KPiAtDQo+ICAgICAgICAgICAgICAgICBpZiAobWVtY2hyKGJ1Zi0+ZGF0YSwgSVBW Nl9TQ09QRV9ERUxJTUlURVIsIGJ1Zi0NCj4gPmxlbikpDQo+ICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOw0KPiANCj4gLSAgICAgICAgICAgICAgIG1vdW50ZGF0YS0+YWRkcmxlbiA9 IG5mc19wYXJzZV9zZXJ2ZXJfbmFtZShidWYtPmRhdGEsIA0KPiBidWYtPmxlbiwNCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VudGRhdGEtPmFkZHIsIGFkZHJfYnVmc2l6ZSwg bmV0KTsNCj4gLSAgICAgICAgICAgICAgIGlmIChtb3VudGRhdGEtPmFkZHJsZW4gPT0gMCkNCj4g KyAgICAgICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5hZGRybGVuID0NCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgbmZzX3BhcnNlX3NlcnZlcl9uYW1lKGJ1Zi0+ZGF0YSwgYnVmLT5sZW4sDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LQ0KPiA+ bmZzX3NlcnZlci5hZGRyZXNzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKGN0eC0NCj4gPm5mc19zZXJ2ZXIuX2FkZHJlc3MpLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmMtPm5ldF9ucyk7DQo+ ICsgICAgICAgICAgICAgICBpZiAoY3R4LT5uZnNfc2VydmVyLmFkZHJsZW4gPT0gMCkNCj4gICAg ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+IA0KPiAtICAgICAgICAgICAgICAgbWVt Y3B5KHBhZ2UyLCBidWYtPmRhdGEsIGJ1Zi0+bGVuKTsNCj4gLSAgICAgICAgICAgICAgIHBhZ2Uy W2J1Zi0+bGVuXSA9ICdcMCc7DQo+IC0gICAgICAgICAgICAgICBtb3VudGRhdGEtPmhvc3RuYW1l ID0gcGFnZTI7DQo+ICsgICAgICAgICAgICAgICBycGNfc2V0X3BvcnQoJmN0eC0+bmZzX3NlcnZl ci5hZGRyZXNzLCBORlNfUE9SVCk7DQo+IA0KPiAtICAgICAgICAgICAgICAgc25wcmludGYocGFn ZSwgUEFHRV9TSVpFLCAiJXM6JXMiLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1vdW50ZGF0YS0+aG9zdG5hbWUsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bW91bnRkYXRhLT5tbnRfcGF0aCk7DQo+ICsgICAgICAgICAgICAgICBtZW1jcHkoY3R4LT5uZnNf c2VydmVyLmhvc3RuYW1lLCBidWYtPmRhdGEsIGJ1Zi0NCj4gPmxlbik7DQo+ICsgICAgICAgICAg ICAgICBjdHgtPm5mc19zZXJ2ZXIuaG9zdG5hbWVbYnVmLT5sZW5dID0gJ1wwJzsNCj4gDQo+IC0g ICAgICAgICAgICAgICBtbnQgPSB2ZnNfc3VibW91bnQobW91bnRkYXRhLT5kZW50cnksDQo+ICZu ZnM0X3JlZmVycmFsX2ZzX3R5cGUsIHBhZ2UsIG1vdW50ZGF0YSk7DQo+IC0gICAgICAgICAgICAg ICBpZiAoIUlTX0VSUihtbnQpKQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4g KyAgICAgICAgICAgICAgIHAgPSBzb3VyY2U7DQo+ICsgICAgICAgICAgICAgICBtZW1jcHkocCwg YnVmLT5kYXRhLCBidWYtPmxlbik7DQo+ICsgICAgICAgICAgICAgICBwICs9IGJ1Zi0+bGVuOw0K PiArICAgICAgICAgICAgICAgKnArKyA9ICc6JzsNCj4gKyAgICAgICAgICAgICAgIG1lbWNweShw LCBjdHgtPm5mc19zZXJ2ZXIuZXhwb3J0X3BhdGgsIGN0eC0NCj4gPm5mc19zZXJ2ZXIuZXhwb3J0 X3BhdGhfbGVuKTsNCj4gKyAgICAgICAgICAgICAgIHAgKz0gY3R4LT5uZnNfc2VydmVyLmV4cG9y dF9wYXRoX2xlbjsNCj4gKyAgICAgICAgICAgICAgICpwID0gMDsNCj4gKw0KPiArICAgICAgICAg ICAgICAgcmV0ID0gbmZzNF9nZXRfcmVmZXJyYWxfdHJlZShmYyk7DQo+ICsgICAgICAgICAgICAg ICBpZiAocmV0ID09IDApDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KPiAg ICAgICAgIH0NCj4gLSAgICAgICBrZnJlZShtb3VudGRhdGEtPmFkZHIpOw0KPiAtICAgICAgIHJl dHVybiBtbnQ7DQo+ICsNCj4gKyAgICAgICByZXR1cm4gcmV0Ow0KPiAgfQ0KPiANCj4gIC8qKg0K PiBAQCAtMjkzLDM4ICszNDAsMzEgQEAgc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqdHJ5X2xvY2F0 aW9uKHN0cnVjdA0KPiBuZnNfY2xvbmVfbW91bnQgKm1vdW50ZGF0YSwNCj4gICAqIEBsb2NhdGlv bnM6IGFycmF5IG9mIE5GU3Y0IHNlcnZlciBsb2NhdGlvbiBpbmZvcm1hdGlvbg0KPiAgICoNCj4g ICAqLw0KPiAtc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqbmZzX2ZvbGxvd19yZWZlcnJhbChzdHJ1 Y3QgZGVudHJ5ICpkZW50cnksDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0DQo+IG5mczRfZnNfbG9jYXRpb25zICpsb2NhdGlvbnMpDQo+ ICtzdGF0aWMgaW50IG5mc19mb2xsb3dfcmVmZXJyYWwoc3RydWN0IGZzX2NvbnRleHQgKmZjLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5mczRfZnNfbG9j YXRpb25zDQo+ICpsb2NhdGlvbnMpDQo+ICB7DQo+IC0gICAgICAgc3RydWN0IHZmc21vdW50ICpt bnQgPSBFUlJfUFRSKC1FTk9FTlQpOw0KPiAtICAgICAgIHN0cnVjdCBuZnNfY2xvbmVfbW91bnQg bW91bnRkYXRhID0gew0KPiAtICAgICAgICAgICAgICAgLnNiID0gZGVudHJ5LT5kX3NiLA0KPiAt ICAgICAgICAgICAgICAgLmRlbnRyeSA9IGRlbnRyeSwNCj4gLSAgICAgICAgICAgICAgIC5hdXRo Zmxhdm9yID0gTkZTX1NCKGRlbnRyeS0+ZF9zYiktPmNsaWVudC0+Y2xfYXV0aC0NCj4gPmF1X2Zs YXZvciwNCj4gLSAgICAgICB9Ow0KPiAtICAgICAgIGNoYXIgKnBhZ2UgPSBOVUxMLCAqcGFnZTIg PSBOVUxMOw0KPiArICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4ID0gbmZzX2ZjMmNv bnRleHQoZmMpOw0KPiArICAgICAgIGNoYXIgKmV4cG9ydF9wYXRoOw0KPiAgICAgICAgIGludCBs b2MsIGVycm9yOw0KPiANCj4gICAgICAgICBpZiAobG9jYXRpb25zID09IE5VTEwgfHwgbG9jYXRp b25zLT5ubG9jYXRpb25zIDw9IDApDQo+IC0gICAgICAgICAgICAgICBnb3RvIG91dDsNCj4gKyAg ICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOw0KPiANCj4gLSAgICAgICBkcHJpbnRrKCIlczog cmVmZXJyYWwgYXQgJXBkMlxuIiwgX19mdW5jX18sIGRlbnRyeSk7DQo+ICsgICAgICAgZHByaW50 aygiJXM6IHJlZmVycmFsIGF0ICVwZDJcbiIsIF9fZnVuY19fLCBjdHgtDQo+ID5jbG9uZV9kYXRh LmRlbnRyeSk7DQo+IA0KPiAtICAgICAgIHBhZ2UgPSAoY2hhciAqKSBfX2dldF9mcmVlX3BhZ2Uo R0ZQX1VTRVIpOw0KPiAtICAgICAgIGlmICghcGFnZSkNCj4gLSAgICAgICAgICAgICAgIGdvdG8g b3V0Ow0KPiArICAgICAgIGV4cG9ydF9wYXRoID0gbmZzNF9wYXRobmFtZV9zdHJpbmcoJmxvY2F0 aW9ucy0+ZnNfcGF0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZjdHgtDQo+ID5uZnNfc2VydmVyLmV4cG9ydF9wYXRoX2xlbik7DQo+ICsgICAgICAgaWYg KElTX0VSUihleHBvcnRfcGF0aCkpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihl eHBvcnRfcGF0aCk7DQo+IA0KPiAtICAgICAgIHBhZ2UyID0gKGNoYXIgKikgX19nZXRfZnJlZV9w YWdlKEdGUF9VU0VSKTsNCj4gLSAgICAgICBpZiAoIXBhZ2UyKQ0KPiAtICAgICAgICAgICAgICAg Z290byBvdXQ7DQo+ICsgICAgICAgY3R4LT5uZnNfc2VydmVyLmV4cG9ydF9wYXRoID0gZXhwb3J0 X3BhdGg7DQo+IA0KPiAgICAgICAgIC8qIEVuc3VyZSBmcyBwYXRoIGlzIGEgcHJlZml4IG9mIGN1 cnJlbnQgZGVudHJ5IHBhdGggKi8NCj4gLSAgICAgICBlcnJvciA9IG5mczRfdmFsaWRhdGVfZnNw YXRoKGRlbnRyeSwgbG9jYXRpb25zLCBwYWdlLCBwYWdlMik7DQo+IC0gICAgICAgaWYgKGVycm9y IDwgMCkgew0KPiAtICAgICAgICAgICAgICAgbW50ID0gRVJSX1BUUihlcnJvcik7DQo+IC0gICAg ICAgICAgICAgICBnb3RvIG91dDsNCj4gLSAgICAgICB9DQo+ICsgICAgICAgZXJyb3IgPSBuZnM0 X3ZhbGlkYXRlX2ZzcGF0aChjdHgtPmNsb25lX2RhdGEuZGVudHJ5LA0KPiBsb2NhdGlvbnMsIGN0 eCk7DQo+ICsgICAgICAgaWYgKGVycm9yIDwgMCkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiBl cnJvcjsNCj4gDQo+ICsgICAgICAgZXJyb3IgPSAtRU5PRU5UOw0KPiAgICAgICAgIGZvciAobG9j ID0gMDsgbG9jIDwgbG9jYXRpb25zLT5ubG9jYXRpb25zOyBsb2MrKykgew0KPiAgICAgICAgICAg ICAgICAgY29uc3Qgc3RydWN0IG5mczRfZnNfbG9jYXRpb24gKmxvY2F0aW9uID0gJmxvY2F0aW9u cy0NCj4gPmxvY2F0aW9uc1tsb2NdOw0KPiANCj4gQEAgLTMzMiwxNSArMzcyLDEyIEBAIHN0YXRp YyBzdHJ1Y3QgdmZzbW91bnQNCj4gKm5mc19mb2xsb3dfcmVmZXJyYWwoc3RydWN0IGRlbnRyeSAq ZGVudHJ5LA0KPiAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5yb290cGF0aC5uY29tcG9u ZW50cyA9PSAwKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gDQo+IC0g ICAgICAgICAgICAgICBtbnQgPSB0cnlfbG9jYXRpb24oJm1vdW50ZGF0YSwgcGFnZSwgcGFnZTIs DQo+IGxvY2F0aW9uKTsNCj4gLSAgICAgICAgICAgICAgIGlmICghSVNfRVJSKG1udCkpDQo+IC0g ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICAgICAgICAgZXJyb3IgPSB0 cnlfbG9jYXRpb24oZmMsIGxvY2F0aW9uKTsNCj4gKyAgICAgICAgICAgICAgIGlmIChlcnJvciA9 PSAwKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gICAgICAgICB9DQo+ IA0KPiAtb3V0Og0KPiAtICAgICAgIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZSk7DQo+ IC0gICAgICAgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlMik7DQo+IC0gICAgICAgcmV0 dXJuIG1udDsNCj4gKyAgICAgICByZXR1cm4gZXJyb3I7DQo+ICB9DQo+IA0KPiAgLyoNCj4gQEAg LTM0OCw3MSArMzg1LDczIEBAIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQNCj4gKm5mc19mb2xsb3df cmVmZXJyYWwoc3RydWN0IGRlbnRyeSAqZGVudHJ5LA0KPiAgICogQGRlbnRyeSAtIGRlbnRyeSBv ZiByZWZlcnJhbA0KPiAgICoNCj4gICAqLw0KPiAtc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqbmZz X2RvX3JlZm1vdW50KHN0cnVjdCBycGNfY2xudCAqY2xpZW50LA0KPiBzdHJ1Y3QgZGVudHJ5ICpk ZW50cnkpDQo+ICtzdGF0aWMgaW50IG5mc19kb19yZWZtb3VudChzdHJ1Y3QgZnNfY29udGV4dCAq ZmMsIHN0cnVjdCBycGNfY2xudA0KPiAqY2xpZW50KQ0KPiAgew0KPiAtICAgICAgIHN0cnVjdCB2 ZnNtb3VudCAqbW50ID0gRVJSX1BUUigtRU5PTUVNKTsNCj4gLSAgICAgICBzdHJ1Y3QgZGVudHJ5 ICpwYXJlbnQ7DQo+ICsgICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHggPSBuZnNfZmMy Y29udGV4dChmYyk7DQo+ICsgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCAqcGFyZW50Ow0K PiAgICAgICAgIHN0cnVjdCBuZnM0X2ZzX2xvY2F0aW9ucyAqZnNfbG9jYXRpb25zID0gTlVMTDsN Cj4gICAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZTsNCj4gLSAgICAgICBpbnQgZXJyOw0KPiArICAg ICAgIGludCBlcnIgPSAtRU5PTUVNOw0KPiANCj4gICAgICAgICAvKiBCVUdfT04oSVNfUk9PVChk ZW50cnkpKTsgKi8NCj4gICAgICAgICBwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsNCj4g LSAgICAgICBpZiAocGFnZSA9PSBOVUxMKQ0KPiAtICAgICAgICAgICAgICAgcmV0dXJuIG1udDsN Cj4gKyAgICAgICBpZiAoIXBhZ2UpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsN Cj4gDQo+ICAgICAgICAgZnNfbG9jYXRpb25zID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG5mczRf ZnNfbG9jYXRpb25zKSwNCj4gR0ZQX0tFUk5FTCk7DQo+IC0gICAgICAgaWYgKGZzX2xvY2F0aW9u cyA9PSBOVUxMKQ0KPiArICAgICAgIGlmICghZnNfbG9jYXRpb25zKQ0KPiAgICAgICAgICAgICAg ICAgZ290byBvdXRfZnJlZTsNCj4gDQo+ICAgICAgICAgLyogR2V0IGxvY2F0aW9ucyAqLw0KPiAt ICAgICAgIG1udCA9IEVSUl9QVFIoLUVOT0VOVCk7DQo+IC0NCj4gKyAgICAgICBkZW50cnkgPSBj dHgtPmNsb25lX2RhdGEuZGVudHJ5Ow0KPiAgICAgICAgIHBhcmVudCA9IGRnZXRfcGFyZW50KGRl bnRyeSk7DQo+ICAgICAgICAgZHByaW50aygiJXM6IGdldHRpbmcgbG9jYXRpb25zIGZvciAlcGQy XG4iLA0KPiAgICAgICAgICAgICAgICAgX19mdW5jX18sIGRlbnRyeSk7DQo+IA0KPiAgICAgICAg IGVyciA9IG5mczRfcHJvY19mc19sb2NhdGlvbnMoY2xpZW50LCBkX2lub2RlKHBhcmVudCksDQo+ ICZkZW50cnktPmRfbmFtZSwgZnNfbG9jYXRpb25zLCBwYWdlKTsNCj4gICAgICAgICBkcHV0KHBh cmVudCk7DQo+IC0gICAgICAgaWYgKGVyciAhPSAwIHx8DQo+IC0gICAgICAgICAgIGZzX2xvY2F0 aW9ucy0+bmxvY2F0aW9ucyA8PSAwIHx8DQo+ICsgICAgICAgaWYgKGVyciAhPSAwKQ0KPiArICAg ICAgICAgICAgICAgZ290byBvdXRfZnJlZV8yOw0KPiArDQo+ICsgICAgICAgZXJyID0gLUVOT0VO VDsNCj4gKyAgICAgICBpZiAoZnNfbG9jYXRpb25zLT5ubG9jYXRpb25zIDw9IDAgfHwNCj4gICAg ICAgICAgICAgZnNfbG9jYXRpb25zLT5mc19wYXRoLm5jb21wb25lbnRzIDw9IDApDQo+IC0gICAg ICAgICAgICAgICBnb3RvIG91dF9mcmVlOw0KPiArICAgICAgICAgICAgICAgZ290byBvdXRfZnJl ZV8yOw0KPiANCj4gLSAgICAgICBtbnQgPSBuZnNfZm9sbG93X3JlZmVycmFsKGRlbnRyeSwgZnNf bG9jYXRpb25zKTsNCj4gKyAgICAgICBlcnIgPSBuZnNfZm9sbG93X3JlZmVycmFsKGZjLCBmc19s b2NhdGlvbnMpOw0KPiArb3V0X2ZyZWVfMjoNCj4gKyAgICAgICBrZnJlZShmc19sb2NhdGlvbnMp Ow0KPiAgb3V0X2ZyZWU6DQo+ICAgICAgICAgX19mcmVlX3BhZ2UocGFnZSk7DQo+IC0gICAgICAg a2ZyZWUoZnNfbG9jYXRpb25zKTsNCj4gLSAgICAgICByZXR1cm4gbW50Ow0KPiArICAgICAgIHJl dHVybiBlcnI7DQo+ICB9DQo+IA0KPiAtc3RydWN0IHZmc21vdW50ICpuZnM0X3N1Ym1vdW50KHN0 cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdA0KPiBkZW50cnkgKmRlbnRyeSwNCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfZmggKmZoLCBzdHJ1Y3QgbmZz X2ZhdHRyDQo+ICpmYXR0cikNCj4gK2ludCBuZnM0X3N1Ym1vdW50KHN0cnVjdCBmc19jb250ZXh0 ICpmYywgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcikNCj4gIHsNCj4gLSAgICAgICBycGNfYXV0 aGZsYXZvcl90IGZsYXZvciA9IHNlcnZlci0+Y2xpZW50LT5jbF9hdXRoLT5hdV9mbGF2b3I7DQo+ ICsgICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHggPSBuZnNfZmMyY29udGV4dChmYyk7 DQo+ICsgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gY3R4LT5jbG9uZV9kYXRhLmRlbnRy eTsNCj4gICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZ2V0X3BhcmVudChkZW50cnkp Ow0KPiAgICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyID0gZF9pbm9kZShwYXJlbnQpOw0KPiAgICAg ICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lID0gJmRlbnRyeS0+ZF9uYW1lOw0KPiAgICAgICAg IHN0cnVjdCBycGNfY2xudCAqY2xpZW50Ow0KPiAtICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50 Ow0KPiArICAgICAgIGludCByZXQ7DQo+IA0KPiAgICAgICAgIC8qIExvb2sgaXQgdXAgYWdhaW4g dG8gZ2V0IGl0cyBhdHRyaWJ1dGVzIGFuZCBzZWMgZmxhdm9yICovDQo+IC0gICAgICAgY2xpZW50 ID0gbmZzNF9wcm9jX2xvb2t1cF9tb3VudHBvaW50KGRpciwgbmFtZSwgZmgsIGZhdHRyKTsNCj4g KyAgICAgICBjbGllbnQgPSBuZnM0X3Byb2NfbG9va3VwX21vdW50cG9pbnQoZGlyLCBuYW1lLCBj dHgtPm1udGZoLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjdHgtPmNsb25lX2RhdGEuZmF0dHIpOw0KPiAgICAgICAgIGRwdXQocGFyZW50KTsNCj4gICAg ICAgICBpZiAoSVNfRVJSKGNsaWVudCkpDQo+IC0gICAgICAgICAgICAgICByZXR1cm4gRVJSX0NB U1QoY2xpZW50KTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGNsaWVudCk7DQo+ IA0KPiAtICAgICAgIGlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9WNF9SRUZFUlJB TCkgew0KPiAtICAgICAgICAgICAgICAgbW50ID0gbmZzX2RvX3JlZm1vdW50KGNsaWVudCwgZGVu dHJ5KTsNCj4gLSAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiArICAgICAgIGlmIChjdHgtPmNs b25lX2RhdGEuZmF0dHItPnZhbGlkICYNCj4gTkZTX0FUVFJfRkFUVFJfVjRfUkVGRVJSQUwpIHsN Cj4gKyAgICAgICAgICAgICAgIHJldCA9IG5mc19kb19yZWZtb3VudChmYywgY2xpZW50KTsNCj4g KyAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAgY3R4LT5zZWxlY3RlZF9mbGF2b3Ig PSBjbGllbnQtPmNsX2F1dGgtPmF1X2ZsYXZvcjsNCj4gKyAgICAgICAgICAgICAgIHJldCA9IG5m c19kb19zdWJtb3VudChmYyk7DQo+ICAgICAgICAgfQ0KPiANCj4gLSAgICAgICBpZiAoY2xpZW50 LT5jbF9hdXRoLT5hdV9mbGF2b3IgIT0gZmxhdm9yKQ0KPiAtICAgICAgICAgICAgICAgZmxhdm9y ID0gY2xpZW50LT5jbF9hdXRoLT5hdV9mbGF2b3I7DQo+IC0gICAgICAgbW50ID0gbmZzX2RvX3N1 Ym1vdW50KGRlbnRyeSwgZmgsIGZhdHRyLCBmbGF2b3IpOw0KPiAtb3V0Og0KPiAgICAgICAgIHJw Y19zaHV0ZG93bl9jbGllbnQoY2xpZW50KTsNCj4gLSAgICAgICByZXR1cm4gbW50Ow0KPiArICAg ICAgIHJldHVybiByZXQ7DQo+ICB9DQo+IA0KPiAgLyoNCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9u ZnM0cHJvYy5jIGIvZnMvbmZzL25mczRwcm9jLmMNCj4gaW5kZXggMTQwNjg1OGJhZTZjLi4yZjMx ZWNlMmY0YTQgMTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jDQo+ICsrKyBiL2ZzL25m cy9uZnM0cHJvYy5jDQo+IEBAIC05ODk1LDcgKzk4OTUsNyBAQCBjb25zdCBzdHJ1Y3QgbmZzX3Jw Y19vcHMgbmZzX3Y0X2NsaWVudG9wcyA9IHsNCj4gICAgICAgICAuZmlsZV9vcHMgICAgICAgPSAm bmZzNF9maWxlX29wZXJhdGlvbnMsDQo+ICAgICAgICAgLmdldHJvb3QgICAgICAgID0gbmZzNF9w cm9jX2dldF9yb290LA0KPiAgICAgICAgIC5zdWJtb3VudCAgICAgICA9IG5mczRfc3VibW91bnQs DQo+IC0gICAgICAgLnRyeV9tb3VudCAgICAgID0gbmZzNF90cnlfbW91bnQsDQo+ICsgICAgICAg LnRyeV9nZXRfdHJlZSAgID0gbmZzNF90cnlfZ2V0X3RyZWUsDQo+ICAgICAgICAgLmdldGF0dHIg ICAgICAgID0gbmZzNF9wcm9jX2dldGF0dHIsDQo+ICAgICAgICAgLnNldGF0dHIgICAgICAgID0g bmZzNF9wcm9jX3NldGF0dHIsDQo+ICAgICAgICAgLmxvb2t1cCAgICAgICAgID0gbmZzNF9wcm9j X2xvb2t1cCwNCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3VwZXIuYyBiL2ZzL25mcy9uZnM0 c3VwZXIuYw0KPiBpbmRleCBjYTk3NDAxMzdjZmUuLjNiMjdjNWUzZDc4MSAxMDA2NDQNCj4gLS0t IGEvZnMvbmZzL25mczRzdXBlci5jDQo+ICsrKyBiL2ZzL25mcy9uZnM0c3VwZXIuYw0KPiBAQCAt NCw2ICs0LDcgQEANCj4gICAqLw0KPiAgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gICNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPg0KPiAgI2lu Y2x1ZGUgPGxpbnV4L25mczRfbW91bnQuaD4NCj4gICNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4N Cj4gICNpbmNsdWRlICJkZWxlZ2F0aW9uLmgiDQo+IEBAIC0xOCwxNiArMTksNiBAQA0KPiANCj4g IHN0YXRpYyBpbnQgbmZzNF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QN Cj4gd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7DQo+ICBzdGF0aWMgdm9pZCBuZnM0X2V2aWN0X2lu b2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOw0KPiAtc3RhdGljIHN0cnVjdCBkZW50cnkgKm5mczRf cmVmZXJyYWxfbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUNCj4gKmZzX3R5cGUsDQo+IC0g ICAgICAgaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqcmF3X2RhdGEpOw0K PiAtDQo+IC1zdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBuZnM0X3JlZmVycmFsX2ZzX3R5cGUgPSB7 DQo+IC0gICAgICAgLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsDQo+IC0gICAgICAgLm5h bWUgICAgICAgICAgID0gIm5mczQiLA0KPiAtICAgICAgIC5tb3VudCAgICAgICAgICA9IG5mczRf cmVmZXJyYWxfbW91bnQsDQo+IC0gICAgICAgLmtpbGxfc2IgICAgICAgID0gbmZzX2tpbGxfc3Vw ZXIsDQo+IC0gICAgICAgLmZzX2ZsYWdzICAgICAgID0gRlNfUkVOQU1FX0RPRVNfRF9NT1ZFfEZT X0JJTkFSWV9NT1VOVERBVEEsDQo+IC19Ow0KPiANCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3Vw ZXJfb3BlcmF0aW9ucyBuZnM0X3NvcHMgPSB7DQo+ICAgICAgICAgLmFsbG9jX2lub2RlICAgID0g bmZzX2FsbG9jX2lub2RlLA0KPiBAQCAtNDEsMTYgKzMyLDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3Qgc3VwZXJfb3BlcmF0aW9ucyBuZnM0X3NvcHMgPQ0KPiB7DQo+ICAgICAgICAgLnNob3dfZGV2 bmFtZSAgID0gbmZzX3Nob3dfZGV2bmFtZSwNCj4gICAgICAgICAuc2hvd19wYXRoICAgICAgPSBu ZnNfc2hvd19wYXRoLA0KPiAgICAgICAgIC5zaG93X3N0YXRzICAgICA9IG5mc19zaG93X3N0YXRz LA0KPiAtICAgICAgIC5yZW1vdW50X2ZzICAgICA9IG5mc19yZW1vdW50LA0KPiAgfTsNCj4gDQo+ ICBzdHJ1Y3QgbmZzX3N1YnZlcnNpb24gbmZzX3Y0ID0gew0KPiAtICAgICAgIC5vd25lciA9IFRI SVNfTU9EVUxFLA0KPiAtICAgICAgIC5uZnNfZnMgICA9ICZuZnM0X2ZzX3R5cGUsDQo+IC0gICAg ICAgLnJwY192ZXJzID0gJm5mc192ZXJzaW9uNCwNCj4gLSAgICAgICAucnBjX29wcyAgPSAmbmZz X3Y0X2NsaWVudG9wcywNCj4gLSAgICAgICAuc29wcyAgICAgPSAmbmZzNF9zb3BzLA0KPiAtICAg ICAgIC54YXR0ciAgICA9IG5mczRfeGF0dHJfaGFuZGxlcnMsDQo+ICsgICAgICAgLm93bmVyICAg ICAgICAgID0gVEhJU19NT0RVTEUsDQo+ICsgICAgICAgLm5mc19mcyAgICAgICAgID0gJm5mczRf ZnNfdHlwZSwNCj4gKyAgICAgICAucnBjX3ZlcnMgICAgICAgPSAmbmZzX3ZlcnNpb240LA0KPiAr ICAgICAgIC5ycGNfb3BzICAgICAgICA9ICZuZnNfdjRfY2xpZW50b3BzLA0KPiArICAgICAgIC5z b3BzICAgICAgICAgICA9ICZuZnM0X3NvcHMsDQo+ICsgICAgICAgLnhhdHRyICAgICAgICAgID0g bmZzNF94YXR0cl9oYW5kbGVycywNCj4gIH07DQo+IA0KPiAgc3RhdGljIGludCBuZnM0X3dyaXRl X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdA0KPiB3cml0ZWJhY2tfY29udHJvbCAq d2JjKQ0KPiBAQCAtMTQ3LDEwNSArMTM3LDEyMyBAQCBzdGF0aWMgdm9pZCBuZnNfcmVmZXJyYWxf bG9vcF91bnByb3RlY3Qodm9pZCkNCj4gICAgICAgICBrZnJlZShwKTsNCj4gIH0NCj4gDQo+IC1z dGF0aWMgc3RydWN0IGRlbnRyeSAqZG9fbmZzNF9tb3VudChzdHJ1Y3QgbmZzX3NlcnZlciAqc2Vy dmVyLCBpbnQNCj4gZmxhZ3MsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBuZnNfbW91bnRfaW5mbyAqaW5mbywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsDQo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmV4cG9ydF9wYXRoKQ0KPiArc3RhdGljIGludCBk b19uZnM0X21vdW50KHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKmV4cG9ydF9wYXRoKQ0KPiAgew0KPiArICAgICAgIHN0cnVjdCBuZnNfZnNfY29u dGV4dCAqcm9vdF9jdHg7DQo+ICsgICAgICAgc3RydWN0IGZzX2NvbnRleHQgKnJvb3RfZmM7DQo+ ICAgICAgICAgc3RydWN0IHZmc21vdW50ICpyb290X21udDsNCj4gICAgICAgICBzdHJ1Y3QgZGVu dHJ5ICpkZW50cnk7DQo+IC0gICAgICAgY2hhciAqcm9vdF9kZXZuYW1lOw0KPiAtICAgICAgIGlu dCBlcnI7DQo+ICAgICAgICAgc2l6ZV90IGxlbjsNCj4gKyAgICAgICBpbnQgcmV0Ow0KPiArDQo+ ICsgICAgICAgc3RydWN0IGZzX3BhcmFtZXRlciBwYXJhbSA9IHsNCj4gKyAgICAgICAgICAgICAg IC5rZXkgICAgPSAic291cmNlIiwNCj4gKyAgICAgICAgICAgICAgIC50eXBlICAgPSBmc192YWx1 ZV9pc19zdHJpbmcsDQo+ICsgICAgICAgICAgICAgICAuZGlyZmQgID0gLTEsDQo+ICsgICAgICAg fTsNCj4gDQo+ICAgICAgICAgaWYgKElTX0VSUihzZXJ2ZXIpKQ0KPiAtICAgICAgICAgICAgICAg cmV0dXJuIEVSUl9DQVNUKHNlcnZlcik7DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VS UihzZXJ2ZXIpOw0KPiANCj4gLSAgICAgICBsZW4gPSBzdHJsZW4oaG9zdG5hbWUpICsgNTsNCj4g LSAgICAgICByb290X2Rldm5hbWUgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7DQo+IC0gICAg ICAgaWYgKHJvb3RfZGV2bmFtZSA9PSBOVUxMKSB7DQo+ICsgICAgICAgcm9vdF9mYyA9IHZmc19k dXBfZnNfY29udGV4dChmYyk7DQo+ICsgICAgICAgaWYgKElTX0VSUihyb290X2ZjKSkgew0KPiAg ICAgICAgICAgICAgICAgbmZzX2ZyZWVfc2VydmVyKHNlcnZlcik7DQo+IC0gICAgICAgICAgICAg ICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybiBQVFJf RVJSKHJvb3RfZmMpOw0KPiArICAgICAgIH0NCj4gKyAgICAgICBrZnJlZShyb290X2ZjLT5zb3Vy Y2UpOw0KPiArICAgICAgIHJvb3RfZmMtPnNvdXJjZSA9IE5VTEw7DQo+ICsNCj4gKyAgICAgICBy b290X2N0eCA9IG5mc19mYzJjb250ZXh0KHJvb3RfZmMpOw0KPiArICAgICAgIHJvb3RfY3R4LT5p bnRlcm5hbCA9IHRydWU7DQo+ICsgICAgICAgcm9vdF9jdHgtPnNlcnZlciA9IHNlcnZlcjsNCj4g KyAgICAgICAvKiBXZSBsZWF2ZSBleHBvcnRfcGF0aCB1bnNldCBhcyBpdCdzIG5vdCB1c2VkIHRv IGZpbmQgdGhlDQo+IHJvb3QuICovDQo+ICsNCj4gKyAgICAgICBsZW4gPSBzdHJsZW4oaG9zdG5h bWUpICsgNTsNCj4gKyAgICAgICBwYXJhbS5zdHJpbmcgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5F TCk7DQo+ICsgICAgICAgaWYgKHBhcmFtLnN0cmluZyA9PSBOVUxMKSB7DQo+ICsgICAgICAgICAg ICAgICBwdXRfZnNfY29udGV4dChyb290X2ZjKTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybiAt RU5PTUVNOw0KPiAgICAgICAgIH0NCj4gDQo+ICAgICAgICAgLyogRG9lcyBob3N0bmFtZSBuZWVk cyB0byBiZSBlbmNsb3NlZCBpbiBicmFja2V0cz8gKi8NCj4gICAgICAgICBpZiAoc3RyY2hyKGhv c3RuYW1lLCAnOicpKQ0KPiAtICAgICAgICAgICAgICAgc25wcmludGYocm9vdF9kZXZuYW1lLCBs ZW4sICJbJXNdOi8iLCBob3N0bmFtZSk7DQo+ICsgICAgICAgICAgICAgICBwYXJhbS5zaXplID0g c25wcmludGYocGFyYW0uc3RyaW5nLCBsZW4sICJbJXNdOi8iLA0KPiBob3N0bmFtZSk7DQo+ICAg ICAgICAgZWxzZQ0KPiAtICAgICAgICAgICAgICAgc25wcmludGYocm9vdF9kZXZuYW1lLCBsZW4s ICIlczovIiwgaG9zdG5hbWUpOw0KPiAtICAgICAgIGluZm8tPnNlcnZlciA9IHNlcnZlcjsNCj4g LSAgICAgICByb290X21udCA9IHZmc19rZXJuX21vdW50KCZuZnNfcHJlcGFyZWRfZnNfdHlwZSwg ZmxhZ3MsDQo+IHJvb3RfZGV2bmFtZSwgaW5mbyk7DQo+IC0gICAgICAgaWYgKGluZm8tPnNlcnZl cikNCj4gLSAgICAgICAgICAgICAgIG5mc19mcmVlX3NlcnZlcihpbmZvLT5zZXJ2ZXIpOw0KPiAt ICAgICAgIGluZm8tPnNlcnZlciA9IE5VTEw7DQo+IC0gICAgICAga2ZyZWUocm9vdF9kZXZuYW1l KTsNCj4gKyAgICAgICAgICAgICAgIHBhcmFtLnNpemUgPSBzbnByaW50ZihwYXJhbS5zdHJpbmcs IGxlbiwgIiVzOi8iLA0KPiBob3N0bmFtZSk7DQo+ICsgICAgICAgcmV0ID0gdmZzX3BhcnNlX2Zz X3BhcmFtKHJvb3RfZmMsICZwYXJhbSk7DQo+ICsgICAgICAga2ZyZWUocGFyYW0uc3RyaW5nKTsN Cj4gKyAgICAgICBpZiAocmV0IDwgMCkgew0KPiArICAgICAgICAgICAgICAgcHV0X2ZzX2NvbnRl eHQocm9vdF9mYyk7DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiArICAgICAgIH0N Cj4gKyAgICAgICByb290X21udCA9IGZjX21vdW50KHJvb3RfZmMpOw0KPiArICAgICAgIHB1dF9m c19jb250ZXh0KHJvb3RfZmMpOw0KPiANCj4gICAgICAgICBpZiAoSVNfRVJSKHJvb3RfbW50KSkN Cj4gLSAgICAgICAgICAgICAgIHJldHVybiBFUlJfQ0FTVChyb290X21udCk7DQo+ICsgICAgICAg ICAgICAgICByZXR1cm4gUFRSX0VSUihyb290X21udCk7DQo+IA0KPiAtICAgICAgIGVyciA9IG5m c19yZWZlcnJhbF9sb29wX3Byb3RlY3QoKTsNCj4gLSAgICAgICBpZiAoZXJyKSB7DQo+ICsgICAg ICAgcmV0ID0gbmZzX3JlZmVycmFsX2xvb3BfcHJvdGVjdCgpOw0KPiArICAgICAgIGlmIChyZXQp IHsNCj4gICAgICAgICAgICAgICAgIG1udHB1dChyb290X21udCk7DQo+IC0gICAgICAgICAgICAg ICByZXR1cm4gRVJSX1BUUihlcnIpOw0KPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4g ICAgICAgICB9DQo+IA0KPiAgICAgICAgIGRlbnRyeSA9IG1vdW50X3N1YnRyZWUocm9vdF9tbnQs IGV4cG9ydF9wYXRoKTsNCj4gICAgICAgICBuZnNfcmVmZXJyYWxfbG9vcF91bnByb3RlY3QoKTsN Cj4gDQo+IC0gICAgICAgcmV0dXJuIGRlbnRyeTsNCj4gKyAgICAgICBpZiAoSVNfRVJSKGRlbnRy eSkpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihkZW50cnkpOw0KPiArDQo+ICsg ICAgICAgZmMtPnJvb3QgPSBkZW50cnk7DQo+ICsgICAgICAgcmV0dXJuIDA7DQo+ICB9DQo+IA0K PiAtc3RydWN0IGRlbnRyeSAqbmZzNF90cnlfbW91bnQoaW50IGZsYWdzLCBjb25zdCBjaGFyICpk ZXZfbmFtZSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5mc19tb3Vu dF9pbmZvICptb3VudF9pbmZvKQ0KPiAraW50IG5mczRfdHJ5X2dldF90cmVlKHN0cnVjdCBmc19j b250ZXh0ICpmYykNCj4gIHsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9 IG1vdW50X2luZm8tPmN0eDsNCj4gLSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpyZXM7DQo+IC0NCj4g LSAgICAgICBkZnByaW50ayhNT1VOVCwgIi0tPiBuZnM0X3RyeV9tb3VudCgpXG4iKTsNCj4gKyAg ICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19mYzJjb250ZXh0KGZjKTsNCj4g KyAgICAgICBpbnQgZXJyOw0KPiANCj4gLSAgICAgICByZXMgPSBkb19uZnM0X21vdW50KG5mczRf Y3JlYXRlX3NlcnZlcihtb3VudF9pbmZvKSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg IGZsYWdzLCBtb3VudF9pbmZvLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5u ZnNfc2VydmVyLmhvc3RuYW1lLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5u ZnNfc2VydmVyLmV4cG9ydF9wYXRoKTsNCj4gKyAgICAgICBkZnByaW50ayhNT1VOVCwgIi0tPiBu ZnM0X3RyeV9nZXRfdHJlZSgpXG4iKTsNCj4gDQo+IC0gICAgICAgZGZwcmludGsoTU9VTlQsICI8 LS0gbmZzNF90cnlfbW91bnQoKSA9ICVkJXNcbiIsDQo+IC0gICAgICAgICAgICAgICAgUFRSX0VS Ul9PUl9aRVJPKHJlcyksDQo+IC0gICAgICAgICAgICAgICAgSVNfRVJSKHJlcykgPyAiIFtlcnJv cl0iIDogIiIpOw0KPiAtICAgICAgIHJldHVybiByZXM7DQo+ICsgICAgICAgLyogV2UgY3JlYXRl IGEgbW91bnQgZm9yIHRoZSBzZXJ2ZXIncyByb290LCB3YWxrIHRvIHRoZQ0KPiByZXF1ZXN0ZWQN Cj4gKyAgICAgICAgKiBsb2NhdGlvbiBhbmQgdGhlbiBjcmVhdGUgYW5vdGhlciBtb3VudCBmb3Ig dGhhdC4NCj4gKyAgICAgICAgKi8NCj4gKyAgICAgICBlcnI9IGRvX25mczRfbW91bnQobmZzNF9j cmVhdGVfc2VydmVyKGZjKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmMsIGN0eC0+ bmZzX3NlcnZlci5ob3N0bmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5u ZnNfc2VydmVyLmV4cG9ydF9wYXRoKTsNCj4gKyAgICAgICBpZiAoZXJyKSB7DQo+ICsgICAgICAg ICAgICAgICBkZnByaW50ayhNT1VOVCwgIjwtLSBuZnM0X3RyeV9nZXRfdHJlZSgpID0gJWQNCj4g W2Vycm9yXVxuIiwgZXJyKTsNCj4gKyAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAg ZGZwcmludGsoTU9VTlQsICI8LS0gbmZzNF90cnlfZ2V0X3RyZWUoKSA9IDBcbiIpOw0KPiArICAg ICAgIH0NCj4gKyAgICAgICByZXR1cm4gZXJyOw0KPiAgfQ0KPiANCj4gIC8qDQo+ICAgKiBDcmVh dGUgYW4gTkZTNCBzZXJ2ZXIgcmVjb3JkIG9uIHJlZmVycmFsIHRyYXZlcnNhbA0KPiAgICovDQo+ IC1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbmZzNF9yZWZlcnJhbF9tb3VudChzdHJ1Y3QgZmlsZV9z eXN0ZW1fdHlwZQ0KPiAqZnNfdHlwZSwNCj4gLSAgICAgICAgICAgICAgIGludCBmbGFncywgY29u c3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKnJhd19kYXRhKQ0KPiAraW50IG5mczRfZ2V0X3JlZmVy cmFsX3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQ0KPiAgew0KPiAtICAgICAgIHN0cnVjdCBu ZnNfY2xvbmVfbW91bnQgKmRhdGEgPSByYXdfZGF0YTsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX21v dW50X2luZm8gbW91bnRfaW5mbyA9IHsNCj4gLSAgICAgICAgICAgICAgIC5jbG9uZWQgPSBkYXRh LA0KPiAtICAgICAgICAgICAgICAgLm5mc19tb2QgPSAmbmZzX3Y0LA0KPiAtICAgICAgIH07DQo+ IC0gICAgICAgc3RydWN0IGRlbnRyeSAqcmVzOw0KPiArICAgICAgIHN0cnVjdCBuZnNfZnNfY29u dGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMpOw0KPiArICAgICAgIGludCBlcnI7DQo+IA0K PiAgICAgICAgIGRwcmludGsoIi0tPiBuZnM0X3JlZmVycmFsX21vdW50KClcbiIpOw0KPiANCj4g LSAgICAgICBtb3VudF9pbmZvLm1udGZoID0gbmZzX2FsbG9jX2ZoYW5kbGUoKTsNCj4gLSAgICAg ICBpZiAoIW1vdW50X2luZm8ubW50ZmgpDQo+IC0gICAgICAgICAgICAgICByZXR1cm4gRVJSX1BU UigtRU5PTUVNKTsNCj4gLQ0KPiAtICAgICAgIHJlcyA9DQo+IGRvX25mczRfbW91bnQobmZzNF9j cmVhdGVfcmVmZXJyYWxfc2VydmVyKG1vdW50X2luZm8uY2xvbmVkLA0KPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdW50X2luZm8ubW4N Cj4gdGZoKSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCAmbW91bnRfaW5m bywgZGF0YS0+aG9zdG5hbWUsIGRhdGEtDQo+ID5tbnRfcGF0aCk7DQo+IC0NCj4gLSAgICAgICBk cHJpbnRrKCI8LS0gbmZzNF9yZWZlcnJhbF9tb3VudCgpID0gJWQlc1xuIiwNCj4gLSAgICAgICAg ICAgICAgIFBUUl9FUlJfT1JfWkVSTyhyZXMpLA0KPiAtICAgICAgICAgICAgICAgSVNfRVJSKHJl cykgPyAiIFtlcnJvcl0iIDogIiIpOw0KPiAtDQo+IC0gICAgICAgbmZzX2ZyZWVfZmhhbmRsZSht b3VudF9pbmZvLm1udGZoKTsNCj4gLSAgICAgICByZXR1cm4gcmVzOw0KPiArICAgICAgIC8qIGNy ZWF0ZSBhIG5ldyB2b2x1bWUgcmVwcmVzZW50YXRpb24gKi8NCj4gKyAgICAgICBlcnIgPSBkb19u ZnM0X21vdW50KG5mczRfY3JlYXRlX3JlZmVycmFsX3NlcnZlcihmYyksDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICBmYywgY3R4LT5uZnNfc2VydmVyLmhvc3RuYW1lLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgY3R4LT5uZnNfc2VydmVyLmV4cG9ydF9wYXRoKTsNCj4gKyAg ICAgICBpZiAoZXJyKSB7DQo+ICsgICAgICAgICAgICAgICBkZnByaW50ayhNT1VOVCwgIjwtLSBu ZnM0X2dldF9yZWZlcnJhbF90cmVlKCkgPSAlZA0KPiBbZXJyb3JdXG4iLCBlcnIpOw0KPiArICAg ICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICBkZnByaW50ayhNT1VOVCwgIjwtLSBuZnM0 X2dldF9yZWZlcnJhbF90cmVlKCkgPQ0KPiAwXG4iKTsNCj4gKyAgICAgICB9DQo+ICsgICAgICAg cmV0dXJuIGVycjsNCj4gIH0NCj4gDQo+IC0NCj4gIHN0YXRpYyBpbnQgX19pbml0IGluaXRfbmZz X3Y0KHZvaWQpDQo+ICB7DQo+ICAgICAgICAgaW50IGVycjsNCj4gZGlmZiAtLWdpdCBhL2ZzL25m cy9wcm9jLmMgYi9mcy9uZnMvcHJvYy5jDQo+IGluZGV4IDU1NTJmYThiNmUxMi4uMDNiMTc1ZmQ5 NGI5IDEwMDY0NA0KPiAtLS0gYS9mcy9uZnMvcHJvYy5jDQo+ICsrKyBiL2ZzL25mcy9wcm9jLmMN Cj4gQEAgLTcwNyw3ICs3MDcsNyBAQCBjb25zdCBzdHJ1Y3QgbmZzX3JwY19vcHMgbmZzX3YyX2Ns aWVudG9wcyA9IHsNCj4gICAgICAgICAuZmlsZV9vcHMgICAgICAgPSAmbmZzX2ZpbGVfb3BlcmF0 aW9ucywNCj4gICAgICAgICAuZ2V0cm9vdCAgICAgICAgPSBuZnNfcHJvY19nZXRfcm9vdCwNCj4g ICAgICAgICAuc3VibW91bnQgICAgICAgPSBuZnNfc3VibW91bnQsDQo+IC0gICAgICAgLnRyeV9t b3VudCAgICAgID0gbmZzX3RyeV9tb3VudCwNCj4gKyAgICAgICAudHJ5X2dldF90cmVlICAgPSBu ZnNfdHJ5X2dldF90cmVlLA0KPiAgICAgICAgIC5nZXRhdHRyICAgICAgICA9IG5mc19wcm9jX2dl dGF0dHIsDQo+ICAgICAgICAgLnNldGF0dHIgICAgICAgID0gbmZzX3Byb2Nfc2V0YXR0ciwNCj4g ICAgICAgICAubG9va3VwICAgICAgICAgPSBuZnNfcHJvY19sb29rdXAsDQo+IGRpZmYgLS1naXQg YS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jDQo+IGluZGV4IDlhYTI3MDkzZDhiNi4u NjAxNzRhMzBhOTFhIDEwMDY0NA0KPiAtLS0gYS9mcy9uZnMvc3VwZXIuYw0KPiArKysgYi9mcy9u ZnMvc3VwZXIuYw0KPiBAQCAtNzAsMjggKzcwLDYgQEANCj4gDQo+ICAjZGVmaW5lIE5GU0RCR19G QUNJTElUWSAgICAgICAgICAgICAgICBORlNEQkdfVkZTDQo+IA0KPiAtc3RhdGljIHN0cnVjdCBk ZW50cnkgKm5mc19wcmVwYXJlZF9tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZQ0KPiAqZnNf dHlwZSwNCj4gLSAgICAgICAgICAgICAgIGludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUs IHZvaWQgKnJhd19kYXRhKTsNCj4gLQ0KPiAtc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbmZzX2Zz X3R5cGUgPSB7DQo+IC0gICAgICAgLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsDQo+IC0g ICAgICAgLm5hbWUgICAgICAgICAgID0gIm5mcyIsDQo+IC0gICAgICAgLm1vdW50ICAgICAgICAg ID0gbmZzX2ZzX21vdW50LA0KPiAtICAgICAgIC5raWxsX3NiICAgICAgICA9IG5mc19raWxsX3N1 cGVyLA0KPiAtICAgICAgIC5mc19mbGFncyAgICAgICA9IEZTX1JFTkFNRV9ET0VTX0RfTU9WRXxG U19CSU5BUllfTU9VTlREQVRBLA0KPiAtfTsNCj4gLU1PRFVMRV9BTElBU19GUygibmZzIik7DQo+ IC1FWFBPUlRfU1lNQk9MX0dQTChuZnNfZnNfdHlwZSk7DQo+IC0NCj4gLXN0cnVjdCBmaWxlX3N5 c3RlbV90eXBlIG5mc19wcmVwYXJlZF9mc190eXBlID0gew0KPiAtICAgICAgIC5vd25lciAgICAg ICAgICA9IFRISVNfTU9EVUxFLA0KPiAtICAgICAgIC5uYW1lICAgICAgICAgICA9ICJuZnMiLA0K PiAtICAgICAgIC5tb3VudCAgICAgICAgICA9IG5mc19wcmVwYXJlZF9tb3VudCwNCj4gLSAgICAg ICAua2lsbF9zYiAgICAgICAgPSBuZnNfa2lsbF9zdXBlciwNCj4gLSAgICAgICAuZnNfZmxhZ3Mg ICAgICAgPSBGU19SRU5BTUVfRE9FU19EX01PVkV8RlNfQklOQVJZX01PVU5UREFUQSwNCj4gLX07 DQo+IC1FWFBPUlRfU1lNQk9MX0dQTChuZnNfcHJlcGFyZWRfZnNfdHlwZSk7DQo+IC0NCj4gIGNv bnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG5mc19zb3BzID0gew0KPiAgICAgICAgIC5hbGxv Y19pbm9kZSAgICA9IG5mc19hbGxvY19pbm9kZSwNCj4gICAgICAgICAuZnJlZV9pbm9kZSAgICAg PSBuZnNfZnJlZV9pbm9kZSwNCj4gQEAgLTEwNCwyMiArODIsMTAgQEAgY29uc3Qgc3RydWN0IHN1 cGVyX29wZXJhdGlvbnMgbmZzX3NvcHMgPSB7DQo+ICAgICAgICAgLnNob3dfZGV2bmFtZSAgID0g bmZzX3Nob3dfZGV2bmFtZSwNCj4gICAgICAgICAuc2hvd19wYXRoICAgICAgPSBuZnNfc2hvd19w YXRoLA0KPiAgICAgICAgIC5zaG93X3N0YXRzICAgICA9IG5mc19zaG93X3N0YXRzLA0KPiAtICAg ICAgIC5yZW1vdW50X2ZzICAgICA9IG5mc19yZW1vdW50LA0KPiAgfTsNCj4gIEVYUE9SVF9TWU1C T0xfR1BMKG5mc19zb3BzKTsNCj4gDQo+ICAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZTX1Y0KQ0K PiAtc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbmZzNF9mc190eXBlID0gew0KPiAtICAgICAgIC5v d25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLA0KPiAtICAgICAgIC5uYW1lICAgICAgICAgICA9 ICJuZnM0IiwNCj4gLSAgICAgICAubW91bnQgICAgICAgICAgPSBuZnNfZnNfbW91bnQsDQo+IC0g ICAgICAgLmtpbGxfc2IgICAgICAgID0gbmZzX2tpbGxfc3VwZXIsDQo+IC0gICAgICAgLmZzX2Zs YWdzICAgICAgID0gRlNfUkVOQU1FX0RPRVNfRF9NT1ZFfEZTX0JJTkFSWV9NT1VOVERBVEEsDQo+ IC19Ow0KPiAtTU9EVUxFX0FMSUFTX0ZTKCJuZnM0Iik7DQo+IC1NT0RVTEVfQUxJQVMoIm5mczQi KTsNCj4gLUVYUE9SVF9TWU1CT0xfR1BMKG5mczRfZnNfdHlwZSk7DQo+IC0NCj4gIHN0YXRpYyBp bnQgX19pbml0IHJlZ2lzdGVyX25mczRfZnModm9pZCkNCj4gIHsNCj4gICAgICAgICByZXR1cm4g cmVnaXN0ZXJfZmlsZXN5c3RlbSgmbmZzNF9mc190eXBlKTsNCj4gQEAgLTc3OSwxMSArNzQ1LDEy IEBAIHN0YXRpYyBpbnQgbmZzX3ZlcmlmeV9hdXRoZmxhdm9ycyhzdHJ1Y3QNCj4gbmZzX2ZzX2Nv bnRleHQgKmN0eCwNCj4gICAqIFVzZSB0aGUgcmVtb3RlIHNlcnZlcidzIE1PVU5UIHNlcnZpY2Ug dG8gcmVxdWVzdCB0aGUgTkZTIGZpbGUNCj4gaGFuZGxlDQo+ICAgKiBjb3JyZXNwb25kaW5nIHRv IHRoZSBwcm92aWRlZCBwYXRoLg0KPiAgICovDQo+IC1zdGF0aWMgaW50IG5mc19yZXF1ZXN0X21v dW50KHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4LA0KPiArc3RhdGljIGludCBuZnNfcmVxdWVz dF9tb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsDQo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IG5mc19maCAqcm9vdF9maCwNCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBycGNfYXV0aGZsYXZvcl90ICpzZXJ2ZXJfYXV0aGxpc3QsDQo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpzZXJ2ZXJfYXV0aGxpc3RfbGVuKQ0KPiAgew0K PiArICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMp Ow0KPiAgICAgICAgIHN0cnVjdCBuZnNfbW91bnRfcmVxdWVzdCByZXF1ZXN0ID0gew0KPiAgICAg ICAgICAgICAgICAgLnNhcCAgICAgICAgICAgID0gKHN0cnVjdCBzb2NrYWRkciAqKQ0KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LQ0KPiA+bW91 bnRfc2VydmVyLmFkZHJlc3MsDQo+IEBAIC03OTMsNyArNzYwLDcgQEAgc3RhdGljIGludCBuZnNf cmVxdWVzdF9tb3VudChzdHJ1Y3QNCj4gbmZzX2ZzX2NvbnRleHQgKmN0eCwNCj4gICAgICAgICAg ICAgICAgIC5ub3Jlc3Zwb3J0ICAgICA9IGN0eC0+ZmxhZ3MgJiBORlNfTU9VTlRfTk9SRVNWUE9S VCwNCj4gICAgICAgICAgICAgICAgIC5hdXRoX2ZsYXZfbGVuICA9IHNlcnZlcl9hdXRobGlzdF9s ZW4sDQo+ICAgICAgICAgICAgICAgICAuYXV0aF9mbGF2cyAgICAgPSBzZXJ2ZXJfYXV0aGxpc3Qs DQo+IC0gICAgICAgICAgICAgICAubmV0ICAgICAgICAgICAgPSBjdHgtPm5ldCwNCj4gKyAgICAg ICAgICAgICAgIC5uZXQgICAgICAgICAgICA9IGZjLT5uZXRfbnMsDQo+ICAgICAgICAgfTsNCj4g ICAgICAgICBpbnQgc3RhdHVzOw0KPiANCj4gQEAgLTgzOCwyMCArODA1LDE4IEBAIHN0YXRpYyBp bnQgbmZzX3JlcXVlc3RfbW91bnQoc3RydWN0DQo+IG5mc19mc19jb250ZXh0ICpjdHgsDQo+ICAg ICAgICAgcmV0dXJuIDA7DQo+ICB9DQo+IA0KPiAtc3RhdGljIHN0cnVjdCBuZnNfc2VydmVyICpu ZnNfdHJ5X21vdW50X3JlcXVlc3Qoc3RydWN0DQo+IG5mc19tb3VudF9pbmZvICptb3VudF9pbmZv KQ0KPiArc3RhdGljIHN0cnVjdCBuZnNfc2VydmVyICpuZnNfdHJ5X21vdW50X3JlcXVlc3Qoc3Ry dWN0IGZzX2NvbnRleHQNCj4gKmZjKQ0KPiAgew0KPiArICAgICAgIHN0cnVjdCBuZnNfZnNfY29u dGV4dCAqY3R4ID0gbmZzX2ZjMmNvbnRleHQoZmMpOw0KPiAgICAgICAgIGludCBzdGF0dXM7DQo+ ICAgICAgICAgdW5zaWduZWQgaW50IGk7DQo+ICAgICAgICAgYm9vbCB0cmllZF9hdXRoX3VuaXgg PSBmYWxzZTsNCj4gICAgICAgICBib29sIGF1dGhfbnVsbF9pbl9saXN0ID0gZmFsc2U7DQo+ICAg ICAgICAgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IEVSUl9QVFIoLUVBQ0NFUyk7DQo+IC0g ICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHggPSBtb3VudF9pbmZvLT5jdHg7DQo+ICAg ICAgICAgcnBjX2F1dGhmbGF2b3JfdCBhdXRobGlzdFtORlNfTUFYX1NFQ0ZMQVZPUlNdOw0KPiAg ICAgICAgIHVuc2lnbmVkIGludCBhdXRobGlzdF9sZW4gPSBBUlJBWV9TSVpFKGF1dGhsaXN0KTsN Cj4gLSAgICAgICBzdHJ1Y3QgbmZzX3N1YnZlcnNpb24gKm5mc19tb2QgPSBtb3VudF9pbmZvLT5u ZnNfbW9kOw0KPiANCj4gLSAgICAgICBzdGF0dXMgPSBuZnNfcmVxdWVzdF9tb3VudChjdHgsIG1v dW50X2luZm8tPm1udGZoLCBhdXRobGlzdCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZhdXRobGlzdF9sZW4pOw0KPiArICAgICAgIHN0YXR1cyA9IG5mc19yZXF1 ZXN0X21vdW50KGZjLCBjdHgtPm1udGZoLCBhdXRobGlzdCwNCj4gJmF1dGhsaXN0X2xlbik7DQo+ ICAgICAgICAgaWYgKHN0YXR1cykNCj4gICAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKHN0 YXR1cyk7DQo+IA0KPiBAQCAtODY1LDcgKzgzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmZzX3NlcnZl cg0KPiAqbmZzX3RyeV9tb3VudF9yZXF1ZXN0KHN0cnVjdCBuZnNfbW91bnRfaW5mbyAqbW91bnRf aW5mDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnNlbGVjdGVkX2ZsYXZvcik7DQo+ ICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gRVJSX1BUUihzdGF0dXMpOw0KPiAtICAgICAgICAgICAgICAgcmV0dXJuIG5mc19tb2Qt PnJwY19vcHMtPmNyZWF0ZV9zZXJ2ZXIobW91bnRfaW5mbyk7DQo+ICsgICAgICAgICAgICAgICBy ZXR1cm4gY3R4LT5uZnNfbW9kLT5ycGNfb3BzLT5jcmVhdGVfc2VydmVyKGZjKTsNCj4gICAgICAg ICB9DQo+IA0KPiAgICAgICAgIC8qDQo+IEBAIC04OTIsNyArODU3LDcgQEAgc3RhdGljIHN0cnVj dCBuZnNfc2VydmVyDQo+ICpuZnNfdHJ5X21vdW50X3JlcXVlc3Qoc3RydWN0IG5mc19tb3VudF9p bmZvICptb3VudF9pbmYNCj4gICAgICAgICAgICAgICAgIH0NCj4gICAgICAgICAgICAgICAgIGRm cHJpbnRrKE1PVU5ULCAiTkZTOiBhdHRlbXB0aW5nIHRvIHVzZSBhdXRoIGZsYXZvcg0KPiAldVxu IiwgZmxhdm9yKTsNCj4gICAgICAgICAgICAgICAgIGN0eC0+c2VsZWN0ZWRfZmxhdm9yID0gZmxh dm9yOw0KPiAtICAgICAgICAgICAgICAgc2VydmVyID0gbmZzX21vZC0+cnBjX29wcy0+Y3JlYXRl X3NlcnZlcihtb3VudF9pbmZvKTsNCj4gKyAgICAgICAgICAgICAgIHNlcnZlciA9IGN0eC0+bmZz X21vZC0+cnBjX29wcy0+Y3JlYXRlX3NlcnZlcihmYyk7DQo+ICAgICAgICAgICAgICAgICBpZiAo IUlTX0VSUihzZXJ2ZXIpKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VydmVy Ow0KPiAgICAgICAgIH0NCj4gQEAgLTkwOCwyMyArODczLDIyIEBAIHN0YXRpYyBzdHJ1Y3QgbmZz X3NlcnZlcg0KPiAqbmZzX3RyeV9tb3VudF9yZXF1ZXN0KHN0cnVjdCBuZnNfbW91bnRfaW5mbyAq bW91bnRfaW5mDQo+ICAgICAgICAgLyogTGFzdCBjaGFuY2UhIFRyeSBBVVRIX1VOSVggKi8NCj4g ICAgICAgICBkZnByaW50ayhNT1VOVCwgIk5GUzogYXR0ZW1wdGluZyB0byB1c2UgYXV0aCBmbGF2 b3IgJXVcbiIsDQo+IFJQQ19BVVRIX1VOSVgpOw0KPiAgICAgICAgIGN0eC0+c2VsZWN0ZWRfZmxh dm9yID0gUlBDX0FVVEhfVU5JWDsNCj4gLSAgICAgICByZXR1cm4gbmZzX21vZC0+cnBjX29wcy0+ Y3JlYXRlX3NlcnZlcihtb3VudF9pbmZvKTsNCj4gKyAgICAgICByZXR1cm4gY3R4LT5uZnNfbW9k LT5ycGNfb3BzLT5jcmVhdGVfc2VydmVyKGZjKTsNCj4gIH0NCj4gDQo+IC1zdGF0aWMgc3RydWN0 IGRlbnRyeSAqbmZzX2ZzX21vdW50X2NvbW1vbihpbnQsIGNvbnN0IGNoYXIgKiwgc3RydWN0DQo+ IG5mc19tb3VudF9pbmZvICopOw0KPiAtDQo+IC1zdHJ1Y3QgZGVudHJ5ICpuZnNfdHJ5X21vdW50 KGludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsDQo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IG5mc19tb3VudF9pbmZvICptb3VudF9pbmZvKQ0KPiAraW50IG5mc190 cnlfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQ0KPiAgew0KPiAtICAgICAgIHN0cnVj dCBuZnNfc3VidmVyc2lvbiAqbmZzX21vZCA9IG1vdW50X2luZm8tPm5mc19tb2Q7DQo+IC0gICAg ICAgaWYgKG1vdW50X2luZm8tPmN0eC0+bmVlZF9tb3VudCkNCj4gLSAgICAgICAgICAgICAgIG1v dW50X2luZm8tPnNlcnZlciA9DQo+IG5mc190cnlfbW91bnRfcmVxdWVzdChtb3VudF9pbmZvKTsN Cj4gKyAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19mYzJjb250ZXh0KGZj KTsNCj4gKw0KPiArICAgICAgIGlmIChjdHgtPm5lZWRfbW91bnQpDQo+ICsgICAgICAgICAgICAg ICBjdHgtPnNlcnZlciA9IG5mc190cnlfbW91bnRfcmVxdWVzdChmYyk7DQo+ICAgICAgICAgZWxz ZQ0KPiAtICAgICAgICAgICAgICAgbW91bnRfaW5mby0+c2VydmVyID0gbmZzX21vZC0+cnBjX29w cy0NCj4gPmNyZWF0ZV9zZXJ2ZXIobW91bnRfaW5mbyk7DQo+ICsgICAgICAgICAgICAgICBjdHgt PnNlcnZlciA9IGN0eC0+bmZzX21vZC0+cnBjX29wcy0NCj4gPmNyZWF0ZV9zZXJ2ZXIoZmMpOw0K PiANCj4gLSAgICAgICByZXR1cm4gbmZzX2ZzX21vdW50X2NvbW1vbihmbGFncywgZGV2X25hbWUs IG1vdW50X2luZm8pOw0KPiArICAgICAgIHJldHVybiBuZnNfZ2V0X3RyZWVfY29tbW9uKGZjKTsN Cj4gIH0NCj4gLUVYUE9SVF9TWU1CT0xfR1BMKG5mc190cnlfbW91bnQpOw0KPiArRVhQT1JUX1NZ TUJPTF9HUEwobmZzX3RyeV9nZXRfdHJlZSk7DQo+ICsNCj4gDQo+ICAjZGVmaW5lIE5GU19SRU1P VU5UX0NNUF9GTEFHTUFTSyB+KE5GU19NT1VOVF9JTlRSIFwNCj4gICAgICAgICAgICAgICAgIHwg TkZTX01PVU5UX1NFQ1VSRSBcDQo+IEBAIC05NjUsMTUgKzkyOSwxMSBAQCBuZnNfY29tcGFyZV9y ZW1vdW50X2RhdGEoc3RydWN0IG5mc19zZXJ2ZXINCj4gKm5mc3MsDQo+ICAgICAgICAgcmV0dXJu IDA7DQo+ICB9DQo+IA0KPiAtaW50DQo+IC1uZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sg KnNiLCBpbnQgKmZsYWdzLCBjaGFyICpyYXdfZGF0YSkNCj4gK2ludCBuZnNfcmVjb25maWd1cmUo c3RydWN0IGZzX2NvbnRleHQgKmZjKQ0KPiAgew0KPiAtICAgICAgIGludCBlcnJvcjsNCj4gKyAg ICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19mYzJjb250ZXh0KGZjKTsNCj4g KyAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZmMtPnJvb3QtPmRfc2I7DQo+ICAgICAg ICAgc3RydWN0IG5mc19zZXJ2ZXIgKm5mc3MgPSBzYi0+c19mc19pbmZvOw0KPiAtICAgICAgIHN0 cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4Ow0KPiAtICAgICAgIHN0cnVjdCBuZnNfbW91bnRfZGF0 YSAqb3B0aW9ucyA9IChzdHJ1Y3QgbmZzX21vdW50X2RhdGENCj4gKilyYXdfZGF0YTsNCj4gLSAg ICAgICBzdHJ1Y3QgbmZzNF9tb3VudF9kYXRhICpvcHRpb25zNCA9IChzdHJ1Y3QgbmZzNF9tb3Vu dF9kYXRhDQo+ICopcmF3X2RhdGE7DQo+IC0gICAgICAgdTMyIG5mc3ZlcnMgPSBuZnNzLT5uZnNf Y2xpZW50LT5ycGNfb3BzLT52ZXJzaW9uOw0KPiANCj4gICAgICAgICBzeW5jX2ZpbGVzeXN0ZW0o c2IpOw0KPiANCj4gQEAgLTk4Myw2NCArOTQzLDMwIEBAIG5mc19yZW1vdW50KHN0cnVjdCBzdXBl cl9ibG9jayAqc2IsIGludCAqZmxhZ3MsDQo+IGNoYXIgKnJhd19kYXRhKQ0KPiAgICAgICAgICAq IG9uZXMgd2VyZSBleHBsaWNpdGx5IHNwZWNpZmllZC4gRmFsbCBiYWNrIHRvIGxlZ2FjeQ0KPiBi ZWhhdmlvciBhbmQNCj4gICAgICAgICAgKiBqdXN0IHJldHVybiBzdWNjZXNzLg0KPiAgICAgICAg ICAqLw0KPiAtICAgICAgIGlmICgobmZzdmVycyA9PSA0ICYmICghb3B0aW9uczQgfHwgb3B0aW9u czQtPnZlcnNpb24gPT0gMSkpDQo+IHx8DQo+IC0gICAgICAgICAgIChuZnN2ZXJzIDw9IDMgJiYg KCFvcHRpb25zIHx8IChvcHRpb25zLT52ZXJzaW9uID49IDEgJiYNCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMtPnZlcnNpb24gPD0gNikpKSkNCj4g KyAgICAgICBpZiAoY3R4LT5za2lwX3JlY29uZmlnX29wdGlvbl9jaGVjaykNCj4gICAgICAgICAg ICAgICAgIHJldHVybiAwOw0KPiANCj4gLSAgICAgICBjdHggPSBuZnNfYWxsb2NfcGFyc2VkX21v dW50X2RhdGEoKTsNCj4gLSAgICAgICBpZiAoY3R4ID09IE5VTEwpDQo+IC0gICAgICAgICAgICAg ICByZXR1cm4gLUVOT01FTTsNCj4gLQ0KPiAtICAgICAgIC8qIGZpbGwgb3V0IHN0cnVjdCB3aXRo IHZhbHVlcyBmcm9tIGV4aXN0aW5nIG1vdW50ICovDQo+IC0gICAgICAgY3R4LT5mbGFncyA9IG5m c3MtPmZsYWdzOw0KPiAtICAgICAgIGN0eC0+cnNpemUgPSBuZnNzLT5yc2l6ZTsNCj4gLSAgICAg ICBjdHgtPndzaXplID0gbmZzcy0+d3NpemU7DQo+IC0gICAgICAgY3R4LT5yZXRyYW5zID0gbmZz cy0+Y2xpZW50LT5jbF90aW1lb3V0LT50b19yZXRyaWVzOw0KPiAtICAgICAgIGN0eC0+c2VsZWN0 ZWRfZmxhdm9yID0gbmZzcy0+Y2xpZW50LT5jbF9hdXRoLT5hdV9mbGF2b3I7DQo+IC0gICAgICAg Y3R4LT5hY3JlZ21pbiA9IG5mc3MtPmFjcmVnbWluIC8gSFo7DQo+IC0gICAgICAgY3R4LT5hY3Jl Z21heCA9IG5mc3MtPmFjcmVnbWF4IC8gSFo7DQo+IC0gICAgICAgY3R4LT5hY2Rpcm1pbiA9IG5m c3MtPmFjZGlybWluIC8gSFo7DQo+IC0gICAgICAgY3R4LT5hY2Rpcm1heCA9IG5mc3MtPmFjZGly bWF4IC8gSFo7DQo+IC0gICAgICAgY3R4LT50aW1lbyA9IDEwVSAqIG5mc3MtPmNsaWVudC0+Y2xf dGltZW91dC0+dG9faW5pdHZhbCAvIEhaOw0KPiAtICAgICAgIGN0eC0+bmZzX3NlcnZlci5wb3J0 ID0gbmZzcy0+cG9ydDsNCj4gLSAgICAgICBjdHgtPm5mc19zZXJ2ZXIuYWRkcmxlbiA9IG5mc3Mt Pm5mc19jbGllbnQtPmNsX2FkZHJsZW47DQo+IC0gICAgICAgY3R4LT52ZXJzaW9uID0gbmZzdmVy czsNCj4gLSAgICAgICBjdHgtPm1pbm9ydmVyc2lvbiA9IG5mc3MtPm5mc19jbGllbnQtPmNsX21p bm9ydmVyc2lvbjsNCj4gLSAgICAgICBjdHgtPm5ldCA9IGN1cnJlbnQtPm5zcHJveHktPm5ldF9u czsNCj4gLSAgICAgICBtZW1jcHkoJmN0eC0+bmZzX3NlcnZlci5hZGRyZXNzLCAmbmZzcy0+bmZz X2NsaWVudC0+Y2xfYWRkciwNCj4gLSAgICAgICAgICAgICAgIGN0eC0+bmZzX3NlcnZlci5hZGRy bGVuKTsNCj4gLQ0KPiAtICAgICAgIC8qIG92ZXJ3cml0ZSB0aG9zZSB2YWx1ZXMgd2l0aCBhbnkg dGhhdCB3ZXJlIHNwZWNpZmllZCAqLw0KPiAtICAgICAgIGVycm9yID0gLUVJTlZBTDsNCj4gLSAg ICAgICBpZiAoIW5mc19wYXJzZV9tb3VudF9vcHRpb25zKChjaGFyICopb3B0aW9ucywgY3R4KSkN Cj4gLSAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiAtDQo+ICAgICAgICAgLyoNCj4gICAgICAg ICAgKiBub2FjIGlzIGEgc3BlY2lhbCBjYXNlLiBJdCBpbXBsaWVzIC1vIHN5bmMsIGJ1dCB0aGF0 J3Mgbm90DQo+IC0gICAgICAgICogbmVjZXNzYXJpbHkgcmVmbGVjdGVkIGluIHRoZSBtdGFiIG9w dGlvbnMuIGRvX3JlbW91bnRfc2INCj4gKyAgICAgICAgKiBuZWNlc3NhcmlseSByZWZsZWN0ZWQg aW4gdGhlIG10YWIgb3B0aW9ucy4NCj4gcmVjb25maWd1cmVfc3VwZXINCj4gICAgICAgICAgKiB3 aWxsIGNsZWFyIFNCX1NZTkNIUk9OT1VTIGlmIC1vIHN5bmMgd2Fzbid0IHNwZWNpZmllZCBpbg0K PiB0aGUNCj4gICAgICAgICAgKiByZW1vdW50IG9wdGlvbnMsIHNvIHdlIGhhdmUgdG8gZXhwbGlj aXRseSByZXNldCBpdC4NCj4gICAgICAgICAgKi8NCj4gLSAgICAgICBpZiAoY3R4LT5mbGFncyAm IE5GU19NT1VOVF9OT0FDKQ0KPiAtICAgICAgICAgICAgICAgKmZsYWdzIHw9IFNCX1NZTkNIUk9O T1VTOw0KPiArICAgICAgIGlmIChjdHgtPmZsYWdzICYgTkZTX01PVU5UX05PQUMpIHsNCj4gKyAg ICAgICAgICAgICAgIGZjLT5zYl9mbGFncyB8PSBTQl9TWU5DSFJPTk9VUzsNCj4gKyAgICAgICAg ICAgICAgIGZjLT5zYl9mbGFnc19tYXNrIHw9IFNCX1NZTkNIUk9OT1VTOw0KPiArICAgICAgIH0N Cj4gDQo+ICAgICAgICAgLyogY29tcGFyZSBuZXcgbW91bnQgb3B0aW9ucyB3aXRoIG9sZCBvbmVz ICovDQo+IC0gICAgICAgZXJyb3IgPSBuZnNfY29tcGFyZV9yZW1vdW50X2RhdGEobmZzcywgY3R4 KTsNCj4gLSAgICAgICBpZiAoIWVycm9yKQ0KPiAtICAgICAgICAgICAgICAgZXJyb3IgPSBzZWN1 cml0eV9zYl9yZW1vdW50KHNiLCBjdHgtPmxzbV9vcHRzKTsNCj4gLW91dDoNCj4gLSAgICAgICBu ZnNfZnJlZV9wYXJzZWRfbW91bnRfZGF0YShjdHgpOw0KPiAtICAgICAgIHJldHVybiBlcnJvcjsN Cj4gKyAgICAgICByZXR1cm4gbmZzX2NvbXBhcmVfcmVtb3VudF9kYXRhKG5mc3MsIGN0eCk7DQo+ ICB9DQo+IC1FWFBPUlRfU1lNQk9MX0dQTChuZnNfcmVtb3VudCk7DQo+ICtFWFBPUlRfU1lNQk9M X0dQTChuZnNfcmVjb25maWd1cmUpOw0KPiANCj4gIC8qDQo+ICAgKiBGaW5pc2ggc2V0dGluZyB1 cCBhbiBORlMgc3VwZXJibG9jaw0KPiAgICovDQo+IC1zdGF0aWMgdm9pZCBuZnNfZmlsbF9zdXBl cihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QNCj4gbmZzX21vdW50X2luZm8gKm1vdW50 X2luZm8pDQo+ICtzdGF0aWMgdm9pZCBuZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sg KnNiLCBzdHJ1Y3QNCj4gbmZzX2ZzX2NvbnRleHQgKmN0eCkNCj4gIHsNCj4gLSAgICAgICBzdHJ1 Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG1vdW50X2luZm8tPmN0eDsNCj4gICAgICAgICBzdHJ1 Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NCKHNiKTsNCj4gDQo+ICAgICAgICAgc2ItPnNf YmxvY2tzaXplX2JpdHMgPSAwOw0KPiBAQCAtMTA3MiwxMyArOTk4LDE0IEBAIHN0YXRpYyB2b2lk IG5mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jaw0KPiAqc2IsIHN0cnVjdCBuZnNfbW91 bnRfaW5mbyAqbW91bnRfDQo+ICAgICAgICAgbmZzX3N1cGVyX3NldF9tYXhieXRlcyhzYiwgc2Vy dmVyLT5tYXhmaWxlc2l6ZSk7DQo+ICB9DQo+IA0KPiAtc3RhdGljIGludCBuZnNfY29tcGFyZV9t b3VudF9vcHRpb25zKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqcywNCj4gY29uc3Qgc3RydWN0 IG5mc19zZXJ2ZXIgKmIsIGludCBmbGFncykNCj4gK3N0YXRpYyBpbnQgbmZzX2NvbXBhcmVfbW91 bnRfb3B0aW9ucyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsDQo+IGNvbnN0IHN0cnVjdCBu ZnNfc2VydmVyICpiLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgc3RydWN0IGZzX2NvbnRleHQgKmZjKQ0KPiAgew0KPiAgICAgICAgIGNvbnN0IHN0cnVjdCBu ZnNfc2VydmVyICphID0gcy0+c19mc19pbmZvOw0KPiAgICAgICAgIGNvbnN0IHN0cnVjdCBycGNf Y2xudCAqY2xudF9hID0gYS0+Y2xpZW50Ow0KPiAgICAgICAgIGNvbnN0IHN0cnVjdCBycGNfY2xu dCAqY2xudF9iID0gYi0+Y2xpZW50Ow0KPiANCj4gLSAgICAgICBpZiAoKHMtPnNfZmxhZ3MgJiBO RlNfTVNfTUFTSykgIT0gKGZsYWdzICYgTkZTX01TX01BU0spKQ0KPiArICAgICAgIGlmICgocy0+ c19mbGFncyAmIE5GU19TQl9NQVNLKSAhPSAoZmMtPnNiX2ZsYWdzICYNCj4gTkZTX1NCX01BU0sp KQ0KPiAgICAgICAgICAgICAgICAgZ290byBFYnVzeTsNCj4gICAgICAgICBpZiAoYS0+bmZzX2Ns aWVudCAhPSBiLT5uZnNfY2xpZW50KQ0KPiAgICAgICAgICAgICAgICAgZ290byBFYnVzeTsNCj4g QEAgLTExMDMsMTkgKzEwMzAsMTEgQEAgc3RhdGljIGludCBuZnNfY29tcGFyZV9tb3VudF9vcHRp b25zKGNvbnN0DQo+IHN0cnVjdCBzdXBlcl9ibG9jayAqcywgY29uc3Qgc3RydWN0IG4NCj4gICAg ICAgICByZXR1cm4gMDsNCj4gIH0NCj4gDQo+IC1zdHJ1Y3QgbmZzX3NiX21vdW50ZGF0YSB7DQo+ IC0gICAgICAgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcjsNCj4gLSAgICAgICBpbnQgbW50Zmxh Z3M7DQo+IC19Ow0KPiAtDQo+IC1zdGF0aWMgaW50IG5mc19zZXRfc3VwZXIoc3RydWN0IHN1cGVy X2Jsb2NrICpzLCB2b2lkICpkYXRhKQ0KPiArc3RhdGljIGludCBuZnNfc2V0X3N1cGVyKHN0cnVj dCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQNCj4gKmZjKQ0KPiAgew0KPiAtICAg ICAgIHN0cnVjdCBuZnNfc2JfbW91bnRkYXRhICpzYl9tbnRkYXRhID0gZGF0YTsNCj4gLSAgICAg ICBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gc2JfbW50ZGF0YS0+c2VydmVyOw0KPiArICAg ICAgIHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBmYy0+c19mc19pbmZvOw0KPiAgICAgICAg IGludCByZXQ7DQo+IA0KPiAtICAgICAgIHMtPnNfZmxhZ3MgPSBzYl9tbnRkYXRhLT5tbnRmbGFn czsNCj4gLSAgICAgICBzLT5zX2ZzX2luZm8gPSBzZXJ2ZXI7DQo+ICAgICAgICAgcy0+c19kX29w ID0gc2VydmVyLT5uZnNfY2xpZW50LT5ycGNfb3BzLT5kZW50cnlfb3BzOw0KPiAgICAgICAgIHJl dCA9IHNldF9hbm9uX3N1cGVyKHMsIHNlcnZlcik7DQo+ICAgICAgICAgaWYgKHJldCA9PSAwKQ0K PiBAQCAtMTE4MCwxMSArMTA5OSw5IEBAIHN0YXRpYyBpbnQgbmZzX2NvbXBhcmVfdXNlcm5zKGNv bnN0IHN0cnVjdA0KPiBuZnNfc2VydmVyICpvbGQsDQo+ICAgICAgICAgcmV0dXJuIDE7DQo+ICB9 DQo+IA0KPiAtc3RhdGljIGludCBuZnNfY29tcGFyZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sg KnNiLCB2b2lkICpkYXRhKQ0KPiArc3RhdGljIGludCBuZnNfY29tcGFyZV9zdXBlcihzdHJ1Y3Qg c3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QNCj4gZnNfY29udGV4dCAqZmMpDQo+ICB7DQo+IC0gICAg ICAgc3RydWN0IG5mc19zYl9tb3VudGRhdGEgKnNiX21udGRhdGEgPSBkYXRhOw0KPiAtICAgICAg IHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBzYl9tbnRkYXRhLT5zZXJ2ZXIsICpvbGQgPQ0K PiBORlNfU0Ioc2IpOw0KPiAtICAgICAgIGludCBtbnRmbGFncyA9IHNiX21udGRhdGEtPm1udGZs YWdzOw0KPiArICAgICAgIHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBmYy0+c19mc19pbmZv LCAqb2xkID0gTkZTX1NCKHNiKTsNCj4gDQo+ICAgICAgICAgaWYgKCFuZnNfY29tcGFyZV9zdXBl cl9hZGRyZXNzKG9sZCwgc2VydmVyKSkNCj4gICAgICAgICAgICAgICAgIHJldHVybiAwOw0KPiBA QCAtMTE5NSwxMyArMTExMiwxMiBAQCBzdGF0aWMgaW50IG5mc19jb21wYXJlX3N1cGVyKHN0cnVj dA0KPiBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpDQo+ICAgICAgICAgICAgICAgICByZXR1 cm4gMDsNCj4gICAgICAgICBpZiAoIW5mc19jb21wYXJlX3VzZXJucyhvbGQsIHNlcnZlcikpDQo+ ICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gLSAgICAgICByZXR1cm4gbmZzX2NvbXBhcmVf bW91bnRfb3B0aW9ucyhzYiwgc2VydmVyLCBtbnRmbGFncyk7DQo+ICsgICAgICAgcmV0dXJuIG5m c19jb21wYXJlX21vdW50X29wdGlvbnMoc2IsIHNlcnZlciwgZmMpOw0KPiAgfQ0KPiANCj4gICNp ZmRlZiBDT05GSUdfTkZTX0ZTQ0FDSEUNCj4gIHN0YXRpYyB2b2lkIG5mc19nZXRfY2FjaGVfY29v a2llKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4LA0KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2Nsb25lX21vdW50ICpjbG9uZWQpDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfZnNfY29udGV4dCAqY3R4KQ0KPiAg ew0KPiAgICAgICAgIHN0cnVjdCBuZnNfc2VydmVyICpuZnNzID0gTkZTX1NCKHNiKTsNCj4gICAg ICAgICBjaGFyICp1bmlxID0gTlVMTDsNCj4gQEAgLTEyMTAsNjggKzExMjYsNzAgQEAgc3RhdGlj IHZvaWQgbmZzX2dldF9jYWNoZV9jb29raWUoc3RydWN0DQo+IHN1cGVyX2Jsb2NrICpzYiwNCj4g ICAgICAgICBuZnNzLT5mc2NhY2hlX2tleSA9IE5VTEw7DQo+ICAgICAgICAgbmZzcy0+ZnNjYWNo ZSA9IE5VTEw7DQo+IA0KPiAtICAgICAgIGlmIChjdHgpIHsNCj4gKyAgICAgICBpZiAoIWN0eCkN Cj4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gKw0KPiArICAgICAgIGlmIChjdHgtPmNsb25l X2RhdGEuc2IpIHsNCj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfc2VydmVyICptbnRfcyA9 IE5GU19TQihjdHgtDQo+ID5jbG9uZV9kYXRhLnNiKTsNCj4gKyAgICAgICAgICAgICAgIGlmICgh KG1udF9zLT5vcHRpb25zICYgTkZTX09QVElPTl9GU0NBQ0hFKSkNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuOw0KPiArICAgICAgICAgICAgICAgaWYgKG1udF9zLT5mc2NhY2hlX2tl eSkgew0KPiArICAgICAgICAgICAgICAgICAgICAgICB1bmlxID0gbW50X3MtPmZzY2FjaGVfa2V5 LT5rZXkudW5pcXVpZmllcjsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgdWxlbiA9IG1udF9z LT5mc2NhY2hlX2tleS0+a2V5LnVuaXFfbGVuOw0KPiArICAgICAgICAgICAgICAgfQ0KPiArICAg ICAgIH0gZWxzZSB7DQo+ICAgICAgICAgICAgICAgICBpZiAoIShjdHgtPm9wdGlvbnMgJiBORlNf T1BUSU9OX0ZTQ0FDSEUpKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQo+ICAg ICAgICAgICAgICAgICBpZiAoY3R4LT5mc2NhY2hlX3VuaXEpIHsNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgdW5pcSA9IGN0eC0+ZnNjYWNoZV91bmlxOw0KPiAgICAgICAgICAgICAgICAgICAg ICAgICB1bGVuID0gc3RybGVuKGN0eC0+ZnNjYWNoZV91bmlxKTsNCj4gICAgICAgICAgICAgICAg IH0NCj4gLSAgICAgICB9IGVsc2UgaWYgKGNsb25lZCkgew0KPiAtICAgICAgICAgICAgICAgc3Ry dWN0IG5mc19zZXJ2ZXIgKm1udF9zID0gTkZTX1NCKGNsb25lZC0+c2IpOw0KPiAtICAgICAgICAg ICAgICAgaWYgKCEobW50X3MtPm9wdGlvbnMgJiBORlNfT1BUSU9OX0ZTQ0FDSEUpKQ0KPiAtICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm47DQo+IC0gICAgICAgICAgICAgICBpZiAobW50X3Mt PmZzY2FjaGVfa2V5KSB7DQo+IC0gICAgICAgICAgICAgICAgICAgICAgIHVuaXEgPSBtbnRfcy0+ ZnNjYWNoZV9rZXktPmtleS51bmlxdWlmaWVyOw0KPiAtICAgICAgICAgICAgICAgICAgICAgICB1 bGVuID0gbW50X3MtPmZzY2FjaGVfa2V5LT5rZXkudW5pcV9sZW47DQo+IC0gICAgICAgICAgICAg ICB9Ow0KPiAtICAgICAgIH0gZWxzZQ0KPiAgICAgICAgICAgICAgICAgcmV0dXJuOw0KPiArICAg ICAgIH0NCj4gDQo+ICAgICAgICAgbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZShzYiwgdW5p cSwgdWxlbik7DQo+ICB9DQo+ICAjZWxzZQ0KPiAgc3RhdGljIHZvaWQgbmZzX2dldF9jYWNoZV9j b29raWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpwYXJzZWQsDQo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfY2xvbmVfbW91bnQgKmNsb25lZCkNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5mc19mc19jb250ZXh0ICpjdHgp DQo+ICB7DQo+ICB9DQo+ICAjZW5kaWYNCj4gDQo+IC1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbmZz X2ZzX21vdW50X2NvbW1vbihpbnQgZmxhZ3MsIGNvbnN0IGNoYXINCj4gKmRldl9uYW1lLA0KPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfbW91bnRfaW5mbyAq bW91bnRfaW5mbykNCj4gK2ludCBuZnNfZ2V0X3RyZWVfY29tbW9uKHN0cnVjdCBmc19jb250ZXh0 ICpmYykNCj4gIHsNCj4gKyAgICAgICBzdHJ1Y3QgbmZzX2ZzX2NvbnRleHQgKmN0eCA9IG5mc19m YzJjb250ZXh0KGZjKTsNCj4gICAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnM7DQo+IC0gICAg ICAgc3RydWN0IGRlbnRyeSAqbW50cm9vdCA9IEVSUl9QVFIoLUVOT01FTSk7DQo+IC0gICAgICAg aW50ICgqY29tcGFyZV9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKikgPQ0KPiBu ZnNfY29tcGFyZV9zdXBlcjsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0g bW91bnRfaW5mby0+c2VydmVyOw0KPiArICAgICAgIGludCAoKmNvbXBhcmVfc3VwZXIpKHN0cnVj dCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dA0KPiAqKSA9IG5mc19jb21wYXJlX3N1 cGVyOw0KPiArICAgICAgIHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBjdHgtPnNlcnZlcjsN Cj4gICAgICAgICB1bnNpZ25lZCBsb25nIGtmbGFncyA9IDAsIGtmbGFnc19vdXQgPSAwOw0KPiAt ICAgICAgIHN0cnVjdCBuZnNfc2JfbW91bnRkYXRhIHNiX21udGRhdGEgPSB7DQo+IC0gICAgICAg ICAgICAgICAubW50ZmxhZ3MgPSBmbGFncywNCj4gLSAgICAgICAgICAgICAgIC5zZXJ2ZXIgPSBz ZXJ2ZXIsDQo+IC0gICAgICAgfTsNCj4gICAgICAgICBpbnQgZXJyb3I7DQo+IA0KPiAtICAgICAg IG1vdW50X2luZm8tPnNlcnZlciA9IE5VTEw7DQo+ICsgICAgICAgY3R4LT5zZXJ2ZXIgPSBOVUxM Ow0KPiAgICAgICAgIGlmIChJU19FUlIoc2VydmVyKSkNCj4gLSAgICAgICAgICAgICAgIHJldHVy biBFUlJfQ0FTVChzZXJ2ZXIpOw0KPiArICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIoc2Vy dmVyKTsNCj4gDQo+ICAgICAgICAgaWYgKHNlcnZlci0+ZmxhZ3MgJiBORlNfTU9VTlRfVU5TSEFS RUQpDQo+ICAgICAgICAgICAgICAgICBjb21wYXJlX3N1cGVyID0gTlVMTDsNCj4gDQo+ICAgICAg ICAgLyogLW8gbm9hYyBpbXBsaWVzIC1vIHN5bmMgKi8NCj4gICAgICAgICBpZiAoc2VydmVyLT5m bGFncyAmIE5GU19NT1VOVF9OT0FDKQ0KPiAtICAgICAgICAgICAgICAgc2JfbW50ZGF0YS5tbnRm bGFncyB8PSBTQl9TWU5DSFJPTk9VUzsNCj4gKyAgICAgICAgICAgICAgIGZjLT5zYl9mbGFncyB8 PSBTQl9TWU5DSFJPTk9VUzsNCj4gDQo+IC0gICAgICAgaWYgKG1vdW50X2luZm8tPmNsb25lZCAh PSBOVUxMICYmIG1vdW50X2luZm8tPmNsb25lZC0+c2IgIT0NCj4gTlVMTCkNCj4gLSAgICAgICAg ICAgICAgIGlmIChtb3VudF9pbmZvLT5jbG9uZWQtPnNiLT5zX2ZsYWdzICYgU0JfU1lOQ0hST05P VVMpDQo+IC0gICAgICAgICAgICAgICAgICAgICAgIHNiX21udGRhdGEubW50ZmxhZ3MgfD0gU0Jf U1lOQ0hST05PVVM7DQo+ICsgICAgICAgaWYgKGN0eC0+Y2xvbmVfZGF0YS5zYikNCj4gKyAgICAg ICAgICAgICAgIGlmIChjdHgtPmNsb25lX2RhdGEuc2ItPnNfZmxhZ3MgJiBTQl9TWU5DSFJPTk9V UykNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZmMtPnNiX2ZsYWdzIHw9IFNCX1NZTkNIUk9O T1VTOw0KPiArDQo+ICsgICAgICAgaWYgKHNlcnZlci0+Y2FwcyAmIE5GU19DQVBfU0VDVVJJVFlf TEFCRUwpDQo+ICsgICAgICAgICAgICAgICBmYy0+bHNtX2ZsYWdzIHw9IFNFQ1VSSVRZX0xTTV9O QVRJVkVfTEFCRUxTOw0KPiANCj4gICAgICAgICAvKiBHZXQgYSBzdXBlcmJsb2NrIC0gbm90ZSB0 aGF0IHdlIG1heSBlbmQgdXAgc2hhcmluZyBvbmUNCj4gdGhhdCBhbHJlYWR5IGV4aXN0cyAqLw0K PiAtICAgICAgIHMgPSBzZ2V0KG1vdW50X2luZm8tPm5mc19tb2QtPm5mc19mcywgY29tcGFyZV9z dXBlciwNCj4gbmZzX3NldF9zdXBlciwNCj4gLSAgICAgICAgICAgICAgICBmbGFncywgJnNiX21u dGRhdGEpOw0KPiArICAgICAgIGZjLT5zX2ZzX2luZm8gPSBzZXJ2ZXI7DQo+ICsgICAgICAgcyA9 IHNnZXRfZmMoZmMsIGNvbXBhcmVfc3VwZXIsIG5mc19zZXRfc3VwZXIpOw0KPiArICAgICAgIGZj LT5zX2ZzX2luZm8gPSBOVUxMOw0KPiAgICAgICAgIGlmIChJU19FUlIocykpIHsNCj4gLSAgICAg ICAgICAgICAgIG1udHJvb3QgPSBFUlJfQ0FTVChzKTsNCj4gKyAgICAgICAgICAgICAgIGVycm9y ID0gUFRSX0VSUihzKTsNCj4gKyAgICAgICAgICAgICAgIGRmcHJpbnRrKE1PVU5ULCAiTkZTOiBD b3VsZG4ndCBnZXQgc3VwZXJibG9ja1xuIik7DQo+ICAgICAgICAgICAgICAgICBnb3RvIG91dF9l cnJfbm9zYjsNCj4gICAgICAgICB9DQo+IA0KPiBAQCAtMTI4MSw0NCArMTE5OSw0MSBAQCBzdGF0 aWMgc3RydWN0IGRlbnRyeSAqbmZzX2ZzX21vdW50X2NvbW1vbihpbnQNCj4gZmxhZ3MsIGNvbnN0 IGNoYXIgKmRldl9uYW1lLA0KPiAgICAgICAgIH0gZWxzZSB7DQo+ICAgICAgICAgICAgICAgICBl cnJvciA9IHN1cGVyX3NldHVwX2JkaV9uYW1lKHMsICIldToldSIsDQo+IE1BSk9SKHNlcnZlci0+ c19kZXYpLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN SU5PUihzZXJ2ZXItPnNfZGV2KSk7DQo+IC0gICAgICAgICAgICAgICBpZiAoZXJyb3IpIHsNCj4g LSAgICAgICAgICAgICAgICAgICAgICAgbW50cm9vdCA9IEVSUl9QVFIoZXJyb3IpOw0KPiArICAg ICAgICAgICAgICAgaWYgKGVycm9yKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVy cm9yX3NwbGF0X3N1cGVyOw0KPiAtICAgICAgICAgICAgICAgfQ0KPiAgICAgICAgICAgICAgICAg cy0+c19iZGktPnJhX3BhZ2VzID0gc2VydmVyLT5ycGFnZXMgKg0KPiBORlNfTUFYX1JFQURBSEVB RDsNCj4gICAgICAgICAgICAgICAgIHNlcnZlci0+c3VwZXIgPSBzOw0KPiAgICAgICAgIH0NCj4g DQo+ICAgICAgICAgaWYgKCFzLT5zX3Jvb3QpIHsNCj4gLSAgICAgICAgICAgICAgIHVuc2lnbmVk IGJzaXplID0gbW91bnRfaW5mby0+aW5oZXJpdGVkX2JzaXplOw0KPiArICAgICAgICAgICAgICAg dW5zaWduZWQgYnNpemUgPSBjdHgtPmNsb25lX2RhdGEuaW5oZXJpdGVkX2JzaXplOw0KPiAgICAg ICAgICAgICAgICAgLyogaW5pdGlhbCBzdXBlcmJsb2NrL3Jvb3QgY3JlYXRpb24gKi8NCj4gLSAg ICAgICAgICAgICAgIG5mc19maWxsX3N1cGVyKHMsIG1vdW50X2luZm8pOw0KPiArICAgICAgICAg ICAgICAgbmZzX2ZpbGxfc3VwZXIocywgY3R4KTsNCj4gICAgICAgICAgICAgICAgIGlmIChic2l6 ZSkgew0KPiAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gYnNp emU7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnNfYmxvY2tzaXplID0gMVUgPDwgYnNp emU7DQo+ICAgICAgICAgICAgICAgICB9DQo+IC0gICAgICAgICAgICAgICBuZnNfZ2V0X2NhY2hl X2Nvb2tpZShzLCBtb3VudF9pbmZvLT5jdHgsIG1vdW50X2luZm8tDQo+ID5jbG9uZWQpOw0KPiAt ICAgICAgICAgICAgICAgaWYgKCEoc2VydmVyLT5mbGFncyAmIE5GU19NT1VOVF9VTlNIQVJFRCkp DQo+IC0gICAgICAgICAgICAgICAgICAgICAgIHMtPnNfaWZsYWdzIHw9IFNCX0lfTVVMVElST09U Ow0KPiArICAgICAgICAgICAgICAgbmZzX2dldF9jYWNoZV9jb29raWUocywgY3R4KTsNCj4gICAg ICAgICB9DQo+IA0KPiAtICAgICAgIG1udHJvb3QgPSBuZnNfZ2V0X3Jvb3QocywgbW91bnRfaW5m by0+bW50ZmgsIGRldl9uYW1lKTsNCj4gLSAgICAgICBpZiAoSVNfRVJSKG1udHJvb3QpKQ0KPiAr ICAgICAgIGVycm9yID0gbmZzX2dldF9yb290KHMsIGZjKTsNCj4gKyAgICAgICBpZiAoZXJyb3Ig PCAwKSB7DQo+ICsgICAgICAgICAgICAgICBkZnByaW50ayhNT1VOVCwgIk5GUzogQ291bGRuJ3Qg Z2V0IHJvb3QgZGVudHJ5XG4iKTsNCj4gICAgICAgICAgICAgICAgIGdvdG8gZXJyb3Jfc3BsYXRf c3VwZXI7DQo+IC0NCj4gKyAgICAgICB9DQo+IA0KPiAgICAgICAgIGlmIChORlNfU0IocyktPmNh cHMgJiBORlNfQ0FQX1NFQ1VSSVRZX0xBQkVMKQ0KPiAgICAgICAgICAgICAgICAga2ZsYWdzIHw9 IFNFQ1VSSVRZX0xTTV9OQVRJVkVfTEFCRUxTOw0KPiAtICAgICAgIGlmIChtb3VudF9pbmZvLT5j bG9uZWQpIHsNCj4gLSAgICAgICAgICAgICAgIGlmIChkX2lub2RlKG1udHJvb3QpLT5pX2ZvcCAh PSAmbmZzX2Rpcl9vcGVyYXRpb25zKSB7DQo+ICsgICAgICAgaWYgKGN0eC0+Y2xvbmVfZGF0YS5z Yikgew0KPiArICAgICAgICAgICAgICAgaWYgKGRfaW5vZGUoZmMtPnJvb3QpLT5pX2ZvcCAhPSAm bmZzX2Rpcl9vcGVyYXRpb25zKQ0KPiB7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y ID0gLUVTVEFMRTsNCj4gICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9zcGxhdF9y b290Ow0KPiAgICAgICAgICAgICAgICAgfQ0KPiAgICAgICAgICAgICAgICAgLyogY2xvbmUgYW55 IGxzbSBzZWN1cml0eSBvcHRpb25zIGZyb20gdGhlIHBhcmVudCB0bw0KPiB0aGUgbmV3IHNiICov DQo+IC0gICAgICAgICAgICAgICBlcnJvciA9IHNlY3VyaXR5X3NiX2Nsb25lX21udF9vcHRzKG1v dW50X2luZm8tDQo+ID5jbG9uZWQtPnNiLCBzLCBrZmxhZ3MsDQo+ICsgICAgICAgICAgICAgICBl cnJvciA9IHNlY3VyaXR5X3NiX2Nsb25lX21udF9vcHRzKGN0eC0NCj4gPmNsb25lX2RhdGEuc2Is IHMsIGtmbGFncywNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2ZsYWdzX291 dCk7DQo+ICAgICAgICAgfSBlbHNlIHsNCj4gLSAgICAgICAgICAgICAgIGVycm9yID0gc2VjdXJp dHlfc2Jfc2V0X21udF9vcHRzKHMsIG1vdW50X2luZm8tPmN0eC0NCj4gPmxzbV9vcHRzLA0KPiAr ICAgICAgICAgICAgICAgZXJyb3IgPSBzZWN1cml0eV9zYl9zZXRfbW50X29wdHMocywgZmMtPnNl Y3VyaXR5LA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGtmbGFncywNCj4gJmtmbGFnc19vdXQpOw0KPiAgICAgICAgIH0NCj4gICAgICAg ICBpZiAoZXJyb3IpDQo+IEBAIC0xMzI2LDY3ICsxMjQxLDI1IEBAIHN0YXRpYyBzdHJ1Y3QgZGVu dHJ5ICpuZnNfZnNfbW91bnRfY29tbW9uKGludA0KPiBmbGFncywgY29uc3QgY2hhciAqZGV2X25h bWUsDQo+ICAgICAgICAgaWYgKE5GU19TQihzKS0+Y2FwcyAmIE5GU19DQVBfU0VDVVJJVFlfTEFC RUwgJiYNCj4gICAgICAgICAgICAgICAgICEoa2ZsYWdzX291dCAmIFNFQ1VSSVRZX0xTTV9OQVRJ VkVfTEFCRUxTKSkNCj4gICAgICAgICAgICAgICAgIE5GU19TQihzKS0+Y2FwcyAmPSB+TkZTX0NB UF9TRUNVUklUWV9MQUJFTDsNCj4gLSAgICAgICBpZiAoZXJyb3IpDQo+IC0gICAgICAgICAgICAg ICBnb3RvIGVycm9yX3NwbGF0X3Jvb3Q7DQo+IA0KPiAgICAgICAgIHMtPnNfZmxhZ3MgfD0gU0Jf QUNUSVZFOw0KPiArICAgICAgIGVycm9yID0gMDsNCj4gDQo+ICBvdXQ6DQo+IC0gICAgICAgcmV0 dXJuIG1udHJvb3Q7DQo+ICsgICAgICAgcmV0dXJuIGVycm9yOw0KPiANCj4gIG91dF9lcnJfbm9z YjoNCj4gICAgICAgICBuZnNfZnJlZV9zZXJ2ZXIoc2VydmVyKTsNCj4gICAgICAgICBnb3RvIG91 dDsNCj4gDQo+ICBlcnJvcl9zcGxhdF9yb290Og0KPiAtICAgICAgIGRwdXQobW50cm9vdCk7DQo+ IC0gICAgICAgbW50cm9vdCA9IEVSUl9QVFIoZXJyb3IpOw0KPiArICAgICAgIGRwdXQoZmMtPnJv b3QpOw0KPiArICAgICAgIGZjLT5yb290ID0gTlVMTDsNCj4gIGVycm9yX3NwbGF0X3N1cGVyOg0K PiAgICAgICAgIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHMpOw0KPiAgICAgICAgIGdvdG8gb3V0 Ow0KPiAgfQ0KPiANCj4gLXN0cnVjdCBkZW50cnkgKm5mc19mc19tb3VudChzdHJ1Y3QgZmlsZV9z eXN0ZW1fdHlwZSAqZnNfdHlwZSwNCj4gLSAgICAgICBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRl dl9uYW1lLCB2b2lkICpyYXdfZGF0YSkNCj4gLXsNCj4gLSAgICAgICBzdHJ1Y3QgbmZzX21vdW50 X2luZm8gbW91bnRfaW5mbyA9IHsNCj4gLSAgICAgICB9Ow0KPiAtICAgICAgIHN0cnVjdCBkZW50 cnkgKm1udHJvb3QgPSBFUlJfUFRSKC1FTk9NRU0pOw0KPiAtICAgICAgIHN0cnVjdCBuZnNfc3Vi dmVyc2lvbiAqbmZzX21vZDsNCj4gLSAgICAgICBpbnQgZXJyb3I7DQo+IC0NCj4gLSAgICAgICBt b3VudF9pbmZvLmN0eCA9IG5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0YSgpOw0KPiAtICAgICAg IG1vdW50X2luZm8ubW50ZmggPSBuZnNfYWxsb2NfZmhhbmRsZSgpOw0KPiAtICAgICAgIGlmICht b3VudF9pbmZvLmN0eCA9PSBOVUxMIHx8IG1vdW50X2luZm8ubW50ZmggPT0gTlVMTCkNCj4gLSAg ICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiAtDQo+IC0gICAgICAgLyogVmFsaWRhdGUgdGhlIG1v dW50IGRhdGEgKi8NCj4gLSAgICAgICBlcnJvciA9IG5mc192YWxpZGF0ZV9tb3VudF9kYXRhKGZz X3R5cGUsIHJhd19kYXRhLA0KPiBtb3VudF9pbmZvLmN0eCwgbW91bnRfaW5mby5tbnRmaCwgZGV2 X25hbWUpOw0KPiAtICAgICAgIGlmIChlcnJvciA9PSBORlNfVEVYVF9EQVRBKQ0KPiAtICAgICAg ICAgICAgICAgZXJyb3IgPSBuZnNfdmFsaWRhdGVfdGV4dF9tb3VudF9kYXRhKHJhd19kYXRhLA0K PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1v dW50X2luZm8uY3R4LA0KPiBkZXZfbmFtZSk7DQo+IC0gICAgICAgaWYgKGVycm9yIDwgMCkgew0K PiAtICAgICAgICAgICAgICAgbW50cm9vdCA9IEVSUl9QVFIoZXJyb3IpOw0KPiAtICAgICAgICAg ICAgICAgZ290byBvdXQ7DQo+IC0gICAgICAgfQ0KPiAtDQo+IC0gICAgICAgbmZzX21vZCA9IGdl dF9uZnNfdmVyc2lvbihtb3VudF9pbmZvLmN0eC0+dmVyc2lvbik7DQo+IC0gICAgICAgaWYgKElT X0VSUihuZnNfbW9kKSkgew0KPiAtICAgICAgICAgICAgICAgbW50cm9vdCA9IEVSUl9DQVNUKG5m c19tb2QpOw0KPiAtICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+IC0gICAgICAgfQ0KPiAtICAg ICAgIG1vdW50X2luZm8ubmZzX21vZCA9IG5mc19tb2Q7DQo+IC0NCj4gLSAgICAgICBtbnRyb290 ID0gbmZzX21vZC0+cnBjX29wcy0+dHJ5X21vdW50KGZsYWdzLCBkZXZfbmFtZSwNCj4gJm1vdW50 X2luZm8pOw0KPiAtDQo+IC0gICAgICAgcHV0X25mc192ZXJzaW9uKG5mc19tb2QpOw0KPiAtb3V0 Og0KPiAtICAgICAgIG5mc19mcmVlX3BhcnNlZF9tb3VudF9kYXRhKG1vdW50X2luZm8uY3R4KTsN Cj4gLSAgICAgICBuZnNfZnJlZV9maGFuZGxlKG1vdW50X2luZm8ubW50ZmgpOw0KPiAtICAgICAg IHJldHVybiBtbnRyb290Ow0KPiAtfQ0KPiAtRVhQT1JUX1NZTUJPTF9HUEwobmZzX2ZzX21vdW50 KTsNCj4gLQ0KPiAgLyoNCj4gICAqIERlc3Ryb3kgYW4gTkZTMi8zIHN1cGVyYmxvY2sNCj4gICAq Lw0KPiBAQCAtMTQwNCwxNyArMTI3Nyw2IEBAIHZvaWQgbmZzX2tpbGxfc3VwZXIoc3RydWN0IHN1 cGVyX2Jsb2NrICpzKQ0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJPTF9HUEwobmZzX2tpbGxfc3VwZXIp Ow0KPiANCj4gLS8qDQo+IC0gKiBJbnRlcm5hbCB1c2Ugb25seTogbW91bnRfaW5mbyBpcyBhbHJl YWR5IHNldCB1cCBieSBjYWxsZXIuDQo+IC0gKiBVc2VkIGZvciBtb3VudHBvaW50IGNyb3NzaW5n cyBhbmQgZm9yIG5mczQgcm9vdC4NCj4gLSAqLw0KPiAtc3RhdGljIHN0cnVjdCBkZW50cnkgKg0K PiAtbmZzX3ByZXBhcmVkX21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBp bnQgZmxhZ3MsDQo+IC0gICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9p ZCAqcmF3X2RhdGEpDQo+IC17DQo+IC0gICAgICAgcmV0dXJuIG5mc19mc19tb3VudF9jb21tb24o ZmxhZ3MsIGRldl9uYW1lLCByYXdfZGF0YSk7DQo+IC19DQo+IC0NCj4gICNpZiBJU19FTkFCTEVE KENPTkZJR19ORlNfVjQpDQo+IA0KPiAgLyoNCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgv bmZzX3hkci5oIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgNCj4gaW5kZXggODJiZGI5MWRhMmFl Li5lZDlmMjE1ZDAzZWEgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oDQo+ ICsrKyBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oDQo+IEBAIC0xNjIyLDYgKzE2MjIsNyBAQCBz dHJ1Y3QgbmZzX3N1YnZlcnNpb247DQo+ICBzdHJ1Y3QgbmZzX21vdW50X2luZm87DQo+ICBzdHJ1 Y3QgbmZzX2NsaWVudF9pbml0ZGF0YTsNCj4gIHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3I7 DQo+ICtzdHJ1Y3QgZnNfY29udGV4dDsNCj4gDQo+ICAvKg0KPiAgICogUlBDIHByb2NlZHVyZSB2 ZWN0b3IgZm9yIE5GU3YyL05GU3YzIGRlbXV4aW5nDQo+IEBAIC0xNjM2LDkgKzE2MzcsOCBAQCBz dHJ1Y3QgbmZzX3JwY19vcHMgew0KPiANCj4gICAgICAgICBpbnQgICAgICgqZ2V0cm9vdCkgKHN0 cnVjdCBuZnNfc2VydmVyICosIHN0cnVjdCBuZnNfZmggKiwNCj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBuZnNfZnNpbmZvICopOw0KPiAtICAgICAgIHN0cnVjdCB2ZnNtb3Vu dCAqKCpzdWJtb3VudCkgKHN0cnVjdCBuZnNfc2VydmVyICosIHN0cnVjdA0KPiBkZW50cnkgKiwN Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2ZoICos IHN0cnVjdA0KPiBuZnNfZmF0dHIgKik7DQo+IC0gICAgICAgc3RydWN0IGRlbnRyeSAqKCp0cnlf bW91bnQpIChpbnQsIGNvbnN0IGNoYXIgKiwgc3RydWN0DQo+IG5mc19tb3VudF9pbmZvICopOw0K PiArICAgICAgIGludCAgICAgKCpzdWJtb3VudCkgKHN0cnVjdCBmc19jb250ZXh0ICosIHN0cnVj dCBuZnNfc2VydmVyDQo+ICopOw0KPiArICAgICAgIGludCAgICAgKCp0cnlfZ2V0X3RyZWUpIChz dHJ1Y3QgZnNfY29udGV4dCAqKTsNCj4gICAgICAgICBpbnQgICAgICgqZ2V0YXR0cikgKHN0cnVj dCBuZnNfc2VydmVyICosIHN0cnVjdCBuZnNfZmggKiwNCj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBuZnNfZmF0dHIgKiwgc3RydWN0IG5mczRfbGFiZWwgKiwNCj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbm9kZSAqKTsNCj4gQEAgLTE3MDUsNyArMTcw NSw3IEBAIHN0cnVjdCBuZnNfcnBjX29wcyB7DQo+ICAgICAgICAgc3RydWN0IG5mc19jbGllbnQg KigqaW5pdF9jbGllbnQpIChzdHJ1Y3QgbmZzX2NsaWVudCAqLA0KPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZnNfY2xpZW50X2luaXRkYXRhICopOw0KPiAg ICAgICAgIHZvaWQgICAgKCpmcmVlX2NsaWVudCkgKHN0cnVjdCBuZnNfY2xpZW50ICopOw0KPiAt ICAgICAgIHN0cnVjdCBuZnNfc2VydmVyICooKmNyZWF0ZV9zZXJ2ZXIpKHN0cnVjdCBuZnNfbW91 bnRfaW5mbyAqKTsNCj4gKyAgICAgICBzdHJ1Y3QgbmZzX3NlcnZlciAqKCpjcmVhdGVfc2VydmVy KShzdHJ1Y3QgZnNfY29udGV4dCAqKTsNCj4gICAgICAgICBzdHJ1Y3QgbmZzX3NlcnZlciAqKCpj bG9uZV9zZXJ2ZXIpKHN0cnVjdCBuZnNfc2VydmVyICosDQo+IHN0cnVjdCBuZnNfZmggKiwNCj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfZmF0 dHIgKiwNCj4gcnBjX2F1dGhmbGF2b3JfdCk7DQo+ICB9Ow0KPiAtLQ0KPiAyLjE3LjINCj4gDQo=