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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id D9B78C54EE9 for ; Mon, 19 Sep 2022 12:47:15 +0000 (UTC) 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:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=woEWOnwmkBPYcYAnJ0RgPsBU11zpRWigvUd/zXcPA24=; b=dNM6gFrD2ncz4B /KA6zlpxdpkKqGBEYhZCfrpPVo+iwDwIS2l8glxS5/wg3PCz9xQ8GYIo4o6CMMGtLqzNLh59a24RZ eAVOe1pgbTRyH5xTAmwoMO8tSvk3bw2NVkVLnKFY6jRmU3UJ03VgM2s5RtEcBovBDlq1d5W0Zkq3T lps7KHBdVB0QmCm1QPyF36YNHGo7Gfz3XgkQTMg7dJFO35ifGXZGqQCcWgfO1NrAnXIV2zKGCKkGJ pIkfnz7Vse4DnIGrgrU4zcEN+WjGK8NFMdt4OHWzFNOMcy5cdmTz/S36SYr33C13Wvf0eVr+6s45i MPWSEbcyf02Szk6snKMg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oaGB9-00Bk2k-8u; Mon, 19 Sep 2022 12:47:15 +0000 Received: from perceval.ideasonboard.com ([213.167.242.64]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oaGB2-00Bjxr-I8 for linux-phy@lists.infradead.org; Mon, 19 Sep 2022 12:47:14 +0000 Received: from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id BDED49BA; Mon, 19 Sep 2022 14:47:00 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1663591621; bh=TwUp+8KWmgwOI8QKSRKGTHiDKisfHhbX8WMOGDa+3Rw=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=t6NJcAHYc9ddKpvqlM2Yy91XWbBVixnaKe+2oIY0v4wZBh9CLdtPylfZdHmLVAXm+ NcuRznHQZNfQpahSOTAeETmOBxb63+ply8qKd0oW589eQAoTCJFPVA0bUlFKq7X0io YHH1FkapH/fFKhUErTTENiBQ7RIOSxb5A+67aQMQ= Date: Mon, 19 Sep 2022 15:46:47 +0300 From: Laurent Pinchart To: Marco Felsch Cc: mchehab@kernel.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, kishon@ti.com, vkoul@kernel.org, sakari.ailus@linux.intel.com, hverkuil@xs4all.nl, jacopo@jmondi.org, kieran.bingham+renesas@ideasonboard.com, linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, kernel@pengutronix.de Subject: Re: [PATCH v2 4/4] media: tc358746: add Toshiba TC358746 Parallel to CSI-2 bridge driver Message-ID: References: <20220916134535.128131-1-m.felsch@pengutronix.de> <20220916134535.128131-5-m.felsch@pengutronix.de> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20220916134535.128131-5-m.felsch@pengutronix.de> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220919_054709_130721_1D6F2DBB X-CRM114-Status: GOOD ( 37.62 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org SGkgTWFyY28sCgpUaGFuayB5b3UgZm9yIHRoZSBwYXRjaC4KCk9uIEZyaSwgU2VwIDE2LCAyMDIy IGF0IDAzOjQ1OjM1UE0gKzAyMDAsIE1hcmNvIEZlbHNjaCB3cm90ZToKPiBBZGRpbmcgc3VwcG9y dCBmb3IgdGhlIFRDMzU4NzQ2IHBhcmFsbGVsIDwtPiBNSVBJIENTSSBicmlkZ2UuIFRoaXMgY2hp cAo+IHN1cHBvcnRzIHR3byBvcGVyYXRpbmcgbW9kZXM6Cj4gICAxc3QpIHBhcmFsbGVsLWluIC0+ IG1pcGktY3NpIG91dAo+ICAgMm5kKSBtaXBpLWNzaSBpbiAtPiBwYXJhbGxlbCBvdXQKPiAKPiBU aGlzIHBhdGNoIG9ubHkgYWRkcyB0aGUgc3VwcG9ydCBmb3IgdGhlIDFzdCBtb2RlLgo+IAo+IFNp Z25lZC1vZmYtYnk6IE1hcmNvIEZlbHNjaCA8bS5mZWxzY2hAcGVuZ3V0cm9uaXguZGU+Cj4gLS0t Cj4gQ2hhbmdlbG9nOgo+IAo+IHYyOgo+IC0gdXNlIHRoZSBjb3JyZWN0IENJRF9MSU5LX0ZSRVEg Y29udHJvbCB0byBxdWVyeSB0aGUgc2Vuc29yX3BjbGtfcmF0ZQo+IC0gcmVtb3ZlIG5vdyBub3Qg bmVlZGVkIHRjMzU4NzQ2X2xpbmtfc2V0dXAoKSBhbmQKPiAgIHN0cnVjdCB2NGwyX2N0cmwgc2Vu c29yX3BjbGtfY3RybAo+IC0gY2FsbCB2NGwyX3N1YmRldl9saW5rX3ZhbGlkYXRlX2RlZmF1bHQo KSBkdXJpbmcgbGluayB2YWxpZGF0aW9uCj4gLSByZW1vdmUgTUVESUFfQlVTX0ZNVF9HQlI4ODhf MVgyNC9ZVVY0NDQgZm9ybWF0IHN1cHBvcnQKPiAtIHVzZSBzdWJkZXYgYWN0aXZlX3N0YXRlIEFQ SQo+IC0gcmVwbGFjZSBvd24gLmdldF9mbXQgd2l0aCB2NGwyX3N1YmRldl9nZXRfZm10Cj4gLSBy ZW1vdmUgdW5uZWNlc3NhcnkgcGFkIGNoZWNrcwo+IC0gcmVzdHJ1Y3R1cmUgdGMzNTg3NDZfZ2V0 X2Zvcm1hdF9ieV9jb2RlKCkgaWYtY2FzZQo+IC0gbW92ZSBhcHBseV9kcGh5X2NvbmZpZ3xhcHBs eV9taXNjX2NvbmZpZyBmcm9tIHJlc3VtZSBpbnRvcyBzX3N0cmVhbQo+IC0gdXNlIGdvdG8gaW4g c19zdHJlYW0gZW5hYmxlIGNhc2UKPiAtIGZpeCBlcnJvciBoYW5kbGluZyBpbiBzdXNwZW5kL3Jl c3VtZQo+IC0gc3BsaXQgcHJvYmUoKSBpbnRvIG1vcmUgc3ViLWZ1bmN0aW9ucwo+IC0gdXNlIGRl dl9kYmcoKSBmb3IgcHJpbnRpbmcgc3VjY2Vzc2Z1bCBwcm9iZQo+IAo+ICBkcml2ZXJzL21lZGlh L2kyYy9LY29uZmlnICAgIHwgICAxNyArCj4gIGRyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlICAg fCAgICAxICsKPiAgZHJpdmVycy9tZWRpYS9pMmMvdGMzNTg3NDYuYyB8IDE2ODIgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAzIGZpbGVzIGNoYW5nZWQsIDE3MDAgaW5zZXJ0 aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9pMmMvdGMzNTg3NDYu Ywo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnIGIvZHJpdmVycy9t ZWRpYS9pMmMvS2NvbmZpZwo+IGluZGV4IDc4MDZkNGI4MTcxNi4uYWVmYjljOWUwYzA4IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcKPiArKysgYi9kcml2ZXJzL21lZGlh L2kyYy9LY29uZmlnCj4gQEAgLTEyNzIsNiArMTI3MiwyMyBAQCBjb25maWcgVklERU9fVEMzNTg3 NDNfQ0VDCj4gIAkgIFdoZW4gc2VsZWN0ZWQgdGhlIHRjMzU4NzQzIHdpbGwgc3VwcG9ydCB0aGUg b3B0aW9uYWwKPiAgCSAgSERNSSBDRUMgZmVhdHVyZS4KPiAgCj4gK2NvbmZpZyBWSURFT19UQzM1 ODc0Ngo+ICsJdHJpc3RhdGUgIlRvc2hpYmEgVEMzNTg3NDYgcGFyYWxsZWwtQ1NJMiBicmlkZ2Ui Cj4gKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMKPiArCXNlbGVjdCBWSURFT19WNEwyX1NV QkRFVl9BUEkKPiArCXNlbGVjdCBNRURJQV9DT05UUk9MTEVSCj4gKwlzZWxlY3QgVjRMMl9GV05P REUKPiArCXNlbGVjdCBHRU5FUklDX1BIWV9NSVBJX0RQSFkKPiArCXNlbGVjdCBSRUdNQVBfSTJD Cj4gKwlzZWxlY3QgQ09NTU9OX0NMSwo+ICsJaGVscAo+ICsJICBTdXBwb3J0IGZvciB0aGUgVG9z aGliYSBUQzM1ODc0NiBwYXJhbGxlbCB0byBNSVBJIENTSS0yIGJyaWRnZS4KPiArCSAgVGhlIGJy aWRnZSBjYW4gd29yayBpbiBib3RoIGRpcmVjdGlvbnMgYnV0IGN1cnJlbnRseSBvbmx5IHRoZQo+ ICsJICBwYXJhbGxlbC1pbiAvIGNzaS1vdXQgcGF0aCBpcyBzdXBwb3J0ZWQuCj4gKwo+ICsJICBU byBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKPiAr CSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRjMzU4NzQ2Lgo+ICsKPiAgY29uZmlnIFZJREVPX1RW UDUxNFgKPiAgCXRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBUVlA1MTR4IHZpZGVvIGRlY29k ZXIiCj4gIAlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tZWRpYS9pMmMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2kyYy9NYWtlZmlsZQo+IGluZGV4 IDBhMjkzMzEwM2RkOS4uZDEwOTZjMmFiNDgwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbWVkaWEv aTJjL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUKPiBAQCAtMTE4 LDYgKzExOCw3IEBAIG9iai0kKENPTkZJR19WSURFT19TT05ZX0JURl9NUFgpICs9IHNvbnktYnRm LW1weC5vCj4gIG9iai0kKENPTkZJR19WSURFT19TUjAzMFBDMzApICs9IHNyMDMwcGMzMC5vCj4g IG9iai0kKENPTkZJR19WSURFT19TVF9NSVBJRDAyKSArPSBzdC1taXBpZDAyLm8KPiAgb2JqLSQo Q09ORklHX1ZJREVPX1RDMzU4NzQzKSArPSB0YzM1ODc0My5vCj4gK29iai0kKENPTkZJR19WSURF T19UQzM1ODc0NikgKz0gdGMzNTg3NDYubwo+ICBvYmotJChDT05GSUdfVklERU9fVERBMTk5N1gp ICs9IHRkYTE5OTd4Lm8KPiAgb2JqLSQoQ09ORklHX1ZJREVPX1REQTc0MzIpICs9IHRkYTc0MzIu bwo+ICBvYmotJChDT05GSUdfVklERU9fVERBOTg0MCkgKz0gdGRhOTg0MC5vCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvbWVkaWEvaTJjL3RjMzU4NzQ2LmMgYi9kcml2ZXJzL21lZGlhL2kyYy90YzM1 ODc0Ni5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjRmMWE4 MDliOWZjMwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL21lZGlhL2kyYy90YzM1ODc0 Ni5jCj4gQEAgLTAsMCArMSwxNjgyIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9ubHkKPiArLyoKPiArICogVEMzNTg3NDYgLSBQYXJhbGxlbCA8LT4gQ1NJLTIgQnJp ZGdlCj4gKyAqCj4gKyAqIENvcHlyaWdodCAyMDIyIE1hcmNvIEZlbHNjaCA8a2VybmVsQHBlbmd1 dHJvbml4LmRlPgo+ICsgKgo+ICsgKiBOb3RlczoKPiArICogIC0gQ3VycmVudGx5IG9ubHkgJ1Bh cmFsbGVsLWluIC0+IENTSS1vdXQnIG1vZGUgaXMgc3VwcG9ydGVkIQo+ICsgKi8KPiArCj4gKyNp bmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5o Pgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KPiArI2luY2x1ZGUgPGxpbnV4L3BoeS9waHktbWlwaS1kcGh5Lmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9wcm9wZXJ0eS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICsjaW5j bHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+Cj4g KyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgo+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1m d25vZGUuaD4KPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItbWMuaD4KPiArCj4gKy8qIDE2LWJpdCBy ZWdpc3RlcnMgKi8KPiArI2RlZmluZSBDSElQSURfUkVHCQkJMHgwMDAwCj4gKyNkZWZpbmUJCUNI SVBJRAkJCUdFTk1BU0soMTUsIDgpCj4gKwo+ICsjZGVmaW5lIFNZU0NUTF9SRUcJCQkweDAwMDIK PiArI2RlZmluZQkJU1JFU0VUCQkJQklUKDApCj4gKwo+ICsjZGVmaW5lIENPTkZDVExfUkVHCQkJ MHgwMDA0Cj4gKyNkZWZpbmUJCVBEQVRBRl9NQVNLCQlHRU5NQVNLKDksIDgpCj4gKyNkZWZpbmUJ CVBEQVRBRl9NT0RFMAkJMAo+ICsjZGVmaW5lCQlQREFUQUZfTU9ERTEJCTEKPiArI2RlZmluZQkJ UERBVEFGX01PREUyCQkyCj4gKyNkZWZpbmUJCVBEQVRBRih2YWwpCQlGSUVMRF9QUkVQKFBEQVRB Rl9NQVNLLCAodmFsKSkKPiArI2RlZmluZQkJUFBFTgkJCUJJVCg2KQo+ICsjZGVmaW5lCQlEQVRB TEFORV9NQVNLCQlHRU5NQVNLKDEsIDApCj4gKwo+ICsjZGVmaW5lIEZJRk9DVExfUkVHCQkJMHgw MDA2Cj4gKyNkZWZpbmUgREFUQUZNVF9SRUcJCQkweDAwMDgKPiArI2RlZmluZQkJUERGTVQodmFs KQkJRklFTERfUFJFUChHRU5NQVNLKDcsIDQpLCAodmFsKSkKPiArCj4gKyNkZWZpbmUgTUNMS0NU TF9SRUcJCQkweDAwMGMKPiArI2RlZmluZQkJTUNMS19ISUdIX01BU0sJCUdFTk1BU0soMTUsIDgp Cj4gKyNkZWZpbmUJCU1DTEtfTE9XX01BU0sJCUdFTk1BU0soNywgMCkKPiArI2RlZmluZQkJTUNM S19ISUdIKHZhbCkJCUZJRUxEX1BSRVAoTUNMS19ISUdIX01BU0ssICh2YWwpKQo+ICsjZGVmaW5l CQlNQ0xLX0xPVyh2YWwpCQlGSUVMRF9QUkVQKE1DTEtfTE9XX01BU0ssICh2YWwpKQo+ICsKPiAr I2RlZmluZSBQTExDVEwwX1JFRwkJCTB4MDAxNgo+ICsjZGVmaW5lCQlQTExfUFJEX01BU0sJCUdF Tk1BU0soMTUsIDEyKQo+ICsjZGVmaW5lCQlQTExfUFJEKHZhbCkJCUZJRUxEX1BSRVAoUExMX1BS RF9NQVNLLCAodmFsKSkKPiArI2RlZmluZQkJUExMX0ZCRF9NQVNLCQlHRU5NQVNLKDgsIDApCj4g KyNkZWZpbmUJCVBMTF9GQkQodmFsKQkJRklFTERfUFJFUChQTExfRkJEX01BU0ssICh2YWwpKQo+ ICsKPiArI2RlZmluZSBQTExDVEwxX1JFRwkJCTB4MDAxOAo+ICsjZGVmaW5lCQlQTExfRlJTX01B U0sJCUdFTk1BU0soMTEsIDEwKQo+ICsjZGVmaW5lCQlQTExfRlJTKHZhbCkJCUZJRUxEX1BSRVAo UExMX0ZSU19NQVNLLCAodmFsKSkKPiArI2RlZmluZQkJQ0tFTgkJCUJJVCg0KQo+ICsjZGVmaW5l CQlSRVNFVEIJCQlCSVQoMSkKPiArI2RlZmluZQkJUExMX0VOCQkJQklUKDApCj4gKwo+ICsjZGVm aW5lIENMS0NUTF9SRUcJCQkweDAwMjAKPiArI2RlZmluZQkJTUNMS0RJVl9NQVNLCQlHRU5NQVNL KDMsIDIpCj4gKyNkZWZpbmUJCU1DTEtESVYodmFsKQkJRklFTERfUFJFUChNQ0xLRElWX01BU0ss ICh2YWwpKQo+ICsjZGVmaW5lCQlNQ0xLRElWXzgJCTAKPiArI2RlZmluZQkJTUNMS0RJVl80CQkx Cj4gKyNkZWZpbmUJCU1DTEtESVZfMgkJMgo+ICsKPiArI2RlZmluZSBXT1JEQ05UX1JFRwkJCTB4 MDAyMgo+ICsjZGVmaW5lIFBQX01JU0NfUkVHCQkJMHgwMDMyCj4gKyNkZWZpbmUJCUZSTVNUT1AJ CQlCSVQoMTUpCj4gKyNkZWZpbmUJCVJTVFBUUgkJCUJJVCgxNCkKPiArCj4gKy8qIDMyLWJpdCBy ZWdpc3RlcnMgKi8KPiArI2RlZmluZSBDTFdfRFBIWUNPTlRUWF9SRUcJCTB4MDEwMAo+ICsjZGVm aW5lIENMV19DTlRSTF9SRUcJCQkweDAxNDAKPiArI2RlZmluZSBEMFdfQ05UUkxfUkVHCQkJMHgw MTQ0Cj4gKyNkZWZpbmUJCUxBTkVESVNBQkxFCQlCSVQoMCkKPiArCj4gKyNkZWZpbmUgU1RBUlRD TlRSTF9SRUcJCQkweDAyMDQKPiArI2RlZmluZQkJU1RBUlQJCQlCSVQoMCkKPiArCj4gKyNkZWZp bmUgTElORUlOSVRDTlRfUkVHCQkJMHgwMjEwCj4gKyNkZWZpbmUgTFBUWFRJTUVDTlRfUkVHCQkJ MHgwMjE0Cj4gKyNkZWZpbmUgVENMS19IRUFERVJDTlRfUkVHCQkweDAyMTgKPiArI2RlZmluZQkJ VENMS19aRVJPQ05UKHZhbCkJRklFTERfUFJFUChHRU5NQVNLKDE1LCA4KSwgKHZhbCkpCj4gKyNk ZWZpbmUJCVRDTEtfUFJFUEFSRUNOVCh2YWwpCUZJRUxEX1BSRVAoR0VOTUFTSyg2LCAwKSwgKHZh bCkpCj4gKwo+ICsjZGVmaW5lIFRDTEtfVFJBSUxDTlRfUkVHCQkweDAyMUMKPiArI2RlZmluZSBU SFNfSEVBREVSQ05UX1JFRwkJMHgwMjIwCj4gKyNkZWZpbmUJCVRIU19aRVJPQ05UKHZhbCkJRklF TERfUFJFUChHRU5NQVNLKDE0LCA4KSwgKHZhbCkpCj4gKyNkZWZpbmUJCVRIU19QUkVQQVJFQ05U KHZhbCkJRklFTERfUFJFUChHRU5NQVNLKDYsIDApLCAodmFsKSkKPiArCj4gKyNkZWZpbmUgVFdB S0VVUF9SRUcJCQkweDAyMjQKPiArI2RlZmluZSBUQ0xLX1BPU1RDTlRfUkVHCQkweDAyMjgKPiAr I2RlZmluZSBUSFNfVFJBSUxDTlRfUkVHCQkweDAyMkMKPiArI2RlZmluZSBIU1RYVlJFR0VOX1JF RwkJCTB4MDIzNAo+ICsjZGVmaW5lIFRYT1BUSU9OQ05UUkxfUkVHCQkweDAyMzgKPiArI2RlZmlu ZSBDU0lfQ09OVFJPTF9SRUcJCQkweDA0MEMKPiArI2RlZmluZQkJQ1NJX01PREUJCUJJVCgxNSkK PiArI2RlZmluZQkJVFhIU01ECQkJQklUKDcpCj4gKyNkZWZpbmUJCU5PTCh2YWwpCQlGSUVMRF9Q UkVQKEdFTk1BU0soMiwgMSksICh2YWwpKQo+ICsKPiArI2RlZmluZSBDU0lfQ09ORldfUkVHCQkJ MHgwNTAwCj4gKyNkZWZpbmUJCU1PREUodmFsKQkJRklFTERfUFJFUChHRU5NQVNLKDMxLCAyOSks ICh2YWwpKQo+ICsjZGVmaW5lCQlNT0RFX1NFVAkJMHg1Cj4gKyNkZWZpbmUJCUFERFJFU1ModmFs KQkJRklFTERfUFJFUChHRU5NQVNLKDI4LCAyNCksICh2YWwpKQo+ICsjZGVmaW5lCQlDU0lfQ09O VFJPTF9BRERSRVNTCTB4Mwo+ICsjZGVmaW5lCQlEQVRBKHZhbCkJCUZJRUxEX1BSRVAoR0VOTUFT SygxNSwgMCksICh2YWwpKQo+ICsKPiArI2RlZmluZSBDU0lfU1RBUlRfUkVHCQkJMHgwNTE4Cj4g KyNkZWZpbmUJCVNUUlQJCQlCSVQoMCkKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9t YnVzX2ZyYW1lZm10IHRjMzU4NzQ2X2RlZl9mbXQgPSB7Cj4gKwkud2lkdGgJCT0gNjQwLAo+ICsJ LmhlaWdodAkJPSA0ODAsCj4gKwkuY29kZQkJPSBNRURJQV9CVVNfRk1UX1VZVlk4XzJYOCwKPiAr CS5maWVsZAkJPSBWNEwyX0ZJRUxEX05PTkUsCj4gKwkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JT UEFDRV9ERUZBVUxULAo+ICsJLnljYmNyX2VuYwk9IFY0TDJfWUNCQ1JfRU5DX0RFRkFVTFQsCj4g KwkucXVhbnRpemF0aW9uCT0gVjRMMl9RVUFOVElaQVRJT05fREVGQVVMVCwKPiArCS54ZmVyX2Z1 bmMJPSBWNEwyX1hGRVJfRlVOQ19ERUZBVUxULAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IGNo YXIgKiBjb25zdCB0YzM1ODc0Nl9zdXBwbGllc1tdID0gewo+ICsJInZkZGMiLCAidmRkaW8iLCAi dmRkbWlwaSIKPiArfTsKPiArCj4gK2VudW0gewo+ICsJVEMzNTg3NDZfU0lOSywKPiArCVRDMzU4 NzQ2X1NPVVJDRSwKPiArCVRDMzU4NzQ2X05SX1BBRFMKPiArfTsKPiArCj4gK3N0cnVjdCB0YzM1 ODc0NiB7Cj4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJCXNkOwo+ICsJc3RydWN0IG1lZGlhX3BhZAkJ cGFkc1tUQzM1ODc0Nl9OUl9QQURTXTsKPiArCXN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyCW5v dGlmaWVyOwo+ICsJc3RydWN0IHY0bDJfZndub2RlX2VuZHBvaW50CWNzaV92ZXA7Cj4gKwo+ICsJ c3RydWN0IHY0bDJfY3RybF9oYW5kbGVyCWN0cmxfaGRsOwo+ICsKPiArCXN0cnVjdCByZWdtYXAJ CQkqcmVnbWFwOwo+ICsJc3RydWN0IGNsawkJCSpyZWZjbGs7Cj4gKwlzdHJ1Y3QgZ3Bpb19kZXNj CQkqcmVzZXRfZ3BpbzsKPiArCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhCXN1cHBsaWVzW0FS UkFZX1NJWkUodGMzNTg3NDZfc3VwcGxpZXMpXTsKPiArCj4gKwlzdHJ1Y3QgY2xrX2h3CQkJbWNs a19odzsKPiArCXVuc2lnbmVkIGxvbmcJCQltY2xrX3JhdGU7Cj4gKwl1OAkJCQltY2xrX3ByZWRp djsKPiArCXUxNgkJCQltY2xrX3Bvc3RkaXY7Cj4gKwo+ICsJdW5zaWduZWQgbG9uZwkJCXBsbF9y YXRlOwo+ICsJdTgJCQkJcGxsX3Bvc3RfZGl2Owo+ICsJdTE2CQkJCXBsbF9wcmVfZGl2Owo+ICsJ dTE2CQkJCXBsbF9tdWw7Cj4gKwo+ICsjZGVmaW5lIFRDMzU4NzQ2X1ZCX01BWF9TSVpFCQkoNTEx ICogMzIpCj4gKyNkZWZpbmUgVEMzNTg3NDZfVkJfREVGQVVMVF9TSVpFCSAgKDEgKiAzMikKPiAr CXVuc2lnbmVkIGludAkJCXZiX3NpemU7IC8qIFZpZGVvIGJ1ZmZlciBzaXplIGluIGJpdHMgKi8K PiArCj4gKwlzdHJ1Y3QgcGh5X2NvbmZpZ3VyZV9vcHRzX21pcGlfZHBoeSBkcGh5X2NmZzsKPiAr fTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRjMzU4NzQ2ICp0b190YzM1ODc0NihzdHJ1 Y3QgdjRsMl9zdWJkZXYgKnNkKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1 Y3QgdGMzNTg3NDYsIHNkKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgdGMzNTg3 NDYgKmNsa19od190b190YzM1ODc0NihzdHJ1Y3QgY2xrX2h3ICpodykKPiArewo+ICsJcmV0dXJu IGNvbnRhaW5lcl9vZihodywgc3RydWN0IHRjMzU4NzQ2LCBtY2xrX2h3KTsKPiArfQo+ICsKPiAr c3RydWN0IHRjMzU4NzQ2X2Zvcm1hdCB7Cj4gKwl1MzIJCWNvZGU7Cj4gKwlib29sCQljc2lfZm9y bWF0Owo+ICsJdW5zaWduZWQgY2hhcglidXNfd2lkdGg7Cj4gKwl1bnNpZ25lZCBjaGFyCWJwcDsK PiArCS8qIFJlZ2lzdGVyIHZhbHVlcyAqLwo+ICsJdTgJCXBkZm9ybWF0OyAvKiBQZXJpcGhlcmFs IERhdGEgRm9ybWF0ICovCj4gKwl1OAkJcGRhdGFmOyAgIC8qIFBhcmFsbGVsIERhdGEgRm9ybWF0 IE9wdGlvbiAqLwo+ICt9Owo+ICsKPiArZW51bSB7Cj4gKwlQREZPUk1BVF9SQVc4ID0gMCwKPiAr CVBERk9STUFUX1JBVzEwLAo+ICsJUERGT1JNQVRfUkFXMTIsCj4gKwlQREZPUk1BVF9SR0I4ODgs Cj4gKwlQREZPUk1BVF9SR0I2NjYsCj4gKwlQREZPUk1BVF9SR0I1NjUsCj4gKwlQREZPUk1BVF9Z VVY0MjJfOEJJVCwKPiArCS8qIFJFU0VSVkVEID0gNyAqLwo+ICsJUERGT1JNQVRfUkFXMTQgPSA4 LAo+ICsJUERGT1JNQVRfWVVWNDIyXzEwQklULAo+ICsJUERGT1JNQVRfWVVWNDQ0LAo+ICt9Owo+ ICsKPiArLyogQ2hlY2sgdGMzNTg3NDZfc3JjX21idXNfY29kZSgpIGlmIHlvdSBhZGQgbmV3IGZv cm1hdHMgKi8KPiArc3RhdGljIGNvbnN0IHN0cnVjdCB0YzM1ODc0Nl9mb3JtYXQgdGMzNTg3NDZf Zm9ybWF0c1tdID0gewo+ICsJewo+ICsJCS5jb2RlID0gTUVESUFfQlVTX0ZNVF9VWVZZOF8yWDgs Cj4gKwkJLmJ1c193aWR0aCA9IDgsCj4gKwkJLmJwcCA9IDE2LAo+ICsJCS5wZGZvcm1hdCA9IFBE Rk9STUFUX1lVVjQyMl84QklULAo+ICsJCS5wZGF0YWYgPSBQREFUQUZfTU9ERTAsCj4gKwl9LCB7 Cj4gKwkJLmNvZGUgPSBNRURJQV9CVVNfRk1UX1VZVlk4XzFYMTYsCj4gKwkJLmNzaV9mb3JtYXQg PSB0cnVlLAo+ICsJCS5idXNfd2lkdGggPSAxNiwKPiArCQkuYnBwID0gMTYsCj4gKwkJLnBkZm9y bWF0ID0gUERGT1JNQVRfWVVWNDIyXzhCSVQsCj4gKwkJLnBkYXRhZiA9IFBEQVRBRl9NT0RFMSwK PiArCX0sIHsKPiArCQkuY29kZSA9IE1FRElBX0JVU19GTVRfWVVZVjhfMVgxNiwKPiArCQkuY3Np X2Zvcm1hdCA9IHRydWUsCj4gKwkJLmJ1c193aWR0aCA9IDE2LAo+ICsJCS5icHAgPSAxNiwKPiAr CQkucGRmb3JtYXQgPSBQREZPUk1BVF9ZVVY0MjJfOEJJVCwKPiArCQkucGRhdGFmID0gUERBVEFG X01PREUyLAo+ICsJfSwgewo+ICsJCS5jb2RlID0gTUVESUFfQlVTX0ZNVF9VWVZZMTBfMlgxMCwK PiArCQkuYnVzX3dpZHRoID0gMTAsCj4gKwkJLmJwcCA9IDIwLAo+ICsJCS5wZGZvcm1hdCA9IFBE Rk9STUFUX1lVVjQyMl8xMEJJVCwKPiArCQkucGRhdGFmID0gUERBVEFGX01PREUwLCAvKiBkb24n dCBjYXJlICovCj4gKwl9Cj4gK307Cj4gKwo+ICsvKiBHZXQgbi10aCBmb3JtYXQgZm9yIHBhZCAq Lwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHRjMzU4NzQ2X2Zvcm1hdCAqCj4gK3RjMzU4NzQ2X2dl dF9mb3JtYXRfYnlfaWR4KHVuc2lnbmVkIGludCBwYWQsIHVuc2lnbmVkIGludCBpbmRleCkKPiAr ewo+ICsJdW5zaWduZWQgaW50IGlkeCA9IDA7Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCj4gKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YzM1ODc0Nl9mb3JtYXRzKTsgaSsrKSB7Cj4gKwkJ Y29uc3Qgc3RydWN0IHRjMzU4NzQ2X2Zvcm1hdCAqZm10ID0gJnRjMzU4NzQ2X2Zvcm1hdHNbaV07 Cj4gKwo+ICsJCWlmICgocGFkID09IFRDMzU4NzQ2X1NPVVJDRSAmJiBmbXQtPmNzaV9mb3JtYXQp IHx8Cj4gKwkJICAgIChwYWQgPT0gVEMzNTg3NDZfU0lOSykpIHsKPiArCQkJaWYgKGlkeCA9PSBp bmRleCkKPiArCQkJCXJldHVybiBmbXQ7Cj4gKwkJCWlkeCsrOwo+ICsJCX0KPiArCX0KPiArCj4g KwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCB0YzM1ODc0Nl9mb3JtYXQgKgo+ICt0YzM1ODc0Nl9nZXRfZm9ybWF0X2J5X2NvZGUodW5zaWdu ZWQgaW50IHBhZCwgdTMyIGNvZGUpCj4gK3sKPiArCXVuc2lnbmVkIGludCBpOwo+ICsKPiArCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRjMzU4NzQ2X2Zvcm1hdHMpOyBpKyspIHsKPiArCQlj b25zdCBzdHJ1Y3QgdGMzNTg3NDZfZm9ybWF0ICpmbXQgPSAmdGMzNTg3NDZfZm9ybWF0c1tpXTsK PiArCj4gKwkJaWYgKHBhZCA9PSBUQzM1ODc0Nl9TSU5LICYmIGZtdC0+Y29kZSA9PSBjb2RlKQo+ ICsJCQlyZXR1cm4gZm10Owo+ICsKPiArCQlpZiAocGFkID09IFRDMzU4NzQ2X1NPVVJDRSAmJiAh Zm10LT5jc2lfZm9ybWF0KQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKGZtdC0+Y29kZSA9 PSBjb2RlKQo+ICsJCQlyZXR1cm4gZm10Owo+ICsJfQo+ICsKPiArCXJldHVybiBFUlJfUFRSKC1F SU5WQUwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIHRjMzU4NzQ2X3NyY19tYnVzX2NvZGUodTMy IGNvZGUpCj4gK3sKPiArCXN3aXRjaCAoY29kZSkgewo+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1VZ Vlk4XzJYODoKPiArCQlyZXR1cm4gTUVESUFfQlVTX0ZNVF9VWVZZOF8xWDE2Owo+ICsJY2FzZSBN RURJQV9CVVNfRk1UX1VZVlkxMF8yWDEwOgo+ICsJCXJldHVybiBNRURJQV9CVVNfRk1UX1VZVlkx MF8xWDIwOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gY29kZTsKPiArCX0KPiArfQo+ICsKPiAr c3RhdGljIGJvb2wgdGMzNTg3NDZfd3JpdGVhYmxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVu c2lnbmVkIGludCByZWcpCj4gK3sKPiArCXN3aXRjaCAocmVnKSB7Cj4gKwljYXNlIFNZU0NUTF9S RUcgLi4uIENTSV9TVEFSVF9SRUc6Cj4gKwkJcmV0dXJuIHRydWU7Cj4gKwlkZWZhdWx0Ogo+ICsJ CXJldHVybiBmYWxzZTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGJvb2wgdGMzNTg3NDZfcmVh ZGFibGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKPiArewo+ICsJ c3dpdGNoIChyZWcpIHsKPiArCWNhc2UgQ0hJUElEX1JFRyAuLi4gQ1NJX1NUQVJUX1JFRzoKPiAr CQlyZXR1cm4gdHJ1ZTsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICt9 Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgdGMzNTg3NDZfcmVnbWFw X2NvbmZpZyA9IHsKPiArCS5uYW1lID0gInRjMzU4NzQ2IiwKPiArCS5yZWdfYml0cyA9IDE2LAo+ ICsJLnZhbF9iaXRzID0gMTYsCj4gKwkubWF4X3JlZ2lzdGVyID0gQ1NJX1NUQVJUX1JFRywKPiAr CS53cml0ZWFibGVfcmVnID0gdGMzNTg3NDZfd3JpdGVhYmxlX3JlZywKPiArCS5yZWFkYWJsZV9y ZWcgPSB0YzM1ODc0Nl9yZWFkYWJsZV9yZWcsCj4gKwkucmVnX2Zvcm1hdF9lbmRpYW4gPSBSRUdN QVBfRU5ESUFOX0JJRywKPiArCS52YWxfZm9ybWF0X2VuZGlhbiA9IFJFR01BUF9FTkRJQU5fQklH LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl93cml0ZShzdHJ1Y3QgdGMzNTg3NDYg KnRjMzU4NzQ2LCB1MzIgcmVnLCB1MzIgdmFsKQo+ICt7Cj4gKwlzaXplX3QgY291bnQ7Cj4gKwo+ ICsJLyogMzItYml0IHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIENMV19EUEhZQ09OVFRYICovCj4g Kwljb3VudCA9IHJlZyA8IENMV19EUEhZQ09OVFRYX1JFRyA/IDEgOiAyOwo+ICsKPiArCXJldHVy biByZWdtYXBfYnVsa193cml0ZSh0YzM1ODc0Ni0+cmVnbWFwLCByZWcsICZ2YWwsIGNvdW50KTsK PiArfQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9yZWFkKHN0cnVjdCB0YzM1ODc0NiAqdGMz NTg3NDYsIHUzMiByZWcsIHUzMiAqdmFsKQo+ICt7Cj4gKwlzaXplX3QgY291bnQ7Cj4gKwo+ICsJ LyogMzItYml0IHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIENMV19EUEhZQ09OVFRYICovCj4gKwlj b3VudCA9IHJlZyA8IENMV19EUEhZQ09OVFRYX1JFRyA/IDEgOiAyOwo+ICsJKnZhbCA9IDA7Cj4g Kwo+ICsJcmV0dXJuIHJlZ21hcF9idWxrX3JlYWQodGMzNTg3NDYtPnJlZ21hcCwgcmVnLCB2YWws IGNvdW50KTsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICt0YzM1ODc0Nl91cGRhdGVfYml0cyhz dHJ1Y3QgdGMzNTg3NDYgKnRjMzU4NzQ2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKPiAr ewo+ICsJdTMyIHRtcCwgb3JpZzsKPiArCWludCBlcnI7Cj4gKwo+ICsJZXJyID0gdGMzNTg3NDZf cmVhZCh0YzM1ODc0NiwgcmVnLCAmb3JpZyk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7 Cj4gKwo+ICsJdG1wID0gb3JpZyAmIH5tYXNrOwo+ICsJdG1wIHw9IHZhbCAmIG1hc2s7Cj4gKwo+ ICsJcmV0dXJuIHRjMzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCByZWcsIHRtcCk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgdGMzNTg3NDZfc2V0X2JpdHMoc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0Niwg dTMyIHJlZywgdTMyIGJpdHMpCj4gK3sKPiArCXJldHVybiB0YzM1ODc0Nl91cGRhdGVfYml0cyh0 YzM1ODc0NiwgcmVnLCBiaXRzLCBiaXRzKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0 Nl9jbGVhcl9iaXRzKHN0cnVjdCB0YzM1ODc0NiAqdGMzNTg3NDYsIHUzMiByZWcsIHUzMiBiaXRz KQo+ICt7Cj4gKwlyZXR1cm4gdGMzNTg3NDZfdXBkYXRlX2JpdHModGMzNTg3NDYsIHJlZywgYml0 cywgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdGMzNTg3NDZfc3dfcmVzZXQoc3RydWN0IHRj MzU4NzQ2ICp0YzM1ODc0NikKPiArewo+ICsJaW50IGVycjsKPiArCj4gKwllcnIgPSB0YzM1ODc0 Nl9zZXRfYml0cyh0YzM1ODc0NiwgU1lTQ1RMX1JFRywgU1JFU0VUKTsKPiArCWlmIChlcnIpCj4g KwkJcmV0dXJuIGVycjsKPiArCj4gKwl1ZGVsYXkoMTApOwo+ICsKPiArCXJldHVybiB0YzM1ODc0 Nl9jbGVhcl9iaXRzKHRjMzU4NzQ2LCBTWVNDVExfUkVHLCBTUkVTRVQpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50Cj4gK3RjMzU4NzQ2X2FwcGx5X3BsbF9jb25maWcoc3RydWN0IHRjMzU4NzQ2ICp0 YzM1ODc0NikKPiArewo+ICsJdTggcG9zdCA9IHRjMzU4NzQ2LT5wbGxfcG9zdF9kaXY7Cj4gKwl1 MTYgcHJlID0gdGMzNTg3NDYtPnBsbF9wcmVfZGl2Owo+ICsJdTE2IG11bCA9IHRjMzU4NzQ2LT5w bGxfbXVsOwo+ICsJdTMyIHZhbCwgbWFzazsKPiArCWludCBlcnI7Cj4gKwo+ICsJZXJyID0gdGMz NTg3NDZfcmVhZCh0YzM1ODc0NiwgUExMQ1RMMV9SRUcsICZ2YWwpOwo+ICsJaWYgKGVycikKPiAr CQlyZXR1cm4gZXJyOwo+ICsKPiArCS8qIERvbid0IHRvdWNoIHRoZSBQTEwgaWYgcnVubmluZyAq Lwo+ICsJaWYgKEZJRUxEX0dFVChQTExfRU4sIHZhbCkgPT0gMSkKPiArCQlyZXR1cm4gMDsKPiAr Cj4gKwkvKiBQcmUtZGl2IGFuZCBNdWx0aXBsaWNhdG9yIGhhdmUgYSBpbnRlcm5hbCArMSBsb2dp YyAqLwo+ICsJdmFsID0gUExMX1BSRChwcmUgLSAxKSB8IFBMTF9GQkQobXVsIC0gMSk7Cj4gKwlt YXNrID0gUExMX1BSRF9NQVNLIHwgUExMX0ZCRF9NQVNLOwo+ICsJZXJyID0gdGMzNTg3NDZfdXBk YXRlX2JpdHModGMzNTg3NDYsIFBMTENUTDBfUkVHLCBtYXNrLCB2YWwpOwo+ICsJaWYgKGVycikK PiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCXZhbCA9IFBMTF9GUlMoaWxvZzIocG9zdCkpIHwgUkVT RVRCIHwgUExMX0VOOwo+ICsJbWFzayA9IFBMTF9GUlNfTUFTSyB8IFJFU0VUQiB8IFBMTF9FTjsK PiArCXRjMzU4NzQ2X3VwZGF0ZV9iaXRzKHRjMzU4NzQ2LCBQTExDVEwxX1JFRywgbWFzaywgdmFs KTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwl1ZGVsYXkoMTAwMCk7Cj4g Kwo+ICsJcmV0dXJuIHRjMzU4NzQ2X3NldF9iaXRzKHRjMzU4NzQ2LCBQTExDVEwxX1JFRywgQ0tF Tik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdGMzNTg3NDZfYXBwbHlfbWlzY19jb25maWcoc3Ry dWN0IHRjMzU4NzQ2ICp0YzM1ODc0NikKPiArewo+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9 ICZ0YzM1ODc0Ni0+c2Q7Cj4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnNpbmtfc3RhdGU7 Cj4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptYnVzZm10OwoKVGhpcyBjYW4gYmUgY29u c3QuCgo+ICsJY29uc3Qgc3RydWN0IHRjMzU4NzQ2X2Zvcm1hdCAqZm10Owo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gc2QtPmRldjsKPiArCXUzMiB2YWw7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCXNp bmtfc3RhdGUgPSB2NGwyX3N1YmRldl9sb2NrX2FuZF9nZXRfYWN0aXZlX3N0YXRlKHNkKTsKPiAr CW1idXNmbXQgPSB2NGwyX3N1YmRldl9nZXRfcGFkX2Zvcm1hdChzZCwgc2lua19zdGF0ZSwgVEMz NTg3NDZfU0lOSyk7Cj4gKwl2NGwyX3N1YmRldl91bmxvY2tfc3RhdGUoc2lua19zdGF0ZSk7CgpZ b3Ugc2hvdWxkIGtlZXAgdGhlIHN0YXRlIGxvY2tlZCB1bnRpbCB0aGUgZW5kIG9mIHRoaXMgZnVu Y3Rpb24sCm90aGVyd2lzZSB0aGUgZm9ybWF0IGNvdWxkIGNoYW5nZS4KCj4gKwo+ICsJZm10ID0g dGMzNTg3NDZfZ2V0X2Zvcm1hdF9ieV9jb2RlKFRDMzU4NzQ2X1NJTkssIG1idXNmbXQtPmNvZGUp Owo+ICsKPiArCS8qIFNlbGYgZGVmaW5lZCBDU0kgdXNlciBkYXRhIHR5cGUgaWQncyBhcmUgbm90 IHN1cHBvcnRlZCB5ZXQgKi8KPiArCXZhbCA9IFBERk1UKGZtdC0+cGRmb3JtYXQpOwo+ICsJZGV2 X2RiZyhkZXYsICJEQVRBRk1UOiAweCV4XG4iLCB2YWwpOwo+ICsJZXJyID0gdGMzNTg3NDZfd3Jp dGUodGMzNTg3NDYsIERBVEFGTVRfUkVHLCB2YWwpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4g ZXJyOwo+ICsKPiArCXZhbCA9IFBEQVRBRihmbXQtPnBkYXRhZik7Cj4gKwlkZXZfZGJnKGRldiwg IkNPTkZDVExbUERBVEFGXTogMHgleFxuIiwgZm10LT5wZGF0YWYpOwo+ICsJZXJyID0gdGMzNTg3 NDZfdXBkYXRlX2JpdHModGMzNTg3NDYsIENPTkZDVExfUkVHLCBQREFUQUZfTUFTSywgdmFsKTsK PiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwl2YWwgPSB0YzM1ODc0Ni0+dmJf c2l6ZSAvIDMyOwo+ICsJZGV2X2RiZyhkZXYsICJGSUZPQ1RMOiAldSAoMHgleClcbiIsIHZhbCwg dmFsKTsKPiArCWVyciA9IHRjMzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCBGSUZPQ1RMX1JFRywgdmFs KTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwkvKiBUb3RhbCBudW1iZXIg b2YgYnl0ZXMgZm9yIGVhY2ggbGluZS93aWR0aCAqLwo+ICsJdmFsID0gbWJ1c2ZtdC0+d2lkdGgg KiBmbXQtPmJwcCAvIDg7Cj4gKwlkZXZfZGJnKGRldiwgIldPUkRDTlQ6ICV1ICgweCV4KVxuIiwg dmFsLCB2YWwpOwo+ICsJcmV0dXJuIHRjMzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCBXT1JEQ05UX1JF RywgdmFsKTsKPiArfQo+ICsKPiArI2lmbmRlZiBNSFoKPiArI2RlZmluZSBNSFoJCSgxMDAwICog MTAwMCkKPiArI2VuZGlmCj4gKwo+ICsvKiBVc2UgTUh6IGFzIGJhc2Ugc28gdGhlIGRpdiBuZWVk cyBubyB1NjQgKi8KPiArc3RhdGljIHUzMiB0YzM1ODc0Nl9jZmdfdG9fY250KHVuc2lnbmVkIGlu dCBjZmdfdmFsLAo+ICsJCQkgICAgICAgdW5zaWduZWQgaW50IGNsa19taHosCj4gKwkJCSAgICAg ICB1bnNpZ25lZCBpbnQgdGltZV9iYXNlKQo+ICt7Cj4gKwlyZXR1cm4gRElWX1JPVU5EX1VQKGNm Z192YWwgKiBjbGtfbWh6LCB0aW1lX2Jhc2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIHRjMzU4 NzQ2X3BzX3RvX2NudCh1bnNpZ25lZCBpbnQgY2ZnX3ZhbCwKPiArCQkJICAgICAgdW5zaWduZWQg aW50IGNsa19taHopCj4gK3sKPiArCXJldHVybiB0YzM1ODc0Nl9jZmdfdG9fY250KGNmZ192YWws IGNsa19taHosIFVTRUNfUEVSX1NFQyk7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgdGMzNTg3NDZf dXNfdG9fY250KHVuc2lnbmVkIGludCBjZmdfdmFsLAo+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQg Y2xrX21oeikKPiArewo+ICsJcmV0dXJuIHRjMzU4NzQ2X2NmZ190b19jbnQoY2ZnX3ZhbCwgY2xr X21oeiwgMSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdGMzNTg3NDZfYXBwbHlfZHBoeV9jb25m aWcoc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0NikKPiArewo+ICsJc3RydWN0IHBoeV9jb25maWd1 cmVfb3B0c19taXBpX2RwaHkgKmNmZyA9ICZ0YzM1ODc0Ni0+ZHBoeV9jZmc7Cj4gKwlib29sIG5v bl9jb250X2NsayA9ICEhKHRjMzU4NzQ2LT5jc2lfdmVwLmJ1cy5taXBpX2NzaTIuZmxhZ3MgJgo+ ICsJCQkgICAgICAgVjRMMl9NQlVTX0NTSTJfTk9OQ09OVElOVU9VU19DTE9DSyk7Cj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSB0YzM1ODc0Ni0+c2QuZGV2Owo+ICsJdW5zaWduZWQgbG9uZyBoc19i eXRlX2NsaywgaGZfY2xrOwo+ICsJdTMyIHZhbCwgdmFsMiwgbHB0eGNudDsKPiArCWludCBlcnI7 Cj4gKwo+ICsJLyogVGhlIGhzX2J5dGVfY2xrIGlzIGFsc28gY2FsbGVkIFNZU0NMSyBpbiB0aGUg ZXhjZWwgc2hlZXQgKi8KPiArCWhzX2J5dGVfY2xrID0gY2ZnLT5oc19jbGtfcmF0ZSAvIDg7Cj4g Kwloc19ieXRlX2NsayAvPSBNSFo7Cj4gKwloZl9jbGsgPSBoc19ieXRlX2NsayAvIDI7Cj4gKwo+ ICsJdmFsID0gdGMzNTg3NDZfdXNfdG9fY250KGNmZy0+aW5pdCwgaGZfY2xrKSAtIDE7Cj4gKwlk ZXZfZGJnKGRldiwgIkxJTkVJTklUQ05UOiAldSAoMHgleClcbiIsIHZhbCwgdmFsKTsKPiArCWVy ciA9IHRjMzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCBMSU5FSU5JVENOVF9SRUcsIHZhbCk7Cj4gKwlp ZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJdmFsID0gdGMzNTg3NDZfcHNfdG9fY250 KGNmZy0+bHB4LCBoc19ieXRlX2NsaykgLSAxOwo+ICsJbHB0eGNudCA9IHZhbDsKPiArCWRldl9k YmcoZGV2LCAiTFBUWFRJTUVDTlQ6ICV1ICgweCV4KVxuIiwgdmFsLCB2YWwpOwo+ICsJZXJyID0g dGMzNTg3NDZfd3JpdGUodGMzNTg3NDYsIExQVFhUSU1FQ05UX1JFRywgdmFsKTsKPiArCWlmIChl cnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwl2YWwgPSB0YzM1ODc0Nl9wc190b19jbnQoY2Zn LT5jbGtfcHJlcGFyZSwgaHNfYnl0ZV9jbGspIC0gMTsKPiArCXZhbDIgPSB0YzM1ODc0Nl9wc190 b19jbnQoY2ZnLT5jbGtfemVybywgaHNfYnl0ZV9jbGspIC0gMTsKPiArCWRldl9kYmcoZGV2LCAi VENMS19QUkVQQVJFQ05UOiAldSAoMHgleClcbiIsIHZhbCwgdmFsKTsKPiArCWRldl9kYmcoZGV2 LCAiVENMS19aRVJPQ05UOiAldSAoMHgleClcbiIsIHZhbDIsIHZhbDIpOwo+ICsJZGV2X2RiZyhk ZXYsICJUQ0xLX0hFQURFUkNOVDogMHgleFxuIiwKPiArCQkodTMyKShUQ0xLX1BSRVBBUkVDTlQo dmFsKSB8IFRDTEtfWkVST0NOVCh2YWwyKSkpOwo+ICsJZXJyID0gdGMzNTg3NDZfd3JpdGUodGMz NTg3NDYsIFRDTEtfSEVBREVSQ05UX1JFRywKPiArCQkJICAgICBUQ0xLX1BSRVBBUkVDTlQodmFs KSB8IFRDTEtfWkVST0NOVCh2YWwyKSk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4g Kwo+ICsJdmFsID0gdGMzNTg3NDZfcHNfdG9fY250KGNmZy0+Y2xrX3RyYWlsLCBoc19ieXRlX2Ns ayk7Cj4gKwlkZXZfZGJnKGRldiwgIlRDTEtfVFJBSUxDTlQ6ICV1ICgweCV4KVxuIiwgdmFsLCB2 YWwpOwo+ICsJZXJyID0gdGMzNTg3NDZfd3JpdGUodGMzNTg3NDYsIFRDTEtfVFJBSUxDTlRfUkVH LCB2YWwpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCXZhbCA9IHRjMzU4 NzQ2X3BzX3RvX2NudChjZmctPmhzX3ByZXBhcmUsIGhzX2J5dGVfY2xrKSAtIDE7Cj4gKwl2YWwy ID0gdGMzNTg3NDZfcHNfdG9fY250KGNmZy0+aHNfemVybywgaHNfYnl0ZV9jbGspIC0gMTsKPiAr CWRldl9kYmcoZGV2LCAiVEhTX1BSRVBBUkVDTlQ6ICV1ICgweCV4KVxuIiwgdmFsLCB2YWwpOwo+ ICsJZGV2X2RiZyhkZXYsICJUSFNfWkVST0NOVDogJXUgKDB4JXgpXG4iLCB2YWwyLCB2YWwyKTsK PiArCWRldl9kYmcoZGV2LCAiVEhTX0hFQURFUkNOVDogMHgleFxuIiwKPiArCQkodTMyKShUSFNf UFJFUEFSRUNOVCh2YWwpIHwgVEhTX1pFUk9DTlQodmFsMikpKTsKPiArCWVyciA9IHRjMzU4NzQ2 X3dyaXRlKHRjMzU4NzQ2LCBUSFNfSEVBREVSQ05UX1JFRywKPiArCQkJICAgICBUSFNfUFJFUEFS RUNOVCh2YWwpIHwgVEhTX1pFUk9DTlQodmFsMikpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4g ZXJyOwo+ICsKPiArCS8qIFRXQUtFVVAgPiAxbXMgaW4gbHB0eGNudCBzdGVwcyAqLwo+ICsJdmFs ID0gdGMzNTg3NDZfdXNfdG9fY250KGNmZy0+d2FrZXVwLCBoc19ieXRlX2Nsayk7Cj4gKwl2YWwg PSB2YWwgLyAobHB0eGNudCArIDEpIC0gMTsKPiArCWRldl9kYmcoZGV2LCAiVFdBS0VVUDogJXUg KDB4JXgpXG4iLCB2YWwsIHZhbCk7Cj4gKwllcnIgPSB0YzM1ODc0Nl93cml0ZSh0YzM1ODc0Niwg VFdBS0VVUF9SRUcsIHZhbCk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJ dmFsID0gdGMzNTg3NDZfcHNfdG9fY250KGNmZy0+Y2xrX3Bvc3QsIGhzX2J5dGVfY2xrKTsKPiAr CWRldl9kYmcoZGV2LCAiVENMS19QT1NUQ05UOiAldSAoMHgleClcbiIsIHZhbCwgdmFsKTsKPiAr CWVyciA9IHRjMzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCBUQ0xLX1BPU1RDTlRfUkVHLCB2YWwpOwo+ ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCXZhbCA9IHRjMzU4NzQ2X3BzX3Rv X2NudChjZmctPmhzX3RyYWlsLCBoc19ieXRlX2Nsayk7Cj4gKwlkZXZfZGJnKGRldiwgIlRIU19U UkFJTENOVDogJXUgKDB4JXgpXG4iLCB2YWwsIHZhbCk7Cj4gKwllcnIgPSB0YzM1ODc0Nl93cml0 ZSh0YzM1ODc0NiwgVEhTX1RSQUlMQ05UX1JFRywgdmFsKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0 dXJuIGVycjsKPiArCj4gKwlkZXZfZGJnKGRldiwgIkNPTlRDTEtNT0RFOiAldSIsIG5vbl9jb250 X2NsayA/IDAgOiAxKTsKPiArCXJldHVybiAgdGMzNTg3NDZfd3JpdGUodGMzNTg3NDYsIFRYT1BU SU9OQ05UUkxfUkVHLCBub25fY29udF9jbGsgPyAwIDogMSk7Cj4gK30KPiArCj4gKyNkZWZpbmUg TUFYX0RBVEFfTEFORVMgNAo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9lbmFibGVfY3NpX2xh bmVzKHN0cnVjdCB0YzM1ODc0NiAqdGMzNTg3NDYsIGludCBlbmFibGUpCj4gK3sKPiArCXVuc2ln bmVkIGludCBsYW5lcyA9IHRjMzU4NzQ2LT5kcGh5X2NmZy5sYW5lczsKPiArCXVuc2lnbmVkIGlu dCBsYW5lOwo+ICsJdTMyIHJlZywgdmFsOwo+ICsJaW50IGVycjsKPiArCj4gKwllcnIgPSB0YzM1 ODc0Nl91cGRhdGVfYml0cyh0YzM1ODc0NiwgQ09ORkNUTF9SRUcsIERBVEFMQU5FX01BU0ssCj4g KwkJCQkgICBsYW5lcyAtIDEpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiAr CS8qIENsb2NrIGxhbmUgKi8KPiArCXZhbCA9IGVuYWJsZSA/IDAgOiBMQU5FRElTQUJMRTsKPiAr CWRldl9kYmcodGMzNTg3NDYtPnNkLmRldiwgIkNMV19DTlRSTDogMHgleFxuIiwgdmFsKTsKPiAr CWVyciA9IHRjMzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCBDTFdfQ05UUkxfUkVHLCB2YWwpOwo+ICsJ aWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWZvciAobGFuZSA9IDA7IGxhbmUgPCBN QVhfREFUQV9MQU5FUzsgbGFuZSsrKSB7Cj4gKwkJLyogRGF0YSBsYW5lcyAqLwo+ICsJCXJlZyA9 IEQwV19DTlRSTF9SRUcgKyBsYW5lICogMHg0Owo+ICsJCXZhbCA9IChlbmFibGUgJiYgbGFuZSA8 IGxhbmVzKSA/IDAgOiBMQU5FRElTQUJMRTsKPiArCj4gKwkJZGV2X2RiZyh0YzM1ODc0Ni0+c2Qu ZGV2LCAiRCV1V19DTlRSTDogMHgleFxuIiwgbGFuZSwgdmFsKTsKPiArCQllcnIgPSB0YzM1ODc0 Nl93cml0ZSh0YzM1ODc0NiwgcmVnLCB2YWwpOwo+ICsJCWlmIChlcnIpCj4gKwkJCXJldHVybiBl cnI7Cj4gKwl9Cj4gKwo+ICsJdmFsID0gMDsKPiArCWlmIChlbmFibGUpIHsKPiArCQkvKiBDbG9j ayBsYW5lICovCj4gKwkJdmFsIHw9IEJJVCgwKTsKPiArCj4gKwkJLyogRGF0YSBsYW5lcyAqLwo+ ICsJCWZvciAobGFuZSA9IDE7IGxhbmUgPD0gbGFuZXM7IGxhbmUrKykKPiArCQkJdmFsIHw9IEJJ VChsYW5lKTsKPiArCX0KPiArCj4gKwlkZXZfZGJnKHRjMzU4NzQ2LT5zZC5kZXYsICJIU1RYVlJF R0VOOiAweCV4XG4iLCB2YWwpOwo+ICsJcmV0dXJuIHRjMzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCBI U1RYVlJFR0VOX1JFRywgdmFsKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9lbmFi bGVfY3NpX21vZHVsZShzdHJ1Y3QgdGMzNTg3NDYgKnRjMzU4NzQ2LCBpbnQgZW5hYmxlKQo+ICt7 Cj4gKwl1bnNpZ25lZCBpbnQgbGFuZXMgPSB0YzM1ODc0Ni0+ZHBoeV9jZmcubGFuZXM7Cj4gKwlp bnQgZXJyOwo+ICsKPiArCS8qCj4gKwkgKiBTVEFSVCBhbmQgU1RSVCBhcmUgb25seSByZXNldGVk L2Rpc2FibGVkIGJ5IHN3IHJlc2V0LiBUaGlzIGlzCj4gKwkgKiByZXF1aXJlZCB0byBwdXQgdGhl IGxhbmUgc3RhdGUgYmFjayBpbnRvIExQLTExIHN0YXRlLiBUaGUgc3cgcmVzZXQKPiArCSAqIGRv bid0IHJlc2V0IHJlZ2lzdGVyIHZhbHVlcy4KPiArCSAqLwo+ICsJaWYgKCFlbmFibGUpCj4gKwkJ cmV0dXJuIHRjMzU4NzQ2X3N3X3Jlc2V0KHRjMzU4NzQ2KTsKPiArCj4gKwllcnIgPSB0YzM1ODc0 Nl93cml0ZSh0YzM1ODc0NiwgU1RBUlRDTlRSTF9SRUcsIFNUQVJUKTsKPiArCWlmIChlcnIpCj4g KwkJcmV0dXJuIGVycjsKPiArCj4gKwllcnIgPSB0YzM1ODc0Nl93cml0ZSh0YzM1ODc0NiwgQ1NJ X1NUQVJUX1JFRywgU1RSVCk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJ LyogQ1NJX0NPTlRST0xfUkVHIGlzIG9ubHkgaW5kaXJlY3QgYWNjZXNzaWJsZSAqLwo+ICsJcmV0 dXJuIHRjMzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCBDU0lfQ09ORldfUkVHLAo+ICsJCQkgICAgICBN T0RFKE1PREVfU0VUKSB8Cj4gKwkJCSAgICAgIEFERFJFU1MoQ1NJX0NPTlRST0xfQUREUkVTUykg fAo+ICsJCQkgICAgICBEQVRBKENTSV9NT0RFIHwgVFhIU01EIHwgTk9MKGxhbmVzIC0gMSkpKTsK PiArfQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9lbmFibGVfcGFyYWxsZWxfcG9ydChzdHJ1 Y3QgdGMzNTg3NDYgKnRjMzU4NzQ2LCBpbnQgZW5hYmxlKQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsK PiArCWlmIChlbmFibGUpIHsKPiArCQllcnIgPSB0YzM1ODc0Nl93cml0ZSh0YzM1ODc0NiwgUFBf TUlTQ19SRUcsIDApOwo+ICsJCWlmIChlcnIpCj4gKwkJCXJldHVybiBlcnI7Cj4gKwo+ICsJCXJl dHVybiB0YzM1ODc0Nl9zZXRfYml0cyh0YzM1ODc0NiwgQ09ORkNUTF9SRUcsIFBQRU4pOwo+ICsJ fQo+ICsKPiArCWVyciA9IHRjMzU4NzQ2X3NldF9iaXRzKHRjMzU4NzQ2LCBQUF9NSVNDX1JFRywg RlJNU1RPUCk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJZXJyID0gdGMz NTg3NDZfY2xlYXJfYml0cyh0YzM1ODc0NiwgQ09ORkNUTF9SRUcsIFBQRU4pOwo+ICsJaWYgKGVy cikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCXJldHVybiB0YzM1ODc0Nl9zZXRfYml0cyh0YzM1 ODc0NiwgUFBfTUlTQ19SRUcsIFJTVFBUUik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IHY0bDJfc3ViZGV2ICp0YzM1ODc0Nl9nZXRfcmVtb3RlX3NkKHN0cnVjdCBtZWRpYV9wYWQg KnBhZCkKPiArewo+ICsJcGFkID0gbWVkaWFfcGFkX3JlbW90ZV9wYWRfZmlyc3QocGFkKTsKPiAr CWlmICghcGFkKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCXJldHVybiBtZWRpYV9lbnRpdHlf dG9fdjRsMl9zdWJkZXYocGFkLT5lbnRpdHkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRjMzU4 NzQ2X3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCj4gK3sKPiAr CXN0cnVjdCB0YzM1ODc0NiAqdGMzNTg3NDYgPSB0b190YzM1ODc0NihzZCk7Cj4gKwlzdHJ1Y3Qg djRsMl9zdWJkZXYgKnNyYzsKPiArCWludCBlcnI7Cj4gKwo+ICsJZGV2X2RiZyhzZC0+ZGV2LCAi JXNhYmxlXG4iLCBlbmFibGUgPyAiZW4iIDogImRpcyIpOwo+ICsKPiArCXNyYyA9IHRjMzU4NzQ2 X2dldF9yZW1vdGVfc2QoJnRjMzU4NzQ2LT5wYWRzW1RDMzU4NzQ2X1NJTktdKTsKPiArCWlmICgh c3JjKQo+ICsJCXJldHVybiAtRVBJUEU7Cj4gKwo+ICsJaWYgKGVuYWJsZSkgewo+ICsJCWVyciA9 IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoc2QtPmRldik7Cj4gKwkJaWYgKGVycikKPiArCQkJ cmV0dXJuIGVycjsKPiArCj4gKwkJZXJyID0gdGMzNTg3NDZfYXBwbHlfZHBoeV9jb25maWcodGMz NTg3NDYpOwo+ICsJCWlmIChlcnIpCj4gKwkJCWdvdG8gZXJyX291dDsKPiArCj4gKwkJZXJyID0g dGMzNTg3NDZfYXBwbHlfbWlzY19jb25maWcodGMzNTg3NDYpOwo+ICsJCWlmIChlcnIpCj4gKwkJ CWdvdG8gZXJyX291dDsKPiArCj4gKwkJZXJyID0gdGMzNTg3NDZfZW5hYmxlX2NzaV9sYW5lcyh0 YzM1ODc0NiwgMSk7Cj4gKwkJaWYgKGVycikKPiArCQkJZ290byBlcnJfb3V0Owo+ICsKPiArCQll cnIgPSB0YzM1ODc0Nl9lbmFibGVfY3NpX21vZHVsZSh0YzM1ODc0NiwgMSk7Cj4gKwkJaWYgKGVy cikKPiArCQkJZ290byBlcnJfb3V0Owo+ICsKPiArCQllcnIgPSB0YzM1ODc0Nl9lbmFibGVfcGFy YWxsZWxfcG9ydCh0YzM1ODc0NiwgMSk7Cj4gKwkJaWYgKGVycikKPiArCQkJZ290byBlcnJfb3V0 Owo+ICsKPiArCQllcnIgPSB2NGwyX3N1YmRldl9jYWxsKHNyYywgdmlkZW8sIHNfc3RyZWFtLCAx KTsKPiArCQlpZiAoZXJyKQo+ICsJCQlnb3RvIGVycl9vdXQ7Cj4gKwo+ICsJCXJldHVybiBlcnI7 Cj4gKwo+ICtlcnJfb3V0Ogo+ICsJCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koc2QtPmRldik7 Cj4gKwkJcG1fcnVudGltZV9wdXRfc3luY19hdXRvc3VzcGVuZChzZC0+ZGV2KTsKPiArCj4gKwkJ cmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwkvKgo+ICsJICogTGFuZSBkaXNhYmxlIHRyaWdnZXIg c3RhdGUgY2hhbmdlIGZyb20gTFAtMTEgdG8gTFAtMDAKPiArCSAqIHRoZXJlZm9yZSBpdCBtdXN0 IGhhcHBlbiBiZWZvcmUgdGhlIENTSSBtb2RpbGUgaXMgZGlzYWJsZWQuCj4gKwkgKi8KPiArCWVy ciA9IHRjMzU4NzQ2X2VuYWJsZV9jc2lfbGFuZXModGMzNTg3NDYsIDApOwo+ICsJaWYgKGVycikK PiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWVyciA9IHRjMzU4NzQ2X2VuYWJsZV9jc2lfbW9kdWxl KHRjMzU4NzQ2LCAwKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwllcnIg PSB0YzM1ODc0Nl9lbmFibGVfcGFyYWxsZWxfcG9ydCh0YzM1ODc0NiwgMCk7Cj4gKwlpZiAoZXJy KQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShzZC0+ ZGV2KTsKPiArCXBtX3J1bnRpbWVfcHV0X3N5bmNfYXV0b3N1c3BlbmQoc2QtPmRldik7Cj4gKwo+ ICsJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc3JjLCB2aWRlbywgc19zdHJlYW0sIDApOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IHRjMzU4NzQ2X2luaXRfY2ZnKHN0cnVjdCB2NGwyX3N1YmRldiAq c2QsCj4gKwkJCSAgICAgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlICpzdGF0ZSkKPiArewo+ICsJ c3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm10Owo+ICsKPiArCWZtdCA9IHY0bDJfc3ViZGV2 X2dldF9wYWRfZm9ybWF0KHNkLCBzdGF0ZSwgVEMzNTg3NDZfU0lOSyk7Cj4gKwkqZm10ID0gdGMz NTg3NDZfZGVmX2ZtdDsKPiArCj4gKwlmbXQgPSB2NGwyX3N1YmRldl9nZXRfcGFkX2Zvcm1hdChz ZCwgc3RhdGUsIFRDMzU4NzQ2X1NPVVJDRSk7Cj4gKwkqZm10ID0gdGMzNTg3NDZfZGVmX2ZtdDsK PiArCWZtdC0+Y29kZSA9IHRjMzU4NzQ2X3NyY19tYnVzX2NvZGUodGMzNTg3NDZfZGVmX2ZtdC5j b2RlKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9l bnVtX21idXNfY29kZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAo+ICsJCQkJICAgc3RydWN0IHY0 bDJfc3ViZGV2X3N0YXRlICpzZF9zdGF0ZSwKPiArCQkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9t YnVzX2NvZGVfZW51bSAqY29kZSkKPiArewo+ICsJY29uc3Qgc3RydWN0IHRjMzU4NzQ2X2Zvcm1h dCAqZm10Owo+ICsKPiArCWZtdCA9IHRjMzU4NzQ2X2dldF9mb3JtYXRfYnlfaWR4KGNvZGUtPnBh ZCwgY29kZS0+aW5kZXgpOwo+ICsJaWYgKElTX0VSUihmbXQpKQo+ICsJCXJldHVybiBQVFJfRVJS KGZtdCk7Cj4gKwo+ICsJY29kZS0+Y29kZSA9IGZtdC0+Y29kZTsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9zZXRfZm10KHN0cnVjdCB2NGwyX3N1YmRl diAqc2QsCj4gKwkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnNkX3N0YXRlLAo+ICsJ CQkgICAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm9ybWF0KQo+ICt7Cj4gKwlzdHJ1Y3Qg djRsMl9tYnVzX2ZyYW1lZm10ICpzcmNfZm10LCAqc2lua19mbXQ7Cj4gKwljb25zdCBzdHJ1Y3Qg dGMzNTg3NDZfZm9ybWF0ICpmbXQ7Cj4gKwo+ICsJLyogU291cmNlIGZvbGxvd3MgdGhlIHNpbmsg Ki8KPiArCWlmIChmb3JtYXQtPnBhZCA9PSBUQzM1ODc0Nl9TT1VSQ0UpCj4gKwkJcmV0dXJuIDA7 CgpZb3UgbmVlZCB0byBnZXQgdGhlIHNvdXJjZSBwYWQgZm9ybWF0IGhlcmUgYW5kIGNvcHkgaXQg dG8gZm9ybWF0LApvdGhlcndpc2UgdXNlcnNwYWNlIHdpbGwgdGhpbmsgd2hhdGV2ZXIgZm9ybWF0 IGl0IGhhcyBwYXNzZWQgaGFzIGJlZW4KYWNjZXB0ZWQuCgo+ICsKPiArCXNpbmtfZm10ID0gdjRs Ml9zdWJkZXZfZ2V0X3BhZF9mb3JtYXQoc2QsIHNkX3N0YXRlLCBUQzM1ODc0Nl9TSU5LKTsKPiAr Cj4gKwlmbXQgPSB0YzM1ODc0Nl9nZXRfZm9ybWF0X2J5X2NvZGUoZm9ybWF0LT5wYWQsIGZvcm1h dC0+Zm9ybWF0LmNvZGUpOwo+ICsJaWYgKElTX0VSUihmbXQpKQo+ICsJCWZtdCA9IHRjMzU4NzQ2 X2dldF9mb3JtYXRfYnlfY29kZShmb3JtYXQtPnBhZCwgdGMzNTg3NDZfZGVmX2ZtdC5jb2RlKTsK PiArCj4gKwlmb3JtYXQtPmZvcm1hdC5jb2RlID0gZm10LT5jb2RlOwo+ICsJZm9ybWF0LT5mb3Jt YXQuZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Cj4gKwoKSXMgdGhlcmUgbm8gY29uc3RyYWludCBh dCBhbGwgb24gdGhlIHdpZHRoIGFuZCBoZWlnaHQgPyBJIHdvdWxkIGV4cGVjdAp6ZXJvIHdpZHRo IG9yIGhlaWdodCB0byBiZSBpbnZhbGlkIGZvciBpbnN0YW5jZSwgYW5kIHRoZSB3aWR0aCB0byBi ZQpyZXF1aXJlZCB0byBiZSBhIG11bHRpcGxlIG9mIDIgZm9yIFlVViA0OjI6MiBmb3JtYXRzLgoK PiArCWRldl9kYmcoc2QtPmRldiwgIlVwZGF0ZSBmb3JtYXQ6ICV1eCV1IGNvZGU6MHgleCAtPiAl dXgldSBjb2RlOjB4JXgiLAo+ICsJCXNpbmtfZm10LT53aWR0aCwgc2lua19mbXQtPmhlaWdodCwg c2lua19mbXQtPmNvZGUsCj4gKwkJZm9ybWF0LT5mb3JtYXQud2lkdGgsIGZvcm1hdC0+Zm9ybWF0 LmhlaWdodCwgZm9ybWF0LT5mb3JtYXQuY29kZSk7Cj4gKwo+ICsJKnNpbmtfZm10ID0gZm9ybWF0 LT5mb3JtYXQ7Cj4gKwo+ICsJc3JjX2ZtdCA9IHY0bDJfc3ViZGV2X2dldF9wYWRfZm9ybWF0KHNk LCBzZF9zdGF0ZSwgVEMzNTg3NDZfU09VUkNFKTsKPiArCSpzcmNfZm10ID0gKnNpbmtfZm10Owo+ ICsJc3JjX2ZtdC0+Y29kZSA9IHRjMzU4NzQ2X3NyY19tYnVzX2NvZGUoc2lua19mbXQtPmNvZGUp Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyB0YzM1 ODc0Nl9maW5kX3BsbF9zZXR0aW5ncyhzdHJ1Y3QgdGMzNTg3NDYgKnRjMzU4NzQ2LAo+ICsJCQkJ CQl1bnNpZ25lZCBsb25nIHJlZmNsaywKPiArCQkJCQkJdW5zaWduZWQgbG9uZyBmb3V0KQo+ICsK PiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gdGMzNTg3NDYtPnNkLmRldjsKPiArCXVuc2ln bmVkIGxvbmcgYmVzdF9mcmVxID0gMDsKPiArCXUzMiBtaW5fZGVsdGEgPSAweGZmZmZmZmZmOwo+ ICsJdTE2IHByZWRpdl9tYXggPSAxNzsKPiArCXUxNiBwcmVkaXZfbWluID0gMTsKPiArCXUxNiBt X2Jlc3QsIG11bDsKPiArCXUxNiBwX2Jlc3QsIHA7Cj4gKwl1OCBwb3N0ZGl2Owo+ICsKPiArCWlm IChmb3V0ID4gMTAwMCAqIE1IWikgewo+ICsJCWRldl9lcnIoZGV2LCAiSFMtQ2xvY2sgYWJvdmUg MSBHaHogYXJlIG5vdCBzdXBwb3J0ZWRcbiIpOwo+ICsJCXJldHVybiAwOwo+ICsJfSBlbHNlIGlm IChmb3V0ID49IDUwMCAqIE1IWikKCklmIG9uZSBicmFuY2ggb2YgYW4gaWYgdXNlcyBjdXJseSBi cmFjZXMsIGFsbCBzaG91bGQuIFlvdSBjYW4gd29yawphcm91bmQgdGhpcyBieSB0dXJuaW5nIHRo aXMgZWxzZSBpZiBpbnRvIGFuIGlmLgoKPiArCQlwb3N0ZGl2ID0gMTsKPiArCWVsc2UgaWYgKGZv dXQgPj0gMjUwICogTUhaKQo+ICsJCXBvc3RkaXYgPSAyOwo+ICsJZWxzZSBpZiAoZm91dCA+PSAx MjUgKiBNSFopCj4gKwkJcG9zdGRpdiA9IDQ7Cj4gKwllbHNlCj4gKwkJcG9zdGRpdiA9IDg7Cj4g Kwo+ICsJZm9yIChwID0gcHJlZGl2X21pbjsgcCA8PSBwcmVkaXZfbWF4OyBwKyspIHsKPiArCQl1 bnNpZ25lZCBsb25nIGRlbHRhLCBmaW47Cj4gKwkJdTY0IHRtcDsKPiArCj4gKwkJZmluID0gRElW X1JPVU5EX0NMT1NFU1QocmVmY2xrLCBwKTsKPiArCQlpZiAoZmluIDwgNCAqIE1IWiB8fCBmaW4g PiA0MCAqIE1IWikKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXRtcCA9IGZvdXQgKiBwICogcG9z dGRpdjsKPiArCQlkb19kaXYodG1wLCBmaW4pOwo+ICsJCW11bCA9IHRtcDsKPiArCQlpZiAobXVs ID4gNTExKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJdG1wID0gbXVsICogZmluOwo+ICsJCWRv X2Rpdih0bXAsIHAgKiBwb3N0ZGl2KTsKPiArCj4gKwkJZGVsdGEgPSBhYnMoZm91dCAtIHRtcCk7 Cj4gKwkJaWYgKGRlbHRhIDwgbWluX2RlbHRhKSB7Cj4gKwkJCXBfYmVzdCA9IHA7Cj4gKwkJCW1f YmVzdCA9IG11bDsKPiArCQkJbWluX2RlbHRhID0gZGVsdGE7Cj4gKwkJCWJlc3RfZnJlcSA9IHRt cDsKPiArCQl9Owo+ICsKPiArCQlpZiAoZGVsdGEgPT0gMCkKPiArCQkJYnJlYWs7Cj4gKwl9Owo+ ICsKPiArCWlmICghYmVzdF9mcmVxKSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgZmluZCBQ TEwgZnJlcXVlbmN5XG4iKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwl0YzM1ODc0Ni0+ cGxsX3Bvc3RfZGl2ID0gcG9zdGRpdjsKPiArCXRjMzU4NzQ2LT5wbGxfcHJlX2RpdiA9IHBfYmVz dDsKPiArCXRjMzU4NzQ2LT5wbGxfbXVsID0gbV9iZXN0Owo+ICsKPiArCWlmIChiZXN0X2ZyZXEg IT0gZm91dCkKPiArCQlkZXZfd2FybihkZXYsICJSZXF1ZXN0IFBMTCBmcmVxOiVsdSwgZm91bmQg UExMIGZyZXE6JWx1XG4iLAo+ICsJCQkgZm91dCwgYmVzdF9mcmVxKTsKPiArCj4gKwlkZXZfZGJn KGRldiwgIkZvdW5kIFBMTCBzZXR0aW5nczogZnJlcTolbHUgcHJlZGl2OiV1IG11bHRpOiV1IHBv c3RkaXY6JXVcbiIsCj4gKwkJYmVzdF9mcmVxLCBwX2Jlc3QsIG1fYmVzdCwgcG9zdGRpdik7Cj4g Kwo+ICsJcmV0dXJuIGJlc3RfZnJlcTsKPiArfQo+ICsKPiArI2RlZmluZSBUQzM1ODc0Nl9QUkVD SVNJT04gMTAKPiArCj4gK3N0YXRpYyBpbnQKPiArdGMzNTg3NDZfbGlua192YWxpZGF0ZShzdHJ1 Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgbWVkaWFfbGluayAqbGluaywKPiArCQkgICAgICAg c3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqc291cmNlX2ZtdCwKPiArCQkgICAgICAgc3RydWN0 IHY0bDJfc3ViZGV2X2Zvcm1hdCAqc2lua19mbXQpCj4gK3sKPiArCXN0cnVjdCB0YzM1ODc0NiAq dGMzNTg3NDYgPSB0b190YzM1ODc0NihzZCk7Cj4gKwl1bnNpZ25lZCBsb25nIGNzaV9iaXRyYXRl LCBzZW5zb3JfYml0cmF0ZTsKPiArCXN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZSAqc2lua19zdGF0 ZTsKPiArCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1idXNmbXQ7Cj4gKwljb25zdCBzdHJ1 Y3QgdGMzNTg3NDZfZm9ybWF0ICpmbXQ7Cj4gKwl1bnNpZ25lZCBpbnQgZmlmb19zeiwgdG1wLCBu Owo+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzZW5zb3I7Cj4gKwlzNjQgc2Vuc29yX3BjbGtfcmF0 ZTsKPiArCWludCBlcnI7Cj4gKwo+ICsJZXJyID0gdjRsMl9zdWJkZXZfbGlua192YWxpZGF0ZV9k ZWZhdWx0KHNkLCBsaW5rLCBzb3VyY2VfZm10LCBzaW5rX2ZtdCk7Cj4gKwlpZiAoZXJyKQo+ICsJ CXJldHVybiBlcnI7Cj4gKwo+ICsJc2lua19zdGF0ZSA9IHY0bDJfc3ViZGV2X2xvY2tfYW5kX2dl dF9hY3RpdmVfc3RhdGUoc2QpOwoKVGhpcyBtYWtlcyBtZSB0aGlua2cgd2Ugc2hvdWxkIHBhc3Mg dGhlIHN0YXRlIHRvIHRoaXMgZnVuY3Rpb24uIE5vdApzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBi ZSBhZGRyZXNzZWQgaW4gdGhpcyBwYXRjaCBvZiBjb3Vyc2UuCgo+ICsJbWJ1c2ZtdCA9IHY0bDJf c3ViZGV2X2dldF9wYWRfZm9ybWF0KHNkLCBzaW5rX3N0YXRlLCBUQzM1ODc0Nl9TSU5LKTsKPiAr CXY0bDJfc3ViZGV2X3VubG9ja19zdGF0ZShzaW5rX3N0YXRlKTsKCkknZCByZWxlYXNlIHRoZSBs b2NrIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLCB0byBtYWtlIHN1cmUgdGhlIGZvcm1hdAp3 b24ndCBjaGFuZ2UgZHVyaW5nIHZhbGlkYXRpb24uIFRoaXMgaXMgYWxzbyBhIHJhY2UgY29uZGl0 aW9uIGluIHRoZQpzdWJkZXYgY29yZSBhbmQgc2hvdWxkIGJlIGZpeGVkIHRoZXJlLCBJJ2QgYmUg ZmluZSBpZiB5b3UgaWdub3JlZCBpdApoZXJlIGZvciBub3cuCgo+ICsKPiArCS8qIENoZWNrIHRo ZSBGSUZPIHNldHRpbmdzICovCj4gKwlmbXQgPSB0YzM1ODc0Nl9nZXRfZm9ybWF0X2J5X2NvZGUo VEMzNTg3NDZfU0lOSywgbWJ1c2ZtdC0+Y29kZSk7Cj4gKwlpZiAoSVNfRVJSKGZtdCkpCj4gKwkJ cmV0dXJuIFBUUl9FUlIoZm10KTsKCkNhbiB0aGlzIGhhcHBlbiBpZiB0aGUgZm9ybWF0IGhhcyBi ZWVuIHZhbGlkYXRlIGF0IHNldF9mbXQgdGltZSA/Cgo+ICsKPiArCXNlbnNvciA9IG1lZGlhX2Vu dGl0eV90b192NGwyX3N1YmRldihsaW5rLT5zb3VyY2UtPmVudGl0eSk7Cj4gKwlzZW5zb3JfcGNs a19yYXRlID0gdjRsMl9nZXRfbGlua19mcmVxKHNlbnNvci0+Y3RybF9oYW5kbGVyLCAwLCAwKTsK ClNob3VsZG4ndCB5b3Ugc2V0IHRoZSBsYXN0IHR3byBhcmd1bWVudHMgdG8gbm9uLXplcm8gdmFs dWVzLCB0byBzdXBwb3J0CnNvdXJjZXMgdGhhdCBvbmx5IGltcGxlbWVudCB0aGUgVjRMMl9DSURf UElYRUxfUkFURSBjb250cm9sID8KCkknZCBhbHNvIG5hbWUgdGhlIHZhcmlhYmxlIHNvdXJjZV9s aW5rX2ZyZXEsIGFzIGl0IG1heSBub3QgYmUgYSBzZW5zb3IsCmFuZCBpdCdzIGEgbGluayBmcmVx dWVuY3ksIG5vdCBhIHBpeGVsIGNsb2NrIHJhdGUuCgo+ICsJaWYgKHNlbnNvcl9wY2xrX3JhdGUg PD0gMCkgewo+ICsJCWRldl9lcnIodGMzNTg3NDYtPnNkLmRldiwKPiArCQkJIkZhaWxlZCB0byBx dWVyeSBvciBpbnZhbGlkIHNlbnNvciBsaW5rIGZyZXF1ZW5jeVxuIik7Cj4gKwkJLyogUmV0dXJu IC1FSU5WQUwgaW4gY2FzZSBvZiBzZW5zb3JfcGNsa19yYXRlIGlzIDAgKi8KPiArCQlyZXR1cm4g c2Vuc29yX3BjbGtfcmF0ZSA/IDogLUVJTlZBTDsKPiArCX0KPiArCXNlbnNvcl9iaXRyYXRlID0g c2Vuc29yX3BjbGtfcmF0ZSAqIGZtdC0+YnVzX3dpZHRoOwo+ICsKPiArCWNzaV9iaXRyYXRlID0g dGMzNTg3NDYtPmRwaHlfY2ZnLmxhbmVzICogdGMzNTg3NDYtPnBsbF9yYXRlOwo+ICsKPiArCWRl dl9kYmcodGMzNTg3NDYtPnNkLmRldiwKPiArCQkiRmlmbyBzZXR0aW5ncyBwYXJhbXM6IHNlbnNv ci1iaXRyYXRlOiVsdSBjc2ktYml0cmF0ZTolbHUiLAo+ICsJCXNlbnNvcl9iaXRyYXRlLCBjc2lf Yml0cmF0ZSk7Cj4gKwo+ICsJLyogQXZvaWQgcG9zc2libGUgRklGTyBvdmVyZmxvd3MgKi8KPiAr CWlmIChjc2lfYml0cmF0ZSA8IHNlbnNvcl9iaXRyYXRlKSB7Cj4gKwkJZGV2X2VycihzZC0+ZGV2 LAo+ICsJCQkiTGluayB2YWxpZGF0aW9uIGZhaWxlZCBjc2ktYml0cmF0ZTolbHUgPCBzZW5zb3It Yml0cmF0ZTolbHVcbiIsCj4gKwkJCWNzaV9iaXRyYXRlLCBzZW5zb3JfYml0cmF0ZSk7CgpBcyB0 aGlzIGNhbiBiZSB0cmlnZ2VyZWQgYnkgdXNlcnNwYWNlLCBJJ2QgbWFrZSBpdCBhIGRldl9kYmco KS4KCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJLyogQmVzdCBjYXNlICovCj4g KwlpZiAoY3NpX2JpdHJhdGUgPT0gc2Vuc29yX2JpdHJhdGUpIHsKPiArCQl0YzM1ODc0Ni0+dmJf c2l6ZSA9IFRDMzU4NzQ2X1ZCX0RFRkFVTFRfU0laRTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiAr Cj4gKwkvKgo+ICsJICogQXZvaWQgcG9zc2libGUgRklGTyB1bmRlcmZsb3cgaW4gY2FzZSBvZgo+ ICsJICogY3NpX2JpdHJhdGUgPiBzZW5zb3JfYml0cmF0ZS4gRm9yIHN1Y2ggY2FzZSB0aGUgY2hp cCBoYXMgYSBpbnRlcm5hbAo+ICsJICogZmlmbyB3aGljaCBjYW4gYmUgdXNlZCB0byBkZWxheSB0 aGUgbGluZSBvdXRwdXQuCj4gKwkgKgo+ICsJICogRmlmbyBzaXplIGNhbGN1bGF0aW9uOgo+ICsJ ICoKPiArCSAqIGZpZm8tc3osIGltYWdlLXdpZHRoIC0gaW4gYml0cwo+ICsJICogc2JyICAgICAg ICAgICAgICAgICAgLSBzZW5zb3JfYml0cmF0ZSBpbiBiaXRzL3MKPiArCSAqIGNzaXIgICAgICAg ICAgICAgICAgIC0gY3NpX2JpdHJhdGUgaW4gYml0cy9zCj4gKwkgKgo+ICsJICogICAgICAgICAg ICAgICAgMSAgICAgICAgICAgICAxICAgICAgMQo+ICsJICogaW1hZ2Utd2lkdGggKiAtLS0gKyBm aWZvLXN6IC0tLSA+PSAtLS0tICogaW1hZ2Utd2lkdGgKPiArCSAqICAgICAgICAgICAgICAgc2Jy ICAgICAgICAgICBzYnIgICAgY3NpcgoKR2l2ZW4gdGhhdCBjc2lyID4gc2JyLCAxL2NzaXIgPCAx IHNiciwgc28gdGhpcyB3aWxsIGFsd2F5cyBiZSB0cnVlLApldmVuIHdpdGggZmlmby1zeiBzZXQg dG8gMC4gQW0gSSBtaXNzaW5nIHNvbWV0aGluZyA/Cgo+ICsJICoKPiArCSAqIGZpZm8tc3ogPj0g YWJzKHNici9jc2lyICogaW1hZ2Utd2lkdGggLSBpbWFnZS13aWR0aCkKPiArCSAqICAgICAgICAg ICAgICAgIGAtLS0tLcK0Cj4gKwkgKiAgICAgICAgICAgICAgICAgICBuCgpUaGUgbiB2YXJpYWJs ZSBkb2Vzbid0IHN0b3JlIHNici9jc2lyIGJ1dCBjc2lyL3NiciAobXVsdGlwbGllZCBieSBhCnBy ZWNpc2lvbiBmYWN0b3IpLiBBbmQgZG8gSSB1bmRlcnN0YW5kIGNvcnJlY3RseSB0aGF0LCBhcyBz YnIgPCBjc2lyLAp0aGlzIHdvdWxkIGJlIGVxdWFsIHRvIHRoZSBmb2xsb3dpbmcgPwoKCSAqIGZp Zm8tc3ogPj0gaW1hZ2Utd2lkdGggLSBzYnIvY3NpciAqIGltYWdlLXdpZHRoCgo+ICsJICoKPiAr CSAqLwo+ICsKPiArCXNlbnNvcl9iaXRyYXRlIC89IFRDMzU4NzQ2X1BSRUNJU0lPTjsKPiArCW4g PSBjc2lfYml0cmF0ZSAvIHNlbnNvcl9iaXRyYXRlOwo+ICsJdG1wID0gKG1idXNmbXQtPndpZHRo ICogVEMzNTg3NDZfUFJFQ0lTSU9OKSAvIG47Cj4gKwlmaWZvX3N6ID0gbWJ1c2ZtdC0+d2lkdGgg LSB0bXA7Cj4gKwlmaWZvX3N6ICo9IGZtdC0+YnBwOwo+ICsJdGMzNTg3NDYtPnZiX3NpemUgPSBy b3VuZF91cChmaWZvX3N6LCAzMik7Cj4gKwo+ICtvdXQ6Cj4gKwlkZXZfZGJnKHRjMzU4NzQ2LT5z ZC5kZXYsCj4gKwkJIkZvdW5kIEZJRk8gc2l6ZVtiaXRzXToldSAtPiBhbGlnbmVkIHRvIHNpemVb Yml0c106JXVcbiIsCj4gKwkJZmlmb19zeiwgdGMzNTg3NDYtPnZiX3NpemUpOwo+ICsKPiArCXJl dHVybiB0YzM1ODc0Ni0+dmJfc2l6ZSA+IFRDMzU4NzQ2X1ZCX01BWF9TSVpFID8gLUVJTlZBTCA6 IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdGMzNTg3NDZfZ2V0X21idXNfY29uZmlnKHN0cnVj dCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGludCBwYWQsCj4gKwkJCQkgICAgc3RydWN0IHY0 bDJfbWJ1c19jb25maWcgKmNvbmZpZykKPiArewo+ICsJc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0 NiA9IHRvX3RjMzU4NzQ2KHNkKTsKPiArCj4gKwlpZiAocGFkICE9IFRDMzU4NzQ2X1NPVVJDRSkK PiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwljb25maWctPnR5cGUgPSBWNEwyX01CVVNfQ1NJ Ml9EUEhZOwo+ICsJY29uZmlnLT5idXMubWlwaV9jc2kyID0gdGMzNTg3NDYtPmNzaV92ZXAuYnVz Lm1pcGlfY3NpMjsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IF9fbWF5YmVfdW51 c2VkCgpBcyByZXBvcnRlZCBieSB0aGUgYnVpbGRib3QsIHRoaXMgc2hvdWxkIGJlIHN0YXRpYy4g U2FtZSBmb3Igc19yZWdpc3Rlci4KCj4gK3RjMzU4NzQ2X2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJf c3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCj4gK3sKPiArCXN0cnVj dCB0YzM1ODc0NiAqdGMzNTg3NDYgPSB0b190YzM1ODc0NihzZCk7Cj4gKwo+ICsJLyogMzItYml0 IHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIENMV19EUEhZQ09OVFRYICovCj4gKwlyZWctPnNpemUg PSByZWctPnJlZyA8IENMV19EUEhZQ09OVFRYX1JFRyA/IDIgOiA0Owo+ICsKPiArCWlmIChwbV9y dW50aW1lX3Jlc3VtZV9hbmRfZ2V0KHNkLT5kZXYpKSB7Cj4gKwkJZGV2X2VycihzZC0+ZGV2LCAi RmFpbGVkIHRvIHJlc3VtZSB0aGUgZGV2aWNlXG4iKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KCklz IHRoZXJlIGEgcG9pbnQgaW4gcG93ZXJpbmcgdGhlIGhhcmR3YXJlIG9uIGhlcmUgaWYgaXQncyBv ZmYsIGluIG9yZGVyCnRvIHJlYWQgYSByZWdpc3RlciB0aGF0IHdpbGwgaGF2ZSBiZWVuIHJlc2V0 IGR1ZSB0byB0aGUgcG93ZXIgY3ljbGUgPwpwbV9ydW50aW1lX2dldF9pZl9pbl91c2UoKSBzZWVt cyBiZXR0ZXIuIFNhbWUgaW4gLnNfcmVnaXN0ZXIoKS4KCj4gKwo+ICsJdGMzNTg3NDZfcmVhZCh0 YzM1ODc0NiwgcmVnLT5yZWcsICh1MzIgKikmcmVnLT52YWwpOwo+ICsKPiArCXBtX3J1bnRpbWVf bWFya19sYXN0X2J1c3koc2QtPmRldik7Cj4gKwlwbV9ydW50aW1lX3B1dF9zeW5jX2F1dG9zdXNw ZW5kKHNkLT5kZXYpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgX19tYXliZV91 bnVzZWQKPiArdGMzNTg3NDZfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25z dCBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKPiArewo+ICsJc3RydWN0IHRjMzU4NzQ2 ICp0YzM1ODc0NiA9IHRvX3RjMzU4NzQ2KHNkKTsKPiArCj4gKwlpZiAocG1fcnVudGltZV9yZXN1 bWVfYW5kX2dldChzZC0+ZGV2KSkgewo+ICsJCWRldl9lcnIoc2QtPmRldiwgIkZhaWxlZCB0byBy ZXN1bWUgdGhlIGRldmljZVxuIik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJdGMzNTg3 NDZfd3JpdGUodGMzNTg3NDYsICh1MzIpcmVnLT5yZWcsICh1MzIpcmVnLT52YWwpOwo+ICsKPiAr CXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koc2QtPmRldik7Cj4gKwlwbV9ydW50aW1lX3B1dF9z eW5jX2F1dG9zdXNwZW5kKHNkLT5kZXYpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHRjMzU4NzQ2X2NvcmVfb3Bz ID0gewo+ICsjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwo+ICsJLmdfcmVnaXN0ZXIgPSB0 YzM1ODc0Nl9nX3JlZ2lzdGVyLAo+ICsJLnNfcmVnaXN0ZXIgPSB0YzM1ODc0Nl9zX3JlZ2lzdGVy LAo+ICsjZW5kaWYKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZf dmlkZW9fb3BzIHRjMzU4NzQ2X3ZpZGVvX29wcyA9IHsKPiArCS5zX3N0cmVhbSA9IHRjMzU4NzQ2 X3Nfc3RyZWFtLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9w YWRfb3BzIHRjMzU4NzQ2X3BhZF9vcHMgPSB7Cj4gKwkuaW5pdF9jZmcgPSB0YzM1ODc0Nl9pbml0 X2NmZywKPiArCS5lbnVtX21idXNfY29kZSA9IHRjMzU4NzQ2X2VudW1fbWJ1c19jb2RlLAo+ICsJ LnNldF9mbXQgPSB0YzM1ODc0Nl9zZXRfZm10LAo+ICsJLmdldF9mbXQgPSB2NGwyX3N1YmRldl9n ZXRfZm10LAo+ICsJLmxpbmtfdmFsaWRhdGUgPSB0YzM1ODc0Nl9saW5rX3ZhbGlkYXRlLAo+ICsJ LmdldF9tYnVzX2NvbmZpZyA9IHRjMzU4NzQ2X2dldF9tYnVzX2NvbmZpZywKPiArfTsKPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHRjMzU4NzQ2X29wcyA9IHsKPiAr CS5jb3JlID0gJnRjMzU4NzQ2X2NvcmVfb3BzLAo+ICsJLnZpZGVvID0gJnRjMzU4NzQ2X3ZpZGVv X29wcywKPiArCS5wYWQgPSAmdGMzNTg3NDZfcGFkX29wcywKPiArfTsKPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgbWVkaWFfZW50aXR5X29wZXJhdGlvbnMgdGMzNTg3NDZfZW50aXR5X29wcyA9 IHsKPiArCS5nZXRfZndub2RlX3BhZCA9IHY0bDJfc3ViZGV2X2dldF9md25vZGVfcGFkXzFfdG9f MSwKPiArCS5saW5rX3ZhbGlkYXRlID0gdjRsMl9zdWJkZXZfbGlua192YWxpZGF0ZSwKPiArfTsK PiArCj4gK3N0YXRpYyBpbnQgdGMzNTg3NDZfbWNsa19lbmFibGUoc3RydWN0IGNsa19odyAqaHcp Cj4gK3sKPiArCXN0cnVjdCB0YzM1ODc0NiAqdGMzNTg3NDYgPSBjbGtfaHdfdG9fdGMzNTg3NDYo aHcpOwo+ICsJdW5zaWduZWQgaW50IGRpdjsKPiArCXUzMiB2YWw7Cj4gKwlpbnQgZXJyOwo+ICsK PiArCWRpdiA9IHRjMzU4NzQ2LT5tY2xrX3Bvc3RkaXYgLyAyOwo+ICsJdmFsID0gTUNMS19ISUdI KGRpdiAtIDEpIHwgTUNMS19MT1coZGl2IC0gMSk7Cj4gKwlkZXZfZGJnKHRjMzU4NzQ2LT5zZC5k ZXYsICJNQ0xLQ1RMOiAldSAoMHgleClcbiIsIHZhbCwgdmFsKTsKPiArCWVyciA9IHRjMzU4NzQ2 X3dyaXRlKHRjMzU4NzQ2LCBNQ0xLQ1RMX1JFRywgdmFsKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0 dXJuIGVycjsKPiArCj4gKwlpZiAodGMzNTg3NDYtPm1jbGtfcHJlZGl2ID09IDgpCj4gKwkJdmFs ID0gTUNMS0RJVihNQ0xLRElWXzgpOwo+ICsJZWxzZSBpZiAodGMzNTg3NDYtPm1jbGtfcHJlZGl2 ID09IDQpCj4gKwkJdmFsID0gTUNMS0RJVihNQ0xLRElWXzQpOwo+ICsJZWxzZQo+ICsJCXZhbCA9 IE1DTEtESVYoTUNMS0RJVl8yKTsKPiArCj4gKwlkZXZfZGJnKHRjMzU4NzQ2LT5zZC5kZXYsICJD TEtDVExbTUNMS0RJVl06ICV1ICgweCV4KVxuIiwgdmFsLCB2YWwpOwo+ICsJcmV0dXJuIHRjMzU4 NzQ2X3VwZGF0ZV9iaXRzKHRjMzU4NzQ2LCBDTEtDVExfUkVHLCBNQ0xLRElWX01BU0ssIHZhbCk7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRjMzU4NzQ2X21jbGtfZGlzYWJsZShzdHJ1Y3QgY2xr X2h3ICpodykKPiArewo+ICsJc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0NiA9IGNsa19od190b190 YzM1ODc0Nihodyk7Cj4gKwo+ICsJdGMzNTg3NDZfd3JpdGUodGMzNTg3NDYsIE1DTEtDVExfUkVH LCAwKTsKPiArfQo+ICsKPiArc3RhdGljIGxvbmcKPiArdGMzNTg3NDZfZmluZF9tY2xrX3NldHRp bmdzKHN0cnVjdCB0YzM1ODc0NiAqdGMzNTg3NDYsIHVuc2lnbmVkIGxvbmcgbWNsa19yYXRlKQo+ ICt7Cj4gKwl1bnNpZ25lZCBsb25nIHBsbF9yYXRlID0gdGMzNTg3NDYtPnBsbF9yYXRlOwo+ICsJ Y29uc3QgdW5zaWduZWQgY2hhciBwcmVkaXZbXSA9IHsgMiwgNCwgOCB9Owo+ICsJdW5zaWduZWQg aW50IG1jbGtfcHJlZGl2LCBtY2xrX3Bvc3RkaXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0 YzM1ODc0Ni0+c2QuZGV2Owo+ICsJdW5zaWduZWQgaW50IHBvc3RkaXYsIG1jbGtkaXY7Cj4gKwl1 bnNpZ25lZCBsb25nIGJlc3RfbWNsa19yYXRlOwo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ICsJ LyoKPiArCSAqICAgICAgICAgICAgICAgICAgICAgICAgICBNQ0xLLURpdgo+ICsJICogICAgICAg ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS3CtGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArCSAqICAg ICAgICAgIMK0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYAo+ICsJ ICogICAgICAgICArLS0tLS0tLS0tLS0tLSsgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r Cj4gKwkgKiAgICAgICAgIHwgTUNMSy1QcmVEaXYgfCAgICAgfCAgICAgICBNQ0xLLVBvc3REaXYg ICAgIHwKPiArCSAqIFBMTCAtLT4gfCAgICgyLzQvOCkgICB8IC0tPiB8IChtY2xrX2xvdyArIG1j bGtfaGlnaCkgfCAtLT4gTUNMSwo+ICsJICogICAgICAgICArLS0tLS0tLS0tLS0tLSsgICAgICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gKwkgKgo+ICsJICogVGhlIHJlZ2lzdGVyIHZhbHVl IG9mIG1jbGtfbG93L2hpZ2ggaXMgbWNsa19sb3cvaGlnaCsxLCBpLmUuOgo+ICsJICogICBtY2xr X2xvdy9oaWdoID0gMSAgIC0tPiAyIE1DTEstUmVmIENvdW50cwo+ICsJICogICBtY2xrX2xvdy9o aWdoID0gMjU1IC0tPiAyNTYgTUNMSy1SZWYgQ291bnRzID09IG1heC4KPiArCSAqIElmIG1jbGtf bG93IGFuZCBtY2xrX2hpZ2ggYXJlIDAgdGhlbiBNQ0xLIGlzIGRpc2FibGVkLgo+ICsJICoKPiAr CSAqIEtlZXAgaXQgc2ltcGxlIGFuZCBzdXBwb3J0IDUwLzUwIGR1dHkgY3ljbGVzIG9ubHkgZm9y IG5vdywKPiArCSAqIHNvIHRoZSBjYWxjIHdpbGwgYmU6Cj4gKwkgKgo+ICsJICogICBNQ0xLID0g UExMIC8gKE1DTEstUHJlRGl2ICogMiAqIE1DTEstUG9zdERpdikKPiArCSAqLwo+ICsKPiArCWlm IChtY2xrX3JhdGUgPT0gdGMzNTg3NDYtPm1jbGtfcmF0ZSkKPiArCQlyZXR1cm4gbWNsa19yYXRl Owo+ICsKPiArCS8qIEhpZ2hlc3QgcG9zc2libGUgcmF0ZSAqLwo+ICsJbWNsa2RpdiA9IHBsbF9y YXRlIC8gbWNsa19yYXRlOwo+ICsJaWYgKG1jbGtkaXYgPD0gOCkgewo+ICsJCW1jbGtfcHJlZGl2 ID0gMjsKPiArCQltY2xrX3Bvc3RkaXYgPSA0Owo+ICsJCWJlc3RfbWNsa19yYXRlID0gcGxsX3Jh dGUgLyAoMiAqIDQpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCS8qIEZpcnN0IGNoZWNr IHRoZSBwcmVkaXYgKi8KPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWRpdik7IGkr Kykgewo+ICsJCXBvc3RkaXYgPSBtY2xrZGl2IC8gcHJlZGl2W2ldOwo+ICsKPiArCQlpZiAocG9z dGRpdiAlIDIpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlpZiAocG9zdGRpdiA+PSA0ICYmIHBv c3RkaXYgPD0gNTEyKSB7Cj4gKwkJCW1jbGtfcHJlZGl2ID0gcHJlZGl2W2ldOwo+ICsJCQltY2xr X3Bvc3RkaXYgPSBwb3N0ZGl2Owo+ICsJCQliZXN0X21jbGtfcmF0ZSA9IHBsbF9yYXRlIC8gKHBy ZWRpdltpXSAqIHBvc3RkaXYpOwo+ICsJCQlnb3RvIG91dDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJ LyogTm8gc3VpdGFibGUgcHJlZGl2IGZvdW5kLCBzbyB0cnkgdG8gYWRqdXN0IHRoZSBwb3N0ZGl2 ICovCj4gKwlmb3IgKHBvc3RkaXYgPSA0OyBwb3N0ZGl2IDw9IDUxMjsgcG9zdGRpdiArPSAyKSB7 Cj4gKwkJdW5zaWduZWQgaW50IHByZTsKPiArCj4gKwkJcHJlID0gbWNsa2RpdiAvIHBvc3RkaXY7 Cj4gKwkJaWYgKHByZSA9PSAyIHx8IHByZSA9PSA0IHx8IHByZSA9PSA4KSB7Cj4gKwkJCW1jbGtf cHJlZGl2ID0gcHJlOwo+ICsJCQltY2xrX3Bvc3RkaXYgPSBwb3N0ZGl2Owo+ICsJCQliZXN0X21j bGtfcmF0ZSA9IHBsbF9yYXRlIC8gKHByZSAqIHBvc3RkaXYpOwo+ICsJCQlnb3RvIG91dDsKPiAr CQl9Cj4gKwl9Cj4gKwo+ICsJLyogVGhlIE1DTEsgPC0+IFBMTCBnYXAgaXMgdG8gaGlnaCAtPiB1 c2UgbGFyZ2VzdCBwb3NzaWJsZSBkaXYgKi8KPiArCW1jbGtfcHJlZGl2ID0gODsKPiArCW1jbGtf cG9zdGRpdiA9IDUxMjsKPiArCWJlc3RfbWNsa19yYXRlID0gcGxsX3JhdGUgLyAoOCAqIDUxMik7 Cj4gKwo+ICtvdXQ6Cj4gKwl0YzM1ODc0Ni0+bWNsa19wcmVkaXYgPSBtY2xrX3ByZWRpdjsKPiAr CXRjMzU4NzQ2LT5tY2xrX3Bvc3RkaXYgPSBtY2xrX3Bvc3RkaXY7Cj4gKwl0YzM1ODc0Ni0+bWNs a19yYXRlID0gYmVzdF9tY2xrX3JhdGU7Cj4gKwo+ICsJaWYgKGJlc3RfbWNsa19yYXRlICE9IG1j bGtfcmF0ZSkKPiArCQlkZXZfd2FybihkZXYsICJSZXF1ZXN0IE1DTEsgZnJlcTolbHUsIGZvdW5k IE1DTEsgZnJlcTolbHVcbiIsCj4gKwkJCSBtY2xrX3JhdGUsIGJlc3RfbWNsa19yYXRlKTsKPiAr Cj4gKwlkZXZfZGJnKGRldiwgIkZvdW5kIE1DTEsgc2V0dGluZ3M6IGZyZXE6JWx1IHByZWRpdjol dSBwb3N0ZGl2OiV1XG4iLAo+ICsJCWJlc3RfbWNsa19yYXRlLCBtY2xrX3ByZWRpdiwgbWNsa19w b3N0ZGl2KTsKPiArCj4gKwlyZXR1cm4gYmVzdF9tY2xrX3JhdGU7Cj4gK30KPiArCj4gK3Vuc2ln bmVkIGxvbmcgdGMzNTg3NDZfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVk IGxvbmcgcGFyZW50X3JhdGUpCj4gK3sKPiArCXN0cnVjdCB0YzM1ODc0NiAqdGMzNTg3NDYgPSBj bGtfaHdfdG9fdGMzNTg3NDYoaHcpOwo+ICsJdW5zaWduZWQgaW50IHByZWRpdiwgcG9zdGRpdjsK PiArCXUzMiB2YWw7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWVyciA9IHRjMzU4NzQ2X3JlYWQodGMz NTg3NDYsIE1DTEtDVExfUkVHLCAmdmFsKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIDA7Cj4g Kwo+ICsJcG9zdGRpdiA9IEZJRUxEX0dFVChNQ0xLX0xPV19NQVNLLCB2YWwpICsgMTsKPiArCXBv c3RkaXYgKz0gRklFTERfR0VUKE1DTEtfSElHSF9NQVNLLCB2YWwpICsgMTsKPiArCj4gKwllcnIg PSB0YzM1ODc0Nl9yZWFkKHRjMzU4NzQ2LCBDTEtDVExfUkVHLCAmdmFsKTsKPiArCWlmIChlcnIp Cj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcHJlZGl2ID0gRklFTERfR0VUKE1DTEtESVZfTUFTSywg dmFsKTsKPiArCWlmIChwcmVkaXYgPT0gTUNMS0RJVl84KQo+ICsJCXByZWRpdiA9IDg7Cj4gKwll bHNlIGlmIChwcmVkaXYgPT0gTUNMS0RJVl80KQo+ICsJCXByZWRpdiA9IDQ7Cj4gKwllbHNlCj4g KwkJcHJlZGl2ID0gMjsKPiArCj4gKwlyZXR1cm4gdGMzNTg3NDYtPnBsbF9yYXRlIC8gKHByZWRp diAqIHBvc3RkaXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgbG9uZyB0YzM1ODc0Nl9tY2xrX3JvdW5k X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKPiArCQkJCSAgICAg dW5zaWduZWQgbG9uZyAqcGFyZW50X3JhdGUpCj4gK3sKPiArCXN0cnVjdCB0YzM1ODc0NiAqdGMz NTg3NDYgPSBjbGtfaHdfdG9fdGMzNTg3NDYoaHcpOwo+ICsKPiArCSpwYXJlbnRfcmF0ZSA9IHRj MzU4NzQ2LT5wbGxfcmF0ZTsKPiArCj4gKwlyZXR1cm4gdGMzNTg3NDZfZmluZF9tY2xrX3NldHRp bmdzKHRjMzU4NzQ2LCByYXRlKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9tY2xr X3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCj4gKwkJCQkg IHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCj4gK3sKPiArCXN0cnVjdCB0YzM1ODc0NiAqdGMz NTg3NDYgPSBjbGtfaHdfdG9fdGMzNTg3NDYoaHcpOwo+ICsKPiArCXRjMzU4NzQ2X2ZpbmRfbWNs a19zZXR0aW5ncyh0YzM1ODc0NiwgcmF0ZSk7Cj4gKwo+ICsJcmV0dXJuIHRjMzU4NzQ2X21jbGtf ZW5hYmxlKGh3KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHRjMzU4 NzQ2X21jbGtfb3BzID0gewo+ICsJLmVuYWJsZSA9IHRjMzU4NzQ2X21jbGtfZW5hYmxlLAo+ICsJ LmRpc2FibGUgPSB0YzM1ODc0Nl9tY2xrX2Rpc2FibGUsCj4gKwkucmVjYWxjX3JhdGUgPSB0YzM1 ODc0Nl9yZWNhbGNfcmF0ZSwKPiArCS5yb3VuZF9yYXRlID0gdGMzNTg3NDZfbWNsa19yb3VuZF9y YXRlLAo+ICsJLnNldF9yYXRlID0gdGMzNTg3NDZfbWNsa19zZXRfcmF0ZSwKPiArfTsKPiArCj4g K3N0YXRpYyBpbnQKPiArdGMzNTg3NDZfaW5pdF9zdWJkZXYoc3RydWN0IHRjMzU4NzQ2ICp0YzM1 ODc0Niwgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKPiArewo+ICsJc3RydWN0IHY0bDJfc3Vi ZGV2ICpzZDsKPiArCWludCBlcnI7Cj4gKwo+ICsJc2QgPSAmdGMzNTg3NDYtPnNkOwoKWW91IGNv dWxkIGluaXRpYWxpemUgdGhlIHZhcmlhYmxlIHdoZW4gZGVjbGFyaW5nIGl0LgoKPiArCXY0bDJf aTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZ0YzM1ODc0Nl9vcHMpOwo+ICsJc2QtPmZsYWdz IHw9IFY0TDJfU1VCREVWX0ZMX0hBU19ERVZOT0RFOwo+ICsJc2QtPmVudGl0eS5mdW5jdGlvbiA9 IE1FRElBX0VOVF9GX1ZJRF9JRl9CUklER0U7Cj4gKwlzZC0+ZW50aXR5Lm9wcyA9ICZ0YzM1ODc0 Nl9lbnRpdHlfb3BzOwo+ICsKPiArCXRjMzU4NzQ2LT5wYWRzW1RDMzU4NzQ2X1NJTktdLmZsYWdz ID0gTUVESUFfUEFEX0ZMX1NJTks7Cj4gKwl0YzM1ODc0Ni0+cGFkc1tUQzM1ODc0Nl9TT1VSQ0Vd LmZsYWdzID0gTUVESUFfUEFEX0ZMX1NPVVJDRTsKPiArCWVyciA9IG1lZGlhX2VudGl0eV9wYWRz X2luaXQoJnNkLT5lbnRpdHksIFRDMzU4NzQ2X05SX1BBRFMsCj4gKwkJCQkgICAgIHRjMzU4NzQ2 LT5wYWRzKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwllcnIgPSB2NGwy X3N1YmRldl9pbml0X2ZpbmFsaXplKHNkKTsKPiArCWlmIChlcnIpCj4gKwkJbWVkaWFfZW50aXR5 X2NsZWFudXAoJnNkLT5lbnRpdHkpOwo+ICsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQKPiArdGMzNTg3NDZfaW5pdF9vdXRwdXRfcG9ydChzdHJ1Y3QgdGMzNTg3NDYgKnRj MzU4NzQ2LCB1bnNpZ25lZCBsb25nIHJlZmNsaykKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gdGMzNTg3NDYtPnNkLmRldjsKPiArCXN0cnVjdCB2NGwyX2Z3bm9kZV9lbmRwb2ludCAqdmVw Owo+ICsJdW5zaWduZWQgbG9uZyBjc2lfbGlua19yYXRlOwo+ICsJc3RydWN0IGZ3bm9kZV9oYW5k bGUgKmVwOwo+ICsJdW5zaWduZWQgY2hhciBjc2lfbGFuZXM7Cj4gKwlpbnQgZXJyOwo+ICsKPiAr CWVwID0gZndub2RlX2dyYXBoX2dldF9lbmRwb2ludF9ieV9pZChkZXZfZndub2RlKGRldiksIFRD MzU4NzQ2X1NPVVJDRSwKPiArCQkJCQkgICAgIDAsIDApOwo+ICsJaWYgKCFlcCkgewo+ICsJCWRl dl9lcnIoZGV2LCAiTWlzc2luZyBlbmRwb2ludCBub2RlXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCX0KPiArCj4gKwkvKiBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0ICdwYXJhbGxlbCBp bicgLT4gJ2NzaSBvdXQnICovCj4gKwl2ZXAgPSAmdGMzNTg3NDYtPmNzaV92ZXA7Cj4gKwl2ZXAt PmJ1c190eXBlID0gVjRMMl9NQlVTX0NTSTJfRFBIWTsKPiArCWVyciA9IHY0bDJfZndub2RlX2Vu ZHBvaW50X2FsbG9jX3BhcnNlKGVwLCB2ZXApOwo+ICsJZndub2RlX2hhbmRsZV9wdXQoZXApOwo+ ICsJaWYgKGVycikgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHBhcnNlIHNvdXJjZSBl bmRwb2ludFxuIik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwljc2lfbGFuZXMgPSB2 ZXAtPmJ1cy5taXBpX2NzaTIubnVtX2RhdGFfbGFuZXM7Cj4gKwlpZiAoY3NpX2xhbmVzID09IDAg fHwgY3NpX2xhbmVzID4gNCB8fAo+ICsJICAgIHZlcC0+bnJfb2ZfbGlua19mcmVxdWVuY2llcyA9 PSAwKSB7Cj4gKwkJZGV2X2VycihkZXYsICJlcnJvcjogSW52YWxpZCBDU0ktMiBzZXR0aW5nc1xu Iik7Cj4gKwkJZXJyID0gLUVJTlZBTDsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwkvKiBU T0RPOiBBZGQgc3VwcG9ydCB0byBoYW5kbGUgbXVsdGlwbGUgbGluayBmcmVxdWVuY2llcyAqLwo+ ICsJY3NpX2xpbmtfcmF0ZSA9ICh1bnNpZ25lZCBsb25nKXZlcC0+bGlua19mcmVxdWVuY2llc1sw XTsKPiArCXRjMzU4NzQ2LT5wbGxfcmF0ZSA9IHRjMzU4NzQ2X2ZpbmRfcGxsX3NldHRpbmdzKHRj MzU4NzQ2LCByZWZjbGssCj4gKwkJCQkJCQljc2lfbGlua19yYXRlICogMik7Cj4gKwlpZiAoIXRj MzU4NzQ2LT5wbGxfcmF0ZSkgewo+ICsJCWVyciA9IC1FSU5WQUw7Cj4gKwkJZ290byBlcnI7Cj4g Kwl9Cj4gKwo+ICsJZXJyID0gcGh5X21pcGlfZHBoeV9nZXRfZGVmYXVsdF9jb25maWdfZm9yX2hz Y2xrKHRjMzU4NzQ2LT5wbGxfcmF0ZSwKPiArCQkJCQkJY3NpX2xhbmVzLCAmdGMzNTg3NDYtPmRw aHlfY2ZnKTsKPiArCWlmIChlcnIpCj4gKwkJZ290byBlcnI7Cj4gKwo+ICsJdGMzNTg3NDYtPnZi X3NpemUgPSBUQzM1ODc0Nl9WQl9ERUZBVUxUX1NJWkU7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ ICtlcnI6Cj4gKwl2NGwyX2Z3bm9kZV9lbmRwb2ludF9mcmVlKHZlcCk7Cj4gKwo+ICsJcmV0dXJu IGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9pbml0X2h3KHN0cnVjdCB0YzM1 ODc0NiAqdGMzNTg3NDYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRjMzU4NzQ2LT5z ZC5kZXY7Cj4gKwl1bnNpZ25lZCBpbnQgY2hpcGlkOwo+ICsJdTMyIHZhbDsKPiArCWludCBlcnI7 Cj4gKwo+ICsJZXJyID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChkZXYpOwo+ICsJaWYgKGVy ciA8IDApIHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXN1bWUgdGhlIGRldmljZVxu Iik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwkgLyogRW5zdXJlIHRoYXQgQ1NJIGlu dGVyZmFjZSBpcyBwdXQgaW50byBMUC0xMSBzdGF0ZSAqLwo+ICsJZXJyID0gdGMzNTg3NDZfc3df cmVzZXQodGMzNTg3NDYpOwo+ICsJaWYgKGVycikgewo+ICsJCXBtX3J1bnRpbWVfcHV0X25vaWRs ZShkZXYpOwoKRG9uJ3QgeW91IG5lZWQgYSByZWd1bGFyIHB1dCAocG9zc2libHkgd2l0aCBhdXRv c3VzcGVuZCkgaGVyZSA/Ck90aGVyd2lzZSBhIHJlc2V0IGZhaWx1cmUgd2lsbCBkZWNyZW1lbnQg dGhlIHJ1bnRpbWUgUE0gdXNlIGNvdW50IGJ1dApsZWF2ZSB0aGUgZGVjaWRlIHBvd2VyZWQuCgo+ ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlc2V0IHRoZSBkZXZpY2VcbiIpOwo+ICsJCXJl dHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gdGMzNTg3NDZfcmVhZCh0YzM1ODc0NiwgQ0hJ UElEX1JFRywgJnZhbCk7Cj4gKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGRldik7Cj4gKwlw bV9ydW50aW1lX3B1dF9zeW5jX2F1dG9zdXNwZW5kKGRldik7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJ ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBjaGlwaWRcbiIpOwoKSG93IGFib3V0IG1vdmlu ZyB0aGUgcmVhZCBmYWlsdXJlIG1lc3NhZ2UgdG8gdGMzNTg3NDZfcmVhZCgpID8gSXQncwp1c2Vm dWwgdG8gZ2V0IGVycm9yIG1lc3NhZ2VzIGZvciBhbGwgZmFpbHVyZXMsIG5vdCBqdXN0IHRoaXMg b25lLiBPciBkbwp3ZSBnZXQgYSBtZXNzYWdlIGZyb20gcmVnbWFwIGFscmVhZHkgPyBJZiB3ZSBk bywgdGhlbiB3ZSBjb3VsZCBqdXN0IGRyb3AKdGhpcy4KCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4g Kwl9Cj4gKwo+ICsJY2hpcGlkID0gRklFTERfR0VUKENISVBJRCwgdmFsKTsKPiArCWlmIChjaGlw aWQgIT0gMHg0NCkgewo+ICsJCWRldl9lcnIoZGV2LCAiSW52YWxpZCBjaGlwaWQgMHglMDJ4XG4i LCBjaGlwaWQpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRjMzU4NzQ2X3NldHVwX21jbGtfcHJvdmlkZXIoc3RydWN0 IHRjMzU4NzQ2ICp0YzM1ODc0NikKCkknZCBtb3ZlIHRoaXMgcmlnaHQgYWZ0ZXIgdGMzNTg3NDZf bWNsa19vcHMgYXMgdGhleSdyZSByZWxhdGVkLgoKPiArewo+ICsJc3RydWN0IGNsa19pbml0X2Rh dGEgbWNsa19pbml0ZGF0YSA9IHsgfTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRjMzU4NzQ2 LT5zZC5kZXY7Cj4gKwljb25zdCBjaGFyICptY2xrX25hbWU7Cj4gKwlpbnQgZXJyOwo+ICsKPiAr CS8qIE1DTEsgY2xrIHByb3ZpZGVyIHN1cHBvcnQgaXMgb3B0aW9uYWwgKi8KPiArCWlmICghZGV2 aWNlX3Byb3BlcnR5X3ByZXNlbnQoZGV2LCAiI2Nsb2NrLWNlbGxzIikpCj4gKwkJcmV0dXJuIDA7 Cj4gKwo+ICsJLyogSW5pdCB0byBoaWdoZXN0IHBvc3NpYmVsIE1DTEsgKi8KPiArCXRjMzU4NzQ2 LT5tY2xrX3Bvc3RkaXYgPSA1MTI7Cj4gKwl0YzM1ODc0Ni0+bWNsa19wcmVkaXYgPSA4Owo+ICsK PiArCW1jbGtfbmFtZSA9ICJ0YzM1ODc0Ni1tY2xrIjsKPiArCWRldmljZV9wcm9wZXJ0eV9yZWFk X3N0cmluZyhkZXYsICJjbG9jay1vdXRwdXQtbmFtZXMiLAo+ICsJCQkJICAgICZtY2xrX25hbWUp OwoKVGhpcyBob2xkcyBvbiBhIHNpbmdsZSBsaW5lLgoKPiArCj4gKwltY2xrX2luaXRkYXRhLm5h bWUgPSBtY2xrX25hbWU7Cj4gKwltY2xrX2luaXRkYXRhLm9wcyA9ICZ0YzM1ODc0Nl9tY2xrX29w czsKPiArCXRjMzU4NzQ2LT5tY2xrX2h3LmluaXQgPSAmbWNsa19pbml0ZGF0YTsKPiArCj4gKwll cnIgPSBkZXZtX2Nsa19od19yZWdpc3RlcihkZXYsICZ0YzM1ODc0Ni0+bWNsa19odyk7Cj4gKwlp ZiAoZXJyKSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgbWNsayBwcm92 aWRlclxuIik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwllcnIgPSBkZXZtX29mX2Ns a19hZGRfaHdfcHJvdmlkZXIoZGV2LCBvZl9jbGtfaHdfc2ltcGxlX2dldCwKPiArCQkJCQkgICZ0 YzM1ODc0Ni0+bWNsa19odyk7Cj4gKwlpZiAoZXJyKQo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVk IHRvIGFkZCBtY2xrIHByb3ZpZGVyXG4iKTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHRjMzU4NzQ2X2luaXRfY29udHJvbHMoc3RydWN0IHRjMzU4NzQ2ICp0YzM1 ODc0NikKPiArewo+ICsJdTY0ICpsaW5rX2ZyZXF1ZW5jaWVzID0gdGMzNTg3NDYtPmNzaV92ZXAu bGlua19mcmVxdWVuY2llczsKPiArCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmw7Cj4gKwlpbnQgZXJy Owo+ICsKPiArCWVyciA9IHY0bDJfY3RybF9oYW5kbGVyX2luaXQoJnRjMzU4NzQ2LT5jdHJsX2hk bCwgMSk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJY3RybCA9IHY0bDJf Y3RybF9uZXdfaW50X21lbnUoJnRjMzU4NzQ2LT5jdHJsX2hkbCwgTlVMTCwKPiArCQkJCSAgICAg IFY0TDJfQ0lEX0xJTktfRlJFUSwgMCwgMCwKClNob3VsZG4ndCB0aGUgbWF4IGFyZ3VtZW50IGJl IHNldCB0byB0aGUgbnVtYmVyIG9mIGl0ZW1zIG1pbnVzIDEgPwoKPiArCQkJCSAgICAgIGxpbmtf ZnJlcXVlbmNpZXMpOwo+ICsJaWYgKGN0cmwpCj4gKwkJY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJM X0ZMQUdfUkVBRF9PTkxZOwo+ICsKPiArCXRjMzU4NzQ2LT5zZC5jdHJsX2hhbmRsZXIgPSAmdGMz NTg3NDYtPmN0cmxfaGRsOwo+ICsJaWYgKHRjMzU4NzQ2LT5jdHJsX2hkbC5lcnJvcikKPiArCQly ZXR1cm4gdGMzNTg3NDYtPmN0cmxfaGRsLmVycm9yOwoKWW91IG5lZWQgdG8gY2FsbCB2NGwyX2N0 cmxfaGFuZGxlcl9mcmVlKCkgaW4gdGhlIGZhaWx1cmUgcGF0aHMuCgo+ICsKPiArCXJldHVybiB2 NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgmdGMzNTg3NDYtPmN0cmxfaGRsKTsKClRoaXMgY2FuIGJl IHNraXBwZWQgSSB0aGluaywgYXMgdGhlIG9ubHkgc3VwcG9ydGVkIGNvbnRyb2wgaXMgcmVhZC1v bmx5LgoKPiArfQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9ub3RpZnlfYm91bmQoc3RydWN0 IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyLAo+ICsJCQkJIHN0cnVjdCB2NGwyX3N1YmRl diAqc2QsCj4gKwkJCQkgc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2ICphc2QpCj4gK3sKPiArCXN0 cnVjdCB0YzM1ODc0NiAqdGMzNTg3NDYgPQo+ICsJCWNvbnRhaW5lcl9vZihub3RpZmllciwgc3Ry dWN0IHRjMzU4NzQ2LCBub3RpZmllcik7Cj4gKwlzdHJ1Y3QgbWVkaWFfcGFkICpzaW5rID0gJnRj MzU4NzQ2LT5wYWRzW1RDMzU4NzQ2X1NJTktdOwo+ICsKPiArCXJldHVybiB2NGwyX2NyZWF0ZV9m d25vZGVfbGlua3NfdG9fcGFkKHNkLCBzaW5rLCBNRURJQV9MTktfRkxfRU5BQkxFRCk7CgpJJ2Qg bWFrZSB0aGUgbGluayBpbW11dGFibGUgdG9vLCBhcyBvbmx5IG9uZSBzb3VyY2Ugc3ViZGV2IGlz IHN1cHBvcnRlZC4KCj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9hc3luY19u b3RpZmllcl9vcGVyYXRpb25zIHRjMzU4NzQ2X25vdGlmeV9vcHMgPSB7Cj4gKwkuYm91bmQgPSB0 YzM1ODc0Nl9ub3RpZnlfYm91bmQsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHRjMzU4NzQ2X2Fz eW5jX3JlZ2lzdGVyKHN0cnVjdCB0YzM1ODc0NiAqdGMzNTg3NDYpCj4gK3sKPiArCXN0cnVjdCB2 NGwyX2Z3bm9kZV9lbmRwb2ludCB2ZXAgPSB7Cj4gKwkJLmJ1c190eXBlID0gVjRMMl9NQlVTX1BB UkFMTEVMLAo+ICsJfTsKPiArCXN0cnVjdCB2NGwyX2FzeW5jX3N1YmRldiAqYXNkOwo+ICsJc3Ry dWN0IGZ3bm9kZV9oYW5kbGUgKmVwOwo+ICsJaW50IGVycjsKPiArCj4gKwllcCA9IGZ3bm9kZV9n cmFwaF9nZXRfZW5kcG9pbnRfYnlfaWQoZGV2X2Z3bm9kZSh0YzM1ODc0Ni0+c2QuZGV2KSwKPiAr CQkJCQkgICAgIFRDMzU4NzQ2X1NJTkssIDAsIDApOwo+ICsJaWYgKCFlcCkKPiArCQlyZXR1cm4g LUVOT1RDT05OOwo+ICsKPiArCWVyciA9IHY0bDJfZndub2RlX2VuZHBvaW50X3BhcnNlKGVwLCAm dmVwKTsKPiArCWlmIChlcnIpIHsKPiArCQlmd25vZGVfaGFuZGxlX3B1dChlcCk7Cj4gKwkJcmV0 dXJuIGVycjsKPiArCX0KPiArCj4gKwl2NGwyX2FzeW5jX25mX2luaXQoJnRjMzU4NzQ2LT5ub3Rp Zmllcik7Cj4gKwlhc2QgPSB2NGwyX2FzeW5jX25mX2FkZF9md25vZGVfcmVtb3RlKCZ0YzM1ODc0 Ni0+bm90aWZpZXIsIGVwLAo+ICsJCQkJCSAgICAgIHN0cnVjdCB2NGwyX2FzeW5jX3N1YmRldik7 Cj4gKwlpZiAoSVNfRVJSKGFzZCkpIHsKPiArCQlmd25vZGVfaGFuZGxlX3B1dChlcCk7CgpZb3Ug Y2FuIG1vdmUgdGhpcyBiZWZvcmUgdGhlIGVycm9yIGNoZWNrIGFuZCBkcm9wIHRoZSBuZXh0IG9u ZS4KCj4gKwkJcmV0dXJuIFBUUl9FUlIoYXNkKTsKClNob3VsZG4ndCB2NGwyX2FzeW5jX25mX2Ns ZWFudXAoKSBiZSBjYWxsZWQgaGVyZSA/Cgo+ICsJfQo+ICsKPiArCWZ3bm9kZV9oYW5kbGVfcHV0 KGVwKTsKPiArCj4gKwl0YzM1ODc0Ni0+bm90aWZpZXIub3BzID0gJnRjMzU4NzQ2X25vdGlmeV9v cHM7Cj4gKwo+ICsJZXJyID0gdjRsMl9hc3luY19zdWJkZXZfbmZfcmVnaXN0ZXIoJnRjMzU4NzQ2 LT5zZCwgJnRjMzU4NzQ2LT5ub3RpZmllcik7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJdjRsMl9hc3lu Y19uZl9jbGVhbnVwKCZ0YzM1ODc0Ni0+bm90aWZpZXIpOwo+ICsJCXJldHVybiBlcnI7Cj4gKwl9 Cj4gKwo+ICsJdGMzNTg3NDYtPnNkLmZ3bm9kZSA9IGZ3bm9kZV9ncmFwaF9nZXRfZW5kcG9pbnRf YnlfaWQoCj4gKwkJZGV2X2Z3bm9kZSh0YzM1ODc0Ni0+c2QuZGV2KSwgVEMzNTg3NDZfU09VUkNF LCAwLCAwKTsKCldoZXJlIGlzIHRoaXMgcmVmZXJlbmNlIGRyb3BwZWQgPwoKPiArCj4gKwllcnIg PSB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRldigmdGMzNTg3NDYtPnNkKTsKPiArCWlmIChlcnIp IHsKPiArCQl2NGwyX2FzeW5jX25mX3VucmVnaXN0ZXIoJnRjMzU4NzQ2LT5ub3RpZmllcik7Cj4g KwkJdjRsMl9hc3luY19uZl9jbGVhbnVwKCZ0YzM1ODc0Ni0+bm90aWZpZXIpOwo+ICsJfQo+ICsK PiArCXJldHVybiBlcnI7CgoJcmV0dXJuIDA7Cgo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRjMzU4 NzQ2X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCj4gK3sKPiArCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZjbGllbnQtPmRldjsKPiArCXN0cnVjdCB0YzM1ODc0NiAqdGMzNTg3NDY7Cj4g Kwl1bnNpZ25lZCBsb25nIHJlZmNsazsKPiArCXVuc2lnbmVkIGludCBpOwo+ICsJaW50IGVycjsK PiArCj4gKwl0YzM1ODc0NiA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZigqdGMz NTg3NDYpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghdGMzNTg3NDYpCj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4gKwo+ICsJdGMzNTg3NDYtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVu dCwgJnRjMzU4NzQ2X3JlZ21hcF9jb25maWcpOwo+ICsJaWYgKElTX0VSUih0YzM1ODc0Ni0+cmVn bWFwKSkKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIodGMzNTg3NDYtPnJl Z21hcCksCj4gKwkJCQkgICAgICJGYWlsZWQgdG8gaW5pdCByZWdtYXBcbiIpOwo+ICsKPiArCXRj MzU4NzQ2LT5yZWZjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicmVmY2xrIik7Cj4gKwlpZiAoSVNf RVJSKHRjMzU4NzQ2LT5yZWZjbGspKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRS X0VSUih0YzM1ODc0Ni0+cmVmY2xrKSwKPiArCQkJCSAgICAgIkZhaWxlZCB0byBnZXQgcmVmY2xr XG4iKTsKPiArCj4gKwllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUodGMzNTg3NDYtPnJlZmNsayk7 Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLAo+ICsJCQkJ ICAgICAiRmFpbGVkIHRvIGVuYWJsZSByZWZjbGtcbiIpOwo+ICsKPiArCXJlZmNsayA9IGNsa19n ZXRfcmF0ZSh0YzM1ODc0Ni0+cmVmY2xrKTsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZSh0YzM1 ODc0Ni0+cmVmY2xrKTsKPiArCj4gKwlpZiAocmVmY2xrIDwgNiAqIE1IWiB8fCByZWZjbGsgPiA0 MCAqIE1IWikKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsICJJbnZhbGlk IHJlZmNsayByYW5nZVxuIik7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGMz NTg3NDZfc3VwcGxpZXMpOyBpKyspCj4gKwkJdGMzNTg3NDYtPnN1cHBsaWVzW2ldLnN1cHBseSA9 IHRjMzU4NzQ2X3N1cHBsaWVzW2ldOwo+ICsKPiArCWVyciA9IGRldm1fcmVndWxhdG9yX2J1bGtf Z2V0KGRldiwgQVJSQVlfU0laRSh0YzM1ODc0Nl9zdXBwbGllcyksCj4gKwkJCQkgICAgICB0YzM1 ODc0Ni0+c3VwcGxpZXMpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShk ZXYsIGVyciwgIkZhaWxlZCB0byBnZXQgc3VwcGxpZXNcbiIpOwo+ICsKPiArCXRjMzU4NzQ2LT5y ZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCAicmVzZXQiLAo+ICsJCQkJ CQkgICAgICAgR1BJT0RfT1VUX0hJR0gpOwo+ICsJaWYgKElTX0VSUih0YzM1ODc0Ni0+cmVzZXRf Z3BpbykpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHRjMzU4NzQ2LT5y ZXNldF9ncGlvKSwKPiArCQkJCSAgICAgIkZhaWxlZCB0byBnZXQgcmVzZXQtZ3Bpb3NcbiIpOwo+ ICsKPiArCWVyciA9IHRjMzU4NzQ2X2luaXRfc3ViZGV2KHRjMzU4NzQ2LCBjbGllbnQpOwo+ICsJ aWYgKGVycikKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgIkZhaWxlZCB0byBp bml0IHN1YmRldlxuIik7Cj4gKwo+ICsJZXJyID0gdGMzNTg3NDZfaW5pdF9vdXRwdXRfcG9ydCh0 YzM1ODc0NiwgcmVmY2xrKTsKPiArCWlmIChlcnIpCj4gKwkJZ290byBlcnJfc3ViZGV2Owo+ICsK PiArCS8qCj4gKwkgKiBLZWVwIHRoaXMgb3JkZXIgc2luY2Ugd2UgbmVlZCB0aGUgb3V0cHV0IHBv cnQgbGluay1mcmVxdWVuY2llcwo+ICsJICogaW5mb3JtYXRpb24uCj4gKwkgKi8KPiArCWVyciA9 IHRjMzU4NzQ2X2luaXRfY29udHJvbHModGMzNTg3NDYpOwo+ICsJaWYgKGVycikKPiArCQlnb3Rv IGVycl9md25vZGU7Cj4gKwo+ICsJZGV2X3NldF9kcnZkYXRhKGRldiwgdGMzNTg3NDYpOwo+ICsJ cG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoZGV2LCAyMDApOwoKMjAwbXMgbWF5IGJl IGEgYml0IHNob3J0IGZvciBhIGNvbXBsZXRlIHN0b3AvcmVzdGFydCBjeWNsZS4gSG93IGFib3V0 CjFzID8KCj4gKwlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZChkZXYpOwo+ICsJcG1fcnVudGlt ZV9lbmFibGUoZGV2KTsKPiArCj4gKwllcnIgPSB0YzM1ODc0Nl9pbml0X2h3KHRjMzU4NzQ2KTsK PiArCWlmIChlcnIpCj4gKwkJZ290byBlcnJfcG07Cj4gKwo+ICsJZXJyID0gdGMzNTg3NDZfc2V0 dXBfbWNsa19wcm92aWRlcih0YzM1ODc0Nik7Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8gZXJyX3Bt Owo+ICsKPiArCWVyciA9IHRjMzU4NzQ2X2FzeW5jX3JlZ2lzdGVyKHRjMzU4NzQ2KTsKPiArCWlm IChlcnIgPCAwKQo+ICsJCWdvdG8gZXJyX3BtOwo+ICsKPiArCWRldl9kYmcoZGV2LCAiJXMgZm91 bmQgQCAweCV4ICglcylcbiIsIGNsaWVudC0+bmFtZSwKPiArCQljbGllbnQtPmFkZHIsIGNsaWVu dC0+YWRhcHRlci0+bmFtZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfcG06Cj4gKwlw bV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKPiArCXBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChkZXYp Owo+ICsJcG1fcnVudGltZV9kb250X3VzZV9hdXRvc3VzcGVuZChkZXYpOwo+ICsJdjRsMl9jdHJs X2hhbmRsZXJfZnJlZSgmdGMzNTg3NDYtPmN0cmxfaGRsKTsKPiArZXJyX2Z3bm9kZToKPiArCXY0 bDJfZndub2RlX2VuZHBvaW50X2ZyZWUoJnRjMzU4NzQ2LT5jc2lfdmVwKTsKPiArZXJyX3N1YmRl djoKPiArCXY0bDJfc3ViZGV2X2NsZWFudXAoJnRjMzU4NzQ2LT5zZCk7Cj4gKwltZWRpYV9lbnRp dHlfY2xlYW51cCgmdGMzNTg3NDYtPnNkLmVudGl0eSk7Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiAr fQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNs aWVudCkKPiArewo+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0 YShjbGllbnQpOwo+ICsJc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0NiA9IHRvX3RjMzU4NzQ2KHNk KTsKPiArCj4gKwl2NGwyX3N1YmRldl9jbGVhbnVwKHNkKTsKPiArCXY0bDJfY3RybF9oYW5kbGVy X2ZyZWUoJnRjMzU4NzQ2LT5jdHJsX2hkbCk7Cj4gKwl2NGwyX2Z3bm9kZV9lbmRwb2ludF9mcmVl KCZ0YzM1ODc0Ni0+Y3NpX3ZlcCk7Cj4gKwl2NGwyX2FzeW5jX25mX3VucmVnaXN0ZXIoJnRjMzU4 NzQ2LT5ub3RpZmllcik7Cj4gKwl2NGwyX2FzeW5jX25mX2NsZWFudXAoJnRjMzU4NzQ2LT5ub3Rp Zmllcik7Cj4gKwl2NGwyX2FzeW5jX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKPiArCW1lZGlhX2Vu dGl0eV9jbGVhbnVwKCZzZC0+ZW50aXR5KTsKPiArCj4gKwlwbV9ydW50aW1lX2Rpc2FibGUoc2Qt PmRldik7Cj4gKwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoc2QtPmRldik7Cj4gKwlwbV9ydW50 aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKHNkLT5kZXYpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IHRjMzU4NzQ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ ICt7Cj4gKwlzdHJ1Y3QgdGMzNTg3NDYgKnRjMzU4NzQ2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7 Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZSh0YzM1ODc0Ni0+cmVm Y2xrKTsKPiArCj4gKwllcnIgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUodGMz NTg3NDZfc3VwcGxpZXMpLAo+ICsJCQkJICAgICB0YzM1ODc0Ni0+c3VwcGxpZXMpOwo+ICsJaWYg KGVycikKPiArCQljbGtfcHJlcGFyZV9lbmFibGUodGMzNTg3NDYtPnJlZmNsayk7Cj4gKwo+ICsJ cmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9yZXN1bWUoc3RydWN0 IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdGMzNTg3NDYgKnRjMzU4NzQ2ID0gZGV2X2dl dF9kcnZkYXRhKGRldik7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWdwaW9kX3NldF92YWx1ZSh0YzM1 ODc0Ni0+cmVzZXRfZ3BpbywgMSk7Cj4gKwo+ICsJZXJyID0gcmVndWxhdG9yX2J1bGtfZW5hYmxl KEFSUkFZX1NJWkUodGMzNTg3NDZfc3VwcGxpZXMpLAo+ICsJCQkJICAgIHRjMzU4NzQ2LT5zdXBw bGllcyk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJLyogbWluLiAyMDBu cyAqLwo+ICsJdXNsZWVwX3JhbmdlKDEwLCAyMCk7Cj4gKwo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKHRj MzU4NzQ2LT5yZXNldF9ncGlvLCAwKTsKPiArCj4gKwllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUo dGMzNTg3NDYtPnJlZmNsayk7Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8gZXJyOwo+ICsKPiArCS8q IG1pbi4gNzAwdXMgLi4uIDFtcyAqLwo+ICsJdXNsZWVwX3JhbmdlKDEwMDAsIDE1MDApOwo+ICsK PiArCS8qCj4gKwkgKiBFbmFibGUgdGhlIFBMTCBoZXJlIHNpbmNlIGl0IGNhbiBiZSBjYWxsZWQg YnkgdGhlIGNsay1mcmFtZXdvcmsgb3IgYnkKPiArCSAqIHRoZSAuc19zdHJlYW0oKSBjYWxsYmFj ay4gU28gdGhpcyBpcyB0aGUgY29tbW9uIHBsYWNlIGZvciBib3RoLgo+ICsJICovCj4gKwllcnIg PSB0YzM1ODc0Nl9hcHBseV9wbGxfY29uZmlnKHRjMzU4NzQ2KTsKPiArCWlmIChlcnIpCj4gKwkJ Z290byBlcnJfY2xrOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX2NsazoKPiArCWNsa19k aXNhYmxlX3VucHJlcGFyZSh0YzM1ODc0Ni0+cmVmY2xrKTsKPiArZXJyOgo+ICsJcmVndWxhdG9y X2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHRjMzU4NzQ2X3N1cHBsaWVzKSwKPiArCQkJICAgICAg IHRjMzU4NzQ2LT5zdXBwbGllcyk7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtERUZJTkVf UlVOVElNRV9ERVZfUE1fT1BTKHRjMzU4NzQ2X3BtX29wcywgdGMzNTg3NDZfc3VzcGVuZCwKPiAr CQkJICB0YzM1ODc0Nl9yZXN1bWUsIE5VTEwpOwo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgdGMzNTg3NDZfb2ZfbWF0Y2hbXSA9IHsKPiArCXsg LmNvbXBhdGlibGUgPSAidG9zaGliYSx0YzM1ODc0NiIgfSwKPiArCXsgfSwKPiArfTsKPiArTU9E VUxFX0RFVklDRV9UQUJMRShvZiwgdGMzNTg3NDZfb2ZfbWF0Y2gpOwo+ICsKPiArc3RhdGljIHN0 cnVjdCBpMmNfZHJpdmVyIHRjMzU4NzQ2X2RyaXZlciA9IHsKPiArCS5kcml2ZXIgPSB7Cj4gKwkJ Lm5hbWUgPSAidGMzNTg3NDYiLAo+ICsJCS5wbSA9IHBtX3B0cigmdGMzNTg3NDZfcG1fb3BzKSwK PiArCQkub2ZfbWF0Y2hfdGFibGUgPSB0YzM1ODc0Nl9vZl9tYXRjaCwKPiArCX0sCj4gKwkucHJv YmVfbmV3ID0gdGMzNTg3NDZfcHJvYmUsCj4gKwkucmVtb3ZlID0gdGMzNTg3NDZfcmVtb3ZlLAo+ ICt9Owo+ICsKPiArbW9kdWxlX2kyY19kcml2ZXIodGMzNTg3NDZfZHJpdmVyKTsKPiArCj4gK01P RFVMRV9ERVNDUklQVElPTigiVG9zaGliYSBUQzM1ODc0NiBQYXJhbGxlbCB0byBDU0ktMiBicmlk Z2UgZHJpdmVyIik7Cj4gK01PRFVMRV9BVVRIT1IoIk1hcmNvIEZlbHNjaCA8a2VybmVsQHBlbmd1 dHJvbml4LmRlPiIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7CgotLSAKUmVnYXJkcywKCkxh dXJlbnQgUGluY2hhcnQKCi0tIApsaW51eC1waHkgbWFpbGluZyBsaXN0CmxpbnV4LXBoeUBsaXN0 cy5pbmZyYWRlYWQub3JnCmh0dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LXBoeQo=