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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 09143C54E49 for ; Mon, 26 Feb 2024 10:50:15 +0000 (UTC) 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:CC:To:In-Reply-To:References:Message-ID :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=1O51g8UwOAryBBq86opx6V76pp92M2YZ+sKCXGVJQ3Y=; b=jEIvXxj4d/wnpz 3gbJC6Btm/QENCIkRGkAc26UKV+vqzr+4olDCZ/NN0V0Mm33aXjXSf/bmjBbsz2LqPhmnXYHP32Ct EoPXdBsUYR1+kGQ+1DmuOURSOpGUzlgyLd4Yj6iImAIJB+FC/wGUWfcvu7qAjiqiUi4pq3tYYPam/ fCpo35fF53jnwj4VOJIKYyDxAc25uwAeSqQlvg9s18jXuxswai9fm9PkIqb+a4KPd4S70wnwkWBuZ QO3KJcnk2ydWXLuOHgYF9O72sB7Oo7YGwCRMAoNqy7RLsfyh0jF6S2kiVYqUH2OVObHwntOCflRdH 0DCr1TGifyTiKHbeRpdQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1reYYT-00000000BoM-27Av; Mon, 26 Feb 2024 10:49:53 +0000 Received: from mx07-00178001.pphosted.com ([185.132.182.106]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1reYYJ-00000000BjL-3Bj7 for linux-arm-kernel@lists.infradead.org; Mon, 26 Feb 2024 10:49:47 +0000 Received: from pps.filterd (m0241204.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41QALKTO025578; Mon, 26 Feb 2024 11:49:25 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= from:date:subject:mime-version:content-type :content-transfer-encoding:message-id:references:in-reply-to:to :cc; s=selector1; bh=I06/PkhdU6BSGd3MkjHBXYzqxQjX4PQqk8omwfopWK8 =; b=6G2UIImaZYxNT3605Mwn1sgb1cQKsDsYJtHE02I0dRCZJhfT+Nv7mdO3Dge b7Y1Badm5JE/g9TcjGlC3WW9ZJnrN6Dof7LoRyFSBQOwyBhlEYQ6MevPchq8dzqF D89lxQfnamImzrtBqdNE57M7ZwZJIF0C59OpjYRujBZl+M4FJH1J8UvY1fpnKnKp Z9ZBN2B2tTjyOPpNQsBJH1yRBDtfNwoFql5OzUqs1i+Ar0HK5vHWSZ3GceY3cutn 5Qxg0z2B+iLLdsyZ8gYk+y7kCoicasKSBC74tU+yxiM/BLpkKTtZvvMr0H9vpLbC qJ6I97aM58fAg/srGmq6tnnPKTg== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 3wf8p26knf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 11:49:24 +0100 (CET) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 34B884002D; Mon, 26 Feb 2024 11:49:12 +0100 (CET) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 1F3F4266D10; Mon, 26 Feb 2024 11:48:10 +0100 (CET) Received: from localhost (10.252.9.163) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 26 Feb 2024 11:48:09 +0100 From: Raphael Gallais-Pou Date: Mon, 26 Feb 2024 11:48:06 +0100 Subject: [PATCH v6 2/3] drm/stm: lvds: add new STM32 LVDS Display Interface Transmitter driver MIME-Version: 1.0 Message-ID: <20240226-lvds-v6-2-15e3463fbe70@foss.st.com> References: <20240226-lvds-v6-0-15e3463fbe70@foss.st.com> In-Reply-To: <20240226-lvds-v6-0-15e3463fbe70@foss.st.com> To: David Airlie , Daniel Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Yannick Fertre , Philippe Cornu , Philipp Zabel CC: , , , , , Raphael Gallais-Pou X-Mailer: b4 0.12.4 X-Originating-IP: [10.252.9.163] X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-26_07,2024-02-26_01,2023-05-22_02 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240226_024944_316852_C05DAAC9 X-CRM114-Status: GOOD ( 20.50 ) X-BeenThere: linux-arm-kernel@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="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org VGhlIExvdy1Wb2x0YWdlIERpZmZlcmVudGlhbCBTaWduYWxpbmcgKExWRFMpIERpc3BsYXkgSW50 ZXJmYWNlClRyYW5zbWl0dGVyIGhhbmRsZXMgdGhlIExWRFMgcHJvdG9jb2w6IGl0IG1hcHMgdGhl IHBpeGVscyByZWNlaXZlZCBmcm9tCnRoZSB1cHN0cmVhbSBQaXhlbC1ETUEgTENELVRGVCBEaXNw bGF5IENvbnRyb2xsZXIgKExUREMpIG9udG8gdGhlIExWRFMKUEhZLgoKSXQgaXMgY29tcG9zZWQg b2YgdGhyZWUgc3ViIGJsb2NrczoKCSogTFZEUyBob3N0OiBoYW5kbGVzIHRoZSBMVkRTIHByb3Rv Y29sIChGUEQgLyBPcGVuTERJKSBhbmQgbWFwcwoJICBpdHMgaW5wdXQgcGl4ZWxzIG9udG8gdGhl IGRhdGEgbGFuZXMgb2YgdGhlIFBIWQoJKiBMVkRTIFBIWTogcGFyYWxsZWxpemUgdGhlIGRhdGEg YW5kIGRyaXZlcyB0aGUgTFZEUyBkYXRhIGxhbmVzCgkqIExWRFMgd3JhcHBlcjogaGFuZGxlcyB0 b3AtbGV2ZWwgc2V0dGluZ3MKClRoZSBMVkRTIGNvbnRyb2xsZXIgZHJpdmVyIHN1cHBvcnRzIHRo ZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBmZWF0dXJlczoKCSogRkRQLUxpbmstSSBhbmQgT3BlbkxE SSAodjAuOTUpIHByb3RvY29scwoJKiBTaW5nbGUtTGluayBvciBEdWFsLUxpbmsgb3BlcmF0aW9u CgkqIFNpbmdsZS1EaXNwbGF5IG9yIERvdWJsZS1EaXNwbGF5ICh3aXRoIHRoZSBzYW1lIGNvbnRl bnQKCSAgZHVwbGljYXRlZCBvbiBib3RoKQoJKiBGbGV4aWJsZSBCaXQtTWFwcGluZywgaW5jbHVk aW5nIEpFSURBIGFuZCBWRVNBCgkqIFJHQjg4OCBvciBSR0I2NjYgb3V0cHV0CgkqIFN5bmNocm9u b3VzIGRlc2lnbiwgd2l0aCBvbmUgaW5wdXQgcGl4ZWwgcGVyIGNsb2NrIGN5Y2xlCgpTaWduZWQt b2ZmLWJ5OiBSYXBoYWVsIEdhbGxhaXMtUG91IDxyYXBoYWVsLmdhbGxhaXMtcG91QGZvc3Muc3Qu Y29tPgotLS0KQ2hhbmdlcyBpbiB2NjoKCS0gRml4ZXMgc3BhcnNlIHN5bWJvbHMgZGV0ZWN0ZWQg Ynkga2VybmVsIHRlc3Qgcm9ib3QKCkNoYW5nZXMgaW4gdjU6CgktIEFsaWduIGNvbXBhdGlibGUK CkNoYW5nZXMgaW4gdjQ6CgktIEV4cGxpY2l0bHkgaW5jbHVkZSBsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaCwgZGVwZW5kZW5jeSBpbnRyb2R1Y2VkIGJ5CgllZjE3NWIyOWEyNDIgb2Y6IFN0b3AgY2ly Y3VsYXJseSBpbmNsdWRpbmcgb2ZfZGV2aWNlLmggYW5kIG9mX3BsYXRmb3JtLmgKCkNoYW5nZXMg aW4gdjM6CgktIHMvcmVncm91cHMvaXMgY29tcG9zZWQgb2YvIGluIGNvbW1pdCBsb2cKCS0gQ2hh bmdlIHRoZSBjb21wYXRpYmxlIHRvIHNob3cgU29DIHNwZWNpZmljaXR5CgpDaGFuZ2VzIGluIHYy OgoJLSBGaXhlZCBDYW1lbCBDYXNlIG1hY3JvcwoJLSBSZW1vdmVkIGRlYnVnIGxvZwotLS0KIGRy aXZlcnMvZ3B1L2RybS9zdG0vS2NvbmZpZyAgfCAgIDExICsKIGRyaXZlcnMvZ3B1L2RybS9zdG0v TWFrZWZpbGUgfCAgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9zdG0vbHZkcy5jICAgfCAxMjI2ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2Vk LCAxMjM5IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc3RtL0tj b25maWcgYi9kcml2ZXJzL2dwdS9kcm0vc3RtL0tjb25maWcKaW5kZXggZmE0OWNkZTQzYmIyLi45 NjI3ODE0ZDAyN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zdG0vS2NvbmZpZworKysg Yi9kcml2ZXJzL2dwdS9kcm0vc3RtL0tjb25maWcKQEAgLTIwLDMgKzIwLDE0IEBAIGNvbmZpZyBE Uk1fU1RNX0RTSQogCXNlbGVjdCBEUk1fRFdfTUlQSV9EU0kKIAloZWxwCiAJICBDaG9vc2UgdGhp cyBvcHRpb24gZm9yIE1JUEkgRFNJIHN1cHBvcnQgb24gU1RNaWNyb2VsZWN0cm9uaWNzIFNvQy4K KworY29uZmlnIERSTV9TVE1fTFZEUworCXRyaXN0YXRlICJTVE1pY3JvZWxlY3Ryb25pY3MgTFZE UyBEaXNwbGF5IEludGVyZmFjZSBUcmFuc21pdHRlciBEUk0gZHJpdmVyIgorCWRlcGVuZHMgb24g RFJNX1NUTQorCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciBMVkRTIGVuY29kZXJzIG9uIFNU TWljcm9lbGVjdHJvbmljcyBTb0MuCisJICBUaGUgU1RNIExWRFMgaXMgYSBicmlkZ2Ugd2hpY2gg c2VyaWFsaXplIHBpeGVsIHN0cmVhbSBvbnRvCisJICBhIExWRFMgcHJvdG9jb2wuCisKKwkgIFRv IGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1 bGUgd2lsbCBiZQorCSAgY2FsbGVkIGx2ZHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v c3RtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3N0bS9NYWtlZmlsZQppbmRleCA0ZGY1Y2Fm MDFmMzUuLmFkNzQwZDYxNzVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N0bS9NYWtl ZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vc3RtL01ha2VmaWxlCkBAIC01LDQgKzUsNiBAQCBz dG0tZHJtLXkgOj0gXAogCiBvYmotJChDT05GSUdfRFJNX1NUTV9EU0kpICs9IGR3X21pcGlfZHNp LXN0bS5vCiAKK29iai0kKENPTkZJR19EUk1fU1RNX0xWRFMpICs9IGx2ZHMubworCiBvYmotJChD T05GSUdfRFJNX1NUTSkgKz0gc3RtLWRybS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v c3RtL2x2ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vbHZkcy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYmZjOGNiMTNmYmM1Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3N0bS9sdmRzLmMKQEAgLTAsMCArMSwxMjI2IEBACisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIz LCBTVE1pY3JvZWxlY3Ryb25pY3MgLSBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiBBdXRob3Iocyk6 IFJhcGhhw6tsIEdBTExBSVMtUE9VIDxyYXBoYWVsLmdhbGxhaXMtcG91QGZvc3Muc3QuY29tPiBm b3IgU1RNaWNyb2VsZWN0cm9uaWNzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19o ZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2JyaWRnZS5oPgorI2luY2x1ZGUgPGRybS9kcm1f ZGV2aWNlLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFu ZWwuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wcm9i ZV9oZWxwZXIuaD4KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Ns ay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW9w b2xsLmg+CisjaW5jbHVkZSA8bGludXgvbWVkaWEtYnVzLWZvcm1hdC5oPgorI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisKKy8qIExW RFMgSG9zdCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTFZEU19DUgkJMHgwMDAwICAvKiBjb25maWd1 cmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIExWRFNfRE1MQ1IwCTB4MDAwNCAgLyogZGF0YSBt YXBwaW5nIGxzYiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgTFZEU19ETU1D UjAJMHgwMDA4ICAvKiBkYXRhIG1hcHBpbmcgbXNiIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMCAq LworI2RlZmluZSBMVkRTX0RNTENSMQkweDAwMEMgIC8qIGRhdGEgbWFwcGluZyBsc2IgY29uZmln dXJhdGlvbiByZWdpc3RlciAxICovCisjZGVmaW5lIExWRFNfRE1NQ1IxCTB4MDAxMCAgLyogZGF0 YSBtYXBwaW5nIG1zYiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgTFZEU19E TUxDUjIJMHgwMDE0ICAvKiBkYXRhIG1hcHBpbmcgbHNiIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIg MiAqLworI2RlZmluZSBMVkRTX0RNTUNSMgkweDAwMTggIC8qIGRhdGEgbWFwcGluZyBtc2IgY29u ZmlndXJhdGlvbiByZWdpc3RlciAyICovCisjZGVmaW5lIExWRFNfRE1MQ1IzCTB4MDAxQyAgLyog ZGF0YSBtYXBwaW5nIGxzYiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgTFZE U19ETU1DUjMJMHgwMDIwICAvKiBkYXRhIG1hcHBpbmcgbXNiIGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIgMyAqLworI2RlZmluZSBMVkRTX0RNTENSNAkweDAwMjQgIC8qIGRhdGEgbWFwcGluZyBsc2Ig Y29uZmlndXJhdGlvbiByZWdpc3RlciA0ICovCisjZGVmaW5lIExWRFNfRE1NQ1I0CTB4MDAyOCAg LyogZGF0YSBtYXBwaW5nIG1zYiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUg TFZEU19DREwxQ1IJMHgwMDJDICAvKiBjaGFubmVsIGRpc3RyaWIgbGluayAxIGNvbmZpZ3VyYXRp b24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFZEU19DREwyQ1IJMHgwMDMwICAvKiBjaGFubmVsIGRp c3RyaWIgbGluayAyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKworI2RlZmluZSBDREwxQ1Jf REVGQVVMVAkweDA0MzIxIC8qIERlZmF1bHQgdmFsdWUgZm9yIENETDFDUiAqLworI2RlZmluZSBD REwyQ1JfREVGQVVMVAkweDU5ODc2IC8qIERlZmF1bHQgdmFsdWUgZm9yIENETDJDUiAqLworCisj ZGVmaW5lIExWRFNfRE1MQ1IoYml0KQkoTFZEU19ETUxDUjAgKyAweDggKiAoYml0KSkKKyNkZWZp bmUgTFZEU19ETU1DUihiaXQpCShMVkRTX0RNTUNSMCArIDB4OCAqIChiaXQpKQorCisvKiBMVkRT IFdyYXBwZXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIExWRFNfV0NMS0NSCTB4MTFCMCAgLyogV3Jh cHBlciBjbG9jayBjb250cm9sIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgTFZEU19IV0NGR1IJMHgx RkYwICAvKiBIVyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyCSovCisjZGVmaW5lIExWRFNfVkVSUgkw eDFGRjQgIC8qIFZlcnNpb24gcmVnaXN0ZXIJKi8KKyNkZWZpbmUgTFZEU19JUElEUgkweDFGRjgg IC8qIElkZW50aWZpY2F0aW9uIHJlZ2lzdGVyCSovCisjZGVmaW5lIExWRFNfU0lEUgkweDFGRkMg IC8qIFNpemUgSWRlbnRpZmljYXRpb24gcmVnaXN0ZXIJKi8KKworLyogQml0ZmllbGQgZGVzY3Jp cHRpb24gKi8KKyNkZWZpbmUgQ1JfTFZEU0VOCUJJVCgwKSAgLyogTFZEUyBQSFkgRW5hYmxlICov CisjZGVmaW5lIENSX0hTUE9MCUJJVCgxKSAgLyogSG9yaXpvbnRhbCBTeW5jaHJvbml6YXRpb24g UG9sYXJpdHkgKi8KKyNkZWZpbmUgQ1JfVlNQT0wJQklUKDIpICAvKiBWZXJ0aWNhbCBTeW5jaHJv bml6YXRpb24gUG9sYXJpdHkgKi8KKyNkZWZpbmUgQ1JfREVQT0wJQklUKDMpICAvKiBEYXRhIEVu YWJsZSBQb2xhcml0eSAqLworI2RlZmluZSBDUl9DSQkJQklUKDQpICAvKiBDb250cm9sIEludGVy bmFsIChzb2Z0d2FyZSBjb250cm9sbGVkIGJpdCkgKi8KKyNkZWZpbmUgQ1JfTEtNT0QJQklUKDUp ICAvKiBMaW5rIE1vZGUsIGZvciBib3RoIExpbmtzICovCisjZGVmaW5lIENSX0xLUEhBCUJJVCg2 KSAgLyogTGluayBQaGFzZSwgZm9yIGJvdGggTGlua3MgKi8KKyNkZWZpbmUgQ1JfTEsxUE9MCUdF Tk1BU0soMjAsIDE2KSAgLyogTGluay0xIG91dHB1dCBQb2xhcml0eSAqLworI2RlZmluZSBDUl9M SzJQT0wJR0VOTUFTSygyNSwgMjEpICAvKiBMaW5rLTIgb3V0cHV0IFBvbGFyaXR5ICovCisKKyNk ZWZpbmUgRE1NQ1JfTUFQMAlHRU5NQVNLKDQsIDApIC8qIE1hcHBpbmcgZm9yIGJpdCAwIG9mIGRh dGFsYW5lIHggKi8KKyNkZWZpbmUgRE1NQ1JfTUFQMQlHRU5NQVNLKDksIDUpIC8qIE1hcHBpbmcg Zm9yIGJpdCAxIG9mIGRhdGFsYW5lIHggKi8KKyNkZWZpbmUgRE1NQ1JfTUFQMglHRU5NQVNLKDE0 LCAxMCkgLyogTWFwcGluZyBmb3IgYml0IDIgb2YgZGF0YWxhbmUgeCAqLworI2RlZmluZSBETU1D Ul9NQVAzCUdFTk1BU0soMTksIDE1KSAvKiBNYXBwaW5nIGZvciBiaXQgMyBvZiBkYXRhbGFuZSB4 ICovCisjZGVmaW5lIERNTENSX01BUDQJR0VOTUFTSyg0LCAwKSAvKiBNYXBwaW5nIGZvciBiaXQg NCBvZiBkYXRhbGFuZSB4ICovCisjZGVmaW5lIERNTENSX01BUDUJR0VOTUFTSyg5LCA1KSAvKiBN YXBwaW5nIGZvciBiaXQgNSBvZiBkYXRhbGFuZSB4ICovCisjZGVmaW5lIERNTENSX01BUDYJR0VO TUFTSygxNCwgMTApIC8qIE1hcHBpbmcgZm9yIGJpdCA2IG9mIGRhdGFsYW5lIHggKi8KKworI2Rl ZmluZSBDRExDUl9ESVNUUjAJR0VOTUFTSygzLCAwKSAvKiBDaGFubmVsIGRpc3RyaWJ1dGlvbiBm b3IgbGFuZSAwICovCisjZGVmaW5lIENETENSX0RJU1RSMQlHRU5NQVNLKDcsIDQpIC8qIENoYW5u ZWwgZGlzdHJpYnV0aW9uIGZvciBsYW5lIDEgKi8KKyNkZWZpbmUgQ0RMQ1JfRElTVFIyCUdFTk1B U0soMTEsIDgpIC8qIENoYW5uZWwgZGlzdHJpYnV0aW9uIGZvciBsYW5lIDIgKi8KKyNkZWZpbmUg Q0RMQ1JfRElTVFIzCUdFTk1BU0soMTUsIDEyKSAvKiBDaGFubmVsIGRpc3RyaWJ1dGlvbiBmb3Ig bGFuZSAzICovCisjZGVmaW5lIENETENSX0RJU1RSNAlHRU5NQVNLKDE5LCAxNikgLyogQ2hhbm5l bCBkaXN0cmlidXRpb24gZm9yIGxhbmUgNCAqLworCisjZGVmaW5lIFBIWV9HQ1JfQklUX0NMS19P VVQJQklUKDApICAvKiBCSVQgY2xvY2sgZW5hYmxlICovCisjZGVmaW5lIFBIWV9HQ1JfTFNfQ0xL X09VVAlCSVQoNCkgIC8qIExTIGNsb2NrIGVuYWJsZSAqLworI2RlZmluZSBQSFlfR0NSX0RQX0NM S19PVVQJQklUKDgpICAvKiBEUCBjbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgUEhZX0dDUl9SU1Ra CQlCSVQoMjQpIC8qIExWRFMgUEhZIGRpZ2l0YWwgcmVzZXQgKi8KKyNkZWZpbmUgUEhZX0dDUl9E SVZfUlNUTglCSVQoMjUpIC8qIE91dHB1dCBkaXZpZGVyIHJlc2V0ICovCisjZGVmaW5lIFBIWV9T Q1JfVFhfRU4JCUJJVCgxNikgLyogVHJhbnNtaXNzaW9uIG1vZGUgZW5hYmxlICovCisvKiBDdXJy ZW50IG1vZGUgZHJpdmVyIGVuYWJsZSAqLworI2RlZmluZSBQSFlfQ01DUl9DTV9FTl9ETAkoQklU KDI4KSB8IEJJVCgyMCkgfCBCSVQoMTIpIHwgQklUKDQpKQorI2RlZmluZSBQSFlfQ01DUl9DTV9F Tl9ETDQJQklUKDQpCisvKiBCaWFzIGVuYWJsZSAqLworI2RlZmluZSBQSFlfQkNSMV9FTl9CSUFT X0RMCShCSVQoMTYpIHwgQklUKDEyKSB8IEJJVCg4KSB8IEJJVCg0KSB8IEJJVCgwKSkKKyNkZWZp bmUgUEhZX0JDUjJfQklBU19FTglCSVQoMjgpCisvKiBWb2x0YWdlIG1vZGUgZHJpdmVyIGVuYWJs ZSAqLworI2RlZmluZSBQSFlfQkNSM19WTV9FTl9ETAkoQklUKDE2KSB8IEJJVCgxMikgfCBCSVQo OCkgfCBCSVQoNCkgfCBCSVQoMCkpCisjZGVmaW5lIFBIWV9EQ1JfUE9XRVJfT0sJQklUKDEyKQor I2RlZmluZSBQSFlfQ0ZHQ1JfRU5fRElHX0RMCUdFTk1BU0soNCwgMCkgLyogTFZEUyBQSFkgZGln aXRhbCBsYW5lIGVuYWJsZSAqLworI2RlZmluZSBQSFlfUExMQ1IxX1BMTF9FTglCSVQoMCkgLyog TFZEUyBQSFkgUExMIGVuYWJsZSAqLworI2RlZmluZSBQSFlfUExMQ1IxX0VOX1NECUJJVCgxKSAv KiBMVkRTIFBIWSBQTEwgc2lnbWEtZGVsdGEgc2lnbmFsIGVuYWJsZSAqLworI2RlZmluZSBQSFlf UExMQ1IxX0VOX1RXRwlCSVQoMikgLyogTFZEUyBQSFkgUExMIHRyaWFuZ3VsYXIgd2F2ZSBnZW5l cmF0b3IgZW5hYmxlICovCisjZGVmaW5lIFBIWV9QTExDUjFfRElWX0VOCUJJVCg4KSAvKiBMVkRT IFBIWSBQTEwgZGl2aWRlcnMgZW5hYmxlICovCisjZGVmaW5lIFBIWV9QTExDUjJfTkRJVgkJR0VO TUFTSygyNSwgMTYpIC8qIE5ESVYgbWFzayB2YWx1ZSAqLworI2RlZmluZSBQSFlfUExMQ1IyX0JE SVYJCUdFTk1BU0soOSwgMCkgICAvKiBCRElWIG1hc2sgdmFsdWUgKi8KKyNkZWZpbmUgUEhZX1BM TFNSX1BMTF9MT0NLCUJJVCgwKSAvKiBMVkRTIFBIWSBQTEwgbG9jayBzdGF0dXMgKi8KKyNkZWZp bmUgUEhZX1BMTFNEQ1IxX01ESVYJR0VOTUFTSyg5LCAwKSAgIC8qIE1ESVYgbWFzayB2YWx1ZSAq LworI2RlZmluZSBQSFlfUExMVEVTVENSX1RESVYJR0VOTUFTSygyNSwgMTYpIC8qIFRESVYgbWFz ayB2YWx1ZSAqLworI2RlZmluZSBQSFlfUExMVEVTVENSX0NMS19FTglCSVQoMCkgLyogVGVzdCBj bG9jayBlbmFibGUgKi8KKyNkZWZpbmUgUEhZX1BMTFRFU1RDUl9FTglCSVQoOCkgLyogVGVzdCBk aXZpZGVyIG91dHB1dCBlbmFibGUgKi8KKworI2RlZmluZSBXQ0xLQ1JfU0VDTkRfQ0xLUElYX1NF TAlCSVQoMCkgLyogUGl4ZWwgY2xvY2sgc2VsZWN0aW9uICovCisjZGVmaW5lIFdDTEtDUl9TUkNT RUwJCUJJVCg4KSAvKiBTb3VyY2Ugc2VsZWN0aW9uIGZvciB0aGUgcGl4ZWwgY2xvY2sgKi8KKwor LyogU2xlZXAgJiB0aW1lb3V0IGZvciBwbGwgbG9jay91bmxvY2sgKi8KKyNkZWZpbmUgU0xFRVBf VVMJMTAwMAorI2RlZmluZSBUSU1FT1VUX1VTCTIwMDAwMAorCisvKgorICogVGhlIGxpbmsgcGhh c2UgZGVmaW5lcyB3aGV0aGVyIGFuIE9ERCBwaXhlbCBpcyBjYXJyaWVkIG92ZXIgdG9nZXRoZXIg d2l0aAorICogdGhlIG5leHQgRVZFTiBwaXhlbCBvciB0b2dldGhlciB3aXRoIHRoZSBwcmV2aW91 cyBFVkVOIHBpeGVsLgorICoKKyAqIExWRFNfRFVBTF9MSU5LX0VWRU5fT0REX1BJWEVMUyAoTEtQ SEEgPSAwKQorICoKKyAqICwtLS0tLS0tLS4gICwtLS0tLS0tLS4gICwtLS0tLS0tLS4gICwtLS0t LS0tLS4gICwtLS0tLS0tLS0uCisgKiB8IE9ERCAgTEsgXC8gUElYRUwgIDMgXC8gUElYRUwgIDEg XC8gUElYRUwnIDEgXC8gUElYRUwnIDMgfAorICogfCBFVkVOIExLIC9cIFBJWEVMICAyIC9cIFBJ WEVMJyAwIC9cIFBJWEVMJyAyIC9cIFBJWEVMJyA0IHwKKyAqIGAtLS0tLS0tLScgIGAtLS0tLS0t LScgIGAtLS0tLS0tLScgIGAtLS0tLS0tLScgIGAtLS0tLS0tLS0nCisgKgorICogTFZEU19EVUFM X0xJTktfT0REX0VWRU5fUElYRUxTIChMS1BIQSA9IDEpCisgKgorICogLC0tLS0tLS0tLiAgLC0t LS0tLS0tLiAgLC0tLS0tLS0tLiAgLC0tLS0tLS0tLiAgLC0tLS0tLS0tLS4KKyAqIHwgT0REICBM SyBcLyBQSVhFTCAgMyBcLyBQSVhFTCAgMSBcLyBQSVhFTCcgMSBcLyBQSVhFTCcgMyB8CisgKiB8 IEVWRU4gTEsgL1wgUElYRUwgIDQgL1wgUElYRUwgIDIgL1wgUElYRUwnIDAgL1wgUElYRUwnIDIg fAorICogYC0tLS0tLS0tJyAgYC0tLS0tLS0tJyAgYC0tLS0tLS0tJyAgYC0tLS0tLS0tJyAgYC0t LS0tLS0tLScKKyAqCisgKi8KK2VudW0gbHZkc19saW5rX3R5cGUgeworCUxWRFNfU0lOR0xFX0xJ TktfUFJJTUFSWSA9IDAsCisJTFZEU19TSU5HTEVfTElOS19TRUNPTkRBUlksCisJTFZEU19EVUFM X0xJTktfRVZFTl9PRERfUElYRUxTLAorCUxWRFNfRFVBTF9MSU5LX09ERF9FVkVOX1BJWEVMUywK K307CisKK2VudW0gbHZkc19waXhlbCB7CisJUElYX1JfMCA9IDAsCisJUElYX1JfMSwKKwlQSVhf Ul8yLAorCVBJWF9SXzMsCisJUElYX1JfNCwKKwlQSVhfUl81LAorCVBJWF9SXzYsCisJUElYX1Jf NywKKwlQSVhfR18wLAorCVBJWF9HXzEsCisJUElYX0dfMiwKKwlQSVhfR18zLAorCVBJWF9HXzQs CisJUElYX0dfNSwKKwlQSVhfR182LAorCVBJWF9HXzcsCisJUElYX0JfMCwKKwlQSVhfQl8xLAor CVBJWF9CXzIsCisJUElYX0JfMywKKwlQSVhfQl80LAorCVBJWF9CXzUsCisJUElYX0JfNiwKKwlQ SVhfQl83LAorCVBJWF9IX1MsCisJUElYX1ZfUywKKwlQSVhfRF9FLAorCVBJWF9DX0UsCisJUElY X0NfSSwKKwlQSVhfVE9HLAorCVBJWF9PTkUsCisJUElYX1pFUiwKK307CisKK3N0cnVjdCBwaHlf cmVnX29mZnNldHMgeworCXUzMiBHQ1I7CS8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyCSovCisJ dTMyIENNQ1IxOyAgICAvKiBDdXJyZW50IE1vZGUgQ29udHJvbCBSZWdpc3RlciAxICovCisJdTMy IENNQ1IyOyAgICAvKiBDdXJyZW50IE1vZGUgQ29udHJvbCBSZWdpc3RlciAyICovCisJdTMyIFND UjsgICAgICAvKiBTZXJpYWwgQ29udHJvbCBSZWdpc3RlcgkqLworCXUzMiBCQ1IxOyAgICAgLyog QmlhcyBDb250cm9sIFJlZ2lzdGVyIDEJKi8KKwl1MzIgQkNSMjsgICAgIC8qIEJpYXMgQ29udHJv bCBSZWdpc3RlciAyCSovCisJdTMyIEJDUjM7ICAgICAvKiBCaWFzIENvbnRyb2wgUmVnaXN0ZXIg MwkqLworCXUzMiBNUExDUjsgICAgLyogTW9uaXRvciBQTEwgTG9jayBDb250cm9sIFJlZ2lzdGVy ICovCisJdTMyIERDUjsgICAgICAvKiBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyCSovCisJdTMyIFNT UjE7ICAgICAvKiBTcGFyZSBTdGF0dXMgUmVnaXN0ZXIgMQkqLworCXUzMiBDRkdDUjsgICAgLyog Q29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyICovCisJdTMyIFBMTENSMTsgICAvKiBQTExf TU9ERSAxIENvbnRyb2wgUmVnaXN0ZXIJKi8KKwl1MzIgUExMQ1IyOyAgIC8qIFBMTF9NT0RFIDIg Q29udHJvbCBSZWdpc3RlcgkqLworCXUzMiBQTExTUjsgICAgLyogUExMIFN0YXR1cyBSZWdpc3Rl cgkqLworCXUzMiBQTExTRENSMTsgLyogUExMX1NEXzEgQ29udHJvbCBSZWdpc3RlcgkqLworCXUz MiBQTExTRENSMjsgLyogUExMX1NEXzIgQ29udHJvbCBSZWdpc3RlcgkqLworCXUzMiBQTExUV0dD UjE7LyogUExMX1RXR18xIENvbnRyb2wgUmVnaXN0ZXIJKi8KKwl1MzIgUExMVFdHQ1IyOy8qIFBM TF9UV0dfMiBDb250cm9sIFJlZ2lzdGVyCSovCisJdTMyIFBMTENQQ1I7ICAvKiBQTExfQ1AgQ29u dHJvbCBSZWdpc3RlcgkqLworCXUzMiBQTExURVNUQ1I7LyogUExMX1RFU1QgQ29udHJvbCBSZWdp c3RlcgkqLworfTsKKworc3RydWN0IGx2ZHNfcGh5X2luZm8geworCXUzMiBiYXNlOworCXN0cnVj dCBwaHlfcmVnX29mZnNldHMgb2ZzOworfTsKKworc3RhdGljIHN0cnVjdCBsdmRzX3BoeV9pbmZv IGx2ZHNfcGh5XzE2ZmZfcHJpbWFyeSA9IHsKKwkuYmFzZSA9IDB4MTAwMCwKKwkub2ZzID0gewor CQkuR0NSID0gMHgwLAorCQkuQ01DUjEgPSAweEMsCisJCS5DTUNSMiA9IDB4MTAsCisJCS5TQ1Ig PSAweDIwLAorCQkuQkNSMSA9IDB4MkMsCisJCS5CQ1IyID0gMHgzMCwKKwkJLkJDUjMgPSAweDM0 LAorCQkuTVBMQ1IgPSAweDY0LAorCQkuRENSID0gMHg4NCwKKwkJLlNTUjEgPSAweDg4LAorCQku Q0ZHQ1IgPSAweEEwLAorCQkuUExMQ1IxID0gMHhDMCwKKwkJLlBMTENSMiA9IDB4QzQsCisJCS5Q TExTUiA9IDB4QzgsCisJCS5QTExTRENSMSA9IDB4Q0MsCisJCS5QTExTRENSMiA9IDB4RDAsCisJ CS5QTExUV0dDUjEgPSAweEQ0LAorCQkuUExMVFdHQ1IyID0gMHhEOCwKKwkJLlBMTENQQ1IgPSAw eEUwLAorCQkuUExMVEVTVENSID0gMHhFOCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGx2ZHNf cGh5X2luZm8gbHZkc19waHlfMTZmZl9zZWNvbmRhcnkgPSB7CisJLmJhc2UgPSAweDExMDAsCisJ Lm9mcyA9IHsKKwkJLkdDUiA9IDB4MCwKKwkJLkNNQ1IxID0gMHhDLAorCQkuQ01DUjIgPSAweDEw LAorCQkuU0NSID0gMHgyMCwKKwkJLkJDUjEgPSAweDJDLAorCQkuQkNSMiA9IDB4MzAsCisJCS5C Q1IzID0gMHgzNCwKKwkJLk1QTENSID0gMHg2NCwKKwkJLkRDUiA9IDB4ODQsCisJCS5TU1IxID0g MHg4OCwKKwkJLkNGR0NSID0gMHhBMCwKKwkJLlBMTENSMSA9IDB4QzAsCisJCS5QTExDUjIgPSAw eEM0LAorCQkuUExMU1IgPSAweEM4LAorCQkuUExMU0RDUjEgPSAweENDLAorCQkuUExMU0RDUjIg PSAweEQwLAorCQkuUExMVFdHQ1IxID0gMHhENCwKKwkJLlBMTFRXR0NSMiA9IDB4RDgsCisJCS5Q TExDUENSID0gMHhFMCwKKwkJLlBMTFRFU1RDUiA9IDB4RTgsCisJfQorfTsKKworc3RydWN0IHN0 bV9sdmRzIHsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0 cnVjdCBjbGsgKnBjbGs7CQkvKiBBUEIgcGVyaXBoZXJhbCBjbG9jayAqLworCXN0cnVjdCBjbGsg KnBsbHJlZl9jbGs7CQkvKiBSZWZlcmVuY2UgY2xvY2sgZm9yIHRoZSBpbnRlcm5hbCBQTEwgKi8K KwlzdHJ1Y3QgY2xrX2h3IGx2ZHNfY2tfcHg7CS8qIFBpeGVsIGNsb2NrICovCisJdTMyIHBpeGVs X2Nsb2NrX3JhdGU7CQkvKiBQaXhlbCBjbG9jayByYXRlICovCisKKwlzdHJ1Y3QgbHZkc19waHlf aW5mbyAqcHJpbWFyeTsKKwlzdHJ1Y3QgbHZkc19waHlfaW5mbyAqc2Vjb25kYXJ5OworCisJc3Ry dWN0IGRybV9icmlkZ2UgbHZkc19icmlkZ2U7CisJc3RydWN0IGRybV9icmlkZ2UgKm5leHRfYnJp ZGdlOworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7CisKKwl1MzIgaHdfdmVyc2lv bjsKKwl1MzIgbGlua190eXBlOworfTsKKworI2RlZmluZSBicmlkZ2VfdG9fc3RtX2x2ZHMoYikg XAorCWNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgc3RtX2x2ZHMsIGx2ZHNfYnJpZGdlKQorCisjZGVm aW5lIGNvbm5lY3Rvcl90b19zdG1fbHZkcyhjKSBcCisJY29udGFpbmVyX29mKGMsIHN0cnVjdCBz dG1fbHZkcywgY29ubmVjdG9yKQorCisjZGVmaW5lIGx2ZHNfaXNfZHVhbF9saW5rKGx2ZHMpIFwK KwkoewlcCisJdHlwZW9mKGx2ZHMpIF9fbHZkcyA9IChsdmRzKTsJXAorCV9fbHZkcyA9PSBMVkRT X0RVQUxfTElOS19FVkVOX09ERF9QSVhFTFMgfHwJXAorCV9fbHZkcyA9PSBMVkRTX0RVQUxfTElO S19PRERfRVZFTl9QSVhFTFM7CVwKKwl9KQorCitzdGF0aWMgaW5saW5lIHZvaWQgbHZkc193cml0 ZShzdHJ1Y3Qgc3RtX2x2ZHMgKmx2ZHMsIHUzMiByZWcsIHUzMiB2YWwpCit7CisJd3JpdGVsKHZh bCwgbHZkcy0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGx2ZHNfcmVhZChz dHJ1Y3Qgc3RtX2x2ZHMgKmx2ZHMsIHUzMiByZWcpCit7CisJcmV0dXJuIHJlYWRsKGx2ZHMtPmJh c2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbHZkc19zZXQoc3RydWN0IHN0bV9s dmRzICpsdmRzLCB1MzIgcmVnLCB1MzIgbWFzaykKK3sKKwlsdmRzX3dyaXRlKGx2ZHMsIHJlZywg bHZkc19yZWFkKGx2ZHMsIHJlZykgfCBtYXNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGx2 ZHNfY2xlYXIoc3RydWN0IHN0bV9sdmRzICpsdmRzLCB1MzIgcmVnLCB1MzIgbWFzaykKK3sKKwls dmRzX3dyaXRlKGx2ZHMsIHJlZywgbHZkc19yZWFkKGx2ZHMsIHJlZykgJiB+bWFzayk7Cit9CisK Ky8qCisgKiBFeHBlY3RlZCBKRUlEQS1SR0I4ODggZGF0YSB0byBiZSBzZW50IGluIExTQiBmb3Jt YXQKKyAqCSAgICBiaXQ2IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5iaXQwCisgKiBDSEFO MCAgIHtPTkUsIE9ORSwgWkVSTywgWkVSTywgWkVSTywgT05FLCBPTkV9CisgKiBDSEFOMSAgIHtH MiwgIFI3LCAgUjYsICAgUjUsICAgUjQsICAgUjMsICBSMn0KKyAqIENIQU4yICAge0IzLCAgQjIs ICBHNywgICBHNiwgICBHNSwgICBHNCwgIEczfQorICogQ0hBTjMgICB7REUsICBWUywgIEhTLCAg IEI3LCAgIEI2LCAgIEI1LCAgQjR9CisgKiBDSEFONCAgIHtDRSwgIEIxLCAgQjAsICAgRzEsICAg RzAsICAgUjEsICBSMH0KKyAqLworc3RhdGljIGVudW0gbHZkc19waXhlbCBsdmRzX2JpdG1hcF9q ZWlkYV9yZ2I4ODhbNV1bN10gPSB7CisJeyBQSVhfT05FLCBQSVhfT05FLCBQSVhfWkVSLCBQSVhf WkVSLCBQSVhfWkVSLCBQSVhfT05FLCBQSVhfT05FIH0sCisJeyBQSVhfR18yLCBQSVhfUl83LCBQ SVhfUl82LCBQSVhfUl81LCBQSVhfUl80LCBQSVhfUl8zLCBQSVhfUl8yIH0sCisJeyBQSVhfQl8z LCBQSVhfQl8yLCBQSVhfR183LCBQSVhfR182LCBQSVhfR181LCBQSVhfR180LCBQSVhfR18zIH0s CisJeyBQSVhfRF9FLCBQSVhfVl9TLCBQSVhfSF9TLCBQSVhfQl83LCBQSVhfQl82LCBQSVhfQl81 LCBQSVhfQl80IH0sCisJeyBQSVhfQ19FLCBQSVhfQl8xLCBQSVhfQl8wLCBQSVhfR18xLCBQSVhf R18wLCBQSVhfUl8xLCBQSVhfUl8wIH0KK307CisKKy8qCisgKiBFeHBlY3RlZCBWRVNBLVJHQjg4 OCBkYXRhIHRvIGJlIHNlbnQgaW4gTFNCIGZvcm1hdAorICoJICAgIGJpdDYgLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLmJpdDAKKyAqIENIQU4wICAge09ORSwgT05FLCBaRVJPLCBaRVJPLCBa RVJPLCBPTkUsIE9ORX0KKyAqIENIQU4xICAge0cwLCAgUjUsICBSNCwgICBSMywgICBSMiwgICBS MSwgIFIwfQorICogQ0hBTjIgICB7QjEsICBCMCwgIEc1LCAgIEc0LCAgIEczLCAgIEcyLCAgRzF9 CisgKiBDSEFOMyAgIHtERSwgIFZTLCAgSFMsICAgQjUsICAgQjQsICAgQjMsICBCMn0KKyAqIENI QU40ICAge0NFLCAgQjcsICBCNiwgICBHNywgICBHNiwgICBSNywgIFI2fQorICovCitzdGF0aWMg ZW51bSBsdmRzX3BpeGVsIGx2ZHNfYml0bWFwX3Zlc2FfcmdiODg4WzVdWzddID0geworCXsgUElY X09ORSwgUElYX09ORSwgUElYX1pFUiwgUElYX1pFUiwgUElYX1pFUiwgUElYX09ORSwgUElYX09O RSB9LAorCXsgUElYX0dfMCwgUElYX1JfNSwgUElYX1JfNCwgUElYX1JfMywgUElYX1JfMiwgUElY X1JfMSwgUElYX1JfMCB9LAorCXsgUElYX0JfMSwgUElYX0JfMCwgUElYX0dfNSwgUElYX0dfNCwg UElYX0dfMywgUElYX0dfMiwgUElYX0dfMSB9LAorCXsgUElYX0RfRSwgUElYX1ZfUywgUElYX0hf UywgUElYX0JfNSwgUElYX0JfNCwgUElYX0JfMywgUElYX0JfMiB9LAorCXsgUElYX0NfRSwgUElY X0JfNywgUElYX0JfNiwgUElYX0dfNywgUElYX0dfNiwgUElYX1JfNywgUElYX1JfNiB9Cit9Owor CisvKgorICogQ2xvY2tzIGFuZCBQSFkgcmVsYXRlZCBmdW5jdGlvbnMKKyAqLworc3RhdGljIGlu dCBsdmRzX3BsbF9lbmFibGUoc3RydWN0IHN0bV9sdmRzICpsdmRzLCBzdHJ1Y3QgbHZkc19waHlf aW5mbyAqcGh5KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBsdmRzLT5sdmRzX2JyaWRn ZS5kZXY7CisJdTMyIGx2ZHNfZ2NyOworCWludCB2YWwsIHJldDsKKworCS8qCisJICogUExMIGxv Y2sgdGltaW5nIGNvbnRyb2wgZm9yIHRoZSBtb25pdG9yIHVubWFzayBhZnRlciBzdGFydHVwIChw bGxfZW4pCisJICogQWRqdXN0ZWQgdmFsdWUgc28gdGhhdCB0aGUgbWFza2luZyB3aW5kb3cgaXMg b3BlbmVkIGF0IHN0YXJ0LXVwCisJICovCisJbHZkc193cml0ZShsdmRzLCBwaHktPmJhc2UgKyBw aHktPm9mcy5NUExDUiwgKDB4MjAwIC0gMHgxNjApIDw8IDE2KTsKKworCS8qIEVuYWJsZSBiaWFz ICovCisJbHZkc193cml0ZShsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5CQ1IyLCBQSFlfQkNS Ml9CSUFTX0VOKTsKKworCS8qIEVuYWJsZSBEUCwgTFMsIEJJVCBjbG9jayBvdXRwdXQgKi8KKwls dmRzX2djciA9IFBIWV9HQ1JfRFBfQ0xLX09VVCB8IFBIWV9HQ1JfTFNfQ0xLX09VVCB8IFBIWV9H Q1JfQklUX0NMS19PVVQ7CisJbHZkc19zZXQobHZkcywgcGh5LT5iYXNlICsgcGh5LT5vZnMuR0NS LCBsdmRzX2djcik7CisKKwkvKiBQb3dlciB1cCBhbGwgb3V0cHV0IGRpdmlkZXJzICovCisJbHZk c19zZXQobHZkcywgcGh5LT5iYXNlICsgcGh5LT5vZnMuUExMVEVTVENSLCBQSFlfUExMVEVTVENS X0VOKTsKKwlsdmRzX3NldChsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5QTExDUjEsIFBIWV9Q TExDUjFfRElWX0VOKTsKKworCS8qIFNldCBQSFkgaW4gc2VyaWFsIHRyYW5zbWlzc2lvbiBtb2Rl ICovCisJbHZkc19zZXQobHZkcywgcGh5LT5iYXNlICsgcGh5LT5vZnMuU0NSLCBQSFlfU0NSX1RY X0VOKTsKKworCS8qIEVuYWJsZSB0aGUgTFZEUyBQTEwgJiB3YWl0IGZvciBpdHMgbG9jayAqLwor CWx2ZHNfc2V0KGx2ZHMsIHBoeS0+YmFzZSArIHBoeS0+b2ZzLlBMTENSMSwgUEhZX1BMTENSMV9Q TExfRU4pOworCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dF9hdG9taWMobHZkcy0+YmFzZSArIHBo eS0+YmFzZSArIHBoeS0+b2ZzLlBMTFNSLAorCQkJCQl2YWwsIHZhbCAmIFBIWV9QTExTUl9QTExf TE9DSywKKwkJCQkJU0xFRVBfVVMsIFRJTUVPVVRfVVMpOworCWlmIChyZXQpCisJCWRybV9lcnIo ZHJtLCAiIVRJTUVPVVQhIHdhaXRpbmcgUExMLCBsZXQncyBjb250aW51ZVxuIik7CisKKwkvKiBX Q0xLQ1JfU0VDTkRfQ0xLUElYX1NFTCBpcyBmb3IgZHVhbCBsaW5rICovCisJbHZkc193cml0ZShs dmRzLCBMVkRTX1dDTEtDUiwgV0NMS0NSX1NFQ05EX0NMS1BJWF9TRUwpOworCisJbHZkc19zZXQo bHZkcywgcGh5LT5vZnMuUExMVEVTVENSLCBQSFlfUExMVEVTVENSX0NMS19FTik7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBsbF9nZXRfY2xrb3V0X2toeihpbnQgY2xraW5fa2h6 LCBpbnQgYmRpdiwgaW50IG1kaXYsIGludCBuZGl2KQoreworCWludCBkaXZpc29yID0gbmRpdiAq IGJkaXY7CisKKwkvKiBQcmV2ZW50cyBmcm9tIGRpdmlzaW9uIGJ5IDAgKi8KKwlpZiAoIWRpdmlz b3IpCisJCXJldHVybiAwOworCisJcmV0dXJuIGNsa2luX2toeiAqIG1kaXYgLyBkaXZpc29yOwor fQorCisjZGVmaW5lIFRESVYJNzAKKyNkZWZpbmUgTkRJVl9NSU4JMgorI2RlZmluZSBORElWX01B WAk2CisjZGVmaW5lIEJESVZfTUlOCTIKKyNkZWZpbmUgQkRJVl9NQVgJNgorI2RlZmluZSBNRElW X01JTgkxCisjZGVmaW5lIE1ESVZfTUFYCTEwMjMKKworc3RhdGljIGludCBsdmRzX3BsbF9nZXRf cGFyYW1zKHN0cnVjdCBzdG1fbHZkcyAqbHZkcywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2xr aW5fa2h6LCB1bnNpZ25lZCBpbnQgY2xrb3V0X2toeiwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQg KmJkaXYsIHVuc2lnbmVkIGludCAqbWRpdiwgdW5zaWduZWQgaW50ICpuZGl2KQoreworCWludCBk ZWx0YSwgYmVzdF9kZWx0YTsgLyogYWxsIGluIGtoeiAqLworCWludCBpLCBvLCBuOworCisJLyog RWFybHkgY2hlY2tzIHByZXZlbnRpbmcgZGl2aXNpb24gYnkgMCAmIG9kZCByZXN1bHRzICovCisJ aWYgKGNsa2luX2toeiA8PSAwIHx8IGNsa291dF9raHogPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwliZXN0X2RlbHRhID0gMTAwMDAwMDsgLyogYmlnIHN0YXJ0ZWQgdmFsdWUgKDEwMDAwMDBr aHopICovCisKKwlmb3IgKGkgPSBORElWX01JTjsgaSA8PSBORElWX01BWDsgaSsrKSB7CisJCWZv ciAobyA9IEJESVZfTUlOOyBvIDw9IEJESVZfTUFYOyBvKyspIHsKKwkJCW4gPSBESVZfUk9VTkRf Q0xPU0VTVChpICogbyAqIGNsa291dF9raHosIGNsa2luX2toeik7CisJCQkvKiBDaGVjayBuZGl2 IGFjY29yZGluZyB0byB2Y28gcmFuZ2UgKi8KKwkJCWlmIChuIDwgTURJVl9NSU4gfHwgbiA+IE1E SVZfTUFYKQorCQkJCWNvbnRpbnVlOworCQkJLyogQ2hlY2sgaWYgbmV3IGRlbHRhIGlzIGJldHRl ciAmIHNhdmVzIHBhcmFtZXRlcnMgKi8KKwkJCWRlbHRhID0gcGxsX2dldF9jbGtvdXRfa2h6KGNs a2luX2toeiwgaSwgbiwgbykgLSBjbGtvdXRfa2h6OworCQkJaWYgKGRlbHRhIDwgMCkKKwkJCQlk ZWx0YSA9IC1kZWx0YTsKKwkJCWlmIChkZWx0YSA8IGJlc3RfZGVsdGEpIHsKKwkJCQkqbmRpdiA9 IGk7CisJCQkJKm1kaXYgPSBuOworCQkJCSpiZGl2ID0gbzsKKwkJCQliZXN0X2RlbHRhID0gZGVs dGE7CisJCQl9CisJCQkvKiBmYXN0IHJldHVybiBpbiBjYXNlIG9mICJwZXJmZWN0IHJlc3VsdCIg Ki8KKwkJCWlmICghZGVsdGEpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgbHZkc19wbGxfY29uZmlnKHN0cnVjdCBzdG1fbHZkcyAqbHZkcywg c3RydWN0IGx2ZHNfcGh5X2luZm8gKnBoeSkKK3sKKwl1bnNpZ25lZCBpbnQgcGxsX2luX2toeiwg YmRpdiA9IDAsIG1kaXYgPSAwLCBuZGl2ID0gMDsKKwlzdHJ1Y3QgY2xrX2h3ICpod2NsazsKKwlp bnQgbXVsdGlwbGllcjsKKworCS8qCisJICogVGhlIExWRFMgUEhZIGluY2x1ZGVzIGEgbG93IHBv d2VyIGxvdyBqaXR0ZXIgaGlnaCBwZXJmb3JtYW5jZSBhbmQKKwkgKiBoaWdobHkgY29uZmlndXJh dGlvbiBQaGFzZSBMb2NrZWQgTG9vcCBzdXBwb3J0aW5nIGludGVnZXIgYW5kCisJICogZnJhY3Rp b25hbCBtdWx0aXBsaWNhdGlvbiByYXRpb3MgYW5kIFNwcmVhZCBTcGVjdHJ1bSBDbG9ja2luZy4g IEluCisJICogaW50ZWdlciBtb2RlLCB0aGUgb25seSBzb2Z0d2FyZSBzdXBwb3J0ZWQgZmVhdHVy ZSBmb3Igbm93LCB0aGUgUExMIGlzCisJICogbWFkZSBvZiBhIHByZS1kaXZpZGVyIE5ESVYsIGEg ZmVlZGJhY2sgbXVsdGlwbGllciBNRElWLCBmb2xsb3dlZCBieQorCSAqIHNldmVyYWwgcG9zdC1k aXZpZGVycywgZWFjaCBvbmUgd2l0aCBhIHNwZWNpZmljIGFwcGxpY2F0aW9uLgorCSAqCisJICog ICAgICAgICAgLC0tLS0tLS4gICAgICAgICAsLS0tLS0uICAgICAsLS0tLS0uCisJICogRnJlZiAt LT4gfCBORElWIHwgLUZwZGYtPiB8IFBGRCB8IC0tPiB8IFZDTyB8IC0tLS0tLS0tPiBGdmNvCisJ ICogICAgICAgICAgYC0tLS0tLScgICAgICwtPiB8ICAgICB8ICAgICBgLS0tLS0nICB8CisJICog ICAgICAgICAgICAgICAgICAgICAgIHwgICBgLS0tLS0nICAgICAgICAgICAgICB8CisJICogICAg ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAsLS0tLS0tLiAgICAgICB8CisJICogICAgICAg ICAgICAgICAgICAgICAgIGAtLS0tLS0tLSB8IE1ESVYgfCA8LS0tLS0nCisJICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBgLS0tLS0tJworCSAqCisJICogRnJvbSB0aGUgb3V0cHV0 IG9mIHRoZSBWQ08sIHRoZSBjbG9jayBjYW4gYmUgb3B0aW9uYWxseSBleHRyYWN0ZWQgb24KKwkg KiB0aGUgUkNDIGNsb2NrIG9ic2VydmVyLCB3aXRoIGEgZGl2aWRlciBURElWLCBmb3IgdGVzdGlu ZyBwdXJwb3NlLCBvcgorCSAqIGlzIHBhc3NlZCB0aHJvdWdoIGEgcHJvZ3JhbW1hYmxlIHBvc3Qt ZGl2aWRlciBCRElWLiAgRmluYWxseSwgdGhlCisJICogZnJlcXVlbmN5IGNhbiBiZSBkaXZpZGVk IGZ1cnRoZXIgd2l0aCB0d28gZml4ZWQgZGl2aWRlcnMuCisJICoKKwkgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAsLS0tLS0tLS0uCisJICogICAgICAgICAgICAgICAgICAgICwtLS0tLT4g fCBEUCBkaXYgfCAtLS0tLS0tLS0tLS0tLS0tPiBGZHAKKwkgKiAgICAgICAgICAsLS0tLS0tLiAg fCAgICAgICBgLS0tLS0tLS0nCisJICogRnZjbyAtLT4gfCBCRElWIHwgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tPiBGYml0CisJICogICAgICB8ICAgYC0tLS0tLScgICAgLC0t LS0tLS4gICB8CisJICogICAgICBgLS0tLS0tLS0tLS0tLT4gfCBURElWIHwgLS0uLS0tLS0tLS0t LS0tLS0tLS0tLS0tPiBDbGtPYnMKKwkgKiAgICAgICAgICAgICAgICAgICAgICAnLS0tLS0tJyAg IHwgICAgLC0tLS0tLS0tLgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYC0t PiB8IExTIGRpdiB8IC0tLS0tLT4gRmxzCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICctLS0tLS0tLScKKwkgKgorCSAqIFRoZSBMUyBhbmQgRFAgY2xvY2sgZGl2aWRl cnMgb3BlcmF0ZSBhdCBhIGZpeGVkIHJhdGlvIG9mIDcgYW5kIDMuNQorCSAqIHJlc3BlY3RpdmVs eSB3aXRoIHJlZ2FyZHMgdG8gZmJpdC4gTFMgZGl2aWRlciBjb252ZXJ0cyB0aGUgYml0IGNsb2Nr CisJICogdG8gYSBwaXhlbCBjbG9jayBwZXIgbGFuZSBwZXIgY2xvY2sgc2FtcGxlIChGbHMpLiAg VGhpcyBpcyB1c2VmdWwKKwkgKiB3aGVuIHVzZWQgdG8gZ2VuZXJhdGUgYSBkb3QgY2xvY2sgZm9y IHRoZSBkaXNwbGF5IHVuaXQgUkdCIG91dHB1dCwKKwkgKiBhbmQgRFAgZGl2aWRlciBpcy4KKwkg Ki8KKworCWh3Y2xrID0gX19jbGtfZ2V0X2h3KGx2ZHMtPnBsbHJlZl9jbGspOworCWlmICghaHdj bGspCisJCXJldHVybjsKKworCXBsbF9pbl9raHogPSBjbGtfaHdfZ2V0X3JhdGUoaHdjbGspIC8g MTAwMDsKKworCWlmIChsdmRzX2lzX2R1YWxfbGluayhsdmRzLT5saW5rX3R5cGUpKQorCQltdWx0 aXBsaWVyID0gMjsKKwllbHNlCisJCW11bHRpcGxpZXIgPSAxOworCisJbHZkc19wbGxfZ2V0X3Bh cmFtcyhsdmRzLCBwbGxfaW5fa2h6LAorCQkJICAgIGx2ZHMtPnBpeGVsX2Nsb2NrX3JhdGUgKiA3 IC8gMTAwMCAvIG11bHRpcGxpZXIsCisJCQkgICAgJmJkaXYsICZtZGl2LCAmbmRpdik7CisKKwkv KiBTZXQgQkRJViwgTURJViBhbmQgTkRJViAqLworCWx2ZHNfd3JpdGUobHZkcywgcGh5LT5iYXNl ICsgcGh5LT5vZnMuUExMQ1IyLCBuZGl2IDw8IDE2KTsKKwlsdmRzX3NldChsdmRzLCBwaHktPmJh c2UgKyBwaHktPm9mcy5QTExDUjIsIGJkaXYpOworCWx2ZHNfd3JpdGUobHZkcywgcGh5LT5iYXNl ICsgcGh5LT5vZnMuUExMU0RDUjEsIG1kaXYpOworCisJLyogSGFyZGNvZGUgVERJViBhcyBkeW5h bWljIHZhbHVlcyBhcmUgbm90IHlldCBpbXBsZW1lbnRlZCAqLworCWx2ZHNfd3JpdGUobHZkcywg cGh5LT5iYXNlICsgcGh5LT5vZnMuUExMVEVTVENSLCBURElWIDw8IDE2KTsKKworCS8qCisJICog Rm9yIG5vdywgUExMIGp1c3QgbmVlZHMgdG8gYmUgaW4gaW50ZWdlciBtb2RlCisJICogRnJhY3Rp b25hbCBhbmQgc3ByZWFkIHNwZWN0cnVtIGNsb2NraW5nIGFyZSBub3QgeWV0IGltcGxlbWVudGVk CisJICoKKwkgKiBQTEwgaW50ZWdlciBtb2RlOgorCSAqCS0gUE1SWV9QTExfVFdHX1NURVAgPSBQ TVJZX1BMTF9TRF9JTlRfUkFUSU8KKwkgKgktIEVOX1RXRyA9IDAKKwkgKgktIEVOX1NEID0gMAor CSAqCS0gRE9XTl9TUFJFQUQgPSAwCisJICoKKwkgKiBQTEwgZnJhY3Rpb25hbCBtb2RlOgorCSAq CS0gRU5fVFdHID0gMAorCSAqCS0gRU5fU0QgPSAxCisJICoJLSBET1dOX1NQUkVBRCA9IDAKKwkg KgorCSAqIFNwcmVhZCBTcGVjdHJ1bSBDbG9ja2luZworCSAqCS0gRU5fVFdHID0gMQorCSAqCS0g RU5fU0QgPSAxCisJICovCisKKwkvKiBEaXNhYmxlIFRXRyBhbmQgU0QgKi8KKwlsdmRzX2NsZWFy KGx2ZHMsIHBoeS0+YmFzZSArIHBoeS0+b2ZzLlBMTENSMSwgUEhZX1BMTENSMV9FTl9UV0cgfCBQ SFlfUExMQ1IxX0VOX1NEKTsKKworCS8qIFBvd2VyIHVwIGJpYXMgYW5kIFBMTCBkaXZpZGVycyAq LworCWx2ZHNfc2V0KGx2ZHMsIHBoeS0+YmFzZSArIHBoeS0+b2ZzLkRDUiwgUEhZX0RDUl9QT1dF Ul9PSyk7CisJbHZkc19zZXQobHZkcywgcGh5LT5iYXNlICsgcGh5LT5vZnMuQ01DUjEsIFBIWV9D TUNSX0NNX0VOX0RMKTsKKwlsdmRzX3NldChsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5DTUNS MiwgUEhZX0NNQ1JfQ01fRU5fREw0KTsKKworCS8qIFNldCB1cCB2b2x0YWdlIG1vZGUgKi8KKwls dmRzX3NldChsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5QTExDUENSLCAweDEpOworCWx2ZHNf c2V0KGx2ZHMsIHBoeS0+YmFzZSArIHBoeS0+b2ZzLkJDUjMsIFBIWV9CQ1IzX1ZNX0VOX0RMKTsK KwlsdmRzX3NldChsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5CQ1IxLCBQSFlfQkNSMV9FTl9C SUFTX0RMKTsKKwkvKiBFbmFibGUgZGlnaXRhbCBkYXRhbGFuZXMgKi8KKwlsdmRzX3NldChsdmRz LCBwaHktPmJhc2UgKyBwaHktPm9mcy5DRkdDUiwgUEhZX0NGR0NSX0VOX0RJR19ETCk7Cit9CisK K3N0YXRpYyBpbnQgbHZkc19waXhlbF9jbGtfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQorewor CXN0cnVjdCBzdG1fbHZkcyAqbHZkcyA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IHN0bV9sdmRz LCBsdmRzX2NrX3B4KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gbHZkcy0+bHZkc19icmlk Z2UuZGV2OworCXN0cnVjdCBsdmRzX3BoeV9pbmZvICpwaHk7CisJaW50IHJldDsKKworCXJldCA9 IGNsa19wcmVwYXJlX2VuYWJsZShsdmRzLT5wY2xrKTsKKwlpZiAocmV0KSB7CisJCWRybV9lcnIo ZHJtLCAiRmFpbGVkIHRvIGVuYWJsZSBsdmRzIHBlcmlwaGVyYWwgY2xrXG4iKTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUobHZkcy0+cGxscmVmX2Nsayk7 CisJaWYgKHJldCkgeworCQlkcm1fZXJyKGRybSwgIkZhaWxlZCB0byBlbmFibGUgbHZkcyByZWZl cmVuY2UgY2xrXG4iKTsKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGx2ZHMtPnBjbGspOworCQly ZXR1cm4gcmV0OworCX0KKworCS8qIEluIGNhc2Ugd2UgYXJlIG9wZXJhdGluZyBpbiBkdWFsIGxp bmsgdGhlIHNlY29uZCBQSFkgaXMgc2V0IGJlZm9yZSB0aGUgcHJpbWFyeSBQSFkuICovCisJaWYg KGx2ZHMtPnNlY29uZGFyeSkgeworCQlwaHkgPSBsdmRzLT5zZWNvbmRhcnk7CisKKwkJLyogUmVs ZWFzZSBMVkRTIFBIWSBmcm9tIHJlc2V0IG1vZGUgKi8KKwkJbHZkc19zZXQobHZkcywgcGh5LT5i YXNlICsgcGh5LT5vZnMuR0NSLCBQSFlfR0NSX0RJVl9SU1ROIHwgUEhZX0dDUl9SU1RaKTsKKwkJ bHZkc19wbGxfY29uZmlnKGx2ZHMsIHBoeSk7CisKKwkJcmV0ID0gbHZkc19wbGxfZW5hYmxlKGx2 ZHMsIHBoeSk7CisJCWlmIChyZXQpIHsKKwkJCWRybV9lcnIoZHJtLCAiRmFpbGVkIHRvIGVuYWJs ZSBzZWNvbmRhcnkgUEhZIFBMTDogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJ fQorCisJaWYgKGx2ZHMtPnByaW1hcnkpIHsKKwkJcGh5ID0gbHZkcy0+cHJpbWFyeTsKKworCQkv KiBSZWxlYXNlIExWRFMgUEhZIGZyb20gcmVzZXQgbW9kZSAqLworCQlsdmRzX3NldChsdmRzLCBw aHktPmJhc2UgKyBwaHktPm9mcy5HQ1IsIFBIWV9HQ1JfRElWX1JTVE4gfCBQSFlfR0NSX1JTVFop OworCQlsdmRzX3BsbF9jb25maWcobHZkcywgcGh5KTsKKworCQlyZXQgPSBsdmRzX3BsbF9lbmFi bGUobHZkcywgcGh5KTsKKwkJaWYgKHJldCkgeworCQkJZHJtX2Vycihkcm0sICJGYWlsZWQgdG8g ZW5hYmxlIHByaW1hcnkgUEhZIFBMTDogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGx2ZHNfcGl4ZWxfY2xrX2Rpc2Fi bGUoc3RydWN0IGNsa19odyAqaHcpCit7CisJc3RydWN0IHN0bV9sdmRzICpsdmRzID0gY29udGFp bmVyX29mKGh3LCBzdHJ1Y3Qgc3RtX2x2ZHMsIGx2ZHNfY2tfcHgpOworCisJLyoKKwkgKiBGb3Ig ZWFjaCBQSFk6CisJICogRGlzYWJsZSBEUCwgTFMsIEJJVCBjbG9jayBvdXRwdXRzCisJICogU2h1 dGRvd24gdGhlIFBMTAorCSAqIEFzc2VydCBMVkRTIFBIWSBpbiByZXNldCBtb2RlCisJICovCisK KwlpZiAobHZkcy0+cHJpbWFyeSkgeworCQlsdmRzX2NsZWFyKGx2ZHMsIGx2ZHMtPnByaW1hcnkt PmJhc2UgKyBsdmRzLT5wcmltYXJ5LT5vZnMuR0NSLAorCQkJICAgKFBIWV9HQ1JfRFBfQ0xLX09V VCB8IFBIWV9HQ1JfTFNfQ0xLX09VVCB8IFBIWV9HQ1JfQklUX0NMS19PVVQpKTsKKwkJbHZkc19j bGVhcihsdmRzLCBsdmRzLT5wcmltYXJ5LT5iYXNlICsgbHZkcy0+cHJpbWFyeS0+b2ZzLlBMTENS MSwKKwkJCSAgIFBIWV9QTExDUjFfUExMX0VOKTsKKwkJbHZkc19jbGVhcihsdmRzLCBsdmRzLT5w cmltYXJ5LT5iYXNlICsgbHZkcy0+cHJpbWFyeS0+b2ZzLkdDUiwKKwkJCSAgIFBIWV9HQ1JfRElW X1JTVE4gfCBQSFlfR0NSX1JTVFopOworCX0KKworCWlmIChsdmRzLT5zZWNvbmRhcnkpIHsKKwkJ bHZkc19jbGVhcihsdmRzLCBsdmRzLT5zZWNvbmRhcnktPmJhc2UgKyBsdmRzLT5zZWNvbmRhcnkt Pm9mcy5HQ1IsCisJCQkgICAoUEhZX0dDUl9EUF9DTEtfT1VUIHwgUEhZX0dDUl9MU19DTEtfT1VU IHwgUEhZX0dDUl9CSVRfQ0xLX09VVCkpOworCQlsdmRzX2NsZWFyKGx2ZHMsIGx2ZHMtPnNlY29u ZGFyeS0+YmFzZSArIGx2ZHMtPnNlY29uZGFyeS0+b2ZzLlBMTENSMSwKKwkJCSAgIFBIWV9QTExD UjFfUExMX0VOKTsKKwkJbHZkc19jbGVhcihsdmRzLCBsdmRzLT5zZWNvbmRhcnktPmJhc2UgKyBs dmRzLT5zZWNvbmRhcnktPm9mcy5HQ1IsCisJCQkgICBQSFlfR0NSX0RJVl9SU1ROIHwgUEhZX0dD Ul9SU1RaKTsKKwl9CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUobHZkcy0+cGxscmVmX2Nsayk7 CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGx2ZHMtPnBjbGspOworfQorCitzdGF0aWMgdW5zaWdu ZWQgbG9uZyBsdmRzX3BpeGVsX2Nsa19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJ CQkJCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IHN0bV9sdmRzICpsdmRz ID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3Qgc3RtX2x2ZHMsIGx2ZHNfY2tfcHgpOworCXN0cnVj dCBkcm1fZGV2aWNlICpkcm0gPSBsdmRzLT5sdmRzX2JyaWRnZS5kZXY7CisJdW5zaWduZWQgaW50 IHBsbF9pbl9raHosIGJkaXYsIG1kaXYsIG5kaXY7CisJaW50IHJldCwgbXVsdGlwbGllciwgcGxs X291dF9raHo7CisJdTMyIHZhbDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShsdmRzLT5w Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRybV9lcnIoZHJtLCAiRmFpbGVkIHRvIGVuYWJsZSBsdmRz IHBlcmlwaGVyYWwgY2xrXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGx2ZHNfaXNfZHVh bF9saW5rKGx2ZHMtPmxpbmtfdHlwZSkpCisJCW11bHRpcGxpZXIgPSAyOworCWVsc2UKKwkJbXVs dGlwbGllciA9IDE7CisKKwl2YWwgPSBsdmRzX3JlYWQobHZkcywgbHZkcy0+cHJpbWFyeS0+YmFz ZSArIGx2ZHMtPnByaW1hcnktPm9mcy5QTExDUjIpOworCisJbmRpdiA9ICh2YWwgJiBQSFlfUExM Q1IyX05ESVYpID4+IDE2OworCWJkaXYgPSAodmFsICYgUEhZX1BMTENSMl9CRElWKSA+PiAwOwor CisJbWRpdiA9ICh1bnNpZ25lZCBpbnQpbHZkc19yZWFkKGx2ZHMsCisJCQkJICAgICAgIGx2ZHMt PnByaW1hcnktPmJhc2UgKyBsdmRzLT5wcmltYXJ5LT5vZnMuUExMU0RDUjEpOworCisJcGxsX2lu X2toeiA9ICh1bnNpZ25lZCBpbnQpKHBhcmVudF9yYXRlIC8gMTAwMCk7CisKKwkvKiBDb21wdXRl IHZhbHVlcyBpZiBub3QgeWV0IGFjY2Vzc2libGUgKi8KKwlpZiAodmFsID09IDAgfHwgbWRpdiA9 PSAwKSB7CisJCWx2ZHNfcGxsX2dldF9wYXJhbXMobHZkcywgcGxsX2luX2toeiwKKwkJCQkgICAg bHZkcy0+cGl4ZWxfY2xvY2tfcmF0ZSAqIDcgLyAxMDAwIC8gbXVsdGlwbGllciwKKwkJCQkgICAg JmJkaXYsICZtZGl2LCAmbmRpdik7CisJfQorCisJcGxsX291dF9raHogPSBwbGxfZ2V0X2Nsa291 dF9raHoocGxsX2luX2toeiwgYmRpdiwgbWRpdiwgbmRpdik7CisJZHJtX2RiZyhkcm0sICJuZGl2 ICVkICwgYmRpdiAlZCwgbWRpdiAlZCwgcGxsX291dF9raHogJWRcbiIsCisJCW5kaXYsIGJkaXYs IG1kaXYsIHBsbF9vdXRfa2h6KTsKKworCS8qCisJICogMS83IGJlY2F1c2UgZm9yIGVhY2ggcGl4 ZWwgaW4gMSBsYW5lIHRoZXJlIGlzIDcgYml0cworCSAqIFdlIHdhbnQgcGl4Y2xrLCBub3QgYml0 Y2xrCisJICovCisJbHZkcy0+cGl4ZWxfY2xvY2tfcmF0ZSA9IHBsbF9vdXRfa2h6ICogMTAwMCAq IG11bHRpcGxpZXIgLyA3OworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGx2ZHMtPnBjbGspOwor CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWx2ZHMtPnBpeGVsX2Nsb2NrX3JhdGU7Cit9CisKK3N0 YXRpYyBsb25nIGx2ZHNfcGl4ZWxfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVu c2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSkK K3sKKwlzdHJ1Y3Qgc3RtX2x2ZHMgKmx2ZHMgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBzdG1f bHZkcywgbHZkc19ja19weCk7CisJdW5zaWduZWQgaW50IHBsbF9pbl9raHosIGJkaXYgPSAwLCBt ZGl2ID0gMCwgbmRpdiA9IDA7CisJY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cjsKKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlpbnQgbXVsdGlwbGll cjsKKworCWNvbm5lY3RvciA9ICZsdmRzLT5jb25uZWN0b3I7CisJaWYgKCFjb25uZWN0b3IpCisJ CXJldHVybiAtRUlOVkFMOworCisJaWYgKGxpc3RfZW1wdHkoJmNvbm5lY3Rvci0+bW9kZXMpKSB7 CisJCWRybV9kYmcoY29ubmVjdG9yLT5kZXYsICJjb25uZWN0b3I6IGVtcHR5IG1vZGVzIGxpc3Rc biIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltb2RlID0gbGlzdF9maXJzdF9lbnRyeSgm Y29ubmVjdG9yLT5tb2RlcywKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSwgaGVhZCk7CisK KwlwbGxfaW5fa2h6ID0gKHVuc2lnbmVkIGludCkoKnBhcmVudF9yYXRlIC8gMTAwMCk7CisKKwlp ZiAobHZkc19pc19kdWFsX2xpbmsobHZkcy0+bGlua190eXBlKSkKKwkJbXVsdGlwbGllciA9IDI7 CisJZWxzZQorCQltdWx0aXBsaWVyID0gMTsKKworCWx2ZHNfcGxsX2dldF9wYXJhbXMobHZkcywg cGxsX2luX2toeiwgbW9kZS0+Y2xvY2sgKiA3IC8gbXVsdGlwbGllciwgJmJkaXYsICZtZGl2LCAm bmRpdik7CisKKwkvKgorCSAqIDEvNyBiZWNhdXNlIGZvciBlYWNoIHBpeGVsIGluIDEgbGFuZSB0 aGVyZSBpcyA3IGJpdHMKKwkgKiBXZSB3YW50IHBpeGNsaywgbm90IGJpdGNsaworCSAqLworCWx2 ZHMtPnBpeGVsX2Nsb2NrX3JhdGUgPSAodW5zaWduZWQgbG9uZylwbGxfZ2V0X2Nsa291dF9raHoo cGxsX2luX2toeiwgYmRpdiwgbWRpdiwgbmRpdikKKwkJCQkJICogMTAwMCAqIG11bHRpcGxpZXIg LyA3OworCisJcmV0dXJuIGx2ZHMtPnBpeGVsX2Nsb2NrX3JhdGU7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgY2xrX29wcyBsdmRzX3BpeGVsX2Nsa19vcHMgPSB7CisJLmVuYWJsZSA9IGx2ZHNf cGl4ZWxfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGx2ZHNfcGl4ZWxfY2xrX2Rpc2FibGUsCisJ LnJlY2FsY19yYXRlID0gbHZkc19waXhlbF9jbGtfcmVjYWxjX3JhdGUsCisJLnJvdW5kX3JhdGUg PSBsdmRzX3BpeGVsX2Nsa19yb3VuZF9yYXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBj bGtfaW5pdF9kYXRhIGNsa19kYXRhID0geworCS5uYW1lID0gImNsa19waXhfbHZkcyIsCisJLm9w cyA9ICZsdmRzX3BpeGVsX2Nsa19vcHMsCisJLnBhcmVudF9uYW1lcyA9IChjb25zdCBjaGFyICog W10pIHsiY2tfa2VyX2x2ZHNwaHkifSwKKwkubnVtX3BhcmVudHMgPSAxLAorCS5mbGFncyA9IENM S19JR05PUkVfVU5VU0VELAorfTsKKworc3RhdGljIHZvaWQgbHZkc19waXhlbF9jbGtfdW5yZWdp c3Rlcih2b2lkICpkYXRhKQoreworCXN0cnVjdCBzdG1fbHZkcyAqbHZkcyA9IGRhdGE7CisKKwlv Zl9jbGtfZGVsX3Byb3ZpZGVyKGx2ZHMtPmRldi0+b2Zfbm9kZSk7CisJY2xrX2h3X3VucmVnaXN0 ZXIoJmx2ZHMtPmx2ZHNfY2tfcHgpOworfQorCitzdGF0aWMgaW50IGx2ZHNfcGl4ZWxfY2xrX3Jl Z2lzdGVyKHN0cnVjdCBzdG1fbHZkcyAqbHZkcykKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5v ZGUgPSBsdmRzLT5kZXYtPm9mX25vZGU7CisJaW50IHJldDsKKworCWx2ZHMtPmx2ZHNfY2tfcHgu aW5pdCA9ICZjbGtfZGF0YTsKKworCS8qIHNldCB0aGUgcmF0ZSBieSBkZWZhdWx0IGF0IDE0ODUw MDAwMCAqLworCWx2ZHMtPnBpeGVsX2Nsb2NrX3JhdGUgPSAxNDg1MDAwMDA7CisKKwlyZXQgPSBj bGtfaHdfcmVnaXN0ZXIobHZkcy0+ZGV2LCAmbHZkcy0+bHZkc19ja19weCk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXJldCA9IG9mX2Nsa19hZGRfaHdfcHJvdmlkZXIobm9kZSwgb2Zf Y2xrX2h3X3NpbXBsZV9nZXQsCisJCQkJICAgICAmbHZkcy0+bHZkc19ja19weCk7CisJaWYgKHJl dCkKKwkJY2xrX2h3X3VucmVnaXN0ZXIoJmx2ZHMtPmx2ZHNfY2tfcHgpOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIEhvc3QgY29uZmlndXJhdGlvbiByZWxhdGVkCisgKi8KK3N0YXRpYyB2 b2lkIGx2ZHNfY29uZmlnX2RhdGFfbWFwcGluZyhzdHJ1Y3Qgc3RtX2x2ZHMgKmx2ZHMpCit7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGx2ZHMtPmx2ZHNfYnJpZGdlLmRldjsKKwljb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbzsKKwllbnVtIGx2ZHNfcGl4ZWwgKCpiaXRtYXAp WzddOworCXUzMiBsdmRzX2RtbGNyLCBsdmRzX2RtbWNyOworCWludCBpOworCisJaW5mbyA9ICYo Jmx2ZHMtPmNvbm5lY3RvciktPmRpc3BsYXlfaW5mbzsKKwlpZiAoIWluZm8tPm51bV9idXNfZm9y bWF0cyB8fCAhaW5mby0+YnVzX2Zvcm1hdHMpIHsKKwkJZHJtX3dhcm4oZHJtLCAiTm8gTFZEUyBi dXMgZm9ybWF0IHJlcG9ydGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoaW5mby0+ YnVzX2Zvcm1hdHNbMF0pIHsKKwljYXNlIE1FRElBX0JVU19GTVRfUkdCNjY2XzFYN1gzX1NQV0c6 IC8qIFZFU0EtUkdCNjY2ICovCisJCWRybV93YXJuKGRybSwgIlBpeGVsIGZvcm1hdCB3aXRoIGRh dGEgbWFwcGluZyBub3QgeWV0IHN1cHBvcnRlZC5cbiIpOworCQlyZXR1cm47CisJY2FzZSBNRURJ QV9CVVNfRk1UX1JHQjg4OF8xWDdYNF9TUFdHOiAvKiBWRVNBLVJHQjg4OCAqLworCQliaXRtYXAg PSBsdmRzX2JpdG1hcF92ZXNhX3JnYjg4ODsKKwkJYnJlYWs7CisJY2FzZSBNRURJQV9CVVNfRk1U X1JHQjg4OF8xWDdYNF9KRUlEQTogLyogSkVJREEtUkdCODg4ICovCisJCWJpdG1hcCA9IGx2ZHNf Yml0bWFwX2plaWRhX3JnYjg4ODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHJtX3dhcm4oZHJt LCAiVW5zdXBwb3J0ZWQgTFZEUyBidXMgZm9ybWF0IDB4JTA0eFxuIiwgaW5mby0+YnVzX2Zvcm1h dHNbMF0pOworCQlyZXR1cm47CisJfQorCisJLyogU2V0IGJpdG1hcCBmb3IgZWFjaCBsYW5lICov CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlsdmRzX2RtbGNyID0gKChiaXRtYXBbaV1b MF0pCisJCQkgICAgICArIChiaXRtYXBbaV1bMV0gPDwgNSkKKwkJCSAgICAgICsgKGJpdG1hcFtp XVsyXSA8PCAxMCkKKwkJCSAgICAgICsgKGJpdG1hcFtpXVszXSA8PCAxNSkpOworCQlsdmRzX2Rt bWNyID0gKChiaXRtYXBbaV1bNF0pCisJCQkgICAgICArIChiaXRtYXBbaV1bNV0gPDwgNSkKKwkJ CSAgICAgICsgKGJpdG1hcFtpXVs2XSA8PCAxMCkpOworCisJCWx2ZHNfd3JpdGUobHZkcywgTFZE U19ETUxDUihpKSwgbHZkc19kbWxjcik7CisJCWx2ZHNfd3JpdGUobHZkcywgTFZEU19ETU1DUihp KSwgbHZkc19kbW1jcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBsdmRzX2NvbmZpZ19tb2RlKHN0 cnVjdCBzdG1fbHZkcyAqbHZkcykKK3sKKwl1MzIgYnVzX2ZsYWdzLCBsdmRzX2NyID0gMCwgbHZk c19jZGwxY3IgPSAwLCBsdmRzX2NkbDJjciA9IDA7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGU7CisJY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwor CWNvbm5lY3RvciA9ICZsdmRzLT5jb25uZWN0b3I7CisJaWYgKCFjb25uZWN0b3IpCisJCXJldHVy bjsKKworCWlmIChsaXN0X2VtcHR5KCZjb25uZWN0b3ItPm1vZGVzKSkgeworCQlkcm1fZGJnKGNv bm5lY3Rvci0+ZGV2LCAiY29ubmVjdG9yOiBlbXB0eSBtb2RlcyBsaXN0XG4iKTsKKwkJcmV0dXJu OworCX0KKworCWJ1c19mbGFncyA9IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJ1c19mbGFnczsK Kwltb2RlID0gbGlzdF9maXJzdF9lbnRyeSgmY29ubmVjdG9yLT5tb2RlcywKKwkJCQlzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSwgaGVhZCk7CisKKwlsdmRzX2NsZWFyKGx2ZHMsIExWRFNfQ1IsIENS X0xLTU9EKTsKKwlsdmRzX2NsZWFyKGx2ZHMsIExWRFNfQ0RMMUNSLCBDRExDUl9ESVNUUjAgfCBD RExDUl9ESVNUUjEgfCBDRExDUl9ESVNUUjIgfAorCQkJCSAgICAgIENETENSX0RJU1RSMyB8IENE TENSX0RJU1RSNCk7CisJbHZkc19jbGVhcihsdmRzLCBMVkRTX0NETDJDUiwgQ0RMQ1JfRElTVFIw IHwgQ0RMQ1JfRElTVFIxIHwgQ0RMQ1JfRElTVFIyIHwKKwkJCQkgICAgICBDRExDUl9ESVNUUjMg fCBDRExDUl9ESVNUUjQpOworCisJLyogU2V0IGNoYW5uZWwgZGlzdHJpYnV0aW9uICovCisJaWYg KGx2ZHMtPnByaW1hcnkpCisJCWx2ZHNfY2RsMWNyID0gQ0RMMUNSX0RFRkFVTFQ7CisKKwlpZiAo bHZkcy0+c2Vjb25kYXJ5KSB7CisJCWx2ZHNfY3IgfD0gQ1JfTEtNT0Q7CisJCWx2ZHNfY2RsMmNy ID0gQ0RMMkNSX0RFRkFVTFQ7CisJfQorCisJLyogU2V0IHNpZ25hbCBwb2xhcml0eSAqLworCWlm IChidXNfZmxhZ3MgJiBEUk1fQlVTX0ZMQUdfREVfTE9XKQorCQlsdmRzX2NyIHw9IENSX0RFUE9M OworCisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCisJCWx2ZHNfY3Ig fD0gQ1JfSFNQT0w7CisKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykK KwkJbHZkc19jciB8PSBDUl9WU1BPTDsKKworCXN3aXRjaCAobHZkcy0+bGlua190eXBlKSB7CisJ Y2FzZSBMVkRTX0RVQUxfTElOS19FVkVOX09ERF9QSVhFTFM6IC8qIExLUEhBID0gMCAqLworCQls dmRzX2NyICY9IH5DUl9MS1BIQTsKKwkJYnJlYWs7CisJY2FzZSBMVkRTX0RVQUxfTElOS19PRERf RVZFTl9QSVhFTFM6IC8qIExLUEhBID0gMSAqLworCQlsdmRzX2NyIHw9IENSX0xLUEhBOworCQli cmVhazsKKwlkZWZhdWx0OgorCQlkcm1fbm90aWNlKGx2ZHMtPmx2ZHNfYnJpZGdlLmRldiwgIk5v IHBoYXNlIHByZWNpc2VkLCBzZXR0aW5nIGRlZmF1bHRcbiIpOworCQlsdmRzX2NyICY9IH5DUl9M S1BIQTsKKwkJYnJlYWs7CisJfQorCisJLyogV3JpdGUgY29uZmlnIHRvIHJlZ2lzdGVycyAqLwor CWx2ZHNfc2V0KGx2ZHMsIExWRFNfQ1IsIGx2ZHNfY3IpOworCWx2ZHNfd3JpdGUobHZkcywgTFZE U19DREwxQ1IsIGx2ZHNfY2RsMWNyKTsKKwlsdmRzX3dyaXRlKGx2ZHMsIExWRFNfQ0RMMkNSLCBs dmRzX2NkbDJjcik7Cit9CisKK3N0YXRpYyBpbnQgbHZkc19jb25uZWN0b3JfZ2V0X21vZGVzKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IHN0bV9sdmRzICpsdmRz ID0gY29ubmVjdG9yX3RvX3N0bV9sdmRzKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gZHJtX3BhbmVs X2dldF9tb2RlcyhsdmRzLT5wYW5lbCwgY29ubmVjdG9yKTsKK30KKworc3RhdGljIGludCBsdmRz X2Nvbm5lY3Rvcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwK KwkJCQkgICAgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCWNvbnN0IHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICpwYW5lbF9tb2RlOworCXN0cnVjdCBkcm1fY29ubmVjdG9y X3N0YXRlICpjb25uX3N0YXRlOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsK KworCWNvbm5fc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY29ubmVjdG9yX3N0YXRlKHN0YXRl LCBjb25uZWN0b3IpOworCWlmICghY29ubl9zdGF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlp ZiAobGlzdF9lbXB0eSgmY29ubmVjdG9yLT5tb2RlcykpIHsKKwkJZHJtX2RiZyhjb25uZWN0b3It PmRldiwgImNvbm5lY3RvcjogZW1wdHkgbW9kZXMgbGlzdFxuIik7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCWlmICghY29ubl9zdGF0ZS0+Y3J0YykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlw YW5lbF9tb2RlID0gbGlzdF9maXJzdF9lbnRyeSgmY29ubmVjdG9yLT5tb2RlcywKKwkJCQkgICAg ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSwgaGVhZCk7CisKKwkvKiBXZSdyZSBub3QgYWxsb3dl ZCB0byBtb2RpZnkgdGhlIHJlc29sdXRpb24uICovCisJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNf Z2V0X2NydGNfc3RhdGUoc3RhdGUsIGNvbm5fc3RhdGUtPmNydGMpOworCWlmIChJU19FUlIoY3J0 Y19zdGF0ZSkpCisJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOworCisJaWYgKGNydGNfc3Rh dGUtPm1vZGUuaGRpc3BsYXkgIT0gcGFuZWxfbW9kZS0+aGRpc3BsYXkgfHwKKwkgICAgY3J0Y19z dGF0ZS0+bW9kZS52ZGlzcGxheSAhPSBwYW5lbF9tb2RlLT52ZGlzcGxheSkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwkvKiBUaGUgZmxhdCBwYW5lbCBtb2RlIGlzIGZpeGVkLCBqdXN0IGNvcHkgaXQg dG8gdGhlIGFkanVzdGVkIG1vZGUuICovCisJZHJtX21vZGVfY29weSgmY3J0Y19zdGF0ZS0+YWRq dXN0ZWRfbW9kZSwgcGFuZWxfbW9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBsdmRzX2Nvbm5faGVscGVyX2Z1bmNz ID0geworCS5nZXRfbW9kZXMgPSBsdmRzX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLmF0b21pY19j aGVjayA9IGx2ZHNfY29ubmVjdG9yX2F0b21pY19jaGVjaywKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBsdmRzX2Nvbm5fZnVuY3MgPSB7CisJLnJlc2V0ID0g ZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5maWxsX21vZGVzID0gZHJtX2hl bHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95ID0gZHJtX2Nvbm5l Y3Rvcl9jbGVhbnVwLAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxw ZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBp bnQgbHZkc19hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJICAgICAgIGVudW0g ZHJtX2JyaWRnZV9hdHRhY2hfZmxhZ3MgZmxhZ3MpCit7CisJc3RydWN0IHN0bV9sdmRzICpsdmRz ID0gYnJpZGdlX3RvX3N0bV9sdmRzKGJyaWRnZSk7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciA9ICZsdmRzLT5jb25uZWN0b3I7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy ID0gYnJpZGdlLT5lbmNvZGVyOworCWludCByZXQ7CisKKwlpZiAoIWJyaWRnZS0+ZW5jb2Rlcikg eworCQlkcm1fZXJyKGJyaWRnZS0+ZGV2LCAiUGFyZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3Vu ZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFNldCB0aGUgZW5jb2RlciB0eXBl IGFzIGNhbGxlciBkb2VzIG5vdCBrbm93IGl0ICovCisJYnJpZGdlLT5lbmNvZGVyLT5lbmNvZGVy X3R5cGUgPSBEUk1fTU9ERV9FTkNPREVSX0xWRFM7CisKKwkvKiBObyBjbG9uaW5nIHN1cHBvcnQg Ki8KKwlicmlkZ2UtPmVuY29kZXItPnBvc3NpYmxlX2Nsb25lcyA9IDA7CisKKwkvKiBJZiB3ZSBo YXZlIGEgbmV4dCBicmlkZ2UganVzdCBhdHRhY2ggaXQuICovCisJaWYgKGx2ZHMtPm5leHRfYnJp ZGdlKQorCQlyZXR1cm4gZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLCBsdmRzLT5u ZXh0X2JyaWRnZSwKKwkJCQkJIGJyaWRnZSwgZmxhZ3MpOworCisJaWYgKGZsYWdzICYgRFJNX0JS SURHRV9BVFRBQ0hfTk9fQ09OTkVDVE9SKSB7CisJCWRybV9lcnIoYnJpZGdlLT5kZXYsICJGaXgg YnJpZGdlIGRyaXZlciB0byBtYWtlIGNvbm5lY3RvciBvcHRpb25hbCEiKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJLyogT3RoZXJ3aXNlIGlmIHdlIGhhdmUgYSBwYW5lbCwgY3JlYXRlIGEg Y29ubmVjdG9yLiAqLworCWlmICghbHZkcy0+cGFuZWwpCisJCXJldHVybiAwOworCisJcmV0ID0g ZHJtX2Nvbm5lY3Rvcl9pbml0KGJyaWRnZS0+ZGV2LCBjb25uZWN0b3IsCisJCQkJICZsdmRzX2Nv bm5fZnVuY3MsIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0 dXJuIHJldDsKKworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZsdmRzX2Nv bm5faGVscGVyX2Z1bmNzKTsKKworCXJldCA9IGRybV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIo Y29ubmVjdG9yLCBlbmNvZGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGx2 ZHNfYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJICAgICAgIHN0 cnVjdCBkcm1fYnJpZGdlX3N0YXRlICpvbGRfYnJpZGdlX3N0YXRlKQoreworCXN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSA9IG9sZF9icmlkZ2Vfc3RhdGUtPmJhc2Uuc3RhdGU7CisJc3Ry dWN0IHN0bV9sdmRzICpsdmRzID0gYnJpZGdlX3RvX3N0bV9sdmRzKGJyaWRnZSk7CisJc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7CisJc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcjsKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGx2ZHMt PnBjbGspOworCWlmIChyZXQpIHsKKwkJZHJtX2VycihicmlkZ2UtPmRldiwgIkZhaWxlZCB0byBl bmFibGUgbHZkcyBwZXJpcGhlcmFsIGNsa1xuIik7CisJCXJldHVybjsKKwl9CisKKwljb25uZWN0 b3IgPSBkcm1fYXRvbWljX2dldF9uZXdfY29ubmVjdG9yX2Zvcl9lbmNvZGVyKHN0YXRlLCBicmlk Z2UtPmVuY29kZXIpOworCWlmICghY29ubmVjdG9yKQorCQlyZXR1cm47CisKKwljb25uX3N0YXRl ID0gZHJtX2F0b21pY19nZXRfbmV3X2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yKTsK KwlpZiAoIWNvbm5fc3RhdGUpCisJCXJldHVybjsKKworCWx2ZHNfY29uZmlnX21vZGUobHZkcyk7 CisKKwkvKiBTZXQgRGF0YSBNYXBwaW5nICovCisJbHZkc19jb25maWdfZGF0YV9tYXBwaW5nKGx2 ZHMpOworCisJLyogVHVybiB0aGUgb3V0cHV0IG9uLiAqLworCWx2ZHNfc2V0KGx2ZHMsIExWRFNf Q1IsIENSX0xWRFNFTik7CisKKwlpZiAobHZkcy0+cGFuZWwpIHsKKwkJZHJtX3BhbmVsX3ByZXBh cmUobHZkcy0+cGFuZWwpOworCQlkcm1fcGFuZWxfZW5hYmxlKGx2ZHMtPnBhbmVsKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkIGx2ZHNfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZSwKKwkJCQlzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqb2xkX2JyaWRnZV9zdGF0ZSkKK3sK KwlzdHJ1Y3Qgc3RtX2x2ZHMgKmx2ZHMgPSBicmlkZ2VfdG9fc3RtX2x2ZHMoYnJpZGdlKTsKKwor CWlmIChsdmRzLT5wYW5lbCkgeworCQlkcm1fcGFuZWxfZGlzYWJsZShsdmRzLT5wYW5lbCk7CisJ CWRybV9wYW5lbF91bnByZXBhcmUobHZkcy0+cGFuZWwpOworCX0KKworCS8qIERpc2FibGUgTFZE UyBtb2R1bGUgKi8KKwlsdmRzX2NsZWFyKGx2ZHMsIExWRFNfQ1IsIENSX0xWRFNFTik7CisKKwlj bGtfZGlzYWJsZV91bnByZXBhcmUobHZkcy0+cGNsayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2JyaWRnZV9mdW5jcyBsdmRzX2JyaWRnZV9mdW5jcyA9IHsKKwkuYXR0YWNoID0gbHZk c19hdHRhY2gsCisJLmF0b21pY19lbmFibGUgPSBsdmRzX2F0b21pY19lbmFibGUsCisJLmF0b21p Y19kaXNhYmxlID0gbHZkc19hdG9taWNfZGlzYWJsZSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0 ZSA9IGRybV9hdG9taWNfaGVscGVyX2JyaWRnZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19k ZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfYnJpZGdlX2Rlc3Ryb3lfc3RhdGUsCisJ LmF0b21pY19yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2JyaWRnZV9yZXNldCwKK307CisKK3N0 YXRpYyBpbnQgbHZkc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydDEsICpwb3J0MiwgKnJlbW90ZTsKKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCByZXNldF9jb250cm9sICpyc3RjOworCXN0cnVj dCBzdG1fbHZkcyAqbHZkczsKKwlpbnQgcmV0LCBkdWFsX2xpbms7CisKKwlkZXZfZGJnKGRldiwg IlByb2JpbmcgTFZEUyBkcml2ZXIuLi5cbiIpOworCisJbHZkcyA9IGRldm1fa3phbGxvYyhkZXYs IHNpemVvZigqbHZkcyksIEdGUF9LRVJORUwpOworCWlmICghbHZkcykKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlsdmRzLT5kZXYgPSBkZXY7CisKKwlyZXQgPSBkcm1fb2ZfZmluZF9wYW5lbF9vcl9i cmlkZ2UoZGV2LT5vZl9ub2RlLCAxLCAwLAorCQkJCQkgICZsdmRzLT5wYW5lbCwgJmx2ZHMtPm5l eHRfYnJpZGdlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJQYW5l bCBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWx2ZHMtPmJhc2UgPSBkZXZt X3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7CisJaWYgKElTX0VSUihsdmRzLT5i YXNlKSkgeworCQlyZXQgPSBQVFJfRVJSKGx2ZHMtPmJhc2UpOworCQlkZXZfZXJyKGRldiwgIlVu YWJsZSB0byBnZXQgcmVncyAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlsdmRz LT5wY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKGx2ZHMtPnBj bGspKSB7CisJCXJldCA9IFBUUl9FUlIobHZkcy0+cGNsayk7CisJCWRldl9lcnIoZGV2LCAiVW5h YmxlIHRvIGdldCBwZXJpcGhlcmFsIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUobHZkcy0+cGNsayk7CisJaWYgKHJldCkg eworCQlkZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBlcmlwaGVyYWwgY2xrXG4i LCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCisJcnN0YyA9IGRldm1fcmVzZXRfY29u dHJvbF9nZXRfZXhjbHVzaXZlKGRldiwgTlVMTCk7CisKKwlpZiAoSVNfRVJSKHJzdGMpKSB7CisJ CXJldCA9IFBUUl9FUlIocnN0Yyk7CisJCWdvdG8gZXJyX2x2ZHNfcHJvYmU7CisJfQorCisJcmVz ZXRfY29udHJvbF9hc3NlcnQocnN0Yyk7CisJdXNsZWVwX3JhbmdlKDEwLCAyMCk7CisJcmVzZXRf Y29udHJvbF9kZWFzc2VydChyc3RjKTsKKworCXBvcnQxID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlf aWQoZGV2LT5vZl9ub2RlLCAxKTsKKwlwb3J0MiA9IG9mX2dyYXBoX2dldF9wb3J0X2J5X2lkKGRl di0+b2Zfbm9kZSwgMik7CisJZHVhbF9saW5rID0gZHJtX29mX2x2ZHNfZ2V0X2R1YWxfbGlua19w aXhlbF9vcmRlcihwb3J0MSwgcG9ydDIpOworCisJc3dpdGNoIChkdWFsX2xpbmspIHsKKwljYXNl IERSTV9MVkRTX0RVQUxfTElOS19PRERfRVZFTl9QSVhFTFM6CisJCWx2ZHMtPmxpbmtfdHlwZSA9 IExWRFNfRFVBTF9MSU5LX09ERF9FVkVOX1BJWEVMUzsKKwkJbHZkcy0+cHJpbWFyeSA9ICZsdmRz X3BoeV8xNmZmX3ByaW1hcnk7CisJCWx2ZHMtPnNlY29uZGFyeSA9ICZsdmRzX3BoeV8xNmZmX3Nl Y29uZGFyeTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fTFZEU19EVUFMX0xJTktfRVZFTl9PRERfUElY RUxTOgorCQlsdmRzLT5saW5rX3R5cGUgPSBMVkRTX0RVQUxfTElOS19FVkVOX09ERF9QSVhFTFM7 CisJCWx2ZHMtPnByaW1hcnkgPSAmbHZkc19waHlfMTZmZl9wcmltYXJ5OworCQlsdmRzLT5zZWNv bmRhcnkgPSAmbHZkc19waHlfMTZmZl9zZWNvbmRhcnk7CisJCWJyZWFrOworCWNhc2UgLUVJTlZB TDoKKwkJLyoKKwkJICogZHJtX29mX2x2ZHNfZ2V0X2R1YWxfcGl4ZWxfb3JkZXIgcmV0dXJucyA0 IHBvc3NpYmxlIHZhbHVlcy4KKwkJICogSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHJldHVybmVkIHZh bHVlIGlzIGFuIGVycm9yLCBpdCBjYW4gYmUKKwkJICogZWl0aGVyIEVOT0RFViBvciBFSU5WQUwu IFNlZWluZyB0aGUgc3RydWN0dXJlIG9mIHRoaXMKKwkJICogZnVuY3Rpb24sIEVJTlZBTCBtZWFu cyB0aGF0IGVpdGhlciBwb3J0MSBvciBwb3J0MiBpcyBub3QKKwkJICogcHJlc2VudCBpbiB0aGUg ZGV2aWNlIHRyZWUuCisJCSAqIEluIHRoYXQgY2FzZSwgdGhlIGx2ZHMgcGFuZWwgY2FuIGJlIGEg c2luZ2xlIGxpbmsgcGFuZWwsIG9yCisJCSAqIHRoZXJlIGlzIGEgc2VtYW50aWNhbCBlcnJvciBp biB0aGUgZGV2aWNlIHRyZWUgY29kZS4KKwkJICovCisJCXJlbW90ZSA9IG9mX2dldF9uZXh0X2F2 YWlsYWJsZV9jaGlsZChwb3J0MSwgTlVMTCk7CisJCWlmIChyZW1vdGUpIHsKKwkJCWlmIChvZl9n cmFwaF9nZXRfcmVtb3RlX2VuZHBvaW50KHJlbW90ZSkpIHsKKwkJCQlsdmRzLT5saW5rX3R5cGUg PSBMVkRTX1NJTkdMRV9MSU5LX1BSSU1BUlk7CisJCQkJbHZkcy0+cHJpbWFyeSA9ICZsdmRzX3Bo eV8xNmZmX3ByaW1hcnk7CisJCQkJbHZkcy0+c2Vjb25kYXJ5ID0gTlVMTDsKKwkJCX0gZWxzZSB7 CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCX0KKworCQkJb2Zfbm9kZV9wdXQocmVtb3RlKTsKKwkJ fQorCisJCXJlbW90ZSA9IG9mX2dldF9uZXh0X2F2YWlsYWJsZV9jaGlsZChwb3J0MiwgTlVMTCk7 CisJCWlmIChyZW1vdGUpIHsKKwkJCWlmIChvZl9ncmFwaF9nZXRfcmVtb3RlX2VuZHBvaW50KHJl bW90ZSkpIHsKKwkJCQlsdmRzLT5saW5rX3R5cGUgPSBMVkRTX1NJTkdMRV9MSU5LX1NFQ09OREFS WTsKKwkJCQlsdmRzLT5wcmltYXJ5ID0gTlVMTDsKKwkJCQlsdmRzLT5zZWNvbmRhcnkgPSAmbHZk c19waHlfMTZmZl9zZWNvbmRhcnk7CisJCQl9IGVsc2UgeworCQkJCXJldCA9IChyZXQgPT0gLUVJ TlZBTCkgPyAtRUlOVkFMIDogMDsKKwkJCX0KKworCQkJb2Zfbm9kZV9wdXQocmVtb3RlKTsKKwkJ fQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9sdmRz X3Byb2JlOworCX0KKwlvZl9ub2RlX3B1dChwb3J0MSk7CisJb2Zfbm9kZV9wdXQocG9ydDIpOwor CisJbHZkcy0+cGxscmVmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJyZWYiKTsKKwlpZiAoSVNf RVJSKGx2ZHMtPnBsbHJlZl9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIobHZkcy0+cGxscmVmX2Ns ayk7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGdldCByZWZlcmVuY2UgY2xvY2s6ICVkXG4i LCByZXQpOworCQlnb3RvIGVycl9sdmRzX3Byb2JlOworCX0KKworCXJldCA9IGx2ZHNfcGl4ZWxf Y2xrX3JlZ2lzdGVyKGx2ZHMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gcmVnaXN0ZXIgTFZEUyBwaXhlbCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2x2 ZHNfcHJvYmU7CisJfQorCisJbHZkcy0+bHZkc19icmlkZ2UuZnVuY3MgPSAmbHZkc19icmlkZ2Vf ZnVuY3M7CisJbHZkcy0+bHZkc19icmlkZ2Uub2Zfbm9kZSA9IGRldi0+b2Zfbm9kZTsKKwlsdmRz LT5od192ZXJzaW9uID0gbHZkc19yZWFkKGx2ZHMsIExWRFNfVkVSUik7CisKKwlkZXZfaW5mbyhk ZXYsICJ2ZXJzaW9uIDB4JTAyeCBpbml0aWFsaXplZFxuIiwgbHZkcy0+aHdfdmVyc2lvbik7CisK Kwlkcm1fYnJpZGdlX2FkZCgmbHZkcy0+bHZkc19icmlkZ2UpOworCisJcGxhdGZvcm1fc2V0X2Ry dmRhdGEocGRldiwgbHZkcyk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUobHZkcy0+cGNsayk7 CisKKwlyZXR1cm4gMDsKKworZXJyX2x2ZHNfcHJvYmU6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJl KGx2ZHMtPnBjbGspOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsdmRzX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzdG1fbHZkcyAqbHZk cyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbHZkc19waXhlbF9jbGtfdW5yZWdp c3RlcihsdmRzKTsKKworCWRybV9icmlkZ2VfcmVtb3ZlKCZsdmRzLT5sdmRzX2JyaWRnZSk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbHZkc19k dF9pZHNbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gInN0LHN0bTMybXAyNS1sdmRzIiwKKwkJ LmRhdGEgPSBOVUxMCisJfSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CisKK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIGx2ZHNfZHRfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgbHZkc19wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlID0gbHZkc19wcm9iZSwKKwkucmVt b3ZlID0gbHZkc19yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAic3RtMzItZGlzcGxh eS1sdmRzIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IGx2 ZHNfZHRfaWRzLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGx2ZHNfcGxhdGZv cm1fZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiUmFwaGHDq2wgR2FsbGFpcy1Qb3UgPHJhcGhh ZWwuZ2FsbGFpcy1wb3VAZm9zcy5zdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJQaGlsaXBwZSBD b3JudSA8cGhpbGlwcGUuY29ybnVAZm9zcy5zdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJZYW5u aWNrIEZlcnRyZSA8eWFubmljay5mZXJ0cmVAZm9zcy5zdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJ UFRJT04oIlNUTWljcm9lbGVjdHJvbmljcyBMVkRTIERpc3BsYXkgSW50ZXJmYWNlIFRyYW5zbWl0 dGVyIERSTSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKCi0tIAoyLjI1LjEKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0t a2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2Vy bmVsCg==