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=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,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 E0157C43613 for ; Thu, 20 Jun 2019 09:32:49 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B1E712082C for ; Thu, 20 Jun 2019 09:32:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="qbrCoveo"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="n/hX1hDU" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B1E712082C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=OdUoY258P6uxT4My4/906RaoKEmCFeatnNBeomTW0fE=; b=qbrCoveoKHOYrR ODlH368eurgPg7CnYvLs3MRqKERlRN3xDD6Bp3FdVUCkVxWIAMq+7MRt3SWFU5eRG6gBI3xwyFkmQ EDqrH7w2t+9KN7VqGjywJ6d5JyI8IBAglSif4f+qKPCp3zamAC0/5EKt3Dg26/e45uTuivVO0o6Vq mc8F2vBgMGbHDQroEV7TyUrSsIx7WIAhN/cNWvM9Fm/Kf8szxAzwV+77BaD9e8wC2jbPlM5lbj1p5 8NyT3ZW4p+xMVYhkDoiMlVd+H+tm0R05KGdQsG3/Esj2AxKcz0BhySoRxMMwsuAdjQdKXmVy3BFlN Hf7lIHd3D3Z6tvG7PS1w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hdtR2-00076I-HI; Thu, 20 Jun 2019 09:32:48 +0000 Received: from mail-qt1-x844.google.com ([2607:f8b0:4864:20::844]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hdtQy-00075W-N7 for linux-arm-kernel@lists.infradead.org; Thu, 20 Jun 2019 09:32:47 +0000 Received: by mail-qt1-x844.google.com with SMTP id x47so2494763qtk.11 for ; Thu, 20 Jun 2019 02:32:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=PwJ003H7aUrtwAsoi3i9ja/RIj0hylOJ7YOIpP2U/2I=; b=n/hX1hDU35QMp2kzjyGjyY66Ec0O8CJ+JLzftbmHJWC9bGdl/urcUxUz/aFGqccJUf XeryXP/PWl+lHCemJr8NZD0ALMfhrcziH+IwdY8babue3qbRpYjtHx/F0l4M//PGi2MO sHbgglF4iaMscji3TH0Sj6iV+4+y/UJDPjoR8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=PwJ003H7aUrtwAsoi3i9ja/RIj0hylOJ7YOIpP2U/2I=; b=WcqV0p52nBvTaqxxgWK2HTWutxGdfJvlocNI2hbYeTpfhHhNf5oou4eWh0Nc7L2N+U LiUwOsWb0BfmErRwQsfghqTFrsQCzub6mJ6c0fYDOpX8G8ho8TqtZHR0AYC/+3p22mx/ sL5Htx9UGhF1IZCPmhXqk7rJWWGp7B84DGnYks1v0dwIVGNvuxlurIJsPdqwssEB70xB ckhDp15s56ZWQFZ4usS15q/BL5yf9WU+tgQuLnFX/Nm8m+L+5aawDqOLIUMHBmkVQmCE wqx2ap3Hsjd8njFjnYpZ9f9BzzVDVgqgaU2uMio5CB43Ck2fBW3wwNL6Pg9yaCwDKYdw xOhQ== X-Gm-Message-State: APjAAAW1HDAUvat8XdSOJSFwchHgVda0h7mSSKZ8MGIHy04HUdyUAl24 416maSDPDYI2fYkVgeHQPLg1yQvTShRTsQ2ah/sndw== X-Google-Smtp-Source: APXvYqz5BzLkmp9rKNxuO7uCSigPEQ7LDfQ3t3qedcbyU3XOxdCJ8EGkoYsxXBQbIJ7HjoBzvh1AiTE+gtRWh9aTw7Y= X-Received: by 2002:ac8:381d:: with SMTP id q29mr110146545qtb.347.1561023162462; Thu, 20 Jun 2019 02:32:42 -0700 (PDT) MIME-Version: 1.0 References: <20190618041433.245629-1-hsinyi@chromium.org> <20190618041433.245629-2-hsinyi@chromium.org> <958b27ff-6e64-b4e2-44e6-bc342e3606bc@samsung.com> In-Reply-To: <958b27ff-6e64-b4e2-44e6-bc342e3606bc@samsung.com> From: Hsin-Yi Wang Date: Thu, 20 Jun 2019 17:32:16 +0800 Message-ID: Subject: Re: [PATCH RFC 1/2] PM / devfreq: Generic CPU frequency to device frequency mapping governor To: Chanwoo Choi X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190620_023244_798167_E10FC78C X-CRM114-Status: GOOD ( 35.79 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Saravana Kannan , "Andrew-sh . Cheng" , linux-pm@vger.kernel.org, lkml , Kyungmin Park , MyungJoo Ham , linux-mediatek@lists.infradead.org, Sibi Sankar , Matthias Brugger , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgQ2hhbndvbyBDaG9pLCBTYXJhdmFuYSBLYW5uYW4gYW5kIFNpYmkgU2Fua2FyLAoKSSd2ZSBh bHNvIHRlc3RlZCBTaWJpIFNhbmthcidzIHBhdGNoWzFdIGxvY2FsbHkgd2l0aCBtdDgxODMtY2Np LCBhbmQKaXQgd29ya3MgZmluZSB0b28hCkl0J2QgYmUgZ3JlYXQgaWYgU2liaSBTYW5rYXIgb3Ig YW55b25lIHdobyBpcyBmYW1pbGlhciB3aXRoIHRoZQpvcmlnaW5hbCBkZXNpZ24gY2FuIGZpbmlz aCB0aGlzIGltcGxlbWVudGF0aW9uLiBCdXQgaWYgbm8gb25lIGhhcyB0aW1lCnRvIGRvIHRoYXQs IEkgdGhpbmsgSSBjYW4gYWxzbyBoZWxwIG9uIGFkZHJlc3MgdGhlIGNvbW1lbnRzLiBUaGFua3Mh CgoKWzFdCltSRkMsMi85XSBPUFA6IEV4cG9ydCBhIG51bWJlciBvZiBoZWxwZXJzIHRvIHByZXZl bnQgY29kZSBkdXBsaWNhdGlvbgotIGh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcGF0Y2gv MTA4NzUxOTkvCltSRkMsMy85XSBQTSAvIGRldmZyZXE6IEFkZCBjcHUgYmFzZWQgc2NhbGluZyBz dXBwb3J0IHRvIHBhc3NpdmVfZ292ZXJub3IKLSBodHRwczovL3BhdGNod29yay5rZXJuZWwub3Jn L3BhdGNoLzEwODc1MTk1LwoKSHNpbi1ZaQoKT24gVGh1LCBKdW4gMjAsIDIwMTkgYXQgMjo1NiBQ TSBDaGFud29vIENob2kgPGN3MDAuY2hvaUBzYW1zdW5nLmNvbT4gd3JvdGU6Cj4KPiArIFNpYmkg U2Fua2FyCj4KPiBIaSwgSHNpbi1ZaSBXYW5nLCBTYXJhdmFuYSBLYW5uYW4gYW5kIFNpYmkgU2Fu a2FyCj4KPiBJIHN1bW1hcml6ZWQgdGhlIGhpc3Rvcnkgb2YgdGhlIHJlbGF0ZWQgcGF0Y2ggYWJv dXQgdGhpcyB0aXRsZS4KPgo+IEZpcnN0bHksCj4gQXMgSSBrbmV3LCBTYXJhdmFuYSBzZW50IHRo ZSBwYXRjaFsxXSB3aGljaCBjb250YWlucwo+ICdnb3Zlcm5vcl9jcHVmcmVxX21hcC5jJyBsYXN0 IHllYXIuIEFjY29yZGluZyB0byB0aGUgTXl1bmdvbydzIGNvbW1lbnQsCj4KPiBTZWNvbmRseSwK PiBTaWJpIFNhbmthciBtb2RpZmllZCB0aGUgJ2dvdmVybm9yX3Bhc3NpdmUuYydbMl0gaW4gb3Jk ZXIgdG8gc3VwcG9ydAo+IHRoZSBtYXBwaW5nIGJldHdlZW4gY3B1IGZyZXF1ZW5jeSBhbmQgZGV2 aWNlIGZyZXF1ZW5jeS4KPiBVbmZvcnR1bmF0ZWx5LCBTaWJpIFNhbmthciBzdG9wcGVkIHRoZSBk ZXZlbG9wbWVudCBhYm91dCB0aGlzCj4gYmVjYXVzZSBoZSBoYWQgZm91bmQgdGhlIG90aGVyIG1l dGhvZCB0byBnZXQgaGlzIHB1cnBvc2UgYXMgSSBrbmV3Lgo+Cj4gVGhpcmRseSwKPiBIc2luLVlp IFdhbmcgc2VuZCB0aGUgb3JpZ2luYWwgcGF0Y2ggb2YgU2FyYXZhbmEgd2l0aG91dCBtb2RpZmlj YXRpb24uCj4KPgo+IFNpbmNlcmVseSwgSSB0aGluayB0aGF0IHRoZSBtYXBwaW5nIGJldHdlZW4g Y3B1IGZyZXF1ZW5jeSBhbmQgZGV2aWNlCj4gZnJlcXVlbmN5IGlzIG5lY2Vzc2FyeS4gQW5kIEkg cHJlZmVyIHRoZSBTaWJpJ3MgYXBwcm9hY2ggd2hpY2ggaW1wbGVtZW50cwo+IHN0dWZmIHRvIHRo ZSBleGlzdGluZyAncGFzc2l2ZScgZ292ZXJub3IuCj4KPiBXZSBuZWVkIHRvIGRpc2N1c3MgYWJv dXQgaG93IHRvIGltcGxlbWVudCB0aGVtIGJ5IHdob20uCj4KPgo+IFsxXSBbdjMsMS8yXSBQTSAv IGRldmZyZXE6IEdlbmVyaWMgQ1BVIGZyZXF1ZW5jeSB0byBkZXZpY2UgZnJlcXVlbmN5IG1hcHBp bmcgZ292ZXJub3IKPiAtIGh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcGF0Y2gvMTA1NTMx NzEvCj4KPiBbMl0KPiBbUEFUQ0ggUkZDIDAvOV0gQWRkIENQVSBiYXNlZCBzY2FsaW5nIHN1cHBv cnQgdG8gUGFzc2l2ZSBnb3Zlcm5vcgo+IC0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGttbC8w OGMzY2ZmOGMzOWUzZDgyZTA0NGRiOTNlOTkyZGE3MkBjb2RlYXVyb3JhLm9yZy9ULwo+IFtQQVRD SCBSRkMgMy85XSBQTSAvIGRldmZyZXE6IEFkZCBjcHUgYmFzZWQgc2NhbGluZyBzdXBwb3J0IHRv IHBhc3NpdmVfZ292ZXJub3IKPiAtIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvMDhjM2Nm ZjhjMzllM2Q4MmUwNDRkYjkzZTk5MmRhNzJAY29kZWF1cm9yYS5vcmcvVC8jbTFjYWZiN2JhZjY4 N2QyYTY4MGQzOWM4NWQzZWM3ZDFiNTkwYjY4ZmMKPgo+Cj4gQmVzdCBSZWdhcmRzLAo+IENoYW53 b28gQ2hvaQo+Cj4gT24gMTkuIDYuIDE4LiDsmKTtm4QgMToxNCwgSHNpbi1ZaSBXYW5nIHdyb3Rl Ogo+ID4gRnJvbTogU2FyYXZhbmEgS2FubmFuIDxza2FubmFuQGNvZGVhdXJvcmEub3JnPgo+ID4K PiA+IEZyb206IFNhcmF2YW5hIEthbm5hbiA8c2thbm5hbkBjb2RlYXVyb3JhLm9yZz4KPiA+Cj4g PiBNYW55IENQVSBhcmNoaXRlY3R1cmVzIGhhdmUgY2FjaGVzIHRoYXQgY2FuIHNjYWxlIGluZGVw ZW5kZW50IG9mIHRoZSBDUFVzLgo+ID4gRnJlcXVlbmN5IHNjYWxpbmcgb2YgdGhlIGNhY2hlcyBp cyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBub3QKPiA+IGEgcGVyZm9ybWFu Y2UgYm90dGxlbmVjayB0aGF0IGxlYWRzIHRvIHBvb3IgcGVyZm9ybWFuY2UgYW5kIHBvd2VyLiBU aGUgc2FtZQo+ID4gaWRlYSBhcHBsaWVzIGZvciBSQU0vRERSLgo+ID4KPiA+IFRvIGFjaGlldmUg dGhpcywgdGhpcyBwYXRjaCBhZGRzIGEgZ2VuZXJpYyBkZXZmcmVxIGdvdmVybm9yIHRoYXQgdGFr ZXMgdGhlCj4gPiBjdXJyZW50IGZyZXF1ZW5jeSBvZiBlYWNoIENQVSBmcmVxdWVuY3kgZG9tYWlu IGFuZCB0aGVuIGFkanVzdHMgdGhlCj4gPiBmcmVxdWVuY3kgb2YgdGhlIGNhY2hlIChvciBhbnkg ZGV2ZnJlcSBkZXZpY2UpIGJhc2VkIG9uIHRoZSBmcmVxdWVuY3kgb2YKPiA+IHRoZSBDUFVzLiBJ dCBsaXN0ZW5zIHRvIENQVSBmcmVxdWVuY3kgdHJhbnNpdGlvbiBub3RpZmllcnMgdG8ga2VlcCBp dHNlbGYKPiA+IHVwIHRvIGRhdGUgb24gdGhlIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeS4KPiA+Cj4g PiBUbyBkZWNpZGUgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgZGV2aWNlLCB0aGUgZ292ZXJub3IgZG9l cyBvbmUgb2YgdGhlCj4gPiBmb2xsb3dpbmc6Cj4gPgo+ID4gKiBVc2VzIGEgQ1BVIGZyZXF1ZW5j eSB0byBkZXZpY2UgZnJlcXVlbmN5IG1hcHBpbmcgdGFibGUKPiA+ICAgLSBFaXRoZXIgb25lIG1h cHBpbmcgdGFibGUgdXNlZCBmb3IgYWxsIENQVSBmcmVxIHBvbGljaWVzICh0eXBpY2FsbHkgdXNl ZAo+ID4gICAgIGZvciBzeXN0ZW0gd2l0aCBob21vZ2VuZW91cyBjb3Jlcy9jbHVzdGVycyB0aGF0 IGhhdmUgdGhlIHNhbWUgT1BQcykuCj4gPiAgIC0gT25lIG1hcHBpbmcgdGFibGUgcGVyIENQVSBm cmVxIHBvbGljeSAodHlwaWNhbGx5IHVzZWQgZm9yIEFTTVAgc3lzdGVtcwo+ID4gICAgIHdpdGgg aGV0ZXJvZ2VuZW91cyBDUFVzIHdpdGggZGlmZmVyZW50IE9QUHMpCj4gPgo+ID4gT1IKPiA+Cj4g PiAqIFNjYWxlcyB0aGUgZGV2aWNlIGZyZXF1ZW5jeSBpbiBwcm9wb3J0aW9uIHRvIHRoZSBDUFUg ZnJlcXVlbmN5LiBTbywgaWYKPiA+ICAgdGhlIENQVXMgYXJlIHJ1bm5pbmcgYXQgdGhlaXIgbWF4 IGZyZXF1ZW5jeSwgdGhlIGRldmljZSBydW5zIGF0IGl0cyBtYXgKPiA+ICAgZnJlcXVlbmN5LiAg SWYgdGhlIENQVXMgYXJlIHJ1bm5pbmcgYXQgdGhlaXIgbWluIGZyZXF1ZW5jeSwgdGhlIGRldmlj ZQo+ID4gICBydW5zIGF0IGl0cyBtaW4gZnJlcXVlbmN5LiBBbmQgaW50ZXJwb2xhdGVkIGZvciBm cmVxdWVuY2llcyBpbiBiZXR3ZWVuLgo+ID4KPiA+IFNpZ25lZC1vZmYtYnk6IFNhcmF2YW5hIEth bm5hbiA8c2thbm5hbkBjb2RlYXVyb3JhLm9yZz4KPiA+IFNpZ25lZC1vZmYtYnk6IEhzaW4tWWkg V2FuZyA8aHNpbnlpQGNocm9taXVtLm9yZz4KPiA+IC0tLQo+ID4gIC4uLi9iaW5kaW5ncy9kZXZm cmVxL2RldmZyZXEtY3B1ZnJlcS1tYXAudHh0ICB8ICA1MyArKwo+ID4gIGRyaXZlcnMvZGV2ZnJl cS9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICB8ICAgOCArCj4gPiAgZHJpdmVycy9kZXZm cmVxL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKPiA+ICBkcml2ZXJzL2Rl dmZyZXEvZ292ZXJub3JfY3B1ZnJlcV9tYXAuYyAgICAgICAgfCA1ODMgKysrKysrKysrKysrKysr KysrCj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCA2NDUgaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGV2ZnJlcS9kZXZm cmVxLWNwdWZyZXEtbWFwLnR4dAo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RldmZy ZXEvZ292ZXJub3JfY3B1ZnJlcV9tYXAuYwo+ID4KPiA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0 aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGV2ZnJlcS9kZXZmcmVxLWNwdWZyZXEtbWFwLnR4dCBi L0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kZXZmcmVxL2RldmZyZXEtY3B1ZnJl cS1tYXAudHh0Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAw Li45ODJhMzBiY2ZjODYKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL0RvY3VtZW50YXRpb24v ZGV2aWNldHJlZS9iaW5kaW5ncy9kZXZmcmVxL2RldmZyZXEtY3B1ZnJlcS1tYXAudHh0Cj4gPiBA QCAtMCwwICsxLDUzIEBACj4gPiArRGV2ZnJlcSBDUFVmcmVxIGdvdmVybm9yCj4gPiArCj4gPiAr ZGV2ZnJlcS1jcHVmcmVxLW1hcCBpcyBhIHBhcmVudCBkZXZpY2UgdGhhdCBjb250YWlucyBvbmUg b3IgbW9yZSBjaGlsZCBkZXZpY2VzLgo+ID4gK0VhY2ggY2hpbGQgZGV2aWNlIHByb3ZpZGVzIENQ VSBmcmVxdWVuY3kgdG8gZGV2aWNlIGZyZXF1ZW5jeSBtYXBwaW5nIGZvciBhCj4gPiArc3BlY2lm aWMgZGV2aWNlLiBFeGFtcGxlcyBvZiBkZXZpY2VzIHRoYXQgY291bGQgdXNlIHRoaXMgYXJlOiBE RFIsIGNhY2hlIGFuZAo+ID4gK0NDSS4KPiA+ICsKPiA+ICtQYXJlbnQgZGV2aWNlIG5hbWUgc2hh bGwgYmUgImRldmZyZXEtY3B1ZnJlcS1tYXAiLgo+ID4gKwo+ID4gK1JlcXVpcmVkIGNoaWxkIGRl dmljZSBwcm9wZXJ0aWVzOgo+ID4gKy0gY3B1LXRvLWRldi1tYXAsIG9yIGNwdS10by1kZXYtbWFw LTxYPjoKPiA+ICsgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgdHVwbGVzIHdoZXJlIGVh Y2ggdHVwbGUgY29uc2lzdHMgb2YgYQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIENQVSBmcmVx dWVuY3kgKEtIeikgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGRldmljZQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGZyZXF1ZW5jeS4gQ1BVIGZyZXF1ZW5jaWVzIG5vdCBsaXN0ZWQgaW4gdGhlIHRh YmxlCj4gPiArICAgICAgICAgICAgICAgICAgICAgd2lsbCB1c2UgdGhlIGRldmljZSBmcmVxdWVu Y3kgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUKPiA+ICsgICAgICAgICAgICAgICAgICAgICBuZXh0 IHJvdW5kZWQgdXAgQ1BVIGZyZXF1ZW5jeS4KPiA+ICsgICAgICAgICAgICAgICAgICAgICBVc2Ug ImNwdS10by1kZXYtbWFwIiBpZiBhbGwgQ1BVcyBpbiB0aGUgc3lzdGVtIHNob3VsZAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHNoYXJlIHNhbWUgbWFwcGluZy4KPiA+ICsgICAgICAgICAgICAg ICAgICAgICBVc2UgY3B1LXRvLWRldi1tYXAtPGNwdWlkPiB0byBkZXNjcmliZSBkaWZmZXJlbnQK PiA+ICsgICAgICAgICAgICAgICAgICAgICBtYXBwaW5ncyBmb3IgZGlmZmVyZW50IENQVXMuIFRo ZSBwcm9wZXJ0eSBzaG91bGQgYmUKPiA+ICsgICAgICAgICAgICAgICAgICAgICBsaXN0ZWQgb25s eSBmb3IgdGhlIGZpcnN0IENQVSBpZiBtdWx0aXBsZSBDUFVzIGFyZQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIHN5bmNocm9ub3VzLgo+ID4gKy0gdGFyZ2V0LWRldjogICAgICAgICAgICAgICAg UGhhbmRsZSB0byBkZXZpY2UgdGhhdCB0aGlzIG1hcHBpbmcgYXBwbGllcyB0by4KPiA+ICsKPiA+ ICtFeGFtcGxlOgo+ID4gKyAgICAgZGV2ZnJlcS1jcHVmcmVxLW1hcCB7Cj4gPiArICAgICAgICAg ICAgIGNwdWJ3LWNwdWZyZXEgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHRhcmdldC1kZXYg PSA8JmNwdWJ3PjsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBjcHUtdG8tZGV2LW1hcCA9Cj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ICAzMDAwMDAgIDExNDQwMDAgPiwKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgIDQyMjQwMCAgMjI4ODAwMCA+LAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCAgNjUyODAwICAzMDUxMDAwID4sCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ICA4ODMyMDAgIDU5OTYwMDAgPiwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgMTE5MDQwMCAgODA1NjAwMCA+LAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgPCAxNDk3NjAwIDEwMTAxMDAwID4sCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA8IDE3MjgwMDAgMTIxNDUwMDAgPiwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDwgMjY0OTYwMCAxNjI1MDAwMCA+Owo+ID4gKyAgICAg ICAgICAgICB9Owo+ID4gKwo+ID4gKyAgICAgICAgICAgICBjYWNoZS1jcHVmcmVxIHsKPiA+ICsg ICAgICAgICAgICAgICAgICAgICB0YXJnZXQtZGV2ID0gPCZjYWNoZT47Cj4gPiArICAgICAgICAg ICAgICAgICAgICAgY3B1LXRvLWRldi1tYXAgPQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPCAgMzAwMDAwICAzMDAwMDAgPiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDwgIDQyMjQwMCAgNDIyNDAwID4sCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA8ICA2NTI4MDAgIDQ5OTIwMCA+LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PCAgODgzMjAwICA1NzYwMDAgPiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwg IDk2MDAwMCAgOTYwMDAwID4sCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IDE0 OTc2MDAgMTAzNjgwMCA+LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCAxNTc0 NDAwIDE1NzQ0MDAgPiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgMTcyODAw MCAxNjUxMjAwID4sCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IDI2NDk2MDAg MTcyODAwMCA+Owo+ID4gKyAgICAgICAgICAgICB9Owo+ID4gKyAgICAgfTsKPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2RldmZyZXEvS2NvbmZpZyBiL2RyaXZlcnMvZGV2ZnJlcS9LY29uZmlnCj4g PiBpbmRleCAwYzgyMDRkNmI3OGEuLjAzMDNmNWE0MDBiNiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZl cnMvZGV2ZnJlcS9LY29uZmlnCj4gPiArKysgYi9kcml2ZXJzL2RldmZyZXEvS2NvbmZpZwo+ID4g QEAgLTc0LDYgKzc0LDE0IEBAIGNvbmZpZyBERVZGUkVRX0dPVl9QQVNTSVZFCj4gPiAgICAgICAg IHRocm91Z2ggc3lzZnMgZW50cmllcy4gVGhlIHBhc3NpdmUgZ292ZXJub3IgcmVjb21tZW5kcyB0 aGF0Cj4gPiAgICAgICAgIGRldmZyZXEgZGV2aWNlIHVzZXMgdGhlIE9QUCB0YWJsZSB0byBnZXQg dGhlIGZyZXF1ZW5jeS92b2x0YWdlLgo+ID4KPiA+ICtjb25maWcgREVWRlJFUV9HT1ZfQ1BVRlJF UV9NQVAKPiA+ICsgICAgIHRyaXN0YXRlICJDUFVmcmVxIE1hcCIKPiA+ICsgICAgIGRlcGVuZHMg b24gQ1BVX0ZSRVEKPiA+ICsgICAgIGhlbHAKPiA+ICsgICAgICAgQ2hvb3NlcyBmcmVxdWVuY3kg YmFzZWQgb24gdGhlIG9ubGluZSBDUFVzJyBjdXJyZW50IGZyZXF1ZW5jeSBhbmQgYQo+ID4gKyAg ICAgICBDUFUgZnJlcXVlbmN5IHRvIGRldmljZSBmcmVxdWVuY3kgbWFwcGluZyB0YWJsZShzKS4g VGhpcyBnb3Zlcm5vcgo+ID4gKyAgICAgICBjYW4gYmUgdXNlZnVsIGZvciBjb250cm9sbGluZyBk ZXZpY2VzIHN1Y2ggYXMgRERSLCBjYWNoZSwgQ0NJLCBldGMuCj4gPiArCj4gPiAgY29tbWVudCAi REVWRlJFUSBEcml2ZXJzIgo+ID4KPiA+ICBjb25maWcgQVJNX0VYWU5PU19CVVNfREVWRlJFUQo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGV2ZnJlcS9NYWtlZmlsZSBiL2RyaXZlcnMvZGV2ZnJl cS9NYWtlZmlsZQo+ID4gaW5kZXggODE3ZGRlNzc5ZjE2Li44MTE0MWUyYzc4NGYgMTAwNjQ0Cj4g PiAtLS0gYS9kcml2ZXJzL2RldmZyZXEvTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvZGV2ZnJl cS9NYWtlZmlsZQo+ID4gQEAgLTYsNiArNiw3IEBAIG9iai0kKENPTkZJR19ERVZGUkVRX0dPVl9Q RVJGT1JNQU5DRSkgKz0gZ292ZXJub3JfcGVyZm9ybWFuY2Uubwo+ID4gIG9iai0kKENPTkZJR19E RVZGUkVRX0dPVl9QT1dFUlNBVkUpICArPSBnb3Zlcm5vcl9wb3dlcnNhdmUubwo+ID4gIG9iai0k KENPTkZJR19ERVZGUkVRX0dPVl9VU0VSU1BBQ0UpICArPSBnb3Zlcm5vcl91c2Vyc3BhY2Uubwo+ ID4gIG9iai0kKENPTkZJR19ERVZGUkVRX0dPVl9QQVNTSVZFKSAgICArPSBnb3Zlcm5vcl9wYXNz aXZlLm8KPiA+ICtvYmotJChDT05GSUdfREVWRlJFUV9HT1ZfQ1BVRlJFUV9NQVApICAgICAgICAr PSBnb3Zlcm5vcl9jcHVmcmVxX21hcC5vCj4gPgo+ID4gICMgREVWRlJFUSBEcml2ZXJzCj4gPiAg b2JqLSQoQ09ORklHX0FSTV9FWFlOT1NfQlVTX0RFVkZSRVEpICs9IGV4eW5vcy1idXMubwo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGV2ZnJlcS9nb3Zlcm5vcl9jcHVmcmVxX21hcC5jIGIvZHJp dmVycy9kZXZmcmVxL2dvdmVybm9yX2NwdWZyZXFfbWFwLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjA4NGEzZmZiOGY1NAo+ID4gLS0tIC9kZXYvbnVs bAo+ID4gKysrIGIvZHJpdmVycy9kZXZmcmVxL2dvdmVybm9yX2NwdWZyZXFfbWFwLmMKPiA+IEBA IC0wLDAgKzEsNTgzIEBACj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK PiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCAyMDE4LCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjZGVm aW5lIHByX2ZtdChmbXQpICJkZXYtY3B1ZnJlcS1tYXA6ICIgZm10Cj4gPiArCj4gPiArI2luY2x1 ZGUgPGxpbnV4L2RldmZyZXEuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvY3B1Lmg+Cj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgo+ ID4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt X2RldmljZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ID4gKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSAiZ292ZXJub3IuaCIKPiA+ICsKPiA+ICtzdHJ1Y3Qg Y3B1X3N0YXRlIHsKPiA+ICsgICAgIHVuc2lnbmVkIGludCBmcmVxOwo+ID4gKyAgICAgdW5zaWdu ZWQgaW50IG1pbl9mcmVxOwo+ID4gKyAgICAgdW5zaWduZWQgaW50IG1heF9mcmVxOwo+ID4gKyAg ICAgdW5zaWduZWQgaW50IGZpcnN0X2NwdTsKPiA+ICt9Owo+ID4gK3N0YXRpYyBzdHJ1Y3QgY3B1 X3N0YXRlICpzdGF0ZVtOUl9DUFVTXTsKPiA+ICtzdGF0aWMgaW50IGNwdWZyZXFfY250Owo+ID4g Kwo+ID4gK3N0cnVjdCBmcmVxX21hcCB7Cj4gPiArICAgICB1bnNpZ25lZCBpbnQgY3B1X2toejsK PiA+ICsgICAgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcTsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0 cnVjdCBkZXZmcmVxX25vZGUgewo+ID4gKyAgICAgc3RydWN0IGRldmZyZXEgKmRmOwo+ID4gKyAg ICAgdm9pZCAqb3JpZ19kYXRhOwo+ID4gKyAgICAgc3RydWN0IGRldmljZSAqZGV2Owo+ID4gKyAg ICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlOwo+ID4gKyAgICAgc3RydWN0IGxpc3RfaGVh ZCBsaXN0Owo+ID4gKyAgICAgc3RydWN0IGZyZXFfbWFwICoqbWFwOwo+ID4gKyAgICAgc3RydWN0 IGZyZXFfbWFwICpjb21tb25fbWFwOwo+ID4gK307Cj4gPiArc3RhdGljIExJU1RfSEVBRChkZXZm cmVxX2xpc3QpOwo+ID4gK3N0YXRpYyBERUZJTkVfTVVURVgoc3RhdGVfbG9jayk7Cj4gPiArc3Rh dGljIERFRklORV9NVVRFWChjcHVmcmVxX3JlZ19sb2NrKTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9p ZCB1cGRhdGVfYWxsX2RldmZyZXFzKHZvaWQpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IGRldmZy ZXFfbm9kZSAqbm9kZTsKPiA+ICsKPiA+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwg JmRldmZyZXFfbGlzdCwgbGlzdCkgewo+ID4gKyAgICAgICAgICAgICBzdHJ1Y3QgZGV2ZnJlcSAq ZGYgPSBub2RlLT5kZjsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgaWYgKCFub2RlLT5kZikKPiA+ ICsgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ICsgICAgICAgICAgICAgbXV0ZXhf bG9jaygmZGYtPmxvY2spOwo+ID4gKyAgICAgICAgICAgICB1cGRhdGVfZGV2ZnJlcShkZik7Cj4g PiArICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZGYtPmxvY2spOwo+ID4gKwo+ID4gKyAgICAg fQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGRldmZyZXFfbm9kZSAqZmluZF9kZXZm cmVxX25vZGUoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBkZXZm cmVxX25vZGUgKm5vZGU7Cj4gPiArCj4gPiArICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUs ICZkZXZmcmVxX2xpc3QsIGxpc3QpCj4gPiArICAgICAgICAgICAgIGlmIChub2RlLT5kZXYgPT0g ZGV2IHx8IG5vZGUtPm9mX25vZGUgPT0gZGV2LT5vZl9ub2RlKQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIHJldHVybiBub2RlOwo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIE5VTEw7Cj4gPiArfQo+ ID4gKwo+ID4gKy8qID09PT09PT09PT09PT09PT09PT09IGNwdWZyZXEgcGFydCA9PT09PT09PT09 PT09PT09PT09PSAqLwo+ID4gK3N0YXRpYyBzdHJ1Y3QgY3B1X3N0YXRlICphZGRfcG9saWN5KHN0 cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBjcHVf c3RhdGUgKm5ld19zdGF0ZTsKPiA+ICsgICAgIHVuc2lnbmVkIGludCBjcHUsIGZpcnN0X2NwdTsK PiA+ICsKPiA+ICsgICAgIG5ld19zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVfc3Rh dGUpLCBHRlBfS0VSTkVMKTsKPiA+ICsgICAgIGlmICghbmV3X3N0YXRlKQo+ID4gKyAgICAgICAg ICAgICByZXR1cm4gTlVMTDsKPiA+ICsKPiA+ICsgICAgIGZpcnN0X2NwdSA9IGNwdW1hc2tfZmly c3QocG9saWN5LT5yZWxhdGVkX2NwdXMpOwo+ID4gKyAgICAgbmV3X3N0YXRlLT5maXJzdF9jcHUg PSBmaXJzdF9jcHU7Cj4gPiArICAgICBuZXdfc3RhdGUtPmZyZXEgPSBwb2xpY3ktPmN1cjsKPiA+ ICsgICAgIG5ld19zdGF0ZS0+bWluX2ZyZXEgPSBwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXE7Cj4g PiArICAgICBuZXdfc3RhdGUtPm1heF9mcmVxID0gcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxOwo+ ID4gKwo+ID4gKyAgICAgZm9yX2VhY2hfY3B1KGNwdSwgcG9saWN5LT5yZWxhdGVkX2NwdXMpCj4g PiArICAgICAgICAgICAgIHN0YXRlW2NwdV0gPSBuZXdfc3RhdGU7Cj4gPiArCj4gPiArICAgICBy ZXR1cm4gbmV3X3N0YXRlOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGNwdWZyZXFfdHJh bnNfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKPiA+ICsgICAgICAgICAgICAg dW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSkKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3Qg Y3B1ZnJlcV9mcmVxcyAqZnJlcSA9IGRhdGE7Cj4gPiArICAgICBzdHJ1Y3QgY3B1X3N0YXRlICpz Owo+ID4gKyAgICAgc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgPSBOVUxMOwo+ID4gKwo+ ID4gKyAgICAgaWYgKGV2ZW50ICE9IENQVUZSRVFfUE9TVENIQU5HRSkKPiA+ICsgICAgICAgICAg ICAgcmV0dXJuIDA7Cj4gPiArCj4gPiArICAgICBtdXRleF9sb2NrKCZzdGF0ZV9sb2NrKTsKPiA+ ICsKPiA+ICsgICAgIHMgPSBzdGF0ZVtmcmVxLT5jcHVdOwo+ID4gKyAgICAgaWYgKCFzKSB7Cj4g PiArICAgICAgICAgICAgIHBvbGljeSA9IGNwdWZyZXFfY3B1X2dldChmcmVxLT5jcHUpOwo+ID4g KyAgICAgICAgICAgICBpZiAocG9saWN5KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgcyA9 IGFkZF9wb2xpY3kocG9saWN5KTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBjcHVmcmVxX2Nw dV9wdXQocG9saWN5KTsKPiA+ICsgICAgICAgICAgICAgfQo+ID4gKyAgICAgfQo+ID4gKyAgICAg aWYgKCFzKQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsKPiA+ICsKPiA+ICsgICAgIGlmIChz LT5mcmVxICE9IGZyZXEtPm5ldyB8fCBwb2xpY3kpIHsKPiA+ICsgICAgICAgICAgICAgcy0+ZnJl cSA9IGZyZXEtPm5ldzsKPiA+ICsgICAgICAgICAgICAgdXBkYXRlX2FsbF9kZXZmcmVxcygpOwo+ ID4gKyAgICAgfQo+ID4gKwo+ID4gK291dDoKPiA+ICsgICAgIG11dGV4X3VubG9jaygmc3RhdGVf bG9jayk7Cj4gPiArICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0cnVj dCBub3RpZmllcl9ibG9jayBjcHVmcmVxX3RyYW5zX25iID0gewo+ID4gKyAgICAgLm5vdGlmaWVy X2NhbGwgPSBjcHVmcmVxX3RyYW5zX25vdGlmaWVyCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMg aW50IHJlZ2lzdGVyX2NwdWZyZXEodm9pZCkKPiA+ICt7Cj4gPiArICAgICBpbnQgcmV0ID0gMDsK PiA+ICsgICAgIHVuc2lnbmVkIGludCBjcHU7Cj4gPiArICAgICBzdHJ1Y3QgY3B1ZnJlcV9wb2xp Y3kgKnBvbGljeTsKPiA+ICsKPiA+ICsgICAgIG11dGV4X2xvY2soJmNwdWZyZXFfcmVnX2xvY2sp Owo+ID4gKwo+ID4gKyAgICAgaWYgKGNwdWZyZXFfY250KQo+ID4gKyAgICAgICAgICAgICBnb3Rv IGNudF9ub3RfemVybzsKPiA+ICsKPiA+ICsgICAgIGdldF9vbmxpbmVfY3B1cygpOwo+ID4gKyAg ICAgcmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmY3B1ZnJlcV90cmFuc19uYiwKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklF Uik7Cj4gPiArICAgICBpZiAocmV0KQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsKPiA+ICsK PiA+ICsgICAgIGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Cj4gPiArICAgICAgICAgICAgIHBv bGljeSA9IGNwdWZyZXFfY3B1X2dldChjcHUpOwo+ID4gKyAgICAgICAgICAgICBpZiAocG9saWN5 KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgYWRkX3BvbGljeShwb2xpY3kpOwo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIGNwdWZyZXFfY3B1X3B1dChwb2xpY3kpOwo+ID4gKyAgICAgICAg ICAgICB9Cj4gPiArICAgICB9Cj4gPiArb3V0Ogo+ID4gKyAgICAgcHV0X29ubGluZV9jcHVzKCk7 Cj4gPiArY250X25vdF96ZXJvOgo+ID4gKyAgICAgaWYgKCFyZXQpCj4gPiArICAgICAgICAgICAg IGNwdWZyZXFfY250Kys7Cj4gPiArICAgICBtdXRleF91bmxvY2soJmNwdWZyZXFfcmVnX2xvY2sp Owo+ID4gKyAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB1bnJl Z2lzdGVyX2NwdWZyZXEodm9pZCkKPiA+ICt7Cj4gPiArICAgICBpbnQgcmV0ID0gMDsKPiA+ICsg ICAgIGludCBjcHU7Cj4gPiArCj4gPiArICAgICBtdXRleF9sb2NrKCZjcHVmcmVxX3JlZ19sb2Nr KTsKPiA+ICsKPiA+ICsgICAgIGlmIChjcHVmcmVxX2NudCA+IDEpCj4gPiArICAgICAgICAgICAg IGdvdG8gb3V0Owo+ID4gKwo+ID4gKyAgICAgY3B1ZnJlcV91bnJlZ2lzdGVyX25vdGlmaWVyKCZj cHVmcmVxX3RyYW5zX25iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BVRlJF UV9UUkFOU0lUSU9OX05PVElGSUVSKTsKPiA+ICsKPiA+ICsgICAgIGZvciAoY3B1ID0gQVJSQVlf U0laRShzdGF0ZSkgLSAxOyBjcHUgPj0gMDsgY3B1LS0pIHsKPiA+ICsgICAgICAgICAgICAgaWYg KCFzdGF0ZVtjcHVdKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAg ICAgICAgICAgICBpZiAoc3RhdGVbY3B1XS0+Zmlyc3RfY3B1ID09IGNwdSkKPiA+ICsgICAgICAg ICAgICAgICAgICAgICBrZnJlZShzdGF0ZVtjcHVdKTsKPiA+ICsgICAgICAgICAgICAgc3RhdGVb Y3B1XSA9IE5VTEw7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArb3V0Ogo+ID4gKyAgICAgY3B1ZnJl cV9jbnQtLTsKPiA+ICsgICAgIG11dGV4X3VubG9jaygmY3B1ZnJlcV9yZWdfbG9jayk7Cj4gPiAr ICAgICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICsvKiA9PT09PT09PT09PT09PT09PT09 PSBkZXZmcmVxIHBhcnQgPT09PT09PT09PT09PT09PT09PT0gKi8KPiA+ICsKPiA+ICtzdGF0aWMg dW5zaWduZWQgaW50IGludGVycG9sYXRlX2ZyZXEoc3RydWN0IGRldmZyZXEgKmRmLCB1bnNpZ25l ZCBpbnQgY3B1KQo+ID4gK3sKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgKmZyZXFfdGFibGUgPSBk Zi0+cHJvZmlsZS0+ZnJlcV90YWJsZTsKPiA+ICsgICAgIHVuc2lnbmVkIGludCBjcHVfbWluID0g c3RhdGVbY3B1XS0+bWluX2ZyZXE7Cj4gPiArICAgICB1bnNpZ25lZCBpbnQgY3B1X21heCA9IHN0 YXRlW2NwdV0tPm1heF9mcmVxOwo+ID4gKyAgICAgdW5zaWduZWQgaW50IGNwdV9mcmVxID0gc3Rh dGVbY3B1XS0+ZnJlcTsKPiA+ICsgICAgIHVuc2lnbmVkIGludCBkZXZfbWluLCBkZXZfbWF4LCBj cHVfcGVyY2VudDsKPiA+ICsKPiA+ICsgICAgIGlmIChmcmVxX3RhYmxlKSB7Cj4gPiArICAgICAg ICAgICAgIGRldl9taW4gPSBmcmVxX3RhYmxlWzBdOwo+ID4gKyAgICAgICAgICAgICBkZXZfbWF4 ID0gZnJlcV90YWJsZVtkZi0+cHJvZmlsZS0+bWF4X3N0YXRlIC0gMV07Cj4gPiArICAgICB9IGVs c2Ugewo+ID4gKyAgICAgICAgICAgICBpZiAoZGYtPm1heF9mcmVxIDw9IGRmLT5taW5fZnJlcSkK PiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKPiA+ICsgICAgICAgICAgICAgZGV2 X21pbiA9IGRmLT5taW5fZnJlcTsKPiA+ICsgICAgICAgICAgICAgZGV2X21heCA9IGRmLT5tYXhf ZnJlcTsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIGNwdV9wZXJjZW50ID0gKChjcHVfZnJl cSAtIGNwdV9taW4pICogMTAwKSAvIChjcHVfbWF4IC0gY3B1X21pbik7Cj4gPiArICAgICByZXR1 cm4gZGV2X21pbiArIG11bHRfZnJhYyhkZXZfbWF4IC0gZGV2X21pbiwgY3B1X3BlcmNlbnQsIDEw MCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3B1X3RvX2Rldl9mcmVx KHN0cnVjdCBkZXZmcmVxICpkZiwgdW5zaWduZWQgaW50IGNwdSkKPiA+ICt7Cj4gPiArICAgICBz dHJ1Y3QgZnJlcV9tYXAgKm1hcCA9IE5VTEw7Cj4gPiArICAgICB1bnNpZ25lZCBpbnQgY3B1X2to eiA9IDAsIGZyZXE7Cj4gPiArICAgICBzdHJ1Y3QgZGV2ZnJlcV9ub2RlICpuID0gZGYtPmRhdGE7 Cj4gPiArCj4gPiArICAgICBpZiAoIXN0YXRlW2NwdV0gfHwgc3RhdGVbY3B1XS0+Zmlyc3RfY3B1 ICE9IGNwdSkgewo+ID4gKyAgICAgICAgICAgICBmcmVxID0gMDsKPiA+ICsgICAgICAgICAgICAg Z290byBvdXQ7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICBpZiAobi0+Y29tbW9uX21hcCkK PiA+ICsgICAgICAgICAgICAgbWFwID0gbi0+Y29tbW9uX21hcDsKPiA+ICsgICAgIGVsc2UgaWYg KG4tPm1hcCkKPiA+ICsgICAgICAgICAgICAgbWFwID0gbi0+bWFwW2NwdV07Cj4gPiArCj4gPiAr ICAgICBjcHVfa2h6ID0gc3RhdGVbY3B1XS0+ZnJlcTsKPiA+ICsKPiA+ICsgICAgIGlmICghbWFw KSB7Cj4gPiArICAgICAgICAgICAgIGZyZXEgPSBpbnRlcnBvbGF0ZV9mcmVxKGRmLCBjcHUpOwo+ ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIHdo aWxlIChtYXAtPmNwdV9raHogJiYgbWFwLT5jcHVfa2h6IDwgY3B1X2toeikKPiA+ICsgICAgICAg ICAgICAgbWFwKys7Cj4gPiArICAgICBpZiAoIW1hcC0+Y3B1X2toeikKPiA+ICsgICAgICAgICAg ICAgbWFwLS07Cj4gPiArICAgICBmcmVxID0gbWFwLT50YXJnZXRfZnJlcTsKPiA+ICsKPiA+ICtv dXQ6Cj4gPiArICAgICBkZXZfZGJnKGRmLT5kZXYucGFyZW50LCAiQ1BVJXU6ICVkIC0+IGRldjog JXVcbiIsIGNwdSwgY3B1X2toeiwgZnJlcSk7Cj4gPiArICAgICByZXR1cm4gZnJlcTsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCBkZXZmcmVxX2NwdWZyZXFfZ2V0X2ZyZXEoc3RydWN0IGRl dmZyZXEgKmRmLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nICpmcmVxKQo+ID4gK3sKPiA+ICsgICAgIHVuc2lnbmVkIGludCBjcHUsIHRndF9m cmVxID0gMDsKPiA+ICsgICAgIHN0cnVjdCBkZXZmcmVxX25vZGUgKm5vZGU7Cj4gPiArCj4gPiAr ICAgICBub2RlID0gZGYtPmRhdGE7Cj4gPiArICAgICBpZiAoIW5vZGUpIHsKPiA+ICsgICAgICAg ICAgICAgcHJfZXJyKCJVbmFibGUgdG8gZmluZCBkZXZmcmVxIG5vZGUhXG4iKTsKPiA+ICsgICAg ICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICBmb3Jf ZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQo+ID4gKyAgICAgICAgICAgICB0Z3RfZnJlcSA9IG1heCh0 Z3RfZnJlcSwgY3B1X3RvX2Rldl9mcmVxKGRmLCBjcHUpKTsKPiA+ICsKPiA+ICsgICAgICpmcmVx ID0gdGd0X2ZyZXE7Cj4gPiArICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IHVuc2lnbmVkIGludCBzaG93X3RhYmxlKGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbiwKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmcmVxX21hcCAqbWFwKQo+ID4g K3sKPiA+ICsgICAgIHVuc2lnbmVkIGludCBjbnQgPSAwOwo+ID4gKwo+ID4gKyAgICAgY250ICs9 IHNucHJpbnRmKGJ1ZiArIGNudCwgbGVuIC0gY250LCAiQ1BVIGZyZXFcdERldmljZSBmcmVxXG4i KTsKPiA+ICsKPiA+ICsgICAgIHdoaWxlIChtYXAtPmNwdV9raHogJiYgY250IDwgbGVuKSB7Cj4g PiArICAgICAgICAgICAgIGNudCArPSBzbnByaW50ZihidWYgKyBjbnQsIGxlbiAtIGNudCwgIiU4 dVx0JTExdVxuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC0+Y3B1X2to eiwgbWFwLT50YXJnZXRfZnJlcSk7Cj4gPiArICAgICAgICAgICAgIG1hcCsrOwo+ID4gKyAgICAg fQo+ID4gKyAgICAgaWYgKGNudCA8IGxlbikKPiA+ICsgICAgICAgICAgICAgY250ICs9IHNucHJp bnRmKGJ1ZiArIGNudCwgbGVuIC0gY250LCAiXG4iKTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiBj bnQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IGZyZXFfbWFwX3Nob3coc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICBjaGFyICpidWYpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IGRldmZyZXEg KmRmID0gdG9fZGV2ZnJlcShkZXYpOwo+ID4gKyAgICAgc3RydWN0IGRldmZyZXFfbm9kZSAqbiA9 IGRmLT5kYXRhOwo+ID4gKyAgICAgc3RydWN0IGZyZXFfbWFwICptYXA7Cj4gPiArICAgICB1bnNp Z25lZCBpbnQgY250ID0gMCwgY3B1Owo+ID4gKwo+ID4gKyAgICAgbXV0ZXhfbG9jaygmc3RhdGVf bG9jayk7Cj4gPiArICAgICBpZiAobi0+Y29tbW9uX21hcCkgewo+ID4gKyAgICAgICAgICAgICBt YXAgPSBuLT5jb21tb25fbWFwOwo+ID4gKyAgICAgICAgICAgICBjbnQgKz0gc25wcmludGYoYnVm ICsgY250LCBQQUdFX1NJWkUgLSBjbnQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiQ29tbW9uIHRhYmxlIGZvciBhbGwgQ1BVczpcbiIpOwo+ID4gKyAgICAgICAgICAgICBjbnQg Kz0gc2hvd190YWJsZShidWYgKyBjbnQsIFBBR0VfU0laRSAtIGNudCwgbWFwKTsKPiA+ICsgICAg IH0gZWxzZSBpZiAobi0+bWFwKSB7Cj4gPiArICAgICAgICAgICAgIGZvcl9lYWNoX3Bvc3NpYmxl X2NwdShjcHUpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBtYXAgPSBuLT5tYXBbY3B1XTsK PiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hcCkKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNudCArPSBz bnByaW50ZihidWYgKyBjbnQsIFBBR0VfU0laRSAtIGNudCwKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIkNQVSAldTpcbiIsIGNwdSk7Cj4gPiArICAgICAgICAgICAg ICAgICAgICAgaWYgKGNudCA+PSBQQUdFX1NJWkUpCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBjbnQgKz0gc2hvd190YWJs ZShidWYgKyBjbnQsIFBBR0VfU0laRSAtIGNudCwgbWFwKTsKPiA+ICsgICAgICAgICAgICAgICAg ICAgICBpZiAoY250ID49IFBBR0VfU0laRSkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwo+ID4gKyAgICAgICAgICAgICB9Cj4gPiArICAgICB9IGVsc2Ugewo+ID4gKyAg ICAgICAgICAgICBjbnQgKz0gc25wcmludGYoYnVmICsgY250LCBQQUdFX1NJWkUgLSBjbnQsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGV2aWNlIGZyZXEgaW50ZXJwb2xhdGVk IGJhc2VkIG9uIENQVSBmcmVxXG4iKTsKPiA+ICsgICAgIH0KPiA+ICsgICAgIG11dGV4X3VubG9j aygmc3RhdGVfbG9jayk7Cj4gPiArCj4gPiArICAgICByZXR1cm4gY250Owo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgREVWSUNFX0FUVFJfUk8oZnJlcV9tYXApOwo+ID4gK3N0YXRpYyBzdHJ1Y3Qg YXR0cmlidXRlICpkZXZfYXR0cltdID0gewo+ID4gKyAgICAgJmRldl9hdHRyX2ZyZXFfbWFwLmF0 dHIsCj4gPiArICAgICBOVUxMLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBhdHRy aWJ1dGVfZ3JvdXAgZGV2X2F0dHJfZ3JvdXAgPSB7Cj4gPiArICAgICAubmFtZSA9ICJjcHVmcmVx LW1hcCIsCj4gPiArICAgICAuYXR0cnMgPSBkZXZfYXR0ciwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0 YXRpYyBpbnQgZGV2ZnJlcV9jcHVmcmVxX2dvdl9zdGFydChzdHJ1Y3QgZGV2ZnJlcSAqZGV2ZnJl cSkKPiA+ICt7Cj4gPiArICAgICBpbnQgcmV0ID0gMDsKPiA+ICsgICAgIHN0cnVjdCBkZXZmcmVx X25vZGUgKm5vZGU7Cj4gPiArICAgICBib29sIGFsbG9jID0gZmFsc2U7Cj4gPiArCj4gPiArICAg ICByZXQgPSByZWdpc3Rlcl9jcHVmcmVxKCk7Cj4gPiArICAgICBpZiAocmV0KQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gcmV0Owo+ID4gKwo+ID4gKyAgICAgcmV0ID0gc3lzZnNfY3JlYXRlX2dy b3VwKCZkZXZmcmVxLT5kZXYua29iaiwgJmRldl9hdHRyX2dyb3VwKTsKPiA+ICsgICAgIGlmIChy ZXQpIHsKPiA+ICsgICAgICAgICAgICAgdW5yZWdpc3Rlcl9jcHVmcmVxKCk7Cj4gPiArICAgICAg ICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICBtdXRleF9sb2Nr KCZzdGF0ZV9sb2NrKTsKPiA+ICsKPiA+ICsgICAgIG5vZGUgPSBmaW5kX2RldmZyZXFfbm9kZShk ZXZmcmVxLT5kZXYucGFyZW50KTsKPiA+ICsgICAgIGlmIChub2RlID09IE5VTEwpIHsKPiA+ICsg ICAgICAgICAgICAgbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZmcmVxX25vZGUpLCBH RlBfS0VSTkVMKTsKPiA+ICsgICAgICAgICAgICAgaWYgKCFub2RlKSB7Cj4gPiArICAgICAgICAg ICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBnb3Rv IGFsbG9jX2ZhaWw7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICAgYWxsb2Mg PSB0cnVlOwo+ID4gKyAgICAgICAgICAgICBub2RlLT5kZXYgPSBkZXZmcmVxLT5kZXYucGFyZW50 Owo+ID4gKyAgICAgICAgICAgICBsaXN0X2FkZF90YWlsKCZub2RlLT5saXN0LCAmZGV2ZnJlcV9s aXN0KTsKPiA+ICsgICAgIH0KPiA+ICsgICAgIG5vZGUtPmRmID0gZGV2ZnJlcTsKPiA+ICsgICAg IG5vZGUtPm9yaWdfZGF0YSA9IGRldmZyZXEtPmRhdGE7Cj4gPiArICAgICBkZXZmcmVxLT5kYXRh ID0gbm9kZTsKPiA+ICsKPiA+ICsgICAgIG11dGV4X2xvY2soJmRldmZyZXEtPmxvY2spOwo+ID4g KyAgICAgcmV0ID0gdXBkYXRlX2RldmZyZXEoZGV2ZnJlcSk7Cj4gPiArICAgICBtdXRleF91bmxv Y2soJmRldmZyZXEtPmxvY2spOwo+ID4gKyAgICAgaWYgKHJldCkgewo+ID4gKyAgICAgICAgICAg ICBwcl9lcnIoIkZyZXEgdXBkYXRlIGZhaWxlZCFcbiIpOwo+ID4gKyAgICAgICAgICAgICBnb3Rv IHVwZGF0ZV9mYWlsOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgbXV0ZXhfdW5sb2NrKCZz dGF0ZV9sb2NrKTsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gKwo+ID4gK3VwZGF0ZV9mYWlsOgo+ ID4gKyAgICAgZGV2ZnJlcS0+ZGF0YSA9IG5vZGUtPm9yaWdfZGF0YTsKPiA+ICsgICAgIGlmIChh bGxvYykgewo+ID4gKyAgICAgICAgICAgICBsaXN0X2RlbCgmbm9kZS0+bGlzdCk7Cj4gPiArICAg ICAgICAgICAgIGtmcmVlKG5vZGUpOwo+ID4gKyAgICAgfQo+ID4gK2FsbG9jX2ZhaWw6Cj4gPiAr ICAgICBtdXRleF91bmxvY2soJnN0YXRlX2xvY2spOwo+ID4gKyAgICAgc3lzZnNfcmVtb3ZlX2dy b3VwKCZkZXZmcmVxLT5kZXYua29iaiwgJmRldl9hdHRyX2dyb3VwKTsKPiA+ICsgICAgIHVucmVn aXN0ZXJfY3B1ZnJlcSgpOwo+ID4gKyAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIHZvaWQgZGV2ZnJlcV9jcHVmcmVxX2dvdl9zdG9wKHN0cnVjdCBkZXZmcmVxICpkZXZm cmVxKQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBkZXZmcmVxX25vZGUgKm5vZGUgPSBkZXZmcmVx LT5kYXRhOwo+ID4gKwo+ID4gKyAgICAgbXV0ZXhfbG9jaygmc3RhdGVfbG9jayk7Cj4gPiArICAg ICBkZXZmcmVxLT5kYXRhID0gbm9kZS0+b3JpZ19kYXRhOwo+ID4gKyAgICAgaWYgKG5vZGUtPm1h cCB8fCBub2RlLT5jb21tb25fbWFwKSB7Cj4gPiArICAgICAgICAgICAgIG5vZGUtPmRmID0gTlVM TDsKPiA+ICsgICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICAgICAgIGxpc3RfZGVsKCZub2RlLT5s aXN0KTsKPiA+ICsgICAgICAgICAgICAga2ZyZWUobm9kZSk7Cj4gPiArICAgICB9Cj4gPiArICAg ICBtdXRleF91bmxvY2soJnN0YXRlX2xvY2spOwo+ID4gKwo+ID4gKyAgICAgc3lzZnNfcmVtb3Zl X2dyb3VwKCZkZXZmcmVxLT5kZXYua29iaiwgJmRldl9hdHRyX2dyb3VwKTsKPiA+ICsgICAgIHVu cmVnaXN0ZXJfY3B1ZnJlcSgpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGRldmZyZXFf Y3B1ZnJlcV9ldl9oYW5kbGVyKHN0cnVjdCBkZXZmcmVxICpkZXZmcmVxLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXZlbnQsIHZvaWQgKmRh dGEpCj4gPiArewo+ID4gKyAgICAgaW50IHJldDsKPiA+ICsKPiA+ICsgICAgIHN3aXRjaCAoZXZl bnQpIHsKPiA+ICsgICAgIGNhc2UgREVWRlJFUV9HT1ZfU1RBUlQ6Cj4gPiArCj4gPiArICAgICAg ICAgICAgIHJldCA9IGRldmZyZXFfY3B1ZnJlcV9nb3Zfc3RhcnQoZGV2ZnJlcSk7Cj4gPiArICAg ICAgICAgICAgIGlmIChyZXQpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBwcl9lcnIoIkdv dmVybm9yIHN0YXJ0IGZhaWxlZCFcbiIpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVy biByZXQ7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICAgcHJfZGVidWcoIkVu YWJsZWQgQ1BVZnJlcS1tYXAgZ292ZXJub3JcbiIpOwo+ID4gKyAgICAgICAgICAgICBicmVhazsK PiA+ICsKPiA+ICsgICAgIGNhc2UgREVWRlJFUV9HT1ZfU1RPUDoKPiA+ICsKPiA+ICsgICAgICAg ICAgICAgZGV2ZnJlcV9jcHVmcmVxX2dvdl9zdG9wKGRldmZyZXEpOwo+ID4gKyAgICAgICAgICAg ICBwcl9kZWJ1ZygiRGlzYWJsZWQgZGV2IENQVWZyZXEtbWFwIGdvdmVybm9yXG4iKTsKPiA+ICsg ICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICByZXR1cm4gMDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBkZXZmcmVxX2dvdmVybm9yIGRldmZyZXFf Y3B1ZnJlcSA9IHsKPiA+ICsgICAgIC5uYW1lID0gImNwdWZyZXEtbWFwIiwKPiA+ICsgICAgIC5n ZXRfdGFyZ2V0X2ZyZXEgPSBkZXZmcmVxX2NwdWZyZXFfZ2V0X2ZyZXEsCj4gPiArICAgICAuZXZl bnRfaGFuZGxlciA9IGRldmZyZXFfY3B1ZnJlcV9ldl9oYW5kbGVyLAo+ID4gK307Cj4gPiArCj4g PiArI2RlZmluZSBOVU1fQ09MUyAgICAgMgo+ID4gK3N0YXRpYyBzdHJ1Y3QgZnJlcV9tYXAgKnJl YWRfdGJsKHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwgY2hhciAqcHJvcF9uYW1lKQo+ID4g K3sKPiA+ICsgICAgIGludCBsZW4sIG5mLCBpLCBqOwo+ID4gKyAgICAgdTMyIGRhdGE7Cj4gPiAr ICAgICBzdHJ1Y3QgZnJlcV9tYXAgKnRibDsKPiA+ICsKPiA+ICsgICAgIGlmICghb2ZfZmluZF9w cm9wZXJ0eShvZl9ub2RlLCBwcm9wX25hbWUsICZsZW4pKQo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gTlVMTDsKPiA+ICsgICAgIGxlbiAvPSBzaXplb2YoZGF0YSk7Cj4gPiArCj4gPiArICAgICBp ZiAobGVuICUgTlVNX0NPTFMgfHwgbGVuID09IDApCj4gPiArICAgICAgICAgICAgIHJldHVybiBO VUxMOwo+ID4gKyAgICAgbmYgPSBsZW4gLyBOVU1fQ09MUzsKPiA+ICsKPiA+ICsgICAgIHRibCA9 IGt6YWxsb2MoKG5mICsgMSkgKiBzaXplb2YoKnRibCksIEdGUF9LRVJORUwpOwo+ID4gKyAgICAg aWYgKCF0YmwpCj4gPiArICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ID4gKwo+ID4gKyAgICAg Zm9yIChpID0gMCwgaiA9IDA7IGkgPCBuZjsgaSsrLCBqICs9IDIpIHsKPiA+ICsgICAgICAgICAg ICAgb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgob2Zfbm9kZSwgcHJvcF9uYW1lLCBqLCAmZGF0 YSk7Cj4gPiArICAgICAgICAgICAgIHRibFtpXS5jcHVfa2h6ID0gZGF0YTsKPiA+ICsKPiA+ICsg ICAgICAgICAgICAgb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgob2Zfbm9kZSwgcHJvcF9uYW1l LCBqICsgMSwgJmRhdGEpOwo+ID4gKyAgICAgICAgICAgICB0YmxbaV0udGFyZ2V0X2ZyZXEgPSBk YXRhOwo+ID4gKyAgICAgfQo+ID4gKyAgICAgdGJsW2ldLmNwdV9raHogPSAwOwo+ID4gKwo+ID4g KyAgICAgcmV0dXJuIHRibDsKPiA+ICt9Cj4gPiArCj4gPiArI2RlZmluZSBQUk9QX1RBUkdFVCAi dGFyZ2V0LWRldiIKPiA+ICsjZGVmaW5lIFBST1BfVEFCTEUgImNwdS10by1kZXYtbWFwIgo+ID4g K3N0YXRpYyBpbnQgYWRkX3RhYmxlX2Zyb21fb2Yoc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2Rl KQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqdGFyZ2V0X29mX25vZGU7Cj4g PiArICAgICBzdHJ1Y3QgZGV2ZnJlcV9ub2RlICpub2RlOwo+ID4gKyAgICAgc3RydWN0IGZyZXFf bWFwICpjb21tb25fdGJsOwo+ID4gKyAgICAgc3RydWN0IGZyZXFfbWFwICoqdGJsX2xpc3QgPSBO VUxMOwo+ID4gKyAgICAgc3RhdGljIGNoYXIgcHJvcF9uYW1lW10gPSBQUk9QX1RBQkxFICItOTk5 OTk5IjsKPiA+ICsgICAgIGludCBjcHUsIHJldCwgY250ID0gMCwgcHJvcF9zeiA9IEFSUkFZX1NJ WkUocHJvcF9uYW1lKTsKPiA+ICsKPiA+ICsgICAgIHRhcmdldF9vZl9ub2RlID0gb2ZfcGFyc2Vf cGhhbmRsZShvZl9ub2RlLCBQUk9QX1RBUkdFVCwgMCk7Cj4gPiArICAgICBpZiAoIXRhcmdldF9v Zl9ub2RlKQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsgICAg IG5vZGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2ZnJlcV9ub2RlKSwgR0ZQX0tFUk5FTCk7 Cj4gPiArICAgICBpZiAoIW5vZGUpCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ ID4gKwo+ID4gKyAgICAgY29tbW9uX3RibCA9IHJlYWRfdGJsKG9mX25vZGUsIFBST1BfVEFCTEUp Owo+ID4gKyAgICAgaWYgKCFjb21tb25fdGJsKSB7Cj4gPiArICAgICAgICAgICAgIHRibF9saXN0 ID0ga3phbGxvYyhzaXplb2YoKnRibF9saXN0KSAqIE5SX0NQVVMsIEdGUF9LRVJORUwpOwo+ID4g KyAgICAgICAgICAgICBpZiAoIXRibF9saXN0KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAg cmV0ID0gLUVOT01FTTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9saXN0Owo+ ID4gKyAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgIGZvcl9lYWNoX3Bvc3Np YmxlX2NwdShjcHUpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXQgPSBzbnByaW50Zihw cm9wX25hbWUsIHByb3Bfc3osICIlcy0lZCIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBST1BfVEFCTEUsIGNwdSk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAg aWYgKHJldCA+PSBwcm9wX3N6KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cl93YXJuKCJNb3JlIENQVXMgdGhhbiBJIGNhbiBoYW5kbGUhXG4iKTsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByX3dhcm4oIlNraXBwaW5nIHJlc3Qgb2YgdGhlIHRhYmxlcyFc biIpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAg ICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHRibF9saXN0W2NwdV0g PSByZWFkX3RibChvZl9ub2RlLCBwcm9wX25hbWUpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAg IGlmICh0YmxfbGlzdFtjcHVdKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY250 Kys7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgIH0KPiA+ICsgICAgIGlmICghY29tbW9u X3RibCAmJiAhY250KSB7Cj4gPiArICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7Cj4gPiArICAg ICAgICAgICAgIGdvdG8gZXJyX3RibDsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIG11dGV4 X2xvY2soJnN0YXRlX2xvY2spOwo+ID4gKyAgICAgbm9kZS0+b2Zfbm9kZSA9IHRhcmdldF9vZl9u b2RlOwo+ID4gKyAgICAgbm9kZS0+bWFwID0gdGJsX2xpc3Q7Cj4gPiArICAgICBub2RlLT5jb21t b25fbWFwID0gY29tbW9uX3RibDsKPiA+ICsgICAgIGxpc3RfYWRkX3RhaWwoJm5vZGUtPmxpc3Qs ICZkZXZmcmVxX2xpc3QpOwo+ID4gKyAgICAgbXV0ZXhfdW5sb2NrKCZzdGF0ZV9sb2NrKTsKPiA+ ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gK2Vycl90Ymw6Cj4gPiArICAgICBrZnJlZSh0Ymxf bGlzdCk7Cj4gPiArZXJyX2xpc3Q6Cj4gPiArICAgICBrZnJlZShub2RlKTsKPiA+ICsgICAgIHJl dHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgX19pbml0IGRldmZyZXFfY3B1 ZnJlcV9pbml0KHZvaWQpCj4gPiArewo+ID4gKyAgICAgaW50IHJldDsKPiA+ICsgICAgIHN0cnVj dCBkZXZpY2Vfbm9kZSAqb2ZfcGFyLCAqb2ZfY2hpbGQ7Cj4gPiArCj4gPiArICAgICBvZl9wYXIg PSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiZGV2ZnJlcS1jcHVmcmVxLW1hcCIpOwo+ID4g KyAgICAgaWYgKG9mX3Bhcikgewo+ID4gKyAgICAgICAgICAgICBmb3JfZWFjaF9jaGlsZF9vZl9u b2RlKG9mX3Bhciwgb2ZfY2hpbGQpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXQgPSBh ZGRfdGFibGVfZnJvbV9vZihvZl9jaGlsZCk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYg KHJldCkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByX2VycigiUGFyc2luZyAl cyBmYWlsZWQhXG4iLCBvZl9jaGlsZC0+bmFtZSk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAg ZWxzZQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJfZGVidWcoIlBhcnNlZCAl cy5cbiIsIG9mX2NoaWxkLT5uYW1lKTsKPiA+ICsgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAg ICAgICBvZl9ub2RlX3B1dChvZl9wYXIpOwo+ID4gKyAgICAgfSBlbHNlIHsKPiA+ICsgICAgICAg ICAgICAgcHJfaW5mbygiTm8gdGFibGVzIHBhcnNlZCBmcm9tIERULlxuIik7Cj4gPiArICAgICB9 Cj4gPiArCj4gPiArICAgICByZXQgPSBkZXZmcmVxX2FkZF9nb3Zlcm5vcigmZGV2ZnJlcV9jcHVm cmVxKTsKPiA+ICsgICAgIGlmIChyZXQpIHsKPiA+ICsgICAgICAgICAgICAgcHJfZXJyKCJjcHVm cmVxLW1hcCBnb3Zlcm5vciBhZGQgZmFpbGVkIVxuIik7Cj4gPiArICAgICAgICAgICAgIHJldHVy biByZXQ7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiAr c3Vic3lzX2luaXRjYWxsKGRldmZyZXFfY3B1ZnJlcV9pbml0KTsKPiA+ICsKPiA+ICtzdGF0aWMg dm9pZCBfX2V4aXQgZGV2ZnJlcV9jcHVmcmVxX2V4aXQodm9pZCkKPiA+ICt7Cj4gPiArICAgICBp bnQgcmV0LCBjcHU7Cj4gPiArICAgICBzdHJ1Y3QgZGV2ZnJlcV9ub2RlICpub2RlLCAqdG1wOwo+ ID4gKwo+ID4gKyAgICAgcmV0ID0gZGV2ZnJlcV9yZW1vdmVfZ292ZXJub3IoJmRldmZyZXFfY3B1 ZnJlcSk7Cj4gPiArICAgICBpZiAocmV0KQo+ID4gKyAgICAgICAgICAgICBwcl9lcnIoImNwdWZy ZXEtbWFwIGdvdmVybm9yIHJlbW92ZSBmYWlsZWQhXG4iKTsKPiA+ICsKPiA+ICsgICAgIG11dGV4 X2xvY2soJnN0YXRlX2xvY2spOwo+ID4gKyAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5v ZGUsIHRtcCwgJmRldmZyZXFfbGlzdCwgbGlzdCkgewo+ID4gKyAgICAgICAgICAgICBrZnJlZShu b2RlLT5jb21tb25fbWFwKTsKPiA+ICsgICAgICAgICAgICAgZm9yX2VhY2hfcG9zc2libGVfY3B1 KGNwdSkKPiA+ICsgICAgICAgICAgICAgICAgICAgICBrZnJlZShub2RlLT5tYXBbY3B1XSk7Cj4g PiArICAgICAgICAgICAgIGtmcmVlKG5vZGUtPm1hcCk7Cj4gPiArICAgICAgICAgICAgIGxpc3Rf ZGVsKCZub2RlLT5saXN0KTsKPiA+ICsgICAgICAgICAgICAga2ZyZWUobm9kZSk7Cj4gPiArICAg ICB9Cj4gPiArICAgICBtdXRleF91bmxvY2soJnN0YXRlX2xvY2spOwo+ID4gK30KPiA+ICttb2R1 bGVfZXhpdChkZXZmcmVxX2NwdWZyZXFfZXhpdCk7Cj4gPiArCj4gPiArTU9EVUxFX0RFU0NSSVBU SU9OKCJkZXZmcmVxIGdvdiB0aGF0IHNldHMgZGV2IGZyZXEgYmFzZWQgb24gY3VycmVudCBDUFUg ZnJlcSIpOwo+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiA+CgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==