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 39F5DC47258 for ; Mon, 15 Jan 2024 13:21:36 +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:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=zTPH9h9dN4Z2ncqpn4D6U9X8sALxp38lTq/3fe/9Mpc=; b=vJt1dMdIkehwLd I9WF2TLpmBtEbXAZPiZx8KLHznCa6oyp1bVaP2bOd4HP2xJZnrMtEH4GbLGuLuuALW0xF9mo37lyA RCwxAic6asRRzPZPPEWlppor4BHotcyb0zixTstoM/2CDFzB5cPv5FGq5XHzn0iT/6EOONJwLHPth 61uJwiNbB8pEDAtXxm5Z0T2ChSemN0CNjmH0EG/tLaZs89Z/PTFrHANt32YKUd0sbU8T/wGrtjBRs XQGPBTeYnIQEpD5KpZOLqe82XQWhPI7gv2EYsbfegGLSpcxGGFMzw/J9n8Mw9CV9Wy3nbdG2LJul0 YZLdhMXRXMXksBK0tnxw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rPMth-0093LX-0r; Mon, 15 Jan 2024 13:21:01 +0000 Received: from mx08-00178001.pphosted.com ([91.207.212.93] helo=mx07-00178001.pphosted.com) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rPMtV-0093GO-2Y for linux-arm-kernel@lists.infradead.org; Mon, 15 Jan 2024 13:20:55 +0000 Received: from pps.filterd (m0046661.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 40F89vxK021194; Mon, 15 Jan 2024 14:20:25 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; s= selector1; bh=i3kOJKUUcdi611tuPccVYwKFd73+heGcmy5bIpLVeUo=; b=6L xCwESYWx0xjTUKd2rFm0ZBI4QTLNaHM1QYzqe+sIc2abGb/jd4hJGA3Gn6heskXV KoMoQTfBdwk472yknvx1e6A//37YBYq3h7ic8fryQar2DrzoTEIgx9eCEDaJdsye goa7uqGWy/U+Q7sRiXlas1l1cfAiwtQkz5Q8VrEfd9uRliwIKltx4uZFshgzVESr ce3NK6p25G65zAfOfoYQYET4GNjr/tqey/AyS8LJTZGpbTNnsAZ3uqnLT9NG7RZF PfOC5Z9G6w9jQ2cJibEj6XjQ02rgnhTV9dGi7Ggmgh3S+5T2LEle8p25WneF5y1q BFV6zCiuI2RuHtt7qkJA== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 3vkmddrm4k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 15 Jan 2024 14:20:25 +0100 (CET) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id A4B7A100064; Mon, 15 Jan 2024 14:20:24 +0100 (CET) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 999342831A2; Mon, 15 Jan 2024 14:20:24 +0100 (CET) Received: from localhost (10.129.178.37) 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, 15 Jan 2024 14:20:22 +0100 From: Raphael Gallais-Pou To: Yannick Fertre , Raphael Gallais-Pou , Philippe Cornu , David Airlie , Daniel Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel CC: , , , , Subject: [PATCH v3 2/6] drm/stm: lvds: add new STM32 LVDS Display Interface Transmitter driver Date: Mon, 15 Jan 2024 14:20:05 +0100 Message-ID: <20240115132009.101718-3-raphael.gallais-pou@foss.st.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240115132009.101718-1-raphael.gallais-pou@foss.st.com> References: <20240115132009.101718-1-raphael.gallais-pou@foss.st.com> MIME-Version: 1.0 X-Originating-IP: [10.129.178.37] X-ClientProxiedBy: EQNCAS1NODE3.st.com (10.75.129.80) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.997,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-01-05_08,2024-01-05_01,2023-05-22_02 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240115_052050_259902_E9F96E90 X-CRM114-Status: GOOD ( 22.70 ) 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 Y29tPgotLS0KQ2hhbmdlcyBpbiB2MzoKCS0gcy9yZWdyb3Vwcy9pcyBjb21wb3NlZCBvZi8gaW4g Y29tbWl0IGxvZwoJLSBDaGFuZ2UgdGhlIGNvbXBhdGlibGUgdG8gc2hvdyBTb0Mgc3BlY2lmaWNp dHkKCkNoYW5nZXMgaW4gdjI6CgktIEZpeGVkIENhbWVsIENhc2UgbWFjcm9zCgktIFJlbW92ZWQg ZGVidWcgbG9nCi0tLQogZHJpdmVycy9ncHUvZHJtL3N0bS9LY29uZmlnICB8ICAgMTEgKwogZHJp dmVycy9ncHUvZHJtL3N0bS9NYWtlZmlsZSB8ICAgIDIgKwogZHJpdmVycy9ncHUvZHJtL3N0bS9s dmRzLmMgICB8IDEyMjUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxl cyBjaGFuZ2VkLCAxMjM4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vc3RtL2x2ZHMuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdG0vS2Nv bmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vS2NvbmZpZwppbmRleCBmYTQ5Y2RlNDNiYjIuLjk2 Mjc4MTRkMDI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N0bS9LY29uZmlnCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9zdG0vS2NvbmZpZwpAQCAtMjAsMyArMjAsMTQgQEAgY29uZmlnIERS TV9TVE1fRFNJCiAJc2VsZWN0IERSTV9EV19NSVBJX0RTSQogCWhlbHAKIAkgIENob29zZSB0aGlz IG9wdGlvbiBmb3IgTUlQSSBEU0kgc3VwcG9ydCBvbiBTVE1pY3JvZWxlY3Ryb25pY3MgU29DLgor Citjb25maWcgRFJNX1NUTV9MVkRTCisJdHJpc3RhdGUgIlNUTWljcm9lbGVjdHJvbmljcyBMVkRT IERpc3BsYXkgSW50ZXJmYWNlIFRyYW5zbWl0dGVyIERSTSBkcml2ZXIiCisJZGVwZW5kcyBvbiBE Uk1fU1RNCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIExWRFMgZW5jb2RlcnMgb24gU1RN aWNyb2VsZWN0cm9uaWNzIFNvQy4KKwkgIFRoZSBTVE0gTFZEUyBpcyBhIGJyaWRnZSB3aGljaCBz ZXJpYWxpemUgcGl4ZWwgc3RyZWFtIG9udG8KKwkgIGEgTFZEUyBwcm90b2NvbC4KKworCSAgVG8g Y29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVs ZSB3aWxsIGJlCisJICBjYWxsZWQgbHZkcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9z dG0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vc3RtL01ha2VmaWxlCmluZGV4IDRkZjVjYWYw MWYzNS4uYWQ3NDBkNjE3NWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vc3RtL01ha2Vm aWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vTWFrZWZpbGUKQEAgLTUsNCArNSw2IEBAIHN0 bS1kcm0teSA6PSBcCiAKIG9iai0kKENPTkZJR19EUk1fU1RNX0RTSSkgKz0gZHdfbWlwaV9kc2kt c3RtLm8KIAorb2JqLSQoQ09ORklHX0RSTV9TVE1fTFZEUykgKz0gbHZkcy5vCisKIG9iai0kKENP TkZJR19EUk1fU1RNKSArPSBzdG0tZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9z dG0vbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL3N0bS9sdmRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iZWI4YjdlNDM3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vc3RtL2x2ZHMuYwpAQCAtMCwwICsxLDEyMjUgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjMs IFNUTWljcm9lbGVjdHJvbmljcyAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqIEF1dGhvcihzKTog UmFwaGHDq2wgR0FMTEFJUy1QT1UgPHJhcGhhZWwuZ2FsbGFpcy1wb3VAZm9zcy5zdC5jb20+IGZv ciBTVE1pY3JvZWxlY3Ryb25pY3MuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hl bHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fYnJpZGdlLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9k ZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5l bC5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3Byb2Jl X2hlbHBlci5oPgorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xr LXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3Bv bGwuaD4KKyNpbmNsdWRlIDxsaW51eC9tZWRpYS1idXMtZm9ybWF0Lmg+CisjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu dXgvcmVzZXQuaD4KKworLyogTFZEUyBIb3N0IHJlZ2lzdGVycyAqLworI2RlZmluZSBMVkRTX0NS CQkweDAwMDAgIC8qIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFZEU19ETUxD UjAJMHgwMDA0ICAvKiBkYXRhIG1hcHBpbmcgbHNiIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMCAq LworI2RlZmluZSBMVkRTX0RNTUNSMAkweDAwMDggIC8qIGRhdGEgbWFwcGluZyBtc2IgY29uZmln dXJhdGlvbiByZWdpc3RlciAwICovCisjZGVmaW5lIExWRFNfRE1MQ1IxCTB4MDAwQyAgLyogZGF0 YSBtYXBwaW5nIGxzYiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgTFZEU19E TU1DUjEJMHgwMDEwICAvKiBkYXRhIG1hcHBpbmcgbXNiIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIg MSAqLworI2RlZmluZSBMVkRTX0RNTENSMgkweDAwMTQgIC8qIGRhdGEgbWFwcGluZyBsc2IgY29u ZmlndXJhdGlvbiByZWdpc3RlciAyICovCisjZGVmaW5lIExWRFNfRE1NQ1IyCTB4MDAxOCAgLyog ZGF0YSBtYXBwaW5nIG1zYiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgTFZE U19ETUxDUjMJMHgwMDFDICAvKiBkYXRhIG1hcHBpbmcgbHNiIGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIgMyAqLworI2RlZmluZSBMVkRTX0RNTUNSMwkweDAwMjAgIC8qIGRhdGEgbWFwcGluZyBtc2Ig Y29uZmlndXJhdGlvbiByZWdpc3RlciAzICovCisjZGVmaW5lIExWRFNfRE1MQ1I0CTB4MDAyNCAg LyogZGF0YSBtYXBwaW5nIGxzYiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUg TFZEU19ETU1DUjQJMHgwMDI4ICAvKiBkYXRhIG1hcHBpbmcgbXNiIGNvbmZpZ3VyYXRpb24gcmVn aXN0ZXIgNCAqLworI2RlZmluZSBMVkRTX0NETDFDUgkweDAwMkMgIC8qIGNoYW5uZWwgZGlzdHJp YiBsaW5rIDEgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBMVkRTX0NETDJDUgkw eDAwMzAgIC8qIGNoYW5uZWwgZGlzdHJpYiBsaW5rIDIgY29uZmlndXJhdGlvbiByZWdpc3RlciAq LworCisjZGVmaW5lIENETDFDUl9ERUZBVUxUCTB4MDQzMjEgLyogRGVmYXVsdCB2YWx1ZSBmb3Ig Q0RMMUNSICovCisjZGVmaW5lIENETDJDUl9ERUZBVUxUCTB4NTk4NzYgLyogRGVmYXVsdCB2YWx1 ZSBmb3IgQ0RMMkNSICovCisKKyNkZWZpbmUgTFZEU19ETUxDUihiaXQpCShMVkRTX0RNTENSMCAr IDB4OCAqIChiaXQpKQorI2RlZmluZSBMVkRTX0RNTUNSKGJpdCkJKExWRFNfRE1NQ1IwICsgMHg4 ICogKGJpdCkpCisKKy8qIExWRFMgV3JhcHBlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTFZEU19X Q0xLQ1IJMHgxMUIwICAvKiBXcmFwcGVyIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKworI2Rl ZmluZSBMVkRTX0hXQ0ZHUgkweDFGRjAgIC8qIEhXIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIJKi8K KyNkZWZpbmUgTFZEU19WRVJSCTB4MUZGNCAgLyogVmVyc2lvbiByZWdpc3RlcgkqLworI2RlZmlu ZSBMVkRTX0lQSURSCTB4MUZGOCAgLyogSWRlbnRpZmljYXRpb24gcmVnaXN0ZXIJKi8KKyNkZWZp bmUgTFZEU19TSURSCTB4MUZGQyAgLyogU2l6ZSBJZGVudGlmaWNhdGlvbiByZWdpc3RlcgkqLwor CisvKiBCaXRmaWVsZCBkZXNjcmlwdGlvbiAqLworI2RlZmluZSBDUl9MVkRTRU4JQklUKDApICAv KiBMVkRTIFBIWSBFbmFibGUgKi8KKyNkZWZpbmUgQ1JfSFNQT0wJQklUKDEpICAvKiBIb3Jpem9u dGFsIFN5bmNocm9uaXphdGlvbiBQb2xhcml0eSAqLworI2RlZmluZSBDUl9WU1BPTAlCSVQoMikg IC8qIFZlcnRpY2FsIFN5bmNocm9uaXphdGlvbiBQb2xhcml0eSAqLworI2RlZmluZSBDUl9ERVBP TAlCSVQoMykgIC8qIERhdGEgRW5hYmxlIFBvbGFyaXR5ICovCisjZGVmaW5lIENSX0NJCQlCSVQo NCkgIC8qIENvbnRyb2wgSW50ZXJuYWwgKHNvZnR3YXJlIGNvbnRyb2xsZWQgYml0KSAqLworI2Rl ZmluZSBDUl9MS01PRAlCSVQoNSkgIC8qIExpbmsgTW9kZSwgZm9yIGJvdGggTGlua3MgKi8KKyNk ZWZpbmUgQ1JfTEtQSEEJQklUKDYpICAvKiBMaW5rIFBoYXNlLCBmb3IgYm90aCBMaW5rcyAqLwor I2RlZmluZSBDUl9MSzFQT0wJR0VOTUFTSygyMCwgMTYpICAvKiBMaW5rLTEgb3V0cHV0IFBvbGFy aXR5ICovCisjZGVmaW5lIENSX0xLMlBPTAlHRU5NQVNLKDI1LCAyMSkgIC8qIExpbmstMiBvdXRw dXQgUG9sYXJpdHkgKi8KKworI2RlZmluZSBETU1DUl9NQVAwCUdFTk1BU0soNCwgMCkgLyogTWFw cGluZyBmb3IgYml0IDAgb2YgZGF0YWxhbmUgeCAqLworI2RlZmluZSBETU1DUl9NQVAxCUdFTk1B U0soOSwgNSkgLyogTWFwcGluZyBmb3IgYml0IDEgb2YgZGF0YWxhbmUgeCAqLworI2RlZmluZSBE TU1DUl9NQVAyCUdFTk1BU0soMTQsIDEwKSAvKiBNYXBwaW5nIGZvciBiaXQgMiBvZiBkYXRhbGFu ZSB4ICovCisjZGVmaW5lIERNTUNSX01BUDMJR0VOTUFTSygxOSwgMTUpIC8qIE1hcHBpbmcgZm9y IGJpdCAzIG9mIGRhdGFsYW5lIHggKi8KKyNkZWZpbmUgRE1MQ1JfTUFQNAlHRU5NQVNLKDQsIDAp IC8qIE1hcHBpbmcgZm9yIGJpdCA0IG9mIGRhdGFsYW5lIHggKi8KKyNkZWZpbmUgRE1MQ1JfTUFQ NQlHRU5NQVNLKDksIDUpIC8qIE1hcHBpbmcgZm9yIGJpdCA1IG9mIGRhdGFsYW5lIHggKi8KKyNk ZWZpbmUgRE1MQ1JfTUFQNglHRU5NQVNLKDE0LCAxMCkgLyogTWFwcGluZyBmb3IgYml0IDYgb2Yg ZGF0YWxhbmUgeCAqLworCisjZGVmaW5lIENETENSX0RJU1RSMAlHRU5NQVNLKDMsIDApIC8qIENo YW5uZWwgZGlzdHJpYnV0aW9uIGZvciBsYW5lIDAgKi8KKyNkZWZpbmUgQ0RMQ1JfRElTVFIxCUdF Tk1BU0soNywgNCkgLyogQ2hhbm5lbCBkaXN0cmlidXRpb24gZm9yIGxhbmUgMSAqLworI2RlZmlu ZSBDRExDUl9ESVNUUjIJR0VOTUFTSygxMSwgOCkgLyogQ2hhbm5lbCBkaXN0cmlidXRpb24gZm9y IGxhbmUgMiAqLworI2RlZmluZSBDRExDUl9ESVNUUjMJR0VOTUFTSygxNSwgMTIpIC8qIENoYW5u ZWwgZGlzdHJpYnV0aW9uIGZvciBsYW5lIDMgKi8KKyNkZWZpbmUgQ0RMQ1JfRElTVFI0CUdFTk1B U0soMTksIDE2KSAvKiBDaGFubmVsIGRpc3RyaWJ1dGlvbiBmb3IgbGFuZSA0ICovCisKKyNkZWZp bmUgUEhZX0dDUl9CSVRfQ0xLX09VVAlCSVQoMCkgIC8qIEJJVCBjbG9jayBlbmFibGUgKi8KKyNk ZWZpbmUgUEhZX0dDUl9MU19DTEtfT1VUCUJJVCg0KSAgLyogTFMgY2xvY2sgZW5hYmxlICovCisj ZGVmaW5lIFBIWV9HQ1JfRFBfQ0xLX09VVAlCSVQoOCkgIC8qIERQIGNsb2NrIGVuYWJsZSAqLwor I2RlZmluZSBQSFlfR0NSX1JTVFoJCUJJVCgyNCkgLyogTFZEUyBQSFkgZGlnaXRhbCByZXNldCAq LworI2RlZmluZSBQSFlfR0NSX0RJVl9SU1ROCUJJVCgyNSkgLyogT3V0cHV0IGRpdmlkZXIgcmVz ZXQgKi8KKyNkZWZpbmUgUEhZX1NDUl9UWF9FTgkJQklUKDE2KSAvKiBUcmFuc21pc3Npb24gbW9k ZSBlbmFibGUgKi8KKy8qIEN1cnJlbnQgbW9kZSBkcml2ZXIgZW5hYmxlICovCisjZGVmaW5lIFBI WV9DTUNSX0NNX0VOX0RMCShCSVQoMjgpIHwgQklUKDIwKSB8IEJJVCgxMikgfCBCSVQoNCkpCisj ZGVmaW5lIFBIWV9DTUNSX0NNX0VOX0RMNAlCSVQoNCkKKy8qIEJpYXMgZW5hYmxlICovCisjZGVm aW5lIFBIWV9CQ1IxX0VOX0JJQVNfREwJKEJJVCgxNikgfCBCSVQoMTIpIHwgQklUKDgpIHwgQklU KDQpIHwgQklUKDApKQorI2RlZmluZSBQSFlfQkNSMl9CSUFTX0VOCUJJVCgyOCkKKy8qIFZvbHRh Z2UgbW9kZSBkcml2ZXIgZW5hYmxlICovCisjZGVmaW5lIFBIWV9CQ1IzX1ZNX0VOX0RMCShCSVQo MTYpIHwgQklUKDEyKSB8IEJJVCg4KSB8IEJJVCg0KSB8IEJJVCgwKSkKKyNkZWZpbmUgUEhZX0RD Ul9QT1dFUl9PSwlCSVQoMTIpCisjZGVmaW5lIFBIWV9DRkdDUl9FTl9ESUdfREwJR0VOTUFTSyg0 LCAwKSAvKiBMVkRTIFBIWSBkaWdpdGFsIGxhbmUgZW5hYmxlICovCisjZGVmaW5lIFBIWV9QTExD UjFfUExMX0VOCUJJVCgwKSAvKiBMVkRTIFBIWSBQTEwgZW5hYmxlICovCisjZGVmaW5lIFBIWV9Q TExDUjFfRU5fU0QJQklUKDEpIC8qIExWRFMgUEhZIFBMTCBzaWdtYS1kZWx0YSBzaWduYWwgZW5h YmxlICovCisjZGVmaW5lIFBIWV9QTExDUjFfRU5fVFdHCUJJVCgyKSAvKiBMVkRTIFBIWSBQTEwg dHJpYW5ndWxhciB3YXZlIGdlbmVyYXRvciBlbmFibGUgKi8KKyNkZWZpbmUgUEhZX1BMTENSMV9E SVZfRU4JQklUKDgpIC8qIExWRFMgUEhZIFBMTCBkaXZpZGVycyBlbmFibGUgKi8KKyNkZWZpbmUg UEhZX1BMTENSMl9ORElWCQlHRU5NQVNLKDI1LCAxNikgLyogTkRJViBtYXNrIHZhbHVlICovCisj ZGVmaW5lIFBIWV9QTExDUjJfQkRJVgkJR0VOTUFTSyg5LCAwKSAgIC8qIEJESVYgbWFzayB2YWx1 ZSAqLworI2RlZmluZSBQSFlfUExMU1JfUExMX0xPQ0sJQklUKDApIC8qIExWRFMgUEhZIFBMTCBs b2NrIHN0YXR1cyAqLworI2RlZmluZSBQSFlfUExMU0RDUjFfTURJVglHRU5NQVNLKDksIDApICAg LyogTURJViBtYXNrIHZhbHVlICovCisjZGVmaW5lIFBIWV9QTExURVNUQ1JfVERJVglHRU5NQVNL KDI1LCAxNikgLyogVERJViBtYXNrIHZhbHVlICovCisjZGVmaW5lIFBIWV9QTExURVNUQ1JfQ0xL X0VOCUJJVCgwKSAvKiBUZXN0IGNsb2NrIGVuYWJsZSAqLworI2RlZmluZSBQSFlfUExMVEVTVENS X0VOCUJJVCg4KSAvKiBUZXN0IGRpdmlkZXIgb3V0cHV0IGVuYWJsZSAqLworCisjZGVmaW5lIFdD TEtDUl9TRUNORF9DTEtQSVhfU0VMCUJJVCgwKSAvKiBQaXhlbCBjbG9jayBzZWxlY3Rpb24gKi8K KyNkZWZpbmUgV0NMS0NSX1NSQ1NFTAkJQklUKDgpIC8qIFNvdXJjZSBzZWxlY3Rpb24gZm9yIHRo ZSBwaXhlbCBjbG9jayAqLworCisvKiBTbGVlcCAmIHRpbWVvdXQgZm9yIHBsbCBsb2NrL3VubG9j ayAqLworI2RlZmluZSBTTEVFUF9VUwkxMDAwCisjZGVmaW5lIFRJTUVPVVRfVVMJMjAwMDAwCisK Ky8qCisgKiBUaGUgbGluayBwaGFzZSBkZWZpbmVzIHdoZXRoZXIgYW4gT0REIHBpeGVsIGlzIGNh cnJpZWQgb3ZlciB0b2dldGhlciB3aXRoCisgKiB0aGUgbmV4dCBFVkVOIHBpeGVsIG9yIHRvZ2V0 aGVyIHdpdGggdGhlIHByZXZpb3VzIEVWRU4gcGl4ZWwuCisgKgorICogTFZEU19EVUFMX0xJTktf RVZFTl9PRERfUElYRUxTIChMS1BIQSA9IDApCisgKgorICogLC0tLS0tLS0tLiAgLC0tLS0tLS0t LiAgLC0tLS0tLS0tLiAgLC0tLS0tLS0tLiAgLC0tLS0tLS0tLS4KKyAqIHwgT0REICBMSyBcLyBQ SVhFTCAgMyBcLyBQSVhFTCAgMSBcLyBQSVhFTCcgMSBcLyBQSVhFTCcgMyB8CisgKiB8IEVWRU4g TEsgL1wgUElYRUwgIDIgL1wgUElYRUwnIDAgL1wgUElYRUwnIDIgL1wgUElYRUwnIDQgfAorICog YC0tLS0tLS0tJyAgYC0tLS0tLS0tJyAgYC0tLS0tLS0tJyAgYC0tLS0tLS0tJyAgYC0tLS0tLS0t LScKKyAqCisgKiBMVkRTX0RVQUxfTElOS19PRERfRVZFTl9QSVhFTFMgKExLUEhBID0gMSkKKyAq CisgKiAsLS0tLS0tLS0uICAsLS0tLS0tLS0uICAsLS0tLS0tLS0uICAsLS0tLS0tLS0uICAsLS0t LS0tLS0tLgorICogfCBPREQgIExLIFwvIFBJWEVMICAzIFwvIFBJWEVMICAxIFwvIFBJWEVMJyAx IFwvIFBJWEVMJyAzIHwKKyAqIHwgRVZFTiBMSyAvXCBQSVhFTCAgNCAvXCBQSVhFTCAgMiAvXCBQ SVhFTCcgMCAvXCBQSVhFTCcgMiB8CisgKiBgLS0tLS0tLS0nICBgLS0tLS0tLS0nICBgLS0tLS0t LS0nICBgLS0tLS0tLS0nICBgLS0tLS0tLS0tJworICoKKyAqLworZW51bSBsdmRzX2xpbmtfdHlw ZSB7CisJTFZEU19TSU5HTEVfTElOS19QUklNQVJZID0gMCwKKwlMVkRTX1NJTkdMRV9MSU5LX1NF Q09OREFSWSwKKwlMVkRTX0RVQUxfTElOS19FVkVOX09ERF9QSVhFTFMsCisJTFZEU19EVUFMX0xJ TktfT0REX0VWRU5fUElYRUxTLAorfTsKKworZW51bSBsdmRzX3BpeGVsIHsKKwlQSVhfUl8wID0g MCwKKwlQSVhfUl8xLAorCVBJWF9SXzIsCisJUElYX1JfMywKKwlQSVhfUl80LAorCVBJWF9SXzUs CisJUElYX1JfNiwKKwlQSVhfUl83LAorCVBJWF9HXzAsCisJUElYX0dfMSwKKwlQSVhfR18yLAor CVBJWF9HXzMsCisJUElYX0dfNCwKKwlQSVhfR181LAorCVBJWF9HXzYsCisJUElYX0dfNywKKwlQ SVhfQl8wLAorCVBJWF9CXzEsCisJUElYX0JfMiwKKwlQSVhfQl8zLAorCVBJWF9CXzQsCisJUElY X0JfNSwKKwlQSVhfQl82LAorCVBJWF9CXzcsCisJUElYX0hfUywKKwlQSVhfVl9TLAorCVBJWF9E X0UsCisJUElYX0NfRSwKKwlQSVhfQ19JLAorCVBJWF9UT0csCisJUElYX09ORSwKKwlQSVhfWkVS LAorfTsKKworc3RydWN0IHBoeV9yZWdfb2Zmc2V0cyB7CisJdTMyIEdDUjsJLyogR2xvYmFsIENv bnRyb2wgUmVnaXN0ZXIJKi8KKwl1MzIgQ01DUjE7ICAgIC8qIEN1cnJlbnQgTW9kZSBDb250cm9s IFJlZ2lzdGVyIDEgKi8KKwl1MzIgQ01DUjI7ICAgIC8qIEN1cnJlbnQgTW9kZSBDb250cm9sIFJl Z2lzdGVyIDIgKi8KKwl1MzIgU0NSOyAgICAgIC8qIFNlcmlhbCBDb250cm9sIFJlZ2lzdGVyCSov CisJdTMyIEJDUjE7ICAgICAvKiBCaWFzIENvbnRyb2wgUmVnaXN0ZXIgMQkqLworCXUzMiBCQ1Iy OyAgICAgLyogQmlhcyBDb250cm9sIFJlZ2lzdGVyIDIJKi8KKwl1MzIgQkNSMzsgICAgIC8qIEJp YXMgQ29udHJvbCBSZWdpc3RlciAzCSovCisJdTMyIE1QTENSOyAgICAvKiBNb25pdG9yIFBMTCBM b2NrIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl1MzIgRENSOyAgICAgIC8qIERlYnVnIENvbnRyb2wg UmVnaXN0ZXIJKi8KKwl1MzIgU1NSMTsgICAgIC8qIFNwYXJlIFN0YXR1cyBSZWdpc3RlciAxCSov CisJdTMyIENGR0NSOyAgICAvKiBDb25maWd1cmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl1 MzIgUExMQ1IxOyAgIC8qIFBMTF9NT0RFIDEgQ29udHJvbCBSZWdpc3RlcgkqLworCXUzMiBQTExD UjI7ICAgLyogUExMX01PREUgMiBDb250cm9sIFJlZ2lzdGVyCSovCisJdTMyIFBMTFNSOyAgICAv KiBQTEwgU3RhdHVzIFJlZ2lzdGVyCSovCisJdTMyIFBMTFNEQ1IxOyAvKiBQTExfU0RfMSBDb250 cm9sIFJlZ2lzdGVyCSovCisJdTMyIFBMTFNEQ1IyOyAvKiBQTExfU0RfMiBDb250cm9sIFJlZ2lz dGVyCSovCisJdTMyIFBMTFRXR0NSMTsvKiBQTExfVFdHXzEgQ29udHJvbCBSZWdpc3RlcgkqLwor CXUzMiBQTExUV0dDUjI7LyogUExMX1RXR18yIENvbnRyb2wgUmVnaXN0ZXIJKi8KKwl1MzIgUExM Q1BDUjsgIC8qIFBMTF9DUCBDb250cm9sIFJlZ2lzdGVyCSovCisJdTMyIFBMTFRFU1RDUjsvKiBQ TExfVEVTVCBDb250cm9sIFJlZ2lzdGVyCSovCit9OworCitzdHJ1Y3QgbHZkc19waHlfaW5mbyB7 CisJdTMyIGJhc2U7CisJc3RydWN0IHBoeV9yZWdfb2Zmc2V0cyBvZnM7Cit9OworCitzdGF0aWMg c3RydWN0IGx2ZHNfcGh5X2luZm8gbHZkc19waHlfMTZmZl9wcmltYXJ5ID0geworCS5iYXNlID0g MHgxMDAwLAorCS5vZnMgPSB7CisJCS5HQ1IgPSAweDAsCisJCS5DTUNSMSA9IDB4QywKKwkJLkNN Q1IyID0gMHgxMCwKKwkJLlNDUiA9IDB4MjAsCisJCS5CQ1IxID0gMHgyQywKKwkJLkJDUjIgPSAw eDMwLAorCQkuQkNSMyA9IDB4MzQsCisJCS5NUExDUiA9IDB4NjQsCisJCS5EQ1IgPSAweDg0LAor CQkuU1NSMSA9IDB4ODgsCisJCS5DRkdDUiA9IDB4QTAsCisJCS5QTExDUjEgPSAweEMwLAorCQku UExMQ1IyID0gMHhDNCwKKwkJLlBMTFNSID0gMHhDOCwKKwkJLlBMTFNEQ1IxID0gMHhDQywKKwkJ LlBMTFNEQ1IyID0gMHhEMCwKKwkJLlBMTFRXR0NSMSA9IDB4RDQsCisJCS5QTExUV0dDUjIgPSAw eEQ4LAorCQkuUExMQ1BDUiA9IDB4RTAsCisJCS5QTExURVNUQ1IgPSAweEU4LAorCX0KK307CisK K3N0YXRpYyBzdHJ1Y3QgbHZkc19waHlfaW5mbyBsdmRzX3BoeV8xNmZmX3NlY29uZGFyeSA9IHsK KwkuYmFzZSA9IDB4MTEwMCwKKwkub2ZzID0geworCQkuR0NSID0gMHgwLAorCQkuQ01DUjEgPSAw eEMsCisJCS5DTUNSMiA9IDB4MTAsCisJCS5TQ1IgPSAweDIwLAorCQkuQkNSMSA9IDB4MkMsCisJ CS5CQ1IyID0gMHgzMCwKKwkJLkJDUjMgPSAweDM0LAorCQkuTVBMQ1IgPSAweDY0LAorCQkuRENS ID0gMHg4NCwKKwkJLlNTUjEgPSAweDg4LAorCQkuQ0ZHQ1IgPSAweEEwLAorCQkuUExMQ1IxID0g MHhDMCwKKwkJLlBMTENSMiA9IDB4QzQsCisJCS5QTExTUiA9IDB4QzgsCisJCS5QTExTRENSMSA9 IDB4Q0MsCisJCS5QTExTRENSMiA9IDB4RDAsCisJCS5QTExUV0dDUjEgPSAweEQ0LAorCQkuUExM VFdHQ1IyID0gMHhEOCwKKwkJLlBMTENQQ1IgPSAweEUwLAorCQkuUExMVEVTVENSID0gMHhFOCwK Kwl9Cit9OworCitzdHJ1Y3Qgc3RtX2x2ZHMgeworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGNsayAqcGNsazsJCS8qIEFQQiBwZXJpcGhlcmFsIGNs b2NrICovCisJc3RydWN0IGNsayAqcGxscmVmX2NsazsJCS8qIFJlZmVyZW5jZSBjbG9jayBmb3Ig dGhlIGludGVybmFsIFBMTCAqLworCXN0cnVjdCBjbGtfaHcgbHZkc19ja19weDsJLyogUGl4ZWwg Y2xvY2sgKi8KKwl1MzIgcGl4ZWxfY2xvY2tfcmF0ZTsJCS8qIFBpeGVsIGNsb2NrIHJhdGUgKi8K KworCXN0cnVjdCBsdmRzX3BoeV9pbmZvICpwcmltYXJ5OworCXN0cnVjdCBsdmRzX3BoeV9pbmZv ICpzZWNvbmRhcnk7CisKKwlzdHJ1Y3QgZHJtX2JyaWRnZSBsdmRzX2JyaWRnZTsKKwlzdHJ1Y3Qg ZHJtX2JyaWRnZSAqbmV4dF9icmlkZ2U7CisJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9y OworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5l bDsKKworCXUzMiBod192ZXJzaW9uOworCXUzMiBsaW5rX3R5cGU7Cit9OworCisjZGVmaW5lIGJy aWRnZV90b19zdG1fbHZkcyhiKSBcCisJY29udGFpbmVyX29mKGIsIHN0cnVjdCBzdG1fbHZkcywg bHZkc19icmlkZ2UpCisKKyNkZWZpbmUgY29ubmVjdG9yX3RvX3N0bV9sdmRzKGMpIFwKKwljb250 YWluZXJfb2YoYywgc3RydWN0IHN0bV9sdmRzLCBjb25uZWN0b3IpCisKKyNkZWZpbmUgbHZkc19p c19kdWFsX2xpbmsobHZkcykgXAorCSh7CVwKKwl0eXBlb2YobHZkcykgX19sdmRzID0gKGx2ZHMp OwlcCisJX19sdmRzID09IExWRFNfRFVBTF9MSU5LX0VWRU5fT0REX1BJWEVMUyB8fAlcCisJX19s dmRzID09IExWRFNfRFVBTF9MSU5LX09ERF9FVkVOX1BJWEVMUzsJXAorCX0pCisKK3N0YXRpYyBp bmxpbmUgdm9pZCBsdmRzX3dyaXRlKHN0cnVjdCBzdG1fbHZkcyAqbHZkcywgdTMyIHJlZywgdTMy IHZhbCkKK3sKKwl3cml0ZWwodmFsLCBsdmRzLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlu bGluZSB1MzIgbHZkc19yZWFkKHN0cnVjdCBzdG1fbHZkcyAqbHZkcywgdTMyIHJlZykKK3sKKwly ZXR1cm4gcmVhZGwobHZkcy0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBs dmRzX3NldChzdHJ1Y3Qgc3RtX2x2ZHMgKmx2ZHMsIHUzMiByZWcsIHUzMiBtYXNrKQoreworCWx2 ZHNfd3JpdGUobHZkcywgcmVnLCBsdmRzX3JlYWQobHZkcywgcmVnKSB8IG1hc2spOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgbHZkc19jbGVhcihzdHJ1Y3Qgc3RtX2x2ZHMgKmx2ZHMsIHUzMiBy ZWcsIHUzMiBtYXNrKQoreworCWx2ZHNfd3JpdGUobHZkcywgcmVnLCBsdmRzX3JlYWQobHZkcywg cmVnKSAmIH5tYXNrKTsKK30KKworLyoKKyAqIEV4cGVjdGVkIEpFSURBLVJHQjg4OCBkYXRhIHRv IGJlIHNlbnQgaW4gTFNCIGZvcm1hdAorICoJICAgIGJpdDYgLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLmJpdDAKKyAqIENIQU4wICAge09ORSwgT05FLCBaRVJPLCBaRVJPLCBaRVJPLCBPTkUs IE9ORX0KKyAqIENIQU4xICAge0cyLCAgUjcsICBSNiwgICBSNSwgICBSNCwgICBSMywgIFIyfQor ICogQ0hBTjIgICB7QjMsICBCMiwgIEc3LCAgIEc2LCAgIEc1LCAgIEc0LCAgRzN9CisgKiBDSEFO MyAgIHtERSwgIFZTLCAgSFMsICAgQjcsICAgQjYsICAgQjUsICBCNH0KKyAqIENIQU40ICAge0NF LCAgQjEsICBCMCwgICBHMSwgICBHMCwgICBSMSwgIFIwfQorICovCitlbnVtIGx2ZHNfcGl4ZWwg bHZkc19iaXRtYXBfamVpZGFfcmdiODg4WzVdWzddID0geworCXsgUElYX09ORSwgUElYX09ORSwg UElYX1pFUiwgUElYX1pFUiwgUElYX1pFUiwgUElYX09ORSwgUElYX09ORSB9LAorCXsgUElYX0df MiwgUElYX1JfNywgUElYX1JfNiwgUElYX1JfNSwgUElYX1JfNCwgUElYX1JfMywgUElYX1JfMiB9 LAorCXsgUElYX0JfMywgUElYX0JfMiwgUElYX0dfNywgUElYX0dfNiwgUElYX0dfNSwgUElYX0df NCwgUElYX0dfMyB9LAorCXsgUElYX0RfRSwgUElYX1ZfUywgUElYX0hfUywgUElYX0JfNywgUElY X0JfNiwgUElYX0JfNSwgUElYX0JfNCB9LAorCXsgUElYX0NfRSwgUElYX0JfMSwgUElYX0JfMCwg UElYX0dfMSwgUElYX0dfMCwgUElYX1JfMSwgUElYX1JfMCB9Cit9OworCisvKgorICogRXhwZWN0 ZWQgVkVTQS1SR0I4ODggZGF0YSB0byBiZSBzZW50IGluIExTQiBmb3JtYXQKKyAqCSAgICBiaXQ2 IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5iaXQwCisgKiBDSEFOMCAgIHtPTkUsIE9ORSwg WkVSTywgWkVSTywgWkVSTywgT05FLCBPTkV9CisgKiBDSEFOMSAgIHtHMCwgIFI1LCAgUjQsICAg UjMsICAgUjIsICAgUjEsICBSMH0KKyAqIENIQU4yICAge0IxLCAgQjAsICBHNSwgICBHNCwgICBH MywgICBHMiwgIEcxfQorICogQ0hBTjMgICB7REUsICBWUywgIEhTLCAgIEI1LCAgIEI0LCAgIEIz LCAgQjJ9CisgKiBDSEFONCAgIHtDRSwgIEI3LCAgQjYsICAgRzcsICAgRzYsICAgUjcsICBSNn0K KyAqLworZW51bSBsdmRzX3BpeGVsIGx2ZHNfYml0bWFwX3Zlc2FfcmdiODg4WzVdWzddID0gewor CXsgUElYX09ORSwgUElYX09ORSwgUElYX1pFUiwgUElYX1pFUiwgUElYX1pFUiwgUElYX09ORSwg UElYX09ORSB9LAorCXsgUElYX0dfMCwgUElYX1JfNSwgUElYX1JfNCwgUElYX1JfMywgUElYX1Jf MiwgUElYX1JfMSwgUElYX1JfMCB9LAorCXsgUElYX0JfMSwgUElYX0JfMCwgUElYX0dfNSwgUElY X0dfNCwgUElYX0dfMywgUElYX0dfMiwgUElYX0dfMSB9LAorCXsgUElYX0RfRSwgUElYX1ZfUywg UElYX0hfUywgUElYX0JfNSwgUElYX0JfNCwgUElYX0JfMywgUElYX0JfMiB9LAorCXsgUElYX0Nf RSwgUElYX0JfNywgUElYX0JfNiwgUElYX0dfNywgUElYX0dfNiwgUElYX1JfNywgUElYX1JfNiB9 Cit9OworCisvKgorICogQ2xvY2tzIGFuZCBQSFkgcmVsYXRlZCBmdW5jdGlvbnMKKyAqLworc3Rh dGljIGludCBsdmRzX3BsbF9lbmFibGUoc3RydWN0IHN0bV9sdmRzICpsdmRzLCBzdHJ1Y3QgbHZk c19waHlfaW5mbyAqcGh5KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBsdmRzLT5sdmRz X2JyaWRnZS5kZXY7CisJdTMyIGx2ZHNfZ2NyOworCWludCB2YWwsIHJldDsKKworCS8qCisJICog UExMIGxvY2sgdGltaW5nIGNvbnRyb2wgZm9yIHRoZSBtb25pdG9yIHVubWFzayBhZnRlciBzdGFy dHVwIChwbGxfZW4pCisJICogQWRqdXN0ZWQgdmFsdWUgc28gdGhhdCB0aGUgbWFza2luZyB3aW5k b3cgaXMgb3BlbmVkIGF0IHN0YXJ0LXVwCisJICovCisJbHZkc193cml0ZShsdmRzLCBwaHktPmJh c2UgKyBwaHktPm9mcy5NUExDUiwgKDB4MjAwIC0gMHgxNjApIDw8IDE2KTsKKworCS8qIEVuYWJs ZSBiaWFzICovCisJbHZkc193cml0ZShsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5CQ1IyLCBQ SFlfQkNSMl9CSUFTX0VOKTsKKworCS8qIEVuYWJsZSBEUCwgTFMsIEJJVCBjbG9jayBvdXRwdXQg Ki8KKwlsdmRzX2djciA9IFBIWV9HQ1JfRFBfQ0xLX09VVCB8IFBIWV9HQ1JfTFNfQ0xLX09VVCB8 IFBIWV9HQ1JfQklUX0NMS19PVVQ7CisJbHZkc19zZXQobHZkcywgcGh5LT5iYXNlICsgcGh5LT5v ZnMuR0NSLCBsdmRzX2djcik7CisKKwkvKiBQb3dlciB1cCBhbGwgb3V0cHV0IGRpdmlkZXJzICov CisJbHZkc19zZXQobHZkcywgcGh5LT5iYXNlICsgcGh5LT5vZnMuUExMVEVTVENSLCBQSFlfUExM VEVTVENSX0VOKTsKKwlsdmRzX3NldChsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5QTExDUjEs IFBIWV9QTExDUjFfRElWX0VOKTsKKworCS8qIFNldCBQSFkgaW4gc2VyaWFsIHRyYW5zbWlzc2lv biBtb2RlICovCisJbHZkc19zZXQobHZkcywgcGh5LT5iYXNlICsgcGh5LT5vZnMuU0NSLCBQSFlf U0NSX1RYX0VOKTsKKworCS8qIEVuYWJsZSB0aGUgTFZEUyBQTEwgJiB3YWl0IGZvciBpdHMgbG9j ayAqLworCWx2ZHNfc2V0KGx2ZHMsIHBoeS0+YmFzZSArIHBoeS0+b2ZzLlBMTENSMSwgUEhZX1BM TENSMV9QTExfRU4pOworCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dF9hdG9taWMobHZkcy0+YmFz ZSArIHBoeS0+YmFzZSArIHBoeS0+b2ZzLlBMTFNSLAorCQkJCQl2YWwsIHZhbCAmIFBIWV9QTExT Ul9QTExfTE9DSywKKwkJCQkJU0xFRVBfVVMsIFRJTUVPVVRfVVMpOworCWlmIChyZXQpCisJCWRy bV9lcnIoZHJtLCAiIVRJTUVPVVQhIHdhaXRpbmcgUExMLCBsZXQncyBjb250aW51ZVxuIik7CisK KwkvKiBXQ0xLQ1JfU0VDTkRfQ0xLUElYX1NFTCBpcyBmb3IgZHVhbCBsaW5rICovCisJbHZkc193 cml0ZShsdmRzLCBMVkRTX1dDTEtDUiwgV0NMS0NSX1NFQ05EX0NMS1BJWF9TRUwpOworCisJbHZk c19zZXQobHZkcywgcGh5LT5vZnMuUExMVEVTVENSLCBQSFlfUExMVEVTVENSX0NMS19FTik7CisK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBsbF9nZXRfY2xrb3V0X2toeihpbnQgY2xr aW5fa2h6LCBpbnQgYmRpdiwgaW50IG1kaXYsIGludCBuZGl2KQoreworCWludCBkaXZpc29yID0g bmRpdiAqIGJkaXY7CisKKwkvKiBQcmV2ZW50cyBmcm9tIGRpdmlzaW9uIGJ5IDAgKi8KKwlpZiAo IWRpdmlzb3IpCisJCXJldHVybiAwOworCisJcmV0dXJuIGNsa2luX2toeiAqIG1kaXYgLyBkaXZp c29yOworfQorCisjZGVmaW5lIFRESVYJNzAKKyNkZWZpbmUgTkRJVl9NSU4JMgorI2RlZmluZSBO RElWX01BWAk2CisjZGVmaW5lIEJESVZfTUlOCTIKKyNkZWZpbmUgQkRJVl9NQVgJNgorI2RlZmlu ZSBNRElWX01JTgkxCisjZGVmaW5lIE1ESVZfTUFYCTEwMjMKKworc3RhdGljIGludCBsdmRzX3Bs bF9nZXRfcGFyYW1zKHN0cnVjdCBzdG1fbHZkcyAqbHZkcywKKwkJCSAgICAgICB1bnNpZ25lZCBp bnQgY2xraW5fa2h6LCB1bnNpZ25lZCBpbnQgY2xrb3V0X2toeiwKKwkJCSAgICAgICB1bnNpZ25l ZCBpbnQgKmJkaXYsIHVuc2lnbmVkIGludCAqbWRpdiwgdW5zaWduZWQgaW50ICpuZGl2KQorewor CWludCBkZWx0YSwgYmVzdF9kZWx0YTsgLyogYWxsIGluIGtoeiAqLworCWludCBpLCBvLCBuOwor CisJLyogRWFybHkgY2hlY2tzIHByZXZlbnRpbmcgZGl2aXNpb24gYnkgMCAmIG9kZCByZXN1bHRz ICovCisJaWYgKGNsa2luX2toeiA8PSAwIHx8IGNsa291dF9raHogPD0gMCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwliZXN0X2RlbHRhID0gMTAwMDAwMDsgLyogYmlnIHN0YXJ0ZWQgdmFsdWUgKDEw MDAwMDBraHopICovCisKKwlmb3IgKGkgPSBORElWX01JTjsgaSA8PSBORElWX01BWDsgaSsrKSB7 CisJCWZvciAobyA9IEJESVZfTUlOOyBvIDw9IEJESVZfTUFYOyBvKyspIHsKKwkJCW4gPSBESVZf Uk9VTkRfQ0xPU0VTVChpICogbyAqIGNsa291dF9raHosIGNsa2luX2toeik7CisJCQkvKiBDaGVj ayBuZGl2IGFjY29yZGluZyB0byB2Y28gcmFuZ2UgKi8KKwkJCWlmIChuIDwgTURJVl9NSU4gfHwg biA+IE1ESVZfTUFYKQorCQkJCWNvbnRpbnVlOworCQkJLyogQ2hlY2sgaWYgbmV3IGRlbHRhIGlz IGJldHRlciAmIHNhdmVzIHBhcmFtZXRlcnMgKi8KKwkJCWRlbHRhID0gcGxsX2dldF9jbGtvdXRf a2h6KGNsa2luX2toeiwgaSwgbiwgbykgLSBjbGtvdXRfa2h6OworCQkJaWYgKGRlbHRhIDwgMCkK KwkJCQlkZWx0YSA9IC1kZWx0YTsKKwkJCWlmIChkZWx0YSA8IGJlc3RfZGVsdGEpIHsKKwkJCQkq bmRpdiA9IGk7CisJCQkJKm1kaXYgPSBuOworCQkJCSpiZGl2ID0gbzsKKwkJCQliZXN0X2RlbHRh ID0gZGVsdGE7CisJCQl9CisJCQkvKiBmYXN0IHJldHVybiBpbiBjYXNlIG9mICJwZXJmZWN0IHJl c3VsdCIgKi8KKwkJCWlmICghZGVsdGEpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgbHZkc19wbGxfY29uZmlnKHN0cnVjdCBzdG1fbHZkcyAq bHZkcywgc3RydWN0IGx2ZHNfcGh5X2luZm8gKnBoeSkKK3sKKwl1bnNpZ25lZCBpbnQgcGxsX2lu X2toeiwgYmRpdiA9IDAsIG1kaXYgPSAwLCBuZGl2ID0gMDsKKwlzdHJ1Y3QgY2xrX2h3ICpod2Ns azsKKwlpbnQgbXVsdGlwbGllcjsKKworCS8qCisJICogVGhlIExWRFMgUEhZIGluY2x1ZGVzIGEg bG93IHBvd2VyIGxvdyBqaXR0ZXIgaGlnaCBwZXJmb3JtYW5jZSBhbmQKKwkgKiBoaWdobHkgY29u ZmlndXJhdGlvbiBQaGFzZSBMb2NrZWQgTG9vcCBzdXBwb3J0aW5nIGludGVnZXIgYW5kCisJICog ZnJhY3Rpb25hbCBtdWx0aXBsaWNhdGlvbiByYXRpb3MgYW5kIFNwcmVhZCBTcGVjdHJ1bSBDbG9j a2luZy4gIEluCisJICogaW50ZWdlciBtb2RlLCB0aGUgb25seSBzb2Z0d2FyZSBzdXBwb3J0ZWQg ZmVhdHVyZSBmb3Igbm93LCB0aGUgUExMIGlzCisJICogbWFkZSBvZiBhIHByZS1kaXZpZGVyIE5E SVYsIGEgZmVlZGJhY2sgbXVsdGlwbGllciBNRElWLCBmb2xsb3dlZCBieQorCSAqIHNldmVyYWwg cG9zdC1kaXZpZGVycywgZWFjaCBvbmUgd2l0aCBhIHNwZWNpZmljIGFwcGxpY2F0aW9uLgorCSAq CisJICogICAgICAgICAgLC0tLS0tLS4gICAgICAgICAsLS0tLS0uICAgICAsLS0tLS0uCisJICog RnJlZiAtLT4gfCBORElWIHwgLUZwZGYtPiB8IFBGRCB8IC0tPiB8IFZDTyB8IC0tLS0tLS0tPiBG dmNvCisJICogICAgICAgICAgYC0tLS0tLScgICAgICwtPiB8ICAgICB8ICAgICBgLS0tLS0nICB8 CisJICogICAgICAgICAgICAgICAgICAgICAgIHwgICBgLS0tLS0nICAgICAgICAgICAgICB8CisJ ICogICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAsLS0tLS0tLiAgICAgICB8CisJICog ICAgICAgICAgICAgICAgICAgICAgIGAtLS0tLS0tLSB8IE1ESVYgfCA8LS0tLS0nCisJICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgLS0tLS0tJworCSAqCisJICogRnJvbSB0aGUg b3V0cHV0IG9mIHRoZSBWQ08sIHRoZSBjbG9jayBjYW4gYmUgb3B0aW9uYWxseSBleHRyYWN0ZWQg b24KKwkgKiB0aGUgUkNDIGNsb2NrIG9ic2VydmVyLCB3aXRoIGEgZGl2aWRlciBURElWLCBmb3Ig dGVzdGluZyBwdXJwb3NlLCBvcgorCSAqIGlzIHBhc3NlZCB0aHJvdWdoIGEgcHJvZ3JhbW1hYmxl IHBvc3QtZGl2aWRlciBCRElWLiAgRmluYWxseSwgdGhlCisJICogZnJlcXVlbmN5IGNhbiBiZSBk aXZpZGVkIGZ1cnRoZXIgd2l0aCB0d28gZml4ZWQgZGl2aWRlcnMuCisJICoKKwkgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAsLS0tLS0tLS0uCisJICogICAgICAgICAgICAgICAgICAgICwt LS0tLT4gfCBEUCBkaXYgfCAtLS0tLS0tLS0tLS0tLS0tPiBGZHAKKwkgKiAgICAgICAgICAsLS0t LS0tLiAgfCAgICAgICBgLS0tLS0tLS0nCisJICogRnZjbyAtLT4gfCBCRElWIHwgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiBGYml0CisJICogICAgICB8ICAgYC0tLS0tLScg ICAgLC0tLS0tLS4gICB8CisJICogICAgICBgLS0tLS0tLS0tLS0tLT4gfCBURElWIHwgLS0uLS0t LS0tLS0tLS0tLS0tLS0tLS0tPiBDbGtPYnMKKwkgKiAgICAgICAgICAgICAgICAgICAgICAnLS0t LS0tJyAgIHwgICAgLC0tLS0tLS0tLgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYC0tPiB8IExTIGRpdiB8IC0tLS0tLT4gRmxzCisJICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICctLS0tLS0tLScKKwkgKgorCSAqIFRoZSBMUyBhbmQgRFAgY2xvY2sg ZGl2aWRlcnMgb3BlcmF0ZSBhdCBhIGZpeGVkIHJhdGlvIG9mIDcgYW5kIDMuNQorCSAqIHJlc3Bl Y3RpdmVseSB3aXRoIHJlZ2FyZHMgdG8gZmJpdC4gTFMgZGl2aWRlciBjb252ZXJ0cyB0aGUgYml0 IGNsb2NrCisJICogdG8gYSBwaXhlbCBjbG9jayBwZXIgbGFuZSBwZXIgY2xvY2sgc2FtcGxlIChG bHMpLiAgVGhpcyBpcyB1c2VmdWwKKwkgKiB3aGVuIHVzZWQgdG8gZ2VuZXJhdGUgYSBkb3QgY2xv Y2sgZm9yIHRoZSBkaXNwbGF5IHVuaXQgUkdCIG91dHB1dCwKKwkgKiBhbmQgRFAgZGl2aWRlciBp cy4KKwkgKi8KKworCWh3Y2xrID0gX19jbGtfZ2V0X2h3KGx2ZHMtPnBsbHJlZl9jbGspOworCWlm ICghaHdjbGspCisJCXJldHVybjsKKworCXBsbF9pbl9raHogPSBjbGtfaHdfZ2V0X3JhdGUoaHdj bGspIC8gMTAwMDsKKworCWlmIChsdmRzX2lzX2R1YWxfbGluayhsdmRzLT5saW5rX3R5cGUpKQor CQltdWx0aXBsaWVyID0gMjsKKwllbHNlCisJCW11bHRpcGxpZXIgPSAxOworCisJbHZkc19wbGxf Z2V0X3BhcmFtcyhsdmRzLCBwbGxfaW5fa2h6LAorCQkJICAgIGx2ZHMtPnBpeGVsX2Nsb2NrX3Jh dGUgKiA3IC8gMTAwMCAvIG11bHRpcGxpZXIsCisJCQkgICAgJmJkaXYsICZtZGl2LCAmbmRpdik7 CisKKwkvKiBTZXQgQkRJViwgTURJViBhbmQgTkRJViAqLworCWx2ZHNfd3JpdGUobHZkcywgcGh5 LT5iYXNlICsgcGh5LT5vZnMuUExMQ1IyLCBuZGl2IDw8IDE2KTsKKwlsdmRzX3NldChsdmRzLCBw aHktPmJhc2UgKyBwaHktPm9mcy5QTExDUjIsIGJkaXYpOworCWx2ZHNfd3JpdGUobHZkcywgcGh5 LT5iYXNlICsgcGh5LT5vZnMuUExMU0RDUjEsIG1kaXYpOworCisJLyogSGFyZGNvZGUgVERJViBh cyBkeW5hbWljIHZhbHVlcyBhcmUgbm90IHlldCBpbXBsZW1lbnRlZCAqLworCWx2ZHNfd3JpdGUo bHZkcywgcGh5LT5iYXNlICsgcGh5LT5vZnMuUExMVEVTVENSLCBURElWIDw8IDE2KTsKKworCS8q CisJICogRm9yIG5vdywgUExMIGp1c3QgbmVlZHMgdG8gYmUgaW4gaW50ZWdlciBtb2RlCisJICog RnJhY3Rpb25hbCBhbmQgc3ByZWFkIHNwZWN0cnVtIGNsb2NraW5nIGFyZSBub3QgeWV0IGltcGxl bWVudGVkCisJICoKKwkgKiBQTEwgaW50ZWdlciBtb2RlOgorCSAqCS0gUE1SWV9QTExfVFdHX1NU RVAgPSBQTVJZX1BMTF9TRF9JTlRfUkFUSU8KKwkgKgktIEVOX1RXRyA9IDAKKwkgKgktIEVOX1NE ID0gMAorCSAqCS0gRE9XTl9TUFJFQUQgPSAwCisJICoKKwkgKiBQTEwgZnJhY3Rpb25hbCBtb2Rl OgorCSAqCS0gRU5fVFdHID0gMAorCSAqCS0gRU5fU0QgPSAxCisJICoJLSBET1dOX1NQUkVBRCA9 IDAKKwkgKgorCSAqIFNwcmVhZCBTcGVjdHJ1bSBDbG9ja2luZworCSAqCS0gRU5fVFdHID0gMQor CSAqCS0gRU5fU0QgPSAxCisJICovCisKKwkvKiBEaXNhYmxlIFRXRyBhbmQgU0QgKi8KKwlsdmRz X2NsZWFyKGx2ZHMsIHBoeS0+YmFzZSArIHBoeS0+b2ZzLlBMTENSMSwgUEhZX1BMTENSMV9FTl9U V0cgfCBQSFlfUExMQ1IxX0VOX1NEKTsKKworCS8qIFBvd2VyIHVwIGJpYXMgYW5kIFBMTCBkaXZp ZGVycyAqLworCWx2ZHNfc2V0KGx2ZHMsIHBoeS0+YmFzZSArIHBoeS0+b2ZzLkRDUiwgUEhZX0RD Ul9QT1dFUl9PSyk7CisJbHZkc19zZXQobHZkcywgcGh5LT5iYXNlICsgcGh5LT5vZnMuQ01DUjEs IFBIWV9DTUNSX0NNX0VOX0RMKTsKKwlsdmRzX3NldChsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9m cy5DTUNSMiwgUEhZX0NNQ1JfQ01fRU5fREw0KTsKKworCS8qIFNldCB1cCB2b2x0YWdlIG1vZGUg Ki8KKwlsdmRzX3NldChsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5QTExDUENSLCAweDEpOwor CWx2ZHNfc2V0KGx2ZHMsIHBoeS0+YmFzZSArIHBoeS0+b2ZzLkJDUjMsIFBIWV9CQ1IzX1ZNX0VO X0RMKTsKKwlsdmRzX3NldChsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5CQ1IxLCBQSFlfQkNS MV9FTl9CSUFTX0RMKTsKKwkvKiBFbmFibGUgZGlnaXRhbCBkYXRhbGFuZXMgKi8KKwlsdmRzX3Nl dChsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5DRkdDUiwgUEhZX0NGR0NSX0VOX0RJR19ETCk7 Cit9CisKK3N0YXRpYyBpbnQgbHZkc19waXhlbF9jbGtfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3 KQoreworCXN0cnVjdCBzdG1fbHZkcyAqbHZkcyA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IHN0 bV9sdmRzLCBsdmRzX2NrX3B4KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gbHZkcy0+bHZk c19icmlkZ2UuZGV2OworCXN0cnVjdCBsdmRzX3BoeV9pbmZvICpwaHk7CisJaW50IHJldDsKKwor CXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShsdmRzLT5wY2xrKTsKKwlpZiAocmV0KSB7CisJCWRy bV9lcnIoZHJtLCAiRmFpbGVkIHRvIGVuYWJsZSBsdmRzIHBlcmlwaGVyYWwgY2xrXG4iKTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUobHZkcy0+cGxscmVm X2Nsayk7CisJaWYgKHJldCkgeworCQlkcm1fZXJyKGRybSwgIkZhaWxlZCB0byBlbmFibGUgbHZk cyByZWZlcmVuY2UgY2xrXG4iKTsKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGx2ZHMtPnBjbGsp OworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEluIGNhc2Ugd2UgYXJlIG9wZXJhdGluZyBpbiBk dWFsIGxpbmsgdGhlIHNlY29uZCBQSFkgaXMgc2V0IGJlZm9yZSB0aGUgcHJpbWFyeSBQSFkuICov CisJaWYgKGx2ZHMtPnNlY29uZGFyeSkgeworCQlwaHkgPSBsdmRzLT5zZWNvbmRhcnk7CisKKwkJ LyogUmVsZWFzZSBMVkRTIFBIWSBmcm9tIHJlc2V0IG1vZGUgKi8KKwkJbHZkc19zZXQobHZkcywg cGh5LT5iYXNlICsgcGh5LT5vZnMuR0NSLCBQSFlfR0NSX0RJVl9SU1ROIHwgUEhZX0dDUl9SU1Ra KTsKKwkJbHZkc19wbGxfY29uZmlnKGx2ZHMsIHBoeSk7CisKKwkJcmV0ID0gbHZkc19wbGxfZW5h YmxlKGx2ZHMsIHBoeSk7CisJCWlmIChyZXQpIHsKKwkJCWRybV9lcnIoZHJtLCAiRmFpbGVkIHRv IGVuYWJsZSBzZWNvbmRhcnkgUEhZIFBMTDogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0Owor CQl9CisJfQorCisJaWYgKGx2ZHMtPnByaW1hcnkpIHsKKwkJcGh5ID0gbHZkcy0+cHJpbWFyeTsK KworCQkvKiBSZWxlYXNlIExWRFMgUEhZIGZyb20gcmVzZXQgbW9kZSAqLworCQlsdmRzX3NldChs dmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5HQ1IsIFBIWV9HQ1JfRElWX1JTVE4gfCBQSFlfR0NS X1JTVFopOworCQlsdmRzX3BsbF9jb25maWcobHZkcywgcGh5KTsKKworCQlyZXQgPSBsdmRzX3Bs bF9lbmFibGUobHZkcywgcGh5KTsKKwkJaWYgKHJldCkgeworCQkJZHJtX2Vycihkcm0sICJGYWls ZWQgdG8gZW5hYmxlIHByaW1hcnkgUEhZIFBMTDogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0 OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGx2ZHNfcGl4ZWxfY2xr X2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpCit7CisJc3RydWN0IHN0bV9sdmRzICpsdmRzID0g Y29udGFpbmVyX29mKGh3LCBzdHJ1Y3Qgc3RtX2x2ZHMsIGx2ZHNfY2tfcHgpOworCisJLyoKKwkg KiBGb3IgZWFjaCBQSFk6CisJICogRGlzYWJsZSBEUCwgTFMsIEJJVCBjbG9jayBvdXRwdXRzCisJ ICogU2h1dGRvd24gdGhlIFBMTAorCSAqIEFzc2VydCBMVkRTIFBIWSBpbiByZXNldCBtb2RlCisJ ICovCisKKwlpZiAobHZkcy0+cHJpbWFyeSkgeworCQlsdmRzX2NsZWFyKGx2ZHMsIGx2ZHMtPnBy aW1hcnktPmJhc2UgKyBsdmRzLT5wcmltYXJ5LT5vZnMuR0NSLAorCQkJICAgKFBIWV9HQ1JfRFBf Q0xLX09VVCB8IFBIWV9HQ1JfTFNfQ0xLX09VVCB8IFBIWV9HQ1JfQklUX0NMS19PVVQpKTsKKwkJ bHZkc19jbGVhcihsdmRzLCBsdmRzLT5wcmltYXJ5LT5iYXNlICsgbHZkcy0+cHJpbWFyeS0+b2Zz LlBMTENSMSwKKwkJCSAgIFBIWV9QTExDUjFfUExMX0VOKTsKKwkJbHZkc19jbGVhcihsdmRzLCBs dmRzLT5wcmltYXJ5LT5iYXNlICsgbHZkcy0+cHJpbWFyeS0+b2ZzLkdDUiwKKwkJCSAgIFBIWV9H Q1JfRElWX1JTVE4gfCBQSFlfR0NSX1JTVFopOworCX0KKworCWlmIChsdmRzLT5zZWNvbmRhcnkp IHsKKwkJbHZkc19jbGVhcihsdmRzLCBsdmRzLT5zZWNvbmRhcnktPmJhc2UgKyBsdmRzLT5zZWNv bmRhcnktPm9mcy5HQ1IsCisJCQkgICAoUEhZX0dDUl9EUF9DTEtfT1VUIHwgUEhZX0dDUl9MU19D TEtfT1VUIHwgUEhZX0dDUl9CSVRfQ0xLX09VVCkpOworCQlsdmRzX2NsZWFyKGx2ZHMsIGx2ZHMt PnNlY29uZGFyeS0+YmFzZSArIGx2ZHMtPnNlY29uZGFyeS0+b2ZzLlBMTENSMSwKKwkJCSAgIFBI WV9QTExDUjFfUExMX0VOKTsKKwkJbHZkc19jbGVhcihsdmRzLCBsdmRzLT5zZWNvbmRhcnktPmJh c2UgKyBsdmRzLT5zZWNvbmRhcnktPm9mcy5HQ1IsCisJCQkgICBQSFlfR0NSX0RJVl9SU1ROIHwg UEhZX0dDUl9SU1RaKTsKKwl9CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUobHZkcy0+cGxscmVm X2Nsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGx2ZHMtPnBjbGspOworfQorCitzdGF0aWMg dW5zaWduZWQgbG9uZyBsdmRzX3BpeGVsX2Nsa19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpo dywKKwkJCQkJCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IHN0bV9sdmRz ICpsdmRzID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3Qgc3RtX2x2ZHMsIGx2ZHNfY2tfcHgpOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBsdmRzLT5sdmRzX2JyaWRnZS5kZXY7CisJdW5zaWdu ZWQgaW50IHBsbF9pbl9raHosIGJkaXYsIG1kaXYsIG5kaXY7CisJaW50IHJldCwgbXVsdGlwbGll ciwgcGxsX291dF9raHo7CisJdTMyIHZhbDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShs dmRzLT5wY2xrKTsKKwlpZiAocmV0KSB7CisJCWRybV9lcnIoZHJtLCAiRmFpbGVkIHRvIGVuYWJs ZSBsdmRzIHBlcmlwaGVyYWwgY2xrXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGx2ZHNf aXNfZHVhbF9saW5rKGx2ZHMtPmxpbmtfdHlwZSkpCisJCW11bHRpcGxpZXIgPSAyOworCWVsc2UK KwkJbXVsdGlwbGllciA9IDE7CisKKwl2YWwgPSBsdmRzX3JlYWQobHZkcywgbHZkcy0+cHJpbWFy eS0+YmFzZSArIGx2ZHMtPnByaW1hcnktPm9mcy5QTExDUjIpOworCisJbmRpdiA9ICh2YWwgJiBQ SFlfUExMQ1IyX05ESVYpID4+IDE2OworCWJkaXYgPSAodmFsICYgUEhZX1BMTENSMl9CRElWKSA+ PiAwOworCisJbWRpdiA9ICh1bnNpZ25lZCBpbnQpbHZkc19yZWFkKGx2ZHMsCisJCQkJICAgICAg IGx2ZHMtPnByaW1hcnktPmJhc2UgKyBsdmRzLT5wcmltYXJ5LT5vZnMuUExMU0RDUjEpOworCisJ cGxsX2luX2toeiA9ICh1bnNpZ25lZCBpbnQpKHBhcmVudF9yYXRlIC8gMTAwMCk7CisKKwkvKiBD b21wdXRlIHZhbHVlcyBpZiBub3QgeWV0IGFjY2Vzc2libGUgKi8KKwlpZiAodmFsID09IDAgfHwg bWRpdiA9PSAwKSB7CisJCWx2ZHNfcGxsX2dldF9wYXJhbXMobHZkcywgcGxsX2luX2toeiwKKwkJ CQkgICAgbHZkcy0+cGl4ZWxfY2xvY2tfcmF0ZSAqIDcgLyAxMDAwIC8gbXVsdGlwbGllciwKKwkJ CQkgICAgJmJkaXYsICZtZGl2LCAmbmRpdik7CisJfQorCisJcGxsX291dF9raHogPSBwbGxfZ2V0 X2Nsa291dF9raHoocGxsX2luX2toeiwgYmRpdiwgbWRpdiwgbmRpdik7CisJZHJtX2RiZyhkcm0s ICJuZGl2ICVkICwgYmRpdiAlZCwgbWRpdiAlZCwgcGxsX291dF9raHogJWRcbiIsCisJCW5kaXYs IGJkaXYsIG1kaXYsIHBsbF9vdXRfa2h6KTsKKworCS8qCisJICogMS83IGJlY2F1c2UgZm9yIGVh Y2ggcGl4ZWwgaW4gMSBsYW5lIHRoZXJlIGlzIDcgYml0cworCSAqIFdlIHdhbnQgcGl4Y2xrLCBu b3QgYml0Y2xrCisJICovCisJbHZkcy0+cGl4ZWxfY2xvY2tfcmF0ZSA9IHBsbF9vdXRfa2h6ICog MTAwMCAqIG11bHRpcGxpZXIgLyA3OworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGx2ZHMtPnBj bGspOworCisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWx2ZHMtPnBpeGVsX2Nsb2NrX3JhdGU7Cit9 CisKK3N0YXRpYyBsb25nIGx2ZHNfcGl4ZWxfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAq aHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nICpwYXJlbnRf cmF0ZSkKK3sKKwlzdHJ1Y3Qgc3RtX2x2ZHMgKmx2ZHMgPSBjb250YWluZXJfb2YoaHcsIHN0cnVj dCBzdG1fbHZkcywgbHZkc19ja19weCk7CisJdW5zaWduZWQgaW50IHBsbF9pbl9raHosIGJkaXYg PSAwLCBtZGl2ID0gMCwgbmRpdiA9IDA7CisJY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcjsKKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlpbnQgbXVs dGlwbGllcjsKKworCWNvbm5lY3RvciA9ICZsdmRzLT5jb25uZWN0b3I7CisJaWYgKCFjb25uZWN0 b3IpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGxpc3RfZW1wdHkoJmNvbm5lY3Rvci0+bW9k ZXMpKSB7CisJCWRybV9kYmcoY29ubmVjdG9yLT5kZXYsICJjb25uZWN0b3I6IGVtcHR5IG1vZGVz IGxpc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltb2RlID0gbGlzdF9maXJzdF9l bnRyeSgmY29ubmVjdG9yLT5tb2RlcywKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSwgaGVh ZCk7CisKKwlwbGxfaW5fa2h6ID0gKHVuc2lnbmVkIGludCkoKnBhcmVudF9yYXRlIC8gMTAwMCk7 CisKKwlpZiAobHZkc19pc19kdWFsX2xpbmsobHZkcy0+bGlua190eXBlKSkKKwkJbXVsdGlwbGll ciA9IDI7CisJZWxzZQorCQltdWx0aXBsaWVyID0gMTsKKworCWx2ZHNfcGxsX2dldF9wYXJhbXMo bHZkcywgcGxsX2luX2toeiwgbW9kZS0+Y2xvY2sgKiA3IC8gbXVsdGlwbGllciwgJmJkaXYsICZt ZGl2LCAmbmRpdik7CisKKwkvKgorCSAqIDEvNyBiZWNhdXNlIGZvciBlYWNoIHBpeGVsIGluIDEg bGFuZSB0aGVyZSBpcyA3IGJpdHMKKwkgKiBXZSB3YW50IHBpeGNsaywgbm90IGJpdGNsaworCSAq LworCWx2ZHMtPnBpeGVsX2Nsb2NrX3JhdGUgPSAodW5zaWduZWQgbG9uZylwbGxfZ2V0X2Nsa291 dF9raHoocGxsX2luX2toeiwgYmRpdiwgbWRpdiwgbmRpdikKKwkJCQkJICogMTAwMCAqIG11bHRp cGxpZXIgLyA3OworCisJcmV0dXJuIGx2ZHMtPnBpeGVsX2Nsb2NrX3JhdGU7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBsdmRzX3BpeGVsX2Nsa19vcHMgPSB7CisJLmVuYWJsZSA9 IGx2ZHNfcGl4ZWxfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGx2ZHNfcGl4ZWxfY2xrX2Rpc2Fi bGUsCisJLnJlY2FsY19yYXRlID0gbHZkc19waXhlbF9jbGtfcmVjYWxjX3JhdGUsCisJLnJvdW5k X3JhdGUgPSBsdmRzX3BpeGVsX2Nsa19yb3VuZF9yYXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCBjbGtfaW5pdF9kYXRhIGNsa19kYXRhID0geworCS5uYW1lID0gImNsa19waXhfbHZkcyIs CisJLm9wcyA9ICZsdmRzX3BpeGVsX2Nsa19vcHMsCisJLnBhcmVudF9uYW1lcyA9IChjb25zdCBj aGFyICogW10pIHsiY2tfa2VyX2x2ZHNwaHkifSwKKwkubnVtX3BhcmVudHMgPSAxLAorCS5mbGFn cyA9IENMS19JR05PUkVfVU5VU0VELAorfTsKKworc3RhdGljIHZvaWQgbHZkc19waXhlbF9jbGtf dW5yZWdpc3Rlcih2b2lkICpkYXRhKQoreworCXN0cnVjdCBzdG1fbHZkcyAqbHZkcyA9IGRhdGE7 CisKKwlvZl9jbGtfZGVsX3Byb3ZpZGVyKGx2ZHMtPmRldi0+b2Zfbm9kZSk7CisJY2xrX2h3X3Vu cmVnaXN0ZXIoJmx2ZHMtPmx2ZHNfY2tfcHgpOworfQorCitzdGF0aWMgaW50IGx2ZHNfcGl4ZWxf Y2xrX3JlZ2lzdGVyKHN0cnVjdCBzdG1fbHZkcyAqbHZkcykKK3sKKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5vZGUgPSBsdmRzLT5kZXYtPm9mX25vZGU7CisJaW50IHJldDsKKworCWx2ZHMtPmx2ZHNf Y2tfcHguaW5pdCA9ICZjbGtfZGF0YTsKKworCS8qIHNldCB0aGUgcmF0ZSBieSBkZWZhdWx0IGF0 IDE0ODUwMDAwMCAqLworCWx2ZHMtPnBpeGVsX2Nsb2NrX3JhdGUgPSAxNDg1MDAwMDA7CisKKwly ZXQgPSBjbGtfaHdfcmVnaXN0ZXIobHZkcy0+ZGV2LCAmbHZkcy0+bHZkc19ja19weCk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG9mX2Nsa19hZGRfaHdfcHJvdmlkZXIobm9k ZSwgb2ZfY2xrX2h3X3NpbXBsZV9nZXQsCisJCQkJICAgICAmbHZkcy0+bHZkc19ja19weCk7CisJ aWYgKHJldCkKKwkJY2xrX2h3X3VucmVnaXN0ZXIoJmx2ZHMtPmx2ZHNfY2tfcHgpOworCisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIEhvc3QgY29uZmlndXJhdGlvbiByZWxhdGVkCisgKi8KK3N0 YXRpYyB2b2lkIGx2ZHNfY29uZmlnX2RhdGFfbWFwcGluZyhzdHJ1Y3Qgc3RtX2x2ZHMgKmx2ZHMp Cit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGx2ZHMtPmx2ZHNfYnJpZGdlLmRldjsKKwlj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbzsKKwllbnVtIGx2ZHNfcGl4ZWwgKCpi aXRtYXApWzddOworCXUzMiBsdmRzX2RtbGNyLCBsdmRzX2RtbWNyOworCWludCBpOworCisJaW5m byA9ICYoJmx2ZHMtPmNvbm5lY3RvciktPmRpc3BsYXlfaW5mbzsKKwlpZiAoIWluZm8tPm51bV9i dXNfZm9ybWF0cyB8fCAhaW5mby0+YnVzX2Zvcm1hdHMpIHsKKwkJZHJtX3dhcm4oZHJtLCAiTm8g TFZEUyBidXMgZm9ybWF0IHJlcG9ydGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAo aW5mby0+YnVzX2Zvcm1hdHNbMF0pIHsKKwljYXNlIE1FRElBX0JVU19GTVRfUkdCNjY2XzFYN1gz X1NQV0c6IC8qIFZFU0EtUkdCNjY2ICovCisJCWRybV93YXJuKGRybSwgIlBpeGVsIGZvcm1hdCB3 aXRoIGRhdGEgbWFwcGluZyBub3QgeWV0IHN1cHBvcnRlZC5cbiIpOworCQlyZXR1cm47CisJY2Fz ZSBNRURJQV9CVVNfRk1UX1JHQjg4OF8xWDdYNF9TUFdHOiAvKiBWRVNBLVJHQjg4OCAqLworCQli aXRtYXAgPSBsdmRzX2JpdG1hcF92ZXNhX3JnYjg4ODsKKwkJYnJlYWs7CisJY2FzZSBNRURJQV9C VVNfRk1UX1JHQjg4OF8xWDdYNF9KRUlEQTogLyogSkVJREEtUkdCODg4ICovCisJCWJpdG1hcCA9 IGx2ZHNfYml0bWFwX2plaWRhX3JnYjg4ODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHJtX3dh cm4oZHJtLCAiVW5zdXBwb3J0ZWQgTFZEUyBidXMgZm9ybWF0IDB4JTA0eFxuIiwgaW5mby0+YnVz X2Zvcm1hdHNbMF0pOworCQlyZXR1cm47CisJfQorCisJLyogU2V0IGJpdG1hcCBmb3IgZWFjaCBs YW5lICovCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlsdmRzX2RtbGNyID0gKChiaXRt YXBbaV1bMF0pCisJCQkgICAgICArIChiaXRtYXBbaV1bMV0gPDwgNSkKKwkJCSAgICAgICsgKGJp dG1hcFtpXVsyXSA8PCAxMCkKKwkJCSAgICAgICsgKGJpdG1hcFtpXVszXSA8PCAxNSkpOworCQls dmRzX2RtbWNyID0gKChiaXRtYXBbaV1bNF0pCisJCQkgICAgICArIChiaXRtYXBbaV1bNV0gPDwg NSkKKwkJCSAgICAgICsgKGJpdG1hcFtpXVs2XSA8PCAxMCkpOworCisJCWx2ZHNfd3JpdGUobHZk cywgTFZEU19ETUxDUihpKSwgbHZkc19kbWxjcik7CisJCWx2ZHNfd3JpdGUobHZkcywgTFZEU19E TU1DUihpKSwgbHZkc19kbW1jcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBsdmRzX2NvbmZpZ19t b2RlKHN0cnVjdCBzdG1fbHZkcyAqbHZkcykKK3sKKwl1MzIgYnVzX2ZsYWdzLCBsdmRzX2NyID0g MCwgbHZkc19jZGwxY3IgPSAwLCBsdmRzX2NkbDJjciA9IDA7CisJY29uc3Qgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGU7CisJY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cjsKKworCWNvbm5lY3RvciA9ICZsdmRzLT5jb25uZWN0b3I7CisJaWYgKCFjb25uZWN0b3IpCisJ CXJldHVybjsKKworCWlmIChsaXN0X2VtcHR5KCZjb25uZWN0b3ItPm1vZGVzKSkgeworCQlkcm1f ZGJnKGNvbm5lY3Rvci0+ZGV2LCAiY29ubmVjdG9yOiBlbXB0eSBtb2RlcyBsaXN0XG4iKTsKKwkJ cmV0dXJuOworCX0KKworCWJ1c19mbGFncyA9IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJ1c19m bGFnczsKKwltb2RlID0gbGlzdF9maXJzdF9lbnRyeSgmY29ubmVjdG9yLT5tb2RlcywKKwkJCQlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSwgaGVhZCk7CisKKwlsdmRzX2NsZWFyKGx2ZHMsIExWRFNf Q1IsIENSX0xLTU9EKTsKKwlsdmRzX2NsZWFyKGx2ZHMsIExWRFNfQ0RMMUNSLCBDRExDUl9ESVNU UjAgfCBDRExDUl9ESVNUUjEgfCBDRExDUl9ESVNUUjIgfAorCQkJCSAgICAgIENETENSX0RJU1RS MyB8IENETENSX0RJU1RSNCk7CisJbHZkc19jbGVhcihsdmRzLCBMVkRTX0NETDJDUiwgQ0RMQ1Jf RElTVFIwIHwgQ0RMQ1JfRElTVFIxIHwgQ0RMQ1JfRElTVFIyIHwKKwkJCQkgICAgICBDRExDUl9E SVNUUjMgfCBDRExDUl9ESVNUUjQpOworCisJLyogU2V0IGNoYW5uZWwgZGlzdHJpYnV0aW9uICov CisJaWYgKGx2ZHMtPnByaW1hcnkpCisJCWx2ZHNfY2RsMWNyID0gQ0RMMUNSX0RFRkFVTFQ7CisK KwlpZiAobHZkcy0+c2Vjb25kYXJ5KSB7CisJCWx2ZHNfY3IgfD0gQ1JfTEtNT0Q7CisJCWx2ZHNf Y2RsMmNyID0gQ0RMMkNSX0RFRkFVTFQ7CisJfQorCisJLyogU2V0IHNpZ25hbCBwb2xhcml0eSAq LworCWlmIChidXNfZmxhZ3MgJiBEUk1fQlVTX0ZMQUdfREVfTE9XKQorCQlsdmRzX2NyIHw9IENS X0RFUE9MOworCisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCisJCWx2 ZHNfY3IgfD0gQ1JfSFNQT0w7CisKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05W U1lOQykKKwkJbHZkc19jciB8PSBDUl9WU1BPTDsKKworCXN3aXRjaCAobHZkcy0+bGlua190eXBl KSB7CisJY2FzZSBMVkRTX0RVQUxfTElOS19FVkVOX09ERF9QSVhFTFM6IC8qIExLUEhBID0gMCAq LworCQlsdmRzX2NyICY9IH5DUl9MS1BIQTsKKwkJYnJlYWs7CisJY2FzZSBMVkRTX0RVQUxfTElO S19PRERfRVZFTl9QSVhFTFM6IC8qIExLUEhBID0gMSAqLworCQlsdmRzX2NyIHw9IENSX0xLUEhB OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcm1fbm90aWNlKGx2ZHMtPmx2ZHNfYnJpZGdlLmRl diwgIk5vIHBoYXNlIHByZWNpc2VkLCBzZXR0aW5nIGRlZmF1bHRcbiIpOworCQlsdmRzX2NyICY9 IH5DUl9MS1BIQTsKKwkJYnJlYWs7CisJfQorCisJLyogV3JpdGUgY29uZmlnIHRvIHJlZ2lzdGVy cyAqLworCWx2ZHNfc2V0KGx2ZHMsIExWRFNfQ1IsIGx2ZHNfY3IpOworCWx2ZHNfd3JpdGUobHZk cywgTFZEU19DREwxQ1IsIGx2ZHNfY2RsMWNyKTsKKwlsdmRzX3dyaXRlKGx2ZHMsIExWRFNfQ0RM MkNSLCBsdmRzX2NkbDJjcik7Cit9CisKK3N0YXRpYyBpbnQgbHZkc19jb25uZWN0b3JfZ2V0X21v ZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IHN0bV9sdmRz ICpsdmRzID0gY29ubmVjdG9yX3RvX3N0bV9sdmRzKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gZHJt X3BhbmVsX2dldF9tb2RlcyhsdmRzLT5wYW5lbCwgY29ubmVjdG9yKTsKK30KKworc3RhdGljIGlu dCBsdmRzX2Nvbm5lY3Rvcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKKwkJCQkgICAgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCWNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpwYW5lbF9tb2RlOworCXN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpjb25uX3N0YXRlOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZTsKKworCWNvbm5fc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY29ubmVjdG9yX3N0YXRl KHN0YXRlLCBjb25uZWN0b3IpOworCWlmICghY29ubl9zdGF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlpZiAobGlzdF9lbXB0eSgmY29ubmVjdG9yLT5tb2RlcykpIHsKKwkJZHJtX2RiZyhjb25u ZWN0b3ItPmRldiwgImNvbm5lY3RvcjogZW1wdHkgbW9kZXMgbGlzdFxuIik7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCWlmICghY29ubl9zdGF0ZS0+Y3J0YykKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlwYW5lbF9tb2RlID0gbGlzdF9maXJzdF9lbnRyeSgmY29ubmVjdG9yLT5tb2RlcywKKwkJ CQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSwgaGVhZCk7CisKKwkvKiBXZSdyZSBub3Qg YWxsb3dlZCB0byBtb2RpZnkgdGhlIHJlc29sdXRpb24uICovCisJY3J0Y19zdGF0ZSA9IGRybV9h dG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGNvbm5fc3RhdGUtPmNydGMpOworCWlmIChJU19F UlIoY3J0Y19zdGF0ZSkpCisJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOworCisJaWYgKGNy dGNfc3RhdGUtPm1vZGUuaGRpc3BsYXkgIT0gcGFuZWxfbW9kZS0+aGRpc3BsYXkgfHwKKwkgICAg Y3J0Y19zdGF0ZS0+bW9kZS52ZGlzcGxheSAhPSBwYW5lbF9tb2RlLT52ZGlzcGxheSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwkvKiBUaGUgZmxhdCBwYW5lbCBtb2RlIGlzIGZpeGVkLCBqdXN0IGNv cHkgaXQgdG8gdGhlIGFkanVzdGVkIG1vZGUuICovCisJZHJtX21vZGVfY29weSgmY3J0Y19zdGF0 ZS0+YWRqdXN0ZWRfbW9kZSwgcGFuZWxfbW9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBsdmRzX2Nvbm5faGVscGVy X2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBsdmRzX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLmF0 b21pY19jaGVjayA9IGx2ZHNfY29ubmVjdG9yX2F0b21pY19jaGVjaywKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBsdmRzX2Nvbm5fZnVuY3MgPSB7CisJLnJl c2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5maWxsX21vZGVzID0g ZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95ID0gZHJt X2Nvbm5lY3Rvcl9jbGVhbnVwLAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21p Y19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3Rh dGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0 YXRpYyBpbnQgbHZkc19hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJICAgICAg IGVudW0gZHJtX2JyaWRnZV9hdHRhY2hfZmxhZ3MgZmxhZ3MpCit7CisJc3RydWN0IHN0bV9sdmRz ICpsdmRzID0gYnJpZGdlX3RvX3N0bV9sdmRzKGJyaWRnZSk7CisJc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciA9ICZsdmRzLT5jb25uZWN0b3I7CisJc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyID0gYnJpZGdlLT5lbmNvZGVyOworCWludCByZXQ7CisKKwlpZiAoIWJyaWRnZS0+ZW5j b2RlcikgeworCQlkcm1fZXJyKGJyaWRnZS0+ZGV2LCAiUGFyZW50IGVuY29kZXIgb2JqZWN0IG5v dCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFNldCB0aGUgZW5jb2Rl ciB0eXBlIGFzIGNhbGxlciBkb2VzIG5vdCBrbm93IGl0ICovCisJYnJpZGdlLT5lbmNvZGVyLT5l bmNvZGVyX3R5cGUgPSBEUk1fTU9ERV9FTkNPREVSX0xWRFM7CisKKwkvKiBObyBjbG9uaW5nIHN1 cHBvcnQgKi8KKwlicmlkZ2UtPmVuY29kZXItPnBvc3NpYmxlX2Nsb25lcyA9IDA7CisKKwkvKiBJ ZiB3ZSBoYXZlIGEgbmV4dCBicmlkZ2UganVzdCBhdHRhY2ggaXQuICovCisJaWYgKGx2ZHMtPm5l eHRfYnJpZGdlKQorCQlyZXR1cm4gZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLCBs dmRzLT5uZXh0X2JyaWRnZSwKKwkJCQkJIGJyaWRnZSwgZmxhZ3MpOworCisJaWYgKGZsYWdzICYg RFJNX0JSSURHRV9BVFRBQ0hfTk9fQ09OTkVDVE9SKSB7CisJCWRybV9lcnIoYnJpZGdlLT5kZXYs ICJGaXggYnJpZGdlIGRyaXZlciB0byBtYWtlIGNvbm5lY3RvciBvcHRpb25hbCEiKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJLyogT3RoZXJ3aXNlIGlmIHdlIGhhdmUgYSBwYW5lbCwgY3Jl YXRlIGEgY29ubmVjdG9yLiAqLworCWlmICghbHZkcy0+cGFuZWwpCisJCXJldHVybiAwOworCisJ cmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGJyaWRnZS0+ZGV2LCBjb25uZWN0b3IsCisJCQkJICZs dmRzX2Nvbm5fZnVuY3MsIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTKTsKKwlpZiAocmV0IDwgMCkK KwkJcmV0dXJuIHJldDsKKworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZs dmRzX2Nvbm5faGVscGVyX2Z1bmNzKTsKKworCXJldCA9IGRybV9jb25uZWN0b3JfYXR0YWNoX2Vu Y29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2 b2lkIGx2ZHNfYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJICAg ICAgIHN0cnVjdCBkcm1fYnJpZGdlX3N0YXRlICpvbGRfYnJpZGdlX3N0YXRlKQoreworCXN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IG9sZF9icmlkZ2Vfc3RhdGUtPmJhc2Uuc3RhdGU7 CisJc3RydWN0IHN0bV9sdmRzICpsdmRzID0gYnJpZGdlX3RvX3N0bV9sdmRzKGJyaWRnZSk7CisJ c3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7CisJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcjsKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxl KGx2ZHMtPnBjbGspOworCWlmIChyZXQpIHsKKwkJZHJtX2VycihicmlkZ2UtPmRldiwgIkZhaWxl ZCB0byBlbmFibGUgbHZkcyBwZXJpcGhlcmFsIGNsa1xuIik7CisJCXJldHVybjsKKwl9CisKKwlj b25uZWN0b3IgPSBkcm1fYXRvbWljX2dldF9uZXdfY29ubmVjdG9yX2Zvcl9lbmNvZGVyKHN0YXRl LCBicmlkZ2UtPmVuY29kZXIpOworCWlmICghY29ubmVjdG9yKQorCQlyZXR1cm47CisKKwljb25u X3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVj dG9yKTsKKwlpZiAoIWNvbm5fc3RhdGUpCisJCXJldHVybjsKKworCWx2ZHNfY29uZmlnX21vZGUo bHZkcyk7CisKKwkvKiBTZXQgRGF0YSBNYXBwaW5nICovCisJbHZkc19jb25maWdfZGF0YV9tYXBw aW5nKGx2ZHMpOworCisJLyogVHVybiB0aGUgb3V0cHV0IG9uLiAqLworCWx2ZHNfc2V0KGx2ZHMs IExWRFNfQ1IsIENSX0xWRFNFTik7CisKKwlpZiAobHZkcy0+cGFuZWwpIHsKKwkJZHJtX3BhbmVs X3ByZXBhcmUobHZkcy0+cGFuZWwpOworCQlkcm1fcGFuZWxfZW5hYmxlKGx2ZHMtPnBhbmVsKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIGx2ZHNfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSwKKwkJCQlzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqb2xkX2JyaWRnZV9zdGF0 ZSkKK3sKKwlzdHJ1Y3Qgc3RtX2x2ZHMgKmx2ZHMgPSBicmlkZ2VfdG9fc3RtX2x2ZHMoYnJpZGdl KTsKKworCWlmIChsdmRzLT5wYW5lbCkgeworCQlkcm1fcGFuZWxfZGlzYWJsZShsdmRzLT5wYW5l bCk7CisJCWRybV9wYW5lbF91bnByZXBhcmUobHZkcy0+cGFuZWwpOworCX0KKworCS8qIERpc2Fi bGUgTFZEUyBtb2R1bGUgKi8KKwlsdmRzX2NsZWFyKGx2ZHMsIExWRFNfQ1IsIENSX0xWRFNFTik7 CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUobHZkcy0+cGNsayk7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBsdmRzX2JyaWRnZV9mdW5jcyA9IHsKKwkuYXR0YWNo ID0gbHZkc19hdHRhY2gsCisJLmF0b21pY19lbmFibGUgPSBsdmRzX2F0b21pY19lbmFibGUsCisJ LmF0b21pY19kaXNhYmxlID0gbHZkc19hdG9taWNfZGlzYWJsZSwKKwkuYXRvbWljX2R1cGxpY2F0 ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2JyaWRnZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0 b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfYnJpZGdlX2Rlc3Ryb3lfc3Rh dGUsCisJLmF0b21pY19yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2JyaWRnZV9yZXNldCwKK307 CisKK3N0YXRpYyBpbnQgbHZkc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQor eworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydDEsICpwb3J0MiwgKnJlbW90ZTsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCByZXNldF9jb250cm9sICpyc3RjOwor CXN0cnVjdCBzdG1fbHZkcyAqbHZkczsKKwlpbnQgcmV0LCBkdWFsX2xpbms7CisKKwlkZXZfZGJn KGRldiwgIlByb2JpbmcgTFZEUyBkcml2ZXIuLi5cbiIpOworCisJbHZkcyA9IGRldm1fa3phbGxv YyhkZXYsIHNpemVvZigqbHZkcyksIEdGUF9LRVJORUwpOworCWlmICghbHZkcykKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlsdmRzLT5kZXYgPSBkZXY7CisKKwlyZXQgPSBkcm1fb2ZfZmluZF9wYW5l bF9vcl9icmlkZ2UoZGV2LT5vZl9ub2RlLCAxLCAwLAorCQkJCQkgICZsdmRzLT5wYW5lbCwgJmx2 ZHMtPm5leHRfYnJpZGdlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnJfcHJvYmUoZGV2LCByZXQs ICJQYW5lbCBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWx2ZHMtPmJhc2Ug PSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7CisJaWYgKElTX0VSUihs dmRzLT5iYXNlKSkgeworCQlyZXQgPSBQVFJfRVJSKGx2ZHMtPmJhc2UpOworCQlkZXZfZXJyKGRl diwgIlVuYWJsZSB0byBnZXQgcmVncyAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlsdmRzLT5wY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKGx2 ZHMtPnBjbGspKSB7CisJCXJldCA9IFBUUl9FUlIobHZkcy0+cGNsayk7CisJCWRldl9lcnIoZGV2 LCAiVW5hYmxlIHRvIGdldCBwZXJpcGhlcmFsIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUobHZkcy0+cGNsayk7CisJaWYg KHJldCkgeworCQlkZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBlcmlwaGVyYWwg Y2xrXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCisJcnN0YyA9IGRldm1fcmVz ZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKGRldiwgTlVMTCk7CisKKwlpZiAoSVNfRVJSKHJzdGMp KSB7CisJCXJldCA9IFBUUl9FUlIocnN0Yyk7CisJCWdvdG8gZXJyX2x2ZHNfcHJvYmU7CisJfQor CisJcmVzZXRfY29udHJvbF9hc3NlcnQocnN0Yyk7CisJdXNsZWVwX3JhbmdlKDEwLCAyMCk7CisJ cmVzZXRfY29udHJvbF9kZWFzc2VydChyc3RjKTsKKworCXBvcnQxID0gb2ZfZ3JhcGhfZ2V0X3Bv cnRfYnlfaWQoZGV2LT5vZl9ub2RlLCAxKTsKKwlwb3J0MiA9IG9mX2dyYXBoX2dldF9wb3J0X2J5 X2lkKGRldi0+b2Zfbm9kZSwgMik7CisJZHVhbF9saW5rID0gZHJtX29mX2x2ZHNfZ2V0X2R1YWxf bGlua19waXhlbF9vcmRlcihwb3J0MSwgcG9ydDIpOworCisJc3dpdGNoIChkdWFsX2xpbmspIHsK KwljYXNlIERSTV9MVkRTX0RVQUxfTElOS19PRERfRVZFTl9QSVhFTFM6CisJCWx2ZHMtPmxpbmtf dHlwZSA9IExWRFNfRFVBTF9MSU5LX09ERF9FVkVOX1BJWEVMUzsKKwkJbHZkcy0+cHJpbWFyeSA9 ICZsdmRzX3BoeV8xNmZmX3ByaW1hcnk7CisJCWx2ZHMtPnNlY29uZGFyeSA9ICZsdmRzX3BoeV8x NmZmX3NlY29uZGFyeTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fTFZEU19EVUFMX0xJTktfRVZFTl9P RERfUElYRUxTOgorCQlsdmRzLT5saW5rX3R5cGUgPSBMVkRTX0RVQUxfTElOS19FVkVOX09ERF9Q SVhFTFM7CisJCWx2ZHMtPnByaW1hcnkgPSAmbHZkc19waHlfMTZmZl9wcmltYXJ5OworCQlsdmRz LT5zZWNvbmRhcnkgPSAmbHZkc19waHlfMTZmZl9zZWNvbmRhcnk7CisJCWJyZWFrOworCWNhc2Ug LUVJTlZBTDoKKwkJLyoKKwkJICogZHJtX29mX2x2ZHNfZ2V0X2R1YWxfcGl4ZWxfb3JkZXIgcmV0 dXJucyA0IHBvc3NpYmxlIHZhbHVlcy4KKwkJICogSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHJldHVy bmVkIHZhbHVlIGlzIGFuIGVycm9yLCBpdCBjYW4gYmUKKwkJICogZWl0aGVyIEVOT0RFViBvciBF SU5WQUwuIFNlZWluZyB0aGUgc3RydWN0dXJlIG9mIHRoaXMKKwkJICogZnVuY3Rpb24sIEVJTlZB TCBtZWFucyB0aGF0IGVpdGhlciBwb3J0MSBvciBwb3J0MiBpcyBub3QKKwkJICogcHJlc2VudCBp biB0aGUgZGV2aWNlIHRyZWUuCisJCSAqIEluIHRoYXQgY2FzZSwgdGhlIGx2ZHMgcGFuZWwgY2Fu IGJlIGEgc2luZ2xlIGxpbmsgcGFuZWwsIG9yCisJCSAqIHRoZXJlIGlzIGEgc2VtYW50aWNhbCBl cnJvciBpbiB0aGUgZGV2aWNlIHRyZWUgY29kZS4KKwkJICovCisJCXJlbW90ZSA9IG9mX2dldF9u ZXh0X2F2YWlsYWJsZV9jaGlsZChwb3J0MSwgTlVMTCk7CisJCWlmIChyZW1vdGUpIHsKKwkJCWlm IChvZl9ncmFwaF9nZXRfcmVtb3RlX2VuZHBvaW50KHJlbW90ZSkpIHsKKwkJCQlsdmRzLT5saW5r X3R5cGUgPSBMVkRTX1NJTkdMRV9MSU5LX1BSSU1BUlk7CisJCQkJbHZkcy0+cHJpbWFyeSA9ICZs dmRzX3BoeV8xNmZmX3ByaW1hcnk7CisJCQkJbHZkcy0+c2Vjb25kYXJ5ID0gTlVMTDsKKwkJCX0g ZWxzZSB7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCX0KKworCQkJb2Zfbm9kZV9wdXQocmVtb3Rl KTsKKwkJfQorCisJCXJlbW90ZSA9IG9mX2dldF9uZXh0X2F2YWlsYWJsZV9jaGlsZChwb3J0Miwg TlVMTCk7CisJCWlmIChyZW1vdGUpIHsKKwkJCWlmIChvZl9ncmFwaF9nZXRfcmVtb3RlX2VuZHBv aW50KHJlbW90ZSkpIHsKKwkJCQlsdmRzLT5saW5rX3R5cGUgPSBMVkRTX1NJTkdMRV9MSU5LX1NF Q09OREFSWTsKKwkJCQlsdmRzLT5wcmltYXJ5ID0gTlVMTDsKKwkJCQlsdmRzLT5zZWNvbmRhcnkg PSAmbHZkc19waHlfMTZmZl9zZWNvbmRhcnk7CisJCQl9IGVsc2UgeworCQkJCXJldCA9IChyZXQg PT0gLUVJTlZBTCkgPyAtRUlOVkFMIDogMDsKKwkJCX0KKworCQkJb2Zfbm9kZV9wdXQocmVtb3Rl KTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVy cl9sdmRzX3Byb2JlOworCX0KKwlvZl9ub2RlX3B1dChwb3J0MSk7CisJb2Zfbm9kZV9wdXQocG9y dDIpOworCisJbHZkcy0+cGxscmVmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJyZWYiKTsKKwlp ZiAoSVNfRVJSKGx2ZHMtPnBsbHJlZl9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIobHZkcy0+cGxs cmVmX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGdldCByZWZlcmVuY2UgY2xvY2s6 ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9sdmRzX3Byb2JlOworCX0KKworCXJldCA9IGx2ZHNf cGl4ZWxfY2xrX3JlZ2lzdGVyKGx2ZHMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gcmVnaXN0ZXIgTFZEUyBwaXhlbCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8g ZXJyX2x2ZHNfcHJvYmU7CisJfQorCisJbHZkcy0+bHZkc19icmlkZ2UuZnVuY3MgPSAmbHZkc19i cmlkZ2VfZnVuY3M7CisJbHZkcy0+bHZkc19icmlkZ2Uub2Zfbm9kZSA9IGRldi0+b2Zfbm9kZTsK KwlsdmRzLT5od192ZXJzaW9uID0gbHZkc19yZWFkKGx2ZHMsIExWRFNfVkVSUik7CisKKwlkZXZf aW5mbyhkZXYsICJ2ZXJzaW9uIDB4JTAyeCBpbml0aWFsaXplZFxuIiwgbHZkcy0+aHdfdmVyc2lv bik7CisKKwlkcm1fYnJpZGdlX2FkZCgmbHZkcy0+bHZkc19icmlkZ2UpOworCisJcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgbHZkcyk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUobHZkcy0+ cGNsayk7CisKKwlyZXR1cm4gMDsKKworZXJyX2x2ZHNfcHJvYmU6CisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGx2ZHMtPnBjbGspOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsdmRz X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzdG1fbHZk cyAqbHZkcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbHZkc19waXhlbF9jbGtf dW5yZWdpc3RlcihsdmRzKTsKKworCWRybV9icmlkZ2VfcmVtb3ZlKCZsdmRzLT5sdmRzX2JyaWRn ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg bHZkc19kdF9pZHNbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gInN0LHN0bTMyLWx2ZHMiLAor CQkuZGF0YSA9IE5VTEwKKwl9LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKKworTU9EVUxFX0RF VklDRV9UQUJMRShvZiwgbHZkc19kdF9pZHMpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBsdmRzX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUgPSBsdmRzX3Byb2JlLAorCS5y ZW1vdmUgPSBsdmRzX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJzdG0zMi1kaXNw bGF5LWx2ZHMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0g bHZkc19kdF9pZHMsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobHZkc19wbGF0 Zm9ybV9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJSYXBoYcOrbCBHYWxsYWlzLVBvdSA8cmFw aGFlbC5nYWxsYWlzLXBvdUBmb3NzLnN0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlBoaWxpcHBl IENvcm51IDxwaGlsaXBwZS5jb3JudUBmb3NzLnN0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIllh bm5pY2sgRmVydHJlIDx5YW5uaWNrLmZlcnRyZUBmb3NzLnN0LmNvbT4iKTsKK01PRFVMRV9ERVND UklQVElPTigiU1RNaWNyb2VsZWN0cm9uaWNzIExWRFMgRGlzcGxheSBJbnRlcmZhY2UgVHJhbnNt aXR0ZXIgRFJNIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotLSAKMi4yNS4xCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJt LWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtl cm5lbAo=