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=-6.8 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=unavailable 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 E56FAC3A5A6 for ; Thu, 19 Sep 2019 10:53:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 80837217D6 for ; Thu, 19 Sep 2019 10:53:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="jHUe1YnV" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389666AbfISKxU (ORCPT ); Thu, 19 Sep 2019 06:53:20 -0400 Received: from mail-eopbgr730082.outbound.protection.outlook.com ([40.107.73.82]:1632 "EHLO NAM05-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2389596AbfISKxN (ORCPT ); Thu, 19 Sep 2019 06:53:13 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dkfZ9IkH1szwmuliMKtySAuVPaPUjZmcblJR1cFyGZWq4Uxz8jk+zVNpRFCcRRXv5pSi/5TlRQemBb7tCzPHrEEco7iSzRrPcNSSPowic9Xby619mcgkcnJXk1Lhhvfa+ReKsVRV1yg9OB2VupFFYe2ZP5B0GA5tiYZamkhDUqacaKCef0Iw8FeZ96Z7uDzBaK9jK/J+MzKv4pbSgutRFLzYN3UYf5/ZXfdb2zmtTJQ/tBK4Mudz0Ye+WExGISx0Oa7voexdI4b8NUrdHBYVw24NjlrYIMrWk9v41WKBA2aGOBJqVUI6c2z6PaPnxCOVbw1+JZONaCkl+1ZBzwQ8KQ== 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=Sf3aFPreAFmK8X8gCaDkkhXHeFuduszHvMizxWgML88=; b=ZU4LRhQKaPussh99z8GCr/7VkP5vJp/3cPV5A1sp6es7QZtEJl6MrSAuZYhr8Mb5efTa15T9YsKQKRVjFoY6jHgmm1BKWZPbzR4OBaDOz5i7oMR59HpdSnFQ4mudaoj8JEpBUbJQYx3hLYRulojF2qlLJDFRf222JQqorB5umkDDwWKYvmohQejvZ9UkQdNJDzysQTchXVmNAC2phUmHjO+FOTlnmgD5aQ97JtWH6ZFR4+KkebZISs6+OhCvlifEk+cIhGIsEhFMx9ybbQlaEOuYHdTM6Sjn+UUfCCIx30w4rpsZ5zzGzgIVhX8T38OoZlFsr6bPQclw77LhljyWFw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Sf3aFPreAFmK8X8gCaDkkhXHeFuduszHvMizxWgML88=; b=jHUe1YnV+wyqJX7kJt30p72BHxltVDJ/DKnX/x4E3c2AJqRmFBCIf0m3yef8KtIV5Kzy1BWU/WYHdFTxwVXh22ojJjEEJuaXc40TCOniihuho2d3aaLJapI3WUHCT+RNzegPYdPY5FK1AuJgSAg02It6aPpIkzR4JYV9Vg9P/fE= Received: from MN2PR11MB4063.namprd11.prod.outlook.com (20.179.149.217) by MN2PR11MB4415.namprd11.prod.outlook.com (52.135.39.95) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.17; Thu, 19 Sep 2019 10:52:46 +0000 Received: from MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::45dc:e073:4446:4bf8]) by MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::45dc:e073:4446:4bf8%3]) with mapi id 15.20.2263.023; Thu, 19 Sep 2019 10:52:46 +0000 From: Jerome Pouiller To: "devel@driverdev.osuosl.org" , "linux-wireless@vger.kernel.org" CC: "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , David Le Goff , Jerome Pouiller Subject: [PATCH 20/20] staging: wfx: implement the rest of mac80211 API Thread-Topic: [PATCH 20/20] staging: wfx: implement the rest of mac80211 API Thread-Index: AQHVbtheGs4T+FlEkE6qtw/D5YowOA== Date: Thu, 19 Sep 2019 10:52:44 +0000 Message-ID: <20190919105153.15285-21-Jerome.Pouiller@silabs.com> References: <20190919105153.15285-1-Jerome.Pouiller@silabs.com> In-Reply-To: <20190919105153.15285-1-Jerome.Pouiller@silabs.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=Jerome.Pouiller@silabs.com; x-originating-ip: [37.71.187.125] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0c7e0da2-b5cb-4a42-12ee-08d73cef817a x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);SRVR:MN2PR11MB4415; x-ms-traffictypediagnostic: MN2PR11MB4415: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:117; x-forefront-prvs: 016572D96D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(1496009)(346002)(396003)(366004)(39850400004)(376002)(136003)(189003)(199004)(14454004)(71190400001)(2906002)(81156014)(81166006)(478600001)(316002)(2501003)(64756008)(76176011)(66476007)(256004)(86362001)(66446008)(99286004)(25786009)(8676002)(66556008)(66946007)(11346002)(6512007)(110136005)(66574012)(5660300002)(54906003)(30864003)(6436002)(71200400001)(14444005)(76116006)(3846002)(6506007)(91956017)(1076003)(6116002)(486006)(305945005)(36756003)(2616005)(446003)(4326008)(7736002)(8936002)(66066001)(186003)(107886003)(26005)(476003)(6486002)(102836004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:MN2PR11MB4415;H:MN2PR11MB4063.namprd11.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: silabs.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 3wXD8OlS5Y4SCtMuwOvJQS1WTYK3QeEwcef9bMZ28LhGI0UY+uje9lDpAltfr+f8F5Vj3X57wvuip7UbmLXw4Iv7RP0i/fB235r45Fqjbqv+vV21Ec6VbkZ5hn8yHhnuODHhVa98qHJhg+3qVQwUJgQmDX56pZnKkKQr7v59OQqeOZeQys3zTV/OOYkbvj5htWsYARRQaTsbTr1dDp67hUr6OT8/YMawlvp2aNdByeF4si3fVM4ViEkAo64nCEb24KDc6GZyw5Yc9TQNOHb36SptjJesZlq07aSd8eiQlSBCC7Wrp3miIFhvbm8wXehW7Us/MwL4tno+z62VmiAxet/eSvF0BpvQDlxFwwmqsGmJr6HFxJi4RhbiA0PnkNmy05XjrsyiiPBtjBmfRNm6fp/Tzu1+wFA6HMeB0qWnFBQ= Content-Type: text/plain; charset="utf-8" Content-ID: <0686155FF638104FBD0FA28E9CD46A56@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0c7e0da2-b5cb-4a42-12ee-08d73cef817a X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 10:52:44.8604 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 1PpX95/3VBv4i2ZmwIFmHLzOTQiBIMXDw9WcB16lSdh7Se2moo4gYf5bg1LCUJlxEgMDCzLmH0ZSgR7nUVj4dg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4415 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPg0KDQpT aWduZWQtb2ZmLWJ5OiBKw6lyw7RtZSBQb3VpbGxlciA8amVyb21lLnBvdWlsbGVyQHNpbGFicy5j b20+DQotLS0NCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfcnguYyB8ICAgMjYgKw0KIGRyaXZl cnMvc3RhZ2luZy93ZngvZGF0YV90eC5jIHwgICAxNiArDQogZHJpdmVycy9zdGFnaW5nL3dmeC9k ZWJ1Zy5jICAgfCAgICAyICsNCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9yeC5jICB8ICAgNTMg KysNCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5jICB8ICAgIDEgKw0KIGRyaXZlcnMvc3Rh Z2luZy93ZngvbWFpbi5jICAgIHwgIDEzNyArKysNCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3F1ZXVl LmMgICB8ICAgODAgKysNCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uYyAgICB8ICAgNDAgKw0K IGRyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmMgICAgIHwgMTQ3MiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0NCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5oICAgICB8ICAgODAgKysN CiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3dmeC5oICAgICB8ICAgNjAgKysNCiAxMSBmaWxlcyBjaGFu Z2VkLCAxOTY0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV9y eC5jDQppbmRleCA2NTQ0ZDAwZDE2NTcuLjBkNzNiNTJlZWUzNiAxMDA2NDQNCi0tLSBhL2RyaXZl cnMvc3RhZ2luZy93ZngvZGF0YV9yeC5jDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFf cnguYw0KQEAgLTIyLDYgKzIyLDggQEAgc3RhdGljIGludCB3ZnhfaGFuZGxlX3BzcG9sbChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCiAJdTMyIHBzcG9sbF9tYXNr ID0gMDsNCiAJaW50IGk7DQogDQorCWlmICh3dmlmLT5zdGF0ZSAhPSBXRlhfU1RBVEVfQVApDQor CQlyZXR1cm4gMTsNCiAJaWYgKCFldGhlcl9hZGRyX2VxdWFsKHd2aWYtPnZpZi0+YWRkciwgcHNw b2xsLT5ic3NpZCkpDQogCQlyZXR1cm4gMTsNCiANCkBAIC0xNjcsNiArMTY5LDMwIEBAIHZvaWQg d2Z4X3J4X2NiKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3QgaGlmX2luZF9yeCAqYXJnLCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiDQogCSAgICAmJiBhcmctPnJ4X2ZsYWdzLm1hdGNoX3VjX2FkZHIN CiAJICAgICYmIG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfQkFDSykN CiAJCWdvdG8gZHJvcDsNCisJaWYgKGllZWU4MDIxMV9pc19iZWFjb24oZnJhbWUtPmZyYW1lX2Nv bnRyb2wpDQorCSAgICAmJiAhYXJnLT5zdGF0dXMgJiYgd3ZpZi0+dmlmDQorCSAgICAmJiBldGhl cl9hZGRyX2VxdWFsKGllZWU4MDIxMV9nZXRfU0EoZnJhbWUpLCB3dmlmLT52aWYtPmJzc19jb25m LmJzc2lkKSkgew0KKwkJY29uc3QgdTggKnRpbV9pZTsNCisJCXU4ICppZXMgPSBtZ210LT51LmJl YWNvbi52YXJpYWJsZTsNCisJCXNpemVfdCBpZXNfbGVuID0gc2tiLT5sZW4gLSAoaWVzIC0gc2ti LT5kYXRhKTsNCisNCisJCXRpbV9pZSA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfVElNLCBp ZXMsIGllc19sZW4pOw0KKwkJaWYgKHRpbV9pZSkgew0KKwkJCXN0cnVjdCBpZWVlODAyMTFfdGlt X2llICp0aW0gPSAoc3RydWN0IGllZWU4MDIxMV90aW1faWUgKikgJnRpbV9pZVsyXTsNCisNCisJ CQlpZiAod3ZpZi0+ZHRpbV9wZXJpb2QgIT0gdGltLT5kdGltX3BlcmlvZCkgew0KKwkJCQl3dmlm LT5kdGltX3BlcmlvZCA9IHRpbS0+ZHRpbV9wZXJpb2Q7DQorCQkJCXNjaGVkdWxlX3dvcmsoJnd2 aWYtPnNldF9iZWFjb25fd2FrZXVwX3BlcmlvZF93b3JrKTsNCisJCQl9DQorCQl9DQorDQorCQkv KiBEaXNhYmxlIGJlYWNvbiBmaWx0ZXIgb25jZSB3ZSdyZSBhc3NvY2lhdGVkLi4uICovDQorCQlp ZiAod3ZpZi0+ZGlzYWJsZV9iZWFjb25fZmlsdGVyICYmDQorCQkgICAgKHd2aWYtPnZpZi0+YnNz X2NvbmYuYXNzb2MgfHwgd3ZpZi0+dmlmLT5ic3NfY29uZi5pYnNzX2pvaW5lZCkpIHsNCisJCQl3 dmlmLT5kaXNhYmxlX2JlYWNvbl9maWx0ZXIgPSBmYWxzZTsNCisJCQlzY2hlZHVsZV93b3JrKCZ3 dmlmLT51cGRhdGVfZmlsdGVyaW5nX3dvcmspOw0KKwkJfQ0KKwl9DQogDQogCWlmIChlYXJseV9k YXRhKSB7DQogCQlzcGluX2xvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KZGlmZiAtLWdp dCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9k YXRhX3R4LmMNCmluZGV4IDIxN2QzYzI3MDcwNi4uN2YyNzk5ZmJkYWZlIDEwMDY0NA0KLS0tIGEv ZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmMNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93Zngv ZGF0YV90eC5jDQpAQCAtMTAsNiArMTAsNyBAQA0KICNpbmNsdWRlICJkYXRhX3R4LmgiDQogI2lu Y2x1ZGUgIndmeC5oIg0KICNpbmNsdWRlICJiaC5oIg0KKyNpbmNsdWRlICJzdGEuaCINCiAjaW5j bHVkZSAicXVldWUuaCINCiAjaW5jbHVkZSAiZGVidWcuaCINCiAjaW5jbHVkZSAidHJhY2VzLmgi DQpAQCAtMzU5LDYgKzM2MCw5IEBAIHZvaWQgd2Z4X2xpbmtfaWRfZ2Nfd29yayhzdHJ1Y3Qgd29y a19zdHJ1Y3QgKndvcmspDQogCXUzMiBtYXNrOw0KIAlpbnQgaTsNCiANCisJaWYgKHd2aWYtPnN0 YXRlICE9IFdGWF9TVEFURV9BUCkNCisJCXJldHVybjsNCisNCiAJd2Z4X3R4X2xvY2tfZmx1c2go d3ZpZi0+d2Rldik7DQogCXNwaW5fbG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQogCWZv ciAoaSA9IDA7IGkgPCBXRlhfTUFYX1NUQV9JTl9BUF9NT0RFOyArK2kpIHsNCkBAIC03MjksMTQg KzczMywyNiBAQCB2b2lkIHdmeF90eF9jb25maXJtX2NiKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBz dHJ1Y3QgaGlmX2NuZl90eCAqYXJnKQ0KIAltZW1zZXQodHhfaW5mby0+cGFkLCAwLCBzaXplb2Yo dHhfaW5mby0+cGFkKSk7DQogDQogCWlmICghYXJnLT5zdGF0dXMpIHsNCisJCWlmICh3dmlmLT5i c3NfbG9zc19zdGF0ZSAmJiBhcmctPnBhY2tldF9pZCA9PSB3dmlmLT5ic3NfbG9zc19jb25maXJt X2lkKQ0KKwkJCXdmeF9jcW1fYnNzbG9zc19zbSh3dmlmLCAwLCAxLCAwKTsNCiAJCXR4X2luZm8t PnN0YXR1cy50eF90aW1lID0gYXJnLT5tZWRpYV9kZWxheSAtIGFyZy0+dHhfcXVldWVfZGVsYXk7 DQogCQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykNCiAJCQl0 eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9OT0FDS19UUkFOU01JVFRFRDsNCiAJ CWVsc2UNCiAJCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7DQogCX0g ZWxzZSBpZiAoYXJnLT5zdGF0dXMgPT0gSElGX1JFUVVFVUUpIHsNCisJCS8qICJSRVFVRVVFIiBt ZWFucyAiaW1wbGljaXQgc3VzcGVuZCIgKi8NCisJCXN0cnVjdCBoaWZfaW5kX3N1c3BlbmRfcmVz dW1lX3R4IHN1c3BlbmQgPSB7DQorCQkJLnN1c3BlbmRfcmVzdW1lX2ZsYWdzLnJlc3VtZSA9IDAs DQorCQkJLnN1c3BlbmRfcmVzdW1lX2ZsYWdzLmJjX21jX29ubHkgPSAxLA0KKwkJfTsNCisNCiAJ CVdBUk4oIWFyZy0+dHhfcmVzdWx0X2ZsYWdzLnJlcXVldWUsICJpbmNvaGVyZW50IHN0YXR1cyBh bmQgcmVzdWx0X2ZsYWdzIik7DQorCQl3Znhfc3VzcGVuZF9yZXN1bWUod3ZpZiwgJnN1c3BlbmQp Ow0KIAkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQ7DQor CX0gZWxzZSB7DQorCQlpZiAod3ZpZi0+YnNzX2xvc3Nfc3RhdGUgJiYgYXJnLT5wYWNrZXRfaWQg PT0gd3ZpZi0+YnNzX2xvc3NfY29uZmlybV9pZCkNCisJCQl3ZnhfY3FtX2Jzc2xvc3Nfc20od3Zp ZiwgMCwgMCwgMSk7DQogCX0NCiAJd2Z4X3BlbmRpbmdfcmVtb3ZlKHd2aWYtPndkZXYsIHNrYik7 DQogfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvZGVidWcuYyBiL2RyaXZlcnMv c3RhZ2luZy93ZngvZGVidWcuYw0KaW5kZXggNGJkOWEwNzljYmQ5Li4xNDY0MjQ3MWY0YTkgMTAw NjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RlYnVnLmMNCisrKyBiL2RyaXZlcnMvc3Rh Z2luZy93ZngvZGVidWcuYw0KQEAgLTEyLDcgKzEyLDkgQEANCiANCiAjaW5jbHVkZSAiZGVidWcu aCINCiAjaW5jbHVkZSAid2Z4LmgiDQorI2luY2x1ZGUgInN0YS5oIg0KICNpbmNsdWRlICJtYWlu LmgiDQorI2luY2x1ZGUgImhpZl90eC5oIg0KICNpbmNsdWRlICJoaWZfdHhfbWliLmgiDQogDQog I2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5n L3dmeC9oaWZfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4LmMNCmluZGV4IGQzODZm YWIwYTkwZi4uNTJkYjAyZDNhYTQxIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9o aWZfcnguYw0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfcnguYw0KQEAgLTEyLDYgKzEy LDggQEANCiAjaW5jbHVkZSAiaGlmX3J4LmgiDQogI2luY2x1ZGUgIndmeC5oIg0KICNpbmNsdWRl ICJzY2FuLmgiDQorI2luY2x1ZGUgImJoLmgiDQorI2luY2x1ZGUgInN0YS5oIg0KICNpbmNsdWRl ICJkYXRhX3J4LmgiDQogI2luY2x1ZGUgInNlY3VyZV9saW5rLmgiDQogI2luY2x1ZGUgImhpZl9h cGlfY21kLmgiDQpAQCAtMTQ0LDYgKzE0Niw0MyBAQCBzdGF0aWMgaW50IGhpZl9yZWNlaXZlX2lu ZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCBoaWZfbXNnICpoaWYsIHZvaQ0K IAlyZXR1cm4gMDsNCiB9DQogDQorc3RhdGljIGludCBoaWZfZXZlbnRfaW5kaWNhdGlvbihzdHJ1 Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IGhpZl9tc2cgKmhpZiwgdm9pZCAqYnVmKQ0KK3sNCisJ c3RydWN0IHdmeF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2Up Ow0KKwlzdHJ1Y3QgaGlmX2luZF9ldmVudCAqYm9keSA9IGJ1ZjsNCisJc3RydWN0IHdmeF9oaWZf ZXZlbnQgKmV2ZW50Ow0KKwlpbnQgZmlyc3Q7DQorDQorCVdBUk5fT04oIXd2aWYpOw0KKwlpZiAo IXd2aWYpDQorCQlyZXR1cm4gMDsNCisNCisJZXZlbnQgPSBremFsbG9jKHNpemVvZigqZXZlbnQp LCBHRlBfS0VSTkVMKTsNCisJaWYgKCFldmVudCkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlt ZW1jcHkoJmV2ZW50LT5ldnQsIGJvZHksIHNpemVvZihzdHJ1Y3QgaGlmX2luZF9ldmVudCkpOw0K KwlzcGluX2xvY2soJnd2aWYtPmV2ZW50X3F1ZXVlX2xvY2spOw0KKwlmaXJzdCA9IGxpc3RfZW1w dHkoJnd2aWYtPmV2ZW50X3F1ZXVlKTsNCisJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPmxpbmssICZ3 dmlmLT5ldmVudF9xdWV1ZSk7DQorCXNwaW5fdW5sb2NrKCZ3dmlmLT5ldmVudF9xdWV1ZV9sb2Nr KTsNCisNCisJaWYgKGZpcnN0KQ0KKwkJc2NoZWR1bGVfd29yaygmd3ZpZi0+ZXZlbnRfaGFuZGxl cl93b3JrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaGlmX3BtX21vZGVf Y29tcGxldGVfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IGhpZl9tc2cg KmhpZiwgdm9pZCAqYnVmKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2 aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOw0KKw0KKwlXQVJOX09OKCF3dmlmKTsNCisJY29tcGxl dGUoJnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0K IHN0YXRpYyBpbnQgaGlmX3NjYW5fY29tcGxldGVfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAq d2Rldiwgc3RydWN0IGhpZl9tc2cgKmhpZiwgdm9pZCAqYnVmKQ0KIHsNCiAJc3RydWN0IHdmeF92 aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOw0KQEAgLTE2NSw2 ICsyMDQsMTcgQEAgc3RhdGljIGludCBoaWZfam9pbl9jb21wbGV0ZV9pbmRpY2F0aW9uKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3QgaGlmX21zZyAqaGkNCiAJcmV0dXJuIDA7DQogfQ0KIA0K K3N0YXRpYyBpbnQgaGlmX3N1c3BlbmRfcmVzdW1lX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYg KndkZXYsIHN0cnVjdCBoaWZfbXNnICpoaWYsIHZvaWQgKmJ1ZikNCit7DQorCXN0cnVjdCB3Znhf dmlmICp3dmlmID0gd2Rldl90b193dmlmKHdkZXYsIGhpZi0+aW50ZXJmYWNlKTsNCisJc3RydWN0 IGhpZl9pbmRfc3VzcGVuZF9yZXN1bWVfdHggKmJvZHkgPSBidWY7DQorDQorCVdBUk5fT04oIXd2 aWYpOw0KKwl3Znhfc3VzcGVuZF9yZXN1bWUod3ZpZiwgYm9keSk7DQorDQorCXJldHVybiAwOw0K K30NCisNCiBzdGF0aWMgaW50IGhpZl9lcnJvcl9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2LCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCB2b2lkICpidWYpDQogew0KIAlzdHJ1Y3QgaGlmX2lu ZF9lcnJvciAqYm9keSA9IGJ1ZjsNCkBAIC0yNDIsOCArMjkyLDExIEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3Qgew0KIAl7IEhJRl9JTkRfSURfU1RBUlRVUCwgICAgICAgICAgICAgIGhpZl9zdGFydHVw X2luZGljYXRpb24gfSwNCiAJeyBISUZfSU5EX0lEX1dBS0VVUCwgICAgICAgICAgICAgICBoaWZf d2FrZXVwX2luZGljYXRpb24gfSwNCiAJeyBISUZfSU5EX0lEX0pPSU5fQ09NUExFVEUsICAgICAg ICBoaWZfam9pbl9jb21wbGV0ZV9pbmRpY2F0aW9uIH0sDQorCXsgSElGX0lORF9JRF9TRVRfUE1f TU9ERV9DTVBMLCAgICAgaGlmX3BtX21vZGVfY29tcGxldGVfaW5kaWNhdGlvbiB9LA0KIAl7IEhJ Rl9JTkRfSURfU0NBTl9DTVBMLCAgICAgICAgICAgIGhpZl9zY2FuX2NvbXBsZXRlX2luZGljYXRp b24gfSwNCisJeyBISUZfSU5EX0lEX1NVU1BFTkRfUkVTVU1FX1RYLCAgICBoaWZfc3VzcGVuZF9y ZXN1bWVfaW5kaWNhdGlvbiB9LA0KIAl7IEhJRl9JTkRfSURfU0xfRVhDSEFOR0VfUFVCX0tFWVMs IGhpZl9rZXlzX2luZGljYXRpb24gfSwNCisJeyBISUZfSU5EX0lEX0VWRU5ULCAgICAgICAgICAg ICAgICBoaWZfZXZlbnRfaW5kaWNhdGlvbiB9LA0KIAl7IEhJRl9JTkRfSURfR0VORVJJQywgICAg ICAgICAgICAgIGhpZl9nZW5lcmljX2luZGljYXRpb24gfSwNCiAJeyBISUZfSU5EX0lEX0VSUk9S LCAgICAgICAgICAgICAgICBoaWZfZXJyb3JfaW5kaWNhdGlvbiB9LA0KIAl7IEhJRl9JTkRfSURf RVhDRVBUSU9OLCAgICAgICAgICAgIGhpZl9leGNlcHRpb25faW5kaWNhdGlvbiB9LA0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4 L2hpZl90eC5jDQppbmRleCAxNTdhYjE3N2I3M2YuLjJkNDAyMjVhMGZjZSAxMDA2NDQNCi0tLSBh L2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmMNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93Zngv aGlmX3R4LmMNCkBAIC0xNCw2ICsxNCw3IEBADQogI2luY2x1ZGUgImJoLmgiDQogI2luY2x1ZGUg Imh3aW8uaCINCiAjaW5jbHVkZSAiZGVidWcuaCINCisjaW5jbHVkZSAic3RhLmgiDQogDQogdm9p ZCB3ZnhfaW5pdF9oaWZfY21kKHN0cnVjdCB3ZnhfaGlmX2NtZCAqaGlmX2NtZCkNCiB7DQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4 L21haW4uYw0KaW5kZXggZTdiYmEyNGFhZTBiLi42MjY2MTVhN2QzYzQgMTAwNjQ0DQotLS0gYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uYw0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9tYWlu LmMNCkBAIC0xMCw2ICsxMCw3IEBADQogICogQ29weXJpZ2h0IChjKSAyMDA2LCBNaWNoYWVsIFd1 IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4NCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNiBK ZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBldCBhbC4NCiAgKi8NCisjaW5j bHVkZSA8bGludXgvdmVyc2lvbi5oPg0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCiAjaW5j bHVkZSA8bGludXgvb2YuaD4NCiAjaW5jbHVkZSA8bGludXgvb2ZfbmV0Lmg+DQpAQCAtNTAsMTQg KzUxLDExMiBAQCBzdGF0aWMgY2hhciAqc2xrX2tleTsNCiBtb2R1bGVfcGFyYW0oc2xrX2tleSwg Y2hhcnAsIDA2MDApOw0KIE1PRFVMRV9QQVJNX0RFU0Moc2xrX2tleSwgInNlY3JldCBrZXkgZm9y IHNlY3VyZSBsaW5rIChleHBlY3QgNjQgaGV4ZGVjaW1hbCBkaWdpdHMpLiIpOw0KIA0KKyNkZWZp bmUgUkFURVRBQl9FTlQoX3JhdGUsIF9yYXRlaWQsIF9mbGFncykgeyBcDQorCS5iaXRyYXRlICA9 IChfcmF0ZSksICAgXA0KKwkuaHdfdmFsdWUgPSAoX3JhdGVpZCksIFwNCisJLmZsYWdzICAgID0g KF9mbGFncyksICBcDQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgd2Z4X3Jh dGVzW10gPSB7DQorCVJBVEVUQUJfRU5UKDEwLCAgMCwgIDApLA0KKwlSQVRFVEFCX0VOVCgyMCwg IDEsICBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksDQorCVJBVEVUQUJfRU5UKDU1LCAg MiwgIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwNCisJUkFURVRBQl9FTlQoMTEwLCAz LCAgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLA0KKwlSQVRFVEFCX0VOVCg2MCwgIDYs ICAwKSwNCisJUkFURVRBQl9FTlQoOTAsICA3LCAgMCksDQorCVJBVEVUQUJfRU5UKDEyMCwgOCwg IDApLA0KKwlSQVRFVEFCX0VOVCgxODAsIDksICAwKSwNCisJUkFURVRBQl9FTlQoMjQwLCAxMCwg MCksDQorCVJBVEVUQUJfRU5UKDM2MCwgMTEsIDApLA0KKwlSQVRFVEFCX0VOVCg0ODAsIDEyLCAw KSwNCisJUkFURVRBQl9FTlQoNTQwLCAxMywgMCksDQorfTsNCisNCisjZGVmaW5lIENIQU4yRyhf Y2hhbm5lbCwgX2ZyZXEsIF9mbGFncykgeyBcDQorCS5iYW5kID0gTkw4MDIxMV9CQU5EXzJHSFos IFwNCisJLmNlbnRlcl9mcmVxID0gKF9mcmVxKSwgICAgXA0KKwkuaHdfdmFsdWUgPSAoX2NoYW5u ZWwpLCAgICBcDQorCS5mbGFncyA9IChfZmxhZ3MpLCAgICAgICAgIFwNCisJLm1heF9hbnRlbm5h X2dhaW4gPSAwLCAgICAgXA0KKwkubWF4X3Bvd2VyID0gMzAsICAgICAgICAgICBcDQorfQ0KKw0K K3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgd2Z4XzJnaHpfY2hhbnRhYmxlW10gPSB7 DQorCUNIQU4yRygxLCAgMjQxMiwgMCksDQorCUNIQU4yRygyLCAgMjQxNywgMCksDQorCUNIQU4y RygzLCAgMjQyMiwgMCksDQorCUNIQU4yRyg0LCAgMjQyNywgMCksDQorCUNIQU4yRyg1LCAgMjQz MiwgMCksDQorCUNIQU4yRyg2LCAgMjQzNywgMCksDQorCUNIQU4yRyg3LCAgMjQ0MiwgMCksDQor CUNIQU4yRyg4LCAgMjQ0NywgMCksDQorCUNIQU4yRyg5LCAgMjQ1MiwgMCksDQorCUNIQU4yRygx MCwgMjQ1NywgMCksDQorCUNIQU4yRygxMSwgMjQ2MiwgMCksDQorCUNIQU4yRygxMiwgMjQ2Nywg MCksDQorCUNIQU4yRygxMywgMjQ3MiwgMCksDQorCUNIQU4yRygxNCwgMjQ4NCwgMCksDQorfTsN CisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCB3ZnhfYmFu ZF8yZ2h6ID0gew0KKwkuY2hhbm5lbHMgPSB3ZnhfMmdoel9jaGFudGFibGUsDQorCS5uX2NoYW5u ZWxzID0gQVJSQVlfU0laRSh3ZnhfMmdoel9jaGFudGFibGUpLA0KKwkuYml0cmF0ZXMgPSB3Znhf cmF0ZXMsDQorCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRSh3ZnhfcmF0ZXMpLA0KKwkuaHRfY2Fw ID0gew0KKwkJLy8gUmVjZWl2ZSBjYXBzDQorCQkuY2FwID0gSUVFRTgwMjExX0hUX0NBUF9HUk5f RkxEIHwgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjAgfA0KKwkJICAgICAgIElFRUU4MDIxMV9IVF9D QVBfTUFYX0FNU0RVIHwgKDEgPDwgSUVFRTgwMjExX0hUX0NBUF9SWF9TVEJDX1NISUZUKSwNCisJ CS5odF9zdXBwb3J0ZWQgPSAxLA0KKwkJLmFtcGR1X2ZhY3RvciA9IElFRUU4MDIxMV9IVF9NQVhf QU1QRFVfMTZLLA0KKwkJLmFtcGR1X2RlbnNpdHkgPSBJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZ X05PTkUsDQorCQkubWNzID0gew0KKwkJCS5yeF9tYXNrID0geyAweEZGIH0sIC8vIE1DUzAgdG8g TUNTNw0KKwkJCS5yeF9oaWdoZXN0ID0gNjUsDQorCQkJLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9I VF9NQ1NfVFhfREVGSU5FRCwNCisJCX0sDQorCX0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGllZWU4MDIxMV9pZmFjZV9saW1pdCB3ZGV2X2lmYWNlX2xpbWl0c1tdID0gew0KKwl7IC5t YXggPSAxLCAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfSwNCisJeyAubWF4 ID0gMSwgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX0FQKSB9LA0KK307DQorDQorc3RhdGlj IGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfY29tYmluYXRpb24gd2Z4X2lmYWNlX2NvbWJp bmF0aW9uc1tdID0gew0KKwl7DQorCQkubnVtX2RpZmZlcmVudF9jaGFubmVscyA9IDIsDQorCQku bWF4X2ludGVyZmFjZXMgPSAyLA0KKwkJLmxpbWl0cyA9IHdkZXZfaWZhY2VfbGltaXRzLA0KKwkJ Lm5fbGltaXRzID0gQVJSQVlfU0laRSh3ZGV2X2lmYWNlX2xpbWl0cyksDQorCX0NCit9Ow0KKw0K IHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyB3Znhfb3BzID0gew0KIAkuc3RhcnQJ CQk9IHdmeF9zdGFydCwNCiAJLnN0b3AJCQk9IHdmeF9zdG9wLA0KIAkuYWRkX2ludGVyZmFjZQkJ PSB3ZnhfYWRkX2ludGVyZmFjZSwNCiAJLnJlbW92ZV9pbnRlcmZhY2UJPSB3ZnhfcmVtb3ZlX2lu dGVyZmFjZSwNCisJLmNvbmZpZwkJCT0gd2Z4X2NvbmZpZywNCiAJLnR4CQkJPSB3ZnhfdHgsDQor CS5jb25mX3R4CQk9IHdmeF9jb25mX3R4LA0KIAkuaHdfc2NhbgkJPSB3ZnhfaHdfc2NhbiwNCisJ LnN0YV9hZGQJCT0gd2Z4X3N0YV9hZGQsDQorCS5zdGFfcmVtb3ZlCQk9IHdmeF9zdGFfcmVtb3Zl LA0KKwkuc3RhX25vdGlmeQkJPSB3Znhfc3RhX25vdGlmeSwNCisJLnNldF90aW0JCT0gd2Z4X3Nl dF90aW0sDQogCS5zZXRfa2V5CQk9IHdmeF9zZXRfa2V5LA0KKwkuc2V0X3J0c190aHJlc2hvbGQJ PSB3Znhfc2V0X3J0c190aHJlc2hvbGQsDQorCS5ic3NfaW5mb19jaGFuZ2VkCT0gd2Z4X2Jzc19p bmZvX2NoYW5nZWQsDQorCS5wcmVwYXJlX211bHRpY2FzdAk9IHdmeF9wcmVwYXJlX211bHRpY2Fz dCwNCisJLmNvbmZpZ3VyZV9maWx0ZXIJPSB3ZnhfY29uZmlndXJlX2ZpbHRlciwNCisJLmFtcGR1 X2FjdGlvbgkJPSB3ZnhfYW1wZHVfYWN0aW9uLA0KKwkuZmx1c2gJCQk9IHdmeF9mbHVzaCwNCisJ LmFkZF9jaGFuY3R4CQk9IHdmeF9hZGRfY2hhbmN0eCwNCisJLnJlbW92ZV9jaGFuY3R4CQk9IHdm eF9yZW1vdmVfY2hhbmN0eCwNCisJLmNoYW5nZV9jaGFuY3R4CQk9IHdmeF9jaGFuZ2VfY2hhbmN0 eCwNCisJLmFzc2lnbl92aWZfY2hhbmN0eAk9IHdmeF9hc3NpZ25fdmlmX2NoYW5jdHgsDQorCS51 bmFzc2lnbl92aWZfY2hhbmN0eAk9IHdmeF91bmFzc2lnbl92aWZfY2hhbmN0eCwNCiB9Ow0KIA0K IGJvb2wgd2Z4X2FwaV9vbGRlcl90aGFuKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgbWFqb3Is IGludCBtaW5vcikNCkBAIC0xOTgsNiArMjk3LDE5IEBAIHN0cnVjdCB3ZnhfZGV2ICp3ZnhfaW5p dF9jb21tb24oc3RydWN0IGRldmljZSAqZGV2LA0KIA0KIAlTRVRfSUVFRTgwMjExX0RFVihodywg ZGV2KTsNCiANCisJaWVlZTgwMjExX2h3X3NldChodywgTkVFRF9EVElNX0JFRk9SRV9BU1NPQyk7 DQorCWllZWU4MDIxMV9od19zZXQoaHcsIFRYX0FNUERVX1NFVFVQX0lOX0hXKTsNCisJaWVlZTgw MjExX2h3X3NldChodywgQU1QRFVfQUdHUkVHQVRJT04pOw0KKwlpZWVlODAyMTFfaHdfc2V0KGh3 LCBDT05ORUNUSU9OX01PTklUT1IpOw0KKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBSRVBPUlRTX1RY X0FDS19TVEFUVVMpOw0KKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBTVVBQT1JUU19EWU5BTUlDX1BT KTsNCisJaWVlZTgwMjExX2h3X3NldChodywgU0lHTkFMX0RCTSk7DQorCWllZWU4MDIxMV9od19z ZXQoaHcsIFNVUFBPUlRTX1BTKTsNCisJaWVlZTgwMjExX2h3X3NldChodywgTUZQX0NBUEFCTEUp Ow0KKyNpZiAoS0VSTkVMX1ZFUlNJT04oMywgMTksIDApID4gTElOVVhfVkVSU0lPTl9DT0RFKQ0K KwlpZWVlODAyMTFfaHdfc2V0KGh3LCBTVVBQT1JUU19VQVBTRCk7DQorI2VuZGlmDQorDQogCWh3 LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB3ZnhfdmlmKTsNCiAJaHctPnN0YV9kYXRh X3NpemUgPSBzaXplb2Yoc3RydWN0IHdmeF9zdGFfcHJpdik7DQogCWh3LT5xdWV1ZXMgPSA0Ow0K QEAgLTIwNiw4ICszMTgsMTkgQEAgc3RydWN0IHdmeF9kZXYgKndmeF9pbml0X2NvbW1vbihzdHJ1 Y3QgZGV2aWNlICpkZXYsDQogCWh3LT5leHRyYV90eF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3Qg aGlmX3NsX21zZ19oZHIpICsgc2l6ZW9mKHN0cnVjdCBoaWZfbXNnKQ0KIAkJCQkrIHNpemVvZihz dHJ1Y3QgaGlmX3JlcV90eCkNCiAJCQkJKyA0IC8qIGFsaWdubWVudCAqLyArIDggLyogVEtJUCBJ ViAqLzsNCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVf U1RBVElPTikgfA0KKwkJCQkgICAgIEJJVChOTDgwMjExX0lGVFlQRV9BREhPQykgfA0KKwkJCQkg ICAgIEJJVChOTDgwMjExX0lGVFlQRV9BUCk7DQorCWh3LT53aXBoeS0+ZmxhZ3MgfD0gV0lQSFlf RkxBR19BUF9VQVBTRDsNCisJaHctPndpcGh5LT5mbGFncyAmPSB+V0lQSFlfRkxBR19QU19PTl9C WV9ERUZBVUxUOw0KKwlody0+d2lwaHktPm1heF9hcF9hc3NvY19zdGEgPSBXRlhfTUFYX1NUQV9J Tl9BUF9NT0RFOw0KIAlody0+d2lwaHktPm1heF9zY2FuX3NzaWRzID0gMjsNCiAJaHctPndpcGh5 LT5tYXhfc2Nhbl9pZV9sZW4gPSBJRUVFODAyMTFfTUFYX0RBVEFfTEVOOw0KKwlody0+d2lwaHkt Pm5faWZhY2VfY29tYmluYXRpb25zID0gQVJSQVlfU0laRSh3ZnhfaWZhY2VfY29tYmluYXRpb25z KTsNCisJaHctPndpcGh5LT5pZmFjZV9jb21iaW5hdGlvbnMgPSB3ZnhfaWZhY2VfY29tYmluYXRp b25zOw0KKwlody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8yR0haXSA9IGRldm1fa21hbGxv YyhkZXYsIHNpemVvZih3ZnhfYmFuZF8yZ2h6KSwgR0ZQX0tFUk5FTCk7DQorCS8vIEZJWE1FOiBh bHNvIGNvcHkgd2Z4X3JhdGVzIGFuZCB3ZnhfMmdoel9jaGFudGFibGUNCisJbWVtY3B5KGh3LT53 aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLCAmd2Z4X2JhbmRfMmdoeiwgc2l6ZW9mKHdm eF9iYW5kXzJnaHopKTsNCiANCiAJd2RldiA9IGh3LT5wcml2Ow0KIAl3ZGV2LT5odyA9IGh3Ow0K QEAgLTI5MCw2ICs0MTMsMTIgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikN CiAJCWdvdG8gZXJyMTsNCiAJfQ0KIA0KKwlpZiAod2Rldi0+aHdfY2Fwcy5yZWd1bF9zZWxfbW9k ZV9pbmZvLnJlZ2lvbl9zZWxfbW9kZSkgew0KKwkJd2Rldi0+aHctPndpcGh5LT5iYW5kc1tOTDgw MjExX0JBTkRfMkdIWl0tPmNoYW5uZWxzWzExXS5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9OT19J UjsNCisJCXdkZXYtPmh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLT5jaGFubmVs c1sxMl0uZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fTk9fSVI7DQorCQl3ZGV2LT5ody0+d2lwaHkt PmJhbmRzW05MODAyMTFfQkFORF8yR0haXS0+Y2hhbm5lbHNbMTNdLmZsYWdzIHw9IElFRUU4MDIx MV9DSEFOX0RJU0FCTEVEOw0KKwl9DQorDQogCWRldl9kYmcod2Rldi0+ZGV2LCAic2VuZGluZyBj b25maWd1cmF0aW9uIGZpbGUgJXNcbiIsIHdkZXYtPnBkYXRhLmZpbGVfcGRzKTsNCiAJZXJyID0g d2Z4X3NlbmRfcGRhdGFfcGRzKHdkZXYpOw0KIAlpZiAoZXJyIDwgMCkNCkBAIC0zMjIsNiArNDUx LDEyIEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpDQogCQl9DQogCQlkZXZf aW5mbyh3ZGV2LT5kZXYsICJNQUMgYWRkcmVzcyAlZDogJXBNXG4iLCBpLCB3ZGV2LT5hZGRyZXNz ZXNbaV0uYWRkcik7DQogCX0NCisJd2Rldi0+aHctPndpcGh5LT5uX2FkZHJlc3NlcyA9IEFSUkFZ X1NJWkUod2Rldi0+YWRkcmVzc2VzKTsNCisJd2Rldi0+aHctPndpcGh5LT5hZGRyZXNzZXMgPSB3 ZGV2LT5hZGRyZXNzZXM7DQorDQorCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyh3ZGV2LT5o dyk7DQorCWlmIChlcnIpDQorCQlnb3RvIGVycjE7DQogDQogCWVyciA9IHdmeF9kZWJ1Z19pbml0 KHdkZXYpOw0KIAlpZiAoZXJyKQ0KQEAgLTMzMCw2ICs0NjUsNyBAQCBpbnQgd2Z4X3Byb2JlKHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KIAlyZXR1cm4gMDsNCiANCiBlcnIyOg0KKwlpZWVlODAyMTFf dW5yZWdpc3Rlcl9odyh3ZGV2LT5odyk7DQogCWllZWU4MDIxMV9mcmVlX2h3KHdkZXYtPmh3KTsN CiBlcnIxOg0KIAl3ZnhfYmhfdW5yZWdpc3Rlcih3ZGV2KTsNCkBAIC0zMzgsNiArNDc0LDcgQEAg aW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikNCiANCiB2b2lkIHdmeF9yZWxlYXNl KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KIHsNCisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2Rl di0+aHcpOw0KIAloaWZfc2h1dGRvd24od2Rldik7DQogCXdmeF9iaF91bnJlZ2lzdGVyKHdkZXYp Ow0KIAl3Znhfc2xfZGVpbml0KHdkZXYpOw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93 ZngvcXVldWUuYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYw0KaW5kZXggYWE0MzhiZTIx ZDM3Li42ZjFiZTRmNmY0NjMgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3F1ZXVl LmMNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYw0KQEAgLTM1MSw2ICszNTEsODMg QEAgYm9vbCB3ZnhfdHhfcXVldWVzX2lzX2VtcHR5KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KIAly ZXR1cm4gcmV0Ow0KIH0NCiANCitzdGF0aWMgYm9vbCBoaWZfaGFuZGxlX3R4X2RhdGEoc3RydWN0 IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBza19idWZmICpza2IsDQorCQkJICAgICAgIHN0cnVjdCB3 ZnhfcXVldWUgKnF1ZXVlKQ0KK3sNCisJYm9vbCBoYW5kbGVkID0gZmFsc2U7DQorCXN0cnVjdCB3 ZnhfdHhfcHJpdiAqdHhfcHJpdiA9IHdmeF9za2JfdHhfcHJpdihza2IpOw0KKwlzdHJ1Y3QgaGlm X3JlcV90eCAqcmVxID0gd2Z4X3NrYl90eHJlcShza2IpOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX2hk ciAqZnJhbWUgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgKHJlcS0+ZnJhbWUgKyByZXEtPmRh dGFfZmxhZ3MuZmNfb2Zmc2V0KTsNCisNCisJZW51bSB7DQorCQlkb19wcm9iZSwNCisJCWRvX2Ry b3AsDQorCQlkb193ZXAsDQorCQlkb190eCwNCisJfSBhY3Rpb24gPSBkb190eDsNCisNCisJc3dp dGNoICh3dmlmLT52aWYtPnR5cGUpIHsNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOg0K KwkJaWYgKHd2aWYtPnN0YXRlIDwgV0ZYX1NUQVRFX1BSRV9TVEEpDQorCQkJYWN0aW9uID0gZG9f ZHJvcDsNCisJCWJyZWFrOw0KKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOg0KKwkJaWYgKCF3dmlm LT5zdGF0ZSkgew0KKwkJCWFjdGlvbiA9IGRvX2Ryb3A7DQorCQl9IGVsc2UgaWYgKCEoQklUKHR4 X3ByaXYtPnJhd19saW5rX2lkKSAmIChCSVQoMCkgfCB3dmlmLT5saW5rX2lkX21hcCkpKSB7DQor CQkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2LCAiYSBmcmFtZSB3aXRoIGV4cGlyZWQgbGluay1p ZCBpcyBkcm9wcGVkXG4iKTsNCisJCQlhY3Rpb24gPSBkb19kcm9wOw0KKwkJfQ0KKwkJYnJlYWs7 DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6DQorCQlpZiAod3ZpZi0+c3RhdGUgIT0gV0ZY X1NUQVRFX0lCU1MpDQorCQkJYWN0aW9uID0gZG9fZHJvcDsNCisJCWJyZWFrOw0KKwljYXNlIE5M ODAyMTFfSUZUWVBFX01PTklUT1I6DQorCWRlZmF1bHQ6DQorCQlhY3Rpb24gPSBkb19kcm9wOw0K KwkJYnJlYWs7DQorCX0NCisNCisJaWYgKGFjdGlvbiA9PSBkb190eCkgew0KKwkJaWYgKGllZWU4 MDIxMV9pc19udWxsZnVuYyhmcmFtZS0+ZnJhbWVfY29udHJvbCkpIHsNCisJCQltdXRleF9sb2Nr KCZ3dmlmLT5ic3NfbG9zc19sb2NrKTsNCisJCQlpZiAod3ZpZi0+YnNzX2xvc3Nfc3RhdGUpIHsN CisJCQkJd3ZpZi0+YnNzX2xvc3NfY29uZmlybV9pZCA9IHJlcS0+cGFja2V0X2lkOw0KKwkJCQly ZXEtPnF1ZXVlX2lkLnF1ZXVlX2lkID0gSElGX1FVRVVFX0lEX1ZPSUNFOw0KKwkJCX0NCisJCQlt dXRleF91bmxvY2soJnd2aWYtPmJzc19sb3NzX2xvY2spOw0KKwkJfSBlbHNlIGlmIChpZWVlODAy MTFfaGFzX3Byb3RlY3RlZChmcmFtZS0+ZnJhbWVfY29udHJvbCkgJiYNCisJCQkgICB0eF9wcml2 LT5od19rZXkgJiYNCisJCQkgICB0eF9wcml2LT5od19rZXktPmtleWlkeCAhPSB3dmlmLT53ZXBf ZGVmYXVsdF9rZXlfaWQgJiYNCisJCQkgICAodHhfcHJpdi0+aHdfa2V5LT5jaXBoZXIgPT0gV0xB Tl9DSVBIRVJfU1VJVEVfV0VQNDAgfHwNCisJCQkgICAgdHhfcHJpdi0+aHdfa2V5LT5jaXBoZXIg PT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KSkgew0KKwkJCWFjdGlvbiA9IGRvX3dlcDsNCisJ CX0NCisJfQ0KKw0KKwlzd2l0Y2ggKGFjdGlvbikgew0KKwljYXNlIGRvX2Ryb3A6DQorCQlCVUdf T04od2Z4X3BlbmRpbmdfcmVtb3ZlKHd2aWYtPndkZXYsIHNrYikpOw0KKwkJaGFuZGxlZCA9IHRy dWU7DQorCQlicmVhazsNCisJY2FzZSBkb193ZXA6DQorCQl3ZnhfdHhfbG9jayh3dmlmLT53ZGV2 KTsNCisJCXd2aWYtPndlcF9kZWZhdWx0X2tleV9pZCA9IHR4X3ByaXYtPmh3X2tleS0+a2V5aWR4 Ow0KKwkJd3ZpZi0+d2VwX3BlbmRpbmdfc2tiID0gc2tiOw0KKwkJaWYgKCFzY2hlZHVsZV93b3Jr KCZ3dmlmLT53ZXBfa2V5X3dvcmspKQ0KKwkJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQor CQloYW5kbGVkID0gdHJ1ZTsNCisJCWJyZWFrOw0KKwljYXNlIGRvX3R4Og0KKwkJYnJlYWs7DQor CWRlZmF1bHQ6DQorCQkvKiBEbyBub3RoaW5nICovDQorCQlicmVhazsNCisJfQ0KKwlyZXR1cm4g aGFuZGxlZDsNCit9DQorDQogc3RhdGljIGludCB3ZnhfZ2V0X3ByaW9fcXVldWUoc3RydWN0IHdm eF92aWYgKnd2aWYsDQogCQkJCSB1MzIgdHhfYWxsb3dlZF9tYXNrLCBpbnQgKnRvdGFsKQ0KIHsN CkBAIC00OTgsNiArNTc1LDkgQEAgc3RydWN0IGhpZl9tc2cgKndmeF90eF9xdWV1ZXNfZ2V0KHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KIAkJd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmlu dGVyZmFjZSk7DQogCQlXQVJOX09OKCF3dmlmKTsNCiANCisJCWlmIChoaWZfaGFuZGxlX3R4X2Rh dGEod3ZpZiwgc2tiLCBxdWV1ZSkpDQorCQkJY29udGludWU7ICAvKiBIYW5kbGVkIGJ5IFdTTSAq Lw0KKw0KIAkJd3ZpZi0+cHNwb2xsX21hc2sgJj0gfkJJVCh0eF9wcml2LT5yYXdfbGlua19pZCk7 DQogDQogCQkvKiBhbGxvdyBidXJzdGluZyBpZiB0eG9wIGlzIHNldCAqLw0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvc3RhZ2luZy93Zngvc2Nhbi5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9zY2FuLmMN CmluZGV4IDg5YWYyOTRjZjIzZC4uMDdmODAwYjkyMjYwIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9z dGFnaW5nL3dmeC9zY2FuLmMNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93Zngvc2Nhbi5jDQpAQCAt MjYsMTEgKzI2LDI2IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3NjYW5fY29tcGxldGVkX2Nv bXBhdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBhYm9yDQogI2VuZGlmDQogfQ0KIA0K K3N0YXRpYyB2b2lkIHdmeF9zY2FuX3Jlc3RhcnRfZGVsYXllZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZikNCit7DQorCWlmICh3dmlmLT5kZWxheWVkX3Vuam9pbikgew0KKwkJd3ZpZi0+ZGVsYXllZF91 bmpvaW4gPSBmYWxzZTsNCisJCWlmICghc2NoZWR1bGVfd29yaygmd3ZpZi0+dW5qb2luX3dvcmsp KQ0KKwkJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQorCX0gZWxzZSBpZiAod3ZpZi0+ZGVs YXllZF9saW5rX2xvc3MpIHsNCisJCXd2aWYtPmRlbGF5ZWRfbGlua19sb3NzID0gMDsNCisJCXdm eF9jcW1fYnNzbG9zc19zbSh3dmlmLCAxLCAwLCAwKTsNCisJfQ0KK30NCisNCiBzdGF0aWMgaW50 IHdmeF9zY2FuX3N0YXJ0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qgd2Z4X3NjYW5fcGFy YW1zICpzY2FuKQ0KIHsNCiAJaW50IHJldDsNCiAJaW50IHRtbyA9IDUwMDsNCiANCisJaWYgKHd2 aWYtPnN0YXRlID09IFdGWF9TVEFURV9QUkVfU1RBKQ0KKwkJcmV0dXJuIC1FQlVTWTsNCisNCiAJ dG1vICs9IHNjYW4tPnNjYW5fcmVxLm51bV9vZl9jaGFubmVscyAqDQogCSAgICAgICAoKDIwICog KHNjYW4tPnNjYW5fcmVxLm1heF9jaGFubmVsX3RpbWUpKSArIDEwKTsNCiAJYXRvbWljX3NldCgm d3ZpZi0+c2Nhbi5pbl9wcm9ncmVzcywgMSk7DQpAQCAtNDMsNiArNTgsNyBAQCBzdGF0aWMgaW50 IHdmeF9zY2FuX3N0YXJ0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qgd2Z4X3NjYW5fcGFy YW1zICpzY2FuKQ0KIAkJYXRvbWljX3NldCgmd3ZpZi0+c2Nhbi5pbl9wcm9ncmVzcywgMCk7DQog CQlhdG9taWNfc2V0KCZ3dmlmLT53ZGV2LT5zY2FuX2luX3Byb2dyZXNzLCAwKTsNCiAJCWNhbmNl bF9kZWxheWVkX3dvcmtfc3luYygmd3ZpZi0+c2Nhbi50aW1lb3V0KTsNCisJCXdmeF9zY2FuX3Jl c3RhcnRfZGVsYXllZCh3dmlmKTsNCiAJfQ0KIAlyZXR1cm4gcmV0Ow0KIH0NCkBAIC02MSw2ICs3 Nyw5IEBAIGludCB3ZnhfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCiAJaWYgKCF3 dmlmKQ0KIAkJcmV0dXJuIC1FSU5WQUw7DQogDQorCWlmICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RB VEVfQVApDQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQorDQogCWlmIChyZXEtPm5fc3NpZHMgPT0g MSAmJiAhcmVxLT5zc2lkc1swXS5zc2lkX2xlbikNCiAJCXJlcS0+bl9zc2lkcyA9IDA7DQogDQpA QCAtMTMwLDExICsxNDksMjMgQEAgdm9pZCB3Znhfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykNCiAJCS5zY2FuX3JlcS5zY2FuX3R5cGUudHlwZSA9IDAsICAgIC8qIEZvcmVncm91 bmQgKi8NCiAJfTsNCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpmaXJzdDsNCisJYm9vbCBm aXJzdF9ydW4gPSAod3ZpZi0+c2Nhbi5iZWdpbiA9PSB3dmlmLT5zY2FuLmN1cnIgJiYNCisJCQkg IHd2aWYtPnNjYW4uYmVnaW4gIT0gd3ZpZi0+c2Nhbi5lbmQpOw0KIAlpbnQgaTsNCiANCiAJZG93 bigmd3ZpZi0+c2Nhbi5sb2NrKTsNCiAJbXV0ZXhfbG9jaygmd3ZpZi0+d2Rldi0+Y29uZl9tdXRl eCk7DQogDQorCWlmIChmaXJzdF9ydW4pIHsNCisJCWlmICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RB VEVfU1RBICYmDQorCQkgICAgISh3dmlmLT5wb3dlcnNhdmVfbW9kZS5wbV9tb2RlLmVudGVyX3Bz bSkpIHsNCisJCQlzdHJ1Y3QgaGlmX3JlcV9zZXRfcG1fbW9kZSBwbSA9IHd2aWYtPnBvd2Vyc2F2 ZV9tb2RlOw0KKw0KKwkJCXBtLnBtX21vZGUuZW50ZXJfcHNtID0gMTsNCisJCQl3Znhfc2V0X3Bt KHd2aWYsICZwbSk7DQorCQl9DQorCX0NCisNCiAJaWYgKCF3dmlmLT5zY2FuLnJlcSB8fCB3dmlm LT5zY2FuLmN1cnIgPT0gd3ZpZi0+c2Nhbi5lbmQpIHsNCiAJCWlmICh3dmlmLT5zY2FuLm91dHB1 dF9wb3dlciAhPSB3dmlmLT53ZGV2LT5vdXRwdXRfcG93ZXIpDQogCQkJaGlmX3NldF9vdXRwdXRf cG93ZXIod3ZpZiwgd3ZpZi0+d2Rldi0+b3V0cHV0X3Bvd2VyICogMTApOw0KQEAgLTE0NywxMCAr MTc4LDE0IEBAIHZvaWQgd2Z4X3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQog CQkJZGV2X2RiZyh3dmlmLT53ZGV2LT5kZXYsICJzY2FuIGNhbmNlbGVkXG4iKTsNCiANCiAJCXd2 aWYtPnNjYW4ucmVxID0gTlVMTDsNCisJCXdmeF9zY2FuX3Jlc3RhcnRfZGVsYXllZCh3dmlmKTsN CiAJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQogCQltdXRleF91bmxvY2soJnd2aWYtPndk ZXYtPmNvbmZfbXV0ZXgpOw0KIAkJX19pZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWRfY29tcGF0KHd2 aWYtPndkZXYtPmh3LCB3dmlmLT5zY2FuLnN0YXR1cyA/IDEgOiAwKTsNCiAJCXVwKCZ3dmlmLT5z Y2FuLmxvY2spOw0KKwkJaWYgKHd2aWYtPnN0YXRlID09IFdGWF9TVEFURV9TVEEgJiYNCisJCSAg ICAhKHd2aWYtPnBvd2Vyc2F2ZV9tb2RlLnBtX21vZGUuZW50ZXJfcHNtKSkNCisJCQl3Znhfc2V0 X3BtKHd2aWYsICZ3dmlmLT5wb3dlcnNhdmVfbW9kZSk7DQogCQlyZXR1cm47DQogCX0NCiAJZmly c3QgPSAqd3ZpZi0+c2Nhbi5jdXJyOw0KQEAgLTE3OSw2ICsyMTQsMTEgQEAgdm9pZCB3Znhfc2Nh bl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCiAJc2Nhbi5zc2lkcyA9ICZ3dmlmLT5z Y2FuLnNzaWRzWzBdOw0KIAlzY2FuLnNjYW5fcmVxLm51bV9vZl9jaGFubmVscyA9IGl0IC0gd3Zp Zi0+c2Nhbi5jdXJyOw0KIAlzY2FuLnNjYW5fcmVxLnByb2JlX2RlbGF5ID0gMTAwOw0KKwkvLyBG SVhNRTogQ2hlY2sgaWYgRlcgY2FuIGRvIGFjdGl2ZSBzY2FuIHdoaWxlIGpvaW5lZC4NCisJaWYg KHd2aWYtPnN0YXRlID09IFdGWF9TVEFURV9TVEEpIHsNCisJCXNjYW4uc2Nhbl9yZXEuc2Nhbl90 eXBlLnR5cGUgPSAxOw0KKwkJc2Nhbi5zY2FuX3JlcS5zY2FuX2ZsYWdzLmZiZyA9IDE7DQorCX0N CiANCiAJc2Nhbi5jaCA9IGtjYWxsb2Moc2Nhbi5zY2FuX3JlcS5udW1fb2ZfY2hhbm5lbHMsIHNp emVvZih1OCksIEdGUF9LRVJORUwpOw0KIA0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93 Zngvc3RhLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5jDQppbmRleCBjY2Y0NWJkYjdlNDIu LjFmOTAyZWU3NjIzZiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmMNCisr KyBiL2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmMNCkBAIC0xMCwxMSArMTAsMTUyIEBADQogDQog I2luY2x1ZGUgInN0YS5oIg0KICNpbmNsdWRlICJ3ZnguaCINCisjaW5jbHVkZSAiZndpby5oIg0K KyNpbmNsdWRlICJiaC5oIg0KICNpbmNsdWRlICJrZXkuaCINCiAjaW5jbHVkZSAic2Nhbi5oIg0K KyNpbmNsdWRlICJkZWJ1Zy5oIg0KKyNpbmNsdWRlICJoaWZfdHguaCINCiAjaW5jbHVkZSAiaGlm X3R4X21pYi5oIg0KIA0KICNkZWZpbmUgVFhPUF9VTklUIDMyDQorI2RlZmluZSBISUZfTUFYX0FS UF9JUF9BRERSVEFCTEVfRU5UUklFUyAyDQorDQorc3RhdGljIHUzMiB3ZnhfcmF0ZV9tYXNrX3Rv X2h3KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgcmF0ZXMpDQorew0KKwlpbnQgaTsNCisJdTMy IHJldCA9IDA7DQorCS8vIFdGeCBvbmx5IHN1cHBvcnQgMkdIeg0KKwlzdHJ1Y3QgaWVlZTgwMjEx X3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9IHdkZXYtPmh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9C QU5EXzJHSFpdOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykg ew0KKwkJaWYgKHJhdGVzICYgQklUKGkpKSB7DQorCQkJaWYgKGkgPj0gc2JhbmQtPm5fYml0cmF0 ZXMpDQorCQkJCWRldl93YXJuKHdkZXYtPmRldiwgInVuc3VwcG9ydGVkIGJhc2ljIHJhdGVcbiIp Ow0KKwkJCWVsc2UNCisJCQkJcmV0IHw9IEJJVChzYmFuZC0+Yml0cmF0ZXNbaV0uaHdfdmFsdWUp Ow0KKwkJfQ0KKwl9DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIF9fd2Z4X2Zy ZWVfZXZlbnRfcXVldWUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkNCit7DQorCXN0cnVjdCB3Znhf aGlmX2V2ZW50ICpldmVudCwgKnRtcDsNCisNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2 ZW50LCB0bXAsIGxpc3QsIGxpbmspIHsNCisJCWxpc3RfZGVsKCZldmVudC0+bGluayk7DQorCQlr ZnJlZShldmVudCk7DQorCX0NCit9DQorDQorc3RhdGljIHZvaWQgd2Z4X2ZyZWVfZXZlbnRfcXVl dWUoc3RydWN0IHdmeF92aWYgKnd2aWYpDQorew0KKwlMSVNUX0hFQUQobGlzdCk7DQorDQorCXNw aW5fbG9jaygmd3ZpZi0+ZXZlbnRfcXVldWVfbG9jayk7DQorCWxpc3Rfc3BsaWNlX2luaXQoJnd2 aWYtPmV2ZW50X3F1ZXVlLCAmbGlzdCk7DQorCXNwaW5fdW5sb2NrKCZ3dmlmLT5ldmVudF9xdWV1 ZV9sb2NrKTsNCisNCisJX193ZnhfZnJlZV9ldmVudF9xdWV1ZSgmbGlzdCk7DQorfQ0KKw0KK3Zv aWQgd2Z4X2NxbV9ic3Nsb3NzX3NtKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgaW5pdCwgaW50 IGdvb2QsIGludCBiYWQpDQorew0KKwlpbnQgdHggPSAwOw0KKw0KKwltdXRleF9sb2NrKCZ3dmlm LT5ic3NfbG9zc19sb2NrKTsNCisJd3ZpZi0+ZGVsYXllZF9saW5rX2xvc3MgPSAwOw0KKwljYW5j ZWxfd29ya19zeW5jKCZ3dmlmLT5ic3NfcGFyYW1zX3dvcmspOw0KKw0KKwkvKiBJZiB3ZSBoYXZl IGEgcGVuZGluZyB1bmpvaW4gKi8NCisJaWYgKHd2aWYtPmRlbGF5ZWRfdW5qb2luKQ0KKwkJZ290 byBlbmQ7DQorDQorCWlmIChpbml0KSB7DQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnd2aWYt PmJzc19sb3NzX3dvcmssIEhaKTsNCisJCXd2aWYtPmJzc19sb3NzX3N0YXRlID0gMDsNCisNCisJ CWlmICghYXRvbWljX3JlYWQoJnd2aWYtPndkZXYtPnR4X2xvY2spKQ0KKwkJCXR4ID0gMTsNCisJ fSBlbHNlIGlmIChnb29kKSB7DQorCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnd2aWYtPmJz c19sb3NzX3dvcmspOw0KKwkJd3ZpZi0+YnNzX2xvc3Nfc3RhdGUgPSAwOw0KKwkJc2NoZWR1bGVf d29yaygmd3ZpZi0+YnNzX3BhcmFtc193b3JrKTsNCisJfSBlbHNlIGlmIChiYWQpIHsNCisJCS8q IEZJWE1FIFNob3VsZCB3ZSBqdXN0IGtlZXAgZ29pbmcgdW50aWwgd2UgdGltZSBvdXQ/ICovDQor CQlpZiAod3ZpZi0+YnNzX2xvc3Nfc3RhdGUgPCAzKQ0KKwkJCXR4ID0gMTsNCisJfSBlbHNlIHsN CisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmd3ZpZi0+YnNzX2xvc3Nfd29yayk7DQorCQl3 dmlmLT5ic3NfbG9zc19zdGF0ZSA9IDA7DQorCX0NCisNCisJLyogU3BpdCBvdXQgYSBOVUxMIHBh Y2tldCB0byBvdXIgQVAgaWYgbmVjZXNzYXJ5ICovDQorCS8vIEZJWE1FOiBjYWxsIGllZWU4MDIx MV9iZWFjb25fbG9zcy9pZWVlODAyMTFfY29ubmVjdGlvbl9sb3NzIGluc3RlYWQNCisJaWYgKHR4 KSB7DQorCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KKw0KKwkJd3ZpZi0+YnNzX2xvc3Nfc3RhdGUr KzsNCisNCisjaWYgKEtFUk5FTF9WRVJTSU9OKDQsIDE0LCAxNikgPiBMSU5VWF9WRVJTSU9OX0NP REUpDQorCQlza2IgPSBpZWVlODAyMTFfbnVsbGZ1bmNfZ2V0KHd2aWYtPndkZXYtPmh3LCB3dmlm LT52aWYpOw0KKyNlbHNlDQorCQlza2IgPSBpZWVlODAyMTFfbnVsbGZ1bmNfZ2V0KHd2aWYtPndk ZXYtPmh3LCB3dmlmLT52aWYsIGZhbHNlKTsNCisjZW5kaWYNCisJCWlmICghc2tiKQ0KKwkJCWdv dG8gZW5kOw0KKwkJbWVtc2V0KElFRUU4MDIxMV9TS0JfQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJRUVF ODAyMTFfU0tCX0NCKHNrYikpKTsNCisJCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+Y29udHJvbC52 aWYgPSB3dmlmLT52aWY7DQorCQlJRUVFODAyMTFfU0tCX0NCKHNrYiktPmRyaXZlcl9yYXRlc1sw XS5pZHggPSAwOw0KKwkJSUVFRTgwMjExX1NLQl9DQihza2IpLT5kcml2ZXJfcmF0ZXNbMF0uY291 bnQgPSAxOw0KKwkJSUVFRTgwMjExX1NLQl9DQihza2IpLT5kcml2ZXJfcmF0ZXNbMV0uaWR4ID0g LTE7DQorCQl3ZnhfdHgod3ZpZi0+d2Rldi0+aHcsIE5VTEwsIHNrYik7DQorCX0NCitlbmQ6DQor CW11dGV4X3VubG9jaygmd3ZpZi0+YnNzX2xvc3NfbG9jayk7DQorfQ0KKw0KK3N0YXRpYyBpbnQg d2Z4X3NldF91YXBzZF9wYXJhbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCisJCQkgICBjb25zdCBz dHJ1Y3Qgd2Z4X2VkY2FfcGFyYW1zICphcmcpDQorew0KKwlpbnQgcmV0Ow0KKw0KKwkvKiBIZXJl J3MgdGhlIG1hcHBpbmcgQUMgW3F1ZXVlLCBiaXRdDQorCSAqICBWTyBbMCwzXSwgVkkgWzEsIDJd LCBCRSBbMiwgMV0sIEJLIFszLCAwXQ0KKwkgKi8NCisNCisJaWYgKGFyZy0+dWFwc2RfZW5hYmxl W0lFRUU4MDIxMV9BQ19WT10pDQorCQl3dmlmLT51YXBzZF9pbmZvLnRyaWdfdm9pY2UgPSAxOw0K KwllbHNlDQorCQl3dmlmLT51YXBzZF9pbmZvLnRyaWdfdm9pY2UgPSAwOw0KKw0KKwlpZiAoYXJn LT51YXBzZF9lbmFibGVbSUVFRTgwMjExX0FDX1ZJXSkNCisJCXd2aWYtPnVhcHNkX2luZm8udHJp Z192aWRlbyA9IDE7DQorCWVsc2UNCisJCXd2aWYtPnVhcHNkX2luZm8udHJpZ192aWRlbyA9IDA7 DQorDQorCWlmIChhcmctPnVhcHNkX2VuYWJsZVtJRUVFODAyMTFfQUNfQkVdKQ0KKwkJd3ZpZi0+ dWFwc2RfaW5mby50cmlnX2JlID0gMTsNCisJZWxzZQ0KKwkJd3ZpZi0+dWFwc2RfaW5mby50cmln X2JlID0gMDsNCisNCisJaWYgKGFyZy0+dWFwc2RfZW5hYmxlW0lFRUU4MDIxMV9BQ19CS10pDQor CQl3dmlmLT51YXBzZF9pbmZvLnRyaWdfYmNrZ3JuZCA9IDE7DQorCWVsc2UNCisJCXd2aWYtPnVh cHNkX2luZm8udHJpZ19iY2tncm5kID0gMDsNCisNCisJLyogQ3VycmVudGx5IHBzZXVkbyBVLUFQ U0Qgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQsIHNvIHNldHRpbmcNCisJICogTWluQXV0b1Ry aWdnZXJJbnRlcnZhbCwgTWF4QXV0b1RyaWdnZXJJbnRlcnZhbCBhbmQNCisJICogQXV0b1RyaWdn ZXJTdGVwIHRvIDANCisJICovDQorCXd2aWYtPnVhcHNkX2luZm8ubWluX2F1dG9fdHJpZ2dlcl9p bnRlcnZhbCA9IDA7DQorCXd2aWYtPnVhcHNkX2luZm8ubWF4X2F1dG9fdHJpZ2dlcl9pbnRlcnZh bCA9IDA7DQorCXd2aWYtPnVhcHNkX2luZm8uYXV0b190cmlnZ2VyX3N0ZXAgPSAwOw0KKw0KKwly ZXQgPSBoaWZfc2V0X3VhcHNkX2luZm8od3ZpZiwgJnd2aWYtPnVhcHNkX2luZm8pOw0KKwlyZXR1 cm4gcmV0Ow0KK30NCiANCiBpbnQgd2Z4X2Z3ZF9wcm9iZV9yZXEoc3RydWN0IHdmeF92aWYgKnd2 aWYsIGJvb2wgZW5hYmxlKQ0KIHsNCkBAIC0yMyw2ICsxNjQsMTA1MyBAQCBpbnQgd2Z4X2Z3ZF9w cm9iZV9yZXEoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgZW5hYmxlKQ0KIAkJCQkgd3ZpZi0+ ZndkX3Byb2JlX3JlcSk7DQogfQ0KIA0KK3N0YXRpYyBpbnQgd2Z4X3NldF9tY2FzdF9maWx0ZXIo c3RydWN0IHdmeF92aWYgKnd2aWYsDQorCQkJCSAgICBzdHJ1Y3Qgd2Z4X2dycF9hZGRyX3RhYmxl ICpmcCkNCit7DQorCWludCBpLCByZXQ7DQorCXN0cnVjdCBoaWZfbWliX2NvbmZpZ19kYXRhX2Zp bHRlciBjb25maWcgPSB7IH07DQorCXN0cnVjdCBoaWZfbWliX3NldF9kYXRhX2ZpbHRlcmluZyBm aWx0ZXJfZGF0YSA9IHsgfTsNCisJc3RydWN0IGhpZl9taWJfbWFjX2FkZHJfZGF0YV9mcmFtZV9j b25kaXRpb24gZmlsdGVyX2FkZHJfdmFsID0geyB9Ow0KKwlzdHJ1Y3QgaGlmX21pYl91Y19tY19i Y19kYXRhX2ZyYW1lX2NvbmRpdGlvbiBmaWx0ZXJfYWRkcl90eXBlID0geyB9Ow0KKw0KKwkvLyBU ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgZmlsdGVycw0KKwlyZXR1cm4gaGlmX3NldF9kYXRhX2Zp bHRlcmluZyh3dmlmLCAmZmlsdGVyX2RhdGEpOw0KKw0KKwlpZiAoIWZwLT5lbmFibGUpIHsNCisJ CWZpbHRlcl9kYXRhLmVuYWJsZSA9IDA7DQorCQlyZXR1cm4gaGlmX3NldF9kYXRhX2ZpbHRlcmlu Zyh3dmlmLCAmZmlsdGVyX2RhdGEpOw0KKwl9DQorDQorCS8vIEExIEFkZHJlc3MgbWF0Y2ggb24g bGlzdA0KKwlmb3IgKGkgPSAwOyBpIDwgZnAtPm51bV9hZGRyZXNzZXM7IGkrKykgew0KKwkJZmls dGVyX2FkZHJfdmFsLmNvbmRpdGlvbl9pZHggPSBpOw0KKwkJZmlsdGVyX2FkZHJfdmFsLmFkZHJl c3NfdHlwZSA9IEhJRl9NQUNfQUREUl9BMTsNCisJCWV0aGVyX2FkZHJfY29weShmaWx0ZXJfYWRk cl92YWwubWFjX2FkZHJlc3MsIGZwLT5hZGRyZXNzX2xpc3RbaV0pOw0KKwkJcmV0ID0gaGlmX3Nl dF9tYWNfYWRkcl9jb25kaXRpb24od3ZpZiwgJmZpbHRlcl9hZGRyX3ZhbCk7DQorCQlpZiAocmV0 KQ0KKwkJCXJldHVybiByZXQ7DQorCQljb25maWcubWFjX2NvbmQgfD0gMSA8PCBpOw0KKwl9DQor DQorCS8vIEFjY2VwdCB1bmljYXN0IGFuZCBicm9hZGNhc3QNCisJZmlsdGVyX2FkZHJfdHlwZS5j b25kaXRpb25faWR4ID0gMDsNCisJZmlsdGVyX2FkZHJfdHlwZS5wYXJhbS5iaXRzLnR5cGVfdW5p Y2FzdCA9IDE7DQorCWZpbHRlcl9hZGRyX3R5cGUucGFyYW0uYml0cy50eXBlX2Jyb2FkY2FzdCA9 IDE7DQorCXJldCA9IGhpZl9zZXRfdWNfbWNfYmNfY29uZGl0aW9uKHd2aWYsICZmaWx0ZXJfYWRk cl90eXBlKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCWNvbmZpZy51Y19tY19i Y19jb25kID0gMTsNCisJY29uZmlnLmZpbHRlcl9pZHggPSAwOyAvLyBUT0RPICNkZWZpbmUgTVVM VElDQVNUX0ZJTFRFUklORyAwDQorCWNvbmZpZy5lbmFibGUgPSAxOw0KKwlyZXQgPSBoaWZfc2V0 X2NvbmZpZ19kYXRhX2ZpbHRlcih3dmlmLCAmY29uZmlnKTsNCisJaWYgKHJldCkNCisJCXJldHVy biByZXQ7DQorDQorCS8vIGRpc2NhcmQgYWxsIGRhdGEgZnJhbWVzIGV4Y2VwdCBtYXRjaCBmaWx0 ZXINCisJZmlsdGVyX2RhdGEuZW5hYmxlID0gMTsNCisJZmlsdGVyX2RhdGEuZGVmYXVsdF9maWx0 ZXIgPSAxOyAvLyBkaXNjYXJkIGFsbA0KKwlyZXQgPSBoaWZfc2V0X2RhdGFfZmlsdGVyaW5nKHd2 aWYsICZmaWx0ZXJfZGF0YSk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3ZvaWQgd2Z4X3Vw ZGF0ZV9maWx0ZXJpbmcoc3RydWN0IHdmeF92aWYgKnd2aWYpDQorew0KKwlpbnQgcmV0Ow0KKwli b29sIGlzX3N0YSA9IHd2aWYtPnZpZiAmJiBOTDgwMjExX0lGVFlQRV9TVEFUSU9OID09IHd2aWYt PnZpZi0+dHlwZTsNCisJYm9vbCBmaWx0ZXJfYnNzaWQgPSB3dmlmLT5maWx0ZXJfYnNzaWQ7DQor CWJvb2wgZndkX3Byb2JlX3JlcSA9IHd2aWYtPmZ3ZF9wcm9iZV9yZXE7DQorCXN0cnVjdCBoaWZf bWliX2Jjbl9maWx0ZXJfZW5hYmxlIGJmX2N0cmw7DQorCXN0cnVjdCBoaWZfbWliX2Jjbl9maWx0 ZXJfdGFibGUgKmJmX3RibDsNCisJc3RydWN0IGhpZl9pZV90YWJsZV9lbnRyeSBpZV90YmxbXSA9 IHsNCisJCXsNCisJCQkuaWVfaWQgICAgICAgID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDLA0K KwkJCS5oYXNfY2hhbmdlZCAgPSAxLA0KKwkJCS5ub19sb25nZXIgICAgPSAxLA0KKwkJCS5oYXNf YXBwZWFyZWQgPSAxLA0KKwkJCS5vdWkgICAgICAgICA9IHsgMHg1MCwgMHg2RiwgMHg5QX0sDQor CQl9LCB7DQorCQkJLmllX2lkICAgICAgICA9IFdMQU5fRUlEX0hUX09QRVJBVElPTiwNCisJCQku aGFzX2NoYW5nZWQgID0gMSwNCisJCQkubm9fbG9uZ2VyICAgID0gMSwNCisJCQkuaGFzX2FwcGVh cmVkID0gMSwNCisJCX0sIHsNCisJCQkuaWVfaWQgICAgICAgID0gV0xBTl9FSURfRVJQX0lORk8s DQorCQkJLmhhc19jaGFuZ2VkICA9IDEsDQorCQkJLm5vX2xvbmdlciAgICA9IDEsDQorCQkJLmhh c19hcHBlYXJlZCA9IDEsDQorCQl9DQorCX07DQorDQorCWlmICh3dmlmLT5zdGF0ZSA9PSBXRlhf U1RBVEVfUEFTU0lWRSkNCisJCXJldHVybjsNCisNCisJYmZfdGJsID0ga21hbGxvYyhzaXplb2Yo c3RydWN0IGhpZl9taWJfYmNuX2ZpbHRlcl90YWJsZSkgKyBzaXplb2YoaWVfdGJsKSwgR0ZQX0tF Uk5FTCk7DQorCW1lbWNweShiZl90YmwtPmllX3RhYmxlLCBpZV90YmwsIHNpemVvZihpZV90Ymwp KTsNCisJaWYgKHd2aWYtPmRpc2FibGVfYmVhY29uX2ZpbHRlcikgew0KKwkJYmZfY3RybC5lbmFi bGUgPSAwOw0KKwkJYmZfY3RybC5iY25fY291bnQgPSAxOw0KKwkJYmZfdGJsLT5udW1fb2ZfaW5m b19lbG10cyA9IDA7DQorCX0gZWxzZSBpZiAoIWlzX3N0YSkgew0KKwkJYmZfY3RybC5lbmFibGUg PSBISUZfQkVBQ09OX0ZJTFRFUl9FTkFCTEUgfCBISUZfQkVBQ09OX0ZJTFRFUl9BVVRPX0VSUDsN CisJCWJmX2N0cmwuYmNuX2NvdW50ID0gMDsNCisJCWJmX3RibC0+bnVtX29mX2luZm9fZWxtdHMg PSAyOw0KKwl9IGVsc2Ugew0KKwkJYmZfY3RybC5lbmFibGUgPSBISUZfQkVBQ09OX0ZJTFRFUl9F TkFCTEU7DQorCQliZl9jdHJsLmJjbl9jb3VudCA9IDA7DQorCQliZl90YmwtPm51bV9vZl9pbmZv X2VsbXRzID0gMzsNCisJfQ0KKw0KKwlyZXQgPSBoaWZfc2V0X3J4X2ZpbHRlcih3dmlmLCBmaWx0 ZXJfYnNzaWQsIGZ3ZF9wcm9iZV9yZXEpOw0KKwlpZiAoIXJldCkNCisJCXJldCA9IGhpZl9zZXRf YmVhY29uX2ZpbHRlcl90YWJsZSh3dmlmLCBiZl90YmwpOw0KKwlpZiAoIXJldCkNCisJCXJldCA9 IGhpZl9iZWFjb25fZmlsdGVyX2NvbnRyb2wod3ZpZiwgYmZfY3RybC5lbmFibGUsIGJmX2N0cmwu YmNuX2NvdW50KTsNCisJaWYgKCFyZXQpDQorCQlyZXQgPSB3Znhfc2V0X21jYXN0X2ZpbHRlcih3 dmlmLCAmd3ZpZi0+bWNhc3RfZmlsdGVyKTsNCisJaWYgKHJldCkNCisJCWRldl9lcnIod3ZpZi0+ d2Rldi0+ZGV2LCAidXBkYXRlIGZpbHRlcmluZyBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KKwlrZnJl ZShiZl90YmwpOw0KK30NCisNCit2b2lkIHdmeF91cGRhdGVfZmlsdGVyaW5nX3dvcmsoc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250YWlu ZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYsIHVwZGF0ZV9maWx0ZXJpbmdfd29yayk7DQorDQor CXdmeF91cGRhdGVfZmlsdGVyaW5nKHd2aWYpOw0KK30NCisNCit1NjQgd2Z4X3ByZXBhcmVfbXVs dGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlz dCAqbWNfbGlzdCkNCit7DQorCWludCBpOw0KKwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOw0K KwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IE5VTEw7DQorCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0g aHctPnByaXY7DQorCWludCBjb3VudCA9IG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobWNfbGlz dCk7DQorDQorCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVM TCkgew0KKwkJbWVtc2V0KCZ3dmlmLT5tY2FzdF9maWx0ZXIsIDB4MDAsIHNpemVvZih3dmlmLT5t Y2FzdF9maWx0ZXIpKTsNCisJCWlmICghY291bnQgfHwgY291bnQgPiBBUlJBWV9TSVpFKHd2aWYt Pm1jYXN0X2ZpbHRlci5hZGRyZXNzX2xpc3QpKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJaSA9IDA7 DQorCQluZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCBtY19saXN0KSB7DQorCQkJZXRo ZXJfYWRkcl9jb3B5KHd2aWYtPm1jYXN0X2ZpbHRlci5hZGRyZXNzX2xpc3RbaV0sIGhhLT5hZGRy KTsNCisJCQlpKys7DQorCQl9DQorCQl3dmlmLT5tY2FzdF9maWx0ZXIuZW5hYmxlID0gMTsNCisJ CXd2aWYtPm1jYXN0X2ZpbHRlci5udW1fYWRkcmVzc2VzID0gY291bnQ7DQorCX0NCisNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK3ZvaWQgd2Z4X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsDQorCQkJICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywNCisJCQkgICAg IHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsDQorCQkJICAgICB1NjQgdW51c2VkKQ0KK3sNCisJ c3RydWN0IHdmeF92aWYgKnd2aWYgPSBOVUxMOw0KKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3 LT5wcml2Ow0KKw0KKwkqdG90YWxfZmxhZ3MgJj0gRklGX09USEVSX0JTUyB8IEZJRl9GQ1NGQUlM IHwgRklGX1BST0JFX1JFUTsNCisNCisJd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYs IHd2aWYpKSAhPSBOVUxMKSB7DQorCQlkb3duKCZ3dmlmLT5zY2FuLmxvY2spOw0KKwkJd3ZpZi0+ ZmlsdGVyX2Jzc2lkID0gKCp0b3RhbF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST0JF X1JFUSkpID8gMCA6IDE7DQorCQl3dmlmLT5kaXNhYmxlX2JlYWNvbl9maWx0ZXIgPSAhKCp0b3Rh bF9mbGFncyAmIEZJRl9QUk9CRV9SRVEpOw0KKwkJd2Z4X2Z3ZF9wcm9iZV9yZXEod3ZpZiwgdHJ1 ZSk7DQorCQl3ZnhfdXBkYXRlX2ZpbHRlcmluZyh3dmlmKTsNCisJCXVwKCZ3dmlmLT5zY2FuLmxv Y2spOw0KKwl9DQorfQ0KKw0KK2ludCB3ZnhfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgIHUxNiBxdWV1ZSwgY29uc3Qgc3Ry dWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykNCit7DQorCXN0cnVjdCB3Znhf ZGV2ICp3ZGV2ID0gaHctPnByaXY7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3 ZnhfdmlmICopIHZpZi0+ZHJ2X3ByaXY7DQorCWludCByZXQgPSAwOw0KKwkvKiBUbyBwcmV2ZW50 IHJlLWFwcGx5aW5nIFBNIHJlcXVlc3QgT0lEIGFnYWluIGFuZCBhZ2FpbiovDQorCXUxNiBvbGRf dWFwc2RfZmxhZ3MsIG5ld191YXBzZF9mbGFnczsNCisJc3RydWN0IGhpZl9yZXFfZWRjYV9xdWV1 ZV9wYXJhbXMgKmVkY2E7DQorDQorCW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOw0KKw0K KwlpZiAocXVldWUgPCBody0+cXVldWVzKSB7DQorCQlvbGRfdWFwc2RfZmxhZ3MgPSAqKCh1MTYg KikgJnd2aWYtPnVhcHNkX2luZm8pOw0KKwkJZWRjYSA9ICZ3dmlmLT5lZGNhLnBhcmFtc1txdWV1 ZV07DQorDQorCQl3dmlmLT5lZGNhLnVhcHNkX2VuYWJsZVtxdWV1ZV0gPSBwYXJhbXMtPnVhcHNk Ow0KKwkJZWRjYS0+YWlmc24gPSBwYXJhbXMtPmFpZnM7DQorCQllZGNhLT5jd19taW4gPSBwYXJh bXMtPmN3X21pbjsNCisJCWVkY2EtPmN3X21heCA9IHBhcmFtcy0+Y3dfbWF4Ow0KKwkJZWRjYS0+ dHhfb3BfbGltaXQgPSBwYXJhbXMtPnR4b3AgKiBUWE9QX1VOSVQ7DQorCQllZGNhLT5hbGxvd2Vk X21lZGl1bV90aW1lID0gMDsNCisJCXJldCA9IGhpZl9zZXRfZWRjYV9xdWV1ZV9wYXJhbXMod3Zp ZiwgZWRjYSk7DQorCQlpZiAocmV0KSB7DQorCQkJcmV0ID0gLUVJTlZBTDsNCisJCQlnb3RvIG91 dDsNCisJCX0NCisNCisJCWlmICh3dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RB VElPTikgew0KKwkJCXJldCA9IHdmeF9zZXRfdWFwc2RfcGFyYW0od3ZpZiwgJnd2aWYtPmVkY2Ep Ow0KKwkJCW5ld191YXBzZF9mbGFncyA9ICooKHUxNiAqKSAmd3ZpZi0+dWFwc2RfaW5mbyk7DQor CQkJaWYgKCFyZXQgJiYgd3ZpZi0+c2V0YnNzcGFyYW1zX2RvbmUgJiYNCisJCQkgICAgd3ZpZi0+ c3RhdGUgPT0gV0ZYX1NUQVRFX1NUQSAmJg0KKwkJCSAgICBvbGRfdWFwc2RfZmxhZ3MgIT0gbmV3 X3VhcHNkX2ZsYWdzKQ0KKwkJCQlyZXQgPSB3Znhfc2V0X3BtKHd2aWYsICZ3dmlmLT5wb3dlcnNh dmVfbW9kZSk7DQorCQl9DQorCX0gZWxzZSB7DQorCQlyZXQgPSAtRUlOVkFMOw0KKwl9DQorDQor b3V0Og0KKwltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOw0KKwlyZXR1cm4gcmV0Ow0K K30NCisNCitpbnQgd2Z4X3NldF9wbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qgc3RydWN0 IGhpZl9yZXFfc2V0X3BtX21vZGUgKmFyZykNCit7DQorCXN0cnVjdCBoaWZfcmVxX3NldF9wbV9t b2RlIHBtID0gKmFyZzsNCisJdTE2IHVhcHNkX2ZsYWdzOw0KKwlpbnQgcmV0Ow0KKw0KKwlpZiAo d3ZpZi0+c3RhdGUgIT0gV0ZYX1NUQVRFX1NUQSB8fCAhd3ZpZi0+YnNzX3BhcmFtcy5haWQpDQor CQlyZXR1cm4gMDsNCisNCisJbWVtY3B5KCZ1YXBzZF9mbGFncywgJnd2aWYtPnVhcHNkX2luZm8s IHNpemVvZih1YXBzZF9mbGFncykpOw0KKw0KKwlpZiAodWFwc2RfZmxhZ3MgIT0gMCkNCisJCXBt LnBtX21vZGUuZmFzdF9wc20gPSAwOw0KKw0KKwkvLyBLZXJuZWwgZGlzYWJsZSBQb3dlclNhdmUg d2hlbiBtdWx0aXBsZSB2aWZzIGFyZSBpbiB1c2UuIEluIGNvbnRyYXJ5LA0KKwkvLyBpdCBpcyBh YnNvbHV0bHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBQb3dlclNhdmUgZm9yIFdGMjAwDQorCWlmICh3 dmlmX2NvdW50KHd2aWYtPndkZXYpID4gMSkgew0KKwkJcG0ucG1fbW9kZS5lbnRlcl9wc20gPSAx Ow0KKwkJcG0ucG1fbW9kZS5mYXN0X3BzbSA9IDA7DQorCX0NCisNCisJaWYgKCF3YWl0X2Zvcl9j b21wbGV0aW9uX3RpbWVvdXQoJnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlLCBtc2Vjc190b19q aWZmaWVzKDMwMCkpKQ0KKwkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2LCAidGltZW91dCB3aGls ZSB3YWl0aW5nIG9mIHNldF9wbV9tb2RlX2NvbXBsZXRlXG4iKTsNCisJcmV0ID0gaGlmX3NldF9w bSh3dmlmLCAmcG0pOw0KKwkvLyBGSVhNRTogd2h5ID8NCisJaWYgKC1FVElNRURPVVQgPT0gd3Zp Zi0+c2Nhbi5zdGF0dXMpDQorCQl3dmlmLT5zY2FuLnN0YXR1cyA9IDE7DQorCXJldHVybiByZXQ7 DQorfQ0KKw0KK2ludCB3Znhfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHUzMiB2YWx1ZSkNCit7DQorCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7DQor CXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gTlVMTDsNCisNCisJd2hpbGUgKCh3dmlmID0gd3ZpZl9p dGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKQ0KKwkJaGlmX3J0c190aHJlc2hvbGQod3ZpZiwg dmFsdWUpOw0KKwlyZXR1cm4gMDsNCit9DQorDQorLyogSWYgc3VjY2Vzc2Z1bCwgTE9DS1MgdGhl IFRYIHF1ZXVlISAqLw0KK3N0YXRpYyBpbnQgX193ZnhfZmx1c2goc3RydWN0IHdmeF9kZXYgKndk ZXYsIGJvb2wgZHJvcCkNCit7DQorCWludCByZXQ7DQorDQorCWZvciAoOzspIHsNCisJCWlmIChk cm9wKSB7DQorCQkJd2Z4X3R4X3F1ZXVlc19jbGVhcih3ZGV2KTsNCisJCX0gZWxzZSB7DQorCQkJ cmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KA0KKwkJCQl3ZGV2LT50eF9xdWV1ZV9zdGF0cy53YWl0 X2xpbmtfaWRfZW1wdHksDQorCQkJCXdmeF90eF9xdWV1ZXNfaXNfZW1wdHkod2RldiksDQorCQkJ CTIgKiBIWik7DQorCQl9DQorDQorCQlpZiAoIWRyb3AgJiYgcmV0IDw9IDApIHsNCisJCQlyZXQg PSAtRVRJTUVET1VUOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwkJcmV0ID0gMDsNCisNCisJCXdmeF90 eF9sb2NrX2ZsdXNoKHdkZXYpOw0KKwkJaWYgKCF3ZnhfdHhfcXVldWVzX2lzX2VtcHR5KHdkZXYp KSB7DQorCQkJLyogSGlnaGx5IHVubGlrZWx5OiBXU00gcmVxdWV1ZWQgZnJhbWVzLiAqLw0KKwkJ CXdmeF90eF91bmxvY2sod2Rldik7DQorCQkJY29udGludWU7DQorCQl9DQorCQlicmVhazsNCisJ fQ0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCit2b2lkIHdmeF9mbHVzaChzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgdTMyIHF1ZXVlcywgYm9v bCBkcm9wKQ0KK3sNCisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsNCisJc3RydWN0 IHdmeF92aWYgKnd2aWY7DQorDQorCWlmICh2aWYpIHsNCisJCXd2aWYgPSAoc3RydWN0IHdmeF92 aWYgKikgdmlmLT5kcnZfcHJpdjsNCisJCWlmICh3dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9J RlRZUEVfTU9OSVRPUikNCisJCQlkcm9wID0gdHJ1ZTsNCisJCWlmICh3dmlmLT52aWYtPnR5cGUg PT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYgIXd2aWYtPmVuYWJsZV9iZWFjb24pDQorCQkJZHJvcCA9 IHRydWU7DQorCX0NCisNCisJLy8gRklYTUU6IG9ubHkgZmx1c2ggcmVxdWVzdGVkIHZpZg0KKwlp ZiAoIV9fd2Z4X2ZsdXNoKHdkZXYsIGRyb3ApKQ0KKwkJd2Z4X3R4X3VubG9jayh3ZGV2KTsNCit9 DQorDQorLyogV1NNIGNhbGxiYWNrcyAqLw0KKw0KK3N0YXRpYyB2b2lkIHdmeF9ldmVudF9yZXBv cnRfcnNzaShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdWludDhfdCByYXdfcmNwaV9yc3NpKQ0KK3sN CisJLyogUlNTSTogc2lnbmVkIFE4LjAsIFJDUEk6IHVuc2lnbmVkIFE3LjENCisJICogUlNTSSA9 IFJDUEkgLyAyIC0gMTEwDQorCSAqLw0KKwlpbnQgcmNwaV9yc3NpOw0KKwlpbnQgY3FtX2V2dDsN CisNCisJcmNwaV9yc3NpID0gcmF3X3JjcGlfcnNzaSAvIDIgLSAxMTA7DQorCWlmIChyY3BpX3Jz c2kgPD0gd3ZpZi0+Y3FtX3Jzc2lfdGhvbGQpDQorCQljcW1fZXZ0ID0gTkw4MDIxMV9DUU1fUlNT SV9USFJFU0hPTERfRVZFTlRfTE9XOw0KKwllbHNlDQorCQljcW1fZXZ0ID0gTkw4MDIxMV9DUU1f UlNTSV9USFJFU0hPTERfRVZFTlRfSElHSDsNCisjaWYgKEtFUk5FTF9WRVJTSU9OKDQsIDExLCAw KSA+IExJTlVYX1ZFUlNJT05fQ09ERSkNCisJaWVlZTgwMjExX2NxbV9yc3NpX25vdGlmeSh3dmlm LT52aWYsIGNxbV9ldnQsIEdGUF9LRVJORUwpOw0KKyNlbHNlDQorCWllZWU4MDIxMV9jcW1fcnNz aV9ub3RpZnkod3ZpZi0+dmlmLCBjcW1fZXZ0LCByY3BpX3Jzc2ksIEdGUF9LRVJORUwpOw0KKyNl bmRpZg0KK30NCisNCit2b2lkIHdmeF9ldmVudF9oYW5kbGVyX3dvcmsoc3RydWN0IHdvcmtfc3Ry dWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPQ0KKwkJY29udGFpbmVyX29m KHdvcmssIHN0cnVjdCB3ZnhfdmlmLCBldmVudF9oYW5kbGVyX3dvcmspOw0KKwlzdHJ1Y3Qgd2Z4 X2hpZl9ldmVudCAqZXZlbnQ7DQorDQorCUxJU1RfSEVBRChsaXN0KTsNCisNCisJc3Bpbl9sb2Nr KCZ3dmlmLT5ldmVudF9xdWV1ZV9sb2NrKTsNCisJbGlzdF9zcGxpY2VfaW5pdCgmd3ZpZi0+ZXZl bnRfcXVldWUsICZsaXN0KTsNCisJc3Bpbl91bmxvY2soJnd2aWYtPmV2ZW50X3F1ZXVlX2xvY2sp Ow0KKw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmbGlzdCwgbGluaykgew0KKwkJc3dp dGNoIChldmVudC0+ZXZ0LmV2ZW50X2lkKSB7DQorCQljYXNlIEhJRl9FVkVOVF9JTkRfQlNTTE9T VDoNCisJCQljYW5jZWxfd29ya19zeW5jKCZ3dmlmLT51bmpvaW5fd29yayk7DQorCQkJaWYgKCFk b3duX3RyeWxvY2soJnd2aWYtPnNjYW4ubG9jaykpIHsNCisJCQkJd2Z4X2NxbV9ic3Nsb3NzX3Nt KHd2aWYsIDEsIDAsIDApOw0KKwkJCQl1cCgmd3ZpZi0+c2Nhbi5sb2NrKTsNCisJCQl9IGVsc2Ug ew0KKwkJCQkvKiBTY2FuIGlzIGluIHByb2dyZXNzLiBEZWxheSByZXBvcnRpbmcuDQorCQkJCSAq IFNjYW4gY29tcGxldGUgd2lsbCB0cmlnZ2VyIGJzc19sb3NzX3dvcmsNCisJCQkJICovDQorCQkJ CXd2aWYtPmRlbGF5ZWRfbGlua19sb3NzID0gMTsNCisJCQkJLyogQWxzbyBzdGFydCBhIHdhdGNo ZG9nLiAqLw0KKwkJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnd2aWYtPmJzc19sb3NzX3dvcmss IDUgKiBIWik7DQorCQkJfQ0KKwkJCWJyZWFrOw0KKwkJY2FzZSBISUZfRVZFTlRfSU5EX0JTU1JF R0FJTkVEOg0KKwkJCXdmeF9jcW1fYnNzbG9zc19zbSh3dmlmLCAwLCAwLCAwKTsNCisJCQljYW5j ZWxfd29ya19zeW5jKCZ3dmlmLT51bmpvaW5fd29yayk7DQorCQkJYnJlYWs7DQorCQljYXNlIEhJ Rl9FVkVOVF9JTkRfUkNQSV9SU1NJOg0KKwkJCXdmeF9ldmVudF9yZXBvcnRfcnNzaSh3dmlmLCBl dmVudC0+ZXZ0LmV2ZW50X2RhdGEucmNwaV9yc3NpKTsNCisJCQlicmVhazsNCisJCWNhc2UgSElG X0VWRU5UX0lORF9QU19NT0RFX0VSUk9SOg0KKwkJCWRldl93YXJuKHd2aWYtPndkZXYtPmRldiwg ImVycm9yIHdoaWxlIHByb2Nlc3NpbmcgcG93ZXIgc2F2ZSByZXF1ZXN0XG4iKTsNCisJCQlicmVh azsNCisJCWRlZmF1bHQ6DQorCQkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2LCAidW5oYW5kbGVk IGV2ZW50IGluZGljYXRpb246ICUuMnhcbiIsIGV2ZW50LT5ldnQuZXZlbnRfaWQpOw0KKwkJCWJy ZWFrOw0KKwkJfQ0KKwl9DQorCV9fd2Z4X2ZyZWVfZXZlbnRfcXVldWUoJmxpc3QpOw0KK30NCisN Cit2b2lkIHdmeF9ic3NfbG9zc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQor CXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3Znhfdmlm LCBic3NfbG9zc193b3JrLndvcmspOw0KKw0KKwlpZWVlODAyMTFfY29ubmVjdGlvbl9sb3NzKHd2 aWYtPnZpZik7DQorfQ0KKw0KK3ZvaWQgd2Z4X2Jzc19wYXJhbXNfd29yayhzdHJ1Y3Qgd29ya19z dHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IGNvbnRhaW5lcl9vZih3 b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwgYnNzX3BhcmFtc193b3JrKTsNCisNCisJbXV0ZXhfbG9jaygm d3ZpZi0+d2Rldi0+Y29uZl9tdXRleCk7DQorCXd2aWYtPmJzc19wYXJhbXMuYnNzX2ZsYWdzLmxv c3RfY291bnRfb25seSA9IDE7DQorCWhpZl9zZXRfYnNzX3BhcmFtcyh3dmlmLCAmd3ZpZi0+YnNz X3BhcmFtcyk7DQorCXd2aWYtPmJzc19wYXJhbXMuYnNzX2ZsYWdzLmxvc3RfY291bnRfb25seSA9 IDA7DQorCW11dGV4X3VubG9jaygmd3ZpZi0+d2Rldi0+Y29uZl9tdXRleCk7DQorfQ0KKw0KK3Zv aWQgd2Z4X3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAq d29yaykNCit7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gY29udGFpbmVyX29mKHdvcmssIHN0 cnVjdCB3ZnhfdmlmLCBzZXRfYmVhY29uX3dha2V1cF9wZXJpb2Rfd29yayk7DQorDQorCWhpZl9z ZXRfYmVhY29uX3dha2V1cF9wZXJpb2Qod3ZpZiwgd3ZpZi0+ZHRpbV9wZXJpb2QsIHd2aWYtPmR0 aW1fcGVyaW9kKTsNCit9DQorDQorc3RhdGljIHZvaWQgd2Z4X2RvX3Vuam9pbihzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZikNCit7DQorCW11dGV4X2xvY2soJnd2aWYtPndkZXYtPmNvbmZfbXV0ZXgpOw0K Kw0KKwlpZiAoYXRvbWljX3JlYWQoJnd2aWYtPnNjYW4uaW5fcHJvZ3Jlc3MpKSB7DQorCQlpZiAo d3ZpZi0+ZGVsYXllZF91bmpvaW4pDQorCQkJZGV2X2RiZyh3dmlmLT53ZGV2LT5kZXYsICJkZWxh eWVkIHVuam9pbiBpcyBhbHJlYWR5IHNjaGVkdWxlZFxuIik7DQorCQllbHNlDQorCQkJd3ZpZi0+ ZGVsYXllZF91bmpvaW4gPSB0cnVlOw0KKwkJZ290byBkb25lOw0KKwl9DQorDQorCXd2aWYtPmRl bGF5ZWRfbGlua19sb3NzID0gZmFsc2U7DQorDQorCWlmICghd3ZpZi0+c3RhdGUpDQorCQlnb3Rv IGRvbmU7DQorDQorCWlmICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RBVEVfQVApDQorCQlnb3RvIGRv bmU7DQorDQorCWNhbmNlbF93b3JrX3N5bmMoJnd2aWYtPnVwZGF0ZV9maWx0ZXJpbmdfd29yayk7 DQorCWNhbmNlbF93b3JrX3N5bmMoJnd2aWYtPnNldF9iZWFjb25fd2FrZXVwX3BlcmlvZF93b3Jr KTsNCisJd3ZpZi0+c3RhdGUgPSBXRlhfU1RBVEVfUEFTU0lWRTsNCisNCisJLyogVW5qb2luIGlz IGEgcmVzZXQuICovDQorCXdmeF90eF9mbHVzaCh3dmlmLT53ZGV2KTsNCisJaGlmX2tlZXBfYWxp dmVfcGVyaW9kKHd2aWYsIDApOw0KKwloaWZfcmVzZXQod3ZpZiwgZmFsc2UpOw0KKwloaWZfc2V0 X291dHB1dF9wb3dlcih3dmlmLCB3dmlmLT53ZGV2LT5vdXRwdXRfcG93ZXIgKiAxMCk7DQorCXd2 aWYtPmR0aW1fcGVyaW9kID0gMDsNCisJaGlmX3NldF9tYWNhZGRyKHd2aWYsIHd2aWYtPnZpZi0+ YWRkcik7DQorCXdmeF9mcmVlX2V2ZW50X3F1ZXVlKHd2aWYpOw0KKwljYW5jZWxfd29ya19zeW5j KCZ3dmlmLT5ldmVudF9oYW5kbGVyX3dvcmspOw0KKwl3ZnhfY3FtX2Jzc2xvc3Nfc20od3ZpZiwg MCwgMCwgMCk7DQorDQorCS8qIERpc2FibGUgQmxvY2sgQUNLcyAqLw0KKwloaWZfc2V0X2Jsb2Nr X2Fja19wb2xpY3kod3ZpZiwgMCwgMCk7DQorDQorCXd2aWYtPmRpc2FibGVfYmVhY29uX2ZpbHRl ciA9IGZhbHNlOw0KKwl3ZnhfdXBkYXRlX2ZpbHRlcmluZyh3dmlmKTsNCisJbWVtc2V0KCZ3dmlm LT5ic3NfcGFyYW1zLCAwLCBzaXplb2Yod3ZpZi0+YnNzX3BhcmFtcykpOw0KKwl3dmlmLT5zZXRi c3NwYXJhbXNfZG9uZSA9IGZhbHNlOw0KKwltZW1zZXQoJnd2aWYtPmh0X2luZm8sIDAsIHNpemVv Zih3dmlmLT5odF9pbmZvKSk7DQorDQorZG9uZToNCisJbXV0ZXhfdW5sb2NrKCZ3dmlmLT53ZGV2 LT5jb25mX211dGV4KTsNCit9DQorDQorc3RhdGljIHZvaWQgd2Z4X3NldF9tZnAoc3RydWN0IHdm eF92aWYgKnd2aWYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcykNCit7DQorCWNvbnN0IGludCBw YWlyd2lzZV9jaXBoZXJfc3VpdGVfY291bnRfb2Zmc2V0ID0gOCAvIHNpemVvZih1aW50MTZfdCk7 DQorCWNvbnN0IGludCBwYWlyd2lzZV9jaXBoZXJfc3VpdGVfc2l6ZSA9IDQgLyBzaXplb2YodWlu dDE2X3QpOw0KKwljb25zdCBpbnQgYWttX3N1aXRlX3NpemUgPSA0IC8gc2l6ZW9mKHVpbnQxNl90 KTsNCisJY29uc3QgdWludDE2X3QgKnB0ciA9IE5VTEw7DQorCWJvb2wgbWZwYyA9IGZhbHNlOw0K Kwlib29sIG1mcHIgPSBmYWxzZTsNCisNCisJLyogODAyLjExdyBwcm90ZWN0ZWQgbWdtdCBmcmFt ZXMgKi8NCisNCisJLyogcmV0cmlldmUgTUZQQyBhbmQgTUZQUiBmbGFncyBmcm9tIGJlYWNvbiBv ciBQQlJTUCAqLw0KKw0KKwlyY3VfcmVhZF9sb2NrKCk7DQorCWlmIChic3MpDQorCQlwdHIgPSAo Y29uc3QgdWludDE2X3QgKikgaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNzLCBXTEFOX0VJRF9SU04p Ow0KKw0KKwlpZiAocHRyKSB7DQorCQlwdHIgKz0gcGFpcndpc2VfY2lwaGVyX3N1aXRlX2NvdW50 X29mZnNldDsNCisJCXB0ciArPSAxICsgcGFpcndpc2VfY2lwaGVyX3N1aXRlX3NpemUgKiAqcHRy Ow0KKwkJcHRyICs9IDEgKyBha21fc3VpdGVfc2l6ZSAqICpwdHI7DQorCQltZnByID0gKnB0ciAm IEJJVCg2KTsNCisJCW1mcGMgPSAqcHRyICYgQklUKDcpOw0KKwl9DQorCXJjdV9yZWFkX3VubG9j aygpOw0KKw0KKwloaWZfc2V0X21mcCh3dmlmLCBtZnBjLCBtZnByKTsNCit9DQorDQorLyogTVVT VCBiZSBjYWxsZWQgd2l0aCB0eF9sb2NrIGhlbGQhICBJdCB3aWxsIGJlIHVubG9ja2VkIGZvciB1 cy4gKi8NCitzdGF0aWMgdm9pZCB3ZnhfZG9fam9pbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikNCit7 DQorCWNvbnN0IHU4ICpic3NpZDsNCisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiA9 ICZ3dmlmLT52aWYtPmJzc19jb25mOw0KKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MgPSBOVUxM Ow0KKwlzdHJ1Y3QgaGlmX3JlcV9qb2luIGpvaW4gPSB7DQorCQkubW9kZSA9IGNvbmYtPmlic3Nf am9pbmVkID8gSElGX01PREVfSUJTUyA6IEhJRl9NT0RFX0JTUywNCisJCS5wcmVhbWJsZV90eXBl ID0gY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlID8gSElGX1BSRUFNQkxFX1NIT1JUIDogSElGX1BS RUFNQkxFX0xPTkcsDQorCQkucHJvYmVfZm9yX2pvaW4gPSAxLA0KKwkJLmF0aW1fd2luZG93ID0g MCwNCisJCS5iYXNpY19yYXRlX3NldCA9IHdmeF9yYXRlX21hc2tfdG9faHcod3ZpZi0+d2Rldiwg Y29uZi0+YmFzaWNfcmF0ZXMpLA0KKwl9Ow0KKw0KKwlpZiAod3ZpZi0+Y2hhbm5lbC0+ZmxhZ3Mg JiBJRUVFODAyMTFfQ0hBTl9OT19JUikNCisJCWpvaW4ucHJvYmVfZm9yX2pvaW4gPSAwOw0KKw0K KwlpZiAod3ZpZi0+c3RhdGUpDQorCQl3ZnhfZG9fdW5qb2luKHd2aWYpOw0KKw0KKwlic3NpZCA9 IHd2aWYtPnZpZi0+YnNzX2NvbmYuYnNzaWQ7DQorDQorI2lmIChLRVJORUxfVkVSU0lPTig0LCAx LCAwKSA+IExJTlVYX1ZFUlNJT05fQ09ERSkNCisJYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3dmlm LT53ZGV2LT5ody0+d2lwaHksIHd2aWYtPmNoYW5uZWwsIGJzc2lkLCBOVUxMLCAwLA0KKwkJCSAg ICAgICAwLCAwKTsNCisjZWxzZQ0KKwlic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHd2aWYtPndkZXYt Pmh3LT53aXBoeSwgd3ZpZi0+Y2hhbm5lbCwgYnNzaWQsIE5VTEwsIDAsDQorCQkJICAgICAgIElF RUU4MDIxMV9CU1NfVFlQRV9BTlksIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7DQorI2VuZGlmDQor DQorCWlmICghYnNzICYmICFjb25mLT5pYnNzX2pvaW5lZCkgew0KKwkJd2Z4X3R4X3VubG9jayh3 dmlmLT53ZGV2KTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwltdXRleF9sb2NrKCZ3dmlmLT53ZGV2 LT5jb25mX211dGV4KTsNCisNCisJLyogVW5kZXIgdGhlIGNvbmYgbG9jazogY2hlY2sgc2NhbiBz dGF0dXMgYW5kDQorCSAqIGJhaWwgb3V0IGlmIGl0IGlzIGluIHByb2dyZXNzLg0KKwkgKi8NCisJ aWYgKGF0b21pY19yZWFkKCZ3dmlmLT5zY2FuLmluX3Byb2dyZXNzKSkgew0KKwkJd2Z4X3R4X3Vu bG9jayh3dmlmLT53ZGV2KTsNCisJCWdvdG8gZG9uZV9wdXQ7DQorCX0NCisNCisJLyogU2FuaXR5 IGNoZWNrIGJhc2ljIHJhdGVzICovDQorCWlmICgham9pbi5iYXNpY19yYXRlX3NldCkNCisJCWpv aW4uYmFzaWNfcmF0ZV9zZXQgPSA3Ow0KKw0KKwkvKiBTYW5pdHkgY2hlY2sgYmVhY29uIGludGVy dmFsICovDQorCWlmICghd3ZpZi0+YmVhY29uX2ludCkNCisJCXd2aWYtPmJlYWNvbl9pbnQgPSAx Ow0KKw0KKwlqb2luLmJlYWNvbl9pbnRlcnZhbCA9IHd2aWYtPmJlYWNvbl9pbnQ7DQorDQorCS8v IERUSU0gcGVyaW9kIHdpbGwgYmUgc2V0IG9uIGZpcnN0IEJlYWNvbg0KKwl3dmlmLT5kdGltX3Bl cmlvZCA9IDA7DQorDQorCWpvaW4uY2hhbm5lbF9udW1iZXIgPSB3dmlmLT5jaGFubmVsLT5od192 YWx1ZTsNCisJbWVtY3B5KGpvaW4uYnNzaWQsIGJzc2lkLCBzaXplb2Yoam9pbi5ic3NpZCkpOw0K Kw0KKwlpZiAoIWNvbmYtPmlic3Nfam9pbmVkKSB7DQorCQljb25zdCB1OCAqc3NpZGllOw0KKw0K KwkJcmN1X3JlYWRfbG9jaygpOw0KKwkJc3NpZGllID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNz LCBXTEFOX0VJRF9TU0lEKTsNCisJCWlmIChzc2lkaWUpIHsNCisJCQlqb2luLnNzaWRfbGVuZ3Ro ID0gc3NpZGllWzFdOw0KKwkJCW1lbWNweShqb2luLnNzaWQsICZzc2lkaWVbMl0sIGpvaW4uc3Np ZF9sZW5ndGgpOw0KKwkJfQ0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7DQorCX0NCisNCisJd2Z4X3R4 X2ZsdXNoKHd2aWYtPndkZXYpOw0KKw0KKwlpZiAod3ZpZl9jb3VudCh3dmlmLT53ZGV2KSA8PSAx KQ0KKwkJaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHd2aWYsIDB4RkYsIDB4RkYpOw0KKw0KKwl3 Znhfc2V0X21mcCh3dmlmLCBic3MpOw0KKw0KKwkvKiBQZXJmb3JtIGFjdHVhbCBqb2luICovDQor CXd2aWYtPndkZXYtPnR4X2J1cnN0X2lkeCA9IC0xOw0KKwlpZiAoaGlmX2pvaW4od3ZpZiwgJmpv aW4pKSB7DQorCQlpZWVlODAyMTFfY29ubmVjdGlvbl9sb3NzKHd2aWYtPnZpZik7DQorCQl3dmlm LT5qb2luX2NvbXBsZXRlX3N0YXR1cyA9IC0xOw0KKwkJLyogVHggbG9jayBzdGlsbCBoZWxkLCB1 bmpvaW4gd2lsbCBjbGVhciBpdC4gKi8NCisJCWlmICghc2NoZWR1bGVfd29yaygmd3ZpZi0+dW5q b2luX3dvcmspKQ0KKwkJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQorCX0gZWxzZSB7DQor CQl3dmlmLT5qb2luX2NvbXBsZXRlX3N0YXR1cyA9IDA7DQorCQlpZiAod3ZpZi0+dmlmLT50eXBl ID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQ0KKwkJCXd2aWYtPnN0YXRlID0gV0ZYX1NUQVRFX0lC U1M7DQorCQllbHNlDQorCQkJd3ZpZi0+c3RhdGUgPSBXRlhfU1RBVEVfUFJFX1NUQTsNCisJCXdm eF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQorDQorCQkvKiBVcGxvYWQga2V5cyAqLw0KKwkJd2Z4 X3VwbG9hZF9rZXlzKHd2aWYpOw0KKw0KKwkJLyogRHVlIHRvIGJlYWNvbiBmaWx0ZXJpbmcgaXQg aXMgcG9zc2libGUgdGhhdCB0aGUNCisJCSAqIEFQJ3MgYmVhY29uIGlzIG5vdCBrbm93biBmb3Ig dGhlIG1hYzgwMjExIHN0YWNrLg0KKwkJICogRGlzYWJsZSBmaWx0ZXJpbmcgdGVtcG9yYXJ5IHRv IG1ha2Ugc3VyZSB0aGUgc3RhY2sNCisJCSAqIHJlY2VpdmVzIGF0IGxlYXN0IG9uZQ0KKwkJICov DQorCQl3dmlmLT5kaXNhYmxlX2JlYWNvbl9maWx0ZXIgPSB0cnVlOw0KKwl9DQorCXdmeF91cGRh dGVfZmlsdGVyaW5nKHd2aWYpOw0KKw0KK2RvbmVfcHV0Og0KKwltdXRleF91bmxvY2soJnd2aWYt PndkZXYtPmNvbmZfbXV0ZXgpOw0KKwlpZiAoYnNzKQ0KKwkJY2ZnODAyMTFfcHV0X2Jzcyh3dmlm LT53ZGV2LT5ody0+d2lwaHksIGJzcyk7DQorfQ0KKw0KK3ZvaWQgd2Z4X3Vuam9pbl93b3JrKHN0 cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gY29u dGFpbmVyX29mKHdvcmssIHN0cnVjdCB3ZnhfdmlmLCB1bmpvaW5fd29yayk7DQorDQorCXdmeF9k b191bmpvaW4od3ZpZik7DQorCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQorfQ0KKw0KK2lu dCB3Znhfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZiwNCisJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlzdHJ1Y3Qgd2Z4 X2RldiAqd2RldiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qg d2Z4X3ZpZiAqKSB2aWYtPmRydl9wcml2Ow0KKwlzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfcHJp diA9IChzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICopICZzdGEtPmRydl9wcml2Ow0KKwlzdHJ1Y3Qgd2Z4 X2xpbmtfZW50cnkgKmVudHJ5Ow0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KKw0KKwlpZiAod3Zp Zi0+dmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQ0KKwkJcmV0dXJuIDA7DQorDQorCXN0 YV9wcml2LT52aWZfaWQgPSB3dmlmLT5pZDsNCisJc3RhX3ByaXYtPmxpbmtfaWQgPSB3ZnhfZmlu ZF9saW5rX2lkKHd2aWYsIHN0YS0+YWRkcik7DQorCWlmICghc3RhX3ByaXYtPmxpbmtfaWQpIHsN CisJCWRldl93YXJuKHdkZXYtPmRldiwgIm1vIG1vcmUgbGluay1pZCBhdmFpbGFibGVcbiIpOw0K KwkJcmV0dXJuIC1FTk9FTlQ7DQorCX0NCisNCisJZW50cnkgPSAmd3ZpZi0+bGlua19pZF9kYltz dGFfcHJpdi0+bGlua19pZCAtIDFdOw0KKwlzcGluX2xvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xv Y2spOw0KKwlpZiAoKHN0YS0+dWFwc2RfcXVldWVzICYgSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9T SU5GT19BQ19NQVNLKSA9PQ0KKwkJCQkJSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19BQ19N QVNLKQ0KKwkJd3ZpZi0+c3RhX2FzbGVlcF9tYXNrIHw9IEJJVChzdGFfcHJpdi0+bGlua19pZCk7 DQorCWVudHJ5LT5zdGF0dXMgPSBXRlhfTElOS19IQVJEOw0KKwl3aGlsZSAoKHNrYiA9IHNrYl9k ZXF1ZXVlKCZlbnRyeS0+cnhfcXVldWUpKSkNCisJCWllZWU4MDIxMV9yeF9pcnFzYWZlKHdkZXYt Pmh3LCBza2IpOw0KKwlzcGluX3VubG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQorCXJl dHVybiAwOw0KK30NCisNCitpbnQgd2Z4X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0 YSAqc3RhKQ0KK3sNCisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsNCisJc3RydWN0 IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKikgdmlmLT5kcnZfcHJpdjsNCisJc3Ry dWN0IHdmeF9zdGFfcHJpdiAqc3RhX3ByaXYgPSAoc3RydWN0IHdmeF9zdGFfcHJpdiAqKSAmc3Rh LT5kcnZfcHJpdjsNCisJc3RydWN0IHdmeF9saW5rX2VudHJ5ICplbnRyeTsNCisNCisJaWYgKHd2 aWYtPnZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCB8fCAhc3RhX3ByaXYtPmxpbmtfaWQp DQorCQlyZXR1cm4gMDsNCisNCisJZW50cnkgPSAmd3ZpZi0+bGlua19pZF9kYltzdGFfcHJpdi0+ bGlua19pZCAtIDFdOw0KKwlzcGluX2xvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKwll bnRyeS0+c3RhdHVzID0gV0ZYX0xJTktfUkVTRVJWRTsNCisJZW50cnktPnRpbWVzdGFtcCA9IGpp ZmZpZXM7DQorCXdmeF90eF9sb2NrKHdkZXYpOw0KKwlpZiAoIXNjaGVkdWxlX3dvcmsoJnd2aWYt PmxpbmtfaWRfd29yaykpDQorCQl3ZnhfdHhfdW5sb2NrKHdkZXYpOw0KKwlzcGluX3VubG9ja19i aCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQorCWZsdXNoX3dvcmsoJnd2aWYtPmxpbmtfaWRfd29y ayk7DQorCXJldHVybiAwOw0KK30NCisNCit2b2lkIHdmeF9zZXRfY3RzX3dvcmsoc3RydWN0IHdv cmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250YWluZXJf b2Yod29yaywgc3RydWN0IHdmeF92aWYsIHNldF9jdHNfd29yayk7DQorCXU4IGVycF9pZVszXSA9 IHsgV0xBTl9FSURfRVJQX0lORk8sIDEsIDAgfTsNCisJc3RydWN0IGhpZl9pZV9mbGFncyB0YXJn ZXRfZnJhbWUgPSB7DQorCQkuYmVhY29uID0gMSwNCisJfTsNCisNCisJbXV0ZXhfbG9jaygmd3Zp Zi0+d2Rldi0+Y29uZl9tdXRleCk7DQorCWVycF9pZVsyXSA9IHd2aWYtPmVycF9pbmZvOw0KKwlt dXRleF91bmxvY2soJnd2aWYtPndkZXYtPmNvbmZfbXV0ZXgpOw0KKw0KKwloaWZfZXJwX3VzZV9w cm90ZWN0aW9uKHd2aWYsIGVycF9pZVsyXSAmIFdMQU5fRVJQX1VTRV9QUk9URUNUSU9OKTsNCisN CisJaWYgKHd2aWYtPnZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQ0KKwkJaGlm X3VwZGF0ZV9pZSh3dmlmLCAmdGFyZ2V0X2ZyYW1lLCBlcnBfaWUsIHNpemVvZihlcnBfaWUpKTsN Cit9DQorDQorc3RhdGljIGludCB3Znhfc3RhcnRfYXAoc3RydWN0IHdmeF92aWYgKnd2aWYpDQor ew0KKwlpbnQgcmV0Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mID0gJnd2aWYt PnZpZi0+YnNzX2NvbmY7DQorCXN0cnVjdCBoaWZfcmVxX3N0YXJ0IHN0YXJ0ID0gew0KKwkJLmNo YW5uZWxfbnVtYmVyID0gd3ZpZi0+Y2hhbm5lbC0+aHdfdmFsdWUsDQorCQkuYmVhY29uX2ludGVy dmFsID0gY29uZi0+YmVhY29uX2ludCwNCisJCS5kdGltX3BlcmlvZCA9IGNvbmYtPmR0aW1fcGVy aW9kLA0KKwkJLnByZWFtYmxlX3R5cGUgPSBjb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUgPyBISUZf UFJFQU1CTEVfU0hPUlQgOiBISUZfUFJFQU1CTEVfTE9ORywNCisJCS5iYXNpY19yYXRlX3NldCA9 IHdmeF9yYXRlX21hc2tfdG9faHcod3ZpZi0+d2RldiwgY29uZi0+YmFzaWNfcmF0ZXMpLA0KKwl9 Ow0KKw0KKwltZW1zZXQoc3RhcnQuc3NpZCwgMCwgc2l6ZW9mKHN0YXJ0LnNzaWQpKTsNCisJaWYg KCFjb25mLT5oaWRkZW5fc3NpZCkgew0KKwkJc3RhcnQuc3NpZF9sZW5ndGggPSBjb25mLT5zc2lk X2xlbjsNCisJCW1lbWNweShzdGFydC5zc2lkLCBjb25mLT5zc2lkLCBzdGFydC5zc2lkX2xlbmd0 aCk7DQorCX0NCisNCisJd3ZpZi0+YmVhY29uX2ludCA9IGNvbmYtPmJlYWNvbl9pbnQ7DQorCXd2 aWYtPmR0aW1fcGVyaW9kID0gY29uZi0+ZHRpbV9wZXJpb2Q7DQorDQorCW1lbXNldCgmd3ZpZi0+ bGlua19pZF9kYiwgMCwgc2l6ZW9mKHd2aWYtPmxpbmtfaWRfZGIpKTsNCisNCisJd3ZpZi0+d2Rl di0+dHhfYnVyc3RfaWR4ID0gLTE7DQorCXJldCA9IGhpZl9zdGFydCh3dmlmLCAmc3RhcnQpOw0K KwlpZiAoIXJldCkNCisJCXJldCA9IHdmeF91cGxvYWRfa2V5cyh3dmlmKTsNCisJaWYgKCFyZXQp IHsNCisJCWlmICh3dmlmX2NvdW50KHd2aWYtPndkZXYpIDw9IDEpDQorCQkJaGlmX3NldF9ibG9j a19hY2tfcG9saWN5KHd2aWYsIDB4RkYsIDB4RkYpOw0KKwkJd3ZpZi0+c3RhdGUgPSBXRlhfU1RB VEVfQVA7DQorCQl3ZnhfdXBkYXRlX2ZpbHRlcmluZyh3dmlmKTsNCisJfQ0KKwlyZXR1cm4gcmV0 Ow0KK30NCisNCitzdGF0aWMgaW50IHdmeF91cGRhdGVfYmVhY29uaW5nKHN0cnVjdCB3Znhfdmlm ICp3dmlmKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiA9ICZ3dmlmLT52 aWYtPmJzc19jb25mOw0KKw0KKwlpZiAod3ZpZi0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBF X0FQKSB7DQorCQkvKiBUT0RPOiBjaGVjayBpZiBjaGFuZ2VkIGNoYW5uZWwsIGJhbmQgKi8NCisJ CWlmICh3dmlmLT5zdGF0ZSAhPSBXRlhfU1RBVEVfQVAgfHwNCisJCSAgICB3dmlmLT5iZWFjb25f aW50ICE9IGNvbmYtPmJlYWNvbl9pbnQpIHsNCisJCQl3ZnhfdHhfbG9ja19mbHVzaCh3dmlmLT53 ZGV2KTsNCisJCQlpZiAod3ZpZi0+c3RhdGUgIT0gV0ZYX1NUQVRFX1BBU1NJVkUpDQorCQkJCWhp Zl9yZXNldCh3dmlmLCBmYWxzZSk7DQorCQkJd3ZpZi0+c3RhdGUgPSBXRlhfU1RBVEVfUEFTU0lW RTsNCisJCQl3Znhfc3RhcnRfYXAod3ZpZik7DQorCQkJd2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2 KTsNCisJCX0gZWxzZSB7DQorCQl9DQorCX0NCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBp bnQgd2Z4X3VwbG9hZF9iZWFjb24oc3RydWN0IHdmeF92aWYgKnd2aWYpDQorew0KKwlpbnQgcmV0 ID0gMDsNCisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7DQorCXN0cnVjdCBpZWVlODAyMTFf bWdtdCAqbWdtdDsNCisJc3RydWN0IGhpZl9taWJfdGVtcGxhdGVfZnJhbWUgKnA7DQorDQorCWlm ICh3dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fA0KKwkgICAgd3Zp Zi0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IgfHwNCisJICAgIHd2aWYtPnZp Zi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkNCisJCWdvdG8gZG9uZTsNCisN CisJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQod3ZpZi0+d2Rldi0+aHcsIHd2aWYtPnZpZik7 DQorDQorCWlmICghc2tiKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCXAgPSAoc3RydWN0IGhp Zl9taWJfdGVtcGxhdGVfZnJhbWUgKikgc2tiX3B1c2goc2tiLCA0KTsNCisJcC0+ZnJhbWVfdHlw ZSA9IEhJRl9UTVBMVF9CQ047DQorCXAtPmluaXRfcmF0ZSA9IEFQSV9SQVRFX0lOREVYX0JfMU1C UFM7IC8qIDFNYnBzIERTU1MgKi8NCisJcC0+ZnJhbWVfbGVuZ3RoID0gY3B1X3RvX2xlMTYoc2ti LT5sZW4gLSA0KTsNCisNCisJcmV0ID0gaGlmX3NldF90ZW1wbGF0ZV9mcmFtZSh3dmlmLCBwKTsN CisNCisJc2tiX3B1bGwoc2tiLCA0KTsNCisNCisJaWYgKHJldCkNCisJCWdvdG8gZG9uZTsNCisJ LyogVE9ETzogRGlzdGlsbCBwcm9iZSByZXNwOyByZW1vdmUgVElNIGFuZCBhbnkgb3RoZXIgYmVh Y29uLXNwZWNpZmljDQorCSAqIElFcw0KKwkgKi8NCisJbWdtdCA9ICh2b2lkICopc2tiLT5kYXRh Ow0KKwltZ210LT5mcmFtZV9jb250cm9sID0NCisJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQ RV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApOw0KKw0KKwlwLT5mcmFtZV90eXBl ID0gSElGX1RNUExUX1BSQlJFUzsNCisNCisJcmV0ID0gaGlmX3NldF90ZW1wbGF0ZV9mcmFtZSh3 dmlmLCBwKTsNCisJd2Z4X2Z3ZF9wcm9iZV9yZXEod3ZpZiwgZmFsc2UpOw0KKw0KK2RvbmU6DQor CWlmICghc2tiKQ0KKwkJZGV2X2tmcmVlX3NrYihza2IpOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisN CitzdGF0aWMgaW50IHdmeF9pc19odChjb25zdCBzdHJ1Y3Qgd2Z4X2h0X2luZm8gKmh0X2luZm8p DQorew0KKwlyZXR1cm4gaHRfaW5mby0+Y2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9OT19I VDsNCit9DQorDQorc3RhdGljIGludCB3ZnhfaHRfZ3JlZW5maWVsZChjb25zdCBzdHJ1Y3Qgd2Z4 X2h0X2luZm8gKmh0X2luZm8pDQorew0KKwlyZXR1cm4gd2Z4X2lzX2h0KGh0X2luZm8pICYmDQor CQkoaHRfaW5mby0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRCkgJiYNCisJ CSEoaHRfaW5mby0+b3BlcmF0aW9uX21vZGUgJg0KKwkJICBJRUVFODAyMTFfSFRfT1BfTU9ERV9O T05fR0ZfU1RBX1BSU05UKTsNCit9DQorDQorc3RhdGljIGludCB3ZnhfaHRfYW1wZHVfZGVuc2l0 eShjb25zdCBzdHJ1Y3Qgd2Z4X2h0X2luZm8gKmh0X2luZm8pDQorew0KKwlpZiAoIXdmeF9pc19o dChodF9pbmZvKSkNCisJCXJldHVybiAwOw0KKwlyZXR1cm4gaHRfaW5mby0+aHRfY2FwLmFtcGR1 X2RlbnNpdHk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHdmeF9qb2luX2ZpbmFsaXplKHN0cnVjdCB3 ZnhfdmlmICp3dmlmLCBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKQ0KK3sNCisJc3Ry dWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IE5VTEw7DQorCXN0cnVjdCBoaWZfbWliX3NldF9hc3Nv Y2lhdGlvbl9tb2RlIGFzc29jaWF0aW9uX21vZGUgPSB7IH07DQorDQorCWlmIChpbmZvLT5kdGlt X3BlcmlvZCkNCisJCXd2aWYtPmR0aW1fcGVyaW9kID0gaW5mby0+ZHRpbV9wZXJpb2Q7DQorCXd2 aWYtPmJlYWNvbl9pbnQgPSBpbmZvLT5iZWFjb25faW50Ow0KKw0KKwlyY3VfcmVhZF9sb2NrKCk7 DQorCWlmIChpbmZvLT5ic3NpZCAmJiAhaW5mby0+aWJzc19qb2luZWQpDQorCQlzdGEgPSBpZWVl ODAyMTFfZmluZF9zdGEod3ZpZi0+dmlmLCBpbmZvLT5ic3NpZCk7DQorCWlmIChzdGEpIHsNCisJ CXd2aWYtPmh0X2luZm8uaHRfY2FwID0gc3RhLT5odF9jYXA7DQorCQl3dmlmLT5ic3NfcGFyYW1z Lm9wZXJhdGlvbmFsX3JhdGVfc2V0ID0NCisJCQl3ZnhfcmF0ZV9tYXNrX3RvX2h3KHd2aWYtPndk ZXYsIHN0YS0+c3VwcF9yYXRlc1t3dmlmLT5jaGFubmVsLT5iYW5kXSk7DQorCQl3dmlmLT5odF9p bmZvLm9wZXJhdGlvbl9tb2RlID0gaW5mby0+aHRfb3BlcmF0aW9uX21vZGU7DQorCX0gZWxzZSB7 DQorCQltZW1zZXQoJnd2aWYtPmh0X2luZm8sIDAsIHNpemVvZih3dmlmLT5odF9pbmZvKSk7DQor CQl3dmlmLT5ic3NfcGFyYW1zLm9wZXJhdGlvbmFsX3JhdGVfc2V0ID0gLTE7DQorCX0NCisJcmN1 X3JlYWRfdW5sb2NrKCk7DQorDQorCS8qIE5vbiBHcmVlbmZpZWxkIHN0YXRpb25zIHByZXNlbnQg Ki8NCisJaWYgKHd2aWYtPmh0X2luZm8ub3BlcmF0aW9uX21vZGUgJiBJRUVFODAyMTFfSFRfT1Bf TU9ERV9OT05fR0ZfU1RBX1BSU05UKQ0KKwkJaGlmX2R1YWxfY3RzX3Byb3RlY3Rpb24od3ZpZiwg dHJ1ZSk7DQorCWVsc2UNCisJCWhpZl9kdWFsX2N0c19wcm90ZWN0aW9uKHd2aWYsIGZhbHNlKTsN CisNCisJYXNzb2NpYXRpb25fbW9kZS5wcmVhbWJ0eXBlX3VzZSA9IDE7DQorCWFzc29jaWF0aW9u X21vZGUubW9kZSA9IDE7DQorCWFzc29jaWF0aW9uX21vZGUucmF0ZXNldCA9IDE7DQorCWFzc29j aWF0aW9uX21vZGUuc3BhY2luZyA9IDE7DQorCWFzc29jaWF0aW9uX21vZGUucHJlYW1ibGVfdHlw ZSA9IGluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZSA/IEhJRl9QUkVBTUJMRV9TSE9SVCA6IEhJRl9Q UkVBTUJMRV9MT05HOw0KKwlhc3NvY2lhdGlvbl9tb2RlLmJhc2ljX3JhdGVfc2V0ID0gY3B1X3Rv X2xlMzIod2Z4X3JhdGVfbWFza190b19odyh3dmlmLT53ZGV2LCBpbmZvLT5iYXNpY19yYXRlcykp Ow0KKwlhc3NvY2lhdGlvbl9tb2RlLm1peGVkX29yX2dyZWVuZmllbGRfdHlwZSA9IHdmeF9odF9n cmVlbmZpZWxkKCZ3dmlmLT5odF9pbmZvKTsNCisJYXNzb2NpYXRpb25fbW9kZS5tcGR1X3N0YXJ0 X3NwYWNpbmcgPSB3ZnhfaHRfYW1wZHVfZGVuc2l0eSgmd3ZpZi0+aHRfaW5mbyk7DQorDQorCXdm eF9jcW1fYnNzbG9zc19zbSh3dmlmLCAwLCAwLCAwKTsNCisJY2FuY2VsX3dvcmtfc3luYygmd3Zp Zi0+dW5qb2luX3dvcmspOw0KKw0KKwl3dmlmLT5ic3NfcGFyYW1zLmJlYWNvbl9sb3N0X2NvdW50 ID0gMjA7DQorCXd2aWYtPmJzc19wYXJhbXMuYWlkID0gaW5mby0+YWlkOw0KKw0KKwlpZiAod3Zp Zi0+ZHRpbV9wZXJpb2QgPCAxKQ0KKwkJd3ZpZi0+ZHRpbV9wZXJpb2QgPSAxOw0KKw0KKwloaWZf c2V0X2Fzc29jaWF0aW9uX21vZGUod3ZpZiwgJmFzc29jaWF0aW9uX21vZGUpOw0KKw0KKwlpZiAo IWluZm8tPmlic3Nfam9pbmVkKSB7DQorCQloaWZfa2VlcF9hbGl2ZV9wZXJpb2Qod3ZpZiwgMzAg Lyogc2VjICovKTsNCisJCWhpZl9zZXRfYnNzX3BhcmFtcyh3dmlmLCAmd3ZpZi0+YnNzX3BhcmFt cyk7DQorCQl3dmlmLT5zZXRic3NwYXJhbXNfZG9uZSA9IHRydWU7DQorCQl3Znhfc2V0X2JlYWNv bl93YWtldXBfcGVyaW9kX3dvcmsoJnd2aWYtPnNldF9iZWFjb25fd2FrZXVwX3BlcmlvZF93b3Jr KTsNCisJCXdmeF9zZXRfcG0od3ZpZiwgJnd2aWYtPnBvd2Vyc2F2ZV9tb2RlKTsNCisJfQ0KK30N CisNCit2b2lkIHdmeF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0K KwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCQkgICAgIHN0cnVjdCBpZWVl ODAyMTFfYnNzX2NvbmYgKmluZm8sDQorCQkJICAgICB1MzIgY2hhbmdlZCkNCit7DQorCXN0cnVj dCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0 cnVjdCB3ZnhfdmlmICopIHZpZi0+ZHJ2X3ByaXY7DQorCWJvb2wgZG9fam9pbiA9IGZhbHNlOw0K KwlpbnQgaTsNCisJaW50IG5iX2FycF9hZGRyOw0KKw0KKwltdXRleF9sb2NrKCZ3ZGV2LT5jb25m X211dGV4KTsNCisNCisJLyogVE9ETzogQlNTX0NIQU5HRURfUU9TICovDQorCWlmIChjaGFuZ2Vk ICYgQlNTX0NIQU5HRURfQVJQX0ZJTFRFUikgew0KKwkJc3RydWN0IGhpZl9taWJfYXJwX2lwX2Fk ZHJfdGFibGUgZmlsdGVyID0geyB9Ow0KKw0KKwkJbmJfYXJwX2FkZHIgPSBpbmZvLT5hcnBfYWRk cl9jbnQ7DQorCQlpZiAobmJfYXJwX2FkZHIgPD0gMCB8fCBuYl9hcnBfYWRkciA+IEhJRl9NQVhf QVJQX0lQX0FERFJUQUJMRV9FTlRSSUVTKQ0KKwkJCW5iX2FycF9hZGRyID0gMDsNCisNCisJCWZv ciAoaSA9IDA7IGkgPCBISUZfTUFYX0FSUF9JUF9BRERSVEFCTEVfRU5UUklFUzsgaSsrKSB7DQor CQkJZmlsdGVyLmNvbmRpdGlvbl9pZHggPSBpOw0KKwkJCWlmIChpIDwgbmJfYXJwX2FkZHIpIHsN CisJCQkJLy8gQ2F1dGlvbjogdHlwZSBvZiBhcnBfYWRkcl9saXN0W2ldIGlzIF9fYmUzMg0KKwkJ CQltZW1jcHkoZmlsdGVyLmlwdjRfYWRkcmVzcywgJmluZm8tPmFycF9hZGRyX2xpc3RbaV0sIHNp emVvZihmaWx0ZXIuaXB2NF9hZGRyZXNzKSk7DQorCQkJCWZpbHRlci5hcnBfZW5hYmxlID0gSElG X0FSUF9OU19GSUxURVJJTkdfRU5BQkxFOw0KKwkJCX0gZWxzZSB7DQorCQkJCWZpbHRlci5hcnBf ZW5hYmxlID0gSElGX0FSUF9OU19GSUxURVJJTkdfRElTQUJMRTsNCisJCQl9DQorCQkJaGlmX3Nl dF9hcnBfaXB2NF9maWx0ZXIod3ZpZiwgJmZpbHRlcik7DQorCQl9DQorCX0NCisNCisJaWYgKGNo YW5nZWQgJg0KKwkgICAgKEJTU19DSEFOR0VEX0JFQUNPTiB8IEJTU19DSEFOR0VEX0FQX1BST0JF X1JFU1AgfA0KKwkgICAgIEJTU19DSEFOR0VEX0JTU0lEIHwgQlNTX0NIQU5HRURfU1NJRCB8IEJT U19DSEFOR0VEX0lCU1MpKSB7DQorCQl3dmlmLT5iZWFjb25faW50ID0gaW5mby0+YmVhY29uX2lu dDsNCisJCXdmeF91cGRhdGVfYmVhY29uaW5nKHd2aWYpOw0KKwkJd2Z4X3VwbG9hZF9iZWFjb24o d3ZpZik7DQorCX0NCisNCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxF RCAmJiB3dmlmLT5zdGF0ZSAhPSBXRlhfU1RBVEVfSUJTUykgew0KKwkJaWYgKHd2aWYtPmVuYWJs ZV9iZWFjb24gIT0gaW5mby0+ZW5hYmxlX2JlYWNvbikgew0KKwkJCWhpZl9iZWFjb25fdHJhbnNt aXQod3ZpZiwgaW5mby0+ZW5hYmxlX2JlYWNvbik7DQorCQkJd3ZpZi0+ZW5hYmxlX2JlYWNvbiA9 IGluZm8tPmVuYWJsZV9iZWFjb247DQorCQl9DQorCX0NCisNCisJLyogYXNzb2MvZGlzYXNzb2Ms IG9yIG1heWJlIEFJRCBjaGFuZ2VkICovDQorCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNT T0MpIHsNCisJCXdmeF90eF9sb2NrX2ZsdXNoKHdkZXYpOw0KKwkJd3ZpZi0+d2VwX2RlZmF1bHRf a2V5X2lkID0gLTE7DQorCQl3ZnhfdHhfdW5sb2NrKHdkZXYpOw0KKwl9DQorDQorCWlmIChjaGFu Z2VkICYgQlNTX0NIQU5HRURfQVNTT0MgJiYgIWluZm8tPmFzc29jICYmDQorCSAgICAod3ZpZi0+ c3RhdGUgPT0gV0ZYX1NUQVRFX1NUQSB8fCB3dmlmLT5zdGF0ZSA9PSBXRlhfU1RBVEVfSUJTUykp IHsNCisJCS8qIFNoZWR1bGUgdW5qb2luIHdvcmsgKi8NCisJCXdmeF90eF9sb2NrKHdkZXYpOw0K KwkJaWYgKCFzY2hlZHVsZV93b3JrKCZ3dmlmLT51bmpvaW5fd29yaykpDQorCQkJd2Z4X3R4X3Vu bG9jayh3ZGV2KTsNCisJfSBlbHNlIHsNCisJCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVB Q09OX0lOVCkgew0KKwkJCWlmIChpbmZvLT5pYnNzX2pvaW5lZCkNCisJCQkJZG9fam9pbiA9IHRy dWU7DQorCQkJZWxzZSBpZiAod3ZpZi0+c3RhdGUgPT0gV0ZYX1NUQVRFX0FQKQ0KKwkJCQl3Znhf dXBkYXRlX2JlYWNvbmluZyh3dmlmKTsNCisJCX0NCisNCisJCWlmIChjaGFuZ2VkICYgQlNTX0NI QU5HRURfQlNTSUQpDQorCQkJZG9fam9pbiA9IHRydWU7DQorDQorCQlpZiAoY2hhbmdlZCAmDQor CQkgICAgKEJTU19DSEFOR0VEX0FTU09DIHwgQlNTX0NIQU5HRURfQlNTSUQgfA0KKwkJICAgICBC U1NfQ0hBTkdFRF9JQlNTIHwgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMgfCBCU1NfQ0hBTkdFRF9I VCkpIHsNCisJCQlpZiAoaW5mby0+YXNzb2MpIHsNCisJCQkJaWYgKHd2aWYtPnN0YXRlIDwgV0ZY X1NUQVRFX1BSRV9TVEEpIHsNCisJCQkJCWllZWU4MDIxMV9jb25uZWN0aW9uX2xvc3ModmlmKTsN CisJCQkJCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7DQorCQkJCQlyZXR1cm47DQor CQkJCX0gZWxzZSBpZiAod3ZpZi0+c3RhdGUgPT0gV0ZYX1NUQVRFX1BSRV9TVEEpIHsNCisJCQkJ CXd2aWYtPnN0YXRlID0gV0ZYX1NUQVRFX1NUQTsNCisJCQkJfQ0KKwkJCX0gZWxzZSB7DQorCQkJ CWRvX2pvaW4gPSB0cnVlOw0KKwkJCX0NCisNCisJCQlpZiAoaW5mby0+YXNzb2MgfHwgaW5mby0+ aWJzc19qb2luZWQpDQorCQkJCXdmeF9qb2luX2ZpbmFsaXplKHd2aWYsIGluZm8pOw0KKwkJCWVs c2UNCisJCQkJbWVtc2V0KCZ3dmlmLT5ic3NfcGFyYW1zLCAwLCBzaXplb2Yod3ZpZi0+YnNzX3Bh cmFtcykpOw0KKwkJfQ0KKwl9DQorDQorCS8qIEVSUCBQcm90ZWN0aW9uICovDQorCWlmIChjaGFu Z2VkICYgKEJTU19DSEFOR0VEX0FTU09DIHwNCisJCSAgICAgICBCU1NfQ0hBTkdFRF9FUlBfQ1RT X1BST1QgfA0KKwkJICAgICAgIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkpIHsNCisJCXUzMiBw cmV2X2VycF9pbmZvID0gd3ZpZi0+ZXJwX2luZm87DQorDQorCQlpZiAoaW5mby0+dXNlX2N0c19w cm90KQ0KKwkJCXd2aWYtPmVycF9pbmZvIHw9IFdMQU5fRVJQX1VTRV9QUk9URUNUSU9OOw0KKwkJ ZWxzZSBpZiAoIShwcmV2X2VycF9pbmZvICYgV0xBTl9FUlBfTk9OX0VSUF9QUkVTRU5UKSkNCisJ CQl3dmlmLT5lcnBfaW5mbyAmPSB+V0xBTl9FUlBfVVNFX1BST1RFQ1RJT047DQorDQorCQlpZiAo aW5mby0+dXNlX3Nob3J0X3ByZWFtYmxlKQ0KKwkJCXd2aWYtPmVycF9pbmZvIHw9IFdMQU5fRVJQ X0JBUktFUl9QUkVBTUJMRTsNCisJCWVsc2UNCisJCQl3dmlmLT5lcnBfaW5mbyAmPSB+V0xBTl9F UlBfQkFSS0VSX1BSRUFNQkxFOw0KKw0KKwkJaWYgKHByZXZfZXJwX2luZm8gIT0gd3ZpZi0+ZXJw X2luZm8pDQorCQkJc2NoZWR1bGVfd29yaygmd3ZpZi0+c2V0X2N0c193b3JrKTsNCisJfQ0KKw0K KwlpZiAoY2hhbmdlZCAmIChCU1NfQ0hBTkdFRF9BU1NPQyB8IEJTU19DSEFOR0VEX0VSUF9TTE9U KSkNCisJCWhpZl9zbG90X3RpbWUod3ZpZiwgaW5mby0+dXNlX3Nob3J0X3Nsb3QgPyA5IDogMjAp Ow0KKw0KKwlpZiAoY2hhbmdlZCAmIChCU1NfQ0hBTkdFRF9BU1NPQyB8IEJTU19DSEFOR0VEX0NR TSkpIHsNCisJCXN0cnVjdCBoaWZfbWliX3JjcGlfcnNzaV90aHJlc2hvbGQgdGggPSB7DQorCQkJ LnJvbGxpbmdfYXZlcmFnZV9jb3VudCA9IDgsDQorCQkJLmRldGVjdGlvbiA9IDEsDQorCQl9Ow0K Kw0KKwkJd3ZpZi0+Y3FtX3Jzc2lfdGhvbGQgPSBpbmZvLT5jcW1fcnNzaV90aG9sZDsNCisNCisJ CWlmICghaW5mby0+Y3FtX3Jzc2lfdGhvbGQgJiYgIWluZm8tPmNxbV9yc3NpX2h5c3QpIHsNCisJ CQl0aC51cHBlcnRocmVzaCA9IDE7DQorCQkJdGgubG93ZXJ0aHJlc2ggPSAxOw0KKwkJfSBlbHNl IHsNCisJCQkvKiBGSVhNRSBJdCdzIG5vdCBhIGNvcnJlY3Qgd2F5IG9mIHNldHRpbmcgdGhyZXNo b2xkLg0KKwkJCSAqIFVwcGVyIGFuZCBsb3dlciBtdXN0IGJlIHNldCBlcXVhbCBoZXJlIGFuZCBh ZGp1c3RlZA0KKwkJCSAqIGluIGNhbGxiYWNrLiBIb3dldmVyIGN1cnJlbnQgaW1wbGVtZW50YXRp b24gaXMgbXVjaA0KKwkJCSAqIG1vcmUgcmVsaWFibGUgYW5kIHN0YWJsZS4NCisJCQkgKi8NCisJ CQkvKiBSU1NJOiBzaWduZWQgUTguMCwgUkNQSTogdW5zaWduZWQgUTcuMQ0KKwkJCSAqIFJTU0kg PSBSQ1BJIC8gMiAtIDExMA0KKwkJCSAqLw0KKwkJCXRoLnVwcGVyX3RocmVzaG9sZCA9IGluZm8t PmNxbV9yc3NpX3Rob2xkICsgaW5mby0+Y3FtX3Jzc2lfaHlzdDsNCisJCQl0aC51cHBlcl90aHJl c2hvbGQgPSAodGgudXBwZXJfdGhyZXNob2xkICsgMTEwKSAqIDI7DQorCQkJdGgubG93ZXJfdGhy ZXNob2xkID0gaW5mby0+Y3FtX3Jzc2lfdGhvbGQ7DQorCQkJdGgubG93ZXJfdGhyZXNob2xkID0g KHRoLmxvd2VyX3RocmVzaG9sZCArIDExMCkgKiAyOw0KKwkJfQ0KKwkJaGlmX3NldF9yY3BpX3Jz c2lfdGhyZXNob2xkKHd2aWYsICZ0aCk7DQorCX0NCisNCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hB TkdFRF9UWFBPV0VSICYmIGluZm8tPnR4cG93ZXIgIT0gd2Rldi0+b3V0cHV0X3Bvd2VyKSB7DQor CQl3ZGV2LT5vdXRwdXRfcG93ZXIgPSBpbmZvLT50eHBvd2VyOw0KKwkJaGlmX3NldF9vdXRwdXRf cG93ZXIod3ZpZiwgd2Rldi0+b3V0cHV0X3Bvd2VyICogMTApOw0KKwl9DQorCW11dGV4X3VubG9j aygmd2Rldi0+Y29uZl9tdXRleCk7DQorDQorCWlmIChkb19qb2luKSB7DQorCQl3ZnhfdHhfbG9j a19mbHVzaCh3ZGV2KTsNCisJCXdmeF9kb19qb2luKHd2aWYpOyAvKiBXaWxsIHVubG9jayBpdCBm b3IgdXMgKi8NCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZCB3ZnhfcHNfbm90aWZ5KHN0cnVjdCB3 ZnhfdmlmICp3dmlmLCBlbnVtIHN0YV9ub3RpZnlfY21kIG5vdGlmeV9jbWQsDQorCQkJICBpbnQg bGlua19pZCkNCit7DQorCXUzMiBiaXQsIHByZXY7DQorDQorCXNwaW5fbG9ja19iaCgmd3ZpZi0+ cHNfc3RhdGVfbG9jayk7DQorCS8qIFplcm8gbGluayBpZCBtZWFucyAiZm9yIGFsbCBsaW5rIElE cyIgKi8NCisJaWYgKGxpbmtfaWQpIHsNCisJCWJpdCA9IEJJVChsaW5rX2lkKTsNCisJfSBlbHNl IGlmIChub3RpZnlfY21kICE9IFNUQV9OT1RJRllfQVdBS0UpIHsNCisJCWRldl93YXJuKHd2aWYt PndkZXYtPmRldiwgInVuc3VwcG9ydGVkIG5vdGlmeSBjb21tYW5kXG4iKTsNCisJCWJpdCA9IDA7 DQorCX0gZWxzZSB7DQorCQliaXQgPSB3dmlmLT5saW5rX2lkX21hcDsNCisJfQ0KKwlwcmV2ID0g d3ZpZi0+c3RhX2FzbGVlcF9tYXNrICYgYml0Ow0KKw0KKwlzd2l0Y2ggKG5vdGlmeV9jbWQpIHsN CisJY2FzZSBTVEFfTk9USUZZX1NMRUVQOg0KKwkJaWYgKCFwcmV2KSB7DQorCQkJaWYgKHd2aWYt Pm1jYXN0X2J1ZmZlcmVkICYmICF3dmlmLT5zdGFfYXNsZWVwX21hc2spDQorCQkJCXNjaGVkdWxl X3dvcmsoJnd2aWYtPm1jYXN0X3N0YXJ0X3dvcmspOw0KKwkJCXd2aWYtPnN0YV9hc2xlZXBfbWFz ayB8PSBiaXQ7DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBTVEFfTk9USUZZX0FXQUtFOg0KKwkJ aWYgKHByZXYpIHsNCisJCQl3dmlmLT5zdGFfYXNsZWVwX21hc2sgJj0gfmJpdDsNCisJCQl3dmlm LT5wc3BvbGxfbWFzayAmPSB+Yml0Ow0KKwkJCWlmIChsaW5rX2lkICYmICF3dmlmLT5zdGFfYXNs ZWVwX21hc2spDQorCQkJCXNjaGVkdWxlX3dvcmsoJnd2aWYtPm1jYXN0X3N0b3Bfd29yayk7DQor CQkJd2Z4X2JoX3JlcXVlc3RfdHgod3ZpZi0+d2Rldik7DQorCQl9DQorCQlicmVhazsNCisJfQ0K KwlzcGluX3VubG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQorfQ0KKw0KK3ZvaWQgd2Z4 X3N0YV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYsDQorCQkgICAgZW51bSBzdGFfbm90aWZ5X2NtZCBub3RpZnlfY21kLCBzdHJ1Y3QgaWVl ZTgwMjExX3N0YSAqc3RhKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdm eF92aWYgKikgdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IHdmeF9zdGFfcHJpdiAqc3RhX3ByaXYg PSAoc3RydWN0IHdmeF9zdGFfcHJpdiAqKSAmc3RhLT5kcnZfcHJpdjsNCisNCisJd2Z4X3BzX25v dGlmeSh3dmlmLCBub3RpZnlfY21kLCBzdGFfcHJpdi0+bGlua19pZCk7DQorfQ0KKw0KIHN0YXRp YyBpbnQgd2Z4X3NldF90aW1faW1wbChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBhaWQwX2Jp dF9zZXQpDQogew0KIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KQEAgLTM0LDggKzEyMjIsMTEgQEAg c3RhdGljIGludCB3Znhfc2V0X3RpbV9pbXBsKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGFp ZDBfYml0X3NldCkNCiANCiAJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKHd2aWYtPndk ZXYtPmh3LCB3dmlmLT52aWYsDQogCQkJCSAgICAgICAmdGltX29mZnNldCwgJnRpbV9sZW5ndGgp Ow0KLQlpZiAoIXNrYikNCisJaWYgKCFza2IpIHsNCisJCWlmICghX193ZnhfZmx1c2god3ZpZi0+ d2RldiwgdHJ1ZSkpDQorCQkJd2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2KTsNCiAJCXJldHVybiAt RU5PRU5UOw0KKwl9DQogCXRpbV9wdHIgPSBza2ItPmRhdGEgKyB0aW1fb2Zmc2V0Ow0KIA0KIAlp ZiAodGltX29mZnNldCAmJiB0aW1fbGVuZ3RoID49IDYpIHsNCkBAIC01NywxNiArMTI0OCwzNCBA QCBzdGF0aWMgaW50IHdmeF9zZXRfdGltX2ltcGwoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wg YWlkMF9iaXRfc2V0KQ0KIAlyZXR1cm4gMDsNCiB9DQogDQordm9pZCB3Znhfc2V0X3RpbV93b3Jr KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0g Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3ZnhfdmlmLCBzZXRfdGltX3dvcmspOw0KKw0KKwl3 Znhfc2V0X3RpbV9pbXBsKHd2aWYsIHd2aWYtPmFpZDBfYml0X3NldCk7DQorfQ0KKw0KK2ludCB3 Znhfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEg KnN0YSwgYm9vbCBzZXQpDQorew0KKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2Ow0K KwlzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfZGV2ID0gKHN0cnVjdCB3Znhfc3RhX3ByaXYgKikg JnN0YS0+ZHJ2X3ByaXY7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gd2Rldl90b193dmlmKHdk ZXYsIHN0YV9kZXYtPnZpZl9pZCk7DQorDQorCXNjaGVkdWxlX3dvcmsoJnd2aWYtPnNldF90aW1f d29yayk7DQorCXJldHVybiAwOw0KK30NCisNCiBzdGF0aWMgdm9pZCB3ZnhfbWNhc3Rfc3RhcnRf d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQogew0KIAlzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwgbWNhc3Rfc3RhcnRfd29yayk7 DQorCWxvbmcgdG1vID0gd3ZpZi0+ZHRpbV9wZXJpb2QgKiBUVV9UT19KSUZGSUVTKHd2aWYtPmJl YWNvbl9pbnQgKyAyMCk7DQogDQogCWNhbmNlbF93b3JrX3N5bmMoJnd2aWYtPm1jYXN0X3N0b3Bf d29yayk7DQogCWlmICghd3ZpZi0+YWlkMF9iaXRfc2V0KSB7DQogCQl3ZnhfdHhfbG9ja19mbHVz aCh3dmlmLT53ZGV2KTsNCiAJCXdmeF9zZXRfdGltX2ltcGwod3ZpZiwgdHJ1ZSk7DQogCQl3dmlm LT5haWQwX2JpdF9zZXQgPSB0cnVlOw0KLQkJbW9kX3RpbWVyKCZ3dmlmLT5tY2FzdF90aW1lb3V0 LCBUVV9UT19KSUZGSUVTKDEwMDApKTsNCisJCW1vZF90aW1lcigmd3ZpZi0+bWNhc3RfdGltZW91 dCwgamlmZmllcyArIHRtbyk7DQogCQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOw0KIAl9DQog fQ0KQEAgLTEwMSw2ICsxMzEwLDE0OCBAQCBzdGF0aWMgdm9pZCB3ZnhfbWNhc3RfdGltZW91dChz dHJ1Y3QgdGltZXJfbGlzdCAqdCkNCiAJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xv Y2spOw0KIH0NCiANCisjaWYgKEtFUk5FTF9WRVJTSU9OKDQsIDQsIDApID4gTElOVVhfVkVSU0lP Tl9DT0RFKQ0KK2ludCB3ZnhfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBz dHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJICAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9t bG1lX2FjdGlvbiBhY3Rpb24sDQorCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUx NiB0aWQsDQorCQkgICAgIHUxNiAqc3NuLCB1OCBidWZfc2l6ZSkNCisjZWxzZQ0KKyNpZiAoS0VS TkVMX1ZFUlNJT04oNCwgNCwgNjkpID4gTElOVVhfVkVSU0lPTl9DT0RFKQ0KK2ludCB3ZnhfYW1w ZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAq dmlmLA0KKwkJICAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sDQor CQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuLA0KKwkJ ICAgICB1OCBidWZfc2l6ZSwgYm9vbCBhbXNkdSkNCisjZWxzZQ0KK2ludCB3ZnhfYW1wZHVfYWN0 aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3Zp ZiAqdmlmLA0KKwkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2FtcGR1X3BhcmFtcyAqcGFyYW1zKQ0K KyNlbmRpZg0KKyNlbmRpZg0KK3sNCisJLyogQWdncmVnYXRpb24gaXMgaW1wbGVtZW50ZWQgZnVs bHkgaW4gZmlybXdhcmUsDQorCSAqIGluY2x1ZGluZyBibG9jayBhY2sgbmVnb3RpYXRpb24uIERv IG5vdCBhbGxvdw0KKwkgKiBtYWM4MDIxMSBzdGFjayB0byBkbyBhbnl0aGluZzogaXQgaW50ZXJm ZXJlcyB3aXRoDQorCSAqIHRoZSBmaXJtd2FyZS4NCisJICovDQorDQorCS8qIE5vdGUgdGhhdCB3 ZSBzdGlsbCBuZWVkIHRoaXMgZnVuY3Rpb24gc3R1YmJlZC4gKi8NCisNCisJcmV0dXJuIC1FTk9U U1VQUDsNCit9DQorDQordm9pZCB3Znhfc3VzcGVuZF9yZXN1bWUoc3RydWN0IHdmeF92aWYgKnd2 aWYsDQorCQkJc3RydWN0IGhpZl9pbmRfc3VzcGVuZF9yZXN1bWVfdHggKmFyZykNCit7DQorCWlm IChhcmctPnN1c3BlbmRfcmVzdW1lX2ZsYWdzLmJjX21jX29ubHkpIHsNCisJCWJvb2wgY2FuY2Vs X3RtbyA9IGZhbHNlOw0KKw0KKwkJc3Bpbl9sb2NrX2JoKCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsN CisJCWlmICghYXJnLT5zdXNwZW5kX3Jlc3VtZV9mbGFncy5yZXN1bWUpDQorCQkJd3ZpZi0+bWNh c3RfdHggPSBmYWxzZTsNCisJCWVsc2UNCisJCQl3dmlmLT5tY2FzdF90eCA9IHd2aWYtPmFpZDBf Yml0X3NldCAmJiB3dmlmLT5tY2FzdF9idWZmZXJlZDsNCisJCWlmICh3dmlmLT5tY2FzdF90eCkg ew0KKwkJCWNhbmNlbF90bW8gPSB0cnVlOw0KKwkJCXdmeF9iaF9yZXF1ZXN0X3R4KHd2aWYtPndk ZXYpOw0KKwkJfQ0KKwkJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKwkJ aWYgKGNhbmNlbF90bW8pDQorCQkJZGVsX3RpbWVyX3N5bmMoJnd2aWYtPm1jYXN0X3RpbWVvdXQp Ow0KKwl9IGVsc2UgaWYgKGFyZy0+c3VzcGVuZF9yZXN1bWVfZmxhZ3MucmVzdW1lKSB7DQorCQkv LyBGSVhNRTogc2hvdWxkIGNoYW5nZSBlYWNoIHN0YXRpb24gc3RhdHVzIGluZGVwZW5kZW50bHkN CisJCXdmeF9wc19ub3RpZnkod3ZpZiwgU1RBX05PVElGWV9BV0FLRSwgMCk7DQorCQl3ZnhfYmhf cmVxdWVzdF90eCh3dmlmLT53ZGV2KTsNCisJfSBlbHNlIHsNCisJCS8vIEZJWE1FOiBzaG91bGQg Y2hhbmdlIGVhY2ggc3RhdGlvbiBzdGF0dXMgaW5kZXBlbmRlbnRseQ0KKwkJd2Z4X3BzX25vdGlm eSh3dmlmLCBTVEFfTk9USUZZX1NMRUVQLCAwKTsNCisJfQ0KK30NCisNCitpbnQgd2Z4X2FkZF9j aGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJICAgIHN0cnVjdCBpZWVlODAyMTFf Y2hhbmN0eF9jb25mICpjb25mKQ0KK3sNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgd2Z4X3Jl bW92ZV9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCXN0cnVjdCBpZWVlODAy MTFfY2hhbmN0eF9jb25mICpjb25mKQ0KK3sNCit9DQorDQordm9pZCB3ZnhfY2hhbmdlX2NoYW5j dHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4 X2NvbmYgKmNvbmYsDQorCQkJdTMyIGNoYW5nZWQpDQorew0KK30NCisNCitpbnQgd2Z4X2Fzc2ln bl92aWZfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZiwNCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZikNCit7 DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopIHZpZi0+ZHJ2X3By aXY7DQorCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2ggPSBjb25mLT5kZWYuY2hhbjsNCisN CisJV0FSTih3dmlmLT5jaGFubmVsLCAiY2hhbm5lbCBvdmVyd3JpdGUiKTsNCisJd3ZpZi0+Y2hh bm5lbCA9IGNoOw0KKwl3dmlmLT5odF9pbmZvLmNoYW5uZWxfdHlwZSA9IGNmZzgwMjExX2dldF9j aGFuZGVmX3R5cGUoJmNvbmYtPmRlZik7DQorDQorCXJldHVybiAwOw0KK30NCisNCit2b2lkIHdm eF91bmFzc2lnbl92aWZfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGll ZWU4MDIxMV92aWYgKnZpZiwNCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29u ZiAqY29uZikNCit7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICop IHZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2ggPSBjb25mLT5k ZWYuY2hhbjsNCisNCisJV0FSTih3dmlmLT5jaGFubmVsICE9IGNoLCAiY2hhbm5lbCBtaXNtYXRj aCIpOw0KKwl3dmlmLT5jaGFubmVsID0gTlVMTDsNCit9DQorDQoraW50IHdmeF9jb25maWcoc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQ0KK3sNCisJaW50IHJldCA9IDA7DQor CXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7DQorCXN0cnVjdCBpZWVlODAyMTFfY29u ZiAqY29uZiA9ICZody0+Y29uZjsNCisJc3RydWN0IHdmeF92aWYgKnd2aWY7DQorDQorCS8vIEZJ WE1FOiBJbnRlcmZhY2UgaWQgc2hvdWxkIG5vdCBiZWVuIGhhcmRjb2RlZA0KKwl3dmlmID0gd2Rl dl90b193dmlmKHdkZXYsIDApOw0KKwlpZiAoIXd2aWYpIHsNCisJCVdBUk4oMSwgImludGVyZmFj ZSAwIGRvZXMgbm90IGV4aXN0IGFueW1vcmUiKTsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCWRv d24oJnd2aWYtPnNjYW4ubG9jayk7DQorCW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOw0K KwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUikgew0KKwkJd2Rldi0+ b3V0cHV0X3Bvd2VyID0gY29uZi0+cG93ZXJfbGV2ZWw7DQorCQloaWZfc2V0X291dHB1dF9wb3dl cih3dmlmLCB3ZGV2LT5vdXRwdXRfcG93ZXIgKiAxMCk7DQorCX0NCisNCisJaWYgKGNoYW5nZWQg JiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpIHsNCisJCXd2aWYgPSBOVUxMOw0KKwkJd2hpbGUg KCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKSB7DQorCQkJbWVtc2V0 KCZ3dmlmLT5wb3dlcnNhdmVfbW9kZSwgMCwgc2l6ZW9mKHd2aWYtPnBvd2Vyc2F2ZV9tb2RlKSk7 DQorCQkJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpIHsNCisJCQkJd3ZpZi0+ cG93ZXJzYXZlX21vZGUucG1fbW9kZS5lbnRlcl9wc20gPSAxOw0KKwkJCQlpZiAoY29uZi0+ZHlu YW1pY19wc190aW1lb3V0ID4gMCkgew0KKwkJCQkJd3ZpZi0+cG93ZXJzYXZlX21vZGUucG1fbW9k ZS5mYXN0X3BzbSA9IDE7DQorCQkJCQkvLyBGaXJtd2FyZSBkb2VzIG5vdCBzdXBwb3J0IG1vcmUg dGhhbiAxMjhtcw0KKwkJCQkJd3ZpZi0+cG93ZXJzYXZlX21vZGUuZmFzdF9wc21faWRsZV9wZXJp b2QgPQ0KKwkJCQkJCW1pbihjb25mLT5keW5hbWljX3BzX3RpbWVvdXQgKiAyLCAyNTUpOw0KKwkJ CQl9DQorCQkJfQ0KKwkJCWlmICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RBVEVfU1RBICYmIHd2aWYt PmJzc19wYXJhbXMuYWlkKQ0KKwkJCQl3Znhfc2V0X3BtKHd2aWYsICZ3dmlmLT5wb3dlcnNhdmVf bW9kZSk7DQorCQl9DQorCQl3dmlmID0gd2Rldl90b193dmlmKHdkZXYsIDApOw0KKwl9DQorDQor CW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7DQorCXVwKCZ3dmlmLT5zY2FuLmxvY2sp Ow0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCiBpbnQgd2Z4X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQogew0KIAlpbnQgaTsN CkBAIC0xNDQsOCArMTQ5NSwyNCBAQCBpbnQgd2Z4X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQogCQlkZWZhdWx0X2VkY2Ff cGFyYW1zW0lFRUU4MDIxMV9BQ19CS10ucXVldWVfaWQgPSBISUZfUVVFVUVfSURfQkVTVEVGRk9S VDsNCiAJfQ0KIA0KKwl2aWYtPmRyaXZlcl9mbGFncyB8PSBJRUVFODAyMTFfVklGX0JFQUNPTl9G SUxURVIgfA0KKyNpZiAoS0VSTkVMX1ZFUlNJT04oMywgMTksIDApIDw9IExJTlVYX1ZFUlNJT05f Q09ERSkNCisJCQkgICAgIElFRUU4MDIxMV9WSUZfU1VQUE9SVFNfVUFQU0QgfA0KKyNlbmRpZg0K KwkJCSAgICAgSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19DUU1fUlNTSTsNCisNCiAJbXV0ZXhfbG9j aygmd2Rldi0+Y29uZl9tdXRleCk7DQogDQorCXN3aXRjaCAodmlmLT50eXBlKSB7DQorCWNhc2Ug Tkw4MDIxMV9JRlRZUEVfU1RBVElPTjoNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoNCisJ Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDoNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJbXV0ZXhf dW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsNCisJCXJldHVybiAtRU9QTk9UU1VQUDsNCisJfQ0K Kw0KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ZGV2LT52aWYpOyBpKyspIHsNCiAJCWlm ICghd2Rldi0+dmlmW2ldKSB7DQogCQkJd2Rldi0+dmlmW2ldID0gdmlmOw0KQEAgLTE1Nyw2ICsx NTI0LDcgQEAgaW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBz dHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQ0KIAkJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211 dGV4KTsNCiAJCXJldHVybiAtRU9QTk9UU1VQUDsNCiAJfQ0KKwkvLyBGSVhNRTogcHJlZmVyIHVz ZSBvZiBjb250YWluZXJfb2YoKSB0byBnZXQgdmlmDQogCXd2aWYtPnZpZiA9IHZpZjsNCiAJd3Zp Zi0+d2RldiA9IHdkZXY7DQogDQpAQCAtMTY0LDYgKzE1MzIsNyBAQCBpbnQgd2Z4X2FkZF9pbnRl cmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYp DQogCUlOSVRfREVMQVlFRF9XT1JLKCZ3dmlmLT5saW5rX2lkX2djX3dvcmssIHdmeF9saW5rX2lk X2djX3dvcmspOw0KIA0KIAlzcGluX2xvY2tfaW5pdCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQor CUlOSVRfV09SSygmd3ZpZi0+c2V0X3RpbV93b3JrLCB3Znhfc2V0X3RpbV93b3JrKTsNCiANCiAJ SU5JVF9XT1JLKCZ3dmlmLT5tY2FzdF9zdGFydF93b3JrLCB3ZnhfbWNhc3Rfc3RhcnRfd29yayk7 DQogCUlOSVRfV09SSygmd3ZpZi0+bWNhc3Rfc3RvcF93b3JrLCB3ZnhfbWNhc3Rfc3RvcF93b3Jr KTsNCkBAIC0xNzMsNiArMTU0MiwxMCBAQCBpbnQgd2Z4X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQogCXRpbWVyX3NldHVw KCZ3dmlmLT5tY2FzdF90aW1lb3V0LCB3ZnhfbWNhc3RfdGltZW91dCwgMCk7DQogI2VuZGlmDQog DQorCXd2aWYtPnNldGJzc3BhcmFtc19kb25lID0gZmFsc2U7DQorCW11dGV4X2luaXQoJnd2aWYt PmJzc19sb3NzX2xvY2spOw0KKwlJTklUX0RFTEFZRURfV09SSygmd3ZpZi0+YnNzX2xvc3Nfd29y aywgd2Z4X2Jzc19sb3NzX3dvcmspOw0KKw0KIAl3dmlmLT53ZXBfZGVmYXVsdF9rZXlfaWQgPSAt MTsNCiAJSU5JVF9XT1JLKCZ3dmlmLT53ZXBfa2V5X3dvcmssIHdmeF93ZXBfa2V5X3dvcmspOw0K IA0KQEAgLTE4MCwyMiArMTU1MywxMTUgQEAgaW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQ0KIAlJTklUX1dPUkso Jnd2aWYtPnNjYW4ud29yaywgd2Z4X3NjYW5fd29yayk7DQogCUlOSVRfREVMQVlFRF9XT1JLKCZ3 dmlmLT5zY2FuLnRpbWVvdXQsIHdmeF9zY2FuX3RpbWVvdXQpOw0KIA0KKwlzcGluX2xvY2tfaW5p dCgmd3ZpZi0+ZXZlbnRfcXVldWVfbG9jayk7DQorCUlOSVRfTElTVF9IRUFEKCZ3dmlmLT5ldmVu dF9xdWV1ZSk7DQorCUlOSVRfV09SSygmd3ZpZi0+ZXZlbnRfaGFuZGxlcl93b3JrLCB3ZnhfZXZl bnRfaGFuZGxlcl93b3JrKTsNCisNCisJaW5pdF9jb21wbGV0aW9uKCZ3dmlmLT5zZXRfcG1fbW9k ZV9jb21wbGV0ZSk7DQorCWNvbXBsZXRlKCZ3dmlmLT5zZXRfcG1fbW9kZV9jb21wbGV0ZSk7DQor CUlOSVRfV09SSygmd3ZpZi0+c2V0X2JlYWNvbl93YWtldXBfcGVyaW9kX3dvcmssIHdmeF9zZXRf YmVhY29uX3dha2V1cF9wZXJpb2Rfd29yayk7DQorCUlOSVRfV09SSygmd3ZpZi0+dXBkYXRlX2Zp bHRlcmluZ193b3JrLCB3ZnhfdXBkYXRlX2ZpbHRlcmluZ193b3JrKTsNCisJSU5JVF9XT1JLKCZ3 dmlmLT5ic3NfcGFyYW1zX3dvcmssIHdmeF9ic3NfcGFyYW1zX3dvcmspOw0KKwlJTklUX1dPUkso Jnd2aWYtPnNldF9jdHNfd29yaywgd2Z4X3NldF9jdHNfd29yayk7DQorCUlOSVRfV09SSygmd3Zp Zi0+dW5qb2luX3dvcmssIHdmeF91bmpvaW5fd29yayk7DQorDQogCW11dGV4X3VubG9jaygmd2Rl di0+Y29uZl9tdXRleCk7DQorDQorCWhpZl9zZXRfbWFjYWRkcih3dmlmLCB2aWYtPmFkZHIpOw0K IAlCVUdfT04oQVJSQVlfU0laRShkZWZhdWx0X2VkY2FfcGFyYW1zKSAhPSBBUlJBWV9TSVpFKHd2 aWYtPmVkY2EucGFyYW1zKSk7DQotCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsg aSsrKQ0KKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykgew0KIAkJbWVt Y3B5KCZ3dmlmLT5lZGNhLnBhcmFtc1tpXSwgJmRlZmF1bHRfZWRjYV9wYXJhbXNbaV0sIHNpemVv ZihkZWZhdWx0X2VkY2FfcGFyYW1zW2ldKSk7DQorCQl3dmlmLT5lZGNhLnVhcHNkX2VuYWJsZVtp XSA9IGZhbHNlOw0KKwkJaGlmX3NldF9lZGNhX3F1ZXVlX3BhcmFtcyh3dmlmLCAmd3ZpZi0+ZWRj YS5wYXJhbXNbaV0pOw0KKwl9DQorCXdmeF9zZXRfdWFwc2RfcGFyYW0od3ZpZiwgJnd2aWYtPmVk Y2EpOw0KKw0KIAl0eF9wb2xpY3lfaW5pdCh3dmlmKTsNCisJd3ZpZiA9IE5VTEw7DQorCXdoaWxl ICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkgew0KKwkJLy8gQ29t Ym8gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IEJsb2NrIEFja3MuIFdlIGNhbiByZS1lbmFibGUgdGhl bQ0KKwkJaWYgKHd2aWZfY291bnQod2RldikgPT0gMSkNCisJCQloaWZfc2V0X2Jsb2NrX2Fja19w b2xpY3kod3ZpZiwgMHhGRiwgMHhGRik7DQorCQllbHNlDQorCQkJaGlmX3NldF9ibG9ja19hY2tf cG9saWN5KHd2aWYsIDB4MDAsIDB4MDApOw0KKwkJLy8gQ29tYm8gZm9yY2UgcG93ZXJzYXZlIG1v ZGUuIFdlIGNhbiByZS1lbmFibGUgaXQgbm93DQorCQl3Znhfc2V0X3BtKHd2aWYsICZ3dmlmLT5w b3dlcnNhdmVfbW9kZSk7DQorCX0NCiAJcmV0dXJuIDA7DQogfQ0KIA0KIHZvaWQgd2Z4X3JlbW92 ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQogCQkJICBzdHJ1Y3QgaWVlZTgw MjExX3ZpZiAqdmlmKQ0KIHsNCisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsNCiAJ c3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKikgdmlmLT5kcnZfcHJpdjsN CisJaW50IGk7DQogDQorCS8vIElmIHNjYW4gaXMgaW4gcHJvZ3Jlc3MsIHN0b3AgaXQNCisJd2hp bGUgKGRvd25fdHJ5bG9jaygmd3ZpZi0+c2Nhbi5sb2NrKSkNCisJCXNjaGVkdWxlKCk7DQorCXVw KCZ3dmlmLT5zY2FuLmxvY2spOw0KKwl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnd2aWYt PnNldF9wbV9tb2RlX2NvbXBsZXRlLCBtc2Vjc190b19qaWZmaWVzKDMwMCkpOw0KKw0KKwltdXRl eF9sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsNCisJc3dpdGNoICh3dmlmLT5zdGF0ZSkgew0KKwlj YXNlIFdGWF9TVEFURV9QUkVfU1RBOg0KKwljYXNlIFdGWF9TVEFURV9TVEE6DQorCWNhc2UgV0ZY X1NUQVRFX0lCU1M6DQorCQl3ZnhfdHhfbG9ja19mbHVzaCh3ZGV2KTsNCisJCWlmICghc2NoZWR1 bGVfd29yaygmd3ZpZi0+dW5qb2luX3dvcmspKQ0KKwkJCXdmeF90eF91bmxvY2sod2Rldik7DQor CQlicmVhazsNCisJY2FzZSBXRlhfU1RBVEVfQVA6DQorCQlmb3IgKGkgPSAwOyB3dmlmLT5saW5r X2lkX21hcDsgKytpKSB7DQorCQkJaWYgKHd2aWYtPmxpbmtfaWRfbWFwICYgQklUKGkpKSB7DQor CQkJCXdmeF91bm1hcF9saW5rKHd2aWYsIGkpOw0KKwkJCQl3dmlmLT5saW5rX2lkX21hcCAmPSB+ QklUKGkpOw0KKwkJCX0NCisJCX0NCisJCW1lbXNldCh3dmlmLT5saW5rX2lkX2RiLCAwLCBzaXpl b2Yod3ZpZi0+bGlua19pZF9kYikpOw0KKwkJd3ZpZi0+c3RhX2FzbGVlcF9tYXNrID0gMDsNCisJ CXd2aWYtPmVuYWJsZV9iZWFjb24gPSBmYWxzZTsNCisJCXd2aWYtPm1jYXN0X3R4ID0gZmFsc2U7 DQorCQl3dmlmLT5haWQwX2JpdF9zZXQgPSBmYWxzZTsNCisJCXd2aWYtPm1jYXN0X2J1ZmZlcmVk ID0gZmFsc2U7DQorCQl3dmlmLT5wc3BvbGxfbWFzayA9IDA7DQorCQkvKiByZXNldC5saW5rX2lk ID0gMDsgKi8NCisJCWhpZl9yZXNldCh3dmlmLCBmYWxzZSk7DQorCQlicmVhazsNCisJZGVmYXVs dDoNCisJCWJyZWFrOw0KKwl9DQorDQorCXd2aWYtPnN0YXRlID0gV0ZYX1NUQVRFX1BBU1NJVkU7 DQogCXdmeF90eF9xdWV1ZXNfd2FpdF9lbXB0eV92aWYod3ZpZik7DQorCXdmeF90eF91bmxvY2so d2Rldik7DQorDQorCS8qIEZJWE1FOiBJbiBhZGQgdG8gcmVzZXQgTUFDIGFkZHJlc3MsIHRyeSB0 byByZXNldCBpbnRlcmZhY2UgKi8NCisJaGlmX3NldF9tYWNhZGRyKHd2aWYsIE5VTEwpOw0KKw0K KwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnd2aWYtPnNjYW4udGltZW91dCk7DQorDQorCXdm eF9jcW1fYnNzbG9zc19zbSh3dmlmLCAwLCAwLCAwKTsNCisJY2FuY2VsX3dvcmtfc3luYygmd3Zp Zi0+dW5qb2luX3dvcmspOw0KIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnd2aWYtPmxpbmtf aWRfZ2Nfd29yayk7DQogCWRlbF90aW1lcl9zeW5jKCZ3dmlmLT5tY2FzdF90aW1lb3V0KTsNCisJ d2Z4X2ZyZWVfZXZlbnRfcXVldWUod3ZpZik7DQorDQorCXdkZXYtPnZpZlt3dmlmLT5pZF0gPSBO VUxMOw0KKwl3dmlmLT52aWYgPSBOVUxMOw0KKw0KKwltdXRleF91bmxvY2soJndkZXYtPmNvbmZf bXV0ZXgpOw0KKwl3dmlmID0gTlVMTDsNCisJd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdk ZXYsIHd2aWYpKSAhPSBOVUxMKSB7DQorCQkvLyBDb21ibyBtb2RlIGRvZXMgbm90IHN1cHBvcnQg QmxvY2sgQWNrcy4gV2UgY2FuIHJlLWVuYWJsZSB0aGVtDQorCQlpZiAod3ZpZl9jb3VudCh3ZGV2 KSA9PSAxKQ0KKwkJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweEZGLCAweEZGKTsN CisJCWVsc2UNCisJCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHgwMCwgMHgwMCk7 DQorCQkvLyBDb21ibyBmb3JjZSBwb3dlcnNhdmUgbW9kZS4gV2UgY2FuIHJlLWVuYWJsZSBpdCBu b3cNCisJCXdmeF9zZXRfcG0od3ZpZiwgJnd2aWYtPnBvd2Vyc2F2ZV9tb2RlKTsNCisJfQ0KIH0N CiANCiBpbnQgd2Z4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5oDQpp bmRleCBkZDFiNmIzZmMyZjEuLmM3N2Y1ODUxNjYzMyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvc3Rh Z2luZy93Zngvc3RhLmgNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmgNCkBAIC04LDE4 ICs4LDQ1IEBADQogI2lmbmRlZiBXRlhfU1RBX0gNCiAjZGVmaW5lIFdGWF9TVEFfSA0KIA0KKyNp bmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+DQogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPg0KIA0K ICNpbmNsdWRlICJoaWZfYXBpX2NtZC5oIg0KIA0KK3N0cnVjdCB3ZnhfZGV2Ow0KIHN0cnVjdCB3 ZnhfdmlmOw0KIA0KK2VudW0gd2Z4X3N0YXRlIHsNCisJV0ZYX1NUQVRFX1BBU1NJVkUgPSAwLA0K KwlXRlhfU1RBVEVfUFJFX1NUQSwNCisJV0ZYX1NUQVRFX1NUQSwNCisJV0ZYX1NUQVRFX0lCU1Ms DQorCVdGWF9TVEFURV9BUCwNCit9Ow0KKw0KK3N0cnVjdCB3ZnhfaHRfaW5mbyB7DQorCXN0cnVj dCBpZWVlODAyMTFfc3RhX2h0X2NhcCBodF9jYXA7DQorCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5 cGUgY2hhbm5lbF90eXBlOw0KKwl1aW50MTZfdCBvcGVyYXRpb25fbW9kZTsNCit9Ow0KKw0KK3N0 cnVjdCB3ZnhfaGlmX2V2ZW50IHsNCisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOw0KKwlzdHJ1Y3Qg aGlmX2luZF9ldmVudCBldnQ7DQorfTsNCisNCiBzdHJ1Y3Qgd2Z4X2VkY2FfcGFyYW1zIHsNCiAJ LyogTk9URTogaW5kZXggaXMgYSBsaW51eCBxdWV1ZSBpZC4gKi8NCiAJc3RydWN0IGhpZl9yZXFf ZWRjYV9xdWV1ZV9wYXJhbXMgcGFyYW1zW0lFRUU4MDIxMV9OVU1fQUNTXTsNCiAJYm9vbCB1YXBz ZF9lbmFibGVbSUVFRTgwMjExX05VTV9BQ1NdOw0KIH07DQogDQorc3RydWN0IHdmeF9ncnBfYWRk cl90YWJsZSB7DQorCWJvb2wgZW5hYmxlOw0KKwlpbnQgbnVtX2FkZHJlc3NlczsNCisJdTggYWRk cmVzc19saXN0WzhdW0VUSF9BTEVOXTsNCit9Ow0KKw0KIHN0cnVjdCB3Znhfc3RhX3ByaXYgew0K IAlpbnQgbGlua19pZDsNCiAJaW50IHZpZl9pZDsNCkBAIC0yOCw5ICs1NSw2MiBAQCBzdHJ1Y3Qg d2Z4X3N0YV9wcml2IHsNCiAvLyBtYWM4MDIxMSBpbnRlcmZhY2UNCiBpbnQgd2Z4X3N0YXJ0KHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsNCiB2b2lkIHdmeF9zdG9wKHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3KTsNCitpbnQgd2Z4X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNo YW5nZWQpOw0KK2ludCB3Znhfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHUzMiB2YWx1ZSk7DQordTY0IHdmeF9wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywNCisJCQkgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptY19saXN0KTsN Cit2b2lkIHdmeF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1bnNp Z25lZCBpbnQgY2hhbmdlZF9mbGFncywNCisJCQkgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3Ms IHU2NCB1bnVzZWQpOw0KKw0KIGludCB3ZnhfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7DQogdm9pZCB3ZnhfcmVtb3ZlX2lu dGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZp Zik7DQordm9pZCB3ZnhfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVl ODAyMTFfdmlmICp2aWYsDQorCSAgICAgICB1MzIgcXVldWVzLCBib29sIGRyb3ApOw0KK2ludCB3 ZnhfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYg KnZpZiwNCisJCXUxNiBxdWV1ZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJh bXMgKnBhcmFtcyk7DQordm9pZCB3ZnhfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCQkgIHN0cnVjdCBpZWVlODAy MTFfYnNzX2NvbmYgKmluZm8sIHUzMiBjaGFuZ2VkKTsNCitpbnQgd2Z4X3N0YV9hZGQoc3RydWN0 IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQlzdHJ1Y3Qg aWVlZTgwMjExX3N0YSAqc3RhKTsNCitpbnQgd2Z4X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkgICBzdHJ1Y3QgaWVlZTgw MjExX3N0YSAqc3RhKTsNCit2b2lkIHdmeF9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJICAgIGVudW0gc3RhX25vdGlmeV9j bWQgY21kLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsNCitpbnQgd2Z4X3NldF90aW0oc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGJvb2wgc2V0 KTsNCiANCisjaWYgKEtFUk5FTF9WRVJTSU9OKDQsIDQsIDApID4gTElOVVhfVkVSU0lPTl9DT0RF KQ0KK2ludCB3ZnhfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qg aWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJICAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2Fj dGlvbiBhY3Rpb24sDQorCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQs IHUxNiAqc3NuLCB1OCBidWZfc2l6ZSk7DQorI2Vsc2UNCisjaWYgKEtFUk5FTF9WRVJTSU9OKDQs IDQsIDY5KSA+IExJTlVYX1ZFUlNJT05fQ09ERSkNCitpbnQgd2Z4X2FtcGR1X2FjdGlvbihzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgICAg ZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLA0KKwkJICAgICBzdHJ1Y3Qg aWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbiwgdTggYnVmX3NpemUsDQorCQkg ICAgIGJvb2wgYW1zZHUpOw0KKyNlbHNlDQoraW50IHdmeF9hbXBkdV9hY3Rpb24oc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkgICAgIHN0cnVj dCBpZWVlODAyMTFfYW1wZHVfcGFyYW1zICpwYXJhbXMpOw0KKyNlbmRpZg0KKyNlbmRpZg0KK2lu dCB3ZnhfYWRkX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkgICAgc3RydWN0 IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpOw0KK3ZvaWQgd2Z4X3JlbW92ZV9jaGFuY3R4 KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9j b25mICpjb25mKTsNCit2b2lkIHdmeF9jaGFuZ2VfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpodywNCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZiwgdTMyIGNoYW5n ZWQpOw0KK2ludCB3ZnhfYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY2hh bmN0eF9jb25mICpjb25mKTsNCit2b2lkIHdmeF91bmFzc2lnbl92aWZfY2hhbmN0eChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCQkgICAgICBz dHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZik7DQorDQorLy8gV1NNIENhbGxiYWNr cw0KK3ZvaWQgd2Z4X3N1c3BlbmRfcmVzdW1lKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qg aGlmX2luZF9zdXNwZW5kX3Jlc3VtZV90eCAqYXJnKTsNCisNCisvLyBPdGhlciBIZWxwZXJzDQor dm9pZCB3ZnhfY3FtX2Jzc2xvc3Nfc20oc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBpbml0LCBp bnQgZ29vZCwgaW50IGJhZCk7DQordm9pZCB3ZnhfdXBkYXRlX2ZpbHRlcmluZyhzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZik7DQoraW50IHdmeF9zZXRfcG0oc3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0 IHN0cnVjdCBoaWZfcmVxX3NldF9wbV9tb2RlICphcmcpOw0KIGludCB3ZnhfZndkX3Byb2JlX3Jl cShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBlbmFibGUpOw0KIA0KICNlbmRpZiAvKiBXRlhf U1RBX0ggKi8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3dmeC5oIGIvZHJpdmVy cy9zdGFnaW5nL3dmeC93ZnguaA0KaW5kZXggYmE1ZTFhMzJkODY5Li5iMzUzYmU1ZjBmN2MgMTAw NjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3dmeC5oDQorKysgYi9kcml2ZXJzL3N0YWdp bmcvd2Z4L3dmeC5oDQpAQCAtMTIsNiArMTIsOCBAQA0KIA0KICNpbmNsdWRlIDxsaW51eC92ZXJz aW9uLmg+DQogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4NCisjaW5jbHVkZSA8bGludXgv d29ya3F1ZXVlLmg+DQorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+DQogI2luY2x1ZGUgPG5ldC9t YWM4MDIxMS5oPg0KIA0KICNpbmNsdWRlICJiaC5oIg0KQEAgLTI0LDYgKzI2LDE1IEBADQogI2lu Y2x1ZGUgImhpZl90eC5oIg0KICNpbmNsdWRlICJoaWZfYXBpX2dlbmVyYWwuaCINCiANCisjaWYg KEtFUk5FTF9WRVJTSU9OKDQsIDIsIDApID4gTElOVVhfVkVSU0lPTl9DT0RFKQ0KK3N0YXRpYyBp bmxpbmUgdm9pZCBfaWVlZTgwMjExX2h3X3NldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJ CQkJICAgICBlbnVtIGllZWU4MDIxMV9od19mbGFncyBmbGcpDQorew0KKwlody0+ZmxhZ3MgfD0g ZmxnOw0KK30NCisjZGVmaW5lIGllZWU4MDIxMV9od19zZXQoaHcsIGZsZykJX2llZWU4MDIxMV9o d19zZXQoaHcsIElFRUU4MDIxMV9IV18jI2ZsZykNCisjZW5kaWYNCisNCiAjaWYgKEtFUk5FTF9W RVJTSU9OKDQsIDcsIDApID4gTElOVVhfVkVSU0lPTl9DT0RFKQ0KICNkZWZpbmUgbmw4MDIxMV9i YW5kIGllZWU4MDIxMV9iYW5kDQogI2RlZmluZSBOTDgwMjExX0JBTkRfMkdIWiBJRUVFODAyMTFf QkFORF8yR0haDQpAQCAtODIsOCArOTMsMTUgQEAgc3RydWN0IHdmeF9kZXYgew0KIHN0cnVjdCB3 ZnhfdmlmIHsNCiAJc3RydWN0IHdmeF9kZXYJCSp3ZGV2Ow0KIAlzdHJ1Y3QgaWVlZTgwMjExX3Zp ZgkqdmlmOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7DQogCWludAkJCWlk Ow0KKwllbnVtIHdmeF9zdGF0ZQkJc3RhdGU7DQogDQorCWludAkJCWRlbGF5ZWRfbGlua19sb3Nz Ow0KKwlpbnQJCQlic3NfbG9zc19zdGF0ZTsNCisJdTMyCQkJYnNzX2xvc3NfY29uZmlybV9pZDsN CisJc3RydWN0IG11dGV4CQlic3NfbG9zc19sb2NrOw0KKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWJz c19sb3NzX3dvcms7DQogDQogCXUzMgkJCWxpbmtfaWRfbWFwOw0KIAlzdHJ1Y3Qgd2Z4X2xpbmtf ZW50cnkJbGlua19pZF9kYltXRlhfTUFYX1NUQV9JTl9BUF9NT0RFXTsNCkBAIC05Myw2ICsxMTEs NyBAQCBzdHJ1Y3Qgd2Z4X3ZpZiB7DQogCWJvb2wJCQlhaWQwX2JpdF9zZXQ7DQogCWJvb2wJCQlt Y2FzdF90eDsNCiAJYm9vbAkJCW1jYXN0X2J1ZmZlcmVkOw0KKwlzdHJ1Y3Qgd2Z4X2dycF9hZGRy X3RhYmxlIG1jYXN0X2ZpbHRlcjsNCiAJc3RydWN0IHRpbWVyX2xpc3QJbWNhc3RfdGltZW91dDsN CiAJc3RydWN0IHdvcmtfc3RydWN0CW1jYXN0X3N0YXJ0X3dvcms7DQogCXN0cnVjdCB3b3JrX3N0 cnVjdAltY2FzdF9zdG9wX3dvcms7DQpAQCAtMTA3LDEzICsxMjYsNDAgQEAgc3RydWN0IHdmeF92 aWYgew0KIAl1MzIJCQlzdGFfYXNsZWVwX21hc2s7DQogCXUzMgkJCXBzcG9sbF9tYXNrOw0KIAlz cGlubG9ja190CQlwc19zdGF0ZV9sb2NrOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJc2V0X3RpbV93 b3JrOw0KKw0KKwlpbnQJCQlkdGltX3BlcmlvZDsNCisJaW50CQkJYmVhY29uX2ludDsNCisJYm9v bAkJCWVuYWJsZV9iZWFjb247DQorCXN0cnVjdCB3b3JrX3N0cnVjdAlzZXRfYmVhY29uX3dha2V1 cF9wZXJpb2Rfd29yazsNCiANCiAJYm9vbAkJCWZpbHRlcl9ic3NpZDsNCiAJYm9vbAkJCWZ3ZF9w cm9iZV9yZXE7DQorCWJvb2wJCQlkaXNhYmxlX2JlYWNvbl9maWx0ZXI7DQorCXN0cnVjdCB3b3Jr X3N0cnVjdAl1cGRhdGVfZmlsdGVyaW5nX3dvcms7DQogDQorCXUzMgkJCWVycF9pbmZvOw0KKwlp bnQJCQljcW1fcnNzaV90aG9sZDsNCisJYm9vbAkJCXNldGJzc3BhcmFtc19kb25lOw0KKwlzdHJ1 Y3Qgd2Z4X2h0X2luZm8JaHRfaW5mbzsNCiAJc3RydWN0IHdmeF9lZGNhX3BhcmFtcwllZGNhOw0K KwlzdHJ1Y3QgaGlmX21pYl9zZXRfdWFwc2RfaW5mb3JtYXRpb24gdWFwc2RfaW5mbzsNCisJc3Ry dWN0IGhpZl9yZXFfc2V0X2Jzc19wYXJhbXMgYnNzX3BhcmFtczsNCisJc3RydWN0IHdvcmtfc3Ry dWN0CWJzc19wYXJhbXNfd29yazsNCisJc3RydWN0IHdvcmtfc3RydWN0CXNldF9jdHNfd29yazsN CisNCisJaW50CQkJam9pbl9jb21wbGV0ZV9zdGF0dXM7DQorCWJvb2wJCQlkZWxheWVkX3Vuam9p bjsNCisJc3RydWN0IHdvcmtfc3RydWN0CXVuam9pbl93b3JrOw0KIA0KIAlzdHJ1Y3Qgd2Z4X3Nj YW4JCXNjYW47DQorDQorCXN0cnVjdCBoaWZfcmVxX3NldF9wbV9tb2RlIHBvd2Vyc2F2ZV9tb2Rl Ow0KKwlzdHJ1Y3QgY29tcGxldGlvbglzZXRfcG1fbW9kZV9jb21wbGV0ZTsNCisNCisJc3RydWN0 IGxpc3RfaGVhZAlldmVudF9xdWV1ZTsNCisJc3BpbmxvY2tfdAkJZXZlbnRfcXVldWVfbG9jazsN CisJc3RydWN0IHdvcmtfc3RydWN0CWV2ZW50X2hhbmRsZXJfd29yazsNCiB9Ow0KIA0KIHN0YXRp YyBpbmxpbmUgc3RydWN0IHdmeF92aWYgKndkZXZfdG9fd3ZpZihzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwgaW50IHZpZl9pZCkNCkBAIC0xNDcsNiArMTkzLDIwIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0 IHdmeF92aWYgKnd2aWZfaXRlcmF0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IHdmeF92 aWYNCiAJcmV0dXJuIE5VTEw7DQogfQ0KIA0KK3N0YXRpYyBpbmxpbmUgaW50IHd2aWZfY291bnQo c3RydWN0IHdmeF9kZXYgKndkZXYpDQorew0KKwlpbnQgaTsNCisJaW50IHJldCA9IDA7DQorCXN0 cnVjdCB3ZnhfdmlmICp3dmlmOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ZGV2 LT52aWYpOyBpKyspIHsNCisJCXd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaSk7DQorCQlpZiAo d3ZpZikNCisJCQlyZXQrKzsNCisJfQ0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCiBzdGF0aWMgaW5s aW5lIHZvaWQgbWVtcmV2ZXJzZSh1aW50OF90ICpzcmMsIHVpbnQ4X3QgbGVuZ3RoKQ0KIHsNCiAJ dWludDhfdCAqbG8gPSBzcmM7DQotLSANCjIuMjAuMQ0K