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=-8.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 D1602C2D0C8 for ; Tue, 17 Dec 2019 13:44:06 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (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 B232120717 for ; Tue, 17 Dec 2019 13:44:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=alsa-project.org header.i=@alsa-project.org header.b="O3IPfFIg"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="Xjvpsk0R" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B232120717 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=alsa-devel-bounces@alsa-project.org Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id EC13E1616; Tue, 17 Dec 2019 14:43:13 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz EC13E1616 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1576590244; bh=Nhev72dyTqdGYnfKxN3nQDdJia3JjhaS6QhS4H/zyHM=; h=Date:From:To:References:In-Reply-To:Cc:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=O3IPfFIgnduJ6UpxIsTXCINRaINeOeUahm5g5brgLHNtqB1WaIcx3TUmOoFYeGt2t yBuKIp/7ckrn2EsXtZCuUObED2nq5rie2geZpd0SQEmvgnwAQJNhGmWwgWEJua3y7c SKKuOEg7gkrfPiVmLlkAib+TQVYQfEXc+H+bCYMA= Received: from alsa1.perex.cz (localhost.localdomain [127.0.0.1]) by alsa1.perex.cz (Postfix) with ESMTP id 11B5AF80234; Tue, 17 Dec 2019 14:40:01 +0100 (CET) Received: by alsa1.perex.cz (Postfix, from userid 50401) id 2B06DF80256; Tue, 17 Dec 2019 14:40:00 +0100 (CET) Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id 13635F80218 for ; Tue, 17 Dec 2019 14:39:54 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz 13635F80218 Authentication-Results: alsa1.perex.cz; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="Xjvpsk0R" Received: by mail-wm1-x344.google.com with SMTP id a5so2987555wmb.0 for ; Tue, 17 Dec 2019 05:39:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=IFZR7yFfjCaJ5Zyd28wmKFHJJ/uVBiofrkGTbX0qZ+4=; b=Xjvpsk0Rut7XusBTv1UAB4fzGBImRbEixw95u7oUKkag4bvoy73xc6FZYbixAspz0K iax8Qu9XI2XGtGSfPAQqzd+pM9HDhxq4yR9fXDO+G0+JBlgO0b3Keo/fCo6tBG+eP5nh NvwXv/5UPRer8b73CkXGQXJu+t3EpwkQxUmm8L+maMS9hHcinefthMibV4Cku5w9s4e/ IIf/lypkUKA82uPTyyWfKC11371ruqD7yg9p7MavGKLulUMcB9DiXH4lLIMBsB3w5gK5 RplbDF8dCX8T8HaEZ41WO8lqh4FMBOUv0R/eCnFNMoqBoW0++nm9sTuTWF2yOSj5gG47 RD+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=IFZR7yFfjCaJ5Zyd28wmKFHJJ/uVBiofrkGTbX0qZ+4=; b=TO6PKFTMwTFEB1+Vh1Pug60IQeIZ2QkFaGtjALrHiIF4NXjSIyVJRTH13/ABvO9Fq6 o/F4AstODp8ashK1km8pMto8vI3aecsGITf3Zgv9qi9Via8gF+/N0j9DtGVzsbOPF5iv KZ68nJ2xYvzNxHsm8fWjHkFPV8ACuLKtCPyknCh4I5Gu+Zq8Vcd4VKuduHpBSJTyYbTn VX+O8448MsmEBMvGSgGRnSjfuDIe32czQYXcBPfv5vQrdStVsMH2+2IDfOXofyRKXlwm sYi9Cc6p+R6gDk/2dLba1vodrrO3yK1YxmO3iZyKwgy+Yb8c5ZobeQLAByuJXM/gki0J UrNQ== X-Gm-Message-State: APjAAAXBG5xlO4c9vZae1pqRQeekoj3CLhVSPfwdHIvBE1iTynUO/E7f u+thinF/wJt8MoWuJAPYV2jlHA== X-Google-Smtp-Source: APXvYqxJTewRU195IS242gKYuHK+XJLt8HGH8G88T/2+mC0xM987A3hj6SntcX86H3haWFgyBaAv/A== X-Received: by 2002:a05:600c:2283:: with SMTP id 3mr5743027wmf.100.1576589993375; Tue, 17 Dec 2019 05:39:53 -0800 (PST) Received: from dell ([2.27.35.132]) by smtp.gmail.com with ESMTPSA id o7sm2946632wmh.11.2019.12.17.05.39.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Dec 2019 05:39:52 -0800 (PST) Date: Tue, 17 Dec 2019 13:39:52 +0000 From: Lee Jones To: Daniel Mack Message-ID: <20191217133952.GJ18955@dell> References: <20191209183511.3576038-1-daniel@zonque.org> <20191209183511.3576038-8-daniel@zonque.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20191209183511.3576038-8-daniel@zonque.org> User-Agent: Mutt/1.10.1 (2018-07-13) Cc: devicetree@vger.kernel.org, alsa-devel@alsa-project.org, lars@metafoo.de, sboyd@kernel.org, mturquette@baylibre.com, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, robh+dt@kernel.org, broonie@kernel.org, linux-i2c@vger.kernel.org, pascal.huerst@gmail.com, linux-clk@vger.kernel.org Subject: Re: [alsa-devel] [PATCH 06/10] mfd: Add core driver for AD242x A2B transceivers X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" T24gTW9uLCAwOSBEZWMgMjAxOSwgRGFuaWVsIE1hY2sgd3JvdGU6Cgo+IFRoZSBjb3JlIGRyaXZl ciBmb3IgdGhlc2UgZGV2aWNlcyBpcyBzcGxpdCBpbnRvIHNldmVyYWwgcGFydHMuCj4gCj4gVGhl IG1hc3RlciBub2RlIGRyaXZlciBpcyBhbiBJMkMgY2xpZW50LiBJdCBpcyByZXNwb25zaWJsZSBm b3IKPiBicmluZ2luZyB1cCB0aGUgYnVzIHRvcG9sb2d5IGFuZCBkaXNjb3ZlcmluZyB0aGUgc2xh dmUgbm9kZXMuCj4gVGhpcyBwcm9jZXNzIHJlcXVyaWVzIHNvbWUga25vd2xlZ2RlIG9mIHRoZSBz bGF2ZSBub2RlIGNvbmZpZ3VyYXRpb24KPiB0byBwcm9ncmFtIHRoZSBidXMgdGltaW5ncyBjb3Jy ZWN0bHksIHNvIHRoZSBtYXN0ZXIgZHJpdmVycyB3YWxrcwo+IHRoZSB0cmVlIG9mIG5vZGVzIGlu IHRoZSBkZXZpY2V0cmVlLiBUaGUgc2xhdmUgZHJpdmVyIGhhbmRsZXMgcGxhdGZvcm0KPiBkZXZp Y2VzIHRoYXQgYXJlIGluc3RhbnRpYXRlZCBieSB0aGUgbWFzdGVyIG5vZGUgZHJpdmVyIGFmdGVy Cj4gZGlzY292ZXJ5IGhhcyBmaW5pc2hlZC4KPiAKPiBNYXN0ZXIgbm9kZXMgZXhwb3NlIHR3byBh ZGRyZXNzZXMgb24gdGhlIEkyQyBidXMsIG9uZSAocmVmZXJyZWQgdG8gYXMKPiAnQkFTRScgaW4g dGhlIGRhdGFzaGVldCkgZm9yIGFjY2Vzc2luZyByZWdpc3RlcnMgb24gdGhlIHRyYW5zY2VpdmVy Cj4gbm9kZSBpdHNlbGYsIGFuZCBvbmUgKHJlZmVycmVkIHRvIGFzICdCVVMnKSBmb3IgYWNjZXNz aW5nIHJlbW90ZQo+IHJlZ2lzdGVycywgZWl0aGVyIG9uIHRoZSByZW1vdGUgdHJhbnNjZWl2ZXIg aXRzZWxmLCBvciBvbiBJMkMgaGFyZHdhcmUKPiBjb25uZWN0ZWQgdG8gdGhhdCByZW1vdGUgdHJh bnNjZWl2ZXIsIHdoaWNoIHRoZW4gYWN0cyBhcyBhIHJlbW90ZSBJMkMKPiBidXMgbWFzdGVyLgo+ IAo+IEluIG9yZGVyIHRvIGFsbG93IE1GRCBzdWItZGV2aWNlcyB0byBiZSByZWdpc3RlcmVkIGFz IGNoaWxkcmVuIG9mCj4gZWl0aGVyIHRoZSBtYXN0ZXIgb3IgYW55IHNsYXZlIG5vZGUsIHRoZSBk ZXRhaWxzIG9uIGhvdyB0byBhY2Nlc3MgdGhlCj4gcmVnaXN0ZXJzIGFyZSBoaWRkZW4gYmVoaW5k IGEgcmVnbWFwIGNvbmZpZy4gQSBwb2ludGVyIHRvIHRoZSByZWdtYXAKPiBpcyB0aGVuIGV4cG9z ZWQgaW4gdGhlIHN0cnVjdCBzaGFyZWQgd2l0aCB0aGUgc3ViLWRldmljZXMuCj4gCj4gVGhlIGFk MjQyeC1idXMgZHJpdmVyIGlzIGEgc2ltcGxlIHByb3h5IHRoYXQgb2NjdXBpZXMgdGhlIEJVUyBJ MkMKPiBhZGRyZXNzIGFuZCB3aGljaCBpcyByZWZlcnJlZCB0byB0aHJvdWdoIGEgZGV2aWNldHJl ZSBoYW5kbGUgYnkgdGhlCj4gbWFzdGVyIGRyaXZlci4KPiAKPiBGb3IgdGhlIGRpc2NvdmVyeSBw cm9jZXNzLCB0aGUgZHJpdmVyIGhhcyB0byB3YWl0IGZvciBhbiBpbnRlcnJ1cHQKPiB0byBvY2N1 ci4gSW4gY2FzZSBubyBpbnRlcnJ1cHQgaXMgY29uZmlndXJlZCBpbiBEVCwgdGhlIGRyaXZlciBm YWxscwo+IGJhY2sgdG8gaW50ZXJydXB0IHBvbGxpbmcuIEFmdGVyIHRoZSBkaXNjb3ZlcnkgcGhh c2UgaXMgY29tcGxldGVkLAo+IGludGVycnVwdHMgYXJlIG9ubHkgbmVlZGVkIGZvciBlcnJvciBo YW5kbGluZyBhbmQgR1BJTyBoYW5kbGluZywKPiBib3RoIG9mIHdoaWNoIGlzIG5vdCBjdXJyZW50 eSBpbXBsZW1lbnRlZC4KPiAKPiBDb2RlIGNvbW1vbiB0byBib3RoIHRoZSBtYXN0ZXIgYW5kIHRo ZSBzbGF2ZSBkcml2ZXIgbGl2ZXMgaW4KPiAnYWQyNDJ4LW5vZGUuYycuCj4gCj4gU2lnbmVkLW9m Zi1ieTogRGFuaWVsIE1hY2sgPGRhbmllbEB6b25xdWUub3JnPgo+IAo+IG1mZAoKPwoKPiAtLS0K PiAgZHJpdmVycy9tZmQvS2NvbmZpZyAgICAgICAgIHwgIDExICsKPiAgZHJpdmVycy9tZmQvTWFr ZWZpbGUgICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9tZmQvYWQyNDJ4LWJ1cy5jICAgIHwgIDQy ICsrKwo+ICBkcml2ZXJzL21mZC9hZDI0MngtbWFzdGVyLmMgfCA2MTEgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvbWZkL2FkMjQyeC1ub2RlLmMgICB8IDI2 MiArKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvbWZkL2FkMjQyeC1zbGF2ZS5jICB8IDIzNCAr KysrKysrKysrKysrKwo+ICBpbmNsdWRlL2xpbnV4L21mZC9hZDI0MnguaCAgfCA0MDAgKysrKysr KysrKysrKysrKysrKysrKysKClRoaXMgZGV2aWNlLCBvciBhdCBsZWFzdCB0aGUgd2F5IGl0J3Mg YmVlbiBjb2RlZCBpcyBiYXR0eSEKCkl0J3MgZ29pbmcgdG8gbmVlZCBhIGxvdCBvZiBtYXNzYWdp bmcgYmVmb3JlIGJlaW5nIGFjY2VwdGVkLgoKTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIChpdCdz IHRha2VuIDIgaG91cnMgYWxyZWFkeSEpIGdsYW5jZS4KClNlZSBiZWxvdyAuLi4KCj4gIDcgZmls ZXMgY2hhbmdlZCwgMTU2MSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL21mZC9hZDI0MngtYnVzLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWZkL2Fk MjQyeC1tYXN0ZXIuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZmQvYWQyNDJ4LW5v ZGUuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZmQvYWQyNDJ4LXNsYXZlLmMKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvbWZkL2FkMjQyeC5oCj4gCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnCj4gaW5kZXgg NDIwOTAwODUyMTY2Li43MjdhMzUwNTNkOGMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tZmQvS2Nv bmZpZwo+ICsrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKPiBAQCAtOTksNiArOTksMTcgQEAgY29u ZmlnIFBNSUNfQURQNTUyMAo+ICAJICBpbmRpdmlkdWFsIGNvbXBvbmVudHMgbGlrZSBMQ0QgYmFj a2xpZ2h0LCBMRURzLCBHUElPcyBhbmQgS2VwYWQKPiAgCSAgdW5kZXIgdGhlIGNvcnJlc3BvbmRp bmcgbWVudXMuCj4gIAo+ICtjb25maWcgTUZEX0FEMjQyWAo+ICsJYm9vbCAiQW5hbG9nIERldmlj ZXMgQUQyNDJ4IEEyQiBzdXBwb3J0Igo+ICsJc2VsZWN0IE1GRF9DT1JFCj4gKwlzZWxlY3QgUkVH TUFQX0kyQwo+ICsJZGVwZW5kcyBvbiBJMkM9eSAmJiBPRgo+ICsJaGVscAo+ICsJICBJZiB5b3Ug c2F5IHllcyBoZXJlLCB5b3UgZ2V0IHN1cHBvcnQgZm9yIGRldmljZXMgZnJvbSB0aGUgQUQyNDJ4 Cj4gKwkgIGZhbWlsaXkuIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGNvbW1vbiBzdXBwb3J0IGZvciBh Y2Nlc3NpbmcgdGhlCj4gKwkgIGRldmljZXMsIGFkZGl0aW9uYWwgZHJpdmVycyBtdXN0IGJlIGVu YWJsZWQgaW4gb3JkZXIgdG8gdXNlIHRoZQo+ICsJICBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkZXZp Y2VzLgo+ICsKPiAgY29uZmlnIE1GRF9BQVQyODcwX0NPUkUKPiAgCWJvb2wgIkFuYWxvZ2ljVGVj aCBBQVQyODcwIgo+ICAJc2VsZWN0IE1GRF9DT1JFCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZk L01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKPiBpbmRleCBhZWQ5OWYwODczOWYuLjIz NjFjNjc2ZjZjOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL21mZC9NYWtlZmlsZQo+ICsrKyBiL2Ry aXZlcnMvbWZkL01ha2VmaWxlCj4gQEAgLTIwMyw2ICsyMDMsNyBAQCBvYmotJChDT05GSUdfTUZE X1NQTUlfUE1JQykJKz0gcWNvbS1zcG1pLXBtaWMubwo+ICBvYmotJChDT05GSUdfVFBTNjU5MTFf Q09NUEFSQVRPUikJKz0gdHBzNjU5MTEtY29tcGFyYXRvci5vCj4gIG9iai0kKENPTkZJR19NRkRf VFBTNjUwOTApCSs9IHRwczY1MDkwLm8KPiAgb2JqLSQoQ09ORklHX01GRF9BQVQyODcwX0NPUkUp CSs9IGFhdDI4NzAtY29yZS5vCj4gK29iai0kKENPTkZJR19NRkRfQUQyNDJYKQkrPSBhZDI0Mngt bWFzdGVyLm8gYWQyNDJ4LXNsYXZlLm8gYWQyNDJ4LWJ1cy5vIGFkMjQyeC1ub2RlLm8KPiAgb2Jq LSQoQ09ORklHX01GRF9BVDkxX1VTQVJUKQkrPSBhdDkxLXVzYXJ0Lm8KPiAgb2JqLSQoQ09ORklH X01GRF9BVE1FTF9GTEVYQ09NKQkrPSBhdG1lbC1mbGV4Y29tLm8KPiAgb2JqLSQoQ09ORklHX01G RF9BVE1FTF9ITENEQykJKz0gYXRtZWwtaGxjZGMubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21m ZC9hZDI0MngtYnVzLmMgYi9kcml2ZXJzL21mZC9hZDI0MngtYnVzLmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjY2MGUxM2NlNDNkCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvbWZkL2FkMjQyeC1idXMuYwo+IEBAIC0wLDAgKzEsNDIgQEAKPiAr Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsKPiArI2luY2x1ZGUg PGxpbnV4L2kyYy5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvbWZkL2FkMjQyeC5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9vZi5oPgo+ICsKPiArc3RhdGljIGludCBhZDI0MnhfYnVzX2kyY19wcm9iZShzdHJ1 Y3QgaTJjX2NsaWVudCAqaTJjLAo+ICsJCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlk KQo+ICt7Cj4gKwlkZXZfc2V0X2RydmRhdGEoJmkyYy0+ZGV2LCBpMmMpOwo+ICsJaTJjX3NldF9j bGllbnRkYXRhKGkyYywgJmkyYy0+ZGV2KTsKClBsZWFzZSBleHBsYWluIHRvIG1lIHdoYXQgeW91 IHRoaW5rIGlzIGhhcHBlbmluZyBoZXJlLgoKPiArCXJldHVybiAwOwo+ICt9CgpXaGF0IGRvZXMg dGhpcyBkcml2ZXIgZG8/ICBTZWVtcyBraW5kYSBwb2ludGxlc3M/Cgo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCBhZDI0MnhfYnVzX29mX21hdGNoW10gPSB7Cj4gKwl7IC5jb21w YXRpYmxlID0gImFkaSxhZDI0Mjh3LWJ1cyIgfSwKPiArCXsgfSwKPiArfTsKPiArTU9EVUxFX0RF VklDRV9UQUJMRShvZiwgYWQyNDJ4X2J1c19vZl9tYXRjaCk7Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGkyY19kZXZpY2VfaWQgYWQyNDJ4X2J1c19pMmNfaWRbXSA9IHsKPiArCXsgImFkMjQy eF9idXMiLCAwIH0sCj4gKwl7IH0sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBh ZDI0MnhfYnVzX2kyY19pZCk7CgpUaGlzIHRhYmxlIGNhbSBiZSByZW1vdmVkIGlmIHlvdSB1c2Ug cHJvYmVfbmV3LgoKPiArc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkMjQyeF9idXNfaTJjX2Ry aXZlciA9IHsKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAiYWQyNDJ4LWJ1cyIsCj4gKwkJ Lm9mX21hdGNoX3RhYmxlID0gYWQyNDJ4X2J1c19vZl9tYXRjaCwKPiArCX0sCj4gKwkucHJvYmUg PSBhZDI0MnhfYnVzX2kyY19wcm9iZSwKPiArCS5pZF90YWJsZSA9IGFkMjQyeF9idXNfaTJjX2lk LAo+ICt9Owo+ICsKPiArbW9kdWxlX2kyY19kcml2ZXIoYWQyNDJ4X2J1c19pMmNfZHJpdmVyKTsK PiArCj4gK01PRFVMRV9ERVNDUklQVElPTigiQUQyNDJ4IGJ1cyBkcml2ZXIiKTsKPiArTU9EVUxF X0FVVEhPUigiRGFuaWVsIE1hY2sgPGRhbmllbEB6b25xdWUub3JnPiIpOwo+ICtNT0RVTEVfTElD RU5TRSgiR1BMIHYyIik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FkMjQyeC1tYXN0ZXIu YyBiL2RyaXZlcnMvbWZkL2FkMjQyeC1tYXN0ZXIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMDAwMDAwLi4xYjBiZjkwNDQyYTIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9tZmQvYWQyNDJ4LW1hc3Rlci5jCj4gQEAgLTAsMCArMSw2MTEgQEAKPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsKPiArI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9lcnIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ICsjaW5jbHVkZSA8bGludXgv aW5pdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9pcnEuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21mZC9hZDI0MnguaD4KPiArI2luY2x1ZGUgPGxp bnV4L21mZC9jb3JlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUg PGxpbnV4L29mLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPiArI2luY2x1ZGUg PGxpbnV4L3JlZ21hcC5oPgo+ICsKPiArc3RydWN0IGFkMjQyeF9tYXN0ZXIgewo+ICsJc3RydWN0 IGFkMjQyeF9ub2RlCW5vZGU7Cj4gKwlzdHJ1Y3QgY2xrCQkqc3luY19jbGs7Cj4gKwlzdHJ1Y3Qg Y29tcGxldGlvbglydW5fY29tcGxldGlvbjsKPiArCXN0cnVjdCBjb21wbGV0aW9uCWRpc2NvdmVy X2NvbXBsZXRpb247Cj4gKwlzdHJ1Y3QgYWQyNDJ4X2kyY19idXMJYnVzOwo+ICsJdW5zaWduZWQg aW50CQl1cF9zbG90X3NpemU7Cj4gKwl1bnNpZ25lZCBpbnQJCWRuX3Nsb3Rfc2l6ZTsKPiArCWJv b2wJCQl1cF9zbG90X2FsdF9mbXQ7Cj4gKwlib29sCQkJZG5fc2xvdF9hbHRfZm10Owo+ICsJdW5z aWduZWQgaW50CQlzeW5jX2Nsa19yYXRlOwo+ICsJaW50CQkJaXJxOwo+ICsJdTgJCQlyZXNwb25z ZV9jeWNsZXM7Cj4gK307Cgo+ICtzdHJ1Y3QgYWQyNDJ4X25vZGUgKmFkMjQyeF9tYXN0ZXJfZ2V0 X25vZGUoc3RydWN0IGFkMjQyeF9tYXN0ZXIgKm1hc3RlcikKPiArewo+ICsJcmV0dXJuICZtYXN0 ZXItPm5vZGU7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoYWQyNDJ4X21hc3Rlcl9nZXRfbm9k ZSk7Cj4gKwo+ICtzdHJ1Y3QgYWQyNDJ4X2kyY19idXMgKmFkMjQyeF9tYXN0ZXJfZ2V0X2J1cyhz dHJ1Y3QgYWQyNDJ4X21hc3RlciAqbWFzdGVyKQo+ICt7Cj4gKwlyZXR1cm4gJm1hc3Rlci0+YnVz Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGFkMjQyeF9tYXN0ZXJfZ2V0X2J1cyk7Cj4gKwo+ ICtjb25zdCBjaGFyICphZDI0MnhfbWFzdGVyX2dldF9jbGtfbmFtZShzdHJ1Y3QgYWQyNDJ4X21h c3RlciAqbWFzdGVyKQo+ICt7Cj4gKwlyZXR1cm4gX19jbGtfZ2V0X25hbWUobWFzdGVyLT5zeW5j X2Nsayk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoYWQyNDJ4X21hc3Rlcl9nZXRfY2xrX25h bWUpOwo+ICsKPiArdW5zaWduZWQgaW50IGFkMjQyeF9tYXN0ZXJfZ2V0X2Nsa19yYXRlKHN0cnVj dCBhZDI0MnhfbWFzdGVyICptYXN0ZXIpCj4gK3sKPiArCXJldHVybiBtYXN0ZXItPnN5bmNfY2xr X3JhdGU7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoYWQyNDJ4X21hc3Rlcl9nZXRfY2xrX3Jh dGUpOwoKQWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBwcm92aWRlIGFic3RyYWN0aW9uIGZvciB0aGUg c2FrZSBvZgphYnN0cmFjdGlvbi4gIFRoZXkgc2hvdWxkIGJlIHJlbW92ZWQgYW5kIHJlcGxhY2Vk IHdpdGggdGhlIGNvZGUKY29udGFpbmVkIHdpdGhpbiB0aGVtLgoKPiArc3RhdGljIGludCBhZDI0 MnhfcmVhZF9vbmVfaXJxKHN0cnVjdCBhZDI0MnhfbWFzdGVyICptYXN0ZXIpCj4gK3sKPiArCXN0 cnVjdCByZWdtYXAgKnJlZ21hcCA9IG1hc3Rlci0+bm9kZS5yZWdtYXA7Cj4gKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBtYXN0ZXItPm5vZGUuZGV2Owo+ICsJdW5zaWduZWQgaW50IHZhbCwgaW50dHlw ZTsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3JlYWQocmVnbWFwLCBBRDI0Mlhf SU5UU1RBVCwgJnZhbCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoZGV2LCAidW5h YmxlIHRvIHJlYWQgSU5UU1RBVCByZWdpc3RlcjogJWRcbiIsIHJldCk7CgpVc2VycyBkbyBub3Qg Y2FyZSBhYm91dCByZWdpc3RlcnMuCgoiRmFpbGVkIHRvIG9idGFpbiBpbnRlcnJ1cHQgc3RhdHVz IgoKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWlmICghKHZhbCAmIEFEMjQyWF9JTlRT VEFUX0lSUSkpCj4gKwkJcmV0dXJuIC1FTk9FTlQ7CgpXaGF0IGhhcHBlbmVkIGhlcmU/ICBObyBp bnRlcnJ1cHRzIGZpcmVkPwoKSVJRX05PTkUgd291bGQgYmUgYmV0dGVyIHRoYW4gIk5vIHN1Y2gg ZmlsZSBvciBkaXJlY3RvcnkiLgoKPiArCXJldCA9IHJlZ21hcF9yZWFkKHJlZ21hcCwgQUQyNDJY X0lOVFRZUEUsICZpbnR0eXBlKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycihkZXYs ICJ1bmFibGUgdG8gcmVhZCBJTlRUWVBFIHJlZ2lzdGVyOiAlZFxuIiwgcmV0KTsKClNhbWUgZm9y IGFsbCBsb2cgbWVzc2FnZXMgdGhyb3VnaG91dCB0aGlzIHBhdGNoLXNldC4KCj4gKwkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSByZWdtYXBfcmVhZChyZWdtYXAsIEFEMjQyWF9JTlRT UkMsICZ2YWwpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0 byByZWFkIElOVFNSQyByZWdpc3RlcjogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiAr CX0KCldoYXQgZG9lcyB0aGlzIHByb3ZlPyAgV2h5IGFyZW4ndCB5b3UgZG9pbmcgYW55dGhpbmcg d2l0aCB0aGUgdmFsdWU/Cgo+ICsJcmV0ID0gcmVnbWFwX3JlYWQocmVnbWFwLCBBRDI0MlhfSU5U UE5EMCwgJnZhbCk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJl dCA9IHJlZ21hcF93cml0ZShyZWdtYXAsIEFEMjQyWF9JTlRQTkQwLCB2YWwpOwo+ICsJaWYgKHJl dCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSByZWdtYXBfcmVhZChyZWdtYXAs IEFEMjQyWF9JTlRQTkQxLCAmdmFsKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7 Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3dyaXRlKHJlZ21hcCwgQUQyNDJYX0lOVFBORDEsIHZhbCk7 Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0OwoKV2hhdCBkb2VzIHdyaXRpbmcgYmFj ayB0aGUgdmFsdWUgZG8/ICBDb21tZW50cyBwbGVhc2UuCgo+ICsJaWYgKHZhbCAmIEFEMjQyWF9J TlRTUkNfTVNUSU5UKSB7Cj4gKwkJcmV0ID0gcmVnbWFwX3JlYWQocmVnbWFwLCBBRDI0MlhfSU5U UE5EMiwgJnZhbCk7Cj4gKwkJaWYgKHJldCA8IDApCj4gKwkJCXJldHVybiByZXQ7Cj4gKwo+ICsJ CXJldCA9IHJlZ21hcF93cml0ZShyZWdtYXAsIEFEMjQyWF9JTlRQTkQyLCB2YWwpOwo+ICsJCWlm IChyZXQgPCAwKQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWRldl9lcnIoZGV2LCAi JXMoKSBpbnR0eXBlOiAweCUwMnhcbiIsIF9fZnVuY19fLCBpbnR0eXBlKTsKCk5vIGRlYnVnZ2lu ZyB0eXBlICdmdW5jJ3MgcGxlYXNlLgoKV2hhdCBtYWtlcyB0aGlzIGFuIGVycm9yPwoKPiArCXN3 aXRjaCAoaW50dHlwZSkgewo+ICsJY2FzZSBBRDI0MlhfSU5UVFlQRV9EU0NET05FOgo+ICsJCWNv bXBsZXRlKCZtYXN0ZXItPmRpc2NvdmVyX2NvbXBsZXRpb24pOwo+ICsJCWJyZWFrOwo+ICsJY2Fz ZSBBRDI0MlhfSU5UVFlQRV9NU1RSX1JVTk5JTkc6Cj4gKwkJY29tcGxldGUoJm1hc3Rlci0+cnVu X2NvbXBsZXRpb24pOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlkZXZfaW5mbyhkZXYs ICJVbmhhbmRsZWQgaW50ZXJydXB0IHR5cGUgMHglMDJ4XG4iLCBpbnR0eXBlKTsKPiArCX0KPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZDI0MnhfcmVhZF9pcnFzKHN0 cnVjdCBhZDI0MnhfbWFzdGVyICptYXN0ZXIpCj4gK3sKPiArCWludCByZXQ7Cj4gKwlib29sIGZp cnN0ID0gdHJ1ZTsKPiArCj4gKwl3aGlsZSAodHJ1ZSkgewo+ICsJCXJldCA9IGFkMjQyeF9yZWFk X29uZV9pcnEobWFzdGVyKTsKPiArCQlpZiAocmV0IDwgMCkKPiArCQkJcmV0dXJuIHJldDsKPiAr CQlpZiAocmV0ID09IC1FTk9FTlQpCj4gKwkJCXJldHVybiBmaXJzdCA/IHJldCA6IDA7Cj4gKwo+ ICsJCWZpcnN0ID0gZmFsc2U7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBh ZDI0MnhfaGFuZGxlX2lycShpbnQgaXJxLCB2b2lkICpkZXZpZCkKPiArewo+ICsJc3RydWN0IGFk MjQyeF9tYXN0ZXIgKm1hc3RlciA9IGRldmlkOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBh ZDI0MnhfcmVhZF9pcnFzKG1hc3Rlcik7Cj4gKwlpZiAocmV0ID09IC1FTk9FTlQpCj4gKwkJcmV0 dXJuIElSUV9OT05FOwo+ICsKPiArCXJldHVybiBJUlFfSEFORExFRDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBhZDI0Mnhfd2FpdF9mb3JfaXJxKHN0cnVjdCBhZDI0MnhfbWFzdGVyICptYXN0ZXIs Cj4gKwkJCSAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGlvbiwKPiArCQkJICAgICAg IHVuc2lnbmVkIGludCB0aW1lb3V0KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChtYXN0 ZXItPmlycSA+IDApIHsKPiArCQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoY29t cGxldGlvbiwKPiArCQkJCQkJICBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKTsKPiArCX0gZWxz ZSB7Cj4gKwkJdXNsZWVwX3JhbmdlKHRpbWVvdXQgKiAxMDAwLCB0aW1lb3V0ICogMTUwMCk7Cj4g KwkJYWQyNDJ4X3JlYWRfaXJxcyhtYXN0ZXIpOwo+ICsJCXJldCA9IGNvbXBsZXRpb25fZG9uZShj b21wbGV0aW9uKTsKPiArCX0KCldoYXQgYXJlIHRoZSBzZW1hbnRpY3Mgb2YgdGhpcyBmdW5jdGlv bi4gIENvbW1lbnRzIHBsZWFzZS4KCj4gKwlyZXR1cm4gcmV0ID09IDAgPyAtRVRJTUVET1VUIDog MDsKPiArfQo+ICsKPiArLyogU2VlIFRhYmxlIDMtMiBpbiB0aGUgZGF0YXNoZWV0ICovCgpEbyB5 b3UgcHJvdmlkZSBhIGxpbmsgdG8gdGhlIGRhdGFzaGVldCBhbnl3aGVyZT8KCkFsbCBJIGNhbiBm aW5kIGlzIGEgMSBwYWdlIG92ZXJ2aWV3LgoKUGxlYXNlIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiB0 byB3aGF0IHlvdSdyZSBkb2luZyAqaGVyZSouCgo+ICtzdGF0aWMgdW5zaWduZWQgaW50IGFkMjQy eF9idXNfYml0cyh1bnNpZ25lZCBpbnQgc2xvdF9zaXplLCBib29sIGFsdF9mbXQpCj4gK3sKPiAr CWludCBhbHRfYml0c1s4XSA9IHsgMCwgMTMsIDE3LCAyMSwgMzAsIDAsIDM5LCAwIH07Cj4gKwlp bnQgaWR4ID0gQUQyNDJYX1NMT1RGTVRfRE5TSVpFKHNsb3Rfc2l6ZSk7Cj4gKwo+ICsJcmV0dXJu IGFsdF9mbXQgPyBhbHRfYml0c1tpZHhdIDogc2xvdF9zaXplICsgMTsKPiArfQo+ICsKPiArLyog U2VlIFRhYmxlIDktMSBpbiB0aGUgZGF0YXNoZWV0ICovCgpJdCdzIG9rYXkgdG8gcmVmZXJlbmNl IHRoZSBkYXRhc2hlZXQsIGJ1dCB0ZWxsIHVzIHdoYXQgeW91J3JlIGRvaW5nCmhlcmUgYXMgd2Vs bC4KCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWQyNDJ4X21hc3Rlcl9yZXNwb2ZmcyhzdHJ1Y3Qg YWQyNDJ4X25vZGUgKm5vZGUpCj4gK3sKPiArCWlmIChub2RlLT50ZG1fbW9kZSA9PSAyICYmIG5v ZGUtPnRkbV9zbG90X3NpemUgPT0gMTYpCj4gKwkJcmV0dXJuIDIzODsKPiArCj4gKwlpZiAoKG5v ZGUtPnRkbV9tb2RlID09IDIgJiYgbm9kZS0+dGRtX3Nsb3Rfc2l6ZSA9PSAzMikgfHwKPiArCSAg ICAobm9kZS0+dGRtX21vZGUgPT0gNCAmJiBub2RlLT50ZG1fc2xvdF9zaXplID09IDE2KSkKPiAr CQlyZXR1cm4gMjQ1Owo+ICsKPiArCXJldHVybiAyNDg7CgpObyBtYWdpYyBudW1iZXJzIHBsZWFz ZS4gIFlvdSBuZWVkIHRvIGRlZmluZSB0aGVtLgoKPiArfQo+ICsKPiArc3RhdGljIGludCBhZDI0 MnhfZGlzY292ZXIoc3RydWN0IGFkMjQyeF9tYXN0ZXIgKm1hc3RlciwKPiArCQkJICAgc3RydWN0 IGRldmljZV9ub2RlICpub2Rlc19ucCkKPiArewo+ICsJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0g bWFzdGVyLT5ub2RlLnJlZ21hcDsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IG1hc3Rlci0+bm9k ZS5kZXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkX25wOwo+ICsJdW5zaWduZWQgaW50 IHZhbCwgbiA9IDAsIGksIHJlc3BvZmZzLCByZXNwY3ljczsKCj4gKwl1bnNpZ25lZCBpbnQgcmVz cGN5Y3NfdXBfbWluID0gVUlOVF9NQVg7Cj4gKwl1bnNpZ25lZCBpbnQgcmVzcGN5Y3NfZG5fbWF4 ID0gMDsKCldoYXQgYXJlIHRoZXNlPwoKPiArCXVuc2lnbmVkIGludCBtYXN0ZXJfdXBfc2xvdHMg PSAwOwo+ICsJdW5zaWduZWQgaW50IG1hc3Rlcl9kbl9zbG90cyA9IDA7Cj4gKwlib29sIHVwX2Vu YWJsZWQgPSBmYWxzZSwgZG5fZW5hYmxlZCA9IGZhbHNlOwo+ICsJdWludDhfdCBzbGF2ZV9jb250 cm9sID0gMDsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmVzcG9mZnMgPSBhZDI0MnhfbWFzdGVyX3Jl c3BvZmZzKCZtYXN0ZXItPm5vZGUpOwo+ICsKPiArCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9v Zl9ub2RlKG5vZGVzX25wLCBjaGlsZF9ucCkgewoKV2hhdCBhcmUgd2UgZGlzY292ZXJpbmcgaGVy ZT8gIENoaWxkIGRldmljZXMsIG9yIHNvbWV0aGluZyBlbHNlPwoKPiArCQl1bnNpZ25lZCBpbnQg ZG5zbG90X2FjdGl2aXR5LCB1cHNsb3RfYWN0aXZpdHk7Cj4gKwkJdW5zaWduZWQgaW50IHNsYXZl X2RuX3Nsb3RzLCBzbGF2ZV91cF9zbG90czsKPiArCQl1bnNpZ25lZCBpbnQgcmVzcGN5Y3NfZG4s IHJlc3BjeWNzX3VwOwo+ICsJCXN0cnVjdCBhZDI0Mnhfc2xvdF9jb25maWcgc2xvdF9jb25maWc7 Cj4gKwo+ICsJCXJldCA9IGFkMjQyeF9yZWFkX3Nsb3RfY29uZmlnKGRldiwgY2hpbGRfbnAsICZz bG90X2NvbmZpZyk7Cj4gKwkJaWYgKHJldCA8IDApIHsKPiArCQkJZGV2X2VycihkZXYsICJzbG90 IGNvbmZpZyBvZiBzbGF2ZSAlZCBpcyBpbnZhbGlkXG4iLCBuKTsKPiArCQkJcmV0dXJuIHJldDsK PiArCQl9CgpXaGF0IGlzIGEgJ3Nsb3QnIGRlZmluZWQgYXM/Cgo+ICsJCS8qIFNlZSBzZWN0aW9u IDMtMTggaW4gdGhlIGRhdGFzaGVldCAqLwoKR2l2ZSB1cyBhIHF1aWNrIGV4cGxhbmF0aW9uLgoK PiArCQlzbGF2ZV9kbl9zbG90cyA9IG1heF90KGludCwgc2xvdF9jb25maWcuZG5fbl9mb3J3YXJk X3Nsb3RzLAo+ICsJCQkJICAgICAgIGZscyhzbG90X2NvbmZpZy5kbl9yeF9zbG90cykpOwo+ICsJ CXNsYXZlX3VwX3Nsb3RzID0gbWF4X3QoaW50LCBzbG90X2NvbmZpZy51cF9uX2ZvcndhcmRfc2xv dHMsCj4gKwkJCQkgICAgICAgZmxzKHNsb3RfY29uZmlnLnVwX3J4X3Nsb3RzKSk7Cj4gKwo+ICsJ CWlmIChuID09IDApIHsKPiArCQkJbWFzdGVyX3VwX3Nsb3RzID0gc2xhdmVfdXBfc2xvdHM7Cj4g KwkJCW1hc3Rlcl9kbl9zbG90cyA9IHNsYXZlX2RuX3Nsb3RzOwo+ICsJCX0KPiArCj4gKwkJLyog U2VlIEFwcGVuZGl4IEIgaW4gdGhlIGRhdGFzaGVldCAqLwoKR2l2ZSB1cyBhIHF1aWNrIGV4cGxh bmF0aW9uLgoKPiArCQlkbnNsb3RfYWN0aXZpdHkgPSBzbGF2ZV9kbl9zbG90cyAqCj4gKwkJCWFk MjQyeF9idXNfYml0cyhtYXN0ZXItPmRuX3Nsb3Rfc2l6ZSwKPiArCQkJCQltYXN0ZXItPmRuX3Ns b3RfYWx0X2ZtdCk7Cj4gKwkJdXBzbG90X2FjdGl2aXR5ID0gc2xhdmVfdXBfc2xvdHMgKgo+ICsJ CQlhZDI0MnhfYnVzX2JpdHMobWFzdGVyLT51cF9zbG90X3NpemUsCj4gKwkJCQkJbWFzdGVyLT51 cF9zbG90X2FsdF9mbXQpOwo+ICsKPiArCQlyZXNwY3ljc19kbiA9IERJVl9ST1VORF9VUCg2NCAr IGRuc2xvdF9hY3Rpdml0eSwgNCkgKyA0Km4gKyAyOwoKU3BhY2VzIGFyb3VuZCB0aGUgJyonLiAg SWYgaXQncyBub3QgY2xlYXIsIHVzZSBicmFja2V0cy4KCj4gKwkJcmVzcGN5Y3NfdXAgPSByZXNw b2ZmcyAtCj4gKwkJCSAgICAgIChESVZfUk9VTkRfVVAoNjQgKyB1cHNsb3RfYWN0aXZpdHksIDQp ICsgMSk7CgpObyBpZGVhIHdoYXQncyBnb2luZyBvbiBoZXJlLgoKWW91IG5lZWQgdG8gZGVmaW5l IHRoZXNlIG1hZ2ljIG51bWJlcnMgdG8gbWFrZSBpdCBjbGVhci4KCj4gKwkJaWYgKHJlc3BjeWNz X2RuID4gcmVzcGN5Y3NfZG5fbWF4KQo+ICsJCQlyZXNwY3ljc19kbl9tYXggPSByZXNwY3ljc19k bjsKPiArCj4gKwkJaWYgKHJlc3BjeWNzX3VwIDwgcmVzcGN5Y3NfdXBfbWluKQo+ICsJCQlyZXNw Y3ljc191cF9taW4gPSByZXNwY3ljc191cDsKPiArCj4gKwkJaWYgKHNsYXZlX2RuX3Nsb3RzID4g MCkKPiArCQkJZG5fZW5hYmxlZCA9IHRydWU7Cj4gKwo+ICsJCWlmIChzbGF2ZV91cF9zbG90cyA+ IDApCj4gKwkJCXVwX2VuYWJsZWQgPSB0cnVlOwo+ICsKPiArCQluKys7Cj4gKwl9Cj4gKwo+ICsJ aWYgKG4gPT0gMCkgewo+ICsJCWRldl9lcnIoZGV2LCAiTm8gY2hpbGQgbm9kZXMgc3BlY2lmaWVk XG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlpZiAob2ZfcHJvcGVydHlf cmVhZF9ib29sKGRldi0+b2Zfbm9kZSwgImFkaSxpbnZlcnQteGN2ci1iIikpIHsKPiArCQlyZXQg PSByZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBBRDI0MlhfQ09OVFJPTCwKPiArCQkJCQkgQUQy NDJYX0NPTlRST0xfWENWUkJJTlYsCj4gKwkJCQkJIEFEMjQyWF9DT05UUk9MX1hDVlJCSU5WKTsK PiArCQlpZiAocmV0IDwgMCkKPiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJc2xhdmVfY29udHJv bCA9IEFEMjQyWF9DT05UUk9MX1hDVlJCSU5WOwo+ICsJfQo+ICsKPiArCWlmIChyZXNwY3ljc19k bl9tYXggPiByZXNwY3ljc191cF9taW4pIHsKPiArCQlkZXZfZXJyKGRldiwgIlVuc3VwcG9ydGVk IGJ1cyB0b3BvbG9neVxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmVz cGN5Y3MgPSAocmVzcGN5Y3NfZG5fbWF4ICsgcmVzcGN5Y3NfdXBfbWluKSAvIDI7Cj4gKwlyZXQg PSByZWdtYXBfd3JpdGUocmVnbWFwLCBBRDI0MlhfUkVTUENZQ1MsIHJlc3BjeWNzKTsKPiArCWlm IChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7CgpDb21tZW50cyBwbGVhc2UuCgpJbiBmYWN0LCBj b21tZW50cyB0aHJvdWdob3V0IHBsZWFzZS4KCkFueXRoaW5nIHRoYXQgaXNuJ3QgYWJzb2x1dGVs eSBjcnlzdGFsIGNsZWFyIHNob3VsZCBoYXZlIGF0IGxlYXN0IGEKbGl0dGxlIG9uZSBsaW5lciB0 byBjbGFyaWZ5IHdoYXQgaXMgYmVpbmcgY2FsY3VsYXRlZC9zZXQuCgo+ICsJcmV0ID0gcmVnbWFw X3VwZGF0ZV9iaXRzKHJlZ21hcCwgQUQyNDJYX0NPTlRST0wsCj4gKwkJCQkgQUQyNDJYX0NPTlRS T0xfTkVXU1RSQ1QsCj4gKwkJCQkgQUQyNDJYX0NPTlRST0xfTkVXU1RSQ1QpOwo+ICsJaWYgKHJl dCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSByZWdtYXBfd3JpdGUocmVnbWFw LCBBRDI0MlhfU1dDVEwsIEFEMjQyWF9TV0NUTF9FTlNXKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJ CXJldHVybiByZXQ7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewo+ICsJCXJldCA9 IHJlZ21hcF93cml0ZShyZWdtYXAsIEFEMjQyWF9ESVNDVlJZLCByZXNwY3ljcyAtICg0KmkpKTsK ClNwYWNlcy4KCldoYXQgaXMgND8KCj4gKwkJaWYgKHJldCA8IDApCj4gKwkJCXJldHVybiByZXQ7 Cj4gKwo+ICsJCXJldCA9IGFkMjQyeF93YWl0X2Zvcl9pcnEobWFzdGVyLAo+ICsJCQkJCSAgJm1h c3Rlci0+ZGlzY292ZXJfY29tcGxldGlvbiwgMzUpOwoKRGVmaW5lIG1hZ2ljIG51bWJlcnMgdGhy b3VnaG91dC4KCj4gKwkJaWYgKHJldCA8IDApIHsKPiArCQkJZGV2X2VycihkZXYsICJEaXNjb3Zl cnkgb2Ygbm9kZSAlZCB0aW1lZCBvdXRcbiIsIGkpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0K PiArCj4gKwkJdmFsID0gQUQyNDJYX1NXQ1RMX01PREUoMikgfCBBRDI0MlhfU1dDVExfRU5TVzsK PiArCj4gKwkJaWYgKGkgPT0gMCkKPiArCQkJcmV0ID0gcmVnbWFwX3dyaXRlKHJlZ21hcCwgQUQy NDJYX1NXQ1RMLCB2YWwpOwo+ICsJCWVsc2UKPiArCQkJcmV0ID0gYWQyNDJ4X3NsYXZlX3dyaXRl KCZtYXN0ZXItPmJ1cywgcmVnbWFwLCBpLAo+ICsJCQkJCQkgQUQyNDJYX1NXQ1RMLCB2YWwpOwo+ ICsKPiArCQlpZiAocmV0IDwgMCkKPiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJZGV2X2luZm8o ZGV2LCAiTm9kZSAlZCBkaXNjb3ZlcmVkXG4iLCBpKTsKPiArCj4gKwkJLyogTGFzdCBub2RlPyAq Lwo+ICsJCWlmIChpID09IG4gLSAxKQo+ICsJCQlicmVhazsKPiArCj4gKwkJcmV0ID0gYWQyNDJ4 X3NsYXZlX3dyaXRlKCZtYXN0ZXItPmJ1cywgcmVnbWFwLCBpLAo+ICsJCQkJCSBBRDI0MlhfSU5U TVNLMiwKPiArCQkJCQkgQUQyNDJYX0lOVE1TSzJfRFNDRElFTik7Cj4gKwkJaWYgKHJldCA8IDAp Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwo+ICsJCXJldCA9IGFkMjQyeF9zbGF2ZV93cml0ZSgmbWFz dGVyLT5idXMsIHJlZ21hcCwgaSwKPiArCQkJCQkgQUQyNDJYX0NPTlRST0wsIHNsYXZlX2NvbnRy b2wpOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQlyZXQgPSBh ZDI0Mnhfc2xhdmVfd3JpdGUoJm1hc3Rlci0+YnVzLCByZWdtYXAsIGksCj4gKwkJCQkJIEFEMjQy WF9TV0NUTCwgQUQyNDJYX1NXQ1RMX0VOU1cpOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlyZXR1 cm4gcmV0Owo+ICsKPiArCQlyZWluaXRfY29tcGxldGlvbigmbWFzdGVyLT5kaXNjb3Zlcl9jb21w bGV0aW9uKTsKPiArCX0KPiArCj4gKwlyZXQgPSByZWdtYXBfd3JpdGUocmVnbWFwLCBBRDI0Mlhf RE5TTE9UUywgbWFzdGVyX2RuX3Nsb3RzKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiBy ZXQ7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3dyaXRlKHJlZ21hcCwgQUQyNDJYX1VQU0xPVFMsIG1h c3Rlcl91cF9zbG90cyk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiAr CXZhbCA9IDA7Cj4gKwlpZiAoZG5fZW5hYmxlZCkKPiArCQl2YWwgfD0gQUQyNDJYX0RBVENUTF9E TlM7Cj4gKwo+ICsJaWYgKHVwX2VuYWJsZWQpCj4gKwkJdmFsIHw9IEFEMjQyWF9EQVRDVExfVVBT Owo+ICsKPiArCXJldCA9IHJlZ21hcF93cml0ZShyZWdtYXAsIEFEMjQyWF9EQVRDVEwsIHZhbCk7 Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGFkMjQyeF9pbml0X2lycShzdHJ1Y3QgYWQyNDJ4X21hc3RlciAq bWFzdGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBtYXN0ZXItPm5vZGUucmVn bWFwOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gbWFzdGVyLT5ub2RlLmRldjsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJaWYgKG1hc3Rlci0+aXJxID4gMCkgewo+ICsJCXJldCA9IGRldm1fcmVxdWVz dF90aHJlYWRlZF9pcnEoZGV2LCBtYXN0ZXItPmlycSwgTlVMTCwKPiArCQkJCQkJYWQyNDJ4X2hh bmRsZV9pcnEsIElSUUZfT05FU0hPVCwKPiArCQkJCQkJZGV2X25hbWUoZGV2KSwgbWFzdGVyKTsK PiArCQlpZiAocmV0IDwgMCkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBy ZWdtYXBfd3JpdGUocmVnbWFwLCBBRDI0MlhfSU5UTVNLMCwKPiArCQkJICAgQUQyNDJYX0lOVE1T SzBfU1JGRUlFTiB8IEFEMjQyWF9JTlRNU0swX0JFQ0lFTiB8Cj4gKwkJCSAgIEFEMjQyWF9JTlRN U0swX1BXUkVJRU4gfCBBRDI0MlhfSU5UTVNLMF9DUkNFSUVOIHwKPiArCQkJICAgQUQyNDJYX0lO VE1TSzBfRERFSUVOICB8IEFEMjQyWF9JTlRNU0swX0hDRUlFTik7Cj4gKwlpZiAocmV0IDwgMCkK PiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldCA9IHJlZ21hcF93cml0ZShyZWdtYXAsIEFEMjQy WF9JTlRNU0syLAo+ICsJCQkgICBBRDI0MlhfSU5UTVNLMl9EU0NESUVOIHwgQUQyNDJYX0lOVE1T SzJfU0xWSVJRRU4pOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGFk MjQyeF9yZWdtYXBfY29uZmlnID0gewo+ICsJLnJlZ19iaXRzCT0gOCwKPiArCS52YWxfYml0cwk9 IDgsCj4gKwkudm9sYXRpbGVfcmVnCT0gYWQyNDJ4X2lzX3ZvbGF0aWxlX3JlZywKPiArCS53cml0 ZWFibGVfcmVnCT0gYWQyNDJ4X2lzX3dyaXRlYWJsZV9yZWcsCj4gKwkubWF4X3JlZ2lzdGVyCT0g QUQyNDJYX01BWF9SRUcsCj4gKwkuY2FjaGVfdHlwZQk9IFJFR0NBQ0hFX1JCVFJFRSwKPiArfTsK PiArCj4gK3N0YXRpYyBpbnQgYWQyNDJ4X21hc3Rlcl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAq aTJjLAo+ICsJCQkgICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQo+ICt7Cj4g KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmJ1c19ucCwgKm5vZGVzX25wLCAqbnA7Cj4gKwlzdHJ1Y3Qg ZGV2aWNlICpidXNkZXYsICpkZXYgPSAmaTJjLT5kZXY7Cj4gKwlzdHJ1Y3QgYWQyNDJ4X21hc3Rl ciAqbWFzdGVyOwo+ICsJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwo+ICsJdW5zaWduZWQgaW50IHZh bDsKPiArCWludCByZXQ7Cj4gKwo+ICsJbm9kZXNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShk ZXYtPm9mX25vZGUsICJub2RlcyIpOwo+ICsJaWYgKCFub2Rlc19ucCkgewo+ICsJCWRldl9lcnIo ZGV2LCAibm8gJ25vZGVzJyBwcm9wZXJ0eSBnaXZlblxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4gKwl9Cj4gKwo+ICsJYnVzX25wID0gb2ZfcGFyc2VfcGhhbmRsZShkZXYtPm9mX25vZGUsICJh ZGksYTJiLWJ1cyIsIDApOwo+ICsJaWYgKCFidXNfbnApIHsKPiArCQlkZXZfZXJyKGRldiwgIm5v ICdhZGksYTJiLWJ1cycgaGFuZGxlIHNwZWNpZmllZCBmb3IgbWFzdGVyIG5vZGVcbiIpOwo+ICsJ CXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWJ1c2RldiA9IGJ1c19maW5kX2RldmljZV9i eV9vZl9ub2RlKCZpMmNfYnVzX3R5cGUsIGJ1c19ucCk7Cj4gKwlpZiAoIWJ1c2Rldikgewo+ICsJ CWRldl9lcnIoZGV2LCAiJ2FkaSxhMmItYnVzJyBoYW5kbGUgaW52YWxpZFxuIik7Cj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJbWFzdGVyID0gZGV2bV9remFsbG9jKGRldiwgc2l6 ZW9mKHN0cnVjdCBhZDI0MnhfbWFzdGVyKSwgR0ZQX0tFUk5FTCk7CgpzaXplb2YoKm1hc3RlcikK Cj4gKwlpZiAoIW1hc3RlcikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwltdXRleF9pbml0 KCZtYXN0ZXItPmJ1cy5tdXRleCk7Cj4gKwlpbml0X2NvbXBsZXRpb24oJm1hc3Rlci0+cnVuX2Nv bXBsZXRpb24pOwo+ICsJaW5pdF9jb21wbGV0aW9uKCZtYXN0ZXItPmRpc2NvdmVyX2NvbXBsZXRp b24pOwoKPiArCWRldl9zZXRfZHJ2ZGF0YShkZXYsICZtYXN0ZXItPm5vZGUpOwo+ICsJaTJjX3Nl dF9jbGllbnRkYXRhKGkyYywgbWFzdGVyKTsKCldoYXQgZG8geW91IHRoaW5rIGlzIGhhcHBlbmlu ZyBoZXJlPwoKPiArCXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGkyYywgJmFkMjQyeF9y ZWdtYXBfY29uZmlnKTsKPiArCWlmIChJU19FUlIocmVnbWFwKSkgewo+ICsJCXJldCA9IFBUUl9F UlIocmVnbWFwKTsKPiArCQlkZXZfZXJyKGRldiwgInJlZ21hcCBpbml0IGZhaWxlZDogJWRcbiIs IHJldCk7CgoiaW5pdGlhbGlzYXRpb24iCgpPciBldmVuIGJldHRlciAiRmFpbGVkIHRvIGluaXRp YWxpc2UgSTJDIFJlZ21hcCIKCj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwltYXN0ZXIt PmJ1cy5jbGllbnQgPSB0b19pMmNfY2xpZW50KGJ1c2Rldik7CgpXaGF0IGRvZXMgJ2J1cycgZG8g aW4gdGhpcyBjb250ZXh0PwoKPiArCW1hc3Rlci0+bm9kZS5yZWdtYXAgPSByZWdtYXA7Cj4gKwlt YXN0ZXItPm5vZGUuZGV2ID0gZGV2Owo+ICsJbWFzdGVyLT5ub2RlLm1hc3RlciA9IG1hc3RlcjsK PiArCW1hc3Rlci0+bm9kZS5pZCA9IEFEMjQyWF9NQVNURVJfSUQ7Cj4gKwltYXN0ZXItPmlycSA9 IGkyYy0+aXJxOwo+ICsKPiArCW1hc3Rlci0+c3luY19jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAi c3luYyIpOwo+ICsJaWYgKElTX0VSUihtYXN0ZXItPnN5bmNfY2xrKSkgewo+ICsJCXJldCA9IFBU Ul9FUlIobWFzdGVyLT5zeW5jX2Nsayk7Cj4gKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQo+ ICsJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgc3luYyBjbGs6ICVkXG4iLCByZXQpOwo+ ICsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3Uz MihkZXYtPm9mX25vZGUsICJjbG9jay1mcmVxdWVuY3kiLAo+ICsJCQkJICZtYXN0ZXItPnN5bmNf Y2xrX3JhdGUpKSB7Cj4gKwkJcmV0ID0gY2xrX3NldF9yYXRlKG1hc3Rlci0+c3luY19jbGssIG1h c3Rlci0+c3luY19jbGtfcmF0ZSk7Cj4gKwkJaWYgKHJldCA8IDApIHsKPiArCQkJZGV2X2Vycihk ZXYsICJDYW5ub3Qgc2V0IHN5bmMgY2xvY2sgcmF0ZTogJWRcbiIsIHJldCk7Cj4gKwkJCXJldHVy biByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCW1hc3Rlci0+c3luY19jbGtfcmF0ZSA9IGNsa19n ZXRfcmF0ZShtYXN0ZXItPnN5bmNfY2xrKTsKPiArCWlmIChtYXN0ZXItPnN5bmNfY2xrX3JhdGUg IT0gNDQxMDAgJiYgbWFzdGVyLT5zeW5jX2Nsa19yYXRlICE9IDQ4MDAwKSB7CgpQbGVhc2UgZGVm aW5lIHRoZXNlIG1hZ2ljIG51bWJlcnMuCgpTb21ldGhpbmcgZGVzY3JpcHRpdmUgdGhhdCB0ZWxs cyB1cyB3aGF0IHRoZSBkaWZmZXJlbnQgY2xvY2sgc3BlZWRzCmRvLgoKPiArCQlkZXZfZXJyKGRl diwgIlNZTkMgY2xvY2sgcmF0ZSAlZCBpcyBpbnZhbGlkXG4iLAo+ICsJCQltYXN0ZXItPnN5bmNf Y2xrX3JhdGUpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJldCA9IGNsa19w cmVwYXJlX2VuYWJsZShtYXN0ZXItPnN5bmNfY2xrKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJ ZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIHN5bmMgY2xrOiAlZFxuIiwgcmV0KTsKPiAr CQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCS8qIE1hc3RlciBub2RlIHNldHVwICovCj4gKwo+ ICsJcmV0ID0gcmVnbWFwX3dyaXRlKHJlZ21hcCwgQUQyNDJYX0NPTlRST0wsCj4gKwkJCSAgIEFE MjQyWF9DT05UUk9MX01TVFIgfCBBRDI0MlhfQ09OVFJPTF9TT0ZUUlNUKTsKPiArCWlmIChyZXQg PCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gYWQyNDJ4X3dhaXRfZm9yX2lycSht YXN0ZXIsICZtYXN0ZXItPnJ1bl9jb21wbGV0aW9uLCAxMCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ ICsJCWRldl9lcnIoZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBQTEwgc3luYzogJWRcbiIsIHJl dCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSByZWdtYXBfdXBkYXRlX2Jp dHMocmVnbWFwLCBBRDI0MlhfQ09OVFJPTCwKPiArCQkJCSBBRDI0MlhfQ09OVFJPTF9TT0ZUUlNU LCAwKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gYWQy NDJ4X25vZGVfcHJvYmUoJm1hc3Rlci0+bm9kZSk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1 cm4gcmV0Owo+ICsKPiArCXJldCA9IGFkMjQyeF9pbml0X2lycShtYXN0ZXIpOwo+ICsJaWYgKHJl dCA8IDApIHsKPiArCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBzZXQgdXAgSVJROiAlZCIsIHJl dCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwkvKiBTbG90IGZvcm1hdCBzZXR1cCAq Lwo+ICsKPiArCW9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgImFkaSx1cHN0cmVh bS1zbG90LXNpemUiLCAmdmFsKTsKPiArCWlmICh2YWwgPCA4IHx8IHZhbCA+IDMyIHx8ICh2YWwg JSA0ICE9IDApKSB7Cj4gKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIHVwc3RyZWFtLXNsb3Qtc2l6 ZSAlZFxuIiwgdmFsKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCW1hc3Rlci0+dXBf c2xvdF9zaXplID0gdmFsOwo+ICsKPiArCW9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9k ZSwgImFkaSxkb3duc3RyZWFtLXNsb3Qtc2l6ZSIsICZ2YWwpOwo+ICsJaWYgKHZhbCA8IDggfHwg dmFsID4gMzIgfHwgKHZhbCAlIDQgIT0gMCkpIHsKPiArCQlkZXZfZXJyKGRldiwgImludmFsaWQg ZG93bnN0cmVhbS1zbG90LXNpemUgJWRcbiIsIHZhbCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwl9Cj4gKwltYXN0ZXItPmRuX3Nsb3Rfc2l6ZSA9IHZhbDsKPiArCj4gKwltYXN0ZXItPmRuX3Ns b3RfYWx0X2ZtdCA9Cj4gKwkJb2ZfcHJvcGVydHlfcmVhZF9ib29sKGRldi0+b2Zfbm9kZSwKPiAr CQkJCSAgICAgICJhZGksYWx0ZXJuYXRlLWRvd25zdHJlYW0tc2xvdC1mb3JtYXQiKTsKPiArCW1h c3Rlci0+dXBfc2xvdF9hbHRfZm10ID0KPiArCQlvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LT5v Zl9ub2RlLAo+ICsJCQkJICAgICAgImFkaSxhbHRlcm5hdGUtdXBzdHJlYW0tc2xvdC1mb3JtYXQi KTsKCk9idmlvdXNseSB0aGlzIGFsbCBuZWVkcyB0byBiZSBydW4gcGFzdCB0aGUgRFQgbWFpbnRh aW5lcihzKS4KCj4gKwl2YWwgPSBBRDI0MlhfU0xPVEZNVF9ETlNJWkUobWFzdGVyLT5kbl9zbG90 X3NpemUpIHwKPiArCSAgICAgIEFEMjQyWF9TTE9URk1UX1VQU0laRShtYXN0ZXItPnVwX3Nsb3Rf c2l6ZSk7Cj4gKwo+ICsJaWYgKG1hc3Rlci0+ZG5fc2xvdF9hbHRfZm10KQo+ICsJCXZhbCB8PSBB RDI0MlhfU0xPVEZNVF9ETkZNVDsKPiArCj4gKwlpZiAobWFzdGVyLT51cF9zbG90X2FsdF9mbXQp Cj4gKwkJdmFsIHw9IEFEMjQyWF9TTE9URk1UX1VQRk1UOwo+ICsKPiArCXJldCA9IHJlZ21hcF93 cml0ZShyZWdtYXAsIEFEMjQyWF9TTE9URk1ULCB2YWwpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJ cmV0dXJuIHJldDsKPiArCj4gKwkvKiBOb2RlIGRpc2NvdmVyeSBhbmQgTUZEIHNldHVwICovCj4g Kwo+ICsJcmV0ID0gYWQyNDJ4X2Rpc2NvdmVyKG1hc3Rlciwgbm9kZXNfbnApOwo+ICsJaWYgKHJl dCA8IDApIHsKPiArCQlkZXZfZXJyKGRldiwgImVycm9yIGRpc2NvdmVyaW5nIG5vZGVzOiAlZFxu IiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IGFkMjQyeF9ub2Rl X2FkZF9tZmRfY2VsbHMoZGV2KTsKCldoeSBpcyB0aGlzIGNhbGxlZCB0d2ljZSB3aXRoIHRoZSBz YW1lIGNoaWxkcmVuPwoKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gYWRkIE1GRCBkZXZpY2VzICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gKwo+ICsJLyogUmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlcyBmb3Igbm9kZXMgKi8KPiArCj4g Kwlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShub2Rlc19ucCwgbnApCj4gKwkJb2Zf cGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgTlVMTCwgZGV2KTsKCldoYXQgYXJlIHlvdSBkb2lu ZyBoZXJlPwoKRWl0aGVyIHVzZSBPRiB0byByZWdpc3RlciBhbGwgY2hpbGQgZGV2aWNlcyBPUiB1 c2UgTUZELCBub3QgYSBtaXh0dXJlCm9mIGJvdGguCgo+ICsJb2Zfbm9kZV9wdXQobm9kZXNfbnAp Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkMjQyeF9tYXN0ZXJf cmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCj4gK3sKPiArCXN0cnVjdCBhZDI0MnhfbWFz dGVyICptYXN0ZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKPiArCj4gKwlpZiAobWFzdGVy LT5zeW5jX2NsaykKPiArCQljbGtfZGlzYWJsZV91bnByZXBhcmUobWFzdGVyLT5zeW5jX2Nsayk7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIGFkMjQyeF9tYXN0ZXJfb2ZfbWF0Y2hbXSA9IHsKPiArCXsgLmNvbXBhdGlibGUgPSAi YWRpLGFkMjQyOHctbWFzdGVyIiB9LAo+ICsJeyB9Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFC TEUob2YsIGFkMjQyeF9tYXN0ZXJfb2ZfbWF0Y2gpOwo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBpMmNfZGV2aWNlX2lkIGFkMjQyeF9tYXN0ZXJfaTJjX2lkW10gPSB7Cj4gKwl7ImFkMjQyeC1t YXN0ZXIiLCAwfSwKPiArCXsgfQo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWQy NDJ4X21hc3Rlcl9pMmNfaWQpOwoKSWYgeW91IG9uZSB0aGUgT0YgbWF0Y2ggdGFibGUsIHlvdSBk b24ndCBuZWVkIHRoaXMgZW1wdHkgSTJDIHRhYmxlLgpHcmVwIGZvciBwcm9iZV9uZXcuCgo+ICtz dGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWQyNDJ4X21hc3Rlcl9pMmNfZHJpdmVyID0gewo+ICsJ LmRyaXZlcgk9IHsKPiArCQkubmFtZSA9ICJhZDI0MngtbWFzdGVyIiwKPiArCQkub2ZfbWF0Y2hf dGFibGUJPSBhZDI0MnhfbWFzdGVyX29mX21hdGNoLAo+ICsJfSwKPiArCS5wcm9iZSA9IGFkMjQy eF9tYXN0ZXJfcHJvYmUsCj4gKwkucmVtb3ZlID0gYWQyNDJ4X21hc3Rlcl9yZW1vdmUsCj4gKwku aWRfdGFibGUgPSBhZDI0MnhfbWFzdGVyX2kyY19pZCwKPiArfTsKPiArCgpSZW1vdmUgdGhpcyBs aW5lLgoKPiArbW9kdWxlX2kyY19kcml2ZXIoYWQyNDJ4X21hc3Rlcl9pMmNfZHJpdmVyKTsKPiAr Cj4gK01PRFVMRV9ERVNDUklQVElPTigiQUQyNDJ4IG1hc3RlciBtYXN0ZXIgZHJpdmVyIik7CgpU eXBvLgoKPiArTU9EVUxFX0FVVEhPUigiRGFuaWVsIE1hY2sgPGRhbmllbEB6b25xdWUub3JnPiIp Owo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZk L2FkMjQyeC1ub2RlLmMgYi9kcml2ZXJzL21mZC9hZDI0Mngtbm9kZS5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmY5ZGI2ODkzODBhNwo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL21mZC9hZDI0Mngtbm9kZS5jCj4gQEAgLTAsMCArMSwyNjIgQEAK PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsKPiArI2luY2x1 ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9pMmMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L2ludGVycnVwdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvaXJxLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9tZmQvY29yZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvbWZkL2FkMjQyeC5oPgo+ICsjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ICsjaW5jbHVkZSA8 bGludXgvb2ZfZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPiArCj4gKy8q IFNlZSBUYWJsZSA3LTQzIGluIHRoZSBkYXRhc2hlZXQgKi8KCk1vcmUgaW5mb3JtYXRpb24gcGxl YXNlLgoKPiArc3RhdGljIGludCBhZDI0MnhfdGRtbW9kZV9pbmRleCh1bnNpZ25lZCBpbnQgbW9k ZSwgYm9vbCBzbGF2ZSkKPiArewo+ICsJc3dpdGNoIChtb2RlKSB7Cj4gKwljYXNlIDI6Cj4gKwkJ cmV0dXJuIDA7Cj4gKwljYXNlIDQ6Cj4gKwkJcmV0dXJuIDE7Cj4gKwljYXNlIDg6Cj4gKwkJcmV0 dXJuIDI7Cj4gKwljYXNlIDEyOgo+ICsJCXJldHVybiBzbGF2ZSA/IC1FSU5WQUwgOiAzOwo+ICsJ Y2FzZSAxNjoKPiArCQlyZXR1cm4gNDsKPiArCWNhc2UgMjA6Cj4gKwkJcmV0dXJuIHNsYXZlID8g LUVJTlZBTCA6IDU7Cj4gKwljYXNlIDI0Ogo+ICsJCXJldHVybiBzbGF2ZSA/IC1FSU5WQUwgOiA2 Owo+ICsJY2FzZSAzMjoKPiArCQlyZXR1cm4gNzsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwl9Cj4gK30KPiArCj4gK2ludCBhZDI0Mnhfbm9kZV9wcm9iZShzdHJ1Y3QgYWQy NDJ4X25vZGUgKm5vZGUpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBub2RlLT5k ZXYtPm9mX25vZGU7Cj4gKwl1bnNpZ25lZCBpbnQgdmFsOwo+ICsJaW50IHJldDsKPiArCj4gKwly ZXQgPSByZWdtYXBfcmVhZChub2RlLT5yZWdtYXAsIEFEMjQyWF9WRU5ET1IsICZ2YWwpOwo+ICsJ aWYgKHJldCA8IDApIHsKPiArCQlkZXZfZXJyKG5vZGUtPmRldiwgImZhaWxlZCB0byByZWFkIFZF TkRPUiByZWdpc3RlciAlZFxuIiwgcmV0KTsKClBsZWFzZSByZS13cml0ZSBhbGwgb2YgeW91ciBr ZXJuZWwgbG9nIG1lc3NhZ2VzIHRvIGJlIHVzZXIgZnJpZW5kbHkuCgo+ICsJCXJldHVybiByZXQ7 Cj4gKwl9Cj4gKwo+ICsJaWYgKHZhbCAhPSAweGFkKSB7CgpObyBtYWdpYyBudW1iZXJzIC0gcGxl YXNlIGRlZmluZSB0aGVtIGFsbC4KCj4gKwkJZGV2X2Vycihub2RlLT5kZXYsICJib2d1cyB2YWx1 ZSAweCUwMnggaW4gVkVORE9SIHJlZ2lzdGVyXG4iLAo+ICsJCQl2YWwpOwo+ICsJCXJldHVybiAt RU5PREVWOwo+ICsJfQo+ICsKPiArCXJldCA9IHJlZ21hcF9yZWFkKG5vZGUtPnJlZ21hcCwgQUQy NDJYX1BST0RVQ1QsICZ2YWwpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZfZXJyKG5vZGUt PmRldiwgImZhaWxlZCB0byByZWFkIFBST0RVQ1QgcmVnaXN0ZXIgJWRcbiIsCj4gKwkJCXJldCk7 Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlpZiAodmFsICE9IDB4MjgpIHsKPiArCQlk ZXZfZXJyKG5vZGUtPmRldiwgImJvZ3VzIHZhbHVlIDB4JTAyeCBpbiBQUk9EVUNUIHJlZ2lzdGVy XG4iLAo+ICsJCQl2YWwpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsKPiArCXJldCA9 IHJlZ21hcF9yZWFkKG5vZGUtPnJlZ21hcCwgQUQyNDJYX1ZFUlNJT04sICZ2YWwpOwo+ICsJaWYg KHJldCA8IDApIHsKPiArCQlkZXZfZXJyKG5vZGUtPmRldiwgImZhaWxlZCB0byByZWFkIFZFUlNJ T04gcmVnaXN0ZXIgJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlp ZiAobm9kZS0+aWQgPT0gQUQyNDJYX01BU1RFUl9JRCkKPiArCQlkZXZfaW5mbyhub2RlLT5kZXYs Cj4gKwkJCSAiRGV0ZWN0ZWQgQUQyNDJ4IG1hc3RlciBub2RlLCB2ZXJzaW9uICVkLiVkXG4iLAo+ ICsJCQkgdmFsID4+IDQsIHZhbCAmIDB4Zik7Cj4gKwllbHNlCj4gKwkJZGV2X2luZm8obm9kZS0+ ZGV2LAo+ICsJCQkgIkRldGVjdGVkIEFEMjQyeCBzbGF2ZSBub2RlLCB2ZXJzaW9uICVkLiVkLCBp ZCAlZFxuIiwKPiArCQkJIHZhbCA+PiA0LCB2YWwgJiAweGYsIG5vZGUtPmlkKTsKPiArCj4gKwly ZXQgPSByZWdtYXBfcmVhZChub2RlLT5yZWdtYXAsIEFEMjQyWF9DQVBBQklMSVRZLCAmdmFsKTsK PiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2Vycihub2RlLT5kZXYsICJmYWlsZWQgdG8gcmVh ZCBDQVBBQklMSVRZIHJlZ2lzdGVyICVkXG4iLAo+ICsJCQlyZXQpOwo+ICsJCXJldHVybiByZXQ7 Cj4gKwl9Cj4gKwo+ICsJbm9kZS0+Y2FwcyA9IHZhbDsKPiArCj4gKwl2YWwgPSAwOwo+ICsKPiAr CWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJhZGksc3ByZWFkLWEyYi1jbG9jayIpKQo+ ICsJCXZhbCB8PSBBRDI0MlhfUExMQ1RMX1NTTU9ERV9BQjsKPiArCWVsc2UgaWYgKG9mX3Byb3Bl cnR5X3JlYWRfYm9vbChucCwgImFkaSxzcHJlYWQtYTJiLWkycy1jbG9jayIpKQo+ICsJCXZhbCB8 PSBBRDI0MlhfUExMQ1RMX1NTTU9ERV9BQl9JMlM7Cj4gKwo+ICsJaWYgKG9mX3Byb3BlcnR5X3Jl YWRfYm9vbChucCwgImFkaSxzcHJlYWQtc3BlY3RydW0taGlnaCIpKQo+ICsJCXZhbCB8PSBBRDI0 MlhfUExMQ1RMX1NTREVQVEg7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3dyaXRlKG5vZGUtPnJlZ21h cCwgQUQyNDJYX1BMTENUTCwgdmFsKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2Vycihu b2RlLT5kZXYsICJmYWlsZWQgdG8gd3JpdGUgUExMQ1RMIHJlZ2lzdGVyICVkXG4iLCByZXQpOwo+ ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJLyogSTJTIGdsb2JhbCBzZXR1cCAqLwo+ICsK PiArCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiYWRpLHRkbS1tb2RlIiwgJm5vZGUtPnRkbV9t b2RlKTsKPiArCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiYWRpLHRkbS1zbG90LXNpemUiLCAm bm9kZS0+dGRtX3Nsb3Rfc2l6ZSk7Cj4gKwo+ICsJcmV0ID0gYWQyNDJ4X3RkbW1vZGVfaW5kZXgo bm9kZS0+dGRtX21vZGUsIGZhbHNlKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2Vycihu b2RlLT5kZXYsICJpbnZhbGlkIFRETSBtb2RlICVkXG4iLCBub2RlLT50ZG1fbW9kZSk7Cj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJdmFsID0gQUQyNDJYX0kyU0dDVExfVERNTU9E RShyZXQpOwo+ICsKPiArCWlmIChub2RlLT50ZG1fc2xvdF9zaXplID09IDE2KSB7Cj4gKwkJdmFs IHw9IEFEMjQyWF9JMlNHQ1RMX1RETVNTOwo+ICsJfSBlbHNlIGlmIChub2RlLT50ZG1fc2xvdF9z aXplICE9IDMyKSB7Cj4gKwkJZGV2X2Vycihub2RlLT5kZXYsICJpbnZhbGlkIFRETSBzbG90IHNp emUgJWRcbiIsCj4gKwkJCW5vZGUtPnRkbV9zbG90X3NpemUpOwo+ICsJCXJldHVybiAtRUlOVkFM Owo+ICsJfQo+ICsKPiArCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJhZGksYWx0ZXJu YXRpbmctc3luYyIpKQo+ICsJCXZhbCB8PSBBRDI0MlhfSTJTR0NUTF9BTFQ7Cj4gKwo+ICsJaWYg KG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgImFkaSxlYXJseS1zeW5jIikpCj4gKwkJdmFsIHw9 IEFEMjQyWF9JMlNHQ1RMX0VBUkxZOwo+ICsKPiArCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wo bnAsICJhZGksaW52ZXJ0LXN5bmMiKSkKPiArCQl2YWwgfD0gQUQyNDJYX0kyU0dDVExfSU5WOwo+ ICsKPiArCXJldCA9IHJlZ21hcF93cml0ZShub2RlLT5yZWdtYXAsIEFEMjQyWF9JMlNHQ1RMLCB2 YWwpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCBhZDI0MnhfbWZkX2NlbGxz W10gPSB7Cj4gKwl7Cj4gKwkJLm9mX2NvbXBhdGlibGUJPSAiYWRpLGFkMjQyOHctaTJjIiwKPiAr CQkubmFtZQkJPSAiYWQyNDJ4LWkyYyIsCgpTd2FwIHRoZXNlIGFyb3VuZC4gIE9yIGJldHRlciBz dGlsbCwgdXNlIHRoZSBtYWNyb3MgZm91bmQgaW46CgogIGluY2x1ZGUvbGludXgvbWZkL2NvcmUu aAoKPiArCX0sCj4gKwl7Cj4gKwkJLm9mX2NvbXBhdGlibGUJPSAiYWRpLGFkMjQyOHctZ3BpbyIs Cj4gKwkJLm5hbWUJCT0gImFkMjQyeC1ncGlvIiwKPiArCX0sCj4gKwl7Cj4gKwkJLm9mX2NvbXBh dGlibGUJPSAiYWRpLGFkMjQyOHctY2xrIiwKPiArCQkubmFtZQkJPSAiYWQyNDJ4LWNsayIsCj4g Kwl9LAo+ICsJewo+ICsJCS5vZl9jb21wYXRpYmxlCT0gImFkaSxhZDI0Mjh3LWNvZGVjIiwKPiAr CQkubmFtZQkJPSAiYWQyNDJ4LWNvZGVjIiwKPiArCX0sCj4gK307Cj4gKwo+ICtpbnQgYWQyNDJ4 X25vZGVfYWRkX21mZF9jZWxscyhzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXJldHVybiBk ZXZtX21mZF9hZGRfZGV2aWNlcyhkZXYsIFBMQVRGT1JNX0RFVklEX0FVVE8sCj4gKwkJCQkgICAg YWQyNDJ4X21mZF9jZWxscywKPiArCQkJCSAgICBBUlJBWV9TSVpFKGFkMjQyeF9tZmRfY2VsbHMp LAo+ICsJCQkJICAgIE5VTEwsIDAsIE5VTEwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFkMjQy eF9nZXRfc2xvdF9tYXNrKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4gKwkJCQljb25z dCBjaGFyICpwcm9wbmFtZSwgdTMyICptYXNrKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgaSwgbnVt Owo+ICsJaW50IHJldCwgcHJvcGxlbjsKPiArCXUzMiBzbG90c1szMl07CgpZb3Ugc2hvdWxkIGRl ZmluZSAzMiBhcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgYXZhaWxhYmxlLCB0aGVuCnVz ZSBpdCBhZ2FpbiBmb3IgbW9zdCBvZiB0aGUgcmFuZG9tICczMidzIGJlbG93LgoKPiArCWlmICgh b2ZfZ2V0X3Byb3BlcnR5KG5wLCBwcm9wbmFtZSwgJnByb3BsZW4pKQo+ICsJCXJldHVybiAtRU5P RU5UOwoKVGhpcyB3aG9sZSBwaWVjZSBiZWNvbWVzIHNpbXBsZXIgaWYgeW91IHVzZToKCiBvZl9w cm9wZXJ0eV9yZWFkX3ZhcmlhYmxlX3UzMl9hcnJheSgpCgo+ICsJbnVtID0gcHJvcGxlbiAvIHNp emVvZih1MzIpOwo+ICsKPiArCWlmIChudW0gPiBBUlJBWV9TSVpFKHNsb3RzKSkKPiArCQlyZXR1 cm4gLUVPVkVSRkxPVzsKPiArCj4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShu cCwgcHJvcG5hbWUsIHNsb3RzLCBudW0pOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJl dDsKPiArCj4gKwkqbWFzayA9IDA7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7 Cj4gKwkJaWYgKHNsb3RzW2ldID49IDMyKQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwkJ Km1hc2sgfD0gQklUKHNsb3RzW2ldKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiAraW50IGFkMjQyeF9yZWFkX3Nsb3RfY29uZmlnKHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCQkJ ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4gKwkJCSAgICBzdHJ1Y3QgYWQyNDJ4X3Nsb3Rf Y29uZmlnICpjb25maWcpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG5fbnAsICp1cF9u cDsKPiArCWludCByZXQ7Cj4gKwo+ICsJZG5fbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwg ImRvd25zdHJlYW0iKTsKPiArCWlmICghZG5fbnApIHsKPiArCQlkZXZfZXJyKGRldiwgIm5vIGRv d25zdHJlYW0gbm9kZVxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJdXBf bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgInVwc3RyZWFtIik7Cj4gKwlpZiAoIWRuX25w KSB7Cj4gKwkJZGV2X2VycihkZXYsICJubyB1cHN0cmVhbSBub2RlXG4iKTsKPiArCQlyZXQgPSAt RUlOVkFMOwo+ICsJCWdvdG8gZXJyX3B1dF9kbl9ub2RlOwo+ICsJfQo+ICsKPiArCXJldCA9IGFk MjQyeF9nZXRfc2xvdF9tYXNrKGRuX25wLCAicngtc2xvdHMiLCAmY29uZmlnLT5kbl9yeF9zbG90 cyk7Cj4gKwlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVOT0VOVCkgewoKSWYgeW91J3JlIGdvaW5n IHRvIGlnbm9yZSAtRU5PRU5ULCB3aHkgbm90IGp1c3QgcmV0dXJuIDA/Cgo+ICsJCWRldl9lcnIo ZGV2LCAiaW52YWxpZCBkb3duc3RyZWFtIHJ4LXNsb3RzIHByb3BlcnR5XG4iKTsKPiArCQlnb3Rv IGVycl9wdXRfbm9kZXM7Cj4gKwl9Cj4gKwo+ICsJb2ZfcHJvcGVydHlfcmVhZF91MzIoZG5fbnAs ICIjdHgtc2xvdHMiLCAmY29uZmlnLT5kbl9uX3R4X3Nsb3RzKTsKPiArCW9mX3Byb3BlcnR5X3Jl YWRfdTMyKGRuX25wLCAiI2ZvcndhcmQtc2xvdHMiLAo+ICsJCQkgICAgICZjb25maWctPmRuX25f Zm9yd2FyZF9zbG90cyk7Cj4gKwlpZiAoY29uZmlnLT5kbl9uX3R4X3Nsb3RzICsgY29uZmlnLT5k bl9uX2ZvcndhcmRfc2xvdHMgPj0gMzIpIHsKPiArCQlkZXZfZXJyKGRldiwgImludmFsaWQgZG93 bnN0cmVhbSB0eC1zbG90cyBwcm9wZXJ0eVxuIik7Cj4gKwkJZ290byBlcnJfcHV0X25vZGVzOwo+ ICsJfQo+ICsKPiArCgpTdXBlcmZsdW91cyAnXG4nLgoKPiArCXJldCA9IGFkMjQyeF9nZXRfc2xv dF9tYXNrKHVwX25wLCAicngtc2xvdHMiLCAmY29uZmlnLT51cF9yeF9zbG90cyk7Cj4gKwlpZiAo cmV0IDwgMCkgewo+ICsJCWRldl9lcnIoZGV2LCAiaW52YWxpZCB1cHN0cmVhbSByeC1zbG90cyBw cm9wZXJ0eVxuIik7Cj4gKwkJZ290byBlcnJfcHV0X25vZGVzOwo+ICsJfQo+ICsKPiArCW9mX3By b3BlcnR5X3JlYWRfdTMyKHVwX25wLCAiI3R4LXNsb3RzIiwgJmNvbmZpZy0+dXBfbl90eF9zbG90 cyk7Cj4gKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMih1cF9ucCwgIiNmb3J3YXJkLXNsb3RzIiwKPiAr CQkJICAgICAmY29uZmlnLT51cF9uX2ZvcndhcmRfc2xvdHMpOwo+ICsJaWYgKGNvbmZpZy0+dXBf bl90eF9zbG90cyArIGNvbmZpZy0+dXBfbl9mb3J3YXJkX3Nsb3RzID49IDMyKSB7Cj4gKwkJZGV2 X2VycihkZXYsICJpbnZhbGlkIGRvd25zdHJlYW0gdHgtc2xvdHMgcHJvcGVydHlcbiIpOwo+ICsJ CWdvdG8gZXJyX3B1dF9ub2RlczsKPiArCX0KPiArCj4gK2Vycl9wdXRfbm9kZXM6Cj4gKwlvZl9u b2RlX3B1dCh1cF9ucCk7Cj4gK2Vycl9wdXRfZG5fbm9kZToKPiArCW9mX25vZGVfcHV0KGRuX25w KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2Fk MjQyeC1zbGF2ZS5jIGIvZHJpdmVycy9tZmQvYWQyNDJ4LXNsYXZlLmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYWQyNTVkNjdhNWI2Cj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvbWZkL2FkMjQyeC1zbGF2ZS5jCj4gQEAgLTAsMCArMSwyMzQgQEAK PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsKPiArI2luY2x1 ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgo+ICsjaW5j bHVkZSA8bGludXgvZXJyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2luaXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21mZC9hZDI0MnguaD4KPiArI2luY2x1 ZGUgPGxpbnV4L21mZC9jb3JlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ICsjaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ICsjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4K PiArCj4gK3N0cnVjdCBhZDI0Mnhfc2xhdmUgewo+ICsJc3RydWN0IGFkMjQyeF9ub2RlCQlub2Rl Owo+ICsJc3RydWN0IGFkMjQyeF9ub2RlCQkqbWFzdGVyOwo+ICsJc3RydWN0IGFkMjQyeF9zbG90 X2NvbmZpZwlzbG90X2NvbmZpZzsKPiArCXVuc2lnbmVkIGludAkJCXN5bmNfb2Zmc2V0Owo+ICt9 Owo+ICsKPiAraW50IGFkMjQyeF9zbGF2ZV9yZWFkKHN0cnVjdCBhZDI0MnhfaTJjX2J1cyAqYnVz LAo+ICsJCSAgICAgIHN0cnVjdCByZWdtYXAgKm1hc3Rlcl9yZWdtYXAsCj4gKwkJICAgICAgdWlu dDhfdCBub2RlX2lkLCB1aW50OF90IHJlZywgdW5zaWduZWQgaW50ICp2YWwpCj4gK3sKPiArCWlu dCByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmYnVzLT5tdXRleCk7Cj4gKwo+ICsJcmV0ID0gcmVn bWFwX3dyaXRlKG1hc3Rlcl9yZWdtYXAsIEFEMjQyWF9OT0RFQURSLCBub2RlX2lkKTsKPiArCWlm IChyZXQgPCAwKQo+ICsJCWdvdG8gZXJyX3VubG9jazsKPiArCj4gKwlyZXQgPSBpMmNfc21idXNf cmVhZF9ieXRlX2RhdGEoYnVzLT5jbGllbnQsIHJlZyk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQln b3RvIGVycl91bmxvY2s7Cj4gKwo+ICsJKnZhbCA9IHJldDsKPiArCXJldCA9IDA7Cj4gKwo+ICtl cnJfdW5sb2NrOgo+ICsJbXV0ZXhfdW5sb2NrKCZidXMtPm11dGV4KTsKPiArCj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGFkMjQyeF9zbGF2ZV9yZWFkKTsKPiArCj4g K2ludCBhZDI0Mnhfc2xhdmVfd3JpdGUoc3RydWN0IGFkMjQyeF9pMmNfYnVzICpidXMsCj4gKwkJ ICAgICAgIHN0cnVjdCByZWdtYXAgKm1hc3Rlcl9yZWdtYXAsCj4gKwkJICAgICAgIHVpbnQ4X3Qg bm9kZV9pZCwgdWludDhfdCByZWcsIHVuc2lnbmVkIGludCB2YWwpCj4gK3sKPiArCWludCByZXQ7 Cj4gKwo+ICsJbXV0ZXhfbG9jaygmYnVzLT5tdXRleCk7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3dy aXRlKG1hc3Rlcl9yZWdtYXAsIEFEMjQyWF9OT0RFQURSLCBub2RlX2lkKTsKPiArCWlmIChyZXQg PCAwKQo+ICsJCWdvdG8gZXJyX3VubG9jazsKPiArCj4gKwlyZXQgPSBpMmNfc21idXNfd3JpdGVf Ynl0ZV9kYXRhKGJ1cy0+Y2xpZW50LCByZWcsIHZhbCk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQln b3RvIGVycl91bmxvY2s7Cj4gKwo+ICsJcmV0ID0gMDsKPiArCj4gK2Vycl91bmxvY2s6Cj4gKwlt dXRleF91bmxvY2soJmJ1cy0+bXV0ZXgpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArRVhQ T1JUX1NZTUJPTF9HUEwoYWQyNDJ4X3NsYXZlX3dyaXRlKTsKPiArCj4gK3N0YXRpYyBpbnQgYWQy NDJ4X3NsYXZlX3JlZ21hcF9yZWFkKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsCj4g KwkJCQkgICAgdW5zaWduZWQgaW50ICp2YWwpCj4gK3sKPiArCXN0cnVjdCBhZDI0Mnhfc2xhdmUg KnNsYXZlID0gY29udGV4dDsKPiArCXN0cnVjdCBhZDI0MnhfaTJjX2J1cyAqYnVzID0gYWQyNDJ4 X21hc3Rlcl9nZXRfYnVzKHNsYXZlLT5ub2RlLm1hc3Rlcik7Cj4gKwlzdHJ1Y3QgYWQyNDJ4X25v ZGUgKm1ub2RlID0gYWQyNDJ4X21hc3Rlcl9nZXRfbm9kZShzbGF2ZS0+bm9kZS5tYXN0ZXIpOwo+ ICsKPiArCWlmIChyZWcgPiAweGZmKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXJldHVy biBhZDI0Mnhfc2xhdmVfcmVhZChidXMsIG1ub2RlLT5yZWdtYXAsIHNsYXZlLT5ub2RlLmlkLCBy ZWcsIHZhbCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWQyNDJ4X3NsYXZlX3JlZ21hcF93cml0 ZSh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgcmVnLAo+ICsJCQkJICAgICB1bnNpZ25lZCBp bnQgdmFsKQo+ICt7Cj4gKwlzdHJ1Y3QgYWQyNDJ4X3NsYXZlICpzbGF2ZSA9IGNvbnRleHQ7Cj4g KwlzdHJ1Y3QgYWQyNDJ4X2kyY19idXMgKmJ1cyA9IGFkMjQyeF9tYXN0ZXJfZ2V0X2J1cyhzbGF2 ZS0+bm9kZS5tYXN0ZXIpOwo+ICsJc3RydWN0IGFkMjQyeF9ub2RlICptbm9kZSA9IGFkMjQyeF9t YXN0ZXJfZ2V0X25vZGUoc2xhdmUtPm5vZGUubWFzdGVyKTsKPiArCj4gKwlpZiAodmFsID4gMHhm ZiB8fCByZWcgPiAweGZmKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXJldHVybiBhZDI0 Mnhfc2xhdmVfd3JpdGUoYnVzLCBtbm9kZS0+cmVnbWFwLCBzbGF2ZS0+bm9kZS5pZCwgcmVnLCB2 YWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYWQyNDJ4 X3JlZ21hcF9jb25maWcgPSB7Cj4gKwkucmVnX2JpdHMJPSA4LAo+ICsJLnZhbF9iaXRzCT0gOCwK PiArCS52b2xhdGlsZV9yZWcJPSBhZDI0MnhfaXNfdm9sYXRpbGVfcmVnLAo+ICsJLndyaXRlYWJs ZV9yZWcJPSBhZDI0MnhfaXNfd3JpdGVhYmxlX3JlZywKPiArCS5yZWdfcmVhZAk9IGFkMjQyeF9z bGF2ZV9yZWdtYXBfcmVhZCwKPiArCS5yZWdfd3JpdGUJPSBhZDI0Mnhfc2xhdmVfcmVnbWFwX3dy aXRlLAo+ICsJLm1heF9yZWdpc3Rlcgk9IEFEMjQyWF9NQVhfUkVHLAo+ICsJLmNhY2hlX3R5cGUJ PSBSRUdDQUNIRV9SQlRSRUUsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGFkMjQyeF9jYWxjX3N5 bmNfb2Zmc2V0KHVuc2lnbmVkIGludCB2YWwpCj4gK3sKPiArCWlmICh2YWwgPT0gMCkKPiArCQly ZXR1cm4gMDsKPiArCj4gKwlpZiAodmFsID4gMTI3KQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsK PiArCXJldHVybiAyNTYgLSB2YWw7CgpNb3JlIG1hZ2ljIG51bWJlcnMgdG8gZGVmaW5lLgoKPiAr fQo+ICsKPiArc3RhdGljIGludCBhZDI0Mnhfc2xhdmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiAr CXN0cnVjdCBhZDI0Mnhfc2xhdmUgKnNsYXZlOwo+ICsJc3RydWN0IGFkMjQyeF9ub2RlICptbm9k ZTsKPiArCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKPiArCXVuc2lnbmVkIGludCB2YWw7Cj4gKwlp bnQgaSwgcmV0Owo+ICsKPiArCXNsYXZlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpzbGF2 ZSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFzbGF2ZSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiAr Cj4gKwlyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0KGRldiwgTlVMTCwgc2xhdmUsICZhZDI0Mnhf cmVnbWFwX2NvbmZpZyk7Cj4gKwlpZiAoSVNfRVJSKHJlZ21hcCkpIHsKPiArCQlyZXQgPSBQVFJf RVJSKHJlZ21hcCk7Cj4gKwkJZGV2X2VycihkZXYsICJyZWdtYXAgaW5pdCBmYWlsZWQ6ICVkXG4i LCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJb2ZfcHJvcGVydHlfcmVhZF91 MzIoZGV2LT5vZl9ub2RlLCAicmVnIiwgJnZhbCk7Cj4gKwlzbGF2ZS0+bm9kZS5pZCA9IHZhbDsK ClRoaXMgbG9va3MgbGlrZSBhbiBhYnVzZSBvZiB0aGUgJ3JlZycgcHJvcGVydHkuCgo+ICsJc2xh dmUtPm5vZGUuZGV2ID0gZGV2Owo+ICsJc2xhdmUtPm5vZGUucmVnbWFwID0gcmVnbWFwOwo+ICsK PiArCW1ub2RlID0gZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50KTsKCldoYXQgaXMgdGhlIHBh cmVudCBvZiB0aGUgc2xhdmU/CgooaXQncyBub3QgY2xlYXIgd2l0aG91dCBsb29raW5nIGF0IHRo ZSBEVCBJIGd1ZXNzKQoKPiArCXNsYXZlLT5ub2RlLm1hc3RlciA9IG1ub2RlLT5tYXN0ZXI7Cj4g Kwo+ICsJZGV2X3NldF9uYW1lKGRldiwgIiVzLWEyYi0lZCIsIGRldl9uYW1lKGRldi0+cGFyZW50 KSwgc2xhdmUtPm5vZGUuaWQpOwo+ICsJZGV2X3NldF9kcnZkYXRhKGRldiwgJnNsYXZlLT5ub2Rl KTsKPiArCj4gKwlyZXQgPSBhZDI0Mnhfbm9kZV9wcm9iZSgmc2xhdmUtPm5vZGUpOwo+ICsJaWYg KHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSBhZDI0MnhfcmVhZF9zbG90 X2NvbmZpZyhkZXYsIGRldi0+b2Zfbm9kZSwgJnNsYXZlLT5zbG90X2NvbmZpZyk7Cj4gKwlpZiAo cmV0IDwgMCkgewo+ICsJCWRldl9lcnIoZGV2LCAic2xvdCBjb25maWcgaXMgaW52YWxpZDogJWRc biIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSByZWdtYXBfd3Jp dGUocmVnbWFwLCBBRDI0MlhfVVBTTE9UUywKPiArCQkJICAgc2xhdmUtPnNsb3RfY29uZmlnLnVw X25fZm9yd2FyZF9zbG90cyk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsK PiArCXJldCA9IHJlZ21hcF93cml0ZShyZWdtYXAsIEFEMjQyWF9ETlNMT1RTLAo+ICsJCQkgICBz bGF2ZS0+c2xvdF9jb25maWcuZG5fbl9mb3J3YXJkX3Nsb3RzKTsKPiArCWlmIChyZXQgPCAwKQo+ ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3dyaXRlKHJlZ21hcCwgQUQyNDJY X0xVUFNMT1RTLAo+ICsJCQkgICBzbGF2ZS0+c2xvdF9jb25maWcudXBfbl90eF9zbG90cyk7Cj4g KwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldCA9IHJlZ21hcF93cml0 ZShyZWdtYXAsIEFEMjQyWF9MRE5TTE9UUywKPiArCQkJICAgc2xhdmUtPnNsb3RfY29uZmlnLmRu X25fdHhfc2xvdHMgfAo+ICsJCQkgICBBRDI0MlhfTEROU0xPVFNfRE5NQVNLRU4pOwo+ICsJaWYg KHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsr KSB7CgpXaHkgND8gIFBsZWFzZSBkZWZpbmUgaXQuCgo+ICsJCXJldCA9IHJlZ21hcF93cml0ZShy ZWdtYXAsIEFEMjQyWF9VUE1BU0soaSksCj4gKwkJCShzbGF2ZS0+c2xvdF9jb25maWcudXBfcnhf c2xvdHMgPj4gKGkgKiA4KSkgJiAweGZmKTsKPiArCQlpZiAocmV0IDwgMCkKPiArCQkJcmV0dXJu IHJldDsKPiArCj4gKwkJcmV0ID0gcmVnbWFwX3dyaXRlKHJlZ21hcCwgQUQyNDJYX0ROTUFTSyhp KSwKPiArCQkJKHNsYXZlLT5zbG90X2NvbmZpZy5kbl9yeF9zbG90cyA+PiAoaSAqIDgpKSAmIDB4 ZmYpOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCW9m X3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgImFkaSxzeW5jLW9mZnNldCIsCj4gKwkJ CSAgICAgJnNsYXZlLT5zeW5jX29mZnNldCk7Cj4gKwo+ICsJcmV0ID0gYWQyNDJ4X2NhbGNfc3lu Y19vZmZzZXQoc2xhdmUtPnN5bmNfb2Zmc2V0KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVy biByZXQ7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3dyaXRlKHJlZ21hcCwgQUQyNDJYX1NZTkNPRkZT RVQsIHJldCk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldCA9 IGFkMjQyeF9ub2RlX2FkZF9tZmRfY2VsbHMoZGV2KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJ ZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIE1GRCBkZXZpY2VzICVkXG4iLCByZXQpOwo+ICsJ CXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFkMjQyeF9zbGF2ZV9vZl9tYXRjaFtdID0gewo+ICsJ eyAuY29tcGF0aWJsZSA9ICJhZGksYWQyNDI4dy1zbGF2ZSIgfSwKPiArCXsgfQo+ICt9Owo+ICtN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhZDI0Mnhfc2xhdmVfb2ZfbWF0Y2gpOwo+ICsKPiArc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWQyNDJ4X3NsYXZlX2RyaXZlciA9IHsKPiArCS5k cml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAiYWQyNDJ4LXNsYXZlIiwKPiArCQkub2ZfbWF0Y2hfdGFi bGUgPSBhZDI0Mnhfc2xhdmVfb2ZfbWF0Y2gsCj4gKwl9LAo+ICsJLnByb2JlID0gYWQyNDJ4X3Ns YXZlX3Byb2JlLAo+ICt9Owo+ICsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhZDI0Mnhfc2xh dmVfZHJpdmVyKTsKPiArCj4gK01PRFVMRV9ERVNDUklQVElPTigiQUQyNDJ4IHNsYXZlIG5vZGUg ZHJpdmVyIik7Cj4gK01PRFVMRV9BVVRIT1IoIkRhbmllbCBNYWNrIDxkYW5pZWxAem9ucXVlLm9y Zz4iKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRl L2xpbnV4L21mZC9hZDI0MnguaCBiL2luY2x1ZGUvbGludXgvbWZkL2FkMjQyeC5oCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjAyYTE3NDgyNGY4NQo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9pbmNsdWRlL2xpbnV4L21mZC9hZDI0MnguaAo+IEBAIC0wLDAgKzEs NDAwIEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KPiAr Cj4gKyNpZm5kZWYgX19MSU5VWF9NRkRfQUQyNDJYX0gKPiArI2RlZmluZSBfX0xJTlVYX01GRF9B RDI0MlhfSAo+ICsKPiArI2RlZmluZSBBRDI0MlhfQ0hJUAkJCTB4MDAKPiArI2RlZmluZSBBRDI0 MlhfTk9ERUFEUgkJCTB4MDEKPiArI2RlZmluZSBBRDI0MlhfTk9ERUFEUl9NQVNLCQkweDBmCj4g KyNkZWZpbmUgQUQyNDJYX05PREVBRFJfUEVSSQkJQklUKDUpCj4gKyNkZWZpbmUgQUQyNDJYX05P REVBRFJfQlJDU1QJCUJJVCg3KQo+ICsKPiArI2RlZmluZSBBRDI0MlhfVkVORE9SCQkJMHgwMgo+ ICsjZGVmaW5lIEFEMjQyWF9QUk9EVUNUCQkJMHgwMwo+ICsjZGVmaW5lIEFEMjQyWF9WRVJTSU9O CQkJMHgwNAo+ICsKPiArI2RlZmluZSBBRDI0MlhfQ0FQQUJJTElUWQkJMHgwNQo+ICsjZGVmaW5l IEFEMjQyWF9DQVBBQklMSVRZX0kyQwkJQklUKDApCj4gKwo+ICsjZGVmaW5lIEFEMjQyWF9TV0NU TAkJCTB4MDkKPiArI2RlZmluZSBBRDI0MlhfU1dDVExfRU5TVwkJQklUKDApCj4gKyNkZWZpbmUg QUQyNDJYX1NXQ1RMX0RJQUdNT0RFCQlCSVQoMykKPiArI2RlZmluZSBBRDI0MlhfU1dDVExfTU9E RShYKQkJKCgoWCkgJiAzKSA8PCA0KQo+ICsjZGVmaW5lIEFEMjQyWF9TV0NUTF9NT0RFX01BU0sJ CSgzIDw8IDQpCj4gKyNkZWZpbmUgQUQyNDJYX1NXQ1RMX0RJU05YVAkJQklUKDYpCj4gKwo+ICsj ZGVmaW5lIEFEMjQyWF9CQ0ROU0xPVFMJCTB4MGEKPiArI2RlZmluZSBBRDI0MlhfQkNETlNMT1RT X01BU0sJCTB4M2YKPiArCj4gKyNkZWZpbmUgQUQyNDJYX0xETlNMT1RTCQkJMHgwYgo+ICsjZGVm aW5lIEFEMjQyWF9MRE5TTE9UU19NQVNLCQkweDNmCj4gKyNkZWZpbmUgQUQyNDJYX0xETlNMT1RT X0ROTUFTS0VOCUJJVCg3KQo+ICsKPiArI2RlZmluZSBBRDI0MlhfTFVQU0xPVFMJCQkweDBjCj4g KyNkZWZpbmUgQUQyNDJYX0xVUFNMT1RTX01BU0sJCTB4M2YKPiArCj4gKyNkZWZpbmUgQUQyNDJY X0ROU0xPVFMJCQkweDBkCj4gKyNkZWZpbmUgQUQyNDJYX0ROU0xPVFNfTUFTSwkJMHgzZgo+ICsK PiArI2RlZmluZSBBRDI0MlhfVVBTTE9UUwkJCTB4MGUKPiArI2RlZmluZSBBRDI0MlhfVVBTTE9U U19NQVNLCQkweDNmCj4gKwo+ICsjZGVmaW5lIEFEMjQyWF9SRVNQQ1lDUwkJCTB4MGYKPiArCj4g KyNkZWZpbmUgQUQyNDJYX1NMT1RGTVQJCQkweDEwCj4gKyNkZWZpbmUgQUQyNDJYX1NMT1RGTVRf RE5TSVpFKFgpCSgoKChYKSAtIDgpID4+IDIpICYgNykKPiArI2RlZmluZSBBRDI0MlhfU0xPVEZN VF9ETkZNVAkJQklUKDMpCj4gKyNkZWZpbmUgQUQyNDJYX1NMT1RGTVRfVVBTSVpFKFgpCSgoKCgo WCkgLSA4KSA+PiAyKSAmIDcpIDw8IDQpCj4gKyNkZWZpbmUgQUQyNDJYX1NMT1RGTVRfVVBGTVQJ CUJJVCg3KQo+ICsKPiArI2RlZmluZSBBRDI0MlhfREFUQ1RMCQkJMHgxMQo+ICsjZGVmaW5lIEFE MjQyWF9EQVRDVExfRE5TCQlCSVQoMCkKPiArI2RlZmluZSBBRDI0MlhfREFUQ1RMX1VQUwkJQklU KDEpCj4gKyNkZWZpbmUgQUQyNDJYX0RBVENUTF9FTkRTTklGRgkJQklUKDUpCj4gKyNkZWZpbmUg QUQyNDJYX0RBVENUTF9TVEFOREJZCQlCSVQoNykKPiArCj4gKyNkZWZpbmUgQUQyNDJYX0NPTlRS T0wJCQkweDEyCj4gKyNkZWZpbmUgQUQyNDJYX0NPTlRST0xfTkVXU1RSQ1QJCUJJVCgwKQo+ICsj ZGVmaW5lIEFEMjQyWF9DT05UUk9MX0VORERTQwkJQklUKDEpCj4gKyNkZWZpbmUgQUQyNDJYX0NP TlRST0xfU09GVFJTVAkJQklUKDIpCj4gKyNkZWZpbmUgQUQyNDJYX0NPTlRST0xfU1dCWVAJCUJJ VCgzKQo+ICsjZGVmaW5lIEFEMjQyWF9DT05UUk9MX1hDVlJCSU5WCQlCSVQoNCkKPiArI2RlZmlu ZSBBRDI0MlhfQ09OVFJPTF9NU1RSCQlCSVQoNykKPiArCj4gKyNkZWZpbmUgQUQyNDJYX0RJU0NW UlkJCQkweDEzCj4gKwo+ICsjZGVmaW5lIEFEMjQyWF9TV1NUQVQJCQkweDE0Cj4gKyNkZWZpbmUg QUQyNDJYX1NXU1RBVF9GSU4JCUJJVCgwKQo+ICsjZGVmaW5lIEFEMjQyWF9TV1NUQVRfRkFVTFQJ CUJJVCgxKQo+ICsjZGVmaW5lIEFEMjQyWF9TV1NUQVRfRkFVTFRDT0RFKFgpCSgoKFgpICYgMHg3 KSA+PiA0KQo+ICsjZGVmaW5lIEFEMjQyWF9TV1NUQVRfRkFVTFRfTkxPQwlCSVQoNykKPiArCj4g KyNkZWZpbmUgQUQyNDJYX0lOVFNUQVQJCQkweDE1Cj4gKyNkZWZpbmUgQUQyNDJYX0lOVFNUQVRf SVJRCQlCSVQoMCkKPiArCj4gKyNkZWZpbmUgQUQyNDJYX0lOVFNSQwkJCTB4MTYKPiArI2RlZmlu ZSBBRDI0MlhfSU5UU1JDX0lOT0RFCQkweDBmCj4gKyNkZWZpbmUgQUQyNDJYX0lOVFNSQ19TTFZJ TlQJCUJJVCg2KQo+ICsjZGVmaW5lIEFEMjQyWF9JTlRTUkNfTVNUSU5UCQlCSVQoNykKPiArCj4g KyNkZWZpbmUgQUQyNDJYX0lOVFRZUEUJCQkweDE3Cj4gKwo+ICsjZGVmaW5lIEFEMjQyWF9JTlRU WVBFX0RTQ0RPTkUJCTI0Cj4gKyNkZWZpbmUgQUQyNDJYX0lOVFRZUEVfTVNUUl9SVU5OSU5HCTI1 NQo+ICsKPiArI2RlZmluZSBBRDI0MlhfSU5UUE5EMAkJCTB4MTgKPiArI2RlZmluZSBBRDI0Mlhf SU5UUEROMF9IRENOVEVSUgkJQklUKDApCj4gKyNkZWZpbmUgQUQyNDJYX0lOVFBETjBfRERFUlIJ CUJJVCgxKQo+ICsjZGVmaW5lIEFEMjQyWF9JTlRQRE4wX0NSQ0VSUgkJQklUKDIpCj4gKyNkZWZp bmUgQUQyNDJYX0lOVFBETjBfRFBFUlIJCUJJVCgzKQo+ICsjZGVmaW5lIEFEMjQyWF9JTlRQRE4w X1BXUkVSUgkJQklUKDQpCj4gKyNkZWZpbmUgQUQyNDJYX0lOVFBETjBfQkVDT1ZGCQlCSVQoNSkK PiArI2RlZmluZSBBRDI0MlhfSU5UUEROMF9TUkZFUlIJCUJJVCg2KQo+ICsjZGVmaW5lIEFEMjQy WF9JTlRQRE4wX1NSRkNSQ0VSUglCSVQoNykKPiArCj4gKyNkZWZpbmUgQUQyNDJYX0lOVFBORDEJ CQkweDE5Cj4gKyNkZWZpbmUgQUQyNDJYX0lOVFBORDFfSU9QTkQoWCkJCUJJVChYKQo+ICsKPiAr I2RlZmluZSBBRDI0MlhfSU5UUE5EMgkJCTB4MWEKPiArI2RlZmluZSBBRDI0MlhfSU5UUE5EMl9E U0NET05FCQlCSVQoMCkKPiArI2RlZmluZSBBRDI0MlhfSU5UUE5EMl9JMkNFUlIJCUJJVCgxKQo+ ICsjZGVmaW5lIEFEMjQyWF9JTlRQTkQyX0lDUkNFUlIJCUJJVCgyKQo+ICsjZGVmaW5lIEFEMjQy WF9JTlRQTkQyX1NMVklSUQkJQklUKDMpCj4gKwo+ICsjZGVmaW5lIEFEMjQyWF9JTlRNU0swCQkJ MHgxYgo+ICsjZGVmaW5lIEFEMjQyWF9JTlRNU0swX0hDRUlFTgkJQklUKDApCj4gKyNkZWZpbmUg QUQyNDJYX0lOVE1TSzBfRERFSUVOCQlCSVQoMSkKPiArI2RlZmluZSBBRDI0MlhfSU5UTVNLMF9D UkNFSUVOCQlCSVQoMikKPiArI2RlZmluZSBBRDI0MlhfSU5UTVNLMF9EUEVJRU4JCUJJVCgzKQo+ ICsjZGVmaW5lIEFEMjQyWF9JTlRNU0swX1BXUkVJRU4JCUJJVCg0KQo+ICsjZGVmaW5lIEFEMjQy WF9JTlRNU0swX0JFQ0lFTgkJQklUKDUpCj4gKyNkZWZpbmUgQUQyNDJYX0lOVE1TSzBfU1JGRUlF TgkJQklUKDYpCj4gKyNkZWZpbmUgQUQyNDJYX0lOVE1TSzBfU1JGQ1JDRUlFTglCSVQoNykKPiAr Cj4gKyNkZWZpbmUgQUQyNDJYX0lOVE1TSzEJCQkweDFjCj4gKyNkZWZpbmUgQUQyNDJYX0lOVE1T SzFfSU9JUlFFTihYKQlCSVQoWCkKPiArCj4gKyNkZWZpbmUgQUQyNDJYX0lOVE1TSzIJCQkweDFk Cj4gKyNkZWZpbmUgQUQyNDJYX0lOVE1TSzJfRFNDRElFTgkJQklUKDApCj4gKyNkZWZpbmUgQUQy NDJYX0lOVE1TSzJfSTJDRUlFTgkJQklUKDEpCj4gKyNkZWZpbmUgQUQyNDJYX0lOVE1TSzJfSUNS Q0VJRU4JCUJJVCgyKQo+ICsjZGVmaW5lIEFEMjQyWF9JTlRNU0syX1NMVklSUUVOCQlCSVQoMykK PiArCj4gKyNkZWZpbmUgQUQyNDJYX0JFQ0NUTAkJCTB4MWUKPiArI2RlZmluZSBBRDI0MlhfQkVD Q1RMX0VOSERDTlQJCUJJVCgwKQo+ICsjZGVmaW5lIEFEMjQyWF9CRUNDVExfRU5ERAkJQklUKDEp Cj4gKyNkZWZpbmUgQUQyNDJYX0JFQ0NUTF9FTkNSQwkJQklUKDIpCj4gKyNkZWZpbmUgQUQyNDJY X0JFQ0NUTF9FTkRQCQlCSVQoMykKPiArI2RlZmluZSBBRDI0MlhfQkVDQ1RMX0VOSUNSQwkJQklU KDQpCj4gKyNkZWZpbmUgQUQyNDJYX0JFQ0NUTF9USFJFU0hMRChYKQkoKFgpID4+IDUpCj4gKwo+ ICsjZGVmaW5lIEFEMjQyWF9CRUNOVAkJCTB4MWYKPiArCj4gKyNkZWZpbmUgQUQyNDJYX1RFU1RN T0RFCQkJMHgyMAo+ICsjZGVmaW5lIEFEMjQyWF9URVNUTU9ERV9QUkJTVVAJCUJJVCgwKQo+ICsj ZGVmaW5lIEFEMjQyWF9URVNUTU9ERV9QUkJTRE4JCUJJVCgxKQo+ICsjZGVmaW5lIEFEMjQyWF9U RVNUTU9ERV9QUkJTTjJOCQlCSVQoMikKPiArI2RlZmluZSBBRDI0MlhfVEVTVE1PREVfUlhEUFRI KFgpCSgoWCkgPj4gNCkKPiArCj4gKyNkZWZpbmUgQUQyNDJYX0VSUkNOVDAJCQkweDIxCj4gKyNk ZWZpbmUgQUQyNDJYX0VSUkNOVDEJCQkweDIyCj4gKyNkZWZpbmUgQUQyNDJYX0VSUkNOVDIJCQkw eDIzCj4gKyNkZWZpbmUgQUQyNDJYX0VSUkNOVDMJCQkweDI0Cj4gKwo+ICsjZGVmaW5lIEFEMjQy WF9OT0RFCQkJMHgyOQo+ICsjZGVmaW5lIEFEMjQyWF9OT0RFX01BU0sJCTB4Zgo+ICsjZGVmaW5l IEFEMjQyWF9OT0RFX0RJU0NWRAkJQklUKDUpCj4gKyNkZWZpbmUgQUQyNDJYX05PREVfTkxBU1QJ CUJJVCg2KQo+ICsjZGVmaW5lIEFEMjQyWF9OT0RFX0xBU1QJCUJJVCg3KQo+ICsKPiArI2RlZmlu ZSBBRDI0MlhfRElTQ1NUQVQJCQkweDJiCj4gKyNkZWZpbmUgQUQyNDJYX0RJU0NTVEFUX0ROT0RF KFgpCSgoWCkgJiAweGYpCj4gKyNkZWZpbmUgQUQyNDJYX0RJU0NTVEFUX0RTQ0FDVAkJQklUKDcp Cj4gKwo+ICsjZGVmaW5lIEFEMjQyWF9UWEFDVEwJCQkweDJlCj4gKyNkZWZpbmUgQUQyNDJYX1RY QUNUTF9MRVZFTF9ISUdICTAKPiArI2RlZmluZSBBRDI0MlhfVFhBQ1RMX0xFVkVMX01FRElVTQky Cj4gKyNkZWZpbmUgQUQyNDJYX1RYQUNUTF9MRVZFTF9MT1cJCTMKPiArCj4gKyNkZWZpbmUgQUQy NDJYX1RYQkNUTAkJCTB4MzAKPiArI2RlZmluZSBBRDI0MlhfVFhCQ1RMX0xFVkVMX0hJR0gJMAo+ ICsjZGVmaW5lIEFEMjQyWF9UWEJDVExfTEVWRUxfTUVESVVNCTIKPiArI2RlZmluZSBBRDI0Mlhf VFhCQ1RMX0xFVkVMX0xPVwkJMwo+ICsKPiArI2RlZmluZSBBRDI0MlhfTElOVFRZUEUJCQkweDNl Cj4gKwo+ICsjZGVmaW5lIEFEMjQyWF9JMkNDRkcJCQkweDNmCj4gKyNkZWZpbmUgQUQyNDJYX0ky Q0NGR19EQVRBUkFURQkJQklUKDApCj4gKyNkZWZpbmUgQUQyNDJYX0kyQ0NGR19FQUNLCQlCSVQo MSkKPiArI2RlZmluZSBBRDI0MlhfSTJDQ0ZHX0ZSQU1FUkFURQkJQklUKDIpCj4gKwo+ICsjZGVm aW5lIEFEMjQyWF9QTExDVEwJCQkweDQwCj4gKyNkZWZpbmUgQUQyNDJYX1BMTENUTF9TU0ZSRVEo WCkJCSgoWCkgJiAzKQo+ICsjZGVmaW5lIEFEMjQyWF9QTExDVExfU1NERVBUSAkJQklUKDIpCj4g KyNkZWZpbmUgQUQyNDJYX1BMTENUTF9TU01PREVfQUIJCSgxIDw8IDYpCj4gKyNkZWZpbmUgQUQy NDJYX1BMTENUTF9TU01PREVfQUJfSTJTCSgyIDw8IDYpCj4gKwo+ICsjZGVmaW5lIEFEMjQyWF9J MlNHQ1RMCQkJMHg0MQo+ICsjZGVmaW5lIEFEMjQyWF9JMlNHQ1RMX1RETU1PREUoWCkJKChYKSAm IDMpCj4gKyNkZWZpbmUgQUQyNDJYX0kyU0dDVExfUlhPTkRUWDEJCUJJVCgzKQo+ICsjZGVmaW5l IEFEMjQyWF9JMlNHQ1RMX1RETVNTCQlCSVQoNCkKPiArI2RlZmluZSBBRDI0MlhfSTJTR0NUTF9B TFQJCUJJVCg1KQo+ICsjZGVmaW5lIEFEMjQyWF9JMlNHQ1RMX0VBUkxZCQlCSVQoNikKPiArI2Rl ZmluZSBBRDI0MlhfSTJTR0NUTF9JTlYJCUJJVCg3KQo+ICsKPiArI2RlZmluZSBBRDI0MlhfSTJT Q1RMCQkJMHg0Mgo+ICsjZGVmaW5lIEFEMjQyWF9JMlNDVExfVFgwRU4JCUJJVCgwKQo+ICsjZGVm aW5lIEFEMjQyWF9JMlNDVExfVFgxRU4JCUJJVCgxKQo+ICsjZGVmaW5lIEFEMjQyWF9JMlNDVExf VFgyUElOVEwJCUJJVCgyKQo+ICsjZGVmaW5lIEFEMjQyWF9JMlNDVExfVFhCQ0xLSU5WCQlCSVQo MykKPiArI2RlZmluZSBBRDI0MlhfSTJTQ1RMX1JYMEVOCQlCSVQoNCkKPiArI2RlZmluZSBBRDI0 MlhfSTJTQ1RMX1JYMUVOCQlCSVQoNSkKPiArI2RlZmluZSBBRDI0MlhfSTJTQ1RMX1JYMlBJTlRM CQlCSVQoNikKPiArI2RlZmluZSBBRDI0MlhfSTJTQ1RMX1JYQkNMS0lOVgkJQklUKDcpCj4gKwo+ ICsjZGVmaW5lIEFEMjQyWF9JMlNSQVRFCQkJMHg0Mwo+ICsjZGVmaW5lIEFEMjQyWF9JMlNSQVRF X0kyU1JBVEUoWCkJKChYKSAmIDMpCj4gKyNkZWZpbmUgQUQyNDJYX0kyU1JBVEVfQkNMS1JBVEUo WCkJKCgoWCkgPDwgMykgJiAzKQo+ICsjZGVmaW5lIEFEMjQyWF9JMlNSQVRFX1JFRFVDRQkJQklU KDYpCj4gKyNkZWZpbmUgQUQyNDJYX0kyU1JBVEVfU0hBUkUJCUJJVCg3KQo+ICsKPiArI2RlZmlu ZSBBRDI0MlhfSTJTVFhPRkZTRVQJCTB4NDQKPiArI2RlZmluZSBBRDI0MlhfSTJTVFhPRkZTRVRf VkFSKFgpCSgoWCkgJiAweDNmKQo+ICsjZGVmaW5lIEFEMjQyWF9JMlNUWE9GRlNFVF9UU0FGVEVS CUJJVCg2KQo+ICsjZGVmaW5lIEFEMjQyWF9JMlNUWE9GRlNFVF9UU0JFRk9SRQlCSVQoNykKPiAr Cj4gKyNkZWZpbmUgQUQyNDJYXzJTUlhPRkZTRVQJCTB4NDUKPiArI2RlZmluZSBBRDI0MlhfSTJT UlhPRkZTRVRfVkFSKFgpCSgoWCkgJiAweDNmKQo+ICsKPiArI2RlZmluZSBBRDI0MlhfU1lOQ09G RlNFVAkJMHg0Ngo+ICsKPiArI2RlZmluZSBBRDI0MlhfUERNQ1RMCQkJMHg0Nwo+ICsjZGVmaW5l IEFEMjQyWF9QRE1DVExfUERNMEVOCQlCSVQoMCkKPiArI2RlZmluZSBBRDI0MlhfUERNQ1RMX1BE TTBTTE9UUwkJQklUKDEpCj4gKyNkZWZpbmUgQUQyNDJYX1BETUNUTF9QRE0xRU4JCUJJVCgyKQo+ ICsjZGVmaW5lIEFEMjQyWF9QRE1DVExfUERNMVNMT1RTCQlCSVQoMykKPiArI2RlZmluZSBBRDI0 MlhfUERNQ1RMX0hQRkVOCQlCSVQoNCkKPiArI2RlZmluZSBBRDI0MlhfUERNQ1RMX1BETVJBVEUo WCkJKCgoWCkgJiAzKSA8PCA1KQo+ICsKPiArI2RlZmluZSBBRDI0MlhfRVJSTUdNVAkJCTB4NDgK PiArI2RlZmluZSBBRDI0MlhfRVJSTUdNVF9FUlJMU0IJCUJJVCgwKQo+ICsjZGVmaW5lIEFEMjQy WF9FUlJNR01UX0VSUlNJRwkJQklUKDEpCj4gKyNkZWZpbmUgQUQyNDJYX0VSUk1HTVRfRVJSU0xP VAkJQklUKDIpCj4gKwo+ICsjZGVmaW5lIEFEMjQyWF9HUElPREFUCQkJMHg0YQo+ICsjZGVmaW5l IEFEMjQyWF9HUElPREFUX1NFVAkJMHg0Ygo+ICsjZGVmaW5lIEFEMjQyWF9HUElPREFUX0NMUgkJ MHg0Ywo+ICsjZGVmaW5lIEFEMjQyWF9HUElPT0VOCQkJMHg0ZAo+ICsjZGVmaW5lIEFEMjQyWF9H UElPSUVOCQkJMHg0ZQo+ICsjZGVmaW5lIEFEMjQyWF9HUElPREFUX0lOCQkweDRmCj4gKyNkZWZp bmUgQUQyNDJYX1BJTlRFTgkJCTB4NTAKPiArI2RlZmluZSBBRDI0MlhfUElOVElOVgkJCTB4NTEK PiArCj4gKyNkZWZpbmUgQUQyNDJYX1BJTkNGRwkJCTB4NTIKPiArI2RlZmluZSBBRDI0MlhfUElO Q0ZHX0RSVlNUUgkJQklUKDApCj4gKyNkZWZpbmUgQUQyNDJYX1BJTkNGR19JUlFJTlYJCUJJVCg0 KQo+ICsjZGVmaW5lIEFEMjQyWF9QSU5DRkdfSVJRVFMJCUJJVCg1KQo+ICsKPiArI2RlZmluZSBB RDI0MlhfSTJTVEVTVAkJCTB4NTMKPiArI2RlZmluZSBBRDI0MlhfSTJTVEVTVF9QQVRUUk4yVFgJ QklUKDApCj4gKyNkZWZpbmUgQUQyNDJYX0kyU1RFU1RfTE9PUEJLMlRYCUJJVCgxKQo+ICsjZGVm aW5lIEFEMjQyWF9JMlNURVNUX1JYMkxPT1BCSwlCSVQoMikKPiArI2RlZmluZSBBRDI0MlhfSTJT VEVTVF9TRUxSWDEJCUJJVCgzKQo+ICsjZGVmaW5lIEFEMjQyWF9JMlNURVNUX0JVU0xPT1BCSwlC SVQoNCkKPiArCj4gKyNkZWZpbmUgQUQyNDJYX1JBSVNFCQkJMHg1NAo+ICsKPiArI2RlZmluZSBB RDI0MlhfR0VORVJSCQkJMHg1NQo+ICsjZGVmaW5lIEFEMjQyWF9HRU5FUlJfR0VOSENFUlIJCUJJ VCgwKQo+ICsjZGVmaW5lIEFEMjQyWF9HRU5FUlJfR0VORERFUlIJCUJJVCgxKQo+ICsjZGVmaW5l IEFEMjQyWF9HRU5FUlJfR0VOQ1JDRVJSCQlCSVQoMikKPiArI2RlZmluZSBBRDI0MlhfR0VORVJS X0dFTkRQRVJSCQlCSVQoMykKPiArI2RlZmluZSBBRDI0MlhfR0VORVJSX0dFTklDUkNFUlIJQklU KDQpCj4gKwo+ICsjZGVmaW5lIEFEMjQyWF9JMlNSUkFURQkJCTB4NTYKPiArI2RlZmluZSBBRDI0 MlhfSTJTUlJBVEVfUlJESVYoWCkJKChYKSAmIDB4M2YpCj4gKyNkZWZpbmUgQUQyNDJYX0kyU1JS QVRFX1JCVVMJCUJJVCg3KQo+ICsKPiArI2RlZmluZSBBRDI0MlhfSTJTUlJDVEwJCQkweDU3Cj4g KyNkZWZpbmUgQUQyNDJYX0kyU1JSQ1RMX0VOVkxTQgkJQklUKDApCj4gKyNkZWZpbmUgQUQyNDJY X0kyU1JSQ1RMX0VOWEJJVAkJQklUKDEpCj4gKyNkZWZpbmUgQUQyNDJYX0kyU1JSQ1RMX0VOU1RS QgkJQklUKDQpCj4gKyNkZWZpbmUgQUQyNDJYX0kyU1JSQ1RMX1NUUkJESVIJCUJJVCg1KQo+ICsK PiArI2RlZmluZSBBRDI0MlhfSTJTUlJTT0ZGUwkJMHg1OAo+ICsKPiArI2RlZmluZSBBRDI0Mlhf Q0xLMUNGRwkJCTB4NTkKPiArI2RlZmluZSBBRDI0MlhfQ0xLMkNGRwkJCTB4NWEKPiArI2RlZmlu ZSBBRDI0MlhfQ0xLQ0ZHX0RJVihYKQkJKChYKSAmIDB4ZikKPiArI2RlZmluZSBBRDI0MlhfQ0xL Q0ZHX0RJVk1TSwkJMHhmCj4gKyNkZWZpbmUgQUQyNDJYX0NMS0NGR19QRElWMzIJCUJJVCg1KQo+ ICsjZGVmaW5lIEFEMjQyWF9DTEtDRkdfSU5WCQlCSVQoNikKPiArI2RlZmluZSBBRDI0MlhfQ0xL Q0ZHX0VOCQlCSVQoNykKPiArCj4gKyNkZWZpbmUgQUQyNDJYX0JNTUNGRwkJCTB4NWIKPiArI2Rl ZmluZSBBRDI0MlhfQk1NQ0ZHX0JNTUVOCQlCSVQoMCkKPiArI2RlZmluZSBBRDI0MlhfQk1NQ0ZH X0JNTVJYRU4JCUJJVCgxKQo+ICsjZGVmaW5lIEFEMjQyWF9CTU1DRkdfQk1NTkRTQwkJQklUKDIp Cj4gKwo+ICsjZGVmaW5lIEFEMjQyWF9QRE1DVEwyCQkJMHg1ZAo+ICsjZGVmaW5lIEFEMjQyWF9Q RE1DVEwyX0RFU1RfQTJCCQkwCj4gKyNkZWZpbmUgQUQyNDJYX1BETUNUTDJfREVTVF9EVFgJCTEK PiArI2RlZmluZSBBRDI0MlhfUERNQ1RMMl9ERVNUX0EyQl9EVFgJMgo+ICsKPiArI2RlZmluZSBB RDI0MlhfVVBNQVNLKFgpCQkoMHg2MCArICgoWCkgJiAzKSkKPiArCj4gKyNkZWZpbmUgQUQyNDJY X1VQT0ZGU0VUCQkJMHg2NAo+ICsjZGVmaW5lIEFEMjQyWF9VUE9GRlNFVF9WQUwoWCkJCSgoWCkg JiAweDFmKQo+ICsKPiArI2RlZmluZSBBRDI0MlhfRE5NQVNLKFgpCQkoMHg2NSArICgoWCkgJSAz KSkKPiArCj4gKyNkZWZpbmUgQUQyNDJYX0ROT0ZGU0VUCQkJMHg2OQo+ICsjZGVmaW5lIEFEMjQy WF9ETk9GRlNFVF9WQUwoWCkJCSgoWCkgJiAweDFmKQo+ICsKPiArI2RlZmluZSBBRDI0MlhfQ0hJ UElEKFgpCQkoKFgpICsgMHg2YSkKPiArCj4gKyNkZWZpbmUgQUQyNDJYX0dQSU9ERU4JCQkweDgw Cj4gKyNkZWZpbmUgQUQyNDJYX0dQSU9EX01TSyhYKQkJKChYKSArIDB4ODEpCj4gKwo+ICsjZGVm aW5lIEFEMjQyWF9HUElPRERBVAkJCTB4ODkKPiArI2RlZmluZSBBRDI0MlhfR1BJT0RJTlYJCQkw eDhhCj4gKwo+ICsjZGVmaW5lIEFEMjQyWF9NQVhfUkVHCQkJMHg5Ygo+ICsKPiArc3RhdGljIGlu bGluZSBib29sIGFkMjQyeF9pc192b2xhdGlsZV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNp Z25lZCBpbnQgcmVnKQo+ICt7Cj4gKwlzd2l0Y2ggKHJlZykgewo+ICsJY2FzZSBBRDI0MlhfVkVO RE9SOgo+ICsJY2FzZSBBRDI0MlhfUFJPRFVDVDoKPiArCWNhc2UgQUQyNDJYX1ZFUlNJT046Cj4g KwljYXNlIEFEMjQyWF9DQVBBQklMSVRZOgo+ICsJY2FzZSBBRDI0MlhfU1dTVEFUOgo+ICsJY2Fz ZSBBRDI0MlhfSU5UU1RBVDoKPiArCWNhc2UgQUQyNDJYX0lOVFNSQzoKPiArCWNhc2UgQUQyNDJY X0lOVFRZUEU6Cj4gKwljYXNlIEFEMjQyWF9JTlRQTkQwOgo+ICsJY2FzZSBBRDI0MlhfSU5UUE5E MToKPiArCWNhc2UgQUQyNDJYX0lOVFBORDI6Cj4gKwljYXNlIEFEMjQyWF9CRUNOVDoKPiArCWNh c2UgQUQyNDJYX0VSUkNOVDA6Cj4gKwljYXNlIEFEMjQyWF9FUlJDTlQxOgo+ICsJY2FzZSBBRDI0 MlhfRVJSQ05UMjoKPiArCWNhc2UgQUQyNDJYX0VSUkNOVDM6Cj4gKwljYXNlIEFEMjQyWF9OT0RF Ogo+ICsJY2FzZSBBRDI0MlhfRElTQ1NUQVQ6Cj4gKwljYXNlIEFEMjQyWF9MSU5UVFlQRToKPiAr CWNhc2UgQUQyNDJYX0dQSU9EQVQ6Cj4gKwljYXNlIEFEMjQyWF9HUElPREFUX0lOOgo+ICsJCXJl dHVybiB0cnVlOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBhZDI0MnhfaXNfd3JpdGVhYmxlX3JlZyhzdHJ1Y3QgZGV2 aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCj4gK3sKPiArCS8qIFdyaXRlLXRvLWNsZWFuIHJl Z2lzdGVycyAqLwo+ICsJc3dpdGNoIChyZWcpIHsKPiArCWNhc2UgQUQyNDJYX0lOVFBORDA6Cj4g KwljYXNlIEFEMjQyWF9JTlRQTkQxOgo+ICsJY2FzZSBBRDI0MlhfSU5UUE5EMjoKPiArCWNhc2Ug QUQyNDJYX0JFQ05UOgo+ICsJCXJldHVybiB0cnVlOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4g IWFkMjQyeF9pc192b2xhdGlsZV9yZWcoZGV2LCByZWcpOwo+ICsJfQo+ICt9Cj4gKwo+ICsjZGVm aW5lIEFEMjQyWF9NQVNURVJfSUQgMHhmZgo+ICsKPiArc3RydWN0IGFkMjQyeF9tYXN0ZXI7Cj4g Kwo+ICtzdHJ1Y3QgYWQyNDJ4X2kyY19idXMgewo+ICsJc3RydWN0IGkyY19jbGllbnQJKmNsaWVu dDsKPiArCXN0cnVjdCBtdXRleAkJbXV0ZXg7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgYWQyNDJ4X25v ZGUgewo+ICsJc3RydWN0IGRldmljZQkJKmRldjsKPiArCXN0cnVjdCByZWdtYXAJCSpyZWdtYXA7 Cj4gKwlzdHJ1Y3QgYWQyNDJ4X21hc3RlcgkqbWFzdGVyOwo+ICsJdW5zaWduZWQgaW50CQl0ZG1f bW9kZTsKPiArCXVuc2lnbmVkIGludAkJdGRtX3Nsb3Rfc2l6ZTsKPiArCXVpbnQ4X3QJCQlpZDsK PiArCXVpbnQ4X3QJCQljYXBzOwo+ICt9Owo+ICsKPiArc3RydWN0IGFkMjQyeF9zbG90X2NvbmZp ZyB7Cj4gKwl1bnNpZ25lZCBpbnQgZG5fcnhfc2xvdHM7Cj4gKwl1bnNpZ25lZCBpbnQgZG5fbl90 eF9zbG90czsKPiArCXVuc2lnbmVkIGludCBkbl9uX2ZvcndhcmRfc2xvdHM7Cj4gKwl1bnNpZ25l ZCBpbnQgdXBfcnhfc2xvdHM7Cj4gKwl1bnNpZ25lZCBpbnQgdXBfbl90eF9zbG90czsKPiArCXVu c2lnbmVkIGludCB1cF9uX2ZvcndhcmRfc2xvdHM7Cj4gK307Cj4gKwo+ICtpbnQgYWQyNDJ4X3Jl YWRfc2xvdF9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LAo+ICsJCQkgICAgc3RydWN0IGRldmlj ZV9ub2RlICpucCwKPiArCQkJICAgIHN0cnVjdCBhZDI0Mnhfc2xvdF9jb25maWcgKmNvbmZpZyk7 Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgYWQyNDJ4X25vZGVfaXNfbWFzdGVyKHN0cnVjdCBh ZDI0Mnhfbm9kZSAqbm9kZSkKPiArewo+ICsJcmV0dXJuIG5vZGUtPmlkID09IEFEMjQyWF9NQVNU RVJfSUQ7Cj4gK30KPiArCj4gK2ludCBhZDI0Mnhfbm9kZV9wcm9iZShzdHJ1Y3QgYWQyNDJ4X25v ZGUgKm5vZGUpOwo+ICtpbnQgYWQyNDJ4X25vZGVfYWRkX21mZF9jZWxscyhzdHJ1Y3QgZGV2aWNl ICpkZXYpOwo+ICsKPiArc3RydWN0IGFkMjQyeF9ub2RlICphZDI0MnhfbWFzdGVyX2dldF9ub2Rl KHN0cnVjdCBhZDI0MnhfbWFzdGVyICptYXN0ZXIpOwo+ICtzdHJ1Y3QgYWQyNDJ4X2kyY19idXMg KmFkMjQyeF9tYXN0ZXJfZ2V0X2J1cyhzdHJ1Y3QgYWQyNDJ4X21hc3RlciAqbWFzdGVyKTsKPiAr Y29uc3QgY2hhciAqYWQyNDJ4X21hc3Rlcl9nZXRfY2xrX25hbWUoc3RydWN0IGFkMjQyeF9tYXN0 ZXIgKm1hc3Rlcik7Cj4gK3Vuc2lnbmVkIGludCBhZDI0MnhfbWFzdGVyX2dldF9jbGtfcmF0ZShz dHJ1Y3QgYWQyNDJ4X21hc3RlciAqbWFzdGVyKTsKPiArCj4gK2ludCBhZDI0Mnhfc2xhdmVfcmVh ZChzdHJ1Y3QgYWQyNDJ4X2kyY19idXMgKmJ1cywKPiArCQkgICAgICBzdHJ1Y3QgcmVnbWFwICpt YXN0ZXJfcmVnbWFwLAo+ICsJCSAgICAgIHVpbnQ4X3Qgbm9kZV9pZCwgdWludDhfdCByZWcsIHVu c2lnbmVkIGludCAqdmFsKTsKPiAraW50IGFkMjQyeF9zbGF2ZV93cml0ZShzdHJ1Y3QgYWQyNDJ4 X2kyY19idXMgKmJ1cywKPiArCQkgICAgICAgc3RydWN0IHJlZ21hcCAqbWFzdGVyX3JlZ21hcCwK PiArCQkgICAgICAgdWludDhfdCBub2RlX2lkLCB1aW50OF90IHJlZywgdW5zaWduZWQgaW50IHZh bCk7Cj4gKwo+ICsjZW5kaWYKCi0tIApMZWUgSm9uZXMgW+adjueQvOaWr10KTGluYXJvIFNlcnZp Y2VzIFRlY2huaWNhbCBMZWFkCkxpbmFyby5vcmcg4pSCIE9wZW4gc291cmNlIHNvZnR3YXJlIGZv ciBBUk0gU29DcwpGb2xsb3cgTGluYXJvOiBGYWNlYm9vayB8IFR3aXR0ZXIgfCBCbG9nCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFsc2EtZGV2ZWwgbWFp bGluZyBsaXN0CkFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZwpodHRwczovL21haWxtYW4uYWxz YS1wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Fsc2EtZGV2ZWwK