From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.3 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,UNWANTED_LANGUAGE_BODY, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AF1ACC433ED for ; Fri, 9 Apr 2021 05:37:00 +0000 (UTC) Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4F04C61165 for ; Fri, 9 Apr 2021 05:37:00 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4F04C61165 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=virtualization-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 01FE6849F1; Fri, 9 Apr 2021 05:37:00 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 426DJyaQBJbx; Fri, 9 Apr 2021 05:36:57 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp1.osuosl.org (Postfix) with ESMTP id 0F76C83D94; Fri, 9 Apr 2021 05:36:57 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id D476DC000C; Fri, 9 Apr 2021 05:36:56 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 92ED5C000A for ; Fri, 9 Apr 2021 05:36:55 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 625F941975 for ; Fri, 9 Apr 2021 05:36:55 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp4.osuosl.org (amavisd-new); dkim=pass (1024-bit key) header.d=redhat.com Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id j-L5JSKMUWKE for ; Fri, 9 Apr 2021 05:36:52 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by smtp4.osuosl.org (Postfix) with ESMTPS id 2DAC94195D for ; Fri, 9 Apr 2021 05:36:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1617946610; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=S1T8e4eiQ0afmoZnCPw7nH/vwV1wUTly4y3pWLklyQs=; b=K4RUtN4cP4PRS3+/2hdyCopqZ78rDWdb8i8LatNXblYmPbhsFfS1ZnKsYnTIfRI0ysK3t+ ckg/GuzIT9Dkil90raKh0BTipTZl9oRieSiSto+nY9HdaQejnMroOXaSu5sJWVwjbpZgLZ zaW0aeL4msBvy0q5Zc7wM9yE6Piy750= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-349-8VJNKZnENDG_M7jhIHx-Iw-1; Fri, 09 Apr 2021 01:36:46 -0400 X-MC-Unique: 8VJNKZnENDG_M7jhIHx-Iw-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 139AB8030A1; Fri, 9 Apr 2021 05:36:44 +0000 (UTC) Received: from wangxiaodeMacBook-Air.local (ovpn-13-155.pek2.redhat.com [10.72.13.155]) by smtp.corp.redhat.com (Postfix) with ESMTP id 588EF5C1D0; Fri, 9 Apr 2021 05:36:29 +0000 (UTC) Subject: Re: [PATCH v6 09/10] vduse: Introduce VDUSE - vDPA Device in Userspace To: Yongji Xie References: <20210331080519.172-1-xieyongji@bytedance.com> <20210331080519.172-10-xieyongji@bytedance.com> From: Jason Wang Message-ID: <091dde74-449b-385c-0ec9-11e4847c6c4c@redhat.com> Date: Fri, 9 Apr 2021 13:36:27 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.9.0 MIME-Version: 1.0 In-Reply-To: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Cc: Jens Axboe , Jonathan Corbet , kvm@vger.kernel.org, "Michael S. Tsirkin" , netdev@vger.kernel.org, Randy Dunlap , Matthew Wilcox , virtualization@lists.linux-foundation.org, Christoph Hellwig , Christian Brauner , bcrl@kvack.org, viro@zeniv.linux.org.uk, Stefan Hajnoczi , linux-fsdevel@vger.kernel.org, Dan Carpenter , =?UTF-8?Q?Mika_Penttil=c3=a4?= X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" CuWcqCAyMDIxLzQvOCDkuIvljYg1OjM2LCBZb25namkgWGllIOWGmemBkzoKPiBPbiBUaHUsIEFw ciA4LCAyMDIxIGF0IDI6NTcgUE0gSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4gd3Jv dGU6Cj4+Cj4+IOWcqCAyMDIxLzMvMzEg5LiL5Y2INDowNSwgWGllIFlvbmdqaSDlhpnpgZM6Cj4+ PiBUaGlzIFZEVVNFIGRyaXZlciBlbmFibGVzIGltcGxlbWVudGluZyB2RFBBIGRldmljZXMgaW4g dXNlcnNwYWNlLgo+Pj4gQm90aCBjb250cm9sIHBhdGggYW5kIGRhdGEgcGF0aCBvZiB2RFBBIGRl dmljZXMgd2lsbCBiZSBhYmxlIHRvCj4+PiBiZSBoYW5kbGVkIGluIHVzZXJzcGFjZS4KPj4+Cj4+ PiBJbiB0aGUgY29udHJvbCBwYXRoLCB0aGUgVkRVU0UgZHJpdmVyIHdpbGwgbWFrZSB1c2Ugb2Yg bWVzc2FnZQo+Pj4gbWVjaG5pc20gdG8gZm9yd2FyZCB0aGUgY29uZmlnIG9wZXJhdGlvbiBmcm9t IHZkcGEgYnVzIGRyaXZlcgo+Pj4gdG8gdXNlcnNwYWNlLiBVc2Vyc3BhY2UgY2FuIHVzZSByZWFk KCkvd3JpdGUoKSB0byByZWNlaXZlL3JlcGx5Cj4+PiB0aG9zZSBjb250cm9sIG1lc3NhZ2VzLgo+ Pj4KPj4+IEluIHRoZSBkYXRhIHBhdGgsIFZEVVNFX0lPVExCX0dFVF9GRCBpb2N0bCB3aWxsIGJl IHVzZWQgdG8gZ2V0Cj4+PiB0aGUgZmlsZSBkZXNjcmlwdG9ycyByZWZlcnJpbmcgdG8gdkRQQSBk ZXZpY2UncyBpb3ZhIHJlZ2lvbnMuIFRoZW4KPj4+IHVzZXJzcGFjZSBjYW4gdXNlIG1tYXAoKSB0 byBhY2Nlc3MgdGhvc2UgaW92YSByZWdpb25zLiBCZXNpZGVzLAo+Pj4gdXNlcnNwYWNlIGNhbiB1 c2UgaW9jdGwoKSB0byBpbmplY3QgaW50ZXJydXB0IGFuZCB1c2UgdGhlIGV2ZW50ZmQKPj4+IG1l Y2hhbmlzbSB0byByZWNlaXZlIHZpcnRxdWV1ZSBraWNrcy4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5 OiBYaWUgWW9uZ2ppIDx4aWV5b25namlAYnl0ZWRhbmNlLmNvbT4KPj4+IC0tLQo+Pj4gICAgRG9j dW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3QgfCAgICAxICsK Pj4+ICAgIGRyaXZlcnMvdmRwYS9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAxMCArCj4+PiAgICBkcml2ZXJzL3ZkcGEvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgIDEgKwo+Pj4gICAgZHJpdmVycy92ZHBhL3ZkcGFfdXNlci9NYWtlZmls ZSAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKPj4+ICAgIGRyaXZlcnMvdmRwYS92ZHBhX3Vz ZXIvdmR1c2VfZGV2LmMgICAgICAgICAgICAgICAgIHwgMTM2MiArKysrKysrKysrKysrKysrKysr Kwo+Pj4gICAgaW5jbHVkZS91YXBpL2xpbnV4L3ZkdXNlLmggICAgICAgICAgICAgICAgICAgICAg ICAgfCAgMTc1ICsrKwo+Pj4gICAgNiBmaWxlcyBjaGFuZ2VkLCAxNTU0IGluc2VydGlvbnMoKykK Pj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3ZkcGEvdmRwYV91c2VyL01ha2VmaWxl Cj4+PiAgICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92ZHBhL3ZkcGFfdXNlci92ZHVzZV9k ZXYuYwo+Pj4gICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWFwaS9saW51eC92ZHVzZS5o Cj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9p b2N0bC1udW1iZXIucnN0IGIvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3Rs LW51bWJlci5yc3QKPj4+IGluZGV4IGE0Yzc1YTI4YzgzOS4uNzE3MjJlNmY4ZjIzIDEwMDY0NAo+ Pj4gLS0tIGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5y c3QKPj4+ICsrKyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1i ZXIucnN0Cj4+PiBAQCAtMzAwLDYgKzMwMCw3IEBAIENvZGUgIFNlcSMgICAgSW5jbHVkZSBGaWxl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnRzCj4+PiAg ICAneicgICAxMC00RiAgZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmggICAgICAgICAg ICAgICAgICAgICAgICBjb25mbGljdCEKPj4+ICAgICd8JyAgIDAwLTdGICBsaW51eC9tZWRpYS5o Cj4+PiAgICAweDgwICAwMC0xRiAgbGludXgvZmIuaAo+Pj4gKzB4ODEgIDAwLTFGICBsaW51eC92 ZHVzZS5oCj4+PiAgICAweDg5ICAwMC0wNiAgYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2lvcy5o Cj4+PiAgICAweDg5ICAwQi1ERiAgbGludXgvc29ja2lvcy5oCj4+PiAgICAweDg5ICBFMC1FRiAg bGludXgvc29ja2lvcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT SU9DUFJPVE9QUklWQVRFIHJhbmdlCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZHBhL0tjb25m aWcgYi9kcml2ZXJzL3ZkcGEvS2NvbmZpZwo+Pj4gaW5kZXggYTI0NTgwOWM5OWQwLi43N2ExZGE1 MjJjMjEgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL3ZkcGEvS2NvbmZpZwo+Pj4gKysrIGIvZHJp dmVycy92ZHBhL0tjb25maWcKPj4+IEBAIC0yNSw2ICsyNSwxNiBAQCBjb25maWcgVkRQQV9TSU1f TkVUCj4+PiAgICAgICAgaGVscAo+Pj4gICAgICAgICAgdkRQQSBuZXR3b3JraW5nIGRldmljZSBz aW11bGF0b3Igd2hpY2ggbG9vcHMgVFggdHJhZmZpYyBiYWNrIHRvIFJYLgo+Pj4KPj4+ICtjb25m aWcgVkRQQV9VU0VSCj4+PiArICAgICB0cmlzdGF0ZSAiVkRVU0UgKHZEUEEgRGV2aWNlIGluIFVz ZXJzcGFjZSkgc3VwcG9ydCIKPj4+ICsgICAgIGRlcGVuZHMgb24gRVZFTlRGRCAmJiBNTVUgJiYg SEFTX0RNQQo+Pj4gKyAgICAgc2VsZWN0IERNQV9PUFMKPj4+ICsgICAgIHNlbGVjdCBWSE9TVF9J T1RMQgo+Pj4gKyAgICAgc2VsZWN0IElPTU1VX0lPVkEKPj4+ICsgICAgIGhlbHAKPj4+ICsgICAg ICAgV2l0aCBWRFVTRSBpdCBpcyBwb3NzaWJsZSB0byBlbXVsYXRlIGEgdkRQQSBEZXZpY2UKPj4+ ICsgICAgICAgaW4gYSB1c2Vyc3BhY2UgcHJvZ3JhbS4KPj4+ICsKPj4+ICAgIGNvbmZpZyBJRkNW Rgo+Pj4gICAgICAgIHRyaXN0YXRlICJJbnRlbCBJRkMgVkYgdkRQQSBkcml2ZXIiCj4+PiAgICAg ICAgZGVwZW5kcyBvbiBQQ0lfTVNJCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZHBhL01ha2Vm aWxlIGIvZHJpdmVycy92ZHBhL01ha2VmaWxlCj4+PiBpbmRleCA2N2ZlN2YzZDY5NDMuLmYwMmVi ZWQzM2YxOSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvdmRwYS9NYWtlZmlsZQo+Pj4gKysrIGIv ZHJpdmVycy92ZHBhL01ha2VmaWxlCj4+PiBAQCAtMSw2ICsxLDcgQEAKPj4+ICAgICMgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPj4+ICAgIG9iai0kKENPTkZJR19WRFBBKSArPSB2 ZHBhLm8KPj4+ICAgIG9iai0kKENPTkZJR19WRFBBX1NJTSkgKz0gdmRwYV9zaW0vCj4+PiArb2Jq LSQoQ09ORklHX1ZEUEFfVVNFUikgKz0gdmRwYV91c2VyLwo+Pj4gICAgb2JqLSQoQ09ORklHX0lG Q1ZGKSAgICArPSBpZmN2Zi8KPj4+ICAgIG9iai0kKENPTkZJR19NTFg1X1ZEUEEpICs9IG1seDUv Cj4+PiAgICBvYmotJChDT05GSUdfVlBfVkRQQSkgICAgKz0gdmlydGlvX3BjaS8KPj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3ZkcGEvdmRwYV91c2VyL01ha2VmaWxlIGIvZHJpdmVycy92ZHBhL3Zk cGFfdXNlci9NYWtlZmlsZQo+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAw MDAwMDAwMC4uMjYwZTBiMjZhZjk5Cj4+PiAtLS0gL2Rldi9udWxsCj4+PiArKysgYi9kcml2ZXJz L3ZkcGEvdmRwYV91c2VyL01ha2VmaWxlCj4+PiBAQCAtMCwwICsxLDUgQEAKPj4+ICsjIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+PiArCj4+PiArdmR1c2UteSA6PSB2ZHVzZV9k ZXYubyBpb3ZhX2RvbWFpbi5vCj4+PiArCj4+PiArb2JqLSQoQ09ORklHX1ZEUEFfVVNFUikgKz0g dmR1c2Uubwo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmRwYS92ZHBhX3VzZXIvdmR1c2VfZGV2 LmMgYi9kcml2ZXJzL3ZkcGEvdmRwYV91c2VyL3ZkdXNlX2Rldi5jCj4+PiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi41MWNhNzM0NjRkMGQKPj4+IC0tLSAvZGV2 L251bGwKPj4+ICsrKyBiL2RyaXZlcnMvdmRwYS92ZHBhX3VzZXIvdmR1c2VfZGV2LmMKPj4+IEBA IC0wLDAgKzEsMTM2MiBAQAo+Pj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w LW9ubHkKPj4+ICsvKgo+Pj4gKyAqIFZEVVNFOiB2RFBBIERldmljZSBpbiBVc2Vyc3BhY2UKPj4+ ICsgKgo+Pj4gKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEJ5dGVkYW5jZSBJbmMuIGFuZC9v ciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4+ICsgKgo+Pj4gKyAqIEF1 dGhvcjogWGllIFlvbmdqaSA8eGlleW9uZ2ppQGJ5dGVkYW5jZS5jb20+Cj4+PiArICoKPj4+ICsg Ki8KPj4+ICsKPj4+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgo+Pj4gKyNpbmNs dWRlIDxsaW51eC9jZGV2Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+Pj4gKyNp bmNsdWRlIDxsaW51eC9ldmVudGZkLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4+ ICsjaW5jbHVkZSA8bGludXgvd2FpdC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwLW9w cy5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2Zp bGUuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvdWlvLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3Zk cGEuaD4KPj4+ICsjaW5jbHVkZSA8dWFwaS9saW51eC92ZHVzZS5oPgo+Pj4gKyNpbmNsdWRlIDx1 YXBpL2xpbnV4L3ZkcGEuaD4KPj4+ICsjaW5jbHVkZSA8dWFwaS9saW51eC92aXJ0aW9fY29uZmln Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgo+Pj4gKwo+Pj4gKyNp bmNsdWRlICJpb3ZhX2RvbWFpbi5oIgo+Pj4gKwo+Pj4gKyNkZWZpbmUgRFJWX1ZFUlNJT04gICIx LjAiCj4+PiArI2RlZmluZSBEUlZfQVVUSE9SICAgIllvbmdqaSBYaWUgPHhpZXlvbmdqaUBieXRl ZGFuY2UuY29tPiIKPj4+ICsjZGVmaW5lIERSVl9ERVNDICAgICAidkRQQSBEZXZpY2UgaW4gVXNl cnNwYWNlIgo+Pj4gKyNkZWZpbmUgRFJWX0xJQ0VOU0UgICJHUEwgdjIiCj4+PiArCj4+PiArI2Rl ZmluZSBWRFVTRV9ERVZfTUFYICgxVSA8PCBNSU5PUkJJVFMpCj4+PiArCj4+PiArc3RydWN0IHZk dXNlX3ZpcnRxdWV1ZSB7Cj4+PiArICAgICB1MTYgaW5kZXg7Cj4+PiArICAgICBib29sIHJlYWR5 Owo+Pj4gKyAgICAgc3BpbmxvY2tfdCBraWNrX2xvY2s7Cj4+PiArICAgICBzcGlubG9ja190IGly cV9sb2NrOwo+Pj4gKyAgICAgc3RydWN0IGV2ZW50ZmRfY3R4ICpraWNrZmQ7Cj4+PiArICAgICBz dHJ1Y3QgdmRwYV9jYWxsYmFjayBjYjsKPj4+ICsgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCBpbmpl Y3Q7Cj4+PiArfTsKPj4+ICsKPj4+ICtzdHJ1Y3QgdmR1c2VfZGV2Owo+Pj4gKwo+Pj4gK3N0cnVj dCB2ZHVzZV92ZHBhIHsKPj4+ICsgICAgIHN0cnVjdCB2ZHBhX2RldmljZSB2ZHBhOwo+Pj4gKyAg ICAgc3RydWN0IHZkdXNlX2RldiAqZGV2Owo+Pj4gK307Cj4+PiArCj4+PiArc3RydWN0IHZkdXNl X2RldiB7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2VfdmRwYSAqdmRldjsKPj4+ICsgICAgIHN0cnVj dCBkZXZpY2UgZGV2Owo+Pj4gKyAgICAgc3RydWN0IGNkZXYgY2RldjsKPj4+ICsgICAgIHN0cnVj dCB2ZHVzZV92aXJ0cXVldWUgKnZxczsKPj4+ICsgICAgIHN0cnVjdCB2ZHVzZV9pb3ZhX2RvbWFp biAqZG9tYWluOwo+Pj4gKyAgICAgc3RydWN0IG11dGV4IGxvY2s7Cj4+PiArICAgICBzcGlubG9j a190IG1zZ19sb2NrOwo+Pj4gKyAgICAgYXRvbWljNjRfdCBtc2dfdW5pcXVlOwo+Pj4gKyAgICAg d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7Cj4+PiArICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHNlbmRf bGlzdDsKPj4+ICsgICAgIHN0cnVjdCBsaXN0X2hlYWQgcmVjdl9saXN0Owo+Pj4gKyAgICAgc3Ry dWN0IGxpc3RfaGVhZCBsaXN0Owo+Pj4gKyAgICAgc3RydWN0IHZkcGFfY2FsbGJhY2sgY29uZmln X2NiOwo+Pj4gKyAgICAgc3BpbmxvY2tfdCBpcnFfbG9jazsKPj4+ICsgICAgIHVuc2lnbmVkIGxv bmcgYXBpX3ZlcnNpb247Cj4+PiArICAgICBib29sIGNvbm5lY3RlZDsKPj4+ICsgICAgIGludCBt aW5vcjsKPj4+ICsgICAgIHUxNiB2cV9zaXplX21heDsKPj4+ICsgICAgIHUxNiB2cV9udW07Cj4+ PiArICAgICB1MzIgdnFfYWxpZ247Cj4+PiArICAgICB1MzIgZGV2aWNlX2lkOwo+Pj4gKyAgICAg dTMyIHZlbmRvcl9pZDsKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0cnVjdCB2ZHVzZV9kZXZfbXNnIHsK Pj4+ICsgICAgIHN0cnVjdCB2ZHVzZV9kZXZfcmVxdWVzdCByZXE7Cj4+PiArICAgICBzdHJ1Y3Qg dmR1c2VfZGV2X3Jlc3BvbnNlIHJlc3A7Cj4+PiArICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7 Cj4+PiArICAgICB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cTsKPj4+ICsgICAgIGJvb2wgY29tcGxl dGVkOwo+Pj4gK307Cj4+PiArCj4+PiArc3RydWN0IHZkdXNlX2NvbnRyb2wgewo+Pj4gKyAgICAg dW5zaWduZWQgbG9uZyBhcGlfdmVyc2lvbjsKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyB1bnNp Z25lZCBsb25nIG1heF9ib3VuY2Vfc2l6ZSA9ICg2NCAqIDEwMjQgKiAxMDI0KTsKPj4+ICttb2R1 bGVfcGFyYW0obWF4X2JvdW5jZV9zaXplLCB1bG9uZywgMDQ0NCk7Cj4+PiArTU9EVUxFX1BBUk1f REVTQyhtYXhfYm91bmNlX3NpemUsICJNYXhpbXVtIGJvdW5jZSBidWZmZXIgc2l6ZS4gKGRlZmF1 bHQ6IDY0TSkiKTsKPj4+ICsKPj4+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhfaW92YV9zaXpl ID0gKDEyOCAqIDEwMjQgKiAxMDI0KTsKPj4+ICttb2R1bGVfcGFyYW0obWF4X2lvdmFfc2l6ZSwg dWxvbmcsIDA0NDQpOwo+Pj4gK01PRFVMRV9QQVJNX0RFU0MobWF4X2lvdmFfc2l6ZSwgIk1heGlt dW0gaW92YSBzcGFjZSBzaXplIChkZWZhdWx0OiAxMjhNKSIpOwo+Pj4gKwo+Pj4gK3N0YXRpYyBE RUZJTkVfTVVURVgodmR1c2VfbG9jayk7Cj4+PiArc3RhdGljIExJU1RfSEVBRCh2ZHVzZV9kZXZz KTsKPj4+ICtzdGF0aWMgREVGSU5FX0lEQSh2ZHVzZV9pZGEpOwo+Pj4gKwo+Pj4gK3N0YXRpYyBk ZXZfdCB2ZHVzZV9tYWpvcjsKPj4+ICtzdGF0aWMgc3RydWN0IGNsYXNzICp2ZHVzZV9jbGFzczsK Pj4+ICtzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnZkdXNlX2lycV93cTsKPj4+ICsK Pj4+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB2ZHVzZV9kZXYgKnZkcGFfdG9fdmR1c2Uoc3RydWN0 IHZkcGFfZGV2aWNlICp2ZHBhKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB2ZHVzZV92ZHBhICp2 ZGV2ID0gY29udGFpbmVyX29mKHZkcGEsIHN0cnVjdCB2ZHVzZV92ZHBhLCB2ZHBhKTsKPj4+ICsK Pj4+ICsgICAgIHJldHVybiB2ZGV2LT5kZXY7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbmxp bmUgc3RydWN0IHZkdXNlX2RldiAqZGV2X3RvX3ZkdXNlKHN0cnVjdCBkZXZpY2UgKmRldikKPj4+ ICt7Cj4+PiArICAgICBzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEgPSBkZXZfdG9fdmRwYShkZXYp Owo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgdmR1c2VfZGV2X21zZyAqdmR1c2VfZmluZF9tc2coc3RydWN0 IGxpc3RfaGVhZCAqaGVhZCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQzMl90IHJlcXVlc3RfaWQpCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IHZkdXNl X2Rldl9tc2cgKnRtcCwgKm1zZyA9IE5VTEw7Cj4+PiArCj4+PiArICAgICBsaXN0X2Zvcl9lYWNo X2VudHJ5KHRtcCwgaGVhZCwgbGlzdCkgewo+Pj4gKyAgICAgICAgICAgICBpZiAodG1wLT5yZXEu cmVxdWVzdF9pZCA9PSByZXF1ZXN0X2lkKSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgbXNn ID0gdG1wOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGxpc3RfZGVsKCZ0bXAtPmxpc3QpOwo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKyAgICAgICAgICAgICB9Cj4+PiAr ICAgICB9Cj4+PiArCj4+PiArICAgICByZXR1cm4gbXNnOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0 aWMgc3RydWN0IHZkdXNlX2Rldl9tc2cgKnZkdXNlX2RlcXVldWVfbXNnKHN0cnVjdCBsaXN0X2hl YWQgKmhlYWQpCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2Rldl9tc2cgKm1zZyA9IE5V TEw7Cj4+PiArCj4+PiArICAgICBpZiAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKPj4+ICsgICAgICAg ICAgICAgbXNnID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgdmR1c2VfZGV2X21zZywg bGlzdCk7Cj4+PiArICAgICAgICAgICAgIGxpc3RfZGVsKCZtc2ctPmxpc3QpOwo+Pj4gKyAgICAg fQo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIG1zZzsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZv aWQgdmR1c2VfZW5xdWV1ZV9tc2coc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmR1c2VfZGV2X21zZyAqbXNnKQo+Pj4gK3sKPj4+ ICsgICAgIGxpc3RfYWRkX3RhaWwoJm1zZy0+bGlzdCwgaGVhZCk7Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyBpbnQgdmR1c2VfZGV2X21zZ19zeW5jKHN0cnVjdCB2ZHVzZV9kZXYgKmRldiwKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmR1c2VfZGV2X21zZyAqbXNnKQo+ Pj4gK3sKPj4+ICsgICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJm1zZy0+d2FpdHEpOwo+Pj4gKyAg ICAgc3Bpbl9sb2NrKCZkZXYtPm1zZ19sb2NrKTsKPj4+ICsgICAgIHZkdXNlX2VucXVldWVfbXNn KCZkZXYtPnNlbmRfbGlzdCwgbXNnKTsKPj4+ICsgICAgIHdha2VfdXAoJmRldi0+d2FpdHEpOwo+ Pj4gKyAgICAgc3Bpbl91bmxvY2soJmRldi0+bXNnX2xvY2spOwo+Pj4gKyAgICAgd2FpdF9ldmVu dF9pbnRlcnJ1cHRpYmxlKG1zZy0+d2FpdHEsIG1zZy0+Y29tcGxldGVkKTsKPj4+ICsgICAgIHNw aW5fbG9jaygmZGV2LT5tc2dfbG9jayk7Cj4+PiArICAgICBpZiAoIW1zZy0+Y29tcGxldGVkKQo+ Pj4gKyAgICAgICAgICAgICBsaXN0X2RlbCgmbXNnLT5saXN0KTsKPj4+ICsgICAgIHNwaW5fdW5s b2NrKCZkZXYtPm1zZ19sb2NrKTsKPj4+ICsKPj4+ICsgICAgIHJldHVybiAobXNnLT5yZXNwLnJl c3VsdCA9PSBWRFVTRV9SRVFVRVNUX09LKSA/IDAgOiAtMTsKPj4+ICt9Cj4+PiArCj4+PiArc3Rh dGljIHUzMiB2ZHVzZV9kZXZfZ2V0X3JlcXVlc3RfaWQoc3RydWN0IHZkdXNlX2RldiAqZGV2KQo+ Pj4gK3sKPj4+ICsgICAgIHJldHVybiBhdG9taWM2NF9mZXRjaF9pbmMoJmRldi0+bXNnX3VuaXF1 ZSk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB1NjQgdmR1c2VfZGV2X2dldF9mZWF0dXJlcyhz dHJ1Y3QgdmR1c2VfZGV2ICpkZXYpCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2Rldl9t c2cgbXNnID0geyAwIH07Cj4+PiArCj4+PiArICAgICBtc2cucmVxLnR5cGUgPSBWRFVTRV9HRVRf RkVBVFVSRVM7Cj4+PiArICAgICBtc2cucmVxLnJlcXVlc3RfaWQgPSB2ZHVzZV9kZXZfZ2V0X3Jl cXVlc3RfaWQoZGV2KTsKPj4+ICsKPj4+ICsgICAgIHJldHVybiB2ZHVzZV9kZXZfbXNnX3N5bmMo ZGV2LCAmbXNnKSA/IDAgOiBtc2cucmVzcC5mLmZlYXR1cmVzOwo+Pj4gK30KPj4+ICsKPj4+ICtz dGF0aWMgaW50IHZkdXNlX2Rldl9zZXRfZmVhdHVyZXMoc3RydWN0IHZkdXNlX2RldiAqZGV2LCB1 NjQgZmVhdHVyZXMpCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2Rldl9tc2cgbXNnID0g eyAwIH07Cj4+PiArCj4+PiArICAgICBtc2cucmVxLnR5cGUgPSBWRFVTRV9TRVRfRkVBVFVSRVM7 Cj4+PiArICAgICBtc2cucmVxLnJlcXVlc3RfaWQgPSB2ZHVzZV9kZXZfZ2V0X3JlcXVlc3RfaWQo ZGV2KTsKPj4+ICsgICAgIG1zZy5yZXEuZi5mZWF0dXJlcyA9IGZlYXR1cmVzOwo+Pj4gKwo+Pj4g KyAgICAgcmV0dXJuIHZkdXNlX2Rldl9tc2dfc3luYyhkZXYsICZtc2cpOwo+Pj4gK30KPj4+ICsK Pj4+ICtzdGF0aWMgdTggdmR1c2VfZGV2X2dldF9zdGF0dXMoc3RydWN0IHZkdXNlX2RldiAqZGV2 KQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB2ZHVzZV9kZXZfbXNnIG1zZyA9IHsgMCB9Owo+Pj4g Kwo+Pj4gKyAgICAgbXNnLnJlcS50eXBlID0gVkRVU0VfR0VUX1NUQVRVUzsKPj4+ICsgICAgIG1z Zy5yZXEucmVxdWVzdF9pZCA9IHZkdXNlX2Rldl9nZXRfcmVxdWVzdF9pZChkZXYpOwo+Pj4gKwo+ Pj4gKyAgICAgcmV0dXJuIHZkdXNlX2Rldl9tc2dfc3luYyhkZXYsICZtc2cpID8gMCA6IG1zZy5y ZXNwLnMuc3RhdHVzOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCB2ZHVzZV9kZXZfc2V0 X3N0YXR1cyhzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYsIHU4IHN0YXR1cykKPj4+ICt7Cj4+PiArICAg ICBzdHJ1Y3QgdmR1c2VfZGV2X21zZyBtc2cgPSB7IDAgfTsKPj4+ICsKPj4+ICsgICAgIG1zZy5y ZXEudHlwZSA9IFZEVVNFX1NFVF9TVEFUVVM7Cj4+PiArICAgICBtc2cucmVxLnJlcXVlc3RfaWQg PSB2ZHVzZV9kZXZfZ2V0X3JlcXVlc3RfaWQoZGV2KTsKPj4+ICsgICAgIG1zZy5yZXEucy5zdGF0 dXMgPSBzdGF0dXM7Cj4+PiArCj4+PiArICAgICB2ZHVzZV9kZXZfbXNnX3N5bmMoZGV2LCAmbXNn KTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgdmR1c2VfZGV2X2dldF9jb25maWcoc3Ry dWN0IHZkdXNlX2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKPj4+ICt7Cj4+ PiArICAgICBzdHJ1Y3QgdmR1c2VfZGV2X21zZyBtc2cgPSB7IDAgfTsKPj4+ICsgICAgIHVuc2ln bmVkIGludCBzejsKPj4+ICsKPj4+ICsgICAgIHdoaWxlIChsZW4pIHsKPj4+ICsgICAgICAgICAg ICAgc3ogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKG1zZy5yZXEuY29uZmlnLmRh dGEpKTsKPj4+ICsgICAgICAgICAgICAgbXNnLnJlcS50eXBlID0gVkRVU0VfR0VUX0NPTkZJRzsK Pj4+ICsgICAgICAgICAgICAgbXNnLnJlcS5yZXF1ZXN0X2lkID0gdmR1c2VfZGV2X2dldF9yZXF1 ZXN0X2lkKGRldik7Cj4+PiArICAgICAgICAgICAgIG1zZy5yZXEuY29uZmlnLm9mZnNldCA9IG9m ZnNldDsKPj4+ICsgICAgICAgICAgICAgbXNnLnJlcS5jb25maWcubGVuID0gc3o7Cj4+PiArICAg ICAgICAgICAgIHZkdXNlX2Rldl9tc2dfc3luYyhkZXYsICZtc2cpOwo+Pj4gKyAgICAgICAgICAg ICBtZW1jcHkoYnVmLCBtc2cucmVzcC5jb25maWcuZGF0YSwgc3opOwo+Pj4gKyAgICAgICAgICAg ICBidWYgKz0gc3o7Cj4+PiArICAgICAgICAgICAgIG9mZnNldCArPSBzejsKPj4+ICsgICAgICAg ICAgICAgbGVuIC09IHN6Owo+Pj4gKyAgICAgfQo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9p ZCB2ZHVzZV9kZXZfc2V0X2NvbmZpZyhzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYsIHVuc2lnbmVkIGlu dCBvZmZzZXQsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAq YnVmLCB1bnNpZ25lZCBpbnQgbGVuKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB2ZHVzZV9kZXZf bXNnIG1zZyA9IHsgMCB9Owo+Pj4gKyAgICAgdW5zaWduZWQgaW50IHN6Owo+Pj4gKwo+Pj4gKyAg ICAgd2hpbGUgKGxlbikgewo+Pj4gKyAgICAgICAgICAgICBzeiA9IG1pbl90KHVuc2lnbmVkIGlu dCwgbGVuLCBzaXplb2YobXNnLnJlcS5jb25maWcuZGF0YSkpOwo+Pj4gKyAgICAgICAgICAgICBt c2cucmVxLnR5cGUgPSBWRFVTRV9TRVRfQ09ORklHOwo+Pj4gKyAgICAgICAgICAgICBtc2cucmVx LnJlcXVlc3RfaWQgPSB2ZHVzZV9kZXZfZ2V0X3JlcXVlc3RfaWQoZGV2KTsKPj4+ICsgICAgICAg ICAgICAgbXNnLnJlcS5jb25maWcub2Zmc2V0ID0gb2Zmc2V0Owo+Pj4gKyAgICAgICAgICAgICBt c2cucmVxLmNvbmZpZy5sZW4gPSBzejsKPj4+ICsgICAgICAgICAgICAgbWVtY3B5KG1zZy5yZXEu Y29uZmlnLmRhdGEsIGJ1Ziwgc3opOwo+Pj4gKyAgICAgICAgICAgICB2ZHVzZV9kZXZfbXNnX3N5 bmMoZGV2LCAmbXNnKTsKPj4+ICsgICAgICAgICAgICAgYnVmICs9IHN6Owo+Pj4gKyAgICAgICAg ICAgICBvZmZzZXQgKz0gc3o7Cj4+PiArICAgICAgICAgICAgIGxlbiAtPSBzejsKPj4+ICsgICAg IH0KPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgdmR1c2VfZGV2X3NldF92cV9udW0oc3Ry dWN0IHZkdXNlX2RldiAqZGV2LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB2ZHVzZV92aXJ0cXVldWUgKnZxLCB1MzIgbnVtKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVj dCB2ZHVzZV9kZXZfbXNnIG1zZyA9IHsgMCB9Owo+Pj4gKwo+Pj4gKyAgICAgbXNnLnJlcS50eXBl ID0gVkRVU0VfU0VUX1ZRX05VTTsKPj4+ICsgICAgIG1zZy5yZXEucmVxdWVzdF9pZCA9IHZkdXNl X2Rldl9nZXRfcmVxdWVzdF9pZChkZXYpOwo+Pj4gKyAgICAgbXNnLnJlcS52cV9udW0uaW5kZXgg PSB2cS0+aW5kZXg7Cj4+PiArICAgICBtc2cucmVxLnZxX251bS5udW0gPSBudW07Cj4+PiArCj4+ PiArICAgICB2ZHVzZV9kZXZfbXNnX3N5bmMoZGV2LCAmbXNnKTsKPj4+ICt9Cj4+PiArCj4+PiAr c3RhdGljIGludCB2ZHVzZV9kZXZfc2V0X3ZxX2FkZHIoc3RydWN0IHZkdXNlX2RldiAqZGV2LAo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2ZHVzZV92aXJ0cXVldWUg KnZxLCB1NjQgZGVzY19hZGRyLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2 NCBkcml2ZXJfYWRkciwgdTY0IGRldmljZV9hZGRyKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB2 ZHVzZV9kZXZfbXNnIG1zZyA9IHsgMCB9Owo+Pj4gKwo+Pj4gKyAgICAgbXNnLnJlcS50eXBlID0g VkRVU0VfU0VUX1ZRX0FERFI7Cj4+PiArICAgICBtc2cucmVxLnJlcXVlc3RfaWQgPSB2ZHVzZV9k ZXZfZ2V0X3JlcXVlc3RfaWQoZGV2KTsKPj4+ICsgICAgIG1zZy5yZXEudnFfYWRkci5pbmRleCA9 IHZxLT5pbmRleDsKPj4+ICsgICAgIG1zZy5yZXEudnFfYWRkci5kZXNjX2FkZHIgPSBkZXNjX2Fk ZHI7Cj4+PiArICAgICBtc2cucmVxLnZxX2FkZHIuZHJpdmVyX2FkZHIgPSBkcml2ZXJfYWRkcjsK Pj4+ICsgICAgIG1zZy5yZXEudnFfYWRkci5kZXZpY2VfYWRkciA9IGRldmljZV9hZGRyOwo+Pj4g Kwo+Pj4gKyAgICAgcmV0dXJuIHZkdXNlX2Rldl9tc2dfc3luYyhkZXYsICZtc2cpOwo+Pj4gK30K Pj4+ICsKPj4+ICtzdGF0aWMgdm9pZCB2ZHVzZV9kZXZfc2V0X3ZxX3JlYWR5KHN0cnVjdCB2ZHVz ZV9kZXYgKmRldiwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2ZHVz ZV92aXJ0cXVldWUgKnZxLCBib29sIHJlYWR5KQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB2ZHVz ZV9kZXZfbXNnIG1zZyA9IHsgMCB9Owo+Pj4gKwo+Pj4gKyAgICAgbXNnLnJlcS50eXBlID0gVkRV U0VfU0VUX1ZRX1JFQURZOwo+Pj4gKyAgICAgbXNnLnJlcS5yZXF1ZXN0X2lkID0gdmR1c2VfZGV2 X2dldF9yZXF1ZXN0X2lkKGRldik7Cj4+PiArICAgICBtc2cucmVxLnZxX3JlYWR5LmluZGV4ID0g dnEtPmluZGV4Owo+Pj4gKyAgICAgbXNnLnJlcS52cV9yZWFkeS5yZWFkeSA9IHJlYWR5Owo+Pj4g Kwo+Pj4gKyAgICAgdmR1c2VfZGV2X21zZ19zeW5jKGRldiwgJm1zZyk7Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyBib29sIHZkdXNlX2Rldl9nZXRfdnFfcmVhZHkoc3RydWN0IHZkdXNlX2RldiAq ZGV2LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZkdXNlX3Zp cnRxdWV1ZSAqdnEpCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2Rldl9tc2cgbXNnID0g eyAwIH07Cj4+PiArCj4+PiArICAgICBtc2cucmVxLnR5cGUgPSBWRFVTRV9HRVRfVlFfUkVBRFk7 Cj4+PiArICAgICBtc2cucmVxLnJlcXVlc3RfaWQgPSB2ZHVzZV9kZXZfZ2V0X3JlcXVlc3RfaWQo ZGV2KTsKPj4+ICsgICAgIG1zZy5yZXEudnFfcmVhZHkuaW5kZXggPSB2cS0+aW5kZXg7Cj4+PiAr Cj4+PiArICAgICByZXR1cm4gdmR1c2VfZGV2X21zZ19zeW5jKGRldiwgJm1zZykgPyBmYWxzZSA6 IG1zZy5yZXNwLnZxX3JlYWR5LnJlYWR5Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHZk dXNlX2Rldl9nZXRfdnFfc3RhdGUoc3RydWN0IHZkdXNlX2RldiAqZGV2LAo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZkdXNlX3ZpcnRxdWV1ZSAqdnEsCj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmRwYV92cV9zdGF0ZSAqc3RhdGUpCj4+ PiArewo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2Rldl9tc2cgbXNnID0geyAwIH07Cj4+PiArICAg ICBpbnQgcmV0Owo+Pj4gKwo+Pj4gKyAgICAgbXNnLnJlcS50eXBlID0gVkRVU0VfR0VUX1ZRX1NU QVRFOwo+Pj4gKyAgICAgbXNnLnJlcS5yZXF1ZXN0X2lkID0gdmR1c2VfZGV2X2dldF9yZXF1ZXN0 X2lkKGRldik7Cj4+PiArICAgICBtc2cucmVxLnZxX3N0YXRlLmluZGV4ID0gdnEtPmluZGV4Owo+ Pj4gKwo+Pj4gKyAgICAgcmV0ID0gdmR1c2VfZGV2X21zZ19zeW5jKGRldiwgJm1zZyk7Cj4+PiAr ICAgICBpZiAoIXJldCkKPj4+ICsgICAgICAgICAgICAgc3RhdGUtPmF2YWlsX2luZGV4ID0gbXNn LnJlc3AudnFfc3RhdGUuYXZhaWxfaWR4Owo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIHJldDsKPj4+ ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCB2ZHVzZV9kZXZfc2V0X3ZxX3N0YXRlKHN0cnVjdCB2 ZHVzZV9kZXYgKmRldiwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2 ZHVzZV92aXJ0cXVldWUgKnZxLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgc3RydWN0IHZkcGFfdnFfc3RhdGUgKnN0YXRlKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB2 ZHVzZV9kZXZfbXNnIG1zZyA9IHsgMCB9Owo+Pj4gKwo+Pj4gKyAgICAgbXNnLnJlcS50eXBlID0g VkRVU0VfU0VUX1ZRX1NUQVRFOwo+Pj4gKyAgICAgbXNnLnJlcS5yZXF1ZXN0X2lkID0gdmR1c2Vf ZGV2X2dldF9yZXF1ZXN0X2lkKGRldik7Cj4+PiArICAgICBtc2cucmVxLnZxX3N0YXRlLmluZGV4 ID0gdnEtPmluZGV4Owo+Pj4gKyAgICAgbXNnLnJlcS52cV9zdGF0ZS5hdmFpbF9pZHggPSBzdGF0 ZS0+YXZhaWxfaW5kZXg7Cj4+PiArCj4+PiArICAgICByZXR1cm4gdmR1c2VfZGV2X21zZ19zeW5j KGRldiwgJm1zZyk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgdmR1c2VfZGV2X3VwZGF0 ZV9pb3RsYihzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYsCj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1NjQgc3RhcnQsIHU2NCBsYXN0KQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB2ZHVz ZV9kZXZfbXNnIG1zZyA9IHsgMCB9Owo+Pj4gKwo+Pj4gKyAgICAgaWYgKGxhc3QgPCBzdGFydCkK Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArCj4+PiArICAgICBtc2cucmVx LnR5cGUgPSBWRFVTRV9VUERBVEVfSU9UTEI7Cj4+PiArICAgICBtc2cucmVxLnJlcXVlc3RfaWQg PSB2ZHVzZV9kZXZfZ2V0X3JlcXVlc3RfaWQoZGV2KTsKPj4+ICsgICAgIG1zZy5yZXEuaW92YS5z dGFydCA9IHN0YXJ0Owo+Pj4gKyAgICAgbXNnLnJlcS5pb3ZhLmxhc3QgPSBsYXN0Owo+Pj4gKwo+ Pj4gKyAgICAgcmV0dXJuIHZkdXNlX2Rldl9tc2dfc3luYyhkZXYsICZtc2cpOwo+Pj4gK30KPj4+ ICsKPj4+ICtzdGF0aWMgc3NpemVfdCB2ZHVzZV9kZXZfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAq aW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bykKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgZmlsZSAq ZmlsZSA9IGlvY2ItPmtpX2ZpbHA7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSBm aWxlLT5wcml2YXRlX2RhdGE7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2VfZGV2X21zZyAqbXNnOwo+ Pj4gKyAgICAgaW50IHNpemUgPSBzaXplb2Yoc3RydWN0IHZkdXNlX2Rldl9yZXF1ZXN0KTsKPj4+ ICsgICAgIHNzaXplX3QgcmV0ID0gMDsKPj4+ICsKPj4+ICsgICAgIGlmIChpb3ZfaXRlcl9jb3Vu dCh0bykgPCBzaXplKQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gMDsKPj4+ICsKPj4+ICsgICAg IHNwaW5fbG9jaygmZGV2LT5tc2dfbG9jayk7Cj4+PiArICAgICB3aGlsZSAoMSkgewo+Pj4gKyAg ICAgICAgICAgICBtc2cgPSB2ZHVzZV9kZXF1ZXVlX21zZygmZGV2LT5zZW5kX2xpc3QpOwo+Pj4g KyAgICAgICAgICAgICBpZiAobXNnKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ Pj4gKwo+Pj4gKyAgICAgICAgICAgICByZXQgPSAtRUFHQUlOOwo+Pj4gKyAgICAgICAgICAgICBp ZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCj4+PiArICAgICAgICAgICAgICAgICAgICAg Z290byB1bmxvY2s7Cj4+PiArCj4+PiArICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZkZXYtPm1z Z19sb2NrKTsKPj4+ICsgICAgICAgICAgICAgcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxl X2V4Y2x1c2l2ZShkZXYtPndhaXRxLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAhbGlzdF9lbXB0eSgmZGV2LT5zZW5kX2xpc3QpKTsKPj4+ICsgICAgICAgICAgICAg aWYgKHJldCkKPj4+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+Pj4gKwo+Pj4g KyAgICAgICAgICAgICBzcGluX2xvY2soJmRldi0+bXNnX2xvY2spOwo+Pj4gKyAgICAgfQo+Pj4g KyAgICAgc3Bpbl91bmxvY2soJmRldi0+bXNnX2xvY2spOwo+Pj4gKyAgICAgcmV0ID0gY29weV90 b19pdGVyKCZtc2ctPnJlcSwgc2l6ZSwgdG8pOwo+Pj4gKyAgICAgc3Bpbl9sb2NrKCZkZXYtPm1z Z19sb2NrKTsKPj4+ICsgICAgIGlmIChyZXQgIT0gc2l6ZSkgewo+Pj4gKyAgICAgICAgICAgICBy ZXQgPSAtRUZBVUxUOwo+Pj4gKyAgICAgICAgICAgICB2ZHVzZV9lbnF1ZXVlX21zZygmZGV2LT5z ZW5kX2xpc3QsIG1zZyk7Cj4+PiArICAgICAgICAgICAgIGdvdG8gdW5sb2NrOwo+Pj4gKyAgICAg fQo+Pj4gKyAgICAgdmR1c2VfZW5xdWV1ZV9tc2coJmRldi0+cmVjdl9saXN0LCBtc2cpOwo+Pj4g KyAgICAgd2FrZV91cCgmZGV2LT53YWl0cSk7Cj4+PiArdW5sb2NrOgo+Pj4gKyAgICAgc3Bpbl91 bmxvY2soJmRldi0+bXNnX2xvY2spOwo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIHJldDsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIHNzaXplX3QgdmR1c2VfZGV2X3dyaXRlX2l0ZXIoc3RydWN0IGtp b2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCj4+PiArewo+Pj4gKyAgICAgc3RydWN0 IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2RldiAq ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2Rldl9yZXNw b25zZSByZXNwOwo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2Rldl9tc2cgKm1zZzsKPj4+ICsgICAg IHNpemVfdCByZXQ7Cj4+PiArCj4+PiArICAgICByZXQgPSBjb3B5X2Zyb21faXRlcigmcmVzcCwg c2l6ZW9mKHJlc3ApLCBmcm9tKTsKPj4+ICsgICAgIGlmIChyZXQgIT0gc2l6ZW9mKHJlc3ApKQo+ Pj4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+ICsKPj4+ICsgICAgIHNwaW5fbG9j aygmZGV2LT5tc2dfbG9jayk7Cj4+PiArICAgICBtc2cgPSB2ZHVzZV9maW5kX21zZygmZGV2LT5y ZWN2X2xpc3QsIHJlc3AucmVxdWVzdF9pZCk7Cj4+PiArICAgICBpZiAoIW1zZykgewo+Pj4gKyAg ICAgICAgICAgICByZXQgPSAtRUlOVkFMOwo+Pj4gKyAgICAgICAgICAgICBnb3RvIHVubG9jazsK Pj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIG1lbWNweSgmbXNnLT5yZXNwLCAmcmVzcCwgc2l6 ZW9mKHJlc3ApKTsKPj4+ICsgICAgIG1zZy0+Y29tcGxldGVkID0gMTsKPj4+ICsgICAgIHdha2Vf dXAoJm1zZy0+d2FpdHEpOwo+Pj4gK3VubG9jazoKPj4+ICsgICAgIHNwaW5fdW5sb2NrKCZkZXYt Pm1zZ19sb2NrKTsKPj4+ICsKPj4+ICsgICAgIHJldHVybiByZXQ7Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyBfX3BvbGxfdCB2ZHVzZV9kZXZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90 YWJsZSAqd2FpdCkKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSBmaWxl LT5wcml2YXRlX2RhdGE7Cj4+PiArICAgICBfX3BvbGxfdCBtYXNrID0gMDsKPj4+ICsKPj4+ICsg ICAgIHBvbGxfd2FpdChmaWxlLCAmZGV2LT53YWl0cSwgd2FpdCk7Cj4+PiArCj4+PiArICAgICBp ZiAoIWxpc3RfZW1wdHkoJmRldi0+c2VuZF9saXN0KSkKPj4+ICsgICAgICAgICAgICAgbWFzayB8 PSBFUE9MTElOIHwgRVBPTExSRE5PUk07Cj4+PiArICAgICBpZiAoIWxpc3RfZW1wdHkoJmRldi0+ cmVjdl9saXN0KSkKPj4+ICsgICAgICAgICAgICAgbWFzayB8PSBFUE9MTE9VVDsKPj4+ICsKPj4+ ICsgICAgIHJldHVybiBtYXNrOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCB2ZHVzZV9k ZXZfcmVzZXQoc3RydWN0IHZkdXNlX2RldiAqZGV2KQo+Pj4gK3sKPj4+ICsgICAgIGludCBpOwo+ Pj4gKwo+Pj4gKyAgICAgLyogVGhlIGNvaGVyZW50IG1hcHBpbmdzIGFyZSBoYW5kbGVkIGluIHZk dXNlX2Rldl9mcmVlX2NvaGVyZW50KCkgKi8KPj4+ICsgICAgIHZkdXNlX2RvbWFpbl9yZXNldF9i b3VuY2VfbWFwKGRldi0+ZG9tYWluKTsKPj4+ICsgICAgIHZkdXNlX2Rldl91cGRhdGVfaW90bGIo ZGV2LCAwVUxMLCBVTExPTkdfTUFYKTsKPj4+ICsKPj4+ICsgICAgIHNwaW5fbG9jaygmZGV2LT5p cnFfbG9jayk7Cj4+PiArICAgICBkZXYtPmNvbmZpZ19jYi5jYWxsYmFjayA9IE5VTEw7Cj4+PiAr ICAgICBkZXYtPmNvbmZpZ19jYi5wcml2YXRlID0gTlVMTDsKPj4+ICsgICAgIHNwaW5fdW5sb2Nr KCZkZXYtPmlycV9sb2NrKTsKPj4+ICsKPj4+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBkZXYtPnZx X251bTsgaSsrKSB7Cj4+PiArICAgICAgICAgICAgIHN0cnVjdCB2ZHVzZV92aXJ0cXVldWUgKnZx ID0gJmRldi0+dnFzW2ldOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICBzcGluX2xvY2soJnZxLT5p cnFfbG9jayk7Cj4+PiArICAgICAgICAgICAgIHZxLT5yZWFkeSA9IGZhbHNlOwo+Pj4gKyAgICAg ICAgICAgICB2cS0+Y2IuY2FsbGJhY2sgPSBOVUxMOwo+Pj4gKyAgICAgICAgICAgICB2cS0+Y2Iu cHJpdmF0ZSA9IE5VTEw7Cj4+PiArICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZ2cS0+aXJxX2xv Y2spOwo+Pj4gKyAgICAgfQo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHZkdXNlX3ZkcGFf c2V0X3ZxX2FkZHJlc3Moc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhLCB1MTYgaWR4LAo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdTY0IGRlc2NfYXJlYSwgdTY0IGRyaXZlcl9hcmVh LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTY0IGRldmljZV9hcmVhKQo+Pj4g K3sKPj4+ICsgICAgIHN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9IHZkcGFfdG9fdmR1c2UodmRwYSk7 Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2VfdmlydHF1ZXVlICp2cSA9ICZkZXYtPnZxc1tpZHhdOwo+ Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIHZkdXNlX2Rldl9zZXRfdnFfYWRkcihkZXYsIHZxLCBkZXNj X2FyZWEsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcl9h cmVhLCBkZXZpY2VfYXJlYSk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHZkdXNlX3Zk cGFfa2lja192cShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsIHUxNiBpZHgpCj4+PiArewo+Pj4g KyAgICAgc3RydWN0IHZkdXNlX2RldiAqZGV2ID0gdmRwYV90b192ZHVzZSh2ZHBhKTsKPj4+ICsg ICAgIHN0cnVjdCB2ZHVzZV92aXJ0cXVldWUgKnZxID0gJmRldi0+dnFzW2lkeF07Cj4+PiArCj4+ PiArICAgICBzcGluX2xvY2soJnZxLT5raWNrX2xvY2spOwo+Pj4gKyAgICAgaWYgKHZxLT5yZWFk eSAmJiB2cS0+a2lja2ZkKQo+Pj4gKyAgICAgICAgICAgICBldmVudGZkX3NpZ25hbCh2cS0+a2lj a2ZkLCAxKTsKPj4+ICsgICAgIHNwaW5fdW5sb2NrKCZ2cS0+a2lja19sb2NrKTsKPj4+ICt9Cj4+ PiArCj4+PiArc3RhdGljIHZvaWQgdmR1c2VfdmRwYV9zZXRfdnFfY2Ioc3RydWN0IHZkcGFfZGV2 aWNlICp2ZHBhLCB1MTYgaWR4LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCB2ZHBhX2NhbGxiYWNrICpjYikKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2VfZGV2ICpk ZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX3ZpcnRxdWV1 ZSAqdnEgPSAmZGV2LT52cXNbaWR4XTsKPj4+ICsKPj4+ICsgICAgIHNwaW5fbG9jaygmdnEtPmly cV9sb2NrKTsKPj4+ICsgICAgIHZxLT5jYi5jYWxsYmFjayA9IGNiLT5jYWxsYmFjazsKPj4+ICsg ICAgIHZxLT5jYi5wcml2YXRlID0gY2ItPnByaXZhdGU7Cj4+PiArICAgICBzcGluX3VubG9jaygm dnEtPmlycV9sb2NrKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgdmR1c2VfdmRwYV9z ZXRfdnFfbnVtKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSwgdTE2IGlkeCwgdTMyIG51bSkKPj4+ ICt7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEp Owo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX3ZpcnRxdWV1ZSAqdnEgPSAmZGV2LT52cXNbaWR4XTsK Pj4+ICsKPj4+ICsgICAgIHZkdXNlX2Rldl9zZXRfdnFfbnVtKGRldiwgdnEsIG51bSk7Cj4+PiAr fQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHZkdXNlX3ZkcGFfc2V0X3ZxX3JlYWR5KHN0cnVjdCB2 ZHBhX2RldmljZSAqdmRwYSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdTE2IGlkeCwgYm9vbCByZWFkeSkKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2VfZGV2 ICpkZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX3ZpcnRx dWV1ZSAqdnEgPSAmZGV2LT52cXNbaWR4XTsKPj4+ICsKPj4+ICsgICAgIHZkdXNlX2Rldl9zZXRf dnFfcmVhZHkoZGV2LCB2cSwgcmVhZHkpOwo+Pj4gKyAgICAgdnEtPnJlYWR5ID0gcmVhZHk7Cj4+ PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBib29sIHZkdXNlX3ZkcGFfZ2V0X3ZxX3JlYWR5KHN0cnVj dCB2ZHBhX2RldmljZSAqdmRwYSwgdTE2IGlkeCkKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgdmR1 c2VfZGV2ICpkZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+Pj4gKyAgICAgc3RydWN0IHZkdXNl X3ZpcnRxdWV1ZSAqdnEgPSAmZGV2LT52cXNbaWR4XTsKPj4+ICsKPj4+ICsgICAgIHZxLT5yZWFk eSA9IHZkdXNlX2Rldl9nZXRfdnFfcmVhZHkoZGV2LCB2cSk7Cj4+PiArCj4+PiArICAgICByZXR1 cm4gdnEtPnJlYWR5Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHZkdXNlX3ZkcGFfc2V0 X3ZxX3N0YXRlKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSwgdTE2IGlkeCwKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2ZHBhX3ZxX3N0YXRlICpzdGF0ZSkK Pj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSB2ZHBhX3RvX3ZkdXNlKHZk cGEpOwo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX3ZpcnRxdWV1ZSAqdnEgPSAmZGV2LT52cXNbaWR4 XTsKPj4+ICsKPj4+ICsgICAgIHJldHVybiB2ZHVzZV9kZXZfc2V0X3ZxX3N0YXRlKGRldiwgdnEs IHN0YXRlKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCB2ZHVzZV92ZHBhX2dldF92cV9z dGF0ZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsIHUxNiBpZHgsCj4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmRwYV92cV9zdGF0ZSAqc3RhdGUpCj4+PiArewo+Pj4g KyAgICAgc3RydWN0IHZkdXNlX2RldiAqZGV2ID0gdmRwYV90b192ZHVzZSh2ZHBhKTsKPj4+ICsg ICAgIHN0cnVjdCB2ZHVzZV92aXJ0cXVldWUgKnZxID0gJmRldi0+dnFzW2lkeF07Cj4+PiArCj4+ PiArICAgICByZXR1cm4gdmR1c2VfZGV2X2dldF92cV9zdGF0ZShkZXYsIHZxLCBzdGF0ZSk7Cj4+ PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB1MzIgdmR1c2VfdmRwYV9nZXRfdnFfYWxpZ24oc3RydWN0 IHZkcGFfZGV2aWNlICp2ZHBhKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB2ZHVzZV9kZXYgKmRl diA9IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4+PiArCj4+PiArICAgICByZXR1cm4gZGV2LT52cV9h bGlnbjsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHU2NCB2ZHVzZV92ZHBhX2dldF9mZWF0dXJl cyhzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IHZkdXNl X2RldiAqZGV2ID0gdmRwYV90b192ZHVzZSh2ZHBhKTsKPj4+ICsKPj4+ICsgICAgIHJldHVybiB2 ZHVzZV9kZXZfZ2V0X2ZlYXR1cmVzKGRldik7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQg dmR1c2VfdmRwYV9zZXRfZmVhdHVyZXMoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhLCB1NjQgZmVh dHVyZXMpCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2RldiAqZGV2ID0gdmRwYV90b192 ZHVzZSh2ZHBhKTsKPj4+ICsKPj4+ICsgICAgIGlmICghKGZlYXR1cmVzICYgKDFVTEwgPDwgVklS VElPX0ZfQUNDRVNTX1BMQVRGT1JNKSkpCj4+PiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFM Owo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIHZkdXNlX2Rldl9zZXRfZmVhdHVyZXMoZGV2LCBmZWF0 dXJlcyk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHZkdXNlX3ZkcGFfc2V0X2NvbmZp Z19jYihzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsCj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCB2ZHBhX2NhbGxiYWNrICpjYikKPj4+ICt7Cj4+PiArICAgICBzdHJ1 Y3QgdmR1c2VfZGV2ICpkZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+Pj4gKwo+Pj4gKyAgICAg c3Bpbl9sb2NrKCZkZXYtPmlycV9sb2NrKTsKPj4+ICsgICAgIGRldi0+Y29uZmlnX2NiLmNhbGxi YWNrID0gY2ItPmNhbGxiYWNrOwo+Pj4gKyAgICAgZGV2LT5jb25maWdfY2IucHJpdmF0ZSA9IGNi LT5wcml2YXRlOwo+Pj4gKyAgICAgc3Bpbl91bmxvY2soJmRldi0+aXJxX2xvY2spOwo+Pj4gK30K Pj4+ICsKPj4+ICtzdGF0aWMgdTE2IHZkdXNlX3ZkcGFfZ2V0X3ZxX251bV9tYXgoc3RydWN0IHZk cGFfZGV2aWNlICp2ZHBhKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9 IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4+PiArCj4+PiArICAgICByZXR1cm4gZGV2LT52cV9zaXpl X21heDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHUzMiB2ZHVzZV92ZHBhX2dldF9kZXZpY2Vf aWQoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB2ZHVz ZV9kZXYgKmRldiA9IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4+PiArCj4+PiArICAgICByZXR1cm4g ZGV2LT5kZXZpY2VfaWQ7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB1MzIgdmR1c2VfdmRwYV9n ZXRfdmVuZG9yX2lkKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSkKPj4+ICt7Cj4+PiArICAgICBz dHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+Pj4gKwo+Pj4gKyAg ICAgcmV0dXJuIGRldi0+dmVuZG9yX2lkOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdTggdmR1 c2VfdmRwYV9nZXRfc3RhdHVzKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSkKPj4+ICt7Cj4+PiAr ICAgICBzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+Pj4gKwo+ Pj4gKyAgICAgcmV0dXJuIHZkdXNlX2Rldl9nZXRfc3RhdHVzKGRldik7Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyB2b2lkIHZkdXNlX3ZkcGFfc2V0X3N0YXR1cyhzdHJ1Y3QgdmRwYV9kZXZpY2Ug KnZkcGEsIHU4IHN0YXR1cykKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYg PSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+Pj4gKwo+Pj4gKyAgICAgdmR1c2VfZGV2X3NldF9zdGF0 dXMoZGV2LCBzdGF0dXMpOwo+Pj4gKwo+Pj4gKyAgICAgaWYgKHN0YXR1cyA9PSAwKQo+Pj4gKyAg ICAgICAgICAgICB2ZHVzZV9kZXZfcmVzZXQoZGV2KTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGlj IHZvaWQgdmR1c2VfdmRwYV9nZXRfY29uZmlnKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSwgdW5z aWduZWQgaW50IG9mZnNldCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1 ZiwgdW5zaWduZWQgaW50IGxlbikKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2VfZGV2ICpk ZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+Pj4gKwo+Pj4gKyAgICAgdmR1c2VfZGV2X2dldF9j b25maWcoZGV2LCBvZmZzZXQsIGJ1ZiwgbGVuKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZv aWQgdmR1c2VfdmRwYV9zZXRfY29uZmlnKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSwgdW5zaWdu ZWQgaW50IG9mZnNldCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYs IHVuc2lnbmVkIGludCBsZW4pCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2RldiAqZGV2 ID0gdmRwYV90b192ZHVzZSh2ZHBhKTsKPj4+ICsKPj4+ICsgICAgIHZkdXNlX2Rldl9zZXRfY29u ZmlnKGRldiwgb2Zmc2V0LCBidWYsIGxlbik7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQg dmR1c2VfdmRwYV9zZXRfbWFwKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSwKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGIpCj4+PiArewo+ Pj4gKyAgICAgc3RydWN0IHZkdXNlX2RldiAqZGV2ID0gdmRwYV90b192ZHVzZSh2ZHBhKTsKPj4+ ICsgICAgIGludCByZXQ7Cj4+PiArCj4+PiArICAgICByZXQgPSB2ZHVzZV9kb21haW5fc2V0X21h cChkZXYtPmRvbWFpbiwgaW90bGIpOwo+Pj4gKyAgICAgdmR1c2VfZGV2X3VwZGF0ZV9pb3RsYihk ZXYsIDBVTEwsIFVMTE9OR19NQVgpOwo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIHJldDsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgdmR1c2VfdmRwYV9mcmVlKHN0cnVjdCB2ZHBhX2Rldmlj ZSAqdmRwYSkKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSB2ZHBhX3Rv X3ZkdXNlKHZkcGEpOwo+Pj4gKwo+Pj4gKyAgICAgV0FSTl9PTighbGlzdF9lbXB0eSgmZGV2LT5z ZW5kX2xpc3QpKTsKPj4+ICsgICAgIFdBUk5fT04oIWxpc3RfZW1wdHkoJmRldi0+cmVjdl9saXN0 KSk7Cj4+PiArICAgICBkZXYtPnZkZXYgPSBOVUxMOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IHZkcGFfY29uZmlnX29wcyB2ZHVzZV92ZHBhX2NvbmZpZ19vcHMgPSB7Cj4+ PiArICAgICAuc2V0X3ZxX2FkZHJlc3MgICAgICAgICA9IHZkdXNlX3ZkcGFfc2V0X3ZxX2FkZHJl c3MsCj4+PiArICAgICAua2lja192cSAgICAgICAgICAgICAgICA9IHZkdXNlX3ZkcGFfa2lja192 cSwKPj4+ICsgICAgIC5zZXRfdnFfY2IgICAgICAgICAgICAgID0gdmR1c2VfdmRwYV9zZXRfdnFf Y2IsCj4+PiArICAgICAuc2V0X3ZxX251bSAgICAgICAgICAgICA9IHZkdXNlX3ZkcGFfc2V0X3Zx X251bSwKPj4+ICsgICAgIC5zZXRfdnFfcmVhZHkgICAgICAgICAgID0gdmR1c2VfdmRwYV9zZXRf dnFfcmVhZHksCj4+PiArICAgICAuZ2V0X3ZxX3JlYWR5ICAgICAgICAgICA9IHZkdXNlX3ZkcGFf Z2V0X3ZxX3JlYWR5LAo+Pj4gKyAgICAgLnNldF92cV9zdGF0ZSAgICAgICAgICAgPSB2ZHVzZV92 ZHBhX3NldF92cV9zdGF0ZSwKPj4+ICsgICAgIC5nZXRfdnFfc3RhdGUgICAgICAgICAgID0gdmR1 c2VfdmRwYV9nZXRfdnFfc3RhdGUsCj4+PiArICAgICAuZ2V0X3ZxX2FsaWduICAgICAgICAgICA9 IHZkdXNlX3ZkcGFfZ2V0X3ZxX2FsaWduLAo+Pj4gKyAgICAgLmdldF9mZWF0dXJlcyAgICAgICAg ICAgPSB2ZHVzZV92ZHBhX2dldF9mZWF0dXJlcywKPj4+ICsgICAgIC5zZXRfZmVhdHVyZXMgICAg ICAgICAgID0gdmR1c2VfdmRwYV9zZXRfZmVhdHVyZXMsCj4+PiArICAgICAuc2V0X2NvbmZpZ19j YiAgICAgICAgICA9IHZkdXNlX3ZkcGFfc2V0X2NvbmZpZ19jYiwKPj4+ICsgICAgIC5nZXRfdnFf bnVtX21heCAgICAgICAgID0gdmR1c2VfdmRwYV9nZXRfdnFfbnVtX21heCwKPj4+ICsgICAgIC5n ZXRfZGV2aWNlX2lkICAgICAgICAgID0gdmR1c2VfdmRwYV9nZXRfZGV2aWNlX2lkLAo+Pj4gKyAg ICAgLmdldF92ZW5kb3JfaWQgICAgICAgICAgPSB2ZHVzZV92ZHBhX2dldF92ZW5kb3JfaWQsCj4+ PiArICAgICAuZ2V0X3N0YXR1cyAgICAgICAgICAgICA9IHZkdXNlX3ZkcGFfZ2V0X3N0YXR1cywK Pj4+ICsgICAgIC5zZXRfc3RhdHVzICAgICAgICAgICAgID0gdmR1c2VfdmRwYV9zZXRfc3RhdHVz LAo+Pj4gKyAgICAgLmdldF9jb25maWcgICAgICAgICAgICAgPSB2ZHVzZV92ZHBhX2dldF9jb25m aWcsCj4+PiArICAgICAuc2V0X2NvbmZpZyAgICAgICAgICAgICA9IHZkdXNlX3ZkcGFfc2V0X2Nv bmZpZywKPj4+ICsgICAgIC5zZXRfbWFwICAgICAgICAgICAgICAgID0gdmR1c2VfdmRwYV9zZXRf bWFwLAo+Pj4gKyAgICAgLmZyZWUgICAgICAgICAgICAgICAgICAgPSB2ZHVzZV92ZHBhX2ZyZWUs Cj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgZG1hX2FkZHJfdCB2ZHVzZV9kZXZfbWFwX3BhZ2Uo c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVj dGlvbiBkaXIsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgYXR0cnMpCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2RldiAqdmRldiA9IGRl dl90b192ZHVzZShkZXYpOwo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2lvdmFfZG9tYWluICpkb21h aW4gPSB2ZGV2LT5kb21haW47Cj4+PiArCj4+PiArICAgICByZXR1cm4gdmR1c2VfZG9tYWluX21h cF9wYWdlKGRvbWFpbiwgcGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIsIGF0dHJzKTsKPj4+ICt9Cj4+ PiArCj4+PiArc3RhdGljIHZvaWQgdmR1c2VfZGV2X3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAq ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYXR0cnMpCj4+PiArewo+Pj4gKyAg ICAgc3RydWN0IHZkdXNlX2RldiAqdmRldiA9IGRldl90b192ZHVzZShkZXYpOwo+Pj4gKyAgICAg c3RydWN0IHZkdXNlX2lvdmFfZG9tYWluICpkb21haW4gPSB2ZGV2LT5kb21haW47Cj4+PiArCj4+ PiArICAgICByZXR1cm4gdmR1c2VfZG9tYWluX3VubWFwX3BhZ2UoZG9tYWluLCBkbWFfYWRkciwg c2l6ZSwgZGlyLCBhdHRycyk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkICp2ZHVzZV9k ZXZfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1hX2FkZHJfdCAqZG1hX2FkZHIs IGdmcF90IGZsYWcsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgYXR0cnMpCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2RldiAqdmRl diA9IGRldl90b192ZHVzZShkZXYpOwo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2lvdmFfZG9tYWlu ICpkb21haW4gPSB2ZGV2LT5kb21haW47Cj4+PiArICAgICB1bnNpZ25lZCBsb25nIGlvdmE7Cj4+ PiArICAgICB2b2lkICphZGRyOwo+Pj4gKwo+Pj4gKyAgICAgKmRtYV9hZGRyID0gRE1BX01BUFBJ TkdfRVJST1I7Cj4+PiArICAgICBhZGRyID0gdmR1c2VfZG9tYWluX2FsbG9jX2NvaGVyZW50KGRv bWFpbiwgc2l6ZSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkbWFfYWRkcl90 ICopJmlvdmEsIGZsYWcsIGF0dHJzKTsKPj4+ICsgICAgIGlmICghYWRkcikKPj4+ICsgICAgICAg ICAgICAgcmV0dXJuIE5VTEw7Cj4+PiArCj4+PiArICAgICAqZG1hX2FkZHIgPSAoZG1hX2FkZHJf dClpb3ZhOwo+Pj4gKyAgICAgdmR1c2VfZGV2X3VwZGF0ZV9pb3RsYih2ZGV2LCBpb3ZhLCBpb3Zh ICsgc2l6ZSAtIDEpOwo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIGFkZHI7Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyB2b2lkIHZkdXNlX2Rldl9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRl diwgc2l6ZV90IHNpemUsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9hZGRyLAo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGF0dHJzKQo+Pj4gK3sKPj4+ICsgICAg IHN0cnVjdCB2ZHVzZV9kZXYgKnZkZXYgPSBkZXZfdG9fdmR1c2UoZGV2KTsKPj4+ICsgICAgIHN0 cnVjdCB2ZHVzZV9pb3ZhX2RvbWFpbiAqZG9tYWluID0gdmRldi0+ZG9tYWluOwo+Pj4gKyAgICAg dW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKWRtYV9hZGRyOwo+Pj4gKyAgICAg dW5zaWduZWQgbG9uZyBsYXN0ID0gc3RhcnQgKyBzaXplIC0gMTsKPj4+ICsKPj4+ICsgICAgIHZk dXNlX2RvbWFpbl9mcmVlX2NvaGVyZW50KGRvbWFpbiwgc2l6ZSwgdmFkZHIsIGRtYV9hZGRyLCBh dHRycyk7Cj4+PiArICAgICB2ZHVzZV9kZXZfdXBkYXRlX2lvdGxiKHZkZXYsIHN0YXJ0LCBsYXN0 KTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyB2ZHVz ZV9kZXZfZG1hX29wcyA9IHsKPj4+ICsgICAgIC5tYXBfcGFnZSA9IHZkdXNlX2Rldl9tYXBfcGFn ZSwKPj4+ICsgICAgIC51bm1hcF9wYWdlID0gdmR1c2VfZGV2X3VubWFwX3BhZ2UsCj4+PiArICAg ICAuYWxsb2MgPSB2ZHVzZV9kZXZfYWxsb2NfY29oZXJlbnQsCj4+PiArICAgICAuZnJlZSA9IHZk dXNlX2Rldl9mcmVlX2NvaGVyZW50LAo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIHVuc2lnbmVk IGludCBwZXJtX3RvX2ZpbGVfZmxhZ3ModTggcGVybSkKPj4+ICt7Cj4+PiArICAgICB1bnNpZ25l ZCBpbnQgZmxhZ3MgPSAwOwo+Pj4gKwo+Pj4gKyAgICAgc3dpdGNoIChwZXJtKSB7Cj4+PiArICAg ICBjYXNlIFZEVVNFX0FDQ0VTU19XTzoKPj4+ICsgICAgICAgICAgICAgZmxhZ3MgfD0gT19XUk9O TFk7Cj4+PiArICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKyAgICAgY2FzZSBWRFVTRV9BQ0NFU1Nf Uk86Cj4+PiArICAgICAgICAgICAgIGZsYWdzIHw9IE9fUkRPTkxZOwo+Pj4gKyAgICAgICAgICAg ICBicmVhazsKPj4+ICsgICAgIGNhc2UgVkRVU0VfQUNDRVNTX1JXOgo+Pj4gKyAgICAgICAgICAg ICBmbGFncyB8PSBPX1JEV1I7Cj4+PiArICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKyAgICAgZGVm YXVsdDoKPj4+ICsgICAgICAgICAgICAgV0FSTigxLCAiaW52YWxpZGF0ZSB2aG9zdCBJT1RMQiBw ZXJtaXNzaW9uXG4iKTsKPj4+ICsgICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICB9Cj4+PiAr Cj4+PiArICAgICByZXR1cm4gZmxhZ3M7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgdmR1 c2Vfa2lja2ZkX3NldHVwKHN0cnVjdCB2ZHVzZV9kZXYgKmRldiwKPj4+ICsgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgdmR1c2VfdnFfZXZlbnRmZCAqZXZlbnRmZCkKPj4+ICt7Cj4+PiArICAg ICBzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCA9IE5VTEw7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2Vf dmlydHF1ZXVlICp2cTsKPj4+ICsKPj4+ICsgICAgIGlmIChldmVudGZkLT5pbmRleCA+PSBkZXYt PnZxX251bSkKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArCj4+PiArICAg ICB2cSA9ICZkZXYtPnZxc1tldmVudGZkLT5pbmRleF07Cj4+PiArICAgICBpZiAoZXZlbnRmZC0+ ZmQgPiAwKSB7Cj4+PiArICAgICAgICAgICAgIGN0eCA9IGV2ZW50ZmRfY3R4X2ZkZ2V0KGV2ZW50 ZmQtPmZkKTsKPj4+ICsgICAgICAgICAgICAgaWYgKElTX0VSUihjdHgpKQo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGN0eCk7Cj4+PiArICAgICB9IGVsc2UgaWYgKGV2 ZW50ZmQtPmZkICE9IFZEVVNFX0VWRU5URkRfREVBU1NJR04pCj4+PiArICAgICAgICAgICAgIHJl dHVybiAwOwo+Pgo+PiBEbyB3ZSBhbGxvdyB0aGUgdXNlcnNwYWNlIHRvIHN3aXRjaCBraWNrZmQg aGVyZT8gSWYgeWVzLCB3ZSBuZWVkIHRvIGRlYWwKPj4gd2l0aCB0aGF0Lgo+Pgo+IERvIHlvdSBt ZWFuIHRoZSBjYXNlIHRoYXQgZXZlbnRmZC0+ZmQgPiAwPyBJIHRoaW5rIHdlIGhhdmUgZGVhbHQg d2l0aCBpdC4KCgpPaywgYnV0IHRoZSBhYm92ZSBjb2RlIHN0aWxsIGxvb2tzIHN1c3BpY2lvdXMu IEUuZyB3aGF0IGhhcHBlbnMgaWYgCmV2ZW50ZmQtPmZkIGlzIDA/CgoKPgo+Pj4gKwo+Pj4gKyAg ICAgc3Bpbl9sb2NrKCZ2cS0+a2lja19sb2NrKTsKPj4+ICsgICAgIGlmICh2cS0+a2lja2ZkKQo+ Pj4gKyAgICAgICAgICAgICBldmVudGZkX2N0eF9wdXQodnEtPmtpY2tmZCk7Cj4+PiArICAgICB2 cS0+a2lja2ZkID0gY3R4Owo+Pj4gKyAgICAgc3Bpbl91bmxvY2soJnZxLT5raWNrX2xvY2spOwo+ Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHZk dXNlX3ZxX2lycV9pbmplY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+Pj4gK3sKPj4+ICsg ICAgIHN0cnVjdCB2ZHVzZV92aXJ0cXVldWUgKnZxID0gY29udGFpbmVyX29mKHdvcmssCj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2ZHVzZV92aXJ0cXVl dWUsIGluamVjdCk7Cj4+PiArCj4+PiArICAgICBzcGluX2xvY2tfaXJxKCZ2cS0+aXJxX2xvY2sp Owo+Pj4gKyAgICAgaWYgKHZxLT5yZWFkeSAmJiB2cS0+Y2IuY2FsbGJhY2spCj4+PiArICAgICAg ICAgICAgIHZxLT5jYi5jYWxsYmFjayh2cS0+Y2IucHJpdmF0ZSk7Cj4+PiArICAgICBzcGluX3Vu bG9ja19pcnEoJnZxLT5pcnFfbG9jayk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBsb25nIHZk dXNlX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCj4+PiArewo+Pj4gKyAg ICAgc3RydWN0IHZkdXNlX2RldiAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+Pj4gKyAgICAg dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Cj4+PiArICAgICBpbnQgcmV0 Owo+Pj4gKwo+Pj4gKyAgICAgc3dpdGNoIChjbWQpIHsKPj4+ICsgICAgIGNhc2UgVkRVU0VfSU9U TEJfR0VUX0ZEOiB7Cj4+PiArICAgICAgICAgICAgIHN0cnVjdCB2ZHVzZV9pb3RsYl9lbnRyeSBl bnRyeTsKPj4+ICsgICAgICAgICAgICAgc3RydWN0IHZob3N0X2lvdGxiX21hcCAqbWFwOwo+Pj4g KyAgICAgICAgICAgICBzdHJ1Y3QgdmRwYV9tYXBfZmlsZSAqbWFwX2ZpbGU7Cj4+PiArICAgICAg ICAgICAgIHN0cnVjdCB2ZHVzZV9pb3ZhX2RvbWFpbiAqZG9tYWluID0gZGV2LT5kb21haW47Cj4+ PiArICAgICAgICAgICAgIHN0cnVjdCBmaWxlICpmID0gTlVMTDsKPj4+ICsKPj4+ICsgICAgICAg ICAgICAgcmV0ID0gLUVGQVVMVDsKPj4+ICsgICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2Vy KCZlbnRyeSwgYXJncCwgc2l6ZW9mKGVudHJ5KSkpCj4+PiArICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Cj4+PiArCj4+PiArICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7Cj4+PiArICAgICAg ICAgICAgIGlmIChlbnRyeS5zdGFydCA+IGVudHJ5Lmxhc3QpCj4+PiArICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Cj4+PiArCj4+PiArICAgICAgICAgICAgIHNwaW5fbG9jaygmZG9tYWluLT5p b3RsYl9sb2NrKTsKPj4+ICsgICAgICAgICAgICAgbWFwID0gdmhvc3RfaW90bGJfaXRyZWVfZmly c3QoZG9tYWluLT5pb3RsYiwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZW50cnkuc3RhcnQsIGVudHJ5Lmxhc3QpOwo+Pj4gKyAgICAgICAgICAgICBpZiAo bWFwKSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgbWFwX2ZpbGUgPSAoc3RydWN0IHZkcGFf bWFwX2ZpbGUgKiltYXAtPm9wYXF1ZTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBmID0gZ2V0 X2ZpbGUobWFwX2ZpbGUtPmZpbGUpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGVudHJ5Lm9m ZnNldCA9IG1hcF9maWxlLT5vZmZzZXQ7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgZW50cnku c3RhcnQgPSBtYXAtPnN0YXJ0Owo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGVudHJ5Lmxhc3Qg PSBtYXAtPmxhc3Q7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgZW50cnkucGVybSA9IG1hcC0+ cGVybTsKPj4+ICsgICAgICAgICAgICAgfQo+Pj4gKyAgICAgICAgICAgICBzcGluX3VubG9jaygm ZG9tYWluLT5pb3RsYl9sb2NrKTsKPj4+ICsgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKPj4+ ICsgICAgICAgICAgICAgaWYgKCFmKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ Pj4gKwo+Pj4gKyAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwo+Pj4gKyAgICAgICAgICAgICBp ZiAoY29weV90b191c2VyKGFyZ3AsICZlbnRyeSwgc2l6ZW9mKGVudHJ5KSkpIHsKPj4+ICsgICAg ICAgICAgICAgICAgICAgICBmcHV0KGYpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFr Owo+Pj4gKyAgICAgICAgICAgICB9Cj4+PiArICAgICAgICAgICAgIHJldCA9IHJlY2VpdmVfZmQo ZiwgcGVybV90b19maWxlX2ZsYWdzKGVudHJ5LnBlcm0pKTsKPj4+ICsgICAgICAgICAgICAgZnB1 dChmKTsKPj4KPj4gQW55IHJlYXNvbiB0byBkcm9wIHRoZSByZWZjbnQgaGVyZT8KPj4KPiBXZSB3 aWxsIGRvIGdldF9maWxlKCkgaW4gcmVjZWl2ZV9mZCgpIHRvby4KCgpJIHNlZS4KCgo+Cj4+PiAr ICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKyAgICAgfQo+Pj4gKyAgICAgY2FzZSBWRFVTRV9WUV9T RVRVUF9LSUNLRkQ6IHsKPj4+ICsgICAgICAgICAgICAgc3RydWN0IHZkdXNlX3ZxX2V2ZW50ZmQg ZXZlbnRmZDsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKPj4+ICsgICAg ICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZldmVudGZkLCBhcmdwLCBzaXplb2YoZXZlbnRm ZCkpKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKwo+Pj4gKyAgICAgICAg ICAgICByZXQgPSB2ZHVzZV9raWNrZmRfc2V0dXAoZGV2LCAmZXZlbnRmZCk7Cj4+PiArICAgICAg ICAgICAgIGJyZWFrOwo+Pj4gKyAgICAgfQo+Pj4gKyAgICAgY2FzZSBWRFVTRV9JTkpFQ1RfVlFf SVJROgo+Pj4gKyAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwo+Pj4gKyAgICAgICAgICAgICBp ZiAoYXJnID49IGRldi0+dnFfbnVtKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ Pj4gKwo+Pj4gKyAgICAgICAgICAgICByZXQgPSAwOwo+Pj4gKyAgICAgICAgICAgICBxdWV1ZV93 b3JrKHZkdXNlX2lycV93cSwgJmRldi0+dnFzW2FyZ10uaW5qZWN0KTsKPj4+ICsgICAgICAgICAg ICAgYnJlYWs7Cj4+PiArICAgICBjYXNlIFZEVVNFX0lOSkVDVF9DT05GSUdfSVJROgo+Pj4gKyAg ICAgICAgICAgICByZXQgPSAtRUlOVkFMOwo+Pj4gKyAgICAgICAgICAgICBzcGluX2xvY2tfaXJx KCZkZXYtPmlycV9sb2NrKTsKPj4+ICsgICAgICAgICAgICAgaWYgKGRldi0+Y29uZmlnX2NiLmNh bGxiYWNrKSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgZGV2LT5jb25maWdfY2IuY2FsbGJh Y2soZGV2LT5jb25maWdfY2IucHJpdmF0ZSk7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0 ID0gMDsKPj4+ICsgICAgICAgICAgICAgfQo+Pj4gKyAgICAgICAgICAgICBzcGluX3VubG9ja19p cnEoJmRldi0+aXJxX2xvY2spOwo+Pgo+PiBGb3IgY29uc2lzdGVuY3ksIGlzIGl0IGJldHRlciB0 byB1c2UgdmR1c2VfaXJxX3dxIGhlcmU/Cj4+Cj4gTG9va3MgZ29vZCB0byBtZS4KPgo+Pj4gKyAg ICAgICAgICAgICBicmVhazsKPj4+ICsgICAgIGRlZmF1bHQ6Cj4+PiArICAgICAgICAgICAgIHJl dCA9IC1FTk9JT0NUTENNRDsKPj4+ICsgICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICB9Cj4+ PiArCj4+PiArICAgICByZXR1cm4gcmV0Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHZk dXNlX2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQo+ Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0 YTsKPj4+ICsgICAgIHN0cnVjdCB2ZHVzZV9kZXZfbXNnICptc2c7Cj4+PiArICAgICBpbnQgaTsK Pj4+ICsKPj4+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBkZXYtPnZxX251bTsgaSsrKSB7Cj4+PiAr ICAgICAgICAgICAgIHN0cnVjdCB2ZHVzZV92aXJ0cXVldWUgKnZxID0gJmRldi0+dnFzW2ldOwo+ Pj4gKwo+Pj4gKyAgICAgICAgICAgICBzcGluX2xvY2soJnZxLT5raWNrX2xvY2spOwo+Pj4gKyAg ICAgICAgICAgICBpZiAodnEtPmtpY2tmZCkKPj4+ICsgICAgICAgICAgICAgICAgICAgICBldmVu dGZkX2N0eF9wdXQodnEtPmtpY2tmZCk7Cj4+PiArICAgICAgICAgICAgIHZxLT5raWNrZmQgPSBO VUxMOwo+Pj4gKyAgICAgICAgICAgICBzcGluX3VubG9jaygmdnEtPmtpY2tfbG9jayk7Cj4+PiAr ICAgICB9Cj4+PiArCj4+PiArICAgICBzcGluX2xvY2soJmRldi0+bXNnX2xvY2spOwo+Pj4gKyAg ICAgLyogIE1ha2Ugc3VyZSB0aGUgaW5mbGlnaHQgbWVzc2FnZXMgY2FuIHByb2Nlc3NlZCAqLwo+ Pgo+PiBUaGlzIG1pZ2h0IGJlIGJldHRlcjoKPj4KPj4gLyogIE1ha2Ugc3VyZSB0aGUgaW5mbGln aHQgbWVzc2FnZXMgY2FuIHByb2Nlc3NlZCBhZnRlciByZWNvbm5jZWN0aW9uICovCj4+Cj4gT0su Cj4KPj4+ICsgICAgIHdoaWxlICgobXNnID0gdmR1c2VfZGVxdWV1ZV9tc2coJmRldi0+cmVjdl9s aXN0KSkpCj4+PiArICAgICAgICAgICAgIHZkdXNlX2VucXVldWVfbXNnKCZkZXYtPnNlbmRfbGlz dCwgbXNnKTsKPj4+ICsgICAgIHNwaW5fdW5sb2NrKCZkZXYtPm1zZ19sb2NrKTsKPj4+ICsKPj4+ ICsgICAgIGRldi0+Y29ubmVjdGVkID0gZmFsc2U7Cj4+PiArCj4+PiArICAgICByZXR1cm4gMDsK Pj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCB2ZHVzZV9kZXZfb3BlbihzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2Vf ZGV2ICpkZXYgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2RldiwKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZkdXNlX2RldiwgY2Rldik7Cj4+PiArICAg ICBpbnQgcmV0ID0gLUVCVVNZOwo+Pj4gKwo+Pj4gKyAgICAgbXV0ZXhfbG9jaygmZGV2LT5sb2Nr KTsKPj4+ICsgICAgIGlmIChkZXYtPmNvbm5lY3RlZCkKPj4+ICsgICAgICAgICAgICAgZ290byB1 bmxvY2s7Cj4+PiArCj4+PiArICAgICByZXQgPSAwOwo+Pj4gKyAgICAgZGV2LT5jb25uZWN0ZWQg PSB0cnVlOwo+Pj4gKyAgICAgZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2Owo+Pj4gK3VubG9jazoK Pj4+ICsgICAgIG11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKPj4+ICsKPj4+ICsgICAgIHJldHVy biByZXQ7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHZkdXNlX2Rldl9mb3BzID0gewo+Pj4gKyAgICAgLm93bmVyICAgICAgICAgID0gVEhJU19N T0RVTEUsCj4+PiArICAgICAub3BlbiAgICAgICAgICAgPSB2ZHVzZV9kZXZfb3BlbiwKPj4+ICsg ICAgIC5yZWxlYXNlICAgICAgICA9IHZkdXNlX2Rldl9yZWxlYXNlLAo+Pj4gKyAgICAgLnJlYWRf aXRlciAgICAgID0gdmR1c2VfZGV2X3JlYWRfaXRlciwKPj4+ICsgICAgIC53cml0ZV9pdGVyICAg ICA9IHZkdXNlX2Rldl93cml0ZV9pdGVyLAo+Pj4gKyAgICAgLnBvbGwgICAgICAgICAgID0gdmR1 c2VfZGV2X3BvbGwsCj4+PiArICAgICAudW5sb2NrZWRfaW9jdGwgPSB2ZHVzZV9kZXZfaW9jdGws Cj4+PiArICAgICAuY29tcGF0X2lvY3RsICAgPSBjb21wYXRfcHRyX2lvY3RsLAo+Pj4gKyAgICAg Lmxsc2VlayAgICAgICAgID0gbm9vcF9sbHNlZWssCj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMg c3RydWN0IHZkdXNlX2RldiAqdmR1c2VfZGV2X2NyZWF0ZSh2b2lkKQo+Pj4gK3sKPj4+ICsgICAg IHN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVM KTsKPj4+ICsKPj4+ICsgICAgIGlmICghZGV2KQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gTlVM TDsKPj4+ICsKPj4+ICsgICAgIG11dGV4X2luaXQoJmRldi0+bG9jayk7Cj4+PiArICAgICBzcGlu X2xvY2tfaW5pdCgmZGV2LT5tc2dfbG9jayk7Cj4+PiArICAgICBJTklUX0xJU1RfSEVBRCgmZGV2 LT5zZW5kX2xpc3QpOwo+Pj4gKyAgICAgSU5JVF9MSVNUX0hFQUQoJmRldi0+cmVjdl9saXN0KTsK Pj4+ICsgICAgIGF0b21pYzY0X3NldCgmZGV2LT5tc2dfdW5pcXVlLCAwKTsKPj4+ICsgICAgIHNw aW5fbG9ja19pbml0KCZkZXYtPmlycV9sb2NrKTsKPj4+ICsKPj4+ICsgICAgIGluaXRfd2FpdHF1 ZXVlX2hlYWQoJmRldi0+d2FpdHEpOwo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIGRldjsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgdmR1c2VfZGV2X2Rlc3Ryb3koc3RydWN0IHZkdXNlX2Rl diAqZGV2KQo+Pj4gK3sKPj4+ICsgICAgIGtmcmVlKGRldik7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0 YXRpYyBzdHJ1Y3QgdmR1c2VfZGV2ICp2ZHVzZV9maW5kX2Rldihjb25zdCBjaGFyICpuYW1lKQo+ Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB2ZHVzZV9kZXYgKnRtcCwgKmRldiA9IE5VTEw7Cj4+PiAr Cj4+PiArICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJnZkdXNlX2RldnMsIGxpc3QpIHsK Pj4+ICsgICAgICAgICAgICAgaWYgKCFzdHJjbXAoZGV2X25hbWUoJnRtcC0+ZGV2KSwgbmFtZSkp IHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBkZXYgPSB0bXA7Cj4+PiArICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgICAgICAgIH0KPj4+ICsgICAgIH0KPj4+ICsgICAg IHJldHVybiBkZXY7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgdmR1c2VfZGVzdHJveV9k ZXYoY2hhciAqbmFtZSkKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSB2 ZHVzZV9maW5kX2RldihuYW1lKTsKPj4+ICsKPj4+ICsgICAgIGlmICghZGV2KQo+Pj4gKyAgICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+ICsKPj4+ICsgICAgIG11dGV4X2xvY2soJmRldi0+ bG9jayk7Cj4+PiArICAgICBpZiAoZGV2LT52ZGV2IHx8IGRldi0+Y29ubmVjdGVkKSB7Cj4+PiAr ICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKPj4+ICsgICAgICAgICAgICAg cmV0dXJuIC1FQlVTWTsKPj4+ICsgICAgIH0KPj4+ICsgICAgIGRldi0+Y29ubmVjdGVkID0gdHJ1 ZTsKPj4+ICsgICAgIG11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKPj4+ICsKPj4+ICsgICAgIGxp c3RfZGVsKCZkZXYtPmxpc3QpOwo+Pj4gKyAgICAgY2Rldl9kZXZpY2VfZGVsKCZkZXYtPmNkZXYs ICZkZXYtPmRldik7Cj4+PiArICAgICBwdXRfZGV2aWNlKCZkZXYtPmRldik7Cj4+PiArICAgICBt b2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKPj4+ICsKPj4+ICsgICAgIHJldHVybiAwOwo+Pj4gK30K Pj4+ICsKPj4+ICtzdGF0aWMgdm9pZCB2ZHVzZV9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICpk ZXZpY2UpCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IHZkdXNlX2RldiAqZGV2ID0KPj4+ICsgICAg ICAgICAgICAgY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IHZkdXNlX2RldiwgZGV2KTsKPj4+ ICsKPj4+ICsgICAgIGlkYV9zaW1wbGVfcmVtb3ZlKCZ2ZHVzZV9pZGEsIGRldi0+bWlub3IpOwo+ Pj4gKyAgICAga2ZyZWUoZGV2LT52cXMpOwo+Pj4gKyAgICAgdmR1c2VfZG9tYWluX2Rlc3Ryb3ko ZGV2LT5kb21haW4pOwo+Pj4gKyAgICAgdmR1c2VfZGV2X2Rlc3Ryb3koZGV2KTsKPj4+ICt9Cj4+ PiArCj4+PiArc3RhdGljIGludCB2ZHVzZV9jcmVhdGVfZGV2KHN0cnVjdCB2ZHVzZV9kZXZfY29u ZmlnICpjb25maWcsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg YXBpX3ZlcnNpb24pCj4+PiArewo+Pj4gKyAgICAgaW50IGksIHJldCA9IC1FTk9NRU07Cj4+PiAr ICAgICBzdHJ1Y3QgdmR1c2VfZGV2ICpkZXY7Cj4+PiArCj4+PiArICAgICBpZiAoY29uZmlnLT5i b3VuY2Vfc2l6ZSA+IG1heF9ib3VuY2Vfc2l6ZSkKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7Cj4+PiArCj4+PiArICAgICBpZiAoY29uZmlnLT5ib3VuY2Vfc2l6ZSA+IG1heF9pb3Zh X3NpemUpCj4+PiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gKyAgICAg aWYgKHZkdXNlX2ZpbmRfZGV2KGNvbmZpZy0+bmFtZSkpCj4+PiArICAgICAgICAgICAgIHJldHVy biAtRUVYSVNUOwo+Pj4gKwo+Pj4gKyAgICAgZGV2ID0gdmR1c2VfZGV2X2NyZWF0ZSgpOwo+Pj4g KyAgICAgaWYgKCFkZXYpCj4+PiArICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+Pj4gKwo+ Pj4gKyAgICAgZGV2LT5hcGlfdmVyc2lvbiA9IGFwaV92ZXJzaW9uOwo+Pj4gKyAgICAgZGV2LT5k ZXZpY2VfaWQgPSBjb25maWctPmRldmljZV9pZDsKPj4+ICsgICAgIGRldi0+dmVuZG9yX2lkID0g Y29uZmlnLT52ZW5kb3JfaWQ7Cj4+PiArICAgICBkZXYtPmRvbWFpbiA9IHZkdXNlX2RvbWFpbl9j cmVhdGUobWF4X2lvdmFfc2l6ZSAtIDEsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbmZpZy0+Ym91bmNlX3NpemUpOwo+Pj4gKyAgICAgaWYgKCFkZXYtPmRvbWFp bikKPj4+ICsgICAgICAgICAgICAgZ290byBlcnJfZG9tYWluOwo+Pj4gKwo+Pj4gKyAgICAgZGV2 LT52cV9hbGlnbiA9IGNvbmZpZy0+dnFfYWxpZ247Cj4+PiArICAgICBkZXYtPnZxX3NpemVfbWF4 ID0gY29uZmlnLT52cV9zaXplX21heDsKPj4+ICsgICAgIGRldi0+dnFfbnVtID0gY29uZmlnLT52 cV9udW07Cj4+PiArICAgICBkZXYtPnZxcyA9IGtjYWxsb2MoZGV2LT52cV9udW0sIHNpemVvZigq ZGV2LT52cXMpLCBHRlBfS0VSTkVMKTsKPj4+ICsgICAgIGlmICghZGV2LT52cXMpCj4+PiArICAg ICAgICAgICAgIGdvdG8gZXJyX3ZxczsKPj4+ICsKPj4+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBk ZXYtPnZxX251bTsgaSsrKSB7Cj4+PiArICAgICAgICAgICAgIGRldi0+dnFzW2ldLmluZGV4ID0g aTsKPj4+ICsgICAgICAgICAgICAgSU5JVF9XT1JLKCZkZXYtPnZxc1tpXS5pbmplY3QsIHZkdXNl X3ZxX2lycV9pbmplY3QpOwo+Pj4gKyAgICAgICAgICAgICBzcGluX2xvY2tfaW5pdCgmZGV2LT52 cXNbaV0ua2lja19sb2NrKTsKPj4+ICsgICAgICAgICAgICAgc3Bpbl9sb2NrX2luaXQoJmRldi0+ dnFzW2ldLmlycV9sb2NrKTsKPj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIHJldCA9IGlkYV9z aW1wbGVfZ2V0KCZ2ZHVzZV9pZGEsIDAsIFZEVVNFX0RFVl9NQVgsIEdGUF9LRVJORUwpOwo+Pj4g KyAgICAgaWYgKHJldCA8IDApCj4+PiArICAgICAgICAgICAgIGdvdG8gZXJyX2lkYTsKPj4+ICsK Pj4+ICsgICAgIGRldi0+bWlub3IgPSByZXQ7Cj4+PiArICAgICBkZXZpY2VfaW5pdGlhbGl6ZSgm ZGV2LT5kZXYpOwo+Pj4gKyAgICAgZGV2LT5kZXYucmVsZWFzZSA9IHZkdXNlX3JlbGVhc2VfZGV2 Owo+Pj4gKyAgICAgZGV2LT5kZXYuY2xhc3MgPSB2ZHVzZV9jbGFzczsKPj4+ICsgICAgIGRldi0+ ZGV2LmRldnQgPSBNS0RFVihNQUpPUih2ZHVzZV9tYWpvciksIGRldi0+bWlub3IpOwo+Pj4gKyAg ICAgcmV0ID0gZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgIiVzIiwgY29uZmlnLT5uYW1lKTsKPj4+ ICsgICAgIGlmIChyZXQpIHsKPj4+ICsgICAgICAgICAgICAgcHV0X2RldmljZSgmZGV2LT5kZXYp Owo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Owo+Pj4gKyAgICAgfQo+Pj4gKyAgICAgY2Rl dl9pbml0KCZkZXYtPmNkZXYsICZ2ZHVzZV9kZXZfZm9wcyk7Cj4+PiArICAgICBkZXYtPmNkZXYu b3duZXIgPSBUSElTX01PRFVMRTsKPj4+ICsKPj4+ICsgICAgIHJldCA9IGNkZXZfZGV2aWNlX2Fk ZCgmZGV2LT5jZGV2LCAmZGV2LT5kZXYpOwo+Pj4gKyAgICAgaWYgKHJldCkgewo+Pj4gKyAgICAg ICAgICAgICBwdXRfZGV2aWNlKCZkZXYtPmRldik7Cj4+PiArICAgICAgICAgICAgIHJldHVybiBy ZXQ7Cj4+Cj4+IExldCdzIGludHJvZHVjZSBhbiBlcnJvciBsYWJlbCBmb3IgdGhpcy4KPj4KPiBC dXQgcHV0X2RldmljZSgpIHdvdWxkIGJlIGR1cGxpY2F0ZWQgd2l0aCB0aGUgYmVsb3cgZXJyb3Ig aGFuZGxpbmcuCgoKSSB0aGluayBpdCdzIGFzIHNpbXBsZSBhcyBwdXQgdGhlIGVycm9yIGxhYmVs IGFmdGVyIHRoZSByZXR1cm4uCgoKPgo+Pj4gKyAgICAgfQo+Pj4gKyAgICAgbGlzdF9hZGQoJmRl di0+bGlzdCwgJnZkdXNlX2RldnMpOwo+Pj4gKyAgICAgX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxF KTsKPj4+ICsKPj4+ICsgICAgIHJldHVybiAwOwo+Pj4gK2Vycl9pZGE6Cj4+PiArICAgICBrZnJl ZShkZXYtPnZxcyk7Cj4+PiArZXJyX3ZxczoKPj4+ICsgICAgIHZkdXNlX2RvbWFpbl9kZXN0cm95 KGRldi0+ZG9tYWluKTsKPj4+ICtlcnJfZG9tYWluOgo+Pj4gKyAgICAgdmR1c2VfZGV2X2Rlc3Ry b3koZGV2KTsKPj4+ICsgICAgIHJldHVybiByZXQ7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBs b25nIHZkdXNlX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAo+Pj4g KyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQo+Pj4gK3sKPj4+ICsgICAg IGludCByZXQ7Cj4+PiArICAgICB2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFy ZzsKPj4+ICsgICAgIHN0cnVjdCB2ZHVzZV9jb250cm9sICpjb250cm9sID0gZmlsZS0+cHJpdmF0 ZV9kYXRhOwo+Pj4gKwo+Pj4gKyAgICAgbXV0ZXhfbG9jaygmdmR1c2VfbG9jayk7Cj4+PiArICAg ICBzd2l0Y2ggKGNtZCkgewo+Pj4gKyAgICAgY2FzZSBWRFVTRV9HRVRfQVBJX1ZFUlNJT046Cj4+ PiArICAgICAgICAgICAgIHJldCA9IGNvbnRyb2wtPmFwaV92ZXJzaW9uOwo+Pj4gKyAgICAgICAg ICAgICBicmVhazsKPj4+ICsgICAgIGNhc2UgVkRVU0VfU0VUX0FQSV9WRVJTSU9OOgo+Pj4gKyAg ICAgICAgICAgICByZXQgPSAtRUlOVkFMOwo+Pj4gKyAgICAgICAgICAgICBpZiAoYXJnID4gVkRV U0VfQVBJX1ZFUlNJT04pCj4+PiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiArCj4+ PiArICAgICAgICAgICAgIHJldCA9IDA7Cj4+PiArICAgICAgICAgICAgIGNvbnRyb2wtPmFwaV92 ZXJzaW9uID0gYXJnOwo+Pj4gKyAgICAgICAgICAgICBicmVhazsKPj4+ICsgICAgIGNhc2UgVkRV U0VfQ1JFQVRFX0RFVjogewo+Pj4gKyAgICAgICAgICAgICBzdHJ1Y3QgdmR1c2VfZGV2X2NvbmZp ZyBjb25maWc7Cj4+PiArCj4+PiArICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Cj4+PiArICAg ICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmY29uZmlnLCBhcmdwLCBzaXplb2YoY29uZmln KSkpCj4+PiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiArCj4+PiArICAgICAgICAg ICAgIHJldCA9IHZkdXNlX2NyZWF0ZV9kZXYoJmNvbmZpZywgY29udHJvbC0+YXBpX3ZlcnNpb24p Owo+Pj4gKyAgICAgICAgICAgICBicmVhazsKPj4+ICsgICAgIH0KPj4+ICsgICAgIGNhc2UgVkRV U0VfREVTVFJPWV9ERVY6IHsKPj4+ICsgICAgICAgICAgICAgY2hhciBuYW1lW1ZEVVNFX05BTUVf TUFYXTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKPj4+ICsgICAgICAg ICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKG5hbWUsIGFyZ3AsIFZEVVNFX05BTUVfTUFYKSkKPj4+ ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgcmV0 ID0gdmR1c2VfZGVzdHJveV9kZXYobmFtZSk7Cj4+PiArICAgICAgICAgICAgIGJyZWFrOwo+Pj4g KyAgICAgfQo+Pj4gKyAgICAgZGVmYXVsdDoKPj4+ICsgICAgICAgICAgICAgcmV0ID0gLUVJTlZB TDsKPj4+ICsgICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICB9Cj4+PiArICAgICBtdXRleF91 bmxvY2soJnZkdXNlX2xvY2spOwo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIHJldDsKPj4+ICt9Cj4+ PiArCj4+PiArc3RhdGljIGludCB2ZHVzZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0 cnVjdCBmaWxlICpmaWxlKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB2ZHVzZV9jb250cm9sICpj b250cm9sID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+Pj4gKwo+Pj4gKyAgICAga2ZyZWUoY29udHJv bCk7Cj4+PiArICAgICByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCB2ZHVz ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQo+Pj4gK3sKPj4+ ICsgICAgIHN0cnVjdCB2ZHVzZV9jb250cm9sICpjb250cm9sOwo+Pj4gKwo+Pj4gKyAgICAgY29u dHJvbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2ZHVzZV9jb250cm9sKSwgR0ZQX0tFUk5FTCk7 Cj4+PiArICAgICBpZiAoIWNvbnRyb2wpCj4+PiArICAgICAgICAgICAgIHJldHVybiAtRU5PTUVN Owo+Pj4gKwo+Pj4gKyAgICAgY29udHJvbC0+YXBpX3ZlcnNpb24gPSBWRFVTRV9BUElfVkVSU0lP TjsKPj4+ICsgICAgIGZpbGUtPnByaXZhdGVfZGF0YSA9IGNvbnRyb2w7Cj4+PiArCj4+PiArICAg ICByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29w ZXJhdGlvbnMgdmR1c2VfZm9wcyA9IHsKPj4+ICsgICAgIC5vd25lciAgICAgICAgICA9IFRISVNf TU9EVUxFLAo+Pj4gKyAgICAgLm9wZW4gICAgICAgICAgID0gdmR1c2Vfb3BlbiwKPj4+ICsgICAg IC5yZWxlYXNlICAgICAgICA9IHZkdXNlX3JlbGVhc2UsCj4+PiArICAgICAudW5sb2NrZWRfaW9j dGwgPSB2ZHVzZV9pb2N0bCwKPj4+ICsgICAgIC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJf aW9jdGwsCj4+PiArICAgICAubGxzZWVrICAgICAgICAgPSBub29wX2xsc2VlaywKPj4+ICt9Owo+ Pj4gKwo+Pj4gK3N0YXRpYyBjaGFyICp2ZHVzZV9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwg dW1vZGVfdCAqbW9kZSkKPj4+ICt7Cj4+PiArICAgICByZXR1cm4ga2FzcHJpbnRmKEdGUF9LRVJO RUwsICJ2ZHVzZS8lcyIsIGRldl9uYW1lKGRldikpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg c3RydWN0IG1pc2NkZXZpY2UgdmR1c2VfbWlzYyA9IHsKPj4+ICsgICAgIC5mb3BzID0gJnZkdXNl X2ZvcHMsCj4+PiArICAgICAubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1IsCj4+PiArICAgICAu bmFtZSA9ICJ2ZHVzZSIsCj4+PiArICAgICAubm9kZW5hbWUgPSAidmR1c2UvY29udHJvbCIsCj4+ PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCB2ZHVzZV9tZ210ZGV2X3JlbGVhc2Uoc3RydWN0 IGRldmljZSAqZGV2KQo+Pj4gK3sKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBkZXZp Y2UgdmR1c2VfbWdtdGRldiA9IHsKPj4+ICsgICAgIC5pbml0X25hbWUgPSAidmR1c2UiLAo+Pj4g KyAgICAgLnJlbGVhc2UgPSB2ZHVzZV9tZ210ZGV2X3JlbGVhc2UsCj4+PiArfTsKPj4+ICsKPj4+ ICtzdGF0aWMgc3RydWN0IHZkcGFfbWdtdF9kZXYgbWdtdF9kZXY7Cj4+PiArCj4+PiArc3RhdGlj IGludCB2ZHVzZV9kZXZfaW5pdF92ZHBhKHN0cnVjdCB2ZHVzZV9kZXYgKmRldiwgY29uc3QgY2hh ciAqbmFtZSkKPj4+ICt7Cj4+PiArICAgICBzdHJ1Y3QgdmR1c2VfdmRwYSAqdmRldjsKPj4+ICsg ICAgIGludCByZXQ7Cj4+PiArCj4+PiArICAgICBpZiAoZGV2LT52ZGV2KQo+Pj4gKyAgICAgICAg ICAgICByZXR1cm4gLUVFWElTVDsKPj4+ICsKPj4+ICsgICAgIHZkZXYgPSB2ZHBhX2FsbG9jX2Rl dmljZShzdHJ1Y3QgdmR1c2VfdmRwYSwgdmRwYSwgJmRldi0+ZGV2LAo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ2ZHVzZV92ZHBhX2NvbmZpZ19vcHMsIG5hbWUsIHRydWUpOwo+ Pj4gKyAgICAgaWYgKCF2ZGV2KQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPj4+ ICsKPj4+ICsgICAgIGRldi0+dmRldiA9IHZkZXY7Cj4+PiArICAgICB2ZGV2LT5kZXYgPSBkZXY7 Cj4+PiArICAgICB2ZGV2LT52ZHBhLmRldi5kbWFfbWFzayA9ICZ2ZGV2LT52ZHBhLmRldi5jb2hl cmVudF9kbWFfbWFzazsKPj4+ICsgICAgIHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQo JnZkZXYtPnZkcGEuZGV2LCBETUFfQklUX01BU0soNjQpKTsKPj4+ICsgICAgIGlmIChyZXQpIHsK Pj4+ICsgICAgICAgICAgICAgcHV0X2RldmljZSgmdmRldi0+dmRwYS5kZXYpOwo+Pj4gKyAgICAg ICAgICAgICByZXR1cm4gcmV0Owo+Pj4gKyAgICAgfQo+Pj4gKyAgICAgc2V0X2RtYV9vcHMoJnZk ZXYtPnZkcGEuZGV2LCAmdmR1c2VfZGV2X2RtYV9vcHMpOwo+Pj4gKyAgICAgdmRldi0+dmRwYS5k bWFfZGV2ID0gJnZkZXYtPnZkcGEuZGV2Owo+Pj4gKyAgICAgdmRldi0+dmRwYS5tZGV2ID0gJm1n bXRfZGV2Owo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRp YyBpbnQgdmRwYV9kZXZfYWRkKHN0cnVjdCB2ZHBhX21nbXRfZGV2ICptZGV2LCBjb25zdCBjaGFy ICpuYW1lKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCB2ZHVzZV9kZXYgKmRldjsKPj4+ICsgICAg IGludCByZXQgPSAtRUlOVkFMOwo+Pj4gKwo+Pj4gKyAgICAgbXV0ZXhfbG9jaygmdmR1c2VfbG9j ayk7Cj4+PiArICAgICBkZXYgPSB2ZHVzZV9maW5kX2RldihuYW1lKTsKPj4+ICsgICAgIGlmICgh ZGV2KSB7Cj4+PiArICAgICAgICAgICAgIG11dGV4X3VubG9jaygmdmR1c2VfbG9jayk7Cj4+PiAr ICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4gKyAgICAgfQo+Pj4gKyAgICAgcmV0ID0g dmR1c2VfZGV2X2luaXRfdmRwYShkZXYsIG5hbWUpOwo+Pj4gKyAgICAgbXV0ZXhfdW5sb2NrKCZ2 ZHVzZV9sb2NrKTsKPj4+ICsgICAgIGlmIChyZXQpCj4+PiArICAgICAgICAgICAgIHJldHVybiBy ZXQ7Cj4+PiArCj4+PiArICAgICByZXQgPSBfdmRwYV9yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRl di0+dmRwYSwgZGV2LT52cV9udW0pOwo+Pj4gKyAgICAgaWYgKHJldCkgewo+Pj4gKyAgICAgICAg ICAgICBwdXRfZGV2aWNlKCZkZXYtPnZkZXYtPnZkcGEuZGV2KTsKPj4+ICsgICAgICAgICAgICAg cmV0dXJuIHJldDsKPj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIHJldHVybiAwOwo+Pj4gK30K Pj4+ICsKPj4+ICtzdGF0aWMgdm9pZCB2ZHBhX2Rldl9kZWwoc3RydWN0IHZkcGFfbWdtdF9kZXYg Km1kZXYsIHN0cnVjdCB2ZHBhX2RldmljZSAqZGV2KQo+Pj4gK3sKPj4+ICsgICAgIF92ZHBhX3Vu cmVnaXN0ZXJfZGV2aWNlKGRldik7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgdmRwYV9tZ210ZGV2X29wcyB2ZHBhX2Rldl9tZ210ZGV2X29wcyA9IHsKPj4+ICsgICAgIC5k ZXZfYWRkID0gdmRwYV9kZXZfYWRkLAo+Pj4gKyAgICAgLmRldl9kZWwgPSB2ZHBhX2Rldl9kZWws Cj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFi bGVbXSA9IHsKPj4+ICsgICAgIHsgVklSVElPX0RFVl9BTllfSUQsIFZJUlRJT19ERVZfQU5ZX0lE IH0sCj4+PiArICAgICB7IDAgfSwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgdmRw YV9tZ210X2RldiBtZ210X2RldiA9IHsKPj4+ICsgICAgIC5kZXZpY2UgPSAmdmR1c2VfbWdtdGRl diwKPj4+ICsgICAgIC5pZF90YWJsZSA9IGlkX3RhYmxlLAo+Pj4gKyAgICAgLm9wcyA9ICZ2ZHBh X2Rldl9tZ210ZGV2X29wcywKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgdmR1c2VfbWdt dGRldl9pbml0KHZvaWQpCj4+PiArewo+Pj4gKyAgICAgaW50IHJldDsKPj4+ICsKPj4+ICsgICAg IHJldCA9IGRldmljZV9yZWdpc3RlcigmdmR1c2VfbWdtdGRldik7Cj4+PiArICAgICBpZiAocmV0 KQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Owo+Pj4gKwo+Pj4gKyAgICAgcmV0ID0gdmRw YV9tZ210ZGV2X3JlZ2lzdGVyKCZtZ210X2Rldik7Cj4+PiArICAgICBpZiAocmV0KQo+Pj4gKyAg ICAgICAgICAgICBnb3RvIGVycjsKPj4+ICsKPj4+ICsgICAgIHJldHVybiAwOwo+Pj4gK2VycjoK Pj4+ICsgICAgIGRldmljZV91bnJlZ2lzdGVyKCZ2ZHVzZV9tZ210ZGV2KTsKPj4+ICsgICAgIHJl dHVybiByZXQ7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHZkdXNlX21nbXRkZXZfZXhp dCh2b2lkKQo+Pj4gK3sKPj4+ICsgICAgIHZkcGFfbWdtdGRldl91bnJlZ2lzdGVyKCZtZ210X2Rl dik7Cj4+PiArICAgICBkZXZpY2VfdW5yZWdpc3RlcigmdmR1c2VfbWdtdGRldik7Cj4+PiArfQo+ Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgdmR1c2VfaW5pdCh2b2lkKQo+Pj4gK3sKPj4+ICsgICAgIGlu dCByZXQ7Cj4+PiArCj4+PiArICAgICBpZiAobWF4X2JvdW5jZV9zaXplID49IG1heF9pb3ZhX3Np emUpCj4+PiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gKyAgICAgcmV0 ID0gbWlzY19yZWdpc3RlcigmdmR1c2VfbWlzYyk7Cj4+PiArICAgICBpZiAocmV0KQo+Pj4gKyAg ICAgICAgICAgICByZXR1cm4gcmV0Owo+Pj4gKwo+Pj4gKyAgICAgdmR1c2VfY2xhc3MgPSBjbGFz c19jcmVhdGUoVEhJU19NT0RVTEUsICJ2ZHVzZSIpOwo+Pj4gKyAgICAgaWYgKElTX0VSUih2ZHVz ZV9jbGFzcykpIHsKPj4+ICsgICAgICAgICAgICAgcmV0ID0gUFRSX0VSUih2ZHVzZV9jbGFzcyk7 Cj4+PiArICAgICAgICAgICAgIGdvdG8gZXJyX2NsYXNzOwo+Pj4gKyAgICAgfQo+Pj4gKyAgICAg dmR1c2VfY2xhc3MtPmRldm5vZGUgPSB2ZHVzZV9kZXZub2RlOwo+Pj4gKwo+Pj4gKyAgICAgcmV0 ID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmdmR1c2VfbWFqb3IsIDAsIFZEVVNFX0RFVl9NQVgsICJ2 ZHVzZSIpOwo+Pj4gKyAgICAgaWYgKHJldCkKPj4+ICsgICAgICAgICAgICAgZ290byBlcnJfY2hh cmRldjsKPj4+ICsKPj4+ICsgICAgIHZkdXNlX2lycV93cSA9IGFsbG9jX3dvcmtxdWV1ZSgidmR1 c2UtaXJxIiwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdRX0hJR0hQUkkgfCBX UV9TWVNGUyB8IFdRX1VOQk9VTkQsIDApOwo+Pj4gKyAgICAgaWYgKCF2ZHVzZV9pcnFfd3EpCj4+ PiArICAgICAgICAgICAgIGdvdG8gZXJyX3dxOwo+Pj4gKwo+Pj4gKyAgICAgcmV0ID0gdmR1c2Vf ZG9tYWluX2luaXQoKTsKPj4+ICsgICAgIGlmIChyZXQpCj4+PiArICAgICAgICAgICAgIGdvdG8g ZXJyX2RvbWFpbjsKPj4+ICsKPj4+ICsgICAgIHJldCA9IHZkdXNlX21nbXRkZXZfaW5pdCgpOwo+ Pj4gKyAgICAgaWYgKHJldCkKPj4+ICsgICAgICAgICAgICAgZ290byBlcnJfbWdtdGRldjsKPj4+ ICsKPj4+ICsgICAgIHJldHVybiAwOwo+Pj4gK2Vycl9tZ210ZGV2Ogo+Pj4gKyAgICAgdmR1c2Vf ZG9tYWluX2V4aXQoKTsKPj4+ICtlcnJfZG9tYWluOgo+Pj4gKyAgICAgZGVzdHJveV93b3JrcXVl dWUodmR1c2VfaXJxX3dxKTsKPj4+ICtlcnJfd3E6Cj4+PiArICAgICB1bnJlZ2lzdGVyX2NocmRl dl9yZWdpb24odmR1c2VfbWFqb3IsIFZEVVNFX0RFVl9NQVgpOwo+Pj4gK2Vycl9jaGFyZGV2Ogo+ Pj4gKyAgICAgY2xhc3NfZGVzdHJveSh2ZHVzZV9jbGFzcyk7Cj4+PiArZXJyX2NsYXNzOgo+Pj4g KyAgICAgbWlzY19kZXJlZ2lzdGVyKCZ2ZHVzZV9taXNjKTsKPj4+ICsgICAgIHJldHVybiByZXQ7 Cj4+PiArfQo+Pj4gK21vZHVsZV9pbml0KHZkdXNlX2luaXQpOwo+Pj4gKwo+Pj4gK3N0YXRpYyB2 b2lkIHZkdXNlX2V4aXQodm9pZCkKPj4+ICt7Cj4+PiArICAgICBtaXNjX2RlcmVnaXN0ZXIoJnZk dXNlX21pc2MpOwo+Pj4gKyAgICAgY2xhc3NfZGVzdHJveSh2ZHVzZV9jbGFzcyk7Cj4+PiArICAg ICB1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24odmR1c2VfbWFqb3IsIFZEVVNFX0RFVl9NQVgpOwo+ Pj4gKyAgICAgZGVzdHJveV93b3JrcXVldWUodmR1c2VfaXJxX3dxKTsKPj4+ICsgICAgIHZkdXNl X2RvbWFpbl9leGl0KCk7Cj4+PiArICAgICB2ZHVzZV9tZ210ZGV2X2V4aXQoKTsKPj4+ICt9Cj4+ PiArbW9kdWxlX2V4aXQodmR1c2VfZXhpdCk7Cj4+PiArCj4+PiArTU9EVUxFX1ZFUlNJT04oRFJW X1ZFUlNJT04pOwo+Pj4gK01PRFVMRV9MSUNFTlNFKERSVl9MSUNFTlNFKTsKPj4+ICtNT0RVTEVf QVVUSE9SKERSVl9BVVRIT1IpOwo+Pj4gK01PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQyk7Cj4+ PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZkdXNlLmggYi9pbmNsdWRlL3VhcGkv bGludXgvdmR1c2UuaAo+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAw MDAwMC4uNjZhNmU1MjEyMjI2Cj4+PiAtLS0gL2Rldi9udWxsCj4+PiArKysgYi9pbmNsdWRlL3Vh cGkvbGludXgvdmR1c2UuaAo+Pj4gQEAgLTAsMCArMSwxNzUgQEAKPj4+ICsvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqLwo+Pj4gKyNp Zm5kZWYgX1VBUElfVkRVU0VfSF8KPj4+ICsjZGVmaW5lIF9VQVBJX1ZEVVNFX0hfCj4+PiArCj4+ PiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4+PiArCj4+PiArI2RlZmluZSBWRFVTRV9BUElf VkVSU0lPTiAgICAwCj4+PiArCj4+PiArI2RlZmluZSBWRFVTRV9DT05GSUdfREFUQV9MRU4gICAg ICAgIDI1Ngo+Pj4gKyNkZWZpbmUgVkRVU0VfTkFNRV9NQVggICAgICAgMjU2Cj4+PiArCj4+PiAr LyogdGhlIGNvbnRyb2wgbWVzc2FnZXMgZGVmaW5pdGlvbiBmb3IgcmVhZC93cml0ZSAqLwo+Pj4g Kwo+Pj4gK2VudW0gdmR1c2VfcmVxX3R5cGUgewo+Pj4gKyAgICAgLyogU2V0IHRoZSB2cmluZyBh ZGRyZXNzIG9mIHZpcnRxdWV1ZS4gKi8KPj4+ICsgICAgIFZEVVNFX1NFVF9WUV9OVU0sCj4+PiAr ICAgICAvKiBTZXQgdGhlIHZyaW5nIGFkZHJlc3Mgb2YgdmlydHF1ZXVlLiAqLwo+Pj4gKyAgICAg VkRVU0VfU0VUX1ZRX0FERFIsCj4+PiArICAgICAvKiBTZXQgcmVhZHkgc3RhdHVzIG9mIHZpcnRx dWV1ZSAqLwo+Pj4gKyAgICAgVkRVU0VfU0VUX1ZRX1JFQURZLAo+Pj4gKyAgICAgLyogR2V0IHJl YWR5IHN0YXR1cyBvZiB2aXJ0cXVldWUgKi8KPj4+ICsgICAgIFZEVVNFX0dFVF9WUV9SRUFEWSwK Pj4+ICsgICAgIC8qIFNldCB0aGUgc3RhdGUgZm9yIHZpcnRxdWV1ZSAqLwo+Pj4gKyAgICAgVkRV U0VfU0VUX1ZRX1NUQVRFLAo+Pj4gKyAgICAgLyogR2V0IHRoZSBzdGF0ZSBmb3IgdmlydHF1ZXVl ICovCj4+PiArICAgICBWRFVTRV9HRVRfVlFfU1RBVEUsCj4+PiArICAgICAvKiBTZXQgdmlydGlv IGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCj4+PiArICAgICBWRFVTRV9TRVRf RkVBVFVSRVMsCj4+PiArICAgICAvKiBHZXQgdmlydGlvIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0 aGUgZGV2aWNlICovCj4+PiArICAgICBWRFVTRV9HRVRfRkVBVFVSRVMsCj4+PiArICAgICAvKiBT ZXQgdGhlIGRldmljZSBzdGF0dXMgKi8KPj4+ICsgICAgIFZEVVNFX1NFVF9TVEFUVVMsCj4+PiAr ICAgICAvKiBHZXQgdGhlIGRldmljZSBzdGF0dXMgKi8KPj4+ICsgICAgIFZEVVNFX0dFVF9TVEFU VVMsCj4+PiArICAgICAvKiBXcml0ZSB0byBkZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiBz cGFjZSAqLwo+Pj4gKyAgICAgVkRVU0VfU0VUX0NPTkZJRywKPj4+ICsgICAgIC8qIFJlYWQgZnJv bSBkZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzcGFjZSAqLwo+Pj4gKyAgICAgVkRVU0Vf R0VUX0NPTkZJRywKPj4+ICsgICAgIC8qIE5vdGlmeSB1c2Vyc3BhY2UgdG8gdXBkYXRlIHRoZSBt ZW1vcnkgbWFwcGluZyBpbiBkZXZpY2UgSU9UTEIgKi8KPj4+ICsgICAgIFZEVVNFX1VQREFURV9J T1RMQiwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0cnVjdCB2ZHVzZV92cV9udW0gewo+Pj4gKyAgICAg X191MzIgaW5kZXg7IC8qIHZpcnRxdWV1ZSBpbmRleCAqLwo+Pgo+PiBJIHRoaW5rIGl0J3MgYmV0 dGVyIHRvIGhhdmUgYSBjb25zaXN0ZW50IHN0eWxlIG9mIHRoZSBkb2MvY29tbWVudC4gSWYKPj4g eWVzLCBsZXQncyBtb3ZlIHRob3NlIGNvbW1lbnQgYWJvdmUgdGhlIGZpZWxkLgo+Pgo+IEZpbmUu Cj4KPj4+ICsgICAgIF9fdTMyIG51bTsgLyogdGhlIHNpemUgb2YgdmlydHF1ZXVlICovCj4+PiAr fTsKPj4+ICsKPj4+ICtzdHJ1Y3QgdmR1c2VfdnFfYWRkciB7Cj4+PiArICAgICBfX3UzMiBpbmRl eDsgLyogdmlydHF1ZXVlIGluZGV4ICovCj4+PiArICAgICBfX3U2NCBkZXNjX2FkZHI7IC8qIGFk ZHJlc3Mgb2YgZGVzYyBhcmVhICovCj4+PiArICAgICBfX3U2NCBkcml2ZXJfYWRkcjsgLyogYWRk cmVzcyBvZiBkcml2ZXIgYXJlYSAqLwo+Pj4gKyAgICAgX191NjQgZGV2aWNlX2FkZHI7IC8qIGFk ZHJlc3Mgb2YgZGV2aWNlIGFyZWEgKi8KPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0cnVjdCB2ZHVzZV92 cV9yZWFkeSB7Cj4+PiArICAgICBfX3UzMiBpbmRleDsgLyogdmlydHF1ZXVlIGluZGV4ICovCj4+ PiArICAgICBfX3U4IHJlYWR5OyAvKiByZWFkeSBzdGF0dXMgb2YgdmlydHF1ZXVlICovCj4+PiAr fTsKPj4+ICsKPj4+ICtzdHJ1Y3QgdmR1c2VfdnFfc3RhdGUgewo+Pj4gKyAgICAgX191MzIgaW5k ZXg7IC8qIHZpcnRxdWV1ZSBpbmRleCAqLwo+Pj4gKyAgICAgX191MTYgYXZhaWxfaWR4OyAvKiB2 aXJ0cXVldWUgc3RhdGUgKGxhc3RfYXZhaWxfaWR4KSAqLwo+Pgo+PiBMZXQncyB1c2UgX191NjQg aGVyZSB0byBiZSBjb25zaXN0ZW50IHdpdGggZ2V0X3ZxX3N0YXRlKCkuCgoKX191MzIgYWN0dWFs bHk6CgpzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUgewogwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQg aW50IGluZGV4OwogwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IG51bTsKfTsKCgo+PiAgIFRo ZSBpZGVhIGlzCj4+IHRvIHN1cHBvcnQgcGFja2VkIHZpcnRxdWV1ZS4KPj4KPiBPSy4gQnV0IGxv b2tzIGxpa2Ugc2l6ZW9mKHN0cnVjdCB2ZHBhX3ZxX3N0YXRlKSBpcyBzdGlsbCBlcXVhbCB0byAy LgoKCkl0J3MgYSBidWcgdGhhdCBuZWVkcyB0byBiZSBmaXhlZC4KCgo+IERvIHlvdSBtZWFuIHdl IHdpbGwgZXh0ZW5kIGl0IGluIHRoZSBmdXR1cmU/CgoKdTMyIHNob3VsZCBiZSBmaW5lLCBhbmQg aXQncyBub3QgZm9yIGZ1dHVyZS4gRm9yIHBhY2tlZCB2aXJ0cXVldWUgd2UgCm5lZWQgc29tZXRo aW5nIGxpa2U6CgpsZTMyIHsKIMKgwqDCoCBsYXN0X2F2YWlfaWR4IDogMTU7CiDCoMKgwqAgbGFz dF9hdmFpbF93cmFwX2NvdW50ZXIgOiAxOwogwqDCoMKgIHVzZWRfaWR4IDogMTU7CiDCoMKgwqAg dXNlZF93cmFwX2NvdW50ZXIgOiAxOwp9CgpBcyBoYXMgYmVlbiBkb25lIGluIApodHRwczovL2xv cmUua2VybmVsLm9yZy9sa21sLzIwMTkwNzE3MTA1MjU1LjYzNDg4LTMtamFzb3dhbmdAcmVkaGF0 LmNvbS9ULwoKCj4KPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0cnVjdCB2ZHVzZV9kZXZfY29uZmlnX2Rh dGEgewo+Pj4gKyAgICAgX191MzIgb2Zmc2V0OyAvKiBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5n IG9mIGNvbmZpZyBzcGFjZSAqLwo+Pj4gKyAgICAgX191MzIgbGVuOyAvKiB0aGUgbGVuZ3RoIHRv IHJlYWQvd3JpdGUgKi8KPj4+ICsgICAgIF9fdTggZGF0YVtWRFVTRV9DT05GSUdfREFUQV9MRU5d OyAvKiBkYXRhIGJ1ZmZlciB1c2VkIHRvIHJlYWQvd3JpdGUgKi8KPj4KPj4gTm90ZSB0aGF0IHNp bmNlIFZEVVNFX0NPTkZJR19EQVRBX0xFTiBpcyBwYXJ0IG9mIHVBUEkgaXQgbWVhbnMgd2UgY2Fu Cj4+IG5vdCBjaGFuZ2UgaXQgaW4gdGhlIGZ1dHVyZS4KPj4KPj4gU28gdGhpcyBtaWdodCBzdWZm Y2llbnQgZm9yIGZ1dHVyZSBmZWF0dXJlcyBvciBhbGwgdHlwZSBvZiB2aXJ0aW8gZGV2aWNlcy4K Pj4KPiBEbyB5b3UgbWVhbiAyNTYgaXMgbm8gZW5vdWdoIGhlcmXvvJ8KCgpZZXMuCgoKPgo+Pj4g K307Cj4+PiArCj4+PiArc3RydWN0IHZkdXNlX2lvdmFfcmFuZ2Ugewo+Pj4gKyAgICAgX191NjQg c3RhcnQ7IC8qIHN0YXJ0IG9mIHRoZSBJT1ZBIHJhbmdlICovCj4+PiArICAgICBfX3U2NCBsYXN0 OyAvKiBlbmQgb2YgdGhlIElPVkEgcmFuZ2UgKi8KPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0cnVjdCB2 ZHVzZV9mZWF0dXJlcyB7Cj4+PiArICAgICBfX3U2NCBmZWF0dXJlczsgLyogdmlydGlvIGZlYXR1 cmVzICovCj4+PiArfTsKPj4+ICsKPj4+ICtzdHJ1Y3QgdmR1c2Vfc3RhdHVzIHsKPj4+ICsgICAg IF9fdTggc3RhdHVzOyAvKiBkZXZpY2Ugc3RhdHVzICovCj4+PiArfTsKPj4+ICsKPj4+ICtzdHJ1 Y3QgdmR1c2VfZGV2X3JlcXVlc3Qgewo+Pj4gKyAgICAgX191MzIgdHlwZTsgLyogcmVxdWVzdCB0 eXBlICovCj4+PiArICAgICBfX3UzMiByZXF1ZXN0X2lkOyAvKiByZXF1ZXN0IGlkICovCj4+PiAr ICAgICBfX3UzMiByZXNlcnZlZFsyXTsgLyogZm9yIGZ1dHVyZSB1c2UgKi8KPj4+ICsgICAgIHVu aW9uIHsKPj4+ICsgICAgICAgICAgICAgc3RydWN0IHZkdXNlX3ZxX251bSB2cV9udW07IC8qIHZp cnRxdWV1ZSBudW0gKi8KPj4+ICsgICAgICAgICAgICAgc3RydWN0IHZkdXNlX3ZxX2FkZHIgdnFf YWRkcjsgLyogdmlydHF1ZXVlIGFkZHJlc3MgKi8KPj4+ICsgICAgICAgICAgICAgc3RydWN0IHZk dXNlX3ZxX3JlYWR5IHZxX3JlYWR5OyAvKiB2aXJ0cXVldWUgcmVhZHkgc3RhdHVzICovCj4+PiAr ICAgICAgICAgICAgIHN0cnVjdCB2ZHVzZV92cV9zdGF0ZSB2cV9zdGF0ZTsgLyogdmlydHF1ZXVl IHN0YXRlICovCj4+PiArICAgICAgICAgICAgIHN0cnVjdCB2ZHVzZV9kZXZfY29uZmlnX2RhdGEg Y29uZmlnOyAvKiB2aXJ0aW8gZGV2aWNlIGNvbmZpZyBzcGFjZSAqLwo+Pj4gKyAgICAgICAgICAg ICBzdHJ1Y3QgdmR1c2VfaW92YV9yYW5nZSBpb3ZhOyAvKiBpb3ZhIHJhbmdlIGZvciB1cGRhdGlu ZyAqLwo+Pj4gKyAgICAgICAgICAgICBzdHJ1Y3QgdmR1c2VfZmVhdHVyZXMgZjsgLyogdmlydGlv IGZlYXR1cmVzICovCj4+PiArICAgICAgICAgICAgIHN0cnVjdCB2ZHVzZV9zdGF0dXMgczsgLyog ZGV2aWNlIHN0YXR1cyAqLwo+Pj4gKyAgICAgICAgICAgICBfX3UzMiBwYWRkaW5nWzE2XTsgLyog cGFkZGluZyAqLwo+Pj4gKyAgICAgfTsKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0cnVjdCB2ZHVzZV9k ZXZfcmVzcG9uc2Ugewo+Pj4gKyAgICAgX191MzIgcmVxdWVzdF9pZDsgLyogY29ycmVzcG9uZGlu ZyByZXF1ZXN0IGlkICovCj4+PiArI2RlZmluZSBWRFVTRV9SRVFVRVNUX09LICAgICAweDAwCj4+ PiArI2RlZmluZSBWRFVTRV9SRVFVRVNUX0ZBSUxFRCAweDAxCj4+PiArICAgICBfX3UzMiByZXN1 bHQ7IC8qIHRoZSByZXN1bHQgb2YgcmVxdWVzdCAqLwo+Pj4gKyAgICAgX191MzIgcmVzZXJ2ZWRb Ml07IC8qIGZvciBmdXR1cmUgdXNlICovCj4+PiArICAgICB1bmlvbiB7Cj4+PiArICAgICAgICAg ICAgIHN0cnVjdCB2ZHVzZV92cV9yZWFkeSB2cV9yZWFkeTsgLyogdmlydHF1ZXVlIHJlYWR5IHN0 YXR1cyAqLwo+Pj4gKyAgICAgICAgICAgICBzdHJ1Y3QgdmR1c2VfdnFfc3RhdGUgdnFfc3RhdGU7 IC8qIHZpcnRxdWV1ZSBzdGF0ZSAqLwo+Pj4gKyAgICAgICAgICAgICBzdHJ1Y3QgdmR1c2VfZGV2 X2NvbmZpZ19kYXRhIGNvbmZpZzsgLyogdmlydGlvIGRldmljZSBjb25maWcgc3BhY2UgKi8KPj4+ ICsgICAgICAgICAgICAgc3RydWN0IHZkdXNlX2ZlYXR1cmVzIGY7IC8qIHZpcnRpbyBmZWF0dXJl cyAqLwo+Pj4gKyAgICAgICAgICAgICBzdHJ1Y3QgdmR1c2Vfc3RhdHVzIHM7IC8qIGRldmljZSBz dGF0dXMgKi8KPj4+ICsgICAgICAgICAgICAgX191MzIgcGFkZGluZ1sxNl07IC8qIHBhZGRpbmcg Ki8KPj4KPj4gU28gaXQgbG9va3MgdG8gbWUgdGhpcyBwYWRkaW5nIGRvZXNuJ3Qgd29yayBzaW5j ZSB2ZHVzZV9kZXZfY29uZmlnX2RhdGEKPj4gaXMgbGFyZ2VyIHRoYW4gaXQuCj4+Cj4gT2gsIG15 IGJhZC4gV2lsbCBmaXggaXQuCj4KPj4+ICsgICAgIH07Cj4+PiArfTsKPj4+ICsKPj4+ICsvKiBp b2N0bHMgKi8KPj4+ICsKPj4+ICtzdHJ1Y3QgdmR1c2VfZGV2X2NvbmZpZyB7Cj4+PiArICAgICBj aGFyIG5hbWVbVkRVU0VfTkFNRV9NQVhdOyAvKiB2ZHVzZSBkZXZpY2UgbmFtZSAqLwo+Pj4gKyAg ICAgX191MzIgdmVuZG9yX2lkOyAvKiB2aXJ0aW8gdmVuZG9yIGlkICovCj4+PiArICAgICBfX3Uz MiBkZXZpY2VfaWQ7IC8qIHZpcnRpbyBkZXZpY2UgaWQgKi8KPj4+ICsgICAgIF9fdTY0IGJvdW5j ZV9zaXplOyAvKiBib3VuY2UgYnVmZmVyIHNpemUgZm9yIGlvbW11ICovCj4+PiArICAgICBfX3Ux NiB2cV9udW07IC8qIHRoZSBudW1iZXIgb2YgdmlydHF1ZXVlcyAqLwo+Pj4gKyAgICAgX191MTYg dnFfc2l6ZV9tYXg7IC8qIHRoZSBtYXggc2l6ZSBvZiB2aXJ0cXVldWUgKi8KPj4+ICsgICAgIF9f dTMyIHZxX2FsaWduOyAvKiB0aGUgYWxsb2NhdGlvbiBhbGlnbm1lbnQgb2YgdmlydHF1ZXVlJ3Mg bWV0YWRhdGEgKi8KPj4+ICsgICAgIF9fdTMyIHJlc2VydmVkWzhdOyAvKiBmb3IgZnV0dXJlIHVz ZSAqLwo+Pgo+PiBJcyB0aGVyZSBhIGhvbGUgYmVmb3JlIHJlc2VydmVkPwo+Pgo+IEJ1dCBJIGRv bid0IGZpbmQgdGhlIGhvbGUgaW4gYmVsb3cgbGF5b3V0Ogo+Cj4gfCAyNTYgfCA0IHwgNCB8IDgg fCAyIHwgMiB8IDQgfCAzMiB8Cj4KCkxvb2tzIGNvcnJlY3QsIGJldHRlciB0byBjaGVjayB3aXRo IHBhaG9sZSB0byBkb3VibGUgY29uZmlybS4KCgo+Pj4gK307Cj4+PiArCj4+PiArc3RydWN0IHZk dXNlX2lvdGxiX2VudHJ5IHsKPj4+ICsgICAgIF9fdTY0IG9mZnNldDsgLyogdGhlIG1tYXAgb2Zm c2V0IG9uIGZkICovCj4+PiArICAgICBfX3U2NCBzdGFydDsgLyogc3RhcnQgb2YgdGhlIElPVkEg cmFuZ2UgKi8KPj4+ICsgICAgIF9fdTY0IGxhc3Q7IC8qIGxhc3Qgb2YgdGhlIElPVkEgcmFuZ2Ug Ki8KPj4+ICsjZGVmaW5lIFZEVVNFX0FDQ0VTU19STyAweDEKPj4+ICsjZGVmaW5lIFZEVVNFX0FD Q0VTU19XTyAweDIKPj4+ICsjZGVmaW5lIFZEVVNFX0FDQ0VTU19SVyAweDMKPj4+ICsgICAgIF9f dTggcGVybTsgLyogYWNjZXNzIHBlcm1pc3Npb24gb2YgdGhpcyByYW5nZSAqLwo+Pj4gK307Cj4+ PiArCj4+PiArc3RydWN0IHZkdXNlX3ZxX2V2ZW50ZmQgewo+Pj4gKyAgICAgX191MzIgaW5kZXg7 IC8qIHZpcnRxdWV1ZSBpbmRleCAqLwo+Pj4gKyNkZWZpbmUgVkRVU0VfRVZFTlRGRF9ERUFTU0lH TiAtMQo+Pj4gKyAgICAgaW50IGZkOyAvKiBldmVudGZkLCAtMSBtZWFucyBkZS1hc3NpZ25pbmcg dGhlIGV2ZW50ZmQgKi8KPj4+ICt9Owo+Pj4gKwo+Pj4gKyNkZWZpbmUgVkRVU0VfQkFTRSAgIDB4 ODEKPj4+ICsKPj4+ICsvKiBHZXQgdGhlIHZlcnNpb24gb2YgVkRVU0UgQVBJLiBUaGlzIGlzIHVz ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb24gKi8KPj4+ICsjZGVmaW5lIFZEVVNFX0dFVF9BUElfVkVS U0lPTiAgICAgICAgX0lPKFZEVVNFX0JBU0UsIDB4MDApCj4+PiArCj4+PiArLyogU2V0IHRoZSB2 ZXJzaW9uIG9mIFZEVVNFIEFQSS4gKi8KPj4+ICsjZGVmaW5lIFZEVVNFX1NFVF9BUElfVkVSU0lP TiAgICAgICAgX0lPKFZEVVNFX0JBU0UsIDB4MDEpCj4+PiArCj4+PiArLyogQ3JlYXRlIGEgdmR1 c2UgZGV2aWNlIHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IGEgY2hhciBkZXZpY2UgKC9kZXYvdmR1 c2UvPG5hbWU+KSAqLwo+Pj4gKyNkZWZpbmUgVkRVU0VfQ1JFQVRFX0RFViAgICAgX0lPVyhWRFVT RV9CQVNFLCAweDAyLCBzdHJ1Y3QgdmR1c2VfZGV2X2NvbmZpZykKPj4+ICsKPj4+ICsvKiBEZXN0 cm95IGEgdmR1c2UgZGV2aWNlLiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHJlZmVyZW5jZXMgdG8g dGhlIGNoYXIgZGV2aWNlICovCj4+PiArI2RlZmluZSBWRFVTRV9ERVNUUk9ZX0RFViAgICBfSU9X KFZEVVNFX0JBU0UsIDB4MDMsIGNoYXJbVkRVU0VfTkFNRV9NQVhdKQo+Pj4gKwo+Pj4gKy8qCj4+ PiArICogR2V0IGEgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZmlyc3Qgb3ZlcmxhcHBlZCBpb3Zh IHJlZ2lvbiwKPj4+ICsgKiAtRUlOVkFMIG1lYW5zIHRoZSBpb3ZhIHJlZ2lvbiBkb2Vzbid0IGV4 aXN0Lgo+Pj4gKyAqLwo+Pj4gKyNkZWZpbmUgVkRVU0VfSU9UTEJfR0VUX0ZEICAgX0lPV1IoVkRV U0VfQkFTRSwgMHgwNCwgc3RydWN0IHZkdXNlX2lvdGxiX2VudHJ5KQo+Pj4gKwo+Pj4gKy8qIFNl dHVwIGFuIGV2ZW50ZmQgdG8gcmVjZWl2ZSBraWNrIGZvciB2aXJ0cXVldWUgKi8KPj4+ICsjZGVm aW5lIFZEVVNFX1ZRX1NFVFVQX0tJQ0tGRCAgICAgICAgX0lPVyhWRFVTRV9CQVNFLCAweDA1LCBz dHJ1Y3QgdmR1c2VfdnFfZXZlbnRmZCkKPj4+ICsKPj4+ICsvKiBJbmplY3QgYW4gaW50ZXJydXB0 IGZvciBzcGVjaWZpYyB2aXJ0cXVldWUgKi8KPj4+ICsjZGVmaW5lIFZEVVNFX0lOSkVDVF9WUV9J UlEgIF9JTyhWRFVTRV9CQVNFLCAweDA2KQo+Pgo+PiBNaXNzaW5nIHBhcmFtZXRlcj8KPj4KPiBX ZSB1c2UgdGhlIGFyZ3AgdG8gc3RvcmUgdGhlIHZpcnRxdWV1ZSBpbmRleCBoZXJlLiBJcyBpdCBP Sz8KCgpTbyBJIG1lYW50IGl0IHNob3VsZCBiZSBzb21ldGhpbmcgbGlrZToKCiNkZWZpbmUgVkRV U0VfSU5KRUNUX1ZRX0lSUcKgIF9JT1coVkRVU0VfQkFTRSwgMHgwNiwgdW5zaWduZWQgaW50KQoK PwoKVGhhbmtzCgoKPgo+IFRoYW5rcywKPiBZb25namkKPgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZp cnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGlu dXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u