Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp3169186yba; Mon, 22 Apr 2019 21:54:44 -0700 (PDT) X-Google-Smtp-Source: APXvYqz12P0HGqYmXDzjBqIrMHt1eaCQNjuvq4xqNULVHCJnqX1JUXP0i+Q4aOSBUNGl9v3HNGjP X-Received: by 2002:a17:902:8a8b:: with SMTP id p11mr23742708plo.227.1555995284059; Mon, 22 Apr 2019 21:54:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555995284; cv=none; d=google.com; s=arc-20160816; b=d2wLoH6Sp8ALncijh/czofUi3Y4TOkzdBILl8FM4Yyr03elPeOaVK7/7EjppJXx6nK B0BcoZRlCXqsF7XLqfyRRZpbYyM4V8EExPqZuX6ZTXZcHXZ2eqYod3u2DxvAp7VWnutV nhOwgzGnthtnsgPntWjO7P2nHkcFdNdcbhmm48SmlThKay0WQiNxn1d0QPBljJm2OaUc 57Q9Z2w7Kavo+iEKPfTmPzbbPbeTMk8VcoxQLCe7qbcK9+QfxeI2ZDi6UCncxF1mttrC +3iP3XG/rrfCgeGvVFHyvvolheD2F7xdu7V/I88BmIaFTBO1fmnPd86Eh8l1YpLD9kUc FDZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature; bh=lvPeeAoinlbpEIwUnvznieLPFnWPipvzjRfNVHhsmPw=; b=PsWu7bOEqsIoE8+e2TXInOGleK20UL3/ZzzkKuTDwqaQ04GKVNp/c8vkNZDN5Zlu3A CxoDizs1gbuFbfISNhtWKMUTIkrXQ0u7vTbgs6hbe5/nFJ41Fve3Q1Ad+4NXOLpEExB/ yl6loQPaeSf/AqSHeVEWvS06L/xETr6xAGpROqxkc/45sOaygOMJCUpYzsA4EH7lEdEn zeAYhSC8XASzUrvvNHLuvcJAfcQ7aYMMHnlZUJzI1GTkJLO2jZXrSxI+xxFQ0LGpccnZ /n8klI6QUTN5LRduRwE3P6stMPwPnPRVo5J6LYuLiuh0LoN+mvm1hkRiZCCSRpYLU5s3 9iHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@vmware.com header.s=selector1 header.b=cUlDBqDp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=vmware.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t8si12591114pgu.145.2019.04.22.21.54.26; Mon, 22 Apr 2019 21:54:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@vmware.com header.s=selector1 header.b=cUlDBqDp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=vmware.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731172AbfDWCv3 (ORCPT + 99 others); Mon, 22 Apr 2019 22:51:29 -0400 Received: from mail-eopbgr800044.outbound.protection.outlook.com ([40.107.80.44]:61472 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1730424AbfDWCv2 (ORCPT ); Mon, 22 Apr 2019 22:51:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vmware.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lvPeeAoinlbpEIwUnvznieLPFnWPipvzjRfNVHhsmPw=; b=cUlDBqDp8Z1gZ/fDJAB8UGRuGq6H97sQ1NITk8hqhQbSUZPQFxsCNQPMsm82w7STm5DDrlqLCK/izi5OjCZ7F4Uo0d+z8wuO5CyZa6TOg9fPQCcvVlld0CrrRqUAdxaAf8Qhxy9U5hCKsH53CemOHP7UVmydniVlIeOszlBtumU= Received: from BYAPR05MB5240.namprd05.prod.outlook.com (20.177.231.90) by BYAPR05MB4039.namprd05.prod.outlook.com (52.135.199.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1835.7; Tue, 23 Apr 2019 02:51:00 +0000 Received: from BYAPR05MB5240.namprd05.prod.outlook.com ([fe80::51f7:404d:19ec:9e8f]) by BYAPR05MB5240.namprd05.prod.outlook.com ([fe80::51f7:404d:19ec:9e8f%6]) with mapi id 15.20.1835.010; Tue, 23 Apr 2019 02:51:00 +0000 From: Deepak Singh Rawat To: Thomas Hellstrom CC: "dri-devel@lists.freedesktop.org" , Linux-graphics-maintainer , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH 9/9] drm/vmwgfx: Add surface dirty-tracking callbacks Thread-Topic: [PATCH 9/9] drm/vmwgfx: Add surface dirty-tracking callbacks Thread-Index: AQHU8UlrNfEZeoqDZ0yn6SK1u+6qkKZJHC+A Date: Tue, 23 Apr 2019 02:51:00 +0000 Message-ID: <7fc1194e6ca8cffbe7183d6804134fc9d4faf412.camel@vmware.com> References: <20190412160338.64994-1-thellstrom@vmware.com> <20190412160338.64994-10-thellstrom@vmware.com> In-Reply-To: <20190412160338.64994-10-thellstrom@vmware.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=drawat@vmware.com; x-originating-ip: [2601:647:4b01:578f:d19d:7196:2645:8b7a] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c84e70a7-d744-46ff-fe74-08d6c7968488 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(2017052603328)(7193020);SRVR:BYAPR05MB4039; x-ms-traffictypediagnostic: BYAPR05MB4039: x-ld-processed: b39138ca-3cee-4b4a-a4d6-cd83d9dd62f0,ExtAddr x-microsoft-antispam-prvs: x-forefront-prvs: 0016DEFF96 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(396003)(39860400002)(346002)(376002)(136003)(199004)(189003)(53946003)(6512007)(6246003)(53936002)(86362001)(2906002)(5660300002)(97736004)(478600001)(118296001)(81156014)(8936002)(81166006)(8676002)(6116002)(36756003)(6486002)(14454004)(68736007)(6436002)(6636002)(186003)(476003)(446003)(2616005)(229853002)(11346002)(486006)(46003)(76116006)(305945005)(71190400001)(4326008)(66556008)(64756008)(66476007)(99286004)(30864003)(316002)(25786009)(37006003)(256004)(14444005)(7736002)(19627235002)(6862004)(102836004)(76176011)(71200400001)(54906003)(73956011)(6506007)(66946007)(66446008)(14143004)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:BYAPR05MB4039;H:BYAPR05MB5240.namprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: vmware.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 2gvj1sfSRds1hxx/LsR2vDpjemTyNJu++HfRNmhNfII1LJi9GdPbQWOF1VDay6sl9sRJAJD9/O5tvnYcDU+hHHRtKRDLdEyFHXuLmG62lboWR6dGOCQMBSjhbScDy0FNaPPIMJoFlXy63MKZ1H7jSvzRcKoVaK0Q68NN6syXraUsiyfmXRfASAbTS/sKIitmmgcFNfQbec7zGBd0JwYWMhNyg2YJmIES9bRXvJ6LEktYoslu1VMuQqymQyN87qurSHVAtDgBeZZRzNlyfePAR4+A3ZXRHY4S4OQC7PCRT+8ATuthXjfaqlL6i4MD28p4CtMW8WTJ9/GJf2GMdN8wOfz+F3SObR4DvnxPdhOk9pXBPdCllxU8LeNMVSOCyfjo8r9cS3htv9371fAXXHnm0n2jMUHbJ+ft2YtgCzQi5EY= Content-Type: text/plain; charset="utf-8" Content-ID: <559A4BAD6BE24741806C37CEA2CEDCE4@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: vmware.com X-MS-Exchange-CrossTenant-Network-Message-Id: c84e70a7-d744-46ff-fe74-08d6c7968488 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Apr 2019 02:51:00.0966 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b39138ca-3cee-4b4a-a4d6-cd83d9dd62f0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR05MB4039 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org TWlub3Igbml0cyBiZWxvdw0KDQpSZXZpZXdlZC1ieTogRGVlcGFrIFJhd2F0IDxkcmF3YXRAdm13 YXJlLmNvbT4NCg0KT24gRnJpLCAyMDE5LTA0LTEyIGF0IDE2OjA0ICswMDAwLCBUaG9tYXMgSGVs bHN0cm9tIHdyb3RlOg0KPiBBZGQgdGhlIGNhbGxiYWNrcyBuZWNlc3NhcnkgdG8gaW1wbGVtZW50 IGVtdWxhdGVkIGNvaGVyZW50IG1lbW9yeSBmb3INCj4gc3VyZmFjZXMuIEFkZCBhIGZsYWcgdG8g dGhlIGdiX3N1cmZhY2VfY3JlYXRlIGlvY3RsIHRvIGluZGljYXRlIHRoYXQNCj4gc3VyZmFjZSBt ZW1vcnkgc2hvdWxkIGJlIGNvaGVyZW50Lg0KPiBBbHNvIGJ1bXAgdGhlIGRybSBtaW5vciB2ZXJz aW9uIHRvIHNpZ25hbCB0aGUgYXZhaWxhYmlsaXR5IG9mDQo+IGNvaGVyZW50DQo+IHN1cmZhY2Vz Lg0KPiANCj4gU2lnbmVkLW9mZi1ieTogVGhvbWFzIEhlbGxzdHJvbSA8dGhlbGxzdHJvbUB2bXdh cmUuY29tPg0KPiAtLS0NCj4gIC4uLi9kZXZpY2VfaW5jbHVkZS9zdmdhM2Rfc3VyZmFjZWRlZnMu aCAgICAgICB8IDIwOSArKysrKysrKystDQo+ICBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9kcnYuaCAgICAgICAgICAgfCAgIDQgKy0NCj4gIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X3N1cmZhY2UuYyAgICAgICB8IDM5MA0KPiArKysrKysrKysrKysrKysrKy0NCj4gIGluY2x1 ZGUvdWFwaS9kcm0vdm13Z2Z4X2RybS5oICAgICAgICAgICAgICAgICB8ICAgNCArLQ0KPiAgNCBm aWxlcyBjaGFuZ2VkLCA2MDAgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkNCj4gDQo+IGRp ZmYgLS1naXQNCj4gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L2RldmljZV9pbmNsdWRlL3N2Z2Ez ZF9zdXJmYWNlZGVmcy5oDQo+IGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9kZXZpY2VfaW5jbHVk ZS9zdmdhM2Rfc3VyZmFjZWRlZnMuaA0KPiBpbmRleCBmMmJmZDNkODA1OTguLmQ5MDEyMDZjMDRl MyAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9kZXZpY2VfaW5jbHVkZS9z dmdhM2Rfc3VyZmFjZWRlZnMuaA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L2Rldmlj ZV9pbmNsdWRlL3N2Z2EzZF9zdXJmYWNlZGVmcy5oDQo+IEBAIC0xMjgwLDcgKzEyODAsNiBAQA0K PiBzdmdhM2RzdXJmYWNlX2dldF9waXhlbF9vZmZzZXQoU1ZHQTNkU3VyZmFjZUZvcm1hdCBmb3Jt YXQsDQo+ICAJcmV0dXJuIG9mZnNldDsNCj4gIH0NCj4gIA0KPiAtDQo+ICBzdGF0aWMgaW5saW5l IHUzMg0KPiAgc3ZnYTNkc3VyZmFjZV9nZXRfaW1hZ2Vfb2Zmc2V0KFNWR0EzZFN1cmZhY2VGb3Jt YXQgZm9ybWF0LA0KPiAgCQkJICAgICAgIHN1cmZfc2l6ZV9zdHJ1Y3QgYmFzZUxldmVsU2l6ZSwN Cj4gQEAgLTEzNzUsNCArMTM3NCwyMTIgQEANCj4gc3ZnYTNkc3VyZmFjZV9pc19zY3JlZW5fdGFy Z2V0X2Zvcm1hdChTVkdBM2RTdXJmYWNlRm9ybWF0IGZvcm1hdCkNCj4gIAlyZXR1cm4gc3ZnYTNk c3VyZmFjZV9pc19keF9zY3JlZW5fdGFyZ2V0X2Zvcm1hdChmb3JtYXQpOw0KPiAgfQ0KPiAgDQo+ ICsvKioNCj4gKyAqIHN0cnVjdCBzdmdhM2RzdXJmYWNlX21pcCAtIE1pbXBtYXAgbGV2ZWwgaW5m b3JtYXRpb24NCj4gKyAqIEBieXRlczogQnl0ZXMgcmVxdWlyZWQgaW4gdGhlIGJhY2tpbmcgc3Rv cmUgb2YgdGhpcyBtaXBtYXAgbGV2ZWwuDQo+ICsgKiBAaW1nX3N0cmlkZTogQnl0ZSBzdHJpZGUg cGVyIGltYWdlLg0KPiArICogQHJvd19zdHJpZGU6IEJ5dGUgc3RyaWRlIHBlciBibG9jayByb3cu DQo+ICsgKiBAc2l6ZTogVGhlIHNpemUgb2YgdGhlIG1pcG1hcC4NCj4gKyAqLw0KPiArc3RydWN0 IHN2Z2EzZHN1cmZhY2VfbWlwIHsNCj4gKwlzaXplX3QgYnl0ZXM7DQo+ICsJc2l6ZV90IGltZ19z dHJpZGU7DQo+ICsJc2l6ZV90IHJvd19zdHJpZGU7DQo+ICsJc3RydWN0IGRybV92bXdfc2l6ZSBz aXplOw0KPiArDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCBzdmdhM2RzdXJmYWNl X2NhY2hlIC0gQ2FjaGVkIHN1cmZhY2UgaW5mb3JtYXRpb24NCj4gKyAqIEBkZXNjOiBQb2ludGVy IHRvIHRoZSBzdXJmYWNlIGRlc2NyaXB0b3INCj4gKyAqIEBtaXA6IEFycmF5IG9mIG1pcG1hcCBs ZXZlbCBpbmZvcm1hdGlvbi4gVmFsaWQgc2l6ZSBpcw0KPiBAbnVtX21pcF9sZXZlbHMuDQo+ICsg KiBAbWlwX2NoYWluX2J5dGVzOiBCeXRlcyByZXF1aXJlZCBpbiB0aGUgYmFja2luZyBzdG9yZSBm b3IgdGhlDQo+IHdob2xlIGNoYWluDQo+ICsgKiBvZiBtaXAgbGV2ZWxzLg0KPiArICogQG51bV9t aXBfbGV2ZWxzOiBWYWxpZCBzaXplIG9mIHRoZSBAbWlwIGFycmF5LiBOdW1iZXIgb2YgbWlwbWFw DQo+IGxldmVscyBpbg0KPiArICogYSBjaGFpbi4NCj4gKyAqIEBudW1fbGF5ZXJzOiBOdW1iZXIg b2Ygc2xpY2VzIGluIGFuIGFycmF5IHRleHR1cmUgb3IgbnVtYmVyIG9mDQo+IGZhY2VzIGluDQo+ ICsgKiBhIGN1YmVtYXAgdGV4dHVyZS4NCj4gKyAqLw0KPiArc3RydWN0IHN2Z2EzZHN1cmZhY2Vf Y2FjaGUgew0KPiArCWNvbnN0IHN0cnVjdCBzdmdhM2Rfc3VyZmFjZV9kZXNjICpkZXNjOw0KPiAr CXN0cnVjdCBzdmdhM2RzdXJmYWNlX21pcCBtaXBbRFJNX1ZNV19NQVhfTUlQX0xFVkVMU107DQo+ ICsJc2l6ZV90IG1pcF9jaGFpbl9ieXRlczsNCj4gKwl1MzIgbnVtX21pcF9sZXZlbHM7DQo+ICsJ dTMyIG51bV9sYXllcnM7DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCBzdmdhM2Rz dXJmYWNlX2xvYyAtIFN1cmZhY2UgbG9jYXRpb24NCj4gKyAqIEBzdWJfcmVzb3VyY2U6IFN1cmZh Y2Ugc3VicmVzb3VyY2UuIERlZmluZWQgYXMgbGF5ZXIgKg0KPiBudW1fbWlwX2xldmVscyArDQo+ ICsgKiBtaXBfbGV2ZWwuDQo+ICsgKiBAeDogWCBjb29yZGluYXRlLg0KPiArICogQHk6IFkgY29v cmRpbmF0ZS4NCj4gKyAqIEB6OiBaIGNvb3JkaW5hdGUuDQo+ICsgKi8NCj4gK3N0cnVjdCBzdmdh M2RzdXJmYWNlX2xvYyB7DQo+ICsJdTMyIHN1Yl9yZXNvdXJjZTsNCj4gKwl1MzIgeCwgeSwgejsN Cj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogc3ZnYTNkc3VyZmFjZV9zdWJyZXMgLSBDb21wdXRl IHRoZSBzdWJyZXNvdXJjZSBmcm9tIGxheWVyIGFuZA0KPiBtaXBtYXAuDQo+ICsgKiBAY2FjaGU6 IFN1cmZhY2UgbGF5b3V0IGRhdGEuDQo+ICsgKiBAbWlwX2xldmVsOiBUaGUgbWlwbWFwIGxldmVs Lg0KPiArICogQGxheWVyOiBUaGUgc3VyZmFjZSBsYXllciAoZmFjZSBvciBhcnJheSBzbGljZSku DQo+ICsgKg0KPiArICogUmV0dXJuOiBUaGUgc3VicmVzb3VyY2UuDQo+ICsgKi8NCj4gK3N0YXRp YyBpbmxpbmUgdTMyIHN2Z2EzZHN1cmZhY2Vfc3VicmVzKGNvbnN0IHN0cnVjdA0KPiBzdmdhM2Rz dXJmYWNlX2NhY2hlICpjYWNoZSwNCj4gKwkJCQkgICAgICAgdTMyIG1pcF9sZXZlbCwgdTMyIGxh eWVyKQ0KPiArew0KPiArCXJldHVybiBjYWNoZS0+bnVtX21pcF9sZXZlbHMgKiBsYXllciArIG1p cF9sZXZlbDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBzdmdhM2RzdXJmYWNlX3NldHVwX2Nh Y2hlIC0gQnVpbGQgYSBzdXJmYWNlIGNhY2hlIGVudHJ5DQo+ICsgKiBAc2l6ZTogVGhlIHN1cmZh Y2UgYmFzZSBsZXZlbCBkaW1lbnNpb25zLg0KPiArICogQGZvcm1hdDogVGhlIHN1cmZhY2UgZm9y bWF0Lg0KPiArICogQG51bV9taXBfbGV2ZWxzOiBOdW1iZXIgb2YgbWlwbWFwIGxldmVscy4NCj4g KyAqIEBudW1fbGF5ZXJzOiBOdW1iZXIgb2YgbGF5ZXJzLg0KPiArICogQGNhY2hlOiBQb2ludGVy IHRvIGEgc3RydWN0IHN2Z2EzZHN1cmZhY2VfY2FjaCBvYmplY3QgdG8gYmUNCj4gZmlsbGVkIGlu Lg0KPiArICovDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgc3ZnYTNkc3VyZmFjZV9zZXR1cF9jYWNo ZShjb25zdCBzdHJ1Y3QNCj4gZHJtX3Ztd19zaXplICpzaXplLA0KPiArCQkJCQkgICAgIFNWR0Ez ZFN1cmZhY2VGb3JtYXQNCj4gZm9ybWF0LA0KPiArCQkJCQkgICAgIHUzMiBudW1fbWlwX2xldmVs cywNCj4gKwkJCQkJICAgICB1MzIgbnVtX2xheWVycywNCj4gKwkJCQkJICAgICB1MzIgbnVtX3Nh bXBsZXMsDQo+ICsJCQkJCSAgICAgc3RydWN0IHN2Z2EzZHN1cmZhY2VfY2FjaGUNCj4gKmNhY2hl KQ0KPiArew0KPiArCWNvbnN0IHN0cnVjdCBzdmdhM2Rfc3VyZmFjZV9kZXNjICpkZXNjOw0KPiAr CXUzMiBpOw0KPiArDQo+ICsJbWVtc2V0KGNhY2hlLCAwLCBzaXplb2YoKmNhY2hlKSk7DQo+ICsJ Y2FjaGUtPmRlc2MgPSBkZXNjID0gc3ZnYTNkc3VyZmFjZV9nZXRfZGVzYyhmb3JtYXQpOw0KPiAr CWNhY2hlLT5udW1fbWlwX2xldmVscyA9IG51bV9taXBfbGV2ZWxzOw0KPiArCWNhY2hlLT5udW1f bGF5ZXJzID0gbnVtX2xheWVyczsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgY2FjaGUtPm51bV9taXBf bGV2ZWxzOyBpKyspIHsNCj4gKwkJc3RydWN0IHN2Z2EzZHN1cmZhY2VfbWlwICptaXAgPSAmY2Fj aGUtPm1pcFtpXTsNCj4gKw0KPiArCQltaXAtPnNpemUgPSBzdmdhM2RzdXJmYWNlX2dldF9taXBf c2l6ZSgqc2l6ZSwgaSk7DQo+ICsJCW1pcC0+Ynl0ZXMgPSBzdmdhM2RzdXJmYWNlX2dldF9pbWFn ZV9idWZmZXJfc2l6ZQ0KPiArCQkJKGRlc2MsICZtaXAtPnNpemUsIDApICogbnVtX3NhbXBsZXM7 DQo+ICsJCW1pcC0+cm93X3N0cmlkZSA9DQo+ICsJCQlfX0tFUk5FTF9ESVZfUk9VTkRfVVAobWlw LT5zaXplLndpZHRoLA0KPiArCQkJCQkgICAgICBkZXNjLT5ibG9ja19zaXplLndpZHRoKSAqDQo+ ICsJCQlkZXNjLT5ieXRlc19wZXJfYmxvY2sgKiBudW1fc2FtcGxlczsNCj4gKwkJbWlwLT5pbWdf c3RyaWRlID0NCj4gKwkJCV9fS0VSTkVMX0RJVl9ST1VORF9VUChtaXAtPnNpemUuaGVpZ2h0LA0K PiArCQkJCQkgICAgICBkZXNjLT5ibG9ja19zaXplLmhlaWdodCkNCj4gKg0KPiArCQkJbWlwLT5y b3dfc3RyaWRlOw0KPiArCQljYWNoZS0+bWlwX2NoYWluX2J5dGVzICs9IG1pcC0+Ynl0ZXM7DQo+ ICsJfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIHN2Z2EzZHN1cmZhY2VfZ2V0X2xvYyAtIEdl dCBhIHN1cmZhY2UgbG9jYXRpb24gZnJvbSBhbiBvZmZzZXQNCj4gaW50byB0aGUNCj4gKyAqIGJh Y2tpbmcgc3RvcmUNCj4gKyAqIEBjYWNoZTogU3VyZmFjZSBsYXlvdXQgZGF0YS4NCj4gKyAqIEBs b2M6IFBvaW50ZXIgdG8gYSBzdHJ1Y3Qgc3ZnYTNkc3VyZmFjZV9sb2MgdG8gYmUgZmlsbGVkIGlu Lg0KPiArICogQG9mZnNldDogT2Zmc2V0IGludG8gdGhlIHN1cmZhY2UgYmFja2luZyBzdG9yZS4N Cj4gKyAqLw0KPiArc3RhdGljIGlubGluZSB2b2lkDQo+ICtzdmdhM2RzdXJmYWNlX2dldF9sb2Mo Y29uc3Qgc3RydWN0IHN2Z2EzZHN1cmZhY2VfY2FjaGUgKmNhY2hlLA0KPiArCQkgICAgICBzdHJ1 Y3Qgc3ZnYTNkc3VyZmFjZV9sb2MgKmxvYywNCj4gKwkJICAgICAgc2l6ZV90IG9mZnNldCkNCj4g K3sNCj4gKwl1MzIgbGF5ZXIgPSBvZmZzZXQgLyBjYWNoZS0+bWlwX2NoYWluX2J5dGVzOw0KPiAr CWNvbnN0IHN0cnVjdCBzdmdhM2RzdXJmYWNlX21pcCAqbWlwID0gJmNhY2hlLT5taXBbMF07DQo+ ICsJY29uc3Qgc3RydWN0IHN2Z2EzZF9zdXJmYWNlX2Rlc2MgKmRlc2MgPSBjYWNoZS0+ZGVzYzsN Cj4gKwlpbnQgaTsNCj4gKw0KPiArCW9mZnNldCAtPSBsYXllciAqIGNhY2hlLT5taXBfY2hhaW5f Ynl0ZXM7DQo+ICsJZm9yIChpID0gMDsgaSA8IGNhY2hlLT5udW1fbWlwX2xldmVsczsgKytpLCAr K21pcCkgew0KPiArCQlpZiAobWlwLT5ieXRlcyA+IG9mZnNldCkNCj4gKwkJCWJyZWFrOw0KPiAr CQlvZmZzZXQgLT0gbWlwLT5ieXRlczsNCj4gKwl9DQo+ICsNCj4gKwlsb2MtPnN1Yl9yZXNvdXJj ZSA9IHN2Z2EzZHN1cmZhY2Vfc3VicmVzKGNhY2hlLCBpLCBsYXllcik7DQo+ICsJbG9jLT56ID0g b2Zmc2V0IC8gbWlwLT5pbWdfc3RyaWRlOw0KPiArCW9mZnNldCAtPSBsb2MtPnogKiBtaXAtPmlt Z19zdHJpZGU7DQo+ICsJbG9jLT56ICo9IGRlc2MtPmJsb2NrX3NpemUuZGVwdGg7DQo+ICsJbG9j LT55ID0gb2Zmc2V0IC8gbWlwLT5yb3dfc3RyaWRlOw0KPiArCW9mZnNldCAtPSBsb2MtPnkgKiBt aXAtPnJvd19zdHJpZGU7DQo+ICsJbG9jLT55ICo9IGRlc2MtPmJsb2NrX3NpemUuaGVpZ2h0Ow0K PiArCWxvYy0+eCA9IG9mZnNldCAvIGRlc2MtPmJ5dGVzX3Blcl9ibG9jazsNCj4gKwlsb2MtPngg Kj0gZGVzYy0+YmxvY2tfc2l6ZS53aWR0aDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBzdmdh M2RzdXJmYWNlX2luY19sb2MgLSBDbGFtcCBpbmNyZW1lbnQgYSBzdXJmYWNlIGxvY2F0aW9uIHdp dGgNCj4gb25lIGJsb2NrDQo+ICsgKiBzaXplDQo+ICsgKiBpbiBlYWNoIGRpbWVuc2lvbi4NCj4g KyAqIEBsb2M6IFBvaW50ZXIgdG8gYSBzdHJ1Y3Qgc3ZnYTNkc3VyZmFjZV9sb2MgdG8gYmUgaW5j cmVtZW50ZWQuDQo+ICsgKg0KPiArICogV2hlbiBjb21wdXRpbmcgdGhlIHNpemUgb2YgYSByYW5n ZSBhcyBzaXplID0gZW5kIC0gc3RhcnQsIHRoZQ0KPiByYW5nZSBkb2VzIG5vdA0KPiArICogaW5j bHVkZSB0aGUgZW5kIGVsZW1lbnQuIEhvd2V2ZXIgYSBsb2NhdGlvbiByZXByZXNlbnRpbmcgdGhl IGxhc3QNCj4gYnl0ZQ0KPiArICogb2YgYSB0b3VjaGVkIHJlZ2lvbiBpbiB0aGUgYmFja2luZyBz dG9yZSAqaXMqIGluY2x1ZGVkIGluIHRoZQ0KPiByYW5nZS4NCj4gKyAqIFRoaXMgZnVuY3Rpb24g bW90aWZpZXMgc3VjaCBhIGxvY2F0aW9uIHRvIG1hdGNoIHRoZSBlbmQgDQoNCi9zL21vdGlmaWVz L21vZGlmaWVzDQoNCj4gZGVmaW5pdGlvbg0KPiArICogZ2l2ZW4gYXMgc3RhcnQgKyBzaXplIHdo aWNoIGlzIHRoZSBvbmUgdXNlZCBpbiBhIFNWR0EzZEJveC4NCj4gKyAqLw0KPiArc3RhdGljIGlu bGluZSB2b2lkDQo+ICtzdmdhM2RzdXJmYWNlX2luY19sb2MoY29uc3Qgc3RydWN0IHN2Z2EzZHN1 cmZhY2VfY2FjaGUgKmNhY2hlLA0KPiArCQkgICAgICBzdHJ1Y3Qgc3ZnYTNkc3VyZmFjZV9sb2Mg KmxvYykNCj4gK3sNCj4gKwljb25zdCBzdHJ1Y3Qgc3ZnYTNkX3N1cmZhY2VfZGVzYyAqZGVzYyA9 IGNhY2hlLT5kZXNjOw0KPiArCXUzMiBtaXAgPSBsb2MtPnN1Yl9yZXNvdXJjZSAlIGNhY2hlLT5u dW1fbWlwX2xldmVsczsNCj4gKwljb25zdCBzdHJ1Y3QgZHJtX3Ztd19zaXplICpzaXplID0gJmNh Y2hlLT5taXBbbWlwXS5zaXplOw0KPiArDQo+ICsJbG9jLT5zdWJfcmVzb3VyY2UrKzsNCj4gKwls b2MtPnggKz0gZGVzYy0+YmxvY2tfc2l6ZS53aWR0aDsNCj4gKwlpZiAobG9jLT54ID4gc2l6ZS0+ d2lkdGgpDQo+ICsJCWxvYy0+eCA9IHNpemUtPndpZHRoOw0KPiArCWxvYy0+eSArPSBkZXNjLT5i bG9ja19zaXplLmhlaWdodDsNCj4gKwlpZiAobG9jLT55ID4gc2l6ZS0+aGVpZ2h0KQ0KPiArCQls b2MtPnkgPSBzaXplLT5oZWlnaHQ7DQo+ICsJbG9jLT56ICs9IGRlc2MtPmJsb2NrX3NpemUuZGVw dGg7DQo+ICsJaWYgKGxvYy0+eiA+IHNpemUtPmRlcHRoKQ0KPiArCQlsb2MtPnogPSBzaXplLT5k ZXB0aDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBzdmdhM2RzdXJmYWNlX21pbl9sb2MgLSBU aGUgc3RhcnQgbG9jYXRpb24gaW4gYSBzdWJyZXNvcmNlDQoNCi9zL3N1YnJlc29yY2Uvc3VicmVz b3VyY2UNCg0KPiArICogQGNhY2hlOiBTdXJmYWNlIGxheW91dCBkYXRhLg0KPiArICogQHN1Yl9y ZXNvdXJjZTogVGhlIHN1YnJlc291cmNlLg0KPiArICogQGxvYzogUG9pbnRlciB0byBhIHN0cnVj dCBzdmdhM2RzdXJmYWNlX2xvYyB0byBiZSBmaWxsZWQgaW4uDQo+ICsgKi8NCj4gK3N0YXRpYyBp bmxpbmUgdm9pZA0KPiArc3ZnYTNkc3VyZmFjZV9taW5fbG9jKGNvbnN0IHN0cnVjdCBzdmdhM2Rz dXJmYWNlX2NhY2hlICpjYWNoZSwNCj4gKwkJICAgICAgdTMyIHN1Yl9yZXNvdXJjZSwNCj4gKwkJ ICAgICAgc3RydWN0IHN2Z2EzZHN1cmZhY2VfbG9jICpsb2MpDQo+ICt7DQo+ICsJbG9jLT5zdWJf cmVzb3VyY2UgPSBzdWJfcmVzb3VyY2U7DQo+ICsJbG9jLT54ID0gbG9jLT55ID0gbG9jLT56ID0g MDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBzdmdhM2RzdXJmYWNlX21pbl9sb2MgLSBUaGUg ZW5kIGxvY2F0aW9uIGluIGEgc3VicmVzb3JjZQ0KDQpzdmdhM2RzdXJmYWNlX21heF9sb2MuIEFs c28gL3Mvc3VicmVzb3JjZS9zdWJyZXNvdXJjZQ0KDQo+ICsgKiBAY2FjaGU6IFN1cmZhY2UgbGF5 b3V0IGRhdGEuDQo+ICsgKiBAc3ViX3Jlc291cmNlOiBUaGUgc3VicmVzb3VyY2UuDQo+ICsgKiBA bG9jOiBQb2ludGVyIHRvIGEgc3RydWN0IHN2Z2EzZHN1cmZhY2VfbG9jIHRvIGJlIGZpbGxlZCBp bi4NCj4gKyAqDQo+ICsgKiBGb2xsb3dpbmcgdGhlIGVuZCBkZWZpbml0aW9uIGdpdmVuIGluIHN2 Z2EzZHN1cmZhY2VfaW5jX2xvYygpLA0KPiArICogQ29tcHV0ZSB0aGUgZW5kIGxvY2F0aW9uIG9m IGEgc3VyZmFjZSBzdWJyZXNvdXJjZS4NCj4gKyAqLw0KPiArc3RhdGljIGlubGluZSB2b2lkDQo+ ICtzdmdhM2RzdXJmYWNlX21heF9sb2MoY29uc3Qgc3RydWN0IHN2Z2EzZHN1cmZhY2VfY2FjaGUg KmNhY2hlLA0KPiArCQkgICAgICB1MzIgc3ViX3Jlc291cmNlLA0KPiArCQkgICAgICBzdHJ1Y3Qg c3ZnYTNkc3VyZmFjZV9sb2MgKmxvYykNCj4gK3sNCj4gKwljb25zdCBzdHJ1Y3QgZHJtX3Ztd19z aXplICpzaXplOw0KPiArCXUzMiBtaXA7DQo+ICsNCj4gKwlsb2MtPnN1Yl9yZXNvdXJjZSA9IHN1 Yl9yZXNvdXJjZSArIDE7DQo+ICsJbWlwID0gc3ViX3Jlc291cmNlICUgY2FjaGUtPm51bV9taXBf bGV2ZWxzOw0KPiArCXNpemUgPSAmY2FjaGUtPm1pcFttaXBdLnNpemU7DQo+ICsJbG9jLT54ID0g c2l6ZS0+d2lkdGg7DQo+ICsJbG9jLT55ID0gc2l6ZS0+aGVpZ2h0Ow0KPiArCWxvYy0+eiA9IHNp emUtPmRlcHRoOw0KPiArfQ0KPiArDQo+ICAjZW5kaWYgLyogX1NWR0EzRF9TVVJGQUNFREVGU19I XyAqLw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgN Cj4gYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaA0KPiBpbmRleCAwMDc5NDQx NTMzNWUuLjYzMGEwMWQ3NWE0MSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfZHJ2LmgNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2 LmgNCj4gQEAgLTQ0LDkgKzQ0LDkgQEANCj4gICNpbmNsdWRlIDxsaW51eC9zeW5jX2ZpbGUuaD4N Cj4gIA0KPiAgI2RlZmluZSBWTVdHRlhfRFJJVkVSX05BTUUgInZtd2dmeCINCj4gLSNkZWZpbmUg Vk1XR0ZYX0RSSVZFUl9EQVRFICIyMDE4MDcwNCINCj4gKyNkZWZpbmUgVk1XR0ZYX0RSSVZFUl9E QVRFICIyMDE5MDMyOCINCj4gICNkZWZpbmUgVk1XR0ZYX0RSSVZFUl9NQUpPUiAyDQo+IC0jZGVm aW5lIFZNV0dGWF9EUklWRVJfTUlOT1IgMTUNCj4gKyNkZWZpbmUgVk1XR0ZYX0RSSVZFUl9NSU5P UiAxNg0KPiAgI2RlZmluZSBWTVdHRlhfRFJJVkVSX1BBVENITEVWRUwgMA0KPiAgI2RlZmluZSBW TVdHRlhfRklMRV9QQUdFX09GRlNFVCAweDAwMTAwMDAwDQo+ICAjZGVmaW5lIFZNV0dGWF9GSUZP X1NUQVRJQ19TSVpFICgxMDI0KjEwMjQpDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L3Ztd2dmeF9zdXJmYWNlLmMNCj4gYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9zdXJmYWNlLmMNCj4gaW5kZXggYzQwZDQ0ZjRkOWFmLi5mNTYxNDE1MjlkYTUgMTAwNjQ0DQo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N1cmZhY2UuYw0KPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zdXJmYWNlLmMNCj4gQEAgLTY4LDYgKzY4LDIw IEBAIHN0cnVjdCB2bXdfc3VyZmFjZV9vZmZzZXQgew0KPiAgCXVpbnQzMl90IGJvX29mZnNldDsN Cj4gIH07DQo+ICANCj4gKy8qKg0KPiArICogdm13X3N1cmZhY2VfZGlydHkgLSBTdXJmYWNlIGRp cnR5LXRyYWNrZXINCj4gKyAqIEBjYWNoZTogQ2FjaGVkIGxheW91dCBpbmZvcm1hdGlvbiBvZiB0 aGUgc3VyZmFjZS4NCj4gKyAqIEBzaXplOiBBY2NvdW50aW5nIHNpemUgZm9yIHRoZSBzdHJ1Y3Qg dm13X3N1cmZhY2VfZGlydHkuDQo+ICsgKiBAbnVtX3N1YnJlczogTnVtYmVyIG9mIHN1YnJlc291 cmNlcy4NCj4gKyAqIEBib3hlczogQXJyYXkgb2YgU1ZHQTNkQm94ZXMgaW5kaWNhdGluZyBkaXJ0 eSByZWdpb25zLiBPbmUgcGVyDQo+IHN1YnJlc291cmNlLg0KPiArICovDQo+ICtzdHJ1Y3Qgdm13 X3N1cmZhY2VfZGlydHkgew0KPiArCXN0cnVjdCBzdmdhM2RzdXJmYWNlX2NhY2hlIGNhY2hlOw0K PiArCXNpemVfdCBzaXplOw0KPiArCXUzMiBudW1fc3VicmVzOw0KPiArCVNWR0EzZEJveCBib3hl c1swXTsNCj4gK307DQo+ICsNCj4gIHN0YXRpYyB2b2lkIHZtd191c2VyX3N1cmZhY2VfZnJlZShz dHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpOw0KPiAgc3RhdGljIHN0cnVjdCB2bXdfcmVzb3VyY2Ug Kg0KPiAgdm13X3VzZXJfc3VyZmFjZV9iYXNlX3RvX3JlcyhzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0 ICpiYXNlKTsNCj4gQEAgLTk2LDYgKzExMCwxMyBAQCB2bXdfZ2Jfc3VyZmFjZV9yZWZlcmVuY2Vf aW50ZXJuYWwoc3RydWN0DQo+IGRybV9kZXZpY2UgKmRldiwNCj4gIAkJCQkgIHN0cnVjdCBkcm1f dm13X2diX3N1cmZhY2VfcmVmX2V4dF9yZXANCj4gKnJlcCwNCj4gIAkJCQkgIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2KTsNCj4gIA0KPiArc3RhdGljIHZvaWQgdm13X3N1cmZhY2VfZGlydHlf ZnJlZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpOw0KPiArc3RhdGljIGludCB2bXdfc3VyZmFj ZV9kaXJ0eV9hbGxvYyhzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpOw0KPiArc3RhdGljIGludCB2 bXdfc3VyZmFjZV9kaXJ0eV9zeW5jKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyk7DQo+ICtzdGF0 aWMgdm9pZCB2bXdfc3VyZmFjZV9kaXJ0eV9yYW5nZV9hZGQoc3RydWN0IHZtd19yZXNvdXJjZSAq cmVzLA0KPiBzaXplX3Qgc3RhcnQsDQo+ICsJCQkJCXNpemVfdCBlbmQpOw0KPiArc3RhdGljIGlu dCB2bXdfc3VyZmFjZV9jbGVhbihzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpOw0KPiArDQo+ICBz dGF0aWMgY29uc3Qgc3RydWN0IHZtd191c2VyX3Jlc291cmNlX2NvbnYgdXNlcl9zdXJmYWNlX2Nv bnYgPSB7DQo+ICAJLm9iamVjdF90eXBlID0gVk1XX1JFU19TVVJGQUNFLA0KPiAgCS5iYXNlX29i al90b19yZXMgPSB2bXdfdXNlcl9zdXJmYWNlX2Jhc2VfdG9fcmVzLA0KPiBAQCAtMTMzLDcgKzE1 NCwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZtd19yZXNfZnVuYw0KPiB2bXdfZ2Jfc3VyZmFj ZV9mdW5jID0gew0KPiAgCS5jcmVhdGUgPSB2bXdfZ2Jfc3VyZmFjZV9jcmVhdGUsDQo+ICAJLmRl c3Ryb3kgPSB2bXdfZ2Jfc3VyZmFjZV9kZXN0cm95LA0KPiAgCS5iaW5kID0gdm13X2diX3N1cmZh Y2VfYmluZCwNCj4gLQkudW5iaW5kID0gdm13X2diX3N1cmZhY2VfdW5iaW5kDQo+ICsJLnVuYmlu ZCA9IHZtd19nYl9zdXJmYWNlX3VuYmluZCwNCj4gKwkuZGlydHlfYWxsb2MgPSB2bXdfc3VyZmFj ZV9kaXJ0eV9hbGxvYywNCj4gKwkuZGlydHlfZnJlZSA9IHZtd19zdXJmYWNlX2RpcnR5X2ZyZWUs DQo+ICsJLmRpcnR5X3N5bmMgPSB2bXdfc3VyZmFjZV9kaXJ0eV9zeW5jLA0KPiArCS5kaXJ0eV9y YW5nZV9hZGQgPSB2bXdfc3VyZmFjZV9kaXJ0eV9yYW5nZV9hZGQsDQo+ICsJLmNsZWFuID0gdm13 X3N1cmZhY2VfY2xlYW4sDQo+ICB9Ow0KPiAgDQo+ICAvKioNCj4gQEAgLTY0MSw2ICs2NjcsNyBA QCBzdGF0aWMgdm9pZCB2bXdfdXNlcl9zdXJmYWNlX2ZyZWUoc3RydWN0DQo+IHZtd19yZXNvdXJj ZSAqcmVzKQ0KPiAgCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzcmYtPnJlcy5kZXZf cHJpdjsNCj4gIAl1aW50MzJfdCBzaXplID0gdXNlcl9zcmYtPnNpemU7DQo+ICANCj4gKwlXQVJO X09OX09OQ0UocmVzLT5kaXJ0eSk7DQo+ICAJaWYgKHVzZXJfc3JmLT5tYXN0ZXIpDQo+ICAJCWRy bV9tYXN0ZXJfcHV0KCZ1c2VyX3NyZi0+bWFzdGVyKTsNCj4gIAlrZnJlZShzcmYtPm9mZnNldHMp Ow0KPiBAQCAtMTE3NCwxMCArMTIwMSwxNiBAQCBzdGF0aWMgaW50IHZtd19nYl9zdXJmYWNlX2Jp bmQoc3RydWN0DQo+IHZtd19yZXNvdXJjZSAqcmVzLA0KPiAgCQljbWQyLT5oZWFkZXIuaWQgPSBT VkdBXzNEX0NNRF9VUERBVEVfR0JfU1VSRkFDRTsNCj4gIAkJY21kMi0+aGVhZGVyLnNpemUgPSBz aXplb2YoY21kMi0+Ym9keSk7DQo+ICAJCWNtZDItPmJvZHkuc2lkID0gcmVzLT5pZDsNCj4gLQkJ cmVzLT5iYWNrdXBfZGlydHkgPSBmYWxzZTsNCj4gIAl9DQo+ICAJdm13X2ZpZm9fY29tbWl0KGRl dl9wcml2LCBzdWJtaXRfc2l6ZSk7DQo+ICANCj4gKwlpZiAocmVzLT5iYWNrdXAtPmRpcnR5ICYm IHJlcy0+YmFja3VwX2RpcnR5KSB7DQo+ICsJCS8qIFdlJ3ZlIGp1c3QgbWFkZSBhIGZ1bGwgdXBs b2FkLiBDZWFyIGRpcnR5IHJlZ2lvbnMuDQo+ICovDQo+ICsJCXZtd19ib19kaXJ0eV9jbGVhcl9y ZXMocmVzKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXMtPmJhY2t1cF9kaXJ0eSA9IGZhbHNlOw0KPiAr DQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+ICANCj4gQEAgLTE2NDIsNyArMTY3NSw4IEBAIHZtd19n Yl9zdXJmYWNlX2RlZmluZV9pbnRlcm5hbChzdHJ1Y3QNCj4gZHJtX2RldmljZSAqZGV2LA0KPiAg CQkJfQ0KPiAgCQl9DQo+ICAJfSBlbHNlIGlmIChyZXEtPmJhc2UuZHJtX3N1cmZhY2VfZmxhZ3Mg Jg0KPiAtCQkgICBkcm1fdm13X3N1cmZhY2VfZmxhZ19jcmVhdGVfYnVmZmVyKQ0KPiArCQkgICAo ZHJtX3Ztd19zdXJmYWNlX2ZsYWdfY3JlYXRlX2J1ZmZlciB8DQo+ICsJCSAgICBkcm1fdm13X3N1 cmZhY2VfZmxhZ19jb2hlcmVudCkpDQo+ICAJCXJldCA9IHZtd191c2VyX2JvX2FsbG9jKGRldl9w cml2LCB0ZmlsZSwNCj4gIAkJCQkJcmVzLT5iYWNrdXBfc2l6ZSwNCj4gIAkJCQkJcmVxLT5iYXNl LmRybV9zdXJmYWNlX2ZsYWdzICYNCj4gQEAgLTE2NTYsNiArMTY5MCwyNiBAQCB2bXdfZ2Jfc3Vy ZmFjZV9kZWZpbmVfaW50ZXJuYWwoc3RydWN0DQo+IGRybV9kZXZpY2UgKmRldiwNCj4gIAkJZ290 byBvdXRfdW5sb2NrOw0KPiAgCX0NCj4gIA0KPiArCWlmIChyZXEtPmJhc2UuZHJtX3N1cmZhY2Vf ZmxhZ3MgJg0KPiBkcm1fdm13X3N1cmZhY2VfZmxhZ19jb2hlcmVudCkgew0KPiArCQlzdHJ1Y3Qg dm13X2J1ZmZlcl9vYmplY3QgKmJhY2t1cCA9IHJlcy0+YmFja3VwOw0KPiArDQo+ICsJCXR0bV9i b19yZXNlcnZlKCZiYWNrdXAtPmJhc2UsIGZhbHNlLCBmYWxzZSwgTlVMTCk7DQo+ICsJCWlmICgh cmVzLT5mdW5jLT5kaXJ0eV9hbGxvYykNCj4gKwkJCXJldCA9IC1FSU5WQUw7DQo+ICsJCWlmICgh cmV0KQ0KPiArCQkJcmV0ID0gdm13X2JvX2RpcnR5X2FkZChiYWNrdXApOw0KPiArCQlpZiAoIXJl dCkgew0KPiArCQkJcmVzLT5jb2hlcmVudCA9IHRydWU7DQo+ICsJCQlyZXQgPSByZXMtPmZ1bmMt PmRpcnR5X2FsbG9jKHJlcyk7DQo+ICsJCX0NCj4gKwkJdHRtX2JvX3VucmVzZXJ2ZSgmYmFja3Vw LT5iYXNlKTsNCj4gKwkJaWYgKHJldCkgew0KPiArCQkJdm13X3Jlc291cmNlX3VucmVmZXJlbmNl KCZyZXMpOw0KPiArCQkJZ290byBvdXRfdW5sb2NrOw0KPiArCQl9DQo+ICsNCj4gKwl9DQo+ICsN Cj4gIAl0bXAgPSB2bXdfcmVzb3VyY2VfcmVmZXJlbmNlKHJlcyk7DQo+ICAJcmV0ID0gdHRtX3By aW1lX29iamVjdF9pbml0KHRmaWxlLCByZXMtPmJhY2t1cF9zaXplLCAmdXNlcl9zcmYtDQo+ID5w cmltZSwNCj4gIAkJCQkgICAgcmVxLT5iYXNlLmRybV9zdXJmYWNlX2ZsYWdzICYNCj4gQEAgLTE3 NjQsMyArMTgxOCwzMzMgQEAgdm13X2diX3N1cmZhY2VfcmVmZXJlbmNlX2ludGVybmFsKHN0cnVj dA0KPiBkcm1fZGV2aWNlICpkZXYsDQo+ICANCj4gIAlyZXR1cm4gcmV0Ow0KPiAgfQ0KPiArDQo+ ICsvKioNCj4gKyAqIHZtd19zdWJyZXNfZGlydHlfYWRkIC0gQWRkIGEgZGlydHkgcmVnaW9uIHRv IGEgc3VicmVzb3VyY2UNCj4gKyAqIEBkaXJ0eTogVGhlIHN1cmZhY2VzJ3MgZGlydHkgdHJhY2tl ci4NCj4gKyAqIEBsb2Nfc3RhcnQ6IFRoZSBsb2NhdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBz dGFydCBvZiB0aGUNCj4gcmVnaW9uLg0KPiArICogQGxvY19lbmQ6IFRoZSBsb2NhdGlvbiBjb3Jy ZXNwb25kaW5nIHRvIHRoZSBlbmQgb2YgdGhlIHJlZ2lvbi4NCj4gKyAqDQo+ICsgKiBBcyB3ZSBh cmUgYXNzdW1pbmcgdGhhdCBAbG9jX3N0YXJ0IGFuZCBAbG9jX2VuZCByZXByZXNlbnQgYQ0KPiBz ZXF1ZW50aWFsDQo+ICsgKiByYW5nZSBvZiBiYWNraW5nIHN0b3JlIG1lbW9yeSwgaWYgdGhlIHJl Z2lvbiBzcGFucyBtdWx0aXBsZSBsaW5lcw0KPiB0aGVuDQo+ICsgKiByZWdhcmRsZXNzIG9mIHRo ZSB4IGNvb3JkaW5hdGUsIHRoZSBmdWxsIGxpbmVzIGFyZSBkaXJ0aWVkLg0KPiArICogQ29ycmVz cG9uZGluZ2x5IGlmIHRoZSByZWdpb24gc3BhbnMgbXVsdGlwbGUgeiBzbGljZXMsIHRoZW4gZnVs bA0KPiByYXRoZXINCj4gKyAqIHRoYW4gcGFydGlhbCB6IHNsaWNlcyBhcmUgZGlydGllZC4NCj4g KyAqLw0KPiArc3RhdGljIHZvaWQgdm13X3N1YnJlc19kaXJ0eV9hZGQoc3RydWN0IHZtd19zdXJm YWNlX2RpcnR5ICpkaXJ0eSwNCj4gKwkJCQkgY29uc3Qgc3RydWN0IHN2Z2EzZHN1cmZhY2VfbG9j DQo+ICpsb2Nfc3RhcnQsDQo+ICsJCQkJIGNvbnN0IHN0cnVjdCBzdmdhM2RzdXJmYWNlX2xvYw0K PiAqbG9jX2VuZCkNCj4gK3sNCj4gKwljb25zdCBzdHJ1Y3Qgc3ZnYTNkc3VyZmFjZV9jYWNoZSAq Y2FjaGUgPSAmZGlydHktPmNhY2hlOw0KPiArCVNWR0EzZEJveCAqYm94ID0gJmRpcnR5LT5ib3hl c1tsb2Nfc3RhcnQtPnN1Yl9yZXNvdXJjZV07DQo+ICsJdTMyIG1pcCA9IGxvY19zdGFydC0+c3Vi X3Jlc291cmNlICUgY2FjaGUtPm51bV9taXBfbGV2ZWxzOw0KPiArCWNvbnN0IHN0cnVjdCBkcm1f dm13X3NpemUgKnNpemUgPSAmY2FjaGUtPm1pcFttaXBdLnNpemU7DQo+ICsJdTMyIGJveF9jMiA9 IGJveC0+eiArIGJveC0+ZDsNCj4gKw0KPiArCWlmIChXQVJOX09OKGxvY19zdGFydC0+c3ViX3Jl c291cmNlID49IGRpcnR5LT5udW1fc3VicmVzKSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJaWYg KGJveC0+ZCA9PSAwIHx8IGJveC0+eiA+IGxvY19zdGFydC0+eikNCj4gKwkJYm94LT56ID0gbG9j X3N0YXJ0LT56Ow0KPiArCWlmIChib3hfYzIgPCBsb2NfZW5kLT56KQ0KPiArCQlib3gtPmQgPSBs b2NfZW5kLT56IC0gYm94LT56Ow0KPiArDQo+ICsJaWYgKGxvY19zdGFydC0+eiArIDEgPT0gbG9j X2VuZC0+eikgew0KPiArCQlib3hfYzIgPSBib3gtPnkgKyBib3gtPmg7DQo+ICsJCWlmIChib3gt PmggPT0gMCB8fCBib3gtPnkgPiBsb2Nfc3RhcnQtPnkpDQo+ICsJCQlib3gtPnkgPSBsb2Nfc3Rh cnQtPnk7DQo+ICsJCWlmIChib3hfYzIgPCBsb2NfZW5kLT55KQ0KPiArCQkJYm94LT5oID0gbG9j X2VuZC0+eSAtIGJveC0+eTsNCj4gKw0KPiArCQlpZiAobG9jX3N0YXJ0LT55ICsgMSA9PSBsb2Nf ZW5kLT55KSB7DQo+ICsJCQlib3hfYzIgPSBib3gtPnggKyBib3gtPnc7DQo+ICsJCQlpZiAoYm94 LT53ID09IDAgfHwgYm94LT54ID4gbG9jX3N0YXJ0LT54KQ0KPiArCQkJCWJveC0+eCA9IGxvY19z dGFydC0+eDsNCj4gKwkJCWlmIChib3hfYzIgPCBsb2NfZW5kLT54KQ0KPiArCQkJCWJveC0+dyA9 IGxvY19lbmQtPnggLSBib3gtPng7DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQlib3gtPnggPSAwOw0K PiArCQkJYm94LT53ID0gc2l6ZS0+d2lkdGg7DQo+ICsJCX0NCj4gKwl9IGVsc2Ugew0KPiArCQli b3gtPnkgPSAwOw0KPiArCQlib3gtPmggPSBzaXplLT5oZWlnaHQ7DQo+ICsJCWJveC0+eCA9IDA7 DQo+ICsJCWJveC0+dyA9IHNpemUtPndpZHRoOw0KPiArCX0NCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgKiB2bXdfc3VicmVzX2RpcnR5X2Z1bGwgLSBNYXJrIGEgZnVsbCBzdWJyZXNvdXJjZSBhcyBk aXJ0eQ0KPiArICogQGRpcnR5OiBUaGUgc3VyZmFjZSdzIGRpcnR5IHRyYWNrZXIuDQo+ICsgKiBA c3VicmVzOiBUaGUgc3VicmVzb3VyY2UNCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgdm13X3N1YnJl c19kaXJ0eV9mdWxsKHN0cnVjdCB2bXdfc3VyZmFjZV9kaXJ0eSAqZGlydHksDQo+IHUzMiBzdWJy ZXMpDQo+ICt7DQo+ICsJY29uc3Qgc3RydWN0IHN2Z2EzZHN1cmZhY2VfY2FjaGUgKmNhY2hlID0g JmRpcnR5LT5jYWNoZTsNCj4gKwl1MzIgbWlwID0gc3VicmVzICUgY2FjaGUtPm51bV9taXBfbGV2 ZWxzOw0KPiArCWNvbnN0IHN0cnVjdCBkcm1fdm13X3NpemUgKnNpemUgPSAmY2FjaGUtPm1pcFtt aXBdLnNpemU7DQo+ICsJU1ZHQTNkQm94ICpib3ggPSAmZGlydHktPmJveGVzW3N1YnJlc107DQo+ ICsNCj4gKwlib3gtPnggPSAwOw0KPiArCWJveC0+eSA9IDA7DQo+ICsJYm94LT56ID0gMDsNCj4g Kwlib3gtPncgPSBzaXplLT53aWR0aDsNCj4gKwlib3gtPmggPSBzaXplLT5oZWlnaHQ7DQo+ICsJ Ym94LT5kID0gc2l6ZS0+ZGVwdGg7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiB2bXdfc3VyZmFj ZV90ZXhfZGlydHlfYWRkX3JhbmdlIC0gVGhlIGRpcnR5X2FkZF9yYW5nZSBjYWxsYmFjaw0KPiBm b3IgdGV4dHVyZQ0KPiArICogc3VyZmFjZXMuDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIHZtd19z dXJmYWNlX3RleF9kaXJ0eV9yYW5nZV9hZGQoc3RydWN0IHZtd19yZXNvdXJjZQ0KPiAqcmVzLA0K PiArCQkJCQkgICAgc2l6ZV90IHN0YXJ0LCBzaXplX3QgZW5kKQ0KPiArew0KPiArCXN0cnVjdCB2 bXdfc3VyZmFjZV9kaXJ0eSAqZGlydHkgPQ0KPiArCQkoc3RydWN0IHZtd19zdXJmYWNlX2RpcnR5 ICopIHJlcy0+ZGlydHk7DQo+ICsJc2l6ZV90IGJhY2t1cF9lbmQgPSByZXMtPmJhY2t1cF9vZmZz ZXQgKyByZXMtPmJhY2t1cF9zaXplOw0KPiArCXN0cnVjdCBzdmdhM2RzdXJmYWNlX2xvYyBsb2Mx LCBsb2MyOw0KPiArCWNvbnN0IHN0cnVjdCBzdmdhM2RzdXJmYWNlX2NhY2hlICpjYWNoZTsNCj4g Kw0KPiArCXN0YXJ0ID0gbWF4KHN0YXJ0LCByZXMtPmJhY2t1cF9vZmZzZXQpIC0gcmVzLT5iYWNr dXBfb2Zmc2V0Ow0KPiArCWVuZCA9IG1pbihlbmQsIGJhY2t1cF9lbmQpIC0gcmVzLT5iYWNrdXBf b2Zmc2V0Ow0KPiArCWNhY2hlID0gJmRpcnR5LT5jYWNoZTsNCj4gKwlzdmdhM2RzdXJmYWNlX2dl dF9sb2MoY2FjaGUsICZsb2MxLCBzdGFydCk7DQo+ICsJc3ZnYTNkc3VyZmFjZV9nZXRfbG9jKGNh Y2hlLCAmbG9jMiwgZW5kIC0gMSk7DQo+ICsJc3ZnYTNkc3VyZmFjZV9pbmNfbG9jKGNhY2hlLCAm bG9jMik7DQo+ICsNCj4gKwlpZiAobG9jMS5zdWJfcmVzb3VyY2UgKyAxID09IGxvYzIuc3ViX3Jl c291cmNlKSB7DQo+ICsJCS8qIERpcnR5IHJhbmdlIGNvdmVycyBhIHNpbmdsZSBzdWItcmVzb3Vy Y2UgKi8NCj4gKwkJdm13X3N1YnJlc19kaXJ0eV9hZGQoZGlydHksICZsb2MxLCAmbG9jMik7DQo+ ICsJfSBlbHNlIHsNCj4gKwkJLyogRGlydHkgcmFuZ2UgY292ZXJzIG11bHRpcGxlIHN1Yi1yZXNv dXJjZXMgKi8NCj4gKwkJc3RydWN0IHN2Z2EzZHN1cmZhY2VfbG9jIGxvY19taW4sIGxvY19tYXg7 DQo+ICsJCXUzMiBzdWJfcmVzID0gbG9jMS5zdWJfcmVzb3VyY2U7DQo+ICsNCj4gKwkJc3ZnYTNk c3VyZmFjZV9tYXhfbG9jKGNhY2hlLCBsb2MxLnN1Yl9yZXNvdXJjZSwNCj4gJmxvY19tYXgpOw0K PiArCQl2bXdfc3VicmVzX2RpcnR5X2FkZChkaXJ0eSwgJmxvYzEsICZsb2NfbWF4KTsNCj4gKwkJ c3ZnYTNkc3VyZmFjZV9taW5fbG9jKGNhY2hlLCBsb2MyLnN1Yl9yZXNvdXJjZSAtIDEsDQo+ICZs b2NfbWluKTsNCj4gKwkJdm13X3N1YnJlc19kaXJ0eV9hZGQoZGlydHksICZsb2NfbWluLCAmbG9j Mik7DQo+ICsJCWZvciAoc3ViX3JlcyA9IGxvYzEuc3ViX3Jlc291cmNlICsgMTsNCj4gKwkJICAg ICBzdWJfcmVzIDwgbG9jMi5zdWJfcmVzb3VyY2UgLSAxOyArK3N1Yl9yZXMpDQo+ICsJCQl2bXdf c3VicmVzX2RpcnR5X2Z1bGwoZGlydHksIHN1Yl9yZXMpOw0KPiArCX0NCj4gK30NCj4gKw0KPiAr LyoNCj4gKyAqIHZtd19zdXJmYWNlX3RleF9kaXJ0eV9hZGRfcmFuZ2UgLSBUaGUgZGlydHlfYWRk X3JhbmdlIGNhbGxiYWNrDQo+IGZvciBidWZmZXINCj4gKyAqIHN1cmZhY2VzLg0KPiArICovDQo+ ICtzdGF0aWMgdm9pZCB2bXdfc3VyZmFjZV9idWZfZGlydHlfcmFuZ2VfYWRkKHN0cnVjdCB2bXdf cmVzb3VyY2UNCj4gKnJlcywNCj4gKwkJCQkJICAgIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCkN Cj4gK3sNCj4gKwlzdHJ1Y3Qgdm13X3N1cmZhY2VfZGlydHkgKmRpcnR5ID0NCj4gKwkJKHN0cnVj dCB2bXdfc3VyZmFjZV9kaXJ0eSAqKSByZXMtPmRpcnR5Ow0KPiArCWNvbnN0IHN0cnVjdCBzdmdh M2RzdXJmYWNlX2NhY2hlICpjYWNoZSA9ICZkaXJ0eS0+Y2FjaGU7DQo+ICsJc2l6ZV90IGJhY2t1 cF9lbmQgPSByZXMtPmJhY2t1cF9vZmZzZXQgKyBjYWNoZS0NCj4gPm1pcF9jaGFpbl9ieXRlczsN Cj4gKwlTVkdBM2RCb3ggKmJveCA9ICZkaXJ0eS0+Ym94ZXNbMF07DQo+ICsJdTMyIGJveF9jMjsN Cj4gKw0KPiArCWJveC0+aCA9IGJveC0+ZCA9IDE7DQo+ICsJc3RhcnQgPSBtYXgoc3RhcnQsIHJl cy0+YmFja3VwX29mZnNldCkgLSByZXMtPmJhY2t1cF9vZmZzZXQ7DQo+ICsJZW5kID0gbWluKGVu ZCwgYmFja3VwX2VuZCkgLSByZXMtPmJhY2t1cF9vZmZzZXQ7DQo+ICsJYm94X2MyID0gYm94LT54 ICsgYm94LT53Ow0KPiArCWlmIChib3gtPncgPT0gMCB8fCBib3gtPnggPiBzdGFydCkNCj4gKwkJ Ym94LT54ID0gc3RhcnQ7DQo+ICsJaWYgKGJveF9jMiA8IGVuZCkNCj4gKwkJYm94LT53ID0gZW5k IC0gYm94LT54Ow0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogdm13X3N1cmZhY2VfdGV4X2RpcnR5 X2FkZF9yYW5nZSAtIFRoZSBkaXJ0eV9hZGRfcmFuZ2UgY2FsbGJhY2sNCj4gZm9yIHN1cmZhY2Vz DQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIHZtd19zdXJmYWNlX2RpcnR5X3JhbmdlX2FkZChzdHJ1 Y3Qgdm13X3Jlc291cmNlICpyZXMsDQo+IHNpemVfdCBzdGFydCwNCj4gKwkJCQkJc2l6ZV90IGVu ZCkNCj4gK3sNCj4gKwlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnNyZiA9IHZtd19yZXNfdG9fc3JmKHJl cyk7DQo+ICsNCj4gKwlpZiAoV0FSTl9PTihlbmQgPD0gcmVzLT5iYWNrdXBfb2Zmc2V0IHx8DQo+ ICsJCSAgICBzdGFydCA+PSByZXMtPmJhY2t1cF9vZmZzZXQgKyByZXMtPmJhY2t1cF9zaXplKSkN Cj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJaWYgKHNyZi0+Zm9ybWF0ID09IFNWR0EzRF9CVUZGRVIp DQo+ICsJCXZtd19zdXJmYWNlX2J1Zl9kaXJ0eV9yYW5nZV9hZGQocmVzLCBzdGFydCwgZW5kKTsN Cj4gKwllbHNlDQo+ICsJCXZtd19zdXJmYWNlX3RleF9kaXJ0eV9yYW5nZV9hZGQocmVzLCBzdGFy dCwgZW5kKTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIHZtd19zdXJmYWNlX2RpcnR5X3N5bmMg LSBUaGUgc3VyZmFjZSdzIGRpcnR5X3N5bmMgY2FsbGJhY2suDQo+ICsgKi8NCj4gK3N0YXRpYyBp bnQgdm13X3N1cmZhY2VfZGlydHlfc3luYyhzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpDQo+ICt7 DQo+ICsJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHJlcy0+ZGV2X3ByaXY7DQo+ICsJ Ym9vbCBoYXNfZHggPSAwOw0KPiArCXUzMiBpLCBudW1fZGlydHk7DQo+ICsJc3RydWN0IHZtd19z dXJmYWNlX2RpcnR5ICpkaXJ0eSA9DQo+ICsJCShzdHJ1Y3Qgdm13X3N1cmZhY2VfZGlydHkgKikg cmVzLT5kaXJ0eTsNCj4gKwlzaXplX3QgYWxsb2Nfc2l6ZTsNCj4gKwljb25zdCBzdHJ1Y3Qgc3Zn YTNkc3VyZmFjZV9jYWNoZSAqY2FjaGUgPSAmZGlydHktPmNhY2hlOw0KPiArCXN0cnVjdCB7DQo+ ICsJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7DQo+ICsJCVNWR0EzZENtZERYVXBkYXRlU3ViUmVz b3VyY2UgYm9keTsNCj4gKwl9ICpjbWQxOw0KPiArCXN0cnVjdCB7DQo+ICsJCVNWR0EzZENtZEhl YWRlciBoZWFkZXI7DQo+ICsJCVNWR0EzZENtZFVwZGF0ZUdCSW1hZ2UgYm9keTsNCj4gKwl9ICpj bWQyOw0KPiArCXZvaWQgKmNtZDsNCj4gKw0KPiArCW51bV9kaXJ0eSA9IDA7DQo+ICsJZm9yIChp ID0gMDsgaSA8IGRpcnR5LT5udW1fc3VicmVzOyArK2kpIHsNCj4gKwkJY29uc3QgU1ZHQTNkQm94 ICpib3ggPSAmZGlydHktPmJveGVzW2ldOw0KPiArDQo+ICsJCWlmIChib3gtPmQpDQo+ICsJCQlu dW1fZGlydHkrKzsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoIW51bV9kaXJ0eSkNCj4gKwkJZ290byBv dXQ7DQo+ICsNCj4gKwlhbGxvY19zaXplID0gbnVtX2RpcnR5ICogKChoYXNfZHgpID8gc2l6ZW9m KCpjbWQxKSA6DQo+IHNpemVvZigqY21kMikpOw0KPiArCWNtZCA9IFZNV19GSUZPX1JFU0VSVkUo ZGV2X3ByaXYsIGFsbG9jX3NpemUpOw0KPiArCWlmICghY21kKQ0KPiArCQlyZXR1cm4gLUVOT01F TTsNCj4gKw0KPiArCWNtZDEgPSBjbWQ7DQo+ICsJY21kMiA9IGNtZDsNCj4gKw0KPiArCWZvciAo aSA9IDA7IGkgPCBkaXJ0eS0+bnVtX3N1YnJlczsgKytpKSB7DQo+ICsJCWNvbnN0IFNWR0EzZEJv eCAqYm94ID0gJmRpcnR5LT5ib3hlc1tpXTsNCj4gKw0KPiArCQlpZiAoIWJveC0+ZCkNCj4gKwkJ CWNvbnRpbnVlOw0KPiArDQo+ICsJCS8qDQo+ICsJCSAqIERYX1VQREFURV9TVUJSRVNPVVJDRSBp cyBhd2FyZSBvZiBhcnJheSBzdXJmYWNlcy4NCj4gKwkJICogVVBEQVRFX0dCX0lNQUdFIGlzIG5v dC4NCj4gKwkJICovDQo+ICsJCWlmIChoYXNfZHgpIHsNCj4gKwkJCWNtZDEtPmhlYWRlci5pZCA9 DQo+IFNWR0FfM0RfQ01EX0RYX1VQREFURV9TVUJSRVNPVVJDRTsNCj4gKwkJCWNtZDEtPmhlYWRl ci5zaXplID0gc2l6ZW9mKGNtZDEtPmJvZHkpOw0KPiArCQkJY21kMS0+Ym9keS5zaWQgPSByZXMt PmlkOw0KPiArCQkJY21kMS0+Ym9keS5zdWJSZXNvdXJjZSA9IGk7DQo+ICsJCQljbWQxLT5ib2R5 LmJveCA9ICpib3g7DQo+ICsJCQljbWQxKys7DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQljbWQyLT5o ZWFkZXIuaWQgPSBTVkdBXzNEX0NNRF9VUERBVEVfR0JfSU1BR0U7DQo+ICsJCQljbWQyLT5oZWFk ZXIuc2l6ZSA9IHNpemVvZihjbWQyLT5ib2R5KTsNCj4gKwkJCWNtZDItPmJvZHkuaW1hZ2Uuc2lk ID0gcmVzLT5pZDsNCj4gKwkJCWNtZDItPmJvZHkuaW1hZ2UuZmFjZSA9IGkgLyBjYWNoZS0NCj4g Pm51bV9taXBfbGV2ZWxzOw0KPiArCQkJY21kMi0+Ym9keS5pbWFnZS5taXBtYXAgPSBpIC0NCj4g KwkJCQkoY2FjaGUtPm51bV9taXBfbGV2ZWxzICogY21kMi0NCj4gPmJvZHkuaW1hZ2UuZmFjZSk7 DQo+ICsJCQljbWQyLT5ib2R5LmJveCA9ICpib3g7DQo+ICsJCQljbWQyKys7DQo+ICsJCX0NCj4g Kw0KPiArCX0NCj4gKwl2bXdfZmlmb19jb21taXQoZGV2X3ByaXYsIGFsbG9jX3NpemUpOw0KPiAr IG91dDoNCj4gKwltZW1zZXQoJmRpcnR5LT5ib3hlc1swXSwgMCwgc2l6ZW9mKGRpcnR5LT5ib3hl c1swXSkgKg0KPiArCSAgICAgICBkaXJ0eS0+bnVtX3N1YnJlcyk7DQo+ICsNCj4gKwlyZXR1cm4g MDsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIHZtd19zdXJmYWNlX2RpcnR5X2FsbG9jIC0gVGhl IHN1cmZhY2UncyBkaXJ0eV9hbGxvYyBjYWxsYmFjay4NCj4gKyAqLw0KPiArc3RhdGljIGludCB2 bXdfc3VyZmFjZV9kaXJ0eV9hbGxvYyhzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpDQo+ICt7DQo+ ICsJc3RydWN0IHZtd19zdXJmYWNlICpzcmYgPSB2bXdfcmVzX3RvX3NyZihyZXMpOw0KPiArCXN0 cnVjdCB2bXdfc3VyZmFjZV9kaXJ0eSAqZGlydHk7DQo+ICsJdTMyIG51bV9sYXllcnMgPSAxOw0K PiArCXUzMiBudW1fbWlwOw0KPiArCXUzMiBudW1fc3VicmVzOw0KPiArCXUzMiBudW1fc2FtcGxl czsNCj4gKwlzaXplX3QgZGlydHlfc2l6ZSwgYWNjX3NpemU7DQo+ICsJc3RhdGljIHN0cnVjdCB0 dG1fb3BlcmF0aW9uX2N0eCBjdHggPSB7DQo+ICsJCS5pbnRlcnJ1cHRpYmxlID0gZmFsc2UsDQo+ ICsJCS5ub193YWl0X2dwdSA9IGZhbHNlDQo+ICsJfTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJ aWYgKHNyZi0+YXJyYXlfc2l6ZSkNCj4gKwkJbnVtX2xheWVycyA9IHNyZi0+YXJyYXlfc2l6ZTsN Cj4gKwllbHNlIGlmIChzcmYtPmZsYWdzICYgU1ZHQTNEX1NVUkZBQ0VfQ1VCRU1BUCkNCj4gKwkJ bnVtX2xheWVycyAqPSBTVkdBM0RfTUFYX1NVUkZBQ0VfRkFDRVM7DQo+ICsNCj4gKwludW1fbWlw ID0gc3JmLT5taXBfbGV2ZWxzWzBdOw0KPiArCWlmICghbnVtX21pcCkNCj4gKwkJbnVtX21pcCA9 IDE7DQo+ICsNCj4gKwludW1fc3VicmVzID0gbnVtX2xheWVycyAqIG51bV9taXA7DQo+ICsJZGly dHlfc2l6ZSA9IHNpemVvZigqZGlydHkpICsgbnVtX3N1YnJlcyAqIHNpemVvZihkaXJ0eS0NCj4g PmJveGVzWzBdKTsNCj4gKwlhY2Nfc2l6ZSA9IHR0bV9yb3VuZF9wb3QoZGlydHlfc2l6ZSk7DQo+ ICsJcmV0ID0gdHRtX21lbV9nbG9iYWxfYWxsb2Modm13X21lbV9nbG9iKHJlcy0+ZGV2X3ByaXYp LA0KPiArCQkJCSAgIGFjY19zaXplLCAmY3R4KTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCVZNV19E RUJVR19VU0VSKCJPdXQgb2YgZ3JhcGhpY3MgbWVtb3J5IGZvciBzdXJmYWNlICINCj4gKwkJCSAg ICAgICAiZGlydHkgdHJhY2tlci5cbiIpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0K PiArCWRpcnR5ID0ga3Z6YWxsb2MoZGlydHlfc2l6ZSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFk aXJ0eSkgew0KPiArCQlyZXQgPSAtRU5PTUVNOw0KPiArCQlnb3RvIG91dF9ub19kaXJ0eTsNCj4g Kwl9DQo+ICsNCj4gKwludW1fc2FtcGxlcyA9IG1heF90KHUzMiwgMSwgc3JmLT5tdWx0aXNhbXBs ZV9jb3VudCk7DQo+ICsJc3ZnYTNkc3VyZmFjZV9zZXR1cF9jYWNoZSgmc3JmLT5iYXNlX3NpemUs IHNyZi0+Zm9ybWF0LA0KPiBudW1fbWlwLA0KPiArCQkJCSAgbnVtX2xheWVycywgbnVtX3NhbXBs ZXMsICZkaXJ0eS0NCj4gPmNhY2hlKTsNCj4gKwlkaXJ0eS0+bnVtX3N1YnJlcyA9IG51bV9zdWJy ZXM7DQo+ICsJZGlydHktPnNpemUgPSBhY2Nfc2l6ZTsNCj4gKwlyZXMtPmRpcnR5ID0gKHN0cnVj dCB2bXdfcmVzb3VyY2VfZGlydHkgKikgZGlydHk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gKw0K PiArb3V0X25vX2RpcnR5Og0KPiArCXR0bV9tZW1fZ2xvYmFsX2ZyZWUodm13X21lbV9nbG9iKHJl cy0+ZGV2X3ByaXYpLCBhY2Nfc2l6ZSk7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiAr LyoNCj4gKyAqIHZtd19zdXJmYWNlX2RpcnR5X2ZyZWUgLSBUaGUgc3VyZmFjZSdzIGRpcnR5X2Zy ZWUgY2FsbGJhY2sNCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgdm13X3N1cmZhY2VfZGlydHlfZnJl ZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpDQo+ICt7DQo+ICsJc3RydWN0IHZtd19zdXJmYWNl X2RpcnR5ICpkaXJ0eSA9DQo+ICsJCShzdHJ1Y3Qgdm13X3N1cmZhY2VfZGlydHkgKikgcmVzLT5k aXJ0eTsNCj4gKwlzaXplX3QgYWNjX3NpemUgPSBkaXJ0eS0+c2l6ZTsNCj4gKw0KPiArCWt2ZnJl ZShkaXJ0eSk7DQo+ICsJdHRtX21lbV9nbG9iYWxfZnJlZSh2bXdfbWVtX2dsb2IocmVzLT5kZXZf cHJpdiksIGFjY19zaXplKTsNCj4gKwlyZXMtPmRpcnR5ID0gTlVMTDsNCj4gK30NCj4gKw0KPiAr LyoNCj4gKyAqIHZtd19zdXJmYWNlX2NsZWFuIC0gVGhlIHN1cmZhY2UncyBjbGVhbiBjYWxsYmFj aw0KPiArICovDQo+ICtzdGF0aWMgaW50IHZtd19zdXJmYWNlX2NsZWFuKHN0cnVjdCB2bXdfcmVz b3VyY2UgKnJlcykNCj4gK3sNCj4gKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gcmVz LT5kZXZfcHJpdjsNCj4gKwlzaXplX3QgYWxsb2Nfc2l6ZTsNCj4gKwlzdHJ1Y3Qgew0KPiArCQlT VkdBM2RDbWRIZWFkZXIgaGVhZGVyOw0KPiArCQlTVkdBM2RDbWRSZWFkYmFja0dCU3VyZmFjZSBi b2R5Ow0KPiArCX0gKmNtZDsNCj4gKw0KPiArCWFsbG9jX3NpemUgPSBzaXplb2YoKmNtZCk7DQo+ ICsJY21kID0gVk1XX0ZJRk9fUkVTRVJWRShkZXZfcHJpdiwgYWxsb2Nfc2l6ZSk7DQo+ICsJaWYg KCFjbWQpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJY21kLT5oZWFkZXIuaWQgPSBT VkdBXzNEX0NNRF9SRUFEQkFDS19HQl9TVVJGQUNFOw0KPiArCWNtZC0+aGVhZGVyLnNpemUgPSBz aXplb2YoY21kLT5ib2R5KTsNCj4gKwljbWQtPmJvZHkuc2lkID0gcmVzLT5pZDsNCj4gKwl2bXdf Zmlmb19jb21taXQoZGV2X3ByaXYsIGFsbG9jX3NpemUpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ ICt9DQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaA0KPiBiL2lu Y2x1ZGUvdWFwaS9kcm0vdm13Z2Z4X2RybS5oDQo+IGluZGV4IDM5OWY1ODMxN2NmZi4uMDJjYWIz M2YyZjI1IDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaA0KPiAr KysgYi9pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaA0KPiBAQCAtODkxLDExICs4OTEsMTMg QEAgc3RydWN0IGRybV92bXdfc2hhZGVyX2FyZyB7DQo+ICAgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3VyZmFjZS4NCj4gICAqIEBkcm1fdm13X3N1cmZhY2VfZmxhZ19j cmVhdGVfYnVmZmVyOiBDcmVhdGUgYSBiYWNrdXAgYnVmZmVyIGlmDQo+IG5vbmUgaXMNCj4gICAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbi4NCj4gKyAqIEBkcm1f dm13X3N1cmZhY2VfZmxhZ19jb2hlcmVudDogICAgICBCYWNrIHN1cmZhY2Ugd2l0aCBjb2hlcmVu dA0KPiBtZW1vcnkuDQo+ICAgKi8NCj4gIGVudW0gZHJtX3Ztd19zdXJmYWNlX2ZsYWdzIHsNCj4g IAlkcm1fdm13X3N1cmZhY2VfZmxhZ19zaGFyZWFibGUgPSAoMSA8PCAwKSwNCj4gIAlkcm1fdm13 X3N1cmZhY2VfZmxhZ19zY2Fub3V0ID0gKDEgPDwgMSksDQo+IC0JZHJtX3Ztd19zdXJmYWNlX2Zs YWdfY3JlYXRlX2J1ZmZlciA9ICgxIDw8IDIpDQo+ICsJZHJtX3Ztd19zdXJmYWNlX2ZsYWdfY3Jl YXRlX2J1ZmZlciA9ICgxIDw8IDIpLA0KPiArCWRybV92bXdfc3VyZmFjZV9mbGFnX2NvaGVyZW50 ID0gKDEgPDwgMyksDQo+ICB9Ow0KPiAgDQo+ICAvKioNCj4gLS0gDQo+IDIuMjAuMQ0KPiANCg==