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=-14.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS 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 10080C47082 for ; Mon, 7 Jun 2021 16:43:51 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CA81460FDA for ; Mon, 7 Jun 2021 16:43:50 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CA81460FDA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=JwNNWLnimPivVZusInisl/rjcfUKKXvzvAdEiUxBC2Q=; b=RXnm3L0+lNUb/G 6jArgCEfnQovNB89Gbta8BGwihOadeOEa2AsLr9vSlSAC0ZGQMKhwvfLuU4n/LFiqv6h7QgApfpLy bSePTaXNp/wLFOfD1+1FDHH7EJwZ2FhMs/Klx4obJVw8fNIjZc3JnIFUSL5z01atsp6ivQMHD+Cdj EzVkKdf84E7JQKuv7H+78FGG4+lihxKUJ5JMMhJ6b5n32QYon8wyzuP3d0SPs6TC8AseKpWZrtZNR 8s3Bss+eBMsXksV6WyahpGMuerkV4zK2nwWYPISCnaLaTjewfwAmiobLv9erl2nyooXpEIMaIIlmF pF88m0Khou55PdUjmaFQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lqILj-004ZoT-Sa; Mon, 07 Jun 2021 16:43:40 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lpulT-000UFE-4T for linux-riscv@lists.infradead.org; Sun, 06 Jun 2021 15:32:43 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 04B8E61438 for ; Sun, 6 Jun 2021 15:32:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1622993558; bh=KkzqFoZewwIMqvH1Ttp32h4AkC8G2qorf5g5Wxki15o=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=nUG6UIvtHuQCNj4XYZl8qkCwUB+tKU2Y3Z67rDpj2IPJD2ZDP3vQnAe00p/4FlyT2 mSnoXy17yq3ifu6Z9ei9NBz325a0NkCmAbCBjV6ZExpw6O3FNhjoJJnRjqfu8dOS8z 9vMqq6AMIiruqKND/PYO9Bajliv3xIljbYo8qfdIPjx64AVQYQjzjZ1/edZtWZqcvZ duiClWBbrbOaPVZ0I0UVYSLntKg2gpWg89Y6EuOLflOOSN2yjfkvZOgTEnd2a0aUuC E1879AdfaVpYeENIwLSoAaxPU36hu7+2JL73QkeFrAgXgITwDXORAccjd7LiMFq6Pf E3SKj9SfD34dg== Received: by mail-lj1-f176.google.com with SMTP id 131so18462471ljj.3 for ; Sun, 06 Jun 2021 08:32:37 -0700 (PDT) X-Gm-Message-State: AOAM5308GjGMan6fEasFwIe1oVmtdlUFwdm141xDVjrq+G0fteSlI76r vBOEmZ5M6XlI4/vR10gdjBO4XptmaR7P/v8g8F0= X-Google-Smtp-Source: ABdhPJxQ1K5qnhnHkbSg5RVAe3Yi7D0B0w1CuW2CFLqpbbtSyUxR6U8QCrkLL86G83/1Ph9jhn6CTinqqq5CyofCv80= X-Received: by 2002:a2e:8e90:: with SMTP id z16mr11113397ljk.508.1622993555844; Sun, 06 Jun 2021 08:32:35 -0700 (PDT) MIME-Version: 1.0 References: <1622970249-50770-1-git-send-email-guoren@kernel.org> <1622970249-50770-15-git-send-email-guoren@kernel.org> <20210606115027.5c715e64@slackpad.fritz.box> In-Reply-To: <20210606115027.5c715e64@slackpad.fritz.box> From: Guo Ren Date: Sun, 6 Jun 2021 23:32:22 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [RFC PATCH v2 11/11] riscv: soc: Allwinner D1 GMAC driver only for temp use To: Andre Przywara Cc: Anup Patel , Palmer Dabbelt , Arnd Bergmann , wens@csie.org, maxime@cerno.tech, Drew Fustini , liush@allwinnertech.com, =?UTF-8?B?V2VpIFd1ICjlkLTkvJ8p?= , wefu@redhat.com, linux-riscv , Linux Kernel Mailing List , linux-arch , linux-sunxi@lists.linux.dev, Maxime Ripard , Corentin Labbe , Samuel Holland , Icenowy Zheng , LABBE Corentin , Michael Walle , Guo Ren X-Mailman-Approved-At: Mon, 07 Jun 2021 09:31:12 -0700 X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org ICwKCk9uIFN1biwgSnVuIDYsIDIwMjEgYXQgNjo1MCBQTSBBbmRyZSBQcnp5d2FyYSA8YW5kcmUu cHJ6eXdhcmFAYXJtLmNvbT4gd3JvdGU6Cj4KPiBPbiBTdW4sICA2IEp1biAyMDIxIDA5OjA0OjA5 ICswMDAwCj4gZ3VvcmVuQGtlcm5lbC5vcmcgd3JvdGU6Cj4KPiBIaSwKPgo+ID4gRnJvbTogbGl1 c2ggPGxpdXNoQGFsbHdpbm5lcnRlY2guY29tPgo+ID4KPiA+IFRoaXMgaXMgYSB0ZW1wb3Jhcnkg ZHJpdmVyLCBvbmx5IGd1YXJhbnRlZWQgdG8gd29yayBvbiBhbGx3aW5uZXIKPiA+IEQxLiBJbiBv cmRlciB0byBlbnN1cmUgdGhlIGRldmVsb3BlcidzIGRlbWFuZCBmb3IgbmV0d29yayB1c2FnZS4K Pgo+IFRoYXQgbG9va3MgbGlrZSBzb21lIEFsbHdpbm5lciBCU1AgZHJpdmVyLCBwbGVhc2UgZG9u J3QgZW5kb3JzZSBjb2RlCj4gb2YgdGhpcyBxdWFsaXR5IChqdXN0IGxvb2sgYXQgYWxsIHRoYXQg Y29tbWVudGVkIGNvZGUgYW5kIHRoZSBhdHRlbXB0Cj4gZm9yIGNvbXBpbGUtdGltZSBjb25maWd1 cmF0aW9uKS4KPgo+ID4gSXQgb25seSBjb3VsZCB3b3JrIGF0IDFHcHMgbW9kZS4KPiA+Cj4gPiBU aGUgY29ycmVjdCBnbWFjIGRyaXZlciBzaG91bGQgZm9sbG93IChJIGd1ZXNzKQo+ID4gZHJpdmVy cy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYwo+ID4KPiA+IElmIGFu eW9uZSBpcyBmYW1pbGlhciB3aXRoIGl0IGFuZCBjYW4gaGVscCBwb3J0aW5nLCBJIHdvdWxkIGJl Cj4gPiB2ZXJ5IGdyYXRlZnVsLgo+Cj4gSGF2ZSB5b3UgdHJpZWQgY29tcGlsaW5nIGFuZCB1c2lu ZyB0aGF0IGRyaXZlcj8gSWRlYWxseSBpdCBzaG91bGQganVzdAo+IHdvcmssIExpbnV4IGRyaXZl cnMgYXJlIG1lYW50IHRvIGJlIHBvcnRhYmxlLCBieSBkZXNpZ24uIEFuZCB0aGUgZHJpdmVyCj4g aXMgYWxyZWFkeSBlbmFibGVkIGJ5IENPTVBJTEVfVEVTVC4KSXQgc3RpbGwgbmVlZHMgc29tZSB3 b3JrIHdpdGggZHdtYWMtc3VuOGkuYyBnbHVlIGxheWVyLCBlZzoKdHgvcngtZGVsYXkgc2V0dGlu ZywgY2xrICYgcGlubXV4IGRyaXZlcnMuCgpUaGUgcGF0Y2ggaXMganVzdCB0byBoZWxwIHBlb3Bs ZSB1c2luZyBEMSB3aXRoIEdNQUMgdGVtcG9yYXJpbHkgd2l0aApuZXR3b3JrIGZ1bmN0aW9uLgoK PiBCdXQgSSBndWVzcyB5b3UgbmVlZCBzb21lIGV4dHJhIGNhcmUgdG8gbWFrZSB0aGUgbm9uLWNv aGVyZW50IERNQSB3b3JrPwo+IEkgaGF2ZW4ndCBsb29rZWQgaW4gZGV0YWlsLCBidXQgYXJlIHRo b3NlIG5ldyBDTU9zIGhvb2tlZCBpbnRvIHRoZQo+IGdlbmVyaWMgRE1BIGZyYW1ld29yaz8KWWVz LCB3ZSBoYXZlIHRoZSBzaW1saWFyIHByaW5jaXBsZSB3aXRoIGFybSAmIGNza3kgZm9yIG5vbi1j b2hlcmVudDoKIC0gVXNpbmcgUFRFIGF0dHJpYnV0ZXMgc2V0dGluZyBVc2luZyBQVEUgYXR0cmli dXRlcyB0byBzdXBwb3J0Cl9QQUdFX0lPUkVNQVAgJiBfUEFHRV9XUklURUNPTUJJTkUKIC0gVXNp bmcgQ01PIGluc3RydWN0aW9ucyBkZWFsIFNZTkNfRE1BX0ZPUl9DUFUvREVWSUNFLgoKPgo+IENo ZWVycywKPiBBbmRyZQo+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBMaXUgU2hhb2h1YSA8bGl1c2hAYWxs d2lubmVydGVjaC5jb20+Cj4gPiBUZXN0ZWQtYnk6IEd1byBSZW4gPGd1b3JlbkBrZXJuZWwub3Jn Pgo+ID4gU2lnbmVkLW9mZi1ieTogR3VvIFJlbiA8Z3VvcmVuQGtlcm5lbC5vcmc+Cj4gPiBDYzog TWF4aW1lIFJpcGFyZCA8bXJpcGFyZEBrZXJuZWwub3JnPgo+ID4gQ2M6IENvcmVudGluIExhYmJl IDxjbGFiYmVAYmF5bGlicmUuY29tPgo+ID4gQ2M6IFNhbXVlbCBIb2xsYW5kIDxzYW11ZWxAc2hv bGxhbmQub3JnPgo+ID4gQ2M6IEljZW5vd3kgWmhlbmcgPGljZW5vd3lAYW9zYy5pbz4KPiA+IENj OiBMQUJCRSBDb3JlbnRpbiA8Y2xhYmJlLm1vbnRqb2llQGdtYWlsLmNvbT4KPiA+IENjOiBNaWNo YWVsIFdhbGxlIDxtaWNoYWVsQHdhbGxlLmNjPgo+ID4gQ2M6IENoZW4tWXUgVHNhaSA8d2Vuc0Bj c2llLm9yZz4KPiA+IENjOiBNYXhpbWUgUmlwYXJkIDxtYXhpbWVAY2Vybm8udGVjaD4KPiA+IENj OiBXZWkgRnUgPHdlZnVAcmVkaGF0LmNvbT4KPiA+IENjOiBXZWkgV3UgPGxhenlwYXJzZXJAZ21h aWwuY29tPgo+ID4gU2lnbmVkLW9mZi1ieTogR3VvIFJlbiA8Z3VvcmVuQGxpbnV4LmFsaWJhYmEu Y29tPgo+ID4gLS0tCj4gPiAgLi4uL2Jvb3QvZHRzL2FsbHdpbm5lci9hbGx3aW5uZXItZDEtbmV6 aGEta2l0LmR0cyAgfCAgICAyICstCj4gPiAgYXJjaC9yaXNjdi9ib290L2R0cy9hbGx3aW5uZXIv YWxsd2lubmVyLWQxLmR0c2kgICAgfCAgIDE2ICsKPiA+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC9L Y29uZmlnICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwo+ID4gIGRyaXZlcnMvbmV0L2V0 aGVybmV0L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCj4gPiAgZHJpdmVy cy9uZXQvZXRoZXJuZXQvYWxsd2lubmVydG1wL0tjb25maWcgICAgICAgICAgfCAgIDE3ICsKPiA+ ICBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbGx3aW5uZXJ0bXAvTWFrZWZpbGUgICAgICAgICB8ICAg IDcgKwo+ID4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L2FsbHdpbm5lcnRtcC9zdW54aS1nbWFjLW9w cy5jIHwgIDY5MCArKysrKysKPiA+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbGx3aW5uZXJ0bXAv c3VueGktZ21hYy5jICAgICB8IDIyNDAgKysrKysrKysrKysrKysrKysrKysKPiA+ICBkcml2ZXJz L25ldC9ldGhlcm5ldC9hbGx3aW5uZXJ0bXAvc3VueGktZ21hYy5oICAgICB8ICAyNTggKysrCj4g PiAgZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAyICstCj4gPiAgMTAgZmlsZXMgY2hhbmdlZCwgMzIzMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0 aW9ucygtKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbGx3 aW5uZXJ0bXAvS2NvbmZpZwo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhl cm5ldC9hbGx3aW5uZXJ0bXAvTWFrZWZpbGUKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9uZXQvZXRoZXJuZXQvYWxsd2lubmVydG1wL3N1bnhpLWdtYWMtb3BzLmMKPiA+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxsd2lubmVydG1wL3N1bnhpLWdtYWMu Ywo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbGx3aW5uZXJ0 bXAvc3VueGktZ21hYy5oCj4gPgo+ID4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvYm9vdC9kdHMv YWxsd2lubmVyL2FsbHdpbm5lci1kMS1uZXpoYS1raXQuZHRzIGIvYXJjaC9yaXNjdi9ib290L2R0 cy9hbGx3aW5uZXIvYWxsd2lubmVyLWQxLW5lemhhLWtpdC5kdHMKPiA+IGluZGV4IGNkOWY3Yzku LjMxYjY4MWQgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3Jpc2N2L2Jvb3QvZHRzL2FsbHdpbm5lci9h bGx3aW5uZXItZDEtbmV6aGEta2l0LmR0cwo+ID4gKysrIGIvYXJjaC9yaXNjdi9ib290L2R0cy9h bGx3aW5uZXIvYWxsd2lubmVyLWQxLW5lemhhLWtpdC5kdHMKPiA+IEBAIC0xMSw3ICsxMSw3IEBA Cj4gPiAgICAgICBjb21wYXRpYmxlID0gImFsbHdpbm5lcixkMS1uZXpoYS1raXQiOwo+ID4KPiA+ ICAgICAgIGNob3NlbiB7Cj4gPiAtICAgICAgICAgICAgIGJvb3RhcmdzID0gImNvbnNvbGU9dHR5 UzAsMTE1MjAwIjsKPiA+ICsgICAgICAgICAgICAgYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwx MTUyMDAgcm9vdHdhaXQgaW5pdD0vc2Jpbi9pbml0IHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0x OTIuMTY4LjEwMS4yMDA6L3RtcC9yb290ZnNfbmZzLHYzLHRjcCxub2xvY2sgaXA9MTkyLjE2OC4x MDEuMjMiOwo+ID4gICAgICAgICAgICAgICBzdGRvdXQtcGF0aCA9ICZzZXJpYWwwOwo+ID4gICAg ICAgfTsKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9ib290L2R0cy9hbGx3aW5uZXIv YWxsd2lubmVyLWQxLmR0c2kgYi9hcmNoL3Jpc2N2L2Jvb3QvZHRzL2FsbHdpbm5lci9hbGx3aW5u ZXItZDEuZHRzaQo+ID4gaW5kZXggMTFjZDkzOC4uZDMxN2UxOSAxMDA2NDQKPiA+IC0tLSBhL2Fy Y2gvcmlzY3YvYm9vdC9kdHMvYWxsd2lubmVyL2FsbHdpbm5lci1kMS5kdHNpCj4gPiArKysgYi9h cmNoL3Jpc2N2L2Jvb3QvZHRzL2FsbHdpbm5lci9hbGx3aW5uZXItZDEuZHRzaQo+ID4gQEAgLTgw LDUgKzgwLDIxIEBACj4gPiAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tzID0gPCZkdW1teV9h cGI+Owo+ID4gICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJkaXNhYmxlZCI7Cj4gPiAg ICAgICAgICAgICAgIH07Cj4gPiArCj4gPiArICAgICAgICAgICAgIGV0aEA0NTAwMDAwIHsKPiA+ ICsgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW54aS1nbWFj IjsKPiA+ICsgICAgICAgICAgICAgICAgICAgICByZWcgPSA8MHgwMCAweDQ1MDAwMDAgMHgwMCAw eDEwMDAwIDB4MDAgMHgzMDAwMDMwIDB4MDAgMHgwND47Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgaW50ZXJydXB0cy1leHRlbmRlZCA9IDwmcGxpYyAweDNlIDB4MDQ+Owo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIGludGVycnVwdC1uYW1lcyA9ICJnbWFjaXJxIjsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICBkZXZpY2VfdHlwZSA9ICJnbWFjMCI7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgcGh5LW1vZGUgPSAicmdtaWkiOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHVzZV9lcGh5 MjVtID0gPDB4MDE+Owo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHR4LWRlbGF5ID0gPDB4MDM+ Owo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJ4LWRlbGF5ID0gPDB4MDM+Owo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGdtYWMtcG93ZXIwOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdt YWMtcG93ZXIxOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdtYWMtcG93ZXIyOwo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJva2F5IjsKPiA+ICsgICAgICAgICAgICAgfTsK PiA+ICAgICAgIH07Cj4gPiAgfTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5l dC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZwo+ID4gaW5kZXggMWNkZmYx ZC4uMWY4ZTM3YyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcK PiA+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcKPiA+IEBAIC0xOCw2ICsxOCw3 IEBAIGNvbmZpZyBNRElPCj4gPiAgY29uZmlnIFNVTkdFTV9QSFkKPiA+ICAgICAgIHRyaXN0YXRl Cj4gPgo+ID4gK3NvdXJjZSAiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxsd2lubmVydG1wL0tjb25m aWciCj4gPiAgc291cmNlICJkcml2ZXJzL25ldC9ldGhlcm5ldC8zY29tL0tjb25maWciCj4gPiAg c291cmNlICJkcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL0tjb25maWciCj4gPiAgc291cmNl ICJkcml2ZXJzL25ldC9ldGhlcm5ldC9hZGFwdGVjL0tjb25maWciCj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtl ZmlsZQo+ID4gaW5kZXggY2IzZjkwOC4uM2RhY2MwYyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMv bmV0L2V0aGVybmV0L01ha2VmaWxlCj4gPiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtl ZmlsZQo+ID4gQEAgLTMsNiArMyw3IEBACj4gPiAgIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IG5l dHdvcmsgRXRoZXJuZXQgZGV2aWNlIGRyaXZlcnMuCj4gPiAgIwo+ID4KPiA+ICtvYmoteSArPSBh bGx3aW5uZXJ0bXAvCj4gPiAgb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfM0NPTSkgKz0gM2NvbS8K PiA+ICBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl84MzkwKSArPSA4MzkwLwo+ID4gIG9iai0kKENP TkZJR19ORVRfVkVORE9SX0FDVElPTlMpICs9IGFjdGlvbnMvCj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9uZXQvZXRoZXJuZXQvYWxsd2lubmVydG1wL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhl cm5ldC9hbGx3aW5uZXJ0bXAvS2NvbmZpZwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGlu ZGV4IDAwMDAwMDAwLi40YjdiMzc4Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJz L25ldC9ldGhlcm5ldC9hbGx3aW5uZXJ0bXAvS2NvbmZpZwo+ID4gQEAgLTAsMCArMSwxNyBAQAo+ ID4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ID4gKyMKPiA+ICsj IEFsbHdpbm5lciBkZXZpY2UgY29uZmlndXJhdGlvbgo+ID4gKyMKPiA+ICsKPiA+ICtjb25maWcg U1VOWElfR01BQwo+ID4gKyAgICAgdHJpc3RhdGUgIkFsbHdpbm5lciBHTUFDIHN1cHBvcnQiCj4g PiArICAgICBkZWZhdWx0IHkKPiA+ICsgICAgIGRlcGVuZHMgb24gT0YKPiA+ICsgICAgIHNlbGVj dCBDUkMzMgo+ID4gKyAgICAgc2VsZWN0IE1JSQo+ID4gKyAgICAgc2VsZWN0IFBIWUxJQgo+ID4g KyAgICAgaGVscAo+ID4gKyAgICAgICBTdXBwb3J0IGZvciBBbGx3aW5uZXIgR2lnYWJpdCBldGhl cm5ldCBkcml2ZXIuCj4gPiArCj4gPiArICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMg YSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBUaGUgbW9kdWxlCj4gPiArICAgICAgIHdpbGwgYmUg Y2FsbGVkIHN1bnhpLWdtYWMuCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQv YWxsd2lubmVydG1wL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxsd2lubmVydG1w L01ha2VmaWxlCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAuLjEz NzVkZWEKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fs bHdpbm5lcnRtcC9NYWtlZmlsZQo+ID4gQEAgLTAsMCArMSw3IEBACj4gPiArIyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gPiArIwo+ID4gKyMgTWFrZWZpbGUgZm9yIHRo ZSBBbGx3aW5uZXIgZGV2aWNlIGRyaXZlcnMuCj4gPiArIwo+ID4gKwo+ID4gK29iai0kKENPTkZJ R19TVU5YSV9HTUFDKSArPSBzdW54aV9nbWFjLm8KPiA+ICtzdW54aV9nbWFjLW9ianMgOj0gc3Vu eGktZ21hYy5vIHN1bnhpLWdtYWMtb3BzLm8KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9l dGhlcm5ldC9hbGx3aW5uZXJ0bXAvc3VueGktZ21hYy1vcHMuYyBiL2RyaXZlcnMvbmV0L2V0aGVy bmV0L2FsbHdpbm5lcnRtcC9zdW54aS1nbWFjLW9wcy5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+ID4gaW5kZXggMDAwMDAwMDAuLjI2ZmZkN2YKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBi L2RyaXZlcnMvbmV0L2V0aGVybmV0L2FsbHdpbm5lcnRtcC9zdW54aS1nbWFjLW9wcy5jCj4gPiBA QCAtMCwwICsxLDY5MCBAQAo+ID4gKy8qCj4gPiArICogbGludXgvZHJpdmVycy9uZXQvZXRoZXJu ZXQvYWxsd2lubmVyL3N1bnhpX2dtYWNfb3BzLmMKPiA+ICsgKgo+ID4gKyAqIENvcHlyaWdodCDC qSAyMDE2LTIwMTgsIGZ1emhhb2tlCj4gPiArICogICAgICAgICAgIEF1dGhvcjogZnV6aGFva2Ug PGZ1emhhb2tlQGFsbHdpbm5lcnRlY2guY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBmaWxlIGlz IHByb3ZpZGVkIHVuZGVyIGEgZHVhbCBCU0QvR1BMIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCj4g PiArICogcmVkaXN0cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhl ciBsaWNlbnNlLgo+ID4gKyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gPiArICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+ICsgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICAgICAg IFNlZSB0aGUKPiA+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgo+ID4gKyAqLwo+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiA+ICsjaW5jbHVk ZSA8bGludXgvY3R5cGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+Cj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2lvLmg+Cj4gPiArI2luY2x1ZGUgInN1bnhpLWdtYWMuaCIKPiA+ICsKPiA+ ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCj4gPiArICogICBzdW44aXc2IG9wZXJhdGlvbnMKPiA+ ICsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCj4gPiArI2RlZmluZSBHRVRIX0JBU0lDX0NUTDAgICAg ICAgICAgICAgIDB4MDAKPiA+ICsjZGVmaW5lIEdFVEhfQkFTSUNfQ1RMMSAgICAgICAgICAgICAg MHgwNAo+ID4gKyNkZWZpbmUgR0VUSF9JTlRfU1RBICAgICAgICAgMHgwOAo+ID4gKyNkZWZpbmUg R0VUSF9JTlRfRU4gICAgICAgICAgMHgwQwo+ID4gKyNkZWZpbmUgR0VUSF9UWF9DVEwwICAgICAg ICAgMHgxMAo+ID4gKyNkZWZpbmUgR0VUSF9UWF9DVEwxICAgICAgICAgMHgxNAo+ID4gKyNkZWZp bmUgR0VUSF9UWF9GTE9XX0NUTCAgICAgMHgxQwo+ID4gKyNkZWZpbmUgR0VUSF9UWF9ERVNDX0xJ U1QgICAgMHgyMAo+ID4gKyNkZWZpbmUgR0VUSF9SWF9DVEwwICAgICAgICAgMHgyNAo+ID4gKyNk ZWZpbmUgR0VUSF9SWF9DVEwxICAgICAgICAgMHgyOAo+ID4gKyNkZWZpbmUgR0VUSF9SWF9ERVND X0xJU1QgICAgMHgzNAo+ID4gKyNkZWZpbmUgR0VUSF9SWF9GUk1fRkxUICAgICAgICAgICAgICAw eDM4Cj4gPiArI2RlZmluZSBHRVRIX1JYX0hBU0gwICAgICAgICAgICAgICAgIDB4NDAKPiA+ICsj ZGVmaW5lIEdFVEhfUlhfSEFTSDEgICAgICAgICAgICAgICAgMHg0NAo+ID4gKyNkZWZpbmUgR0VU SF9NRElPX0FERFIgICAgICAgICAgICAgICAweDQ4Cj4gPiArI2RlZmluZSBHRVRIX01ESU9fREFU QSAgICAgICAgICAgICAgIDB4NEMKPiA+ICsjZGVmaW5lIEdFVEhfQUREUl9ISShyZWcpICAgICgw eDUwICsgKChyZWcpIDw8IDMpKQo+ID4gKyNkZWZpbmUgR0VUSF9BRERSX0xPKHJlZykgICAgKDB4 NTQgKyAoKHJlZykgPDwgMykpCj4gPiArI2RlZmluZSBHRVRIX1RYX0RNQV9TVEEgICAgICAgICAg ICAgIDB4QjAKPiA+ICsjZGVmaW5lIEdFVEhfVFhfQ1VSX0RFU0MgICAgIDB4QjQKPiA+ICsjZGVm aW5lIEdFVEhfVFhfQ1VSX0JVRiAgICAgICAgICAgICAgMHhCOAo+ID4gKyNkZWZpbmUgR0VUSF9S WF9ETUFfU1RBICAgICAgICAgICAgICAweEMwCj4gPiArI2RlZmluZSBHRVRIX1JYX0NVUl9ERVND ICAgICAweEM0Cj4gPiArI2RlZmluZSBHRVRIX1JYX0NVUl9CVUYgICAgICAgICAgICAgIDB4QzgK PiA+ICsjZGVmaW5lIEdFVEhfUkdNSUlfU1RBICAgICAgICAgICAgICAgMHhEMAo+ID4gKwo+ID4g KyNkZWZpbmUgUkdNSUlfSVJRICAgICAgICAgICAgMHgwMDAwMDAwMQo+ID4gKwo+ID4gKyNkZWZp bmUgICAgICBDVEwwX0xNICAgICAgICAgICAgICAgICAweDAyCj4gPiArI2RlZmluZSBDVEwwX0RN ICAgICAgICAgICAgICAgICAgICAgIDB4MDEKPiA+ICsjZGVmaW5lIENUTDBfU1BFRUQgICAgICAg ICAgIDB4MDQKPiA+ICsKPiA+ICsjZGVmaW5lIEJVUlNUX0xFTiAgICAgICAgICAgIDB4M0YwMDAw MDAKPiA+ICsjZGVmaW5lIFJYX1RYX1BSSSAgICAgICAgICAgIDB4MDIKPiA+ICsjZGVmaW5lIFNP RlRfUlNUICAgICAgICAgICAgIDB4MDEKPiA+ICsKPiA+ICsjZGVmaW5lIFRYX0ZMVVNIICAgICAg ICAgICAgIDB4MDEKPiA+ICsjZGVmaW5lIFRYX01EICAgICAgICAgICAgICAgICAgICAgICAgMHgw Mgo+ID4gKyNkZWZpbmUgVFhfTkVYVF9GUk0gICAgICAgICAgMHgwNAo+ID4gKyNkZWZpbmUgVFhf VEggICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAKPiA+ICsKPiA+ICsjZGVmaW5lIFJYX0ZM VVNIICAgICAgICAgICAgIDB4MDEKPiA+ICsjZGVmaW5lIFJYX01EICAgICAgICAgICAgICAgICAg ICAgICAgMHgwMgo+ID4gKyNkZWZpbmUgUlhfUlVOVF9GUk0gICAgICAgICAgMHgwNAo+ID4gKyNk ZWZpbmUgUlhfRVJSX0ZSTSAgICAgICAgICAgMHgwOAo+ID4gKyNkZWZpbmUgUlhfVEggICAgICAg ICAgICAgICAgICAgICAgICAweDAwMzAKPiA+ICsKPiA+ICsjZGVmaW5lIFRYX0lOVCAgICAgICAg ICAgICAgICAgICAgICAgMHgwMDAwMQo+ID4gKyNkZWZpbmUgVFhfU1RPUF9JTlQgICAgICAgICAg MHgwMDAwMgo+ID4gKyNkZWZpbmUgVFhfVUFfSU5UICAgICAgICAgICAgMHgwMDAwNAo+ID4gKyNk ZWZpbmUgVFhfVE9VVF9JTlQgICAgICAgICAgMHgwMDAwOAo+ID4gKyNkZWZpbmUgVFhfVU5GX0lO VCAgICAgICAgICAgMHgwMDAxMAo+ID4gKyNkZWZpbmUgVFhfRUFSTFlfSU5UICAgICAgICAgMHgw MDAyMAo+ID4gKyNkZWZpbmUgUlhfSU5UICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwCj4g PiArI2RlZmluZSBSWF9VQV9JTlQgICAgICAgICAgICAweDAwMjAwCj4gPiArI2RlZmluZSBSWF9T VE9QX0lOVCAgICAgICAgICAweDAwNDAwCj4gPiArI2RlZmluZSBSWF9UT1VUX0lOVCAgICAgICAg ICAweDAwODAwCj4gPiArI2RlZmluZSBSWF9PVkZfSU5UICAgICAgICAgICAweDAxMDAwCj4gPiAr I2RlZmluZSBSWF9FQVJMWV9JTlQgICAgICAgICAweDAyMDAwCj4gPiArI2RlZmluZSBMSU5LX1NU QV9JTlQgICAgICAgICAweDEwMDAwCj4gPiArCj4gPiArI2RlZmluZSBESVNDQVJEX0ZSQU1FICAg ICAgICAtMQo+ID4gKyNkZWZpbmUgR09PRF9GUkFNRSAgIDAKPiA+ICsjZGVmaW5lIENTVU1fTk9O RSAgICAyCj4gPiArI2RlZmluZSBMTENfU05BUCAgICAgNAo+ID4gKwo+ID4gKyNkZWZpbmUgU0Zf RE1BX01PREUgICAgICAgICAgMQo+ID4gKwo+ID4gKy8qIEZsb3cgQ29udHJvbCBkZWZpbmVzICov Cj4gPiArI2RlZmluZSBGTE9XX09GRiAgICAgMAo+ID4gKyNkZWZpbmUgRkxPV19SWCAgICAgICAg ICAgICAgMQo+ID4gKyNkZWZpbmUgRkxPV19UWCAgICAgICAgICAgICAgMgo+ID4gKyNkZWZpbmUg RkxPV19BVVRPICAgIChGTE9XX1RYIHwgRkxPV19SWCkKPiA+ICsKPiA+ICsjZGVmaW5lIEhBU0hf VEFCTEVfU0laRSA2NAo+ID4gKyNkZWZpbmUgUEFVU0VfVElNRSAweDIwMAo+ID4gKyNkZWZpbmUg R01BQ19NQVhfVU5JQ0FTVF9BRERSRVNTRVMgICA4Cj4gPiArCj4gPiArLyogUEhZIGFkZHJlc3Mg Ki8KPiA+ICsjZGVmaW5lIFBIWV9BRERSICAgICAgICAgICAgIDB4MDEKPiA+ICsjZGVmaW5lIFBI WV9ETSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCj4gPiArI2RlZmluZSBQSFlfQVVUT19O RUcgICAgICAgICAweDAwMjAKPiA+ICsjZGVmaW5lIFBIWV9QT1dFUkRPV04gICAgICAgICAgICAg ICAgMHgwMDgwCj4gPiArI2RlZmluZSBQSFlfTkVHX0VOICAgICAgICAgICAweDEwMDAKPiA+ICsK PiA+ICsjZGVmaW5lIE1JSV9CVVNZICAgICAgICAgICAgIDB4MDAwMDAwMDEKPiA+ICsjZGVmaW5l IE1JSV9XUklURSAgICAgICAgICAgIDB4MDAwMDAwMDIKPiA+ICsjZGVmaW5lIE1JSV9QSFlfTUFT SyAgICAgICAgIDB4MDAwMEZGQzAKPiA+ICsjZGVmaW5lIE1JSV9DUl9NQVNLICAgICAgICAgIDB4 MDAwMDAwMUMKPiA+ICsjZGVmaW5lIE1JSV9DTEsgICAgICAgICAgICAgICAgICAgICAgMHgwMDAw MDAwOAo+ID4gKy8qIGJpdHMgNCAzIDIgfCBBSEIxIENsb2NrICAgfCBNREMgQ2xvY2sKPiA+ICsg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Cj4gPiArICogICAgICAwIDAgMCB8IDYwIH4gMTAwIE1IeiB8IGRpdi00Mgo+ID4gKyAqICAgICAg MCAwIDEgfCAxMDAgfiAxNTAgTUh6ICAgICAgICB8IGRpdi02Mgo+ID4gKyAqICAgICAgMCAxIDAg fCAyMCB+IDM1IE1IeiAgfCBkaXYtMTYKPiA+ICsgKiAgICAgIDAgMSAxIHwgMzUgfiA2MCBNSHog IHwgZGl2LTI2Cj4gPiArICogICAgICAxIDAgMCB8IDE1MCB+IDI1MCBNSHogICAgICAgIHwgZGl2 LTEwMgo+ID4gKyAqICAgICAgMSAwIDEgfCAyNTAgfiAzMDAgTUh6ICAgICAgICB8IGRpdi0xMjQK PiA+ICsgKiAgICAgIDEgMSB4IHwgUmVzZXJ2ZWQgICAgIHwKPiA+ICsgKi8KPiA+ICsKPiA+ICtl bnVtIGNzdW1faW5zZXJ0aW9uIHsKPiA+ICsgICAgIGNpY19kaXMgICAgICAgICA9IDAsIC8qIENo ZWNrc3VtIEluc2VydGlvbiBDb250cm9sICovCj4gPiArICAgICBjaWNfaXAgICAgICAgICAgPSAx LCAvKiBPbmx5IElQIGhlYWRlciAqLwo+ID4gKyAgICAgY2ljX25vX3BzZSAgICAgID0gMiwgLyog SVAgaGVhZGVyIGJ1dCBub3QgcHNldWRvaGVhZGVyICovCj4gPiArICAgICBjaWNfZnVsbCAgICAg ICAgPSAzLCAvKiBJUCBoZWFkZXIgYW5kIHBzZXVkb2hlYWRlciAqLwo+ID4gK307Cj4gPiArCj4g PiArc3RydWN0IGdldGhkZXYgewo+ID4gKyAgICAgdm9pZCAqaW9iYXNlOwo+ID4gKyAgICAgdW5z aWduZWQgaW50IHZlcjsKPiA+ICsgICAgIHVuc2lnbmVkIGludCBtZGNfZGl2Owo+ID4gK307Cj4g PiArCj4gPiArc3RhdGljIHN0cnVjdCBnZXRoZGV2IGh3ZGV2Owo+ID4gKwo+ID4gKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKPiA+ICsgKiBFeHRlcm5hbCBpbnRlcmZhY2UKPiA+ICsgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCj4gPiArLyogU2V0IGEgcmluZyBkZXNjIGJ1ZmZlciAqLwo+ID4gK3ZvaWQgZGVzY19p bml0X2NoYWluKHN0cnVjdCBkbWFfZGVzYyAqZGVzYywgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNp Z25lZCBpbnQgc2l6ZSkKPiA+ICt7Cj4gPiArICAgICAvKiBJbiBjaGFpbmVkIG1vZGUgdGhlIGRl c2MzIHBvaW50cyB0byB0aGUgbmV4dCBlbGVtZW50IGluIHRoZSByaW5nLgo+ID4gKyAgICAgICog VGhlIGxhdGVzdCBlbGVtZW50IGhhcyB0byBwb2ludCB0byB0aGUgaGVhZC4KPiA+ICsgICAgICAq Lwo+ID4gKyAgICAgaW50IGk7Cj4gPiArICAgICBzdHJ1Y3QgZG1hX2Rlc2MgKnAgPSBkZXNjOwo+ ID4gKyAgICAgdW5zaWduZWQgbG9uZyBkbWFfcGh5ID0gYWRkcjsKPiA+ICsKPiA+ICsgICAgIGZv ciAoaSA9IDA7IGkgPCAoc2l6ZSAtIDEpOyBpKyspIHsKPiA+ICsgICAgICAgICAgICAgZG1hX3Bo eSArPSBzaXplb2Yoc3RydWN0IGRtYV9kZXNjKTsKPiA+ICsgICAgICAgICAgICAgcC0+ZGVzYzMg PSAodW5zaWduZWQgaW50KWRtYV9waHk7Cj4gPiArICAgICAgICAgICAgIC8qIENoYWluIG1vZGUg Ki8KPiA+ICsgICAgICAgICAgICAgcC0+ZGVzYzEuYWxsIHw9ICgxIDw8IDI0KTsKPiA+ICsgICAg ICAgICAgICAgcCsrOwo+ID4gKyAgICAgfQo+ID4gKyAgICAgcC0+ZGVzYzEuYWxsIHw9ICgxIDw8 IDI0KTsKPiA+ICsgICAgIHAtPmRlc2MzID0gKHVuc2lnbmVkIGludClhZGRyOwo+ID4gK30KPiA+ ICsKPiA+ICtpbnQgc3VueGlfbWRpb19yZWFkKHZvaWQgKmlvYmFzZSwgaW50IHBoeWFkZHIsIGlu dCBwaHlyZWcpCj4gPiArewo+ID4gKyAgICAgdW5zaWduZWQgaW50IHZhbHVlID0gMDsKPiA+ICsK PiA+ICsgICAgIC8qIE1hc2sgdGhlIE1EQ19ESVZfUkFUSU8gKi8KPiA+ICsgICAgIHZhbHVlIHw9 ICgoaHdkZXYubWRjX2RpdiAmIDB4MDcpIDw8IDIwKTsKPiA+ICsgICAgIHZhbHVlIHw9ICgoKHBo eWFkZHIgPDwgMTIpICYgKDB4MDAwMUYwMDApKSB8Cj4gPiArICAgICAgICAgICAgICAgICAgICAg KChwaHlyZWcgPDwgNCkgJiAoMHgwMDAwMDdGMCkpIHwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICBNSUlfQlVTWSk7Cj4gPiArCj4gPiArICAgICB3aGlsZSAoKChyZWFkbChpb2Jhc2UgKyBHRVRI X01ESU9fQUREUikpICYgTUlJX0JVU1kpID09IDEpCj4gPiArICAgICAgICAgICAgIDsKPiA+ICsK PiA+ICsgICAgIHdyaXRlbCh2YWx1ZSwgaW9iYXNlICsgR0VUSF9NRElPX0FERFIpOwo+ID4gKyAg ICAgd2hpbGUgKCgocmVhZGwoaW9iYXNlICsgR0VUSF9NRElPX0FERFIpKSAmIE1JSV9CVVNZKSA9 PSAxKQo+ID4gKyAgICAgICAgICAgICA7Cj4gPiArCj4gPiArICAgICByZXR1cm4gKGludClyZWFk bChpb2Jhc2UgKyBHRVRIX01ESU9fREFUQSk7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCBzdW54aV9t ZGlvX3dyaXRlKHZvaWQgKmlvYmFzZSwgaW50IHBoeWFkZHIsIGludCBwaHlyZWcsIHVuc2lnbmVk IHNob3J0IGRhdGEpCj4gPiArewo+ID4gKyAgICAgdW5zaWduZWQgaW50IHZhbHVlOwo+ID4gKwo+ ID4gKyAgICAgdmFsdWUgPSAoKDB4MDcgPDwgMjApICYgcmVhZGwoaW9iYXNlICsgR0VUSF9NRElP X0FERFIpKSB8Cj4gPiArICAgICAgICAgICAgICAoaHdkZXYubWRjX2RpdiA8PCAyMCk7Cj4gPiAr ICAgICB2YWx1ZSB8PSAoKChwaHlhZGRyIDw8IDEyKSAmICgweDAwMDFGMDAwKSkgfAo+ID4gKyAg ICAgICAgICAgICAgICgocGh5cmVnIDw8IDQpICYgKDB4MDAwMDA3RjApKSkgfAo+ID4gKyAgICAg ICAgICAgICAgIE1JSV9XUklURSB8IE1JSV9CVVNZOwo+ID4gKwo+ID4gKyAgICAgLyogV2FpdCB1 bnRpbCBhbnkgZXhpc3RpbmcgTUlJIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSAqLwo+ID4gKyAgICAg d2hpbGUgKCgocmVhZGwoaW9iYXNlICsgR0VUSF9NRElPX0FERFIpKSAmIE1JSV9CVVNZKSA9PSAx KQo+ID4gKyAgICAgICAgICAgICA7Cj4gPiArCj4gPiArICAgICAvKiBTZXQgdGhlIE1JSSBhZGRy ZXNzIHJlZ2lzdGVyIHRvIHdyaXRlICovCj4gPiArICAgICB3cml0ZWwoZGF0YSwgaW9iYXNlICsg R0VUSF9NRElPX0RBVEEpOwo+ID4gKyAgICAgd3JpdGVsKHZhbHVlLCBpb2Jhc2UgKyBHRVRIX01E SU9fQUREUik7Cj4gPiArCj4gPiArICAgICAvKiBXYWl0IHVudGlsIGFueSBleGlzdGluZyBNSUkg b3BlcmF0aW9uIGlzIGNvbXBsZXRlICovCj4gPiArICAgICB3aGlsZSAoKChyZWFkbChpb2Jhc2Ug KyBHRVRIX01ESU9fQUREUikpICYgTUlJX0JVU1kpID09IDEpCj4gPiArICAgICAgICAgICAgIDsK PiA+ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgc3VueGlfbWRp b19yZXNldCh2b2lkICppb2Jhc2UpCj4gPiArewo+ID4gKyAgICAgd3JpdGVsKCg0IDw8IDIpLCBp b2Jhc2UgKyBHRVRIX01ESU9fQUREUik7Cj4gPiArICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiAr Cj4gPiArdm9pZCBzdW54aV9zZXRfbGlua19tb2RlKHZvaWQgKmlvYmFzZSwgaW50IGR1cGxleCwg aW50IHNwZWVkKQo+ID4gK3sKPiA+ICsgICAgIHVuc2lnbmVkIGludCBjdHJsID0gcmVhZGwoaW9i YXNlICsgR0VUSF9CQVNJQ19DVEwwKTsKPiA+ICsKPiA+ICsgICAgIGlmICghZHVwbGV4KQo+ID4g KyAgICAgICAgICAgICBjdHJsICY9IH5DVEwwX0RNOwo+ID4gKyAgICAgZWxzZQo+ID4gKyAgICAg ICAgICAgICBjdHJsIHw9IENUTDBfRE07Cj4gPiArCj4gPiArICAgICBzd2l0Y2ggKHNwZWVkKSB7 Cj4gPiArICAgICBjYXNlIDEwMDA6Cj4gPiArICAgICAgICAgICAgIGN0cmwgJj0gfjB4MEM7Cj4g PiArICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgY2FzZSAxMDA6Cj4gPiArICAgICBjYXNl IDEwOgo+ID4gKyAgICAgZGVmYXVsdDoKPiA+ICsgICAgICAgICAgICAgY3RybCB8PSAweDA4Owo+ ID4gKyAgICAgICAgICAgICBpZiAoc3BlZWQgPT0gMTAwKQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIGN0cmwgfD0gMHgwNDsKPiA+ICsgICAgICAgICAgICAgZWxzZQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGN0cmwgJj0gfjB4MDQ7Cj4gPiArICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAg ICAgfQo+ID4gKwo+ID4gKyAgICAgd3JpdGVsKGN0cmwsIGlvYmFzZSArIEdFVEhfQkFTSUNfQ1RM MCk7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgc3VueGlfbWFjX2xvb3BiYWNrKHZvaWQgKmlvYmFz ZSwgaW50IGVuYWJsZSkKPiA+ICt7Cj4gPiArICAgICBpbnQgcmVnOwo+ID4gKwo+ID4gKyAgICAg cmVnID0gcmVhZGwoaW9iYXNlICsgR0VUSF9CQVNJQ19DVEwwKTsKPiA+ICsgICAgIGlmIChlbmFi bGUpCj4gPiArICAgICAgICAgICAgIHJlZyB8PSAweDAyOwo+ID4gKyAgICAgZWxzZQo+ID4gKyAg ICAgICAgICAgICByZWcgJj0gfjB4MDI7Cj4gPiArICAgICB3cml0ZWwocmVnLCBpb2Jhc2UgKyBH RVRIX0JBU0lDX0NUTDApOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIHN1bnhpX2Zsb3dfY3RybCh2 b2lkICppb2Jhc2UsIGludCBkdXBsZXgsIGludCBmYywgaW50IHBhdXNlKQo+ID4gK3sKPiA+ICsg ICAgIHVuc2lnbmVkIGludCBmbG93ID0gMDsKPiA+ICsKPiA+ICsgICAgIGlmIChmYyAmIEZMT1df UlgpIHsKPiA+ICsgICAgICAgICAgICAgZmxvdyA9IHJlYWRsKGlvYmFzZSArIEdFVEhfUlhfQ1RM MCk7Cj4gPiArICAgICAgICAgICAgIGZsb3cgfD0gMHgxMDAwMDsKPiA+ICsgICAgICAgICAgICAg d3JpdGVsKGZsb3csIGlvYmFzZSArIEdFVEhfUlhfQ1RMMCk7Cj4gPiArICAgICB9Cj4gPiArCj4g PiArICAgICBpZiAoZmMgJiBGTE9XX1RYKSB7Cj4gPiArICAgICAgICAgICAgIGZsb3cgPSByZWFk bChpb2Jhc2UgKyBHRVRIX1RYX0ZMT1dfQ1RMKTsKPiA+ICsgICAgICAgICAgICAgZmxvdyB8PSAw eDAwMDAxOwo+ID4gKyAgICAgICAgICAgICB3cml0ZWwoZmxvdywgaW9iYXNlICsgR0VUSF9UWF9G TE9XX0NUTCk7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICBpZiAoZHVwbGV4KSB7Cj4gPiAr ICAgICAgICAgICAgIGZsb3cgPSByZWFkbChpb2Jhc2UgKyBHRVRIX1RYX0ZMT1dfQ1RMKTsKPiA+ ICsgICAgICAgICAgICAgZmxvdyB8PSAocGF1c2UgPDwgNCk7Cj4gPiArICAgICAgICAgICAgIHdy aXRlbChmbG93LCBpb2Jhc2UgKyBHRVRIX1RYX0ZMT1dfQ1RMKTsKPiA+ICsgICAgIH0KPiA+ICt9 Cj4gPiArCj4gPiAraW50IHN1bnhpX2ludF9zdGF0dXModm9pZCAqaW9iYXNlLCBzdHJ1Y3QgZ2V0 aF9leHRyYV9zdGF0cyAqeCkKPiA+ICt7Cj4gPiArICAgICBpbnQgcmV0ID0gMDsKPiA+ICsgICAg IC8qIHJlYWQgdGhlIHN0YXR1cyByZWdpc3RlciAoQ1NSNSkgKi8KPiA+ICsgICAgIHVuc2lnbmVk IGludCBpbnRyX3N0YXR1czsKPiA+ICsKPiA+ICsgICAgIGludHJfc3RhdHVzID0gcmVhZGwoaW9i YXNlICsgR0VUSF9SR01JSV9TVEEpOwo+ID4gKyAgICAgaWYgKGludHJfc3RhdHVzICYgUkdNSUlf SVJRKQo+ID4gKyAgICAgICAgICAgICByZWFkbChpb2Jhc2UgKyBHRVRIX1JHTUlJX1NUQSk7Cj4g PiArCj4gPiArICAgICBpbnRyX3N0YXR1cyA9IHJlYWRsKGlvYmFzZSArIEdFVEhfSU5UX1NUQSk7 Cj4gPiArCj4gPiArICAgICAvKiBBQk5PUk1BTCBpbnRlcnJ1cHRzICovCj4gPiArICAgICBpZiAo aW50cl9zdGF0dXMgJiBUWF9VTkZfSU5UKSB7Cj4gPiArICAgICAgICAgICAgIHJldCA9IHR4X2hh cmRfZXJyb3JfYnVtcF90YzsKPiA+ICsgICAgICAgICAgICAgeC0+dHhfdW5kZWZsb3dfaXJxKys7 Cj4gPiArICAgICB9Cj4gPiArICAgICBpZiAoaW50cl9zdGF0dXMgJiBUWF9UT1VUX0lOVCkgewo+ ID4gKyAgICAgICAgICAgICB4LT50eF9qYWJiZXJfaXJxKys7Cj4gPiArICAgICB9Cj4gPiArICAg ICBpZiAoaW50cl9zdGF0dXMgJiBSWF9PVkZfSU5UKSB7Cj4gPiArICAgICAgICAgICAgIHgtPnJ4 X292ZXJmbG93X2lycSsrOwo+ID4gKyAgICAgfQo+ID4gKyAgICAgaWYgKGludHJfc3RhdHVzICYg UlhfVUFfSU5UKSB7Cj4gPiArICAgICAgICAgICAgIHgtPnJ4X2J1Zl91bmF2X2lycSsrOwo+ID4g KyAgICAgfQo+ID4gKyAgICAgaWYgKGludHJfc3RhdHVzICYgUlhfU1RPUF9JTlQpIHsKPiA+ICsg ICAgICAgICAgICAgeC0+cnhfcHJvY2Vzc19zdG9wcGVkX2lycSsrOwo+ID4gKyAgICAgfQo+ID4g KyAgICAgaWYgKGludHJfc3RhdHVzICYgUlhfVE9VVF9JTlQpIHsKPiA+ICsgICAgICAgICAgICAg eC0+cnhfd2F0Y2hkb2dfaXJxKys7Cj4gPiArICAgICB9Cj4gPiArICAgICBpZiAoaW50cl9zdGF0 dXMgJiBUWF9FQVJMWV9JTlQpIHsKPiA+ICsgICAgICAgICAgICAgeC0+dHhfZWFybHlfaXJxKys7 Cj4gPiArICAgICB9Cj4gPiArICAgICBpZiAoaW50cl9zdGF0dXMgJiBUWF9TVE9QX0lOVCkgewo+ ID4gKyAgICAgICAgICAgICB4LT50eF9wcm9jZXNzX3N0b3BwZWRfaXJxKys7Cj4gPiArICAgICAg ICAgICAgIHJldCA9IHR4X2hhcmRfZXJyb3I7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICAv KiBUWC9SWCBOT1JNQUwgaW50ZXJydXB0cyAqLwo+ID4gKyAgICAgaWYgKGludHJfc3RhdHVzICYg KFRYX0lOVCB8IFJYX0lOVCB8IFJYX0VBUkxZX0lOVCB8IFRYX1VBX0lOVCkpIHsKPiA+ICsgICAg ICAgICAgICAgeC0+bm9ybWFsX2lycV9uKys7Cj4gPiArICAgICAgICAgICAgIGlmIChpbnRyX3N0 YXR1cyAmIChUWF9JTlQgfCBSWF9JTlQpKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9 IGhhbmRsZV90eF9yeDsKPiA+ICsgICAgIH0KPiA+ICsgICAgIC8qIENsZWFyIHRoZSBpbnRlcnJ1 cHQgYnkgd3JpdGluZyBhIGxvZ2ljIDEgdG8gdGhlIENTUjVbMTUtMF0gKi8KPiA+ICsgICAgIHdy aXRlbChpbnRyX3N0YXR1cyAmIDB4M0ZGRiwgaW9iYXNlICsgR0VUSF9JTlRfU1RBKTsKPiA+ICsK PiA+ICsgICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgc3VueGlfc3RhcnRf cngodm9pZCAqaW9iYXNlLCB1bnNpZ25lZCBsb25nIHJ4YmFzZSkKPiA+ICt7Cj4gPiArICAgICB1 bnNpZ25lZCBpbnQgdmFsdWU7Cj4gPiArCj4gPiArICAgICAvKiBXcml0ZSB0aGUgYmFzZSBhZGRy ZXNzIG9mIFJ4IGRlc2NyaXB0b3IgbGlzdHMgaW50byByZWdpc3RlcnMgKi8KPiA+ICsgICAgIHdy aXRlbChyeGJhc2UsIGlvYmFzZSArIEdFVEhfUlhfREVTQ19MSVNUKTsKPiA+ICsKPiA+ICsgICAg IHZhbHVlID0gcmVhZGwoaW9iYXNlICsgR0VUSF9SWF9DVEwxKTsKPiA+ICsgICAgIHZhbHVlIHw9 IDB4NDAwMDAwMDA7Cj4gPiArICAgICB3cml0ZWwodmFsdWUsIGlvYmFzZSArIEdFVEhfUlhfQ1RM MSk7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgc3VueGlfc3RvcF9yeCh2b2lkICppb2Jhc2UpCj4g PiArewo+ID4gKyAgICAgdW5zaWduZWQgaW50IHZhbHVlOwo+ID4gKwo+ID4gKyAgICAgdmFsdWUg PSByZWFkbChpb2Jhc2UgKyBHRVRIX1JYX0NUTDEpOwo+ID4gKyAgICAgdmFsdWUgJj0gfjB4NDAw MDAwMDA7Cj4gPiArICAgICB3cml0ZWwodmFsdWUsIGlvYmFzZSArIEdFVEhfUlhfQ1RMMSk7Cj4g PiArfQo+ID4gKwo+ID4gK3ZvaWQgc3VueGlfc3RhcnRfdHgodm9pZCAqaW9iYXNlLCB1bnNpZ25l ZCBsb25nIHR4YmFzZSkKPiA+ICt7Cj4gPiArICAgICB1bnNpZ25lZCBpbnQgdmFsdWU7Cj4gPiAr Cj4gPiArICAgICAvKiBXcml0ZSB0aGUgYmFzZSBhZGRyZXNzIG9mIFR4IGRlc2NyaXB0b3IgbGlz dHMgaW50byByZWdpc3RlcnMgKi8KPiA+ICsgICAgIHdyaXRlbCh0eGJhc2UsIGlvYmFzZSArIEdF VEhfVFhfREVTQ19MSVNUKTsKPiA+ICsKPiA+ICsgICAgIHZhbHVlID0gcmVhZGwoaW9iYXNlICsg R0VUSF9UWF9DVEwxKTsKPiA+ICsgICAgIHZhbHVlIHw9IDB4NDAwMDAwMDA7Cj4gPiArICAgICB3 cml0ZWwodmFsdWUsIGlvYmFzZSArIEdFVEhfVFhfQ1RMMSk7Cj4gPiArfQo+ID4gKwo+ID4gK3Zv aWQgc3VueGlfc3RvcF90eCh2b2lkICppb2Jhc2UpCj4gPiArewo+ID4gKyAgICAgdW5zaWduZWQg aW50IHZhbHVlID0gcmVhZGwoaW9iYXNlICsgR0VUSF9UWF9DVEwxKTsKPiA+ICsKPiA+ICsgICAg IHZhbHVlICY9IH4weDQwMDAwMDAwOwo+ID4gKyAgICAgd3JpdGVsKHZhbHVlLCBpb2Jhc2UgKyBH RVRIX1RYX0NUTDEpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHN1bnhpX2RtYV9pbml0 KHZvaWQgKmlvYmFzZSkKPiA+ICt7Cj4gPiArICAgICB1bnNpZ25lZCBpbnQgdmFsdWU7Cj4gPiAr Cj4gPiArICAgICAvKiBCdXJzdCBzaG91bGQgYmUgOCAqLwo+ID4gKyAgICAgdmFsdWUgPSAoOCA8 PCAyNCk7Cj4gPiArCj4gPiArI2lmZGVmIENPTkZJR19HTUFDX0RBCj4gPiArICAgICB2YWx1ZSB8 PSBSWF9UWF9QUkk7ICAgICAvKiBSeCBoYXMgcHJpb3JpdHkgb3ZlciB0eCAqLwo+ID4gKyNlbmRp Zgo+ID4gKyAgICAgd3JpdGVsKHZhbHVlLCBpb2Jhc2UgKyBHRVRIX0JBU0lDX0NUTDEpOwo+ID4g Kwo+ID4gKyAgICAgLyogTWFzayBpbnRlcnJ1cHRzIGJ5IHdyaXRpbmcgdG8gQ1NSNyAqLwo+ID4g KyAgICAgd3JpdGVsKFJYX0lOVCB8IFRYX1VORl9JTlQsIGlvYmFzZSArIEdFVEhfSU5UX0VOKTsK PiA+ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgc3VueGlfbWFj X2luaXQodm9pZCAqaW9iYXNlLCBpbnQgdHhtb2RlLCBpbnQgcnhtb2RlKQo+ID4gK3sKPiA+ICsg ICAgIHVuc2lnbmVkIGludCB2YWx1ZTsKPiA+ICsKPiA+ICsgICAgIHN1bnhpX2RtYV9pbml0KGlv YmFzZSk7Cj4gPiArCj4gPiArICAgICAvKiBJbml0aWFsaXplIHRoZSBjb3JlIGNvbXBvbmVudCAq Lwo+ID4gKyAgICAgdmFsdWUgPSByZWFkbChpb2Jhc2UgKyBHRVRIX1RYX0NUTDApOwo+ID4gKyAg ICAgdmFsdWUgfD0gKDEgPDwgMzApOyAgICAgLyogSmFiYmVyIERpc2FibGUgKi8KPiA+ICsgICAg IHdyaXRlbCh2YWx1ZSwgaW9iYXNlICsgR0VUSF9UWF9DVEwwKTsKPiA+ICsKPiA+ICsgICAgIHZh bHVlID0gcmVhZGwoaW9iYXNlICsgR0VUSF9SWF9DVEwwKTsKPiA+ICsgICAgIHZhbHVlIHw9ICgx IDw8IDI3KTsgICAgIC8qIEVuYWJsZSBDUkMgJiBJUHY0IEhlYWRlciBDaGVja3N1bSAqLwo+ID4g KyAgICAgdmFsdWUgfD0gKDEgPDwgMjgpOyAgICAgLyogQXV0b21hdGljIFBhZC9DUkMgU3RyaXBw aW5nICovCj4gPiArICAgICB2YWx1ZSB8PSAoMSA8PCAyOSk7ICAgICAvKiBKdW1ibyBGcmFtZSBF bmFibGUgKi8KPiA+ICsgICAgIHdyaXRlbCh2YWx1ZSwgaW9iYXNlICsgR0VUSF9SWF9DVEwwKTsK PiA+ICsKPiA+ICsgICAgIHdyaXRlbCgoaHdkZXYubWRjX2RpdiA8PCAyMCksIGlvYmFzZSArIEdF VEhfTURJT19BRERSKTsgLyogTURDX0RJVl9SQVRJTyAqLwo+ID4gKwo+ID4gKyAgICAgLyogU2V0 IHRoZSBSeCZUeCBtb2RlICovCj4gPiArICAgICB2YWx1ZSA9IHJlYWRsKGlvYmFzZSArIEdFVEhf VFhfQ1RMMSk7Cj4gPiArICAgICBpZiAodHhtb2RlID09IFNGX0RNQV9NT0RFKSB7Cj4gPiArICAg ICAgICAgICAgIC8qIFRyYW5zbWl0IENPRSB0eXBlIDIgY2Fubm90IGJlIGRvbmUgaW4gY3V0LXRo cm91Z2ggbW9kZS4gKi8KPiA+ICsgICAgICAgICAgICAgdmFsdWUgfD0gVFhfTUQ7Cj4gPiArICAg ICAgICAgICAgIC8qIE9wZXJhdGluZyBvbiBzZWNvbmQgZnJhbWUgaW5jcmVhc2UgdGhlIHBlcmZv cm1hbmNlCj4gPiArICAgICAgICAgICAgICAqIGVzcGVjaWFsbHkgd2hlbiB0cmFuc21pdCBzdG9y ZS1hbmQtZm9yd2FyZCBpcyB1c2VkLgo+ID4gKyAgICAgICAgICAgICAgKi8KPiA+ICsgICAgICAg ICAgICAgdmFsdWUgfD0gVFhfTkVYVF9GUk07Cj4gPiArICAgICB9IGVsc2Ugewo+ID4gKyAgICAg ICAgICAgICB2YWx1ZSAmPSB+VFhfTUQ7Cj4gPiArICAgICAgICAgICAgIHZhbHVlICY9IH5UWF9U SDsKPiA+ICsgICAgICAgICAgICAgLyogU2V0IHRoZSB0cmFuc21pdCB0aHJlc2hvbGQgKi8KPiA+ ICsgICAgICAgICAgICAgaWYgKHR4bW9kZSA8PSA2NCkKPiA+ICsgICAgICAgICAgICAgICAgICAg ICB2YWx1ZSB8PSAweDAwMDAwMDAwOwo+ID4gKyAgICAgICAgICAgICBlbHNlIGlmICh0eG1vZGUg PD0gMTI4KQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHw9IDB4MDAwMDAxMDA7Cj4g PiArICAgICAgICAgICAgIGVsc2UgaWYgKHR4bW9kZSA8PSAxOTIpCj4gPiArICAgICAgICAgICAg ICAgICAgICAgdmFsdWUgfD0gMHgwMDAwMDIwMDsKPiA+ICsgICAgICAgICAgICAgZWxzZQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHw9IDB4MDAwMDAzMDA7Cj4gPiArICAgICB9Cj4g PiArICAgICB3cml0ZWwodmFsdWUsIGlvYmFzZSArIEdFVEhfVFhfQ1RMMSk7Cj4gPiArCj4gPiAr ICAgICB2YWx1ZSA9IHJlYWRsKGlvYmFzZSArIEdFVEhfUlhfQ1RMMSk7Cj4gPiArICAgICBpZiAo cnhtb2RlID09IFNGX0RNQV9NT0RFKSB7Cj4gPiArICAgICAgICAgICAgIHZhbHVlIHw9IFJYX01E Owo+ID4gKyAgICAgfSBlbHNlIHsKPiA+ICsgICAgICAgICAgICAgdmFsdWUgJj0gflJYX01EOwo+ ID4gKyAgICAgICAgICAgICB2YWx1ZSAmPSB+UlhfVEg7Cj4gPiArICAgICAgICAgICAgIGlmIChy eG1vZGUgPD0gMzIpCj4gPiArICAgICAgICAgICAgICAgICAgICAgdmFsdWUgfD0gMHgxMDsKPiA+ ICsgICAgICAgICAgICAgZWxzZSBpZiAocnhtb2RlIDw9IDY0KQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIHZhbHVlIHw9IDB4MDA7Cj4gPiArICAgICAgICAgICAgIGVsc2UgaWYgKHJ4bW9kZSA8 PSA5NikKPiA+ICsgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB8PSAweDIwOwo+ID4gKyAgICAg ICAgICAgICBlbHNlCj4gPiArICAgICAgICAgICAgICAgICAgICAgdmFsdWUgfD0gMHgzMDsKPiA+ ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIC8qIEZvcndhcmQgZnJhbWVzIHdpdGggZXJyb3IgYW5k IHVuZGVyc2l6ZWQgZ29vZCBmcmFtZS4gKi8KPiA+ICsgICAgIHZhbHVlIHw9IChSWF9FUlJfRlJN IHwgUlhfUlVOVF9GUk0pOwo+ID4gKwo+ID4gKyAgICAgd3JpdGVsKHZhbHVlLCBpb2Jhc2UgKyBH RVRIX1JYX0NUTDEpOwo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4g K3ZvaWQgc3VueGlfaGFzaF9maWx0ZXIodm9pZCAqaW9iYXNlLCB1bnNpZ25lZCBsb25nIGxvdywg dW5zaWduZWQgbG9uZyBoaWdoKQo+ID4gK3sKPiA+ICsgICAgIHdyaXRlbChoaWdoLCBpb2Jhc2Ug KyBHRVRIX1JYX0hBU0gwKTsKPiA+ICsgICAgIHdyaXRlbChsb3csIGlvYmFzZSArIEdFVEhfUlhf SEFTSDEpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIHN1bnhpX3NldF9maWx0ZXIodm9pZCAqaW9i YXNlLCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+ID4gK3sKPiA+ICsgICAgIGludCB0bXBfZmxhZ3Mg PSAwOwo+ID4gKwo+ID4gKyAgICAgdG1wX2ZsYWdzIHw9ICgoZmxhZ3MgPj4gMzEpIHwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAoKGZsYWdzID4+IDkpICYgMHgwMDAwMDAwMikgfAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICgoZmxhZ3MgPDwgMSkgJiAweDAwMDAwMDEwKSB8Cj4gPiArICAg ICAgICAgICAgICAgICAgICAgKChmbGFncyA+PiAzKSAmIDB4MDAwMDAwNjApIHwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAoKGZsYWdzIDw8IDcpICYgMHgwMDAwMDMwMCkgfAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICgoZmxhZ3MgPDwgNikgJiAweDAwMDAzMDAwKSB8Cj4gPiArICAgICAg ICAgICAgICAgICAgICAgKChmbGFncyA8PCAxMikgJiAweDAwMDMwMDAwKSB8Cj4gPiArICAgICAg ICAgICAgICAgICAgICAgKGZsYWdzIDw8IDMxKSk7Cj4gPiArCj4gPiArICAgICB3cml0ZWwodG1w X2ZsYWdzLCBpb2Jhc2UgKyBHRVRIX1JYX0ZSTV9GTFQpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lk IHN1bnhpX3NldF91bWFjKHZvaWQgKmlvYmFzZSwgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlu ZGV4KQo+ID4gK3sKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgZGF0YTsKPiA+ICsKPiA+ICsgICAg IGRhdGEgPSAoYWRkcls1XSA8PCA4KSB8IGFkZHJbNF07Cj4gPiArICAgICB3cml0ZWwoZGF0YSwg aW9iYXNlICsgR0VUSF9BRERSX0hJKGluZGV4KSk7Cj4gPiArICAgICBkYXRhID0gKGFkZHJbM10g PDwgMjQpIHwgKGFkZHJbMl0gPDwgMTYpIHwgKGFkZHJbMV0gPDwgOCkgfCBhZGRyWzBdOwo+ID4g KyAgICAgd3JpdGVsKGRhdGEsIGlvYmFzZSArIEdFVEhfQUREUl9MTyhpbmRleCkpOwo+ID4gK30K PiA+ICsKPiA+ICt2b2lkIHN1bnhpX21hY19lbmFibGUodm9pZCAqaW9iYXNlKQo+ID4gK3sKPiA+ ICsgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7Cj4gPiArCj4gPiArICAgICB2YWx1ZSA9IHJlYWRs KGlvYmFzZSArIEdFVEhfVFhfQ1RMMCk7Cj4gPiArICAgICB2YWx1ZSB8PSAoMSA8PCAzMSk7Cj4g PiArICAgICB3cml0ZWwodmFsdWUsIGlvYmFzZSArIEdFVEhfVFhfQ1RMMCk7Cj4gPiArCj4gPiAr ICAgICB2YWx1ZSA9IHJlYWRsKGlvYmFzZSArIEdFVEhfUlhfQ1RMMCk7Cj4gPiArICAgICB2YWx1 ZSB8PSAoMSA8PCAzMSk7Cj4gPiArICAgICB3cml0ZWwodmFsdWUsIGlvYmFzZSArIEdFVEhfUlhf Q1RMMCk7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgc3VueGlfbWFjX2Rpc2FibGUodm9pZCAqaW9i YXNlKQo+ID4gK3sKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7Cj4gPiArCj4gPiArICAg ICB2YWx1ZSA9IHJlYWRsKGlvYmFzZSArIEdFVEhfVFhfQ1RMMCk7Cj4gPiArICAgICB2YWx1ZSAm PSB+KDEgPDwgMzEpOwo+ID4gKyAgICAgd3JpdGVsKHZhbHVlLCBpb2Jhc2UgKyBHRVRIX1RYX0NU TDApOwo+ID4gKwo+ID4gKyAgICAgdmFsdWUgPSByZWFkbChpb2Jhc2UgKyBHRVRIX1JYX0NUTDAp Owo+ID4gKyAgICAgdmFsdWUgJj0gfigxIDw8IDMxKTsKPiA+ICsgICAgIHdyaXRlbCh2YWx1ZSwg aW9iYXNlICsgR0VUSF9SWF9DVEwwKTsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBzdW54aV90eF9w b2xsKHZvaWQgKmlvYmFzZSkKPiA+ICt7Cj4gPiArICAgICB1bnNpZ25lZCBpbnQgdmFsdWU7Cj4g PiArCj4gPiArICAgICB2YWx1ZSA9IHJlYWRsKGlvYmFzZSArIEdFVEhfVFhfQ1RMMSk7Cj4gPiAr ICAgICB3cml0ZWwodmFsdWUgfCAweDgwMDAwMDAwLCBpb2Jhc2UgKyBHRVRIX1RYX0NUTDEpOwo+ ID4gK30KPiA+ICsKPiA+ICt2b2lkIHN1bnhpX3J4X3BvbGwodm9pZCAqaW9iYXNlKQo+ID4gK3sK PiA+ICsgICAgIHVuc2lnbmVkIGludCB2YWx1ZTsKPiA+ICsKPiA+ICsgICAgIHZhbHVlID0gcmVh ZGwoaW9iYXNlICsgR0VUSF9SWF9DVEwxKTsKPiA+ICsgICAgIHdyaXRlbCh2YWx1ZSB8IDB4ODAw MDAwMDAsIGlvYmFzZSArIEdFVEhfUlhfQ1RMMSk7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgc3Vu eGlfaW50X2VuYWJsZSh2b2lkICppb2Jhc2UpCj4gPiArewo+ID4gKyAgICAgd3JpdGVsKFJYX0lO VCB8IFRYX1VORl9JTlQsIGlvYmFzZSArIEdFVEhfSU5UX0VOKTsKPiA+ICt9Cj4gPiArCj4gPiAr dm9pZCBzdW54aV9pbnRfZGlzYWJsZSh2b2lkICppb2Jhc2UpCj4gPiArewo+ID4gKyAgICAgd3Jp dGVsKDAsIGlvYmFzZSArIEdFVEhfSU5UX0VOKTsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBkZXNj X2J1Zl9zZXQoc3RydWN0IGRtYV9kZXNjICpkZXNjLCB1bnNpZ25lZCBsb25nIHBhZGRyLCBpbnQg c2l6ZSkKPiA+ICt7Cj4gPiArICAgICBkZXNjLT5kZXNjMS5hbGwgJj0gKH4oKDEgPDwgMTEpIC0g MSkpOwo+ID4gKyAgICAgZGVzYy0+ZGVzYzEuYWxsIHw9IChzaXplICYgKCgxIDw8IDExKSAtIDEp KTsKPiA+ICsgICAgIGRlc2MtPmRlc2MyID0gcGFkZHI7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQg ZGVzY19zZXRfb3duKHN0cnVjdCBkbWFfZGVzYyAqZGVzYykKPiA+ICt7Cj4gPiArICAgICBkZXNj LT5kZXNjMC5hbGwgfD0gMHg4MDAwMDAwMDsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBkZXNjX3R4 X2Nsb3NlKHN0cnVjdCBkbWFfZGVzYyAqZmlyc3QsIHN0cnVjdCBkbWFfZGVzYyAqZW5kLCBpbnQg Y3N1bV9pbnNlcnQpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IGRtYV9kZXNjICpkZXNjID0gZmly c3Q7Cj4gPiArCj4gPiArICAgICBmaXJzdC0+ZGVzYzEudHguZmlyc3Rfc2cgPSAxOwo+ID4gKyAg ICAgZW5kLT5kZXNjMS50eC5sYXN0X3NlZyA9IDE7Cj4gPiArICAgICBlbmQtPmRlc2MxLnR4Lmlu dGVycnVwdCA9IDE7Cj4gPiArCj4gPiArICAgICBpZiAoY3N1bV9pbnNlcnQpCj4gPiArICAgICAg ICAgICAgIGRvIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBkZXNjLT5kZXNjMS50eC5jaWMg PSAzOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRlc2MrKzsKPiA+ICsgICAgICAgICAgICAg fSB3aGlsZSAoZGVzYyA8PSBlbmQpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIGRlc2NfaW5pdChz dHJ1Y3QgZG1hX2Rlc2MgKmRlc2MpCj4gPiArewo+ID4gKyAgICAgZGVzYy0+ZGVzYzEuYWxsID0g MDsKPiA+ICsgICAgIGRlc2MtPmRlc2MyICA9IDA7Cj4gPiArCj4gPiArICAgICBkZXNjLT5kZXNj MS5hbGwgfD0gKDEgPDwgMjQpOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgZGVzY19nZXRfdHhfc3Rh dHVzKHN0cnVjdCBkbWFfZGVzYyAqZGVzYywgc3RydWN0IGdldGhfZXh0cmFfc3RhdHMgKngpCj4g PiArewo+ID4gKyAgICAgaW50IHJldCA9IDA7Cj4gPiArCj4gPiArICAgICBpZiAoZGVzYy0+ZGVz YzAudHgudW5kZXJfZXJyKSB7Cj4gPiArICAgICAgICAgICAgIHgtPnR4X3VuZGVyZmxvdysrOwo+ ID4gKyAgICAgICAgICAgICByZXQgPSAtMTsKPiA+ICsgICAgIH0KPiA+ICsgICAgIGlmIChkZXNj LT5kZXNjMC50eC5ub19jYXJyKSB7Cj4gPiArICAgICAgICAgICAgIHgtPnR4X2NhcnJpZXIrKzsK PiA+ICsgICAgICAgICAgICAgcmV0ID0gLTE7Cj4gPiArICAgICB9Cj4gPiArICAgICBpZiAoZGVz Yy0+ZGVzYzAudHgubG9zc19jYXJyKSB7Cj4gPiArICAgICAgICAgICAgIHgtPnR4X2xvc3NjYXJy aWVyKys7Cj4gPiArICAgICAgICAgICAgIHJldCA9IC0xOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4g KyNpZiAwCj4gPiArICAgICBpZiAoKGRlc2MtPmRlc2MwLnR4LmV4X2RlZmVycmFsKSB8fAo+ID4g KyAgICAgICAgICAgICAgICAgICAgIChkZXNjLT5kZXNjMC50eC5leF9jb2xsKSB8fAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIChkZXNjLT5kZXNjMC50eC5sYXRlX2NvbGwpKQo+ID4gKyAgICAg ICAgICAgICBzdGF0cy0+Y29sbGlzaW9ucyArPSBkZXNjLT5kZXNjMC50eC5jb2xsX2NudDsKPiA+ ICsjZW5kaWYKPiA+ICsKPiA+ICsgICAgIGlmIChkZXNjLT5kZXNjMC50eC5kZWZlcnJlZCkKPiA+ ICsgICAgICAgICAgICAgeC0+dHhfZGVmZXJyZWQrKzsKPiA+ICsKPiA+ICsgICAgIHJldHVybiBy ZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCBkZXNjX2J1Zl9nZXRfbGVuKHN0cnVjdCBkbWFfZGVz YyAqZGVzYykKPiA+ICt7Cj4gPiArICAgICByZXR1cm4gKGRlc2MtPmRlc2MxLmFsbCAmICgoMSA8 PCAxMSkgLSAxKSk7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCBkZXNjX2J1Zl9nZXRfYWRkcihzdHJ1 Y3QgZG1hX2Rlc2MgKmRlc2MpCj4gPiArewo+ID4gKyAgICAgcmV0dXJuIGRlc2MtPmRlc2MyOwo+ ID4gK30KPiA+ICsKPiA+ICtpbnQgZGVzY19yeF9mcmFtZV9sZW4oc3RydWN0IGRtYV9kZXNjICpk ZXNjKQo+ID4gK3sKPiA+ICsgICAgIHJldHVybiBkZXNjLT5kZXNjMC5yeC5mcm1fbGVuOwo+ID4g K30KPiA+ICsKPiA+ICtpbnQgZGVzY19nZXRfcnhfc3RhdHVzKHN0cnVjdCBkbWFfZGVzYyAqZGVz Yywgc3RydWN0IGdldGhfZXh0cmFfc3RhdHMgKngpCj4gPiArewo+ID4gKyAgICAgaW50IHJldCA9 IGdvb2RfZnJhbWU7Cj4gPiArCj4gPiArICAgICBpZiAoZGVzYy0+ZGVzYzAucngubGFzdF9kZXNj ID09IDApIHsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIGRpc2NhcmRfZnJhbWU7Cj4gPiArICAg ICB9Cj4gPiArCj4gPiArICAgICBpZiAoZGVzYy0+ZGVzYzAucnguZXJyX3N1bSkgewo+ID4gKyAg ICAgICAgICAgICBpZiAoZGVzYy0+ZGVzYzAucnguZGVzY19lcnIpCj4gPiArICAgICAgICAgICAg ICAgICAgICAgeC0+cnhfZGVzYysrOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICBpZiAoZGVzYy0+ ZGVzYzAucnguc291X2ZpbHRlcikKPiA+ICsgICAgICAgICAgICAgICAgICAgICB4LT5zYV9maWx0 ZXJfZmFpbCsrOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICBpZiAoZGVzYy0+ZGVzYzAucngub3Zl cl9lcnIpCj4gPiArICAgICAgICAgICAgICAgICAgICAgeC0+b3ZlcmZsb3dfZXJyb3IrKzsKPiA+ ICsKPiA+ICsgICAgICAgICAgICAgaWYgKGRlc2MtPmRlc2MwLnJ4LmlwY2hfZXJyKQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHgtPmlwY19jc3VtX2Vycm9yKys7Cj4gPiArCj4gPiArICAgICAg ICAgICAgIGlmIChkZXNjLT5kZXNjMC5yeC5sYXRlX2NvbGwpCj4gPiArICAgICAgICAgICAgICAg ICAgICAgeC0+cnhfY29sbGlzaW9uKys7Cj4gPiArCj4gPiArICAgICAgICAgICAgIGlmIChkZXNj LT5kZXNjMC5yeC5jcmNfZXJyKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHgtPnJ4X2NyYysr Owo+ID4gKwo+ID4gKyAgICAgICAgICAgICByZXQgPSBkaXNjYXJkX2ZyYW1lOwo+ID4gKyAgICAg fQo+ID4gKwo+ID4gKyAgICAgaWYgKGRlc2MtPmRlc2MwLnJ4Lmxlbl9lcnIpIHsKPiA+ICsgICAg ICAgICAgICAgcmV0ID0gZGlzY2FyZF9mcmFtZTsKPiA+ICsgICAgIH0KPiA+ICsgICAgIGlmIChk ZXNjLT5kZXNjMC5yeC5taWlfZXJyKSB7Cj4gPiArICAgICAgICAgICAgIHJldCA9IGRpc2NhcmRf ZnJhbWU7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ ICsKPiA+ICtpbnQgZGVzY19nZXRfb3duKHN0cnVjdCBkbWFfZGVzYyAqZGVzYykKPiA+ICt7Cj4g PiArICAgICByZXR1cm4gZGVzYy0+ZGVzYzAuYWxsICYgMHg4MDAwMDAwMDsKPiA+ICt9Cj4gPiAr Cj4gPiAraW50IGRlc2NfZ2V0X3R4X2xzKHN0cnVjdCBkbWFfZGVzYyAqZGVzYykKPiA+ICt7Cj4g PiArICAgICByZXR1cm4gZGVzYy0+ZGVzYzEudHgubGFzdF9zZWc7Cj4gPiArfQo+ID4gKwo+ID4g K2ludCBzdW54aV9nZXRoX3JlZ2lzdGVyKHZvaWQgKmlvYmFzZSwgaW50IHZlcnNpb24sIHVuc2ln bmVkIGludCBkaXYpCj4gPiArewo+ID4gKyAgICAgaHdkZXYudmVyID0gdmVyc2lvbjsKPiA+ICsg ICAgIGh3ZGV2LmlvYmFzZSA9IGlvYmFzZTsKPiA+ICsgICAgIGh3ZGV2Lm1kY19kaXYgPSBkaXY7 Cj4gPiArCj4gPiArICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiAraW50IHN1bnhpX21h Y19yZXNldCh2b2lkICppb2Jhc2UsIHZvaWQgKCpkZWxheSkoaW50KSwgaW50IG4pCj4gPiArewo+ ID4gKyAgICAgdW5zaWduZWQgaW50IHZhbHVlOwo+ID4gKwo+ID4gKyAgICAgLyogRE1BIFNXIHJl c2V0ICovCj4gPiArICAgICB2YWx1ZSA9IHJlYWRsKGlvYmFzZSArIEdFVEhfQkFTSUNfQ1RMMSk7 Cj4gPiArICAgICB2YWx1ZSB8PSBTT0ZUX1JTVDsKPiA+ICsgICAgIHdyaXRlbCh2YWx1ZSwgaW9i YXNlICsgR0VUSF9CQVNJQ19DVEwxKTsKPiA+ICsKPiA+ICsgICAgIGRlbGF5KG4pOwo+ID4gKwo+ ID4gKyAgICAgcmV0dXJuICEhKHJlYWRsKGlvYmFzZSArIEdFVEhfQkFTSUNfQ1RMMSkgJiBTT0ZU X1JTVCk7Cj4gPiArfQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FsbHdp bm5lcnRtcC9zdW54aS1nbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGx3aW5uZXJ0bXAv c3VueGktZ21hYy5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAu LjBjNjc4NzcKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0 L2FsbHdpbm5lcnRtcC9zdW54aS1nbWFjLmMKPiA+IEBAIC0wLDAgKzEsMjI0MCBAQAo+ID4gKy8q Cj4gPiArICogbGludXgvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxsd2lubmVyL3N1bnhpX2dtYWMu Ywo+ID4gKyAqCj4gPiArICogQ29weXJpZ2h0IMKpIDIwMTYtMjAxOCwgZnV6aGFva2UKPiA+ICsg KiAgICAgICAgICAgQXV0aG9yOiBmdXpoYW9rZSA8ZnV6aGFva2VAYWxsd2lubmVydGVjaC5jb20+ Cj4gPiArICoKPiA+ICsgKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9H UEwgbGljZW5zZS4gIFdoZW4gdXNpbmcgb3IKPiA+ICsgKiByZWRpc3RyaWJ1dGluZyB0aGlzIGZp bGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCj4gPiArICoKPiA+ICsgKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKPiA+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgo+ID4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gICAgICAgU2VlIHRoZQo+ID4gKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gPiArICovCj4gPiArLy8jaW5jbHVk ZSA8bGludXgvY2xrLmg+Cj4gPiArLy8jaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+Cj4g PiArI2luY2x1ZGUgPGxpbnV4L21paS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Cj4g PiArI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5o Pgo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgva2Vy bmVsLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ID4gKyNpbmNsdWRlIDxs aW51eC9kbWEtbWFwcGluZy5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KPiA+ICsvLyNpbmNsdWRlIDxsaW51eC9waW5jdHJsL2NvbnN1bWVyLmg+Cj4gPiArLy8jaW5j bHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2NyeXB0 by5oPgo+ID4gKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+Cj4gPiArI2luY2x1ZGUgPGNyeXB0 by9oYXNoLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ID4gKyNpbmNsdWRlIDxsaW51 eC9zY2F0dGVybGlzdC5oPgo+ID4gKy8vI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1l ci5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9uZXQuaD4KPiA+ICsvLyNpbmNsdWRlIDxsaW51 eC9vZl9ncGlvLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gPiArLy8jaW5jbHVkZSA8 bGludXgvc3VueGktc2lkLmg+Cj4gPiArLy8jaW5jbHVkZSA8bGludXgvc3VueGktZ3Bpby5oPgo+ ID4gKy8vI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+Cj4gPiArI2luY2x1ZGUgInN1bnhpLWdtYWMu aCIKPiA+ICsKPiA+ICsjZGVmaW5lIFNVTlhJX0dNQUNfVkVSU0lPTiAiMS4wLjAiCj4gPiArCj4g PiArI2RlZmluZSBETUFfREVTQ19SWCAgMjU2Cj4gPiArI2RlZmluZSBETUFfREVTQ19UWCAgMjU2 Cj4gPiArI2RlZmluZSBCVURHRVQgICAgICAgICAgICAgICAoZG1hX2Rlc2NfcnggLyA0KQo+ID4g KyNkZWZpbmUgVFhfVEhSRVNIICAgIChkbWFfZGVzY190eCAvIDQpCj4gPiArCj4gPiArI2RlZmlu ZSBIQVNIX1RBQkxFX1NJWkUgICAgICA2NAo+ID4gKyNkZWZpbmUgTUFYX0JVRl9TWiAgIChTWl8y SyAtIDEpCj4gPiArCj4gPiArI2RlZmluZSBQT1dFUl9DSEFOX05VTSAgICAgICAzCj4gPiArCj4g PiArI3VuZGVmIFBLVF9ERUJVRwo+ID4gKyN1bmRlZiBERVNDX1BSSU5UCj4gPiArCj4gPiArI2Rl ZmluZSBjaXJjX2NudChoZWFkLCB0YWlsLCBzaXplKSAoKChoZWFkKSA+ICh0YWlsKSkgPyBcCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaGVhZCkgLSAodGFpbCkp IDogXAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGhlYWQpIC0g KHRhaWwpKSAmICgoc2l6ZSkgLSAxKSkKPiA+ICsKPiA+ICsjZGVmaW5lIGNpcmNfc3BhY2UoaGVh ZCwgdGFpbCwgc2l6ZSkgY2lyY19jbnQoKHRhaWwpLCAoKGhlYWQpICsgMSksIChzaXplKSkKPiA+ ICsKPiA+ICsjZGVmaW5lIGNpcmNfaW5jKG4sIHMpICgoKG4pICsgMSkgJSAocykpCj4gPiArCj4g PiArI2RlZmluZSBHRVRIX01BQ19BRERSRVNTICIwMDowMDowMDowMDowMDowMCIKPiA+ICtzdGF0 aWMgY2hhciAqbWFjX3N0ciA9IEdFVEhfTUFDX0FERFJFU1M7Cj4gPiArbW9kdWxlX3BhcmFtKG1h Y19zdHIsIGNoYXJwLCBTX0lSVUdPIHwgU19JV1VTUik7Cj4gPiArTU9EVUxFX1BBUk1fREVTQyht YWNfc3RyLCAiTUFDIEFkZHJlc3MgU3RyaW5nLih4eDp4eDp4eDp4eDp4eDp4eCkiKTsKPiA+ICsK PiA+ICtzdGF0aWMgaW50IHJ4bW9kZSA9IDE7Cj4gPiArbW9kdWxlX3BhcmFtKHJ4bW9kZSwgaW50 LCBTX0lSVUdPIHwgU19JV1VTUik7Cj4gPiArTU9EVUxFX1BBUk1fREVTQyhyeG1vZGUsICJETUEg dGhyZXNob2xkIGNvbnRyb2wgdmFsdWUiKTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IHR4bW9kZSA9 IDE7Cj4gPiArbW9kdWxlX3BhcmFtKHR4bW9kZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cj4g PiArTU9EVUxFX1BBUk1fREVTQyh0eG1vZGUsICJETUEgdGhyZXNob2xkIGNvbnRyb2wgdmFsdWUi KTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IHBhdXNlID0gMHg0MDA7Cj4gPiArbW9kdWxlX3BhcmFt KHBhdXNlLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKPiA+ICtNT0RVTEVfUEFSTV9ERVNDKHBh dXNlLCAiRmxvdyBDb250cm9sIFBhdXNlIFRpbWUiKTsKPiA+ICsKPiA+ICsjZGVmaW5lIFRYX1RJ TUVPICAgICA1MDAwCj4gPiArc3RhdGljIGludCB3YXRjaGRvZyA9IFRYX1RJTUVPOwo+ID4gK21v ZHVsZV9wYXJhbSh3YXRjaGRvZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cj4gPiArTU9EVUxF X1BBUk1fREVTQyh3YXRjaGRvZywgIlRyYW5zbWl0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIik7 Cj4gPiArCj4gPiArc3RhdGljIGludCBkbWFfZGVzY19yeCA9IERNQV9ERVNDX1JYOwo+ID4gK21v ZHVsZV9wYXJhbShkbWFfZGVzY19yeCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cj4gPiArTU9E VUxFX1BBUk1fREVTQyh3YXRjaGRvZywgIlRoZSBudW1iZXIgb2YgcmVjZWl2ZSdzIGRlc2NyaXB0 b3JzIik7Cj4gPiArCj4gPiArc3RhdGljIGludCBkbWFfZGVzY190eCA9IERNQV9ERVNDX1RYOwo+ ID4gK21vZHVsZV9wYXJhbShkbWFfZGVzY190eCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cj4g PiArTU9EVUxFX1BBUk1fREVTQyh3YXRjaGRvZywgIlRoZSBudW1iZXIgb2YgdHJhbnNtaXQncyBk ZXNjcmlwdG9ycyIpOwo+ID4gKwo+ID4gKy8qIC0gMDogRmxvdyBPZmYKPiA+ICsgKiAtIDE6IFJ4 IEZsb3cKPiA+ICsgKiAtIDI6IFR4IEZsb3cKPiA+ICsgKiAtIDM6IFJ4ICYgVHggRmxvdwo+ID4g KyAqLwo+ID4gK3N0YXRpYyBpbnQgZmxvd19jdHJsOwo+ID4gK21vZHVsZV9wYXJhbShmbG93X2N0 cmwsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwo+ID4gK01PRFVMRV9QQVJNX0RFU0MoZmxvd19j dHJsLCAiRmxvdyBjb250cm9sIFswOiBvZmYsIDE6IHJ4LCAyOiB0eCwgMzogYm90aF0iKTsKPiA+ ICsKPiA+ICtzdHJ1Y3QgZ2V0aF9wcml2IHsKPiA+ICsgICAgIHN0cnVjdCBkbWFfZGVzYyAqZG1h X3R4Owo+ID4gKyAgICAgc3RydWN0IHNrX2J1ZmYgKip0eF9zazsKPiA+ICsgICAgIHVuc2lnbmVk IGludCB0eF9jbGVhbjsKPiA+ICsgICAgIHVuc2lnbmVkIGludCB0eF9kaXJ0eTsKPiA+ICsgICAg IGRtYV9hZGRyX3QgZG1hX3R4X3BoeTsKPiA+ICsKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgYnVm X3N6Owo+ID4gKwo+ID4gKyAgICAgc3RydWN0IGRtYV9kZXNjICpkbWFfcng7Cj4gPiArICAgICBz dHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrOwo+ID4gKyAgICAgdW5zaWduZWQgaW50IHJ4X2NsZWFuOwo+ ID4gKyAgICAgdW5zaWduZWQgaW50IHJ4X2RpcnR5Owo+ID4gKyAgICAgZG1hX2FkZHJfdCBkbWFf cnhfcGh5Owo+ID4gKwo+ID4gKyAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7Cj4gPiArICAg ICBzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gPiArICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsK PiA+ICsKPiA+ICsgICAgIHN0cnVjdCBnZXRoX2V4dHJhX3N0YXRzIHhzdGF0czsKPiA+ICsKPiA+ ICsgICAgIHN0cnVjdCBtaWlfYnVzICptaWk7Cj4gPiArICAgICBpbnQgbGluazsKPiA+ICsgICAg IGludCBzcGVlZDsKPiA+ICsgICAgIGludCBkdXBsZXg7Cj4gPiArI2RlZmluZSBJTlRfUEhZIDAK PiA+ICsjZGVmaW5lIEVYVF9QSFkgMQo+ID4gKyAgICAgaW50IHBoeV9leHQ7Cj4gPiArICAgICBw aHlfaW50ZXJmYWNlX3QgcGh5X2ludGVyZmFjZTsKPiA+ICsKPiA+ICsgICAgIHZvaWQgX19pb21l bSAqYmFzZTsKPiA+ICsgICAgIHZvaWQgX19pb21lbSAqYmFzZV9waHk7Cj4gPiArLyoKPiA+ICsg ICAgIHN0cnVjdCBjbGsgKmdldGhfY2xrOwo+ID4gKyAgICAgc3RydWN0IGNsayAqZXBoeV9jbGs7 Cj4gPiArICAgICBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcmVzZXQ7Cj4gPiArICAgICBzdHJ1Y3Qg cGluY3RybCAqcGluY3RybDsKPiA+ICsqLwo+ID4gKyAgICAgc3RydWN0IHJlZ3VsYXRvciAqZ21h Y19wb3dlcltQT1dFUl9DSEFOX05VTV07Cj4gPiArICAgICBib29sIGlzX3N1c3BlbmQ7Cj4gPiAr ICAgICBpbnQgcGh5cnN0Owo+ID4gKyAgICAgdTggIHJzdF9hY3RpdmVfbG93Owo+ID4gKyAgICAg LyogZGVmaW5pdGlvbiBzcGlubG9jayAqLwo+ID4gKyAgICAgc3BpbmxvY2tfdCBsb2NrOwo+ID4g KyAgICAgc3BpbmxvY2tfdCB0eF9sb2NrOwo+ID4gKwo+ID4gKyAgICAgLyogd2hldGhlciB1c2lu ZyBlcGh5X2NsayAqLwo+ID4gKyAgICAgaW50IHVzZV9lcGh5X2NsazsKPiA+ICsgICAgIGludCBw aHlfYWRkcjsKPiA+ICsKPiA+ICsgICAgIC8qIGFkanVzdCB0cmFuc21pdCBjbG9jayBkZWxheSwg dmFsdWU6IDB+NyAqLwo+ID4gKyAgICAgLyogYWRqdXN0IHJlY2VpdmUgY2xvY2sgZGVsYXksIHZh bHVlOiAwfjMxICovCj4gPiArICAgICB1bnNpZ25lZCBpbnQgdHhfZGVsYXk7Cj4gPiArICAgICB1 bnNpZ25lZCBpbnQgcnhfZGVsYXk7Cj4gPiArCj4gPiArICAgICAvKiByZXN1bWUgd29yayAqLwo+ ID4gKyAgICAgc3RydWN0IHdvcmtfc3RydWN0IGV0aF93b3JrOwo+ID4gK307Cj4gPiArCj4gPiAr c3RhdGljIHU2NCBnZXRoX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKPiA+ICsKPiA+ICt2 b2lkIHN1bnhpX3VkZWxheShpbnQgbikKPiA+ICt7Cj4gPiArICAgICB1ZGVsYXkobik7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZ2V0aF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2 KTsKPiA+ICtzdGF0aWMgaW50IGdldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7Cj4g PiArc3RhdGljIHZvaWQgZ2V0aF90eF9jb21wbGV0ZShzdHJ1Y3QgZ2V0aF9wcml2ICpwcml2KTsK PiA+ICtzdGF0aWMgdm9pZCBnZXRoX3J4X3JlZmlsbChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7 Cj4gPiArCj4gPiArI2lmZGVmIENPTkZJR19HRVRIX0FUVFJTCj4gPiArc3RhdGljIHNzaXplX3Qg YWRqdXN0X2Jnc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1 dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiA+ICt7Cj4gPiArICAgICBpbnQgdmFsdWUgPSAwOwo+ID4g KyAgICAgdTMyIGVmdXNlX3ZhbHVlOwo+ID4gKyAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYg PSB0b19uZXRfZGV2KGRldik7Cj4gPiArICAgICBzdHJ1Y3QgZ2V0aF9wcml2ICpwcml2ID0gbmV0 ZGV2X3ByaXYobmRldik7Cj4gPiArCj4gPiArICAgICBpZiAocHJpdi0+cGh5X2V4dCA9PSBJTlRf UEhZKSB7Cj4gPiArICAgICAgICAgICAgIHZhbHVlID0gcmVhZGwocHJpdi0+YmFzZV9waHkpID4+ IDI4Owo+ID4gKyAgICAgICAgICAgICBpZiAoc3VueGlfZWZ1c2VfcmVhZChFRlVTRV9PRU1fTkFN RSwgJmVmdXNlX3ZhbHVlKSAhPSAwKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByX2Vycigi Z2V0IFBIWSBlZnVzZSBmYWlsIVxuIik7Cj4gPiArICAgICAgICAgICAgIGVsc2UKPiA+ICsjaWYg SVNfRU5BQkxFRChDT05GSUdfQVJDSF9TVU41MElXMikKPiA+ICsgICAgICAgICAgICAgICAgICAg ICB2YWx1ZSA9IHZhbHVlIC0gKChlZnVzZV92YWx1ZSA+PiAyNCkgJiAweDBGKTsKPiA+ICsjZWxz ZQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByX3dhcm4oIm1pc3MgY29uZmlnIGNvbWUgZnJv bSBlZnVzZSFcbiIpOwo+ID4gKyNlbmRpZgo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgcmV0 dXJuIHNwcmludGYoYnVmLCAiYmdzOiAlZFxuIiwgdmFsdWUpOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgc3NpemVfdCBhZGp1c3RfYmdzX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKPiA+ICt7Cj4gPiArICAgICB1bnNpZ25l ZCBpbnQgb3V0ID0gMDsKPiA+ICsgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0 X2RldihkZXYpOwo+ID4gKyAgICAgc3RydWN0IGdldGhfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2 KG5kZXYpOwo+ID4gKyAgICAgdTMyIGNsa192YWx1ZSA9IHJlYWRsKHByaXYtPmJhc2VfcGh5KTsK PiA+ICsgICAgIHUzMiBlZnVzZV92YWx1ZTsKPiA+ICsKPiA+ICsgICAgIG91dCA9IHNpbXBsZV9z dHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwo+ID4gKwo+ID4gKyAgICAgaWYgKHByaXYtPnBoeV9leHQg PT0gSU5UX1BIWSkgewo+ID4gKyAgICAgICAgICAgICBjbGtfdmFsdWUgJj0gfigweEYgPDwgMjgp Owo+ID4gKyAgICAgICAgICAgICBpZiAoc3VueGlfZWZ1c2VfcmVhZChFRlVTRV9PRU1fTkFNRSwg JmVmdXNlX3ZhbHVlKSAhPSAwKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByX2VycigiZ2V0 IFBIWSBlZnVzZSBmYWlsIVxuIik7Cj4gPiArICAgICAgICAgICAgIGVsc2UKPiA+ICsjaWYgSVNf RU5BQkxFRChDT05GSUdfQVJDSF9TVU41MElXMikKPiA+ICsgICAgICAgICAgICAgICAgICAgICBj bGtfdmFsdWUgfD0gKCgoZWZ1c2VfdmFsdWUgPj4gMjQpICYgMHgwRikgKyBvdXQpIDw8IDI4Owo+ ID4gKyNlbHNlCj4gPiArICAgICAgICAgICAgICAgICAgICAgcHJfd2FybigibWlzcyBjb25maWcg Y29tZSBmcm9tIGVmdXNlIVxuIik7Cj4gPiArI2VuZGlmCj4gPiArICAgICB9Cj4gPiArCj4gPiAr ICAgICB3cml0ZWwoY2xrX3ZhbHVlLCBwcml2LT5iYXNlX3BoeSk7Cj4gPiArCj4gPiArICAgICBy ZXR1cm4gY291bnQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZSBhZGp1c3RfcmVnW10gPSB7Cj4gPiArICAgICBfX0FUVFIoYWRqdXN0X2JncywgMDY2NCwg YWRqdXN0X2Jnc19zaG93LCBhZGp1c3RfYmdzX3dyaXRlKSwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0 YXRpYyBpbnQgZ2V0aF9jcmVhdGVfYXR0cnMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCj4gPiAr ewo+ID4gKyAgICAgaW50IGosIHJldDsKPiA+ICsKPiA+ICsgICAgIGZvciAoaiA9IDA7IGogPCBB UlJBWV9TSVpFKGFkanVzdF9yZWcpOyBqKyspIHsKPiA+ICsgICAgICAgICAgICAgcmV0ID0gZGV2 aWNlX2NyZWF0ZV9maWxlKCZuZGV2LT5kZXYsICZhZGp1c3RfcmVnW2pdKTsKPiA+ICsgICAgICAg ICAgICAgaWYgKHJldCkKPiA+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIHN5c2ZzX2ZhaWxl ZDsKPiA+ICsgICAgIH0KPiA+ICsgICAgIGdvdG8gc3VjY2VlZDsKPiA+ICsKPiA+ICtzeXNmc19m YWlsZWQ6Cj4gPiArICAgICB3aGlsZSAoai0tKQo+ID4gKyAgICAgICAgICAgICBkZXZpY2VfcmVt b3ZlX2ZpbGUoJm5kZXYtPmRldiwgJmFkanVzdF9yZWdbal0pOwo+ID4gK3N1Y2NlZWQ6Cj4gPiAr ICAgICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICsjaWZkZWYgREVC VUcKPiA+ICtzdGF0aWMgdm9pZCBkZXNjX3ByaW50KHN0cnVjdCBkbWFfZGVzYyAqZGVzYywgaW50 IHNpemUpCj4gPiArewo+ID4gKyNpZmRlZiBERVNDX1BSSU5UCj4gPiArICAgICBpbnQgaTsKPiA+ ICsKPiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKPiA+ICsgICAgICAgICAg ICAgdTMyICp4ID0gKHUzMiAqKShkZXNjICsgaSk7Cj4gPiArCj4gPiArICAgICAgICAgICAgIHBy X2luZm8oIlx0JWQgWzB4JTA4bHhdOiAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGksICh1bnNpZ25lZCBsb25nKSgmZGVzY1tpXSksCj4gPiArICAgICAg ICAgICAgICAgICAgICAgeFswXSwgeFsxXSwgeFsyXSwgeFszXSk7Cj4gPiArICAgICB9Cj4gPiAr ICAgICBwcl9pbmZvKCJcbiIpOwo+ID4gKyNlbmRpZgo+ID4gK30KPiA+ICsjZW5kaWYKPiA+ICsK PiA+ICtzdGF0aWMgc3NpemVfdCBleHRyYV90eF9zdGF0c19zaG93KHN0cnVjdCBkZXZpY2UgKmRl diwKPiA+ICsgICAgICAgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIg KmJ1ZikKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOwo+ID4gKyAgICAgc3RydWN0IGdldGhfcHJpdiAqcHJpdiA9IG5ldGRldl9w cml2KG5kZXYpOwo+ID4gKwo+ID4gKyAgICAgaWYgKCFkZXYpIHsKPiA+ICsgICAgICAgICAgICAg cHJfZXJyKCJBcmdtZW50IGlzIGludmFsaWRcbiIpOwo+ID4gKyAgICAgICAgICAgICByZXR1cm4g MDsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIGlmICghbmRldikgewo+ID4gKyAgICAgICAg ICAgICBwcl9lcnIoIk5ldCBkZXZpY2UgaXMgbnVsbFxuIik7Cj4gPiArICAgICAgICAgICAgIHJl dHVybiAwOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIHNwcmludGYoYnVmLCAi dHhfdW5kZXJmbG93OiAlbHVcbnR4X2NhcnJpZXI6ICVsdVxuIgo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICJ0eF9sb3NzY2FycmllcjogJWx1XG52bGFuX3RhZzogJWx1XG4iCj4gPiArICAgICAg ICAgICAgICAgICAgICAgInR4X2RlZmVycmVkOiAlbHVcbnR4X3ZsYW46ICVsdVxuIgo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICJ0eF9qYWJiZXI6ICVsdVxudHhfZnJhbWVfZmx1c2hlZDogJWx1 XG4iCj4gPiArICAgICAgICAgICAgICAgICAgICAgInR4X3BheWxvYWRfZXJyb3I6ICVsdVxudHhf aXBfaGVhZGVyX2Vycm9yOiAlbHVcblxuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICBwcml2 LT54c3RhdHMudHhfdW5kZXJmbG93LCBwcml2LT54c3RhdHMudHhfY2FycmllciwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICBwcml2LT54c3RhdHMudHhfbG9zc2NhcnJpZXIsIHByaXYtPnhzdGF0 cy52bGFuX3RhZywKPiA+ICsgICAgICAgICAgICAgICAgICAgICBwcml2LT54c3RhdHMudHhfZGVm ZXJyZWQsIHByaXYtPnhzdGF0cy50eF92bGFuLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHBy aXYtPnhzdGF0cy50eF9qYWJiZXIsIHByaXYtPnhzdGF0cy50eF9mcmFtZV9mbHVzaGVkLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgIHByaXYtPnhzdGF0cy50eF9wYXlsb2FkX2Vycm9yLCBwcml2 LT54c3RhdHMudHhfaXBfaGVhZGVyX2Vycm9yKTsKPiA+ICt9Cj4gPiArc3RhdGljIERFVklDRV9B VFRSKGV4dHJhX3R4X3N0YXRzLCAwNDQ0LCBleHRyYV90eF9zdGF0c19zaG93LCBOVUxMKTsKPiA+ ICsKPiA+ICtzdGF0aWMgc3NpemVfdCBleHRyYV9yeF9zdGF0c19zaG93KHN0cnVjdCBkZXZpY2Ug KmRldiwKPiA+ICsgICAgICAgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNo YXIgKmJ1ZikKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKyAgICAgc3RydWN0IGdldGhfcHJpdiAqcHJpdiA9IG5ldGRl dl9wcml2KG5kZXYpOwo+ID4gKwo+ID4gKyAgICAgaWYgKCFkZXYpIHsKPiA+ICsgICAgICAgICAg ICAgcHJfZXJyKCJBcmdtZW50IGlzIGludmFsaWRcbiIpOwo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gMDsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIGlmICghbmRldikgewo+ID4gKyAgICAg ICAgICAgICBwcl9lcnIoIk5ldCBkZXZpY2UgaXMgbnVsbFxuIik7Cj4gPiArICAgICAgICAgICAg IHJldHVybiAwOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIHNwcmludGYoYnVm LCAicnhfZGVzYzogJWx1XG5zYV9maWx0ZXJfZmFpbDogJWx1XG4iCj4gPiArICAgICAgICAgICAg ICAgICAgICAgIm92ZXJmbG93X2Vycm9yOiAlbHVcbmlwY19jc3VtX2Vycm9yOiAlbHVcbiIKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAicnhfY29sbGlzaW9uOiAlbHVcbnJ4X2NyYzogJWx1XG4i Cj4gPiArICAgICAgICAgICAgICAgICAgICAgImRyaWJibGluZ19iaXQ6ICVsdVxucnhfbGVuZ3Ro OiAlbHVcbiIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAicnhfbWlpOiAlbHVcbnJ4X211bHRp Y2FzdDogJWx1XG4iCj4gPiArICAgICAgICAgICAgICAgICAgICAgInJ4X2dtYWNfb3ZlcmZsb3c6 ICVsdVxucnhfd2F0Y2hkb2c6ICVsdVxuIgo+ID4gKyAgICAgICAgICAgICAgICAgICAgICJkYV9y eF9maWx0ZXJfZmFpbDogJWx1XG5zYV9yeF9maWx0ZXJfZmFpbDogJWx1XG4iCj4gPiArICAgICAg ICAgICAgICAgICAgICAgInJ4X21pc3NlZF9jbnRyOiAlbHVcbnJ4X292ZXJmbG93X2NudHI6ICVs dVxuIgo+ID4gKyAgICAgICAgICAgICAgICAgICAgICJyeF92bGFuOiAlbHVcblxuIiwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICBwcml2LT54c3RhdHMucnhfZGVzYywgcHJpdi0+eHN0YXRzLnNh X2ZpbHRlcl9mYWlsLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByaXYtPnhzdGF0cy5vdmVy Zmxvd19lcnJvciwgcHJpdi0+eHN0YXRzLmlwY19jc3VtX2Vycm9yLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIHByaXYtPnhzdGF0cy5yeF9jb2xsaXNpb24sIHByaXYtPnhzdGF0cy5yeF9jcmMs Cj4gPiArICAgICAgICAgICAgICAgICAgICAgcHJpdi0+eHN0YXRzLmRyaWJibGluZ19iaXQsIHBy aXYtPnhzdGF0cy5yeF9sZW5ndGgsCj4gPiArICAgICAgICAgICAgICAgICAgICAgcHJpdi0+eHN0 YXRzLnJ4X21paSwgcHJpdi0+eHN0YXRzLnJ4X211bHRpY2FzdCwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICBwcml2LT54c3RhdHMucnhfZ21hY19vdmVyZmxvdywgcHJpdi0+eHN0YXRzLnJ4X2xl bmd0aCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICBwcml2LT54c3RhdHMuZGFfcnhfZmlsdGVy X2ZhaWwsIHByaXYtPnhzdGF0cy5zYV9yeF9maWx0ZXJfZmFpbCwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICBwcml2LT54c3RhdHMucnhfbWlzc2VkX2NudHIsIHByaXYtPnhzdGF0cy5yeF9vdmVy Zmxvd19jbnRyLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByaXYtPnhzdGF0cy5yeF92bGFu KTsKPiA+ICt9Cj4gPiArc3RhdGljIERFVklDRV9BVFRSKGV4dHJhX3J4X3N0YXRzLCAwNDQ0LCBl eHRyYV9yeF9zdGF0c19zaG93LCBOVUxMKTsKPiA+ICsKPiA+ICtzdGF0aWMgc3NpemVfdCBncGh5 X3Rlc3Rfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiArICAgICAgICAgICAgIHN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gPiArewo+ID4gKyAgICAgc3RydWN0 IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ICsKPiA+ICsgICAg IGlmICghZGV2KSB7Cj4gPiArICAgICAgICAgICAgIHByX2VycigiQXJnbWVudCBpcyBpbnZhbGlk XG4iKTsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPiArICAgICB9Cj4gPiArCj4gPiAr ICAgICBpZiAoIW5kZXYpIHsKPiA+ICsgICAgICAgICAgICAgcHJfZXJyKCJOZXQgZGV2aWNlIGlz IG51bGxcbiIpOwo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsKPiA+ICsgICAgIH0KPiA+ICsK PiA+ICsgICAgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIlVzYWdlOlxuZWNobyBbMC8xLzIvMy80XSA+ IGdwaHlfdGVzdFxuIgo+ID4gKyAgICAgICAgICAgICAgICAgICAgICIwIC0gTm9ybWFsIE1vZGVc biIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAiMSAtIFRyYW5zbWl0IEppdHRlciBUZXN0XG4i Cj4gPiArICAgICAgICAgICAgICAgICAgICAgIjIgLSBUcmFuc21pdCBKaXR0ZXIgVGVzdChNQVNU RVIgbW9kZSlcbiIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAiMyAtIFRyYW5zbWl0IEppdHRl ciBUZXN0KFNMQVZFIG1vZGUpXG4iCj4gPiArICAgICAgICAgICAgICAgICAgICAgIjQgLSBUcmFu c21pdCBEaXN0b3J0aW9uIFRlc3RcblxuIik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6 ZV90IGdwaHlfdGVzdF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiArICAgICAgICAgICAg IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBj b3VudCkKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOwo+ID4gKyAgICAgc3RydWN0IGdldGhfcHJpdiAqcHJpdiA9IG5ldGRldl9w cml2KG5kZXYpOwo+ID4gKyAgICAgdTE2IHZhbHVlID0gMDsKPiA+ICsgICAgIGludCByZXQgPSAw Owo+ID4gKyAgICAgdTE2IGRhdGEgPSAwOwo+ID4gKwo+ID4gKyAgICAgaWYgKCFkZXYpIHsKPiA+ ICsgICAgICAgICAgICAgcHJfZXJyKCJBcmd1bWVudCBpcyBpbnZhbGlkXG4iKTsKPiA+ICsgICAg ICAgICAgICAgcmV0dXJuIGNvdW50Owo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgaWYgKCFu ZGV2KSB7Cj4gPiArICAgICAgICAgICAgIHByX2VycigiTmV0IGRldmljZSBpcyBudWxsXG4iKTsK PiA+ICsgICAgICAgICAgICAgcmV0dXJuIGNvdW50Owo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAg ICAgZGF0YSA9IHN1bnhpX21kaW9fcmVhZChwcml2LT5iYXNlLCBwcml2LT5waHlfYWRkciwgTUlJ X0NUUkwxMDAwKTsKPiA+ICsKPiA+ICsgICAgIHJldCA9IGtzdHJ0b3UxNihidWYsIDAsICZ2YWx1 ZSk7Cj4gPiArICAgICBpZiAocmV0KQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4g Kwo+ID4gKyAgICAgaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgPD0gNCkgewo+ID4gKyAgICAgICAg ICAgICBkYXRhICY9IH4oMHg3IDw8IDEzKTsKPiA+ICsgICAgICAgICAgICAgZGF0YSB8PSB2YWx1 ZSA8PCAxMzsKPiA+ICsgICAgICAgICAgICAgc3VueGlfbWRpb193cml0ZShwcml2LT5iYXNlLCBw cml2LT5waHlfYWRkciwgTUlJX0NUUkwxMDAwLCBkYXRhKTsKPiA+ICsgICAgICAgICAgICAgcHJf aW5mbygiU2V0IE1JSV9DVFJMMTAwMCgweDA5KSBSZWc6IDB4JXhcbiIsIGRhdGEpOwo+ID4gKyAg ICAgfSBlbHNlIHsKPiA+ICsgICAgICAgICAgICAgcHJfaW5mbygidW5rbm93biB2YWx1ZSAoJWQp XG4iLCB2YWx1ZSk7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICByZXR1cm4gY291bnQ7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBERVZJQ0VfQVRUUihncGh5X3Rlc3QsIDA2NjQsIGdwaHlf dGVzdF9zaG93LCBncGh5X3Rlc3Rfc3RvcmUpOwo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IG1p aV9yZWdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiArICAgICAgICAgICAgIHN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gPiArewo+ID4gKyAgICAgc3RydWN0 IG5ldF9kZXZpY2UgKm5kZXYgPSBOVUxMOwo+ID4gKyAgICAgc3RydWN0IGdldGhfcHJpdiAqcHJp diA9IE5VTEw7Cj4gPiArCj4gPiArICAgICBpZiAoZGV2ID09IE5VTEwpIHsKPiA+ICsgICAgICAg ICAgICAgcHJfZXJyKCJBcmdtZW50IGlzIGludmFsaWRcbiIpOwo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gMDsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIG5kZXYgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKPiA+ICsgICAgIGlmIChuZGV2ID09IE5VTEwpIHsKPiA+ICsgICAgICAgICAgICAg cHJfZXJyKCJOZXQgZGV2aWNlIGlzIG51bGxcbiIpOwo+ID4gKyAgICAgICAgICAgICByZXR1cm4g MDsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIHByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsK PiA+ICsgICAgIGlmIChwcml2ID09IE5VTEwpIHsKPiA+ICsgICAgICAgICAgICAgcHJfZXJyKCJn ZXRoX3ByaXYgaXMgbnVsbFxuIik7Cj4gPiArICAgICAgICAgICAgIHJldHVybiAwOwo+ID4gKyAg ICAgfQo+ID4gKwo+ID4gKyAgICAgaWYgKCFuZXRpZl9ydW5uaW5nKG5kZXYpKSB7Cj4gPiArICAg ICAgICAgICAgIHByX3dhcm4oImV0aCBpcyBkb3duIVxuIik7Cj4gPiArICAgICAgICAgICAgIHJl dHVybiAwOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIHNwcmludGYoYnVmLAo+ ID4gKyAgICAgICAgICAgICAiQ3VycmVudCBNSUkgUmVnaXN0ZXJzOlxuIgo+ID4gKyAgICAgICAg ICAgICAiQk1DUlsweCUwMnhdID0gMHglMDR4LFx0XHRCTVNSWzB4JTAyeF0gPSAweCUwNHgsXHRc dFBIWVNJRDFbMHglMDJ4XSA9IDB4JTA0eFxuIgo+ID4gKyAgICAgICAgICAgICAiUEhZU0lEMlsw eCUwMnhdID0gMHglMDR4LFx0XHRBRFZFUlRJU0VbMHglMDJ4XSA9IDB4JTA0eCxcdExQQVsweCUw MnhdID0gMHglMDR4XG4iCj4gPiArICAgICAgICAgICAgICJFWFBBTlNJT05bMHglMDJ4XSA9IDB4 JTA0eCxcdENUUkwxMDAwWzB4JTAyeF0gPSAweCUwNHgsXHRTVEFUMTAwMFsweCUwMnhdID0gMHgl MDR4XG4iLAo+ID4gKyAgICAgICAgICAgICBNSUlfQk1DUiwgc3VueGlfbWRpb19yZWFkKHByaXYt PmJhc2UsIHByaXYtPnBoeV9hZGRyLCBNSUlfQk1DUiksCj4gPiArICAgICAgICAgICAgIE1JSV9C TVNSLCBzdW54aV9tZGlvX3JlYWQocHJpdi0+YmFzZSwgcHJpdi0+cGh5X2FkZHIsIE1JSV9CTVNS KSwKPiA+ICsgICAgICAgICAgICAgTUlJX1BIWVNJRDEsIHN1bnhpX21kaW9fcmVhZChwcml2LT5i YXNlLCBwcml2LT5waHlfYWRkciwgTUlJX1BIWVNJRDEpLAo+ID4gKyAgICAgICAgICAgICBNSUlf UEhZU0lEMiwgc3VueGlfbWRpb19yZWFkKHByaXYtPmJhc2UsIHByaXYtPnBoeV9hZGRyLCBNSUlf UEhZU0lEMiksCj4gPiArICAgICAgICAgICAgIE1JSV9BRFZFUlRJU0UsIHN1bnhpX21kaW9fcmVh ZChwcml2LT5iYXNlLCBwcml2LT5waHlfYWRkciwgTUlJX0FEVkVSVElTRSksCj4gPiArICAgICAg ICAgICAgIE1JSV9MUEEsIHN1bnhpX21kaW9fcmVhZChwcml2LT5iYXNlLCBwcml2LT5waHlfYWRk ciwgTUlJX0xQQSksCj4gPiArICAgICAgICAgICAgIE1JSV9FWFBBTlNJT04sIHN1bnhpX21kaW9f cmVhZChwcml2LT5iYXNlLCBwcml2LT5waHlfYWRkciwgTUlJX0VYUEFOU0lPTiksCj4gPiArICAg ICAgICAgICAgIE1JSV9DVFJMMTAwMCwgc3VueGlfbWRpb19yZWFkKHByaXYtPmJhc2UsIHByaXYt PnBoeV9hZGRyLCBNSUlfQ1RSTDEwMDApLAo+ID4gKyAgICAgICAgICAgICBNSUlfU1RBVDEwMDAs IHN1bnhpX21kaW9fcmVhZChwcml2LT5iYXNlLCBwcml2LT5waHlfYWRkciwgTUlJX1NUQVQxMDAw KSk7Cj4gPiArfQo+ID4gK3N0YXRpYyBERVZJQ0VfQVRUUihtaWlfcmVnLCAwNDQ0LCBtaWlfcmVn X3Nob3csIE5VTEwpOwo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IGxvb3BiYWNrX3Rlc3Rfc2hv dyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiArICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gPiArewo+ID4gKyAgICAgcmV0dXJuIHNwcmludGYo YnVmLCAiVXNhZ2U6XG5lY2hvIFswLzEvMl0gPiBsb29wYmFja190ZXN0XG4iCj4gPiArICAgICAg ICAgICAgICAgICAgICAgIjAgLSBOb3JtYWwgTW9kZVxuIgo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICIxIC0gTWFjIGxvb3BiYWNrIHRlc3QgbW9kZVxuIgo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICIyIC0gUGh5IGxvb3BiYWNrIHRlc3QgbW9kZVxuIik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBzc2l6ZV90IGxvb3BiYWNrX3Rlc3Rfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+ID4g KyAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAq YnVmLCBzaXplX3QgY291bnQpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5k ZXYgPSBOVUxMOwo+ID4gKyAgICAgc3RydWN0IGdldGhfcHJpdiAqcHJpdiA9IE5VTEw7Cj4gPiAr ICAgICB1MTYgdmFsdWUgPSAwOwo+ID4gKyAgICAgaW50IHJldCA9IDA7Cj4gPiArICAgICB1MTYg ZGF0YSA9IDA7Cj4gPiArCj4gPiArICAgICBpZiAoZGV2ID09IE5VTEwpIHsKPiA+ICsgICAgICAg ICAgICAgcHJfZXJyKCJBcmdtZW50IGlzIGludmFsaWRcbiIpOwo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gY291bnQ7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICBuZGV2ID0gZGV2X2dldF9k cnZkYXRhKGRldik7Cj4gPiArICAgICBpZiAobmRldiA9PSBOVUxMKSB7Cj4gPiArICAgICAgICAg ICAgIHByX2VycigiTmV0IGRldmljZSBpcyBudWxsXG4iKTsKPiA+ICsgICAgICAgICAgICAgcmV0 dXJuIGNvdW50Owo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgcHJpdiA9IG5ldGRldl9wcml2 KG5kZXYpOwo+ID4gKyAgICAgaWYgKHByaXYgPT0gTlVMTCkgewo+ID4gKyAgICAgICAgICAgICBw cl9lcnIoImdldGhfcHJpdiBpcyBudWxsXG4iKTsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIGNv dW50Owo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgaWYgKCFuZXRpZl9ydW5uaW5nKG5kZXYp KSB7Cj4gPiArICAgICAgICAgICAgIHByX3dhcm4oImV0aCBpcyBkb3duIVxuIik7Cj4gPiArICAg ICAgICAgICAgIHJldHVybiBjb3VudDsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIHJldCA9 IGtzdHJ0b3UxNihidWYsIDAsICZ2YWx1ZSk7Cj4gPiArICAgICBpZiAocmV0KQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gcmV0Owo+ID4gKwo+ID4gKyAgICAgaWYgKHZhbHVlID09IDApIHsgLyog bm9ybWFsIG1vZGUgKi8KPiA+ICsgICAgICAgICAgICAgLyogY2xlYXIgbWFjIGxvb3BiYWNrICov Cj4gPiArICAgICAgICAgICAgIHN1bnhpX21hY19sb29wYmFjayhwcml2LT5iYXNlLCAwKTsKPiA+ ICsKPiA+ICsgICAgICAgICAgICAgLyogY2xlYXIgcGh5IGxvb3BiYWNrICovCj4gPiArICAgICAg ICAgICAgIGRhdGEgPSBzdW54aV9tZGlvX3JlYWQocHJpdi0+YmFzZSwgcHJpdi0+cGh5X2FkZHIs IE1JSV9CTUNSKTsKPiA+ICsgICAgICAgICAgICAgc3VueGlfbWRpb193cml0ZShwcml2LT5iYXNl LCBwcml2LT5waHlfYWRkciwgTUlJX0JNQ1IsIGRhdGEgJiB+Qk1DUl9MT09QQkFDSyk7Cj4gPiAr ICAgICB9IGVsc2UgaWYgKHZhbHVlID09IDEpIHsgLyogbWFjIGxvb3BiYWNrIHRlc3QgbW9kZSAq Lwo+ID4gKyAgICAgICAgICAgICBkYXRhID0gc3VueGlfbWRpb19yZWFkKHByaXYtPmJhc2UsIHBy aXYtPnBoeV9hZGRyLCBNSUlfQk1DUik7Cj4gPiArICAgICAgICAgICAgIHN1bnhpX21kaW9fd3Jp dGUocHJpdi0+YmFzZSwgcHJpdi0+cGh5X2FkZHIsIE1JSV9CTUNSLCBkYXRhICYgfkJNQ1JfTE9P UEJBQ0spOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICBzdW54aV9tYWNfbG9vcGJhY2socHJpdi0+ YmFzZSwgMSk7Cj4gPiArICAgICB9IGVsc2UgaWYgKHZhbHVlID09IDIpIHsgLyogcGh5IGxvb3Bi YWNrIHRlc3QgbW9kZSAqLwo+ID4gKyAgICAgICAgICAgICBzdW54aV9tYWNfbG9vcGJhY2socHJp di0+YmFzZSwgMCk7Cj4gPiArCj4gPiArICAgICAgICAgICAgIGRhdGEgPSBzdW54aV9tZGlvX3Jl YWQocHJpdi0+YmFzZSwgcHJpdi0+cGh5X2FkZHIsIE1JSV9CTUNSKTsKPiA+ICsgICAgICAgICAg ICAgc3VueGlfbWRpb193cml0ZShwcml2LT5iYXNlLCBwcml2LT5waHlfYWRkciwgTUlJX0JNQ1Is IGRhdGEgfCBCTUNSX0xPT1BCQUNLKTsKPiA+ICsgICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICAg ICAgIHByX2VycigiVW5kZWZpbmVkIHZhbHVlICglZClcbiIsIHZhbHVlKTsKPiA+ICsgICAgIH0K PiA+ICsKPiA+ICsgICAgIHJldHVybiBjb3VudDsKPiA+ICt9Cj4gPiArc3RhdGljIERFVklDRV9B VFRSKGxvb3BiYWNrX3Rlc3QsIDA2NjQsIGxvb3BiYWNrX3Rlc3Rfc2hvdywgbG9vcGJhY2tfdGVz dF9zdG9yZSk7Cj4gPiArCj4gPiArc3RhdGljIGludCBnZXRoX3Bvd2VyX29uKHN0cnVjdCBnZXRo X3ByaXYgKnByaXYpCj4gPiArewo+ID4gKyAgICAgaW50IHZhbHVlOwo+ID4gKwo+ID4gKyAgICAg dmFsdWUgPSByZWFkbChwcml2LT5iYXNlX3BoeSk7Cj4gPiArICAgICBpZiAocHJpdi0+cGh5X2V4 dCA9PSBJTlRfUEhZKSB7Cj4gPiArICAgICAgICAgICAgIHZhbHVlIHw9ICgxIDw8IDE1KTsKPiA+ ICsgICAgICAgICAgICAgdmFsdWUgJj0gfigxIDw8IDE2KTsKPiA+ICsgICAgICAgICAgICAgdmFs dWUgfD0gKDMgPDwgMTcpOwo+ID4gKyAgICAgfSBlbHNlIHsKPiA+ICsgICAgICAgICAgICAgdmFs dWUgJj0gfigxIDw8IDE1KTsKPiA+ICsvKgo+ID4gKyAgICAgICAgICAgICBmb3IgKGkgPSAwOyBp IDwgUE9XRVJfQ0hBTl9OVU07IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChJ U19FUlJfT1JfTlVMTChwcml2LT5nbWFjX3Bvd2VyW2ldKSkKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChyZWd1 bGF0b3JfZW5hYmxlKHByaXYtPmdtYWNfcG93ZXJbaV0pICE9IDApIHsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByX2VycigiZ21hYy1wb3dlciVkIGVuYWJsZSBlcnJvclxuIiwg aSk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ ICsgICAgICAgICAgICAgICAgICAgICB9Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsqLwo+ID4g KyAgICAgfQo+ID4gKwo+ID4gKyAgICAgd3JpdGVsKHZhbHVlLCBwcml2LT5iYXNlX3BoeSk7Cj4g PiArCj4gPiArICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZ2V0 aF9wb3dlcl9vZmYoc3RydWN0IGdldGhfcHJpdiAqcHJpdikKPiA+ICt7Cj4gPiArICAgICBpbnQg dmFsdWU7Cj4gPiArCj4gPiArICAgICBpZiAocHJpdi0+cGh5X2V4dCA9PSBJTlRfUEhZKSB7Cj4g PiArICAgICAgICAgICAgIHZhbHVlID0gcmVhZGwocHJpdi0+YmFzZV9waHkpOwo+ID4gKyAgICAg ICAgICAgICB2YWx1ZSB8PSAoMSA8PCAxNik7Cj4gPiArICAgICAgICAgICAgIHdyaXRlbCh2YWx1 ZSwgcHJpdi0+YmFzZV9waHkpOwo+ID4gKyAgICAgfSBlbHNlIHsKPiA+ICsvKgo+ID4gKyAgICAg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUE9XRVJfQ0hBTl9OVU07IGkrKykgewo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGlmIChJU19FUlJfT1JfTlVMTChwcml2LT5nbWFjX3Bvd2VyW2ldKSkK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtPmdtYWNfcG93ZXJbaV0pOwo+ID4g KyAgICAgICAgICAgICB9Cj4gPiArKi8KPiA+ICsgICAgIH0KPiA+ICt9Cj4gPiArCj4gPiArLyog UEhZIGludGVyZmFjZSBvcGVyYXRpb25zICovCj4gPiArc3RhdGljIGludCBnZXRoX21kaW9fcmVh ZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5YWRkciwgaW50IHBoeXJlZykKPiA+ICt7Cj4g PiArICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGJ1cy0+cHJpdjsKPiA+ICsgICAgIHN0 cnVjdCBnZXRoX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKPiA+ICsKPiA+ICsgICAg IHJldHVybiAoaW50KXN1bnhpX21kaW9fcmVhZChwcml2LT5iYXNlLCAgcGh5YWRkciwgcGh5cmVn KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBnZXRoX21kaW9fd3JpdGUoc3RydWN0IG1p aV9idXMgKmJ1cywgaW50IHBoeWFkZHIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHBoeXJlZywgdTE2IGRhdGEpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5k ZXYgPSBidXMtPnByaXY7Cj4gPiArICAgICBzdHJ1Y3QgZ2V0aF9wcml2ICpwcml2ID0gbmV0ZGV2 X3ByaXYobmRldik7Cj4gPiArCj4gPiArICAgICBzdW54aV9tZGlvX3dyaXRlKHByaXYtPmJhc2Us IHBoeWFkZHIsIHBoeXJlZywgZGF0YSk7Cj4gPiArCj4gPiArICAgICByZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCBnZXRoX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1 cykKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGJ1cy0+cHJpdjsK PiA+ICsgICAgIHN0cnVjdCBnZXRoX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKPiA+ ICsKPiA+ICsgICAgIHJldHVybiBzdW54aV9tZGlvX3Jlc2V0KHByaXYtPmJhc2UpOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBnZXRoX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNl ICpuZGV2KQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBnZXRoX3ByaXYgKnByaXYgPSBuZXRkZXZf cHJpdihuZGV2KTsKPiA+ICsgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBuZGV2LT5w aHlkZXY7Cj4gPiArICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gKyAgICAgaW50IG5ld19z dGF0ZSA9IDA7Cj4gPiArCj4gPiArICAgICBpZiAoIXBoeWRldikKPiA+ICsgICAgICAgICAgICAg cmV0dXJuOwo+ID4gKwo+ID4gKyAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZs YWdzKTsKPiA+ICsgICAgIGlmIChwaHlkZXYtPmxpbmspIHsKPiA+ICsgICAgICAgICAgICAgLyog Tm93IHdlIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBiZSBpbiBmdWxsIGR1cGxleCBtb2RlLgo+ID4g KyAgICAgICAgICAgICAgKiBJZiBub3QsIHdlIG9wZXJhdGUgaW4gaGFsZi1kdXBsZXggbW9kZS4K PiA+ICsgICAgICAgICAgICAgICovCj4gPiArICAgICAgICAgICAgIGlmIChwaHlkZXYtPmR1cGxl eCAhPSBwcml2LT5kdXBsZXgpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBuZXdfc3RhdGUg PSAxOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByaXYtPmR1cGxleCA9IHBoeWRldi0+ZHVw bGV4Owo+ID4gKyAgICAgICAgICAgICB9Cj4gPiArICAgICAgICAgICAgIC8qIEZsb3cgQ29udHJv bCBvcGVyYXRpb24gKi8KPiA+ICsgICAgICAgICAgICAgaWYgKHBoeWRldi0+cGF1c2UpCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgc3VueGlfZmxvd19jdHJsKHByaXYtPmJhc2UsIHBoeWRldi0+ ZHVwbGV4LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93X2N0 cmwsIHBhdXNlKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgaWYgKHBoeWRldi0+c3BlZWQgIT0g cHJpdi0+c3BlZWQpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBuZXdfc3RhdGUgPSAxOwo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIHByaXYtPnNwZWVkID0gcGh5ZGV2LT5zcGVlZDsKPiA+ ICsgICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgICBpZiAocHJpdi0+bGluayA9 PSAwKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgbmV3X3N0YXRlID0gMTsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICBwcml2LT5saW5rID0gcGh5ZGV2LT5saW5rOwo+ID4gKyAgICAgICAg ICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgIGlmIChuZXdfc3RhdGUpCj4gPiArICAgICAg ICAgICAgICAgICAgICAgc3VueGlfc2V0X2xpbmtfbW9kZShwcml2LT5iYXNlLCBwcml2LT5kdXBs ZXgsIHByaXYtPnNwZWVkKTsKPiA+ICsKPiA+ICsjaWZkZWYgTE9PUEJBQ0tfREVCVUcKPiA+ICsg ICAgICAgICAgICAgcGh5ZGV2LT5zdGF0ZSA9IFBIWV9GT1JDSU5HOwo+ID4gKyNlbmRpZgo+ID4g Kwo+ID4gKyAgICAgfSBlbHNlIGlmIChwcml2LT5saW5rICE9IHBoeWRldi0+bGluaykgewo+ID4g KyAgICAgICAgICAgICBuZXdfc3RhdGUgPSAxOwo+ID4gKyAgICAgICAgICAgICBwcml2LT5saW5r ID0gMDsKPiA+ICsgICAgICAgICAgICAgcHJpdi0+c3BlZWQgPSAwOwo+ID4gKyAgICAgICAgICAg ICBwcml2LT5kdXBsZXggPSAtMTsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIGlmIChuZXdf c3RhdGUpCj4gPiArICAgICAgICAgICAgIHBoeV9wcmludF9zdGF0dXMocGh5ZGV2KTsKPiA+ICsK PiA+ICsgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBnZXRoX3BoeV9pbml0KHN0cnVjdCBuZXRfZGV2aWNl ICpuZGV2KQo+ID4gK3sKPiA+ICsgICAgIGludCB2YWx1ZTsKPiA+ICsgICAgIHN0cnVjdCBtaWlf YnVzICpuZXdfYnVzOwo+ID4gKyAgICAgc3RydWN0IGdldGhfcHJpdiAqcHJpdiA9IG5ldGRldl9w cml2KG5kZXYpOwo+ID4gKyAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IG5kZXYtPnBo eWRldjsKPiA+ICsKPiA+ICsgICAgIC8qIEZpeHVwIHRoZSBwaHkgaW50ZXJmYWNlIHR5cGUgKi8K PiA+ICsgICAgIGlmIChwcml2LT5waHlfZXh0ID09IElOVF9QSFkpIHsKPiA+ICsgICAgICAgICAg ICAgcHJpdi0+cGh5X2ludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7Cj4gPiArICAg ICB9IGVsc2Ugewo+ID4gKyAgICAgICAgICAgICAvKiBJZiBjb25maWcgZ3BpbyB0byByZXNldCB0 aGUgcGh5IGRldmljZSwgd2Ugc2hvdWxkIHJlc2V0IGl0ICovCj4gPiArICAgICAgICAgICAgIC8q Cj4gPiArICAgICAgICAgICAgIGlmIChncGlvX2lzX3ZhbGlkKHByaXYtPnBoeXJzdCkpIHsKPiA+ ICsgICAgICAgICAgICAgICAgICAgICBncGlvX2RpcmVjdGlvbl9vdXRwdXQocHJpdi0+cGh5cnN0 LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5yc3RfYWN0 aXZlX2xvdyk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDUwKTsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICBncGlvX2RpcmVjdGlvbl9vdXRwdXQocHJpdi0+cGh5cnN0LAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJpdi0+cnN0X2FjdGl2ZV9s b3cpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCg1MCk7Cj4gPiArICAgICAgICAg ICAgIH0KPiA+ICsgICAgICAgICAgICAgKi8KPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIGlm IChwcml2LT5pc19zdXNwZW5kICYmIHBoeWRldikKPiA+ICsgICAgICAgICAgICAgZ290byByZXN1 bWU7Cj4gPiArCj4gPiArICAgICBuZXdfYnVzID0gbWRpb2J1c19hbGxvYygpOwo+ID4gKyAgICAg aWYgKCFuZXdfYnVzKSB7Cj4gPiArICAgICAgICAgICAgIG5ldGRldl9lcnIobmRldiwgIkZhaWxl ZCB0byBhbGxvYyBuZXcgbWRpbyBidXNcbiIpOwo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVO T01FTTsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIG5ld19idXMtPm5hbWUgPSBkZXZfbmFt ZShwcml2LT5kZXYpOwo+ID4gKyAgICAgbmV3X2J1cy0+cmVhZCA9ICZnZXRoX21kaW9fcmVhZDsK PiA+ICsgICAgIG5ld19idXMtPndyaXRlID0gJmdldGhfbWRpb193cml0ZTsKPiA+ICsgICAgIG5l d19idXMtPnJlc2V0ID0gJmdldGhfbWRpb19yZXNldDsKPiA+ICsgICAgIHNucHJpbnRmKG5ld19i dXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIlcy0leCIsIG5ld19idXMtPm5hbWUsIDApOwo+ID4g Kwo+ID4gKyAgICAgbmV3X2J1cy0+cGFyZW50ID0gcHJpdi0+ZGV2Owo+ID4gKyAgICAgbmV3X2J1 cy0+cHJpdiA9IG5kZXY7Cj4gPiArCj4gPiArICAgICBpZiAobWRpb2J1c19yZWdpc3RlcihuZXdf YnVzKSkgewo+ID4gKyAgICAgICAgICAgICBwcl9lcnIoIiVzOiBDYW5ub3QgcmVnaXN0ZXIgYXMg TURJTyBidXNcbiIsIG5ld19idXMtPm5hbWUpOwo+ID4gKyAgICAgICAgICAgICBnb3RvIHJlZ19m YWlsOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgcHJpdi0+bWlpID0gbmV3X2J1czsKPiA+ ICsKPiA+ICsgICAgIHsKPiA+ICsgICAgICAgICAgICAgaW50IGFkZHI7Cj4gPiArCj4gPiArICAg ICAgICAgICAgIGZvciAoYWRkciA9IDA7IGFkZHIgPCBQSFlfTUFYX0FERFI7IGFkZHIrKykgewo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfdG1wID0g bWRpb2J1c19nZXRfcGh5KG5ld19idXMsIGFkZHIpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGlmIChwaHlkZXZfdG1wICYmIChwaHlkZXZfdG1wLT5waHlfaWQgIT0gMHgwMCkpIHsK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeWRldiA9IHBoeWRldl90bXA7Cj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5waHlfYWRkciA9IGFkZHI7Cj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgICAgICAg ICAgICAgICB9Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAg IGlmICghcGh5ZGV2KSB7Cj4gPiArICAgICAgICAgICAgIG5ldGRldl9lcnIobmRldiwgIk5vIFBI WSBmb3VuZCFcbiIpOwo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycjsKPiA+ICsgICAgIH0KPiA+ ICsKPiA+ICsgICAgIHBoeWRldi0+aXJxID0gUEhZX1BPTEw7Cj4gPiArCj4gPiArICAgICB2YWx1 ZSA9IHBoeV9jb25uZWN0X2RpcmVjdChuZGV2LCBwaHlkZXYsICZnZXRoX2FkanVzdF9saW5rLCBw cml2LT5waHlfaW50ZXJmYWNlKTsKPiA+ICsgICAgIGlmICh2YWx1ZSkgewo+ID4gKyAgICAgICAg ICAgICBuZXRkZXZfZXJyKG5kZXYsICJDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIik7Cj4gPiAr ICAgICAgICAgICAgIGdvdG8gZXJyOwo+ID4gKyAgICAgfSBlbHNlIHsKPiA+ICsgICAgICAgICAg ICAgbmV0ZGV2X2luZm8obmRldiwgIiVzOiBUeXBlKCVkKSBQSFkgSUQgJTA4eCBhdCAlZCBJUlEg JXMgKCVzKVxuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgbmRldi0+bmFtZSwgcGh5 ZGV2LT5pbnRlcmZhY2UsIHBoeWRldi0+cGh5X2lkLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBwaHlkZXYtPm1kaW8uYWRkciwgInBvbGwiLCBkZXZfbmFtZSgmcGh5ZGV2LT5tZGlvLmRl dikpOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgLy9waHlkZXYtPnN1cHBvcnRlZCAmPSBQ SFlfR0JJVF9GRUFUVVJFUzsKPiA+ICsgICAgIHBoeWRldi0+aXNfZ2lnYWJpdF9jYXBhYmxlID0g MTsKPiA+ICsgICAgIC8vcGh5ZGV2LT5hZHZlcnRpc2luZyA9IHBoeWRldi0+c3VwcG9ydGVkOwo+ ID4gKwo+ID4gK3Jlc3VtZToKPiA+ICsgICAgIHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBC TUNSX1JFU0VUKTsKPiA+ICsgICAgIHdoaWxlIChCTUNSX1JFU0VUICYgcGh5X3JlYWQocGh5ZGV2 LCBNSUlfQk1DUikpCj4gPiArICAgICAgICAgICAgIG1zbGVlcCgzMCk7Cj4gPiArCj4gPiArICAg ICB2YWx1ZSA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwo+ID4gKyAgICAgcGh5X3dyaXRl KHBoeWRldiwgTUlJX0JNQ1IsICh2YWx1ZSAmIH5CTUNSX1BET1dOKSk7Cj4gPiArCj4gPiArICAg ICBpZiAocHJpdi0+cGh5X2V4dCA9PSBJTlRfUEhZKSB7Cj4gPiArICAgICAgICAgICAgIC8qIEVQ SFkgSW5pdGlhbCAqLwo+ID4gKyAgICAgICAgICAgICBwaHlfd3JpdGUocGh5ZGV2LCAweDFmLCAw eDAxMDApOyAvKiBzd2l0Y2ggdG8gcGFnZSAxICovCj4gPiArICAgICAgICAgICAgIHBoeV93cml0 ZShwaHlkZXYsIDB4MTIsIDB4NDgyNCk7IC8qIERpc2FibGUgQVBTICovCj4gPiArICAgICAgICAg ICAgIHBoeV93cml0ZShwaHlkZXYsIDB4MWYsIDB4MDIwMCk7IC8qIHN3aXRjaHRvIHBhZ2UgMiAq Lwo+ID4gKyAgICAgICAgICAgICBwaHlfd3JpdGUocGh5ZGV2LCAweDE4LCAweDAwMDApOyAvKiBQ SFlBRkUgVFJYIG9wdGltaXphdGlvbiAqLwo+ID4gKyAgICAgICAgICAgICBwaHlfd3JpdGUocGh5 ZGV2LCAweDFmLCAweDA2MDApOyAvKiBzd2l0Y2h0byBwYWdlIDYgKi8KPiA+ICsgICAgICAgICAg ICAgcGh5X3dyaXRlKHBoeWRldiwgMHgxNCwgMHg3MDhGKTsgLyogUEhZQUZFIFRYIG9wdGltaXph dGlvbiAqLwo+ID4gKyAgICAgICAgICAgICBwaHlfd3JpdGUocGh5ZGV2LCAweDE5LCAweDAwMDAp Owo+ID4gKyAgICAgICAgICAgICBwaHlfd3JpdGUocGh5ZGV2LCAweDEzLCAweGYwMDApOyAvKiBQ SFlBRkUgUlggb3B0aW1pemF0aW9uICovCj4gPiArICAgICAgICAgICAgIHBoeV93cml0ZShwaHlk ZXYsIDB4MTUsIDB4MTUzMCk7Cj4gPiArICAgICAgICAgICAgIHBoeV93cml0ZShwaHlkZXYsIDB4 MWYsIDB4MDgwMCk7IC8qIHN3aXRjaCB0byBwYWdlIDggKi8KPiA+ICsgICAgICAgICAgICAgcGh5 X3dyaXRlKHBoeWRldiwgMHgxOCwgMHgwMGJjKTsgLyogUEhZQUZFIFRSWCBvcHRpbWl6YXRpb24g Ki8KPiA+ICsgICAgICAgICAgICAgcGh5X3dyaXRlKHBoeWRldiwgMHgxZiwgMHgwMTAwKTsgLyog c3dpdGNodG8gcGFnZSAxICovCj4gPiArICAgICAgICAgICAgIC8qIHJlZyAweDE3IGJpdDMsc2V0 IDAgdG8gZGlzYWJsZSBpRUVFICovCj4gPiArICAgICAgICAgICAgIHBoeV93cml0ZShwaHlkZXYs IDB4MTcsIHBoeV9yZWFkKHBoeWRldiwgMHgxNykgJiAofigxPDwzKSkpOwo+ID4gKyAgICAgICAg ICAgICBwaHlfd3JpdGUocGh5ZGV2LCAweDFmLCAweDAwMDApOyAvKiBzd2l0Y2ggdG8gcGFnZSAw ICovCj4gPiArICAgICB9Cj4gPiArICAgICBpZiAocHJpdi0+aXNfc3VzcGVuZCkKPiA+ICsgICAg ICAgICAgICAgcGh5X2luaXRfaHcocGh5ZGV2KTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ ID4gKwo+ID4gK2VycjoKPiA+ICsgICAgIG1kaW9idXNfdW5yZWdpc3RlcihuZXdfYnVzKTsKPiA+ ICtyZWdfZmFpbDoKPiA+ICsgICAgIG1kaW9idXNfZnJlZShuZXdfYnVzKTsKPiA+ICsKPiA+ICsg ICAgIHJldHVybiAtRUlOVkFMOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGdldGhfcGh5 X3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCj4gPiArewo+ID4gKyAgICAgc3RydWN0 IGdldGhfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwo+ID4gKyAgICAgc3RydWN0IHBo eV9kZXZpY2UgKnBoeWRldiA9IG5kZXYtPnBoeWRldjsKPiA+ICsgICAgIGludCB2YWx1ZSA9IDA7 Cj4gPiArCj4gPiArICAgICAvKiBTdG9wIGFuZCBkaXNjb25uZWN0IHRoZSBQSFkgKi8KPiA+ICsg ICAgIGlmIChwaHlkZXYpCj4gPiArICAgICAgICAgICAgIHBoeV9zdG9wKHBoeWRldik7Cj4gPiAr Cj4gPiArICAgICBwcml2LT5saW5rID0gUEhZX0RPV047Cj4gPiArICAgICBwcml2LT5zcGVlZCA9 IDA7Cj4gPiArICAgICBwcml2LT5kdXBsZXggPSAtMTsKPiA+ICsKPiA+ICsgICAgIGlmIChwaHlk ZXYpIHsKPiA+ICsgICAgICAgICAgICAgdmFsdWUgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNS KTsKPiA+ICsgICAgICAgICAgICAgcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsICh2YWx1ZSB8 IEJNQ1JfUERPV04pKTsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIGlmIChwcml2LT5pc19z dXNwZW5kKQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsKPiA+ICsKPiA+ICsgICAgIGlmIChw aHlkZXYpIHsKPiA+ICsgICAgICAgICAgICAgcGh5X2Rpc2Nvbm5lY3QocGh5ZGV2KTsKPiA+ICsg ICAgICAgICAgICAgbmRldi0+cGh5ZGV2ID0gTlVMTDsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsg ICAgIGlmIChwcml2LT5taWkpIHsKPiA+ICsgICAgICAgICAgICAgbWRpb2J1c191bnJlZ2lzdGVy KHByaXYtPm1paSk7Cj4gPiArICAgICAgICAgICAgIHByaXYtPm1paS0+cHJpdiA9IE5VTEw7Cj4g PiArICAgICAgICAgICAgIG1kaW9idXNfZnJlZShwcml2LT5taWkpOwo+ID4gKyAgICAgICAgICAg ICBwcml2LT5taWkgPSBOVUxMOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIDA7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGdldGhfcnhfcmVmaWxsKHN0cnVjdCBuZXRf ZGV2aWNlICpuZGV2KQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBnZXRoX3ByaXYgKnByaXYgPSBu ZXRkZXZfcHJpdihuZGV2KTsKPiA+ICsgICAgIHN0cnVjdCBkbWFfZGVzYyAqZGVzYzsKPiA+ICsg ICAgIHN0cnVjdCBza19idWZmICpzayA9IE5VTEw7Cj4gPiArICAgICBkbWFfYWRkcl90IHBhZGRy Owo+ID4gKwo+ID4gKyAgICAgd2hpbGUgKGNpcmNfc3BhY2UocHJpdi0+cnhfY2xlYW4sIHByaXYt PnJ4X2RpcnR5LCBkbWFfZGVzY19yeCkgPiAwKSB7Cj4gPiArICAgICAgICAgICAgIGludCBlbnRy eSA9IHByaXYtPnJ4X2NsZWFuOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAvKiBGaW5kIHRoZSBk aXJ0eSdzIGRlc2MgYW5kIGNsZWFuIGl0ICovCj4gPiArICAgICAgICAgICAgIGRlc2MgPSBwcml2 LT5kbWFfcnggKyBlbnRyeTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgaWYgKHByaXYtPnJ4X3Nr W2VudHJ5XSA9PSBOVUxMKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgc2sgPSBuZXRkZXZf YWxsb2Nfc2tiX2lwX2FsaWduKG5kZXYsIHByaXYtPmJ1Zl9zeik7Cj4gPiArCj4gPiArICAgICAg ICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KHNrID09IE5VTEwpKQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgICAgICAg cHJpdi0+cnhfc2tbZW50cnldID0gc2s7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgcGFkZHIg PSBkbWFfbWFwX3NpbmdsZShwcml2LT5kZXYsIHNrLT5kYXRhLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+YnVmX3N6LCBETUFfRlJPTV9ERVZJ Q0UpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRlc2NfYnVmX3NldChkZXNjLCBwYWRkciwg cHJpdi0+YnVmX3N6KTsKPiA+ICsgICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAg ICAvKiBzeW5jIG1lbWVyeSAqLwo+ID4gKyAgICAgICAgICAgICB3bWIoKTsKPiA+ICsgICAgICAg ICAgICAgZGVzY19zZXRfb3duKGRlc2MpOwo+ID4gKyAgICAgICAgICAgICBwcml2LT5yeF9jbGVh biA9IGNpcmNfaW5jKHByaXYtPnJ4X2NsZWFuLCBkbWFfZGVzY19yeCk7Cj4gPiArICAgICB9Cj4g PiArfQo+ID4gKwo+ID4gKy8qIGdldGhfZG1hX2Rlc2NfaW5pdCAtIGluaXRpYWxpemUgdGhlIFJY L1RYIGRlc2NyaXB0b3IgbGlzdAo+ID4gKyAqIEBuZGV2OiBuZXQgZGV2aWNlIHN0cnVjdHVyZQo+ ID4gKyAqIERlc2NyaXB0aW9uOiBpbml0aWFsaXplIHRoZSBsaXN0IGZvciBkbWEuCj4gPiArICov Cj4gPiArc3RhdGljIGludCBnZXRoX2RtYV9kZXNjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5k ZXYpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IGdldGhfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2 KG5kZXYpOwo+ID4gKyAgICAgdW5zaWduZWQgaW50IGJ1Zl9zejsKPiA+ICsKPiA+ICsgICAgIHBy aXYtPnJ4X3NrID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKikgKiBkbWFfZGVzY19y eCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwo+ID4gKyAg ICAgaWYgKCFwcml2LT5yeF9zaykKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4g PiArCj4gPiArICAgICBwcml2LT50eF9zayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBza19idWZm ICopICogZG1hX2Rlc2NfdHgsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRlBf S0VSTkVMKTsKPiA+ICsgICAgIGlmICghcHJpdi0+dHhfc2spCj4gPiArICAgICAgICAgICAgIGdv dG8gdHhfc2tfZXJyOwo+ID4gKwo+ID4gKyAgICAgLyogU2V0IHRoZSBzaXplIG9mIGJ1ZmZlciBk ZXBlbmQgb24gdGhlIE1UVSAmIG1heCBidWYgc2l6ZSAqLwo+ID4gKyAgICAgYnVmX3N6ID0gTUFY X0JVRl9TWjsKPiA+ICsKPiA+ICsgICAgIHByaXYtPmRtYV90eCA9IGRtYV9hbGxvY19jb2hlcmVu dChwcml2LT5kZXYsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRt YV9kZXNjX3R4ICoKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mKHN0cnVjdCBkbWFfZGVzYyksCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZwcml2LT5kbWFfdHhfcGh5LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHRlBfS0VSTkVMKTsKPiA+ICsgICAgIGlmICghcHJpdi0+ZG1hX3R4KQo+ID4g KyAgICAgICAgICAgICBnb3RvIGRtYV90eF9lcnI7Cj4gPiArCj4gPiArICAgICBwcml2LT5kbWFf cnggPSBkbWFfYWxsb2NfY29oZXJlbnQocHJpdi0+ZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkbWFfZGVzY19yeCAqCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJpdi0+ZG1hX3J4X3BoeSwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7Cj4gPiArICAgICBp ZiAoIXByaXYtPmRtYV9yeCkKPiA+ICsgICAgICAgICAgICAgZ290byBkbWFfcnhfZXJyOwo+ID4g Kwo+ID4gKyAgICAgcHJpdi0+YnVmX3N6ID0gYnVmX3N6Owo+ID4gKwo+ID4gKyAgICAgcmV0dXJu IDA7Cj4gPiArCj4gPiArZG1hX3J4X2VycjoKPiA+ICsgICAgIGRtYV9mcmVlX2NvaGVyZW50KHBy aXYtPmRldiwgZG1hX2Rlc2NfcnggKiBzaXplb2Yoc3RydWN0IGRtYV9kZXNjKSwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIHByaXYtPmRtYV90eCwgcHJpdi0+ZG1hX3R4X3BoeSk7Cj4gPiAr ZG1hX3R4X2VycjoKPiA+ICsgICAgIGtmcmVlKHByaXYtPnR4X3NrKTsKPiA+ICt0eF9za19lcnI6 Cj4gPiArICAgICBrZnJlZShwcml2LT5yeF9zayk7Cj4gPiArCj4gPiArICAgICByZXR1cm4gLUVO T01FTTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZ2V0aF9mcmVlX3J4X3NrKHN0cnVj dCBnZXRoX3ByaXYgKnByaXYpCj4gPiArewo+ID4gKyAgICAgaW50IGk7Cj4gPiArCj4gPiArICAg ICBmb3IgKGkgPSAwOyBpIDwgZG1hX2Rlc2Nfcng7IGkrKykgewo+ID4gKyAgICAgICAgICAgICBp ZiAocHJpdi0+cnhfc2tbaV0gIT0gTlVMTCkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBkbWFfZGVzYyAqZGVzYyA9IHByaXYtPmRtYV9yeCArIGk7Cj4gPiArCj4gPiArICAgICAg ICAgICAgICAgICAgICAgZG1hX3VubWFwX3NpbmdsZShwcml2LT5kZXYsICh1MzIpZGVzY19idWZf Z2V0X2FkZHIoZGVzYyksCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXNjX2J1Zl9nZXRfbGVuKGRlc2MpLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRE1BX0ZST01fREVWSUNFKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBk ZXZfa2ZyZWVfc2tiX2FueShwcml2LT5yeF9za1tpXSk7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgcHJpdi0+cnhfc2tbaV0gPSBOVUxMOwo+ID4gKyAgICAgICAgICAgICB9Cj4gPiArICAgICB9 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGdldGhfZnJlZV90eF9zayhzdHJ1Y3QgZ2V0 aF9wcml2ICpwcml2KQo+ID4gK3sKPiA+ICsgICAgIGludCBpOwo+ID4gKwo+ID4gKyAgICAgZm9y IChpID0gMDsgaSA8IGRtYV9kZXNjX3R4OyBpKyspIHsKPiA+ICsgICAgICAgICAgICAgaWYgKHBy aXYtPnR4X3NrW2ldICE9IE5VTEwpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZG1hX2Rlc2MgKmRlc2MgPSBwcml2LT5kbWFfdHggKyBpOwo+ID4gKwo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGlmIChkZXNjX2J1Zl9nZXRfYWRkcihkZXNjKSkKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRtYV91bm1hcF9zaW5nbGUocHJpdi0+ZGV2LCAodTMyKWRlc2NfYnVm X2dldF9hZGRyKGRlc2MpLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkZXNjX2J1Zl9nZXRfbGVuKGRlc2MpLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKPiA+ICsgICAgICAg ICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShwcml2LT50eF9za1tpXSk7Cj4gPiArICAg ICAgICAgICAgICAgICAgICAgcHJpdi0+dHhfc2tbaV0gPSBOVUxMOwo+ID4gKyAgICAgICAgICAg ICB9Cj4gPiArICAgICB9Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGdldGhfZnJlZV9k bWFfZGVzYyhzdHJ1Y3QgZ2V0aF9wcml2ICpwcml2KQo+ID4gK3sKPiA+ICsgICAgIC8qIEZyZWUg dGhlIHJlZ2lvbiBvZiBjb25zaXN0ZW50IG1lbW9yeSBwcmV2aW91c2x5IGFsbG9jYXRlZCBmb3Ig dGhlIERNQSAqLwo+ID4gKyAgICAgZG1hX2ZyZWVfY29oZXJlbnQocHJpdi0+ZGV2LCBkbWFfZGVz Y190eCAqIHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgcHJpdi0+ZG1hX3R4LCBwcml2LT5kbWFfdHhfcGh5KTsKPiA+ICsgICAgIGRtYV9mcmVlX2Nv aGVyZW50KHByaXYtPmRldiwgZG1hX2Rlc2NfcnggKiBzaXplb2Yoc3RydWN0IGRtYV9kZXNjKSwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmRtYV9yeCwgcHJpdi0+ZG1hX3J4X3Bo eSk7Cj4gPiArCj4gPiArICAgICBrZnJlZShwcml2LT5yeF9zayk7Cj4gPiArICAgICBrZnJlZShw cml2LT50eF9zayk7Cj4gPiArfQo+ID4gKwo+ID4gKyNpZiBJU19FTkFCTEVEKENPTkZJR19QTSkK PiA+ICsvKgo+ID4gK3N0YXRpYyBpbnQgZ2V0aF9zZWxlY3RfZ3Bpb19zdGF0ZShzdHJ1Y3QgcGlu Y3RybCAqcGN0cmwsIGNoYXIgKm5hbWUpCj4gPiArewo+ID4gKyAgICAgaW50IHJldCA9IDA7Cj4g PiArICAgICBzdHJ1Y3QgcGluY3RybF9zdGF0ZSAqcGN0cmxfc3RhdGUgPSBOVUxMOwo+ID4gKwo+ ID4gKyAgICAgcGN0cmxfc3RhdGUgPSBwaW5jdHJsX2xvb2t1cF9zdGF0ZShwY3RybCwgbmFtZSk7 Cj4gPiArICAgICBpZiAoSVNfRVJSKHBjdHJsX3N0YXRlKSkgewo+ID4gKyAgICAgICAgICAgICBw cl9lcnIoImdtYWMgcGluY3RybF9sb29rdXBfc3RhdGUoJXMpIGZhaWxlZCEgcmV0dXJuICVwXG4i LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUs IHBjdHJsX3N0YXRlKTsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArICAg ICB9Cj4gPiArCj4gPiArICAgICByZXQgPSBwaW5jdHJsX3NlbGVjdF9zdGF0ZShwY3RybCwgcGN0 cmxfc3RhdGUpOwo+ID4gKyAgICAgaWYgKHJldCA8IDApCj4gPiArICAgICAgICAgICAgIHByX2Vy cigiZ21hYyBwaW5jdHJsX3NlbGVjdF9zdGF0ZSglcykgZmFpbGVkISByZXR1cm4gJWRcbiIsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgcmV0 KTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKyovCj4gPiArc3RhdGlj IGludCBnZXRoX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsgICAgIHN0 cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gPiArICAgICBz dHJ1Y3QgZ2V0aF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Cj4gPiArCj4gPiArICAg ICBjYW5jZWxfd29ya19zeW5jKCZwcml2LT5ldGhfd29yayk7Cj4gPiArCj4gPiArICAgICBpZiAo IW5kZXYgfHwgIW5ldGlmX3J1bm5pbmcobmRldikpCj4gPiArICAgICAgICAgICAgIHJldHVybiAw Owo+ID4gKwo+ID4gKyAgICAgcHJpdi0+aXNfc3VzcGVuZCA9IHRydWU7Cj4gPiArCj4gPiArICAg ICBzcGluX2xvY2soJnByaXYtPmxvY2spOwo+ID4gKyAgICAgbmV0aWZfZGV2aWNlX2RldGFjaChu ZGV2KTsKPiA+ICsgICAgIHNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKPiA+ICsKPiA+ICsgICAg IGdldGhfc3RvcChuZGV2KTsKPiA+ICsvKgo+ID4gKyAgICAgaWYgKHByaXYtPnBoeV9leHQgPT0g RVhUX1BIWSkKPiA+ICsKPiA+ICsgICAgIGdldGhfc2VsZWN0X2dwaW9fc3RhdGUocHJpdi0+cGlu Y3RybCwgUElOQ1RSTF9TVEFURV9TTEVFUCk7Cj4gPiArKi8KPiA+ICsgICAgIHJldHVybiAwOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBnZXRoX3Jlc3VtZV93b3JrKHN0cnVjdCB3b3Jr X3N0cnVjdCAqd29yaykKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3QgZ2V0aF9wcml2ICpwcml2ID0g Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBnZXRoX3ByaXYsIGV0aF93b3JrKTsKPiA+ICsgICAg IHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcHJpdi0+bmRldjsKPiA+ICsgICAgIGludCByZXQg PSAwOwo+ID4gKwo+ID4gKyAgICAgaWYgKCFuZXRpZl9ydW5uaW5nKG5kZXYpKQo+ID4gKyAgICAg ICAgICAgICByZXR1cm47Cj4gPiArLyoKPiA+ICsgICAgIGlmIChwcml2LT5waHlfZXh0ID09IEVY VF9QSFkpCj4gPiArICAgICAgICAgICAgIGdldGhfc2VsZWN0X2dwaW9fc3RhdGUocHJpdi0+cGlu Y3RybCwgUElOQ1RSTF9TVEFURV9ERUZBVUxUKTsKPiA+ICsqLwo+ID4gKyAgICAgc3Bpbl9sb2Nr KCZwcml2LT5sb2NrKTsKPiA+ICsgICAgIG5ldGlmX2RldmljZV9hdHRhY2gobmRldik7Cj4gPiAr ICAgICBzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Cj4gPiArCj4gPiArI2lmIElTX0VOQUJMRUQo Q09ORklHX1NVTlhJX0VQSFkpCj4gPiArICAgICBpZiAoIWVwaHlfaXNfZW5hYmxlKCkpIHsKPiA+ ICsgICAgICAgICAgICAgcHJfaW5mbygiW2dldGhfcmVzdW1lXSBlcGh5IGlzIG5vdCBlbmFibGUs IHdhaXRpbmcuLi5cbiIpOwo+ID4gKyAgICAgICAgICAgICBtc2xlZXAoMjAwMCk7Cj4gPiArICAg ICAgICAgICAgIGlmICghZXBoeV9pc19lbmFibGUoKSkgewo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIG5ldGRldl9lcnIobmRldiwgIldhaXQgZm9yIGVwaHkgcmVzdW1lIHRpbWVvdXQuXG4iKTsK PiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cj4gPiArICAgICAgICAgICAgIH0KPiA+ ICsgICAgIH0KPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICsgICAgIHJldCA9IGdldGhfb3BlbihuZGV2 KTsKPiA+ICsgICAgIGlmICghcmV0KQo+ID4gKyAgICAgICAgICAgICBwcml2LT5pc19zdXNwZW5k ID0gZmFsc2U7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGdldGhfcmVzdW1lKHN0cnVj dCBkZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKyAgICAgc3RydWN0IGdldGhfcHJpdiAqcHJpdiA9 IG5ldGRldl9wcml2KG5kZXYpOwo+ID4gKwo+ID4gKyAgICAgc2NoZWR1bGVfd29yaygmcHJpdi0+ ZXRoX3dvcmspOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGdldGhfZnJlZXplKHN0cnVj dCBkZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGludCBnZXRoX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ ICsgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRl dl9wbV9vcHMgZ2V0aF9wbV9vcHMgPSB7Cj4gPiArICAgICAuY29tcGxldGUgPSBnZXRoX3Jlc3Vt ZSwKPiA+ICsgICAgIC5wcmVwYXJlID0gZ2V0aF9zdXNwZW5kLAo+ID4gKyAgICAgLnN1c3BlbmQg PSBOVUxMLAo+ID4gKyAgICAgLnJlc3VtZSA9IE5VTEwsCj4gPiArICAgICAuZnJlZXplID0gZ2V0 aF9mcmVlemUsCj4gPiArICAgICAucmVzdG9yZSA9IGdldGhfcmVzdG9yZSwKPiA+ICt9Owo+ID4g KyNlbHNlCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGdldGhfcG1fb3BzOwo+ ID4gKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KPiA+ICsKPiA+ICsjZGVmaW5lIHN1bnhpX2dldF9z b2NfY2hpcGlkKHgpIHt9Cj4gPiArc3RhdGljIHZvaWQgZ2V0aF9jaGlwX2h3YWRkcih1OCAqYWRk cikKPiA+ICt7Cj4gPiArI2RlZmluZSBNRDVfU0laRSAgICAgMTYKPiA+ICsjZGVmaW5lIENISVBf U0laRSAgICAxNgo+ID4gKwo+ID4gKyAgICAgc3RydWN0IGNyeXB0b19haGFzaCAqdGZtOwo+ID4g KyAgICAgc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcTsKPiA+ICsgICAgIHN0cnVjdCBzY2F0dGVy bGlzdCBzZzsKPiA+ICsgICAgIHU4IHJlc3VsdFtNRDVfU0laRV07Cj4gPiArICAgICB1OCBjaGlw aWRbQ0hJUF9TSVpFXTsKPiA+ICsgICAgIGludCBpID0gMDsKPiA+ICsgICAgIGludCByZXQgPSAt MTsKPiA+ICsKPiA+ICsgICAgIG1lbXNldChjaGlwaWQsIDAsIHNpemVvZihjaGlwaWQpKTsKPiA+ ICsgICAgIG1lbXNldChyZXN1bHQsIDAsIHNpemVvZihyZXN1bHQpKTsKPiA+ICsKPiA+ICsgICAg IHN1bnhpX2dldF9zb2NfY2hpcGlkKCh1OCAqKWNoaXBpZCk7Cj4gPiArCj4gPiArICAgICB0Zm0g PSBjcnlwdG9fYWxsb2NfYWhhc2goIm1kNSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOwo+ID4gKyAg ICAgaWYgKElTX0VSUih0Zm0pKSB7Cj4gPiArICAgICAgICAgICAgIHByX2VycigiRmFpbGVkIHRv IGFsbG9jIG1kNVxuIik7Cj4gPiArICAgICAgICAgICAgIHJldHVybjsKPiA+ICsgICAgIH0KPiA+ ICsKPiA+ICsgICAgIHJlcSA9IGFoYXNoX3JlcXVlc3RfYWxsb2ModGZtLCBHRlBfS0VSTkVMKTsK PiA+ICsgICAgIGlmICghcmVxKQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsKPiA+ICsKPiA+ ICsgICAgIGFoYXNoX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHJlcSwgMCwgTlVMTCwgTlVMTCk7Cj4g PiArCj4gPiArICAgICByZXQgPSBjcnlwdG9fYWhhc2hfaW5pdChyZXEpOwo+ID4gKyAgICAgaWYg KHJldCkgewo+ID4gKyAgICAgICAgICAgICBwcl9lcnIoImNyeXB0b19haGFzaF9pbml0KCkgZmFp bGVkXG4iKTsKPiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAgICB9Cj4gPiArCj4g PiArICAgICBzZ19pbml0X29uZSgmc2csIGNoaXBpZCwgc2l6ZW9mKGNoaXBpZCkpOwo+ID4gKyAg ICAgYWhhc2hfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCAmc2csIHJlc3VsdCwgc2l6ZW9mKGNoaXBp ZCkpOwo+ID4gKyAgICAgcmV0ID0gY3J5cHRvX2FoYXNoX3VwZGF0ZShyZXEpOwo+ID4gKyAgICAg aWYgKHJldCkgewo+ID4gKyAgICAgICAgICAgICBwcl9lcnIoImNyeXB0b19haGFzaF91cGRhdGUo KSBmYWlsZWQgZm9yIGlkXG4iKTsKPiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAg ICB9Cj4gPiArCj4gPiArICAgICByZXQgPSBjcnlwdG9fYWhhc2hfZmluYWwocmVxKTsKPiA+ICsg ICAgIGlmIChyZXQpIHsKPiA+ICsgICAgICAgICAgICAgcHJfZXJyKCJjcnlwdG9fYWhhc2hfZmlu YWwoKSBmYWlsZWQgZm9yIHJlc3VsdFxuIik7Cj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0Owo+ ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgYWhhc2hfcmVxdWVzdF9mcmVlKHJlcSk7Cj4gPiAr Cj4gPiArICAgICAvKiBDaG9vc2UgbWQ1IHJlc3VsdCdzIFswXVsyXVs0XVs2XVs4XVsxMF0gYnl0 ZSBhcyBtYWMgYWRkcmVzcyAqLwo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBp KyspCj4gPiArICAgICAgICAgICAgIGFkZHJbaV0gPSByZXN1bHRbMiAqIGldOwo+ID4gKyAgICAg YWRkclswXSAmPSAweGZlOyAvKiBjbGVhciBtdWx0aWNhc3QgYml0ICovCj4gPiArICAgICBhZGRy WzBdIHw9IDB4MDI7IC8qIHNldCBsb2NhbCBhc3NpZ25tZW50IGJpdCAoSUVFRTgwMikgKi8KPiA+ ICsKPiA+ICtvdXQ6Cj4gPiArICAgICBjcnlwdG9fZnJlZV9haGFzaCh0Zm0pOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgdm9pZCBnZXRoX2NoZWNrX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKm5k ZXYsIHVuc2lnbmVkIGNoYXIgKm1hYykKPiA+ICt7Cj4gPiArICAgICBpbnQgaTsKPiA+ICsgICAg IGNoYXIgKnAgPSBtYWM7Cj4gPiArCj4gPiArICAgICBpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIo bmRldi0+ZGV2X2FkZHIpKSB7Cj4gPiArICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBFVEhf QUxFTjsgaSsrLCBwKyspCj4gPiArICAgICAgICAgICAgICAgICAgICAgbmRldi0+ZGV2X2FkZHJb aV0gPSBzaW1wbGVfc3RydG91bChwLCAmcCwgMTYpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICBp ZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmRldi0+ZGV2X2FkZHIpKQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGdldGhfY2hpcF9od2FkZHIobmRldi0+ZGV2X2FkZHIpOwo+ID4gKwo+ID4gKyAg ICAgICAgICAgICBpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmRldi0+ZGV2X2FkZHIpKSB7Cj4g PiArICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2V0aGVyX2FkZHIobmRldi0+ZGV2X2FkZHIp Owo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByX3dhcm4oIiVzOiBVc2UgcmFuZG9tIG1hYyBh ZGRyZXNzXG4iLCBuZGV2LT5uYW1lKTsKPiA+ICsgICAgICAgICAgICAgfQo+ID4gKyAgICAgfQo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGdldGhfY2xrX2VuYWJsZShzdHJ1Y3QgZ2V0aF9w cml2ICpwcml2KQo+ID4gK3sKPiA+ICsgICAgIGludCByZXQ7Cj4gPiArICAgICBwaHlfaW50ZXJm YWNlX3QgcGh5X2ludGVyZmFjZSA9IDA7Cj4gPiArICAgICB1MzIgY2xrX3ZhbHVlOwo+ID4gKyAg ICAgLyp1MzIgZWZ1c2VfdmFsdWU7Ki8KPiA+ICsvKgo+ID4gKyAgICAgcmV0ID0gcmVzZXRfY29u dHJvbF9kZWFzc2VydChwcml2LT5yZXNldCk7Cj4gPiArICAgICBpZiAocmV0KSB7Cj4gPiArICAg ICAgICAgICAgIHByX2VycigiZGVhc3NlcnQgZ21hYyByc3QgZmFpbGVkIVxuIik7Cj4gPiArICAg ICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICByZXQgPSBj bGtfcHJlcGFyZV9lbmFibGUocHJpdi0+Z2V0aF9jbGspOwo+ID4gKyAgICAgaWYgKHJldCkgewo+ ID4gKyAgICAgICAgICAgICBwcl9lcnIoInRyeSB0byBlbmFibGUgZ2V0aF9jbGsgZmFpbGVkIVxu Iik7Cj4gPiArICAgICAgICAgICAgIGdvdG8gYXNzZXJ0X3Jlc2V0Owo+ID4gKyAgICAgfQo+ID4g Kwo+ID4gKyAgICAgaWYgKCgocHJpdi0+cGh5X2V4dCA9PSBJTlRfUEhZKSB8fCBwcml2LT51c2Vf ZXBoeV9jbGspCj4gPiArICAgICAgICAgICAgICAgICAgICAgJiYgIUlTX0VSUl9PUl9OVUxMKHBy aXYtPmVwaHlfY2xrKSkgewo+ID4gKyAgICAgICAgICAgICByZXQgPSBjbGtfcHJlcGFyZV9lbmFi bGUocHJpdi0+ZXBoeV9jbGspOwo+ID4gKyAgICAgICAgICAgICBpZiAocmV0KSB7Cj4gPiArICAg ICAgICAgICAgICAgICAgICAgcHJfZXJyKCJ0cnkgdG8gZW5hYmxlIGVwaHlfY2xrIGZhaWxlZCFc biIpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXBoeV9jbGtfZGlzYWJsZTsKPiA+ ICsgICAgICAgICAgICAgfQo+ID4gKyAgICAgfQo+ID4gKyovCj4gPiArICAgICBwaHlfaW50ZXJm YWNlID0gcHJpdi0+cGh5X2ludGVyZmFjZTsKPiA+ICsKPiA+ICsgICAgIGNsa192YWx1ZSA9IHJl YWRsKHByaXYtPmJhc2VfcGh5KTsKPiA+ICsgICAgIGlmIChwaHlfaW50ZXJmYWNlID09IFBIWV9J TlRFUkZBQ0VfTU9ERV9SR01JSSkKPiA+ICsgICAgICAgICAgICAgY2xrX3ZhbHVlIHw9IDB4MDAw MDAwMDQ7Cj4gPiArICAgICBlbHNlCj4gPiArICAgICAgICAgICAgIGNsa192YWx1ZSAmPSAofjB4 MDAwMDAwMDQpOwo+ID4gKwo+ID4gKyAgICAgY2xrX3ZhbHVlICY9ICh+MHgwMDAwMjAwMyk7Cj4g PiArICAgICBpZiAocGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUkKPiA+ ICsgICAgICAgICAgICAgICAgICAgICB8fCBwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0Vf TU9ERV9HTUlJKQo+ID4gKyAgICAgICAgICAgICBjbGtfdmFsdWUgfD0gMHgwMDAwMDAwMjsKPiA+ ICsgICAgIGVsc2UgaWYgKHBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkp Cj4gPiArICAgICAgICAgICAgIGNsa192YWx1ZSB8PSAweDAwMDAyMDAxOwo+ID4gKwo+ID4gKyAg ICAgLyppZiAocHJpdi0+cGh5X2V4dCA9PSBJTlRfUEhZKSB7Cj4gPiArICAgICAgICAgICAgIGlm ICgwICE9IHN1bnhpX2VmdXNlX3JlYWQoRUZVU0VfT0VNX05BTUUsICZlZnVzZV92YWx1ZSkpCj4g PiArICAgICAgICAgICAgICAgICAgICAgcHJfZXJyKCJnZXQgUEhZIGVmdXNlIGZhaWwhXG4iKTsK PiA+ICsgICAgICAgICAgICAgZWxzZQo+ID4gKyNpZiBJU19FTkFCTEVEKENPTkZJR19BUkNIX1NV TjUwSVcyKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNsa192YWx1ZSB8PSAoKChlZnVzZV92 YWx1ZSA+PiAyNCkgJiAweDBGKSArIDMpIDw8IDI4Owo+ID4gKyNlbHNlCj4gPiArICAgICAgICAg ICAgICAgICAgICAgcHJfd2FybigibWlzcyBjb25maWcgY29tZSBmcm9tIGVmdXNlIVxuIik7Cj4g PiArI2VuZGlmCj4gPiArICAgICB9Ki8KPiA+ICsKPiA+ICsgICAgIC8qIEFkanVzdCBUeC9SeCBj bG9jayBkZWxheSAqLwo+ID4gKyAgICAgY2xrX3ZhbHVlICY9IH4oMHgwNyA8PCAxMCk7Cj4gPiAr ICAgICBjbGtfdmFsdWUgfD0gKChwcml2LT50eF9kZWxheSAmIDB4MDcpIDw8IDEwKTsKPiA+ICsg ICAgIGNsa192YWx1ZSAmPSB+KDB4MUYgPDwgNSk7Cj4gPiArICAgICBjbGtfdmFsdWUgfD0gKChw cml2LT5yeF9kZWxheSAmIDB4MUYpIDw8IDUpOwo+ID4gKwo+ID4gKyAgICAgd3JpdGVsKGNsa192 YWx1ZSwgcHJpdi0+YmFzZV9waHkpOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICsvKgo+ ID4gK2VwaHlfY2xrX2Rpc2FibGU6Cj4gPiArICAgIGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2 LT5lcGh5X2Nsayk7Cj4gPiArYXNzZXJ0X3Jlc2V0Ogo+ID4gKyAgICByZXNldF9jb250cm9sX2Fz c2VydChwcml2LT5yZXNldCk7Cj4gPiArKi8KPiA+ICsgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHZvaWQgZ2V0aF9jbGtfZGlzYWJsZShzdHJ1Y3QgZ2V0aF9wcml2ICpw cml2KQo+ID4gK3sKPiA+ICsvKgo+ID4gKyAgICAgaWYgKCgocHJpdi0+cGh5X2V4dCA9PSBJTlRf UEhZKSB8fCBwcml2LT51c2VfZXBoeV9jbGspCj4gPiArICAgICAgICAgICAgICAgICAgICAgJiYg IUlTX0VSUl9PUl9OVUxMKHByaXYtPmVwaHlfY2xrKSkKPiA+ICsgICAgICAgICAgICAgY2xrX2Rp c2FibGVfdW5wcmVwYXJlKHByaXYtPmVwaHlfY2xrKTsKPiA+ICsKPiA+ICsgICAgIGNsa19kaXNh YmxlX3VucHJlcGFyZShwcml2LT5nZXRoX2Nsayk7Cj4gPiArICAgIHJlc2V0X2NvbnRyb2xfYXNz ZXJ0KHByaXYtPnJlc2V0KTsKPiA+ICsqLwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBn ZXRoX3R4X2VycihzdHJ1Y3QgZ2V0aF9wcml2ICpwcml2KQo+ID4gK3sKPiA+ICsgICAgIG5ldGlm X3N0b3BfcXVldWUocHJpdi0+bmRldik7Cj4gPiArCj4gPiArICAgICBzdW54aV9zdG9wX3R4KHBy aXYtPmJhc2UpOwo+ID4gKwo+ID4gKyAgICAgZ2V0aF9mcmVlX3R4X3NrKHByaXYpOwo+ID4gKyAg ICAgbWVtc2V0KHByaXYtPmRtYV90eCwgMCwgZG1hX2Rlc2NfdHggKiBzaXplb2Yoc3RydWN0IGRt YV9kZXNjKSk7Cj4gPiArICAgICBkZXNjX2luaXRfY2hhaW4ocHJpdi0+ZG1hX3R4LCAodW5zaWdu ZWQgbG9uZylwcml2LT5kbWFfdHhfcGh5LCBkbWFfZGVzY190eCk7Cj4gPiArICAgICBwcml2LT50 eF9kaXJ0eSA9IDA7Cj4gPiArICAgICBwcml2LT50eF9jbGVhbiA9IDA7Cj4gPiArICAgICBzdW54 aV9zdGFydF90eChwcml2LT5iYXNlLCBwcml2LT5kbWFfdHhfcGh5KTsKPiA+ICsKPiA+ICsgICAg IHByaXYtPm5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOwo+ID4gKyAgICAgbmV0aWZfd2FrZV9xdWV1 ZShwcml2LT5uZGV2KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSB2b2lkIGdldGhf c2NoZWR1bGUoc3RydWN0IGdldGhfcHJpdiAqcHJpdikKPiA+ICt7Cj4gPiArICAgICBpZiAobGlr ZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpKSB7Cj4gPiArICAgICAgICAgICAg IHN1bnhpX2ludF9kaXNhYmxlKHByaXYtPmJhc2UpOwo+ID4gKyAgICAgICAgICAgICBfX25hcGlf c2NoZWR1bGUoJnByaXYtPm5hcGkpOwo+ID4gKyAgICAgfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaXJxcmV0dXJuX3QgZ2V0aF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQo+ID4g K3sKPiA+ICsgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNl ICopZGV2X2lkOwo+ID4gKyAgICAgc3RydWN0IGdldGhfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2 KG5kZXYpOwo+ID4gKyAgICAgaW50IHN0YXR1czsKPiA+ICsKPiA+ICsgICAgIGlmICh1bmxpa2Vs eSghbmRldikpIHsKPiA+ICsgICAgICAgICAgICAgcHJfZXJyKCIlczogaW52YWxpZCBuZGV2IHBv aW50ZXJcbiIsIF9fZnVuY19fKTsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIElSUV9OT05FOwo+ ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgc3RhdHVzID0gc3VueGlfaW50X3N0YXR1cyhwcml2 LT5iYXNlLCAodm9pZCAqKSgmcHJpdi0+eHN0YXRzKSk7Cj4gPiArCj4gPiArICAgICBpZiAobGlr ZWx5KHN0YXR1cyA9PSBoYW5kbGVfdHhfcngpKQo+ID4gKyAgICAgICAgICAgICBnZXRoX3NjaGVk dWxlKHByaXYpOwo+ID4gKyAgICAgZWxzZSBpZiAodW5saWtlbHkoc3RhdHVzID09IHR4X2hhcmRf ZXJyb3JfYnVtcF90YykpCj4gPiArICAgICAgICAgICAgIG5ldGRldl9pbmZvKG5kZXYsICJEbyBu b3RoaW5nIGZvciBidW1wIHRjXG4iKTsKPiA+ICsgICAgIGVsc2UgaWYgKHVubGlrZWx5KHN0YXR1 cyA9PSB0eF9oYXJkX2Vycm9yKSkKPiA+ICsgICAgICAgICAgICAgZ2V0aF90eF9lcnIocHJpdik7 Cj4gPiArICAgICBlbHNlCj4gPiArICAgICAgICAgICAgIG5ldGRldl9pbmZvKG5kZXYsICJEbyBu b3RoaW5nLi4uLi5cbiIpOwo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIElSUV9IQU5ETEVEOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGdldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRl dikKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3QgZ2V0aF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYo bmRldik7Cj4gPiArICAgICBpbnQgcmV0ID0gMDsKPiA+ICsKPiA+ICsgICAgIHJldCA9IGdldGhf cG93ZXJfb24ocHJpdik7Cj4gPiArICAgICBpZiAocmV0KSB7Cj4gPiArICAgICAgICAgICAgIG5l dGRldl9lcnIobmRldiwgIlBvd2VyIG9uIGlzIGZhaWxlZFxuIik7Cj4gPiArICAgICAgICAgICAg IHJldCA9IC1FSU5WQUw7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICByZXQgPSBnZXRoX2Ns a19lbmFibGUocHJpdik7Cj4gPiArICAgICBpZiAocmV0KSB7Cj4gPiArICAgICAgICAgICAgIHBy X2VycigiJXM6IGNsayBlbmFibGUgaXMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Cj4gPiArICAgICAg ICAgICAgIHJldCA9IC1FSU5WQUw7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICBuZXRpZl9j YXJyaWVyX29mZihuZGV2KTsKPiA+ICsKPiA+ICsgICAgIHJldCA9IGdldGhfcGh5X2luaXQobmRl dik7Cj4gPiArICAgICBpZiAocmV0KQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycjsKPiA+ICsK PiA+ICsgICAgIHJldCA9IHN1bnhpX21hY19yZXNldCgodm9pZCAqKXByaXYtPmJhc2UsICZzdW54 aV91ZGVsYXksIDEwMDAwKTsKPiA+ICsgICAgIGlmIChyZXQpIHsKPiA+ICsgICAgICAgICAgICAg bmV0ZGV2X2VycihuZGV2LCAiSW5pdGlhbGl6ZSBoYXJkd2FyZSBlcnJvclxuIik7Cj4gPiArICAg ICAgICAgICAgIGdvdG8gZGVzY19lcnI7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICBzdW54 aV9tYWNfaW5pdChwcml2LT5iYXNlLCB0eG1vZGUsIHJ4bW9kZSk7Cj4gPiArICAgICBzdW54aV9z ZXRfdW1hYyhwcml2LT5iYXNlLCBuZGV2LT5kZXZfYWRkciwgMCk7Cj4gPiArCj4gPiArICAgICBp ZiAoIXByaXYtPmlzX3N1c3BlbmQpIHsKPiA+ICsgICAgICAgICAgICAgcmV0ID0gZ2V0aF9kbWFf ZGVzY19pbml0KG5kZXYpOwo+ID4gKyAgICAgICAgICAgICBpZiAocmV0KSB7Cj4gPiArICAgICAg ICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBn b3RvIGRlc2NfZXJyOwo+ID4gKyAgICAgICAgICAgICB9Cj4gPiArICAgICB9Cj4gPiArCj4gPiAr ICAgICBtZW1zZXQocHJpdi0+ZG1hX3R4LCAwLCBkbWFfZGVzY190eCAqIHNpemVvZihzdHJ1Y3Qg ZG1hX2Rlc2MpKTsKPiA+ICsgICAgIG1lbXNldChwcml2LT5kbWFfcngsIDAsIGRtYV9kZXNjX3J4 ICogc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYykpOwo+ID4gKwo+ID4gKyAgICAgZGVzY19pbml0X2No YWluKHByaXYtPmRtYV9yeCwgKHVuc2lnbmVkIGxvbmcpcHJpdi0+ZG1hX3J4X3BoeSwgZG1hX2Rl c2NfcngpOwo+ID4gKyAgICAgZGVzY19pbml0X2NoYWluKHByaXYtPmRtYV90eCwgKHVuc2lnbmVk IGxvbmcpcHJpdi0+ZG1hX3R4X3BoeSwgZG1hX2Rlc2NfdHgpOwo+ID4gKwo+ID4gKyAgICAgcHJp di0+cnhfY2xlYW4gPSAwOwo+ID4gKyAgICAgcHJpdi0+cnhfZGlydHkgPSAwOwo+ID4gKyAgICAg cHJpdi0+dHhfY2xlYW4gPSAwOwo+ID4gKyAgICAgcHJpdi0+dHhfZGlydHkgPSAwOwo+ID4gKyAg ICAgZ2V0aF9yeF9yZWZpbGwobmRldik7Cj4gPiArCj4gPiArICAgICAvKiBFeHRyYSBzdGF0aXN0 aWNzICovCj4gPiArICAgICBtZW1zZXQoJnByaXYtPnhzdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBn ZXRoX2V4dHJhX3N0YXRzKSk7Cj4gPiArCj4gPiArICAgICBpZiAobmRldi0+cGh5ZGV2KQo+ID4g KyAgICAgICAgICAgICBwaHlfc3RhcnQobmRldi0+cGh5ZGV2KTsKPiA+ICsKPiA+ICsgICAgIHN1 bnhpX3N0YXJ0X3J4KHByaXYtPmJhc2UsICh1bnNpZ25lZCBsb25nKSgoc3RydWN0IGRtYV9kZXNj ICopCj4gPiArICAgICAgICAgICAgICAgICAgICBwcml2LT5kbWFfcnhfcGh5ICsgcHJpdi0+cnhf ZGlydHkpKTsKPiA+ICsgICAgIHN1bnhpX3N0YXJ0X3R4KHByaXYtPmJhc2UsICh1bnNpZ25lZCBs b25nKSgoc3RydWN0IGRtYV9kZXNjICopCj4gPiArICAgICAgICAgICAgICAgICAgICBwcml2LT5k bWFfdHhfcGh5ICsgcHJpdi0+dHhfY2xlYW4pKTsKPiA+ICsKPiA+ICsgICAgIG5hcGlfZW5hYmxl KCZwcml2LT5uYXBpKTsKPiA+ICsgICAgIG5ldGlmX3N0YXJ0X3F1ZXVlKG5kZXYpOwo+ID4gKwo+ ID4gKyAgICAgLyogRW5hYmxlIHRoZSBSeC9UeCAqLwo+ID4gKyAgICAgc3VueGlfbWFjX2VuYWJs ZShwcml2LT5iYXNlKTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gKwo+ID4gK2Rlc2Nf ZXJyOgo+ID4gKyAgICAgZ2V0aF9waHlfcmVsZWFzZShuZGV2KTsKPiA+ICtlcnI6Cj4gPiArICAg ICBnZXRoX2Nsa19kaXNhYmxlKHByaXYpOwo+ID4gKyAgICAgaWYgKHByaXYtPmlzX3N1c3BlbmQp Cj4gPiArICAgICAgICAgICAgIG5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKPiA+ICsKPiA+ICsg ICAgIGdldGhfcG93ZXJfb2ZmKHByaXYpOwo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIHJldDsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBnZXRoX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5k ZXYpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IGdldGhfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2 KG5kZXYpOwo+ID4gKwo+ID4gKyAgICAgbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKPiA+ICsgICAg IG5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7Cj4gPiArCj4gPiArICAgICBuZXRpZl9jYXJyaWVy X29mZihuZGV2KTsKPiA+ICsKPiA+ICsgICAgIC8qIFJlbGVhc2UgUEhZIHJlc291cmNlcyAqLwo+ ID4gKyAgICAgZ2V0aF9waHlfcmVsZWFzZShuZGV2KTsKPiA+ICsKPiA+ICsgICAgIC8qIERpc2Fi bGUgUngvVHggKi8KPiA+ICsgICAgIHN1bnhpX21hY19kaXNhYmxlKHByaXYtPmJhc2UpOwo+ID4g Kwo+ID4gKyAgICAgZ2V0aF9jbGtfZGlzYWJsZShwcml2KTsKPiA+ICsgICAgIGdldGhfcG93ZXJf b2ZmKHByaXYpOwo+ID4gKwo+ID4gKyAgICAgbmV0aWZfdHhfbG9ja19iaChuZGV2KTsKPiA+ICsg ICAgIC8qIFJlbGVhc2UgdGhlIERNQSBUWC9SWCBzb2NrZXQgYnVmZmVycyAqLwo+ID4gKyAgICAg Z2V0aF9mcmVlX3J4X3NrKHByaXYpOwo+ID4gKyAgICAgZ2V0aF9mcmVlX3R4X3NrKHByaXYpOwo+ ID4gKyAgICAgbmV0aWZfdHhfdW5sb2NrX2JoKG5kZXYpOwo+ID4gKwo+ID4gKyAgICAgLyogRW5z dXJlIHRoYXQgaGFyZXdhcmUgaGF2ZSBiZWVuIHN0b3BwZWQgKi8KPiA+ICsgICAgIGlmICghcHJp di0+aXNfc3VzcGVuZCkKPiA+ICsgICAgICAgICAgICAgZ2V0aF9mcmVlX2RtYV9kZXNjKHByaXYp Owo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk IGdldGhfdHhfY29tcGxldGUoc3RydWN0IGdldGhfcHJpdiAqcHJpdikKPiA+ICt7Cj4gPiArICAg ICB1bnNpZ25lZCBpbnQgZW50cnkgPSAwOwo+ID4gKyAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiA9 IE5VTEw7Cj4gPiArICAgICBzdHJ1Y3QgZG1hX2Rlc2MgKmRlc2MgPSBOVUxMOwo+ID4gKyAgICAg aW50IHR4X3N0YXQ7Cj4gPiArCj4gPiArICAgICBzcGluX2xvY2soJnByaXYtPnR4X2xvY2spOwo+ ID4gKyAgICAgd2hpbGUgKGNpcmNfY250KHByaXYtPnR4X2RpcnR5LCBwcml2LT50eF9jbGVhbiwg ZG1hX2Rlc2NfdHgpID4gMCkgewo+ID4gKyAgICAgICAgICAgICBlbnRyeSA9IHByaXYtPnR4X2Ns ZWFuOwo+ID4gKyAgICAgICAgICAgICBkZXNjID0gcHJpdi0+ZG1hX3R4ICsgZW50cnk7Cj4gPiAr Cj4gPiArICAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBkZXNjcmlwdG9yIGlzIG93bmVkIGJ5 IHRoZSBETUEuICovCj4gPiArICAgICAgICAgICAgIGlmIChkZXNjX2dldF9vd24oZGVzYykpCj4g PiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArCj4gPiArICAgICAgICAgICAgIC8q IFZlcmlmeSB0eCBlcnJvciBieSBsb29raW5nIGF0IHRoZSBsYXN0IHNlZ21lbnQgKi8KPiA+ICsg ICAgICAgICAgICAgaWYgKGRlc2NfZ2V0X3R4X2xzKGRlc2MpKSB7Cj4gPiArICAgICAgICAgICAg ICAgICAgICAgdHhfc3RhdCA9IGRlc2NfZ2V0X3R4X3N0YXR1cyhkZXNjLCAodm9pZCAqKSgmcHJp di0+eHN0YXRzKSk7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKGxpa2VseSgh dHhfc3RhdCkpCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5uZGV2LT5z dGF0cy50eF9wYWNrZXRzKys7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgZWxzZQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bmRldi0+c3RhdHMudHhfZXJyb3JzKys7 Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgZG1hX3VubWFwX3Np bmdsZShwcml2LT5kZXYsICh1MzIpZGVzY19idWZfZ2V0X2FkZHIoZGVzYyksCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGVzY19idWZfZ2V0X2xlbihkZXNjKSwgRE1BX1RPX0RF VklDRSk7Cj4gPiArCj4gPiArICAgICAgICAgICAgIHNrYiA9IHByaXYtPnR4X3NrW2VudHJ5XTsK PiA+ICsgICAgICAgICAgICAgcHJpdi0+dHhfc2tbZW50cnldID0gTlVMTDsKPiA+ICsgICAgICAg ICAgICAgZGVzY19pbml0KGRlc2MpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAvKiBGaW5kIG5l eHQgZGlydHkgZGVzYyAqLwo+ID4gKyAgICAgICAgICAgICBwcml2LT50eF9jbGVhbiA9IGNpcmNf aW5jKGVudHJ5LCBkbWFfZGVzY190eCk7Cj4gPiArCj4gPiArICAgICAgICAgICAgIGlmICh1bmxp a2VseShza2IgPT0gTlVMTCkpCj4gPiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4g PiArCj4gPiArICAgICAgICAgICAgIGRldl9rZnJlZV9za2Ioc2tiKTsKPiA+ICsgICAgIH0KPiA+ ICsKPiA+ICsgICAgIGlmICh1bmxpa2VseShuZXRpZl9xdWV1ZV9zdG9wcGVkKHByaXYtPm5kZXYp KSAmJgo+ID4gKyAgICAgICAgIGNpcmNfc3BhY2UocHJpdi0+dHhfZGlydHksIHByaXYtPnR4X2Ns ZWFuLCBkbWFfZGVzY190eCkgPgo+ID4gKyAgICAgICAgIFRYX1RIUkVTSCkgewo+ID4gKyAgICAg ICAgICAgICBuZXRpZl93YWtlX3F1ZXVlKHByaXYtPm5kZXYpOwo+ID4gKyAgICAgfQo+ID4gKyAg ICAgc3Bpbl91bmxvY2soJnByaXYtPnR4X2xvY2spOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg bmV0ZGV2X3R4X3QgZ2V0aF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2 aWNlICpuZGV2KQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBnZXRoX3ByaXYgICpwcml2ID0gbmV0 ZGV2X3ByaXYobmRldik7Cj4gPiArICAgICB1bnNpZ25lZCBpbnQgZW50cnk7Cj4gPiArICAgICBz dHJ1Y3QgZG1hX2Rlc2MgKmRlc2MsICpmaXJzdDsKPiA+ICsgICAgIHVuc2lnbmVkIGludCBsZW4s IHRtcF9sZW4gPSAwOwo+ID4gKyAgICAgaW50IGksIGNzdW1faW5zZXJ0Owo+ID4gKyAgICAgaW50 IG5mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Cj4gPiArICAgICBkbWFfYWRkcl90 IHBhZGRyOwo+ID4gKwo+ID4gKyAgICAgc3Bpbl9sb2NrKCZwcml2LT50eF9sb2NrKTsKPiA+ICsg ICAgIGlmICh1bmxpa2VseShjaXJjX3NwYWNlKHByaXYtPnR4X2RpcnR5LCBwcml2LT50eF9jbGVh biwKPiA+ICsgICAgICAgICBkbWFfZGVzY190eCkgPCAobmZyYWdzICsgMSkpKSB7Cj4gPiArICAg ICAgICAgICAgIGlmICghbmV0aWZfcXVldWVfc3RvcHBlZChuZGV2KSkgewo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIG5ldGRldl9lcnIobmRldiwgIiVzOiBCVUchIFR4IFJpbmcgZnVsbCB3aGVu IHF1ZXVlIGF3YWtlXG4iLCBfX2Z1bmNfXyk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgbmV0 aWZfc3RvcF9xdWV1ZShuZGV2KTsKPiA+ICsgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAg ICBzcGluX3VubG9jaygmcHJpdi0+dHhfbG9jayk7Cj4gPiArCj4gPiArICAgICAgICAgICAgIHJl dHVybiBORVRERVZfVFhfQlVTWTsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIGNzdW1faW5z ZXJ0ID0gKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpOwo+ID4gKyAgICAgZW50 cnkgPSBwcml2LT50eF9kaXJ0eTsKPiA+ICsgICAgIGZpcnN0ID0gcHJpdi0+ZG1hX3R4ICsgZW50 cnk7Cj4gPiArICAgICBkZXNjID0gcHJpdi0+ZG1hX3R4ICsgZW50cnk7Cj4gPiArCj4gPiArICAg ICBsZW4gPSBza2JfaGVhZGxlbihza2IpOwo+ID4gKyAgICAgcHJpdi0+dHhfc2tbZW50cnldID0g c2tiOwo+ID4gKwo+ID4gKyNpZmRlZiBQS1RfREVCVUcKPiA+ICsgICAgIHByaW50aygiPT09PT09 VFggUEtUIERBVEE6ID09PT09PT09PT09PVxuIik7Cj4gPiArICAgICAvKiBkdW1wIHRoZSBwYWNr ZXQgKi8KPiA+ICsgICAgIHByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJza2ItPmRhdGE6ICIs IERVTVBfUFJFRklYX05PTkUsCj4gPiArICAgICAgICAgICAgICAgICAgICAxNiwgMSwgc2tiLT5k YXRhLCA2NCwgdHJ1ZSk7Cj4gPiArI2VuZGlmCj4gPiArCj4gPiArICAgICAvKiBFdmVyeSBkZXNj IG1heCBzaXplIGlzIDJLICovCj4gPiArICAgICB3aGlsZSAobGVuICE9IDApIHsKPiA+ICsgICAg ICAgICAgICAgZGVzYyA9IHByaXYtPmRtYV90eCArIGVudHJ5Owo+ID4gKyAgICAgICAgICAgICB0 bXBfbGVuID0gKChsZW4gPiBNQVhfQlVGX1NaKSA/ICBNQVhfQlVGX1NaIDogbGVuKTsKPiA+ICsK PiA+ICsgICAgICAgICAgICAgcGFkZHIgPSBkbWFfbWFwX3NpbmdsZShwcml2LT5kZXYsIHNrYi0+ ZGF0YSwgdG1wX2xlbiwgRE1BX1RPX0RFVklDRSk7Cj4gPiArICAgICAgICAgICAgIGlmIChkbWFf bWFwcGluZ19lcnJvcihwcml2LT5kZXYsIHBhZGRyKSkgewo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIGRldl9rZnJlZV9za2Ioc2tiKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4g LUVJTzsKPiA+ICsgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgICBkZXNjX2J1Zl9zZXQo ZGVzYywgcGFkZHIsIHRtcF9sZW4pOwo+ID4gKyAgICAgICAgICAgICAvKiBEb24ndCBzZXQgdGhl IGZpcnN0J3Mgb3duIGJpdCwgaGVyZSAqLwo+ID4gKyAgICAgICAgICAgICBpZiAoZmlyc3QgIT0g ZGVzYykgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByaXYtPnR4X3NrW2VudHJ5XSA9IE5V TEw7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgZGVzY19zZXRfb3duKGRlc2MpOwo+ID4gKyAg ICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgIGVudHJ5ID0gY2lyY19pbmMoZW50 cnksIGRtYV9kZXNjX3R4KTsKPiA+ICsgICAgICAgICAgICAgbGVuIC09IHRtcF9sZW47Cj4gPiAr ICAgICB9Cj4gPiArCj4gPiArICAgICBmb3IgKGkgPSAwOyBpIDwgbmZyYWdzOyBpKyspIHsKPiA+ ICsgICAgICAgICAgICAgY29uc3Qgc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYikt PmZyYWdzW2ldOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICBsZW4gPSBza2JfZnJhZ19zaXplKGZy YWcpOwo+ID4gKyAgICAgICAgICAgICBkZXNjID0gcHJpdi0+ZG1hX3R4ICsgZW50cnk7Cj4gPiAr ICAgICAgICAgICAgIHBhZGRyID0gc2tiX2ZyYWdfZG1hX21hcChwcml2LT5kZXYsIGZyYWcsIDAs IGxlbiwgRE1BX1RPX0RFVklDRSk7Cj4gPiArICAgICAgICAgICAgIGlmIChkbWFfbWFwcGluZ19l cnJvcihwcml2LT5kZXYsIHBhZGRyKSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9r ZnJlZV9za2Ioc2tiKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKPiA+ ICsgICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgICBkZXNjX2J1Zl9zZXQoZGVz YywgcGFkZHIsIGxlbik7Cj4gPiArICAgICAgICAgICAgIGRlc2Nfc2V0X293bihkZXNjKTsKPiA+ ICsgICAgICAgICAgICAgcHJpdi0+dHhfc2tbZW50cnldID0gTlVMTDsKPiA+ICsgICAgICAgICAg ICAgZW50cnkgPSBjaXJjX2luYyhlbnRyeSwgZG1hX2Rlc2NfdHgpOwo+ID4gKyAgICAgfQo+ID4g Kwo+ID4gKyAgICAgbmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Cj4gPiArICAgICBw cml2LT50eF9kaXJ0eSA9IGVudHJ5Owo+ID4gKyAgICAgZGVzY190eF9jbG9zZShmaXJzdCwgZGVz YywgY3N1bV9pbnNlcnQpOwo+ID4gKwo+ID4gKyAgICAgZGVzY19zZXRfb3duKGZpcnN0KTsKPiA+ ICsgICAgIHNwaW5fdW5sb2NrKCZwcml2LT50eF9sb2NrKTsKPiA+ICsKPiA+ICsgICAgIGlmIChj aXJjX3NwYWNlKHByaXYtPnR4X2RpcnR5LCBwcml2LT50eF9jbGVhbiwgZG1hX2Rlc2NfdHgpIDw9 Cj4gPiArICAgICAgICAgICAgICAgICAgICAgKE1BWF9TS0JfRlJBR1MgKyAxKSkgewo+ID4gKyAg ICAgICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOwo+ID4gKyAgICAgICAgICAgICBpZiAo Y2lyY19zcGFjZShwcml2LT50eF9kaXJ0eSwgcHJpdi0+dHhfY2xlYW4sIGRtYV9kZXNjX3R4KSA+ Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUWF9USFJFU0gpCj4gPiArICAgICAg ICAgICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZShuZGV2KTsKPiA+ICsgICAgIH0KPiA+ICsK PiA+ICsjaWZkZWYgREVCVUcKPiA+ICsgICAgIHByaW50aygiPT09PT09PVRYIERlc2NyaXB0b3Ig RE1BOiAweCUwOGxseFxuIiwgcHJpdi0+ZG1hX3R4X3BoeSk7Cj4gPiArICAgICBwcmludGsoIlR4 IHBvaW50b3I6IGRpcnR5OiAlZCwgY2xlYW46ICVkXG4iLCBwcml2LT50eF9kaXJ0eSwgcHJpdi0+ dHhfY2xlYW4pOwo+ID4gKyAgICAgZGVzY19wcmludChwcml2LT5kbWFfdHgsIGRtYV9kZXNjX3R4 KTsKPiA+ICsjZW5kaWYKPiA+ICsgICAgIHN1bnhpX3R4X3BvbGwocHJpdi0+YmFzZSk7Cj4gPiAr ICAgICBnZXRoX3R4X2NvbXBsZXRlKHByaXYpOwo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIE5FVERF Vl9UWF9PSzsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBnZXRoX3J4KHN0cnVjdCBnZXRo X3ByaXYgKnByaXYsIGludCBsaW1pdCkKPiA+ICt7Cj4gPiArICAgICB1bnNpZ25lZCBpbnQgcnhj b3VudCA9IDA7Cj4gPiArICAgICB1bnNpZ25lZCBpbnQgZW50cnk7Cj4gPiArICAgICBzdHJ1Y3Qg ZG1hX2Rlc2MgKmRlc2M7Cj4gPiArICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwo+ID4gKyAgICAg aW50IHN0YXR1czsKPiA+ICsgICAgIGludCBmcmFtZV9sZW47Cj4gPiArCj4gPiArICAgICB3aGls ZSAocnhjb3VudCA8IGxpbWl0KSB7Cj4gPiArICAgICAgICAgICAgIGVudHJ5ID0gcHJpdi0+cnhf ZGlydHk7Cj4gPiArICAgICAgICAgICAgIGRlc2MgPSBwcml2LT5kbWFfcnggKyBlbnRyeTsKPiA+ ICsKPiA+ICsgICAgICAgICAgICAgaWYgKGRlc2NfZ2V0X293bihkZXNjKSkKPiA+ICsgICAgICAg ICAgICAgICAgICAgICBicmVhazsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgcnhjb3VudCsrOwo+ ID4gKyAgICAgICAgICAgICBwcml2LT5yeF9kaXJ0eSA9IGNpcmNfaW5jKHByaXYtPnJ4X2RpcnR5 LCBkbWFfZGVzY19yeCk7Cj4gPiArCj4gPiArICAgICAgICAgICAgIC8qIEdldCBsZW5ndGggJiBz dGF0dXMgZnJvbSBoYXJkd2FyZSAqLwo+ID4gKyAgICAgICAgICAgICBmcmFtZV9sZW4gPSBkZXNj X3J4X2ZyYW1lX2xlbihkZXNjKTsKPiA+ICsgICAgICAgICAgICAgc3RhdHVzID0gZGVzY19nZXRf cnhfc3RhdHVzKGRlc2MsICh2b2lkICopKCZwcml2LT54c3RhdHMpKTsKPiA+ICsKPiA+ICsgICAg ICAgICAgICAgbmV0ZGV2X2RiZyhwcml2LT5uZGV2LCAiUnggZnJhbWUgc2l6ZSAlZCwgc3RhdHVz OiAlZFxuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZV9sZW4sIHN0YXR1cyk7 Cj4gPiArCj4gPiArICAgICAgICAgICAgIHNrYiA9IHByaXYtPnJ4X3NrW2VudHJ5XTsKPiA+ICsg ICAgICAgICAgICAgaWYgKHVubGlrZWx5KCFza2IpKSB7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgbmV0ZGV2X2Vycihwcml2LT5uZGV2LCAiU2tiIGlzIG51bGxcbiIpOwo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHByaXYtPm5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKPiA+ICsgICAgICAg ICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyNpZmRl ZiBQS1RfREVCVUcKPiA+ICsgICAgICAgICAgICAgcHJpbnRrKCI9PT09PT1SWCBQS1QgREFUQTog PT09PT09PT09PT09XG4iKTsKPiA+ICsgICAgICAgICAgICAgLyogZHVtcCB0aGUgcGFja2V0ICov Cj4gPiArICAgICAgICAgICAgIHByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJza2ItPmRhdGE6 ICIsIERVTVBfUFJFRklYX05PTkUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx NiwgMSwgc2tiLT5kYXRhLCA2NCwgdHJ1ZSk7Cj4gPiArI2VuZGlmCj4gPiArCj4gPiArICAgICAg ICAgICAgIGlmIChzdGF0dXMgPT0gZGlzY2FyZF9mcmFtZSkgewo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIG5ldGRldl9kYmcocHJpdi0+bmRldiwgIkdldCBlcnJvciBwa3RcbiIpOwo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHByaXYtPm5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAgICAgICB9Cj4gPiArCj4g PiArICAgICAgICAgICAgIGlmICh1bmxpa2VseShzdGF0dXMgIT0gbGxjX3NuYXApKQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIGZyYW1lX2xlbiAtPSBFVEhfRkNTX0xFTjsKPiA+ICsKPiA+ICsg ICAgICAgICAgICAgcHJpdi0+cnhfc2tbZW50cnldID0gTlVMTDsKPiA+ICsKPiA+ICsgICAgICAg ICAgICAgc2tiX3B1dChza2IsIGZyYW1lX2xlbik7Cj4gPiArICAgICAgICAgICAgIGRtYV91bm1h cF9zaW5nbGUocHJpdi0+ZGV2LCAodTMyKWRlc2NfYnVmX2dldF9hZGRyKGRlc2MpLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NfYnVmX2dldF9sZW4oZGVzYyksIERNQV9G Uk9NX0RFVklDRSk7Cj4gPiArCj4gPiArICAgICAgICAgICAgIHNrYi0+cHJvdG9jb2wgPSBldGhf dHlwZV90cmFucyhza2IsIHByaXYtPm5kZXYpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICBza2It PmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwo+ID4gKyAgICAgICAgICAgICBuYXBp X2dyb19yZWNlaXZlKCZwcml2LT5uYXBpLCBza2IpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICBw cml2LT5uZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7Cj4gPiArICAgICAgICAgICAgIHByaXYtPm5k ZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGZyYW1lX2xlbjsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsj aWZkZWYgREVCVUcKPiA+ICsgICAgIGlmIChyeGNvdW50ID4gMCkgewo+ID4gKyAgICAgICAgICAg ICBwcmludGsoIj09PT09PVJYIERlc2NyaXB0b3IgRE1BOiAweCUwOGxseD1cbiIsIHByaXYtPmRt YV9yeF9waHkpOwo+ID4gKyAgICAgICAgICAgICBwcmludGsoIlJYIHBvaW50b3I6IGRpcnR5OiAl ZCwgY2xlYW46ICVkXG4iLCBwcml2LT5yeF9kaXJ0eSwgcHJpdi0+cnhfY2xlYW4pOwo+ID4gKyAg ICAgICAgICAgICBkZXNjX3ByaW50KHByaXYtPmRtYV9yeCwgZG1hX2Rlc2NfcngpOwo+ID4gKyAg ICAgfQo+ID4gKyNlbmRpZgo+ID4gKyAgICAgZ2V0aF9yeF9yZWZpbGwocHJpdi0+bmRldik7Cj4g PiArCj4gPiArICAgICByZXR1cm4gcnhjb3VudDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlu dCBnZXRoX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQo+ID4gK3sK PiA+ICsgICAgIHN0cnVjdCBnZXRoX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YobmFwaSwgc3Ry dWN0IGdldGhfcHJpdiwgbmFwaSk7Cj4gPiArICAgICBpbnQgd29ya19kb25lID0gMDsKPiA+ICsK PiA+ICsgICAgIGdldGhfdHhfY29tcGxldGUocHJpdik7Cj4gPiArICAgICB3b3JrX2RvbmUgPSBn ZXRoX3J4KHByaXYsIGJ1ZGdldCk7Cj4gPiArCj4gPiArICAgICBpZiAod29ya19kb25lIDwgYnVk Z2V0KSB7Cj4gPiArICAgICAgICAgICAgIG5hcGlfY29tcGxldGUobmFwaSk7Cj4gPiArICAgICAg ICAgICAgIHN1bnhpX2ludF9lbmFibGUocHJpdi0+YmFzZSk7Cj4gPiArICAgICB9Cj4gPiArCj4g PiArICAgICByZXR1cm4gd29ya19kb25lOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGdl dGhfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IG5ld19tdHUpCj4gPiAr ewo+ID4gKyAgICAgaW50IG1heF9tdHU7Cj4gPiArCj4gPiArICAgICBpZiAobmV0aWZfcnVubmlu ZyhuZGV2KSkgewo+ID4gKyAgICAgICAgICAgICBwcl9lcnIoIiVzOiBtdXN0IGJlIHN0b3BwZWQg dG8gY2hhbmdlIGl0cyBNVFVcbiIsIG5kZXYtPm5hbWUpOwo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gLUVCVVNZOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgbWF4X210dSA9IFNLQl9NQVhf SEVBRChORVRfU0tCX1BBRCArIE5FVF9JUF9BTElHTik7Cj4gPiArCj4gPiArICAgICBpZiAoKG5l d19tdHUgPCA0NikgfHwgKG5ld19tdHUgPiBtYXhfbXR1KSkgewo+ID4gKyAgICAgICAgICAgICBw cl9lcnIoIiVzOiBpbnZhbGlkIE1UVSwgbWF4IE1UVSBpczogJWRcbiIsIG5kZXYtPm5hbWUsIG1h eF9tdHUpOwo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ICsgICAgIH0KPiA+ ICsKPiA+ICsgICAgIG5kZXYtPm10dSA9IG5ld19tdHU7Cj4gPiArICAgICBuZXRkZXZfdXBkYXRl X2ZlYXR1cmVzKG5kZXYpOwo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCBnZXRoX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0 X2RldmljZSAqbmRldiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCj4gPiArewo+ID4gKyAgICAgcmV0dXJuIGZl YXR1cmVzOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBnZXRoX3NldF9yeF9tb2RlKHN0 cnVjdCBuZXRfZGV2aWNlICpuZGV2KQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBnZXRoX3ByaXYg KnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKPiA+ICsgICAgIHVuc2lnbmVkIGludCB2YWx1ZSA9 IDA7Cj4gPiArCj4gPiArICAgICBwcl9kZWJ1ZygiJXM6ICMgbWNhc3RzICVkLCAjIHVuaWNhc3Qg JWRcbiIsCj4gPiArICAgICAgICAgICAgICBfX2Z1bmNfXywgbmV0ZGV2X21jX2NvdW50KG5kZXYp LCBuZXRkZXZfdWNfY291bnQobmRldikpOwo+ID4gKwo+ID4gKyAgICAgc3Bpbl9sb2NrKCZwcml2 LT5sb2NrKTsKPiA+ICsgICAgIGlmIChuZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7Cj4gPiAr ICAgICAgICAgICAgIHZhbHVlID0gR0VUSF9GUkFNRV9GSUxURVJfUFI7Cj4gPiArICAgICB9IGVs c2UgaWYgKChuZXRkZXZfbWNfY291bnQobmRldikgPiBIQVNIX1RBQkxFX1NJWkUpIHx8Cj4gPiAr ICAgICAgICAgICAgICAgIChuZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKPiA+ICsgICAg ICAgICAgICAgdmFsdWUgPSBHRVRIX0ZSQU1FX0ZJTFRFUl9QTTsgICAvKiBwYXNzIGFsbCBtdWx0 aSAqLwo+ID4gKyAgICAgICAgICAgICBzdW54aV9oYXNoX2ZpbHRlcihwcml2LT5iYXNlLCB+MFVM LCB+MFVMKTsKPiA+ICsgICAgIH0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShuZGV2KSkgewo+ ID4gKyAgICAgICAgICAgICB1MzIgbWNfZmlsdGVyWzJdOwo+ID4gKyAgICAgICAgICAgICBzdHJ1 Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAvKiBIYXNoIGZp bHRlciBmb3IgbXVsdGljYXN0ICovCj4gPiArICAgICAgICAgICAgIHZhbHVlID0gR0VUSF9GUkFN RV9GSUxURVJfSE1DOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICBtZW1zZXQobWNfZmlsdGVyLCAw LCBzaXplb2YobWNfZmlsdGVyKSk7Cj4gPiArICAgICAgICAgICAgIG5ldGRldl9mb3JfZWFjaF9t Y19hZGRyKGhhLCBuZGV2KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgLyogVGhlIHVwcGVy IDYgYml0cyBvZiB0aGUgY2FsY3VsYXRlZCBDUkMgYXJlIHVzZWQgdG8KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgKiAgaW5kZXggdGhlIGNvbnRlbnMgb2YgdGhlIGhhc2ggdGFibGUKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgKi8KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpbnQgYml0 X25yID0gYml0cmV2MzIofmNyYzMyX2xlKH4wLCBoYS0+YWRkciwgNikpID4+IDI2Owo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIC8qIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBkZXRlcm1pbmVz IHRoZSByZWdpc3RlciB0bwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAqIHVzZSAoSC9MKSB3 aGlsZSB0aGUgb3RoZXIgNSBiaXRzIGRldGVybWluZSB0aGUgYml0Cj4gPiArICAgICAgICAgICAg ICAgICAgICAgICogd2l0aGluIHRoZSByZWdpc3Rlci4KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgKi8KPiA+ICsgICAgICAgICAgICAgICAgICAgICBtY19maWx0ZXJbYml0X25yID4+IDVdIHw9 IDEgPDwgKGJpdF9uciAmIDMxKTsKPiA+ICsgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAg ICBzdW54aV9oYXNoX2ZpbHRlcihwcml2LT5iYXNlLCBtY19maWx0ZXJbMF0sIG1jX2ZpbHRlclsx XSk7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICAvKiBIYW5kbGUgbXVsdGlwbGUgdW5pY2Fz dCBhZGRyZXNzZXMgKHBlcmZlY3QgZmlsdGVyaW5nKSovCj4gPiArICAgICBpZiAobmV0ZGV2X3Vj X2NvdW50KG5kZXYpID4gMTYpIHsKPiA+ICsgICAgICAgICAgICAgLyogU3dpdGNoIHRvIHByb21p c2N1b3VzIG1vZGUgaXMgbW9yZSB0aGFuIDggYWRkcnMgYXJlIHJlcXVpcmVkICovCj4gPiArICAg ICAgICAgICAgIHZhbHVlIHw9IEdFVEhfRlJBTUVfRklMVEVSX1BSOwo+ID4gKyAgICAgfSBlbHNl IHsKPiA+ICsgICAgICAgICAgICAgaW50IHJlZyA9IDE7Cj4gPiArICAgICAgICAgICAgIHN0cnVj dCBuZXRkZXZfaHdfYWRkciAqaGE7Cj4gPiArCj4gPiArICAgICAgICAgICAgIG5ldGRldl9mb3Jf ZWFjaF91Y19hZGRyKGhhLCBuZGV2KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgc3VueGlf c2V0X3VtYWMocHJpdi0+YmFzZSwgaGEtPmFkZHIsIHJlZyk7Cj4gPiArICAgICAgICAgICAgICAg ICAgICAgcmVnKys7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsj aWZkZWYgRlJBTUVfRklMVEVSX0RFQlVHCj4gPiArICAgICAvKiBFbmFibGUgUmVjZWl2ZSBhbGwg bW9kZSAodG8gZGVidWcgZmlsdGVyaW5nX2ZhaWwgZXJyb3JzKSAqLwo+ID4gKyAgICAgdmFsdWUg fD0gR0VUSF9GUkFNRV9GSUxURVJfUkE7Cj4gPiArI2VuZGlmCj4gPiArICAgICBzdW54aV9zZXRf ZmlsdGVyKHByaXYtPmJhc2UsIHZhbHVlKTsKPiA+ICsgICAgIHNwaW5fdW5sb2NrKCZwcml2LT5s b2NrKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZ2V0aF90eF90aW1lb3V0KHN0cnVj dCBuZXRfZGV2aWNlICpuZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSkKPiA+ICt7Cj4gPiArICAg ICBzdHJ1Y3QgZ2V0aF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Cj4gPiArCj4gPiAr ICAgICBnZXRoX3R4X2Vycihwcml2KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBnZXRo X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21k KQo+ID4gK3sKPiA+ICsgICAgIGlmICghbmV0aWZfcnVubmluZyhuZGV2KSkKPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArICAgICBpZiAoIW5kZXYtPnBoeWRldikK PiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArICAgICByZXR1cm4g cGh5X21paV9pb2N0bChuZGV2LT5waHlkZXYsIHJxLCBjbWQpOwo+ID4gK30KPiA+ICsKPiA+ICsv KiBDb25maWd1cmF0aW9uIGNoYW5nZXMgKHBhc3NlZCBvbiBieSBpZmNvbmZpZykgKi8KPiA+ICtz dGF0aWMgaW50IGdldGhfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaWZt YXAgKm1hcCkKPiA+ICt7Cj4gPiArICAgICBpZiAobmRldi0+ZmxhZ3MgJiBJRkZfVVApICAgICAg IC8qIGNhbid0IGFjdCBvbiBhIHJ1bm5pbmcgaW50ZXJmYWNlICovCj4gPiArICAgICAgICAgICAg IHJldHVybiAtRUJVU1k7Cj4gPiArCj4gPiArICAgICAvKiBEb24ndCBhbGxvdyBjaGFuZ2luZyB0 aGUgSS9PIGFkZHJlc3MgKi8KPiA+ICsgICAgIGlmIChtYXAtPmJhc2VfYWRkciAhPSBuZGV2LT5i YXNlX2FkZHIpIHsKPiA+ICsgICAgICAgICAgICAgcHJfd2FybigiJXM6IGNhbid0IGNoYW5nZSBJ L08gYWRkcmVzc1xuIiwgbmRldi0+bmFtZSk7Cj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU9Q Tk9UU1VQUDsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIC8qIERvbid0IGFsbG93IGNoYW5n aW5nIHRoZSBJUlEgKi8KPiA+ICsgICAgIGlmIChtYXAtPmlycSAhPSBuZGV2LT5pcnEpIHsKPiA+ ICsgICAgICAgICAgICAgcHJfd2FybigiJXM6IGNhbid0IGNoYW5nZSBJUlEgbnVtYmVyICVkXG4i LCBuZGV2LT5uYW1lLCBuZGV2LT5pcnEpOwo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVPUE5P VFNVUFA7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGludCBnZXRoX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAq bmRldiwgdm9pZCAqcCkKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3QgZ2V0aF9wcml2ICpwcml2ID0g bmV0ZGV2X3ByaXYobmRldik7Cj4gPiArICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwo+ ID4gKwo+ID4gKyAgICAgaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQo+ ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVBRERSTk9UQVZBSUw7Cj4gPiArCj4gPiArICAgICBt ZW1jcHkobmRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5kZXYtPmFkZHJfbGVuKTsKPiA+ ICsgICAgIHN1bnhpX3NldF91bWFjKHByaXYtPmJhc2UsIG5kZXYtPmRldl9hZGRyLCAwKTsKPiA+ ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgZ2V0aF9zZXRfZmVh dHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVz KQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBnZXRoX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihu ZGV2KTsKPiA+ICsKPiA+ICsgICAgIGlmIChmZWF0dXJlcyAmIE5FVElGX0ZfTE9PUEJBQ0sgJiYg bmV0aWZfcnVubmluZyhuZGV2KSkKPiA+ICsgICAgICAgICAgICAgc3VueGlfbWFjX2xvb3BiYWNr KHByaXYtPmJhc2UsIDEpOwo+ID4gKyAgICAgZWxzZQo+ID4gKyAgICAgICAgICAgICBzdW54aV9t YWNfbG9vcGJhY2socHJpdi0+YmFzZSwgMCk7Cj4gPiArCj4gPiArICAgICByZXR1cm4gMDsKPiA+ ICt9Cj4gPiArCj4gPiArI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIp Cj4gPiArLyogUG9sbGluZyByZWNlaXZlIC0gdXNlZCBieSBORVRDT05TT0xFIGFuZCBvdGhlciBk aWFnbm9zdGljIHRvb2xzCj4gPiArICogdG8gYWxsb3cgbmV0d29yayBJL08gd2l0aCBpbnRlcnJ1 cHRzIGRpc2FibGVkLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyB2b2lkIGdldGhfcG9sbF9jb250cm9s bGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCj4gPiArewo+ID4gKyAgICAgZGlzYWJsZV9pcnEo ZGV2LT5pcnEpOwo+ID4gKyAgICAgZ2V0aF9pbnRlcnJ1cHQoZGV2LT5pcnEsIGRldik7Cj4gPiAr ICAgICBlbmFibGVfaXJxKGRldi0+aXJxKTsKPiA+ICt9Cj4gPiArI2VuZGlmCj4gPiArCj4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBnZXRoX25ldGRldl9vcHMgPSB7Cj4g PiArICAgICAubmRvX2luaXQgPSBOVUxMLAo+ID4gKyAgICAgLm5kb19vcGVuID0gZ2V0aF9vcGVu LAo+ID4gKyAgICAgLm5kb19zdGFydF94bWl0ID0gZ2V0aF94bWl0LAo+ID4gKyAgICAgLm5kb19z dG9wID0gZ2V0aF9zdG9wLAo+ID4gKyAgICAgLm5kb19jaGFuZ2VfbXR1ID0gZ2V0aF9jaGFuZ2Vf bXR1LAo+ID4gKyAgICAgLm5kb19maXhfZmVhdHVyZXMgPSBnZXRoX2ZpeF9mZWF0dXJlcywKPiA+ ICsgICAgIC5uZG9fc2V0X3J4X21vZGUgPSBnZXRoX3NldF9yeF9tb2RlLAo+ID4gKyAgICAgLm5k b190eF90aW1lb3V0ID0gZ2V0aF90eF90aW1lb3V0LAo+ID4gKyAgICAgLm5kb19kb19pb2N0bCA9 IGdldGhfaW9jdGwsCj4gPiArICAgICAubmRvX3NldF9jb25maWcgPSBnZXRoX2NvbmZpZywKPiA+ ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUikKPiA+ICsgICAgIC5u ZG9fcG9sbF9jb250cm9sbGVyID0gZ2V0aF9wb2xsX2NvbnRyb2xsZXIsCj4gPiArI2VuZGlmCj4g PiArICAgICAubmRvX3NldF9tYWNfYWRkcmVzcyA9IGdldGhfc2V0X21hY19hZGRyZXNzLAo+ID4g KyAgICAgLm5kb19zZXRfZmVhdHVyZXMgPSBnZXRoX3NldF9mZWF0dXJlcywKPiA+ICt9Owo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgZ2V0aF9jaGVja19pZl9ydW5uaW5nKHN0cnVjdCBuZXRfZGV2aWNl ICpuZGV2KQo+ID4gK3sKPiA+ICsgICAgIGlmICghbmV0aWZfcnVubmluZyhuZGV2KSkKPiA+ICsg ICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgaW50IGdldGhfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2Ug Km5ldGRldiwgaW50IHNzZXQpCj4gPiArewo+ID4gKyAgICAgaW50IGxlbjsKPiA+ICsKPiA+ICsg ICAgIHN3aXRjaCAoc3NldCkgewo+ID4gKyAgICAgY2FzZSBFVEhfU1NfU1RBVFM6Cj4gPiArICAg ICAgICAgICAgIGxlbiA9IDA7Cj4gPiArICAgICAgICAgICAgIHJldHVybiBsZW47Cj4gPiArICAg ICBkZWZhdWx0Ogo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7Cj4gPiArICAg ICB9Cj4gPiArfQo+ID4gKwo+ID4gKy8qc3RhdGljIGludCBnZXRoX2V0aHRvb2xfZ2V0c2V0dGlu Z3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCj4gPiArewo+ID4gKyAgICAgc3RydWN0 IGdldGhfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwo+ID4gKyAgICAgc3RydWN0IHBo eV9kZXZpY2UgKnBoeSA9IG5kZXYtPnBoeWRldjsKPiA+ICsgICAgIGludCByYzsKPiA+ICsKPiA+ ICsgICAgIGlmIChwaHkgPT0gTlVMTCkgewo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfZXJyKG5k ZXYsICIlczogJXM6IFBIWSBpcyBub3QgcmVnaXN0ZXJlZFxuIiwKPiA+ICsgICAgICAgICAgICAg ICAgICAgIF9fZnVuY19fLCBuZGV2LT5uYW1lKTsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1F Tk9ERVY7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICBpZiAoIW5ldGlmX3J1bm5pbmcobmRl dikpIHsKPiA+ICsgICAgICAgICAgICAgcHJfZXJyKCIlczogaW50ZXJmYWNlIGlzIGRpc2FibGVk OiB3ZSBjYW5ub3QgdHJhY2sgIgo+ID4gKyAgICAgICAgICAgICAgICAgICAgImxpbmsgc3BlZWQg LyBkdXBsZXggc2V0dGluZ1xuIiwgbmRldi0+bmFtZSk7Cj4gPiArICAgICAgICAgICAgIHJldHVy biAtRUJVU1k7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICBjbWQtPnRyYW5zY2VpdmVyID0g WENWUl9JTlRFUk5BTDsKPiA+ICsgICAgIHNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwo+ID4g KyAgICAgLy9yYyA9IHBoeV9ldGh0b29sX2dzZXQocGh5LCBjbWQpOwo+ID4gKyAgICAgc3Bpbl91 bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiByYzsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCBnZXRoX2V0aHRvb2xfc2V0c2V0dGluZ3Moc3RydWN0IG5l dF9kZXZpY2UgKm5kZXYsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGV0aHRvb2xfY21kICpjbWQpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IGdldGhfcHJpdiAq cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwo+ID4gKyAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBo eSA9IG5kZXYtPnBoeWRldjsKPiA+ICsgICAgIGludCByYzsKPiA+ICsKPiA+ICsgICAgIHNwaW5f bG9jaygmcHJpdi0+bG9jayk7Cj4gPiArICAgICByYyA9IHBoeV9ldGh0b29sX3NzZXQocGh5LCBj bWQpOwo+ID4gKyAgICAgc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwo+ID4gKwo+ID4gKyAgICAg cmV0dXJuIHJjOwo+ID4gK30qLwo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGdldGhfZXRodG9vbF9n ZXRkcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCj4gPiArewo+ID4g KyAgICAgc3RybGNweShpbmZvLT5kcml2ZXIsICJzdW54aV9nZXRoIiwgc2l6ZW9mKGluZm8tPmRy aXZlcikpOwo+ID4gKwo+ID4gKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OICJTVU5YSSBHYmdp dCBkcml2ZXIgVjEuMSIKPiA+ICsKPiA+ICsgICAgIHN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZf TU9EVUxFX1ZFUlNJT04pOwo+ID4gKyAgICAgaW5mby0+ZndfdmVyc2lvblswXSA9ICdcMCc7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZ2V0aF9ldGh0 b29sX29wcyA9IHsKPiA+ICsgICAgIC5iZWdpbiA9IGdldGhfY2hlY2tfaWZfcnVubmluZywKPiA+ ICsgICAgIC8vLmdldF9zZXR0aW5ncyA9IGdldGhfZXRodG9vbF9nZXRzZXR0aW5ncywKPiA+ICsg ICAgIC8vLnNldF9zZXR0aW5ncyA9IGdldGhfZXRodG9vbF9zZXRzZXR0aW5ncywKPiA+ICsgICAg IC5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCj4gPiArICAgICAuZ2V0X3BhdXNlcGFy YW0gPSBOVUxMLAo+ID4gKyAgICAgLnNldF9wYXVzZXBhcmFtID0gTlVMTCwKPiA+ICsgICAgIC5n ZXRfZXRodG9vbF9zdGF0cyA9IE5VTEwsCj4gPiArICAgICAuZ2V0X3N0cmluZ3MgPSBOVUxMLAo+ ID4gKyAgICAgLmdldF93b2wgPSBOVUxMLAo+ID4gKyAgICAgLnNldF93b2wgPSBOVUxMLAo+ID4g KyAgICAgLmdldF9zc2V0X2NvdW50ID0gZ2V0aF9nZXRfc3NldF9jb3VudCwKPiA+ICsgICAgIC5n ZXRfZHJ2aW5mbyA9IGdldGhfZXRodG9vbF9nZXRkcnZpbmZvLAo+ID4gK307Cj4gPiArCj4gPiAr LyogY29uZmlnIGhhcmR3YXJlIHJlc291cmNlICovCj4gPiArc3RhdGljIGludCBnZXRoX2h3X2lu aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3Qg bmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ID4gKyAgICAg c3RydWN0IGdldGhfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwo+ID4gKyAgICAgc3Ry dWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOwo+ID4gKyAgICAgaW50IHJl dCA9IDA7Cj4gPiArICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiA+ICsgICAgIHUzMiB2YWx1 ZTsKPiA+ICsvLyAgIHN0cnVjdCBncGlvX2NvbmZpZyBjZmc7Cj4gPiArLy8gICBjb25zdCBjaGFy ICpnbWFjX3Bvd2VyOwo+ID4gKy8vICAgY2hhciBwb3dlclsyMF07Cj4gPiArLy8gICBpbnQgaTsK PiA+ICsKPiA+ICsjaWYgMQo+ID4gKyAgICAgcHJpdi0+cGh5X2V4dCA9IEVYVF9QSFk7Cj4gPiAr I2Vsc2UKPiA+ICsgICAgIHByaXYtPnBoeV9leHQgPSBJTlRfUEhZOwo+ID4gKyNlbmRpZgo+ID4g Kwo+ID4gKyAgICAgLyogY29uZmlnIG1lbWVyeSByZXNvdXJjZSAqLwo+ID4gKyAgICAgcmVzID0g cGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPiA+ICsgICAg IGlmICh1bmxpa2VseSghcmVzKSkgewo+ID4gKyAgICAgICAgICAgICBwcl9lcnIoIiVzOiBFUlJP UjogZ2V0IGdtYWMgbWVtb3J5IGZhaWxlZCIsIF9fZnVuY19fKTsKPiA+ICsgICAgICAgICAgICAg cmV0dXJuIC1FTk9ERVY7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICBwcml2LT5iYXNlID0g ZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7Cj4gPiArICAgICBpZiAoIXBy aXYtPmJhc2UpIHsKPiA+ICsgICAgICAgICAgICAgcHJfZXJyKCIlczogRVJST1I6IGdtYWMgbWVt b3J5IG1hcHBpbmcgZmFpbGVkIiwgX19mdW5jX18pOwo+ID4gKyAgICAgICAgICAgICByZXR1cm4g LUVOT01FTTsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIHJlcyA9IHBsYXRmb3JtX2dldF9y ZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7Cj4gPiArICAgICBpZiAodW5saWtlbHko IXJlcykpIHsKPiA+ICsgICAgICAgICAgICAgcHJfZXJyKCIlczogRVJST1I6IGdldCBwaHkgbWVt b3J5IGZhaWxlZCIsIF9fZnVuY19fKTsKPiA+ICsgICAgICAgICAgICAgcmV0ID0gLUVOT0RFVjsK PiA+ICsgICAgICAgICAgICAgZ290byBtZW1fZXJyOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAg ICAgcHJpdi0+YmFzZV9waHkgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVz KTsKPiA+ICsgICAgIGlmICh1bmxpa2VseSghcHJpdi0+YmFzZV9waHkpKSB7Cj4gPiArICAgICAg ICAgICAgIHByX2VycigiJXM6IEVSUk9SOiBwaHkgbWVtb3J5IG1hcHBpbmcgZmFpbGVkIiwgX19m dW5jX18pOwo+ID4gKyAgICAgICAgICAgICByZXQgPSAtRU5PTUVNOwo+ID4gKyAgICAgICAgICAg ICBnb3RvIG1lbV9lcnI7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICAvKiBjb25maWcgSVJR ICovCj4gPiArICAgICBuZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAi Z21hY2lycSIpOwo+ID4gKyAgICAgaWYgKG5kZXYtPmlycSA9PSAtRU5YSU8pIHsKPiA+ICsgICAg ICAgICAgICAgcHJfZXJyKCIlczogRVJST1I6IE1BQyBJUlEgbm90IGZvdW5kXG4iLCBfX2Z1bmNf Xyk7Cj4gPiArICAgICAgICAgICAgIHJldCA9IC1FTlhJTzsKPiA+ICsgICAgICAgICAgICAgZ290 byBpcnFfZXJyOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgcmV0ID0gcmVxdWVzdF9pcnEo bmRldi0+aXJxLCBnZXRoX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldl9uYW1lKCZwZGV2LT5k ZXYpLCBuZGV2KTsKPiA+ICsgICAgIGlmICh1bmxpa2VseShyZXQgPCAwKSkgewo+ID4gKyAgICAg ICAgICAgICBwcl9lcnIoIkNvdWxkIG5vdCByZXF1ZXN0IGlycSAlZCwgZXJyb3I6ICVkXG4iLCBu ZGV2LT5pcnEsIHJldCk7Cj4gPiArICAgICAgICAgICAgIGdvdG8gaXJxX2VycjsKPiA+ICsgICAg IH0KPiA+ICsKPiA+ICsgICAgIC8qIGdldCBnbWFjIHJzdCBoYW5kbGUgKi8KPiA+ICsvKgo+ID4g KyAgICAgcHJpdi0+cmVzZXQgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KCZwZGV2LT5kZXYsIE5V TEwpOwo+ID4gKyAgICAgaWYgKElTX0VSUihwcml2LT5yZXNldCkpIHsKPiA+ICsgICAgICAgICAg ICAgcHJfZXJyKCIlczogR2V0IGdtYWMgcmVzZXQgY29udHJvbCBmYWlsZWQhXG4iLCBfX2Z1bmNf Xyk7Cj4gPiArICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKHByaXYtPnJlc2V0KTsKPiA+ICsg ICAgIH0KPiA+ICsqLwo+ID4gKyAgICAgLyogY29uZmlnIGNsb2NrICovCj4gPiArLyoKPiA+ICsg ICAgIHByaXYtPmdldGhfY2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKG5wLCAiZ21hYyIpOwo+ID4g KyAgICAgaWYgKHVubGlrZWx5KCFwcml2LT5nZXRoX2NsayB8fCBJU19FUlIocHJpdi0+Z2V0aF9j bGspKSkgewo+ID4gKyAgICAgICAgICAgICBwcl9lcnIoIkdldCBnbWFjIGNsb2NrIGZhaWxlZCFc biIpOwo+ID4gKyAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwo+ID4gKyAgICAgICAgICAgICBn b3RvIGNsa19lcnI7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICBpZiAoSU5UX1BIWSA9PSBw cml2LT5waHlfZXh0KSB7Cj4gPiArICAgICAgICAgICAgIHByaXYtPmVwaHlfY2xrID0gb2ZfY2xr X2dldF9ieV9uYW1lKG5wLCAiZXBoeSIpOwo+ID4gKyAgICAgICAgICAgICBpZiAodW5saWtlbHko SVNfRVJSX09SX05VTEwocHJpdi0+ZXBoeV9jbGspKSkgewo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIHByX2VycigiR2V0IGVwaHkgY2xvY2sgZmFpbGVkIVxuIik7Cj4gPiArICAgICAgICAgICAg ICAgICAgICAgcmV0ID0gLUVJTlZBTDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGNs a19lcnI7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgIH0gZWxzZSB7Cj4gPiArICAgICAg ICAgICAgIGlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJ1c2UtZXBoeTI1bSIsICYocHJp di0+dXNlX2VwaHlfY2xrKSkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHBy aXYtPnVzZV9lcGh5X2Nsaykgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByaXYtPmVwaHlf Y2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKG5wLCAiZXBoeSIpOwo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGlmICh1bmxpa2VseShJU19FUlJfT1JfTlVMTChwcml2LT5lcGh5X2NsaykpKSB7Cj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcl9lcnIoIkdldCBlcGh5IGNsayBmYWls ZWQhXG4iKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7 Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGNsa19lcnI7Cj4gPiArICAg ICAgICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgICB9Cj4gPiArICAgICB9Cj4gPiAr Ki8KPiA+ICsgICAgIC8qIGNvbmZpZyBwb3dlciByZWd1bGF0b3IgKi8KPiA+ICsvKgo+ID4gKyAg ICAgaWYgKEVYVF9QSFkgPT0gcHJpdi0+cGh5X2V4dCkgewo+ID4gKyAgICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgUE9XRVJfQ0hBTl9OVU07IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIHNucHJpbnRmKHBvd2VyLCAxNSwgImdtYWMtcG93ZXIlZCIsIGkpOwo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBwb3dlciwgJmdt YWNfcG93ZXIpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmdtYWNfcG93ZXJbaV0gPSBOVUxMOwo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJfaW5mbygiZ21hYy1wb3dlciVkOiBOVUxM XG4iLCBpKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4g KyAgICAgICAgICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBwcml2LT5n bWFjX3Bvd2VyW2ldID0gcmVndWxhdG9yX2dldChOVUxMLCBnbWFjX3Bvd2VyKTsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICBpZiAoSVNfRVJSKHByaXYtPmdtYWNfcG93ZXJbaV0pKSB7Cj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcl9lcnIoImdtYWMtcG93ZXIlZCBnZXQgZXJy b3IhXG4iLCBpKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5W QUw7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGNsa19lcnI7Cj4gPiAr ICAgICAgICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgICB9Cj4gPiArICAgICB9Cj4g PiArKi8KPiA+ICsgICAgIC8qIGNvbmZpZyBvdGhlciBwYXJhbWV0ZXJzICovCj4gPiArICAgICBv Zl9nZXRfcGh5X21vZGUobnAsICYocHJpdi0+cGh5X2ludGVyZmFjZSkpOwo+ID4gKyAgICAgaWYg KHByaXYtPnBoeV9pbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmJgo+ID4gKyAg ICAgICAgIHByaXYtPnBoeV9pbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJICYm Cj4gPiArICAgICAgICAgcHJpdi0+cGh5X2ludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVf Uk1JSSkgewo+ID4gKyAgICAgICAgICAgICBwcl9lcnIoIk5vdCBzdXBwb3J0IHBoeSB0eXBlIVxu Iik7Cj4gPiArICAgICAgICAgICAgIHByaXYtPnBoeV9pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNF X01PREVfTUlJOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgaWYgKCFvZl9wcm9wZXJ0eV9y ZWFkX3UzMihucCwgInR4LWRlbGF5IiwgJnZhbHVlKSkKPiA+ICsgICAgICAgICAgICAgcHJpdi0+ dHhfZGVsYXkgPSB2YWx1ZTsKPiA+ICsKPiA+ICsgICAgIGlmICghb2ZfcHJvcGVydHlfcmVhZF91 MzIobnAsICJyeC1kZWxheSIsICZ2YWx1ZSkpCj4gPiArICAgICAgICAgICAgIHByaXYtPnJ4X2Rl bGF5ID0gdmFsdWU7Cj4gPiArCj4gPiArICAgICAvKiBjb25maWcgcGluY3RybCAqLwo+ID4gKy8q Cj4gPiArICAgICBpZiAoRVhUX1BIWSA9PSBwcml2LT5waHlfZXh0KSB7Cj4gPiArICAgICAgICAg ICAgIHByaXYtPnBoeXJzdCA9IG9mX2dldF9uYW1lZF9ncGlvX2ZsYWdzKG5wLCAicGh5LXJzdCIs IDAsIChlbnVtIG9mX2dwaW9fZmxhZ3MgKikmY2ZnKTsKPiA+ICsgICAgICAgICAgICAgcHJpdi0+ cnN0X2FjdGl2ZV9sb3cgPSAoY2ZnLmRhdGEgPT0gT0ZfR1BJT19BQ1RJVkVfTE9XKSA/IDEgOiAw Owo+ID4gKwo+ID4gKyAgICAgICAgICAgICBpZiAoZ3Bpb19pc192YWxpZChwcml2LT5waHlyc3Qp KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKGdwaW9fcmVxdWVzdChwcml2LT5waHly c3QsICJwaHktcnN0IikgPCAwKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cl9lcnIoImdtYWMgZ3BpbyByZXF1ZXN0IGZhaWwhXG4iKTsKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIHBpbl9lcnI7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgfQo+ID4gKyAgICAg ICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgIHByaXYtPnBpbmN0cmwgPSBkZXZtX3Bp bmN0cmxfZ2V0X3NlbGVjdF9kZWZhdWx0KCZwZGV2LT5kZXYpOwo+ID4gKyAgICAgICAgICAgICBp ZiAoSVNfRVJSX09SX05VTEwocHJpdi0+cGluY3RybCkpIHsKPiA+ICsgICAgICAgICAgICAgICAg ICAgICBwcl9lcnIoImdtYWMgcGluY3RybCBlcnJvciFcbiIpOwo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIHByaXYtPnBpbmN0cmwgPSBOVUxMOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJl dCA9IC1FSU5WQUw7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgZ290byBwaW5fZXJyOwo+ID4g KyAgICAgICAgICAgICB9Cj4gPiArICAgICB9Cj4gPiArKi8KPiA+ICsgICAgIHJldHVybiAwOwo+ ID4gKwo+ID4gKy8vcGluX2VycjoKPiA+ICsvKgo+ID4gKyAgICAgaWYgKEVYVF9QSFkgPT0gcHJp di0+cGh5X2V4dCkgewo+ID4gKyAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUE9XRVJfQ0hB Tl9OVU07IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChJU19FUlJfT1JfTlVM TChwcml2LT5nbWFjX3Bvd2VyW2ldKSkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXRvcl9wdXQocHJpdi0+ Z21hY19wb3dlcltpXSk7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgIH0KPiA+ICsqLwo+ ID4gKy8vY2xrX2VycjoKPiA+ICsvLyAgIGZyZWVfaXJxKG5kZXYtPmlycSwgbmRldik7Cj4gPiAr aXJxX2VycjoKPiA+ICsgICAgIGRldm1faW91bm1hcCgmcGRldi0+ZGV2LCBwcml2LT5iYXNlX3Bo eSk7Cj4gPiArbWVtX2VycjoKPiA+ICsgICAgIGRldm1faW91bm1hcCgmcGRldi0+ZGV2LCBwcml2 LT5iYXNlKTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyB2b2lkIGdldGhfaHdfcmVsZWFzZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2Ry dmRhdGEocGRldik7Cj4gPiArICAgICBzdHJ1Y3QgZ2V0aF9wcml2ICpwcml2ID0gbmV0ZGV2X3By aXYobmRldik7Cj4gPiArCj4gPiArICAgICBkZXZtX2lvdW5tYXAoJnBkZXYtPmRldiwgKHByaXYt PmJhc2VfcGh5KSk7Cj4gPiArICAgICBkZXZtX2lvdW5tYXAoJnBkZXYtPmRldiwgcHJpdi0+YmFz ZSk7Cj4gPiArICAgICBmcmVlX2lycShuZGV2LT5pcnEsIG5kZXYpOwo+ID4gKy8qCj4gPiArICAg ICBpZiAocHJpdi0+Z2V0aF9jbGspCj4gPiArICAgICAgICAgICAgIGNsa19wdXQocHJpdi0+Z2V0 aF9jbGspOwo+ID4gKwo+ID4gKyAgICAgaWYgKEVYVF9QSFkgPT0gcHJpdi0+cGh5X2V4dCkgewo+ ID4gKyAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUE9XRVJfQ0hBTl9OVU07IGkrKykgewo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChJU19FUlJfT1JfTlVMTChwcml2LT5nbWFjX3Bv d2VyW2ldKSkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4g KyAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXRvcl9wdXQocHJpdi0+Z21hY19wb3dlcltpXSk7 Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgaWYgKCFJU19FUlJf T1JfTlVMTChwcml2LT5waW5jdHJsKSkKPiA+ICsgICAgICAgICAgICAgICAgICAgICBkZXZtX3Bp bmN0cmxfcHV0KHByaXYtPnBpbmN0cmwpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICBpZiAoZ3Bp b19pc192YWxpZChwcml2LT5waHlyc3QpKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdwaW9f ZnJlZShwcml2LT5waHlyc3QpOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgaWYgKCFJU19F UlJfT1JfTlVMTChwcml2LT5lcGh5X2NsaykpCj4gPiArICAgICAgICAgICAgIGNsa19wdXQocHJp di0+ZXBoeV9jbGspOwo+ID4gKyovCj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGdldGhf cHJvYmUKPiA+ICsgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlIHBvaW50ZXIKPiA+ICsgKiBEZXNj cmlwdGlvbjogdGhlIGRyaXZlciBpcyBpbml0aWFsaXplZCB0aHJvdWdoIHBsYXRmb3JtX2Rldmlj ZS4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgaW50IGdldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKPiA+ICt7Cj4gPiArICAgICBpbnQgcmV0ID0gMDsKPiA+ICsgICAgIHN0cnVj dCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDsKPiA+ICsgICAgIHN0cnVjdCBnZXRoX3ByaXYgKnBy aXY7Cj4gPiArCj4gPiArICAgICBwcl9pbmZvKCJzdW54aSBnbWFjIGRyaXZlcidzIHZlcnNpb246 ICVzXG4iLCBTVU5YSV9HTUFDX1ZFUlNJT04pOwo+ID4gKwo+ID4gKyNpZiBJU19FTkFCTEVEKENP TkZJR19PRikKPiA+ICsgICAgIHBkZXYtPmRldi5kbWFfbWFzayA9ICZnZXRoX2RtYV9tYXNrOwo+ ID4gKyAgICAgcGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsK PiA+ICsjZW5kaWYKPiA+ICsKPiA+ICsgICAgIG5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yo c3RydWN0IGdldGhfcHJpdikpOwo+ID4gKyAgICAgaWYgKCFuZGV2KSB7Cj4gPiArICAgICAgICAg ICAgIGRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBkZXZpY2UuXG4iKTsK PiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPiArICAgICB9Cj4gPiArICAgICBT RVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKPiA+ICsKPiA+ICsgICAgIHByaXYgPSBu ZXRkZXZfcHJpdihuZGV2KTsKPiA+ICsgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5k ZXYpOwo+ID4gKwo+ID4gKyAgICAgLyogTXVzdCBzZXQgcHJpdmF0ZSBkYXRhIHRvIHBkZXYsIGJl Zm9yZSBjYWxsIGl0ICovCj4gPiArICAgICByZXQgPSBnZXRoX2h3X2luaXQocGRldik7Cj4gPiAr ICAgICBpZiAoMCAhPSByZXQpIHsKPiA+ICsgICAgICAgICAgICAgcHJfZXJyKCJnZXRoX2h3X2lu aXQgZmFpbCFcbiIpOwo+ID4gKyAgICAgICAgICAgICBnb3RvIGh3X2VycjsKPiA+ICsgICAgIH0K PiA+ICsKPiA+ICsgICAgIC8qIHNldHVwIHRoZSBuZXRkZXZpY2UsIGZpbGwgdGhlIGZpZWxkIG9m IG5ldGRldmljZSAqLwo+ID4gKyAgICAgZXRoZXJfc2V0dXAobmRldik7Cj4gPiArICAgICBuZGV2 LT5uZXRkZXZfb3BzID0gJmdldGhfbmV0ZGV2X29wczsKPiA+ICsgICAgIG5ldGRldl9zZXRfZGVm YXVsdF9ldGh0b29sX29wcyhuZGV2LCAmZ2V0aF9ldGh0b29sX29wcyk7Cj4gPiArICAgICBuZGV2 LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylwcml2LT5iYXNlOwo+ID4gKwo+ID4gKyAgICAg cHJpdi0+bmRldiA9IG5kZXY7Cj4gPiArICAgICBwcml2LT5kZXYgPSAmcGRldi0+ZGV2Owo+ID4g Kwo+ID4gKyAgICAgLyogVE9ETzogc3VwcG9ydCB0aGUgVkxBTiBmcmFtZXMgKi8KPiA+ICsgICAg IG5kZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSElHSERNQSB8IE5FVElG X0ZfSVBfQ1NVTSB8Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRJRl9GX0lQ VjZfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNOwo+ID4gKwo+ID4gKyAgICAgbmRldi0+ZmVhdHVyZXMg fD0gbmRldi0+aHdfZmVhdHVyZXM7Cj4gPiArICAgICBuZGV2LT5od19mZWF0dXJlcyB8PSBORVRJ Rl9GX0xPT1BCQUNLOwo+ID4gKyAgICAgbmRldi0+cHJpdl9mbGFncyB8PSBJRkZfVU5JQ0FTVF9G TFQ7Cj4gPiArCj4gPiArICAgICBuZGV2LT53YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZp ZXMod2F0Y2hkb2cpOwo+ID4gKwo+ID4gKyAgICAgbmV0aWZfbmFwaV9hZGQobmRldiwgJnByaXYt Pm5hcGksIGdldGhfcG9sbCwgIEJVREdFVCk7Cj4gPiArCj4gPiArICAgICBzcGluX2xvY2tfaW5p dCgmcHJpdi0+bG9jayk7Cj4gPiArICAgICBzcGluX2xvY2tfaW5pdCgmcHJpdi0+dHhfbG9jayk7 Cj4gPiArCj4gPiArICAgICAvKiBUaGUgbGFzdCB2YWwgaXMgbWRjIGNsb2NrIHJhdGlvICovCj4g PiArICAgICBzdW54aV9nZXRoX3JlZ2lzdGVyKCh2b2lkICopbmRldi0+YmFzZV9hZGRyLCBIV19W RVJTSU9OLCAweDAzKTsKPiA+ICsKPiA+ICsgICAgIHJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2 KTsKPiA+ICsgICAgIGlmIChyZXQpIHsKPiA+ICsgICAgICAgICAgICAgbmV0aWZfbmFwaV9kZWwo JnByaXYtPm5hcGkpOwo+ID4gKyAgICAgICAgICAgICBwcl9lcnIoIkVycm9yOiBSZWdpc3RlciAl cyBmYWlsZWRcbiIsIG5kZXYtPm5hbWUpOwo+ID4gKyAgICAgICAgICAgICBnb3RvIHJlZ19lcnI7 Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICAvKiBCZWZvcmUgb3BlbiB0aGUgZGV2aWNlLCB0 aGUgbWFjIGFkZHJlc3Mgc2hvdWxkIGJlIHNldCAqLwo+ID4gKyAgICAgZ2V0aF9jaGVja19hZGRy KG5kZXYsIG1hY19zdHIpOwo+ID4gKwo+ID4gKyNpZmRlZiBDT05GSUdfR0VUSF9BVFRSUwo+ID4g KyAgICAgZ2V0aF9jcmVhdGVfYXR0cnMobmRldik7Cj4gPiArI2VuZGlmCj4gPiArICAgICBkZXZp Y2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2dwaHlfdGVzdCk7Cj4gPiArICAg ICBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX21paV9yZWcpOwo+ID4g KyAgICAgZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9sb29wYmFja190 ZXN0KTsKPiA+ICsgICAgIGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJf ZXh0cmFfdHhfc3RhdHMpOwo+ID4gKyAgICAgZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYs ICZkZXZfYXR0cl9leHRyYV9yeF9zdGF0cyk7Cj4gPiArCj4gPiArICAgICBkZXZpY2VfZW5hYmxl X2FzeW5jX3N1c3BlbmQoJnBkZXYtPmRldik7Cj4gPiArCj4gPiArI2lmIElTX0VOQUJMRUQoQ09O RklHX1BNKQo+ID4gKyAgICAgSU5JVF9XT1JLKCZwcml2LT5ldGhfd29yaywgZ2V0aF9yZXN1bWVf d29yayk7Cj4gPiArI2VuZGlmCj4gPiArCj4gPiArICAgICByZXR1cm4gMDsKPiA+ICsKPiA+ICty ZWdfZXJyOgo+ID4gKyAgICAgZ2V0aF9od19yZWxlYXNlKHBkZXYpOwo+ID4gK2h3X2VycjoKPiA+ ICsgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwo+ID4gKyAgICAgZnJlZV9u ZXRkZXYobmRldik7Cj4gPiArCj4gPiArICAgICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgaW50IGdldGhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4g PiArewo+ID4gKyAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2 ZGF0YShwZGV2KTsKPiA+ICsgICAgIHN0cnVjdCBnZXRoX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJp dihuZGV2KTsKPiA+ICsKPiA+ICsgICAgIGRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAm ZGV2X2F0dHJfZ3BoeV90ZXN0KTsKPiA+ICsgICAgIGRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ ZGV2LCAmZGV2X2F0dHJfbWlpX3JlZyk7Cj4gPiArICAgICBkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBk ZXYtPmRldiwgJmRldl9hdHRyX2xvb3BiYWNrX3Rlc3QpOwo+ID4gKyAgICAgZGV2aWNlX3JlbW92 ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9leHRyYV90eF9zdGF0cyk7Cj4gPiArICAgICBk ZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2V4dHJhX3J4X3N0YXRzKTsK PiA+ICsKPiA+ICsgICAgIG5ldGlmX25hcGlfZGVsKCZwcml2LT5uYXBpKTsKPiA+ICsgICAgIHVu cmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwo+ID4gKyAgICAgZ2V0aF9od19yZWxlYXNlKHBkZXYpOwo+ ID4gKyAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Cj4gPiArICAgICBmcmVl X25ldGRldihuZGV2KTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBnZXRoX29mX21hdGNoW10gPSB7Cj4g PiArICAgICB7LmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bnhpLWdtYWMiLH0sCj4gPiArICAg ICB7fSwKPiA+ICt9Owo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGdldGhfb2ZfbWF0Y2gp Owo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdldGhfZHJpdmVyID0g ewo+ID4gKyAgICAgLnByb2JlICA9IGdldGhfcHJvYmUsCj4gPiArICAgICAucmVtb3ZlID0gZ2V0 aF9yZW1vdmUsCj4gPiArICAgICAuZHJpdmVyID0gewo+ID4gKyAgICAgICAgICAgICAgICAubmFt ZSA9ICJzdW54aS1nbWFjIiwKPiA+ICsgICAgICAgICAgICAgICAgLm93bmVyID0gVEhJU19NT0RV TEUsCj4gPiArICAgICAgICAgICAgICAgIC5wbSA9ICZnZXRoX3BtX29wcywKPiA+ICsgICAgICAg ICAgICAgICAgLm9mX21hdGNoX3RhYmxlID0gZ2V0aF9vZl9tYXRjaCwKPiA+ICsgICAgIH0sCj4g PiArfTsKPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGdldGhfZHJpdmVyKTsKPiA+ICsKPiA+ ICsjaWZkZWYgTU9EVUxFCj4gPiArc3RhdGljIGludCBfX2luaXQgc2V0X21hY19hZGRyKGNoYXIg KnN0cikKPiA+ICt7Cj4gPiArICAgICBjaGFyICpwID0gc3RyOwo+ID4gKwo+ID4gKyAgICAgaWYg KHN0ciAmJiBzdHJsZW4oc3RyKSkKPiA+ICsgICAgICAgICAgICAgbWVtY3B5KG1hY19zdHIsIHAs IDE4KTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICtfX3NldHVwKCJtYWNf YWRkcj0iLCBzZXRfbWFjX2FkZHIpOwo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gK01PRFVMRV9ERVND UklQVElPTigiQWxsd2lubmVyIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIik7Cj4gPiArTU9EVUxF X0FVVEhPUigiZnV6aGFva2UgPGZ1emhhb2tlQGFsbHdpbm5lcnRlY2guY29tPiIpOwo+ID4gK01P RFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9ldGhlcm5ldC9hbGx3aW5uZXJ0bXAvc3VueGktZ21hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJu ZXQvYWxsd2lubmVydG1wL3N1bnhpLWdtYWMuaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ IGluZGV4IDAwMDAwMDAwLi5lYTdhNmYxNQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJp dmVycy9uZXQvZXRoZXJuZXQvYWxsd2lubmVydG1wL3N1bnhpLWdtYWMuaAo+ID4gQEAgLTAsMCAr MSwyNTggQEAKPiA+ICsvKgo+ID4gKyAqIGxpbnV4L2RyaXZlcnMvbmV0L2V0aGVybmV0L2FsbHdp bm5lci9zdW54aV9nbWFjLmgKPiA+ICsgKgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE2LTIwMTgs IGZ1emhhb2tlCj4gPiArICogICAgICAgICAgIEF1dGhvcjogZnV6aGFva2UgPGZ1emhhb2tlQGFs bHdpbm5lcnRlY2guY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBmaWxlIGlzIHByb3ZpZGVkIHVu ZGVyIGEgZHVhbCBCU0QvR1BMIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCj4gPiArICogcmVkaXN0 cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhlciBsaWNlbnNlLgo+ ID4gKyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+ICsgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICAgICAgIFNlZSB0aGUKPiA+ ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ID4gKyAq Lwo+ID4gKyNpZm5kZWYgX19TVU5YSV9HRVRIX0hfXwo+ID4gKyNkZWZpbmUgX19TVU5YSV9HRVRI X0hfXwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcGh5Lmg+Cj4gPiAr I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4g PiArCj4gPiArLyogR0VUSF9GUkFNRV9GSUxURVIgIHJlZ2lzdGVyIHZhbHVlICovCj4gPiArI2Rl ZmluZSBHRVRIX0ZSQU1FX0ZJTFRFUl9QUiAweDAwMDAwMDAxICAgICAgLyogUHJvbWlzY3VvdXMg TW9kZSAqLwo+ID4gKyNkZWZpbmUgR0VUSF9GUkFNRV9GSUxURVJfSFVDICAgICAgICAweDAwMDAw MDAyICAgICAgLyogSGFzaCBVbmljYXN0ICovCj4gPiArI2RlZmluZSBHRVRIX0ZSQU1FX0ZJTFRF Ul9ITUMgICAgICAgIDB4MDAwMDAwMDQgICAgICAvKiBIYXNoIE11bHRpY2FzdCAqLwo+ID4gKyNk ZWZpbmUgR0VUSF9GUkFNRV9GSUxURVJfREFJRiAgICAgICAweDAwMDAwMDA4ICAgICAgLyogREEg SW52ZXJzZSBGaWx0ZXJpbmcgKi8KPiA+ICsjZGVmaW5lIEdFVEhfRlJBTUVfRklMVEVSX1BNIDB4 MDAwMDAwMTAgICAgICAvKiBQYXNzIGFsbCBtdWx0aWNhc3QgKi8KPiA+ICsjZGVmaW5lIEdFVEhf RlJBTUVfRklMVEVSX0RCRiAgICAgICAgMHgwMDAwMDAyMCAgICAgIC8qIERpc2FibGUgQnJvYWRj YXN0IGZyYW1lcyAqLwo+ID4gKyNkZWZpbmUgR0VUSF9GUkFNRV9GSUxURVJfU0FJRiAgICAgICAw eDAwMDAwMTAwICAgICAgLyogSW52ZXJzZSBGaWx0ZXJpbmcgKi8KPiA+ICsjZGVmaW5lIEdFVEhf RlJBTUVfRklMVEVSX1NBRiAgICAgICAgMHgwMDAwMDIwMCAgICAgIC8qIFNvdXJjZSBBZGRyZXNz IEZpbHRlciAqLwo+ID4gKyNkZWZpbmUgR0VUSF9GUkFNRV9GSUxURVJfSFBGICAgICAgICAweDAw MDAwNDAwICAgICAgLyogSGFzaCBvciBwZXJmZWN0IEZpbHRlciAqLwo+ID4gKyNkZWZpbmUgR0VU SF9GUkFNRV9GSUxURVJfUkEgMHg4MDAwMDAwMCAgICAgIC8qIFJlY2VpdmUgYWxsIG1vZGUgKi8K PiA+ICsKPiA+ICsvKiBEZWZhdWx0IHR4IGRlc2NyaXB0b3IgKi8KPiA+ICsjZGVmaW5lIFRYX1NJ TkdMRV9ERVNDMCAgICAgICAgICAgICAgMHg4MDAwMDAwMAo+ID4gKyNkZWZpbmUgVFhfU0lOR0xF X0RFU0MxICAgICAgICAgICAgICAweDYzMDAwMDAwCj4gPiArCj4gPiArLyogRGVmYXVsdCByeCBk ZXNjcmlwdG9yICovCj4gPiArI2RlZmluZSBSWF9TSU5HTEVfREVTQzAgICAgICAgICAgICAgIDB4 ODAwMDAwMDAKPiA+ICsjZGVmaW5lIFJYX1NJTkdMRV9ERVNDMSAgICAgICAgICAgICAgMHg4MzAw MDAwMAo+ID4gKwo+ID4gK3R5cGVkZWYgdW5pb24gewo+ID4gKyAgICAgc3RydWN0IHsKPiA+ICsg ICAgICAgICAgICAgLyogVERFUzAgKi8KPiA+ICsgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRl ZmVycmVkOjE7ICAgICAgICAvKiBEZWZlcnJlZCBiaXQgKG9ubHkgaGFsZi1kdXBsZXgpICovCj4g PiArICAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bmRlcl9lcnI6MTsgICAgICAgLyogVW5kZXJm bG93IGVycm9yICovCj4gPiArICAgICAgICAgICAgIHVuc2lnbmVkIGludCBleF9kZWZlcnJhbDox OyAgICAgLyogRXhjZXNzaXZlIGRlZmVycmFsICovCj4gPiArICAgICAgICAgICAgIHVuc2lnbmVk IGludCBjb2xsX2NudDo0OyAgICAgICAgLyogQ29sbGlzaW9uIGNvdW50ICovCj4gPiArICAgICAg ICAgICAgIHVuc2lnbmVkIGludCB2bGFuX3RhZzoxOyAgICAgICAgLyogVkxBTiBGcmFtZSAqLwo+ ID4gKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXhfY29sbDoxOyAgICAgICAgIC8qIEV4Y2Vz c2l2ZSBjb2xsaXNpb24gKi8KPiA+ICsgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxhdGVfY29s bDoxOyAgICAgICAvKiBMYXRlIGNvbGxpc2lvbiAqLwo+ID4gKyAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgbm9fY2FycjoxOyAgICAgICAgIC8qIE5vIGNhcnJpZXIgKi8KPiA+ICsgICAgICAgICAg ICAgdW5zaWduZWQgaW50IGxvc3NfY2FycjoxOyAgICAgICAvKiBMb3NzIG9mIGNvbGxpc2lvbiAq Lwo+ID4gKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaXBkYXRfZXJyOjE7ICAgICAgIC8qIElQ IHBheWxvYWQgZXJyb3IgKi8KPiA+ICsgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZybV9mbHU6 MTsgICAgICAgICAvKiBGcmFtZSBmbHVzaGVkICovCj4gPiArICAgICAgICAgICAgIHVuc2lnbmVk IGludCBqYWJfdGltZW91dDoxOyAgICAgLyogSmFiYmVyIHRpbWVvdXQgKi8KPiA+ICsgICAgICAg ICAgICAgdW5zaWduZWQgaW50IGVycl9zdW06MTsgICAgICAgICAvKiBFcnJvciBzdW1tYXJ5ICov Cj4gPiArICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpcGhlYWRfZXJyOjE7ICAgICAgLyogSVAg aGVhZGVyIGVycm9yICovCj4gPiArICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0dHNzOjE7ICAg ICAgICAgICAgLyogVHJhbnNtaXQgdGltZSBzdGFtcCBzdGF0dXMgKi8KPiA+ICsgICAgICAgICAg ICAgdW5zaWduZWQgaW50IHJlc2VydmVkMDoxMzsKPiA+ICsgICAgICAgICAgICAgdW5zaWduZWQg aW50IG93bjoxOyAgICAgICAgICAgICAvKiBPd24gYml0LiBDUFU6MCwgRE1BOjEgKi8KPiA+ICsg ICAgIH0gdHg7Cj4gPiArCj4gPiArICAgICAvKiBiaXRzIDUgNyAwIHwgRnJhbWUgc3RhdHVzCj4g PiArICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCj4gPiArICAgICAgKiAgICAgIDAgMCAwIHwgSUVFRSA4MDIuMyBUeXBlIGZy YW1lIChsZW5ndGggPCAxNTM2IG9jdGVjdHMpCj4gPiArICAgICAgKiAgICAgIDEgMCAwIHwgSVB2 NC82IE5vIENTVU0gZXJyb3JTLgo+ID4gKyAgICAgICogICAgICAxIDAgMSB8IElQdjQvNiBDU1VN IFBBWUxPQUQgZXJyb3IKPiA+ICsgICAgICAqICAgICAgMSAxIDAgfCBJUHY0LzYgQ1NVTSBJUCBI UiBlcnJvcgo+ID4gKyAgICAgICogICAgICAxIDEgMSB8IElQdjQvNiBJUCBQQVlMT0FEIEFORCBI RUFERVIgZXJyb3JTCj4gPiArICAgICAgKiAgICAgIDAgMCAxIHwgSVB2NC82IHVuc3VwcG9ydGVk IElQIFBBWUxPQUQKPiA+ICsgICAgICAqICAgICAgMCAxIDEgfCBDT0UgYnlwYXNzZWQuLiBubyBJ UHY0LzYgZnJhbWUKPiA+ICsgICAgICAqICAgICAgMCAxIDAgfCBSZXNlcnZlZC4KPiA+ICsgICAg ICAqLwo+ID4gKyAgICAgc3RydWN0IHsKPiA+ICsgICAgICAgICAgICAgLyogUkRFUzAgKi8KPiA+ ICsgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNoc3VtX2VycjoxOyAgICAgICAvKiBQYXlsb2Fk IGNoZWNrc3VtIGVycm9yICovCj4gPiArICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjcmNfZXJy OjE7ICAgICAgICAgLyogQ1JDIGVycm9yICovCj4gPiArICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBkcmliYmxpbmc6MTsgICAgICAgLyogRHJpYmJsZSBiaXQgZXJyb3IgKi8KPiA+ICsgICAgICAg ICAgICAgdW5zaWduZWQgaW50IG1paV9lcnI6MTsgICAgICAgICAvKiBSZWNlaXZlZCBlcnJvciAo Yml0MykgKi8KPiA+ICsgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlY3Zfd3Q6MTsgICAgICAg ICAvKiBSZWNlaXZlZCB3YXRjaGRvZyB0aW1lb3V0ICovCj4gPiArICAgICAgICAgICAgIHVuc2ln bmVkIGludCBmcm1fdHlwZToxOyAgICAgICAgLyogRnJhbWUgdHlwZSAqLwo+ID4gKyAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgbGF0ZV9jb2xsOjE7ICAgICAgIC8qIExhdGUgQ29sbGlzaW9uICov Cj4gPiArICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpcGNoX2VycjoxOyAgICAgICAgLyogSVB2 IGhlYWRlciBjaGVja3N1bSBlcnJvciAoYml0NykgKi8KPiA+ICsgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IGxhc3RfZGVzYzoxOyAgICAgICAvKiBMYXNldCBkZXNjcmlwdG9yICovCj4gPiArICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdF9kZXNjOjE7ICAgICAgLyogRmlyc3QgZGVzY3Jp cHRvciAqLwo+ID4gKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmxhbl90YWc6MTsgICAgICAg IC8qIFZMQU4gVGFnICovCj4gPiArICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvdmVyX2Vycjox OyAgICAgICAgLyogT3ZlcmZsb3cgZXJyb3IgKGJpdDExKSAqLwo+ID4gKyAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgbGVuX2VycjoxOyAgICAgICAgIC8qIExlbmd0aCBlcnJvciAqLwo+ID4gKyAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291X2ZpbHRlcjoxOyAgICAgIC8qIFNvdXJjZSBhZGRy ZXNzIGZpbHRlciBmYWlsICovCj4gPiArICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXNjX2Vy cjoxOyAgICAgICAgLyogRGVzY3JpcHRvciBlcnJvciAqLwo+ID4gKyAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgZXJyX3N1bToxOyAgICAgICAgIC8qIEVycm9yIHN1bW1hcnkgKGJpdDE1KSAqLwo+ ID4gKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZnJtX2xlbjoxNDsgICAgICAgIC8qIEZyYW1l IGxlbmd0aCAqLwo+ID4gKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzX2ZpbHRlcjoxOyAg ICAgIC8qIERlc3RpbmF0aW9uIGFkZHJlc3MgZmlsdGVyIGZhaWwgKi8KPiA+ICsgICAgICAgICAg ICAgdW5zaWduZWQgaW50IG93bjoxOyAgICAgICAgICAgICAvKiBPd24gYml0LiBDUFU6MCwgRE1B OjEgKi8KPiA+ICsgICAgICNkZWZpbmUgUlhfUEtUX09LICAgICAgICAgICAgICAgMHg3RkZGQjc3 Qwo+ID4gKyAgICAgI2RlZmluZSBSWF9MRU4gICAgICAgICAgICAgICAgICAweDNGRkYwMDAwCj4g PiArICAgICB9IHJ4Owo+ID4gKwo+ID4gKyAgICAgdW5zaWduZWQgaW50IGFsbDsKPiA+ICt9IGRl c2MwX3U7Cj4gPiArCj4gPiArdHlwZWRlZiB1bmlvbiB7Cj4gPiArICAgICBzdHJ1Y3Qgewo+ID4g KyAgICAgICAgICAgICAvKiBUREVTMSAqLwo+ID4gKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg YnVmMV9zaXplOjExOyAgICAgIC8qIFRyYW5zbWl0IGJ1ZmZlcjEgc2l6ZSAqLwo+ID4gKyAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgYnVmMl9zaXplOjExOyAgICAgIC8qIFRyYW5zbWl0IGJ1ZmZl cjIgc2l6ZSAqLwo+ID4gKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHRzZToxOyAgICAgICAg ICAgIC8qIFRyYW5zbWl0IHRpbWUgc3RhbXAgZW5hYmxlICovCj4gPiArICAgICAgICAgICAgIHVu c2lnbmVkIGludCBkaXNfcGFkOjE7ICAgICAgICAgLyogRGlzYWJsZSBwYWQgKGJpdDIzKSAqLwo+ ID4gKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWRyX2NoYWluOjE7ICAgICAgIC8qIFNlY29u ZCBhZGRyZXNzIGNoYWluZWQgKi8KPiA+ICsgICAgICAgICAgICAgdW5zaWduZWQgaW50IGVuZF9y aW5nOjE7ICAgICAgICAvKiBUcmFuc21pdCBlbmQgb2YgcmluZyAqLwo+ID4gKyAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgY3JjX2RpczoxOyAgICAgICAgIC8qIERpc2FibGUgQ1JDICovCj4gPiAr ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjaWM6MjsgICAgICAgICAgICAgLyogQ2hlY2tzdW0g aW5zZXJ0aW9uIGNvbnRyb2wgKGJpdDI3OjI4KSAqLwo+ID4gKyAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgZmlyc3Rfc2c6MTsgICAgICAgIC8qIEZpcnN0IFNlZ21lbnQgKi8KPiA+ICsgICAgICAg ICAgICAgdW5zaWduZWQgaW50IGxhc3Rfc2VnOjE7ICAgICAgICAvKiBMYXN0IFNlZ21lbnQgKi8K PiA+ICsgICAgICAgICAgICAgdW5zaWduZWQgaW50IGludGVycnVwdDoxOyAgICAgICAvKiBJbnRl cnJ1cHQgb24gY29tcGxldGlvbiAqLwo+ID4gKyAgICAgfSB0eDsKPiA+ICsKPiA+ICsgICAgIHN0 cnVjdCB7Cj4gPiArICAgICAgICAgICAgIC8qIFJERVMxICovCj4gPiArICAgICAgICAgICAgIHVu c2lnbmVkIGludCBidWYxX3NpemU6MTE7ICAgICAgLyogUmVjZWl2ZWQgYnVmZmVyMSBzaXplICov Cj4gPiArICAgICAgICAgICAgIHVuc2lnbmVkIGludCBidWYyX3NpemU6MTE7ICAgICAgLyogUmVj ZWl2ZWQgYnVmZmVyMiBzaXplICovCj4gPiArICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZXNl cnZlZDE6MjsKPiA+ICsgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFkcl9jaGFpbjoxOyAgICAg ICAvKiBTZWNvbmQgYWRkcmVzcyBjaGFpbmVkICovCj4gPiArICAgICAgICAgICAgIHVuc2lnbmVk IGludCBlbmRfcmluZzoxOyAgICAgICAgICAgICAgICAvKiBSZWNlaXZlZCBlbmQgb2YgcmluZyAq Lwo+ID4gKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQyOjU7Cj4gPiArICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBkaXNfaWM6MTsgICAgICAgICAgLyogRGlzYWJsZSBpbnRlcnJ1 cHQgb24gY29tcGxldGlvbiAqLwo+ID4gKyAgICAgfSByeDsKPiA+ICsKPiA+ICsgICAgIHVuc2ln bmVkIGludCBhbGw7Cj4gPiArfSBkZXNjMV91Owo+ID4gKwo+ID4gK3R5cGVkZWYgc3RydWN0IGRt YV9kZXNjIHsKPiA+ICsgICAgIGRlc2MwX3UgZGVzYzA7Cj4gPiArICAgICBkZXNjMV91IGRlc2Mx Owo+ID4gKyAgICAgLyogVGhlIGFkZHJlc3Mgb2YgYnVmZmVycyAqLwo+ID4gKyAgICAgdW5zaWdu ZWQgaW50ICAgIGRlc2MyOwo+ID4gKyAgICAgLyogTmV4dCBkZXNjJ3MgYWRkcmVzcyAqLwo+ID4g KyAgICAgdW5zaWduZWQgaW50ICAgIGRlc2MzOwo+ID4gK30gX19hdHRyaWJ1dGVfXygocGFja2Vk KSkgZG1hX2Rlc2NfdDsKPiA+ICsKPiA+ICtlbnVtIHJ4X2ZyYW1lX3N0YXR1cyB7IC8qIElQQyBz dGF0dXMgKi8KPiA+ICsgICAgIGdvb2RfZnJhbWUgPSAwLAo+ID4gKyAgICAgZGlzY2FyZF9mcmFt ZSA9IDEsCj4gPiArICAgICBjc3VtX25vbmUgPSAyLAo+ID4gKyAgICAgbGxjX3NuYXAgPSA0LAo+ ID4gK307Cj4gPiArCj4gPiArZW51bSB0eF9kbWFfaXJxX3N0YXR1cyB7Cj4gPiArICAgICB0eF9o YXJkX2Vycm9yID0gMSwKPiA+ICsgICAgIHR4X2hhcmRfZXJyb3JfYnVtcF90YyA9IDIsCj4gPiAr ICAgICBoYW5kbGVfdHhfcnggPSAzLAo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IGdldGhfZXh0 cmFfc3RhdHMgewo+ID4gKyAgICAgLyogVHJhbnNtaXQgZXJyb3JzICovCj4gPiArICAgICB1bnNp Z25lZCBsb25nIHR4X3VuZGVyZmxvdzsKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgdHhfY2Fycmll cjsKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgdHhfbG9zc2NhcnJpZXI7Cj4gPiArICAgICB1bnNp Z25lZCBsb25nIHZsYW5fdGFnOwo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyB0eF9kZWZlcnJlZDsK PiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgdHhfdmxhbjsKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcg dHhfamFiYmVyOwo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyB0eF9mcmFtZV9mbHVzaGVkOwo+ID4g KyAgICAgdW5zaWduZWQgbG9uZyB0eF9wYXlsb2FkX2Vycm9yOwo+ID4gKyAgICAgdW5zaWduZWQg bG9uZyB0eF9pcF9oZWFkZXJfZXJyb3I7Cj4gPiArCj4gPiArICAgICAvKiBSZWNlaXZlIGVycm9y cyAqLwo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyByeF9kZXNjOwo+ID4gKyAgICAgdW5zaWduZWQg bG9uZyBzYV9maWx0ZXJfZmFpbDsKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgb3ZlcmZsb3dfZXJy b3I7Cj4gPiArICAgICB1bnNpZ25lZCBsb25nIGlwY19jc3VtX2Vycm9yOwo+ID4gKyAgICAgdW5z aWduZWQgbG9uZyByeF9jb2xsaXNpb247Cj4gPiArICAgICB1bnNpZ25lZCBsb25nIHJ4X2NyYzsK PiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgZHJpYmJsaW5nX2JpdDsKPiA+ICsgICAgIHVuc2lnbmVk IGxvbmcgcnhfbGVuZ3RoOwo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyByeF9taWk7Cj4gPiArICAg ICB1bnNpZ25lZCBsb25nIHJ4X211bHRpY2FzdDsKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgcnhf Z21hY19vdmVyZmxvdzsKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgcnhfd2F0Y2hkb2c7Cj4gPiAr ICAgICB1bnNpZ25lZCBsb25nIGRhX3J4X2ZpbHRlcl9mYWlsOwo+ID4gKyAgICAgdW5zaWduZWQg bG9uZyBzYV9yeF9maWx0ZXJfZmFpbDsKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgcnhfbWlzc2Vk X2NudHI7Cj4gPiArICAgICB1bnNpZ25lZCBsb25nIHJ4X292ZXJmbG93X2NudHI7Cj4gPiArICAg ICB1bnNpZ25lZCBsb25nIHJ4X3ZsYW47Cj4gPiArCj4gPiArICAgICAvKiBUeC9SeCBJUlEgZXJy b3JzICovCj4gPiArICAgICB1bnNpZ25lZCBsb25nIHR4X3VuZGVmbG93X2lycTsKPiA+ICsgICAg IHVuc2lnbmVkIGxvbmcgdHhfcHJvY2Vzc19zdG9wcGVkX2lycTsKPiA+ICsgICAgIHVuc2lnbmVk IGxvbmcgdHhfamFiYmVyX2lycTsKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgcnhfb3ZlcmZsb3df aXJxOwo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyByeF9idWZfdW5hdl9pcnE7Cj4gPiArICAgICB1 bnNpZ25lZCBsb25nIHJ4X3Byb2Nlc3Nfc3RvcHBlZF9pcnE7Cj4gPiArICAgICB1bnNpZ25lZCBs b25nIHJ4X3dhdGNoZG9nX2lycTsKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgdHhfZWFybHlfaXJx Owo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBmYXRhbF9idXNfZXJyb3JfaXJxOwo+ID4gKwo+ID4g KyAgICAgLyogRXh0cmEgaW5mbyAqLwo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyB0aHJlc2hvbGQ7 Cj4gPiArICAgICB1bnNpZ25lZCBsb25nIHR4X3BrdF9uOwo+ID4gKyAgICAgdW5zaWduZWQgbG9u ZyByeF9wa3RfbjsKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgcG9sbF9uOwo+ID4gKyAgICAgdW5z aWduZWQgbG9uZyBzY2hlZF90aW1lcl9uOwo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBub3JtYWxf aXJxX247Cj4gPiArfTsKPiA+ICsKPiA+ICtpbnQgc3VueGlfbWRpb19yZWFkKHZvaWQgKiwgIGlu dCwgaW50KTsKPiA+ICtpbnQgc3VueGlfbWRpb193cml0ZSh2b2lkICosIGludCwgaW50LCB1bnNp Z25lZCBzaG9ydCk7Cj4gPiAraW50IHN1bnhpX21kaW9fcmVzZXQodm9pZCAqKTsKPiA+ICt2b2lk IHN1bnhpX3NldF9saW5rX21vZGUodm9pZCAqaW9iYXNlLCBpbnQgZHVwbGV4LCBpbnQgc3BlZWQp Owo+ID4gK3ZvaWQgc3VueGlfaW50X2Rpc2FibGUodm9pZCAqKTsKPiA+ICtpbnQgc3VueGlfaW50 X3N0YXR1cyh2b2lkICosIHN0cnVjdCBnZXRoX2V4dHJhX3N0YXRzICp4KTsKPiA+ICtpbnQgc3Vu eGlfbWFjX2luaXQodm9pZCAqLCBpbnQgdHhtb2RlLCBpbnQgcnhtb2RlKTsKPiA+ICt2b2lkIHN1 bnhpX3NldF91bWFjKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpOwo+ID4gK3ZvaWQgc3Vu eGlfbWFjX2VuYWJsZSh2b2lkICopOwo+ID4gK3ZvaWQgc3VueGlfbWFjX2Rpc2FibGUodm9pZCAq KTsKPiA+ICt2b2lkIHN1bnhpX3R4X3BvbGwodm9pZCAqKTsKPiA+ICt2b2lkIHN1bnhpX2ludF9l bmFibGUodm9pZCAqKTsKPiA+ICt2b2lkIHN1bnhpX3N0YXJ0X3J4KHZvaWQgKiwgdW5zaWduZWQg bG9uZyk7Cj4gPiArdm9pZCBzdW54aV9zdGFydF90eCh2b2lkICosIHVuc2lnbmVkIGxvbmcpOwo+ ID4gK3ZvaWQgc3VueGlfc3RvcF90eCh2b2lkICopOwo+ID4gK3ZvaWQgc3VueGlfc3RvcF9yeCh2 b2lkICopOwo+ID4gK3ZvaWQgc3VueGlfaGFzaF9maWx0ZXIodm9pZCAqaW9iYXNlLCB1bnNpZ25l ZCBsb25nIGxvdywgdW5zaWduZWQgbG9uZyBoaWdoKTsKPiA+ICt2b2lkIHN1bnhpX3NldF9maWx0 ZXIodm9pZCAqaW9iYXNlLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKPiA+ICt2b2lkIHN1bnhpX2Zs b3dfY3RybCh2b2lkICppb2Jhc2UsIGludCBkdXBsZXgsIGludCBmYywgaW50IHBhdXNlKTsKPiA+ ICt2b2lkIHN1bnhpX21hY19sb29wYmFjayh2b2lkICppb2Jhc2UsIGludCBlbmFibGUpOwo+ID4g Kwo+ID4gK3ZvaWQgZGVzY19idWZfc2V0KHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgbG9u ZyBwYWRkciwgaW50IHNpemUpOwo+ID4gK3ZvaWQgZGVzY19zZXRfb3duKHN0cnVjdCBkbWFfZGVz YyAqcCk7Cj4gPiArdm9pZCBkZXNjX2luaXRfY2hhaW4oc3RydWN0IGRtYV9kZXNjICpwLCB1bnNp Z25lZCBsb25nIHBhZGRyLCAgdW5zaWduZWQgaW50IHNpemUpOwo+ID4gK3ZvaWQgZGVzY190eF9j bG9zZShzdHJ1Y3QgZG1hX2Rlc2MgKmZpcnN0LCBzdHJ1Y3QgZG1hX2Rlc2MgKmVuZCwgaW50IGNz dW1faW5zZXJ0KTsKPiA+ICt2b2lkIGRlc2NfaW5pdChzdHJ1Y3QgZG1hX2Rlc2MgKnApOwo+ID4g K2ludCBkZXNjX2dldF90eF9zdGF0dXMoc3RydWN0IGRtYV9kZXNjICpkZXNjLCBzdHJ1Y3QgZ2V0 aF9leHRyYV9zdGF0cyAqeCk7Cj4gPiAraW50IGRlc2NfYnVmX2dldF9sZW4oc3RydWN0IGRtYV9k ZXNjICpkZXNjKTsKPiA+ICtpbnQgZGVzY19idWZfZ2V0X2FkZHIoc3RydWN0IGRtYV9kZXNjICpk ZXNjKTsKPiA+ICtpbnQgZGVzY19nZXRfcnhfc3RhdHVzKHN0cnVjdCBkbWFfZGVzYyAqZGVzYywg c3RydWN0IGdldGhfZXh0cmFfc3RhdHMgKngpOwo+ID4gK2ludCBkZXNjX2dldF9vd24oc3RydWN0 IGRtYV9kZXNjICpkZXNjKTsKPiA+ICtpbnQgZGVzY19nZXRfdHhfbHMoc3RydWN0IGRtYV9kZXNj ICpkZXNjKTsKPiA+ICtpbnQgZGVzY19yeF9mcmFtZV9sZW4oc3RydWN0IGRtYV9kZXNjICpkZXNj KTsKPiA+ICsKPiA+ICtpbnQgc3VueGlfbWFjX3Jlc2V0KHZvaWQgKmlvYmFzZSwgdm9pZCAoKm1k ZWxheSkoaW50KSwgaW50IG4pOwo+ID4gK2ludCBzdW54aV9nZXRoX3JlZ2lzdGVyKHZvaWQgKmlv YmFzZSwgaW50IHZlcnNpb24sIHVuc2lnbmVkIGludCBkaXYpOwo+ID4gKwo+ID4gKyNpZiBJU19F TkFCTEVEKENPTkZJR19TVU5YSV9FUEhZKQo+ID4gK2V4dGVybiBpbnQgZXBoeV9pc19lbmFibGUo dm9pZCk7Cj4gPiArI2VuZGlmCj4gPiArCj4gPiArI2lmIElTX0VOQUJMRUQoQ09ORklHX0FSQ0hf U1VOOElXMykgXAo+ID4gKyAgICAgfHwgSVNfRU5BQkxFRChDT05GSUdfQVJDSF9TVU45SVcxKSBc Cj4gPiArICAgICB8fCBJU19FTkFCTEVEKENPTkZJR19BUkNIX1NVTjdJKQo+ID4gKyNkZWZpbmUg SFdfVkVSU0lPTiAgIDAKPiA+ICsjZWxzZQo+ID4gKyNkZWZpbmUgSFdfVkVSU0lPTiAgIDEKPiA+ ICsjZW5kaWYKPiA+ICsKPiA+ICsjZW5kaWYKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9w aHkvcmVhbHRlay5jIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsuYwo+ID4gaW5kZXggODIxZTg1 YS4uM2M4NmMyYSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrLmMKPiA+ ICsrKyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrLmMKPiA+IEBAIC0zMzgsNyArMzM4LDcgQEAg c3RhdGljIGludCBydGw4MjExZl9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2 KQo+ID4gICAgICAgICAgICAgICAgICAgICAgICIybnMgVFggZGVsYXkgd2FzIGFscmVhZHkgJXMg KGJ5IHBpbi1zdHJhcHBpbmcgUlhEMSBvciBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24pXG4iLAo+ ID4gICAgICAgICAgICAgICAgICAgICAgIHZhbF90eGRseSA/ICJlbmFibGVkIiA6ICJkaXNhYmxl ZCIpOwo+ID4gICAgICAgfQo+ID4gLQo+ID4gK3JldHVybiAwOwo+ID4gICAgICAgcmV0ID0gcGh5 X21vZGlmeV9wYWdlZF9jaGFuZ2VkKHBoeWRldiwgMHhkMDgsIDB4MTUsIFJUTDgyMTFGX1JYX0RF TEFZLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbF9yeGRseSk7 Cj4gPiAgICAgICBpZiAocmV0IDwgMCkgewo+CgoKCi0tCkJlc3QgUmVnYXJkcwogR3VvIFJlbgoK TUw6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LWNza3kvCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QK bGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==