From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8D81EC432C3 for ; Fri, 15 Nov 2019 10:23:23 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6982320718 for ; Fri, 15 Nov 2019 10:23:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6982320718 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ite.com.tw Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 135146E408; Fri, 15 Nov 2019 10:23:16 +0000 (UTC) Received: from ironport.ite.com.tw (60-251-196-230.HINET-IP.hinet.net [60.251.196.230]) by gabe.freedesktop.org (Postfix) with ESMTP id 5F5466E362 for ; Fri, 15 Nov 2019 10:08:27 +0000 (UTC) Received: from unknown (HELO mse.ite.com.tw) ([192.168.35.30]) by ironport.ite.com.tw with ESMTP; 15 Nov 2019 18:05:20 +0800 Received: from csbcas.internal.ite.com.tw (csbcas1.internal.ite.com.tw [192.168.65.46]) by mse.ite.com.tw with ESMTP id xAFA5EKD032185; Fri, 15 Nov 2019 18:05:14 +0800 (GMT-8) (envelope-from allen.chen@ite.com.tw) Received: from allen-VirtualBox.internal.ite.com.tw (192.168.70.14) by csbcas1.internal.ite.com.tw (192.168.65.45) with Microsoft SMTP Server (TLS) id 14.3.352.0; Fri, 15 Nov 2019 18:05:14 +0800 From: allen To: Subject: [PATCH v4 4/4] drm/bridge: add it6505 driver Date: Fri, 15 Nov 2019 17:52:20 +0800 Message-ID: <1573811564-320-5-git-send-email-allen.chen@ite.com.tw> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1573811564-320-1-git-send-email-allen.chen@ite.com.tw> References: <1573811564-320-1-git-send-email-allen.chen@ite.com.tw> MIME-Version: 1.0 X-Originating-IP: [192.168.70.14] X-MAIL: mse.ite.com.tw xAFA5EKD032185 X-Mailman-Approved-At: Fri, 15 Nov 2019 10:23:15 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jernej Skrabec , Jitao Shi , Jau-Chih Tseng , Yilun Lin , Allen Chen , David Airlie , Neil Armstrong , open list , "open list:DRM DRIVERS" , Jonas Karlman , "moderated list:ARM/Mediatek SoC support" , Laurent Pinchart , Pi-Hsun Shih , Matthias Brugger , "moderated list:ARM/Mediatek SoC support" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191115095220.vBO8p97GPA_Wp0_cZVvV12Pi1G3NLSM46Dl24ArTqFs@z> RnJvbTogQWxsZW4gQ2hlbiA8YWxsZW4uY2hlbkBpdGUuY29tLnR3PgoKVGhpcyBhZGRzIHN1cHBv cnQgZm9yIHRoZSBpVEUgSVQ2NTA1LgpUaGlzIGRldmljZSBjYW4gY29udmVydCBEUEkgc2lnbmFs IHRvIERQIG91dHB1dC4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8aml0YW8uc2hpQG1lZGlh dGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWWlsdW4gTGluIDx5bGxpbkBnb29nbGUuY29tPgpTaWdu ZWQtb2ZmLWJ5OiBBbGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+ClNpZ25lZC1vZmYt Ynk6IFBpLUhzdW4gU2hpaCA8cGloc3VuQGNocm9taXVtLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vYnJpZGdlL0tjb25maWcgICAgICB8ICAgIDcgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9N YWtlZmlsZSAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5j IHwgMjY5NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFu Z2VkLCAyNzA1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vYnJpZGdlL2l0ZS1pdDY1MDUuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwppbmRleCAzNDM2Mjk3 Li5jOGNmYWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKKysr IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCkBAIC00NSw2ICs0NSwxMyBAQCBjb25m aWcgRFJNX0RVTUJfVkdBX0RBQwogCSAgU3VwcG9ydCBmb3Igbm9uLXByb2dyYW1tYWJsZSBSR0Ig dG8gVkdBIERBQyBicmlkZ2VzLCBzdWNoIGFzIEFESQogCSAgQURWNzEyMywgVEkgVEhTODEzNCBh bmQgVEhTODEzNSBvciBwYXNzaXZlIHJlc2lzdG9yIGxhZGRlciBEQUNzLgogCitjb25maWcgRFJN X0lURV9JVDY1MDUKKwl0cmlzdGF0ZSAiSVRFIElUNjUwNSBEUCBicmlkZ2UiCisJZGVwZW5kcyBv biBPRgorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCWhlbHAKKwkgIElURSBJVDY1MDUgRFAgYnJp ZGdlIGNoaXAgZHJpdmVyLgorCiBjb25maWcgRFJNX0xWRFNfRU5DT0RFUgogCXRyaXN0YXRlICJU cmFuc3BhcmVudCBwYXJhbGxlbCB0byBMVkRTIGVuY29kZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9u IE9GCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQppbmRleCA0OTM0ZmNmLi5mNWFiY2E1IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvTWFrZWZpbGUKQEAgLTIsNiArMiw3IEBACiBvYmotJChDT05GSUdfRFJNX0FOQUxP R0lYX0FOWDc4WFgpICs9IGFuYWxvZ2l4LWFueDc4eHgubwogb2JqLSQoQ09ORklHX0RSTV9DRE5T X0RTSSkgKz0gY2Rucy1kc2kubwogb2JqLSQoQ09ORklHX0RSTV9EVU1CX1ZHQV9EQUMpICs9IGR1 bWItdmdhLWRhYy5vCitvYmotJChDT05GSUdfRFJNX0lURV9JVDY1MDUpICs9IGl0ZS1pdDY1MDUu bwogb2JqLSQoQ09ORklHX0RSTV9MVkRTX0VOQ09ERVIpICs9IGx2ZHMtZW5jb2Rlci5vCiBvYmot JChDT05GSUdfRFJNX01FR0FDSElQU19TVERQWFhYWF9HRV9CODUwVjNfRlcpICs9IG1lZ2FjaGlw cy1zdGRweHh4eC1nZS1iODUwdjMtZncubwogb2JqLSQoQ09ORklHX0RSTV9OWFBfUFROMzQ2MCkg Kz0gbnhwLXB0bjM0NjAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUt aXQ2NTA1LmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMTY2MzEwYQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jCkBAIC0wLDAgKzEsMjY5NyBAQAorLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw MTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisjaW5j bHVkZSA8bGludXgvYml0cy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8 bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgv ZXh0Y29uLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvL2Nv bnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJy dXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9y L2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGNyeXB0 by9oYXNoLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2UuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX3ByaW50Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4K KworI2RlZmluZSBBWCAwCisjZGVmaW5lIEJYIDEKKyNkZWZpbmUgQVVEU0VMIEkyUworI2RlZmlu ZSBBVURUWVBFIExQQ00KKyNkZWZpbmUgQVVERlMgQVVENDhLCisjZGVmaW5lIEFVRENIIDIKKy8q IDA6IFN0YW5kYXJkIEkyUzsxOiAzMmJpdCBJMlMgKi8KKyNkZWZpbmUgSTJTSU5QVVRGTVQgMQor LyogMDogTGVmdC1qdXN0aWZpZWQ7MTogUmlnaHQtanVzdGlmaWVkICovCisjZGVmaW5lIEkyU0pV U1RJRklFRCAwCisvKiAwOiBEYXRhIGRlbGF5IDFUIGNvcnJlc3BvbmQgdG8gV1M7MTogTm8gZGF0 YSBkZWxheSBjb3JyZXNwb25kIHRvIFdTICovCisjZGVmaW5lIEkyU0RBVEFERUxBWSAwCisvKiAw OiBpcyBsZWZ0IGNoYW5uZWw7MTogaXMgcmlnaHQgY2hhbm5lbCAqLworI2RlZmluZSBJMlNXU0NI QU5ORUwgMAorLyogMDogTVNCIHNoaWZ0IGZpcnN0OzE6IExTQiBzaGlmdCBmaXJzdCAqLworI2Rl ZmluZSBJMlNEQVRBU0VRIDAKKworI2RlZmluZSBMQU5FU1dBUCAwCisjZGVmaW5lIExBTkUgNAor I2RlZmluZSBfSEJSIDEKKyNkZWZpbmUgRU5TU0MgMQorI2RlZmluZSBGTEFHVFJBSU5ET1dOIDE1 MAorI2RlZmluZSBQT0xMSU5HS1NWTElTVCA0MDAKKyNkZWZpbmUgVFJBSU5GQUlMQ05UIDUKKyNk ZWZpbmUgVFJBSU5GQUlMSFBEIDMKKyNkZWZpbmUgQVVYX1dBSVRfVElNRU9VVF9NUyAxNQorI2Rl ZmluZSBQQ0xLX0RFTEFZIDEKKyNkZWZpbmUgUENMS19JTlYgMAorI2RlZmluZSBBREpVU1RfUEhB U0VfVEhSRVNIT0xEIDgwMDAwCisjZGVmaW5lIFBXUk9GRlJFVFJZVElNRSA1CisjZGVmaW5lIE1B WFBDTEsgOTUwMDAKKyNkZWZpbmUgREVGQVVMVEhEQ1AgMQorI2RlZmluZSBERUZBVUxUQVVESU8g MAorI2RlZmluZSBERUZBVUxUUFdST05PRkYgMQorI2RlZmluZSBERUZBVUxURFJWSE9MRCAwCisj ZGVmaW5lIERFRkFVTFRQV1JPTiAwCisjZGVmaW5lIEFVWF9GSUZPX01BWF9TSVpFIDB4MTAKKwor LyogQVggb3IgQlggKi8KKyNkZWZpbmUgQ0hJUF9WRVJTSU9OIEJYCisKKy8qCisgKiBhZmUgc2V0 dGluZ3MgZm9yIGRpZmZlcmVudCBwbGF0Zm9ybXMKKyAqIDA6IGZvciBiaXRsYW5kIDEwZSwgcXVh bnRhIHpkZQorICogMTogZm9yIGdvb2dsZSBrdWt1aSBwMS9wMiwgaHVhcWluIGtyYW5lCisgKi8K KyNkZWZpbmUgQUZFX1NFVFRJTkcgMQorCitzdGF0aWMgdTggYWZlX3NldHRpbmdfdGFibGVbMl1b M10gPSB7CisJezAsIDAsIDB9LAorCXsweDkzLCAweDJhLCAweDg1fQorfTsKKworZW51bSBzeXNf c3RhdHVzIHsKKwlTWVNfVU5QTFVHID0gMCwKKwlTWVNfSFBELAorCVNZU19BVVRPVFJBSU4sCisJ U1lTX1dBSVQsCisJU1lTX1RSQUlORkFJTCwKKwlTWVNfUmVIRENQLAorCVNZU19OT1JPUCwKKwlT WVNfVW5rbm93biwKK307CisKK2VudW0gaXQ2NTA1X2F1ZF9zZWwgeworCUkyUyA9IDAsCisJU1BE SUYsCit9OworCitlbnVtIGl0NjUwNV9hdWRfZnMgeworCUFVRDI0SyA9IDB4NiwKKwlBVUQzMksg PSAweDMsCisJQVVENDhLID0gMHgyLAorCUFVRDk2SyA9IDB4QSwKKwlBVUQxOTJLID0gMHhFLAor CUFVRDQ0UDFLID0gMHgwLAorCUFVRDg4UDJLID0gMHg4LAorCUFVRDE3NlA0SyA9IDB4QywKK307 CisKK2VudW0gaXQ2NTA1X2F1ZF90eXBlIHsKKwlMUENNID0gMCwKKwlOTFBDTSwKKwlEU1MsCisJ SEJSLAorfTsKKworZW51bSBhdWRfd29yZF9sZW5ndGggeworCUFVRDE2QklUID0gMCwKKwlBVUQx OEJJVCwKKwlBVUQyMEJJVCwKKwlBVUQyNEJJVCwKK307CisKKy8qIEF1ZGlvIFNhbXBsZSBXb3Jk IExlbmd0aDogQVVEMTZCSVQsIEFVRDE4QklULCBBVUQyMEJJVCwgQVVEMjRCSVQgKi8KKyNkZWZp bmUgQVVEV09SRExFTkdUSCBBVUQyNEJJVAorCitzdHJ1Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEg eworCXN0cnVjdCByZWd1bGF0b3IgKnB3cjE4OworCXN0cnVjdCByZWd1bGF0b3IgKm92ZGQ7CisJ c3RydWN0IGdwaW9fZGVzYyAqZ3Bpb2RfaHBkOworCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kX3Jl c2V0OworfTsKKworc3RydWN0IGl0NjUwNSB7CisJc3RydWN0IGRybV9kcF9hdXggYXV4OworCXN0 cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0 cnVjdCBlZGlkICplZGlkOworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKKwlzdHJ1 Y3QgZHJtX2RwX2xpbmsgbGluazsKKwlzdHJ1Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEgcGRhdGE7 CisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IG11dGV4IG1vZGVfbG9jazsKKwlzdHJ1Y3Qg cmVnbWFwICpyZWdtYXA7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgdmlkX2luZm87CisKKwlz dHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZXZlbnRfbmI7CisJc3RydWN0IGV4dGNvbl9kZXYgKmV4dGNv bjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXh0Y29uX3dxOworCWVudW0gc3lzX3N0YXR1cyBzdGF0 dXM7CisJYm9vbCBoYnI7CisJdTggZW5fc3NjOworCWJvb2wgbGFuZXN3YXBfZGlzYWJsZWQ7CisJ Ym9vbCBsYW5lc3dhcDsKKworCWVudW0gaXQ2NTA1X2F1ZF9zZWwgYXVkX3NlbDsKKwllbnVtIGl0 NjUwNV9hdWRfZnMgYXVkX2ZzOworCWVudW0gaXQ2NTA1X2F1ZF90eXBlIGF1ZF90eXBlOworCXU4 IGF1ZF9jaDsKKwl1OCBpMnNfaW5wdXRfZm10OworCXU4IGkyc19qdXN0aWZpZWQ7CisJdTggaTJz X2RhdGFfZGVsYXk7CisJdTggaTJzX3dzX2NoYW5uZWw7CisJdTggaTJzX2RhdGFfc2VxOworCWVu dW0gYXVkX3dvcmRfbGVuZ3RoIGF1ZHdvcmRsZW5ndGg7CisJYm9vbCBoZGNwX2ZsYWc7CisJdW5z aWduZWQgaW50IGVuX2hkY3A7CisJdW5zaWduZWQgaW50IGVuX3B3cm9ub2ZmOworCXVuc2lnbmVk IGludCBlbl9hdWRpbzsKKwl1OCBjbnRmc207CisJdTggdHJhaW5fZmFpbF9ocGQ7CisJYm9vbCBj cF9jYXBhYmxlOworCXU4IGRvd25zdHJlYW1fcmVwZWF0ZXI7CisJdTggc2hhaW5wdXRbNjRdOwor CXU4IGF2WzVdWzRdOworCXU4IGJ2WzVdWzRdOworCWJvb2wgcG93ZXJlZDsKKwl1OCBkcGNkX3Np bmtfY291bnQ7CisJLyogaXQ2NTA1IGRyaXZlciBob2xkIG9wdGlvbiAqLworCXVuc2lnbmVkIGlu dCBkcnZfaG9sZDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIGl0NjUw NV9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzW10gPSB7CisJeyAucmFuZ2VfbWluID0gMCwgLnJhbmdl X21heCA9IDB4RkYgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190 YWJsZSBpdDY1MDVfYnJpZGdlX3ZvbGF0aWxlX3RhYmxlID0geworCS55ZXNfcmFuZ2VzID0gaXQ2 NTA1X2JyaWRnZV92b2xhdGlsZV9yYW5nZXMsCisJLm5feWVzX3JhbmdlcyA9IEFSUkFZX1NJWkUo aXQ2NTA1X2JyaWRnZV92b2xhdGlsZV9yYW5nZXMpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCByZWdtYXBfY29uZmlnIGl0NjUwNV9icmlkZ2VfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2Jp dHMgPSA4LAorCS52YWxfYml0cyA9IDgsCisJLnZvbGF0aWxlX3RhYmxlID0gJml0NjUwNV9icmlk Z2Vfdm9sYXRpbGVfdGFibGUsCisJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9OT05FLAorfTsKKwor c3RhdGljIGludCBkcHR4cmQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVn X2FkZHIsCisJCSAgdW5zaWduZWQgaW50ICp2YWx1ZSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2OworCisJZXJyID0gcmVnbWFwX3JlYWQo aXQ2NTA1LT5yZWdtYXAsIHJlZ19hZGRyLCB2YWx1ZSk7CisJaWYgKGVyciA8IDApIHsKKwkJRFJN X0RFVl9FUlJPUihkZXYsICJyZWFkIGZhaWxlZCByZWdbMHgleF0gZXJyOiAlZCIsIHJlZ19hZGRy LAorCQkJICAgICAgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgaXQ2NTA1X2R1bXAoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQoreworCXVuc2ln bmVkIGludCB0ZW1wWzE2XSwgaSwgajsKKwl1OCB2YWx1ZVsxNl07CisJc3RydWN0IGRldmljZSAq ZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7CisKKwlmb3IgKGkgPSAwOyBpIDw9IDB4ZmY7IGkg Kz0gMTYpIHsKKwkJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspIHsKKwkJCWRwdHhyZChpdDY1MDUs IGkgKyBqLCB0ZW1wICsgaik7CisJCQl2YWx1ZVtqXSA9IHRlbXBbal07CisJCX0KKwkJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiWzB4JTAyeF0gPSAlMTZwaCIsIGksIHZhbHVlKTsKKwl9Cit9 CisKK3N0YXRpYyBpbnQgZHB0eHdyKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50 IHJlZ19hZGRyLAorCQkgIHVuc2lnbmVkIGludCByZWdfdmFsKQoreworCWludCBlcnI7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7CisKKwllcnIgPSByZWdtYXBf d3JpdGUoaXQ2NTA1LT5yZWdtYXAsIHJlZ19hZGRyLCByZWdfdmFsKTsKKworCWlmIChlcnIgPCAw KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAid3JpdGUgZmFpbGVkIHJlZ1sweCV4XSA9IDB4JXgg ZXJyID0gJWQiLAorCQkJICAgICAgcmVnX2FkZHIsIHJlZ192YWwsIGVycik7CisJCXJldHVybiBl cnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHB0eHNldChzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCBtYXNrLAorCQkgICB1 bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm aXQ2NTA1LT5jbGllbnQtPmRldjsKKworCWVyciA9IHJlZ21hcF91cGRhdGVfYml0cyhpdDY1MDUt PnJlZ21hcCwgcmVnLCBtYXNrLCB2YWx1ZSk7CisJaWYgKGVyciA8IDApIHsKKwkJRFJNX0RFVl9F UlJPUigKKwkJCWRldiwgIndyaXRlIHJlZ1sweCV4XSA9IDB4JXggbWFzayA9IDB4JXggZmFpbGVk IGVyciAlZCIsCisJCQlyZWcsIHZhbHVlLCBtYXNrLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0K KworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGRwdHhfZHBjZHJkKHN0cnVj dCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdTggdmFsdWU7CisJ aW50IHJldDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKKwor CXJldCA9IGRybV9kcF9kcGNkX3JlYWRiKCZpdDY1MDUtPmF1eCwgb2Zmc2V0LCAmdmFsdWUpOwor CWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRFBDRCByZWFkIGZhaWxlZCBb MHglbHhdIHJldDogJWQiLCBvZmZzZXQsCisJCQkgICAgICByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgZHB0eF9kcGNkd3Ioc3RydWN0IGl0 NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJICAgICAgIHVuc2lnbmVkIGxv bmcgZGF0YWluKQoreworCWludCByZXQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+ Y2xpZW50LT5kZXY7CisKKwlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZWIoJml0NjUwNS0+YXV4LCBv ZmZzZXQsIGRhdGFpbik7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJE UENEIHdyaXRlIGZhaWxlZCBbMHglbHhdIHJldDogJWQiLCBvZmZzZXQsCisJCQkgICAgICByZXQp OworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHB0eF9k ZWJ1Z19wcmludChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWcsCisJCQkg ICAgIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCBlcnI7 CisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7CisKKwlpZiAobGlr ZWx5KCEoZHJtX2RlYnVnICYgRFJNX1VUX0RSSVZFUikpKQorCQlyZXR1cm47CisKKwllcnIgPSBk cHR4cmQoaXQ2NTA1LCByZWcsICZ2YWwpOworCWlmIChlcnIgPCAwKQorCQlEUk1fREVWX0RFQlVH X0RSSVZFUihkZXYsICIlcyByZWclMDJ4IHJlYWQgZXJyb3IiLCBwcmVmaXgsIHJlZyk7CisJZWxz ZQorCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICIlcyByZWclMDJ4ID0gMHglMDJ4IiwgcHJl Zml4LCByZWcsCisJCQkJICAgICB2YWwpOworfQorCitzdGF0aWMgdm9pZCBkcGNkX2RlYnVnX3By aW50KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJlZywKKwkJCSAgICAgY29u c3QgY2hhciAqcHJlZml4KQoreworCXVuc2lnbmVkIGludCB2YWw7CisJc3RydWN0IGRldmljZSAq ZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7CisKKwlpZiAobGlrZWx5KCEoZHJtX2RlYnVnICYg RFJNX1VUX0RSSVZFUikpKQorCQlyZXR1cm47CisKKwl2YWwgPSBkcHR4X2RwY2RyZChpdDY1MDUs IHJlZyk7CisJaWYgKHZhbCA8IDApCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiVzIHJl ZyUwMnggcmVhZCBlcnJvciIsIHByZWZpeCwgcmVnKTsKKwllbHNlCisJCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIiVzIERQQ0QlMDJ4ID0gMHglMDJ4IiwgcHJlZml4LCByZWcsCisJCQkJICAg ICB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpdDY1MDUgKmNvbm5lY3Rvcl90b19p dDY1MDUoc3RydWN0IGRybV9jb25uZWN0b3IgKmMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihj LCBzdHJ1Y3QgaXQ2NTA1LCBjb25uZWN0b3IpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBp dDY1MDUgKmJyaWRnZV90b19pdDY1MDUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwly ZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IGl0NjUwNSwgYnJpZGdlKTsKK30KKwor c3RhdGljIHZvaWQgaXQ2NTA1X2luaXRfZnNtKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKK3sKKwlp dDY1MDUtPmF1ZF9zZWwgPSBBVURTRUw7CisJaXQ2NTA1LT5hdWRfZnMgPSBBVURGUzsKKwlpdDY1 MDUtPmF1ZF9jaCA9IEFVRENIOworCWl0NjUwNS0+YXVkX3R5cGUgPSBBVURUWVBFOworCWl0NjUw NS0+aTJzX2lucHV0X2ZtdCA9IEkyU0lOUFVURk1UOworCWl0NjUwNS0+aTJzX2p1c3RpZmllZCA9 IEkyU0pVU1RJRklFRDsKKwlpdDY1MDUtPmkyc19kYXRhX2RlbGF5ID0gSTJTREFUQURFTEFZOwor CWl0NjUwNS0+aTJzX3dzX2NoYW5uZWwgPSBJMlNXU0NIQU5ORUw7CisJaXQ2NTA1LT5pMnNfZGF0 YV9zZXEgPSBJMlNEQVRBU0VROworCWl0NjUwNS0+YXVkd29yZGxlbmd0aCA9IEFVRFdPUkRMRU5H VEg7CisJaXQ2NTA1LT5lbl9hdWRpbyA9IERFRkFVTFRBVURJTzsKKwlpdDY1MDUtPmVuX2hkY3Ag PSBERUZBVUxUSERDUDsKKworCWl0NjUwNS0+aGJyID0gX0hCUjsKKwlpdDY1MDUtPmVuX3NzYyA9 IEVOU1NDOworCWl0NjUwNS0+bGFuZXN3YXAgPSBMQU5FU1dBUDsKK30KKworc3RhdGljIHZvaWQg aXQ2NTA1X2xhbmVfdGVybWluYXRpb25fb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQoreworI2lm IChDSElQX1ZFUlNJT04gPT0gQlgpCisJZHB0eHNldChpdDY1MDUsIDB4NUQsIDB4ODAsIDB4MDAp OworCWRwdHhzZXQoaXQ2NTA1LCAweDVFLCAweDAyLCAweDAyKTsKKyNlbmRpZgorfQorCitzdGF0 aWMgdm9pZCBpdDY1MDVfbGFuZV90ZXJtaW5hdGlvbl9vZmYoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 KQoreworI2lmIChDSElQX1ZFUlNJT04gPT0gQlgpCisJZHB0eHNldChpdDY1MDUsIDB4NUQsIDB4 ODAsIDB4ODApOworCWRwdHhzZXQoaXQ2NTA1LCAweDVFLCAweDAyLCAweDAwKTsKKwlkcHR4c2V0 KGl0NjUwNSwgMHg1QywgMHhGMCwgMHgwMCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgaXQ2 NTA1X2xhbmVfcG93ZXJfb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQoreworCWlmIChpdDY1MDUt PmxhbmVzd2FwKSB7CisJCXN3aXRjaCAoaXQ2NTA1LT5saW5rLm51bV9sYW5lcykgeworCQljYXNl IDE6CisJCQlkcHR4c2V0KGl0NjUwNSwgMHg1QywgMHhGMSwgMHg4MSk7CisJCQlicmVhazsKKwkJ Y2FzZSAyOgorCQkJZHB0eHNldChpdDY1MDUsIDB4NUMsIDB4RjEsIDB4QzEpOworCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQlkcHR4c2V0KGl0NjUwNSwgMHg1QywgMHhGMSwgMHhGMSk7CisJCQli cmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAoaXQ2NTA1LT5saW5rLm51bV9sYW5lcykg eworCQljYXNlIDE6CisJCQlkcHR4c2V0KGl0NjUwNSwgMHg1QywgMHhGMSwgMHgxMSk7CisJCQli cmVhazsKKwkJY2FzZSAyOgorCQkJZHB0eHNldChpdDY1MDUsIDB4NUMsIDB4RjEsIDB4MzEpOwor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkcHR4c2V0KGl0NjUwNSwgMHg1QywgMHhGMSwgMHhG MSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfcG93 ZXJfb2ZmKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKK3sKKwlkcHR4c2V0KGl0NjUwNSwgMHg1Qywg MHhGMCwgMHgwMCk7Cit9CisKK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX29mZihzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUpCit7CisJaXQ2NTA1X2xhbmVfcG93ZXJfb2ZmKGl0NjUwNSk7CisJaXQ2NTA1 X2xhbmVfdGVybWluYXRpb25fb2ZmKGl0NjUwNSk7Cit9CisKK3N0YXRpYyB2b2lkIGl0NjUwNV9h dXhfdGVybWluYXRpb25fb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQoreworI2lmIChDSElQX1ZF UlNJT04gPT0gQlgpCisJaXQ2NTA1X2xhbmVfdGVybWluYXRpb25fb24oaXQ2NTA1KTsKKyNlbmRp ZgorfQorCitzdGF0aWMgdm9pZCBpdDY1MDVfYXV4X3Bvd2VyX29uKHN0cnVjdCBpdDY1MDUgKml0 NjUwNSkKK3sKKwlkcHR4c2V0KGl0NjUwNSwgMHg1RSwgMHgwMiwgMHgwMik7Cit9CisKK3N0YXRp YyB2b2lkIGl0NjUwNV9hdXhfb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQoreworCWl0NjUwNV9h dXhfcG93ZXJfb24oaXQ2NTA1KTsKKwlpdDY1MDVfYXV4X3Rlcm1pbmF0aW9uX29uKGl0NjUwNSk7 Cit9CisKK3N0YXRpYyB2b2lkIGl0NjUwNV9hdXhfcmVzZXQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 KQoreworCWRwdHhzZXQoaXQ2NTA1LCAweDA1LCAweDA4LCAweDA4KTsKKwlkcHR4c2V0KGl0NjUw NSwgMHgwNSwgMHgwOCwgMHgwMCk7Cit9CisKK3N0YXRpYyBib29sIGRwdHhfZ2V0c2lua2hwZChz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCWludCByZXQ7 CisKKwlyZXQgPSBkcHR4cmQoaXQ2NTA1LCAweDBELCAmdmFsdWUpOworCisJaWYgKHJldCA8IDAp CisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiAodmFsdWUgJiBCSVQoMSkpID09IEJJVCgxKTsK K30KKworc3RhdGljIHZvaWQgZHB0eF9jaGdiYW5rKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5z aWduZWQgaW50IGJhbmtfaWQpCit7CisJZHB0eHNldChpdDY1MDUsIDB4MEYsIDB4MDEsIGJhbmtf aWQgJiBCSVQoMCkpOworfQorCitzdGF0aWMgdm9pZCBpdDY1MDVfaW50X21hc2tfb24oc3RydWN0 IGl0NjUwNSAqaXQ2NTA1KQoreworCWRwdHh3cihpdDY1MDUsIDB4MDksIDB4MUYpOworCWRwdHh3 cihpdDY1MDUsIDB4MEEsIDB4MDcpOworCWRwdHh3cihpdDY1MDUsIDB4MEIsIDB4OTApOworfQor CitzdGF0aWMgdm9pZCBpdDY1MDVfaW50X21hc2tfb2ZmKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkK K3sKKwlkcHR4d3IoaXQ2NTA1LCAweDA5LCAweDAwKTsKKwlkcHR4d3IoaXQ2NTA1LCAweDBBLCAw eDAwKTsKKwlkcHR4d3IoaXQ2NTA1LCAweDBCLCAweDAwKTsKK30KKworc3RhdGljIHZvaWQgZHB0 eF9pbml0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKK3sKKwlkcHR4d3IoaXQ2NTA1LCAweDA1LCAw eDNCKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisJZHB0eHdyKGl0NjUwNSwgMHgwNSwg MHgxRik7CisJdXNsZWVwX3JhbmdlKDEwMDAsIDE1MDApOworfQorCitzdGF0aWMgdm9pZCBpdDY1 MDVfaW5pdF9hbmRfbWFza19vbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCit7CisJZHB0eF9pbml0 KGl0NjUwNSk7CisJaXQ2NTA1X2ludF9tYXNrX29uKGl0NjUwNSk7Cit9CisKK3N0YXRpYyBpbnQg aXQ2NTA1X3Bvd2Vyb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQoreworCXN0cnVjdCBpdDY1MDVf cGxhdGZvcm1fZGF0YSAqcGRhdGEgPSAmaXQ2NTA1LT5wZGF0YTsKKwlpbnQgZXJyID0gMDsKKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKKworCWlmIChpdDY1MDUt PnBvd2VyZWQpIHsKKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaXQ2NTA1IGFscmVhZHkg cG93ZXJlZCBvbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJpdDY1MDUgc3RhcnQgdG8gcG93ZXIgb24iKTsKKworCWVyciA9IHJlZ3VsYXRvcl9lbmFi bGUocGRhdGEtPnB3cjE4KTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICIlcyB0byBlbmFi bGUgcHdyMTggcmVndWxhdG9yIiwKKwkJCSAgICAgZXJyID8gIkZhaWxlZCIgOiAiU3VjY2VlZGVk Iik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkvKiB0aW1lIGludGVydmFsIGJldHdlZW4g SVZERCBhbmQgT1ZERCBhdCBsZWFzdCBiZSAxbXMgKi8KKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAw MCk7CisJZXJyID0gcmVndWxhdG9yX2VuYWJsZShwZGF0YS0+b3ZkZCk7CisJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiJXMgdG8gZW5hYmxlIG92ZGQgcmVndWxhdG9yIiwKKwkJCSAgICAgZXJy ID8gIkZhaWxlZCIgOiAiU3VjY2VlZGVkIik7CisJaWYgKGVycikgeworCQlyZWd1bGF0b3JfZGlz YWJsZShwZGF0YS0+cHdyMTgpOworCQlyZXR1cm4gZXJyOworCX0KKwkvKiB0aW1lIGludGVydmFs IGJldHdlZW4gT1ZERCBhbmQgU1lTUlNUTiBhdCBsZWFzdCBiZSAxMG1zICovCisJdXNsZWVwX3Jh bmdlKDEwMDAwLCAyMDAwMCk7CisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBkYXRhLT5ncGlv ZF9yZXNldCwgMCk7CisJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOworCWdwaW9kX3NldF92YWx1 ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDEpOworCXVzbGVlcF9yYW5nZSgxMDAwMCwg MjAwMDApOworCisJaXQ2NTA1X2luaXRfYW5kX21hc2tfb24oaXQ2NTA1KTsKKwlpdDY1MDUtPnBv d2VyZWQgPSB0cnVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl0NjUwNV9wb3dlcm9m ZihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCit7CisJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRh ICpwZGF0YSA9ICZpdDY1MDUtPnBkYXRhOworCWludCBlcnIgPSAwOworCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2OworCisJaWYgKCFpdDY1MDUtPnBvd2VyZWQpIHsK KwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicG93ZXIgaGFkIGJlZW4gYWxyZWFkeSBvZmYi KTsKKwkJcmV0dXJuIDA7CisJfQorCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bp b2RfcmVzZXQsIDApOworCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHBkYXRhLT5wd3IxOCk7CisJ RFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiJXMgdG8gZGlzYWJsZSBwd3IxOCByZWd1bGF0b3Ii LAorCQkJICAgICBlcnIgPyAiRmFpbGVkIiA6ICJTdWNjZWVkZWQiKTsKKwlpZiAoZXJyKQorCQly ZXR1cm4gZXJyOworCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHBkYXRhLT5vdmRkKTsKKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICIlcyB0byBkaXNhYmxlIG92ZGQgcmVndWxhdG9yIiwKKwkJ CSAgICAgZXJyID8gIkZhaWxlZCIgOiAiU3VjY2VlZGVkIik7CisJaWYgKGVycikKKwkJcmV0dXJu IGVycjsKKworCWtmcmVlKGl0NjUwNS0+ZWRpZCk7CisJaXQ2NTA1LT5lZGlkID0gTlVMTDsKKwlp dDY1MDUtPnBvd2VyZWQgPSBmYWxzZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hv d192aWRfaW5mbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCit7CisJaW50IGhzeW5jX3BvbCwgdnN5 bmNfcG9sLCBpbnRlcmxhY2VkOworCWludCBodG90YWwsIGhkZXMsIGhkZXcsIGhmcGgsIGhzeW5j dzsKKwlpbnQgdnRvdGFsLCB2ZGVzLCB2ZGV3LCB2ZnBoLCB2c3luY3c7CisJaW50IHJkZGF0YSwg cmRkYXRhMSwgaTsKKwlpbnQgcGNsaywgc3VtOworCisJdXNsZWVwX3JhbmdlKDEwMDAwLCAxNTAw MCk7CisJZHB0eF9jaGdiYW5rKGl0NjUwNSwgMCk7CisJZHB0eHJkKGl0NjUwNSwgMHhhMCwgJnJk ZGF0YSk7CisJaHN5bmNfcG9sID0gcmRkYXRhICYgQklUKDApOworCXZzeW5jX3BvbCA9IChyZGRh dGEgJiBCSVQoMikpID4+IDI7CisJaW50ZXJsYWNlZCA9IChyZGRhdGEgJiBCSVQoNCkpID4+IDQ7 CisKKwlkcHR4cmQoaXQ2NTA1LCAweGExLCAmcmRkYXRhKTsKKwlkcHR4cmQoaXQ2NTA1LCAweGEy LCAmcmRkYXRhMSk7CisJaHRvdGFsID0gKChyZGRhdGExICYgMHgxRikgPDwgOCkgKyByZGRhdGE7 CisKKwlkcHR4cmQoaXQ2NTA1LCAweGEzLCAmcmRkYXRhKTsKKwlkcHR4cmQoaXQ2NTA1LCAweGE0 LCAmcmRkYXRhMSk7CisKKwloZGVzID0gKChyZGRhdGExICYgMHgxRikgPDwgOCkgKyByZGRhdGE7 CisKKwlkcHR4cmQoaXQ2NTA1LCAweGE1LCAmcmRkYXRhKTsKKwlkcHR4cmQoaXQ2NTA1LCAweGE2 LCAmcmRkYXRhMSk7CisKKwloZGV3ID0gKChyZGRhdGExICYgMHgxRikgPDwgOCkgKyByZGRhdGE7 CisKKwlkcHR4cmQoaXQ2NTA1LCAweGE3LCAmcmRkYXRhKTsKKwlkcHR4cmQoaXQ2NTA1LCAweGE4 LCAmcmRkYXRhMSk7CisKKwloZnBoID0gKChyZGRhdGExICYgMHgxRikgPDwgOCkgKyByZGRhdGE7 CisKKwlkcHR4cmQoaXQ2NTA1LCAweGE5LCAmcmRkYXRhKTsKKwlkcHR4cmQoaXQ2NTA1LCAweGFh LCAmcmRkYXRhMSk7CisKKwloc3luY3cgPSAoKHJkZGF0YTEgJiAweDFGKSA8PCA4KSArIHJkZGF0 YTsKKworCWRwdHhyZChpdDY1MDUsIDB4YWIsICZyZGRhdGEpOworCWRwdHhyZChpdDY1MDUsIDB4 YWMsICZyZGRhdGExKTsKKwl2dG90YWwgPSAoKHJkZGF0YTEgJiAweDBGKSA8PCA4KSArIHJkZGF0 YTsKKworCWRwdHhyZChpdDY1MDUsIDB4YWQsICZyZGRhdGEpOworCWRwdHhyZChpdDY1MDUsIDB4 YWUsICZyZGRhdGExKTsKKwl2ZGVzID0gKChyZGRhdGExICYgMHgwRikgPDwgOCkgKyByZGRhdGE7 CisKKwlkcHR4cmQoaXQ2NTA1LCAweGFmLCAmcmRkYXRhKTsKKwlkcHR4cmQoaXQ2NTA1LCAweGIw LCAmcmRkYXRhMSk7CisJdmRldyA9ICgocmRkYXRhMSAmIDB4MEYpIDw8IDgpICsgcmRkYXRhOwor CisJZHB0eHJkKGl0NjUwNSwgMHhiMSwgJnJkZGF0YSk7CisJZHB0eHJkKGl0NjUwNSwgMHhiMiwg JnJkZGF0YTEpOworCXZmcGggPSAoKHJkZGF0YTEgJiAweDBGKSA8PCA4KSArIHJkZGF0YTsKKwor CWRwdHhyZChpdDY1MDUsIDB4YjMsICZyZGRhdGEpOworCWRwdHhyZChpdDY1MDUsIDB4YjQsICZy ZGRhdGExKTsKKwl2c3luY3cgPSAoKHJkZGF0YTEgJiAweDBGKSA8PCA4KSArIHJkZGF0YTsKKwor CXN1bSA9IDA7CisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWRwdHhzZXQoaXQ2NTA1 LCAweDEyLCAweDgwLCAweDgwKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAxNTAwMCk7CisJCWRw dHhzZXQoaXQ2NTA1LCAweDEyLCAweDgwLCAweDAwKTsKKworCQlkcHR4cmQoaXQ2NTA1LCAweDEz LCAmcmRkYXRhKTsKKwkJZHB0eHJkKGl0NjUwNSwgMHgxNCwgJnJkZGF0YTEpOworCQlyZGRhdGEg PSAoKHJkZGF0YTEgJiAweDBGKSA8PCA4KSArIHJkZGF0YTsKKworCQlzdW0gKz0gcmRkYXRhOwor CX0KKworCXN1bSAvPSAxMDA7CisJcGNsayA9IDEzNTAwICogMjA0OCAvIHN1bTsKKwlpdDY1MDUt PnZpZF9pbmZvLmNsb2NrID0gcGNsazsKKwlpdDY1MDUtPnZpZF9pbmZvLmhkaXNwbGF5ID0gaGRl dzsKKwlpdDY1MDUtPnZpZF9pbmZvLmhzeW5jX3N0YXJ0ID0gaGRldyArIGhmcGg7CisJaXQ2NTA1 LT52aWRfaW5mby5oc3luY19lbmQgPSBoZGV3ICsgaGZwaCArIGhzeW5jdzsKKwlpdDY1MDUtPnZp ZF9pbmZvLmh0b3RhbCA9IGh0b3RhbDsKKwlpdDY1MDUtPnZpZF9pbmZvLnZkaXNwbGF5ID0gdmRl dzsKKwlpdDY1MDUtPnZpZF9pbmZvLnZzeW5jX3N0YXJ0ID0gdmRldyArIHZmcGg7CisJaXQ2NTA1 LT52aWRfaW5mby52c3luY19lbmQgPSB2ZGV3ICsgdmZwaCArIHZzeW5jdzsKKwlpdDY1MDUtPnZp ZF9pbmZvLnZ0b3RhbCA9IHZ0b3RhbDsKKwlpdDY1MDUtPnZpZF9pbmZvLnZyZWZyZXNoID0gcGNs ayAvIGh0b3RhbCAvIHZ0b3RhbDsKKworCURSTV9ERVZfREVCVUdfRFJJVkVSKCZpdDY1MDUtPmNs aWVudC0+ZGV2LCBEUk1fTU9ERV9GTVQsCisJCQkgICAgIERSTV9NT0RFX0FSRygmaXQ2NTA1LT52 aWRfaW5mbykpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2F1ZF9tY250KHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkKK3sKKwl1bnNpZ25lZCBpbnQgYXVkbiwgcmVnZGUsIHJlZ2RmLCByZWdlMCwgdmNs aywgYWNsaywgYXVkbWNhbCwgYXVkbWNudDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1 LT5jbGllbnQtPmRldjsKKworCWRwdHhyZChpdDY1MDUsIDB4ZGUsICZyZWdkZSk7CisJZHB0eHJk KGl0NjUwNSwgMHhkZiwgJnJlZ2RmKTsKKwlkcHR4cmQoaXQ2NTA1LCAweGUwLCAmcmVnZTApOwor CWF1ZG4gPSByZWdkZSArIChyZWdkZiA8PCA4KSArIChyZWdlMCA8PCAxNik7CisJaWYgKGl0NjUw NS0+aGJyKQorCQl2Y2xrID0gMjcwMDAwMDsKKwllbHNlCisJCXZjbGsgPSAxNjIwMDAwOworCXN3 aXRjaCAoaXQ2NTA1LT5hdWRfZnMpIHsKKwljYXNlIEFVRDMySzoKKwkJYWNsayA9IDMyMDsKKwkJ YnJlYWs7CisJY2FzZSBBVUQ0OEs6CisJCWFjbGsgPSA0ODA7CisJCWJyZWFrOworCWNhc2UgQVVE OTZLOgorCQlhY2xrID0gOTYwOworCQlicmVhazsKKwljYXNlIEFVRDE5Mks6CisJCWFjbGsgPSAx OTIwOworCQlicmVhazsKKwljYXNlIEFVRDQ0UDFLOgorCQlhY2xrID0gNDQxOworCWNhc2UgQVVE ODhQMks6CisJCWFjbGsgPSA4ODI7CisJCWJyZWFrOworCWNhc2UgQVVEMTc2UDRLOgorCQlhY2xr ID0gMTc2NDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYWNsayA9IDA7CisJCWJyZWFrOworCX0K KwlhdWRtY2FsID0gYXVkbiAqIGFjbGsgLyB2Y2xrICogNTEyOworCWRwdHhyZChpdDY1MDUsIDB4 ZTQsICZyZWdkZSk7CisJZHB0eHJkKGl0NjUwNSwgMHhlNSwgJnJlZ2RmKTsKKwlkcHR4cmQoaXQ2 NTA1LCAweGU2LCAmcmVnZTApOworCWF1ZG1jbnQgPSAocmVnZTAgPDwgMTYpICsgKHJlZ2RmIDw8 IDgpICsgcmVnZGU7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYXVkaW8gTjoweCUwNngi LCBhdWRuKTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJhdWRpbyBNY2FsOjB4JTA2eCIs IGF1ZG1jYWwpOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImF1ZGlvIE1jbnQ6MHglMDZ4 IiwgYXVkbWNudCk7Cit9CisKK3N0YXRpYyB2b2lkIGl0NjUwNV9hdWRpb19kaXNhYmxlKHN0cnVj dCBpdDY1MDUgKml0NjUwNSkKK3sKKwlkcHR4c2V0KGl0NjUwNSwgMHhEMywgMHgyMCwgMHgyMCk7 CisJZHB0eHNldChpdDY1MDUsIDB4QjgsIDB4MEYsIDB4MDApOworCWRwdHhzZXQoaXQ2NTA1LCAw eEU4LCAweDIyLCAweDAwKTsKKwlkcHR4c2V0KGl0NjUwNSwgMHgwNSwgMHgwMiwgMHgwMik7CisJ aXQ2NTA1LT5lbl9hdWRpbyA9IDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGF0 ZV9zdHJpbmdbXSA9IHsKKwlbU1lTX1VOUExVR10gPSAiU1lTX1VOUExVRyIsCisJW1NZU19IUERd ID0gIlNZU19IUEQiLAorCVtTWVNfQVVUT1RSQUlOXSA9ICJTWVNfQVVUT1RSQUlOIiwKKwlbU1lT X1dBSVRdID0gIlNZU19XQUlUIiwKKwlbU1lTX1RSQUlORkFJTF0gPSAiU1lTX1RSQUlORkFJTCIs CisJW1NZU19SZUhEQ1BdID0gIlNZU19SZUhEQ1AiLAorCVtTWVNfTk9ST1BdID0gIlNZU19OT1JP UCIsCisJW1NZU19Vbmtub3duXSA9ICJTWVNfVW5rbm93biIsCit9OworCitzdGF0aWMgdm9pZCBk cHR4X3N5c19jaGcoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCBlbnVtIHN5c19zdGF0dXMgbmV3c3Rh dGUpCit7CisJaW50IGkgPSAwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVu dC0+ZGV2OworCisJaWYgKG5ld3N0YXRlICE9IFNZU19VTlBMVUcpIHsKKwkJaWYgKCFkcHR4X2dl dHNpbmtocGQoaXQ2NTA1KSkKKwkJCW5ld3N0YXRlID0gU1lTX1VOUExVRzsKKwl9CisJaWYgKGl0 NjUwNS0+c3RhdHVzID09IG5ld3N0YXRlKQorCQlyZXR1cm47CisKKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJzeXNfc3RhdGUgY2hhbmdlOiAlcyAtPiAlcyIsCisJCQkgICAgIHN0YXRlX3N0 cmluZ1tpdDY1MDUtPnN0YXR1c10sCisJCQkgICAgIHN0YXRlX3N0cmluZ1tuZXdzdGF0ZV0pOwor CWl0NjUwNS0+c3RhdHVzID0gbmV3c3RhdGU7CisKKwlzd2l0Y2ggKGl0NjUwNS0+c3RhdHVzKSB7 CisJY2FzZSBTWVNfVU5QTFVHOgorCQlrZnJlZShpdDY1MDUtPmVkaWQpOworCQlpdDY1MDUtPmVk aWQgPSBOVUxMOworCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJGcmVlIGl0NjUwNSBFRElE IG1lbW9yeSIpOworCisJCWlmIChpdDY1MDUtPmVuX2F1ZGlvKQorCQkJaXQ2NTA1X2F1ZGlvX2Rp c2FibGUoaXQ2NTA1KTsKKworCQlpdDY1MDVfaW5pdF9hbmRfbWFza19vbihpdDY1MDUpOworCQlp dDY1MDVfbGFuZV9vZmYoaXQ2NTA1KTsKKwkJYnJlYWs7CisJY2FzZSBTWVNfSFBEOgorCQlpdDY1 MDVfYXV4X29uKGl0NjUwNSk7CisJCWJyZWFrOworCWNhc2UgU1lTX0FVVE9UUkFJTjoKKwkJYnJl YWs7CisJY2FzZSBTWVNfV0FJVDoKKwkJYnJlYWs7CisJY2FzZSBTWVNfUmVIRENQOgorCQlicmVh azsKKwljYXNlIFNZU19OT1JPUDoKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCXNob3df dmlkX2luZm8oaXQ2NTA1KTsKKwkJYnJlYWs7CisJY2FzZSBTWVNfVFJBSU5GQUlMOgorCQkvKiBp dDY1MDUgZ29lcyB0byBpZGxlICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0K K30KKworc3RhdGljIGJvb2wgaXQ2NTA1X2F1eF9vcF9maW5pc2hlZChzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCWludCBlcnI7CisKKwllcnIgPSByZWdt YXBfcmVhZChpdDY1MDUtPnJlZ21hcCwgMHgyYiwgJnZhbHVlKTsKKwlpZiAoZXJyIDwgMCkKKwkJ cmV0dXJuIGZhbHNlOworCisJcmV0dXJuICh2YWx1ZSAmIEJJVCg1KSkgPT0gMDsKK30KKworc3Rh dGljIGludCBkcHR4X2F1eHdhaXQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQoreworCXVuc2lnbmVk IGludCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCWludCBlcnI7CisJc3RydWN0 IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7CisKKwl0aW1lb3V0ID0gamlmZmll cyArIG1zZWNzX3RvX2ppZmZpZXMoQVVYX1dBSVRfVElNRU9VVF9NUykgKyAxOworCisJd2hpbGUg KCFpdDY1MDVfYXV4X29wX2ZpbmlzaGVkKGl0NjUwNSkpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlm ZmllcywgdGltZW91dCkpIHsKKwkJCURSTV9ERVZfRVJST1IoZGV2LCAiVGltZWQgb3V0IHdhaXRp bmcgQVVYIHRvIGZpbmlzaCIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJdXNsZWVw X3JhbmdlKDEwMDAsIDIwMDApOworCX0KKworCWVyciA9IGRwdHhyZChpdDY1MDUsIDB4OWYsICZz dGF0dXMpOworCWlmIChlcnIgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRv IHJlYWQgQVVYIGNoYW5uZWw6ICVkIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAo c3RhdHVzICYgMHgwMykgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byB3YWl0IGZv ciBBVVggKHN0YXR1czogMHgleCkiLAorCQkJICAgICAgc3RhdHVzKTsKKwkJcmV0dXJuIC1FVElN RURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2VudW0gYXV4X2NtZF90eXBlIHsKKwlDTURf QVVYX05BVElWRV9SRUFEID0gMHgwLAorCUNNRF9BVVhfTkFUSVZFX1dSSVRFID0gMHg1LAorCUNN RF9BVVhfSTJDX0VESURfUkVBRCA9IDB4QiwKK307CisKK2VudW0gYXV4X2NtZF9yZXBseSB7CisJ UkVQTFlfQUNLLAorCVJFUExZX05BQ0ssCisJUkVQTFlfREVGRVIsCit9OworCitzdGF0aWMgc3Np emVfdCBpdDY1MDVfYXV4X2RvX3RyYW5zZmVyKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwKKwkJCQkg ICAgICBlbnVtIGF1eF9jbWRfdHlwZSBjbWQsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGFkZHJl c3MsIHU4ICpidWZmZXIsCisJCQkJICAgICAgc2l6ZV90IHNpemUsIGVudW0gYXV4X2NtZF9yZXBs eSAqcmVwbHkpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKwlpbnQgc3RhdHVzLCB2YWw7CisKKwlp ZiAoY21kID09IENNRF9BVVhfSTJDX0VESURfUkVBRCkgeworCQkvKiBEUCBBVVggRURJRCBGSUZP IGhhcyBtYXhpbXVtIGxlbmd0aCBvZiAxNiBieXRlcy4gKi8KKwkJc2l6ZSA9IG1pbl90KHNpemVf dCwgc2l6ZSwgQVVYX0ZJRk9fTUFYX1NJWkUpOworCQkvKiBFbmFibGUgQVVYIEZJRk8gcmVhZCBi YWNrIGFuZCBjbGVhciBGSUZPICovCisJCWRwdHh3cihpdDY1MDUsIDB4MjMsIDB4QzMpOworCQlk cHR4d3IoaXQ2NTA1LCAweDIzLCAweEMyKTsKKwl9IGVsc2UgeworCQkvKiBUaGUgRFAgQVVYIHRy YW5zbWl0IGJ1ZmZlciBoYXMgNCBieXRlcy4gKi8KKwkJc2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6 ZSwgNCk7CisJCWRwdHh3cihpdDY1MDUsIDB4MjMsIDB4NDIpOworCX0KKworCS8qIFN0YXJ0IEFk ZHJlc3NbNzowXSAqLworCWRwdHh3cihpdDY1MDUsIDB4MjQsIChhZGRyZXNzID4+IDApICYgMHhG Rik7CisJLyogU3RhcnQgQWRkcmVzc1sxNTo4XSAqLworCWRwdHh3cihpdDY1MDUsIDB4MjUsIChh ZGRyZXNzID4+IDgpICYgMHhGRik7CisJLyogV3JpdGVOdW1bMzowXStTdGFydEFkclsxOToxNl0g Ki8KKwlkcHR4d3IoaXQ2NTA1LCAweDI2LCAoKGFkZHJlc3MgPj4gMTYpICYgMHgwRikgfCAoKHNp emUgLSAxKSA8PCA0KSk7CisKKwlpZiAoY21kID09IENNRF9BVVhfTkFUSVZFX1dSSVRFKQorCQly ZWdtYXBfYnVsa193cml0ZShpdDY1MDUtPnJlZ21hcCwgMHgyNywgYnVmZmVyLCBzaXplKTsKKwor CS8qIEF1eCBGaXJlICovCisJZHB0eHdyKGl0NjUwNSwgMHgyQiwgY21kKTsKKworCXJldCA9IGRw dHhfYXV4d2FpdChpdDY1MDUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0 ID0gZHB0eHJkKGl0NjUwNSwgMHg5RiwgJnN0YXR1cyk7CisJaWYgKHJldCA8IDApCisJCXJldHVy biByZXQ7CisKKwlzd2l0Y2ggKChzdGF0dXMgPj4gNikgJiAweDMpIHsKKwljYXNlIDA6CisJCSpy ZXBseSA9IFJFUExZX0FDSzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqcmVwbHkgPSBSRVBMWV9E RUZFUjsKKwkJcmV0dXJuIDA7CisJY2FzZSAyOgorCQkqcmVwbHkgPSBSRVBMWV9OQUNLOworCQly ZXR1cm4gMDsKKwljYXNlIDM6CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCWlmIChjbWQg PT0gQ01EX0FVWF9OQVRJVkVfV1JJVEUpCisJCWdvdG8gb3V0OworCisJaWYgKGNtZCA9PSBDTURf QVVYX0kyQ19FRElEX1JFQUQpIHsKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJ cmV0ID0gZHB0eHJkKGl0NjUwNSwgMHgyRiwgJnZhbCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQly ZXR1cm4gcmV0OworCQkJYnVmZmVyW2ldID0gdmFsOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChp ID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJcmV0ID0gZHB0eHJkKGl0NjUwNSwgMHgyQyArIGks ICZ2YWwpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJCWJ1ZmZlcltzaXpl IC0gMSAtIGldID0gdmFsOworCQl9CisJfQorCitvdXQ6CisJZHB0eHdyKGl0NjUwNSwgMHgyMywg MHg0MSk7CisJZHB0eHdyKGl0NjUwNSwgMHgyMywgMHg0MCk7CisJcmV0dXJuIHNpemU7Cit9CisK K3N0YXRpYyBzc2l6ZV90IGl0NjUwNV9hdXhfdHJhbnNmZXIoc3RydWN0IGRybV9kcF9hdXggKmF1 eCwKKwkJCQkgICBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBjb250YWluZXJfb2YoYXV4LCBzdHJ1Y3QgaXQ2NTA1LCBhdXgpOworCXU4IGNt ZDsKKwlib29sIGlzX2kyYyA9ICEobXNnLT5yZXF1ZXN0ICYgRFBfQVVYX05BVElWRV9XUklURSk7 CisJaW50IHJldDsKKwllbnVtIGF1eF9jbWRfcmVwbHkgcmVwbHk7CisKKwkvKiBJVDY1MDUgZG9l c24ndCBzdXBwb3J0IGFyYml0cmFyeSBJMkMgcmVhZCAvIHdyaXRlLiAqLworCWlmIChpc19pMmMp CisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChtc2ctPnJlcXVlc3QpIHsKKwljYXNlIERQ X0FVWF9OQVRJVkVfUkVBRDoKKwkJY21kID0gQ01EX0FVWF9OQVRJVkVfUkVBRDsKKwkJYnJlYWs7 CisJY2FzZSBEUF9BVVhfTkFUSVZFX1dSSVRFOgorCQljbWQgPSBDTURfQVVYX05BVElWRV9XUklU RTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0g aXQ2NTA1X2F1eF9kb190cmFuc2ZlcihpdDY1MDUsIGNtZCwgbXNnLT5hZGRyZXNzLCBtc2ctPmJ1 ZmZlciwKKwkJCQkgICAgIG1zZy0+c2l6ZSwgJnJlcGx5KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0 dXJuIHJldDsKKworCXN3aXRjaCAocmVwbHkpIHsKKwljYXNlIFJFUExZX0FDSzoKKwkJbXNnLT5y ZXBseSA9IERQX0FVWF9OQVRJVkVfUkVQTFlfQUNLOworCQlicmVhazsKKwljYXNlIFJFUExZX05B Q0s6CisJCW1zZy0+cmVwbHkgPSBEUF9BVVhfTkFUSVZFX1JFUExZX05BQ0s7CisJCWJyZWFrOwor CWNhc2UgUkVQTFlfREVGRVI6CisJCW1zZy0+cmVwbHkgPSBEUF9BVVhfTkFUSVZFX1JFUExZX0RF RkVSOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRwdHhf Z2V0X2VkaWRibG9jayh2b2lkICpkYXRhLCB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgYmxvY2tubywK KwkJCSAgICAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGF0YTsK KwlpbnQgb2Zmc2V0LCByZXQsIGF1eF9yZXRyeSA9IDgwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZpdDY1MDUtPmNsaWVudC0+ZGV2OworCWVudW0gYXV4X2NtZF9yZXBseSByZXBseTsKKworCWl0 NjUwNV9hdXhfcmVzZXQoaXQ2NTA1KTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJibG9j a251bSA9ICVkIiwgYmxvY2tubyk7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IEVESURf TEVOR1RIOykgeworCQlyZXQgPSBpdDY1MDVfYXV4X2RvX3RyYW5zZmVyKGl0NjUwNSwgQ01EX0FV WF9JMkNfRURJRF9SRUFELAorCQkJCQkgICAgIGJsb2Nrbm8gKiBFRElEX0xFTkdUSCArIG9mZnNl dCwKKwkJCQkJICAgICBidWYgKyBvZmZzZXQsIDgsICZyZXBseSk7CisJCWlmIChyZXQgPCAwKQor CQkJcmV0dXJuIHJldDsKKworCQlzd2l0Y2ggKHJlcGx5KSB7CisJCWNhc2UgUkVQTFlfQUNLOgor CQkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiWzB4JTAyeF06ICU4cGgiLCBvZmZzZXQsCisJ CQkJCSAgICAgYnVmICsgb2Zmc2V0KTsKKwkJCW9mZnNldCArPSA4OworCQkJYXV4X3JldHJ5ID0g ODA7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMWV9OQUNLOgorCQkJcmV0dXJuIC1FSU87CisJCWNh c2UgUkVQTFlfREVGRVI6CisJCQltc2xlZXAoMjApOworCQkJaWYgKCEoLS1hdXhfcmV0cnkpKQor CQkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IGl0NjUwNV9kaXNhYmxlX2hkY3Aoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQoreworCWRwdHhzZXQo aXQ2NTA1LCAweDM4LCAweDBCLCAweDAwKTsKKwlkcHR4c2V0KGl0NjUwNSwgMHgwNSwgMHgxMCwg MHgxMCk7Cit9CisKKworc3RhdGljIGludCBpdDY1MDVfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29ubmVjdG9y X3RvX2l0NjUwNShjb25uZWN0b3IpOworCWludCBlcnIsIG51bV9tb2RlcyA9IDAsIGk7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7CisKKwlpdDY1MDUtPnRyYWlu X2ZhaWxfaHBkID0gVFJBSU5GQUlMSFBEOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInNp bmtfY291bnQ6JWQiLCBpdDY1MDUtPmRwY2Rfc2lua19jb3VudCk7CisKKwlpZiAoaXQ2NTA1LT5l ZGlkKQorCQlyZXR1cm4gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgaXQ2NTA1LT5lZGlk KTsKKwltdXRleF9sb2NrKCZpdDY1MDUtPm1vZGVfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwg MzsgaSsrKSB7CisJCWRwdHhfZGVidWdfcHJpbnQoaXQ2NTA1LCAweDlGLCAiYXV4IHN0YXR1cyIp OworCQlpdDY1MDVfYXV4X3Jlc2V0KGl0NjUwNSk7CisJCWl0NjUwNV9kaXNhYmxlX2hkY3AoaXQ2 NTA1KTsKKwkJaXQ2NTA1LT5lZGlkID0KKwkJZHJtX2RvX2dldF9lZGlkKCZpdDY1MDUtPmNvbm5l Y3RvciwgZHB0eF9nZXRfZWRpZGJsb2NrLCBpdDY1MDUpOworCisJCWlmIChpdDY1MDUtPmVkaWQp CisJCQlicmVhazsKKwkJaXQ2NTA1X2R1bXAoaXQ2NTA1KTsKKwl9CisJaWYgKCFpdDY1MDUtPmVk aWQpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVhZCBFRElEIik7CisJCWdv dG8gdW5sb2NrOworCX0KKworCWVyciA9IGRybV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVy dHkoY29ubmVjdG9yLCBpdDY1MDUtPmVkaWQpOworCWlmIChlcnIpIHsKKwkJRFJNX0RFVl9FUlJP UihkZXYsICJGYWlsZWQgdG8gdXBkYXRlIEVESUQgcHJvcGVydHk6ICVkIiwgZXJyKTsKKwkJZ290 byB1bmxvY2s7CisJfQorCisJbnVtX21vZGVzID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3Rv ciwgaXQ2NTA1LT5lZGlkKTsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmaXQ2NTA1LT5tb2Rl X2xvY2spOworCisJcmV0dXJuIG51bV9tb2RlczsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBpdDY1MDVfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9 IHsKKwkuZ2V0X21vZGVzID0gaXQ2NTA1X2dldF9tb2RlcywKK307CisKK3N0YXRpYyBlbnVtIGRy bV9jb25uZWN0b3Jfc3RhdHVzIGl0NjUwNV9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKKwkJCQkJICAgICAgIGJvb2wgZm9yY2UpCit7CisJc3RydWN0IGl0NjUwNSAqaXQ2 NTA1ID0gY29ubmVjdG9yX3RvX2l0NjUwNShjb25uZWN0b3IpOworCWVudW0gZHJtX2Nvbm5lY3Rv cl9zdGF0dXMgc3RhdHVzOworCXU4IGRwY2Q2MDA7CisKKwlpZiAoIWl0NjUwNS0+cG93ZXJlZCkK KwkJZ290byBpdDY1MDVfbm9fcG93ZXJlZDsKKworCWl0NjUwNV9hdXhfb24oaXQ2NTA1KTsKKwlk cGNkNjAwID0gZHB0eF9kcGNkcmQoaXQ2NTA1LCBEUF9TRVRfUE9XRVIpOworCWRwY2RfZGVidWdf cHJpbnQoaXQ2NTA1LCBEUF9TRVRfUE9XRVIsICIiKTsKKworCWlmICghZHB0eF9nZXRzaW5raHBk KGl0NjUwNSkgfHwKKwkgICAgKGRwY2Q2MDAgJiBEUF9TRVRfUE9XRVJfTUFTSykgIT0gRFBfU0VU X1BPV0VSX0QwKSB7CitpdDY1MDVfbm9fcG93ZXJlZDoKKwkJaXQ2NTA1LT5kcGNkX3NpbmtfY291 bnQgPSAwOworCX0KKworCWlmIChpdDY1MDUtPmRwY2Rfc2lua19jb3VudCkKKwkJc3RhdHVzID0g Y29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJZWxzZQorCQlzdGF0dXMgPSBjb25uZWN0b3Jf c3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKworCURSTV9ERVZfREVCVUdfRFJJVkVSKCZpdDY1MDUtPmNs aWVudC0+ZGV2LCAic2lua19jb3VudDolZCBzdGF0dXM6JWQiLAorCQkJICAgICBpdDY1MDUtPmRw Y2Rfc2lua19jb3VudCwgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBpdDY1MDVfY29ubmVjdG9yX2Z1bmNzID0g eworCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVz LAorCS5kZXRlY3QgPSBpdDY1MDVfZGV0ZWN0LAorCS5kZXN0cm95ID0gZHJtX2Nvbm5lY3Rvcl9j bGVhbnVwLAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwku YXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBs aWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJf Y29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgaW50IGl0NjUwNV9leHRjb25f bm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCSAgdW5zaWduZWQgbG9u ZyBldmVudCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbnRhaW5l cl9vZihzZWxmLCBzdHJ1Y3QgaXQ2NTA1LCBldmVudF9uYik7CisKKwlzY2hlZHVsZV93b3JrKCZp dDY1MDUtPmV4dGNvbl93cSk7CisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgdm9p ZCBpdDY1MDVfZXh0Y29uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVj dCBpdDY1MDUgKml0NjUwNSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXQ2NTA1LCBleHRj b25fd3EpOworCWludCBzdGF0ZSA9IGV4dGNvbl9nZXRfc3RhdGUoaXQ2NTA1LT5leHRjb24sIEVY VENPTl9ESVNQX0RQKTsKKwl1bnNpZ25lZCBpbnQgcHdyb2ZmcmV0cnkgPSAwOworCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2OworCisJaWYgKGl0NjUwNS0+ZHJ2X2hv bGQpCisJCXJldHVybjsKKwltdXRleF9sb2NrKCZpdDY1MDUtPmxvY2spOworCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIkVYVENPTl9ESVNQX0RQID0gMHglMDJ4Iiwgc3RhdGUpOworCWlmIChz dGF0ZSA+IDApIHsKKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3RhcnQgdG8gcG93ZXIg b24iKTsKKwkJbXNsZWVwKDEwMDApOworCQlpdDY1MDVfcG93ZXJvbihpdDY1MDUpOworCQlpZiAo IWRwdHhfZ2V0c2lua2hwZChpdDY1MDUpKQorCQkJaXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7CisJ CWl0NjUwNV9hdXhfb24oaXQ2NTA1KTsKKwl9IGVsc2UgeworCQlpZiAoaXQ2NTA1LT5lbl9wd3Jv bm9mZikgeworCQkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3RhcnQgdG8gcG93ZXIgb2Zm Iik7CisJCQl3aGlsZSAoaXQ2NTA1X3Bvd2Vyb2ZmKGl0NjUwNSkgJiYKKwkJCSAgICAgICBwd3Jv ZmZyZXRyeSsrIDwgUFdST0ZGUkVUUllUSU1FKSB7CisJCQkJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LAorCQkJCQkJICAgICAicG93ZXIgb2ZmIGZhaWwgJWQgdGltZXMiLAorCQkJCQkJICAgICBw d3JvZmZyZXRyeSk7CisJCQl9CisJCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoaXQ2NTA1LT5j b25uZWN0b3IuZGV2KTsKKwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInBvd2VyIG9mZiBp dDY1MDUgc3VjY2VzcyEiKTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJml0NjUwNS0+bG9jayk7 Cit9CisKK3N0YXRpYyBpbnQgaXQ2NTA1X3VzZV9ub3RpZmllcl9tb2R1bGUoc3RydWN0IGl0NjUw NSAqaXQ2NTA1KQoreworCWludCByZXQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+ Y2xpZW50LT5kZXY7CisKKwlpdDY1MDUtPmV2ZW50X25iLm5vdGlmaWVyX2NhbGwgPSBpdDY1MDVf ZXh0Y29uX25vdGlmaWVyOworCUlOSVRfV09SSygmaXQ2NTA1LT5leHRjb25fd3EsIGl0NjUwNV9l eHRjb25fd29yayk7CisJcmV0ID0gZGV2bV9leHRjb25fcmVnaXN0ZXJfbm90aWZpZXIoJml0NjUw NS0+Y2xpZW50LT5kZXYsCisJCQkJCSAgICBpdDY1MDUtPmV4dGNvbiwgRVhUQ09OX0RJU1BfRFAs CisJCQkJCSAgICAmaXQ2NTA1LT5ldmVudF9uYik7CisJaWYgKHJldCkgeworCQlEUk1fREVWX0VS Uk9SKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBub3RpZmllciBmb3IgRFAiKTsKKwkJcmV0dXJu IHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXQ2NTA1X2JyaWRnZV9hdHRh Y2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUg PSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7CisJc3RydWN0IGRldmljZSAqZGV2OworCWludCBl cnI7CisKKwlkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKKwlpZiAoIWJyaWRnZS0+ZW5jb2Rl cikgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIlBhcmVudCBlbmNvZGVyIG9iamVjdCBub3QgZm91 bmQiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZXJyID0gZHJtX2Nvbm5lY3Rvcl9pbml0 KGJyaWRnZS0+ZGV2LCAmaXQ2NTA1LT5jb25uZWN0b3IsCisJCQkJICZpdDY1MDVfY29ubmVjdG9y X2Z1bmNzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpOworCWlmIChlcnIg PCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVj dG9yOiAlZCIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZHJtX2Nvbm5lY3Rvcl9oZWxw ZXJfYWRkKCZpdDY1MDUtPmNvbm5lY3RvciwKKwkJCQkgJml0NjUwNV9jb25uZWN0b3JfaGVscGVy X2Z1bmNzKTsKKworCWl0NjUwNS0+Y29ubmVjdG9yLnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9M TF9IUEQ7CisKKwllcnIgPSBkcm1fY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZpdDY1MDUtPmNv bm5lY3RvciwgYnJpZGdlLT5lbmNvZGVyKTsKKwlpZiAoZXJyIDwgMCkgeworCQlEUk1fREVWX0VS Uk9SKGRldiwgIkZhaWxlZCB0byBsaW5rIHVwIGNvbm5lY3RvciB0byBlbmNvZGVyOiAlZCIsCisJ CQkgICAgICBlcnIpOworCQlnb3RvIGNsZWFudXBfY29ubmVjdG9yOworCX0KKworCWVyciA9IGRy bV9jb25uZWN0b3JfcmVnaXN0ZXIoJml0NjUwNS0+Y29ubmVjdG9yKTsKKwlpZiAoZXJyIDwgMCkg eworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb25uZWN0b3I6ICVk IiwgZXJyKTsKKwkJZ290byBjbGVhbnVwX2Nvbm5lY3RvcjsKKwl9CisKKwllcnIgPSBpdDY1MDVf dXNlX25vdGlmaWVyX21vZHVsZShpdDY1MDUpOworCWlmIChlcnIgPCAwKSB7CisJCWRybV9jb25u ZWN0b3JfdW5yZWdpc3RlcigmaXQ2NTA1LT5jb25uZWN0b3IpOworCQlnb3RvIHVucmVnaXN0ZXJf Y29ubmVjdG9yOworCX0KKwlzY2hlZHVsZV93b3JrKCZpdDY1MDUtPmV4dGNvbl93cSk7CisKKwly ZXR1cm4gMDsKKwordW5yZWdpc3Rlcl9jb25uZWN0b3I6CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lz dGVyKCZpdDY1MDUtPmNvbm5lY3Rvcik7CitjbGVhbnVwX2Nvbm5lY3RvcjoKKwlkcm1fY29ubmVj dG9yX2NsZWFudXAoJml0NjUwNS0+Y29ubmVjdG9yKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0 aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2RldGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQor eworCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJyaWRnZV90b19pdDY1MDUoYnJpZGdlKTsKKwor CWRldm1fZXh0Y29uX3VucmVnaXN0ZXJfbm90aWZpZXIoJml0NjUwNS0+Y2xpZW50LT5kZXYsIGl0 NjUwNS0+ZXh0Y29uLAorCQkJCQlFWFRDT05fRElTUF9EUCwgJml0NjUwNS0+ZXZlbnRfbmIpOwor CWZsdXNoX3dvcmsoJml0NjUwNS0+ZXh0Y29uX3dxKTsKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0 ZXIoJml0NjUwNS0+Y29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoJml0NjUwNS0+ Y29ubmVjdG9yKTsKK30KKworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCitpdDY1MDVfYnJp ZGdlX21vZGVfdmFsaWQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCSBjb25zdCBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBi cmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnZpZCA9 ICZpdDY1MDUtPnZpZF9pbmZvOworCisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19J TlRFUkxBQ0UpCisJCXJldHVybiBNT0RFX05PX0lOVEVSTEFDRTsKKworCS8qIE1heCAxMjAwcCBh dCA1LjQgR2h6LCBvbmUgbGFuZSAqLworCWlmIChtb2RlLT5jbG9jayA+IE1BWFBDTEspCisJCXJl dHVybiBNT0RFX0NMT0NLX0hJR0g7CisJdmlkLT5jbG9jayA9IG1vZGUtPmNsb2NrOworCisJcmV0 dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBpbnQgaXQ2NTA1X3NlbmRfdmlkZW9faW5mb2ZyYW1l KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwKKwkJCQkgICAgICAgc3RydWN0IGhkbWlfYXZpX2luZm9m cmFtZSAqZnJhbWUpCit7CisJdTggYnVmZmVyW0hETUlfSU5GT0ZSQU1FX0hFQURFUl9TSVpFICsg SERNSV9BVklfSU5GT0ZSQU1FX1NJWkVdOworCWludCBlcnI7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7CisKKwllcnIgPSBoZG1pX2F2aV9pbmZvZnJhbWVfcGFj ayhmcmFtZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJaWYgKGVyciA8IDApIHsKKwkJRFJN X0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcGFjayBBVkkgaW5mb2ZyYW1lOiAlZFxuIiwgZXJy KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBkcHR4c2V0KGl0NjUwNSwgMHhlOCwgMHgw MSwgMHgwMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHJlZ21hcF9idWxr X3dyaXRlKGl0NjUwNS0+cmVnbWFwLCAweGU5LAorCQkJCWJ1ZmZlciArIEhETUlfSU5GT0ZSQU1F X0hFQURFUl9TSVpFLAorCQkJCWZyYW1lLT5sZW5ndGgpOworCWlmIChlcnIpCisJCXJldHVybiBl cnI7CisKKwllcnIgPSBkcHR4c2V0KGl0NjUwNSwgMHhlOCwgMHgwMSwgMHgwMSk7CisJaWYgKGVy cikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpdDY1MDVf YnJpZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkJICAgY29uc3Qg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgY29uc3Qgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0g YnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOworCXN0cnVjdCBoZG1pX2F2aV9pbmZvZnJhbWUgZnJh bWU7CisJaW50IGVycjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRl djsKKworCW11dGV4X2xvY2soJml0NjUwNS0+bW9kZV9sb2NrKTsKKwllcnIgPSBkcm1faGRtaV9h dmlfaW5mb2ZyYW1lX2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZSwKKwkJCQkJCSAgICAgICAmaXQ2 NTA1LT5jb25uZWN0b3IsCisJCQkJCQkgICAgICAgYWRqdXN0ZWRfbW9kZSk7CisJaWYgKGVycikg eworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBzZXR1cCBBVkkgaW5mb2ZyYW1lOiAl ZCIsIGVycik7CisJCWdvdG8gdW5sb2NrOworCX0KKworCXN0cmxjcHkoaXQ2NTA1LT52aWRfaW5m by5uYW1lLCBhZGp1c3RlZF9tb2RlLT5uYW1lLAorCQlEUk1fRElTUExBWV9NT0RFX0xFTik7CisJ aXQ2NTA1LT52aWRfaW5mby50eXBlID0gYWRqdXN0ZWRfbW9kZS0+dHlwZTsKKwlpdDY1MDUtPnZp ZF9pbmZvLmZsYWdzID0gYWRqdXN0ZWRfbW9kZS0+ZmxhZ3M7CisJZXJyID0gaXQ2NTA1X3NlbmRf dmlkZW9faW5mb2ZyYW1lKGl0NjUwNSwgJmZyYW1lKTsKKwlpZiAoZXJyKQorCQlEUk1fREVWX0VS Uk9SKGRldiwgIkZhaWxlZCB0byBzZW5kIEFWSSBpbmZvZnJhbWU6ICVkIiwgZXJyKTsKKwordW5s b2NrOgorCW11dGV4X3VubG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOworfQorCitzdGF0aWMgYm9v bCBpdDY1MDVfYXVkaW9faW5wdXQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQoreworCXVuc2lnbmVk IGludCByZWdiZTsKKworCWRwdHhyZChpdDY1MDUsIDB4QkUsICZyZWdiZSk7CisJcmV0dXJuIHJl Z2JlICE9IDB4RkYgPyB0cnVlIDogZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGRwdHhfc2V0X2F1 ZF9mbXQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQoreworCXVuc2lnbmVkIGludCBhdWRzcmM7CisK KwkvKiBJMlMgTU9ERSAqLworCWRwdHh3cihpdDY1MDUsIDB4QjksCisJICAgICAgIChpdDY1MDUt PmF1ZHdvcmRsZW5ndGggPDwgNSkgfCAoaXQ2NTA1LT5pMnNfZGF0YV9zZXEgPDwgNCkgfAorCQkg ICAgICAgKGl0NjUwNS0+aTJzX3dzX2NoYW5uZWwgPDwgMykgfAorCQkgICAgICAgKGl0NjUwNS0+ aTJzX2RhdGFfZGVsYXkgPDwgMikgfAorCQkgICAgICAgKGl0NjUwNS0+aTJzX2p1c3RpZmllZCA8 PCAxKSB8IGl0NjUwNS0+aTJzX2lucHV0X2ZtdCk7CisJaWYgKGl0NjUwNS0+YXVkX3NlbCA9PSBT UERJRikgeworCQlkcHR4d3IoaXQ2NTA1LCAweEJBLCAweDAwKTsKKwkJLyogMHgzMCA9IDEyOCpG UyAqLworCQlkcHR4c2V0KGl0NjUwNSwgMHgxMSwgMHhGMCwgMHgzMCk7CisJfSBlbHNlIHsKKwkJ ZHB0eHdyKGl0NjUwNSwgMHhCQSwgMHhlNCk7CisJfQorCisJZHB0eHdyKGl0NjUwNSwgMHhCQiwg MHgyMCk7CisJZHB0eHdyKGl0NjUwNSwgMHhCQywgMHgwMCk7CisJYXVkc3JjID0gMTsKKworCWlm IChpdDY1MDUtPmF1ZF9jaCA+IDIpCisJCWF1ZHNyYyB8PSAyOworCisJaWYgKGl0NjUwNS0+YXVk X2NoID4gNCkKKwkJYXVkc3JjIHw9IDQ7CisKKwlpZiAoaXQ2NTA1LT5hdWRfY2ggPiA2KQorCQlh dWRzcmMgfD0gODsKKworCWF1ZHNyYyB8PSBpdDY1MDUtPmF1ZF9zZWwgPDwgNDsKKworCWRwdHh3 cihpdDY1MDUsIDB4QjgsIGF1ZHNyYyk7Cit9CisKK3N0YXRpYyB2b2lkIGRwdHhfc2V0X2F1ZF9j aHN0cyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCit7CisJZW51bSBpdDY1MDVfYXVkX2ZzIGF1ZGZz ID0gaXQ2NTA1LT5hdWRfZnM7CisKKwkvKiBDaGFubmVsIFN0YXR1cyAqLworCWRwdHh3cihpdDY1 MDUsIDB4QkYsIGl0NjUwNS0+YXVkX3R5cGUgPDwgMSk7CisJZHB0eHdyKGl0NjUwNSwgMHhDMCwg MHgwMCk7CisJZHB0eHdyKGl0NjUwNSwgMHhDMSwgMHgwMCk7CisJZHB0eHdyKGl0NjUwNSwgMHhD MiwgYXVkZnMpOworCXN3aXRjaCAoaXQ2NTA1LT5hdWR3b3JkbGVuZ3RoKSB7CisJY2FzZSBBVUQx NkJJVDoKKwkJZHB0eHdyKGl0NjUwNSwgMHhDMywgKH5hdWRmcyA8PCA0KSArIDB4MDIpOworCQli cmVhazsKKworCWNhc2UgQVVEMThCSVQ6CisJCWRwdHh3cihpdDY1MDUsIDB4QzMsICh+YXVkZnMg PDwgNCkgKyAweDA0KTsKKwkJYnJlYWs7CisKKwljYXNlIEFVRDIwQklUOgorCQlkcHR4d3IoaXQ2 NTA1LCAweEMzLCAofmF1ZGZzIDw8IDQpICsgMHgwMyk7CisJCWJyZWFrOworCisJY2FzZSBBVUQy NEJJVDoKKwkJZHB0eHdyKGl0NjUwNSwgMHhDMywgKH5hdWRmcyA8PCA0KSArIDB4MEIpOworCQli cmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRwdHhfc2V0X2F1ZGlvX2luZm9mcmFtZShzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xp ZW50LT5kZXY7CisKKwlkcHR4d3IoaXQ2NTA1LCAweGY3LCBpdDY1MDUtPmF1ZF9jaCAtIDEpOwor CisJc3dpdGNoIChpdDY1MDUtPmF1ZF9jaCkgeworCWNhc2UgMjoKKwkJZHB0eHdyKGl0NjUwNSwg MHhGOSwgMHgwMCk7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJZHB0eHdyKGl0NjUwNSwgMHhGOSwg MHgwMSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJZHB0eHdyKGl0NjUwNSwgMHhGOSwgMHgwMyk7 CisJCWJyZWFrOworCWNhc2UgNToKKwkJZHB0eHdyKGl0NjUwNSwgMHhGOSwgMHgwNyk7CisJCWJy ZWFrOworCWNhc2UgNjoKKwkJZHB0eHdyKGl0NjUwNSwgMHhGOSwgMHgwQik7CisJCWJyZWFrOwor CWNhc2UgNzoKKwkJZHB0eHdyKGl0NjUwNSwgMHhGOSwgMHgwRik7CisJCWJyZWFrOworCWNhc2Ug ODoKKwkJZHB0eHdyKGl0NjUwNSwgMHhGOSwgMHgxRik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ CURSTV9ERVZfRVJST1IoZGV2LCAiYXVkaW8gY2hhbm5lbCBudW1iZXIgZXJyb3I6ICV1IiwKKwkJ CSAgICAgIGl0NjUwNS0+YXVkX2NoKTsKKwl9CisJLyogRW5hYmxlIEF1ZGlvIEluZm9GcmFtZSAq LworCWRwdHhzZXQoaXQ2NTA1LCAweEU4LCAweDIyLCAweDIyKTsKK30KKworc3RhdGljIHZvaWQg aXQ2NTA1X3NldF9hdWRpbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCit7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7CisJdW5zaWduZWQgaW50IHJlZ2JlOworCisJ aXQ2NTA1X2F1ZGlvX2Rpc2FibGUoaXQ2NTA1KTsKKwkvKiBBdWRpbyBDbG9jayBEb21haW4gUmVz ZXQgKi8KKwlkcHR4c2V0KGl0NjUwNSwgMHgwNSwgMHgwMiwgMHgwMik7CisJLyogQXVkaW8gbXV0 ZSAqLworCWRwdHhzZXQoaXQ2NTA1LCAweEQzLCAweDIwLCAweDIwKTsKKwkvKiBSZWxlYXNlIEF1 ZGlvIENsb2NrIERvbWFpbiBSZXNldCAqLworCWRwdHhzZXQoaXQ2NTA1LCAweDA1LCAweDAyLCAw eDAwKTsKKworCWlmIChpdDY1MDVfYXVkaW9faW5wdXQoaXQ2NTA1KSkgeworCQlkcHR4cmQoaXQ2 NTA1LCAweEJFLCAmcmVnYmUpOworCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJhdWRpbyBp bnB1dCBmczogJWQuJWQga0h6IiwKKwkJCQkgICAgIDY3NTAgLyByZWdiZSwgNjc1MDAgJSByZWdi ZSk7CisJfSBlbHNlIHsKKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAibm8gYXVkaW8gaW5w dXQiKTsKKwl9CisKKwlkcHR4X3NldF9hdWRfZm10KGl0NjUwNSk7CisJZHB0eF9zZXRfYXVkX2No c3RzKGl0NjUwNSk7CisJZHB0eF9zZXRfYXVkaW9faW5mb2ZyYW1lKGl0NjUwNSk7CisKKwkvKiBF bmFibGUgRW5oYW5jZWQgQXVkaW8gVGltZVN0bXAgTW9kZSAqLworCWRwdHhzZXQoaXQ2NTA1LCAw eEQ0LCAweDA0LCAweDA0KTsKKwkvKiBEaXNhYmxlIEZ1bGwgQXVkaW8gUGFja2V0ICovCisJZHB0 eHNldChpdDY1MDUsIDB4QkIsIDB4MTAsIDB4MDApOworCisJZHB0eHdyKGl0NjUwNSwgMHhERSwg MHgwMCk7CisJZHB0eHdyKGl0NjUwNSwgMHhERiwgMHg4MCk7CisJZHB0eHdyKGl0NjUwNSwgMHhF MCwgMHgwMCk7CisJZHB0eHNldChpdDY1MDUsIDB4QjgsIDB4ODAsIDB4ODApOworCWRwdHhzZXQo aXQ2NTA1LCAweEI4LCAweDgwLCAweDAwKTsKKwlkcHR4c2V0KGl0NjUwNSwgMHhEMywgMHgyMCwg MHgwMCk7Cit9CisKKy8qCisgKiBEUENEIFJlYWQgYW5kIEVESUQKKyAqLworCitzdGF0aWMgaW50 IGl0NjUwNV9nZXRfZHBjZChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIGludCBvZmZzZXQsIHU4ICpk cGNkLCBpbnQgbnVtKQoreworCWludCBpLCByZXQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0 NjUwNS0+Y2xpZW50LT5kZXY7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpICs9IDQpIHsKKwkJ cmV0ID0gZHJtX2RwX2RwY2RfcmVhZCgmaXQ2NTA1LT5hdXgsIG9mZnNldCArIGksIGRwY2QgKyBp LAorCQkJCSAgICAgICBtaW4obnVtIC0gaSwgNCkpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVy biByZXQ7CisJfQorCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRFBDRFsweCV4XSA9ICUq cGgiLCBvZmZzZXQsIG51bSwgZHBjZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGl0 NjUwNV9wYXJzZV9kcGNkKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKK3sKKwl1OCBkcGNkW0RQX1JF Q0VJVkVSX0NBUF9TSVpFXTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsKKwlpbnQgYmNhcHM7CisJc3RydWN0IGRybV9kcF9saW5rICpsaW5rID0gJml0NjUwNS0+ bGluazsKKworCWl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0RQQ0RfUkVWLCBkcGNkLCBBUlJB WV9TSVpFKGRwY2QpKTsKKworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiMjIyMjIyMjI0RQ Q0QgUmV2LjogJWQuJWQjIyMjIyMjIyMjIyIsCisJCQkgICAgIGxpbmstPnJldmlzaW9uID4+IDQs IGxpbmstPnJldmlzaW9uICYgMHgwRik7CisKKwlzd2l0Y2ggKGxpbmstPnJhdGUpIHsKKwljYXNl IDE2MjAwMDoKKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LAorCQkJCSAgICAgIk1heGltdW0g TGluayBSYXRlOiAxLjYyR2JwcyBwZXIgbGFuZSIpOworCQlpZiAoaXQ2NTA1LT5oYnIpIHsKKwkJ CURSTV9ERVZfREVCVUdfRFJJVkVSKAorCQkJCWRldiwgIk5vdCBzdXBwb3J0IEhCUiBNb2RlLCB3 aWxsIHRyYWluIExCUiIpOworCQkJaXQ2NTA1LT5oYnIgPSBmYWxzZTsKKwkJfSBlbHNlIHsKKwkJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlRyYWluaW5nIExCUiIpOworCQl9CisJCWJyZWFr OworCisJY2FzZSAyNzAwMDA6CisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwKKwkJCQkgICAg ICJNYXhpbXVtIExpbmsgUmF0ZTogMi43R2JwcyBwZXIgbGFuZSIpOworCQlpZiAoIWl0NjUwNS0+ aGJyKSB7CisJCQlEUk1fREVWX0RFQlVHX0RSSVZFUigKKwkJCQlkZXYsICJTdXBwb3J0IEhCUiBN b2RlLCB3aWxsIHRyYWluIExCUiIpOworCQkJaXQ2NTA1LT5oYnIgPSBmYWxzZTsKKwkJfSBlbHNl IHsKKwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlRyYWluaW5nIEhCUiIpOworCQl9CisJ CWJyZWFrOworCisJY2FzZSA1NDAwMDA6CisJCS8qIFRPRE8ocGloc3VuKTogQ2hlY2sgaWYgdGhp cyBpcyBjb3JyZWN0LiBIQlIgaGVyZT8gKi8KKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LAor CQkJCSAgICAgIk1heGltdW0gTGluayBSYXRlOiAyLjdHYnBzIHBlciBsYW5lIik7CisJCWJyZWFr OworCisJZGVmYXVsdDoKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJVbmtub3duIE1heGltdW0gTGlu ayBSYXRlOiAldSIsCisJCQkgICAgICBsaW5rLT5yYXRlKTsKKwkJYnJlYWs7CisJfQorCisJaWYg KGxpbmstPm51bV9sYW5lcyA9PSAxIHx8IGxpbmstPm51bV9sYW5lcyA9PSAyIHx8CisJICAgIGxp bmstPm51bV9sYW5lcyA9PSA0KSB7CisJCURSTV9ERVZfREVCVUdfRFJJVkVSKAorCQkJZGV2LCAi TGFuZSBDb3VudDogJXUgbGFuZSIsIGxpbmstPm51bV9sYW5lcyk7CisJCWlmIChsaW5rLT5udW1f bGFuZXMgPiBMQU5FKQorCQkJbGluay0+bnVtX2xhbmVzID0gTEFORTsKKwkJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiVHJhaW5pbmcgJXUgbGFuZSIsIGxpbmstPm51bV9sYW5lcyk7CisJfSBl bHNlIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJMYW5lIENvdW50IEVycm9yOiAldSIsIGxpbmst Pm51bV9sYW5lcyk7CisJfQorCisJaWYgKGxpbmstPmNhcGFiaWxpdGllcyAmIERQX0xJTktfQ0FQ X0VOSEFOQ0VEX0ZSQU1JTkcpCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlN1cHBvcnQg RW5oYW5jZWQgRnJhbWluZyIpOworCWVsc2UKKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LAor CQkJCSAgICAgIkNhbiBub3Qgc3VwcG9ydCBFbmhhbmNlZCBGcmFtaW5nIE1vZGUiKTsKKworCWlm IChkcGNkW0RQX01BWF9ET1dOU1BSRUFEXSAmIERQX01BWF9ET1dOU1BSRUFEXzBfNSkgeworCQlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsCisJCQkJICAgICAiTWF4aW11bSBEb3duLVNwcmVhZDog MC41LCBzdXBwb3J0IFNTQyEiKTsKKwl9IGVsc2UgeworCQlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsCisJCQkJICAgICAiTWF4aW11bSBEb3duLVNwcmVhZDogMCwgTm8gc3VwcG9ydCBTU0MhIik7 CisJCWl0NjUwNS0+ZW5fc3NjID0gMDsKKwl9CisKKwlpZiAobGluay0+cmV2aXNpb24gPj0gMHgx MSAmJgorCSAgICBkcGNkW0RQX01BWF9ET1dOU1BSRUFEXSAmIERQX05PX0FVWF9IQU5EU0hBS0Vf TElOS19UUkFJTklORykKKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU3VwcG9ydCBObyBB VVggVHJhaW5pbmciKTsKKwllbHNlCisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkNhbiBu b3Qgc3VwcG9ydCBObyBBVVggVHJhaW5pbmciKTsKKworCWJjYXBzID0gZHB0eF9kcGNkcmQoaXQ2 NTA1LCBEUF9BVVhfSERDUF9CQ0FQUyk7CisJaWYgKGJjYXBzICYgRFBfQkNBUFNfSERDUF9DQVBB QkxFKSB7CisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNpbmsgc3VwcG9ydCBIRENQISIp OworCQlpdDY1MDUtPmNwX2NhcGFibGUgPSB0cnVlOworCX0gZWxzZSB7CisJCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIlNpbmsgbm90IHN1cHBvcnQgSERDUCEiKTsKKwkJaXQ2NTA1LT5jcF9j YXBhYmxlID0gZmFsc2U7CisJCWl0NjUwNS0+ZW5faGRjcCA9IDA7CisJfQorCisJaWYgKGJjYXBz ICYgRFBfQkNBUFNfUkVQRUFURVJfUFJFU0VOVCkgeworCQlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJEb3duc3RyZWFtIGlzIHJlcGVhdGVyISEiKTsKKwkJaXQ2NTA1LT5kb3duc3RyZWFtX3Jl cGVhdGVyID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJE b3duc3RyZWFtIGlzIHJlY2VpdmVyISEiKTsKKwkJaXQ2NTA1LT5kb3duc3RyZWFtX3JlcGVhdGVy ID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdm9pZCBpdDY1MDVfZW5hYmxlX2hkY3Aoc3RydWN0 IGl0NjUwNSAqaXQ2NTA1KQoreworCXU4IGJrc3ZzWzVdLCBjOworCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2OworCisJLyogRGlzYWJsZSBDUF9EZXNpcmVkICovCisJ ZHB0eHNldChpdDY1MDUsIDB4MzgsIDB4MEIsIDB4MDApOworCWRwdHhzZXQoaXQ2NTA1LCAweDA1 LCAweDEwLCAweDEwKTsKKworCXVzbGVlcF9yYW5nZSgxMDAwLCAxNTAwKTsKKwljID0gZHB0eF9k cGNkcmQoaXQ2NTA1LCBEUF9BVVhfSERDUF9CQ0FQUyk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAiRFBDRFsweDY4MDI4XTogMHgleFxuIiwgYyk7CisJaWYgKCFjKQorCQlyZXR1cm47CisK KwlkcHR4c2V0KGl0NjUwNSwgMHgwNSwgMHgxMCwgMHgwMCk7CisJLyogRGlzYWJsZSBDUF9EZXNp cmVkICovCisJZHB0eHNldChpdDY1MDUsIDB4MzgsIDB4MDEsIDB4MDApOworCS8qIFVzZSBSMCcg MTAwbXMgd2FpdGluZyAqLworCWRwdHhzZXQoaXQ2NTA1LCAweDM4LCAweDA4LCAweDAwKTsKKwkv KiBjbGVhciB0aGUgcmVwZWF0ZXIgTGlzdCBDaGsgRG9uZSBhbmQgZmFpbCBiaXQgKi8KKwlkcHR4 c2V0KGl0NjUwNSwgMHgzOSwgMHgzMCwgMHgwMCk7CisKKwlpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1 LCBEUF9BVVhfSERDUF9CS1NWLCBia3N2cywgQVJSQVlfU0laRShia3N2cykpOworCisJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiU2luayBCS1NWID0gJTVwaCIsIGJrc3ZzKTsKKworCS8qIFNl bGVjdCBBbiBHZW5lcmF0b3IgKi8KKwlkcHR4c2V0KGl0NjUwNSwgMHgzQSwgMHgwMSwgMHgwMSk7 CisJLyogRW5hYmxlIEFuIEdlbmVyYXRvciAqLworCWRwdHhzZXQoaXQ2NTA1LCAweDNBLCAweDAy LCAweDAyKTsKKwkvKiBkZWxheTFtcygxMCk7Ki8KKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAw KTsKKwkvKiBTdG9wIEFuIEdlbmVyYXRvciAqLworCWRwdHhzZXQoaXQ2NTA1LCAweDNBLCAweDAy LCAweDAwKTsKKworCWRwdHhzZXQoaXQ2NTA1LCAweDM4LCAweDAxLCAweDAxKTsKKwlkcHR4c2V0 KGl0NjUwNSwgMHgzOSwgMHgwMSwgMHgwMSk7Cit9CisKK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5l c3BlZWRfc2V0dXAoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQoreworCWlmICghaXQ2NTA1LT5oYnIp IHsKKwkJZHB0eHNldChpdDY1MDUsIDB4MTYsIDB4MDEsIDB4MDEpOworCQlkcHR4c2V0KGl0NjUw NSwgMHg1QywgMHgwMiwgMHgwMCk7CisJfSBlbHNlIHsKKwkJZHB0eHNldChpdDY1MDUsIDB4MTYs IDB4MDEsIDB4MDApOworCQlkcHR4c2V0KGl0NjUwNSwgMHg1QywgMHgwMiwgMHgwMik7CisJfQor fQorCitzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV9zd2FwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkK K3sKKwlpbnQgZXJyOworCXVuaW9uIGV4dGNvbl9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eTsKKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKKworCWlmICghaXQ2NTA1 LT5sYW5lc3dhcF9kaXNhYmxlZCkgeworCQllcnIgPSBleHRjb25fZ2V0X3Byb3BlcnR5KGl0NjUw NS0+ZXh0Y29uLCBFWFRDT05fRElTUF9EUCwKKwkJCQkJICBFWFRDT05fUFJPUF9VU0JfVFlQRUNf UE9MQVJJVFksCisJCQkJCSAgJnByb3BlcnR5KTsKKwkJaWYgKGVycikgeworCQkJRFJNX0RFVl9F UlJPUihkZXYsICJnZXQgcHJvcGVydHkgZmFpbCEiKTsKKwkJCXJldHVybjsKKwkJfQorCQlpdDY1 MDUtPmxhbmVzd2FwID0gcHJvcGVydHkuaW50dmFsOworCX0KKworCWRwdHhzZXQoaXQ2NTA1LCAw eDE2LCAweDA4LCBpdDY1MDUtPmxhbmVzd2FwID8gMHgwOCA6IDB4MDApOworCWRwdHhzZXQoaXQ2 NTA1LCAweDE2LCAweDA2LCAoaXQ2NTA1LT5saW5rLm51bV9sYW5lcyAtIDEpIDw8IDEpOworCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNS0+bGFuZXN3YXAgPSAweCV4IiwgaXQ2NTA1 LT5sYW5lc3dhcCk7CisJaXQ2NTA1X2xhbmVfcG93ZXJfb24oaXQ2NTA1KTsKKwlpdDY1MDVfbGFu ZV90ZXJtaW5hdGlvbl9vbihpdDY1MDUpOworfQorCitzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV9j b25maWcoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQoreworCWl0NjUwNV9sYW5lc3BlZWRfc2V0dXAo aXQ2NTA1KTsKKwlpdDY1MDVfbGFuZV9zd2FwKGl0NjUwNSk7Cit9CisKK3N0YXRpYyB2b2lkIGl0 NjUwNV9zZXRfc3NjKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKKworCWRwdHhzZXQoaXQ2NTA1LCAweDE2LCAweDEw LCBpdDY1MDUtPmVuX3NzYyA8PCA0KTsKKwlpZiAoaXQ2NTA1LT5lbl9zc2MpIHsKKwkJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiRW5hYmxlIDI3TSA0NDYzIFBQTSBTU0MiKTsKKwkJZHB0eF9j aGdiYW5rKGl0NjUwNSwgMSk7CisJCWRwdHh3cihpdDY1MDUsIDB4ODgsIDB4OWUpOworCQlkcHR4 d3IoaXQ2NTA1LCAweDg5LCAweDFjKTsKKwkJZHB0eHdyKGl0NjUwNSwgMHg4QSwgMHg0Mik7CisJ CWRwdHhfY2hnYmFuayhpdDY1MDUsIDApOworCQlkcHR4d3IoaXQ2NTA1LCAweDU4LCAweDA3KTsK KwkJZHB0eHdyKGl0NjUwNSwgMHg1OSwgMHgyOSk7CisJCWRwdHh3cihpdDY1MDUsIDB4NUEsIDB4 MDMpOworCQkvKiBTdGFtcCBJbnRlcnJ1cHQgU3RlcCAqLworCQlkcHR4c2V0KGl0NjUwNSwgMHhE NCwgMHgzMCwgMHgxMCk7CisJCWRwdHhfZHBjZHdyKGl0NjUwNSwgRFBfRE9XTlNQUkVBRF9DVFJM LCBEUF9TUFJFQURfQU1QXzBfNSk7CisJfSBlbHNlIHsKKwkJZHB0eF9kcGNkd3IoaXQ2NTA1LCBE UF9ET1dOU1BSRUFEX0NUUkwsIDB4MDApOworCQlkcHR4c2V0KGl0NjUwNSwgMHhENCwgMHgzMCwg MHgwMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwY2xrX3BoYXNlKHN0cnVjdCBpdDY1MDUgKml0 NjUwNSkKK3sKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqdmlkID0gJml0NjUwNS0+dmlkX2lu Zm87CisKKwlkcHR4c2V0KGl0NjUwNSwgMHgxMCwgMHgwMywKKwkJdmlkLT5jbG9jayA8IEFESlVT VF9QSEFTRV9USFJFU0hPTEQgPyBQQ0xLX0RFTEFZIDogMCk7CisJZHB0eHNldChpdDY1MDUsIDB4 MTIsIDB4MTAsIFBDTEtfSU5WIDw8IDQpOworfQorCitzdGF0aWMgdm9pZCBhZmVfZHJpdmluZ19z ZXR0aW5nKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm aXQ2NTA1LT5jbGllbnQtPmRldjsKKwl1bnNpZ25lZCBpbnQgYWZlX3NldHRpbmc7CisKKwlhZmVf c2V0dGluZyA9IEFGRV9TRVRUSU5HOworCWlmIChhZmVfc2V0dGluZyA+PSBBUlJBWV9TSVpFKGFm ZV9zZXR0aW5nX3RhYmxlKSkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgImFmZSBzZXR0aW5nIHZh bHVlIGVycm9yIGFuZCB1c2UgZGVmYXVsdCIpOworCQlhZmVfc2V0dGluZyA9IDA7CisJfQorCWlm IChhZmVfc2V0dGluZykgeworCQlkcHR4X2NoZ2JhbmsoaXQ2NTA1LCAxKTsKKwkJZHB0eHdyKGl0 NjUwNSwgMHg3RSwgYWZlX3NldHRpbmdfdGFibGVbYWZlX3NldHRpbmddWzBdKTsKKwkJZHB0eHdy KGl0NjUwNSwgMHg3RiwgYWZlX3NldHRpbmdfdGFibGVbYWZlX3NldHRpbmddWzFdKTsKKwkJZHB0 eHdyKGl0NjUwNSwgMHg4MSwgYWZlX3NldHRpbmdfdGFibGVbYWZlX3NldHRpbmddWzJdKTsKKwkJ ZHB0eF9jaGdiYW5rKGl0NjUwNSwgMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkcHR4X291dHB1 dChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCit7CisJLyogY2hhbmdlIGJhbmsgMCAqLworCWRwdHhf Y2hnYmFuayhpdDY1MDUsIDApOworCWRwdHh3cihpdDY1MDUsIDB4NjQsIDB4MTApOworCWRwdHh3 cihpdDY1MDUsIDB4NjUsIDB4ODApOworCWRwdHh3cihpdDY1MDUsIDB4NjYsIDB4MTApOworCWRw dHh3cihpdDY1MDUsIDB4NjcsIDB4NEYpOworCWRwdHh3cihpdDY1MDUsIDB4NjgsIDB4MDkpOwor CWRwdHh3cihpdDY1MDUsIDB4NjksIDB4QkEpOworCWRwdHh3cihpdDY1MDUsIDB4NkEsIDB4M0Ip OworCWRwdHh3cihpdDY1MDUsIDB4NkIsIDB4NEIpOworCWRwdHh3cihpdDY1MDUsIDB4NkMsIDB4 M0UpOworCWRwdHh3cihpdDY1MDUsIDB4NkQsIDB4NEYpOworCWRwdHh3cihpdDY1MDUsIDB4NkUs IDB4MDkpOworCWRwdHh3cihpdDY1MDUsIDB4NkYsIDB4NTYpOworCWRwdHh3cihpdDY1MDUsIDB4 NzAsIDB4MEUpOworCWRwdHh3cihpdDY1MDUsIDB4NzEsIDB4MDApOworCWRwdHh3cihpdDY1MDUs IDB4NzIsIDB4MDApOworCWRwdHh3cihpdDY1MDUsIDB4NzMsIDB4NEYpOworCWRwdHh3cihpdDY1 MDUsIDB4NzQsIDB4MDkpOworCWRwdHh3cihpdDY1MDUsIDB4NzUsIDB4MDApOworCWRwdHh3cihp dDY1MDUsIDB4NzYsIDB4MDApOworCWRwdHh3cihpdDY1MDUsIDB4NzcsIDB4RTcpOworCWRwdHh3 cihpdDY1MDUsIDB4NzgsIDB4MTApOworCWRwdHh3cihpdDY1MDUsIDB4RTgsIDB4MDApOworCWRw dHhzZXQoaXQ2NTA1LCAweENFLCAweDcwLCAweDYwKTsKKwlkcHR4d3IoaXQ2NTA1LCAweENBLCAw eDREKTsKKwlkcHR4d3IoaXQ2NTA1LCAweEM5LCAweEY1KTsKKwlkcHR4d3IoaXQ2NTA1LCAweDVD LCAweDAyKTsKKworCWRybV9kcF9saW5rX3Bvd2VyX3VwKCZpdDY1MDUtPmF1eCwgJml0NjUwNS0+ bGluayk7CisJZHB0eHNldChpdDY1MDUsIDB4NTksIDB4MDEsIDB4MDEpOworCWRwdHhzZXQoaXQ2 NTA1LCAweDVBLCAweDA1LCAweDAxKTsKKwlkcHR4d3IoaXQ2NTA1LCAweDEyLCAweDAxKTsKKwlk cHR4d3IoaXQ2NTA1LCAweENCLCAweDE3KTsKKwlkcHR4d3IoaXQ2NTA1LCAweDExLCAweDA5KTsK KwlkcHR4d3IoaXQ2NTA1LCAweDIwLCAweDI4KTsKKwlkcHR4c2V0KGl0NjUwNSwgMHgyMywgMHgz MCwgMHgwMCk7CisJZHB0eHNldChpdDY1MDUsIDB4M0EsIDB4MDQsIDB4MDQpOworCWRwdHhzZXQo aXQ2NTA1LCAweDE1LCAweDAxLCAweDAxKTsKKwlkcHR4d3IoaXQ2NTA1LCAweDBDLCAweDA4KTsK KworCWRwdHhzZXQoaXQ2NTA1LCAweDVGLCAweDIwLCAweDAwKTsKKwlpdDY1MDVfbGFuZV9jb25m aWcoaXQ2NTA1KTsKKworCWl0NjUwNV9zZXRfc3NjKGl0NjUwNSk7CisKKwlpZiAoaXQ2NTA1LT5s aW5rLmNhcGFiaWxpdGllcyAmIERQX0xJTktfQ0FQX0VOSEFOQ0VEX0ZSQU1JTkcpIHsKKwkJZHB0 eHdyKGl0NjUwNSwgMHhEMywgMHgzMyk7CisJCWRwdHhfZHBjZHdyKGl0NjUwNSwgRFBfTEFORV9D T1VOVF9TRVQsCisJCQkgICAgRFBfTEFORV9DT1VOVF9FTkhBTkNFRF9GUkFNRV9FTik7CisJfSBl bHNlIHsKKwkJZHB0eHdyKGl0NjUwNSwgMHhEMywgMHgzMik7CisJfQorCisJZHB0eHNldChpdDY1 MDUsIDB4MTUsIDB4MDIsIDB4MDIpOworCWRwdHhzZXQoaXQ2NTA1LCAweDE1LCAweDAyLCAweDAw KTsKKwlkcHR4c2V0KGl0NjUwNSwgMHgwNSwgMHgwMywgMHgwMik7CisJZHB0eHNldChpdDY1MDUs IDB4MDUsIDB4MDMsIDB4MDApOworCisJLyogcmVnNjBbMl0gPSBJbkREUiAqLworCWRwdHh3cihp dDY1MDUsIDB4NjAsIDB4NDQpOworCS8qIE00NDRCMjQgZm9ybWF0ICovCisJZHB0eHdyKGl0NjUw NSwgMHg2MiwgMHgwMSk7CisJLyogc2VsZWN0IFJHQiBCeXBhc3MgQ1NDICovCisJZHB0eHdyKGl0 NjUwNSwgMHg2MywgMHgwMCk7CisKKwlwY2xrX3BoYXNlKGl0NjUwNSk7CisJZHB0eHNldChpdDY1 MDUsIDB4NjEsIDB4MDEsIDB4MDEpOworCWRwdHh3cihpdDY1MDUsIDB4MDYsIDB4RkYpOworCWRw dHh3cihpdDY1MDUsIDB4MDcsIDB4RkYpOworCWRwdHh3cihpdDY1MDUsIDB4MDgsIDB4RkYpOwor CisJZHB0eHNldChpdDY1MDUsIDB4ZDMsIDB4MzAsIDB4MDApOworCWRwdHhzZXQoaXQ2NTA1LCAw eGQ0LCAweDQxLCAweDQxKTsKKwlkcHR4c2V0KGl0NjUwNSwgMHhlOCwgMHgxMSwgMHgxMSk7CisK KwlhZmVfZHJpdmluZ19zZXR0aW5nKGl0NjUwNSk7CisJZHB0eHdyKGl0NjUwNSwgMHgxNywgMHgw NCk7CisJZHB0eHdyKGl0NjUwNSwgMHgxNywgMHgwMSk7Cit9CisKK3N0YXRpYyB2b2lkIGRwdHhf cHJvY2Vzc19zeXNfd2FpdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCit7CisJaW50IHJlZzBlOwor CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2OworCisJZHB0eHJkKGl0 NjUwNSwgMHgwRSwgJnJlZzBlKTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJTWVNfV0FJ VCBzdGF0ZSByZWcwZT0weCUwMngiLCByZWcwZSk7CisJZHB0eF9kZWJ1Z19wcmludChpdDY1MDUs IDB4OUYsICIiKTsKKworCWlmIChyZWcwZSAmIEJJVCg0KSkgeworCQlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJBdXRvIExpbmsgVHJhaW5pbmcgU3VjY2Vzcy4uLiIpOworCQlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJMaW5rIFN0YXRlOiAweCV4IiwgcmVnMGUgJiAweDFGKTsKKwkJaWYg KGl0NjUwNV9hdWRpb19pbnB1dChpdDY1MDUpKSB7CisJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJFbmFibGUgYXVkaW8hIik7CisJCQlpdDY1MDVfc2V0X2F1ZGlvKGl0NjUwNSk7CisJCX0K KworCQlpZiAoaXQ2NTA1LT5oZGNwX2ZsYWcpIHsKKwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgIkVuYWJsZSBIRENQIik7CisJCQlkcHR4X3N5c19jaGcoaXQ2NTA1LCBTWVNfUmVIRENQKTsK KwkJfSBlbHNlIHsKKwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkRpc2FibGUgSERDUCIp OworCQkJZHB0eF9zeXNfY2hnKGl0NjUwNSwgU1lTX05PUk9QKTsKKwkJfQorCX0gZWxzZSB7CisJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkF1dG8gTGluayBUcmFpbmluZyBmYWlsIHN0ZXAg JWQiLAorCQkJCSAgICAgaXQ2NTA1LT5jbnRmc20pOworCQlkcHR4X2RlYnVnX3ByaW50KGl0NjUw NSwgMHgwRCwgInN5c3RlbSBzdGF0dXMiKTsKKwkJaWYgKGl0NjUwNS0+Y250ZnNtID4gMCkgewor CQkJaXQ2NTA1LT5jbnRmc20tLTsKKwkJCWRwdHhfc3lzX2NoZyhpdDY1MDUsIFNZU19BVVRPVFJB SU4pOworCQl9IGVsc2UgeworCQkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiQXV0byBUcmFp bmluZyBGYWlsICVkIHRpbWVzIiwKKwkJCQkJICAgICBUUkFJTkZBSUxDTlQpOworCQkJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiU3lzIGNoYW5nZSB0byBTWVNfSFBEIik7CisJCQlkcHR4X2Rw Y2R3cihpdDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULCAweDAwKTsKKwkJCWlmIChpdDY1 MDUtPnRyYWluX2ZhaWxfaHBkID4gMCkgeworCQkJCWl0NjUwNS0+dHJhaW5fZmFpbF9ocGQtLTsK KwkJCQlkcHR4X3N5c19jaGcoaXQ2NTA1LCBTWVNfSFBEKTsKKwkJCX0gZWxzZSB7CisJCQkJZHB0 eF9zeXNfY2hnKGl0NjUwNSwgU1lTX1RSQUlORkFJTCk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0 YXRpYyB2b2lkIGRwdHhfc3lzX2ZzbShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCit7CisJdW5zaWdu ZWQgaW50IGk7CisJaW50IHJlZzBlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNs aWVudC0+ZGV2OworCisJaWYgKGl0NjUwNS0+c3RhdHVzICE9IFNZU19VTlBMVUcgJiYgIWRwdHhf Z2V0c2lua2hwZChpdDY1MDUpKQorCQlkcHR4X3N5c19jaGcoaXQ2NTA1LCBTWVNfVU5QTFVHKTsK KworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0YXRlOiAlcyIsIHN0YXRlX3N0cmluZ1tp dDY1MDUtPnN0YXR1c10pOworCXN3aXRjaCAoaXQ2NTA1LT5zdGF0dXMpIHsKKwljYXNlIFNZU19V TlBMVUc6CisJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChpdDY1MDUtPmNvbm5lY3Rvci5kZXYp OworCQlicmVhazsKKworCWNhc2UgU1lTX0hQRDoKKwkJZHB0eF9kZWJ1Z19wcmludChpdDY1MDUs IDB4OUYsICJhdXggc3RhdHVzIik7CisJCWRybV9kcF9saW5rX3Byb2JlKCZpdDY1MDUtPmF1eCwg Jml0NjUwNS0+bGluayk7CisJCWRybV9kcF9saW5rX3Bvd2VyX3VwKCZpdDY1MDUtPmF1eCwgJml0 NjUwNS0+bGluayk7CisJCWRwY2RfZGVidWdfcHJpbnQoaXQ2NTA1LCBEUF9TRVRfUE9XRVIsICIi KTsKKwkJaXQ2NTA1LT5kcGNkX3NpbmtfY291bnQKKwkJCT0gZHB0eF9kcGNkcmQoaXQ2NTA1LCBE UF9TSU5LX0NPVU5UKTsKKwkJaXQ2NTA1LT5kcGNkX3NpbmtfY291bnQgJj0gMHgzRjsKKwkJRFJN X0RFVl9ERUJVR19EUklWRVIoZGV2LCAic2lua19jb3VudDolZCIsCisJCQkJICAgICBpdDY1MDUt PmRwY2Rfc2lua19jb3VudCk7CisJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChpdDY1MDUtPmNv bm5lY3Rvci5kZXYpOworCisJCWlmIChpdDY1MDUtPmRwY2Rfc2lua19jb3VudCkgeworCQkJZm9y IChpID0gMDsgaSA8IDQwMDA7IGkrKykgeworCQkJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsK KwkJCQlpZiAoaXQ2NTA1LT5lZGlkKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWl0NjUw NV9pbml0X2ZzbShpdDY1MDUpOworCQkvKiBHRVREUENEICovCisJCWl0NjUwNV9wYXJzZV9kcGNk KGl0NjUwNSk7CisKKwkJLyoKKwkJICogdHJhaW5pbmcgZmFpbCBUUkFJTkZBSUxDTlQgdGltZXMs CisJCSAqIHRoZW4gY2hhbmdlIHRvIEhQRCB0byByZXN0YXJ0CisJCSAqLworCQlpdDY1MDUtPmNu dGZzbSA9IFRSQUlORkFJTENOVDsKKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAid2lsbCBU cmFpbiAlcyAlZCBsYW5lcyIsCisJCQkJICAgICBpdDY1MDUtPmhiciA/ICJIQlIiIDogIkxCUiIs CisJCQkJICAgICBpdDY1MDUtPmxpbmsubnVtX2xhbmVzKTsKKwkJZHB0eF9zeXNfY2hnKGl0NjUw NSwgU1lTX0FVVE9UUkFJTik7CisJCWJyZWFrOworCisJY2FzZSBTWVNfQVVUT1RSQUlOOgorCQlp dDY1MDVfZGlzYWJsZV9oZGNwKGl0NjUwNSk7CisJCWRwdHhfb3V0cHV0KGl0NjUwNSk7CisKKwkJ LyoKKwkJICogd2FpdGluZyBmb3IgdHJhaW5pbmcgZG93biBmbGFnCisJCSAqIGJlY2F1c2Ugd2Ug ZG9uJ3Qga25vdworCQkgKiBob3cgbG9uZyB0aGlzIHN0ZXAgd2lsbCBiZSBjb21wbGV0ZWQKKwkJ ICogc28gdXNlIHN0ZXAgMW1zIHRvIHdhaXQKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBGTEFH VFJBSU5ET1dOOyBpKyspIHsKKwkJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKKwkJCWRwdHhy ZChpdDY1MDUsIDB4MEUsICZyZWcwZSk7CisJCQlpZiAocmVnMGUgJiBCSVQoNCkpCisJCQkJYnJl YWs7CisJCX0KKworCQlkcHR4X3N5c19jaGcoaXQ2NTA1LCBTWVNfV0FJVCk7CisJCWJyZWFrOwor CisJY2FzZSBTWVNfV0FJVDoKKwkJZHB0eF9wcm9jZXNzX3N5c193YWl0KGl0NjUwNSk7CisJCWJy ZWFrOworCisJY2FzZSBTWVNfUmVIRENQOgorCQltc2xlZXAoMjQwMCk7CisJCWRwdHhfZGVidWdf cHJpbnQoaXQ2NTA1LCAweDNCLCAiYXIwX2xvdyIpOworCQlkcHR4X2RlYnVnX3ByaW50KGl0NjUw NSwgMHgzQywgImFyMF9oaWdoIik7CisJCWRwdHhfZGVidWdfcHJpbnQoaXQ2NTA1LCAweDQ1LCAi YnIwX2xvdyIpOworCQlkcHR4X2RlYnVnX3ByaW50KGl0NjUwNSwgMHg0NiwgImJyMF9oaWdoIik7 CisJCWl0NjUwNV9lbmFibGVfaGRjcChpdDY1MDUpOworCQlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJTWVNfUmVIRENQIGVuZCIpOworCQlicmVhazsKKworCWNhc2UgU1lTX05PUk9QOgorCQli cmVhazsKKworCWNhc2UgU1lTX1RSQUlORkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlE Uk1fREVWX0VSUk9SKGRldiwgInN5c19zdGF0ZSBjaGFuZ2UgdG8gdW5rbm93bl9zdGF0ZTogJWQi LAorCQkJICAgICAgaXQ2NTA1LT5zdGF0dXMpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBp bnQgc2hhMV9kaWdlc3Qoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1OCAqc2hhMV9pbnB1dCwgdW5z aWduZWQgaW50IHNpemUsCisJCSAgICAgICB1OCAqb3V0cHV0X2F2KQoreworCXN0cnVjdCBzaGFz aF9kZXNjICpkZXNjOworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKnRmbTsKKwlpbnQgZXJyOworCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2OworCisJdGZtID0gY3J5cHRv X2FsbG9jX3NoYXNoKCJzaGExIiwgMCwgMCk7CisJaWYgKElTX0VSUih0Zm0pKSB7CisJCURSTV9E RVZfRVJST1IoZGV2LCAiY3J5cHRvX2FsbG9jX3NoYXNoIHNoYTEgZmFpbGVkIik7CisJCXJldHVy biBQVFJfRVJSKHRmbSk7CisJfQorCWRlc2MgPSBremFsbG9jKHNpemVvZigqZGVzYykgKyBjcnlw dG9fc2hhc2hfZGVzY3NpemUodGZtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXNjKSB7CisJCWNy eXB0b19mcmVlX3NoYXNoKHRmbSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRlc2MtPnRm bSA9IHRmbTsKKwllcnIgPSBjcnlwdG9fc2hhc2hfZGlnZXN0KGRlc2MsIHNoYTFfaW5wdXQsIHNp emUsIG91dHB1dF9hdik7CisJaWYgKGVycikKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJjcnlwdG9f c2hhc2hfZGlnZXN0IHNoYTEgZmFpbGVkIik7CisKKwljcnlwdG9fZnJlZV9zaGFzaCh0Zm0pOwor CWtmcmVlKGRlc2MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaXQ2NTA1X21ha2V1 cF9zaGExX2lucHV0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKK3sKKwlpbnQgbXNnY250ID0gMCwg aTsKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJdTggYW0wWzhdLCBiaW5mb1syXTsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKKworCWRwdHhzZXQoaXQ2NTA1LCAw eDNBLCAweDIwLCAweDIwKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWRwdHhyZChp dDY1MDUsIDB4NEMgKyBpLCAmdmFsdWUpOworCQlhbTBbaV0gPSB2YWx1ZTsKKwl9CisJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAicmVhZCBhbTAgPSAlOHBoIiwgYW0wKTsKKwlkcHR4c2V0KGl0 NjUwNSwgMHgzQSwgMHgyMCwgMHgwMCk7CisKKwlpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9B VVhfSERDUF9CSU5GTywgYmluZm8sIEFSUkFZX1NJWkUoYmluZm8pKTsKKwlEUk1fREVWX0RFQlVH X0RSSVZFUihkZXYsICJBdHRhY2hlZCBkZXZpY2VzOiAlMDJ4IiwgYmluZm9bMF0gJiAweDdGKTsK KworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiVzIDEyNyBkZXZpY2VzIGFyZSBhdHRhY2hl ZCIsCisJCQkgICAgIChiaW5mb1swXSAmIEJJVCg3KSkgPyAib3ZlciIgOiAidW5kZXIiKTsKKwlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJkZXB0aCwgYXR0YWNoZWQgbGV2ZWxzOiAlMDJ4IiwK KwkJCSAgICAgYmluZm9bMV0gJiAweDA3KTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICIl cyB0aGFuIHNldmVuIGxldmVscyBjYXNjYWRlZCIsCisJCQkgICAgIChiaW5mb1sxXSAmIEJJVCgz KSkgPyAibW9yZSIgOiAibGVzcyIpOworCisJZm9yIChpID0gMDsgaSA8IChiaW5mb1swXSAmIDB4 N0YpOyBpKyspIHsKKwkJaXQ2NTA1X2dldF9kcGNkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfS1NWX0ZJ Rk8gKyAoaSAlIDMpICogNSwKKwkJCQlpdDY1MDUtPnNoYWlucHV0ICsgbXNnY250LCA1KTsKKwkJ bXNnY250ICs9IDU7CisKKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiS1NWIExpc3QgJWQg ZGV2aWNlIDogJTVwaCIsIGksCisJCQkJICAgICBpdDY1MDUtPnNoYWlucHV0ICsgaSAqIDUpOwor CX0KKwlpdDY1MDUtPnNoYWlucHV0W21zZ2NudCsrXSA9IGJpbmZvWzBdOworCWl0NjUwNS0+c2hh aW5wdXRbbXNnY250KytdID0gYmluZm9bMV07CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJ aXQ2NTA1LT5zaGFpbnB1dFttc2djbnQrK10gPSBhbTBbaV07CisKKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJTSEEgTWVzc2FnZSBDb3VudCA9ICVkIiwgbXNnY250KTsKKwlyZXR1cm4gbXNn Y250OworfQorCitzdGF0aWMgdm9pZCBpdDY1MDVfY2hlY2tfc2hhMV9yZXN1bHQoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQoreworCXVuc2lnbmVkIGludCBpLCBzaGFwYXNzOworCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2OworCisJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAiU0hBIGNhbGN1bGF0ZSBjb21wbGV0ZSIpOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKysp CisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImF2ICVkOiAlNHBoIiwgaSwgaXQ2NTA1LT5h dltpXSk7CisKKwlzaGFwYXNzID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCWl0 NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0FVWF9IRENQX1ZfUFJJTUUoaSksIGl0NjUwNS0+YnZb aV0sCisJCQkJNCk7CisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImJ2ICVkOiAlNHBoIiwg aSwgaXQ2NTA1LT5idltpXSk7CisJCWlmICgoaXQ2NTA1LT5idltpXVszXSAhPSBpdDY1MDUtPmF2 W2ldWzBdKSB8fAorCQkgICAgKGl0NjUwNS0+YnZbaV1bMl0gIT0gaXQ2NTA1LT5hdltpXVsxXSkg fHwKKwkJICAgIChpdDY1MDUtPmJ2W2ldWzFdICE9IGl0NjUwNS0+YXZbaV1bMl0pIHx8CisJCSAg ICAoaXQ2NTA1LT5idltpXVswXSAhPSBpdDY1MDUtPmF2W2ldWzNdKSkgeworCQkJc2hhcGFzcyA9 IDA7CisJCX0KKwl9CisJaWYgKHNoYXBhc3MpIHsKKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAiU0hBIGNoZWNrIHJlc3VsdCBwYXNzISIpOworCQlkcHR4c2V0KGl0NjUwNSwgMHgzOSwgQklU KDQpLCBCSVQoNCkpOworCX0gZWxzZSB7CisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNI QSBjaGVjayByZXN1bHQgZmFpbCIpOworCQlkcHR4c2V0KGl0NjUwNSwgMHgzOSwgQklUKDUpLCBC SVQoNSkpOworCX0KK30KKworc3RhdGljIHZvaWQgdG9fZnNtX3N0YXR1cyhzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUsIGVudW0gc3lzX3N0YXR1cyBzdGF0dXMpCit7CisJd2hpbGUgKGl0NjUwNS0+c3Rh dHVzICE9IHN0YXR1cyAmJiBpdDY1MDUtPnN0YXR1cyAhPSBTWVNfVFJBSU5GQUlMKSB7CisJCWRw dHhfc3lzX2ZzbShpdDY1MDUpOworCQlpZiAoaXQ2NTA1LT5zdGF0dXMgPT0gU1lTX1VOUExVRykK KwkJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdvX29uX2ZzbShzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUpOworCitzdGF0aWMgdTggZHBfbGlua19zdGF0dXMoY29uc3QgdTggbGlua19zdGF0 dXNbRFBfTElOS19TVEFUVVNfU0laRV0sIGludCByKQoreworCXJldHVybiBsaW5rX3N0YXR1c1ty IC0gRFBfTEFORTBfMV9TVEFUVVNdOworfQorCitzdGF0aWMgdm9pZCBocGRfaXJxKHN0cnVjdCBp dDY1MDUgKml0NjUwNSkKK3sKKwl1OCBkcGNkX3NpbmtfY291bnQsIGRwY2RfaXJxX3ZlY3RvcjsK Kwl1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsKKwl1bnNpZ25lZCBpbnQgYnN0 YXR1czsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKKworCWRw Y2Rfc2lua19jb3VudCA9IGRwdHhfZHBjZHJkKGl0NjUwNSwgRFBfU0lOS19DT1VOVCk7CisJZHBj ZF9pcnFfdmVjdG9yID0gZHB0eF9kcGNkcmQoaXQ2NTA1LCBEUF9ERVZJQ0VfU0VSVklDRV9JUlFf VkVDVE9SKTsKKwlkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwgbGlu a19zdGF0dXMpOworCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiZHBjZF9zaW5rX2NvdW50 ID0gMHgleCIsIGRwY2Rfc2lua19jb3VudCk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAi ZHBjZF9pcnFfdmVjdG9yID0gMHgleCIsIGRwY2RfaXJxX3ZlY3Rvcik7CisJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAibGlua19zdGF0dXMgPSAlKnBoIiwKKwkJCSAgICAgKGludClBUlJBWV9T SVpFKGxpbmtfc3RhdHVzKSwgbGlua19zdGF0dXMpOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgImRwY2Rfc2lua19jb3VudDolZCIsCisJCQkgICAgIGl0NjUwNS0+ZHBjZF9zaW5rX2NvdW50 KTsKKwlpZiAoIWl0NjUwNS0+ZHBjZF9zaW5rX2NvdW50KSB7CisJCWl0NjUwNV9pbml0X2FuZF9t YXNrX29uKGl0NjUwNSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZHBjZF9pcnFfdmVjdG9yICYg RFBfQ1BfSVJRKSB7CisJCWJzdGF0dXMgPSBkcHR4X2RwY2RyZChpdDY1MDUsIERQX0FVWF9IRENQ X0JTVEFUVVMpOworCQlkcHR4c2V0KGl0NjUwNSwgMHgzOSwgMHgwMiwgMHgwMik7CisJCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwgIlJlY2VpdmUgQ1BfSVJRLCBic3RhdHVzID0gMHglMDJ4IiwK KwkJCQkgICAgIGJzdGF0dXMpOworCQlkcHR4X2RlYnVnX3ByaW50KGl0NjUwNSwgMHg1NSwgIiIp OworCisJCWlmIChic3RhdHVzICYgRFBfQlNUQVRVU19SRUFEWSkKKwkJCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIkhEQ1AgS1NWIGxpc3QgcmVhZHkiKTsKKworCQlpZiAoYnN0YXR1cyAmIERQ X0JTVEFUVVNfTElOS19GQUlMVVJFKSB7CisJCQlEUk1fREVWX0RFQlVHX0RSSVZFUigKKwkJCQlk ZXYsICJMaW5rIEludGVncml0eSBGYWlsLCByZXN0YXJ0IEhEQ1AiKTsKKwkJCXJldHVybjsKKwkJ fQorCQlpZiAoYnN0YXR1cyAmIERQX0JTVEFUVVNfUjBfUFJJTUVfUkVBRFkpCisJCQlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJIRENQIFIwJyByZWFkeSIpOworCX0KKworCWlmIChkcF9saW5r X3N0YXR1cyhsaW5rX3N0YXR1cywgRFBfTEFORV9BTElHTl9TVEFUVVNfVVBEQVRFRCkgJgorCSAg ICBEUF9MSU5LX1NUQVRVU19VUERBVEVEKSB7CisJCWlmICghZHJtX2RwX2NoYW5uZWxfZXFfb2so bGlua19zdGF0dXMsCisJCQkJCSAgaXQ2NTA1LT5saW5rLm51bV9sYW5lcykpIHsKKwkJCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwgIkxpbmsgUmUtVHJhaW5pbmciKTsKKwkJCWRwdHhzZXQoaXQ2 NTA1LCAweEQzLCAweDMwLCAweDMwKTsKKwkJCWRwdHhzZXQoaXQ2NTA1LCAweEU4LCAweDMzLCAw eDAwKTsKKwkJCW1zbGVlcCg1MDApOworCQkJZHB0eF9zeXNfY2hnKGl0NjUwNSwgU1lTX0hQRCk7 CisJCQlnb19vbl9mc20oaXQ2NTA1KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZ29fb25f ZnNtKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2 NTA1LT5jbGllbnQtPmRldjsKKworCWlmIChpdDY1MDUtPmRwY2Rfc2lua19jb3VudCAmJiBpdDY1 MDUtPmNwX2NhcGFibGUpIHsKKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU3VwcG9ydCBI RENQLCBjcF9jYXBhYmxlOiAlZCIsCisJCQkJICAgICBpdDY1MDUtPmNwX2NhcGFibGUpOworCQlp ZiAoaXQ2NTA1LT5lbl9oZGNwKSB7CisJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJFbmFi bGUgSERDUCIpOworCQkJaXQ2NTA1LT5oZGNwX2ZsYWcgPSB0cnVlOworCQkJdG9fZnNtX3N0YXR1 cyhpdDY1MDUsIFNZU19SZUhEQ1ApOworCQkJZHB0eF9zeXNfZnNtKGl0NjUwNSk7CisKKwkJfSBl bHNlIHsKKwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkRpc2FibGUgSERDUCIpOworCQkJ aXQ2NTA1LT5oZGNwX2ZsYWcgPSBmYWxzZTsKKwkJCXRvX2ZzbV9zdGF0dXMoaXQ2NTA1LCBTWVNf Tk9ST1ApOworCQl9CisJfSBlbHNlIHsKKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiTm90 IHN1cHBvcnQgSERDUCIpOworCQlpdDY1MDUtPmhkY3BfZmxhZyA9IGZhbHNlOworCQl0b19mc21f c3RhdHVzKGl0NjUwNSwgU1lTX05PUk9QKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGl0NjUwNV9j aGVja19yZWcwNihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWcwNikKK3sK Kwl1bnNpZ25lZCBpbnQgcmRkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNs aWVudC0+ZGV2OworCisJaWYgKHJlZzA2ICYgQklUKDApKSB7CisJCS8qIGhwZCBwaW4gc3RhdHVz IGNoYW5nZSAqLworCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJIUEQgQ2hhbmdlIEludGVy cnVwdCIpOworCQlpZiAoZHB0eF9nZXRzaW5raHBkKGl0NjUwNSkpIHsKKwkJCWRwdHhfc3lzX2No ZyhpdDY1MDUsIFNZU19IUEQpOworCQkJZHB0eF9zeXNfZnNtKGl0NjUwNSk7CisKKwkJCWlmIChp dDY1MDUtPmVkaWQpIHsKKwkJCQlkcHR4cmQoaXQ2NTA1LCAweDBELCAmcmRkYXRhKTsKKwkJCQlp ZiAocmRkYXRhICYgQklUKDIpKSB7CisJCQkJCWdvX29uX2ZzbShpdDY1MDUpOworCQkJCX0gZWxz ZSB7CisJCQkJCWRwdHh3cihpdDY1MDUsIDB4MDUsIDB4MDApOworCQkJCQlkcHR4c2V0KGl0NjUw NSwgMHg2MSwgMHgwMiwgMHgwMik7CisJCQkJCWRwdHhzZXQoaXQ2NTA1LCAweDYxLCAweDAyLCAw eDAwKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWdvX29uX2ZzbShpdDY1MDUpOworCQkJfQor CQl9IGVsc2UgeworCQkJZHB0eF9zeXNfY2hnKGl0NjUwNSwgU1lTX1VOUExVRyk7CisJCQlkcHR4 X3N5c19mc20oaXQ2NTA1KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChpdDY1MDUtPmNw X2NhcGFibGUpIHsKKwkJaWYgKHJlZzA2ICYgQklUKDQpKSB7CisJCQlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsCisJCQkJCSAgICAgIkhEQ1AgZW5jcnlwdGlvbiBEb25lIEludGVycnVwdCIpOwor CQkJZHB0eF9zeXNfY2hnKGl0NjUwNSwgU1lTX05PUk9QKTsKKwkJfQorCisJCWlmIChyZWcwNiAm IEJJVCgzKSkgeworCQkJRFJNX0RFVl9ERUJVR19EUklWRVIoCisJCQkJZGV2LCAiSERDUCBlbmNy eXB0aW9uIEZhaWwgSW50ZXJydXB0LCByZXRyeSIpOworCQkJaXQ2NTA1X2luaXRfYW5kX21hc2tf b24oaXQ2NTA1KTsKKwkJfQorCX0KKworCWlmIChyZWcwNiAmIEJJVCgxKSkgeworCQlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJIUEQgSVJRIEludGVycnVwdCIpOworCQlocGRfaXJxKGl0NjUw NSk7CisJfQorCisJaWYgKHJlZzA2ICYgQklUKDIpKSB7CisJCWRwdHhyZChpdDY1MDUsIDB4MEQs ICZyZGRhdGEpOworCisJCWlmIChyZGRhdGEgJiBCSVQoMikpIHsKKwkJCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIlZpZGVvIFN0YWJsZSBPbiBJbnRlcnJ1cHQiKTsKKwkJCWRwdHhfc3lzX2No ZyhpdDY1MDUsIFNZU19BVVRPVFJBSU4pOworCQkJZ29fb25fZnNtKGl0NjUwNSk7CisJCX0gZWxz ZSB7CisJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJWaWRlbyBTdGFibGUgT2ZmIEludGVy cnVwdCIpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBpdDY1MDVfY2hlY2tfcmVnMDcoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVnMDcpCit7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7CisJdW5zaWduZWQgaW50IGxlbiwgaTsKKwl1 bnNpZ25lZCBpbnQgYnN0YXR1czsKKworCWlmIChpdDY1MDUtPnN0YXR1cyA9PSBTWVNfVU5QTFVH KQorCQlyZXR1cm47CisJaWYgKHJlZzA3ICYgQklUKDApKSB7CisJCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgIkFVWCBQQyBSZXF1ZXN0IEZhaWwgSW50ZXJydXB0Iik7CisJCWRwdHhfZGVidWdf cHJpbnQoaXQ2NTA1LCAweDlGLCAiQVVYIHN0YXR1czoiKTsKKwl9CisKKwlpZiAocmVnMDcgJiBC SVQoMSkpIHsKKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiSERDUCBldmVudCBJbnRlcnJ1 cHQiKTsKKwkJZm9yIChpID0gMDsgaSA8IFBPTExJTkdLU1ZMSVNUOyBpKyspIHsKKwkJCWJzdGF0 dXMgPSBkcHR4X2RwY2RyZChpdDY1MDUsIERQX0FVWF9IRENQX0JTVEFUVVMpOworCQkJdXNsZWVw X3JhbmdlKDIwMDAsIDMwMDApOworCQkJaWYgKGJzdGF0dXMgJiBEUF9CU1RBVFVTX1JFQURZKQor CQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogUmVhZCBCc3RhdHVzIHRvIGRldGVybWluZSB3 aGF0IGhhcHBlbmVkCisJCSAqLworCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJCc3RhdHVz OiAweCUwMngiLCBic3RhdHVzKTsKKwkJZHB0eF9kZWJ1Z19wcmludChpdDY1MDUsIDB4M0IsICJh cjBfbG93Iik7CisJCWRwdHhfZGVidWdfcHJpbnQoaXQ2NTA1LCAweDNDLCAiYXIwX2hpZ2giKTsK KwkJZHB0eF9kZWJ1Z19wcmludChpdDY1MDUsIDB4NDUsICJicjBfbG93Iik7CisJCWRwdHhfZGVi dWdfcHJpbnQoaXQ2NTA1LCAweDQ2LCAiYnIwX2hpZ2giKTsKKworCQlpZiAoYnN0YXR1cyAmIERQ X0JTVEFUVVNfUkVBRFkpIHsKKwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkhEQ1AgS1NW IGxpc3QgcmVhZHkiKTsKKwkJCWxlbiA9IGl0NjUwNV9tYWtldXBfc2hhMV9pbnB1dChpdDY1MDUp OworCQkJc2hhMV9kaWdlc3QoaXQ2NTA1LCBpdDY1MDUtPnNoYWlucHV0LCBsZW4sCisJCQkJICAg ICh1OCAqKWl0NjUwNS0+YXYpOworCQkJaXQ2NTA1X2NoZWNrX3NoYTFfcmVzdWx0KGl0NjUwNSk7 CisJCX0KKwl9CisJaWYgKGl0NjUwNS0+ZW5fYXVkaW8gJiYgKHJlZzA3ICYgQklUKDIpKSkgewor CQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJBdWRpbyBGSUZPIE92ZXJGbG93IEludGVycnVw dCIpOworCQlkcHR4X2RlYnVnX3ByaW50KGl0NjUwNSwgMHhCRSwgIiIpOworCQlkcHR4c2V0KGl0 NjUwNSwgMHhEMywgMHgyMCwgMHgyMCk7CisJCWRwdHhzZXQoaXQ2NTA1LCAweEU4LCAweDIyLCAw eDAwKTsKKwkJZHB0eHNldChpdDY1MDUsIDB4QjgsIDB4ODAsIDB4ODApOworCQlkcHR4c2V0KGl0 NjUwNSwgMHhCOCwgMHg4MCwgMHgwMCk7CisJCWl0NjUwNV9zZXRfYXVkaW8oaXQ2NTA1KTsKKwl9 CisJaWYgKGl0NjUwNS0+ZW5fYXVkaW8gJiYgKHJlZzA3ICYgQklUKDUpKSkKKwkJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAiQXVkaW8gaW5mb2ZyYW1lIHBhY2tldCBkb25lIik7Cit9CisKK3N0 YXRpYyB2b2lkIGl0NjUwNV9jaGVja19yZWcwOChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2ln bmVkIGludCByZWcwOCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsKKworCWlmIChpdDY1MDUtPnN0YXR1cyA9PSBTWVNfVU5QTFVHKQorCQlyZXR1cm47CisJ aWYgKGl0NjUwNS0+ZW5fYXVkaW8gJiYgKHJlZzA4ICYgQklUKDEpKSkKKwkJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiQXVkaW8gVGltZVN0YW1wIFBhY2tldCBEb25lISIpOworCisJaWYgKGl0 NjUwNS0+ZW5fYXVkaW8gJiYgKHJlZzA4ICYgQklUKDMpKSkgeworCQlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJBdWRpbyBNIEVycm9yIEludGVycnVwdCAuLi4iKTsKKwkJc2hvd19hdWRfbWNu dChpdDY1MDUpOworCX0KKwlpZiAocmVnMDggJiBCSVQoNCkpIHsKKwkJRFJNX0RFVl9ERUJVR19E UklWRVIoZGV2LCAiTGluayBUcmFpbmluZyBGYWlsIEludGVycnVwdCIpOworCQkvKiByZXN0YXJ0 IHRyYWluaW5nICovCisJCWRwdHhfc3lzX2NoZyhpdDY1MDUsIFNZU19BVVRPVFJBSU4pOworCQln b19vbl9mc20oaXQ2NTA1KTsKKwl9CisKKwlpZiAocmVnMDggJiBCSVQoNykpIHsKKwkJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiSU8gTGF0Y2ggRklGTyBPdmVyRmxvdyBJbnRlcnJ1cHQiKTsK KwkJZHB0eHNldChpdDY1MDUsIDB4NjEsIDB4MDIsIDB4MDIpOworCQlkcHR4c2V0KGl0NjUwNSwg MHg2MSwgMHgwMiwgMHgwMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpdDY1MDVfZHB0eF9pcnEo c3RydWN0IGl0NjUwNSAqaXQ2NTA1KQoreworCXVuc2lnbmVkIGludCByZWcwNiwgcmVnMDcsIHJl ZzA4LCByZWcwZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsK KworCWRwdHhyZChpdDY1MDUsIDB4MDYsICZyZWcwNik7CisJZHB0eHJkKGl0NjUwNSwgMHgwNywg JnJlZzA3KTsKKwlkcHR4cmQoaXQ2NTA1LCAweDA4LCAmcmVnMDgpOworCWRwdHhyZChpdDY1MDUs IDB4MEQsICZyZWcwZCk7CisKKwlkcHR4d3IoaXQ2NTA1LCAweDA2LCByZWcwNik7CisJZHB0eHdy KGl0NjUwNSwgMHgwNywgcmVnMDcpOworCWRwdHh3cihpdDY1MDUsIDB4MDgsIHJlZzA4KTsKKwor CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInJlZzA2ID0gMHglMDJ4IiwgcmVnMDYpOworCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInJlZzA3ID0gMHglMDJ4IiwgcmVnMDcpOworCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwgInJlZzA4ID0gMHglMDJ4IiwgcmVnMDgpOworCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwgInJlZzBkID0gMHglMDJ4IiwgcmVnMGQpOworCisJaWYgKHJlZzA2 ICE9IDApCisJCWl0NjUwNV9jaGVja19yZWcwNihpdDY1MDUsIHJlZzA2KTsKKworCWlmIChyZWcw NyAhPSAwKQorCQlpdDY1MDVfY2hlY2tfcmVnMDcoaXQ2NTA1LCByZWcwNyk7CisKKwlpZiAocmVn MDggIT0gMCkKKwkJaXQ2NTA1X2NoZWNrX3JlZzA4KGl0NjUwNSwgcmVnMDgpOworfQorCitzdGF0 aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQor eworCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJyaWRnZV90b19pdDY1MDUoYnJpZGdlKTsKKwor CWlmICghaXQ2NTA1LT5kcnZfaG9sZCkgeworCQlpdDY1MDVfaW50X21hc2tfb24oaXQ2NTA1KTsK KwkJZHB0eF9zeXNfY2hnKGl0NjUwNSwgU1lTX0hQRCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBp dDY1MDVfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7CisKKwlkcHR4X3N5 c19jaGcoaXQ2NTA1LCBTWVNfVU5QTFVHKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f YnJpZGdlX2Z1bmNzIGl0NjUwNV9icmlkZ2VfZnVuY3MgPSB7CisJLmF0dGFjaCA9IGl0NjUwNV9i cmlkZ2VfYXR0YWNoLAorCS5kZXRhY2ggPSBpdDY1MDVfYnJpZGdlX2RldGFjaCwKKwkubW9kZV92 YWxpZCA9IGl0NjUwNV9icmlkZ2VfbW9kZV92YWxpZCwKKwkubW9kZV9zZXQgPSBpdDY1MDVfYnJp ZGdlX21vZGVfc2V0LAorCS5lbmFibGUgPSBpdDY1MDVfYnJpZGdlX2VuYWJsZSwKKwkuZGlzYWJs ZSA9IGl0NjUwNV9icmlkZ2VfZGlzYWJsZSwKK307CisKK3N0YXRpYyB2b2lkIGl0NjUwNV9jbGVh cl9pbnQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQoreworCWRwdHh3cihpdDY1MDUsIDB4MDYsIDB4 RkYpOworCWRwdHh3cihpdDY1MDUsIDB4MDcsIDB4RkYpOworCWRwdHh3cihpdDY1MDUsIDB4MDgs IDB4RkYpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaXQ2NTA1X2ludHBfdGhyZWFkZWRfaGFu ZGxlcihpbnQgdW51c2VkLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9 IGRhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7CisKKwlt c2xlZXAoMTUwKTsKKwltdXRleF9sb2NrKCZpdDY1MDUtPmxvY2spOworCisJaWYgKGl0NjUwNS0+ ZHJ2X2hvbGQgPT0gMCAmJiBpdDY1MDUtPnBvd2VyZWQpIHsKKwkJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiaW50byBpdDY1MDVfZHB0eF9pcnEiKTsKKwkJaXQ2NTA1X2RwdHhfaXJxKGl0NjUw NSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPmxvY2spOworCXJldHVybiBJUlFfSEFO RExFRDsKK30KKworc3RhdGljIGludCBpdDY1MDVfaW5pdF9wZGF0YShzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpCit7CisJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZpdDY1MDUt PnBkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2OworCisJ LyogMS4wViBkaWdpdGFsIGNvcmUgcG93ZXIgcmVndWxhdG9yICAqLworCXBkYXRhLT5wd3IxOCA9 IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJwd3IxOCIpOworCWlmIChJU19FUlIocGRhdGEtPnB3 cjE4KSkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgInB3cjE4IHJlZ3VsYXRvciBub3QgZm91bmQi KTsKKwkJcmV0dXJuIFBUUl9FUlIocGRhdGEtPnB3cjE4KTsKKwl9CisKKwlwZGF0YS0+b3ZkZCA9 IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJvdmRkIik7CisJaWYgKElTX0VSUihwZGF0YS0+b3Zk ZCkpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJvdmRkIHJlZ3VsYXRvciBub3QgZm91bmQiKTsK KwkJcmV0dXJuIFBUUl9FUlIocGRhdGEtPm92ZGQpOworCX0KKworCS8qIEdQSU8gZm9yIEhQRCAq LworCXBkYXRhLT5ncGlvZF9ocGQgPSBkZXZtX2dwaW9kX2dldChkZXYsICJocGQiLCBHUElPRF9J Tik7CisJaWYgKElTX0VSUihwZGF0YS0+Z3Bpb2RfaHBkKSkKKwkJcmV0dXJuIFBUUl9FUlIocGRh dGEtPmdwaW9kX2hwZCk7CisKKwkvKiBHUElPIGZvciBjaGlwIHJlc2V0ICovCisJcGRhdGEtPmdw aW9kX3Jlc2V0ID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfSElHSCk7 CisKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHBkYXRhLT5ncGlvZF9yZXNldCk7Cit9CisKK3N0 YXRpYyBzc2l6ZV90IGRydl9ob2xkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBpdDY1 MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNjbnByaW50Zihi dWYsIFBBR0VfU0laRSwgIiVkXG4iLCBpdDY1MDUtPmRydl9ob2xkKTsKK30KKworc3RhdGljIHNz aXplX3QgZHJ2X2hvbGRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQor eworCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYg KGtzdHJ0b2ludChidWYsIDEwLCAmaXQ2NTA1LT5kcnZfaG9sZCkgPCAwKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCWlmIChpdDY1MDUtPmRydl9ob2xkKSB7CisJCWl0NjUwNV9pbnRfbWFza19vZmYo aXQ2NTA1KTsKKwl9IGVsc2UgeworCQlpdDY1MDVfY2xlYXJfaW50KGl0NjUwNSk7CisJCWl0NjUw NV9pbnRfbWFza19vbihpdDY1MDUpOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBz c2l6ZV90IHByaW50X3RpbWluZ19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq dmlkID0gJml0NjUwNS0+dmlkX2luZm87CisJY2hhciAqc3RyID0gYnVmLCAqZW5kID0gYnVmICsg UEFHRV9TSVpFOworCisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIi0tLXZpZGVv IHRpbWluZy0tLVxuIik7CisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlBDTEs6 JWQuJTAzZE1IelxuIiwgdmlkLT5jbG9jayAvIDEwMDAsCisJCQkgdmlkLT5jbG9jayAlIDEwMDAp OworCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIVG90YWw6JWRcbiIsIHZpZC0+ aHRvdGFsKTsKKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiSEFjdGl2ZTolZFxu IiwgdmlkLT5oZGlzcGxheSk7CisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIkhG cm9udFBvcmNoOiVkXG4iLAorCQkJIHZpZC0+aHN5bmNfc3RhcnQgLSB2aWQtPmhkaXNwbGF5KTsK KwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiSFN5bmNXaWR0aDolZFxuIiwKKwkJ CSB2aWQtPmhzeW5jX2VuZCAtIHZpZC0+aHN5bmNfc3RhcnQpOworCXN0ciArPSBzY25wcmludGYo c3RyLCBlbmQgLSBzdHIsICJIQmFja1BvcmNoOiVkXG4iLAorCQkJIHZpZC0+aHRvdGFsIC0gdmlk LT5oc3luY19lbmQpOworCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJWVG90YWw6 JWRcbiIsIHZpZC0+dnRvdGFsKTsKKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAi VkFjdGl2ZTolZFxuIiwgdmlkLT52ZGlzcGxheSk7CisJc3RyICs9IHNjbnByaW50ZihzdHIsIGVu ZCAtIHN0ciwgIlZGcm9udFBvcmNoOiVkXG4iLAorCQkJIHZpZC0+dnN5bmNfc3RhcnQgLSB2aWQt PnZkaXNwbGF5KTsKKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiVlN5bmNXaWR0 aDolZFxuIiwKKwkJCSB2aWQtPnZzeW5jX2VuZCAtIHZpZC0+dnN5bmNfc3RhcnQpOworCXN0ciAr PSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJWQmFja1BvcmNoOiVkXG4iLAorCQkJIHZpZC0+ dnRvdGFsIC0gdmlkLT52c3luY19lbmQpOworCisJcmV0dXJuIHN0ciAtIGJ1ZjsKK30KKworc3Rh dGljIHNzaXplX3Qgc2hhX2RlYnVnX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlpbnQgaSA9IDA7 CisJY2hhciAqc3RyID0gYnVmLCAqZW5kID0gYnVmICsgUEFHRV9TSVpFOworCXN0cnVjdCBpdDY1 MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJc3RyICs9IHNjbnByaW50Zihz dHIsIGVuZCAtIHN0ciwgInNoYSBpbnB1dDpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGl0NjUwNS0+c2hhaW5wdXQpOyBpICs9IDE2KQorCQlzdHIgKz0gc2NucHJpbnRmKHN0ciwg ZW5kIC0gc3RyLCAiJTE2cGhcbiIsCisJCQkJIGl0NjUwNS0+c2hhaW5wdXQgKyBpKTsKKworCXN0 ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJhdjpcbiIpOworCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGl0NjUwNS0+YXYpOyBpKyspCisJCXN0ciArPSBzY25wcmludGYoc3RyLCBl bmQgLSBzdHIsICIlNHBoXG4iLCBpdDY1MDUtPmF2W2ldKTsKKworCXN0ciArPSBzY25wcmludGYo c3RyLCBlbmQgLSBzdHIsICJidjpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGl0 NjUwNS0+YnYpOyBpKyspCisJCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICIlNHBo XG4iLCBpdDY1MDUtPmJ2W2ldKTsKKworCXJldHVybiBlbmQgLSBzdHI7Cit9CisKK3N0YXRpYyBz c2l6ZV90IGVuX2hkY3Bfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLAorCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdF X1NJWkUsICIlZFxuIiwgaXQ2NTA1LT5lbl9oZGNwKTsKK30KKworc3RhdGljIHNzaXplX3QgZW5f aGRjcF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICph dHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgcmVn M2YsIGhkY3A7CisKKwlpZiAoa3N0cnRvaW50KGJ1ZiwgMTAsICZpdDY1MDUtPmVuX2hkY3ApIDwg MCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWl0NjUwNS0+cG93ZXJlZCB8fCBpdDY1MDUt PnN0YXR1cyA9PSBTWVNfVU5QTFVHKSB7CisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwKKwkJ CQkgICAgICJwb3dlciBkb3duIG9yIHVucGx1ZywgY2FuIG5vdCBmaXJlIEhEQ1AiKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGl0NjUwNS0+ZW5faGRjcCkgeworCQlpZiAoaXQ2NTA1 LT5jcF9jYXBhYmxlKSB7CisJCQlkcHR4X3N5c19jaGcoaXQ2NTA1LCBTWVNfUmVIRENQKTsKKwkJ CWRwdHhfc3lzX2ZzbShpdDY1MDUpOworCQl9IGVsc2UgeworCQkJRFJNX0RFVl9FUlJPUihkZXYs ICJzaW5rIG5vdCBzdXBwb3J0IEhEQ1AiKTsKKwkJfQorCX0gZWxzZSB7CisJCWRwdHhzZXQoaXQ2 NTA1LCAweDA1LCAweDEwLCAweDEwKTsKKwkJZHB0eHNldChpdDY1MDUsIDB4MDUsIDB4MTAsIDB4 MDApOworCQlkcHR4cmQoaXQ2NTA1LCAweDNGLCAmcmVnM2YpOworCQloZGNwID0gKHJlZzNmICYg QklUKDcpKSA+PiA3OworCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICIlcyB0byBkaXNhYmxl IGhkY3AiLAorCQkJCSAgICAgaGRjcCA/ICJmYWlsZWQiIDogInN1Y2NlZWRlZCIpOworCX0KKwly ZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVuX3B3cm9ub2ZmX3Nob3coc3RydWN0 IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpi dWYpCit7CisJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisK KwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGl0NjUwNS0+ZW5fcHdy b25vZmYpOworfQorCitzdGF0aWMgc3NpemVfdCBlbl9wd3Jvbm9mZl9zdG9yZShzdHJ1Y3QgZGV2 aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFy ICpidWYsCisJCQkJIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChrc3RydG9pbnQoYnVmLCAxMCwgJml0NjUwNS0+ ZW5fcHdyb25vZmYpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGNvdW50OworfQor CitzdGF0aWMgc3NpemVfdCBlbl9hdWRpb19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzY25wcmlu dGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgaXQ2NTA1LT5lbl9hdWRpbyk7Cit9CisKK3N0YXRp YyBzc2l6ZV90IGVuX2F1ZGlvX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3Vu dCkKK3sKKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwor CWlmIChrc3RydG9pbnQoYnVmLCAxMCwgJml0NjUwNS0+ZW5fYXVkaW8pIDwgMCkKKwkJcmV0dXJu IC1FSU5WQUw7CisJaWYgKCFpdDY1MDUtPnBvd2VyZWQgfHwgaXQ2NTA1LT5zdGF0dXMgPT0gU1lT X1VOUExVRykgeworCQlEUk1fREVWX0RFQlVHX0RSSVZFUigKKwkJCWRldiwgInBvd2VyIGRvd24g b3IgdW5wbHVnLCBjYW4gbm90IG91dHB1dCBhdWRpbyIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlpZiAoaXQ2NTA1LT5lbl9hdWRpbykKKwkJaXQ2NTA1X3NldF9hdWRpbyhpdDY1MDUpOwor CWVsc2UKKwkJaXQ2NTA1X2F1ZGlvX2Rpc2FibGUoaXQ2NTA1KTsKKworCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIiVzIGF1ZGlvIiwKKwkJCSAgICAgaXQ2NTA1LT5lbl9hdWRpbyA/ICJFbmFi bGUiIDogIkRpc2FibGUiKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZv cmNlX3B3cm9ub2ZmX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRl dmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNv dW50KQoreworCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwor CWludCBwd3I7CisKKwlpZiAoa3N0cnRvaW50KGJ1ZiwgMTAsICZwd3IpIDwgMCkKKwkJcmV0dXJu IC1FSU5WQUw7CisJaWYgKHB3cikKKwkJaXQ2NTA1X3Bvd2Vyb24oaXQ2NTA1KTsKKwllbHNlCisJ CWl0NjUwNV9wb3dlcm9mZihpdDY1MDUpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNz aXplX3QgcHdyX3N0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpdDY1MDUg Kml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNjbnByaW50ZihidWYs IFBBR0VfU0laRSwgIiVkXG4iLCBpdDY1MDUtPnBvd2VyZWQpOworfQorCitzdGF0aWMgREVWSUNF X0FUVFJfUk8ocHJpbnRfdGltaW5nKTsKK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhwd3Jfc3RhdHVz KTsKK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhzaGFfZGVidWcpOworc3RhdGljIERFVklDRV9BVFRS X1dPKGZvcmNlX3B3cm9ub2ZmKTsKK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhkcnZfaG9sZCk7Citz dGF0aWMgREVWSUNFX0FUVFJfUlcoZW5faGRjcCk7CitzdGF0aWMgREVWSUNFX0FUVFJfUlcoZW5f cHdyb25vZmYpOworc3RhdGljIERFVklDRV9BVFRSX1JXKGVuX2F1ZGlvKTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCBhdHRyaWJ1dGUgKml0NjUwNV9hdHRyc1tdID0geworCSZkZXZfYXR0cl9kcnZf aG9sZC5hdHRyLAorCSZkZXZfYXR0cl9wcmludF90aW1pbmcuYXR0ciwKKwkmZGV2X2F0dHJfc2hh X2RlYnVnLmF0dHIsCisJJmRldl9hdHRyX2VuX2hkY3AuYXR0ciwKKwkmZGV2X2F0dHJfZW5fcHdy b25vZmYuYXR0ciwKKwkmZGV2X2F0dHJfZW5fYXVkaW8uYXR0ciwKKwkmZGV2X2F0dHJfZm9yY2Vf cHdyb25vZmYuYXR0ciwKKwkmZGV2X2F0dHJfcHdyX3N0YXR1cy5hdHRyLAorCU5VTEwsCit9Owor CitzdGF0aWMgaW50IGl0NjUwNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwK KwkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGl0NjUw NSAqaXQ2NTA1OworCXN0cnVjdCBpdDY1MDVfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0 IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2OworCXN0cnVjdCBleHRjb25fZGV2ICpleHRjb247 CisJaW50IGVyciwgaW50cF9pcnE7CisKKwlpdDY1MDUgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ ZGV2LCBzaXplb2YoKml0NjUwNSksIEdGUF9LRVJORUwpOworCWlmICghaXQ2NTA1KQorCQlyZXR1 cm4gLUVOT01FTTsKKworCW11dGV4X2luaXQoJml0NjUwNS0+bG9jayk7CisJbXV0ZXhfaW5pdCgm aXQ2NTA1LT5tb2RlX2xvY2spOworCisJcGRhdGEgPSAmaXQ2NTA1LT5wZGF0YTsKKworCWl0NjUw NS0+YnJpZGdlLm9mX25vZGUgPSBjbGllbnQtPmRldi5vZl9ub2RlOworCWl0NjUwNS0+Y2xpZW50 ID0gY2xpZW50OworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGl0NjUwNSk7CisKKwkvKiBn ZXQgZXh0Y29uIGRldmljZSBmcm9tIERUUyAqLworCWV4dGNvbiA9IGV4dGNvbl9nZXRfZWRldl9i eV9waGFuZGxlKGRldiwgMCk7CisJaWYgKFBUUl9FUlIoZXh0Y29uKSA9PSAtRVBST0JFX0RFRkVS KQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwlpZiAoSVNfRVJSKGV4dGNvbikpIHsKKwkJRFJN X0RFVl9FUlJPUihkZXYsICJjYW4gbm90IGdldCBleHRjb24gZGV2aWNlISIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlpdDY1MDUtPmV4dGNvbiA9IGV4dGNvbjsKKworCWl0NjUwNS0+bGFu ZXN3YXBfZGlzYWJsZWQgPQorCQlkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgIm5vLWxh bmVzd2FwIik7CisKKwllcnIgPSBpdDY1MDVfaW5pdF9wZGF0YShpdDY1MDUpOworCWlmIChlcnIp IHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwZGF0YTogJWQi LCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWl0NjUwNS0+cmVnbWFwID0KKwkJZGV2bV9y ZWdtYXBfaW5pdF9pMmMoY2xpZW50LCAmaXQ2NTA1X2JyaWRnZV9yZWdtYXBfY29uZmlnKTsKKwlp ZiAoSVNfRVJSKGl0NjUwNS0+cmVnbWFwKSkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgInJlZ21h cCBpMmMgaW5pdCBmYWlsZWQiKTsKKwkJcmV0dXJuIFBUUl9FUlIoaXQ2NTA1LT5yZWdtYXApOwor CX0KKworCWludHBfaXJxID0gY2xpZW50LT5pcnE7CisKKwlpZiAoIWludHBfaXJxKSB7CisJCURS TV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGdldCBDQUJMRV9ERVQgYW5kIElOVFAgSVJRIik7 CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWVyciA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9p cnEoJmNsaWVudC0+ZGV2LCBpbnRwX2lycSwgTlVMTCwKKwkJCQkJaXQ2NTA1X2ludHBfdGhyZWFk ZWRfaGFuZGxlciwKKwkJCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX09ORVNIT1QsCisJ CQkJCSJpdDY1MDUtaW50cCIsIGl0NjUwNSk7CisJaWYgKGVycikgeworCQlEUk1fREVWX0VSUk9S KGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElOVFAgdGhyZWFkZWQgSVJROiAlZCIsCisJCQkgICAg ICBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFJlZ2lzdGVyIGF1eCBjaGFubmVsICov CisJaXQ2NTA1LT5hdXgubmFtZSA9ICJEUC1BVVgiOworCWl0NjUwNS0+YXV4LmRldiA9IGRldjsK KwlpdDY1MDUtPmF1eC50cmFuc2ZlciA9IGl0NjUwNV9hdXhfdHJhbnNmZXI7CisJZXJyID0gZHJt X2RwX2F1eF9yZWdpc3RlcigmaXQ2NTA1LT5hdXgpOworCWlmIChlcnIgPCAwKSB7CisJCURSTV9E RVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGF1eDogJWQiLCBlcnIpOworCQlyZXR1 cm4gZXJyOworCX0KKworCWl0NjUwNS0+ZW5fcHdyb25vZmYgPSBERUZBVUxUUFdST05PRkY7CisJ aXQ2NTA1LT5kcnZfaG9sZCA9IERFRkFVTFREUlZIT0xEOworCWl0NjUwNS0+ZW5faGRjcCA9IERF RkFVTFRIRENQOworCWl0NjUwNS0+ZW5fYXVkaW8gPSBERUZBVUxUQVVESU87CisJaXQ2NTA1LT5w b3dlcmVkID0gMDsKKworCWlmIChERUZBVUxUUFdST04pCisJCWl0NjUwNV9wb3dlcm9uKGl0NjUw NSk7CisJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGVzKCZjbGllbnQtPmRldi5rb2JqLCBpdDY1MDVf YXR0cnMpOworCWlmIChlcnIpIHsKKwkJZHJtX2RwX2F1eF91bnJlZ2lzdGVyKCZpdDY1MDUtPmF1 eCk7CisJCXJldHVybiBlcnI7CisJfQorCisJaXQ2NTA1LT5icmlkZ2UuZnVuY3MgPSAmaXQ2NTA1 X2JyaWRnZV9mdW5jczsKKwlkcm1fYnJpZGdlX2FkZCgmaXQ2NTA1LT5icmlkZ2UpOworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IGl0NjUwNV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNs aWVudCkKK3sKKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xp ZW50KTsKKworCWRybV9jb25uZWN0b3JfdW5yZWdpc3RlcigmaXQ2NTA1LT5jb25uZWN0b3IpOwor CWRybV9jb25uZWN0b3JfY2xlYW51cCgmaXQ2NTA1LT5jb25uZWN0b3IpOworCWRybV9icmlkZ2Vf cmVtb3ZlKCZpdDY1MDUtPmJyaWRnZSk7CisJc3lzZnNfcmVtb3ZlX2ZpbGVzKCZjbGllbnQtPmRl di5rb2JqLCBpdDY1MDVfYXR0cnMpOworCWRybV9kcF9hdXhfdW5yZWdpc3RlcigmaXQ2NTA1LT5h dXgpOworCWl0NjUwNV9wb3dlcm9mZihpdDY1MDUpOworCXJldHVybiAwOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgaXQ2NTA1X2lkW10gPSB7CisJeyAiaXQ2NTA1Iiwg MCB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGl0NjUwNV9pZCk7CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGl0NjUwNV9vZl9tYXRjaFtdID0gewor CXsgLmNvbXBhdGlibGUgPSAiaXRlLGl0NjUwNSIgfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1 Y3QgaTJjX2RyaXZlciBpdDY1MDVfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFt ZSA9ICJpdDY1MDVfZHB0eCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IGl0NjUwNV9vZl9tYXRjaCwK Kwl9LAorCS5wcm9iZSA9IGl0NjUwNV9pMmNfcHJvYmUsCisJLnJlbW92ZSA9IGl0NjUwNV9yZW1v dmUsCisJLmlkX3RhYmxlID0gaXQ2NTA1X2lkLAorfTsKKworbW9kdWxlX2kyY19kcml2ZXIoaXQ2 NTA1X2kyY19kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJKaXRhbyBTaGkgPGppdGFvLnNoaUBt ZWRpYXRlay5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklUNjUwNSBEaXNwbGF5UG9ydCBU cmFuc21pdHRlciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0gCjEuOS4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=