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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DFBD6C433F5 for ; Wed, 6 Oct 2021 03:53:52 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3D27A61248 for ; Wed, 6 Oct 2021 03:53:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 3D27A61248 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ite.com.tw Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:CC:From:Reply-To:To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=AipIzJlWqcTfexTT/mb8xTGR1vsUyEFnHHv68jjrpGc=; b=gPxRJwvibg1SHc i1YHq40y/vKH4UVK6XhCtl5xEcpimdjqWqqV4nVLiEd2rvo5PJP6AkXLOwtIdA69phnGS2LH12f0d 7o+5r4CxsleESccb9jSXRuFQj9tmEtXMf4VzXrRj/q7FodoxRmOL98K2vvjj//KU+OvSUWI6V0m7C yy7nAPKUGPqYKLINDMV2a/whGV8zbGG/nqoJvwVnANGrT0LaGNRY0jNrWFbXSBR03lyhmcOQIZ6Jt mglCO15TTtAApgn2czUlm7cJt4iWSgk4BZ9MKkSmj2fcVAquGrwQ6KarnklXHUc2vsC4+Res9C5HU gcGJXyhwjSXbSs26/Lfw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mXxzi-00ChqM-NR; Wed, 06 Oct 2021 03:53:26 +0000 Received: from 60-251-196-230.hinet-ip.hinet.net ([60.251.196.230] helo=ironport.ite.com.tw) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mXxzb-00ChpY-I6; Wed, 06 Oct 2021 03:53:25 +0000 IronPort-SDR: HosUzv1IP9inQQn0uFDeVB9e8joJq+0GbAGuYPImpDZyuRgctJk5o3a+SrEfO50asUPpTQoJwl HUwefnZeIxEg== Received: from unknown (HELO mse.ite.com.tw) ([192.168.35.30]) by ironport.ite.com.tw with ESMTP; 06 Oct 2021 11:53:14 +0800 Received: from CSBMAIL1.internal.ite.com.tw (csbmail1.internal.ite.com.tw [192.168.65.58]) by mse.ite.com.tw with ESMTP id 1963r9A2041190; Wed, 6 Oct 2021 11:53:09 +0800 (GMT-8) (envelope-from allen.chen@ite.com.tw) Received: from CSBMAIL1.internal.ite.com.tw (192.168.65.58) by CSBMAIL1.internal.ite.com.tw (192.168.65.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.14; Wed, 6 Oct 2021 11:53:09 +0800 Received: from CSBMAIL1.internal.ite.com.tw ([fe80::dd22:b444:859b:61c7]) by CSBMAIL1.internal.ite.com.tw ([fe80::dd22:b444:859b:61c7%18]) with mapi id 15.01.2176.014; Wed, 6 Oct 2021 11:53:09 +0800 From: CC: , , , , , , , , , , , , , , , , , , Subject: RE: [PATCH v8] drm/bridge: add it6505 driver Thread-Topic: [PATCH v8] drm/bridge: add it6505 driver Thread-Index: AQHXjds2dUIA16sisEKuygPI0MN7NavFrweg Date: Wed, 6 Oct 2021 03:53:09 +0000 Message-ID: <49cd8222b18749f282b5dff0b1f36daa@ite.com.tw> References: <20210810111124.247838-1-allen.chen@ite.com.tw> In-Reply-To: <20210810111124.247838-1-allen.chen@ite.com.tw> Accept-Language: en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.70.16] x-tm-snts-smtp: E79F6F577DFF53B08AF11B0DD2CBA0E5094BBBDABBA0A53335427E6F06A98F572002:8 MIME-Version: 1.0 X-MAIL: mse.ite.com.tw 1963r9A2041190 X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="big5" Content-Transfer-Encoding: base64 Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org SGkNCg0KSXQgaGFzIGJlZW4gYWJvdXQgdHdvIG1vbnRocyBzaW5jZSBJIHBvc3RlZCB2OA0KQ29u c2lkZXIgdGhpcyBhIGdlbnRsZSBwaW5nLg0KDQpKdXN0IHdvbmRlcmluZyBpZiB0aGUgc2V0IG5l ZWRzIGFkZGl0aW9uYWwgd29yayBhbmQgSSB3aWxsIGZpeCBhbmQgdXBzdHJlYW0gYWdhaW4uDQoN Ci0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBBbGxlbiBDaGVuICizr6xmpnQpIA0K U2VudDogVHVlc2RheSwgQXVndXN0IDEwLCAyMDIxIDc6MTEgUE0NCkNjOiBBbGxlbiBDaGVuICiz r6xmpnQpOyBIc2luLVlpIFdhbmc7IEtlbm5ldGggSHVuZyAorHiuYa3bKTsgSGVybWVzIFd1ICin ZKjOp7spOyBKYXUtQ2hpaCBUc2VuZyAotL+sTLS8KTsgSHNpbi15aSBXYW5nOyBIZXJtZXMgV3Ug KKdkqM6nuyk7IEFuZHJ6ZWogSGFqZGE7IE5laWwgQXJtc3Ryb25nOyBSb2JlcnQgRm9zczsgTGF1 cmVudCBQaW5jaGFydDsgSm9uYXMgS2FybG1hbjsgSmVybmVqIFNrcmFiZWM7IERhdmlkIEFpcmxp ZTsgRGFuaWVsIFZldHRlcjsgTWF0dGhpYXMgQnJ1Z2dlcjsgb3BlbiBsaXN0OyBvcGVuIGxpc3Q6 RFJNIERSSVZFUlM7IG1vZGVyYXRlZCBsaXN0OkFSTS9NZWRpYXRlayBTb0Mgc3VwcG9ydDsgbW9k ZXJhdGVkIGxpc3Q6QVJNL01lZGlhdGVrIFNvQyBzdXBwb3J0DQpTdWJqZWN0OiBbUEFUQ0ggdjhd IGRybS9icmlkZ2U6IGFkZCBpdDY1MDUgZHJpdmVyDQoNClRoaXMgYWRkcyBzdXBwb3J0IGZvciB0 aGUgaVRFIElUNjUwNS4NClRoaXMgZGV2aWNlIGNhbiBjb252ZXJ0IERQSSBzaWduYWwgdG8gRFAg b3V0cHV0Lg0KDQpGcm9tOiBBbGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+DQpUZXN0 ZWQtYnk6IEhzaW4teWkgV2FuZyA8aHNpbnlpQGNocm9taXVtLm9yZz4NClNpZ25lZC1vZmYtYnk6 IEhlcm1lcyBXdSA8aGVybWVzLnd1QGl0ZS5jb20udHc+DQpTaWduZWQtb2ZmLWJ5OiBBbGxlbiBD aGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+DQoNCnY3LT52ODoNCmZpeGVkICJjaGVja3BhdGNo IC0tc3RyaWN0IiBlcnJvcg0KcmVtb3ZlIHVudXNlZCB2YXJpYWJsZSAqZWRpZA0KcmVtb3ZlIG1v ZGVfc2V0KCkgY2FsbGJhY2sNCkRvY3VtZW50aW5nIHRoZSBpbmRpdmlkdWFsIGJpdHMgb2YgdGhl IGludGVycnVwdCBtYXNrIHZhbHVlcw0KY2hhbmdlIGl0NjUwNV9kcGNkX3dyaXRlIHBhcmFtZXRl ciBmcm9tIHVuc2lnbmVkIGxvbmcgdG8gdTgNCg0KVGhpcyBwYXRjaCBkZXBlbmRzIG9uIGh0dHBz Oi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1tZWRpYXRlay9wYXRjaC8yMDIx MDcyMjA2MjI0Ni4yNTEyNjY2LTQtc2FtQHJhdm5ib3JnLm9yZy8NCi0tLQ0KIGRyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvS2NvbmZpZyAgICAgIHwgICAgOCArDQogZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9NYWtlZmlsZSAgICAgfCAgICAxICsNCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1 MDUuYyB8IDMzMzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogMyBmaWxlcyBjaGFuZ2Vk LCAzMzQyIGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9pdGUtaXQ2NTA1LmMNCg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZw0KaW5kZXggNDMxYjZl MTJhODFmZS4uZTFhZmUxNzEwNzVmNSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvS2NvbmZpZw0KKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnDQpAQCAtNzQs NiArNzQsMTQgQEAgY29uZmlnIERSTV9ESVNQTEFZX0NPTk5FQ1RPUg0KIAkgIG9uIEFSTS1iYXNl ZCBwbGF0Zm9ybXMuIFNheWluZyBZIGhlcmUgd2hlbiB0aGlzIGRyaXZlciBpcyBub3QgbmVlZGVk DQogCSAgd2lsbCBub3QgY2F1c2UgYW55IGlzc3VlLg0KIA0KK2NvbmZpZyBEUk1fSVRFX0lUNjUw NQ0KKyAgICAgICAgdHJpc3RhdGUgIklURSBJVDY1MDUgRGlzcGxheVBvcnQgYnJpZGdlIg0KKyAg ICAgICAgZGVwZW5kcyBvbiBPRg0KKyAgICAgICAgc2VsZWN0IERSTV9LTVNfSEVMUEVSDQorICAg ICAgICBzZWxlY3QgRVhUQ09ODQorICAgICAgICBoZWxwDQorICAgICAgICAgIElURSBJVDY1MDUg RGlzcGxheVBvcnQgYnJpZGdlIGNoaXAgZHJpdmVyLg0KKw0KIGNvbmZpZyBEUk1fTE9OVElVTV9M VDg5MTJCDQogCXRyaXN0YXRlICJMb250aXVtIExUODkxMkIgRFNJL0hETUkgYnJpZGdlIg0KIAlk ZXBlbmRzIG9uIE9GDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUNCmluZGV4IGYyYzczNjgzY2ZjYjcu LjQyNTg0NGMzMDQ5NTMgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2Vm aWxlDQorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlDQpAQCAtNCw2ICs0LDcg QEAgb2JqLSQoQ09ORklHX0RSTV9DSElQT05FX0lDTjYyMTEpICs9IGNoaXBvbmUtaWNuNjIxMS5v DQogb2JqLSQoQ09ORklHX0RSTV9DSFJPTlRFTF9DSDcwMzMpICs9IGNocm9udGVsLWNoNzAzMy5v DQogb2JqLSQoQ09ORklHX0RSTV9DUk9TX0VDX0FOWDc2ODgpICs9IGNyb3MtZWMtYW54NzY4OC5v DQogb2JqLSQoQ09ORklHX0RSTV9ESVNQTEFZX0NPTk5FQ1RPUikgKz0gZGlzcGxheS1jb25uZWN0 b3Iubw0KK29iai0kKENPTkZJR19EUk1fSVRFX0lUNjUwNSkgKz0gaXRlLWl0NjUwNS5vDQogb2Jq LSQoQ09ORklHX0RSTV9MT05USVVNX0xUODkxMkIpICs9IGxvbnRpdW0tbHQ4OTEyYi5vDQogb2Jq LSQoQ09ORklHX0RSTV9MT05USVVNX0xUOTYxMSkgKz0gbG9udGl1bS1sdDk2MTEubw0KIG9iai0k KENPTkZJR19EUk1fTE9OVElVTV9MVDk2MTFVWEMpICs9IGxvbnRpdW0tbHQ5NjExdXhjLm8NCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMDAwMDAwMC4uMjc1ODZjM2ZkNWYyOA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMNCkBAIC0wLDAgKzEsMzMzMyBAQA0KKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkNCisv Kg0KKyAqIENvcHlyaWdodCAoYykgMjAyMCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuDQorICovDQorI2luY2x1ZGUgPGxpbnV4L2JpdHMuaD4NCisjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4NCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxp bnV4L2Vyci5oPg0KKyNpbmNsdWRlIDxsaW51eC9leHRjb24uaD4NCisjaW5jbHVkZSA8bGludXgv ZnMuaD4NCisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPg0KKyNpbmNsdWRlIDxsaW51 eC9pMmMuaD4NCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQorI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgv cG1fcnVudGltZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCisjaW5jbHVkZSA8bGlu dXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+DQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L3dhaXQuaD4NCisNCisjaW5jbHVkZSA8Y3J5cHRvL2hhc2guaD4NCisNCisj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+DQorI2luY2x1ZGUgPGRybS9kcm1fYnJp ZGdlLmg+DQorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPg0KKyNpbmNsdWRlIDxkcm0vZHJtX2Ny dGNfaGVscGVyLmg+DQorI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+DQorI2luY2x1ZGUg PGRybS9kcm1fZWRpZC5oPg0KKyNpbmNsdWRlIDxkcm0vZHJtX2hkY3AuaD4NCisjaW5jbHVkZSA8 ZHJtL2RybV9wcmludC5oPg0KKyNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPg0KKw0K KyNpbmNsdWRlIDxzb3VuZC9oZG1pLWNvZGVjLmg+DQorDQorI2RlZmluZSBSRUdfSUNfVkVSIDB4 MDQNCisNCisjZGVmaW5lIFJFR19SRVNFVF9DVFJMIDB4MDUNCisjZGVmaW5lIFZJREVPX1JFU0VU IEJJVCgwKQ0KKyNkZWZpbmUgQVVESU9fUkVTRVQgQklUKDEpDQorI2RlZmluZSBBTExfTE9HSUNf UkVTRVQgQklUKDIpDQorI2RlZmluZSBBVVhfUkVTRVQgQklUKDMpDQorI2RlZmluZSBIRENQX1JF U0VUIEJJVCg0KQ0KKw0KKyNkZWZpbmUgSU5UX1NUQVRVU18wMSAweDA2DQorI2RlZmluZSBJTlRf TUFTS18wMSAweDA5DQorI2RlZmluZSBJTlRfSFBEX0NIQU5HRSAwDQorI2RlZmluZSBJTlRfUkVD RUlWRV9IUERfSVJRIDENCisjZGVmaW5lIElOVF9TQ0RUX0NIQU5HRSAyDQorI2RlZmluZSBJTlRf SERDUF9GQUlMIDMNCisjZGVmaW5lIElOVF9IRENQX0RPTkUgNA0KKyNkZWZpbmUgQklUX09GRlNF VCh4KSAoKCh4KSAtIElOVF9TVEFUVVNfMDEpICogQklUU19QRVJfQllURSkNCisjZGVmaW5lIEJJ VF9JTlRfSFBEIElOVF9IUERfQ0hBTkdFDQorI2RlZmluZSBCSVRfSU5UX0hQRF9JUlEgSU5UX1JF Q0VJVkVfSFBEX0lSUQ0KKyNkZWZpbmUgQklUX0lOVF9TQ0RUIElOVF9TQ0RUX0NIQU5HRQ0KKyNk ZWZpbmUgQklUX0lOVF9IRENQX0ZBSUwgSU5UX0hEQ1BfRkFJTA0KKyNkZWZpbmUgQklUX0lOVF9I RENQX0RPTkUgSU5UX0hEQ1BfRE9ORQ0KKw0KKyNkZWZpbmUgSU5UX1NUQVRVU18wMiAweDA3DQor I2RlZmluZSBJTlRfTUFTS18wMiAweDBBDQorI2RlZmluZSBJTlRfQVVYX0NNRF9GQUlMIDANCisj ZGVmaW5lIElOVF9IRENQX0tTVl9DSEVDSyAxDQorI2RlZmluZSBJTlRfQVVESU9fRklGT19FUlJP UiAyDQorI2RlZmluZSBCSVRfSU5UX0FVWF9DTURfRkFJTCAoQklUX09GRlNFVCgweDA3KSArIElO VF9BVVhfQ01EX0ZBSUwpDQorI2RlZmluZSBCSVRfSU5UX0hEQ1BfS1NWX0NIRUNLIChCSVRfT0ZG U0VUKDB4MDcpICsgSU5UX0hEQ1BfS1NWX0NIRUNLKQ0KKyNkZWZpbmUgQklUX0lOVF9BVURJT19G SUZPX0VSUk9SIChCSVRfT0ZGU0VUKDB4MDcpICsgSU5UX0FVRElPX0ZJRk9fRVJST1IpDQorDQor I2RlZmluZSBJTlRfU1RBVFVTXzAzIDB4MDgNCisjZGVmaW5lIElOVF9NQVNLXzAzIDB4MEINCisj ZGVmaW5lIElOVF9MSU5LX1RSQUlOX0ZBSUwgNA0KKyNkZWZpbmUgSU5UX1ZJRF9GSUZPX0VSUk9S IDUNCisjZGVmaW5lIElOVF9JT19MQVRDSF9GSUZPX09WRVJGTE9XIDcNCisjZGVmaW5lIEJJVF9J TlRfTElOS19UUkFJTl9GQUlMIChCSVRfT0ZGU0VUKDB4MDgpICsgSU5UX0xJTktfVFJBSU5fRkFJ TCkNCisjZGVmaW5lIEJJVF9JTlRfVklEX0ZJRk9fRVJST1IgKEJJVF9PRkZTRVQoMHgwOCkgKyBJ TlRfVklEX0ZJRk9fRVJST1IpDQorI2RlZmluZSBCSVRfSU5UX0lPX0ZJRk9fT1ZFUkZMT1cgKEJJ VF9PRkZTRVQoMHgwOCkgKyBJTlRfSU9fTEFUQ0hfRklGT19PVkVSRkxPVykNCisNCisjZGVmaW5l IFJFR19TWVNURU1fU1RTIDB4MEQNCisjZGVmaW5lIElOVF9TVFMgQklUKDApDQorI2RlZmluZSBI UERfU1RTIEJJVCgxKQ0KKyNkZWZpbmUgVklERU9fU1RCIEJJVCgyKQ0KKw0KKyNkZWZpbmUgUkVH X0xJTktfVFJBSU5fU1RTIDB4MEUNCisjZGVmaW5lIExJTktfU1RBVEVfQ1IgQklUKDIpDQorI2Rl ZmluZSBMSU5LX1NUQVRFX0VRIEJJVCgzKQ0KKyNkZWZpbmUgTElOS19TVEFURV9OT1JQIEJJVCg0 KQ0KKw0KKyNkZWZpbmUgUkVHX0JBTktfU0VMIDB4MEYNCisjZGVmaW5lIFJFR19DTEtfQ1RSTDAg MHgxMA0KKyNkZWZpbmUgTV9QQ0xLX0RFTEFZIDB4MDMNCisNCisjZGVmaW5lIFJFR19BVVhfT1BU IDB4MTENCisjZGVmaW5lIEFVWF9BVVRPX1JTVCBCSVQoMCkNCisjZGVmaW5lIEFVWF9GSVhfRlJF USBCSVQoMykNCisNCisjZGVmaW5lIFJFR19EQVRBX0NUUkwwIDB4MTINCisjZGVmaW5lIFZJREVP X0xBVENIX0VER0UgQklUKDQpDQorI2RlZmluZSBFTkFCTEVfUENMS19DT1VOVEVSIEJJVCg3KQ0K Kw0KKyNkZWZpbmUgUkVHX1BDTEtfQ09VTlRFUl9WQUxVRSAweDEzDQorDQorI2RlZmluZSBSRUdf NTAxX0ZJRk9fQ1RSTCAweDE1DQorI2RlZmluZSBSU1RfNTAxX0ZJRk8gQklUKDEpDQorDQorI2Rl ZmluZSBSRUdfVFJBSU5fQ1RSTDAgMHgxNg0KKyNkZWZpbmUgRk9SQ0VfTEJSIEJJVCgwKQ0KKyNk ZWZpbmUgTEFORV9DT1VOVF9NQVNLIDB4MDYNCisjZGVmaW5lIExBTkVfU1dBUCBCSVQoMykNCisj ZGVmaW5lIFNQUkVBRF9BTVBfNSBCSVQoNCkNCisjZGVmaW5lIEZPUkNFX0NSX0RPTkUgQklUKDUp DQorI2RlZmluZSBGT1JDRV9FUV9ET05FIEJJVCg2KQ0KKw0KKyNkZWZpbmUgUkVHX1RSQUlOX0NU UkwxIDB4MTcNCisjZGVmaW5lIEFVVE9fVFJBSU4gQklUKDApDQorI2RlZmluZSBNQU5VQUxfVFJB SU4gQklUKDEpDQorI2RlZmluZSBGT1JDRV9SRVRSQUlOIEJJVCgyKQ0KKw0KKyNkZWZpbmUgUkVH X0FVWF9DVFJMIDB4MjMNCisjZGVmaW5lIENMUl9FRElEX0ZJRk8gQklUKDApDQorI2RlZmluZSBB VVhfVVNFUl9NT0RFIEJJVCgxKQ0KKyNkZWZpbmUgQVVYX05PX1NFR01FTlRfV1IgQklUKDYpDQor I2RlZmluZSBBVVhfRU5fRklGT19SRUFEIEJJVCg3KQ0KKw0KKyNkZWZpbmUgUkVHX0FVWF9BRFJf MF83IDB4MjQNCisjZGVmaW5lIFJFR19BVVhfQURSXzhfMTUgMHgyNQ0KKyNkZWZpbmUgUkVHX0FV WF9BRFJfMTZfMTkgMHgyNg0KKyNkZWZpbmUgUkVHX0FVWF9PVVRfREFUQTAgMHgyNw0KKw0KKyNk ZWZpbmUgUkVHX0FVWF9DTURfUkVRIDB4MkINCisjZGVmaW5lIEFVWF9CVVNZIEJJVCg1KQ0KKw0K KyNkZWZpbmUgUkVHX0FVWF9EQVRBXzBfNyAweDJDDQorI2RlZmluZSBSRUdfQVVYX0RBVEFfOF8x NSAweDJEDQorI2RlZmluZSBSRUdfQVVYX0RBVEFfMTZfMjMgMHgyRQ0KKyNkZWZpbmUgUkVHX0FV WF9EQVRBXzI0XzMxIDB4MkYNCisNCisjZGVmaW5lIFJFR19BVVhfREFUQV9GSUZPIDB4MkYNCisN CisjZGVmaW5lIFJFR19BVVhfRVJST1JfU1RTIDB4OUYNCisjZGVmaW5lIE1fQVVYX1JFUV9GQUlM IDB4MDMNCisNCisjZGVmaW5lIFJFR19IRENQX0NUUkwxIDB4MzgNCisjZGVmaW5lIEhEQ1BfQ1Bf RU5BQkxFIEJJVCgwKQ0KKw0KKyNkZWZpbmUgUkVHX0hEQ1BfVFJJR0dFUiAweDM5DQorI2RlZmlu ZSBIRENQX1RSSUdHRVJfU1RBUlQgIEJJVCgwKQ0KKyNkZWZpbmUgSERDUF9UUklHR0VSX0NQSVJR ICBCSVQoMSkNCisjZGVmaW5lIEhEQ1BfVFJJR0dFUl9LU1ZfRE9ORSAgQklUKDQpDQorI2RlZmlu ZSBIRENQX1RSSUdHRVJfS1NWX0ZBSUwgQklUKDUpDQorDQorI2RlZmluZSBSRUdfSERDUF9DVFJM MiAweDNBDQorI2RlZmluZSBIRENQX0FOX1NFTCBCSVQoMCkNCisjZGVmaW5lIEhEQ1BfQU5fR0VO IEJJVCgxKQ0KKyNkZWZpbmUgSERDUF9IV19IUERJUlFfQUNUIEJJVCgyKQ0KKyNkZWZpbmUgSERD UF9FTl9NMF9SRUFEIEJJVCg1KQ0KKw0KKyNkZWZpbmUgUkVHX00wXzBfNyAweDRDDQorI2RlZmlu ZSBSRUdfQU5fMF83IDB4NEMNCisjZGVmaW5lIFJFR19TUF9DVFJMMCAweDU4DQorI2RlZmluZSBS RUdfSVBfQ1RSTDEgMHg1OQ0KKyNkZWZpbmUgUkVHX0lQX0NUUkwyIDB4NUENCisNCisjZGVmaW5l IFJFR19MSU5LX0RSViAweDVDDQorI2RlZmluZSBEUlZfSFMgQklUKDEpDQorDQorI2RlZmluZSBS RUdfRFJWX0xOX0RBVEFfU0VMIDB4NUQNCisNCisjZGVmaW5lIFJFR19BVVggMHg1RQ0KKw0KKyNk ZWZpbmUgUkVHX1ZJRF9CVVNfQ1RSTDAgMHg2MA0KKyNkZWZpbmUgSU5fRERSIEJJVCgyKQ0KKyNk ZWZpbmUgRERSX0NEICgweDAxIDw8IDYpDQorDQorI2RlZmluZSBSRUdfVklEX0JVU19DVFJMMSAw eDYxDQorI2RlZmluZSBUWF9GSUZPX1JFU0VUIEJJVCgxKQ0KKw0KKyNkZWZpbmUgUkVHX0lOUFVU X0NUUkwgMHhBMA0KKyNkZWZpbmUgSU5QVVRfSFNZTkNfUE9MIEJJVCgwKQ0KKyNkZWZpbmUgSU5Q VVRfVlNZTkNfUE9MIEJJVCgyKQ0KKyNkZWZpbmUgSU5QVVRfSU5URVJMQUNFRCBCSVQoNCkNCisN CisjZGVmaW5lIFJFR19JTlBVVF9IVE9UQUwgMHhBMQ0KKyNkZWZpbmUgUkVHX0lOUFVUX0hBQ1RJ VkVfU1RBUlQgMHhBMw0KKyNkZWZpbmUgUkVHX0lOUFVUX0hBQ1RJVkVfV0lEVEggMHhBNQ0KKyNk ZWZpbmUgUkVHX0lOUFVUX0hGUk9OVF9QT1JDSCAweEE3DQorI2RlZmluZSBSRUdfSU5QVVRfSFNZ TkNfV0lEVEggMHhBOQ0KKyNkZWZpbmUgUkVHX0lOUFVUX1ZUT1RBTCAweEFCDQorI2RlZmluZSBS RUdfSU5QVVRfVkFDVElWRV9TVEFSVCAweEFEDQorI2RlZmluZSBSRUdfSU5QVVRfVkFDVElWRV9X SURUSCAweEFGDQorI2RlZmluZSBSRUdfSU5QVVRfVkZST05UX1BPUkNIIDB4QjENCisjZGVmaW5l IFJFR19JTlBVVF9WU1lOQ19XSURUSCAweEIzDQorDQorI2RlZmluZSBSRUdfQVVESU9fU1JDX0NU UkwgMHhCOA0KKyNkZWZpbmUgTV9BVURJT19JMlNfRU4gMHgwRg0KKyNkZWZpbmUgRU5fSTJTMCBC SVQoMCkNCisjZGVmaW5lIEVOX0kyUzEgQklUKDEpDQorI2RlZmluZSBFTl9JMlMyIEJJVCgyKQ0K KyNkZWZpbmUgRU5fSTJTMyBCSVQoMykNCisjZGVmaW5lIEFVRElPX0ZJRk9fUkVTRVQgQklUKDcp DQorDQorI2RlZmluZSBSRUdfQVVESU9fRk1UIDB4QjkNCisjZGVmaW5lIFJFR19BVURJT19GSUZP X1NFTCAweEJBDQorDQorI2RlZmluZSBSRUdfQVVESU9fQ1RSTDAgMHhCQg0KKyNkZWZpbmUgQVVE SU9fRlVMTF9QS1QgQklUKDQpDQorI2RlZmluZSBBVURJT18xNkJfQk9VTkQgQklUKDUpDQorDQor I2RlZmluZSBSRUdfQVVESU9fQ1RSTDEgMHhCQw0KKyNkZWZpbmUgUkVHX0FVRElPX0lOUFVUX0ZS RVEgMHhCRQ0KKw0KKyNkZWZpbmUgUkVHX0lFQzk1OF9TVFMwIDB4QkYNCisjZGVmaW5lIFJFR19J RUM5NThfU1RTMSAweEMwDQorI2RlZmluZSBSRUdfSUVDOTU4X1NUUzIgMHhDMQ0KKyNkZWZpbmUg UkVHX0lFQzk1OF9TVFMzIDB4QzINCisjZGVmaW5lIFJFR19JRUM5NThfU1RTNCAweEMzDQorDQor I2RlZmluZSBSRUdfSFBEX0lSUV9USU1FIDB4QzkNCisjZGVmaW5lIFJFR19BVVhfREVCVUdfTU9E RSAweENBDQorI2RlZmluZSBSRUdfQVVYX09QVDIgMHhDQg0KKyNkZWZpbmUgUkVHX0hEQ1BfT1BU IDB4Q0UNCisjZGVmaW5lIFJFR19VU0VSX0RSVl9QUkUgMHhDRg0KKw0KKyNkZWZpbmUgUkVHX0RB VEFfTVVURV9DVFJMIDB4RDMNCisjZGVmaW5lIEVOQUJMRV9FTkhBTkNFRF9GUkFNRSBCSVQoMCkN CisjZGVmaW5lIEVOQUJMRV9BVVRPX1ZJREVPX0ZJRk9fUkVTRVQgQklUKDEpDQorI2RlZmluZSBF Tl9WSURfTVVURSBCSVQoNCkNCisjZGVmaW5lIEVOX0FVRF9NVVRFIEJJVCg1KQ0KKw0KKyNkZWZp bmUgUkVHX1RJTUVfU1RNUF9DVFJMIDB4RDQNCisjZGVmaW5lIEVOX0VOSEFOQ0VfVklEX1NUTVAg QklUKDApDQorI2RlZmluZSBFTl9FTkhBTkNFX0FVRF9TVE1QIEJJVCgyKQ0KKyNkZWZpbmUgTV9T VEFNUF9TVEVQIDB4MzANCisjZGVmaW5lIEVOX1NTQ19HQVQgQklUKDYpDQorDQorI2RlZmluZSBS RUdfSU5GT0ZSQU1FX0NUUkwgMHhFOA0KKyNkZWZpbmUgRU5fQVZJX1BLVCBCSVQoMCkNCisjZGVm aW5lIEVOX0FVRF9QS1QgQklUKDEpDQorI2RlZmluZSBFTl9NUEdfUEtUIEJJVCgyKQ0KKyNkZWZp bmUgRU5fR0VOX1BLVCBCSVQoMykNCisjZGVmaW5lIEVOX1ZJRF9USU1FX1NUTVAgQklUKDQpDQor I2RlZmluZSBFTl9BVURfVElNRV9TVE1QIEJJVCg1KQ0KKyNkZWZpbmUgRU5fVklEX0NUUkxfUEtU IChFTl9BVklfUEtUIHwgRU5fVklEX1RJTUVfU1RNUCkNCisjZGVmaW5lIEVOX0FVRF9DVFJMX1BL VCAoRU5fQVVEX1BLVCB8IEVOX0FVRF9USU1FX1NUTVApDQorDQorI2RlZmluZSBSRUdfQVVESU9f Tl8wXzcgMHhERQ0KKyNkZWZpbmUgUkVHX0FVRElPX05fOF8xNSAweERGDQorI2RlZmluZSBSRUdf QVVESU9fTl8xNl8yMyAweEUwDQorDQorI2RlZmluZSBSRUdfQVZJX0lORk9fREIxIDB4RTkNCisj ZGVmaW5lIFJFR19BVklfSU5GT19EQjIgMHhFQQ0KKyNkZWZpbmUgUkVHX0FWSV9JTkZPX0RCMyAw eEVCDQorI2RlZmluZSBSRUdfQVZJX0lORk9fREI0IDB4RUMNCisjZGVmaW5lIFJFR19BVklfSU5G T19EQjUgMHhFRA0KKyNkZWZpbmUgUkVHX0FWSV9JTkZPX1NVTSAweEY2DQorDQorI2RlZmluZSBS RUdfQVVEX0lORk9GUkFNX0RCMSAweEY3DQorI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCMiAw eEY4DQorI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCMyAweEY5DQorI2RlZmluZSBSRUdfQVVE X0lORk9GUkFNX0RCNCAweEZBDQorI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX1NVTSAweEZCDQor DQorLyogdGhlIGZvbGxvd2luZyBzaXggcmVnaXN0ZXJzIGFyZSBpbiBiYW5rMSAqLw0KKyNkZWZp bmUgUkVHX0RSVl8wX0RCXzgwMF9NViAweDdFDQorI2RlZmluZSBSRUdfUFJFXzBfREJfODAwX01W IDB4N0YNCisjZGVmaW5lIFJFR19QUkVfM1A1X0RCXzgwMF9NViAweDgxDQorI2RlZmluZSBSRUdf U1NDX0NUUkwwIDB4ODgNCisjZGVmaW5lIFJFR19TU0NfQ1RSTDEgMHg4OQ0KKyNkZWZpbmUgUkVH X1NTQ19DVFJMMiAweDhBDQorDQorI2RlZmluZSBSQlIgRFBfTElOS19CV18xXzYyDQorI2RlZmlu ZSBIQlIgRFBfTElOS19CV18yXzcNCisjZGVmaW5lIEhCUjIgRFBfTElOS19CV181XzQNCisjZGVm aW5lIEhCUjMgRFBfTElOS19CV184XzENCisNCisjZGVmaW5lIERQQ0RfVl8xXzEgMHgxMQ0KKyNk ZWZpbmUgTUlTQ19WRVJCIDB4RjANCisjZGVmaW5lIE1JU0NfVkVSQyAweDcwDQorI2RlZmluZSBJ MlNfSU5QVVRfRk9STUFUX1NUQU5EQVJEIDANCisjZGVmaW5lIEkyU19JTlBVVF9GT1JNQVRfMzJC SVQgMQ0KKyNkZWZpbmUgSTJTX0lOUFVUX0xFRlRfSlVTVElGSUVEIDANCisjZGVmaW5lIEkyU19J TlBVVF9SSUdIVF9KVVNUSUZJRUQgMQ0KKyNkZWZpbmUgSTJTX0RBVEFfMVRfREVMQVkgMA0KKyNk ZWZpbmUgSTJTX0RBVEFfTk9fREVMQVkgMQ0KKyNkZWZpbmUgSTJTX1dTX0xFRlRfQ0hBTk5FTCAw DQorI2RlZmluZSBJMlNfV1NfUklHSFRfQ0hBTk5FTCAxDQorI2RlZmluZSBJMlNfREFUQV9NU0Jf RklSU1QgMA0KKyNkZWZpbmUgSTJTX0RBVEFfTFNCX0ZJUlNUIDENCisjZGVmaW5lIFdPUkRfTEVO R1RIXzE2QklUIDANCisjZGVmaW5lIFdPUkRfTEVOR1RIXzE4QklUIDENCisjZGVmaW5lIFdPUkRf TEVOR1RIXzIwQklUIDINCisjZGVmaW5lIFdPUkRfTEVOR1RIXzI0QklUIDMNCisjZGVmaW5lIERF QlVHRlNfRElSX05BTUUgIml0NjUwNS1kZWJ1Z2ZzIg0KKyNkZWZpbmUgUkVBRF9CVUZGRVJfU0la RSAyMDANCisNCisvKiBWZW5kb3Igb3B0aW9uICovDQorI2RlZmluZSBIRENQX0RFU0lSRUQgMQ0K KyNkZWZpbmUgTUFYX0xBTkVfQ09VTlQgNA0KKyNkZWZpbmUgTUFYX0xJTktfUkFURSBIQlINCisj ZGVmaW5lIEFVVE9fVFJBSU5fUkVUUlkgMw0KKyNkZWZpbmUgTUFYX0hEQ1BfRE9XTl9TVFJFQU1f Q09VTlQgMTANCisjZGVmaW5lIE1BWF9DUl9MRVZFTCAweDAzDQorI2RlZmluZSBNQVhfRVFfTEVW RUwgMHgwMw0KKyNkZWZpbmUgQVVYX1dBSVRfVElNRU9VVF9NUyAxNQ0KKyNkZWZpbmUgQVVYX0ZJ Rk9fTUFYX1NJWkUgMzINCisjZGVmaW5lIFBJWEVMX0NMS19ERUxBWSAxDQorI2RlZmluZSBQSVhF TF9DTEtfSU5WRVJTRSAwDQorI2RlZmluZSBBREpVU1RfUEhBU0VfVEhSRVNIT0xEIDgwMDAwDQor I2RlZmluZSBEUElfUElYRUxfQ0xLX01BWCA5NTAwMA0KKyNkZWZpbmUgSERDUF9TSEExX0ZJRk9f TEVOIChNQVhfSERDUF9ET1dOX1NUUkVBTV9DT1VOVCAqIDUgKyAxMCkNCisjZGVmaW5lIERFRkFV TFRfUFdSX09OIDANCisjZGVmaW5lIERFRkFVTFRfRFJWX0hPTEQgMA0KKw0KKyNkZWZpbmUgQVVE SU9fU0VMRUNUIEkyUw0KKyNkZWZpbmUgQVVESU9fVFlQRSBMUENNDQorI2RlZmluZSBBVURJT19T QU1QTEVfUkFURSBTQU1QTEVfUkFURV80OEsNCisjZGVmaW5lIEFVRElPX0NIQU5ORUxfQ09VTlQg Mg0KKyNkZWZpbmUgSTJTX0lOUFVUX0ZPUk1BVCBJMlNfSU5QVVRfRk9STUFUXzMyQklUDQorI2Rl ZmluZSBJMlNfSlVTVElGSUVEIEkyU19JTlBVVF9MRUZUX0pVU1RJRklFRA0KKyNkZWZpbmUgSTJT X0RBVEFfREVMQVkgSTJTX0RBVEFfMVRfREVMQVkNCisjZGVmaW5lIEkyU19XU19DSEFOTkVMIEky U19XU19MRUZUX0NIQU5ORUwNCisjZGVmaW5lIEkyU19EQVRBX1NFUVVFTkNFIEkyU19EQVRBX01T Ql9GSVJTVA0KKyNkZWZpbmUgQVVESU9fV09SRF9MRU5HVEggV09SRF9MRU5HVEhfMjRCSVQNCisN CitlbnVtIGF1eF9jbWRfdHlwZSB7DQorCUNNRF9BVVhfTkFUSVZFX1JFQUQgPSAweDAsDQorCUNN RF9BVVhfTkFUSVZFX1dSSVRFID0gMHg1LA0KKwlDTURfQVVYX0kyQ19FRElEX1JFQUQgPSAweEIs DQorfTsNCisNCitlbnVtIGF1eF9jbWRfcmVwbHkgew0KKwlSRVBMWV9BQ0ssDQorCVJFUExZX05B Q0ssDQorCVJFUExZX0RFRkVSLA0KK307DQorDQorZW51bSBsaW5rX3RyYWluX3N0YXR1cyB7DQor CUxJTktfSURMRSwNCisJTElOS19CVVNZLA0KKwlMSU5LX09LLA0KK307DQorDQorZW51bSBoZGNw X3N0YXRlIHsNCisJSERDUF9BVVRIX0lETEUsDQorCUhEQ1BfQVVUSF9HT0lORywNCisJSERDUF9B VVRIX0RPTkUsDQorfTsNCisNCitzdHJ1Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEgew0KKwlzdHJ1 Y3QgcmVndWxhdG9yICpwd3IxODsNCisJc3RydWN0IHJlZ3VsYXRvciAqb3ZkZDsNCisJc3RydWN0 IGdwaW9fZGVzYyAqZ3Bpb2RfcmVzZXQ7DQorfTsNCisNCitlbnVtIGl0NjUwNV9hdWRpb19zZWxl Y3Qgew0KKwlJMlMgPSAwLA0KKwlTUERJRiwNCit9Ow0KKw0KK2VudW0gaXQ2NTA1X2F1ZGlvX3Nh bXBsZV9yYXRlIHsNCisJU0FNUExFX1JBVEVfMjRLID0gMHg2LA0KKwlTQU1QTEVfUkFURV8zMksg PSAweDMsDQorCVNBTVBMRV9SQVRFXzQ4SyA9IDB4MiwNCisJU0FNUExFX1JBVEVfOTZLID0gMHhB LA0KKwlTQU1QTEVfUkFURV8xOTJLID0gMHhFLA0KKwlTQU1QTEVfUkFURV80NF8xSyA9IDB4MCwN CisJU0FNUExFX1JBVEVfODhfMksgPSAweDgsDQorCVNBTVBMRV9SQVRFXzE3Nl80SyA9IDB4QywN Cit9Ow0KKw0KK2VudW0gaXQ2NTA1X2F1ZGlvX3R5cGUgew0KKwlMUENNID0gMCwNCisJTkxQQ00s DQorCURTUywNCit9Ow0KKw0KK3N0cnVjdCBpdDY1MDVfYXVkaW9fZGF0YSB7DQorCWVudW0gaXQ2 NTA1X2F1ZGlvX3NlbGVjdCBzZWxlY3Q7DQorCWVudW0gaXQ2NTA1X2F1ZGlvX3NhbXBsZV9yYXRl IHNhbXBsZV9yYXRlOw0KKwllbnVtIGl0NjUwNV9hdWRpb190eXBlIHR5cGU7DQorCXU4IHdvcmRf bGVuZ3RoOw0KKwl1OCBjaGFubmVsX2NvdW50Ow0KKwl1OCBpMnNfaW5wdXRfZm9ybWF0Ow0KKwl1 OCBpMnNfanVzdGlmaWVkOw0KKwl1OCBpMnNfZGF0YV9kZWxheTsNCisJdTggaTJzX3dzX2NoYW5u ZWw7DQorCXU4IGkyc19kYXRhX3NlcXVlbmNlOw0KK307DQorDQorc3RydWN0IGl0NjUwNV9hdWRp b19zYW1wbGVfcmF0ZV9tYXAgew0KKwllbnVtIGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZSByYXRl Ow0KKwlpbnQgc2FtcGxlX3JhdGVfdmFsdWU7DQorfTsNCisNCitzdHJ1Y3QgaXQ2NTA1X2RybV9k cF9saW5rIHsNCisJdW5zaWduZWQgY2hhciByZXZpc2lvbjsNCisJdW5zaWduZWQgaW50IHJhdGU7 DQorCXVuc2lnbmVkIGludCBudW1fbGFuZXM7DQorCXVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVz Ow0KK307DQorDQorc3RydWN0IGRlYnVnZnNfZW50cmllcyB7DQorCWNoYXIgKm5hbWU7DQorCWNv bnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7DQorfTsNCisNCitzdHJ1Y3QgaXQ2NTA1 IHsNCisJc3RydWN0IGRybV9kcF9hdXggYXV4Ow0KKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7 DQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7DQorCXN0cnVjdCBpdDY1MDVfZHJtX2RwX2xp bmsgbGluazsNCisJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhIHBkYXRhOw0KKwkvKg0KKwkg KiBNdXRleCBwcm90ZWN0cyBleHRjb24gYW5kIGludGVycnVwdCBmdW5jdGlvbnMgZnJvbSBpbnRl cmZlcmluZw0KKwkgKiBlYWNoIG90aGVyLg0KKwkgKi8NCisJc3RydWN0IG11dGV4IGV4dGNvbl9s b2NrOw0KKwlzdHJ1Y3QgbXV0ZXggbW9kZV9sb2NrOyAvKiB1c2VkIHRvIGJyaWRnZV9kZXRlY3Qg Ki8NCisJc3RydWN0IG11dGV4IGF1eF9sb2NrOyAvKiB1c2VkIHRvIGF1eCBkYXRhIHRyYW5zZmVy cyAqLw0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7DQorCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl IHNvdXJjZV9vdXRwdXRfbW9kZTsNCisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgdmlkZW9faW5m bzsNCisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGV2ZW50X25iOw0KKwlzdHJ1Y3QgZXh0Y29uX2Rl diAqZXh0Y29uOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXh0Y29uX3dxOw0KKwllbnVtIGRybV9j b25uZWN0b3Jfc3RhdHVzIGNvbm5lY3Rvcl9zdGF0dXM7DQorCWVudW0gbGlua190cmFpbl9zdGF0 dXMgbGlua19zdGF0ZTsNCisJc3RydWN0IHdvcmtfc3RydWN0IGxpbmtfd29ya3M7DQorCXU4IGRw Y2RbRFBfUkVDRUlWRVJfQ0FQX1NJWkVdOw0KKwl1OCBsYW5lX2NvdW50Ow0KKwl1OCBsaW5rX3Jh dGVfYndfY29kZTsNCisJdTggc2lua19jb3VudDsNCisJYm9vbCBzdGVwX3RyYWluOw0KKwlib29s IGJyYW5jaF9kZXZpY2U7DQorCWJvb2wgZW5hYmxlX3NzYzsNCisJYm9vbCBsYW5lX3N3YXBfZGlz YWJsZWQ7DQorCWJvb2wgbGFuZV9zd2FwOw0KKwlib29sIHBvd2VyZWQ7DQorCWJvb2wgaHBkX3N0 YXRlOw0KKwl1MzIgYWZlX3NldHRpbmc7DQorCWVudW0gaGRjcF9zdGF0ZSBoZGNwX3N0YXR1czsN CisJc3RydWN0IGRlbGF5ZWRfd29yayBoZGNwX3dvcms7DQorCXN0cnVjdCB3b3JrX3N0cnVjdCBo ZGNwX3dhaXRfa3N2X2xpc3Q7DQorCXN0cnVjdCBjb21wbGV0aW9uIHdhaXRfZWRpZF9jb21wbGV0 ZTsNCisJdTggYXV0b190cmFpbl9yZXRyeTsNCisJYm9vbCBoZGNwX2Rlc2lyZWQ7DQorCWJvb2wg aXNfcmVwZWF0ZXI7DQorCXU4IGhkY3BfZG93bl9zdHJlYW1fY291bnQ7DQorCXU4IGJrc3ZzW0RS TV9IRENQX0tTVl9MRU5dOw0KKwl1OCBzaGExX2lucHV0W0hEQ1BfU0hBMV9GSUZPX0xFTl07DQor CWJvb2wgZW5hYmxlX2VuaGFuY2VkX2ZyYW1lOw0KKwloZG1pX2NvZGVjX3BsdWdnZWRfY2IgcGx1 Z2dlZF9jYjsNCisJc3RydWN0IGRldmljZSAqY29kZWNfZGV2Ow0KKwlzdHJ1Y3QgZGVsYXllZF93 b3JrIGRlbGF5ZWRfYXVkaW87DQorCXN0cnVjdCBpdDY1MDVfYXVkaW9fZGF0YSBhdWRpbzsNCisJ c3RydWN0IGRlbnRyeSAqZGVidWdmczsNCisNCisJLyogaXQ2NTA1IGRyaXZlciBob2xkIG9wdGlv biAqLw0KKwlib29sIGVuYWJsZV9kcnZfaG9sZDsNCit9Ow0KKw0KK3N0cnVjdCBpdDY1MDVfc3Rl cF90cmFpbl9wYXJhIHsNCisJdTggdm9sdGFnZV9zd2luZ1tNQVhfTEFORV9DT1VOVF07DQorCXU4 IHByZV9lbXBoYXNpc1tNQVhfTEFORV9DT1VOVF07DQorfTsNCisNCisvKg0KKyAqIFZlbmRvciBv cHRpb24gYWZlIHNldHRpbmdzIGZvciBkaWZmZXJlbnQgcGxhdGZvcm1zDQorICogMDogd2l0aG91 dCBGUEMgY2FibGUNCisgKiAxOiB3aXRoIEZQQyBjYWJsZQ0KKyAqLw0KKw0KK3N0YXRpYyBjb25z dCB1OCBhZmVfc2V0dGluZ190YWJsZVtdWzNdID0gew0KKwl7MHg4MiwgMHgwMCwgMHg0NX0sDQor CXsweDkzLCAweDJBLCAweDg1fQ0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpdDY1MDVf YXVkaW9fc2FtcGxlX3JhdGVfbWFwIGF1ZGlvX3NhbXBsZV9yYXRlX21hcFtdID0gew0KKwl7U0FN UExFX1JBVEVfMjRLLCAyNDAwMH0sDQorCXtTQU1QTEVfUkFURV8zMkssIDMyMDAwfSwNCisJe1NB TVBMRV9SQVRFXzQ4SywgNDgwMDB9LA0KKwl7U0FNUExFX1JBVEVfOTZLLCA5NjAwMH0sDQorCXtT QU1QTEVfUkFURV8xOTJLLCAxOTIwMDB9LA0KKwl7U0FNUExFX1JBVEVfNDRfMUssIDQ0MTAwfSwN CisJe1NBTVBMRV9SQVRFXzg4XzJLLCA4ODIwMH0sDQorCXtTQU1QTEVfUkFURV8xNzZfNEssIDE3 NjQwMH0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSBpdDY1MDVf YnJpZGdlX3ZvbGF0aWxlX3Jhbmdlc1tdID0gew0KKwl7IC5yYW5nZV9taW4gPSAwLCAucmFuZ2Vf bWF4ID0gMHhGRiB9LA0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNz X3RhYmxlIGl0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfdGFibGUgPSB7DQorCS55ZXNfcmFuZ2VzID0g aXQ2NTA1X2JyaWRnZV92b2xhdGlsZV9yYW5nZXMsDQorCS5uX3llc19yYW5nZXMgPSBBUlJBWV9T SVpFKGl0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzKSwNCit9Ow0KKw0KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBpdDY1MDVfcmVnbWFwX2NvbmZpZyA9IHsNCisJLnJlZ19i aXRzID0gOCwNCisJLnZhbF9iaXRzID0gOCwNCisJLnZvbGF0aWxlX3RhYmxlID0gJml0NjUwNV9i cmlkZ2Vfdm9sYXRpbGVfdGFibGUsDQorCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTk9ORSwNCit9 Ow0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X3JlYWQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNp Z25lZCBpbnQgcmVnX2FkZHIpDQorew0KKwl1bnNpZ25lZCBpbnQgdmFsdWU7DQorCWludCBlcnI7 DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwllcnIg PSByZWdtYXBfcmVhZChpdDY1MDUtPnJlZ21hcCwgcmVnX2FkZHIsICZ2YWx1ZSk7DQorCWlmIChl cnIgPCAwKSB7DQorCQlkZXZfZXJyKGRldiwgInJlYWQgZmFpbGVkIHJlZ1sweCV4XSBlcnI6ICVk IiwgcmVnX2FkZHIsIGVycik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCXJldHVybiB2YWx1 ZTsNCit9DQorDQorc3RhdGljIGludCBpdDY1MDVfd3JpdGUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 LCB1bnNpZ25lZCBpbnQgcmVnX2FkZHIsDQorCQkJdW5zaWduZWQgaW50IHJlZ192YWwpDQorew0K KwlpbnQgZXJyOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsN CisNCisJZXJyID0gcmVnbWFwX3dyaXRlKGl0NjUwNS0+cmVnbWFwLCByZWdfYWRkciwgcmVnX3Zh bCk7DQorDQorCWlmIChlcnIgPCAwKSB7DQorCQlkZXZfZXJyKGRldiwgIndyaXRlIGZhaWxlZCBy ZWdbMHgleF0gPSAweCV4IGVyciA9ICVkIiwNCisJCQlyZWdfYWRkciwgcmVnX3ZhbCwgZXJyKTsN CisJCXJldHVybiBlcnI7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQg aXQ2NTA1X3NldF9iaXRzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJlZywN CisJCQkgICB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHZhbHVlKQ0KK3sNCisJaW50 IGVycjsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQor CWVyciA9IHJlZ21hcF91cGRhdGVfYml0cyhpdDY1MDUtPnJlZ21hcCwgcmVnLCBtYXNrLCB2YWx1 ZSk7DQorCWlmIChlcnIgPCAwKSB7DQorCQlkZXZfZXJyKGRldiwgIndyaXRlIHJlZ1sweCV4XSA9 IDB4JXggbWFzayA9IDB4JXggZmFpbGVkIGVyciAlZCIsDQorCQkJcmVnLCB2YWx1ZSwgbWFzaywg ZXJyKTsNCisJCXJldHVybiBlcnI7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRp YyB2b2lkIGl0NjUwNV9kZWJ1Z19wcmludChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVk IGludCByZWcsDQorCQkJICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCkNCit7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlpbnQgdmFsOw0KKw0KKwlpZiAo bGlrZWx5KCEoX19kcm1fZGVidWcgJiBEUk1fVVRfRFJJVkVSKSkpDQorCQlyZXR1cm47DQorDQor CXZhbCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnKTsNCisJaWYgKHZhbCA8IDApDQorCQlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICIlcyByZWdbJTAyeF0gcmVhZCBlcnJvciAoJWQpIiwNCisJ CQkJICAgICBwcmVmaXgsIHJlZywgdmFsKTsNCisJZWxzZQ0KKwkJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiJXMgcmVnWyUwMnhdID0gMHglMDJ4IiwgcHJlZml4LCByZWcsDQorCQkJCSAgICAg dmFsKTsNCit9DQorDQorc3RhdGljIGludCBpdDY1MDVfZHBjZF9yZWFkKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpDQorew0KKwl1OCB2YWx1ZTsNCisJaW50IHJl dDsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCXJl dCA9IGRybV9kcF9kcGNkX3JlYWRiKCZpdDY1MDUtPmF1eCwgb2Zmc2V0LCAmdmFsdWUpOw0KKwlp ZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJEUENEIHJlYWQgZmFpbGVkIFsweCVseF0g cmV0OiAlZCIsIG9mZnNldCwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisJcmV0dXJuIHZh bHVlOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9kcGNkX3dyaXRlKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsDQorCQkJICAgICB1OCBkYXRhaW4pDQorew0K KwlpbnQgcmV0Ow0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsN CisNCisJcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGViKCZpdDY1MDUtPmF1eCwgb2Zmc2V0LCBkYXRh aW4pOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJEUENEIHdyaXRlIGZhaWxl ZCBbMHglbHhdIHJldDogJWQiLCBvZmZzZXQsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQor CXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9nZXRfZHBjZChzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUsIGludCBvZmZzZXQsIHU4ICpkcGNkLCBpbnQgbnVtKQ0KK3sNCisJaW50IHJl dDsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCXJl dCA9IGRybV9kcF9kcGNkX3JlYWQoJml0NjUwNS0+YXV4LCBvZmZzZXQsIGRwY2QsIG51bSk7DQor DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAicmV0ID0gJWQgRFBDRFsweCV4XSA9IDB4JSpwaCIsIHJldCwgb2Zmc2V0LA0KKwkJ CSAgICAgbnVtLCBkcGNkKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0 NjUwNV9kdW1wKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXVuc2lnbmVkIGludCBpLCBq Ow0KKwl1OCByZWdzWzE2XTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50 LT5kZXY7DQorDQorCWZvciAoaSA9IDA7IGkgPD0gMHhmZjsgaSArPSAxNikgew0KKwkJZm9yIChq ID0gMDsgaiA8IDE2OyBqKyspDQorCQkJcmVnc1tqXSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgaSAr IGopOw0KKw0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiWzB4JTAyeF0gPSAlMTZwaCIs IGksIHJlZ3MpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBib29sIGl0NjUwNV9nZXRfc2lua19ocGRf c3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWludCByZWdfMGQ7DQorDQorCXJl Z18wZCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX1NZU1RFTV9TVFMpOw0KKw0KKwlpZiAocmVn XzBkIDwgMCkNCisJCXJldHVybiBmYWxzZTsNCisNCisJcmV0dXJuIHJlZ18wZCAmIEhQRF9TVFM7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X3JlYWRfd29yZChzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUsIHVuc2lnbmVkIGludCByZWcpDQorew0KKwlpbnQgdmFsMCwgdmFsMTsNCisNCisJdmFsMCA9 IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnKTsNCisJaWYgKHZhbDAgPCAwKQ0KKwkJcmV0dXJuIHZh bDA7DQorDQorCXZhbDEgPSBpdDY1MDVfcmVhZChpdDY1MDUsIHJlZyArIDEpOw0KKwlpZiAodmFs MSA8IDApDQorCQlyZXR1cm4gdmFsMTsNCisNCisJcmV0dXJuICh2YWwxIDw8IDgpIHwgdmFsMDsN Cit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRl djsNCisJaW50IGhzeW5jX3BvbCwgdnN5bmNfcG9sLCBpbnRlcmxhY2VkOw0KKwlpbnQgaHRvdGFs LCBoZGVzLCBoZGV3LCBoZnBoLCBoc3luY3c7DQorCWludCB2dG90YWwsIHZkZXMsIHZkZXcsIHZm cGgsIHZzeW5jdzsNCisJaW50IHJkZGF0YSwgaSwgcGNsaywgc3VtID0gMDsNCisNCisJdXNsZWVw X3JhbmdlKDEwMDAwLCAxNTAwMCk7DQorCXJkZGF0YSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVH X0lOUFVUX0NUUkwpOw0KKwloc3luY19wb2wgPSByZGRhdGEgJiBJTlBVVF9IU1lOQ19QT0w7DQor CXZzeW5jX3BvbCA9IChyZGRhdGEgJiBJTlBVVF9WU1lOQ19QT0wpID4+IDI7DQorCWludGVybGFj ZWQgPSAocmRkYXRhICYgSU5QVVRfSU5URVJMQUNFRCkgPj4gNDsNCisNCisJaHRvdGFsID0gaXQ2 NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IVE9UQUwpICYgMHgxRkZGOw0KKwloZGVz ID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IQUNUSVZFX1NUQVJUKSAmIDB4 MUZGRjsNCisJaGRldyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfSEFDVElW RV9XSURUSCkgJiAweDFGRkY7DQorCWhmcGggPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVH X0lOUFVUX0hGUk9OVF9QT1JDSCkgJiAweDFGRkY7DQorCWhzeW5jdyA9IGl0NjUwNV9yZWFkX3dv cmQoaXQ2NTA1LCBSRUdfSU5QVVRfSFNZTkNfV0lEVEgpICYgMHgxRkZGOw0KKw0KKwl2dG90YWwg PSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX1ZUT1RBTCkgJiAweEZGRjsNCisJ dmRlcyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkFDVElWRV9TVEFSVCkg JiAweEZGRjsNCisJdmRldyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkFD VElWRV9XSURUSCkgJiAweEZGRjsNCisJdmZwaCA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBS RUdfSU5QVVRfVkZST05UX1BPUkNIKSAmIDB4RkZGOw0KKwl2c3luY3cgPSBpdDY1MDVfcmVhZF93 b3JkKGl0NjUwNSwgUkVHX0lOUFVUX1ZTWU5DX1dJRFRIKSAmIDB4RkZGOw0KKw0KKwlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJoc3luY19wb2w6JWQsIHZzeW5jX3BvbDolZCwgaW50ZXJsYWNl ZDolZCIsDQorCQkJICAgICBoc3luY19wb2wsIHZzeW5jX3BvbCwgaW50ZXJsYWNlZCk7DQorCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhhY3RpdmVfc3RhcnQ6JWQsIHZhY3RpdmVfc3RhcnQ6 JWQiLA0KKwkJCSAgICAgaGRlcywgdmRlcyk7DQorDQorCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsr KSB7DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgRU5BQkxFX1BD TEtfQ09VTlRFUiwNCisJCQkJRU5BQkxFX1BDTEtfQ09VTlRFUik7DQorCQl1c2xlZXBfcmFuZ2Uo MTAwMDAsIDE1MDAwKTsNCisJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX0NUUkww LCBFTkFCTEVfUENMS19DT1VOVEVSLA0KKwkJCQkweDAwKTsNCisJCXJkZGF0YSA9IGl0NjUwNV9y ZWFkX3dvcmQoaXQ2NTA1LCBSRUdfUENMS19DT1VOVEVSX1ZBTFVFKSAmDQorCQkJIDB4RkZGOw0K Kw0KKwkJc3VtICs9IHJkZGF0YTsNCisJfQ0KKw0KKwlpZiAoc3VtID09IDApIHsNCisJCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwgImNhbGMgdmlkZW8gdGltaW5nIGVycm9yIik7DQorCQlyZXR1 cm47DQorCX0NCisNCisJc3VtIC89IDEwOw0KKwlwY2xrID0gMTM1MDAgKiAyMDQ4IC8gc3VtOw0K KwlpdDY1MDUtPnZpZGVvX2luZm8uY2xvY2sgPSBwY2xrOw0KKwlpdDY1MDUtPnZpZGVvX2luZm8u aGRpc3BsYXkgPSBoZGV3Ow0KKwlpdDY1MDUtPnZpZGVvX2luZm8uaHN5bmNfc3RhcnQgPSBoZGV3 ICsgaGZwaDsNCisJaXQ2NTA1LT52aWRlb19pbmZvLmhzeW5jX2VuZCA9IGhkZXcgKyBoZnBoICsg aHN5bmN3Ow0KKwlpdDY1MDUtPnZpZGVvX2luZm8uaHRvdGFsID0gaHRvdGFsOw0KKwlpdDY1MDUt PnZpZGVvX2luZm8udmRpc3BsYXkgPSB2ZGV3Ow0KKwlpdDY1MDUtPnZpZGVvX2luZm8udnN5bmNf c3RhcnQgPSB2ZGV3ICsgdmZwaDsNCisJaXQ2NTA1LT52aWRlb19pbmZvLnZzeW5jX2VuZCA9IHZk ZXcgKyB2ZnBoICsgdnN5bmN3Ow0KKwlpdDY1MDUtPnZpZGVvX2luZm8udnRvdGFsID0gdnRvdGFs Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsIERSTV9NT0RFX0ZNVCwNCisJCQkgICAg IERSTV9NT0RFX0FSRygmaXQ2NTA1LT52aWRlb19pbmZvKSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQg aXQ2NTA1X2RybV9kcF9saW5rX3Byb2JlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsDQorCQkJCSAg ICBzdHJ1Y3QgaXQ2NTA1X2RybV9kcF9saW5rICpsaW5rKQ0KK3sNCisJdTggdmFsdWVzWzNdOw0K KwlpbnQgZXJyOw0KKw0KKwltZW1zZXQobGluaywgMCwgc2l6ZW9mKCpsaW5rKSk7DQorDQorCWVy ciA9IGRybV9kcF9kcGNkX3JlYWQoYXV4LCBEUF9EUENEX1JFViwgdmFsdWVzLCBzaXplb2YodmFs dWVzKSk7DQorCWlmIChlcnIgPCAwKQ0KKwkJcmV0dXJuIGVycjsNCisNCisJbGluay0+cmV2aXNp b24gPSB2YWx1ZXNbMF07DQorCWxpbmstPnJhdGUgPSBkcm1fZHBfYndfY29kZV90b19saW5rX3Jh dGUodmFsdWVzWzFdKTsNCisJbGluay0+bnVtX2xhbmVzID0gdmFsdWVzWzJdICYgRFBfTUFYX0xB TkVfQ09VTlRfTUFTSzsNCisNCisJaWYgKHZhbHVlc1syXSAmIERQX0VOSEFOQ0VEX0ZSQU1FX0NB UCkNCisJCWxpbmstPmNhcGFiaWxpdGllcyA9IERQX0VOSEFOQ0VEX0ZSQU1FX0NBUDsNCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2RybV9kcF9saW5rX3Bvd2VyX3Vw KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsDQorCQkJCSAgICAgICBzdHJ1Y3QgaXQ2NTA1X2RybV9k cF9saW5rICpsaW5rKQ0KK3sNCisJdTggdmFsdWU7DQorCWludCBlcnI7DQorDQorCS8qIERQX1NF VF9QT1dFUiByZWdpc3RlciBpcyBvbmx5IGF2YWlsYWJsZSBvbiBEUENEIHYxLjEgYW5kIGxhdGVy ICovDQorCWlmIChsaW5rLT5yZXZpc2lvbiA8IERQQ0RfVl8xXzEpDQorCQlyZXR1cm4gMDsNCisN CisJZXJyID0gZHJtX2RwX2RwY2RfcmVhZGIoYXV4LCBEUF9TRVRfUE9XRVIsICZ2YWx1ZSk7DQor CWlmIChlcnIgPCAwKQ0KKwkJcmV0dXJuIGVycjsNCisNCisJdmFsdWUgJj0gfkRQX1NFVF9QT1dF Ul9NQVNLOw0KKwl2YWx1ZSB8PSBEUF9TRVRfUE9XRVJfRDA7DQorDQorCWVyciA9IGRybV9kcF9k cGNkX3dyaXRlYihhdXgsIERQX1NFVF9QT1dFUiwgdmFsdWUpOw0KKwlpZiAoZXJyIDwgMCkNCisJ CXJldHVybiBlcnI7DQorDQorCS8qDQorCSAqIEFjY29yZGluZyB0byB0aGUgRFAgMS4xIHNwZWNp ZmljYXRpb24sIGEgIlNpbmsgRGV2aWNlIG11c3QgZXhpdCB0aGUNCisJICogcG93ZXIgc2F2aW5n IHN0YXRlIHdpdGhpbiAxIG1zIiAoU2VjdGlvbiAyLjUuMy4xLCBUYWJsZSA1LTUyLCAiU2luaw0K KwkgKiBDb250cm9sIEZpZWxkIiAocmVnaXN0ZXIgMHg2MDApLg0KKwkgKi8NCisJdXNsZWVwX3Jh bmdlKDEwMDAsIDIwMDApOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2 NTA1X2NsZWFyX2ludChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBJTlRfU1RBVFVTXzAxLCAweEZGKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5U X1NUQVRVU18wMiwgMHhGRik7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9TVEFUVVNfMDMs IDB4RkYpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfaW50X21hc2tfZW5hYmxlKHN0cnVj dCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAx LCBCSVQoSU5UX0hQRF9DSEFOR0UpIHwNCisJCSAgICAgQklUKElOVF9SRUNFSVZFX0hQRF9JUlEp IHwgQklUKElOVF9TQ0RUX0NIQU5HRSkgfA0KKwkJICAgICBCSVQoSU5UX0hEQ1BfRkFJTCkgfCBC SVQoSU5UX0hEQ1BfRE9ORSkpOw0KKw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJTlRfTUFTS18w MiwgQklUKElOVF9BVVhfQ01EX0ZBSUwpIHwNCisJCSAgICAgQklUKElOVF9IRENQX0tTVl9DSEVD SykgfCBCSVQoSU5UX0FVRElPX0ZJRk9fRVJST1IpKTsNCisNCisJaXQ2NTA1X3dyaXRlKGl0NjUw NSwgSU5UX01BU0tfMDMsIEJJVChJTlRfTElOS19UUkFJTl9GQUlMKSB8DQorCQkgICAgIEJJVChJ TlRfVklEX0ZJRk9fRVJST1IpIHwgQklUKElOVF9JT19MQVRDSF9GSUZPX09WRVJGTE9XKSk7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9pbnRfbWFza19kaXNhYmxlKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkNCit7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAxLCAweDAwKTsN CisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01BU0tfMDIsIDB4MDApOw0KKwlpdDY1MDVfd3Jp dGUoaXQ2NTA1LCBJTlRfTUFTS18wMywgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUw NV9sYW5lX3Rlcm1pbmF0aW9uX29uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWludCBy ZWdjZjsNCisNCisJcmVnY2YgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19VU0VSX0RSVl9QUkUp Ow0KKw0KKwlpZiAocmVnY2YgPT0gTUlTQ19WRVJCKQ0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwgMHg4MCwgMHgwMCk7DQorDQorCWlmIChyZWdjZiA9PSBN SVNDX1ZFUkMpIHsNCisJCWlmIChpdDY1MDUtPmxhbmVfc3dhcCkgew0KKwkJCXN3aXRjaCAoaXQ2 NTA1LT5sYW5lX2NvdW50KSB7DQorCQkJY2FzZSAxOg0KKwkJCWNhc2UgMjoNCisJCQkJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwNCisJCQkJCQkweDBDLCAweDA4 KTsNCisJCQkJYnJlYWs7DQorCQkJZGVmYXVsdDoNCisJCQkJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwNCisJCQkJCQkweDBDLCAweDBDKTsNCisJCQkJYnJlYWs7 DQorCQkJfQ0KKwkJfSBlbHNlIHsNCisJCQlzd2l0Y2ggKGl0NjUwNS0+bGFuZV9jb3VudCkgew0K KwkJCWNhc2UgMToNCisJCQljYXNlIDI6DQorCQkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJF R19EUlZfTE5fREFUQV9TRUwsDQorCQkJCQkJMHgwQywgMHgwNCk7DQorCQkJCWJyZWFrOw0KKwkJ CWRlZmF1bHQ6DQorCQkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9T RUwsDQorCQkJCQkJMHgwQywgMHgwQyk7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCX0NCisJfQ0K K30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV90ZXJtaW5hdGlvbl9vZmYoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZ2NmOw0KKw0KKwlyZWdjZiA9IGl0NjUwNV9yZWFk KGl0NjUwNSwgUkVHX1VTRVJfRFJWX1BSRSk7DQorDQorCWlmIChyZWdjZiA9PSBNSVNDX1ZFUkIp DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfRFJWX0xOX0RBVEFfU0VMLCAweDgwLCAw eDgwKTsNCisNCisJaWYgKHJlZ2NmID09IE1JU0NfVkVSQykNCisJCWl0NjUwNV9zZXRfYml0cyhp dDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsIDB4MEMsIDB4MDApOw0KK30NCisNCitzdGF0aWMg dm9pZCBpdDY1MDVfbGFuZV9wb3dlcl9vbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlp dDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfTElOS19EUlYsIDB4RjEsDQorCQkJKGl0NjUwNS0+ bGFuZV9zd2FwID8NCisJCQkJIEdFTk1BU0soNywgOCAtIGl0NjUwNS0+bGFuZV9jb3VudCkgOg0K KwkJCQkgR0VOTUFTSygzICsgaXQ2NTA1LT5sYW5lX2NvdW50LCA0KSkgfA0KKwkJCQkweDAxKTsN Cit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfcG93ZXJfb2ZmKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkNCit7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19MSU5LX0RSViwgMHhG MCwgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX29mZihzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDVfbGFuZV9wb3dlcl9vZmYoaXQ2NTA1KTsNCisJaXQ2 NTA1X2xhbmVfdGVybWluYXRpb25fb2ZmKGl0NjUwNSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0 NjUwNV9hdXhfdGVybWluYXRpb25fb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50 IHJlZ2NmOw0KKw0KKwlyZWdjZiA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX1VTRVJfRFJWX1BS RSk7DQorDQorCWlmIChyZWdjZiA9PSBNSVNDX1ZFUkIpDQorCQlpdDY1MDVfbGFuZV90ZXJtaW5h dGlvbl9vbihpdDY1MDUpOw0KKw0KKwlpZiAocmVnY2YgPT0gTUlTQ19WRVJDKQ0KKwkJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwgMHg4MCwgMHg4MCk7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9hdXhfcG93ZXJfb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1 KQ0KK3sNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWCwgMHgwMiwgMHgwMik7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9hdXhfb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0K K3sNCisJaXQ2NTA1X2F1eF9wb3dlcl9vbihpdDY1MDUpOw0KKwlpdDY1MDVfYXV4X3Rlcm1pbmF0 aW9uX29uKGl0NjUwNSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9hdXhfcmVzZXQoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JF U0VUX0NUUkwsIEFVWF9SRVNFVCwgQVVYX1JFU0VUKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX1JFU0VUX0NUUkwsIEFVWF9SRVNFVCwgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lk IGl0NjUwNV9yZXNldF9sb2dpYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlyZWdtYXBf d3JpdGUoaXQ2NTA1LT5yZWdtYXAsIFJFR19SRVNFVF9DVFJMLCBBTExfTE9HSUNfUkVTRVQpOw0K Kwl1c2xlZXBfcmFuZ2UoMTAwMCwgMTUwMCk7DQorfQ0KKw0KK3N0YXRpYyBib29sIGl0NjUwNV9h dXhfb3BfZmluaXNoZWQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZzJiID0g aXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVYX0NNRF9SRVEpOw0KKw0KKwlpZiAocmVnMmIgPCAw KQ0KKwkJcmV0dXJuIGZhbHNlOw0KKw0KKwlyZXR1cm4gKHJlZzJiICYgQVVYX0JVU1kpID09IDA7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2F1eF93YWl0KHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCit7DQorCWludCBzdGF0dXM7DQorCXVuc2lnbmVkIGxvbmcgdGltZW91dDsNCisJc3RydWN0 IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCXRpbWVvdXQgPSBqaWZm aWVzICsgbXNlY3NfdG9famlmZmllcyhBVVhfV0FJVF9USU1FT1VUX01TKSArIDE7DQorDQorCXdo aWxlICghaXQ2NTA1X2F1eF9vcF9maW5pc2hlZChpdDY1MDUpKSB7DQorCQlpZiAodGltZV9hZnRl cihqaWZmaWVzLCB0aW1lb3V0KSkgew0KKwkJCWRldl9lcnIoZGV2LCAiVGltZWQgb3V0IHdhaXRp bmcgQVVYIHRvIGZpbmlzaCIpOw0KKwkJCXJldHVybiAtRVRJTUVET1VUOw0KKwkJfQ0KKwkJdXNs ZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KKwl9DQorDQorCXN0YXR1cyA9IGl0NjUwNV9yZWFkKGl0 NjUwNSwgUkVHX0FVWF9FUlJPUl9TVFMpOw0KKwlpZiAoc3RhdHVzIDwgMCkgew0KKwkJZGV2X2Vy cihkZXYsICJGYWlsZWQgdG8gcmVhZCBBVVggY2hhbm5lbDogJWQiLCBzdGF0dXMpOw0KKwkJcmV0 dXJuIHN0YXR1czsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHNzaXplX3Qg aXQ2NTA1X2F1eF9vcGVyYXRpb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1LA0KKwkJCQkgICAgZW51 bSBhdXhfY21kX3R5cGUgY21kLA0KKwkJCQkgICAgdW5zaWduZWQgaW50IGFkZHJlc3MsIHU4ICpi dWZmZXIsDQorCQkJCSAgICBzaXplX3Qgc2l6ZSwgZW51bSBhdXhfY21kX3JlcGx5ICpyZXBseSkN Cit7DQorCWludCBpLCByZXQ7DQorCWJvb2wgYXV4X3dyaXRlX2NoZWNrID0gZmFsc2U7DQorDQor CWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkNCisJCXJldHVybiAtRUlP Ow0KKw0KKwkvKiBzZXQgQVVYIHVzZXIgbW9kZSAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1 LCBSRUdfQVVYX0NUUkwsIEFVWF9VU0VSX01PREUsIEFVWF9VU0VSX01PREUpOw0KKw0KK2F1eF9v cF9zdGFydDoNCisJaWYgKGNtZCA9PSBDTURfQVVYX0kyQ19FRElEX1JFQUQpIHsNCisJCS8qIEFV WCBFRElEIEZJRk8gaGFzIG1heCBsZW5ndGggb2YgQVVYX0ZJRk9fTUFYX1NJWkUgYnl0ZXMuICov DQorCQlzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBBVVhfRklGT19NQVhfU0laRSk7DQorCQkv KiBFbmFibGUgQVVYIEZJRk8gcmVhZCBiYWNrIGFuZCBjbGVhciBGSUZPICovDQorCQlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsDQorCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBD TFJfRURJRF9GSUZPLA0KKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURfRklGTyk7DQor DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsDQorCQkJCUFVWF9FTl9G SUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPLA0KKwkJCQlBVVhfRU5fRklGT19SRUFEKTsNCisJfSBl bHNlIHsNCisJCS8qIFRoZSBEUCBBVVggdHJhbnNtaXQgYnVmZmVyIGhhcyA0IGJ5dGVzLiAqLw0K KwkJc2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgNCk7DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfQVVYX0NUUkwsIEFVWF9OT19TRUdNRU5UX1dSLA0KKwkJCQlBVVhfTk9fU0VHTUVO VF9XUik7DQorCX0NCisNCisJLyogU3RhcnQgQWRkcmVzc1s3OjBdICovDQorCWl0NjUwNV93cml0 ZShpdDY1MDUsIFJFR19BVVhfQURSXzBfNywgKGFkZHJlc3MgPj4gMCkgJiAweEZGKTsNCisJLyog U3RhcnQgQWRkcmVzc1sxNTo4XSAqLw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0FE Ul84XzE1LCAoYWRkcmVzcyA+PiA4KSAmIDB4RkYpOw0KKwkvKiBXcml0ZU51bVszOjBdK1N0YXJ0 QWRyWzE5OjE2XSAqLw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0FEUl8xNl8xOSwN CisJCSAgICAgKChhZGRyZXNzID4+IDE2KSAmIDB4MEYpIHwgKChzaXplIC0gMSkgPDwgNCkpOw0K Kw0KKwlpZiAoY21kID09IENNRF9BVVhfTkFUSVZFX1dSSVRFKQ0KKwkJcmVnbWFwX2J1bGtfd3Jp dGUoaXQ2NTA1LT5yZWdtYXAsIFJFR19BVVhfT1VUX0RBVEEwLCBidWZmZXIsDQorCQkJCSAgc2l6 ZSk7DQorDQorCS8qIEF1eCBGaXJlICovDQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhf Q01EX1JFUSwgY21kKTsNCisNCisJcmV0ID0gaXQ2NTA1X2F1eF93YWl0KGl0NjUwNSk7DQorCWlm IChyZXQgPCAwKQ0KKwkJZ290byBhdXhfb3BfZXJyOw0KKw0KKwlyZXQgPSBpdDY1MDVfcmVhZChp dDY1MDUsIFJFR19BVVhfRVJST1JfU1RTKTsNCisJaWYgKHJldCA8IDApDQorCQlnb3RvIGF1eF9v cF9lcnI7DQorDQorCXN3aXRjaCAoKHJldCA+PiA2KSAmIDB4Mykgew0KKwljYXNlIDA6DQorCQkq cmVwbHkgPSBSRVBMWV9BQ0s7DQorCQlicmVhazsNCisJY2FzZSAxOg0KKwkJKnJlcGx5ID0gUkVQ TFlfREVGRVI7DQorCQlyZXQgPSAtRUFHQUlOOw0KKwkJZ290byBhdXhfb3BfZXJyOw0KKwljYXNl IDI6DQorCQkqcmVwbHkgPSBSRVBMWV9OQUNLOw0KKwkJcmV0ID0gLUVJTzsNCisJCWdvdG8gYXV4 X29wX2VycjsNCisJY2FzZSAzOg0KKwkJcmV0ID0gLUVUSU1FRE9VVDsNCisJCWdvdG8gYXV4X29w X2VycjsNCisJfQ0KKw0KKwkvKiBSZWFkIGJhY2sgTmF0aXZlIFdyaXRlIGRhdGEgKi8NCisJaWYg KGNtZCA9PSBDTURfQVVYX05BVElWRV9XUklURSkgew0KKwkJYXV4X3dyaXRlX2NoZWNrID0gdHJ1 ZTsNCisJCWNtZCA9IENNRF9BVVhfTkFUSVZFX1JFQUQ7DQorCQlnb3RvIGF1eF9vcF9zdGFydDsN CisJfQ0KKw0KKwlpZiAoY21kID09IENNRF9BVVhfSTJDX0VESURfUkVBRCkgew0KKwkJZm9yIChp ID0gMDsgaSA8IHNpemU7IGkrKykgew0KKwkJCXJldCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVH X0FVWF9EQVRBX0ZJRk8pOw0KKwkJCWlmIChyZXQgPCAwKQ0KKwkJCQlnb3RvIGF1eF9vcF9lcnI7 DQorCQkJYnVmZmVyW2ldID0gcmV0Ow0KKwkJfQ0KKwl9IGVsc2Ugew0KKwkJZm9yIChpID0gMDsg aSA8IHNpemU7IGkrKykgew0KKwkJCXJldCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVWF9E QVRBXzBfNyArIGkpOw0KKwkJCWlmIChyZXQgPCAwKQ0KKwkJCQlnb3RvIGF1eF9vcF9lcnI7DQor DQorCQkJaWYgKGF1eF93cml0ZV9jaGVjayAmJiBidWZmZXJbc2l6ZSAtIDEgLSBpXSAhPSByZXQp IHsNCisJCQkJcmV0ID0gLUVJTlZBTDsNCisJCQkJZ290byBhdXhfb3BfZXJyOw0KKwkJCX0NCisN CisJCQlidWZmZXJbc2l6ZSAtIDEgLSBpXSA9IHJldDsNCisJCX0NCisJfQ0KKw0KKwlyZXQgPSBp Ow0KKw0KK2F1eF9vcF9lcnI6DQorCWlmIChjbWQgPT0gQ01EX0FVWF9JMkNfRURJRF9SRUFEKSB7 DQorCQkvKiBjbGVhciBBVVggRklGTyAqLw0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0FVWF9DVFJMLA0KKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURfRklGTywNCisJCQkJ QVVYX0VOX0ZJRk9fUkVBRCB8IENMUl9FRElEX0ZJRk8pOw0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0FVWF9DVFJMLA0KKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURfRklG TywgMHgwMCk7DQorCX0NCisNCisJLyogTGVhdmUgQVVYIHVzZXIgbW9kZSAqLw0KKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsIEFVWF9VU0VSX01PREUsIDApOw0KKw0KKwly ZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgc3NpemVfdCBpdDY1MDVfYXV4X2RvX3RyYW5zZmVy KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCisJCQkJICAgICAgZW51bSBhdXhfY21kX3R5cGUgY21k LA0KKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgYWRkcmVzcywgdTggKmJ1ZmZlciwNCisJCQkJICAg ICAgc2l6ZV90IHNpemUsIGVudW0gYXV4X2NtZF9yZXBseSAqcmVwbHkpDQorew0KKwlpbnQgaSwg cmV0X3NpemUsIHJldCA9IDAsIHJlcXVlc3Rfc2l6ZTsNCisNCisJbXV0ZXhfbG9jaygmaXQ2NTA1 LT5hdXhfbG9jayk7DQorCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsNCisJCXJlcXVl c3Rfc2l6ZSA9IG1pbigoaW50KXNpemUgLSBpLCA0KTsNCisJCXJldF9zaXplID0gaXQ2NTA1X2F1 eF9vcGVyYXRpb24oaXQ2NTA1LCBjbWQsIGFkZHJlc3MgKyBpLA0KKwkJCQkJCWJ1ZmZlciArIGks IHJlcXVlc3Rfc2l6ZSwNCisJCQkJCQlyZXBseSk7DQorCQlpZiAocmV0X3NpemUgPCAwKSB7DQor CQkJcmV0ID0gcmV0X3NpemU7DQorCQkJZ290byBhdXhfb3BfZXJyOw0KKwkJfQ0KKw0KKwkJcmV0 ICs9IHJldF9zaXplOw0KKwl9DQorDQorYXV4X29wX2VycjoNCisJbXV0ZXhfdW5sb2NrKCZpdDY1 MDUtPmF1eF9sb2NrKTsNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHNzaXplX3QgaXQ2 NTA1X2F1eF90cmFuc2ZlcihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LA0KKwkJCQkgICBzdHJ1Y3Qg ZHJtX2RwX2F1eF9tc2cgKm1zZykNCit7DQorCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbnRh aW5lcl9vZihhdXgsIHN0cnVjdCBpdDY1MDUsIGF1eCk7DQorCXU4IGNtZDsNCisJYm9vbCBpc19p MmMgPSAhKG1zZy0+cmVxdWVzdCAmIERQX0FVWF9OQVRJVkVfV1JJVEUpOw0KKwlpbnQgcmV0Ow0K KwllbnVtIGF1eF9jbWRfcmVwbHkgcmVwbHk7DQorDQorCS8qIElUNjUwNSBkb2Vzbid0IHN1cHBv cnQgYXJiaXRyYXJ5IEkyQyByZWFkIC8gd3JpdGUuICovDQorCWlmIChpc19pMmMpDQorCQlyZXR1 cm4gLUVJTlZBTDsNCisNCisJc3dpdGNoIChtc2ctPnJlcXVlc3QpIHsNCisJY2FzZSBEUF9BVVhf TkFUSVZFX1JFQUQ6DQorCQljbWQgPSBDTURfQVVYX05BVElWRV9SRUFEOw0KKwkJYnJlYWs7DQor CWNhc2UgRFBfQVVYX05BVElWRV9XUklURToNCisJCWNtZCA9IENNRF9BVVhfTkFUSVZFX1dSSVRF Ow0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwly ZXQgPSBpdDY1MDVfYXV4X2RvX3RyYW5zZmVyKGl0NjUwNSwgY21kLCBtc2ctPmFkZHJlc3MsIG1z Zy0+YnVmZmVyLA0KKwkJCQkgICAgIG1zZy0+c2l6ZSwgJnJlcGx5KTsNCisJaWYgKHJldCA8IDAp DQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlzd2l0Y2ggKHJlcGx5KSB7DQorCWNhc2UgUkVQTFlfQUNL Og0KKwkJbXNnLT5yZXBseSA9IERQX0FVWF9OQVRJVkVfUkVQTFlfQUNLOw0KKwkJYnJlYWs7DQor CWNhc2UgUkVQTFlfTkFDSzoNCisJCW1zZy0+cmVwbHkgPSBEUF9BVVhfTkFUSVZFX1JFUExZX05B Q0s7DQorCQlicmVhazsNCisJY2FzZSBSRVBMWV9ERUZFUjoNCisJCW1zZy0+cmVwbHkgPSBEUF9B VVhfTkFUSVZFX1JFUExZX0RFRkVSOw0KKwkJYnJlYWs7DQorCX0NCisNCisJcmV0dXJuIHJldDsN Cit9DQorDQorc3RhdGljIGludCBpdDY1MDVfZ2V0X2VkaWRfYmxvY2sodm9pZCAqZGF0YSwgdTgg KmJ1ZiwgdW5zaWduZWQgaW50IGJsb2NrLA0KKwkJCQkgc2l6ZV90IGxlbikNCit7DQorCXN0cnVj dCBpdDY1MDUgKml0NjUwNSA9IGRhdGE7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUt PmNsaWVudC0+ZGV2Ow0KKwllbnVtIGF1eF9jbWRfcmVwbHkgcmVwbHk7DQorCWludCBvZmZzZXQs IHJldCwgYXV4X3JldHJ5ID0gMTAwOw0KKw0KKwlpdDY1MDVfYXV4X3Jlc2V0KGl0NjUwNSk7DQor CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImJsb2NrIG51bWJlciA9ICVkIiwgYmxvY2spOw0K Kw0KKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IEVESURfTEVOR1RIOykgew0KKwkJcmV0ID0g aXQ2NTA1X2F1eF9kb190cmFuc2ZlcihpdDY1MDUsIENNRF9BVVhfSTJDX0VESURfUkVBRCwNCisJ CQkJCSAgICAgYmxvY2sgKiBFRElEX0xFTkdUSCArIG9mZnNldCwNCisJCQkJCSAgICAgYnVmICsg b2Zmc2V0LCA4LCAmcmVwbHkpOw0KKw0KKwkJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FQUdBSU4p DQorCQkJcmV0dXJuIHJldDsNCisNCisJCXN3aXRjaCAocmVwbHkpIHsNCisJCWNhc2UgUkVQTFlf QUNLOg0KKwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlsweCUwMnhdOiAlOHBoIiwgb2Zm c2V0LA0KKwkJCQkJICAgICBidWYgKyBvZmZzZXQpOw0KKwkJCW9mZnNldCArPSA4Ow0KKwkJCWF1 eF9yZXRyeSA9IDEwMDsNCisJCQlicmVhazsNCisJCWNhc2UgUkVQTFlfTkFDSzoNCisJCQlyZXR1 cm4gLUVJTzsNCisJCWNhc2UgUkVQTFlfREVGRVI6DQorCQkJbXNsZWVwKDIwKTsNCisJCQlpZiAo ISgtLWF1eF9yZXRyeSkpDQorCQkJCXJldHVybiAtRUlPOw0KKwkJfQ0KKwl9DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfdmFyaWFibGVfY29uZmlnKHN0cnVjdCBp dDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUgPSBIQlI7DQor CWl0NjUwNS0+bGFuZV9jb3VudCA9IE1BWF9MQU5FX0NPVU5UOw0KKwlpdDY1MDUtPmxpbmtfc3Rh dGUgPSBMSU5LX0lETEU7DQorCWl0NjUwNS0+aGRjcF9kZXNpcmVkID0gSERDUF9ERVNJUkVEOw0K KwlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZOw0KKwlpdDY1MDUt PmF1ZGlvLnNlbGVjdCA9IEFVRElPX1NFTEVDVDsNCisJaXQ2NTA1LT5hdWRpby5zYW1wbGVfcmF0 ZSA9IEFVRElPX1NBTVBMRV9SQVRFOw0KKwlpdDY1MDUtPmF1ZGlvLmNoYW5uZWxfY291bnQgPSBB VURJT19DSEFOTkVMX0NPVU5UOw0KKwlpdDY1MDUtPmF1ZGlvLnR5cGUgPSBBVURJT19UWVBFOw0K KwlpdDY1MDUtPmF1ZGlvLmkyc19pbnB1dF9mb3JtYXQgPSBJMlNfSU5QVVRfRk9STUFUOw0KKwlp dDY1MDUtPmF1ZGlvLmkyc19qdXN0aWZpZWQgPSBJMlNfSlVTVElGSUVEOw0KKwlpdDY1MDUtPmF1 ZGlvLmkyc19kYXRhX2RlbGF5ID0gSTJTX0RBVEFfREVMQVk7DQorCWl0NjUwNS0+YXVkaW8uaTJz X3dzX2NoYW5uZWwgPSBJMlNfV1NfQ0hBTk5FTDsNCisJaXQ2NTA1LT5hdWRpby5pMnNfZGF0YV9z ZXF1ZW5jZSA9IEkyU19EQVRBX1NFUVVFTkNFOw0KKwlpdDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3Ro ID0gQVVESU9fV09SRF9MRU5HVEg7DQorCW1lbXNldChpdDY1MDUtPnNoYTFfaW5wdXQsIDAsIHNp emVvZihpdDY1MDUtPnNoYTFfaW5wdXQpKTsNCisJbWVtc2V0KGl0NjUwNS0+YmtzdnMsIDAsIHNp emVvZihpdDY1MDUtPmJrc3ZzKSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X3NlbmRfdmlk ZW9faW5mb2ZyYW1lKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCisJCQkJICAgICAgIHN0cnVjdCBo ZG1pX2F2aV9pbmZvZnJhbWUgKmZyYW1lKQ0KK3sNCisJdTggYnVmZmVyW0hETUlfSU5GT0ZSQU1F X0hFQURFUl9TSVpFICsgSERNSV9BVklfSU5GT0ZSQU1FX1NJWkVdOw0KKwlpbnQgZXJyOw0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJZXJyID0gaGRt aV9hdmlfaW5mb2ZyYW1lX3BhY2soZnJhbWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOw0KKwlp ZiAoZXJyIDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcGFjayBBVkkgaW5mb2Zy YW1lOiAlZCIsIGVycik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWVyciA9IGl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19JTkZPRlJBTUVfQ1RSTCwgRU5fQVZJX1BLVCwgMHgwMCk7DQor CWlmIChlcnIpDQorCQlyZXR1cm4gZXJyOw0KKw0KKwllcnIgPSByZWdtYXBfYnVsa193cml0ZShp dDY1MDUtPnJlZ21hcCwgUkVHX0FWSV9JTkZPX0RCMSwNCisJCQkJYnVmZmVyICsgSERNSV9JTkZP RlJBTUVfSEVBREVSX1NJWkUsDQorCQkJCWZyYW1lLT5sZW5ndGgpOw0KKwlpZiAoZXJyKQ0KKwkJ cmV0dXJuIGVycjsNCisNCisJZXJyID0gaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0lORk9G UkFNRV9DVFJMLCBFTl9BVklfUEtULA0KKwkJCSAgICAgIEVOX0FWSV9QS1QpOw0KKwlpZiAoZXJy KQ0KKwkJcmV0dXJuIGVycjsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0 NjUwNV9nZXRfZXh0Y29uX3Byb3BlcnR5KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWlu dCBlcnI7DQorCXVuaW9uIGV4dGNvbl9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eTsNCisJc3RydWN0 IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCWlmIChpdDY1MDUtPmV4 dGNvbiAmJiAhaXQ2NTA1LT5sYW5lX3N3YXBfZGlzYWJsZWQpIHsNCisJCWVyciA9IGV4dGNvbl9n ZXRfcHJvcGVydHkoaXQ2NTA1LT5leHRjb24sIEVYVENPTl9ESVNQX0RQLA0KKwkJCQkJICBFWFRD T05fUFJPUF9VU0JfVFlQRUNfUE9MQVJJVFksDQorCQkJCQkgICZwcm9wZXJ0eSk7DQorCQlpZiAo ZXJyKSB7DQorCQkJZGV2X2VycihkZXYsICJnZXQgcHJvcGVydHkgZmFpbCEiKTsNCisJCQlyZXR1 cm47DQorCQl9DQorCQlpdDY1MDUtPmxhbmVfc3dhcCA9IHByb3BlcnR5LmludHZhbDsNCisJfQ0K K30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfY2xrX3BoYXNlX2FkanVzdG1lbnQoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1LA0KKwkJCQkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUp DQorew0KKwlpbnQgY2xvY2sgPSBtb2RlLT5jbG9jazsNCisNCisJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0NMS19DVFJMMCwgTV9QQ0xLX0RFTEFZLA0KKwkJCWNsb2NrIDwgQURKVVNUX1BI QVNFX1RIUkVTSE9MRCA/IFBJWEVMX0NMS19ERUxBWSA6IDApOw0KKwlpdDY1MDVfc2V0X2JpdHMo aXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgVklERU9fTEFUQ0hfRURHRSwNCisJCQlQSVhFTF9DTEtf SU5WRVJTRSA8PCA0KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtfcmVzZXRfc3Rl cF90cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfVFJBSU5fQ1RSTDAsDQorCQkJRk9SQ0VfQ1JfRE9ORSB8IEZPUkNFX0VRX0RPTkUs IDB4MDApOw0KKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5f U0VULA0KKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsNCit9DQorDQorc3RhdGlj IHZvaWQgaXQ2NTA1X2luaXQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1X3dy aXRlKGl0NjUwNSwgUkVHX0FVWF9PUFQsIEFVWF9BVVRPX1JTVCB8IEFVWF9GSVhfRlJFUSk7DQor CWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhfQ1RSTCwgQVVYX05PX1NFR01FTlRfV1IpOw0K KwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSERDUF9DVFJMMiwgSERDUF9BTl9TRUwgfCBIRENQ X0hXX0hQRElSUV9BQ1QpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVklEX0JVU19DVFJM MCwgSU5fRERSIHwgRERSX0NEKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1ZJRF9CVVNf Q1RSTDEsIDB4MDEpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fQ1RSTDAsIEFV RElPXzE2Ql9CT1VORCk7DQorDQorCS8qIGNoaXAgaW50ZXJuYWwgc2V0dGluZywgZG9uJ3QgbW9k aWZ5ICovDQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19IUERfSVJRX1RJTUUsIDB4RjUpOw0K KwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0RFQlVHX01PREUsIDB4NEQpOw0KKwlpdDY1 MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX09QVDIsIDB4MTcpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfSERDUF9PUFQsIDB4NjApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfREFU QV9NVVRFX0NUUkwsDQorCQkgICAgIEVOX1ZJRF9NVVRFIHwgRU5fQVVEX01VVEUgfCBFTkFCTEVf QVVUT19WSURFT19GSUZPX1JFU0VUKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1RJTUVf U1RNUF9DVFJMLA0KKwkJICAgICBFTl9TU0NfR0FUIHwgRU5fRU5IQU5DRV9WSURfU1RNUCB8IEVO X0VOSEFOQ0VfQVVEX1NUTVApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1F X0NUUkwsIDB4MDApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDEp Ow0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfRFJWXzBfREJfODAwX01WLA0KKwkJICAgICBh ZmVfc2V0dGluZ190YWJsZVtpdDY1MDUtPmFmZV9zZXR0aW5nXVswXSk7DQorCWl0NjUwNV93cml0 ZShpdDY1MDUsIFJFR19QUkVfMF9EQl84MDBfTVYsDQorCQkgICAgIGFmZV9zZXR0aW5nX3RhYmxl W2l0NjUwNS0+YWZlX3NldHRpbmddWzFdKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1BS RV8zUDVfREJfODAwX01WLA0KKwkJICAgICBhZmVfc2V0dGluZ190YWJsZVtpdDY1MDUtPmFmZV9z ZXR0aW5nXVsyXSk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDAsIDB4OUUp Ow0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1NDX0NUUkwxLCAweDFDKTsNCisJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX1NTQ19DVFJMMiwgMHg0Mik7DQorCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV92aWRl b19kaXNhYmxlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV9zZXRfYml0cyhp dDY1MDUsIFJFR19EQVRBX01VVEVfQ1RSTCwgRU5fVklEX01VVEUsIEVOX1ZJRF9NVVRFKTsNCisJ aXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0lORk9GUkFNRV9DVFJMLCBFTl9WSURfQ1RSTF9Q S1QsIDB4MDApOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgVklE RU9fUkVTRVQsIFZJREVPX1JFU0VUKTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X3ZpZGVv X3Jlc2V0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV9saW5rX3Jlc2V0X3N0 ZXBfdHJhaW4oaXQ2NTA1KTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RBVEFfTVVU RV9DVFJMLCBFTl9WSURfTVVURSwgRU5fVklEX01VVEUpOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX1ZJRF9DVFJMX1BLVCwgMHgwMCk7DQorCWl0NjUw NV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBWSURFT19SRVNFVCwgVklERU9fUkVT RVQpOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfNTAxX0ZJRk9fQ1RSTCwgUlNUXzUw MV9GSUZPLCBSU1RfNTAxX0ZJRk8pOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfNTAx X0ZJRk9fQ1RSTCwgUlNUXzUwMV9GSUZPLCAweDAwKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX1JFU0VUX0NUUkwsIFZJREVPX1JFU0VULCAweDAwKTsNCit9DQorDQorc3RhdGljIHZv aWQgaXQ2NTA1X3VwZGF0ZV92aWRlb19wYXJhbWV0ZXIoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LA0K KwkJCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkNCit7DQorCWl0NjUw NV9jbGtfcGhhc2VfYWRqdXN0bWVudChpdDY1MDUsIG1vZGUpOw0KKwlpdDY1MDVfdmlkZW9fZGlz YWJsZShpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVfYXVkaW9faW5wdXQoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZzA1LCByZWdiZTsNCisNCisJcmVnMDUg PSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19SRVNFVF9DVFJMKTsNCisJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEFVRElPX1JFU0VULCAweDAwKTsNCisJdXNsZWVwX3Jh bmdlKDMwMDAsIDQwMDApOw0KKwlyZWdiZSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVRElP X0lOUFVUX0ZSRVEpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgcmVn MDUpOw0KKw0KKwlyZXR1cm4gcmVnYmUgIT0gMHhGRjsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2 NTA1X3NldHVwX2F1ZGlvX2NoYW5uZWxfc3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7 DQorCWVudW0gaXQ2NTA1X2F1ZGlvX3NhbXBsZV9yYXRlIHNhbXBsZV9yYXRlID0gaXQ2NTA1LT5h dWRpby5zYW1wbGVfcmF0ZTsNCisJdTggYXVkaW9fd29yZF9sZW5ndGhfbWFwW10gPSB7IDB4MDIs IDB4MDQsIDB4MDMsIDB4MEIgfTsNCisNCisJLyogQ2hhbm5lbCBTdGF0dXMgKi8NCisJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1OF9TVFMwLCBpdDY1MDUtPmF1ZGlvLnR5cGUgPDwgMSk7 DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTMSwgMHgwMCk7DQorCWl0NjUw NV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTMiwgMHgwMCk7DQorCWl0NjUwNV93cml0ZShp dDY1MDUsIFJFR19JRUM5NThfU1RTMywgc2FtcGxlX3JhdGUpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfSUVDOTU4X1NUUzQsICh+c2FtcGxlX3JhdGUgPDwgNCkgfA0KKwkJICAgICBhdWRp b193b3JkX2xlbmd0aF9tYXBbaXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aF0pOw0KK30NCisNCitz dGF0aWMgdm9pZCBpdDY1MDVfc2V0dXBfYXVkaW9fZm9ybWF0KHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCit7DQorCS8qIEkyUyBNT0RFICovDQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJ T19GTVQsDQorCQkgICAgIChpdDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoIDw8IDUpIHwNCisJCSAg ICAgKGl0NjUwNS0+YXVkaW8uaTJzX2RhdGFfc2VxdWVuY2UgPDwgNCkgfA0KKwkJICAgICAoaXQ2 NTA1LT5hdWRpby5pMnNfd3NfY2hhbm5lbCA8PCAzKSB8DQorCQkgICAgIChpdDY1MDUtPmF1ZGlv Lmkyc19kYXRhX2RlbGF5IDw8IDIpIHwNCisJCSAgICAgKGl0NjUwNS0+YXVkaW8uaTJzX2p1c3Rp ZmllZCA8PCAxKSB8DQorCQkgICAgIGl0NjUwNS0+YXVkaW8uaTJzX2lucHV0X2Zvcm1hdCk7DQor CWlmIChpdDY1MDUtPmF1ZGlvLnNlbGVjdCA9PSBTUERJRikgew0KKwkJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX0FVRElPX0ZJRk9fU0VMLCAweDAwKTsNCisJCS8qIDB4MzAgPSAxMjgqRlMgKi8N CisJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfT1BULCAweEYwLCAweDMwKTsNCisJ fSBlbHNlIHsNCisJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19GSUZPX1NFTCwgMHhF NCk7DQorCX0NCisNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkwwLCAweDIw KTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkwxLCAweDAwKTsNCit9DQor DQorc3RhdGljIHZvaWQgaXQ2NTA1X2VuYWJsZV9hdWRpb19zb3VyY2Uoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQ0KK3sNCisJdW5zaWduZWQgaW50IGF1ZGlvX3NvdXJjZV9jb3VudDsNCisNCisJYXVk aW9fc291cmNlX2NvdW50ID0gQklUKERJVl9ST1VORF9VUChpdDY1MDUtPmF1ZGlvLmNoYW5uZWxf Y291bnQsIDIpKQ0KKwkJCQkgLSAxOw0KKw0KKwlhdWRpb19zb3VyY2VfY291bnQgfD0gaXQ2NTA1 LT5hdWRpby5zZWxlY3QgPDwgNDsNCisNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElP X1NSQ19DVFJMLCBhdWRpb19zb3VyY2VfY291bnQpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1 MDVfZW5hYmxlX2F1ZGlvX2luZm9mcmFtZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJdTggYXVkaW9faW5m b19jYVtdID0geyAweDAwLCAweDAwLCAweDAxLCAweDAzLCAweDA3LCAweDBCLCAweDBGLCAweDFG IH07DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImluZm9mcmFtZSBjaGFubmVsX2Fs bG9jYXRpb246MHglMDJ4IiwNCisJCQkgICAgIGF1ZGlvX2luZm9fY2FbaXQ2NTA1LT5hdWRpby5j aGFubmVsX2NvdW50IC0gMV0pOw0KKw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVEX0lO Rk9GUkFNX0RCMSwgaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50DQorCQkgICAgIC0gMSk7DQor CWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fREIyLCAweDAwKTsNCisJaXQ2 NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9JTkZPRlJBTV9EQjMsDQorCQkgICAgIGF1ZGlvX2lu Zm9fY2FbaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50IC0gMV0pOw0KKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBSRUdfQVVEX0lORk9GUkFNX0RCNCwgMHgwMCk7DQorCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19BVURfSU5GT0ZSQU1fU1VNLCAweDAwKTsNCisNCisJLyogRW5hYmxlIEF1ZGlvIElu Zm9GcmFtZSAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkws IEVOX0FVRF9DVFJMX1BLVCwNCisJCQlFTl9BVURfQ1RSTF9QS1QpOw0KK30NCisNCitzdGF0aWMg dm9pZCBpdDY1MDVfZGlzYWJsZV9hdWRpbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlp dDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsIEVOX0FVRF9NVVRFLCBF Tl9BVURfTVVURSk7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVURJT19TUkNfQ1RS TCwgTV9BVURJT19JMlNfRU4sIDB4MDApOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf SU5GT0ZSQU1FX0NUUkwsIEVOX0FVRF9DVFJMX1BLVCwgMHgwMCk7DQorCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVURJT19SRVNFVCwgQVVESU9fUkVTRVQpOw0KK30N CisNCitzdGF0aWMgdm9pZCBpdDY1MDVfZW5hYmxlX2F1ZGlvKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlp bnQgcmVnYmU7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0YXJ0Iik7DQorCWl0 NjUwNV9kaXNhYmxlX2F1ZGlvKGl0NjUwNSk7DQorDQorCWl0NjUwNV9zZXR1cF9hdWRpb19jaGFu bmVsX3N0YXR1cyhpdDY1MDUpOw0KKwlpdDY1MDVfc2V0dXBfYXVkaW9fZm9ybWF0KGl0NjUwNSk7 DQorCWl0NjUwNV9lbmFibGVfYXVkaW9fc291cmNlKGl0NjUwNSk7DQorCWl0NjUwNV9lbmFibGVf YXVkaW9faW5mb2ZyYW1lKGl0NjUwNSk7DQorDQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19B VURJT19OXzBfNywgMHgwMCk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19OXzhf MTUsIDB4ODApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fTl8xNl8yMywgMHgw MCk7DQorDQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVURJT19TUkNfQ1RSTCwgQVVE SU9fRklGT19SRVNFVCwNCisJCQlBVURJT19GSUZPX1JFU0VUKTsNCisJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX0FVRElPX1NSQ19DVFJMLCBBVURJT19GSUZPX1JFU0VULCAweDAwKTsNCisJ aXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEFVRElPX1JFU0VULCAweDAw KTsNCisJcmVnYmUgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVURJT19JTlBVVF9GUkVRKTsN CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicmVnYmU6MHglMDJ4IGF1ZGlvIGlucHV0IGZz OiAlZC4lZCBrSHoiLA0KKwkJCSAgICAgcmVnYmUsIDY3NTAgLyByZWdiZSwgKDY3NTAgJSByZWdi ZSkgKiAxMCAvIHJlZ2JlKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RBVEFfTVVU RV9DVFJMLCBFTl9BVURfTVVURSwgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyBib29sIGl0NjUwNV91 c2Vfc3RlcF90cmFpbl9jaGVjayhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpZiAoaXQ2 NTA1LT5saW5rLnJldmlzaW9uID49IDB4MTIpDQorCQlyZXR1cm4gaXQ2NTA1LT5kcGNkW0RQX1RS QUlOSU5HX0FVWF9SRF9JTlRFUlZBTF0gPj0gMHgwMTsNCisNCisJcmV0dXJuIHRydWU7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9wYXJzZV9saW5rX2NhcGFiaWxpdGllcyhzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsNCisJc3RydWN0IGl0NjUwNV9kcm1fZHBfbGluayAqbGluayA9ICZpdDY1MDUtPmxpbms7 DQorCWludCBiY2FwczsNCisNCisJaWYgKGl0NjUwNS0+ZHBjZFswXSA9PSAwKSB7DQorCQlpdDY1 MDVfYXV4X29uKGl0NjUwNSk7DQorCQlpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9EUENEX1JF ViwgaXQ2NTA1LT5kcGNkLA0KKwkJCQlBUlJBWV9TSVpFKGl0NjUwNS0+ZHBjZCkpOw0KKwl9DQor DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkRQQ0QgUmV2LjogJWQuJWQiLA0KKwkJCSAg ICAgbGluay0+cmV2aXNpb24gPj4gNCwgbGluay0+cmV2aXNpb24gJiAweDBGKTsNCisNCisJRFJN X0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU2luayBtYXggbGluayByYXRlOiAlZC4lMDJkIEdicHMg cGVyIGxhbmUiLA0KKwkJCSAgICAgbGluay0+cmF0ZSAvIDEwMDAwMCwgbGluay0+cmF0ZSAvIDEw MDAgJSAxMDApOw0KKw0KKwlpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlID0gZHJtX2RwX2xpbmtf cmF0ZV90b19id19jb2RlKGxpbmstPnJhdGUpOw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJsaW5rIHJhdGUgYncgY29kZToweCUwMngiLA0KKwkJCSAgICAgaXQ2NTA1LT5saW5rX3JhdGVf YndfY29kZSk7DQorCWl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUgPSBtaW5fdChpbnQsIGl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGUsDQorCQkJCQkgIE1BWF9MSU5LX1JBVEUpOw0KKw0KKwlpdDY1 MDUtPmxhbmVfY291bnQgPSBsaW5rLT5udW1fbGFuZXM7DQorCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIlNpbmsgc3VwcG9ydCAlZCBsYW5lcyB0cmFpbmluZyIsDQorCQkJICAgICBpdDY1MDUt PmxhbmVfY291bnQpOw0KKwlpdDY1MDUtPmxhbmVfY291bnQgPSBtaW5fdChpbnQsIGl0NjUwNS0+ bGFuZV9jb3VudCwgTUFYX0xBTkVfQ09VTlQpOw0KKw0KKwlpdDY1MDUtPmJyYW5jaF9kZXZpY2Ug PSBkcm1fZHBfaXNfYnJhbmNoKGl0NjUwNS0+ZHBjZCk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIlNpbmsgJXNicmFuY2ggZGV2aWNlIiwNCisJCQkgICAgIGl0NjUwNS0+YnJhbmNoX2Rl dmljZSA/ICIiIDogIk5vdCAiKTsNCisNCisJaXQ2NTA1LT5lbmFibGVfZW5oYW5jZWRfZnJhbWUg PSBsaW5rLT5jYXBhYmlsaXRpZXM7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNpbmsg JXNTdXBwb3J0IEVuaGFuY2VkIEZyYW1pbmciLA0KKwkJCSAgICAgaXQ2NTA1LT5lbmFibGVfZW5o YW5jZWRfZnJhbWUgPyAiIiA6ICJOb3QgIik7DQorDQorCWl0NjUwNS0+ZW5hYmxlX3NzYyA9IChp dDY1MDUtPmRwY2RbRFBfTUFYX0RPV05TUFJFQURdICYNCisJCQkJRFBfTUFYX0RPV05TUFJFQURf MF81KTsNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiTWF4aW11bSBEb3duLVNwcmVhZDog JXMsICVzc3VwcG9ydCBTU0MhIiwNCisJCQkgICAgIGl0NjUwNS0+ZW5hYmxlX3NzYyA/ICIwLjUi IDogIjAiLA0KKwkJCSAgICAgaXQ2NTA1LT5lbmFibGVfc3NjID8gIiIgOiAiTm90ICIpOw0KKw0K KwlpdDY1MDUtPnN0ZXBfdHJhaW4gPSBpdDY1MDVfdXNlX3N0ZXBfdHJhaW5fY2hlY2soaXQ2NTA1 KTsNCisJaWYgKGl0NjUwNS0+c3RlcF90cmFpbikNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgImF1dG8gdHJhaW4gZmFpbCwgd2lsbCBzdGVwIHRyYWluIik7DQorDQorCWJjYXBzID0gaXQ2 NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX0FVWF9IRENQX0JDQVBTKTsNCisJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiYmNhcHM6MHglMDJ4IiwgYmNhcHMpOw0KKwlpZiAoYmNhcHMgJiBEUF9C Q0FQU19IRENQX0NBUEFCTEUpIHsNCisJCWl0NjUwNS0+aXNfcmVwZWF0ZXIgPSAoYmNhcHMgJiBE UF9CQ0FQU19SRVBFQVRFUl9QUkVTRU5UKTsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg IlN1cHBvcnQgSERDUCEgRG93bnN0cmVhbSBpcyAlcyEiLA0KKwkJCQkgICAgIGl0NjUwNS0+aXNf cmVwZWF0ZXIgPyAicmVwZWF0ZXIiIDoNCisJCQkJICAgICAicmVjZWl2ZXIiKTsNCisJfSBlbHNl IHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNpbmsgbm90IHN1cHBvcnQgSERDUCEi KTsNCisJCWl0NjUwNS0+aGRjcF9kZXNpcmVkID0gZmFsc2U7DQorCX0NCisJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiSERDUCAlcyIsDQorCQkJICAgICBpdDY1MDUtPmhkY3BfZGVzaXJlZCA/ ICJkZXNpcmVkIiA6ICJ1bmRlc2lyZWQiKTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X3Nl dHVwX3NzYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIFNQUkVBRF9BTVBfNSwNCisJCQlpdDY1MDUtPmVuYWJsZV9z c2MgPyBTUFJFQURfQU1QXzUgOiAweDAwKTsNCisJaWYgKGl0NjUwNS0+ZW5hYmxlX3NzYykgew0K KwkJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAxKTsNCisJCWl0NjUwNV93 cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDAsIDB4OUUpOw0KKwkJaXQ2NTA1X3dyaXRlKGl0NjUw NSwgUkVHX1NTQ19DVFJMMSwgMHgxQyk7DQorCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1ND X0NUUkwyLCAweDQyKTsNCisJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwgMHgw MCk7DQorCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1BfQ1RSTDAsIDB4MDcpOw0KKwkJaXQ2 NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lQX0NUUkwxLCAweDI5KTsNCisJCWl0NjUwNV93cml0ZShp dDY1MDUsIFJFR19JUF9DVFJMMiwgMHgwMyk7DQorCQkvKiBTdGFtcCBJbnRlcnJ1cHQgU3RlcCAq Lw0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLCBNX1NUQU1Q X1NURVAsDQorCQkJCTB4MTApOw0KKwkJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9ET1dO U1BSRUFEX0NUUkwsDQorCQkJCSAgRFBfU1BSRUFEX0FNUF8wXzUpOw0KKwl9IGVsc2Ugew0KKwkJ aXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9ET1dOU1BSRUFEX0NUUkwsIDB4MDApOw0KKwkJ aXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLCBNX1NUQU1QX1NURVAs DQorCQkJCTB4MDApOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpdDY1MDVfbGlu a19yYXRlX3NldHVwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19UUkFJTl9DVFJMMCwgRk9SQ0VfTEJSLA0KKwkJCShpdDY1MDUtPmxpbmtf cmF0ZV9id19jb2RlID09IFJCUikgPyBGT1JDRV9MQlIgOiAweDAwKTsNCisJaXQ2NTA1X3NldF9i aXRzKGl0NjUwNSwgUkVHX0xJTktfRFJWLCBEUlZfSFMsDQorCQkJKGl0NjUwNS0+bGlua19yYXRl X2J3X2NvZGUgPT0gUkJSKSA/IDB4MDAgOiBEUlZfSFMpOw0KK30NCisNCitzdGF0aWMgdm9pZCBp dDY1MDVfbGFuZV9jb3VudF9zZXR1cChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1 MDVfZ2V0X2V4dGNvbl9wcm9wZXJ0eShpdDY1MDUpOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1 LCBSRUdfVFJBSU5fQ1RSTDAsIExBTkVfU1dBUCwNCisJCQlpdDY1MDUtPmxhbmVfc3dhcCA/IExB TkVfU1dBUCA6IDB4MDApOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RS TDAsIExBTkVfQ09VTlRfTUFTSywNCisJCQkoaXQ2NTA1LT5sYW5lX2NvdW50IC0gMSkgPDwgMSk7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9saW5rX3RyYWluaW5nX3NldHVwKHN0cnVjdCBp dDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVu dC0+ZGV2Ow0KKw0KKwlpZiAoaXQ2NTA1LT5lbmFibGVfZW5oYW5jZWRfZnJhbWUpDQorCQlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsDQorCQkJCUVOQUJMRV9FTkhB TkNFRF9GUkFNRSwgRU5BQkxFX0VOSEFOQ0VEX0ZSQU1FKTsNCisNCisJaXQ2NTA1X2xpbmtfcmF0 ZV9zZXR1cChpdDY1MDUpOw0KKwlpdDY1MDVfbGFuZV9jb3VudF9zZXR1cChpdDY1MDUpOw0KKwlp dDY1MDVfc2V0dXBfc3NjKGl0NjUwNSk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwNCisJ CQkgICAgICIlcywgJWQgbGFuZXMsICVzYWJsZSBzc2MsICVzYWJsZSBlbmhhbmNlZCBmcmFtZSIs DQorCQkJICAgICBpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlICE9IFJCUiA/ICJIQlIiIDogIlJC UiIsDQorCQkJICAgICBpdDY1MDUtPmxhbmVfY291bnQsDQorCQkJICAgICBpdDY1MDUtPmVuYWJs ZV9zc2MgPyAiZW4iIDogImRpcyIsDQorCQkJICAgICBpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9m cmFtZSA/ICJlbiIgOiAiZGlzIik7DQorfQ0KKw0KK3N0YXRpYyBib29sIGl0NjUwNV9saW5rX3N0 YXJ0X2F1dG9fdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHRpbWVvdXQg PSA1MDAsIGxpbmtfdHJhaW5pbmdfc3RhdGU7DQorCWJvb2wgc3RhdGUgPSBmYWxzZTsNCisNCisJ bXV0ZXhfbG9jaygmaXQ2NTA1LT5hdXhfbG9jayk7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUs IFJFR19UUkFJTl9DVFJMMCwNCisJCQlGT1JDRV9DUl9ET05FIHwgRk9SQ0VfRVFfRE9ORSwgMHgw MCk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19UUkFJTl9DVFJMMSwgRk9SQ0VfUkVUUkFJ Tik7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19UUkFJTl9DVFJMMSwgQVVUT19UUkFJTik7 DQorDQorCXdoaWxlICh0aW1lb3V0ID4gMCkgew0KKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDAp Ow0KKwkJbGlua190cmFpbmluZ19zdGF0ZSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0xJTktf VFJBSU5fU1RTKTsNCisNCisJCWlmIChsaW5rX3RyYWluaW5nX3N0YXRlID4gMCAmJg0KKwkJICAg IChsaW5rX3RyYWluaW5nX3N0YXRlICYgTElOS19TVEFURV9OT1JQKSkgew0KKwkJCXN0YXRlID0g dHJ1ZTsNCisJCQlnb3RvIHVubG9jazsNCisJCX0NCisNCisJCXRpbWVvdXQtLTsNCisJfQ0KK3Vu bG9jazoNCisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPmF1eF9sb2NrKTsNCisNCisJcmV0dXJuIHN0 YXRlOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9kcm1fZHBfbGlua19jb25maWd1cmUoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJdTggdmFsdWVzWzJdOw0KKwlpbnQgZXJyOw0KKwlz dHJ1Y3QgZHJtX2RwX2F1eCAqYXV4ID0gJml0NjUwNS0+YXV4Ow0KKw0KKwl2YWx1ZXNbMF0gPSBp dDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlOw0KKwl2YWx1ZXNbMV0gPSBpdDY1MDUtPmxhbmVfY291 bnQ7DQorDQorCWlmIChpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFtZSkNCisJCXZhbHVlc1sx XSB8PSBEUF9MQU5FX0NPVU5UX0VOSEFOQ0VEX0ZSQU1FX0VOOw0KKw0KKwllcnIgPSBkcm1fZHBf ZHBjZF93cml0ZShhdXgsIERQX0xJTktfQldfU0VULCB2YWx1ZXMsIHNpemVvZih2YWx1ZXMpKTsN CisJaWYgKGVyciA8IDApDQorCQlyZXR1cm4gZXJyOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQor c3RhdGljIGJvb2wgaXQ2NTA1X2NoZWNrX3ZvbHRhZ2Vfc3dpbmdfbWF4KHU4IGxhbmVfdm9sdGFn ZV9zd2luZ19wcmVfZW1waGFzaXMpDQorew0KKwlyZXR1cm4gKChsYW5lX3ZvbHRhZ2Vfc3dpbmdf cHJlX2VtcGhhc2lzICYgMHgwMykgPT0gTUFYX0NSX0xFVkVMKTsNCit9DQorDQorc3RhdGljIGJv b2wgaXQ2NTA1X2NoZWNrX3ByZV9lbXBoYXNpc19tYXgodTggbGFuZV92b2x0YWdlX3N3aW5nX3By ZV9lbXBoYXNpcykNCit7DQorCXJldHVybiAoKGxhbmVfdm9sdGFnZV9zd2luZ19wcmVfZW1waGFz aXMgJiAweDAzKSA9PSBNQVhfRVFfTEVWRUwpOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVf Y2hlY2tfbWF4X3ZvbHRhZ2Vfc3dpbmdfcmVhY2hlZCh1OCAqbGFuZV92b2x0YWdlX3N3aW5nLA0K KwkJCQkJCSAgIHU4IGxhbmVfY291bnQpDQorew0KKwl1OCBpOw0KKw0KKwlmb3IgKGkgPSAwOyBp IDwgbGFuZV9jb3VudDsgaSsrKSB7DQorCQlpZiAobGFuZV92b2x0YWdlX3N3aW5nW2ldICYgRFBf VFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQpDQorCQkJcmV0dXJuIHRydWU7DQorCX0NCisNCisJcmV0 dXJuIGZhbHNlOw0KK30NCisNCitzdGF0aWMgYm9vbA0KK3N0ZXBfdHJhaW5fbGFuZV92b2x0YWdl X3BhcmFfc2V0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCisJCQkJIHN0cnVjdCBpdDY1MDVfc3Rl cF90cmFpbl9wYXJhDQorCQkJCSAqbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcywNCisJCQkJIHU4 ICpsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldCkNCit7DQorCXU4ICp2b2x0YWdlX3N3aW5n ID0gbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZzsNCisJdTggKnByZV9l bXBoYXNpcyA9IGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpczsNCisJdTgg aTsNCisNCisJZm9yIChpID0gMDsgaSA8IGl0NjUwNS0+bGFuZV9jb3VudDsgaSsrKSB7DQorCQl2 b2x0YWdlX3N3aW5nW2ldICY9IDB4MDM7DQorCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3Nl dFtpXSA9IHZvbHRhZ2Vfc3dpbmdbaV07DQorCQlpZiAoaXQ2NTA1X2NoZWNrX3ZvbHRhZ2Vfc3dp bmdfbWF4KHZvbHRhZ2Vfc3dpbmdbaV0pKQ0KKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNf c2V0W2ldIHw9DQorCQkJCURQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVEOw0KKw0KKwkJcHJlX2Vt cGhhc2lzW2ldICY9IDB4MDM7DQorCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSB8 PSBwcmVfZW1waGFzaXNbaV0NCisJCQk8PCBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7DQor CQlpZiAoaXQ2NTA1X2NoZWNrX3ByZV9lbXBoYXNpc19tYXgocHJlX2VtcGhhc2lzW2ldKSkNCisJ CQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSB8PQ0KKwkJCQlEUF9UUkFJTl9NQVhf UFJFX0VNUEhBU0lTX1JFQUNIRUQ7DQorCQlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RS QUlOSU5HX0xBTkUwX1NFVCArIGksDQorCQkJCSAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpc19z ZXRbaV0pOw0KKw0KKwkJaWYgKGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0W2ldICE9DQor CQkgICAgaXQ2NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX1RSQUlOSU5HX0xBTkUwX1NFVCArIGkp KQ0KKwkJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwlyZXR1cm4gdHJ1ZTsNCit9DQorDQorc3Rh dGljIGJvb2wNCitpdDY1MDVfc3RlcF9jcl90cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsDQor CQkgICAgIHN0cnVjdCBpdDY1MDVfc3RlcF90cmFpbl9wYXJhICpsYW5lX3ZvbHRhZ2VfcHJlX2Vt cGhhc2lzKQ0KK3sNCisJdTggbG9vcF9jb3VudCA9IDAsIGkgPSAwLCBqOw0KKwl1OCBsaW5rX3N0 YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSA9IHsgMCB9Ow0KKwl1OCBsYW5lX2xldmVsX2NvbmZp Z1tNQVhfTEFORV9DT1VOVF0gPSB7IDAgfTsNCisJaW50IHByZV9lbXBoYXNpc19hZGp1c3QgPSAt MSwgdm9sdGFnZV9zd2luZ19hZGp1c3QgPSAtMTsNCisJY29uc3Qgc3RydWN0IGRybV9kcF9hdXgg KmF1eCA9ICZpdDY1MDUtPmF1eDsNCisNCisJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9E T1dOU1BSRUFEX0NUUkwsDQorCQkJICBpdDY1MDUtPmVuYWJsZV9zc2MgPyBEUF9TUFJFQURfQU1Q XzBfNSA6IDB4MDApOw0KKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BB VFRFUk5fU0VULA0KKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl8xKTsNCisNCisJd2hpbGUgKGxv b3BfY291bnQgPCA1ICYmIGkgPCAxMCkgew0KKwkJaSsrOw0KKwkJaWYgKCFzdGVwX3RyYWluX2xh bmVfdm9sdGFnZV9wYXJhX3NldChpdDY1MDUsDQorCQkJCQkJICAgICAgbGFuZV92b2x0YWdlX3By ZV9lbXBoYXNpcywNCisJCQkJCQkgICAgICBsYW5lX2xldmVsX2NvbmZpZykpDQorCQkJY29udGlu dWU7DQorCQlkcm1fZHBfbGlua190cmFpbl9jbG9ja19yZWNvdmVyeV9kZWxheShhdXgsIGl0NjUw NS0+ZHBjZCk7DQorCQlkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwg bGlua19zdGF0dXMpOw0KKw0KKwkJaWYgKGRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhsaW5rX3N0 YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0KKwkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUs IFJFR19UUkFJTl9DVFJMMCwgRk9SQ0VfQ1JfRE9ORSwNCisJCQkJCUZPUkNFX0NSX0RPTkUpOw0K KwkJCXJldHVybiB0cnVlOw0KKwkJfQ0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoJml0NjUwNS0+ Y2xpZW50LT5kZXYsICJjciBub3QgZG9uZSIpOw0KKw0KKwkJaWYgKGl0NjUwNV9jaGVja19tYXhf dm9sdGFnZV9zd2luZ19yZWFjaGVkKGxhbmVfbGV2ZWxfY29uZmlnLA0KKwkJCQkJCQkgICBpdDY1 MDUtPmxhbmVfY291bnQpKQ0KKwkJCWdvdG8gY3JfdHJhaW5fZmFpbDsNCisNCisJCWZvciAoaiA9 IDA7IGogPCBpdDY1MDUtPmxhbmVfY291bnQ7IGorKykgew0KKwkJCWxhbmVfdm9sdGFnZV9wcmVf ZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal0gPQ0KKwkJCQlkcm1fZHBfZ2V0X2FkanVzdF9yZXF1 ZXN0X3ZvbHRhZ2UobGlua19zdGF0dXMsDQorCQkJCQkJCQkgIGopID4+DQorCQkJCURQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfU0hJRlQ7DQorCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJl X2VtcGhhc2lzW2pdID0NCisJCQlkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNp cyhsaW5rX3N0YXR1cywNCisJCQkJCQkJICAgICAgIGopID4+DQorCQkJCQlEUF9UUkFJTl9QUkVf RU1QSEFTSVNfU0hJRlQ7DQorCQkJaWYgKHZvbHRhZ2Vfc3dpbmdfYWRqdXN0ID09DQorCQkJICAg ICBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5nW2pdICYmDQorCQkJICAg IHByZV9lbXBoYXNpc19hZGp1c3QgPT0NCisJCQkgICAgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFz aXMtPnByZV9lbXBoYXNpc1tqXSkgew0KKwkJCQlsb29wX2NvdW50Kys7DQorCQkJCWNvbnRpbnVl Ow0KKwkJCX0NCisNCisJCQl2b2x0YWdlX3N3aW5nX2FkanVzdCA9DQorCQkJCWxhbmVfdm9sdGFn ZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal07DQorCQkJcHJlX2VtcGhhc2lzX2FkanVz dCA9DQorCQkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tqXTsNCisJ CQlsb29wX2NvdW50ID0gMDsNCisNCisJCQlpZiAodm9sdGFnZV9zd2luZ19hZGp1c3QgKyBwcmVf ZW1waGFzaXNfYWRqdXN0ID4NCisJCQkgICAgTUFYX0VRX0xFVkVMKQ0KKwkJCQlsYW5lX3ZvbHRh Z2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5nW2pdID0NCisJCQkJCU1BWF9FUV9MRVZFTCAt DQorCQkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzDQorCQkJCQkJLT5wcmVfZW1waGFzaXNb al07DQorCQl9DQorCX0NCisNCitjcl90cmFpbl9mYWlsOg0KKwlpdDY1MDVfZHBjZF93cml0ZShp dDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULA0KKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVS Tl9ESVNBQkxFKTsNCisNCisJcmV0dXJuIGZhbHNlOw0KK30NCisNCitzdGF0aWMgYm9vbA0KK2l0 NjUwNV9zdGVwX2VxX3RyYWluKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCisJCSAgICAgc3RydWN0 IGl0NjUwNV9zdGVwX3RyYWluX3BhcmEgKmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpDQorew0K Kwl1OCBsb29wX2NvdW50ID0gMCwgaSwgbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0g PSB7IDAgfTsNCisJdTggbGFuZV9sZXZlbF9jb25maWdbTUFYX0xBTkVfQ09VTlRdID0geyAwIH07 DQorCWNvbnN0IHN0cnVjdCBkcm1fZHBfYXV4ICphdXggPSAmaXQ2NTA1LT5hdXg7DQorDQorCWl0 NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsDQorCQkJICBE UF9UUkFJTklOR19QQVRURVJOXzIpOw0KKw0KKwl3aGlsZSAobG9vcF9jb3VudCA8IDYpIHsNCisJ CWxvb3BfY291bnQrKzsNCisNCisJCWlmICghc3RlcF90cmFpbl9sYW5lX3ZvbHRhZ2VfcGFyYV9z ZXQoaXQ2NTA1LA0KKwkJCQkJCSAgICAgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMsDQorCQkJ CQkJICAgICAgbGFuZV9sZXZlbF9jb25maWcpKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJZHJtX2Rw X2xpbmtfdHJhaW5fY2hhbm5lbF9lcV9kZWxheShhdXgsIGl0NjUwNS0+ZHBjZCk7DQorCQlkcm1f ZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwgbGlua19zdGF0dXMpOw0KKw0K KwkJaWYgKCFkcm1fZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGl0NjUwNS0+bGFu ZV9jb3VudCkpDQorCQkJZ290byBlcV90cmFpbl9mYWlsOw0KKw0KKwkJaWYgKGRybV9kcF9jaGFu bmVsX2VxX29rKGxpbmtfc3RhdHVzLCBpdDY1MDUtPmxhbmVfY291bnQpKSB7DQorCQkJaXQ2NTA1 X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwNCisJCQkJCSAgRFBf VFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsNCisJCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBS RUdfVFJBSU5fQ1RSTDAsIEZPUkNFX0VRX0RPTkUsDQorCQkJCQlGT1JDRV9FUV9ET05FKTsNCisJ CQlyZXR1cm4gdHJ1ZTsNCisJCX0NCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKCZpdDY1MDUtPmNs aWVudC0+ZGV2LCAiZXEgbm90IGRvbmUiKTsNCisNCisJCWZvciAoaSA9IDA7IGkgPCBpdDY1MDUt PmxhbmVfY291bnQ7IGkrKykgew0KKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRh Z2Vfc3dpbmdbaV0gPQ0KKwkJCQlkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ZvbHRhZ2UobGlu a19zdGF0dXMsDQorCQkJCQkJCQkgIGkpID4+DQorCQkJCURQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf U0hJRlQ7DQorCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldID0N CisJCQlkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNpcyhsaW5rX3N0YXR1cywN CisJCQkJCQkJICAgICAgIGkpID4+DQorCQkJCQlEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7 DQorDQorCQkJaWYgKGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbaV0g Kw0KKwkJCQkgICAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldID4N CisJCQkgICAgTUFYX0VRX0xFVkVMKQ0KKwkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52 b2x0YWdlX3N3aW5nW2ldID0NCisJCQkJCTB4MDMgLSBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lz DQorCQkJCQkJICAgICAgIC0+cHJlX2VtcGhhc2lzW2ldOw0KKwkJfQ0KKwl9DQorDQorZXFfdHJh aW5fZmFpbDoNCisJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJO X1NFVCwNCisJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7DQorCXJldHVybiBmYWxz ZTsNCit9DQorDQorc3RhdGljIGJvb2wgaXQ2NTA1X2xpbmtfc3RhcnRfc3RlcF90cmFpbihzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpbnQgZXJyOw0KKwlzdHJ1Y3QgaXQ2NTA1X3N0ZXBf dHJhaW5fcGFyYSBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzID0gew0KKwkJLnZvbHRhZ2Vfc3dp bmcgPSB7IDAgfSwNCisJCS5wcmVfZW1waGFzaXMgPSB7IDAgfSwNCisJfTsNCisNCisJRFJNX0RF Vl9ERUJVR19EUklWRVIoJml0NjUwNS0+Y2xpZW50LT5kZXYsICJzdGFydCIpOw0KKwllcnIgPSBp dDY1MDVfZHJtX2RwX2xpbmtfY29uZmlndXJlKGl0NjUwNSk7DQorDQorCWlmIChlcnIgPCAwKQ0K KwkJcmV0dXJuIGZhbHNlOw0KKwlpZiAoIWl0NjUwNV9zdGVwX2NyX3RyYWluKGl0NjUwNSwgJmxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKwlpZiAoIWl0NjUw NV9zdGVwX2VxX3RyYWluKGl0NjUwNSwgJmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpKQ0KKwkJ cmV0dXJuIGZhbHNlOw0KKwlyZXR1cm4gdHJ1ZTsNCit9DQorDQorc3RhdGljIGJvb2wgaXQ2NTA1 X2dldF92aWRlb19zdGF0dXMoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZ18w ZDsNCisNCisJcmVnXzBkID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfU1lTVEVNX1NUUyk7DQor DQorCWlmIChyZWdfMGQgPCAwKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKw0KKwlyZXR1cm4gcmVnXzBk ICYgVklERU9fU1RCOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfcmVzZXRfaGRjcChzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDUtPmhkY3Bfc3RhdHVzID0gSERDUF9BVVRI X0lETEU7DQorCS8qIERpc2FibGUgQ1BfRGVzaXJlZCAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfSERDUF9DVFJMMSwgSERDUF9DUF9FTkFCTEUsIDB4MDApOw0KKwlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgSERDUF9SRVNFVCwgSERDUF9SRVNFVCk7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9zdGFydF9oZGNwKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0K KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCIpOw0KKwlpdDY1MDVfcmVzZXRfaGRj cChpdDY1MDUpOw0KKwlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3dxLCAmaXQ2NTA1LT5oZGNw X3dvcmssDQorCQkJICAgbXNlY3NfdG9famlmZmllcygyNDAwKSk7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIGl0NjUwNV9zdG9wX2hkY3Aoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1 X3Jlc2V0X2hkY3AoaXQ2NTA1KTsNCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmaXQ2NTA1LT5oZGNw X3dvcmspOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVfaGRjcF9pc19rc3ZfdmFsaWQodTgg KmtzdikNCit7DQorCWludCBpLCBvbmVzID0gMDsNCisNCisJLyogS1NWIGhhcyAyMCAxJ3MgYW5k IDIwIDAncyAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgRFJNX0hEQ1BfS1NWX0xFTjsgaSsrKQ0KKwkJ b25lcyArPSBod2VpZ2h0OChrc3ZbaV0pOw0KKwlpZiAob25lcyAhPSAyMCkNCisJCXJldHVybiBm YWxzZTsNCisJcmV0dXJuIHRydWU7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9oZGNwX3Bh cnQxX2F1dGgoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCXU4IGhkY3BfYmNhcHM7DQorDQorCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBIRENQX1JFU0VULCAweDAwKTsNCisJLyog RGlzYWJsZSBDUF9EZXNpcmVkICovDQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQ X0NUUkwxLCBIRENQX0NQX0VOQUJMRSwgMHgwMCk7DQorDQorCXVzbGVlcF9yYW5nZSgxMDAwLCAx NTAwKTsNCisJaGRjcF9iY2FwcyA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9BVVhfSERD UF9CQ0FQUyk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkRQQ0RbMHg2ODAyOF06IDB4 JTAyeCIsDQorCQkJICAgICBoZGNwX2JjYXBzKTsNCisNCisJaWYgKCFoZGNwX2JjYXBzKQ0KKwkJ cmV0dXJuOw0KKw0KKwkvKiBjbGVhciB0aGUgcmVwZWF0ZXIgTGlzdCBDaGsgRG9uZSBhbmQgZmFp bCBiaXQgKi8NCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwNCisJ CQlIRENQX1RSSUdHRVJfS1NWX0RPTkUgfCBIRENQX1RSSUdHRVJfS1NWX0ZBSUwsDQorCQkJMHgw MCk7DQorDQorCS8qIEVuYWJsZSBBbiBHZW5lcmF0b3IgKi8NCisJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhEQ1BfQU5fR0VOLCBIRENQX0FOX0dFTik7DQorCS8qIGRl bGF5MW1zKDEwKTsqLw0KKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAwKTsNCisJLyogU3RvcCBB biBHZW5lcmF0b3IgKi8NCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIs IEhEQ1BfQU5fR0VOLCAweDAwKTsNCisNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hE Q1BfQ1RSTDEsIEhEQ1BfQ1BfRU5BQkxFLCBIRENQX0NQX0VOQUJMRSk7DQorDQorCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsIEhEQ1BfVFJJR0dFUl9TVEFSVCwNCisJ CQlIRENQX1RSSUdHRVJfU1RBUlQpOw0KKw0KKwlpdDY1MDUtPmhkY3Bfc3RhdHVzID0gSERDUF9B VVRIX0dPSU5HOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9zaGExX2RpZ2VzdChzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUsIHU4ICpzaGExX2lucHV0LA0KKwkJCSAgICAgIHVuc2lnbmVkIGludCBz aXplLCB1OCAqb3V0cHV0X2F2KQ0KK3sNCisJc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2M7DQorCXN0 cnVjdCBjcnlwdG9fc2hhc2ggKnRmbTsNCisJaW50IGVycjsNCisJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCXRmbSA9IGNyeXB0b19hbGxvY19zaGFzaCgi c2hhMSIsIDAsIDApOw0KKwlpZiAoSVNfRVJSKHRmbSkpIHsNCisJCWRldl9lcnIoZGV2LCAiY3J5 cHRvX2FsbG9jX3NoYXNoIHNoYTEgZmFpbGVkIik7DQorCQlyZXR1cm4gUFRSX0VSUih0Zm0pOw0K Kwl9DQorCWRlc2MgPSBremFsbG9jKHNpemVvZigqZGVzYykgKyBjcnlwdG9fc2hhc2hfZGVzY3Np emUodGZtKSwgR0ZQX0tFUk5FTCk7DQorCWlmICghZGVzYykgew0KKwkJY3J5cHRvX2ZyZWVfc2hh c2godGZtKTsNCisJCXJldHVybiAtRU5PTUVNOw0KKwl9DQorDQorCWRlc2MtPnRmbSA9IHRmbTsN CisJZXJyID0gY3J5cHRvX3NoYXNoX2RpZ2VzdChkZXNjLCBzaGExX2lucHV0LCBzaXplLCBvdXRw dXRfYXYpOw0KKwlpZiAoZXJyKQ0KKwkJZGV2X2VycihkZXYsICJjcnlwdG9fc2hhc2hfZGlnZXN0 IHNoYTEgZmFpbGVkIik7DQorDQorCWNyeXB0b19mcmVlX3NoYXNoKHRmbSk7DQorCWtmcmVlKGRl c2MpOw0KKwlyZXR1cm4gZXJyOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9zZXR1cF9zaGEx X2lucHV0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdTggKnNoYTFfaW5wdXQpDQorew0KKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJdTggYmluZm9bMl07DQor CWludCBkb3duX3N0cmVhbV9jb3VudCwgaSwgZXJyLCBtc2dfY291bnQgPSAwOw0KKw0KKwllcnIg PSBpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9BVVhfSERDUF9CSU5GTywgYmluZm8sDQorCQkJ ICAgICAgQVJSQVlfU0laRShiaW5mbykpOw0KKw0KKwlpZiAoZXJyIDwgMCkgew0KKwkJZGV2X2Vy cihkZXYsICJSZWFkIGJpbmZvIHZhbHVlIEZhaWwiKTsNCisJCXJldHVybiBlcnI7DQorCX0NCisN CisJZG93bl9zdHJlYW1fY291bnQgPSBiaW5mb1swXSAmIDB4N0Y7DQorCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgImJpbmZvOjB4JSpwaCIsIChpbnQpQVJSQVlfU0laRShiaW5mbyksDQorCQkJ ICAgICBiaW5mbyk7DQorDQorCWlmICgoYmluZm9bMF0gJiBCSVQoNykpIHx8IChiaW5mb1sxXSAm IEJJVCgzKSkpIHsNCisJCWRldl9lcnIoZGV2LCAiSERDUCBtYXggY2FzY2FkZSBkZXZpY2UgZXhj ZWVkIik7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwlpZiAoIWRvd25fc3RyZWFtX2NvdW50IHx8 DQorCSAgICBkb3duX3N0cmVhbV9jb3VudCA+IE1BWF9IRENQX0RPV05fU1RSRUFNX0NPVU5UKSB7 DQorCQlkZXZfZXJyKGRldiwgIkhEQ1AgZG93biBzdHJlYW0gY291bnQgRXJyb3IgJWQiLA0KKwkJ CWRvd25fc3RyZWFtX2NvdW50KTsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCWZvciAoaSA9IDA7 IGkgPCBkb3duX3N0cmVhbV9jb3VudDsgaSsrKSB7DQorCQllcnIgPSBpdDY1MDVfZ2V0X2RwY2Qo aXQ2NTA1LCBEUF9BVVhfSERDUF9LU1ZfRklGTyArDQorCQkJCSAgICAgIChpICUgMykgKiBEUk1f SERDUF9LU1ZfTEVOLA0KKwkJCQkgICAgICBzaGExX2lucHV0ICsgbXNnX2NvdW50LA0KKwkJCQkg ICAgICBEUk1fSERDUF9LU1ZfTEVOKTsNCisNCisJCWlmIChlcnIgPCAwKQ0KKwkJCXJldHVybiBl cnI7DQorDQorCQltc2dfY291bnQgKz0gNTsNCisJfQ0KKw0KKwlpdDY1MDUtPmhkY3BfZG93bl9z dHJlYW1fY291bnQgPSBkb3duX3N0cmVhbV9jb3VudDsNCisJc2hhMV9pbnB1dFttc2dfY291bnQr K10gPSBiaW5mb1swXTsNCisJc2hhMV9pbnB1dFttc2dfY291bnQrK10gPSBiaW5mb1sxXTsNCisN CisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhEQ1BfRU5fTTBfUkVB RCwNCisJCQlIRENQX0VOX00wX1JFQUQpOw0KKw0KKwllcnIgPSByZWdtYXBfYnVsa19yZWFkKGl0 NjUwNS0+cmVnbWFwLCBSRUdfTTBfMF83LA0KKwkJCSAgICAgICBzaGExX2lucHV0ICsgbXNnX2Nv dW50LCA4KTsNCisNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhE Q1BfRU5fTTBfUkVBRCwgMHgwMCk7DQorDQorCWlmIChlcnIgPCAwKSB7DQorCQlkZXZfZXJyKGRl diwgIiBXYXJuaW5nLCBSZWFkIE0gdmFsdWUgRmFpbCIpOw0KKwkJcmV0dXJuIGVycjsNCisJfQ0K Kw0KKwltc2dfY291bnQgKz0gODsNCisNCisJcmV0dXJuIG1zZ19jb3VudDsNCit9DQorDQorc3Rh dGljIGJvb2wgaXQ2NTA1X2hkY3BfcGFydDJfa3N2bGlzdF9jaGVjayhzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsN CisJdTggYXZbNV1bNF0sIGJ2WzVdWzRdOw0KKwlpbnQgaSwgZXJyOw0KKw0KKwlpID0gaXQ2NTA1 X3NldHVwX3NoYTFfaW5wdXQoaXQ2NTA1LCBpdDY1MDUtPnNoYTFfaW5wdXQpOw0KKwlpZiAoaSA8 PSAwKSB7DQorCQlkZXZfZXJyKGRldiwgIlNIQS0xIElucHV0IGxlbmd0aCBlcnJvciAlZCIsIGkp Ow0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCWl0NjUwNV9zaGExX2RpZ2VzdChpdDY1MDUs IGl0NjUwNS0+c2hhMV9pbnB1dCwgaSwgKHU4ICopYXYpOw0KKw0KKwllcnIgPSBpdDY1MDVfZ2V0 X2RwY2QoaXQ2NTA1LCBEUF9BVVhfSERDUF9WX1BSSU1FKDApLCAodTggKilidiwNCisJCQkgICAg ICBzaXplb2YoYnYpKTsNCisNCisJaWYgKGVyciA8IDApIHsNCisJCWRldl9lcnIoZGV2LCAiUmVh ZCBWJyB2YWx1ZSBGYWlsIik7DQorCQlyZXR1cm4gZmFsc2U7DQorCX0NCisNCisJZm9yIChpID0g MDsgaSA8IDU7IGkrKykNCisJCWlmIChidltpXVszXSAhPSBhdltpXVswXSB8fCBidltpXVsyXSAh PSBhdltpXVsxXSB8fA0KKwkJICAgIGJ2W2ldWzFdICE9IGF2W2ldWzJdIHx8IGJ2W2ldWzBdICE9 IGF2W2ldWzNdKQ0KKwkJCXJldHVybiBmYWxzZTsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAiVicgYWxsIG1hdGNoISEiKTsNCisJcmV0dXJuIHRydWU7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIGl0NjUwNV9oZGNwX3dhaXRfa3N2X2xpc3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0K K3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBp dDY1MDUsDQorCQkJCQkgICAgIGhkY3Bfd2FpdF9rc3ZfbGlzdCk7DQorCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwl1bnNpZ25lZCBpbnQgdGltZW91dCA9IDUw MDA7DQorCXU4IGJzdGF0dXMgPSAwOw0KKwlib29sIGtzdl9saXN0X2NoZWNrOw0KKw0KKwl0aW1l b3V0IC89IDIwOw0KKwl3aGlsZSAodGltZW91dCA+IDApIHsNCisJCWlmICghaXQ2NTA1X2dldF9z aW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkNCisJCQlyZXR1cm47DQorDQorCQlic3RhdHVzID0gaXQ2 NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX0FVWF9IRENQX0JTVEFUVVMpOw0KKw0KKwkJaWYgKGJz dGF0dXMgJiBEUF9CU1RBVFVTX1JFQURZKQ0KKwkJCWJyZWFrOw0KKw0KKwkJbXNsZWVwKDIwKTsN CisJCXRpbWVvdXQtLTsNCisJfQ0KKw0KKwlpZiAodGltZW91dCA9PSAwKSB7DQorCQlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJ0aW1lb3V0IGFuZCBrc3YgbGlzdCB3YWl0IGZhaWxlZCIpOw0K KwkJZ290byB0aW1lb3V0Ow0KKwl9DQorDQorCWtzdl9saXN0X2NoZWNrID0gaXQ2NTA1X2hkY3Bf cGFydDJfa3N2bGlzdF9jaGVjayhpdDY1MDUpOw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJrc3YgbGlzdCByZWFkeSwga3N2IGxpc3QgY2hlY2sgJXMiLA0KKwkJCSAgICAga3N2X2xpc3Rf Y2hlY2sgPyAicGFzcyIgOiAiZmFpbCIpOw0KKwlpZiAoa3N2X2xpc3RfY2hlY2spIHsNCisJCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsDQorCQkJCUhEQ1BfVFJJR0dF Ul9LU1ZfRE9ORSwgSERDUF9UUklHR0VSX0tTVl9ET05FKTsNCisJCXJldHVybjsNCisJfQ0KK3Rp bWVvdXQ6DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsDQorCQkJ SERDUF9UUklHR0VSX0tTVl9ET05FIHwgSERDUF9UUklHR0VSX0tTVl9GQUlMLA0KKwkJCUhEQ1Bf VFJJR0dFUl9LU1ZfRE9ORSB8IEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCk7DQorfQ0KKw0KK3N0YXRp YyB2b2lkIGl0NjUwNV9oZGNwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJ c3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY1MDUs DQorCQkJCQkgICAgIGhkY3Bfd29yay53b3JrKTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0 NjUwNS0+Y2xpZW50LT5kZXY7DQorCWludCByZXQ7DQorCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktf U1RBVFVTX1NJWkVdID0geyAwIH07DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0 YXJ0Iik7DQorDQorCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkNCisJ CXJldHVybjsNCisNCisJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZF9saW5rX3N0YXR1cygmaXQ2NTA1 LT5hdXgsIGxpbmtfc3RhdHVzKTsNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicmV0OiAl ZCBsaW5rX3N0YXR1czogJSpwaCIsIHJldCwNCisJCQkgICAgIChpbnQpc2l6ZW9mKGxpbmtfc3Rh dHVzKSwgbGlua19zdGF0dXMpOw0KKw0KKwlpZiAocmV0IDwgMCB8fCAhZHJtX2RwX2NoYW5uZWxf ZXFfb2sobGlua19zdGF0dXMsIGl0NjUwNS0+bGFuZV9jb3VudCkgfHwNCisJICAgICFpdDY1MDVf Z2V0X3ZpZGVvX3N0YXR1cyhpdDY1MDUpKSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJsaW5rIHRyYWluIG5vdCBkb25lIG9yIG5vIHZpZGVvIik7DQorCQlyZXR1cm47DQorCX0NCisN CisJcmV0ID0gaXQ2NTA1X2dldF9kcGNkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfQktTViwgaXQ2NTA1 LT5ia3N2cywNCisJCQkgICAgICBBUlJBWV9TSVpFKGl0NjUwNS0+YmtzdnMpKTsNCisJaWYgKHJl dCA8IDApIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBnZXQgYmtzdiAgcmV0OiAlZCIsIHJl dCk7DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9UUklHR0VSLA0KKwkJCQlI RENQX1RSSUdHRVJfS1NWX0ZBSUwsIEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCk7DQorCX0NCisNCisJ RFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmtzdiA9IDB4JSpwaCIsDQorCQkJICAgICAoaW50 KUFSUkFZX1NJWkUoaXQ2NTA1LT5ia3N2cyksIGl0NjUwNS0+YmtzdnMpOw0KKw0KKwlpZiAoIWl0 NjUwNV9oZGNwX2lzX2tzdl92YWxpZChpdDY1MDUtPmJrc3ZzKSkgew0KKwkJZGV2X2VycihkZXYs ICJEaXNwbGF5IFBvcnQgYmtzdiBub3QgdmFsaWQiKTsNCisJCWl0NjUwNV9zZXRfYml0cyhpdDY1 MDUsIFJFR19IRENQX1RSSUdHRVIsDQorCQkJCUhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwgSERDUF9U UklHR0VSX0tTVl9GQUlMKTsNCisJfQ0KKw0KKwlpdDY1MDVfaGRjcF9wYXJ0MV9hdXRoKGl0NjUw NSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9zaG93X2hkY3BfaW5mbyhzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsNCisJaW50IGk7DQorCXU4ICpzaGExID0gaXQ2NTA1LT5zaGExX2lucHV0Ow0KKw0KKwlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoZGNwX3N0YXR1czogJWQgaXNfcmVwZWF0ZXI6ICVk IiwNCisJCQkgICAgIGl0NjUwNS0+aGRjcF9zdGF0dXMsIGl0NjUwNS0+aXNfcmVwZWF0ZXIpOw0K KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJia3N2ID0gMHglKnBoIiwNCisJCQkgICAgIChp bnQpQVJSQVlfU0laRShpdDY1MDUtPmJrc3ZzKSwgaXQ2NTA1LT5ia3N2cyk7DQorDQorCWlmIChp dDY1MDUtPmlzX3JlcGVhdGVyKSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoZGNw X2Rvd25fc3RyZWFtX2NvdW50OiAlZCIsDQorCQkJCSAgICAgaXQ2NTA1LT5oZGNwX2Rvd25fc3Ry ZWFtX2NvdW50KTsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInNoYTFfaW5wdXQ6IDB4 JSpwaCIsDQorCQkJCSAgICAgKGludClBUlJBWV9TSVpFKGl0NjUwNS0+c2hhMV9pbnB1dCksDQor CQkJCSAgICAgaXQ2NTA1LT5zaGExX2lucHV0KTsNCisJCWZvciAoaSA9IDA7IGkgPCBpdDY1MDUt PmhkY3BfZG93bl9zdHJlYW1fY291bnQ7IGkrKykgew0KKwkJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIktTVl8lZCA9IDB4JSpwaCIsIGksDQorCQkJCQkgICAgIERSTV9IRENQX0tTVl9MRU4s IHNoYTEpOw0KKwkJCXNoYTEgKz0gRFJNX0hEQ1BfS1NWX0xFTjsNCisJCX0NCisJCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwgImJpbmZvOiAweCUycGggTTA6IDB4JThwaCIsDQorCQkJCSAgICAg c2hhMSwgc2hhMSArIDIpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9zdG9wX2xp bmtfdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1LT5saW5rX3N0YXRl ID0gTElOS19JRExFOw0KKwljYW5jZWxfd29ya19zeW5jKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0K KwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDEsIEZPUkNFX1JFVFJBSU4pOw0K K30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfbGlua190cmFpbl9vayhzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsN CisNCisJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElOS19PSzsNCisJLyogZGlzYWxiZSBtdXRlIGVu YWJsZSBhdmkgaW5mbyBmcmFtZSAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFU QV9NVVRFX0NUUkwsIEVOX1ZJRF9NVVRFLCAweDAwKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0lORk9GUkFNRV9DVFJMLA0KKwkJCUVOX1ZJRF9DVFJMX1BLVCwgRU5fVklEX0NUUkxf UEtUKTsNCisNCisJaWYgKGl0NjUwNV9hdWRpb19pbnB1dChpdDY1MDUpKSB7DQorCQlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJFbmFibGUgYXVkaW8hIik7DQorCQlpdDY1MDVfZW5hYmxlX2F1 ZGlvKGl0NjUwNSk7DQorCX0NCisNCisJaWYgKGl0NjUwNS0+aGRjcF9kZXNpcmVkKQ0KKwkJaXQ2 NTA1X3N0YXJ0X2hkY3AoaXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtf c3RlcF90cmFpbl9wcm9jZXNzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlpbnQgcmV0LCBpLCBzdGVwX3Jl dHJ5ID0gMzsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU3RhcnQgc3RlcCB0cmFp biIpOw0KKw0KKwlpZiAoaXQ2NTA1LT5zaW5rX2NvdW50ID09IDApIHsNCisJCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19jb3VudDolZCwgZm9yY2UgZXEiLA0KKwkJCQkg ICAgIGl0NjUwNS0+c2lua19jb3VudCk7DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LAlSRUdf VFJBSU5fQ1RSTDAsIEZPUkNFX0VRX0RPTkUsDQorCQkJCUZPUkNFX0VRX0RPTkUpOw0KKwkJcmV0 dXJuOw0KKwl9DQorDQorCWlmICghaXQ2NTA1LT5zdGVwX3RyYWluKSB7DQorCQlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJub3Qgc3VwcG9ydCBzdGVwIHRyYWluIik7DQorCQlyZXR1cm47DQor CX0NCisNCisJLyogc3RlcCB0cmFpbmluZyBzdGFydCBoZXJlICovDQorCWZvciAoaSA9IDA7IGkg PCBzdGVwX3JldHJ5OyBpKyspIHsNCisJCWl0NjUwNV9saW5rX3Jlc2V0X3N0ZXBfdHJhaW4oaXQ2 NTA1KTsNCisJCXJldCA9IGl0NjUwNV9saW5rX3N0YXJ0X3N0ZXBfdHJhaW4oaXQ2NTA1KTsNCisJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0ZXAgdHJhaW4gJXMsIHJldHJ5OiVkIHRpbWVz IiwNCisJCQkJICAgICByZXQgPyAicGFzcyIgOiAiZmFpbGVkIiwgaSArIDEpOw0KKwkJaWYgKHJl dCkgew0KKwkJCWl0NjUwNV9saW5rX3RyYWluX29rKGl0NjUwNSk7DQorCQkJcmV0dXJuOw0KKwkJ fQ0KKwl9DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInRyYWluaW5nIGZhaWwiKTsN CisJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElOS19JRExFOw0KKwlpdDY1MDVfdmlkZW9fcmVzZXQo aXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtfdHJhaW5pbmdfd29yayhz dHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBj b250YWluZXJfb2Yod29yaywgc3RydWN0IGl0NjUwNSwgbGlua193b3Jrcyk7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlpbnQgcmV0Ow0KKw0KKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJpdDY1MDUtPnNpbmtfY291bnQ6ICVkIiwNCisJCQkgICAg IGl0NjUwNS0+c2lua19jb3VudCk7DQorDQorCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0 dXMoaXQ2NTA1KSkNCisJCXJldHVybjsNCisNCisJaXQ2NTA1X2xpbmtfdHJhaW5pbmdfc2V0dXAo aXQ2NTA1KTsNCisJaXQ2NTA1X3Jlc2V0X2hkY3AoaXQ2NTA1KTsNCisJaXQ2NTA1X2F1eF9yZXNl dChpdDY1MDUpOw0KKw0KKwlpZiAoaXQ2NTA1LT5hdXRvX3RyYWluX3JldHJ5IDwgMSkgew0KKwkJ aXQ2NTA1X2xpbmtfc3RlcF90cmFpbl9wcm9jZXNzKGl0NjUwNSk7DQorCQlyZXR1cm47DQorCX0N CisNCisJcmV0ID0gaXQ2NTA1X2xpbmtfc3RhcnRfYXV0b190cmFpbihpdDY1MDUpOw0KKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJhdXRvIHRyYWluICVzLCBhdXRvX3RyYWluX3JldHJ5OiAl ZCIsDQorCQkJICAgICByZXQgPyAicGFzcyIgOiAiZmFpbGVkIiwgaXQ2NTA1LT5hdXRvX3RyYWlu X3JldHJ5KTsNCisJaXQ2NTA1LT5hdXRvX3RyYWluX3JldHJ5LS07DQorDQorCWlmIChyZXQpIHsN CisJCWl0NjUwNV9saW5rX3RyYWluX29rKGl0NjUwNSk7DQorCQlyZXR1cm47DQorCX0NCisNCisJ aXQ2NTA1X2R1bXAoaXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X3BsdWdnZWRf c3RhdHVzX3RvX2NvZGVjKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWVudW0gZHJtX2Nv bm5lY3Rvcl9zdGF0dXMgc3RhdHVzID0gaXQ2NTA1LT5jb25uZWN0b3Jfc3RhdHVzOw0KKw0KKwlp ZiAoaXQ2NTA1LT5wbHVnZ2VkX2NiICYmIGl0NjUwNS0+Y29kZWNfZGV2KQ0KKwkJaXQ2NTA1LT5w bHVnZ2VkX2NiKGl0NjUwNS0+Y29kZWNfZGV2LA0KKwkJCQkgICBzdGF0dXMgPT0gY29ubmVjdG9y X3N0YXR1c19jb25uZWN0ZWQpOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9wcm9jZXNzX2hw ZF9pcnEoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0g Jml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCWludCByZXQsIGRwY2Rfc2lua19jb3VudCwgZHBfaXJx X3ZlY3RvciwgYnN0YXR1czsNCisJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07 DQorDQorCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkgew0KKwkJRFJN X0RFVl9ERUJVR19EUklWRVIoZGV2LCAiSFBEX0lSUSBIUEQgbG93Iik7DQorCQlpdDY1MDUtPnNp bmtfY291bnQgPSAwOw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJcmV0ID0gaXQ2NTA1X2RwY2Rf cmVhZChpdDY1MDUsIERQX1NJTktfQ09VTlQpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiBy ZXQ7DQorDQorCWRwY2Rfc2lua19jb3VudCA9IERQX0dFVF9TSU5LX0NPVU5UKHJldCk7DQorCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImRwY2Rfc2lua19jb3VudDogJWQgaXQ2NTA1LT5zaW5r X2NvdW50OiVkIiwNCisJCQkgICAgIGRwY2Rfc2lua19jb3VudCwgaXQ2NTA1LT5zaW5rX2NvdW50 KTsNCisNCisJaWYgKGl0NjUwNS0+YnJhbmNoX2RldmljZSAmJiBkcGNkX3NpbmtfY291bnQgIT0g aXQ2NTA1LT5zaW5rX2NvdW50KSB7DQorCQltZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBzaXplb2Yo aXQ2NTA1LT5kcGNkKSk7DQorCQlpdDY1MDUtPnNpbmtfY291bnQgPSBkcGNkX3NpbmtfY291bnQ7 DQorCQlpdDY1MDVfcmVzZXRfbG9naWMoaXQ2NTA1KTsNCisJCWl0NjUwNV9pbnRfbWFza19lbmFi bGUoaXQ2NTA1KTsNCisJCWl0NjUwNV9pbml0KGl0NjUwNSk7DQorCQlyZXR1cm4gMDsNCisJfQ0K Kw0KKwlkcF9pcnFfdmVjdG9yID0gaXQ2NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX0RFVklDRV9T RVJWSUNFX0lSUV9WRUNUT1IpOw0KKwlpZiAoZHBfaXJxX3ZlY3RvciA8IDApDQorCQlyZXR1cm4g ZHBfaXJxX3ZlY3RvcjsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiZHBfaXJxX3Zl Y3RvciA9IDB4JTAyeCIsIGRwX2lycV92ZWN0b3IpOw0KKw0KKwlpZiAoZHBfaXJxX3ZlY3RvciAm IERQX0NQX0lSUSkgew0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dF UiwgSERDUF9UUklHR0VSX0NQSVJRLA0KKwkJCQlIRENQX1RSSUdHRVJfQ1BJUlEpOw0KKw0KKwkJ YnN0YXR1cyA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9BVVhfSERDUF9CU1RBVFVTKTsN CisJCWlmIChic3RhdHVzIDwgMCkNCisJCQlyZXR1cm4gYnN0YXR1czsNCisNCisJCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwgIkJzdGF0dXMgPSAweCUwMngiLCBic3RhdHVzKTsNCisJfQ0KKw0K KwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwgbGlua19z dGF0dXMpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJGYWlsIHRvIHJlYWQg bGluayBzdGF0dXMgcmV0OiAlZCIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImxpbmsgc3RhdHVzID0gMHglKnBoIiwNCisJCQkgICAg IChpbnQpQVJSQVlfU0laRShsaW5rX3N0YXR1cyksIGxpbmtfc3RhdHVzKTsNCisNCisJaWYgKCFk cm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0K KwkJaXQ2NTA1LT5hdXRvX3RyYWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCisJCWl0NjUw NV92aWRlb19yZXNldChpdDY1MDUpOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgdm9pZCBpdDY1MDVfaXJxX2hwZChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJaXQ2NTA1LT5ocGRf c3RhdGUgPSBpdDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpOw0KKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJocGQgY2hhbmdlIGludGVycnVwdCwgY2hhbmdlIHRvICVzIiwNCisJ CQkgICAgIGl0NjUwNS0+aHBkX3N0YXRlID8gImhpZ2giIDogImxvdyIpOw0KKw0KKwlpZiAoaXQ2 NTA1LT5icmlkZ2UuZGV2KQ0KKwkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGl0NjUwNS0+YnJp ZGdlLmRldik7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19jb3Vu dDogJWQiLA0KKwkJCSAgICAgaXQ2NTA1LT5zaW5rX2NvdW50KTsNCisNCisJaWYgKGl0NjUwNS0+ aHBkX3N0YXRlKSB7DQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJml0NjUwNS0+d2Fp dF9lZGlkX2NvbXBsZXRlLA0KKwkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoNjAwMCkpOw0KKwkJ aXQ2NTA1X2xhbmVfdGVybWluYXRpb25fb24oaXQ2NTA1KTsNCisJCWl0NjUwNV9sYW5lX3Bvd2Vy X29uKGl0NjUwNSk7DQorDQorCQkvKg0KKwkJICogZm9yIHNvbWUgZG9uZ2xlIHdoaWNoIGlzc3Vl IEhQRF9pcnENCisJCSAqIHdoZW4gc2luayBjb3VudCBjaGFuZ2UgZnJvbSAgMC0+MQ0KKwkJICog aXQ2NTA1IG5vdCBhYmxlIHRvIHJlY2VpdmUgSFBEX0lSUQ0KKwkJICogaWYgSFcgbmV2ZXIgZ28g aW50byB0cmFpbmlnIGRvbmUNCisJCSAqLw0KKw0KKwkJaWYgKGl0NjUwNS0+YnJhbmNoX2Rldmlj ZSAmJiBpdDY1MDUtPnNpbmtfY291bnQgPT0gMCkNCisJCQlzY2hlZHVsZV93b3JrKCZpdDY1MDUt Pmxpbmtfd29ya3MpOw0KKw0KKwkJaWYgKCFpdDY1MDVfZ2V0X3ZpZGVvX3N0YXR1cyhpdDY1MDUp KQ0KKwkJCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUpOw0KKw0KKwkJaXQ2NTA1X2NhbGNfdmlk ZW9faW5mbyhpdDY1MDUpOw0KKwl9IGVsc2Ugew0KKwkJbWVtc2V0KGl0NjUwNS0+ZHBjZCwgMCwg c2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOw0KKw0KKwkJaWYgKGl0NjUwNS0+aGRjcF9kZXNpcmVkKQ0K KwkJCWl0NjUwNV9zdG9wX2hkY3AoaXQ2NTA1KTsNCisNCisJCWl0NjUwNV92aWRlb19kaXNhYmxl KGl0NjUwNSk7DQorCQlpdDY1MDVfZGlzYWJsZV9hdWRpbyhpdDY1MDUpOw0KKwkJaXQ2NTA1X3N0 b3BfbGlua190cmFpbihpdDY1MDUpOw0KKwkJaXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7DQorCQlp dDY1MDVfbGlua19yZXNldF9zdGVwX3RyYWluKGl0NjUwNSk7DQorCX0NCit9DQorDQorc3RhdGlj IHZvaWQgaXQ2NTA1X2lycV9ocGRfaXJxKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJocGRfaXJxIGludGVycnVwdCIpOw0KKw0KKwlpZiAoaXQ2NTA1X3By b2Nlc3NfaHBkX2lycShpdDY1MDUpIDwgMCkNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg InByb2Nlc3MgaHBkX2lycSBmYWlsISIpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfaXJx X3NjZHQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0g Jml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCWJvb2wgZGF0YTsNCisNCisJZGF0YSA9IGl0NjUwNV9n ZXRfdmlkZW9fc3RhdHVzKGl0NjUwNSk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInZp ZGVvIHN0YWJsZSBjaGFuZ2UgaW50ZXJydXB0LCAlcyIsDQorCQkJICAgICBkYXRhID8gInN0YWJs ZSIgOiAidW5zdGFibGUiKTsNCisJaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhpdDY1MDUpOw0KKwlp dDY1MDVfbGlua19yZXNldF9zdGVwX3RyYWluKGl0NjUwNSk7DQorDQorCWlmIChkYXRhKQ0KKwkJ c2NoZWR1bGVfd29yaygmaXQ2NTA1LT5saW5rX3dvcmtzKTsNCit9DQorDQorc3RhdGljIHZvaWQg aXQ2NTA1X2lycV9oZGNwX2RvbmUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0 IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgImhkY3AgZG9uZSBpbnRlcnJ1cHQiKTsNCisJaXQ2NTA1LT5oZGNwX3N0YXR1 cyA9IEhEQ1BfQVVUSF9ET05FOw0KKwlpdDY1MDVfc2hvd19oZGNwX2luZm8oaXQ2NTA1KTsNCit9 DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2lycV9oZGNwX2ZhaWwoc3RydWN0IGl0NjUwNSAqaXQ2 NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQor DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3AgZmFpbCBpbnRlcnJ1cHQiKTsNCisJ aXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVUSF9JRExFOw0KKwlpdDY1MDVfc2hvd19oZGNw X2luZm8oaXQ2NTA1KTsNCisJaXQ2NTA1X3N0YXJ0X2hkY3AoaXQ2NTA1KTsNCit9DQorDQorc3Rh dGljIHZvaWQgaXQ2NTA1X2lycV9hdXhfY21kX2ZhaWwoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0K K3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkFVWCBQQyBSZXF1ZXN0IEZhaWwgSW50ZXJydXB0Iik7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9pcnFfaGRjcF9rc3ZfY2hlY2soc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50 LT5kZXY7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkhEQ1AgZXZlbnQgSW50ZXJy dXB0Iik7DQorCXNjaGVkdWxlX3dvcmsoJml0NjUwNS0+aGRjcF93YWl0X2tzdl9saXN0KTsNCit9 DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2lycV9hdWRpb19maWZvX2Vycm9yKHN0cnVjdCBpdDY1 MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJhdWRpbyBmaWZvIGVycm9yIElu dGVycnVwdCIpOw0KKw0KKwlpZiAoaXQ2NTA1X2F1ZGlvX2lucHV0KGl0NjUwNSkpDQorCQlpdDY1 MDVfZW5hYmxlX2F1ZGlvKGl0NjUwNSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9pcnFf bGlua190cmFpbl9mYWlsKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJsaW5rIHRyYWluaW5nIGZhaWwgaW50ZXJydXB0Iik7DQorCXNjaGVkdWxlX3dvcmso Jml0NjUwNS0+bGlua193b3Jrcyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9pcnFfdmlk ZW9fZmlmb19lcnJvcihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAidmlkZW8gZmlmbyBvdmVyZmxvdyBpbnRlcnJ1cHQiKTsNCisJaXQ2NTA1LT5hdXRvX3Ry YWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCisJZmx1c2hfd29yaygmaXQ2NTA1LT5saW5r X3dvcmtzKTsNCisJaXQ2NTA1X3N0b3BfaGRjcChpdDY1MDUpOw0KKwlpdDY1MDVfdmlkZW9fcmVz ZXQoaXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2lycV9pb19sYXRjaF9maWZv X292ZXJmbG93KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJJTyBsYXRjaCBmaWZvIG92ZXJmbG93IGludGVycnVwdCIpOw0KKwlpdDY1MDUtPmF1dG9fdHJh aW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZOw0KKwlmbHVzaF93b3JrKCZpdDY1MDUtPmxpbmtf d29ya3MpOw0KKwlpdDY1MDVfc3RvcF9oZGNwKGl0NjUwNSk7DQorCWl0NjUwNV92aWRlb19yZXNl dChpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVfdGVzdF9iaXQodW5zaWduZWQg aW50IGJpdCwgY29uc3QgdW5zaWduZWQgaW50ICphZGRyKQ0KK3sNCisJcmV0dXJuIDEgJiAoYWRk cltiaXQgLyBCSVRTX1BFUl9CWVRFXSA+PiAoYml0ICUgQklUU19QRVJfQllURSkpOw0KK30NCisN CitzdGF0aWMgaXJxcmV0dXJuX3QgaXQ2NTA1X2ludF90aHJlYWRlZF9oYW5kbGVyKGludCB1bnVz ZWQsIHZvaWQgKmRhdGEpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkYXRhOw0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJc3RhdGljIGNvbnN0 IHN0cnVjdCB7DQorCQlpbnQgYml0Ow0KKwkJdm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSk7DQorCX0gaXJxX3ZlY1tdID0gew0KKwkJeyBCSVRfSU5UX0hQRCwgaXQ2NTA1X2ly cV9ocGQgfSwNCisJCXsgQklUX0lOVF9IUERfSVJRLCBpdDY1MDVfaXJxX2hwZF9pcnEgfSwNCisJ CXsgQklUX0lOVF9TQ0RULCBpdDY1MDVfaXJxX3NjZHQgfSwNCisJCXsgQklUX0lOVF9IRENQX0ZB SUwsIGl0NjUwNV9pcnFfaGRjcF9mYWlsIH0sDQorCQl7IEJJVF9JTlRfSERDUF9ET05FLCBpdDY1 MDVfaXJxX2hkY3BfZG9uZSB9LA0KKwkJeyBCSVRfSU5UX0FVWF9DTURfRkFJTCwgaXQ2NTA1X2ly cV9hdXhfY21kX2ZhaWwgfSwNCisJCXsgQklUX0lOVF9IRENQX0tTVl9DSEVDSywgaXQ2NTA1X2ly cV9oZGNwX2tzdl9jaGVjayB9LA0KKwkJeyBCSVRfSU5UX0FVRElPX0ZJRk9fRVJST1IsIGl0NjUw NV9pcnFfYXVkaW9fZmlmb19lcnJvciB9LA0KKwkJeyBCSVRfSU5UX0xJTktfVFJBSU5fRkFJTCwg aXQ2NTA1X2lycV9saW5rX3RyYWluX2ZhaWwgfSwNCisJCXsgQklUX0lOVF9WSURfRklGT19FUlJP UiwgaXQ2NTA1X2lycV92aWRlb19maWZvX2Vycm9yIH0sDQorCQl7IEJJVF9JTlRfSU9fRklGT19P VkVSRkxPVywgaXQ2NTA1X2lycV9pb19sYXRjaF9maWZvX292ZXJmbG93IH0sDQorCX07DQorCWlu dCBpbnRfc3RhdHVzWzNdLCBpOw0KKw0KKwltc2xlZXAoMTAwKTsNCisJbXV0ZXhfbG9jaygmaXQ2 NTA1LT5leHRjb25fbG9jayk7DQorDQorCWlmIChpdDY1MDUtPmVuYWJsZV9kcnZfaG9sZCB8fCAh aXQ2NTA1LT5wb3dlcmVkKQ0KKwkJZ290byB1bmxvY2s7DQorDQorCWludF9zdGF0dXNbMF0gPSBp dDY1MDVfcmVhZChpdDY1MDUsIElOVF9TVEFUVVNfMDEpOw0KKwlpbnRfc3RhdHVzWzFdID0gaXQ2 NTA1X3JlYWQoaXQ2NTA1LCBJTlRfU1RBVFVTXzAyKTsNCisJaW50X3N0YXR1c1syXSA9IGl0NjUw NV9yZWFkKGl0NjUwNSwgSU5UX1NUQVRVU18wMyk7DQorDQorCWl0NjUwNV93cml0ZShpdDY1MDUs IElOVF9TVEFUVVNfMDEsIGludF9zdGF0dXNbMF0pOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJ TlRfU1RBVFVTXzAyLCBpbnRfc3RhdHVzWzFdKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5U X1NUQVRVU18wMywgaW50X3N0YXR1c1syXSk7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgInJlZzA2ID0gMHglMDJ4IiwgaW50X3N0YXR1c1swXSk7DQorCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgInJlZzA3ID0gMHglMDJ4IiwgaW50X3N0YXR1c1sxXSk7DQorCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgInJlZzA4ID0gMHglMDJ4IiwgaW50X3N0YXR1c1syXSk7DQorCWl0NjUw NV9kZWJ1Z19wcmludChpdDY1MDUsIFJFR19TWVNURU1fU1RTLCAiIik7DQorDQorCWlmIChpdDY1 MDVfdGVzdF9iaXQoaXJxX3ZlY1swXS5iaXQsICh1bnNpZ25lZCBpbnQgKilpbnRfc3RhdHVzKSkN CisJCWlycV92ZWNbMF0uaGFuZGxlcihpdDY1MDUpOw0KKw0KKwlpZiAoIWl0NjUwNS0+aHBkX3N0 YXRlKQ0KKwkJZ290byB1bmxvY2s7DQorDQorCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKGly cV92ZWMpOyBpKyspIHsNCisJCWlmIChpdDY1MDVfdGVzdF9iaXQoaXJxX3ZlY1tpXS5iaXQsICh1 bnNpZ25lZCBpbnQgKilpbnRfc3RhdHVzKSkNCisJCQlpcnFfdmVjW2ldLmhhbmRsZXIoaXQ2NTA1 KTsNCisJfQ0KKw0KK3VubG9jazoNCisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPmV4dGNvbl9sb2Nr KTsNCisNCisJcmV0dXJuIElSUV9IQU5ETEVEOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9w b3dlcm9uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlzdHJ1Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEgKnBk YXRhID0gJml0NjUwNS0+cGRhdGE7DQorCWludCBlcnI7DQorDQorCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgIml0NjUwNSBzdGFydCBwb3dlcmVkIG9uIik7DQorDQorCWlmIChpdDY1MDUtPnBv d2VyZWQpIHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNSBhbHJlYWR5IHBv d2VyZWQgb24iKTsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCWlmIChwZGF0YS0+cHdyMTgpIHsN CisJCWVyciA9IHJlZ3VsYXRvcl9lbmFibGUocGRhdGEtPnB3cjE4KTsNCisJCWlmIChlcnIpIHsN CisJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIFZERDE4OiAl ZCIsDQorCQkJCQkgICAgIGVycik7DQorCQkJcmV0dXJuIGVycjsNCisJCX0NCisJfQ0KKw0KKwlp ZiAocGRhdGEtPm92ZGQpIHsNCisJCS8qIHRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBJVkREIGFuZCBP VkREIGF0IGxlYXN0IGJlIDFtcyAqLw0KKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KKwkJ ZXJyID0gcmVndWxhdG9yX2VuYWJsZShwZGF0YS0+b3ZkZCk7DQorCQlpZiAoZXJyKSB7DQorCQkJ cmVndWxhdG9yX2Rpc2FibGUocGRhdGEtPnB3cjE4KTsNCisJCQlyZXR1cm4gZXJyOw0KKwkJfQ0K Kwl9DQorCS8qIHRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBPVkREIGFuZCBTWVNSU1ROIGF0IGxlYXN0 IGJlIDEwbXMgKi8NCisJaWYgKHBkYXRhLT5ncGlvZF9yZXNldCkgew0KKwkJdXNsZWVwX3Jhbmdl KDEwMDAwLCAyMDAwMCk7DQorCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9k X3Jlc2V0LCAwKTsNCisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsNCisJCWdwaW9kX3NldF92 YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDEpOw0KKwkJdXNsZWVwX3JhbmdlKDEw MDAwLCAyMDAwMCk7DQorCX0NCisNCisJaXQ2NTA1X3Jlc2V0X2xvZ2ljKGl0NjUwNSk7DQorCWl0 NjUwNV9pbnRfbWFza19lbmFibGUoaXQ2NTA1KTsNCisJaXQ2NTA1X2luaXQoaXQ2NTA1KTsNCisJ aXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7DQorDQorCWl0NjUwNS0+cG93ZXJlZCA9IHRydWU7DQor DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9wb3dlcm9mZihzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGll bnQtPmRldjsNCisJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZpdDY1MDUt PnBkYXRhOw0KKwlpbnQgZXJyOw0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJpdDY1 MDUgc3RhcnQgcG93ZXIgb2ZmIik7DQorDQorCWlmICghaXQ2NTA1LT5wb3dlcmVkKSB7DQorCQlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwb3dlciBoYWQgYmVlbiBhbHJlYWR5IG9mZiIpOw0K KwkJcmV0dXJuIDA7DQorCX0NCisNCisJaWYgKHBkYXRhLT5ncGlvZF9yZXNldCkNCisJCWdwaW9k X3NldF92YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDApOw0KKw0KKwlpZiAocGRh dGEtPnB3cjE4KSB7DQorCQllcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwZGF0YS0+cHdyMTgpOw0K KwkJaWYgKGVycikNCisJCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWlmIChwZGF0YS0+b3ZkZCkg ew0KKwkJZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocGRhdGEtPm92ZGQpOw0KKwkJaWYgKGVycikN CisJCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWl0NjUwNS0+cG93ZXJlZCA9IGZhbHNlOw0KKwlp dDY1MDUtPnNpbmtfY291bnQgPSAwOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGVu dW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgaXQ2NTA1X2RldGVjdChzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJ ZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nv bm5lY3RlZDsNCisJaW50IGRwX3NpbmtfY291bnQ7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIml0NjUwNS0+c2lua19jb3VudDolZCBwb3dlcmVkOiVkIiwNCisJCQkgICAgIGl0NjUw NS0+c2lua19jb3VudCwgaXQ2NTA1LT5wb3dlcmVkKTsNCisNCisJbXV0ZXhfbG9jaygmaXQ2NTA1 LT5tb2RlX2xvY2spOw0KKw0KKwlpZiAoIWl0NjUwNS0+cG93ZXJlZCkNCisJCWdvdG8gdW5sb2Nr Ow0KKw0KKwlpZiAoaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQpIHsNCisJCXN0YXR1cyA9IGl0NjUw NV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkgPw0KKwkJCQkJY29ubmVjdG9yX3N0YXR1c19j b25uZWN0ZWQgOg0KKwkJCQkJY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7DQorCQlnb3Rv IHVubG9jazsNCisJfQ0KKw0KKwlpZiAoaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1 KSkgew0KKwkJaXQ2NTA1X2F1eF9vbihpdDY1MDUpOw0KKwkJaXQ2NTA1X2RybV9kcF9saW5rX3By b2JlKCZpdDY1MDUtPmF1eCwgJml0NjUwNS0+bGluayk7DQorCQlpdDY1MDVfZHJtX2RwX2xpbmtf cG93ZXJfdXAoJml0NjUwNS0+YXV4LCAmaXQ2NTA1LT5saW5rKTsNCisJCWl0NjUwNS0+YXV0b190 cmFpbl9yZXRyeSA9IEFVVE9fVFJBSU5fUkVUUlk7DQorDQorCQlpZiAoaXQ2NTA1LT5kcGNkWzBd ID09IDApIHsNCisJCQlpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9EUENEX1JFViwgaXQ2NTA1 LT5kcGNkLA0KKwkJCQkJQVJSQVlfU0laRShpdDY1MDUtPmRwY2QpKTsNCisJCQlpdDY1MDVfdmFy aWFibGVfY29uZmlnKGl0NjUwNSk7DQorCQkJaXQ2NTA1X3BhcnNlX2xpbmtfY2FwYWJpbGl0aWVz KGl0NjUwNSk7DQorCQl9DQorDQorCQlkcF9zaW5rX2NvdW50ID0gaXQ2NTA1X2RwY2RfcmVhZChp dDY1MDUsIERQX1NJTktfQ09VTlQpOw0KKwkJaXQ2NTA1LT5zaW5rX2NvdW50ID0gRFBfR0VUX1NJ TktfQ09VTlQoZHBfc2lua19jb3VudCk7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJp dDY1MDUtPnNpbmtfY291bnQ6JWQgYnJhbmNoOiVkIiwNCisJCQkJICAgICBpdDY1MDUtPnNpbmtf Y291bnQsIGl0NjUwNS0+YnJhbmNoX2RldmljZSk7DQorDQorCQlpZiAoaXQ2NTA1LT5icmFuY2hf ZGV2aWNlKSB7DQorCQkJc3RhdHVzID0gKGl0NjUwNS0+c2lua19jb3VudCAhPSAwKSA/DQorCQkJ CSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6DQorCQkJCSBjb25uZWN0b3Jfc3RhdHVzX2Rp c2Nvbm5lY3RlZDsNCisJCX0gZWxzZSB7DQorCQkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19j b25uZWN0ZWQ7DQorCQl9DQorCX0gZWxzZSB7DQorCQlpdDY1MDUtPnNpbmtfY291bnQgPSAwOw0K KwkJbWVtc2V0KGl0NjUwNS0+ZHBjZCwgMCwgc2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOw0KKwl9DQor DQordW5sb2NrOg0KKwlpZiAoaXQ2NTA1LT5jb25uZWN0b3Jfc3RhdHVzICE9IHN0YXR1cykgew0K KwkJaXQ2NTA1LT5jb25uZWN0b3Jfc3RhdHVzID0gc3RhdHVzOw0KKwkJaXQ2NTA1X3BsdWdnZWRf c3RhdHVzX3RvX2NvZGVjKGl0NjUwNSk7DQorCX0NCisNCisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUt Pm1vZGVfbG9jayk7DQorDQorCXJldHVybiBzdGF0dXM7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2 NTA1X2V4dGNvbl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsDQorCQkJCSAg dW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2 NTA1ID0gY29udGFpbmVyX29mKHNlbGYsIHN0cnVjdCBpdDY1MDUsIGV2ZW50X25iKTsNCisNCisJ c2NoZWR1bGVfd29yaygmaXQ2NTA1LT5leHRjb25fd3EpOw0KKwlyZXR1cm4gTk9USUZZX0RPTkU7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9leHRjb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2Yod29y aywgc3RydWN0IGl0NjUwNSwgZXh0Y29uX3dxKTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0 NjUwNS0+Y2xpZW50LT5kZXY7DQorCWludCBzdGF0ZSA9IGV4dGNvbl9nZXRfc3RhdGUoaXQ2NTA1 LT5leHRjb24sIEVYVENPTl9ESVNQX0RQKTsNCisJdW5zaWduZWQgaW50IHB3cm9mZnJldHJ5ID0g MDsNCisNCisJaWYgKGl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkKQ0KKwkJcmV0dXJuOw0KKw0KKwlt dXRleF9sb2NrKCZpdDY1MDUtPmV4dGNvbl9sb2NrKTsNCisNCisJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiRVhUQ09OX0RJU1BfRFAgPSAweCUwMngiLCBzdGF0ZSk7DQorCWlmIChzdGF0ZSA+ IDApIHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0YXJ0IHRvIHBvd2VyIG9uIik7 DQorCQltc2xlZXAoMTAwKTsNCisJCWl0NjUwNV9wb3dlcm9uKGl0NjUwNSk7DQorCX0gZWxzZSB7 DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCB0byBwb3dlciBvZmYiKTsNCisJ CXdoaWxlIChpdDY1MDVfcG93ZXJvZmYoaXQ2NTA1KSAmJiBwd3JvZmZyZXRyeSsrIDwgNSkgew0K KwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInBvd2VyIG9mZiBmYWlsICVkIHRpbWVzIiwN CisJCQkJCSAgICAgcHdyb2ZmcmV0cnkpOw0KKwkJfQ0KKw0KKwkJZHJtX2hlbHBlcl9ocGRfaXJx X2V2ZW50KGl0NjUwNS0+YnJpZGdlLmRldik7DQorCQltZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBz aXplb2YoaXQ2NTA1LT5kcGNkKSk7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwb3dl ciBvZmYgaXQ2NTA1IHN1Y2Nlc3MhIik7DQorCX0NCisNCisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUt PmV4dGNvbl9sb2NrKTsNCit9DQorDQorc3RhdGljIGludCBpdDY1MDVfdXNlX25vdGlmaWVyX21v ZHVsZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpbnQgcmV0Ow0KKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJaXQ2NTA1LT5ldmVudF9uYi5u b3RpZmllcl9jYWxsID0gaXQ2NTA1X2V4dGNvbl9ub3RpZmllcjsNCisJSU5JVF9XT1JLKCZpdDY1 MDUtPmV4dGNvbl93cSwgaXQ2NTA1X2V4dGNvbl93b3JrKTsNCisJcmV0ID0gZGV2bV9leHRjb25f cmVnaXN0ZXJfbm90aWZpZXIoJml0NjUwNS0+Y2xpZW50LT5kZXYsDQorCQkJCQkgICAgaXQ2NTA1 LT5leHRjb24sIEVYVENPTl9ESVNQX0RQLA0KKwkJCQkJICAgICZpdDY1MDUtPmV2ZW50X25iKTsN CisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgbm90aWZp ZXIgZm9yIERQIik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXNjaGVkdWxlX3dvcmsoJml0 NjUwNS0+ZXh0Y29uX3dxKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0 NjUwNV9yZW1vdmVfbm90aWZpZXJfbW9kdWxlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQor CWlmIChpdDY1MDUtPmV4dGNvbikgew0KKwkJZGV2bV9leHRjb25fdW5yZWdpc3Rlcl9ub3RpZmll cigmaXQ2NTA1LT5jbGllbnQtPmRldiwNCisJCQkJCQlpdDY1MDUtPmV4dGNvbiwJRVhUQ09OX0RJ U1BfRFAsDQorCQkJCQkJJml0NjUwNS0+ZXZlbnRfbmIpOw0KKw0KKwkJZmx1c2hfd29yaygmaXQ2 NTA1LT5leHRjb25fd3EpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2Vk IGl0NjUwNV9kZWxheWVkX2F1ZGlvKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0 cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXQ2NTA1LA0K KwkJCQkJICAgICBkZWxheWVkX2F1ZGlvLndvcmspOw0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZF UigmaXQ2NTA1LT5jbGllbnQtPmRldiwgInN0YXJ0Iik7DQorDQorCWlmICghaXQ2NTA1LT5wb3dl cmVkKQ0KKwkJcmV0dXJuOw0KKw0KKwlpZiAoIWl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkKQ0KKwkJ aXQ2NTA1X2VuYWJsZV9hdWRpbyhpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgaW50IF9fbWF5YmVf dW51c2VkIGl0NjUwNV9hdWRpb19zZXR1cF9od19wYXJhbXMoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 LA0KKwkJCQkJCSAgICAgICBzdHJ1Y3QgaGRtaV9jb2RlY19wYXJhbXMNCisJCQkJCQkgICAgICAg KnBhcmFtcykNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2 Ow0KKwlpbnQgaSA9IDA7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiVzICVkIEh6 LCAlZCBiaXQsICVkIGNoYW5uZWxzXG4iLCBfX2Z1bmNfXywNCisJCQkgICAgIHBhcmFtcy0+c2Ft cGxlX3JhdGUsIHBhcmFtcy0+c2FtcGxlX3dpZHRoLA0KKwkJCSAgICAgcGFyYW1zLT5jZWEuY2hh bm5lbHMpOw0KKw0KKwlpZiAoIWl0NjUwNS0+YnJpZGdlLmVuY29kZXIpDQorCQlyZXR1cm4gLUVO T0RFVjsNCisNCisJaWYgKHBhcmFtcy0+Y2VhLmNoYW5uZWxzIDw9IDEgfHwgcGFyYW1zLT5jZWEu Y2hhbm5lbHMgPiA4KSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJjaGFubmVsIG51 bWJlcjogJWQgbm90IHN1cHBvcnQiLA0KKwkJCQkgICAgIGl0NjUwNS0+YXVkaW8uY2hhbm5lbF9j b3VudCk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlpdDY1MDUtPmF1ZGlvLmNoYW5u ZWxfY291bnQgPSBwYXJhbXMtPmNlYS5jaGFubmVsczsNCisNCisJd2hpbGUgKGkgPCBBUlJBWV9T SVpFKGF1ZGlvX3NhbXBsZV9yYXRlX21hcCkgJiYNCisJICAgICAgIHBhcmFtcy0+c2FtcGxlX3Jh dGUgIT0NCisJCSAgICAgICBhdWRpb19zYW1wbGVfcmF0ZV9tYXBbaV0uc2FtcGxlX3JhdGVfdmFs dWUpIHsNCisJCWkrKzsNCisJfQ0KKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGF1ZGlvX3NhbXBsZV9y YXRlX21hcCkpIHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInNhbXBsZSByYXRlOiAl ZCBIeiBub3Qgc3VwcG9ydCIsDQorCQkJCSAgICAgcGFyYW1zLT5zYW1wbGVfcmF0ZSk7DQorCQly ZXR1cm4gLUVJTlZBTDsNCisJfQ0KKwlpdDY1MDUtPmF1ZGlvLnNhbXBsZV9yYXRlID0gYXVkaW9f c2FtcGxlX3JhdGVfbWFwW2ldLnJhdGU7DQorDQorCXN3aXRjaCAocGFyYW1zLT5zYW1wbGVfd2lk dGgpIHsNCisJY2FzZSAxNjoNCisJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPSBXT1JEX0xF TkdUSF8xNkJJVDsNCisJCWJyZWFrOw0KKwljYXNlIDE4Og0KKwkJaXQ2NTA1LT5hdWRpby53b3Jk X2xlbmd0aCA9IFdPUkRfTEVOR1RIXzE4QklUOw0KKwkJYnJlYWs7DQorCWNhc2UgMjA6DQorCQlp dDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoID0gV09SRF9MRU5HVEhfMjBCSVQ7DQorCQlicmVhazsN CisJY2FzZSAyNDoNCisJY2FzZSAzMjoNCisJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPSBX T1JEX0xFTkdUSF8yNEJJVDsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAid29yZGxlbmd0aDogJWQgYml0IG5vdCBzdXBwb3J0IiwNCisJCQkJICAg ICBwYXJhbXMtPnNhbXBsZV93aWR0aCk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwly ZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlv X3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCBp dDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKw0KKwlpZiAoaXQ2NTA1LT5w b3dlcmVkKQ0KKwkJaXQ2NTA1X2Rpc2FibGVfYXVkaW8oaXQ2NTA1KTsNCit9DQorDQorc3RhdGlj IGludCBfX21heWJlX3VudXNlZCBpdDY1MDVfYXVkaW9faG9va19wbHVnZ2VkX2NiKHN0cnVjdCBk ZXZpY2UgKmRldiwNCisJCQkJCQkgICAgICAgdm9pZCAqZGF0YSwNCisJCQkJCQkgICAgICAgaGRt aV9jb2RlY19wbHVnZ2VkX2NiIGZuLA0KKwkJCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpjb2Rl Y19kZXYpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkYXRhOw0KKw0KKwlpdDY1MDUt PnBsdWdnZWRfY2IgPSBmbjsNCisJaXQ2NTA1LT5jb2RlY19kZXYgPSBjb2RlY19kZXY7DQorCWl0 NjUwNV9wbHVnZ2VkX3N0YXR1c190b19jb2RlYyhpdDY1MDUpOw0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXQ2NTA1ICpicmlkZ2VfdG9faXQ2NTA1KHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UpDQorew0KKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwg c3RydWN0IGl0NjUwNSwgYnJpZGdlKTsNCit9DQorDQorc3RhdGljIGludCBpdDY1MDVfYnJpZGdl X2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KKwkJCQllbnVtIGRybV9icmlkZ2Vf YXR0YWNoX2ZsYWdzIGZsYWdzKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdl X3RvX2l0NjUwNShicmlkZ2UpOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGll bnQtPmRldjsNCisJaW50IHJldDsNCisNCisJaWYgKCEoZmxhZ3MgJiBEUk1fQlJJREdFX0FUVEFD SF9OT19DT05ORUNUT1IpKSB7DQorCQlEUk1fRVJST1IoIkRSTV9CUklER0VfQVRUQUNIX05PX0NP Tk5FQ1RPUiBtdXN0IGJlIHN1cHBsaWVkIik7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0K KwlpZiAoIWJyaWRnZS0+ZW5jb2Rlcikgew0KKwkJZGV2X2VycihkZXYsICJQYXJlbnQgZW5jb2Rl ciBvYmplY3Qgbm90IGZvdW5kIik7DQorCQlyZXR1cm4gLUVOT0RFVjsNCisJfQ0KKw0KKwlpZiAo aXQ2NTA1LT5leHRjb24pIHsNCisJCXJldCA9IGl0NjUwNV91c2Vfbm90aWZpZXJfbW9kdWxlKGl0 NjUwNSk7DQorCQlpZiAocmV0IDwgMCkgew0KKwkJCWRldl9lcnIoZGV2LCAidXNlIG5vdGlmaWVy IG1vZHVsZSBmYWlsZWQiKTsNCisJCQlyZXR1cm4gcmV0Ow0KKwkJfQ0KKwl9DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2RldGFjaChzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3Rv X2l0NjUwNShicmlkZ2UpOw0KKw0KKwlmbHVzaF93b3JrKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0K KwlpdDY1MDVfcmVtb3ZlX25vdGlmaWVyX21vZHVsZShpdDY1MDUpOw0KK30NCisNCitzdGF0aWMg ZW51bSBkcm1fbW9kZV9zdGF0dXMNCitpdDY1MDVfYnJpZGdlX21vZGVfdmFsaWQoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSwNCisJCQkgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmlu Zm8sDQorCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQ0KK3sNCisJc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0KKw0KKwlpZiAo bW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkNCisJCXJldHVybiBNT0RFX05P X0lOVEVSTEFDRTsNCisNCisJaWYgKG1vZGUtPmNsb2NrID4gRFBJX1BJWEVMX0NMS19NQVgpDQor CQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOw0KKw0KKwlpdDY1MDUtPnZpZGVvX2luZm8uY2xvY2sg PSBtb2RlLT5jbG9jazsNCisNCisJcmV0dXJuIE1PREVfT0s7DQorfQ0KKw0KK3N0YXRpYyB2b2lk IGl0NjUwNV9icmlkZ2VfYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0K KwkJCQkJc3RydWN0IGRybV9icmlkZ2Vfc3RhdGUgKm9sZF9zdGF0ZSkNCit7DQorCXN0cnVjdCBp dDY1MDUgKml0NjUwNSA9IGJyaWRnZV90b19pdDY1MDUoYnJpZGdlKTsNCisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSA9IG9sZF9zdGF0ZS0+YmFzZS5zdGF0ZTsNCisJc3RydWN0IGhkbWlfYXZpX2luZm9m cmFtZSBmcmFtZTsNCisJY29uc3Qgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOw0K Kwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsNCisJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcjsNCisJaW50IHJldDsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAic3RhcnQiKTsNCisNCisJY29ubmVjdG9yID0gZHJtX2F0b21pY19nZXRfbmV3X2Nvbm5l Y3Rvcl9mb3JfZW5jb2RlcihzdGF0ZSwNCisJCQkJCQkJICAgICBicmlkZ2UtPmVuY29kZXIpOw0K Kw0KKwljcnRjX3N0YXRlID0gZHJtX2JyaWRnZV9uZXdfY3J0Y19zdGF0ZShicmlkZ2UsIG9sZF9z dGF0ZSk7DQorCW1vZGUgPSAmY3J0Y19zdGF0ZS0+bW9kZTsNCisJcmV0ID0gZHJtX2hkbWlfYXZp X2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUsDQorCQkJCQkJICAgICAgIGNvbm5l Y3RvciwNCisJCQkJCQkgICAgICAgbW9kZSk7DQorCWlmIChyZXQpDQorCQlkZXZfZXJyKGRldiwg IkZhaWxlZCB0byBzZXR1cCBBVkkgaW5mb2ZyYW1lOiAlZCIsIHJldCk7DQorDQorCWl0NjUwNV91 cGRhdGVfdmlkZW9fcGFyYW1ldGVyKGl0NjUwNSwgbW9kZSk7DQorDQorCXJldCA9IGl0NjUwNV9z ZW5kX3ZpZGVvX2luZm9mcmFtZShpdDY1MDUsICZmcmFtZSk7DQorDQorCWlmIChyZXQpDQorCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzZW5kIEFWSSBpbmZvZnJhbWU6ICVkIiwgcmV0KTsNCisN CisJaXQ2NTA1X2ludF9tYXNrX2VuYWJsZShpdDY1MDUpOw0KKwlpdDY1MDVfdmlkZW9fcmVzZXQo aXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2JyaWRnZV9hdG9taWNfZGlzYWJs ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KKwkJCQkJIHN0cnVjdCBkcm1fYnJpZGdlX3N0 YXRlICpvbGRfc3RhdGUpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9f aXQ2NTA1KGJyaWRnZSk7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCIpOw0KKw0KKwlpZiAo aXQ2NTA1LT5wb3dlcmVkKQ0KKwkJaXQ2NTA1X3ZpZGVvX2Rpc2FibGUoaXQ2NTA1KTsNCit9DQor DQorc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMNCitpdDY1MDVfYnJpZGdlX2RldGVj dChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1 ID0gYnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0KKw0KKwlyZXR1cm4gaXQ2NTA1X2RldGVjdChp dDY1MDUpOw0KK30NCisNCitzdGF0aWMgc3RydWN0IGVkaWQgKml0NjUwNV9icmlkZ2VfZ2V0X2Vk aWQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwNCisJCQkJCSAgIHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9f aXQ2NTA1KGJyaWRnZSk7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Ow0KKwlzdHJ1Y3QgZWRpZCAqZWRpZDsNCisNCisJZWRpZCA9IGRybV9kb19nZXRfZWRpZChj b25uZWN0b3IsIGl0NjUwNV9nZXRfZWRpZF9ibG9jaywgaXQ2NTA1KTsNCisNCisJaWYgKCFlZGlk KSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJmYWlsZWQgdG8gZ2V0IGVkaWQhIik7 DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KKw0KKwlyZXR1cm4gZWRpZDsNCit9DQorDQorc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIGl0NjUwNV9icmlkZ2VfZnVuY3MgPSB7DQor CS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfYnJpZGdlX2R1cGxp Y2F0ZV9zdGF0ZSwNCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJf YnJpZGdlX2Rlc3Ryb3lfc3RhdGUsDQorCS5hdG9taWNfcmVzZXQgPSBkcm1fYXRvbWljX2hlbHBl cl9icmlkZ2VfcmVzZXQsDQorCS5hdHRhY2ggPSBpdDY1MDVfYnJpZGdlX2F0dGFjaCwNCisJLmRl dGFjaCA9IGl0NjUwNV9icmlkZ2VfZGV0YWNoLA0KKwkubW9kZV92YWxpZCA9IGl0NjUwNV9icmlk Z2VfbW9kZV92YWxpZCwNCisJLmF0b21pY19lbmFibGUgPSBpdDY1MDVfYnJpZGdlX2F0b21pY19l bmFibGUsDQorCS5hdG9taWNfZGlzYWJsZSA9IGl0NjUwNV9icmlkZ2VfYXRvbWljX2Rpc2FibGUs DQorCS5kZXRlY3QgPSBpdDY1MDVfYnJpZGdlX2RldGVjdCwNCisJLmdldF9lZGlkID0gaXQ2NTA1 X2JyaWRnZV9nZXRfZWRpZCwNCit9Ow0KKw0KK3N0YXRpYyBfX21heWJlX3VudXNlZCBpbnQgaXQ2 NTA1X2JyaWRnZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGl0NjUw NSAqaXQ2NTA1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorDQorCXJldHVybiBpdDY1MDVfcG93 ZXJvbihpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgX19tYXliZV91bnVzZWQgaW50IGl0NjUwNV9i cmlkZ2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCisNCisJcmV0dXJuIGl0NjUwNV9wb3dlcm9m ZihpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoaXQ2NTA1X2JyaWRn ZV9wbV9vcHMsIGl0NjUwNV9icmlkZ2Vfc3VzcGVuZCwNCisJCQkgaXQ2NTA1X2JyaWRnZV9yZXN1 bWUpOw0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2luaXRfcGRhdGEoc3RydWN0IGl0NjUwNSAqaXQ2 NTA1KQ0KK3sNCisJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZpdDY1MDUt PnBkYXRhOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisN CisJLyogMS4wViBkaWdpdGFsIGNvcmUgcG93ZXIgcmVndWxhdG9yICAqLw0KKwlwZGF0YS0+cHdy MTggPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAicHdyMTgiKTsNCisJaWYgKElTX0VSUihwZGF0 YS0+cHdyMTgpKSB7DQorCQlkZXZfZXJyKGRldiwgInB3cjE4IHJlZ3VsYXRvciBub3QgZm91bmQi KTsNCisJCXJldHVybiBQVFJfRVJSKHBkYXRhLT5wd3IxOCk7DQorCX0NCisNCisJcGRhdGEtPm92 ZGQgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAib3ZkZCIpOw0KKwlpZiAoSVNfRVJSKHBkYXRh LT5vdmRkKSkgew0KKwkJZGV2X2VycihkZXYsICJvdmRkIHJlZ3VsYXRvciBub3QgZm91bmQiKTsN CisJCXJldHVybiBQVFJfRVJSKHBkYXRhLT5vdmRkKTsNCisJfQ0KKw0KKwlwZGF0YS0+Z3Bpb2Rf cmVzZXQgPSBkZXZtX2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9EX09VVF9ISUdIKTsNCisJ aWYgKElTX0VSUihwZGF0YS0+Z3Bpb2RfcmVzZXQpKSB7DQorCQlkZXZfZXJyKGRldiwgImdwaW9k X3Jlc2V0IGdwaW8gbm90IGZvdW5kIik7DQorCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+Z3Bpb2Rf cmVzZXQpOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVf cGFyc2VfZHQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCXUzMiAqYWZlX3NldHRpbmcgPSAmaXQ2NTA1LT5h ZmVfc2V0dGluZzsNCisNCisJaXQ2NTA1LT5sYW5lX3N3YXBfZGlzYWJsZWQgPQ0KKwkJZGV2aWNl X3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsICJuby1sYW5lc3dhcCIpOw0KKw0KKwlpZiAoaXQ2NTA1 LT5sYW5lX3N3YXBfZGlzYWJsZWQpDQorCQlpdDY1MDUtPmxhbmVfc3dhcCA9IGZhbHNlOw0KKw0K KwlpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImFmZS1zZXR0aW5nIiwgYWZlX3Nl dHRpbmcpID09IDApIHsNCisJCWlmICgqYWZlX3NldHRpbmcgPj0gQVJSQVlfU0laRShhZmVfc2V0 dGluZ190YWJsZSkpIHsNCisJCQlkZXZfZXJyKGRldiwgImFmZSBzZXR0aW5nIGVycm9yLCB1c2Ug ZGVmYXVsdCIpOw0KKwkJCSphZmVfc2V0dGluZyA9IDA7DQorCQl9DQorCX0gZWxzZSB7DQorCQkq YWZlX3NldHRpbmcgPSAwOw0KKwl9DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInVzaW5n IGFmZV9zZXR0aW5nOiAlZCIsICphZmVfc2V0dGluZyk7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90 IHJlY2VpdmVfdGltaW5nX2RlYnVnZnNfc2hvdyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3Vz ZXIgKmJ1ZiwNCisJCQkJCSAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykNCit7DQorCXN0cnVj dCBpdDY1MDUgKml0NjUwNSA9IGZpbGUtPnByaXZhdGVfZGF0YTsNCisJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKnZpZCA9ICZpdDY1MDUtPnZpZGVvX2luZm87DQorCXU4IHJlYWRfYnVmW1JFQURf QlVGRkVSX1NJWkVdOw0KKwl1OCAqc3RyID0gcmVhZF9idWYsICplbmQgPSByZWFkX2J1ZiArIFBB R0VfU0laRTsNCisJc3NpemVfdCByZXQsIGNvdW50Ow0KKw0KKwlpZiAoIWl0NjUwNSkNCisJCXJl dHVybiAtRU5PREVWOw0KKw0KKwlpdDY1MDVfY2FsY192aWRlb19pbmZvKGl0NjUwNSk7DQorCXN0 ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICItLS12aWRlbyB0aW1pbmctLS1cbiIpOw0K KwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiUENMSzolZC4lMDNkTUh6XG4iLA0K KwkJCSB2aWQtPmNsb2NrIC8gMTAwMCwgdmlkLT5jbG9jayAlIDEwMDApOw0KKwlzdHIgKz0gc2Nu cHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiSFRvdGFsOiVkXG4iLCB2aWQtPmh0b3RhbCk7DQorCXN0 ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIQWN0aXZlOiVkXG4iLCB2aWQtPmhkaXNw bGF5KTsNCisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIkhGcm9udFBvcmNoOiVk XG4iLA0KKwkJCSB2aWQtPmhzeW5jX3N0YXJ0IC0gdmlkLT5oZGlzcGxheSk7DQorCXN0ciArPSBz Y25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIU3luY1dpZHRoOiVkXG4iLA0KKwkJCSB2aWQtPmhz eW5jX2VuZCAtIHZpZC0+aHN5bmNfc3RhcnQpOw0KKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5k IC0gc3RyLCAiSEJhY2tQb3JjaDolZFxuIiwNCisJCQkgdmlkLT5odG90YWwgLSB2aWQtPmhzeW5j X2VuZCk7DQorCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJWVG90YWw6JWRcbiIs IHZpZC0+dnRvdGFsKTsNCisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlZBY3Rp dmU6JWRcbiIsIHZpZC0+dmRpc3BsYXkpOw0KKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0g c3RyLCAiVkZyb250UG9yY2g6JWRcbiIsDQorCQkJIHZpZC0+dnN5bmNfc3RhcnQgLSB2aWQtPnZk aXNwbGF5KTsNCisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlZTeW5jV2lkdGg6 JWRcbiIsDQorCQkJIHZpZC0+dnN5bmNfZW5kIC0gdmlkLT52c3luY19zdGFydCk7DQorCXN0ciAr PSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJWQmFja1BvcmNoOiVkXG4iLA0KKwkJCSB2aWQt PnZ0b3RhbCAtIHZpZC0+dnN5bmNfZW5kKTsNCisNCisJY291bnQgPSBzdHIgLSByZWFkX2J1ZjsN CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBsZW4sIHBwb3MsIHJlYWRfYnVm LCBjb3VudCk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgZm9yY2VfcG93 ZXJfb25fb2ZmX2RlYnVnZnNfd3JpdGUodm9pZCAqZGF0YSwgdTY0IHZhbHVlKQ0KK3sNCisJc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGF0YTsNCisNCisJaWYgKCFpdDY1MDUpDQorCQlyZXR1cm4g LUVOT0RFVjsNCisNCisJaWYgKHZhbHVlKQ0KKwkJaXQ2NTA1X3Bvd2Vyb24oaXQ2NTA1KTsNCisJ ZWxzZQ0KKwkJaXQ2NTA1X3Bvd2Vyb2ZmKGl0NjUwNSk7DQorDQorCXJldHVybiAwOw0KK30NCisN CitzdGF0aWMgaW50IGVuYWJsZV9kcnZfaG9sZF9kZWJ1Z2ZzX3Nob3codm9pZCAqZGF0YSwgdTY0 ICpidWYpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkYXRhOw0KKw0KKwlpZiAoIWl0 NjUwNSkNCisJCXJldHVybiAtRU5PREVWOw0KKw0KKwkqYnVmID0gaXQ2NTA1LT5lbmFibGVfZHJ2 X2hvbGQ7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGVuYWJsZV9kcnZfaG9s ZF9kZWJ1Z2ZzX3dyaXRlKHZvaWQgKmRhdGEsIHU2NCBkcnZfaG9sZCkNCit7DQorCXN0cnVjdCBp dDY1MDUgKml0NjUwNSA9IGRhdGE7DQorDQorCWlmICghaXQ2NTA1KQ0KKwkJcmV0dXJuIC1FTk9E RVY7DQorDQorCWl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkID0gZHJ2X2hvbGQ7DQorDQorCWlmIChp dDY1MDUtPmVuYWJsZV9kcnZfaG9sZCkgew0KKwkJaXQ2NTA1X2ludF9tYXNrX2Rpc2FibGUoaXQ2 NTA1KTsNCisJfSBlbHNlIHsNCisJCWl0NjUwNV9jbGVhcl9pbnQoaXQ2NTA1KTsNCisJCWl0NjUw NV9pbnRfbWFza19lbmFibGUoaXQ2NTA1KTsNCisNCisJCWlmIChpdDY1MDUtPnBvd2VyZWQpIHsN CisJCQlpdDY1MDUtPmNvbm5lY3Rvcl9zdGF0dXMgPQ0KKwkJCQkJaXQ2NTA1X2dldF9zaW5rX2hw ZF9zdGF0dXMoaXQ2NTA1KSA/DQorCQkJCQljb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6DQor CQkJCQljb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsNCisJCX0gZWxzZSB7DQorCQkJaXQ2 NTA1LT5jb25uZWN0b3Jfc3RhdHVzID0NCisJCQkJCWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVj dGVkOw0KKwkJfQ0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGZpbGVfb3BlcmF0aW9ucyByZWNlaXZlX3RpbWluZ19mb3BzID0gew0KKwkub3duZXIgPSBU SElTX01PRFVMRSwNCisJLm9wZW4gPSBzaW1wbGVfb3BlbiwNCisJLnJlYWQgPSByZWNlaXZlX3Rp bWluZ19kZWJ1Z2ZzX3Nob3csDQorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywNCit9Ow0KKw0K K0RFRklORV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX2ZvcmNlX3Bvd2VyLCBOVUxMLA0KKwkJCSBm b3JjZV9wb3dlcl9vbl9vZmZfZGVidWdmc193cml0ZSwgIiVsbHVcbiIpOw0KKw0KK0RFRklORV9E RUJVR0ZTX0FUVFJJQlVURShmb3BzX2VuYWJsZV9kcnZfaG9sZCwgZW5hYmxlX2Rydl9ob2xkX2Rl YnVnZnNfc2hvdywNCisJCQkgZW5hYmxlX2Rydl9ob2xkX2RlYnVnZnNfd3JpdGUsICIlbGx1XG4i KTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGRlYnVnZnNfZW50cmllcyBkZWJ1Z2ZzX2VudHJ5 W10gPSB7DQorCXsgInJlY2VpdmVfdGltaW5nIiwgJnJlY2VpdmVfdGltaW5nX2ZvcHMgfSwNCisJ eyAiZm9yY2VfcG93ZXJfb25fb2ZmIiwgJmZvcHNfZm9yY2VfcG93ZXIgfSwNCisJeyAiZW5hYmxl X2Rydl9ob2xkIiwgJmZvcHNfZW5hYmxlX2Rydl9ob2xkIH0sDQorCXsgTlVMTCwgTlVMTCB9LA0K K307DQorDQorc3RhdGljIHZvaWQgZGVidWdmc19jcmVhdGVfZmlsZXMoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQ0KK3sNCisJaW50IGkgPSAwOw0KKw0KKwl3aGlsZSAoZGVidWdmc19lbnRyeVtpXS5u YW1lICYmIGRlYnVnZnNfZW50cnlbaV0uZm9wcykgew0KKwkJZGVidWdmc19jcmVhdGVfZmlsZShk ZWJ1Z2ZzX2VudHJ5W2ldLm5hbWUsIDA2NDQsDQorCQkJCSAgICBpdDY1MDUtPmRlYnVnZnMsIGl0 NjUwNSwNCisJCQkJICAgIGRlYnVnZnNfZW50cnlbaV0uZm9wcyk7DQorCQlpKys7DQorCX0NCit9 DQorDQorc3RhdGljIHZvaWQgZGVidWdmc19pbml0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7 DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlpdDY1 MDUtPmRlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoREVCVUdGU19ESVJfTkFNRSwgTlVMTCk7 DQorDQorCWlmIChJU19FUlIoaXQ2NTA1LT5kZWJ1Z2ZzKSkgew0KKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gY3JlYXRlIGRlYnVnZnMgcm9vdCIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCWRl YnVnZnNfY3JlYXRlX2ZpbGVzKGl0NjUwNSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9k ZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlkZWJ1Z2ZzX3JlbW92 ZV9yZWN1cnNpdmUoaXQ2NTA1LT5kZWJ1Z2ZzKTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1 X3NodXRkb3duKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoJmNsaWVudC0+ZGV2KTsNCisNCisJaWYgKGl0NjUw NS0+cG93ZXJlZCkNCisJCWl0NjUwNV9sYW5lX29mZihpdDY1MDUpOw0KK30NCisNCitzdGF0aWMg aW50IGl0NjUwNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwNCisJCQkgICAg Y29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2 NTA1Ow0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7DQorCXN0cnVjdCBleHRj b25fZGV2ICpleHRjb247DQorCWludCBlcnIsIGludHBfaXJxOw0KKw0KKwlpdDY1MDUgPSBkZXZt X2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKml0NjUwNSksIEdGUF9LRVJORUwpOw0KKwlp ZiAoIWl0NjUwNSkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwltdXRleF9pbml0KCZpdDY1MDUt PmV4dGNvbl9sb2NrKTsNCisJbXV0ZXhfaW5pdCgmaXQ2NTA1LT5tb2RlX2xvY2spOw0KKwltdXRl eF9pbml0KCZpdDY1MDUtPmF1eF9sb2NrKTsNCisNCisJaXQ2NTA1LT5icmlkZ2Uub2Zfbm9kZSA9 IGNsaWVudC0+ZGV2Lm9mX25vZGU7DQorCWl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1cyA9IGNvbm5l Y3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOw0KKwlpdDY1MDUtPmNsaWVudCA9IGNsaWVudDsNCisJ aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgaXQ2NTA1KTsNCisNCisJLyogZ2V0IGV4dGNvbiBk ZXZpY2UgZnJvbSBEVFMgKi8NCisJZXh0Y29uID0gZXh0Y29uX2dldF9lZGV2X2J5X3BoYW5kbGUo ZGV2LCAwKTsNCisJaWYgKFBUUl9FUlIoZXh0Y29uKSA9PSAtRVBST0JFX0RFRkVSKQ0KKwkJcmV0 dXJuIC1FUFJPQkVfREVGRVI7DQorCWlmIChJU19FUlIoZXh0Y29uKSkgew0KKwkJZGV2X2Vycihk ZXYsICJjYW4gbm90IGdldCBleHRjb24gZGV2aWNlISIpOw0KKwkJcmV0dXJuIFBUUl9FUlIoZXh0 Y29uKTsNCisJfQ0KKw0KKwlpdDY1MDUtPmV4dGNvbiA9IGV4dGNvbjsNCisNCisJaXQ2NTA1LT5y ZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZpdDY1MDVfcmVnbWFwX2NvbmZp Zyk7DQorCWlmIChJU19FUlIoaXQ2NTA1LT5yZWdtYXApKSB7DQorCQlkZXZfZXJyKGRldiwgInJl Z21hcCBpMmMgaW5pdCBmYWlsZWQiKTsNCisJCWVyciA9IFBUUl9FUlIoaXQ2NTA1LT5yZWdtYXAp Ow0KKwkJcmV0dXJuIGVycjsNCisJfQ0KKw0KKwllcnIgPSBpdDY1MDVfaW5pdF9wZGF0YShpdDY1 MDUpOw0KKwlpZiAoZXJyKSB7DQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXpl IHBkYXRhOiAlZCIsIGVycik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWl0NjUwNV9wYXJz ZV9kdChpdDY1MDUpOw0KKw0KKwlpbnRwX2lycSA9IGNsaWVudC0+aXJxOw0KKw0KKwlpZiAoIWlu dHBfaXJxKSB7DQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgSU5UUCBJUlEiKTsNCisJ CWVyciA9IC1FTk9ERVY7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWVyciA9IGRldm1fcmVx dWVzdF90aHJlYWRlZF9pcnEoJmNsaWVudC0+ZGV2LCBpbnRwX2lycSwgTlVMTCwNCisJCQkJCWl0 NjUwNV9pbnRfdGhyZWFkZWRfaGFuZGxlciwNCisJCQkJCUlSUUZfVFJJR0dFUl9MT1cgfCBJUlFG X09ORVNIT1QsDQorCQkJCQkiaXQ2NTA1LWludHAiLCBpdDY1MDUpOw0KKwlpZiAoZXJyKSB7DQor CQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElOVFAgdGhyZWFkZWQgSVJROiAlZCIs IGVycik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCS8qIFJlZ2lzdGVyIGF1eCBjaGFubmVs ICovDQorCWl0NjUwNS0+YXV4Lm5hbWUgPSAiRFAtQVVYIjsNCisJaXQ2NTA1LT5hdXguZGV2ID0g ZGV2Ow0KKwlpdDY1MDUtPmF1eC50cmFuc2ZlciA9IGl0NjUwNV9hdXhfdHJhbnNmZXI7DQorDQor CWVyciA9IGRybV9kcF9hdXhfcmVnaXN0ZXIoJml0NjUwNS0+YXV4KTsNCisJaWYgKGVyciA8IDAp IHsNCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGF1eDogJWQiLCBlcnIpOw0K KwkJcmV0dXJuIGVycjsNCisJfQ0KKw0KKwlJTklUX1dPUksoJml0NjUwNS0+bGlua193b3Jrcywg aXQ2NTA1X2xpbmtfdHJhaW5pbmdfd29yayk7DQorCUlOSVRfV09SSygmaXQ2NTA1LT5oZGNwX3dh aXRfa3N2X2xpc3QsIGl0NjUwNV9oZGNwX3dhaXRfa3N2X2xpc3QpOw0KKwlJTklUX0RFTEFZRURf V09SSygmaXQ2NTA1LT5oZGNwX3dvcmssIGl0NjUwNV9oZGNwX3dvcmspOw0KKwlpbml0X2NvbXBs ZXRpb24oJml0NjUwNS0+d2FpdF9lZGlkX2NvbXBsZXRlKTsNCisJbWVtc2V0KGl0NjUwNS0+ZHBj ZCwgMCwgc2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOw0KKwlpdDY1MDUtPnBvd2VyZWQgPSBmYWxzZTsN CisJaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQgPSBERUZBVUxUX0RSVl9IT0xEOw0KKw0KKwlpZiAo REVGQVVMVF9QV1JfT04pDQorCQlpdDY1MDVfcG93ZXJvbihpdDY1MDUpOw0KKw0KKwlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJpdDY1MDUgZGV2aWNlIG5hbWU6ICVzIiwgZGV2X25hbWUoZGV2 KSk7DQorCWRlYnVnZnNfaW5pdChpdDY1MDUpOw0KKw0KKwlpdDY1MDUtPmJyaWRnZS5mdW5jcyA9 ICZpdDY1MDVfYnJpZGdlX2Z1bmNzOw0KKwlpdDY1MDUtPmJyaWRnZS50eXBlID0gRFJNX01PREVf Q09OTkVDVE9SX0Rpc3BsYXlQb3J0Ow0KKwlpdDY1MDUtPmJyaWRnZS5vcHMgPSBEUk1fQlJJREdF X09QX0RFVEVDVCB8IERSTV9CUklER0VfT1BfRURJRCB8DQorCQkJICAgICBEUk1fQlJJREdFX09Q X0hQRDsNCisJZHJtX2JyaWRnZV9hZGQoJml0NjUwNS0+YnJpZGdlKTsNCisNCisJcmV0dXJuIDA7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQg KmNsaWVudCkNCit7DQorCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGkyY19nZXRfY2xpZW50ZGF0 YShjbGllbnQpOw0KKw0KKwlkcm1fYnJpZGdlX3JlbW92ZSgmaXQ2NTA1LT5icmlkZ2UpOw0KKwlk cm1fZHBfYXV4X3VucmVnaXN0ZXIoJml0NjUwNS0+YXV4KTsNCisJaXQ2NTA1X2RlYnVnZnNfcmVt b3ZlKGl0NjUwNSk7DQorCWl0NjUwNV9wb3dlcm9mZihpdDY1MDUpOw0KKw0KKwlyZXR1cm4gMDsN Cit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGl0NjUwNV9pZFtdID0g ew0KKwl7ICJpdDY1MDUiLCAwIH0sDQorCXsgfQ0KK307DQorDQorTU9EVUxFX0RFVklDRV9UQUJM RShpMmMsIGl0NjUwNV9pZCk7DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg aXQ2NTA1X29mX21hdGNoW10gPSB7DQorCXsgLmNvbXBhdGlibGUgPSAiaXRlLGl0NjUwNSIgfSwN CisJeyB9DQorfTsNCisNCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXQ2NTA1X2kyY19kcml2 ZXIgPSB7DQorCS5kcml2ZXIgPSB7DQorCQkubmFtZSA9ICJpdDY1MDUiLA0KKwkJLm9mX21hdGNo X3RhYmxlID0gaXQ2NTA1X29mX21hdGNoLA0KKwkJLnBtID0gJml0NjUwNV9icmlkZ2VfcG1fb3Bz LA0KKwl9LA0KKwkucHJvYmUgPSBpdDY1MDVfaTJjX3Byb2JlLA0KKwkucmVtb3ZlID0gaXQ2NTA1 X2kyY19yZW1vdmUsDQorCS5zaHV0ZG93biA9IGl0NjUwNV9zaHV0ZG93biwNCisJLmlkX3RhYmxl ID0gaXQ2NTA1X2lkLA0KK307DQorDQorbW9kdWxlX2kyY19kcml2ZXIoaXQ2NTA1X2kyY19kcml2 ZXIpOw0KKw0KK01PRFVMRV9BVVRIT1IoIkFsbGVuIENoZW4gPGFsbGVuLmNoZW5AaXRlLmNvbS50 dz4iKTsNCitNT0RVTEVfREVTQ1JJUFRJT04oIklUNjUwNSBEaXNwbGF5UG9ydCBUcmFuc21pdHRl ciBkcml2ZXIiKTsNCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQotLSANCjIuMjUuMQ0KDQpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1tZWRp YXRlayBtYWlsaW5nIGxpc3QKTGludXgtbWVkaWF0ZWtAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW1lZGlhdGVrCg== 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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C0FF0C433EF for ; Wed, 6 Oct 2021 04:00:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 750886120F for ; Wed, 6 Oct 2021 04:00:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229978AbhJFECS (ORCPT ); Wed, 6 Oct 2021 00:02:18 -0400 Received: from 60-251-196-230.hinet-ip.hinet.net ([60.251.196.230]:63001 "EHLO ironport.ite.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229554AbhJFECQ (ORCPT ); Wed, 6 Oct 2021 00:02:16 -0400 X-Greylist: delayed 429 seconds by postgrey-1.27 at vger.kernel.org; Wed, 06 Oct 2021 00:02:15 EDT IronPort-SDR: HosUzv1IP9inQQn0uFDeVB9e8joJq+0GbAGuYPImpDZyuRgctJk5o3a+SrEfO50asUPpTQoJwl HUwefnZeIxEg== Received: from unknown (HELO mse.ite.com.tw) ([192.168.35.30]) by ironport.ite.com.tw with ESMTP; 06 Oct 2021 11:53:14 +0800 Received: from CSBMAIL1.internal.ite.com.tw (csbmail1.internal.ite.com.tw [192.168.65.58]) by mse.ite.com.tw with ESMTP id 1963r9A2041190; Wed, 6 Oct 2021 11:53:09 +0800 (GMT-8) (envelope-from allen.chen@ite.com.tw) Received: from CSBMAIL1.internal.ite.com.tw (192.168.65.58) by CSBMAIL1.internal.ite.com.tw (192.168.65.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.14; Wed, 6 Oct 2021 11:53:09 +0800 Received: from CSBMAIL1.internal.ite.com.tw ([fe80::dd22:b444:859b:61c7]) by CSBMAIL1.internal.ite.com.tw ([fe80::dd22:b444:859b:61c7%18]) with mapi id 15.01.2176.014; Wed, 6 Oct 2021 11:53:09 +0800 From: CC: , , , , , , , , , , , , , , , , , , Subject: RE: [PATCH v8] drm/bridge: add it6505 driver Thread-Topic: [PATCH v8] drm/bridge: add it6505 driver Thread-Index: AQHXjds2dUIA16sisEKuygPI0MN7NavFrweg Date: Wed, 6 Oct 2021 03:53:09 +0000 Message-ID: <49cd8222b18749f282b5dff0b1f36daa@ite.com.tw> References: <20210810111124.247838-1-allen.chen@ite.com.tw> In-Reply-To: <20210810111124.247838-1-allen.chen@ite.com.tw> Accept-Language: en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.70.16] x-tm-snts-smtp: E79F6F577DFF53B08AF11B0DD2CBA0E5094BBBDABBA0A53335427E6F06A98F572002:8 Content-Type: text/plain; charset="big5" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MAIL: mse.ite.com.tw 1963r9A2041190 To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkNCg0KSXQgaGFzIGJlZW4gYWJvdXQgdHdvIG1vbnRocyBzaW5jZSBJIHBvc3RlZCB2OA0KQ29u c2lkZXIgdGhpcyBhIGdlbnRsZSBwaW5nLg0KDQpKdXN0IHdvbmRlcmluZyBpZiB0aGUgc2V0IG5l ZWRzIGFkZGl0aW9uYWwgd29yayBhbmQgSSB3aWxsIGZpeCBhbmQgdXBzdHJlYW0gYWdhaW4uDQoN Ci0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBBbGxlbiBDaGVuICizr6xmpnQpIA0K U2VudDogVHVlc2RheSwgQXVndXN0IDEwLCAyMDIxIDc6MTEgUE0NCkNjOiBBbGxlbiBDaGVuICiz r6xmpnQpOyBIc2luLVlpIFdhbmc7IEtlbm5ldGggSHVuZyAorHiuYa3bKTsgSGVybWVzIFd1ICin ZKjOp7spOyBKYXUtQ2hpaCBUc2VuZyAotL+sTLS8KTsgSHNpbi15aSBXYW5nOyBIZXJtZXMgV3Ug KKdkqM6nuyk7IEFuZHJ6ZWogSGFqZGE7IE5laWwgQXJtc3Ryb25nOyBSb2JlcnQgRm9zczsgTGF1 cmVudCBQaW5jaGFydDsgSm9uYXMgS2FybG1hbjsgSmVybmVqIFNrcmFiZWM7IERhdmlkIEFpcmxp ZTsgRGFuaWVsIFZldHRlcjsgTWF0dGhpYXMgQnJ1Z2dlcjsgb3BlbiBsaXN0OyBvcGVuIGxpc3Q6 RFJNIERSSVZFUlM7IG1vZGVyYXRlZCBsaXN0OkFSTS9NZWRpYXRlayBTb0Mgc3VwcG9ydDsgbW9k ZXJhdGVkIGxpc3Q6QVJNL01lZGlhdGVrIFNvQyBzdXBwb3J0DQpTdWJqZWN0OiBbUEFUQ0ggdjhd IGRybS9icmlkZ2U6IGFkZCBpdDY1MDUgZHJpdmVyDQoNClRoaXMgYWRkcyBzdXBwb3J0IGZvciB0 aGUgaVRFIElUNjUwNS4NClRoaXMgZGV2aWNlIGNhbiBjb252ZXJ0IERQSSBzaWduYWwgdG8gRFAg b3V0cHV0Lg0KDQpGcm9tOiBBbGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+DQpUZXN0 ZWQtYnk6IEhzaW4teWkgV2FuZyA8aHNpbnlpQGNocm9taXVtLm9yZz4NClNpZ25lZC1vZmYtYnk6 IEhlcm1lcyBXdSA8aGVybWVzLnd1QGl0ZS5jb20udHc+DQpTaWduZWQtb2ZmLWJ5OiBBbGxlbiBD aGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+DQoNCnY3LT52ODoNCmZpeGVkICJjaGVja3BhdGNo IC0tc3RyaWN0IiBlcnJvcg0KcmVtb3ZlIHVudXNlZCB2YXJpYWJsZSAqZWRpZA0KcmVtb3ZlIG1v ZGVfc2V0KCkgY2FsbGJhY2sNCkRvY3VtZW50aW5nIHRoZSBpbmRpdmlkdWFsIGJpdHMgb2YgdGhl IGludGVycnVwdCBtYXNrIHZhbHVlcw0KY2hhbmdlIGl0NjUwNV9kcGNkX3dyaXRlIHBhcmFtZXRl ciBmcm9tIHVuc2lnbmVkIGxvbmcgdG8gdTgNCg0KVGhpcyBwYXRjaCBkZXBlbmRzIG9uIGh0dHBz Oi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1tZWRpYXRlay9wYXRjaC8yMDIx MDcyMjA2MjI0Ni4yNTEyNjY2LTQtc2FtQHJhdm5ib3JnLm9yZy8NCi0tLQ0KIGRyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvS2NvbmZpZyAgICAgIHwgICAgOCArDQogZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9NYWtlZmlsZSAgICAgfCAgICAxICsNCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1 MDUuYyB8IDMzMzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogMyBmaWxlcyBjaGFuZ2Vk LCAzMzQyIGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9pdGUtaXQ2NTA1LmMNCg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZw0KaW5kZXggNDMxYjZl MTJhODFmZS4uZTFhZmUxNzEwNzVmNSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvS2NvbmZpZw0KKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnDQpAQCAtNzQs NiArNzQsMTQgQEAgY29uZmlnIERSTV9ESVNQTEFZX0NPTk5FQ1RPUg0KIAkgIG9uIEFSTS1iYXNl ZCBwbGF0Zm9ybXMuIFNheWluZyBZIGhlcmUgd2hlbiB0aGlzIGRyaXZlciBpcyBub3QgbmVlZGVk DQogCSAgd2lsbCBub3QgY2F1c2UgYW55IGlzc3VlLg0KIA0KK2NvbmZpZyBEUk1fSVRFX0lUNjUw NQ0KKyAgICAgICAgdHJpc3RhdGUgIklURSBJVDY1MDUgRGlzcGxheVBvcnQgYnJpZGdlIg0KKyAg ICAgICAgZGVwZW5kcyBvbiBPRg0KKyAgICAgICAgc2VsZWN0IERSTV9LTVNfSEVMUEVSDQorICAg ICAgICBzZWxlY3QgRVhUQ09ODQorICAgICAgICBoZWxwDQorICAgICAgICAgIElURSBJVDY1MDUg RGlzcGxheVBvcnQgYnJpZGdlIGNoaXAgZHJpdmVyLg0KKw0KIGNvbmZpZyBEUk1fTE9OVElVTV9M VDg5MTJCDQogCXRyaXN0YXRlICJMb250aXVtIExUODkxMkIgRFNJL0hETUkgYnJpZGdlIg0KIAlk ZXBlbmRzIG9uIE9GDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUNCmluZGV4IGYyYzczNjgzY2ZjYjcu LjQyNTg0NGMzMDQ5NTMgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2Vm aWxlDQorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlDQpAQCAtNCw2ICs0LDcg QEAgb2JqLSQoQ09ORklHX0RSTV9DSElQT05FX0lDTjYyMTEpICs9IGNoaXBvbmUtaWNuNjIxMS5v DQogb2JqLSQoQ09ORklHX0RSTV9DSFJPTlRFTF9DSDcwMzMpICs9IGNocm9udGVsLWNoNzAzMy5v DQogb2JqLSQoQ09ORklHX0RSTV9DUk9TX0VDX0FOWDc2ODgpICs9IGNyb3MtZWMtYW54NzY4OC5v DQogb2JqLSQoQ09ORklHX0RSTV9ESVNQTEFZX0NPTk5FQ1RPUikgKz0gZGlzcGxheS1jb25uZWN0 b3Iubw0KK29iai0kKENPTkZJR19EUk1fSVRFX0lUNjUwNSkgKz0gaXRlLWl0NjUwNS5vDQogb2Jq LSQoQ09ORklHX0RSTV9MT05USVVNX0xUODkxMkIpICs9IGxvbnRpdW0tbHQ4OTEyYi5vDQogb2Jq LSQoQ09ORklHX0RSTV9MT05USVVNX0xUOTYxMSkgKz0gbG9udGl1bS1sdDk2MTEubw0KIG9iai0k KENPTkZJR19EUk1fTE9OVElVTV9MVDk2MTFVWEMpICs9IGxvbnRpdW0tbHQ5NjExdXhjLm8NCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMDAwMDAwMC4uMjc1ODZjM2ZkNWYyOA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMNCkBAIC0wLDAgKzEsMzMzMyBAQA0KKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkNCisv Kg0KKyAqIENvcHlyaWdodCAoYykgMjAyMCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuDQorICovDQorI2luY2x1ZGUgPGxpbnV4L2JpdHMuaD4NCisjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4NCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxp bnV4L2Vyci5oPg0KKyNpbmNsdWRlIDxsaW51eC9leHRjb24uaD4NCisjaW5jbHVkZSA8bGludXgv ZnMuaD4NCisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPg0KKyNpbmNsdWRlIDxsaW51 eC9pMmMuaD4NCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQorI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgv cG1fcnVudGltZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCisjaW5jbHVkZSA8bGlu dXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+DQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L3dhaXQuaD4NCisNCisjaW5jbHVkZSA8Y3J5cHRvL2hhc2guaD4NCisNCisj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+DQorI2luY2x1ZGUgPGRybS9kcm1fYnJp ZGdlLmg+DQorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPg0KKyNpbmNsdWRlIDxkcm0vZHJtX2Ny dGNfaGVscGVyLmg+DQorI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+DQorI2luY2x1ZGUg PGRybS9kcm1fZWRpZC5oPg0KKyNpbmNsdWRlIDxkcm0vZHJtX2hkY3AuaD4NCisjaW5jbHVkZSA8 ZHJtL2RybV9wcmludC5oPg0KKyNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPg0KKw0K KyNpbmNsdWRlIDxzb3VuZC9oZG1pLWNvZGVjLmg+DQorDQorI2RlZmluZSBSRUdfSUNfVkVSIDB4 MDQNCisNCisjZGVmaW5lIFJFR19SRVNFVF9DVFJMIDB4MDUNCisjZGVmaW5lIFZJREVPX1JFU0VU IEJJVCgwKQ0KKyNkZWZpbmUgQVVESU9fUkVTRVQgQklUKDEpDQorI2RlZmluZSBBTExfTE9HSUNf UkVTRVQgQklUKDIpDQorI2RlZmluZSBBVVhfUkVTRVQgQklUKDMpDQorI2RlZmluZSBIRENQX1JF U0VUIEJJVCg0KQ0KKw0KKyNkZWZpbmUgSU5UX1NUQVRVU18wMSAweDA2DQorI2RlZmluZSBJTlRf TUFTS18wMSAweDA5DQorI2RlZmluZSBJTlRfSFBEX0NIQU5HRSAwDQorI2RlZmluZSBJTlRfUkVD RUlWRV9IUERfSVJRIDENCisjZGVmaW5lIElOVF9TQ0RUX0NIQU5HRSAyDQorI2RlZmluZSBJTlRf SERDUF9GQUlMIDMNCisjZGVmaW5lIElOVF9IRENQX0RPTkUgNA0KKyNkZWZpbmUgQklUX09GRlNF VCh4KSAoKCh4KSAtIElOVF9TVEFUVVNfMDEpICogQklUU19QRVJfQllURSkNCisjZGVmaW5lIEJJ VF9JTlRfSFBEIElOVF9IUERfQ0hBTkdFDQorI2RlZmluZSBCSVRfSU5UX0hQRF9JUlEgSU5UX1JF Q0VJVkVfSFBEX0lSUQ0KKyNkZWZpbmUgQklUX0lOVF9TQ0RUIElOVF9TQ0RUX0NIQU5HRQ0KKyNk ZWZpbmUgQklUX0lOVF9IRENQX0ZBSUwgSU5UX0hEQ1BfRkFJTA0KKyNkZWZpbmUgQklUX0lOVF9I RENQX0RPTkUgSU5UX0hEQ1BfRE9ORQ0KKw0KKyNkZWZpbmUgSU5UX1NUQVRVU18wMiAweDA3DQor I2RlZmluZSBJTlRfTUFTS18wMiAweDBBDQorI2RlZmluZSBJTlRfQVVYX0NNRF9GQUlMIDANCisj ZGVmaW5lIElOVF9IRENQX0tTVl9DSEVDSyAxDQorI2RlZmluZSBJTlRfQVVESU9fRklGT19FUlJP UiAyDQorI2RlZmluZSBCSVRfSU5UX0FVWF9DTURfRkFJTCAoQklUX09GRlNFVCgweDA3KSArIElO VF9BVVhfQ01EX0ZBSUwpDQorI2RlZmluZSBCSVRfSU5UX0hEQ1BfS1NWX0NIRUNLIChCSVRfT0ZG U0VUKDB4MDcpICsgSU5UX0hEQ1BfS1NWX0NIRUNLKQ0KKyNkZWZpbmUgQklUX0lOVF9BVURJT19G SUZPX0VSUk9SIChCSVRfT0ZGU0VUKDB4MDcpICsgSU5UX0FVRElPX0ZJRk9fRVJST1IpDQorDQor I2RlZmluZSBJTlRfU1RBVFVTXzAzIDB4MDgNCisjZGVmaW5lIElOVF9NQVNLXzAzIDB4MEINCisj ZGVmaW5lIElOVF9MSU5LX1RSQUlOX0ZBSUwgNA0KKyNkZWZpbmUgSU5UX1ZJRF9GSUZPX0VSUk9S IDUNCisjZGVmaW5lIElOVF9JT19MQVRDSF9GSUZPX09WRVJGTE9XIDcNCisjZGVmaW5lIEJJVF9J TlRfTElOS19UUkFJTl9GQUlMIChCSVRfT0ZGU0VUKDB4MDgpICsgSU5UX0xJTktfVFJBSU5fRkFJ TCkNCisjZGVmaW5lIEJJVF9JTlRfVklEX0ZJRk9fRVJST1IgKEJJVF9PRkZTRVQoMHgwOCkgKyBJ TlRfVklEX0ZJRk9fRVJST1IpDQorI2RlZmluZSBCSVRfSU5UX0lPX0ZJRk9fT1ZFUkZMT1cgKEJJ VF9PRkZTRVQoMHgwOCkgKyBJTlRfSU9fTEFUQ0hfRklGT19PVkVSRkxPVykNCisNCisjZGVmaW5l IFJFR19TWVNURU1fU1RTIDB4MEQNCisjZGVmaW5lIElOVF9TVFMgQklUKDApDQorI2RlZmluZSBI UERfU1RTIEJJVCgxKQ0KKyNkZWZpbmUgVklERU9fU1RCIEJJVCgyKQ0KKw0KKyNkZWZpbmUgUkVH X0xJTktfVFJBSU5fU1RTIDB4MEUNCisjZGVmaW5lIExJTktfU1RBVEVfQ1IgQklUKDIpDQorI2Rl ZmluZSBMSU5LX1NUQVRFX0VRIEJJVCgzKQ0KKyNkZWZpbmUgTElOS19TVEFURV9OT1JQIEJJVCg0 KQ0KKw0KKyNkZWZpbmUgUkVHX0JBTktfU0VMIDB4MEYNCisjZGVmaW5lIFJFR19DTEtfQ1RSTDAg MHgxMA0KKyNkZWZpbmUgTV9QQ0xLX0RFTEFZIDB4MDMNCisNCisjZGVmaW5lIFJFR19BVVhfT1BU IDB4MTENCisjZGVmaW5lIEFVWF9BVVRPX1JTVCBCSVQoMCkNCisjZGVmaW5lIEFVWF9GSVhfRlJF USBCSVQoMykNCisNCisjZGVmaW5lIFJFR19EQVRBX0NUUkwwIDB4MTINCisjZGVmaW5lIFZJREVP X0xBVENIX0VER0UgQklUKDQpDQorI2RlZmluZSBFTkFCTEVfUENMS19DT1VOVEVSIEJJVCg3KQ0K Kw0KKyNkZWZpbmUgUkVHX1BDTEtfQ09VTlRFUl9WQUxVRSAweDEzDQorDQorI2RlZmluZSBSRUdf NTAxX0ZJRk9fQ1RSTCAweDE1DQorI2RlZmluZSBSU1RfNTAxX0ZJRk8gQklUKDEpDQorDQorI2Rl ZmluZSBSRUdfVFJBSU5fQ1RSTDAgMHgxNg0KKyNkZWZpbmUgRk9SQ0VfTEJSIEJJVCgwKQ0KKyNk ZWZpbmUgTEFORV9DT1VOVF9NQVNLIDB4MDYNCisjZGVmaW5lIExBTkVfU1dBUCBCSVQoMykNCisj ZGVmaW5lIFNQUkVBRF9BTVBfNSBCSVQoNCkNCisjZGVmaW5lIEZPUkNFX0NSX0RPTkUgQklUKDUp DQorI2RlZmluZSBGT1JDRV9FUV9ET05FIEJJVCg2KQ0KKw0KKyNkZWZpbmUgUkVHX1RSQUlOX0NU UkwxIDB4MTcNCisjZGVmaW5lIEFVVE9fVFJBSU4gQklUKDApDQorI2RlZmluZSBNQU5VQUxfVFJB SU4gQklUKDEpDQorI2RlZmluZSBGT1JDRV9SRVRSQUlOIEJJVCgyKQ0KKw0KKyNkZWZpbmUgUkVH X0FVWF9DVFJMIDB4MjMNCisjZGVmaW5lIENMUl9FRElEX0ZJRk8gQklUKDApDQorI2RlZmluZSBB VVhfVVNFUl9NT0RFIEJJVCgxKQ0KKyNkZWZpbmUgQVVYX05PX1NFR01FTlRfV1IgQklUKDYpDQor I2RlZmluZSBBVVhfRU5fRklGT19SRUFEIEJJVCg3KQ0KKw0KKyNkZWZpbmUgUkVHX0FVWF9BRFJf MF83IDB4MjQNCisjZGVmaW5lIFJFR19BVVhfQURSXzhfMTUgMHgyNQ0KKyNkZWZpbmUgUkVHX0FV WF9BRFJfMTZfMTkgMHgyNg0KKyNkZWZpbmUgUkVHX0FVWF9PVVRfREFUQTAgMHgyNw0KKw0KKyNk ZWZpbmUgUkVHX0FVWF9DTURfUkVRIDB4MkINCisjZGVmaW5lIEFVWF9CVVNZIEJJVCg1KQ0KKw0K KyNkZWZpbmUgUkVHX0FVWF9EQVRBXzBfNyAweDJDDQorI2RlZmluZSBSRUdfQVVYX0RBVEFfOF8x NSAweDJEDQorI2RlZmluZSBSRUdfQVVYX0RBVEFfMTZfMjMgMHgyRQ0KKyNkZWZpbmUgUkVHX0FV WF9EQVRBXzI0XzMxIDB4MkYNCisNCisjZGVmaW5lIFJFR19BVVhfREFUQV9GSUZPIDB4MkYNCisN CisjZGVmaW5lIFJFR19BVVhfRVJST1JfU1RTIDB4OUYNCisjZGVmaW5lIE1fQVVYX1JFUV9GQUlM IDB4MDMNCisNCisjZGVmaW5lIFJFR19IRENQX0NUUkwxIDB4MzgNCisjZGVmaW5lIEhEQ1BfQ1Bf RU5BQkxFIEJJVCgwKQ0KKw0KKyNkZWZpbmUgUkVHX0hEQ1BfVFJJR0dFUiAweDM5DQorI2RlZmlu ZSBIRENQX1RSSUdHRVJfU1RBUlQgIEJJVCgwKQ0KKyNkZWZpbmUgSERDUF9UUklHR0VSX0NQSVJR ICBCSVQoMSkNCisjZGVmaW5lIEhEQ1BfVFJJR0dFUl9LU1ZfRE9ORSAgQklUKDQpDQorI2RlZmlu ZSBIRENQX1RSSUdHRVJfS1NWX0ZBSUwgQklUKDUpDQorDQorI2RlZmluZSBSRUdfSERDUF9DVFJM MiAweDNBDQorI2RlZmluZSBIRENQX0FOX1NFTCBCSVQoMCkNCisjZGVmaW5lIEhEQ1BfQU5fR0VO IEJJVCgxKQ0KKyNkZWZpbmUgSERDUF9IV19IUERJUlFfQUNUIEJJVCgyKQ0KKyNkZWZpbmUgSERD UF9FTl9NMF9SRUFEIEJJVCg1KQ0KKw0KKyNkZWZpbmUgUkVHX00wXzBfNyAweDRDDQorI2RlZmlu ZSBSRUdfQU5fMF83IDB4NEMNCisjZGVmaW5lIFJFR19TUF9DVFJMMCAweDU4DQorI2RlZmluZSBS RUdfSVBfQ1RSTDEgMHg1OQ0KKyNkZWZpbmUgUkVHX0lQX0NUUkwyIDB4NUENCisNCisjZGVmaW5l IFJFR19MSU5LX0RSViAweDVDDQorI2RlZmluZSBEUlZfSFMgQklUKDEpDQorDQorI2RlZmluZSBS RUdfRFJWX0xOX0RBVEFfU0VMIDB4NUQNCisNCisjZGVmaW5lIFJFR19BVVggMHg1RQ0KKw0KKyNk ZWZpbmUgUkVHX1ZJRF9CVVNfQ1RSTDAgMHg2MA0KKyNkZWZpbmUgSU5fRERSIEJJVCgyKQ0KKyNk ZWZpbmUgRERSX0NEICgweDAxIDw8IDYpDQorDQorI2RlZmluZSBSRUdfVklEX0JVU19DVFJMMSAw eDYxDQorI2RlZmluZSBUWF9GSUZPX1JFU0VUIEJJVCgxKQ0KKw0KKyNkZWZpbmUgUkVHX0lOUFVU X0NUUkwgMHhBMA0KKyNkZWZpbmUgSU5QVVRfSFNZTkNfUE9MIEJJVCgwKQ0KKyNkZWZpbmUgSU5Q VVRfVlNZTkNfUE9MIEJJVCgyKQ0KKyNkZWZpbmUgSU5QVVRfSU5URVJMQUNFRCBCSVQoNCkNCisN CisjZGVmaW5lIFJFR19JTlBVVF9IVE9UQUwgMHhBMQ0KKyNkZWZpbmUgUkVHX0lOUFVUX0hBQ1RJ VkVfU1RBUlQgMHhBMw0KKyNkZWZpbmUgUkVHX0lOUFVUX0hBQ1RJVkVfV0lEVEggMHhBNQ0KKyNk ZWZpbmUgUkVHX0lOUFVUX0hGUk9OVF9QT1JDSCAweEE3DQorI2RlZmluZSBSRUdfSU5QVVRfSFNZ TkNfV0lEVEggMHhBOQ0KKyNkZWZpbmUgUkVHX0lOUFVUX1ZUT1RBTCAweEFCDQorI2RlZmluZSBS RUdfSU5QVVRfVkFDVElWRV9TVEFSVCAweEFEDQorI2RlZmluZSBSRUdfSU5QVVRfVkFDVElWRV9X SURUSCAweEFGDQorI2RlZmluZSBSRUdfSU5QVVRfVkZST05UX1BPUkNIIDB4QjENCisjZGVmaW5l IFJFR19JTlBVVF9WU1lOQ19XSURUSCAweEIzDQorDQorI2RlZmluZSBSRUdfQVVESU9fU1JDX0NU UkwgMHhCOA0KKyNkZWZpbmUgTV9BVURJT19JMlNfRU4gMHgwRg0KKyNkZWZpbmUgRU5fSTJTMCBC SVQoMCkNCisjZGVmaW5lIEVOX0kyUzEgQklUKDEpDQorI2RlZmluZSBFTl9JMlMyIEJJVCgyKQ0K KyNkZWZpbmUgRU5fSTJTMyBCSVQoMykNCisjZGVmaW5lIEFVRElPX0ZJRk9fUkVTRVQgQklUKDcp DQorDQorI2RlZmluZSBSRUdfQVVESU9fRk1UIDB4QjkNCisjZGVmaW5lIFJFR19BVURJT19GSUZP X1NFTCAweEJBDQorDQorI2RlZmluZSBSRUdfQVVESU9fQ1RSTDAgMHhCQg0KKyNkZWZpbmUgQVVE SU9fRlVMTF9QS1QgQklUKDQpDQorI2RlZmluZSBBVURJT18xNkJfQk9VTkQgQklUKDUpDQorDQor I2RlZmluZSBSRUdfQVVESU9fQ1RSTDEgMHhCQw0KKyNkZWZpbmUgUkVHX0FVRElPX0lOUFVUX0ZS RVEgMHhCRQ0KKw0KKyNkZWZpbmUgUkVHX0lFQzk1OF9TVFMwIDB4QkYNCisjZGVmaW5lIFJFR19J RUM5NThfU1RTMSAweEMwDQorI2RlZmluZSBSRUdfSUVDOTU4X1NUUzIgMHhDMQ0KKyNkZWZpbmUg UkVHX0lFQzk1OF9TVFMzIDB4QzINCisjZGVmaW5lIFJFR19JRUM5NThfU1RTNCAweEMzDQorDQor I2RlZmluZSBSRUdfSFBEX0lSUV9USU1FIDB4QzkNCisjZGVmaW5lIFJFR19BVVhfREVCVUdfTU9E RSAweENBDQorI2RlZmluZSBSRUdfQVVYX09QVDIgMHhDQg0KKyNkZWZpbmUgUkVHX0hEQ1BfT1BU IDB4Q0UNCisjZGVmaW5lIFJFR19VU0VSX0RSVl9QUkUgMHhDRg0KKw0KKyNkZWZpbmUgUkVHX0RB VEFfTVVURV9DVFJMIDB4RDMNCisjZGVmaW5lIEVOQUJMRV9FTkhBTkNFRF9GUkFNRSBCSVQoMCkN CisjZGVmaW5lIEVOQUJMRV9BVVRPX1ZJREVPX0ZJRk9fUkVTRVQgQklUKDEpDQorI2RlZmluZSBF Tl9WSURfTVVURSBCSVQoNCkNCisjZGVmaW5lIEVOX0FVRF9NVVRFIEJJVCg1KQ0KKw0KKyNkZWZp bmUgUkVHX1RJTUVfU1RNUF9DVFJMIDB4RDQNCisjZGVmaW5lIEVOX0VOSEFOQ0VfVklEX1NUTVAg QklUKDApDQorI2RlZmluZSBFTl9FTkhBTkNFX0FVRF9TVE1QIEJJVCgyKQ0KKyNkZWZpbmUgTV9T VEFNUF9TVEVQIDB4MzANCisjZGVmaW5lIEVOX1NTQ19HQVQgQklUKDYpDQorDQorI2RlZmluZSBS RUdfSU5GT0ZSQU1FX0NUUkwgMHhFOA0KKyNkZWZpbmUgRU5fQVZJX1BLVCBCSVQoMCkNCisjZGVm aW5lIEVOX0FVRF9QS1QgQklUKDEpDQorI2RlZmluZSBFTl9NUEdfUEtUIEJJVCgyKQ0KKyNkZWZp bmUgRU5fR0VOX1BLVCBCSVQoMykNCisjZGVmaW5lIEVOX1ZJRF9USU1FX1NUTVAgQklUKDQpDQor I2RlZmluZSBFTl9BVURfVElNRV9TVE1QIEJJVCg1KQ0KKyNkZWZpbmUgRU5fVklEX0NUUkxfUEtU IChFTl9BVklfUEtUIHwgRU5fVklEX1RJTUVfU1RNUCkNCisjZGVmaW5lIEVOX0FVRF9DVFJMX1BL VCAoRU5fQVVEX1BLVCB8IEVOX0FVRF9USU1FX1NUTVApDQorDQorI2RlZmluZSBSRUdfQVVESU9f Tl8wXzcgMHhERQ0KKyNkZWZpbmUgUkVHX0FVRElPX05fOF8xNSAweERGDQorI2RlZmluZSBSRUdf QVVESU9fTl8xNl8yMyAweEUwDQorDQorI2RlZmluZSBSRUdfQVZJX0lORk9fREIxIDB4RTkNCisj ZGVmaW5lIFJFR19BVklfSU5GT19EQjIgMHhFQQ0KKyNkZWZpbmUgUkVHX0FWSV9JTkZPX0RCMyAw eEVCDQorI2RlZmluZSBSRUdfQVZJX0lORk9fREI0IDB4RUMNCisjZGVmaW5lIFJFR19BVklfSU5G T19EQjUgMHhFRA0KKyNkZWZpbmUgUkVHX0FWSV9JTkZPX1NVTSAweEY2DQorDQorI2RlZmluZSBS RUdfQVVEX0lORk9GUkFNX0RCMSAweEY3DQorI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCMiAw eEY4DQorI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCMyAweEY5DQorI2RlZmluZSBSRUdfQVVE X0lORk9GUkFNX0RCNCAweEZBDQorI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX1NVTSAweEZCDQor DQorLyogdGhlIGZvbGxvd2luZyBzaXggcmVnaXN0ZXJzIGFyZSBpbiBiYW5rMSAqLw0KKyNkZWZp bmUgUkVHX0RSVl8wX0RCXzgwMF9NViAweDdFDQorI2RlZmluZSBSRUdfUFJFXzBfREJfODAwX01W IDB4N0YNCisjZGVmaW5lIFJFR19QUkVfM1A1X0RCXzgwMF9NViAweDgxDQorI2RlZmluZSBSRUdf U1NDX0NUUkwwIDB4ODgNCisjZGVmaW5lIFJFR19TU0NfQ1RSTDEgMHg4OQ0KKyNkZWZpbmUgUkVH X1NTQ19DVFJMMiAweDhBDQorDQorI2RlZmluZSBSQlIgRFBfTElOS19CV18xXzYyDQorI2RlZmlu ZSBIQlIgRFBfTElOS19CV18yXzcNCisjZGVmaW5lIEhCUjIgRFBfTElOS19CV181XzQNCisjZGVm aW5lIEhCUjMgRFBfTElOS19CV184XzENCisNCisjZGVmaW5lIERQQ0RfVl8xXzEgMHgxMQ0KKyNk ZWZpbmUgTUlTQ19WRVJCIDB4RjANCisjZGVmaW5lIE1JU0NfVkVSQyAweDcwDQorI2RlZmluZSBJ MlNfSU5QVVRfRk9STUFUX1NUQU5EQVJEIDANCisjZGVmaW5lIEkyU19JTlBVVF9GT1JNQVRfMzJC SVQgMQ0KKyNkZWZpbmUgSTJTX0lOUFVUX0xFRlRfSlVTVElGSUVEIDANCisjZGVmaW5lIEkyU19J TlBVVF9SSUdIVF9KVVNUSUZJRUQgMQ0KKyNkZWZpbmUgSTJTX0RBVEFfMVRfREVMQVkgMA0KKyNk ZWZpbmUgSTJTX0RBVEFfTk9fREVMQVkgMQ0KKyNkZWZpbmUgSTJTX1dTX0xFRlRfQ0hBTk5FTCAw DQorI2RlZmluZSBJMlNfV1NfUklHSFRfQ0hBTk5FTCAxDQorI2RlZmluZSBJMlNfREFUQV9NU0Jf RklSU1QgMA0KKyNkZWZpbmUgSTJTX0RBVEFfTFNCX0ZJUlNUIDENCisjZGVmaW5lIFdPUkRfTEVO R1RIXzE2QklUIDANCisjZGVmaW5lIFdPUkRfTEVOR1RIXzE4QklUIDENCisjZGVmaW5lIFdPUkRf TEVOR1RIXzIwQklUIDINCisjZGVmaW5lIFdPUkRfTEVOR1RIXzI0QklUIDMNCisjZGVmaW5lIERF QlVHRlNfRElSX05BTUUgIml0NjUwNS1kZWJ1Z2ZzIg0KKyNkZWZpbmUgUkVBRF9CVUZGRVJfU0la RSAyMDANCisNCisvKiBWZW5kb3Igb3B0aW9uICovDQorI2RlZmluZSBIRENQX0RFU0lSRUQgMQ0K KyNkZWZpbmUgTUFYX0xBTkVfQ09VTlQgNA0KKyNkZWZpbmUgTUFYX0xJTktfUkFURSBIQlINCisj ZGVmaW5lIEFVVE9fVFJBSU5fUkVUUlkgMw0KKyNkZWZpbmUgTUFYX0hEQ1BfRE9XTl9TVFJFQU1f Q09VTlQgMTANCisjZGVmaW5lIE1BWF9DUl9MRVZFTCAweDAzDQorI2RlZmluZSBNQVhfRVFfTEVW RUwgMHgwMw0KKyNkZWZpbmUgQVVYX1dBSVRfVElNRU9VVF9NUyAxNQ0KKyNkZWZpbmUgQVVYX0ZJ Rk9fTUFYX1NJWkUgMzINCisjZGVmaW5lIFBJWEVMX0NMS19ERUxBWSAxDQorI2RlZmluZSBQSVhF TF9DTEtfSU5WRVJTRSAwDQorI2RlZmluZSBBREpVU1RfUEhBU0VfVEhSRVNIT0xEIDgwMDAwDQor I2RlZmluZSBEUElfUElYRUxfQ0xLX01BWCA5NTAwMA0KKyNkZWZpbmUgSERDUF9TSEExX0ZJRk9f TEVOIChNQVhfSERDUF9ET1dOX1NUUkVBTV9DT1VOVCAqIDUgKyAxMCkNCisjZGVmaW5lIERFRkFV TFRfUFdSX09OIDANCisjZGVmaW5lIERFRkFVTFRfRFJWX0hPTEQgMA0KKw0KKyNkZWZpbmUgQVVE SU9fU0VMRUNUIEkyUw0KKyNkZWZpbmUgQVVESU9fVFlQRSBMUENNDQorI2RlZmluZSBBVURJT19T QU1QTEVfUkFURSBTQU1QTEVfUkFURV80OEsNCisjZGVmaW5lIEFVRElPX0NIQU5ORUxfQ09VTlQg Mg0KKyNkZWZpbmUgSTJTX0lOUFVUX0ZPUk1BVCBJMlNfSU5QVVRfRk9STUFUXzMyQklUDQorI2Rl ZmluZSBJMlNfSlVTVElGSUVEIEkyU19JTlBVVF9MRUZUX0pVU1RJRklFRA0KKyNkZWZpbmUgSTJT X0RBVEFfREVMQVkgSTJTX0RBVEFfMVRfREVMQVkNCisjZGVmaW5lIEkyU19XU19DSEFOTkVMIEky U19XU19MRUZUX0NIQU5ORUwNCisjZGVmaW5lIEkyU19EQVRBX1NFUVVFTkNFIEkyU19EQVRBX01T Ql9GSVJTVA0KKyNkZWZpbmUgQVVESU9fV09SRF9MRU5HVEggV09SRF9MRU5HVEhfMjRCSVQNCisN CitlbnVtIGF1eF9jbWRfdHlwZSB7DQorCUNNRF9BVVhfTkFUSVZFX1JFQUQgPSAweDAsDQorCUNN RF9BVVhfTkFUSVZFX1dSSVRFID0gMHg1LA0KKwlDTURfQVVYX0kyQ19FRElEX1JFQUQgPSAweEIs DQorfTsNCisNCitlbnVtIGF1eF9jbWRfcmVwbHkgew0KKwlSRVBMWV9BQ0ssDQorCVJFUExZX05B Q0ssDQorCVJFUExZX0RFRkVSLA0KK307DQorDQorZW51bSBsaW5rX3RyYWluX3N0YXR1cyB7DQor CUxJTktfSURMRSwNCisJTElOS19CVVNZLA0KKwlMSU5LX09LLA0KK307DQorDQorZW51bSBoZGNw X3N0YXRlIHsNCisJSERDUF9BVVRIX0lETEUsDQorCUhEQ1BfQVVUSF9HT0lORywNCisJSERDUF9B VVRIX0RPTkUsDQorfTsNCisNCitzdHJ1Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEgew0KKwlzdHJ1 Y3QgcmVndWxhdG9yICpwd3IxODsNCisJc3RydWN0IHJlZ3VsYXRvciAqb3ZkZDsNCisJc3RydWN0 IGdwaW9fZGVzYyAqZ3Bpb2RfcmVzZXQ7DQorfTsNCisNCitlbnVtIGl0NjUwNV9hdWRpb19zZWxl Y3Qgew0KKwlJMlMgPSAwLA0KKwlTUERJRiwNCit9Ow0KKw0KK2VudW0gaXQ2NTA1X2F1ZGlvX3Nh bXBsZV9yYXRlIHsNCisJU0FNUExFX1JBVEVfMjRLID0gMHg2LA0KKwlTQU1QTEVfUkFURV8zMksg PSAweDMsDQorCVNBTVBMRV9SQVRFXzQ4SyA9IDB4MiwNCisJU0FNUExFX1JBVEVfOTZLID0gMHhB LA0KKwlTQU1QTEVfUkFURV8xOTJLID0gMHhFLA0KKwlTQU1QTEVfUkFURV80NF8xSyA9IDB4MCwN CisJU0FNUExFX1JBVEVfODhfMksgPSAweDgsDQorCVNBTVBMRV9SQVRFXzE3Nl80SyA9IDB4QywN Cit9Ow0KKw0KK2VudW0gaXQ2NTA1X2F1ZGlvX3R5cGUgew0KKwlMUENNID0gMCwNCisJTkxQQ00s DQorCURTUywNCit9Ow0KKw0KK3N0cnVjdCBpdDY1MDVfYXVkaW9fZGF0YSB7DQorCWVudW0gaXQ2 NTA1X2F1ZGlvX3NlbGVjdCBzZWxlY3Q7DQorCWVudW0gaXQ2NTA1X2F1ZGlvX3NhbXBsZV9yYXRl IHNhbXBsZV9yYXRlOw0KKwllbnVtIGl0NjUwNV9hdWRpb190eXBlIHR5cGU7DQorCXU4IHdvcmRf bGVuZ3RoOw0KKwl1OCBjaGFubmVsX2NvdW50Ow0KKwl1OCBpMnNfaW5wdXRfZm9ybWF0Ow0KKwl1 OCBpMnNfanVzdGlmaWVkOw0KKwl1OCBpMnNfZGF0YV9kZWxheTsNCisJdTggaTJzX3dzX2NoYW5u ZWw7DQorCXU4IGkyc19kYXRhX3NlcXVlbmNlOw0KK307DQorDQorc3RydWN0IGl0NjUwNV9hdWRp b19zYW1wbGVfcmF0ZV9tYXAgew0KKwllbnVtIGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZSByYXRl Ow0KKwlpbnQgc2FtcGxlX3JhdGVfdmFsdWU7DQorfTsNCisNCitzdHJ1Y3QgaXQ2NTA1X2RybV9k cF9saW5rIHsNCisJdW5zaWduZWQgY2hhciByZXZpc2lvbjsNCisJdW5zaWduZWQgaW50IHJhdGU7 DQorCXVuc2lnbmVkIGludCBudW1fbGFuZXM7DQorCXVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVz Ow0KK307DQorDQorc3RydWN0IGRlYnVnZnNfZW50cmllcyB7DQorCWNoYXIgKm5hbWU7DQorCWNv bnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7DQorfTsNCisNCitzdHJ1Y3QgaXQ2NTA1 IHsNCisJc3RydWN0IGRybV9kcF9hdXggYXV4Ow0KKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7 DQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7DQorCXN0cnVjdCBpdDY1MDVfZHJtX2RwX2xp bmsgbGluazsNCisJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhIHBkYXRhOw0KKwkvKg0KKwkg KiBNdXRleCBwcm90ZWN0cyBleHRjb24gYW5kIGludGVycnVwdCBmdW5jdGlvbnMgZnJvbSBpbnRl cmZlcmluZw0KKwkgKiBlYWNoIG90aGVyLg0KKwkgKi8NCisJc3RydWN0IG11dGV4IGV4dGNvbl9s b2NrOw0KKwlzdHJ1Y3QgbXV0ZXggbW9kZV9sb2NrOyAvKiB1c2VkIHRvIGJyaWRnZV9kZXRlY3Qg Ki8NCisJc3RydWN0IG11dGV4IGF1eF9sb2NrOyAvKiB1c2VkIHRvIGF1eCBkYXRhIHRyYW5zZmVy cyAqLw0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7DQorCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl IHNvdXJjZV9vdXRwdXRfbW9kZTsNCisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgdmlkZW9faW5m bzsNCisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGV2ZW50X25iOw0KKwlzdHJ1Y3QgZXh0Y29uX2Rl diAqZXh0Y29uOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXh0Y29uX3dxOw0KKwllbnVtIGRybV9j b25uZWN0b3Jfc3RhdHVzIGNvbm5lY3Rvcl9zdGF0dXM7DQorCWVudW0gbGlua190cmFpbl9zdGF0 dXMgbGlua19zdGF0ZTsNCisJc3RydWN0IHdvcmtfc3RydWN0IGxpbmtfd29ya3M7DQorCXU4IGRw Y2RbRFBfUkVDRUlWRVJfQ0FQX1NJWkVdOw0KKwl1OCBsYW5lX2NvdW50Ow0KKwl1OCBsaW5rX3Jh dGVfYndfY29kZTsNCisJdTggc2lua19jb3VudDsNCisJYm9vbCBzdGVwX3RyYWluOw0KKwlib29s IGJyYW5jaF9kZXZpY2U7DQorCWJvb2wgZW5hYmxlX3NzYzsNCisJYm9vbCBsYW5lX3N3YXBfZGlz YWJsZWQ7DQorCWJvb2wgbGFuZV9zd2FwOw0KKwlib29sIHBvd2VyZWQ7DQorCWJvb2wgaHBkX3N0 YXRlOw0KKwl1MzIgYWZlX3NldHRpbmc7DQorCWVudW0gaGRjcF9zdGF0ZSBoZGNwX3N0YXR1czsN CisJc3RydWN0IGRlbGF5ZWRfd29yayBoZGNwX3dvcms7DQorCXN0cnVjdCB3b3JrX3N0cnVjdCBo ZGNwX3dhaXRfa3N2X2xpc3Q7DQorCXN0cnVjdCBjb21wbGV0aW9uIHdhaXRfZWRpZF9jb21wbGV0 ZTsNCisJdTggYXV0b190cmFpbl9yZXRyeTsNCisJYm9vbCBoZGNwX2Rlc2lyZWQ7DQorCWJvb2wg aXNfcmVwZWF0ZXI7DQorCXU4IGhkY3BfZG93bl9zdHJlYW1fY291bnQ7DQorCXU4IGJrc3ZzW0RS TV9IRENQX0tTVl9MRU5dOw0KKwl1OCBzaGExX2lucHV0W0hEQ1BfU0hBMV9GSUZPX0xFTl07DQor CWJvb2wgZW5hYmxlX2VuaGFuY2VkX2ZyYW1lOw0KKwloZG1pX2NvZGVjX3BsdWdnZWRfY2IgcGx1 Z2dlZF9jYjsNCisJc3RydWN0IGRldmljZSAqY29kZWNfZGV2Ow0KKwlzdHJ1Y3QgZGVsYXllZF93 b3JrIGRlbGF5ZWRfYXVkaW87DQorCXN0cnVjdCBpdDY1MDVfYXVkaW9fZGF0YSBhdWRpbzsNCisJ c3RydWN0IGRlbnRyeSAqZGVidWdmczsNCisNCisJLyogaXQ2NTA1IGRyaXZlciBob2xkIG9wdGlv biAqLw0KKwlib29sIGVuYWJsZV9kcnZfaG9sZDsNCit9Ow0KKw0KK3N0cnVjdCBpdDY1MDVfc3Rl cF90cmFpbl9wYXJhIHsNCisJdTggdm9sdGFnZV9zd2luZ1tNQVhfTEFORV9DT1VOVF07DQorCXU4 IHByZV9lbXBoYXNpc1tNQVhfTEFORV9DT1VOVF07DQorfTsNCisNCisvKg0KKyAqIFZlbmRvciBv cHRpb24gYWZlIHNldHRpbmdzIGZvciBkaWZmZXJlbnQgcGxhdGZvcm1zDQorICogMDogd2l0aG91 dCBGUEMgY2FibGUNCisgKiAxOiB3aXRoIEZQQyBjYWJsZQ0KKyAqLw0KKw0KK3N0YXRpYyBjb25z dCB1OCBhZmVfc2V0dGluZ190YWJsZVtdWzNdID0gew0KKwl7MHg4MiwgMHgwMCwgMHg0NX0sDQor CXsweDkzLCAweDJBLCAweDg1fQ0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpdDY1MDVf YXVkaW9fc2FtcGxlX3JhdGVfbWFwIGF1ZGlvX3NhbXBsZV9yYXRlX21hcFtdID0gew0KKwl7U0FN UExFX1JBVEVfMjRLLCAyNDAwMH0sDQorCXtTQU1QTEVfUkFURV8zMkssIDMyMDAwfSwNCisJe1NB TVBMRV9SQVRFXzQ4SywgNDgwMDB9LA0KKwl7U0FNUExFX1JBVEVfOTZLLCA5NjAwMH0sDQorCXtT QU1QTEVfUkFURV8xOTJLLCAxOTIwMDB9LA0KKwl7U0FNUExFX1JBVEVfNDRfMUssIDQ0MTAwfSwN CisJe1NBTVBMRV9SQVRFXzg4XzJLLCA4ODIwMH0sDQorCXtTQU1QTEVfUkFURV8xNzZfNEssIDE3 NjQwMH0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSBpdDY1MDVf YnJpZGdlX3ZvbGF0aWxlX3Jhbmdlc1tdID0gew0KKwl7IC5yYW5nZV9taW4gPSAwLCAucmFuZ2Vf bWF4ID0gMHhGRiB9LA0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNz X3RhYmxlIGl0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfdGFibGUgPSB7DQorCS55ZXNfcmFuZ2VzID0g aXQ2NTA1X2JyaWRnZV92b2xhdGlsZV9yYW5nZXMsDQorCS5uX3llc19yYW5nZXMgPSBBUlJBWV9T SVpFKGl0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzKSwNCit9Ow0KKw0KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBpdDY1MDVfcmVnbWFwX2NvbmZpZyA9IHsNCisJLnJlZ19i aXRzID0gOCwNCisJLnZhbF9iaXRzID0gOCwNCisJLnZvbGF0aWxlX3RhYmxlID0gJml0NjUwNV9i cmlkZ2Vfdm9sYXRpbGVfdGFibGUsDQorCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTk9ORSwNCit9 Ow0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X3JlYWQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNp Z25lZCBpbnQgcmVnX2FkZHIpDQorew0KKwl1bnNpZ25lZCBpbnQgdmFsdWU7DQorCWludCBlcnI7 DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwllcnIg PSByZWdtYXBfcmVhZChpdDY1MDUtPnJlZ21hcCwgcmVnX2FkZHIsICZ2YWx1ZSk7DQorCWlmIChl cnIgPCAwKSB7DQorCQlkZXZfZXJyKGRldiwgInJlYWQgZmFpbGVkIHJlZ1sweCV4XSBlcnI6ICVk IiwgcmVnX2FkZHIsIGVycik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCXJldHVybiB2YWx1 ZTsNCit9DQorDQorc3RhdGljIGludCBpdDY1MDVfd3JpdGUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 LCB1bnNpZ25lZCBpbnQgcmVnX2FkZHIsDQorCQkJdW5zaWduZWQgaW50IHJlZ192YWwpDQorew0K KwlpbnQgZXJyOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsN CisNCisJZXJyID0gcmVnbWFwX3dyaXRlKGl0NjUwNS0+cmVnbWFwLCByZWdfYWRkciwgcmVnX3Zh bCk7DQorDQorCWlmIChlcnIgPCAwKSB7DQorCQlkZXZfZXJyKGRldiwgIndyaXRlIGZhaWxlZCBy ZWdbMHgleF0gPSAweCV4IGVyciA9ICVkIiwNCisJCQlyZWdfYWRkciwgcmVnX3ZhbCwgZXJyKTsN CisJCXJldHVybiBlcnI7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQg aXQ2NTA1X3NldF9iaXRzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJlZywN CisJCQkgICB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHZhbHVlKQ0KK3sNCisJaW50 IGVycjsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQor CWVyciA9IHJlZ21hcF91cGRhdGVfYml0cyhpdDY1MDUtPnJlZ21hcCwgcmVnLCBtYXNrLCB2YWx1 ZSk7DQorCWlmIChlcnIgPCAwKSB7DQorCQlkZXZfZXJyKGRldiwgIndyaXRlIHJlZ1sweCV4XSA9 IDB4JXggbWFzayA9IDB4JXggZmFpbGVkIGVyciAlZCIsDQorCQkJcmVnLCB2YWx1ZSwgbWFzaywg ZXJyKTsNCisJCXJldHVybiBlcnI7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRp YyB2b2lkIGl0NjUwNV9kZWJ1Z19wcmludChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVk IGludCByZWcsDQorCQkJICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCkNCit7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlpbnQgdmFsOw0KKw0KKwlpZiAo bGlrZWx5KCEoX19kcm1fZGVidWcgJiBEUk1fVVRfRFJJVkVSKSkpDQorCQlyZXR1cm47DQorDQor CXZhbCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnKTsNCisJaWYgKHZhbCA8IDApDQorCQlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICIlcyByZWdbJTAyeF0gcmVhZCBlcnJvciAoJWQpIiwNCisJ CQkJICAgICBwcmVmaXgsIHJlZywgdmFsKTsNCisJZWxzZQ0KKwkJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiJXMgcmVnWyUwMnhdID0gMHglMDJ4IiwgcHJlZml4LCByZWcsDQorCQkJCSAgICAg dmFsKTsNCit9DQorDQorc3RhdGljIGludCBpdDY1MDVfZHBjZF9yZWFkKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpDQorew0KKwl1OCB2YWx1ZTsNCisJaW50IHJl dDsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCXJl dCA9IGRybV9kcF9kcGNkX3JlYWRiKCZpdDY1MDUtPmF1eCwgb2Zmc2V0LCAmdmFsdWUpOw0KKwlp ZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJEUENEIHJlYWQgZmFpbGVkIFsweCVseF0g cmV0OiAlZCIsIG9mZnNldCwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisJcmV0dXJuIHZh bHVlOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9kcGNkX3dyaXRlKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsDQorCQkJICAgICB1OCBkYXRhaW4pDQorew0K KwlpbnQgcmV0Ow0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsN CisNCisJcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGViKCZpdDY1MDUtPmF1eCwgb2Zmc2V0LCBkYXRh aW4pOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJEUENEIHdyaXRlIGZhaWxl ZCBbMHglbHhdIHJldDogJWQiLCBvZmZzZXQsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQor CXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9nZXRfZHBjZChzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUsIGludCBvZmZzZXQsIHU4ICpkcGNkLCBpbnQgbnVtKQ0KK3sNCisJaW50IHJl dDsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCXJl dCA9IGRybV9kcF9kcGNkX3JlYWQoJml0NjUwNS0+YXV4LCBvZmZzZXQsIGRwY2QsIG51bSk7DQor DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAicmV0ID0gJWQgRFBDRFsweCV4XSA9IDB4JSpwaCIsIHJldCwgb2Zmc2V0LA0KKwkJ CSAgICAgbnVtLCBkcGNkKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0 NjUwNV9kdW1wKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXVuc2lnbmVkIGludCBpLCBq Ow0KKwl1OCByZWdzWzE2XTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50 LT5kZXY7DQorDQorCWZvciAoaSA9IDA7IGkgPD0gMHhmZjsgaSArPSAxNikgew0KKwkJZm9yIChq ID0gMDsgaiA8IDE2OyBqKyspDQorCQkJcmVnc1tqXSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgaSAr IGopOw0KKw0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiWzB4JTAyeF0gPSAlMTZwaCIs IGksIHJlZ3MpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBib29sIGl0NjUwNV9nZXRfc2lua19ocGRf c3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWludCByZWdfMGQ7DQorDQorCXJl Z18wZCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX1NZU1RFTV9TVFMpOw0KKw0KKwlpZiAocmVn XzBkIDwgMCkNCisJCXJldHVybiBmYWxzZTsNCisNCisJcmV0dXJuIHJlZ18wZCAmIEhQRF9TVFM7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X3JlYWRfd29yZChzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUsIHVuc2lnbmVkIGludCByZWcpDQorew0KKwlpbnQgdmFsMCwgdmFsMTsNCisNCisJdmFsMCA9 IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnKTsNCisJaWYgKHZhbDAgPCAwKQ0KKwkJcmV0dXJuIHZh bDA7DQorDQorCXZhbDEgPSBpdDY1MDVfcmVhZChpdDY1MDUsIHJlZyArIDEpOw0KKwlpZiAodmFs MSA8IDApDQorCQlyZXR1cm4gdmFsMTsNCisNCisJcmV0dXJuICh2YWwxIDw8IDgpIHwgdmFsMDsN Cit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRl djsNCisJaW50IGhzeW5jX3BvbCwgdnN5bmNfcG9sLCBpbnRlcmxhY2VkOw0KKwlpbnQgaHRvdGFs LCBoZGVzLCBoZGV3LCBoZnBoLCBoc3luY3c7DQorCWludCB2dG90YWwsIHZkZXMsIHZkZXcsIHZm cGgsIHZzeW5jdzsNCisJaW50IHJkZGF0YSwgaSwgcGNsaywgc3VtID0gMDsNCisNCisJdXNsZWVw X3JhbmdlKDEwMDAwLCAxNTAwMCk7DQorCXJkZGF0YSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVH X0lOUFVUX0NUUkwpOw0KKwloc3luY19wb2wgPSByZGRhdGEgJiBJTlBVVF9IU1lOQ19QT0w7DQor CXZzeW5jX3BvbCA9IChyZGRhdGEgJiBJTlBVVF9WU1lOQ19QT0wpID4+IDI7DQorCWludGVybGFj ZWQgPSAocmRkYXRhICYgSU5QVVRfSU5URVJMQUNFRCkgPj4gNDsNCisNCisJaHRvdGFsID0gaXQ2 NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IVE9UQUwpICYgMHgxRkZGOw0KKwloZGVz ID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IQUNUSVZFX1NUQVJUKSAmIDB4 MUZGRjsNCisJaGRldyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfSEFDVElW RV9XSURUSCkgJiAweDFGRkY7DQorCWhmcGggPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVH X0lOUFVUX0hGUk9OVF9QT1JDSCkgJiAweDFGRkY7DQorCWhzeW5jdyA9IGl0NjUwNV9yZWFkX3dv cmQoaXQ2NTA1LCBSRUdfSU5QVVRfSFNZTkNfV0lEVEgpICYgMHgxRkZGOw0KKw0KKwl2dG90YWwg PSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX1ZUT1RBTCkgJiAweEZGRjsNCisJ dmRlcyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkFDVElWRV9TVEFSVCkg JiAweEZGRjsNCisJdmRldyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkFD VElWRV9XSURUSCkgJiAweEZGRjsNCisJdmZwaCA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBS RUdfSU5QVVRfVkZST05UX1BPUkNIKSAmIDB4RkZGOw0KKwl2c3luY3cgPSBpdDY1MDVfcmVhZF93 b3JkKGl0NjUwNSwgUkVHX0lOUFVUX1ZTWU5DX1dJRFRIKSAmIDB4RkZGOw0KKw0KKwlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJoc3luY19wb2w6JWQsIHZzeW5jX3BvbDolZCwgaW50ZXJsYWNl ZDolZCIsDQorCQkJICAgICBoc3luY19wb2wsIHZzeW5jX3BvbCwgaW50ZXJsYWNlZCk7DQorCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhhY3RpdmVfc3RhcnQ6JWQsIHZhY3RpdmVfc3RhcnQ6 JWQiLA0KKwkJCSAgICAgaGRlcywgdmRlcyk7DQorDQorCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsr KSB7DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgRU5BQkxFX1BD TEtfQ09VTlRFUiwNCisJCQkJRU5BQkxFX1BDTEtfQ09VTlRFUik7DQorCQl1c2xlZXBfcmFuZ2Uo MTAwMDAsIDE1MDAwKTsNCisJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX0NUUkww LCBFTkFCTEVfUENMS19DT1VOVEVSLA0KKwkJCQkweDAwKTsNCisJCXJkZGF0YSA9IGl0NjUwNV9y ZWFkX3dvcmQoaXQ2NTA1LCBSRUdfUENMS19DT1VOVEVSX1ZBTFVFKSAmDQorCQkJIDB4RkZGOw0K Kw0KKwkJc3VtICs9IHJkZGF0YTsNCisJfQ0KKw0KKwlpZiAoc3VtID09IDApIHsNCisJCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwgImNhbGMgdmlkZW8gdGltaW5nIGVycm9yIik7DQorCQlyZXR1 cm47DQorCX0NCisNCisJc3VtIC89IDEwOw0KKwlwY2xrID0gMTM1MDAgKiAyMDQ4IC8gc3VtOw0K KwlpdDY1MDUtPnZpZGVvX2luZm8uY2xvY2sgPSBwY2xrOw0KKwlpdDY1MDUtPnZpZGVvX2luZm8u aGRpc3BsYXkgPSBoZGV3Ow0KKwlpdDY1MDUtPnZpZGVvX2luZm8uaHN5bmNfc3RhcnQgPSBoZGV3 ICsgaGZwaDsNCisJaXQ2NTA1LT52aWRlb19pbmZvLmhzeW5jX2VuZCA9IGhkZXcgKyBoZnBoICsg aHN5bmN3Ow0KKwlpdDY1MDUtPnZpZGVvX2luZm8uaHRvdGFsID0gaHRvdGFsOw0KKwlpdDY1MDUt PnZpZGVvX2luZm8udmRpc3BsYXkgPSB2ZGV3Ow0KKwlpdDY1MDUtPnZpZGVvX2luZm8udnN5bmNf c3RhcnQgPSB2ZGV3ICsgdmZwaDsNCisJaXQ2NTA1LT52aWRlb19pbmZvLnZzeW5jX2VuZCA9IHZk ZXcgKyB2ZnBoICsgdnN5bmN3Ow0KKwlpdDY1MDUtPnZpZGVvX2luZm8udnRvdGFsID0gdnRvdGFs Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsIERSTV9NT0RFX0ZNVCwNCisJCQkgICAg IERSTV9NT0RFX0FSRygmaXQ2NTA1LT52aWRlb19pbmZvKSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQg aXQ2NTA1X2RybV9kcF9saW5rX3Byb2JlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsDQorCQkJCSAg ICBzdHJ1Y3QgaXQ2NTA1X2RybV9kcF9saW5rICpsaW5rKQ0KK3sNCisJdTggdmFsdWVzWzNdOw0K KwlpbnQgZXJyOw0KKw0KKwltZW1zZXQobGluaywgMCwgc2l6ZW9mKCpsaW5rKSk7DQorDQorCWVy ciA9IGRybV9kcF9kcGNkX3JlYWQoYXV4LCBEUF9EUENEX1JFViwgdmFsdWVzLCBzaXplb2YodmFs dWVzKSk7DQorCWlmIChlcnIgPCAwKQ0KKwkJcmV0dXJuIGVycjsNCisNCisJbGluay0+cmV2aXNp b24gPSB2YWx1ZXNbMF07DQorCWxpbmstPnJhdGUgPSBkcm1fZHBfYndfY29kZV90b19saW5rX3Jh dGUodmFsdWVzWzFdKTsNCisJbGluay0+bnVtX2xhbmVzID0gdmFsdWVzWzJdICYgRFBfTUFYX0xB TkVfQ09VTlRfTUFTSzsNCisNCisJaWYgKHZhbHVlc1syXSAmIERQX0VOSEFOQ0VEX0ZSQU1FX0NB UCkNCisJCWxpbmstPmNhcGFiaWxpdGllcyA9IERQX0VOSEFOQ0VEX0ZSQU1FX0NBUDsNCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2RybV9kcF9saW5rX3Bvd2VyX3Vw KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsDQorCQkJCSAgICAgICBzdHJ1Y3QgaXQ2NTA1X2RybV9k cF9saW5rICpsaW5rKQ0KK3sNCisJdTggdmFsdWU7DQorCWludCBlcnI7DQorDQorCS8qIERQX1NF VF9QT1dFUiByZWdpc3RlciBpcyBvbmx5IGF2YWlsYWJsZSBvbiBEUENEIHYxLjEgYW5kIGxhdGVy ICovDQorCWlmIChsaW5rLT5yZXZpc2lvbiA8IERQQ0RfVl8xXzEpDQorCQlyZXR1cm4gMDsNCisN CisJZXJyID0gZHJtX2RwX2RwY2RfcmVhZGIoYXV4LCBEUF9TRVRfUE9XRVIsICZ2YWx1ZSk7DQor CWlmIChlcnIgPCAwKQ0KKwkJcmV0dXJuIGVycjsNCisNCisJdmFsdWUgJj0gfkRQX1NFVF9QT1dF Ul9NQVNLOw0KKwl2YWx1ZSB8PSBEUF9TRVRfUE9XRVJfRDA7DQorDQorCWVyciA9IGRybV9kcF9k cGNkX3dyaXRlYihhdXgsIERQX1NFVF9QT1dFUiwgdmFsdWUpOw0KKwlpZiAoZXJyIDwgMCkNCisJ CXJldHVybiBlcnI7DQorDQorCS8qDQorCSAqIEFjY29yZGluZyB0byB0aGUgRFAgMS4xIHNwZWNp ZmljYXRpb24sIGEgIlNpbmsgRGV2aWNlIG11c3QgZXhpdCB0aGUNCisJICogcG93ZXIgc2F2aW5n IHN0YXRlIHdpdGhpbiAxIG1zIiAoU2VjdGlvbiAyLjUuMy4xLCBUYWJsZSA1LTUyLCAiU2luaw0K KwkgKiBDb250cm9sIEZpZWxkIiAocmVnaXN0ZXIgMHg2MDApLg0KKwkgKi8NCisJdXNsZWVwX3Jh bmdlKDEwMDAsIDIwMDApOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2 NTA1X2NsZWFyX2ludChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBJTlRfU1RBVFVTXzAxLCAweEZGKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5U X1NUQVRVU18wMiwgMHhGRik7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9TVEFUVVNfMDMs IDB4RkYpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfaW50X21hc2tfZW5hYmxlKHN0cnVj dCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAx LCBCSVQoSU5UX0hQRF9DSEFOR0UpIHwNCisJCSAgICAgQklUKElOVF9SRUNFSVZFX0hQRF9JUlEp IHwgQklUKElOVF9TQ0RUX0NIQU5HRSkgfA0KKwkJICAgICBCSVQoSU5UX0hEQ1BfRkFJTCkgfCBC SVQoSU5UX0hEQ1BfRE9ORSkpOw0KKw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJTlRfTUFTS18w MiwgQklUKElOVF9BVVhfQ01EX0ZBSUwpIHwNCisJCSAgICAgQklUKElOVF9IRENQX0tTVl9DSEVD SykgfCBCSVQoSU5UX0FVRElPX0ZJRk9fRVJST1IpKTsNCisNCisJaXQ2NTA1X3dyaXRlKGl0NjUw NSwgSU5UX01BU0tfMDMsIEJJVChJTlRfTElOS19UUkFJTl9GQUlMKSB8DQorCQkgICAgIEJJVChJ TlRfVklEX0ZJRk9fRVJST1IpIHwgQklUKElOVF9JT19MQVRDSF9GSUZPX09WRVJGTE9XKSk7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9pbnRfbWFza19kaXNhYmxlKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkNCit7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAxLCAweDAwKTsN CisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01BU0tfMDIsIDB4MDApOw0KKwlpdDY1MDVfd3Jp dGUoaXQ2NTA1LCBJTlRfTUFTS18wMywgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUw NV9sYW5lX3Rlcm1pbmF0aW9uX29uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWludCBy ZWdjZjsNCisNCisJcmVnY2YgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19VU0VSX0RSVl9QUkUp Ow0KKw0KKwlpZiAocmVnY2YgPT0gTUlTQ19WRVJCKQ0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwgMHg4MCwgMHgwMCk7DQorDQorCWlmIChyZWdjZiA9PSBN SVNDX1ZFUkMpIHsNCisJCWlmIChpdDY1MDUtPmxhbmVfc3dhcCkgew0KKwkJCXN3aXRjaCAoaXQ2 NTA1LT5sYW5lX2NvdW50KSB7DQorCQkJY2FzZSAxOg0KKwkJCWNhc2UgMjoNCisJCQkJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwNCisJCQkJCQkweDBDLCAweDA4 KTsNCisJCQkJYnJlYWs7DQorCQkJZGVmYXVsdDoNCisJCQkJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwNCisJCQkJCQkweDBDLCAweDBDKTsNCisJCQkJYnJlYWs7 DQorCQkJfQ0KKwkJfSBlbHNlIHsNCisJCQlzd2l0Y2ggKGl0NjUwNS0+bGFuZV9jb3VudCkgew0K KwkJCWNhc2UgMToNCisJCQljYXNlIDI6DQorCQkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJF R19EUlZfTE5fREFUQV9TRUwsDQorCQkJCQkJMHgwQywgMHgwNCk7DQorCQkJCWJyZWFrOw0KKwkJ CWRlZmF1bHQ6DQorCQkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9T RUwsDQorCQkJCQkJMHgwQywgMHgwQyk7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCX0NCisJfQ0K K30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV90ZXJtaW5hdGlvbl9vZmYoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZ2NmOw0KKw0KKwlyZWdjZiA9IGl0NjUwNV9yZWFk KGl0NjUwNSwgUkVHX1VTRVJfRFJWX1BSRSk7DQorDQorCWlmIChyZWdjZiA9PSBNSVNDX1ZFUkIp DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfRFJWX0xOX0RBVEFfU0VMLCAweDgwLCAw eDgwKTsNCisNCisJaWYgKHJlZ2NmID09IE1JU0NfVkVSQykNCisJCWl0NjUwNV9zZXRfYml0cyhp dDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsIDB4MEMsIDB4MDApOw0KK30NCisNCitzdGF0aWMg dm9pZCBpdDY1MDVfbGFuZV9wb3dlcl9vbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlp dDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfTElOS19EUlYsIDB4RjEsDQorCQkJKGl0NjUwNS0+ bGFuZV9zd2FwID8NCisJCQkJIEdFTk1BU0soNywgOCAtIGl0NjUwNS0+bGFuZV9jb3VudCkgOg0K KwkJCQkgR0VOTUFTSygzICsgaXQ2NTA1LT5sYW5lX2NvdW50LCA0KSkgfA0KKwkJCQkweDAxKTsN Cit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfcG93ZXJfb2ZmKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkNCit7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19MSU5LX0RSViwgMHhG MCwgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX29mZihzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDVfbGFuZV9wb3dlcl9vZmYoaXQ2NTA1KTsNCisJaXQ2 NTA1X2xhbmVfdGVybWluYXRpb25fb2ZmKGl0NjUwNSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0 NjUwNV9hdXhfdGVybWluYXRpb25fb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50 IHJlZ2NmOw0KKw0KKwlyZWdjZiA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX1VTRVJfRFJWX1BS RSk7DQorDQorCWlmIChyZWdjZiA9PSBNSVNDX1ZFUkIpDQorCQlpdDY1MDVfbGFuZV90ZXJtaW5h dGlvbl9vbihpdDY1MDUpOw0KKw0KKwlpZiAocmVnY2YgPT0gTUlTQ19WRVJDKQ0KKwkJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwgMHg4MCwgMHg4MCk7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9hdXhfcG93ZXJfb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1 KQ0KK3sNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWCwgMHgwMiwgMHgwMik7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9hdXhfb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0K K3sNCisJaXQ2NTA1X2F1eF9wb3dlcl9vbihpdDY1MDUpOw0KKwlpdDY1MDVfYXV4X3Rlcm1pbmF0 aW9uX29uKGl0NjUwNSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9hdXhfcmVzZXQoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JF U0VUX0NUUkwsIEFVWF9SRVNFVCwgQVVYX1JFU0VUKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX1JFU0VUX0NUUkwsIEFVWF9SRVNFVCwgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lk IGl0NjUwNV9yZXNldF9sb2dpYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlyZWdtYXBf d3JpdGUoaXQ2NTA1LT5yZWdtYXAsIFJFR19SRVNFVF9DVFJMLCBBTExfTE9HSUNfUkVTRVQpOw0K Kwl1c2xlZXBfcmFuZ2UoMTAwMCwgMTUwMCk7DQorfQ0KKw0KK3N0YXRpYyBib29sIGl0NjUwNV9h dXhfb3BfZmluaXNoZWQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZzJiID0g aXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVYX0NNRF9SRVEpOw0KKw0KKwlpZiAocmVnMmIgPCAw KQ0KKwkJcmV0dXJuIGZhbHNlOw0KKw0KKwlyZXR1cm4gKHJlZzJiICYgQVVYX0JVU1kpID09IDA7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2F1eF93YWl0KHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCit7DQorCWludCBzdGF0dXM7DQorCXVuc2lnbmVkIGxvbmcgdGltZW91dDsNCisJc3RydWN0 IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCXRpbWVvdXQgPSBqaWZm aWVzICsgbXNlY3NfdG9famlmZmllcyhBVVhfV0FJVF9USU1FT1VUX01TKSArIDE7DQorDQorCXdo aWxlICghaXQ2NTA1X2F1eF9vcF9maW5pc2hlZChpdDY1MDUpKSB7DQorCQlpZiAodGltZV9hZnRl cihqaWZmaWVzLCB0aW1lb3V0KSkgew0KKwkJCWRldl9lcnIoZGV2LCAiVGltZWQgb3V0IHdhaXRp bmcgQVVYIHRvIGZpbmlzaCIpOw0KKwkJCXJldHVybiAtRVRJTUVET1VUOw0KKwkJfQ0KKwkJdXNs ZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KKwl9DQorDQorCXN0YXR1cyA9IGl0NjUwNV9yZWFkKGl0 NjUwNSwgUkVHX0FVWF9FUlJPUl9TVFMpOw0KKwlpZiAoc3RhdHVzIDwgMCkgew0KKwkJZGV2X2Vy cihkZXYsICJGYWlsZWQgdG8gcmVhZCBBVVggY2hhbm5lbDogJWQiLCBzdGF0dXMpOw0KKwkJcmV0 dXJuIHN0YXR1czsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHNzaXplX3Qg aXQ2NTA1X2F1eF9vcGVyYXRpb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1LA0KKwkJCQkgICAgZW51 bSBhdXhfY21kX3R5cGUgY21kLA0KKwkJCQkgICAgdW5zaWduZWQgaW50IGFkZHJlc3MsIHU4ICpi dWZmZXIsDQorCQkJCSAgICBzaXplX3Qgc2l6ZSwgZW51bSBhdXhfY21kX3JlcGx5ICpyZXBseSkN Cit7DQorCWludCBpLCByZXQ7DQorCWJvb2wgYXV4X3dyaXRlX2NoZWNrID0gZmFsc2U7DQorDQor CWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkNCisJCXJldHVybiAtRUlP Ow0KKw0KKwkvKiBzZXQgQVVYIHVzZXIgbW9kZSAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1 LCBSRUdfQVVYX0NUUkwsIEFVWF9VU0VSX01PREUsIEFVWF9VU0VSX01PREUpOw0KKw0KK2F1eF9v cF9zdGFydDoNCisJaWYgKGNtZCA9PSBDTURfQVVYX0kyQ19FRElEX1JFQUQpIHsNCisJCS8qIEFV WCBFRElEIEZJRk8gaGFzIG1heCBsZW5ndGggb2YgQVVYX0ZJRk9fTUFYX1NJWkUgYnl0ZXMuICov DQorCQlzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBBVVhfRklGT19NQVhfU0laRSk7DQorCQkv KiBFbmFibGUgQVVYIEZJRk8gcmVhZCBiYWNrIGFuZCBjbGVhciBGSUZPICovDQorCQlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsDQorCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBD TFJfRURJRF9GSUZPLA0KKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURfRklGTyk7DQor DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsDQorCQkJCUFVWF9FTl9G SUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPLA0KKwkJCQlBVVhfRU5fRklGT19SRUFEKTsNCisJfSBl bHNlIHsNCisJCS8qIFRoZSBEUCBBVVggdHJhbnNtaXQgYnVmZmVyIGhhcyA0IGJ5dGVzLiAqLw0K KwkJc2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgNCk7DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfQVVYX0NUUkwsIEFVWF9OT19TRUdNRU5UX1dSLA0KKwkJCQlBVVhfTk9fU0VHTUVO VF9XUik7DQorCX0NCisNCisJLyogU3RhcnQgQWRkcmVzc1s3OjBdICovDQorCWl0NjUwNV93cml0 ZShpdDY1MDUsIFJFR19BVVhfQURSXzBfNywgKGFkZHJlc3MgPj4gMCkgJiAweEZGKTsNCisJLyog U3RhcnQgQWRkcmVzc1sxNTo4XSAqLw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0FE Ul84XzE1LCAoYWRkcmVzcyA+PiA4KSAmIDB4RkYpOw0KKwkvKiBXcml0ZU51bVszOjBdK1N0YXJ0 QWRyWzE5OjE2XSAqLw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0FEUl8xNl8xOSwN CisJCSAgICAgKChhZGRyZXNzID4+IDE2KSAmIDB4MEYpIHwgKChzaXplIC0gMSkgPDwgNCkpOw0K Kw0KKwlpZiAoY21kID09IENNRF9BVVhfTkFUSVZFX1dSSVRFKQ0KKwkJcmVnbWFwX2J1bGtfd3Jp dGUoaXQ2NTA1LT5yZWdtYXAsIFJFR19BVVhfT1VUX0RBVEEwLCBidWZmZXIsDQorCQkJCSAgc2l6 ZSk7DQorDQorCS8qIEF1eCBGaXJlICovDQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhf Q01EX1JFUSwgY21kKTsNCisNCisJcmV0ID0gaXQ2NTA1X2F1eF93YWl0KGl0NjUwNSk7DQorCWlm IChyZXQgPCAwKQ0KKwkJZ290byBhdXhfb3BfZXJyOw0KKw0KKwlyZXQgPSBpdDY1MDVfcmVhZChp dDY1MDUsIFJFR19BVVhfRVJST1JfU1RTKTsNCisJaWYgKHJldCA8IDApDQorCQlnb3RvIGF1eF9v cF9lcnI7DQorDQorCXN3aXRjaCAoKHJldCA+PiA2KSAmIDB4Mykgew0KKwljYXNlIDA6DQorCQkq cmVwbHkgPSBSRVBMWV9BQ0s7DQorCQlicmVhazsNCisJY2FzZSAxOg0KKwkJKnJlcGx5ID0gUkVQ TFlfREVGRVI7DQorCQlyZXQgPSAtRUFHQUlOOw0KKwkJZ290byBhdXhfb3BfZXJyOw0KKwljYXNl IDI6DQorCQkqcmVwbHkgPSBSRVBMWV9OQUNLOw0KKwkJcmV0ID0gLUVJTzsNCisJCWdvdG8gYXV4 X29wX2VycjsNCisJY2FzZSAzOg0KKwkJcmV0ID0gLUVUSU1FRE9VVDsNCisJCWdvdG8gYXV4X29w X2VycjsNCisJfQ0KKw0KKwkvKiBSZWFkIGJhY2sgTmF0aXZlIFdyaXRlIGRhdGEgKi8NCisJaWYg KGNtZCA9PSBDTURfQVVYX05BVElWRV9XUklURSkgew0KKwkJYXV4X3dyaXRlX2NoZWNrID0gdHJ1 ZTsNCisJCWNtZCA9IENNRF9BVVhfTkFUSVZFX1JFQUQ7DQorCQlnb3RvIGF1eF9vcF9zdGFydDsN CisJfQ0KKw0KKwlpZiAoY21kID09IENNRF9BVVhfSTJDX0VESURfUkVBRCkgew0KKwkJZm9yIChp ID0gMDsgaSA8IHNpemU7IGkrKykgew0KKwkJCXJldCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVH X0FVWF9EQVRBX0ZJRk8pOw0KKwkJCWlmIChyZXQgPCAwKQ0KKwkJCQlnb3RvIGF1eF9vcF9lcnI7 DQorCQkJYnVmZmVyW2ldID0gcmV0Ow0KKwkJfQ0KKwl9IGVsc2Ugew0KKwkJZm9yIChpID0gMDsg aSA8IHNpemU7IGkrKykgew0KKwkJCXJldCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVWF9E QVRBXzBfNyArIGkpOw0KKwkJCWlmIChyZXQgPCAwKQ0KKwkJCQlnb3RvIGF1eF9vcF9lcnI7DQor DQorCQkJaWYgKGF1eF93cml0ZV9jaGVjayAmJiBidWZmZXJbc2l6ZSAtIDEgLSBpXSAhPSByZXQp IHsNCisJCQkJcmV0ID0gLUVJTlZBTDsNCisJCQkJZ290byBhdXhfb3BfZXJyOw0KKwkJCX0NCisN CisJCQlidWZmZXJbc2l6ZSAtIDEgLSBpXSA9IHJldDsNCisJCX0NCisJfQ0KKw0KKwlyZXQgPSBp Ow0KKw0KK2F1eF9vcF9lcnI6DQorCWlmIChjbWQgPT0gQ01EX0FVWF9JMkNfRURJRF9SRUFEKSB7 DQorCQkvKiBjbGVhciBBVVggRklGTyAqLw0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0FVWF9DVFJMLA0KKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURfRklGTywNCisJCQkJ QVVYX0VOX0ZJRk9fUkVBRCB8IENMUl9FRElEX0ZJRk8pOw0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0FVWF9DVFJMLA0KKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURfRklG TywgMHgwMCk7DQorCX0NCisNCisJLyogTGVhdmUgQVVYIHVzZXIgbW9kZSAqLw0KKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsIEFVWF9VU0VSX01PREUsIDApOw0KKw0KKwly ZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgc3NpemVfdCBpdDY1MDVfYXV4X2RvX3RyYW5zZmVy KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCisJCQkJICAgICAgZW51bSBhdXhfY21kX3R5cGUgY21k LA0KKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgYWRkcmVzcywgdTggKmJ1ZmZlciwNCisJCQkJICAg ICAgc2l6ZV90IHNpemUsIGVudW0gYXV4X2NtZF9yZXBseSAqcmVwbHkpDQorew0KKwlpbnQgaSwg cmV0X3NpemUsIHJldCA9IDAsIHJlcXVlc3Rfc2l6ZTsNCisNCisJbXV0ZXhfbG9jaygmaXQ2NTA1 LT5hdXhfbG9jayk7DQorCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsNCisJCXJlcXVl c3Rfc2l6ZSA9IG1pbigoaW50KXNpemUgLSBpLCA0KTsNCisJCXJldF9zaXplID0gaXQ2NTA1X2F1 eF9vcGVyYXRpb24oaXQ2NTA1LCBjbWQsIGFkZHJlc3MgKyBpLA0KKwkJCQkJCWJ1ZmZlciArIGks IHJlcXVlc3Rfc2l6ZSwNCisJCQkJCQlyZXBseSk7DQorCQlpZiAocmV0X3NpemUgPCAwKSB7DQor CQkJcmV0ID0gcmV0X3NpemU7DQorCQkJZ290byBhdXhfb3BfZXJyOw0KKwkJfQ0KKw0KKwkJcmV0 ICs9IHJldF9zaXplOw0KKwl9DQorDQorYXV4X29wX2VycjoNCisJbXV0ZXhfdW5sb2NrKCZpdDY1 MDUtPmF1eF9sb2NrKTsNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHNzaXplX3QgaXQ2 NTA1X2F1eF90cmFuc2ZlcihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LA0KKwkJCQkgICBzdHJ1Y3Qg ZHJtX2RwX2F1eF9tc2cgKm1zZykNCit7DQorCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbnRh aW5lcl9vZihhdXgsIHN0cnVjdCBpdDY1MDUsIGF1eCk7DQorCXU4IGNtZDsNCisJYm9vbCBpc19p MmMgPSAhKG1zZy0+cmVxdWVzdCAmIERQX0FVWF9OQVRJVkVfV1JJVEUpOw0KKwlpbnQgcmV0Ow0K KwllbnVtIGF1eF9jbWRfcmVwbHkgcmVwbHk7DQorDQorCS8qIElUNjUwNSBkb2Vzbid0IHN1cHBv cnQgYXJiaXRyYXJ5IEkyQyByZWFkIC8gd3JpdGUuICovDQorCWlmIChpc19pMmMpDQorCQlyZXR1 cm4gLUVJTlZBTDsNCisNCisJc3dpdGNoIChtc2ctPnJlcXVlc3QpIHsNCisJY2FzZSBEUF9BVVhf TkFUSVZFX1JFQUQ6DQorCQljbWQgPSBDTURfQVVYX05BVElWRV9SRUFEOw0KKwkJYnJlYWs7DQor CWNhc2UgRFBfQVVYX05BVElWRV9XUklURToNCisJCWNtZCA9IENNRF9BVVhfTkFUSVZFX1dSSVRF Ow0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwly ZXQgPSBpdDY1MDVfYXV4X2RvX3RyYW5zZmVyKGl0NjUwNSwgY21kLCBtc2ctPmFkZHJlc3MsIG1z Zy0+YnVmZmVyLA0KKwkJCQkgICAgIG1zZy0+c2l6ZSwgJnJlcGx5KTsNCisJaWYgKHJldCA8IDAp DQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlzd2l0Y2ggKHJlcGx5KSB7DQorCWNhc2UgUkVQTFlfQUNL Og0KKwkJbXNnLT5yZXBseSA9IERQX0FVWF9OQVRJVkVfUkVQTFlfQUNLOw0KKwkJYnJlYWs7DQor CWNhc2UgUkVQTFlfTkFDSzoNCisJCW1zZy0+cmVwbHkgPSBEUF9BVVhfTkFUSVZFX1JFUExZX05B Q0s7DQorCQlicmVhazsNCisJY2FzZSBSRVBMWV9ERUZFUjoNCisJCW1zZy0+cmVwbHkgPSBEUF9B VVhfTkFUSVZFX1JFUExZX0RFRkVSOw0KKwkJYnJlYWs7DQorCX0NCisNCisJcmV0dXJuIHJldDsN Cit9DQorDQorc3RhdGljIGludCBpdDY1MDVfZ2V0X2VkaWRfYmxvY2sodm9pZCAqZGF0YSwgdTgg KmJ1ZiwgdW5zaWduZWQgaW50IGJsb2NrLA0KKwkJCQkgc2l6ZV90IGxlbikNCit7DQorCXN0cnVj dCBpdDY1MDUgKml0NjUwNSA9IGRhdGE7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUt PmNsaWVudC0+ZGV2Ow0KKwllbnVtIGF1eF9jbWRfcmVwbHkgcmVwbHk7DQorCWludCBvZmZzZXQs IHJldCwgYXV4X3JldHJ5ID0gMTAwOw0KKw0KKwlpdDY1MDVfYXV4X3Jlc2V0KGl0NjUwNSk7DQor CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImJsb2NrIG51bWJlciA9ICVkIiwgYmxvY2spOw0K Kw0KKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IEVESURfTEVOR1RIOykgew0KKwkJcmV0ID0g aXQ2NTA1X2F1eF9kb190cmFuc2ZlcihpdDY1MDUsIENNRF9BVVhfSTJDX0VESURfUkVBRCwNCisJ CQkJCSAgICAgYmxvY2sgKiBFRElEX0xFTkdUSCArIG9mZnNldCwNCisJCQkJCSAgICAgYnVmICsg b2Zmc2V0LCA4LCAmcmVwbHkpOw0KKw0KKwkJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FQUdBSU4p DQorCQkJcmV0dXJuIHJldDsNCisNCisJCXN3aXRjaCAocmVwbHkpIHsNCisJCWNhc2UgUkVQTFlf QUNLOg0KKwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlsweCUwMnhdOiAlOHBoIiwgb2Zm c2V0LA0KKwkJCQkJICAgICBidWYgKyBvZmZzZXQpOw0KKwkJCW9mZnNldCArPSA4Ow0KKwkJCWF1 eF9yZXRyeSA9IDEwMDsNCisJCQlicmVhazsNCisJCWNhc2UgUkVQTFlfTkFDSzoNCisJCQlyZXR1 cm4gLUVJTzsNCisJCWNhc2UgUkVQTFlfREVGRVI6DQorCQkJbXNsZWVwKDIwKTsNCisJCQlpZiAo ISgtLWF1eF9yZXRyeSkpDQorCQkJCXJldHVybiAtRUlPOw0KKwkJfQ0KKwl9DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfdmFyaWFibGVfY29uZmlnKHN0cnVjdCBp dDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUgPSBIQlI7DQor CWl0NjUwNS0+bGFuZV9jb3VudCA9IE1BWF9MQU5FX0NPVU5UOw0KKwlpdDY1MDUtPmxpbmtfc3Rh dGUgPSBMSU5LX0lETEU7DQorCWl0NjUwNS0+aGRjcF9kZXNpcmVkID0gSERDUF9ERVNJUkVEOw0K KwlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZOw0KKwlpdDY1MDUt PmF1ZGlvLnNlbGVjdCA9IEFVRElPX1NFTEVDVDsNCisJaXQ2NTA1LT5hdWRpby5zYW1wbGVfcmF0 ZSA9IEFVRElPX1NBTVBMRV9SQVRFOw0KKwlpdDY1MDUtPmF1ZGlvLmNoYW5uZWxfY291bnQgPSBB VURJT19DSEFOTkVMX0NPVU5UOw0KKwlpdDY1MDUtPmF1ZGlvLnR5cGUgPSBBVURJT19UWVBFOw0K KwlpdDY1MDUtPmF1ZGlvLmkyc19pbnB1dF9mb3JtYXQgPSBJMlNfSU5QVVRfRk9STUFUOw0KKwlp dDY1MDUtPmF1ZGlvLmkyc19qdXN0aWZpZWQgPSBJMlNfSlVTVElGSUVEOw0KKwlpdDY1MDUtPmF1 ZGlvLmkyc19kYXRhX2RlbGF5ID0gSTJTX0RBVEFfREVMQVk7DQorCWl0NjUwNS0+YXVkaW8uaTJz X3dzX2NoYW5uZWwgPSBJMlNfV1NfQ0hBTk5FTDsNCisJaXQ2NTA1LT5hdWRpby5pMnNfZGF0YV9z ZXF1ZW5jZSA9IEkyU19EQVRBX1NFUVVFTkNFOw0KKwlpdDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3Ro ID0gQVVESU9fV09SRF9MRU5HVEg7DQorCW1lbXNldChpdDY1MDUtPnNoYTFfaW5wdXQsIDAsIHNp emVvZihpdDY1MDUtPnNoYTFfaW5wdXQpKTsNCisJbWVtc2V0KGl0NjUwNS0+YmtzdnMsIDAsIHNp emVvZihpdDY1MDUtPmJrc3ZzKSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X3NlbmRfdmlk ZW9faW5mb2ZyYW1lKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCisJCQkJICAgICAgIHN0cnVjdCBo ZG1pX2F2aV9pbmZvZnJhbWUgKmZyYW1lKQ0KK3sNCisJdTggYnVmZmVyW0hETUlfSU5GT0ZSQU1F X0hFQURFUl9TSVpFICsgSERNSV9BVklfSU5GT0ZSQU1FX1NJWkVdOw0KKwlpbnQgZXJyOw0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJZXJyID0gaGRt aV9hdmlfaW5mb2ZyYW1lX3BhY2soZnJhbWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOw0KKwlp ZiAoZXJyIDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcGFjayBBVkkgaW5mb2Zy YW1lOiAlZCIsIGVycik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWVyciA9IGl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19JTkZPRlJBTUVfQ1RSTCwgRU5fQVZJX1BLVCwgMHgwMCk7DQor CWlmIChlcnIpDQorCQlyZXR1cm4gZXJyOw0KKw0KKwllcnIgPSByZWdtYXBfYnVsa193cml0ZShp dDY1MDUtPnJlZ21hcCwgUkVHX0FWSV9JTkZPX0RCMSwNCisJCQkJYnVmZmVyICsgSERNSV9JTkZP RlJBTUVfSEVBREVSX1NJWkUsDQorCQkJCWZyYW1lLT5sZW5ndGgpOw0KKwlpZiAoZXJyKQ0KKwkJ cmV0dXJuIGVycjsNCisNCisJZXJyID0gaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0lORk9G UkFNRV9DVFJMLCBFTl9BVklfUEtULA0KKwkJCSAgICAgIEVOX0FWSV9QS1QpOw0KKwlpZiAoZXJy KQ0KKwkJcmV0dXJuIGVycjsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0 NjUwNV9nZXRfZXh0Y29uX3Byb3BlcnR5KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWlu dCBlcnI7DQorCXVuaW9uIGV4dGNvbl9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eTsNCisJc3RydWN0 IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCWlmIChpdDY1MDUtPmV4 dGNvbiAmJiAhaXQ2NTA1LT5sYW5lX3N3YXBfZGlzYWJsZWQpIHsNCisJCWVyciA9IGV4dGNvbl9n ZXRfcHJvcGVydHkoaXQ2NTA1LT5leHRjb24sIEVYVENPTl9ESVNQX0RQLA0KKwkJCQkJICBFWFRD T05fUFJPUF9VU0JfVFlQRUNfUE9MQVJJVFksDQorCQkJCQkgICZwcm9wZXJ0eSk7DQorCQlpZiAo ZXJyKSB7DQorCQkJZGV2X2VycihkZXYsICJnZXQgcHJvcGVydHkgZmFpbCEiKTsNCisJCQlyZXR1 cm47DQorCQl9DQorCQlpdDY1MDUtPmxhbmVfc3dhcCA9IHByb3BlcnR5LmludHZhbDsNCisJfQ0K K30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfY2xrX3BoYXNlX2FkanVzdG1lbnQoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1LA0KKwkJCQkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUp DQorew0KKwlpbnQgY2xvY2sgPSBtb2RlLT5jbG9jazsNCisNCisJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0NMS19DVFJMMCwgTV9QQ0xLX0RFTEFZLA0KKwkJCWNsb2NrIDwgQURKVVNUX1BI QVNFX1RIUkVTSE9MRCA/IFBJWEVMX0NMS19ERUxBWSA6IDApOw0KKwlpdDY1MDVfc2V0X2JpdHMo aXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgVklERU9fTEFUQ0hfRURHRSwNCisJCQlQSVhFTF9DTEtf SU5WRVJTRSA8PCA0KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtfcmVzZXRfc3Rl cF90cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfVFJBSU5fQ1RSTDAsDQorCQkJRk9SQ0VfQ1JfRE9ORSB8IEZPUkNFX0VRX0RPTkUs IDB4MDApOw0KKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5f U0VULA0KKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsNCit9DQorDQorc3RhdGlj IHZvaWQgaXQ2NTA1X2luaXQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1X3dy aXRlKGl0NjUwNSwgUkVHX0FVWF9PUFQsIEFVWF9BVVRPX1JTVCB8IEFVWF9GSVhfRlJFUSk7DQor CWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhfQ1RSTCwgQVVYX05PX1NFR01FTlRfV1IpOw0K KwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSERDUF9DVFJMMiwgSERDUF9BTl9TRUwgfCBIRENQ X0hXX0hQRElSUV9BQ1QpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVklEX0JVU19DVFJM MCwgSU5fRERSIHwgRERSX0NEKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1ZJRF9CVVNf Q1RSTDEsIDB4MDEpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fQ1RSTDAsIEFV RElPXzE2Ql9CT1VORCk7DQorDQorCS8qIGNoaXAgaW50ZXJuYWwgc2V0dGluZywgZG9uJ3QgbW9k aWZ5ICovDQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19IUERfSVJRX1RJTUUsIDB4RjUpOw0K KwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0RFQlVHX01PREUsIDB4NEQpOw0KKwlpdDY1 MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX09QVDIsIDB4MTcpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfSERDUF9PUFQsIDB4NjApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfREFU QV9NVVRFX0NUUkwsDQorCQkgICAgIEVOX1ZJRF9NVVRFIHwgRU5fQVVEX01VVEUgfCBFTkFCTEVf QVVUT19WSURFT19GSUZPX1JFU0VUKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1RJTUVf U1RNUF9DVFJMLA0KKwkJICAgICBFTl9TU0NfR0FUIHwgRU5fRU5IQU5DRV9WSURfU1RNUCB8IEVO X0VOSEFOQ0VfQVVEX1NUTVApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1F X0NUUkwsIDB4MDApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDEp Ow0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfRFJWXzBfREJfODAwX01WLA0KKwkJICAgICBh ZmVfc2V0dGluZ190YWJsZVtpdDY1MDUtPmFmZV9zZXR0aW5nXVswXSk7DQorCWl0NjUwNV93cml0 ZShpdDY1MDUsIFJFR19QUkVfMF9EQl84MDBfTVYsDQorCQkgICAgIGFmZV9zZXR0aW5nX3RhYmxl W2l0NjUwNS0+YWZlX3NldHRpbmddWzFdKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1BS RV8zUDVfREJfODAwX01WLA0KKwkJICAgICBhZmVfc2V0dGluZ190YWJsZVtpdDY1MDUtPmFmZV9z ZXR0aW5nXVsyXSk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDAsIDB4OUUp Ow0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1NDX0NUUkwxLCAweDFDKTsNCisJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX1NTQ19DVFJMMiwgMHg0Mik7DQorCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV92aWRl b19kaXNhYmxlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV9zZXRfYml0cyhp dDY1MDUsIFJFR19EQVRBX01VVEVfQ1RSTCwgRU5fVklEX01VVEUsIEVOX1ZJRF9NVVRFKTsNCisJ aXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0lORk9GUkFNRV9DVFJMLCBFTl9WSURfQ1RSTF9Q S1QsIDB4MDApOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgVklE RU9fUkVTRVQsIFZJREVPX1JFU0VUKTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X3ZpZGVv X3Jlc2V0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV9saW5rX3Jlc2V0X3N0 ZXBfdHJhaW4oaXQ2NTA1KTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RBVEFfTVVU RV9DVFJMLCBFTl9WSURfTVVURSwgRU5fVklEX01VVEUpOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX1ZJRF9DVFJMX1BLVCwgMHgwMCk7DQorCWl0NjUw NV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBWSURFT19SRVNFVCwgVklERU9fUkVT RVQpOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfNTAxX0ZJRk9fQ1RSTCwgUlNUXzUw MV9GSUZPLCBSU1RfNTAxX0ZJRk8pOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfNTAx X0ZJRk9fQ1RSTCwgUlNUXzUwMV9GSUZPLCAweDAwKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX1JFU0VUX0NUUkwsIFZJREVPX1JFU0VULCAweDAwKTsNCit9DQorDQorc3RhdGljIHZv aWQgaXQ2NTA1X3VwZGF0ZV92aWRlb19wYXJhbWV0ZXIoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LA0K KwkJCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkNCit7DQorCWl0NjUw NV9jbGtfcGhhc2VfYWRqdXN0bWVudChpdDY1MDUsIG1vZGUpOw0KKwlpdDY1MDVfdmlkZW9fZGlz YWJsZShpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVfYXVkaW9faW5wdXQoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZzA1LCByZWdiZTsNCisNCisJcmVnMDUg PSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19SRVNFVF9DVFJMKTsNCisJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEFVRElPX1JFU0VULCAweDAwKTsNCisJdXNsZWVwX3Jh bmdlKDMwMDAsIDQwMDApOw0KKwlyZWdiZSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVRElP X0lOUFVUX0ZSRVEpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgcmVn MDUpOw0KKw0KKwlyZXR1cm4gcmVnYmUgIT0gMHhGRjsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2 NTA1X3NldHVwX2F1ZGlvX2NoYW5uZWxfc3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7 DQorCWVudW0gaXQ2NTA1X2F1ZGlvX3NhbXBsZV9yYXRlIHNhbXBsZV9yYXRlID0gaXQ2NTA1LT5h dWRpby5zYW1wbGVfcmF0ZTsNCisJdTggYXVkaW9fd29yZF9sZW5ndGhfbWFwW10gPSB7IDB4MDIs IDB4MDQsIDB4MDMsIDB4MEIgfTsNCisNCisJLyogQ2hhbm5lbCBTdGF0dXMgKi8NCisJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1OF9TVFMwLCBpdDY1MDUtPmF1ZGlvLnR5cGUgPDwgMSk7 DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTMSwgMHgwMCk7DQorCWl0NjUw NV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTMiwgMHgwMCk7DQorCWl0NjUwNV93cml0ZShp dDY1MDUsIFJFR19JRUM5NThfU1RTMywgc2FtcGxlX3JhdGUpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfSUVDOTU4X1NUUzQsICh+c2FtcGxlX3JhdGUgPDwgNCkgfA0KKwkJICAgICBhdWRp b193b3JkX2xlbmd0aF9tYXBbaXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aF0pOw0KK30NCisNCitz dGF0aWMgdm9pZCBpdDY1MDVfc2V0dXBfYXVkaW9fZm9ybWF0KHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCit7DQorCS8qIEkyUyBNT0RFICovDQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJ T19GTVQsDQorCQkgICAgIChpdDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoIDw8IDUpIHwNCisJCSAg ICAgKGl0NjUwNS0+YXVkaW8uaTJzX2RhdGFfc2VxdWVuY2UgPDwgNCkgfA0KKwkJICAgICAoaXQ2 NTA1LT5hdWRpby5pMnNfd3NfY2hhbm5lbCA8PCAzKSB8DQorCQkgICAgIChpdDY1MDUtPmF1ZGlv Lmkyc19kYXRhX2RlbGF5IDw8IDIpIHwNCisJCSAgICAgKGl0NjUwNS0+YXVkaW8uaTJzX2p1c3Rp ZmllZCA8PCAxKSB8DQorCQkgICAgIGl0NjUwNS0+YXVkaW8uaTJzX2lucHV0X2Zvcm1hdCk7DQor CWlmIChpdDY1MDUtPmF1ZGlvLnNlbGVjdCA9PSBTUERJRikgew0KKwkJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX0FVRElPX0ZJRk9fU0VMLCAweDAwKTsNCisJCS8qIDB4MzAgPSAxMjgqRlMgKi8N CisJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfT1BULCAweEYwLCAweDMwKTsNCisJ fSBlbHNlIHsNCisJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19GSUZPX1NFTCwgMHhF NCk7DQorCX0NCisNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkwwLCAweDIw KTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkwxLCAweDAwKTsNCit9DQor DQorc3RhdGljIHZvaWQgaXQ2NTA1X2VuYWJsZV9hdWRpb19zb3VyY2Uoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQ0KK3sNCisJdW5zaWduZWQgaW50IGF1ZGlvX3NvdXJjZV9jb3VudDsNCisNCisJYXVk aW9fc291cmNlX2NvdW50ID0gQklUKERJVl9ST1VORF9VUChpdDY1MDUtPmF1ZGlvLmNoYW5uZWxf Y291bnQsIDIpKQ0KKwkJCQkgLSAxOw0KKw0KKwlhdWRpb19zb3VyY2VfY291bnQgfD0gaXQ2NTA1 LT5hdWRpby5zZWxlY3QgPDwgNDsNCisNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElP X1NSQ19DVFJMLCBhdWRpb19zb3VyY2VfY291bnQpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1 MDVfZW5hYmxlX2F1ZGlvX2luZm9mcmFtZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJdTggYXVkaW9faW5m b19jYVtdID0geyAweDAwLCAweDAwLCAweDAxLCAweDAzLCAweDA3LCAweDBCLCAweDBGLCAweDFG IH07DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImluZm9mcmFtZSBjaGFubmVsX2Fs bG9jYXRpb246MHglMDJ4IiwNCisJCQkgICAgIGF1ZGlvX2luZm9fY2FbaXQ2NTA1LT5hdWRpby5j aGFubmVsX2NvdW50IC0gMV0pOw0KKw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVEX0lO Rk9GUkFNX0RCMSwgaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50DQorCQkgICAgIC0gMSk7DQor CWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fREIyLCAweDAwKTsNCisJaXQ2 NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9JTkZPRlJBTV9EQjMsDQorCQkgICAgIGF1ZGlvX2lu Zm9fY2FbaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50IC0gMV0pOw0KKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBSRUdfQVVEX0lORk9GUkFNX0RCNCwgMHgwMCk7DQorCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19BVURfSU5GT0ZSQU1fU1VNLCAweDAwKTsNCisNCisJLyogRW5hYmxlIEF1ZGlvIElu Zm9GcmFtZSAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkws IEVOX0FVRF9DVFJMX1BLVCwNCisJCQlFTl9BVURfQ1RSTF9QS1QpOw0KK30NCisNCitzdGF0aWMg dm9pZCBpdDY1MDVfZGlzYWJsZV9hdWRpbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlp dDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsIEVOX0FVRF9NVVRFLCBF Tl9BVURfTVVURSk7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVURJT19TUkNfQ1RS TCwgTV9BVURJT19JMlNfRU4sIDB4MDApOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf SU5GT0ZSQU1FX0NUUkwsIEVOX0FVRF9DVFJMX1BLVCwgMHgwMCk7DQorCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVURJT19SRVNFVCwgQVVESU9fUkVTRVQpOw0KK30N CisNCitzdGF0aWMgdm9pZCBpdDY1MDVfZW5hYmxlX2F1ZGlvKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlp bnQgcmVnYmU7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0YXJ0Iik7DQorCWl0 NjUwNV9kaXNhYmxlX2F1ZGlvKGl0NjUwNSk7DQorDQorCWl0NjUwNV9zZXR1cF9hdWRpb19jaGFu bmVsX3N0YXR1cyhpdDY1MDUpOw0KKwlpdDY1MDVfc2V0dXBfYXVkaW9fZm9ybWF0KGl0NjUwNSk7 DQorCWl0NjUwNV9lbmFibGVfYXVkaW9fc291cmNlKGl0NjUwNSk7DQorCWl0NjUwNV9lbmFibGVf YXVkaW9faW5mb2ZyYW1lKGl0NjUwNSk7DQorDQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19B VURJT19OXzBfNywgMHgwMCk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19OXzhf MTUsIDB4ODApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fTl8xNl8yMywgMHgw MCk7DQorDQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVURJT19TUkNfQ1RSTCwgQVVE SU9fRklGT19SRVNFVCwNCisJCQlBVURJT19GSUZPX1JFU0VUKTsNCisJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX0FVRElPX1NSQ19DVFJMLCBBVURJT19GSUZPX1JFU0VULCAweDAwKTsNCisJ aXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEFVRElPX1JFU0VULCAweDAw KTsNCisJcmVnYmUgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVURJT19JTlBVVF9GUkVRKTsN CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicmVnYmU6MHglMDJ4IGF1ZGlvIGlucHV0IGZz OiAlZC4lZCBrSHoiLA0KKwkJCSAgICAgcmVnYmUsIDY3NTAgLyByZWdiZSwgKDY3NTAgJSByZWdi ZSkgKiAxMCAvIHJlZ2JlKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RBVEFfTVVU RV9DVFJMLCBFTl9BVURfTVVURSwgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyBib29sIGl0NjUwNV91 c2Vfc3RlcF90cmFpbl9jaGVjayhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpZiAoaXQ2 NTA1LT5saW5rLnJldmlzaW9uID49IDB4MTIpDQorCQlyZXR1cm4gaXQ2NTA1LT5kcGNkW0RQX1RS QUlOSU5HX0FVWF9SRF9JTlRFUlZBTF0gPj0gMHgwMTsNCisNCisJcmV0dXJuIHRydWU7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9wYXJzZV9saW5rX2NhcGFiaWxpdGllcyhzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsNCisJc3RydWN0IGl0NjUwNV9kcm1fZHBfbGluayAqbGluayA9ICZpdDY1MDUtPmxpbms7 DQorCWludCBiY2FwczsNCisNCisJaWYgKGl0NjUwNS0+ZHBjZFswXSA9PSAwKSB7DQorCQlpdDY1 MDVfYXV4X29uKGl0NjUwNSk7DQorCQlpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9EUENEX1JF ViwgaXQ2NTA1LT5kcGNkLA0KKwkJCQlBUlJBWV9TSVpFKGl0NjUwNS0+ZHBjZCkpOw0KKwl9DQor DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkRQQ0QgUmV2LjogJWQuJWQiLA0KKwkJCSAg ICAgbGluay0+cmV2aXNpb24gPj4gNCwgbGluay0+cmV2aXNpb24gJiAweDBGKTsNCisNCisJRFJN X0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU2luayBtYXggbGluayByYXRlOiAlZC4lMDJkIEdicHMg cGVyIGxhbmUiLA0KKwkJCSAgICAgbGluay0+cmF0ZSAvIDEwMDAwMCwgbGluay0+cmF0ZSAvIDEw MDAgJSAxMDApOw0KKw0KKwlpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlID0gZHJtX2RwX2xpbmtf cmF0ZV90b19id19jb2RlKGxpbmstPnJhdGUpOw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJsaW5rIHJhdGUgYncgY29kZToweCUwMngiLA0KKwkJCSAgICAgaXQ2NTA1LT5saW5rX3JhdGVf YndfY29kZSk7DQorCWl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUgPSBtaW5fdChpbnQsIGl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGUsDQorCQkJCQkgIE1BWF9MSU5LX1JBVEUpOw0KKw0KKwlpdDY1 MDUtPmxhbmVfY291bnQgPSBsaW5rLT5udW1fbGFuZXM7DQorCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIlNpbmsgc3VwcG9ydCAlZCBsYW5lcyB0cmFpbmluZyIsDQorCQkJICAgICBpdDY1MDUt PmxhbmVfY291bnQpOw0KKwlpdDY1MDUtPmxhbmVfY291bnQgPSBtaW5fdChpbnQsIGl0NjUwNS0+ bGFuZV9jb3VudCwgTUFYX0xBTkVfQ09VTlQpOw0KKw0KKwlpdDY1MDUtPmJyYW5jaF9kZXZpY2Ug PSBkcm1fZHBfaXNfYnJhbmNoKGl0NjUwNS0+ZHBjZCk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIlNpbmsgJXNicmFuY2ggZGV2aWNlIiwNCisJCQkgICAgIGl0NjUwNS0+YnJhbmNoX2Rl dmljZSA/ICIiIDogIk5vdCAiKTsNCisNCisJaXQ2NTA1LT5lbmFibGVfZW5oYW5jZWRfZnJhbWUg PSBsaW5rLT5jYXBhYmlsaXRpZXM7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNpbmsg JXNTdXBwb3J0IEVuaGFuY2VkIEZyYW1pbmciLA0KKwkJCSAgICAgaXQ2NTA1LT5lbmFibGVfZW5o YW5jZWRfZnJhbWUgPyAiIiA6ICJOb3QgIik7DQorDQorCWl0NjUwNS0+ZW5hYmxlX3NzYyA9IChp dDY1MDUtPmRwY2RbRFBfTUFYX0RPV05TUFJFQURdICYNCisJCQkJRFBfTUFYX0RPV05TUFJFQURf MF81KTsNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiTWF4aW11bSBEb3duLVNwcmVhZDog JXMsICVzc3VwcG9ydCBTU0MhIiwNCisJCQkgICAgIGl0NjUwNS0+ZW5hYmxlX3NzYyA/ICIwLjUi IDogIjAiLA0KKwkJCSAgICAgaXQ2NTA1LT5lbmFibGVfc3NjID8gIiIgOiAiTm90ICIpOw0KKw0K KwlpdDY1MDUtPnN0ZXBfdHJhaW4gPSBpdDY1MDVfdXNlX3N0ZXBfdHJhaW5fY2hlY2soaXQ2NTA1 KTsNCisJaWYgKGl0NjUwNS0+c3RlcF90cmFpbikNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgImF1dG8gdHJhaW4gZmFpbCwgd2lsbCBzdGVwIHRyYWluIik7DQorDQorCWJjYXBzID0gaXQ2 NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX0FVWF9IRENQX0JDQVBTKTsNCisJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiYmNhcHM6MHglMDJ4IiwgYmNhcHMpOw0KKwlpZiAoYmNhcHMgJiBEUF9C Q0FQU19IRENQX0NBUEFCTEUpIHsNCisJCWl0NjUwNS0+aXNfcmVwZWF0ZXIgPSAoYmNhcHMgJiBE UF9CQ0FQU19SRVBFQVRFUl9QUkVTRU5UKTsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg IlN1cHBvcnQgSERDUCEgRG93bnN0cmVhbSBpcyAlcyEiLA0KKwkJCQkgICAgIGl0NjUwNS0+aXNf cmVwZWF0ZXIgPyAicmVwZWF0ZXIiIDoNCisJCQkJICAgICAicmVjZWl2ZXIiKTsNCisJfSBlbHNl IHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNpbmsgbm90IHN1cHBvcnQgSERDUCEi KTsNCisJCWl0NjUwNS0+aGRjcF9kZXNpcmVkID0gZmFsc2U7DQorCX0NCisJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiSERDUCAlcyIsDQorCQkJICAgICBpdDY1MDUtPmhkY3BfZGVzaXJlZCA/ ICJkZXNpcmVkIiA6ICJ1bmRlc2lyZWQiKTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X3Nl dHVwX3NzYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIFNQUkVBRF9BTVBfNSwNCisJCQlpdDY1MDUtPmVuYWJsZV9z c2MgPyBTUFJFQURfQU1QXzUgOiAweDAwKTsNCisJaWYgKGl0NjUwNS0+ZW5hYmxlX3NzYykgew0K KwkJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAxKTsNCisJCWl0NjUwNV93 cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDAsIDB4OUUpOw0KKwkJaXQ2NTA1X3dyaXRlKGl0NjUw NSwgUkVHX1NTQ19DVFJMMSwgMHgxQyk7DQorCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1ND X0NUUkwyLCAweDQyKTsNCisJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwgMHgw MCk7DQorCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1BfQ1RSTDAsIDB4MDcpOw0KKwkJaXQ2 NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lQX0NUUkwxLCAweDI5KTsNCisJCWl0NjUwNV93cml0ZShp dDY1MDUsIFJFR19JUF9DVFJMMiwgMHgwMyk7DQorCQkvKiBTdGFtcCBJbnRlcnJ1cHQgU3RlcCAq Lw0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLCBNX1NUQU1Q X1NURVAsDQorCQkJCTB4MTApOw0KKwkJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9ET1dO U1BSRUFEX0NUUkwsDQorCQkJCSAgRFBfU1BSRUFEX0FNUF8wXzUpOw0KKwl9IGVsc2Ugew0KKwkJ aXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9ET1dOU1BSRUFEX0NUUkwsIDB4MDApOw0KKwkJ aXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLCBNX1NUQU1QX1NURVAs DQorCQkJCTB4MDApOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpdDY1MDVfbGlu a19yYXRlX3NldHVwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19UUkFJTl9DVFJMMCwgRk9SQ0VfTEJSLA0KKwkJCShpdDY1MDUtPmxpbmtf cmF0ZV9id19jb2RlID09IFJCUikgPyBGT1JDRV9MQlIgOiAweDAwKTsNCisJaXQ2NTA1X3NldF9i aXRzKGl0NjUwNSwgUkVHX0xJTktfRFJWLCBEUlZfSFMsDQorCQkJKGl0NjUwNS0+bGlua19yYXRl X2J3X2NvZGUgPT0gUkJSKSA/IDB4MDAgOiBEUlZfSFMpOw0KK30NCisNCitzdGF0aWMgdm9pZCBp dDY1MDVfbGFuZV9jb3VudF9zZXR1cChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1 MDVfZ2V0X2V4dGNvbl9wcm9wZXJ0eShpdDY1MDUpOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1 LCBSRUdfVFJBSU5fQ1RSTDAsIExBTkVfU1dBUCwNCisJCQlpdDY1MDUtPmxhbmVfc3dhcCA/IExB TkVfU1dBUCA6IDB4MDApOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RS TDAsIExBTkVfQ09VTlRfTUFTSywNCisJCQkoaXQ2NTA1LT5sYW5lX2NvdW50IC0gMSkgPDwgMSk7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9saW5rX3RyYWluaW5nX3NldHVwKHN0cnVjdCBp dDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVu dC0+ZGV2Ow0KKw0KKwlpZiAoaXQ2NTA1LT5lbmFibGVfZW5oYW5jZWRfZnJhbWUpDQorCQlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsDQorCQkJCUVOQUJMRV9FTkhB TkNFRF9GUkFNRSwgRU5BQkxFX0VOSEFOQ0VEX0ZSQU1FKTsNCisNCisJaXQ2NTA1X2xpbmtfcmF0 ZV9zZXR1cChpdDY1MDUpOw0KKwlpdDY1MDVfbGFuZV9jb3VudF9zZXR1cChpdDY1MDUpOw0KKwlp dDY1MDVfc2V0dXBfc3NjKGl0NjUwNSk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwNCisJ CQkgICAgICIlcywgJWQgbGFuZXMsICVzYWJsZSBzc2MsICVzYWJsZSBlbmhhbmNlZCBmcmFtZSIs DQorCQkJICAgICBpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlICE9IFJCUiA/ICJIQlIiIDogIlJC UiIsDQorCQkJICAgICBpdDY1MDUtPmxhbmVfY291bnQsDQorCQkJICAgICBpdDY1MDUtPmVuYWJs ZV9zc2MgPyAiZW4iIDogImRpcyIsDQorCQkJICAgICBpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9m cmFtZSA/ICJlbiIgOiAiZGlzIik7DQorfQ0KKw0KK3N0YXRpYyBib29sIGl0NjUwNV9saW5rX3N0 YXJ0X2F1dG9fdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHRpbWVvdXQg PSA1MDAsIGxpbmtfdHJhaW5pbmdfc3RhdGU7DQorCWJvb2wgc3RhdGUgPSBmYWxzZTsNCisNCisJ bXV0ZXhfbG9jaygmaXQ2NTA1LT5hdXhfbG9jayk7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUs IFJFR19UUkFJTl9DVFJMMCwNCisJCQlGT1JDRV9DUl9ET05FIHwgRk9SQ0VfRVFfRE9ORSwgMHgw MCk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19UUkFJTl9DVFJMMSwgRk9SQ0VfUkVUUkFJ Tik7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19UUkFJTl9DVFJMMSwgQVVUT19UUkFJTik7 DQorDQorCXdoaWxlICh0aW1lb3V0ID4gMCkgew0KKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDAp Ow0KKwkJbGlua190cmFpbmluZ19zdGF0ZSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0xJTktf VFJBSU5fU1RTKTsNCisNCisJCWlmIChsaW5rX3RyYWluaW5nX3N0YXRlID4gMCAmJg0KKwkJICAg IChsaW5rX3RyYWluaW5nX3N0YXRlICYgTElOS19TVEFURV9OT1JQKSkgew0KKwkJCXN0YXRlID0g dHJ1ZTsNCisJCQlnb3RvIHVubG9jazsNCisJCX0NCisNCisJCXRpbWVvdXQtLTsNCisJfQ0KK3Vu bG9jazoNCisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPmF1eF9sb2NrKTsNCisNCisJcmV0dXJuIHN0 YXRlOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9kcm1fZHBfbGlua19jb25maWd1cmUoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJdTggdmFsdWVzWzJdOw0KKwlpbnQgZXJyOw0KKwlz dHJ1Y3QgZHJtX2RwX2F1eCAqYXV4ID0gJml0NjUwNS0+YXV4Ow0KKw0KKwl2YWx1ZXNbMF0gPSBp dDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlOw0KKwl2YWx1ZXNbMV0gPSBpdDY1MDUtPmxhbmVfY291 bnQ7DQorDQorCWlmIChpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFtZSkNCisJCXZhbHVlc1sx XSB8PSBEUF9MQU5FX0NPVU5UX0VOSEFOQ0VEX0ZSQU1FX0VOOw0KKw0KKwllcnIgPSBkcm1fZHBf ZHBjZF93cml0ZShhdXgsIERQX0xJTktfQldfU0VULCB2YWx1ZXMsIHNpemVvZih2YWx1ZXMpKTsN CisJaWYgKGVyciA8IDApDQorCQlyZXR1cm4gZXJyOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQor c3RhdGljIGJvb2wgaXQ2NTA1X2NoZWNrX3ZvbHRhZ2Vfc3dpbmdfbWF4KHU4IGxhbmVfdm9sdGFn ZV9zd2luZ19wcmVfZW1waGFzaXMpDQorew0KKwlyZXR1cm4gKChsYW5lX3ZvbHRhZ2Vfc3dpbmdf cHJlX2VtcGhhc2lzICYgMHgwMykgPT0gTUFYX0NSX0xFVkVMKTsNCit9DQorDQorc3RhdGljIGJv b2wgaXQ2NTA1X2NoZWNrX3ByZV9lbXBoYXNpc19tYXgodTggbGFuZV92b2x0YWdlX3N3aW5nX3By ZV9lbXBoYXNpcykNCit7DQorCXJldHVybiAoKGxhbmVfdm9sdGFnZV9zd2luZ19wcmVfZW1waGFz aXMgJiAweDAzKSA9PSBNQVhfRVFfTEVWRUwpOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVf Y2hlY2tfbWF4X3ZvbHRhZ2Vfc3dpbmdfcmVhY2hlZCh1OCAqbGFuZV92b2x0YWdlX3N3aW5nLA0K KwkJCQkJCSAgIHU4IGxhbmVfY291bnQpDQorew0KKwl1OCBpOw0KKw0KKwlmb3IgKGkgPSAwOyBp IDwgbGFuZV9jb3VudDsgaSsrKSB7DQorCQlpZiAobGFuZV92b2x0YWdlX3N3aW5nW2ldICYgRFBf VFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQpDQorCQkJcmV0dXJuIHRydWU7DQorCX0NCisNCisJcmV0 dXJuIGZhbHNlOw0KK30NCisNCitzdGF0aWMgYm9vbA0KK3N0ZXBfdHJhaW5fbGFuZV92b2x0YWdl X3BhcmFfc2V0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCisJCQkJIHN0cnVjdCBpdDY1MDVfc3Rl cF90cmFpbl9wYXJhDQorCQkJCSAqbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcywNCisJCQkJIHU4 ICpsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldCkNCit7DQorCXU4ICp2b2x0YWdlX3N3aW5n ID0gbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZzsNCisJdTggKnByZV9l bXBoYXNpcyA9IGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpczsNCisJdTgg aTsNCisNCisJZm9yIChpID0gMDsgaSA8IGl0NjUwNS0+bGFuZV9jb3VudDsgaSsrKSB7DQorCQl2 b2x0YWdlX3N3aW5nW2ldICY9IDB4MDM7DQorCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3Nl dFtpXSA9IHZvbHRhZ2Vfc3dpbmdbaV07DQorCQlpZiAoaXQ2NTA1X2NoZWNrX3ZvbHRhZ2Vfc3dp bmdfbWF4KHZvbHRhZ2Vfc3dpbmdbaV0pKQ0KKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNf c2V0W2ldIHw9DQorCQkJCURQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVEOw0KKw0KKwkJcHJlX2Vt cGhhc2lzW2ldICY9IDB4MDM7DQorCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSB8 PSBwcmVfZW1waGFzaXNbaV0NCisJCQk8PCBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7DQor CQlpZiAoaXQ2NTA1X2NoZWNrX3ByZV9lbXBoYXNpc19tYXgocHJlX2VtcGhhc2lzW2ldKSkNCisJ CQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSB8PQ0KKwkJCQlEUF9UUkFJTl9NQVhf UFJFX0VNUEhBU0lTX1JFQUNIRUQ7DQorCQlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RS QUlOSU5HX0xBTkUwX1NFVCArIGksDQorCQkJCSAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpc19z ZXRbaV0pOw0KKw0KKwkJaWYgKGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0W2ldICE9DQor CQkgICAgaXQ2NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX1RSQUlOSU5HX0xBTkUwX1NFVCArIGkp KQ0KKwkJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwlyZXR1cm4gdHJ1ZTsNCit9DQorDQorc3Rh dGljIGJvb2wNCitpdDY1MDVfc3RlcF9jcl90cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsDQor CQkgICAgIHN0cnVjdCBpdDY1MDVfc3RlcF90cmFpbl9wYXJhICpsYW5lX3ZvbHRhZ2VfcHJlX2Vt cGhhc2lzKQ0KK3sNCisJdTggbG9vcF9jb3VudCA9IDAsIGkgPSAwLCBqOw0KKwl1OCBsaW5rX3N0 YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSA9IHsgMCB9Ow0KKwl1OCBsYW5lX2xldmVsX2NvbmZp Z1tNQVhfTEFORV9DT1VOVF0gPSB7IDAgfTsNCisJaW50IHByZV9lbXBoYXNpc19hZGp1c3QgPSAt MSwgdm9sdGFnZV9zd2luZ19hZGp1c3QgPSAtMTsNCisJY29uc3Qgc3RydWN0IGRybV9kcF9hdXgg KmF1eCA9ICZpdDY1MDUtPmF1eDsNCisNCisJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9E T1dOU1BSRUFEX0NUUkwsDQorCQkJICBpdDY1MDUtPmVuYWJsZV9zc2MgPyBEUF9TUFJFQURfQU1Q XzBfNSA6IDB4MDApOw0KKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BB VFRFUk5fU0VULA0KKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl8xKTsNCisNCisJd2hpbGUgKGxv b3BfY291bnQgPCA1ICYmIGkgPCAxMCkgew0KKwkJaSsrOw0KKwkJaWYgKCFzdGVwX3RyYWluX2xh bmVfdm9sdGFnZV9wYXJhX3NldChpdDY1MDUsDQorCQkJCQkJICAgICAgbGFuZV92b2x0YWdlX3By ZV9lbXBoYXNpcywNCisJCQkJCQkgICAgICBsYW5lX2xldmVsX2NvbmZpZykpDQorCQkJY29udGlu dWU7DQorCQlkcm1fZHBfbGlua190cmFpbl9jbG9ja19yZWNvdmVyeV9kZWxheShhdXgsIGl0NjUw NS0+ZHBjZCk7DQorCQlkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwg bGlua19zdGF0dXMpOw0KKw0KKwkJaWYgKGRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhsaW5rX3N0 YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0KKwkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUs IFJFR19UUkFJTl9DVFJMMCwgRk9SQ0VfQ1JfRE9ORSwNCisJCQkJCUZPUkNFX0NSX0RPTkUpOw0K KwkJCXJldHVybiB0cnVlOw0KKwkJfQ0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoJml0NjUwNS0+ Y2xpZW50LT5kZXYsICJjciBub3QgZG9uZSIpOw0KKw0KKwkJaWYgKGl0NjUwNV9jaGVja19tYXhf dm9sdGFnZV9zd2luZ19yZWFjaGVkKGxhbmVfbGV2ZWxfY29uZmlnLA0KKwkJCQkJCQkgICBpdDY1 MDUtPmxhbmVfY291bnQpKQ0KKwkJCWdvdG8gY3JfdHJhaW5fZmFpbDsNCisNCisJCWZvciAoaiA9 IDA7IGogPCBpdDY1MDUtPmxhbmVfY291bnQ7IGorKykgew0KKwkJCWxhbmVfdm9sdGFnZV9wcmVf ZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal0gPQ0KKwkJCQlkcm1fZHBfZ2V0X2FkanVzdF9yZXF1 ZXN0X3ZvbHRhZ2UobGlua19zdGF0dXMsDQorCQkJCQkJCQkgIGopID4+DQorCQkJCURQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfU0hJRlQ7DQorCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJl X2VtcGhhc2lzW2pdID0NCisJCQlkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNp cyhsaW5rX3N0YXR1cywNCisJCQkJCQkJICAgICAgIGopID4+DQorCQkJCQlEUF9UUkFJTl9QUkVf RU1QSEFTSVNfU0hJRlQ7DQorCQkJaWYgKHZvbHRhZ2Vfc3dpbmdfYWRqdXN0ID09DQorCQkJICAg ICBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5nW2pdICYmDQorCQkJICAg IHByZV9lbXBoYXNpc19hZGp1c3QgPT0NCisJCQkgICAgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFz aXMtPnByZV9lbXBoYXNpc1tqXSkgew0KKwkJCQlsb29wX2NvdW50Kys7DQorCQkJCWNvbnRpbnVl Ow0KKwkJCX0NCisNCisJCQl2b2x0YWdlX3N3aW5nX2FkanVzdCA9DQorCQkJCWxhbmVfdm9sdGFn ZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal07DQorCQkJcHJlX2VtcGhhc2lzX2FkanVz dCA9DQorCQkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tqXTsNCisJ CQlsb29wX2NvdW50ID0gMDsNCisNCisJCQlpZiAodm9sdGFnZV9zd2luZ19hZGp1c3QgKyBwcmVf ZW1waGFzaXNfYWRqdXN0ID4NCisJCQkgICAgTUFYX0VRX0xFVkVMKQ0KKwkJCQlsYW5lX3ZvbHRh Z2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5nW2pdID0NCisJCQkJCU1BWF9FUV9MRVZFTCAt DQorCQkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzDQorCQkJCQkJLT5wcmVfZW1waGFzaXNb al07DQorCQl9DQorCX0NCisNCitjcl90cmFpbl9mYWlsOg0KKwlpdDY1MDVfZHBjZF93cml0ZShp dDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULA0KKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVS Tl9ESVNBQkxFKTsNCisNCisJcmV0dXJuIGZhbHNlOw0KK30NCisNCitzdGF0aWMgYm9vbA0KK2l0 NjUwNV9zdGVwX2VxX3RyYWluKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCisJCSAgICAgc3RydWN0 IGl0NjUwNV9zdGVwX3RyYWluX3BhcmEgKmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpDQorew0K Kwl1OCBsb29wX2NvdW50ID0gMCwgaSwgbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0g PSB7IDAgfTsNCisJdTggbGFuZV9sZXZlbF9jb25maWdbTUFYX0xBTkVfQ09VTlRdID0geyAwIH07 DQorCWNvbnN0IHN0cnVjdCBkcm1fZHBfYXV4ICphdXggPSAmaXQ2NTA1LT5hdXg7DQorDQorCWl0 NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsDQorCQkJICBE UF9UUkFJTklOR19QQVRURVJOXzIpOw0KKw0KKwl3aGlsZSAobG9vcF9jb3VudCA8IDYpIHsNCisJ CWxvb3BfY291bnQrKzsNCisNCisJCWlmICghc3RlcF90cmFpbl9sYW5lX3ZvbHRhZ2VfcGFyYV9z ZXQoaXQ2NTA1LA0KKwkJCQkJCSAgICAgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMsDQorCQkJ CQkJICAgICAgbGFuZV9sZXZlbF9jb25maWcpKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJZHJtX2Rw X2xpbmtfdHJhaW5fY2hhbm5lbF9lcV9kZWxheShhdXgsIGl0NjUwNS0+ZHBjZCk7DQorCQlkcm1f ZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwgbGlua19zdGF0dXMpOw0KKw0K KwkJaWYgKCFkcm1fZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGl0NjUwNS0+bGFu ZV9jb3VudCkpDQorCQkJZ290byBlcV90cmFpbl9mYWlsOw0KKw0KKwkJaWYgKGRybV9kcF9jaGFu bmVsX2VxX29rKGxpbmtfc3RhdHVzLCBpdDY1MDUtPmxhbmVfY291bnQpKSB7DQorCQkJaXQ2NTA1 X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwNCisJCQkJCSAgRFBf VFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsNCisJCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBS RUdfVFJBSU5fQ1RSTDAsIEZPUkNFX0VRX0RPTkUsDQorCQkJCQlGT1JDRV9FUV9ET05FKTsNCisJ CQlyZXR1cm4gdHJ1ZTsNCisJCX0NCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKCZpdDY1MDUtPmNs aWVudC0+ZGV2LCAiZXEgbm90IGRvbmUiKTsNCisNCisJCWZvciAoaSA9IDA7IGkgPCBpdDY1MDUt PmxhbmVfY291bnQ7IGkrKykgew0KKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRh Z2Vfc3dpbmdbaV0gPQ0KKwkJCQlkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ZvbHRhZ2UobGlu a19zdGF0dXMsDQorCQkJCQkJCQkgIGkpID4+DQorCQkJCURQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf U0hJRlQ7DQorCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldID0N CisJCQlkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNpcyhsaW5rX3N0YXR1cywN CisJCQkJCQkJICAgICAgIGkpID4+DQorCQkJCQlEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7 DQorDQorCQkJaWYgKGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbaV0g Kw0KKwkJCQkgICAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldID4N CisJCQkgICAgTUFYX0VRX0xFVkVMKQ0KKwkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52 b2x0YWdlX3N3aW5nW2ldID0NCisJCQkJCTB4MDMgLSBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lz DQorCQkJCQkJICAgICAgIC0+cHJlX2VtcGhhc2lzW2ldOw0KKwkJfQ0KKwl9DQorDQorZXFfdHJh aW5fZmFpbDoNCisJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJO X1NFVCwNCisJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7DQorCXJldHVybiBmYWxz ZTsNCit9DQorDQorc3RhdGljIGJvb2wgaXQ2NTA1X2xpbmtfc3RhcnRfc3RlcF90cmFpbihzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpbnQgZXJyOw0KKwlzdHJ1Y3QgaXQ2NTA1X3N0ZXBf dHJhaW5fcGFyYSBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzID0gew0KKwkJLnZvbHRhZ2Vfc3dp bmcgPSB7IDAgfSwNCisJCS5wcmVfZW1waGFzaXMgPSB7IDAgfSwNCisJfTsNCisNCisJRFJNX0RF Vl9ERUJVR19EUklWRVIoJml0NjUwNS0+Y2xpZW50LT5kZXYsICJzdGFydCIpOw0KKwllcnIgPSBp dDY1MDVfZHJtX2RwX2xpbmtfY29uZmlndXJlKGl0NjUwNSk7DQorDQorCWlmIChlcnIgPCAwKQ0K KwkJcmV0dXJuIGZhbHNlOw0KKwlpZiAoIWl0NjUwNV9zdGVwX2NyX3RyYWluKGl0NjUwNSwgJmxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKwlpZiAoIWl0NjUw NV9zdGVwX2VxX3RyYWluKGl0NjUwNSwgJmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpKQ0KKwkJ cmV0dXJuIGZhbHNlOw0KKwlyZXR1cm4gdHJ1ZTsNCit9DQorDQorc3RhdGljIGJvb2wgaXQ2NTA1 X2dldF92aWRlb19zdGF0dXMoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZ18w ZDsNCisNCisJcmVnXzBkID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfU1lTVEVNX1NUUyk7DQor DQorCWlmIChyZWdfMGQgPCAwKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKw0KKwlyZXR1cm4gcmVnXzBk ICYgVklERU9fU1RCOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfcmVzZXRfaGRjcChzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDUtPmhkY3Bfc3RhdHVzID0gSERDUF9BVVRI X0lETEU7DQorCS8qIERpc2FibGUgQ1BfRGVzaXJlZCAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfSERDUF9DVFJMMSwgSERDUF9DUF9FTkFCTEUsIDB4MDApOw0KKwlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgSERDUF9SRVNFVCwgSERDUF9SRVNFVCk7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9zdGFydF9oZGNwKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0K KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCIpOw0KKwlpdDY1MDVfcmVzZXRfaGRj cChpdDY1MDUpOw0KKwlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3dxLCAmaXQ2NTA1LT5oZGNw X3dvcmssDQorCQkJICAgbXNlY3NfdG9famlmZmllcygyNDAwKSk7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIGl0NjUwNV9zdG9wX2hkY3Aoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1 X3Jlc2V0X2hkY3AoaXQ2NTA1KTsNCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmaXQ2NTA1LT5oZGNw X3dvcmspOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVfaGRjcF9pc19rc3ZfdmFsaWQodTgg KmtzdikNCit7DQorCWludCBpLCBvbmVzID0gMDsNCisNCisJLyogS1NWIGhhcyAyMCAxJ3MgYW5k IDIwIDAncyAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgRFJNX0hEQ1BfS1NWX0xFTjsgaSsrKQ0KKwkJ b25lcyArPSBod2VpZ2h0OChrc3ZbaV0pOw0KKwlpZiAob25lcyAhPSAyMCkNCisJCXJldHVybiBm YWxzZTsNCisJcmV0dXJuIHRydWU7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9oZGNwX3Bh cnQxX2F1dGgoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCXU4IGhkY3BfYmNhcHM7DQorDQorCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBIRENQX1JFU0VULCAweDAwKTsNCisJLyog RGlzYWJsZSBDUF9EZXNpcmVkICovDQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQ X0NUUkwxLCBIRENQX0NQX0VOQUJMRSwgMHgwMCk7DQorDQorCXVzbGVlcF9yYW5nZSgxMDAwLCAx NTAwKTsNCisJaGRjcF9iY2FwcyA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9BVVhfSERD UF9CQ0FQUyk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkRQQ0RbMHg2ODAyOF06IDB4 JTAyeCIsDQorCQkJICAgICBoZGNwX2JjYXBzKTsNCisNCisJaWYgKCFoZGNwX2JjYXBzKQ0KKwkJ cmV0dXJuOw0KKw0KKwkvKiBjbGVhciB0aGUgcmVwZWF0ZXIgTGlzdCBDaGsgRG9uZSBhbmQgZmFp bCBiaXQgKi8NCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwNCisJ CQlIRENQX1RSSUdHRVJfS1NWX0RPTkUgfCBIRENQX1RSSUdHRVJfS1NWX0ZBSUwsDQorCQkJMHgw MCk7DQorDQorCS8qIEVuYWJsZSBBbiBHZW5lcmF0b3IgKi8NCisJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhEQ1BfQU5fR0VOLCBIRENQX0FOX0dFTik7DQorCS8qIGRl bGF5MW1zKDEwKTsqLw0KKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAwKTsNCisJLyogU3RvcCBB biBHZW5lcmF0b3IgKi8NCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIs IEhEQ1BfQU5fR0VOLCAweDAwKTsNCisNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hE Q1BfQ1RSTDEsIEhEQ1BfQ1BfRU5BQkxFLCBIRENQX0NQX0VOQUJMRSk7DQorDQorCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsIEhEQ1BfVFJJR0dFUl9TVEFSVCwNCisJ CQlIRENQX1RSSUdHRVJfU1RBUlQpOw0KKw0KKwlpdDY1MDUtPmhkY3Bfc3RhdHVzID0gSERDUF9B VVRIX0dPSU5HOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9zaGExX2RpZ2VzdChzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUsIHU4ICpzaGExX2lucHV0LA0KKwkJCSAgICAgIHVuc2lnbmVkIGludCBz aXplLCB1OCAqb3V0cHV0X2F2KQ0KK3sNCisJc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2M7DQorCXN0 cnVjdCBjcnlwdG9fc2hhc2ggKnRmbTsNCisJaW50IGVycjsNCisJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCXRmbSA9IGNyeXB0b19hbGxvY19zaGFzaCgi c2hhMSIsIDAsIDApOw0KKwlpZiAoSVNfRVJSKHRmbSkpIHsNCisJCWRldl9lcnIoZGV2LCAiY3J5 cHRvX2FsbG9jX3NoYXNoIHNoYTEgZmFpbGVkIik7DQorCQlyZXR1cm4gUFRSX0VSUih0Zm0pOw0K Kwl9DQorCWRlc2MgPSBremFsbG9jKHNpemVvZigqZGVzYykgKyBjcnlwdG9fc2hhc2hfZGVzY3Np emUodGZtKSwgR0ZQX0tFUk5FTCk7DQorCWlmICghZGVzYykgew0KKwkJY3J5cHRvX2ZyZWVfc2hh c2godGZtKTsNCisJCXJldHVybiAtRU5PTUVNOw0KKwl9DQorDQorCWRlc2MtPnRmbSA9IHRmbTsN CisJZXJyID0gY3J5cHRvX3NoYXNoX2RpZ2VzdChkZXNjLCBzaGExX2lucHV0LCBzaXplLCBvdXRw dXRfYXYpOw0KKwlpZiAoZXJyKQ0KKwkJZGV2X2VycihkZXYsICJjcnlwdG9fc2hhc2hfZGlnZXN0 IHNoYTEgZmFpbGVkIik7DQorDQorCWNyeXB0b19mcmVlX3NoYXNoKHRmbSk7DQorCWtmcmVlKGRl c2MpOw0KKwlyZXR1cm4gZXJyOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9zZXR1cF9zaGEx X2lucHV0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdTggKnNoYTFfaW5wdXQpDQorew0KKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJdTggYmluZm9bMl07DQor CWludCBkb3duX3N0cmVhbV9jb3VudCwgaSwgZXJyLCBtc2dfY291bnQgPSAwOw0KKw0KKwllcnIg PSBpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9BVVhfSERDUF9CSU5GTywgYmluZm8sDQorCQkJ ICAgICAgQVJSQVlfU0laRShiaW5mbykpOw0KKw0KKwlpZiAoZXJyIDwgMCkgew0KKwkJZGV2X2Vy cihkZXYsICJSZWFkIGJpbmZvIHZhbHVlIEZhaWwiKTsNCisJCXJldHVybiBlcnI7DQorCX0NCisN CisJZG93bl9zdHJlYW1fY291bnQgPSBiaW5mb1swXSAmIDB4N0Y7DQorCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgImJpbmZvOjB4JSpwaCIsIChpbnQpQVJSQVlfU0laRShiaW5mbyksDQorCQkJ ICAgICBiaW5mbyk7DQorDQorCWlmICgoYmluZm9bMF0gJiBCSVQoNykpIHx8IChiaW5mb1sxXSAm IEJJVCgzKSkpIHsNCisJCWRldl9lcnIoZGV2LCAiSERDUCBtYXggY2FzY2FkZSBkZXZpY2UgZXhj ZWVkIik7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwlpZiAoIWRvd25fc3RyZWFtX2NvdW50IHx8 DQorCSAgICBkb3duX3N0cmVhbV9jb3VudCA+IE1BWF9IRENQX0RPV05fU1RSRUFNX0NPVU5UKSB7 DQorCQlkZXZfZXJyKGRldiwgIkhEQ1AgZG93biBzdHJlYW0gY291bnQgRXJyb3IgJWQiLA0KKwkJ CWRvd25fc3RyZWFtX2NvdW50KTsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCWZvciAoaSA9IDA7 IGkgPCBkb3duX3N0cmVhbV9jb3VudDsgaSsrKSB7DQorCQllcnIgPSBpdDY1MDVfZ2V0X2RwY2Qo aXQ2NTA1LCBEUF9BVVhfSERDUF9LU1ZfRklGTyArDQorCQkJCSAgICAgIChpICUgMykgKiBEUk1f SERDUF9LU1ZfTEVOLA0KKwkJCQkgICAgICBzaGExX2lucHV0ICsgbXNnX2NvdW50LA0KKwkJCQkg ICAgICBEUk1fSERDUF9LU1ZfTEVOKTsNCisNCisJCWlmIChlcnIgPCAwKQ0KKwkJCXJldHVybiBl cnI7DQorDQorCQltc2dfY291bnQgKz0gNTsNCisJfQ0KKw0KKwlpdDY1MDUtPmhkY3BfZG93bl9z dHJlYW1fY291bnQgPSBkb3duX3N0cmVhbV9jb3VudDsNCisJc2hhMV9pbnB1dFttc2dfY291bnQr K10gPSBiaW5mb1swXTsNCisJc2hhMV9pbnB1dFttc2dfY291bnQrK10gPSBiaW5mb1sxXTsNCisN CisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhEQ1BfRU5fTTBfUkVB RCwNCisJCQlIRENQX0VOX00wX1JFQUQpOw0KKw0KKwllcnIgPSByZWdtYXBfYnVsa19yZWFkKGl0 NjUwNS0+cmVnbWFwLCBSRUdfTTBfMF83LA0KKwkJCSAgICAgICBzaGExX2lucHV0ICsgbXNnX2Nv dW50LCA4KTsNCisNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhE Q1BfRU5fTTBfUkVBRCwgMHgwMCk7DQorDQorCWlmIChlcnIgPCAwKSB7DQorCQlkZXZfZXJyKGRl diwgIiBXYXJuaW5nLCBSZWFkIE0gdmFsdWUgRmFpbCIpOw0KKwkJcmV0dXJuIGVycjsNCisJfQ0K Kw0KKwltc2dfY291bnQgKz0gODsNCisNCisJcmV0dXJuIG1zZ19jb3VudDsNCit9DQorDQorc3Rh dGljIGJvb2wgaXQ2NTA1X2hkY3BfcGFydDJfa3N2bGlzdF9jaGVjayhzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsN CisJdTggYXZbNV1bNF0sIGJ2WzVdWzRdOw0KKwlpbnQgaSwgZXJyOw0KKw0KKwlpID0gaXQ2NTA1 X3NldHVwX3NoYTFfaW5wdXQoaXQ2NTA1LCBpdDY1MDUtPnNoYTFfaW5wdXQpOw0KKwlpZiAoaSA8 PSAwKSB7DQorCQlkZXZfZXJyKGRldiwgIlNIQS0xIElucHV0IGxlbmd0aCBlcnJvciAlZCIsIGkp Ow0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCWl0NjUwNV9zaGExX2RpZ2VzdChpdDY1MDUs IGl0NjUwNS0+c2hhMV9pbnB1dCwgaSwgKHU4ICopYXYpOw0KKw0KKwllcnIgPSBpdDY1MDVfZ2V0 X2RwY2QoaXQ2NTA1LCBEUF9BVVhfSERDUF9WX1BSSU1FKDApLCAodTggKilidiwNCisJCQkgICAg ICBzaXplb2YoYnYpKTsNCisNCisJaWYgKGVyciA8IDApIHsNCisJCWRldl9lcnIoZGV2LCAiUmVh ZCBWJyB2YWx1ZSBGYWlsIik7DQorCQlyZXR1cm4gZmFsc2U7DQorCX0NCisNCisJZm9yIChpID0g MDsgaSA8IDU7IGkrKykNCisJCWlmIChidltpXVszXSAhPSBhdltpXVswXSB8fCBidltpXVsyXSAh PSBhdltpXVsxXSB8fA0KKwkJICAgIGJ2W2ldWzFdICE9IGF2W2ldWzJdIHx8IGJ2W2ldWzBdICE9 IGF2W2ldWzNdKQ0KKwkJCXJldHVybiBmYWxzZTsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAiVicgYWxsIG1hdGNoISEiKTsNCisJcmV0dXJuIHRydWU7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIGl0NjUwNV9oZGNwX3dhaXRfa3N2X2xpc3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0K K3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBp dDY1MDUsDQorCQkJCQkgICAgIGhkY3Bfd2FpdF9rc3ZfbGlzdCk7DQorCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwl1bnNpZ25lZCBpbnQgdGltZW91dCA9IDUw MDA7DQorCXU4IGJzdGF0dXMgPSAwOw0KKwlib29sIGtzdl9saXN0X2NoZWNrOw0KKw0KKwl0aW1l b3V0IC89IDIwOw0KKwl3aGlsZSAodGltZW91dCA+IDApIHsNCisJCWlmICghaXQ2NTA1X2dldF9z aW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkNCisJCQlyZXR1cm47DQorDQorCQlic3RhdHVzID0gaXQ2 NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX0FVWF9IRENQX0JTVEFUVVMpOw0KKw0KKwkJaWYgKGJz dGF0dXMgJiBEUF9CU1RBVFVTX1JFQURZKQ0KKwkJCWJyZWFrOw0KKw0KKwkJbXNsZWVwKDIwKTsN CisJCXRpbWVvdXQtLTsNCisJfQ0KKw0KKwlpZiAodGltZW91dCA9PSAwKSB7DQorCQlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJ0aW1lb3V0IGFuZCBrc3YgbGlzdCB3YWl0IGZhaWxlZCIpOw0K KwkJZ290byB0aW1lb3V0Ow0KKwl9DQorDQorCWtzdl9saXN0X2NoZWNrID0gaXQ2NTA1X2hkY3Bf cGFydDJfa3N2bGlzdF9jaGVjayhpdDY1MDUpOw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJrc3YgbGlzdCByZWFkeSwga3N2IGxpc3QgY2hlY2sgJXMiLA0KKwkJCSAgICAga3N2X2xpc3Rf Y2hlY2sgPyAicGFzcyIgOiAiZmFpbCIpOw0KKwlpZiAoa3N2X2xpc3RfY2hlY2spIHsNCisJCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsDQorCQkJCUhEQ1BfVFJJR0dF Ul9LU1ZfRE9ORSwgSERDUF9UUklHR0VSX0tTVl9ET05FKTsNCisJCXJldHVybjsNCisJfQ0KK3Rp bWVvdXQ6DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsDQorCQkJ SERDUF9UUklHR0VSX0tTVl9ET05FIHwgSERDUF9UUklHR0VSX0tTVl9GQUlMLA0KKwkJCUhEQ1Bf VFJJR0dFUl9LU1ZfRE9ORSB8IEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCk7DQorfQ0KKw0KK3N0YXRp YyB2b2lkIGl0NjUwNV9oZGNwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJ c3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY1MDUs DQorCQkJCQkgICAgIGhkY3Bfd29yay53b3JrKTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0 NjUwNS0+Y2xpZW50LT5kZXY7DQorCWludCByZXQ7DQorCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktf U1RBVFVTX1NJWkVdID0geyAwIH07DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0 YXJ0Iik7DQorDQorCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkNCisJ CXJldHVybjsNCisNCisJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZF9saW5rX3N0YXR1cygmaXQ2NTA1 LT5hdXgsIGxpbmtfc3RhdHVzKTsNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicmV0OiAl ZCBsaW5rX3N0YXR1czogJSpwaCIsIHJldCwNCisJCQkgICAgIChpbnQpc2l6ZW9mKGxpbmtfc3Rh dHVzKSwgbGlua19zdGF0dXMpOw0KKw0KKwlpZiAocmV0IDwgMCB8fCAhZHJtX2RwX2NoYW5uZWxf ZXFfb2sobGlua19zdGF0dXMsIGl0NjUwNS0+bGFuZV9jb3VudCkgfHwNCisJICAgICFpdDY1MDVf Z2V0X3ZpZGVvX3N0YXR1cyhpdDY1MDUpKSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJsaW5rIHRyYWluIG5vdCBkb25lIG9yIG5vIHZpZGVvIik7DQorCQlyZXR1cm47DQorCX0NCisN CisJcmV0ID0gaXQ2NTA1X2dldF9kcGNkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfQktTViwgaXQ2NTA1 LT5ia3N2cywNCisJCQkgICAgICBBUlJBWV9TSVpFKGl0NjUwNS0+YmtzdnMpKTsNCisJaWYgKHJl dCA8IDApIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBnZXQgYmtzdiAgcmV0OiAlZCIsIHJl dCk7DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9UUklHR0VSLA0KKwkJCQlI RENQX1RSSUdHRVJfS1NWX0ZBSUwsIEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCk7DQorCX0NCisNCisJ RFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmtzdiA9IDB4JSpwaCIsDQorCQkJICAgICAoaW50 KUFSUkFZX1NJWkUoaXQ2NTA1LT5ia3N2cyksIGl0NjUwNS0+YmtzdnMpOw0KKw0KKwlpZiAoIWl0 NjUwNV9oZGNwX2lzX2tzdl92YWxpZChpdDY1MDUtPmJrc3ZzKSkgew0KKwkJZGV2X2VycihkZXYs ICJEaXNwbGF5IFBvcnQgYmtzdiBub3QgdmFsaWQiKTsNCisJCWl0NjUwNV9zZXRfYml0cyhpdDY1 MDUsIFJFR19IRENQX1RSSUdHRVIsDQorCQkJCUhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwgSERDUF9U UklHR0VSX0tTVl9GQUlMKTsNCisJfQ0KKw0KKwlpdDY1MDVfaGRjcF9wYXJ0MV9hdXRoKGl0NjUw NSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9zaG93X2hkY3BfaW5mbyhzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsNCisJaW50IGk7DQorCXU4ICpzaGExID0gaXQ2NTA1LT5zaGExX2lucHV0Ow0KKw0KKwlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoZGNwX3N0YXR1czogJWQgaXNfcmVwZWF0ZXI6ICVk IiwNCisJCQkgICAgIGl0NjUwNS0+aGRjcF9zdGF0dXMsIGl0NjUwNS0+aXNfcmVwZWF0ZXIpOw0K KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJia3N2ID0gMHglKnBoIiwNCisJCQkgICAgIChp bnQpQVJSQVlfU0laRShpdDY1MDUtPmJrc3ZzKSwgaXQ2NTA1LT5ia3N2cyk7DQorDQorCWlmIChp dDY1MDUtPmlzX3JlcGVhdGVyKSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoZGNw X2Rvd25fc3RyZWFtX2NvdW50OiAlZCIsDQorCQkJCSAgICAgaXQ2NTA1LT5oZGNwX2Rvd25fc3Ry ZWFtX2NvdW50KTsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInNoYTFfaW5wdXQ6IDB4 JSpwaCIsDQorCQkJCSAgICAgKGludClBUlJBWV9TSVpFKGl0NjUwNS0+c2hhMV9pbnB1dCksDQor CQkJCSAgICAgaXQ2NTA1LT5zaGExX2lucHV0KTsNCisJCWZvciAoaSA9IDA7IGkgPCBpdDY1MDUt PmhkY3BfZG93bl9zdHJlYW1fY291bnQ7IGkrKykgew0KKwkJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIktTVl8lZCA9IDB4JSpwaCIsIGksDQorCQkJCQkgICAgIERSTV9IRENQX0tTVl9MRU4s IHNoYTEpOw0KKwkJCXNoYTEgKz0gRFJNX0hEQ1BfS1NWX0xFTjsNCisJCX0NCisJCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwgImJpbmZvOiAweCUycGggTTA6IDB4JThwaCIsDQorCQkJCSAgICAg c2hhMSwgc2hhMSArIDIpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9zdG9wX2xp bmtfdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1LT5saW5rX3N0YXRl ID0gTElOS19JRExFOw0KKwljYW5jZWxfd29ya19zeW5jKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0K KwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDEsIEZPUkNFX1JFVFJBSU4pOw0K K30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfbGlua190cmFpbl9vayhzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsN CisNCisJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElOS19PSzsNCisJLyogZGlzYWxiZSBtdXRlIGVu YWJsZSBhdmkgaW5mbyBmcmFtZSAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFU QV9NVVRFX0NUUkwsIEVOX1ZJRF9NVVRFLCAweDAwKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0lORk9GUkFNRV9DVFJMLA0KKwkJCUVOX1ZJRF9DVFJMX1BLVCwgRU5fVklEX0NUUkxf UEtUKTsNCisNCisJaWYgKGl0NjUwNV9hdWRpb19pbnB1dChpdDY1MDUpKSB7DQorCQlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJFbmFibGUgYXVkaW8hIik7DQorCQlpdDY1MDVfZW5hYmxlX2F1 ZGlvKGl0NjUwNSk7DQorCX0NCisNCisJaWYgKGl0NjUwNS0+aGRjcF9kZXNpcmVkKQ0KKwkJaXQ2 NTA1X3N0YXJ0X2hkY3AoaXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtf c3RlcF90cmFpbl9wcm9jZXNzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlpbnQgcmV0LCBpLCBzdGVwX3Jl dHJ5ID0gMzsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU3RhcnQgc3RlcCB0cmFp biIpOw0KKw0KKwlpZiAoaXQ2NTA1LT5zaW5rX2NvdW50ID09IDApIHsNCisJCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19jb3VudDolZCwgZm9yY2UgZXEiLA0KKwkJCQkg ICAgIGl0NjUwNS0+c2lua19jb3VudCk7DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LAlSRUdf VFJBSU5fQ1RSTDAsIEZPUkNFX0VRX0RPTkUsDQorCQkJCUZPUkNFX0VRX0RPTkUpOw0KKwkJcmV0 dXJuOw0KKwl9DQorDQorCWlmICghaXQ2NTA1LT5zdGVwX3RyYWluKSB7DQorCQlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJub3Qgc3VwcG9ydCBzdGVwIHRyYWluIik7DQorCQlyZXR1cm47DQor CX0NCisNCisJLyogc3RlcCB0cmFpbmluZyBzdGFydCBoZXJlICovDQorCWZvciAoaSA9IDA7IGkg PCBzdGVwX3JldHJ5OyBpKyspIHsNCisJCWl0NjUwNV9saW5rX3Jlc2V0X3N0ZXBfdHJhaW4oaXQ2 NTA1KTsNCisJCXJldCA9IGl0NjUwNV9saW5rX3N0YXJ0X3N0ZXBfdHJhaW4oaXQ2NTA1KTsNCisJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0ZXAgdHJhaW4gJXMsIHJldHJ5OiVkIHRpbWVz IiwNCisJCQkJICAgICByZXQgPyAicGFzcyIgOiAiZmFpbGVkIiwgaSArIDEpOw0KKwkJaWYgKHJl dCkgew0KKwkJCWl0NjUwNV9saW5rX3RyYWluX29rKGl0NjUwNSk7DQorCQkJcmV0dXJuOw0KKwkJ fQ0KKwl9DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInRyYWluaW5nIGZhaWwiKTsN CisJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElOS19JRExFOw0KKwlpdDY1MDVfdmlkZW9fcmVzZXQo aXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtfdHJhaW5pbmdfd29yayhz dHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBj b250YWluZXJfb2Yod29yaywgc3RydWN0IGl0NjUwNSwgbGlua193b3Jrcyk7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlpbnQgcmV0Ow0KKw0KKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJpdDY1MDUtPnNpbmtfY291bnQ6ICVkIiwNCisJCQkgICAg IGl0NjUwNS0+c2lua19jb3VudCk7DQorDQorCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0 dXMoaXQ2NTA1KSkNCisJCXJldHVybjsNCisNCisJaXQ2NTA1X2xpbmtfdHJhaW5pbmdfc2V0dXAo aXQ2NTA1KTsNCisJaXQ2NTA1X3Jlc2V0X2hkY3AoaXQ2NTA1KTsNCisJaXQ2NTA1X2F1eF9yZXNl dChpdDY1MDUpOw0KKw0KKwlpZiAoaXQ2NTA1LT5hdXRvX3RyYWluX3JldHJ5IDwgMSkgew0KKwkJ aXQ2NTA1X2xpbmtfc3RlcF90cmFpbl9wcm9jZXNzKGl0NjUwNSk7DQorCQlyZXR1cm47DQorCX0N CisNCisJcmV0ID0gaXQ2NTA1X2xpbmtfc3RhcnRfYXV0b190cmFpbihpdDY1MDUpOw0KKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJhdXRvIHRyYWluICVzLCBhdXRvX3RyYWluX3JldHJ5OiAl ZCIsDQorCQkJICAgICByZXQgPyAicGFzcyIgOiAiZmFpbGVkIiwgaXQ2NTA1LT5hdXRvX3RyYWlu X3JldHJ5KTsNCisJaXQ2NTA1LT5hdXRvX3RyYWluX3JldHJ5LS07DQorDQorCWlmIChyZXQpIHsN CisJCWl0NjUwNV9saW5rX3RyYWluX29rKGl0NjUwNSk7DQorCQlyZXR1cm47DQorCX0NCisNCisJ aXQ2NTA1X2R1bXAoaXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X3BsdWdnZWRf c3RhdHVzX3RvX2NvZGVjKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWVudW0gZHJtX2Nv bm5lY3Rvcl9zdGF0dXMgc3RhdHVzID0gaXQ2NTA1LT5jb25uZWN0b3Jfc3RhdHVzOw0KKw0KKwlp ZiAoaXQ2NTA1LT5wbHVnZ2VkX2NiICYmIGl0NjUwNS0+Y29kZWNfZGV2KQ0KKwkJaXQ2NTA1LT5w bHVnZ2VkX2NiKGl0NjUwNS0+Y29kZWNfZGV2LA0KKwkJCQkgICBzdGF0dXMgPT0gY29ubmVjdG9y X3N0YXR1c19jb25uZWN0ZWQpOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9wcm9jZXNzX2hw ZF9pcnEoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0g Jml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCWludCByZXQsIGRwY2Rfc2lua19jb3VudCwgZHBfaXJx X3ZlY3RvciwgYnN0YXR1czsNCisJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07 DQorDQorCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkgew0KKwkJRFJN X0RFVl9ERUJVR19EUklWRVIoZGV2LCAiSFBEX0lSUSBIUEQgbG93Iik7DQorCQlpdDY1MDUtPnNp bmtfY291bnQgPSAwOw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJcmV0ID0gaXQ2NTA1X2RwY2Rf cmVhZChpdDY1MDUsIERQX1NJTktfQ09VTlQpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiBy ZXQ7DQorDQorCWRwY2Rfc2lua19jb3VudCA9IERQX0dFVF9TSU5LX0NPVU5UKHJldCk7DQorCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImRwY2Rfc2lua19jb3VudDogJWQgaXQ2NTA1LT5zaW5r X2NvdW50OiVkIiwNCisJCQkgICAgIGRwY2Rfc2lua19jb3VudCwgaXQ2NTA1LT5zaW5rX2NvdW50 KTsNCisNCisJaWYgKGl0NjUwNS0+YnJhbmNoX2RldmljZSAmJiBkcGNkX3NpbmtfY291bnQgIT0g aXQ2NTA1LT5zaW5rX2NvdW50KSB7DQorCQltZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBzaXplb2Yo aXQ2NTA1LT5kcGNkKSk7DQorCQlpdDY1MDUtPnNpbmtfY291bnQgPSBkcGNkX3NpbmtfY291bnQ7 DQorCQlpdDY1MDVfcmVzZXRfbG9naWMoaXQ2NTA1KTsNCisJCWl0NjUwNV9pbnRfbWFza19lbmFi bGUoaXQ2NTA1KTsNCisJCWl0NjUwNV9pbml0KGl0NjUwNSk7DQorCQlyZXR1cm4gMDsNCisJfQ0K Kw0KKwlkcF9pcnFfdmVjdG9yID0gaXQ2NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX0RFVklDRV9T RVJWSUNFX0lSUV9WRUNUT1IpOw0KKwlpZiAoZHBfaXJxX3ZlY3RvciA8IDApDQorCQlyZXR1cm4g ZHBfaXJxX3ZlY3RvcjsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiZHBfaXJxX3Zl Y3RvciA9IDB4JTAyeCIsIGRwX2lycV92ZWN0b3IpOw0KKw0KKwlpZiAoZHBfaXJxX3ZlY3RvciAm IERQX0NQX0lSUSkgew0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dF UiwgSERDUF9UUklHR0VSX0NQSVJRLA0KKwkJCQlIRENQX1RSSUdHRVJfQ1BJUlEpOw0KKw0KKwkJ YnN0YXR1cyA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9BVVhfSERDUF9CU1RBVFVTKTsN CisJCWlmIChic3RhdHVzIDwgMCkNCisJCQlyZXR1cm4gYnN0YXR1czsNCisNCisJCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwgIkJzdGF0dXMgPSAweCUwMngiLCBic3RhdHVzKTsNCisJfQ0KKw0K KwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwgbGlua19z dGF0dXMpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJGYWlsIHRvIHJlYWQg bGluayBzdGF0dXMgcmV0OiAlZCIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImxpbmsgc3RhdHVzID0gMHglKnBoIiwNCisJCQkgICAg IChpbnQpQVJSQVlfU0laRShsaW5rX3N0YXR1cyksIGxpbmtfc3RhdHVzKTsNCisNCisJaWYgKCFk cm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0K KwkJaXQ2NTA1LT5hdXRvX3RyYWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCisJCWl0NjUw NV92aWRlb19yZXNldChpdDY1MDUpOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgdm9pZCBpdDY1MDVfaXJxX2hwZChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJaXQ2NTA1LT5ocGRf c3RhdGUgPSBpdDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpOw0KKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJocGQgY2hhbmdlIGludGVycnVwdCwgY2hhbmdlIHRvICVzIiwNCisJ CQkgICAgIGl0NjUwNS0+aHBkX3N0YXRlID8gImhpZ2giIDogImxvdyIpOw0KKw0KKwlpZiAoaXQ2 NTA1LT5icmlkZ2UuZGV2KQ0KKwkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGl0NjUwNS0+YnJp ZGdlLmRldik7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19jb3Vu dDogJWQiLA0KKwkJCSAgICAgaXQ2NTA1LT5zaW5rX2NvdW50KTsNCisNCisJaWYgKGl0NjUwNS0+ aHBkX3N0YXRlKSB7DQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJml0NjUwNS0+d2Fp dF9lZGlkX2NvbXBsZXRlLA0KKwkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoNjAwMCkpOw0KKwkJ aXQ2NTA1X2xhbmVfdGVybWluYXRpb25fb24oaXQ2NTA1KTsNCisJCWl0NjUwNV9sYW5lX3Bvd2Vy X29uKGl0NjUwNSk7DQorDQorCQkvKg0KKwkJICogZm9yIHNvbWUgZG9uZ2xlIHdoaWNoIGlzc3Vl IEhQRF9pcnENCisJCSAqIHdoZW4gc2luayBjb3VudCBjaGFuZ2UgZnJvbSAgMC0+MQ0KKwkJICog aXQ2NTA1IG5vdCBhYmxlIHRvIHJlY2VpdmUgSFBEX0lSUQ0KKwkJICogaWYgSFcgbmV2ZXIgZ28g aW50byB0cmFpbmlnIGRvbmUNCisJCSAqLw0KKw0KKwkJaWYgKGl0NjUwNS0+YnJhbmNoX2Rldmlj ZSAmJiBpdDY1MDUtPnNpbmtfY291bnQgPT0gMCkNCisJCQlzY2hlZHVsZV93b3JrKCZpdDY1MDUt Pmxpbmtfd29ya3MpOw0KKw0KKwkJaWYgKCFpdDY1MDVfZ2V0X3ZpZGVvX3N0YXR1cyhpdDY1MDUp KQ0KKwkJCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUpOw0KKw0KKwkJaXQ2NTA1X2NhbGNfdmlk ZW9faW5mbyhpdDY1MDUpOw0KKwl9IGVsc2Ugew0KKwkJbWVtc2V0KGl0NjUwNS0+ZHBjZCwgMCwg c2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOw0KKw0KKwkJaWYgKGl0NjUwNS0+aGRjcF9kZXNpcmVkKQ0K KwkJCWl0NjUwNV9zdG9wX2hkY3AoaXQ2NTA1KTsNCisNCisJCWl0NjUwNV92aWRlb19kaXNhYmxl KGl0NjUwNSk7DQorCQlpdDY1MDVfZGlzYWJsZV9hdWRpbyhpdDY1MDUpOw0KKwkJaXQ2NTA1X3N0 b3BfbGlua190cmFpbihpdDY1MDUpOw0KKwkJaXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7DQorCQlp dDY1MDVfbGlua19yZXNldF9zdGVwX3RyYWluKGl0NjUwNSk7DQorCX0NCit9DQorDQorc3RhdGlj IHZvaWQgaXQ2NTA1X2lycV9ocGRfaXJxKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJocGRfaXJxIGludGVycnVwdCIpOw0KKw0KKwlpZiAoaXQ2NTA1X3By b2Nlc3NfaHBkX2lycShpdDY1MDUpIDwgMCkNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg InByb2Nlc3MgaHBkX2lycSBmYWlsISIpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfaXJx X3NjZHQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0g Jml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCWJvb2wgZGF0YTsNCisNCisJZGF0YSA9IGl0NjUwNV9n ZXRfdmlkZW9fc3RhdHVzKGl0NjUwNSk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInZp ZGVvIHN0YWJsZSBjaGFuZ2UgaW50ZXJydXB0LCAlcyIsDQorCQkJICAgICBkYXRhID8gInN0YWJs ZSIgOiAidW5zdGFibGUiKTsNCisJaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhpdDY1MDUpOw0KKwlp dDY1MDVfbGlua19yZXNldF9zdGVwX3RyYWluKGl0NjUwNSk7DQorDQorCWlmIChkYXRhKQ0KKwkJ c2NoZWR1bGVfd29yaygmaXQ2NTA1LT5saW5rX3dvcmtzKTsNCit9DQorDQorc3RhdGljIHZvaWQg aXQ2NTA1X2lycV9oZGNwX2RvbmUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0 IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgImhkY3AgZG9uZSBpbnRlcnJ1cHQiKTsNCisJaXQ2NTA1LT5oZGNwX3N0YXR1 cyA9IEhEQ1BfQVVUSF9ET05FOw0KKwlpdDY1MDVfc2hvd19oZGNwX2luZm8oaXQ2NTA1KTsNCit9 DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2lycV9oZGNwX2ZhaWwoc3RydWN0IGl0NjUwNSAqaXQ2 NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQor DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3AgZmFpbCBpbnRlcnJ1cHQiKTsNCisJ aXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVUSF9JRExFOw0KKwlpdDY1MDVfc2hvd19oZGNw X2luZm8oaXQ2NTA1KTsNCisJaXQ2NTA1X3N0YXJ0X2hkY3AoaXQ2NTA1KTsNCit9DQorDQorc3Rh dGljIHZvaWQgaXQ2NTA1X2lycV9hdXhfY21kX2ZhaWwoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0K K3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkFVWCBQQyBSZXF1ZXN0IEZhaWwgSW50ZXJydXB0Iik7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9pcnFfaGRjcF9rc3ZfY2hlY2soc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50 LT5kZXY7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkhEQ1AgZXZlbnQgSW50ZXJy dXB0Iik7DQorCXNjaGVkdWxlX3dvcmsoJml0NjUwNS0+aGRjcF93YWl0X2tzdl9saXN0KTsNCit9 DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2lycV9hdWRpb19maWZvX2Vycm9yKHN0cnVjdCBpdDY1 MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJhdWRpbyBmaWZvIGVycm9yIElu dGVycnVwdCIpOw0KKw0KKwlpZiAoaXQ2NTA1X2F1ZGlvX2lucHV0KGl0NjUwNSkpDQorCQlpdDY1 MDVfZW5hYmxlX2F1ZGlvKGl0NjUwNSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9pcnFf bGlua190cmFpbl9mYWlsKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJsaW5rIHRyYWluaW5nIGZhaWwgaW50ZXJydXB0Iik7DQorCXNjaGVkdWxlX3dvcmso Jml0NjUwNS0+bGlua193b3Jrcyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9pcnFfdmlk ZW9fZmlmb19lcnJvcihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAidmlkZW8gZmlmbyBvdmVyZmxvdyBpbnRlcnJ1cHQiKTsNCisJaXQ2NTA1LT5hdXRvX3Ry YWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCisJZmx1c2hfd29yaygmaXQ2NTA1LT5saW5r X3dvcmtzKTsNCisJaXQ2NTA1X3N0b3BfaGRjcChpdDY1MDUpOw0KKwlpdDY1MDVfdmlkZW9fcmVz ZXQoaXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2lycV9pb19sYXRjaF9maWZv X292ZXJmbG93KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJJTyBsYXRjaCBmaWZvIG92ZXJmbG93IGludGVycnVwdCIpOw0KKwlpdDY1MDUtPmF1dG9fdHJh aW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZOw0KKwlmbHVzaF93b3JrKCZpdDY1MDUtPmxpbmtf d29ya3MpOw0KKwlpdDY1MDVfc3RvcF9oZGNwKGl0NjUwNSk7DQorCWl0NjUwNV92aWRlb19yZXNl dChpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVfdGVzdF9iaXQodW5zaWduZWQg aW50IGJpdCwgY29uc3QgdW5zaWduZWQgaW50ICphZGRyKQ0KK3sNCisJcmV0dXJuIDEgJiAoYWRk cltiaXQgLyBCSVRTX1BFUl9CWVRFXSA+PiAoYml0ICUgQklUU19QRVJfQllURSkpOw0KK30NCisN CitzdGF0aWMgaXJxcmV0dXJuX3QgaXQ2NTA1X2ludF90aHJlYWRlZF9oYW5kbGVyKGludCB1bnVz ZWQsIHZvaWQgKmRhdGEpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkYXRhOw0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJc3RhdGljIGNvbnN0 IHN0cnVjdCB7DQorCQlpbnQgYml0Ow0KKwkJdm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSk7DQorCX0gaXJxX3ZlY1tdID0gew0KKwkJeyBCSVRfSU5UX0hQRCwgaXQ2NTA1X2ly cV9ocGQgfSwNCisJCXsgQklUX0lOVF9IUERfSVJRLCBpdDY1MDVfaXJxX2hwZF9pcnEgfSwNCisJ CXsgQklUX0lOVF9TQ0RULCBpdDY1MDVfaXJxX3NjZHQgfSwNCisJCXsgQklUX0lOVF9IRENQX0ZB SUwsIGl0NjUwNV9pcnFfaGRjcF9mYWlsIH0sDQorCQl7IEJJVF9JTlRfSERDUF9ET05FLCBpdDY1 MDVfaXJxX2hkY3BfZG9uZSB9LA0KKwkJeyBCSVRfSU5UX0FVWF9DTURfRkFJTCwgaXQ2NTA1X2ly cV9hdXhfY21kX2ZhaWwgfSwNCisJCXsgQklUX0lOVF9IRENQX0tTVl9DSEVDSywgaXQ2NTA1X2ly cV9oZGNwX2tzdl9jaGVjayB9LA0KKwkJeyBCSVRfSU5UX0FVRElPX0ZJRk9fRVJST1IsIGl0NjUw NV9pcnFfYXVkaW9fZmlmb19lcnJvciB9LA0KKwkJeyBCSVRfSU5UX0xJTktfVFJBSU5fRkFJTCwg aXQ2NTA1X2lycV9saW5rX3RyYWluX2ZhaWwgfSwNCisJCXsgQklUX0lOVF9WSURfRklGT19FUlJP UiwgaXQ2NTA1X2lycV92aWRlb19maWZvX2Vycm9yIH0sDQorCQl7IEJJVF9JTlRfSU9fRklGT19P VkVSRkxPVywgaXQ2NTA1X2lycV9pb19sYXRjaF9maWZvX292ZXJmbG93IH0sDQorCX07DQorCWlu dCBpbnRfc3RhdHVzWzNdLCBpOw0KKw0KKwltc2xlZXAoMTAwKTsNCisJbXV0ZXhfbG9jaygmaXQ2 NTA1LT5leHRjb25fbG9jayk7DQorDQorCWlmIChpdDY1MDUtPmVuYWJsZV9kcnZfaG9sZCB8fCAh aXQ2NTA1LT5wb3dlcmVkKQ0KKwkJZ290byB1bmxvY2s7DQorDQorCWludF9zdGF0dXNbMF0gPSBp dDY1MDVfcmVhZChpdDY1MDUsIElOVF9TVEFUVVNfMDEpOw0KKwlpbnRfc3RhdHVzWzFdID0gaXQ2 NTA1X3JlYWQoaXQ2NTA1LCBJTlRfU1RBVFVTXzAyKTsNCisJaW50X3N0YXR1c1syXSA9IGl0NjUw NV9yZWFkKGl0NjUwNSwgSU5UX1NUQVRVU18wMyk7DQorDQorCWl0NjUwNV93cml0ZShpdDY1MDUs IElOVF9TVEFUVVNfMDEsIGludF9zdGF0dXNbMF0pOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJ TlRfU1RBVFVTXzAyLCBpbnRfc3RhdHVzWzFdKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5U X1NUQVRVU18wMywgaW50X3N0YXR1c1syXSk7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgInJlZzA2ID0gMHglMDJ4IiwgaW50X3N0YXR1c1swXSk7DQorCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgInJlZzA3ID0gMHglMDJ4IiwgaW50X3N0YXR1c1sxXSk7DQorCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgInJlZzA4ID0gMHglMDJ4IiwgaW50X3N0YXR1c1syXSk7DQorCWl0NjUw NV9kZWJ1Z19wcmludChpdDY1MDUsIFJFR19TWVNURU1fU1RTLCAiIik7DQorDQorCWlmIChpdDY1 MDVfdGVzdF9iaXQoaXJxX3ZlY1swXS5iaXQsICh1bnNpZ25lZCBpbnQgKilpbnRfc3RhdHVzKSkN CisJCWlycV92ZWNbMF0uaGFuZGxlcihpdDY1MDUpOw0KKw0KKwlpZiAoIWl0NjUwNS0+aHBkX3N0 YXRlKQ0KKwkJZ290byB1bmxvY2s7DQorDQorCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKGly cV92ZWMpOyBpKyspIHsNCisJCWlmIChpdDY1MDVfdGVzdF9iaXQoaXJxX3ZlY1tpXS5iaXQsICh1 bnNpZ25lZCBpbnQgKilpbnRfc3RhdHVzKSkNCisJCQlpcnFfdmVjW2ldLmhhbmRsZXIoaXQ2NTA1 KTsNCisJfQ0KKw0KK3VubG9jazoNCisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPmV4dGNvbl9sb2Nr KTsNCisNCisJcmV0dXJuIElSUV9IQU5ETEVEOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9w b3dlcm9uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlzdHJ1Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEgKnBk YXRhID0gJml0NjUwNS0+cGRhdGE7DQorCWludCBlcnI7DQorDQorCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgIml0NjUwNSBzdGFydCBwb3dlcmVkIG9uIik7DQorDQorCWlmIChpdDY1MDUtPnBv d2VyZWQpIHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNSBhbHJlYWR5IHBv d2VyZWQgb24iKTsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCWlmIChwZGF0YS0+cHdyMTgpIHsN CisJCWVyciA9IHJlZ3VsYXRvcl9lbmFibGUocGRhdGEtPnB3cjE4KTsNCisJCWlmIChlcnIpIHsN CisJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIFZERDE4OiAl ZCIsDQorCQkJCQkgICAgIGVycik7DQorCQkJcmV0dXJuIGVycjsNCisJCX0NCisJfQ0KKw0KKwlp ZiAocGRhdGEtPm92ZGQpIHsNCisJCS8qIHRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBJVkREIGFuZCBP VkREIGF0IGxlYXN0IGJlIDFtcyAqLw0KKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KKwkJ ZXJyID0gcmVndWxhdG9yX2VuYWJsZShwZGF0YS0+b3ZkZCk7DQorCQlpZiAoZXJyKSB7DQorCQkJ cmVndWxhdG9yX2Rpc2FibGUocGRhdGEtPnB3cjE4KTsNCisJCQlyZXR1cm4gZXJyOw0KKwkJfQ0K Kwl9DQorCS8qIHRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBPVkREIGFuZCBTWVNSU1ROIGF0IGxlYXN0 IGJlIDEwbXMgKi8NCisJaWYgKHBkYXRhLT5ncGlvZF9yZXNldCkgew0KKwkJdXNsZWVwX3Jhbmdl KDEwMDAwLCAyMDAwMCk7DQorCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9k X3Jlc2V0LCAwKTsNCisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsNCisJCWdwaW9kX3NldF92 YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDEpOw0KKwkJdXNsZWVwX3JhbmdlKDEw MDAwLCAyMDAwMCk7DQorCX0NCisNCisJaXQ2NTA1X3Jlc2V0X2xvZ2ljKGl0NjUwNSk7DQorCWl0 NjUwNV9pbnRfbWFza19lbmFibGUoaXQ2NTA1KTsNCisJaXQ2NTA1X2luaXQoaXQ2NTA1KTsNCisJ aXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7DQorDQorCWl0NjUwNS0+cG93ZXJlZCA9IHRydWU7DQor DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9wb3dlcm9mZihzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGll bnQtPmRldjsNCisJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZpdDY1MDUt PnBkYXRhOw0KKwlpbnQgZXJyOw0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJpdDY1 MDUgc3RhcnQgcG93ZXIgb2ZmIik7DQorDQorCWlmICghaXQ2NTA1LT5wb3dlcmVkKSB7DQorCQlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwb3dlciBoYWQgYmVlbiBhbHJlYWR5IG9mZiIpOw0K KwkJcmV0dXJuIDA7DQorCX0NCisNCisJaWYgKHBkYXRhLT5ncGlvZF9yZXNldCkNCisJCWdwaW9k X3NldF92YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDApOw0KKw0KKwlpZiAocGRh dGEtPnB3cjE4KSB7DQorCQllcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwZGF0YS0+cHdyMTgpOw0K KwkJaWYgKGVycikNCisJCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWlmIChwZGF0YS0+b3ZkZCkg ew0KKwkJZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocGRhdGEtPm92ZGQpOw0KKwkJaWYgKGVycikN CisJCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWl0NjUwNS0+cG93ZXJlZCA9IGZhbHNlOw0KKwlp dDY1MDUtPnNpbmtfY291bnQgPSAwOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGVu dW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgaXQ2NTA1X2RldGVjdChzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJ ZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nv bm5lY3RlZDsNCisJaW50IGRwX3NpbmtfY291bnQ7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIml0NjUwNS0+c2lua19jb3VudDolZCBwb3dlcmVkOiVkIiwNCisJCQkgICAgIGl0NjUw NS0+c2lua19jb3VudCwgaXQ2NTA1LT5wb3dlcmVkKTsNCisNCisJbXV0ZXhfbG9jaygmaXQ2NTA1 LT5tb2RlX2xvY2spOw0KKw0KKwlpZiAoIWl0NjUwNS0+cG93ZXJlZCkNCisJCWdvdG8gdW5sb2Nr Ow0KKw0KKwlpZiAoaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQpIHsNCisJCXN0YXR1cyA9IGl0NjUw NV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkgPw0KKwkJCQkJY29ubmVjdG9yX3N0YXR1c19j b25uZWN0ZWQgOg0KKwkJCQkJY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7DQorCQlnb3Rv IHVubG9jazsNCisJfQ0KKw0KKwlpZiAoaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1 KSkgew0KKwkJaXQ2NTA1X2F1eF9vbihpdDY1MDUpOw0KKwkJaXQ2NTA1X2RybV9kcF9saW5rX3By b2JlKCZpdDY1MDUtPmF1eCwgJml0NjUwNS0+bGluayk7DQorCQlpdDY1MDVfZHJtX2RwX2xpbmtf cG93ZXJfdXAoJml0NjUwNS0+YXV4LCAmaXQ2NTA1LT5saW5rKTsNCisJCWl0NjUwNS0+YXV0b190 cmFpbl9yZXRyeSA9IEFVVE9fVFJBSU5fUkVUUlk7DQorDQorCQlpZiAoaXQ2NTA1LT5kcGNkWzBd ID09IDApIHsNCisJCQlpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9EUENEX1JFViwgaXQ2NTA1 LT5kcGNkLA0KKwkJCQkJQVJSQVlfU0laRShpdDY1MDUtPmRwY2QpKTsNCisJCQlpdDY1MDVfdmFy aWFibGVfY29uZmlnKGl0NjUwNSk7DQorCQkJaXQ2NTA1X3BhcnNlX2xpbmtfY2FwYWJpbGl0aWVz KGl0NjUwNSk7DQorCQl9DQorDQorCQlkcF9zaW5rX2NvdW50ID0gaXQ2NTA1X2RwY2RfcmVhZChp dDY1MDUsIERQX1NJTktfQ09VTlQpOw0KKwkJaXQ2NTA1LT5zaW5rX2NvdW50ID0gRFBfR0VUX1NJ TktfQ09VTlQoZHBfc2lua19jb3VudCk7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJp dDY1MDUtPnNpbmtfY291bnQ6JWQgYnJhbmNoOiVkIiwNCisJCQkJICAgICBpdDY1MDUtPnNpbmtf Y291bnQsIGl0NjUwNS0+YnJhbmNoX2RldmljZSk7DQorDQorCQlpZiAoaXQ2NTA1LT5icmFuY2hf ZGV2aWNlKSB7DQorCQkJc3RhdHVzID0gKGl0NjUwNS0+c2lua19jb3VudCAhPSAwKSA/DQorCQkJ CSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6DQorCQkJCSBjb25uZWN0b3Jfc3RhdHVzX2Rp c2Nvbm5lY3RlZDsNCisJCX0gZWxzZSB7DQorCQkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19j b25uZWN0ZWQ7DQorCQl9DQorCX0gZWxzZSB7DQorCQlpdDY1MDUtPnNpbmtfY291bnQgPSAwOw0K KwkJbWVtc2V0KGl0NjUwNS0+ZHBjZCwgMCwgc2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOw0KKwl9DQor DQordW5sb2NrOg0KKwlpZiAoaXQ2NTA1LT5jb25uZWN0b3Jfc3RhdHVzICE9IHN0YXR1cykgew0K KwkJaXQ2NTA1LT5jb25uZWN0b3Jfc3RhdHVzID0gc3RhdHVzOw0KKwkJaXQ2NTA1X3BsdWdnZWRf c3RhdHVzX3RvX2NvZGVjKGl0NjUwNSk7DQorCX0NCisNCisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUt Pm1vZGVfbG9jayk7DQorDQorCXJldHVybiBzdGF0dXM7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2 NTA1X2V4dGNvbl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsDQorCQkJCSAg dW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2 NTA1ID0gY29udGFpbmVyX29mKHNlbGYsIHN0cnVjdCBpdDY1MDUsIGV2ZW50X25iKTsNCisNCisJ c2NoZWR1bGVfd29yaygmaXQ2NTA1LT5leHRjb25fd3EpOw0KKwlyZXR1cm4gTk9USUZZX0RPTkU7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9leHRjb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2Yod29y aywgc3RydWN0IGl0NjUwNSwgZXh0Y29uX3dxKTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0 NjUwNS0+Y2xpZW50LT5kZXY7DQorCWludCBzdGF0ZSA9IGV4dGNvbl9nZXRfc3RhdGUoaXQ2NTA1 LT5leHRjb24sIEVYVENPTl9ESVNQX0RQKTsNCisJdW5zaWduZWQgaW50IHB3cm9mZnJldHJ5ID0g MDsNCisNCisJaWYgKGl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkKQ0KKwkJcmV0dXJuOw0KKw0KKwlt dXRleF9sb2NrKCZpdDY1MDUtPmV4dGNvbl9sb2NrKTsNCisNCisJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiRVhUQ09OX0RJU1BfRFAgPSAweCUwMngiLCBzdGF0ZSk7DQorCWlmIChzdGF0ZSA+ IDApIHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0YXJ0IHRvIHBvd2VyIG9uIik7 DQorCQltc2xlZXAoMTAwKTsNCisJCWl0NjUwNV9wb3dlcm9uKGl0NjUwNSk7DQorCX0gZWxzZSB7 DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCB0byBwb3dlciBvZmYiKTsNCisJ CXdoaWxlIChpdDY1MDVfcG93ZXJvZmYoaXQ2NTA1KSAmJiBwd3JvZmZyZXRyeSsrIDwgNSkgew0K KwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInBvd2VyIG9mZiBmYWlsICVkIHRpbWVzIiwN CisJCQkJCSAgICAgcHdyb2ZmcmV0cnkpOw0KKwkJfQ0KKw0KKwkJZHJtX2hlbHBlcl9ocGRfaXJx X2V2ZW50KGl0NjUwNS0+YnJpZGdlLmRldik7DQorCQltZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBz aXplb2YoaXQ2NTA1LT5kcGNkKSk7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwb3dl ciBvZmYgaXQ2NTA1IHN1Y2Nlc3MhIik7DQorCX0NCisNCisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUt PmV4dGNvbl9sb2NrKTsNCit9DQorDQorc3RhdGljIGludCBpdDY1MDVfdXNlX25vdGlmaWVyX21v ZHVsZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpbnQgcmV0Ow0KKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJaXQ2NTA1LT5ldmVudF9uYi5u b3RpZmllcl9jYWxsID0gaXQ2NTA1X2V4dGNvbl9ub3RpZmllcjsNCisJSU5JVF9XT1JLKCZpdDY1 MDUtPmV4dGNvbl93cSwgaXQ2NTA1X2V4dGNvbl93b3JrKTsNCisJcmV0ID0gZGV2bV9leHRjb25f cmVnaXN0ZXJfbm90aWZpZXIoJml0NjUwNS0+Y2xpZW50LT5kZXYsDQorCQkJCQkgICAgaXQ2NTA1 LT5leHRjb24sIEVYVENPTl9ESVNQX0RQLA0KKwkJCQkJICAgICZpdDY1MDUtPmV2ZW50X25iKTsN CisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgbm90aWZp ZXIgZm9yIERQIik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXNjaGVkdWxlX3dvcmsoJml0 NjUwNS0+ZXh0Y29uX3dxKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0 NjUwNV9yZW1vdmVfbm90aWZpZXJfbW9kdWxlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQor CWlmIChpdDY1MDUtPmV4dGNvbikgew0KKwkJZGV2bV9leHRjb25fdW5yZWdpc3Rlcl9ub3RpZmll cigmaXQ2NTA1LT5jbGllbnQtPmRldiwNCisJCQkJCQlpdDY1MDUtPmV4dGNvbiwJRVhUQ09OX0RJ U1BfRFAsDQorCQkJCQkJJml0NjUwNS0+ZXZlbnRfbmIpOw0KKw0KKwkJZmx1c2hfd29yaygmaXQ2 NTA1LT5leHRjb25fd3EpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2Vk IGl0NjUwNV9kZWxheWVkX2F1ZGlvKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0 cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXQ2NTA1LA0K KwkJCQkJICAgICBkZWxheWVkX2F1ZGlvLndvcmspOw0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZF UigmaXQ2NTA1LT5jbGllbnQtPmRldiwgInN0YXJ0Iik7DQorDQorCWlmICghaXQ2NTA1LT5wb3dl cmVkKQ0KKwkJcmV0dXJuOw0KKw0KKwlpZiAoIWl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkKQ0KKwkJ aXQ2NTA1X2VuYWJsZV9hdWRpbyhpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgaW50IF9fbWF5YmVf dW51c2VkIGl0NjUwNV9hdWRpb19zZXR1cF9od19wYXJhbXMoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 LA0KKwkJCQkJCSAgICAgICBzdHJ1Y3QgaGRtaV9jb2RlY19wYXJhbXMNCisJCQkJCQkgICAgICAg KnBhcmFtcykNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2 Ow0KKwlpbnQgaSA9IDA7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiVzICVkIEh6 LCAlZCBiaXQsICVkIGNoYW5uZWxzXG4iLCBfX2Z1bmNfXywNCisJCQkgICAgIHBhcmFtcy0+c2Ft cGxlX3JhdGUsIHBhcmFtcy0+c2FtcGxlX3dpZHRoLA0KKwkJCSAgICAgcGFyYW1zLT5jZWEuY2hh bm5lbHMpOw0KKw0KKwlpZiAoIWl0NjUwNS0+YnJpZGdlLmVuY29kZXIpDQorCQlyZXR1cm4gLUVO T0RFVjsNCisNCisJaWYgKHBhcmFtcy0+Y2VhLmNoYW5uZWxzIDw9IDEgfHwgcGFyYW1zLT5jZWEu Y2hhbm5lbHMgPiA4KSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJjaGFubmVsIG51 bWJlcjogJWQgbm90IHN1cHBvcnQiLA0KKwkJCQkgICAgIGl0NjUwNS0+YXVkaW8uY2hhbm5lbF9j b3VudCk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlpdDY1MDUtPmF1ZGlvLmNoYW5u ZWxfY291bnQgPSBwYXJhbXMtPmNlYS5jaGFubmVsczsNCisNCisJd2hpbGUgKGkgPCBBUlJBWV9T SVpFKGF1ZGlvX3NhbXBsZV9yYXRlX21hcCkgJiYNCisJICAgICAgIHBhcmFtcy0+c2FtcGxlX3Jh dGUgIT0NCisJCSAgICAgICBhdWRpb19zYW1wbGVfcmF0ZV9tYXBbaV0uc2FtcGxlX3JhdGVfdmFs dWUpIHsNCisJCWkrKzsNCisJfQ0KKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGF1ZGlvX3NhbXBsZV9y YXRlX21hcCkpIHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInNhbXBsZSByYXRlOiAl ZCBIeiBub3Qgc3VwcG9ydCIsDQorCQkJCSAgICAgcGFyYW1zLT5zYW1wbGVfcmF0ZSk7DQorCQly ZXR1cm4gLUVJTlZBTDsNCisJfQ0KKwlpdDY1MDUtPmF1ZGlvLnNhbXBsZV9yYXRlID0gYXVkaW9f c2FtcGxlX3JhdGVfbWFwW2ldLnJhdGU7DQorDQorCXN3aXRjaCAocGFyYW1zLT5zYW1wbGVfd2lk dGgpIHsNCisJY2FzZSAxNjoNCisJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPSBXT1JEX0xF TkdUSF8xNkJJVDsNCisJCWJyZWFrOw0KKwljYXNlIDE4Og0KKwkJaXQ2NTA1LT5hdWRpby53b3Jk X2xlbmd0aCA9IFdPUkRfTEVOR1RIXzE4QklUOw0KKwkJYnJlYWs7DQorCWNhc2UgMjA6DQorCQlp dDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoID0gV09SRF9MRU5HVEhfMjBCSVQ7DQorCQlicmVhazsN CisJY2FzZSAyNDoNCisJY2FzZSAzMjoNCisJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPSBX T1JEX0xFTkdUSF8yNEJJVDsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAid29yZGxlbmd0aDogJWQgYml0IG5vdCBzdXBwb3J0IiwNCisJCQkJICAg ICBwYXJhbXMtPnNhbXBsZV93aWR0aCk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwly ZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlv X3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCBp dDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKw0KKwlpZiAoaXQ2NTA1LT5w b3dlcmVkKQ0KKwkJaXQ2NTA1X2Rpc2FibGVfYXVkaW8oaXQ2NTA1KTsNCit9DQorDQorc3RhdGlj IGludCBfX21heWJlX3VudXNlZCBpdDY1MDVfYXVkaW9faG9va19wbHVnZ2VkX2NiKHN0cnVjdCBk ZXZpY2UgKmRldiwNCisJCQkJCQkgICAgICAgdm9pZCAqZGF0YSwNCisJCQkJCQkgICAgICAgaGRt aV9jb2RlY19wbHVnZ2VkX2NiIGZuLA0KKwkJCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpjb2Rl Y19kZXYpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkYXRhOw0KKw0KKwlpdDY1MDUt PnBsdWdnZWRfY2IgPSBmbjsNCisJaXQ2NTA1LT5jb2RlY19kZXYgPSBjb2RlY19kZXY7DQorCWl0 NjUwNV9wbHVnZ2VkX3N0YXR1c190b19jb2RlYyhpdDY1MDUpOw0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXQ2NTA1ICpicmlkZ2VfdG9faXQ2NTA1KHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UpDQorew0KKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwg c3RydWN0IGl0NjUwNSwgYnJpZGdlKTsNCit9DQorDQorc3RhdGljIGludCBpdDY1MDVfYnJpZGdl X2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KKwkJCQllbnVtIGRybV9icmlkZ2Vf YXR0YWNoX2ZsYWdzIGZsYWdzKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdl X3RvX2l0NjUwNShicmlkZ2UpOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGll bnQtPmRldjsNCisJaW50IHJldDsNCisNCisJaWYgKCEoZmxhZ3MgJiBEUk1fQlJJREdFX0FUVEFD SF9OT19DT05ORUNUT1IpKSB7DQorCQlEUk1fRVJST1IoIkRSTV9CUklER0VfQVRUQUNIX05PX0NP Tk5FQ1RPUiBtdXN0IGJlIHN1cHBsaWVkIik7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0K KwlpZiAoIWJyaWRnZS0+ZW5jb2Rlcikgew0KKwkJZGV2X2VycihkZXYsICJQYXJlbnQgZW5jb2Rl ciBvYmplY3Qgbm90IGZvdW5kIik7DQorCQlyZXR1cm4gLUVOT0RFVjsNCisJfQ0KKw0KKwlpZiAo aXQ2NTA1LT5leHRjb24pIHsNCisJCXJldCA9IGl0NjUwNV91c2Vfbm90aWZpZXJfbW9kdWxlKGl0 NjUwNSk7DQorCQlpZiAocmV0IDwgMCkgew0KKwkJCWRldl9lcnIoZGV2LCAidXNlIG5vdGlmaWVy IG1vZHVsZSBmYWlsZWQiKTsNCisJCQlyZXR1cm4gcmV0Ow0KKwkJfQ0KKwl9DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2RldGFjaChzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3Rv X2l0NjUwNShicmlkZ2UpOw0KKw0KKwlmbHVzaF93b3JrKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0K KwlpdDY1MDVfcmVtb3ZlX25vdGlmaWVyX21vZHVsZShpdDY1MDUpOw0KK30NCisNCitzdGF0aWMg ZW51bSBkcm1fbW9kZV9zdGF0dXMNCitpdDY1MDVfYnJpZGdlX21vZGVfdmFsaWQoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSwNCisJCQkgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmlu Zm8sDQorCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQ0KK3sNCisJc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0KKw0KKwlpZiAo bW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkNCisJCXJldHVybiBNT0RFX05P X0lOVEVSTEFDRTsNCisNCisJaWYgKG1vZGUtPmNsb2NrID4gRFBJX1BJWEVMX0NMS19NQVgpDQor CQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOw0KKw0KKwlpdDY1MDUtPnZpZGVvX2luZm8uY2xvY2sg PSBtb2RlLT5jbG9jazsNCisNCisJcmV0dXJuIE1PREVfT0s7DQorfQ0KKw0KK3N0YXRpYyB2b2lk IGl0NjUwNV9icmlkZ2VfYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0K KwkJCQkJc3RydWN0IGRybV9icmlkZ2Vfc3RhdGUgKm9sZF9zdGF0ZSkNCit7DQorCXN0cnVjdCBp dDY1MDUgKml0NjUwNSA9IGJyaWRnZV90b19pdDY1MDUoYnJpZGdlKTsNCisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSA9IG9sZF9zdGF0ZS0+YmFzZS5zdGF0ZTsNCisJc3RydWN0IGhkbWlfYXZpX2luZm9m cmFtZSBmcmFtZTsNCisJY29uc3Qgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOw0K Kwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsNCisJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcjsNCisJaW50IHJldDsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAic3RhcnQiKTsNCisNCisJY29ubmVjdG9yID0gZHJtX2F0b21pY19nZXRfbmV3X2Nvbm5l Y3Rvcl9mb3JfZW5jb2RlcihzdGF0ZSwNCisJCQkJCQkJICAgICBicmlkZ2UtPmVuY29kZXIpOw0K Kw0KKwljcnRjX3N0YXRlID0gZHJtX2JyaWRnZV9uZXdfY3J0Y19zdGF0ZShicmlkZ2UsIG9sZF9z dGF0ZSk7DQorCW1vZGUgPSAmY3J0Y19zdGF0ZS0+bW9kZTsNCisJcmV0ID0gZHJtX2hkbWlfYXZp X2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUsDQorCQkJCQkJICAgICAgIGNvbm5l Y3RvciwNCisJCQkJCQkgICAgICAgbW9kZSk7DQorCWlmIChyZXQpDQorCQlkZXZfZXJyKGRldiwg IkZhaWxlZCB0byBzZXR1cCBBVkkgaW5mb2ZyYW1lOiAlZCIsIHJldCk7DQorDQorCWl0NjUwNV91 cGRhdGVfdmlkZW9fcGFyYW1ldGVyKGl0NjUwNSwgbW9kZSk7DQorDQorCXJldCA9IGl0NjUwNV9z ZW5kX3ZpZGVvX2luZm9mcmFtZShpdDY1MDUsICZmcmFtZSk7DQorDQorCWlmIChyZXQpDQorCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzZW5kIEFWSSBpbmZvZnJhbWU6ICVkIiwgcmV0KTsNCisN CisJaXQ2NTA1X2ludF9tYXNrX2VuYWJsZShpdDY1MDUpOw0KKwlpdDY1MDVfdmlkZW9fcmVzZXQo aXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2JyaWRnZV9hdG9taWNfZGlzYWJs ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KKwkJCQkJIHN0cnVjdCBkcm1fYnJpZGdlX3N0 YXRlICpvbGRfc3RhdGUpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9f aXQ2NTA1KGJyaWRnZSk7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCIpOw0KKw0KKwlpZiAo aXQ2NTA1LT5wb3dlcmVkKQ0KKwkJaXQ2NTA1X3ZpZGVvX2Rpc2FibGUoaXQ2NTA1KTsNCit9DQor DQorc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMNCitpdDY1MDVfYnJpZGdlX2RldGVj dChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1 ID0gYnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0KKw0KKwlyZXR1cm4gaXQ2NTA1X2RldGVjdChp dDY1MDUpOw0KK30NCisNCitzdGF0aWMgc3RydWN0IGVkaWQgKml0NjUwNV9icmlkZ2VfZ2V0X2Vk aWQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwNCisJCQkJCSAgIHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9f aXQ2NTA1KGJyaWRnZSk7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Ow0KKwlzdHJ1Y3QgZWRpZCAqZWRpZDsNCisNCisJZWRpZCA9IGRybV9kb19nZXRfZWRpZChj b25uZWN0b3IsIGl0NjUwNV9nZXRfZWRpZF9ibG9jaywgaXQ2NTA1KTsNCisNCisJaWYgKCFlZGlk KSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJmYWlsZWQgdG8gZ2V0IGVkaWQhIik7 DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KKw0KKwlyZXR1cm4gZWRpZDsNCit9DQorDQorc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIGl0NjUwNV9icmlkZ2VfZnVuY3MgPSB7DQor CS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfYnJpZGdlX2R1cGxp Y2F0ZV9zdGF0ZSwNCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJf YnJpZGdlX2Rlc3Ryb3lfc3RhdGUsDQorCS5hdG9taWNfcmVzZXQgPSBkcm1fYXRvbWljX2hlbHBl cl9icmlkZ2VfcmVzZXQsDQorCS5hdHRhY2ggPSBpdDY1MDVfYnJpZGdlX2F0dGFjaCwNCisJLmRl dGFjaCA9IGl0NjUwNV9icmlkZ2VfZGV0YWNoLA0KKwkubW9kZV92YWxpZCA9IGl0NjUwNV9icmlk Z2VfbW9kZV92YWxpZCwNCisJLmF0b21pY19lbmFibGUgPSBpdDY1MDVfYnJpZGdlX2F0b21pY19l bmFibGUsDQorCS5hdG9taWNfZGlzYWJsZSA9IGl0NjUwNV9icmlkZ2VfYXRvbWljX2Rpc2FibGUs DQorCS5kZXRlY3QgPSBpdDY1MDVfYnJpZGdlX2RldGVjdCwNCisJLmdldF9lZGlkID0gaXQ2NTA1 X2JyaWRnZV9nZXRfZWRpZCwNCit9Ow0KKw0KK3N0YXRpYyBfX21heWJlX3VudXNlZCBpbnQgaXQ2 NTA1X2JyaWRnZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGl0NjUw NSAqaXQ2NTA1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorDQorCXJldHVybiBpdDY1MDVfcG93 ZXJvbihpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgX19tYXliZV91bnVzZWQgaW50IGl0NjUwNV9i cmlkZ2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCisNCisJcmV0dXJuIGl0NjUwNV9wb3dlcm9m ZihpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoaXQ2NTA1X2JyaWRn ZV9wbV9vcHMsIGl0NjUwNV9icmlkZ2Vfc3VzcGVuZCwNCisJCQkgaXQ2NTA1X2JyaWRnZV9yZXN1 bWUpOw0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2luaXRfcGRhdGEoc3RydWN0IGl0NjUwNSAqaXQ2 NTA1KQ0KK3sNCisJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZpdDY1MDUt PnBkYXRhOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisN CisJLyogMS4wViBkaWdpdGFsIGNvcmUgcG93ZXIgcmVndWxhdG9yICAqLw0KKwlwZGF0YS0+cHdy MTggPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAicHdyMTgiKTsNCisJaWYgKElTX0VSUihwZGF0 YS0+cHdyMTgpKSB7DQorCQlkZXZfZXJyKGRldiwgInB3cjE4IHJlZ3VsYXRvciBub3QgZm91bmQi KTsNCisJCXJldHVybiBQVFJfRVJSKHBkYXRhLT5wd3IxOCk7DQorCX0NCisNCisJcGRhdGEtPm92 ZGQgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAib3ZkZCIpOw0KKwlpZiAoSVNfRVJSKHBkYXRh LT5vdmRkKSkgew0KKwkJZGV2X2VycihkZXYsICJvdmRkIHJlZ3VsYXRvciBub3QgZm91bmQiKTsN CisJCXJldHVybiBQVFJfRVJSKHBkYXRhLT5vdmRkKTsNCisJfQ0KKw0KKwlwZGF0YS0+Z3Bpb2Rf cmVzZXQgPSBkZXZtX2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9EX09VVF9ISUdIKTsNCisJ aWYgKElTX0VSUihwZGF0YS0+Z3Bpb2RfcmVzZXQpKSB7DQorCQlkZXZfZXJyKGRldiwgImdwaW9k X3Jlc2V0IGdwaW8gbm90IGZvdW5kIik7DQorCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+Z3Bpb2Rf cmVzZXQpOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVf cGFyc2VfZHQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCXUzMiAqYWZlX3NldHRpbmcgPSAmaXQ2NTA1LT5h ZmVfc2V0dGluZzsNCisNCisJaXQ2NTA1LT5sYW5lX3N3YXBfZGlzYWJsZWQgPQ0KKwkJZGV2aWNl X3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsICJuby1sYW5lc3dhcCIpOw0KKw0KKwlpZiAoaXQ2NTA1 LT5sYW5lX3N3YXBfZGlzYWJsZWQpDQorCQlpdDY1MDUtPmxhbmVfc3dhcCA9IGZhbHNlOw0KKw0K KwlpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImFmZS1zZXR0aW5nIiwgYWZlX3Nl dHRpbmcpID09IDApIHsNCisJCWlmICgqYWZlX3NldHRpbmcgPj0gQVJSQVlfU0laRShhZmVfc2V0 dGluZ190YWJsZSkpIHsNCisJCQlkZXZfZXJyKGRldiwgImFmZSBzZXR0aW5nIGVycm9yLCB1c2Ug ZGVmYXVsdCIpOw0KKwkJCSphZmVfc2V0dGluZyA9IDA7DQorCQl9DQorCX0gZWxzZSB7DQorCQkq YWZlX3NldHRpbmcgPSAwOw0KKwl9DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInVzaW5n IGFmZV9zZXR0aW5nOiAlZCIsICphZmVfc2V0dGluZyk7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90 IHJlY2VpdmVfdGltaW5nX2RlYnVnZnNfc2hvdyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3Vz ZXIgKmJ1ZiwNCisJCQkJCSAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykNCit7DQorCXN0cnVj dCBpdDY1MDUgKml0NjUwNSA9IGZpbGUtPnByaXZhdGVfZGF0YTsNCisJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKnZpZCA9ICZpdDY1MDUtPnZpZGVvX2luZm87DQorCXU4IHJlYWRfYnVmW1JFQURf QlVGRkVSX1NJWkVdOw0KKwl1OCAqc3RyID0gcmVhZF9idWYsICplbmQgPSByZWFkX2J1ZiArIFBB R0VfU0laRTsNCisJc3NpemVfdCByZXQsIGNvdW50Ow0KKw0KKwlpZiAoIWl0NjUwNSkNCisJCXJl dHVybiAtRU5PREVWOw0KKw0KKwlpdDY1MDVfY2FsY192aWRlb19pbmZvKGl0NjUwNSk7DQorCXN0 ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICItLS12aWRlbyB0aW1pbmctLS1cbiIpOw0K KwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiUENMSzolZC4lMDNkTUh6XG4iLA0K KwkJCSB2aWQtPmNsb2NrIC8gMTAwMCwgdmlkLT5jbG9jayAlIDEwMDApOw0KKwlzdHIgKz0gc2Nu cHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiSFRvdGFsOiVkXG4iLCB2aWQtPmh0b3RhbCk7DQorCXN0 ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIQWN0aXZlOiVkXG4iLCB2aWQtPmhkaXNw bGF5KTsNCisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIkhGcm9udFBvcmNoOiVk XG4iLA0KKwkJCSB2aWQtPmhzeW5jX3N0YXJ0IC0gdmlkLT5oZGlzcGxheSk7DQorCXN0ciArPSBz Y25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIU3luY1dpZHRoOiVkXG4iLA0KKwkJCSB2aWQtPmhz eW5jX2VuZCAtIHZpZC0+aHN5bmNfc3RhcnQpOw0KKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5k IC0gc3RyLCAiSEJhY2tQb3JjaDolZFxuIiwNCisJCQkgdmlkLT5odG90YWwgLSB2aWQtPmhzeW5j X2VuZCk7DQorCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJWVG90YWw6JWRcbiIs IHZpZC0+dnRvdGFsKTsNCisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlZBY3Rp dmU6JWRcbiIsIHZpZC0+dmRpc3BsYXkpOw0KKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0g c3RyLCAiVkZyb250UG9yY2g6JWRcbiIsDQorCQkJIHZpZC0+dnN5bmNfc3RhcnQgLSB2aWQtPnZk aXNwbGF5KTsNCisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlZTeW5jV2lkdGg6 JWRcbiIsDQorCQkJIHZpZC0+dnN5bmNfZW5kIC0gdmlkLT52c3luY19zdGFydCk7DQorCXN0ciAr PSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJWQmFja1BvcmNoOiVkXG4iLA0KKwkJCSB2aWQt PnZ0b3RhbCAtIHZpZC0+dnN5bmNfZW5kKTsNCisNCisJY291bnQgPSBzdHIgLSByZWFkX2J1ZjsN CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBsZW4sIHBwb3MsIHJlYWRfYnVm LCBjb3VudCk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgZm9yY2VfcG93 ZXJfb25fb2ZmX2RlYnVnZnNfd3JpdGUodm9pZCAqZGF0YSwgdTY0IHZhbHVlKQ0KK3sNCisJc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGF0YTsNCisNCisJaWYgKCFpdDY1MDUpDQorCQlyZXR1cm4g LUVOT0RFVjsNCisNCisJaWYgKHZhbHVlKQ0KKwkJaXQ2NTA1X3Bvd2Vyb24oaXQ2NTA1KTsNCisJ ZWxzZQ0KKwkJaXQ2NTA1X3Bvd2Vyb2ZmKGl0NjUwNSk7DQorDQorCXJldHVybiAwOw0KK30NCisN CitzdGF0aWMgaW50IGVuYWJsZV9kcnZfaG9sZF9kZWJ1Z2ZzX3Nob3codm9pZCAqZGF0YSwgdTY0 ICpidWYpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkYXRhOw0KKw0KKwlpZiAoIWl0 NjUwNSkNCisJCXJldHVybiAtRU5PREVWOw0KKw0KKwkqYnVmID0gaXQ2NTA1LT5lbmFibGVfZHJ2 X2hvbGQ7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGVuYWJsZV9kcnZfaG9s ZF9kZWJ1Z2ZzX3dyaXRlKHZvaWQgKmRhdGEsIHU2NCBkcnZfaG9sZCkNCit7DQorCXN0cnVjdCBp dDY1MDUgKml0NjUwNSA9IGRhdGE7DQorDQorCWlmICghaXQ2NTA1KQ0KKwkJcmV0dXJuIC1FTk9E RVY7DQorDQorCWl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkID0gZHJ2X2hvbGQ7DQorDQorCWlmIChp dDY1MDUtPmVuYWJsZV9kcnZfaG9sZCkgew0KKwkJaXQ2NTA1X2ludF9tYXNrX2Rpc2FibGUoaXQ2 NTA1KTsNCisJfSBlbHNlIHsNCisJCWl0NjUwNV9jbGVhcl9pbnQoaXQ2NTA1KTsNCisJCWl0NjUw NV9pbnRfbWFza19lbmFibGUoaXQ2NTA1KTsNCisNCisJCWlmIChpdDY1MDUtPnBvd2VyZWQpIHsN CisJCQlpdDY1MDUtPmNvbm5lY3Rvcl9zdGF0dXMgPQ0KKwkJCQkJaXQ2NTA1X2dldF9zaW5rX2hw ZF9zdGF0dXMoaXQ2NTA1KSA/DQorCQkJCQljb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6DQor CQkJCQljb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsNCisJCX0gZWxzZSB7DQorCQkJaXQ2 NTA1LT5jb25uZWN0b3Jfc3RhdHVzID0NCisJCQkJCWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVj dGVkOw0KKwkJfQ0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGZpbGVfb3BlcmF0aW9ucyByZWNlaXZlX3RpbWluZ19mb3BzID0gew0KKwkub3duZXIgPSBU SElTX01PRFVMRSwNCisJLm9wZW4gPSBzaW1wbGVfb3BlbiwNCisJLnJlYWQgPSByZWNlaXZlX3Rp bWluZ19kZWJ1Z2ZzX3Nob3csDQorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywNCit9Ow0KKw0K K0RFRklORV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX2ZvcmNlX3Bvd2VyLCBOVUxMLA0KKwkJCSBm b3JjZV9wb3dlcl9vbl9vZmZfZGVidWdmc193cml0ZSwgIiVsbHVcbiIpOw0KKw0KK0RFRklORV9E RUJVR0ZTX0FUVFJJQlVURShmb3BzX2VuYWJsZV9kcnZfaG9sZCwgZW5hYmxlX2Rydl9ob2xkX2Rl YnVnZnNfc2hvdywNCisJCQkgZW5hYmxlX2Rydl9ob2xkX2RlYnVnZnNfd3JpdGUsICIlbGx1XG4i KTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGRlYnVnZnNfZW50cmllcyBkZWJ1Z2ZzX2VudHJ5 W10gPSB7DQorCXsgInJlY2VpdmVfdGltaW5nIiwgJnJlY2VpdmVfdGltaW5nX2ZvcHMgfSwNCisJ eyAiZm9yY2VfcG93ZXJfb25fb2ZmIiwgJmZvcHNfZm9yY2VfcG93ZXIgfSwNCisJeyAiZW5hYmxl X2Rydl9ob2xkIiwgJmZvcHNfZW5hYmxlX2Rydl9ob2xkIH0sDQorCXsgTlVMTCwgTlVMTCB9LA0K K307DQorDQorc3RhdGljIHZvaWQgZGVidWdmc19jcmVhdGVfZmlsZXMoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQ0KK3sNCisJaW50IGkgPSAwOw0KKw0KKwl3aGlsZSAoZGVidWdmc19lbnRyeVtpXS5u YW1lICYmIGRlYnVnZnNfZW50cnlbaV0uZm9wcykgew0KKwkJZGVidWdmc19jcmVhdGVfZmlsZShk ZWJ1Z2ZzX2VudHJ5W2ldLm5hbWUsIDA2NDQsDQorCQkJCSAgICBpdDY1MDUtPmRlYnVnZnMsIGl0 NjUwNSwNCisJCQkJICAgIGRlYnVnZnNfZW50cnlbaV0uZm9wcyk7DQorCQlpKys7DQorCX0NCit9 DQorDQorc3RhdGljIHZvaWQgZGVidWdmc19pbml0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7 DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlpdDY1 MDUtPmRlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoREVCVUdGU19ESVJfTkFNRSwgTlVMTCk7 DQorDQorCWlmIChJU19FUlIoaXQ2NTA1LT5kZWJ1Z2ZzKSkgew0KKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gY3JlYXRlIGRlYnVnZnMgcm9vdCIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCWRl YnVnZnNfY3JlYXRlX2ZpbGVzKGl0NjUwNSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9k ZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlkZWJ1Z2ZzX3JlbW92 ZV9yZWN1cnNpdmUoaXQ2NTA1LT5kZWJ1Z2ZzKTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1 X3NodXRkb3duKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoJmNsaWVudC0+ZGV2KTsNCisNCisJaWYgKGl0NjUw NS0+cG93ZXJlZCkNCisJCWl0NjUwNV9sYW5lX29mZihpdDY1MDUpOw0KK30NCisNCitzdGF0aWMg aW50IGl0NjUwNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwNCisJCQkgICAg Y29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2 NTA1Ow0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7DQorCXN0cnVjdCBleHRj b25fZGV2ICpleHRjb247DQorCWludCBlcnIsIGludHBfaXJxOw0KKw0KKwlpdDY1MDUgPSBkZXZt X2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKml0NjUwNSksIEdGUF9LRVJORUwpOw0KKwlp ZiAoIWl0NjUwNSkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwltdXRleF9pbml0KCZpdDY1MDUt PmV4dGNvbl9sb2NrKTsNCisJbXV0ZXhfaW5pdCgmaXQ2NTA1LT5tb2RlX2xvY2spOw0KKwltdXRl eF9pbml0KCZpdDY1MDUtPmF1eF9sb2NrKTsNCisNCisJaXQ2NTA1LT5icmlkZ2Uub2Zfbm9kZSA9 IGNsaWVudC0+ZGV2Lm9mX25vZGU7DQorCWl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1cyA9IGNvbm5l Y3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOw0KKwlpdDY1MDUtPmNsaWVudCA9IGNsaWVudDsNCisJ aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgaXQ2NTA1KTsNCisNCisJLyogZ2V0IGV4dGNvbiBk ZXZpY2UgZnJvbSBEVFMgKi8NCisJZXh0Y29uID0gZXh0Y29uX2dldF9lZGV2X2J5X3BoYW5kbGUo ZGV2LCAwKTsNCisJaWYgKFBUUl9FUlIoZXh0Y29uKSA9PSAtRVBST0JFX0RFRkVSKQ0KKwkJcmV0 dXJuIC1FUFJPQkVfREVGRVI7DQorCWlmIChJU19FUlIoZXh0Y29uKSkgew0KKwkJZGV2X2Vycihk ZXYsICJjYW4gbm90IGdldCBleHRjb24gZGV2aWNlISIpOw0KKwkJcmV0dXJuIFBUUl9FUlIoZXh0 Y29uKTsNCisJfQ0KKw0KKwlpdDY1MDUtPmV4dGNvbiA9IGV4dGNvbjsNCisNCisJaXQ2NTA1LT5y ZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZpdDY1MDVfcmVnbWFwX2NvbmZp Zyk7DQorCWlmIChJU19FUlIoaXQ2NTA1LT5yZWdtYXApKSB7DQorCQlkZXZfZXJyKGRldiwgInJl Z21hcCBpMmMgaW5pdCBmYWlsZWQiKTsNCisJCWVyciA9IFBUUl9FUlIoaXQ2NTA1LT5yZWdtYXAp Ow0KKwkJcmV0dXJuIGVycjsNCisJfQ0KKw0KKwllcnIgPSBpdDY1MDVfaW5pdF9wZGF0YShpdDY1 MDUpOw0KKwlpZiAoZXJyKSB7DQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXpl IHBkYXRhOiAlZCIsIGVycik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWl0NjUwNV9wYXJz ZV9kdChpdDY1MDUpOw0KKw0KKwlpbnRwX2lycSA9IGNsaWVudC0+aXJxOw0KKw0KKwlpZiAoIWlu dHBfaXJxKSB7DQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgSU5UUCBJUlEiKTsNCisJ CWVyciA9IC1FTk9ERVY7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWVyciA9IGRldm1fcmVx dWVzdF90aHJlYWRlZF9pcnEoJmNsaWVudC0+ZGV2LCBpbnRwX2lycSwgTlVMTCwNCisJCQkJCWl0 NjUwNV9pbnRfdGhyZWFkZWRfaGFuZGxlciwNCisJCQkJCUlSUUZfVFJJR0dFUl9MT1cgfCBJUlFG X09ORVNIT1QsDQorCQkJCQkiaXQ2NTA1LWludHAiLCBpdDY1MDUpOw0KKwlpZiAoZXJyKSB7DQor CQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElOVFAgdGhyZWFkZWQgSVJROiAlZCIs IGVycik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCS8qIFJlZ2lzdGVyIGF1eCBjaGFubmVs ICovDQorCWl0NjUwNS0+YXV4Lm5hbWUgPSAiRFAtQVVYIjsNCisJaXQ2NTA1LT5hdXguZGV2ID0g ZGV2Ow0KKwlpdDY1MDUtPmF1eC50cmFuc2ZlciA9IGl0NjUwNV9hdXhfdHJhbnNmZXI7DQorDQor CWVyciA9IGRybV9kcF9hdXhfcmVnaXN0ZXIoJml0NjUwNS0+YXV4KTsNCisJaWYgKGVyciA8IDAp IHsNCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGF1eDogJWQiLCBlcnIpOw0K KwkJcmV0dXJuIGVycjsNCisJfQ0KKw0KKwlJTklUX1dPUksoJml0NjUwNS0+bGlua193b3Jrcywg aXQ2NTA1X2xpbmtfdHJhaW5pbmdfd29yayk7DQorCUlOSVRfV09SSygmaXQ2NTA1LT5oZGNwX3dh aXRfa3N2X2xpc3QsIGl0NjUwNV9oZGNwX3dhaXRfa3N2X2xpc3QpOw0KKwlJTklUX0RFTEFZRURf V09SSygmaXQ2NTA1LT5oZGNwX3dvcmssIGl0NjUwNV9oZGNwX3dvcmspOw0KKwlpbml0X2NvbXBs ZXRpb24oJml0NjUwNS0+d2FpdF9lZGlkX2NvbXBsZXRlKTsNCisJbWVtc2V0KGl0NjUwNS0+ZHBj ZCwgMCwgc2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOw0KKwlpdDY1MDUtPnBvd2VyZWQgPSBmYWxzZTsN CisJaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQgPSBERUZBVUxUX0RSVl9IT0xEOw0KKw0KKwlpZiAo REVGQVVMVF9QV1JfT04pDQorCQlpdDY1MDVfcG93ZXJvbihpdDY1MDUpOw0KKw0KKwlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJpdDY1MDUgZGV2aWNlIG5hbWU6ICVzIiwgZGV2X25hbWUoZGV2 KSk7DQorCWRlYnVnZnNfaW5pdChpdDY1MDUpOw0KKw0KKwlpdDY1MDUtPmJyaWRnZS5mdW5jcyA9 ICZpdDY1MDVfYnJpZGdlX2Z1bmNzOw0KKwlpdDY1MDUtPmJyaWRnZS50eXBlID0gRFJNX01PREVf Q09OTkVDVE9SX0Rpc3BsYXlQb3J0Ow0KKwlpdDY1MDUtPmJyaWRnZS5vcHMgPSBEUk1fQlJJREdF X09QX0RFVEVDVCB8IERSTV9CUklER0VfT1BfRURJRCB8DQorCQkJICAgICBEUk1fQlJJREdFX09Q X0hQRDsNCisJZHJtX2JyaWRnZV9hZGQoJml0NjUwNS0+YnJpZGdlKTsNCisNCisJcmV0dXJuIDA7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQg KmNsaWVudCkNCit7DQorCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGkyY19nZXRfY2xpZW50ZGF0 YShjbGllbnQpOw0KKw0KKwlkcm1fYnJpZGdlX3JlbW92ZSgmaXQ2NTA1LT5icmlkZ2UpOw0KKwlk cm1fZHBfYXV4X3VucmVnaXN0ZXIoJml0NjUwNS0+YXV4KTsNCisJaXQ2NTA1X2RlYnVnZnNfcmVt b3ZlKGl0NjUwNSk7DQorCWl0NjUwNV9wb3dlcm9mZihpdDY1MDUpOw0KKw0KKwlyZXR1cm4gMDsN Cit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGl0NjUwNV9pZFtdID0g ew0KKwl7ICJpdDY1MDUiLCAwIH0sDQorCXsgfQ0KK307DQorDQorTU9EVUxFX0RFVklDRV9UQUJM RShpMmMsIGl0NjUwNV9pZCk7DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg aXQ2NTA1X29mX21hdGNoW10gPSB7DQorCXsgLmNvbXBhdGlibGUgPSAiaXRlLGl0NjUwNSIgfSwN CisJeyB9DQorfTsNCisNCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXQ2NTA1X2kyY19kcml2 ZXIgPSB7DQorCS5kcml2ZXIgPSB7DQorCQkubmFtZSA9ICJpdDY1MDUiLA0KKwkJLm9mX21hdGNo X3RhYmxlID0gaXQ2NTA1X29mX21hdGNoLA0KKwkJLnBtID0gJml0NjUwNV9icmlkZ2VfcG1fb3Bz LA0KKwl9LA0KKwkucHJvYmUgPSBpdDY1MDVfaTJjX3Byb2JlLA0KKwkucmVtb3ZlID0gaXQ2NTA1 X2kyY19yZW1vdmUsDQorCS5zaHV0ZG93biA9IGl0NjUwNV9zaHV0ZG93biwNCisJLmlkX3RhYmxl ID0gaXQ2NTA1X2lkLA0KK307DQorDQorbW9kdWxlX2kyY19kcml2ZXIoaXQ2NTA1X2kyY19kcml2 ZXIpOw0KKw0KK01PRFVMRV9BVVRIT1IoIkFsbGVuIENoZW4gPGFsbGVuLmNoZW5AaXRlLmNvbS50 dz4iKTsNCitNT0RVTEVfREVTQ1JJUFRJT04oIklUNjUwNSBEaXNwbGF5UG9ydCBUcmFuc21pdHRl ciBkcml2ZXIiKTsNCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQotLSANCjIuMjUuMQ0KDQo= 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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B8A6BC433F5 for ; Wed, 6 Oct 2021 04:08:32 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 731C76120F for ; Wed, 6 Oct 2021 04:08:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 731C76120F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ite.com.tw Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A0F246E4DD; Wed, 6 Oct 2021 04:08:31 +0000 (UTC) X-Greylist: delayed 913 seconds by postgrey-1.36 at gabe; Wed, 06 Oct 2021 04:08:29 UTC Received: from ironport.ite.com.tw (60-251-196-230.hinet-ip.hinet.net [60.251.196.230]) by gabe.freedesktop.org (Postfix) with ESMTPS id 12AAC6E4DD for ; Wed, 6 Oct 2021 04:08:28 +0000 (UTC) IronPort-SDR: HosUzv1IP9inQQn0uFDeVB9e8joJq+0GbAGuYPImpDZyuRgctJk5o3a+SrEfO50asUPpTQoJwl HUwefnZeIxEg== Received: from unknown (HELO mse.ite.com.tw) ([192.168.35.30]) by ironport.ite.com.tw with ESMTP; 06 Oct 2021 11:53:14 +0800 Received: from CSBMAIL1.internal.ite.com.tw (csbmail1.internal.ite.com.tw [192.168.65.58]) by mse.ite.com.tw with ESMTP id 1963r9A2041190; Wed, 6 Oct 2021 11:53:09 +0800 (GMT-8) (envelope-from allen.chen@ite.com.tw) Received: from CSBMAIL1.internal.ite.com.tw (192.168.65.58) by CSBMAIL1.internal.ite.com.tw (192.168.65.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.14; Wed, 6 Oct 2021 11:53:09 +0800 Received: from CSBMAIL1.internal.ite.com.tw ([fe80::dd22:b444:859b:61c7]) by CSBMAIL1.internal.ite.com.tw ([fe80::dd22:b444:859b:61c7%18]) with mapi id 15.01.2176.014; Wed, 6 Oct 2021 11:53:09 +0800 From: CC: , , , , , , , , , , , , , , , , , , Subject: RE: [PATCH v8] drm/bridge: add it6505 driver Thread-Topic: [PATCH v8] drm/bridge: add it6505 driver Thread-Index: AQHXjds2dUIA16sisEKuygPI0MN7NavFrweg Date: Wed, 6 Oct 2021 03:53:09 +0000 Message-ID: <49cd8222b18749f282b5dff0b1f36daa@ite.com.tw> References: <20210810111124.247838-1-allen.chen@ite.com.tw> In-Reply-To: <20210810111124.247838-1-allen.chen@ite.com.tw> Accept-Language: en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.70.16] x-tm-snts-smtp: E79F6F577DFF53B08AF11B0DD2CBA0E5094BBBDABBA0A53335427E6F06A98F572002:8 Content-Type: text/plain; charset="big5" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MAIL: mse.ite.com.tw 1963r9A2041190 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" SGkNCg0KSXQgaGFzIGJlZW4gYWJvdXQgdHdvIG1vbnRocyBzaW5jZSBJIHBvc3RlZCB2OA0KQ29u c2lkZXIgdGhpcyBhIGdlbnRsZSBwaW5nLg0KDQpKdXN0IHdvbmRlcmluZyBpZiB0aGUgc2V0IG5l ZWRzIGFkZGl0aW9uYWwgd29yayBhbmQgSSB3aWxsIGZpeCBhbmQgdXBzdHJlYW0gYWdhaW4uDQoN Ci0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBBbGxlbiBDaGVuICizr6xmpnQpIA0K U2VudDogVHVlc2RheSwgQXVndXN0IDEwLCAyMDIxIDc6MTEgUE0NCkNjOiBBbGxlbiBDaGVuICiz r6xmpnQpOyBIc2luLVlpIFdhbmc7IEtlbm5ldGggSHVuZyAorHiuYa3bKTsgSGVybWVzIFd1ICin ZKjOp7spOyBKYXUtQ2hpaCBUc2VuZyAotL+sTLS8KTsgSHNpbi15aSBXYW5nOyBIZXJtZXMgV3Ug KKdkqM6nuyk7IEFuZHJ6ZWogSGFqZGE7IE5laWwgQXJtc3Ryb25nOyBSb2JlcnQgRm9zczsgTGF1 cmVudCBQaW5jaGFydDsgSm9uYXMgS2FybG1hbjsgSmVybmVqIFNrcmFiZWM7IERhdmlkIEFpcmxp ZTsgRGFuaWVsIFZldHRlcjsgTWF0dGhpYXMgQnJ1Z2dlcjsgb3BlbiBsaXN0OyBvcGVuIGxpc3Q6 RFJNIERSSVZFUlM7IG1vZGVyYXRlZCBsaXN0OkFSTS9NZWRpYXRlayBTb0Mgc3VwcG9ydDsgbW9k ZXJhdGVkIGxpc3Q6QVJNL01lZGlhdGVrIFNvQyBzdXBwb3J0DQpTdWJqZWN0OiBbUEFUQ0ggdjhd IGRybS9icmlkZ2U6IGFkZCBpdDY1MDUgZHJpdmVyDQoNClRoaXMgYWRkcyBzdXBwb3J0IGZvciB0 aGUgaVRFIElUNjUwNS4NClRoaXMgZGV2aWNlIGNhbiBjb252ZXJ0IERQSSBzaWduYWwgdG8gRFAg b3V0cHV0Lg0KDQpGcm9tOiBBbGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+DQpUZXN0 ZWQtYnk6IEhzaW4teWkgV2FuZyA8aHNpbnlpQGNocm9taXVtLm9yZz4NClNpZ25lZC1vZmYtYnk6 IEhlcm1lcyBXdSA8aGVybWVzLnd1QGl0ZS5jb20udHc+DQpTaWduZWQtb2ZmLWJ5OiBBbGxlbiBD aGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+DQoNCnY3LT52ODoNCmZpeGVkICJjaGVja3BhdGNo IC0tc3RyaWN0IiBlcnJvcg0KcmVtb3ZlIHVudXNlZCB2YXJpYWJsZSAqZWRpZA0KcmVtb3ZlIG1v ZGVfc2V0KCkgY2FsbGJhY2sNCkRvY3VtZW50aW5nIHRoZSBpbmRpdmlkdWFsIGJpdHMgb2YgdGhl IGludGVycnVwdCBtYXNrIHZhbHVlcw0KY2hhbmdlIGl0NjUwNV9kcGNkX3dyaXRlIHBhcmFtZXRl ciBmcm9tIHVuc2lnbmVkIGxvbmcgdG8gdTgNCg0KVGhpcyBwYXRjaCBkZXBlbmRzIG9uIGh0dHBz Oi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1tZWRpYXRlay9wYXRjaC8yMDIx MDcyMjA2MjI0Ni4yNTEyNjY2LTQtc2FtQHJhdm5ib3JnLm9yZy8NCi0tLQ0KIGRyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvS2NvbmZpZyAgICAgIHwgICAgOCArDQogZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9NYWtlZmlsZSAgICAgfCAgICAxICsNCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1 MDUuYyB8IDMzMzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogMyBmaWxlcyBjaGFuZ2Vk LCAzMzQyIGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9pdGUtaXQ2NTA1LmMNCg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZw0KaW5kZXggNDMxYjZl MTJhODFmZS4uZTFhZmUxNzEwNzVmNSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvS2NvbmZpZw0KKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnDQpAQCAtNzQs NiArNzQsMTQgQEAgY29uZmlnIERSTV9ESVNQTEFZX0NPTk5FQ1RPUg0KIAkgIG9uIEFSTS1iYXNl ZCBwbGF0Zm9ybXMuIFNheWluZyBZIGhlcmUgd2hlbiB0aGlzIGRyaXZlciBpcyBub3QgbmVlZGVk DQogCSAgd2lsbCBub3QgY2F1c2UgYW55IGlzc3VlLg0KIA0KK2NvbmZpZyBEUk1fSVRFX0lUNjUw NQ0KKyAgICAgICAgdHJpc3RhdGUgIklURSBJVDY1MDUgRGlzcGxheVBvcnQgYnJpZGdlIg0KKyAg ICAgICAgZGVwZW5kcyBvbiBPRg0KKyAgICAgICAgc2VsZWN0IERSTV9LTVNfSEVMUEVSDQorICAg ICAgICBzZWxlY3QgRVhUQ09ODQorICAgICAgICBoZWxwDQorICAgICAgICAgIElURSBJVDY1MDUg RGlzcGxheVBvcnQgYnJpZGdlIGNoaXAgZHJpdmVyLg0KKw0KIGNvbmZpZyBEUk1fTE9OVElVTV9M VDg5MTJCDQogCXRyaXN0YXRlICJMb250aXVtIExUODkxMkIgRFNJL0hETUkgYnJpZGdlIg0KIAlk ZXBlbmRzIG9uIE9GDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUNCmluZGV4IGYyYzczNjgzY2ZjYjcu LjQyNTg0NGMzMDQ5NTMgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2Vm aWxlDQorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlDQpAQCAtNCw2ICs0LDcg QEAgb2JqLSQoQ09ORklHX0RSTV9DSElQT05FX0lDTjYyMTEpICs9IGNoaXBvbmUtaWNuNjIxMS5v DQogb2JqLSQoQ09ORklHX0RSTV9DSFJPTlRFTF9DSDcwMzMpICs9IGNocm9udGVsLWNoNzAzMy5v DQogb2JqLSQoQ09ORklHX0RSTV9DUk9TX0VDX0FOWDc2ODgpICs9IGNyb3MtZWMtYW54NzY4OC5v DQogb2JqLSQoQ09ORklHX0RSTV9ESVNQTEFZX0NPTk5FQ1RPUikgKz0gZGlzcGxheS1jb25uZWN0 b3Iubw0KK29iai0kKENPTkZJR19EUk1fSVRFX0lUNjUwNSkgKz0gaXRlLWl0NjUwNS5vDQogb2Jq LSQoQ09ORklHX0RSTV9MT05USVVNX0xUODkxMkIpICs9IGxvbnRpdW0tbHQ4OTEyYi5vDQogb2Jq LSQoQ09ORklHX0RSTV9MT05USVVNX0xUOTYxMSkgKz0gbG9udGl1bS1sdDk2MTEubw0KIG9iai0k KENPTkZJR19EUk1fTE9OVElVTV9MVDk2MTFVWEMpICs9IGxvbnRpdW0tbHQ5NjExdXhjLm8NCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMDAwMDAwMC4uMjc1ODZjM2ZkNWYyOA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMNCkBAIC0wLDAgKzEsMzMzMyBAQA0KKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkNCisv Kg0KKyAqIENvcHlyaWdodCAoYykgMjAyMCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuDQorICovDQorI2luY2x1ZGUgPGxpbnV4L2JpdHMuaD4NCisjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4NCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxp bnV4L2Vyci5oPg0KKyNpbmNsdWRlIDxsaW51eC9leHRjb24uaD4NCisjaW5jbHVkZSA8bGludXgv ZnMuaD4NCisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPg0KKyNpbmNsdWRlIDxsaW51 eC9pMmMuaD4NCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQorI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgv cG1fcnVudGltZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCisjaW5jbHVkZSA8bGlu dXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+DQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L3dhaXQuaD4NCisNCisjaW5jbHVkZSA8Y3J5cHRvL2hhc2guaD4NCisNCisj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+DQorI2luY2x1ZGUgPGRybS9kcm1fYnJp ZGdlLmg+DQorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPg0KKyNpbmNsdWRlIDxkcm0vZHJtX2Ny dGNfaGVscGVyLmg+DQorI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+DQorI2luY2x1ZGUg PGRybS9kcm1fZWRpZC5oPg0KKyNpbmNsdWRlIDxkcm0vZHJtX2hkY3AuaD4NCisjaW5jbHVkZSA8 ZHJtL2RybV9wcmludC5oPg0KKyNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPg0KKw0K KyNpbmNsdWRlIDxzb3VuZC9oZG1pLWNvZGVjLmg+DQorDQorI2RlZmluZSBSRUdfSUNfVkVSIDB4 MDQNCisNCisjZGVmaW5lIFJFR19SRVNFVF9DVFJMIDB4MDUNCisjZGVmaW5lIFZJREVPX1JFU0VU IEJJVCgwKQ0KKyNkZWZpbmUgQVVESU9fUkVTRVQgQklUKDEpDQorI2RlZmluZSBBTExfTE9HSUNf UkVTRVQgQklUKDIpDQorI2RlZmluZSBBVVhfUkVTRVQgQklUKDMpDQorI2RlZmluZSBIRENQX1JF U0VUIEJJVCg0KQ0KKw0KKyNkZWZpbmUgSU5UX1NUQVRVU18wMSAweDA2DQorI2RlZmluZSBJTlRf TUFTS18wMSAweDA5DQorI2RlZmluZSBJTlRfSFBEX0NIQU5HRSAwDQorI2RlZmluZSBJTlRfUkVD RUlWRV9IUERfSVJRIDENCisjZGVmaW5lIElOVF9TQ0RUX0NIQU5HRSAyDQorI2RlZmluZSBJTlRf SERDUF9GQUlMIDMNCisjZGVmaW5lIElOVF9IRENQX0RPTkUgNA0KKyNkZWZpbmUgQklUX09GRlNF VCh4KSAoKCh4KSAtIElOVF9TVEFUVVNfMDEpICogQklUU19QRVJfQllURSkNCisjZGVmaW5lIEJJ VF9JTlRfSFBEIElOVF9IUERfQ0hBTkdFDQorI2RlZmluZSBCSVRfSU5UX0hQRF9JUlEgSU5UX1JF Q0VJVkVfSFBEX0lSUQ0KKyNkZWZpbmUgQklUX0lOVF9TQ0RUIElOVF9TQ0RUX0NIQU5HRQ0KKyNk ZWZpbmUgQklUX0lOVF9IRENQX0ZBSUwgSU5UX0hEQ1BfRkFJTA0KKyNkZWZpbmUgQklUX0lOVF9I RENQX0RPTkUgSU5UX0hEQ1BfRE9ORQ0KKw0KKyNkZWZpbmUgSU5UX1NUQVRVU18wMiAweDA3DQor I2RlZmluZSBJTlRfTUFTS18wMiAweDBBDQorI2RlZmluZSBJTlRfQVVYX0NNRF9GQUlMIDANCisj ZGVmaW5lIElOVF9IRENQX0tTVl9DSEVDSyAxDQorI2RlZmluZSBJTlRfQVVESU9fRklGT19FUlJP UiAyDQorI2RlZmluZSBCSVRfSU5UX0FVWF9DTURfRkFJTCAoQklUX09GRlNFVCgweDA3KSArIElO VF9BVVhfQ01EX0ZBSUwpDQorI2RlZmluZSBCSVRfSU5UX0hEQ1BfS1NWX0NIRUNLIChCSVRfT0ZG U0VUKDB4MDcpICsgSU5UX0hEQ1BfS1NWX0NIRUNLKQ0KKyNkZWZpbmUgQklUX0lOVF9BVURJT19G SUZPX0VSUk9SIChCSVRfT0ZGU0VUKDB4MDcpICsgSU5UX0FVRElPX0ZJRk9fRVJST1IpDQorDQor I2RlZmluZSBJTlRfU1RBVFVTXzAzIDB4MDgNCisjZGVmaW5lIElOVF9NQVNLXzAzIDB4MEINCisj ZGVmaW5lIElOVF9MSU5LX1RSQUlOX0ZBSUwgNA0KKyNkZWZpbmUgSU5UX1ZJRF9GSUZPX0VSUk9S IDUNCisjZGVmaW5lIElOVF9JT19MQVRDSF9GSUZPX09WRVJGTE9XIDcNCisjZGVmaW5lIEJJVF9J TlRfTElOS19UUkFJTl9GQUlMIChCSVRfT0ZGU0VUKDB4MDgpICsgSU5UX0xJTktfVFJBSU5fRkFJ TCkNCisjZGVmaW5lIEJJVF9JTlRfVklEX0ZJRk9fRVJST1IgKEJJVF9PRkZTRVQoMHgwOCkgKyBJ TlRfVklEX0ZJRk9fRVJST1IpDQorI2RlZmluZSBCSVRfSU5UX0lPX0ZJRk9fT1ZFUkZMT1cgKEJJ VF9PRkZTRVQoMHgwOCkgKyBJTlRfSU9fTEFUQ0hfRklGT19PVkVSRkxPVykNCisNCisjZGVmaW5l IFJFR19TWVNURU1fU1RTIDB4MEQNCisjZGVmaW5lIElOVF9TVFMgQklUKDApDQorI2RlZmluZSBI UERfU1RTIEJJVCgxKQ0KKyNkZWZpbmUgVklERU9fU1RCIEJJVCgyKQ0KKw0KKyNkZWZpbmUgUkVH X0xJTktfVFJBSU5fU1RTIDB4MEUNCisjZGVmaW5lIExJTktfU1RBVEVfQ1IgQklUKDIpDQorI2Rl ZmluZSBMSU5LX1NUQVRFX0VRIEJJVCgzKQ0KKyNkZWZpbmUgTElOS19TVEFURV9OT1JQIEJJVCg0 KQ0KKw0KKyNkZWZpbmUgUkVHX0JBTktfU0VMIDB4MEYNCisjZGVmaW5lIFJFR19DTEtfQ1RSTDAg MHgxMA0KKyNkZWZpbmUgTV9QQ0xLX0RFTEFZIDB4MDMNCisNCisjZGVmaW5lIFJFR19BVVhfT1BU IDB4MTENCisjZGVmaW5lIEFVWF9BVVRPX1JTVCBCSVQoMCkNCisjZGVmaW5lIEFVWF9GSVhfRlJF USBCSVQoMykNCisNCisjZGVmaW5lIFJFR19EQVRBX0NUUkwwIDB4MTINCisjZGVmaW5lIFZJREVP X0xBVENIX0VER0UgQklUKDQpDQorI2RlZmluZSBFTkFCTEVfUENMS19DT1VOVEVSIEJJVCg3KQ0K Kw0KKyNkZWZpbmUgUkVHX1BDTEtfQ09VTlRFUl9WQUxVRSAweDEzDQorDQorI2RlZmluZSBSRUdf NTAxX0ZJRk9fQ1RSTCAweDE1DQorI2RlZmluZSBSU1RfNTAxX0ZJRk8gQklUKDEpDQorDQorI2Rl ZmluZSBSRUdfVFJBSU5fQ1RSTDAgMHgxNg0KKyNkZWZpbmUgRk9SQ0VfTEJSIEJJVCgwKQ0KKyNk ZWZpbmUgTEFORV9DT1VOVF9NQVNLIDB4MDYNCisjZGVmaW5lIExBTkVfU1dBUCBCSVQoMykNCisj ZGVmaW5lIFNQUkVBRF9BTVBfNSBCSVQoNCkNCisjZGVmaW5lIEZPUkNFX0NSX0RPTkUgQklUKDUp DQorI2RlZmluZSBGT1JDRV9FUV9ET05FIEJJVCg2KQ0KKw0KKyNkZWZpbmUgUkVHX1RSQUlOX0NU UkwxIDB4MTcNCisjZGVmaW5lIEFVVE9fVFJBSU4gQklUKDApDQorI2RlZmluZSBNQU5VQUxfVFJB SU4gQklUKDEpDQorI2RlZmluZSBGT1JDRV9SRVRSQUlOIEJJVCgyKQ0KKw0KKyNkZWZpbmUgUkVH X0FVWF9DVFJMIDB4MjMNCisjZGVmaW5lIENMUl9FRElEX0ZJRk8gQklUKDApDQorI2RlZmluZSBB VVhfVVNFUl9NT0RFIEJJVCgxKQ0KKyNkZWZpbmUgQVVYX05PX1NFR01FTlRfV1IgQklUKDYpDQor I2RlZmluZSBBVVhfRU5fRklGT19SRUFEIEJJVCg3KQ0KKw0KKyNkZWZpbmUgUkVHX0FVWF9BRFJf MF83IDB4MjQNCisjZGVmaW5lIFJFR19BVVhfQURSXzhfMTUgMHgyNQ0KKyNkZWZpbmUgUkVHX0FV WF9BRFJfMTZfMTkgMHgyNg0KKyNkZWZpbmUgUkVHX0FVWF9PVVRfREFUQTAgMHgyNw0KKw0KKyNk ZWZpbmUgUkVHX0FVWF9DTURfUkVRIDB4MkINCisjZGVmaW5lIEFVWF9CVVNZIEJJVCg1KQ0KKw0K KyNkZWZpbmUgUkVHX0FVWF9EQVRBXzBfNyAweDJDDQorI2RlZmluZSBSRUdfQVVYX0RBVEFfOF8x NSAweDJEDQorI2RlZmluZSBSRUdfQVVYX0RBVEFfMTZfMjMgMHgyRQ0KKyNkZWZpbmUgUkVHX0FV WF9EQVRBXzI0XzMxIDB4MkYNCisNCisjZGVmaW5lIFJFR19BVVhfREFUQV9GSUZPIDB4MkYNCisN CisjZGVmaW5lIFJFR19BVVhfRVJST1JfU1RTIDB4OUYNCisjZGVmaW5lIE1fQVVYX1JFUV9GQUlM IDB4MDMNCisNCisjZGVmaW5lIFJFR19IRENQX0NUUkwxIDB4MzgNCisjZGVmaW5lIEhEQ1BfQ1Bf RU5BQkxFIEJJVCgwKQ0KKw0KKyNkZWZpbmUgUkVHX0hEQ1BfVFJJR0dFUiAweDM5DQorI2RlZmlu ZSBIRENQX1RSSUdHRVJfU1RBUlQgIEJJVCgwKQ0KKyNkZWZpbmUgSERDUF9UUklHR0VSX0NQSVJR ICBCSVQoMSkNCisjZGVmaW5lIEhEQ1BfVFJJR0dFUl9LU1ZfRE9ORSAgQklUKDQpDQorI2RlZmlu ZSBIRENQX1RSSUdHRVJfS1NWX0ZBSUwgQklUKDUpDQorDQorI2RlZmluZSBSRUdfSERDUF9DVFJM MiAweDNBDQorI2RlZmluZSBIRENQX0FOX1NFTCBCSVQoMCkNCisjZGVmaW5lIEhEQ1BfQU5fR0VO IEJJVCgxKQ0KKyNkZWZpbmUgSERDUF9IV19IUERJUlFfQUNUIEJJVCgyKQ0KKyNkZWZpbmUgSERD UF9FTl9NMF9SRUFEIEJJVCg1KQ0KKw0KKyNkZWZpbmUgUkVHX00wXzBfNyAweDRDDQorI2RlZmlu ZSBSRUdfQU5fMF83IDB4NEMNCisjZGVmaW5lIFJFR19TUF9DVFJMMCAweDU4DQorI2RlZmluZSBS RUdfSVBfQ1RSTDEgMHg1OQ0KKyNkZWZpbmUgUkVHX0lQX0NUUkwyIDB4NUENCisNCisjZGVmaW5l IFJFR19MSU5LX0RSViAweDVDDQorI2RlZmluZSBEUlZfSFMgQklUKDEpDQorDQorI2RlZmluZSBS RUdfRFJWX0xOX0RBVEFfU0VMIDB4NUQNCisNCisjZGVmaW5lIFJFR19BVVggMHg1RQ0KKw0KKyNk ZWZpbmUgUkVHX1ZJRF9CVVNfQ1RSTDAgMHg2MA0KKyNkZWZpbmUgSU5fRERSIEJJVCgyKQ0KKyNk ZWZpbmUgRERSX0NEICgweDAxIDw8IDYpDQorDQorI2RlZmluZSBSRUdfVklEX0JVU19DVFJMMSAw eDYxDQorI2RlZmluZSBUWF9GSUZPX1JFU0VUIEJJVCgxKQ0KKw0KKyNkZWZpbmUgUkVHX0lOUFVU X0NUUkwgMHhBMA0KKyNkZWZpbmUgSU5QVVRfSFNZTkNfUE9MIEJJVCgwKQ0KKyNkZWZpbmUgSU5Q VVRfVlNZTkNfUE9MIEJJVCgyKQ0KKyNkZWZpbmUgSU5QVVRfSU5URVJMQUNFRCBCSVQoNCkNCisN CisjZGVmaW5lIFJFR19JTlBVVF9IVE9UQUwgMHhBMQ0KKyNkZWZpbmUgUkVHX0lOUFVUX0hBQ1RJ VkVfU1RBUlQgMHhBMw0KKyNkZWZpbmUgUkVHX0lOUFVUX0hBQ1RJVkVfV0lEVEggMHhBNQ0KKyNk ZWZpbmUgUkVHX0lOUFVUX0hGUk9OVF9QT1JDSCAweEE3DQorI2RlZmluZSBSRUdfSU5QVVRfSFNZ TkNfV0lEVEggMHhBOQ0KKyNkZWZpbmUgUkVHX0lOUFVUX1ZUT1RBTCAweEFCDQorI2RlZmluZSBS RUdfSU5QVVRfVkFDVElWRV9TVEFSVCAweEFEDQorI2RlZmluZSBSRUdfSU5QVVRfVkFDVElWRV9X SURUSCAweEFGDQorI2RlZmluZSBSRUdfSU5QVVRfVkZST05UX1BPUkNIIDB4QjENCisjZGVmaW5l IFJFR19JTlBVVF9WU1lOQ19XSURUSCAweEIzDQorDQorI2RlZmluZSBSRUdfQVVESU9fU1JDX0NU UkwgMHhCOA0KKyNkZWZpbmUgTV9BVURJT19JMlNfRU4gMHgwRg0KKyNkZWZpbmUgRU5fSTJTMCBC SVQoMCkNCisjZGVmaW5lIEVOX0kyUzEgQklUKDEpDQorI2RlZmluZSBFTl9JMlMyIEJJVCgyKQ0K KyNkZWZpbmUgRU5fSTJTMyBCSVQoMykNCisjZGVmaW5lIEFVRElPX0ZJRk9fUkVTRVQgQklUKDcp DQorDQorI2RlZmluZSBSRUdfQVVESU9fRk1UIDB4QjkNCisjZGVmaW5lIFJFR19BVURJT19GSUZP X1NFTCAweEJBDQorDQorI2RlZmluZSBSRUdfQVVESU9fQ1RSTDAgMHhCQg0KKyNkZWZpbmUgQVVE SU9fRlVMTF9QS1QgQklUKDQpDQorI2RlZmluZSBBVURJT18xNkJfQk9VTkQgQklUKDUpDQorDQor I2RlZmluZSBSRUdfQVVESU9fQ1RSTDEgMHhCQw0KKyNkZWZpbmUgUkVHX0FVRElPX0lOUFVUX0ZS RVEgMHhCRQ0KKw0KKyNkZWZpbmUgUkVHX0lFQzk1OF9TVFMwIDB4QkYNCisjZGVmaW5lIFJFR19J RUM5NThfU1RTMSAweEMwDQorI2RlZmluZSBSRUdfSUVDOTU4X1NUUzIgMHhDMQ0KKyNkZWZpbmUg UkVHX0lFQzk1OF9TVFMzIDB4QzINCisjZGVmaW5lIFJFR19JRUM5NThfU1RTNCAweEMzDQorDQor I2RlZmluZSBSRUdfSFBEX0lSUV9USU1FIDB4QzkNCisjZGVmaW5lIFJFR19BVVhfREVCVUdfTU9E RSAweENBDQorI2RlZmluZSBSRUdfQVVYX09QVDIgMHhDQg0KKyNkZWZpbmUgUkVHX0hEQ1BfT1BU IDB4Q0UNCisjZGVmaW5lIFJFR19VU0VSX0RSVl9QUkUgMHhDRg0KKw0KKyNkZWZpbmUgUkVHX0RB VEFfTVVURV9DVFJMIDB4RDMNCisjZGVmaW5lIEVOQUJMRV9FTkhBTkNFRF9GUkFNRSBCSVQoMCkN CisjZGVmaW5lIEVOQUJMRV9BVVRPX1ZJREVPX0ZJRk9fUkVTRVQgQklUKDEpDQorI2RlZmluZSBF Tl9WSURfTVVURSBCSVQoNCkNCisjZGVmaW5lIEVOX0FVRF9NVVRFIEJJVCg1KQ0KKw0KKyNkZWZp bmUgUkVHX1RJTUVfU1RNUF9DVFJMIDB4RDQNCisjZGVmaW5lIEVOX0VOSEFOQ0VfVklEX1NUTVAg QklUKDApDQorI2RlZmluZSBFTl9FTkhBTkNFX0FVRF9TVE1QIEJJVCgyKQ0KKyNkZWZpbmUgTV9T VEFNUF9TVEVQIDB4MzANCisjZGVmaW5lIEVOX1NTQ19HQVQgQklUKDYpDQorDQorI2RlZmluZSBS RUdfSU5GT0ZSQU1FX0NUUkwgMHhFOA0KKyNkZWZpbmUgRU5fQVZJX1BLVCBCSVQoMCkNCisjZGVm aW5lIEVOX0FVRF9QS1QgQklUKDEpDQorI2RlZmluZSBFTl9NUEdfUEtUIEJJVCgyKQ0KKyNkZWZp bmUgRU5fR0VOX1BLVCBCSVQoMykNCisjZGVmaW5lIEVOX1ZJRF9USU1FX1NUTVAgQklUKDQpDQor I2RlZmluZSBFTl9BVURfVElNRV9TVE1QIEJJVCg1KQ0KKyNkZWZpbmUgRU5fVklEX0NUUkxfUEtU IChFTl9BVklfUEtUIHwgRU5fVklEX1RJTUVfU1RNUCkNCisjZGVmaW5lIEVOX0FVRF9DVFJMX1BL VCAoRU5fQVVEX1BLVCB8IEVOX0FVRF9USU1FX1NUTVApDQorDQorI2RlZmluZSBSRUdfQVVESU9f Tl8wXzcgMHhERQ0KKyNkZWZpbmUgUkVHX0FVRElPX05fOF8xNSAweERGDQorI2RlZmluZSBSRUdf QVVESU9fTl8xNl8yMyAweEUwDQorDQorI2RlZmluZSBSRUdfQVZJX0lORk9fREIxIDB4RTkNCisj ZGVmaW5lIFJFR19BVklfSU5GT19EQjIgMHhFQQ0KKyNkZWZpbmUgUkVHX0FWSV9JTkZPX0RCMyAw eEVCDQorI2RlZmluZSBSRUdfQVZJX0lORk9fREI0IDB4RUMNCisjZGVmaW5lIFJFR19BVklfSU5G T19EQjUgMHhFRA0KKyNkZWZpbmUgUkVHX0FWSV9JTkZPX1NVTSAweEY2DQorDQorI2RlZmluZSBS RUdfQVVEX0lORk9GUkFNX0RCMSAweEY3DQorI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCMiAw eEY4DQorI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCMyAweEY5DQorI2RlZmluZSBSRUdfQVVE X0lORk9GUkFNX0RCNCAweEZBDQorI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX1NVTSAweEZCDQor DQorLyogdGhlIGZvbGxvd2luZyBzaXggcmVnaXN0ZXJzIGFyZSBpbiBiYW5rMSAqLw0KKyNkZWZp bmUgUkVHX0RSVl8wX0RCXzgwMF9NViAweDdFDQorI2RlZmluZSBSRUdfUFJFXzBfREJfODAwX01W IDB4N0YNCisjZGVmaW5lIFJFR19QUkVfM1A1X0RCXzgwMF9NViAweDgxDQorI2RlZmluZSBSRUdf U1NDX0NUUkwwIDB4ODgNCisjZGVmaW5lIFJFR19TU0NfQ1RSTDEgMHg4OQ0KKyNkZWZpbmUgUkVH X1NTQ19DVFJMMiAweDhBDQorDQorI2RlZmluZSBSQlIgRFBfTElOS19CV18xXzYyDQorI2RlZmlu ZSBIQlIgRFBfTElOS19CV18yXzcNCisjZGVmaW5lIEhCUjIgRFBfTElOS19CV181XzQNCisjZGVm aW5lIEhCUjMgRFBfTElOS19CV184XzENCisNCisjZGVmaW5lIERQQ0RfVl8xXzEgMHgxMQ0KKyNk ZWZpbmUgTUlTQ19WRVJCIDB4RjANCisjZGVmaW5lIE1JU0NfVkVSQyAweDcwDQorI2RlZmluZSBJ MlNfSU5QVVRfRk9STUFUX1NUQU5EQVJEIDANCisjZGVmaW5lIEkyU19JTlBVVF9GT1JNQVRfMzJC SVQgMQ0KKyNkZWZpbmUgSTJTX0lOUFVUX0xFRlRfSlVTVElGSUVEIDANCisjZGVmaW5lIEkyU19J TlBVVF9SSUdIVF9KVVNUSUZJRUQgMQ0KKyNkZWZpbmUgSTJTX0RBVEFfMVRfREVMQVkgMA0KKyNk ZWZpbmUgSTJTX0RBVEFfTk9fREVMQVkgMQ0KKyNkZWZpbmUgSTJTX1dTX0xFRlRfQ0hBTk5FTCAw DQorI2RlZmluZSBJMlNfV1NfUklHSFRfQ0hBTk5FTCAxDQorI2RlZmluZSBJMlNfREFUQV9NU0Jf RklSU1QgMA0KKyNkZWZpbmUgSTJTX0RBVEFfTFNCX0ZJUlNUIDENCisjZGVmaW5lIFdPUkRfTEVO R1RIXzE2QklUIDANCisjZGVmaW5lIFdPUkRfTEVOR1RIXzE4QklUIDENCisjZGVmaW5lIFdPUkRf TEVOR1RIXzIwQklUIDINCisjZGVmaW5lIFdPUkRfTEVOR1RIXzI0QklUIDMNCisjZGVmaW5lIERF QlVHRlNfRElSX05BTUUgIml0NjUwNS1kZWJ1Z2ZzIg0KKyNkZWZpbmUgUkVBRF9CVUZGRVJfU0la RSAyMDANCisNCisvKiBWZW5kb3Igb3B0aW9uICovDQorI2RlZmluZSBIRENQX0RFU0lSRUQgMQ0K KyNkZWZpbmUgTUFYX0xBTkVfQ09VTlQgNA0KKyNkZWZpbmUgTUFYX0xJTktfUkFURSBIQlINCisj ZGVmaW5lIEFVVE9fVFJBSU5fUkVUUlkgMw0KKyNkZWZpbmUgTUFYX0hEQ1BfRE9XTl9TVFJFQU1f Q09VTlQgMTANCisjZGVmaW5lIE1BWF9DUl9MRVZFTCAweDAzDQorI2RlZmluZSBNQVhfRVFfTEVW RUwgMHgwMw0KKyNkZWZpbmUgQVVYX1dBSVRfVElNRU9VVF9NUyAxNQ0KKyNkZWZpbmUgQVVYX0ZJ Rk9fTUFYX1NJWkUgMzINCisjZGVmaW5lIFBJWEVMX0NMS19ERUxBWSAxDQorI2RlZmluZSBQSVhF TF9DTEtfSU5WRVJTRSAwDQorI2RlZmluZSBBREpVU1RfUEhBU0VfVEhSRVNIT0xEIDgwMDAwDQor I2RlZmluZSBEUElfUElYRUxfQ0xLX01BWCA5NTAwMA0KKyNkZWZpbmUgSERDUF9TSEExX0ZJRk9f TEVOIChNQVhfSERDUF9ET1dOX1NUUkVBTV9DT1VOVCAqIDUgKyAxMCkNCisjZGVmaW5lIERFRkFV TFRfUFdSX09OIDANCisjZGVmaW5lIERFRkFVTFRfRFJWX0hPTEQgMA0KKw0KKyNkZWZpbmUgQVVE SU9fU0VMRUNUIEkyUw0KKyNkZWZpbmUgQVVESU9fVFlQRSBMUENNDQorI2RlZmluZSBBVURJT19T QU1QTEVfUkFURSBTQU1QTEVfUkFURV80OEsNCisjZGVmaW5lIEFVRElPX0NIQU5ORUxfQ09VTlQg Mg0KKyNkZWZpbmUgSTJTX0lOUFVUX0ZPUk1BVCBJMlNfSU5QVVRfRk9STUFUXzMyQklUDQorI2Rl ZmluZSBJMlNfSlVTVElGSUVEIEkyU19JTlBVVF9MRUZUX0pVU1RJRklFRA0KKyNkZWZpbmUgSTJT X0RBVEFfREVMQVkgSTJTX0RBVEFfMVRfREVMQVkNCisjZGVmaW5lIEkyU19XU19DSEFOTkVMIEky U19XU19MRUZUX0NIQU5ORUwNCisjZGVmaW5lIEkyU19EQVRBX1NFUVVFTkNFIEkyU19EQVRBX01T Ql9GSVJTVA0KKyNkZWZpbmUgQVVESU9fV09SRF9MRU5HVEggV09SRF9MRU5HVEhfMjRCSVQNCisN CitlbnVtIGF1eF9jbWRfdHlwZSB7DQorCUNNRF9BVVhfTkFUSVZFX1JFQUQgPSAweDAsDQorCUNN RF9BVVhfTkFUSVZFX1dSSVRFID0gMHg1LA0KKwlDTURfQVVYX0kyQ19FRElEX1JFQUQgPSAweEIs DQorfTsNCisNCitlbnVtIGF1eF9jbWRfcmVwbHkgew0KKwlSRVBMWV9BQ0ssDQorCVJFUExZX05B Q0ssDQorCVJFUExZX0RFRkVSLA0KK307DQorDQorZW51bSBsaW5rX3RyYWluX3N0YXR1cyB7DQor CUxJTktfSURMRSwNCisJTElOS19CVVNZLA0KKwlMSU5LX09LLA0KK307DQorDQorZW51bSBoZGNw X3N0YXRlIHsNCisJSERDUF9BVVRIX0lETEUsDQorCUhEQ1BfQVVUSF9HT0lORywNCisJSERDUF9B VVRIX0RPTkUsDQorfTsNCisNCitzdHJ1Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEgew0KKwlzdHJ1 Y3QgcmVndWxhdG9yICpwd3IxODsNCisJc3RydWN0IHJlZ3VsYXRvciAqb3ZkZDsNCisJc3RydWN0 IGdwaW9fZGVzYyAqZ3Bpb2RfcmVzZXQ7DQorfTsNCisNCitlbnVtIGl0NjUwNV9hdWRpb19zZWxl Y3Qgew0KKwlJMlMgPSAwLA0KKwlTUERJRiwNCit9Ow0KKw0KK2VudW0gaXQ2NTA1X2F1ZGlvX3Nh bXBsZV9yYXRlIHsNCisJU0FNUExFX1JBVEVfMjRLID0gMHg2LA0KKwlTQU1QTEVfUkFURV8zMksg PSAweDMsDQorCVNBTVBMRV9SQVRFXzQ4SyA9IDB4MiwNCisJU0FNUExFX1JBVEVfOTZLID0gMHhB LA0KKwlTQU1QTEVfUkFURV8xOTJLID0gMHhFLA0KKwlTQU1QTEVfUkFURV80NF8xSyA9IDB4MCwN CisJU0FNUExFX1JBVEVfODhfMksgPSAweDgsDQorCVNBTVBMRV9SQVRFXzE3Nl80SyA9IDB4QywN Cit9Ow0KKw0KK2VudW0gaXQ2NTA1X2F1ZGlvX3R5cGUgew0KKwlMUENNID0gMCwNCisJTkxQQ00s DQorCURTUywNCit9Ow0KKw0KK3N0cnVjdCBpdDY1MDVfYXVkaW9fZGF0YSB7DQorCWVudW0gaXQ2 NTA1X2F1ZGlvX3NlbGVjdCBzZWxlY3Q7DQorCWVudW0gaXQ2NTA1X2F1ZGlvX3NhbXBsZV9yYXRl IHNhbXBsZV9yYXRlOw0KKwllbnVtIGl0NjUwNV9hdWRpb190eXBlIHR5cGU7DQorCXU4IHdvcmRf bGVuZ3RoOw0KKwl1OCBjaGFubmVsX2NvdW50Ow0KKwl1OCBpMnNfaW5wdXRfZm9ybWF0Ow0KKwl1 OCBpMnNfanVzdGlmaWVkOw0KKwl1OCBpMnNfZGF0YV9kZWxheTsNCisJdTggaTJzX3dzX2NoYW5u ZWw7DQorCXU4IGkyc19kYXRhX3NlcXVlbmNlOw0KK307DQorDQorc3RydWN0IGl0NjUwNV9hdWRp b19zYW1wbGVfcmF0ZV9tYXAgew0KKwllbnVtIGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZSByYXRl Ow0KKwlpbnQgc2FtcGxlX3JhdGVfdmFsdWU7DQorfTsNCisNCitzdHJ1Y3QgaXQ2NTA1X2RybV9k cF9saW5rIHsNCisJdW5zaWduZWQgY2hhciByZXZpc2lvbjsNCisJdW5zaWduZWQgaW50IHJhdGU7 DQorCXVuc2lnbmVkIGludCBudW1fbGFuZXM7DQorCXVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVz Ow0KK307DQorDQorc3RydWN0IGRlYnVnZnNfZW50cmllcyB7DQorCWNoYXIgKm5hbWU7DQorCWNv bnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7DQorfTsNCisNCitzdHJ1Y3QgaXQ2NTA1 IHsNCisJc3RydWN0IGRybV9kcF9hdXggYXV4Ow0KKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7 DQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7DQorCXN0cnVjdCBpdDY1MDVfZHJtX2RwX2xp bmsgbGluazsNCisJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhIHBkYXRhOw0KKwkvKg0KKwkg KiBNdXRleCBwcm90ZWN0cyBleHRjb24gYW5kIGludGVycnVwdCBmdW5jdGlvbnMgZnJvbSBpbnRl cmZlcmluZw0KKwkgKiBlYWNoIG90aGVyLg0KKwkgKi8NCisJc3RydWN0IG11dGV4IGV4dGNvbl9s b2NrOw0KKwlzdHJ1Y3QgbXV0ZXggbW9kZV9sb2NrOyAvKiB1c2VkIHRvIGJyaWRnZV9kZXRlY3Qg Ki8NCisJc3RydWN0IG11dGV4IGF1eF9sb2NrOyAvKiB1c2VkIHRvIGF1eCBkYXRhIHRyYW5zZmVy cyAqLw0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7DQorCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl IHNvdXJjZV9vdXRwdXRfbW9kZTsNCisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgdmlkZW9faW5m bzsNCisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGV2ZW50X25iOw0KKwlzdHJ1Y3QgZXh0Y29uX2Rl diAqZXh0Y29uOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXh0Y29uX3dxOw0KKwllbnVtIGRybV9j b25uZWN0b3Jfc3RhdHVzIGNvbm5lY3Rvcl9zdGF0dXM7DQorCWVudW0gbGlua190cmFpbl9zdGF0 dXMgbGlua19zdGF0ZTsNCisJc3RydWN0IHdvcmtfc3RydWN0IGxpbmtfd29ya3M7DQorCXU4IGRw Y2RbRFBfUkVDRUlWRVJfQ0FQX1NJWkVdOw0KKwl1OCBsYW5lX2NvdW50Ow0KKwl1OCBsaW5rX3Jh dGVfYndfY29kZTsNCisJdTggc2lua19jb3VudDsNCisJYm9vbCBzdGVwX3RyYWluOw0KKwlib29s IGJyYW5jaF9kZXZpY2U7DQorCWJvb2wgZW5hYmxlX3NzYzsNCisJYm9vbCBsYW5lX3N3YXBfZGlz YWJsZWQ7DQorCWJvb2wgbGFuZV9zd2FwOw0KKwlib29sIHBvd2VyZWQ7DQorCWJvb2wgaHBkX3N0 YXRlOw0KKwl1MzIgYWZlX3NldHRpbmc7DQorCWVudW0gaGRjcF9zdGF0ZSBoZGNwX3N0YXR1czsN CisJc3RydWN0IGRlbGF5ZWRfd29yayBoZGNwX3dvcms7DQorCXN0cnVjdCB3b3JrX3N0cnVjdCBo ZGNwX3dhaXRfa3N2X2xpc3Q7DQorCXN0cnVjdCBjb21wbGV0aW9uIHdhaXRfZWRpZF9jb21wbGV0 ZTsNCisJdTggYXV0b190cmFpbl9yZXRyeTsNCisJYm9vbCBoZGNwX2Rlc2lyZWQ7DQorCWJvb2wg aXNfcmVwZWF0ZXI7DQorCXU4IGhkY3BfZG93bl9zdHJlYW1fY291bnQ7DQorCXU4IGJrc3ZzW0RS TV9IRENQX0tTVl9MRU5dOw0KKwl1OCBzaGExX2lucHV0W0hEQ1BfU0hBMV9GSUZPX0xFTl07DQor CWJvb2wgZW5hYmxlX2VuaGFuY2VkX2ZyYW1lOw0KKwloZG1pX2NvZGVjX3BsdWdnZWRfY2IgcGx1 Z2dlZF9jYjsNCisJc3RydWN0IGRldmljZSAqY29kZWNfZGV2Ow0KKwlzdHJ1Y3QgZGVsYXllZF93 b3JrIGRlbGF5ZWRfYXVkaW87DQorCXN0cnVjdCBpdDY1MDVfYXVkaW9fZGF0YSBhdWRpbzsNCisJ c3RydWN0IGRlbnRyeSAqZGVidWdmczsNCisNCisJLyogaXQ2NTA1IGRyaXZlciBob2xkIG9wdGlv biAqLw0KKwlib29sIGVuYWJsZV9kcnZfaG9sZDsNCit9Ow0KKw0KK3N0cnVjdCBpdDY1MDVfc3Rl cF90cmFpbl9wYXJhIHsNCisJdTggdm9sdGFnZV9zd2luZ1tNQVhfTEFORV9DT1VOVF07DQorCXU4 IHByZV9lbXBoYXNpc1tNQVhfTEFORV9DT1VOVF07DQorfTsNCisNCisvKg0KKyAqIFZlbmRvciBv cHRpb24gYWZlIHNldHRpbmdzIGZvciBkaWZmZXJlbnQgcGxhdGZvcm1zDQorICogMDogd2l0aG91 dCBGUEMgY2FibGUNCisgKiAxOiB3aXRoIEZQQyBjYWJsZQ0KKyAqLw0KKw0KK3N0YXRpYyBjb25z dCB1OCBhZmVfc2V0dGluZ190YWJsZVtdWzNdID0gew0KKwl7MHg4MiwgMHgwMCwgMHg0NX0sDQor CXsweDkzLCAweDJBLCAweDg1fQ0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpdDY1MDVf YXVkaW9fc2FtcGxlX3JhdGVfbWFwIGF1ZGlvX3NhbXBsZV9yYXRlX21hcFtdID0gew0KKwl7U0FN UExFX1JBVEVfMjRLLCAyNDAwMH0sDQorCXtTQU1QTEVfUkFURV8zMkssIDMyMDAwfSwNCisJe1NB TVBMRV9SQVRFXzQ4SywgNDgwMDB9LA0KKwl7U0FNUExFX1JBVEVfOTZLLCA5NjAwMH0sDQorCXtT QU1QTEVfUkFURV8xOTJLLCAxOTIwMDB9LA0KKwl7U0FNUExFX1JBVEVfNDRfMUssIDQ0MTAwfSwN CisJe1NBTVBMRV9SQVRFXzg4XzJLLCA4ODIwMH0sDQorCXtTQU1QTEVfUkFURV8xNzZfNEssIDE3 NjQwMH0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSBpdDY1MDVf YnJpZGdlX3ZvbGF0aWxlX3Jhbmdlc1tdID0gew0KKwl7IC5yYW5nZV9taW4gPSAwLCAucmFuZ2Vf bWF4ID0gMHhGRiB9LA0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNz X3RhYmxlIGl0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfdGFibGUgPSB7DQorCS55ZXNfcmFuZ2VzID0g aXQ2NTA1X2JyaWRnZV92b2xhdGlsZV9yYW5nZXMsDQorCS5uX3llc19yYW5nZXMgPSBBUlJBWV9T SVpFKGl0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzKSwNCit9Ow0KKw0KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBpdDY1MDVfcmVnbWFwX2NvbmZpZyA9IHsNCisJLnJlZ19i aXRzID0gOCwNCisJLnZhbF9iaXRzID0gOCwNCisJLnZvbGF0aWxlX3RhYmxlID0gJml0NjUwNV9i cmlkZ2Vfdm9sYXRpbGVfdGFibGUsDQorCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTk9ORSwNCit9 Ow0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X3JlYWQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNp Z25lZCBpbnQgcmVnX2FkZHIpDQorew0KKwl1bnNpZ25lZCBpbnQgdmFsdWU7DQorCWludCBlcnI7 DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwllcnIg PSByZWdtYXBfcmVhZChpdDY1MDUtPnJlZ21hcCwgcmVnX2FkZHIsICZ2YWx1ZSk7DQorCWlmIChl cnIgPCAwKSB7DQorCQlkZXZfZXJyKGRldiwgInJlYWQgZmFpbGVkIHJlZ1sweCV4XSBlcnI6ICVk IiwgcmVnX2FkZHIsIGVycik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCXJldHVybiB2YWx1 ZTsNCit9DQorDQorc3RhdGljIGludCBpdDY1MDVfd3JpdGUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 LCB1bnNpZ25lZCBpbnQgcmVnX2FkZHIsDQorCQkJdW5zaWduZWQgaW50IHJlZ192YWwpDQorew0K KwlpbnQgZXJyOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsN CisNCisJZXJyID0gcmVnbWFwX3dyaXRlKGl0NjUwNS0+cmVnbWFwLCByZWdfYWRkciwgcmVnX3Zh bCk7DQorDQorCWlmIChlcnIgPCAwKSB7DQorCQlkZXZfZXJyKGRldiwgIndyaXRlIGZhaWxlZCBy ZWdbMHgleF0gPSAweCV4IGVyciA9ICVkIiwNCisJCQlyZWdfYWRkciwgcmVnX3ZhbCwgZXJyKTsN CisJCXJldHVybiBlcnI7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQg aXQ2NTA1X3NldF9iaXRzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJlZywN CisJCQkgICB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHZhbHVlKQ0KK3sNCisJaW50 IGVycjsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQor CWVyciA9IHJlZ21hcF91cGRhdGVfYml0cyhpdDY1MDUtPnJlZ21hcCwgcmVnLCBtYXNrLCB2YWx1 ZSk7DQorCWlmIChlcnIgPCAwKSB7DQorCQlkZXZfZXJyKGRldiwgIndyaXRlIHJlZ1sweCV4XSA9 IDB4JXggbWFzayA9IDB4JXggZmFpbGVkIGVyciAlZCIsDQorCQkJcmVnLCB2YWx1ZSwgbWFzaywg ZXJyKTsNCisJCXJldHVybiBlcnI7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRp YyB2b2lkIGl0NjUwNV9kZWJ1Z19wcmludChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVk IGludCByZWcsDQorCQkJICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCkNCit7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlpbnQgdmFsOw0KKw0KKwlpZiAo bGlrZWx5KCEoX19kcm1fZGVidWcgJiBEUk1fVVRfRFJJVkVSKSkpDQorCQlyZXR1cm47DQorDQor CXZhbCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnKTsNCisJaWYgKHZhbCA8IDApDQorCQlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICIlcyByZWdbJTAyeF0gcmVhZCBlcnJvciAoJWQpIiwNCisJ CQkJICAgICBwcmVmaXgsIHJlZywgdmFsKTsNCisJZWxzZQ0KKwkJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiJXMgcmVnWyUwMnhdID0gMHglMDJ4IiwgcHJlZml4LCByZWcsDQorCQkJCSAgICAg dmFsKTsNCit9DQorDQorc3RhdGljIGludCBpdDY1MDVfZHBjZF9yZWFkKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpDQorew0KKwl1OCB2YWx1ZTsNCisJaW50IHJl dDsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCXJl dCA9IGRybV9kcF9kcGNkX3JlYWRiKCZpdDY1MDUtPmF1eCwgb2Zmc2V0LCAmdmFsdWUpOw0KKwlp ZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJEUENEIHJlYWQgZmFpbGVkIFsweCVseF0g cmV0OiAlZCIsIG9mZnNldCwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisJcmV0dXJuIHZh bHVlOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9kcGNkX3dyaXRlKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsDQorCQkJICAgICB1OCBkYXRhaW4pDQorew0K KwlpbnQgcmV0Ow0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsN CisNCisJcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGViKCZpdDY1MDUtPmF1eCwgb2Zmc2V0LCBkYXRh aW4pOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJEUENEIHdyaXRlIGZhaWxl ZCBbMHglbHhdIHJldDogJWQiLCBvZmZzZXQsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQor CXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9nZXRfZHBjZChzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUsIGludCBvZmZzZXQsIHU4ICpkcGNkLCBpbnQgbnVtKQ0KK3sNCisJaW50IHJl dDsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCXJl dCA9IGRybV9kcF9kcGNkX3JlYWQoJml0NjUwNS0+YXV4LCBvZmZzZXQsIGRwY2QsIG51bSk7DQor DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAicmV0ID0gJWQgRFBDRFsweCV4XSA9IDB4JSpwaCIsIHJldCwgb2Zmc2V0LA0KKwkJ CSAgICAgbnVtLCBkcGNkKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0 NjUwNV9kdW1wKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXVuc2lnbmVkIGludCBpLCBq Ow0KKwl1OCByZWdzWzE2XTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50 LT5kZXY7DQorDQorCWZvciAoaSA9IDA7IGkgPD0gMHhmZjsgaSArPSAxNikgew0KKwkJZm9yIChq ID0gMDsgaiA8IDE2OyBqKyspDQorCQkJcmVnc1tqXSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgaSAr IGopOw0KKw0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiWzB4JTAyeF0gPSAlMTZwaCIs IGksIHJlZ3MpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBib29sIGl0NjUwNV9nZXRfc2lua19ocGRf c3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWludCByZWdfMGQ7DQorDQorCXJl Z18wZCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX1NZU1RFTV9TVFMpOw0KKw0KKwlpZiAocmVn XzBkIDwgMCkNCisJCXJldHVybiBmYWxzZTsNCisNCisJcmV0dXJuIHJlZ18wZCAmIEhQRF9TVFM7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X3JlYWRfd29yZChzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUsIHVuc2lnbmVkIGludCByZWcpDQorew0KKwlpbnQgdmFsMCwgdmFsMTsNCisNCisJdmFsMCA9 IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnKTsNCisJaWYgKHZhbDAgPCAwKQ0KKwkJcmV0dXJuIHZh bDA7DQorDQorCXZhbDEgPSBpdDY1MDVfcmVhZChpdDY1MDUsIHJlZyArIDEpOw0KKwlpZiAodmFs MSA8IDApDQorCQlyZXR1cm4gdmFsMTsNCisNCisJcmV0dXJuICh2YWwxIDw8IDgpIHwgdmFsMDsN Cit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRl djsNCisJaW50IGhzeW5jX3BvbCwgdnN5bmNfcG9sLCBpbnRlcmxhY2VkOw0KKwlpbnQgaHRvdGFs LCBoZGVzLCBoZGV3LCBoZnBoLCBoc3luY3c7DQorCWludCB2dG90YWwsIHZkZXMsIHZkZXcsIHZm cGgsIHZzeW5jdzsNCisJaW50IHJkZGF0YSwgaSwgcGNsaywgc3VtID0gMDsNCisNCisJdXNsZWVw X3JhbmdlKDEwMDAwLCAxNTAwMCk7DQorCXJkZGF0YSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVH X0lOUFVUX0NUUkwpOw0KKwloc3luY19wb2wgPSByZGRhdGEgJiBJTlBVVF9IU1lOQ19QT0w7DQor CXZzeW5jX3BvbCA9IChyZGRhdGEgJiBJTlBVVF9WU1lOQ19QT0wpID4+IDI7DQorCWludGVybGFj ZWQgPSAocmRkYXRhICYgSU5QVVRfSU5URVJMQUNFRCkgPj4gNDsNCisNCisJaHRvdGFsID0gaXQ2 NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IVE9UQUwpICYgMHgxRkZGOw0KKwloZGVz ID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IQUNUSVZFX1NUQVJUKSAmIDB4 MUZGRjsNCisJaGRldyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfSEFDVElW RV9XSURUSCkgJiAweDFGRkY7DQorCWhmcGggPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVH X0lOUFVUX0hGUk9OVF9QT1JDSCkgJiAweDFGRkY7DQorCWhzeW5jdyA9IGl0NjUwNV9yZWFkX3dv cmQoaXQ2NTA1LCBSRUdfSU5QVVRfSFNZTkNfV0lEVEgpICYgMHgxRkZGOw0KKw0KKwl2dG90YWwg PSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX1ZUT1RBTCkgJiAweEZGRjsNCisJ dmRlcyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkFDVElWRV9TVEFSVCkg JiAweEZGRjsNCisJdmRldyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkFD VElWRV9XSURUSCkgJiAweEZGRjsNCisJdmZwaCA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBS RUdfSU5QVVRfVkZST05UX1BPUkNIKSAmIDB4RkZGOw0KKwl2c3luY3cgPSBpdDY1MDVfcmVhZF93 b3JkKGl0NjUwNSwgUkVHX0lOUFVUX1ZTWU5DX1dJRFRIKSAmIDB4RkZGOw0KKw0KKwlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJoc3luY19wb2w6JWQsIHZzeW5jX3BvbDolZCwgaW50ZXJsYWNl ZDolZCIsDQorCQkJICAgICBoc3luY19wb2wsIHZzeW5jX3BvbCwgaW50ZXJsYWNlZCk7DQorCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhhY3RpdmVfc3RhcnQ6JWQsIHZhY3RpdmVfc3RhcnQ6 JWQiLA0KKwkJCSAgICAgaGRlcywgdmRlcyk7DQorDQorCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsr KSB7DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgRU5BQkxFX1BD TEtfQ09VTlRFUiwNCisJCQkJRU5BQkxFX1BDTEtfQ09VTlRFUik7DQorCQl1c2xlZXBfcmFuZ2Uo MTAwMDAsIDE1MDAwKTsNCisJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX0NUUkww LCBFTkFCTEVfUENMS19DT1VOVEVSLA0KKwkJCQkweDAwKTsNCisJCXJkZGF0YSA9IGl0NjUwNV9y ZWFkX3dvcmQoaXQ2NTA1LCBSRUdfUENMS19DT1VOVEVSX1ZBTFVFKSAmDQorCQkJIDB4RkZGOw0K Kw0KKwkJc3VtICs9IHJkZGF0YTsNCisJfQ0KKw0KKwlpZiAoc3VtID09IDApIHsNCisJCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwgImNhbGMgdmlkZW8gdGltaW5nIGVycm9yIik7DQorCQlyZXR1 cm47DQorCX0NCisNCisJc3VtIC89IDEwOw0KKwlwY2xrID0gMTM1MDAgKiAyMDQ4IC8gc3VtOw0K KwlpdDY1MDUtPnZpZGVvX2luZm8uY2xvY2sgPSBwY2xrOw0KKwlpdDY1MDUtPnZpZGVvX2luZm8u aGRpc3BsYXkgPSBoZGV3Ow0KKwlpdDY1MDUtPnZpZGVvX2luZm8uaHN5bmNfc3RhcnQgPSBoZGV3 ICsgaGZwaDsNCisJaXQ2NTA1LT52aWRlb19pbmZvLmhzeW5jX2VuZCA9IGhkZXcgKyBoZnBoICsg aHN5bmN3Ow0KKwlpdDY1MDUtPnZpZGVvX2luZm8uaHRvdGFsID0gaHRvdGFsOw0KKwlpdDY1MDUt PnZpZGVvX2luZm8udmRpc3BsYXkgPSB2ZGV3Ow0KKwlpdDY1MDUtPnZpZGVvX2luZm8udnN5bmNf c3RhcnQgPSB2ZGV3ICsgdmZwaDsNCisJaXQ2NTA1LT52aWRlb19pbmZvLnZzeW5jX2VuZCA9IHZk ZXcgKyB2ZnBoICsgdnN5bmN3Ow0KKwlpdDY1MDUtPnZpZGVvX2luZm8udnRvdGFsID0gdnRvdGFs Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsIERSTV9NT0RFX0ZNVCwNCisJCQkgICAg IERSTV9NT0RFX0FSRygmaXQ2NTA1LT52aWRlb19pbmZvKSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQg aXQ2NTA1X2RybV9kcF9saW5rX3Byb2JlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsDQorCQkJCSAg ICBzdHJ1Y3QgaXQ2NTA1X2RybV9kcF9saW5rICpsaW5rKQ0KK3sNCisJdTggdmFsdWVzWzNdOw0K KwlpbnQgZXJyOw0KKw0KKwltZW1zZXQobGluaywgMCwgc2l6ZW9mKCpsaW5rKSk7DQorDQorCWVy ciA9IGRybV9kcF9kcGNkX3JlYWQoYXV4LCBEUF9EUENEX1JFViwgdmFsdWVzLCBzaXplb2YodmFs dWVzKSk7DQorCWlmIChlcnIgPCAwKQ0KKwkJcmV0dXJuIGVycjsNCisNCisJbGluay0+cmV2aXNp b24gPSB2YWx1ZXNbMF07DQorCWxpbmstPnJhdGUgPSBkcm1fZHBfYndfY29kZV90b19saW5rX3Jh dGUodmFsdWVzWzFdKTsNCisJbGluay0+bnVtX2xhbmVzID0gdmFsdWVzWzJdICYgRFBfTUFYX0xB TkVfQ09VTlRfTUFTSzsNCisNCisJaWYgKHZhbHVlc1syXSAmIERQX0VOSEFOQ0VEX0ZSQU1FX0NB UCkNCisJCWxpbmstPmNhcGFiaWxpdGllcyA9IERQX0VOSEFOQ0VEX0ZSQU1FX0NBUDsNCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2RybV9kcF9saW5rX3Bvd2VyX3Vw KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsDQorCQkJCSAgICAgICBzdHJ1Y3QgaXQ2NTA1X2RybV9k cF9saW5rICpsaW5rKQ0KK3sNCisJdTggdmFsdWU7DQorCWludCBlcnI7DQorDQorCS8qIERQX1NF VF9QT1dFUiByZWdpc3RlciBpcyBvbmx5IGF2YWlsYWJsZSBvbiBEUENEIHYxLjEgYW5kIGxhdGVy ICovDQorCWlmIChsaW5rLT5yZXZpc2lvbiA8IERQQ0RfVl8xXzEpDQorCQlyZXR1cm4gMDsNCisN CisJZXJyID0gZHJtX2RwX2RwY2RfcmVhZGIoYXV4LCBEUF9TRVRfUE9XRVIsICZ2YWx1ZSk7DQor CWlmIChlcnIgPCAwKQ0KKwkJcmV0dXJuIGVycjsNCisNCisJdmFsdWUgJj0gfkRQX1NFVF9QT1dF Ul9NQVNLOw0KKwl2YWx1ZSB8PSBEUF9TRVRfUE9XRVJfRDA7DQorDQorCWVyciA9IGRybV9kcF9k cGNkX3dyaXRlYihhdXgsIERQX1NFVF9QT1dFUiwgdmFsdWUpOw0KKwlpZiAoZXJyIDwgMCkNCisJ CXJldHVybiBlcnI7DQorDQorCS8qDQorCSAqIEFjY29yZGluZyB0byB0aGUgRFAgMS4xIHNwZWNp ZmljYXRpb24sIGEgIlNpbmsgRGV2aWNlIG11c3QgZXhpdCB0aGUNCisJICogcG93ZXIgc2F2aW5n IHN0YXRlIHdpdGhpbiAxIG1zIiAoU2VjdGlvbiAyLjUuMy4xLCBUYWJsZSA1LTUyLCAiU2luaw0K KwkgKiBDb250cm9sIEZpZWxkIiAocmVnaXN0ZXIgMHg2MDApLg0KKwkgKi8NCisJdXNsZWVwX3Jh bmdlKDEwMDAsIDIwMDApOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2 NTA1X2NsZWFyX2ludChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBJTlRfU1RBVFVTXzAxLCAweEZGKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5U X1NUQVRVU18wMiwgMHhGRik7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9TVEFUVVNfMDMs IDB4RkYpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfaW50X21hc2tfZW5hYmxlKHN0cnVj dCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAx LCBCSVQoSU5UX0hQRF9DSEFOR0UpIHwNCisJCSAgICAgQklUKElOVF9SRUNFSVZFX0hQRF9JUlEp IHwgQklUKElOVF9TQ0RUX0NIQU5HRSkgfA0KKwkJICAgICBCSVQoSU5UX0hEQ1BfRkFJTCkgfCBC SVQoSU5UX0hEQ1BfRE9ORSkpOw0KKw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJTlRfTUFTS18w MiwgQklUKElOVF9BVVhfQ01EX0ZBSUwpIHwNCisJCSAgICAgQklUKElOVF9IRENQX0tTVl9DSEVD SykgfCBCSVQoSU5UX0FVRElPX0ZJRk9fRVJST1IpKTsNCisNCisJaXQ2NTA1X3dyaXRlKGl0NjUw NSwgSU5UX01BU0tfMDMsIEJJVChJTlRfTElOS19UUkFJTl9GQUlMKSB8DQorCQkgICAgIEJJVChJ TlRfVklEX0ZJRk9fRVJST1IpIHwgQklUKElOVF9JT19MQVRDSF9GSUZPX09WRVJGTE9XKSk7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9pbnRfbWFza19kaXNhYmxlKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkNCit7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAxLCAweDAwKTsN CisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01BU0tfMDIsIDB4MDApOw0KKwlpdDY1MDVfd3Jp dGUoaXQ2NTA1LCBJTlRfTUFTS18wMywgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUw NV9sYW5lX3Rlcm1pbmF0aW9uX29uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWludCBy ZWdjZjsNCisNCisJcmVnY2YgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19VU0VSX0RSVl9QUkUp Ow0KKw0KKwlpZiAocmVnY2YgPT0gTUlTQ19WRVJCKQ0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwgMHg4MCwgMHgwMCk7DQorDQorCWlmIChyZWdjZiA9PSBN SVNDX1ZFUkMpIHsNCisJCWlmIChpdDY1MDUtPmxhbmVfc3dhcCkgew0KKwkJCXN3aXRjaCAoaXQ2 NTA1LT5sYW5lX2NvdW50KSB7DQorCQkJY2FzZSAxOg0KKwkJCWNhc2UgMjoNCisJCQkJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwNCisJCQkJCQkweDBDLCAweDA4 KTsNCisJCQkJYnJlYWs7DQorCQkJZGVmYXVsdDoNCisJCQkJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwNCisJCQkJCQkweDBDLCAweDBDKTsNCisJCQkJYnJlYWs7 DQorCQkJfQ0KKwkJfSBlbHNlIHsNCisJCQlzd2l0Y2ggKGl0NjUwNS0+bGFuZV9jb3VudCkgew0K KwkJCWNhc2UgMToNCisJCQljYXNlIDI6DQorCQkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJF R19EUlZfTE5fREFUQV9TRUwsDQorCQkJCQkJMHgwQywgMHgwNCk7DQorCQkJCWJyZWFrOw0KKwkJ CWRlZmF1bHQ6DQorCQkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9T RUwsDQorCQkJCQkJMHgwQywgMHgwQyk7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCX0NCisJfQ0K K30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV90ZXJtaW5hdGlvbl9vZmYoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZ2NmOw0KKw0KKwlyZWdjZiA9IGl0NjUwNV9yZWFk KGl0NjUwNSwgUkVHX1VTRVJfRFJWX1BSRSk7DQorDQorCWlmIChyZWdjZiA9PSBNSVNDX1ZFUkIp DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfRFJWX0xOX0RBVEFfU0VMLCAweDgwLCAw eDgwKTsNCisNCisJaWYgKHJlZ2NmID09IE1JU0NfVkVSQykNCisJCWl0NjUwNV9zZXRfYml0cyhp dDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsIDB4MEMsIDB4MDApOw0KK30NCisNCitzdGF0aWMg dm9pZCBpdDY1MDVfbGFuZV9wb3dlcl9vbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlp dDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfTElOS19EUlYsIDB4RjEsDQorCQkJKGl0NjUwNS0+ bGFuZV9zd2FwID8NCisJCQkJIEdFTk1BU0soNywgOCAtIGl0NjUwNS0+bGFuZV9jb3VudCkgOg0K KwkJCQkgR0VOTUFTSygzICsgaXQ2NTA1LT5sYW5lX2NvdW50LCA0KSkgfA0KKwkJCQkweDAxKTsN Cit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfcG93ZXJfb2ZmKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkNCit7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19MSU5LX0RSViwgMHhG MCwgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX29mZihzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDVfbGFuZV9wb3dlcl9vZmYoaXQ2NTA1KTsNCisJaXQ2 NTA1X2xhbmVfdGVybWluYXRpb25fb2ZmKGl0NjUwNSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0 NjUwNV9hdXhfdGVybWluYXRpb25fb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50 IHJlZ2NmOw0KKw0KKwlyZWdjZiA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX1VTRVJfRFJWX1BS RSk7DQorDQorCWlmIChyZWdjZiA9PSBNSVNDX1ZFUkIpDQorCQlpdDY1MDVfbGFuZV90ZXJtaW5h dGlvbl9vbihpdDY1MDUpOw0KKw0KKwlpZiAocmVnY2YgPT0gTUlTQ19WRVJDKQ0KKwkJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwgMHg4MCwgMHg4MCk7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9hdXhfcG93ZXJfb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1 KQ0KK3sNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWCwgMHgwMiwgMHgwMik7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9hdXhfb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0K K3sNCisJaXQ2NTA1X2F1eF9wb3dlcl9vbihpdDY1MDUpOw0KKwlpdDY1MDVfYXV4X3Rlcm1pbmF0 aW9uX29uKGl0NjUwNSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9hdXhfcmVzZXQoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JF U0VUX0NUUkwsIEFVWF9SRVNFVCwgQVVYX1JFU0VUKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX1JFU0VUX0NUUkwsIEFVWF9SRVNFVCwgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lk IGl0NjUwNV9yZXNldF9sb2dpYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlyZWdtYXBf d3JpdGUoaXQ2NTA1LT5yZWdtYXAsIFJFR19SRVNFVF9DVFJMLCBBTExfTE9HSUNfUkVTRVQpOw0K Kwl1c2xlZXBfcmFuZ2UoMTAwMCwgMTUwMCk7DQorfQ0KKw0KK3N0YXRpYyBib29sIGl0NjUwNV9h dXhfb3BfZmluaXNoZWQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZzJiID0g aXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVYX0NNRF9SRVEpOw0KKw0KKwlpZiAocmVnMmIgPCAw KQ0KKwkJcmV0dXJuIGZhbHNlOw0KKw0KKwlyZXR1cm4gKHJlZzJiICYgQVVYX0JVU1kpID09IDA7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2F1eF93YWl0KHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCit7DQorCWludCBzdGF0dXM7DQorCXVuc2lnbmVkIGxvbmcgdGltZW91dDsNCisJc3RydWN0 IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCXRpbWVvdXQgPSBqaWZm aWVzICsgbXNlY3NfdG9famlmZmllcyhBVVhfV0FJVF9USU1FT1VUX01TKSArIDE7DQorDQorCXdo aWxlICghaXQ2NTA1X2F1eF9vcF9maW5pc2hlZChpdDY1MDUpKSB7DQorCQlpZiAodGltZV9hZnRl cihqaWZmaWVzLCB0aW1lb3V0KSkgew0KKwkJCWRldl9lcnIoZGV2LCAiVGltZWQgb3V0IHdhaXRp bmcgQVVYIHRvIGZpbmlzaCIpOw0KKwkJCXJldHVybiAtRVRJTUVET1VUOw0KKwkJfQ0KKwkJdXNs ZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KKwl9DQorDQorCXN0YXR1cyA9IGl0NjUwNV9yZWFkKGl0 NjUwNSwgUkVHX0FVWF9FUlJPUl9TVFMpOw0KKwlpZiAoc3RhdHVzIDwgMCkgew0KKwkJZGV2X2Vy cihkZXYsICJGYWlsZWQgdG8gcmVhZCBBVVggY2hhbm5lbDogJWQiLCBzdGF0dXMpOw0KKwkJcmV0 dXJuIHN0YXR1czsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHNzaXplX3Qg aXQ2NTA1X2F1eF9vcGVyYXRpb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1LA0KKwkJCQkgICAgZW51 bSBhdXhfY21kX3R5cGUgY21kLA0KKwkJCQkgICAgdW5zaWduZWQgaW50IGFkZHJlc3MsIHU4ICpi dWZmZXIsDQorCQkJCSAgICBzaXplX3Qgc2l6ZSwgZW51bSBhdXhfY21kX3JlcGx5ICpyZXBseSkN Cit7DQorCWludCBpLCByZXQ7DQorCWJvb2wgYXV4X3dyaXRlX2NoZWNrID0gZmFsc2U7DQorDQor CWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkNCisJCXJldHVybiAtRUlP Ow0KKw0KKwkvKiBzZXQgQVVYIHVzZXIgbW9kZSAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1 LCBSRUdfQVVYX0NUUkwsIEFVWF9VU0VSX01PREUsIEFVWF9VU0VSX01PREUpOw0KKw0KK2F1eF9v cF9zdGFydDoNCisJaWYgKGNtZCA9PSBDTURfQVVYX0kyQ19FRElEX1JFQUQpIHsNCisJCS8qIEFV WCBFRElEIEZJRk8gaGFzIG1heCBsZW5ndGggb2YgQVVYX0ZJRk9fTUFYX1NJWkUgYnl0ZXMuICov DQorCQlzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBBVVhfRklGT19NQVhfU0laRSk7DQorCQkv KiBFbmFibGUgQVVYIEZJRk8gcmVhZCBiYWNrIGFuZCBjbGVhciBGSUZPICovDQorCQlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsDQorCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBD TFJfRURJRF9GSUZPLA0KKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURfRklGTyk7DQor DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsDQorCQkJCUFVWF9FTl9G SUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPLA0KKwkJCQlBVVhfRU5fRklGT19SRUFEKTsNCisJfSBl bHNlIHsNCisJCS8qIFRoZSBEUCBBVVggdHJhbnNtaXQgYnVmZmVyIGhhcyA0IGJ5dGVzLiAqLw0K KwkJc2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgNCk7DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfQVVYX0NUUkwsIEFVWF9OT19TRUdNRU5UX1dSLA0KKwkJCQlBVVhfTk9fU0VHTUVO VF9XUik7DQorCX0NCisNCisJLyogU3RhcnQgQWRkcmVzc1s3OjBdICovDQorCWl0NjUwNV93cml0 ZShpdDY1MDUsIFJFR19BVVhfQURSXzBfNywgKGFkZHJlc3MgPj4gMCkgJiAweEZGKTsNCisJLyog U3RhcnQgQWRkcmVzc1sxNTo4XSAqLw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0FE Ul84XzE1LCAoYWRkcmVzcyA+PiA4KSAmIDB4RkYpOw0KKwkvKiBXcml0ZU51bVszOjBdK1N0YXJ0 QWRyWzE5OjE2XSAqLw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0FEUl8xNl8xOSwN CisJCSAgICAgKChhZGRyZXNzID4+IDE2KSAmIDB4MEYpIHwgKChzaXplIC0gMSkgPDwgNCkpOw0K Kw0KKwlpZiAoY21kID09IENNRF9BVVhfTkFUSVZFX1dSSVRFKQ0KKwkJcmVnbWFwX2J1bGtfd3Jp dGUoaXQ2NTA1LT5yZWdtYXAsIFJFR19BVVhfT1VUX0RBVEEwLCBidWZmZXIsDQorCQkJCSAgc2l6 ZSk7DQorDQorCS8qIEF1eCBGaXJlICovDQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhf Q01EX1JFUSwgY21kKTsNCisNCisJcmV0ID0gaXQ2NTA1X2F1eF93YWl0KGl0NjUwNSk7DQorCWlm IChyZXQgPCAwKQ0KKwkJZ290byBhdXhfb3BfZXJyOw0KKw0KKwlyZXQgPSBpdDY1MDVfcmVhZChp dDY1MDUsIFJFR19BVVhfRVJST1JfU1RTKTsNCisJaWYgKHJldCA8IDApDQorCQlnb3RvIGF1eF9v cF9lcnI7DQorDQorCXN3aXRjaCAoKHJldCA+PiA2KSAmIDB4Mykgew0KKwljYXNlIDA6DQorCQkq cmVwbHkgPSBSRVBMWV9BQ0s7DQorCQlicmVhazsNCisJY2FzZSAxOg0KKwkJKnJlcGx5ID0gUkVQ TFlfREVGRVI7DQorCQlyZXQgPSAtRUFHQUlOOw0KKwkJZ290byBhdXhfb3BfZXJyOw0KKwljYXNl IDI6DQorCQkqcmVwbHkgPSBSRVBMWV9OQUNLOw0KKwkJcmV0ID0gLUVJTzsNCisJCWdvdG8gYXV4 X29wX2VycjsNCisJY2FzZSAzOg0KKwkJcmV0ID0gLUVUSU1FRE9VVDsNCisJCWdvdG8gYXV4X29w X2VycjsNCisJfQ0KKw0KKwkvKiBSZWFkIGJhY2sgTmF0aXZlIFdyaXRlIGRhdGEgKi8NCisJaWYg KGNtZCA9PSBDTURfQVVYX05BVElWRV9XUklURSkgew0KKwkJYXV4X3dyaXRlX2NoZWNrID0gdHJ1 ZTsNCisJCWNtZCA9IENNRF9BVVhfTkFUSVZFX1JFQUQ7DQorCQlnb3RvIGF1eF9vcF9zdGFydDsN CisJfQ0KKw0KKwlpZiAoY21kID09IENNRF9BVVhfSTJDX0VESURfUkVBRCkgew0KKwkJZm9yIChp ID0gMDsgaSA8IHNpemU7IGkrKykgew0KKwkJCXJldCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVH X0FVWF9EQVRBX0ZJRk8pOw0KKwkJCWlmIChyZXQgPCAwKQ0KKwkJCQlnb3RvIGF1eF9vcF9lcnI7 DQorCQkJYnVmZmVyW2ldID0gcmV0Ow0KKwkJfQ0KKwl9IGVsc2Ugew0KKwkJZm9yIChpID0gMDsg aSA8IHNpemU7IGkrKykgew0KKwkJCXJldCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVWF9E QVRBXzBfNyArIGkpOw0KKwkJCWlmIChyZXQgPCAwKQ0KKwkJCQlnb3RvIGF1eF9vcF9lcnI7DQor DQorCQkJaWYgKGF1eF93cml0ZV9jaGVjayAmJiBidWZmZXJbc2l6ZSAtIDEgLSBpXSAhPSByZXQp IHsNCisJCQkJcmV0ID0gLUVJTlZBTDsNCisJCQkJZ290byBhdXhfb3BfZXJyOw0KKwkJCX0NCisN CisJCQlidWZmZXJbc2l6ZSAtIDEgLSBpXSA9IHJldDsNCisJCX0NCisJfQ0KKw0KKwlyZXQgPSBp Ow0KKw0KK2F1eF9vcF9lcnI6DQorCWlmIChjbWQgPT0gQ01EX0FVWF9JMkNfRURJRF9SRUFEKSB7 DQorCQkvKiBjbGVhciBBVVggRklGTyAqLw0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0FVWF9DVFJMLA0KKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURfRklGTywNCisJCQkJ QVVYX0VOX0ZJRk9fUkVBRCB8IENMUl9FRElEX0ZJRk8pOw0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0FVWF9DVFJMLA0KKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURfRklG TywgMHgwMCk7DQorCX0NCisNCisJLyogTGVhdmUgQVVYIHVzZXIgbW9kZSAqLw0KKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsIEFVWF9VU0VSX01PREUsIDApOw0KKw0KKwly ZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgc3NpemVfdCBpdDY1MDVfYXV4X2RvX3RyYW5zZmVy KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCisJCQkJICAgICAgZW51bSBhdXhfY21kX3R5cGUgY21k LA0KKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgYWRkcmVzcywgdTggKmJ1ZmZlciwNCisJCQkJICAg ICAgc2l6ZV90IHNpemUsIGVudW0gYXV4X2NtZF9yZXBseSAqcmVwbHkpDQorew0KKwlpbnQgaSwg cmV0X3NpemUsIHJldCA9IDAsIHJlcXVlc3Rfc2l6ZTsNCisNCisJbXV0ZXhfbG9jaygmaXQ2NTA1 LT5hdXhfbG9jayk7DQorCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsNCisJCXJlcXVl c3Rfc2l6ZSA9IG1pbigoaW50KXNpemUgLSBpLCA0KTsNCisJCXJldF9zaXplID0gaXQ2NTA1X2F1 eF9vcGVyYXRpb24oaXQ2NTA1LCBjbWQsIGFkZHJlc3MgKyBpLA0KKwkJCQkJCWJ1ZmZlciArIGks IHJlcXVlc3Rfc2l6ZSwNCisJCQkJCQlyZXBseSk7DQorCQlpZiAocmV0X3NpemUgPCAwKSB7DQor CQkJcmV0ID0gcmV0X3NpemU7DQorCQkJZ290byBhdXhfb3BfZXJyOw0KKwkJfQ0KKw0KKwkJcmV0 ICs9IHJldF9zaXplOw0KKwl9DQorDQorYXV4X29wX2VycjoNCisJbXV0ZXhfdW5sb2NrKCZpdDY1 MDUtPmF1eF9sb2NrKTsNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHNzaXplX3QgaXQ2 NTA1X2F1eF90cmFuc2ZlcihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LA0KKwkJCQkgICBzdHJ1Y3Qg ZHJtX2RwX2F1eF9tc2cgKm1zZykNCit7DQorCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbnRh aW5lcl9vZihhdXgsIHN0cnVjdCBpdDY1MDUsIGF1eCk7DQorCXU4IGNtZDsNCisJYm9vbCBpc19p MmMgPSAhKG1zZy0+cmVxdWVzdCAmIERQX0FVWF9OQVRJVkVfV1JJVEUpOw0KKwlpbnQgcmV0Ow0K KwllbnVtIGF1eF9jbWRfcmVwbHkgcmVwbHk7DQorDQorCS8qIElUNjUwNSBkb2Vzbid0IHN1cHBv cnQgYXJiaXRyYXJ5IEkyQyByZWFkIC8gd3JpdGUuICovDQorCWlmIChpc19pMmMpDQorCQlyZXR1 cm4gLUVJTlZBTDsNCisNCisJc3dpdGNoIChtc2ctPnJlcXVlc3QpIHsNCisJY2FzZSBEUF9BVVhf TkFUSVZFX1JFQUQ6DQorCQljbWQgPSBDTURfQVVYX05BVElWRV9SRUFEOw0KKwkJYnJlYWs7DQor CWNhc2UgRFBfQVVYX05BVElWRV9XUklURToNCisJCWNtZCA9IENNRF9BVVhfTkFUSVZFX1dSSVRF Ow0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwly ZXQgPSBpdDY1MDVfYXV4X2RvX3RyYW5zZmVyKGl0NjUwNSwgY21kLCBtc2ctPmFkZHJlc3MsIG1z Zy0+YnVmZmVyLA0KKwkJCQkgICAgIG1zZy0+c2l6ZSwgJnJlcGx5KTsNCisJaWYgKHJldCA8IDAp DQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlzd2l0Y2ggKHJlcGx5KSB7DQorCWNhc2UgUkVQTFlfQUNL Og0KKwkJbXNnLT5yZXBseSA9IERQX0FVWF9OQVRJVkVfUkVQTFlfQUNLOw0KKwkJYnJlYWs7DQor CWNhc2UgUkVQTFlfTkFDSzoNCisJCW1zZy0+cmVwbHkgPSBEUF9BVVhfTkFUSVZFX1JFUExZX05B Q0s7DQorCQlicmVhazsNCisJY2FzZSBSRVBMWV9ERUZFUjoNCisJCW1zZy0+cmVwbHkgPSBEUF9B VVhfTkFUSVZFX1JFUExZX0RFRkVSOw0KKwkJYnJlYWs7DQorCX0NCisNCisJcmV0dXJuIHJldDsN Cit9DQorDQorc3RhdGljIGludCBpdDY1MDVfZ2V0X2VkaWRfYmxvY2sodm9pZCAqZGF0YSwgdTgg KmJ1ZiwgdW5zaWduZWQgaW50IGJsb2NrLA0KKwkJCQkgc2l6ZV90IGxlbikNCit7DQorCXN0cnVj dCBpdDY1MDUgKml0NjUwNSA9IGRhdGE7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUt PmNsaWVudC0+ZGV2Ow0KKwllbnVtIGF1eF9jbWRfcmVwbHkgcmVwbHk7DQorCWludCBvZmZzZXQs IHJldCwgYXV4X3JldHJ5ID0gMTAwOw0KKw0KKwlpdDY1MDVfYXV4X3Jlc2V0KGl0NjUwNSk7DQor CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImJsb2NrIG51bWJlciA9ICVkIiwgYmxvY2spOw0K Kw0KKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IEVESURfTEVOR1RIOykgew0KKwkJcmV0ID0g aXQ2NTA1X2F1eF9kb190cmFuc2ZlcihpdDY1MDUsIENNRF9BVVhfSTJDX0VESURfUkVBRCwNCisJ CQkJCSAgICAgYmxvY2sgKiBFRElEX0xFTkdUSCArIG9mZnNldCwNCisJCQkJCSAgICAgYnVmICsg b2Zmc2V0LCA4LCAmcmVwbHkpOw0KKw0KKwkJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FQUdBSU4p DQorCQkJcmV0dXJuIHJldDsNCisNCisJCXN3aXRjaCAocmVwbHkpIHsNCisJCWNhc2UgUkVQTFlf QUNLOg0KKwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlsweCUwMnhdOiAlOHBoIiwgb2Zm c2V0LA0KKwkJCQkJICAgICBidWYgKyBvZmZzZXQpOw0KKwkJCW9mZnNldCArPSA4Ow0KKwkJCWF1 eF9yZXRyeSA9IDEwMDsNCisJCQlicmVhazsNCisJCWNhc2UgUkVQTFlfTkFDSzoNCisJCQlyZXR1 cm4gLUVJTzsNCisJCWNhc2UgUkVQTFlfREVGRVI6DQorCQkJbXNsZWVwKDIwKTsNCisJCQlpZiAo ISgtLWF1eF9yZXRyeSkpDQorCQkJCXJldHVybiAtRUlPOw0KKwkJfQ0KKwl9DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfdmFyaWFibGVfY29uZmlnKHN0cnVjdCBp dDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUgPSBIQlI7DQor CWl0NjUwNS0+bGFuZV9jb3VudCA9IE1BWF9MQU5FX0NPVU5UOw0KKwlpdDY1MDUtPmxpbmtfc3Rh dGUgPSBMSU5LX0lETEU7DQorCWl0NjUwNS0+aGRjcF9kZXNpcmVkID0gSERDUF9ERVNJUkVEOw0K KwlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZOw0KKwlpdDY1MDUt PmF1ZGlvLnNlbGVjdCA9IEFVRElPX1NFTEVDVDsNCisJaXQ2NTA1LT5hdWRpby5zYW1wbGVfcmF0 ZSA9IEFVRElPX1NBTVBMRV9SQVRFOw0KKwlpdDY1MDUtPmF1ZGlvLmNoYW5uZWxfY291bnQgPSBB VURJT19DSEFOTkVMX0NPVU5UOw0KKwlpdDY1MDUtPmF1ZGlvLnR5cGUgPSBBVURJT19UWVBFOw0K KwlpdDY1MDUtPmF1ZGlvLmkyc19pbnB1dF9mb3JtYXQgPSBJMlNfSU5QVVRfRk9STUFUOw0KKwlp dDY1MDUtPmF1ZGlvLmkyc19qdXN0aWZpZWQgPSBJMlNfSlVTVElGSUVEOw0KKwlpdDY1MDUtPmF1 ZGlvLmkyc19kYXRhX2RlbGF5ID0gSTJTX0RBVEFfREVMQVk7DQorCWl0NjUwNS0+YXVkaW8uaTJz X3dzX2NoYW5uZWwgPSBJMlNfV1NfQ0hBTk5FTDsNCisJaXQ2NTA1LT5hdWRpby5pMnNfZGF0YV9z ZXF1ZW5jZSA9IEkyU19EQVRBX1NFUVVFTkNFOw0KKwlpdDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3Ro ID0gQVVESU9fV09SRF9MRU5HVEg7DQorCW1lbXNldChpdDY1MDUtPnNoYTFfaW5wdXQsIDAsIHNp emVvZihpdDY1MDUtPnNoYTFfaW5wdXQpKTsNCisJbWVtc2V0KGl0NjUwNS0+YmtzdnMsIDAsIHNp emVvZihpdDY1MDUtPmJrc3ZzKSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X3NlbmRfdmlk ZW9faW5mb2ZyYW1lKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCisJCQkJICAgICAgIHN0cnVjdCBo ZG1pX2F2aV9pbmZvZnJhbWUgKmZyYW1lKQ0KK3sNCisJdTggYnVmZmVyW0hETUlfSU5GT0ZSQU1F X0hFQURFUl9TSVpFICsgSERNSV9BVklfSU5GT0ZSQU1FX1NJWkVdOw0KKwlpbnQgZXJyOw0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJZXJyID0gaGRt aV9hdmlfaW5mb2ZyYW1lX3BhY2soZnJhbWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOw0KKwlp ZiAoZXJyIDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcGFjayBBVkkgaW5mb2Zy YW1lOiAlZCIsIGVycik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWVyciA9IGl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19JTkZPRlJBTUVfQ1RSTCwgRU5fQVZJX1BLVCwgMHgwMCk7DQor CWlmIChlcnIpDQorCQlyZXR1cm4gZXJyOw0KKw0KKwllcnIgPSByZWdtYXBfYnVsa193cml0ZShp dDY1MDUtPnJlZ21hcCwgUkVHX0FWSV9JTkZPX0RCMSwNCisJCQkJYnVmZmVyICsgSERNSV9JTkZP RlJBTUVfSEVBREVSX1NJWkUsDQorCQkJCWZyYW1lLT5sZW5ndGgpOw0KKwlpZiAoZXJyKQ0KKwkJ cmV0dXJuIGVycjsNCisNCisJZXJyID0gaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0lORk9G UkFNRV9DVFJMLCBFTl9BVklfUEtULA0KKwkJCSAgICAgIEVOX0FWSV9QS1QpOw0KKwlpZiAoZXJy KQ0KKwkJcmV0dXJuIGVycjsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0 NjUwNV9nZXRfZXh0Y29uX3Byb3BlcnR5KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWlu dCBlcnI7DQorCXVuaW9uIGV4dGNvbl9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eTsNCisJc3RydWN0 IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCWlmIChpdDY1MDUtPmV4 dGNvbiAmJiAhaXQ2NTA1LT5sYW5lX3N3YXBfZGlzYWJsZWQpIHsNCisJCWVyciA9IGV4dGNvbl9n ZXRfcHJvcGVydHkoaXQ2NTA1LT5leHRjb24sIEVYVENPTl9ESVNQX0RQLA0KKwkJCQkJICBFWFRD T05fUFJPUF9VU0JfVFlQRUNfUE9MQVJJVFksDQorCQkJCQkgICZwcm9wZXJ0eSk7DQorCQlpZiAo ZXJyKSB7DQorCQkJZGV2X2VycihkZXYsICJnZXQgcHJvcGVydHkgZmFpbCEiKTsNCisJCQlyZXR1 cm47DQorCQl9DQorCQlpdDY1MDUtPmxhbmVfc3dhcCA9IHByb3BlcnR5LmludHZhbDsNCisJfQ0K K30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfY2xrX3BoYXNlX2FkanVzdG1lbnQoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1LA0KKwkJCQkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUp DQorew0KKwlpbnQgY2xvY2sgPSBtb2RlLT5jbG9jazsNCisNCisJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0NMS19DVFJMMCwgTV9QQ0xLX0RFTEFZLA0KKwkJCWNsb2NrIDwgQURKVVNUX1BI QVNFX1RIUkVTSE9MRCA/IFBJWEVMX0NMS19ERUxBWSA6IDApOw0KKwlpdDY1MDVfc2V0X2JpdHMo aXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgVklERU9fTEFUQ0hfRURHRSwNCisJCQlQSVhFTF9DTEtf SU5WRVJTRSA8PCA0KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtfcmVzZXRfc3Rl cF90cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfVFJBSU5fQ1RSTDAsDQorCQkJRk9SQ0VfQ1JfRE9ORSB8IEZPUkNFX0VRX0RPTkUs IDB4MDApOw0KKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5f U0VULA0KKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsNCit9DQorDQorc3RhdGlj IHZvaWQgaXQ2NTA1X2luaXQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1X3dy aXRlKGl0NjUwNSwgUkVHX0FVWF9PUFQsIEFVWF9BVVRPX1JTVCB8IEFVWF9GSVhfRlJFUSk7DQor CWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhfQ1RSTCwgQVVYX05PX1NFR01FTlRfV1IpOw0K KwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSERDUF9DVFJMMiwgSERDUF9BTl9TRUwgfCBIRENQ X0hXX0hQRElSUV9BQ1QpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVklEX0JVU19DVFJM MCwgSU5fRERSIHwgRERSX0NEKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1ZJRF9CVVNf Q1RSTDEsIDB4MDEpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fQ1RSTDAsIEFV RElPXzE2Ql9CT1VORCk7DQorDQorCS8qIGNoaXAgaW50ZXJuYWwgc2V0dGluZywgZG9uJ3QgbW9k aWZ5ICovDQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19IUERfSVJRX1RJTUUsIDB4RjUpOw0K KwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0RFQlVHX01PREUsIDB4NEQpOw0KKwlpdDY1 MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX09QVDIsIDB4MTcpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfSERDUF9PUFQsIDB4NjApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfREFU QV9NVVRFX0NUUkwsDQorCQkgICAgIEVOX1ZJRF9NVVRFIHwgRU5fQVVEX01VVEUgfCBFTkFCTEVf QVVUT19WSURFT19GSUZPX1JFU0VUKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1RJTUVf U1RNUF9DVFJMLA0KKwkJICAgICBFTl9TU0NfR0FUIHwgRU5fRU5IQU5DRV9WSURfU1RNUCB8IEVO X0VOSEFOQ0VfQVVEX1NUTVApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1F X0NUUkwsIDB4MDApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDEp Ow0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfRFJWXzBfREJfODAwX01WLA0KKwkJICAgICBh ZmVfc2V0dGluZ190YWJsZVtpdDY1MDUtPmFmZV9zZXR0aW5nXVswXSk7DQorCWl0NjUwNV93cml0 ZShpdDY1MDUsIFJFR19QUkVfMF9EQl84MDBfTVYsDQorCQkgICAgIGFmZV9zZXR0aW5nX3RhYmxl W2l0NjUwNS0+YWZlX3NldHRpbmddWzFdKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1BS RV8zUDVfREJfODAwX01WLA0KKwkJICAgICBhZmVfc2V0dGluZ190YWJsZVtpdDY1MDUtPmFmZV9z ZXR0aW5nXVsyXSk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDAsIDB4OUUp Ow0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1NDX0NUUkwxLCAweDFDKTsNCisJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX1NTQ19DVFJMMiwgMHg0Mik7DQorCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV92aWRl b19kaXNhYmxlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV9zZXRfYml0cyhp dDY1MDUsIFJFR19EQVRBX01VVEVfQ1RSTCwgRU5fVklEX01VVEUsIEVOX1ZJRF9NVVRFKTsNCisJ aXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0lORk9GUkFNRV9DVFJMLCBFTl9WSURfQ1RSTF9Q S1QsIDB4MDApOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgVklE RU9fUkVTRVQsIFZJREVPX1JFU0VUKTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X3ZpZGVv X3Jlc2V0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV9saW5rX3Jlc2V0X3N0 ZXBfdHJhaW4oaXQ2NTA1KTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RBVEFfTVVU RV9DVFJMLCBFTl9WSURfTVVURSwgRU5fVklEX01VVEUpOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX1ZJRF9DVFJMX1BLVCwgMHgwMCk7DQorCWl0NjUw NV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBWSURFT19SRVNFVCwgVklERU9fUkVT RVQpOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfNTAxX0ZJRk9fQ1RSTCwgUlNUXzUw MV9GSUZPLCBSU1RfNTAxX0ZJRk8pOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfNTAx X0ZJRk9fQ1RSTCwgUlNUXzUwMV9GSUZPLCAweDAwKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX1JFU0VUX0NUUkwsIFZJREVPX1JFU0VULCAweDAwKTsNCit9DQorDQorc3RhdGljIHZv aWQgaXQ2NTA1X3VwZGF0ZV92aWRlb19wYXJhbWV0ZXIoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LA0K KwkJCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkNCit7DQorCWl0NjUw NV9jbGtfcGhhc2VfYWRqdXN0bWVudChpdDY1MDUsIG1vZGUpOw0KKwlpdDY1MDVfdmlkZW9fZGlz YWJsZShpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVfYXVkaW9faW5wdXQoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZzA1LCByZWdiZTsNCisNCisJcmVnMDUg PSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19SRVNFVF9DVFJMKTsNCisJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEFVRElPX1JFU0VULCAweDAwKTsNCisJdXNsZWVwX3Jh bmdlKDMwMDAsIDQwMDApOw0KKwlyZWdiZSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVRElP X0lOUFVUX0ZSRVEpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgcmVn MDUpOw0KKw0KKwlyZXR1cm4gcmVnYmUgIT0gMHhGRjsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2 NTA1X3NldHVwX2F1ZGlvX2NoYW5uZWxfc3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7 DQorCWVudW0gaXQ2NTA1X2F1ZGlvX3NhbXBsZV9yYXRlIHNhbXBsZV9yYXRlID0gaXQ2NTA1LT5h dWRpby5zYW1wbGVfcmF0ZTsNCisJdTggYXVkaW9fd29yZF9sZW5ndGhfbWFwW10gPSB7IDB4MDIs IDB4MDQsIDB4MDMsIDB4MEIgfTsNCisNCisJLyogQ2hhbm5lbCBTdGF0dXMgKi8NCisJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1OF9TVFMwLCBpdDY1MDUtPmF1ZGlvLnR5cGUgPDwgMSk7 DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTMSwgMHgwMCk7DQorCWl0NjUw NV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTMiwgMHgwMCk7DQorCWl0NjUwNV93cml0ZShp dDY1MDUsIFJFR19JRUM5NThfU1RTMywgc2FtcGxlX3JhdGUpOw0KKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfSUVDOTU4X1NUUzQsICh+c2FtcGxlX3JhdGUgPDwgNCkgfA0KKwkJICAgICBhdWRp b193b3JkX2xlbmd0aF9tYXBbaXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aF0pOw0KK30NCisNCitz dGF0aWMgdm9pZCBpdDY1MDVfc2V0dXBfYXVkaW9fZm9ybWF0KHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCit7DQorCS8qIEkyUyBNT0RFICovDQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJ T19GTVQsDQorCQkgICAgIChpdDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoIDw8IDUpIHwNCisJCSAg ICAgKGl0NjUwNS0+YXVkaW8uaTJzX2RhdGFfc2VxdWVuY2UgPDwgNCkgfA0KKwkJICAgICAoaXQ2 NTA1LT5hdWRpby5pMnNfd3NfY2hhbm5lbCA8PCAzKSB8DQorCQkgICAgIChpdDY1MDUtPmF1ZGlv Lmkyc19kYXRhX2RlbGF5IDw8IDIpIHwNCisJCSAgICAgKGl0NjUwNS0+YXVkaW8uaTJzX2p1c3Rp ZmllZCA8PCAxKSB8DQorCQkgICAgIGl0NjUwNS0+YXVkaW8uaTJzX2lucHV0X2Zvcm1hdCk7DQor CWlmIChpdDY1MDUtPmF1ZGlvLnNlbGVjdCA9PSBTUERJRikgew0KKwkJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX0FVRElPX0ZJRk9fU0VMLCAweDAwKTsNCisJCS8qIDB4MzAgPSAxMjgqRlMgKi8N CisJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfT1BULCAweEYwLCAweDMwKTsNCisJ fSBlbHNlIHsNCisJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19GSUZPX1NFTCwgMHhF NCk7DQorCX0NCisNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkwwLCAweDIw KTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkwxLCAweDAwKTsNCit9DQor DQorc3RhdGljIHZvaWQgaXQ2NTA1X2VuYWJsZV9hdWRpb19zb3VyY2Uoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQ0KK3sNCisJdW5zaWduZWQgaW50IGF1ZGlvX3NvdXJjZV9jb3VudDsNCisNCisJYXVk aW9fc291cmNlX2NvdW50ID0gQklUKERJVl9ST1VORF9VUChpdDY1MDUtPmF1ZGlvLmNoYW5uZWxf Y291bnQsIDIpKQ0KKwkJCQkgLSAxOw0KKw0KKwlhdWRpb19zb3VyY2VfY291bnQgfD0gaXQ2NTA1 LT5hdWRpby5zZWxlY3QgPDwgNDsNCisNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElP X1NSQ19DVFJMLCBhdWRpb19zb3VyY2VfY291bnQpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1 MDVfZW5hYmxlX2F1ZGlvX2luZm9mcmFtZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJdTggYXVkaW9faW5m b19jYVtdID0geyAweDAwLCAweDAwLCAweDAxLCAweDAzLCAweDA3LCAweDBCLCAweDBGLCAweDFG IH07DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImluZm9mcmFtZSBjaGFubmVsX2Fs bG9jYXRpb246MHglMDJ4IiwNCisJCQkgICAgIGF1ZGlvX2luZm9fY2FbaXQ2NTA1LT5hdWRpby5j aGFubmVsX2NvdW50IC0gMV0pOw0KKw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVEX0lO Rk9GUkFNX0RCMSwgaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50DQorCQkgICAgIC0gMSk7DQor CWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fREIyLCAweDAwKTsNCisJaXQ2 NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9JTkZPRlJBTV9EQjMsDQorCQkgICAgIGF1ZGlvX2lu Zm9fY2FbaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50IC0gMV0pOw0KKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBSRUdfQVVEX0lORk9GUkFNX0RCNCwgMHgwMCk7DQorCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19BVURfSU5GT0ZSQU1fU1VNLCAweDAwKTsNCisNCisJLyogRW5hYmxlIEF1ZGlvIElu Zm9GcmFtZSAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkws IEVOX0FVRF9DVFJMX1BLVCwNCisJCQlFTl9BVURfQ1RSTF9QS1QpOw0KK30NCisNCitzdGF0aWMg dm9pZCBpdDY1MDVfZGlzYWJsZV9hdWRpbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlp dDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsIEVOX0FVRF9NVVRFLCBF Tl9BVURfTVVURSk7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVURJT19TUkNfQ1RS TCwgTV9BVURJT19JMlNfRU4sIDB4MDApOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf SU5GT0ZSQU1FX0NUUkwsIEVOX0FVRF9DVFJMX1BLVCwgMHgwMCk7DQorCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVURJT19SRVNFVCwgQVVESU9fUkVTRVQpOw0KK30N CisNCitzdGF0aWMgdm9pZCBpdDY1MDVfZW5hYmxlX2F1ZGlvKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlp bnQgcmVnYmU7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0YXJ0Iik7DQorCWl0 NjUwNV9kaXNhYmxlX2F1ZGlvKGl0NjUwNSk7DQorDQorCWl0NjUwNV9zZXR1cF9hdWRpb19jaGFu bmVsX3N0YXR1cyhpdDY1MDUpOw0KKwlpdDY1MDVfc2V0dXBfYXVkaW9fZm9ybWF0KGl0NjUwNSk7 DQorCWl0NjUwNV9lbmFibGVfYXVkaW9fc291cmNlKGl0NjUwNSk7DQorCWl0NjUwNV9lbmFibGVf YXVkaW9faW5mb2ZyYW1lKGl0NjUwNSk7DQorDQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19B VURJT19OXzBfNywgMHgwMCk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19OXzhf MTUsIDB4ODApOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fTl8xNl8yMywgMHgw MCk7DQorDQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVURJT19TUkNfQ1RSTCwgQVVE SU9fRklGT19SRVNFVCwNCisJCQlBVURJT19GSUZPX1JFU0VUKTsNCisJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX0FVRElPX1NSQ19DVFJMLCBBVURJT19GSUZPX1JFU0VULCAweDAwKTsNCisJ aXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEFVRElPX1JFU0VULCAweDAw KTsNCisJcmVnYmUgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVURJT19JTlBVVF9GUkVRKTsN CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicmVnYmU6MHglMDJ4IGF1ZGlvIGlucHV0IGZz OiAlZC4lZCBrSHoiLA0KKwkJCSAgICAgcmVnYmUsIDY3NTAgLyByZWdiZSwgKDY3NTAgJSByZWdi ZSkgKiAxMCAvIHJlZ2JlKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RBVEFfTVVU RV9DVFJMLCBFTl9BVURfTVVURSwgMHgwMCk7DQorfQ0KKw0KK3N0YXRpYyBib29sIGl0NjUwNV91 c2Vfc3RlcF90cmFpbl9jaGVjayhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpZiAoaXQ2 NTA1LT5saW5rLnJldmlzaW9uID49IDB4MTIpDQorCQlyZXR1cm4gaXQ2NTA1LT5kcGNkW0RQX1RS QUlOSU5HX0FVWF9SRF9JTlRFUlZBTF0gPj0gMHgwMTsNCisNCisJcmV0dXJuIHRydWU7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9wYXJzZV9saW5rX2NhcGFiaWxpdGllcyhzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsNCisJc3RydWN0IGl0NjUwNV9kcm1fZHBfbGluayAqbGluayA9ICZpdDY1MDUtPmxpbms7 DQorCWludCBiY2FwczsNCisNCisJaWYgKGl0NjUwNS0+ZHBjZFswXSA9PSAwKSB7DQorCQlpdDY1 MDVfYXV4X29uKGl0NjUwNSk7DQorCQlpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9EUENEX1JF ViwgaXQ2NTA1LT5kcGNkLA0KKwkJCQlBUlJBWV9TSVpFKGl0NjUwNS0+ZHBjZCkpOw0KKwl9DQor DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkRQQ0QgUmV2LjogJWQuJWQiLA0KKwkJCSAg ICAgbGluay0+cmV2aXNpb24gPj4gNCwgbGluay0+cmV2aXNpb24gJiAweDBGKTsNCisNCisJRFJN X0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU2luayBtYXggbGluayByYXRlOiAlZC4lMDJkIEdicHMg cGVyIGxhbmUiLA0KKwkJCSAgICAgbGluay0+cmF0ZSAvIDEwMDAwMCwgbGluay0+cmF0ZSAvIDEw MDAgJSAxMDApOw0KKw0KKwlpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlID0gZHJtX2RwX2xpbmtf cmF0ZV90b19id19jb2RlKGxpbmstPnJhdGUpOw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJsaW5rIHJhdGUgYncgY29kZToweCUwMngiLA0KKwkJCSAgICAgaXQ2NTA1LT5saW5rX3JhdGVf YndfY29kZSk7DQorCWl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUgPSBtaW5fdChpbnQsIGl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGUsDQorCQkJCQkgIE1BWF9MSU5LX1JBVEUpOw0KKw0KKwlpdDY1 MDUtPmxhbmVfY291bnQgPSBsaW5rLT5udW1fbGFuZXM7DQorCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIlNpbmsgc3VwcG9ydCAlZCBsYW5lcyB0cmFpbmluZyIsDQorCQkJICAgICBpdDY1MDUt PmxhbmVfY291bnQpOw0KKwlpdDY1MDUtPmxhbmVfY291bnQgPSBtaW5fdChpbnQsIGl0NjUwNS0+ bGFuZV9jb3VudCwgTUFYX0xBTkVfQ09VTlQpOw0KKw0KKwlpdDY1MDUtPmJyYW5jaF9kZXZpY2Ug PSBkcm1fZHBfaXNfYnJhbmNoKGl0NjUwNS0+ZHBjZCk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIlNpbmsgJXNicmFuY2ggZGV2aWNlIiwNCisJCQkgICAgIGl0NjUwNS0+YnJhbmNoX2Rl dmljZSA/ICIiIDogIk5vdCAiKTsNCisNCisJaXQ2NTA1LT5lbmFibGVfZW5oYW5jZWRfZnJhbWUg PSBsaW5rLT5jYXBhYmlsaXRpZXM7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNpbmsg JXNTdXBwb3J0IEVuaGFuY2VkIEZyYW1pbmciLA0KKwkJCSAgICAgaXQ2NTA1LT5lbmFibGVfZW5o YW5jZWRfZnJhbWUgPyAiIiA6ICJOb3QgIik7DQorDQorCWl0NjUwNS0+ZW5hYmxlX3NzYyA9IChp dDY1MDUtPmRwY2RbRFBfTUFYX0RPV05TUFJFQURdICYNCisJCQkJRFBfTUFYX0RPV05TUFJFQURf MF81KTsNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiTWF4aW11bSBEb3duLVNwcmVhZDog JXMsICVzc3VwcG9ydCBTU0MhIiwNCisJCQkgICAgIGl0NjUwNS0+ZW5hYmxlX3NzYyA/ICIwLjUi IDogIjAiLA0KKwkJCSAgICAgaXQ2NTA1LT5lbmFibGVfc3NjID8gIiIgOiAiTm90ICIpOw0KKw0K KwlpdDY1MDUtPnN0ZXBfdHJhaW4gPSBpdDY1MDVfdXNlX3N0ZXBfdHJhaW5fY2hlY2soaXQ2NTA1 KTsNCisJaWYgKGl0NjUwNS0+c3RlcF90cmFpbikNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgImF1dG8gdHJhaW4gZmFpbCwgd2lsbCBzdGVwIHRyYWluIik7DQorDQorCWJjYXBzID0gaXQ2 NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX0FVWF9IRENQX0JDQVBTKTsNCisJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiYmNhcHM6MHglMDJ4IiwgYmNhcHMpOw0KKwlpZiAoYmNhcHMgJiBEUF9C Q0FQU19IRENQX0NBUEFCTEUpIHsNCisJCWl0NjUwNS0+aXNfcmVwZWF0ZXIgPSAoYmNhcHMgJiBE UF9CQ0FQU19SRVBFQVRFUl9QUkVTRU5UKTsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg IlN1cHBvcnQgSERDUCEgRG93bnN0cmVhbSBpcyAlcyEiLA0KKwkJCQkgICAgIGl0NjUwNS0+aXNf cmVwZWF0ZXIgPyAicmVwZWF0ZXIiIDoNCisJCQkJICAgICAicmVjZWl2ZXIiKTsNCisJfSBlbHNl IHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNpbmsgbm90IHN1cHBvcnQgSERDUCEi KTsNCisJCWl0NjUwNS0+aGRjcF9kZXNpcmVkID0gZmFsc2U7DQorCX0NCisJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiSERDUCAlcyIsDQorCQkJICAgICBpdDY1MDUtPmhkY3BfZGVzaXJlZCA/ ICJkZXNpcmVkIiA6ICJ1bmRlc2lyZWQiKTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X3Nl dHVwX3NzYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIFNQUkVBRF9BTVBfNSwNCisJCQlpdDY1MDUtPmVuYWJsZV9z c2MgPyBTUFJFQURfQU1QXzUgOiAweDAwKTsNCisJaWYgKGl0NjUwNS0+ZW5hYmxlX3NzYykgew0K KwkJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAxKTsNCisJCWl0NjUwNV93 cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDAsIDB4OUUpOw0KKwkJaXQ2NTA1X3dyaXRlKGl0NjUw NSwgUkVHX1NTQ19DVFJMMSwgMHgxQyk7DQorCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1ND X0NUUkwyLCAweDQyKTsNCisJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwgMHgw MCk7DQorCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1BfQ1RSTDAsIDB4MDcpOw0KKwkJaXQ2 NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lQX0NUUkwxLCAweDI5KTsNCisJCWl0NjUwNV93cml0ZShp dDY1MDUsIFJFR19JUF9DVFJMMiwgMHgwMyk7DQorCQkvKiBTdGFtcCBJbnRlcnJ1cHQgU3RlcCAq Lw0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLCBNX1NUQU1Q X1NURVAsDQorCQkJCTB4MTApOw0KKwkJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9ET1dO U1BSRUFEX0NUUkwsDQorCQkJCSAgRFBfU1BSRUFEX0FNUF8wXzUpOw0KKwl9IGVsc2Ugew0KKwkJ aXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9ET1dOU1BSRUFEX0NUUkwsIDB4MDApOw0KKwkJ aXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLCBNX1NUQU1QX1NURVAs DQorCQkJCTB4MDApOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpdDY1MDVfbGlu a19yYXRlX3NldHVwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19UUkFJTl9DVFJMMCwgRk9SQ0VfTEJSLA0KKwkJCShpdDY1MDUtPmxpbmtf cmF0ZV9id19jb2RlID09IFJCUikgPyBGT1JDRV9MQlIgOiAweDAwKTsNCisJaXQ2NTA1X3NldF9i aXRzKGl0NjUwNSwgUkVHX0xJTktfRFJWLCBEUlZfSFMsDQorCQkJKGl0NjUwNS0+bGlua19yYXRl X2J3X2NvZGUgPT0gUkJSKSA/IDB4MDAgOiBEUlZfSFMpOw0KK30NCisNCitzdGF0aWMgdm9pZCBp dDY1MDVfbGFuZV9jb3VudF9zZXR1cChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1 MDVfZ2V0X2V4dGNvbl9wcm9wZXJ0eShpdDY1MDUpOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1 LCBSRUdfVFJBSU5fQ1RSTDAsIExBTkVfU1dBUCwNCisJCQlpdDY1MDUtPmxhbmVfc3dhcCA/IExB TkVfU1dBUCA6IDB4MDApOw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RS TDAsIExBTkVfQ09VTlRfTUFTSywNCisJCQkoaXQ2NTA1LT5sYW5lX2NvdW50IC0gMSkgPDwgMSk7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9saW5rX3RyYWluaW5nX3NldHVwKHN0cnVjdCBp dDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVu dC0+ZGV2Ow0KKw0KKwlpZiAoaXQ2NTA1LT5lbmFibGVfZW5oYW5jZWRfZnJhbWUpDQorCQlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsDQorCQkJCUVOQUJMRV9FTkhB TkNFRF9GUkFNRSwgRU5BQkxFX0VOSEFOQ0VEX0ZSQU1FKTsNCisNCisJaXQ2NTA1X2xpbmtfcmF0 ZV9zZXR1cChpdDY1MDUpOw0KKwlpdDY1MDVfbGFuZV9jb3VudF9zZXR1cChpdDY1MDUpOw0KKwlp dDY1MDVfc2V0dXBfc3NjKGl0NjUwNSk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwNCisJ CQkgICAgICIlcywgJWQgbGFuZXMsICVzYWJsZSBzc2MsICVzYWJsZSBlbmhhbmNlZCBmcmFtZSIs DQorCQkJICAgICBpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlICE9IFJCUiA/ICJIQlIiIDogIlJC UiIsDQorCQkJICAgICBpdDY1MDUtPmxhbmVfY291bnQsDQorCQkJICAgICBpdDY1MDUtPmVuYWJs ZV9zc2MgPyAiZW4iIDogImRpcyIsDQorCQkJICAgICBpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9m cmFtZSA/ICJlbiIgOiAiZGlzIik7DQorfQ0KKw0KK3N0YXRpYyBib29sIGl0NjUwNV9saW5rX3N0 YXJ0X2F1dG9fdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHRpbWVvdXQg PSA1MDAsIGxpbmtfdHJhaW5pbmdfc3RhdGU7DQorCWJvb2wgc3RhdGUgPSBmYWxzZTsNCisNCisJ bXV0ZXhfbG9jaygmaXQ2NTA1LT5hdXhfbG9jayk7DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUs IFJFR19UUkFJTl9DVFJMMCwNCisJCQlGT1JDRV9DUl9ET05FIHwgRk9SQ0VfRVFfRE9ORSwgMHgw MCk7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19UUkFJTl9DVFJMMSwgRk9SQ0VfUkVUUkFJ Tik7DQorCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19UUkFJTl9DVFJMMSwgQVVUT19UUkFJTik7 DQorDQorCXdoaWxlICh0aW1lb3V0ID4gMCkgew0KKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDAp Ow0KKwkJbGlua190cmFpbmluZ19zdGF0ZSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0xJTktf VFJBSU5fU1RTKTsNCisNCisJCWlmIChsaW5rX3RyYWluaW5nX3N0YXRlID4gMCAmJg0KKwkJICAg IChsaW5rX3RyYWluaW5nX3N0YXRlICYgTElOS19TVEFURV9OT1JQKSkgew0KKwkJCXN0YXRlID0g dHJ1ZTsNCisJCQlnb3RvIHVubG9jazsNCisJCX0NCisNCisJCXRpbWVvdXQtLTsNCisJfQ0KK3Vu bG9jazoNCisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPmF1eF9sb2NrKTsNCisNCisJcmV0dXJuIHN0 YXRlOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9kcm1fZHBfbGlua19jb25maWd1cmUoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJdTggdmFsdWVzWzJdOw0KKwlpbnQgZXJyOw0KKwlz dHJ1Y3QgZHJtX2RwX2F1eCAqYXV4ID0gJml0NjUwNS0+YXV4Ow0KKw0KKwl2YWx1ZXNbMF0gPSBp dDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlOw0KKwl2YWx1ZXNbMV0gPSBpdDY1MDUtPmxhbmVfY291 bnQ7DQorDQorCWlmIChpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFtZSkNCisJCXZhbHVlc1sx XSB8PSBEUF9MQU5FX0NPVU5UX0VOSEFOQ0VEX0ZSQU1FX0VOOw0KKw0KKwllcnIgPSBkcm1fZHBf ZHBjZF93cml0ZShhdXgsIERQX0xJTktfQldfU0VULCB2YWx1ZXMsIHNpemVvZih2YWx1ZXMpKTsN CisJaWYgKGVyciA8IDApDQorCQlyZXR1cm4gZXJyOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQor c3RhdGljIGJvb2wgaXQ2NTA1X2NoZWNrX3ZvbHRhZ2Vfc3dpbmdfbWF4KHU4IGxhbmVfdm9sdGFn ZV9zd2luZ19wcmVfZW1waGFzaXMpDQorew0KKwlyZXR1cm4gKChsYW5lX3ZvbHRhZ2Vfc3dpbmdf cHJlX2VtcGhhc2lzICYgMHgwMykgPT0gTUFYX0NSX0xFVkVMKTsNCit9DQorDQorc3RhdGljIGJv b2wgaXQ2NTA1X2NoZWNrX3ByZV9lbXBoYXNpc19tYXgodTggbGFuZV92b2x0YWdlX3N3aW5nX3By ZV9lbXBoYXNpcykNCit7DQorCXJldHVybiAoKGxhbmVfdm9sdGFnZV9zd2luZ19wcmVfZW1waGFz aXMgJiAweDAzKSA9PSBNQVhfRVFfTEVWRUwpOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVf Y2hlY2tfbWF4X3ZvbHRhZ2Vfc3dpbmdfcmVhY2hlZCh1OCAqbGFuZV92b2x0YWdlX3N3aW5nLA0K KwkJCQkJCSAgIHU4IGxhbmVfY291bnQpDQorew0KKwl1OCBpOw0KKw0KKwlmb3IgKGkgPSAwOyBp IDwgbGFuZV9jb3VudDsgaSsrKSB7DQorCQlpZiAobGFuZV92b2x0YWdlX3N3aW5nW2ldICYgRFBf VFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQpDQorCQkJcmV0dXJuIHRydWU7DQorCX0NCisNCisJcmV0 dXJuIGZhbHNlOw0KK30NCisNCitzdGF0aWMgYm9vbA0KK3N0ZXBfdHJhaW5fbGFuZV92b2x0YWdl X3BhcmFfc2V0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCisJCQkJIHN0cnVjdCBpdDY1MDVfc3Rl cF90cmFpbl9wYXJhDQorCQkJCSAqbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcywNCisJCQkJIHU4 ICpsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldCkNCit7DQorCXU4ICp2b2x0YWdlX3N3aW5n ID0gbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZzsNCisJdTggKnByZV9l bXBoYXNpcyA9IGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpczsNCisJdTgg aTsNCisNCisJZm9yIChpID0gMDsgaSA8IGl0NjUwNS0+bGFuZV9jb3VudDsgaSsrKSB7DQorCQl2 b2x0YWdlX3N3aW5nW2ldICY9IDB4MDM7DQorCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3Nl dFtpXSA9IHZvbHRhZ2Vfc3dpbmdbaV07DQorCQlpZiAoaXQ2NTA1X2NoZWNrX3ZvbHRhZ2Vfc3dp bmdfbWF4KHZvbHRhZ2Vfc3dpbmdbaV0pKQ0KKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNf c2V0W2ldIHw9DQorCQkJCURQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVEOw0KKw0KKwkJcHJlX2Vt cGhhc2lzW2ldICY9IDB4MDM7DQorCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSB8 PSBwcmVfZW1waGFzaXNbaV0NCisJCQk8PCBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7DQor CQlpZiAoaXQ2NTA1X2NoZWNrX3ByZV9lbXBoYXNpc19tYXgocHJlX2VtcGhhc2lzW2ldKSkNCisJ CQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSB8PQ0KKwkJCQlEUF9UUkFJTl9NQVhf UFJFX0VNUEhBU0lTX1JFQUNIRUQ7DQorCQlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RS QUlOSU5HX0xBTkUwX1NFVCArIGksDQorCQkJCSAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpc19z ZXRbaV0pOw0KKw0KKwkJaWYgKGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0W2ldICE9DQor CQkgICAgaXQ2NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX1RSQUlOSU5HX0xBTkUwX1NFVCArIGkp KQ0KKwkJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwlyZXR1cm4gdHJ1ZTsNCit9DQorDQorc3Rh dGljIGJvb2wNCitpdDY1MDVfc3RlcF9jcl90cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsDQor CQkgICAgIHN0cnVjdCBpdDY1MDVfc3RlcF90cmFpbl9wYXJhICpsYW5lX3ZvbHRhZ2VfcHJlX2Vt cGhhc2lzKQ0KK3sNCisJdTggbG9vcF9jb3VudCA9IDAsIGkgPSAwLCBqOw0KKwl1OCBsaW5rX3N0 YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSA9IHsgMCB9Ow0KKwl1OCBsYW5lX2xldmVsX2NvbmZp Z1tNQVhfTEFORV9DT1VOVF0gPSB7IDAgfTsNCisJaW50IHByZV9lbXBoYXNpc19hZGp1c3QgPSAt MSwgdm9sdGFnZV9zd2luZ19hZGp1c3QgPSAtMTsNCisJY29uc3Qgc3RydWN0IGRybV9kcF9hdXgg KmF1eCA9ICZpdDY1MDUtPmF1eDsNCisNCisJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9E T1dOU1BSRUFEX0NUUkwsDQorCQkJICBpdDY1MDUtPmVuYWJsZV9zc2MgPyBEUF9TUFJFQURfQU1Q XzBfNSA6IDB4MDApOw0KKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BB VFRFUk5fU0VULA0KKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl8xKTsNCisNCisJd2hpbGUgKGxv b3BfY291bnQgPCA1ICYmIGkgPCAxMCkgew0KKwkJaSsrOw0KKwkJaWYgKCFzdGVwX3RyYWluX2xh bmVfdm9sdGFnZV9wYXJhX3NldChpdDY1MDUsDQorCQkJCQkJICAgICAgbGFuZV92b2x0YWdlX3By ZV9lbXBoYXNpcywNCisJCQkJCQkgICAgICBsYW5lX2xldmVsX2NvbmZpZykpDQorCQkJY29udGlu dWU7DQorCQlkcm1fZHBfbGlua190cmFpbl9jbG9ja19yZWNvdmVyeV9kZWxheShhdXgsIGl0NjUw NS0+ZHBjZCk7DQorCQlkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwg bGlua19zdGF0dXMpOw0KKw0KKwkJaWYgKGRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhsaW5rX3N0 YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0KKwkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUs IFJFR19UUkFJTl9DVFJMMCwgRk9SQ0VfQ1JfRE9ORSwNCisJCQkJCUZPUkNFX0NSX0RPTkUpOw0K KwkJCXJldHVybiB0cnVlOw0KKwkJfQ0KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoJml0NjUwNS0+ Y2xpZW50LT5kZXYsICJjciBub3QgZG9uZSIpOw0KKw0KKwkJaWYgKGl0NjUwNV9jaGVja19tYXhf dm9sdGFnZV9zd2luZ19yZWFjaGVkKGxhbmVfbGV2ZWxfY29uZmlnLA0KKwkJCQkJCQkgICBpdDY1 MDUtPmxhbmVfY291bnQpKQ0KKwkJCWdvdG8gY3JfdHJhaW5fZmFpbDsNCisNCisJCWZvciAoaiA9 IDA7IGogPCBpdDY1MDUtPmxhbmVfY291bnQ7IGorKykgew0KKwkJCWxhbmVfdm9sdGFnZV9wcmVf ZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal0gPQ0KKwkJCQlkcm1fZHBfZ2V0X2FkanVzdF9yZXF1 ZXN0X3ZvbHRhZ2UobGlua19zdGF0dXMsDQorCQkJCQkJCQkgIGopID4+DQorCQkJCURQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfU0hJRlQ7DQorCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJl X2VtcGhhc2lzW2pdID0NCisJCQlkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNp cyhsaW5rX3N0YXR1cywNCisJCQkJCQkJICAgICAgIGopID4+DQorCQkJCQlEUF9UUkFJTl9QUkVf RU1QSEFTSVNfU0hJRlQ7DQorCQkJaWYgKHZvbHRhZ2Vfc3dpbmdfYWRqdXN0ID09DQorCQkJICAg ICBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5nW2pdICYmDQorCQkJICAg IHByZV9lbXBoYXNpc19hZGp1c3QgPT0NCisJCQkgICAgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFz aXMtPnByZV9lbXBoYXNpc1tqXSkgew0KKwkJCQlsb29wX2NvdW50Kys7DQorCQkJCWNvbnRpbnVl Ow0KKwkJCX0NCisNCisJCQl2b2x0YWdlX3N3aW5nX2FkanVzdCA9DQorCQkJCWxhbmVfdm9sdGFn ZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal07DQorCQkJcHJlX2VtcGhhc2lzX2FkanVz dCA9DQorCQkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tqXTsNCisJ CQlsb29wX2NvdW50ID0gMDsNCisNCisJCQlpZiAodm9sdGFnZV9zd2luZ19hZGp1c3QgKyBwcmVf ZW1waGFzaXNfYWRqdXN0ID4NCisJCQkgICAgTUFYX0VRX0xFVkVMKQ0KKwkJCQlsYW5lX3ZvbHRh Z2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5nW2pdID0NCisJCQkJCU1BWF9FUV9MRVZFTCAt DQorCQkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzDQorCQkJCQkJLT5wcmVfZW1waGFzaXNb al07DQorCQl9DQorCX0NCisNCitjcl90cmFpbl9mYWlsOg0KKwlpdDY1MDVfZHBjZF93cml0ZShp dDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULA0KKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVS Tl9ESVNBQkxFKTsNCisNCisJcmV0dXJuIGZhbHNlOw0KK30NCisNCitzdGF0aWMgYm9vbA0KK2l0 NjUwNV9zdGVwX2VxX3RyYWluKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCisJCSAgICAgc3RydWN0 IGl0NjUwNV9zdGVwX3RyYWluX3BhcmEgKmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpDQorew0K Kwl1OCBsb29wX2NvdW50ID0gMCwgaSwgbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0g PSB7IDAgfTsNCisJdTggbGFuZV9sZXZlbF9jb25maWdbTUFYX0xBTkVfQ09VTlRdID0geyAwIH07 DQorCWNvbnN0IHN0cnVjdCBkcm1fZHBfYXV4ICphdXggPSAmaXQ2NTA1LT5hdXg7DQorDQorCWl0 NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsDQorCQkJICBE UF9UUkFJTklOR19QQVRURVJOXzIpOw0KKw0KKwl3aGlsZSAobG9vcF9jb3VudCA8IDYpIHsNCisJ CWxvb3BfY291bnQrKzsNCisNCisJCWlmICghc3RlcF90cmFpbl9sYW5lX3ZvbHRhZ2VfcGFyYV9z ZXQoaXQ2NTA1LA0KKwkJCQkJCSAgICAgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMsDQorCQkJ CQkJICAgICAgbGFuZV9sZXZlbF9jb25maWcpKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJZHJtX2Rw X2xpbmtfdHJhaW5fY2hhbm5lbF9lcV9kZWxheShhdXgsIGl0NjUwNS0+ZHBjZCk7DQorCQlkcm1f ZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwgbGlua19zdGF0dXMpOw0KKw0K KwkJaWYgKCFkcm1fZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGl0NjUwNS0+bGFu ZV9jb3VudCkpDQorCQkJZ290byBlcV90cmFpbl9mYWlsOw0KKw0KKwkJaWYgKGRybV9kcF9jaGFu bmVsX2VxX29rKGxpbmtfc3RhdHVzLCBpdDY1MDUtPmxhbmVfY291bnQpKSB7DQorCQkJaXQ2NTA1 X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwNCisJCQkJCSAgRFBf VFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsNCisJCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBS RUdfVFJBSU5fQ1RSTDAsIEZPUkNFX0VRX0RPTkUsDQorCQkJCQlGT1JDRV9FUV9ET05FKTsNCisJ CQlyZXR1cm4gdHJ1ZTsNCisJCX0NCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKCZpdDY1MDUtPmNs aWVudC0+ZGV2LCAiZXEgbm90IGRvbmUiKTsNCisNCisJCWZvciAoaSA9IDA7IGkgPCBpdDY1MDUt PmxhbmVfY291bnQ7IGkrKykgew0KKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRh Z2Vfc3dpbmdbaV0gPQ0KKwkJCQlkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ZvbHRhZ2UobGlu a19zdGF0dXMsDQorCQkJCQkJCQkgIGkpID4+DQorCQkJCURQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf U0hJRlQ7DQorCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldID0N CisJCQlkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNpcyhsaW5rX3N0YXR1cywN CisJCQkJCQkJICAgICAgIGkpID4+DQorCQkJCQlEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7 DQorDQorCQkJaWYgKGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbaV0g Kw0KKwkJCQkgICAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldID4N CisJCQkgICAgTUFYX0VRX0xFVkVMKQ0KKwkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52 b2x0YWdlX3N3aW5nW2ldID0NCisJCQkJCTB4MDMgLSBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lz DQorCQkJCQkJICAgICAgIC0+cHJlX2VtcGhhc2lzW2ldOw0KKwkJfQ0KKwl9DQorDQorZXFfdHJh aW5fZmFpbDoNCisJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJO X1NFVCwNCisJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7DQorCXJldHVybiBmYWxz ZTsNCit9DQorDQorc3RhdGljIGJvb2wgaXQ2NTA1X2xpbmtfc3RhcnRfc3RlcF90cmFpbihzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpbnQgZXJyOw0KKwlzdHJ1Y3QgaXQ2NTA1X3N0ZXBf dHJhaW5fcGFyYSBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzID0gew0KKwkJLnZvbHRhZ2Vfc3dp bmcgPSB7IDAgfSwNCisJCS5wcmVfZW1waGFzaXMgPSB7IDAgfSwNCisJfTsNCisNCisJRFJNX0RF Vl9ERUJVR19EUklWRVIoJml0NjUwNS0+Y2xpZW50LT5kZXYsICJzdGFydCIpOw0KKwllcnIgPSBp dDY1MDVfZHJtX2RwX2xpbmtfY29uZmlndXJlKGl0NjUwNSk7DQorDQorCWlmIChlcnIgPCAwKQ0K KwkJcmV0dXJuIGZhbHNlOw0KKwlpZiAoIWl0NjUwNV9zdGVwX2NyX3RyYWluKGl0NjUwNSwgJmxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKwlpZiAoIWl0NjUw NV9zdGVwX2VxX3RyYWluKGl0NjUwNSwgJmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpKQ0KKwkJ cmV0dXJuIGZhbHNlOw0KKwlyZXR1cm4gdHJ1ZTsNCit9DQorDQorc3RhdGljIGJvb2wgaXQ2NTA1 X2dldF92aWRlb19zdGF0dXMoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaW50IHJlZ18w ZDsNCisNCisJcmVnXzBkID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfU1lTVEVNX1NUUyk7DQor DQorCWlmIChyZWdfMGQgPCAwKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKw0KKwlyZXR1cm4gcmVnXzBk ICYgVklERU9fU1RCOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfcmVzZXRfaGRjcChzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpdDY1MDUtPmhkY3Bfc3RhdHVzID0gSERDUF9BVVRI X0lETEU7DQorCS8qIERpc2FibGUgQ1BfRGVzaXJlZCAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfSERDUF9DVFJMMSwgSERDUF9DUF9FTkFCTEUsIDB4MDApOw0KKwlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgSERDUF9SRVNFVCwgSERDUF9SRVNFVCk7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9zdGFydF9oZGNwKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0K KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCIpOw0KKwlpdDY1MDVfcmVzZXRfaGRj cChpdDY1MDUpOw0KKwlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3dxLCAmaXQ2NTA1LT5oZGNw X3dvcmssDQorCQkJICAgbXNlY3NfdG9famlmZmllcygyNDAwKSk7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIGl0NjUwNV9zdG9wX2hkY3Aoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1 X3Jlc2V0X2hkY3AoaXQ2NTA1KTsNCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmaXQ2NTA1LT5oZGNw X3dvcmspOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVfaGRjcF9pc19rc3ZfdmFsaWQodTgg KmtzdikNCit7DQorCWludCBpLCBvbmVzID0gMDsNCisNCisJLyogS1NWIGhhcyAyMCAxJ3MgYW5k IDIwIDAncyAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgRFJNX0hEQ1BfS1NWX0xFTjsgaSsrKQ0KKwkJ b25lcyArPSBod2VpZ2h0OChrc3ZbaV0pOw0KKwlpZiAob25lcyAhPSAyMCkNCisJCXJldHVybiBm YWxzZTsNCisJcmV0dXJuIHRydWU7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9oZGNwX3Bh cnQxX2F1dGgoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCXU4IGhkY3BfYmNhcHM7DQorDQorCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBIRENQX1JFU0VULCAweDAwKTsNCisJLyog RGlzYWJsZSBDUF9EZXNpcmVkICovDQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQ X0NUUkwxLCBIRENQX0NQX0VOQUJMRSwgMHgwMCk7DQorDQorCXVzbGVlcF9yYW5nZSgxMDAwLCAx NTAwKTsNCisJaGRjcF9iY2FwcyA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9BVVhfSERD UF9CQ0FQUyk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkRQQ0RbMHg2ODAyOF06IDB4 JTAyeCIsDQorCQkJICAgICBoZGNwX2JjYXBzKTsNCisNCisJaWYgKCFoZGNwX2JjYXBzKQ0KKwkJ cmV0dXJuOw0KKw0KKwkvKiBjbGVhciB0aGUgcmVwZWF0ZXIgTGlzdCBDaGsgRG9uZSBhbmQgZmFp bCBiaXQgKi8NCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwNCisJ CQlIRENQX1RSSUdHRVJfS1NWX0RPTkUgfCBIRENQX1RSSUdHRVJfS1NWX0ZBSUwsDQorCQkJMHgw MCk7DQorDQorCS8qIEVuYWJsZSBBbiBHZW5lcmF0b3IgKi8NCisJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhEQ1BfQU5fR0VOLCBIRENQX0FOX0dFTik7DQorCS8qIGRl bGF5MW1zKDEwKTsqLw0KKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAwKTsNCisJLyogU3RvcCBB biBHZW5lcmF0b3IgKi8NCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIs IEhEQ1BfQU5fR0VOLCAweDAwKTsNCisNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hE Q1BfQ1RSTDEsIEhEQ1BfQ1BfRU5BQkxFLCBIRENQX0NQX0VOQUJMRSk7DQorDQorCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsIEhEQ1BfVFJJR0dFUl9TVEFSVCwNCisJ CQlIRENQX1RSSUdHRVJfU1RBUlQpOw0KKw0KKwlpdDY1MDUtPmhkY3Bfc3RhdHVzID0gSERDUF9B VVRIX0dPSU5HOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9zaGExX2RpZ2VzdChzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUsIHU4ICpzaGExX2lucHV0LA0KKwkJCSAgICAgIHVuc2lnbmVkIGludCBz aXplLCB1OCAqb3V0cHV0X2F2KQ0KK3sNCisJc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2M7DQorCXN0 cnVjdCBjcnlwdG9fc2hhc2ggKnRmbTsNCisJaW50IGVycjsNCisJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCXRmbSA9IGNyeXB0b19hbGxvY19zaGFzaCgi c2hhMSIsIDAsIDApOw0KKwlpZiAoSVNfRVJSKHRmbSkpIHsNCisJCWRldl9lcnIoZGV2LCAiY3J5 cHRvX2FsbG9jX3NoYXNoIHNoYTEgZmFpbGVkIik7DQorCQlyZXR1cm4gUFRSX0VSUih0Zm0pOw0K Kwl9DQorCWRlc2MgPSBremFsbG9jKHNpemVvZigqZGVzYykgKyBjcnlwdG9fc2hhc2hfZGVzY3Np emUodGZtKSwgR0ZQX0tFUk5FTCk7DQorCWlmICghZGVzYykgew0KKwkJY3J5cHRvX2ZyZWVfc2hh c2godGZtKTsNCisJCXJldHVybiAtRU5PTUVNOw0KKwl9DQorDQorCWRlc2MtPnRmbSA9IHRmbTsN CisJZXJyID0gY3J5cHRvX3NoYXNoX2RpZ2VzdChkZXNjLCBzaGExX2lucHV0LCBzaXplLCBvdXRw dXRfYXYpOw0KKwlpZiAoZXJyKQ0KKwkJZGV2X2VycihkZXYsICJjcnlwdG9fc2hhc2hfZGlnZXN0 IHNoYTEgZmFpbGVkIik7DQorDQorCWNyeXB0b19mcmVlX3NoYXNoKHRmbSk7DQorCWtmcmVlKGRl c2MpOw0KKwlyZXR1cm4gZXJyOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9zZXR1cF9zaGEx X2lucHV0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdTggKnNoYTFfaW5wdXQpDQorew0KKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJdTggYmluZm9bMl07DQor CWludCBkb3duX3N0cmVhbV9jb3VudCwgaSwgZXJyLCBtc2dfY291bnQgPSAwOw0KKw0KKwllcnIg PSBpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9BVVhfSERDUF9CSU5GTywgYmluZm8sDQorCQkJ ICAgICAgQVJSQVlfU0laRShiaW5mbykpOw0KKw0KKwlpZiAoZXJyIDwgMCkgew0KKwkJZGV2X2Vy cihkZXYsICJSZWFkIGJpbmZvIHZhbHVlIEZhaWwiKTsNCisJCXJldHVybiBlcnI7DQorCX0NCisN CisJZG93bl9zdHJlYW1fY291bnQgPSBiaW5mb1swXSAmIDB4N0Y7DQorCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgImJpbmZvOjB4JSpwaCIsIChpbnQpQVJSQVlfU0laRShiaW5mbyksDQorCQkJ ICAgICBiaW5mbyk7DQorDQorCWlmICgoYmluZm9bMF0gJiBCSVQoNykpIHx8IChiaW5mb1sxXSAm IEJJVCgzKSkpIHsNCisJCWRldl9lcnIoZGV2LCAiSERDUCBtYXggY2FzY2FkZSBkZXZpY2UgZXhj ZWVkIik7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwlpZiAoIWRvd25fc3RyZWFtX2NvdW50IHx8 DQorCSAgICBkb3duX3N0cmVhbV9jb3VudCA+IE1BWF9IRENQX0RPV05fU1RSRUFNX0NPVU5UKSB7 DQorCQlkZXZfZXJyKGRldiwgIkhEQ1AgZG93biBzdHJlYW0gY291bnQgRXJyb3IgJWQiLA0KKwkJ CWRvd25fc3RyZWFtX2NvdW50KTsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCWZvciAoaSA9IDA7 IGkgPCBkb3duX3N0cmVhbV9jb3VudDsgaSsrKSB7DQorCQllcnIgPSBpdDY1MDVfZ2V0X2RwY2Qo aXQ2NTA1LCBEUF9BVVhfSERDUF9LU1ZfRklGTyArDQorCQkJCSAgICAgIChpICUgMykgKiBEUk1f SERDUF9LU1ZfTEVOLA0KKwkJCQkgICAgICBzaGExX2lucHV0ICsgbXNnX2NvdW50LA0KKwkJCQkg ICAgICBEUk1fSERDUF9LU1ZfTEVOKTsNCisNCisJCWlmIChlcnIgPCAwKQ0KKwkJCXJldHVybiBl cnI7DQorDQorCQltc2dfY291bnQgKz0gNTsNCisJfQ0KKw0KKwlpdDY1MDUtPmhkY3BfZG93bl9z dHJlYW1fY291bnQgPSBkb3duX3N0cmVhbV9jb3VudDsNCisJc2hhMV9pbnB1dFttc2dfY291bnQr K10gPSBiaW5mb1swXTsNCisJc2hhMV9pbnB1dFttc2dfY291bnQrK10gPSBiaW5mb1sxXTsNCisN CisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhEQ1BfRU5fTTBfUkVB RCwNCisJCQlIRENQX0VOX00wX1JFQUQpOw0KKw0KKwllcnIgPSByZWdtYXBfYnVsa19yZWFkKGl0 NjUwNS0+cmVnbWFwLCBSRUdfTTBfMF83LA0KKwkJCSAgICAgICBzaGExX2lucHV0ICsgbXNnX2Nv dW50LCA4KTsNCisNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhE Q1BfRU5fTTBfUkVBRCwgMHgwMCk7DQorDQorCWlmIChlcnIgPCAwKSB7DQorCQlkZXZfZXJyKGRl diwgIiBXYXJuaW5nLCBSZWFkIE0gdmFsdWUgRmFpbCIpOw0KKwkJcmV0dXJuIGVycjsNCisJfQ0K Kw0KKwltc2dfY291bnQgKz0gODsNCisNCisJcmV0dXJuIG1zZ19jb3VudDsNCit9DQorDQorc3Rh dGljIGJvb2wgaXQ2NTA1X2hkY3BfcGFydDJfa3N2bGlzdF9jaGVjayhzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsN CisJdTggYXZbNV1bNF0sIGJ2WzVdWzRdOw0KKwlpbnQgaSwgZXJyOw0KKw0KKwlpID0gaXQ2NTA1 X3NldHVwX3NoYTFfaW5wdXQoaXQ2NTA1LCBpdDY1MDUtPnNoYTFfaW5wdXQpOw0KKwlpZiAoaSA8 PSAwKSB7DQorCQlkZXZfZXJyKGRldiwgIlNIQS0xIElucHV0IGxlbmd0aCBlcnJvciAlZCIsIGkp Ow0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCWl0NjUwNV9zaGExX2RpZ2VzdChpdDY1MDUs IGl0NjUwNS0+c2hhMV9pbnB1dCwgaSwgKHU4ICopYXYpOw0KKw0KKwllcnIgPSBpdDY1MDVfZ2V0 X2RwY2QoaXQ2NTA1LCBEUF9BVVhfSERDUF9WX1BSSU1FKDApLCAodTggKilidiwNCisJCQkgICAg ICBzaXplb2YoYnYpKTsNCisNCisJaWYgKGVyciA8IDApIHsNCisJCWRldl9lcnIoZGV2LCAiUmVh ZCBWJyB2YWx1ZSBGYWlsIik7DQorCQlyZXR1cm4gZmFsc2U7DQorCX0NCisNCisJZm9yIChpID0g MDsgaSA8IDU7IGkrKykNCisJCWlmIChidltpXVszXSAhPSBhdltpXVswXSB8fCBidltpXVsyXSAh PSBhdltpXVsxXSB8fA0KKwkJICAgIGJ2W2ldWzFdICE9IGF2W2ldWzJdIHx8IGJ2W2ldWzBdICE9 IGF2W2ldWzNdKQ0KKwkJCXJldHVybiBmYWxzZTsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAiVicgYWxsIG1hdGNoISEiKTsNCisJcmV0dXJuIHRydWU7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIGl0NjUwNV9oZGNwX3dhaXRfa3N2X2xpc3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0K K3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBp dDY1MDUsDQorCQkJCQkgICAgIGhkY3Bfd2FpdF9rc3ZfbGlzdCk7DQorCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwl1bnNpZ25lZCBpbnQgdGltZW91dCA9IDUw MDA7DQorCXU4IGJzdGF0dXMgPSAwOw0KKwlib29sIGtzdl9saXN0X2NoZWNrOw0KKw0KKwl0aW1l b3V0IC89IDIwOw0KKwl3aGlsZSAodGltZW91dCA+IDApIHsNCisJCWlmICghaXQ2NTA1X2dldF9z aW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkNCisJCQlyZXR1cm47DQorDQorCQlic3RhdHVzID0gaXQ2 NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX0FVWF9IRENQX0JTVEFUVVMpOw0KKw0KKwkJaWYgKGJz dGF0dXMgJiBEUF9CU1RBVFVTX1JFQURZKQ0KKwkJCWJyZWFrOw0KKw0KKwkJbXNsZWVwKDIwKTsN CisJCXRpbWVvdXQtLTsNCisJfQ0KKw0KKwlpZiAodGltZW91dCA9PSAwKSB7DQorCQlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJ0aW1lb3V0IGFuZCBrc3YgbGlzdCB3YWl0IGZhaWxlZCIpOw0K KwkJZ290byB0aW1lb3V0Ow0KKwl9DQorDQorCWtzdl9saXN0X2NoZWNrID0gaXQ2NTA1X2hkY3Bf cGFydDJfa3N2bGlzdF9jaGVjayhpdDY1MDUpOw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJrc3YgbGlzdCByZWFkeSwga3N2IGxpc3QgY2hlY2sgJXMiLA0KKwkJCSAgICAga3N2X2xpc3Rf Y2hlY2sgPyAicGFzcyIgOiAiZmFpbCIpOw0KKwlpZiAoa3N2X2xpc3RfY2hlY2spIHsNCisJCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsDQorCQkJCUhEQ1BfVFJJR0dF Ul9LU1ZfRE9ORSwgSERDUF9UUklHR0VSX0tTVl9ET05FKTsNCisJCXJldHVybjsNCisJfQ0KK3Rp bWVvdXQ6DQorCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsDQorCQkJ SERDUF9UUklHR0VSX0tTVl9ET05FIHwgSERDUF9UUklHR0VSX0tTVl9GQUlMLA0KKwkJCUhEQ1Bf VFJJR0dFUl9LU1ZfRE9ORSB8IEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCk7DQorfQ0KKw0KK3N0YXRp YyB2b2lkIGl0NjUwNV9oZGNwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJ c3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY1MDUs DQorCQkJCQkgICAgIGhkY3Bfd29yay53b3JrKTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0 NjUwNS0+Y2xpZW50LT5kZXY7DQorCWludCByZXQ7DQorCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktf U1RBVFVTX1NJWkVdID0geyAwIH07DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0 YXJ0Iik7DQorDQorCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkNCisJ CXJldHVybjsNCisNCisJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZF9saW5rX3N0YXR1cygmaXQ2NTA1 LT5hdXgsIGxpbmtfc3RhdHVzKTsNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicmV0OiAl ZCBsaW5rX3N0YXR1czogJSpwaCIsIHJldCwNCisJCQkgICAgIChpbnQpc2l6ZW9mKGxpbmtfc3Rh dHVzKSwgbGlua19zdGF0dXMpOw0KKw0KKwlpZiAocmV0IDwgMCB8fCAhZHJtX2RwX2NoYW5uZWxf ZXFfb2sobGlua19zdGF0dXMsIGl0NjUwNS0+bGFuZV9jb3VudCkgfHwNCisJICAgICFpdDY1MDVf Z2V0X3ZpZGVvX3N0YXR1cyhpdDY1MDUpKSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJsaW5rIHRyYWluIG5vdCBkb25lIG9yIG5vIHZpZGVvIik7DQorCQlyZXR1cm47DQorCX0NCisN CisJcmV0ID0gaXQ2NTA1X2dldF9kcGNkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfQktTViwgaXQ2NTA1 LT5ia3N2cywNCisJCQkgICAgICBBUlJBWV9TSVpFKGl0NjUwNS0+YmtzdnMpKTsNCisJaWYgKHJl dCA8IDApIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBnZXQgYmtzdiAgcmV0OiAlZCIsIHJl dCk7DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9UUklHR0VSLA0KKwkJCQlI RENQX1RSSUdHRVJfS1NWX0ZBSUwsIEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCk7DQorCX0NCisNCisJ RFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmtzdiA9IDB4JSpwaCIsDQorCQkJICAgICAoaW50 KUFSUkFZX1NJWkUoaXQ2NTA1LT5ia3N2cyksIGl0NjUwNS0+YmtzdnMpOw0KKw0KKwlpZiAoIWl0 NjUwNV9oZGNwX2lzX2tzdl92YWxpZChpdDY1MDUtPmJrc3ZzKSkgew0KKwkJZGV2X2VycihkZXYs ICJEaXNwbGF5IFBvcnQgYmtzdiBub3QgdmFsaWQiKTsNCisJCWl0NjUwNV9zZXRfYml0cyhpdDY1 MDUsIFJFR19IRENQX1RSSUdHRVIsDQorCQkJCUhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwgSERDUF9U UklHR0VSX0tTVl9GQUlMKTsNCisJfQ0KKw0KKwlpdDY1MDVfaGRjcF9wYXJ0MV9hdXRoKGl0NjUw NSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9zaG93X2hkY3BfaW5mbyhzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsNCisJaW50IGk7DQorCXU4ICpzaGExID0gaXQ2NTA1LT5zaGExX2lucHV0Ow0KKw0KKwlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoZGNwX3N0YXR1czogJWQgaXNfcmVwZWF0ZXI6ICVk IiwNCisJCQkgICAgIGl0NjUwNS0+aGRjcF9zdGF0dXMsIGl0NjUwNS0+aXNfcmVwZWF0ZXIpOw0K KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJia3N2ID0gMHglKnBoIiwNCisJCQkgICAgIChp bnQpQVJSQVlfU0laRShpdDY1MDUtPmJrc3ZzKSwgaXQ2NTA1LT5ia3N2cyk7DQorDQorCWlmIChp dDY1MDUtPmlzX3JlcGVhdGVyKSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoZGNw X2Rvd25fc3RyZWFtX2NvdW50OiAlZCIsDQorCQkJCSAgICAgaXQ2NTA1LT5oZGNwX2Rvd25fc3Ry ZWFtX2NvdW50KTsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInNoYTFfaW5wdXQ6IDB4 JSpwaCIsDQorCQkJCSAgICAgKGludClBUlJBWV9TSVpFKGl0NjUwNS0+c2hhMV9pbnB1dCksDQor CQkJCSAgICAgaXQ2NTA1LT5zaGExX2lucHV0KTsNCisJCWZvciAoaSA9IDA7IGkgPCBpdDY1MDUt PmhkY3BfZG93bl9zdHJlYW1fY291bnQ7IGkrKykgew0KKwkJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIktTVl8lZCA9IDB4JSpwaCIsIGksDQorCQkJCQkgICAgIERSTV9IRENQX0tTVl9MRU4s IHNoYTEpOw0KKwkJCXNoYTEgKz0gRFJNX0hEQ1BfS1NWX0xFTjsNCisJCX0NCisJCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwgImJpbmZvOiAweCUycGggTTA6IDB4JThwaCIsDQorCQkJCSAgICAg c2hhMSwgc2hhMSArIDIpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9zdG9wX2xp bmtfdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJaXQ2NTA1LT5saW5rX3N0YXRl ID0gTElOS19JRExFOw0KKwljYW5jZWxfd29ya19zeW5jKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0K KwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDEsIEZPUkNFX1JFVFJBSU4pOw0K K30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfbGlua190cmFpbl9vayhzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsN CisNCisJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElOS19PSzsNCisJLyogZGlzYWxiZSBtdXRlIGVu YWJsZSBhdmkgaW5mbyBmcmFtZSAqLw0KKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFU QV9NVVRFX0NUUkwsIEVOX1ZJRF9NVVRFLCAweDAwKTsNCisJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0lORk9GUkFNRV9DVFJMLA0KKwkJCUVOX1ZJRF9DVFJMX1BLVCwgRU5fVklEX0NUUkxf UEtUKTsNCisNCisJaWYgKGl0NjUwNV9hdWRpb19pbnB1dChpdDY1MDUpKSB7DQorCQlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJFbmFibGUgYXVkaW8hIik7DQorCQlpdDY1MDVfZW5hYmxlX2F1 ZGlvKGl0NjUwNSk7DQorCX0NCisNCisJaWYgKGl0NjUwNS0+aGRjcF9kZXNpcmVkKQ0KKwkJaXQ2 NTA1X3N0YXJ0X2hkY3AoaXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtf c3RlcF90cmFpbl9wcm9jZXNzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlpbnQgcmV0LCBpLCBzdGVwX3Jl dHJ5ID0gMzsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU3RhcnQgc3RlcCB0cmFp biIpOw0KKw0KKwlpZiAoaXQ2NTA1LT5zaW5rX2NvdW50ID09IDApIHsNCisJCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19jb3VudDolZCwgZm9yY2UgZXEiLA0KKwkJCQkg ICAgIGl0NjUwNS0+c2lua19jb3VudCk7DQorCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LAlSRUdf VFJBSU5fQ1RSTDAsIEZPUkNFX0VRX0RPTkUsDQorCQkJCUZPUkNFX0VRX0RPTkUpOw0KKwkJcmV0 dXJuOw0KKwl9DQorDQorCWlmICghaXQ2NTA1LT5zdGVwX3RyYWluKSB7DQorCQlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJub3Qgc3VwcG9ydCBzdGVwIHRyYWluIik7DQorCQlyZXR1cm47DQor CX0NCisNCisJLyogc3RlcCB0cmFpbmluZyBzdGFydCBoZXJlICovDQorCWZvciAoaSA9IDA7IGkg PCBzdGVwX3JldHJ5OyBpKyspIHsNCisJCWl0NjUwNV9saW5rX3Jlc2V0X3N0ZXBfdHJhaW4oaXQ2 NTA1KTsNCisJCXJldCA9IGl0NjUwNV9saW5rX3N0YXJ0X3N0ZXBfdHJhaW4oaXQ2NTA1KTsNCisJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0ZXAgdHJhaW4gJXMsIHJldHJ5OiVkIHRpbWVz IiwNCisJCQkJICAgICByZXQgPyAicGFzcyIgOiAiZmFpbGVkIiwgaSArIDEpOw0KKwkJaWYgKHJl dCkgew0KKwkJCWl0NjUwNV9saW5rX3RyYWluX29rKGl0NjUwNSk7DQorCQkJcmV0dXJuOw0KKwkJ fQ0KKwl9DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInRyYWluaW5nIGZhaWwiKTsN CisJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElOS19JRExFOw0KKwlpdDY1MDVfdmlkZW9fcmVzZXQo aXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtfdHJhaW5pbmdfd29yayhz dHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBj b250YWluZXJfb2Yod29yaywgc3RydWN0IGl0NjUwNSwgbGlua193b3Jrcyk7DQorCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlpbnQgcmV0Ow0KKw0KKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJpdDY1MDUtPnNpbmtfY291bnQ6ICVkIiwNCisJCQkgICAg IGl0NjUwNS0+c2lua19jb3VudCk7DQorDQorCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0 dXMoaXQ2NTA1KSkNCisJCXJldHVybjsNCisNCisJaXQ2NTA1X2xpbmtfdHJhaW5pbmdfc2V0dXAo aXQ2NTA1KTsNCisJaXQ2NTA1X3Jlc2V0X2hkY3AoaXQ2NTA1KTsNCisJaXQ2NTA1X2F1eF9yZXNl dChpdDY1MDUpOw0KKw0KKwlpZiAoaXQ2NTA1LT5hdXRvX3RyYWluX3JldHJ5IDwgMSkgew0KKwkJ aXQ2NTA1X2xpbmtfc3RlcF90cmFpbl9wcm9jZXNzKGl0NjUwNSk7DQorCQlyZXR1cm47DQorCX0N CisNCisJcmV0ID0gaXQ2NTA1X2xpbmtfc3RhcnRfYXV0b190cmFpbihpdDY1MDUpOw0KKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJhdXRvIHRyYWluICVzLCBhdXRvX3RyYWluX3JldHJ5OiAl ZCIsDQorCQkJICAgICByZXQgPyAicGFzcyIgOiAiZmFpbGVkIiwgaXQ2NTA1LT5hdXRvX3RyYWlu X3JldHJ5KTsNCisJaXQ2NTA1LT5hdXRvX3RyYWluX3JldHJ5LS07DQorDQorCWlmIChyZXQpIHsN CisJCWl0NjUwNV9saW5rX3RyYWluX29rKGl0NjUwNSk7DQorCQlyZXR1cm47DQorCX0NCisNCisJ aXQ2NTA1X2R1bXAoaXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X3BsdWdnZWRf c3RhdHVzX3RvX2NvZGVjKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCWVudW0gZHJtX2Nv bm5lY3Rvcl9zdGF0dXMgc3RhdHVzID0gaXQ2NTA1LT5jb25uZWN0b3Jfc3RhdHVzOw0KKw0KKwlp ZiAoaXQ2NTA1LT5wbHVnZ2VkX2NiICYmIGl0NjUwNS0+Y29kZWNfZGV2KQ0KKwkJaXQ2NTA1LT5w bHVnZ2VkX2NiKGl0NjUwNS0+Y29kZWNfZGV2LA0KKwkJCQkgICBzdGF0dXMgPT0gY29ubmVjdG9y X3N0YXR1c19jb25uZWN0ZWQpOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9wcm9jZXNzX2hw ZF9pcnEoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0g Jml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCWludCByZXQsIGRwY2Rfc2lua19jb3VudCwgZHBfaXJx X3ZlY3RvciwgYnN0YXR1czsNCisJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07 DQorDQorCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkgew0KKwkJRFJN X0RFVl9ERUJVR19EUklWRVIoZGV2LCAiSFBEX0lSUSBIUEQgbG93Iik7DQorCQlpdDY1MDUtPnNp bmtfY291bnQgPSAwOw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJcmV0ID0gaXQ2NTA1X2RwY2Rf cmVhZChpdDY1MDUsIERQX1NJTktfQ09VTlQpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiBy ZXQ7DQorDQorCWRwY2Rfc2lua19jb3VudCA9IERQX0dFVF9TSU5LX0NPVU5UKHJldCk7DQorCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImRwY2Rfc2lua19jb3VudDogJWQgaXQ2NTA1LT5zaW5r X2NvdW50OiVkIiwNCisJCQkgICAgIGRwY2Rfc2lua19jb3VudCwgaXQ2NTA1LT5zaW5rX2NvdW50 KTsNCisNCisJaWYgKGl0NjUwNS0+YnJhbmNoX2RldmljZSAmJiBkcGNkX3NpbmtfY291bnQgIT0g aXQ2NTA1LT5zaW5rX2NvdW50KSB7DQorCQltZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBzaXplb2Yo aXQ2NTA1LT5kcGNkKSk7DQorCQlpdDY1MDUtPnNpbmtfY291bnQgPSBkcGNkX3NpbmtfY291bnQ7 DQorCQlpdDY1MDVfcmVzZXRfbG9naWMoaXQ2NTA1KTsNCisJCWl0NjUwNV9pbnRfbWFza19lbmFi bGUoaXQ2NTA1KTsNCisJCWl0NjUwNV9pbml0KGl0NjUwNSk7DQorCQlyZXR1cm4gMDsNCisJfQ0K Kw0KKwlkcF9pcnFfdmVjdG9yID0gaXQ2NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX0RFVklDRV9T RVJWSUNFX0lSUV9WRUNUT1IpOw0KKwlpZiAoZHBfaXJxX3ZlY3RvciA8IDApDQorCQlyZXR1cm4g ZHBfaXJxX3ZlY3RvcjsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiZHBfaXJxX3Zl Y3RvciA9IDB4JTAyeCIsIGRwX2lycV92ZWN0b3IpOw0KKw0KKwlpZiAoZHBfaXJxX3ZlY3RvciAm IERQX0NQX0lSUSkgew0KKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dF UiwgSERDUF9UUklHR0VSX0NQSVJRLA0KKwkJCQlIRENQX1RSSUdHRVJfQ1BJUlEpOw0KKw0KKwkJ YnN0YXR1cyA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9BVVhfSERDUF9CU1RBVFVTKTsN CisJCWlmIChic3RhdHVzIDwgMCkNCisJCQlyZXR1cm4gYnN0YXR1czsNCisNCisJCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwgIkJzdGF0dXMgPSAweCUwMngiLCBic3RhdHVzKTsNCisJfQ0KKw0K KwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwgbGlua19z dGF0dXMpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJGYWlsIHRvIHJlYWQg bGluayBzdGF0dXMgcmV0OiAlZCIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImxpbmsgc3RhdHVzID0gMHglKnBoIiwNCisJCQkgICAg IChpbnQpQVJSQVlfU0laRShsaW5rX3N0YXR1cyksIGxpbmtfc3RhdHVzKTsNCisNCisJaWYgKCFk cm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0K KwkJaXQ2NTA1LT5hdXRvX3RyYWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCisJCWl0NjUw NV92aWRlb19yZXNldChpdDY1MDUpOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgdm9pZCBpdDY1MDVfaXJxX2hwZChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJaXQ2NTA1LT5ocGRf c3RhdGUgPSBpdDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpOw0KKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJocGQgY2hhbmdlIGludGVycnVwdCwgY2hhbmdlIHRvICVzIiwNCisJ CQkgICAgIGl0NjUwNS0+aHBkX3N0YXRlID8gImhpZ2giIDogImxvdyIpOw0KKw0KKwlpZiAoaXQ2 NTA1LT5icmlkZ2UuZGV2KQ0KKwkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGl0NjUwNS0+YnJp ZGdlLmRldik7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19jb3Vu dDogJWQiLA0KKwkJCSAgICAgaXQ2NTA1LT5zaW5rX2NvdW50KTsNCisNCisJaWYgKGl0NjUwNS0+ aHBkX3N0YXRlKSB7DQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJml0NjUwNS0+d2Fp dF9lZGlkX2NvbXBsZXRlLA0KKwkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoNjAwMCkpOw0KKwkJ aXQ2NTA1X2xhbmVfdGVybWluYXRpb25fb24oaXQ2NTA1KTsNCisJCWl0NjUwNV9sYW5lX3Bvd2Vy X29uKGl0NjUwNSk7DQorDQorCQkvKg0KKwkJICogZm9yIHNvbWUgZG9uZ2xlIHdoaWNoIGlzc3Vl IEhQRF9pcnENCisJCSAqIHdoZW4gc2luayBjb3VudCBjaGFuZ2UgZnJvbSAgMC0+MQ0KKwkJICog aXQ2NTA1IG5vdCBhYmxlIHRvIHJlY2VpdmUgSFBEX0lSUQ0KKwkJICogaWYgSFcgbmV2ZXIgZ28g aW50byB0cmFpbmlnIGRvbmUNCisJCSAqLw0KKw0KKwkJaWYgKGl0NjUwNS0+YnJhbmNoX2Rldmlj ZSAmJiBpdDY1MDUtPnNpbmtfY291bnQgPT0gMCkNCisJCQlzY2hlZHVsZV93b3JrKCZpdDY1MDUt Pmxpbmtfd29ya3MpOw0KKw0KKwkJaWYgKCFpdDY1MDVfZ2V0X3ZpZGVvX3N0YXR1cyhpdDY1MDUp KQ0KKwkJCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUpOw0KKw0KKwkJaXQ2NTA1X2NhbGNfdmlk ZW9faW5mbyhpdDY1MDUpOw0KKwl9IGVsc2Ugew0KKwkJbWVtc2V0KGl0NjUwNS0+ZHBjZCwgMCwg c2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOw0KKw0KKwkJaWYgKGl0NjUwNS0+aGRjcF9kZXNpcmVkKQ0K KwkJCWl0NjUwNV9zdG9wX2hkY3AoaXQ2NTA1KTsNCisNCisJCWl0NjUwNV92aWRlb19kaXNhYmxl KGl0NjUwNSk7DQorCQlpdDY1MDVfZGlzYWJsZV9hdWRpbyhpdDY1MDUpOw0KKwkJaXQ2NTA1X3N0 b3BfbGlua190cmFpbihpdDY1MDUpOw0KKwkJaXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7DQorCQlp dDY1MDVfbGlua19yZXNldF9zdGVwX3RyYWluKGl0NjUwNSk7DQorCX0NCit9DQorDQorc3RhdGlj IHZvaWQgaXQ2NTA1X2lycV9ocGRfaXJxKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJocGRfaXJxIGludGVycnVwdCIpOw0KKw0KKwlpZiAoaXQ2NTA1X3By b2Nlc3NfaHBkX2lycShpdDY1MDUpIDwgMCkNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg InByb2Nlc3MgaHBkX2lycSBmYWlsISIpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfaXJx X3NjZHQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0g Jml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCWJvb2wgZGF0YTsNCisNCisJZGF0YSA9IGl0NjUwNV9n ZXRfdmlkZW9fc3RhdHVzKGl0NjUwNSk7DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInZp ZGVvIHN0YWJsZSBjaGFuZ2UgaW50ZXJydXB0LCAlcyIsDQorCQkJICAgICBkYXRhID8gInN0YWJs ZSIgOiAidW5zdGFibGUiKTsNCisJaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhpdDY1MDUpOw0KKwlp dDY1MDVfbGlua19yZXNldF9zdGVwX3RyYWluKGl0NjUwNSk7DQorDQorCWlmIChkYXRhKQ0KKwkJ c2NoZWR1bGVfd29yaygmaXQ2NTA1LT5saW5rX3dvcmtzKTsNCit9DQorDQorc3RhdGljIHZvaWQg aXQ2NTA1X2lycV9oZGNwX2RvbmUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0 IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgImhkY3AgZG9uZSBpbnRlcnJ1cHQiKTsNCisJaXQ2NTA1LT5oZGNwX3N0YXR1 cyA9IEhEQ1BfQVVUSF9ET05FOw0KKwlpdDY1MDVfc2hvd19oZGNwX2luZm8oaXQ2NTA1KTsNCit9 DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2lycV9oZGNwX2ZhaWwoc3RydWN0IGl0NjUwNSAqaXQ2 NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQor DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3AgZmFpbCBpbnRlcnJ1cHQiKTsNCisJ aXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVUSF9JRExFOw0KKwlpdDY1MDVfc2hvd19oZGNw X2luZm8oaXQ2NTA1KTsNCisJaXQ2NTA1X3N0YXJ0X2hkY3AoaXQ2NTA1KTsNCit9DQorDQorc3Rh dGljIHZvaWQgaXQ2NTA1X2lycV9hdXhfY21kX2ZhaWwoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0K K3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorDQorCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkFVWCBQQyBSZXF1ZXN0IEZhaWwgSW50ZXJydXB0Iik7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9pcnFfaGRjcF9rc3ZfY2hlY2soc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50 LT5kZXY7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkhEQ1AgZXZlbnQgSW50ZXJy dXB0Iik7DQorCXNjaGVkdWxlX3dvcmsoJml0NjUwNS0+aGRjcF93YWl0X2tzdl9saXN0KTsNCit9 DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2lycV9hdWRpb19maWZvX2Vycm9yKHN0cnVjdCBpdDY1 MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJhdWRpbyBmaWZvIGVycm9yIElu dGVycnVwdCIpOw0KKw0KKwlpZiAoaXQ2NTA1X2F1ZGlvX2lucHV0KGl0NjUwNSkpDQorCQlpdDY1 MDVfZW5hYmxlX2F1ZGlvKGl0NjUwNSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9pcnFf bGlua190cmFpbl9mYWlsKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJsaW5rIHRyYWluaW5nIGZhaWwgaW50ZXJydXB0Iik7DQorCXNjaGVkdWxlX3dvcmso Jml0NjUwNS0+bGlua193b3Jrcyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9pcnFfdmlk ZW9fZmlmb19lcnJvcihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAidmlkZW8gZmlmbyBvdmVyZmxvdyBpbnRlcnJ1cHQiKTsNCisJaXQ2NTA1LT5hdXRvX3Ry YWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCisJZmx1c2hfd29yaygmaXQ2NTA1LT5saW5r X3dvcmtzKTsNCisJaXQ2NTA1X3N0b3BfaGRjcChpdDY1MDUpOw0KKwlpdDY1MDVfdmlkZW9fcmVz ZXQoaXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2lycV9pb19sYXRjaF9maWZv X292ZXJmbG93KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJJTyBsYXRjaCBmaWZvIG92ZXJmbG93IGludGVycnVwdCIpOw0KKwlpdDY1MDUtPmF1dG9fdHJh aW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZOw0KKwlmbHVzaF93b3JrKCZpdDY1MDUtPmxpbmtf d29ya3MpOw0KKwlpdDY1MDVfc3RvcF9oZGNwKGl0NjUwNSk7DQorCWl0NjUwNV92aWRlb19yZXNl dChpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgYm9vbCBpdDY1MDVfdGVzdF9iaXQodW5zaWduZWQg aW50IGJpdCwgY29uc3QgdW5zaWduZWQgaW50ICphZGRyKQ0KK3sNCisJcmV0dXJuIDEgJiAoYWRk cltiaXQgLyBCSVRTX1BFUl9CWVRFXSA+PiAoYml0ICUgQklUU19QRVJfQllURSkpOw0KK30NCisN CitzdGF0aWMgaXJxcmV0dXJuX3QgaXQ2NTA1X2ludF90aHJlYWRlZF9oYW5kbGVyKGludCB1bnVz ZWQsIHZvaWQgKmRhdGEpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkYXRhOw0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJc3RhdGljIGNvbnN0 IHN0cnVjdCB7DQorCQlpbnQgYml0Ow0KKwkJdm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSk7DQorCX0gaXJxX3ZlY1tdID0gew0KKwkJeyBCSVRfSU5UX0hQRCwgaXQ2NTA1X2ly cV9ocGQgfSwNCisJCXsgQklUX0lOVF9IUERfSVJRLCBpdDY1MDVfaXJxX2hwZF9pcnEgfSwNCisJ CXsgQklUX0lOVF9TQ0RULCBpdDY1MDVfaXJxX3NjZHQgfSwNCisJCXsgQklUX0lOVF9IRENQX0ZB SUwsIGl0NjUwNV9pcnFfaGRjcF9mYWlsIH0sDQorCQl7IEJJVF9JTlRfSERDUF9ET05FLCBpdDY1 MDVfaXJxX2hkY3BfZG9uZSB9LA0KKwkJeyBCSVRfSU5UX0FVWF9DTURfRkFJTCwgaXQ2NTA1X2ly cV9hdXhfY21kX2ZhaWwgfSwNCisJCXsgQklUX0lOVF9IRENQX0tTVl9DSEVDSywgaXQ2NTA1X2ly cV9oZGNwX2tzdl9jaGVjayB9LA0KKwkJeyBCSVRfSU5UX0FVRElPX0ZJRk9fRVJST1IsIGl0NjUw NV9pcnFfYXVkaW9fZmlmb19lcnJvciB9LA0KKwkJeyBCSVRfSU5UX0xJTktfVFJBSU5fRkFJTCwg aXQ2NTA1X2lycV9saW5rX3RyYWluX2ZhaWwgfSwNCisJCXsgQklUX0lOVF9WSURfRklGT19FUlJP UiwgaXQ2NTA1X2lycV92aWRlb19maWZvX2Vycm9yIH0sDQorCQl7IEJJVF9JTlRfSU9fRklGT19P VkVSRkxPVywgaXQ2NTA1X2lycV9pb19sYXRjaF9maWZvX292ZXJmbG93IH0sDQorCX07DQorCWlu dCBpbnRfc3RhdHVzWzNdLCBpOw0KKw0KKwltc2xlZXAoMTAwKTsNCisJbXV0ZXhfbG9jaygmaXQ2 NTA1LT5leHRjb25fbG9jayk7DQorDQorCWlmIChpdDY1MDUtPmVuYWJsZV9kcnZfaG9sZCB8fCAh aXQ2NTA1LT5wb3dlcmVkKQ0KKwkJZ290byB1bmxvY2s7DQorDQorCWludF9zdGF0dXNbMF0gPSBp dDY1MDVfcmVhZChpdDY1MDUsIElOVF9TVEFUVVNfMDEpOw0KKwlpbnRfc3RhdHVzWzFdID0gaXQ2 NTA1X3JlYWQoaXQ2NTA1LCBJTlRfU1RBVFVTXzAyKTsNCisJaW50X3N0YXR1c1syXSA9IGl0NjUw NV9yZWFkKGl0NjUwNSwgSU5UX1NUQVRVU18wMyk7DQorDQorCWl0NjUwNV93cml0ZShpdDY1MDUs IElOVF9TVEFUVVNfMDEsIGludF9zdGF0dXNbMF0pOw0KKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJ TlRfU1RBVFVTXzAyLCBpbnRfc3RhdHVzWzFdKTsNCisJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5U X1NUQVRVU18wMywgaW50X3N0YXR1c1syXSk7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgInJlZzA2ID0gMHglMDJ4IiwgaW50X3N0YXR1c1swXSk7DQorCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgInJlZzA3ID0gMHglMDJ4IiwgaW50X3N0YXR1c1sxXSk7DQorCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgInJlZzA4ID0gMHglMDJ4IiwgaW50X3N0YXR1c1syXSk7DQorCWl0NjUw NV9kZWJ1Z19wcmludChpdDY1MDUsIFJFR19TWVNURU1fU1RTLCAiIik7DQorDQorCWlmIChpdDY1 MDVfdGVzdF9iaXQoaXJxX3ZlY1swXS5iaXQsICh1bnNpZ25lZCBpbnQgKilpbnRfc3RhdHVzKSkN CisJCWlycV92ZWNbMF0uaGFuZGxlcihpdDY1MDUpOw0KKw0KKwlpZiAoIWl0NjUwNS0+aHBkX3N0 YXRlKQ0KKwkJZ290byB1bmxvY2s7DQorDQorCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKGly cV92ZWMpOyBpKyspIHsNCisJCWlmIChpdDY1MDVfdGVzdF9iaXQoaXJxX3ZlY1tpXS5iaXQsICh1 bnNpZ25lZCBpbnQgKilpbnRfc3RhdHVzKSkNCisJCQlpcnFfdmVjW2ldLmhhbmRsZXIoaXQ2NTA1 KTsNCisJfQ0KKw0KK3VubG9jazoNCisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPmV4dGNvbl9sb2Nr KTsNCisNCisJcmV0dXJuIElSUV9IQU5ETEVEOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9w b3dlcm9uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKwlzdHJ1Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEgKnBk YXRhID0gJml0NjUwNS0+cGRhdGE7DQorCWludCBlcnI7DQorDQorCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgIml0NjUwNSBzdGFydCBwb3dlcmVkIG9uIik7DQorDQorCWlmIChpdDY1MDUtPnBv d2VyZWQpIHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNSBhbHJlYWR5IHBv d2VyZWQgb24iKTsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCWlmIChwZGF0YS0+cHdyMTgpIHsN CisJCWVyciA9IHJlZ3VsYXRvcl9lbmFibGUocGRhdGEtPnB3cjE4KTsNCisJCWlmIChlcnIpIHsN CisJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIFZERDE4OiAl ZCIsDQorCQkJCQkgICAgIGVycik7DQorCQkJcmV0dXJuIGVycjsNCisJCX0NCisJfQ0KKw0KKwlp ZiAocGRhdGEtPm92ZGQpIHsNCisJCS8qIHRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBJVkREIGFuZCBP VkREIGF0IGxlYXN0IGJlIDFtcyAqLw0KKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KKwkJ ZXJyID0gcmVndWxhdG9yX2VuYWJsZShwZGF0YS0+b3ZkZCk7DQorCQlpZiAoZXJyKSB7DQorCQkJ cmVndWxhdG9yX2Rpc2FibGUocGRhdGEtPnB3cjE4KTsNCisJCQlyZXR1cm4gZXJyOw0KKwkJfQ0K Kwl9DQorCS8qIHRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBPVkREIGFuZCBTWVNSU1ROIGF0IGxlYXN0 IGJlIDEwbXMgKi8NCisJaWYgKHBkYXRhLT5ncGlvZF9yZXNldCkgew0KKwkJdXNsZWVwX3Jhbmdl KDEwMDAwLCAyMDAwMCk7DQorCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9k X3Jlc2V0LCAwKTsNCisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsNCisJCWdwaW9kX3NldF92 YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDEpOw0KKwkJdXNsZWVwX3JhbmdlKDEw MDAwLCAyMDAwMCk7DQorCX0NCisNCisJaXQ2NTA1X3Jlc2V0X2xvZ2ljKGl0NjUwNSk7DQorCWl0 NjUwNV9pbnRfbWFza19lbmFibGUoaXQ2NTA1KTsNCisJaXQ2NTA1X2luaXQoaXQ2NTA1KTsNCisJ aXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7DQorDQorCWl0NjUwNS0+cG93ZXJlZCA9IHRydWU7DQor DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGl0NjUwNV9wb3dlcm9mZihzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGll bnQtPmRldjsNCisJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZpdDY1MDUt PnBkYXRhOw0KKwlpbnQgZXJyOw0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJpdDY1 MDUgc3RhcnQgcG93ZXIgb2ZmIik7DQorDQorCWlmICghaXQ2NTA1LT5wb3dlcmVkKSB7DQorCQlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwb3dlciBoYWQgYmVlbiBhbHJlYWR5IG9mZiIpOw0K KwkJcmV0dXJuIDA7DQorCX0NCisNCisJaWYgKHBkYXRhLT5ncGlvZF9yZXNldCkNCisJCWdwaW9k X3NldF92YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDApOw0KKw0KKwlpZiAocGRh dGEtPnB3cjE4KSB7DQorCQllcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwZGF0YS0+cHdyMTgpOw0K KwkJaWYgKGVycikNCisJCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWlmIChwZGF0YS0+b3ZkZCkg ew0KKwkJZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocGRhdGEtPm92ZGQpOw0KKwkJaWYgKGVycikN CisJCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWl0NjUwNS0+cG93ZXJlZCA9IGZhbHNlOw0KKwlp dDY1MDUtPnNpbmtfY291bnQgPSAwOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGVu dW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgaXQ2NTA1X2RldGVjdChzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisJ ZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nv bm5lY3RlZDsNCisJaW50IGRwX3NpbmtfY291bnQ7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIml0NjUwNS0+c2lua19jb3VudDolZCBwb3dlcmVkOiVkIiwNCisJCQkgICAgIGl0NjUw NS0+c2lua19jb3VudCwgaXQ2NTA1LT5wb3dlcmVkKTsNCisNCisJbXV0ZXhfbG9jaygmaXQ2NTA1 LT5tb2RlX2xvY2spOw0KKw0KKwlpZiAoIWl0NjUwNS0+cG93ZXJlZCkNCisJCWdvdG8gdW5sb2Nr Ow0KKw0KKwlpZiAoaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQpIHsNCisJCXN0YXR1cyA9IGl0NjUw NV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkgPw0KKwkJCQkJY29ubmVjdG9yX3N0YXR1c19j b25uZWN0ZWQgOg0KKwkJCQkJY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7DQorCQlnb3Rv IHVubG9jazsNCisJfQ0KKw0KKwlpZiAoaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1 KSkgew0KKwkJaXQ2NTA1X2F1eF9vbihpdDY1MDUpOw0KKwkJaXQ2NTA1X2RybV9kcF9saW5rX3By b2JlKCZpdDY1MDUtPmF1eCwgJml0NjUwNS0+bGluayk7DQorCQlpdDY1MDVfZHJtX2RwX2xpbmtf cG93ZXJfdXAoJml0NjUwNS0+YXV4LCAmaXQ2NTA1LT5saW5rKTsNCisJCWl0NjUwNS0+YXV0b190 cmFpbl9yZXRyeSA9IEFVVE9fVFJBSU5fUkVUUlk7DQorDQorCQlpZiAoaXQ2NTA1LT5kcGNkWzBd ID09IDApIHsNCisJCQlpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9EUENEX1JFViwgaXQ2NTA1 LT5kcGNkLA0KKwkJCQkJQVJSQVlfU0laRShpdDY1MDUtPmRwY2QpKTsNCisJCQlpdDY1MDVfdmFy aWFibGVfY29uZmlnKGl0NjUwNSk7DQorCQkJaXQ2NTA1X3BhcnNlX2xpbmtfY2FwYWJpbGl0aWVz KGl0NjUwNSk7DQorCQl9DQorDQorCQlkcF9zaW5rX2NvdW50ID0gaXQ2NTA1X2RwY2RfcmVhZChp dDY1MDUsIERQX1NJTktfQ09VTlQpOw0KKwkJaXQ2NTA1LT5zaW5rX2NvdW50ID0gRFBfR0VUX1NJ TktfQ09VTlQoZHBfc2lua19jb3VudCk7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJp dDY1MDUtPnNpbmtfY291bnQ6JWQgYnJhbmNoOiVkIiwNCisJCQkJICAgICBpdDY1MDUtPnNpbmtf Y291bnQsIGl0NjUwNS0+YnJhbmNoX2RldmljZSk7DQorDQorCQlpZiAoaXQ2NTA1LT5icmFuY2hf ZGV2aWNlKSB7DQorCQkJc3RhdHVzID0gKGl0NjUwNS0+c2lua19jb3VudCAhPSAwKSA/DQorCQkJ CSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6DQorCQkJCSBjb25uZWN0b3Jfc3RhdHVzX2Rp c2Nvbm5lY3RlZDsNCisJCX0gZWxzZSB7DQorCQkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19j b25uZWN0ZWQ7DQorCQl9DQorCX0gZWxzZSB7DQorCQlpdDY1MDUtPnNpbmtfY291bnQgPSAwOw0K KwkJbWVtc2V0KGl0NjUwNS0+ZHBjZCwgMCwgc2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOw0KKwl9DQor DQordW5sb2NrOg0KKwlpZiAoaXQ2NTA1LT5jb25uZWN0b3Jfc3RhdHVzICE9IHN0YXR1cykgew0K KwkJaXQ2NTA1LT5jb25uZWN0b3Jfc3RhdHVzID0gc3RhdHVzOw0KKwkJaXQ2NTA1X3BsdWdnZWRf c3RhdHVzX3RvX2NvZGVjKGl0NjUwNSk7DQorCX0NCisNCisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUt Pm1vZGVfbG9jayk7DQorDQorCXJldHVybiBzdGF0dXM7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2 NTA1X2V4dGNvbl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsDQorCQkJCSAg dW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2 NTA1ID0gY29udGFpbmVyX29mKHNlbGYsIHN0cnVjdCBpdDY1MDUsIGV2ZW50X25iKTsNCisNCisJ c2NoZWR1bGVfd29yaygmaXQ2NTA1LT5leHRjb25fd3EpOw0KKwlyZXR1cm4gTk9USUZZX0RPTkU7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9leHRjb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2Yod29y aywgc3RydWN0IGl0NjUwNSwgZXh0Y29uX3dxKTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0 NjUwNS0+Y2xpZW50LT5kZXY7DQorCWludCBzdGF0ZSA9IGV4dGNvbl9nZXRfc3RhdGUoaXQ2NTA1 LT5leHRjb24sIEVYVENPTl9ESVNQX0RQKTsNCisJdW5zaWduZWQgaW50IHB3cm9mZnJldHJ5ID0g MDsNCisNCisJaWYgKGl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkKQ0KKwkJcmV0dXJuOw0KKw0KKwlt dXRleF9sb2NrKCZpdDY1MDUtPmV4dGNvbl9sb2NrKTsNCisNCisJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiRVhUQ09OX0RJU1BfRFAgPSAweCUwMngiLCBzdGF0ZSk7DQorCWlmIChzdGF0ZSA+ IDApIHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0YXJ0IHRvIHBvd2VyIG9uIik7 DQorCQltc2xlZXAoMTAwKTsNCisJCWl0NjUwNV9wb3dlcm9uKGl0NjUwNSk7DQorCX0gZWxzZSB7 DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCB0byBwb3dlciBvZmYiKTsNCisJ CXdoaWxlIChpdDY1MDVfcG93ZXJvZmYoaXQ2NTA1KSAmJiBwd3JvZmZyZXRyeSsrIDwgNSkgew0K KwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInBvd2VyIG9mZiBmYWlsICVkIHRpbWVzIiwN CisJCQkJCSAgICAgcHdyb2ZmcmV0cnkpOw0KKwkJfQ0KKw0KKwkJZHJtX2hlbHBlcl9ocGRfaXJx X2V2ZW50KGl0NjUwNS0+YnJpZGdlLmRldik7DQorCQltZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBz aXplb2YoaXQ2NTA1LT5kcGNkKSk7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwb3dl ciBvZmYgaXQ2NTA1IHN1Y2Nlc3MhIik7DQorCX0NCisNCisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUt PmV4dGNvbl9sb2NrKTsNCit9DQorDQorc3RhdGljIGludCBpdDY1MDVfdXNlX25vdGlmaWVyX21v ZHVsZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlpbnQgcmV0Ow0KKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisNCisJaXQ2NTA1LT5ldmVudF9uYi5u b3RpZmllcl9jYWxsID0gaXQ2NTA1X2V4dGNvbl9ub3RpZmllcjsNCisJSU5JVF9XT1JLKCZpdDY1 MDUtPmV4dGNvbl93cSwgaXQ2NTA1X2V4dGNvbl93b3JrKTsNCisJcmV0ID0gZGV2bV9leHRjb25f cmVnaXN0ZXJfbm90aWZpZXIoJml0NjUwNS0+Y2xpZW50LT5kZXYsDQorCQkJCQkgICAgaXQ2NTA1 LT5leHRjb24sIEVYVENPTl9ESVNQX0RQLA0KKwkJCQkJICAgICZpdDY1MDUtPmV2ZW50X25iKTsN CisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgbm90aWZp ZXIgZm9yIERQIik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXNjaGVkdWxlX3dvcmsoJml0 NjUwNS0+ZXh0Y29uX3dxKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0 NjUwNV9yZW1vdmVfbm90aWZpZXJfbW9kdWxlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7DQor CWlmIChpdDY1MDUtPmV4dGNvbikgew0KKwkJZGV2bV9leHRjb25fdW5yZWdpc3Rlcl9ub3RpZmll cigmaXQ2NTA1LT5jbGllbnQtPmRldiwNCisJCQkJCQlpdDY1MDUtPmV4dGNvbiwJRVhUQ09OX0RJ U1BfRFAsDQorCQkJCQkJJml0NjUwNS0+ZXZlbnRfbmIpOw0KKw0KKwkJZmx1c2hfd29yaygmaXQ2 NTA1LT5leHRjb25fd3EpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2Vk IGl0NjUwNV9kZWxheWVkX2F1ZGlvKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0 cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXQ2NTA1LA0K KwkJCQkJICAgICBkZWxheWVkX2F1ZGlvLndvcmspOw0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZF UigmaXQ2NTA1LT5jbGllbnQtPmRldiwgInN0YXJ0Iik7DQorDQorCWlmICghaXQ2NTA1LT5wb3dl cmVkKQ0KKwkJcmV0dXJuOw0KKw0KKwlpZiAoIWl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkKQ0KKwkJ aXQ2NTA1X2VuYWJsZV9hdWRpbyhpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgaW50IF9fbWF5YmVf dW51c2VkIGl0NjUwNV9hdWRpb19zZXR1cF9od19wYXJhbXMoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 LA0KKwkJCQkJCSAgICAgICBzdHJ1Y3QgaGRtaV9jb2RlY19wYXJhbXMNCisJCQkJCQkgICAgICAg KnBhcmFtcykNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2 Ow0KKwlpbnQgaSA9IDA7DQorDQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiVzICVkIEh6 LCAlZCBiaXQsICVkIGNoYW5uZWxzXG4iLCBfX2Z1bmNfXywNCisJCQkgICAgIHBhcmFtcy0+c2Ft cGxlX3JhdGUsIHBhcmFtcy0+c2FtcGxlX3dpZHRoLA0KKwkJCSAgICAgcGFyYW1zLT5jZWEuY2hh bm5lbHMpOw0KKw0KKwlpZiAoIWl0NjUwNS0+YnJpZGdlLmVuY29kZXIpDQorCQlyZXR1cm4gLUVO T0RFVjsNCisNCisJaWYgKHBhcmFtcy0+Y2VhLmNoYW5uZWxzIDw9IDEgfHwgcGFyYW1zLT5jZWEu Y2hhbm5lbHMgPiA4KSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJjaGFubmVsIG51 bWJlcjogJWQgbm90IHN1cHBvcnQiLA0KKwkJCQkgICAgIGl0NjUwNS0+YXVkaW8uY2hhbm5lbF9j b3VudCk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlpdDY1MDUtPmF1ZGlvLmNoYW5u ZWxfY291bnQgPSBwYXJhbXMtPmNlYS5jaGFubmVsczsNCisNCisJd2hpbGUgKGkgPCBBUlJBWV9T SVpFKGF1ZGlvX3NhbXBsZV9yYXRlX21hcCkgJiYNCisJICAgICAgIHBhcmFtcy0+c2FtcGxlX3Jh dGUgIT0NCisJCSAgICAgICBhdWRpb19zYW1wbGVfcmF0ZV9tYXBbaV0uc2FtcGxlX3JhdGVfdmFs dWUpIHsNCisJCWkrKzsNCisJfQ0KKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGF1ZGlvX3NhbXBsZV9y YXRlX21hcCkpIHsNCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInNhbXBsZSByYXRlOiAl ZCBIeiBub3Qgc3VwcG9ydCIsDQorCQkJCSAgICAgcGFyYW1zLT5zYW1wbGVfcmF0ZSk7DQorCQly ZXR1cm4gLUVJTlZBTDsNCisJfQ0KKwlpdDY1MDUtPmF1ZGlvLnNhbXBsZV9yYXRlID0gYXVkaW9f c2FtcGxlX3JhdGVfbWFwW2ldLnJhdGU7DQorDQorCXN3aXRjaCAocGFyYW1zLT5zYW1wbGVfd2lk dGgpIHsNCisJY2FzZSAxNjoNCisJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPSBXT1JEX0xF TkdUSF8xNkJJVDsNCisJCWJyZWFrOw0KKwljYXNlIDE4Og0KKwkJaXQ2NTA1LT5hdWRpby53b3Jk X2xlbmd0aCA9IFdPUkRfTEVOR1RIXzE4QklUOw0KKwkJYnJlYWs7DQorCWNhc2UgMjA6DQorCQlp dDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoID0gV09SRF9MRU5HVEhfMjBCSVQ7DQorCQlicmVhazsN CisJY2FzZSAyNDoNCisJY2FzZSAzMjoNCisJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPSBX T1JEX0xFTkdUSF8yNEJJVDsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAid29yZGxlbmd0aDogJWQgYml0IG5vdCBzdXBwb3J0IiwNCisJCQkJICAg ICBwYXJhbXMtPnNhbXBsZV93aWR0aCk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwly ZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlv X3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCBp dDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKw0KKwlpZiAoaXQ2NTA1LT5w b3dlcmVkKQ0KKwkJaXQ2NTA1X2Rpc2FibGVfYXVkaW8oaXQ2NTA1KTsNCit9DQorDQorc3RhdGlj IGludCBfX21heWJlX3VudXNlZCBpdDY1MDVfYXVkaW9faG9va19wbHVnZ2VkX2NiKHN0cnVjdCBk ZXZpY2UgKmRldiwNCisJCQkJCQkgICAgICAgdm9pZCAqZGF0YSwNCisJCQkJCQkgICAgICAgaGRt aV9jb2RlY19wbHVnZ2VkX2NiIGZuLA0KKwkJCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpjb2Rl Y19kZXYpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkYXRhOw0KKw0KKwlpdDY1MDUt PnBsdWdnZWRfY2IgPSBmbjsNCisJaXQ2NTA1LT5jb2RlY19kZXYgPSBjb2RlY19kZXY7DQorCWl0 NjUwNV9wbHVnZ2VkX3N0YXR1c190b19jb2RlYyhpdDY1MDUpOw0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXQ2NTA1ICpicmlkZ2VfdG9faXQ2NTA1KHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UpDQorew0KKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwg c3RydWN0IGl0NjUwNSwgYnJpZGdlKTsNCit9DQorDQorc3RhdGljIGludCBpdDY1MDVfYnJpZGdl X2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KKwkJCQllbnVtIGRybV9icmlkZ2Vf YXR0YWNoX2ZsYWdzIGZsYWdzKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdl X3RvX2l0NjUwNShicmlkZ2UpOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGll bnQtPmRldjsNCisJaW50IHJldDsNCisNCisJaWYgKCEoZmxhZ3MgJiBEUk1fQlJJREdFX0FUVEFD SF9OT19DT05ORUNUT1IpKSB7DQorCQlEUk1fRVJST1IoIkRSTV9CUklER0VfQVRUQUNIX05PX0NP Tk5FQ1RPUiBtdXN0IGJlIHN1cHBsaWVkIik7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0K KwlpZiAoIWJyaWRnZS0+ZW5jb2Rlcikgew0KKwkJZGV2X2VycihkZXYsICJQYXJlbnQgZW5jb2Rl ciBvYmplY3Qgbm90IGZvdW5kIik7DQorCQlyZXR1cm4gLUVOT0RFVjsNCisJfQ0KKw0KKwlpZiAo aXQ2NTA1LT5leHRjb24pIHsNCisJCXJldCA9IGl0NjUwNV91c2Vfbm90aWZpZXJfbW9kdWxlKGl0 NjUwNSk7DQorCQlpZiAocmV0IDwgMCkgew0KKwkJCWRldl9lcnIoZGV2LCAidXNlIG5vdGlmaWVy IG1vZHVsZSBmYWlsZWQiKTsNCisJCQlyZXR1cm4gcmV0Ow0KKwkJfQ0KKwl9DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2RldGFjaChzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3Rv X2l0NjUwNShicmlkZ2UpOw0KKw0KKwlmbHVzaF93b3JrKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0K KwlpdDY1MDVfcmVtb3ZlX25vdGlmaWVyX21vZHVsZShpdDY1MDUpOw0KK30NCisNCitzdGF0aWMg ZW51bSBkcm1fbW9kZV9zdGF0dXMNCitpdDY1MDVfYnJpZGdlX21vZGVfdmFsaWQoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSwNCisJCQkgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmlu Zm8sDQorCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQ0KK3sNCisJc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0KKw0KKwlpZiAo bW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkNCisJCXJldHVybiBNT0RFX05P X0lOVEVSTEFDRTsNCisNCisJaWYgKG1vZGUtPmNsb2NrID4gRFBJX1BJWEVMX0NMS19NQVgpDQor CQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOw0KKw0KKwlpdDY1MDUtPnZpZGVvX2luZm8uY2xvY2sg PSBtb2RlLT5jbG9jazsNCisNCisJcmV0dXJuIE1PREVfT0s7DQorfQ0KKw0KK3N0YXRpYyB2b2lk IGl0NjUwNV9icmlkZ2VfYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0K KwkJCQkJc3RydWN0IGRybV9icmlkZ2Vfc3RhdGUgKm9sZF9zdGF0ZSkNCit7DQorCXN0cnVjdCBp dDY1MDUgKml0NjUwNSA9IGJyaWRnZV90b19pdDY1MDUoYnJpZGdlKTsNCisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSA9IG9sZF9zdGF0ZS0+YmFzZS5zdGF0ZTsNCisJc3RydWN0IGhkbWlfYXZpX2luZm9m cmFtZSBmcmFtZTsNCisJY29uc3Qgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOw0K Kwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsNCisJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcjsNCisJaW50IHJldDsNCisNCisJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAic3RhcnQiKTsNCisNCisJY29ubmVjdG9yID0gZHJtX2F0b21pY19nZXRfbmV3X2Nvbm5l Y3Rvcl9mb3JfZW5jb2RlcihzdGF0ZSwNCisJCQkJCQkJICAgICBicmlkZ2UtPmVuY29kZXIpOw0K Kw0KKwljcnRjX3N0YXRlID0gZHJtX2JyaWRnZV9uZXdfY3J0Y19zdGF0ZShicmlkZ2UsIG9sZF9z dGF0ZSk7DQorCW1vZGUgPSAmY3J0Y19zdGF0ZS0+bW9kZTsNCisJcmV0ID0gZHJtX2hkbWlfYXZp X2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUsDQorCQkJCQkJICAgICAgIGNvbm5l Y3RvciwNCisJCQkJCQkgICAgICAgbW9kZSk7DQorCWlmIChyZXQpDQorCQlkZXZfZXJyKGRldiwg IkZhaWxlZCB0byBzZXR1cCBBVkkgaW5mb2ZyYW1lOiAlZCIsIHJldCk7DQorDQorCWl0NjUwNV91 cGRhdGVfdmlkZW9fcGFyYW1ldGVyKGl0NjUwNSwgbW9kZSk7DQorDQorCXJldCA9IGl0NjUwNV9z ZW5kX3ZpZGVvX2luZm9mcmFtZShpdDY1MDUsICZmcmFtZSk7DQorDQorCWlmIChyZXQpDQorCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzZW5kIEFWSSBpbmZvZnJhbWU6ICVkIiwgcmV0KTsNCisN CisJaXQ2NTA1X2ludF9tYXNrX2VuYWJsZShpdDY1MDUpOw0KKwlpdDY1MDVfdmlkZW9fcmVzZXQo aXQ2NTA1KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1X2JyaWRnZV9hdG9taWNfZGlzYWJs ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KKwkJCQkJIHN0cnVjdCBkcm1fYnJpZGdlX3N0 YXRlICpvbGRfc3RhdGUpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9f aXQ2NTA1KGJyaWRnZSk7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Ow0KKw0KKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCIpOw0KKw0KKwlpZiAo aXQ2NTA1LT5wb3dlcmVkKQ0KKwkJaXQ2NTA1X3ZpZGVvX2Rpc2FibGUoaXQ2NTA1KTsNCit9DQor DQorc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMNCitpdDY1MDVfYnJpZGdlX2RldGVj dChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1 ID0gYnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0KKw0KKwlyZXR1cm4gaXQ2NTA1X2RldGVjdChp dDY1MDUpOw0KK30NCisNCitzdGF0aWMgc3RydWN0IGVkaWQgKml0NjUwNV9icmlkZ2VfZ2V0X2Vk aWQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwNCisJCQkJCSAgIHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9f aXQ2NTA1KGJyaWRnZSk7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Ow0KKwlzdHJ1Y3QgZWRpZCAqZWRpZDsNCisNCisJZWRpZCA9IGRybV9kb19nZXRfZWRpZChj b25uZWN0b3IsIGl0NjUwNV9nZXRfZWRpZF9ibG9jaywgaXQ2NTA1KTsNCisNCisJaWYgKCFlZGlk KSB7DQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJmYWlsZWQgdG8gZ2V0IGVkaWQhIik7 DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KKw0KKwlyZXR1cm4gZWRpZDsNCit9DQorDQorc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIGl0NjUwNV9icmlkZ2VfZnVuY3MgPSB7DQor CS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfYnJpZGdlX2R1cGxp Y2F0ZV9zdGF0ZSwNCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJf YnJpZGdlX2Rlc3Ryb3lfc3RhdGUsDQorCS5hdG9taWNfcmVzZXQgPSBkcm1fYXRvbWljX2hlbHBl cl9icmlkZ2VfcmVzZXQsDQorCS5hdHRhY2ggPSBpdDY1MDVfYnJpZGdlX2F0dGFjaCwNCisJLmRl dGFjaCA9IGl0NjUwNV9icmlkZ2VfZGV0YWNoLA0KKwkubW9kZV92YWxpZCA9IGl0NjUwNV9icmlk Z2VfbW9kZV92YWxpZCwNCisJLmF0b21pY19lbmFibGUgPSBpdDY1MDVfYnJpZGdlX2F0b21pY19l bmFibGUsDQorCS5hdG9taWNfZGlzYWJsZSA9IGl0NjUwNV9icmlkZ2VfYXRvbWljX2Rpc2FibGUs DQorCS5kZXRlY3QgPSBpdDY1MDVfYnJpZGdlX2RldGVjdCwNCisJLmdldF9lZGlkID0gaXQ2NTA1 X2JyaWRnZV9nZXRfZWRpZCwNCit9Ow0KKw0KK3N0YXRpYyBfX21heWJlX3VudXNlZCBpbnQgaXQ2 NTA1X2JyaWRnZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGl0NjUw NSAqaXQ2NTA1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorDQorCXJldHVybiBpdDY1MDVfcG93 ZXJvbihpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgX19tYXliZV91bnVzZWQgaW50IGl0NjUwNV9i cmlkZ2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCisNCisJcmV0dXJuIGl0NjUwNV9wb3dlcm9m ZihpdDY1MDUpOw0KK30NCisNCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoaXQ2NTA1X2JyaWRn ZV9wbV9vcHMsIGl0NjUwNV9icmlkZ2Vfc3VzcGVuZCwNCisJCQkgaXQ2NTA1X2JyaWRnZV9yZXN1 bWUpOw0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2luaXRfcGRhdGEoc3RydWN0IGl0NjUwNSAqaXQ2 NTA1KQ0KK3sNCisJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZpdDY1MDUt PnBkYXRhOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCisN CisJLyogMS4wViBkaWdpdGFsIGNvcmUgcG93ZXIgcmVndWxhdG9yICAqLw0KKwlwZGF0YS0+cHdy MTggPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAicHdyMTgiKTsNCisJaWYgKElTX0VSUihwZGF0 YS0+cHdyMTgpKSB7DQorCQlkZXZfZXJyKGRldiwgInB3cjE4IHJlZ3VsYXRvciBub3QgZm91bmQi KTsNCisJCXJldHVybiBQVFJfRVJSKHBkYXRhLT5wd3IxOCk7DQorCX0NCisNCisJcGRhdGEtPm92 ZGQgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAib3ZkZCIpOw0KKwlpZiAoSVNfRVJSKHBkYXRh LT5vdmRkKSkgew0KKwkJZGV2X2VycihkZXYsICJvdmRkIHJlZ3VsYXRvciBub3QgZm91bmQiKTsN CisJCXJldHVybiBQVFJfRVJSKHBkYXRhLT5vdmRkKTsNCisJfQ0KKw0KKwlwZGF0YS0+Z3Bpb2Rf cmVzZXQgPSBkZXZtX2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9EX09VVF9ISUdIKTsNCisJ aWYgKElTX0VSUihwZGF0YS0+Z3Bpb2RfcmVzZXQpKSB7DQorCQlkZXZfZXJyKGRldiwgImdwaW9k X3Jlc2V0IGdwaW8gbm90IGZvdW5kIik7DQorCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+Z3Bpb2Rf cmVzZXQpOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpdDY1MDVf cGFyc2VfZHQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQorCXUzMiAqYWZlX3NldHRpbmcgPSAmaXQ2NTA1LT5h ZmVfc2V0dGluZzsNCisNCisJaXQ2NTA1LT5sYW5lX3N3YXBfZGlzYWJsZWQgPQ0KKwkJZGV2aWNl X3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsICJuby1sYW5lc3dhcCIpOw0KKw0KKwlpZiAoaXQ2NTA1 LT5sYW5lX3N3YXBfZGlzYWJsZWQpDQorCQlpdDY1MDUtPmxhbmVfc3dhcCA9IGZhbHNlOw0KKw0K KwlpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImFmZS1zZXR0aW5nIiwgYWZlX3Nl dHRpbmcpID09IDApIHsNCisJCWlmICgqYWZlX3NldHRpbmcgPj0gQVJSQVlfU0laRShhZmVfc2V0 dGluZ190YWJsZSkpIHsNCisJCQlkZXZfZXJyKGRldiwgImFmZSBzZXR0aW5nIGVycm9yLCB1c2Ug ZGVmYXVsdCIpOw0KKwkJCSphZmVfc2V0dGluZyA9IDA7DQorCQl9DQorCX0gZWxzZSB7DQorCQkq YWZlX3NldHRpbmcgPSAwOw0KKwl9DQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInVzaW5n IGFmZV9zZXR0aW5nOiAlZCIsICphZmVfc2V0dGluZyk7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90 IHJlY2VpdmVfdGltaW5nX2RlYnVnZnNfc2hvdyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3Vz ZXIgKmJ1ZiwNCisJCQkJCSAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykNCit7DQorCXN0cnVj dCBpdDY1MDUgKml0NjUwNSA9IGZpbGUtPnByaXZhdGVfZGF0YTsNCisJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKnZpZCA9ICZpdDY1MDUtPnZpZGVvX2luZm87DQorCXU4IHJlYWRfYnVmW1JFQURf QlVGRkVSX1NJWkVdOw0KKwl1OCAqc3RyID0gcmVhZF9idWYsICplbmQgPSByZWFkX2J1ZiArIFBB R0VfU0laRTsNCisJc3NpemVfdCByZXQsIGNvdW50Ow0KKw0KKwlpZiAoIWl0NjUwNSkNCisJCXJl dHVybiAtRU5PREVWOw0KKw0KKwlpdDY1MDVfY2FsY192aWRlb19pbmZvKGl0NjUwNSk7DQorCXN0 ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICItLS12aWRlbyB0aW1pbmctLS1cbiIpOw0K KwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiUENMSzolZC4lMDNkTUh6XG4iLA0K KwkJCSB2aWQtPmNsb2NrIC8gMTAwMCwgdmlkLT5jbG9jayAlIDEwMDApOw0KKwlzdHIgKz0gc2Nu cHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiSFRvdGFsOiVkXG4iLCB2aWQtPmh0b3RhbCk7DQorCXN0 ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIQWN0aXZlOiVkXG4iLCB2aWQtPmhkaXNw bGF5KTsNCisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIkhGcm9udFBvcmNoOiVk XG4iLA0KKwkJCSB2aWQtPmhzeW5jX3N0YXJ0IC0gdmlkLT5oZGlzcGxheSk7DQorCXN0ciArPSBz Y25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIU3luY1dpZHRoOiVkXG4iLA0KKwkJCSB2aWQtPmhz eW5jX2VuZCAtIHZpZC0+aHN5bmNfc3RhcnQpOw0KKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5k IC0gc3RyLCAiSEJhY2tQb3JjaDolZFxuIiwNCisJCQkgdmlkLT5odG90YWwgLSB2aWQtPmhzeW5j X2VuZCk7DQorCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJWVG90YWw6JWRcbiIs IHZpZC0+dnRvdGFsKTsNCisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlZBY3Rp dmU6JWRcbiIsIHZpZC0+dmRpc3BsYXkpOw0KKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0g c3RyLCAiVkZyb250UG9yY2g6JWRcbiIsDQorCQkJIHZpZC0+dnN5bmNfc3RhcnQgLSB2aWQtPnZk aXNwbGF5KTsNCisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlZTeW5jV2lkdGg6 JWRcbiIsDQorCQkJIHZpZC0+dnN5bmNfZW5kIC0gdmlkLT52c3luY19zdGFydCk7DQorCXN0ciAr PSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJWQmFja1BvcmNoOiVkXG4iLA0KKwkJCSB2aWQt PnZ0b3RhbCAtIHZpZC0+dnN5bmNfZW5kKTsNCisNCisJY291bnQgPSBzdHIgLSByZWFkX2J1ZjsN CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBsZW4sIHBwb3MsIHJlYWRfYnVm LCBjb3VudCk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgZm9yY2VfcG93 ZXJfb25fb2ZmX2RlYnVnZnNfd3JpdGUodm9pZCAqZGF0YSwgdTY0IHZhbHVlKQ0KK3sNCisJc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGF0YTsNCisNCisJaWYgKCFpdDY1MDUpDQorCQlyZXR1cm4g LUVOT0RFVjsNCisNCisJaWYgKHZhbHVlKQ0KKwkJaXQ2NTA1X3Bvd2Vyb24oaXQ2NTA1KTsNCisJ ZWxzZQ0KKwkJaXQ2NTA1X3Bvd2Vyb2ZmKGl0NjUwNSk7DQorDQorCXJldHVybiAwOw0KK30NCisN CitzdGF0aWMgaW50IGVuYWJsZV9kcnZfaG9sZF9kZWJ1Z2ZzX3Nob3codm9pZCAqZGF0YSwgdTY0 ICpidWYpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkYXRhOw0KKw0KKwlpZiAoIWl0 NjUwNSkNCisJCXJldHVybiAtRU5PREVWOw0KKw0KKwkqYnVmID0gaXQ2NTA1LT5lbmFibGVfZHJ2 X2hvbGQ7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGVuYWJsZV9kcnZfaG9s ZF9kZWJ1Z2ZzX3dyaXRlKHZvaWQgKmRhdGEsIHU2NCBkcnZfaG9sZCkNCit7DQorCXN0cnVjdCBp dDY1MDUgKml0NjUwNSA9IGRhdGE7DQorDQorCWlmICghaXQ2NTA1KQ0KKwkJcmV0dXJuIC1FTk9E RVY7DQorDQorCWl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkID0gZHJ2X2hvbGQ7DQorDQorCWlmIChp dDY1MDUtPmVuYWJsZV9kcnZfaG9sZCkgew0KKwkJaXQ2NTA1X2ludF9tYXNrX2Rpc2FibGUoaXQ2 NTA1KTsNCisJfSBlbHNlIHsNCisJCWl0NjUwNV9jbGVhcl9pbnQoaXQ2NTA1KTsNCisJCWl0NjUw NV9pbnRfbWFza19lbmFibGUoaXQ2NTA1KTsNCisNCisJCWlmIChpdDY1MDUtPnBvd2VyZWQpIHsN CisJCQlpdDY1MDUtPmNvbm5lY3Rvcl9zdGF0dXMgPQ0KKwkJCQkJaXQ2NTA1X2dldF9zaW5rX2hw ZF9zdGF0dXMoaXQ2NTA1KSA/DQorCQkJCQljb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6DQor CQkJCQljb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsNCisJCX0gZWxzZSB7DQorCQkJaXQ2 NTA1LT5jb25uZWN0b3Jfc3RhdHVzID0NCisJCQkJCWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVj dGVkOw0KKwkJfQ0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGZpbGVfb3BlcmF0aW9ucyByZWNlaXZlX3RpbWluZ19mb3BzID0gew0KKwkub3duZXIgPSBU SElTX01PRFVMRSwNCisJLm9wZW4gPSBzaW1wbGVfb3BlbiwNCisJLnJlYWQgPSByZWNlaXZlX3Rp bWluZ19kZWJ1Z2ZzX3Nob3csDQorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywNCit9Ow0KKw0K K0RFRklORV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX2ZvcmNlX3Bvd2VyLCBOVUxMLA0KKwkJCSBm b3JjZV9wb3dlcl9vbl9vZmZfZGVidWdmc193cml0ZSwgIiVsbHVcbiIpOw0KKw0KK0RFRklORV9E RUJVR0ZTX0FUVFJJQlVURShmb3BzX2VuYWJsZV9kcnZfaG9sZCwgZW5hYmxlX2Rydl9ob2xkX2Rl YnVnZnNfc2hvdywNCisJCQkgZW5hYmxlX2Rydl9ob2xkX2RlYnVnZnNfd3JpdGUsICIlbGx1XG4i KTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGRlYnVnZnNfZW50cmllcyBkZWJ1Z2ZzX2VudHJ5 W10gPSB7DQorCXsgInJlY2VpdmVfdGltaW5nIiwgJnJlY2VpdmVfdGltaW5nX2ZvcHMgfSwNCisJ eyAiZm9yY2VfcG93ZXJfb25fb2ZmIiwgJmZvcHNfZm9yY2VfcG93ZXIgfSwNCisJeyAiZW5hYmxl X2Rydl9ob2xkIiwgJmZvcHNfZW5hYmxlX2Rydl9ob2xkIH0sDQorCXsgTlVMTCwgTlVMTCB9LA0K K307DQorDQorc3RhdGljIHZvaWQgZGVidWdmc19jcmVhdGVfZmlsZXMoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQ0KK3sNCisJaW50IGkgPSAwOw0KKw0KKwl3aGlsZSAoZGVidWdmc19lbnRyeVtpXS5u YW1lICYmIGRlYnVnZnNfZW50cnlbaV0uZm9wcykgew0KKwkJZGVidWdmc19jcmVhdGVfZmlsZShk ZWJ1Z2ZzX2VudHJ5W2ldLm5hbWUsIDA2NDQsDQorCQkJCSAgICBpdDY1MDUtPmRlYnVnZnMsIGl0 NjUwNSwNCisJCQkJICAgIGRlYnVnZnNfZW50cnlbaV0uZm9wcyk7DQorCQlpKys7DQorCX0NCit9 DQorDQorc3RhdGljIHZvaWQgZGVidWdmc19pbml0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCit7 DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KKw0KKwlpdDY1 MDUtPmRlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoREVCVUdGU19ESVJfTkFNRSwgTlVMTCk7 DQorDQorCWlmIChJU19FUlIoaXQ2NTA1LT5kZWJ1Z2ZzKSkgew0KKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gY3JlYXRlIGRlYnVnZnMgcm9vdCIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCWRl YnVnZnNfY3JlYXRlX2ZpbGVzKGl0NjUwNSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGl0NjUwNV9k ZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQorew0KKwlkZWJ1Z2ZzX3JlbW92 ZV9yZWN1cnNpdmUoaXQ2NTA1LT5kZWJ1Z2ZzKTsNCit9DQorDQorc3RhdGljIHZvaWQgaXQ2NTA1 X3NodXRkb3duKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQorew0KKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoJmNsaWVudC0+ZGV2KTsNCisNCisJaWYgKGl0NjUw NS0+cG93ZXJlZCkNCisJCWl0NjUwNV9sYW5lX29mZihpdDY1MDUpOw0KK30NCisNCitzdGF0aWMg aW50IGl0NjUwNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwNCisJCQkgICAg Y29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQ0KK3sNCisJc3RydWN0IGl0NjUwNSAqaXQ2 NTA1Ow0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7DQorCXN0cnVjdCBleHRj b25fZGV2ICpleHRjb247DQorCWludCBlcnIsIGludHBfaXJxOw0KKw0KKwlpdDY1MDUgPSBkZXZt X2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKml0NjUwNSksIEdGUF9LRVJORUwpOw0KKwlp ZiAoIWl0NjUwNSkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwltdXRleF9pbml0KCZpdDY1MDUt PmV4dGNvbl9sb2NrKTsNCisJbXV0ZXhfaW5pdCgmaXQ2NTA1LT5tb2RlX2xvY2spOw0KKwltdXRl eF9pbml0KCZpdDY1MDUtPmF1eF9sb2NrKTsNCisNCisJaXQ2NTA1LT5icmlkZ2Uub2Zfbm9kZSA9 IGNsaWVudC0+ZGV2Lm9mX25vZGU7DQorCWl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1cyA9IGNvbm5l Y3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOw0KKwlpdDY1MDUtPmNsaWVudCA9IGNsaWVudDsNCisJ aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgaXQ2NTA1KTsNCisNCisJLyogZ2V0IGV4dGNvbiBk ZXZpY2UgZnJvbSBEVFMgKi8NCisJZXh0Y29uID0gZXh0Y29uX2dldF9lZGV2X2J5X3BoYW5kbGUo ZGV2LCAwKTsNCisJaWYgKFBUUl9FUlIoZXh0Y29uKSA9PSAtRVBST0JFX0RFRkVSKQ0KKwkJcmV0 dXJuIC1FUFJPQkVfREVGRVI7DQorCWlmIChJU19FUlIoZXh0Y29uKSkgew0KKwkJZGV2X2Vycihk ZXYsICJjYW4gbm90IGdldCBleHRjb24gZGV2aWNlISIpOw0KKwkJcmV0dXJuIFBUUl9FUlIoZXh0 Y29uKTsNCisJfQ0KKw0KKwlpdDY1MDUtPmV4dGNvbiA9IGV4dGNvbjsNCisNCisJaXQ2NTA1LT5y ZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZpdDY1MDVfcmVnbWFwX2NvbmZp Zyk7DQorCWlmIChJU19FUlIoaXQ2NTA1LT5yZWdtYXApKSB7DQorCQlkZXZfZXJyKGRldiwgInJl Z21hcCBpMmMgaW5pdCBmYWlsZWQiKTsNCisJCWVyciA9IFBUUl9FUlIoaXQ2NTA1LT5yZWdtYXAp Ow0KKwkJcmV0dXJuIGVycjsNCisJfQ0KKw0KKwllcnIgPSBpdDY1MDVfaW5pdF9wZGF0YShpdDY1 MDUpOw0KKwlpZiAoZXJyKSB7DQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXpl IHBkYXRhOiAlZCIsIGVycik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWl0NjUwNV9wYXJz ZV9kdChpdDY1MDUpOw0KKw0KKwlpbnRwX2lycSA9IGNsaWVudC0+aXJxOw0KKw0KKwlpZiAoIWlu dHBfaXJxKSB7DQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgSU5UUCBJUlEiKTsNCisJ CWVyciA9IC1FTk9ERVY7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWVyciA9IGRldm1fcmVx dWVzdF90aHJlYWRlZF9pcnEoJmNsaWVudC0+ZGV2LCBpbnRwX2lycSwgTlVMTCwNCisJCQkJCWl0 NjUwNV9pbnRfdGhyZWFkZWRfaGFuZGxlciwNCisJCQkJCUlSUUZfVFJJR0dFUl9MT1cgfCBJUlFG X09ORVNIT1QsDQorCQkJCQkiaXQ2NTA1LWludHAiLCBpdDY1MDUpOw0KKwlpZiAoZXJyKSB7DQor CQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElOVFAgdGhyZWFkZWQgSVJROiAlZCIs IGVycik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCS8qIFJlZ2lzdGVyIGF1eCBjaGFubmVs ICovDQorCWl0NjUwNS0+YXV4Lm5hbWUgPSAiRFAtQVVYIjsNCisJaXQ2NTA1LT5hdXguZGV2ID0g ZGV2Ow0KKwlpdDY1MDUtPmF1eC50cmFuc2ZlciA9IGl0NjUwNV9hdXhfdHJhbnNmZXI7DQorDQor CWVyciA9IGRybV9kcF9hdXhfcmVnaXN0ZXIoJml0NjUwNS0+YXV4KTsNCisJaWYgKGVyciA8IDAp IHsNCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGF1eDogJWQiLCBlcnIpOw0K KwkJcmV0dXJuIGVycjsNCisJfQ0KKw0KKwlJTklUX1dPUksoJml0NjUwNS0+bGlua193b3Jrcywg aXQ2NTA1X2xpbmtfdHJhaW5pbmdfd29yayk7DQorCUlOSVRfV09SSygmaXQ2NTA1LT5oZGNwX3dh aXRfa3N2X2xpc3QsIGl0NjUwNV9oZGNwX3dhaXRfa3N2X2xpc3QpOw0KKwlJTklUX0RFTEFZRURf V09SSygmaXQ2NTA1LT5oZGNwX3dvcmssIGl0NjUwNV9oZGNwX3dvcmspOw0KKwlpbml0X2NvbXBs ZXRpb24oJml0NjUwNS0+d2FpdF9lZGlkX2NvbXBsZXRlKTsNCisJbWVtc2V0KGl0NjUwNS0+ZHBj ZCwgMCwgc2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOw0KKwlpdDY1MDUtPnBvd2VyZWQgPSBmYWxzZTsN CisJaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQgPSBERUZBVUxUX0RSVl9IT0xEOw0KKw0KKwlpZiAo REVGQVVMVF9QV1JfT04pDQorCQlpdDY1MDVfcG93ZXJvbihpdDY1MDUpOw0KKw0KKwlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJpdDY1MDUgZGV2aWNlIG5hbWU6ICVzIiwgZGV2X25hbWUoZGV2 KSk7DQorCWRlYnVnZnNfaW5pdChpdDY1MDUpOw0KKw0KKwlpdDY1MDUtPmJyaWRnZS5mdW5jcyA9 ICZpdDY1MDVfYnJpZGdlX2Z1bmNzOw0KKwlpdDY1MDUtPmJyaWRnZS50eXBlID0gRFJNX01PREVf Q09OTkVDVE9SX0Rpc3BsYXlQb3J0Ow0KKwlpdDY1MDUtPmJyaWRnZS5vcHMgPSBEUk1fQlJJREdF X09QX0RFVEVDVCB8IERSTV9CUklER0VfT1BfRURJRCB8DQorCQkJICAgICBEUk1fQlJJREdFX09Q X0hQRDsNCisJZHJtX2JyaWRnZV9hZGQoJml0NjUwNS0+YnJpZGdlKTsNCisNCisJcmV0dXJuIDA7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXQ2NTA1X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQg KmNsaWVudCkNCit7DQorCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGkyY19nZXRfY2xpZW50ZGF0 YShjbGllbnQpOw0KKw0KKwlkcm1fYnJpZGdlX3JlbW92ZSgmaXQ2NTA1LT5icmlkZ2UpOw0KKwlk cm1fZHBfYXV4X3VucmVnaXN0ZXIoJml0NjUwNS0+YXV4KTsNCisJaXQ2NTA1X2RlYnVnZnNfcmVt b3ZlKGl0NjUwNSk7DQorCWl0NjUwNV9wb3dlcm9mZihpdDY1MDUpOw0KKw0KKwlyZXR1cm4gMDsN Cit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGl0NjUwNV9pZFtdID0g ew0KKwl7ICJpdDY1MDUiLCAwIH0sDQorCXsgfQ0KK307DQorDQorTU9EVUxFX0RFVklDRV9UQUJM RShpMmMsIGl0NjUwNV9pZCk7DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg aXQ2NTA1X29mX21hdGNoW10gPSB7DQorCXsgLmNvbXBhdGlibGUgPSAiaXRlLGl0NjUwNSIgfSwN CisJeyB9DQorfTsNCisNCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXQ2NTA1X2kyY19kcml2 ZXIgPSB7DQorCS5kcml2ZXIgPSB7DQorCQkubmFtZSA9ICJpdDY1MDUiLA0KKwkJLm9mX21hdGNo X3RhYmxlID0gaXQ2NTA1X29mX21hdGNoLA0KKwkJLnBtID0gJml0NjUwNV9icmlkZ2VfcG1fb3Bz LA0KKwl9LA0KKwkucHJvYmUgPSBpdDY1MDVfaTJjX3Byb2JlLA0KKwkucmVtb3ZlID0gaXQ2NTA1 X2kyY19yZW1vdmUsDQorCS5zaHV0ZG93biA9IGl0NjUwNV9zaHV0ZG93biwNCisJLmlkX3RhYmxl ID0gaXQ2NTA1X2lkLA0KK307DQorDQorbW9kdWxlX2kyY19kcml2ZXIoaXQ2NTA1X2kyY19kcml2 ZXIpOw0KKw0KK01PRFVMRV9BVVRIT1IoIkFsbGVuIENoZW4gPGFsbGVuLmNoZW5AaXRlLmNvbS50 dz4iKTsNCitNT0RVTEVfREVTQ1JJUFRJT04oIklUNjUwNSBEaXNwbGF5UG9ydCBUcmFuc21pdHRl ciBkcml2ZXIiKTsNCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQotLSANCjIuMjUuMQ0KDQo=