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 775E4C433F5 for ; Wed, 5 Jan 2022 05:54:38 +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:References:CC:To:From: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=qKzFcRRjqf72WP5aVAXc/KvFPMxjUlf+2e7q8bbMhJI=; b=s7/Y72Xxnz76tY MHqNYflEiK3H5gZ0tN0f+gLcAZzwrJu8gZK7TCUxgehAyQKdZezmt8HG5rWbIMwFnzTfKlP5e7JFe atn78Kdo7ygnCCnWkpQqkcwEuuTAIMWJdAG9yZEANEtctoMKZNa2c9GfHEkh8iho7VwdJqrLC05td lkTCXg+z1efT0v/AoGu97wz3dcv+QVjznOlyZKd2I6MJaN4lMVCHjoYPf3ZCrcm6RASHcqGGhNnzB fHBprVfxjLaL0F2K9GbO1oXXZxB2oBvDkwKfn3MA+4oOy1OYS9YI4PmUbrg1lSSgap367r1LyZmmA w0IOFuJ82uDd8U9nlh1A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n4zFm-00DcLC-Ou; Wed, 05 Jan 2022 05:54:30 +0000 Received: from mail-sh.amlogic.com ([58.32.228.43]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n4zFK-00DcCV-Bs; Wed, 05 Jan 2022 05:54:06 +0000 Received: from [10.18.29.173] (10.18.29.173) by mail-sh.amlogic.com (10.18.11.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Wed, 5 Jan 2022 13:53:57 +0800 Message-ID: <61568e98-b450-c9c0-a60b-1e7c850591c7@amlogic.com> Date: Wed, 5 Jan 2022 13:53:56 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: Re: [PATCH V3 4/6] tty: serial: meson: The UART baud rate calculation is described using the common clock code. Also added S4 chip uart Compatible. Content-Language: en-US From: Yu Tu To: Jerome Brunet , , , , CC: Greg Kroah-Hartman , Jiri Slaby , Neil Armstrong , Vyacheslav , Kevin Hilman , Martin Blumenstingl References: <20211230102110.3861-1-yu.tu@amlogic.com> <20211230102110.3861-5-yu.tu@amlogic.com> <1jfsq57wym.fsf@starbuckisacylon.baylibre.com> <264367c8-2de1-ebd1-0843-e4e33a8407a6@amlogic.com> <1jpmp7rc1z.fsf@starbuckisacylon.baylibre.com> <318ec2df-b73b-520b-f5ac-d0d2fce0eff0@amlogic.com> In-Reply-To: <318ec2df-b73b-520b-f5ac-d0d2fce0eff0@amlogic.com> X-Originating-IP: [10.18.29.173] X-ClientProxiedBy: mail-sh.amlogic.com (10.18.11.5) To mail-sh.amlogic.com (10.18.11.5) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220104_215402_704639_9C557402 X-CRM114-Status: GOOD ( 31.26 ) 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 ICBIaSBKZXJvbWUsCgpPbiAyMDIyLzEvNCAyMjozNSwgWXUgVHUgd3JvdGU6Cj4gSGkgSmVyb21l LAo+ICDCoMKgwqDCoFRoYW5rIHlvdSB2ZXJ5IG11Y2ggZm9yIHlvdXIgcGF0aWVudCByZXBseS4g SSBoYXZlIGxlYXJuZWQgYSBsb3QgCj4gZnJvbSBpdC4KPiAKPiBPbiAyMDIyLzEvNCAxODozNiwg SmVyb21lIEJydW5ldCB3cm90ZToKPj4gWyBFWFRFUk5BTCBFTUFJTCBdCj4+Cj4+Cj4+IE9uIFR1 ZSAwNCBKYW4gMjAyMiBhdCAxNzo1NywgWXUgVHUgPHl1LnR1QGFtbG9naWMuY29tPiB3cm90ZToK Pj4KPj4+IEhpIEplcm9tZSwKPj4+IMKgwqDCoMKgVGhhbmsgeW91IHZlcnkgbXVjaCBmb3IgeW91 ciByZXBseS4KPj4+Cj4+PiBPbiAyMDIyLzEvMyAyMDo0MCwgSmVyb21lIEJydW5ldCB3cm90ZToK Pj4+PiBbIEVYVEVSTkFMIEVNQUlMIF0KPj4+Pgo+Pj4+IE9uIFRodSAzMCBEZWMgMjAyMSBhdCAx ODoyMSwgWXUgVHUgPHl1LnR1QGFtbG9naWMuY29tPiB3cm90ZToKPj4+Pgo+Pj4+PiBVc2luZyB0 aGUgY29tbW9uIENsb2NrIGNvZGUgdG8gZGVzY3JpYmUgdGhlIFVBUlQgYmF1ZCByYXRlIGNsb2Nr IG1ha2VzCj4+Pj4+IGl0IGVhc2llciBmb3IgdGhlIFVBUlQgZHJpdmVyIHRvIGJlIGNvbXBhdGli bGUgd2l0aCB0aGUgYmF1ZCByYXRlCj4+Pj4+IHJlcXVpcmVtZW50cyBvZiB0aGUgVUFSVCBJUCBv biBkaWZmZXJlbnQgbWVzb24gY2hpcHMKPj4+Pj4KPj4+Pj4gU2lnbmVkLW9mZi1ieTogWXUgVHUg PHl1LnR1QGFtbG9naWMuY29tPgo+Pj4+PiAtLS0KPj4+Pj4gwqDCoCBkcml2ZXJzL3R0eS9zZXJp YWwvS2NvbmZpZ8KgwqDCoMKgwqAgfMKgwqAgMSArCj4+Pj4+IMKgwqAgZHJpdmVycy90dHkvc2Vy aWFsL21lc29uX3VhcnQuYyB8IDMxMSAKPj4+Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0KPj4+Pj4gwqDCoCAyIGZpbGVzIGNoYW5nZWQsIDI1NyBpbnNlcnRpb25zKCspLCA1NSBk ZWxldGlvbnMoLSkKPj4+Pj4KPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9L Y29uZmlnIGIvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKPj4+Pj4gaW5kZXggNzgwOTA4ZDQz NTU3Li4zMmUyMzgxNzMwMzYgMTAwNjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9L Y29uZmlnCj4+Pj4+ICsrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCj4+Pj4+IEBAIC0x OTgsNiArMTk4LDcgQEAgY29uZmlnIFNFUklBTF9LR0RCX05NSQo+Pj4+PiDCoMKgIGNvbmZpZyBT RVJJQUxfTUVTT04KPj4+Pj4gwqDCoMKgwqDCoMKgIHRyaXN0YXRlICJNZXNvbiBzZXJpYWwgcG9y dCBzdXBwb3J0Igo+Pj4+PiDCoMKgwqDCoMKgwqAgZGVwZW5kcyBvbiBBUkNIX01FU09OCj4+Pj4+ ICvCoMKgwqAgZGVwZW5kcyBvbiBDT01NT05fQ0xLCj4+Pj4+IMKgwqDCoMKgwqDCoCBzZWxlY3Qg U0VSSUFMX0NPUkUKPj4+Pj4gwqDCoMKgwqDCoMKgIGhlbHAKPj4+Pj4gwqDCoMKgwqDCoMKgwqDC oCBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIG9uLWNoaXAgVUFSVHMgb2YgdGhlIEFt bG9naWMKPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tZXNvbl91YXJ0LmMg Cj4+Pj4+IGIvZHJpdmVycy90dHkvc2VyaWFsL21lc29uX3VhcnQuYwo+Pj4+PiBpbmRleCA5OWVm ZTYyYTE1MDcuLjA3ZWIxZjQwYWFhYSAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy90dHkvc2Vy aWFsL21lc29uX3VhcnQuYwo+Pj4+PiArKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbWVzb25fdWFy dC5jCj4+Pj4+IEBAIC02LDYgKzYsNyBAQAo+Pj4+PiDCoMKgwqAgKi8KPj4+Pj4gwqDCoMKgwqAg I2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+Pj4+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRl ci5oPgo+Pj4+PiDCoMKgICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Cj4+Pj4+IMKgwqAgI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4+Pj4+IMKgwqAgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4K Pj4+Pj4gQEAgLTY1LDkgKzY2LDcgQEAKPj4+Pj4gwqDCoCAjZGVmaW5lIEFNTF9VQVJUX1JFQ1Zf SVJRKGMpwqDCoMKgwqDCoMKgwqAgKChjKSAmIDB4ZmYpCj4+Pj4+IMKgwqDCoMKgIC8qIEFNTF9V QVJUX1JFRzUgYml0cyAqLwo+Pj4+PiAtI2RlZmluZSBBTUxfVUFSVF9CQVVEX01BU0vCoMKgwqDC oMKgwqDCoCAweDdmZmZmZgo+Pj4+PiDCoMKgICNkZWZpbmUgQU1MX1VBUlRfQkFVRF9VU0XCoMKg wqDCoMKgwqDCoCBCSVQoMjMpCj4+Pj4+IC0jZGVmaW5lIEFNTF9VQVJUX0JBVURfWFRBTMKgwqDC oMKgwqDCoMKgIEJJVCgyNCkKPj4+Pj4gwqDCoMKgwqAgI2RlZmluZSBBTUxfVUFSVF9QT1JUX05V TcKgwqDCoMKgwqDCoMKgIDEyCj4+Pj4+IMKgwqAgI2RlZmluZSBBTUxfVUFSVF9QT1JUX09GRlNF VMKgwqDCoMKgwqDCoMKgIDYKPj4+Pj4gQEAgLTc2LDYgKzc1LDIxIEBACj4+Pj4+IMKgwqAgI2Rl ZmluZSBBTUxfVUFSVF9QT0xMX1VTRUPCoMKgwqDCoMKgwqDCoCA1Cj4+Pj4+IMKgwqAgI2RlZmlu ZSBBTUxfVUFSVF9USU1FT1VUX1VTRUPCoMKgwqDCoMKgwqDCoCAxMDAwMAo+Pj4+PiDCoMKgICtz dHJ1Y3QgbWVzb25fdWFydF9kYXRhIHsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgdWFydF9wb3J0wqDC oMKgIHBvcnQ7Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IGNsa8KgwqDCoMKgwqDCoMKgICpwY2xrOwo+ Pj4+PiArwqDCoMKgIHN0cnVjdCBjbGvCoMKgwqDCoMKgwqDCoCAqYmF1ZF9jbGs7Cj4+Pj4+ICvC oMKgwqAgc3RydWN0IGNsa19kaXZpZGVywqDCoMKgIGJhdWRfZGl2Owo+Pj4+PiArwqDCoMKgIHN0 cnVjdCBjbGtfbXV4wqDCoMKgwqDCoMKgwqAgdXNlX3h0YWxfbXV4Owo+Pj4+PiArwqDCoMKgIHN0 cnVjdCBjbGtfbXV4wqDCoMKgwqDCoMKgwqAgeHRhbF9jbGtfc2VsX211eDsKPj4+Pj4gK8KgwqDC oCBzdHJ1Y3QgY2xrX211eMKgwqDCoMKgwqDCoMKgIHh0YWwyX2Nsa19zZWxfbXV4Owo+Pj4+PiAr wqDCoMKgIHN0cnVjdCBjbGtfZml4ZWRfZmFjdG9ywqDCoMKgIHh0YWxfZGl2MjsKPj4+Pj4gK8Kg wqDCoCBzdHJ1Y3QgY2xrX2ZpeGVkX2ZhY3RvcsKgwqDCoCB4dGFsX2RpdjM7Cj4+Pj4+ICvCoMKg wqAgc3RydWN0IGNsa19maXhlZF9mYWN0b3LCoMKgwqAgY2xrODFfZGl2NDsKPj4+PiBLZWVwaW5n IGFsbCB0aGVzZSBpbnRlcm5hbCBlbGVtZW50cyBhcm91bmQgaXMgbm90IHVzZWZ1bCBzaW5jZSB0 aGV5IGFyZQo+Pj4+IHJlZ2lzdGVyZWQgdXNpbmcgZGV2bV8KPj4+Pgo+Pj4gSSdtIHNvcnJ5LiBJ IGRvbid0IGtub3cgd2hhdCB5b3UgbWVhbi4gVGhhdCdzIGV4YWN0bHkgd2hhdCB5b3Ugc2FpZCwg YnV0Cj4+PiB3aGF0J3Mgd3JvbmcsIEkgZG9uJ3QgdW5kZXJzdGFuZC4gRG8geW91IGhhdmUgYW55 IGJldHRlciBzdWdnZXN0aW9ucywKPj4+IHBsZWFzZSBzcGVjaWZ5IHNwZWNpZmljIHBvaW50cywg cHJlZmVyYWJseSBnaXZlIGV4YW1wbGVzLgo+Pgo+PiBJJ20gc2F5aW5nIHRoYXQgeW91IGRvbid0 IG5lZWQgdG8ga2VlcCByZWZlcmVuY2UgdG8gdGhlIGludGVybmFsCj4+IGVsZW1lbnRzIG9mIHRo ZSBjbG9jayB0cmVlIHlvdSBoYXZlIHJlZ2lzdGVyZWQgc2luY2UgZGV2bV8gd2lsbCB0YWtlCj4+ IGNhcmUgb2YgdGhlIHJlbW92YWwgbGF0ZXIgb24uIElPVywgT25jZSB0aGV5IGFyZSByZWdpc3Rl cmVkLCB0aGUgcG9pbnRlcgo+PiBpcyBuZXZlciB1c2VkIGFnYWluIHNvIHlvdSBkb24ndCBuZWVk IGl0IGluIHRoZSBwcml2YXRlIGRhdGEuCj4+Cj4gSSB1bmRlcnN0YW5kIHlvdSBub3cuIFdoYXQg eW91IHNheSBpcyByaWdodC4gSSB3aWxsIGNvcnJlY3QgaXQuCj4+Cj4+Pj4+ICvCoMKgwqAgYm9v bMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbm9fY2xrODFfaW5wdXQ7Cj4+Pj4gV2hhdCBpcyB0aGlz ID8KPj4+Pgo+Pj4gVG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBjbEs4MSBhbmQgWFRBTC4KPj4KPj4g Li4uIFlldCwgaXQgaXMgbm90IHVzZWQKPj4KPj4+Pj4gK8KgwqDCoCBib29swqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBoYXNfeHRhbF9jbGtfc2VsOwo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiDCoMKg IHN0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgbWVzb25fdWFydF9kcml2ZXI7Cj4+Pj4+IMKgwqDC oMKgIHN0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0ICptZXNvbl9wb3J0c1tBTUxfVUFSVF9QT1JUX05V TV07Cj4+Pj4+IEBAIC0yNzAsMTQgKzI4NCwxMSBAQCBzdGF0aWMgdm9pZCBtZXNvbl91YXJ0X3Jl c2V0KHN0cnVjdCB1YXJ0X3BvcnQgCj4+Pj4+ICpwb3J0KQo+Pj4+PiDCoMKgIHN0YXRpYyBpbnQg bWVzb25fdWFydF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCj4+Pj4+IMKgwqAgewo+ Pj4+PiDCoMKgwqDCoMKgwqAgdTMyIHZhbDsKPj4+Pj4gLcKgwqDCoCBpbnQgcmV0ID0gMDsKPj4+ Pj4gK8KgwqDCoCBpbnQgcmV0Owo+Pj4+PiDCoMKgIC3CoMKgwqAgdmFsID0gcmVhZGwocG9ydC0+ bWVtYmFzZSArIEFNTF9VQVJUX0NPTlRST0wpOwo+Pj4+PiAtwqDCoMKgIHZhbCB8PSBBTUxfVUFS VF9DTEVBUl9FUlI7Cj4+Pj4+IC3CoMKgwqAgd3JpdGVsKHZhbCwgcG9ydC0+bWVtYmFzZSArIEFN TF9VQVJUX0NPTlRST0wpOwo+Pj4+PiAtwqDCoMKgIHZhbCAmPSB+QU1MX1VBUlRfQ0xFQVJfRVJS Owo+Pj4+PiAtwqDCoMKgIHdyaXRlbCh2YWwsIHBvcnQtPm1lbWJhc2UgKyBBTUxfVUFSVF9DT05U Uk9MKTsKPj4+Pj4gK8KgwqDCoCBtZXNvbl91YXJ0X3Jlc2V0KHBvcnQpOwo+Pj4+PiDCoMKgICvC oMKgwqAgdmFsID0gcmVhZGwocG9ydC0+bWVtYmFzZSArIEFNTF9VQVJUX0NPTlRST0wpOwo+Pj4+ PiDCoMKgwqDCoMKgwqAgdmFsIHw9IChBTUxfVUFSVF9SWF9FTiB8IEFNTF9VQVJUX1RYX0VOKTsK Pj4+Pj4gwqDCoMKgwqDCoMKgIHdyaXRlbCh2YWwsIHBvcnQtPm1lbWJhc2UgKyBBTUxfVUFSVF9D T05UUk9MKTsKPj4+Pj4gwqDCoCBAQCAtMjk1LDE5ICszMDYsMTcgQEAgc3RhdGljIGludCBtZXNv bl91YXJ0X3N0YXJ0dXAoc3RydWN0IAo+Pj4+PiB1YXJ0X3BvcnQKPj4+Pj4gKnBvcnQpCj4+Pj4+ IMKgwqDCoMKgIHN0YXRpYyB2b2lkIG1lc29uX3VhcnRfY2hhbmdlX3NwZWVkKHN0cnVjdCB1YXJ0 X3BvcnQgKnBvcnQsIAo+Pj4+PiB1bnNpZ25lZAo+Pj4+PiBsb25nIGJhdWQpCj4+Pj4+IMKgwqAg ewo+Pj4+PiArwqDCoMKgIHN0cnVjdCBtZXNvbl91YXJ0X2RhdGEgKnByaXZhdGVfZGF0YSA9IHBv cnQtPnByaXZhdGVfZGF0YTsKPj4+Pj4gwqDCoMKgwqDCoMKgIHUzMiB2YWw7Cj4+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgd2hpbGUgKCFtZXNvbl91YXJ0X3R4X2VtcHR5KHBvcnQpKQo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjcHVfcmVsYXgoKTsKPj4+Pj4gwqDCoCAtwqDCoMKgIGlmIChwb3J0 LT51YXJ0Y2xrID09IDI0MDAwMDAwKSB7Cj4+Pj4gVGhpcyBjaGVjayBzaG93cyB0aGF0IHByZXZp b3VzIGNvZGUgYXNzdW1lZCBiaXQgMjQgd2FzIGxlZnQgdW50b3VjaGVkCj4+Pj4gQmVsb3cgeW91 IGNhbiBzZWUgdGhhdCBHWEJCIGFuZCBuZXdlciB1c2VkIHRoZSBYVEFMIHBhdGggd2hpbGUgb2xk ZXIKPj4+PiB1c2VkIHRoZSBvdGhlcgo+Pj4+IFlvdXIgY2hhbmdlIG1ha2VzIHRoaXMgZHluYW1p YyB3aGljaCBpcyBhbm90aGVyICJ1bmV4cGVjdGVkIiBjaGFuZ2UuCj4+Pj4gUGxlYXNlIG1ha2Ug dGhlIGJpdCAyNCBtdXggUk8gdG8gc3RhcnQgd2l0aCBzbyB0aGUgYmVoYXZpb3IgcmVtYWlucyAK Pj4+PiB1bmNoYW5nZWQKPj4+PiBmb3Igb2xkZXIgU29Dcy4KPj4+IEkgYWdyZWUgd2l0aCB3aGF0 IHlvdSBzYXksIGFuZCBJIHdpbGwgY29ycmVjdCBpdC4KPj4+Pgo+Pj4+PiAtwqDCoMKgwqDCoMKg wqAgdmFsID0gKChwb3J0LT51YXJ0Y2xrIC8gMykgLyBiYXVkKSAtIDE7Cj4+Pj4+IC3CoMKgwqDC oMKgwqDCoCB2YWwgfD0gQU1MX1VBUlRfQkFVRF9YVEFMOwo+Pj4+PiAtwqDCoMKgIH0gZWxzZSB7 Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCB2YWwgPSAoKHBvcnQtPnVhcnRjbGsgKiAxMCAvIChiYXVk ICogNCkgKyA1KSAvIDEwKSAtIDE7Cj4+Pj4+IC3CoMKgwqAgfQo+Pj4+PiArwqDCoMKgIHZhbCA9 IHJlYWRsKHBvcnQtPm1lbWJhc2UgKyBBTUxfVUFSVF9SRUc1KTsKPj4+Pj4gwqDCoMKgwqDCoMKg IHZhbCB8PSBBTUxfVUFSVF9CQVVEX1VTRTsKPj4+Pj4gwqDCoMKgwqDCoMKgIHdyaXRlbCh2YWws IHBvcnQtPm1lbWJhc2UgKyBBTUxfVUFSVF9SRUc1KTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIGNs a19zZXRfcmF0ZShwcml2YXRlX2RhdGEtPmJhdWRfY2xrLCBiYXVkKTsKPj4+Pj4gwqDCoCB9Cj4+ Pj4+IMKgwqDCoMKgIHN0YXRpYyB2b2lkIG1lc29uX3VhcnRfc2V0X3Rlcm1pb3Moc3RydWN0IHVh cnRfcG9ydCAqcG9ydCwKPj4+Pj4gQEAgLTM5NywxMSArNDA2LDI3IEBAIHN0YXRpYyBpbnQgbWVz b25fdWFydF92ZXJpZnlfcG9ydChzdHJ1Y3QgCj4+Pj4+IHVhcnRfcG9ydCAqcG9ydCwKPj4+Pj4g wqDCoMKgwqAgc3RhdGljIHZvaWQgbWVzb25fdWFydF9yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRf cG9ydCAqcG9ydCkKPj4+Pj4gwqDCoCB7Cj4+Pj4+IC3CoMKgwqAgLyogbm90aGluZyB0byBkbyAq Lwo+Pj4+PiArwqDCoMKgIHN0cnVjdCBtZXNvbl91YXJ0X2RhdGEgKnByaXZhdGVfZGF0YSA9IHBv cnQtPnByaXZhdGVfZGF0YTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIGNsa19kaXNhYmxlX3VucHJl cGFyZShwcml2YXRlX2RhdGEtPmJhdWRfY2xrKTsKPj4+Pj4gK8KgwqDCoCBjbGtfZGlzYWJsZV91 bnByZXBhcmUocHJpdmF0ZV9kYXRhLT5wY2xrKTsKPj4+Pj4gwqDCoCB9Cj4+Pj4+IMKgwqDCoMKg IHN0YXRpYyBpbnQgbWVzb25fdWFydF9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9y dCkKPj4+Pj4gwqDCoCB7Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IG1lc29uX3VhcnRfZGF0YSAqcHJp dmF0ZV9kYXRhID0gcG9ydC0+cHJpdmF0ZV9kYXRhOwo+Pj4+PiArwqDCoMKgIGludCByZXQ7Cj4+ Pj4+ICsKPj4+Pj4gK8KgwqDCoCByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdmF0ZV9kYXRh LT5wY2xrKTsKPj4+Pj4gK8KgwqDCoCBpZiAocmV0KQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIHJldDsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShw cml2YXRlX2RhdGEtPmJhdWRfY2xrKTsKPj4+Pj4gK8KgwqDCoCBpZiAocmV0KSB7Cj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCBjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdmF0ZV9kYXRhLT5wY2xrKTsK Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+ICvCoMKgwqAgfQo+Pj4+PiAr Cj4+Pj4+IMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+Pj4gwqDCoCB9Cj4+Pj4+IMKgwqAgQEAg LTYyOSw1NiArNjU0LDE3NSBAQCBzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIAo+Pj4+PiBtZXNv bl91YXJ0X2RyaXZlciA9IHsKPj4+Pj4gwqDCoMKgwqDCoMKgIC5jb25zwqDCoMKgwqDCoMKgwqAg PSBNRVNPTl9TRVJJQUxfQ09OU09MRSwKPj4+Pj4gwqDCoCB9Owo+Pj4+PiDCoMKgIC1zdGF0aWMg aW5saW5lIHN0cnVjdCBjbGsgKm1lc29uX3VhcnRfcHJvYmVfY2xvY2soc3RydWN0IGRldmljZSAK Pj4+Pj4gKmRldiwKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjb25zdCBjaGFyICppZCkKPj4+Pj4gK3N0YXRpYyBpbnQgbWVzb25fdWFydF9y ZWdpc3Rlcl9jbGsoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBjaGFyICpuYW1lX3N1ZmZpeCwKPj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgY2xrX3BhcmVu dF9kYXRhICpwYXJlbnRfZGF0YSwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB1bnNpZ25lZCBpbnQgbnVtX3BhcmVudHMsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IGNsa19vcHMgKm9wcywKPj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY2xrX2h3ICpodykKPj4+ Pj4gwqDCoCB7Cj4+Pj4+IC3CoMKgwqAgc3RydWN0IGNsayAqY2xrID0gTlVMTDsKPj4+Pj4gK8Kg wqDCoCBzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0ID0geyB9Owo+Pj4+PiArwqDCoMKgIGNoYXIg Y2xrX25hbWVbMzJdOwo+Pj4+PiDCoMKgwqDCoMKgwqAgaW50IHJldDsKPj4+Pj4gwqDCoCAtwqDC oMKgIGNsayA9IGRldm1fY2xrX2dldChkZXYsIGlkKTsKPj4+Pj4gLcKgwqDCoCBpZiAoSVNfRVJS KGNsaykpCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gY2xrOwo+Pj4+PiArwqDCoMKgIHNu cHJpbnRmKGNsa19uYW1lLCBzaXplb2YoY2xrX25hbWUpLCAiJXMjJXMiLCAKPj4+Pj4gZGV2X25h bWUocG9ydC0+ZGV2KSwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgbmFtZV9zdWZmaXgpOwo+Pj4+ PiDCoMKgIC3CoMKgwqAgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7Cj4+Pj4+IC3CoMKg wqAgaWYgKHJldCkgewo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJjb3VsZG4n dCBlbmFibGUgY2xrXG4iKTsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKHJl dCk7Cj4+Pj4+IC3CoMKgwqAgfQo+Pj4+PiArwqDCoMKgIGluaXQubmFtZSA9IGNsa19uYW1lOwo+ Pj4+PiArwqDCoMKgIGluaXQub3BzID0gb3BzOwo+Pj4+PiArwqDCoMKgIGluaXQuZmxhZ3MgPSBD TEtfU0VUX1JBVEVfUEFSRU5UOwo+Pj4+PiArwqDCoMKgIGluaXQucGFyZW50X2RhdGEgPSBwYXJl bnRfZGF0YTsKPj4+Pj4gK8KgwqDCoCBpbml0Lm51bV9wYXJlbnRzID0gbnVtX3BhcmVudHM7Cj4+ Pj4+ICsKPj4+Pj4gK8KgwqDCoCBody0+aW5pdCA9ICZpbml0Owo+Pj4+PiDCoMKgIC3CoMKgwqAg ZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKHZvaWQoKikodm9pZCAqKSljbGtfZGlzYWJsZV91bnByZXBhcmUsCj4+Pj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGNsayk7Cj4+Pj4+ICvCoMKgwqAgcmV0ID0gZGV2bV9jbGtfaHdfcmVn aXN0ZXIocG9ydC0+ZGV2LCBodyk7Cj4+Pj4+ICvCoMKgwqAgaWYgKHJldCkKPj4+Pj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiBkZXZfZXJyX3Byb2JlKHBvcnQtPmRldiwgcmV0LAo+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiRmFpbGVkIHRvIHJlZ2lzdGVy IHRoZSAnJXMnIGNsb2NrXG4iLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjbGtfbmFtZSk7Cj4+Pj4+IMKgwqAgLcKgwqDCoCByZXR1cm4gY2xrOwo+Pj4+ PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+IMKgwqAgfQo+Pj4+PiDCoMKgIC1zdGF0aWMgaW50 IG1lc29uX3VhcnRfcHJvYmVfY2xvY2tzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4+ Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHVhcnRfcG9y dCAqcG9ydCkKPj4+Pj4gLXsKPj4+Pj4gLcKgwqDCoCBzdHJ1Y3QgY2xrICpjbGtfeHRhbCA9IE5V TEw7Cj4+Pj4+IC3CoMKgwqAgc3RydWN0IGNsayAqY2xrX3BjbGsgPSBOVUxMOwo+Pj4+PiAtwqDC oMKgIHN0cnVjdCBjbGsgKmNsa19iYXVkID0gTlVMTDsKPj4+Pj4gK3N0YXRpYyBpbnQgbWVzb25f dWFydF9wcm9iZV9jbG9ja3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKPj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29sIHJlZ2lzdGVyX2NsazgxX2RpdjQpCj4+ Pj4+ICt7Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IG1lc29uX3VhcnRfZGF0YSAqcHJpdmF0ZV9kYXRh ID0gcG9ydC0+cHJpdmF0ZV9kYXRhOwo+Pj4+PiArwqDCoMKgIHN0cnVjdCBjbGtfcGFyZW50X2Rh dGEgdXNlX3h0YWxfbXV4X3BhcmVudHNbMl0gPSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB7IC5p bmRleCA9IC0xLCB9LAo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgeyAuaW5kZXggPSAtMSwgfSwKPj4+ Pj4gK8KgwqDCoCB9Owo+Pj4+PiArwqDCoMKgIHN0cnVjdCBjbGtfcGFyZW50X2RhdGEgeHRhbF9j bGtfc2VsX211eF9wYXJlbnRzWzJdID0geyB9Owo+Pj4+PiArwqDCoMKgIHN0cnVjdCBjbGtfcGFy ZW50X2RhdGEgeHRhbDJfY2xrX3NlbF9tdXhfcGFyZW50c1syXSA9IHsgfTsKPj4+Pj4gK8KgwqDC oCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhIHh0YWxfZGl2X3BhcmVudCA9IHsgLmZ3X25hbWUgPSAi eHRhbCIsIH07Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBjbGs4MV9kaXZf cGFyZW50ID0geyAuZndfbmFtZSA9ICJiYXVkIiwgfTsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgY2xr X3BhcmVudF9kYXRhIGJhdWRfZGl2X3BhcmVudCA9IHsgfTsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3Qg Y2xrICpjbGtfYmF1ZCwgKmNsa194dGFsOwo+Pj4+PiArwqDCoMKgIGludCByZXQ7Cj4+Pj4+IMKg wqAgLcKgwqDCoCBjbGtfcGNsayA9IG1lc29uX3VhcnRfcHJvYmVfY2xvY2soJnBkZXYtPmRldiwg InBjbGsiKTsKPj4+Pj4gLcKgwqDCoCBpZiAoSVNfRVJSKGNsa19wY2xrKSkKPj4+Pj4gLcKgwqDC oMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKGNsa19wY2xrKTsKPj4+Pj4gK8KgwqDCoCBwcml2YXRl X2RhdGEtPnBjbGsgPSBkZXZtX2Nsa19nZXQocG9ydC0+ZGV2LCAicGNsayIpOwo+Pj4+PiArwqDC oMKgIGlmIChJU19FUlIocHJpdmF0ZV9kYXRhLT5wY2xrKSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiBkZXZfZXJyX3Byb2JlKHBvcnQtPmRldiwgUFRSX0VSUihwcml2YXRlX2RhdGEtPnBj bGspLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiRmFp bGVkIHRvIGdldCB0aGUgJ3BjbGsnIGNsb2NrXG4iKTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIGNs a19iYXVkID0gZGV2bV9jbGtfZ2V0KHBvcnQtPmRldiwgImJhdWQiKTsKPj4+Pj4gK8KgwqDCoCBp ZiAoSVNfRVJSKGNsa19iYXVkKSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBkZXZfZXJy X3Byb2JlKHBvcnQtPmRldiwgUFRSX0VSUihjbGtfYmF1ZCksCj4+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJGYWlsZWQgdG8gZ2V0IHRoZSAnYmF1ZCcgY2xv Y2tcbiIpOwo+Pj4+PiDCoMKgIC3CoMKgwqAgY2xrX3h0YWwgPSBtZXNvbl91YXJ0X3Byb2JlX2Ns b2NrKCZwZGV2LT5kZXYsICJ4dGFsIik7Cj4+Pj4+ICvCoMKgwqAgY2xrX3h0YWwgPSBkZXZtX2Ns a19nZXQocG9ydC0+ZGV2LCAieHRhbCIpOwo+Pj4+PiDCoMKgwqDCoMKgwqAgaWYgKElTX0VSUihj bGtfeHRhbCkpCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihjbGtfeHRhbCk7 Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZGV2X2Vycl9wcm9iZShwb3J0LT5kZXYsIFBU Ul9FUlIoY2xrX3h0YWwpLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAiRmFpbGVkIHRvIGdldCB0aGUgJ3h0YWwnIGNsb2NrXG4iKTsKPj4+Pj4gKwo+Pj4+ PiArwqDCoMKgIHByaXZhdGVfZGF0YS0+eHRhbF9kaXYzLm11bHQgPSAxOwo+Pj4+PiArwqDCoMKg IHByaXZhdGVfZGF0YS0+eHRhbF9kaXYzLmRpdiA9IDM7Cj4+Pj4+ICvCoMKgwqAgcmV0ID0gbWVz b25fdWFydF9yZWdpc3Rlcl9jbGsocG9ydCwgInh0YWxfZGl2MyIsIAo+Pj4+PiAmeHRhbF9kaXZf cGFyZW50LAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IDEsICZjbGtfZml4ZWRfZmFjdG9yX29wcywKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAmcHJpdmF0ZV9kYXRhLT54dGFsX2RpdjMuaHcpOwo+Pj4+PiAr wqDCoMKgIGlmIChyZXQpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+PiDC oMKgIC3CoMKgwqAgY2xrX2JhdWQgPSBtZXNvbl91YXJ0X3Byb2JlX2Nsb2NrKCZwZGV2LT5kZXYs ICJiYXVkIik7Cj4+Pj4+IC3CoMKgwqAgaWYgKElTX0VSUihjbGtfYmF1ZCkpCj4+Pj4+IC3CoMKg wqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihjbGtfYmF1ZCk7Cj4+Pj4+ICvCoMKgwqAgaWYgKHJl Z2lzdGVyX2NsazgxX2RpdjQpIHsKPj4+PiBDbG9jayBkaXZpZGVycyByZXByZXNlbnQgSFcgZWxl bWVudHMuIFRoZSBwcmVzZW5jZSBvZiBhbiBIVyBlbGVtZW50Cj4+Pj4gY2Fubm90Cj4+Pj4gZGVw ZW5kZW50IG9uIHRoZSBjdXJyZW50IG9mIHRoZSBpbnB1dCBjbG9ja3MuIFRoZXJlIGlzIG5vIHdh eSB0aGlzIAo+Pj4+IGlzIHJpZ2h0Cj4+Pj4KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHByaXZhdGVf ZGF0YS0+Y2xrODFfZGl2NC5tdWx0ID0gMTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHByaXZhdGVf ZGF0YS0+Y2xrODFfZGl2NC5kaXYgPSA0Owo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gbWVz b25fdWFydF9yZWdpc3Rlcl9jbGsocG9ydCwgImNsazgxX2RpdjQiLAo+Pj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmNsazgxX2Rpdl9wYXJl bnQsIDEsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAmY2xrX2ZpeGVkX2ZhY3Rvcl9vcHMsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcHJpdmF0ZV9kYXRhLT5jbGs4MV9kaXY0 Lmh3KTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHVzZV94 dGFsX211eF9wYXJlbnRzWzBdLmh3ID0gJnByaXZhdGVfZGF0YS0+Y2xrODFfZGl2NC5odzsKPj4+ PiBUaGlzIGlzIG9ubHkgZ29pbmcgdG8gYmUgdXNlZCBvbiBtZXNvbjggYW5kIG9sZGVyLiBXb3Jz dCBjYXNlIGl0IHNob3VsZAo+Pj4+IGRlcGVuZAo+Pj4+IG9uIHRoaXMgY29tcGF0aWJsZSBidXQg SSBkb24ndCB0aGluayB0aGlzIHdvdWxkIGJlIHJpZ2h0IGhlcmUuCj4+Pj4gSU1PLCB0aGlzIHNo b3dzIHRoYXQgdGhlIFVBUlQgImJhdWQiIGlucHV0IHdhcyBhY3R1YWxseSBmZWQgYnkgYQo+Pj4+ IGRlcml2YXRpb24gb2YgImZjbGtfZGl2NCIgaW5zdGVhZCBvZiAiY2xrXzgxIiBvbiB0aGVzZSBv bGRlciBTb0NzLgo+Pj4+IFNvIGluc3RlYWQgb2YgcmVnaXN0ZXJpbmcgd2hhdCBJIHN1c3BlY3Qg dG8gYmUgYSBmYWtlIGVsZW1lbnQsIHRoZQo+Pj4+IG1lc29uOCBjbG9jayBjb250cm9sbGVyIGRy aXZlciBhbmQgRFQgc2hvdWxkIGJlIGZpeGVkIGEgdGhpcyBzaG91bGQgCj4+Pj4gZ28gYXdheS4K Pj4+Pgo+Pj4gVmlydHVhbGx5IGFsbCBVQVJUIGNvbnRyb2xsZXJzIGFyZSBzdXBwb3J0ZWQsIGJ1 dCB0aGV5IGFyZSBub3QgdXNlZCAKPj4+IGFmdGVyCj4+PiBNZXNvbjguIFNvIHRoZSBkZXNjcmlw dGlvbiBpcyBtb3JlIHJlYXNvbmFibGUgaW4gVUFSVCBkcml2ZXIuCj4+Cj4+IE5vIGl0IGlzIG5v dC4gSXQncyBub3QgdmlydHVhbCwgdGhlIHN1cHBvcnQgZm9yIG1lc29uOCBpcyB0aGVyZSBpbgo+ PiBtYWlubGluZS4KPj4KPj4gVW5sZXNzIHlvdSB0ZWxsIG1lIHRoZXJlIGlzIGFuIGFjdHVhbCAv NCBkaXZpZGVyIGluIHRoZSBVQVJUIGJsb2NrIG9mCj4+IHRoZSBtZXNvbjggYW5kIG9sZGVyIGFu ZCB0aGF0IGlzIHdhcyByZW1vdmVkIGZyb20gdGhlIG5ld2VyIFNvQywKPj4gdGhlIGJpdCBhYm92 ZSBzaG91bGQgYmUgcmVtb3ZlZCBhbmQgdGhlIG1lc29uOCBjbG9jayB0cmVlIGZpeGVkLgo+Pgo+ PiBJIHRoaW5rIGl0IGlzIG1vcmUgcHJvYmFibGUgdGhhdCB0aGUgLzQgd2FzIG5ldmVyIHRoZXJl IHRvIGJlZ2luIHdpdGgsCj4+IGFuZCB0aGF0IGNsazgxLzQgYWthICJmY2xrX2RpdjQiLCB3aGlj aCBpcyBhbHJlYWR5IGF2YWlsYWJsZSBmcm9tIHRoZQo+PiBjbG9jayBjb250cm9sbGVyLCB3YXMg YWN0dWFsbHkgcm91dGVkIG9uIHRoZXNlIG9sZGVyIFNvQ3MuCj4gSSB3aWxsIGNoZWNrIHdpdGgg dGhlIGNoaXAgZGVzaWduIGRlcGFydG1lbnQgaWYgaXQgaXMgZGl2aWRlZCBieSA0LiBJJ2xsIAo+ IGdldCBiYWNrIHRvIHlvdS4KSSBjb25maXJtZWQgd2l0aCB0aGUgY2hpcCBkZXNpZ24gZGVwYXJ0 bWVudCB0aGF0IHRoZXJlIGlzIGEgNCBkaXZpZGVyIAppbnNpZGUuIFNvIEknbSBnb2luZyB0byB1 c2UgdGhlIGRpdmlkZXIgNCBmb3IgdGhlIGRlc2NyaXB0aW9uLCBidXQgb25seSAKdGhlIG9sZGVy IG1lc29uOCBpcyBpbiB1c2UsIHNvIEknbSBnb2luZyB0byBwYXNzIHRoZSBwYXJhbWV0ZXIgdGhy b3VnaCAKY29tcGF0aWJsZS4gRG8geW91IGhhdmUgYW55IGJldHRlciBzdWdnZXN0aW9ucz8KCj4+ Cj4+Pj4+ICvCoMKgwqAgfQo+Pj4+PiDCoMKgIC3CoMKgwqAgcG9ydC0+dWFydGNsayA9IGNsa19n ZXRfcmF0ZShjbGtfYmF1ZCk7Cj4+Pj4+ICvCoMKgwqAgaWYgKHByaXZhdGVfZGF0YS0+aGFzX3h0 YWxfY2xrX3NlbCkgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcHJpdmF0ZV9kYXRhLT54dGFsX2Rp djIubXVsdCA9IDE7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBwcml2YXRlX2RhdGEtPnh0YWxfZGl2 Mi5kaXYgPSAyOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gbWVzb25fdWFydF9yZWdpc3Rl cl9jbGsocG9ydCwgInh0YWxfZGl2MiIsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmeHRhbF9kaXZfcGFyZW50LCAxLAo+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmNsa19maXhl ZF9mYWN0b3Jfb3BzLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJnByaXZhdGVfZGF0YS0+eHRhbF9kaXYyLmh3KTsKPj4+Pj4gK8KgwqDC oMKgwqDCoMKgIGlmIChyZXQpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBy ZXQ7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHh0YWxfY2xrX3NlbF9tdXhfcGFyZW50 c1swXS5odyA9ICZwcml2YXRlX2RhdGEtPnh0YWxfZGl2My5odzsKPj4+Pj4gK8KgwqDCoMKgwqDC oMKgIHh0YWxfY2xrX3NlbF9tdXhfcGFyZW50c1sxXS5md19uYW1lID0gInh0YWwiOwo+Pj4+PiAr Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBwcml2YXRlX2RhdGEtPnh0YWxfY2xrX3NlbF9tdXgucmVn ID0gcG9ydC0+bWVtYmFzZSArIAo+Pj4+PiBBTUxfVUFSVF9SRUc1Owo+Pj4+PiArwqDCoMKgwqDC oMKgwqAgcHJpdmF0ZV9kYXRhLT54dGFsX2Nsa19zZWxfbXV4Lm1hc2sgPSAweDE7Cj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCBwcml2YXRlX2RhdGEtPnh0YWxfY2xrX3NlbF9tdXguc2hpZnQgPSAyNjsK Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHByaXZhdGVfZGF0YS0+eHRhbF9jbGtfc2VsX211eC5mbGFn cyA9IENMS19NVVhfUk9VTkRfQ0xPU0VTVDsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IG1l c29uX3VhcnRfcmVnaXN0ZXJfY2xrKHBvcnQsICJ4dGFsX2Nsa19zZWwiLAo+Pj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeHRhbF9jbGtfc2Vs X211eF9wYXJlbnRzLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgQVJSQVlfU0laRSh4dGFsX2Nsa19zZWxfbXV4X3BhcmVudHMpLAo+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmNs a19tdXhfb3BzLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgJnByaXZhdGVfZGF0YS0+eHRhbF9jbGtfc2VsX211eC5odyk7Cj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gcmV0Owo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB4dGFsMl9jbGtfc2VsX211eF9w YXJlbnRzWzBdLmh3ID0gCj4+Pj4+ICZwcml2YXRlX2RhdGEtPnh0YWxfY2xrX3NlbF9tdXguaHc7 Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB4dGFsMl9jbGtfc2VsX211eF9wYXJlbnRzWzFdLmh3ID0g Cj4+Pj4+ICZwcml2YXRlX2RhdGEtPnh0YWxfZGl2Mi5odzsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKg wqDCoMKgwqAgcHJpdmF0ZV9kYXRhLT54dGFsMl9jbGtfc2VsX211eC5yZWcgPSBwb3J0LT5tZW1i YXNlICsgCj4+Pj4+IEFNTF9VQVJUX1JFRzU7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBwcml2YXRl X2RhdGEtPnh0YWwyX2Nsa19zZWxfbXV4Lm1hc2sgPSAweDE7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCBwcml2YXRlX2RhdGEtPnh0YWwyX2Nsa19zZWxfbXV4LnNoaWZ0ID0gMjc7Cj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCBwcml2YXRlX2RhdGEtPnh0YWwyX2Nsa19zZWxfbXV4LmZsYWdzID0gCj4+Pj4+ IENMS19NVVhfUk9VTkRfQ0xPU0VTVDsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IG1lc29u X3VhcnRfcmVnaXN0ZXJfY2xrKHBvcnQsICJ4dGFsMl9jbGtfc2VsIiwKPj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHh0YWwyX2Nsa19zZWxf bXV4X3BhcmVudHMsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBBUlJBWV9TSVpFKHh0YWwyX2Nsa19zZWxfbXV4X3BhcmVudHMpLAo+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmNs a19tdXhfb3BzLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgJnByaXZhdGVfZGF0YS0+eHRhbDJfY2xrX3NlbF9tdXguaHcpOwo+Pj4+PiAr wqDCoMKgwqDCoMKgwqAgaWYgKHJldCkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIHJldDsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgdXNlX3h0YWxfbXV4X3BhcmVu dHNbMV0uaHcgPSAKPj4+Pj4gJnByaXZhdGVfZGF0YS0+eHRhbDJfY2xrX3NlbF9tdXguaHc7Cj4+ Pj4+ICvCoMKgwqAgfSBlbHNlIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHVzZV94dGFsX211eF9w YXJlbnRzWzFdLmh3ID0gJnByaXZhdGVfZGF0YS0+eHRhbF9kaXYzLmh3Owo+Pj4+IFdlbGwgdGhl IGFib3ZlIGlzIGEgYml0IG92ZXItY29tcGxpY2F0ZWQuIElmIEkgc3VtbWFyaXplOgo+Pj4+IEdY QkIgYW5kIG9sZGVyIHVzZWQgYSBmaXhlZCBkaXZpZGVyIG9mIDMuIEJpdHMgMjYgYW5kIDI3IHJl YWQKPj4+PiAwIGFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbi4KPj4+PiBDaGlwcyBhZnRl ciBHWEJCIGhhdmUgMiBjb25maWd1cmFibGUgZGl2aWRlciBvZiAyIGFuZCAzLiBiaXRzIDI2IGFu ZCAyNwo+Pj4+IHNlbGVjdHMgd2hpY2ggb2YgdGhlc2UgZGl2aWRlcnMgaXMgdXNlZC4KPj4+PiBT byB0aGUgYWJvdmUgY291bGQgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBkaXZpZGVyIGNvdmVy aW5nIGJpdHMgCj4+Pj4gMjYgYW5kCj4+Pj4gMjcKPj4+PiB3aXRoIHRoZSBmb2xsb3dpbmcgZGl2 aWRlciB0YWJsZSB7IDIsIDIsIDEsIDMgfS4gVGhlIGRpdmlkZXIgc2hvdWxkIHVzZQo+Pj4+IFJP IG9wcyBhbmQgbm90IGhhdmUgQ0xLX1NFVF9SQVRFX1BBUkVOVC4gSXQgY2FuIGJlIHVzZWQgZm9y IGFsbCBjaGlwcwo+Pj4+IHZhcmlhbnQgbGlrZSB0aGlzLCBpbmNsdWRpbmcgdGhlIG9sZGVyIG9u ZXMuCj4+Pj4KPj4+IEFzIHlvdSBzYXksIHRoZSB3YXkgeW91IHNheSBpdCBpcyBjb21wbGljYXRl ZC4gSSB0aGluayB5b3UncmUgCj4+PiBjb21wbGljYXRpbmcKPj4+IHRoaW5ncy5JIGRvbid0IHVu ZGVyc3RhbmQgd2hhdCB5b3UncmUgdHJ5aW5nIHRvIGFjaGlldmUuCj4+PiBDYW4geW91IGJlIG1v cmUgc3BlY2lmaWM/Cj4+Cj4+IEknbSBwcm9wb3NpbmcgdG8gcmVwbGFjZSB0aGUgNCBlbGVtZW50 cyBhYm92ZSwgcGF0aHMsIHBhcmVudF90YWJsZSBhbmQKPj4gYWxsIHdpdGggYSBzaW5nbGUgZGl2 aWRlciB3aXRoIGEgc3BlY2lmaWMgdGFibGUuIEl0IGFjY29tcGxpc2hlcyB0aGUgCj4+IHNhbWUg dGhpbmcuCj4+Cj4+IHwtLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLXwKPj4gfCBCaXQgMjcg fCBCaXQgMjYgfCBEaXYgVmFsdWUgfAo+PiB8LS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS18 Cj4+IHzCoMKgwqDCoMKgIDAgfMKgwqDCoMKgwqAgMCB8wqDCoMKgwqDCoMKgwqDCoCAzIHwKPj4g fC0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tfAo+PiB8wqDCoMKgwqDCoCAwIHzCoMKgwqDC oMKgIDEgfMKgwqDCoMKgwqDCoMKgwqAgMSB8Cj4+IHwtLS0tLS0tLSstLS0tLS0tLSstLS0tLS0t LS0tLXwKPj4gfMKgwqDCoMKgwqAgMSB8wqDCoMKgwqDCoCAwIHzCoMKgwqDCoMKgwqDCoMKgIDIg fAo+PiB8LS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS18Cj4+IHzCoMKgwqDCoMKgIDEgfMKg wqDCoMKgwqAgMSB8wqDCoMKgwqDCoMKgwqDCoCAyIHwKPj4gfC0tLS0tLS0tKy0tLS0tLS0tKy0t LS0tLS0tLS0tfAo+Pgo+PiBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2Vy bmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQvdHJlZS9pbmNsdWRlL2xpbnV4L2Nsay1wcm92aWRl ci5oP2g9djUuMTYtcmM4I242MDIgCj4+Cj4+Cj4+IHNvbWV0aGluZyBsaWtlOgo+Pgo+PiBzdGF0 aWMgc3RydWN0IGNsa19kaXZfdGFibGUgcmVnNV90YWJsZVtdID0gewo+PiDCoMKgwqDCoHsgMCwg MyB9LAo+PiDCoMKgwqDCoMKgwqDCoMKgIHsgMSwgMSB9LAo+PiDCoMKgwqDCoMKgwqDCoMKgIHsg MiwgMiB9LAo+PiDCoMKgwqDCoMKgwqDCoMKgIHsgMywgMiB9LAo+PiB9Owo+Pgo+PiBJJ20gYWxz byBwb2ludGluZyBvdXQgdGhhdCwgc2luY2UgYml0IDI2IGFuZCAyNyByZWFkcyAwIG9uIHRoZSBv bGRlcgo+PiBTb0NzLCB0aGUgZGl2aWRlciB3b3VsZCB3b3JrIGZvciB0aGVzZSB0b28sIGFzIGxv bmcgYXMgdGhlIE9wcyBpcwo+PiByZWFkLW9ubHkuIFNvIHlvdSBkb24ndCBldmVuIG5lZWQgdG8g cmVnaXN0ZXIgZGlmZmVyZW50IGVsZW1lbnQKPj4gZGVwZW5kaW5nIG9uIHRoZSBTb0Mgd2hpY2gg c2ltcGxpZnkgdGhpbmdzIGEgYml0IG1vcmUuCj4+Cj4+IElmIHlvdSBwcmVmZXIgdG8ga2VlcCBh IGZpeGVkIGRpdmlkZXIgZm9yIHRoZSBvbGRlciBvbmVzLCBJdCdzIGZpbmUgYnkKPj4gbWUuIEl0 IGdpdmVzIGEgYml0IG1vcmUgd29yayBidXQgaXQgaXMgY2xvc2VyIHRvIHJlYWxpdHkuIFRoZSBu ZXdlciBTb0MKPj4gY291bGQgc3RpbGwgdXNlIHRoZSBjdXN0b20gZGl2aWRlciByZWdhcmRsZXNz Lgo+Pgo+PiBMYXN0LCBhbmQgYXMgZXhwbGFpbmVkIG9uIG90aGVyIGJpdHMsIHRoYXQgcGFydCBv ZiB0aGUgY2xvY2sgcGF0aCBzaG91bGQKPj4gcmVtYWluIFJPIGF0IGZpcnN0LCB0byBrZWVwIGJl aGF2aW9yIHN0YWJsZSB3aXRoIHRoaXMgY2hhbmdlLiBZb3UgbWF5Cj4+IGNoYW5nZSB0aGF0IGxh dGVyIG9uLCBpbiBhIGRlZGljYXRlZCBwYXRjaCBkZXNjcmliaW5nIHRoZSBjaGFuZ2UuCj4+Cj4g SSB1bmRlcnN0YW5kIHdoYXQgeW91IG1lYW4sIGFuZCBpIHdpbGwgdHJ5IHRvIHJlYWxpemUgaXQu IEkgaG9wZSB5b3UgY2FuIAo+IGhlbHAgcmV2aWV3IGFuZCBnaXZlIG1lIHlvdXIgc3VnZ2VzdGlv bnMuCj4+Pgo+Pj4+IFRoZSBvbmx5IGluZm9ybWF0aW9uIHlvdSBuZWVkIHRvIGNhcnJ5IGlmIHdo ZXRoZXIgb3Igbm90IHlvdSB3YW50IHRvCj4+Pj4gbWFrZSB0aGlzIGRpdmlkZXIgbW9kaWZpYWJs ZS4gVGhpcyBtZWFucyB1c2luZyB0aGUgZHQgZGF0YSB0byBzdG9yZQo+Pj4+IGNsa19kaXZfb3Bz IG9yIGNsa19kaXZfcm9fb3BzIHBvaW50ZXIuCj4+Pj4gVG8gYXZvaWQgY2hhbmdpbmcgdGhlIGJl aGF2aW9yIG9mIHRoZSBvbGRlciBwbGF0Zm9ybXMgaW4gdGhpcyBwYXRjaCwgSQo+Pj4+IHdvdWxk Cj4+Pj4gc3VnZ2VzdCB0byBtYWtlIGV2ZXJ5dGhpbmcgdXNlIGNsa19kaXZfcm9fb3BzIGZpcnN0 LCBhbmQgbWFrZSBhbm90aGVyCj4+Pj4gcGF0Y2ggdG8gdXNlIGNsa19kaXZfb3BzIGlmIG5lY2Vz c2FyeS4KPj4+Pgo+Pj4+PiArwqDCoMKgIH0KPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIHByaXZhdGVf ZGF0YS0+dXNlX3h0YWxfbXV4LnJlZyA9IHBvcnQtPm1lbWJhc2UgKyBBTUxfVUFSVF9SRUc1Owo+ Pj4+PiArwqDCoMKgIHByaXZhdGVfZGF0YS0+dXNlX3h0YWxfbXV4Lm1hc2sgPSAweDE7Cj4+Pj4+ ICvCoMKgwqAgcHJpdmF0ZV9kYXRhLT51c2VfeHRhbF9tdXguc2hpZnQgPSAyNDsKPj4+Pj4gK8Kg wqDCoCBwcml2YXRlX2RhdGEtPnVzZV94dGFsX211eC5mbGFncyA9IENMS19NVVhfUk9VTkRfQ0xP U0VTVDsKPj4+Pj4gK8KgwqDCoCByZXQgPSBtZXNvbl91YXJ0X3JlZ2lzdGVyX2Nsayhwb3J0LCAi dXNlX3h0YWwiLCAKPj4+Pj4gdXNlX3h0YWxfbXV4X3BhcmVudHMsCj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQVJSQVlfU0laRSh1c2VfeHRhbF9tdXhf cGFyZW50cyksCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJmNsa19tdXhfb3BzLAo+Pj4+IFVzZSBSTyBvcHMgaGVyZSB0byBzdGFydCB3aXRoLgo+Pj4+ IFlvdSBjYW4gbWFrZSB0aGlzIHdyaXRhYmxlIHdpdGggYW5vdGhlciBwYXRjaCBleHBsaWNpdGx5 IGRlc2NyaWJpbmcgCj4+Pj4gdGhlIGNoYW5nZS4KPj4+IEkgYWdyZWUgd2l0aCB3aGF0IHlvdSBz YXksIGFuZCBJIHdpbGwgY29ycmVjdCBpdC4KPj4+Pgo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZwcml2YXRlX2RhdGEtPnVzZV94dGFsX211eC5odyk7 Cj4+Pj4+ICvCoMKgwqAgaWYgKHJldCkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7 Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBiYXVkX2Rpdl9wYXJlbnQuaHcgPSAmcHJpdmF0ZV9kYXRh LT51c2VfeHRhbF9tdXguaHc7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBwcml2YXRlX2RhdGEtPmJh dWRfZGl2LnJlZyA9IHBvcnQtPm1lbWJhc2UgKyBBTUxfVUFSVF9SRUc1Owo+Pj4+PiArwqDCoMKg IHByaXZhdGVfZGF0YS0+YmF1ZF9kaXYuc2hpZnQgPSAwOwo+Pj4+PiArwqDCoMKgIHByaXZhdGVf ZGF0YS0+YmF1ZF9kaXYud2lkdGggPSAyMzsKPj4+Pj4gK8KgwqDCoCBwcml2YXRlX2RhdGEtPmJh dWRfZGl2LmZsYWdzID0gQ0xLX0RJVklERVJfUk9VTkRfQ0xPU0VTVDsKPj4+Pj4gK8KgwqDCoCBy ZXQgPSBtZXNvbl91YXJ0X3JlZ2lzdGVyX2Nsayhwb3J0LCAiYmF1ZF9kaXYiLAo+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZiYXVkX2Rpdl9wYXJlbnQs IDEsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmNs a19kaXZpZGVyX29wcywKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAmcHJpdmF0ZV9kYXRhLT5iYXVkX2Rpdi5odyk7Cj4+Pj4+ICvCoMKgwqAgaWYgKHJl dCkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDC oCBwcml2YXRlX2RhdGEtPmJhdWRfY2xrID0gZGV2bV9jbGtfaHdfZ2V0X2Nsayhwb3J0LT5kZXYs Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAmcHJpdmF0ZV9kYXRhLT5iYXVkX2Rpdi5odywKPj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJiYXVkX3JhdGUiKTsK Pj4+PiBUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGlzIGZ1bmN0aW9uIGluIENDRi4gSXQgd2ls bCBwaW4gdGhlIGRyaXZlciB0bwo+Pj4+IGl0c2VsZiwgbWFraW5nIGl0IHVucmVtb3ZhYmxlLiBJ dCBpcyBhbiBvbmdvaW5nIHRvcGljLiBGb3Igbm93LCBqdXN0IAo+Pj4+IHVzZQo+Pj4+ICJody0+ Y2xrIiB0byBnZXQgdGhlIHN0cnVjdCAqY2xrLgo+Pj4+Cj4+Pj4+ICvCoMKgwqAgaWYgKElTX0VS Uihwcml2YXRlX2RhdGEtPmJhdWRfY2xrKSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBk ZXZfZXJyX3Byb2JlKHBvcnQtPmRldiwKPj4+PiBJIGRvbid0IHRoaW5rIGFueXRoaW5nIGNhbiBk ZWZlciBoZXJlLCBzbyBkZXZfZXJyX3Byb2JlKCkgaXMgbm90Cj4+Pj4gbmVjZXNzYXJ5IEkgdGhp bmsKPj4+Pgo+Pj4gSSBhZ3JlZSB3aXRoIHdoYXQgeW91IHNheSwgYW5kIEkgd2lsbCBjb3JyZWN0 IGl0Lgo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBQVFJf RVJSKHByaXZhdGVfZGF0YS0+YmF1ZF9jbGspLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAiRmFpbGVkIHRvIHJlcXVlc3QgdGhlICdiYXVkX3JhdGUnIGNs b2NrXG4iKTsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+Pj4gwqDCoCB9Cj4+ Pj4+IMKgwqDCoMKgIHN0YXRpYyBpbnQgbWVzb25fdWFydF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQo+Pj4+PiDCoMKgIHsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgbWVzb25fdWFy dF9kYXRhICpwcml2YXRlX2RhdGE7Cj4+Pj4+IMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcmVzb3VyY2Ug KnJlc19tZW0sICpyZXNfaXJxOwo+Pj4+PiArwqDCoMKgIHN0cnVjdCBjbGsgKmNsa19iYXVkLCAq Y2xrX3h0YWw7Cj4+Pj4+ICvCoMKgwqAgYm9vbCByZWdpc3Rlcl9jbGs4MV9kaXY0Owo+Pj4+PiDC oMKgwqDCoMKgwqAgc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKPj4+Pj4gwqDCoMKgwqDCoMKgIGlu dCByZXQgPSAwOwo+Pj4+PiDCoMKgwqDCoMKgwqAgaW50IGlkID0gLTE7Cj4+Pj4+IEBAIC03MTEs MTggKzg1NSwzNyBAQCBzdGF0aWMgaW50IG1lc29uX3VhcnRfcHJvYmUoc3RydWN0IAo+Pj4+PiBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAt RUJVU1k7Cj4+Pj4+IMKgwqDCoMKgwqDCoCB9Cj4+Pj4+IMKgwqAgLcKgwqDCoCBwb3J0ID0gZGV2 bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgdWFydF9wb3J0KSwKPj4+Pj4gR0ZQ X0tFUk5FTCk7Cj4+Pj4+IC3CoMKgwqAgaWYgKCFwb3J0KQo+Pj4+PiArwqDCoMKgIHByaXZhdGVf ZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnByaXZhdGVfZGF0YSksCj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRlBfS0VSTkVMKTsK Pj4+Pj4gK8KgwqDCoCBpZiAoIXByaXZhdGVfZGF0YSkKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIC1FTk9NRU07Cj4+Pj4+IMKgwqAgK8KgwqDCoCBpZiAoZGV2aWNlX2dldF9tYXRj aF9kYXRhKCZwZGV2LT5kZXYpKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcHJpdmF0ZV9kYXRhLT5o YXNfeHRhbF9jbGtfc2VsID0gdHJ1ZTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIHByaXZhdGVfZGF0 YS0+cGNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAicGNsayIpOwo+Pj4+PiArwqDCoMKg IGlmIChJU19FUlIocHJpdmF0ZV9kYXRhLT5wY2xrKSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiBkZXZfZXJyX3Byb2JlKCZwZGV2LT5kZXYsIFBUUl9FUlIocHJpdmF0ZV9kYXRhLT5wY2xr KSwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkZhaWxl ZCB0byBnZXQgdGhlICdwY2xrJyBjbG9ja1xuIik7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBjbGtf YmF1ZCA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiYmF1ZCIpOwo+Pj4+PiArwqDCoMKgIGlm IChJU19FUlIoY2xrX2JhdWQpKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGRldl9lcnJf cHJvYmUoJnBkZXYtPmRldiwgUFRSX0VSUihjbGtfYmF1ZCksCj4+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJGYWlsZWQgdG8gZ2V0IHRoZSAnYmF1ZCcgY2xv Y2tcbiIpOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgY2xrX3h0YWwgPSBkZXZtX2Nsa19nZXQoJnBk ZXYtPmRldiwgInh0YWwiKTsKPj4+Pj4gK8KgwqDCoCBpZiAoSVNfRVJSKGNsa194dGFsKSkKPj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBkZXZfZXJyX3Byb2JlKCZwZGV2LT5kZXYsIFBUUl9F UlIoY2xrX3h0YWwpLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAiRmFpbGVkIHRvIGdldCB0aGUgJ3h0YWwnIGNsb2NrXG4iKTsKPj4+Pj4gKwo+Pj4+IFRo aXMgaXMgc2Vjb25kIHRpbWUgeW91IGNhbGwgZGV2bV9jbGtfZ2V0KCkgb24gdGhlc2UgY2xvY2tz LiBPbmUKPj4+PiBpbnN0YW5jZSBoYXMgdG8gZ28gYXdheQo+Pj4+Cj4+PiBJIGFncmVlIHdpdGgg d2hhdCB5b3Ugc2F5LCBhbmQgSSB3aWxsIGNvcnJlY3QgaXQuCj4+Pj4+ICvCoMKgwqAgcmVnaXN0 ZXJfY2xrODFfZGl2NCA9IGNsa19nZXRfcmF0ZShjbGtfeHRhbCkgIT0gCj4+Pj4+IGNsa19nZXRf cmF0ZShjbGtfYmF1ZCk7Cj4+Pj4+ICsKPj4+PiBUaGUgYWJvdmUgaXMgYSB1Z2x5IHdheSB0byBk aXN0aW5ndWlzaCB0aGUgbWVzb244ICgzMmJpdCkgU29DIGZhbWlseQo+Pj4+IGZyb20gdGhlIHJl c3QuIFRoaXMgZGVmaW5pdGVseSBub3QgdGhlIHdheSB0byBhY2hpZXZlIGl0Lgo+Pj4+IFRoZSBy aWdodCBpcyB0aGUgY29tcGF0aWJsZSBkYXRhIGJ1dCBoZXJlIEkgdGhpbmsgaXQgaXMgbm90Cj4+ Pj4gbmVjZXNzYXJ5LiBUaGUgY2xvY2sgaW5wdXQgc2hvdWxkIGJlIGZpeGVkLgo+Pj4+Cj4+Pj4+ ICvCoMKgwqAgcG9ydCA9ICZwcml2YXRlX2RhdGEtPnBvcnQ7Cj4+Pj4+ICsKPj4+Pj4gwqDCoMKg wqDCoMKgIHBvcnQtPm1lbWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwg cmVzX21lbSk7Cj4+Pj4+IMKgwqDCoMKgwqDCoCBpZiAoSVNfRVJSKHBvcnQtPm1lbWJhc2UpKQo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihwb3J0LT5tZW1iYXNlKTsK Pj4+Pj4gwqDCoCAtwqDCoMKgIHJldCA9IG1lc29uX3VhcnRfcHJvYmVfY2xvY2tzKHBkZXYsIHBv cnQpOwo+Pj4+PiAtwqDCoMKgIGlmIChyZXQpCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4g cmV0Owo+Pj4+PiAtCj4+Pj4+IMKgwqDCoMKgwqDCoCBwb3J0LT5pb3R5cGUgPSBVUElPX01FTTsK Pj4+Pj4gwqDCoMKgwqDCoMKgIHBvcnQtPm1hcGJhc2UgPSByZXNfbWVtLT5zdGFydDsKPj4+Pj4g wqDCoMKgwqDCoMKgIHBvcnQtPm1hcHNpemUgPSByZXNvdXJjZV9zaXplKHJlc19tZW0pOwo+Pj4+ PiBAQCAtNzM1LDYgKzg5OCwxMiBAQCBzdGF0aWMgaW50IG1lc29uX3VhcnRfcHJvYmUoc3RydWN0 IAo+Pj4+PiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+Pj4+IMKgwqDCoMKgwqDCoCBwb3J0LT54 X2NoYXIgPSAwOwo+Pj4+PiDCoMKgwqDCoMKgwqAgcG9ydC0+b3BzID0gJm1lc29uX3VhcnRfb3Bz Owo+Pj4+PiDCoMKgwqDCoMKgwqAgcG9ydC0+Zmlmb3NpemUgPSA2NDsKPj4+Pj4gK8KgwqDCoCBw b3J0LT51YXJ0Y2xrID0gY2xrX2dldF9yYXRlKGNsa19iYXVkKTsKPj4+Pj4gK8KgwqDCoCBwb3J0 LT5wcml2YXRlX2RhdGEgPSBwcml2YXRlX2RhdGE7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCByZXQg PSBtZXNvbl91YXJ0X3Byb2JlX2Nsb2Nrcyhwb3J0LCByZWdpc3Rlcl9jbGs4MV9kaXY0KTsKPj4+ Pj4gK8KgwqDCoCBpZiAocmV0KQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoCBtZXNvbl9wb3J0c1twZGV2LT5pZF0gPSBwb3J0Owo+Pj4+PiDC oMKgwqDCoMKgwqAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcG9ydCk7Cj4+Pj4+IEBAIC03 NjEsMTAgKzkzMCw0MiBAQCBzdGF0aWMgaW50IG1lc29uX3VhcnRfcmVtb3ZlKHN0cnVjdCAKPj4+ Pj4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+Pj4+PiDCoMKgIH0KPj4+Pj4gwqDCoMKgwqAgc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWVzb25fdWFydF9kdF9tYXRjaFtdID0gewo+ Pj4+PiAtwqDCoMKgIHsgLmNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbjYtdWFydCIgfSwKPj4+ Pj4gLcKgwqDCoCB7IC5jb21wYXRpYmxlID0gImFtbG9naWMsbWVzb244LXVhcnQiIH0sCj4+Pj4+ IC3CoMKgwqAgeyAuY29tcGF0aWJsZSA9ICJhbWxvZ2ljLG1lc29uOGItdWFydCIgfSwKPj4+Pj4g LcKgwqDCoCB7IC5jb21wYXRpYmxlID0gImFtbG9naWMsbWVzb24tZ3gtdWFydCIgfSwKPj4+Pj4g K8KgwqDCoCB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCAuY29tcGF0aWJsZSA9ICJhbWxvZ2ljLG1l c29uNi11YXJ0IiwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC5kYXRhID0gKHZvaWQgKilmYWxzZSwK Pj4+Pj4gK8KgwqDCoCB9LAo+Pj4+PiArwqDCoMKgIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC5j b21wYXRpYmxlID0gImFtbG9naWMsbWVzb244LXVhcnQiLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqAg LmRhdGEgPSAodm9pZCAqKWZhbHNlLAo+Pj4+PiArwqDCoMKgIH0sCj4+Pj4+ICvCoMKgwqAgewo+ Pj4+PiArwqDCoMKgwqDCoMKgwqAgLmNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbjhiLXVhcnQi LAo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgLmRhdGEgPSAodm9pZCAqKWZhbHNlLAo+Pj4+PiArwqDC oMKgIH0sCj4+Pj4+ICvCoMKgwqAgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgLmNvbXBhdGlibGUg PSAiYW1sb2dpYyxtZXNvbi1neGJiLXVhcnQiLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgLmRhdGEg PSAodm9pZCAqKWZhbHNlLAo+Pj4+PiArwqDCoMKgIH0sCj4+Pj4+ICvCoMKgwqAgewo+Pj4+PiAr wqDCoMKgwqDCoMKgwqAgLmNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbi1neGwtdWFydCIsCj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoCAuZGF0YSA9ICh2b2lkICopdHJ1ZSwKPj4+Pj4gK8KgwqDCoCB9 LAo+Pj4+PiArwqDCoMKgIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC5jb21wYXRpYmxlID0gImFt bG9naWMsbWVzb24tZzEyYS11YXJ0IiwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC5kYXRhID0gKHZv aWQgKil0cnVlLAo+Pj4+PiArwqDCoMKgIH0sCj4+Pj4+ICvCoMKgwqAgewo+Pj4+PiArwqDCoMKg wqDCoMKgwqAgLmNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbi1zNC11YXJ0IiwKPj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIC5kYXRhID0gKHZvaWQgKil0cnVlLAo+Pj4+PiArwqDCoMKgIH0sCj4+Pj4+ ICvCoMKgwqAgLyoKPj4+Pj4gK8KgwqDCoMKgICogZGVwcmVjYXRlZCwgZG9uJ3QgdXNlIGFueW1v cmUgYmVjYXVzZSBpdCBkb2Vzbid0IGRpZmZlcmVudGlhdGUKPj4+Pj4gK8KgwqDCoMKgICogYmV0 d2VlbiBHWEJCIGFuZCBHWEwgd2hpY2ggaGF2ZSBkaWZmZXJlbnQgcmV2aXNpb25zIG9mIHRoZSAK Pj4+Pj4gVUFSVCBJUC4KPj4+Pj4gK8KgwqDCoMKgICovCj4+Pj4+ICvCoMKgwqAgewo+Pj4+PiAr wqDCoMKgwqDCoMKgwqAgLmNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbi1neC11YXJ0IiwKPj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIC5kYXRhID0gKHZvaWQgKilmYWxzZSwKPj4+Pj4gK8KgwqDCoCB9 LAo+Pj4+PiDCoMKgwqDCoMKgwqAgeyAvKiBzZW50aW5lbCAqLyB9LAo+Pj4+PiDCoMKgIH07Cj4+ Pj4+IMKgwqAgTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbWVzb25fdWFydF9kdF9tYXRjaCk7Cj4+ Pj4KPj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LWFtbG9naWMgbWFpbGluZyBsaXN0CmxpbnV4LWFtbG9naWNAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFtbG9n aWMK