Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp568476yba; Fri, 12 Apr 2019 09:06:46 -0700 (PDT) X-Google-Smtp-Source: APXvYqwmhSyQRb1TbAtJKzImWiI4QIQSRvOt7W0OzpKF4yjKJeinM1qqoLlJFKZN46C0Pg7SEcrJ X-Received: by 2002:a05:6a00:dc:: with SMTP id e28mr24322207pfj.186.1555085206569; Fri, 12 Apr 2019 09:06:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555085206; cv=none; d=google.com; s=arc-20160816; b=s3bmcqE58yORLqFkYQId1N5EOFz/aGNtvjH9mI0G+/jhjwA0Pr1BP01LSDmnyrCOmP SKyVOl89C1l9BmhNOdKD6lAZHNhhFLKcBGFsjMPQdG23jlii6xyXzC1q1Elvy44Gv2ns d5K7DlE5GGRIgx2XnrmEVu715f+bX7Hp5oiXG4KJ15oPKcTUGNOG2GBYWjHs4uszVlhs eMdDgNixo+vH0hA/WYR2h3F9qrXpIfiU2ndQ1V6AMm2YrHx833i05SEjmZpXvI/CpfUC ZFmGUd9n5Ovf7fGr6rXS81FnrSQbBHB6U6/5LS/zIvCc6Q/97Ec3kQVbiwC/8I/a73YB u2Zw== 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-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=QtvHsxUGYU1YRRpTJ4MGn8idQ4VAAjfaMvD+/NdnoGo=; b=ZsNhQ5WGIGPsXzPQAXdxpLHcj3EkLACFGDPuspR0EgtFr/uw6vazQ9m0Chculae2TE e3YQKIRc7wCtyjw1bBsQRhQJlTZ3ZVe4a4ldmmtrbENCZuvgqyiRkvrhp2zkcBH5FPBE HRHK15LlgUkvZ53tDhc2BH8K7F2lAq1209zFaxkjMeu3s00UgT3r375IKNP953hi6HcE l48AyYomXfLZ36PMoPt1oozlNknZ5udZT2wiUo1v4WDXx/9cca7U3O+feN42IO9ksV8i YCaX9Y7PjabA7kmcmPkY5Ou9BPU0vaIx96KxmZcO+zNBSISFC/rkPo+Db+Ro6UdonSf4 zkXQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@vmware.com header.s=selector1 header.b=D5UXOTum; 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=QUARANTINE 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 e1si37203094pgf.254.2019.04.12.09.06.29; Fri, 12 Apr 2019 09:06:46 -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=D5UXOTum; 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=QUARANTINE dis=NONE) header.from=vmware.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727295AbfDLQFb (ORCPT + 99 others); Fri, 12 Apr 2019 12:05:31 -0400 Received: from mail-eopbgr800078.outbound.protection.outlook.com ([40.107.80.78]:12000 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726992AbfDLQF3 (ORCPT ); Fri, 12 Apr 2019 12:05:29 -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=QtvHsxUGYU1YRRpTJ4MGn8idQ4VAAjfaMvD+/NdnoGo=; b=D5UXOTumSrz4Ks77zwaJhorXrt767SmX8iDrwgRsyMDS49hl34LSL6S4wlS6nk6UGdHTzWoYC8i4LzgCW+VAy3EZJrDs/Tp4zTVGAd4YJUj8IfEn3F+RN5azdqXCzRwncGkPsU2n7SmmWRnt/PaQovpgUpkRZUyBdD6zecmN0mU= Received: from MN2PR05MB6141.namprd05.prod.outlook.com (20.178.241.217) by MN2PR05MB6030.namprd05.prod.outlook.com (20.178.241.159) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1813.9; Fri, 12 Apr 2019 16:04:27 +0000 Received: from MN2PR05MB6141.namprd05.prod.outlook.com ([fe80::91e:292d:e304:78ad]) by MN2PR05MB6141.namprd05.prod.outlook.com ([fe80::91e:292d:e304:78ad%7]) with mapi id 15.20.1792.009; Fri, 12 Apr 2019 16:04:27 +0000 From: Thomas Hellstrom To: "dri-devel@lists.freedesktop.org" , Linux-graphics-maintainer , "linux-kernel@vger.kernel.org" CC: Thomas Hellstrom Subject: [PATCH 6/9] drm/vmwgfx: Implement an infrastructure for write-coherent resources Thread-Topic: [PATCH 6/9] drm/vmwgfx: Implement an infrastructure for write-coherent resources Thread-Index: AQHU8Uln2eSj/HCrNk+s6eJ8tmoV4A== Date: Fri, 12 Apr 2019 16:04:27 +0000 Message-ID: <20190412160338.64994-7-thellstrom@vmware.com> References: <20190412160338.64994-1-thellstrom@vmware.com> In-Reply-To: <20190412160338.64994-1-thellstrom@vmware.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VE1PR03CA0023.eurprd03.prod.outlook.com (2603:10a6:802:a0::35) To MN2PR05MB6141.namprd05.prod.outlook.com (2603:10b6:208:c7::25) authentication-results: spf=none (sender IP is ) smtp.mailfrom=thellstrom@vmware.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.20.1 x-originating-ip: [155.4.205.35] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 306fbce8-5815-4e23-b213-08d6bf6089a5 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600139)(711020)(4605104)(2017052603328)(7193020);SRVR:MN2PR05MB6030; x-ms-traffictypediagnostic: MN2PR05MB6030: x-ld-processed: b39138ca-3cee-4b4a-a4d6-cd83d9dd62f0,ExtAddr x-microsoft-antispam-prvs: x-forefront-prvs: 0005B05917 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(136003)(366004)(346002)(376002)(39860400002)(396003)(199004)(189003)(110136005)(25786009)(476003)(2616005)(71190400001)(6512007)(53946003)(2906002)(186003)(486006)(316002)(68736007)(1076003)(6486002)(6436002)(446003)(478600001)(3846002)(71200400001)(6116002)(11346002)(99286004)(256004)(14444005)(5024004)(14454004)(2501003)(8676002)(107886003)(66066001)(7736002)(4326008)(6506007)(81166006)(36756003)(81156014)(386003)(97736004)(102836004)(50226002)(106356001)(30864003)(52116002)(5660300002)(53936002)(8936002)(305945005)(76176011)(26005)(86362001)(105586002)(559001)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:MN2PR05MB6030;H:MN2PR05MB6141.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: dA2s/IthLBp+HaDCk9f0Wews82W4otPWvlS38Ptnb+DacNS5hbxcOFlLjf9dsvdxQikCtpbrg4WcdBY95xlPgQwvtroKSI5Kd+pmO5blR9s7ic/DuwfzgHrgcJV3p86FX/1yXfdlZS1j7w4NE35+EUehtbnpqa96SKI0L6tHiVR86Ijr1ZF7N/QYdDe1r0FvwK2emuJ7cW1UVlzxd7Xk5XHNMo2K6i31FjrPHTzt4COaa3q+rgIk95iX/9OxgNOSFGVWxp7mty1YV21y1Nd7W6NwF7za4aFfcjQ34HOxfe58/59QWhi8DGLY8+a+YUBFJZ24jppUme7ALTFrVQ8/pJYWsGbA/T8O9jGm3DJw74gMcEtz8ODjghZhCiccFmw9lFeEKWOwpnWqQoiz1HFXZ0wJhKgF7iBzucD1yHaTDZQ= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: vmware.com X-MS-Exchange-CrossTenant-Network-Message-Id: 306fbce8-5815-4e23-b213-08d6bf6089a5 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Apr 2019 16:04:27.2331 (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: MN2PR05MB6030 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org VGhpcyBpbmZyYXN0cnVjdHVyZSB3aWxsLCBmb3IgY29oZXJlbnQgcmVzb3VyY2VzLCBtYWtlIHN1 cmUgdGhhdA0KZnJvbSB0aGUgdXNlci1zcGFjZSBwb2ludCBvZiB2aWV3LCBkYXRhIHdyaXR0ZW4g YnkgdGhlIENQVSBpcyBpbW1lZGlhdGVseQ0KYXV0b21hdGljYWxseSBhdmFpbGFibGUgdG8gdGhl IEdQVSBhdCByZXNvdXJjZSB2YWxpZGF0aW9uIHRpbWUuDQoNClNpZ25lZC1vZmYtYnk6IFRob21h cyBIZWxsc3Ryb20gPHRoZWxsc3Ryb21Adm13YXJlLmNvbT4NCi0tLQ0KIGRyaXZlcnMvZ3B1L2Ry bS92bXdnZngvS2NvbmZpZyAgICAgICAgICAgICAgICB8ICAgMSArDQogZHJpdmVycy9ncHUvZHJt L3Ztd2dmeC9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAyICstDQogZHJpdmVycy9ncHUvZHJt L3Ztd2dmeC92bXdnZnhfYm8uYyAgICAgICAgICAgIHwgICA1ICstDQogZHJpdmVycy9ncHUvZHJt L3Ztd2dmeC92bXdnZnhfZHJ2LmMgICAgICAgICAgIHwgICA1ICsNCiBkcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L3Ztd2dmeF9kcnYuaCAgICAgICAgICAgfCAgMjYgKy0NCiBkcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMgICAgICAgfCAgIDEgLQ0KIGRyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuYyAgICB8IDQxMCArKysrKysrKysrKysrKysrKysNCiBk cml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jICAgICAgfCAgNTcgKysrDQog ZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2VfcHJpdi5oIHwgIDExICsNCiBk cml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF92YWxpZGF0aW9uLmMgICAgfCAgNzQgKysrKw0K IGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3ZhbGlkYXRpb24uaCAgICB8ICAxNiArLQ0K IDExIGZpbGVzIGNoYW5nZWQsIDU4OCBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkNCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcGFnZV9kaXJ0 eS5jDQoNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L0tjb25maWcgYi9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L0tjb25maWcNCmluZGV4IDZiMjhhMzI2ZjhiYi4uZDVmZDgxYTUy MWY2IDEwMDY0NA0KLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9LY29uZmlnDQorKysgYi9k cml2ZXJzL2dwdS9kcm0vdm13Z2Z4L0tjb25maWcNCkBAIC04LDYgKzgsNyBAQCBjb25maWcgRFJN X1ZNV0dGWA0KIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVA0KIAlzZWxlY3QgRFJNX1RUTQ0KIAlz ZWxlY3QgRkINCisJc2VsZWN0IEFTX0RJUlRZX0hFTFBFUlMNCiAJIyBPbmx5IG5lZWRlZCBmb3Ig dGhlIHRyYW5zaXRpb25hbCB1c2Ugb2YgZHJtX2NydGNfaW5pdCAtIGNhbiBiZSByZW1vdmVkDQog CSMgYWdhaW4gb25jZSB2bXdnZnggc2V0cyB1cCB0aGUgcHJpbWFyeSBwbGFuZSBpdHNlbGYuDQog CXNlbGVjdCBEUk1fS01TX0hFTFBFUg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdn ZngvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlDQppbmRleCA4ODQx YmQzMGUxZTUuLmM4NzdhMjFhMDczOSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdn ZngvTWFrZWZpbGUNCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUNCkBAIC04 LDcgKzgsNyBAQCB2bXdnZngteSA6PSB2bXdnZnhfZXhlY2J1Zi5vIHZtd2dmeF9nbXIubyB2bXdn Znhfa21zLm8gdm13Z2Z4X2Rydi5vIFwNCiAJICAgIHZtd2dmeF9jbWRidWZfcmVzLm8gdm13Z2Z4 X2NtZGJ1Zi5vIHZtd2dmeF9zdGR1Lm8gXA0KIAkgICAgdm13Z2Z4X2NvdGFibGUubyB2bXdnZnhf c28ubyB2bXdnZnhfYmluZGluZy5vIHZtd2dmeF9tc2cubyBcDQogCSAgICB2bXdnZnhfc2ltcGxl X3Jlc291cmNlLm8gdm13Z2Z4X3ZhLm8gdm13Z2Z4X2JsaXQubyBcDQotCSAgICB2bXdnZnhfdmFs aWRhdGlvbi5vIFwNCisJICAgIHZtd2dmeF92YWxpZGF0aW9uLm8gdm13Z2Z4X3BhZ2VfZGlydHku byBcDQogCSAgICB0dG1fb2JqZWN0Lm8gdHRtX2xvY2subw0KIA0KIG9iai0kKENPTkZJR19EUk1f Vk1XR0ZYKSA6PSB2bXdnZngubw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9iby5jDQppbmRleCBj MDgyOWQ1MGVlY2MuLjkwY2E4NjY2NDBmZSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2JvLmMNCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Jv LmMNCkBAIC00NjMsNiArNDYzLDcgQEAgdm9pZCB2bXdfYm9fYm9fZnJlZShzdHJ1Y3QgdHRtX2J1 ZmZlcl9vYmplY3QgKmJvKQ0KIHsNCiAJc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2bXdfYm8g PSB2bXdfYnVmZmVyX29iamVjdChibyk7DQogDQorCVdBUk5fT04odm13X2JvLT5kaXJ0eSk7DQog CXZtd19ib191bm1hcCh2bXdfYm8pOw0KIAlrZnJlZSh2bXdfYm8pOw0KIH0NCkBAIC00NzYsOCAr NDc3LDEwIEBAIHZvaWQgdm13X2JvX2JvX2ZyZWUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpi bykNCiBzdGF0aWMgdm9pZCB2bXdfdXNlcl9ib19kZXN0cm95KHN0cnVjdCB0dG1fYnVmZmVyX29i amVjdCAqYm8pDQogew0KIAlzdHJ1Y3Qgdm13X3VzZXJfYnVmZmVyX29iamVjdCAqdm13X3VzZXJf Ym8gPSB2bXdfdXNlcl9idWZmZXJfb2JqZWN0KGJvKTsNCisJc3RydWN0IHZtd19idWZmZXJfb2Jq ZWN0ICp2Ym8gPSAmdm13X3VzZXJfYm8tPnZibzsNCiANCi0Jdm13X2JvX3VubWFwKCZ2bXdfdXNl cl9iby0+dmJvKTsNCisJV0FSTl9PTih2Ym8tPmRpcnR5KTsNCisJdm13X2JvX3VubWFwKHZibyk7 DQogCXR0bV9wcmltZV9vYmplY3Rfa2ZyZWUodm13X3VzZXJfYm8sIHByaW1lKTsNCiB9DQogDQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMgYi9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYw0KaW5kZXggNjE2NWZlMmM0NTA0Li43NGU5NDEz ODg3N2UgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYw0K KysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMNCkBAIC04NTcsNiArODU3 LDExIEBAIHN0YXRpYyBpbnQgdm13X2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHVuc2lnbmVkIGxvbmcgY2hpcHNldCkNCiAJCURSTV9FUlJPUigiRmFpbGVkIGluaXRpYWxpemlu ZyBUVE0gYnVmZmVyIG9iamVjdCBkcml2ZXIuXG4iKTsNCiAJCWdvdG8gb3V0X25vX2JkZXY7DQog CX0NCisJZGV2X3ByaXYtPnZtX29wcyA9ICpkZXZfcHJpdi0+YmRldi52bV9vcHM7DQorCWRldl9w cml2LT52bV9vcHMuZmF1bHQgPSB2bXdfYm9fdm1fZmF1bHQ7DQorCWRldl9wcml2LT52bV9vcHMu cGZuX21rd3JpdGUgPSB2bXdfYm9fdm1fbWt3cml0ZTsNCisJZGV2X3ByaXYtPnZtX29wcy5wYWdl X21rd3JpdGUgPSB2bXdfYm9fdm1fbWt3cml0ZTsNCisJZGV2X3ByaXYtPmJkZXYudm1fb3BzID0g JmRldl9wcml2LT52bV9vcHM7DQogDQogCS8qDQogCSAqIEVuYWJsZSBWUkFNLCBidXQgaW5pdGlh bGx5IGRvbid0IHVzZSBpdCB1bnRpbCBTVkdBIGlzIGVuYWJsZWQgYW5kDQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdm13 Z2Z4L3Ztd2dmeF9kcnYuaA0KaW5kZXggYmQ2OTE5YjkwNTE5Li5mMDVmY2U1MmZiYjQgMTAwNjQ0 DQotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaA0KKysrIGIvZHJpdmVy cy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgNCkBAIC05NSw2ICs5NSw3IEBAIHN0cnVjdCB2 bXdfZnByaXYgew0KICAqIEBkeF9xdWVyeV9jdHg6IERYIGNvbnRleHQgaWYgdGhpcyBidWZmZXIg b2JqZWN0IGlzIHVzZWQgYXMgYSBEWCBxdWVyeSBNT0INCiAgKiBAbWFwOiBLbWFwIG9iamVjdCBm b3Igc2VtaS1wZXJzaXN0ZW50IG1hcHBpbmdzDQogICogQHJlc19wcmlvczogRXZpY3Rpb24gcHJp b3JpdHkgY291bnRzIGZvciBhdHRhY2hlZCByZXNvdXJjZXMNCisgKiBAZGlydHk6IHN0cnVjdHVy ZSBmb3IgdXNlci1zcGFjZSBkaXJ0eS10cmFja2luZw0KICAqLw0KIHN0cnVjdCB2bXdfYnVmZmVy X29iamVjdCB7DQogCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCBiYXNlOw0KQEAgLTEwNSw2ICsx MDYsNyBAQCBzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3Qgew0KIAkvKiBQcm90ZWN0ZWQgYnkgcmVz ZXJ2YXRpb24gKi8NCiAJc3RydWN0IHR0bV9ib19rbWFwX29iaiBtYXA7DQogCXUzMiByZXNfcHJp b3NbVFRNX01BWF9CT19QUklPUklUWV07DQorCXN0cnVjdCB2bXdfYm9fZGlydHkgKmRpcnR5Ow0K IH07DQogDQogLyoqDQpAQCAtMTM1LDcgKzEzNyw4IEBAIHN0cnVjdCB2bXdfcmVzX2Z1bmM7DQog ICogQHJlc19kaXJ0eTogUmVzb3VyY2UgY29udGFpbnMgZGF0YSBub3QgeWV0IGluIHRoZSBiYWNr dXAgYnVmZmVyLiBQcm90ZWN0ZWQNCiAgKiBieSByZXNvdXJjZSByZXNlcnZlZC4NCiAgKiBAYmFj a3VwX2RpcnR5OiBCYWNrdXAgYnVmZmVyIGNvbnRhaW5zIGRhdGEgbm90IHlldCBpbiB0aGUgSFcg cmVzb3VyY2UuDQotICogUHJvdGVjdGUgYnkgcmVzb3VyY2UgcmVzZXJ2ZWQuDQorICogUHJvdGVj dGVkIGJ5IHJlc291cmNlIHJlc2VydmVkLg0KKyAqIEBjb2hlcmVudDogRW11bGF0ZSBjb2hlcmVu Y3kgYnkgdHJhY2tpbmcgdm0gYWNjZXNzZXMuDQogICogQGJhY2t1cDogVGhlIGJhY2t1cCBidWZm ZXIgaWYgYW55LiBQcm90ZWN0ZWQgYnkgcmVzb3VyY2UgcmVzZXJ2ZWQuDQogICogQGJhY2t1cF9v ZmZzZXQ6IE9mZnNldCBpbnRvIHRoZSBiYWNrdXAgYnVmZmVyIGlmIGFueS4gUHJvdGVjdGVkIGJ5 IHJlc291cmNlDQogICogcmVzZXJ2ZWQuIE5vdGUgdGhhdCBvbmx5IGEgZmV3IHJlc291cmNlIHR5 cGVzIGNhbiBoYXZlIGEgQGJhY2t1cF9vZmZzZXQNCkBAIC0xNTIsMTQgKzE1NSwxNiBAQCBzdHJ1 Y3Qgdm13X3Jlc19mdW5jOw0KICAqIEBod19kZXN0cm95OiBDYWxsYmFjayB0byBkZXN0cm95IHRo ZSByZXNvdXJjZSBvbiB0aGUgZGV2aWNlLCBhcyBwYXJ0IG9mDQogICogcmVzb3VyY2UgZGVzdHJ1 Y3Rpb24uDQogICovDQorc3RydWN0IHZtd19yZXNvdXJjZV9kaXJ0eTsNCiBzdHJ1Y3Qgdm13X3Jl c291cmNlIHsNCiAJc3RydWN0IGtyZWYga3JlZjsNCiAJc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdjsNCiAJaW50IGlkOw0KIAl1MzIgdXNlZF9wcmlvOw0KIAl1bnNpZ25lZCBsb25nIGJhY2t1 cF9zaXplOw0KLQlib29sIHJlc19kaXJ0eTsNCi0JYm9vbCBiYWNrdXBfZGlydHk7DQorCXUzMiBy ZXNfZGlydHkgOiAxOw0KKwl1MzIgYmFja3VwX2RpcnR5IDogMTsNCisJdTMyIGNvaGVyZW50IDog MTsNCiAJc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICpiYWNrdXA7DQogCXVuc2lnbmVkIGxvbmcg YmFja3VwX29mZnNldDsNCiAJdW5zaWduZWQgbG9uZyBwaW5fY291bnQ7DQpAQCAtMTY3LDYgKzE3 Miw3IEBAIHN0cnVjdCB2bXdfcmVzb3VyY2Ugew0KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxydV9oZWFk Ow0KIAlzdHJ1Y3QgbGlzdF9oZWFkIG1vYl9oZWFkOw0KIAlzdHJ1Y3QgbGlzdF9oZWFkIGJpbmRp bmdfaGVhZDsNCisJc3RydWN0IHZtd19yZXNvdXJjZV9kaXJ0eSAqZGlydHk7DQogCXZvaWQgKCpy ZXNfZnJlZSkgKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyk7DQogCXZvaWQgKCpod19kZXN0cm95 KSAoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKTsNCiB9Ow0KQEAgLTYwNyw2ICs2MTMsOSBAQCBz dHJ1Y3Qgdm13X3ByaXZhdGUgew0KIA0KIAkvKiBWYWxpZGF0aW9uIG1lbW9yeSByZXNlcnZhdGlv biAqLw0KIAlzdHJ1Y3Qgdm13X3ZhbGlkYXRpb25fbWVtIHZ2bTsNCisNCisJLyogVk0gb3BlcmF0 aW9ucyAqLw0KKwlzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdm1fb3BzOw0KIH07DQogDQog c3RhdGljIGlubGluZSBzdHJ1Y3Qgdm13X3N1cmZhY2UgKnZtd19yZXNfdG9fc3JmKHN0cnVjdCB2 bXdfcmVzb3VyY2UgKnJlcykNCkBAIC03MjMsNiArNzMyLDggQEAgZXh0ZXJuIHZvaWQgdm13X3Jl c291cmNlX2V2aWN0X2FsbChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KTsNCiBleHRlcm4g dm9pZCB2bXdfcmVzb3VyY2VfdW5iaW5kX2xpc3Qoc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2 Ym8pOw0KIHZvaWQgdm13X3Jlc291cmNlX21vYl9hdHRhY2goc3RydWN0IHZtd19yZXNvdXJjZSAq cmVzKTsNCiB2b2lkIHZtd19yZXNvdXJjZV9tb2JfZGV0YWNoKHN0cnVjdCB2bXdfcmVzb3VyY2Ug KnJlcyk7DQordm9pZCB2bXdfcmVzb3VyY2VfZGlydHlfdXBkYXRlKHN0cnVjdCB2bXdfcmVzb3Vy Y2UgKnJlcywgcGdvZmZfdCBzdGFydCwNCisJCQkgICAgICAgcGdvZmZfdCBlbmQpOw0KIA0KIC8q Kg0KICAqIHZtd19yZXNvdXJjZV9tb2JfYXR0YWNoZWQgLSBXaGV0aGVyIGEgcmVzb3VyY2UgY3Vy cmVudGx5IGhhcyBhIG1vYiBhdHRhY2hlZA0KQEAgLTE0MTEsNiArMTQyMiwxNSBAQCBpbnQgdm13 X2hvc3RfbG9nKGNvbnN0IGNoYXIgKmxvZyk7DQogI2RlZmluZSBWTVdfREVCVUdfVVNFUihmbXQs IC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KIAlE Uk1fREVCVUdfRFJJVkVSKGZtdCwgIyNfX1ZBX0FSR1NfXykNCiANCisvKiBSZXNvdXJjZSBkaXJ0 eWluZyAtIHZtd2dmeF9wYWdlX2RpcnR5LmMgKi8NCit2b2lkIHZtd19ib19kaXJ0eV9zY2FuKHN0 cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqdmJvKTsNCitpbnQgdm13X2JvX2RpcnR5X2FkZChzdHJ1 Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibyk7DQordm9pZCB2bXdfYm9fZGlydHlfdHJhbnNmZXJf dG9fcmVzKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyk7DQordm9pZCB2bXdfYm9fZGlydHlfY2xl YXJfcmVzKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyk7DQordm9pZCB2bXdfYm9fZGlydHlfcmVs ZWFzZShzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibyk7DQordm1fZmF1bHRfdCB2bXdfYm9f dm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpOw0KK3ZtX2ZhdWx0X3Qgdm13X2JvX3ZtX21r d3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpOw0KKw0KIC8qKg0KICAqIElubGluZSBoZWxwZXIg ZnVuY3Rpb25zDQogICovDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn ZnhfZXhlY2J1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jDQpp bmRleCBkYTNhYzBiYzJlMTQuLjdjYjIyMTE5ZjUxNiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvZ3B1 L2RybS92bXdnZngvdm13Z2Z4X2V4ZWNidWYuYw0KKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfZXhlY2J1Zi5jDQpAQCAtMjQ4Myw3ICsyNDgzLDYgQEAgc3RhdGljIGludCB2bXdf Y21kX2R4X2NoZWNrX3N1YnJlc291cmNlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsDQog CQkgICAgIG9mZnNldG9mKHR5cGVvZigqY21kKSwgc2lkKSk7DQogDQogCWNtZCA9IGNvbnRhaW5l cl9vZihoZWFkZXIsIHR5cGVvZigqY21kKSwgaGVhZGVyKTsNCi0NCiAJcmV0dXJuIHZtd19jbWRf cmVzX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCB2bXdfcmVzX3N1cmZhY2UsDQogCQkJCSBW TVdfUkVTX0RJUlRZX05PTkUsIHVzZXJfc3VyZmFjZV9jb252ZXJ0ZXIsDQogCQkJCSAmY21kLT5z aWQsIE5VTEwpOw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Bh Z2VfZGlydHkuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuYw0K bmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uODdlNGE3M2IxMTc1DQot LS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9wYWdlX2Rp cnR5LmMNCkBAIC0wLDAgKzEsNDEwIEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAgT1IgTUlUDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICoNCisgKiBDb3B5cmlnaHQgMjAx OSBWTXdhcmUsIEluYy4sIFBhbG8gQWx0bywgQ0EuLCBVU0ENCisgKg0KKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhDQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZQ0KKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcNCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsDQorICogZGlzdHJp YnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0bw0KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0bw0KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCisg Kg0KKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlDQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMNCisgKiBvZiB0aGUgU29mdHdh cmUuDQorICoNCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJ TiBOTyBFVkVOVCBTSEFMTA0KKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQv T1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwNCisgKiBEQU1BR0VTIE9S IE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1INCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFDQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRI RSBTT0ZUV0FSRS4NCisgKg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisjaW5jbHVkZSAidm13Z2Z4 X2Rydi5oIg0KKw0KKy8qDQorICogRGlmZmVyZW50IG1ldGhvZHMgZm9yIHRyYWNraW5nIGRpcnR5 Og0KKyAqIFZNV19CT19ESVJUWV9QQUdFVEFCTEUgLSBTY2FuIHRoZSBwYWdldGFibGUgZm9yIGhh cmR3YXJlIGRpcnR5IGJpdHMNCisgKiBWTVdfQk9fRElSVFlfTUtXUklURSAtIFdyaXRlLXByb3Rl Y3QgcGFnZSB0YWJsZSBlbnRyaWVzIGFuZCByZWNvcmQgd3JpdGUtDQorICogYWNjZXNzZXMgaW4g dGhlIFZNIG1rd3JpdGUoKSBjYWxsYmFjaw0KKyAqLw0KK2VudW0gdm13X2JvX2RpcnR5X21ldGhv ZCB7DQorCVZNV19CT19ESVJUWV9QQUdFVEFCTEUsDQorCVZNV19CT19ESVJUWV9NS1dSSVRFLA0K K307DQorDQorLyoNCisgKiBObyBkaXJ0aWVkIHBhZ2VzIGF0IHNjYW4gdHJpZ2dlciBhIHRyYW5z aXRpb24gdG8gdGhlIF9NS1dSSVRFIG1ldGhvZCwNCisgKiBzaW1pbGFybHkgYSBjZXJ0YWluIHBl cmNlbnRhZ2Ugb2YgZGlydHkgcGFnZXMgdHJpZ2dlciBhIHRyYW5zaXRpb24gdG8NCisgKiB0aGUg X1BBR0VUQUJMRSBtZXRob2QuIEhvdyBtYW55IHRyaWdnZXJzIHNob3VsZCB3ZSB3YWl0IGZvciBi ZWZvcmUNCisgKiBjaGFuZ2luZyBtZXRob2Q/DQorICovDQorI2RlZmluZSBWTVdfRElSVFlfTlVN X0NIQU5HRV9UUklHR0VSUyAyDQorDQorLyogUGVyY2VudGFnZSB0byB0cmlnZ2VyIGEgdHJhbnNp dGlvbiB0byB0aGUgX1BBR0VUQUJMRSBtZXRob2QgKi8NCisjZGVmaW5lIFZNV19ESVJUWV9QRVJD RU5UQUdFIDEwDQorDQorLyoqDQorICogc3RydWN0IHZtd19ib19kaXJ0eSAtIERpcnR5IGluZm9y bWF0aW9uIGZvciBidWZmZXIgb2JqZWN0cw0KKyAqIEBzdGFydDogRmlyc3QgY3VycmVudGx5IGRp cnR5IGJpdA0KKyAqIEBlbmQ6IExhc3QgY3VycmVudGx5IGRpcnR5IGJpdCArIDENCisgKiBAbWV0 aG9kOiBUaGUgY3VycmVudGx5IHVzZWQgZGlydHkgbWV0aG9kDQorICogQGNoYW5nZV9jb3VudDog TnVtYmVyIG9mIGNvbnNlY3V0aXZlIG1ldGhvZCBjaGFuZ2UgdHJpZ2dlcnMNCisgKiBAcmVmX2Nv dW50OiBSZWZlcmVuY2UgY291bnQgZm9yIHRoaXMgc3RydWN0dXJlDQorICogQGJpdG1hcF9zaXpl OiBUaGUgc2l6ZSBvZiB0aGUgYml0bWFwIGluIGJpdHMuIFR5cGljYWxseSBlcXVhbCB0byB0aGUN CisgKiBudWJlciBvZiBwYWdlcyBpbiB0aGUgYm8uDQorICogQHNpemU6IFRoZSBhY2NvdW50aW5n IHNpemUgZm9yIHRoaXMgc3RydWN0Lg0KKyAqIEBiaXRtYXA6IEEgYml0bWFwIHdoZXJlIGVhY2gg Yml0IHJlcHJlc2VudHMgYSBwYWdlLiBBIHNldCBiaXQgbWVhbnMgYQ0KKyAqIGRpcnR5IHBhZ2Uu DQorICovDQorc3RydWN0IHZtd19ib19kaXJ0eSB7DQorCXVuc2lnbmVkIGxvbmcgc3RhcnQ7DQor CXVuc2lnbmVkIGxvbmcgZW5kOw0KKwllbnVtIHZtd19ib19kaXJ0eV9tZXRob2QgbWV0aG9kOw0K Kwl1bnNpZ25lZCBpbnQgY2hhbmdlX2NvdW50Ow0KKwl1bnNpZ25lZCBpbnQgcmVmX2NvdW50Ow0K Kwl1bnNpZ25lZCBsb25nIGJpdG1hcF9zaXplOw0KKwlzaXplX3Qgc2l6ZTsNCisJdW5zaWduZWQg bG9uZyBiaXRtYXBbMF07DQorfTsNCisNCisvKioNCisgKiB2bXdfYm9fZGlydHlfc2Nhbl9wYWdl dGFibGUgLSBQZXJmb3JtIGEgcGFnZXRhYmxlIHNjYW4gZm9yIGRpcnR5IGJpdHMNCisgKiBAdmJv OiBUaGUgYnVmZmVyIG9iamVjdCB0byBzY2FuDQorICoNCisgKiBTY2FucyB0aGUgcGFnZXRhYmxl IGZvciBkaXJ0eSBiaXRzLiBDbGVhciB0aG9zZSBiaXRzIGFuZCBtb2RpZnkgdGhlDQorICogZGly dHkgc3RydWN0dXJlIHdpdGggdGhlIHJlc3VsdHMuIFRoaXMgZnVuY3Rpb24gbWF5IGNoYW5nZSB0 aGUNCisgKiBkaXJ0eS10cmFja2luZyBtZXRob2QuDQorICovDQorc3RhdGljIHZvaWQgdm13X2Jv X2RpcnR5X3NjYW5fcGFnZXRhYmxlKHN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqdmJvKQ0KK3sN CisJc3RydWN0IHZtd19ib19kaXJ0eSAqZGlydHkgPSB2Ym8tPmRpcnR5Ow0KKwlwZ29mZl90IG9m ZnNldCA9IGRybV92bWFfbm9kZV9zdGFydCgmdmJvLT5iYXNlLnZtYV9ub2RlKTsNCisJc3RydWN0 IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSB2Ym8tPmJhc2UuYmRldi0+ZGV2X21hcHBpbmc7DQor CXBnb2ZmX3QgbnVtX21hcmtlZDsNCisNCisJbnVtX21hcmtlZCA9IGFwcGx5X2FzX2NsZWFuKG1h cHBpbmcsDQorCQkJCSAgICBvZmZzZXQsIGRpcnR5LT5iaXRtYXBfc2l6ZSwNCisJCQkJICAgIG9m ZnNldCwgJmRpcnR5LT5iaXRtYXBbMF0sDQorCQkJCSAgICAmZGlydHktPnN0YXJ0LCAmZGlydHkt PmVuZCk7DQorCWlmIChudW1fbWFya2VkID09IDApDQorCQlkaXJ0eS0+Y2hhbmdlX2NvdW50Kys7 DQorCWVsc2UNCisJCWRpcnR5LT5jaGFuZ2VfY291bnQgPSAwOw0KKw0KKwlpZiAoZGlydHktPmNo YW5nZV9jb3VudCA+IFZNV19ESVJUWV9OVU1fQ0hBTkdFX1RSSUdHRVJTKSB7DQorCQlkaXJ0eS0+ Y2hhbmdlX2NvdW50ID0gMDsNCisJCWRpcnR5LT5tZXRob2QgPSBWTVdfQk9fRElSVFlfTUtXUklU RTsNCisJCWFwcGx5X2FzX3dycHJvdGVjdChtYXBwaW5nLA0KKwkJCQkgICBvZmZzZXQsIGRpcnR5 LT5iaXRtYXBfc2l6ZSk7DQorCQlhcHBseV9hc19jbGVhbihtYXBwaW5nLA0KKwkJCSAgICAgICBv ZmZzZXQsIGRpcnR5LT5iaXRtYXBfc2l6ZSwNCisJCQkgICAgICAgb2Zmc2V0LCAmZGlydHktPmJp dG1hcFswXSwNCisJCQkgICAgICAgJmRpcnR5LT5zdGFydCwgJmRpcnR5LT5lbmQpOw0KKwl9DQor fQ0KKw0KKy8qKg0KKyAqIHZtd19ib19kaXJ0eV9zY2FuX21rd3JpdGUgLSBSZXNldCB0aGUgbWt3 cml0ZSBkaXJ0eS10cmFja2luZyBtZXRob2QNCisgKiBAdmJvOiBUaGUgYnVmZmVyIG9iamVjdCB0 byBzY2FuDQorICoNCisgKiBXcml0ZS1wcm90ZWN0IHBhZ2VzIHdyaXR0ZW4gdG8gc28gdGhhdCBj b25zZWN1dGl2ZSB3cml0ZSBhY2Nlc3NlcyB3aWxsDQorICogdHJpZ2dlciBhIGNhbGwgdG8gbWt3 cml0ZS4NCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gbWF5IGNoYW5nZSB0aGUgZGlydHktdHJhY2tp bmcgbWV0aG9kLg0KKyAqLw0KK3N0YXRpYyB2b2lkIHZtd19ib19kaXJ0eV9zY2FuX21rd3JpdGUo c3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2Ym8pDQorew0KKwlzdHJ1Y3Qgdm13X2JvX2RpcnR5 ICpkaXJ0eSA9IHZiby0+ZGlydHk7DQorCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gZHJtX3ZtYV9u b2RlX3N0YXJ0KCZ2Ym8tPmJhc2Uudm1hX25vZGUpOw0KKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAq bWFwcGluZyA9IHZiby0+YmFzZS5iZGV2LT5kZXZfbWFwcGluZzsNCisJcGdvZmZfdCBudW1fbWFy a2VkOw0KKw0KKwlpZiAoZGlydHktPmVuZCA8PSBkaXJ0eS0+c3RhcnQpDQorCQlyZXR1cm47DQor DQorCW51bV9tYXJrZWQgPSBhcHBseV9hc193cnByb3RlY3QodmJvLT5iYXNlLmJkZXYtPmRldl9t YXBwaW5nLA0KKwkJCQkJZGlydHktPnN0YXJ0ICsgb2Zmc2V0LA0KKwkJCQkJZGlydHktPmVuZCAt IGRpcnR5LT5zdGFydCk7DQorDQorCWlmICgxMDBVTCAqIG51bV9tYXJrZWQgLyBkaXJ0eS0+Yml0 bWFwX3NpemUgPg0KKwkgICAgVk1XX0RJUlRZX1BFUkNFTlRBR0UpIHsNCisJCWRpcnR5LT5jaGFu Z2VfY291bnQrKzsNCisJfSBlbHNlIHsNCisJCWRpcnR5LT5jaGFuZ2VfY291bnQgPSAwOw0KKwl9 DQorDQorCWlmIChkaXJ0eS0+Y2hhbmdlX2NvdW50ID4gVk1XX0RJUlRZX05VTV9DSEFOR0VfVFJJ R0dFUlMpIHsNCisJCXBnb2ZmX3Qgc3RhcnQgPSAwOw0KKwkJcGdvZmZfdCBlbmQgPSBkaXJ0eS0+ Yml0bWFwX3NpemU7DQorDQorCQlkaXJ0eS0+bWV0aG9kID0gVk1XX0JPX0RJUlRZX1BBR0VUQUJM RTsNCisJCWFwcGx5X2FzX2NsZWFuKG1hcHBpbmcsIG9mZnNldCwgZW5kLCBvZmZzZXQsICZkaXJ0 eS0+Yml0bWFwWzBdLA0KKwkJCSAgICAgICAmc3RhcnQsICZlbmQpOw0KKwkJYml0bWFwX2NsZWFy KCZkaXJ0eS0+Yml0bWFwWzBdLCAwLCBkaXJ0eS0+Yml0bWFwX3NpemUpOw0KKwkJaWYgKGRpcnR5 LT5zdGFydCA8IGRpcnR5LT5lbmQpDQorCQkJYml0bWFwX3NldCgmZGlydHktPmJpdG1hcFswXSwg ZGlydHktPnN0YXJ0LA0KKwkJCQkgICBkaXJ0eS0+ZW5kIC0gZGlydHktPnN0YXJ0KTsNCisJCWRp cnR5LT5jaGFuZ2VfY291bnQgPSAwOw0KKwl9DQorfQ0KKw0KKw0KKy8qKg0KKyAqIHZtd19ib19k aXJ0eV9zY2FuIC0gU2NhbiBmb3IgZGlydHkgcGFnZXMgYW5kIGFkZCB0aGVtIHRvIHRoZSBkaXJ0 eQ0KKyAqIHRyYWNraW5nIHN0cnVjdHVyZQ0KKyAqIEB2Ym86IFRoZSBidWZmZXIgb2JqZWN0IHRv IHNjYW4NCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gbWF5IGNoYW5nZSB0aGUgZGlydHkgdHJhY2tp bmcgbWV0aG9kLg0KKyAqLw0KK3ZvaWQgdm13X2JvX2RpcnR5X3NjYW4oc3RydWN0IHZtd19idWZm ZXJfb2JqZWN0ICp2Ym8pDQorew0KKwlzdHJ1Y3Qgdm13X2JvX2RpcnR5ICpkaXJ0eSA9IHZiby0+ ZGlydHk7DQorDQorCWlmIChkaXJ0eS0+bWV0aG9kID09IFZNV19CT19ESVJUWV9QQUdFVEFCTEUp DQorCQl2bXdfYm9fZGlydHlfc2Nhbl9wYWdldGFibGUodmJvKTsNCisJZWxzZQ0KKwkJdm13X2Jv X2RpcnR5X3NjYW5fbWt3cml0ZSh2Ym8pOw0KK30NCisNCisvKioNCisgKiB2bXdfYm9fZGlydHlf YWRkIC0gQWRkIGEgZGlydHktdHJhY2tpbmcgdXNlciB0byBhIGJ1ZmZlciBvYmplY3QNCisgKiBA dmJvOiBUaGUgYnVmZmVyIG9iamVjdA0KKyAqDQorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMg YSBkaXJ0eS10cmFja2luZyB1c2VyIHRvIGEgYnVmZmVyIG9iamVjdC4NCisgKiBBIHVzZXIgY2Fu IGJlIGZvciBleGFtcGxlIGEgcmVzb3VyY2Ugb3IgYSB2bWEgaW4gYSBzcGVjaWFsIHVzZXItc3Bh Y2UNCisgKiBtYXBwaW5nLg0KKyAqDQorICogUmV0dXJuOiBaZXJvIG9uIHN1Y2Nlc3MsIC1FTk9N RU0gb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4NCisgKi8NCitpbnQgdm13X2JvX2RpcnR5 X2FkZChzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibykNCit7DQorCXN0cnVjdCB2bXdfYm9f ZGlydHkgKmRpcnR5ID0gdmJvLT5kaXJ0eTsNCisJcGdvZmZfdCBudW1fcGFnZXMgPSB2Ym8tPmJh c2UubnVtX3BhZ2VzOw0KKwlzaXplX3Qgc2l6ZSwgYWNjX3NpemU7DQorCWludCByZXQ7DQorCXN0 YXRpYyBzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggY3R4ID0gew0KKwkJLmludGVycnVwdGlibGUg PSBmYWxzZSwNCisJCS5ub193YWl0X2dwdSA9IGZhbHNlDQorCX07DQorDQorCWlmIChkaXJ0eSkg ew0KKwkJZGlydHktPnJlZl9jb3VudCsrOw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJc2l6ZSA9 IHNpemVvZigqZGlydHkpICsgQklUU19UT19MT05HUyhudW1fcGFnZXMpICogc2l6ZW9mKGxvbmcp Ow0KKwlhY2Nfc2l6ZSA9IHR0bV9yb3VuZF9wb3Qoc2l6ZSk7DQorCXJldCA9IHR0bV9tZW1fZ2xv YmFsX2FsbG9jKCZ0dG1fbWVtX2dsb2IsIGFjY19zaXplLCAmY3R4KTsNCisJaWYgKHJldCkgew0K KwkJVk1XX0RFQlVHX1VTRVIoIk91dCBvZiBncmFwaGljcyBtZW1vcnkgZm9yIGJ1ZmZlciBvYmpl Y3QgIg0KKwkJCSAgICAgICAiZGlydHkgdHJhY2tlci5cbiIpOw0KKwkJcmV0dXJuIHJldDsNCisJ fQ0KKwlkaXJ0eSA9IGt2emFsbG9jKHNpemUsIEdGUF9LRVJORUwpOw0KKwlpZiAoIWRpcnR5KSB7 DQorCQlyZXQgPSAtRU5PTUVNOw0KKwkJZ290byBvdXRfbm9fZGlydHk7DQorCX0NCisNCisJZGly dHktPnNpemUgPSBhY2Nfc2l6ZTsNCisJZGlydHktPmJpdG1hcF9zaXplID0gbnVtX3BhZ2VzOw0K KwlkaXJ0eS0+c3RhcnQgPSBkaXJ0eS0+Yml0bWFwX3NpemU7DQorCWRpcnR5LT5lbmQgPSAwOw0K KwlkaXJ0eS0+cmVmX2NvdW50ID0gMTsNCisJaWYgKG51bV9wYWdlcyA8IFBBR0VfU0laRSAvIHNp emVvZihwdGVfdCkpIHsNCisJCWRpcnR5LT5tZXRob2QgPSBWTVdfQk9fRElSVFlfUEFHRVRBQkxF Ow0KKwl9IGVsc2Ugew0KKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSB2Ym8tPmJh c2UuYmRldi0+ZGV2X21hcHBpbmc7DQorCQlwZ29mZl90IG9mZnNldCA9IGRybV92bWFfbm9kZV9z dGFydCgmdmJvLT5iYXNlLnZtYV9ub2RlKTsNCisNCisJCWRpcnR5LT5tZXRob2QgPSBWTVdfQk9f RElSVFlfTUtXUklURTsNCisNCisJCS8qIFdyaXRlLXByb3RlY3QgYW5kIHRoZW4gcGljayB1cCBh bHJlYWR5IGRpcnR5IGJpdHMgKi8NCisJCWFwcGx5X2FzX3dycHJvdGVjdChtYXBwaW5nLCBvZmZz ZXQsIG51bV9wYWdlcyk7DQorCQlhcHBseV9hc19jbGVhbihtYXBwaW5nLCBvZmZzZXQsIG51bV9w YWdlcywgb2Zmc2V0LA0KKwkJCSAgICAgICAmZGlydHktPmJpdG1hcFswXSwgJmRpcnR5LT5zdGFy dCwgJmRpcnR5LT5lbmQpOw0KKwl9DQorDQorCXZiby0+ZGlydHkgPSBkaXJ0eTsNCisNCisJcmV0 dXJuIDA7DQorDQorb3V0X25vX2RpcnR5Og0KKwl0dG1fbWVtX2dsb2JhbF9mcmVlKCZ0dG1fbWVt X2dsb2IsIGFjY19zaXplKTsNCisJcmV0dXJuIHJldDsNCit9DQorDQorLyoqDQorICogdm13X2Jv X2RpcnR5X3JlbGVhc2UgLSBSZWxlYXNlIGEgZGlydHktdHJhY2tpbmcgdXNlciBmcm9tIGEgYnVm ZmVyIG9iamVjdA0KKyAqIEB2Ym86IFRoZSBidWZmZXIgb2JqZWN0DQorICoNCisgKiBUaGlzIGZ1 bmN0aW9uIHJlbGVhc2VzIGEgZGlydHktdHJhY2tpbmcgdXNlciBmcm9tIGEgYnVmZmVyIG9iamVj dC4NCisgKiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVybywgdGhlbiB0aGUgZGly dHktdHJhY2tpbmcgb2JqZWN0IGlzDQorICogZnJlZWQgYW5kIHRoZSBwb2ludGVyIHRvIGl0IGNs ZWFyZWQuDQorICoNCisgKiBSZXR1cm46IFplcm8gb24gc3VjY2VzcywgLUVOT01FTSBvbiBtZW1v cnkgYWxsb2NhdGlvbiBmYWlsdXJlLg0KKyAqLw0KK3ZvaWQgdm13X2JvX2RpcnR5X3JlbGVhc2Uo c3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2Ym8pDQorew0KKwlzdHJ1Y3Qgdm13X2JvX2RpcnR5 ICpkaXJ0eSA9IHZiby0+ZGlydHk7DQorDQorCWlmIChkaXJ0eSAmJiAtLWRpcnR5LT5yZWZfY291 bnQgPT0gMCkgew0KKwkJc2l6ZV90IGFjY19zaXplID0gZGlydHktPnNpemU7DQorDQorCQlrdmZy ZWUoZGlydHkpOw0KKwkJdHRtX21lbV9nbG9iYWxfZnJlZSgmdHRtX21lbV9nbG9iLCBhY2Nfc2l6 ZSk7DQorCQl2Ym8tPmRpcnR5ID0gTlVMTDsNCisJfQ0KK30NCisNCisvKioNCisgKiB2bXdfYm9f ZGlydHlfdHJhbnNmZXJfdG9fcmVzIC0gUGljayB1cCBhIHJlc291cmNlJ3MgZGlydHkgcmVnaW9u IGZyb20NCisgKiBpdHMgYmFja2luZyBtb2IuDQorICogQHJlczogVGhlIHJlc291cmNlDQorICoN CisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcGljayB1cCBhbGwgZGlydHkgcmFuZ2VzIGFmZmVjdGlu ZyB0aGUgcmVzb3VyY2UgZnJvbQ0KKyAqIGl0J3MgYmFja3VwIG1vYiwgYW5kIGNhbGwgdm13X3Jl c291cmNlX2RpcnR5X3VwZGF0ZSgpIG9uY2UgZm9yIGVhY2gNCisgKiByYW5nZS4gVGhlIHRyYW5z ZmVycmVkIHJhbmdlcyB3aWxsIGJlIGNsZWFyZWQgZnJvbSB0aGUgYmFja2luZyBtb2Incw0KKyAq IGRpcnR5IHRyYWNraW5nLg0KKyAqLw0KK3ZvaWQgdm13X2JvX2RpcnR5X3RyYW5zZmVyX3RvX3Jl cyhzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpDQorew0KKwlzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmpl Y3QgKnZibyA9IHJlcy0+YmFja3VwOw0KKwlzdHJ1Y3Qgdm13X2JvX2RpcnR5ICpkaXJ0eSA9IHZi by0+ZGlydHk7DQorCXBnb2ZmX3Qgc3RhcnQsIGN1ciwgZW5kOw0KKwl1bnNpZ25lZCBsb25nIHJl c19zdGFydCA9IHJlcy0+YmFja3VwX29mZnNldDsNCisJdW5zaWduZWQgbG9uZyByZXNfZW5kID0g cmVzLT5iYWNrdXBfb2Zmc2V0ICsgcmVzLT5iYWNrdXBfc2l6ZTsNCisNCisJV0FSTl9PTl9PTkNF KHJlc19zdGFydCAmIH5QQUdFX01BU0spOw0KKwlyZXNfc3RhcnQgPj49IFBBR0VfU0hJRlQ7DQor CXJlc19lbmQgPSBESVZfUk9VTkRfVVAocmVzX2VuZCwgUEFHRV9TSVpFKTsNCisNCisJaWYgKHJl c19zdGFydCA+PSBkaXJ0eS0+ZW5kIHx8IHJlc19lbmQgPD0gZGlydHktPnN0YXJ0KQ0KKwkJcmV0 dXJuOw0KKw0KKwljdXIgPSBtYXgocmVzX3N0YXJ0LCBkaXJ0eS0+c3RhcnQpOw0KKwlyZXNfZW5k ID0gbWF4KHJlc19lbmQsIGRpcnR5LT5lbmQpOw0KKwl3aGlsZSAoY3VyIDwgcmVzX2VuZCkgew0K KwkJdW5zaWduZWQgbG9uZyBudW07DQorDQorCQlzdGFydCA9IGZpbmRfbmV4dF9iaXQoJmRpcnR5 LT5iaXRtYXBbMF0sIHJlc19lbmQsIGN1cik7DQorCQlpZiAoc3RhcnQgPj0gcmVzX2VuZCkNCisJ CQlicmVhazsNCisNCisJCWVuZCA9IGZpbmRfbmV4dF96ZXJvX2JpdCgmZGlydHktPmJpdG1hcFsw XSwgcmVzX2VuZCwgc3RhcnQgKyAxKTsNCisJCWN1ciA9IGVuZCArIDE7DQorCQludW0gPSBlbmQg LSBzdGFydDsNCisJCWJpdG1hcF9jbGVhcigmZGlydHktPmJpdG1hcFswXSwgc3RhcnQsIG51bSk7 DQorCQl2bXdfcmVzb3VyY2VfZGlydHlfdXBkYXRlKHJlcywgc3RhcnQsIGVuZCk7DQorCX0NCisN CisJaWYgKHJlc19zdGFydCA8PSBkaXJ0eS0+c3RhcnQgJiYgcmVzX2VuZCA+IGRpcnR5LT5zdGFy dCkNCisJCWRpcnR5LT5zdGFydCA9IHJlc19lbmQ7DQorCWlmIChyZXNfc3RhcnQgPCBkaXJ0eS0+ ZW5kICYmIHJlc19lbmQgPj0gZGlydHktPmVuZCkNCisJCWRpcnR5LT5lbmQgPSByZXNfc3RhcnQ7 DQorfQ0KKw0KKy8qKg0KKyAqIHZtd19ib19kaXJ0eV9jbGVhcl9yZXMgLSBDbGVhciBhIHJlc291 cmNlJ3MgZGlydHkgcmVnaW9uIGZyb20NCisgKiBpdHMgYmFja2luZyBtb2IuDQorICogQHJlczog VGhlIHJlc291cmNlDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xhciBhbGwgZGlydHkg cmFuZ2VzIGFmZmVjdGluZyB0aGUgcmVzb3VyY2UgZnJvbQ0KKyAqIGl0J3MgYmFja3VwIG1vYidz IGRpcnR5IHRyYWNraW5nLg0KKyAqLw0KK3ZvaWQgdm13X2JvX2RpcnR5X2NsZWFyX3JlcyhzdHJ1 Y3Qgdm13X3Jlc291cmNlICpyZXMpDQorew0KKwl1bnNpZ25lZCBsb25nIHJlc19zdGFydCA9IHJl cy0+YmFja3VwX29mZnNldDsNCisJdW5zaWduZWQgbG9uZyByZXNfZW5kID0gcmVzLT5iYWNrdXBf b2Zmc2V0ICsgcmVzLT5iYWNrdXBfc2l6ZTsNCisJc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2 Ym8gPSByZXMtPmJhY2t1cDsNCisJc3RydWN0IHZtd19ib19kaXJ0eSAqZGlydHkgPSB2Ym8tPmRp cnR5Ow0KKw0KKwlyZXNfc3RhcnQgPj49IFBBR0VfU0hJRlQ7DQorCXJlc19lbmQgPSBESVZfUk9V TkRfVVAocmVzX2VuZCwgUEFHRV9TSVpFKTsNCisNCisJaWYgKHJlc19zdGFydCA+PSBkaXJ0eS0+ ZW5kIHx8IHJlc19lbmQgPD0gZGlydHktPnN0YXJ0KQ0KKwkJcmV0dXJuOw0KKw0KKwlyZXNfc3Rh cnQgPSBtYXgocmVzX3N0YXJ0LCBkaXJ0eS0+c3RhcnQpOw0KKwlyZXNfZW5kID0gbWluKHJlc19l bmQsIGRpcnR5LT5lbmQpOw0KKwliaXRtYXBfY2xlYXIoJmRpcnR5LT5iaXRtYXBbMF0sIHJlc19z dGFydCwgcmVzX2VuZCAtIHJlc19zdGFydCk7DQorDQorCWlmIChyZXNfc3RhcnQgPD0gZGlydHkt PnN0YXJ0ICYmIHJlc19lbmQgPiBkaXJ0eS0+c3RhcnQpDQorCQlkaXJ0eS0+c3RhcnQgPSByZXNf ZW5kOw0KKwlpZiAocmVzX3N0YXJ0IDwgZGlydHktPmVuZCAmJiByZXNfZW5kID49IGRpcnR5LT5l bmQpDQorCQlkaXJ0eS0+ZW5kID0gcmVzX3N0YXJ0Ow0KK30NCisNCisvKiB2bXdfYm9fdm1fbWt3 cml0ZSAtIFRoZSB2bXdnZnggcGFnZV9ta3dyaXRlKCkgb3IgcGZuX21rd3JpdGUoKSBjYWxsYmFj ayAqLw0KK3ZtX2ZhdWx0X3Qgdm13X2JvX3ZtX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYp DQorew0KKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0+dm1hOw0KKwlzdHJ1Y3Qg dHRtX2J1ZmZlcl9vYmplY3QgKmJvID0gKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqKQ0KKwkg ICAgdm1hLT52bV9wcml2YXRlX2RhdGE7DQorCXZtX2ZhdWx0X3QgcmV0Ow0KKwl1bnNpZ25lZCBs b25nIHBhZ2Vfb2Zmc2V0Ow0KKwlzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibyA9DQorCQlj b250YWluZXJfb2YoYm8sIHR5cGVvZigqdmJvKSwgYmFzZSk7DQorDQorCXJldCA9IHR0bV9ib192 bV9yZXNlcnZlKGJvLCB2bWYpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcGFn ZV9vZmZzZXQgPSB2bWYtPnBnb2ZmIC0gZHJtX3ZtYV9ub2RlX3N0YXJ0KCZiby0+dm1hX25vZGUp Ow0KKwlpZiAodW5saWtlbHkocGFnZV9vZmZzZXQgPj0gYm8tPm51bV9wYWdlcykpIHsNCisJCXJl dCA9IFZNX0ZBVUxUX1NJR0JVUzsNCisJCWdvdG8gb3V0X3VubG9jazsNCisJfQ0KKw0KKwlpZiAo dmJvLT5kaXJ0eSAmJiB2Ym8tPmRpcnR5LT5tZXRob2QgPT0gVk1XX0JPX0RJUlRZX01LV1JJVEUg JiYNCisJICAgICF0ZXN0X2JpdChwYWdlX29mZnNldCwgJnZiby0+ZGlydHktPmJpdG1hcFswXSkp IHsNCisJCXN0cnVjdCB2bXdfYm9fZGlydHkgKmRpcnR5ID0gdmJvLT5kaXJ0eTsNCisNCisJCV9f c2V0X2JpdChwYWdlX29mZnNldCwgJmRpcnR5LT5iaXRtYXBbMF0pOw0KKwkJZGlydHktPnN0YXJ0 ID0gbWluKGRpcnR5LT5zdGFydCwgcGFnZV9vZmZzZXQpOw0KKwkJZGlydHktPmVuZCA9IG1heChk aXJ0eS0+ZW5kLCBwYWdlX29mZnNldCArIDEpOw0KKwl9DQorDQorb3V0X3VubG9jazoNCisJcmVz ZXJ2YXRpb25fb2JqZWN0X3VubG9jayhiby0+cmVzdik7DQorCXJldHVybiByZXQ7DQorfQ0KKw0K Kw0KKy8qIHZtd19ib192bV9mYXVsdCAtIFRoZSB2bXdnZnggZmF1bHQoKSBjYWxsYmFjayAqLw0K K3ZtX2ZhdWx0X3Qgdm13X2JvX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQ0KK3sNCisJ c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtPnZtYTsNCisJc3RydWN0IHZtX2FyZWFf c3RydWN0IGN2bWEgPSAqdm1hOw0KKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvID0gKHN0 cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqKQ0KKwkgICAgdm1hLT52bV9wcml2YXRlX2RhdGE7DQor CXN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqdmJvID0NCisJCWNvbnRhaW5lcl9vZihibywgc3Ry dWN0IHZtd19idWZmZXJfb2JqZWN0LCBiYXNlKTsNCisJcGdvZmZfdCBudW1fcHJlZmF1bHQ7DQor CXZtX2ZhdWx0X3QgcmV0Ow0KKw0KKwlyZXQgPSB0dG1fYm9fdm1fcmVzZXJ2ZShibywgdm1mKTsN CisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCS8qDQorCSAqIFRoaXMgd2lsbCBjYXVz ZSBta3dyaXRlKCkgdG8gYmUgY2FsbGVkIGZvciBlYWNoIHB0ZSBvbg0KKwkgKiB3cml0ZS1lbmFi bGUgdm1hcy4NCisJICovDQorCWlmICh2Ym8tPmRpcnR5ICYmIHZiby0+ZGlydHktPm1ldGhvZCA9 PSBWTVdfQk9fRElSVFlfTUtXUklURSkNCisJCWN2bWEudm1fZmxhZ3MgJj0gflZNX1dSSVRFOw0K Kw0KKwludW1fcHJlZmF1bHQgPSAodm1hLT52bV9mbGFncyAmIFZNX1JBTkRfUkVBRCkgPyAwIDoN CisJCVRUTV9CT19WTV9OVU1fUFJFRkFVTFQ7DQorCXJldCA9IHR0bV9ib192bV9mYXVsdF9yZXNl cnZlZCh2bWYsICZjdm1hLCBudW1fcHJlZmF1bHQpOw0KKwlpZiAocmV0ID09IFZNX0ZBVUxUX1JF VFJZICYmICEodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUKSkNCisJCXJldHVy biByZXQ7DQorDQorCXJlc2VydmF0aW9uX29iamVjdF91bmxvY2soYm8tPnJlc3YpOw0KKwlyZXR1 cm4gcmV0Ow0KK30NCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9y ZXNvdXJjZS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYw0KaW5k ZXggODg5ODFjNGRiYWUzLi5kMzVmNGJkMzJjZDkgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jDQorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4 L3Ztd2dmeF9yZXNvdXJjZS5jDQpAQCAtMTIxLDYgKzEyMSwxMCBAQCBzdGF0aWMgdm9pZCB2bXdf cmVzb3VyY2VfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikNCiAJCX0NCiAJCXJlcy0+YmFja3Vw X2RpcnR5ID0gZmFsc2U7DQogCQl2bXdfcmVzb3VyY2VfbW9iX2RldGFjaChyZXMpOw0KKwkJaWYg KHJlcy0+ZGlydHkpDQorCQkJcmVzLT5mdW5jLT5kaXJ0eV9mcmVlKHJlcyk7DQorCQlpZiAocmVz LT5jb2hlcmVudCkNCisJCQl2bXdfYm9fZGlydHlfcmVsZWFzZShyZXMtPmJhY2t1cCk7DQogCQl0 dG1fYm9fdW5yZXNlcnZlKGJvKTsNCiAJCXZtd19ib191bnJlZmVyZW5jZSgmcmVzLT5iYWNrdXAp Ow0KIAl9DQpAQCAtMjEwLDcgKzIxNCw5IEBAIGludCB2bXdfcmVzb3VyY2VfaW5pdChzdHJ1Y3Qg dm13X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsDQogCXJlcy0+ YmFja3VwX29mZnNldCA9IDA7DQogCXJlcy0+YmFja3VwX2RpcnR5ID0gZmFsc2U7DQogCXJlcy0+ cmVzX2RpcnR5ID0gZmFsc2U7DQorCXJlcy0+Y29oZXJlbnQgPSBmYWxzZTsNCiAJcmVzLT51c2Vk X3ByaW8gPSAzOw0KKwlyZXMtPmRpcnR5ID0gTlVMTDsNCiAJaWYgKGRlbGF5X2lkKQ0KIAkJcmV0 dXJuIDA7DQogCWVsc2UNCkBAIC0zOTcsNiArNDAzLDMwIEBAIHN0YXRpYyBpbnQgdm13X3Jlc291 cmNlX2RvX3ZhbGlkYXRlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywNCiAJCQl2bXdfcmVzb3Vy Y2VfbW9iX2F0dGFjaChyZXMpOw0KIAl9DQogDQorCS8qDQorCSAqIEhhbmRsZSB0aGUgY2FzZSB3 aGVyZSB0aGUgYmFja3VwIG1vYiBpcyBtYXJrZWQgY29oZXJlbnQgYnV0DQorCSAqIHRoZSByZXNv dXJjZSBpc24ndC4NCisJICovDQorCWlmIChmdW5jLT5kaXJ0eV9hbGxvYyAmJiB2bXdfcmVzb3Vy Y2VfbW9iX2F0dGFjaGVkKHJlcykgJiYNCisJICAgICFyZXMtPmNvaGVyZW50KSB7DQorCQlpZiAo cmVzLT5iYWNrdXAtPmRpcnR5ICYmICFyZXMtPmRpcnR5KSB7DQorCQkJcmV0ID0gZnVuYy0+ZGly dHlfYWxsb2MocmVzKTsNCisJCQlpZiAocmV0KQ0KKwkJCQlyZXR1cm4gcmV0Ow0KKwkJfSBlbHNl IGlmICghcmVzLT5iYWNrdXAtPmRpcnR5ICYmIHJlcy0+ZGlydHkpIHsNCisJCQlmdW5jLT5kaXJ0 eV9mcmVlKHJlcyk7DQorCQl9DQorCX0NCisNCisJLyoNCisJICogVHJhbnNmZXIgdGhlIGRpcnR5 IHJlZ2lvbnMgdG8gdGhlIHJlc291cmNlIGFuZCB1cGRhdGUNCisJICogdGhlIHJlc291cmNlLg0K KwkgKi8NCisJaWYgKHJlcy0+ZGlydHkpIHsNCisJCXZtd19ib19kaXJ0eV90cmFuc2Zlcl90b19y ZXMocmVzKTsNCisJCXJldHVybiBmdW5jLT5kaXJ0eV9zeW5jKHJlcyk7DQorCX0NCisNCiAJcmV0 dXJuIDA7DQogDQogb3V0X2JpbmRfZmFpbGVkOg0KQEAgLTQzNSwxNiArNDY1LDI4IEBAIHZvaWQg dm13X3Jlc291cmNlX3VucmVzZXJ2ZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsDQogCWlmIChz d2l0Y2hfYmFja3VwICYmIG5ld19iYWNrdXAgIT0gcmVzLT5iYWNrdXApIHsNCiAJCWlmIChyZXMt PmJhY2t1cCkgew0KIAkJCXZtd19yZXNvdXJjZV9tb2JfZGV0YWNoKHJlcyk7DQorCQkJaWYgKHJl cy0+Y29oZXJlbnQpDQorCQkJCXZtd19ib19kaXJ0eV9yZWxlYXNlKHJlcy0+YmFja3VwKTsNCiAJ CQl2bXdfYm9fdW5yZWZlcmVuY2UoJnJlcy0+YmFja3VwKTsNCiAJCX0NCiANCiAJCWlmIChuZXdf YmFja3VwKSB7DQogCQkJcmVzLT5iYWNrdXAgPSB2bXdfYm9fcmVmZXJlbmNlKG5ld19iYWNrdXAp Ow0KKw0KKwkJCS8qDQorCQkJICogVGhlIHZhbGlkYXRpb24gY29kZSBzaG91bGQgYWxyZWFkeSBo YXZlIGFkZGVkIGENCisJCQkgKiBkaXJ0eSB0cmFja2VyIGhlcmUuDQorCQkJICovDQorCQkJV0FS Tl9PTihyZXMtPmNvaGVyZW50ICYmICFuZXdfYmFja3VwLT5kaXJ0eSk7DQorDQogCQkJdm13X3Jl c291cmNlX21vYl9hdHRhY2gocmVzKTsNCiAJCX0gZWxzZSB7DQogCQkJcmVzLT5iYWNrdXAgPSBO VUxMOw0KIAkJfQ0KKwl9IGVsc2UgaWYgKHN3aXRjaF9iYWNrdXAgJiYgcmVzLT5jb2hlcmVudCkg ew0KKwkJdm13X2JvX2RpcnR5X3JlbGVhc2UocmVzLT5iYWNrdXApOw0KIAl9DQorDQogCWlmIChz d2l0Y2hfYmFja3VwKQ0KIAkJcmVzLT5iYWNrdXBfb2Zmc2V0ID0gbmV3X2JhY2t1cF9vZmZzZXQ7 DQogDQpAQCAtMTAwOSwzICsxMDUxLDE4IEBAIGVudW0gdm13X3Jlc190eXBlIHZtd19yZXNfdHlw ZShjb25zdCBzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpDQogew0KIAlyZXR1cm4gcmVzLT5mdW5j LT5yZXNfdHlwZTsNCiB9DQorDQorLyoqDQorICogdm13X3Jlc291cmNlX3VwZGF0ZV9kaXJ0eSAt IFVwZGF0ZSBhIHJlc291cmNlJ3MgZGlydHkgdHJhY2tlciB3aXRoIGENCisgKiBzZXF1ZW50aWFs IHJhbmdlIG9mIHRvdWNoZWQgYmFja2luZyBzdG9yZSBtZW1vcnkuDQorICogQHJlczogVGhlIHJl c291cmNlLg0KKyAqIEBzdGFydDogVGhlIGZpcnN0IHBhZ2UgdG91Y2hlZC4NCisgKiBAZW5kOiBU aGUgbGFzdCBwYWdlIHRvdWNoZWQgKyAxLg0KKyAqLw0KK3ZvaWQgdm13X3Jlc291cmNlX2RpcnR5 X3VwZGF0ZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsIHBnb2ZmX3Qgc3RhcnQsDQorCQkJICAg ICAgIHBnb2ZmX3QgZW5kKQ0KK3sNCisJaWYgKHJlcy0+ZGlydHkpDQorCQlyZXMtPmZ1bmMtPmRp cnR5X3JhbmdlX2FkZChyZXMsIHN0YXJ0IDw8IFBBR0VfU0hJRlQsDQorCQkJCQkgICBlbmQgPDwg UEFHRV9TSElGVCk7DQorfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X3Jlc291cmNlX3ByaXYuaCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291 cmNlX3ByaXYuaA0KaW5kZXggOTg0ZTU4OGM2MmNhLi5jODUxNDQyODZjZmUgMTAwNjQ0DQotLS0g YS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZV9wcml2LmgNCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlX3ByaXYuaA0KQEAgLTcxLDYgKzcx LDEyIEBAIHN0cnVjdCB2bXdfdXNlcl9yZXNvdXJjZV9jb252IHsNCiAgKiBAY29tbWl0X25vdGlm eTogICAgIElmIHRoZSByZXNvdXJjZSBpcyBhIGNvbW1hbmQgYnVmZmVyIG1hbmFnZWQgcmVzb3Vy Y2UsDQogICogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayB0byBub3RpZnkgdGhhdCBhIGRl ZmluZSBvciByZW1vdmUgY29tbWFuZA0KICAqICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4g Y29tbWl0dGVkIHRvIHRoZSBkZXZpY2UuDQorICogQGRpcnR5X2FsbG9jOiAgICAgICBBbGxvY2F0 ZSBhIGRpcnR5IHRyYWNrZXIuIE5VTEwgaWYgZGlydHktdHJhY2tpbmcgaXMgbm90DQorICogICAg ICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQuDQorICogQGRpcnR5X2ZyZWU6ICAgICAgICBGcmVl IHRoZSBkaXJ0eSB0cmFja2VyLg0KKyAqIEBkaXJ0eV9zeW5jOiAgICAgICAgVXBsb2FkIHRoZSBk aXJ0eSBtb2IgY29udGVudHMgdG8gdGhlIHJlc291cmNlLg0KKyAqIEBkaXJ0eV9hZGRfcmFuZ2U6 ICAgQWRkIGEgc2VxdWVudGlhbCBkaXJ0eSByYW5nZSB0byB0aGUgcmVzb3VyY2UNCisgKiAgICAg ICAgICAgICAgICAgICAgIGRpcnR5IHRyYWNrZXIuDQogICovDQogc3RydWN0IHZtd19yZXNfZnVu YyB7DQogCWVudW0gdm13X3Jlc190eXBlIHJlc190eXBlOw0KQEAgLTkwLDYgKzk2LDExIEBAIHN0 cnVjdCB2bXdfcmVzX2Z1bmMgew0KIAkJICAgICAgIHN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVy ICp2YWxfYnVmKTsNCiAJdm9pZCAoKmNvbW1pdF9ub3RpZnkpKHN0cnVjdCB2bXdfcmVzb3VyY2Ug KnJlcywNCiAJCQkgICAgICBlbnVtIHZtd19jbWRidWZfcmVzX3N0YXRlIHN0YXRlKTsNCisJaW50 ICgqZGlydHlfYWxsb2MpKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyk7DQorCXZvaWQgKCpkaXJ0 eV9mcmVlKShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpOw0KKwlpbnQgKCpkaXJ0eV9zeW5jKShz dHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpOw0KKwl2b2lkICgqZGlydHlfcmFuZ2VfYWRkKShzdHJ1 Y3Qgdm13X3Jlc291cmNlICpyZXMsIHNpemVfdCBzdGFydCwNCisJCQkJIHNpemVfdCBlbmQpOw0K IH07DQogDQogLyoqDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhf dmFsaWRhdGlvbi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfdmFsaWRhdGlvbi5j DQppbmRleCBmNjExYjIyOTBhMWIuLjViMGM5MjhiYjViYSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvdm13Z2Z4X3ZhbGlkYXRpb24uYw0KKysrIGIvZHJpdmVycy9ncHUvZHJt L3Ztd2dmeC92bXdnZnhfdmFsaWRhdGlvbi5jDQpAQCAtMzMsOCArMzMsMTMgQEANCiAgKiBzdHJ1 Y3Qgdm13X3ZhbGlkYXRpb25fYm9fbm9kZSAtIEJ1ZmZlciBvYmplY3QgdmFsaWRhdGlvbiBtZXRh ZGF0YS4NCiAgKiBAYmFzZTogTWV0YWRhdGEgdXNlZCBmb3IgVFRNIHJlc2VydmF0aW9uLSBhbmQg dmFsaWRhdGlvbi4NCiAgKiBAaGFzaDogQSBoYXNoIGVudHJ5IHVzZWQgZm9yIHRoZSBkdXBsaWNh dGUgZGV0ZWN0aW9uIGhhc2ggdGFibGUuDQorICogQGNvaGVyZW50X2NvdW50OiBJZiBzd2l0Y2hp bmcgYmFja3VwIGJ1ZmZlcnMsIG51bWJlciBvZiBuZXcgY29oZXJlbnQNCisgKiByZXNvdXJjZXMg dGhhdCB3aWxsIGhhdmUgdGhpcyBidWZmZXIgYXMgYSBiYWNrdXAgYnVmZmVyLg0KICAqIEBhc19t b2I6IFZhbGlkYXRlIGFzIG1vYi4NCiAgKiBAY3B1X2JsaXQ6IFZhbGlkYXRlIGZvciBjcHUgYmxp dCBhY2Nlc3MuDQorICogQGNvaGVyZW50X2FsbG9jZWQ6IEluIHN3aXRjaGluZyBiYWNrdXAgYnVm ZmVycyBmb3IgY29oZXJlbnQgcmVzb3VyY2VzOg0KKyAqIFRoZSBibyBkaXJ0eSB0cmFja2VyIGhh cyBiZWVuIGFsbG9jYXRlZCBhbmQgbmVlZHMgdG8gYmUgZnJlZWQgaWYNCisgKiByZXZlcnRpbmcu DQogICoNCiAgKiBCaXQgZmllbGRzIGFyZSB1c2VkIHNpbmNlIHRoZXNlIHN0cnVjdHVyZXMgYXJl IGFsbG9jYXRlZCBhbmQgZnJlZWQgaW4NCiAgKiBsYXJnZSBudW1iZXJzIGFuZCBzcGFjZSBjb25z ZXJ2YXRpb24gaXMgZGVzaXJlZC4NCkBAIC00Miw2ICs0Nyw3IEBADQogc3RydWN0IHZtd192YWxp ZGF0aW9uX2JvX25vZGUgew0KIAlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciBiYXNlOw0KIAlz dHJ1Y3QgZHJtX2hhc2hfaXRlbSBoYXNoOw0KKwl1bnNpZ25lZCBpbnQgY29oZXJlbnRfY291bnQ7 DQogCXUzMiBhc19tb2IgOiAxOw0KIAl1MzIgY3B1X2JsaXQgOiAxOw0KIH07DQpAQCAtNDU5LDYg KzQ2NSwxOSBAQCBpbnQgdm13X3ZhbGlkYXRpb25fcmVzX3Jlc2VydmUoc3RydWN0IHZtd192YWxp ZGF0aW9uX2NvbnRleHQgKmN0eCwNCiAJCQlpZiAocmV0KQ0KIAkJCQlnb3RvIG91dF91bnJlc2Vy dmU7DQogCQl9DQorDQorCQlpZiAodmFsLT5zd2l0Y2hpbmdfYmFja3VwICYmIHZhbC0+bmV3X2Jh Y2t1cCAmJg0KKwkJICAgIHJlcy0+Y29oZXJlbnQpIHsNCisJCQlzdHJ1Y3Qgdm13X3ZhbGlkYXRp b25fYm9fbm9kZSAqYm9fbm9kZSA9DQorCQkJCXZtd192YWxpZGF0aW9uX2ZpbmRfYm9fZHVwKGN0 eCwNCisJCQkJCQkJICAgdmFsLT5uZXdfYmFja3VwKTsNCisNCisJCQlpZiAoV0FSTl9PTighYm9f bm9kZSkpIHsNCisJCQkJcmV0ID0gLUVJTlZBTDsNCisJCQkJZ290byBvdXRfdW5yZXNlcnZlOw0K KwkJCX0NCisJCQlib19ub2RlLT5jb2hlcmVudF9jb3VudCsrOw0KKwkJfQ0KIAl9DQogDQogCXJl dHVybiAwOw0KQEAgLTU2Miw2ICs1ODEsOSBAQCBpbnQgdm13X3ZhbGlkYXRpb25fYm9fdmFsaWRh dGUoc3RydWN0IHZtd192YWxpZGF0aW9uX2NvbnRleHQgKmN0eCwgYm9vbCBpbnRyKQ0KIAlpbnQg cmV0Ow0KIA0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmY3R4LT5ib19saXN0LCBiYXNl LmhlYWQpIHsNCisJCXN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqdmJvID0NCisJCQljb250YWlu ZXJfb2YoZW50cnktPmJhc2UuYm8sIHR5cGVvZigqdmJvKSwgYmFzZSk7DQorDQogCQlpZiAoZW50 cnktPmNwdV9ibGl0KSB7DQogCQkJc3RydWN0IHR0bV9vcGVyYXRpb25fY3R4IGN0eCA9IHsNCiAJ CQkJLmludGVycnVwdGlibGUgPSBpbnRyLA0KQEAgLTU3Niw2ICs1OTgsMjcgQEAgaW50IHZtd192 YWxpZGF0aW9uX2JvX3ZhbGlkYXRlKHN0cnVjdCB2bXdfdmFsaWRhdGlvbl9jb250ZXh0ICpjdHgs IGJvb2wgaW50cikNCiAJCX0NCiAJCWlmIChyZXQpDQogCQkJcmV0dXJuIHJldDsNCisNCisJCS8q DQorCQkgKiBSYXRoZXIgdGhhbiBoYXZpbmcgdGhlIHJlc291cmNlIGNvZGUgYWxsb2NhdGluZyB0 aGUgYm8NCisJCSAqIGRpcnR5IHRyYWNrZXIgaW4gcmVzb3VyY2VfdW5yZXNlcnZlKCkgd2hlcmUg d2UgY2FuJ3QgZmFpbCwNCisJCSAqIERvIGl0IGhlcmUgd2hlbiB2YWxpZGF0aW5nIHRoZSBidWZm ZXIgb2JqZWN0Lg0KKwkJICovDQorCQlpZiAoZW50cnktPmNvaGVyZW50X2NvdW50KSB7DQorCQkJ dW5zaWduZWQgaW50IGNvaGVyZW50X2NvdW50ID0gZW50cnktPmNvaGVyZW50X2NvdW50Ow0KKw0K KwkJCXdoaWxlIChjb2hlcmVudF9jb3VudCkgew0KKwkJCQlyZXQgPSB2bXdfYm9fZGlydHlfYWRk KHZibyk7DQorCQkJCWlmIChyZXQpDQorCQkJCQlyZXR1cm4gcmV0Ow0KKw0KKwkJCQljb2hlcmVu dF9jb3VudC0tOw0KKwkJCX0NCisJCQllbnRyeS0+Y29oZXJlbnRfY291bnQgLT0gY29oZXJlbnRf Y291bnQ7DQorCQl9DQorDQorCQlpZiAodmJvLT5kaXJ0eSkNCisJCQl2bXdfYm9fZGlydHlfc2Nh bih2Ym8pOw0KIAl9DQogCXJldHVybiAwOw0KIH0NCkBAIC04MjgsMyArODcxLDM0IEBAIGludCB2 bXdfdmFsaWRhdGlvbl9wcmVsb2FkX3JlcyhzdHJ1Y3Qgdm13X3ZhbGlkYXRpb25fY29udGV4dCAq Y3R4LA0KIAljdHgtPm1lbV9zaXplX2xlZnQgKz0gc2l6ZTsNCiAJcmV0dXJuIDA7DQogfQ0KKw0K Ky8qKg0KKyAqIHZtd192YWxpZGF0aW9uX2JvX2JhY2tvZmYgLSBVbnJlc2VydmUgYnVmZmVyIG9i amVjdHMgcmVnaXN0ZXJlZCB3aXRoIGENCisgKiB2YWxpZGF0aW9uIGNvbnRleHQNCisgKiBAY3R4 OiBUaGUgdmFsaWRhdGlvbiBjb250ZXh0DQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIHVucmVzZXJ2 ZXMgdGhlIGJ1ZmZlciBvYmplY3RzIHByZXZpb3VzbHkgcmVzZXJ2ZWQgdXNpbmcNCisgKiB2bXdf dmFsaWRhdGlvbl9ib19yZXNlcnZlLiBJdCdzIHR5cGljYWxseSB1c2VkIGFzIHBhcnQgb2YgYW4g ZXJyb3IgcGF0aA0KKyAqLw0KK3ZvaWQgdm13X3ZhbGlkYXRpb25fYm9fYmFja29mZihzdHJ1Y3Qg dm13X3ZhbGlkYXRpb25fY29udGV4dCAqY3R4KQ0KK3sNCisJc3RydWN0IHZtd192YWxpZGF0aW9u X2JvX25vZGUgKmVudHJ5Ow0KKw0KKwkvKg0KKwkgKiBTd2l0Y2hpbmcgY29oZXJlbnQgcmVzb3Vy Y2UgYmFja3VwIGJ1ZmZlcnMgZmFpbGVkLg0KKwkgKiBSZWxlYXNlIGNvcnJlc3BvbmRpbmcgYnVm ZmVyIG9iamVjdCBkaXJ0eSB0cmFja2Vycy4NCisJICovDQorCWxpc3RfZm9yX2VhY2hfZW50cnko ZW50cnksICZjdHgtPmJvX2xpc3QsIGJhc2UuaGVhZCkgew0KKwkJaWYgKGVudHJ5LT5jb2hlcmVu dF9jb3VudCkgew0KKwkJCXVuc2lnbmVkIGludCBjb2hlcmVudF9jb3VudCA9IGVudHJ5LT5jb2hl cmVudF9jb3VudDsNCisJCQlzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibyA9DQorCQkJCWNv bnRhaW5lcl9vZihlbnRyeS0+YmFzZS5ibywgdHlwZW9mKCp2Ym8pLA0KKwkJCQkJICAgICBiYXNl KTsNCisNCisJCQl3aGlsZSAoY29oZXJlbnRfY291bnQtLSkNCisJCQkJdm13X2JvX2RpcnR5X3Jl bGVhc2UodmJvKTsNCisJCX0NCisJfQ0KKw0KKwl0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbigm Y3R4LT50aWNrZXQsICZjdHgtPmJvX2xpc3QpOw0KK30NCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vdm13Z2Z4L3Ztd2dmeF92YWxpZGF0aW9uLmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4 L3Ztd2dmeF92YWxpZGF0aW9uLmgNCmluZGV4IDUyM2Y2YWM1YzMzNS4uMDU4YzdmMmZiZjgzIDEw MDY0NA0KLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfdmFsaWRhdGlvbi5oDQor KysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF92YWxpZGF0aW9uLmgNCkBAIC0xNzIs MjAgKzE3Miw2IEBAIHZtd192YWxpZGF0aW9uX2JvX3Jlc2VydmUoc3RydWN0IHZtd192YWxpZGF0 aW9uX2NvbnRleHQgKmN0eCwNCiAJCQkJICAgICAgTlVMTCk7DQogfQ0KIA0KLS8qKg0KLSAqIHZt d192YWxpZGF0aW9uX2JvX2JhY2tvZmYgLSBVbnJlc2VydmUgYnVmZmVyIG9iamVjdHMgcmVnaXN0 ZXJlZCB3aXRoIGENCi0gKiB2YWxpZGF0aW9uIGNvbnRleHQNCi0gKiBAY3R4OiBUaGUgdmFsaWRh dGlvbiBjb250ZXh0DQotICoNCi0gKiBUaGlzIGZ1bmN0aW9uIHVucmVzZXJ2ZXMgdGhlIGJ1ZmZl ciBvYmplY3RzIHByZXZpb3VzbHkgcmVzZXJ2ZWQgdXNpbmcNCi0gKiB2bXdfdmFsaWRhdGlvbl9i b19yZXNlcnZlLiBJdCdzIHR5cGljYWxseSB1c2VkIGFzIHBhcnQgb2YgYW4gZXJyb3IgcGF0aA0K LSAqLw0KLXN0YXRpYyBpbmxpbmUgdm9pZA0KLXZtd192YWxpZGF0aW9uX2JvX2JhY2tvZmYoc3Ry dWN0IHZtd192YWxpZGF0aW9uX2NvbnRleHQgKmN0eCkNCi17DQotCXR0bV9ldV9iYWNrb2ZmX3Jl c2VydmF0aW9uKCZjdHgtPnRpY2tldCwgJmN0eC0+Ym9fbGlzdCk7DQotfQ0KLQ0KIC8qKg0KICAq IHZtd192YWxpZGF0aW9uX2JvX2ZlbmNlIC0gVW5yZXNlcnZlIGFuZCBmZW5jZSBidWZmZXIgb2Jq ZWN0cyByZWdpc3RlcmVkDQogICogd2l0aCBhIHZhbGlkYXRpb24gY29udGV4dA0KQEAgLTI2OCw0 ICsyNTQsNiBAQCBpbnQgdm13X3ZhbGlkYXRpb25fcHJlbG9hZF9yZXMoc3RydWN0IHZtd192YWxp ZGF0aW9uX2NvbnRleHQgKmN0eCwNCiAJCQkgICAgICAgdW5zaWduZWQgaW50IHNpemUpOw0KIHZv aWQgdm13X3ZhbGlkYXRpb25fcmVzX3NldF9kaXJ0eShzdHJ1Y3Qgdm13X3ZhbGlkYXRpb25fY29u dGV4dCAqY3R4LA0KIAkJCQkgIHZvaWQgKnZhbF9wcml2YXRlLCB1MzIgZGlydHkpOw0KK3ZvaWQg dm13X3ZhbGlkYXRpb25fYm9fYmFja29mZihzdHJ1Y3Qgdm13X3ZhbGlkYXRpb25fY29udGV4dCAq Y3R4KTsNCisNCiAjZW5kaWYNCi0tIA0KMi4yMC4xDQoNCg==