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=-13.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 61164C433DB for ; Fri, 5 Feb 2021 15:34:47 +0000 (UTC) Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (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 B6947650F0 for ; Fri, 5 Feb 2021 15:34:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B6947650F0 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 fraxinus.osuosl.org (Postfix) with ESMTP id 633D386A54; Fri, 5 Feb 2021 15:34:46 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XPKvBQxLhbJj; Fri, 5 Feb 2021 15:34:42 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by fraxinus.osuosl.org (Postfix) with ESMTP id 2A71986A3C; Fri, 5 Feb 2021 15:34:42 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id F21D7C08A1; Fri, 5 Feb 2021 15:34:41 +0000 (UTC) Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id B3EDBC013A for ; Fri, 5 Feb 2021 15:34:40 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 96846870AF for ; Fri, 5 Feb 2021 15:34:40 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Xd2RLgAnV81w for ; Fri, 5 Feb 2021 15:34:37 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by whitealder.osuosl.org (Postfix) with ESMTPS id A608D87040 for ; Fri, 5 Feb 2021 15:34:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612539275; 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=afD6BLxgNbXEt73JRkcHtb/LBoEd+IYpXKG2RKNjpyQ=; b=CwRamNSC9iNVs/Zdg6UgkZP/561DKIxunqZPbB2JIK3B8FphdmhCnI9DD1nESt1FXgbUCb Kdk45UW/BdsLxcpzgEry/OwM3TYdhw6yjIyZPNdhEcGsrEMQeZnaqlGy9vhiUV+LUg1LYe SF0zr8/tRrzlYQOLJ/qMrSQaGieBawA= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-163-32IKF9CqM_evWwBWAQSr8g-1; Fri, 05 Feb 2021 10:34:33 -0500 X-MC-Unique: 32IKF9CqM_evWwBWAQSr8g-1 Received: by mail-wr1-f69.google.com with SMTP id l7so5553515wrp.1 for ; Fri, 05 Feb 2021 07:34:32 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=afD6BLxgNbXEt73JRkcHtb/LBoEd+IYpXKG2RKNjpyQ=; b=mdZ/n41ADmXZ8jSP1cCI5FtCtXEj3JUZKr4kq9jf8az0YXDVh116HZQ3oHzdh3nULM NcSA/ainO9Jfkh0pdfz+gSSkVkF8e4ZGbz8Fc/GNXNVSJTPJr8clhF3koi5bWMkGUd92 ym9WCfI04WUsO2O29hxQjobYEQqhqyVG7nxxnHBt8KuAoEcA+Ka28razD6Wp04J3SG3G o7kYH7dgdSR+pBmi2lcnEuAXjnxgKIQsKz4L/649O3AJrgMhZVpsu419E79EvIShwbED fQ4uwVw53BLWpi8WEv0/0DS0aOZDPCT1Lh8dDV4ZnCpx0x6WGG0qaCScQobqOnII8lUn Y5kg== X-Gm-Message-State: AOAM53387qKrQQFke5B9o0xsLayl13DdyySNTEbLFql2tFxy0PkYKpwN FEt0vXWh4ce6NRcwuetjfPnuz2bqVokVsdLKUgPviA8KpYN1uW75G/vexVKY+GwQuWChcCAop7x krrjZy6PD9J73b0LQKe27HxGBm0qJjsPRFtDNXJpTug== X-Received: by 2002:a5d:6986:: with SMTP id g6mr5590616wru.263.1612539271528; Fri, 05 Feb 2021 07:34:31 -0800 (PST) X-Google-Smtp-Source: ABdhPJzPSabN2Eg4sAWhesgJwYbQ7KrRFV9gtU0rXIa9qY1AzbM33Yz3OCe7O1oV3YOMvruQEcS9AA== X-Received: by 2002:a5d:6986:: with SMTP id g6mr5590565wru.263.1612539270924; Fri, 05 Feb 2021 07:34:30 -0800 (PST) Received: from redhat.com (bzq-79-180-2-31.red.bezeqint.net. [79.180.2.31]) by smtp.gmail.com with ESMTPSA id w14sm12794452wro.86.2021.02.05.07.34.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Feb 2021 07:34:30 -0800 (PST) Date: Fri, 5 Feb 2021 10:34:27 -0500 From: "Michael S. Tsirkin" To: Jason Wang Subject: Re: [PATCH V3 16/19] virtio-pci: introduce modern device module Message-ID: <20210205103214-mutt-send-email-mst@kernel.org> References: <20210104065503.199631-1-jasowang@redhat.com> <20210104065503.199631-17-jasowang@redhat.com> MIME-Version: 1.0 In-Reply-To: <20210104065503.199631-17-jasowang@redhat.com> Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=mst@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Disposition: inline Cc: shahafs@mellanox.com, lulu@redhat.com, rdunlap@infradead.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" T24gTW9uLCBKYW4gMDQsIDIwMjEgYXQgMDI6NTU6MDBQTSArMDgwMCwgSmFzb24gV2FuZyB3cm90 ZToKPiBTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPgoKSSBk b24ndCBleGFjdGx5IGdldCB3aHkgd2UgbmVlZCB0byBzcGxpdCB0aGUgbW9kZXJuIGRyaXZlciBv dXQsCmFuZCBpdCBjYW4gY29uZnVzZSBwZW9wbGUgd2hvIGFyZSB1c2VkIHRvIGJlIHNlZWluZyB2 aXJ0aW8tcGNpLgoKVGhlIHZkcGEgdGhpbmcgc28gZmFyIGxvb2tzIGxpa2UgYSBkZXZlbG9wbWVu dCB0b29sLCB3aHkgZG8Kd2UgY2FyZSB0aGF0IGl0IGRlcGVuZHMgb24gYSBiaXQgb2YgZXh0cmEg Y29kZT8KCj4gLS0tCj4gIGRyaXZlcnMvdmlydGlvL0tjb25maWcgICAgICAgICAgICAgICAgIHwg IDEwICstCj4gIGRyaXZlcnMvdmlydGlvL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAxICsK PiAgZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uaCAgICAgfCAgMjcgKy0KPiAgZHJp dmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYyAgICAgfCA2MTcgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQo+ICBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybl9kZXYuYyB8IDU5 OSArKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS9saW51eC92aXJ0aW9fcGNpX21v ZGVybi5oICAgICAgfCAxMTEgKysrKysKPiAgNiBmaWxlcyBjaGFuZ2VkLCA3MjEgaW5zZXJ0aW9u cygrKSwgNjQ0IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92aXJ0 aW8vdmlydGlvX3BjaV9tb2Rlcm5fZGV2LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUv bGludXgvdmlydGlvX3BjaV9tb2Rlcm4uaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRp by9LY29uZmlnIGIvZHJpdmVycy92aXJ0aW8vS2NvbmZpZwo+IGluZGV4IDdiNDExMzBkM2YzNS4u NmI5YjgxZjRiOGMyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdmlydGlvL0tjb25maWcKPiArKysg Yi9kcml2ZXJzL3ZpcnRpby9LY29uZmlnCj4gQEAgLTEyLDYgKzEyLDE0IEBAIGNvbmZpZyBBUkNI X0hBU19SRVNUUklDVEVEX1ZJUlRJT19NRU1PUllfQUNDRVNTCj4gIAkgIFRoaXMgb3B0aW9uIGlz IHNlbGVjdGVkIGlmIHRoZSBhcmNoaXRlY3R1cmUgbWF5IG5lZWQgdG8gZW5mb3JjZQo+ICAJICBW SVJUSU9fRl9BQ0NFU1NfUExBVEZPUk0KPiAgCj4gK2NvbmZpZyBWSVJUSU9fUENJX01PREVSTgo+ ICsJdHJpc3RhdGUgIk1vZGVybiBWaXJ0aW8gUENJIERldmljZSIKPiArCWRlcGVuZHMgb24gUENJ Cj4gKwloZWxwCj4gKwkgIE1vZGVybiBQQ0kgZGV2aWNlIGltcGxlbWVudGF0aW9uLiBUaGlzIG1v ZHVsZSBpbXBsZW1lbnRzIHRoZQo+ICsJICBiYXNpYyBwcm9iZSBhbmQgY29udHJvbCBmb3IgZGV2 aWNlcyB3aGljaCBhcmUgYmFzZWQgb24gbW9kZXJuCj4gKwkgIFBDSSBkZXZpY2Ugd2l0aCBwb3Nz aWJsZSB2ZW5kb3Igc3BlY2lmaWMgZXh0ZW5zaW9ucy4KPiArCj4gIG1lbnVjb25maWcgVklSVElP X01FTlUKPiAgCWJvb2wgIlZpcnRpbyBkcml2ZXJzIgo+ICAJZGVmYXVsdCB5Cj4gQEAgLTIwLDcg KzI4LDcgQEAgaWYgVklSVElPX01FTlUKPiAgCj4gIGNvbmZpZyBWSVJUSU9fUENJCj4gIAl0cmlz dGF0ZSAiUENJIGRyaXZlciBmb3IgdmlydGlvIGRldmljZXMiCj4gLQlkZXBlbmRzIG9uIFBDSQo+ ICsJZGVwZW5kcyBvbiBWSVJUSU9fUENJX01PREVSTgo+ICAJc2VsZWN0IFZJUlRJTwo+ICAJaGVs cAo+ICAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB2aXJ0aW8gYmFzZWQgcGFy YXZpcnR1YWwgZGV2aWNlCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL01ha2VmaWxlIGIv ZHJpdmVycy92aXJ0aW8vTWFrZWZpbGUKPiBpbmRleCA1OTFlNmY3MmFhNTQuLmYwOTc1NzhhYWE4 ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMv dmlydGlvL01ha2VmaWxlCj4gQEAgLTEsNSArMSw2IEBACj4gICMgU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKPiAgb2JqLSQoQ09ORklHX1ZJUlRJTykgKz0gdmlydGlvLm8gdmlydGlv X3Jpbmcubwo+ICtvYmotJChDT05GSUdfVklSVElPX1BDSV9NT0RFUk4pICs9IHZpcnRpb19wY2lf bW9kZXJuX2Rldi5vCj4gIG9iai0kKENPTkZJR19WSVJUSU9fTU1JTykgKz0gdmlydGlvX21taW8u bwo+ICBvYmotJChDT05GSUdfVklSVElPX1BDSSkgKz0gdmlydGlvX3BjaS5vCj4gIHZpcnRpb19w Y2kteSA6PSB2aXJ0aW9fcGNpX21vZGVybi5vIHZpcnRpb19wY2lfY29tbW9uLm8KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uaCBiL2RyaXZlcnMvdmlydGlv L3ZpcnRpb19wY2lfY29tbW9uLmgKPiBpbmRleCBmMzVmZjViNmI0NjcuLmJlZWMwNDdhOGY4ZCAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX2NvbW1vbi5oCj4gKysrIGIv ZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uaAo+IEBAIC0yNSw2ICsyNSw3IEBACj4g ICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+Cj4gICNpbmNsdWRlIDxsaW51eC92aXJ0 aW9fcmluZy5oPgo+ICAjaW5jbHVkZSA8bGludXgvdmlydGlvX3BjaS5oPgo+ICsjaW5jbHVkZSA8 bGludXgvdmlydGlvX3BjaV9tb2Rlcm4uaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4K PiAgI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Cj4gIAo+IEBAIC0zOSwzMiArNDAsNiBAQCBz dHJ1Y3QgdmlydGlvX3BjaV92cV9pbmZvIHsKPiAgCXVuc2lnbmVkIG1zaXhfdmVjdG9yOwo+ICB9 Owo+ICAKPiAtc3RydWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSB7Cj4gLQlzdHJ1Y3QgcGNp X2RldiAqcGNpX2RldjsKPiAtCj4gLQlzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnIF9faW9t ZW0gKmNvbW1vbjsKPiAtCS8qIERldmljZS1zcGVjaWZpYyBkYXRhIChub24tbGVnYWN5IG1vZGUp ICAqLwo+IC0Jdm9pZCBfX2lvbWVtICpkZXZpY2U7Cj4gLQkvKiBCYXNlIG9mIHZxIG5vdGlmaWNh dGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovCj4gLQl2b2lkIF9faW9tZW0gKm5vdGlmeV9iYXNl Owo+IC0JLyogV2hlcmUgdG8gcmVhZCBhbmQgY2xlYXIgaW50ZXJydXB0ICovCj4gLQl1OCBfX2lv bWVtICppc3I7Cj4gLQo+IC0JLyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi8K PiAtCXNpemVfdCBub3RpZnlfbGVuOwo+IC0Jc2l6ZV90IGRldmljZV9sZW47Cj4gLQo+IC0JLyog Q2FwYWJpbGl0eSBmb3Igd2hlbiB3ZSBuZWVkIHRvIG1hcCBub3RpZmljYXRpb25zIHBlci12cS4g Ki8KPiAtCWludCBub3RpZnlfbWFwX2NhcDsKPiAtCj4gLQkvKiBNdWx0aXBseSBxdWV1ZV9ub3Rp Znlfb2ZmIGJ5IHRoaXMgdmFsdWUuIChub24tbGVnYWN5IG1vZGUpLiAqLwo+IC0JdTMyIG5vdGlm eV9vZmZzZXRfbXVsdGlwbGllcjsKPiAtCj4gLQlpbnQgbW9kZXJuX2JhcnM7Cj4gLQo+IC0Jc3Ry dWN0IHZpcnRpb19kZXZpY2VfaWQgaWQ7Cj4gLX07Cj4gLQo+ICAvKiBPdXIgZGV2aWNlIHN0cnVj dHVyZSAqLwo+ICBzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2Ugewo+ICAJc3RydWN0IHZpcnRpb19k ZXZpY2UgdmRldjsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rl cm4uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMKPiBpbmRleCBhNWUzYTVl NDAzMjMuLmZiZDRlYmMwMGViNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9f cGNpX21vZGVybi5jCj4gKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm4uYwo+ IEBAIC0xOSwxNTggKzE5LDYgQEAKPiAgI2RlZmluZSBWSVJUSU9fUklOR19OT19MRUdBQ1kKPiAg I2luY2x1ZGUgInZpcnRpb19wY2lfY29tbW9uLmgiCj4gIAo+IC0vKgo+IC0gKiBUeXBlLXNhZmUg d3JhcHBlcnMgZm9yIGlvIGFjY2Vzc2VzLgo+IC0gKiBVc2UgdGhlc2UgdG8gZW5mb3JjZSBhdCBj b21waWxlIHRpbWUgdGhlIGZvbGxvd2luZyBzcGVjIHJlcXVpcmVtZW50Ogo+IC0gKgo+IC0gKiBU aGUgZHJpdmVyIE1VU1QgYWNjZXNzIGVhY2ggZmllbGQgdXNpbmcgdGhlIOKAnG5hdHVyYWzigJ0g YWNjZXNzCj4gLSAqIG1ldGhvZCwgaS5lLiAzMi1iaXQgYWNjZXNzZXMgZm9yIDMyLWJpdCBmaWVs ZHMsIDE2LWJpdCBhY2Nlc3Nlcwo+IC0gKiBmb3IgMTYtYml0IGZpZWxkcyBhbmQgOC1iaXQgYWNj ZXNzZXMgZm9yIDgtYml0IGZpZWxkcy4KPiAtICovCj4gLXN0YXRpYyBpbmxpbmUgdTggdnBfaW9y ZWFkOChjb25zdCB1OCBfX2lvbWVtICphZGRyKQo+IC17Cj4gLQlyZXR1cm4gaW9yZWFkOChhZGRy KTsKPiAtfQo+IC1zdGF0aWMgaW5saW5lIHUxNiB2cF9pb3JlYWQxNiAoY29uc3QgX19sZTE2IF9f aW9tZW0gKmFkZHIpCj4gLXsKPiAtCXJldHVybiBpb3JlYWQxNihhZGRyKTsKPiAtfQo+IC0KPiAt c3RhdGljIGlubGluZSB1MzIgdnBfaW9yZWFkMzIoY29uc3QgX19sZTMyIF9faW9tZW0gKmFkZHIp Cj4gLXsKPiAtCXJldHVybiBpb3JlYWQzMihhZGRyKTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGlu ZSB2b2lkIHZwX2lvd3JpdGU4KHU4IHZhbHVlLCB1OCBfX2lvbWVtICphZGRyKQo+IC17Cj4gLQlp b3dyaXRlOCh2YWx1ZSwgYWRkcik7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCB2cF9p b3dyaXRlMTYodTE2IHZhbHVlLCBfX2xlMTYgX19pb21lbSAqYWRkcikKPiAtewo+IC0JaW93cml0 ZTE2KHZhbHVlLCBhZGRyKTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB2b2lkIHZwX2lvd3Jp dGUzMih1MzIgdmFsdWUsIF9fbGUzMiBfX2lvbWVtICphZGRyKQo+IC17Cj4gLQlpb3dyaXRlMzIo dmFsdWUsIGFkZHIpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCB2cF9pb3dyaXRlNjRfdHdvcGFy dCh1NjQgdmFsLAo+IC0JCQkJIF9fbGUzMiBfX2lvbWVtICpsbywgX19sZTMyIF9faW9tZW0gKmhp KQo+IC17Cj4gLQl2cF9pb3dyaXRlMzIoKHUzMil2YWwsIGxvKTsKPiAtCXZwX2lvd3JpdGUzMih2 YWwgPj4gMzIsIGhpKTsKPiAtfQo+IC0KPiAtLyoKPiAtICogdnBfbW9kZXJuX21hcF9jYXBhYmls aXR5IC0gbWFwIGEgcGFydCBvZiB2aXJ0aW8gcGNpIGNhcGFiaWxpdHkKPiAtICogQG1kZXY6IHRo ZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UKPiAtICogQG9mZjogb2Zmc2V0IG9mIHRoZSBjYXBh YmlsaXR5Cj4gLSAqIEBtaW5sZW46IG1pbmltYWwgbGVuZ3RoIG9mIHRoZSBjYXBhYmlsaXR5Cj4g LSAqIEBhbGlnbjogYWxpZ24gcmVxdWlyZW1lbnQKPiAtICogQHN0YXJ0OiBzdGFydCBmcm9tIHRo ZSBjYXBhYmlsaXR5Cj4gLSAqIEBzaXplOiBtYXAgc2l6ZQo+IC0gKiBAbGVuOiB0aGUgbGVuZ3Ro IHRoYXQgaXMgYWN0dWFsbHkgbWFwcGVkCj4gLSAqCj4gLSAqIFJldHVybnMgdGhlIGlvIGFkZHJl c3Mgb2YgZm9yIHRoZSBwYXJ0IG9mIHRoZSBjYXBhYmlsaXR5Cj4gLSAqLwo+IC12b2lkIF9faW9t ZW0gKnZwX21vZGVybl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2 aWNlICptZGV2LCBpbnQgb2ZmLAo+IC0JCQkJICAgICAgIHNpemVfdCBtaW5sZW4sCj4gLQkJCQkg ICAgICAgdTMyIGFsaWduLAo+IC0JCQkJICAgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsCj4gLQkJ CQkgICAgICAgc2l6ZV90ICpsZW4pCj4gLXsKPiAtCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBtZGV2 LT5wY2lfZGV2Owo+IC0JdTggYmFyOwo+IC0JdTMyIG9mZnNldCwgbGVuZ3RoOwo+IC0Jdm9pZCBf X2lvbWVtICpwOwo+IC0KPiAtCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgb2ZmICsgb2Zmc2V0 b2Yoc3RydWN0IHZpcnRpb19wY2lfY2FwLAo+IC0JCQkJCQkgYmFyKSwKPiAtCQkJICAgICAmYmFy KTsKPiAtCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIG9mZiArIG9mZnNldG9mKHN0cnVjdCB2 aXJ0aW9fcGNpX2NhcCwgb2Zmc2V0KSwKPiAtCQkJICAgICAmb2Zmc2V0KTsKPiAtCXBjaV9yZWFk X2NvbmZpZ19kd29yZChkZXYsIG9mZiArIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NhcCwg bGVuZ3RoKSwKPiAtCQkJICAgICAgJmxlbmd0aCk7Cj4gLQo+IC0JaWYgKGxlbmd0aCA8PSBzdGFy dCkgewo+IC0JCWRldl9lcnIoJmRldi0+ZGV2LAo+IC0JCQkidmlydGlvX3BjaTogYmFkIGNhcGFi aWxpdHkgbGVuICV1ICg+JXUgZXhwZWN0ZWQpXG4iLAo+IC0JCQlsZW5ndGgsIHN0YXJ0KTsKPiAt CQlyZXR1cm4gTlVMTDsKPiAtCX0KPiAtCj4gLQlpZiAobGVuZ3RoIC0gc3RhcnQgPCBtaW5sZW4p IHsKPiAtCQlkZXZfZXJyKCZkZXYtPmRldiwKPiAtCQkJInZpcnRpb19wY2k6IGJhZCBjYXBhYmls aXR5IGxlbiAldSAoPj0lenUgZXhwZWN0ZWQpXG4iLAo+IC0JCQlsZW5ndGgsIG1pbmxlbik7Cj4g LQkJcmV0dXJuIE5VTEw7Cj4gLQl9Cj4gLQo+IC0JbGVuZ3RoIC09IHN0YXJ0Owo+IC0KPiAtCWlm IChzdGFydCArIG9mZnNldCA8IG9mZnNldCkgewo+IC0JCWRldl9lcnIoJmRldi0+ZGV2LAo+IC0J CQkidmlydGlvX3BjaTogbWFwIHdyYXAtYXJvdW5kICV1KyV1XG4iLAo+IC0JCQlzdGFydCwgb2Zm c2V0KTsKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCX0KPiAtCj4gLQlvZmZzZXQgKz0gc3RhcnQ7Cj4g LQo+IC0JaWYgKG9mZnNldCAmIChhbGlnbiAtIDEpKSB7Cj4gLQkJZGV2X2VycigmZGV2LT5kZXYs Cj4gLQkJCSJ2aXJ0aW9fcGNpOiBvZmZzZXQgJXUgbm90IGFsaWduZWQgdG8gJXVcbiIsCj4gLQkJ CW9mZnNldCwgYWxpZ24pOwo+IC0JCXJldHVybiBOVUxMOwo+IC0JfQo+IC0KPiAtCWlmIChsZW5n dGggPiBzaXplKQo+IC0JCWxlbmd0aCA9IHNpemU7Cj4gLQo+IC0JaWYgKGxlbikKPiAtCQkqbGVu ID0gbGVuZ3RoOwo+IC0KPiAtCWlmIChtaW5sZW4gKyBvZmZzZXQgPCBtaW5sZW4gfHwKPiAtCSAg ICBtaW5sZW4gKyBvZmZzZXQgPiBwY2lfcmVzb3VyY2VfbGVuKGRldiwgYmFyKSkgewo+IC0JCWRl dl9lcnIoJmRldi0+ZGV2LAo+IC0JCQkidmlydGlvX3BjaTogbWFwIHZpcnRpbyAlenVAJXUgIgo+ IC0JCQkib3V0IG9mIHJhbmdlIG9uIGJhciAlaSBsZW5ndGggJWx1XG4iLAo+IC0JCQltaW5sZW4s IG9mZnNldCwKPiAtCQkJYmFyLCAodW5zaWduZWQgbG9uZylwY2lfcmVzb3VyY2VfbGVuKGRldiwg YmFyKSk7Cj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQl9Cj4gLQo+IC0JcCA9IHBjaV9pb21hcF9yYW5n ZShkZXYsIGJhciwgb2Zmc2V0LCBsZW5ndGgpOwo+IC0JaWYgKCFwKQo+IC0JCWRldl9lcnIoJmRl di0+ZGV2LAo+IC0JCQkidmlydGlvX3BjaTogdW5hYmxlIHRvIG1hcCB2aXJ0aW8gJXVAJXUgb24g YmFyICVpXG4iLAo+IC0JCQlsZW5ndGgsIG9mZnNldCwgYmFyKTsKPiAtCXJldHVybiBwOwo+IC19 Cj4gLQo+IC0vKgo+IC0gKiB2cF9tb2Rlcm5fZ2V0X2ZlYXR1cmVzIC0gZ2V0IGZlYXR1cmVzIGZy b20gZGV2aWNlCj4gLSAqIEBtZGV2OiB0aGUgbW9kZXJuIHZpcnRpby1wY2kgZGV2aWNlCj4gLSAq Cj4gLSAqIFJldHVybnMgdGhlIGZlYXR1cmVzIHJlYWQgZnJvbSB0aGUgZGV2aWNlCj4gLSAqLwo+ IC1zdGF0aWMgdTY0IHZwX21vZGVybl9nZXRfZmVhdHVyZXMoc3RydWN0IHZpcnRpb19wY2lfbW9k ZXJuX2RldmljZSAqbWRldikKPiAtewo+IC0Jc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZyBf X2lvbWVtICpjZmcgPSBtZGV2LT5jb21tb247Cj4gLQo+IC0JdTY0IGZlYXR1cmVzOwo+IC0KPiAt CXZwX2lvd3JpdGUzMigwLCAmY2ZnLT5kZXZpY2VfZmVhdHVyZV9zZWxlY3QpOwo+IC0JZmVhdHVy ZXMgPSB2cF9pb3JlYWQzMigmY2ZnLT5kZXZpY2VfZmVhdHVyZSk7Cj4gLQl2cF9pb3dyaXRlMzIo MSwgJmNmZy0+ZGV2aWNlX2ZlYXR1cmVfc2VsZWN0KTsKPiAtCWZlYXR1cmVzIHw9ICgodTY0KXZw X2lvcmVhZDMyKCZjZmctPmRldmljZV9mZWF0dXJlKSA8PCAzMik7Cj4gLQo+IC0JcmV0dXJuIGZl YXR1cmVzOwo+IC19Cj4gLQo+IC0vKiB2aXJ0aW8gY29uZmlnLT5nZXRfZmVhdHVyZXMoKSBpbXBs ZW1lbnRhdGlvbiAqLwo+ICBzdGF0aWMgdTY0IHZwX2dldF9mZWF0dXJlcyhzdHJ1Y3QgdmlydGlv X2RldmljZSAqdmRldikKPiAgewo+ICAJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYg PSB0b192cF9kZXZpY2UodmRldik7Cj4gQEAgLTE4OCwxNDkgKzM2LDYgQEAgc3RhdGljIHZvaWQg dnBfdHJhbnNwb3J0X2ZlYXR1cmVzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCB1NjQgZmVh dHVyZXMpCj4gIAkJX192aXJ0aW9fc2V0X2JpdCh2ZGV2LCBWSVJUSU9fRl9TUl9JT1YpOwo+ICB9 Cj4gIAo+IC0vKgo+IC0gKiB2cF9tb2Rlcm5fc2V0X2ZlYXR1cmVzIC0gc2V0IGZlYXR1cmVzIHRv IGRldmljZQo+IC0gKiBAbWRldjogdGhlIG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQo+IC0gKiBA ZmVhdHVyZXM6IHRoZSBmZWF0dXJlcyBzZXQgdG8gZGV2aWNlCj4gLSAqLwo+IC1zdGF0aWMgdm9p ZCB2cF9tb2Rlcm5fc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2Ug Km1kZXYsCj4gLQkJCQkgICB1NjQgZmVhdHVyZXMpCj4gLXsKPiAtCXN0cnVjdCB2aXJ0aW9fcGNp X2NvbW1vbl9jZmcgX19pb21lbSAqY2ZnID0gbWRldi0+Y29tbW9uOwo+IC0KPiAtCXZwX2lvd3Jp dGUzMigwLCAmY2ZnLT5ndWVzdF9mZWF0dXJlX3NlbGVjdCk7Cj4gLQl2cF9pb3dyaXRlMzIoKHUz MilmZWF0dXJlcywgJmNmZy0+Z3Vlc3RfZmVhdHVyZSk7Cj4gLQl2cF9pb3dyaXRlMzIoMSwgJmNm Zy0+Z3Vlc3RfZmVhdHVyZV9zZWxlY3QpOwo+IC0JdnBfaW93cml0ZTMyKGZlYXR1cmVzID4+IDMy LCAmY2ZnLT5ndWVzdF9mZWF0dXJlKTsKPiAtfQo+IC0KPiAtLyoKPiAtICogdnBfbW9kZXJuX3F1 ZXVlX3ZlY3RvciAtIHNldCB0aGUgTVNJWCB2ZWN0b3IgZm9yIGEgc3BlY2lmaWMgdmlydHF1ZXVl Cj4gLSAqIEBtZGV2OiB0aGUgbW9kZXJuIHZpcnRpby1wY2kgZGV2aWNlCj4gLSAqIEBpbmRleDog cXVldWUgaW5kZXgKPiAtICogQHZlY3RvcjogdGhlIGNvbmZpZyB2ZWN0b3IKPiAtICoKPiAtICog UmV0dXJucyB0aGUgY29uZmlnIHZlY3RvciByZWFkIGZyb20gdGhlIGRldmljZQo+IC0gKi8KPiAt c3RhdGljIHUxNiB2cF9tb2Rlcm5fcXVldWVfdmVjdG9yKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVy bl9kZXZpY2UgKm1kZXYsCj4gLQkJCQkgIHUxNiBpbmRleCwgdTE2IHZlY3RvcikKPiAtewo+IC0J c3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZyBfX2lvbWVtICpjZmcgPSBtZGV2LT5jb21tb247 Cj4gLQo+IC0JdnBfaW93cml0ZTE2KGluZGV4LCAmY2ZnLT5xdWV1ZV9zZWxlY3QpOwo+IC0JdnBf aW93cml0ZTE2KHZlY3RvciwgJmNmZy0+cXVldWVfbXNpeF92ZWN0b3IpOwo+IC0JLyogRmx1c2gg dGhlIHdyaXRlIG91dCB0byBkZXZpY2UgKi8KPiAtCXJldHVybiB2cF9pb3JlYWQxNigmY2ZnLT5x dWV1ZV9tc2l4X3ZlY3Rvcik7Cj4gLX0KPiAtCj4gLS8qCj4gLSAqIHZwX21vZGVybl9xdWV1ZV9h ZGRyZXNzIC0gc2V0IHRoZSB2aXJ0cXVldWUgYWRkcmVzcwo+IC0gKiBAbWRldjogdGhlIG1vZGVy biB2aXJ0aW8tcGNpIGRldmljZQo+IC0gKiBAaW5kZXg6IHRoZSBxdWV1ZSBpbmRleAo+IC0gKiBA ZGVzY19hZGRyOiBhZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yIGFyZWEKPiAtICogQGRyaXZlcl9h ZGRyOiBhZGRyZXNzIG9mIHRoZSBkcml2ZXIgYXJlYQo+IC0gKiBAZGV2aWNlX2FkZHI6IGFkZHJl c3Mgb2YgdGhlIGRldmljZSBhcmVhCj4gLSAqLwo+IC1zdGF0aWMgdm9pZCB2cF9tb2Rlcm5fcXVl dWVfYWRkcmVzcyhzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2LAo+IC0JCQkJ ICAgIHUxNiBpbmRleCwgdTY0IGRlc2NfYWRkciwgdTY0IGRyaXZlcl9hZGRyLAo+IC0JCQkJICAg IHU2NCBkZXZpY2VfYWRkcikKPiAtewo+IC0Jc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZyBf X2lvbWVtICpjZmcgPSBtZGV2LT5jb21tb247Cj4gLQo+IC0JdnBfaW93cml0ZTE2KGluZGV4LCAm Y2ZnLT5xdWV1ZV9zZWxlY3QpOwo+IC0KPiAtCXZwX2lvd3JpdGU2NF90d29wYXJ0KGRlc2NfYWRk ciwgJmNmZy0+cXVldWVfZGVzY19sbywKPiAtCQkJICAgICAmY2ZnLT5xdWV1ZV9kZXNjX2hpKTsK PiAtCXZwX2lvd3JpdGU2NF90d29wYXJ0KGRyaXZlcl9hZGRyLCAmY2ZnLT5xdWV1ZV9hdmFpbF9s bywKPiAtCQkJICAgICAmY2ZnLT5xdWV1ZV9hdmFpbF9oaSk7Cj4gLQl2cF9pb3dyaXRlNjRfdHdv cGFydChkZXZpY2VfYWRkciwgJmNmZy0+cXVldWVfdXNlZF9sbywKPiAtCQkJICAgICAmY2ZnLT5x dWV1ZV91c2VkX2hpKTsKPiAtfQo+IC0KPiAtLyoKPiAtICogdnBfbW9kZXJuX3NldF9xdWV1ZV9l bmFibGUgLSBlbmFibGUgYSB2aXJ0cXVldWUKPiAtICogQG1kZXY6IHRoZSBtb2Rlcm4gdmlydGlv LXBjaSBkZXZpY2UKPiAtICogQGluZGV4OiB0aGUgcXVldWUgaW5kZXgKPiAtICogQGVuYWJsZTog d2hldGhlciB0aGUgdmlydHF1ZXVlIGlzIGVuYWJsZSBvciBub3QKPiAtICovCj4gLXN0YXRpYyB2 b2lkIHZwX21vZGVybl9zZXRfcXVldWVfZW5hYmxlKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9k ZXZpY2UgKm1kZXYsCj4gLQkJCQkgICAgICAgdTE2IGluZGV4LCBib29sIGVuYWJsZSkKPiAtewo+ IC0JdnBfaW93cml0ZTE2KGluZGV4LCAmbWRldi0+Y29tbW9uLT5xdWV1ZV9zZWxlY3QpOwo+IC0J dnBfaW93cml0ZTE2KGVuYWJsZSwgJm1kZXYtPmNvbW1vbi0+cXVldWVfZW5hYmxlKTsKPiAtfQo+ IC0KPiAtLyoKPiAtICogdnBfbW9kZXJuX2dldF9xdWV1ZV9lbmFibGUgLSBlbmFibGUgYSB2aXJ0 cXVldWUKPiAtICogQG1kZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UKPiAtICogQGlu ZGV4OiB0aGUgcXVldWUgaW5kZXgKPiAtICoKPiAtICogUmV0dXJucyB3aGV0aGVyIGEgdmlydHF1 ZXVlIGlzIGVuYWJsZWQgb3Igbm90Cj4gLSAqLwo+IC1zdGF0aWMgYm9vbCB2cF9tb2Rlcm5fZ2V0 X3F1ZXVlX2VuYWJsZShzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2LAo+IC0J CQkJICAgICAgIHUxNiBpbmRleCkKPiAtewo+IC0JdnBfaW93cml0ZTE2KGluZGV4LCAmbWRldi0+ Y29tbW9uLT5xdWV1ZV9zZWxlY3QpOwo+IC0KPiAtCXJldHVybiB2cF9pb3JlYWQxNigmbWRldi0+ Y29tbW9uLT5xdWV1ZV9lbmFibGUpOwo+IC19Cj4gLQo+IC0vKgo+IC0gKiB2cF9tb2Rlcm5fc2V0 X3F1ZXVlX3NpemUgLSBzZXQgc2l6ZSBmb3IgYSB2aXJ0cXVldWUKPiAtICogQG1kZXY6IHRoZSBt b2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UKPiAtICogQGluZGV4OiB0aGUgcXVldWUgaW5kZXgKPiAt ICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSB2aXJ0cXVldWUKPiAtICovCj4gLXN0YXRpYyB2b2lk IHZwX21vZGVybl9zZXRfcXVldWVfc2l6ZShzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNl ICptZGV2LAo+IC0JCQkJICAgICB1MTYgaW5kZXgsIHUxNiBzaXplKQo+IC17Cj4gLQl2cF9pb3dy aXRlMTYoaW5kZXgsICZtZGV2LT5jb21tb24tPnF1ZXVlX3NlbGVjdCk7Cj4gLQl2cF9pb3dyaXRl MTYoc2l6ZSwgJm1kZXYtPmNvbW1vbi0+cXVldWVfc2l6ZSk7Cj4gLQo+IC19Cj4gLQo+IC0vKgo+ IC0gKiB2cF9tb2Rlcm5fZ2V0X3F1ZXVlX3NpemUgLSBnZXQgc2l6ZSBmb3IgYSB2aXJ0cXVldWUK PiAtICogQG1kZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UKPiAtICogQGluZGV4OiB0 aGUgcXVldWUgaW5kZXgKPiAtICoKPiAtICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmlydHF1 ZXVlCj4gLSAqLwo+IC1zdGF0aWMgdTE2IHZwX21vZGVybl9nZXRfcXVldWVfc2l6ZShzdHJ1Y3Qg dmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2LAo+IC0JCQkJICAgIHUxNiBpbmRleCkKPiAt ewo+IC0JdnBfaW93cml0ZTE2KGluZGV4LCAmbWRldi0+Y29tbW9uLT5xdWV1ZV9zZWxlY3QpOwo+ IC0KPiAtCXJldHVybiB2cF9pb3JlYWQxNigmbWRldi0+Y29tbW9uLT5xdWV1ZV9zaXplKTsKPiAt Cj4gLX0KPiAtCj4gLS8qCj4gLSAqIHZwX21vZGVybl9nZXRfbnVtX3F1ZXVlcyAtIGdldCB0aGUg bnVtYmVyIG9mIHZpcnRxdWV1ZXMKPiAtICogQG1kZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBk ZXZpY2UKPiAtICoKPiAtICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHZpcnRxdWV1ZXMKPiAtICov Cj4gLXN0YXRpYyB1MTYgdnBfbW9kZXJuX2dldF9udW1fcXVldWVzKHN0cnVjdCB2aXJ0aW9fcGNp X21vZGVybl9kZXZpY2UgKm1kZXYpCj4gLXsKPiAtCXJldHVybiB2cF9pb3JlYWQxNigmbWRldi0+ Y29tbW9uLT5udW1fcXVldWVzKTsKPiAtfQo+IC0KPiAtLyoKPiAtICogdnBfbW9kZXJuX2dldF9x dWV1ZV9ub3RpZnlfb2ZmIC0gZ2V0IG5vdGlmaWNhdGlvbiBvZmZzZXQgZm9yIGEgdmlydHF1ZXVl Cj4gLSAqIEBtZGV2OiB0aGUgbW9kZXJuIHZpcnRpby1wY2kgZGV2aWNlCj4gLSAqIEBpbmRleDog dGhlIHF1ZXVlIGluZGV4Cj4gLSAqCj4gLSAqIFJldHVybnMgdGhlIG5vdGlmaWNhdGlvbiBvZmZz ZXQgZm9yIGEgdmlydHF1ZXVlCj4gLSAqLwo+IC1zdGF0aWMgdTE2IHZwX21vZGVybl9nZXRfcXVl dWVfbm90aWZ5X29mZihzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2LAo+IC0J CQkJCSAgdTE2IGluZGV4KQo+IC17Cj4gLQl2cF9pb3dyaXRlMTYoaW5kZXgsICZtZGV2LT5jb21t b24tPnF1ZXVlX3NlbGVjdCk7Cj4gLQo+IC0JcmV0dXJuIHZwX2lvcmVhZDE2KCZtZGV2LT5jb21t b24tPnF1ZXVlX25vdGlmeV9vZmYpOwo+IC19Cj4gLQo+ICAvKiB2aXJ0aW8gY29uZmlnLT5maW5h bGl6ZV9mZWF0dXJlcygpIGltcGxlbWVudGF0aW9uICovCj4gIHN0YXRpYyBpbnQgdnBfZmluYWxp emVfZmVhdHVyZXMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gIHsKPiBAQCAtNDI5LDE5 ICsxMzQsNiBAQCBzdGF0aWMgdm9pZCB2cF9zZXQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYs IHVuc2lnbmVkIG9mZnNldCwKPiAgCX0KPiAgfQo+ICAKPiAtLyoKPiAtICogdnBfbW9kZXJuX2dl bmVyYXRpb24gLSBnZXQgdGhlIGRldmljZSBnZW5yZWF0aW9uCj4gLSAqIEBtZGV2OiB0aGUgbW9k ZXJuIHZpcnRpby1wY2kgZGV2aWNlCj4gLSAqCj4gLSAqIFJldHVybnMgdGhlIGdlbnJlYXRpb24g cmVhZCBmcm9tIGRldmljZQo+IC0gKi8KPiAtc3RhdGljIHUzMiB2cF9tb2Rlcm5fZ2VuZXJhdGlv bihzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2KQo+IC17Cj4gLQlzdHJ1Y3Qg dmlydGlvX3BjaV9jb21tb25fY2ZnIF9faW9tZW0gKmNmZyA9IG1kZXYtPmNvbW1vbjsKPiAtCj4g LQlyZXR1cm4gdnBfaW9yZWFkOCgmY2ZnLT5jb25maWdfZ2VuZXJhdGlvbik7Cj4gLX0KPiAtCj4g IHN0YXRpYyB1MzIgdnBfZ2VuZXJhdGlvbihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiAg ewo+ICAJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSB0b192cF9kZXZpY2UodmRl dik7Cj4gQEAgLTQ0OSwxOSArMTQxLDYgQEAgc3RhdGljIHUzMiB2cF9nZW5lcmF0aW9uKHN0cnVj dCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ICAJcmV0dXJuIHZwX21vZGVybl9nZW5lcmF0aW9uKCZ2 cF9kZXYtPm1kZXYpOwo+ICB9Cj4gIAo+IC0vKgo+IC0gKiB2cF9tb2Rlcm5fZ2V0X3N0YXR1cyAt IGdldCB0aGUgZGV2aWNlIHN0YXR1cwo+IC0gKiBAbWRldjogdGhlIG1vZGVybiB2aXJ0aW8tcGNp IGRldmljZQo+IC0gKgo+IC0gKiBSZXR1cm5zIHRoZSBzdGF0dXMgcmVhZCBmcm9tIGRldmljZQo+ IC0gKi8KPiAtc3RhdGljIHU4IHZwX21vZGVybl9nZXRfc3RhdHVzKHN0cnVjdCB2aXJ0aW9fcGNp X21vZGVybl9kZXZpY2UgKm1kZXYpCj4gLXsKPiAtCXN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9j ZmcgX19pb21lbSAqY2ZnID0gbWRldi0+Y29tbW9uOwo+IC0KPiAtCXJldHVybiB2cF9pb3JlYWQ4 KCZjZmctPmRldmljZV9zdGF0dXMpOwo+IC19Cj4gLQo+ICAvKiBjb25maWctPntnZXQsc2V0fV9z dGF0dXMoKSBpbXBsZW1lbnRhdGlvbnMgKi8KPiAgc3RhdGljIHU4IHZwX2dldF9zdGF0dXMoc3Ry dWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gIHsKPiBAQCAtNDcwLDE5ICsxNDksNiBAQCBzdGF0 aWMgdTggdnBfZ2V0X3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiAgCXJldHVy biB2cF9tb2Rlcm5fZ2V0X3N0YXR1cygmdnBfZGV2LT5tZGV2KTsKPiAgfQo+ICAKPiAtLyoKPiAt ICogdnBfbW9kZXJuX3NldF9zdGF0dXMgLSBzZXQgc3RhdHVzIHRvIGRldmljZQo+IC0gKiBAbWRl djogdGhlIG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQo+IC0gKiBAc3RhdHVzOiB0aGUgc3RhdHVz IHNldCB0byBkZXZpY2UKPiAtICovCj4gLXN0YXRpYyB2b2lkIHZwX21vZGVybl9zZXRfc3RhdHVz KHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCj4gLQkJCQkgdTggc3RhdHVz KQo+IC17Cj4gLQlzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnIF9faW9tZW0gKmNmZyA9IG1k ZXYtPmNvbW1vbjsKPiAtCj4gLQl2cF9pb3dyaXRlOChzdGF0dXMsICZjZmctPmRldmljZV9zdGF0 dXMpOwo+IC19Cj4gLQo+ICBzdGF0aWMgdm9pZCB2cF9zZXRfc3RhdHVzKHN0cnVjdCB2aXJ0aW9f ZGV2aWNlICp2ZGV2LCB1OCBzdGF0dXMpCj4gIHsKPiAgCXN0cnVjdCB2aXJ0aW9fcGNpX2Rldmlj ZSAqdnBfZGV2ID0gdG9fdnBfZGV2aWNlKHZkZXYpOwo+IEBAIC01MTAsMjUgKzE3Niw2IEBAIHN0 YXRpYyB2b2lkIHZwX3Jlc2V0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ICAJdnBfc3lu Y2hyb25pemVfdmVjdG9ycyh2ZGV2KTsKPiAgfQo+ICAKPiAtLyoKPiAtICogdnBfbW9kZXJuX2Nv bmZpZ192ZWN0b3IgLSBzZXQgdGhlIHZlY3RvciBmb3IgY29uZmlnIGludGVycnVwdAo+IC0gKiBA bWRldjogdGhlIG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQo+IC0gKiBAdmVjdG9yOiB0aGUgY29u ZmlnIHZlY3Rvcgo+IC0gKgo+IC0gKiBSZXR1cm5zIHRoZSBjb25maWcgdmVjdG9yIHJlYWQgZnJv bSB0aGUgZGV2aWNlCj4gLSAqLwo+IC1zdGF0aWMgdTE2IHZwX21vZGVybl9jb25maWdfdmVjdG9y KHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCj4gLQkJCQkgICB1MTYgdmVj dG9yKQo+IC17Cj4gLQlzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnIF9faW9tZW0gKmNmZyA9 IG1kZXYtPmNvbW1vbjsKPiAtCj4gLQkvKiBTZXR1cCB0aGUgdmVjdG9yIHVzZWQgZm9yIGNvbmZp Z3VyYXRpb24gZXZlbnRzICovCj4gLQl2cF9pb3dyaXRlMTYodmVjdG9yLCAmY2ZnLT5tc2l4X2Nv bmZpZyk7Cj4gLQkvKiBWZXJpZnkgd2UgaGFkIGVub3VnaCByZXNvdXJjZXMgdG8gYXNzaWduIHRo ZSB2ZWN0b3IgKi8KPiAtCS8qIFdpbGwgYWxzbyBmbHVzaCB0aGUgd3JpdGUgb3V0IHRvIGRldmlj ZSAqLwo+IC0JcmV0dXJuIHZwX2lvcmVhZDE2KCZjZmctPm1zaXhfY29uZmlnKTsKPiAtfQo+IC0K PiAgc3RhdGljIHUxNiB2cF9jb25maWdfdmVjdG9yKHN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAq dnBfZGV2LCB1MTYgdmVjdG9yKQo+ICB7Cj4gIAlyZXR1cm4gdnBfbW9kZXJuX2NvbmZpZ192ZWN0 b3IoJnZwX2Rldi0+bWRldiwgdmVjdG9yKTsKPiBAQCAtNzg5LDI1MyArNDM2LDYgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fcGNpX2NvbmZpZ19vcHMgPSB7 Cj4gIAkuZ2V0X3NobV9yZWdpb24gID0gdnBfZ2V0X3NobV9yZWdpb24sCj4gIH07Cj4gIAo+IC0v KioKPiAtICogdmlydGlvX3BjaV9maW5kX2NhcGFiaWxpdHkgLSB3YWxrIGNhcGFiaWxpdGllcyB0 byBmaW5kIGRldmljZSBpbmZvLgo+IC0gKiBAZGV2OiB0aGUgcGNpIGRldmljZQo+IC0gKiBAY2Zn X3R5cGU6IHRoZSBWSVJUSU9fUENJX0NBUF8qIHZhbHVlIHdlIHNlZWsKPiAtICogQGlvcmVzb3Vy Y2VfdHlwZXM6IElPUkVTT1VSQ0VfTUVNIGFuZC9vciBJT1JFU09VUkNFX0lPLgo+IC0gKiBAYmFy czogdGhlIGJpdG1hc2sgb2YgQkFScwo+IC0gKgo+IC0gKiBSZXR1cm5zIG9mZnNldCBvZiB0aGUg Y2FwYWJpbGl0eSwgb3IgMC4KPiAtICovCj4gLXN0YXRpYyBpbmxpbmUgaW50IHZpcnRpb19wY2lf ZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IGNmZ190eXBlLAo+IC0JCQkJ CSAgICAgdTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycykKPiAtewo+IC0JaW50IHBvczsK PiAtCj4gLQlmb3IgKHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX1ZO RFIpOwo+IC0JICAgICBwb3MgPiAwOwo+IC0JICAgICBwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFi aWxpdHkoZGV2LCBwb3MsIFBDSV9DQVBfSURfVk5EUikpIHsKPiAtCQl1OCB0eXBlLCBiYXI7Cj4g LQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBwb3MgKyBvZmZzZXRvZihzdHJ1Y3QgdmlydGlv X3BjaV9jYXAsCj4gLQkJCQkJCQkgY2ZnX3R5cGUpLAo+IC0JCQkJICAgICAmdHlwZSk7Cj4gLQkJ cGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBwb3MgKyBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3Bj aV9jYXAsCj4gLQkJCQkJCQkgYmFyKSwKPiAtCQkJCSAgICAgJmJhcik7Cj4gLQo+IC0JCS8qIEln bm9yZSBzdHJ1Y3R1cmVzIHdpdGggcmVzZXJ2ZWQgQkFSIHZhbHVlcyAqLwo+IC0JCWlmIChiYXIg PiAweDUpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAtCQlpZiAodHlwZSA9PSBjZmdfdHlwZSkgewo+ IC0JCQlpZiAocGNpX3Jlc291cmNlX2xlbihkZXYsIGJhcikgJiYKPiAtCQkJICAgIHBjaV9yZXNv dXJjZV9mbGFncyhkZXYsIGJhcikgJiBpb3Jlc291cmNlX3R5cGVzKSB7Cj4gLQkJCQkqYmFycyB8 PSAoMSA8PCBiYXIpOwo+IC0JCQkJcmV0dXJuIHBvczsKPiAtCQkJfQo+IC0JCX0KPiAtCX0KPiAt CXJldHVybiAwOwo+IC19Cj4gLQo+IC0vKiBUaGlzIGlzIHBhcnQgb2YgdGhlIEFCSS4gIERvbid0 IHNjcmV3IHdpdGggaXQuICovCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19vZmZzZXRzKHZv aWQpCj4gLXsKPiAtCS8qIE5vdGU6IGRpc2sgc3BhY2Ugd2FzIGhhcm1lZCBpbiBjb21waWxhdGlv biBvZiB0aGlzIGZ1bmN0aW9uLiAqLwo+IC0JQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ0FQX1ZO RFIgIT0KPiAtCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NhcCwgY2FwX3ZuZHIp KTsKPiAtCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NBUF9ORVhUICE9Cj4gLQkJICAgICBvZmZz ZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jYXAsIGNhcF9uZXh0KSk7Cj4gLQlCVUlMRF9CVUdfT04o VklSVElPX1BDSV9DQVBfTEVOICE9Cj4gLQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3Bj aV9jYXAsIGNhcF9sZW4pKTsKPiAtCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NBUF9DRkdfVFlQ RSAhPQo+IC0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY2FwLCBjZmdfdHlwZSkp Owo+IC0JQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ0FQX0JBUiAhPQo+IC0JCSAgICAgb2Zmc2V0 b2Yoc3RydWN0IHZpcnRpb19wY2lfY2FwLCBiYXIpKTsKPiAtCUJVSUxEX0JVR19PTihWSVJUSU9f UENJX0NBUF9PRkZTRVQgIT0KPiAtCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2Nh cCwgb2Zmc2V0KSk7Cj4gLQlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DQVBfTEVOR1RIICE9Cj4g LQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jYXAsIGxlbmd0aCkpOwo+IC0JQlVJ TERfQlVHX09OKFZJUlRJT19QQ0lfTk9USUZZX0NBUF9NVUxUICE9Cj4gLQkJICAgICBvZmZzZXRv ZihzdHJ1Y3QgdmlydGlvX3BjaV9ub3RpZnlfY2FwLAo+IC0JCQkgICAgICBub3RpZnlfb2ZmX211 bHRpcGxpZXIpKTsKPiAtCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1PTl9ERlNFTEVDVCAh PQo+IC0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywKPiAtCQkJ ICAgICAgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0KSk7Cj4gLQlCVUlMRF9CVUdfT04oVklSVElPX1BD SV9DT01NT05fREYgIT0KPiAtCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1v bl9jZmcsIGRldmljZV9mZWF0dXJlKSk7Cj4gLQlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01N T05fR0ZTRUxFQ1QgIT0KPiAtCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1v bl9jZmcsCj4gLQkJCSAgICAgIGd1ZXN0X2ZlYXR1cmVfc2VsZWN0KSk7Cj4gLQlCVUlMRF9CVUdf T04oVklSVElPX1BDSV9DT01NT05fR0YgIT0KPiAtCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0 aW9fcGNpX2NvbW1vbl9jZmcsIGd1ZXN0X2ZlYXR1cmUpKTsKPiAtCUJVSUxEX0JVR19PTihWSVJU SU9fUENJX0NPTU1PTl9NU0lYICE9Cj4gLQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3Bj aV9jb21tb25fY2ZnLCBtc2l4X2NvbmZpZykpOwo+IC0JQlVJTERfQlVHX09OKFZJUlRJT19QQ0lf Q09NTU9OX05VTVEgIT0KPiAtCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1v bl9jZmcsIG51bV9xdWV1ZXMpKTsKPiAtCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1PTl9T VEFUVVMgIT0KPiAtCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcs IGRldmljZV9zdGF0dXMpKTsKPiAtCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1PTl9DRkdH RU5FUkFUSU9OICE9Cj4gLQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25f Y2ZnLCBjb25maWdfZ2VuZXJhdGlvbikpOwo+IC0JQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09N TU9OX1FfU0VMRUNUICE9Cj4gLQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21t b25fY2ZnLCBxdWV1ZV9zZWxlY3QpKTsKPiAtCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1P Tl9RX1NJWkUgIT0KPiAtCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9j ZmcsIHF1ZXVlX3NpemUpKTsKPiAtCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1PTl9RX01T SVggIT0KPiAtCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIHF1 ZXVlX21zaXhfdmVjdG9yKSk7Cj4gLQlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fUV9F TkFCTEUgIT0KPiAtCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcs IHF1ZXVlX2VuYWJsZSkpOwo+IC0JQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX1FfTk9G RiAhPQo+IC0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywgcXVl dWVfbm90aWZ5X29mZikpOwo+IC0JQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX1FfREVT Q0xPICE9Cj4gLQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBx dWV1ZV9kZXNjX2xvKSk7Cj4gLQlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fUV9ERVND SEkgIT0KPiAtCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIHF1 ZXVlX2Rlc2NfaGkpKTsKPiAtCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1PTl9RX0FWQUlM TE8gIT0KPiAtCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIHF1 ZXVlX2F2YWlsX2xvKSk7Cj4gLQlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fUV9BVkFJ TEhJICE9Cj4gLQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBx dWV1ZV9hdmFpbF9oaSkpOwo+IC0JQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX1FfVVNF RExPICE9Cj4gLQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBx dWV1ZV91c2VkX2xvKSk7Cj4gLQlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fUV9VU0VE SEkgIT0KPiAtCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIHF1 ZXVlX3VzZWRfaGkpKTsKPiAtfQo+IC0KPiAtLyoKPiAtICogdnBfbW9kZXJuX3Byb2JlOiBwcm9i ZSB0aGUgbW9kZXJuIHZpcnRpbyBwY2kgZGV2aWNlLCBub3RlIHRoYXQgdGhlCj4gLSAqIGNhbGxl ciBpcyByZXF1aXJlZCB0byBlbmFibGUgUENJIGRldmljZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1 bmN0aW9uLgo+IC0gKiBAbWRldjogdGhlIG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQo+IC0gKgo+ IC0gKiBSZXR1cm4gMCBvbiBzdWNjZWVkIG90aGVyd2lzZSBmYWlsCj4gLSAqLwo+IC1zdGF0aWMg aW50IHZwX21vZGVybl9wcm9iZShzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2 KQo+IC17Cj4gLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IG1kZXYtPnBjaV9kZXY7Cj4gLQlp bnQgZXJyLCBjb21tb24sIGlzciwgbm90aWZ5LCBkZXZpY2U7Cj4gLQl1MzIgbm90aWZ5X2xlbmd0 aDsKPiAtCXUzMiBub3RpZnlfb2Zmc2V0Owo+IC0KPiAtCWNoZWNrX29mZnNldHMoKTsKPiAtCj4g LQltZGV2LT5wY2lfZGV2ID0gcGNpX2RldjsKPiAtCj4gLQkvKiBXZSBvbmx5IG93biBkZXZpY2Vz ID49IDB4MTAwMCBhbmQgPD0gMHgxMDdmOiBsZWF2ZSB0aGUgcmVzdC4gKi8KPiAtCWlmIChwY2lf ZGV2LT5kZXZpY2UgPCAweDEwMDAgfHwgcGNpX2Rldi0+ZGV2aWNlID4gMHgxMDdmKQo+IC0JCXJl dHVybiAtRU5PREVWOwo+IC0KPiAtCWlmIChwY2lfZGV2LT5kZXZpY2UgPCAweDEwNDApIHsKPiAt CQkvKiBUcmFuc2l0aW9uYWwgZGV2aWNlczogdXNlIHRoZSBQQ0kgc3Vic3lzdGVtIGRldmljZSBp ZCBhcwo+IC0JCSAqIHZpcnRpbyBkZXZpY2UgaWQsIHNhbWUgYXMgbGVnYWN5IGRyaXZlciBhbHdh eXMgZGlkLgo+IC0JCSAqLwo+IC0JCW1kZXYtPmlkLmRldmljZSA9IHBjaV9kZXYtPnN1YnN5c3Rl bV9kZXZpY2U7Cj4gLQl9IGVsc2Ugewo+IC0JCS8qIE1vZGVybiBkZXZpY2VzOiBzaW1wbHkgdXNl IFBDSSBkZXZpY2UgaWQsIGJ1dCBzdGFydCBmcm9tIDB4MTA0MC4gKi8KPiAtCQltZGV2LT5pZC5k ZXZpY2UgPSBwY2lfZGV2LT5kZXZpY2UgLSAweDEwNDA7Cj4gLQl9Cj4gLQltZGV2LT5pZC52ZW5k b3IgPSBwY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yOwo+IC0KPiAtCS8qIGNoZWNrIGZvciBhIGNv bW1vbiBjb25maWc6IGlmIG5vdCwgdXNlIGxlZ2FjeSBtb2RlIChiYXIgMCkuICovCj4gLQljb21t b24gPSB2aXJ0aW9fcGNpX2ZpbmRfY2FwYWJpbGl0eShwY2lfZGV2LCBWSVJUSU9fUENJX0NBUF9D T01NT05fQ0ZHLAo+IC0JCQkJCSAgICBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sCj4g LQkJCQkJICAgICZtZGV2LT5tb2Rlcm5fYmFycyk7Cj4gLQlpZiAoIWNvbW1vbikgewo+IC0JCWRl dl9pbmZvKCZwY2lfZGV2LT5kZXYsCj4gLQkJCSAidmlydGlvX3BjaTogbGVhdmluZyBmb3IgbGVn YWN5IGRyaXZlclxuIik7Cj4gLQkJcmV0dXJuIC1FTk9ERVY7Cj4gLQl9Cj4gLQo+IC0JLyogSWYg Y29tbW9uIGlzIHRoZXJlLCB0aGVzZSBzaG91bGQgYmUgdG9vLi4uICovCj4gLQlpc3IgPSB2aXJ0 aW9fcGNpX2ZpbmRfY2FwYWJpbGl0eShwY2lfZGV2LCBWSVJUSU9fUENJX0NBUF9JU1JfQ0ZHLAo+ IC0JCQkJCSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sCj4gLQkJCQkJICZtZGV2LT5t b2Rlcm5fYmFycyk7Cj4gLQlub3RpZnkgPSB2aXJ0aW9fcGNpX2ZpbmRfY2FwYWJpbGl0eShwY2lf ZGV2LCBWSVJUSU9fUENJX0NBUF9OT1RJRllfQ0ZHLAo+IC0JCQkJCSAgICBJT1JFU09VUkNFX0lP IHwgSU9SRVNPVVJDRV9NRU0sCj4gLQkJCQkJICAgICZtZGV2LT5tb2Rlcm5fYmFycyk7Cj4gLQlp ZiAoIWlzciB8fCAhbm90aWZ5KSB7Cj4gLQkJZGV2X2VycigmcGNpX2Rldi0+ZGV2LAo+IC0JCQki dmlydGlvX3BjaTogbWlzc2luZyBjYXBhYmlsaXRpZXMgJWkvJWkvJWlcbiIsCj4gLQkJCWNvbW1v biwgaXNyLCBub3RpZnkpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWVyciA9 IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoJnBjaV9kZXYtPmRldiwgRE1BX0JJVF9NQVNLKDY0 KSk7Cj4gLQlpZiAoZXJyKQo+IC0JCWVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoJnBj aV9kZXYtPmRldiwKPiAtCQkJCQkJRE1BX0JJVF9NQVNLKDMyKSk7Cj4gLQlpZiAoZXJyKQo+IC0J CWRldl93YXJuKCZwY2lfZGV2LT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIDY0LWJpdCBvciAzMi1i aXQgRE1BLiAgVHJ5aW5nIHRvIGNvbnRpbnVlLCBidXQgdGhpcyBtaWdodCBub3Qgd29yay5cbiIp Owo+IC0KPiAtCS8qIERldmljZSBjYXBhYmlsaXR5IGlzIG9ubHkgbWFuZGF0b3J5IGZvciBkZXZp Y2VzIHRoYXQgaGF2ZQo+IC0JICogZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCj4gLQkg Ki8KPiAtCWRldmljZSA9IHZpcnRpb19wY2lfZmluZF9jYXBhYmlsaXR5KHBjaV9kZXYsIFZJUlRJ T19QQ0lfQ0FQX0RFVklDRV9DRkcsCj4gLQkJCQkJICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09V UkNFX01FTSwKPiAtCQkJCQkgICAgJm1kZXYtPm1vZGVybl9iYXJzKTsKPiAtCj4gLQllcnIgPSBw Y2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHBjaV9kZXYsIG1kZXYtPm1vZGVybl9iYXJzLAo+ IC0JCQkJCSAgICJ2aXJ0aW8tcGNpLW1vZGVybiIpOwo+IC0JaWYgKGVycikKPiAtCQlyZXR1cm4g ZXJyOwo+IC0KPiAtCWVyciA9IC1FSU5WQUw7Cj4gLQltZGV2LT5jb21tb24gPSB2cF9tb2Rlcm5f bWFwX2NhcGFiaWxpdHkobWRldiwgY29tbW9uLAo+IC0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB2 aXJ0aW9fcGNpX2NvbW1vbl9jZmcpLCA0LAo+IC0JCQkJICAgICAgMCwgc2l6ZW9mKHN0cnVjdCB2 aXJ0aW9fcGNpX2NvbW1vbl9jZmcpLAo+IC0JCQkJICAgICAgTlVMTCk7Cj4gLQlpZiAoIW1kZXYt PmNvbW1vbikKPiAtCQlnb3RvIGVycl9tYXBfY29tbW9uOwo+IC0JbWRldi0+aXNyID0gdnBfbW9k ZXJuX21hcF9jYXBhYmlsaXR5KG1kZXYsIGlzciwgc2l6ZW9mKHU4KSwgMSwKPiAtCQkJCQkgICAg IDAsIDEsCj4gLQkJCQkJICAgICBOVUxMKTsKPiAtCWlmICghbWRldi0+aXNyKQo+IC0JCWdvdG8g ZXJyX21hcF9pc3I7Cj4gLQo+IC0JLyogUmVhZCBub3RpZnlfb2ZmX211bHRpcGxpZXIgZnJvbSBj b25maWcgc3BhY2UuICovCj4gLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2RldiwKPiAtCQkJ ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfbm90aWZ5X2NhcCwKPiAt CQkJCQkJbm90aWZ5X29mZl9tdWx0aXBsaWVyKSwKPiAtCQkJICAgICAgJm1kZXYtPm5vdGlmeV9v ZmZzZXRfbXVsdGlwbGllcik7Cj4gLQkvKiBSZWFkIG5vdGlmeSBsZW5ndGggYW5kIG9mZnNldCBm cm9tIGNvbmZpZyBzcGFjZS4gKi8KPiAtCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2lfZGV2LAo+ IC0JCQkgICAgICBub3RpZnkgKyBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9ub3RpZnlfY2Fw LAo+IC0JCQkJCQljYXAubGVuZ3RoKSwKPiAtCQkJICAgICAgJm5vdGlmeV9sZW5ndGgpOwo+IC0K PiAtCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2lfZGV2LAo+IC0JCQkgICAgICBub3RpZnkgKyBv ZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9ub3RpZnlfY2FwLAo+IC0JCQkJCQljYXAub2Zmc2V0 KSwKPiAtCQkJICAgICAgJm5vdGlmeV9vZmZzZXQpOwo+IC0KPiAtCS8qIFdlIGRvbid0IGtub3cg aG93IG1hbnkgVlFzIHdlJ2xsIG1hcCwgYWhlYWQgb2YgdGhlIHRpbWUuCj4gLQkgKiBJZiBub3Rp ZnkgbGVuZ3RoIGlzIHNtYWxsLCBtYXAgaXQgYWxsIG5vdy4KPiAtCSAqIE90aGVyd2lzZSwgbWFw IGVhY2ggVlEgaW5kaXZpZHVhbGx5IGxhdGVyLgo+IC0JICovCj4gLQlpZiAoKHU2NClub3RpZnlf bGVuZ3RoICsgKG5vdGlmeV9vZmZzZXQgJSBQQUdFX1NJWkUpIDw9IFBBR0VfU0laRSkgewo+IC0J CW1kZXYtPm5vdGlmeV9iYXNlID0gdnBfbW9kZXJuX21hcF9jYXBhYmlsaXR5KG1kZXYsIG5vdGlm eSwKPiAtCQkJCQkJCSAgICAgMiwgMiwKPiAtCQkJCQkJCSAgICAgMCwgbm90aWZ5X2xlbmd0aCwK PiAtCQkJCQkJCSAgICAgJm1kZXYtPm5vdGlmeV9sZW4pOwo+IC0JCWlmICghbWRldi0+bm90aWZ5 X2Jhc2UpCj4gLQkJCWdvdG8gZXJyX21hcF9ub3RpZnk7Cj4gLQl9IGVsc2Ugewo+IC0JCW1kZXYt Pm5vdGlmeV9tYXBfY2FwID0gbm90aWZ5Owo+IC0JfQo+IC0KPiAtCS8qIEFnYWluLCB3ZSBkb24n dCBrbm93IGhvdyBtdWNoIHdlIHNob3VsZCBtYXAsIGJ1dCBQQUdFX1NJWkUKPiAtCSAqIGlzIG1v cmUgdGhhbiBlbm91Z2ggZm9yIGFsbCBleGlzdGluZyBkZXZpY2VzLgo+IC0JICovCj4gLQlpZiAo ZGV2aWNlKSB7Cj4gLQkJbWRldi0+ZGV2aWNlID0gdnBfbW9kZXJuX21hcF9jYXBhYmlsaXR5KG1k ZXYsIGRldmljZSwgMCwgNCwKPiAtCQkJCQkJCTAsIFBBR0VfU0laRSwKPiAtCQkJCQkJCSZtZGV2 LT5kZXZpY2VfbGVuKTsKPiAtCQlpZiAoIW1kZXYtPmRldmljZSkKPiAtCQkJZ290byBlcnJfbWFw X2RldmljZTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtCj4gLWVycl9tYXBfZGV2aWNlOgo+ IC0JaWYgKG1kZXYtPm5vdGlmeV9iYXNlKQo+IC0JCXBjaV9pb3VubWFwKHBjaV9kZXYsIG1kZXYt Pm5vdGlmeV9iYXNlKTsKPiAtZXJyX21hcF9ub3RpZnk6Cj4gLQlwY2lfaW91bm1hcChwY2lfZGV2 LCBtZGV2LT5pc3IpOwo+IC1lcnJfbWFwX2lzcjoKPiAtCXBjaV9pb3VubWFwKHBjaV9kZXYsIG1k ZXYtPmNvbW1vbik7Cj4gLWVycl9tYXBfY29tbW9uOgo+IC0JcmV0dXJuIGVycjsKPiAtfQo+IC0K PiAgLyogdGhlIFBDSSBwcm9iaW5nIGZ1bmN0aW9uICovCj4gIGludCB2aXJ0aW9fcGNpX21vZGVy bl9wcm9iZShzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldikKPiAgewo+IEBAIC0xMDYz LDIzICs0NjMsNiBAQCBpbnQgdmlydGlvX3BjaV9tb2Rlcm5fcHJvYmUoc3RydWN0IHZpcnRpb19w Y2lfZGV2aWNlICp2cF9kZXYpCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtLyoKPiAtICogdnBf bW9kZXJuX3Byb2JlOiByZW1vdmUgYW5kIGNsZWFudXAgdGhlIG1vZGVybiB2aXJ0aW8gcGNpIGRl dmljZQo+IC0gKiBAbWRldjogdGhlIG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQo+IC0gKi8KPiAt c3RhdGljIHZvaWQgdnBfbW9kZXJuX3JlbW92ZShzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2 aWNlICptZGV2KQo+IC17Cj4gLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IG1kZXYtPnBjaV9k ZXY7Cj4gLQo+IC0JaWYgKG1kZXYtPmRldmljZSkKPiAtCQlwY2lfaW91bm1hcChwY2lfZGV2LCBt ZGV2LT5kZXZpY2UpOwo+IC0JaWYgKG1kZXYtPm5vdGlmeV9iYXNlKQo+IC0JCXBjaV9pb3VubWFw KHBjaV9kZXYsIG1kZXYtPm5vdGlmeV9iYXNlKTsKPiAtCXBjaV9pb3VubWFwKHBjaV9kZXYsIG1k ZXYtPmlzcik7Cj4gLQlwY2lfaW91bm1hcChwY2lfZGV2LCBtZGV2LT5jb21tb24pOwo+IC0JcGNp X3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwY2lfZGV2LCBtZGV2LT5tb2Rlcm5fYmFycyk7Cj4g LX0KPiAtCj4gIHZvaWQgdmlydGlvX3BjaV9tb2Rlcm5fcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fcGNp X2RldmljZSAqdnBfZGV2KQo+ICB7Cj4gIAlzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNl ICptZGV2ID0gJnZwX2Rldi0+bWRldjsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmly dGlvX3BjaV9tb2Rlcm5fZGV2LmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybl9k ZXYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5jYmQ2Njc0 OTZiYjEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9t b2Rlcm5fZGV2LmMKPiBAQCAtMCwwICsxLDU5OSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMC1vci1sYXRlcgo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19wY2lf bW9kZXJuLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3BjaS5oPgo+ICsKPiArLyoKPiArICogdnBfbW9kZXJuX21hcF9jYXBhYmlsaXR5IC0gbWFwIGEg cGFydCBvZiB2aXJ0aW8gcGNpIGNhcGFiaWxpdHkKPiArICogQG1kZXY6IHRoZSBtb2Rlcm4gdmly dGlvLXBjaSBkZXZpY2UKPiArICogQG9mZjogb2Zmc2V0IG9mIHRoZSBjYXBhYmlsaXR5Cj4gKyAq IEBtaW5sZW46IG1pbmltYWwgbGVuZ3RoIG9mIHRoZSBjYXBhYmlsaXR5Cj4gKyAqIEBhbGlnbjog YWxpZ24gcmVxdWlyZW1lbnQKPiArICogQHN0YXJ0OiBzdGFydCBmcm9tIHRoZSBjYXBhYmlsaXR5 Cj4gKyAqIEBzaXplOiBtYXAgc2l6ZQo+ICsgKiBAbGVuOiB0aGUgbGVuZ3RoIHRoYXQgaXMgYWN0 dWFsbHkgbWFwcGVkCj4gKyAqCj4gKyAqIFJldHVybnMgdGhlIGlvIGFkZHJlc3Mgb2YgZm9yIHRo ZSBwYXJ0IG9mIHRoZSBjYXBhYmlsaXR5Cj4gKyAqLwo+ICt2b2lkIF9faW9tZW0gKnZwX21vZGVy bl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2LCBp bnQgb2ZmLAo+ICsJCQkJICAgICAgIHNpemVfdCBtaW5sZW4sCj4gKwkJCQkgICAgICAgdTMyIGFs aWduLAo+ICsJCQkJICAgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsCj4gKwkJCQkgICAgICAgc2l6 ZV90ICpsZW4pCj4gK3sKPiArCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBtZGV2LT5wY2lfZGV2Owo+ ICsJdTggYmFyOwo+ICsJdTMyIG9mZnNldCwgbGVuZ3RoOwo+ICsJdm9pZCBfX2lvbWVtICpwOwo+ ICsKPiArCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgb2ZmICsgb2Zmc2V0b2Yoc3RydWN0IHZp cnRpb19wY2lfY2FwLAo+ICsJCQkJCQkgYmFyKSwKPiArCQkJICAgICAmYmFyKTsKPiArCXBjaV9y ZWFkX2NvbmZpZ19kd29yZChkZXYsIG9mZiArIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2Nh cCwgb2Zmc2V0KSwKPiArCQkJICAgICAmb2Zmc2V0KTsKPiArCXBjaV9yZWFkX2NvbmZpZ19kd29y ZChkZXYsIG9mZiArIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NhcCwgbGVuZ3RoKSwKPiAr CQkJICAgICAgJmxlbmd0aCk7Cj4gKwo+ICsJaWYgKGxlbmd0aCA8PSBzdGFydCkgewo+ICsJCWRl dl9lcnIoJmRldi0+ZGV2LAo+ICsJCQkidmlydGlvX3BjaTogYmFkIGNhcGFiaWxpdHkgbGVuICV1 ICg+JXUgZXhwZWN0ZWQpXG4iLAo+ICsJCQlsZW5ndGgsIHN0YXJ0KTsKPiArCQlyZXR1cm4gTlVM TDsKPiArCX0KPiArCj4gKwlpZiAobGVuZ3RoIC0gc3RhcnQgPCBtaW5sZW4pIHsKPiArCQlkZXZf ZXJyKCZkZXYtPmRldiwKPiArCQkJInZpcnRpb19wY2k6IGJhZCBjYXBhYmlsaXR5IGxlbiAldSAo Pj0lenUgZXhwZWN0ZWQpXG4iLAo+ICsJCQlsZW5ndGgsIG1pbmxlbik7Cj4gKwkJcmV0dXJuIE5V TEw7Cj4gKwl9Cj4gKwo+ICsJbGVuZ3RoIC09IHN0YXJ0Owo+ICsKPiArCWlmIChzdGFydCArIG9m ZnNldCA8IG9mZnNldCkgewo+ICsJCWRldl9lcnIoJmRldi0+ZGV2LAo+ICsJCQkidmlydGlvX3Bj aTogbWFwIHdyYXAtYXJvdW5kICV1KyV1XG4iLAo+ICsJCQlzdGFydCwgb2Zmc2V0KTsKPiArCQly ZXR1cm4gTlVMTDsKPiArCX0KPiArCj4gKwlvZmZzZXQgKz0gc3RhcnQ7Cj4gKwo+ICsJaWYgKG9m ZnNldCAmIChhbGlnbiAtIDEpKSB7Cj4gKwkJZGV2X2VycigmZGV2LT5kZXYsCj4gKwkJCSJ2aXJ0 aW9fcGNpOiBvZmZzZXQgJXUgbm90IGFsaWduZWQgdG8gJXVcbiIsCj4gKwkJCW9mZnNldCwgYWxp Z24pOwo+ICsJCXJldHVybiBOVUxMOwo+ICsJfQo+ICsKPiArCWlmIChsZW5ndGggPiBzaXplKQo+ ICsJCWxlbmd0aCA9IHNpemU7Cj4gKwo+ICsJaWYgKGxlbikKPiArCQkqbGVuID0gbGVuZ3RoOwo+ ICsKPiArCWlmIChtaW5sZW4gKyBvZmZzZXQgPCBtaW5sZW4gfHwKPiArCSAgICBtaW5sZW4gKyBv ZmZzZXQgPiBwY2lfcmVzb3VyY2VfbGVuKGRldiwgYmFyKSkgewo+ICsJCWRldl9lcnIoJmRldi0+ ZGV2LAo+ICsJCQkidmlydGlvX3BjaTogbWFwIHZpcnRpbyAlenVAJXUgIgo+ICsJCQkib3V0IG9m IHJhbmdlIG9uIGJhciAlaSBsZW5ndGggJWx1XG4iLAo+ICsJCQltaW5sZW4sIG9mZnNldCwKPiAr CQkJYmFyLCAodW5zaWduZWQgbG9uZylwY2lfcmVzb3VyY2VfbGVuKGRldiwgYmFyKSk7Cj4gKwkJ cmV0dXJuIE5VTEw7Cj4gKwl9Cj4gKwo+ICsJcCA9IHBjaV9pb21hcF9yYW5nZShkZXYsIGJhciwg b2Zmc2V0LCBsZW5ndGgpOwo+ICsJaWYgKCFwKQo+ICsJCWRldl9lcnIoJmRldi0+ZGV2LAo+ICsJ CQkidmlydGlvX3BjaTogdW5hYmxlIHRvIG1hcCB2aXJ0aW8gJXVAJXUgb24gYmFyICVpXG4iLAo+ ICsJCQlsZW5ndGgsIG9mZnNldCwgYmFyKTsKPiArCXJldHVybiBwOwo+ICt9Cj4gK0VYUE9SVF9T WU1CT0xfR1BMKHZwX21vZGVybl9tYXBfY2FwYWJpbGl0eSk7Cj4gKwo+ICsvKioKPiArICogdmly dGlvX3BjaV9maW5kX2NhcGFiaWxpdHkgLSB3YWxrIGNhcGFiaWxpdGllcyB0byBmaW5kIGRldmlj ZSBpbmZvLgo+ICsgKiBAZGV2OiB0aGUgcGNpIGRldmljZQo+ICsgKiBAY2ZnX3R5cGU6IHRoZSBW SVJUSU9fUENJX0NBUF8qIHZhbHVlIHdlIHNlZWsKPiArICogQGlvcmVzb3VyY2VfdHlwZXM6IElP UkVTT1VSQ0VfTUVNIGFuZC9vciBJT1JFU09VUkNFX0lPLgo+ICsgKiBAYmFyczogdGhlIGJpdG1h c2sgb2YgQkFScwo+ICsgKgo+ICsgKiBSZXR1cm5zIG9mZnNldCBvZiB0aGUgY2FwYWJpbGl0eSwg b3IgMC4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IHZpcnRpb19wY2lfZmluZF9jYXBhYmls aXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IGNmZ190eXBlLAo+ICsJCQkJCSAgICAgdTMyIGlv cmVzb3VyY2VfdHlwZXMsIGludCAqYmFycykKPiArewo+ICsJaW50IHBvczsKPiArCj4gKwlmb3Ig KHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX1ZORFIpOwo+ICsJICAg ICBwb3MgPiAwOwo+ICsJICAgICBwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkoZGV2LCBw b3MsIFBDSV9DQVBfSURfVk5EUikpIHsKPiArCQl1OCB0eXBlLCBiYXI7Cj4gKwkJcGNpX3JlYWRf Y29uZmlnX2J5dGUoZGV2LCBwb3MgKyBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jYXAsCj4g KwkJCQkJCQkgY2ZnX3R5cGUpLAo+ICsJCQkJICAgICAmdHlwZSk7Cj4gKwkJcGNpX3JlYWRfY29u ZmlnX2J5dGUoZGV2LCBwb3MgKyBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jYXAsCj4gKwkJ CQkJCQkgYmFyKSwKPiArCQkJCSAgICAgJmJhcik7Cj4gKwo+ICsJCS8qIElnbm9yZSBzdHJ1Y3R1 cmVzIHdpdGggcmVzZXJ2ZWQgQkFSIHZhbHVlcyAqLwo+ICsJCWlmIChiYXIgPiAweDUpCj4gKwkJ CWNvbnRpbnVlOwo+ICsKPiArCQlpZiAodHlwZSA9PSBjZmdfdHlwZSkgewo+ICsJCQlpZiAocGNp X3Jlc291cmNlX2xlbihkZXYsIGJhcikgJiYKPiArCQkJICAgIHBjaV9yZXNvdXJjZV9mbGFncyhk ZXYsIGJhcikgJiBpb3Jlc291cmNlX3R5cGVzKSB7Cj4gKwkJCQkqYmFycyB8PSAoMSA8PCBiYXIp Owo+ICsJCQkJcmV0dXJuIHBvczsKPiArCQkJfQo+ICsJCX0KPiArCX0KPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICsvKiBUaGlzIGlzIHBhcnQgb2YgdGhlIEFCSS4gIERvbid0IHNjcmV3IHdpdGgg aXQuICovCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19vZmZzZXRzKHZvaWQpCj4gK3sKPiAr CS8qIE5vdGU6IGRpc2sgc3BhY2Ugd2FzIGhhcm1lZCBpbiBjb21waWxhdGlvbiBvZiB0aGlzIGZ1 bmN0aW9uLiAqLwo+ICsJQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ0FQX1ZORFIgIT0KPiArCQkg ICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NhcCwgY2FwX3ZuZHIpKTsKPiArCUJVSUxE X0JVR19PTihWSVJUSU9fUENJX0NBUF9ORVhUICE9Cj4gKwkJICAgICBvZmZzZXRvZihzdHJ1Y3Qg dmlydGlvX3BjaV9jYXAsIGNhcF9uZXh0KSk7Cj4gKwlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9D QVBfTEVOICE9Cj4gKwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jYXAsIGNhcF9s ZW4pKTsKPiArCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NBUF9DRkdfVFlQRSAhPQo+ICsJCSAg ICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY2FwLCBjZmdfdHlwZSkpOwo+ICsJQlVJTERf QlVHX09OKFZJUlRJT19QQ0lfQ0FQX0JBUiAhPQo+ICsJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZp cnRpb19wY2lfY2FwLCBiYXIpKTsKPiArCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NBUF9PRkZT RVQgIT0KPiArCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NhcCwgb2Zmc2V0KSk7 Cj4gKwlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DQVBfTEVOR1RIICE9Cj4gKwkJICAgICBvZmZz ZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jYXAsIGxlbmd0aCkpOwo+ICsJQlVJTERfQlVHX09OKFZJ UlRJT19QQ0lfTk9USUZZX0NBUF9NVUxUICE9Cj4gKwkJICAgICBvZmZzZXRvZihzdHJ1Y3Qgdmly dGlvX3BjaV9ub3RpZnlfY2FwLAo+ICsJCQkgICAgICBub3RpZnlfb2ZmX211bHRpcGxpZXIpKTsK PiArCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1PTl9ERlNFTEVDVCAhPQo+ICsJCSAgICAg b2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywKPiArCQkJICAgICAgZGV2aWNl X2ZlYXR1cmVfc2VsZWN0KSk7Cj4gKwlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fREYg IT0KPiArCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIGRldmlj ZV9mZWF0dXJlKSk7Cj4gKwlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fR0ZTRUxFQ1Qg IT0KPiArCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsCj4gKwkJ CSAgICAgIGd1ZXN0X2ZlYXR1cmVfc2VsZWN0KSk7Cj4gKwlCVUlMRF9CVUdfT04oVklSVElPX1BD SV9DT01NT05fR0YgIT0KPiArCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1v bl9jZmcsIGd1ZXN0X2ZlYXR1cmUpKTsKPiArCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1P Tl9NU0lYICE9Cj4gKwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2Zn LCBtc2l4X2NvbmZpZykpOwo+ICsJQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX05VTVEg IT0KPiArCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIG51bV9x dWV1ZXMpKTsKPiArCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1PTl9TVEFUVVMgIT0KPiAr CQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIGRldmljZV9zdGF0 dXMpKTsKPiArCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1PTl9DRkdHRU5FUkFUSU9OICE9 Cj4gKwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBjb25maWdf Z2VuZXJhdGlvbikpOwo+ICsJQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX1FfU0VMRUNU ICE9Cj4gKwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBxdWV1 ZV9zZWxlY3QpKTsKPiArCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1PTl9RX1NJWkUgIT0K PiArCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIHF1ZXVlX3Np emUpKTsKPiArCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1PTl9RX01TSVggIT0KPiArCQkg ICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIHF1ZXVlX21zaXhfdmVj dG9yKSk7Cj4gKwlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fUV9FTkFCTEUgIT0KPiAr CQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIHF1ZXVlX2VuYWJs ZSkpOwo+ICsJQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX1FfTk9GRiAhPQo+ICsJCSAg ICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywgcXVldWVfbm90aWZ5X29m ZikpOwo+ICsJQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX1FfREVTQ0xPICE9Cj4gKwkJ ICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBxdWV1ZV9kZXNjX2xv KSk7Cj4gKwlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fUV9ERVNDSEkgIT0KPiArCQkg ICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIHF1ZXVlX2Rlc2NfaGkp KTsKPiArCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1PTl9RX0FWQUlMTE8gIT0KPiArCQkg ICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIHF1ZXVlX2F2YWlsX2xv KSk7Cj4gKwlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fUV9BVkFJTEhJICE9Cj4gKwkJ ICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBxdWV1ZV9hdmFpbF9o aSkpOwo+ICsJQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX1FfVVNFRExPICE9Cj4gKwkJ ICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBxdWV1ZV91c2VkX2xv KSk7Cj4gKwlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fUV9VU0VESEkgIT0KPiArCQkg ICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIHF1ZXVlX3VzZWRfaGkp KTsKPiArfQo+ICsKPiArLyoKPiArICogdnBfbW9kZXJuX3Byb2JlOiBwcm9iZSB0aGUgbW9kZXJu IHZpcnRpbyBwY2kgZGV2aWNlLCBub3RlIHRoYXQgdGhlCj4gKyAqIGNhbGxlciBpcyByZXF1aXJl ZCB0byBlbmFibGUgUENJIGRldmljZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgo+ICsg KiBAbWRldjogdGhlIG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQo+ICsgKgo+ICsgKiBSZXR1cm4g MCBvbiBzdWNjZWVkIG90aGVyd2lzZSBmYWlsCj4gKyAqLwo+ICtpbnQgdnBfbW9kZXJuX3Byb2Jl KHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYpCj4gK3sKPiArCXN0cnVjdCBw Y2lfZGV2ICpwY2lfZGV2ID0gbWRldi0+cGNpX2RldjsKPiArCWludCBlcnIsIGNvbW1vbiwgaXNy LCBub3RpZnksIGRldmljZTsKPiArCXUzMiBub3RpZnlfbGVuZ3RoOwo+ICsJdTMyIG5vdGlmeV9v ZmZzZXQ7Cj4gKwo+ICsJY2hlY2tfb2Zmc2V0cygpOwo+ICsKPiArCW1kZXYtPnBjaV9kZXYgPSBw Y2lfZGV2Owo+ICsKPiArCS8qIFdlIG9ubHkgb3duIGRldmljZXMgPj0gMHgxMDAwIGFuZCA8PSAw eDEwN2Y6IGxlYXZlIHRoZSByZXN0LiAqLwo+ICsJaWYgKHBjaV9kZXYtPmRldmljZSA8IDB4MTAw MCB8fCBwY2lfZGV2LT5kZXZpY2UgPiAweDEwN2YpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ ICsJaWYgKHBjaV9kZXYtPmRldmljZSA8IDB4MTA0MCkgewo+ICsJCS8qIFRyYW5zaXRpb25hbCBk ZXZpY2VzOiB1c2UgdGhlIFBDSSBzdWJzeXN0ZW0gZGV2aWNlIGlkIGFzCj4gKwkJICogdmlydGlv IGRldmljZSBpZCwgc2FtZSBhcyBsZWdhY3kgZHJpdmVyIGFsd2F5cyBkaWQuCj4gKwkJICovCj4g KwkJbWRldi0+aWQuZGV2aWNlID0gcGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZTsKPiArCX0gZWxz ZSB7Cj4gKwkJLyogTW9kZXJuIGRldmljZXM6IHNpbXBseSB1c2UgUENJIGRldmljZSBpZCwgYnV0 IHN0YXJ0IGZyb20gMHgxMDQwLiAqLwo+ICsJCW1kZXYtPmlkLmRldmljZSA9IHBjaV9kZXYtPmRl dmljZSAtIDB4MTA0MDsKPiArCX0KPiArCW1kZXYtPmlkLnZlbmRvciA9IHBjaV9kZXYtPnN1YnN5 c3RlbV92ZW5kb3I7Cj4gKwo+ICsJLyogY2hlY2sgZm9yIGEgY29tbW9uIGNvbmZpZzogaWYgbm90 LCB1c2UgbGVnYWN5IG1vZGUgKGJhciAwKS4gKi8KPiArCWNvbW1vbiA9IHZpcnRpb19wY2lfZmlu ZF9jYXBhYmlsaXR5KHBjaV9kZXYsIFZJUlRJT19QQ0lfQ0FQX0NPTU1PTl9DRkcsCj4gKwkJCQkJ ICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSwKPiArCQkJCQkgICAgJm1kZXYtPm1v ZGVybl9iYXJzKTsKPiArCWlmICghY29tbW9uKSB7Cj4gKwkJZGV2X2luZm8oJnBjaV9kZXYtPmRl diwKPiArCQkJICJ2aXJ0aW9fcGNpOiBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXG4iKTsKPiAr CQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwkvKiBJZiBjb21tb24gaXMgdGhlcmUsIHRo ZXNlIHNob3VsZCBiZSB0b28uLi4gKi8KPiArCWlzciA9IHZpcnRpb19wY2lfZmluZF9jYXBhYmls aXR5KHBjaV9kZXYsIFZJUlRJT19QQ0lfQ0FQX0lTUl9DRkcsCj4gKwkJCQkJIElPUkVTT1VSQ0Vf SU8gfCBJT1JFU09VUkNFX01FTSwKPiArCQkJCQkgJm1kZXYtPm1vZGVybl9iYXJzKTsKPiArCW5v dGlmeSA9IHZpcnRpb19wY2lfZmluZF9jYXBhYmlsaXR5KHBjaV9kZXYsIFZJUlRJT19QQ0lfQ0FQ X05PVElGWV9DRkcsCj4gKwkJCQkJICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSwK PiArCQkJCQkgICAgJm1kZXYtPm1vZGVybl9iYXJzKTsKPiArCWlmICghaXNyIHx8ICFub3RpZnkp IHsKPiArCQlkZXZfZXJyKCZwY2lfZGV2LT5kZXYsCj4gKwkJCSJ2aXJ0aW9fcGNpOiBtaXNzaW5n IGNhcGFiaWxpdGllcyAlaS8laS8laVxuIiwKPiArCQkJY29tbW9uLCBpc3IsIG5vdGlmeSk7Cj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gZG1hX3NldF9tYXNrX2FuZF9j b2hlcmVudCgmcGNpX2Rldi0+ZGV2LCBETUFfQklUX01BU0soNjQpKTsKPiArCWlmIChlcnIpCj4g KwkJZXJyID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgmcGNpX2Rldi0+ZGV2LAo+ICsJCQkJ CQlETUFfQklUX01BU0soMzIpKTsKPiArCWlmIChlcnIpCj4gKwkJZGV2X3dhcm4oJnBjaV9kZXYt PmRldiwgIkZhaWxlZCB0byBlbmFibGUgNjQtYml0IG9yIDMyLWJpdCBETUEuICBUcnlpbmcgdG8g Y29udGludWUsIGJ1dCB0aGlzIG1pZ2h0IG5vdCB3b3JrLlxuIik7Cj4gKwo+ICsJLyogRGV2aWNl IGNhcGFiaWxpdHkgaXMgb25seSBtYW5kYXRvcnkgZm9yIGRldmljZXMgdGhhdCBoYXZlCj4gKwkg KiBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KPiArCSAqLwo+ICsJZGV2aWNlID0gdmly dGlvX3BjaV9maW5kX2NhcGFiaWxpdHkocGNpX2RldiwgVklSVElPX1BDSV9DQVBfREVWSUNFX0NG RywKPiArCQkJCQkgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLAo+ICsJCQkJCSAg ICAmbWRldi0+bW9kZXJuX2JhcnMpOwo+ICsKPiArCWVyciA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVk X3JlZ2lvbnMocGNpX2RldiwgbWRldi0+bW9kZXJuX2JhcnMsCj4gKwkJCQkJICAgInZpcnRpby1w Y2ktbW9kZXJuIik7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJZXJyID0g LUVJTlZBTDsKPiArCW1kZXYtPmNvbW1vbiA9IHZwX21vZGVybl9tYXBfY2FwYWJpbGl0eShtZGV2 LCBjb21tb24sCj4gKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2Nm ZyksIDQsCj4gKwkJCQkgICAgICAwLCBzaXplb2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2Nm ZyksCj4gKwkJCQkgICAgICBOVUxMKTsKPiArCWlmICghbWRldi0+Y29tbW9uKQo+ICsJCWdvdG8g ZXJyX21hcF9jb21tb247Cj4gKwltZGV2LT5pc3IgPSB2cF9tb2Rlcm5fbWFwX2NhcGFiaWxpdHko bWRldiwgaXNyLCBzaXplb2YodTgpLCAxLAo+ICsJCQkJCSAgICAgMCwgMSwKPiArCQkJCQkgICAg IE5VTEwpOwo+ICsJaWYgKCFtZGV2LT5pc3IpCj4gKwkJZ290byBlcnJfbWFwX2lzcjsKPiArCj4g KwkvKiBSZWFkIG5vdGlmeV9vZmZfbXVsdGlwbGllciBmcm9tIGNvbmZpZyBzcGFjZS4gKi8KPiAr CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2lfZGV2LAo+ICsJCQkgICAgICBub3RpZnkgKyBvZmZz ZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9ub3RpZnlfY2FwLAo+ICsJCQkJCQlub3RpZnlfb2ZmX211 bHRpcGxpZXIpLAo+ICsJCQkgICAgICAmbWRldi0+bm90aWZ5X29mZnNldF9tdWx0aXBsaWVyKTsK PiArCS8qIFJlYWQgbm90aWZ5IGxlbmd0aCBhbmQgb2Zmc2V0IGZyb20gY29uZmlnIHNwYWNlLiAq Lwo+ICsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9kZXYsCj4gKwkJCSAgICAgIG5vdGlmeSAr IG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX25vdGlmeV9jYXAsCj4gKwkJCQkJCWNhcC5sZW5n dGgpLAo+ICsJCQkgICAgICAmbm90aWZ5X2xlbmd0aCk7Cj4gKwo+ICsJcGNpX3JlYWRfY29uZmln X2R3b3JkKHBjaV9kZXYsCj4gKwkJCSAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB2aXJ0 aW9fcGNpX25vdGlmeV9jYXAsCj4gKwkJCQkJCWNhcC5vZmZzZXQpLAo+ICsJCQkgICAgICAmbm90 aWZ5X29mZnNldCk7Cj4gKwo+ICsJLyogV2UgZG9uJ3Qga25vdyBob3cgbWFueSBWUXMgd2UnbGwg bWFwLCBhaGVhZCBvZiB0aGUgdGltZS4KPiArCSAqIElmIG5vdGlmeSBsZW5ndGggaXMgc21hbGws IG1hcCBpdCBhbGwgbm93Lgo+ICsJICogT3RoZXJ3aXNlLCBtYXAgZWFjaCBWUSBpbmRpdmlkdWFs bHkgbGF0ZXIuCj4gKwkgKi8KPiArCWlmICgodTY0KW5vdGlmeV9sZW5ndGggKyAobm90aWZ5X29m ZnNldCAlIFBBR0VfU0laRSkgPD0gUEFHRV9TSVpFKSB7Cj4gKwkJbWRldi0+bm90aWZ5X2Jhc2Ug PSB2cF9tb2Rlcm5fbWFwX2NhcGFiaWxpdHkobWRldiwgbm90aWZ5LAo+ICsJCQkJCQkJICAgICAy LCAyLAo+ICsJCQkJCQkJICAgICAwLCBub3RpZnlfbGVuZ3RoLAo+ICsJCQkJCQkJICAgICAmbWRl di0+bm90aWZ5X2xlbik7Cj4gKwkJaWYgKCFtZGV2LT5ub3RpZnlfYmFzZSkKPiArCQkJZ290byBl cnJfbWFwX25vdGlmeTsKPiArCX0gZWxzZSB7Cj4gKwkJbWRldi0+bm90aWZ5X21hcF9jYXAgPSBu b3RpZnk7Cj4gKwl9Cj4gKwo+ICsJLyogQWdhaW4sIHdlIGRvbid0IGtub3cgaG93IG11Y2ggd2Ug c2hvdWxkIG1hcCwgYnV0IFBBR0VfU0laRQo+ICsJICogaXMgbW9yZSB0aGFuIGVub3VnaCBmb3Ig YWxsIGV4aXN0aW5nIGRldmljZXMuCj4gKwkgKi8KPiArCWlmIChkZXZpY2UpIHsKPiArCQltZGV2 LT5kZXZpY2UgPSB2cF9tb2Rlcm5fbWFwX2NhcGFiaWxpdHkobWRldiwgZGV2aWNlLCAwLCA0LAo+ ICsJCQkJCQkJMCwgUEFHRV9TSVpFLAo+ICsJCQkJCQkJJm1kZXYtPmRldmljZV9sZW4pOwo+ICsJ CWlmICghbWRldi0+ZGV2aWNlKQo+ICsJCQlnb3RvIGVycl9tYXBfZGV2aWNlOwo+ICsJfQo+ICsK PiArCXJldHVybiAwOwo+ICsKPiArZXJyX21hcF9kZXZpY2U6Cj4gKwlpZiAobWRldi0+bm90aWZ5 X2Jhc2UpCj4gKwkJcGNpX2lvdW5tYXAocGNpX2RldiwgbWRldi0+bm90aWZ5X2Jhc2UpOwo+ICtl cnJfbWFwX25vdGlmeToKPiArCXBjaV9pb3VubWFwKHBjaV9kZXYsIG1kZXYtPmlzcik7Cj4gK2Vy cl9tYXBfaXNyOgo+ICsJcGNpX2lvdW5tYXAocGNpX2RldiwgbWRldi0+Y29tbW9uKTsKPiArZXJy X21hcF9jb21tb246Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZw X21vZGVybl9wcm9iZSk7Cj4gKwo+ICsvKgo+ICsgKiB2cF9tb2Rlcm5fcHJvYmU6IHJlbW92ZSBh bmQgY2xlYW51cCB0aGUgbW9kZXJuIHZpcnRpbyBwY2kgZGV2aWNlCj4gKyAqIEBtZGV2OiB0aGUg bW9kZXJuIHZpcnRpby1wY2kgZGV2aWNlCj4gKyAqLwo+ICt2b2lkIHZwX21vZGVybl9yZW1vdmUo c3RydWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRldikKPiArewo+ICsJc3RydWN0IHBj aV9kZXYgKnBjaV9kZXYgPSBtZGV2LT5wY2lfZGV2Owo+ICsKPiArCWlmIChtZGV2LT5kZXZpY2Up Cj4gKwkJcGNpX2lvdW5tYXAocGNpX2RldiwgbWRldi0+ZGV2aWNlKTsKPiArCWlmIChtZGV2LT5u b3RpZnlfYmFzZSkKPiArCQlwY2lfaW91bm1hcChwY2lfZGV2LCBtZGV2LT5ub3RpZnlfYmFzZSk7 Cj4gKwlwY2lfaW91bm1hcChwY2lfZGV2LCBtZGV2LT5pc3IpOwo+ICsJcGNpX2lvdW5tYXAocGNp X2RldiwgbWRldi0+Y29tbW9uKTsKPiArCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGNp X2RldiwgbWRldi0+bW9kZXJuX2JhcnMpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZwX21v ZGVybl9yZW1vdmUpOwo+ICsKPiArLyoKPiArICogdnBfbW9kZXJuX2dldF9mZWF0dXJlcyAtIGdl dCBmZWF0dXJlcyBmcm9tIGRldmljZQo+ICsgKiBAbWRldjogdGhlIG1vZGVybiB2aXJ0aW8tcGNp IGRldmljZQo+ICsgKgo+ICsgKiBSZXR1cm5zIHRoZSBmZWF0dXJlcyByZWFkIGZyb20gdGhlIGRl dmljZQo+ICsgKi8KPiArdTY0IHZwX21vZGVybl9nZXRfZmVhdHVyZXMoc3RydWN0IHZpcnRpb19w Y2lfbW9kZXJuX2RldmljZSAqbWRldikKPiArewo+ICsJc3RydWN0IHZpcnRpb19wY2lfY29tbW9u X2NmZyBfX2lvbWVtICpjZmcgPSBtZGV2LT5jb21tb247Cj4gKwo+ICsJdTY0IGZlYXR1cmVzOwo+ ICsKPiArCXZwX2lvd3JpdGUzMigwLCAmY2ZnLT5kZXZpY2VfZmVhdHVyZV9zZWxlY3QpOwo+ICsJ ZmVhdHVyZXMgPSB2cF9pb3JlYWQzMigmY2ZnLT5kZXZpY2VfZmVhdHVyZSk7Cj4gKwl2cF9pb3dy aXRlMzIoMSwgJmNmZy0+ZGV2aWNlX2ZlYXR1cmVfc2VsZWN0KTsKPiArCWZlYXR1cmVzIHw9ICgo dTY0KXZwX2lvcmVhZDMyKCZjZmctPmRldmljZV9mZWF0dXJlKSA8PCAzMik7Cj4gKwo+ICsJcmV0 dXJuIGZlYXR1cmVzOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZwX21vZGVybl9nZXRfZmVh dHVyZXMpOwo+ICsKPiArLyoKPiArICogdnBfbW9kZXJuX3NldF9mZWF0dXJlcyAtIHNldCBmZWF0 dXJlcyB0byBkZXZpY2UKPiArICogQG1kZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UK PiArICogQGZlYXR1cmVzOiB0aGUgZmVhdHVyZXMgc2V0IHRvIGRldmljZQo+ICsgKi8KPiArdm9p ZCB2cF9tb2Rlcm5fc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2Ug Km1kZXYsCj4gKwkJCSAgICB1NjQgZmVhdHVyZXMpCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fcGNp X2NvbW1vbl9jZmcgX19pb21lbSAqY2ZnID0gbWRldi0+Y29tbW9uOwo+ICsKPiArCXZwX2lvd3Jp dGUzMigwLCAmY2ZnLT5ndWVzdF9mZWF0dXJlX3NlbGVjdCk7Cj4gKwl2cF9pb3dyaXRlMzIoKHUz MilmZWF0dXJlcywgJmNmZy0+Z3Vlc3RfZmVhdHVyZSk7Cj4gKwl2cF9pb3dyaXRlMzIoMSwgJmNm Zy0+Z3Vlc3RfZmVhdHVyZV9zZWxlY3QpOwo+ICsJdnBfaW93cml0ZTMyKGZlYXR1cmVzID4+IDMy LCAmY2ZnLT5ndWVzdF9mZWF0dXJlKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh2cF9tb2Rl cm5fc2V0X2ZlYXR1cmVzKTsKPiArCj4gKy8qCj4gKyAqIHZwX21vZGVybl9nZW5lcmF0aW9uIC0g Z2V0IHRoZSBkZXZpY2UgZ2VucmVhdGlvbgo+ICsgKiBAbWRldjogdGhlIG1vZGVybiB2aXJ0aW8t cGNpIGRldmljZQo+ICsgKgo+ICsgKiBSZXR1cm5zIHRoZSBnZW5yZWF0aW9uIHJlYWQgZnJvbSBk ZXZpY2UKPiArICovCj4gK3UzMiB2cF9tb2Rlcm5fZ2VuZXJhdGlvbihzdHJ1Y3QgdmlydGlvX3Bj aV9tb2Rlcm5fZGV2aWNlICptZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25f Y2ZnIF9faW9tZW0gKmNmZyA9IG1kZXYtPmNvbW1vbjsKPiArCj4gKwlyZXR1cm4gdnBfaW9yZWFk OCgmY2ZnLT5jb25maWdfZ2VuZXJhdGlvbik7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwodnBf bW9kZXJuX2dlbmVyYXRpb24pOwo+ICsKPiArLyoKPiArICogdnBfbW9kZXJuX2dldF9zdGF0dXMg LSBnZXQgdGhlIGRldmljZSBzdGF0dXMKPiArICogQG1kZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBj aSBkZXZpY2UKPiArICoKPiArICogUmV0dXJucyB0aGUgc3RhdHVzIHJlYWQgZnJvbSBkZXZpY2UK PiArICovCj4gK3U4IHZwX21vZGVybl9nZXRfc3RhdHVzKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVy bl9kZXZpY2UgKm1kZXYpCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcgX19p b21lbSAqY2ZnID0gbWRldi0+Y29tbW9uOwo+ICsKPiArCXJldHVybiB2cF9pb3JlYWQ4KCZjZmct PmRldmljZV9zdGF0dXMpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZwX21vZGVybl9nZXRf c3RhdHVzKTsKPiArCj4gKy8qCj4gKyAqIHZwX21vZGVybl9zZXRfc3RhdHVzIC0gc2V0IHN0YXR1 cyB0byBkZXZpY2UKPiArICogQG1kZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UKPiAr ICogQHN0YXR1czogdGhlIHN0YXR1cyBzZXQgdG8gZGV2aWNlCj4gKyAqLwo+ICt2b2lkIHZwX21v ZGVybl9zZXRfc3RhdHVzKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCj4g KwkJCQkgdTggc3RhdHVzKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnIF9f aW9tZW0gKmNmZyA9IG1kZXYtPmNvbW1vbjsKPiArCj4gKwl2cF9pb3dyaXRlOChzdGF0dXMsICZj ZmctPmRldmljZV9zdGF0dXMpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZwX21vZGVybl9z ZXRfc3RhdHVzKTsKPiArCj4gKy8qCj4gKyAqIHZwX21vZGVybl9xdWV1ZV92ZWN0b3IgLSBzZXQg dGhlIE1TSVggdmVjdG9yIGZvciBhIHNwZWNpZmljIHZpcnRxdWV1ZQo+ICsgKiBAbWRldjogdGhl IG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQo+ICsgKiBAaW5kZXg6IHF1ZXVlIGluZGV4Cj4gKyAq IEB2ZWN0b3I6IHRoZSBjb25maWcgdmVjdG9yCj4gKyAqCj4gKyAqIFJldHVybnMgdGhlIGNvbmZp ZyB2ZWN0b3IgcmVhZCBmcm9tIHRoZSBkZXZpY2UKPiArICovCj4gK3UxNiB2cF9tb2Rlcm5fcXVl dWVfdmVjdG9yKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCj4gKwkJCSAg IHUxNiBpbmRleCwgdTE2IHZlY3RvcikKPiArewo+ICsJc3RydWN0IHZpcnRpb19wY2lfY29tbW9u X2NmZyBfX2lvbWVtICpjZmcgPSBtZGV2LT5jb21tb247Cj4gKwo+ICsJdnBfaW93cml0ZTE2KGlu ZGV4LCAmY2ZnLT5xdWV1ZV9zZWxlY3QpOwo+ICsJdnBfaW93cml0ZTE2KHZlY3RvciwgJmNmZy0+ cXVldWVfbXNpeF92ZWN0b3IpOwo+ICsJLyogRmx1c2ggdGhlIHdyaXRlIG91dCB0byBkZXZpY2Ug Ki8KPiArCXJldHVybiB2cF9pb3JlYWQxNigmY2ZnLT5xdWV1ZV9tc2l4X3ZlY3Rvcik7Cj4gK30K PiArRVhQT1JUX1NZTUJPTF9HUEwodnBfbW9kZXJuX3F1ZXVlX3ZlY3Rvcik7Cj4gKwo+ICsvKgo+ ICsgKiB2cF9tb2Rlcm5fY29uZmlnX3ZlY3RvciAtIHNldCB0aGUgdmVjdG9yIGZvciBjb25maWcg aW50ZXJydXB0Cj4gKyAqIEBtZGV2OiB0aGUgbW9kZXJuIHZpcnRpby1wY2kgZGV2aWNlCj4gKyAq IEB2ZWN0b3I6IHRoZSBjb25maWcgdmVjdG9yCj4gKyAqCj4gKyAqIFJldHVybnMgdGhlIGNvbmZp ZyB2ZWN0b3IgcmVhZCBmcm9tIHRoZSBkZXZpY2UKPiArICovCj4gK3UxNiB2cF9tb2Rlcm5fY29u ZmlnX3ZlY3RvcihzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2LAo+ICsJCQkg ICAgdTE2IHZlY3RvcikKPiArewo+ICsJc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZyBfX2lv bWVtICpjZmcgPSBtZGV2LT5jb21tb247Cj4gKwo+ICsJLyogU2V0dXAgdGhlIHZlY3RvciB1c2Vk IGZvciBjb25maWd1cmF0aW9uIGV2ZW50cyAqLwo+ICsJdnBfaW93cml0ZTE2KHZlY3RvciwgJmNm Zy0+bXNpeF9jb25maWcpOwo+ICsJLyogVmVyaWZ5IHdlIGhhZCBlbm91Z2ggcmVzb3VyY2VzIHRv IGFzc2lnbiB0aGUgdmVjdG9yICovCj4gKwkvKiBXaWxsIGFsc28gZmx1c2ggdGhlIHdyaXRlIG91 dCB0byBkZXZpY2UgKi8KPiArCXJldHVybiB2cF9pb3JlYWQxNigmY2ZnLT5tc2l4X2NvbmZpZyk7 Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwodnBfbW9kZXJuX2NvbmZpZ192ZWN0b3IpOwo+ICsK PiArLyoKPiArICogdnBfbW9kZXJuX3F1ZXVlX2FkZHJlc3MgLSBzZXQgdGhlIHZpcnRxdWV1ZSBh ZGRyZXNzCj4gKyAqIEBtZGV2OiB0aGUgbW9kZXJuIHZpcnRpby1wY2kgZGV2aWNlCj4gKyAqIEBp bmRleDogdGhlIHF1ZXVlIGluZGV4Cj4gKyAqIEBkZXNjX2FkZHI6IGFkZHJlc3Mgb2YgdGhlIGRl c2NyaXB0b3IgYXJlYQo+ICsgKiBAZHJpdmVyX2FkZHI6IGFkZHJlc3Mgb2YgdGhlIGRyaXZlciBh cmVhCj4gKyAqIEBkZXZpY2VfYWRkcjogYWRkcmVzcyBvZiB0aGUgZGV2aWNlIGFyZWEKPiArICov Cj4gK3ZvaWQgdnBfbW9kZXJuX3F1ZXVlX2FkZHJlc3Moc3RydWN0IHZpcnRpb19wY2lfbW9kZXJu X2RldmljZSAqbWRldiwKPiArCQkJICAgICB1MTYgaW5kZXgsIHU2NCBkZXNjX2FkZHIsIHU2NCBk cml2ZXJfYWRkciwKPiArCQkJICAgICB1NjQgZGV2aWNlX2FkZHIpCj4gK3sKPiArCXN0cnVjdCB2 aXJ0aW9fcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY2ZnID0gbWRldi0+Y29tbW9uOwo+ICsKPiAr CXZwX2lvd3JpdGUxNihpbmRleCwgJmNmZy0+cXVldWVfc2VsZWN0KTsKPiArCj4gKwl2cF9pb3dy aXRlNjRfdHdvcGFydChkZXNjX2FkZHIsICZjZmctPnF1ZXVlX2Rlc2NfbG8sCj4gKwkJCSAgICAg JmNmZy0+cXVldWVfZGVzY19oaSk7Cj4gKwl2cF9pb3dyaXRlNjRfdHdvcGFydChkcml2ZXJfYWRk ciwgJmNmZy0+cXVldWVfYXZhaWxfbG8sCj4gKwkJCSAgICAgJmNmZy0+cXVldWVfYXZhaWxfaGkp Owo+ICsJdnBfaW93cml0ZTY0X3R3b3BhcnQoZGV2aWNlX2FkZHIsICZjZmctPnF1ZXVlX3VzZWRf bG8sCj4gKwkJCSAgICAgJmNmZy0+cXVldWVfdXNlZF9oaSk7Cj4gK30KPiArRVhQT1JUX1NZTUJP TF9HUEwodnBfbW9kZXJuX3F1ZXVlX2FkZHJlc3MpOwo+ICsKPiArLyoKPiArICogdnBfbW9kZXJu X3NldF9xdWV1ZV9lbmFibGUgLSBlbmFibGUgYSB2aXJ0cXVldWUKPiArICogQG1kZXY6IHRoZSBt b2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UKPiArICogQGluZGV4OiB0aGUgcXVldWUgaW5kZXgKPiAr ICogQGVuYWJsZTogd2hldGhlciB0aGUgdmlydHF1ZXVlIGlzIGVuYWJsZSBvciBub3QKPiArICov Cj4gK3ZvaWQgdnBfbW9kZXJuX3NldF9xdWV1ZV9lbmFibGUoc3RydWN0IHZpcnRpb19wY2lfbW9k ZXJuX2RldmljZSAqbWRldiwKPiArCQkJCXUxNiBpbmRleCwgYm9vbCBlbmFibGUpCj4gK3sKPiAr CXZwX2lvd3JpdGUxNihpbmRleCwgJm1kZXYtPmNvbW1vbi0+cXVldWVfc2VsZWN0KTsKPiArCXZw X2lvd3JpdGUxNihlbmFibGUsICZtZGV2LT5jb21tb24tPnF1ZXVlX2VuYWJsZSk7Cj4gK30KPiAr RVhQT1JUX1NZTUJPTF9HUEwodnBfbW9kZXJuX3NldF9xdWV1ZV9lbmFibGUpOwo+ICsKPiArLyoK PiArICogdnBfbW9kZXJuX2dldF9xdWV1ZV9lbmFibGUgLSBlbmFibGUgYSB2aXJ0cXVldWUKPiAr ICogQG1kZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UKPiArICogQGluZGV4OiB0aGUg cXVldWUgaW5kZXgKPiArICoKPiArICogUmV0dXJucyB3aGV0aGVyIGEgdmlydHF1ZXVlIGlzIGVu YWJsZWQgb3Igbm90Cj4gKyAqLwo+ICtib29sIHZwX21vZGVybl9nZXRfcXVldWVfZW5hYmxlKHN0 cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCj4gKwkJCQl1MTYgaW5kZXgpCj4g K3sKPiArCXZwX2lvd3JpdGUxNihpbmRleCwgJm1kZXYtPmNvbW1vbi0+cXVldWVfc2VsZWN0KTsK PiArCj4gKwlyZXR1cm4gdnBfaW9yZWFkMTYoJm1kZXYtPmNvbW1vbi0+cXVldWVfZW5hYmxlKTsK PiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh2cF9tb2Rlcm5fZ2V0X3F1ZXVlX2VuYWJsZSk7Cj4g Kwo+ICsvKgo+ICsgKiB2cF9tb2Rlcm5fc2V0X3F1ZXVlX3NpemUgLSBzZXQgc2l6ZSBmb3IgYSB2 aXJ0cXVldWUKPiArICogQG1kZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UKPiArICog QGluZGV4OiB0aGUgcXVldWUgaW5kZXgKPiArICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSB2aXJ0 cXVldWUKPiArICovCj4gK3ZvaWQgdnBfbW9kZXJuX3NldF9xdWV1ZV9zaXplKHN0cnVjdCB2aXJ0 aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCj4gKwkJCSAgICAgIHUxNiBpbmRleCwgdTE2IHNp emUpCj4gK3sKPiArCXZwX2lvd3JpdGUxNihpbmRleCwgJm1kZXYtPmNvbW1vbi0+cXVldWVfc2Vs ZWN0KTsKPiArCXZwX2lvd3JpdGUxNihzaXplLCAmbWRldi0+Y29tbW9uLT5xdWV1ZV9zaXplKTsK PiArCj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwodnBfbW9kZXJuX3NldF9xdWV1ZV9zaXplKTsK PiArCj4gKy8qCj4gKyAqIHZwX21vZGVybl9nZXRfcXVldWVfc2l6ZSAtIGdldCBzaXplIGZvciBh IHZpcnRxdWV1ZQo+ICsgKiBAbWRldjogdGhlIG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQo+ICsg KiBAaW5kZXg6IHRoZSBxdWV1ZSBpbmRleAo+ICsgKgo+ICsgKiBSZXR1cm5zIHRoZSBzaXplIG9m IHRoZSB2aXJ0cXVldWUKPiArICovCj4gK3UxNiB2cF9tb2Rlcm5fZ2V0X3F1ZXVlX3NpemUoc3Ry dWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRldiwKPiArCQkJICAgICB1MTYgaW5kZXgp Cj4gK3sKPiArCXZwX2lvd3JpdGUxNihpbmRleCwgJm1kZXYtPmNvbW1vbi0+cXVldWVfc2VsZWN0 KTsKPiArCj4gKwlyZXR1cm4gdnBfaW9yZWFkMTYoJm1kZXYtPmNvbW1vbi0+cXVldWVfc2l6ZSk7 Cj4gKwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZwX21vZGVybl9nZXRfcXVldWVfc2l6ZSk7 Cj4gKwo+ICsvKgo+ICsgKiB2cF9tb2Rlcm5fZ2V0X251bV9xdWV1ZXMgLSBnZXQgdGhlIG51bWJl ciBvZiB2aXJ0cXVldWVzCj4gKyAqIEBtZGV2OiB0aGUgbW9kZXJuIHZpcnRpby1wY2kgZGV2aWNl Cj4gKyAqCj4gKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiB2aXJ0cXVldWVzCj4gKyAqLwo+ICt1 MTYgdnBfbW9kZXJuX2dldF9udW1fcXVldWVzKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZp Y2UgKm1kZXYpCj4gK3sKPiArCXJldHVybiB2cF9pb3JlYWQxNigmbWRldi0+Y29tbW9uLT5udW1f cXVldWVzKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh2cF9tb2Rlcm5fZ2V0X251bV9xdWV1 ZXMpOwo+ICsKPiArLyoKPiArICogdnBfbW9kZXJuX2dldF9xdWV1ZV9ub3RpZnlfb2ZmIC0gZ2V0 IG5vdGlmaWNhdGlvbiBvZmZzZXQgZm9yIGEgdmlydHF1ZXVlCj4gKyAqIEBtZGV2OiB0aGUgbW9k ZXJuIHZpcnRpby1wY2kgZGV2aWNlCj4gKyAqIEBpbmRleDogdGhlIHF1ZXVlIGluZGV4Cj4gKyAq Cj4gKyAqIFJldHVybnMgdGhlIG5vdGlmaWNhdGlvbiBvZmZzZXQgZm9yIGEgdmlydHF1ZXVlCj4g KyAqLwo+ICt1MTYgdnBfbW9kZXJuX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKHN0cnVjdCB2aXJ0aW9f cGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCj4gKwkJCQkgICB1MTYgaW5kZXgpCj4gK3sKPiArCXZw X2lvd3JpdGUxNihpbmRleCwgJm1kZXYtPmNvbW1vbi0+cXVldWVfc2VsZWN0KTsKPiArCj4gKwly ZXR1cm4gdnBfaW9yZWFkMTYoJm1kZXYtPmNvbW1vbi0+cXVldWVfbm90aWZ5X29mZik7Cj4gK30K PiArRVhQT1JUX1NZTUJPTF9HUEwodnBfbW9kZXJuX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKTsKPiAr Cj4gK01PRFVMRV9WRVJTSU9OKCIwLjEiKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJNb2Rlcm4g VmlydGlvIFBDSSBEZXZpY2UiKTsKPiArTU9EVUxFX0FVVEhPUigiSmFzb24gV2FuZyA8amFzb3dh bmdAcmVkaGF0LmNvbT4iKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+IGRpZmYgLS1naXQg YS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19wY2lfbW9kZXJuLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRp b19wY2lfbW9kZXJuLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAw MC4uZjI2YWNiZWVjOTY1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvbGludXgvdmly dGlvX3BjaV9tb2Rlcm4uaAo+IEBAIC0wLDAgKzEsMTExIEBACj4gKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wICovCj4gKyNpZm5kZWYgX0xJTlVYX1ZJUlRJT19QQ0lfTU9ERVJO X0gKPiArI2RlZmluZSBfTElOVVhfVklSVElPX1BDSV9NT0RFUk5fSAo+ICsKPiArI2luY2x1ZGUg PGxpbnV4L3BjaS5oPgo+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX3BjaS5oPgo+ICsKPiArc3Ry dWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSB7Cj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rl djsKPiArCj4gKwlzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnIF9faW9tZW0gKmNvbW1vbjsK PiArCS8qIERldmljZS1zcGVjaWZpYyBkYXRhIChub24tbGVnYWN5IG1vZGUpICAqLwo+ICsJdm9p ZCBfX2lvbWVtICpkZXZpY2U7Cj4gKwkvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1s ZWdhY3kgbW9kZSkuICovCj4gKwl2b2lkIF9faW9tZW0gKm5vdGlmeV9iYXNlOwo+ICsJLyogV2hl cmUgdG8gcmVhZCBhbmQgY2xlYXIgaW50ZXJydXB0ICovCj4gKwl1OCBfX2lvbWVtICppc3I7Cj4g Kwo+ICsJLyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi8KPiArCXNpemVfdCBu b3RpZnlfbGVuOwo+ICsJc2l6ZV90IGRldmljZV9sZW47Cj4gKwo+ICsJLyogQ2FwYWJpbGl0eSBm b3Igd2hlbiB3ZSBuZWVkIHRvIG1hcCBub3RpZmljYXRpb25zIHBlci12cS4gKi8KPiArCWludCBu b3RpZnlfbWFwX2NhcDsKPiArCj4gKwkvKiBNdWx0aXBseSBxdWV1ZV9ub3RpZnlfb2ZmIGJ5IHRo aXMgdmFsdWUuIChub24tbGVnYWN5IG1vZGUpLiAqLwo+ICsJdTMyIG5vdGlmeV9vZmZzZXRfbXVs dGlwbGllcjsKPiArCj4gKwlpbnQgbW9kZXJuX2JhcnM7Cj4gKwo+ICsJc3RydWN0IHZpcnRpb19k ZXZpY2VfaWQgaWQ7Cj4gK307Cj4gKwo+ICsvKgo+ICsgKiBUeXBlLXNhZmUgd3JhcHBlcnMgZm9y IGlvIGFjY2Vzc2VzLgo+ICsgKiBVc2UgdGhlc2UgdG8gZW5mb3JjZSBhdCBjb21waWxlIHRpbWUg dGhlIGZvbGxvd2luZyBzcGVjIHJlcXVpcmVtZW50Ogo+ICsgKgo+ICsgKiBUaGUgZHJpdmVyIE1V U1QgYWNjZXNzIGVhY2ggZmllbGQgdXNpbmcgdGhlIOKAnG5hdHVyYWzigJ0gYWNjZXNzCj4gKyAq IG1ldGhvZCwgaS5lLiAzMi1iaXQgYWNjZXNzZXMgZm9yIDMyLWJpdCBmaWVsZHMsIDE2LWJpdCBh Y2Nlc3Nlcwo+ICsgKiBmb3IgMTYtYml0IGZpZWxkcyBhbmQgOC1iaXQgYWNjZXNzZXMgZm9yIDgt Yml0IGZpZWxkcy4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdTggdnBfaW9yZWFkOChjb25zdCB1 OCBfX2lvbWVtICphZGRyKQo+ICt7Cj4gKwlyZXR1cm4gaW9yZWFkOChhZGRyKTsKPiArfQo+ICtz dGF0aWMgaW5saW5lIHUxNiB2cF9pb3JlYWQxNiAoY29uc3QgX19sZTE2IF9faW9tZW0gKmFkZHIp Cj4gK3sKPiArCXJldHVybiBpb3JlYWQxNihhZGRyKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGlu ZSB1MzIgdnBfaW9yZWFkMzIoY29uc3QgX19sZTMyIF9faW9tZW0gKmFkZHIpCj4gK3sKPiArCXJl dHVybiBpb3JlYWQzMihhZGRyKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIHZwX2lv d3JpdGU4KHU4IHZhbHVlLCB1OCBfX2lvbWVtICphZGRyKQo+ICt7Cj4gKwlpb3dyaXRlOCh2YWx1 ZSwgYWRkcik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB2cF9pb3dyaXRlMTYodTE2 IHZhbHVlLCBfX2xlMTYgX19pb21lbSAqYWRkcikKPiArewo+ICsJaW93cml0ZTE2KHZhbHVlLCBh ZGRyKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIHZwX2lvd3JpdGUzMih1MzIgdmFs dWUsIF9fbGUzMiBfX2lvbWVtICphZGRyKQo+ICt7Cj4gKwlpb3dyaXRlMzIodmFsdWUsIGFkZHIp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgdnBfaW93cml0ZTY0X3R3b3BhcnQodTY0 IHZhbCwKPiArCQkJCQlfX2xlMzIgX19pb21lbSAqbG8sCj4gKwkJCQkJX19sZTMyIF9faW9tZW0g KmhpKQo+ICt7Cj4gKwl2cF9pb3dyaXRlMzIoKHUzMil2YWwsIGxvKTsKPiArCXZwX2lvd3JpdGUz Mih2YWwgPj4gMzIsIGhpKTsKPiArfQo+ICsKPiArdTY0IHZwX21vZGVybl9nZXRfZmVhdHVyZXMo c3RydWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRldik7Cj4gK3ZvaWQgdnBfbW9kZXJu X3NldF9mZWF0dXJlcyhzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2LAo+ICsJ CSAgICAgdTY0IGZlYXR1cmVzKTsKPiArdTMyIHZwX21vZGVybl9nZW5lcmF0aW9uKHN0cnVjdCB2 aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYpOwo+ICt1OCB2cF9tb2Rlcm5fZ2V0X3N0YXR1 cyhzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2KTsKPiArdm9pZCB2cF9tb2Rl cm5fc2V0X3N0YXR1cyhzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2LAo+ICsJ CSAgIHU4IHN0YXR1cyk7Cj4gK3UxNiB2cF9tb2Rlcm5fcXVldWVfdmVjdG9yKHN0cnVjdCB2aXJ0 aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCj4gKwkJCSAgIHUxNiBpZHgsIHUxNiB2ZWN0b3Ip Owo+ICt1MTYgdnBfbW9kZXJuX2NvbmZpZ192ZWN0b3Ioc3RydWN0IHZpcnRpb19wY2lfbW9kZXJu X2RldmljZSAqbWRldiwKPiArCQkgICAgIHUxNiB2ZWN0b3IpOwo+ICt2b2lkIHZwX21vZGVybl9x dWV1ZV9hZGRyZXNzKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCj4gKwkJ CSAgICAgdTE2IGluZGV4LCB1NjQgZGVzY19hZGRyLCB1NjQgZHJpdmVyX2FkZHIsCj4gKwkJCSAg ICAgdTY0IGRldmljZV9hZGRyKTsKPiArdm9pZCB2cF9tb2Rlcm5fc2V0X3F1ZXVlX2VuYWJsZShz dHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2LAo+ICsJCQkJdTE2IGlkeCwgYm9v bCBlbmFibGUpOwo+ICtib29sIHZwX21vZGVybl9nZXRfcXVldWVfZW5hYmxlKHN0cnVjdCB2aXJ0 aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCj4gKwkJCQl1MTYgaWR4KTsKPiArdm9pZCB2cF9t b2Rlcm5fc2V0X3F1ZXVlX3NpemUoc3RydWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRl diwKPiArCQkJICAgICAgdTE2IGlkeCwgdTE2IHNpemUpOwo+ICt1MTYgdnBfbW9kZXJuX2dldF9x dWV1ZV9zaXplKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCj4gKwkJCSAg ICAgdTE2IGlkeCk7Cj4gK3UxNiB2cF9tb2Rlcm5fZ2V0X251bV9xdWV1ZXMoc3RydWN0IHZpcnRp b19wY2lfbW9kZXJuX2RldmljZSAqbWRldik7Cj4gK3UxNiB2cF9tb2Rlcm5fZ2V0X3F1ZXVlX25v dGlmeV9vZmYoc3RydWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRldiwKPiArCQkJCSAg IHUxNiBpZHgpOwo+ICt2b2lkIF9faW9tZW0gKnZwX21vZGVybl9tYXBfY2FwYWJpbGl0eShzdHJ1 Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2LCBpbnQgb2ZmLAo+ICsJCQkJICAgICAg IHNpemVfdCBtaW5sZW4sCj4gKwkJCQkgICAgICAgdTMyIGFsaWduLAo+ICsJCQkJICAgICAgIHUz MiBzdGFydCwgdTMyIHNpemUsCj4gKwkJCQkgICAgICAgc2l6ZV90ICpsZW4pOwo+ICtpbnQgdnBf bW9kZXJuX3Byb2JlKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYpOwo+ICt2 b2lkIHZwX21vZGVybl9yZW1vdmUoc3RydWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRl dik7Cj4gKyNlbmRpZgo+IC0tIAo+IDIuMjUuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxp emF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3Vu ZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u