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,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable 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 C7EB7C4361B for ; Fri, 11 Dec 2020 16:02:18 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 4566C23E21 for ; Fri, 11 Dec 2020 16:02:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4566C23E21 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=VCfwR2olUqZ5UUXb+ua9EjYn624noxBo+KbCifTpayw=; b=wJGPTS6qPY4uyzXvMDaiuN0Es QF18sQ8VIv1gSplTvHgOvg+v6afTboQqNtkmWXASiN0eBJHVJs80suESfWtvQVYgJpAw4RjwrfOhB 0lHgbP3ouhDxkdWt4LHiSA6w67mkirvYdK/geIO50zcNW3O+oCeIEUkTwHuzr6y3xE5EYUi+XGDN5 Uqum9ezTdW9CKOz5eskhMS+pYgP/DIh2loA/H8idx7QibsHLx4yEatWguvEEf6YEa5oUOqpvsdDSA APZR0MhTvCggo/C4SZOgF7LJjcST5vecZUXFSAmB5+3JTwM8xe6LE+slHb3CDT4LZ/2vtAL09GnD2 xhvMocodw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1knkqA-0001BL-QQ; Fri, 11 Dec 2020 16:00:19 +0000 Received: from relay3-d.mail.gandi.net ([217.70.183.195]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1knknt-0008OL-GK for linux-arm-kernel@lists.infradead.org; Fri, 11 Dec 2020 15:58:19 +0000 X-Originating-IP: 93.29.109.196 Received: from localhost.localdomain (196.109.29.93.rev.sfr.net [93.29.109.196]) (Authenticated sender: paul.kocialkowski@bootlin.com) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id C3D816001B; Fri, 11 Dec 2020 15:57:53 +0000 (UTC) From: Paul Kocialkowski To: linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, devel@driverdev.osuosl.org, linux-sunxi@googlegroups.com Subject: [PATCH v3 13/15] media: sunxi: Add support for the A83T MIPI CSI-2 controller Date: Fri, 11 Dec 2020 16:57:06 +0100 Message-Id: <20201211155708.154710-14-paul.kocialkowski@bootlin.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201211155708.154710-1-paul.kocialkowski@bootlin.com> References: <20201211155708.154710-1-paul.kocialkowski@bootlin.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201211_105757_899723_FF7292EC X-CRM114-Status: GOOD ( 33.36 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jernej Skrabec , Dafna Hirschfeld , Philipp Zabel , Jonathan Corbet , Thomas Petazzoni , Greg Kroah-Hartman , Helen Koike , Vinod Koul , Maxime Ripard , Kishon Vijay Abraham I , Paul Kocialkowski , Chen-Yu Tsai , Rob Herring , Hans Verkuil , Yong Deng , Sakari Ailus , Mauro Carvalho Chehab , kevin.lhopital@hotmail.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org VGhlIEE4M1Qgc3VwcG9ydHMgTUlQSSBDU0ktMiB3aXRoIGEgY29tcG9zaXRlIGNvbnRyb2xsZXIs IGNvdmVyaW5nCmJvdGggdGhlIHByb3RvY29sIGxvZ2ljIGFuZCB0aGUgRC1QSFkgaW1wbGVtZW50 YXRpb24uIFRoaXMgY29udHJvbGxlcgpzZWVtcyB0byBiZSBmb3VuZCBvbiB0aGUgQTgzVCBvbmx5 IGFuZCBwcm9iYWJseSB3YXMgYWJhbmRvbmVkIHNpbmNlLgoKVGhpcyBpbXBsZW1lbnRhdGlvbiBz cGxpdHMgdGhlIHByb3RvY29sIGFuZCBELVBIWSByZWdpc3RlcnMgYW5kCnVzZXMgdGhlIFBIWSBm cmFtZXdvcmsgaW50ZXJuYWxseS4gVGhlIEQtUEhZIGlzIG5vdCByZWdpc3RlcmVkIGFzIGEKc3Rh bmRhbG9uZSBQSFkgZHJpdmVyIHNpbmNlIGl0IGNhbm5vdCBiZSB1c2VkIHdpdGggYW55IG90aGVy CmNvbnRyb2xsZXIuCgpUaGVyZSBhcmUgYSBmZXcgbm90YWJsZSBwb2ludHMgYWJvdXQgdGhlIGNv bnRyb2xsZXI6Ci0gVGhlIGluaXRpYWxpc2F0aW9uIHNlcXVlbmNlIGludm9sZXMgd3JpdGluZyBz cGVjaWZpYyBtYWdpYyBpbml0CiAgdmFsdWVzIHRoYXQgZG8gbm90IHNlZW0gdG8gbWFrZSBhbnkg cGFydGljdWxhciBzZW5zZSBnaXZlbiB0aGUKICBjb25jZXJuZWQgcmVnaXN0ZXIgZmllbGRzOwot IEludGVycnVwdHMgYXBwZWFyIHRvIGJlIGhpdHRpbmcgcmVnYXJkbGVzcyBvZiB0aGUgaW50ZXJy dXB0IG1hc2sKICByZWdpc3RlcnMsIHdoaWNoIGNhbiBjYXVzZSBhIHNlcmlvdXMgZmxvb2Qgd2hl biB0cmFuc21pc3Npb24gZXJyb3JzCiAgb2NjdXIuCgpPbmx5IDgtYml0IGFuZCAxMC1iaXQgQmF5 ZXIgZm9ybWF0cyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4KV2hpbGUgdXAgdG8gNCBpbnRlcm5h bCBjaGFubmVscyB0byB0aGUgQ1NJIGNvbnRyb2xsZXIgZXhpc3QsIG9ubHkgb25lCmlzIGN1cnJl bnRseSBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4KClRoaXMgd29yayBpcyBiYXNl ZCBvbiB0aGUgZmlyc3QgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIHN1Ym1pdHRlZCBieQpLw6l2aW4g TCdow7RwaXRhbCwgd2hpY2ggd2FzIGFkYXB0ZWQgdG8gbWFpbmxpbmUgZnJvbSB0aGUgQWxsd2lu bmVyIEJTUC4KVGhpcyB2ZXJzaW9uIGludGVncmF0ZXMgTUlQSSBDU0ktMiBzdXBwb3J0IGFzIGEg c3RhbmRhbG9uZSBWNEwyIHN1YmRldgppbnN0ZWFkIG9mIG1lcmdpbmcgaXQgaW4gdGhlIHN1bjZp LWNzaSBkcml2ZXIuCgpJdCB3YXMgdGVzdGVkIG9uIGEgQmFuYW5hIFBpIE0zIGJvYXJkIHdpdGgg YW4gT1Y4ODY1IHNlbnNvciBpbiBhIDQtbGFuZQpjb25maWd1cmF0aW9uLgoKU2lnbmVkLW9mZi1i eTogUGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tpQGJvb3RsaW4uY29tPgotLS0K IGFyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWE4M3QtYmFuYW5hcGktbTMuZHRzICB8ICAgMiArLQog ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9LY29uZmlnICAgICAgICAgIHwgICAxICsKIGRy aXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvTWFrZWZpbGUgICAgICAgICB8ICAgMSArCiAuLi4v c3VueGkvc3VuOGktYTgzdC1taXBpLWNzaTIvS2NvbmZpZyAgICAgICAgfCAgMTEgKwogLi4uL3N1 bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2kyL01ha2VmaWxlICAgICAgIHwgICA0ICsKIC4uLi9zdW44 aS1hODN0LW1pcGktY3NpMi9zdW44aV9hODN0X2RwaHkuYyAgICB8ICA5MiArKysKIC4uLi9zdW44 aS1hODN0LW1pcGktY3NpMi9zdW44aV9hODN0X2RwaHkuaCAgICB8ICAzOSArKwogLi4uL3N1bjhp X2E4M3RfbWlwaV9jc2kyLmMgICAgICAgICAgICAgICAgICAgIHwgNjU3ICsrKysrKysrKysrKysr KysrKwogLi4uL3N1bjhpX2E4M3RfbWlwaV9jc2kyLmggICAgICAgICAgICAgICAgICAgIHwgMTk3 ICsrKysrKwogOSBmaWxlcyBjaGFuZ2VkLCAxMDAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24o LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjhp LWE4M3QtbWlwaS1jc2kyL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlh L3BsYXRmb3JtL3N1bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2kyL01ha2VmaWxlCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW44aS1hODN0LW1pcGktY3Np Mi9zdW44aV9hODN0X2RwaHkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vc3VueGkvc3VuOGktYTgzdC1taXBpLWNzaTIvc3VuOGlfYTgzdF9kcGh5LmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjhpLWE4M3QtbWlw aS1jc2kyL3N1bjhpX2E4M3RfbWlwaV9jc2kyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2kyL3N1bjhpX2E4M3RfbWlw aV9jc2kyLmgKCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW44aS1hODN0LWJhbmFu YXBpLW0zLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWE4M3QtYmFuYW5hcGktbTMuZHRz CmluZGV4IGI0MzdlYWViOTFlOS4uYmViZTg0M2EwNjliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9i b290L2R0cy9zdW44aS1hODN0LWJhbmFuYXBpLW0zLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0 cy9zdW44aS1hODN0LWJhbmFuYXBpLW0zLmR0cwpAQCAtMTUxLDcgKzE1MSw3IEBAIHBvcnRAMSB7 CiAKIAkJCWNzaV9pbl9taXBpX2NzaTI6IGVuZHBvaW50IHsKIAkJCQlyZW1vdGUtZW5kcG9pbnQg PSA8Jm1pcGlfY3NpMl9vdXRfY3NpPjsKLQkJCX0KKwkJCX07CiAJCX07CiAJfTsKIH07CmRpZmYg LS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL0tjb25maWcgYi9kcml2ZXJzL21l ZGlhL3BsYXRmb3JtL3N1bnhpL0tjb25maWcKaW5kZXggOTY4NGUwNzQ1NGFkLi5kYjRjMDdiZTdl NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvS2NvbmZpZworKysg Yi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL0tjb25maWcKQEAgLTMsMyArMyw0IEBACiBz b3VyY2UgImRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNGktY3NpL0tjb25maWciCiBz b3VyY2UgImRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNmktY3NpL0tjb25maWciCiBz b3VyY2UgImRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNmktbWlwaS1jc2kyL0tjb25m aWciCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuOGktYTgzdC1taXBp LWNzaTIvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkv TWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL01ha2VmaWxlCmluZGV4IDg4 N2E3Y2FlOGZjYS4uOWFhMDFjYjAxODgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL3N1bnhpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvTWFr ZWZpbGUKQEAgLTMsNSArMyw2IEBACiBvYmoteQkJKz0gc3VuNGktY3NpLwogb2JqLXkJCSs9IHN1 bjZpLWNzaS8KIG9iai15CQkrPSBzdW42aS1taXBpLWNzaTIvCitvYmoteQkJKz0gc3VuOGktYTgz dC1taXBpLWNzaTIvCiBvYmoteQkJKz0gc3VuOGktZGkvCiBvYmoteQkJKz0gc3VuOGktcm90YXRl LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW44aS1hODN0LW1p cGktY3NpMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW44aS1hODN0 LW1pcGktY3NpMi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uNjBlN2E5YzQxMDY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9zdW54aS9zdW44aS1hODN0LW1pcGktY3NpMi9LY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKKyMg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorY29uZmlnIFZJREVPX1NVTjhJ X0E4M1RfTUlQSV9DU0kyCisJdHJpc3RhdGUgIkFsbHdpbm5lciBBODNUIE1JUEkgQ1NJLTIgQ29u dHJvbGxlciBhbmQgRC1QSFkgRHJpdmVyIgorCWRlcGVuZHMgb24gQVJDSF9TVU5YSSB8fCBDT01Q SUxFX1RFU1QKKwlkZXBlbmRzIG9uIFBNICYmIENPTU1PTl9DTEsgJiYgVklERU9fVjRMMgorCXNl bGVjdCBSRUdNQVBfTU1JTworCXNlbGVjdCBNRURJQV9DT05UUk9MTEVSCisJc2VsZWN0IFZJREVP X1Y0TDJfU1VCREVWX0FQSQorCXNlbGVjdCBWNEwyX0ZXTk9ERQorCWhlbHAKKwkgICBTdXBwb3J0 IGZvciB0aGUgQWxsd2lubmVyIEE4M1QgTUlQSSBDU0ktMiBDb250cm9sbGVyIGFuZCBELVBIWS4K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuOGktYTgzdC1taXBp LWNzaTIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjhpLWE4M3Qt bWlwaS1jc2kyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uMTQyN2QxNWE4NzlhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9zdW54aS9zdW44aS1hODN0LW1pcGktY3NpMi9NYWtlZmlsZQpAQCAtMCwwICsxLDQgQEAKKyMg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorc3VuOGktYTgzdC1taXBpLWNz aTIteSArPSBzdW44aV9hODN0X21pcGlfY3NpMi5vIHN1bjhpX2E4M3RfZHBoeS5vCisKK29iai0k KENPTkZJR19WSURFT19TVU44SV9BODNUX01JUElfQ1NJMikgKz0gc3VuOGktYTgzdC1taXBpLWNz aTIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW44aS1hODN0 LW1pcGktY3NpMi9zdW44aV9hODN0X2RwaHkuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3Vu eGkvc3VuOGktYTgzdC1taXBpLWNzaTIvc3VuOGlfYTgzdF9kcGh5LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jMzgwMDY1ZWI3YzkKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2kyL3N1bjhp X2E4M3RfZHBoeS5jCkBAIC0wLDAgKzEsOTIgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wKworLyoKKyAqIENvcHlyaWdodCAyMDIwIEJvb3RsaW4KKyAqIEF1dGhvcjogUGF1 bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tpQGJvb3RsaW4uY29tPgorICovCisKKyNp bmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNp bmNsdWRlICJzdW44aV9hODN0X2RwaHkuaCIKKyNpbmNsdWRlICJzdW44aV9hODN0X21pcGlfY3Np Mi5oIgorCitzdGF0aWMgaW50IHN1bjhpX2E4M3RfZHBoeV9zZXRfbW9kZShzdHJ1Y3QgcGh5ICpk cGh5LCBlbnVtIHBoeV9tb2RlIG1vZGUsCisJCQkJICAgIGludCBzdWJtb2RlKQoreworCWlmICht b2RlICE9IFBIWV9NT0RFX01JUElfRFBIWSB8fAorCSAgICBzdWJtb2RlICE9IFBIWV9NSVBJX0RQ SFlfU1VCTU9ERV9SWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK307CisKK3N0 YXRpYyBpbnQgc3VuOGlfYTgzdF9kcGh5X2NvbmZpZ3VyZShzdHJ1Y3QgcGh5ICpkcGh5LAorCQkJ CSAgICAgdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBzdW44aV9h ODN0X21pcGlfY3NpMl9kZXYgKmNkZXYgPSBwaHlfZ2V0X2RydmRhdGEoZHBoeSk7CisJaW50IHJl dDsKKworCXJldCA9IHBoeV9taXBpX2RwaHlfY29uZmlnX3ZhbGlkYXRlKCZvcHRzLT5taXBpX2Rw aHkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltZW1jcHkoJmNkZXYtPmRwaHlfY29u ZmlnLCBvcHRzLCBzaXplb2YoY2Rldi0+ZHBoeV9jb25maWcpKTsKKworCXJldHVybiAwOworfTsK Kworc3RhdGljIGludCBzdW44aV9hODN0X2RwaHlfcG93ZXJfb24oc3RydWN0IHBoeSAqZHBoeSkK K3sKKwlzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2ICpjZGV2ID0gcGh5X2dldF9kcnZk YXRhKGRwaHkpOworCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGNkZXYtPnJlZ21hcDsKKworCXJl Z21hcF93cml0ZShyZWdtYXAsIFNVTjhJX0E4M1RfRFBIWV9DVFJMX1JFRywKKwkJICAgICBTVU44 SV9BODNUX0RQSFlfQ1RSTF9SRVNFVF9OIHwKKwkJICAgICBTVU44SV9BODNUX0RQSFlfQ1RSTF9T SFVURE9XTl9OKTsKKworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJX0E4M1RfRFBIWV9BTkEw X1JFRywKKwkJICAgICBTVU44SV9BODNUX0RQSFlfQU5BMF9SRVhUX0VOIHwKKwkJICAgICBTVU44 SV9BODNUX0RQSFlfQU5BMF9SSU5UKDIpIHwKKwkJICAgICBTVU44SV9BODNUX0RQSFlfQU5BMF9T TksoMikpOworCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50IHN1bjhpX2E4M3RfZHBoeV9w b3dlcl9vZmYoc3RydWN0IHBoeSAqZHBoeSkKK3sKKwlzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2Nz aTJfZGV2ICpjZGV2ID0gcGh5X2dldF9kcnZkYXRhKGRwaHkpOworCXN0cnVjdCByZWdtYXAgKnJl Z21hcCA9IGNkZXYtPnJlZ21hcDsKKworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJX0E4M1Rf RFBIWV9DVFJMX1JFRywgMCk7CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcGh5X29wcyBzdW44aV9hODN0X2RwaHlfb3BzID0geworCS5zZXRfbW9kZQk9IHN1bjhpX2E4 M3RfZHBoeV9zZXRfbW9kZSwKKwkuY29uZmlndXJlCT0gc3VuOGlfYTgzdF9kcGh5X2NvbmZpZ3Vy ZSwKKwkucG93ZXJfb24JPSBzdW44aV9hODN0X2RwaHlfcG93ZXJfb24sCisJLnBvd2VyX29mZgk9 IHN1bjhpX2E4M3RfZHBoeV9wb3dlcl9vZmYsCit9OworCitpbnQgc3VuOGlfYTgzdF9kcGh5X3Jl Z2lzdGVyKHN0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9kZXYgKmNkZXYpCit7CisJc3RydWN0 IHBoeV9wcm92aWRlciAqcGh5X3Byb3ZpZGVyOworCisJY2Rldi0+ZHBoeSA9IGRldm1fcGh5X2Ny ZWF0ZShjZGV2LT5kZXYsIE5VTEwsICZzdW44aV9hODN0X2RwaHlfb3BzKTsKKwlpZiAoSVNfRVJS KGNkZXYtPmRwaHkpKSB7CisJCWRldl9lcnIoY2Rldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBE LVBIWVxuIik7CisJCXJldHVybiBQVFJfRVJSKGNkZXYtPmRwaHkpOworCX0KKworCXBoeV9zZXRf ZHJ2ZGF0YShjZGV2LT5kcGh5LCBjZGV2KTsKKworCXBoeV9wcm92aWRlciA9IGRldm1fb2ZfcGh5 X3Byb3ZpZGVyX3JlZ2lzdGVyKGNkZXYtPmRldiwKKwkJCQkJCSAgICAgb2ZfcGh5X3NpbXBsZV94 bGF0ZSk7CisJaWYgKElTX0VSUihwaHlfcHJvdmlkZXIpKSB7CisJCWRldl9lcnIoY2Rldi0+ZGV2 LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIEQtUEhZIHByb3ZpZGVyXG4iKTsKKwkJcmV0dXJuIFBUUl9F UlIocGh5X3Byb3ZpZGVyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZl cnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuOGktYTgzdC1taXBpLWNzaTIvc3VuOGlfYTgzdF9k cGh5LmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2ky L3N1bjhpX2E4M3RfZHBoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uYTRlZDM1NWU1ZjZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9zdW54aS9zdW44aS1hODN0LW1pcGktY3NpMi9zdW44aV9hODN0X2RwaHkuaApAQCAtMCwwICsx LDM5IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgKi8KKy8qCisgKiBD b3B5cmlnaHQgMjAyMCBLw6l2aW4gTCdow7RwaXRhbCA8a2V2aW4ubGhvcGl0YWxAYm9vdGxpbi5j b20+CisgKiBDb3B5cmlnaHQgMjAyMCBCb290bGluCisgKiBBdXRob3I6IFBhdWwgS29jaWFsa293 c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBib290bGluLmNvbT4KKyAqLworCisjaWZuZGVmIF9fU1VO OElfQTgzVF9EUEhZX0hfXworI2RlZmluZSBfX1NVTjhJX0E4M1RfRFBIWV9IX18KKworI2luY2x1 ZGUgInN1bjhpX2E4M3RfbWlwaV9jc2kyLmgiCisKKyNkZWZpbmUgU1VOOElfQTgzVF9EUEhZX0NU UkxfUkVHCQkweDEwCisjZGVmaW5lIFNVTjhJX0E4M1RfRFBIWV9DVFJMX0lOSVRfVkFMVUUJCTB4 YjhkZjY5OGUKKyNkZWZpbmUgU1VOOElfQTgzVF9EUEhZX0NUUkxfUkVTRVRfTgkJQklUKDMxKQor I2RlZmluZSBTVU44SV9BODNUX0RQSFlfQ1RSTF9TSFVURE9XTl9OCQlCSVQoMTUpCisjZGVmaW5l IFNVTjhJX0E4M1RfRFBIWV9DVFJMX0RFQlVHCQlCSVQoOCkKKyNkZWZpbmUgU1VOOElfQTgzVF9E UEhZX1NUQVRVU19SRUcJCTB4MTQKKyNkZWZpbmUgU1VOOElfQTgzVF9EUEhZX1NUQVRVU19DTEtf U1RPUAkJQklUKDEwKQorI2RlZmluZSBTVU44SV9BODNUX0RQSFlfU1RBVFVTX0NMS19VTFBTCQlC SVQoOSkKKyNkZWZpbmUgU1VOOElfQTgzVF9EUEhZX1NUQVRVU19IU0NMSwkJQklUKDgpCisjZGVm aW5lIFNVTjhJX0E4M1RfRFBIWV9TVEFUVVNfRDNfU1RPUAkJQklUKDcpCisjZGVmaW5lIFNVTjhJ X0E4M1RfRFBIWV9TVEFUVVNfRDJfU1RPUAkJQklUKDYpCisjZGVmaW5lIFNVTjhJX0E4M1RfRFBI WV9TVEFUVVNfRDFfU1RPUAkJQklUKDUpCisjZGVmaW5lIFNVTjhJX0E4M1RfRFBIWV9TVEFUVVNf RDBfU1RPUAkJQklUKDQpCisjZGVmaW5lIFNVTjhJX0E4M1RfRFBIWV9TVEFUVVNfRDNfVUxQUwkJ QklUKDMpCisjZGVmaW5lIFNVTjhJX0E4M1RfRFBIWV9TVEFUVVNfRDJfVUxQUwkJQklUKDIpCisj ZGVmaW5lIFNVTjhJX0E4M1RfRFBIWV9TVEFUVVNfRDFfVUxQUwkJQklUKDEpCisjZGVmaW5lIFNV TjhJX0E4M1RfRFBIWV9TVEFUVVNfRDBfVUxQUwkJQklUKDApCisKKyNkZWZpbmUgU1VOOElfQTgz VF9EUEhZX0FOQTBfUkVHCQkweDMwCisjZGVmaW5lIFNVTjhJX0E4M1RfRFBIWV9BTkEwX1JFWFRf RU4JCUJJVCgzMSkKKyNkZWZpbmUgU1VOOElfQTgzVF9EUEhZX0FOQTBfUkVYVAkJQklUKDMwKQor I2RlZmluZSBTVU44SV9BODNUX0RQSFlfQU5BMF9SSU5UKHYpCQkoKCh2KSA8PCAyOCkgJiBHRU5N QVNLKDI5LCAyOCkpCisjZGVmaW5lIFNVTjhJX0E4M1RfRFBIWV9BTkEwX1NOSyh2KQkJKCgodikg PDwgMjApICYgR0VOTUFTSygyMiwgMjApKQorCitpbnQgc3VuOGlfYTgzdF9kcGh5X3JlZ2lzdGVy KHN0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9kZXYgKmNkZXYpOworCisjZW5kaWYgLyogX19T VU44SV9BODNUX0RQSFlfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L3N1bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2kyL3N1bjhpX2E4M3RfbWlwaV9jc2kyLmMgYi9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2kyL3N1bjhpX2E4M3Rf bWlwaV9jc2kyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jMjQ4 ZmViZTVjMGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhp L3N1bjhpLWE4M3QtbWlwaS1jc2kyL3N1bjhpX2E4M3RfbWlwaV9jc2kyLmMKQEAgLTAsMCArMSw2 NTcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyoKKyAqIENvcHly aWdodCAyMDIwIEvDqXZpbiBMJ2jDtHBpdGFsIDxrZXZpbi5saG9waXRhbEBib290bGluLmNvbT4K KyAqIENvcHlyaWdodCAyMDIwIEJvb3RsaW4KKyAqIEF1dGhvcjogUGF1bCBLb2NpYWxrb3dza2kg PHBhdWwua29jaWFsa293c2tpQGJvb3RsaW4uY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9j bGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5o PgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgv cmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwy LWN0cmxzLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRp YS92NGwyLWZ3bm9kZS5oPgorCisjaW5jbHVkZSAic3VuOGlfYTgzdF9kcGh5LmgiCisjaW5jbHVk ZSAic3VuOGlfYTgzdF9taXBpX2NzaTIuaCIKKworI2RlZmluZSBNT0RVTEVfTkFNRQkic3VuOGkt YTgzdC1taXBpLWNzaTIiCisKK3N0YXRpYyBjb25zdCB1MzIgc3VuOGlfYTgzdF9taXBpX2NzaTJf bWJ1c19jb2Rlc1tdID0geworCU1FRElBX0JVU19GTVRfU0JHR1I4XzFYOCwKKwlNRURJQV9CVVNf Rk1UX1NHQlJHOF8xWDgsCisJTUVESUFfQlVTX0ZNVF9TR1JCRzhfMVg4LAorCU1FRElBX0JVU19G TVRfU1JHR0I4XzFYOCwKKwlNRURJQV9CVVNfRk1UX1NCR0dSMTBfMVgxMCwKKwlNRURJQV9CVVNf Rk1UX1NHQlJHMTBfMVgxMCwKKwlNRURJQV9CVVNfRk1UX1NHUkJHMTBfMVgxMCwKKwlNRURJQV9C VVNfRk1UX1NSR0dCMTBfMVgxMCwKK307CisKKy8qIENvcmUgKi8KKworc3RhdGljIHZvaWQgc3Vu OGlfYTgzdF9taXBpX2NzaTJfaW5pdChzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2ICpj ZGV2KQoreworCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGNkZXYtPnJlZ21hcDsKKworCS8qCisJ ICogVGhlIEFsbHdpbm5lciBCU1Agc2V0cyB2YXJpb3VzIG1hZ2ljIHZhbHVlcyBvbiBhIGJ1bmNo IG9mIHJlZ2lzdGVycy4KKwkgKiBUaGlzIGlzIGFwcGFyZW50bHkgYSBuZWNlc3NhcnkgaW5pdGlh bGl6YXRpb24gcHJvY2VzcyB0aGF0IHdpbGwgY2F1c2UKKwkgKiB0aGUgY2FwdHVyZSB0byBmYWls IHdpdGggdW5zb2xpY2l0ZWQgaW50ZXJydXB0cyBoaXR0aW5nIGlmIHNraXBwZWQuCisJICoKKwkg KiBNb3N0IG9mIHRoZSByZWdpc3RlcnMgYXJlIHNldCB0byBwcm9wZXIgdmFsdWVzIGxhdGVyLCBl eGNlcHQgZm9yIHRoZQorCSAqIHR3byByZXNlcnZlZCByZWdpc3RlcnMuIFRoZXkgYXJlIHNhaWQg dG8gaG9sZCBhICJoYXJkd2FyZSBsb2NrIgorCSAqIHZhbHVlLCB3aXRob3V0IG1vcmUgaW5mb3Jt YXRpb24gYXZhaWxhYmxlLgorCSAqLworCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VOOElfQTgz VF9NSVBJX0NTSTJfQ1RSTF9SRUcsIDApOworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJX0E4 M1RfTUlQSV9DU0kyX0NUUkxfUkVHLAorCQkgICAgIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NUUkxf SU5JVF9WQUxVRSk7CisKKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBTVU44SV9BODNUX01JUElfQ1NJ Ml9SWF9QS1RfTlVNX1JFRywgMCk7CisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VOOElfQTgzVF9N SVBJX0NTSTJfUlhfUEtUX05VTV9SRUcsCisJCSAgICAgU1VOOElfQTgzVF9NSVBJX0NTSTJfUlhf UEtUX05VTV9JTklUX1ZBTFVFKTsKKworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJX0E4M1Rf RFBIWV9DVFJMX1JFRywgMCk7CisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VOOElfQTgzVF9EUEhZ X0NUUkxfUkVHLAorCQkgICAgIFNVTjhJX0E4M1RfRFBIWV9DVFJMX0lOSVRfVkFMVUUpOworCisJ cmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VOOElfQTgzVF9NSVBJX0NTSTJfUlNWRDFfUkVHLCAwKTsK KwlyZWdtYXBfd3JpdGUocmVnbWFwLCBTVU44SV9BODNUX01JUElfQ1NJMl9SU1ZEMV9SRUcsCisJ CSAgICAgU1VOOElfQTgzVF9NSVBJX0NTSTJfUlNWRDFfSFdfTE9DS19WQUxVRSk7CisKKwlyZWdt YXBfd3JpdGUocmVnbWFwLCBTVU44SV9BODNUX01JUElfQ1NJMl9SU1ZEMl9SRUcsIDApOworCXJl Z21hcF93cml0ZShyZWdtYXAsIFNVTjhJX0E4M1RfTUlQSV9DU0kyX1JTVkQyX1JFRywKKwkJICAg ICBTVU44SV9BODNUX01JUElfQ1NJMl9SU1ZEMl9IV19MT0NLX1ZBTFVFKTsKKworCXJlZ21hcF93 cml0ZShyZWdtYXAsIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19SRUcsIDApOworCXJlZ21hcF93 cml0ZShyZWdtYXAsIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19SRUcsCisJCSAgICAgU1VOOElf QTgzVF9NSVBJX0NTSTJfQ0ZHX0lOSVRfVkFMVUUpOworfQorCisvKiBWaWRlbyAqLworCitzdGF0 aWMgaW50IHN1bjhpX2E4M3RfbWlwaV9jc2kyX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAq c3ViZGV2LCBpbnQgb24pCit7CisJc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX3ZpZGVvICp2 aWRlbyA9CisJCXN1bjhpX2E4M3RfbWlwaV9jc2kyX3N1YmRldl92aWRlbyhzdWJkZXYpOworCXN0 cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9kZXYgKmNkZXYgPQorCQlzdW44aV9hODN0X21pcGlf Y3NpMl92aWRlb19kZXYodmlkZW8pOworCXN0cnVjdCB2NGwyX3N1YmRldiAqcmVtb3RlX3N1YmRl diA9IHZpZGVvLT5yZW1vdGVfc3ViZGV2OworCXN0cnVjdCB2NGwyX2Z3bm9kZV9idXNfbWlwaV9j c2kyICpidXNfbWlwaV9jc2kyID0KKwkJJnZpZGVvLT5lbmRwb2ludC5idXMubWlwaV9jc2kyOwor CXVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyBkcGh5X29wdHMgPSB7IDAgfTsKKwlzdHJ1Y3QgcGh5 X2NvbmZpZ3VyZV9vcHRzX21pcGlfZHBoeSAqZHBoeV9jZmcgPSAmZHBoeV9vcHRzLm1pcGlfZHBo eTsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBjZGV2LT5yZWdtYXA7CisJc3RydWN0IHY0bDJf Y3RybCAqY3RybDsKKwl1bnNpZ25lZCBpbnQgbGFuZXNfY291bnQ7CisJdW5zaWduZWQgaW50IGJw cDsKKwl1bnNpZ25lZCBsb25nIHBpeGVsX3JhdGU7CisJdTggZGF0YV90eXBlID0gMDsKKwl1MzIg dmVyc2lvbiA9IDA7CisJLyogSW5pdGlhbGl6ZSB0byAwIHRvIHVzZSBib3RoIGluIGRpc2FibGUg bGFiZWwgKHJldCAhPSAwKSBhbmQgb2ZmLiAqLworCWludCByZXQgPSAwOworCisJaWYgKCFyZW1v dGVfc3ViZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghb24pIHsKKwkJdjRsMl9zdWJk ZXZfY2FsbChyZW1vdGVfc3ViZGV2LCB2aWRlbywgc19zdHJlYW0sIDApOworCQlnb3RvIGRpc2Fi bGU7CisJfQorCisJc3dpdGNoICh2aWRlby0+bWJ1c19mb3JtYXQuY29kZSkgeworCWNhc2UgTUVE SUFfQlVTX0ZNVF9TQkdHUjhfMVg4OgorCWNhc2UgTUVESUFfQlVTX0ZNVF9TR0JSRzhfMVg4Ogor CWNhc2UgTUVESUFfQlVTX0ZNVF9TR1JCRzhfMVg4OgorCWNhc2UgTUVESUFfQlVTX0ZNVF9TUkdH QjhfMVg4OgorCQlkYXRhX3R5cGUgPSBNSVBJX0NTSTJfREFUQV9UWVBFX1JBVzg7CisJCWJwcCA9 IDg7CisJCWJyZWFrOworCWNhc2UgTUVESUFfQlVTX0ZNVF9TQkdHUjEwXzFYMTA6CisJY2FzZSBN RURJQV9CVVNfRk1UX1NHQlJHMTBfMVgxMDoKKwljYXNlIE1FRElBX0JVU19GTVRfU0dSQkcxMF8x WDEwOgorCWNhc2UgTUVESUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTA6CisJCWRhdGFfdHlwZSA9IE1J UElfQ1NJMl9EQVRBX1RZUEVfUkFXMTA7CisJCWJwcCA9IDEwOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBTZW5zb3IgcGl4ZWwgcmF0ZSAqLworCisJ Y3RybCA9IHY0bDJfY3RybF9maW5kKHJlbW90ZV9zdWJkZXYtPmN0cmxfaGFuZGxlciwgVjRMMl9D SURfUElYRUxfUkFURSk7CisJaWYgKCFjdHJsKSB7CisJCWRldl9lcnIoY2Rldi0+ZGV2LAorCQkJ IiVzOiBubyBNSVBJIENTSS0yIHBpeGVsIHJhdGUgZnJvbSB0aGUgc2Vuc29yXG4iLAorCQkJX19m dW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwaXhlbF9yYXRlID0gKHVuc2lnbmVk IGxvbmcpdjRsMl9jdHJsX2dfY3RybF9pbnQ2NChjdHJsKTsKKwlpZiAoIXBpeGVsX3JhdGUpIHsK KwkJZGV2X2VycihjZGV2LT5kZXYsCisJCQkiJXM6IHplcm8gTUlQSSBDU0ktMiBwaXhlbCByYXRl IGZyb20gdGhlIHNlbnNvclxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJ fQorCisJLyogUG93ZXIgbWFuYWdlbWVudCAqLworCisJcmV0ID0gcG1fcnVudGltZV9nZXRfc3lu YyhjZGV2LT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXBtX3J1bnRpbWVfcHV0X25vaWRsZShj ZGV2LT5kZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEQtUEhZIGNvbmZpZ3VyYXRpb24g Ki8KKworCWxhbmVzX2NvdW50ID0gYnVzX21pcGlfY3NpMi0+bnVtX2RhdGFfbGFuZXM7CisJcGh5 X21pcGlfZHBoeV9nZXRfZGVmYXVsdF9jb25maWcocGl4ZWxfcmF0ZSwgYnBwLCBsYW5lc19jb3Vu dCwKKwkJCQkJIGRwaHlfY2ZnKTsKKworCS8qCisJICogTm90ZSB0aGF0IG91ciBoYXJkd2FyZSBp cyB1c2luZyBERFIsIHdoaWNoIGlzIG5vdCB0YWtlbiBpbiBhY2NvdW50IGJ5CisJICogcGh5X21p cGlfZHBoeV9nZXRfZGVmYXVsdF9jb25maWcgd2hlbiBjYWxjdWxhdGluZyBoc19jbGtfcmF0ZSBm cm9tCisJICogdGhlIHBpeGVsIHJhdGUsIGxhbmVzIGNvdW50IGFuZCBicHAuCisJICoKKwkgKiBU aGUgcmVzdWx0aW5nIGNsb2NrIHJhdGUgaXMgYmFzaWNhbGx5IHRoZSBzeW1ib2wgcmF0ZSBvdmVy IHRoZSB3aG9sZQorCSAqIGxpbmsuIFRoZSBhY3R1YWwgY2xvY2sgcmF0ZSBpcyBjYWxjdWxhdGVk IHdpdGggZGl2aXNpb24gYnkgdHdvIHNpbmNlCisJICogRERSIHNhbXBsZXMgYm90aCBvbiByaXNp bmcgYW5kIGZhbGxpbmcgZWRnZXMuCisJICovCisKKwlkZXZfZGJnKGNkZXYtPmRldiwgIkE4M1Qg TUlQSSBDU0ktMiBjb25maWc6XG4iKTsKKwlkZXZfZGJnKGNkZXYtPmRldiwKKwkJIiVsZCBwaXhl bHMvcywgJXUgYml0cy9waXhlbCwgJXUgbGFuZXMsICVsdSBIeiBjbG9ja1xuIiwKKwkJcGl4ZWxf cmF0ZSwgYnBwLCBsYW5lc19jb3VudCwgZHBoeV9jZmctPmhzX2Nsa19yYXRlIC8gMik7CisKKwly ZXQgPSBwaHlfcmVzZXQoY2Rldi0+ZHBoeSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNkZXYt PmRldiwgImZhaWxlZCB0byByZXNldCBNSVBJIEQtUEhZXG4iKTsKKwkJZ290byBlcnJvcl9wbTsK Kwl9CisKKwlyZXQgPSBwaHlfc2V0X21vZGVfZXh0KGNkZXYtPmRwaHksIFBIWV9NT0RFX01JUElf RFBIWSwKKwkJCSAgICAgICBQSFlfTUlQSV9EUEhZX1NVQk1PREVfUlgpOworCWlmIChyZXQpIHsK KwkJZGV2X2VycihjZGV2LT5kZXYsICJmYWlsZWQgdG8gc2V0IE1JUEkgRC1QSFkgbW9kZVxuIik7 CisJCWdvdG8gZXJyb3JfcG07CisJfQorCisJcmV0ID0gcGh5X2NvbmZpZ3VyZShjZGV2LT5kcGh5 LCAmZHBoeV9vcHRzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoY2Rldi0+ZGV2LCAiZmFpbGVk IHRvIGNvbmZpZ3VyZSBNSVBJIEQtUEhZXG4iKTsKKwkJZ290byBlcnJvcl9wbTsKKwl9CisKKwly ZXQgPSBwaHlfcG93ZXJfb24oY2Rldi0+ZHBoeSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNk ZXYtPmRldiwgImZhaWxlZCB0byBwb3dlciBvbiBNSVBJIEQtUEhZXG4iKTsKKwkJZ290byBlcnJv cl9wbTsKKwl9CisKKwkvKiBNSVBJIENTSS0yIGNvbnRyb2xsZXIgc2V0dXAgKi8KKworCXJlZ21h cF93cml0ZShyZWdtYXAsIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NUUkxfUkVHLAorCQkgICAgIFNV TjhJX0E4M1RfTUlQSV9DU0kyX0NUUkxfUkVTRVRfTik7CisKKwlyZWdtYXBfcmVhZChyZWdtYXAs IFNVTjhJX0E4M1RfTUlQSV9DU0kyX1ZFUlNJT05fUkVHLCAmdmVyc2lvbik7CisKKwlkZXZfZGJn KGNkZXYtPmRldiwgIkE4M1QgTUlQSSBDU0ktMiB2ZXJzaW9uOiAlMDR4XG4iLCB2ZXJzaW9uKTsK KworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19SRUcsCisJ CSAgICAgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ0ZHX1VOUEtUX0VOIHwKKwkJICAgICBTVU44SV9B ODNUX01JUElfQ1NJMl9DRkdfU1lOQ19ETFlfQ1lDTEUoOCkgfAorCQkgICAgIFNVTjhJX0E4M1Rf TUlQSV9DU0kyX0NGR19OX0NIQU5ORUwoMSkgfAorCQkgICAgIFNVTjhJX0E4M1RfTUlQSV9DU0ky X0NGR19OX0xBTkUobGFuZXNfY291bnQpKTsKKworCS8qCisJICogT3VyIE1JUEkgQ1NJLTIgY29u dHJvbGxlciBoYXMgaW50ZXJuYWwgY2hhbm5lbHMgdGhhdCBjYW4gYmUKKwkgKiBjb25maWd1cmVk IHRvIG1hdGNoIGEgc3BlY2lmaWMgTUlQSSBDU0ktMiB2aXJ0dWFsIGNoYW5uZWwgYW5kL29yCisJ ICogYSBzcGVjaWZpYyBkYXRhIHR5cGUuIEVhY2ggaW50ZXJuYWwgY2hhbm5lbCBjYW4gYmUgcGlw ZWQgdG8gYW4KKwkgKiBpbnRlcm5hbCBjaGFubmVsIG9mIHRoZSBDU0kgY29udHJvbGxlci4KKwkg KgorCSAqIFdlIHNldCB2aXJ0dWFsIGNoYW5uZWwgbnVtYmVycyB0byBhbGwgY2hhbm5lbHMgdG8g bWFrZSBzdXJlIHRoYXQKKwkgKiB2aXJ0dWFsIGNoYW5uZWwgMCBnb2VzIHRvIENTSSBjaGFubmVs IDAgb25seS4KKwkgKi8KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBTVU44SV9BODNUX01JUElfQ1NJ Ml9WQ0RUMF9SRUcsCisJCSAgICAgU1VOOElfQTgzVF9NSVBJX0NTSTJfVkNEVDBfQ0hfVkMoMywg MykgfAorCQkgICAgIFNVTjhJX0E4M1RfTUlQSV9DU0kyX1ZDRFQwX0NIX1ZDKDIsIDIpIHwKKwkJ ICAgICBTVU44SV9BODNUX01JUElfQ1NJMl9WQ0RUMF9DSF9WQygxLCAxKSB8CisJCSAgICAgU1VO OElfQTgzVF9NSVBJX0NTSTJfVkNEVDBfQ0hfVkMoMCwgMCkgfAorCQkgICAgIFNVTjhJX0E4M1Rf TUlQSV9DU0kyX1ZDRFQwX0NIX0RUKDAsIGRhdGFfdHlwZSkpOworCisJLyogU3RhcnQgc3RyZWFt aW5nLiAqLworCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIFNVTjhJX0E4M1RfTUlQSV9DU0ky X0NGR19SRUcsCisJCQkgICBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfU1lOQ19FTiwKKwkJCSAg IFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19TWU5DX0VOKTsKKworCXJldCA9IHY0bDJfc3ViZGV2 X2NhbGwocmVtb3RlX3N1YmRldiwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKKwlpZiAocmV0KQorCQln b3RvIGRpc2FibGU7CisKKwlyZXR1cm4gMDsKKworZGlzYWJsZToKKwlyZWdtYXBfdXBkYXRlX2Jp dHMocmVnbWFwLCBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfUkVHLAorCQkJICAgU1VOOElfQTgz VF9NSVBJX0NTSTJfQ0ZHX1NZTkNfRU4sIDApOworCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VO OElfQTgzVF9NSVBJX0NTSTJfQ1RSTF9SRUcsIDApOworCisJcGh5X3Bvd2VyX29mZihjZGV2LT5k cGh5KTsKKworZXJyb3JfcG06CisJcG1fcnVudGltZV9wdXQoY2Rldi0+ZGV2KTsKKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBjb25zdAorc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBz dW44aV9hODN0X21pcGlfY3NpMl9zdWJkZXZfdmlkZW9fb3BzID0geworCS5zX3N0cmVhbQk9IHN1 bjhpX2E4M3RfbWlwaV9jc2kyX3Nfc3RyZWFtLAorfTsKKworLyogUGFkICovCisKK3N0YXRpYyBp bnQKK3N1bjhpX2E4M3RfbWlwaV9jc2kyX2VudW1fbWJ1c19jb2RlKHN0cnVjdCB2NGwyX3N1YmRl diAqc3ViZGV2LAorCQkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY29uZmln LAorCQkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW0gKmNvZGVfZW51bSkK K3sKKwlpZiAoY29kZV9lbnVtLT5pbmRleCA+PSBBUlJBWV9TSVpFKHN1bjhpX2E4M3RfbWlwaV9j c2kyX21idXNfY29kZXMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvZGVfZW51bS0+Y29kZSA9 IHN1bjhpX2E4M3RfbWlwaV9jc2kyX21idXNfY29kZXNbY29kZV9lbnVtLT5pbmRleF07CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdW44aV9hODN0X21pcGlfY3NpMl9nZXRfZm10KHN0 cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LAorCQkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRf Y29uZmlnICpjb25maWcsCisJCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm9ybWF0 KQoreworCXN0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl92aWRlbyAqdmlkZW8gPQorCQlzdW44 aV9hODN0X21pcGlfY3NpMl9zdWJkZXZfdmlkZW8oc3ViZGV2KTsKKwlzdHJ1Y3QgdjRsMl9tYnVz X2ZyYW1lZm10ICptYnVzX2Zvcm1hdCA9ICZmb3JtYXQtPmZvcm1hdDsKKworCWlmIChmb3JtYXQt PndoaWNoID09IFY0TDJfU1VCREVWX0ZPUk1BVF9UUlkpCisJCSptYnVzX2Zvcm1hdCA9ICp2NGwy X3N1YmRldl9nZXRfdHJ5X2Zvcm1hdChzdWJkZXYsIGNvbmZpZywKKwkJCQkJCQkgICBmb3JtYXQt PnBhZCk7CisJZWxzZQorCQkqbWJ1c19mb3JtYXQgPSB2aWRlby0+bWJ1c19mb3JtYXQ7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdW44aV9hODN0X21pcGlfY3NpMl9zZXRfZm10KHN0 cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LAorCQkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRf Y29uZmlnICpjb25maWcsCisJCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm9ybWF0 KQoreworCXN0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl92aWRlbyAqdmlkZW8gPQorCQlzdW44 aV9hODN0X21pcGlfY3NpMl9zdWJkZXZfdmlkZW8oc3ViZGV2KTsKKwlzdHJ1Y3QgdjRsMl9tYnVz X2ZyYW1lZm10ICptYnVzX2Zvcm1hdCA9ICZmb3JtYXQtPmZvcm1hdDsKKworCWlmIChmb3JtYXQt PndoaWNoID09IFY0TDJfU1VCREVWX0ZPUk1BVF9UUlkpCisJCSp2NGwyX3N1YmRldl9nZXRfdHJ5 X2Zvcm1hdChzdWJkZXYsIGNvbmZpZywgZm9ybWF0LT5wYWQpID0KKwkJCSptYnVzX2Zvcm1hdDsK KwllbHNlCisJCXZpZGVvLT5tYnVzX2Zvcm1hdCA9ICptYnVzX2Zvcm1hdDsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9vcHMgc3VuOGlfYTgz dF9taXBpX2NzaTJfc3ViZGV2X3BhZF9vcHMgPSB7CisJLmVudW1fbWJ1c19jb2RlCT0gc3VuOGlf YTgzdF9taXBpX2NzaTJfZW51bV9tYnVzX2NvZGUsCisJLmdldF9mbXQJPSBzdW44aV9hODN0X21p cGlfY3NpMl9nZXRfZm10LAorCS5zZXRfZm10CT0gc3VuOGlfYTgzdF9taXBpX2NzaTJfc2V0X2Zt dCwKK307CisKKy8qIFN1YmRldiAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2 X29wcyBzdW44aV9hODN0X21pcGlfY3NpMl9zdWJkZXZfb3BzID0geworCS52aWRlbwkJPSAmc3Vu OGlfYTgzdF9taXBpX2NzaTJfc3ViZGV2X3ZpZGVvX29wcywKKwkucGFkCQk9ICZzdW44aV9hODN0 X21pcGlfY3NpMl9zdWJkZXZfcGFkX29wcywKK307CisKKy8qIE5vdGlmaWVyICovCisKK3N0YXRp YyBpbnQKK3N1bjhpX2E4M3RfbWlwaV9jc2kyX25vdGlmaWVyX2JvdW5kKHN0cnVjdCB2NGwyX2Fz eW5jX25vdGlmaWVyICpub3RpZmllciwKKwkJCQkgICAgc3RydWN0IHY0bDJfc3ViZGV2ICpyZW1v dGVfc3ViZGV2LAorCQkJCSAgICBzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYgKnJlbW90ZV9zdWJk ZXZfYXN5bmMpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYgPSBub3RpZmllci0+c2Q7 CisJc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX3ZpZGVvICp2aWRlbyA9CisJCXN1bjhpX2E4 M3RfbWlwaV9jc2kyX3N1YmRldl92aWRlbyhzdWJkZXYpOworCXN0cnVjdCBzdW44aV9hODN0X21p cGlfY3NpMl9kZXYgKmNkZXYgPQorCQlzdW44aV9hODN0X21pcGlfY3NpMl92aWRlb19kZXYodmlk ZW8pOworCWludCBzb3VyY2VfcGFkOworCWludCByZXQ7CisKKwlzb3VyY2VfcGFkID0gbWVkaWFf ZW50aXR5X2dldF9md25vZGVfcGFkKCZyZW1vdGVfc3ViZGV2LT5lbnRpdHksCisJCQkJCQkgcmVt b3RlX3N1YmRldi0+Zndub2RlLAorCQkJCQkJIE1FRElBX1BBRF9GTF9TT1VSQ0UpOworCWlmIChz b3VyY2VfcGFkIDwgMCkKKwkJcmV0dXJuIHNvdXJjZV9wYWQ7CisKKwlyZXQgPSBtZWRpYV9jcmVh dGVfcGFkX2xpbmsoJnJlbW90ZV9zdWJkZXYtPmVudGl0eSwgc291cmNlX3BhZCwKKwkJCQkgICAg JnN1YmRldi0+ZW50aXR5LCAwLAorCQkJCSAgICBNRURJQV9MTktfRkxfRU5BQkxFRCB8CisJCQkJ ICAgIE1FRElBX0xOS19GTF9JTU1VVEFCTEUpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihjZGV2 LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlICVzOiV1IC0+ICVzOiV1IGxpbmtcbiIsCisJCQlyZW1v dGVfc3ViZGV2LT5lbnRpdHkubmFtZSwgc291cmNlX3BhZCwKKwkJCXN1YmRldi0+ZW50aXR5Lm5h bWUsIDApOworCQlyZXR1cm4gcmV0OworCX0KKworCXZpZGVvLT5yZW1vdGVfc3ViZGV2ID0gcmVt b3RlX3N1YmRldjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QKK3N0cnVjdCB2NGwy X2FzeW5jX25vdGlmaWVyX29wZXJhdGlvbnMgc3VuOGlfYTgzdF9taXBpX2NzaTJfbm90aWZpZXJf b3BzID0geworCS5ib3VuZAkJPSBzdW44aV9hODN0X21pcGlfY3NpMl9ub3RpZmllcl9ib3VuZCwK K307CisKKy8qIE1lZGlhIEVudGl0eSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1lZGlhX2Vu dGl0eV9vcGVyYXRpb25zIHN1bjhpX2E4M3RfbWlwaV9jc2kyX2VudGl0eV9vcHMgPSB7CisJLmxp bmtfdmFsaWRhdGUJPSB2NGwyX3N1YmRldl9saW5rX3ZhbGlkYXRlLAorfTsKKworLyogQmFzZSBE cml2ZXIgKi8KKworc3RhdGljIGludCBzdW44aV9hODN0X21pcGlfY3NpMl9zdXNwZW5kKHN0cnVj dCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2ICpjZGV2 ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY2Rldi0+ Y2xrX21pc2MpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShjZGV2LT5jbGtfbWlwaSk7CisJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGNkZXYtPmNsa19tb2QpOworCWNsa19kaXNhYmxlX3VucHJlcGFy ZShjZGV2LT5jbGtfYnVzKTsKKwlyZXNldF9jb250cm9sX2Fzc2VydChjZGV2LT5yZXNldCk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdW44aV9hODN0X21pcGlfY3NpMl9yZXN1bWUo c3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9kZXYg KmNkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVzZXRf Y29udHJvbF9kZWFzc2VydChjZGV2LT5yZXNldCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNk ZXYtPmRldiwgImZhaWxlZCB0byBkZWFzc2VydCByZXNldFxuIik7CisJCXJldHVybiByZXQ7CisJ fQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNkZXYtPmNsa19idXMpOworCWlmIChyZXQp IHsKKwkJZGV2X2VycihjZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIGJ1cyBjbG9ja1xuIik7 CisJCWdvdG8gZXJyb3JfcmVzZXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNk ZXYtPmNsa19tb2QpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihjZGV2LT5kZXYsICJmYWlsZWQg dG8gZW5hYmxlIG1vZHVsZSBjbG9ja1xuIik7CisJCWdvdG8gZXJyb3JfY2xrX2J1czsKKwl9CisK KwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2Rldi0+Y2xrX21pcGkpOworCWlmIChyZXQpIHsK KwkJZGV2X2VycihjZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIE1JUEkgY2xvY2tcbiIpOwor CQlnb3RvIGVycm9yX2Nsa19tb2Q7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNk ZXYtPmNsa19taXNjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoY2Rldi0+ZGV2LCAiZmFpbGVk IHRvIGVuYWJsZSBDU0kgbWlzYyBjbG9ja1xuIik7CisJCWdvdG8gZXJyb3JfY2xrX21pcGk7CisJ fQorCisJc3VuOGlfYTgzdF9taXBpX2NzaTJfaW5pdChjZGV2KTsKKworCXJldHVybiAwOworCitl cnJvcl9jbGtfbWlwaToKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY2Rldi0+Y2xrX21pcGkpOwor CitlcnJvcl9jbGtfbW9kOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShjZGV2LT5jbGtfbW9kKTsK KworZXJyb3JfY2xrX2J1czoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY2Rldi0+Y2xrX2J1cyk7 CisKK2Vycm9yX3Jlc2V0OgorCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KGNkZXYtPnJlc2V0KTsKKwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3N1bjhpX2E4M3RfbWlwaV9jc2kyX3Y0bDJf c2V0dXAoc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2RldiAqY2RldikKK3sKKwlzdHJ1Y3Qg c3VuOGlfYTgzdF9taXBpX2NzaTJfdmlkZW8gKnZpZGVvID0gJmNkZXYtPnZpZGVvOworCXN0cnVj dCB2NGwyX3N1YmRldiAqc3ViZGV2ID0gJnZpZGVvLT5zdWJkZXY7CisJc3RydWN0IHY0bDJfYXN5 bmNfbm90aWZpZXIgKm5vdGlmaWVyID0gJnZpZGVvLT5ub3RpZmllcjsKKwlzdHJ1Y3QgZndub2Rl X2hhbmRsZSAqaGFuZGxlOworCXN0cnVjdCB2NGwyX2Z3bm9kZV9lbmRwb2ludCAqZW5kcG9pbnQ7 CisJc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2ICpzdWJkZXZfYXN5bmM7CisJaW50IHJldDsKKwor CS8qIFN1YmRldiAqLworCisJdjRsMl9zdWJkZXZfaW5pdChzdWJkZXYsICZzdW44aV9hODN0X21p cGlfY3NpMl9zdWJkZXZfb3BzKTsKKwlzdWJkZXYtPmRldiA9IGNkZXYtPmRldjsKKwlzdWJkZXYt PmZsYWdzIHw9IFY0TDJfU1VCREVWX0ZMX0hBU19ERVZOT0RFOworCXN0cnNjcHkoc3ViZGV2LT5u YW1lLCBNT0RVTEVfTkFNRSwgc2l6ZW9mKHN1YmRldi0+bmFtZSkpOworCXY0bDJfc2V0X3N1YmRl dmRhdGEoc3ViZGV2LCBjZGV2KTsKKworCS8qIEVudGl0eSAqLworCisJc3ViZGV2LT5lbnRpdHku ZnVuY3Rpb24gPSBNRURJQV9FTlRfRl9WSURfSUZfQlJJREdFOworCXN1YmRldi0+ZW50aXR5Lm9w cyA9ICZzdW44aV9hODN0X21pcGlfY3NpMl9lbnRpdHlfb3BzOworCisJLyogUGFkcyAqLworCisJ dmlkZW8tPnBhZHNbMF0uZmxhZ3MgPSBNRURJQV9QQURfRkxfU0lOSzsKKwl2aWRlby0+cGFkc1sx XS5mbGFncyA9IE1FRElBX1BBRF9GTF9TT1VSQ0U7CisKKwlyZXQgPSBtZWRpYV9lbnRpdHlfcGFk c19pbml0KCZzdWJkZXYtPmVudGl0eSwgMiwgdmlkZW8tPnBhZHMpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwkvKiBFbmRwb2ludCAqLworCisJaGFuZGxlID0gZndub2RlX2dyYXBoX2dl dF9lbmRwb2ludF9ieV9pZChkZXZfZndub2RlKGNkZXYtPmRldiksIDAsIDAsCisJCQkJCQkgRldO T0RFX0dSQVBIX0VORFBPSU5UX05FWFQpOworCWlmICghaGFuZGxlKSB7CisJCXJldCA9IC1FTk9E RVY7CisJCWdvdG8gZXJyb3JfbWVkaWFfZW50aXR5OworCX0KKworCWVuZHBvaW50ID0gJnZpZGVv LT5lbmRwb2ludDsKKwllbmRwb2ludC0+YnVzX3R5cGUgPSBWNEwyX01CVVNfQ1NJMl9EUEhZOwor CisJcmV0ID0gdjRsMl9md25vZGVfZW5kcG9pbnRfcGFyc2UoaGFuZGxlLCBlbmRwb2ludCk7CisJ Zndub2RlX2hhbmRsZV9wdXQoaGFuZGxlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX21lZGlh X2VudGl0eTsKKworCS8qIE5vdGlmaWVyICovCisKKwl2NGwyX2FzeW5jX25vdGlmaWVyX2luaXQo bm90aWZpZXIpOworCisJc3ViZGV2X2FzeW5jID0gJnZpZGVvLT5zdWJkZXZfYXN5bmM7CisJcmV0 ID0gdjRsMl9hc3luY19ub3RpZmllcl9hZGRfZndub2RlX3JlbW90ZV9zdWJkZXYobm90aWZpZXIs IGhhbmRsZSwKKwkJCQkJCQkgICBzdWJkZXZfYXN5bmMpOworCWlmIChyZXQpCisJCWdvdG8gZXJy b3JfbWVkaWFfZW50aXR5OworCisJdmlkZW8tPm5vdGlmaWVyLm9wcyA9ICZzdW44aV9hODN0X21p cGlfY3NpMl9ub3RpZmllcl9vcHM7CisKKwlyZXQgPSB2NGwyX2FzeW5jX3N1YmRldl9ub3RpZmll cl9yZWdpc3RlcihzdWJkZXYsIG5vdGlmaWVyKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJv cl9ub3RpZmllcjsKKworCS8qIFN1YmRldiAqLworCisJcmV0ID0gdjRsMl9hc3luY19yZWdpc3Rl cl9zdWJkZXYoc3ViZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9ub3RpZmllcl9y ZWdpc3RlcmVkOworCisJLyogUnVudGltZSBQTSAqLworCisJcG1fcnVudGltZV9lbmFibGUoY2Rl di0+ZGV2KTsKKwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoY2Rldi0+ZGV2KTsKKworCXJldHVy biAwOworCitlcnJvcl9ub3RpZmllcl9yZWdpc3RlcmVkOgorCXY0bDJfYXN5bmNfbm90aWZpZXJf dW5yZWdpc3Rlcihub3RpZmllcik7CitlcnJvcl9ub3RpZmllcjoKKwl2NGwyX2FzeW5jX25vdGlm aWVyX2NsZWFudXAobm90aWZpZXIpOworZXJyb3JfbWVkaWFfZW50aXR5OgorCW1lZGlhX2VudGl0 eV9jbGVhbnVwKCZzdWJkZXYtPmVudGl0eSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50CitzdW44aV9hODN0X21pcGlfY3NpMl92NGwyX3RlYXJkb3duKHN0cnVjdCBzdW44aV9hODN0 X21pcGlfY3NpMl9kZXYgKmNkZXYpCit7CisJc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX3Zp ZGVvICp2aWRlbyA9ICZjZGV2LT52aWRlbzsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiA9 ICZ2aWRlby0+c3ViZGV2OworCXN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICpub3RpZmllciA9 ICZ2aWRlby0+bm90aWZpZXI7CisKKwl2NGwyX2FzeW5jX3VucmVnaXN0ZXJfc3ViZGV2KHN1YmRl dik7CisJdjRsMl9hc3luY19ub3RpZmllcl91bnJlZ2lzdGVyKG5vdGlmaWVyKTsKKwl2NGwyX2Fz eW5jX25vdGlmaWVyX2NsZWFudXAobm90aWZpZXIpOworCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZz dWJkZXYtPmVudGl0eSk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc3ViZGV2KTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgc3Vu OGlfYTgzdF9taXBpX2NzaTJfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgICAgICAgPSAz MiwKKwkucmVnX3N0cmlkZSAgICAgPSA0LAorCS52YWxfYml0cyAgICAgICA9IDMyLAorCS5tYXhf cmVnaXN0ZXIJPSAweDEyMCwKK307CisKK3N0YXRpYyBpbnQgc3VuOGlfYTgzdF9taXBpX2NzaTJf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3VuOGlfYTgz dF9taXBpX2NzaTJfZGV2ICpjZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19p b21lbSAqaW9fYmFzZTsKKwlpbnQgcmV0OworCisJY2RldiA9IGRldm1fa3phbGxvYygmcGRldi0+ ZGV2LCBzaXplb2YoKmNkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNkZXYpCisJCXJldHVybiAt RU5PTUVNOworCisJY2Rldi0+ZGV2ID0gJnBkZXYtPmRldjsKKworCXJlcyA9IHBsYXRmb3JtX2dl dF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaW9fYmFzZSA9IGRldm1faW9y ZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoaW9fYmFzZSkpCisJ CXJldHVybiBQVFJfRVJSKGlvX2Jhc2UpOworCisJY2Rldi0+cmVnbWFwID0KKwkJZGV2bV9yZWdt YXBfaW5pdF9tbWlvKCZwZGV2LT5kZXYsIGlvX2Jhc2UsCisJCQkJICAgICAgJnN1bjhpX2E4M3Rf bWlwaV9jc2kyX3JlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIoY2Rldi0+cmVnbWFwKSkgewor CQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdCByZWdpc3RlciBtYXBcbiIpOwor CQlyZXR1cm4gUFRSX0VSUihjZGV2LT5yZWdtYXApOworCX0KKworCWNkZXYtPmNsa19idXMgPSBk ZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImJ1cyIpOworCWlmIChJU19FUlIoY2Rldi0+Y2xrX2J1 cykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFjcXVpcmUgYnVzIGNsb2Nr XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2Rldi0+Y2xrX2J1cyk7CisJfQorCisJY2Rldi0+Y2xr X21vZCA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAibW9kIik7CisJaWYgKElTX0VSUihjZGV2 LT5jbGtfbW9kKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWNxdWlyZSBt b2QgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihjZGV2LT5jbGtfbW9kKTsKKwl9CisKKwlj ZGV2LT5jbGtfbWlwaSA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAibWlwaSIpOworCWlmIChJ U19FUlIoY2Rldi0+Y2xrX21pcGkpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0 byBhY3F1aXJlIG1pcGkgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihjZGV2LT5jbGtfbWlw aSk7CisJfQorCisJY2Rldi0+Y2xrX21pc2MgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgIm1p c2MiKTsKKwlpZiAoSVNfRVJSKGNkZXYtPmNsa19taXNjKSkgeworCQlkZXZfZXJyKCZwZGV2LT5k ZXYsICJmYWlsZWQgdG8gYWNxdWlyZSBtaXNjIGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIo Y2Rldi0+Y2xrX21pc2MpOworCX0KKworCWNkZXYtPnJlc2V0ID0gZGV2bV9yZXNldF9jb250cm9s X2dldF9zaGFyZWQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihjZGV2LT5yZXNldCkp IHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCByZXNldCBjb250cm9sbGVy XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2Rldi0+cmVzZXQpOworCX0KKworCXJldCA9IHN1bjhp X2E4M3RfZHBoeV9yZWdpc3RlcihjZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYt PmRldiwgImZhaWxlZCB0byBpbml0IE1JUEkgRC1QSFlcbiIpOworCQlyZXR1cm4gcmV0OworCX0K KworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNkZXYpOworCisJcmV0ID0gc3VuOGlfYTgz dF9taXBpX2NzaTJfdjRsMl9zZXR1cChjZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3VuOGlfYTgzdF9taXBpX2NzaTJfcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHN1bjhpX2E4M3RfbWlw aV9jc2kyX2RldiAqY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcGh5X2V4 aXQoY2Rldi0+ZHBoeSk7CisKKwlyZXR1cm4gc3VuOGlfYTgzdF9taXBpX2NzaTJfdjRsMl90ZWFy ZG93bihjZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHN1bjhpX2E4 M3RfbWlwaV9jc2kyX3BtX29wcyA9IHsKKwlTRVRfUlVOVElNRV9QTV9PUFMoc3VuOGlfYTgzdF9t aXBpX2NzaTJfc3VzcGVuZCwKKwkJCSAgIHN1bjhpX2E4M3RfbWlwaV9jc2kyX3Jlc3VtZSwgTlVM TCkKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN1bjhpX2E4M3RfbWlw aV9jc2kyX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOGkt YTgzdC1taXBpLWNzaTIiIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc3Vu OGlfYTgzdF9taXBpX2NzaTJfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBzdW44aV9hODN0X21pcGlfY3NpMl9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlID0g c3VuOGlfYTgzdF9taXBpX2NzaTJfcHJvYmUsCisJLnJlbW92ZSA9IHN1bjhpX2E4M3RfbWlwaV9j c2kyX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IE1PRFVMRV9OQU1FLAorCQkub2Zf bWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoc3VuOGlfYTgzdF9taXBpX2NzaTJfb2ZfbWF0Y2gp LAorCQkucG0gPSAmc3VuOGlfYTgzdF9taXBpX2NzaTJfcG1fb3BzLAorCX0sCit9OworbW9kdWxl X3BsYXRmb3JtX2RyaXZlcihzdW44aV9hODN0X21pcGlfY3NpMl9wbGF0Zm9ybV9kcml2ZXIpOwor CitNT0RVTEVfREVTQ1JJUFRJT04oIkFsbHdpbm5lciBBODNUIE1JUEkgQ1NJLTIgYW5kIEQtUEhZ IENvbnRyb2xsZXIgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJQYXVsIEtvY2lhbGtvd3NraSA8 cGF1bC5rb2NpYWxrb3dza2lAYm9vdGxpbi5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjhpLWE4M3QtbWlw aS1jc2kyL3N1bjhpX2E4M3RfbWlwaV9jc2kyLmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1 bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2kyL3N1bjhpX2E4M3RfbWlwaV9jc2kyLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41YjRlOTk1MzkyYmIKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2ky L3N1bjhpX2E4M3RfbWlwaV9jc2kyLmgKQEAgLTAsMCArMSwxOTcgQEAKKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqLworLyoKKyAqIENvcHlyaWdodCAyMDIwIEvDqXZpbiBM J2jDtHBpdGFsIDxrZXZpbi5saG9waXRhbEBib290bGluLmNvbT4KKyAqIENvcHlyaWdodCAyMDIw IEJvb3RsaW4KKyAqIEF1dGhvcjogUGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tp QGJvb3RsaW4uY29tPgorICovCisKKyNpZm5kZWYgX19TVU44SV9BODNUX01JUElfQ1NJMl9IX18K KyNkZWZpbmUgX19TVU44SV9BODNUX01JUElfQ1NJMl9IX18KKworI2luY2x1ZGUgPGxpbnV4L3Bo eS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNl dC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRs Mi1md25vZGUuaD4KKworI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9WRVJTSU9OX1JFRwkJ CTB4MAorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DVFJMX1JFRwkJCQkweDQKKyNkZWZp bmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ1RSTF9JTklUX1ZBTFVFCQkJMHhiOGMzOWJlYworI2Rl ZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DVFJMX1JFU0VUX04JCQlCSVQoMzEpCisjZGVmaW5l IFNVTjhJX0E4M1RfTUlQSV9DU0kyX1JYX1BLVF9OVU1fUkVHCQkJMHg4CisjZGVmaW5lIFNVTjhJ X0E4M1RfTUlQSV9DU0kyX1JYX1BLVF9OVU1fSU5JVF9WQUxVRQkJMHhiOGQyNTdmOAorI2RlZmlu ZSBTVU44SV9BODNUX01JUElfQ1NJMl9SU1ZEMF9SRUcJCQkJMHhjCisKKyNkZWZpbmUgU1VOOElf QTgzVF9NSVBJX0NTSTJfUlNWRDFfUkVHCQkJCTB4MTgKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJ X0NTSTJfUlNWRDFfSFdfTE9DS19WQUxVRQkJMHhiOGM4YTMwYworI2RlZmluZSBTVU44SV9BODNU X01JUElfQ1NJMl9SU1ZEMl9SRUcJCQkJMHgxYworI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJ Ml9SU1ZEMl9IV19MT0NLX1ZBTFVFCQkweGI4ZGY4YWQ3CisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQ SV9DU0kyX0lOVF9TVEEwX1JFRwkJCTB4MjAKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJf SU5UX1NUQTBfRUNDX0VSUl9EQkwJCUJJVCgyOCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NT STJfSU5UX1NUQTBfTElORV9DS1NNX0VSUl9WQzMJCUJJVCgyNykKKyNkZWZpbmUgU1VOOElfQTgz VF9NSVBJX0NTSTJfSU5UX1NUQTBfTElORV9DS1NNX0VSUl9WQzIJCUJJVCgyNikKKyNkZWZpbmUg U1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfTElORV9DS1NNX0VSUl9WQzEJCUJJVCgyNSkK KyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfTElORV9DS1NNX0VSUl9WQzAJ CUJJVCgyNCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfTElORV9TRVFf RVJSX0RUMwkJQklUKDIzKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9M SU5FX1NFUV9FUlJfRFQyCQlCSVQoMjIpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lO VF9TVEEwX0xJTkVfU0VRX0VSUl9EVDEJCUJJVCgyMSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJ X0NTSTJfSU5UX1NUQTBfTElORV9TRVFfRVJSX0RUMAkJQklUKDIwKQorI2RlZmluZSBTVU44SV9B ODNUX01JUElfQ1NJMl9JTlRfU1RBMF9MU19MRV9FUlJfRFQzCQlCSVQoMTkpCisjZGVmaW5lIFNV TjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0xTX0xFX0VSUl9EVDIJCUJJVCgxOCkKKyNkZWZp bmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfTFNfTEVfRVJSX0RUMQkJQklUKDE3KQor I2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9MU19MRV9FUlJfRFQwCQlCSVQo MTYpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0NSQ19FUlJfVkMzCQlC SVQoMTUpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0NSQ19FUlJfVkMy CQlCSVQoMTQpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0NSQ19FUlJf VkMxCQlCSVQoMTMpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0NSQ19F UlJfVkMwCQlCSVQoMTIpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0ZS TV9TRVFfRVJSX1ZDMwkJQklUKDExKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRf U1RBMF9GUk1fU0VRX0VSUl9WQzIJCUJJVCgxMCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NT STJfSU5UX1NUQTBfRlJNX1NFUV9FUlJfVkMxCQlCSVQoOSkKKyNkZWZpbmUgU1VOOElfQTgzVF9N SVBJX0NTSTJfSU5UX1NUQTBfRlJNX1NFUV9FUlJfVkMwCQlCSVQoOCkKKyNkZWZpbmUgU1VOOElf QTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfRlNfRkVfRVJSX1ZDMwkJQklUKDcpCisjZGVmaW5lIFNV TjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0ZTX0ZFX0VSUl9WQzIJCUJJVCg2KQorI2RlZmlu ZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9GU19GRV9FUlJfVkMxCQlCSVQoNSkKKyNk ZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfRlNfRkVfRVJSX1ZDMAkJQklUKDQp CisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX1NPVF9TWU5DX0VSUl8zCQlC SVQoMykKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfU09UX1NZTkNfRVJS XzIJCUJJVCgyKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9TT1RfU1lO Q19FUlJfMQkJQklUKDEpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX1NP VF9TWU5DX0VSUl8wCQlCSVQoMCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NU QTFfUkVHCQkJMHgyNAorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMV9MSU5F X1NFUV9FUlJfRFQ3CQlCSVQoMjMpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9T VEExX0xJTkVfU0VRX0VSUl9EVDYJCUJJVCgyMikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NT STJfSU5UX1NUQTFfTElORV9TRVFfRVJSX0RUNQkJQklUKDIxKQorI2RlZmluZSBTVU44SV9BODNU X01JUElfQ1NJMl9JTlRfU1RBMV9MSU5FX1NFUV9FUlJfRFQ0CQlCSVQoMjApCisjZGVmaW5lIFNV TjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEExX0xTX0xFX0VSUl9EVDcJCUJJVCgxOSkKKyNkZWZp bmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTFfTFNfTEVfRVJSX0RUNgkJQklUKDE4KQor I2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMV9MU19MRV9FUlJfRFQ1CQlCSVQo MTcpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEExX0xTX0xFX0VSUl9EVDQJ CUJJVCgxNikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTFfRFRfRVJSX1ZD MwkJQklUKDE1KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMV9EVF9FUlJf VkMyCQlCSVQoMTQpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEExX0RUX0VS Ul9WQzEJCUJJVCgxMykKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTFfRFRf RVJSX1ZDMAkJQklUKDEyKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMV9F Q0NfRVJSMV9WQzMJCUJJVCgxMSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NU QTFfRUNDX0VSUjFfVkMyCQlCSVQoMTApCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lO VF9TVEExX0VDQ19FUlIxX1ZDMQkJQklUKDkpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0ky X0lOVF9TVEExX0VDQ19FUlIxX1ZDMAkJQklUKDgpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9D U0kyX0lOVF9TVEExX1NPVF9FUlJfMwkJCUJJVCg3KQorI2RlZmluZSBTVU44SV9BODNUX01JUElf Q1NJMl9JTlRfU1RBMV9TT1RfRVJSXzIJCQlCSVQoNikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJ X0NTSTJfSU5UX1NUQTFfU09UX0VSUl8xCQkJQklUKDUpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQ SV9DU0kyX0lOVF9TVEExX1NPVF9FUlJfMAkJCUJJVCg0KQorI2RlZmluZSBTVU44SV9BODNUX01J UElfQ1NJMl9JTlRfU1RBMV9FU0NfRU5UUllfRVJSXzMJCUJJVCgzKQorI2RlZmluZSBTVU44SV9B ODNUX01JUElfQ1NJMl9JTlRfU1RBMV9FU0NfRU5UUllfRVJSXzIJCUJJVCgyKQorI2RlZmluZSBT VU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMV9FU0NfRU5UUllfRVJSXzEJCUJJVCgxKQorI2Rl ZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMV9FU0NfRU5UUllfRVJSXzAJCUJJVCgw KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9SRUcJCQkweDI4CisjZGVm aW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0VDQ19FUlJfREJMCQlCSVQoMjgpCisj ZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0NLU01fRVJSX1ZDMwkJQklUKDI3 KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9DS1NNX0VSUl9WQzIJCUJJ VCgyNikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfQ0tTTV9FUlJfVkMx CQlCSVQoMjUpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0NLU01fRVJS X1ZDMAkJQklUKDI0KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9MSU5F X1NFUV9FUlJfRFQzCQlCSVQoMjMpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9N U0swX0xJTkVfU0VRX0VSUl9EVDIJCUJJVCgyMikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NT STJfSU5UX01TSzBfTElORV9TRVFfRVJSX0RUMQkJQklUKDIxKQorI2RlZmluZSBTVU44SV9BODNU X01JUElfQ1NJMl9JTlRfTVNLMF9MSU5FX1NFUV9FUlJfRFQwCQlCSVQoMjApCisjZGVmaW5lIFNV TjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0xTX0xFX0VSUl9EVDMJCUJJVCgxOSkKKyNkZWZp bmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfTFNfTEVfRVJSX0RUMgkJQklUKDE4KQor I2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9MU19MRV9FUlJfRFQxCQlCSVQo MTcpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0xTX0xFX0VSUl9EVDAJ CUJJVCgxNikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfQ1JDX0VSUl9W QzMJCUJJVCgxNSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfQ1JDX0VS Ul9WQzIJCUJJVCgxNCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfQ1JD X0VSUl9WQzEJCUJJVCgxMykKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBf Q1JDX0VSUl9WQzAJCUJJVCgxMikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01T SzBfRlJNX1NFUV9FUlJfVkMzCQlCSVQoMTEpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0ky X0lOVF9NU0swX0ZSTV9TRVFfRVJSX1ZDMgkJQklUKDEwKQorI2RlZmluZSBTVU44SV9BODNUX01J UElfQ1NJMl9JTlRfTVNLMF9GUk1fU0VRX0VSUl9WQzEJCUJJVCg5KQorI2RlZmluZSBTVU44SV9B ODNUX01JUElfQ1NJMl9JTlRfTVNLMF9GUk1fU0VRX0VSUl9WQzAJCUJJVCg4KQorI2RlZmluZSBT VU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9GU19GRV9FUlJfVkMzCQlCSVQoNykKKyNkZWZp bmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfRlNfRkVfRVJSX1ZDMgkJQklUKDYpCisj ZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0ZTX0ZFX0VSUl9WQzEJCUJJVCg1 KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9GU19GRV9FUlJfVkMwCQlC SVQoNCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfU09UX1NZTkNfRVJS XzMJCUJJVCgzKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9TT1RfU1lO Q19FUlJfMgkJQklUKDIpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX1NP VF9TWU5DX0VSUl8xCQlCSVQoMSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01T SzBfU09UX1NZTkNfRVJSXzAJCUJJVCgwKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9J TlRfTVNLMV9SRUcJCQkweDJjCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0sx X0RUX0VSUl9WQzMJCUJJVCgxNSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01T SzFfRFRfRVJSX1ZDMgkJQklUKDE0KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRf TVNLMV9EVF9FUlJfVkMxCQlCSVQoMTMpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lO VF9NU0sxX0RUX0VSUl9WQzAJCUJJVCgxMikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJf SU5UX01TSzFfRUNDX0VSUjFfVkMzCQlCSVQoMTEpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9D U0kyX0lOVF9NU0sxX0VDQ19FUlIxX1ZDMgkJQklUKDEwKQorI2RlZmluZSBTVU44SV9BODNUX01J UElfQ1NJMl9JTlRfTVNLMV9FQ0NfRVJSMV9WQzEJCUJJVCg5KQorI2RlZmluZSBTVU44SV9BODNU X01JUElfQ1NJMl9JTlRfTVNLMV9FQ0NfRVJSMV9WQzAJCUJJVCg4KQorI2RlZmluZSBTVU44SV9B ODNUX01JUElfQ1NJMl9JTlRfTVNLMV9TT1RfRVJSXzMJCQlCSVQoNykKKyNkZWZpbmUgU1VOOElf QTgzVF9NSVBJX0NTSTJfSU5UX01TSzFfU09UX0VSUl8yCQkJQklUKDYpCisjZGVmaW5lIFNVTjhJ X0E4M1RfTUlQSV9DU0kyX0lOVF9NU0sxX1NPVF9FUlJfMQkJCUJJVCg1KQorI2RlZmluZSBTVU44 SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMV9TT1RfRVJSXzAJCQlCSVQoNCkKKyNkZWZpbmUgU1VO OElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzFfRVNDX0VOVFJZX0VSUl8zCQlCSVQoMykKKyNkZWZp bmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzFfRVNDX0VOVFJZX0VSUl8yCQlCSVQoMikK KyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzFfRVNDX0VOVFJZX0VSUl8xCQlC SVQoMSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzFfRVNDX0VOVFJZX0VS Ul8wCQlCSVQoMCkKKworI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfUkVHCQkJCTB4 MTAwCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19JTklUX1ZBTFVFCQkJMHhiOGM2 NGYyNAorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfU1lOQ19FTgkJCUJJVCgzMSkK KyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ0ZHX0JZUEFTU19FQ0NfRU4JCQlCSVQoMjkp CisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19VTlBLVF9FTgkJCUJJVCgyOCkKKyNk ZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ0ZHX05PTkVfVU5QS1RfUlhfTU9ERQkJQklUKDI3 KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfWUNfU1dBQgkJCUJJVCgyNikKKyNk ZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ0ZHX05fQllURQkJCQlCSVQoMjQpCisjZGVmaW5l IFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19TWU5DX0RMWV9DWUNMRSh2KQkJKCgodikgPDwgMTgp ICYgXAorCQkJCQkJCQkgR0VOTUFTSygyMiwgMTgpKQorI2RlZmluZSBTVU44SV9BODNUX01JUElf Q1NJMl9DRkdfTl9DSEFOTkVMKHYpCQkJKCgoKHYpIC0gMSkgPDwgMTYpICYgXAorCQkJCQkJCQkg R0VOTUFTSygxNywgMTYpKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfTl9MQU5F KHYpCQkJKCgoKHYpIC0gMSkgPDwgNCkgJiBcCisJCQkJCQkJCSBHRU5NQVNLKDUsIDQpKQorI2Rl ZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9WQ0RUMF9SRUcJCQkJMHgxMDQKKyNkZWZpbmUgU1VO OElfQTgzVF9NSVBJX0NTSTJfVkNEVDBfQ0hfVkMoY2gsIHZjKQkJKCgodmMpICYgR0VOTUFTSygx LCAwKSkgPDwgXAorCQkJCQkJCQkgKChjaCkgKiA4ICsgNikpCisjZGVmaW5lIFNVTjhJX0E4M1Rf TUlQSV9DU0kyX1ZDRFQwX0NIX0RUKGNoLCB0KQkJCSgoKHQpICYgR0VOTUFTSyg1LCAwKSkgPDwg XAorCQkJCQkJCQkgKChjaCkgKiA4KSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfVkNE VDFfUkVHCQkJCTB4MTA4CisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX1ZDRFQxX0NIX1ZD KGNoLCB2YykJCSgoKHZjKSAmIEdFTk1BU0soMSwgMCkpIDw8IFwKKwkJCQkJCQkJICgoKGNoKSAt IDQpICogOCArIDYpKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9WQ0RUMV9DSF9EVChj aCwgdCkJCQkoKCh0KSAmIEdFTk1BU0soNSwgMCkpIDw8IFwKKwkJCQkJCQkJICgoKGNoKSAtIDQp ICogOCkpCisKK2VudW0gbWlwaV9jc2kyX2RhdGFfdHlwZSB7CisJTUlQSV9DU0kyX0RBVEFfVFlQ RV9SQVc4CT0gMHgyYSwKKwlNSVBJX0NTSTJfREFUQV9UWVBFX1JBVzEwCT0gMHgyYiwKKwlNSVBJ X0NTSTJfREFUQV9UWVBFX1JBVzEyCT0gMHgyYywKK307CisKK3N0cnVjdCBzdW44aV9hODN0X21p cGlfY3NpMl92aWRlbyB7CisJc3RydWN0IHY0bDJfZndub2RlX2VuZHBvaW50IGVuZHBvaW50Owor CXN0cnVjdCB2NGwyX3N1YmRldiBzdWJkZXY7CisJc3RydWN0IG1lZGlhX3BhZCBwYWRzWzJdOwor CisJc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2IHN1YmRldl9hc3luYzsKKwlzdHJ1Y3QgdjRsMl9h c3luY19ub3RpZmllciBub3RpZmllcjsKKworCXN0cnVjdCB2NGwyX3N1YmRldiAqcmVtb3RlX3N1 YmRldjsKKworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWJ1c19mb3JtYXQ7Cit9OworCitz dHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisK KwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJc3RydWN0IGNsayAqY2xrX2J1czsKKwlzdHJ1Y3Qg Y2xrICpjbGtfbW9kOworCXN0cnVjdCBjbGsgKmNsa19taXBpOworCXN0cnVjdCBjbGsgKmNsa19t aXNjOworCXN0cnVjdCByZXNldF9jb250cm9sICpyZXNldDsKKwlzdHJ1Y3QgcGh5ICpkcGh5Owor CXN0cnVjdCBwaHlfY29uZmlndXJlX29wdHNfbWlwaV9kcGh5IGRwaHlfY29uZmlnOworCisJc3Ry dWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX3ZpZGVvIHZpZGVvOworfTsKKworI2RlZmluZSBzdW44 aV9hODN0X21pcGlfY3NpMl9zdWJkZXZfdmlkZW8oc3ViZGV2KSBcCisJY29udGFpbmVyX29mKHN1 YmRldiwgc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX3ZpZGVvLCBzdWJkZXYpCisKKyNkZWZp bmUgc3VuOGlfYTgzdF9taXBpX2NzaTJfdmlkZW9fZGV2KHZpZGVvKSBcCisJY29udGFpbmVyX29m KHZpZGVvLCBzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2LCB2aWRlbykKKworI2VuZGlm IC8qIF9fU1VOOElfQTgzVF9NSVBJX0NTSTJfSF9fICovCi0tIAoyLjI5LjIKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1h aWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==