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 B1B73C77B7C for ; Tue, 9 May 2023 13:40:53 +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=/ao+tXtGBize00TbeXZOphUycbXnm4iv2jfLthrfvCs=; b=zJRwrg/QILBPMo Iwd3owwpYpaD9T9ifELrRnuuzlYSf7IJEl91h0aJ0LAa5Zz4oGuAiNEEDLdv4L27ergDQzzm1wwLS NSnXjc00yscim3QbzApBaLHN1eoExLvj52zF0e9oud1XUTSZOJnCIRpRgqCxwV0vI9GXvaf1PK8aC wcbS5LAJTlb8aXtqoSsBUOOsn8Kmdl1t9MmpTXRSYjI8StBUmMxZoJp+Y6w+Tf2x3PosUt/JSl3hO kaKNuEn1H3PEs8hmjhurmGzl63cHGiRZK3IFAqU772KSsny1ni0qLKrLaGXKVtjKkgLSgVk3Ymrg4 X5+xQE850CZF6DQi2VTg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pwNa7-003Qtk-0k; Tue, 09 May 2023 13:40:43 +0000 Received: from relay4-d.mail.gandi.net ([2001:4b98:dc4:8::224]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pwNa1-003QqC-0x; Tue, 09 May 2023 13:40:41 +0000 Received: (Authenticated sender: alex@ghiti.fr) by mail.gandi.net (Postfix) with ESMTPSA id 46164E001E; Tue, 9 May 2023 13:40:19 +0000 (UTC) Message-ID: Date: Tue, 9 May 2023 15:40:19 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH 4/4] riscv: Enable perf counters user access only through perf Content-Language: en-US To: Emil Renner Berthing , Alexandre Ghiti Cc: Andrew Jones , Jonathan Corbet , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Paul Walmsley , Palmer Dabbelt , Albert Ou , Atish Patra , Anup Patel , Will Deacon , Rob Herring , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-riscv@lists.infradead.org, linux-arm-kernel@lists.infradead.org References: <20230413161725.195417-1-alexghiti@rivosinc.com> <20230413161725.195417-5-alexghiti@rivosinc.com> From: Alexandre Ghiti In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230509_064037_661026_6D5F50DC X-CRM114-Status: GOOD ( 33.74 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Ck9uIDUvOS8yMyAxNDoyNCwgRW1pbCBSZW5uZXIgQmVydGhpbmcgd3JvdGU6Cj4gT24gV2VkLCAy NiBBcHIgMjAyMyBhdCAxNToxOSwgQWxleGFuZHJlIEdoaXRpIDxhbGV4Z2hpdGlAcml2b3NpbmMu Y29tPiB3cm90ZToKPj4gT24gV2VkLCBBcHIgMjYsIDIwMjMgYXQgMjo1N+KAr1BNIEFuZHJldyBK b25lcyA8YWpvbmVzQHZlbnRhbmFtaWNyby5jb20+IHdyb3RlOgo+Pj4gT24gVGh1LCBBcHIgMTMs IDIwMjMgYXQgMDY6MTc6MjVQTSArMDIwMCwgQWxleGFuZHJlIEdoaXRpIHdyb3RlOgo+Pj4+IFdl IHVzZWQgdG8gdW5jb25kaXRpb25uYWxseSBleHBvc2UgdGhlIGN5Y2xlIGFuZCBpbnN0cmV0IGNz cnMgdG8KPj4+PiB1c2Vyc3BhY2UsIHdoaWNoIGdpdmVzIHJpc2UgdG8gc2VjdXJpdHkgY29uY2Vy bnMuCj4+Pj4KPj4+PiBTbyBvbmx5IGFsbG93IGFjY2VzcyB0byBodyBjb3VudGVycyBmcm9tIHVz ZXJzcGFjZSB0aHJvdWdoIHRoZSBwZXJmCj4+Pj4gZnJhbWV3b3JrIHdoaWNoIHdpbGwgaGFuZGxl IGNvbnRleHQgc3dpdGNocywgcGVyLXRhc2sgZXZlbnRzLi4uZXRjLiBCdXQKPj4+PiBhcyB3ZSBj YW5ub3QgYnJlYWsgdXNlcnNwYWNlLCB3ZSBnaXZlIHRoZSB1c2VyIHRoZSBjaG9pY2UgdG8gZ28g YmFjayB0bwo+Pj4+IHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgYnkgc2V0dGluZyB0aGUgc3lzY3Rs IHBlcmZfdXNlcl9hY2Nlc3MuCj4+Pj4KPj4+PiBXZSBhbHNvIGludHJvZHVjZSBhIG1lYW5zIHRv IGRpcmVjdGx5IG1hcCB0aGUgaGFyZHdhcmUgY291bnRlcnMgdG8KPj4+PiB1c2Vyc3BhY2UsIHRo dXMgYXZvaWRpbmcgdGhlIG5lZWQgZm9yIHN5c2NhbGxzIHdoZW5ldmVyIGFuIGFwcGxpY2F0aW9u Cj4+Pj4gd2FudHMgdG8gYWNjZXNzIGNvdW50ZXJzIHZhbHVlcy4KPj4+Pgo+Pj4+IE5vdGUgdGhh dCBhcmNoX3BlcmZfdXBkYXRlX3VzZXJwYWdlIGlzIGEgY29weSBvZiBhcm02NCBjb2RlLgo+Pj4+ Cj4+Pj4gU2lnbmVkLW9mZi1ieTogQWxleGFuZHJlIEdoaXRpIDxhbGV4Z2hpdGlAcml2b3NpbmMu Y29tPgo+Pj4+IC0tLQo+Pj4+ICAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2Vy bmVsLnJzdCB8ICAyMyArKystCj4+Pj4gICBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmZfZXZl bnQuaCAgICAgICAgIHwgICAzICsKPj4+PiAgIGFyY2gvcmlzY3Yva2VybmVsL01ha2VmaWxlICAg ICAgICAgICAgICAgICAgfCAgIDIgKy0KPj4+PiAgIGFyY2gvcmlzY3Yva2VybmVsL3BlcmZfZXZl bnQuYyAgICAgICAgICAgICAgfCAgNjUgKysrKysrKysrKysKPj4+PiAgIGRyaXZlcnMvcGVyZi9y aXNjdl9wbXUuYyAgICAgICAgICAgICAgICAgICAgfCAgNDIgKysrKysrKysKPj4+PiAgIGRyaXZl cnMvcGVyZi9yaXNjdl9wbXVfbGVnYWN5LmMgICAgICAgICAgICAgfCAgMTcgKysrCj4+Pj4gICBk cml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jICAgICAgICAgICAgICAgIHwgMTEzICsrKysrKysr KysrKysrKysrKy0tCj4+Pj4gICBpbmNsdWRlL2xpbnV4L3BlcmYvcmlzY3ZfcG11LmggICAgICAg ICAgICAgIHwgICAzICsKPj4+PiAgIHRvb2xzL2xpYi9wZXJmL21tYXAuYyAgICAgICAgICAgICAg ICAgICAgICAgfCAgNjUgKysrKysrKysrKysKPj4+PiAgIDkgZmlsZXMgY2hhbmdlZCwgMzIyIGlu c2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQo+Pj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGFy Y2gvcmlzY3Yva2VybmVsL3BlcmZfZXZlbnQuYwo+Pj4+Cj4+Pj4gZGlmZiAtLWdpdCBhL0RvY3Vt ZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL2tlcm5lbC5yc3QgYi9Eb2N1bWVudGF0aW9uL2Fk bWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0Cj4+Pj4gaW5kZXggNGI3YmZlYTI4Y2Q3Li4wMmIy YTQwYTM2NDcgMTAwNjQ0Cj4+Pj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNj dGwva2VybmVsLnJzdAo+Pj4+ICsrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3Rs L2tlcm5lbC5yc3QKPj4+PiBAQCAtOTQxLDE2ICs5NDEsMzEgQEAgZW5hYmxlZCwgb3RoZXJ3aXNl IHdyaXRpbmcgdG8gdGhpcyBmaWxlIHdpbGwgcmV0dXJuIGBgLUVCVVNZYGAuCj4+Pj4gICBUaGUg ZGVmYXVsdCB2YWx1ZSBpcyA4Lgo+Pj4+Cj4+Pj4KPj4+PiAtcGVyZl91c2VyX2FjY2VzcyAoYXJt NjQgb25seSkKPj4+PiAtPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4+Pj4gK3Bl cmZfdXNlcl9hY2Nlc3MgKGFybTY0IGFuZCByaXNjdiBvbmx5KQo+Pj4+ICs9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KPj4+PiArCj4+Pj4gK0NvbnRyb2xzIHVzZXIgc3Bh Y2UgYWNjZXNzIGZvciByZWFkaW5nIHBlcmYgZXZlbnQgY291bnRlcnMuCj4+Pj4KPj4+PiAtQ29u dHJvbHMgdXNlciBzcGFjZSBhY2Nlc3MgZm9yIHJlYWRpbmcgcGVyZiBldmVudCBjb3VudGVycy4g V2hlbiBzZXQgdG8gMSwKPj4+PiAtdXNlciBzcGFjZSBjYW4gcmVhZCBwZXJmb3JtYW5jZSBtb25p dG9yIGNvdW50ZXIgcmVnaXN0ZXJzIGRpcmVjdGx5Lgo+Pj4+ICthcm02NAo+Pj4+ICs9PT09PQo+ Pj4+Cj4+Pj4gICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwIChhY2Nlc3MgZGlzYWJsZWQpLgo+Pj4+ ICtXaGVuIHNldCB0byAxLCB1c2VyIHNwYWNlIGNhbiByZWFkIHBlcmZvcm1hbmNlIG1vbml0b3Ig Y291bnRlciByZWdpc3RlcnMKPj4+PiArZGlyZWN0bHkuCj4+Pj4KPj4+PiAgIFNlZSBEb2N1bWVu dGF0aW9uL2FybTY0L3BlcmYucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLgo+Pj4+Cj4+Pj4gK3Jp c2N2Cj4+Pj4gKz09PT09Cj4+Pj4gKwo+Pj4+ICtXaGVuIHNldCB0byAwLCB1c2VyIGFjY2VzcyBp cyBkaXNhYmxlZC4KPj4+PiArCj4+Pj4gK1doZW4gc2V0IHRvIDEsIHVzZXIgc3BhY2UgY2FuIHJl YWQgcGVyZm9ybWFuY2UgbW9uaXRvciBjb3VudGVyIHJlZ2lzdGVycwo+Pj4+ICtkaXJlY3RseSBv bmx5IHRocm91Z2ggcGVyZiwgYW55IGRpcmVjdCBhY2Nlc3Mgd2l0aG91dCBwZXJmIGludGVydmVu dGlvbiB3aWxsCj4+Pj4gK3RyaWdnZXIgYW4gaWxsZWdhbCBpbnN0cnVjdGlvbi4KPj4+PiArCj4+ Pj4gK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDIsIGl0IGVuYWJsZXMgdGhlIGxlZ2FjeSBtb2RlLCB0 aGF0IGlzIHVzZXIgc3BhY2UgaGFzCj4+Pj4gK2RpcmVjdCBhY2Nlc3MgdG8gY3ljbGUsIHRpbWUg YW5kIGluc3JldCBDU1JzIG9ubHkuCj4+PiBJIHRoaW5rIHRoaXMgZGVmYXVsdCB2YWx1ZSBzaG91 bGQgYmUgYSBLY29uZmlnIHN5bWJvbCwgYWxsb3dpbmcga2VybmVscyB0bwo+Pj4gYmUgYnVpbHQg d2l0aCBhIHNlY3VyZSBkZWZhdWx0Lgo+PiBBY3R1YWxseSBJIHdhcyBtb3JlIGluIGZhdm9yIG9m IGhhdmluZyB0aGUgZGVmYXVsdCB0byAxIChpZSB0aGUgc2VjdXJlCj4+IG9wdGlvbikgYW5kIGxl dCB0aGUgZGlzdHJvcyBkZWFsIHdpdGggdGhlIGxlZ2FjeSBtb2RlICh2aWEgYSBzeXNjdGwKPj4g cGFyYW1ldGVyIG9uIHRoZSBjb21tYW5kIGxpbmUpIGFzIGxvbmcgYXMgdXNlci1zcGFjZSBoYXMg bm90IGJlZW4KPj4gZml4ZWQ6IGRvZXMgdGhhdCBtYWtlIHNlbnNlPwo+IFdpdGggdGhlIExpbnV4 IHBvbGljeSBvZiBub3QgYnJlYWtpbmcgdXNlcnNwYWNlIEkgd291bGRuJ3QgdGhpbmsKPiBoYXZp bmcgYW55dGhpbmcgYnV0IDIgYXMgdGhlIGRlZmF1bHQgaXMgb2suIElzIHRoZXJlIGEgcmVhc29u IHdlIGNhbid0Cj4gaGF2ZSBhIG1vZGUgdGhhdCBhbGxvd3MgYm90aCB0aGUgbGVnYWN5IGFuZCBw ZXJmIGludGVyZmFjZT8KCgpObywgcGVyZiB3aWxsIGVuYWJsZS9kaXNhYmxlIGNvdW50ZXJzIGF0 IGNvbnRleHQgc3dpdGNoIHNvIHRoZSBsZWdhY3kgCmFwcGxpY2F0aW9ucyB0aGF0IGV4cGVjdCB0 aGUgQ1NScyB0byBiZSBhY2Nlc3NpYmxlIHdpbGwgZmFpbCBhbmQgdGhlIApnb2FsIG9mIHVzaW5n IHBlcmYgaXMgdG8gYXZvaWQgbGVha2luZyBhcHBsaWNhdGlvbiBkZXRhaWxzLgoKCj4KPj4+PiAg IHBpZF9tYXgKPj4+PiAgID09PT09PT0KPj4+PiBkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNs dWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQu aAo+Pj4+IGluZGV4IGQ0MmM5MDFmOWE5Ny4uOWZkZmRkOWRjOTJkIDEwMDY0NAo+Pj4+IC0tLSBh L2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCj4+Pj4gKysrIGIvYXJjaC9yaXNj di9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKPj4+PiBAQCAtOSw1ICs5LDggQEAKPj4+PiAgICNk ZWZpbmUgX0FTTV9SSVNDVl9QRVJGX0VWRU5UX0gKPj4+Pgo+Pj4+ICAgI2luY2x1ZGUgPGxpbnV4 L3BlcmZfZXZlbnQuaD4KPj4+PiArCj4+Pj4gKyNkZWZpbmUgUEVSRl9FVkVOVF9GTEFHX0xFR0FD WSAgICAgICAxCj4+Pj4gKwo+Pj4+ICAgI2RlZmluZSBwZXJmX2FyY2hfYnBmX3VzZXJfcHRfcmVn cyhyZWdzKSAoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgKilyZWdzCj4+Pj4gICAjZW5kaWYgLyog X0FTTV9SSVNDVl9QRVJGX0VWRU5UX0ggKi8KPj4+PiBkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9r ZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Jpc2N2L2tlcm5lbC9NYWtlZmlsZQo+Pj4+IGluZGV4IGFh MjJmODdmYWVhZS4uOWFlOTUxYjA3ODQ3IDEwMDY0NAo+Pj4+IC0tLSBhL2FyY2gvcmlzY3Yva2Vy bmVsL01ha2VmaWxlCj4+Pj4gKysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvTWFrZWZpbGUKPj4+PiBA QCAtNzAsNyArNzAsNyBAQCBvYmotJChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpICAgICAgICArPSBt Y291bnQtZHluLm8KPj4+Pgo+Pj4+ICAgb2JqLSQoQ09ORklHX1RSQUNFX0lSUUZMQUdTKSArPSB0 cmFjZV9pcnEubwo+Pj4+Cj4+Pj4gLW9iai0kKENPTkZJR19QRVJGX0VWRU5UUykgICAgKz0gcGVy Zl9jYWxsY2hhaW4ubwo+Pj4+ICtvYmotJChDT05GSUdfUEVSRl9FVkVOVFMpICAgICs9IHBlcmZf Y2FsbGNoYWluLm8gcGVyZl9ldmVudC5vCj4+Pj4gICBvYmotJChDT05GSUdfSEFWRV9QRVJGX1JF R1MpICs9IHBlcmZfcmVncy5vCj4+Pj4gICBvYmotJChDT05GSUdfUklTQ1ZfU0JJKSAgICAgICAg ICAgICAgKz0gc2JpLm8KPj4+PiAgIGlmZXEgKCQoQ09ORklHX1JJU0NWX1NCSSksIHkpCj4+Pj4g ZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvcmlzY3Yv a2VybmVsL3BlcmZfZXZlbnQuYwo+Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+Pj4gaW5kZXgg MDAwMDAwMDAwMDAwLi40YTc1YWI2MjhiZmIKPj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4gKysrIGIv YXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9ldmVudC5jCj4+Pj4gQEAgLTAsMCArMSw2NSBAQAo+Pj4+ ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4+Pj4gKyNpbmNsdWRl IDxsaW51eC9wZXJmL3Jpc2N2X3BtdS5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvc2NoZWRfY2xv Y2suaD4KPj4+PiArCj4+Pj4gK3ZvaWQgYXJjaF9wZXJmX3VwZGF0ZV91c2VycGFnZShzdHJ1Y3Qg cGVyZl9ldmVudCAqZXZlbnQsCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UgKnVzZXJwZywgdTY0IG5vdykKPj4+PiArewo+Pj4+ICsg ICAgIHN0cnVjdCByaXNjdl9wbXUgKnJ2cG11ID0gdG9fcmlzY3ZfcG11KGV2ZW50LT5wbXUpOwo+ Pj4+ICsgICAgIHN0cnVjdCBjbG9ja19yZWFkX2RhdGEgKnJkOwo+Pj4+ICsgICAgIHVuc2lnbmVk IGludCBzZXE7Cj4+Pj4gKyAgICAgdTY0IG5zOwo+Pj4+ICsKPj4+PiArICAgICB1c2VycGctPmNh cF91c2VyX3RpbWUgPSAwOwo+Pj4+ICsgICAgIHVzZXJwZy0+Y2FwX3VzZXJfdGltZV96ZXJvID0g MDsKPj4+PiArICAgICB1c2VycGctPmNhcF91c2VyX3RpbWVfc2hvcnQgPSAwOwo+Pj4+ICsgICAg IHVzZXJwZy0+Y2FwX3VzZXJfcmRwbWMgPQo+Pj4+ICsgICAgICAgICAgICAgISEoZXZlbnQtPmh3 LmZsYWdzICYgUEVSRl9FVkVOVF9GTEFHX1VTRVJfUkVBRF9DTlQpOwo+Pj4+ICsKPj4+PiArICAg ICAvKgo+Pj4+ICsgICAgICAqIFRoZSBjb3VudGVycyBhcmUgNjQtYml0IGJ1dCB0aGUgcHJpdiBz cGVjIGRvZXNuJ3QgbWFuZGF0ZSBhbGwgdGhlCj4+Pj4gKyAgICAgICogYml0cyB0byBiZSBpbXBs ZW1lbnRlZDogdGhhdCdzIHdoeSwgY291bnRlciB3aWR0aCBjYW4gdmFyeSBiYXNlZCBvbgo+Pj4+ ICsgICAgICAqIHRoZSBjcHUgdmVuZG9yLgo+Pj4+ICsgICAgICAqLwo+Pj4+ICsgICAgIHVzZXJw Zy0+cG1jX3dpZHRoID0gcnZwbXUtPmN0cl9nZXRfd2lkdGgoZXZlbnQtPmh3LmlkeCkgKyAxOwo+ Pj4+ICsKPj4+PiArICAgICBkbyB7Cj4+Pj4gKyAgICAgICAgICAgICByZCA9IHNjaGVkX2Nsb2Nr X3JlYWRfYmVnaW4oJnNlcSk7Cj4+Pj4gKwo+Pj4+ICsgICAgICAgICAgICAgdXNlcnBnLT50aW1l X211bHQgPSByZC0+bXVsdDsKPj4+PiArICAgICAgICAgICAgIHVzZXJwZy0+dGltZV9zaGlmdCA9 IHJkLT5zaGlmdDsKPj4+PiArICAgICAgICAgICAgIHVzZXJwZy0+dGltZV96ZXJvID0gcmQtPmVw b2NoX25zOwo+Pj4+ICsgICAgICAgICAgICAgdXNlcnBnLT50aW1lX2N5Y2xlcyA9IHJkLT5lcG9j aF9jeWM7Cj4+Pj4gKyAgICAgICAgICAgICB1c2VycGctPnRpbWVfbWFzayA9IHJkLT5zY2hlZF9j bG9ja19tYXNrOwo+Pj4+ICsKPj4+PiArICAgICAgICAgICAgIC8qCj4+Pj4gKyAgICAgICAgICAg ICAgKiBTdWJ0cmFjdCB0aGUgY3ljbGUgYmFzZSwgc3VjaCB0aGF0IHNvZnR3YXJlIHRoYXQKPj4+ PiArICAgICAgICAgICAgICAqIGRvZXNuJ3Qga25vdyBhYm91dCBjYXBfdXNlcl90aW1lX3Nob3J0 IHN0aWxsICd3b3JrcycKPj4+PiArICAgICAgICAgICAgICAqIGFzc3VtaW5nIG5vIHdyYXBzLgo+ Pj4+ICsgICAgICAgICAgICAgICovCj4+Pj4gKyAgICAgICAgICAgICBucyA9IG11bF91NjRfdTMy X3NocihyZC0+ZXBvY2hfY3ljLCByZC0+bXVsdCwgcmQtPnNoaWZ0KTsKPj4+PiArICAgICAgICAg ICAgIHVzZXJwZy0+dGltZV96ZXJvIC09IG5zOwo+Pj4+ICsKPj4+PiArICAgICB9IHdoaWxlIChz Y2hlZF9jbG9ja19yZWFkX3JldHJ5KHNlcSkpOwo+Pj4+ICsKPj4+PiArICAgICB1c2VycGctPnRp bWVfb2Zmc2V0ID0gdXNlcnBnLT50aW1lX3plcm8gLSBub3c7Cj4+Pj4gKwo+Pj4+ICsgICAgIC8q Cj4+Pj4gKyAgICAgICogdGltZV9zaGlmdCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgZ3JlYXRlciB0 aGFuIDMxIGR1ZSB0bwo+Pj4+ICsgICAgICAqIHRoZSBvcmlnaW5hbCBwdWJsaXNoZWQgY29udmVy c2lvbiBhbGdvcml0aG0gc2hpZnRpbmcgYQo+Pj4+ICsgICAgICAqIDMyLWJpdCB2YWx1ZSAobm93 IHNwZWNpZmllcyBhIDY0LWJpdCB2YWx1ZSkgLSByZWZlcgo+Pj4+ICsgICAgICAqIHBlcmZfZXZl bnRfbW1hcF9wYWdlIGRvY3VtZW50YXRpb24gaW4gcGVyZl9ldmVudC5oLgo+Pj4+ICsgICAgICAq Lwo+Pj4+ICsgICAgIGlmICh1c2VycGctPnRpbWVfc2hpZnQgPT0gMzIpIHsKPj4+PiArICAgICAg ICAgICAgIHVzZXJwZy0+dGltZV9zaGlmdCA9IDMxOwo+Pj4+ICsgICAgICAgICAgICAgdXNlcnBn LT50aW1lX211bHQgPj49IDE7Cj4+Pj4gKyAgICAgfQo+Pj4+ICsKPj4+PiArICAgICAvKgo+Pj4+ ICsgICAgICAqIEludGVybmFsIHRpbWVrZWVwaW5nIGZvciBlbmFibGVkL3J1bm5pbmcvc3RvcHBl ZCB0aW1lcwo+Pj4+ICsgICAgICAqIGlzIGFsd2F5cyBjb21wdXRlZCB3aXRoIHRoZSBzY2hlZF9j bG9jay4KPj4+PiArICAgICAgKi8KPj4+PiArICAgICB1c2VycGctPmNhcF91c2VyX3RpbWUgPSAx Owo+Pj4+ICsgICAgIHVzZXJwZy0+Y2FwX3VzZXJfdGltZV96ZXJvID0gMTsKPj4+PiArICAgICB1 c2VycGctPmNhcF91c2VyX3RpbWVfc2hvcnQgPSAxOwo+Pj4+ICt9Cj4+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvcGVyZi9yaXNjdl9wbXUuYyBiL2RyaXZlcnMvcGVyZi9yaXNjdl9wbXUuYwo+Pj4+ IGluZGV4IGViY2E1ZWFiOWM5Yi4uMTI2NzVlZTExMjNjIDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZl cnMvcGVyZi9yaXNjdl9wbXUuYwo+Pj4+ICsrKyBiL2RyaXZlcnMvcGVyZi9yaXNjdl9wbXUuYwo+ Pj4+IEBAIC0xNzEsNiArMTcxLDggQEAgaW50IHJpc2N2X3BtdV9ldmVudF9zZXRfcGVyaW9kKHN0 cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPj4+Pgo+Pj4+ICAgICAgICBsb2NhbDY0X3NldCgmaHdj LT5wcmV2X2NvdW50LCAodTY0KS1sZWZ0KTsKPj4+Pgo+Pj4+ICsgICAgIHBlcmZfZXZlbnRfdXBk YXRlX3VzZXJwYWdlKGV2ZW50KTsKPj4+PiArCj4+Pj4gICAgICAgIHJldHVybiBvdmVyZmxvdzsK Pj4+PiAgIH0KPj4+Pgo+Pj4+IEBAIC0yODMsNiArMjg1LDQzIEBAIHN0YXRpYyBpbnQgcmlzY3Zf cG11X2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+Pj4+ICAgICAgICByZXR1 cm4gMDsKPj4+PiAgIH0KPj4+Pgo+Pj4+ICtzdGF0aWMgaW50IHJpc2N2X3BtdV9ldmVudF9pZHgo c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+Pj4+ICt7Cj4+Pj4gKyAgICAgc3RydWN0IHJpc2N2 X3BtdSAqcnZwbXUgPSB0b19yaXNjdl9wbXUoZXZlbnQtPnBtdSk7Cj4+Pj4gKwo+Pj4+ICsgICAg IGlmICghKGV2ZW50LT5ody5mbGFncyAmIFBFUkZfRVZFTlRfRkxBR19VU0VSX1JFQURfQ05UKSkK Pj4+PiArICAgICAgICAgICAgIHJldHVybiAwOwo+Pj4+ICsKPj4+PiArICAgICAvKgo+Pj4+ICsg ICAgICAqIGN5Y2xlIGFuZCBpbnN0cmV0IGNhbiBlaXRoZXIgYmUgcmV0cmlldmVkIGZyb20gdGhl aXIgZml4ZWQgY291bnRlcnMKPj4+PiArICAgICAgKiBvciBmcm9tIHByb2dyYW1tYWJsZSBjb3Vu dGVycywgdGhlIGxhdHRlciBiZWluZyB0aGUgcHJlZmVycmVkIHdheQo+Pj4+ICsgICAgICAqIHNp bmNlIGN5Y2xlIGFuZCBpbnN0cmV0IGNvdW50ZXJzIGRvIG5vdCBzdXBwb3J0IHNhbXBsaW5nLgo+ Pj4+ICsgICAgICAqLwo+Pj4+ICsKPj4+PiArICAgICByZXR1cm4gcnZwbXUtPmNzcl9pbmRleChl dmVudCkgKyAxOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCByaXNjdl9wbXVfZXZl bnRfbWFwcGVkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgc3RydWN0IG1tX3N0cnVjdCAqbW0p Cj4+Pj4gK3sKPj4+PiArICAgICAvKgo+Pj4+ICsgICAgICAqIFRoZSB1c2VyIG1tYXBwZWQgdGhl IGV2ZW50IHRvIGRpcmVjdGx5IGFjY2VzcyBpdDogdGhpcyBpcyB3aGVyZQo+Pj4+ICsgICAgICAq IHdlIGRldGVybWluZSBiYXNlZCBvbiBzeXNjdGxfcGVyZl91c2VyX2FjY2VzcyBpZiB3ZSBncmFu dCB1c2Vyc3BhY2UKPj4+PiArICAgICAgKiB0aGUgZGlyZWN0IGFjY2VzcyB0byB0aGlzIGV2ZW50 LiBUaGF0IG1lYW5zIHRoYXQgd2l0aGluIHRoZSBzYW1lCj4+Pj4gKyAgICAgICogdGFzaywgc29t ZSBldmVudHMgbWF5IGJlIGRpcmVjdGx5IGFjY2Vzc2libGUgYW5kIHNvbWUgb3RoZXIgbWF5IG5v dCwKPj4+PiArICAgICAgKiBpZiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiBzeXNjdGxf cGVyZl91c2VyX2FjY2Vzc3MgaW4gdGhlCj4+Pj4gKyAgICAgICogbWVhbnRpbWUuCj4+Pj4gKyAg ICAgICovCj4+Pj4gKyAgICAgc3RydWN0IHJpc2N2X3BtdSAqcnZwbXUgPSB0b19yaXNjdl9wbXUo ZXZlbnQtPnBtdSk7Cj4+Pj4gKwo+Pj4+ICsgICAgIGV2ZW50LT5ody5mbGFncyB8PSBydnBtdS0+ ZXZlbnRfZmxhZ3MoZXZlbnQpOwo+Pj4+ICsgICAgIHBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdl KGV2ZW50KTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIHZvaWQgcmlzY3ZfcG11X2V2ZW50 X3VubWFwcGVkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgc3RydWN0IG1tX3N0cnVjdCAqbW0p Cj4+Pj4gK3sKPj4+PiArICAgICBldmVudC0+aHcuZmxhZ3MgJj0gflBFUkZfRVZFTlRfRkxBR19V U0VSX1JFQURfQ05UOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICAgc3RydWN0IHJpc2N2X3BtdSAqcmlz Y3ZfcG11X2FsbG9jKHZvaWQpCj4+Pj4gICB7Cj4+Pj4gICAgICAgIHN0cnVjdCByaXNjdl9wbXUg KnBtdTsKPj4+PiBAQCAtMzA3LDYgKzM0Niw5IEBAIHN0cnVjdCByaXNjdl9wbXUgKnJpc2N2X3Bt dV9hbGxvYyh2b2lkKQo+Pj4+ICAgICAgICB9Cj4+Pj4gICAgICAgIHBtdS0+cG11ID0gKHN0cnVj dCBwbXUpIHsKPj4+PiAgICAgICAgICAgICAgICAuZXZlbnRfaW5pdCAgICAgPSByaXNjdl9wbXVf ZXZlbnRfaW5pdCwKPj4+PiArICAgICAgICAgICAgIC5ldmVudF9tYXBwZWQgICA9IHJpc2N2X3Bt dV9ldmVudF9tYXBwZWQsCj4+Pj4gKyAgICAgICAgICAgICAuZXZlbnRfdW5tYXBwZWQgPSByaXNj dl9wbXVfZXZlbnRfdW5tYXBwZWQsCj4+Pj4gKyAgICAgICAgICAgICAuZXZlbnRfaWR4ICAgICAg PSByaXNjdl9wbXVfZXZlbnRfaWR4LAo+Pj4+ICAgICAgICAgICAgICAgIC5hZGQgICAgICAgICAg ICA9IHJpc2N2X3BtdV9hZGQsCj4+Pj4gICAgICAgICAgICAgICAgLmRlbCAgICAgICAgICAgID0g cmlzY3ZfcG11X2RlbCwKPj4+PiAgICAgICAgICAgICAgICAuc3RhcnQgICAgICAgICAgPSByaXNj dl9wbXVfc3RhcnQsCj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9yaXNjdl9wbXVfbGVn YWN5LmMgYi9kcml2ZXJzL3BlcmYvcmlzY3ZfcG11X2xlZ2FjeS5jCj4+Pj4gaW5kZXggMGQ4Yzlk ODg0OWVlLi4zNWM0YzkwOTdhMGYgMTAwNjQ0Cj4+Pj4gLS0tIGEvZHJpdmVycy9wZXJmL3Jpc2N2 X3BtdV9sZWdhY3kuYwo+Pj4+ICsrKyBiL2RyaXZlcnMvcGVyZi9yaXNjdl9wbXVfbGVnYWN5LmMK Pj4+PiBAQCAtNzQsNiArNzQsMjEgQEAgc3RhdGljIHZvaWQgcG11X2xlZ2FjeV9jdHJfc3RhcnQo c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgaXZhbCkKPj4+PiAgICAgICAgbG9jYWw2NF9z ZXQoJmh3Yy0+cHJldl9jb3VudCwgaW5pdGlhbF92YWwpOwo+Pj4+ICAgfQo+Pj4+Cj4+Pj4gK3N0 YXRpYyB1aW50OF90IHBtdV9sZWdhY3lfY3NyX2luZGV4KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVu dCkKPj4+PiArewo+Pj4+ICsgICAgIHJldHVybiBldmVudC0+aHcuaWR4Owo+Pj4+ICt9Cj4+Pj4g Kwo+Pj4+ICtzdGF0aWMgaW50IHBtdV9sZWdhY3lfZXZlbnRfZmxhZ3Moc3RydWN0IHBlcmZfZXZl bnQgKmV2ZW50KQo+Pj4+ICt7Cj4+Pj4gKyAgICAgLyogSW4gbGVnYWN5IG1vZGUsIHRoZSBmaXJz dCAzIENTUnMgYXJlIGF2YWlsYWJsZS4gKi8KPj4+PiArICAgICBpZiAoZXZlbnQtPmF0dHIuY29u ZmlnICE9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUyAmJgo+Pj4+ICsgICAgICAgICBldmVudC0+ YXR0ci5jb25maWcgIT0gUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlMpCj4+Pj4gKyAgICAgICAg ICAgICByZXR1cm4gMDsKPj4+PiArCj4+Pj4gKyAgICAgcmV0dXJuIFBFUkZfRVZFTlRfRkxBR19V U0VSX1JFQURfQ05UOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICAgLyoKPj4+PiAgICAqIFRoaXMgaXMg anVzdCBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiB0byBhbGxvdyBsZWdhY3kgaW1wbGVtZW50YXRp b25zCj4+Pj4gICAgKiBjb21wYXRpYmxlIHdpdGggbmV3IFJJU0MtViBQTVUgZHJpdmVyIGZyYW1l d29yay4KPj4+PiBAQCAtOTQsNiArMTA5LDggQEAgc3RhdGljIHZvaWQgcG11X2xlZ2FjeV9pbml0 KHN0cnVjdCByaXNjdl9wbXUgKnBtdSkKPj4+PiAgICAgICAgcG11LT5jdHJfZ2V0X3dpZHRoID0g TlVMTDsKPj4+PiAgICAgICAgcG11LT5jdHJfY2xlYXJfaWR4ID0gTlVMTDsKPj4+PiAgICAgICAg cG11LT5jdHJfcmVhZCA9IHBtdV9sZWdhY3lfcmVhZF9jdHI7Cj4+Pj4gKyAgICAgcG11LT5ldmVu dF9mbGFncyA9IHBtdV9sZWdhY3lfZXZlbnRfZmxhZ3M7Cj4+Pj4gKyAgICAgcG11LT5jc3JfaW5k ZXggPSBwbXVfbGVnYWN5X2Nzcl9pbmRleDsKPj4+Pgo+Pj4+ICAgICAgICBwZXJmX3BtdV9yZWdp c3RlcigmcG11LT5wbXUsICJjcHUiLCBQRVJGX1RZUEVfUkFXKTsKPj4+PiAgIH0KPj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYyBiL2RyaXZlcnMvcGVyZi9yaXNj dl9wbXVfc2JpLmMKPj4+PiBpbmRleCA3MGNiNTBmZDQxYzIuLmFmN2YzMTI4YjZiOCAxMDA2NDQK Pj4+PiAtLS0gYS9kcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jCj4+Pj4gKysrIGIvZHJpdmVy cy9wZXJmL3Jpc2N2X3BtdV9zYmkuYwo+Pj4+IEBAIC0yNCw2ICsyNCwxMCBAQAo+Pj4+ICAgI2lu Y2x1ZGUgPGFzbS9zYmkuaD4KPj4+PiAgICNpbmNsdWRlIDxhc20vaHdjYXAuaD4KPj4+Pgo+Pj4+ ICsjZGVmaW5lIFNZU0NUTF9OT19VU0VSX0FDQ0VTUyAgICAgICAgMAo+Pj4+ICsjZGVmaW5lIFNZ U0NUTF9VU0VSX0FDQ0VTUyAgIDEKPj4+PiArI2RlZmluZSBTWVNDVExfTEVHQUNZICAgICAgICAg ICAgICAgIDIKPj4+PiArCj4+Pj4gICBQTVVfRk9STUFUX0FUVFIoZXZlbnQsICJjb25maWc6MC00 NyIpOwo+Pj4+ICAgUE1VX0ZPUk1BVF9BVFRSKGZpcm13YXJlLCAiY29uZmlnOjYzIik7Cj4+Pj4K Pj4+PiBAQCAtNDMsNiArNDcsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91 cCAqcmlzY3ZfcG11X2F0dHJfZ3JvdXBzW10gPSB7Cj4+Pj4gICAgICAgIE5VTEwsCj4+Pj4gICB9 Owo+Pj4+Cj4+Pj4gKy8qIEFsbG93IGxlZ2FjeSBhY2Nlc3MgYnkgZGVmYXVsdCAqLwo+Pj4+ICtz dGF0aWMgaW50IHN5c2N0bF9wZXJmX3VzZXJfYWNjZXNzIF9fcmVhZF9tb3N0bHkgPSBTWVNDVExf TEVHQUNZOwo+Pj4+ICsKPj4+PiAgIC8qCj4+Pj4gICAgKiBSSVNDLVYgZG9lc24ndCBoYXZlIGhl dGVyb2dlbmVvdXMgaGFydHMgeWV0LiBUaGlzIG5lZWQgdG8gYmUgcGFydCBvZgo+Pj4+ICAgICog cGVyX2NwdSBpbiBjYXNlIG9mIGhhcnRzIHdpdGggZGlmZmVyZW50IHBtdSBjb3VudGVycwo+Pj4+ IEBAIC0zMDEsNiArMzA4LDExIEBAIGludCByaXNjdl9wbXVfZ2V0X2hwbV9pbmZvKHUzMiAqaHdf Y3RyX3dpZHRoLCB1MzIgKm51bV9od19jdHIpCj4+Pj4gICB9Cj4+Pj4gICBFWFBPUlRfU1lNQk9M X0dQTChyaXNjdl9wbXVfZ2V0X2hwbV9pbmZvKTsKPj4+Pgo+Pj4+ICtzdGF0aWMgdWludDhfdCBw bXVfc2JpX2Nzcl9pbmRleChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4+Pj4gK3sKPj4+PiAr ICAgICByZXR1cm4gcG11X2N0cl9saXN0W2V2ZW50LT5ody5pZHhdLmNzciAtIENTUl9DWUNMRTsK Pj4+PiArfQo+Pj4+ICsKPj4+PiAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBtdV9zYmlfZ2V0X2Zp bHRlcl9mbGFncyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4+Pj4gICB7Cj4+Pj4gICAgICAg IHVuc2lnbmVkIGxvbmcgY2ZsYWdzID0gMDsKPj4+PiBAQCAtMzI5LDE4ICszNDEsMzAgQEAgc3Rh dGljIGludCBwbXVfc2JpX2N0cl9nZXRfaWR4KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPj4+ PiAgICAgICAgc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSB0aGlzX2NwdV9wdHIocnZwbXUt Pmh3X2V2ZW50cyk7Cj4+Pj4gICAgICAgIHN0cnVjdCBzYmlyZXQgcmV0Owo+Pj4+ICAgICAgICBp bnQgaWR4Owo+Pj4+IC0gICAgIHVpbnQ2NF90IGNiYXNlID0gMDsKPj4+PiArICAgICB1aW50NjRf dCBjYmFzZSA9IDAsIGNtYXNrID0gcnZwbXUtPmNtYXNrOwo+Pj4+ICAgICAgICB1bnNpZ25lZCBs b25nIGNmbGFncyA9IDA7Cj4+Pj4KPj4+PiAgICAgICAgY2ZsYWdzID0gcG11X3NiaV9nZXRfZmls dGVyX2ZsYWdzKGV2ZW50KTsKPj4+PiArCj4+Pj4gKyAgICAgLyogSW4gbGVnYWN5IG1vZGUsIHdl IGhhdmUgdG8gZm9yY2UgdGhlIGZpeGVkIGNvdW50ZXJzIGZvciB0aG9zZSBldmVudHMgKi8KPj4+ PiArICAgICBpZiAoaHdjLT5mbGFncyAmIFBFUkZfRVZFTlRfRkxBR19MRUdBQ1kpIHsKPj4+PiAr ICAgICAgICAgICAgIGlmIChldmVudC0+YXR0ci5jb25maWcgPT0gUEVSRl9DT1VOVF9IV19DUFVf Q1lDTEVTKSB7Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGNmbGFncyB8PSBTQklfUE1VX0NG R19GTEFHX1NLSVBfTUFUQ0g7Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGNtYXNrID0gMTsK Pj4+PiArICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPmF0dHIuY29uZmlnID09IFBFUkZf Q09VTlRfSFdfSU5TVFJVQ1RJT05TKSB7Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGNmbGFn cyB8PSBTQklfUE1VX0NGR19GTEFHX1NLSVBfTUFUQ0g7Cj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgIGNtYXNrID0gMVVMIDw8IChDU1JfSU5TVFJFVCAtIENTUl9DWUNMRSk7Cj4+Pj4gKyAgICAg ICAgICAgICB9Cj4+Pj4gKyAgICAgfQo+Pj4+ICsKPj4+PiAgICAgICAgLyogcmV0cmlldmUgdGhl IGF2YWlsYWJsZSBjb3VudGVyIGluZGV4ICovCj4+Pj4gICAjaWYgZGVmaW5lZChDT05GSUdfMzJC SVQpCj4+Pj4gICAgICAgIHJldCA9IHNiaV9lY2FsbChTQklfRVhUX1BNVSwgU0JJX0VYVF9QTVVf Q09VTlRFUl9DRkdfTUFUQ0gsIGNiYXNlLAo+Pj4+IC0gICAgICAgICAgICAgICAgICAgICBydnBt dS0+Y21hc2ssIGNmbGFncywgaHdjLT5ldmVudF9iYXNlLCBod2MtPmNvbmZpZywKPj4+PiArICAg ICAgICAgICAgICAgICAgICAgY21hc2ssIGNmbGFncywgaHdjLT5ldmVudF9iYXNlLCBod2MtPmNv bmZpZywKPj4+PiAgICAgICAgICAgICAgICAgICAgICAgIGh3Yy0+Y29uZmlnID4+IDMyKTsKPj4+ PiAgICNlbHNlCj4+Pj4gICAgICAgIHJldCA9IHNiaV9lY2FsbChTQklfRVhUX1BNVSwgU0JJX0VY VF9QTVVfQ09VTlRFUl9DRkdfTUFUQ0gsIGNiYXNlLAo+Pj4+IC0gICAgICAgICAgICAgICAgICAg ICBydnBtdS0+Y21hc2ssIGNmbGFncywgaHdjLT5ldmVudF9iYXNlLCBod2MtPmNvbmZpZywgMCk7 Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGNtYXNrLCBjZmxhZ3MsIGh3Yy0+ZXZlbnRfYmFz ZSwgaHdjLT5jb25maWcsIDApOwo+Pj4+ICAgI2VuZGlmCj4+Pj4gICAgICAgIGlmIChyZXQuZXJy b3IpIHsKPj4+PiAgICAgICAgICAgICAgICBwcl9kZWJ1ZygiTm90IGFibGUgdG8gZmluZCBhIGNv dW50ZXIgZm9yIGV2ZW50ICVseCBjb25maWcgJWxseFxuIiwKPj4+PiBAQCAtNDkwLDYgKzUxNCwx MSBAQCBzdGF0aWMgdm9pZCBwbXVfc2JpX2N0cl9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZl bnQsIHU2NCBpdmFsKQo+Pj4+ICAgICAgICBpZiAocmV0LmVycm9yICYmIChyZXQuZXJyb3IgIT0g U0JJX0VSUl9BTFJFQURZX1NUQVJURUQpKQo+Pj4+ICAgICAgICAgICAgICAgIHByX2VycigiU3Rh cnRpbmcgY291bnRlciBpZHggJWQgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsCj4+Pj4gICAgICAg ICAgICAgICAgICAgICAgICBod2MtPmlkeCwgc2JpX2Vycl9tYXBfbGludXhfZXJybm8ocmV0LmVy cm9yKSk7Cj4+Pj4gKwo+Pj4+ICsgICAgIGlmICghKGV2ZW50LT5ody5mbGFncyAmIFBFUkZfRVZF TlRfRkxBR19MRUdBQ1kpICYmCj4+Pj4gKyAgICAgICAgIGV2ZW50LT5ody5mbGFncyAmIFBFUkZf RVZFTlRfRkxBR19VU0VSX1JFQURfQ05UKQo+Pj4+ICsgICAgICAgICAgICAgY3NyX3dyaXRlKENT Ul9TQ09VTlRFUkVOLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNzcl9yZWFkKENTUl9T Q09VTlRFUkVOKSB8ICgxIDw8IHBtdV9zYmlfY3NyX2luZGV4KGV2ZW50KSkpOwo+Pj4+ICAgfQo+ Pj4+Cj4+Pj4gICBzdGF0aWMgdm9pZCBwbXVfc2JpX2N0cl9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50 ICpldmVudCwgdW5zaWduZWQgbG9uZyBmbGFnKQo+Pj4+IEBAIC00OTcsNiArNTI2LDExIEBAIHN0 YXRpYyB2b2lkIHBtdV9zYmlfY3RyX3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1bnNp Z25lZCBsb25nIGZsYWcpCj4+Pj4gICAgICAgIHN0cnVjdCBzYmlyZXQgcmV0Owo+Pj4+ICAgICAg ICBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKPj4+Pgo+Pj4+ICsgICAg IGlmICghKGV2ZW50LT5ody5mbGFncyAmIFBFUkZfRVZFTlRfRkxBR19MRUdBQ1kpICYmCj4+Pj4g KyAgICAgICAgIGV2ZW50LT5ody5mbGFncyAmIFBFUkZfRVZFTlRfRkxBR19VU0VSX1JFQURfQ05U KQo+Pj4+ICsgICAgICAgICAgICAgY3NyX3dyaXRlKENTUl9TQ09VTlRFUkVOLAo+Pj4+ICsgICAg ICAgICAgICAgICAgICAgICAgIGNzcl9yZWFkKENTUl9TQ09VTlRFUkVOKSAmIH4oMSA8PCBwbXVf c2JpX2Nzcl9pbmRleChldmVudCkpKTsKPj4+PiArCj4+Pj4gICAgICAgIHJldCA9IHNiaV9lY2Fs bChTQklfRVhUX1BNVSwgU0JJX0VYVF9QTVVfQ09VTlRFUl9TVE9QLCBod2MtPmlkeCwgMSwgZmxh ZywgMCwgMCwgMCk7Cj4+Pj4gICAgICAgIGlmIChyZXQuZXJyb3IgJiYgKHJldC5lcnJvciAhPSBT QklfRVJSX0FMUkVBRFlfU1RPUFBFRCkgJiYKPj4+PiAgICAgICAgICAgICAgICBmbGFnICE9IFNC SV9QTVVfU1RPUF9GTEFHX1JFU0VUKQo+Pj4+IEBAIC03MDQsMTAgKzczOCwxMyBAQCBzdGF0aWMg aW50IHBtdV9zYmlfc3RhcnRpbmdfY3B1KHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9u b2RlICpub2RlKQo+Pj4+ICAgICAgICBzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1X2h3X2V2dCA9 IHRoaXNfY3B1X3B0cihwbXUtPmh3X2V2ZW50cyk7Cj4+Pj4KPj4+PiAgICAgICAgLyoKPj4+PiAt ICAgICAgKiBFbmFibGUgdGhlIGFjY2VzcyBmb3IgQ1lDTEUsIFRJTUUsIGFuZCBJTlNUUkVUIENT UnMgZnJvbSB1c2Vyc3BhY2UsCj4+Pj4gLSAgICAgICogYXMgaXMgbmVjZXNzYXJ5IHRvIG1haW50 YWluIHVBQkkgY29tcGF0aWJpbGl0eS4KPj4+PiArICAgICAgKiBXZSBrZWVwIGVuYWJsaW5nIHVz ZXJzcGFjZSBhY2Nlc3MgdG8gQ1lDTEUsIFRJTUUgYW5kIElOU1JFVCB2aWEgdGhlCj4+Pj4gKyAg ICAgICogbGVnYWN5IG9wdGlvbiBidXQgdGhhdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVy ZS4KPj4+IFdpbGwgaXQ/IFRoZSBkb2N1bWVudGF0aW9uIGh1bmsgZGlkbid0IG1lbnRpb24gdGhh dCB2YWx1ZSAyIHdhcyBkZXByZWNpYXRlZC4KPj4gWW91J3JlIHJpZ2h0LCBJJ2xsIGFkZCB0aGF0 IHRvIHRoZSBkb2N1bWVudGF0aW9uIHRvbywgdGhhbmtzLgo+Pgo+Pj4+ICAgICAgICAgKi8KPj4+ PiAtICAgICBjc3Jfd3JpdGUoQ1NSX1NDT1VOVEVSRU4sIDB4Nyk7Cj4+Pj4gKyAgICAgaWYgKHN5 c2N0bF9wZXJmX3VzZXJfYWNjZXNzID09IFNZU0NUTF9MRUdBQ1kpCj4+Pj4gKyAgICAgICAgICAg ICBjc3Jfd3JpdGUoQ1NSX1NDT1VOVEVSRU4sIDB4Nyk7Cj4+Pj4gKyAgICAgZWxzZQo+Pj4+ICsg ICAgICAgICAgICAgY3NyX3dyaXRlKENTUl9TQ09VTlRFUkVOLCAweDIpOwo+Pj4+Cj4+Pj4gICAg ICAgIC8qIFN0b3AgYWxsIHRoZSBjb3VudGVycyBzbyB0aGF0IHRoZXkgY2FuIGJlIGVuYWJsZWQg ZnJvbSBwZXJmICovCj4+Pj4gICAgICAgIHBtdV9zYmlfc3RvcF9hbGwocG11KTsKPj4+PiBAQCAt ODUxLDYgKzg4OCw2NiBAQCBzdGF0aWMgdm9pZCByaXNjdl9wbXVfZGVzdHJveShzdHJ1Y3Qgcmlz Y3ZfcG11ICpwbXUpCj4+Pj4gICAgICAgIGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVI UF9BUF9QRVJGX1JJU0NWX1NUQVJUSU5HLCAmcG11LT5ub2RlKTsKPj4+PiAgIH0KPj4+Pgo+Pj4+ ICtzdGF0aWMgaW50IHBtdV9zYmlfZXZlbnRfZmxhZ3Moc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50 KQo+Pj4+ICt7Cj4+Pj4gKyAgICAgaWYgKHN5c2N0bF9wZXJmX3VzZXJfYWNjZXNzID09IFNZU0NU TF9OT19VU0VSX0FDQ0VTUykKPj4+PiArICAgICAgICAgICAgIHJldHVybiAwOwo+Pj4+ICsKPj4+ PiArICAgICAvKiBJbiBsZWdhY3kgbW9kZSwgdGhlIGZpcnN0IDMgQ1NScyBhcmUgYXZhaWxhYmxl LiAqLwo+Pj4+ICsgICAgIGlmIChzeXNjdGxfcGVyZl91c2VyX2FjY2VzcyA9PSBTWVNDVExfTEVH QUNZKSB7Cj4+Pj4gKyAgICAgICAgICAgICBpbnQgZmxhZ3MgPSBQRVJGX0VWRU5UX0ZMQUdfTEVH QUNZOwo+Pj4+ICsKPj4+PiArICAgICAgICAgICAgIGlmIChldmVudC0+YXR0ci5jb25maWcgPT0g UEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTIHx8Cj4+Pj4gKyAgICAgICAgICAgICAgICAgZXZlbnQt PmF0dHIuY29uZmlnID09IFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TKQo+Pj4+ICsgICAgICAg ICAgICAgICAgICAgICBmbGFncyB8PSBQRVJGX0VWRU5UX0ZMQUdfVVNFUl9SRUFEX0NOVDsKPj4+ PiArCj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gZmxhZ3M7Cj4+Pj4gKyAgICAgfQo+Pj4+ICsK Pj4+PiArICAgICByZXR1cm4gUEVSRl9FVkVOVF9GTEFHX1VTRVJfUkVBRF9DTlQ7Cj4+Pj4gK30K Pj4+PiArCj4+Pj4gK3N0YXRpYyB2b2lkIHJpc2N2X3BtdV91cGRhdGVfY291bnRlcl9hY2Nlc3Mo dm9pZCAqaW5mbykKPj4+PiArewo+Pj4+ICsgICAgIGlmIChzeXNjdGxfcGVyZl91c2VyX2FjY2Vz cyA9PSBTWVNDVExfTEVHQUNZKQo+Pj4+ICsgICAgICAgICAgICAgY3NyX3dyaXRlKENTUl9TQ09V TlRFUkVOLCAweDcpOwo+Pj4+ICsgICAgIGVsc2UKPj4+PiArICAgICAgICAgICAgIGNzcl93cml0 ZShDU1JfU0NPVU5URVJFTiwgMHgyKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGludCBy aXNjdl9wbXVfcHJvY191c2VyX2FjY2Vzc19oYW5kbGVyKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxl LAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdy aXRlLCB2b2lkICpidWZmZXIsCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKPj4+PiArewo+Pj4+ICsgICAg IGludCBwcmV2ID0gc3lzY3RsX3BlcmZfdXNlcl9hY2Nlc3M7Cj4+Pj4gKyAgICAgaW50IHJldCA9 IHByb2NfZG9pbnR2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsK Pj4+PiArCj4+Pj4gKyAgICAgLyoKPj4+PiArICAgICAgKiBUZXN0IGFnYWluc3QgdGhlIHByZXZp b3VzIHZhbHVlIHNpbmNlIHdlIGNsZWFyIFNDT1VOVEVSRU4gd2hlbgo+Pj4+ICsgICAgICAqIHN5 c2N0bF9wZXJmX3VzZXJfYWNjZXNzIGlzIHNldCB0byBTWVNDVExfVVNFUl9BQ0NFU1MsIGJ1dCB3 ZSBzaG91bGQKPj4+PiArICAgICAgKiBub3QgZG8gdGhhdCBpZiB0aGF0IHdhcyBhbHJlYWR5IHRo ZSBjYXNlLgo+Pj4+ICsgICAgICAqLwo+Pj4+ICsgICAgIGlmIChyZXQgfHwgIXdyaXRlIHx8IHBy ZXYgPT0gc3lzY3RsX3BlcmZfdXNlcl9hY2Nlc3MpCj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4g cmV0Owo+Pj4+ICsKPj4+PiArICAgICBvbl9lYWNoX2NwdShyaXNjdl9wbXVfdXBkYXRlX2NvdW50 ZXJfYWNjZXNzLCAodm9pZCAqKSZwcmV2LCAxKTsKPj4+PiArCj4+Pj4gKyAgICAgcmV0dXJuIDA7 Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHNiaV9wbXVfc3lz Y3RsX3RhYmxlW10gPSB7Cj4+Pj4gKyAgICAgewo+Pj4+ICsgICAgICAgICAgICAgLnByb2NuYW1l ICAgICAgID0gInBlcmZfdXNlcl9hY2Nlc3MiLAo+Pj4+ICsgICAgICAgICAgICAgLmRhdGEgICAg ICAgICAgID0gJnN5c2N0bF9wZXJmX3VzZXJfYWNjZXNzLAo+Pj4+ICsgICAgICAgICAgICAgLm1h eGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGludCksCj4+Pj4gKyAgICAgICAgICAgICAu bW9kZSAgICAgICAgICAgPSAwNjQ0LAo+Pj4+ICsgICAgICAgICAgICAgLnByb2NfaGFuZGxlciAg ID0gcmlzY3ZfcG11X3Byb2NfdXNlcl9hY2Nlc3NfaGFuZGxlciwKPj4+PiArICAgICAgICAgICAg IC5leHRyYTEgICAgICAgICA9IFNZU0NUTF9aRVJPLAo+Pj4+ICsgICAgICAgICAgICAgLmV4dHJh MiAgICAgICAgID0gU1lTQ1RMX1RXTywKPj4+PiArICAgICB9LAo+Pj4+ICsgICAgIHsgfQo+Pj4+ ICt9Owo+Pj4+ICsKPj4+PiAgIHN0YXRpYyBpbnQgcG11X3NiaV9kZXZpY2VfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4+PiAgIHsKPj4+PiAgICAgICAgc3RydWN0IHJpc2N2 X3BtdSAqcG11ID0gTlVMTDsKPj4+PiBAQCAtODg4LDYgKzk4NSw4IEBAIHN0YXRpYyBpbnQgcG11 X3NiaV9kZXZpY2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4+PiAgICAg ICAgcG11LT5jdHJfZ2V0X3dpZHRoID0gcG11X3NiaV9jdHJfZ2V0X3dpZHRoOwo+Pj4+ICAgICAg ICBwbXUtPmN0cl9jbGVhcl9pZHggPSBwbXVfc2JpX2N0cl9jbGVhcl9pZHg7Cj4+Pj4gICAgICAg IHBtdS0+Y3RyX3JlYWQgPSBwbXVfc2JpX2N0cl9yZWFkOwo+Pj4+ICsgICAgIHBtdS0+ZXZlbnRf ZmxhZ3MgPSBwbXVfc2JpX2V2ZW50X2ZsYWdzOwo+Pj4+ICsgICAgIHBtdS0+Y3NyX2luZGV4ID0g cG11X3NiaV9jc3JfaW5kZXg7Cj4+Pj4KPj4+PiAgICAgICAgcmV0ID0gY3B1aHBfc3RhdGVfYWRk X2luc3RhbmNlKENQVUhQX0FQX1BFUkZfUklTQ1ZfU1RBUlRJTkcsICZwbXUtPm5vZGUpOwo+Pj4+ ICAgICAgICBpZiAocmV0KQo+Pj4+IEBAIC05MDEsNiArMTAwMCw4IEBAIHN0YXRpYyBpbnQgcG11 X3NiaV9kZXZpY2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4+PiAgICAg ICAgaWYgKHJldCkKPj4+PiAgICAgICAgICAgICAgICBnb3RvIG91dF91bnJlZ2lzdGVyOwo+Pj4+ Cj4+Pj4gKyAgICAgcmVnaXN0ZXJfc3lzY3RsKCJrZXJuZWwiLCBzYmlfcG11X3N5c2N0bF90YWJs ZSk7Cj4+Pj4gKwo+Pj4+ICAgICAgICByZXR1cm4gMDsKPj4+Pgo+Pj4+ICAgb3V0X3VucmVnaXN0 ZXI6Cj4+Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZi9yaXNjdl9wbXUuaCBiL2lu Y2x1ZGUvbGludXgvcGVyZi9yaXNjdl9wbXUuaAo+Pj4+IGluZGV4IDlmNzBkOTQ5NDJlMC4uYmEx OTYzNGQ4MTVjIDEwMDY0NAo+Pj4+IC0tLSBhL2luY2x1ZGUvbGludXgvcGVyZi9yaXNjdl9wbXUu aAo+Pj4+ICsrKyBiL2luY2x1ZGUvbGludXgvcGVyZi9yaXNjdl9wbXUuaAo+Pj4+IEBAIC0xMiw2 ICsxMiw3IEBACj4+Pj4gICAjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgo+Pj4+ICAgI2lu Y2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgo+Pj4+ICAgI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5o Pgo+Pj4+ICsjaW5jbHVkZSA8YXNtL3BlcmZfZXZlbnQuaD4KPj4+Pgo+Pj4+ICAgI2lmZGVmIENP TkZJR19SSVNDVl9QTVUKPj4+Pgo+Pj4+IEBAIC01NSw2ICs1Niw4IEBAIHN0cnVjdCByaXNjdl9w bXUgewo+Pj4+ICAgICAgICB2b2lkICAgICAgICAgICAgKCpjdHJfc3RhcnQpKHN0cnVjdCBwZXJm X2V2ZW50ICpldmVudCwgdTY0IGluaXRfdmFsKTsKPj4+PiAgICAgICAgdm9pZCAgICAgICAgICAg ICgqY3RyX3N0b3ApKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdW5zaWduZWQgbG9uZyBmbGFn KTsKPj4+PiAgICAgICAgaW50ICAgICAgICAgICAgICgqZXZlbnRfbWFwKShzdHJ1Y3QgcGVyZl9l dmVudCAqZXZlbnQsIHU2NCAqY29uZmlnKTsKPj4+PiArICAgICBpbnQgICAgICAgICAgICAgKCpl dmVudF9mbGFncykoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKPj4+PiArICAgICB1aW50OF90 ICAgICAgICAgKCpjc3JfaW5kZXgpKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7Cj4+Pj4KPj4+ PiAgICAgICAgc3RydWN0IGNwdV9od19ldmVudHMgICAgX19wZXJjcHUgKmh3X2V2ZW50czsKPj4+ PiAgICAgICAgc3RydWN0IGhsaXN0X25vZGUgICAgICAgbm9kZTsKPj4+PiBkaWZmIC0tZ2l0IGEv dG9vbHMvbGliL3BlcmYvbW1hcC5jIGIvdG9vbHMvbGliL3BlcmYvbW1hcC5jCj4+Pj4gaW5kZXgg MGQxNjM0Y2VkZjQ0Li4xOGYyYWJiMTU4NGEgMTAwNjQ0Cj4+Pj4gLS0tIGEvdG9vbHMvbGliL3Bl cmYvbW1hcC5jCj4+Pj4gKysrIGIvdG9vbHMvbGliL3BlcmYvbW1hcC5jCj4+Pj4gQEAgLTM5Miw2 ICszOTIsNzEgQEAgc3RhdGljIHU2NCByZWFkX3BlcmZfY291bnRlcih1bnNpZ25lZCBpbnQgY291 bnRlcikKPj4+Pgo+Pj4+ICAgc3RhdGljIHU2NCByZWFkX3RpbWVzdGFtcCh2b2lkKSB7IHJldHVy biByZWFkX3N5c3JlZyhjbnR2Y3RfZWwwKTsgfQo+Pj4+Cj4+Pj4gKyNlbGlmIGRlZmluZWQoX19y aXNjdikgJiYgX19yaXNjdl94bGVuID09IDY0Cj4+PiBJdCdzIGVub3VnaCB0byBqdXN0IGNoZWNr IF9fcmlzY3ZfeGxlbi4KPj4gUmlnaHQsIHRoYW5rcwo+Pgo+Pj4+ICsKPj4+PiArI2RlZmluZSBD U1JfQ1lDTEUgICAgMHhjMDAKPj4+PiArI2RlZmluZSBDU1JfVElNRSAgICAgMHhjMDEKPj4+PiAr I2RlZmluZSBDU1JfQ1lDTEVIICAgMHhjODAKPj4+PiArCj4+Pj4gKyNkZWZpbmUgY3NyX3JlYWQo Y3NyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4+ PiArKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKPj4+PiArICAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fdjsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPj4+PiArICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGls ZV9fICgiY3NyciAlMCwgIiAjY3NyICAgICAgICAgIFwKPj4+PiArICAgICAgICAgICAgICA6ICI9 ciIgKF9fdikgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4+PiArICAgICAg ICAgICAgICA6ICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK Pj4+PiArICAgICAgICAgICAgICBfX3Y7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKPj4+PiArfSkKPj4+PiArCj4+Pj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNz cl9yZWFkX251bShpbnQgY3NyX251bSkKPj4+PiArewo+Pj4+ICsjZGVmaW5lIHN3aXRjaGNhc2Vf Y3NyX3JlYWQoX19jc3JfbnVtLCBfX3ZhbCkgICAgICAgICAgIHtcCj4+Pj4gKyAgICAgY2FzZSBf X2Nzcl9udW06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+Pj4+ICsgICAgICAg ICAgICAgX192YWwgPSBjc3JfcmVhZChfX2Nzcl9udW0pOyAgICAgICAgICAgIFwKPj4+PiArICAg ICAgICAgICAgIGJyZWFrOyB9Cj4+Pj4gKyNkZWZpbmUgc3dpdGNoY2FzZV9jc3JfcmVhZF8yKF9f Y3NyX251bSwgX192YWwpICAgICAgICAge1wKPj4+PiArICAgICBzd2l0Y2hjYXNlX2Nzcl9yZWFk KF9fY3NyX251bSArIDAsIF9fdmFsKSAgICAgICAgXAo+Pj4+ICsgICAgIHN3aXRjaGNhc2VfY3Ny X3JlYWQoX19jc3JfbnVtICsgMSwgX192YWwpfQo+Pj4+ICsjZGVmaW5lIHN3aXRjaGNhc2VfY3Ny X3JlYWRfNChfX2Nzcl9udW0sIF9fdmFsKSAgICAgICAgIHtcCj4+Pj4gKyAgICAgc3dpdGNoY2Fz ZV9jc3JfcmVhZF8yKF9fY3NyX251bSArIDAsIF9fdmFsKSAgICAgIFwKPj4+PiArICAgICBzd2l0 Y2hjYXNlX2Nzcl9yZWFkXzIoX19jc3JfbnVtICsgMiwgX192YWwpfQo+Pj4+ICsjZGVmaW5lIHN3 aXRjaGNhc2VfY3NyX3JlYWRfOChfX2Nzcl9udW0sIF9fdmFsKSAgICAgICAgIHtcCj4+Pj4gKyAg ICAgc3dpdGNoY2FzZV9jc3JfcmVhZF80KF9fY3NyX251bSArIDAsIF9fdmFsKSAgICAgIFwKPj4+ PiArICAgICBzd2l0Y2hjYXNlX2Nzcl9yZWFkXzQoX19jc3JfbnVtICsgNCwgX192YWwpfQo+Pj4+ ICsjZGVmaW5lIHN3aXRjaGNhc2VfY3NyX3JlYWRfMTYoX19jc3JfbnVtLCBfX3ZhbCkgICAgICAg IHtcCj4+Pj4gKyAgICAgc3dpdGNoY2FzZV9jc3JfcmVhZF84KF9fY3NyX251bSArIDAsIF9fdmFs KSAgICAgIFwKPj4+PiArICAgICBzd2l0Y2hjYXNlX2Nzcl9yZWFkXzgoX19jc3JfbnVtICsgOCwg X192YWwpfQo+Pj4+ICsjZGVmaW5lIHN3aXRjaGNhc2VfY3NyX3JlYWRfMzIoX19jc3JfbnVtLCBf X3ZhbCkgICAgICAgIHtcCj4+Pj4gKyAgICAgc3dpdGNoY2FzZV9jc3JfcmVhZF8xNihfX2Nzcl9u dW0gKyAwLCBfX3ZhbCkgICAgIFwKPj4+PiArICAgICBzd2l0Y2hjYXNlX2Nzcl9yZWFkXzE2KF9f Y3NyX251bSArIDE2LCBfX3ZhbCl9Cj4+Pj4gKwo+Pj4+ICsgICAgIHVuc2lnbmVkIGxvbmcgcmV0 ID0gMDsKPj4+PiArCj4+Pj4gKyAgICAgc3dpdGNoIChjc3JfbnVtKSB7Cj4+Pj4gKyAgICAgc3dp dGNoY2FzZV9jc3JfcmVhZF8zMihDU1JfQ1lDTEUsIHJldCkKPj4+PiArICAgICBzd2l0Y2hjYXNl X2Nzcl9yZWFkXzMyKENTUl9DWUNMRUgsIHJldCkKPj4+PiArICAgICBkZWZhdWx0IDoKPj4+ICAg ICAgICAgICAgICAgICBeIGV4dHJhIHNwYWNlCj4+Pgo+PiBUaGFua3MKPj4KPj4+PiArICAgICAg ICAgICAgIGJyZWFrOwo+Pj4+ICsgICAgIH0KPj4+PiArCj4+Pj4gKyAgICAgcmV0dXJuIHJldDsK Pj4+PiArI3VuZGVmIHN3aXRjaGNhc2VfY3NyX3JlYWRfMzIKPj4+PiArI3VuZGVmIHN3aXRjaGNh c2VfY3NyX3JlYWRfMTYKPj4+PiArI3VuZGVmIHN3aXRjaGNhc2VfY3NyX3JlYWRfOAo+Pj4+ICsj dW5kZWYgc3dpdGNoY2FzZV9jc3JfcmVhZF80Cj4+Pj4gKyN1bmRlZiBzd2l0Y2hjYXNlX2Nzcl9y ZWFkXzIKPj4+PiArI3VuZGVmIHN3aXRjaGNhc2VfY3NyX3JlYWQKPj4+PiArfQo+Pj4+ICsKPj4+ PiArc3RhdGljIHU2NCByZWFkX3BlcmZfY291bnRlcih1bnNpZ25lZCBpbnQgY291bnRlcikKPj4+ PiArewo+Pj4+ICsgICAgIHJldHVybiBjc3JfcmVhZF9udW0oQ1NSX0NZQ0xFICsgY291bnRlcik7 Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyB1NjQgcmVhZF90aW1lc3RhbXAodm9pZCkKPj4+ PiArewo+Pj4+ICsgICAgIHJldHVybiBjc3JfcmVhZF9udW0oQ1NSX1RJTUUpOwo+Pj4+ICt9Cj4+ Pj4gKwo+Pj4+ICAgI2Vsc2UKPj4+PiAgIHN0YXRpYyB1NjQgcmVhZF9wZXJmX2NvdW50ZXIodW5z aWduZWQgaW50IGNvdW50ZXIgX19tYXliZV91bnVzZWQpIHsgcmV0dXJuIDA7IH0KPj4+PiAgIHN0 YXRpYyB1NjQgcmVhZF90aW1lc3RhbXAodm9pZCkgeyByZXR1cm4gMDsgfQo+Pj4+IC0tCj4+Pj4g Mi4zNy4yCj4+Pj4KPj4+IEEgbG90IGdvaW5nIG9uIHRoaXMgcGF0Y2guIEl0J2QgYmUgZWFzaWVy IHRvIHJldmlldyBpZiBpdCB3YXMgYnJva2VuIHVwIGEKPj4+IGJpdC4gRS5nLiBpbXBvcnQgb2Yg YXJtIGNvZGUsIHRoZSB0b29scy9saWIvcGVyZi9tbWFwLmMgaHVuaywgYW5kIHdoYXRldmVyCj4+ PiBlbHNlIG1ha2VzIHNlbnNlLgo+PiBPaywgd2lsbCBkbyB0aGF0IGluIHYyIQo+Pgo+Pj4gVGhh bmtzLAo+Pj4gZHJldwo+PiBUaGFua3MsCj4+Cj4+IEFsZXgKPj4KPj4gX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4gbGludXgtcmlzY3YgbWFpbGluZyBs aXN0Cj4+IGxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKPj4gaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo+IF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gbGludXgtcmlzY3YgbWFpbGluZyBs aXN0Cj4gbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwo+IGh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdAps aW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK