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=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 128F9C433E6 for ; Fri, 29 Jan 2021 09:56:27 +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 C666F64DFF for ; Fri, 29 Jan 2021 09:56:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C666F64DFF Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.de 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 287AB6EAB6; Fri, 29 Jan 2021 09:56:26 +0000 (UTC) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7CF656EAB2 for ; Fri, 29 Jan 2021 09:56:09 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id C0811AE66; Fri, 29 Jan 2021 09:56:07 +0000 (UTC) From: Thomas Zimmermann To: patrik.r.jakobsson@gmail.com, airlied@linux.ie, daniel@ffwll.ch Subject: [PATCH 1/5] drm/gma500: Remove Medfield support Date: Fri, 29 Jan 2021 10:56:00 +0100 Message-Id: <20210129095604.32423-2-tzimmermann@suse.de> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210129095604.32423-1-tzimmermann@suse.de> References: <20210129095604.32423-1-tzimmermann@suse.de> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Zimmermann , dri-devel@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" TWVkZmllbGQgaXMgYW4gb3V0ZGF0ZWQgbW9iaWxlIHBsYXRmb3JtIHdpdGggYXBwYXJlbnRseSBu byB1c2VycyBsZWZ0LgpSZW1vdmUgaXQgZnJvbSBnbWE1MDAuCgpTaWduZWQtb2ZmLWJ5OiBUaG9t YXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0v Z21hNTAwL0tjb25maWcgICAgICAgICAgICAgICAgfCAgICA3IC0KIGRyaXZlcnMvZ3B1L2RybS9n bWE1MDAvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMTAgLQogZHJpdmVycy9ncHUvZHJtL2dt YTUwMC9jZHZfaW50ZWxfaGRtaS5jICAgICAgIHwgICAgNCAtCiBkcml2ZXJzL2dwdS9kcm0vZ21h NTAwL21kZmxkX2RldmljZS5jICAgICAgICAgfCAgNTY0IC0tLS0tLS0tLQogZHJpdmVycy9ncHUv ZHJtL2dtYTUwMC9tZGZsZF9kc2lfZHBpLmMgICAgICAgIHwgMTAxNyAtLS0tLS0tLS0tLS0tLS0t LQogZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kc2lfZHBpLmggICAgICAgIHwgICA3OSAt LQogZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kc2lfb3V0cHV0LmMgICAgIHwgIDYwMyAt LS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9vdXRwdXQuaCAgICAg fCAgMzc3IC0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kc2lfcGtnX3NlbmRl ci5jIHwgIDY3OSAtLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kc2lf cGtnX3NlbmRlci5oIHwgICA4MCAtLQogZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9pbnRl bF9kaXNwbGF5LmMgIHwgIDk2NiAtLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vZ21h NTAwL21kZmxkX291dHB1dC5jICAgICAgICAgfCAgIDc0IC0tCiBkcml2ZXJzL2dwdS9kcm0vZ21h NTAwL21kZmxkX291dHB1dC5oICAgICAgICAgfCAgIDc2IC0tCiBkcml2ZXJzL2dwdS9kcm0vZ21h NTAwL21kZmxkX3RtZF92aWQuYyAgICAgICAgfCAgMTk3IC0tLS0KIGRyaXZlcnMvZ3B1L2RybS9n bWE1MDAvbWRmbGRfdHBvX3ZpZC5jICAgICAgICB8ICAgODMgLS0KIGRyaXZlcnMvZ3B1L2RybS9n bWE1MDAvcHNiX2Rydi5jICAgICAgICAgICAgICB8ICAgMTIgLQogZHJpdmVycy9ncHUvZHJtL2dt YTUwMC9wc2JfZHJ2LmggICAgICAgICAgICAgIHwgICA2NiAtLQogZHJpdmVycy9ncHUvZHJtL2dt YTUwMC9wc2JfaW50ZWxfcmVnLmggICAgICAgIHwgICAxMiArLQogZHJpdmVycy9ncHUvZHJtL2dt YTUwMC9wc2JfaXJxLmMgICAgICAgICAgICAgIHwgICA3MiArLQogZHJpdmVycy9ncHUvZHJtL2dt YTUwMC9wc2JfaXJxLmggICAgICAgICAgICAgIHwgICAgMiAtCiBkcml2ZXJzL2dwdS9kcm0vZ21h NTAwL3BzYl9yZWcuaCAgICAgICAgICAgICAgfCAgIDE0IC0KIGRyaXZlcnMvZ3B1L2RybS9nbWE1 MDAvdGMzNTg3NngtZHNpLWx2ZHMuYyAgICB8ICA4MDUgLS0tLS0tLS0tLS0tLQogZHJpdmVycy9n cHUvZHJtL2dtYTUwMC90YzM1ODc2eC1kc2ktbHZkcy5oICAgIHwgICAzOCAtCiAyMyBmaWxlcyBj aGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDU4MzUgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kZXZpY2UuYwogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNpX2RwaS5jCiBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kc2lfZHBpLmgKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9vdXRwdXQuYwogZGVs ZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNpX291dHB1dC5o CiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kc2lfcGtn X3NlbmRlci5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZs ZF9kc2lfcGtnX3NlbmRlci5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dt YTUwMC9tZGZsZF9pbnRlbF9kaXNwbGF5LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vZ21hNTAwL21kZmxkX291dHB1dC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2dtYTUwMC9tZGZsZF9vdXRwdXQuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9nbWE1MDAvbWRmbGRfdG1kX3ZpZC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2dtYTUwMC9tZGZsZF90cG9fdmlkLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vZ21hNTAwL3RjMzU4NzZ4LWRzaS1sdmRzLmMKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3RjMzU4NzZ4LWRzaS1sdmRzLmgKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAw L0tjb25maWcKaW5kZXggMGUyM2M5M2ExMDk0Li5iMDUxMTZmMTVkOTcgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9nbWE1MDAvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAw L0tjb25maWcKQEAgLTI2LDEwICsyNiwzIEBAIGNvbmZpZyBEUk1fR01BMzYwMAogCWhlbHAKIAkg IFNheSB5ZXMgdG8gaW5jbHVkZSBiYXNpYyBzdXBwb3J0IGZvciBJbnRlbCBHTUEzNjAwLzM2NTAg KEludGVsCiAJICBDZWRhciBUcmFpbCkgcGxhdGZvcm1zLgotCi1jb25maWcgRFJNX01FREZJRUxE Ci0JYm9vbCAiSW50ZWwgTWVkZmllbGQgc3VwcG9ydCAoRXhwZXJpbWVudGFsKSIKLQlkZXBlbmRz IG9uIERSTV9HTUE1MDAgJiYgWDg2X0lOVEVMX01JRAotCWhlbHAKLQkgIFNheSB5ZXMgdG8gaW5j bHVkZSBzdXBwb3J0IGZvciB0aGUgSW50ZWwgTWVkZmllbGQgcGxhdGZvcm0uCi0KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vZ21h NTAwL01ha2VmaWxlCmluZGV4IGM4ZjJjODliZTk5ZC4uZjdkZGVkMzc4NGZiIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9n bWE1MDAvTWFrZWZpbGUKQEAgLTQzLDE0ICs0Myw0IEBAIGdtYTUwMF9nZngtJChDT05GSUdfRFJN X0dNQTYwMCkgKz0gb2FrdHJhaWxfZGV2aWNlLm8gXAogCSAgb2FrdHJhaWxfaGRtaS5vIFwKIAkg IG9ha3RyYWlsX2hkbWlfaTJjLm8KIAotZ21hNTAwX2dmeC0kKENPTkZJR19EUk1fTUVERklFTEQp ICs9IG1kZmxkX2RldmljZS5vIFwKLQkgIG1kZmxkX291dHB1dC5vIFwKLQkgIG1kZmxkX2ludGVs X2Rpc3BsYXkubyBcCi0JICBtZGZsZF9kc2lfb3V0cHV0Lm8gXAotCSAgbWRmbGRfZHNpX2RwaS5v IFwKLQkgIG1kZmxkX2RzaV9wa2dfc2VuZGVyLm8gXAotCSAgbWRmbGRfdHBvX3ZpZC5vIFwKLQkg IG1kZmxkX3RtZF92aWQubyBcCi0JICB0YzM1ODc2eC1kc2ktbHZkcy5vCi0KIG9iai0kKENPTkZJ R19EUk1fR01BNTAwKSArPSBnbWE1MDBfZ2Z4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvY2R2X2ludGVsX2hkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvY2R2X2lu dGVsX2hkbWkuYwppbmRleCAwZDEyYzZmZmJjNDAuLmU1MjU2ODlmODRmMCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9jZHZfaW50ZWxfaGRtaS5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9nbWE1MDAvY2R2X2ludGVsX2hkbWkuYwpAQCAtMjIsOSArMjIsNiBAQAogICoKICAqIEF1 dGhvcnM6CiAgKglqaW0gbGl1IDxqaW0ubGl1QGludGVsLmNvbT4KLSAqCi0gKiBGSVhNRToKLSAq CVdlIHNob3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgZ2VuZXJpYyBhbmQgc2hhcmUgaXQgd2l0aCBN ZWRmaWVsZAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CkBAIC01Niw3ICs1 Myw2IEBAIHN0cnVjdCBtaWRfaW50ZWxfaGRtaV9wcml2IHsKIAlib29sIGhhc19oZG1pX2F1ZGlv OwogCS8qIFNob3VsZCBzZXQgdGhpcyB3aGVuIGRldGVjdCBob3RwbHVnICovCiAJYm9vbCBoZG1p X2RldmljZV9jb25uZWN0ZWQ7Ci0Jc3RydWN0IG1kZmxkX2hkbWlfaTJjICppMmNfYnVzOwogCXN0 cnVjdCBpMmNfYWRhcHRlciAqaGRtaV9pMmNfYWRhcHRlcjsJLyogZm9yIGNvbnRyb2wgZnVuY3Rp b25zICovCiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vZ21hNTAwL21kZmxkX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9t ZGZsZF9kZXZpY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg0ZDZjZjk4NTZm Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kZXZpY2Uu YworKysgL2Rldi9udWxsCkBAIC0xLDU2NCArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMC1vbmx5Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykg MjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8 bGludXgvZ3Bpby9tYWNoaW5lLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW50ZWxfc2N1X2lwYy5oPgot Ci0jaW5jbHVkZSAibWRmbGRfZHNpX291dHB1dC5oIgotI2luY2x1ZGUgIm1kZmxkX291dHB1dC5o IgotI2luY2x1ZGUgIm1pZF9iaW9zLmgiCi0jaW5jbHVkZSAicHNiX2Rydi5oIgotI2luY2x1ZGUg InRjMzU4NzZ4LWRzaS1sdmRzLmgiCi0KLSNpZmRlZiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RF VklDRQotCi0jZGVmaW5lIE1SU1RfQkxDX01BWF9QV01fUkVHX0ZSRVEJICAgIDB4RkZGRgotI2Rl ZmluZSBCTENfUFdNX1BSRUNJU0lPTl9GQUNUT1IgMTAwCS8qIDEwMDAwMDAwICovCi0jZGVmaW5l IEJMQ19QV01fRlJFUV9DQUxDX0NPTlNUQU5UIDMyCi0jZGVmaW5lIE1IeiAxMDAwMDAwCi0jZGVm aW5lIEJSSUdIVE5FU1NfTUlOX0xFVkVMIDEKLSNkZWZpbmUgQlJJR0hUTkVTU19NQVhfTEVWRUwg MTAwCi0jZGVmaW5lIEJSSUdIVE5FU1NfTUFTSwkweEZGCi0jZGVmaW5lIEJMQ19QT0xBUklUWV9O T1JNQUwgMAotI2RlZmluZSBCTENfUE9MQVJJVFlfSU5WRVJTRSAxCi0jZGVmaW5lIEJMQ19BREpV U1RNRU5UX01BWCAxMDAKLQotI2RlZmluZSBNREZMRF9CTENfUFdNX1BSRUNJU0lPTl9GQUNUT1Ig ICAgMTAKLSNkZWZpbmUgTURGTERfQkxDX01BWF9QV01fUkVHX0ZSRVEgICAgICAgIDB4RkZGRQot I2RlZmluZSBNREZMRF9CTENfTUlOX1BXTV9SRUdfRlJFUSAgICAgICAgMHgyCi0KLSNkZWZpbmUg TURGTERfQkFDS0xJR0hUX1BXTV9QT0xBUklUWV9CSVRfQ0xFQVIgKDB4RkZGRSkKLSNkZWZpbmUg TURGTERfQkFDS0xJR0hUX1BXTV9DVExfU0hJRlQJKDE2KQotCi1zdGF0aWMgc3RydWN0IGJhY2ts aWdodF9kZXZpY2UgKm1kZmxkX2JhY2tsaWdodF9kZXZpY2U7Ci0KLWludCBtZGZsZF9zZXRfYnJp Z2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCi17Ci0Jc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9Ci0JCShzdHJ1Y3QgZHJtX2RldmljZSAqKWJsX2dldF9kYXRhKG1kZmxkX2JhY2ts aWdodF9kZXZpY2UpOwotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKLQlpbnQgbGV2ZWwgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKLQotCURSTV9E RUJVR19EUklWRVIoImJhY2tsaWdodCBsZXZlbCBzZXQgdG8gJWRcbiIsIGxldmVsKTsKLQotCS8q IFBlcmZvcm0gdmFsdWUgYm91bmRzIGNoZWNraW5nICovCi0JaWYgKGxldmVsIDwgQlJJR0hUTkVT U19NSU5fTEVWRUwpCi0JCWxldmVsID0gQlJJR0hUTkVTU19NSU5fTEVWRUw7Ci0KLQlpZiAoZ21h X3Bvd2VyX2JlZ2luKGRldiwgZmFsc2UpKSB7Ci0JCXUzMiBhZGp1c3RlZF9sZXZlbCA9IDA7Ci0K LQkJLyoKLQkJICogQWRqdXN0IHRoZSBiYWNrbGlnaHQgbGV2ZWwgd2l0aCB0aGUgcGVyY2VudCBp bgotCQkgKiBkZXZfcHJpdi0+YmxjX2FkajIKLQkJICovCi0JCWFkanVzdGVkX2xldmVsID0gbGV2 ZWwgKiBkZXZfcHJpdi0+YmxjX2FkajI7Ci0JCWFkanVzdGVkX2xldmVsID0gYWRqdXN0ZWRfbGV2 ZWwgLyBCTENfQURKVVNUTUVOVF9NQVg7Ci0JCWRldl9wcml2LT5icmlnaHRuZXNzX2FkanVzdGVk ID0gYWRqdXN0ZWRfbGV2ZWw7Ci0KLQkJaWYgKG1kZmxkX2dldF9wYW5lbF90eXBlKGRldiwgMCkg PT0gVEMzNTg3NlgpIHsKLQkJCWlmIChkZXZfcHJpdi0+ZHBpX3BhbmVsX29uWzBdIHx8Ci0JCQkJ CWRldl9wcml2LT5kcGlfcGFuZWxfb25bMl0pCi0JCQkJdGMzNTg3NnhfYnJpZ2h0bmVzc19jb250 cm9sKGRldiwKLQkJCQkJCWRldl9wcml2LT5icmlnaHRuZXNzX2FkanVzdGVkKTsKLQkJfSBlbHNl IHsKLQkJCWlmIChkZXZfcHJpdi0+ZHBpX3BhbmVsX29uWzBdKQotCQkJCW1kZmxkX2RzaV9icmln aHRuZXNzX2NvbnRyb2woZGV2LCAwLAotCQkJCQkJZGV2X3ByaXYtPmJyaWdodG5lc3NfYWRqdXN0 ZWQpOwotCQl9Ci0KLQkJaWYgKGRldl9wcml2LT5kcGlfcGFuZWxfb25bMl0pCi0JCQltZGZsZF9k c2lfYnJpZ2h0bmVzc19jb250cm9sKGRldiwgMiwKLQkJCQkJZGV2X3ByaXYtPmJyaWdodG5lc3Nf YWRqdXN0ZWQpOwotCQlnbWFfcG93ZXJfZW5kKGRldik7Ci0JfQotCi0JLyogY2FjaGUgdGhlIGJy aWdodG5lc3MgZm9yIGxhdGVyIHVzZSAqLwotCWRldl9wcml2LT5icmlnaHRuZXNzID0gbGV2ZWw7 Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWRmbGRfZ2V0X2JyaWdodG5lc3Moc3RydWN0 IGJhY2tsaWdodF9kZXZpY2UgKmJkKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPQotCQko c3RydWN0IGRybV9kZXZpY2UgKilibF9nZXRfZGF0YShtZGZsZF9iYWNrbGlnaHRfZGV2aWNlKTsK LQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0K LQlEUk1fREVCVUdfRFJJVkVSKCJicmlnaHRuZXNzID0gMHgleCBcbiIsIGRldl9wcml2LT5icmln aHRuZXNzKTsKLQotCS8qIHJldHVybiBsb2NhbGx5IGNhY2hlZCB2YXIgaW5zdGVhZCBvZiBIVyBy ZWFkIChkdWUgdG8gRFBTVCBldGMuKSAqLwotCXJldHVybiBkZXZfcHJpdi0+YnJpZ2h0bmVzczsK LX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIG1kZmxkX29wcyA9IHsKLQku Z2V0X2JyaWdodG5lc3MgPSBtZGZsZF9nZXRfYnJpZ2h0bmVzcywKLQkudXBkYXRlX3N0YXR1cyAg PSBtZGZsZF9zZXRfYnJpZ2h0bmVzcywKLX07Ci0KLXN0YXRpYyBpbnQgZGV2aWNlX2JhY2tsaWdo dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0 ZSAqZGV2X3ByaXYgPSAoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqKQotCQlkZXYtPmRldl9wcml2 YXRlOwotCi0JZGV2X3ByaXYtPmJsY19hZGoxID0gQkxDX0FESlVTVE1FTlRfTUFYOwotCWRldl9w cml2LT5ibGNfYWRqMiA9IEJMQ19BREpVU1RNRU5UX01BWDsKLQotCXJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IG1kZmxkX2JhY2tsaWdodF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17 Ci0Jc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwotCWludCByZXQgPSAwOwotCi0J bWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOwot CXByb3BzLm1heF9icmlnaHRuZXNzID0gQlJJR0hUTkVTU19NQVhfTEVWRUw7Ci0JcHJvcHMudHlw ZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKLQltZGZsZF9iYWNrbGlnaHRfZGV2aWNlID0gYmFja2xp Z2h0X2RldmljZV9yZWdpc3RlcigibWRmbGQtYmwiLAotCQkJCU5VTEwsICh2b2lkICopZGV2LCAm bWRmbGRfb3BzLCAmcHJvcHMpOwotCi0JaWYgKElTX0VSUihtZGZsZF9iYWNrbGlnaHRfZGV2aWNl KSkKLQkJcmV0dXJuIFBUUl9FUlIobWRmbGRfYmFja2xpZ2h0X2RldmljZSk7Ci0KLQlyZXQgPSBk ZXZpY2VfYmFja2xpZ2h0X2luaXQoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0J bWRmbGRfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMuYnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfTUFY X0xFVkVMOwotCW1kZmxkX2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLm1heF9icmlnaHRuZXNzID0g QlJJR0hUTkVTU19NQVhfTEVWRUw7Ci0JYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMobWRmbGRfYmFj a2xpZ2h0X2RldmljZSk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RydWN0IGJhY2tsaWdo dF9kZXZpY2UgKm1kZmxkX2dldF9iYWNrbGlnaHRfZGV2aWNlKHZvaWQpCi17Ci0jaWZkZWYgQ09O RklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKLQlyZXR1cm4gbWRmbGRfYmFja2xpZ2h0X2Rldmlj ZTsKLSNlbHNlCi0JcmV0dXJuIE5VTEw7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIG1kZmxkX3NhdmVf ZGlzcGxheV9yZWdpc3RlcnMKLSAqCi0gKiBEZXNjcmlwdGlvbjogV2UgYXJlIGdvaW5nIHRvIHN1 c3BlbmQgc28gc2F2ZSBjdXJyZW50IGRpc3BsYXkKLSAqIHJlZ2lzdGVyIHN0YXRlLgotICoKLSAq IE5vdGVzOiBGSVhNRV9KTElVNyBuZWVkIHRvIGFkZCB0aGUgc3VwcG9ydCBmb3IgRFBJIE1JUEkg JiBIRE1JIGF1ZGlvCi0gKi8KLXN0YXRpYyBpbnQgbWRmbGRfc2F2ZV9kaXNwbGF5X3JlZ2lzdGVy cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZW51bSkKLXsKLQlzdHJ1Y3QgZHJtX3Bz Yl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG1lZGZpZWxk X3N0YXRlICpyZWdzID0gJmRldl9wcml2LT5yZWdzLm1kZmxkOwotCXN0cnVjdCBwc2JfcGlwZSAq cGlwZSA9ICZkZXZfcHJpdi0+cmVncy5waXBlW3BpcGVudW1dOwotCWNvbnN0IHN0cnVjdCBwc2Jf b2Zmc2V0ICptYXAgPSAmZGV2X3ByaXYtPnJlZ21hcFtwaXBlbnVtXTsKLQlpbnQgaTsKLQl1MzIg Km1pcGlfdmFsOwotCi0JLyogcmVnaXN0ZXIgKi8KLQl1MzIgbWlwaV9yZWcgPSBNSVBJOwotCi0J c3dpdGNoIChwaXBlbnVtKSB7Ci0JY2FzZSAwOgotCQltaXBpX3ZhbCA9ICZyZWdzLT5zYXZlTUlQ STsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQltaXBpX3ZhbCA9ICZyZWdzLT5zYXZlTUlQSTsKLQkJ YnJlYWs7Ci0JY2FzZSAyOgotCQkvKiByZWdpc3RlciAqLwotCQltaXBpX3JlZyA9IE1JUElfQzsK LQkJLyogcG9pbnRlciB0byB2YWx1ZXMgKi8KLQkJbWlwaV92YWwgPSAmcmVncy0+c2F2ZU1JUElf QzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFJNX0VSUk9SKCIlcywgaW52YWxpZCBwaXBlIG51 bWJlci5cbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogUGlwZSAm IHBsYW5lIEEgaW5mbyAqLwotCXBpcGUtPmRwbGwgPSBQU0JfUlZEQzMyKG1hcC0+ZHBsbCk7Ci0J cGlwZS0+ZnAwID0gUFNCX1JWREMzMihtYXAtPmZwMCk7Ci0JcGlwZS0+Y29uZiA9IFBTQl9SVkRD MzIobWFwLT5jb25mKTsKLQlwaXBlLT5odG90YWwgPSBQU0JfUlZEQzMyKG1hcC0+aHRvdGFsKTsK LQlwaXBlLT5oYmxhbmsgPSBQU0JfUlZEQzMyKG1hcC0+aGJsYW5rKTsKLQlwaXBlLT5oc3luYyA9 IFBTQl9SVkRDMzIobWFwLT5oc3luYyk7Ci0JcGlwZS0+dnRvdGFsID0gUFNCX1JWREMzMihtYXAt PnZ0b3RhbCk7Ci0JcGlwZS0+dmJsYW5rID0gUFNCX1JWREMzMihtYXAtPnZibGFuayk7Ci0JcGlw ZS0+dnN5bmMgPSBQU0JfUlZEQzMyKG1hcC0+dnN5bmMpOwotCXBpcGUtPnNyYyA9IFBTQl9SVkRD MzIobWFwLT5zcmMpOwotCXBpcGUtPnN0cmlkZSA9IFBTQl9SVkRDMzIobWFwLT5zdHJpZGUpOwot CXBpcGUtPmxpbm9mZiA9IFBTQl9SVkRDMzIobWFwLT5saW5vZmYpOwotCXBpcGUtPnRpbGVvZmYg PSBQU0JfUlZEQzMyKG1hcC0+dGlsZW9mZik7Ci0JcGlwZS0+c2l6ZSA9IFBTQl9SVkRDMzIobWFw LT5zaXplKTsKLQlwaXBlLT5wb3MgPSBQU0JfUlZEQzMyKG1hcC0+cG9zKTsKLQlwaXBlLT5zdXJm ID0gUFNCX1JWREMzMihtYXAtPnN1cmYpOwotCXBpcGUtPmNudHIgPSBQU0JfUlZEQzMyKG1hcC0+ Y250cik7Ci0JcGlwZS0+c3RhdHVzID0gUFNCX1JWREMzMihtYXAtPnN0YXR1cyk7Ci0KLQkvKnNh dmUgcGFsZXR0ZSAoZ2FtbWEpICovCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotCQlwaXBl LT5wYWxldHRlW2ldID0gUFNCX1JWREMzMihtYXAtPnBhbGV0dGUgKyAoaSA8PCAyKSk7Ci0KLQlp ZiAocGlwZW51bSA9PSAxKSB7Ci0JCXJlZ3MtPnNhdmVQRklUX0NPTlRST0wgPSBQU0JfUlZEQzMy KFBGSVRfQ09OVFJPTCk7Ci0JCXJlZ3MtPnNhdmVQRklUX1BHTV9SQVRJT1MgPSBQU0JfUlZEQzMy KFBGSVRfUEdNX1JBVElPUyk7Ci0KLQkJcmVncy0+c2F2ZUhETUlQSFlNSVNDQ1RMID0gUFNCX1JW REMzMihIRE1JUEhZTUlTQ0NUTCk7Ci0JCXJlZ3MtPnNhdmVIRE1JQl9DT05UUk9MID0gUFNCX1JW REMzMihIRE1JQl9DT05UUk9MKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKm1pcGlfdmFsID0gUFNC X1JWREMzMihtaXBpX3JlZyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBtZGZsZF9yZXN0b3Jl X2Rpc3BsYXlfcmVnaXN0ZXJzCi0gKgotICogRGVzY3JpcHRpb246IFdlIGFyZSBnb2luZyB0byBy ZXN1bWUgc28gcmVzdG9yZSBkaXNwbGF5IHJlZ2lzdGVyIHN0YXRlLgotICoKLSAqIE5vdGVzOiBG SVhNRV9KTElVNyBuZWVkIHRvIGFkZCB0aGUgc3VwcG9ydCBmb3IgRFBJIE1JUEkgJiBIRE1JIGF1 ZGlvCi0gKi8KLXN0YXRpYyBpbnQgbWRmbGRfcmVzdG9yZV9kaXNwbGF5X3JlZ2lzdGVycyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZW51bSkKLXsKLQkvKiBUbyBnZXQgIHBhbmVsIG91 dCBvZiBVTFBTIG1vZGUuICovCi0JdTMyIHRlbXAgPSAwOwotCXUzMiBkZXZpY2VfcmVhZHlfcmVn ID0gREVWSUNFX1JFQURZX1JFRzsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWcg PSBOVUxMOwotCXN0cnVjdCBtZWRmaWVsZF9zdGF0ZSAqcmVncyA9ICZkZXZfcHJpdi0+cmVncy5t ZGZsZDsKLQlzdHJ1Y3QgcHNiX3BpcGUgKnBpcGUgPSAmZGV2X3ByaXYtPnJlZ3MucGlwZVtwaXBl bnVtXTsKLQljb25zdCBzdHJ1Y3QgcHNiX29mZnNldCAqbWFwID0gJmRldl9wcml2LT5yZWdtYXBb cGlwZW51bV07Ci0JdTMyIGk7Ci0JdTMyIGRwbGw7Ci0JdTMyIHRpbWVvdXQgPSAwOwotCi0JLyog cmVnaXN0ZXIgKi8KLQl1MzIgbWlwaV9yZWcgPSBNSVBJOwotCi0JLyogdmFsdWVzICovCi0JdTMy IGRwbGxfdmFsID0gcGlwZS0+ZHBsbDsKLQl1MzIgbWlwaV92YWwgPSByZWdzLT5zYXZlTUlQSTsK LQotCXN3aXRjaCAocGlwZW51bSkgewotCWNhc2UgMDoKLQkJZHBsbF92YWwgJj0gfkRQTExfVkNP X0VOQUJMRTsKLQkJZHNpX2NvbmZpZyA9IGRldl9wcml2LT5kc2lfY29uZmlnc1swXTsKLQkJYnJl YWs7Ci0JY2FzZSAxOgotCQlkcGxsX3ZhbCAmPSB+RFBMTF9WQ09fRU5BQkxFOwotCQlicmVhazsK LQljYXNlIDI6Ci0JCW1pcGlfcmVnID0gTUlQSV9DOwotCQltaXBpX3ZhbCA9IHJlZ3MtPnNhdmVN SVBJX0M7Ci0JCWRzaV9jb25maWcgPSBkZXZfcHJpdi0+ZHNpX2NvbmZpZ3NbMV07Ci0JCWJyZWFr OwotCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUigiJXMsIGludmFsaWQgcGlwZSBudW1iZXIuXG4iLCBf X2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qbWFrZSBzdXJlIFZHQSBwbGFu ZSBpcyBvZmYuIGl0IGluaXRpYWxpemVzIHRvIG9uIGFmdGVyIHJlc2V0ISovCi0JUFNCX1dWREMz MigweDgwMDAwMDAwLCBWR0FDTlRSTCk7Ci0KLQlpZiAocGlwZW51bSA9PSAxKSB7Ci0JCVBTQl9X VkRDMzIoZHBsbF92YWwgJiB+RFBMTF9WQ09fRU5BQkxFLCBtYXAtPmRwbGwpOwotCQlQU0JfUlZE QzMyKG1hcC0+ZHBsbCk7Ci0KLQkJUFNCX1dWREMzMihwaXBlLT5mcDAsIG1hcC0+ZnAwKTsKLQl9 IGVsc2UgewotCi0JCWRwbGwgPSBQU0JfUlZEQzMyKG1hcC0+ZHBsbCk7Ci0KLQkJaWYgKCEoZHBs bCAmIERQTExfVkNPX0VOQUJMRSkpIHsKLQotCQkJLyogV2hlbiB1bmdhdGluZyBwb3dlciBvZiBE UExMLCBuZWVkcyB0byB3YWl0IDAuNXVzCi0JCQkgICBiZWZvcmUgZW5hYmxlIHRoZSBWQ08gKi8K LQkJCWlmIChkcGxsICYgTURGTERfUFdSX0dBVEVfRU4pIHsKLQkJCQlkcGxsICY9IH5NREZMRF9Q V1JfR0FURV9FTjsKLQkJCQlQU0JfV1ZEQzMyKGRwbGwsIG1hcC0+ZHBsbCk7Ci0JCQkJLyogRklY TUVfTURGTEQgUE8gLSBjaGFuZ2UgNTAwIHRvIDEgYWZ0ZXIgUE8gKi8KLQkJCQl1ZGVsYXkoNTAw KTsKLQkJCX0KLQotCQkJUFNCX1dWREMzMihwaXBlLT5mcDAsIG1hcC0+ZnAwKTsKLQkJCVBTQl9X VkRDMzIoZHBsbF92YWwsIG1hcC0+ZHBsbCk7Ci0JCQkvKiBGSVhNRV9NREZMRCBQTyAtIGNoYW5n ZSA1MDAgdG8gMSBhZnRlciBQTyAqLwotCQkJdWRlbGF5KDUwMCk7Ci0KLQkJCWRwbGxfdmFsIHw9 IERQTExfVkNPX0VOQUJMRTsKLQkJCVBTQl9XVkRDMzIoZHBsbF92YWwsIG1hcC0+ZHBsbCk7Ci0J CQlQU0JfUlZEQzMyKG1hcC0+ZHBsbCk7Ci0KLQkJCS8qIHdhaXQgZm9yIERTSSBQTEwgdG8gbG9j ayAqLwotCQkJd2hpbGUgKHRpbWVvdXQgPCAyMDAwMCAmJgotCQkJICAhKFBTQl9SVkRDMzIobWFw LT5jb25mKSAmIFBJUEVDT05GX0RTSVBMTF9MT0NLKSkgewotCQkJCXVkZWxheSgxNTApOwotCQkJ CXRpbWVvdXQrKzsKLQkJCX0KLQotCQkJaWYgKHRpbWVvdXQgPT0gMjAwMDApIHsKLQkJCQlEUk1f RVJST1IoIiVzLCBjYW4ndCBsb2NrIERTSVBMTC5cbiIsCi0JCQkJCQkJCV9fZnVuY19fKTsKLQkJ CQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfQotCX0KLQkvKiBSZXN0b3JlIG1vZGUgKi8KLQlQ U0JfV1ZEQzMyKHBpcGUtPmh0b3RhbCwgbWFwLT5odG90YWwpOwotCVBTQl9XVkRDMzIocGlwZS0+ aGJsYW5rLCBtYXAtPmhibGFuayk7Ci0JUFNCX1dWREMzMihwaXBlLT5oc3luYywgbWFwLT5oc3lu Yyk7Ci0JUFNCX1dWREMzMihwaXBlLT52dG90YWwsIG1hcC0+dnRvdGFsKTsKLQlQU0JfV1ZEQzMy KHBpcGUtPnZibGFuaywgbWFwLT52YmxhbmspOwotCVBTQl9XVkRDMzIocGlwZS0+dnN5bmMsIG1h cC0+dnN5bmMpOwotCVBTQl9XVkRDMzIocGlwZS0+c3JjLCBtYXAtPnNyYyk7Ci0JUFNCX1dWREMz MihwaXBlLT5zdGF0dXMsIG1hcC0+c3RhdHVzKTsKLQotCS8qc2V0IHVwIHRoZSBwbGFuZSovCi0J UFNCX1dWREMzMihwaXBlLT5zdHJpZGUsIG1hcC0+c3RyaWRlKTsKLQlQU0JfV1ZEQzMyKHBpcGUt Pmxpbm9mZiwgbWFwLT5saW5vZmYpOwotCVBTQl9XVkRDMzIocGlwZS0+dGlsZW9mZiwgbWFwLT50 aWxlb2ZmKTsKLQlQU0JfV1ZEQzMyKHBpcGUtPnNpemUsIG1hcC0+c2l6ZSk7Ci0JUFNCX1dWREMz MihwaXBlLT5wb3MsIG1hcC0+cG9zKTsKLQlQU0JfV1ZEQzMyKHBpcGUtPnN1cmYsIG1hcC0+c3Vy Zik7Ci0KLQlpZiAocGlwZW51bSA9PSAxKSB7Ci0JCS8qIHJlc3RvcmUgcGFsZXR0ZSAoZ2FtbWEp ICovCi0JCS8qIHVkZWxheSg1MDAwMCk7ICovCi0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykK LQkJCVBTQl9XVkRDMzIocGlwZS0+cGFsZXR0ZVtpXSwgbWFwLT5wYWxldHRlICsgKGkgPDwgMikp OwotCi0JCVBTQl9XVkRDMzIocmVncy0+c2F2ZVBGSVRfQ09OVFJPTCwgUEZJVF9DT05UUk9MKTsK LQkJUFNCX1dWREMzMihyZWdzLT5zYXZlUEZJVF9QR01fUkFUSU9TLCBQRklUX1BHTV9SQVRJT1Mp OwotCi0JCS8qVE9ETzogcmVzdW1lIEhETUkgcG9ydCAqLwotCi0JCS8qVE9ETzogcmVzdW1lIHBp cGUqLwotCi0JCS8qZW5hYmxlIHRoZSBwbGFuZSovCi0JCVBTQl9XVkRDMzIocGlwZS0+Y250ciAm IH5ESVNQTEFZX1BMQU5FX0VOQUJMRSwgbWFwLT5jbnRyKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0K LQkvKnNldCB1cCBwaXBlIHJlbGF0ZWQgcmVnaXN0ZXJzKi8KLQlQU0JfV1ZEQzMyKG1pcGlfdmFs LCBtaXBpX3JlZyk7Ci0KLQkvKnNldHVwIE1JUEkgYWRhcHRlciArIE1JUEkgSVAgcmVnaXN0ZXJz Ki8KLQlpZiAoZHNpX2NvbmZpZykKLQkJbWRmbGRfZHNpX2NvbnRyb2xsZXJfaW5pdChkc2lfY29u ZmlnLCBwaXBlbnVtKTsKLQotCWlmIChpbl9hdG9taWMoKSB8fCBpbl9pbnRlcnJ1cHQoKSkKLQkJ bWRlbGF5KDIwKTsKLQllbHNlCi0JCW1zbGVlcCgyMCk7Ci0KLQkvKmVuYWJsZSB0aGUgcGxhbmUq LwotCVBTQl9XVkRDMzIocGlwZS0+Y250ciwgbWFwLT5jbnRyKTsKLQotCWlmIChpbl9hdG9taWMo KSB8fCBpbl9pbnRlcnJ1cHQoKSkKLQkJbWRlbGF5KDIwKTsKLQllbHNlCi0JCW1zbGVlcCgyMCk7 Ci0KLQkvKiBMUCBIb2xkIFJlbGVhc2UgKi8KLQl0ZW1wID0gUkVHX1JFQUQobWlwaV9yZWcpOwot CXRlbXAgfD0gTFBfT1VUUFVUX0hPTERfUkVMRUFTRTsKLQlSRUdfV1JJVEUobWlwaV9yZWcsIHRl bXApOwotCW1kZWxheSgxKTsKLQotCi0JLyogU2V0IERTSSBob3N0IHRvIGV4aXQgZnJvbSBVdHJh IExvdyBQb3dlciBTdGF0ZSAqLwotCXRlbXAgPSBSRUdfUkVBRChkZXZpY2VfcmVhZHlfcmVnKTsK LQl0ZW1wICY9IH5VTFBTX01BU0s7Ci0JdGVtcCB8PSAweDM7Ci0JdGVtcCB8PSBFWElUX1VMUFNf REVWX1JFQURZOwotCVJFR19XUklURShkZXZpY2VfcmVhZHlfcmVnLCB0ZW1wKTsKLQltZGVsYXko MSk7Ci0KLQl0ZW1wID0gUkVHX1JFQUQoZGV2aWNlX3JlYWR5X3JlZyk7Ci0JdGVtcCAmPSB+VUxQ U19NQVNLOwotCXRlbXAgfD0gRVhJVElOR19VTFBTOwotCVJFR19XUklURShkZXZpY2VfcmVhZHlf cmVnLCB0ZW1wKTsKLQltZGVsYXkoMSk7Ci0KLQkvKmVuYWJsZSB0aGUgcGlwZSovCi0JUFNCX1dW REMzMihwaXBlLT5jb25mLCBtYXAtPmNvbmYpOwotCi0JLyogcmVzdG9yZSBwYWxldHRlIChnYW1t YSkgKi8KLQkvKiB1ZGVsYXkoNTAwMDApOyAqLwotCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykK LQkJUFNCX1dWREMzMihwaXBlLT5wYWxldHRlW2ldLCBtYXAtPnBhbGV0dGUgKyAoaSA8PCAyKSk7 Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtZGZsZF9zYXZlX3JlZ2lzdGVycyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQotewotCS8qIG1kZmxkX3NhdmVfY3Vyc29yX292ZXJsYXlfcmVn aXN0ZXJzKGRldik7ICovCi0JbWRmbGRfc2F2ZV9kaXNwbGF5X3JlZ2lzdGVycyhkZXYsIDApOwot CW1kZmxkX3NhdmVfZGlzcGxheV9yZWdpc3RlcnMoZGV2LCAyKTsKLQltZGZsZF9kaXNhYmxlX2Ny dGMoZGV2LCAwKTsKLQltZGZsZF9kaXNhYmxlX2NydGMoZGV2LCAyKTsKLQotCXJldHVybiAwOwot fQotCi1zdGF0aWMgaW50IG1kZmxkX3Jlc3RvcmVfcmVnaXN0ZXJzKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCi17Ci0JbWRmbGRfcmVzdG9yZV9kaXNwbGF5X3JlZ2lzdGVycyhkZXYsIDIpOwotCW1k ZmxkX3Jlc3RvcmVfZGlzcGxheV9yZWdpc3RlcnMoZGV2LCAwKTsKLQkvKiBtZGZsZF9yZXN0b3Jl X2N1cnNvcl9vdmVybGF5X3JlZ2lzdGVycyhkZXYpOyAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgbWRmbGRfcG93ZXJfZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCS8q IEZJWE1FICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWRmbGRfcG93ZXJfdXAoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQkvKiBGSVhNRSAqLwotCXJldHVybiAwOwotfQotCi0v KiBNZWRmaWVsZCAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHNiX29mZnNldCBtZGZsZF9yZWdt YXBbM10gPSB7Ci0JewotCQkuZnAwID0gTVJTVF9GUEEwLAotCQkuZnAxID0gTVJTVF9GUEExLAot CQkuY250ciA9IERTUEFDTlRSLAotCQkuY29uZiA9IFBJUEVBQ09ORiwKLQkJLnNyYyA9IFBJUEVB U1JDLAotCQkuZHBsbCA9IE1SU1RfRFBMTF9BLAotCQkuaHRvdGFsID0gSFRPVEFMX0EsCi0JCS5o YmxhbmsgPSBIQkxBTktfQSwKLQkJLmhzeW5jID0gSFNZTkNfQSwKLQkJLnZ0b3RhbCA9IFZUT1RB TF9BLAotCQkudmJsYW5rID0gVkJMQU5LX0EsCi0JCS52c3luYyA9IFZTWU5DX0EsCi0JCS5zdHJp ZGUgPSBEU1BBU1RSSURFLAotCQkuc2l6ZSA9IERTUEFTSVpFLAotCQkucG9zID0gRFNQQVBPUywK LQkJLnN1cmYgPSBEU1BBU1VSRiwKLQkJLmFkZHIgPSBNUlNUX0RTUEFCQVNFLAotCQkuc3RhdHVz ID0gUElQRUFTVEFULAotCQkubGlub2ZmID0gRFNQQUxJTk9GRiwKLQkJLnRpbGVvZmYgPSBEU1BB VElMRU9GRiwKLQkJLnBhbGV0dGUgPSBQQUxFVFRFX0EsCi0JfSwKLQl7Ci0JCS5mcDAgPSBNREZM RF9EUExMX0RJVjAsCi0JCS5jbnRyID0gRFNQQkNOVFIsCi0JCS5jb25mID0gUElQRUJDT05GLAot CQkuc3JjID0gUElQRUJTUkMsCi0JCS5kcGxsID0gTURGTERfRFBMTF9CLAotCQkuaHRvdGFsID0g SFRPVEFMX0IsCi0JCS5oYmxhbmsgPSBIQkxBTktfQiwKLQkJLmhzeW5jID0gSFNZTkNfQiwKLQkJ LnZ0b3RhbCA9IFZUT1RBTF9CLAotCQkudmJsYW5rID0gVkJMQU5LX0IsCi0JCS52c3luYyA9IFZT WU5DX0IsCi0JCS5zdHJpZGUgPSBEU1BCU1RSSURFLAotCQkuc2l6ZSA9IERTUEJTSVpFLAotCQku cG9zID0gRFNQQlBPUywKLQkJLnN1cmYgPSBEU1BCU1VSRiwKLQkJLmFkZHIgPSBNUlNUX0RTUEJC QVNFLAotCQkuc3RhdHVzID0gUElQRUJTVEFULAotCQkubGlub2ZmID0gRFNQQkxJTk9GRiwKLQkJ LnRpbGVvZmYgPSBEU1BCVElMRU9GRiwKLQkJLnBhbGV0dGUgPSBQQUxFVFRFX0IsCi0JfSwKLQl7 Ci0JCS5mcDAgPSBNUlNUX0ZQQTAsCS8qIFRoaXMgaXMgd2hhdCB0aGUgb2xkIGNvZGUgZGlkID8/ ICovCi0JCS5jbnRyID0gRFNQQ0NOVFIsCi0JCS5jb25mID0gUElQRUNDT05GLAotCQkuc3JjID0g UElQRUNTUkMsCi0JCS8qIE5vIERQTExfQyAqLwotCQkuZHBsbCA9IE1SU1RfRFBMTF9BLAotCQku aHRvdGFsID0gSFRPVEFMX0MsCi0JCS5oYmxhbmsgPSBIQkxBTktfQywKLQkJLmhzeW5jID0gSFNZ TkNfQywKLQkJLnZ0b3RhbCA9IFZUT1RBTF9DLAotCQkudmJsYW5rID0gVkJMQU5LX0MsCi0JCS52 c3luYyA9IFZTWU5DX0MsCi0JCS5zdHJpZGUgPSBEU1BDU1RSSURFLAotCQkuc2l6ZSA9IERTUEJT SVpFLAotCQkucG9zID0gRFNQQ1BPUywKLQkJLnN1cmYgPSBEU1BDU1VSRiwKLQkJLmFkZHIgPSBN REZMRF9EU1BDQkFTRSwKLQkJLnN0YXR1cyA9IFBJUEVDU1RBVCwKLQkJLmxpbm9mZiA9IERTUENM SU5PRkYsCi0JCS50aWxlb2ZmID0gRFNQQ1RJTEVPRkYsCi0JCS5wYWxldHRlID0gUEFMRVRURV9D LAotCX0sCi19OwotCi0vKgotICogVGhlIEdQSU8gbGluZXMgZm9yIHJlc2V0dGluZyBEU0kgcGlw ZSAwIGFuZCAyIGFyZSBhdmFpbGFibGUgaW4gdGhlCi0gKiBQQ0kgZGV2aWNlIDAwMDA6MDA6MGMu MCBvbiB0aGUgTWVkZmllbGQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb2RfbG9va3VwX3RhYmxl IG1kZmxkX2RzaV9waXBlX2dwaW9fdGFibGUgPSB7Ci0JLnRhYmxlICA9IHsKLQkJR1BJT19MT09L VVAoIjAwMDA6MDA6MGMuMCIsIDEyOCwgImRzaS1waXBlMC1yZXNldCIsCi0JCQkgICAgR1BJT19B Q1RJVkVfSElHSCksCi0JCUdQSU9fTE9PS1VQKCIwMDAwOjAwOjBjLjAiLCAzNCwgImRzaS1waXBl Mi1yZXNldCIsCi0JCQkgICAgR1BJT19BQ1RJVkVfSElHSCksCi0JCXsgfSwKLQl9LAotfTsKLQot c3RhdGljIGludCBtZGZsZF9jaGlwX3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0J c3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0 cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYtPmRldik7Ci0KLQlpZiAocGNpX2Vu YWJsZV9tc2kocGRldikpCi0JCWRldl93YXJuKGRldi0+ZGV2LCAiRW5hYmxpbmcgTVNJIGZhaWxl ZCFcbiIpOwotCWRldl9wcml2LT5yZWdtYXAgPSBtZGZsZF9yZWdtYXA7Ci0KLQkvKiBBc3NvY2lh dGUgdGhlIEdQSU8gbGluZXMgd2l0aCB0aGUgRFJNIGRldmljZSAqLwotCW1kZmxkX2RzaV9waXBl X2dwaW9fdGFibGUuZGV2X2lkID0gZGV2X25hbWUoZGV2LT5kZXYpOwotCWdwaW9kX2FkZF9sb29r dXBfdGFibGUoJm1kZmxkX2RzaV9waXBlX2dwaW9fdGFibGUpOwotCi0JcmV0dXJuIG1pZF9jaGlw X3NldHVwKGRldik7Ci19Ci0KLWNvbnN0IHN0cnVjdCBwc2Jfb3BzIG1kZmxkX2NoaXBfb3BzID0g ewotCS5uYW1lID0gIm1kZmxkIiwKLQkucGlwZXMgPSAzLAotCS5jcnRjcyA9IDMsCi0JLmx2ZHNf bWFzayA9ICgxIDw8IDEpLAotCS5oZG1pX21hc2sgPSAoMSA8PCAxKSwKLQkuY3Vyc29yX25lZWRz X3BoeXMgPSAwLAotCS5zZ3hfb2Zmc2V0ID0gTVJTVF9TR1hfT0ZGU0VULAotCi0JLmNoaXBfc2V0 dXAgPSBtZGZsZF9jaGlwX3NldHVwLAotCS5jcnRjX2hlbHBlciA9ICZtZGZsZF9oZWxwZXJfZnVu Y3MsCi0JLmNydGNfZnVuY3MgPSAmcHNiX2ludGVsX2NydGNfZnVuY3MsCi0KLQkub3V0cHV0X2lu aXQgPSBtZGZsZF9vdXRwdXRfaW5pdCwKLQotI2lmZGVmIENPTkZJR19CQUNLTElHSFRfQ0xBU1Nf REVWSUNFCi0JLmJhY2tsaWdodF9pbml0ID0gbWRmbGRfYmFja2xpZ2h0X2luaXQsCi0jZW5kaWYK LQotCS5zYXZlX3JlZ3MgPSBtZGZsZF9zYXZlX3JlZ2lzdGVycywKLQkucmVzdG9yZV9yZWdzID0g bWRmbGRfcmVzdG9yZV9yZWdpc3RlcnMsCi0JLnNhdmVfY3J0YyA9IGdtYV9jcnRjX3NhdmUsCi0J LnJlc3RvcmVfY3J0YyA9IGdtYV9jcnRjX3Jlc3RvcmUsCi0JLnBvd2VyX2Rvd24gPSBtZGZsZF9w b3dlcl9kb3duLAotCS5wb3dlcl91cCA9IG1kZmxkX3Bvd2VyX3VwLAotfTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNpX2RwaS5jIGIvZHJpdmVycy9ncHUvZHJt L2dtYTUwMC9tZGZsZF9kc2lfZHBpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRj NWEyZjczNDhjNS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRm bGRfZHNpX2RwaS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAxNyArMCwwIEBACi0vKgotICogQ29w eXJpZ2h0IMKpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQot ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqIGppbSBsaXUgPGppbS5s aXVAaW50ZWwuY29tPgotICogSmFja2llIExpPHlhb2RvbmcubGlAaW50ZWwuY29tPgotICovCi0K LSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jaW5jbHVkZSA8ZHJtL2RybV9zaW1wbGVfa21z X2hlbHBlci5oPgotCi0jaW5jbHVkZSAibWRmbGRfZHNpX2RwaS5oIgotI2luY2x1ZGUgIm1kZmxk X2RzaV9wa2dfc2VuZGVyLmgiCi0jaW5jbHVkZSAibWRmbGRfb3V0cHV0LmgiCi0jaW5jbHVkZSAi cHNiX2Rydi5oIgotI2luY2x1ZGUgInRjMzU4NzZ4LWRzaS1sdmRzLmgiCi0KLXN0YXRpYyB2b2lk IG1kZmxkX2RzaV9kcGlfc2h1dF9kb3duKHN0cnVjdCBtZGZsZF9kc2lfZHBpX291dHB1dCAqb3V0 cHV0LAotCQkJCQkJCQlpbnQgcGlwZSk7Ci0KLXN0YXRpYyB2b2lkIG1kZmxkX3dhaXRfZm9yX0hT X0RBVEFfRklGTyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgcGlwZSkKLXsKLQl1MzIgZ2Vu X2ZpZm9fc3RhdF9yZWcgPSBNSVBJX0dFTl9GSUZPX1NUQVRfUkVHKHBpcGUpOwotCWludCB0aW1l b3V0ID0gMDsKLQotCXVkZWxheSg1MDApOwotCi0JLyogVGhpcyB3aWxsIHRpbWUgb3V0IGFmdGVy IGFwcHJveGltYXRlbHkgMisgc2Vjb25kcyAqLwotCXdoaWxlICgodGltZW91dCA8IDIwMDAwKSAm JgotCQkoUkVHX1JFQUQoZ2VuX2ZpZm9fc3RhdF9yZWcpICYgRFNJX0ZJRk9fR0VOX0hTX0RBVEFf RlVMTCkpIHsKLQkJdWRlbGF5KDEwMCk7Ci0JCXRpbWVvdXQrKzsKLQl9Ci0KLQlpZiAodGltZW91 dCA9PSAyMDAwMCkKLQkJRFJNX0lORk8oIk1JUEk6IEhTIERhdGEgRklGTyB3YXMgbmV2ZXIgY2xl YXJlZCFcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBtZGZsZF93YWl0X2Zvcl9IU19DVFJMX0ZJRk8o c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHBpcGUpCi17Ci0JdTMyIGdlbl9maWZvX3N0YXRf cmVnID0gTUlQSV9HRU5fRklGT19TVEFUX1JFRyhwaXBlKTsKLQlpbnQgdGltZW91dCA9IDA7Ci0K LQl1ZGVsYXkoNTAwKTsKLQotCS8qIFRoaXMgd2lsbCB0aW1lIG91dCBhZnRlciBhcHByb3hpbWF0 ZWx5IDIrIHNlY29uZHMgKi8KLQl3aGlsZSAoKHRpbWVvdXQgPCAyMDAwMCkgJiYgKFJFR19SRUFE KGdlbl9maWZvX3N0YXRfcmVnKQotCQkJCQkmIERTSV9GSUZPX0dFTl9IU19DVFJMX0ZVTEwpKSB7 Ci0JCXVkZWxheSgxMDApOwotCQl0aW1lb3V0Kys7Ci0JfQotCWlmICh0aW1lb3V0ID09IDIwMDAw KQotCQlEUk1fSU5GTygiTUlQSTogSFMgQ01EIEZJRk8gd2FzIG5ldmVyIGNsZWFyZWQhXG4iKTsK LX0KLQotc3RhdGljIHZvaWQgbWRmbGRfd2FpdF9mb3JfRFBJX0NUUkxfRklGTyhzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB1MzIgcGlwZSkKLXsKLQl1MzIgZ2VuX2ZpZm9fc3RhdF9yZWcgPSBNSVBJ X0dFTl9GSUZPX1NUQVRfUkVHKHBpcGUpOwotCWludCB0aW1lb3V0ID0gMDsKLQotCXVkZWxheSg1 MDApOwotCi0JLyogVGhpcyB3aWxsIHRpbWUgb3V0IGFmdGVyIGFwcHJveGltYXRlbHkgMisgc2Vj b25kcyAqLwotCXdoaWxlICgodGltZW91dCA8IDIwMDAwKSAmJiAoKFJFR19SRUFEKGdlbl9maWZv X3N0YXRfcmVnKSAmCi0JCQkJCURQSV9GSUZPX0VNUFRZKSAhPSBEUElfRklGT19FTVBUWSkpIHsK LQkJdWRlbGF5KDEwMCk7Ci0JCXRpbWVvdXQrKzsKLQl9Ci0KLQlpZiAodGltZW91dCA9PSAyMDAw MCkKLQkJRFJNX0VSUk9SKCJNSVBJOiBEUEkgRklGTyB3YXMgbmV2ZXIgY2xlYXJlZFxuIik7Ci19 Ci0KLXN0YXRpYyB2b2lkIG1kZmxkX3dhaXRfZm9yX1NQTF9QS0dfU0VOVChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB1MzIgcGlwZSkKLXsKLQl1MzIgaW50cl9zdGF0X3JlZyA9IE1JUElfSU5UUl9T VEFUX1JFRyhwaXBlKTsKLQlpbnQgdGltZW91dCA9IDA7Ci0KLQl1ZGVsYXkoNTAwKTsKLQotCS8q IFRoaXMgd2lsbCB0aW1lIG91dCBhZnRlciBhcHByb3hpbWF0ZWx5IDIrIHNlY29uZHMgKi8KLQl3 aGlsZSAoKHRpbWVvdXQgPCAyMDAwMCkgJiYgKCEoUkVHX1JFQUQoaW50cl9zdGF0X3JlZykKLQkJ CQkJJiBEU0lfSU5UUl9TVEFURV9TUExfUEtHX1NFTlQpKSkgewotCQl1ZGVsYXkoMTAwKTsKLQkJ dGltZW91dCsrOwotCX0KLQotCWlmICh0aW1lb3V0ID09IDIwMDAwKQotICAgICAgICAgICAgICAg IERSTV9FUlJPUigiTUlQSTogU1BMX1BLVF9TRU5UX0lOVEVSUlVQVCB3YXMgbm90IHNlbnQgc3Vj Y2Vzc2Z1bGx5IVxuIik7Ci19Ci0KLS8qIEZvciBUQzM1ODc2WCAqLwotCi1zdGF0aWMgdm9pZCBk c2lfc2V0X2RldmljZV9yZWFkeV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgc3Rh dGUsCi0JCQkJaW50IHBpcGUpCi17Ci0JUkVHX0ZMRF9NT0QoTUlQSV9ERVZJQ0VfUkVBRFlfUkVH KHBpcGUpLCAhIXN0YXRlLCAwLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgZHNpX3NldF9waXBlX3Bs YW5lX2VuYWJsZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCQkJCWludCBzdGF0 ZSwgaW50IHBpcGUpCi17Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYt PmRldl9wcml2YXRlOwotCXUzMiBwaXBlY29uZl9yZWcgPSBQSVBFQUNPTkY7Ci0JdTMyIGRzcGNu dHJfcmVnID0gRFNQQUNOVFI7Ci0KLQl1MzIgZHNwY250ciA9IGRldl9wcml2LT5kc3BjbnRyW3Bp cGVdOwotCXUzMiBtaXBpID0gTUlQSV9QT1JUX0VOIHwgUEFTU19GUk9NX1NQSFlfVE9fQUZFIHwg U0VMX0ZMT1BQRURfSFNUWDsKLQotCWlmIChwaXBlKSB7Ci0JCXBpcGVjb25mX3JlZyA9IFBJUEVD Q09ORjsKLQkJZHNwY250cl9yZWcgPSBEU1BDQ05UUjsKLQl9IGVsc2UKLQkJbWlwaSAmPSAofjB4 MDMpOwotCi0JaWYgKHN0YXRlKSB7Ci0JCS8qU2V0IHVwIHBpcGUgKi8KLQkJUkVHX1dSSVRFKHBp cGVjb25mX3JlZywgQklUKDMxKSk7Ci0KLQkJaWYgKFJFR19CSVRfV0FJVChwaXBlY29uZl9yZWcs IDEsIDMwKSkKLQkJCWRldl9lcnIoZGV2LT5kZXYsICIlczogUGlwZSBlbmFibGUgdGltZW91dFxu IiwKLQkJCQlfX2Z1bmNfXyk7Ci0KLQkJLypTZXQgdXAgZGlzcGxheSBwbGFuZSAqLwotCQlSRUdf V1JJVEUoZHNwY250cl9yZWcsIGRzcGNudHIpOwotCX0gZWxzZSB7Ci0JCXUzMiBkc3BiYXNlX3Jl ZyA9IHBpcGUgPyBNREZMRF9EU1BDQkFTRSA6IE1SU1RfRFNQQUJBU0U7Ci0KLQkJLyogUHV0IERT SSBsYW5lcyB0byBVTFBTIHRvIGRpc2FibGUgcGlwZSAqLwotCQlSRUdfRkxEX01PRChNSVBJX0RF VklDRV9SRUFEWV9SRUcocGlwZSksIDIsIDIsIDEpOwotCQlSRUdfUkVBRChNSVBJX0RFVklDRV9S RUFEWV9SRUcocGlwZSkpOyAvKiBwb3N0ZWQgd3JpdGU/ICovCi0KLQkJLyogTFAgSG9sZCAqLwot CQlSRUdfRkxEX01PRChNSVBJX1BPUlRfQ09OVFJPTChwaXBlKSwgMCwgMTYsIDE2KTsKLQkJUkVH X1JFQUQoTUlQSV9QT1JUX0NPTlRST0wocGlwZSkpOyAvKiBwb3N0ZWQgd3JpdGU/ICovCi0KLQkJ LyogRGlzYWJsZSBkaXNwbGF5IHBsYW5lICovCi0JCVJFR19GTERfTU9EKGRzcGNudHJfcmVnLCAw LCAzMSwgMzEpOwotCi0JCS8qIEZsdXNoIHRoZSBwbGFuZSBjaGFuZ2VzID8/PyBwb3N0ZWQgd3Jp dGU/ICovCi0JCVJFR19XUklURShkc3BiYXNlX3JlZywgUkVHX1JFQUQoZHNwYmFzZV9yZWcpKTsK LQkJUkVHX1JFQUQoZHNwYmFzZV9yZWcpOwotCi0JCS8qIERpc2FibGUgUElQRSAqLwotCQlSRUdf RkxEX01PRChwaXBlY29uZl9yZWcsIDAsIDMxLCAzMSk7Ci0KLQkJaWYgKFJFR19CSVRfV0FJVChw aXBlY29uZl9yZWcsIDAsIDMwKSkKLQkJCWRldl9lcnIoZGV2LT5kZXYsICIlczogUGlwZSBkaXNh YmxlIHRpbWVvdXRcbiIsCi0JCQkJX19mdW5jX18pOwotCi0JCWlmIChSRUdfQklUX1dBSVQoTUlQ SV9HRU5fRklGT19TVEFUX1JFRyhwaXBlKSwgMSwgMjgpKQotCQkJZGV2X2VycihkZXYtPmRldiwg IiVzOiBGSUZPIG5vdCBlbXB0eVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JfQotfQotCi1zdGF0aWMg dm9pZCBtZGZsZF9kc2lfY29uZmlndXJlX2Rvd24oc3RydWN0IG1kZmxkX2RzaV9lbmNvZGVyICpk c2lfZW5jb2RlciwKLQkJCQkJCQkJaW50IHBpcGUpCi17Ci0Jc3RydWN0IG1kZmxkX2RzaV9kcGlf b3V0cHV0ICpkcGlfb3V0cHV0ID0KLQkJCQlNREZMRF9EU0lfRFBJX09VVFBVVChkc2lfZW5jb2Rl cik7Ci0Jc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWcgPQotCQkJCW1kZmxkX2Rz aV9lbmNvZGVyX2dldF9jb25maWcoZHNpX2VuY29kZXIpOwotCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBkc2lfY29uZmlnLT5kZXY7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKCFkZXZfcHJpdi0+ZHBpX3BhbmVsX29uW3BpcGVd KSB7Ci0JCWRldl9lcnIoZGV2LT5kZXYsICJEUEkgcGFuZWwgaXMgYWxyZWFkeSBvZmZcbiIpOwot CQlyZXR1cm47Ci0JfQotCXRjMzU4NzZ4X3Rvc2hpYmFfYnJpZGdlX3BhbmVsX29mZihkZXYpOwot CXRjMzU4NzZ4X3NldF9icmlkZ2VfcmVzZXRfc3RhdGUoZGV2LCAxKTsKLQlkc2lfc2V0X3BpcGVf cGxhbmVfZW5hYmxlX3N0YXRlKGRldiwgMCwgcGlwZSk7Ci0JbWRmbGRfZHNpX2RwaV9zaHV0X2Rv d24oZHBpX291dHB1dCwgcGlwZSk7Ci0JZHNpX3NldF9kZXZpY2VfcmVhZHlfc3RhdGUoZGV2LCAw LCBwaXBlKTsKLX0KLQotc3RhdGljIHZvaWQgbWRmbGRfZHNpX2NvbmZpZ3VyZV91cChzdHJ1Y3Qg bWRmbGRfZHNpX2VuY29kZXIgKmRzaV9lbmNvZGVyLAotCQkJCQkJCQlpbnQgcGlwZSkKLXsKLQlz dHJ1Y3QgbWRmbGRfZHNpX2RwaV9vdXRwdXQgKmRwaV9vdXRwdXQgPQotCQkJCU1ERkxEX0RTSV9E UElfT1VUUFVUKGRzaV9lbmNvZGVyKTsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2Nv bmZpZyA9Ci0JCQkJbWRmbGRfZHNpX2VuY29kZXJfZ2V0X2NvbmZpZyhkc2lfZW5jb2Rlcik7Ci0J c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRzaV9jb25maWctPmRldjsKLQlzdHJ1Y3QgZHJtX3Bz Yl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlpZiAoZGV2X3ByaXYt PmRwaV9wYW5lbF9vbltwaXBlXSkgewotCQlkZXZfZXJyKGRldi0+ZGV2LCAiRFBJIHBhbmVsIGlz IGFscmVhZHkgb25cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogRm9yIHJlc3VtZSBwYXRoIHNl cXVlbmNlICovCi0JbWRmbGRfZHNpX2RwaV9zaHV0X2Rvd24oZHBpX291dHB1dCwgcGlwZSk7Ci0J ZHNpX3NldF9kZXZpY2VfcmVhZHlfc3RhdGUoZGV2LCAwLCBwaXBlKTsKLQotCWRzaV9zZXRfZGV2 aWNlX3JlYWR5X3N0YXRlKGRldiwgMSwgcGlwZSk7Ci0JdGMzNTg3Nnhfc2V0X2JyaWRnZV9yZXNl dF9zdGF0ZShkZXYsIDApOwotCXRjMzU4NzZ4X2NvbmZpZ3VyZV9sdmRzX2JyaWRnZShkZXYpOwot CW1kZmxkX2RzaV9kcGlfdHVybl9vbihkcGlfb3V0cHV0LCBwaXBlKTsgIC8qIFNlbmQgdHVybiBv biBjb21tYW5kICovCi0JZHNpX3NldF9waXBlX3BsYW5lX2VuYWJsZV9zdGF0ZShkZXYsIDEsIHBp cGUpOwotfQotLyogRW5kIGZvciBUQzM1ODc2WCAqLwotCi0vKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICpc Ci0gKiBGVU5DVElPTjogbWRmbGRfZHNpX3Rwb19pY19pbml0Ci0gKgotICogREVTQ1JJUFRJT046 ICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGJ5IG1yc3RfZHNpX21vZGVfc2V0IGFuZAot ICogICAgICAgICAgICAgICByZXN0b3JlX2Rpc3BsYXlfcmVnaXN0ZXJzLiAgc2luY2UgdGhpcyBm dW5jdGlvbiBkb2VzIG5vdAotICogICAgICAgICAgICAgICBhY3F1aXJlIHRoZSBtdXRleCwgaXQg aXMgaW1wb3J0YW50IHRoYXQgdGhlIGNhbGxpbmcgZnVuY3Rpb24KLSAqICAgICAgICAgICAgICAg ZG9lcyEKLVwqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLXN0YXRpYyB2b2lkIG1kZmxkX2RzaV90cG9f aWNfaW5pdChzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywgdTMyIHBpcGUpCi17 Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRzaV9jb25maWctPmRldjsKLQl1MzIgZGNzQ2hh bm5lbE51bWJlciA9IGRzaV9jb25maWctPmNoYW5uZWxfbnVtOwotCXUzMiBnZW5fZGF0YV9yZWcg PSBNSVBJX0hTX0dFTl9EQVRBX1JFRyhwaXBlKTsKLQl1MzIgZ2VuX2N0cmxfcmVnID0gTUlQSV9I U19HRU5fQ1RSTF9SRUcocGlwZSk7Ci0JdTMyIGdlbl9jdHJsX3ZhbCA9IEdFTl9MT05HX1dSSVRF OwotCi0JRFJNX0lORk8oIkVudGVyIG1yc3QgaW5pdCBUUE8gTUlQSSBkaXNwbGF5LlxuIik7Ci0K LQlnZW5fY3RybF92YWwgfD0gZGNzQ2hhbm5lbE51bWJlciA8PCBEQ1NfQ0hBTk5FTF9OVU1CRVJf UE9TOwotCi0JLyogRmxpcCBwYWdlIG9yZGVyICovCi0JbWRmbGRfd2FpdF9mb3JfSFNfREFUQV9G SUZPKGRldiwgcGlwZSk7Ci0JUkVHX1dSSVRFKGdlbl9kYXRhX3JlZywgMHgwMDAwODAzNik7Ci0J bWRmbGRfd2FpdF9mb3JfSFNfQ1RSTF9GSUZPKGRldiwgcGlwZSk7Ci0JUkVHX1dSSVRFKGdlbl9j dHJsX3JlZywgZ2VuX2N0cmxfdmFsIHwgKDB4MDIgPDwgV09SRF9DT1VOVFNfUE9TKSk7Ci0KLQkv KiAweEYwICovCi0JbWRmbGRfd2FpdF9mb3JfSFNfREFUQV9GSUZPKGRldiwgcGlwZSk7Ci0JUkVH X1dSSVRFKGdlbl9kYXRhX3JlZywgMHgwMDVhNWFmMCk7Ci0JbWRmbGRfd2FpdF9mb3JfSFNfQ1RS TF9GSUZPKGRldiwgcGlwZSk7Ci0JUkVHX1dSSVRFKGdlbl9jdHJsX3JlZywgZ2VuX2N0cmxfdmFs IHwgKDB4MDMgPDwgV09SRF9DT1VOVFNfUE9TKSk7Ci0KLQkvKiBXcml0ZSBwcm90ZWN0aW9uIGtl eSAqLwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklU RShnZW5fZGF0YV9yZWcsIDB4MDA1YTVhZjEpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0NUUkxfRklG TyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fY3RybF9yZWcsIGdlbl9jdHJsX3ZhbCB8ICgw eDAzIDw8IFdPUkRfQ09VTlRTX1BPUykpOwotCi0JLyogMHhGQyAqLwotCW1kZmxkX3dhaXRfZm9y X0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MDA1 YTVhZmMpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0NUUkxfRklGTyhkZXYsIHBpcGUpOwotCVJFR19X UklURShnZW5fY3RybF9yZWcsIGdlbl9jdHJsX3ZhbCB8ICgweDAzIDw8IFdPUkRfQ09VTlRTX1BP UykpOwotCi0JLyogMHhCNyAqLwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBp cGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4NzcwMDAwYjcpOwotCW1kZmxkX3dhaXRf Zm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4 MDAwMDAwNDQpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0NUUkxfRklGTyhkZXYsIHBpcGUpOwotCVJF R19XUklURShnZW5fY3RybF9yZWcsIGdlbl9jdHJsX3ZhbCB8ICgweDA1IDw8IFdPUkRfQ09VTlRT X1BPUykpOwotCi0JLyogMHhCNiAqLwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYs IHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MDAwYTBhYjYpOwotCW1kZmxkX3dh aXRfZm9yX0hTX0NUUkxfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fY3RybF9yZWcs IGdlbl9jdHJsX3ZhbCB8ICgweDAzIDw8IFdPUkRfQ09VTlRTX1BPUykpOwotCi0JLyogMHhGMiAq LwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShn ZW5fZGF0YV9yZWcsIDB4MDgxMDEwZjIpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhk ZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4NGEwNzA3MDgpOwotCW1kZmxk X3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9y ZWcsIDB4MDAwMDAwYzUpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0NUUkxfRklGTyhkZXYsIHBpcGUp OwotCVJFR19XUklURShnZW5fY3RybF9yZWcsIGdlbl9jdHJsX3ZhbCB8ICgweDA5IDw8IFdPUkRf Q09VTlRTX1BPUykpOwotCi0JLyogMHhGOCAqLwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklG TyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MDI0MDAzZjgpOwotCW1k ZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0 YV9yZWcsIDB4MDEwMzBhMDQpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBp cGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MGUwMjAyMjApOwotCW1kZmxkX3dhaXRf Zm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4 MDAwMDAwMDQpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0NUUkxfRklGTyhkZXYsIHBpcGUpOwotCVJF R19XUklURShnZW5fY3RybF9yZWcsIGdlbl9jdHJsX3ZhbCB8ICgweDBkIDw8IFdPUkRfQ09VTlRT X1BPUykpOwotCi0JLyogMHhFMiAqLwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYs IHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4Mzk4ZmMzZTIpOwotCW1kZmxkX3dh aXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcs IDB4MDAwMDkxNmYpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0NUUkxfRklGTyhkZXYsIHBpcGUpOwot CVJFR19XUklURShnZW5fY3RybF9yZWcsIGdlbl9jdHJsX3ZhbCB8ICgweDA2IDw8IFdPUkRfQ09V TlRTX1BPUykpOwotCi0JLyogMHhCMCAqLwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhk ZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MDAwMDAwYjApOwotCW1kZmxk X3dhaXRfZm9yX0hTX0NUUkxfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fY3RybF9y ZWcsIGdlbl9jdHJsX3ZhbCB8ICgweDAyIDw8IFdPUkRfQ09VTlRTX1BPUykpOwotCi0JLyogMHhG NCAqLwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklU RShnZW5fZGF0YV9yZWcsIDB4MjQwMjQyZjQpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklG TyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4NzhlZTIwMDIpOwotCW1k ZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0 YV9yZWcsIDB4MmEwNzEwNTApOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBp cGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4NTA3ZmVlMTApOwotCW1kZmxkX3dhaXRf Zm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4 MTAzMDA3MTApOwotCW1kZmxkX3dhaXRfZm9yX0hTX0NUUkxfRklGTyhkZXYsIHBpcGUpOwotCVJF R19XUklURShnZW5fY3RybF9yZWcsIGdlbl9jdHJsX3ZhbCB8ICgweDE0IDw8IFdPUkRfQ09VTlRT X1BPUykpOwotCi0JLyogMHhCQSAqLwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYs IHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MTlmZTA3YmEpOwotCW1kZmxkX3dh aXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcs IDB4MTAxYzBhMzEpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwot CVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MDAwMDAwMTApOwotCW1kZmxkX3dhaXRfZm9yX0hT X0NUUkxfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fY3RybF9yZWcsIGdlbl9jdHJs X3ZhbCB8ICgweDA5IDw8IFdPUkRfQ09VTlRTX1BPUykpOwotCi0JLyogMHhCQiAqLwotCW1kZmxk X3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9y ZWcsIDB4MjhmZjA3YmIpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUp OwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MjQyODBhMzEpOwotCW1kZmxkX3dhaXRfZm9y X0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MDAw MDAwMzQpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0NUUkxfRklGTyhkZXYsIHBpcGUpOwotCVJFR19X UklURShnZW5fY3RybF9yZWcsIGdlbl9jdHJsX3ZhbCB8ICgweDA5IDw8IFdPUkRfQ09VTlRTX1BP UykpOwotCi0JLyogMHhGQiAqLwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBp cGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4NTM1ZDA1ZmIpOwotCW1kZmxkX3dhaXRf Zm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4 MWIxYTIxMzApOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJF R19XUklURShnZW5fZGF0YV9yZWcsIDB4MjIxZTE4MGUpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RB VEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MTMxZDIxMjAp OwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShn ZW5fZGF0YV9yZWcsIDB4NTM1ZDA1MDgpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhk ZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MWMxYTIxMzEpOwotCW1kZmxk X3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9y ZWcsIDB4MjMxZjE2MGQpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUp OwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MTExYjIyMjApOwotCW1kZmxkX3dhaXRfZm9y X0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4NTM1 YzIwMDgpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19X UklURShnZW5fZGF0YV9yZWcsIDB4MWYxZDI0MzMpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFf RklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MmMyNTFhMTApOwot CW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5f ZGF0YV9yZWcsIDB4MmMzNDM3MmQpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYs IHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MDAwMDAwMjMpOwotCW1kZmxkX3dh aXRfZm9yX0hTX0NUUkxfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fY3RybF9yZWcs IGdlbl9jdHJsX3ZhbCB8ICgweDMxIDw8IFdPUkRfQ09VTlRTX1BPUykpOwotCi0JLyogMHhGQSAq LwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShn ZW5fZGF0YV9yZWcsIDB4NTI1YzBiZmEpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhk ZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MWMxYzIzMmYpOwotCW1kZmxk X3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9y ZWcsIDB4MjYyMzE5MGUpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUp OwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MTgyMTI2MjUpOwotCW1kZmxkX3dhaXRfZm9y X0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4NTQ1 ZDBkMGUpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19X UklURShnZW5fZGF0YV9yZWcsIDB4MWUxZDIzMzMpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFf RklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MjYyMzFhMTApOwot CW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5f ZGF0YV9yZWcsIDB4MWEyMjI3MjUpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYs IHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4NTQ1ZDI4MGYpOwotCW1kZmxkX3dh aXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcs IDB4MjEyMDI2MzUpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwot CVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MzEyOTIwMTMpOwotCW1kZmxkX3dhaXRfZm9yX0hT X0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fZGF0YV9yZWcsIDB4MzEzOTNk MzMpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0RBVEFfRklGTyhkZXYsIHBpcGUpOwotCVJFR19XUklU RShnZW5fZGF0YV9yZWcsIDB4MDAwMDAwMjkpOwotCW1kZmxkX3dhaXRfZm9yX0hTX0NUUkxfRklG TyhkZXYsIHBpcGUpOwotCVJFR19XUklURShnZW5fY3RybF9yZWcsIGdlbl9jdHJsX3ZhbCB8ICgw eDMxIDw8IFdPUkRfQ09VTlRTX1BPUykpOwotCi0JLyogU2V0IERNICovCi0JbWRmbGRfd2FpdF9m b3JfSFNfREFUQV9GSUZPKGRldiwgcGlwZSk7Ci0JUkVHX1dSSVRFKGdlbl9kYXRhX3JlZywgMHgw MDAxMDBmNyk7Ci0JbWRmbGRfd2FpdF9mb3JfSFNfQ1RSTF9GSUZPKGRldiwgcGlwZSk7Ci0JUkVH X1dSSVRFKGdlbl9jdHJsX3JlZywgZ2VuX2N0cmxfdmFsIHwgKDB4MDMgPDwgV09SRF9DT1VOVFNf UE9TKSk7Ci19Ci0KLXN0YXRpYyB1MTYgbWRmbGRfZHNpX2RwaV90b19ieXRlX2Nsb2NrX2NvdW50 KGludCBwaXhlbF9jbG9ja19jb3VudCwKLQkJCQkJCWludCBudW1fbGFuZSwgaW50IGJwcCkKLXsK LQlyZXR1cm4gKHUxNikoKHBpeGVsX2Nsb2NrX2NvdW50ICogYnBwKSAvIChudW1fbGFuZSAqIDgp KTsKLX0KLQotLyoKLSAqIENhbGN1bGF0ZSB0aGUgZHBpIHRpbWUgYmFzaW5nIG9uIGEgZ2l2ZW4g ZHJtIG1vZGUgQG1vZGUKLSAqIHJldHVybiAwIG9uIHN1Y2Nlc3MuCi0gKiBGSVhNRTogSSB3YXMg dXNpbmcgcHJvcG9zZWQgbW9kZSB2YWx1ZSBmb3IgY2FsY3VsYXRpb24sIG1heSBuZWVkIHRvCi0g KiB1c2UgY3J0YyBtb2RlIHZhbHVlcyBsYXRlcgotICovCi1pbnQgbWRmbGRfZHNpX2RwaV90aW1p bmdfY2FsY3VsYXRpb24oc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkJc3RydWN0 IG1kZmxkX2RzaV9kcGlfdGltaW5nICpkcGlfdGltaW5nLAotCQkJCWludCBudW1fbGFuZSwgaW50 IGJwcCkKLXsKLQlpbnQgcGNsa19oc3luYywgcGNsa19oZnAsIHBjbGtfaGJwLCBwY2xrX2hhY3Rp dmU7Ci0JaW50IHBjbGtfdnN5bmMsIHBjbGtfdmZwLCBwY2xrX3ZicDsKLQotCXBjbGtfaGFjdGl2 ZSA9IG1vZGUtPmhkaXNwbGF5OwotCXBjbGtfaGZwID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2Rl LT5oZGlzcGxheTsKLQlwY2xrX2hzeW5jID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNf c3RhcnQ7Ci0JcGNsa19oYnAgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19lbmQ7Ci0KLQlw Y2xrX3ZmcCA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXk7Ci0JcGNsa192c3lu YyA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0OwotCXBjbGtfdmJwID0gbW9k ZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfZW5kOwotCi0JLyoKLQkgKiBieXRlIGNsb2NrIGNvdW50 cyB3ZXJlIGNhbGN1bGF0ZWQgYnkgZm9sbG93aW5nIGZvcm11bGEKLQkgKiBiY2xvY2tfY291bnQg PSBwY2xrX2NvdW50ICogYnBwIC8gbnVtX2xhbmUgLyA4Ci0JICovCi0JZHBpX3RpbWluZy0+aHN5 bmNfY291bnQgPSBtZGZsZF9kc2lfZHBpX3RvX2J5dGVfY2xvY2tfY291bnQoCi0JCQkJCQlwY2xr X2hzeW5jLCBudW1fbGFuZSwgYnBwKTsKLQlkcGlfdGltaW5nLT5oYnBfY291bnQgPSBtZGZsZF9k c2lfZHBpX3RvX2J5dGVfY2xvY2tfY291bnQoCi0JCQkJCQlwY2xrX2hicCwgbnVtX2xhbmUsIGJw cCk7Ci0JZHBpX3RpbWluZy0+aGZwX2NvdW50ID0gbWRmbGRfZHNpX2RwaV90b19ieXRlX2Nsb2Nr X2NvdW50KAotCQkJCQkJcGNsa19oZnAsIG51bV9sYW5lLCBicHApOwotCWRwaV90aW1pbmctPmhh Y3RpdmVfY291bnQgPSBtZGZsZF9kc2lfZHBpX3RvX2J5dGVfY2xvY2tfY291bnQoCi0JCQkJCQlw Y2xrX2hhY3RpdmUsIG51bV9sYW5lLCBicHApOwotCWRwaV90aW1pbmctPnZzeW5jX2NvdW50ID0g bWRmbGRfZHNpX2RwaV90b19ieXRlX2Nsb2NrX2NvdW50KAotCQkJCQkJcGNsa192c3luYywgbnVt X2xhbmUsIGJwcCk7Ci0JZHBpX3RpbWluZy0+dmJwX2NvdW50ID0gbWRmbGRfZHNpX2RwaV90b19i eXRlX2Nsb2NrX2NvdW50KAotCQkJCQkJcGNsa192YnAsIG51bV9sYW5lLCBicHApOwotCWRwaV90 aW1pbmctPnZmcF9jb3VudCA9IG1kZmxkX2RzaV9kcGlfdG9fYnl0ZV9jbG9ja19jb3VudCgKLQkJ CQkJCXBjbGtfdmZwLCBudW1fbGFuZSwgYnBwKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIG1k ZmxkX2RzaV9kcGlfY29udHJvbGxlcl9pbml0KHN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lf Y29uZmlnLAotCQkJCQkJCQlpbnQgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g ZHNpX2NvbmZpZy0+ZGV2OwotCWludCBsYW5lX2NvdW50ID0gZHNpX2NvbmZpZy0+bGFuZV9jb3Vu dDsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2RwaV90aW1pbmcgZHBpX3RpbWluZzsKLQlzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGRzaV9jb25maWctPm1vZGU7Ci0JdTMyIHZhbDsKLQotCS8q dW4tcmVhZHkgZGV2aWNlKi8KLQlSRUdfRkxEX01PRChNSVBJX0RFVklDRV9SRUFEWV9SRUcocGlw ZSksIDAsIDAsIDApOwotCi0JLyppbml0IGRzaSBhZGFwdGVyIGJlZm9yZSBraWNraW5nIG9mZiov Ci0JUkVHX1dSSVRFKE1JUElfQ1RSTF9SRUcocGlwZSksIDB4MDAwMDAwMTgpOwotCi0JLyplbmFi bGUgYWxsIGludGVycnVwdHMqLwotCVJFR19XUklURShNSVBJX0lOVFJfRU5fUkVHKHBpcGUpLCAw eGZmZmZmZmZmKTsKLQotCS8qc2V0IHVwIGZ1bmNfcHJnKi8KLQl2YWwgPSBsYW5lX2NvdW50Owot CXZhbCB8PSBkc2lfY29uZmlnLT5jaGFubmVsX251bSA8PCBEU0lfRFBJX1ZJUlRfQ0hBTk5FTF9P RkZTRVQ7Ci0KLQlzd2l0Y2ggKGRzaV9jb25maWctPmJwcCkgewotCWNhc2UgMTY6Ci0JCXZhbCB8 PSBEU0lfRFBJX0NPTE9SX0ZPUk1BVF9SR0I1NjU7Ci0JCWJyZWFrOwotCWNhc2UgMTg6Ci0JCXZh bCB8PSBEU0lfRFBJX0NPTE9SX0ZPUk1BVF9SR0I2NjY7Ci0JCWJyZWFrOwotCWNhc2UgMjQ6Ci0J CXZhbCB8PSBEU0lfRFBJX0NPTE9SX0ZPUk1BVF9SR0I4ODg7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6 Ci0JCURSTV9FUlJPUigidW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0LCBicHAgPSAlZFxuIiwKLQkJ CQkJCQlkc2lfY29uZmlnLT5icHApOwotCX0KLQlSRUdfV1JJVEUoTUlQSV9EU0lfRlVOQ19QUkdf UkVHKHBpcGUpLCB2YWwpOwotCi0JUkVHX1dSSVRFKE1JUElfSFNfVFhfVElNRU9VVF9SRUcocGlw ZSksCi0JCQkobW9kZS0+dnRvdGFsICogbW9kZS0+aHRvdGFsICogZHNpX2NvbmZpZy0+YnBwIC8K LQkJCQkoOCAqIGxhbmVfY291bnQpKSAmIERTSV9IU19UWF9USU1FT1VUX01BU0spOwotCVJFR19X UklURShNSVBJX0xQX1JYX1RJTUVPVVRfUkVHKHBpcGUpLAotCQkJCTB4ZmZmZiAmIERTSV9MUF9S WF9USU1FT1VUX01BU0spOwotCi0JLyptYXggdmFsdWU6IDIwIGNsb2NrIGN5Y2xlcyBvZiB0eGNs a2VzYyovCi0JUkVHX1dSSVRFKE1JUElfVFVSTl9BUk9VTkRfVElNRU9VVF9SRUcocGlwZSksCi0J CQkJMHgxNCAmIERTSV9UVVJOX0FST1VORF9USU1FT1VUX01BU0spOwotCi0JLyptaW4gMjEgdHhj bGtlc2MsIG1heDogZmZmZmgqLwotCVJFR19XUklURShNSVBJX0RFVklDRV9SRVNFVF9USU1FUl9S RUcocGlwZSksCi0JCQkJMHhmZmZmICYgRFNJX1JFU0VUX1RJTUVSX01BU0spOwotCi0JUkVHX1dS SVRFKE1JUElfRFBJX1JFU09MVVRJT05fUkVHKHBpcGUpLAotCQkJCW1vZGUtPnZkaXNwbGF5IDw8 IDE2IHwgbW9kZS0+aGRpc3BsYXkpOwotCi0JLypzZXQgRFBJIHRpbWluZyByZWdpc3RlcnMqLwot CW1kZmxkX2RzaV9kcGlfdGltaW5nX2NhbGN1bGF0aW9uKG1vZGUsICZkcGlfdGltaW5nLAotCQkJ CWRzaV9jb25maWctPmxhbmVfY291bnQsIGRzaV9jb25maWctPmJwcCk7Ci0KLQlSRUdfV1JJVEUo TUlQSV9IU1lOQ19DT1VOVF9SRUcocGlwZSksCi0JCQlkcGlfdGltaW5nLmhzeW5jX2NvdW50ICYg RFNJX0RQSV9USU1JTkdfTUFTSyk7Ci0JUkVHX1dSSVRFKE1JUElfSEJQX0NPVU5UX1JFRyhwaXBl KSwKLQkJCWRwaV90aW1pbmcuaGJwX2NvdW50ICYgRFNJX0RQSV9USU1JTkdfTUFTSyk7Ci0JUkVH X1dSSVRFKE1JUElfSEZQX0NPVU5UX1JFRyhwaXBlKSwKLQkJCWRwaV90aW1pbmcuaGZwX2NvdW50 ICYgRFNJX0RQSV9USU1JTkdfTUFTSyk7Ci0JUkVHX1dSSVRFKE1JUElfSEFDVElWRV9DT1VOVF9S RUcocGlwZSksCi0JCQlkcGlfdGltaW5nLmhhY3RpdmVfY291bnQgJiBEU0lfRFBJX1RJTUlOR19N QVNLKTsKLQlSRUdfV1JJVEUoTUlQSV9WU1lOQ19DT1VOVF9SRUcocGlwZSksCi0JCQlkcGlfdGlt aW5nLnZzeW5jX2NvdW50ICYgRFNJX0RQSV9USU1JTkdfTUFTSyk7Ci0JUkVHX1dSSVRFKE1JUElf VkJQX0NPVU5UX1JFRyhwaXBlKSwKLQkJCWRwaV90aW1pbmcudmJwX2NvdW50ICYgRFNJX0RQSV9U SU1JTkdfTUFTSyk7Ci0JUkVHX1dSSVRFKE1JUElfVkZQX0NPVU5UX1JFRyhwaXBlKSwKLQkJCWRw aV90aW1pbmcudmZwX2NvdW50ICYgRFNJX0RQSV9USU1JTkdfTUFTSyk7Ci0KLQlSRUdfV1JJVEUo TUlQSV9ISUdIX0xPV19TV0lUQ0hfQ09VTlRfUkVHKHBpcGUpLCAweDQ2KTsKLQotCS8qbWluOiA3 ZDAgbWF4OiA0ZTIwKi8KLQlSRUdfV1JJVEUoTUlQSV9JTklUX0NPVU5UX1JFRyhwaXBlKSwgMHgw MDAwMDdkMCk7Ci0KLQkvKnNldCB1cCB2aWRlbyBtb2RlKi8KLQl2YWwgPSBkc2lfY29uZmlnLT52 aWRlb19tb2RlIHwgRFNJX0RQSV9DT01QTEVURV9MQVNUX0xJTkU7Ci0JUkVHX1dSSVRFKE1JUElf VklERU9fTU9ERV9GT1JNQVRfUkVHKHBpcGUpLCB2YWwpOwotCi0JUkVHX1dSSVRFKE1JUElfRU9U X0RJU0FCTEVfUkVHKHBpcGUpLCAweDAwMDAwMDAwKTsKLQotCVJFR19XUklURShNSVBJX0xQX0JZ VEVDTEtfUkVHKHBpcGUpLCAweDAwMDAwMDA0KTsKLQotCS8qVE9ETzogZmlndXJlIG91dCBob3cg dG8gc2V0dXAgdGhlc2UgcmVnaXN0ZXJzKi8KLQlpZiAobWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2 LCBwaXBlKSA9PSBUQzM1ODc2WCkKLQkJUkVHX1dSSVRFKE1JUElfRFBIWV9QQVJBTV9SRUcocGlw ZSksIDB4MkEwYzYwMDgpOwotCWVsc2UKLQkJUkVHX1dSSVRFKE1JUElfRFBIWV9QQVJBTV9SRUco cGlwZSksIDB4MTUwYzM0MDgpOwotCi0JUkVHX1dSSVRFKE1JUElfQ0xLX0xBTkVfU1dJVENIX1RJ TUVfQ05UX1JFRyhwaXBlKSwgKDB4YSA8PCAxNikgfCAweDE0KTsKLQotCWlmIChtZGZsZF9nZXRf cGFuZWxfdHlwZShkZXYsIHBpcGUpID09IFRDMzU4NzZYKQotCQl0YzM1ODc2eF9zZXRfYnJpZGdl X3Jlc2V0X3N0YXRlKGRldiwgMCk7ICAvKlB1bGwgSGlnaCBSZXNldCAqLwotCi0JLypzZXQgZGV2 aWNlIHJlYWR5Ki8KLQlSRUdfRkxEX01PRChNSVBJX0RFVklDRV9SRUFEWV9SRUcocGlwZSksIDEs IDAsIDApOwotfQotCi12b2lkIG1kZmxkX2RzaV9kcGlfdHVybl9vbihzdHJ1Y3QgbWRmbGRfZHNp X2RwaV9vdXRwdXQgKm91dHB1dCwgaW50IHBpcGUpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IG91dHB1dC0+ZGV2OwotCi0JLyogY2xlYXIgc3BlY2lhbCBwYWNrZXQgc2VudCBiaXQgKi8K LQlpZiAoUkVHX1JFQUQoTUlQSV9JTlRSX1NUQVRfUkVHKHBpcGUpKSAmIERTSV9JTlRSX1NUQVRF X1NQTF9QS0dfU0VOVCkKLQkJUkVHX1dSSVRFKE1JUElfSU5UUl9TVEFUX1JFRyhwaXBlKSwKLQkJ CQkJRFNJX0lOVFJfU1RBVEVfU1BMX1BLR19TRU5UKTsKLQotCS8qc2VuZCB0dXJuIG9uIHBhY2th Z2UqLwotCVJFR19XUklURShNSVBJX0RQSV9DT05UUk9MX1JFRyhwaXBlKSwgRFNJX0RQSV9DVFJM X0hTX1RVUk5fT04pOwotCi0JLyp3YWl0IGZvciBTUExfUEtHX1NFTlQgaW50ZXJydXB0Ki8KLQlt ZGZsZF93YWl0X2Zvcl9TUExfUEtHX1NFTlQoZGV2LCBwaXBlKTsKLQotCWlmIChSRUdfUkVBRChN SVBJX0lOVFJfU1RBVF9SRUcocGlwZSkpICYgRFNJX0lOVFJfU1RBVEVfU1BMX1BLR19TRU5UKQot CQlSRUdfV1JJVEUoTUlQSV9JTlRSX1NUQVRfUkVHKHBpcGUpLAotCQkJCQlEU0lfSU5UUl9TVEFU RV9TUExfUEtHX1NFTlQpOwotCi0Jb3V0cHV0LT5wYW5lbF9vbiA9IDE7Ci0KLQkvKiBGSVhNRSB0 aGUgZm9sbG93aW5nIGlzIGRpc2FibGVkIHRvIFdBIHRoZSBYIHNsb3cgc3RhcnQgaXNzdWUKLQkg ICBmb3IgVE1EIHBhbmVsCi0JaWYgKHBpcGUgPT0gMikKLQkJZGV2X3ByaXYtPmRwaV9wYW5lbF9v bjIgPSB0cnVlOwotCWVsc2UgaWYgKHBpcGUgPT0gMCkKLQkJZGV2X3ByaXYtPmRwaV9wYW5lbF9v biA9IHRydWU7ICovCi19Ci0KLXN0YXRpYyB2b2lkIG1kZmxkX2RzaV9kcGlfc2h1dF9kb3duKHN0 cnVjdCBtZGZsZF9kc2lfZHBpX291dHB1dCAqb3V0cHV0LAotCQkJCQkJCQlpbnQgcGlwZSkKLXsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb3V0cHV0LT5kZXY7Ci0KLQkvKmlmIG91dHB1dCBp cyBvbiwgb3IgbW9kZSBzZXR0aW5nIGRpZG4ndCBoYXBwZW4sIGlnbm9yZSB0aGlzKi8KLQlpZiAo KCFvdXRwdXQtPnBhbmVsX29uKSB8fCBvdXRwdXQtPmZpcnN0X2Jvb3QpIHsKLQkJb3V0cHV0LT5m aXJzdF9ib290ID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFdhaXQgZm9yIGRwaSBmaWZvIHRv IGVtcHR5ICovCi0JbWRmbGRfd2FpdF9mb3JfRFBJX0NUUkxfRklGTyhkZXYsIHBpcGUpOwotCi0J LyogQ2xlYXIgdGhlIHNwZWNpYWwgcGFja2V0IGludGVycnVwdCBiaXQgaWYgc2V0ICovCi0JaWYg KFJFR19SRUFEKE1JUElfSU5UUl9TVEFUX1JFRyhwaXBlKSkgJiBEU0lfSU5UUl9TVEFURV9TUExf UEtHX1NFTlQpCi0JCVJFR19XUklURShNSVBJX0lOVFJfU1RBVF9SRUcocGlwZSksCi0JCQkJCURT SV9JTlRSX1NUQVRFX1NQTF9QS0dfU0VOVCk7Ci0KLQlpZiAoUkVHX1JFQUQoTUlQSV9EUElfQ09O VFJPTF9SRUcocGlwZSkpID09IERTSV9EUElfQ1RSTF9IU19TSFVURE9XTikKLQkJZ290byBzaHV0 ZG93bl9vdXQ7Ci0KLQlSRUdfV1JJVEUoTUlQSV9EUElfQ09OVFJPTF9SRUcocGlwZSksIERTSV9E UElfQ1RSTF9IU19TSFVURE9XTik7Ci0KLXNodXRkb3duX291dDoKLQlvdXRwdXQtPnBhbmVsX29u ID0gMDsKLQlvdXRwdXQtPmZpcnN0X2Jvb3QgPSAwOwotCi0JLyogRklYTUUgdGhlIGZvbGxvd2lu ZyBpcyBkaXNhYmxlZCB0byBXQSB0aGUgWCBzbG93IHN0YXJ0IGlzc3VlCi0JICAgZm9yIFRNRCBw YW5lbAotCWlmIChwaXBlID09IDIpCi0JCWRldl9wcml2LT5kcGlfcGFuZWxfb24yID0gZmFsc2U7 Ci0JZWxzZSBpZiAocGlwZSA9PSAwKQotCQlkZXZfcHJpdi0+ZHBpX3BhbmVsX29uID0gZmFsc2U7 CSAqLwotfQotCi1zdGF0aWMgdm9pZCBtZGZsZF9kc2lfZHBpX3NldF9wb3dlcihzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXIsIGJvb2wgb24pCi17Ci0Jc3RydWN0IG1kZmxkX2RzaV9lbmNvZGVy ICpkc2lfZW5jb2RlciA9IG1kZmxkX2RzaV9lbmNvZGVyKGVuY29kZXIpOwotCXN0cnVjdCBtZGZs ZF9kc2lfZHBpX291dHB1dCAqZHBpX291dHB1dCA9Ci0JCQkJTURGTERfRFNJX0RQSV9PVVRQVVQo ZHNpX2VuY29kZXIpOwotCXN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnID0KLQkJ CQltZGZsZF9kc2lfZW5jb2Rlcl9nZXRfY29uZmlnKGRzaV9lbmNvZGVyKTsKLQlpbnQgcGlwZSA9 IG1kZmxkX2RzaV9lbmNvZGVyX2dldF9waXBlKGRzaV9lbmNvZGVyKTsKLQlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gZHNpX2NvbmZpZy0+ZGV2OwotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCS8qc3RhcnQgdXAgZGlzcGxheSBpc2xhbmQg aWYgaXQgd2FzIHNodXRkb3duKi8KLQlpZiAoIWdtYV9wb3dlcl9iZWdpbihkZXYsIHRydWUpKQot CQlyZXR1cm47Ci0KLQlpZiAob24pIHsKLQkJaWYgKG1kZmxkX2dldF9wYW5lbF90eXBlKGRldiwg cGlwZSkgPT0gVE1EX1ZJRCkKLQkJCW1kZmxkX2RzaV9kcGlfdHVybl9vbihkcGlfb3V0cHV0LCBw aXBlKTsKLQkJZWxzZSBpZiAobWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCBwaXBlKSA9PSBUQzM1 ODc2WCkKLQkJCW1kZmxkX2RzaV9jb25maWd1cmVfdXAoZHNpX2VuY29kZXIsIHBpcGUpOwotCQll bHNlIHsKLQkJCS8qZW5hYmxlIG1pcGkgcG9ydCovCi0JCQlSRUdfV1JJVEUoTUlQSV9QT1JUX0NP TlRST0wocGlwZSksCi0JCQkJUkVHX1JFQUQoTUlQSV9QT1JUX0NPTlRST0wocGlwZSkpIHwgQklU KDMxKSk7Ci0JCQlSRUdfUkVBRChNSVBJX1BPUlRfQ09OVFJPTChwaXBlKSk7Ci0KLQkJCW1kZmxk X2RzaV9kcGlfdHVybl9vbihkcGlfb3V0cHV0LCBwaXBlKTsKLQkJCW1kZmxkX2RzaV90cG9faWNf aW5pdChkc2lfY29uZmlnLCBwaXBlKTsKLQkJfQotCQlkZXZfcHJpdi0+ZHBpX3BhbmVsX29uW3Bp cGVdID0gdHJ1ZTsKLQl9IGVsc2UgewotCQlpZiAobWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCBw aXBlKSA9PSBUTURfVklEKQotCQkJbWRmbGRfZHNpX2RwaV9zaHV0X2Rvd24oZHBpX291dHB1dCwg cGlwZSk7Ci0JCWVsc2UgaWYgKG1kZmxkX2dldF9wYW5lbF90eXBlKGRldiwgcGlwZSkgPT0gVEMz NTg3NlgpCi0JCQltZGZsZF9kc2lfY29uZmlndXJlX2Rvd24oZHNpX2VuY29kZXIsIHBpcGUpOwot CQllbHNlIHsKLQkJCW1kZmxkX2RzaV9kcGlfc2h1dF9kb3duKGRwaV9vdXRwdXQsIHBpcGUpOwot Ci0JCQkvKmRpc2FibGUgbWlwaSBwb3J0Ki8KLQkJCVJFR19XUklURShNSVBJX1BPUlRfQ09OVFJP TChwaXBlKSwKLQkJCQlSRUdfUkVBRChNSVBJX1BPUlRfQ09OVFJPTChwaXBlKSkgJiB+QklUKDMx KSk7Ci0JCQlSRUdfUkVBRChNSVBJX1BPUlRfQ09OVFJPTChwaXBlKSk7Ci0JCX0KLQkJZGV2X3By aXYtPmRwaV9wYW5lbF9vbltwaXBlXSA9IGZhbHNlOwotCX0KLQlnbWFfcG93ZXJfZW5kKGRldik7 Ci19Ci0KLXZvaWQgbWRmbGRfZHNpX2RwaV9kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl ciwgaW50IG1vZGUpCi17Ci0JbWRmbGRfZHNpX2RwaV9zZXRfcG93ZXIoZW5jb2RlciwgbW9kZSA9 PSBEUk1fTU9ERV9EUE1TX09OKTsKLX0KLQotYm9vbCBtZGZsZF9kc2lfZHBpX21vZGVfZml4dXAo c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUsCi0JCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRq dXN0ZWRfbW9kZSkKLXsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2VuY29kZXIgKmRzaV9lbmNvZGVyID0g bWRmbGRfZHNpX2VuY29kZXIoZW5jb2Rlcik7Ci0Jc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRz aV9jb25maWcgPQotCQkJCW1kZmxkX2RzaV9lbmNvZGVyX2dldF9jb25maWcoZHNpX2VuY29kZXIp OwotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpmaXhlZF9tb2RlID0gZHNpX2NvbmZpZy0+Zml4 ZWRfbW9kZTsKLQotCWlmIChmaXhlZF9tb2RlKSB7Ci0JCWFkanVzdGVkX21vZGUtPmhkaXNwbGF5 ID0gZml4ZWRfbW9kZS0+aGRpc3BsYXk7Ci0JCWFkanVzdGVkX21vZGUtPmhzeW5jX3N0YXJ0ID0g Zml4ZWRfbW9kZS0+aHN5bmNfc3RhcnQ7Ci0JCWFkanVzdGVkX21vZGUtPmhzeW5jX2VuZCA9IGZp eGVkX21vZGUtPmhzeW5jX2VuZDsKLQkJYWRqdXN0ZWRfbW9kZS0+aHRvdGFsID0gZml4ZWRfbW9k ZS0+aHRvdGFsOwotCQlhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSA9IGZpeGVkX21vZGUtPnZkaXNw bGF5OwotCQlhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydCA9IGZpeGVkX21vZGUtPnZzeW5jX3N0 YXJ0OwotCQlhZGp1c3RlZF9tb2RlLT52c3luY19lbmQgPSBmaXhlZF9tb2RlLT52c3luY19lbmQ7 Ci0JCWFkanVzdGVkX21vZGUtPnZ0b3RhbCA9IGZpeGVkX21vZGUtPnZ0b3RhbDsKLQkJYWRqdXN0 ZWRfbW9kZS0+Y2xvY2sgPSBmaXhlZF9tb2RlLT5jbG9jazsKLQkJZHJtX21vZGVfc2V0X2NydGNp bmZvKGFkanVzdGVkX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwotCX0KLQlyZXR1cm4g dHJ1ZTsKLX0KLQotdm9pZCBtZGZsZF9kc2lfZHBpX3ByZXBhcmUoc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyKQotewotCW1kZmxkX2RzaV9kcGlfc2V0X3Bvd2VyKGVuY29kZXIsIGZhbHNlKTsK LX0KLQotdm9pZCBtZGZsZF9kc2lfZHBpX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpCi17Ci0JbWRmbGRfZHNpX2RwaV9zZXRfcG93ZXIoZW5jb2RlciwgdHJ1ZSk7Ci19Ci0KLS8q IEZvciBUQzM1ODc2WCAqLwotLyogVGhpcyBmdW5jdGlvbmFsaXR5IHdhcyBpbXBsZW1lbnRlZCBp biBGVyBpbiBpQ0RLICovCi0vKiBCdXQgcmVtb3ZlZCBpbiBEVjAgYW5kIGxhdGVyLiBTbyBuZWVk IHRvIGFkZCBoZXJlLiAqLwotc3RhdGljIHZvaWQgbWlwaV9zZXRfcHJvcGVydGllcyhzdHJ1Y3Qg bWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywgaW50IHBpcGUpCi17Ci0Jc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGRzaV9jb25maWctPmRldjsKLQotCVJFR19XUklURShNSVBJX0NUUkxfUkVH KHBpcGUpLCAweDAwMDAwMDE4KTsKLQlSRUdfV1JJVEUoTUlQSV9JTlRSX0VOX1JFRyhwaXBlKSwg MHhmZmZmZmZmZik7Ci0JUkVHX1dSSVRFKE1JUElfSFNfVFhfVElNRU9VVF9SRUcocGlwZSksIDB4 ZmZmZmZmKTsKLQlSRUdfV1JJVEUoTUlQSV9MUF9SWF9USU1FT1VUX1JFRyhwaXBlKSwgMHhmZmZm ZmYpOwotCVJFR19XUklURShNSVBJX1RVUk5fQVJPVU5EX1RJTUVPVVRfUkVHKHBpcGUpLCAweDE0 KTsKLQlSRUdfV1JJVEUoTUlQSV9ERVZJQ0VfUkVTRVRfVElNRVJfUkVHKHBpcGUpLCAweGZmKTsK LQlSRUdfV1JJVEUoTUlQSV9ISUdIX0xPV19TV0lUQ0hfQ09VTlRfUkVHKHBpcGUpLCAweDI1KTsK LQlSRUdfV1JJVEUoTUlQSV9JTklUX0NPVU5UX1JFRyhwaXBlKSwgMHhmMCk7Ci0JUkVHX1dSSVRF KE1JUElfRU9UX0RJU0FCTEVfUkVHKHBpcGUpLCAweDAwMDAwMDAwKTsKLQlSRUdfV1JJVEUoTUlQ SV9MUF9CWVRFQ0xLX1JFRyhwaXBlKSwgMHgwMDAwMDAwNCk7Ci0JUkVHX1dSSVRFKE1JUElfREJJ X0JXX0NUUkxfUkVHKHBpcGUpLCAweDAwMDAwODIwKTsKLQlSRUdfV1JJVEUoTUlQSV9DTEtfTEFO RV9TV0lUQ0hfVElNRV9DTlRfUkVHKHBpcGUpLCAoMHhhIDw8IDE2KSB8IDB4MTQpOwotfQotCi1z dGF0aWMgdm9pZCBtZGZsZF9taXBpX3NldF92aWRlb190aW1pbmcoc3RydWN0IG1kZmxkX2RzaV9j b25maWcgKmRzaV9jb25maWcsCi0JCQkJCWludCBwaXBlKQotewotCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBkc2lfY29uZmlnLT5kZXY7Ci0Jc3RydWN0IG1kZmxkX2RzaV9kcGlfdGltaW5nIGRw aV90aW1pbmc7Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBkc2lfY29uZmlnLT5t b2RlOwotCi0JbWRmbGRfZHNpX2RwaV90aW1pbmdfY2FsY3VsYXRpb24obW9kZSwgJmRwaV90aW1p bmcsCi0JCQkJCWRzaV9jb25maWctPmxhbmVfY291bnQsCi0JCQkJCWRzaV9jb25maWctPmJwcCk7 Ci0KLQlSRUdfV1JJVEUoTUlQSV9EUElfUkVTT0xVVElPTl9SRUcocGlwZSksCi0JCW1vZGUtPnZk aXNwbGF5IDw8IDE2IHwgbW9kZS0+aGRpc3BsYXkpOwotCVJFR19XUklURShNSVBJX0hTWU5DX0NP VU5UX1JFRyhwaXBlKSwKLQkJZHBpX3RpbWluZy5oc3luY19jb3VudCAmIERTSV9EUElfVElNSU5H X01BU0spOwotCVJFR19XUklURShNSVBJX0hCUF9DT1VOVF9SRUcocGlwZSksCi0JCWRwaV90aW1p bmcuaGJwX2NvdW50ICYgRFNJX0RQSV9USU1JTkdfTUFTSyk7Ci0JUkVHX1dSSVRFKE1JUElfSEZQ X0NPVU5UX1JFRyhwaXBlKSwKLQkJZHBpX3RpbWluZy5oZnBfY291bnQgJiBEU0lfRFBJX1RJTUlO R19NQVNLKTsKLQlSRUdfV1JJVEUoTUlQSV9IQUNUSVZFX0NPVU5UX1JFRyhwaXBlKSwKLQkJZHBp X3RpbWluZy5oYWN0aXZlX2NvdW50ICYgRFNJX0RQSV9USU1JTkdfTUFTSyk7Ci0JUkVHX1dSSVRF KE1JUElfVlNZTkNfQ09VTlRfUkVHKHBpcGUpLAotCQlkcGlfdGltaW5nLnZzeW5jX2NvdW50ICYg RFNJX0RQSV9USU1JTkdfTUFTSyk7Ci0JUkVHX1dSSVRFKE1JUElfVkJQX0NPVU5UX1JFRyhwaXBl KSwKLQkJZHBpX3RpbWluZy52YnBfY291bnQgJiBEU0lfRFBJX1RJTUlOR19NQVNLKTsKLQlSRUdf V1JJVEUoTUlQSV9WRlBfQ09VTlRfUkVHKHBpcGUpLAotCQlkcGlfdGltaW5nLnZmcF9jb3VudCAm IERTSV9EUElfVElNSU5HX01BU0spOwotfQotCi1zdGF0aWMgdm9pZCBtZGZsZF9taXBpX2NvbmZp ZyhzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywgaW50IHBpcGUpCi17Ci0Jc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGRzaV9jb25maWctPmRldjsKLQlpbnQgbGFuZV9jb3VudCA9 IGRzaV9jb25maWctPmxhbmVfY291bnQ7Ci0KLQlpZiAocGlwZSkgewotCQlSRUdfV1JJVEUoTUlQ SV9QT1JUX0NPTlRST0woMCksIDB4MDAwMDAwMDIpOwotCQlSRUdfV1JJVEUoTUlQSV9QT1JUX0NP TlRST0woMiksIDB4ODAwMDAwMDApOwotCX0gZWxzZSB7Ci0JCVJFR19XUklURShNSVBJX1BPUlRf Q09OVFJPTCgwKSwgMHg4MDAxMDAwMCk7Ci0JCVJFR19XUklURShNSVBJX1BPUlRfQ09OVFJPTCgy KSwgMHgwMCk7Ci0JfQotCi0JUkVHX1dSSVRFKE1JUElfRFBIWV9QQVJBTV9SRUcocGlwZSksIDB4 MTUwQTYwMEYpOwotCVJFR19XUklURShNSVBJX1ZJREVPX01PREVfRk9STUFUX1JFRyhwaXBlKSwg MHgwMDAwMDAwRik7Ci0KLQkvKiBsYW5lX2NvdW50ID0gMyAqLwotCVJFR19XUklURShNSVBJX0RT SV9GVU5DX1BSR19SRUcocGlwZSksIDB4MDAwMDAyMDAgfCBsYW5lX2NvdW50KTsKLQotCW1kZmxk X21pcGlfc2V0X3ZpZGVvX3RpbWluZyhkc2lfY29uZmlnLCBwaXBlKTsKLX0KLQotc3RhdGljIHZv aWQgbWRmbGRfc2V0X3BpcGVfdGltaW5nKHN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29u ZmlnLCBpbnQgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZHNpX2NvbmZpZy0+ ZGV2OwotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gZHNpX2NvbmZpZy0+bW9kZTsK LQotCVJFR19XUklURShIVE9UQUxfQSwgKChtb2RlLT5odG90YWwgLSAxKSA8PCAxNikgfCAobW9k ZS0+aGRpc3BsYXkgLSAxKSk7Ci0JUkVHX1dSSVRFKEhCTEFOS19BLCAoKG1vZGUtPmh0b3RhbCAt IDEpIDw8IDE2KSB8IChtb2RlLT5oZGlzcGxheSAtIDEpKTsKLQlSRUdfV1JJVEUoSFNZTkNfQSwK LQkJKChtb2RlLT5oc3luY19lbmQgLSAxKSA8PCAxNikgfCAobW9kZS0+aHN5bmNfc3RhcnQgLSAx KSk7Ci0KLQlSRUdfV1JJVEUoVlRPVEFMX0EsICgobW9kZS0+dnRvdGFsIC0gMSkgPDwgMTYpIHwg KG1vZGUtPnZkaXNwbGF5IC0gMSkpOwotCVJFR19XUklURShWQkxBTktfQSwgKChtb2RlLT52dG90 YWwgLSAxKSA8PCAxNikgfCAobW9kZS0+dmRpc3BsYXkgLSAxKSk7Ci0JUkVHX1dSSVRFKFZTWU5D X0EsCi0JCSgobW9kZS0+dnN5bmNfZW5kIC0gMSkgPDwgMTYpIHwgKG1vZGUtPnZzeW5jX3N0YXJ0 IC0gMSkpOwotCi0JUkVHX1dSSVRFKFBJUEVBU1JDLAotCQkoKG1vZGUtPmhkaXNwbGF5IC0gMSkg PDwgMTYpIHwgKG1vZGUtPnZkaXNwbGF5IC0gMSkpOwotfQotLyogRW5kIGZvciBUQzM1ODc2WCAq LwotCi12b2lkIG1kZmxkX2RzaV9kcGlfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyLAotCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJCSAgIHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQotewotCXN0cnVjdCBtZGZsZF9kc2lf ZW5jb2RlciAqZHNpX2VuY29kZXIgPSBtZGZsZF9kc2lfZW5jb2RlcihlbmNvZGVyKTsKLQlzdHJ1 Y3QgbWRmbGRfZHNpX2RwaV9vdXRwdXQgKmRwaV9vdXRwdXQgPQotCQkJCQlNREZMRF9EU0lfRFBJ X09VVFBVVChkc2lfZW5jb2Rlcik7Ci0Jc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25m aWcgPQotCQkJCW1kZmxkX2RzaV9lbmNvZGVyX2dldF9jb25maWcoZHNpX2VuY29kZXIpOwotCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkc2lfY29uZmlnLT5kZXY7Ci0Jc3RydWN0IGRybV9wc2Jf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBwaXBlID0gbWRmbGRf ZHNpX2VuY29kZXJfZ2V0X3BpcGUoZHNpX2VuY29kZXIpOwotCXUzMiBwaXBlY29uZl9yZWcgPSBQ SVBFQUNPTkY7Ci0JdTMyIGRzcGNudHJfcmVnID0gRFNQQUNOVFI7Ci0JdTMyIHBpcGVjb25mLCBk c3BjbnRyOwotCi0JdTMyIG1pcGkgPSBNSVBJX1BPUlRfRU4gfCBQQVNTX0ZST01fU1BIWV9UT19B RkUgfCBTRUxfRkxPUFBFRF9IU1RYOwotCi0JaWYgKFdBUk5fT04ocGlwZSA8IDApKQotCQlyZXR1 cm47Ci0KLQlwaXBlY29uZiA9IGRldl9wcml2LT5waXBlY29uZltwaXBlXTsKLQlkc3BjbnRyID0g ZGV2X3ByaXYtPmRzcGNudHJbcGlwZV07Ci0KLQlpZiAocGlwZSkgewotCQlwaXBlY29uZl9yZWcg PSBQSVBFQ0NPTkY7Ci0JCWRzcGNudHJfcmVnID0gRFNQQ0NOVFI7Ci0JfSBlbHNlIHsKLQkJaWYg KG1kZmxkX2dldF9wYW5lbF90eXBlKGRldiwgcGlwZSkgPT0gVEMzNTg3NlgpCi0JCQltaXBpICY9 ICh+MHgwMyk7IC8qIFVzZSBhbGwgZm91ciBsYW5lcyAqLwotCQllbHNlCi0JCQltaXBpIHw9IDI7 Ci0JfQotCi0JLypzdGFydCB1cCBkaXNwbGF5IGlzbGFuZCBpZiBpdCB3YXMgc2h1dGRvd24qLwot CWlmICghZ21hX3Bvd2VyX2JlZ2luKGRldiwgdHJ1ZSkpCi0JCXJldHVybjsKLQotCWlmIChtZGZs ZF9nZXRfcGFuZWxfdHlwZShkZXYsIHBpcGUpID09IFRDMzU4NzZYKSB7Ci0JCS8qCi0JCSAqIFRo ZSBmb2xsb3dpbmcgbG9naWMgaXMgcmVxdWlyZWQgdG8gcmVzZXQgdGhlIGJyaWRnZSBhbmQKLQkJ ICogY29uZmlndXJlLiBUaGlzIGFsc28gc3RhcnRzIHRoZSBEU0kgY2xvY2sgYXQgMjAwTUh6Lgot CQkgKi8KLQkJdGMzNTg3Nnhfc2V0X2JyaWRnZV9yZXNldF9zdGF0ZShkZXYsIDApOyAgLypQdWxs IEhpZ2ggUmVzZXQgKi8KLQkJdGMzNTg3NnhfdG9zaGliYV9icmlkZ2VfcGFuZWxfb24oZGV2KTsK LQkJdWRlbGF5KDEwMCk7Ci0JCS8qIE5vdyBzdGFydCB0aGUgRFNJIGNsb2NrICovCi0JCVJFR19X UklURShNUlNUX0RQTExfQSwgMHgwMCk7Ci0JCVJFR19XUklURShNUlNUX0ZQQTAsIDB4QzEpOwot CQlSRUdfV1JJVEUoTVJTVF9EUExMX0EsIDB4MDA4MDAwMDApOwotCQl1ZGVsYXkoNTAwKTsKLQkJ UkVHX1dSSVRFKE1SU1RfRFBMTF9BLCAweDgwODAwMDAwKTsKLQotCQlpZiAoUkVHX0JJVF9XQUlU KHBpcGVjb25mX3JlZywgMSwgMjkpKQotCQkJZGV2X2VycihkZXYtPmRldiwgIiVzOiBEU0kgUExM IGxvY2sgdGltZW91dFxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0KLQkJUkVHX1dSSVRFKE1JUElfRFBI WV9QQVJBTV9SRUcocGlwZSksIDB4MkEwYzYwMDgpOwotCi0JCW1pcGlfc2V0X3Byb3BlcnRpZXMo ZHNpX2NvbmZpZywgcGlwZSk7Ci0JCW1kZmxkX21pcGlfY29uZmlnKGRzaV9jb25maWcsIHBpcGUp OwotCQltZGZsZF9zZXRfcGlwZV90aW1pbmcoZHNpX2NvbmZpZywgcGlwZSk7Ci0KLQkJUkVHX1dS SVRFKERTUEFCQVNFLCAweDAwKTsKLQkJUkVHX1dSSVRFKERTUEFTSVpFLAotCQkJKChtb2RlLT52 ZGlzcGxheSAtIDEpIDw8IDE2KSB8IChtb2RlLT5oZGlzcGxheSAtIDEpKTsKLQotCQlSRUdfV1JJ VEUoRFNQQUNOVFIsIDB4OTgwMDAwMDApOwotCQlSRUdfV1JJVEUoRFNQQVNVUkYsIDB4MDApOwot Ci0JCVJFR19XUklURShWR0FDTlRSTCwgMHg4MDAwMDAwMCk7Ci0JCVJFR19XUklURShERVZJQ0Vf UkVBRFlfUkVHLCAweDAwMDAwMDAxKTsKLQotCQlSRUdfV1JJVEUoTUlQSV9QT1JUX0NPTlRST0wo cGlwZSksIDB4ODA4MTAwMDApOwotCX0gZWxzZSB7Ci0JCS8qc2V0IHVwIG1pcGkgcG9ydCBGSVhN RTogZG8gYXQgaW5pdCB0aW1lICovCi0JCVJFR19XUklURShNSVBJX1BPUlRfQ09OVFJPTChwaXBl KSwgbWlwaSk7Ci0JfQotCVJFR19SRUFEKE1JUElfUE9SVF9DT05UUk9MKHBpcGUpKTsKLQotCWlm IChtZGZsZF9nZXRfcGFuZWxfdHlwZShkZXYsIHBpcGUpID09IFRNRF9WSUQpIHsKLQkJLyogTk9Q ICovCi0JfSBlbHNlIGlmIChtZGZsZF9nZXRfcGFuZWxfdHlwZShkZXYsIHBpcGUpID09IFRDMzU4 NzZYKSB7Ci0JCS8qIHNldCB1cCBEU0kgY29udHJvbGxlciBEUEkgaW50ZXJmYWNlICovCi0JCW1k ZmxkX2RzaV9kcGlfY29udHJvbGxlcl9pbml0KGRzaV9jb25maWcsIHBpcGUpOwotCi0JCS8qIENv bmZpZ3VyZSBNSVBJIEJyaWRnZSBhbmQgUGFuZWwgKi8KLQkJdGMzNTg3NnhfY29uZmlndXJlX2x2 ZHNfYnJpZGdlKGRldik7Ci0JCWRldl9wcml2LT5kcGlfcGFuZWxfb25bcGlwZV0gPSB0cnVlOwot CX0gZWxzZSB7Ci0JCS8qdHVybiBvbiBEUEkgaW50ZXJmYWNlKi8KLQkJbWRmbGRfZHNpX2RwaV90 dXJuX29uKGRwaV9vdXRwdXQsIHBpcGUpOwotCX0KLQotCS8qc2V0IHVwIHBpcGUqLwotCVJFR19X UklURShwaXBlY29uZl9yZWcsIHBpcGVjb25mKTsKLQlSRUdfUkVBRChwaXBlY29uZl9yZWcpOwot Ci0JLypzZXQgdXAgZGlzcGxheSBwbGFuZSovCi0JUkVHX1dSSVRFKGRzcGNudHJfcmVnLCBkc3Bj bnRyKTsKLQlSRUdfUkVBRChkc3BjbnRyX3JlZyk7Ci0KLQltc2xlZXAoMjApOyAvKiBGSVhNRTog dGhpcyBzaG91bGQgd2FpdCBmb3IgdmJsYW5rICovCi0KLQlpZiAobWRmbGRfZ2V0X3BhbmVsX3R5 cGUoZGV2LCBwaXBlKSA9PSBUTURfVklEKSB7Ci0JCS8qIE5PUCAqLwotCX0gZWxzZSBpZiAobWRm bGRfZ2V0X3BhbmVsX3R5cGUoZGV2LCBwaXBlKSA9PSBUQzM1ODc2WCkgewotCQltZGZsZF9kc2lf ZHBpX3R1cm5fb24oZHBpX291dHB1dCwgcGlwZSk7Ci0JfSBlbHNlIHsKLQkJLyogaW5pdCBkcml2 ZXIgaWMgKi8KLQkJbWRmbGRfZHNpX3Rwb19pY19pbml0KGRzaV9jb25maWcsIHBpcGUpOwotCQkv KmluaXQgYmFja2xpZ2h0Ki8KLQkJbWRmbGRfZHNpX2JyaWdodG5lc3NfaW5pdChkc2lfY29uZmln LCBwaXBlKTsKLQl9Ci0KLQlnbWFfcG93ZXJfZW5kKGRldik7Ci19Ci0KLS8qCi0gKiBJbml0IERT SSBEUEkgZW5jb2Rlci4KLSAqIEFsbG9jYXRlIGFuIG1kZmxkX2RzaV9lbmNvZGVyIGFuZCBhdHRh Y2ggaXQgdG8gZ2l2ZW4gQGRzaV9jb25uZWN0b3IKLSAqIHJldHVybiBwb2ludGVyIG9mIG5ld2x5 IGFsbG9jYXRlZCBEUEkgZW5jb2RlciwgTlVMTCBvbiBlcnJvcgotICovCi1zdHJ1Y3QgbWRmbGRf ZHNpX2VuY29kZXIgKm1kZmxkX2RzaV9kcGlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAot CQkJCXN0cnVjdCBtZGZsZF9kc2lfY29ubmVjdG9yICpkc2lfY29ubmVjdG9yLAotCQkJCWNvbnN0 IHN0cnVjdCBwYW5lbF9mdW5jcyAqcF9mdW5jcykKLXsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2RwaV9v dXRwdXQgKmRwaV9vdXRwdXQgPSBOVUxMOwotCXN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lf Y29uZmlnOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBOVUxMOwotCXN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IE5VTEw7Ci0JaW50IHBpcGU7Ci0JdTMyIGRhdGE7Ci0J aW50IHJldDsKLQotCXBpcGUgPSBkc2lfY29ubmVjdG9yLT5waXBlOwotCi0JaWYgKG1kZmxkX2dl dF9wYW5lbF90eXBlKGRldiwgcGlwZSkgIT0gVEMzNTg3NlgpIHsKLQkJZHNpX2NvbmZpZyA9IG1k ZmxkX2RzaV9nZXRfY29uZmlnKGRzaV9jb25uZWN0b3IpOwotCi0JCS8qIHBhbmVsIGhhcmQtcmVz ZXQgKi8KLQkJaWYgKHBfZnVuY3MtPnJlc2V0KSB7Ci0JCQlyZXQgPSBwX2Z1bmNzLT5yZXNldChk ZXYsIHBpcGUpOwotCQkJaWYgKHJldCkgewotCQkJCURSTV9FUlJPUigiUGFuZWwgJWQgaGFyZC1y ZXNldCBmYWlsZWRcbiIsIHBpcGUpOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQl9Ci0KLQkJ LyogcGFuZWwgZHJ2SUMgaW5pdCAqLwotCQlpZiAocF9mdW5jcy0+ZHJ2X2ljX2luaXQpCi0JCQlw X2Z1bmNzLT5kcnZfaWNfaW5pdChkc2lfY29uZmlnLCBwaXBlKTsKLQotCQkvKiBwYW5lbCBwb3dl ciBtb2RlIGRldGVjdCAqLwotCQlyZXQgPSBtZGZsZF9kc2lfZ2V0X3Bvd2VyX21vZGUoZHNpX2Nv bmZpZywgJmRhdGEsIGZhbHNlKTsKLQkJaWYgKHJldCkgewotCQkJRFJNX0VSUk9SKCJQYW5lbCAl ZCBnZXQgcG93ZXIgbW9kZSBmYWlsZWRcbiIsIHBpcGUpOwotCQkJZHNpX2Nvbm5lY3Rvci0+c3Rh dHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Ci0JCX0gZWxzZSB7Ci0JCQlEUk1f SU5GTygicGlwZSAlZCBwb3dlciBtb2RlIDB4JXhcbiIsIHBpcGUsIGRhdGEpOwotCQkJZHNpX2Nv bm5lY3Rvci0+c3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Ci0JCX0KLQl9Ci0K LQlkcGlfb3V0cHV0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1kZmxkX2RzaV9kcGlfb3V0cHV0 KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkcGlfb3V0cHV0KSB7Ci0JCURSTV9FUlJPUigiTm8gbWVt b3J5XG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JZHBpX291dHB1dC0+cGFuZWxfb24gPSAw OwotCWRwaV9vdXRwdXQtPmRldiA9IGRldjsKLQlpZiAobWRmbGRfZ2V0X3BhbmVsX3R5cGUoZGV2 LCBwaXBlKSAhPSBUQzM1ODc2WCkKLQkJZHBpX291dHB1dC0+cF9mdW5jcyA9IHBfZnVuY3M7Ci0J ZHBpX291dHB1dC0+Zmlyc3RfYm9vdCA9IDE7Ci0KLQkvKmdldCBmaXhlZCBtb2RlKi8KLQlkc2lf Y29uZmlnID0gbWRmbGRfZHNpX2dldF9jb25maWcoZHNpX2Nvbm5lY3Rvcik7Ci0KLQkvKmNyZWF0 ZSBkcm0gZW5jb2RlciBvYmplY3QqLwotCWNvbm5lY3RvciA9ICZkc2lfY29ubmVjdG9yLT5iYXNl LmJhc2U7Ci0JZW5jb2RlciA9ICZkcGlfb3V0cHV0LT5iYXNlLmJhc2UuYmFzZTsKLQlkcm1fc2lt cGxlX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIsIERSTV9NT0RFX0VOQ09ERVJfTFZEUyk7Ci0J ZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVyLAotCQkJCXBfZnVuY3MtPmVuY29kZXJfaGVs cGVyX2Z1bmNzKTsKLQotCS8qYXR0YWNoIHRvIGdpdmVuIGNvbm5lY3RvciovCi0JZHJtX2Nvbm5l Y3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOwotCi0JLypzZXQgcG9zc2li bGUgY3J0Y3MgYW5kIGNsb25lcyovCi0JaWYgKGRzaV9jb25uZWN0b3ItPnBpcGUpIHsKLQkJZW5j b2Rlci0+cG9zc2libGVfY3J0Y3MgPSAoMSA8PCAyKTsKLQkJZW5jb2Rlci0+cG9zc2libGVfY2xv bmVzID0gMDsKLQl9IGVsc2UgewotCQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9ICgxIDw8IDAp OwotCQllbmNvZGVyLT5wb3NzaWJsZV9jbG9uZXMgPSAwOwotCX0KLQotCWRzaV9jb25uZWN0b3It PmJhc2UuZW5jb2RlciA9ICZkcGlfb3V0cHV0LT5iYXNlLmJhc2U7Ci0KLQlyZXR1cm4gJmRwaV9v dXRwdXQtPmJhc2U7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxk X2RzaV9kcGkuaCBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNpX2RwaS5oCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjQwNjYzZTE2OTYuLjAwMDAwMDAwMDAwMAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9kcGkuaAorKysgL2Rldi9udWxsCkBA IC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAxMCBJbnRlbCBDb3Jwb3JhdGlv bgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICog U29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAot ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIKLSAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBB dXRob3JzOgotICogamltIGxpdSA8amltLmxpdUBpbnRlbC5jb20+Ci0gKiBKYWNraWUgTGk8eWFv ZG9uZy5saUBpbnRlbC5jb20+Ci0gKi8KLQotI2lmbmRlZiBfX01ERkxEX0RTSV9EUElfSF9fCi0j ZGVmaW5lIF9fTURGTERfRFNJX0RQSV9IX18KLQotI2luY2x1ZGUgIm1kZmxkX2RzaV9vdXRwdXQu aCIKLSNpbmNsdWRlICJtZGZsZF9vdXRwdXQuaCIKLQotc3RydWN0IG1kZmxkX2RzaV9kcGlfdGlt aW5nIHsKLQl1MTYgaHN5bmNfY291bnQ7Ci0JdTE2IGhicF9jb3VudDsKLQl1MTYgaGZwX2NvdW50 OwotCXUxNiBoYWN0aXZlX2NvdW50OwotCXUxNiB2c3luY19jb3VudDsKLQl1MTYgdmJwX2NvdW50 OwotCXUxNiB2ZnBfY291bnQ7Ci19OwotCi1zdHJ1Y3QgbWRmbGRfZHNpX2RwaV9vdXRwdXQgewot CXN0cnVjdCBtZGZsZF9kc2lfZW5jb2RlciBiYXNlOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7 Ci0KLQlpbnQgcGFuZWxfb247Ci0JaW50IGZpcnN0X2Jvb3Q7Ci0KLQljb25zdCBzdHJ1Y3QgcGFu ZWxfZnVuY3MgKnBfZnVuY3M7Ci19OwotCi0jZGVmaW5lIE1ERkxEX0RTSV9EUElfT1VUUFVUKGRz aV9lbmNvZGVyKVwKLQljb250YWluZXJfb2YoZHNpX2VuY29kZXIsIHN0cnVjdCBtZGZsZF9kc2lf ZHBpX291dHB1dCwgYmFzZSkKLQotLyogRXhwb3J0IGZ1bmN0aW9ucyAqLwotZXh0ZXJuIGludCBt ZGZsZF9kc2lfZHBpX3RpbWluZ19jYWxjdWxhdGlvbihzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSwKLQkJCQlzdHJ1Y3QgbWRmbGRfZHNpX2RwaV90aW1pbmcgKmRwaV90aW1pbmcsCi0JCQkJ aW50IG51bV9sYW5lLCBpbnQgYnBwKTsKLWV4dGVybiBzdHJ1Y3QgbWRmbGRfZHNpX2VuY29kZXIg Km1kZmxkX2RzaV9kcGlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBt ZGZsZF9kc2lfY29ubmVjdG9yICpkc2lfY29ubmVjdG9yLAotCQkJCWNvbnN0IHN0cnVjdCBwYW5l bF9mdW5jcyAqcF9mdW5jcyk7Ci0KLS8qIE1ERkxEIERQSSBoZWxwZXIgZnVuY3Rpb25zICovCi1l eHRlcm4gdm9pZCBtZGZsZF9kc2lfZHBpX2RwbXMoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy LCBpbnQgbW9kZSk7Ci1leHRlcm4gYm9vbCBtZGZsZF9kc2lfZHBpX21vZGVfZml4dXAoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyLAotCQkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlLAotCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKTsKLWV4 dGVybiB2b2lkIG1kZmxkX2RzaV9kcGlfcHJlcGFyZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpOwotZXh0ZXJuIHZvaWQgbWRmbGRfZHNpX2RwaV9jb21taXQoc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyKTsKLWV4dGVybiB2b2lkIG1kZmxkX2RzaV9kcGlfbW9kZV9zZXQoc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyLAotCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAot CQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKTsKLWV4dGVybiB2b2lk IG1kZmxkX2RzaV9kcGlfdHVybl9vbihzdHJ1Y3QgbWRmbGRfZHNpX2RwaV9vdXRwdXQgKm91dHB1 dCwKLQkJCQlpbnQgcGlwZSk7Ci1leHRlcm4gdm9pZCBtZGZsZF9kc2lfZHBpX2NvbnRyb2xsZXJf aW5pdChzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywKLQkJCQlpbnQgcGlwZSk7 Ci0jZW5kaWYgLypfX01ERkxEX0RTSV9EUElfSF9fKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9nbWE1MDAvbWRmbGRfZHNpX291dHB1dC5jIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9t ZGZsZF9kc2lfb3V0cHV0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MTA1ZjQ1 YzFjNC4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNp X291dHB1dC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln aHQgwqkgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us Ci0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKLSAqIERFQUxJTkdT IElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOgotICogamltIGxpdSA8amltLmxpdUBp bnRlbC5jb20+Ci0gKiBKYWNraWUgTGk8eWFvZG9uZy5saUBpbnRlbC5jb20+Ci0gKi8KLQotI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNp bmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1l ci5oPgotCi0jaW5jbHVkZSA8YXNtL2ludGVsX3NjdV9pcGMuaD4KLQotI2luY2x1ZGUgIm1kZmxk X2RzaV9kcGkuaCIKLSNpbmNsdWRlICJtZGZsZF9kc2lfb3V0cHV0LmgiCi0jaW5jbHVkZSAibWRm bGRfZHNpX3BrZ19zZW5kZXIuaCIKLSNpbmNsdWRlICJtZGZsZF9vdXRwdXQuaCIKLSNpbmNsdWRl ICJ0YzM1ODc2eC1kc2ktbHZkcy5oIgotCi0vKiBnZXQgdGhlIExBQkMgZnJvbSBjb21tYW5kIGxp bmUuICovCi1zdGF0aWMgaW50IExBQkNfY29udHJvbCA9IDE7Ci0KLSNpZmRlZiBNT0RVTEUKLW1v ZHVsZV9wYXJhbShMQUJDX2NvbnRyb2wsIGludCwgMDY0NCk7Ci0jZWxzZQotCi1zdGF0aWMgaW50 IF9faW5pdCBwYXJzZV9MQUJDX2NvbnRyb2woY2hhciAqYXJnKQotewotCS8qIExBQkMgY29udHJv bCBjYW4gYmUgcGFzc2VkIGluIGFzIGEgY21kbGluZSBwYXJhbWV0ZXIgKi8KLQkvKiB0byBlbmFi bGUgdGhpcyBmZWF0dXJlIGFkZCBMQUJDPTEgdG8gY21kbGluZSAqLwotCS8qIHRvIGRpc2FibGUg dGhpcyBmZWF0dXJlIGFkZCBMQUJDPTAgdG8gY21kbGluZSAqLwotCWlmICghYXJnKQotCQlyZXR1 cm4gLUVJTlZBTDsKLQotCWlmICghc3RyY2FzZWNtcChhcmcsICIwIikpCi0JCUxBQkNfY29udHJv bCA9IDA7Ci0JZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJnLCAiMSIpKQotCQlMQUJDX2NvbnRyb2wg PSAxOwotCi0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiTEFCQyIsIHBhcnNlX0xBQkNfY29u dHJvbCk7Ci0jZW5kaWYKLQotLyoKLSAqIENoZWNrIGFuZCBzZWUgaWYgdGhlIGdlbmVyaWMgY29u dHJvbCBvciBkYXRhIGJ1ZmZlciBpcyBlbXB0eSBhbmQgcmVhZHkuCi0gKi8KLXZvaWQgbWRmbGRf ZHNpX2dlbl9maWZvX3JlYWR5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBnZW5fZmlmb19z dGF0X3JlZywKLQkJCQkJCQl1MzIgZmlmb19zdGF0KQotewotCXUzMiBHRU5fQkZfdGltZV9vdXRf Y291bnQ7Ci0KLQkvKiBDaGVjayBNSVBJIEFkYXRwZXIgY29tbWFuZCByZWdpc3RlcnMgKi8KLQlm b3IgKEdFTl9CRl90aW1lX291dF9jb3VudCA9IDA7Ci0JCQlHRU5fQkZfdGltZV9vdXRfY291bnQg PCBHRU5fRkJfVElNRV9PVVQ7Ci0JCQlHRU5fQkZfdGltZV9vdXRfY291bnQrKykgewotCQlpZiAo KFJFR19SRUFEKGdlbl9maWZvX3N0YXRfcmVnKSAmIGZpZm9fc3RhdCkgPT0gZmlmb19zdGF0KQot CQkJYnJlYWs7Ci0JCXVkZWxheSgxMDApOwotCX0KLQotCWlmIChHRU5fQkZfdGltZV9vdXRfY291 bnQgPT0gR0VOX0ZCX1RJTUVfT1VUKQotCQlEUk1fRVJST1IoIm1kZmxkX2RzaV9nZW5fZmlmb19y ZWFkeSwgVGltZW91dC4gZ2VuX2ZpZm9fc3RhdF9yZWcgPSAweCV4LlxuIiwKLQkJCQkJZ2VuX2Zp Zm9fc3RhdF9yZWcpOwotfQotCi0vKgotICogTWFuYWdlIHRoZSBEU0kgTUlQSSBrZXlib2FyZCBh bmQgZGlzcGxheSBicmlnaHRuZXNzLgotICogRklYTUU6IHRoaXMgaXMgZXhwb3J0ZWQgdG8gT1NQ TSBjb2RlLiBzaG91bGQgd29yayBvdXQgYW4gc3BlY2lmaWMKLSAqIGRpc3BsYXkgaW50ZXJmYWNl IHRvIE9TUE0uCi0gKi8KLQotdm9pZCBtZGZsZF9kc2lfYnJpZ2h0bmVzc19pbml0KHN0cnVjdCBt ZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnLCBpbnQgcGlwZSkKLXsKLQlzdHJ1Y3QgbWRmbGRf ZHNpX3BrZ19zZW5kZXIgKnNlbmRlciA9Ci0JCQkJbWRmbGRfZHNpX2dldF9wa2dfc2VuZGVyKGRz aV9jb25maWcpOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGRybV9wc2JfcHJp dmF0ZSAqZGV2X3ByaXY7Ci0JdTMyIGdlbl9jdHJsX3ZhbDsKLQotCWlmICghc2VuZGVyKSB7Ci0J CURSTV9FUlJPUigiTm8gc2VuZGVyIGZvdW5kXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRldiA9 IHNlbmRlci0+ZGV2OwotCWRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCS8qIFNldCBk ZWZhdWx0IGRpc3BsYXkgYmFja2xpZ2h0IHZhbHVlIHRvIDg1JSAoMHhkOCkqLwotCW1kZmxkX2Rz aV9zZW5kX21jc19zaG9ydChzZW5kZXIsIHdyaXRlX2Rpc3BsYXlfYnJpZ2h0bmVzcywgMHhkOCwg MSwKLQkJCQl0cnVlKTsKLQotCS8qIFNldCBtaW5pbXVtIGJyaWdodG5lc3Mgc2V0dGluZyBvZiBD QUJDIGZ1bmN0aW9uIHRvIDIwJSAoMHgzMykqLwotCW1kZmxkX2RzaV9zZW5kX21jc19zaG9ydChz ZW5kZXIsIHdyaXRlX2NhYmNfbWluX2JyaWdodCwgMHgzMywgMSwgdHJ1ZSk7Ci0KLQkvKiBFbmFi bGUgYmFja2xpZ2h0IG9yL2FuZCBMQUJDICovCi0JZ2VuX2N0cmxfdmFsID0gQlJJR0hUX0NOVExf QkxPQ0tfT04gfCBESVNQTEFZX0RJTU1JTkdfT04gfAotCQkJCQkJCQlCQUNLTElHSFRfT047Ci0J aWYgKExBQkNfY29udHJvbCA9PSAxKQotCQlnZW5fY3RybF92YWwgfD0gRElTUExBWV9ESU1NSU5H X09OIHwgRElTUExBWV9CUklHSFRORVNTX0FVVE8KLQkJCQkJCQkJfCBHQU1NQV9BVVRPOwotCi0J aWYgKExBQkNfY29udHJvbCA9PSAxKQotCQlnZW5fY3RybF92YWwgfD0gQU1CSUVOVF9MSUdIVF9T RU5TRV9PTjsKLQotCWRldl9wcml2LT5taXBpX2N0cmxfZGlzcGxheSA9IGdlbl9jdHJsX3ZhbDsK LQotCW1kZmxkX2RzaV9zZW5kX21jc19zaG9ydChzZW5kZXIsIHdyaXRlX2N0cmxfZGlzcGxheSwg KHU4KWdlbl9jdHJsX3ZhbCwKLQkJCQkxLCB0cnVlKTsKLQotCW1kZmxkX2RzaV9zZW5kX21jc19z aG9ydChzZW5kZXIsIHdyaXRlX2N0cmxfY2FiYywgVUlfSU1BR0UsIDEsIHRydWUpOwotfQotCi12 b2lkIG1kZmxkX2RzaV9icmlnaHRuZXNzX2NvbnRyb2woc3RydWN0IGRybV9kZXZpY2UgKmRldiwg aW50IHBpcGUsIGludCBsZXZlbCkKLXsKLQlzdHJ1Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNl bmRlcjsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdjsKLQlzdHJ1Y3QgbWRmbGRf ZHNpX2NvbmZpZyAqZHNpX2NvbmZpZzsKLQl1MzIgZ2VuX2N0cmxfdmFsID0gMDsKLQlpbnQgcF90 eXBlID0gVE1EX1ZJRDsKLQotCWlmICghZGV2IHx8IChwaXBlICE9IDAgJiYgcGlwZSAhPSAyKSkg ewotCQlEUk1fRVJST1IoIkludmFsaWQgcGFyYW1ldGVyXG4iKTsKLQkJcmV0dXJuOwotCX0KLQot CXBfdHlwZSA9IG1kZmxkX2dldF9wYW5lbF90eXBlKGRldiwgMCk7Ci0KLQlkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7Ci0KLQlpZiAocGlwZSkKLQkJZHNpX2NvbmZpZyA9IGRldl9wcml2LT5k c2lfY29uZmlnc1sxXTsKLQllbHNlCi0JCWRzaV9jb25maWcgPSBkZXZfcHJpdi0+ZHNpX2NvbmZp Z3NbMF07Ci0KLQlzZW5kZXIgPSBtZGZsZF9kc2lfZ2V0X3BrZ19zZW5kZXIoZHNpX2NvbmZpZyk7 Ci0KLQlpZiAoIXNlbmRlcikgewotCQlEUk1fRVJST1IoIk5vIHNlbmRlciBmb3VuZFxuIik7Ci0J CXJldHVybjsKLQl9Ci0KLQlnZW5fY3RybF92YWwgPSAobGV2ZWwgKiAweGZmIC8gTURGTERfRFNJ X0JSSUdIVE5FU1NfTUFYX0xFVkVMKSAmIDB4ZmY7Ci0KLQlkZXZfZGJnKHNlbmRlci0+ZGV2LT5k ZXYsICJwaXBlID0gJWQsIGdlbl9jdHJsX3ZhbCA9ICVkLlxuIiwKLQkJCQkJCQlwaXBlLCBnZW5f Y3RybF92YWwpOwotCi0JaWYgKHBfdHlwZSA9PSBUTURfVklEKSB7Ci0JCS8qIFNldCBkaXNwbGF5 IGJhY2tsaWdodCB2YWx1ZSAqLwotCQltZGZsZF9kc2lfc2VuZF9tY3Nfc2hvcnQoc2VuZGVyLCB0 bWRfd3JpdGVfZGlzcGxheV9icmlnaHRuZXNzLAotCQkJCQkodTgpZ2VuX2N0cmxfdmFsLCAxLCB0 cnVlKTsKLQl9IGVsc2UgewotCQkvKiBTZXQgZGlzcGxheSBiYWNrbGlnaHQgdmFsdWUgKi8KLQkJ bWRmbGRfZHNpX3NlbmRfbWNzX3Nob3J0KHNlbmRlciwgd3JpdGVfZGlzcGxheV9icmlnaHRuZXNz LAotCQkJCQkodTgpZ2VuX2N0cmxfdmFsLCAxLCB0cnVlKTsKLQotCQkvKiBFbmFibGUgYmFja2xp Z2h0IGNvbnRyb2wgKi8KLQkJaWYgKGxldmVsID09IDApCi0JCQlnZW5fY3RybF92YWwgPSAwOwot CQllbHNlCi0JCQlnZW5fY3RybF92YWwgPSBkZXZfcHJpdi0+bWlwaV9jdHJsX2Rpc3BsYXk7Ci0K LQkJbWRmbGRfZHNpX3NlbmRfbWNzX3Nob3J0KHNlbmRlciwgd3JpdGVfY3RybF9kaXNwbGF5LAot CQkJCQkodTgpZ2VuX2N0cmxfdmFsLCAxLCB0cnVlKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbWRm bGRfZHNpX2dldF9wYW5lbF9zdGF0dXMoc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25m aWcsCi0JCQkJdTggZGNzLCB1MzIgKmRhdGEsIGJvb2wgaHMpCi17Ci0Jc3RydWN0IG1kZmxkX2Rz aV9wa2dfc2VuZGVyICpzZW5kZXIKLQkJPSBtZGZsZF9kc2lfZ2V0X3BrZ19zZW5kZXIoZHNpX2Nv bmZpZyk7Ci0KLQlpZiAoIXNlbmRlciB8fCAhZGF0YSkgewotCQlEUk1fRVJST1IoIkludmFsaWQg cGFyYW1ldGVyXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIG1kZmxkX2Rz aV9yZWFkX21jcyhzZW5kZXIsIGRjcywgZGF0YSwgMSwgaHMpOwotfQotCi1pbnQgbWRmbGRfZHNp X2dldF9wb3dlcl9tb2RlKHN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnLCB1MzIg Km1vZGUsCi0JCQlib29sIGhzKQotewotCWlmICghZHNpX2NvbmZpZyB8fCAhbW9kZSkgewotCQlE Uk1fRVJST1IoIkludmFsaWQgcGFyYW1ldGVyXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JcmV0dXJuIG1kZmxkX2RzaV9nZXRfcGFuZWxfc3RhdHVzKGRzaV9jb25maWcsIDB4MGEsIG1v ZGUsIGhzKTsKLX0KLQotLyoKLSAqIE5PVEU6IHRoaXMgZnVuY3Rpb24gd2FzIHVzZWQgYnkgT1NQ TS4KLSAqIFRPRE86IHdpbGwgYmUgcmVtb3ZlZCBsYXRlciwgc2hvdWxkIHdvcmsgb3V0IGRpc3Bs YXkgaW50ZXJmYWNlcyBmb3IgT1NQTQotICovCi12b2lkIG1kZmxkX2RzaV9jb250cm9sbGVyX2lu aXQoc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWcsIGludCBwaXBlKQotewotCWlm ICghZHNpX2NvbmZpZyB8fCAoKHBpcGUgIT0gMCkgJiYgKHBpcGUgIT0gMikpKSB7Ci0JCURSTV9F UlJPUigiSW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCW1kZmxkX2Rz aV9kcGlfY29udHJvbGxlcl9pbml0KGRzaV9jb25maWcsIHBpcGUpOwotfQotCi1zdGF0aWMgdm9p ZCBtZGZsZF9kc2lfY29ubmVjdG9yX3NhdmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKLXsKLX0KLQotc3RhdGljIHZvaWQgbWRmbGRfZHNpX2Nvbm5lY3Rvcl9yZXN0b3JlKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci19Ci0KLS8qIEZJWE1FOiBzdGFydCB1c2lu ZyB0aGUgZm9yY2UgcGFyYW1ldGVyICovCi1zdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1 cwotbWRmbGRfZHNpX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwgYm9vbCBmb3JjZSkKLXsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2Nvbm5lY3RvciAqZHNpX2Nv bm5lY3RvcgotCQk9IG1kZmxkX2RzaV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQotCWRzaV9jb25u ZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwotCi0JcmV0dXJuIGRz aV9jb25uZWN0b3ItPnN0YXR1czsKLX0KLQotc3RhdGljIGludCBtZGZsZF9kc2lfY29ubmVjdG9y X3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJCXN0cnVj dCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQkJCXVpbnQ2NF90IHZhbHVlKQotewotCXN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IGNvbm5lY3Rvci0+ZW5jb2RlcjsKLQotCWlmICghc3Ry Y21wKHByb3BlcnR5LT5uYW1lLCAic2NhbGluZyBtb2RlIikgJiYgZW5jb2RlcikgewotCQlzdHJ1 Y3QgZ21hX2NydGMgKmdtYV9jcnRjID0gdG9fZ21hX2NydGMoZW5jb2Rlci0+Y3J0Yyk7Ci0JCWJv b2wgY2VudGVyZWNoYW5nZTsKLQkJdWludDY0X3QgdmFsOwotCi0JCWlmICghZ21hX2NydGMpCi0J CQlnb3RvIHNldF9wcm9wX2Vycm9yOwotCi0JCXN3aXRjaCAodmFsdWUpIHsKLQkJY2FzZSBEUk1f TU9ERV9TQ0FMRV9GVUxMU0NSRUVOOgotCQkJYnJlYWs7Ci0JCWNhc2UgRFJNX01PREVfU0NBTEVf Tk9fU0NBTEU6Ci0JCQlicmVhazsKLQkJY2FzZSBEUk1fTU9ERV9TQ0FMRV9BU1BFQ1Q6Ci0JCQli cmVhazsKLQkJZGVmYXVsdDoKLQkJCWdvdG8gc2V0X3Byb3BfZXJyb3I7Ci0JCX0KLQotCQlpZiAo ZHJtX29iamVjdF9wcm9wZXJ0eV9nZXRfdmFsdWUoJmNvbm5lY3Rvci0+YmFzZSwgcHJvcGVydHks ICZ2YWwpKQotCQkJZ290byBzZXRfcHJvcF9lcnJvcjsKLQotCQlpZiAodmFsID09IHZhbHVlKQot CQkJZ290byBzZXRfcHJvcF9kb25lOwotCi0JCWlmIChkcm1fb2JqZWN0X3Byb3BlcnR5X3NldF92 YWx1ZSgmY29ubmVjdG9yLT5iYXNlLAotCQkJCQkJCXByb3BlcnR5LCB2YWx1ZSkpCi0JCQlnb3Rv IHNldF9wcm9wX2Vycm9yOwotCi0JCWNlbnRlcmVjaGFuZ2UgPSAodmFsID09IERSTV9NT0RFX1ND QUxFX05PX1NDQUxFKSB8fAotCQkJKHZhbHVlID09IERSTV9NT0RFX1NDQUxFX05PX1NDQUxFKTsK LQotCQlpZiAoZ21hX2NydGMtPnNhdmVkX21vZGUuaGRpc3BsYXkgIT0gMCAmJgotCQkgICAgZ21h X2NydGMtPnNhdmVkX21vZGUudmRpc3BsYXkgIT0gMCkgewotCQkJaWYgKGNlbnRlcmVjaGFuZ2Up IHsKLQkJCQlpZiAoIWRybV9jcnRjX2hlbHBlcl9zZXRfbW9kZShlbmNvZGVyLT5jcnRjLAotCQkJ CQkJJmdtYV9jcnRjLT5zYXZlZF9tb2RlLAotCQkJCQkJZW5jb2Rlci0+Y3J0Yy0+eCwKLQkJCQkJ CWVuY29kZXItPmNydGMtPnksCi0JCQkJCQllbmNvZGVyLT5jcnRjLT5wcmltYXJ5LT5mYikpCi0J CQkJCWdvdG8gc2V0X3Byb3BfZXJyb3I7Ci0JCQl9IGVsc2UgewotCQkJCWNvbnN0IHN0cnVjdCBk cm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmZ1bmNzID0KLQkJCQkJCWVuY29kZXItPmhlbHBlcl9w cml2YXRlOwotCQkJCWZ1bmNzLT5tb2RlX3NldChlbmNvZGVyLAotCQkJCQkmZ21hX2NydGMtPnNh dmVkX21vZGUsCi0JCQkJCSZnbWFfY3J0Yy0+c2F2ZWRfYWRqdXN0ZWRfbW9kZSk7Ci0JCQl9Ci0J CX0KLQl9IGVsc2UgaWYgKCFzdHJjbXAocHJvcGVydHktPm5hbWUsICJiYWNrbGlnaHQiKSAmJiBl bmNvZGVyKSB7Ci0JCWlmIChkcm1fb2JqZWN0X3Byb3BlcnR5X3NldF92YWx1ZSgmY29ubmVjdG9y LT5iYXNlLCBwcm9wZXJ0eSwKLQkJCQkJCQkJCXZhbHVlKSkKLQkJCWdvdG8gc2V0X3Byb3BfZXJy b3I7Ci0JCWVsc2UKLQkJCWdtYV9iYWNrbGlnaHRfc2V0KGVuY29kZXItPmRldiwgdmFsdWUpOwot CX0KLXNldF9wcm9wX2RvbmU6Ci0JcmV0dXJuIDA7Ci1zZXRfcHJvcF9lcnJvcjoKLQlyZXR1cm4g LTE7Ci19Ci0KLXN0YXRpYyB2b2lkIG1kZmxkX2RzaV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBtZGZsZF9kc2lfY29ubmVjdG9y ICpkc2lfY29ubmVjdG9yID0KLQkJCQkJbWRmbGRfZHNpX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwot CXN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyOwotCi0JaWYgKCFkc2lfY29ubmVj dG9yKQotCQlyZXR1cm47Ci0JZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7Ci0J ZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Ci0Jc2VuZGVyID0gZHNpX2Nvbm5lY3Rv ci0+cGtnX3NlbmRlcjsKLQltZGZsZF9kc2lfcGtnX3NlbmRlcl9kZXN0cm95KHNlbmRlcik7Ci0J a2ZyZWUoZHNpX2Nvbm5lY3Rvcik7Ci19Ci0KLXN0YXRpYyBpbnQgbWRmbGRfZHNpX2Nvbm5lY3Rv cl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3Qg bWRmbGRfZHNpX2Nvbm5lY3RvciAqZHNpX2Nvbm5lY3RvciA9Ci0JCQkJbWRmbGRfZHNpX2Nvbm5l Y3Rvcihjb25uZWN0b3IpOwotCXN0cnVjdCBtZGZsZF9kc2lfY29uZmlnICpkc2lfY29uZmlnID0K LQkJCQltZGZsZF9kc2lfZ2V0X2NvbmZpZyhkc2lfY29ubmVjdG9yKTsKLQlzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqZml4ZWRfbW9kZSA9IGRzaV9jb25maWctPmZpeGVkX21vZGU7Ci0Jc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKmR1cF9tb2RlID0gTlVMTDsKLQlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gY29ubmVjdG9yLT5kZXY7Ci0KLQlpZiAoZml4ZWRfbW9kZSkgewotCQlkZXZfZGJnKGRl di0+ZGV2LCAiZml4ZWRfbW9kZSAlZHglZFxuIiwKLQkJCQlmaXhlZF9tb2RlLT5oZGlzcGxheSwg Zml4ZWRfbW9kZS0+dmRpc3BsYXkpOwotCQlkdXBfbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShk ZXYsIGZpeGVkX21vZGUpOwotCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgZHVwX21v ZGUpOwotCQlyZXR1cm4gMTsKLQl9Ci0JRFJNX0VSUk9SKCJEaWRuJ3QgZ2V0IGFueSBtb2RlcyFc biIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMgbWRmbGRf ZHNpX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is Ci0JCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKLXsKLQlzdHJ1Y3QgbWRmbGRf ZHNpX2Nvbm5lY3RvciAqZHNpX2Nvbm5lY3RvciA9Ci0JCQkJCW1kZmxkX2RzaV9jb25uZWN0b3Io Y29ubmVjdG9yKTsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZyA9Ci0JCQkJ CW1kZmxkX2RzaV9nZXRfY29uZmlnKGRzaV9jb25uZWN0b3IpOwotCXN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICpmaXhlZF9tb2RlID0gZHNpX2NvbmZpZy0+Zml4ZWRfbW9kZTsKLQotCWlmIChtb2Rl LT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikKLQkJcmV0dXJuIE1PREVfTk9fREJMRVND QU47Ci0KLQlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJcmV0 dXJuIE1PREVfTk9fSU5URVJMQUNFOwotCi0JLyoqCi0JICogRklYTUU6IGN1cnJlbnQgREMgaGFz IG5vIGZpdHRpbmcgdW5pdCwgcmVqZWN0IGFueSBtb2RlIHNldHRpbmcKLQkgKiByZXF1ZXN0Ci0J ICogV2lsbCBmaWd1cmUgb3V0IGEgd2F5IHRvIGRvIHVwLXNjYWxpbmcocGFuZWwgZml0dGluZykg bGF0ZXIuCi0JICoqLwotCWlmIChmaXhlZF9tb2RlKSB7Ci0JCWlmIChtb2RlLT5oZGlzcGxheSAh PSBmaXhlZF9tb2RlLT5oZGlzcGxheSkKLQkJCXJldHVybiBNT0RFX1BBTkVMOwotCi0JCWlmICht b2RlLT52ZGlzcGxheSAhPSBmaXhlZF9tb2RlLT52ZGlzcGxheSkKLQkJCXJldHVybiBNT0RFX1BB TkVMOwotCX0KLQotCXJldHVybiBNT0RFX09LOwotfQotCi1zdGF0aWMgc3RydWN0IGRybV9lbmNv ZGVyICptZGZsZF9kc2lfY29ubmVjdG9yX2Jlc3RfZW5jb2RlcigKLQkJCQlzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBtZGZsZF9kc2lfY29ubmVjdG9yICpkc2lf Y29ubmVjdG9yID0KLQkJCQltZGZsZF9kc2lfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0Jc3RydWN0 IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWcgPQotCQkJCW1kZmxkX2RzaV9nZXRfY29uZmln KGRzaV9jb25uZWN0b3IpOwotCXJldHVybiAmZHNpX2NvbmZpZy0+ZW5jb2Rlci0+YmFzZS5iYXNl OwotfQotCi0vKkRTSSBjb25uZWN0b3IgZnVuY3MqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f Y29ubmVjdG9yX2Z1bmNzIG1kZmxkX2RzaV9jb25uZWN0b3JfZnVuY3MgPSB7Ci0JLmRwbXMgPSBk cm1faGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAotCS5kZXRlY3QgPSBtZGZsZF9kc2lfY29ubmVjdG9y X2RldGVjdCwKLQkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rv cl9tb2RlcywKLQkuc2V0X3Byb3BlcnR5ID0gbWRmbGRfZHNpX2Nvbm5lY3Rvcl9zZXRfcHJvcGVy dHksCi0JLmRlc3Ryb3kgPSBtZGZsZF9kc2lfY29ubmVjdG9yX2Rlc3Ryb3ksCi19OwotCi0vKkRT SSBjb25uZWN0b3IgaGVscGVyIGZ1bmNzKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9oZWxwZXJfZnVuY3MKLQltZGZsZF9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsK LQkuZ2V0X21vZGVzID0gbWRmbGRfZHNpX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCi0JLm1vZGVfdmFs aWQgPSBtZGZsZF9kc2lfY29ubmVjdG9yX21vZGVfdmFsaWQsCi0JLmJlc3RfZW5jb2RlciA9IG1k ZmxkX2RzaV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyLAotfTsKLQotc3RhdGljIGludCBtZGZsZF9k c2lfZ2V0X2RlZmF1bHRfY29uZmlnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0 IG1kZmxkX2RzaV9jb25maWcgKmNvbmZpZywgaW50IHBpcGUpCi17Ci0JaWYgKCFkZXYgfHwgIWNv bmZpZykgewotCQlEUk1fRVJST1IoIkludmFsaWQgcGFyYW1ldGVycyIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQljb25maWctPmJwcCA9IDI0OwotCWlmIChtZGZsZF9nZXRfcGFuZWxfdHlw ZShkZXYsIHBpcGUpID09IFRDMzU4NzZYKQotCQljb25maWctPmxhbmVfY291bnQgPSA0OwotCWVs c2UKLQkJY29uZmlnLT5sYW5lX2NvdW50ID0gMjsKLQljb25maWctPmNoYW5uZWxfbnVtID0gMDsK LQotCWlmIChtZGZsZF9nZXRfcGFuZWxfdHlwZShkZXYsIHBpcGUpID09IFRNRF9WSUQpCi0JCWNv bmZpZy0+dmlkZW9fbW9kZSA9IE1ERkxEX0RTSV9WSURFT19OT05fQlVSU1RfTU9ERV9TWU5DX1BV TFNFOwotCWVsc2UgaWYgKG1kZmxkX2dldF9wYW5lbF90eXBlKGRldiwgcGlwZSkgPT0gVEMzNTg3 NlgpCi0JCWNvbmZpZy0+dmlkZW9fbW9kZSA9Ci0JCQkJTURGTERfRFNJX1ZJREVPX05PTl9CVVJT VF9NT0RFX1NZTkNfRVZFTlRTOwotCWVsc2UKLQkJY29uZmlnLT52aWRlb19tb2RlID0gTURGTERf RFNJX1ZJREVPX0JVUlNUX01PREU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IG1kZmxkX2RzaV9w YW5lbF9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgaW50IHBpcGUpCi17Ci0Jc3RydWN0 IGRldmljZSAqZGV2ID0gZGRldi0+ZGV2OwotCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kOwotCi0J LyoKLQkgKiBSYWlzZSB0aGUgR1BJTyByZXNldCBsaW5lIGZvciB0aGUgY29ycmVzcG9uZGluZyBw aXBlIHRvIEhJR0gsCi0JICogdGhpcyBpcyBwcm9iYWJseSBiZWNhdXNlIGl0IGlzIGFjdGl2ZSBs b3cgc28gdGhpcyB0YWtlcyB0aGUKLQkgKiByZXNwZWN0aXZlIHBpcGUgb3V0IG9mIHJlc2V0LiAo V2UgaGF2ZSBubyBjb2RlIHRvIHB1dCBpdCBiYWNrCi0JICogaW50byByZXNldCBpbiB0aGlzIGRy aXZlci4pCi0JICovCi0Jc3dpdGNoIChwaXBlKSB7Ci0JY2FzZSAwOgotCQlncGlvZCA9IGdwaW9k X2dldChkZXYsICJkc2ktcGlwZTAtcmVzZXQiLCBHUElPRF9PVVRfSElHSCk7Ci0JCWlmIChJU19F UlIoZ3Bpb2QpKQotCQkJcmV0dXJuIFBUUl9FUlIoZ3Bpb2QpOwotCQlicmVhazsKLQljYXNlIDI6 Ci0JCWdwaW9kID0gZ3Bpb2RfZ2V0KGRldiwgImRzaS1waXBlMi1yZXNldCIsIEdQSU9EX09VVF9I SUdIKTsKLQkJaWYgKElTX0VSUihncGlvZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihncGlvZCk7Ci0J CWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9ERVZfRVJST1IoZGV2LCAiSW52YWxpZCBvdXRwdXQg cGlwZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlncGlvZF9wdXQoZ3Bpb2QpOwotCi0J LyogRmx1c2ggcG9zdGVkIHdyaXRlcyBvbiB0aGUgZGV2aWNlICovCi0JZ3Bpb2QgPSBncGlvZF9n ZXQoZGV2LCAiZHNpLXBpcGUwLXJlc2V0IiwgR1BJT0RfQVNJUyk7Ci0JaWYgKElTX0VSUihncGlv ZCkpCi0JCXJldHVybiBQVFJfRVJSKGdwaW9kKTsKLQlncGlvZF9nZXRfdmFsdWUoZ3Bpb2QpOwot CWdwaW9kX3B1dChncGlvZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIE1JUEkgb3V0cHV0 IGluaXQKLSAqIEBkZXYgZHJtIGRldmljZQotICogQHBpcGUgcGlwZSBudW1iZXIuIDAgb3IgMgot ICogQGNvbmZpZwotICoKLSAqIERvIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhIE1JUEkgb3V0cHV0 LCBpbmNsdWRpbmcgY3JlYXRlIERSTSBtb2RlIG9iamVjdHMKLSAqIGluaXRpYWxpemF0aW9uIG9m IERTSSBvdXRwdXQgb24gQHBpcGUKLSAqLwotdm9pZCBtZGZsZF9kc2lfb3V0cHV0X2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgIGludCBwaXBlLAotCQkJICAgY29uc3Qgc3RydWN0 IHBhbmVsX2Z1bmNzICpwX3ZpZF9mdW5jcykKLXsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAq ZHNpX2NvbmZpZzsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2Nvbm5lY3RvciAqZHNpX2Nvbm5lY3RvcjsK LQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCXN0cnVjdCBtZGZsZF9kc2lfZW5j b2RlciAqZW5jb2RlcjsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHBhbmVsX2luZm8gZHNpX3BhbmVsX2luZm87Ci0JdTMyIHdp ZHRoX21tLCBoZWlnaHRfbW07Ci0KLQlkZXZfZGJnKGRldi0+ZGV2LCAiaW5pdCBEU0kgb3V0cHV0 IG9uIHBpcGUgJWRcbiIsIHBpcGUpOwotCi0JaWYgKHBpcGUgIT0gMCAmJiBwaXBlICE9IDIpIHsK LQkJRFJNX0VSUk9SKCJJbnZhbGlkIHBhcmFtZXRlclxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkv KmNyZWF0ZSBhIG5ldyBjb25uZWN0b3IqLwotCWRzaV9jb25uZWN0b3IgPSBremFsbG9jKHNpemVv ZihzdHJ1Y3QgbWRmbGRfZHNpX2Nvbm5lY3RvciksIEdGUF9LRVJORUwpOwotCWlmICghZHNpX2Nv bm5lY3RvcikgewotCQlEUk1fRVJST1IoIk5vIG1lbW9yeSIpOwotCQlyZXR1cm47Ci0JfQotCi0J ZHNpX2Nvbm5lY3Rvci0+cGlwZSA9ICBwaXBlOwotCi0JZHNpX2NvbmZpZyA9IGt6YWxsb2Moc2l6 ZW9mKHN0cnVjdCBtZGZsZF9kc2lfY29uZmlnKSwKLQkJCUdGUF9LRVJORUwpOwotCWlmICghZHNp X2NvbmZpZykgewotCQlEUk1fRVJST1IoImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIERTSSBj b25maWdcbiIpOwotCQlnb3RvIGRzaV9pbml0X2VycjA7Ci0JfQotCW1kZmxkX2RzaV9nZXRfZGVm YXVsdF9jb25maWcoZGV2LCBkc2lfY29uZmlnLCBwaXBlKTsKLQotCWRzaV9jb25uZWN0b3ItPnBy aXZhdGUgPSBkc2lfY29uZmlnOwotCi0JZHNpX2NvbmZpZy0+Y2hhbmdlZCA9IDE7Ci0JZHNpX2Nv bmZpZy0+ZGV2ID0gZGV2OwotCi0JZHNpX2NvbmZpZy0+Zml4ZWRfbW9kZSA9IHBfdmlkX2Z1bmNz LT5nZXRfY29uZmlnX21vZGUoZGV2KTsKLQlpZiAocF92aWRfZnVuY3MtPmdldF9wYW5lbF9pbmZv KGRldiwgcGlwZSwgJmRzaV9wYW5lbF9pbmZvKSkKLQkJCWdvdG8gZHNpX2luaXRfZXJyMDsKLQot CXdpZHRoX21tID0gZHNpX3BhbmVsX2luZm8ud2lkdGhfbW07Ci0JaGVpZ2h0X21tID0gZHNpX3Bh bmVsX2luZm8uaGVpZ2h0X21tOwotCi0JZHNpX2NvbmZpZy0+bW9kZSA9IGRzaV9jb25maWctPmZp eGVkX21vZGU7Ci0JZHNpX2NvbmZpZy0+Y29ubmVjdG9yID0gZHNpX2Nvbm5lY3RvcjsKLQotCWlm ICghZHNpX2NvbmZpZy0+Zml4ZWRfbW9kZSkgewotCQlEUk1fRVJST1IoIk5vIHBhbmVsIGZpeGVk IG1vZGUgd2FzIGZvdW5kXG4iKTsKLQkJZ290byBkc2lfaW5pdF9lcnIwOwotCX0KLQotCWlmIChw aXBlICYmIGRldl9wcml2LT5kc2lfY29uZmlnc1swXSkgewotCQlkc2lfY29uZmlnLT5kdnJfaWNf aW5pdGVkID0gMDsKLQkJZGV2X3ByaXYtPmRzaV9jb25maWdzWzFdID0gZHNpX2NvbmZpZzsKLQl9 IGVsc2UgaWYgKHBpcGUgPT0gMCkgewotCQlkc2lfY29uZmlnLT5kdnJfaWNfaW5pdGVkID0gMTsK LQkJZGV2X3ByaXYtPmRzaV9jb25maWdzWzBdID0gZHNpX2NvbmZpZzsKLQl9IGVsc2UgewotCQlE Uk1fRVJST1IoIlRyeWluZyB0byBpbml0IE1JUEkxIGJlZm9yZSBNSVBJMFxuIik7Ci0JCWdvdG8g ZHNpX2luaXRfZXJyMDsKLQl9Ci0KLQotCWNvbm5lY3RvciA9ICZkc2lfY29ubmVjdG9yLT5iYXNl LmJhc2U7Ci0JZHNpX2Nvbm5lY3Rvci0+YmFzZS5zYXZlID0gbWRmbGRfZHNpX2Nvbm5lY3Rvcl9z YXZlOwotCWRzaV9jb25uZWN0b3ItPmJhc2UucmVzdG9yZSA9IG1kZmxkX2RzaV9jb25uZWN0b3Jf cmVzdG9yZTsKLQotCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwgJm1kZmxkX2Rz aV9jb25uZWN0b3JfZnVuY3MsCi0JCQkJCQlEUk1fTU9ERV9DT05ORUNUT1JfTFZEUyk7Ci0JZHJt X2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJm1kZmxkX2RzaV9jb25uZWN0b3JfaGVs cGVyX2Z1bmNzKTsKLQotCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnN1YnBpeGVsX29yZGVyID0g U3ViUGl4ZWxIb3Jpem9udGFsUkdCOwotCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21t ID0gd2lkdGhfbW07Ci0JY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tID0gaGVpZ2h0 X21tOwotCWNvbm5lY3Rvci0+aW50ZXJsYWNlX2FsbG93ZWQgPSBmYWxzZTsKLQljb25uZWN0b3It PmRvdWJsZXNjYW5fYWxsb3dlZCA9IGZhbHNlOwotCi0JLyphdHRhY2ggcHJvcGVydGllcyovCi0J ZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkoJmNvbm5lY3Rvci0+YmFzZSwKLQkJCQlkZXYtPm1v ZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSwKLQkJCQlEUk1fTU9ERV9TQ0FMRV9GVUxM U0NSRUVOKTsKLQlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgmY29ubmVjdG9yLT5iYXNlLAot CQkJCWRldl9wcml2LT5iYWNrbGlnaHRfcHJvcGVydHksCi0JCQkJTURGTERfRFNJX0JSSUdIVE5F U1NfTUFYX0xFVkVMKTsKLQotCS8qaW5pdCBEU0kgcGFja2FnZSBzZW5kZXIgb24gdGhpcyBvdXRw dXQqLwotCWlmIChtZGZsZF9kc2lfcGtnX3NlbmRlcl9pbml0KGRzaV9jb25uZWN0b3IsIHBpcGUp KSB7Ci0JCURSTV9FUlJPUigiUGFja2FnZSBTZW5kZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkIG9u IHBpcGUgJWRcbiIsCi0JCQkJCQkJCQlwaXBlKTsKLQkJZ290byBkc2lfaW5pdF9lcnIwOwotCX0K LQotCWVuY29kZXIgPSBtZGZsZF9kc2lfZHBpX2luaXQoZGV2LCBkc2lfY29ubmVjdG9yLCBwX3Zp ZF9mdW5jcyk7Ci0JaWYgKCFlbmNvZGVyKSB7Ci0JCURSTV9FUlJPUigiQ3JlYXRlIERQSSBlbmNv ZGVyIGZhaWxlZFxuIik7Ci0JCWdvdG8gZHNpX2luaXRfZXJyMTsKLQl9Ci0JZW5jb2Rlci0+cHJp dmF0ZSA9IGRzaV9jb25maWc7Ci0JZHNpX2NvbmZpZy0+ZW5jb2RlciA9IGVuY29kZXI7Ci0JZW5j b2Rlci0+YmFzZS50eXBlID0gKHBpcGUgPT0gMCkgPyBJTlRFTF9PVVRQVVRfTUlQSSA6Ci0JCUlO VEVMX09VVFBVVF9NSVBJMjsKLQlkcm1fY29ubmVjdG9yX3JlZ2lzdGVyKGNvbm5lY3Rvcik7Ci0J cmV0dXJuOwotCi0JLypUT0RPOiBhZGQgY29kZSB0byBkZXN0cm95IG91dHB1dHMgb24gZXJyb3Iq LwotZHNpX2luaXRfZXJyMToKLQkvKmRlc3Ryb3kgc2VuZGVyKi8KLQltZGZsZF9kc2lfcGtnX3Nl bmRlcl9kZXN0cm95KGRzaV9jb25uZWN0b3ItPnBrZ19zZW5kZXIpOwotCi0JZHJtX2Nvbm5lY3Rv cl9jbGVhbnVwKGNvbm5lY3Rvcik7Ci0KLQlrZnJlZShkc2lfY29uZmlnLT5maXhlZF9tb2RlKTsK LQlrZnJlZShkc2lfY29uZmlnKTsKLWRzaV9pbml0X2VycjA6Ci0Ja2ZyZWUoZHNpX2Nvbm5lY3Rv cik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9vdXRw dXQuaCBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNpX291dHB1dC5oCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzBkYjNjMjkwM2YuLjAwMDAwMDAwMDAwMAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RzaV9vdXRwdXQuaAorKysgL2Rldi9udWxsCkBA IC0xLDM3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTAgSW50ZWwgQ29ycG9yYXRp b24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAq IFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK LSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICog QXV0aG9yczoKLSAqIGppbSBsaXUgPGppbS5saXVAaW50ZWwuY29tPgotICogSmFja2llIExpPHlh b2RvbmcubGlAaW50ZWwuY29tPgotICovCi0KLSNpZm5kZWYgX19NREZMRF9EU0lfT1VUUFVUX0hf XwotI2RlZmluZSBfX01ERkxEX0RTSV9PVVRQVVRfSF9fCi0KLSNpbmNsdWRlIDxsaW51eC9iYWNr bGlnaHQuaD4KLQotI2luY2x1ZGUgPGFzbS9pbnRlbC1taWQuaD4KLQotI2luY2x1ZGUgPGRybS9k cm0uaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2VkaWQu aD4KLQotI2luY2x1ZGUgIm1kZmxkX291dHB1dC5oIgotI2luY2x1ZGUgInBzYl9kcnYuaCIKLSNp bmNsdWRlICJwc2JfaW50ZWxfZHJ2LmgiCi0jaW5jbHVkZSAicHNiX2ludGVsX3JlZy5oIgotCi0j ZGVmaW5lIEZMRF9NQVNLKHN0YXJ0LCBlbmQpCSgoKDEgPDwgKChzdGFydCkgLSAoZW5kKSArIDEp KSAtIDEpIDw8IChlbmQpKQotI2RlZmluZSBGTERfVkFMKHZhbCwgc3RhcnQsIGVuZCkgKCgodmFs KSA8PCAoZW5kKSkgJiBGTERfTUFTSyhzdGFydCwgZW5kKSkKLSNkZWZpbmUgRkxEX0dFVCh2YWws IHN0YXJ0LCBlbmQpICgoKHZhbCkgJiBGTERfTUFTSyhzdGFydCwgZW5kKSkgPj4gKGVuZCkpCi0j ZGVmaW5lIEZMRF9NT0Qob3JpZywgdmFsLCBzdGFydCwgZW5kKSBcCi0JKCgob3JpZykgJiB+RkxE X01BU0soc3RhcnQsIGVuZCkpIHwgRkxEX1ZBTCh2YWwsIHN0YXJ0LCBlbmQpKQotCi0jZGVmaW5l IFJFR19GTERfTU9EKHJlZywgdmFsLCBzdGFydCwgZW5kKSBcCi0JUkVHX1dSSVRFKHJlZywgRkxE X01PRChSRUdfUkVBRChyZWcpLCB2YWwsIHN0YXJ0LCBlbmQpKQotCi1zdGF0aWMgaW5saW5lIGlu dCBSRUdJU1RFUl9GTERfV0FJVChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgcmVnLAotCQl1 MzIgdmFsLCBpbnQgc3RhcnQsIGludCBlbmQpCi17Ci0JaW50IHQgPSAxMDAwMDA7Ci0KLQl3aGls ZSAoRkxEX0dFVChSRUdfUkVBRChyZWcpLCBzdGFydCwgZW5kKSAhPSB2YWwpIHsKLQkJaWYgKC0t dCA9PSAwKQotCQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgUkVH X0ZMRF9XQUlUKHJlZywgdmFsLCBzdGFydCwgZW5kKSBcCi0JUkVHSVNURVJfRkxEX1dBSVQoZGV2 LCByZWcsIHZhbCwgc3RhcnQsIGVuZCkKLQotI2RlZmluZSBSRUdfQklUX1dBSVQocmVnLCB2YWws IGJpdG51bSkgXAotCVJFR0lTVEVSX0ZMRF9XQUlUKGRldiwgcmVnLCB2YWwsIGJpdG51bSwgYml0 bnVtKQotCi0jZGVmaW5lIE1ERkxEX0RTSV9CUklHSFRORVNTX01BWF9MRVZFTCAxMDAKLQotI2lm ZGVmIERFQlVHCi0jZGVmaW5lIENIRUNLX1BJUEUocGlwZSkgKHsJCQlcCi0JY29uc3QgdHlwZW9m KHBpcGUpIF9fcGlwZSA9IChwaXBlKTsJXAotCUJVR19PTihfX3BpcGUgIT0gMCAmJiBfX3BpcGUg IT0gMik7CVwKLQlfX3BpcGU7CX0pCi0jZWxzZQotI2RlZmluZSBDSEVDS19QSVBFKHBpcGUpIChw aXBlKQotI2VuZGlmCi0KLS8qCi0gKiBBY3R1YWwgTUlQSUEtPk1JUElDIHJlZyBvZmZzZXQgaXMg MHg4MDAsIHZhbHVlIDB4NDAwIGlzIHZhbGlkIGZvciAwIGFuZCAyCi0gKi8KLSNkZWZpbmUgUkVH X09GRlNFVChwaXBlKSAoQ0hFQ0tfUElQRShwaXBlKSAqIDB4NDAwKQotCi0vKiBtZGZsZCBEU0kg Y29udHJvbGxlciByZWdpc3RlcnMgKi8KLSNkZWZpbmUgTUlQSV9ERVZJQ0VfUkVBRFlfUkVHKHBp cGUpCQkoMHhiMDAwICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9JTlRSX1NUQVRf UkVHKHBpcGUpCQkoMHhiMDA0ICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9JTlRS X0VOX1JFRyhwaXBlKQkJCSgweGIwMDggKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBNSVBJ X0RTSV9GVU5DX1BSR19SRUcocGlwZSkJCSgweGIwMGMgKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2Rl ZmluZSBNSVBJX0hTX1RYX1RJTUVPVVRfUkVHKHBpcGUpCQkoMHhiMDEwICsgUkVHX09GRlNFVChw aXBlKSkKLSNkZWZpbmUgTUlQSV9MUF9SWF9USU1FT1VUX1JFRyhwaXBlKQkJKDB4YjAxNCArIFJF R19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElfVFVSTl9BUk9VTkRfVElNRU9VVF9SRUcocGlw ZSkJKDB4YjAxOCArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElfREVWSUNFX1JFU0VU X1RJTUVSX1JFRyhwaXBlKQkoMHhiMDFjICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQ SV9EUElfUkVTT0xVVElPTl9SRUcocGlwZSkJCSgweGIwMjAgKyBSRUdfT0ZGU0VUKHBpcGUpKQot I2RlZmluZSBNSVBJX0RCSV9GSUZPX1RIUk9UVExFX1JFRyhwaXBlKQkoMHhiMDI0ICsgUkVHX09G RlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9IU1lOQ19DT1VOVF9SRUcocGlwZSkJCSgweGIwMjgg KyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBNSVBJX0hCUF9DT1VOVF9SRUcocGlwZSkJCSgw eGIwMmMgKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBNSVBJX0hGUF9DT1VOVF9SRUcocGlw ZSkJCSgweGIwMzAgKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBNSVBJX0hBQ1RJVkVfQ09V TlRfUkVHKHBpcGUpCQkoMHhiMDM0ICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9W U1lOQ19DT1VOVF9SRUcocGlwZSkJCSgweGIwMzggKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmlu ZSBNSVBJX1ZCUF9DT1VOVF9SRUcocGlwZSkJCSgweGIwM2MgKyBSRUdfT0ZGU0VUKHBpcGUpKQot I2RlZmluZSBNSVBJX1ZGUF9DT1VOVF9SRUcocGlwZSkJCSgweGIwNDAgKyBSRUdfT0ZGU0VUKHBp cGUpKQotI2RlZmluZSBNSVBJX0hJR0hfTE9XX1NXSVRDSF9DT1VOVF9SRUcocGlwZSkJKDB4YjA0 NCArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElfRFBJX0NPTlRST0xfUkVHKHBpcGUp CQkoMHhiMDQ4ICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9EUElfREFUQV9SRUco cGlwZSkJCQkoMHhiMDRjICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9JTklUX0NP VU5UX1JFRyhwaXBlKQkJKDB4YjA1MCArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElf TUFYX1JFVFVSTl9QQUNLX1NJWkVfUkVHKHBpcGUpCSgweGIwNTQgKyBSRUdfT0ZGU0VUKHBpcGUp KQotI2RlZmluZSBNSVBJX1ZJREVPX01PREVfRk9STUFUX1JFRyhwaXBlKQkoMHhiMDU4ICsgUkVH X09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9FT1RfRElTQUJMRV9SRUcocGlwZSkJCSgweGIw NWMgKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBNSVBJX0xQX0JZVEVDTEtfUkVHKHBpcGUp CQkoMHhiMDYwICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9MUF9HRU5fREFUQV9S RUcocGlwZSkJCSgweGIwNjQgKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBNSVBJX0hTX0dF Tl9EQVRBX1JFRyhwaXBlKQkJKDB4YjA2OCArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1J UElfTFBfR0VOX0NUUkxfUkVHKHBpcGUpCQkoMHhiMDZjICsgUkVHX09GRlNFVChwaXBlKSkKLSNk ZWZpbmUgTUlQSV9IU19HRU5fQ1RSTF9SRUcocGlwZSkJCSgweGIwNzAgKyBSRUdfT0ZGU0VUKHBp cGUpKQotI2RlZmluZSBNSVBJX0dFTl9GSUZPX1NUQVRfUkVHKHBpcGUpCQkoMHhiMDc0ICsgUkVH X09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9IU19MU19EQklfRU5BQkxFX1JFRyhwaXBlKQkJ KDB4YjA3OCArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElfRFBIWV9QQVJBTV9SRUco cGlwZSkJCSgweGIwODAgKyBSRUdfT0ZGU0VUKHBpcGUpKQotI2RlZmluZSBNSVBJX0RCSV9CV19D VFJMX1JFRyhwaXBlKQkJKDB4YjA4NCArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElf Q0xLX0xBTkVfU1dJVENIX1RJTUVfQ05UX1JFRyhwaXBlKQkoMHhiMDg4ICsgUkVHX09GRlNFVChw aXBlKSkKLQotI2RlZmluZSBNSVBJX0NUUkxfUkVHKHBpcGUpCQkJKDB4YjEwNCArIFJFR19PRkZT RVQocGlwZSkpCi0jZGVmaW5lIE1JUElfREFUQV9BRERfUkVHKHBpcGUpCQkJKDB4YjEwOCArIFJF R19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElfREFUQV9MRU5fUkVHKHBpcGUpCQkJKDB4YjEw YyArIFJFR19PRkZTRVQocGlwZSkpCi0jZGVmaW5lIE1JUElfQ01EX0FERF9SRUcocGlwZSkJCQko MHhiMTEwICsgUkVHX09GRlNFVChwaXBlKSkKLSNkZWZpbmUgTUlQSV9DTURfTEVOX1JFRyhwaXBl KQkJCSgweGIxMTQgKyBSRUdfT0ZGU0VUKHBpcGUpKQotCi0vKiBub24tdW5pZm9ybSByZWcgb2Zm c2V0ICovCi0jZGVmaW5lIE1JUElfUE9SVF9DT05UUk9MKHBpcGUpCQkoQ0hFQ0tfUElQRShwaXBl KSA/IE1JUElfQyA6IE1JUEkpCi0KLSNkZWZpbmUgRFNJX0RFVklDRV9SRUFEWQkJCQkoMHgxKQot I2RlZmluZSBEU0lfUE9XRVJfU1RBVEVfVUxQU19FTlRFUgkJCSgweDIgPDwgMSkKLSNkZWZpbmUg RFNJX1BPV0VSX1NUQVRFX1VMUFNfRVhJVAkJCSgweDEgPDwgMSkKLSNkZWZpbmUgRFNJX1BPV0VS X1NUQVRFX1VMUFNfT0ZGU0VUCQkJKDB4MSkKLQotCi0jZGVmaW5lIERTSV9PTkVfREFUQV9MQU5F CQkJCQkoMHgxKQotI2RlZmluZSBEU0lfVFdPX0RBVEFfTEFORQkJCQkJKDB4MikKLSNkZWZpbmUg RFNJX1RIUkVFX0RBVEFfTEFORQkJCQkJKDBYMykKLSNkZWZpbmUgRFNJX0ZPVVJfREFUQV9MQU5F CQkJCQkoMHg0KQotI2RlZmluZSBEU0lfRFBJX1ZJUlRfQ0hBTk5FTF9PRkZTRVQJCQkoMHgzKQot I2RlZmluZSBEU0lfREJJX1ZJUlRfQ0hBTk5FTF9PRkZTRVQJCQkoMHg1KQotI2RlZmluZSBEU0lf RFBJX0NPTE9SX0ZPUk1BVF9SR0I1NjUJCQkoMHgwMSA8PCA3KQotI2RlZmluZSBEU0lfRFBJX0NP TE9SX0ZPUk1BVF9SR0I2NjYJCQkoMHgwMiA8PCA3KQotI2RlZmluZSBEU0lfRFBJX0NPTE9SX0ZP Uk1BVF9SR0I2NjZfVU5QQUNLCQkoMHgwMyA8PCA3KQotI2RlZmluZSBEU0lfRFBJX0NPTE9SX0ZP Uk1BVF9SR0I4ODgJCQkoMHgwNCA8PCA3KQotI2RlZmluZSBEU0lfREJJX0NPTE9SX0ZPUk1BVF9P UFRJT04yCQkJKDB4MDUgPDwgMTMpCi0KLSNkZWZpbmUgRFNJX0lOVFJfU1RBVEVfUlhTT1RFUlJP UgkJCUJJVCgwKQotCi0jZGVmaW5lIERTSV9JTlRSX1NUQVRFX1NQTF9QS0dfU0VOVAkJCUJJVCgz MCkKLSNkZWZpbmUgRFNJX0lOVFJfU1RBVEVfVEUJCQkJQklUKDMxKQotCi0jZGVmaW5lIERTSV9I U19UWF9USU1FT1VUX01BU0sJCQkJKDB4ZmZmZmZmKQotCi0jZGVmaW5lIERTSV9MUF9SWF9USU1F T1VUX01BU0sJCQkJKDB4ZmZmZmZmKQotCi0jZGVmaW5lIERTSV9UVVJOX0FST1VORF9USU1FT1VU X01BU0sJCSgweDNmKQotCi0jZGVmaW5lIERTSV9SRVNFVF9USU1FUl9NQVNLCQkJCSgweGZmZmYp Ci0KLSNkZWZpbmUgRFNJX0RCSV9GSUZPX1dNX0hBTEYJCQkJKDB4MCkKLSNkZWZpbmUgRFNJX0RC SV9GSUZPX1dNX1FVQVJURVIJCQkJKDB4MSkKLSNkZWZpbmUgRFNJX0RCSV9GSUZPX1dNX0xPVwkJ CQkJKDB4MikKLQotI2RlZmluZSBEU0lfRFBJX1RJTUlOR19NQVNLCQkJCQkoMHhmZmZmKQotCi0j ZGVmaW5lIERTSV9JTklUX1RJTUVSX01BU0sJCQkJCSgweGZmZmYpCi0KLSNkZWZpbmUgRFNJX0RC SV9SRVRVUk5fUEFDS19TSVpFX01BU0sJCSgweDNmZikKLQotI2RlZmluZSBEU0lfTFBfQllURUNM S19NQVNLCQkJCQkoMHgwZmZmZikKLQotI2RlZmluZSBEU0lfSFNfQ1RSTF9HRU5fU0hPUlRfVzAJ CQkoMHgwMykKLSNkZWZpbmUgRFNJX0hTX0NUUkxfR0VOX1NIT1JUX1cxCQkJKDB4MTMpCi0jZGVm aW5lIERTSV9IU19DVFJMX0dFTl9TSE9SVF9XMgkJCSgweDIzKQotI2RlZmluZSBEU0lfSFNfQ1RS TF9HRU5fUjAJCQkJCSgweDA0KQotI2RlZmluZSBEU0lfSFNfQ1RSTF9HRU5fUjEJCQkJCSgweDE0 KQotI2RlZmluZSBEU0lfSFNfQ1RSTF9HRU5fUjIJCQkJCSgweDI0KQotI2RlZmluZSBEU0lfSFNf Q1RSTF9HRU5fTE9OR19XCQkJCSgweDI5KQotI2RlZmluZSBEU0lfSFNfQ1RSTF9NQ1NfU0hPUlRf VzAJCQkoMHgwNSkKLSNkZWZpbmUgRFNJX0hTX0NUUkxfTUNTX1NIT1JUX1cxCQkJKDB4MTUpCi0j ZGVmaW5lIERTSV9IU19DVFJMX01DU19SMAkJCQkJKDB4MDYpCi0jZGVmaW5lIERTSV9IU19DVFJM X01DU19MT05HX1cJCQkJKDB4MzkpCi0jZGVmaW5lIERTSV9IU19DVFJMX1ZDX09GRlNFVAkJCQko MHgwNikKLSNkZWZpbmUgRFNJX0hTX0NUUkxfV0NfT0ZGU0VUCQkJCSgweDA4KQotCi0jZGVmaW5l CURTSV9GSUZPX0dFTl9IU19EQVRBX0ZVTEwJCQlCSVQoMCkKLSNkZWZpbmUgRFNJX0ZJRk9fR0VO X0hTX0RBVEFfSEFMRl9FTVBUWQkJQklUKDEpCi0jZGVmaW5lIERTSV9GSUZPX0dFTl9IU19EQVRB X0VNUFRZCQkJQklUKDIpCi0jZGVmaW5lIERTSV9GSUZPX0dFTl9MUF9EQVRBX0ZVTEwJCQlCSVQo OCkKLSNkZWZpbmUgRFNJX0ZJRk9fR0VOX0xQX0RBVEFfSEFMRl9FTVBUWQkJQklUKDkpCi0jZGVm aW5lIERTSV9GSUZPX0dFTl9MUF9EQVRBX0VNUFRZCQkJQklUKDEwKQotI2RlZmluZSBEU0lfRklG T19HRU5fSFNfQ1RSTF9GVUxMCQkJQklUKDE2KQotI2RlZmluZSBEU0lfRklGT19HRU5fSFNfQ1RS TF9IQUxGX0VNUFRZCQlCSVQoMTcpCi0jZGVmaW5lIERTSV9GSUZPX0dFTl9IU19DVFJMX0VNUFRZ CQkJQklUKDE4KQotI2RlZmluZSBEU0lfRklGT19HRU5fTFBfQ1RSTF9GVUxMCQkJQklUKDI0KQot I2RlZmluZSBEU0lfRklGT19HRU5fTFBfQ1RSTF9IQUxGX0VNUFRZCQlCSVQoMjUpCi0jZGVmaW5l IERTSV9GSUZPX0dFTl9MUF9DVFJMX0VNUFRZCQkJQklUKDI2KQotI2RlZmluZSBEU0lfRklGT19E QklfRU1QVFkJCQkJCUJJVCgyNykKLSNkZWZpbmUgRFNJX0ZJRk9fRFBJX0VNUFRZCQkJCQlCSVQo MjgpCi0KLSNkZWZpbmUgRFNJX0RCSV9IU19MUF9TV0lUQ0hfTUFTSwkJCSgweDEpCi0KLSNkZWZp bmUgRFNJX0hTX0xQX1NXSVRDSF9DT1VOVEVSX09GRlNFVAkJKDB4MCkKLSNkZWZpbmUgRFNJX0xQ X0hTX1NXSVRDSF9DT1VOVEVSX09GRlNFVAkJKDB4MTYpCi0KLSNkZWZpbmUgRFNJX0RQSV9DVFJM X0hTX1NIVVRET1dOCQkJKDB4MDAwMDAwMDEpCi0jZGVmaW5lIERTSV9EUElfQ1RSTF9IU19UVVJO X09OCQkJCSgweDAwMDAwMDAyKQotCi0vKmRzaSBwb3dlciBtb2RlcyovCi0jZGVmaW5lIERTSV9Q T1dFUl9NT0RFX0RJU1BMQVlfT04JQklUKDIpCi0jZGVmaW5lIERTSV9QT1dFUl9NT0RFX05PUk1B TF9PTglCSVQoMykKLSNkZWZpbmUgRFNJX1BPV0VSX01PREVfU0xFRVBfT1VUCUJJVCg0KQotI2Rl ZmluZSBEU0lfUE9XRVJfTU9ERV9QQVJUSUFMX09OCUJJVCg1KQotI2RlZmluZSBEU0lfUE9XRVJf TU9ERV9JRExFX09OCQlCSVQoNikKLQotZW51bSB7Ci0JTURGTERfRFNJX1ZJREVPX05PTl9CVVJT VF9NT0RFX1NZTkNfUFVMU0UgPSAxLAotCU1ERkxEX0RTSV9WSURFT19OT05fQlVSU1RfTU9ERV9T WU5DX0VWRU5UUyA9IDIsCi0JTURGTERfRFNJX1ZJREVPX0JVUlNUX01PREUgPSAzLAotfTsKLQot I2RlZmluZSBEU0lfRFBJX0NPTVBMRVRFX0xBU1RfTElORQkJCUJJVCgyKQotI2RlZmluZSBEU0lf RFBJX0RJU0FCTEVfQlRBCQkJCQlCSVQoMykKLQotc3RydWN0IG1kZmxkX2RzaV9jb25uZWN0b3Ig ewotCXN0cnVjdCBnbWFfY29ubmVjdG9yIGJhc2U7Ci0KLQlpbnQgcGlwZTsKLQl2b2lkICpwcml2 YXRlOwotCXZvaWQgKnBrZ19zZW5kZXI7Ci0KLQkvKiBDb25uZWN0aW9uIHN0YXR1cyAqLwotCWVu dW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzOwotfTsKLQotc3RydWN0IG1kZmxkX2RzaV9l bmNvZGVyIHsKLQlzdHJ1Y3QgZ21hX2VuY29kZXIgYmFzZTsKLQl2b2lkICpwcml2YXRlOwotfTsK LQotLyoKLSAqIERTSSBjb25maWcsIGNvbnNpc3RzIG9mIG9uZSBEU0kgY29ubmVjdG9yLCB0d28g RFNJIGVuY29kZXJzLgotICogRFJNIHdpbGwgcGljayB1cCBvbiBEU0kgZW5jb2RlciBiYXNpbmcg b24gZGlmZmVyZW50cyBjb25maWdzLgotICovCi1zdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyB7Ci0J c3RydWN0IGRybV9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZml4ZWRf bW9kZTsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKLQotCXN0cnVjdCBtZGZsZF9k c2lfY29ubmVjdG9yICpjb25uZWN0b3I7Ci0Jc3RydWN0IG1kZmxkX2RzaV9lbmNvZGVyICplbmNv ZGVyOwotCi0JaW50IGNoYW5nZWQ7Ci0KLQlpbnQgYnBwOwotCWludCBsYW5lX2NvdW50OwotCS8q VmlydHVhbCBjaGFubmVsIG51bWJlciBmb3IgdGhpcyBlbmNvZGVyKi8KLQlpbnQgY2hhbm5lbF9u dW07Ci0JLyp2aWRlbyBtb2RlIGNvbmZpZ3VyZSovCi0JaW50IHZpZGVvX21vZGU7Ci0KLQlpbnQg ZHZyX2ljX2luaXRlZDsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1kZmxkX2RzaV9jb25u ZWN0b3IgKm1kZmxkX2RzaV9jb25uZWN0b3IoCi0JCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCi17Ci0Jc3RydWN0IGdtYV9jb25uZWN0b3IgKmdtYV9jb25uZWN0b3I7Ci0KLQlnbWFf Y29ubmVjdG9yID0gdG9fZ21hX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCi0JcmV0dXJuIGNvbnRh aW5lcl9vZihnbWFfY29ubmVjdG9yLCBzdHJ1Y3QgbWRmbGRfZHNpX2Nvbm5lY3RvciwgYmFzZSk7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1kZmxkX2RzaV9lbmNvZGVyICptZGZsZF9kc2lf ZW5jb2RlcigKLQkJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQotewotCXN0cnVjdCBnbWFf ZW5jb2RlciAqZ21hX2VuY29kZXI7Ci0KLQlnbWFfZW5jb2RlciA9IHRvX2dtYV9lbmNvZGVyKGVu Y29kZXIpOwotCi0JcmV0dXJuIGNvbnRhaW5lcl9vZihnbWFfZW5jb2Rlciwgc3RydWN0IG1kZmxk X2RzaV9lbmNvZGVyLCBiYXNlKTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWRmbGRfZHNp X2NvbmZpZyAqCi0JbWRmbGRfZHNpX2dldF9jb25maWcoc3RydWN0IG1kZmxkX2RzaV9jb25uZWN0 b3IgKmNvbm5lY3RvcikKLXsKLQlpZiAoIWNvbm5lY3RvcikKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0 dXJuIChzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqKWNvbm5lY3Rvci0+cHJpdmF0ZTsKLX0KLQot c3RhdGljIGlubGluZSB2b2lkICptZGZsZF9kc2lfZ2V0X3BrZ19zZW5kZXIoc3RydWN0IG1kZmxk X2RzaV9jb25maWcgKmNvbmZpZykKLXsKLQlzdHJ1Y3QgbWRmbGRfZHNpX2Nvbm5lY3RvciAqZHNp X2Nvbm5lY3RvcjsKLQotCWlmICghY29uZmlnKQotCQlyZXR1cm4gTlVMTDsKLQotCWRzaV9jb25u ZWN0b3IgPSBjb25maWctPmNvbm5lY3RvcjsKLQotCWlmICghZHNpX2Nvbm5lY3RvcikKLQkJcmV0 dXJuIE5VTEw7Ci0KLQlyZXR1cm4gZHNpX2Nvbm5lY3Rvci0+cGtnX3NlbmRlcjsKLX0KLQotc3Rh dGljIGlubGluZSBzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqCi0JbWRmbGRfZHNpX2VuY29kZXJf Z2V0X2NvbmZpZyhzdHJ1Y3QgbWRmbGRfZHNpX2VuY29kZXIgKmVuY29kZXIpCi17Ci0JaWYgKCFl bmNvZGVyKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gKHN0cnVjdCBtZGZsZF9kc2lfY29uZmln ICopZW5jb2Rlci0+cHJpdmF0ZTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWRmbGRfZHNp X2Nvbm5lY3RvciAqCi0JbWRmbGRfZHNpX2VuY29kZXJfZ2V0X2Nvbm5lY3RvcihzdHJ1Y3QgbWRm bGRfZHNpX2VuY29kZXIgKmVuY29kZXIpCi17Ci0Jc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmNv bmZpZzsKLQotCWlmICghZW5jb2RlcikKLQkJcmV0dXJuIE5VTEw7Ci0KLQljb25maWcgPSBtZGZs ZF9kc2lfZW5jb2Rlcl9nZXRfY29uZmlnKGVuY29kZXIpOwotCWlmICghY29uZmlnKQotCQlyZXR1 cm4gTlVMTDsKLQotCXJldHVybiBjb25maWctPmNvbm5lY3RvcjsKLX0KLQotc3RhdGljIGlubGlu ZSB2b2lkICptZGZsZF9kc2lfZW5jb2Rlcl9nZXRfcGtnX3NlbmRlcigKLQkJCQlzdHJ1Y3QgbWRm bGRfZHNpX2VuY29kZXIgKmVuY29kZXIpCi17Ci0Jc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRz aV9jb25maWc7Ci0KLQlkc2lfY29uZmlnID0gbWRmbGRfZHNpX2VuY29kZXJfZ2V0X2NvbmZpZyhl bmNvZGVyKTsKLQlpZiAoIWRzaV9jb25maWcpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIG1k ZmxkX2RzaV9nZXRfcGtnX3NlbmRlcihkc2lfY29uZmlnKTsKLX0KLQotc3RhdGljIGlubGluZSBp bnQgbWRmbGRfZHNpX2VuY29kZXJfZ2V0X3BpcGUoc3RydWN0IG1kZmxkX2RzaV9lbmNvZGVyICpl bmNvZGVyKQotewotCXN0cnVjdCBtZGZsZF9kc2lfY29ubmVjdG9yICpjb25uZWN0b3I7Ci0KLQlp ZiAoIWVuY29kZXIpCi0JCXJldHVybiAtMTsKLQotCWNvbm5lY3RvciA9IG1kZmxkX2RzaV9lbmNv ZGVyX2dldF9jb25uZWN0b3IoZW5jb2Rlcik7Ci0JaWYgKCFjb25uZWN0b3IpCi0JCXJldHVybiAt MTsKLQlyZXR1cm4gY29ubmVjdG9yLT5waXBlOwotfQotCi0vKiBFeHBvcnQgZnVuY3Rpb25zICov Ci1leHRlcm4gdm9pZCBtZGZsZF9kc2lfZ2VuX2ZpZm9fcmVhZHkoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKLQkJCQkJdTMyIGdlbl9maWZvX3N0YXRfcmVnLCB1MzIgZmlmb19zdGF0KTsKLWV4dGVy biB2b2lkIG1kZmxkX2RzaV9icmlnaHRuZXNzX2luaXQoc3RydWN0IG1kZmxkX2RzaV9jb25maWcg KmRzaV9jb25maWcsCi0JCQkJCWludCBwaXBlKTsKLWV4dGVybiB2b2lkIG1kZmxkX2RzaV9icmln aHRuZXNzX2NvbnRyb2woc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUsCi0JCQkJCWlu dCBsZXZlbCk7Ci1leHRlcm4gdm9pZCBtZGZsZF9kc2lfb3V0cHV0X2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKLQkJCQkJaW50IHBpcGUsCi0JCQkJCWNvbnN0IHN0cnVjdCBwYW5lbF9mdW5j cyAqcF92aWRfZnVuY3MpOwotZXh0ZXJuIHZvaWQgbWRmbGRfZHNpX2NvbnRyb2xsZXJfaW5pdChz dHJ1Y3QgbWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywKLQkJCQkJaW50IHBpcGUpOwotCi1l eHRlcm4gaW50IG1kZmxkX2RzaV9nZXRfcG93ZXJfbW9kZShzdHJ1Y3QgbWRmbGRfZHNpX2NvbmZp ZyAqZHNpX2NvbmZpZywKLQkJCQkJdTMyICptb2RlLCBib29sIGhzKTsKLWV4dGVybiBpbnQgbWRm bGRfZHNpX3BhbmVsX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKTsKLQot I2VuZGlmIC8qX19NREZMRF9EU0lfT1VUUFVUX0hfXyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZ21hNTAwL21kZmxkX2RzaV9wa2dfc2VuZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21h NTAwL21kZmxkX2RzaV9wa2dfc2VuZGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDZlMGRlODNlOWY3ZC4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAv bWRmbGRfZHNpX3BrZ19zZW5kZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDY3OSArMCwwIEBACi0v KgotICogQ29weXJpZ2h0IMKpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS Ci0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqIEphY2tp ZSBMaTx5YW9kb25nLmxpQGludGVsLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXku aD4KLSNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+Ci0KLSNpbmNsdWRlIDx2aWRlby9taXBpX2Rp c3BsYXkuaD4KLQotI2luY2x1ZGUgIm1kZmxkX2RzaV9kcGkuaCIKLSNpbmNsdWRlICJtZGZsZF9k c2lfb3V0cHV0LmgiCi0jaW5jbHVkZSAibWRmbGRfZHNpX3BrZ19zZW5kZXIuaCIKLQotI2RlZmlu ZSBNREZMRF9EU0lfUkVBRF9NQVhfQ09VTlQJCTUwMDAKLQotZW51bSB7Ci0JTURGTERfRFNJX1BB TkVMX01PREVfU0xFRVAgPSAweDEsCi19OwotCi1lbnVtIHsKLQlNREZMRF9EU0lfUEtHX1NFTkRF Ul9GUkVFID0gMHgwLAotCU1ERkxEX0RTSV9QS0dfU0VOREVSX0JVU1kgPSAweDEsCi19OwotCi1z dGF0aWMgY29uc3QgY2hhciAqY29uc3QgZHNpX2Vycm9yc1tdID0gewotCSJSWCBTT1QgRXJyb3Ii LAotCSJSWCBTT1QgU3luYyBFcnJvciIsCi0JIlJYIEVPVCBTeW5jIEVycm9yIiwKLQkiUlggRXNj YXBlIE1vZGUgRW50cnkgRXJyb3IiLAotCSJSWCBMUCBUWCBTeW5jIEVycm9yIiwKLQkiUlggSFMg UmVjZWl2ZSBUaW1lb3V0IEVycm9yIiwKLQkiUlggRmFsc2UgQ29udHJvbCBFcnJvciIsCi0JIlJY IEVDQyBTaW5nbGUgQml0IEVycm9yIiwKLQkiUlggRUNDIE11bHRpYml0IEVycm9yIiwKLQkiUlgg Q2hlY2tzdW0gRXJyb3IiLAotCSJSWCBEU0kgRGF0YSBUeXBlIE5vdCBSZWNvZ25pc2VkIiwKLQki UlggRFNJIFZDIElEIEludmFsaWQiLAotCSJUWCBGYWxzZSBDb250cm9sIEVycm9yIiwKLQkiVFgg RUNDIFNpbmdsZSBCaXQgRXJyb3IiLAotCSJUWCBFQ0MgTXVsdGliaXQgRXJyb3IiLAotCSJUWCBD aGVja3N1bSBFcnJvciIsCi0JIlRYIERTSSBEYXRhIFR5cGUgTm90IFJlY29nbmlzZWQiLAotCSJU WCBEU0kgVkMgSUQgaW52YWxpZCIsCi0JIkhpZ2ggQ29udGVudGlvbiIsCi0JIkxvdyBjb250ZW50 aW9uIiwKLQkiRFBJIEZJRk8gVW5kZXIgcnVuIiwKLQkiSFMgVFggVGltZW91dCIsCi0JIkxQIFJY IFRpbWVvdXQiLAotCSJUdXJuIEFyb3VuZCBBQ0sgVGltZW91dCIsCi0JIkFDSyBXaXRoIE5vIEVy cm9yIiwKLQkiUlggSW52YWxpZCBUWCBMZW5ndGgiLAotCSJSWCBQcm90IFZpb2xhdGlvbiIsCi0J IkhTIEdlbmVyaWMgV3JpdGUgRklGTyBGdWxsIiwKLQkiTFAgR2VuZXJpYyBXcml0ZSBGSUZPIEZ1 bGwiLAotCSJHZW5lcmljIFJlYWQgRGF0YSBBdmFpbCIsCi0JIlNwZWNpYWwgUGFja2V0IFNlbnQi LAotCSJUZWFyaW5nIEVmZmVjdCIsCi19OwotCi1zdGF0aWMgaW5saW5lIGludCB3YWl0X2Zvcl9n ZW5fZmlmb19lbXB0eShzdHJ1Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwKLQkJCQkJ CXUzMiBtYXNrKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBzZW5kZXItPmRldjsKLQl1 MzIgZ2VuX2ZpZm9fc3RhdF9yZWcgPSBzZW5kZXItPm1pcGlfZ2VuX2ZpZm9fc3RhdF9yZWc7Ci0J aW50IHJldHJ5ID0gMHhmZmZmOwotCi0Jd2hpbGUgKHJldHJ5LS0pIHsKLQkJaWYgKChtYXNrICYg UkVHX1JFQUQoZ2VuX2ZpZm9fc3RhdF9yZWcpKSA9PSBtYXNrKQotCQkJcmV0dXJuIDA7Ci0JCXVk ZWxheSgxMDApOwotCX0KLQlEUk1fRVJST1IoImZpZm8gaXMgTk9UIGVtcHR5IDB4JTA4eFxuIiwg UkVHX1JFQUQoZ2VuX2ZpZm9fc3RhdF9yZWcpKTsKLQlyZXR1cm4gLUVJTzsKLX0KLQotc3RhdGlj IGludCB3YWl0X2Zvcl9hbGxfZmlmb3NfZW1wdHkoc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVy ICpzZW5kZXIpCi17Ci0JcmV0dXJuIHdhaXRfZm9yX2dlbl9maWZvX2VtcHR5KHNlbmRlciwgKEJJ VCgyKSB8IEJJVCgxMCkgfCBCSVQoMTgpIHwKLQkJCQkJCUJJVCgyNikgfCBCSVQoMjcpIHwgQklU KDI4KSkpOwotfQotCi1zdGF0aWMgaW50IHdhaXRfZm9yX2xwX2ZpZm9zX2VtcHR5KHN0cnVjdCBt ZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyKQotewotCXJldHVybiB3YWl0X2Zvcl9nZW5fZmlm b19lbXB0eShzZW5kZXIsIChCSVQoMTApIHwgQklUKDI2KSkpOwotfQotCi1zdGF0aWMgaW50IHdh aXRfZm9yX2hzX2ZpZm9zX2VtcHR5KHN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVy KQotewotCXJldHVybiB3YWl0X2Zvcl9nZW5fZmlmb19lbXB0eShzZW5kZXIsIChCSVQoMikgfCBC SVQoMTgpKSk7Ci19Ci0KLXN0YXRpYyBpbnQgaGFuZGxlX2RzaV9lcnJvcihzdHJ1Y3QgbWRmbGRf ZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwgdTMyIG1hc2spCi17Ci0JdTMyIGludHJfc3RhdF9yZWcg PSBzZW5kZXItPm1pcGlfaW50cl9zdGF0X3JlZzsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g c2VuZGVyLT5kZXY7Ci0KLQlkZXZfZGJnKHNlbmRlci0+ZGV2LT5kZXYsICJIYW5kbGluZyBlcnJv ciAweCUwOHhcbiIsIG1hc2spOwotCi0Jc3dpdGNoIChtYXNrKSB7Ci0JY2FzZSBCSVQoMCk6Ci0J Y2FzZSBCSVQoMSk6Ci0JY2FzZSBCSVQoMik6Ci0JY2FzZSBCSVQoMyk6Ci0JY2FzZSBCSVQoNCk6 Ci0JY2FzZSBCSVQoNSk6Ci0JY2FzZSBCSVQoNik6Ci0JY2FzZSBCSVQoNyk6Ci0JY2FzZSBCSVQo OCk6Ci0JY2FzZSBCSVQoOSk6Ci0JY2FzZSBCSVQoMTApOgotCWNhc2UgQklUKDExKToKLQljYXNl IEJJVCgxMik6Ci0JY2FzZSBCSVQoMTMpOgotCQlkZXZfZGJnKHNlbmRlci0+ZGV2LT5kZXYsICJO byBBY3Rpb24gcmVxdWlyZWRcbiIpOwotCQlicmVhazsKLQljYXNlIEJJVCgxNCk6Ci0JCS8qd2Fp dCBmb3IgYWxsIGZpZm8gZW1wdHkqLwotCQkvKndhaXRfZm9yX2FsbF9maWZvc19lbXB0eShzZW5k ZXIpKi8KLQkJYnJlYWs7Ci0JY2FzZSBCSVQoMTUpOgotCQlkZXZfZGJnKHNlbmRlci0+ZGV2LT5k ZXYsICJObyBBY3Rpb24gcmVxdWlyZWRcbiIpOwotCQlicmVhazsKLQljYXNlIEJJVCgxNik6Ci0J CWJyZWFrOwotCWNhc2UgQklUKDE3KToKLQkJYnJlYWs7Ci0JY2FzZSBCSVQoMTgpOgotCWNhc2Ug QklUKDE5KToKLQkJZGV2X2RiZyhzZW5kZXItPmRldi0+ZGV2LCAiSGlnaC9Mb3cgY29udGVudGlv biBkZXRlY3RlZFxuIik7Ci0JCS8qd2FpdCBmb3IgY29udGVudGlvbiByZWNvdmVyeSB0aW1lKi8K LQkJLyptZGVsYXkoMTApOyovCi0JCS8qd2FpdCBmb3IgYWxsIGZpZm8gZW1wdHkqLwotCQlpZiAo MCkKLQkJCXdhaXRfZm9yX2FsbF9maWZvc19lbXB0eShzZW5kZXIpOwotCQlicmVhazsKLQljYXNl IEJJVCgyMCk6Ci0JCWRldl9kYmcoc2VuZGVyLT5kZXYtPmRldiwgIk5vIEFjdGlvbiByZXF1aXJl ZFxuIik7Ci0JCWJyZWFrOwotCWNhc2UgQklUKDIxKToKLQkJLyp3YWl0IGZvciBhbGwgZmlmbyBl bXB0eSovCi0JCS8qd2FpdF9mb3JfYWxsX2ZpZm9zX2VtcHR5KHNlbmRlcik7Ki8KLQkJYnJlYWs7 Ci0JY2FzZSBCSVQoMjIpOgotCQlicmVhazsKLQljYXNlIEJJVCgyMyk6Ci0JY2FzZSBCSVQoMjQp OgotCWNhc2UgQklUKDI1KToKLQljYXNlIEJJVCgyNik6Ci0JY2FzZSBCSVQoMjcpOgotCQlkZXZf ZGJnKHNlbmRlci0+ZGV2LT5kZXYsICJIUyBHZW4gZmlmbyBmdWxsXG4iKTsKLQkJUkVHX1dSSVRF KGludHJfc3RhdF9yZWcsIG1hc2spOwotCQl3YWl0X2Zvcl9oc19maWZvc19lbXB0eShzZW5kZXIp OwotCQlicmVhazsKLQljYXNlIEJJVCgyOCk6Ci0JCWRldl9kYmcoc2VuZGVyLT5kZXYtPmRldiwg IkxQIEdlbiBmaWZvIGZ1bGxcbiIpOwotCQlSRUdfV1JJVEUoaW50cl9zdGF0X3JlZywgbWFzayk7 Ci0JCXdhaXRfZm9yX2xwX2ZpZm9zX2VtcHR5KHNlbmRlcik7Ci0JCWJyZWFrOwotCWNhc2UgQklU KDI5KToKLQljYXNlIEJJVCgzMCk6Ci0JY2FzZSBCSVQoMzEpOgotCQlkZXZfZGJnKHNlbmRlci0+ ZGV2LT5kZXYsICJObyBBY3Rpb24gcmVxdWlyZWRcbiIpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAo bWFzayAmIFJFR19SRUFEKGludHJfc3RhdF9yZWcpKQotCQlkZXZfZGJnKHNlbmRlci0+ZGV2LT5k ZXYsCi0JCQkJIkNhbm5vdCBjbGVhbiBpbnRlcnJ1cHQgMHglMDh4XG4iLCBtYXNrKTsKLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIGludCBkc2lfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgbWRmbGRfZHNp X3BrZ19zZW5kZXIgKnNlbmRlcikKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gc2VuZGVy LT5kZXY7Ci0JdTMyIGludHJfc3RhdF9yZWcgPSBzZW5kZXItPm1pcGlfaW50cl9zdGF0X3JlZzsK LQl1MzIgbWFzazsKLQl1MzIgaW50cl9zdGF0OwotCWludCBpOwotCWludCBlcnIgPSAwOwotCi0J aW50cl9zdGF0ID0gUkVHX1JFQUQoaW50cl9zdGF0X3JlZyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwg MzI7IGkrKykgewotCQltYXNrID0gKDB4MDAwMDAwMDFVTCkgPDwgaTsKLQkJaWYgKGludHJfc3Rh dCAmIG1hc2spIHsKLQkJCWRldl9kYmcoc2VuZGVyLT5kZXYtPmRldiwgIltEU0ldOiAlc1xuIiwg ZHNpX2Vycm9yc1tpXSk7Ci0JCQllcnIgPSBoYW5kbGVfZHNpX2Vycm9yKHNlbmRlciwgbWFzayk7 Ci0JCQlpZiAoZXJyKQotCQkJCURSTV9FUlJPUigiQ2Fubm90IGhhbmRsZSBlcnJvclxuIik7Ci0J CX0KLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBzZW5kX3Nob3J0X3BrZyhzdHJ1 Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwgdTggZGF0YV90eXBlLAotCQkJdTggY21k LCB1OCBwYXJhbSwgYm9vbCBocykKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gc2VuZGVy LT5kZXY7Ci0JdTMyIGN0cmxfcmVnOwotCXUzMiB2YWw7Ci0JdTggdmlydHVhbF9jaGFubmVsID0g MDsKLQotCWlmIChocykgewotCQljdHJsX3JlZyA9IHNlbmRlci0+bWlwaV9oc19nZW5fY3RybF9y ZWc7Ci0KLQkJLyogRklYTUU6IHdhaXRfZm9yX2hzX2ZpZm9zX2VtcHR5KHNlbmRlcik7ICovCi0J fSBlbHNlIHsKLQkJY3RybF9yZWcgPSBzZW5kZXItPm1pcGlfbHBfZ2VuX2N0cmxfcmVnOwotCi0J CS8qIEZJWE1FOiB3YWl0X2Zvcl9scF9maWZvc19lbXB0eShzZW5kZXIpOyAqLwotCX0KLQotCXZh bCA9IEZMRF9WQUwocGFyYW0sIDIzLCAxNikgfCBGTERfVkFMKGNtZCwgMTUsIDgpIHwKLQkJRkxE X1ZBTCh2aXJ0dWFsX2NoYW5uZWwsIDcsIDYpIHwgRkxEX1ZBTChkYXRhX3R5cGUsIDUsIDApOwot Ci0JUkVHX1dSSVRFKGN0cmxfcmVnLCB2YWwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgc2VuZF9sb25nX3BrZyhzdHJ1Y3QgbWRmbGRfZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwgdTgg ZGF0YV90eXBlLAotCQkJdTggKmRhdGEsIGludCBsZW4sIGJvb2wgaHMpCi17Ci0Jc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IHNlbmRlci0+ZGV2OwotCXUzMiBjdHJsX3JlZzsKLQl1MzIgZGF0YV9y ZWc7Ci0JdTMyIHZhbDsKLQl1OCAqcDsKLQl1OCBiMSwgYjIsIGIzLCBiNDsKLQl1OCB2aXJ0dWFs X2NoYW5uZWwgPSAwOwotCWludCBpOwotCi0JaWYgKGhzKSB7Ci0JCWN0cmxfcmVnID0gc2VuZGVy LT5taXBpX2hzX2dlbl9jdHJsX3JlZzsKLQkJZGF0YV9yZWcgPSBzZW5kZXItPm1pcGlfaHNfZ2Vu X2RhdGFfcmVnOwotCi0JCS8qIEZJWE1FOiB3YWl0X2Zvcl9oc19maWZvc19lbXB0eShzZW5kZXIp OyAqLwotCX0gZWxzZSB7Ci0JCWN0cmxfcmVnID0gc2VuZGVyLT5taXBpX2xwX2dlbl9jdHJsX3Jl ZzsKLQkJZGF0YV9yZWcgPSBzZW5kZXItPm1pcGlfbHBfZ2VuX2RhdGFfcmVnOwotCi0JCS8qIEZJ WE1FOiB3YWl0X2Zvcl9scF9maWZvc19lbXB0eShzZW5kZXIpOyAqLwotCX0KLQotCXAgPSBkYXRh OwotCWZvciAoaSA9IDA7IGkgPCBsZW4gLyA0OyBpKyspIHsKLQkJYjEgPSAqcCsrOwotCQliMiA9 ICpwKys7Ci0JCWIzID0gKnArKzsKLQkJYjQgPSAqcCsrOwotCi0JCVJFR19XUklURShkYXRhX3Jl ZywgYjQgPDwgMjQgfCBiMyA8PCAxNiB8IGIyIDw8IDggfCBiMSk7Ci0JfQotCi0JaSA9IGxlbiAl IDQ7Ci0JaWYgKGkpIHsKLQkJYjEgPSAwOyBiMiA9IDA7IGIzID0gMDsKLQotCQlzd2l0Y2ggKGkp IHsKLQkJY2FzZSAzOgotCQkJYjEgPSAqcCsrOwotCQkJYjIgPSAqcCsrOwotCQkJYjMgPSAqcCsr OwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWIxID0gKnArKzsKLQkJCWIyID0gKnArKzsKLQkJ CWJyZWFrOwotCQljYXNlIDE6Ci0JCQliMSA9ICpwKys7Ci0JCQlicmVhazsKLQkJfQotCi0JCVJF R19XUklURShkYXRhX3JlZywgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpOwotCX0KLQotCXZhbCA9 IEZMRF9WQUwobGVuLCAyMywgOCkgfCBGTERfVkFMKHZpcnR1YWxfY2hhbm5lbCwgNywgNikgfAot CQlGTERfVkFMKGRhdGFfdHlwZSwgNSwgMCk7Ci0KLQlSRUdfV1JJVEUoY3RybF9yZWcsIHZhbCk7 Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZW5kX3BrZ19wcmVwYXJlKHN0cnVjdCBt ZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyLCB1OCBkYXRhX3R5cGUsCi0JCQl1OCAqZGF0YSwg dTE2IGxlbikKLXsKLQl1OCBjbWQ7Ci0KLQlzd2l0Y2ggKGRhdGFfdHlwZSkgewotCWNhc2UgTUlQ SV9EU0lfRENTX1NIT1JUX1dSSVRFOgotCWNhc2UgTUlQSV9EU0lfRENTX1NIT1JUX1dSSVRFX1BB UkFNOgotCWNhc2UgTUlQSV9EU0lfRENTX0xPTkdfV1JJVEU6Ci0JCWNtZCA9ICpkYXRhOwotCQli cmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKnRoaXMgcHJldmVudHMgb3Ro ZXIgcGFja2FnZSBzZW5kaW5nIHdoaWxlIGRvaW5nIG1zbGVlcCovCi0Jc2VuZGVyLT5zdGF0dXMg PSBNREZMRF9EU0lfUEtHX1NFTkRFUl9CVVNZOwotCi0JLyp3YWl0IGZvciAxMjAgbWlsbGlzZWNv bmRzIGluIGNhc2UgZXhpdF9zbGVlcF9tb2RlIGp1c3QgYmUgc2VudCovCi0JaWYgKHVubGlrZWx5 KGNtZCA9PSBNSVBJX0RDU19FTlRFUl9TTEVFUF9NT0RFKSkgewotCQkvKlRPRE86IHJlcGxhY2Ug aXQgd2l0aCBtc2xlZXAgbGF0ZXIqLwotCQltZGVsYXkoMTIwKTsKLQl9Ci0KLQlpZiAodW5saWtl bHkoY21kID09IE1JUElfRENTX0VYSVRfU0xFRVBfTU9ERSkpIHsKLQkJLypUT0RPOiByZXBsYWNl IGl0IHdpdGggbXNsZWVwIGxhdGVyKi8KLQkJbWRlbGF5KDEyMCk7Ci0JfQotCXJldHVybiAwOwot fQotCi1zdGF0aWMgaW50IHNlbmRfcGtnX2RvbmUoc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVy ICpzZW5kZXIsIHU4IGRhdGFfdHlwZSwKLQkJCXU4ICpkYXRhLCB1MTYgbGVuKQotewotCXU4IGNt ZDsKLQotCXN3aXRjaCAoZGF0YV90eXBlKSB7Ci0JY2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJ VEU6Ci0JY2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEVfUEFSQU06Ci0JY2FzZSBNSVBJX0RT SV9EQ1NfTE9OR19XUklURToKLQkJY21kID0gKmRhdGE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0J CXJldHVybiAwOwotCX0KLQotCS8qdXBkYXRlIHBhbmVsIHN0YXR1cyovCi0JaWYgKHVubGlrZWx5 KGNtZCA9PSBNSVBJX0RDU19FTlRFUl9TTEVFUF9NT0RFKSkgewotCQlzZW5kZXItPnBhbmVsX21v ZGUgfD0gTURGTERfRFNJX1BBTkVMX01PREVfU0xFRVA7Ci0JCS8qVE9ETzogcmVwbGFjZSBpdCB3 aXRoIG1zbGVlcCBsYXRlciovCi0JCW1kZWxheSgxMjApOwotCX0gZWxzZSBpZiAodW5saWtlbHko Y21kID09IE1JUElfRENTX0VYSVRfU0xFRVBfTU9ERSkpIHsKLQkJc2VuZGVyLT5wYW5lbF9tb2Rl ICY9IH5NREZMRF9EU0lfUEFORUxfTU9ERV9TTEVFUDsKLQkJLypUT0RPOiByZXBsYWNlIGl0IHdp dGggbXNsZWVwIGxhdGVyKi8KLQkJbWRlbGF5KDEyMCk7Ci0JfSBlbHNlIGlmICh1bmxpa2VseShj bWQgPT0gTUlQSV9EQ1NfU09GVF9SRVNFVCkpIHsKLQkJLypUT0RPOiByZXBsYWNlIGl0IHdpdGgg bXNsZWVwIGxhdGVyKi8KLQkJbWRlbGF5KDUpOwotCX0KLQotCXNlbmRlci0+c3RhdHVzID0gTURG TERfRFNJX1BLR19TRU5ERVJfRlJFRTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNl bmRfcGtnKHN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyLCB1OCBkYXRhX3R5cGUs Ci0JCXU4ICpkYXRhLCB1MTYgbGVuLCBib29sIGhzKQotewotCWludCByZXQ7Ci0KLQkvKmhhbmRs ZSBEU0kgZXJyb3IqLwotCXJldCA9IGRzaV9lcnJvcl9oYW5kbGVyKHNlbmRlcik7Ci0JaWYgKHJl dCkgewotCQlEUk1fRVJST1IoIkVycm9yIGhhbmRsaW5nIGZhaWxlZFxuIik7Ci0JCXJldHVybiAt RUFHQUlOOwotCX0KLQotCS8qIHNlbmQgcGtnICovCi0JaWYgKHNlbmRlci0+c3RhdHVzID09IE1E RkxEX0RTSV9QS0dfU0VOREVSX0JVU1kpIHsKLQkJRFJNX0VSUk9SKCJzZW5kZXIgaXMgYnVzeVxu Iik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCXJldCA9IHNlbmRfcGtnX3ByZXBhcmUoc2Vu ZGVyLCBkYXRhX3R5cGUsIGRhdGEsIGxlbik7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoInNl bmRfcGtnX3ByZXBhcmUgZXJyb3JcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXN3aXRjaCAo ZGF0YV90eXBlKSB7Ci0JY2FzZSBNSVBJX0RTSV9HRU5FUklDX1NIT1JUX1dSSVRFXzBfUEFSQU06 Ci0JY2FzZSBNSVBJX0RTSV9HRU5FUklDX1NIT1JUX1dSSVRFXzFfUEFSQU06Ci0JY2FzZSBNSVBJ X0RTSV9HRU5FUklDX1NIT1JUX1dSSVRFXzJfUEFSQU06Ci0JY2FzZSBNSVBJX0RTSV9HRU5FUklD X1JFQURfUkVRVUVTVF8wX1BBUkFNOgotCWNhc2UgTUlQSV9EU0lfR0VORVJJQ19SRUFEX1JFUVVF U1RfMV9QQVJBTToKLQljYXNlIE1JUElfRFNJX0dFTkVSSUNfUkVBRF9SRVFVRVNUXzJfUEFSQU06 Ci0JY2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEU6Ci0JY2FzZSBNSVBJX0RTSV9EQ1NfU0hP UlRfV1JJVEVfUEFSQU06Ci0JY2FzZSBNSVBJX0RTSV9EQ1NfUkVBRDoKLQkJcmV0ID0gc2VuZF9z aG9ydF9wa2coc2VuZGVyLCBkYXRhX3R5cGUsIGRhdGFbMF0sIGRhdGFbMV0sIGhzKTsKLQkJYnJl YWs7Ci0JY2FzZSBNSVBJX0RTSV9HRU5FUklDX0xPTkdfV1JJVEU6Ci0JY2FzZSBNSVBJX0RTSV9E Q1NfTE9OR19XUklURToKLQkJcmV0ID0gc2VuZF9sb25nX3BrZyhzZW5kZXIsIGRhdGFfdHlwZSwg ZGF0YSwgbGVuLCBocyk7Ci0JCWJyZWFrOwotCX0KLQotCXNlbmRfcGtnX2RvbmUoc2VuZGVyLCBk YXRhX3R5cGUsIGRhdGEsIGxlbik7Ci0KLQkvKkZJWE1FOiBzaG91bGQgSSBxdWVyeSBjb21wbGV0 ZSBhbmQgZmlmbyBlbXB0eSBoZXJlPyovCi0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgbWRmbGRf ZHNpX3NlbmRfbWNzX2xvbmcoc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIsIHU4 ICpkYXRhLAotCQkJdTMyIGxlbiwgYm9vbCBocykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwot Ci0JaWYgKCFzZW5kZXIgfHwgIWRhdGEgfHwgIWxlbikgewotCQlEUk1fRVJST1IoIkludmFsaWQg cGFyYW1ldGVyc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXNwaW5fbG9ja19pcnFz YXZlKCZzZW5kZXItPmxvY2ssIGZsYWdzKTsKLQlzZW5kX3BrZyhzZW5kZXIsIE1JUElfRFNJX0RD U19MT05HX1dSSVRFLCBkYXRhLCBsZW4sIGhzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZz ZW5kZXItPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgbWRmbGRfZHNpX3Nl bmRfbWNzX3Nob3J0KHN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyLCB1OCBjbWQs Ci0JCQl1OCBwYXJhbSwgdTggcGFyYW1fbnVtLCBib29sIGhzKQotewotCXU4IGRhdGFbMl07Ci0J dW5zaWduZWQgbG9uZyBmbGFnczsKLQl1OCBkYXRhX3R5cGU7Ci0KLQlpZiAoIXNlbmRlcikgewot CQlEUk1fRVJST1IoIkludmFsaWQgcGFyYW1ldGVyXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JZGF0YVswXSA9IGNtZDsKLQotCWlmIChwYXJhbV9udW0pIHsKLQkJZGF0YV90eXBlID0g TUlQSV9EU0lfRENTX1NIT1JUX1dSSVRFX1BBUkFNOwotCQlkYXRhWzFdID0gcGFyYW07Ci0JfSBl bHNlIHsKLQkJZGF0YV90eXBlID0gTUlQSV9EU0lfRENTX1NIT1JUX1dSSVRFOwotCQlkYXRhWzFd ID0gMDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VuZGVyLT5sb2NrLCBmbGFncyk7Ci0J c2VuZF9wa2coc2VuZGVyLCBkYXRhX3R5cGUsIGRhdGEsIHNpemVvZihkYXRhKSwgaHMpOwotCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbmRlci0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLWludCBtZGZsZF9kc2lfc2VuZF9nZW5fc2hvcnQoc3RydWN0IG1kZmxkX2RzaV9wa2df c2VuZGVyICpzZW5kZXIsIHU4IHBhcmFtMCwKLQkJCXU4IHBhcmFtMSwgdTggcGFyYW1fbnVtLCBi b29sIGhzKQotewotCXU4IGRhdGFbMl07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1OCBkYXRh X3R5cGU7Ci0KLQlpZiAoIXNlbmRlciB8fCBwYXJhbV9udW0gPiAyKSB7Ci0JCURSTV9FUlJPUigi SW52YWxpZCBwYXJhbWV0ZXJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzd2l0Y2gg KHBhcmFtX251bSkgewotCWNhc2UgMDoKLQkJZGF0YV90eXBlID0gTUlQSV9EU0lfR0VORVJJQ19T SE9SVF9XUklURV8wX1BBUkFNOwotCQlkYXRhWzBdID0gMDsKLQkJZGF0YVsxXSA9IDA7Ci0JCWJy ZWFrOwotCWNhc2UgMToKLQkJZGF0YV90eXBlID0gTUlQSV9EU0lfR0VORVJJQ19TSE9SVF9XUklU RV8xX1BBUkFNOwotCQlkYXRhWzBdID0gcGFyYW0wOwotCQlkYXRhWzFdID0gMDsKLQkJYnJlYWs7 Ci0JY2FzZSAyOgotCQlkYXRhX3R5cGUgPSBNSVBJX0RTSV9HRU5FUklDX1NIT1JUX1dSSVRFXzJf UEFSQU07Ci0JCWRhdGFbMF0gPSBwYXJhbTA7Ci0JCWRhdGFbMV0gPSBwYXJhbTE7Ci0JCWJyZWFr OwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW5kZXItPmxvY2ssIGZsYWdzKTsKLQlzZW5k X3BrZyhzZW5kZXIsIGRhdGFfdHlwZSwgZGF0YSwgc2l6ZW9mKGRhdGEpLCBocyk7Ci0Jc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmc2VuZGVyLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0K LQotaW50IG1kZmxkX2RzaV9zZW5kX2dlbl9sb25nKHN0cnVjdCBtZGZsZF9kc2lfcGtnX3NlbmRl ciAqc2VuZGVyLCB1OCAqZGF0YSwKLQkJCXUzMiBsZW4sIGJvb2wgaHMpCi17Ci0JdW5zaWduZWQg bG9uZyBmbGFnczsKLQotCWlmICghc2VuZGVyIHx8ICFkYXRhIHx8ICFsZW4pIHsKLQkJRFJNX0VS Uk9SKCJJbnZhbGlkIHBhcmFtZXRlcnNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlz cGluX2xvY2tfaXJxc2F2ZSgmc2VuZGVyLT5sb2NrLCBmbGFncyk7Ci0Jc2VuZF9wa2coc2VuZGVy LCBNSVBJX0RTSV9HRU5FUklDX0xPTkdfV1JJVEUsIGRhdGEsIGxlbiwgaHMpOwotCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnNlbmRlci0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBpbnQgX19yZWFkX3BhbmVsX2RhdGEoc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVy ICpzZW5kZXIsIHU4IGRhdGFfdHlwZSwKLQkJCXU4ICpkYXRhLCB1MTYgbGVuLCB1MzIgKmRhdGFf b3V0LCB1MTYgbGVuX291dCwgYm9vbCBocykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0JaW50IGk7Ci0JdTMyIGdlbl9kYXRhX3JlZzsKLQlpbnQg cmV0cnkgPSBNREZMRF9EU0lfUkVBRF9NQVhfQ09VTlQ7Ci0KLQlpZiAoIXNlbmRlciB8fCAhZGF0 YV9vdXQgfHwgIWxlbl9vdXQpIHsKLQkJRFJNX0VSUk9SKCJJbnZhbGlkIHBhcmFtZXRlcnNcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkZXYgPSBzZW5kZXItPmRldjsKLQotCS8qKgot CSAqIGRvIHJlYWRpbmcuCi0JICogMCkgc2VuZCBvdXQgZ2VuZXJpYyByZWFkIHJlcXVlc3QKLQkg KiAxKSBwb2xsaW5nIHJlYWQgZGF0YSBhdmFpbCBpbnRlcnJ1cHQKLQkgKiAyKSByZWFkIGRhdGEK LQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VuZGVyLT5sb2NrLCBmbGFncyk7Ci0KLQlSRUdf V1JJVEUoc2VuZGVyLT5taXBpX2ludHJfc3RhdF9yZWcsIEJJVCgyOSkpOwotCi0JaWYgKChSRUdf UkVBRChzZW5kZXItPm1pcGlfaW50cl9zdGF0X3JlZykgJiBCSVQoMjkpKSkKLQkJRFJNX0VSUk9S KCJDYW4gTk9UIGNsZWFuIHJlYWQgZGF0YSB2YWxpZCBpbnRlcnJ1cHRcbiIpOwotCi0JLypzZW5k IG91dCByZWFkIHJlcXVlc3QqLwotCXNlbmRfcGtnKHNlbmRlciwgZGF0YV90eXBlLCBkYXRhLCBs ZW4sIGhzKTsKLQotCS8qcG9sbGluZyByZWFkIGRhdGEgYXZhaWwgaW50ZXJydXB0Ki8KLQl3aGls ZSAocmV0cnkgJiYgIShSRUdfUkVBRChzZW5kZXItPm1pcGlfaW50cl9zdGF0X3JlZykgJiBCSVQo MjkpKSkgewotCQl1ZGVsYXkoMTAwKTsKLQkJcmV0cnktLTsKLQl9Ci0KLQlpZiAoIXJldHJ5KSB7 Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbmRlci0+bG9jaywgZmxhZ3MpOwotCQlyZXR1 cm4gLUVUSU1FRE9VVDsKLQl9Ci0KLQlSRUdfV1JJVEUoc2VuZGVyLT5taXBpX2ludHJfc3RhdF9y ZWcsIEJJVCgyOSkpOwotCi0JLypyZWFkIGRhdGEqLwotCWlmIChocykKLQkJZ2VuX2RhdGFfcmVn ID0gc2VuZGVyLT5taXBpX2hzX2dlbl9kYXRhX3JlZzsKLQllbHNlCi0JCWdlbl9kYXRhX3JlZyA9 IHNlbmRlci0+bWlwaV9scF9nZW5fZGF0YV9yZWc7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuX291 dDsgaSsrKQotCQkqKGRhdGFfb3V0ICsgaSkgPSBSRUdfUkVBRChnZW5fZGF0YV9yZWcpOwotCi0J c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VuZGVyLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4g MDsKLX0KLQotaW50IG1kZmxkX2RzaV9yZWFkX21jcyhzdHJ1Y3QgbWRmbGRfZHNpX3BrZ19zZW5k ZXIgKnNlbmRlciwgdTggY21kLAotCQl1MzIgKmRhdGEsIHUxNiBsZW4sIGJvb2wgaHMpCi17Ci0J aWYgKCFzZW5kZXIgfHwgIWRhdGEgfHwgIWxlbikgewotCQlEUk1fRVJST1IoIkludmFsaWQgcGFy YW1ldGVyc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiBfX3JlYWRfcGFu ZWxfZGF0YShzZW5kZXIsIE1JUElfRFNJX0RDU19SRUFELCAmY21kLCAxLAotCQkJCWRhdGEsIGxl biwgaHMpOwotfQotCi1pbnQgbWRmbGRfZHNpX3BrZ19zZW5kZXJfaW5pdChzdHJ1Y3QgbWRmbGRf ZHNpX2Nvbm5lY3RvciAqZHNpX2Nvbm5lY3RvciwKLQkJCQkJCQkJaW50IHBpcGUpCi17Ci0Jc3Ry dWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyICpwa2dfc2VuZGVyOwotCXN0cnVjdCBtZGZsZF9kc2lf Y29uZmlnICpkc2lfY29uZmlnID0KLQkJCQltZGZsZF9kc2lfZ2V0X2NvbmZpZyhkc2lfY29ubmVj dG9yKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZHNpX2NvbmZpZy0+ZGV2OwotCXN0cnVj dCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQljb25zdCBz dHJ1Y3QgcHNiX29mZnNldCAqbWFwID0gJmRldl9wcml2LT5yZWdtYXBbcGlwZV07Ci0JdTMyIG1p cGlfdmFsID0gMDsKLQotCWlmICghZHNpX2Nvbm5lY3RvcikgewotCQlEUk1fRVJST1IoIkludmFs aWQgcGFyYW1ldGVyXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcGtnX3NlbmRlciA9 IGRzaV9jb25uZWN0b3ItPnBrZ19zZW5kZXI7Ci0KLQlpZiAoIXBrZ19zZW5kZXIgfHwgSVNfRVJS KHBrZ19zZW5kZXIpKSB7Ci0JCXBrZ19zZW5kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWRm bGRfZHNpX3BrZ19zZW5kZXIpLAotCQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJaWYgKCFwa2dfc2Vu ZGVyKSB7Ci0JCQlEUk1fRVJST1IoIkNyZWF0ZSBEU0kgcGtnIHNlbmRlciBmYWlsZWRcbiIpOwot CQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJZHNpX2Nvbm5lY3Rvci0+cGtnX3NlbmRlciA9ICh2 b2lkICopcGtnX3NlbmRlcjsKLQl9Ci0KLQlwa2dfc2VuZGVyLT5kZXYgPSBkZXY7Ci0JcGtnX3Nl bmRlci0+ZHNpX2Nvbm5lY3RvciA9IGRzaV9jb25uZWN0b3I7Ci0JcGtnX3NlbmRlci0+cGlwZSA9 IHBpcGU7Ci0JcGtnX3NlbmRlci0+cGtnX251bSA9IDA7Ci0JcGtnX3NlbmRlci0+cGFuZWxfbW9k ZSA9IDA7Ci0JcGtnX3NlbmRlci0+c3RhdHVzID0gTURGTERfRFNJX1BLR19TRU5ERVJfRlJFRTsK LQotCS8qaW5pdCByZWdzKi8KLQkvKiBGSVhNRTogc2hvdWxkIGp1c3QgY29weSB0aGUgcmVnbWFw IHB0ciA/ICovCi0JcGtnX3NlbmRlci0+ZHBsbF9yZWcgPSBtYXAtPmRwbGw7Ci0JcGtnX3NlbmRl ci0+ZHNwY250cl9yZWcgPSBtYXAtPmNudHI7Ci0JcGtnX3NlbmRlci0+cGlwZWNvbmZfcmVnID0g bWFwLT5jb25mOwotCXBrZ19zZW5kZXItPmRzcGxpbm9mZl9yZWcgPSBtYXAtPmxpbm9mZjsKLQlw a2dfc2VuZGVyLT5kc3BzdXJmX3JlZyA9IG1hcC0+c3VyZjsKLQlwa2dfc2VuZGVyLT5waXBlc3Rh dF9yZWcgPSBtYXAtPnN0YXR1czsKLQotCXBrZ19zZW5kZXItPm1pcGlfaW50cl9zdGF0X3JlZyA9 IE1JUElfSU5UUl9TVEFUX1JFRyhwaXBlKTsKLQlwa2dfc2VuZGVyLT5taXBpX2xwX2dlbl9kYXRh X3JlZyA9IE1JUElfTFBfR0VOX0RBVEFfUkVHKHBpcGUpOwotCXBrZ19zZW5kZXItPm1pcGlfaHNf Z2VuX2RhdGFfcmVnID0gTUlQSV9IU19HRU5fREFUQV9SRUcocGlwZSk7Ci0JcGtnX3NlbmRlci0+ bWlwaV9scF9nZW5fY3RybF9yZWcgPSBNSVBJX0xQX0dFTl9DVFJMX1JFRyhwaXBlKTsKLQlwa2df c2VuZGVyLT5taXBpX2hzX2dlbl9jdHJsX3JlZyA9IE1JUElfSFNfR0VOX0NUUkxfUkVHKHBpcGUp OwotCXBrZ19zZW5kZXItPm1pcGlfZ2VuX2ZpZm9fc3RhdF9yZWcgPSBNSVBJX0dFTl9GSUZPX1NU QVRfUkVHKHBpcGUpOwotCXBrZ19zZW5kZXItPm1pcGlfZGF0YV9hZGRyX3JlZyA9IE1JUElfREFU QV9BRERfUkVHKHBpcGUpOwotCXBrZ19zZW5kZXItPm1pcGlfZGF0YV9sZW5fcmVnID0gTUlQSV9E QVRBX0xFTl9SRUcocGlwZSk7Ci0JcGtnX3NlbmRlci0+bWlwaV9jbWRfYWRkcl9yZWcgPSBNSVBJ X0NNRF9BRERfUkVHKHBpcGUpOwotCXBrZ19zZW5kZXItPm1pcGlfY21kX2xlbl9yZWcgPSBNSVBJ X0NNRF9MRU5fUkVHKHBpcGUpOwotCi0JLyppbml0IGxvY2sqLwotCXNwaW5fbG9ja19pbml0KCZw a2dfc2VuZGVyLT5sb2NrKTsKLQotCWlmIChtZGZsZF9nZXRfcGFuZWxfdHlwZShkZXYsIHBpcGUp ICE9IFRDMzU4NzZYKSB7Ci0JCS8qKgotCQkgKiBGb3IgdmlkZW8gbW9kZSwgZG9uJ3QgZW5hYmxl IERQSSB0aW1pbmcgb3V0cHV0IGhlcmUsCi0JCSAqIHdpbGwgaW5pdCB0aGUgRFBJIHRpbWluZyBv dXRwdXQgZHVyaW5nIG1vZGUgc2V0dGluZy4KLQkJICovCi0JCW1pcGlfdmFsID0gUEFTU19GUk9N X1NQSFlfVE9fQUZFIHwgU0VMX0ZMT1BQRURfSFNUWDsKLQotCQlpZiAocGlwZSA9PSAwKQotCQkJ bWlwaV92YWwgfD0gMHgyOwotCi0JCVJFR19XUklURShNSVBJX1BPUlRfQ09OVFJPTChwaXBlKSwg bWlwaV92YWwpOwotCQlSRUdfUkVBRChNSVBJX1BPUlRfQ09OVFJPTChwaXBlKSk7Ci0KLQkJLyog ZG8gZHNpIGNvbnRyb2xsZXIgaW5pdCAqLwotCQltZGZsZF9kc2lfY29udHJvbGxlcl9pbml0KGRz aV9jb25maWcsIHBpcGUpOwotCX0KLQotCXJldHVybiAwOwotfQotCi12b2lkIG1kZmxkX2RzaV9w a2dfc2VuZGVyX2Rlc3Ryb3koc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIpCi17 Ci0JaWYgKCFzZW5kZXIgfHwgSVNfRVJSKHNlbmRlcikpCi0JCXJldHVybjsKLQotCS8qZnJlZSov Ci0Ja2ZyZWUoc2VuZGVyKTsKLX0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21h NTAwL21kZmxkX2RzaV9wa2dfc2VuZGVyLmggYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxk X2RzaV9wa2dfc2VuZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NzhhMjFj MTVkNS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZHNp X3BrZ19zZW5kZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBDb3B5 cmlnaHQgwqkgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0g KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUg bmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKLSAqIERFQUxJ TkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOgotICogSmFja2llIExpPHlhb2Rv bmcubGlAaW50ZWwuY29tPgotICovCi0jaWZuZGVmIF9fTURGTERfRFNJX1BLR19TRU5ERVJfSF9f Ci0jZGVmaW5lIF9fTURGTERfRFNJX1BLR19TRU5ERVJfSF9fCi0KLSNpbmNsdWRlIDxsaW51eC9r dGhyZWFkLmg+Ci0KLSNkZWZpbmUgTURGTERfTUFYX0RDU19QQVJBTQk4Ci0KLXN0cnVjdCBtZGZs ZF9kc2lfcGtnX3NlbmRlciB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgbWRm bGRfZHNpX2Nvbm5lY3RvciAqZHNpX2Nvbm5lY3RvcjsKLQl1MzIgc3RhdHVzOwotCXUzMiBwYW5l bF9tb2RlOwotCi0JaW50IHBpcGU7Ci0KLQlzcGlubG9ja190IGxvY2s7Ci0KLQl1MzIgcGtnX251 bTsKLQotCS8qIFJlZ2lzdGVycyAqLwotCXUzMiBkcGxsX3JlZzsKLQl1MzIgZHNwY250cl9yZWc7 Ci0JdTMyIHBpcGVjb25mX3JlZzsKLQl1MzIgcGlwZXN0YXRfcmVnOwotCXUzMiBkc3BsaW5vZmZf cmVnOwotCXUzMiBkc3BzdXJmX3JlZzsKLQotCXUzMiBtaXBpX2ludHJfc3RhdF9yZWc7Ci0JdTMy IG1pcGlfbHBfZ2VuX2RhdGFfcmVnOwotCXUzMiBtaXBpX2hzX2dlbl9kYXRhX3JlZzsKLQl1MzIg bWlwaV9scF9nZW5fY3RybF9yZWc7Ci0JdTMyIG1pcGlfaHNfZ2VuX2N0cmxfcmVnOwotCXUzMiBt aXBpX2dlbl9maWZvX3N0YXRfcmVnOwotCXUzMiBtaXBpX2RhdGFfYWRkcl9yZWc7Ci0JdTMyIG1p cGlfZGF0YV9sZW5fcmVnOwotCXUzMiBtaXBpX2NtZF9hZGRyX3JlZzsKLQl1MzIgbWlwaV9jbWRf bGVuX3JlZzsKLX07Ci0KLWV4dGVybiBpbnQgbWRmbGRfZHNpX3BrZ19zZW5kZXJfaW5pdChzdHJ1 Y3QgbWRmbGRfZHNpX2Nvbm5lY3RvciAqZHNpX2Nvbm5lY3RvciwKLQkJCQkJaW50IHBpcGUpOwot ZXh0ZXJuIHZvaWQgbWRmbGRfZHNpX3BrZ19zZW5kZXJfZGVzdHJveShzdHJ1Y3QgbWRmbGRfZHNp X3BrZ19zZW5kZXIgKnNlbmRlcik7Ci1pbnQgbWRmbGRfZHNpX3NlbmRfbWNzX3Nob3J0KHN0cnVj dCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyLCB1OCBjbWQsCi0JCQkJCXU4IHBhcmFtLCB1 OCBwYXJhbV9udW0sIGJvb2wgaHMpOwotaW50IG1kZmxkX2RzaV9zZW5kX21jc19sb25nKHN0cnVj dCBtZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyLCB1OCAqZGF0YSwKLQkJCQkJdTMyIGxlbiwg Ym9vbCBocyk7Ci1pbnQgbWRmbGRfZHNpX3NlbmRfZ2VuX3Nob3J0KHN0cnVjdCBtZGZsZF9kc2lf cGtnX3NlbmRlciAqc2VuZGVyLCB1OCBwYXJhbTAsCi0JCQkJCXU4IHBhcmFtMSwgdTggcGFyYW1f bnVtLCBib29sIGhzKTsKLWludCBtZGZsZF9kc2lfc2VuZF9nZW5fbG9uZyhzdHJ1Y3QgbWRmbGRf ZHNpX3BrZ19zZW5kZXIgKnNlbmRlciwgdTggKmRhdGEsCi0JCQkJCXUzMiBsZW4sIGJvb2wgaHMp OwotLyogUmVhZCBpbnRlcmZhY2VzICovCi1pbnQgbWRmbGRfZHNpX3JlYWRfbWNzKHN0cnVjdCBt ZGZsZF9kc2lfcGtnX3NlbmRlciAqc2VuZGVyLCB1OCBjbWQsCi0JCXUzMiAqZGF0YSwgdTE2IGxl biwgYm9vbCBocyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUw MC9tZGZsZF9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2lu dGVsX2Rpc3BsYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYyYWJhOGY3NTI4 Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9pbnRlbF9k aXNwbGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NjYgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIENvcHlyaWdodCDDgsKpIDIwMDYtMjAw NyBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIEF1dGhvcnM6Ci0gKglFcmljIEFuaG9sdCA8ZXJp Y0BhbmhvbHQubmV0PgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUg PGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KLQotI2luY2x1ZGUg PGRybS9kcm1fY3J0Yy5oPgotI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+Ci0KLSNpbmNsdWRl ICJmcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgImdtYV9kaXNwbGF5LmgiCi0jaW5jbHVkZSAibWRm bGRfZHNpX291dHB1dC5oIgotI2luY2x1ZGUgIm1kZmxkX291dHB1dC5oIgotI2luY2x1ZGUgInBz Yl9pbnRlbF9yZWcuaCIKLQotLyogSGFyZGNvZGVkIGN1cnJlbnRseSAqLwotc3RhdGljIGludCBr c2VsID0gS1NFTF9DUllTVEFMXzE5OwotCi1zdHJ1Y3QgcHNiX2ludGVsX3JhbmdlX3QgewotCWlu dCBtaW4sIG1heDsKLX07Ci0KLXN0cnVjdCBtcnN0X2xpbWl0X3QgewotCXN0cnVjdCBwc2JfaW50 ZWxfcmFuZ2VfdCBkb3QsIG0sIHAxOwotfTsKLQotc3RydWN0IG1yc3RfY2xvY2tfdCB7Ci0JLyog ZGVyaXZlZCB2YWx1ZXMgKi8KLQlpbnQgZG90OwotCWludCBtOwotCWludCBwMTsKLX07Ci0KLSNk ZWZpbmUgQ09VTlRfTUFYIDB4MTAwMDAwMDAKLQotdm9pZCBtZGZsZFdhaXRGb3JQaXBlRGlzYWJs ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX3BzYl9w cml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JY29uc3Qgc3RydWN0IHBzYl9v ZmZzZXQgKm1hcCA9ICZkZXZfcHJpdi0+cmVnbWFwW3BpcGVdOwotCWludCBjb3VudCwgdGVtcDsK LQotCXN3aXRjaCAocGlwZSkgewotCWNhc2UgMDoKLQljYXNlIDE6Ci0JY2FzZSAyOgotCQlicmVh azsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1IoIklsbGVnYWwgUGlwZSBOdW1iZXIuXG4iKTsKLQkJ cmV0dXJuOwotCX0KLQotCS8qIEZJWE1FIEpMSVU3X1BPICovCi0JZ21hX3dhaXRfZm9yX3ZibGFu ayhkZXYpOwotCXJldHVybjsKLQotCS8qIFdhaXQgZm9yIGZvciB0aGUgcGlwZSBkaXNhYmxlIHRv IHRha2UgZWZmZWN0LiAqLwotCWZvciAoY291bnQgPSAwOyBjb3VudCA8IENPVU5UX01BWDsgY291 bnQrKykgewotCQl0ZW1wID0gUkVHX1JFQUQobWFwLT5jb25mKTsKLQkJaWYgKCh0ZW1wICYgUElQ RUFDT05GX1BJUEVfU1RBVEUpID09IDApCi0JCQlicmVhazsKLQl9Ci19Ci0KLXZvaWQgbWRmbGRX YWl0Rm9yUGlwZUVuYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKLXsKLQlz dHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JY29u c3Qgc3RydWN0IHBzYl9vZmZzZXQgKm1hcCA9ICZkZXZfcHJpdi0+cmVnbWFwW3BpcGVdOwotCWlu dCBjb3VudCwgdGVtcDsKLQotCXN3aXRjaCAocGlwZSkgewotCWNhc2UgMDoKLQljYXNlIDE6Ci0J Y2FzZSAyOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1IoIklsbGVnYWwgUGlwZSBO dW1iZXIuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIEZJWE1FIEpMSVU3X1BPICovCi0JZ21h X3dhaXRfZm9yX3ZibGFuayhkZXYpOwotCXJldHVybjsKLQotCS8qIFdhaXQgZm9yIGZvciB0aGUg cGlwZSBlbmFibGUgdG8gdGFrZSBlZmZlY3QuICovCi0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwg Q09VTlRfTUFYOyBjb3VudCsrKSB7Ci0JCXRlbXAgPSBSRUdfUkVBRChtYXAtPmNvbmYpOwotCQlp ZiAodGVtcCAmIFBJUEVBQ09ORl9QSVBFX1NUQVRFKQotCQkJYnJlYWs7Ci0JfQotfQotCi0vKgot ICogUmV0dXJuIHRoZSBwaXBlIGN1cnJlbnRseSBjb25uZWN0ZWQgdG8gdGhlIHBhbmVsIGZpdHRl ciwKLSAqIG9yIC0xIGlmIHRoZSBwYW5lbCBmaXR0ZXIgaXMgbm90IHByZXNlbnQgb3Igbm90IGlu IHVzZQotICovCi1zdGF0aWMgaW50IHBzYl9pbnRlbF9wYW5lbF9maXR0ZXJfcGlwZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQotewotCXUzMiBwZml0X2NvbnRyb2w7Ci0KLQlwZml0X2NvbnRyb2wg PSBSRUdfUkVBRChQRklUX0NPTlRST0wpOwotCi0JLyogU2VlIGlmIHRoZSBwYW5lbCBmaXR0ZXIg aXMgaW4gdXNlICovCi0JaWYgKChwZml0X2NvbnRyb2wgJiBQRklUX0VOQUJMRSkgPT0gMCkKLQkJ cmV0dXJuIC0xOwotCi0JLyogOTY1IGNhbiBwbGFjZSBwYW5lbCBmaXR0ZXIgb24gZWl0aGVyIHBp cGUgKi8KLQlyZXR1cm4gKHBmaXRfY29udHJvbCA+PiAyOSkgJiAweDM7Ci19Ci0KLXN0YXRpYyBp bnQgY2hlY2tfZmIoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCi17Ci0JaWYgKCFmYikKLQkJ cmV0dXJuIDA7Ci0KLQlzd2l0Y2ggKGZiLT5mb3JtYXQtPmNwcFswXSAqIDgpIHsKLQljYXNlIDg6 Ci0JY2FzZSAxNjoKLQljYXNlIDI0OgotCWNhc2UgMzI6Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6 Ci0JCURSTV9FUlJPUigiVW5rbm93biBjb2xvciBkZXB0aFxuIik7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLX0KLQotc3RhdGljIGludCBtZGZsZF9faW50ZWxfcGlwZV9zZXRfYmFzZShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsIGludCB4LCBpbnQgeSwKLQkJCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpvbGRfZmIpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1 Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBjcnRjLT5wcmltYXJ5LT5mYjsKLQlzdHJ1Y3QgZ21hX2Ny dGMgKmdtYV9jcnRjID0gdG9fZ21hX2NydGMoY3J0Yyk7Ci0JaW50IHBpcGUgPSBnbWFfY3J0Yy0+ cGlwZTsKLQljb25zdCBzdHJ1Y3QgcHNiX29mZnNldCAqbWFwID0gJmRldl9wcml2LT5yZWdtYXBb cGlwZV07Ci0JdW5zaWduZWQgbG9uZyBzdGFydCwgb2Zmc2V0OwotCXUzMiBkc3BjbnRyOwotCWlu dCByZXQ7Ci0KLQlkZXZfZGJnKGRldi0+ZGV2LCAicGlwZSA9IDB4JXguXG4iLCBwaXBlKTsKLQot CS8qIG5vIGZiIGJvdW5kICovCi0JaWYgKCFmYikgewotCQlkZXZfZGJnKGRldi0+ZGV2LCAiTm8g RkIgYm91bmRcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXQgPSBjaGVja19mYihmYik7Ci0J aWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWlmIChwaXBlID4gMikgewotCQlEUk1fRVJST1Io IklsbGVnYWwgUGlwZSBOdW1iZXIuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYg KCFnbWFfcG93ZXJfYmVnaW4oZGV2LCB0cnVlKSkKLQkJcmV0dXJuIDA7Ci0KLQlzdGFydCA9IHRv X2d0dF9yYW5nZShmYi0+b2JqWzBdKS0+b2Zmc2V0OwotCW9mZnNldCA9IHkgKiBmYi0+cGl0Y2hl c1swXSArIHggKiBmYi0+Zm9ybWF0LT5jcHBbMF07Ci0KLQlSRUdfV1JJVEUobWFwLT5zdHJpZGUs IGZiLT5waXRjaGVzWzBdKTsKLQlkc3BjbnRyID0gUkVHX1JFQUQobWFwLT5jbnRyKTsKLQlkc3Bj bnRyICY9IH5ESVNQUExBTkVfUElYRk9STUFUX01BU0s7Ci0KLQlzd2l0Y2ggKGZiLT5mb3JtYXQt PmNwcFswXSAqIDgpIHsKLQljYXNlIDg6Ci0JCWRzcGNudHIgfD0gRElTUFBMQU5FXzhCUFA7Ci0J CWJyZWFrOwotCWNhc2UgMTY6Ci0JCWlmIChmYi0+Zm9ybWF0LT5kZXB0aCA9PSAxNSkKLQkJCWRz cGNudHIgfD0gRElTUFBMQU5FXzE1XzE2QlBQOwotCQllbHNlCi0JCQlkc3BjbnRyIHw9IERJU1BQ TEFORV8xNkJQUDsKLQkJYnJlYWs7Ci0JY2FzZSAyNDoKLQljYXNlIDMyOgotCQlkc3BjbnRyIHw9 IERJU1BQTEFORV8zMkJQUF9OT19BTFBIQTsKLQkJYnJlYWs7Ci0JfQotCVJFR19XUklURShtYXAt PmNudHIsIGRzcGNudHIpOwotCi0JZGV2X2RiZyhkZXYtPmRldiwgIldyaXRpbmcgYmFzZSAlMDhs WCAlMDhsWCAlZCAlZFxuIiwKLQkJCQkJCXN0YXJ0LCBvZmZzZXQsIHgsIHkpOwotCVJFR19XUklU RShtYXAtPmxpbm9mZiwgb2Zmc2V0KTsKLQlSRUdfUkVBRChtYXAtPmxpbm9mZik7Ci0JUkVHX1dS SVRFKG1hcC0+c3VyZiwgc3RhcnQpOwotCVJFR19SRUFEKG1hcC0+c3VyZik7Ci0KLQlnbWFfcG93 ZXJfZW5kKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIERpc2FibGUgdGhlIHBpcGUs IHBsYW5lIGFuZCBwbGwuCi0gKgotICovCi12b2lkIG1kZmxkX2Rpc2FibGVfY3J0YyhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JY29uc3Qgc3RydWN0IHBzYl9vZmZzZXQgKm1h cCA9ICZkZXZfcHJpdi0+cmVnbWFwW3BpcGVdOwotCXUzMiB0ZW1wOwotCi0JZGV2X2RiZyhkZXYt PmRldiwgInBpcGUgPSAlZFxuIiwgcGlwZSk7Ci0KLQotCWlmIChwaXBlICE9IDEpCi0JCW1kZmxk X2RzaV9nZW5fZmlmb19yZWFkeShkZXYsIE1JUElfR0VOX0ZJRk9fU1RBVF9SRUcocGlwZSksCi0J CQkJSFNfQ1RSTF9GSUZPX0VNUFRZIHwgSFNfREFUQV9GSUZPX0VNUFRZKTsKLQotCS8qIERpc2Fi bGUgZGlzcGxheSBwbGFuZSAqLwotCXRlbXAgPSBSRUdfUkVBRChtYXAtPmNudHIpOwotCWlmICgo dGVtcCAmIERJU1BMQVlfUExBTkVfRU5BQkxFKSAhPSAwKSB7Ci0JCVJFR19XUklURShtYXAtPmNu dHIsCi0JCQkgIHRlbXAgJiB+RElTUExBWV9QTEFORV9FTkFCTEUpOwotCQkvKiBGbHVzaCB0aGUg cGxhbmUgY2hhbmdlcyAqLwotCQlSRUdfV1JJVEUobWFwLT5iYXNlLCBSRUdfUkVBRChtYXAtPmJh c2UpKTsKLQkJUkVHX1JFQUQobWFwLT5iYXNlKTsKLQl9Ci0KLQkvKiBGSVhNRV9KTElVNyBNREZM RF9QTyByZXZpc2l0ICovCi0KLQkvKiBOZXh0LCBkaXNhYmxlIGRpc3BsYXkgcGlwZXMgKi8KLQl0 ZW1wID0gUkVHX1JFQUQobWFwLT5jb25mKTsKLQlpZiAoKHRlbXAgJiBQSVBFQUNPTkZfRU5BQkxF KSAhPSAwKSB7Ci0JCXRlbXAgJj0gflBJUEVBQ09ORl9FTkFCTEU7Ci0JCXRlbXAgfD0gUElQRUNP TkZfUExBTkVfT0ZGIHwgUElQRUNPTkZfQ1VSU09SX09GRjsKLQkJUkVHX1dSSVRFKG1hcC0+Y29u ZiwgdGVtcCk7Ci0JCVJFR19SRUFEKG1hcC0+Y29uZik7Ci0KLQkJLyogV2FpdCBmb3IgZm9yIHRo ZSBwaXBlIGRpc2FibGUgdG8gdGFrZSBlZmZlY3QuICovCi0JCW1kZmxkV2FpdEZvclBpcGVEaXNh YmxlKGRldiwgcGlwZSk7Ci0JfQotCi0JdGVtcCA9IFJFR19SRUFEKG1hcC0+ZHBsbCk7Ci0JaWYg KHRlbXAgJiBEUExMX1ZDT19FTkFCTEUpIHsKLQkJaWYgKChwaXBlICE9IDEgJiYKLQkJCSEoKFJF R19SRUFEKFBJUEVBQ09ORikgfCBSRUdfUkVBRChQSVBFQ0NPTkYpKQotCQkJCSYgUElQRUFDT05G X0VOQUJMRSkpIHx8IHBpcGUgPT0gMSkgewotCQkJdGVtcCAmPSB+KERQTExfVkNPX0VOQUJMRSk7 Ci0JCQlSRUdfV1JJVEUobWFwLT5kcGxsLCB0ZW1wKTsKLQkJCVJFR19SRUFEKG1hcC0+ZHBsbCk7 Ci0JCQkvKiBXYWl0IGZvciB0aGUgY2xvY2tzIHRvIHR1cm4gb2ZmLiAqLwotCQkJLyogRklYTUVf TURGTEQgUE8gbWF5IG5lZWQgbW9yZSBkZWxheSAqLwotCQkJdWRlbGF5KDUwMCk7Ci0KLQkJCWlm ICghKHRlbXAgJiBNREZMRF9QV1JfR0FURV9FTikpIHsKLQkJCQkvKiBnYXRpbmcgcG93ZXIgb2Yg RFBMTCAqLwotCQkJCVJFR19XUklURShtYXAtPmRwbGwsIHRlbXAgfCBNREZMRF9QV1JfR0FURV9F Tik7Ci0JCQkJLyogRklYTUVfTURGTEQgUE8gLSBjaGFuZ2UgNTAwIHRvIDEgYWZ0ZXIgUE8gKi8K LQkJCQl1ZGVsYXkoNTAwMCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLX0KLQotLyoKLSAqIFNldHMgdGhl IHBvd2VyIG1hbmFnZW1lbnQgbW9kZSBvZiB0aGUgcGlwZSBhbmQgcGxhbmUuCi0gKgotICogVGhp cyBjb2RlIHNob3VsZCBwcm9iYWJseSBncm93IHN1cHBvcnQgZm9yIHR1cm5pbmcgdGhlIGN1cnNv ciBvZmYgYW5kIGJhY2sKLSAqIG9uIGFwcHJvcHJpYXRlbHkgYXQgdGhlIHNhbWUgdGltZSBhcyB3 ZSdyZSB0dXJuaW5nIHRoZSBwaXBlIG9mZi9vbi4KLSAqLwotc3RhdGljIHZvaWQgbWRmbGRfY3J0 Y19kcG1zKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IG1vZGUpCi17Ci0Jc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGdtYV9jcnRjICpnbWFfY3J0YyA9IHRvX2dt YV9jcnRjKGNydGMpOwotCWludCBwaXBlID0gZ21hX2NydGMtPnBpcGU7Ci0JY29uc3Qgc3RydWN0 IHBzYl9vZmZzZXQgKm1hcCA9ICZkZXZfcHJpdi0+cmVnbWFwW3BpcGVdOwotCXUzMiBwaXBlY29u ZiA9IGRldl9wcml2LT5waXBlY29uZltwaXBlXTsKLQl1MzIgdGVtcDsKLQlpbnQgdGltZW91dCA9 IDA7Ci0KLQlkZXZfZGJnKGRldi0+ZGV2LCAibW9kZSA9ICVkLCBwaXBlID0gJWRcbiIsIG1vZGUs IHBpcGUpOwotCi0JLyogTm90ZTogT2xkIGNvZGUgdXNlcyBwaXBlIGEgc3RhdCBmb3IgcGlwZSBi IGJ1dCB0aGF0IGFwcGVhcnMKLQkgICB0byBiZSBhIGJ1ZyAqLwotCi0JaWYgKCFnbWFfcG93ZXJf YmVnaW4oZGV2LCB0cnVlKSkKLQkJcmV0dXJuOwotCi0JLyogWFhYOiBXaGVuIG91ciBvdXRwdXRz IGFyZSBhbGwgdW5hd2FyZSBvZiBEUE1TIG1vZGVzIG90aGVyIHRoYW4gb2ZmCi0JICogYW5kIG9u LCB3ZSBzaG91bGQgbWFwIHRob3NlIG1vZGVzIHRvIERSTV9NT0RFX0RQTVNfT0ZGIGluIHRoZSBD UlRDLgotCSAqLwotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgRFJNX01PREVfRFBNU19PTjoKLQlj YXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKLQljYXNlIERSTV9NT0RFX0RQTVNfU1VTUEVORDoK LQkJLyogRW5hYmxlIHRoZSBEUExMICovCi0JCXRlbXAgPSBSRUdfUkVBRChtYXAtPmRwbGwpOwot Ci0JCWlmICgodGVtcCAmIERQTExfVkNPX0VOQUJMRSkgPT0gMCkgewotCQkJLyogV2hlbiB1bmdh dGluZyBwb3dlciBvZiBEUExMLCBuZWVkcyB0byB3YWl0IDAuNXVzCi0JCQkgICBiZWZvcmUgZW5h YmxlIHRoZSBWQ08gKi8KLQkJCWlmICh0ZW1wICYgTURGTERfUFdSX0dBVEVfRU4pIHsKLQkJCQl0 ZW1wICY9IH5NREZMRF9QV1JfR0FURV9FTjsKLQkJCQlSRUdfV1JJVEUobWFwLT5kcGxsLCB0ZW1w KTsKLQkJCQkvKiBGSVhNRV9NREZMRCBQTyAtIGNoYW5nZSA1MDAgdG8gMSBhZnRlciBQTyAqLwot CQkJCXVkZWxheSg1MDApOwotCQkJfQotCi0JCQlSRUdfV1JJVEUobWFwLT5kcGxsLCB0ZW1wKTsK LQkJCVJFR19SRUFEKG1hcC0+ZHBsbCk7Ci0JCQkvKiBGSVhNRV9NREZMRCBQTyAtIGNoYW5nZSA1 MDAgdG8gMSBhZnRlciBQTyAqLwotCQkJdWRlbGF5KDUwMCk7Ci0KLQkJCVJFR19XUklURShtYXAt PmRwbGwsIHRlbXAgfCBEUExMX1ZDT19FTkFCTEUpOwotCQkJUkVHX1JFQUQobWFwLT5kcGxsKTsK LQotCQkJLyoqCi0JCQkgKiB3YWl0IGZvciBEU0kgUExMIHRvIGxvY2sKLQkJCSAqIE5PVEU6IG9u bHkgbmVlZCB0byBwb2xsIHN0YXR1cyBvZiBwaXBlIDAgYW5kIHBpcGUgMSwKLQkJCSAqIHNpbmNl IGJvdGggTUlQSSBwaXBlcyBzaGFyZSB0aGUgc2FtZSBQTEwuCi0JCQkgKi8KLQkJCXdoaWxlICgo cGlwZSAhPSAyKSAmJiAodGltZW91dCA8IDIwMDAwKSAmJgotCQkJICAhKFJFR19SRUFEKG1hcC0+ Y29uZikgJiBQSVBFQ09ORl9EU0lQTExfTE9DSykpIHsKLQkJCQl1ZGVsYXkoMTUwKTsKLQkJCQl0 aW1lb3V0Kys7Ci0JCQl9Ci0JCX0KLQotCQkvKiBFbmFibGUgdGhlIHBsYW5lICovCi0JCXRlbXAg PSBSRUdfUkVBRChtYXAtPmNudHIpOwotCQlpZiAoKHRlbXAgJiBESVNQTEFZX1BMQU5FX0VOQUJM RSkgPT0gMCkgewotCQkJUkVHX1dSSVRFKG1hcC0+Y250ciwKLQkJCQl0ZW1wIHwgRElTUExBWV9Q TEFORV9FTkFCTEUpOwotCQkJLyogRmx1c2ggdGhlIHBsYW5lIGNoYW5nZXMgKi8KLQkJCVJFR19X UklURShtYXAtPmJhc2UsIFJFR19SRUFEKG1hcC0+YmFzZSkpOwotCQl9Ci0KLQkJLyogRW5hYmxl IHRoZSBwaXBlICovCi0JCXRlbXAgPSBSRUdfUkVBRChtYXAtPmNvbmYpOwotCQlpZiAoKHRlbXAg JiBQSVBFQUNPTkZfRU5BQkxFKSA9PSAwKSB7Ci0JCQlSRUdfV1JJVEUobWFwLT5jb25mLCBwaXBl Y29uZik7Ci0KLQkJCS8qIFdhaXQgZm9yIGZvciB0aGUgcGlwZSBlbmFibGUgdG8gdGFrZSBlZmZl Y3QuICovCi0JCQltZGZsZFdhaXRGb3JQaXBlRW5hYmxlKGRldiwgcGlwZSk7Ci0JCX0KLQotCQkv Kndvcmthcm91bmQgZm9yIHNpZ2h0aW5nIDM3NDE3MDEgUmFuZG9tIFggYmxhbmsgZGlzcGxheSov Ci0JCS8qcGVyZm9ybSB3L2EgaW4gdmlkZW8gbW9kZSBvbmx5IG9uIHBpcGUgQSBvciBDKi8KLQkJ aWYgKHBpcGUgPT0gMCB8fCBwaXBlID09IDIpIHsKLQkJCVJFR19XUklURShtYXAtPnN0YXR1cywg UkVHX1JFQUQobWFwLT5zdGF0dXMpKTsKLQkJCW1zbGVlcCgxMDApOwotCQkJaWYgKFBJUEVfVkJM QU5LX1NUQVRVUyAmIFJFR19SRUFEKG1hcC0+c3RhdHVzKSkKLQkJCQlkZXZfZGJnKGRldi0+ZGV2 LCAiT0siKTsKLQkJCWVsc2UgewotCQkJCWRldl9kYmcoZGV2LT5kZXYsICJTVFVDSyEhISEiKTsK LQkJCQkvKnNodXRkb3duIGNvbnRyb2xsZXIqLwotCQkJCXRlbXAgPSBSRUdfUkVBRChtYXAtPmNu dHIpOwotCQkJCVJFR19XUklURShtYXAtPmNudHIsCi0JCQkJCQl0ZW1wICYgfkRJU1BMQVlfUExB TkVfRU5BQkxFKTsKLQkJCQlSRUdfV1JJVEUobWFwLT5iYXNlLCBSRUdfUkVBRChtYXAtPmJhc2Up KTsKLQkJCQkvKm1kZmxkX2RzaV9kcGlfc2h1dF9kb3duKGRldiwgcGlwZSk7Ki8KLQkJCQlSRUdf V1JJVEUoMHhiMDQ4LCAxKTsKLQkJCQltc2xlZXAoMTAwKTsKLQkJCQl0ZW1wID0gUkVHX1JFQUQo bWFwLT5jb25mKTsKLQkJCQl0ZW1wICY9IH5QSVBFQUNPTkZfRU5BQkxFOwotCQkJCVJFR19XUklU RShtYXAtPmNvbmYsIHRlbXApOwotCQkJCW1zbGVlcCgxMDApOyAvKndhaXQgZm9yIHBpcGUgZGlz YWJsZSovCi0JCQkJUkVHX1dSSVRFKE1JUElfREVWSUNFX1JFQURZX1JFRyhwaXBlKSwgMCk7Ci0J CQkJbXNsZWVwKDEwMCk7Ci0JCQkJUkVHX1dSSVRFKDB4YjAwNCwgUkVHX1JFQUQoMHhiMDA0KSk7 Ci0JCQkJLyogdHJ5IHRvIGJyaW5nIHRoZSBjb250cm9sbGVyIGJhY2sgdXAgYWdhaW4qLwotCQkJ CVJFR19XUklURShNSVBJX0RFVklDRV9SRUFEWV9SRUcocGlwZSksIDEpOwotCQkJCXRlbXAgPSBS RUdfUkVBRChtYXAtPmNudHIpOwotCQkJCVJFR19XUklURShtYXAtPmNudHIsCi0JCQkJCQl0ZW1w IHwgRElTUExBWV9QTEFORV9FTkFCTEUpOwotCQkJCVJFR19XUklURShtYXAtPmJhc2UsIFJFR19S RUFEKG1hcC0+YmFzZSkpOwotCQkJCS8qbWRmbGRfZHNpX2RwaV90dXJuX29uKGRldiwgcGlwZSk7 Ki8KLQkJCQlSRUdfV1JJVEUoMHhiMDQ4LCAyKTsKLQkJCQltc2xlZXAoMTAwKTsKLQkJCQl0ZW1w ID0gUkVHX1JFQUQobWFwLT5jb25mKTsKLQkJCQl0ZW1wIHw9IFBJUEVBQ09ORl9FTkFCTEU7Ci0J CQkJUkVHX1dSSVRFKG1hcC0+Y29uZiwgdGVtcCk7Ci0JCQl9Ci0JCX0KLQotCQlnbWFfY3J0Y19s b2FkX2x1dChjcnRjKTsKLQotCQkvKiBHaXZlIHRoZSBvdmVybGF5IHNjYWxlciBhIGNoYW5jZSB0 byBlbmFibGUKLQkJICAgaWYgaXQncyBvbiB0aGlzIHBpcGUgKi8KLQkJLyogcHNiX2ludGVsX2Ny dGNfZHBtc192aWRlbyhjcnRjLCB0cnVlKTsgVE9ETyAqLwotCi0JCWJyZWFrOwotCWNhc2UgRFJN X01PREVfRFBNU19PRkY6Ci0JCS8qIEdpdmUgdGhlIG92ZXJsYXkgc2NhbGVyIGEgY2hhbmNlIHRv IGRpc2FibGUKLQkJICogaWYgaXQncyBvbiB0aGlzIHBpcGUgKi8KLQkJLyogcHNiX2ludGVsX2Ny dGNfZHBtc192aWRlbyhjcnRjLCBGQUxTRSk7IFRPRE8gKi8KLQkJaWYgKHBpcGUgIT0gMSkKLQkJ CW1kZmxkX2RzaV9nZW5fZmlmb19yZWFkeShkZXYsCi0JCQkJTUlQSV9HRU5fRklGT19TVEFUX1JF RyhwaXBlKSwKLQkJCQlIU19DVFJMX0ZJRk9fRU1QVFkgfCBIU19EQVRBX0ZJRk9fRU1QVFkpOwot Ci0JCS8qIERpc2FibGUgdGhlIFZHQSBwbGFuZSB0aGF0IHdlIG5ldmVyIHVzZSAqLwotCQlSRUdf V1JJVEUoVkdBQ05UUkwsIFZHQV9ESVNQX0RJU0FCTEUpOwotCi0JCS8qIERpc2FibGUgZGlzcGxh eSBwbGFuZSAqLwotCQl0ZW1wID0gUkVHX1JFQUQobWFwLT5jbnRyKTsKLQkJaWYgKCh0ZW1wICYg RElTUExBWV9QTEFORV9FTkFCTEUpICE9IDApIHsKLQkJCVJFR19XUklURShtYXAtPmNudHIsCi0J CQkJICB0ZW1wICYgfkRJU1BMQVlfUExBTkVfRU5BQkxFKTsKLQkJCS8qIEZsdXNoIHRoZSBwbGFu ZSBjaGFuZ2VzICovCi0JCQlSRUdfV1JJVEUobWFwLT5iYXNlLCBSRUdfUkVBRChtYXAtPmJhc2Up KTsKLQkJCVJFR19SRUFEKG1hcC0+YmFzZSk7Ci0JCX0KLQotCQkvKiBOZXh0LCBkaXNhYmxlIGRp c3BsYXkgcGlwZXMgKi8KLQkJdGVtcCA9IFJFR19SRUFEKG1hcC0+Y29uZik7Ci0JCWlmICgodGVt cCAmIFBJUEVBQ09ORl9FTkFCTEUpICE9IDApIHsKLQkJCXRlbXAgJj0gflBJUEVBQ09ORl9FTkFC TEU7Ci0JCQl0ZW1wIHw9IFBJUEVDT05GX1BMQU5FX09GRiB8IFBJUEVDT05GX0NVUlNPUl9PRkY7 Ci0JCQlSRUdfV1JJVEUobWFwLT5jb25mLCB0ZW1wKTsKLQkJCVJFR19SRUFEKG1hcC0+Y29uZik7 Ci0KLQkJCS8qIFdhaXQgZm9yIGZvciB0aGUgcGlwZSBkaXNhYmxlIHRvIHRha2UgZWZmZWN0LiAq LwotCQkJbWRmbGRXYWl0Rm9yUGlwZURpc2FibGUoZGV2LCBwaXBlKTsKLQkJfQotCi0JCXRlbXAg PSBSRUdfUkVBRChtYXAtPmRwbGwpOwotCQlpZiAodGVtcCAmIERQTExfVkNPX0VOQUJMRSkgewot CQkJaWYgKChwaXBlICE9IDEgJiYgISgoUkVHX1JFQUQoUElQRUFDT05GKQotCQkJCXwgUkVHX1JF QUQoUElQRUNDT05GKSkgJiBQSVBFQUNPTkZfRU5BQkxFKSkKLQkJCQkJfHwgcGlwZSA9PSAxKSB7 Ci0JCQkJdGVtcCAmPSB+KERQTExfVkNPX0VOQUJMRSk7Ci0JCQkJUkVHX1dSSVRFKG1hcC0+ZHBs bCwgdGVtcCk7Ci0JCQkJUkVHX1JFQUQobWFwLT5kcGxsKTsKLQkJCQkvKiBXYWl0IGZvciB0aGUg Y2xvY2tzIHRvIHR1cm4gb2ZmLiAqLwotCQkJCS8qIEZJWE1FX01ERkxEIFBPIG1heSBuZWVkIG1v cmUgZGVsYXkgKi8KLQkJCQl1ZGVsYXkoNTAwKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0J Z21hX3Bvd2VyX2VuZChkZXYpOwotfQotCi0KLSNkZWZpbmUgTURGTERfTElNVF9EUExMXzE5CSAg ICAwCi0jZGVmaW5lIE1ERkxEX0xJTVRfRFBMTF8yNQkgICAgMQotI2RlZmluZSBNREZMRF9MSU1U X0RQTExfODMJICAgIDIKLSNkZWZpbmUgTURGTERfTElNVF9EUExMXzEwMAkgICAgMwotI2RlZmlu ZSBNREZMRF9MSU1UX0RTSVBMTF8xOQkgICAgNAotI2RlZmluZSBNREZMRF9MSU1UX0RTSVBMTF8y NQkgICAgNQotI2RlZmluZSBNREZMRF9MSU1UX0RTSVBMTF84MwkgICAgNgotI2RlZmluZSBNREZM RF9MSU1UX0RTSVBMTF8xMDAJICAgIDcKLQotI2RlZmluZSBNREZMRF9ET1RfTUlOCQkgIDE5NzUw Ci0jZGVmaW5lIE1ERkxEX0RPVF9NQVgJCSAgMTIwMDAwCi0jZGVmaW5lIE1ERkxEX0RQTExfTV9N SU5fMTkJICAgIDExMwotI2RlZmluZSBNREZMRF9EUExMX01fTUFYXzE5CSAgICAxNTUKLSNkZWZp bmUgTURGTERfRFBMTF9QMV9NSU5fMTkJICAgIDIKLSNkZWZpbmUgTURGTERfRFBMTF9QMV9NQVhf MTkJICAgIDEwCi0jZGVmaW5lIE1ERkxEX0RQTExfTV9NSU5fMjUJICAgIDEwMQotI2RlZmluZSBN REZMRF9EUExMX01fTUFYXzI1CSAgICAxMzAKLSNkZWZpbmUgTURGTERfRFBMTF9QMV9NSU5fMjUJ ICAgIDIKLSNkZWZpbmUgTURGTERfRFBMTF9QMV9NQVhfMjUJICAgIDEwCi0jZGVmaW5lIE1ERkxE X0RQTExfTV9NSU5fODMJICAgIDY0Ci0jZGVmaW5lIE1ERkxEX0RQTExfTV9NQVhfODMJICAgIDY0 Ci0jZGVmaW5lIE1ERkxEX0RQTExfUDFfTUlOXzgzCSAgICAyCi0jZGVmaW5lIE1ERkxEX0RQTExf UDFfTUFYXzgzCSAgICAyCi0jZGVmaW5lIE1ERkxEX0RQTExfTV9NSU5fMTAwCSAgICA2NAotI2Rl ZmluZSBNREZMRF9EUExMX01fTUFYXzEwMAkgICAgNjQKLSNkZWZpbmUgTURGTERfRFBMTF9QMV9N SU5fMTAwCSAgICAyCi0jZGVmaW5lIE1ERkxEX0RQTExfUDFfTUFYXzEwMAkgICAgMgotI2RlZmlu ZSBNREZMRF9EU0lQTExfTV9NSU5fMTkJICAgIDEzMQotI2RlZmluZSBNREZMRF9EU0lQTExfTV9N QVhfMTkJICAgIDE3NQotI2RlZmluZSBNREZMRF9EU0lQTExfUDFfTUlOXzE5CSAgICAzCi0jZGVm aW5lIE1ERkxEX0RTSVBMTF9QMV9NQVhfMTkJICAgIDgKLSNkZWZpbmUgTURGTERfRFNJUExMX01f TUlOXzI1CSAgICA5NwotI2RlZmluZSBNREZMRF9EU0lQTExfTV9NQVhfMjUJICAgIDE0MAotI2Rl ZmluZSBNREZMRF9EU0lQTExfUDFfTUlOXzI1CSAgICAzCi0jZGVmaW5lIE1ERkxEX0RTSVBMTF9Q MV9NQVhfMjUJICAgIDkKLSNkZWZpbmUgTURGTERfRFNJUExMX01fTUlOXzgzCSAgICAzMwotI2Rl ZmluZSBNREZMRF9EU0lQTExfTV9NQVhfODMJICAgIDkyCi0jZGVmaW5lIE1ERkxEX0RTSVBMTF9Q MV9NSU5fODMJICAgIDIKLSNkZWZpbmUgTURGTERfRFNJUExMX1AxX01BWF84MwkgICAgMwotI2Rl ZmluZSBNREZMRF9EU0lQTExfTV9NSU5fMTAwCSAgICA5NwotI2RlZmluZSBNREZMRF9EU0lQTExf TV9NQVhfMTAwCSAgICAxNDAKLSNkZWZpbmUgTURGTERfRFNJUExMX1AxX01JTl8xMDAJICAgIDMK LSNkZWZpbmUgTURGTERfRFNJUExMX1AxX01BWF8xMDAJICAgIDkKLQotc3RhdGljIGNvbnN0IHN0 cnVjdCBtcnN0X2xpbWl0X3QgbWRmbGRfbGltaXRzW10gPSB7Ci0JewkJCS8qIE1ERkxEX0xJTVRf RFBMTF8xOSAqLwotCSAuZG90ID0gey5taW4gPSBNREZMRF9ET1RfTUlOLCAubWF4ID0gTURGTERf RE9UX01BWH0sCi0JIC5tID0gey5taW4gPSBNREZMRF9EUExMX01fTUlOXzE5LCAubWF4ID0gTURG TERfRFBMTF9NX01BWF8xOX0sCi0JIC5wMSA9IHsubWluID0gTURGTERfRFBMTF9QMV9NSU5fMTks IC5tYXggPSBNREZMRF9EUExMX1AxX01BWF8xOX0sCi0JIH0sCi0JewkJCS8qIE1ERkxEX0xJTVRf RFBMTF8yNSAqLwotCSAuZG90ID0gey5taW4gPSBNREZMRF9ET1RfTUlOLCAubWF4ID0gTURGTERf RE9UX01BWH0sCi0JIC5tID0gey5taW4gPSBNREZMRF9EUExMX01fTUlOXzI1LCAubWF4ID0gTURG TERfRFBMTF9NX01BWF8yNX0sCi0JIC5wMSA9IHsubWluID0gTURGTERfRFBMTF9QMV9NSU5fMjUs IC5tYXggPSBNREZMRF9EUExMX1AxX01BWF8yNX0sCi0JIH0sCi0JewkJCS8qIE1ERkxEX0xJTVRf RFBMTF84MyAqLwotCSAuZG90ID0gey5taW4gPSBNREZMRF9ET1RfTUlOLCAubWF4ID0gTURGTERf RE9UX01BWH0sCi0JIC5tID0gey5taW4gPSBNREZMRF9EUExMX01fTUlOXzgzLCAubWF4ID0gTURG TERfRFBMTF9NX01BWF84M30sCi0JIC5wMSA9IHsubWluID0gTURGTERfRFBMTF9QMV9NSU5fODMs IC5tYXggPSBNREZMRF9EUExMX1AxX01BWF84M30sCi0JIH0sCi0JewkJCS8qIE1ERkxEX0xJTVRf RFBMTF8xMDAgKi8KLQkgLmRvdCA9IHsubWluID0gTURGTERfRE9UX01JTiwgLm1heCA9IE1ERkxE X0RPVF9NQVh9LAotCSAubSA9IHsubWluID0gTURGTERfRFBMTF9NX01JTl8xMDAsIC5tYXggPSBN REZMRF9EUExMX01fTUFYXzEwMH0sCi0JIC5wMSA9IHsubWluID0gTURGTERfRFBMTF9QMV9NSU5f MTAwLCAubWF4ID0gTURGTERfRFBMTF9QMV9NQVhfMTAwfSwKLQkgfSwKLQl7CQkJLyogTURGTERf TElNVF9EU0lQTExfMTkgKi8KLQkgLmRvdCA9IHsubWluID0gTURGTERfRE9UX01JTiwgLm1heCA9 IE1ERkxEX0RPVF9NQVh9LAotCSAubSA9IHsubWluID0gTURGTERfRFNJUExMX01fTUlOXzE5LCAu bWF4ID0gTURGTERfRFNJUExMX01fTUFYXzE5fSwKLQkgLnAxID0gey5taW4gPSBNREZMRF9EU0lQ TExfUDFfTUlOXzE5LCAubWF4ID0gTURGTERfRFNJUExMX1AxX01BWF8xOX0sCi0JIH0sCi0JewkJ CS8qIE1ERkxEX0xJTVRfRFNJUExMXzI1ICovCi0JIC5kb3QgPSB7Lm1pbiA9IE1ERkxEX0RPVF9N SU4sIC5tYXggPSBNREZMRF9ET1RfTUFYfSwKLQkgLm0gPSB7Lm1pbiA9IE1ERkxEX0RTSVBMTF9N X01JTl8yNSwgLm1heCA9IE1ERkxEX0RTSVBMTF9NX01BWF8yNX0sCi0JIC5wMSA9IHsubWluID0g TURGTERfRFNJUExMX1AxX01JTl8yNSwgLm1heCA9IE1ERkxEX0RTSVBMTF9QMV9NQVhfMjV9LAot CSB9LAotCXsJCQkvKiBNREZMRF9MSU1UX0RTSVBMTF84MyAqLwotCSAuZG90ID0gey5taW4gPSBN REZMRF9ET1RfTUlOLCAubWF4ID0gTURGTERfRE9UX01BWH0sCi0JIC5tID0gey5taW4gPSBNREZM RF9EU0lQTExfTV9NSU5fODMsIC5tYXggPSBNREZMRF9EU0lQTExfTV9NQVhfODN9LAotCSAucDEg PSB7Lm1pbiA9IE1ERkxEX0RTSVBMTF9QMV9NSU5fODMsIC5tYXggPSBNREZMRF9EU0lQTExfUDFf TUFYXzgzfSwKLQkgfSwKLQl7CQkJLyogTURGTERfTElNVF9EU0lQTExfMTAwICovCi0JIC5kb3Qg PSB7Lm1pbiA9IE1ERkxEX0RPVF9NSU4sIC5tYXggPSBNREZMRF9ET1RfTUFYfSwKLQkgLm0gPSB7 Lm1pbiA9IE1ERkxEX0RTSVBMTF9NX01JTl8xMDAsIC5tYXggPSBNREZMRF9EU0lQTExfTV9NQVhf MTAwfSwKLQkgLnAxID0gey5taW4gPSBNREZMRF9EU0lQTExfUDFfTUlOXzEwMCwgLm1heCA9IE1E RkxEX0RTSVBMTF9QMV9NQVhfMTAwfSwKLQkgfSwKLX07Ci0KLSNkZWZpbmUgTURGTERfTV9NSU4J ICAgIDIxCi0jZGVmaW5lIE1ERkxEX01fTUFYCSAgICAxODAKLXN0YXRpYyBjb25zdCB1MzIgbWRm bGRfbV9jb252ZXJ0c1tdID0gewotLyogTSBjb25maWd1cmF0aW9uIHRhYmxlIGZyb20gOS1iaXQg TEZTUiB0YWJsZSAqLwotCTIyNCwgMzY4LCA0NDAsIDIyMCwgMzY2LCA0MzksIDIxOSwgMzY1LCAx ODIsIDM0NywgLyogMjEgLSAzMCAqLwotCTE3MywgMzQyLCAxNzEsIDg1LCAyOTgsIDE0OSwgNzQs IDM3LCAxOCwgMjY1LCAgIC8qIDMxIC0gNDAgKi8KLQkzODgsIDE5NCwgMzUzLCA0MzIsIDIxNiwg MTA4LCAzMTAsIDE1NSwgMzMzLCAxNjYsIC8qIDQxIC0gNTAgKi8KLQk4MywgNDEsIDI3NiwgMTM4 LCAzMjUsIDE2MiwgMzM3LCAxNjgsIDM0MCwgMTcwLCAvKiA1MSAtIDYwICovCi0JMzQxLCA0MjYs IDQ2OSwgMjM0LCAzNzMsIDQ0MiwgMjIxLCAxMTAsIDMxMSwgNDExLCAvKiA2MSAtIDcwICovCi0J NDYxLCA0ODYsIDI0MywgMzc3LCAxODgsIDM1MCwgMTc1LCAzNDMsIDQyNywgMjEzLCAvKiA3MSAt IDgwICovCi0JMTA2LCA1MywgMjgyLCAzOTcsIDM1NCwgMjI3LCAxMTMsIDU2LCAyODQsIDE0Miwg LyogODEgLSA5MCAqLwotCTcxLCAzNSwgMjczLCAxMzYsIDMyNCwgNDE4LCA0NjUsIDQ4OCwgNTAw LCA1MDYsIC8qIDkxIC0gMTAwICovCi0JMjUzLCAxMjYsIDYzLCAyODcsIDM5OSwgNDU1LCA0ODMs IDI0MSwgMzc2LCA0NDQsIC8qIDEwMSAtIDExMCAqLwotCTQ3OCwgNDk1LCA1MDMsIDI1MSwgMzgx LCA0NDYsIDQ3OSwgMjM5LCAzNzUsIDQ0MywgLyogMTExIC0gMTIwICovCi0JNDc3LCAyMzgsIDEx OSwgMzE1LCAxNTcsIDc4LCAyOTUsIDE0NywgMzI5LCA0MjAsIC8qIDEyMSAtIDEzMCAqLwotCTIx MCwgMTA1LCAzMDgsIDE1NCwgNzcsIDM4LCAyNzUsIDEzNywgNjgsIDI5MCwgLyogMTMxIC0gMTQw ICovCi0JMTQ1LCAzMjgsIDE2NCwgODIsIDI5NywgNDA0LCA0NTgsIDQ4NSwgNDk4LCAyNDksIC8q IDE0MSAtIDE1MCAqLwotCTM4MCwgMTkwLCAzNTEsIDQzMSwgNDcxLCAyMzUsIDExNywgMzE0LCA0 MTMsIDIwNiwgLyogMTUxIC0gMTYwICovCi0JMTAzLCA1MSwgMjUsIDEyLCAyNjIsIDM4NywgMTkz LCA5NiwgNDgsIDI4MCwgLyogMTYxIC0gMTcwICovCi0JMzk2LCAxOTgsIDk5LCAzMDUsIDE1Miwg NzYsIDI5NCwgNDAzLCA0NTcsIDIyOCwgLyogMTcxIC0gMTgwICovCi19OwotCi1zdGF0aWMgY29u c3Qgc3RydWN0IG1yc3RfbGltaXRfdCAqbWRmbGRfbGltaXQoc3RydWN0IGRybV9jcnRjICpjcnRj KQotewotCWNvbnN0IHN0cnVjdCBtcnN0X2xpbWl0X3QgKmxpbWl0ID0gTlVMTDsKLQlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCWlmIChnbWFfcGlwZV9oYXNfdHlwZShjcnRj LCBJTlRFTF9PVVRQVVRfTUlQSSkKLQkgICAgfHwgZ21hX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5U RUxfT1VUUFVUX01JUEkyKSkgewotCQlpZiAoKGtzZWwgPT0gS1NFTF9DUllTVEFMXzE5KSB8fCAo a3NlbCA9PSBLU0VMX0JZUEFTU18xOSkpCi0JCQlsaW1pdCA9ICZtZGZsZF9saW1pdHNbTURGTERf TElNVF9EU0lQTExfMTldOwotCQllbHNlIGlmIChrc2VsID09IEtTRUxfQllQQVNTXzI1KQotCQkJ bGltaXQgPSAmbWRmbGRfbGltaXRzW01ERkxEX0xJTVRfRFNJUExMXzI1XTsKLQkJZWxzZSBpZiAo KGtzZWwgPT0gS1NFTF9CWVBBU1NfODNfMTAwKSAmJgotCQkJCShkZXZfcHJpdi0+Y29yZV9mcmVx ID09IDE2NikpCi0JCQlsaW1pdCA9ICZtZGZsZF9saW1pdHNbTURGTERfTElNVF9EU0lQTExfODNd OwotCQllbHNlIGlmICgoa3NlbCA9PSBLU0VMX0JZUEFTU184M18xMDApICYmCi0JCQkgKGRldl9w cml2LT5jb3JlX2ZyZXEgPT0gMTAwIHx8Ci0JCQkJZGV2X3ByaXYtPmNvcmVfZnJlcSA9PSAyMDAp KQotCQkJbGltaXQgPSAmbWRmbGRfbGltaXRzW01ERkxEX0xJTVRfRFNJUExMXzEwMF07Ci0JfSBl bHNlIGlmIChnbWFfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfSERNSSkpIHsKLQkJ aWYgKChrc2VsID09IEtTRUxfQ1JZU1RBTF8xOSkgfHwgKGtzZWwgPT0gS1NFTF9CWVBBU1NfMTkp KQotCQkJbGltaXQgPSAmbWRmbGRfbGltaXRzW01ERkxEX0xJTVRfRFBMTF8xOV07Ci0JCWVsc2Ug aWYgKGtzZWwgPT0gS1NFTF9CWVBBU1NfMjUpCi0JCQlsaW1pdCA9ICZtZGZsZF9saW1pdHNbTURG TERfTElNVF9EUExMXzI1XTsKLQkJZWxzZSBpZiAoKGtzZWwgPT0gS1NFTF9CWVBBU1NfODNfMTAw KSAmJgotCQkJCShkZXZfcHJpdi0+Y29yZV9mcmVxID09IDE2NikpCi0JCQlsaW1pdCA9ICZtZGZs ZF9saW1pdHNbTURGTERfTElNVF9EUExMXzgzXTsKLQkJZWxzZSBpZiAoKGtzZWwgPT0gS1NFTF9C WVBBU1NfODNfMTAwKSAmJgotCQkJCSAoZGV2X3ByaXYtPmNvcmVfZnJlcSA9PSAxMDAgfHwKLQkJ CQkgZGV2X3ByaXYtPmNvcmVfZnJlcSA9PSAyMDApKQotCQkJbGltaXQgPSAmbWRmbGRfbGltaXRz W01ERkxEX0xJTVRfRFBMTF8xMDBdOwotCX0gZWxzZSB7Ci0JCWxpbWl0ID0gTlVMTDsKLQkJZGV2 X2RiZyhkZXYtPmRldiwgIm1kZmxkX2xpbWl0IFdyb25nIGRpc3BsYXkgdHlwZS5cbiIpOwotCX0K LQotCXJldHVybiBsaW1pdDsKLX0KLQotLyoqIERlcml2ZSB0aGUgcGl4ZWwgY2xvY2sgZm9yIHRo ZSBnaXZlbiByZWZjbGsgYW5kIGRpdmlzb3JzIGZvciA4eHggY2hpcHMuICovCi1zdGF0aWMgdm9p ZCBtZGZsZF9jbG9jayhpbnQgcmVmY2xrLCBzdHJ1Y3QgbXJzdF9jbG9ja190ICpjbG9jaykKLXsK LQljbG9jay0+ZG90ID0gKHJlZmNsayAqIGNsb2NrLT5tKSAvIGNsb2NrLT5wMTsKLX0KLQotLyoK LSAqIFJldHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9j ayB3aXRoIHRoZSBnaXZlbiByZWZjbGssCi0gKiBvciBGQUxTRS4gIERpdmlzb3IgdmFsdWVzIGFy ZSB0aGUgYWN0dWFsIGRpdmlzb3JzIGZvcgotICovCi1zdGF0aWMgYm9vbAotbWRmbGRGaW5kQmVz dFBMTChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB0YXJnZXQsIGludCByZWZjbGssCi0JCXN0 cnVjdCBtcnN0X2Nsb2NrX3QgKmJlc3RfY2xvY2spCi17Ci0Jc3RydWN0IG1yc3RfY2xvY2tfdCBj bG9jazsKLQljb25zdCBzdHJ1Y3QgbXJzdF9saW1pdF90ICpsaW1pdCA9IG1kZmxkX2xpbWl0KGNy dGMpOwotCWludCBlcnIgPSB0YXJnZXQ7Ci0KLQltZW1zZXQoYmVzdF9jbG9jaywgMCwgc2l6ZW9m KCpiZXN0X2Nsb2NrKSk7Ci0KLQlmb3IgKGNsb2NrLm0gPSBsaW1pdC0+bS5taW47IGNsb2NrLm0g PD0gbGltaXQtPm0ubWF4OyBjbG9jay5tKyspIHsKLQkJZm9yIChjbG9jay5wMSA9IGxpbWl0LT5w MS5taW47IGNsb2NrLnAxIDw9IGxpbWl0LT5wMS5tYXg7Ci0JCSAgICAgY2xvY2sucDErKykgewot CQkJaW50IHRoaXNfZXJyOwotCi0JCQltZGZsZF9jbG9jayhyZWZjbGssICZjbG9jayk7Ci0KLQkJ CXRoaXNfZXJyID0gYWJzKGNsb2NrLmRvdCAtIHRhcmdldCk7Ci0JCQlpZiAodGhpc19lcnIgPCBl cnIpIHsKLQkJCQkqYmVzdF9jbG9jayA9IGNsb2NrOwotCQkJCWVyciA9IHRoaXNfZXJyOwotCQkJ fQotCQl9Ci0JfQotCXJldHVybiBlcnIgIT0gdGFyZ2V0OwotfQotCi1zdGF0aWMgaW50IG1kZmxk X2NydGNfbW9kZV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJICAgICAgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq YWRqdXN0ZWRfbW9kZSwKLQkJCSAgICAgIGludCB4LCBpbnQgeSwKLQkJCSAgICAgIHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKm9sZF9mYikKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0 Yy0+ZGV2OwotCXN0cnVjdCBnbWFfY3J0YyAqZ21hX2NydGMgPSB0b19nbWFfY3J0YyhjcnRjKTsK LQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0J aW50IHBpcGUgPSBnbWFfY3J0Yy0+cGlwZTsKLQljb25zdCBzdHJ1Y3QgcHNiX29mZnNldCAqbWFw ID0gJmRldl9wcml2LT5yZWdtYXBbcGlwZV07Ci0JaW50IHJlZmNsayA9IDA7Ci0JaW50IGNsa19u ID0gMCwgY2xrX3AyID0gMCwgY2xrX2J5dGUgPSAxLCBjbGsgPSAwLCBtX2NvbnYgPSAwLAotCQkJ CQkJCQljbGtfdG1wID0gMDsKLQlzdHJ1Y3QgbXJzdF9jbG9ja190IGNsb2NrOwotCWJvb2wgb2s7 Ci0JdTMyIGRwbGwgPSAwLCBmcCA9IDA7Ci0JYm9vbCBpc19taXBpID0gZmFsc2UsIGlzX21pcGky ID0gZmFsc2UsIGlzX2hkbWkgPSBmYWxzZTsKLQlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2Rl X2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOwotCXN0cnVjdCBnbWFfZW5jb2RlciAqZ21hX2Vu Y29kZXIgPSBOVUxMOwotCXVpbnQ2NF90IHNjYWxpbmdUeXBlID0gRFJNX01PREVfU0NBTEVfRlVM TFNDUkVFTjsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Ci0Jc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcjsKLQlpbnQgdGltZW91dCA9IDA7Ci0JaW50IHJldDsKLQotCWRldl9k YmcoZGV2LT5kZXYsICJwaXBlID0gMHgleFxuIiwgcGlwZSk7Ci0KLQlyZXQgPSBjaGVja19mYihj cnRjLT5wcmltYXJ5LT5mYik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWRldl9kYmco ZGV2LT5kZXYsICJhZGp1c3RlZF9oZGlzcGxheSA9ICVkXG4iLAotCQkgYWRqdXN0ZWRfbW9kZS0+ aGRpc3BsYXkpOwotCWRldl9kYmcoZGV2LT5kZXYsICJhZGp1c3RlZF92ZGlzcGxheSA9ICVkXG4i LAotCQkgYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkpOwotCWRldl9kYmcoZGV2LT5kZXYsICJhZGp1 c3RlZF9oc3luY19zdGFydCA9ICVkXG4iLAotCQkgYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQp OwotCWRldl9kYmcoZGV2LT5kZXYsICJhZGp1c3RlZF9oc3luY19lbmQgPSAlZFxuIiwKLQkJIGFk anVzdGVkX21vZGUtPmhzeW5jX2VuZCk7Ci0JZGV2X2RiZyhkZXYtPmRldiwgImFkanVzdGVkX2h0 b3RhbCA9ICVkXG4iLAotCQkgYWRqdXN0ZWRfbW9kZS0+aHRvdGFsKTsKLQlkZXZfZGJnKGRldi0+ ZGV2LCAiYWRqdXN0ZWRfdnN5bmNfc3RhcnQgPSAlZFxuIiwKLQkJIGFkanVzdGVkX21vZGUtPnZz eW5jX3N0YXJ0KTsKLQlkZXZfZGJnKGRldi0+ZGV2LCAiYWRqdXN0ZWRfdnN5bmNfZW5kID0gJWRc biIsCi0JCSBhZGp1c3RlZF9tb2RlLT52c3luY19lbmQpOwotCWRldl9kYmcoZGV2LT5kZXYsICJh ZGp1c3RlZF92dG90YWwgPSAlZFxuIiwKLQkJIGFkanVzdGVkX21vZGUtPnZ0b3RhbCk7Ci0JZGV2 X2RiZyhkZXYtPmRldiwgImFkanVzdGVkX2Nsb2NrID0gJWRcbiIsCi0JCSBhZGp1c3RlZF9tb2Rl LT5jbG9jayk7Ci0JZGV2X2RiZyhkZXYtPmRldiwgImhkaXNwbGF5ID0gJWRcbiIsCi0JCSBtb2Rl LT5oZGlzcGxheSk7Ci0JZGV2X2RiZyhkZXYtPmRldiwgInZkaXNwbGF5ID0gJWRcbiIsCi0JCSBt b2RlLT52ZGlzcGxheSk7Ci0KLQlpZiAoIWdtYV9wb3dlcl9iZWdpbihkZXYsIHRydWUpKQotCQly ZXR1cm4gMDsKLQotCW1lbWNweSgmZ21hX2NydGMtPnNhdmVkX21vZGUsIG1vZGUsCi0JCQkJCXNp emVvZihzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSkpOwotCW1lbWNweSgmZ21hX2NydGMtPnNhdmVk X2FkanVzdGVkX21vZGUsIGFkanVzdGVkX21vZGUsCi0JCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSkpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZtb2RlX2Nv bmZpZy0+Y29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKLQkJZW5jb2RlciA9IGNvbm5lY3Rvci0+ZW5j b2RlcjsKLQkJaWYgKCFlbmNvZGVyKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGVuY29kZXItPmNy dGMgIT0gY3J0YykKLQkJCWNvbnRpbnVlOwotCi0JCWdtYV9lbmNvZGVyID0gZ21hX2F0dGFjaGVk X2VuY29kZXIoY29ubmVjdG9yKTsKLQotCQlzd2l0Y2ggKGdtYV9lbmNvZGVyLT50eXBlKSB7Ci0J CWNhc2UgSU5URUxfT1VUUFVUX01JUEk6Ci0JCQlpc19taXBpID0gdHJ1ZTsKLQkJCWJyZWFrOwot CQljYXNlIElOVEVMX09VVFBVVF9NSVBJMjoKLQkJCWlzX21pcGkyID0gdHJ1ZTsKLQkJCWJyZWFr OwotCQljYXNlIElOVEVMX09VVFBVVF9IRE1JOgotCQkJaXNfaGRtaSA9IHRydWU7Ci0JCQlicmVh azsKLQkJfQotCX0KLQotCS8qIERpc2FibGUgdGhlIFZHQSBwbGFuZSB0aGF0IHdlIG5ldmVyIHVz ZSAqLwotCVJFR19XUklURShWR0FDTlRSTCwgVkdBX0RJU1BfRElTQUJMRSk7Ci0KLQkvKiBEaXNh YmxlIHRoZSBwYW5lbCBmaXR0ZXIgaWYgaXQgd2FzIG9uIG91ciBwaXBlICovCi0JaWYgKHBzYl9p bnRlbF9wYW5lbF9maXR0ZXJfcGlwZShkZXYpID09IHBpcGUpCi0JCVJFR19XUklURShQRklUX0NP TlRST0wsIDApOwotCi0JLyogcGlwZXNyYyBhbmQgZHNwc2l6ZSBjb250cm9sIHRoZSBzaXplIHRo YXQgaXMgc2NhbGVkIGZyb20sCi0JICogd2hpY2ggc2hvdWxkIGFsd2F5cyBiZSB0aGUgdXNlcidz IHJlcXVlc3RlZCBzaXplLgotCSAqLwotCWlmIChwaXBlID09IDEpIHsKLQkJLyogRklYTUU6IFRv IG1ha2UgSERNSSBkaXNwbGF5IHdpdGggODY0eDQ4MCAoVFBPKSwgNDgweDg2NAotCQkgKiAoUFlS KSBvciA0ODB4ODU0IChUTUQpLCBzZXQgdGhlIHNwcml0ZSB3aWR0aC9oZWlnaHQgYW5kCi0JCSAq IHNvdWNlIGltYWdlIHNpemUgcmVnaXN0ZXJzIHdpdGggdGhlIGFkanVzdGVkIG1vZGUgZm9yCi0J CSAqIHBpcGUgQi4KLQkJICovCi0KLQkJLyoKLQkJICogVGhlIGRlZmluZWQgc3ByaXRlIHJlY3Rh bmdsZSBtdXN0IGFsd2F5cyBiZSBjb21wbGV0ZWx5Ci0JCSAqIGNvbnRhaW5lZCB3aXRoaW4gdGhl IGRpc3BsYXlhYmxlIGFyZWEgb2YgdGhlIHNjcmVlbiBpbWFnZQotCQkgKiAoZnJhbWUgYnVmZmVy KS4KLQkJICovCi0JCVJFR19XUklURShtYXAtPnNpemUsICgobWluKG1vZGUtPmNydGNfdmRpc3Bs YXksIGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkpIC0gMSkgPDwgMTYpCi0JCQkJfCAobWlu KG1vZGUtPmNydGNfaGRpc3BsYXksIGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkpIC0gMSkp OwotCQkvKiBTZXQgdGhlIENSVEMgd2l0aCBlbmNvZGVyIG1vZGUuICovCi0JCVJFR19XUklURSht YXAtPnNyYywgKChtb2RlLT5jcnRjX2hkaXNwbGF5IC0gMSkgPDwgMTYpCi0JCQkJIHwgKG1vZGUt PmNydGNfdmRpc3BsYXkgLSAxKSk7Ci0JfSBlbHNlIHsKLQkJUkVHX1dSSVRFKG1hcC0+c2l6ZSwK LQkJCQkoKG1vZGUtPmNydGNfdmRpc3BsYXkgLSAxKSA8PCAxNikgfAotCQkJCQkJKG1vZGUtPmNy dGNfaGRpc3BsYXkgLSAxKSk7Ci0JCVJFR19XUklURShtYXAtPnNyYywKLQkJCQkoKG1vZGUtPmNy dGNfaGRpc3BsYXkgLSAxKSA8PCAxNikgfAotCQkJCQkJKG1vZGUtPmNydGNfdmRpc3BsYXkgLSAx KSk7Ci0JfQotCi0JUkVHX1dSSVRFKG1hcC0+cG9zLCAwKTsKLQotCWlmIChnbWFfZW5jb2RlcikK LQkJZHJtX29iamVjdF9wcm9wZXJ0eV9nZXRfdmFsdWUoJmNvbm5lY3Rvci0+YmFzZSwKLQkJCWRl di0+bW9kZV9jb25maWcuc2NhbGluZ19tb2RlX3Byb3BlcnR5LCAmc2NhbGluZ1R5cGUpOwotCi0J aWYgKHNjYWxpbmdUeXBlID09IERSTV9NT0RFX1NDQUxFX05PX1NDQUxFKSB7Ci0JCS8qIE1lZGZp ZWxkIGRvZXNuJ3QgaGF2ZSByZWdpc3RlciBzdXBwb3J0IGZvciBjZW50ZXJpbmcgc28gd2UKLQkJ ICogbmVlZCB0byBtZXNzIHdpdGggdGhlIGgvdmJsYW5rIGFuZCBoL3ZzeW5jIHN0YXJ0IGFuZCBl bmRzCi0JCSAqIHRvIGdldCBjZW50ZXJpbmcKLQkJICovCi0JCWludCBvZmZzZXRYID0gMCwgb2Zm c2V0WSA9IDA7Ci0KLQkJb2Zmc2V0WCA9IChhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5IC0K LQkJCQkJbW9kZS0+Y3J0Y19oZGlzcGxheSkgLyAyOwotCQlvZmZzZXRZID0gKGFkanVzdGVkX21v ZGUtPmNydGNfdmRpc3BsYXkgLQotCQkJCQltb2RlLT5jcnRjX3ZkaXNwbGF5KSAvIDI7Ci0KLQkJ UkVHX1dSSVRFKG1hcC0+aHRvdGFsLCAobW9kZS0+Y3J0Y19oZGlzcGxheSAtIDEpIHwKLQkJCSgo YWRqdXN0ZWRfbW9kZS0+Y3J0Y19odG90YWwgLSAxKSA8PCAxNikpOwotCQlSRUdfV1JJVEUobWFw LT52dG90YWwsIChtb2RlLT5jcnRjX3ZkaXNwbGF5IC0gMSkgfAotCQkJKChhZGp1c3RlZF9tb2Rl LT5jcnRjX3Z0b3RhbCAtIDEpIDw8IDE2KSk7Ci0JCVJFR19XUklURShtYXAtPmhibGFuaywgKGFk anVzdGVkX21vZGUtPmNydGNfaGJsYW5rX3N0YXJ0IC0KLQkJCQkJCQkJb2Zmc2V0WCAtIDEpIHwK LQkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfZW5kIC0gb2Zmc2V0WCAtIDEpIDw8IDE2 KSk7Ci0JCVJFR19XUklURShtYXAtPmhzeW5jLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19z dGFydCAtCi0JCQkJCQkJCW9mZnNldFggLSAxKSB8Ci0JCQkoKGFkanVzdGVkX21vZGUtPmNydGNf aHN5bmNfZW5kIC0gb2Zmc2V0WCAtIDEpIDw8IDE2KSk7Ci0JCVJFR19XUklURShtYXAtPnZibGFu aywgKGFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX3N0YXJ0IC0KLQkJCQkJCQkJb2Zmc2V0WSAt IDEpIHwKLQkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192YmxhbmtfZW5kIC0gb2Zmc2V0WSAtIDEp IDw8IDE2KSk7Ci0JCVJFR19XUklURShtYXAtPnZzeW5jLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192 c3luY19zdGFydCAtCi0JCQkJCQkJCW9mZnNldFkgLSAxKSB8Ci0JCQkoKGFkanVzdGVkX21vZGUt PmNydGNfdnN5bmNfZW5kIC0gb2Zmc2V0WSAtIDEpIDw8IDE2KSk7Ci0JfSBlbHNlIHsKLQkJUkVH X1dSSVRFKG1hcC0+aHRvdGFsLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIDEpIHwK LQkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19odG90YWwgLSAxKSA8PCAxNikpOwotCQlSRUdfV1JJ VEUobWFwLT52dG90YWwsIChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5IC0gMSkgfAotCQkJ KChhZGp1c3RlZF9tb2RlLT5jcnRjX3Z0b3RhbCAtIDEpIDw8IDE2KSk7Ci0JCVJFR19XUklURSht YXAtPmhibGFuaywgKGFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5rX3N0YXJ0IC0gMSkgfAotCQkJ KChhZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFua19lbmQgLSAxKSA8PCAxNikpOwotCQlSRUdfV1JJ VEUobWFwLT5oc3luYywgKGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgLSAxKSB8Ci0J CQkoKGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kIC0gMSkgPDwgMTYpKTsKLQkJUkVHX1dS SVRFKG1hcC0+dmJsYW5rLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQgLSAxKSB8 Ci0JCQkoKGFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX2VuZCAtIDEpIDw8IDE2KSk7Ci0JCVJF R19XUklURShtYXAtPnZzeW5jLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCAtIDEp IHwKLQkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgLSAxKSA8PCAxNikpOwotCX0K LQotCS8qIEZsdXNoIHRoZSBwbGFuZSBjaGFuZ2VzICovCi0JewotCQljb25zdCBzdHJ1Y3QgZHJt X2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0KLQkJICAgIGNydGMtPmhlbHBlcl9wcml2 YXRlOwotCQljcnRjX2Z1bmNzLT5tb2RlX3NldF9iYXNlKGNydGMsIHgsIHksIG9sZF9mYik7Ci0J fQotCi0JLyogc2V0dXAgcGlwZWNvbmYgKi8KLQlkZXZfcHJpdi0+cGlwZWNvbmZbcGlwZV0gPSBQ SVBFQUNPTkZfRU5BQkxFOyAvKiBGSVhNRV9KTElVNyBSRUdfUkVBRChwaXBlY29uZl9yZWcpOyAq LwotCi0JLyogU2V0IHVwIHRoZSBkaXNwbGF5IHBsYW5lIHJlZ2lzdGVyICovCi0JZGV2X3ByaXYt PmRzcGNudHJbcGlwZV0gPSBSRUdfUkVBRChtYXAtPmNudHIpOwotCWRldl9wcml2LT5kc3BjbnRy W3BpcGVdIHw9IHBpcGUgPDwgRElTUFBMQU5FX1NFTF9QSVBFX1BPUzsKLQlkZXZfcHJpdi0+ZHNw Y250cltwaXBlXSB8PSBESVNQTEFZX1BMQU5FX0VOQUJMRTsKLQotCWlmIChpc19taXBpMikKLQkJ Z290byBtcnN0X2NydGNfbW9kZV9zZXRfZXhpdDsKLQljbGsgPSBhZGp1c3RlZF9tb2RlLT5jbG9j azsKLQotCWlmIChpc19oZG1pKSB7Ci0JCWlmICgoa3NlbCA9PSBLU0VMX0NSWVNUQUxfMTkpIHx8 IChrc2VsID09IEtTRUxfQllQQVNTXzE5KSkgewotCQkJcmVmY2xrID0gMTkyMDA7Ci0KLQkJCWlm IChpc19taXBpIHx8IGlzX21pcGkyKQotCQkJCWNsa19uID0gMSwgY2xrX3AyID0gODsKLQkJCWVs c2UgaWYgKGlzX2hkbWkpCi0JCQkJY2xrX24gPSAxLCBjbGtfcDIgPSAxMDsKLQkJfSBlbHNlIGlm IChrc2VsID09IEtTRUxfQllQQVNTXzI1KSB7Ci0JCQlyZWZjbGsgPSAyNTAwMDsKLQotCQkJaWYg KGlzX21pcGkgfHwgaXNfbWlwaTIpCi0JCQkJY2xrX24gPSAxLCBjbGtfcDIgPSA4OwotCQkJZWxz ZSBpZiAoaXNfaGRtaSkKLQkJCQljbGtfbiA9IDEsIGNsa19wMiA9IDEwOwotCQl9IGVsc2UgaWYg KChrc2VsID09IEtTRUxfQllQQVNTXzgzXzEwMCkgJiYKLQkJCQkJZGV2X3ByaXYtPmNvcmVfZnJl cSA9PSAxNjYpIHsKLQkJCXJlZmNsayA9IDgzMDAwOwotCi0JCQlpZiAoaXNfbWlwaSB8fCBpc19t aXBpMikKLQkJCQljbGtfbiA9IDQsIGNsa19wMiA9IDg7Ci0JCQllbHNlIGlmIChpc19oZG1pKQot CQkJCWNsa19uID0gNCwgY2xrX3AyID0gMTA7Ci0JCX0gZWxzZSBpZiAoKGtzZWwgPT0gS1NFTF9C WVBBU1NfODNfMTAwKSAmJgotCQkJCQkoZGV2X3ByaXYtPmNvcmVfZnJlcSA9PSAxMDAgfHwKLQkJ CQkJZGV2X3ByaXYtPmNvcmVfZnJlcSA9PSAyMDApKSB7Ci0JCQlyZWZjbGsgPSAxMDAwMDA7Ci0J CQlpZiAoaXNfbWlwaSB8fCBpc19taXBpMikKLQkJCQljbGtfbiA9IDQsIGNsa19wMiA9IDg7Ci0J CQllbHNlIGlmIChpc19oZG1pKQotCQkJCWNsa19uID0gNCwgY2xrX3AyID0gMTA7Ci0JCX0KLQot CQlpZiAoaXNfbWlwaSkKLQkJCWNsa19ieXRlID0gZGV2X3ByaXYtPmJwcCAvIDg7Ci0JCWVsc2Ug aWYgKGlzX21pcGkyKQotCQkJY2xrX2J5dGUgPSBkZXZfcHJpdi0+YnBwMiAvIDg7Ci0KLQkJY2xr X3RtcCA9IGNsayAqIGNsa19uICogY2xrX3AyICogY2xrX2J5dGU7Ci0KLQkJZGV2X2RiZyhkZXYt PmRldiwgImNsayA9ICVkLCBjbGtfbiA9ICVkLCBjbGtfcDIgPSAlZC5cbiIsCi0JCQkJCWNsaywg Y2xrX24sIGNsa19wMik7Ci0JCWRldl9kYmcoZGV2LT5kZXYsICJhZGp1c3RlZF9tb2RlLT5jbG9j ayA9ICVkLCBjbGtfdG1wID0gJWQuXG4iLAotCQkJCQlhZGp1c3RlZF9tb2RlLT5jbG9jaywgY2xr X3RtcCk7Ci0KLQkJb2sgPSBtZGZsZEZpbmRCZXN0UExMKGNydGMsIGNsa190bXAsIHJlZmNsaywg JmNsb2NrKTsKLQotCQlpZiAoIW9rKSB7Ci0JCQlEUk1fRVJST1IKLQkJCSAgICAoIm1kZmxkRmlu ZEJlc3RQTEwgZmFpbCBpbiBtZGZsZF9jcnRjX21vZGVfc2V0LlxuIik7Ci0JCX0gZWxzZSB7Ci0J CQltX2NvbnYgPSBtZGZsZF9tX2NvbnZlcnRzWyhjbG9jay5tIC0gTURGTERfTV9NSU4pXTsKLQot CQkJZGV2X2RiZyhkZXYtPmRldiwgImRvdCBjbG9jayA9ICVkLCIKLQkJCQkgIm0gPSAlZCwgcDEg PSAlZCwgbV9jb252ID0gJWQuXG4iLAotCQkJCQljbG9jay5kb3QsIGNsb2NrLm0sCi0JCQkJCWNs b2NrLnAxLCBtX2NvbnYpOwotCQl9Ci0KLQkJZHBsbCA9IFJFR19SRUFEKG1hcC0+ZHBsbCk7Ci0K LQkJaWYgKGRwbGwgJiBEUExMX1ZDT19FTkFCTEUpIHsKLQkJCWRwbGwgJj0gfkRQTExfVkNPX0VO QUJMRTsKLQkJCVJFR19XUklURShtYXAtPmRwbGwsIGRwbGwpOwotCQkJUkVHX1JFQUQobWFwLT5k cGxsKTsKLQotCQkJLyogRklYTUUgamxpdTcgY2hlY2sgdGhlIERQTEwgbG9jayBiaXQgUElQRUFD T05GWzI5XSAqLwotCQkJLyogRklYTUVfTURGTEQgUE8gLSBjaGFuZ2UgNTAwIHRvIDEgYWZ0ZXIg UE8gKi8KLQkJCXVkZWxheSg1MDApOwotCi0JCQkvKiByZXNldCBNMSwgTjEgJiBQMSAqLwotCQkJ UkVHX1dSSVRFKG1hcC0+ZnAwLCAwKTsKLQkJCWRwbGwgJj0gfk1ERkxEX1AxX01BU0s7Ci0JCQlS RUdfV1JJVEUobWFwLT5kcGxsLCBkcGxsKTsKLQkJCS8qIEZJWE1FX01ERkxEIFBPIC0gY2hhbmdl IDUwMCB0byAxIGFmdGVyIFBPICovCi0JCQl1ZGVsYXkoNTAwKTsKLQkJfQotCi0JCS8qIFdoZW4g dW5nYXRpbmcgcG93ZXIgb2YgRFBMTCwgbmVlZHMgdG8gd2FpdCAwLjV1cyBiZWZvcmUKLQkJICog ZW5hYmxlIHRoZSBWQ08gKi8KLQkJaWYgKGRwbGwgJiBNREZMRF9QV1JfR0FURV9FTikgewotCQkJ ZHBsbCAmPSB+TURGTERfUFdSX0dBVEVfRU47Ci0JCQlSRUdfV1JJVEUobWFwLT5kcGxsLCBkcGxs KTsKLQkJCS8qIEZJWE1FX01ERkxEIFBPIC0gY2hhbmdlIDUwMCB0byAxIGFmdGVyIFBPICovCi0J CQl1ZGVsYXkoNTAwKTsKLQkJfQotCQlkcGxsID0gMDsKLQotCQlpZiAoaXNfaGRtaSkKLQkJCWRw bGwgfD0gTURGTERfVkNPX1NFTDsKLQotCQlmcCA9IChjbGtfbiAvIDIpIDw8IDE2OwotCQlmcCB8 PSBtX2NvbnY7Ci0KLQkJLyogY29tcHV0ZSBiaXRtYXNrIGZyb20gcDEgdmFsdWUgKi8KLQkJZHBs bCB8PSAoMSA8PCAoY2xvY2sucDEgLSAyKSkgPDwgMTc7Ci0KLQl9IGVsc2UgewotCQlkcGxsID0g MHgwMDgwMDAwMDsKLQkJZnAgPSAweDAwMDAwMGMxOwotCX0KLQotCVJFR19XUklURShtYXAtPmZw MCwgZnApOwotCVJFR19XUklURShtYXAtPmRwbGwsIGRwbGwpOwotCS8qIEZJWE1FX01ERkxEIFBP IC0gY2hhbmdlIDUwMCB0byAxIGFmdGVyIFBPICovCi0JdWRlbGF5KDUwMCk7Ci0KLQlkcGxsIHw9 IERQTExfVkNPX0VOQUJMRTsKLQlSRUdfV1JJVEUobWFwLT5kcGxsLCBkcGxsKTsKLQlSRUdfUkVB RChtYXAtPmRwbGwpOwotCi0JLyogd2FpdCBmb3IgRFNJIFBMTCB0byBsb2NrICovCi0Jd2hpbGUg KHRpbWVvdXQgPCAyMDAwMCAmJgotCQkJIShSRUdfUkVBRChtYXAtPmNvbmYpICYgUElQRUNPTkZf RFNJUExMX0xPQ0spKSB7Ci0JCXVkZWxheSgxNTApOwotCQl0aW1lb3V0Kys7Ci0JfQotCi0JaWYg KGlzX21pcGkpCi0JCWdvdG8gbXJzdF9jcnRjX21vZGVfc2V0X2V4aXQ7Ci0KLQlkZXZfZGJnKGRl di0+ZGV2LCAiaXNfbWlwaSA9IDB4JXhcbiIsIGlzX21pcGkpOwotCi0JUkVHX1dSSVRFKG1hcC0+ Y29uZiwgZGV2X3ByaXYtPnBpcGVjb25mW3BpcGVdKTsKLQlSRUdfUkVBRChtYXAtPmNvbmYpOwot Ci0JLyogV2FpdCBmb3IgZm9yIHRoZSBwaXBlIGVuYWJsZSB0byB0YWtlIGVmZmVjdC4gKi8KLQlS RUdfV1JJVEUobWFwLT5jbnRyLCBkZXZfcHJpdi0+ZHNwY250cltwaXBlXSk7Ci0JZ21hX3dhaXRf Zm9yX3ZibGFuayhkZXYpOwotCi1tcnN0X2NydGNfbW9kZV9zZXRfZXhpdDoKLQotCWdtYV9wb3dl cl9lbmQoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1jb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVs cGVyX2Z1bmNzIG1kZmxkX2hlbHBlcl9mdW5jcyA9IHsKLQkuZHBtcyA9IG1kZmxkX2NydGNfZHBt cywKLQkubW9kZV9zZXQgPSBtZGZsZF9jcnRjX21vZGVfc2V0LAotCS5tb2RlX3NldF9iYXNlID0g bWRmbGRfX2ludGVsX3BpcGVfc2V0X2Jhc2UsCi0JLnByZXBhcmUgPSBnbWFfY3J0Y19wcmVwYXJl LAotCS5jb21taXQgPSBnbWFfY3J0Y19jb21taXQsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2dtYTUwMC9tZGZsZF9vdXRwdXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRm bGRfb3V0cHV0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NTk2NmJiMGM5Ni4u MDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfb3V0cHV0LmMK KysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAgMjAx MCBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2VuCi0gKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF UgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKLSAqIERFQUxJTkdTIElOIFRIRSBT T0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOgotICogVGhvbWFzIEVhdG9uIDx0aG9tYXMuZy5lYXRv bkBpbnRlbC5jb20+Ci0gKiBTY290dCBSb3dlIDxzY290dC5tLnJvd2VAaW50ZWwuY29tPgotKi8K LQotI2luY2x1ZGUgIm1kZmxkX291dHB1dC5oIgotI2luY2x1ZGUgIm1kZmxkX2RzaV9kcGkuaCIK LSNpbmNsdWRlICJtZGZsZF9kc2lfb3V0cHV0LmgiCi0KLSNpbmNsdWRlICJ0YzM1ODc2eC1kc2kt bHZkcy5oIgotCi1pbnQgbWRmbGRfZ2V0X3BhbmVsX3R5cGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgaW50IHBpcGUpCi17Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYt PmRldl9wcml2YXRlOwotCXJldHVybiBkZXZfcHJpdi0+bWRmbGRfcGFuZWxfaWQ7Ci19Ci0KLXN0 YXRpYyB2b2lkIG1kZmxkX2luaXRfcGFuZWwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG1p cGlfcGlwZSwKLQkJCQkJCQkJaW50IHBfdHlwZSkKLXsKLQlzd2l0Y2ggKHBfdHlwZSkgewotCWNh c2UgVFBPX1ZJRDoKLQkJbWRmbGRfZHNpX291dHB1dF9pbml0KGRldiwgbWlwaV9waXBlLCAmbWRm bGRfdHBvX3ZpZF9mdW5jcyk7Ci0JCWJyZWFrOwotCWNhc2UgVEMzNTg3Nlg6Ci0JCXRjMzU4NzZ4 X2luaXQoZGV2KTsKLQkJbWRmbGRfZHNpX291dHB1dF9pbml0KGRldiwgbWlwaV9waXBlLCAmbWRm bGRfdGMzNTg3NnhfZnVuY3MpOwotCQlicmVhazsKLQljYXNlIFRNRF9WSUQ6Ci0JCW1kZmxkX2Rz aV9vdXRwdXRfaW5pdChkZXYsIG1pcGlfcGlwZSwgJm1kZmxkX3RtZF92aWRfZnVuY3MpOwotCQli cmVhazsKLQljYXNlIEhETUk6Ci0vKgkJaWYgKGRldl9wcml2LT5tZGZsZF9oZG1pX3ByZXNlbnQp Ci0JCQltZGZsZF9oZG1pX2luaXQoZGV2LCAmZGV2X3ByaXYtPm1vZGVfZGV2KTsgKi8KLQkJYnJl YWs7Ci0JfQotfQotCi0KLWludCBtZGZsZF9vdXRwdXRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQotewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKLQotCS8qIEZJWE1FOiBoYXJkY29kZWQgZm9yIG5vdyAqLwotCWRldl9wcml2LT5tZGZs ZF9wYW5lbF9pZCA9IFRDMzU4NzZYOwotCS8qIE1JUEkgcGFuZWwgMSAqLwotCW1kZmxkX2luaXRf cGFuZWwoZGV2LCAwLCBkZXZfcHJpdi0+bWRmbGRfcGFuZWxfaWQpOwotCS8qIEhETUkgcGFuZWwg Ki8KLQltZGZsZF9pbml0X3BhbmVsKGRldiwgMSwgSERNSSk7Ci0JcmV0dXJuIDA7Ci19Ci0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfb3V0cHV0LmggYi9kcml2ZXJz L2dwdS9kcm0vZ21hNTAwL21kZmxkX291dHB1dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAzN2E1MTZjYzU2YmUuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21h NTAwL21kZmxkX291dHB1dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAq IENvcHlyaWdodCAoYykgIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlbgotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAot ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0g KiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqIFRob21hcyBF YXRvbiA8dGhvbWFzLmcuZWF0b25AaW50ZWwuY29tPgotICogU2NvdHQgUm93ZSA8c2NvdHQubS5y b3dlQGludGVsLmNvbT4KLSovCi0KLSNpZm5kZWYgTURGTERfT1VUUFVUX0gKLSNkZWZpbmUgTURG TERfT1VUUFVUX0gKLQotI2luY2x1ZGUgInBzYl9kcnYuaCIKLQotI2RlZmluZSBUUE9fUEFORUxf V0lEVEgJCTg0Ci0jZGVmaW5lIFRQT19QQU5FTF9IRUlHSFQJNDYKLSNkZWZpbmUgVE1EX1BBTkVM X1dJRFRICQkzOQotI2RlZmluZSBUTURfUEFORUxfSEVJR0hUCTcxCi0KLXN0cnVjdCBtZGZsZF9k c2lfY29uZmlnOwotCi1lbnVtIHBhbmVsX3R5cGUgewotCVRQT19WSUQsCi0JVE1EX1ZJRCwKLQlI RE1JLAotCVRDMzU4NzZYLAotfTsKLQotc3RydWN0IHBhbmVsX2luZm8gewotCXUzMiB3aWR0aF9t bTsKLQl1MzIgaGVpZ2h0X21tOwotCS8qIE90aGVyIGluZm8gKi8KLX07Ci0KLXN0cnVjdCBwYW5l bF9mdW5jcyB7Ci0JY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rl cl9oZWxwZXJfZnVuY3M7Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiAoKmdldF9jb25maWdf bW9kZSkoc3RydWN0IGRybV9kZXZpY2UgKik7Ci0JaW50ICgqZ2V0X3BhbmVsX2luZm8pKHN0cnVj dCBkcm1fZGV2aWNlICosIGludCwgc3RydWN0IHBhbmVsX2luZm8gKik7Ci0JaW50ICgqcmVzZXQp KHN0cnVjdCBkcm1fZGV2aWNlICosIGludCk7Ci0Jdm9pZCAoKmRydl9pY19pbml0KShzdHJ1Y3Qg bWRmbGRfZHNpX2NvbmZpZyAqZHNpX2NvbmZpZywgaW50IHBpcGUpOwotfTsKLQotaW50IG1kZmxk X291dHB1dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotCi1zdHJ1Y3QgYmFja2xpZ2h0 X2RldmljZSAqbWRmbGRfZ2V0X2JhY2tsaWdodF9kZXZpY2Uodm9pZCk7Ci1pbnQgbWRmbGRfc2V0 X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKTsKLQotaW50IG1kZmxkX2dl dF9wYW5lbF90eXBlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKTsKLQotZXh0ZXJu IGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgbWRmbGRfaGVscGVyX2Z1bmNzOwot Ci1leHRlcm4gY29uc3Qgc3RydWN0IHBhbmVsX2Z1bmNzIG1kZmxkX3RtZF92aWRfZnVuY3M7Ci1l eHRlcm4gY29uc3Qgc3RydWN0IHBhbmVsX2Z1bmNzIG1kZmxkX3Rwb192aWRfZnVuY3M7Ci0KLWV4 dGVybiB2b2lkIG1kZmxkX2Rpc2FibGVfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQg cGlwZSk7Ci1leHRlcm4gdm9pZCBtZGZsZFdhaXRGb3JQaXBlRW5hYmxlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIGludCBwaXBlKTsKLWV4dGVybiB2b2lkIG1kZmxkV2FpdEZvclBpcGVEaXNhYmxl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF90bWRfdmlkLmMgYi9kcml2ZXJzL2dwdS9kcm0v Z21hNTAwL21kZmxkX3RtZF92aWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVl ODk3Yjk4Zjg2Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZs ZF90bWRfdmlkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTcgKzAsMCBAQAotLyoKLSAqIENvcHly aWdodCDCqSAyMDEwIEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBu ZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotICogREVBTElO R1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiBKaW0gTGl1IDxqaW0ubGl1 QGludGVsLmNvbT4KLSAqIEphY2tpZSBMaTx5YW9kb25nLmxpQGludGVsLmNvbT4KLSAqIEdpZGVv biBFYXRvbiA8ZWF0b24uCi0gKiBTY290dCBSb3dlIDxzY290dC5tLnJvd2VAaW50ZWwuY29tPgot ICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jaW5jbHVkZSAibWRmbGRfZHNpX2Rw aS5oIgotI2luY2x1ZGUgIm1kZmxkX2RzaV9wa2dfc2VuZGVyLmgiCi0KLXN0YXRpYyBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqdG1kX3ZpZF9nZXRfY29uZmlnX21vZGUoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKLQlzdHJ1Y3QgZHJt X3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG9ha3Ry YWlsX3RpbWluZ19pbmZvICp0aSA9ICZkZXZfcHJpdi0+Z2N0X2RhdGEuRFREOwotCWJvb2wgdXNl X2djdCA9IGZhbHNlOyAvKkRpc2FibGUgR0NUIGZvciBub3cqLwotCi0JbW9kZSA9IGt6YWxsb2Mo c2l6ZW9mKCptb2RlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtb2RlKQotCQlyZXR1cm4gTlVMTDsK LQotCWlmICh1c2VfZ2N0KSB7Ci0JCW1vZGUtPmhkaXNwbGF5ID0gKHRpLT5oYWN0aXZlX2hpIDw8 IDgpIHwgdGktPmhhY3RpdmVfbG87Ci0JCW1vZGUtPnZkaXNwbGF5ID0gKHRpLT52YWN0aXZlX2hp IDw8IDgpIHwgdGktPnZhY3RpdmVfbG87Ci0JCW1vZGUtPmhzeW5jX3N0YXJ0ID0gbW9kZS0+aGRp c3BsYXkgKyBcCi0JCQkJKCh0aS0+aHN5bmNfb2Zmc2V0X2hpIDw8IDgpIHwgXAotCQkJCXRpLT5o c3luY19vZmZzZXRfbG8pOwotCQltb2RlLT5oc3luY19lbmQgPSBtb2RlLT5oc3luY19zdGFydCAr IFwKLQkJCQkoKHRpLT5oc3luY19wdWxzZV93aWR0aF9oaSA8PCA4KSB8IFwKLQkJCQl0aS0+aHN5 bmNfcHVsc2Vfd2lkdGhfbG8pOwotCQltb2RlLT5odG90YWwgPSBtb2RlLT5oZGlzcGxheSArICgo dGktPmhibGFua19oaSA8PCA4KSB8IFwKLQkJCQkJCQkJdGktPmhibGFua19sbyk7Ci0JCW1vZGUt PnZzeW5jX3N0YXJ0ID0gXAotCQkJbW9kZS0+dmRpc3BsYXkgKyAoKHRpLT52c3luY19vZmZzZXRf aGkgPDwgOCkgfCBcCi0JCQkJCQl0aS0+dnN5bmNfb2Zmc2V0X2xvKTsKLQkJbW9kZS0+dnN5bmNf ZW5kID0gXAotCQkJbW9kZS0+dnN5bmNfc3RhcnQgKyAoKHRpLT52c3luY19wdWxzZV93aWR0aF9o aSA8PCA4KSB8IFwKLQkJCQkJCXRpLT52c3luY19wdWxzZV93aWR0aF9sbyk7Ci0JCW1vZGUtPnZ0 b3RhbCA9IG1vZGUtPnZkaXNwbGF5ICsgXAotCQkJCSgodGktPnZibGFua19oaSA8PCA4KSB8IHRp LT52YmxhbmtfbG8pOwotCQltb2RlLT5jbG9jayA9IHRpLT5waXhlbF9jbG9jayAqIDEwOwotCi0J CWRldl9kYmcoZGV2LT5kZXYsICJoZGlzcGxheSBpcyAlZFxuIiwgbW9kZS0+aGRpc3BsYXkpOwot CQlkZXZfZGJnKGRldi0+ZGV2LCAidmRpc3BsYXkgaXMgJWRcbiIsIG1vZGUtPnZkaXNwbGF5KTsK LQkJZGV2X2RiZyhkZXYtPmRldiwgIkhTUyBpcyAlZFxuIiwgbW9kZS0+aHN5bmNfc3RhcnQpOwot CQlkZXZfZGJnKGRldi0+ZGV2LCAiSFNFIGlzICVkXG4iLCBtb2RlLT5oc3luY19lbmQpOwotCQlk ZXZfZGJnKGRldi0+ZGV2LCAiaHRvdGFsIGlzICVkXG4iLCBtb2RlLT5odG90YWwpOwotCQlkZXZf ZGJnKGRldi0+ZGV2LCAiVlNTIGlzICVkXG4iLCBtb2RlLT52c3luY19zdGFydCk7Ci0JCWRldl9k YmcoZGV2LT5kZXYsICJWU0UgaXMgJWRcbiIsIG1vZGUtPnZzeW5jX2VuZCk7Ci0JCWRldl9kYmco ZGV2LT5kZXYsICJ2dG90YWwgaXMgJWRcbiIsIG1vZGUtPnZ0b3RhbCk7Ci0JCWRldl9kYmcoZGV2 LT5kZXYsICJjbG9jayBpcyAlZFxuIiwgbW9kZS0+Y2xvY2spOwotCX0gZWxzZSB7Ci0JCW1vZGUt PmhkaXNwbGF5ID0gNDgwOwotCQltb2RlLT52ZGlzcGxheSA9IDg1NDsKLQkJbW9kZS0+aHN5bmNf c3RhcnQgPSA0ODc7Ci0JCW1vZGUtPmhzeW5jX2VuZCA9IDQ5MDsKLQkJbW9kZS0+aHRvdGFsID0g NDk5OwotCQltb2RlLT52c3luY19zdGFydCA9IDg2MTsKLQkJbW9kZS0+dnN5bmNfZW5kID0gODY1 OwotCQltb2RlLT52dG90YWwgPSA4NzM7Ci0JCW1vZGUtPmNsb2NrID0gMzMyNjQ7Ci0JfQotCi0J ZHJtX21vZGVfc2V0X25hbWUobW9kZSk7Ci0JZHJtX21vZGVfc2V0X2NydGNpbmZvKG1vZGUsIDAp OwotCi0JbW9kZS0+dHlwZSB8PSBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKLQotCXJldHVybiBt b2RlOwotfQotCi1zdGF0aWMgaW50IHRtZF92aWRfZ2V0X3BhbmVsX2luZm8oc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKLQkJCQlpbnQgcGlwZSwKLQkJCQlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGkpCi17 Ci0JaWYgKCFkZXYgfHwgIXBpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBpLT53aWR0aF9tbSA9 IFRNRF9QQU5FTF9XSURUSDsKLQlwaS0+aGVpZ2h0X21tID0gVE1EX1BBTkVMX0hFSUdIVDsKLQot CXJldHVybiAwOwotfQotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICpcCi0gKiBGVU5DVElPTjogbWRm bGRfaW5pdF9UTURfTUlQSQotICoKLSAqIERFU0NSSVBUSU9OOiAgVGhpcyBmdW5jdGlvbiBpcyBj YWxsZWQgb25seSBieSBtcnN0X2RzaV9tb2RlX3NldCBhbmQKLSAqICAgICAgICAgICAgICAgcmVz dG9yZV9kaXNwbGF5X3JlZ2lzdGVycy4gIHNpbmNlIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QKLSAq ICAgICAgICAgICAgICAgYWNxdWlyZSB0aGUgbXV0ZXgsIGl0IGlzIGltcG9ydGFudCB0aGF0IHRo ZSBjYWxsaW5nIGZ1bmN0aW9uCi0gKiAgICAgICAgICAgICAgIGRvZXMhCi1cKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCi0KLS8qIEZJWE1FOiBtYWtlIHRoZSBiZWxvdyBkYXRhIHU4IGluc3RlYWQgb2Yg dTMyOyBub3RlIGJ5dGUgb3JkZXIhICovCi1zdGF0aWMgdTMyIHRtZF9jbWRfbWNhcF9vZmZbXSA9 IHsweDAwMDAwMGIyfTsKLXN0YXRpYyB1MzIgdG1kX2NtZF9lbmFibGVfbGFuZV9zd2l0Y2hbXSA9 IHsweDAwMDEwMWVmfTsKLXN0YXRpYyB1MzIgdG1kX2NtZF9zZXRfbGFuZV9udW1bXSA9IHsweDAw NjM2MGVmfTsKLXN0YXRpYyB1MzIgdG1kX2NtZF9wdXNoaW5nX2Nsb2NrMFtdID0gezB4MDBjYzJm ZWZ9Owotc3RhdGljIHUzMiB0bWRfY21kX3B1c2hpbmdfY2xvY2sxW10gPSB7MHgwMGRkNmVlZn07 Ci1zdGF0aWMgdTMyIHRtZF9jbWRfc2V0X21vZGVbXSA9IHsweDAwMDAwMGIzfTsKLXN0YXRpYyB1 MzIgdG1kX2NtZF9zZXRfc3luY19wdWxzZV9tb2RlW10gPSB7MHgwMDA5NjFlZn07Ci1zdGF0aWMg dTMyIHRtZF9jbWRfc2V0X2NvbHVtbltdID0gezB4MDEwMDAwMmEsIDB4MDAwMDAwZGZ9Owotc3Rh dGljIHUzMiB0bWRfY21kX3NldF9wYWdlW10gPSB7MHgwMzAwMDAyYiwgMHgwMDAwMDA1NX07Ci1z dGF0aWMgdTMyIHRtZF9jbWRfc2V0X3ZpZGVvX21vZGVbXSA9IHsweDAwMDAwMTUzfTsKLS8qbm8g YXV0b19ibCxuZWVkIGFkZCBpbiBmdXJ0dXJlKi8KLXN0YXRpYyB1MzIgdG1kX2NtZF9lbmFibGVf YmFja2xpZ2h0W10gPSB7MHgwMDAwNWFiNH07Ci1zdGF0aWMgdTMyIHRtZF9jbWRfc2V0X2JhY2ts aWdodF9kaW1taW5nW10gPSB7MHgwMDAwMGViZH07Ci0KLXN0YXRpYyB2b2lkIG1kZmxkX2RzaV90 bWRfZHJ2X2ljX2luaXQoc3RydWN0IG1kZmxkX2RzaV9jb25maWcgKmRzaV9jb25maWcsCi0JCQkJ ICAgICAgaW50IHBpcGUpCi17Ci0Jc3RydWN0IG1kZmxkX2RzaV9wa2dfc2VuZGVyICpzZW5kZXIK LQkJCT0gbWRmbGRfZHNpX2dldF9wa2dfc2VuZGVyKGRzaV9jb25maWcpOwotCi0JRFJNX0lORk8o IkVudGVyIG1kZmxkIGluaXQgVE1EIE1JUEkgZGlzcGxheS5cbiIpOwotCi0JaWYgKCFzZW5kZXIp IHsKLQkJRFJNX0VSUk9SKCJDYW5ub3QgZ2V0IHNlbmRlclxuIik7Ci0JCXJldHVybjsKLQl9Ci0K LQlpZiAoZHNpX2NvbmZpZy0+ZHZyX2ljX2luaXRlZCkKLQkJcmV0dXJuOwotCi0JbXNsZWVwKDMp OwotCi0JLyogRklYTUU6IG1ha2UgdGhlIGJlbG93IGRhdGEgdTggaW5zdGVhZCBvZiB1MzI7IG5v dGUgYnl0ZSBvcmRlciEgKi8KLQotCW1kZmxkX2RzaV9zZW5kX2dlbl9sb25nKHNlbmRlciwgKHU4 ICopIHRtZF9jbWRfbWNhcF9vZmYsCi0JCQkJc2l6ZW9mKHRtZF9jbWRfbWNhcF9vZmYpLCBmYWxz ZSk7Ci0JbWRmbGRfZHNpX3NlbmRfZ2VuX2xvbmcoc2VuZGVyLCAodTggKikgdG1kX2NtZF9lbmFi bGVfbGFuZV9zd2l0Y2gsCi0JCQkJc2l6ZW9mKHRtZF9jbWRfZW5hYmxlX2xhbmVfc3dpdGNoKSwg ZmFsc2UpOwotCW1kZmxkX2RzaV9zZW5kX2dlbl9sb25nKHNlbmRlciwgKHU4ICopIHRtZF9jbWRf c2V0X2xhbmVfbnVtLAotCQkJCXNpemVvZih0bWRfY21kX3NldF9sYW5lX251bSksIGZhbHNlKTsK LQltZGZsZF9kc2lfc2VuZF9nZW5fbG9uZyhzZW5kZXIsICh1OCAqKSB0bWRfY21kX3B1c2hpbmdf Y2xvY2swLAotCQkJCXNpemVvZih0bWRfY21kX3B1c2hpbmdfY2xvY2swKSwgZmFsc2UpOwotCW1k ZmxkX2RzaV9zZW5kX2dlbl9sb25nKHNlbmRlciwgKHU4ICopIHRtZF9jbWRfcHVzaGluZ19jbG9j azEsCi0JCQkJc2l6ZW9mKHRtZF9jbWRfcHVzaGluZ19jbG9jazEpLCBmYWxzZSk7Ci0JbWRmbGRf ZHNpX3NlbmRfZ2VuX2xvbmcoc2VuZGVyLCAodTggKikgdG1kX2NtZF9zZXRfbW9kZSwKLQkJCQlz aXplb2YodG1kX2NtZF9zZXRfbW9kZSksIGZhbHNlKTsKLQltZGZsZF9kc2lfc2VuZF9nZW5fbG9u ZyhzZW5kZXIsICh1OCAqKSB0bWRfY21kX3NldF9zeW5jX3B1bHNlX21vZGUsCi0JCQkJc2l6ZW9m KHRtZF9jbWRfc2V0X3N5bmNfcHVsc2VfbW9kZSksIGZhbHNlKTsKLQltZGZsZF9kc2lfc2VuZF9t Y3NfbG9uZyhzZW5kZXIsICh1OCAqKSB0bWRfY21kX3NldF9jb2x1bW4sCi0JCQkJc2l6ZW9mKHRt ZF9jbWRfc2V0X2NvbHVtbiksIGZhbHNlKTsKLQltZGZsZF9kc2lfc2VuZF9tY3NfbG9uZyhzZW5k ZXIsICh1OCAqKSB0bWRfY21kX3NldF9wYWdlLAotCQkJCXNpemVvZih0bWRfY21kX3NldF9wYWdl KSwgZmFsc2UpOwotCW1kZmxkX2RzaV9zZW5kX2dlbl9sb25nKHNlbmRlciwgKHU4ICopIHRtZF9j bWRfc2V0X3ZpZGVvX21vZGUsCi0JCQkJc2l6ZW9mKHRtZF9jbWRfc2V0X3ZpZGVvX21vZGUpLCBm YWxzZSk7Ci0JbWRmbGRfZHNpX3NlbmRfZ2VuX2xvbmcoc2VuZGVyLCAodTggKikgdG1kX2NtZF9l bmFibGVfYmFja2xpZ2h0LAotCQkJCXNpemVvZih0bWRfY21kX2VuYWJsZV9iYWNrbGlnaHQpLCBm YWxzZSk7Ci0JbWRmbGRfZHNpX3NlbmRfZ2VuX2xvbmcoc2VuZGVyLCAodTggKikgdG1kX2NtZF9z ZXRfYmFja2xpZ2h0X2RpbW1pbmcsCi0JCQkJc2l6ZW9mKHRtZF9jbWRfc2V0X2JhY2tsaWdodF9k aW1taW5nKSwgZmFsc2UpOwotCi0JZHNpX2NvbmZpZy0+ZHZyX2ljX2luaXRlZCA9IDE7Ci19Ci0K LS8qVFBPIERQSSBlbmNvZGVyIGhlbHBlciBmdW5jcyovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9lbmNvZGVyX2hlbHBlcl9mdW5jcwotCQkJCW1kZmxkX3Rwb19kcGlfZW5jb2Rlcl9oZWxwZXJf ZnVuY3MgPSB7Ci0JLmRwbXMgPSBtZGZsZF9kc2lfZHBpX2RwbXMsCi0JLm1vZGVfZml4dXAgPSBt ZGZsZF9kc2lfZHBpX21vZGVfZml4dXAsCi0JLnByZXBhcmUgPSBtZGZsZF9kc2lfZHBpX3ByZXBh cmUsCi0JLm1vZGVfc2V0ID0gbWRmbGRfZHNpX2RwaV9tb2RlX3NldCwKLQkuY29tbWl0ID0gbWRm bGRfZHNpX2RwaV9jb21taXQsCi19OwotCi1jb25zdCBzdHJ1Y3QgcGFuZWxfZnVuY3MgbWRmbGRf dG1kX3ZpZF9mdW5jcyA9IHsKLQkuZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSAmbWRmbGRfdHBvX2Rw aV9lbmNvZGVyX2hlbHBlcl9mdW5jcywKLQkuZ2V0X2NvbmZpZ19tb2RlID0gJnRtZF92aWRfZ2V0 X2NvbmZpZ19tb2RlLAotCS5nZXRfcGFuZWxfaW5mbyA9IHRtZF92aWRfZ2V0X3BhbmVsX2luZm8s Ci0JLnJlc2V0ID0gbWRmbGRfZHNpX3BhbmVsX3Jlc2V0LAotCS5kcnZfaWNfaW5pdCA9IG1kZmxk X2RzaV90bWRfZHJ2X2ljX2luaXQsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dt YTUwMC9tZGZsZF90cG9fdmlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX3Rwb192 aWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE4NDU5NzhmYjBhLi4wMDAwMDAw MDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF90cG9fdmlkLmMKKysrIC9k ZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTAgSW50ZWwg Q29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK LSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl Ci0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUu Ci0gKgotICogQXV0aG9yczoKLSAqIGppbSBsaXUgPGppbS5saXVAaW50ZWwuY29tPgotICogSmFj a2llIExpPHlhb2RvbmcubGlAaW50ZWwuY29tPgotICovCi0KLSNpbmNsdWRlICJtZGZsZF9kc2lf ZHBpLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqdHBvX3ZpZF9nZXRfY29u ZmlnX21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZTsKLQotCW1vZGUgPSBremFsbG9jKHNpemVvZigqbW9kZSksIEdGUF9LRVJORUwp OwotCWlmICghbW9kZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQltb2RlLT5oZGlzcGxheSA9IDg2NDsK LQltb2RlLT52ZGlzcGxheSA9IDQ4MDsKLQltb2RlLT5oc3luY19zdGFydCA9IDg3MzsKLQltb2Rl LT5oc3luY19lbmQgPSA4NzY7Ci0JbW9kZS0+aHRvdGFsID0gODg3OwotCW1vZGUtPnZzeW5jX3N0 YXJ0ID0gNDg3OwotCW1vZGUtPnZzeW5jX2VuZCA9IDQ5MDsKLQltb2RlLT52dG90YWwgPSA0OTk7 Ci0JbW9kZS0+Y2xvY2sgPSAzMzI2NDsKLQotCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOwotCWRy bV9tb2RlX3NldF9jcnRjaW5mbyhtb2RlLCAwKTsKLQotCW1vZGUtPnR5cGUgfD0gRFJNX01PREVf VFlQRV9QUkVGRVJSRUQ7Ci0KLQlyZXR1cm4gbW9kZTsKLX0KLQotc3RhdGljIGludCB0cG9fdmlk X2dldF9wYW5lbF9pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJaW50IHBpcGUsCi0J CQkJc3RydWN0IHBhbmVsX2luZm8gKnBpKQotewotCWlmICghZGV2IHx8ICFwaSkKLQkJcmV0dXJu IC1FSU5WQUw7Ci0KLQlwaS0+d2lkdGhfbW0gPSBUUE9fUEFORUxfV0lEVEg7Ci0JcGktPmhlaWdo dF9tbSA9IFRQT19QQU5FTF9IRUlHSFQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLypUUE8gRFBJIGVu Y29kZXIgaGVscGVyIGZ1bmNzKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVs cGVyX2Z1bmNzCi0JCQkJbWRmbGRfdHBvX2RwaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKLQku ZHBtcyA9IG1kZmxkX2RzaV9kcGlfZHBtcywKLQkubW9kZV9maXh1cCA9IG1kZmxkX2RzaV9kcGlf bW9kZV9maXh1cCwKLQkucHJlcGFyZSA9IG1kZmxkX2RzaV9kcGlfcHJlcGFyZSwKLQkubW9kZV9z ZXQgPSBtZGZsZF9kc2lfZHBpX21vZGVfc2V0LAotCS5jb21taXQgPSBtZGZsZF9kc2lfZHBpX2Nv bW1pdCwKLX07Ci0KLWNvbnN0IHN0cnVjdCBwYW5lbF9mdW5jcyBtZGZsZF90cG9fdmlkX2Z1bmNz ID0gewotCS5lbmNvZGVyX2hlbHBlcl9mdW5jcyA9ICZtZGZsZF90cG9fZHBpX2VuY29kZXJfaGVs cGVyX2Z1bmNzLAotCS5nZXRfY29uZmlnX21vZGUgPSAmdHBvX3ZpZF9nZXRfY29uZmlnX21vZGUs Ci0JLmdldF9wYW5lbF9pbmZvID0gdHBvX3ZpZF9nZXRfcGFuZWxfaW5mbywKLX07CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9n bWE1MDAvcHNiX2Rydi5jCmluZGV4IGExOWY2MGQ0MDM5NC4uYjA4M2IzZjgxNWI5IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vZ21hNTAwL3BzYl9kcnYuYwpAQCAtNDYsOCArNDYsNiBAQCBzdGF0aWMgaW50IHBzYl9wY2lf cHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpl bnQpOwogICogUG93ZXJWUiBTR1g1MzUgICAgLSBQb3Vsc2JvICAgIC0gSW50ZWwgR01BIDUwMCwg SW50ZWwgQXRvbSBaNXh4CiAgKiBQb3dlclZSIFNHWDUzNSAgICAtIE1vb3Jlc3Rvd24gLSBJbnRl bCBHTUEgNjAwCiAgKiBQb3dlclZSIFNHWDUzNSAgICAtIE9ha3RyYWlsICAgLSBJbnRlbCBHTUEg NjAwLCBJbnRlbCBBdG9tIFo2eHgsIEU2eHgKLSAqIFBvd2VyVlIgU0dYNTQwICAgIC0gTWVkZmll bGQgICAtIEludGVsIEF0b20gWjI0NjAKLSAqIFBvd2VyVlIgU0dYNTQ0TVAyIC0gTWVkZmllbGQg ICAtCiAgKiBQb3dlclZSIFNHWDU0NSAgICAtIENlZGFydHJhaWwgLSBJbnRlbCBHTUEgMzYwMCwg SW50ZWwgQXRvbSBEMjUwMCwgTjI2MDAKICAqIFBvd2VyVlIgU0dYNTQ1ICAgIC0gQ2VkYXJ0cmFp bCAtIEludGVsIEdNQSAzNjUwLCBJbnRlbCBBdG9tIEQyNTUwLCBEMjcwMCwKICAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE4yODAwCkBAIC02NiwxNiArNjQsNiBAQCBzdGF0aWMg Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpaWRsaXN0W10gPSB7CiAJeyAweDgwODYsIDB4 NDEwNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKGxvbmcpICZvYWt0cmFpbF9jaGlw X29wcyB9LAogCXsgMHg4MDg2LCAweDQxMDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAs IChsb25nKSAmb2FrdHJhaWxfY2hpcF9vcHMgfSwKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklH X0RSTV9NRURGSUVMRCkKLQl7IDB4ODA4NiwgMHgwMTMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lE LCAwLCAwLCAobG9uZykgJm1kZmxkX2NoaXBfb3BzIH0sCi0JeyAweDgwODYsIDB4MDEzMSwgUENJ X0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKGxvbmcpICZtZGZsZF9jaGlwX29wcyB9LAotCXsg MHg4MDg2LCAweDAxMzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIChsb25nKSAmbWRm bGRfY2hpcF9vcHMgfSwKLQl7IDB4ODA4NiwgMHgwMTMzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lE LCAwLCAwLCAobG9uZykgJm1kZmxkX2NoaXBfb3BzIH0sCi0JeyAweDgwODYsIDB4MDEzNCwgUENJ X0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKGxvbmcpICZtZGZsZF9jaGlwX29wcyB9LAotCXsg MHg4MDg2LCAweDAxMzUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIChsb25nKSAmbWRm bGRfY2hpcF9vcHMgfSwKLQl7IDB4ODA4NiwgMHgwMTM2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lE LCAwLCAwLCAobG9uZykgJm1kZmxkX2NoaXBfb3BzIH0sCi0JeyAweDgwODYsIDB4MDEzNywgUENJ X0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKGxvbmcpICZtZGZsZF9jaGlwX29wcyB9LAotI2Vu ZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfRFJNX0dNQTM2MDApCiAJeyAweDgwODYsIDB4MGJlMCwg UENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKGxvbmcpICZjZHZfY2hpcF9vcHMgfSwKIAl7 IDB4ODA4NiwgMHgwYmUxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAobG9uZykgJmNk dl9jaGlwX29wcyB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9kcnYuaAppbmRleCBkMzAzZjgyNzFmN2Uu LjAyMGE3MWI5MTU3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZHJ2 LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZHJ2LmgKQEAgLTQwLDE5ICs0MCwx NiBAQCBlbnVtIHsKIAlDSElQX1BTQl84MTA4ID0gMCwJCS8qIFBvdWxzYm8gKi8KIAlDSElQX1BT Ql84MTA5ID0gMSwJCS8qIFBvdWxzYm8gKi8KIAlDSElQX01SU1RfNDEwMCA9IDIsCQkvKiBNb29y ZXN0b3duL09ha3RyYWlsICovCi0JQ0hJUF9NRkxEXzAxMzAgPSAzLAkJLyogTWVkZmllbGQgKi8K IH07CiAKICNkZWZpbmUgSVNfUFNCKGRybSkgKCh0b19wY2lfZGV2KChkcm0pLT5kZXYpLT5kZXZp Y2UgJiAweGZmZmUpID09IDB4ODEwOCkKICNkZWZpbmUgSVNfTVJTVChkcm0pICgodG9fcGNpX2Rl digoZHJtKS0+ZGV2KS0+ZGV2aWNlICYgMHhmZmYwKSA9PSAweDQxMDApCi0jZGVmaW5lIElTX01G TEQoZHJtKSAoKHRvX3BjaV9kZXYoKGRybSktPmRldiktPmRldmljZSAmIDB4ZmZmOCkgPT0gMHgw MTMwKQogI2RlZmluZSBJU19DRFYoZHJtKSAoKHRvX3BjaV9kZXYoKGRybSktPmRldiktPmRldmlj ZSAmIDB4ZmZmMCkgPT0gMHgwYmUwKQogCiAvKiBIYXJkd2FyZSBvZmZzZXRzICovCiAjZGVmaW5l IFBTQl9WRENfT0ZGU0VUCQkgMHgwMDAwMDAwMAogI2RlZmluZSBQU0JfVkRDX1NJWkUJCSAweDAw MDA4MDAwMAogI2RlZmluZSBNUlNUX01NSU9fU0laRQkJIDB4MDAwMEMwMDAwCi0jZGVmaW5lIE1E RkxEX01NSU9fU0laRSAgICAgICAgICAweDAwMDEwMDAwMAogI2RlZmluZSBQU0JfU0dYX1NJWkUJ CSAweDgwMDAKICNkZWZpbmUgUFNCX1NHWF9PRkZTRVQJCSAweDAwMDQwMDAwCiAjZGVmaW5lIE1S U1RfU0dYX09GRlNFVAkJIDB4MDAwODAwMDAKQEAgLTEwOSw4ICsxMDYsNiBAQCBlbnVtIHsKICNk ZWZpbmUgX1BTQl9EUFNUX1BJUEVBX0ZMQUcgICAgICAoMTw8NikKICNkZWZpbmUgX1BTQl9QSVBF QV9FVkVOVF9GTEFHICAgICAoMTw8NikKICNkZWZpbmUgX1BTQl9WU1lOQ19QSVBFQV9GTEFHCSAg KDE8PDcpCi0jZGVmaW5lIF9NREZMRF9NSVBJQV9GTEFHCSAgKDE8PDE2KQotI2RlZmluZSBfTURG TERfTUlQSUNfRkxBRwkgICgxPDwxNykKICNkZWZpbmUgX1BTQl9JUlFfRElTUF9IT1RTWU5DCSAg KDE8PDE3KQogI2RlZmluZSBfUFNCX0lSUV9TR1hfRkxBRwkgICgxPDwxOCkKICNkZWZpbmUgX1BT Ql9JUlFfTVNWRFhfRkxBRwkgICgxPDwxOSkKQEAgLTExOSwxMyArMTE0LDYgQEAgZW51bSB7CiAj ZGVmaW5lIF9QU0JfUElQRV9FVkVOVF9GTEFHCShfUFNCX1ZTWU5DX1BJUEVBX0ZMQUcgfCBcCiAJ CQkJIF9QU0JfVlNZTkNfUElQRUJfRkxBRykKIAotLyogVGhpcyBmbGFnIGluY2x1ZGVzIGFsbCB0 aGUgZGlzcGxheSBJUlEgYml0cyBleGNlcHRzIHRoZSB2YmxhbmsgaXJxcy4gKi8KLSNkZWZpbmUg X01ERkxEX0RJU1BfQUxMX0lSUV9GTEFHIChfTURGTERfUElQRUNfRVZFTlRfRkxBRyB8IFwKLQkJ CQkgIF9NREZMRF9QSVBFQl9FVkVOVF9GTEFHIHwgXAotCQkJCSAgX1BTQl9QSVBFQV9FVkVOVF9G TEFHIHwgXAotCQkJCSAgX1BTQl9WU1lOQ19QSVBFQV9GTEFHIHwgXAotCQkJCSAgX01ERkxEX01J UElBX0ZMQUcgfCBcCi0JCQkJICBfTURGTERfTUlQSUNfRkxBRykKICNkZWZpbmUgUFNCX0lOVF9J REVOVElUWV9SCSAgMHgyMEE0CiAjZGVmaW5lIFBTQl9JTlRfTUFTS19SCQkgIDB4MjBBOAogI2Rl ZmluZSBQU0JfSU5UX0VOQUJMRV9SCSAgMHgyMEEwCkBAIC0xOTEsMjUgKzE3OSw2IEBAIGVudW0g ewogI2RlZmluZSBQU0JfV0FUQ0hET0dfREVMQVkgKEhaICogMikKICNkZWZpbmUgUFNCX0xJRF9E RUxBWSAoSFogLyAxMCkKIAotI2RlZmluZSBNREZMRF9QTldfQjAgMHgwNAotI2RlZmluZSBNREZM RF9QTldfQzAgMHgwOAotCi0jZGVmaW5lIE1ERkxEX0RTUl8yRF8zRF8wIAkoMSA8PCAwKQotI2Rl ZmluZSBNREZMRF9EU1JfMkRfM0RfMiAJKDEgPDwgMSkKLSNkZWZpbmUgTURGTERfRFNSX0NVUlNP Ul8wIAkoMSA8PCAyKQotI2RlZmluZSBNREZMRF9EU1JfQ1VSU09SXzIJKDEgPDwgMykKLSNkZWZp bmUgTURGTERfRFNSX09WRVJMQVlfMCAJKDEgPDwgNCkKLSNkZWZpbmUgTURGTERfRFNSX09WRVJM QVlfMiAJKDEgPDwgNSkKLSNkZWZpbmUgTURGTERfRFNSX01JUElfQ09OVFJPTAkoMSA8PCA2KQot I2RlZmluZSBNREZMRF9EU1JfREFNQUdFX01BU0tfMAkoKDEgPDwgMCkgfCAoMSA8PCAyKSB8ICgx IDw8IDQpKQotI2RlZmluZSBNREZMRF9EU1JfREFNQUdFX01BU0tfMgkoKDEgPDwgMSkgfCAoMSA8 PCAzKSB8ICgxIDw8IDUpKQotI2RlZmluZSBNREZMRF9EU1JfMkRfM0QgCShNREZMRF9EU1JfMkRf M0RfMCB8IE1ERkxEX0RTUl8yRF8zRF8yKQotCi0jZGVmaW5lIE1ERkxEX0RTUl9SUgkJNDUKLSNk ZWZpbmUgTURGTERfRFBVX0VOQUJMRSAJKDEgPDwgMzEpCi0jZGVmaW5lIE1ERkxEX0RTUl9GVUxM U0NSRUVOIAkoMSA8PCAzMCkKLSNkZWZpbmUgTURGTERfRFNSX0RFTEFZCQkoSFogLyBNREZMRF9E U1JfUlIpCi0KICNkZWZpbmUgUFNCX1BXUl9TVEFURV9PTgkJMQogI2RlZmluZSBQU0JfUFdSX1NU QVRFX09GRgkJMgogCkBAIC0zODIsMTYgKzM1MSw2IEBAIHN0cnVjdCBwc2Jfc3RhdGUgewogCXVp bnQzMl90IHNhdmVQV01fQ09OVFJPTF9MT0dJQzsKIH07CiAKLXN0cnVjdCBtZWRmaWVsZF9zdGF0 ZSB7Ci0JdWludDMyX3Qgc2F2ZU1JUEk7Ci0JdWludDMyX3Qgc2F2ZU1JUElfQzsKLQotCXVpbnQz Ml90IHNhdmVQRklUX0NPTlRST0w7Ci0JdWludDMyX3Qgc2F2ZVBGSVRfUEdNX1JBVElPUzsKLQl1 aW50MzJfdCBzYXZlSERNSVBIWU1JU0NDVEw7Ci0JdWludDMyX3Qgc2F2ZUhETUlCX0NPTlRST0w7 Ci19OwotCiBzdHJ1Y3QgY2R2X3N0YXRlIHsKIAl1aW50MzJfdCBzYXZlRFNQQ0xLX0dBVEVfRDsK IAl1aW50MzJfdCBzYXZlUkFNQ0xLX0dBVEVfRDsKQEAgLTQxNyw3ICszNzYsNiBAQCBzdHJ1Y3Qg cHNiX3NhdmVfYXJlYSB7CiAJdWludDMyX3Qgc2F2ZVZCVDsKIAl1bmlvbiB7CiAJICAgICAgICBz dHJ1Y3QgcHNiX3N0YXRlIHBzYjsKLQkJc3RydWN0IG1lZGZpZWxkX3N0YXRlIG1kZmxkOwogCQlz dHJ1Y3QgY2R2X3N0YXRlIGNkdjsKIAl9OwogCXVpbnQzMl90IHNhdmVCTENfUFdNX0NUTDI7CkBA IC01OTAsOCArNTQ4LDYgQEAgc3RydWN0IGRybV9wc2JfcHJpdmF0ZSB7CiAJdTMyIHBpcGVjb25m WzNdOwogCXUzMiBkc3BjbnRyWzNdOwogCi0JaW50IG1kZmxkX3BhbmVsX2lkOwotCiAJYm9vbCBk cGxsYV85Nm1oejsJLyogRFBMTCBkYXRhIGZyb20gdGhlIFZCVCAqLwogCiAJc3RydWN0IHsKQEAg LTczNyw5ICs2OTMsNiBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHBzYl9vcHMgcHNiX2NoaXBfb3Bz OwogLyogb2FrdHJhaWxfZGV2aWNlLmMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHNiX29wcyBv YWt0cmFpbF9jaGlwX29wczsKIAotLyogbWRsZmRfZGV2aWNlLmMgKi8KLWV4dGVybiBjb25zdCBz dHJ1Y3QgcHNiX29wcyBtZGZsZF9jaGlwX29wczsKLQogLyogY2R2X2RldmljZS5jICovCiBleHRl cm4gY29uc3Qgc3RydWN0IHBzYl9vcHMgY2R2X2NoaXBfb3BzOwogCkBAIC03NzksMjUgKzczMiw2 IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBNUlNUX01TR19XUklURTMyKGludCBkb21haW4sIHVpbnQg cG9ydCwgdWludCBvZmZzZXQsCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfcm9vdCwgMHhE MCwgbWNyKTsKIAlwY2lfZGV2X3B1dChwY2lfcm9vdCk7CiB9Ci1zdGF0aWMgaW5saW5lIHUzMiBN REZMRF9NU0dfUkVBRDMyKGludCBkb21haW4sIHVpbnQgcG9ydCwgdWludCBvZmZzZXQpCi17Ci0J aW50IG1jciA9ICgweDEwPDwyNCkgfCAocG9ydCA8PCAxNikgfCAob2Zmc2V0IDw8IDgpOwotCXVp bnQzMl90IHJldF92YWwgPSAwOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfcm9vdCA9IHBjaV9nZXRf ZG9tYWluX2J1c19hbmRfc2xvdChkb21haW4sIDAsIDApOwotCXBjaV93cml0ZV9jb25maWdfZHdv cmQocGNpX3Jvb3QsIDB4RDAsIG1jcik7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9yb290 LCAweEQ0LCAmcmV0X3ZhbCk7Ci0JcGNpX2Rldl9wdXQocGNpX3Jvb3QpOwotCXJldHVybiByZXRf dmFsOwotfQotc3RhdGljIGlubGluZSB2b2lkIE1ERkxEX01TR19XUklURTMyKGludCBkb21haW4s IHVpbnQgcG9ydCwgdWludCBvZmZzZXQsCi0JCQkJICAgICB1MzIgdmFsdWUpCi17Ci0JaW50IG1j ciA9ICgweDExPDwyNCkgfCAocG9ydCA8PCAxNikgfCAob2Zmc2V0IDw8IDgpIHwgMHhGMDsKLQlz dHJ1Y3QgcGNpX2RldiAqcGNpX3Jvb3QgPSBwY2lfZ2V0X2RvbWFpbl9idXNfYW5kX3Nsb3QoZG9t YWluLCAwLCAwKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9yb290LCAweEQ0LCB2YWx1 ZSk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfcm9vdCwgMHhEMCwgbWNyKTsKLQlwY2lf ZGV2X3B1dChwY2lfcm9vdCk7Ci19CiAKIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgUkVHSVNURVJf UkVBRChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCByZWcpCiB7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvcHNiX2ludGVsX3JlZy5oCmluZGV4IDgzNWNjOTI0YzQ1YS4uMzY0ZWE4ZjA2Zjlj IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9yZWcuaAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9yZWcuaApAQCAtNTk1LDcgKzU5NSw3 IEBAIHN0cnVjdCBkcHN0X2d1YXJkYmFuZCB7CiAjZGVmaW5lIFBJUEVfUElYRUxfTUFTSwkJMHgw MGZmZmZmZgogI2RlZmluZSBQSVBFX1BJWEVMX1NISUZUCTAKIAotI2RlZmluZSBGV19CTENfU0VM RgkJMHgyMGUwIAorI2RlZmluZSBGV19CTENfU0VMRgkJMHgyMGUwCiAjZGVmaW5lIEZXX0JMQ19T RUxGX0VOICAgICAgICAgICgxPDwxNSkKIAogI2RlZmluZSBEU1BBUkIJCQkweDcwMDMwCkBAIC03 ODksMTcgKzc4OSw5IEBAIHN0cnVjdCBkcHN0X2d1YXJkYmFuZCB7CiAgKiBNT09SRVNUT1dOIGRl bHRhIHJlZ2lzdGVycwogICovCiAjZGVmaW5lIE1SU1RfRFBMTF9BCQkweDBmMDE0Ci0jZGVmaW5l IE1ERkxEX0RQTExfQgkJMHgwZjAxOAotI2RlZmluZSBNREZMRF9JTlBVVF9SRUZfU0VMCQkoMSA8 PCAxNCkKLSNkZWZpbmUgTURGTERfVkNPX1NFTAkJCSgxIDw8IDE2KQogI2RlZmluZSBEUExMQV9N T0RFX0xWRFMJCQkoMiA8PCAyNikJLyogbXJzdCAqLwotI2RlZmluZSBNREZMRF9QTExfTEFUQ0hF TgkJKDEgPDwgMjgpCi0jZGVmaW5lIE1ERkxEX1BXUl9HQVRFX0VOCQkoMSA8PCAzMCkKLSNkZWZp bmUgTURGTERfUDFfTUFTSwkJCSgweDFGRiA8PCAxNykKICNkZWZpbmUgTVJTVF9GUEEwCQkweDBm MDQwCiAjZGVmaW5lIE1SU1RfRlBBMQkJMHgwZjA0NAotI2RlZmluZSBNREZMRF9EUExMX0RJVjAJ CTB4MGYwNDgKLSNkZWZpbmUgTURGTERfRFBMTF9ESVYxCQkweDBmMDRjCiAjZGVmaW5lIE1SU1Rf UEVSRl9NT0RFCQkweDAyMGY0CiAKIC8qCkBAIC04NDgsNyArODQwLDYgQEAgc3RydWN0IGRwc3Rf Z3VhcmRiYW5kIHsKIAogI2RlZmluZSBNUlNUX0RTUEFCQVNFCQkweDcwMTljCiAjZGVmaW5lIE1S U1RfRFNQQkJBU0UJCTB4NzExOWMKLSNkZWZpbmUgTURGTERfRFNQQ0JBU0UJCTB4NzIxOWMKIAog LyoKICAqIE1vb3Jlc3Rvd24gcmVnaXN0ZXJzLgpAQCAtOTMwLDcgKzkyMSw2IEBAIHN0cnVjdCBk cHN0X2d1YXJkYmFuZCB7CiAjZGVmaW5lIERFVklDRV9SRVNFVF9SRUcJCTB4YjAxQwogI2RlZmlu ZSBEUElfUkVTT0xVVElPTl9SRUcJCTB4YjAyMAogI2RlZmluZSBSRVNfVl9QT1MJCQkJMHgxMAot I2RlZmluZSBEQklfUkVTT0xVVElPTl9SRUcJCTB4YjAyNCAvKiBSZXNlcnZlZCBmb3IgTURGTEQg Ki8KICNkZWZpbmUgSE9SSVpfU1lOQ19QQURfQ09VTlRfUkVHCTB4YjAyOAogI2RlZmluZSBIT1JJ Wl9CQUNLX1BPUkNIX0NPVU5UX1JFRwkweGIwMkMKICNkZWZpbmUgSE9SSVpfRlJPTlRfUE9SQ0hf Q09VTlRfUkVHCTB4YjAzMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2Jf aXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pcnEuYwppbmRleCA1Y2NlZWE5YmU1 MzQuLmFlOWIxMDBlNjQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2Jf aXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaXJxLmMKQEAgLTEwLDcgKzEw LDYgQEAKIAogI2luY2x1ZGUgPGRybS9kcm1fdmJsYW5rLmg+CiAKLSNpbmNsdWRlICJtZGZsZF9v dXRwdXQuaCIKICNpbmNsdWRlICJwb3dlci5oIgogI2luY2x1ZGUgInBzYl9kcnYuaCIKICNpbmNs dWRlICJwc2JfaW50ZWxfcmVnLmgiCkBAIC0xNjQsOCArMTYzLDcgQEAgc3RhdGljIHZvaWQgbWlk X3BpcGVfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKIAkJ IiVzLCBjYW4ndCBjbGVhciBzdGF0dXMgYml0cyBmb3IgcGlwZSAlZCwgaXRzIHZhbHVlID0gMHgl eC5cbiIsCiAJCV9fZnVuY19fLCBwaXBlLCBQU0JfUlZEQzMyKHBpcGVfc3RhdF9yZWcpKTsKIAot CWlmIChwaXBlX3N0YXRfdmFsICYgUElQRV9WQkxBTktfU1RBVFVTIHx8Ci0JICAgIChJU19NRkxE KGRldikgJiYgcGlwZV9zdGF0X3ZhbCAmIFBJUEVfVEVfU1RBVFVTKSkgeworCWlmIChwaXBlX3N0 YXRfdmFsICYgUElQRV9WQkxBTktfU1RBVFVTKSB7CiAJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9 IGRybV9jcnRjX2Zyb21faW5kZXgoZGV2LCBwaXBlKTsKIAkJc3RydWN0IGdtYV9jcnRjICpnbWFf Y3J0YyA9IHRvX2dtYV9jcnRjKGNydGMpOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjYz LDExICsyNjEsNiBAQCBpcnFyZXR1cm5fdCBwc2JfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAq YXJnKQogCWlmICh2ZGNfc3RhdCAmIChfUFNCX1BJUEVfRVZFTlRfRkxBR3xfUFNCX0lSUV9BU0xF KSkKIAkJZHNwX2ludCA9IDE7CiAKLQkvKiBGSVhNRTogSGFuZGxlIE1lZGZpZWxkCi0JaWYgKHZk Y19zdGF0ICYgX01ERkxEX0RJU1BfQUxMX0lSUV9GTEFHKQotCQlkc3BfaW50ID0gMTsKLQkqLwot CiAJaWYgKHZkY19zdGF0ICYgX1BTQl9JUlFfU0dYX0ZMQUcpCiAJCXNneF9pbnQgPSAxOwogCWlm ICh2ZGNfc3RhdCAmIF9QU0JfSVJRX0RJU1BfSE9UU1lOQykKQEAgLTMyNSwxMyArMzE4LDYgQEAg dm9pZCBwc2JfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAlpZiAoZGV2 LT52YmxhbmtbMV0uZW5hYmxlZCkKIAkJZGV2X3ByaXYtPnZkY19pcnFfbWFzayB8PSBfUFNCX1ZT WU5DX1BJUEVCX0ZMQUc7CiAKLQkvKiBGSVhNRTogSGFuZGxlIE1lZGZpZWxkIGlycSBtYXNrCi0J aWYgKGRldi0+dmJsYW5rWzFdLmVuYWJsZWQpCi0JCWRldl9wcml2LT52ZGNfaXJxX21hc2sgfD0g X01ERkxEX1BJUEVCX0VWRU5UX0ZMQUc7Ci0JaWYgKGRldi0+dmJsYW5rWzJdLmVuYWJsZWQpCi0J CWRldl9wcml2LT52ZGNfaXJxX21hc2sgfD0gX01ERkxEX1BJUEVDX0VWRU5UX0ZMQUc7Ci0JKi8K LQogCS8qIFJldmlzaXQgdGhpcyBhcmVhIC0gd2FudCBwZXIgZGV2aWNlIG1hc2tzID8gKi8KIAlp ZiAoZGV2X3ByaXYtPm9wcy0+aG90cGx1ZykKIAkJZGV2X3ByaXYtPnZkY19pcnFfbWFzayB8PSBf UFNCX0lSUV9ESVNQX0hPVFNZTkM7CkBAIC01MDQsMTEgKzQ5MCw2IEBAIGludCBwc2JfZW5hYmxl X3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJdWludDMyX3QgcmVnX3ZhbCA9IDA7CiAJ dWludDMyX3QgcGlwZWNvbmZfcmVnID0gbWlkX3BpcGVjb25mKHBpcGUpOwogCi0JLyogTWVkZmll bGQgaXMgZGlmZmVyZW50IC0gd2Ugc2hvdWxkIHBlcmhhcHMgZXh0cmFjdCBvdXQgdmJsYW5rCi0J ICAgYW5kIGJsYWNrbGlnaHQgZXRjIG9wcyAqLwotCWlmIChJU19NRkxEKGRldikpCi0JCXJldHVy biBtZGZsZF9lbmFibGVfdGUoZGV2LCBwaXBlKTsKLQogCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2 LCBmYWxzZSkpIHsKIAkJcmVnX3ZhbCA9IFJFR19SRUFEKHBpcGVjb25mX3JlZyk7CiAJCWdtYV9w b3dlcl9lbmQoZGV2KTsKQEAgLTU0Myw4ICs1MjQsNiBAQCB2b2lkIHBzYl9kaXNhYmxlX3ZibGFu ayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAKLQlpZiAo SVNfTUZMRChkZXYpKQotCQltZGZsZF9kaXNhYmxlX3RlKGRldiwgcGlwZSk7CiAJc3Bpbl9sb2Nr X2lycXNhdmUoJmRldl9wcml2LT5pcnFtYXNrX2xvY2ssIGlycWZsYWdzKTsKIAogCWlmIChwaXBl ID09IDApCkBAIC01NTksNTUgKzUzOCw2IEBAIHZvaWQgcHNiX2Rpc2FibGVfdmJsYW5rKHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJx bWFza19sb2NrLCBpcnFmbGFncyk7CiB9CiAKLS8qCi0gKiBJdCBpcyB1c2VkIHRvIGVuYWJsZSBU RSBpbnRlcnJ1cHQKLSAqLwotaW50IG1kZmxkX2VuYWJsZV90ZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCBpbnQgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9Ci0J CShzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0JdW5zaWduZWQg bG9uZyBpcnFmbGFnczsKLQl1aW50MzJfdCByZWdfdmFsID0gMDsKLQl1aW50MzJfdCBwaXBlY29u Zl9yZWcgPSBtaWRfcGlwZWNvbmYocGlwZSk7Ci0KLQlpZiAoZ21hX3Bvd2VyX2JlZ2luKGRldiwg ZmFsc2UpKSB7Ci0JCXJlZ192YWwgPSBSRUdfUkVBRChwaXBlY29uZl9yZWcpOwotCQlnbWFfcG93 ZXJfZW5kKGRldik7Ci0JfQotCi0JaWYgKCEocmVnX3ZhbCAmIFBJUEVBQ09ORl9FTkFCTEUpKQot CQlyZXR1cm4gLUVJTlZBTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxbWFz a19sb2NrLCBpcnFmbGFncyk7Ci0KLQltaWRfZW5hYmxlX3BpcGVfZXZlbnQoZGV2X3ByaXYsIHBp cGUpOwotCXBzYl9lbmFibGVfcGlwZXN0YXQoZGV2X3ByaXYsIHBpcGUsIFBJUEVfVEVfRU5BQkxF KTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFtYXNrX2xvY2ssIGly cWZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogSXQgaXMgdXNlZCB0byBkaXNhYmxl IFRFIGludGVycnVwdAotICovCi12b2lkIG1kZmxkX2Rpc2FibGVfdGUoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgaW50IHBpcGUpCi17Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYg PQotCQkoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqKSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2ln bmVkIGxvbmcgaXJxZmxhZ3M7Ci0KLQlpZiAoIWRldl9wcml2LT5kc3JfZW5hYmxlKQotCQlyZXR1 cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycW1hc2tfbG9jaywgaXJxZmxh Z3MpOwotCi0JbWlkX2Rpc2FibGVfcGlwZV9ldmVudChkZXZfcHJpdiwgcGlwZSk7Ci0JcHNiX2Rp c2FibGVfcGlwZXN0YXQoZGV2X3ByaXYsIHBpcGUsIFBJUEVfVEVfRU5BQkxFKTsKLQotCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFtYXNrX2xvY2ssIGlycWZsYWdzKTsKLX0K LQogLyogQ2FsbGVkIGZyb20gZHJtIGdlbmVyaWMgY29kZSwgcGFzc2VkIGEgJ2NydGMnLCB3aGlj aAogICogd2UgdXNlIGFzIGEgcGlwZSBpbmRleAogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZ21hNTAwL3BzYl9pcnEuaCBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2lycS5o CmluZGV4IDRmNzM5OTg4NDhkMS4uMWI1NzdmYTcwMTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vZ21hNTAwL3BzYl9pcnEuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9p cnEuaApAQCAtMzEsNiArMzEsNCBAQCBpbnQgIHBzYl9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1f Y3J0YyAqY3J0Yyk7CiB2b2lkIHBzYl9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpOwogdTMyICBwc2JfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7 CiAKLWludCBtZGZsZF9lbmFibGVfdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUp Owotdm9pZCBtZGZsZF9kaXNhYmxlX3RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBl KTsKICNlbmRpZiAvKiBfUFNCX0lSUV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2dtYTUwMC9wc2JfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9yZWcuaAppbmRl eCBmYjIyYmFjNWJiNzQuLjJhMjI5YTBlZjM2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2dtYTUwMC9wc2JfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfcmVnLmgK QEAgLTU1MCwyMSArNTUwLDcgQEAKICNkZWZpbmUgUFNCX1BNX1NTQwkJCTB4MjAKICNkZWZpbmUg UFNCX1BNX1NTUwkJCTB4MzAKICNkZWZpbmUgUFNCX1BXUkdUX0RJU1BMQVlfTUFTSwkJMHhjIC8q b24gYSBkaWZmZXJlbnQgQkEgdGhhbiB2aWRlby9nZngqLwotI2RlZmluZSBNREZMRF9QV1JHVF9E SVNQTEFZX0FfQ05UUgkweDAwMDAwMDBjCi0jZGVmaW5lIE1ERkxEX1BXUkdUX0RJU1BMQVlfQl9D TlRSCTB4MDAwMGMwMDAKLSNkZWZpbmUgTURGTERfUFdSR1RfRElTUExBWV9DX0NOVFIJMHgwMDAz MDAwMAotI2RlZmluZSBNREZMRF9QV1JHVF9ESVNQX01JUElfQ05UUgkweDAwMGMwMDAwCi0jZGVm aW5lIE1ERkxEX1BXUkdUX0RJU1BMQVlfQ05UUiAgICAoTURGTERfUFdSR1RfRElTUExBWV9BX0NO VFIgfCBNREZMRF9QV1JHVF9ESVNQTEFZX0JfQ05UUiB8IE1ERkxEX1BXUkdUX0RJU1BMQVlfQ19D TlRSIHwgTURGTERfUFdSR1RfRElTUF9NSVBJX0NOVFIpIC8qIDB4MDAwZmMwMGMgKi8KIC8qIERp c3BsYXkgU1NTIHJlZ2lzdGVyIGJpdHMgYXJlIGRpZmZlcmVudCBpbiBBMCB2cy4gQjAgKi8KICNk ZWZpbmUgUFNCX1BXUkdUX0dGWF9NQVNLCQkweDMKLSNkZWZpbmUgTURGTERfUFdSR1RfRElTUExB WV9BX1NUUwkweDAwMDAwMGMwCi0jZGVmaW5lIE1ERkxEX1BXUkdUX0RJU1BMQVlfQl9TVFMJMHgw MDAwMDMwMAotI2RlZmluZSBNREZMRF9QV1JHVF9ESVNQTEFZX0NfU1RTCTB4MDAwMDBjMDAKICNk ZWZpbmUgUFNCX1BXUkdUX0dGWF9NQVNLX0IwCQkweGMzCi0jZGVmaW5lIE1ERkxEX1BXUkdUX0RJ U1BMQVlfQV9TVFNfQjAJMHgwMDAwMDAwYwotI2RlZmluZSBNREZMRF9QV1JHVF9ESVNQTEFZX0Jf U1RTX0IwCTB4MDAwMGMwMDAKLSNkZWZpbmUgTURGTERfUFdSR1RfRElTUExBWV9DX1NUU19CMAkw eDAwMDMwMDAwCi0jZGVmaW5lIE1ERkxEX1BXUkdUX0RJU1BfTUlQSV9TVFMJMHgwMDBjMDAwMAot I2RlZmluZSBNREZMRF9QV1JHVF9ESVNQTEFZX1NUU19BMCAgICAoTURGTERfUFdSR1RfRElTUExB WV9BX1NUUyB8IE1ERkxEX1BXUkdUX0RJU1BMQVlfQl9TVFMgfCBNREZMRF9QV1JHVF9ESVNQTEFZ X0NfU1RTIHwgTURGTERfUFdSR1RfRElTUF9NSVBJX1NUUykgLyogMHgwMDBmYzAwYyAqLwotI2Rl ZmluZSBNREZMRF9QV1JHVF9ESVNQTEFZX1NUU19CMCAgICAoTURGTERfUFdSR1RfRElTUExBWV9B X1NUU19CMCB8IE1ERkxEX1BXUkdUX0RJU1BMQVlfQl9TVFNfQjAgfCBNREZMRF9QV1JHVF9ESVNQ TEFZX0NfU1RTX0IwIHwgTURGTERfUFdSR1RfRElTUF9NSVBJX1NUUykgLyogMHgwMDBmYzAwYyAq LwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3RjMzU4NzZ4LWRz aS1sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3RjMzU4NzZ4LWRzaS1sdmRzLmMKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5ZDJmZmMyZmVkOS4uMDAwMDAwMDAwMDAwCi0t LSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvdGMzNTg3NngtZHNpLWx2ZHMuYworKysgL2Rldi9u dWxsCkBAIC0xLDgwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTEgSW50ZWwgQ29y cG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0g KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0g KgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5l bC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29u c3VtZXIuaD4KLQotI2luY2x1ZGUgPGFzbS9pbnRlbF9zY3VfaXBjLmg+Ci0KLSNpbmNsdWRlICJt ZGZsZF9kc2lfZHBpLmgiCi0jaW5jbHVkZSAibWRmbGRfZHNpX3BrZ19zZW5kZXIuaCIKLSNpbmNs dWRlICJtZGZsZF9vdXRwdXQuaCIKLSNpbmNsdWRlICJ0YzM1ODc2eC1kc2ktbHZkcy5oIgotCi1z dGF0aWMgc3RydWN0IGkyY19jbGllbnQgKnRjMzU4NzZ4X2NsaWVudDsKLXN0YXRpYyBzdHJ1Y3Qg aTJjX2NsaWVudCAqY21pX2xjZF9pMmNfY2xpZW50OwotLyogUGFuZWwgR1BJT3MgKi8KLXN0YXRp YyBzdHJ1Y3QgZ3Bpb19kZXNjICpicmlkZ2VfcmVzZXQ7Ci1zdGF0aWMgc3RydWN0IGdwaW9fZGVz YyAqYnJpZGdlX2JsX2VuYWJsZTsKLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19kZXNjICpiYWNrbGlnaHRf dm9sdGFnZTsKLQotCi0jZGVmaW5lIEZMRF9NQVNLKHN0YXJ0LCBlbmQpCSgoKDEgPDwgKChzdGFy dCkgLSAoZW5kKSArIDEpKSAtIDEpIDw8IChlbmQpKQotI2RlZmluZSBGTERfVkFMKHZhbCwgc3Rh cnQsIGVuZCkgKCgodmFsKSA8PCAoZW5kKSkgJiBGTERfTUFTSyhzdGFydCwgZW5kKSkKLQotLyog RFNJIEQtUEhZIExheWVyIFJlZ2lzdGVycyAqLwotI2RlZmluZSBEMFdfRFBIWUNPTlRUWAkJMHgw MDA0Ci0jZGVmaW5lIENMV19EUEhZQ09OVFJYCQkweDAwMjAKLSNkZWZpbmUgRDBXX0RQSFlDT05U UlgJCTB4MDAyNAotI2RlZmluZSBEMVdfRFBIWUNPTlRSWAkJMHgwMDI4Ci0jZGVmaW5lIEQyV19E UEhZQ09OVFJYCQkweDAwMkMKLSNkZWZpbmUgRDNXX0RQSFlDT05UUlgJCTB4MDAzMAotI2RlZmlu ZSBDT01fRFBIWUNPTlRSWAkJMHgwMDM4Ci0jZGVmaW5lIENMV19DTlRSTAkJMHgwMDQwCi0jZGVm aW5lIEQwV19DTlRSTAkJMHgwMDQ0Ci0jZGVmaW5lIEQxV19DTlRSTAkJMHgwMDQ4Ci0jZGVmaW5l IEQyV19DTlRSTAkJMHgwMDRDCi0jZGVmaW5lIEQzV19DTlRSTAkJMHgwMDUwCi0jZGVmaW5lIERG VE1PREVfQ05UUkwJCTB4MDA1NAotCi0vKiBEU0kgUFBJIExheWVyIFJlZ2lzdGVycyAqLwotI2Rl ZmluZSBQUElfU1RBUlRQUEkJCTB4MDEwNAotI2RlZmluZSBQUElfQlVTWVBQSQkJMHgwMTA4Ci0j ZGVmaW5lIFBQSV9MSU5FSU5JVENOVAkJMHgwMTEwCi0jZGVmaW5lIFBQSV9MUFRYVElNRUNOVAkJ MHgwMTE0Ci0jZGVmaW5lIFBQSV9MQU5FRU5BQkxFCQkweDAxMzQKLSNkZWZpbmUgUFBJX1RYX1JY X1RBCQkweDAxM0MKLSNkZWZpbmUgUFBJX0NMU19BVE1SCQkweDAxNDAKLSNkZWZpbmUgUFBJX0Qw U19BVE1SCQkweDAxNDQKLSNkZWZpbmUgUFBJX0QxU19BVE1SCQkweDAxNDgKLSNkZWZpbmUgUFBJ X0QyU19BVE1SCQkweDAxNEMKLSNkZWZpbmUgUFBJX0QzU19BVE1SCQkweDAxNTAKLSNkZWZpbmUg UFBJX0QwU19DTFJTSVBPQ09VTlQJMHgwMTY0Ci0jZGVmaW5lIFBQSV9EMVNfQ0xSU0lQT0NPVU5U CTB4MDE2OAotI2RlZmluZSBQUElfRDJTX0NMUlNJUE9DT1VOVAkweDAxNkMKLSNkZWZpbmUgUFBJ X0QzU19DTFJTSVBPQ09VTlQJMHgwMTcwCi0jZGVmaW5lIENMU19QUkUJCQkweDAxODAKLSNkZWZp bmUgRDBTX1BSRQkJCTB4MDE4NAotI2RlZmluZSBEMVNfUFJFCQkJMHgwMTg4Ci0jZGVmaW5lIEQy U19QUkUJCQkweDAxOEMKLSNkZWZpbmUgRDNTX1BSRQkJCTB4MDE5MAotI2RlZmluZSBDTFNfUFJF UAkJMHgwMUEwCi0jZGVmaW5lIEQwU19QUkVQCQkweDAxQTQKLSNkZWZpbmUgRDFTX1BSRVAJCTB4 MDFBOAotI2RlZmluZSBEMlNfUFJFUAkJMHgwMUFDCi0jZGVmaW5lIEQzU19QUkVQCQkweDAxQjAK LSNkZWZpbmUgQ0xTX1pFUk8JCTB4MDFDMAotI2RlZmluZSBEMFNfWkVSTwkJMHgwMUM0Ci0jZGVm aW5lIEQxU19aRVJPCQkweDAxQzgKLSNkZWZpbmUgRDJTX1pFUk8JCTB4MDFDQwotI2RlZmluZSBE M1NfWkVSTwkJMHgwMUQwCi0jZGVmaW5lIFBQSV9DTFJGTEcJCTB4MDFFMAotI2RlZmluZSBQUElf Q0xSU0lQTwkJMHgwMUU0Ci0jZGVmaW5lIEhTVElNRU9VVAkJMHgwMUYwCi0jZGVmaW5lIEhTVElN RU9VVEVOQUJMRQkJMHgwMUY0Ci0KLS8qIERTSSBQcm90b2NvbCBMYXllciBSZWdpc3RlcnMgKi8K LSNkZWZpbmUgRFNJX1NUQVJURFNJCQkweDAyMDQKLSNkZWZpbmUgRFNJX0JVU1lEU0kJCTB4MDIw OAotI2RlZmluZSBEU0lfTEFORUVOQUJMRQkJMHgwMjEwCi0jZGVmaW5lIERTSV9MQU5FU1RBVFVT MAkJMHgwMjE0Ci0jZGVmaW5lIERTSV9MQU5FU1RBVFVTMQkJMHgwMjE4Ci0jZGVmaW5lIERTSV9J TlRTVEFUVVMJCTB4MDIyMAotI2RlZmluZSBEU0lfSU5UTUFTSwkJMHgwMjI0Ci0jZGVmaW5lIERT SV9JTlRDTFIJCTB4MDIyOAotI2RlZmluZSBEU0lfTFBUWFRPCQkweDAyMzAKLQotLyogRFNJIEdl bmVyYWwgUmVnaXN0ZXJzICovCi0jZGVmaW5lIERTSUVSUkNOVAkJMHgwMzAwCi0KLS8qIERTSSBB cHBsaWNhdGlvbiBMYXllciBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgQVBMQ1RSTAkJCTB4MDQwMAot I2RlZmluZSBSRFBLVExOCQkJMHgwNDA0Ci0KLS8qIFZpZGVvIFBhdGggUmVnaXN0ZXJzICovCi0j ZGVmaW5lIFZQQ1RSTAkJCTB4MDQ1MAotI2RlZmluZSBIVElNMQkJCTB4MDQ1NAotI2RlZmluZSBI VElNMgkJCTB4MDQ1OAotI2RlZmluZSBWVElNMQkJCTB4MDQ1QwotI2RlZmluZSBWVElNMgkJCTB4 MDQ2MAotI2RlZmluZSBWRlVFTgkJCTB4MDQ2NAotCi0vKiBMVkRTIFJlZ2lzdGVycyAqLwotI2Rl ZmluZSBMVk1YMDAwMwkJMHgwNDgwCi0jZGVmaW5lIExWTVgwNDA3CQkweDA0ODQKLSNkZWZpbmUg TFZNWDA4MTEJCTB4MDQ4OAotI2RlZmluZSBMVk1YMTIxNQkJMHgwNDhDCi0jZGVmaW5lIExWTVgx NjE5CQkweDA0OTAKLSNkZWZpbmUgTFZNWDIwMjMJCTB4MDQ5NAotI2RlZmluZSBMVk1YMjQyNwkJ MHgwNDk4Ci0jZGVmaW5lIExWQ0ZHCQkJMHgwNDlDCi0jZGVmaW5lIExWUEhZMAkJCTB4MDRBMAot I2RlZmluZSBMVlBIWTEJCQkweDA0QTQKLQotLyogU3lzdGVtIFJlZ2lzdGVycyAqLwotI2RlZmlu ZSBTWVNTVEFUCQkJMHgwNTAwCi0jZGVmaW5lIFNZU1JTVAkJCTB4MDUwNAotCi0vKiBHUElPIFJl Z2lzdGVycyAqLwotLyojZGVmaW5lIEdQSU9DCQkJMHgwNTIwKi8KLSNkZWZpbmUgR1BJT08JCQkw eDA1MjQKLSNkZWZpbmUgR1BJT0kJCQkweDA1MjgKLQotLyogSTJDIFJlZ2lzdGVycyAqLwotI2Rl ZmluZSBJMkNUSU1DVFJMCQkweDA1NDAKLSNkZWZpbmUgSTJDTUFERFIJCTB4MDU0NAotI2RlZmlu ZSBXREFUQVEJCQkweDA1NDgKLSNkZWZpbmUgUkRBVEFRCQkJMHgwNTRDCi0KLS8qIENoaXAvUmV2 IFJlZ2lzdGVycyAqLwotI2RlZmluZSBJRFJFRwkJCTB4MDU4MAotCi0vKiBEZWJ1ZyBSZWdpc3Rl cnMgKi8KLSNkZWZpbmUgREVCVUcwMAkJCTB4MDVBMAotI2RlZmluZSBERUJVRzAxCQkJMHgwNUE0 Ci0KLS8qIFBhbmVsIENBQkMgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFBBTkVMX1BXTV9DT05UUk9M CTB4OTAKLSNkZWZpbmUgUEFORUxfRlJFUV9ESVZJREVSX0hJCTB4OTEKLSNkZWZpbmUgUEFORUxf RlJFUV9ESVZJREVSX0xPCTB4OTIKLSNkZWZpbmUgUEFORUxfRFVUWV9DT05UUk9MCTB4OTMKLSNk ZWZpbmUgUEFORUxfTU9ESUZZX1JHQgkweDk0Ci0jZGVmaW5lIFBBTkVMX0ZSQU1FUkFURV9DT05U Uk9MCTB4OTYKLSNkZWZpbmUgUEFORUxfUFdNX01JTgkJMHg5NwotI2RlZmluZSBQQU5FTF9QV01f UkVGCQkweDk4Ci0jZGVmaW5lIFBBTkVMX1BXTV9NQVgJCTB4OTkKLSNkZWZpbmUgUEFORUxfQUxM T1dfRElTVE9SVAkweDlBCi0jZGVmaW5lIFBBTkVMX0JZUEFTU19QV01JCTB4OUIKLQotLyogUGFu ZWwgY29sb3IgbWFuYWdlbWVudCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgUEFORUxfQ01fRU5BQkxF CQkweDcwMAotI2RlZmluZSBQQU5FTF9DTV9IVUUJCTB4NzAxCi0jZGVmaW5lIFBBTkVMX0NNX1NB VFVSQVRJT04JMHg3MDIKLSNkZWZpbmUgUEFORUxfQ01fSU5URU5TSVRZCTB4NzAzCi0jZGVmaW5l IFBBTkVMX0NNX0JSSUdIVE5FU1MJMHg3MDQKLSNkZWZpbmUgUEFORUxfQ01fQ0VfRU5BQkxFCTB4 NzA1Ci0jZGVmaW5lIFBBTkVMX0NNX1BFQUtfRU4JMHg3MTAKLSNkZWZpbmUgUEFORUxfQ01fR0FJ TgkJMHg3MTEKLSNkZWZpbmUgUEFORUxfQ01fSFVFVEFCTEVfU1RBUlQJMHg3MzAKLSNkZWZpbmUg UEFORUxfQ01fSFVFVEFCTEVfRU5ECTB4NzQ3IC8qIGluY2x1c2l2ZSAqLwotCi0vKiBJbnB1dCBt dXhpbmcgZm9yIHJlZ2lzdGVycyBMVk1YMDAwMy4uLkxWTVgyNDI3ICovCi1lbnVtIHsKLQlJTlBV VF9SMCwJLyogMCAqLwotCUlOUFVUX1IxLAotCUlOUFVUX1IyLAotCUlOUFVUX1IzLAotCUlOUFVU X1I0LAotCUlOUFVUX1I1LAotCUlOUFVUX1I2LAotCUlOUFVUX1I3LAotCUlOUFVUX0cwLAkvKiA4 ICovCi0JSU5QVVRfRzEsCi0JSU5QVVRfRzIsCi0JSU5QVVRfRzMsCi0JSU5QVVRfRzQsCi0JSU5Q VVRfRzUsCi0JSU5QVVRfRzYsCi0JSU5QVVRfRzcsCi0JSU5QVVRfQjAsCS8qIDE2ICovCi0JSU5Q VVRfQjEsCi0JSU5QVVRfQjIsCi0JSU5QVVRfQjMsCi0JSU5QVVRfQjQsCi0JSU5QVVRfQjUsCi0J SU5QVVRfQjYsCi0JSU5QVVRfQjcsCi0JSU5QVVRfSFNZTkMsCS8qIDI0ICovCi0JSU5QVVRfVlNZ TkMsCi0JSU5QVVRfREUsCi0JTE9HSUNfMCwKLQkvKiAyOC4uLjMxIHVuZGVmaW5lZCAqLwotfTsK LQotI2RlZmluZSBJTlBVVF9NVVgobHZteDAzLCBsdm14MDIsIGx2bXgwMSwgbHZteDAwKQkJXAot CShGTERfVkFMKGx2bXgwMywgMjksIDI0KSB8IEZMRF9WQUwobHZteDAyLCAyMCwgMTYpIHwJXAot CUZMRF9WQUwobHZteDAxLCAxMiwgOCkgfCBGTERfVkFMKGx2bXgwMCwgNCwgMCkpCi0KLS8qKgot ICogdGMzNTg3NnhfcmVndyAtIFdyaXRlIERTSS1MVkRTIGJyaWRnZSByZWdpc3RlciB1c2luZyBJ MkMKLSAqIEBjbGllbnQ6IHN0cnVjdCBpMmNfY2xpZW50IHRvIHVzZQotICogQHJlZzogcmVnaXN0 ZXIgYWRkcmVzcwotICogQHZhbHVlOiB2YWx1ZSB0byB3cml0ZQotICoKLSAqIFJldHVybnMgMCBv biBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlLgotICovCi1zdGF0aWMgaW50IHRj MzU4NzZ4X3JlZ3coc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHJlZywgdTMyIHZhbHVl KQotewotCWludCByOwotCXU4IHR4X2RhdGFbXSA9IHsKLQkJLyogTk9URTogUmVnaXN0ZXIgYWRk cmVzcyBiaWctZW5kaWFuLCBkYXRhIGxpdHRsZS1lbmRpYW4uICovCi0JCShyZWcgPj4gOCkgJiAw eGZmLAotCQlyZWcgJiAweGZmLAotCQl2YWx1ZSAmIDB4ZmYsCi0JCSh2YWx1ZSA+PiA4KSAmIDB4 ZmYsCi0JCSh2YWx1ZSA+PiAxNikgJiAweGZmLAotCQkodmFsdWUgPj4gMjQpICYgMHhmZiwKLQl9 OwotCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKLQkJewotCQkJLmFkZHIgPSBjbGllbnQtPmFk ZHIsCi0JCQkuZmxhZ3MgPSAwLAotCQkJLmJ1ZiA9IHR4X2RhdGEsCi0JCQkubGVuID0gQVJSQVlf U0laRSh0eF9kYXRhKSwKLQkJfSwKLQl9OwotCi0JciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFk YXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykpOwotCWlmIChyIDwgMCkgewotCQlkZXZfZXJy KCZjbGllbnQtPmRldiwgIiVzOiByZWcgMHglMDR4IHZhbCAweCUwOHggZXJyb3IgJWRcbiIsCi0J CQlfX2Z1bmNfXywgcmVnLCB2YWx1ZSwgcik7Ci0JCXJldHVybiByOwotCX0KLQotCWlmIChyIDwg QVJSQVlfU0laRShtc2dzKSkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiByZWcgMHgl MDR4IHZhbCAweCUwOHggbXNncyAlZFxuIiwKLQkJCV9fZnVuY19fLCByZWcsIHZhbHVlLCByKTsK LQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogcmVn IDB4JTA0eCB2YWwgMHglMDh4XG4iLAotCQkJX19mdW5jX18sIHJlZywgdmFsdWUpOwotCi0JcmV0 dXJuIDA7Ci19Ci0KLS8qKgotICogdGMzNTg3NnhfcmVnciAtIFJlYWQgRFNJLUxWRFMgYnJpZGdl IHJlZ2lzdGVyIHVzaW5nIEkyQwotICogQGNsaWVudDogc3RydWN0IGkyY19jbGllbnQgdG8gdXNl Ci0gKiBAcmVnOiByZWdpc3RlciBhZGRyZXNzCi0gKiBAdmFsdWU6IHBvaW50ZXIgZm9yIHN0b3Jp bmcgdGhlIHZhbHVlCi0gKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUg ZXJyb3IgdmFsdWUuCi0gKi8KLXN0YXRpYyBpbnQgdGMzNTg3NnhfcmVncihzdHJ1Y3QgaTJjX2Ns aWVudCAqY2xpZW50LCB1MTYgcmVnLCB1MzIgKnZhbHVlKQotewotCWludCByOwotCXU4IHR4X2Rh dGFbXSA9IHsKLQkJKHJlZyA+PiA4KSAmIDB4ZmYsCi0JCXJlZyAmIDB4ZmYsCi0JfTsKLQl1OCBy eF9kYXRhWzRdOwotCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKLQkJewotCQkJLmFkZHIgPSBj bGllbnQtPmFkZHIsCi0JCQkuZmxhZ3MgPSAwLAotCQkJLmJ1ZiA9IHR4X2RhdGEsCi0JCQkubGVu ID0gQVJSQVlfU0laRSh0eF9kYXRhKSwKLQkJfSwKLQkJewotCQkJLmFkZHIgPSBjbGllbnQtPmFk ZHIsCi0JCQkuZmxhZ3MgPSBJMkNfTV9SRCwKLQkJCS5idWYgPSByeF9kYXRhLAotCQkJLmxlbiA9 IEFSUkFZX1NJWkUocnhfZGF0YSksCi0JCSB9LAotCX07Ci0KLQlyID0gaTJjX3RyYW5zZmVyKGNs aWVudC0+YWRhcHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7Ci0JaWYgKHIgPCAwKSB7Ci0J CWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHJlZyAweCUwNHggZXJyb3IgJWRcbiIsIF9fZnVu Y19fLAotCQkJcmVnLCByKTsKLQkJcmV0dXJuIHI7Ci0JfQotCi0JaWYgKHIgPCBBUlJBWV9TSVpF KG1zZ3MpKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHJlZyAweCUwNHggbXNncyAl ZFxuIiwgX19mdW5jX18sCi0JCQlyZWcsIHIpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQkq dmFsdWUgPSByeF9kYXRhWzBdIDw8IDI0IHwgcnhfZGF0YVsxXSA8PCAxNiB8Ci0JCXJ4X2RhdGFb Ml0gPDwgOCB8IHJ4X2RhdGFbM107Ci0KLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiByZWcg MHglMDR4IHZhbHVlIDB4JTA4eFxuIiwgX19mdW5jX18sCi0JCXJlZywgKnZhbHVlKTsKLQotCXJl dHVybiAwOwotfQotCi12b2lkIHRjMzU4NzZ4X3NldF9icmlkZ2VfcmVzZXRfc3RhdGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgaW50IHN0YXRlKQotewotCWlmIChXQVJOKCF0YzM1ODc2eF9jbGll bnQsICIlcyBjYWxsZWQgYmVmb3JlIHByb2JlIiwgX19mdW5jX18pKQotCQlyZXR1cm47Ci0KLQlk ZXZfZGJnKCZ0YzM1ODc2eF9jbGllbnQtPmRldiwgIiVzOiBzdGF0ZSAlZFxuIiwgX19mdW5jX18s IHN0YXRlKTsKLQotCWlmICghYnJpZGdlX3Jlc2V0KQotCQlyZXR1cm47Ci0KLQlpZiAoc3RhdGUp IHsKLQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGJyaWRnZV9yZXNldCwgMCk7Ci0JCW1kZWxh eSgxMCk7Ci0JfSBlbHNlIHsKLQkJLyogUHVsbCBNSVBJIEJyaWRnZSByZXNldCBwaW4gdG8gTG93 ICovCi0JCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChicmlkZ2VfcmVzZXQsIDApOwotCQltZGVs YXkoMjApOwotCQkvKiBQdWxsIE1JUEkgQnJpZGdlIHJlc2V0IHBpbiB0byBIaWdoICovCi0JCWdw aW9kX3NldF92YWx1ZV9jYW5zbGVlcChicmlkZ2VfcmVzZXQsIDEpOwotCQltZGVsYXkoNDApOwot CX0KLX0KLQotdm9pZCB0YzM1ODc2eF9jb25maWd1cmVfbHZkc19icmlkZ2Uoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gdGMzNTg3NnhfY2xpZW50 OwotCXUzMiBwcGlfbHB0eHRpbWVjbnQ7Ci0JdTMyIHR4dGFnb2NudDsKLQl1MzIgdHh0YXN1cmVj bnQ7Ci0JdTMyIGlkOwotCi0JaWYgKFdBUk4oIXRjMzU4NzZ4X2NsaWVudCwgIiVzIGNhbGxlZCBi ZWZvcmUgcHJvYmUiLCBfX2Z1bmNfXykpCi0JCXJldHVybjsKLQotCWRldl9kYmcoJnRjMzU4NzZ4 X2NsaWVudC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmICghdGMzNTg3NnhfcmVncihp MmMsIElEUkVHLCAmaWQpKQotCQlkZXZfaW5mbygmdGMzNTg3NnhfY2xpZW50LT5kZXYsICJ0YzM1 ODc2eCBJRCAweCUwOHhcbiIsIGlkKTsKLQllbHNlCi0JCWRldl9lcnIoJnRjMzU4NzZ4X2NsaWVu dC0+ZGV2LCAiQ2Fubm90IHJlYWQgSURcbiIpOwotCi0JcHBpX2xwdHh0aW1lY250ID0gNDsKLQl0 eHRhZ29jbnQgPSAoNSAqIHBwaV9scHR4dGltZWNudCAtIDMpIC8gNDsKLQl0eHRhc3VyZWNudCA9 IDMgKiBwcGlfbHB0eHRpbWVjbnQgLyAyOwotCXRjMzU4NzZ4X3JlZ3coaTJjLCBQUElfVFhfUlhf VEEsIEZMRF9WQUwodHh0YWdvY250LCAyNiwgMTYpIHwKLQkJRkxEX1ZBTCh0eHRhc3VyZWNudCwg MTAsIDApKTsKLQl0YzM1ODc2eF9yZWd3KGkyYywgUFBJX0xQVFhUSU1FQ05ULCBGTERfVkFMKHBw aV9scHR4dGltZWNudCwgMTAsIDApKTsKLQotCXRjMzU4NzZ4X3JlZ3coaTJjLCBQUElfRDBTX0NM UlNJUE9DT1VOVCwgRkxEX1ZBTCgxLCA1LCAwKSk7Ci0JdGMzNTg3NnhfcmVndyhpMmMsIFBQSV9E MVNfQ0xSU0lQT0NPVU5ULCBGTERfVkFMKDEsIDUsIDApKTsKLQl0YzM1ODc2eF9yZWd3KGkyYywg UFBJX0QyU19DTFJTSVBPQ09VTlQsIEZMRF9WQUwoMSwgNSwgMCkpOwotCXRjMzU4NzZ4X3JlZ3co aTJjLCBQUElfRDNTX0NMUlNJUE9DT1VOVCwgRkxEX1ZBTCgxLCA1LCAwKSk7Ci0KLQkvKiBFbmFi bGluZyBNSVBJICYgUFBJIGxhbmVzLCBFbmFibGUgNCBsYW5lcyAqLwotCXRjMzU4NzZ4X3JlZ3co aTJjLCBQUElfTEFORUVOQUJMRSwKLQkJQklUKDQpIHwgQklUKDMpIHwgQklUKDIpIHwgQklUKDEp IHwgQklUKDApKTsKLQl0YzM1ODc2eF9yZWd3KGkyYywgRFNJX0xBTkVFTkFCTEUsCi0JCUJJVCg0 KSB8IEJJVCgzKSB8IEJJVCgyKSB8IEJJVCgxKSB8IEJJVCgwKSk7Ci0JdGMzNTg3NnhfcmVndyhp MmMsIFBQSV9TVEFSVFBQSSwgQklUKDApKTsKLQl0YzM1ODc2eF9yZWd3KGkyYywgRFNJX1NUQVJU RFNJLCBCSVQoMCkpOwotCi0JLyogU2V0dGluZyBMVkRTIG91dHB1dCBmcmVxdWVuY3kgKi8KLQl0 YzM1ODc2eF9yZWd3KGkyYywgTFZQSFkwLCBGTERfVkFMKDEsIDIwLCAxNikgfAotCQlGTERfVkFM KDIsIDE1LCAxNCkgfCBGTERfVkFMKDYsIDQsIDApKTsgLyogMHgwMDA0ODAwNiAqLwotCi0JLyog U2V0dGluZyB2aWRlbyBwYW5lbCBjb250cm9sIHJlZ2lzdGVyLDB4MDAwMDAxMjAgVlRHZW49T04g PyE/IT8gKi8KLQl0YzM1ODc2eF9yZWd3KGkyYywgVlBDVFJMLCBCSVQoOCkgfCBCSVQoNSkpOwot Ci0JLyogSG9yaXpvbnRhbCBiYWNrIHBvcmNoIGFuZCBob3Jpem9udGFsIHB1bHNlIHdpZHRoLiAw eDAwMjgwMDI4ICovCi0JdGMzNTg3NnhfcmVndyhpMmMsIEhUSU0xLCBGTERfVkFMKDQwLCAyNCwg MTYpIHwgRkxEX1ZBTCg0MCwgOCwgMCkpOwotCi0JLyogSG9yaXpvbnRhbCBmcm9udCBwb3JjaCBh bmQgaG9yaXpvbnRhbCBhY3RpdmUgdmlkZW8gc2l6ZS4gMHgwMDUwMDUwMCovCi0JdGMzNTg3Nnhf cmVndyhpMmMsIEhUSU0yLCBGTERfVkFMKDgwLCAyNCwgMTYpIHwgRkxEX1ZBTCgxMjgwLCAxMCwg MCkpOwotCi0JLyogVmVydGljYWwgYmFjayBwb3JjaCBhbmQgdmVydGljYWwgc3luYyBwdWxzZSB3 aWR0aC4gMHgwMDBlMDAwYSAqLwotCXRjMzU4NzZ4X3JlZ3coaTJjLCBWVElNMSwgRkxEX1ZBTCgx NCwgMjMsIDE2KSB8IEZMRF9WQUwoMTAsIDcsIDApKTsKLQotCS8qIFZlcnRpY2FsIGZyb250IHBv cmNoIGFuZCB2ZXJ0aWNhbCBkaXNwbGF5IHNpemUuIDB4MDAwZTAzMjAgKi8KLQl0YzM1ODc2eF9y ZWd3KGkyYywgVlRJTTIsIEZMRF9WQUwoMTQsIDIzLCAxNikgfCBGTERfVkFMKDgwMCwgMTAsIDAp KTsKLQotCS8qIFNldCBhYm92ZSBIVElNMSwgSFRJTTIsIFZUSU0xLCBhbmQgVlRJTTIgYXQgbmV4 dCBWU1lOQy4gKi8KLQl0YzM1ODc2eF9yZWd3KGkyYywgVkZVRU4sIEJJVCgwKSk7Ci0KLQkvKiBT b2Z0IHJlc2V0IExDRCBjb250cm9sbGVyLiAqLwotCXRjMzU4NzZ4X3JlZ3coaTJjLCBTWVNSU1Qs IEJJVCgyKSk7Ci0KLQkvKiBMVkRTLVRYIGlucHV0IG11eGluZyAqLwotCXRjMzU4NzZ4X3JlZ3co aTJjLCBMVk1YMDAwMywKLQkJSU5QVVRfTVVYKElOUFVUX1I1LCBJTlBVVF9SNCwgSU5QVVRfUjMs IElOUFVUX1IyKSk7Ci0JdGMzNTg3NnhfcmVndyhpMmMsIExWTVgwNDA3LAotCQlJTlBVVF9NVVgo SU5QVVRfRzIsIElOUFVUX1I3LCBJTlBVVF9SMSwgSU5QVVRfUjYpKTsKLQl0YzM1ODc2eF9yZWd3 KGkyYywgTFZNWDA4MTEsCi0JCUlOUFVUX01VWChJTlBVVF9HMSwgSU5QVVRfRzAsIElOUFVUX0c0 LCBJTlBVVF9HMykpOwotCXRjMzU4NzZ4X3JlZ3coaTJjLCBMVk1YMTIxNSwKLQkJSU5QVVRfTVVY KElOUFVUX0IyLCBJTlBVVF9HNywgSU5QVVRfRzYsIElOUFVUX0c1KSk7Ci0JdGMzNTg3NnhfcmVn dyhpMmMsIExWTVgxNjE5LAotCQlJTlBVVF9NVVgoSU5QVVRfQjQsIElOUFVUX0IzLCBJTlBVVF9C MSwgSU5QVVRfQjApKTsKLQl0YzM1ODc2eF9yZWd3KGkyYywgTFZNWDIwMjMsCi0JCUlOUFVUX01V WChMT0dJQ18wLCAgSU5QVVRfQjcsIElOUFVUX0I2LCBJTlBVVF9CNSkpOwotCXRjMzU4NzZ4X3Jl Z3coaTJjLCBMVk1YMjQyNywKLQkJSU5QVVRfTVVYKElOUFVUX1IwLCBJTlBVVF9ERSwgSU5QVVRf VlNZTkMsIElOUFVUX0hTWU5DKSk7Ci0KLQkvKiBFbmFibGUgTFZEUyB0cmFuc21pdHRlci4gKi8K LQl0YzM1ODc2eF9yZWd3KGkyYywgTFZDRkcsIEJJVCgwKSk7Ci0KLQkvKiBDbGVhciBub3RpZmlj YXRpb25zLiBEb24ndCB3cml0ZSByZXNlcnZlZCBiaXRzLiBXYXMgd3JpdGUgMHhmZmZmZmZmZgot CSAqIHRvIDB4MDI4OCwgbXVzdCBiZSBpbiBlcnJvcj8hICovCi0JdGMzNTg3NnhfcmVndyhpMmMs IERTSV9JTlRDTFIsIEZMRF9NQVNLKDMxLCAzMCkgfCBGTERfTUFTSygyMiwgMCkpOwotfQotCi0j ZGVmaW5lIEdQSU9QV01DVFJMCTB4MzhGCi0jZGVmaW5lIFBXTTBDTEtESVYwCTB4NjIgLyogbG93 IGJ5dGUgKi8KLSNkZWZpbmUgUFdNMENMS0RJVjEJMHg2MSAvKiBoaWdoIGJ5dGUgKi8KLQotI2Rl ZmluZSBTWVNURU1DTEsJMTkyMDAwMDBVTCAvKiAxOS4yIE1IeiAqLwotI2RlZmluZSBQV01fRlJF UVVFTkNZCTk2MDAgLyogSHogKi8KLQotLyogZiA9IGJhc2VjbGsgLyAoY2xrZGl2ICsgMSkgPT4g Y2xrZGl2ID0gKGJhc2VjbGsgLSBmKSAvIGYgKi8KLXN0YXRpYyBpbmxpbmUgdTE2IGNhbGNfY2xr ZGl2KHVuc2lnbmVkIGxvbmcgYmFzZWNsaywgdW5zaWduZWQgaW50IGYpCi17Ci0JcmV0dXJuIChi YXNlY2xrIC0gZikgLyBmOwotfQotCi1zdGF0aWMgdm9pZCB0YzM1ODc2eF9icmlnaHRuZXNzX2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0OwotCXU4IHB3bWN0cmw7Ci0J dTE2IGNsa2RpdjsKLQotCS8qIE1ha2Ugc3VyZSB0aGUgUFdNIHJlZmVyZW5jZSBpcyB0aGUgMTku MiBNSHogc3lzdGVtIGNsb2NrLiBSZWFkIGZpcnN0Ci0JICogaW5zdGVhZCBvZiBzZXR0aW5nIGRp cmVjdGx5IHRvIGNhdGNoIHBvdGVudGlhbCBjb25mbGljdHMgYmV0d2VlbiBQV00KLQkgKiB1c2Vy cy4gKi8KLQlyZXQgPSBpbnRlbF9zY3VfaXBjX2lvcmVhZDgoR1BJT1BXTUNUUkwsICZwd21jdHJs KTsKLQlpZiAocmV0IHx8IHB3bWN0cmwgIT0gMHgwMSkgewotCQlpZiAocmV0KQotCQkJZGV2X2Vy cihkZXYtPmRldiwgIkdQSU9QV01DVFJMIHJlYWQgZmFpbGVkXG4iKTsKLQkJZWxzZQotCQkJZGV2 X3dhcm4oZGV2LT5kZXYsICJHUElPUFdNQ1RSTCB3YXMgbm90IHNldCB0byBzeXN0ZW0gY2xvY2sg KHB3bWN0cmwgPSAweCUwMngpXG4iLCBwd21jdHJsKTsKLQotCQlyZXQgPSBpbnRlbF9zY3VfaXBj X2lvd3JpdGU4KEdQSU9QV01DVFJMLCAweDAxKTsKLQkJaWYgKHJldCkKLQkJCWRldl9lcnIoZGV2 LT5kZXYsICJHUElPUFdNQ1RSTCBzZXQgZmFpbGVkXG4iKTsKLQl9Ci0KLQljbGtkaXYgPSBjYWxj X2Nsa2RpdihTWVNURU1DTEssIFBXTV9GUkVRVUVOQ1kpOwotCi0JcmV0ID0gaW50ZWxfc2N1X2lw Y19pb3dyaXRlOChQV00wQ0xLRElWMSwgKGNsa2RpdiA+PiA4KSAmIDB4ZmYpOwotCWlmICghcmV0 KQotCQlyZXQgPSBpbnRlbF9zY3VfaXBjX2lvd3JpdGU4KFBXTTBDTEtESVYwLCBjbGtkaXYgJiAw eGZmKTsKLQotCWlmIChyZXQpCi0JCWRldl9lcnIoZGV2LT5kZXYsICJQV00wQ0xLRElWIHNldCBm YWlsZWRcbiIpOwotCWVsc2UKLQkJZGV2X2RiZyhkZXYtPmRldiwgIlBXTTBDTEtESVYgc2V0IHRv IDB4JTA0eCAoJWQgSHopXG4iLAotCQkJY2xrZGl2LCBQV01fRlJFUVVFTkNZKTsKLX0KLQotI2Rl ZmluZSBQV00wRFVUWUNZQ0xFCQkJMHg2NwotCi12b2lkIHRjMzU4NzZ4X2JyaWdodG5lc3NfY29u dHJvbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgbGV2ZWwpCi17Ci0JaW50IHJldDsKLQl1 OCBkdXR5X3ZhbDsKLQl1OCBwYW5lbF9kdXR5X3ZhbDsKLQotCWxldmVsID0gY2xhbXAobGV2ZWws IDAsIE1ERkxEX0RTSV9CUklHSFRORVNTX01BWF9MRVZFTCk7Ci0KLQkvKiBQV00gZHV0eSBjeWNs ZSAweDAwLi4uMHg2MyBjb3JyZXNwb25kcyB0byAwLi4uOTklICovCi0JZHV0eV92YWwgPSBsZXZl bCAqIDB4NjMgLyBNREZMRF9EU0lfQlJJR0hUTkVTU19NQVhfTEVWRUw7Ci0KLQkvKiBJIHdvbid0 IHByZXRlbmQgdG8gdW5kZXJzdGFuZCB0aGlzIGZvcm11bGEuIFRoZSBwYW5lbCBzcGVjIGlzIHF1 aXRlCi0JICogYmFkIGVuZ3Jpc2guCi0JICovCi0JcGFuZWxfZHV0eV92YWwgPSAoMiAqIGxldmVs IC0gMTAwKSAqIDB4QTkgLwotCQkJIE1ERkxEX0RTSV9CUklHSFRORVNTX01BWF9MRVZFTCArIDB4 NTY7Ci0KLQlyZXQgPSBpbnRlbF9zY3VfaXBjX2lvd3JpdGU4KFBXTTBEVVRZQ1lDTEUsIGR1dHlf dmFsKTsKLQlpZiAocmV0KQotCQlkZXZfZXJyKCZ0YzM1ODc2eF9jbGllbnQtPmRldiwgIiVzOiBp cGMgd3JpdGUgZmFpbFxuIiwKLQkJCV9fZnVuY19fKTsKLQotCWlmIChjbWlfbGNkX2kyY19jbGll bnQpIHsKLQkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbWlfbGNkX2kyY19jbGll bnQsCi0JCQkJCQlQQU5FTF9QV01fTUFYLCBwYW5lbF9kdXR5X3ZhbCk7Ci0JCWlmIChyZXQgPCAw KQotCQkJZGV2X2VycigmY21pX2xjZF9pMmNfY2xpZW50LT5kZXYsICIlczogaTJjIHdyaXRlIGZh aWxlZFxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JfQotfQotCi12b2lkIHRjMzU4NzZ4X3Rvc2hpYmFf YnJpZGdlX3BhbmVsX29mZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCWlmIChXQVJOKCF0 YzM1ODc2eF9jbGllbnQsICIlcyBjYWxsZWQgYmVmb3JlIHByb2JlIiwgX19mdW5jX18pKQotCQly ZXR1cm47Ci0KLQlkZXZfZGJnKCZ0YzM1ODc2eF9jbGllbnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNf Xyk7Ci0KLQlpZiAoYnJpZGdlX2JsX2VuYWJsZSkKLQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVw KGJyaWRnZV9ibF9lbmFibGUsIDApOwotCi0JaWYgKGJhY2tsaWdodF92b2x0YWdlKQotCQlncGlv ZF9zZXRfdmFsdWVfY2Fuc2xlZXAoYmFja2xpZ2h0X3ZvbHRhZ2UsIDApOwotfQotCi12b2lkIHRj MzU4NzZ4X3Rvc2hpYmFfYnJpZGdlX3BhbmVsX29uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17 Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwot Ci0JaWYgKFdBUk4oIXRjMzU4NzZ4X2NsaWVudCwgIiVzIGNhbGxlZCBiZWZvcmUgcHJvYmUiLCBf X2Z1bmNfXykpCi0JCXJldHVybjsKLQotCWRldl9kYmcoJnRjMzU4NzZ4X2NsaWVudC0+ZGV2LCAi JXNcbiIsIF9fZnVuY19fKTsKLQotCWlmIChiYWNrbGlnaHRfdm9sdGFnZSkgewotCQlncGlvZF9z ZXRfdmFsdWVfY2Fuc2xlZXAoYmFja2xpZ2h0X3ZvbHRhZ2UsIDEpOwotCQltc2xlZXAoMjYwKTsK LQl9Ci0KLQlpZiAoY21pX2xjZF9pMmNfY2xpZW50KSB7Ci0JCWludCByZXQ7Ci0JCWRldl9kYmco JmNtaV9sY2RfaTJjX2NsaWVudC0+ZGV2LCAic2V0dGluZyBUQ09OXG4iKTsKLQkJLyogQml0IDQg aXMgYXZlcmFnZV9zYXZpbmcuIFNldHRpbmcgaXQgdG8gMSwgdGhlIGJyaWdodG5lc3MgaXMKLQkJ ICogcmVmZXJlbmNlZCB0byB0aGUgYXZlcmFnZSBvZiB0aGUgZnJhbWUgY29udGVudC4gMCBtZWFu cwotCQkgKiByZWZlcmVuY2UgdG8gdGhlIG1heGltdW0gb2YgZnJhbWUgY29udGVudHMuIEJpdHMg MzowIGFyZQotCQkgKiBhbGxvd19kaXN0b3J0LiBXaGVuIHNldCB0byBhIG5vbnplcm8gdmFsdWUs IGFsbCBjb2xvciB2YWx1ZXMKLQkJICogYmV0d2VlbiAyNTUtYWxsb3dfZGlzdG9ydCoyIGFuZCAy NTUgYXJlIG1hcHBlZCB0byB0aGUKLQkJICogMjU1LWFsbG93X2Rpc3RvcnQqMiB2YWx1ZS4KLQkJ ICovCi0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY21pX2xjZF9pMmNfY2xpZW50 LAotCQkJCQkJUEFORUxfQUxMT1dfRElTVE9SVCwgMHgxMCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJ ZGV2X2VycigmY21pX2xjZF9pMmNfY2xpZW50LT5kZXYsCi0JCQkJImkyYyB3cml0ZSBmYWlsZWQg KCVkKVxuIiwgcmV0KTsKLQkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbWlfbGNk X2kyY19jbGllbnQsCi0JCQkJCQlQQU5FTF9CWVBBU1NfUFdNSSwgMCk7Ci0JCWlmIChyZXQgPCAw KQotCQkJZGV2X2VycigmY21pX2xjZF9pMmNfY2xpZW50LT5kZXYsCi0JCQkJImkyYyB3cml0ZSBm YWlsZWQgKCVkKVxuIiwgcmV0KTsKLQkJLyogU2V0IG1pbmltdW0gYnJpZ2h0bmVzcyB2YWx1ZSAt IHRoaXMgaXMgdHVuYWJsZSAqLwotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNt aV9sY2RfaTJjX2NsaWVudCwKLQkJCQkJCVBBTkVMX1BXTV9NSU4sIDB4MzUpOwotCQlpZiAocmV0 IDwgMCkKLQkJCWRldl9lcnIoJmNtaV9sY2RfaTJjX2NsaWVudC0+ZGV2LAotCQkJCSJpMmMgd3Jp dGUgZmFpbGVkICglZClcbiIsIHJldCk7Ci0JfQotCi0JaWYgKGJyaWRnZV9ibF9lbmFibGUpCi0J CWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChicmlkZ2VfYmxfZW5hYmxlLCAxKTsKLQotCXRjMzU4 NzZ4X2JyaWdodG5lc3NfY29udHJvbChkZXYsIGRldl9wcml2LT5icmlnaHRuZXNzX2FkanVzdGVk KTsKLX0KLQotc3RhdGljIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICp0YzM1ODc2eF9nZXRfY29u ZmlnX21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZTsKLQotCWRldl9kYmcoZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCi0J bW9kZSA9IGt6YWxsb2Moc2l6ZW9mKCptb2RlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtb2RlKQot CQlyZXR1cm4gTlVMTDsKLQotCS8qIEZJWE1FOiBkbyB0aGlzIHByb3Blcmx5LiAqLwotCW1vZGUt PmhkaXNwbGF5ID0gMTI4MDsKLQltb2RlLT52ZGlzcGxheSA9IDgwMDsKLQltb2RlLT5oc3luY19z dGFydCA9IDEzNjA7Ci0JbW9kZS0+aHN5bmNfZW5kID0gMTQwMDsKLQltb2RlLT5odG90YWwgPSAx NDQwOwotCW1vZGUtPnZzeW5jX3N0YXJ0ID0gODE0OwotCW1vZGUtPnZzeW5jX2VuZCA9IDgyNDsK LQltb2RlLT52dG90YWwgPSA4Mzg7Ci0JbW9kZS0+Y2xvY2sgPSAzMzMyNCA8PCAxOwotCi0JZGV2 X2luZm8oZGV2LT5kZXYsICJoZGlzcGxheSh3KSA9ICVkXG4iLCBtb2RlLT5oZGlzcGxheSk7Ci0J ZGV2X2luZm8oZGV2LT5kZXYsICJ2ZGlzcGxheShoKSA9ICVkXG4iLCBtb2RlLT52ZGlzcGxheSk7 Ci0JZGV2X2luZm8oZGV2LT5kZXYsICJIU1MgPSAlZFxuIiwgbW9kZS0+aHN5bmNfc3RhcnQpOwot CWRldl9pbmZvKGRldi0+ZGV2LCAiSFNFID0gJWRcbiIsIG1vZGUtPmhzeW5jX2VuZCk7Ci0JZGV2 X2luZm8oZGV2LT5kZXYsICJodG90YWwgPSAlZFxuIiwgbW9kZS0+aHRvdGFsKTsKLQlkZXZfaW5m byhkZXYtPmRldiwgIlZTUyA9ICVkXG4iLCBtb2RlLT52c3luY19zdGFydCk7Ci0JZGV2X2luZm8o ZGV2LT5kZXYsICJWU0UgPSAlZFxuIiwgbW9kZS0+dnN5bmNfZW5kKTsKLQlkZXZfaW5mbyhkZXYt PmRldiwgInZ0b3RhbCA9ICVkXG4iLCBtb2RlLT52dG90YWwpOwotCWRldl9pbmZvKGRldi0+ZGV2 LCAiY2xvY2sgPSAlZFxuIiwgbW9kZS0+Y2xvY2spOwotCi0JZHJtX21vZGVfc2V0X25hbWUobW9k ZSk7Ci0JZHJtX21vZGVfc2V0X2NydGNpbmZvKG1vZGUsIDApOwotCi0JbW9kZS0+dHlwZSB8PSBE Uk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKLQotCXJldHVybiBtb2RlOwotfQotCi0vKiBEVjEgQWN0 aXZlIGFyZWEgMjE2Ljk2IHggMTM1LjYgbW0gKi8KLSNkZWZpbmUgRFYxX1BBTkVMX1dJRFRIIDIx NwotI2RlZmluZSBEVjFfUEFORUxfSEVJR0hUIDEzNgotCi1zdGF0aWMgaW50IHRjMzU4NzZ4X2dl dF9wYW5lbF9pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlLAotCQkJCXN0cnVj dCBwYW5lbF9pbmZvICpwaSkKLXsKLQlpZiAoIWRldiB8fCAhcGkpCi0JCXJldHVybiAtRUlOVkFM OwotCi0JcGktPndpZHRoX21tID0gRFYxX1BBTkVMX1dJRFRIOwotCXBpLT5oZWlnaHRfbW0gPSBE VjFfUEFORUxfSEVJR0hUOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdGMzNTg3Nnhf YnJpZGdlX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkJY29uc3Qgc3RydWN0 IGkyY19kZXZpY2VfaWQgKmlkKQotewotCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIiVzXG4iLCBf X2Z1bmNfXyk7Ci0KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRl ciwgSTJDX0ZVTkNfSTJDKSkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiBpMmNfY2hl Y2tfZnVuY3Rpb25hbGl0eSgpIGZhaWxlZFxuIiwKLQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC1F Tk9ERVY7Ci0JfQotCi0JYnJpZGdlX3Jlc2V0ID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoJmNs aWVudC0+ZGV2LCAiYnJpZGdlLXJlc2V0IiwgR1BJT0RfT1VUX0xPVyk7Ci0JaWYgKElTX0VSUihi cmlkZ2VfcmVzZXQpKQotCQlyZXR1cm4gUFRSX0VSUihicmlkZ2VfcmVzZXQpOwotCWlmIChicmlk Z2VfcmVzZXQpCi0JCWdwaW9kX3NldF9jb25zdW1lcl9uYW1lKGJyaWRnZV9yZXNldCwgInRjMzU4 NzZ4IGJyaWRnZSByZXNldCIpOwotCi0JYnJpZGdlX2JsX2VuYWJsZSA9IGRldm1fZ3Bpb2RfZ2V0 X29wdGlvbmFsKCZjbGllbnQtPmRldiwgImJsLWVuIiwgR1BJT0RfT1VUX0xPVyk7Ci0JaWYgKElT X0VSUihicmlkZ2VfYmxfZW5hYmxlKSkKLQkJcmV0dXJuIFBUUl9FUlIoYnJpZGdlX2JsX2VuYWJs ZSk7Ci0JaWYgKGJyaWRnZV9ibF9lbmFibGUpCi0JCWdwaW9kX3NldF9jb25zdW1lcl9uYW1lKGJy aWRnZV9ibF9lbmFibGUsICJ0YzM1ODc2eCBwYW5lbCBibCBlbiIpOwotCi0JYmFja2xpZ2h0X3Zv bHRhZ2UgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbCgmY2xpZW50LT5kZXYsICJ2YWRkIiwgR1BJ T0RfT1VUX0xPVyk7Ci0JaWYgKElTX0VSUihiYWNrbGlnaHRfdm9sdGFnZSkpCi0JCXJldHVybiBQ VFJfRVJSKGJhY2tsaWdodF92b2x0YWdlKTsKLQlpZiAoYmFja2xpZ2h0X3ZvbHRhZ2UpCi0JCWdw aW9kX3NldF9jb25zdW1lcl9uYW1lKGJhY2tsaWdodF92b2x0YWdlLCAidGMzNTg3NnggcGFuZWwg dmFkZCIpOwotCi0JdGMzNTg3NnhfY2xpZW50ID0gY2xpZW50OwotCi0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBpbnQgdGMzNTg3NnhfYnJpZGdlX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xp ZW50KQotewotCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCXRj MzU4NzZ4X2NsaWVudCA9IE5VTEw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0 cnVjdCBpMmNfZGV2aWNlX2lkIHRjMzU4NzZ4X2JyaWRnZV9pZFtdID0gewotCXsgImkyY19kaXNw X2JyaWciLCAwIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRjMzU4NzZ4 X2JyaWRnZV9pZCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0YzM1ODc2eF9icmlkZ2Vf aTJjX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJpMmNfZGlzcF9icmlnIiwK LQl9LAotCS5pZF90YWJsZSA9IHRjMzU4NzZ4X2JyaWRnZV9pZCwKLQkucHJvYmUgPSB0YzM1ODc2 eF9icmlkZ2VfcHJvYmUsCi0JLnJlbW92ZSA9IHRjMzU4NzZ4X2JyaWRnZV9yZW1vdmUsCi19Owot Ci0vKiBMQ0QgcGFuZWwgSTJDICovCi1zdGF0aWMgaW50IGNtaV9sY2RfaTJjX3Byb2JlKHN0cnVj dCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lk ICppZCkKLXsKLQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCi0J aWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0ky QykpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogaTJjX2NoZWNrX2Z1bmN0aW9uYWxp dHkoKSBmYWlsZWRcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQot CWNtaV9sY2RfaTJjX2NsaWVudCA9IGNsaWVudDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMg aW50IGNtaV9sY2RfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWRl dl9kYmcoJmNsaWVudC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCWNtaV9sY2RfaTJjX2Ns aWVudCA9IE5VTEw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNf ZGV2aWNlX2lkIGNtaV9sY2RfaTJjX2lkW10gPSB7Ci0JeyAiY21pLWxjZCIsIDAgfSwKLQl7IH0K LX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgY21pX2xjZF9pMmNfaWQpOwotCi1zdGF0aWMg c3RydWN0IGkyY19kcml2ZXIgY21pX2xjZF9pMmNfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0J CS5uYW1lID0gImNtaS1sY2QiLAotCX0sCi0JLmlkX3RhYmxlID0gY21pX2xjZF9pMmNfaWQsCi0J LnByb2JlID0gY21pX2xjZF9pMmNfcHJvYmUsCi0JLnJlbW92ZSA9IGNtaV9sY2RfaTJjX3JlbW92 ZSwKLX07Ci0KLS8qIEhBQ0sgdG8gY3JlYXRlIEkyQyBkZXZpY2Ugd2hpbGUgaXQncyBub3QgY3Jl YXRlZCBieSBwbGF0Zm9ybSBjb2RlICovCi0jZGVmaW5lIENNSV9MQ0RfSTJDX0FEQVBURVIJMgot I2RlZmluZSBDTUlfTENEX0kyQ19BRERSCTB4NjAKLQotc3RhdGljIGludCBjbWlfbGNkX2hhY2tf Y3JlYXRlX2RldmljZSh2b2lkKQotewotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKLQlz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvID0g ewotCQkudHlwZSA9ICJjbWktbGNkIiwKLQkJLmFkZHIgPSBDTUlfTENEX0kyQ19BRERSLAotCX07 Ci0KLQlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKLQotCWFkYXB0ZXIgPSBpMmNfZ2V0X2Fk YXB0ZXIoQ01JX0xDRF9JMkNfQURBUFRFUik7Ci0JaWYgKCFhZGFwdGVyKSB7Ci0JCXByX2Vycigi JXM6IGkyY19nZXRfYWRhcHRlciglZCkgZmFpbGVkXG4iLCBfX2Z1bmNfXywKLQkJCUNNSV9MQ0Rf STJDX0FEQVBURVIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljbGllbnQgPSBpMmNfbmV3 X2NsaWVudF9kZXZpY2UoYWRhcHRlciwgJmluZm8pOwotCWlmIChJU19FUlIoY2xpZW50KSkgewot CQlwcl9lcnIoIiVzOiBjcmVhdGluZyBJMkMgZGV2aWNlIGZhaWxlZFxuIiwgX19mdW5jX18pOwot CQlpMmNfcHV0X2FkYXB0ZXIoYWRhcHRlcik7Ci0JCXJldHVybiBQVFJfRVJSKGNsaWVudCk7Ci0J fQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVs cGVyX2Z1bmNzIHRjMzU4NzZ4X2VuY29kZXJfaGVscGVyX2Z1bmNzID0gewotCS5kcG1zID0gbWRm bGRfZHNpX2RwaV9kcG1zLAotCS5tb2RlX2ZpeHVwID0gbWRmbGRfZHNpX2RwaV9tb2RlX2ZpeHVw LAotCS5wcmVwYXJlID0gbWRmbGRfZHNpX2RwaV9wcmVwYXJlLAotCS5tb2RlX3NldCA9IG1kZmxk X2RzaV9kcGlfbW9kZV9zZXQsCi0JLmNvbW1pdCA9IG1kZmxkX2RzaV9kcGlfY29tbWl0LAotfTsK LQotY29uc3Qgc3RydWN0IHBhbmVsX2Z1bmNzIG1kZmxkX3RjMzU4NzZ4X2Z1bmNzID0gewotCS5l bmNvZGVyX2hlbHBlcl9mdW5jcyA9ICZ0YzM1ODc2eF9lbmNvZGVyX2hlbHBlcl9mdW5jcywKLQku Z2V0X2NvbmZpZ19tb2RlID0gdGMzNTg3NnhfZ2V0X2NvbmZpZ19tb2RlLAotCS5nZXRfcGFuZWxf aW5mbyA9IHRjMzU4NzZ4X2dldF9wYW5lbF9pbmZvLAotfTsKLQotdm9pZCB0YzM1ODc2eF9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0JaW50IHI7Ci0KLQlkZXZfZGJnKGRldi0+ZGV2 LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCWNtaV9sY2RfaGFja19jcmVhdGVfZGV2aWNlKCk7Ci0K LQlyID0gaTJjX2FkZF9kcml2ZXIoJmNtaV9sY2RfaTJjX2RyaXZlcik7Ci0JaWYgKHIgPCAwKQot CQlkZXZfZXJyKGRldi0+ZGV2LAotCQkJIiVzOiBpMmNfYWRkX2RyaXZlcigpIGZvciAlcyBmYWls ZWQgKCVkKVxuIiwKLQkJCV9fZnVuY19fLCBjbWlfbGNkX2kyY19kcml2ZXIuZHJpdmVyLm5hbWUs IHIpOwotCi0JciA9IGkyY19hZGRfZHJpdmVyKCZ0YzM1ODc2eF9icmlkZ2VfaTJjX2RyaXZlcik7 Ci0JaWYgKHIgPCAwKQotCQlkZXZfZXJyKGRldi0+ZGV2LAotCQkJIiVzOiBpMmNfYWRkX2RyaXZl cigpIGZvciAlcyBmYWlsZWQgKCVkKVxuIiwKLQkJCV9fZnVuY19fLCB0YzM1ODc2eF9icmlkZ2Vf aTJjX2RyaXZlci5kcml2ZXIubmFtZSwgcik7Ci0KLQl0YzM1ODc2eF9icmlnaHRuZXNzX2luaXQo ZGV2KTsKLX0KLQotdm9pZCB0YzM1ODc2eF9leGl0KHZvaWQpCi17Ci0JcHJfZGVidWcoIiVzXG4i LCBfX2Z1bmNfXyk7Ci0KLQlpMmNfZGVsX2RyaXZlcigmdGMzNTg3NnhfYnJpZGdlX2kyY19kcml2 ZXIpOwotCi0JaWYgKGNtaV9sY2RfaTJjX2NsaWVudCkKLQkJaTJjX2RlbF9kcml2ZXIoJmNtaV9s Y2RfaTJjX2RyaXZlcik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3Rj MzU4NzZ4LWRzaS1sdmRzLmggYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3RjMzU4NzZ4LWRzaS1s dmRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNGI3ZjllN2QxZS4uMDAwMDAw MDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvdGMzNTg3NngtZHNpLWx2ZHMuaAor KysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAxMSBJ bnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICogcGFyYWdy YXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P TklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZ UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgot ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKLSAqIERFQUxJTkdTIElOIFRIRSBTT0ZU V0FSRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX01ERkxEX0RTSV9MVkRTX0JSSURHRV9IX18KLSNk ZWZpbmUgX19NREZMRF9EU0lfTFZEU19CUklER0VfSF9fCi0KLXZvaWQgdGMzNTg3Nnhfc2V0X2Jy aWRnZV9yZXNldF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgc3RhdGUpOwotdm9p ZCB0YzM1ODc2eF9jb25maWd1cmVfbHZkc19icmlkZ2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 Ci12b2lkIHRjMzU4NzZ4X2JyaWdodG5lc3NfY29udHJvbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCBpbnQgbGV2ZWwpOwotdm9pZCB0YzM1ODc2eF90b3NoaWJhX2JyaWRnZV9wYW5lbF9vZmYoc3Ry dWN0IGRybV9kZXZpY2UgKmRldik7Ci12b2lkIHRjMzU4NzZ4X3Rvc2hpYmFfYnJpZGdlX3BhbmVs X29uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotdm9pZCB0YzM1ODc2eF9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwotdm9pZCB0YzM1ODc2eF9leGl0KHZvaWQpOwotCi1leHRlcm4gY29u c3Qgc3RydWN0IHBhbmVsX2Z1bmNzIG1kZmxkX3RjMzU4NzZ4X2Z1bmNzOwotCi0jZW5kaWYgLypf X01ERkxEX0RTSV9MVkRTX0JSSURHRV9IX18qLwotLSAKMi4zMC4wCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK