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 47696C43334 for ; Thu, 14 Jul 2022 08:17:51 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=+m+38vLvBr1rL5ax8MR50KLt1z4K5/wpsa+I+Mk7ppY=; b=bDYyqV3AP4SPwL 5ncmLcb8Z5X8d6Ibnfl0AJrStpaobv0DoIwbsQit9F33iDVHnJzBa0zf4qNqiMKcBOHeHDEFGnPpJ ypbIAed1qXAxVkHwbY5Jb7bUNe4G0cNlPqV6ymA6UgmlkQfjaZsioV4eE0p3J/igqkTIj0rMRzTqq H/pXxjWzGpHyiiOgsO7v4ck76C0cyXptR+lrvgrv5N2/Ud1O4DKVhYe9IhYd9pC/BUZNvsdc92yJm kjXoK3ykSeuoHD8ErsXrEXCPPGjjgv1c7VHpKP3LQKQjlIb/NHk5WK6PeOAMt7fmw/jYVV/vnop5m BRo0vD+HsExuS/wOrw+w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oBu2U-00CGwX-0F; Thu, 14 Jul 2022 08:17:38 +0000 Received: from mail-sz.amlogic.com ([211.162.65.117]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oBu2E-00CGmk-IE; Thu, 14 Jul 2022 08:17:27 +0000 Received: from [10.88.19.41] (10.88.19.41) by mail-sz.amlogic.com (10.28.11.5) with Microsoft SMTP Server id 15.1.2176.2; Thu, 14 Jul 2022 16:17:16 +0800 Message-ID: Date: Thu, 14 Jul 2022 16:17:16 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.0.2 Subject: Re: [PATCH 1/4] perf/amlogic: Add support for Amlogic meson G12 SoC DDR PMU driver To: Robin Murphy , , , , CC: Rob Herring , Krzysztof Kozlowski , Will Deacon , Mark Rutland , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Chris Healy References: <20220712063641.2790997-1-jiucheng.xu@amlogic.com> <55be073b-caf1-320b-dd42-165636b45a74@arm.com> From: Jiucheng Xu Content-Language: en-US In-Reply-To: <55be073b-caf1-320b-dd42-165636b45a74@arm.com> X-Originating-IP: [10.88.19.41] X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220714_011722_844047_EE156525 X-CRM114-Status: GOOD ( 43.60 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org T24gNy8xMi8yMDIyIDg6MzYgUE0sIFJvYmluIE11cnBoeSB3cm90ZToKPiBbIEVYVEVSTkFMIEVN QUlMIF0KPgo+IE9uIDIwMjItMDctMTIgMDc6MzYsIEppdWNoZW5nIFh1IHdyb3RlOgo+PiBUaGlz IHBhdGNoIGFkZHMgc3VwcG9ydCBBbWxvZ2ljIG1lc29uIEcxMiBzZXJpZXMgU29DCj4+IEREUiBi YW5kd2lkdGggUE1VIGRyaXZlciBmcmFtZXdvcmsgYW5kIGludGVyZmFjZXMuCj4+Cj4+IFRoZSBQ TVUgbm90IG9ubHkgY2FuIG1vbml0b3IgdGhlIHRvdGFsIEREUiBiYW5kd2lkdGgsCj4+IGJ1dCBh bHNvIHRoZSBiYW5kd2lkdGggd2hpY2ggaXMgZnJvbSBpbmRpdmlkdWFsIElQIG1vZHVsZS4KPj4K Pj4gRXhhbXBsZSB1c2FnZToKPj4KPj4gwqAgJCBwZXJmIHN0YXQgLWEgLWUgYW1sX2Rkcl9idy90 b3RhbF9yd19ieXRlcy8gLUkgMTAwMCBzbGVlcCAxMAo+Pgo+PiAtIG9yIC0KPj4KPj4gwqAgJCBw ZXJmIHN0YXQgLWEgLWUgXAo+PiDCoMKgwqAgYW1sX2Rkcl9idy90b3RhbF9yd19ieXRlcy8sXAo+ PiDCoMKgwqAgYW1sX2Rkcl9idy9jaGFuXzFfcndfYnl0ZXMsYXJtPTEvIC1JIDEwMDAgXAo+PiDC oMKgwqAgc2xlZXAgMTAKPj4KPj4gZzEyIFNvQyBzdXBwb3J0IDQgY2hhbm5lbHMgdG8gbW9uaXRv ciBERFIgYmFuZHdpZHRoCj4+IHNpbXVsdGFuZW91c2x5LiBFYWNoIGNoYW5uZWwgY2FuIG1vbml0 b3IgdXAgdG8gNCBJUCBtb2R1bGVzCj4+IHNpbXVsdGFuZW91c2x5Lgo+Pgo+PiBGb3IgSW5zdGFu Y2UsIElmIHlvdSB3YW50IHRvIGdldCB0aGUgc3VtIG9mIEREUiBiYW5kd2lkdGgKPj4gZnJvbSBD UFUsIEdQVSwgVVNCMy4wIGFuZCBWREVDLiBZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nCj4+IGNv bW1hbmQgcGFyYW1ldGVycyB0byBkaXNwbGF5Lgo+Pgo+PiDCoCAkIHBlcmYgc3RhdCAtYSAtZSBc Cj4+IMKgwqDCoCBhbWxfZGRyX2J3L2NoYW5fMl9yd19ieXRlcyxhcm09MSxncHU9MSx1c2IzXzA9 MSxubmE9MS8gLUkgMTAwMCBcCj4+IMKgwqDCoCBzbGVlcCAxMAo+Pgo+PiBPdGhlciBldmVudHMg YXJlIHN1cHBvcnRlZCwgYW5kIGFkdmVydGlzZWQgdmlhIHBlcmYgbGlzdC4KPj4KPj4gU2lnbmVk LW9mZi1ieTogSml1Y2hlbmcgWHUgPGppdWNoZW5nLnh1QGFtbG9naWMuY29tPgo+PiAtLS0KPj4g wqAgTUFJTlRBSU5FUlPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfMKgwqAgNyArCj4+IMKgIGRyaXZlcnMvcGVyZi9LY29uZmlnwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDIgKwo+PiDCoCBkcml2ZXJzL3BlcmYv TWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+PiDC oCBkcml2ZXJzL3BlcmYvYW1sb2dpYy9LY29uZmlnwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDEx ICsKPj4gwqAgZHJpdmVycy9wZXJmL2FtbG9naWMvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqAg fMKgwqAgMyArCj4+IMKgIGRyaXZlcnMvcGVyZi9hbWxvZ2ljL2FtbF9kZHJfcG11LmPCoMKgwqDC oCB8IDcyNSArKysrKysrKysrKysrKysrKysrKysrKysrCj4+IMKgIGRyaXZlcnMvcGVyZi9hbWxv Z2ljL2FtbF9kZHJfcG11X2cxMi5jIHwgMzk4ICsrKysrKysrKysrKysrCj4+IMKgIGluY2x1ZGUv c29jL2FtbG9naWMvYW1sX2Rkcl9wbXUuaMKgwqDCoMKgwqAgfMKgIDYzICsrKwo+PiDCoCA4IGZp bGVzIGNoYW5nZWQsIDEyMTAgaW5zZXJ0aW9ucygrKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9wZXJmL2FtbG9naWMvS2NvbmZpZwo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9wZXJmL2FtbG9naWMvTWFrZWZpbGUKPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvcGVyZi9hbWxvZ2ljL2FtbF9kZHJfcG11LmMKPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvcGVyZi9hbWxvZ2ljL2FtbF9kZHJfcG11X2cxMi5jCj4+IMKgIGNyZWF0ZSBtb2RlIDEw MDY0NCBpbmNsdWRlL3NvYy9hbWxvZ2ljL2FtbF9kZHJfcG11LmgKPj4KPj4gZGlmZiAtLWdpdCBh L01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKPj4gaW5kZXggZjY3OTE1MmJkYmFkLi5jYjZlZTU5 YTRmNDQgMTAwNjQ0Cj4+IC0tLSBhL01BSU5UQUlORVJTCj4+ICsrKyBiL01BSU5UQUlORVJTCj4+ IEBAIC0xMDUwLDYgKzEwNTAsMTMgQEAgUzrCoMKgwqAgTWFpbnRhaW5lZAo+PiDCoCBGOsKgwqDC oCBEb2N1bWVudGF0aW9uL2hpZC9hbWQtc2ZoKgo+PiDCoCBGOsKgwqDCoCBkcml2ZXJzL2hpZC9h bWQtc2ZoLWhpZC8KPj4gwqAgK0FNTE9HSUMgRERSIFBNVSBEUklWRVIKPj4gK006wqDCoMKgIEpp dWNoZW5nIFh1IDxqaXVjaGVuZy54dUBhbWxvZ2ljLmNvbT4KPj4gK1M6wqDCoMKgIFN1cHBvcnRl ZAo+PiArVzrCoMKgwqAgaHR0cDovL3d3dy5hbWxvZ2ljLmNvbQo+PiArRjrCoMKgwqAgZHJpdmVy cy9wZXJmL2FtbG9naWMvCj4+ICtGOsKgwqDCoCBpbmNsdWRlL3NvYy9hbWxvZ2ljLwo+PiArCj4+ IMKgIEFNUEhJT04gVlBVIENPREVDIFY0TDIgRFJJVkVSCj4+IMKgIE06wqDCoMKgIE1pbmcgUWlh biA8bWluZy5xaWFuQG54cC5jb20+Cj4+IMKgIE06wqDCoMKgIFNoaWppZSBRaW4gPHNoaWppZS5x aW5AbnhwLmNvbT4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9LY29uZmlnIGIvZHJpdmVy cy9wZXJmL0tjb25maWcKPj4gaW5kZXggMWUyZDY5NDUzNzcxLi42ODIwMGM3OTgxMjggMTAwNjQ0 Cj4+IC0tLSBhL2RyaXZlcnMvcGVyZi9LY29uZmlnCj4+ICsrKyBiL2RyaXZlcnMvcGVyZi9LY29u ZmlnCj4+IEBAIC0xOTIsNCArMTkyLDYgQEAgY29uZmlnIE1BUlZFTExfQ04xMEtfRERSX1BNVQo+ PiDCoMKgwqDCoMKgwqDCoCBFbmFibGUgcGVyZiBzdXBwb3J0IGZvciBNYXJ2ZWxsIEREUiBQZXJm b3JtYW5jZSBtb25pdG9yaW5nCj4+IMKgwqDCoMKgwqDCoMKgIGV2ZW50IG9uIENOMTBLIHBsYXRm b3JtLgo+PiDCoCArc291cmNlICJkcml2ZXJzL3BlcmYvYW1sb2dpYy9LY29uZmlnIgo+PiArCj4+ IMKgIGVuZG1lbnUKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9NYWtlZmlsZSBiL2RyaXZl cnMvcGVyZi9NYWtlZmlsZQo+PiBpbmRleCA1N2EyNzljNjFkZjUuLmVmODJiMjdlMzZkMCAxMDA2 NDQKPj4gLS0tIGEvZHJpdmVycy9wZXJmL01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMvcGVyZi9N YWtlZmlsZQo+PiBAQCAtMSw0ICsxLDUgQEAKPj4gwqAgIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMAo+PiArb2JqLSQoQ09ORklHX0FNTF9ERFJfUE1VKSArPSBhbWxvZ2ljLwo+PiDC oCBvYmotJChDT05GSUdfQVJNX0NDSV9QTVUpICs9IGFybS1jY2kubwo+PiDCoCBvYmotJChDT05G SUdfQVJNX0NDTikgKz0gYXJtLWNjbi5vCj4+IMKgIG9iai0kKENPTkZJR19BUk1fQ01OKSArPSBh cm0tY21uLm8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9hbWxvZ2ljL0tjb25maWcgYi9k cml2ZXJzL3BlcmYvYW1sb2dpYy9LY29uZmlnCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uZDg4YmQ4MzcxYWJhCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIv ZHJpdmVycy9wZXJmL2FtbG9naWMvS2NvbmZpZwo+PiBAQCAtMCwwICsxLDExIEBACj4+ICsjIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPj4gK2NvbmZpZyBBTUxfRERSX1BN VQo+PiArwqDCoMKgIHRyaXN0YXRlICJBbWxvZ2ljIEREUiBCYW5kd2lkdGggUGVyZm9ybWFuY2Ug TW9uaXRvciIKPj4gK8KgwqDCoCBkZXBlbmRzIG9uIEFSQ0hfTUVTT04gfHwgQ09NUElMRV9URVNU Cj4+ICvCoMKgwqAgZGVmYXVsdCBuCj4KPiAibiIgaXMgdGhlIGF1dG9tYXRpYyBkZWZhdWx0IGFu eXdheSwgc28geW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSB0aGlzLgpPa2F5LCBJIGFncmVlIHdp dGggeW91LiBJIHdpbGwgbWFrZSB0aGUgY2hhbmdlLgo+PiArwqDCoMKgIGhlbHAKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoCBQcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgRERSIHBlcmZvcm1hbmNlIG1v bml0b3IKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoCBpbiBBbWxvZ2ljIFNvQ3MsIHdoaWNoIGNhbiBn aXZlIGluZm9ybWF0aW9uIGFib3V0Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqAgbWVtb3J5IHRocm91 Z2hwdXQgYW5kIG90aGVyIHJlbGF0ZWQgZXZlbnRzLiBJdAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg IHN1cHBvcnRzIG11bHRpcGxlIGNoYW5uZWxzIHRvIG1vbml0b3IgdGhlIG1lbW9yeQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgIGJhbmR3aWR0aCBzaW11bHRhbmVvdXNseS4KPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvcGVyZi9hbWxvZ2ljL01ha2VmaWxlIAo+PiBiL2RyaXZlcnMvcGVyZi9hbWxvZ2lj L01ha2VmaWxlCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4u NGRjMTE2MjAyOTJiCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9wZXJmL2FtbG9n aWMvTWFrZWZpbGUKPj4gQEAgLTAsMCArMSwzIEBACj4+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wLW9ubHkKPj4gK29iai0kKENPTkZJR19BTUxfRERSX1BNVSkgKz0gYW1sX2Rk cl9wbXUubyBcCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhbWxfZGRyX3Bt dV9nMTIubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wZXJmL2FtbG9naWMvYW1sX2Rkcl9wbXUu YyAKPj4gYi9kcml2ZXJzL3BlcmYvYW1sb2dpYy9hbWxfZGRyX3BtdS5jCj4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjc5NTZkMmE0Y2ZjCj4+IC0tLSAvZGV2 L251bGwKPj4gKysrIGIvZHJpdmVycy9wZXJmL2FtbG9naWMvYW1sX2Rkcl9wbXUuYwo+PiBAQCAt MCwwICsxLDcyNSBAQAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPj4g Ky8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQW1sb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJl c2VydmVkLgo+PiArICovCj4+ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KPj4gKyNpbmNs dWRlIDxsaW51eC9pbml0Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+Cj4+ICsj aW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4+ ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZv cm1fZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+Cj4+ICsjaW5jbHVkZSA8 bGludXgvc3lzZnMuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+PiArI2luY2x1ZGUg PGxpbnV4L3ZlcnNpb24uaD4KPj4gKwo+PiArI2luY2x1ZGUgPHNvYy9hbWxvZ2ljL2FtbF9kZHJf cG11Lmg+Cj4+ICsKPj4gKyNkZWZpbmUgRERSX1BFUkZfREVWX05BTUUgImFtbF9kZHJfYnciCj4+ ICsjZGVmaW5lIE1BWF9BWElfUE9SVFNfT0ZfQ0hBTk5FTMKgwqDCoCA0wqDCoMKgIC8qIEEgRE1D IGNoYW5uZWwgY2FuIAo+PiBtb25pdG9yIG1heCA0IGF4aSBwb3J0cyAqLwo+PiArI2RlZmluZSBN QVhfQklUTUFQwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA2NMKgwqDCoCAvKiB1NjQgZXZlbnQuYXR0 ci5jb25maWcxLCA2NCAKPj4gYml0cyAqLwo+PiArCj4+ICsjZGVmaW5lIHRvX2Rkcl9wbXUocCnC oMKgwqDCoMKgwqDCoCBjb250YWluZXJfb2YocCwgc3RydWN0IGRkcl9wbXUsIHBtdSkKPj4gKwo+ PiArI2RlZmluZSBod19pbmZvX3RvX3BtdShwKcKgwqDCoCBjb250YWluZXJfb2YocCwgc3RydWN0 IGRkcl9wbXUsIGluZm8pCj4+ICsKPj4gK3N0cnVjdCBkZHJfcG11IHsKPj4gK8KgwqDCoCBzdHJ1 Y3QgcG11IHBtdTsKPj4gK8KgwqDCoCBzdHJ1Y3QgZG1jX2h3X2luZm8gaW5mbzsKPj4gK8KgwqDC oCBzdHJ1Y3QgZG1jX2NvdW50ZXIgY291bnRlcnM7wqDCoMKgIC8qIHNhdmUgY291bnRlcnMgZnJv bSBodyAqLwo+PiArwqDCoMKgIGJvb2wgcG11X2VuYWJsZWQ7Cj4+ICvCoMKgwqAgc3BpbmxvY2tf dCBsb2NrO8KgwqDCoMKgwqDCoMKgIC8qIHByb3RlY3QgaHcgY291bnRlciAqLwo+PiArwqDCoMKg IHN0cnVjdCBkZXZpY2UgKmRldjsKPj4gK8KgwqDCoCBjaGFyICpuYW1lOwo+PiArwqDCoMKgIHN0 cnVjdMKgwqDCoCBobGlzdF9ub2RlIG5vZGU7Cj4+ICvCoMKgwqAgZW51bSBjcHVocF9zdGF0ZSBj cHVocF9zdGF0ZTsKPj4gK8KgwqDCoCBpbnQgY3B1O8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyog Zm9yIGNwdSBob3RwbHVnICovCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgZG1j X3BtdV9lbmFibGUoc3RydWN0IGRkcl9wbXUgKnBtdSkKPgo+IERvbid0IGJvdGhlciB3aXRoICJp bmxpbmUiIGluIC5jIGZpbGVzIC0gaXQncyBlZmZlY3RpdmVseSBqdXN0IG5vaXNlLCAKPiBzaW5j ZSB0aGUgY29tcGlsZXIgd2lsbCBtYWtlIGl0cyBvd24gZGVjaXNpb25zIGFueXdheS4KWWVzLCB5 b3UgYXJlIHJpZ2h0LiBJIHdpbGwgbWFrZSB0aGUgY2hhbmdlLgo+Cj4+ICt7Cj4+ICvCoMKgwqAg c3Bpbl9sb2NrKCZwbXUtPmxvY2spOwo+Cj4gWW91IHNob3VsZG4ndCBuZWVkIGxvY2tpbmcgLSBw ZXJmIGNvcmUgdGFrZXMgY2FyZSB0byBydW4gYWxsIHRoZSAKPiBjYWxsYmFja3Mgb24gZXZlbnQt PmNwdSwgYW5kIGV4cGVjdHMgdGhlIElSUSB0byBiZSBhZmZpbmUgdG8gdGhhdCBDUFUgCj4gYXMg d2VsbCAod2hpY2ggaXMgd2h5IHdlIG5lZWQgdG8gZG8gdGhlIHdob2xlIGhvdHBsdWcgdGhpbmcp LCBzbyAKPiBtdXR1YWwgZXhjbHVzaW9uIHNob3VsZCBiZSBpbmhlcmVudC4gRnVydGhlcm1vcmUs IGFzLWlzIHRoaXMgbG9ja2luZyAKPiBhbGwgbG9va3MgcmF0aGVyIGJyb2tlbiAtIGF0IGEgZ2xh bmNlIEkgY2FuIHNlZSBpdCBjYW4gZGVhZGxvY2sgdGhlIAo+IElSUSBoYW5kbGVyLCB3aGljaCBp cyBhbHNvIHJhY2lseSBhY2Nlc3NpbmcgUE1VIHN0YXRlIG91dHNpZGUgdGhlIGxvY2sgCj4gYW55 d2F5LCBzbyBJJ20ganVzdCBnb2luZyB0byBpZ25vcmUgaXQgZm9yIHRoZSByZXN0IG9mIHRoaXMg cmV2aWV3LgpPa2F5LCBJIGFncmVlIHdpdGggeW91LiBJIHdpbGwgZGVsZXRlIHRoZSBsb2NrIHJl bGV2YW50IGNvZGUuCj4KPj4gK8KgwqDCoCBpZiAoIXBtdS0+cG11X2VuYWJsZWQgJiYgcG11LT5p bmZvLm9wcy0+ZW5hYmxlKQo+PiArwqDCoMKgwqDCoMKgwqAgcG11LT5pbmZvLm9wcy0+ZW5hYmxl KCZwbXUtPmluZm8pOwo+PiArCj4+ICvCoMKgwqAgcG11LT5wbXVfZW5hYmxlZCA9IHRydWU7Cj4+ ICvCoMKgwqAgc3Bpbl91bmxvY2soJnBtdS0+bG9jayk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bmxpbmUgdm9pZCBkbWNfcG11X2Rpc2FibGUoc3RydWN0IGRkcl9wbXUgKnBtdSkKPj4gK3sKPj4g K8KgwqDCoCBzcGluX2xvY2soJnBtdS0+bG9jayk7Cj4+ICvCoMKgwqAgaWYgKHBtdS0+cG11X2Vu YWJsZWQgJiYgcG11LT5pbmZvLm9wcy0+ZGlzYWJsZSkKPj4gK8KgwqDCoMKgwqDCoMKgIHBtdS0+ aW5mby5vcHMtPmRpc2FibGUoJnBtdS0+aW5mbyk7Cj4+ICsKPj4gK8KgwqDCoCBwbXUtPnBtdV9l bmFibGVkID0gZmFsc2U7Cj4+ICvCoMKgwqAgc3Bpbl91bmxvY2soJnBtdS0+bG9jayk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBkZHJfY250X2FjY3VtdWxhdGUoc3RydWN0IGRk cl9wbXUgKnBtdSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgZG1jX2NvdW50ZXIgKmMpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGRtY19jb3Vu dGVyICpjbnRlciA9ICZwbXUtPmNvdW50ZXJzOwo+PiArwqDCoMKgIGludCBjaGFubl9uciA9IHBt dS0+aW5mby5jaGFubl9ucjsKPj4gK8KgwqDCoCBpbnQgaTsKPj4gKwo+PiArwqDCoMKgIGNudGVy LT5hbGxfY250ICs9IGMtPmFsbF9jbnQ7Cj4+ICvCoMKgwqAgY250ZXItPmFsbF9yZXEgKz0gYy0+ YWxsX3JlcTsKPj4gKwo+PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBjaGFubl9ucjsgaSsrKQo+ PiArwqDCoMKgwqDCoMKgwqAgY250ZXItPmNoYW5uZWxfY250W2ldICs9IGMtPmNoYW5uZWxfY250 W2ldOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBhbWxfZGRyX2NvbmZpZ19heGlfaWQoc3Ry dWN0IGRkcl9wbXUgKnBtdSwgaW50IGF4aV9pZCwgCj4+IGludCBjaGFubikKPj4gK3sKPj4gK8Kg wqDCoCBpZiAocG11LT5pbmZvLm9wcy0+Y29uZmlnX2F4aV9pZCkgewo+PiArwqDCoMKgwqDCoMKg wqAgc3Bpbl9sb2NrKCZwbXUtPmxvY2spOwo+PiArwqDCoMKgwqDCoMKgwqAgcG11LT5pbmZvLm9w cy0+Y29uZmlnX2F4aV9pZCgmcG11LT5pbmZvLCBheGlfaWQsIGNoYW5uKTsKPj4gK8KgwqDCoMKg wqDCoMKgIHNwaW5fdW5sb2NrKCZwbXUtPmxvY2spOwo+PiArwqDCoMKgIH0KPj4gK30KPj4gKwo+ PiArc3RhdGljIHZvaWQgYW1sX2Rkcl9zZXRfZmlsdGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVu dCwgdTggYXhpX2lkKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBkZHJfcG11ICpwbXUgPSB0b19k ZHJfcG11KGV2ZW50LT5wbXUpOwo+PiArwqDCoMKgIGludCBjaGFubjsKPj4gKwo+PiArwqDCoMKg IGlmIChldmVudC0+YXR0ci5jb25maWcgPiBBTExfQ0hBTl9DT1VOVEVSX0lEICYmCj4+ICvCoMKg wqDCoMKgwqDCoCBldmVudC0+YXR0ci5jb25maWcgPCBDT1VOVEVSX01BWF9JRCkgewo+PiArwqDC oMKgwqDCoMKgwqAgY2hhbm4gPSBldmVudC0+YXR0ci5jb25maWcgLSBDSEFOMV9DT1VOVEVSX0lE Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBhbWxfZGRyX2NvbmZpZ19heGlfaWQocG11LCBheGlf aWQsIGNoYW5uKTsKPj4gK8KgwqDCoCB9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9p ZCBkZHJfY250X2FkZGl0aW9uKHN0cnVjdCBkbWNfY291bnRlciAqc3VtLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRtY19jb3VudGVyICphZGQxLAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRtY19jb3Vu dGVyICphZGQyKQo+PiArewo+PiArwqDCoMKgIGludCBpOwo+PiArwqDCoMKgIHU2NCBjbnQxLCBj bnQyOwo+PiArCj4+ICvCoMKgwqAgc3VtLT5hbGxfY250ID0gYWRkMS0+YWxsX2NudCArIGFkZDIt PmFsbF9jbnQ7Cj4+ICvCoMKgwqAgc3VtLT5hbGxfcmVxID0gYWRkMS0+YWxsX3JlcSArIGFkZDIt PmFsbF9yZXE7Cj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOTkVMX05VTTsgaSsr KSB7Cj4KPiBBRkFJQ1MgdGhlIGNhbGxlciBrbm93cyB0aGUgYWN0dWFsIG51bWJlciBvZiBjaGFu bmVscywgc28gd2h5IG5vdCBwYXNzIAo+IHRoYXQgYXMgYW4gYXJndW1lbnQgdG8gc2F2ZSB1bm5l Y2Vzc2FyeSBvcGVyYXRpb25zPyBQbHVzIHRoZW4gdGhlcmUncyAKPiByZWFsbHkgbm8gcmVhc29u IGF0IGFsbCB0byBrZWVwIHRoZSByZWR1bmRhbnQgZGRyX2NudF9hY2N1bXVsYXRlKCkgCj4gaW1w bGVtZW50YXRpb24uCk9rYXksIEkgd2lsbCBtYWtlIHRoZSBjaGFuZ2VzLgo+Cj4+ICvCoMKgwqDC oMKgwqDCoCBjbnQxID0gYWRkMS0+Y2hhbm5lbF9jbnRbaV07Cj4+ICvCoMKgwqDCoMKgwqDCoCBj bnQyID0gYWRkMi0+Y2hhbm5lbF9jbnRbaV07Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHN1bS0+ Y2hhbm5lbF9jbnRbaV0gPSBjbnQxICsgY250MjsKPj4gK8KgwqDCoCB9Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyB2b2lkIGFtbF9kZHJfcGVyZl9ldmVudF91cGRhdGUoc3RydWN0IHBlcmZfZXZlbnQg KmV2ZW50KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBkZHJfcG11ICpwbXUgPSB0b19kZHJfcG11 KGV2ZW50LT5wbXUpOwo+PiArwqDCoMKgIHU2NCBuZXdfcmF3X2NvdW50ID0gMDsKPj4gK8KgwqDC oCBzdHJ1Y3QgZG1jX2NvdW50ZXIgZGMgPSB7MH0sIHN1bV9kYyA9IHswfTsKPj4gK8KgwqDCoCBp bnQgaWR4Owo+PiArCj4+ICvCoMKgwqAgc3Bpbl9sb2NrKCZwbXUtPmxvY2spOwo+PiArwqDCoMKg IC8qIGdldCB0aGUgcmVtYWluIGNvdW50ZXJzIGluIHJlZ2lzdGVyLiAqLwo+PiArwqDCoMKgIHBt dS0+aW5mby5vcHMtPmdldF9jb3VudGVycygmcG11LT5pbmZvLCAmZGMpOwo+PiArCj4+ICvCoMKg wqAgZGRyX2NudF9hZGRpdGlvbigmc3VtX2RjLCAmcG11LT5jb3VudGVycywgJmRjKTsKPj4gK8Kg wqDCoCBzcGluX3VubG9jaygmcG11LT5sb2NrKTsKPj4gKwo+PiArwqDCoMKgIHN3aXRjaCAoZXZl bnQtPmF0dHIuY29uZmlnKSB7Cj4+ICvCoMKgwqAgY2FzZSBBTExfQ0hBTl9DT1VOVEVSX0lEOgo+ PiArwqDCoMKgwqDCoMKgwqAgbmV3X3Jhd19jb3VudCA9IHN1bV9kYy5hbGxfY250Owo+PiArwqDC oMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqAgY2FzZSBDSEFOMV9DT1VOVEVSX0lEOgo+PiAr wqDCoMKgIGNhc2UgQ0hBTjJfQ09VTlRFUl9JRDoKPj4gK8KgwqDCoCBjYXNlIENIQU4zX0NPVU5U RVJfSUQ6Cj4+ICvCoMKgwqAgY2FzZSBDSEFONF9DT1VOVEVSX0lEOgo+PiArwqDCoMKgIGNhc2Ug Q0hBTjVfQ09VTlRFUl9JRDoKPj4gK8KgwqDCoCBjYXNlIENIQU42X0NPVU5URVJfSUQ6Cj4+ICvC oMKgwqAgY2FzZSBDSEFON19DT1VOVEVSX0lEOgo+PiArwqDCoMKgIGNhc2UgQ0hBTjhfQ09VTlRF Ul9JRDoKPj4gK8KgwqDCoMKgwqDCoMKgIGlkeCA9IGV2ZW50LT5hdHRyLmNvbmZpZyAtIENIQU4x X0NPVU5URVJfSUQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCBuZXdfcmF3X2NvdW50ID0gc3VtX2RjLmNo YW5uZWxfY250W2lkeF07Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCBkZWZh dWx0Ogo+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihwbXUtPmRldiwgInVuc3VwcG9ydGVkIGNv dW50ZXIgaWRcbiAiKTsKPgo+IERvbid0IHByaW50IG1lc3NhZ2VzIHRoYXQgb25seSBpbmRpY2F0 ZSBhIGJ1ZyBpbiB0aGUgZHJpdmVyIC0gYW4gCj4gaW52YWxpZCBjb25maWcgc2hvdWxkIG5ldmVy IGdldCBwYXN0IGV2ZW50X2luaXQuCk9rYXksIEkgd2lsbCBtYWtlIHRoZSBjaGFuZ2VzLgo+Cj4+ ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgbG9jYWw2NF9zZXQoJmV2ZW50LT5jb3VudCwgbmV3 X3Jhd19jb3VudCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYW1sX2Rkcl9wZXJmX2V2ZW50 X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBk ZHJfcG11ICpwbXUgPSB0b19kZHJfcG11KGV2ZW50LT5wbXUpOwo+PiArwqDCoMKgIHN0cnVjdCBo d19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Owo+PiArwqDCoMKgIHN0cnVjdCBwZXJmX2V2 ZW50ICpzaWJsaW5nOwo+PiArwqDCoMKgIHU2NCBjb25maWcxID0gZXZlbnQtPmF0dHIuY29uZmln MTsKPj4gK8KgwqDCoCBpbnQgaSwgY291bnQgPSAwOwo+PiArCj4+ICvCoMKgwqAgaWYgKGV2ZW50 LT5hdHRyLnR5cGUgIT0gZXZlbnQtPnBtdS0+dHlwZSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biAtRU5PRU5UOwo+PiArCj4+ICvCoMKgwqAgaWYgKGlzX3NhbXBsaW5nX2V2ZW50KGV2ZW50KSB8 fCBldmVudC0+YXR0YWNoX3N0YXRlICYgCj4+IFBFUkZfQVRUQUNIX1RBU0spCj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gLUVPUE5PVFNVUFA7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZXZlbnQtPmNw dSA8IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGRldl93YXJuKHBtdS0+ZGV2LCAiQ2FuJ3QgcHJv dmlkZSBwZXItdGFzayBkYXRhIVxuIik7Cj4KPiBEb24ndCBsb2cgYSB3YXJuaW5nIChvciBpbmRl ZWQgYW55dGhpbmcsIHVzdWFsbHkpIGZvciBzb21ldGhpbmcgd2hpY2ggCj4gaXMgcGVyZmVjdGx5 IHZhbGlkIGZvciBhIHVzZXIgdG8gdHJ5LgpPa2F5LCBJIHdpbGwgbWFrZSB0aGUgY2hhbmdlcy4K Pgo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FT1BOT1RTVVBQOwo+PiArwqDCoMKgIH0KPj4g Kwo+PiArwqDCoMKgIGlmIChldmVudC0+Z3JvdXBfbGVhZGVyLT5wbXUgIT0gZXZlbnQtPnBtdSAm Jgo+PiArwqDCoMKgwqDCoMKgwqAgIWlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50LT5ncm91cF9sZWFk ZXIpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCBp ZiAoKGV2ZW50KS0+Z3JvdXBfbGVhZGVyID09IChldmVudCkpCj4KPiBSYW5kb20gcGFyZW50aGVz ZXM/Ckkgd2lsbCByZW1vdmUgdGhlIHBhcmVudGhlc2VzLgo+Cj4+ICvCoMKgwqDCoMKgwqDCoCBs aXN0X2Zvcl9lYWNoX2VudHJ5KChzaWJsaW5nKSwgJihldmVudCktPnNpYmxpbmdfbGlzdCwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpYmxpbmdfbGlzdCkgewo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoc2libGluZy0+cG11ICE9IGV2ZW50LT5wbXUg JiYKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAhaXNfc29mdHdhcmVfZXZlbnQo c2libGluZykpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5W QUw7Cj4KPiBJdCBsb29rcyBsaWtlIHlvdSBkb24ndCBoYXZlIG11bHRpcGxlIHNldHMgb2YgaGFy ZHdhcmUgY291bnRlcnM7IGlmIHNvIAo+IHlvdSdkIGFsc28gbmVlZCB0byByZWplY3QgdGhlIGdy b3VwIGlmIGl0IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZXZlbnQgCj4gZm9yIHRoaXMgUE1VLgpJ IGhhdmUgNSBIVyBjb3VudGVycyBhbmQgNSByZWxldmFudCBldmVudHMuIERvIHlvdSBtZWFuIEkg bmVlZCByZWplY3QgCnRoZSBncm91cD8KPgo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvC oMKgwqAgLyogY2hlY2sgaWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlzIHRvbyBtdWNoICov Cj4+ICvCoMKgwqAgaWYgKGV2ZW50LT5hdHRyLmNvbmZpZyAhPSBBTExfQ0hBTl9DT1VOVEVSX0lE KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgTUFYX0JJVE1BUDsgaSsrKSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChjb25maWcxICYgMHgxICYmICsrY291bnQg PiBNQVhfQVhJX1BPUlRTX09GX0NIQU5ORUwpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBkZXZfd2FybihwbXUtPmRldiwgIlRvbyBtYW55IHBhcmFtZXRlcnMgYXBwZW5kIHRo ZSAKPj4gZXZlbnRcbiIpOwo+Cj4gQWdhaW4sIGl0J3MgcXVlc3Rpb25hYmxlIHdoZXRoZXIgdGhp cyBpcyBhIHdhcm5pbmcgY29uZGl0aW9uLgo+Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FT1BOT1RTVVBQOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uZmlnMSA+Pj0gMTsKPj4gK8KgwqDCoMKg wqDCoMKgIH0KPgo+IEFsc28gY29uc2lkZXIgdGhlIGh3ZWlnaHQ2NCgpIGhlbHBlciByYXRoZXIg dGhhbiB0aGlzIHdob2xlIGxvb3AuCmh3ZWlnaHQ2NCgpIGlzIGdyZWF0ISBJIGxvb2tlZCBpbGwt aW5mb3JtZWQuCj4KPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBldmVudC0+Y3B1ID0gcG11 LT5jcHU7Cj4+ICvCoMKgwqAgaHdjLT5pZHggPSAtMTsKPgo+IFlvdSBuZXZlciByZWFkIGh3Yy0+ aWR4IGFueXdoZXJlLCBzbyBpdCdzIGEgYml0IHBvaW50bGVzcyB0byBzZXQgaXQuCj4KPj4gKwo+ PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBhbWxfZGRyX3Bl cmZfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgCj4+IGZsYWdzKQo+ PiArewo+PiArwqDCoMKgIHN0cnVjdCBkZHJfcG11ICpwbXUgPSB0b19kZHJfcG11KGV2ZW50LT5w bXUpOwo+PiArwqDCoMKgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Owo+ PiArCj4+ICvCoMKgwqAgbG9jYWw2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgMCk7Cj4+ICvCoMKg wqAgbG9jYWw2NF9zZXQoJmV2ZW50LT5jb3VudCwgMCk7Cj4+ICvCoMKgwqAgaHdjLT5zdGF0ZSA9 IDA7Cj4KPiBEaXR0byBmb3IgaHdjLT5wcmV2X2NvdW50IGFuZCBod2MtPnN0YXRlLiBUaGUgcG9p bnQgb2YgZXZlbnQtPmh3IGlzIHRvIAo+IGhvbGQgZHJpdmVyLWludGVybmFsIGRhdGEsIHNvIGlm IHlvdSBkb24ndCBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgYW55IAo+IHBlci1ldmVudCBkYXRhIGJl eW9uZCB0aGUgY29uZmlnIHlvdSBjYW4gaWdub3JlIGl0IGVudGlyZWx5LgpPa2F5LCBJIGhhdmUg bm8gaW50ZXJuYWwgZGF0YSB0byBiZSBzYXZlZC4gaHdjIHJlbGV2YW50IG9wZXJhdGlvbiB3aWxs IApiZSBkZWxldGVkLgo+Cj4+ICsKPj4gK8KgwqDCoCBtZW1zZXQoJnBtdS0+Y291bnRlcnMsIDAs IHNpemVvZihwbXUtPmNvdW50ZXJzKSk7Cj4+ICvCoMKgwqAgZG1jX3BtdV9lbmFibGUocG11KTsK Pj4gK30KPj4gKwo+PiArc3RhdGljIGludCBhbWxfZGRyX3BlcmZfZXZlbnRfYWRkKHN0cnVjdCBw ZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBod19w ZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Owo+PiArwqDCoMKgIHU2NCBjb25maWcxID0gZXZl bnQtPmF0dHIuY29uZmlnMTsKPj4gK8KgwqDCoCBpbnQgaSwgY291bnQgPSAwOwo+PiArCj4+ICvC oMKgwqAgaHdjLT5pZHggPSBldmVudC0+YXR0ci5jb25maWc7Cj4+ICvCoMKgwqAgaHdjLT5zdGF0 ZSB8PSBQRVJGX0hFU19TVE9QUEVEOwo+PiArCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICog Zm9yIGluZGl2aWR1YWwgY2hhbm5lbCBldmVudCAsIGNoZWNrIGlmIHRoZSBudW1iZXIgb2YgYXhp X2lkCj4+ICvCoMKgwqDCoCAqIHN1cHBvcnRlZCBpcyBiZXlvbmQgdGhlIG1heAo+PiArwqDCoMKg wqAgKi8KPgo+IEFnYWluLCB5b3UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGluZ3MgdGhhdCBoYXZl IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgCj4gYnkgZXZlbnRfaW5pdC4KPgo+IEhvd2V2ZXIgaXQg bG9va3MgbGlrZSB5b3UgcHJvYmFibHkgKnNob3VsZCogYmUgY2hlY2tpbmcgd2hldGhlciAKPiB0 aGVyZSdzIGFuIGV2ZW50IGNvdW50aW5nIG9uIHRoZSByZWxldmFudCBQTVUgYWxyZWFkeSAtIEFG QUlDUyB0aGlzIGlzIAo+IGp1c3QgZ29pbmcgdG8gYmxpbmRseSByZXByb2dyYW0gdGhlIGhhcmR3 YXJlIGFuZCBjb3JydXB0IHRoZSBvdGhlciAKPiBldmVudCdzIGNvdW50LgpHb29kIHN1Z2dlc3Rp b24uCj4KPj4gK8KgwqDCoCBpZiAoZXZlbnQtPmF0dHIuY29uZmlnICE9IEFMTF9DSEFOX0NPVU5U RVJfSUQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBNQVhfQklUTUFQOyBp KyspIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGNvbmZpZzEgJiAweDEpIHsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhbWxfZGRyX3NldF9maWx0ZXIoZXZlbnQs IGkpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgrK2NvdW50ID4gTUFY X0FYSV9QT1JUU19PRl9DSEFOTkVMKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBjb25maWcxID4+PSAxOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+ Cj4gQ29uc2lkZXIgdGhlIGZvcl9lYWNoX3NldF9iaXQoKSBoZWxwZXIuCk9rYXkuCj4KPj4gK8Kg wqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZmxhZ3MgJiBQRVJGX0VGX1NUQVJUKQo+PiArwqDC oMKgwqDCoMKgwqAgYW1sX2Rkcl9wZXJmX2V2ZW50X3N0YXJ0KGV2ZW50LCBmbGFncyk7Cj4+ICsK Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgYW1sX2Rkcl9w ZXJmX2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgCj4+IGZsYWdzKQo+ PiArewo+PiArwqDCoMKgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Owo+ PiArwqDCoMKgIHN0cnVjdCBkZHJfcG11ICpwbXUgPSB0b19kZHJfcG11KGV2ZW50LT5wbXUpOwo+ PiArCj4+ICvCoMKgwqAgaWYgKGZsYWdzICYgUEVSRl9FRl9VUERBVEUpCj4+ICvCoMKgwqDCoMKg wqDCoCBhbWxfZGRyX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50KTsKPj4gKwo+PiArwqDCoMKgIGRt Y19wbXVfZGlzYWJsZShwbXUpOwo+PiArwqDCoMKgIGh3Yy0+c3RhdGUgfD0gUEVSRl9IRVNfU1RP UFBFRDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgYW1sX2Rkcl9wZXJmX2V2ZW50X2RlbChz dHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1 Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKPj4gKwo+PiArwqDCoMKgIGFtbF9k ZHJfcGVyZl9ldmVudF9zdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSk7Cj4+ICvCoMKgwqAgaHdj LT5pZHggPSAtMTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHNzaXplX3QgYW1sX2Rkcl9wZXJmX2Nw dW1hc2tfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjaGFyICpidWYpCj4+ICt7Cj4+ ICvCoMKgwqAgc3RydWN0IGRkcl9wbXUgKnBtdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+PiAr Cj4+ICvCoMKgwqAgcmV0dXJuIGNwdW1hcF9wcmludF90b19wYWdlYnVmKHRydWUsIGJ1ZiwgY3B1 bWFza19vZihwbXUtPmNwdSkpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGRldmljZV9h dHRyaWJ1dGUgYW1sX2Rkcl9wZXJmX2NwdW1hc2tfYXR0ciA9Cj4+ICtfX0FUVFIoY3B1bWFzaywg MDQ0NCwgYW1sX2Rkcl9wZXJmX2NwdW1hc2tfc2hvdywgTlVMTCk7Cj4+ICsKPj4gK3N0YXRpYyBz dHJ1Y3QgYXR0cmlidXRlICphbWxfZGRyX3BlcmZfY3B1bWFza19hdHRyc1tdID0gewo+PiArwqDC oMKgICZhbWxfZGRyX3BlcmZfY3B1bWFza19hdHRyLmF0dHIsCj4+ICvCoMKgwqAgTlVMTCwKPj4g K307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRkcl9wZXJm X2NwdW1hc2tfYXR0cl9ncm91cCA9IHsKPj4gK8KgwqDCoCAuYXR0cnMgPSBhbWxfZGRyX3BlcmZf Y3B1bWFza19hdHRycywKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBzc2l6ZV90Cj4+ICtwbXVfZXZl bnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRy LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2hhciAqcGFnZSkKPj4gK3sKPj4gK8KgwqDCoCBz dHJ1Y3QgcGVyZl9wbXVfZXZlbnRzX2F0dHIgKnBtdV9hdHRyOwo+PiArCj4+ICvCoMKgwqAgcG11 X2F0dHIgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHBlcmZfcG11X2V2ZW50c19hdHRyLCBh dHRyKTsKPj4gK8KgwqDCoCByZXR1cm4gc3ByaW50ZihwYWdlLCAiZXZlbnQ9MHglMDJsbHhcbiIs IHBtdV9hdHRyLT5pZCk7Cj4KPiBVc2Ugc3lzZnNfZW1pdCgpIGZvciBhbGwgb2YgdGhlc2UuCk9r YXksIGl0IGxvb2tzIGxpa2UgYmV0dGVyLiBUQkggSSBuZXZlciBrbm93IGl0IGJlZm9yZSB5b3Ug bWVudGlvbi4KPgo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3NpemVfdAo+PiArZXZlbnRfc2hvd191 bml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4+ ICvCoMKgwqDCoMKgwqDCoCBjaGFyICpwYWdlKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBwZXJm X3BtdV9ldmVudHNfYXR0ciAqcG11X2F0dHI7Cj4+ICsKPj4gK8KgwqDCoCBwbXVfYXR0ciA9IGNv bnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgcGVyZl9wbXVfZXZlbnRzX2F0dHIsIGF0dHIpOwo+PiAr wqDCoMKgIHJldHVybiBzcHJpbnRmKHBhZ2UsICJNQlxuIik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBzc2l6ZV90Cj4+ICtldmVudF9zaG93X3NjYWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgIGNoYXIgKnBhZ2Up Cj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IHBlcmZfcG11X2V2ZW50c19hdHRyICpwbXVfYXR0cjsK Pj4gKwo+PiArwqDCoMKgIHBtdV9hdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBwZXJm X3BtdV9ldmVudHNfYXR0ciwgYXR0cik7Cj4+ICsKPj4gK8KgwqDCoCAvKiBvbmUgY291bnQgPSAx NmJ5dGUgPSAxLjUyNTg3ODkwNjI1ZS0wNSBNQiAqLwo+PiArwqDCoMKgIHJldHVybiBzcHJpbnRm KHBhZ2UsICIxLjUyNTg3ODkwNjI1ZS0wNVxuIik7Cj4+ICt9Cj4+ICsKPj4gKyNkZWZpbmUgQU1M X0REUl9QTVVfRVZFTlRfQVRUUihfbmFtZSwgX2lkKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBcCj4+ICt7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4+ICvCoMKgwqAgLmF0dHIgPSBfX0FUVFIoX25h bWUsIDA0NDQsIHBtdV9ldmVudF9zaG93LCBOVUxMKSzCoMKgwqDCoMKgwqDCoCBcCj4+ICvCoMKg wqAgLmlkID0gX2lkLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBcCj4+ICt9Cj4+ICsKPj4gKyNkZWZpbmUgQU1MX0REUl9QTVVfRVZFTlRfVU5J VF9BVFRSKF9uYW1lKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4+ICvCoMKgwqAg X19BVFRSKF9uYW1lLnVuaXQsIDA0NDQsIGV2ZW50X3Nob3dfdW5pdCwgTlVMTCkKPj4gKwo+PiAr I2RlZmluZSBBTUxfRERSX1BNVV9FVkVOVF9TQ0FMRV9BVFRSKF9uYW1lKcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBcCj4+ICvCoMKgwqAgX19BVFRSKF9uYW1lLnNjYWxlLCAwNDQ0LCBl dmVudF9zaG93X3NjYWxlLCBOVUxMKQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGRldmljZV9hdHRy aWJ1dGUgZXZlbnRfdW5pdF9hdHRyc1tdID0gewo+PiArwqDCoMKgIEFNTF9ERFJfUE1VX0VWRU5U X1VOSVRfQVRUUih0b3RhbF9yd19ieXRlcyksCj4+ICvCoMKgwqAgQU1MX0REUl9QTVVfRVZFTlRf VU5JVF9BVFRSKGNoYW5fMV9yd19ieXRlcyksCj4+ICvCoMKgwqAgQU1MX0REUl9QTVVfRVZFTlRf VU5JVF9BVFRSKGNoYW5fMl9yd19ieXRlcyksCj4+ICvCoMKgwqAgQU1MX0REUl9QTVVfRVZFTlRf VU5JVF9BVFRSKGNoYW5fM19yd19ieXRlcyksCj4+ICvCoMKgwqAgQU1MX0REUl9QTVVfRVZFTlRf VU5JVF9BVFRSKGNoYW5fNF9yd19ieXRlcyksCj4+ICvCoMKgwqAgQU1MX0REUl9QTVVfRVZFTlRf VU5JVF9BVFRSKGNoYW5fNV9yd19ieXRlcyksCj4+ICvCoMKgwqAgQU1MX0REUl9QTVVfRVZFTlRf VU5JVF9BVFRSKGNoYW5fNl9yd19ieXRlcyksCj4+ICvCoMKgwqAgQU1MX0REUl9QTVVfRVZFTlRf VU5JVF9BVFRSKGNoYW5fN19yd19ieXRlcyksCj4+ICvCoMKgwqAgQU1MX0REUl9QTVVfRVZFTlRf VU5JVF9BVFRSKGNoYW5fOF9yd19ieXRlcyksCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgZXZlbnRfc2NhbGVfYXR0cnNbXSA9IHsKPj4gK8KgwqDCoCBBTUxf RERSX1BNVV9FVkVOVF9TQ0FMRV9BVFRSKHRvdGFsX3J3X2J5dGVzKSwKPj4gK8KgwqDCoCBBTUxf RERSX1BNVV9FVkVOVF9TQ0FMRV9BVFRSKGNoYW5fMV9yd19ieXRlcyksCj4+ICvCoMKgwqAgQU1M X0REUl9QTVVfRVZFTlRfU0NBTEVfQVRUUihjaGFuXzJfcndfYnl0ZXMpLAo+PiArwqDCoMKgIEFN TF9ERFJfUE1VX0VWRU5UX1NDQUxFX0FUVFIoY2hhbl8zX3J3X2J5dGVzKSwKPj4gK8KgwqDCoCBB TUxfRERSX1BNVV9FVkVOVF9TQ0FMRV9BVFRSKGNoYW5fNF9yd19ieXRlcyksCj4+ICvCoMKgwqAg QU1MX0REUl9QTVVfRVZFTlRfU0NBTEVfQVRUUihjaGFuXzVfcndfYnl0ZXMpLAo+PiArwqDCoMKg IEFNTF9ERFJfUE1VX0VWRU5UX1NDQUxFX0FUVFIoY2hhbl82X3J3X2J5dGVzKSwKPj4gK8KgwqDC oCBBTUxfRERSX1BNVV9FVkVOVF9TQ0FMRV9BVFRSKGNoYW5fN19yd19ieXRlcyksCj4+ICvCoMKg wqAgQU1MX0REUl9QTVVfRVZFTlRfU0NBTEVfQVRUUihjaGFuXzhfcndfYnl0ZXMpLAo+PiArfTsK Pj4gKwo+PiArc3RhdGljIHN0cnVjdCBwZXJmX3BtdV9ldmVudHNfYXR0ciBldmVudF9hdHRyc1td ID0gewo+PiArwqDCoMKgIEFNTF9ERFJfUE1VX0VWRU5UX0FUVFIodG90YWxfcndfYnl0ZXMsIEFM TF9DSEFOX0NPVU5URVJfSUQpLAo+PiArwqDCoMKgIEFNTF9ERFJfUE1VX0VWRU5UX0FUVFIoY2hh bl8xX3J3X2J5dGVzLCBDSEFOMV9DT1VOVEVSX0lEKSwKPj4gK8KgwqDCoCBBTUxfRERSX1BNVV9F VkVOVF9BVFRSKGNoYW5fMl9yd19ieXRlcywgQ0hBTjJfQ09VTlRFUl9JRCksCj4+ICvCoMKgwqAg QU1MX0REUl9QTVVfRVZFTlRfQVRUUihjaGFuXzNfcndfYnl0ZXMsIENIQU4zX0NPVU5URVJfSUQp LAo+PiArwqDCoMKgIEFNTF9ERFJfUE1VX0VWRU5UX0FUVFIoY2hhbl80X3J3X2J5dGVzLCBDSEFO NF9DT1VOVEVSX0lEKSwKPj4gK8KgwqDCoCBBTUxfRERSX1BNVV9FVkVOVF9BVFRSKGNoYW5fNV9y d19ieXRlcywgQ0hBTjVfQ09VTlRFUl9JRCksCj4+ICvCoMKgwqAgQU1MX0REUl9QTVVfRVZFTlRf QVRUUihjaGFuXzZfcndfYnl0ZXMsIENIQU42X0NPVU5URVJfSUQpLAo+PiArwqDCoMKgIEFNTF9E RFJfUE1VX0VWRU5UX0FUVFIoY2hhbl83X3J3X2J5dGVzLCBDSEFON19DT1VOVEVSX0lEKSwKPj4g K8KgwqDCoCBBTUxfRERSX1BNVV9FVkVOVF9BVFRSKGNoYW5fOF9yd19ieXRlcywgQ0hBTjhfQ09V TlRFUl9JRCksCj4+ICt9Owo+PiArCj4+ICsvKiB0aHJlZSBhdHRycyBhcmUgY29tYmluZWQgYW4g ZXZlbnQgKi8KPj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZHJfcGVyZl9ldmVudHNfYXR0 cnNbQ09VTlRFUl9NQVhfSUQgKiAzXTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVf Z3JvdXAgZGRyX3BlcmZfZXZlbnRzX2F0dHJfZ3JvdXAgPSB7Cj4+ICvCoMKgwqAgLm5hbWUgPSAi ZXZlbnRzIiwKPj4gK8KgwqDCoCAuYXR0cnMgPSBkZHJfcGVyZl9ldmVudHNfYXR0cnMsCj4+ICt9 Owo+PiArCj4+ICsvKiBhbiBhdHRyIHJlcHJlc2VudHMgYXhpIGlkLCB0aGUgbWF4IGlkIGlzIGxl c3MgdGhhbiAyNTYgKi8KPj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZHJfcGVyZl9mb3Jt YXRfYXR0cnNbMjU2XTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZGRy X3BlcmZfZm9ybWF0X2F0dHJfZ3JvdXAgPSB7Cj4+ICvCoMKgwqAgLm5hbWUgPSAiZm9ybWF0IiwK Pj4gK8KgwqDCoCAuYXR0cnMgPSBkZHJfcGVyZl9mb3JtYXRfYXR0cnMsCj4+ICt9Owo+PiArCj4+ ICtzdGF0aWMgc3NpemVfdCBhbWxfZGRyX3BlcmZfaWRlbnRpZmllcl9zaG93KHN0cnVjdCBkZXZp Y2UgKmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNoYXIgKnBhZ2UpCj4+ICt7Cj4+ICvCoMKgwqAg c3RydWN0IGRkcl9wbXUgKnBtdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+PiArCj4+ICvCoMKg wqAgcmV0dXJuIHNwcmludGYocGFnZSwgIiVzXG4iLCBwbXUtPm5hbWUpOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgdW1vZGVfdCBhbWxfZGRyX3BlcmZfaWRlbnRpZmllcl9hdHRyX3Zpc2libGUoc3Ry dWN0IGtvYmplY3QgCj4+ICprb2JqLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IG4p Cj4+ICt7Cj4+ICvCoMKgwqAgcmV0dXJuIGF0dHItPm1vZGU7Cj4+ICt9Cj4KPiBJZiB5b3UncmUg bm90IGdvaW5nIHRvIG92ZXJyaWRlIHRoZSBzdGF0aWMgbW9kZSB0aGVuIHlvdSBkb24ndCBuZWVk IHRvIAo+IGltcGxlbWVudCAuaXNfdmlzaWJsZSBhdCBhbGwuCj4KPj4gKwo+PiArc3RhdGljIHN0 cnVjdCBkZXZpY2VfYXR0cmlidXRlIGFtbF9kZHJfcGVyZl9pZGVudGlmaWVyX2F0dHIgPQo+PiAr X19BVFRSKGlkZW50aWZpZXIsIDA0NDQsIGFtbF9kZHJfcGVyZl9pZGVudGlmaWVyX3Nob3csIE5V TEwpOwo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYW1sX2Rkcl9wZXJmX2lkZW50 aWZpZXJfYXR0cnNbXSA9IHsKPj4gK8KgwqDCoCAmYW1sX2Rkcl9wZXJmX2lkZW50aWZpZXJfYXR0 ci5hdHRyLAo+PiArwqDCoMKgIE5VTEwsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGF0dHJpYnV0ZV9ncm91cCBkZHJfcGVyZl9pZGVudGlmaWVyX2F0dHJfZ3JvdXAgPSB7Cj4+ ICvCoMKgwqAgLmF0dHJzID0gYW1sX2Rkcl9wZXJmX2lkZW50aWZpZXJfYXR0cnMsCj4+ICvCoMKg wqAgLmlzX3Zpc2libGUgPSBhbWxfZGRyX3BlcmZfaWRlbnRpZmllcl9hdHRyX3Zpc2libGUsCj4+ ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqYXR0cl9n cm91cHNbXSA9IHsKPj4gK8KgwqDCoCAmZGRyX3BlcmZfZXZlbnRzX2F0dHJfZ3JvdXAsCj4+ICvC oMKgwqAgJmRkcl9wZXJmX2Zvcm1hdF9hdHRyX2dyb3VwLAo+PiArwqDCoMKgICZkZHJfcGVyZl9j cHVtYXNrX2F0dHJfZ3JvdXAsCj4+ICvCoMKgwqAgJmRkcl9wZXJmX2lkZW50aWZpZXJfYXR0cl9n cm91cCwKPj4gK8KgwqDCoCBOVUxMLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGlycXJldHVybl90 IGRtY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCj4+ICt7Cj4+ICvCoMKgwqAg c3RydWN0IGRtY19od19pbmZvICppbmZvID0gZGV2X2lkOwo+PiArwqDCoMKgIHN0cnVjdCBkZHJf cG11ICpwbXU7Cj4+ICvCoMKgwqAgc3RydWN0IGRtY19jb3VudGVyIGNvdW50ZXJzOwo+PiArCj4+ ICvCoMKgwqAgaWYgKGlycSAhPSBpbmZvLT5pcnFfbnVtKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIElSUV9IQU5ETEVEOwo+Cj4gSG93IGNvdWxkIHRoYXQgZXZlbiBoYXBwZW4/IEFuZCBlaXRo ZXIgd2F5LCBjbGFpbWluZyB0byBoYXZlIGhhbmRsZWQgCj4gaXQgaXMgY2xlYXJseSB1bnRydWUu CllvdSBhcmUgcmlnaHQuCj4KPj4gKwo+PiArwqDCoMKgIHBtdSA9IGh3X2luZm9fdG9fcG11KGlu Zm8pOwo+PiArwqDCoMKgIFdBUk5fT04oIWluZm8tPm9wcy0+aXJxX2hhbmRsZXIpOwo+Cj4gV2h5 PyBJdCdzIGFuIG9idmlvdXMgZHJpdmVyIGJ1ZywgYW5kIGV2ZW4gaWYgaXQgd2FzIHRoZSBjYXNl IHRoZW4gCj4geW91J2QgZ2V0IGp1c3QgYXMgZ29vZCBhIGJhY2t0cmFjZSBmcm9tIHRoZSBjcmFz aCB3aGVuIHlvdSAKPiBzdWJzZXF1ZW50bHkgY2FsbCBpdC4KSSB0aGluayBCVUcoKSBpcyBtdWNo IGJldHRlci4KPgo+PiArCj4+ICvCoMKgwqAgaWYgKHBtdS0+cG11X2VuYWJsZWQpIHsKPj4gK8Kg wqDCoMKgwqDCoMKgIHNwaW5fbG9jaygmcG11LT5sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlm IChpbmZvLT5vcHMtPmlycV9oYW5kbGVyKGluZm8sICZjb3VudGVycykgIT0gMCkgewo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzcGluX3VubG9jaygmcG11LT5sb2NrKTsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqDC oMKgwqDCoCBkZHJfY250X2FjY3VtdWxhdGUocG11LCAmY291bnRlcnMpOwo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoCAvKgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIHRoZSB0aW1lciBpbnRlcnJ1cHQg b25seSBzdXBwcnQKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBvbmUgc2hvdCBtb2RlLCB3ZSBoYXZl IHRvIHJlLWVuYWJsZQo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIGl0IGluIElTUiB0byBzdXBwb3J0 IGNvbnRpbnVlIG1vZGUuCj4+ICvCoMKgwqDCoMKgwqDCoMKgICovCj4+ICvCoMKgwqDCoMKgwqDC oCBpbmZvLT5vcHMtPmVuYWJsZShpbmZvKTsKPgo+IENvdWxkbid0IHRoZSAuaXJxX2hhbmRsZXIg cm91dGluZSBkbyB0aGF0IGZvciBpdHNlbGYgaWYgaXQgbmVlZHMgdG8/IAo+IFRCSCB0aGlzIHdo b2xlIGV4dHJhIGxheWVyIG9mIGFic3RyYWN0aW9uIGlzIGhhcmQgdG8gcmVhc29uIGFib3V0IHdo ZW4gCj4gaXQgb25seSBoYXMgb25lIHVzZXIuIEhvdyBzb29uIGFyZSB5b3UgZ29pbmcgdG8gYmUg YWRkaW5nIG1vcmUgCj4gZGlmZmVyZW50IEREUiBQTVUgYmFja2VuZHMgd2hpY2ggbWlnaHQgbWFr ZSBpdCBtYWtlIGEgYml0IG1vcmUgc2Vuc2U/CgpZZXMsIHRoZXJlIGFyZSBzb21lIEREUiBQTVUg YmFja2VuZHMgd291bGQgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4gSSAKd2lsbCBjaGFuZ2UgdGhl IGNvZGUgbG9naWMgdG8gbWFrZSBpdCBjbGVhci4KCj4KPj4gK8KgwqDCoMKgwqDCoMKgIHNwaW5f dW5sb2NrKCZwbXUtPmxvY2spOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGRldl9kYmco cG11LT5kZXYsICJjb3VudHM6ICVsbHUgJWxsdSAlbGx1LCAlbGx1LCAlbGx1LCAlbGx1XHRcdCIK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgInN1bTogJWxsdSAlbGx1ICVsbHUsICVsbHUsICVs bHUsICVsbHVcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvdW50ZXJzLmFsbF9yZXEs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvdW50ZXJzLmFsbF9jbnQsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGNvdW50ZXJzLmNoYW5uZWxfY250WzBdLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjb3VudGVycy5jaGFubmVsX2NudFsxXSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY291bnRlcnMuY2hhbm5lbF9jbnRbMl0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNvdW50ZXJzLmNoYW5uZWxfY250WzNdLAo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHBtdS0+Y291bnRlcnMuYWxsX3JlcSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcG11LT5j b3VudGVycy5hbGxfY250LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbXUtPmNvdW50ZXJz LmNoYW5uZWxfY250WzBdLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbXUtPmNvdW50ZXJz LmNoYW5uZWxfY250WzFdLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbXUtPmNvdW50ZXJz LmNoYW5uZWxfY250WzJdLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbXUtPmNvdW50ZXJz LmNoYW5uZWxfY250WzNdKTsKPj4gK291dDoKPj4gK8KgwqDCoCByZXR1cm4gSVJRX0hBTkRMRUQ7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZGRyX3BlcmZfb2ZmbGluZV9jcHUodW5zaWduZWQg aW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgCj4+ICpub2RlKQo+PiArewo+PiArwqDCoMKgIHN0 cnVjdCBkZHJfcG11ICpwbXUgPSBobGlzdF9lbnRyeV9zYWZlKG5vZGUsIHN0cnVjdCBkZHJfcG11 LCBub2RlKTsKPj4gK8KgwqDCoCBpbnQgdGFyZ2V0Owo+PiArCj4+ICvCoMKgwqAgaWYgKGNwdSAh PSBwbXUtPmNwdSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiArCj4+ICvCoMKgwqAg dGFyZ2V0ID0gY3B1bWFza19hbnlfYnV0KGNwdV9vbmxpbmVfbWFzaywgY3B1KTsKPj4gK8KgwqDC oCBpZiAodGFyZ2V0ID49IG5yX2NwdV9pZHMpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsK Pj4gKwo+PiArwqDCoMKgIHBlcmZfcG11X21pZ3JhdGVfY29udGV4dCgmcG11LT5wbXUsIGNwdSwg dGFyZ2V0KTsKPj4gK8KgwqDCoCBwbXUtPmNwdSA9IHRhcmdldDsKPj4gKwo+PiArwqDCoMKgIFdB Uk5fT04oaXJxX3NldF9hZmZpbml0eV9oaW50KHBtdS0+aW5mby5pcnFfbnVtLCAKPj4gY3B1bWFz a19vZihwbXUtPmNwdSkpKTsKPgo+IFRoaXMgaXMgd3JvbmcsIGl0IG5lZWRzIHRvIGJlIGlycV9z ZXRfYWZmaW5pdHkoKS4KCk9rYXksIENvdWxkIHlvdSBwbGVhc2UgdGVsbCB3aGF0IGlzIHRoZSBt YWpvciBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byAKQVBJPwoKPgo+PiArCj4+ICvCoMKgwqAg cmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZGRyX3BtdV9nZXRfaHdfaW5mbyhz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN0cnVjdCBkbWNfaHdfaW5mbyAqaW5mbykKPj4gK3sKPj4gK8KgwqDCoCBp bnQgcmV0ID0gLUVJTlZBTDsKPj4gKyNpZmRlZiBDT05GSUdfT0YKPgo+IFRoaXMgc2hvdWxkbid0 IG5lIG5lZWRlZC4KPgo+PiArwqDCoMKgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHBkZXYt PmRldi5vZl9ub2RlOwo+PiArwqDCoMKgIC8qc3RydWN0IHBpbmN0cmwgKnA7Ki8KPj4gK8KgwqDC oCBzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPj4gK8KgwqDCoCByZXNvdXJjZV9zaXplX3QgKmJhc2U7 Cj4+ICvCoMKgwqAgY29uc3QgY2hhciAqaXJxX25hbWU7Cj4+ICvCoMKgwqAgdTMyIGRtY19uciwg Y2hhbm5fbnI7Cj4+ICvCoMKgwqAgaW50IGk7Cj4+ICsKPj4gK8KgwqDCoCAvKiBmb3IgbXVsdGlw bGUgZGRyIGNvbnRyb2xsZXIgKi8KPj4gK8KgwqDCoCBpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIo bm9kZSwgImRtY19uciIsICZkbWNfbnIpKQo+PiArwqDCoMKgwqDCoMKgwqAgaW5mby0+ZG1jX25y ID0gMTsKPj4gKwo+PiArwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKgIGluZm8tPmRtY19u ciA9IGRtY19ucjsKPj4gKwo+PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBkbWNfbnI7IGkrKykg ewo+PiArwqDCoMKgwqDCoMKgwqAgLyogcmVzb3VyY2UgMCBmb3IgZGRyIHJlZ2lzdGVyIGJhc2Ug Ki8KPj4gK8KgwqDCoMKgwqDCoMKgIHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJ T1JFU09VUkNFX01FTSwgaSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIXJlcykgewo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgZGRyIHJl ZyBiYXNlXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoCBiYXNlID0gaW9yZW1hcChyZXMt PnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFi YXNlKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoJnBkZXYtPmRldiwgImNv dWxkbid0IGlvcmVtYXAgZGRyIHJlZ1xuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiAtRUlOVkFMOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+Cj4gQ29uc2lkZXIgaGVscGVycyBs aWtlIGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZSgpLgo+Cj4+ICvCoMKgwqDCoMKgwqDC oCBpbmZvLT5kZHJfcmVnW2ldID0gKHZvaWQgKiliYXNlOwo+PiArwqDCoMKgIH0KPj4gKwo+PiAr wqDCoMKgIC8qIGdldCBETUMgbW9uaXRvciBjaGFubmVsIG51bWJlciAqLwo+PiArwqDCoMKgIGlm IChvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAiY2hhbm5fbnIiLCAmY2hhbm5fbnIpKQo+PiAr wqDCoMKgwqDCoMKgwqAgaW5mby0+Y2hhbm5fbnIgPSA0O8KgwqDCoCAvKiBnMTIgc2VyaWFscyBz dXBwb3J0IDQgY2hhbm5lbHMgKi8KPj4gK8KgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoCBp bmZvLT5jaGFubl9uciA9IGNoYW5uX25yOwo+PiArCj4+ICvCoMKgwqAgLyogcmVzb3VyY2UgaSBm b3IgcGxsIHJlZ2lzdGVyIGJhc2UgKi8KPj4gK8KgwqDCoCByZXMgPSBwbGF0Zm9ybV9nZXRfcmVz b3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIGkpOwo+PiArwqDCoMKgIGlmICghcmVzKSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgZGRyIHJlZyBi YXNlXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyMTsKPj4gK8KgwqDCoCB9Cj4+ICvC oMKgwqAgYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KTsK Pj4gK8KgwqDCoCBpZiAoIWJhc2UpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIoJnBkZXYt PmRldiwgImNvdWxkbid0IGlvcmVtYXAgZm9yIHBsbCByZWdcbiIpOwo+PiArwqDCoMKgwqDCoMKg wqAgZ290byBlcnIxOwo+PiArwqDCoMKgIH0KPj4gK8KgwqDCoCBpbmZvLT5wbGxfcmVnID0gKHZv aWQgKiliYXNlOwo+PiArCj4+ICvCoMKgwqAgaW5mby0+aXJxX251bSA9IG9mX2lycV9nZXQobm9k ZSwgMCk7Cj4KPiBVc2UgcGxhdGZvcm1fZ2V0X2lycSgpLgo+Cj4+ICvCoMKgwqAgaWYgKGluZm8t PmlycV9udW0gPCAwKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKCZwZGV2LT5kZXYsICJj b3VsZG4ndCBnZXQgaXJxXG4iKTsKPgo+ICguLi53aGljaCBhbHNvIHByaW50cyBpdHMgb3duIGVy cm9yIG1lc3NhZ2UgYXMgd2VsbCkKPgo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBlcnIyOwo+PiAr wqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlycV9uYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUs ICJpbnRlcnJ1cHQtbmFtZXMiLCBOVUxMKTsKPj4gK8KgwqDCoCBpZiAoIWlycV9uYW1lKQo+PiAr wqDCoMKgwqDCoMKgwqAgaXJxX25hbWUgPSAiZGRyX3BtdSI7Cj4KPiBUaGF0J3Mgbm90IGhvdyB0 aGUgImludGVycnVwdC1uYW1lcyIgcHJvcGVydHkgd29ya3MuIElmIHlvdSBvbmx5IGhhdmUgCj4g YSBzaW5nbGUgaW50ZXJydXB0IHRoZW4gdGhlcmUncyBub3QgbXVjaCBuZWVkIGZvciBpdCB0byBi ZSBuYW1lZCBpbiAKPiB0aGUgRFQgYXQgYWxsLiBJZiB5b3UgZG8gd2FudCB0byB1c2UgbmFtZWQg aW50ZXJydXB0cyB0aGVuIHVzZSAKPiBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZSgpLCBhbmQgdGhl IG5hbWUgc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBibml0IAo+IG1vcmUgZnVuY3Rpb25hbCBtZWFu aW5nLiBFaXRoZXIgd2F5LCBwbGVhc2UgZG9uJ3QgYWJ1c2UgdGhlIERUIGxpa2UgdGhpcy4KT2th eSwgYWN0dWFsbHkgdGhlcmUgd2lsbCBiZSBtdWx0aXBsZSBpbnRlcnJ1cHRzICwgYnV0IG5vdCBp biBjdXJyZW50IApHMTIgc2VyaWVzLgo+Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSByZXF1ZXN0X2ly cShpbmZvLT5pcnFfbnVtLCBkbWNfaXJxX2hhbmRsZXIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBJUlFGX1NIQVJFRCwgaXJxX25hbWUsICh2b2lkICopaW5mbyk7Cj4KPiBXaG8gZWxz ZSBpcyBzaGFyaW5nIHRoZSBJUlE/IElmIGl0J3Mgb3RoZXIgaW5zdGFuY2VzIG9mIHRoaXMgUE1V IHRoZW4gCj4gdGhhdCdzIHN0aWxsIG1hbmFnZWFibGUgdW5kZXIgdGhlIG5vcm1hbCBwYXJhZGln bSwgdGhlIGRyaXZlciBqdXN0IAo+IG5lZWRzIHRvIGNvb3JkaW5hdGUgYWZmaW5pdHkgY2hhbm1n ZXMgYmV0d2VlbiBhbGwgaW5zdGFuY2VzLiBJZiBpdCdzIAo+IHJhbmRvbSBvdGhlciBkZXZpY2Vz LCB0aGVuIG1heWJlIGl0J3MgdGltZSB0byByZWFzb24gYWJvdXQgaG93IHN5c3RlbSAKPiBQTVVz IGNvdWxkIHVzZSBwcm9wZXIgSVJRLXNhZmUgbG9ja2luZyBhbmQgYWJhbmRvbiB0aGUgYWZmaW5p dHkgc3R1ZmYsIAo+IHNpbmNlIHRoaXMgc2VlbXMgdG8gYmUgY29taW5nIHVwIG1vcmUgYW5kIG1v cmUuCgpUaGUgSVJRIGlzIHByaXZhdGUuIEkgd2lsbCBjaGFuZ2UgaXQuCgo+Cj4+ICvCoMKgwqAg aWYgKHJldCA8IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIoJnBkZXYtPmRldiwgImRk ciByZXF1ZXN0IGlycSBmYWlsZWRcbiIpOwo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBlcnIyOwo+ PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArCj4+ICtlcnIyOgo+PiAr wqDCoMKgIGlvdW5tYXAoaW5mby0+cGxsX3JlZyk7Cj4+ICtlcnIxOgo+PiArwqDCoMKgIGZvciAo aSA9IDA7IGkgPCBpbmZvLT5kbWNfbnI7IGkrKykKPj4gK8KgwqDCoMKgwqDCoMKgIGlvdW5tYXAo aW5mby0+ZGRyX3JlZ1tpXSk7Cj4KPiBOb3RlIGFsc28gdGhhdCB1c2luZyBkZXZtXyogaGVscGVy cyBzYXZlcyB5b3UgYWxsIHRoZSBtYW51YWwgY2xlYW51cC4KPgo+PiArI2VuZGlmCj4+ICvCoMKg wqAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZGRyX3BtdV9mcmVlX2h3 X2luZm8oc3RydWN0IGRtY19od19pbmZvICppbmZvKQo+PiArewo+PiArwqDCoMKgIGludCBpOwo+ PiArCj4+ICvCoMKgwqAgaW91bm1hcChpbmZvLT5wbGxfcmVnKTsKPj4gKwo+PiArwqDCoMKgIGZv ciAoaSA9IDA7IGkgPCBpbmZvLT5kbWNfbnI7IGkrKykKPj4gK8KgwqDCoMKgwqDCoMKgIGlvdW5t YXAoaW5mby0+ZGRyX3JlZ1tpXSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGZpbGxfZXZl bnRfYXR0cihzdHJ1Y3QgZGRyX3BtdSAqcG11KQo+PiArewo+PiArwqDCoMKgIGludCBpLCBqLCBr Owo+PiArwqDCoMKgIHN0cnVjdCBhdHRyaWJ1dGUgKipkc3QgPSBkZHJfcGVyZl9ldmVudHNfYXR0 cnM7Cj4+ICsKPj4gK8KgwqDCoCBqID0gMDsKPj4gK8KgwqDCoCBrID0gMDsKPj4gKwo+PiArwqDC oMKgIC8qIGZpbGwgQUxMX0NIQU5fQ09VTlRFUl9JRCBldmVudCAqLwo+PiArwqDCoMKgIGRzdFtq KytdID0gJmV2ZW50X2F0dHJzW2tdLmF0dHIuYXR0cjsKPj4gK8KgwqDCoCBkc3RbaisrXSA9ICZl dmVudF91bml0X2F0dHJzW2tdLmF0dHI7Cj4+ICvCoMKgwqAgZHN0W2orK10gPSAmZXZlbnRfc2Nh bGVfYXR0cnNba10uYXR0cjsKPj4gKwo+PiArwqDCoMKgIGsrKzsKPj4gKwo+PiArwqDCoMKgIHBy X2luZm8oInBtdS0+aW5mby5jaGFubl9uciAlZFxuIiwgcG11LT5pbmZvLmNoYW5uX25yKTsKPgo+ IFRoYXQncyBhIGRldl9kYmcoKSBhdCBiZXN0LCBidXQgVEJIIEknbSBub3Qgc3VyZSBpdCdzIHVz ZWZ1bCBhdCBhbGwuCj4KPj4gKwo+PiArwqDCoMKgIC8qIGZpbGwgZWFjaCBjaGFubmVsIGV2ZW50 ICovCj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IHBtdS0+aW5mby5jaGFubl9ucjsgaSsrLCBr KyspIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGRzdFtqKytdID0gJmV2ZW50X2F0dHJzW2tdLmF0dHIu YXR0cjsKPj4gK8KgwqDCoMKgwqDCoMKgIGRzdFtqKytdID0gJmV2ZW50X3VuaXRfYXR0cnNba10u YXR0cjsKPj4gK8KgwqDCoMKgwqDCoMKgIGRzdFtqKytdID0gJmV2ZW50X3NjYWxlX2F0dHJzW2td LmF0dHI7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgZHN0W2pdID0gTlVMTDsgLyogbWFy ayBlbmQgKi8KPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZm10X2F0dHJfZmlsbChzdHJ1Y3Qg YXR0cmlidXRlICoqZm10X2F0dHIpCj4+ICt7Cj4+ICvCoMKgwqAgaW50IGk7Cj4+ICsKPj4gK8Kg wqDCoCBmb3IgKGkgPSAwOyBmbXRfYXR0cltpXTsgaSsrKQo+PiArwqDCoMKgwqDCoMKgwqAgZGRy X3BlcmZfZm9ybWF0X2F0dHJzW2ldID0gZm10X2F0dHJbaV07Cj4+ICsKPj4gK8KgwqDCoCBkZHJf cGVyZl9mb3JtYXRfYXR0cnNbaV0gPSBOVUxMOwo+PiArfQo+PiArCj4+ICtpbnQgYW1sX2Rkcl9w bXVfY3JlYXRlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkbWNfcG11X2h3X29wcyAqb3BzLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYXR0cmlidXRlICoqZm10X2F0dHIpCj4+ICt7Cj4+ ICvCoMKgwqAgaW50IHJldDsKPj4gK8KgwqDCoCBjaGFyICpuYW1lOwo+PiArwqDCoMKgIHN0cnVj dCBkZHJfcG11ICpwbXU7Cj4+ICsKPj4gK8KgwqDCoCBwbXUgPSBkZXZtX2t6YWxsb2MoJnBkZXYt PmRldiwgc2l6ZW9mKHN0cnVjdCBkZHJfcG11KSwgR0ZQX0tFUk5FTCk7Cj4+ICvCoMKgwqAgaWYg KCFwbXUpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArwqDCoMKg ICpwbXUgPSAoc3RydWN0IGRkcl9wbXUpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIC5wbXUgPSAoc3Ry dWN0IHBtdSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAubW9kdWxlwqDCoMKgwqDCoMKg wqAgPSBUSElTX01PRFVMRSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLmNhcGFiaWxpdGll c8KgwqDCoCA9IFBFUkZfUE1VX0NBUF9OT19FWENMVURFLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAudGFza19jdHhfbnLCoMKgwqAgPSBwZXJmX2ludmFsaWRfY29udGV4dCwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgLmF0dHJfZ3JvdXBzwqDCoMKgID0gYXR0cl9ncm91cHMsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5ldmVudF9pbml0wqDCoMKgID0gYW1sX2Rkcl9wZXJmX2V2 ZW50X2luaXQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5hZGTCoMKgwqDCoMKgwqDCoCA9 IGFtbF9kZHJfcGVyZl9ldmVudF9hZGQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5kZWzC oMKgwqDCoMKgwqDCoCA9IGFtbF9kZHJfcGVyZl9ldmVudF9kZWwsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC5zdGFydMKgwqDCoMKgwqDCoMKgID0gYW1sX2Rkcl9wZXJmX2V2ZW50X3N0YXJ0 LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuc3RvcMKgwqDCoMKgwqDCoMKgID0gYW1sX2Rk cl9wZXJmX2V2ZW50X3N0b3AsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5yZWFkwqDCoMKg wqDCoMKgwqAgPSBhbWxfZGRyX3BlcmZfZXZlbnRfdXBkYXRlLAo+PiArwqDCoMKgwqDCoMKgwqAg fQo+PiArwqDCoMKgIH07Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBkZHJfcG11X2dldF9od19pbmZv KHBkZXYsICZwbXUtPmluZm8pOwo+PiArwqDCoMKgIGlmIChyZXQgPCAwKQo+PiArwqDCoMKgwqDC oMKgwqAgZ290byBwbXVfYWxsb2NfZXJyOwo+PiArCj4+ICvCoMKgwqAgZm10X2F0dHJfZmlsbChm bXRfYXR0cik7Cj4+ICsKPj4gK8KgwqDCoCBwbXUtPmluZm8ub3BzID0gb3BzOwo+PiArCj4+ICvC oMKgwqAgc3Bpbl9sb2NrX2luaXQoJnBtdS0+bG9jayk7Cj4+ICsKPj4gK8KgwqDCoCBwbXUtPmNw dSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Cj4+ICsKPj4gK8KgwqDCoCBuYW1lID0gZGV2bV9r YXNwcmludGYoJnBkZXYtPmRldiwgR0ZQX0tFUk5FTCwgRERSX1BFUkZfREVWX05BTUUpOwo+PiAr wqDCoMKgIGlmICghbmFtZSkgewo+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycigmcGRldi0+ZGV2 LCAiY291bGRuJ3QgYWxsb2MgbWVtb3J5IGZvciBuYW1lXG4iKTsKPgo+IERvbid0IHByaW50ICJv dXQgb2YgbWVtb3J5IiBtZXNzYWdlcy4gSWYga21hbGxvYygpIGV2ZXIgZG9lcyBhY3R1YWxseSAK PiBmYWlsLCBpdCdzIG5vdCBxdWlldC4KPgo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVOT01F TTsKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZ2V0X2Rldl9uYW1lX2VycjsKPj4gK8KgwqDCoCB9 Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aShDUFVIUF9BUF9P TkxJTkVfRFlOLCBuYW1lLCBOVUxMLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRkcl9wZXJmX29mZmxpbmVfY3B1KTsKPgo+IFdoeSBzZXQgdXAgYSBtdWx0 aXBsZS1pbnN0YW5jZSBzdGF0ZSB0aGF0J3MgcHJpdmF0ZSB0byBhIHNpbmdsZSBpbnN0YW5jZT8K SXQncyBhIHNpbmdsZSBpbnN0YW5jZS4gSSB3aWxsIG1ha2UgdGhlIGNoYW5nZS4KPgo+PiArwqDC oMKgIGlmIChyZXQgPCAwKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKCZwZGV2LT5kZXYs ICJjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aSBmYWlsZWRcbiIpOwo+PiArwqDCoMKgwqDCoMKgwqAg Z290byBjcHVocF9zdGF0ZV9lcnI7Cj4+ICvCoMKgwqAgfQo+PiArwqDCoMKgIHBtdS0+Y3B1aHBf c3RhdGUgPSByZXQ7Cj4+ICsKPj4gK8KgwqDCoCAvKiBSZWdpc3RlciB0aGUgcG11IGluc3RhbmNl IGZvciBjcHUgaG90cGx1ZyAqLwo+PiArwqDCoMKgIHJldCA9IGNwdWhwX3N0YXRlX2FkZF9pbnN0 YW5jZV9ub2NhbGxzKHBtdS0+Y3B1aHBfc3RhdGUsIAo+PiAmcG11LT5ub2RlKTsKPj4gK8KgwqDC oCBpZiAocmV0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJv ciAlZCByZWdpc3RlcmluZyBob3RwbHVnXG4iLCByZXQpOwo+PiArwqDCoMKgwqDCoMKgwqAgZ290 byBjcHVocF9pbnN0YW5jZV9lcnI7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgZmlsbF9l dmVudF9hdHRyKHBtdSk7Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBwZXJmX3BtdV9yZWdpc3Rlcigm cG11LT5wbXUsIG5hbWUsIC0xKTsKPj4gK8KgwqDCoCBpZiAocmV0KSB7Cj4+ICvCoMKgwqDCoMKg wqDCoCBkZXZfZXJyKCZwZGV2LT5kZXYsICJwZXJmIHBtdSByZWdpc3RlciBmYWlsZWRcbiIpOwo+ PiArwqDCoMKgwqDCoMKgwqAgZ290byBwbXVfcmVnaXN0ZXJfZXJyOwo+PiArwqDCoMKgIH0KPj4g Kwo+PiArwqDCoMKgIHBtdS0+bmFtZSA9IG5hbWU7Cj4+ICvCoMKgwqAgcG11LT5kZXYgPSAmcGRl di0+ZGV2Owo+PiArwqDCoMKgIHBtdS0+cG11X2VuYWJsZWQgPSBmYWxzZTsKPj4gKwo+PiArwqDC oMKgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBtdSk7Cj4+ICsKPj4gK8KgwqDCoCBkZXZf aW5mbygmcGRldi0+ZGV2LCAiZGRyIHBlcmYgaW5pdCBva1xuIik7Cj4KPiBEb24ndCBwcmludCBt ZWFuaW5nbGVzcyBsb2cgc3BhbS4gVGhlIGRyaXZlciBjb3JlIGFscmVhZHkgaGFzIHBsZW50eSAK PiBvZiBkZWJ1ZyBtZXNzYWdlcyB5b3UgY2FuIGVuYWJsZSB0byBtb25pdG9yIGRyaXZlciBiaW5k aW5nLgo+Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gKwo+PiArcG11X3JlZ2lzdGVyX2Vy cjoKPj4gK8KgwqDCoCBjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2Vfbm9jYWxscyhwbXUtPmNw dWhwX3N0YXRlLCAmcG11LT5ub2RlKTsKPj4gK2NwdWhwX2luc3RhbmNlX2VycjoKPj4gK8KgwqDC oCBjcHVocF9yZW1vdmVfbXVsdGlfc3RhdGUocG11LT5jcHVocF9zdGF0ZSk7Cj4+ICtjcHVocF9z dGF0ZV9lcnI6Cj4+ICvCoMKgwqAgZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBuYW1lKTsKPgo+IFRo ZSBwb2ludCBvZiBkZXZyZXMgaXMgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byBkbyB0aGF0Lgo+Cj4+ ICtnZXRfZGV2X25hbWVfZXJyOgo+PiArwqDCoMKgIGRkcl9wbXVfZnJlZV9od19pbmZvKCZwbXUt PmluZm8pOwo+PiArcG11X2FsbG9jX2VycjoKPj4gK8KgwqDCoCBkZXZtX2tmcmVlKCZwZGV2LT5k ZXYsIHBtdSk7Cj4KPiBEaXR0by4KPgo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4gK30K Pj4gKwo+PiAraW50IGFtbF9kZHJfcG11X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBkZHJfcG11ICpwbXUgPSBwbGF0Zm9ybV9nZXRf ZHJ2ZGF0YShwZGV2KTsKPj4gKwo+PiArwqDCoMKgIHBlcmZfcG11X3VucmVnaXN0ZXIoJnBtdS0+ cG11KTsKPj4gK8KgwqDCoCBjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2Vfbm9jYWxscyhwbXUt PmNwdWhwX3N0YXRlLCAmcG11LT5ub2RlKTsKPj4gK8KgwqDCoCBjcHVocF9yZW1vdmVfbXVsdGlf c3RhdGUocG11LT5jcHVocF9zdGF0ZSk7Cj4+ICvCoMKgwqAgZGV2bV9rZnJlZShwbXUtPmRldiwg cG11LT5uYW1lKTsKPj4gK8KgwqDCoCBmcmVlX2lycShwbXUtPmluZm8uaXJxX251bSwgJnBtdS0+ aW5mbyk7Cj4+ICvCoMKgwqAgZGRyX3BtdV9mcmVlX2h3X2luZm8oJnBtdS0+aW5mbyk7Cj4+ICvC oMKgwqAgZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBwbXUpOwo+PiArCj4+ICvCoMKgwqAgZGV2X2lu Zm8oJnBkZXYtPmRldiwgImRkciBwZXJmIGZpbml0IG9rXG4iKTsKPgo+IEFnYWluLCBuby4KPgo+ PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvcGVyZi9hbWxvZ2ljL2FtbF9kZHJfcG11X2cxMi5jIAo+PiBiL2RyaXZlcnMvcGVyZi9hbWxv Z2ljL2FtbF9kZHJfcG11X2cxMi5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAw MDAwMDAwMDAwMC4uMjllMzUxMTU3ZjQ5Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVy cy9wZXJmL2FtbG9naWMvYW1sX2Rkcl9wbXVfZzEyLmMKPj4gQEAgLTAsMCArMSwzOTggQEAKPj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKgo+PiArICogQ29weXJp Z2h0IChjKSAyMDIyIEFtbG9naWMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4gKyAqLwo+ PiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+ ICsjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRm b3JtX2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3ByaW50ay5oPgo+PiArI2luY2x1ZGUg PGxpbnV4L3R5cGVzLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgo+PiArCj4+ICsj aW5jbHVkZSA8c29jL2FtbG9naWMvYW1sX2Rkcl9wbXUuaD4KPj4gKwo+PiArI2RlZmluZSBQT1JU X01BSk9SwqDCoMKgwqDCoMKgwqAgMzIKPj4gKyNkZWZpbmUgREVGQVVMVF9YVEFMX0ZSRVHCoMKg wqAgMjQwMDAwMDBVTAo+PiArCj4+ICsjZGVmaW5lIERNQ19RT1NfSVJRwqDCoMKgwqDCoMKgwqAg QklUKDMwKQo+PiArCj4+ICsvKiBETUMgYmFuZHdpZHRoIG1vbml0b3IgcmVnaXN0ZXIgYWRkcmVz cyBvZmZzZXQgKi8KPj4gKyNkZWZpbmUgRE1DX01PTl9HMTJfQ1RSTDDCoMKgwqDCoMKgwqDCoCAo MHgyMMKgIDw8IDIpCj4+ICsjZGVmaW5lIERNQ19NT05fRzEyX0NUUkwxwqDCoMKgwqDCoMKgwqAg KDB4MjHCoCA8PCAyKQo+PiArI2RlZmluZSBETUNfTU9OX0cxMl9DVFJMMsKgwqDCoMKgwqDCoMKg ICgweDIywqAgPDwgMikKPj4gKyNkZWZpbmUgRE1DX01PTl9HMTJfQ1RSTDPCoMKgwqDCoMKgwqDC oCAoMHgyM8KgIDw8IDIpCj4+ICsjZGVmaW5lIERNQ19NT05fRzEyX0NUUkw0wqDCoMKgwqDCoMKg wqAgKDB4MjTCoCA8PCAyKQo+PiArI2RlZmluZSBETUNfTU9OX0cxMl9DVFJMNcKgwqDCoMKgwqDC oMKgICgweDI1wqAgPDwgMikKPj4gKyNkZWZpbmUgRE1DX01PTl9HMTJfQ1RSTDbCoMKgwqDCoMKg wqDCoCAoMHgyNsKgIDw8IDIpCj4+ICsjZGVmaW5lIERNQ19NT05fRzEyX0NUUkw3wqDCoMKgwqDC oMKgwqAgKDB4MjfCoCA8PCAyKQo+PiArI2RlZmluZSBETUNfTU9OX0cxMl9DVFJMOMKgwqDCoMKg wqDCoMKgICgweDI4wqAgPDwgMikKPj4gKwo+PiArI2RlZmluZSBETUNfTU9OX0cxMl9BTExfUkVR X0NOVMKgwqDCoMKgwqDCoMKgICgweDI5wqAgPDwgMikKPj4gKyNkZWZpbmUgRE1DX01PTl9HMTJf QUxMX0dSQU5UX0NOVMKgwqDCoCAoMHgyYcKgIDw8IDIpCj4+ICsjZGVmaW5lIERNQ19NT05fRzEy X09ORV9HUkFOVF9DTlTCoMKgwqAgKDB4MmLCoCA8PCAyKQo+PiArI2RlZmluZSBETUNfTU9OX0cx Ml9TRUNfR1JBTlRfQ05UwqDCoMKgICgweDJjwqAgPDwgMikKPj4gKyNkZWZpbmUgRE1DX01PTl9H MTJfVEhEX0dSQU5UX0NOVMKgwqDCoCAoMHgyZMKgIDw8IDIpCj4+ICsjZGVmaW5lIERNQ19NT05f RzEyX0ZPUl9HUkFOVF9DTlTCoMKgwqAgKDB4MmXCoCA8PCAyKQo+PiArI2RlZmluZSBETUNfTU9O X0cxMl9USU1FUsKgwqDCoMKgwqDCoMKgICgweDJmwqAgPDwgMikKPj4gKwo+PiArLyogRWFjaCBi aXQgcmVwcmVzZW50IGEgYXhpIGxpbmUgKi8KPj4gK1BNVV9GT1JNQVRfQVRUUihldmVudCwgImNv bmZpZzowLTciKTsKPj4gK1BNVV9GT1JNQVRfQVRUUihhcm0sICJjb25maWcxOjAiKTsKPj4gK1BN VV9GT1JNQVRfQVRUUihncHUsICJjb25maWcxOjEiKTsKPj4gK1BNVV9GT1JNQVRfQVRUUihwY2ll LCAiY29uZmlnMToyIik7Cj4+ICtQTVVfRk9STUFUX0FUVFIoaGRjcCwgImNvbmZpZzE6MyIpOwo+ PiArUE1VX0ZPUk1BVF9BVFRSKGhldmNfZnJvbnQsICJjb25maWcxOjQiKTsKPj4gK1BNVV9GT1JN QVRfQVRUUih1c2IzXzAsICJjb25maWcxOjYiKTsKPj4gK1BNVV9GT1JNQVRfQVRUUihkZXZpY2Us ICJjb25maWcxOjciKTsKPj4gK1BNVV9GT1JNQVRfQVRUUihoZXZjX2JhY2ssICJjb25maWcxOjgi KTsKPj4gK1BNVV9GT1JNQVRfQVRUUihoMjY1ZW5jLCAiY29uZmlnMTo5Iik7Cj4+ICtQTVVfRk9S TUFUX0FUVFIodnB1X3JlYWQxLCAiY29uZmlnMToxNiIpOwo+PiArUE1VX0ZPUk1BVF9BVFRSKHZw dV9yZWFkMiwgImNvbmZpZzE6MTciKTsKPj4gK1BNVV9GT1JNQVRfQVRUUih2cHVfcmVhZDMsICJj b25maWcxOjE4Iik7Cj4+ICtQTVVfRk9STUFUX0FUVFIodnB1X3dyaXRlMSwgImNvbmZpZzE6MTki KTsKPj4gK1BNVV9GT1JNQVRfQVRUUih2cHVfd3JpdGUyLCAiY29uZmlnMToyMCIpOwo+PiArUE1V X0ZPUk1BVF9BVFRSKHZkZWMsICJjb25maWcxOjIxIik7Cj4+ICtQTVVfRk9STUFUX0FUVFIoaGNv ZGVjLCAiY29uZmlnMToyMiIpOwo+PiArUE1VX0ZPUk1BVF9BVFRSKGdlMmQsICJjb25maWcxOjIz Iik7Cj4+ICsKPj4gK1BNVV9GT1JNQVRfQVRUUihzcGljYzEsICJjb25maWcxOjMyIik7Cj4+ICtQ TVVfRk9STUFUX0FUVFIodXNiMCwgImNvbmZpZzE6MzMiKTsKPj4gK1BNVV9GT1JNQVRfQVRUUihk bWEsICJjb25maWcxOjM0Iik7Cj4+ICtQTVVfRk9STUFUX0FUVFIoYXJiMCwgImNvbmZpZzE6MzUi KTsKPj4gK1BNVV9GT1JNQVRfQVRUUihzZF9lbW1jX2IsICJjb25maWcxOjM2Iik7Cj4+ICtQTVVf Rk9STUFUX0FUVFIodXNiMSwgImNvbmZpZzE6MzciKTsKPj4gK1BNVV9GT1JNQVRfQVRUUihhdWRp bywgImNvbmZpZzE6MzgiKTsKPj4gK1BNVV9GT1JNQVRfQVRUUihhaWZpZm8sICJjb25maWcxOjM5 Iik7Cj4+ICtQTVVfRk9STUFUX0FUVFIocGFyc2VyLCAiY29uZmlnMTo0MSIpOwo+PiArUE1VX0ZP Uk1BVF9BVFRSKGFvX2NwdSwgImNvbmZpZzE6NDIiKTsKPj4gK1BNVV9GT1JNQVRfQVRUUihzZF9l bW1jX2MsICJjb25maWcxOjQzIik7Cj4+ICtQTVVfRk9STUFUX0FUVFIoc3BpY2MyLCAiY29uZmln MTo0NCIpOwo+PiArUE1VX0ZPUk1BVF9BVFRSKGV0aGVybmV0LCAiY29uZmlnMTo0NSIpOwo+PiAr UE1VX0ZPUk1BVF9BVFRSKHNhbmEsICJjb25maWcxOjQ2Iik7Cj4+ICsKPj4gKy8qIGZvciBzbTEg YW5kIGcxMmIgKi8KPj4gK1BNVV9GT1JNQVRfQVRUUihubmEsICJjb25maWcxOjEwIik7Cj4+ICsK Pj4gKy8qIGZvciBnMTJiIG9ubHkgKi8KPj4gK1BNVV9GT1JNQVRfQVRUUihnZGMsICJjb25maWcx OjExIik7Cj4+ICtQTVVfRk9STUFUX0FUVFIobWlwaV9pc3AsICJjb25maWcxOjEyIik7Cj4+ICtQ TVVfRk9STUFUX0FUVFIoYXJtMSwgImNvbmZpZzE6MTMiKTsKPj4gK1BNVV9GT1JNQVRfQVRUUihz ZF9lbW1jX2EsICJjb25maWcxOjQwIik7Cj4+ICsKPj4gKy8qIDI1NiBpcyBlbm91Z2ggZm9yIGF4 aSBpZCAqLwo+PiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmcxMl9wbXVfZm9ybWF0X2F0dHJz WzI1Nl0gPSB7Cj4KPiBCdXQgYSBzdGF0aWNhbGx5LWluaXRpYWxpc2VkIGFycmF5IGFscmVhZHkg a25vd3MgZXhhY3RseSBob3cgbGFyZ2UgaXQgCj4gbmVlZHMgdG8gYmUsIHdoeSBleHBsaWNpdGx5 IHNpemUgaXQgYXQgYWxsPwo+Cj4+ICvCoMKgwqAgJmZvcm1hdF9hdHRyX2V2ZW50LmF0dHIsCj4+ ICvCoMKgwqAgJmZvcm1hdF9hdHRyX2FybS5hdHRyLAo+PiArwqDCoMKgICZmb3JtYXRfYXR0cl9n cHUuYXR0ciwKPj4gK8KgwqDCoCAmZm9ybWF0X2F0dHJfcGNpZS5hdHRyLAo+PiArwqDCoMKgICZm b3JtYXRfYXR0cl9oZGNwLmF0dHIsCj4+ICvCoMKgwqAgJmZvcm1hdF9hdHRyX2hldmNfZnJvbnQu YXR0ciwKPj4gK8KgwqDCoCAmZm9ybWF0X2F0dHJfdXNiM18wLmF0dHIsCj4+ICvCoMKgwqAgJmZv cm1hdF9hdHRyX2RldmljZS5hdHRyLAo+PiArwqDCoMKgICZmb3JtYXRfYXR0cl9oZXZjX2JhY2su YXR0ciwKPj4gK8KgwqDCoCAmZm9ybWF0X2F0dHJfaDI2NWVuYy5hdHRyLAo+PiArwqDCoMKgICZm b3JtYXRfYXR0cl92cHVfcmVhZDEuYXR0ciwKPj4gK8KgwqDCoCAmZm9ybWF0X2F0dHJfdnB1X3Jl YWQyLmF0dHIsCj4+ICvCoMKgwqAgJmZvcm1hdF9hdHRyX3ZwdV9yZWFkMy5hdHRyLAo+PiArwqDC oMKgICZmb3JtYXRfYXR0cl92cHVfd3JpdGUxLmF0dHIsCj4+ICvCoMKgwqAgJmZvcm1hdF9hdHRy X3ZwdV93cml0ZTIuYXR0ciwKPj4gK8KgwqDCoCAmZm9ybWF0X2F0dHJfdmRlYy5hdHRyLAo+PiAr wqDCoMKgICZmb3JtYXRfYXR0cl9oY29kZWMuYXR0ciwKPj4gK8KgwqDCoCAmZm9ybWF0X2F0dHJf Z2UyZC5hdHRyLAo+PiArwqDCoMKgICZmb3JtYXRfYXR0cl9zcGljYzEuYXR0ciwKPj4gK8KgwqDC oCAmZm9ybWF0X2F0dHJfdXNiMC5hdHRyLAo+PiArwqDCoMKgICZmb3JtYXRfYXR0cl9kbWEuYXR0 ciwKPj4gK8KgwqDCoCAmZm9ybWF0X2F0dHJfYXJiMC5hdHRyLAo+PiArwqDCoMKgICZmb3JtYXRf YXR0cl9zZF9lbW1jX2IuYXR0ciwKPj4gK8KgwqDCoCAmZm9ybWF0X2F0dHJfdXNiMS5hdHRyLAo+ PiArwqDCoMKgICZmb3JtYXRfYXR0cl9hdWRpby5hdHRyLAo+PiArwqDCoMKgICZmb3JtYXRfYXR0 cl9haWZpZm8uYXR0ciwKPj4gK8KgwqDCoCAmZm9ybWF0X2F0dHJfcGFyc2VyLmF0dHIsCj4+ICvC oMKgwqAgJmZvcm1hdF9hdHRyX2FvX2NwdS5hdHRyLAo+PiArwqDCoMKgICZmb3JtYXRfYXR0cl9z ZF9lbW1jX2MuYXR0ciwKPj4gK8KgwqDCoCAmZm9ybWF0X2F0dHJfc3BpY2MyLmF0dHIsCj4+ICvC oMKgwqAgJmZvcm1hdF9hdHRyX2V0aGVybmV0LmF0dHIsCj4+ICvCoMKgwqAgJmZvcm1hdF9hdHRy X3NhbmEuYXR0ciwKPj4gK8KgwqDCoCBOVUxMLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIHZvaWQg YXBwZW5kX2F0dHJfbGlzdChzdHJ1Y3QgYXR0cmlidXRlICphdHRyKQo+PiArewo+PiArwqDCoMKg IGludCBpOwo+PiArCj4+ICvCoMKgwqAgZm9yIChpID0gMDsgZzEyX3BtdV9mb3JtYXRfYXR0cnNb aV0gJiYgaSA8IDI1NTsgaSsrKQo+PiArwqDCoMKgwqDCoMKgwqAgOwo+Cj4gRXd3LCB3aGF0PyA6 KAo+Cj4+ICsKPj4gK8KgwqDCoCBnMTJfcG11X2Zvcm1hdF9hdHRyc1tpXSA9IGF0dHI7Cj4+ICsK Pj4gK8KgwqDCoCBnMTJfcG11X2Zvcm1hdF9hdHRyc1tpICsgMV0gPSBOVUxMOwo+Cj4gKHRoYXQn cyBwb2ludGxlc3MgZWl0aGVyIHdheSkKPgo+IE9LLCBJIHRoaW5rIEkgc2VlIHdoYXQncyBnb2lu ZyBvbiBoZXJlIG5vdy4gRHluYW1pY2FsbHkgcGF0Y2hpbmcgdGhlIAo+IGF0dHJpYnV0ZSBhcnJh eXMgaXMgcHJldHR5IGdyaW0gLSBpdCdzIGZhciBjbGVhbmVyIGFuZCBtb3JlIAo+IHN1c3RhaW5h YmxlIHRvIHN0YXRpY2FsbHkgZGVmaW5lIHRoZSB3aG9sZSBhcnJheSB3aXRoIGFsbCB0aGUgcG9z c2libGUgCj4gYXR0cmlidXRlcywgdGhlbiB1c2UgLmlzX3Zpc2libGUgdG8gaGlkZSB0aGUgb25l cyB3aGljaCBhcmVuJ3QgCj4gcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgc3lzdGVtLgo+CkkgaGF2 ZSBub3QgZ290IHlvdXIgcG9pbnQgeWV0LiBJIGhhdmUgbm8gaWRlYSBob3cgdG8gdXNlIC5pc192 aXNpYmxlIHRvIApoaWRlIHRoZSBpcnJlbGV2YW50IGF0dHJpYnV0ZS4gSSBuZWVkIGEgbGl0dGxl IHRpbWUgdG8gdGhpbmsgaXQuCj4+ICt9Cj4+ICsKPj4gKy8qIGNhbGN1bGF0ZSBkZHIgY2xvY2sg Ki8KPj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRtY19nMTJfZ2V0X2ZyZXFfcXVpY2soc3RydWN0 IGRtY19od19pbmZvICppbmZvKQo+PiArewo+PiArwqDCoMKgIHVuc2lnbmVkIGludCB2YWw7Cj4+ ICvCoMKgwqAgdW5zaWduZWQgaW50IG4sIG0sIG9kMQo+PiArwqDCoMKgIHVuc2lnbmVkIGludCBv ZF9kaXYgPSAweGZmZjsKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIGZyZXEgPSAwOwo+PiArCj4+ ICvCoMKgwqAgdmFsID0gcmVhZGwoaW5mby0+cGxsX3JlZyk7Cj4+ICvCoMKgwqAgdmFsID0gdmFs ICYgMHhmZmZmZjsKPj4gK8KgwqDCoCBzd2l0Y2ggKCh2YWwgPj4gMTYpICYgNykgewo+PiArwqDC oMKgIGNhc2UgMDoKPj4gK8KgwqDCoMKgwqDCoMKgIG9kX2RpdiA9IDI7Cj4+ICvCoMKgwqDCoMKg wqDCoCBicmVhazsKPj4gKwo+PiArwqDCoMKgIGNhc2UgMToKPj4gK8KgwqDCoMKgwqDCoMKgIG9k X2RpdiA9IDM7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gKwo+PiArwqDCoMKgIGNhc2Ug MjoKPj4gK8KgwqDCoMKgwqDCoMKgIG9kX2RpdiA9IDQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVh azsKPj4gKwo+PiArwqDCoMKgIGNhc2UgMzoKPj4gK8KgwqDCoMKgwqDCoMKgIG9kX2RpdiA9IDY7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gKwo+PiArwqDCoMKgIGNhc2UgNDoKPj4gK8Kg wqDCoMKgwqDCoMKgIG9kX2RpdiA9IDg7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gKwo+ PiArwqDCoMKgIGRlZmF1bHQ6Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCB9 Cj4+ICsKPj4gK8KgwqDCoCBtID0gdmFsICYgMHgxZmY7Cj4+ICvCoMKgwqAgbiA9ICgodmFsID4+ IDEwKSAmIDB4MWYpOwo+PiArwqDCoMKgIG9kMSA9ICgoKHZhbCA+PiAxOSkgJiAweDEpKSA9PSAx ID8gMiA6IDE7Cj4+ICvCoMKgwqAgZnJlcSA9IERFRkFVTFRfWFRBTF9GUkVRIC8gMTAwMDvCoMKg wqDCoMKgwqDCoCAvKiBhdm9pZCBvdmVyZmxvdyAqLwo+PiArwqDCoMKgIGlmIChuKQo+PiArwqDC oMKgwqDCoMKgwqAgZnJlcSA9ICgoKChmcmVxICogbSkgLyBuKSA+PiBvZDEpIC8gb2RfZGl2KSAq IDEwMDA7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gZnJlcTsKPj4gK30KPj4gKwo+PiArI2lmZGVm IERFQlVHCj4+ICtzdGF0aWMgdm9pZCBnMTJfZHVtcF9yZWcoc3RydWN0IGRtY19od19pbmZvICpk YikKPj4gK3sKPj4gK8KgwqDCoCBpbnQgcyA9IDAsIGk7Cj4+ICvCoMKgwqAgdW5zaWduZWQgaW50 IHI7Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoCBywqAgPSByZWFkbChkYi0+ZGRyX3JlZ1swXSArIChETUNfTU9OX0cxMl9DVFJMMCAr IChpIDw8IDIpKSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwcl9ub3RpY2UoIkRNQ19NT05fQ1RSTCVk OsKgwqDCoMKgwqDCoMKgICUwOHhcbiIsIGksIHIpOwo+PiArwqDCoMKgIH0KPj4gK8KgwqDCoCBy wqAgPSByZWFkbChkYi0+ZGRyX3JlZ1swXSArIERNQ19NT05fRzEyX0FMTF9SRVFfQ05UKTsKPj4g K8KgwqDCoCBwcl9ub3RpY2UoIkRNQ19NT05fQUxMX1JFUV9DTlQ6wqAgJTA4eFxuIiwgcik7Cj4+ ICvCoMKgwqAgcsKgID0gcmVhZGwoZGItPmRkcl9yZWdbMF0gKyBETUNfTU9OX0cxMl9BTExfR1JB TlRfQ05UKTsKPj4gK8KgwqDCoCBwcl9ub3RpY2UoIkRNQ19NT05fQUxMX0dSQU5UX0NOVDolMDh4 XG4iLCByKTsKPj4gK8KgwqDCoCBywqAgPSByZWFkbChkYi0+ZGRyX3JlZ1swXSArIERNQ19NT05f RzEyX09ORV9HUkFOVF9DTlQpOwo+PiArwqDCoMKgIHByX25vdGljZSgiRE1DX01PTl9PTkVfR1JB TlRfQ05UOiUwOHhcbiIsIHIpOwo+PiArwqDCoMKgIHLCoCA9IHJlYWRsKGRiLT5kZHJfcmVnWzBd ICsgRE1DX01PTl9HMTJfU0VDX0dSQU5UX0NOVCk7Cj4+ICvCoMKgwqAgcHJfbm90aWNlKCJETUNf TU9OX1NFQ19HUkFOVF9DTlQ6JTA4eFxuIiwgcik7Cj4+ICvCoMKgwqAgcsKgID0gcmVhZGwoZGIt PmRkcl9yZWdbMF0gKyBETUNfTU9OX0cxMl9USERfR1JBTlRfQ05UKTsKPj4gK8KgwqDCoCBwcl9u b3RpY2UoIkRNQ19NT05fVEhEX0dSQU5UX0NOVDolMDh4XG4iLCByKTsKPj4gK8KgwqDCoCBywqAg PSByZWFkbChkYi0+ZGRyX3JlZ1swXSArIERNQ19NT05fRzEyX0ZPUl9HUkFOVF9DTlQpOwo+PiAr wqDCoMKgIHByX25vdGljZSgiRE1DX01PTl9GT1JfR1JBTlRfQ05UOiUwOHhcbiIsIHIpOwo+PiAr wqDCoMKgIHLCoCA9IHJlYWRsKGRiLT5kZHJfcmVnWzBdICsgRE1DX01PTl9HMTJfVElNRVIpOwo+ PiArwqDCoMKgIHByX25vdGljZSgiRE1DX01PTl9USU1FUjrCoMKgwqDCoMKgwqDCoCAlMDh4XG4i LCByKTsKPj4gK30KPj4gKyNlbmRpZgo+PiArCj4+ICtzdGF0aWMgdm9pZCBkbWNfZzEyX2NvdW50 ZXJfZW5hYmxlKHN0cnVjdCBkbWNfaHdfaW5mbyAqaW5mbykKPj4gK3sKPj4gK8KgwqDCoCB1bnNp Z25lZCBpbnQgdmFsOwo+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcgY2xvY2tfY291bnQgPSBkbWNf ZzEyX2dldF9mcmVxX3F1aWNrKGluZm8pIC8gMTA7IAo+PiAvKiAxMDBtcyAqLwo+PiArCj4+ICvC oMKgwqAgd3JpdGVsKGNsb2NrX2NvdW50LCBpbmZvLT5kZHJfcmVnWzBdICsgRE1DX01PTl9HMTJf VElNRVIpOwo+PiArCj4+ICvCoMKgwqAgdmFsID0gcmVhZGwoaW5mby0+ZGRyX3JlZ1swXSArIERN Q19NT05fRzEyX0NUUkwwKTsKPj4gKwo+PiArwqDCoMKgIC8qIGVuYWJsZSBhbGwgY2hhbm5lbCAq Lwo+PiArwqDCoMKgIHZhbCA9wqAgQklUKDMxKSB8wqDCoMKgIC8qIGVuYWJsZSBiaXQgKi8KPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgyMCkgfMKgwqDCoCAvKiB1c2UgdGltZXLCoCAqLwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgwZjvCoMKgwqDCoMKgwqDCoCAvKiA0IGNoYW5uZWxz ICovCj4+ICsKPj4gK8KgwqDCoCB3cml0ZWwodmFsLCBpbmZvLT5kZHJfcmVnWzBdICsgRE1DX01P Tl9HMTJfQ1RSTDApOwo+PiArCj4+ICsjaWZkZWYgREVCVUcKPj4gK8KgwqDCoCBnMTJfZHVtcF9y ZWcoaW5mbyk7Cj4+ICsjZW5kaWYKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZG1jX2cxMl9j b25maWdfZml0ZXIoc3RydWN0IGRtY19od19pbmZvICppbmZvLAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaW50IHBvcnQsIGludCBjaGFubmVsKQo+PiArewo+PiArwqDCoMKg IHUzMiB2YWw7Cj4+ICvCoMKgwqAgdTMyIHJwW01BWF9DSEFOTkVMX05VTV0gPSB7RE1DX01PTl9H MTJfQ1RSTDEsIERNQ19NT05fRzEyX0NUUkwzLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgRE1DX01PTl9HMTJfQ1RSTDUsIERNQ19NT05fRzEyX0NUUkw3fTsKPj4g K8KgwqDCoCB1MzIgcnNbTUFYX0NIQU5ORUxfTlVNXSA9IHtETUNfTU9OX0cxMl9DVFJMMiwgRE1D X01PTl9HMTJfQ1RSTDQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBETUNfTU9OX0cxMl9DVFJMNiwgRE1DX01PTl9HMTJfQ1RSTDh9Owo+PiArwqDCoMKgIGludCBz dWJwb3J0ID0gLTE7Cj4+ICsKPj4gK8KgwqDCoCAvKiBjbGVhciBhbGwgcG9ydCBtYXNrICovCj4+ ICvCoMKgwqAgaWYgKHBvcnQgPCAwKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCB3cml0ZWwoMCwgaW5m by0+ZGRyX3JlZ1swXSArIHJwW2NoYW5uZWxdKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRlbCgw LCBpbmZvLT5kZHJfcmVnWzBdICsgcnNbY2hhbm5lbF0pOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlmIChwb3J0ID49IFBPUlRfTUFKT1Ip Cj4+ICvCoMKgwqDCoMKgwqDCoCBzdWJwb3J0ID0gcG9ydCAtIFBPUlRfTUFKT1I7Cj4+ICsKPj4g K8KgwqDCoCBpZiAoc3VicG9ydCA8IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHZhbCA9IHJlYWRs KGluZm8tPmRkcl9yZWdbMF0gKyBycFtjaGFubmVsXSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB2YWwg fD3CoCAoMSA8PCBwb3J0KTsKPj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRlbCh2YWwsIGluZm8tPmRk cl9yZWdbMF0gKyBycFtjaGFubmVsXSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB2YWwgPSAweGZmZmY7 Cj4+ICvCoMKgwqDCoMKgwqDCoCB3cml0ZWwodmFsLCBpbmZvLT5kZHJfcmVnWzBdICsgcnNbY2hh bm5lbF0pOwo+PiArwqDCoMKgIH0gZWxzZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCB2YWwgPSBCSVQo MjMpO8KgwqDCoMKgwqDCoMKgIC8qIHNlbGVjdCBkZXZpY2UgKi8KPj4gK8KgwqDCoMKgwqDCoMKg IHdyaXRlbCh2YWwsIGluZm8tPmRkcl9yZWdbMF0gKyBycFtjaGFubmVsXSk7Cj4+ICvCoMKgwqDC oMKgwqDCoCB2YWwgPSByZWFkbChpbmZvLT5kZHJfcmVnWzBdICsgcnNbY2hhbm5lbF0pOwo+PiAr wqDCoMKgwqDCoMKgwqAgdmFsIHw9ICgxIDw8IHN1YnBvcnQpOwo+PiArwqDCoMKgwqDCoMKgwqAg d3JpdGVsKHZhbCwgaW5mby0+ZGRyX3JlZ1swXSArIHJzW2NoYW5uZWxdKTsKPj4gK8KgwqDCoCB9 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRtY19nMTJfY29uZmlnX2F4aV9pZChzdHJ1Y3Qg ZG1jX2h3X2luZm8gKmluZm8sIGludCAKPj4gYXhpX2lkLCBpbnQgY2hhbm5lbCkKPj4gK3sKPj4g K8KgwqDCoCBpZiAoY2hhbm5lbCA+IGluZm8tPmNoYW5uX25yKQo+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuOwo+PiArCj4+ICvCoMKgwqAgZG1jX2cxMl9jb25maWdfZml0ZXIoaW5mbywgYXhpX2lk LCBjaGFubmVsKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZG1jX2cxMl9jb3VudGVyX2Rp c2FibGUoc3RydWN0IGRtY19od19pbmZvICppbmZvKQo+PiArewo+PiArwqDCoMKgIGludCBpOwo+ PiArCj4+ICvCoMKgwqAgLyogY2xlYXIgdGltZXIgKi8KPj4gK8KgwqDCoCB3cml0ZWwoMCwgaW5m by0+ZGRyX3JlZ1swXSArIERNQ19NT05fRzEyX0NUUkwwKTsKPj4gK8KgwqDCoCB3cml0ZWwoMCwg aW5mby0+ZGRyX3JlZ1swXSArIERNQ19NT05fRzEyX1RJTUVSKTsKPj4gKwo+PiArwqDCoMKgIHdy aXRlbCgwLCBpbmZvLT5kZHJfcmVnWzBdICsgRE1DX01PTl9HMTJfQUxMX1JFUV9DTlQpOwo+PiAr wqDCoMKgIHdyaXRlbCgwLCBpbmZvLT5kZHJfcmVnWzBdICsgRE1DX01PTl9HMTJfQUxMX0dSQU5U X0NOVCk7Cj4+ICvCoMKgwqAgd3JpdGVsKDAsIGluZm8tPmRkcl9yZWdbMF0gKyBETUNfTU9OX0cx Ml9PTkVfR1JBTlRfQ05UKTsKPj4gK8KgwqDCoCB3cml0ZWwoMCwgaW5mby0+ZGRyX3JlZ1swXSAr IERNQ19NT05fRzEyX1NFQ19HUkFOVF9DTlQpOwo+PiArwqDCoMKgIHdyaXRlbCgwLCBpbmZvLT5k ZHJfcmVnWzBdICsgRE1DX01PTl9HMTJfVEhEX0dSQU5UX0NOVCk7Cj4+ICvCoMKgwqAgd3JpdGVs KDAsIGluZm8tPmRkcl9yZWdbMF0gKyBETUNfTU9OX0cxMl9GT1JfR1JBTlRfQ05UKTsKPj4gKwo+ PiArwqDCoMKgIC8qIGNsZWFyIHBvcnQgY2hhbm5lbCBtYXBwaW5nICovCj4+ICvCoMKgwqAgZm9y IChpID0gMDsgaSA8IGluZm8tPmNoYW5uX25yOyBpKyspCj4+ICvCoMKgwqDCoMKgwqDCoCBkbWNf ZzEyX2NvbmZpZ19maXRlcihpbmZvLCAtMSwgaSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lk IGRtY19nMTJfZ2V0X2NvdW50ZXJzKHN0cnVjdCBkbWNfaHdfaW5mbyAqaW5mbywKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkbWNfY291bnRlciAqY291bnRlcikK Pj4gK3sKPj4gK8KgwqDCoCBpbnQgaTsKPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgcmVnOwo+PiAr Cj4+ICvCoMKgwqAgY291bnRlci0+YWxsX2NudCA9IHJlYWRsKGluZm8tPmRkcl9yZWdbMF0gKyAK Pj4gRE1DX01PTl9HMTJfQUxMX0dSQU5UX0NOVCk7Cj4+ICvCoMKgwqAgY291bnRlci0+YWxsX3Jl ccKgwqAgPSByZWFkbChpbmZvLT5kZHJfcmVnWzBdICsgCj4+IERNQ19NT05fRzEyX0FMTF9SRVFf Q05UKTsKPj4gKwo+PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5jaGFubl9ucjsgaSsr KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZWcgPSBETUNfTU9OX0cxMl9PTkVfR1JBTlRfQ05UICsg KGkgPDwgMik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBjb3VudGVyLT5jaGFubmVsX2NudFtpXSA9IHJl YWRsKGluZm8tPmRkcl9yZWdbMF0gKyByZWcpOwo+PiArwqDCoMKgIH0KPj4gK30KPj4gKwo+PiAr c3RhdGljIGludCBkbWNfZzEyX2lycV9oYW5kbGVyKHN0cnVjdCBkbWNfaHdfaW5mbyAqaW5mbywK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1jX2NvdW50 ZXIgKmNvdW50ZXIpCj4+ICt7Cj4+ICvCoMKgwqAgdW5zaWduZWQgaW50IHZhbDsKPj4gK8KgwqDC oCBpbnQgcmV0ID0gLTE7Cj4+ICsKPj4gK8KgwqDCoCB2YWwgPSByZWFkbChpbmZvLT5kZHJfcmVn WzBdICsgRE1DX01PTl9HMTJfQ1RSTDApOwo+PiArwqDCoMKgIGlmICh2YWwgJiBETUNfUU9TX0lS USkgewo+PiArwqDCoMKgwqDCoMKgwqAgZG1jX2cxMl9nZXRfY291bnRlcnMoaW5mbywgY291bnRl cik7Cj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBjbGVhciBpcnEgZmxhZ3MgKi8KPj4gK8KgwqDCoMKg wqDCoMKgIHdyaXRlbCh2YWwsIGluZm8tPmRkcl9yZWdbMF0gKyBETUNfTU9OX0cxMl9DVFJMMCk7 Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSAwOwo+PiArwqDCoMKgIH0KPj4gK8KgwqDCoCByZXR1 cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGRtY19wbXVfaHdfb3BzIGcxMl9v cHMgPSB7Cj4+ICvCoMKgwqAgLmVuYWJsZcKgwqDCoMKgwqDCoMKgID0gZG1jX2cxMl9jb3VudGVy X2VuYWJsZSwKPj4gK8KgwqDCoCAuZGlzYWJsZcKgwqDCoCA9IGRtY19nMTJfY291bnRlcl9kaXNh YmxlLAo+PiArwqDCoMKgIC5pcnFfaGFuZGxlcsKgwqDCoCA9IGRtY19nMTJfaXJxX2hhbmRsZXIs Cj4+ICvCoMKgwqAgLmdldF9jb3VudGVyc8KgwqDCoCA9IGRtY19nMTJfZ2V0X2NvdW50ZXJzLAo+ PiArwqDCoMKgIC5jb25maWdfYXhpX2lkwqDCoMKgID0gZG1jX2cxMl9jb25maWdfYXhpX2lkLAo+ PiArfTsKPj4gKwo+PiArc3RhdGljIGludCBfX2luaXQgZzEyX2Rkcl9wbXVfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gK3sKPj4gKyNpZmRlZiBDT05GSUdfT0YKPgo+IEFz IGJlZm9yZSwgcmVtb3ZlIGFsbCB0aGVzZS4gVGhlIG9mXyogQVBJcyBzaG91bGQgYmUgc3R1YmJl ZCBvdXQgd2VsbCAKPiBlbm91Z2ggdGhhdCBpdCBzdGlsbCBjb21waWxlLXRlc3RzIE9LLgo+Cj4+ ICvCoMKgwqAgc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7Cj4+ ICvCoMKgwqAgY29uc3QgY2hhciAqbW9kZWw7Cj4+ICsKPj4gK8KgwqDCoCBpZiAob2ZfcHJvcGVy dHlfcmVhZF9zdHJpbmcobm9kZSwgIm1vZGVsIiwgJm1vZGVsKSkKPj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiAtRUlOVkFMOwo+Cj4gTm8sIHVzZSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZSgpLCBh bmQgZGVmaW5lIHRoZSBiaW5kaW5nIHByb3Blcmx5LgoKV2h5IHRoZSAibW9kZWwiIHByb3BlcnR5 IGNvdWxkbid0IGJlIHVzZWQ/IERvIHlvdSBtZWFuIHVzZSBleGlzdGluZyAKcHJvcGVydHkgcmF0 aGVyIHRoYW4gY3JlYXRpbmcgbmV3IG9uZT8KCj4+ICvCoMKgwqAgZGV2X2luZm8oJnBkZXYtPmRl diwgIiVzIiwgbW9kZWwpOwo+PiArCj4+ICvCoMKgwqAgaWYgKHN0cmNtcChtb2RlbCwgImcxMmEi KSA9PSAwKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfaW5mbygmcGRldi0+ZGV2LCAiZGRyIHBt dSBmb3IgZzEyYVxuIik7Cj4+ICvCoMKgwqAgfSBlbHNlIGlmIChzdHJjbXAobW9kZWwsICJnMTJi IikgPT0gMCkgewo+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2luZm8oJnBkZXYtPmRldiwgImRkciBw bXUgZm9yIGcxMmJcbiIpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBhcHBlbmRfYXR0cl9saXN0 KCZmb3JtYXRfYXR0cl9ubmEuYXR0cik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBhcHBlbmRfYXR0cl9s aXN0KCZmb3JtYXRfYXR0cl9nZGMuYXR0cik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBhcHBlbmRfYXR0 cl9saXN0KCZmb3JtYXRfYXR0cl9hcm0xLmF0dHIpOwo+PiArwqDCoMKgwqDCoMKgwqAgYXBwZW5k X2F0dHJfbGlzdCgmZm9ybWF0X2F0dHJfbWlwaV9pc3AuYXR0cik7Cj4+ICvCoMKgwqDCoMKgwqDC oCBhcHBlbmRfYXR0cl9saXN0KCZmb3JtYXRfYXR0cl9zZF9lbW1jX2EuYXR0cik7Cj4+ICvCoMKg wqAgfSBlbHNlIGlmIChzdHJjbXAobW9kZWwsICJzbTEiKSA9PSAwKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoCBkZXZfaW5mbygmcGRldi0+ZGV2LCAiZGRyIHBtdSBmb3Igc20xXG4iKTsKPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqAgYXBwZW5kX2F0dHJfbGlzdCgmZm9ybWF0X2F0dHJfbm5hLmF0dHIpOwo+ PiArwqDCoMKgIH0KPj4gKyNlbmRpZgo+PiArwqDCoMKgIHJldHVybiBhbWxfZGRyX3BtdV9jcmVh dGUocGRldiwgJmcxMl9vcHMsIGcxMl9wbXVfZm9ybWF0X2F0dHJzKTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGludMKgIF9fZXhpdCBnMTJfZGRyX3BtdV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKPj4gK3sKPj4gK8KgwqDCoCBhbWxfZGRyX3BtdV9yZW1vdmUocGRldik7Cj4+ ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArI2lmZGVmIENPTkZJR19PRgo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYW1sX2Rkcl9wbXVfZHRfbWF0Y2hb XSA9IHsKPj4gK8KgwqDCoCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAuY29tcGF0aWJsZSA9ICJhbWxv Z2ljLGcxMi1kZHItcG11IiwKPj4gK8KgwqDCoCB9LAo+PiArwqDCoMKgIHt9Cj4+ICt9Owo+PiAr I2VuZGlmCj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGcxMl9kZHJfcG11 X2RyaXZlciA9IHsKPj4gK8KgwqDCoCAuZHJpdmVyID0gewo+PiArwqDCoMKgwqDCoMKgwqAgLm5h bWUgPSAiYW1sb2dpYyxkZHItcG11IiwKPj4gK8KgwqDCoMKgwqDCoMKgIC5vd25lciA9IFRISVNf TU9EVUxFLAo+Cj4gVGhlIGRyaXZlciBjb3JlIHNldHMgdGhpcyBhdXRvbWF0aWNhbGx5Lgo+Cj4+ ICvCoMKgwqAgI2lmZGVmIENPTkZJR19PRgo+PiArwqDCoMKgwqDCoMKgwqAgLm9mX21hdGNoX3Rh YmxlID0gYW1sX2Rkcl9wbXVfZHRfbWF0Y2gsCj4+ICvCoMKgwqAgI2VuZGlmCj4+ICvCoMKgwqAg fSwKPj4gK8KgwqDCoCAucmVtb3ZlID0gZzEyX2Rkcl9wbXVfcmVtb3ZlLAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGludCBfX2luaXQgYW1sX2cxMl9kZHJfcG11X2luaXQodm9pZCkKPj4gK3sKPj4g K8KgwqDCoCByZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZnMTJfZGRyX3BtdV9kcml2ZXIs IAo+PiBnMTJfZGRyX3BtdV9wcm9iZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9fZXhp dCBhbWxfZzEyX2Rkcl9wbXVfZXhpdCh2b2lkKQo+PiArewo+PiArwqDCoMKgIHBsYXRmb3JtX2Ry aXZlcl91bnJlZ2lzdGVyKCZnMTJfZGRyX3BtdV9kcml2ZXIpOwo+PiArfQo+PiArCj4+ICttb2R1 bGVfaW5pdChhbWxfZzEyX2Rkcl9wbXVfaW5pdCk7Cj4+ICttb2R1bGVfZXhpdChhbWxfZzEyX2Rk cl9wbXVfZXhpdCk7Cj4KPiBVc2UgbW9kdWxlX3BsYXRmb3JtX2RyaXZlcl9wcm9iZSgpIChpZiBv ZiBjb3Vyc2UgeW91IHJlYWxseSB0aGluayB0aGUgCj4gX19pbml0IHNoZW5hbmlnYW5zIGFyZSBi ZW5lZmljaWFsLCBvdGhlcndpc2UganVzdCB1c2UgcmVndWxhciAKPiBtb2R1bGVfcGxhdGZvcm1f ZHJpdmVyKCkgZm9yIGV2ZW4gbGVzcyBzdXJwcmlzZSkuCj4KPiBUaGFua3MsCj4gUm9iaW4uCgoK VGhhbmtzIGZvciB5b3VyIHRpbWUsIFJvYmluISBUQkggSSdtIGEgbGl0dGxlIG5lcnZvdXMgc2lu Y2UgdGhpcyBpcyBteSAKZmlyc3Qgc3VibWl0dGluZyB0byB1cHN0cmVhbS4gWW91ciBjb21tZW50 cyBhcmUgZ3JlYXQgYW5kIGhlbHBmdWwuIEkgCndpbGwgdXBkYXRlIHRoZSBkcml2ZXIuCgpUaGFu a3MgJiBCZXN0IFJlZ2FyZHMsCgpKaXVjaGVuZwoKPgo+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIp Owo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb2MvYW1sb2dpYy9hbWxfZGRyX3BtdS5oIAo+PiBi L2luY2x1ZGUvc29jL2FtbG9naWMvYW1sX2Rkcl9wbXUuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjRmNjBhOWY0ZmE0YQo+PiAtLS0gL2Rldi9udWxsCj4+ ICsrKyBiL2luY2x1ZGUvc29jL2FtbG9naWMvYW1sX2Rkcl9wbXUuaAo+PiBAQCAtMCwwICsxLDYz IEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+PiArLyoKPj4g KyAqIENvcHlyaWdodCAoYykgMjAyMiBBbWxvZ2ljLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu Cj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBfX0FNTF9ERFJfUE1VX0hfXwo+PiArI2RlZmluZSBf X0FNTF9ERFJfUE1VX0hfXwo+PiArCj4+ICsjZGVmaW5lIE1BWF9DSEFOTkVMX05VTcKgwqDCoMKg wqDCoMKgIDgKPj4gKwo+PiArZW51bSB7Cj4+ICvCoMKgwqAgQUxMX0NIQU5fQ09VTlRFUl9JRCwK Pj4gK8KgwqDCoCBDSEFOMV9DT1VOVEVSX0lELAo+PiArwqDCoMKgIENIQU4yX0NPVU5URVJfSUQs Cj4+ICvCoMKgwqAgQ0hBTjNfQ09VTlRFUl9JRCwKPj4gK8KgwqDCoCBDSEFONF9DT1VOVEVSX0lE LAo+PiArwqDCoMKgIENIQU41X0NPVU5URVJfSUQsCj4+ICvCoMKgwqAgQ0hBTjZfQ09VTlRFUl9J RCwKPj4gK8KgwqDCoCBDSEFON19DT1VOVEVSX0lELAo+PiArwqDCoMKgIENIQU44X0NPVU5URVJf SUQsCj4+ICvCoMKgwqAgQ09VTlRFUl9NQVhfSUQsCj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZG1j X2h3X2luZm8gewo+PiArwqDCoMKgIHN0cnVjdCBkbWNfcG11X2h3X29wcyAqb3BzOwo+PiArwqDC oMKgIHZvaWQgX19pb21lbSAqZGRyX3JlZ1s0XTsKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIHRp bWVyX3ZhbHVlO8KgwqDCoCAvKiBUaW1lciB2YWx1ZSBpbiBUSU1FUiByZWdpc3RlciAqLwo+PiAr wqDCoMKgIHZvaWQgX19pb21lbSAqcGxsX3JlZzsKPj4gK8KgwqDCoCBpbnQgaXJxX251bTvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIC8qIGlycSB2ZWN0b3IgbnVtYmVyICovCj4+ICvCoMKgwqAgaW50 IGRtY19ucjvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFRoZSBudW1iZXIgb2YgZG1jIGNvbnRy b2xsZXIgKi8KPj4gK8KgwqDCoCBpbnQgY2hhbm5fbnI7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAv KiBUaGUgbnVtYmVyIG9mIGRtYyBiYW5kd2lkdGggbW9uaXRvciAKPj4gY2hhbm5lbHMgKi8KPj4g K8KgwqDCoCBpbnQgaWQ7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFRoZSBudW1i ZXIgb2Ygc3VwcG9ydGVkIGNoYW5uZWxzICovCj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZG1jX2Nv dW50ZXIgewo+PiArwqDCoMKgIHU2NCBhbGxfY250O8KgwqDCoCAvKiBUaGUgY291bnQgb2YgYWxs IHJlcXVlc3RzIGNvbWUgaW4vb3V0IGRkciAKPj4gY29udHJvbGxlciAqLwo+PiArwqDCoMKgIHVu aW9uIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHU2NCBhbGxfcmVxOwo+PiArwqDCoMKgwqDCoMKgwqAg c3RydWN0IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0IGFsbF9pZGxlX2NudDsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0IGFsbF8xNmJpdF9jbnQ7Cj4+ICvCoMKgwqDCoMKg wqDCoCB9Owo+PiArwqDCoMKgIH07Cj4+ICvCoMKgwqAgdTY0IGNoYW5uZWxfY250W01BWF9DSEFO TkVMX05VTV07IC8qIFRvIHNhdmUgYSBETUMgCj4+IGJhbmR3aWR0aC1tb25pdG9yIGNoYW5uZWwg Y291bnRlciAqLwo+PiArfTsKPj4gKwo+PiArc3RydWN0IGRtY19wbXVfaHdfb3BzIHsKPj4gK8Kg wqDCoCB2b2lkICgqZW5hYmxlKShzdHJ1Y3QgZG1jX2h3X2luZm8gKmluZm8pOwo+PiArwqDCoMKg IHZvaWQgKCpkaXNhYmxlKShzdHJ1Y3QgZG1jX2h3X2luZm8gKmluZm8pOwo+PiArwqDCoMKgIC8q IEJpbmQgYW4gYXhpIGxpbmUgdG8gYSBiYW5kd2lkdGgtbW9uaXRvciBjaGFubmVsICovCj4+ICvC oMKgwqAgdm9pZCAoKmNvbmZpZ19heGlfaWQpKHN0cnVjdCBkbWNfaHdfaW5mbyAqaW5mbywgaW50 IGF4aV9pZCwgaW50IAo+PiBjaGFubik7Cj4+ICvCoMKgwqAgaW50ICgqaXJxX2hhbmRsZXIpKHN0 cnVjdCBkbWNfaHdfaW5mbyAqaW5mbywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IGRtY19jb3VudGVyICpjb3VudGVyKTsKPj4gK8KgwqDCoCB2b2lkICgqZ2V0X2NvdW50 ZXJzKShzdHJ1Y3QgZG1jX2h3X2luZm8gKmluZm8sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgZG1jX2NvdW50ZXIgKmNvdW50ZXIpOwo+PiArfTsKPj4gKwo+PiAr aW50IGFtbF9kZHJfcG11X2NyZWF0ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1jX3BtdV9od19vcHMgKm9wcywK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGF0dHJpYnV0ZSAqKmZtdF9h dHRyKTsKPj4gK2ludCBhbWxfZGRyX3BtdV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldik7Cj4+ICsKPj4gKyNlbmRpZiAvKiBfX0FNTF9ERFJfUE1VX0hfXyAqLwo+CgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hbWxvZ2ljIG1h aWxpbmcgbGlzdApsaW51eC1hbWxvZ2ljQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hbWxvZ2ljCg==