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=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_2 autolearn=unavailable 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 A5261C3B19D for ; Fri, 14 Feb 2020 13:48:18 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 36CC92168B for ; Fri, 14 Feb 2020 13:48:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 36CC92168B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvmarm-bounces@lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 983404AEAB; Fri, 14 Feb 2020 08:48:17 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id KSg-51Qq1hj2; Fri, 14 Feb 2020 08:48:15 -0500 (EST) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 4E9324AE9A; Fri, 14 Feb 2020 08:48:15 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 80E9F4AE8E for ; Fri, 14 Feb 2020 08:48:13 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RePdPf0PdCfP for ; Fri, 14 Feb 2020 08:48:11 -0500 (EST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 0BA464ACE6 for ; Fri, 14 Feb 2020 08:48:11 -0500 (EST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8A3251FB; Fri, 14 Feb 2020 05:48:10 -0800 (PST) Received: from donnerap.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6A5CE3F68F; Fri, 14 Feb 2020 05:48:09 -0800 (PST) Date: Fri, 14 Feb 2020 13:47:55 +0000 From: Andre Przywara To: Alexandru Elisei Subject: Re: [PATCH kvmtool v2] Add emulation for CFI compatible flash memory Message-ID: <20200214134755.7ae855e4@donnerap.cambridge.arm.com> In-Reply-To: <1d81bc3f-dc74-b0c4-2410-b5c4c21fe69c@arm.com> References: <20200207121941.259157-1-andre.przywara@arm.com> <1d81bc3f-dc74-b0c4-2410-b5c4c21fe69c@arm.com> Organization: ARM X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; aarch64-unknown-linux-gnu) MIME-Version: 1.0 Cc: Raphael Gault , Sami Mujawar , Will Deacon , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu T24gRnJpLCA3IEZlYiAyMDIwIDE3OjM0OjIwICswMDAwCkFsZXhhbmRydSBFbGlzZWkgPGFsZXhh bmRydS5lbGlzZWlAYXJtLmNvbT4gd3JvdGU6CgpIaSBBbGV4LAoKbWFueSB0aGFua3MgZm9yIGhh dmluZyBhIGxvb2shCgo+IEknbSBnb2luZyB0byBkbyBteSBiZXN0IHRvIHJldmlldyB5b3VyIHBh dGNoIDopIEknbGwgZG8gaXQgaW4gY2h1bmtzLCBiZWNhdXNlIGl0J3MKPiBwcmV0dHkgbGFyZ2Us IGFuZCBkZWZpbml0ZWx5IG5vdCB0cml2aWFsLgoKT0ssIHJlcGx5aW5nIGhlcmUsIGFuZCBoYXZp bmcgaXQgbW9zdGx5IGZpeGVkIGFscmVhZHkuCldpbGwgd2FpdCBmb3IgZnVydGhlciByZXBsaWVz IGJlZm9yZSBhIHJlLXBvc3QsIHVubGVzcyB5b3Ugd2FudCB0byBiZW5lZml0IGZyb20gdGhlIHNw bGl0IE1NSU8gZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBtYWtlIHJldmlld2luZyB0aGUgc3RhdGUg bWFjaGluZSBlYXNpZXIuIEp1c3QgbGV0IG1lIGtub3cuCgo+IE9uIDIvNy8yMCAxMjoxOSBQTSwg QW5kcmUgUHJ6eXdhcmEgd3JvdGU6Cj4gPiBGcm9tOiBSYXBoYWVsIEdhdWx0IDxyYXBoYWVsLmdh dWx0QGFybS5jb20+Cj4gPgo+ID4gVGhlIEVESyBJSSBVRUZJIGZpcm13YXJlIGltcGxlbWVudGF0 aW9uIHJlcXVpcmVzIHNvbWUgc3RvcmFnZSBmb3IgdGhlIEVGSQo+ID4gdmFyaWFibGVzLCB3aGlj aCBpcyB0eXBpY2FsbHkgc29tZSBmbGFzaCBzdG9yYWdlLgo+ID4gU2luY2UgdGhpcyBpcyBhbHJl YWR5IHN1cHBvcnRlZCBvbiB0aGUgRURLIElJIHNpZGUsIHdlIGFkZCBhIENGSSBmbGFzaAo+ID4g ZW11bGF0aW9uIHRvIGt2bXRvb2wuCj4gPiBUaGlzIGlzIGJhY2tlZCBieSBhIGZpbGUsIHNwZWNp ZmllZCB2aWEgdGhlIC0tZmxhc2ggb3IgLUYgY29tbWFuZCBsaW5lCj4gPiBvcHRpb24uIEFueSBm bGFzaCB3cml0ZXMgZG9uZSBieSB0aGUgZ3Vlc3Qgd2lsbCBpbW1lZGlhdGVseSBiZSByZWZsZWN0 ZWQKPiA+IGludG8gdGhpcyBmaWxlIChrdm10b29sIG1tYXAncyB0aGUgZmlsZSkuCj4gPgo+ID4g VGhpcyBpbXBsZW1lbnRzIGEgQ0ZJIGZsYXNoIHVzaW5nIHRoZSAiSW50ZWwvU2hhcnAgZXh0ZW5k ZWQgY29tbWFuZAo+ID4gc2V0IiwgYXMgc3BlY2lmaWVkIGluOgo+ID4gLSBKRURFQyBKRVNENjgu MDEKPiA+IC0gSkVERUMgSkVQMTM3Qgo+ID4gLSBJbnRlbCBBcHBsaWNhdGlvbiBOb3RlIDY0Ngo+ ID4gU29tZSBnYXBzIGluIHRob3NlIHNwZWNzIGhhdmUgYmVlbiBmaWxsZWQgYnkgbG9va2luZyBh dCByZWFsIGRldmljZXMgYW5kCj4gPiBvdGhlciBpbXBsZW1lbnRhdGlvbnMgKFFFTVUsIExpbnV4 IGtlcm5lbCBkcml2ZXIpLgo+ID4KPiA+IEF0IHRoZSBtb21lbnQgdGhpcyByZWxpZXMgb24gRFQg dG8gYWR2ZXJ0aXNlIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlCj4gPiBmbGFzaCBtZW1vcnkgKG1h cHBlZCBpbnRvIHRoZSBNTUlPIGFkZHJlc3Mgc3BhY2UpIGFuZCBpcyBvbmx5IGVuYWJsZWQKPiA+ IGZvciBBUk0vQVJNNjQuIFRoZSBlbXVsYXRpb24gaXRzZWxmIGlzIGFyY2hpdGVjdHVyZSBhZ25v c3RpYywgdGhvdWdoLgo+ID4KPiA+IFRoaXMgaXMgb25lIG1pc3NpbmcgcGllY2UgdG93YXJkIGEg d29ya2luZyBVRUZJIGJvb3Qgd2l0aCBrdm10b29sIG9uCj4gPiBBUk0gZ3Vlc3RzLCB0aGUgb3Ro ZXIgaXMgdG8gcHJvdmlkZSB3cml0YWJsZSBQQ0kgQkFScywgd2hpY2ggaXMgV0lQLgo+ID4KPiA+ IFNpZ25lZC1vZmYtYnk6IFJhcGhhZWwgR2F1bHQgPHJhcGhhZWwuZ2F1bHRAYXJtLmNvbT4KPiA+ IFtBbmRyZTogcmV3cml0aW5nIGFuZCBmaXhpbmddCj4gPiBTaWduZWQtb2ZmLWJ5OiBBbmRyZSBQ cnp5d3JhIDxhbmRyZS5wcnp5d2FyYUBhcm0uY29tPgo+ID4gLS0tCj4gPiBIaSwKPiA+Cj4gPiBh biB1cGRhdGUgYWRkcmVzc2luZyBXaWxsJ3MgY29tbWVudHMuIEkgYWRkZWQgY29hcnNlIGdyYWlu ZWQgbG9ja2luZwo+ID4gdG8gdGhlIE1NSU8gaGFuZGxlciwgdG8gcHJldmVudCBjb25jdXJyZW50 IHZDUFUgYWNjZXNzZXMgZnJvbSBtZXNzaW5nIHVwCj4gPiB0aGUgaW50ZXJuYWwgQ0ZJIGZsYXNo IHN0YXRlIG1hY2hpbmUuCj4gPiBJIGFsc28gZm9sZGVkIHRoZSBhY3R1YWwgZmxhc2ggYXJyYXkg cmVhZCBhY2Nlc3MgaW50byB0aGUgTU1JTyBoYW5kbGVyCj4gPiBhbmQgZml4ZWQgdGhlIG90aGVy IHNtYWxsIGlzc3Vlcy4KPiA+Cj4gPiBDaGVlcnMsCj4gPiBBbmRyZQo+ID4KPiA+ICBNYWtlZmls ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwo+ID4gIGFybS9pbmNsdWRlL2FybS1j b21tb24va3ZtLWFyY2guaCB8ICAgMyArCj4gPiAgYnVpbHRpbi1ydW4uYyAgICAgICAgICAgICAg ICAgICAgIHwgICAyICsKPiA+ICBody9jZmlfZmxhc2guYyAgICAgICAgICAgICAgICAgICAgfCA1 NDYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgaW5jbHVkZS9rdm0va3ZtLWNv bmZpZy5oICAgICAgICAgIHwgICAxICsKPiA+ICBpbmNsdWRlL2t2bS91dGlsLmggICAgICAgICAg ICAgICAgfCAgIDUgKwo+ID4gIDYgZmlsZXMgY2hhbmdlZCwgNTYzIGluc2VydGlvbnMoKykKPiA+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgaHcvY2ZpX2ZsYXNoLmMKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEv TWFrZWZpbGUgYi9NYWtlZmlsZQo+ID4gaW5kZXggMzg2MjExMmMuLjdlZDZmYjVlIDEwMDY0NAo+ ID4gLS0tIGEvTWFrZWZpbGUKPiA+ICsrKyBiL01ha2VmaWxlCj4gPiBAQCAtMTcwLDYgKzE3MCw3 IEBAIGlmZXEgKCQoQVJDSCksIGFybSkKPiA+ICAJQ0ZMQUdTCQkrPSAtbWFyY2g9YXJtdjctYQo+ ID4gIAo+ID4gIAlBUkNIX1dBTlRfTElCRkRUIDo9IHkKPiA+ICsJQVJDSF9IQVNfRkxBU0hfTUVN IDo9IHkKPiA+ICBlbmRpZgo+ID4gIAo+ID4gICMgQVJNNjQKPiA+IEBAIC0xODIsNiArMTgzLDcg QEAgaWZlcSAoJChBUkNIKSwgYXJtNjQpCj4gPiAgCUFSQ0hfSU5DTFVERQkrPSAtSWFybS9hYXJj aDY0L2luY2x1ZGUKPiA+ICAKPiA+ICAJQVJDSF9XQU5UX0xJQkZEVCA6PSB5Cj4gPiArCUFSQ0hf SEFTX0ZMQVNIX01FTSA6PSB5Cj4gPiAgZW5kaWYKPiA+ICAKPiA+ICBpZmVxICgkKEFSQ0gpLG1p cHMpCj4gPiBAQCAtMjYxLDYgKzI2MywxMCBAQCBpZmVxICh5LCQoQVJDSF9IQVNfRlJBTUVCVUZG RVIpKQo+ID4gIAllbmRpZgo+ID4gIGVuZGlmCj4gPiAgCj4gPiAraWZlcSAoeSwkKEFSQ0hfSEFT X0ZMQVNIX01FTSkpCj4gPiArCU9CSlMJKz0gaHcvY2ZpX2ZsYXNoLm8KPiA+ICtlbmRpZgo+ID4g Kwo+ID4gIGlmZXEgKCQoY2FsbCB0cnktYnVpbGQsJChTT1VSQ0VfWkxJQiksJChDRkxBR1MpLCQo TERGTEFHUykgLWx6KSx5KQo+ID4gIAlDRkxBR1NfRFlOT1BUCSs9IC1EQ09ORklHX0hBU19aTElC Cj4gPiAgCUxJQlNfRFlOT1BUCSs9IC1sego+ID4gZGlmZiAtLWdpdCBhL2FybS9pbmNsdWRlL2Fy bS1jb21tb24va3ZtLWFyY2guaCBiL2FybS9pbmNsdWRlL2FybS1jb21tb24va3ZtLWFyY2guaAo+ ID4gaW5kZXggYjlkNDg2ZDUuLjJiYjA4NWY0IDEwMDY0NAo+ID4gLS0tIGEvYXJtL2luY2x1ZGUv YXJtLWNvbW1vbi9rdm0tYXJjaC5oCj4gPiArKysgYi9hcm0vaW5jbHVkZS9hcm0tY29tbW9uL2t2 bS1hcmNoLmgKPiA+IEBAIC0yMSw2ICsyMSw5IEBACj4gPiAgI2RlZmluZSBBUk1fR0lDX0RJU1Rf U0laRQkweDEwMDAwCj4gPiAgI2RlZmluZSBBUk1fR0lDX0NQVUlfU0laRQkweDIwMDAwCj4gPiAg Cj4gPiArI2RlZmluZSBBUk1fRkxBU0hfTU1JT19CQVNFCTB4MjAwMDAwMAkJLyogMzIgTUIgKi8K PiA+ICsjZGVmaW5lIEtWTV9GTEFTSF9NTUlPX0JBU0UJQVJNX0ZMQVNIX01NSU9fQkFTRSAgCj4g Cj4gRWFjaCB0aW1lIEkgdHJ5IHRvIHJlYWQgdGhlIG1lbW9yeSBsYXlvdXQgZm9yIEFSTSBJIGdl dCBhIGhlYWRhY2hlLiBBY2NvcmRpbmcgdG8KPiBteSBjYWxjdWxhdGlvbnMsIHRoaXMgZmFsbHMg cmlnaHQgaW5zaWRlIEFSTV9NTUlPX0FSRUEsIHJpZ2h0PyBBbnkgcGFydGljdWxhcgo+IHJlYXNv biBmb3IgY2hvb3NpbmcgdGhpcyBhZGRyZXNzPyBXaHkgbm90IGNhcnZlIGl0cyBvd24gZGVkaWNh dGUgYXJlYSwgc28gd2Ugd29uJ3QKPiBydW4gdGhlIGhpZ2hseSB1bmxpa2VseSByaXNrIHRoYXQg aXQgd2lsbCBiZSBvdmVyd3JpdHRlbiwgc2luY2UgaXQncyBpbiB0aGUgTU1JTwo+IGFsbG9jYXRp b24gYXJlYT8KClRoZSBFREsyIGJ1aWxkIEkgdXNlZCBoYXMgdGhlIGJhc2UgYWRkcmVzcyBmaXhl ZCBhdCAzMk1CLiBTbyBJIGp1c3QgdXNlZCB0aGlzIGFkZHJlc3MgaGVyZS4gU2FtaSBpcyB3b3Jr aW5nIG9uIG1ha2luZyB0aGlzIGZsZXhpYmxlIGFzIHdlIHNwZWFrLCBidXQgaXQncyBub3QgZWFz eSBkdWUgdG8gc29tZSBFREstMiBkZXNpZ24gaXNzdWVzLgpBcyBhbiBpbnRlcmltIG1lYXN1cmUg SSB3b3VsZCB0cnkgdG8gZGVzY3JpYmUgdGhpcyB1c2luZyB0aGUgZXhpc3RpbmcgTU1JTyBsYXlv dXQgbWFjcm9zLCB0byBhdCBsZWFzdCBhdm9pZCBvdmVybGFwcyB3aXRoIHZpcnRpby1tbWlvLgpJ IGFjdHVhbGx5IG1pZ2h0IG1vdmUgdGhhdCBhZGRyZXNzIHRvIHRoZSBiZWdpbm5pbmcgZm9yIG5v dywgYXMgMzJNQiBpcyBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiB0aGUgTU1JTyBhcmVhLgpR RU1VIGhhcyB0aGF0IGhhcmRjb2RlZCAoYm90aCBpbiBRRU1VIGFuZCBFREstMikgYXMgd2VsbCwg YnR3LgogCj4gPiArCj4gPiAgI2RlZmluZSBBUk1fSU9QT1JUX1NJWkUJCShBUk1fTU1JT19BUkVB IC0gQVJNX0lPUE9SVF9BUkVBKQo+ID4gICNkZWZpbmUgQVJNX1ZJUlRJT19NTUlPX1NJWkUJKEFS TV9BWElfQVJFQSAtIChBUk1fTU1JT19BUkVBICsgQVJNX0dJQ19TSVpFKSkgIAo+IAo+IFRoYXQn cyBub3QgY29ycmVjdCBhbnltb3JlLCBiZWNhdXNlIGZsYXNoIG1lbW9yeSBpcyBpbiB0aGUgQVJN X01NSU9fQVJFQS4KClRydWUsIEkgd2lsbCB0cnkgdG8gZmluZCB0aGUgcmlnaHQgcGxhY2UgZm9y IHRoaXMuIFNvbWV3aGF0IHByb2JsZW1hdGljIGlzIHRoZSBkaWZmZXJpbmcgc2l6ZSwgYnV0IHdl IGNvdWxkIGp1c3QgaW1wb3NlIGFuIHVwcGVyIGxpbWl0IG9uIHRoaXMuCgo+ID4gICNkZWZpbmUg QVJNX1BDSV9DRkdfU0laRQkoMVVMTCA8PCAyNCkKPiA+IGRpZmYgLS1naXQgYS9idWlsdGluLXJ1 bi5jIGIvYnVpbHRpbi1ydW4uYwo+ID4gaW5kZXggZjhkYzZjNzIuLmRmOGM2NzQxIDEwMDY0NAo+ ID4gLS0tIGEvYnVpbHRpbi1ydW4uYwo+ID4gKysrIGIvYnVpbHRpbi1ydW4uYwo+ID4gQEAgLTEz OCw2ICsxMzgsOCBAQCB2b2lkIGt2bV9ydW5fc2V0X3dyYXBwZXJfc2FuZGJveCh2b2lkKQo+ID4g IAkJCSJLZXJuZWwgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyIpLAkJXAo+ID4gIAlPUFRfU1RSSU5H KCdmJywgImZpcm13YXJlIiwgJihjZmcpLT5maXJtd2FyZV9maWxlbmFtZSwgImZpcm13YXJlIixc Cj4gPiAgCQkJIkZpcm13YXJlIGltYWdlIHRvIGJvb3QgaW4gdmlydHVhbCBtYWNoaW5lIiksCVwK PiA+ICsJT1BUX1NUUklORygnRicsICJmbGFzaCIsICYoY2ZnKS0+Zmxhc2hfZmlsZW5hbWUsICJm bGFzaCIsXAo+ID4gKwkJCSJGbGFzaCBpbWFnZSB0byBwcmVzZW50IHRvIHZpcnR1YWwgbWFjaGlu ZSIpLAlcCj4gPiAgCQkJCQkJCQkJXAo+ID4gIAlPUFRfR1JPVVAoIk5ldHdvcmtpbmcgb3B0aW9u czoiKSwJCQkJXAo+ID4gIAlPUFRfQ0FMTEJBQ0tfREVGQVVMVCgnbicsICJuZXR3b3JrIiwgTlVM TCwgIm5ldHdvcmsgcGFyYW1zIiwJXAo+ID4gZGlmZiAtLWdpdCBhL2h3L2NmaV9mbGFzaC5jIGIv aHcvY2ZpX2ZsYXNoLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAw MC4uZDdjMGU3ZTgKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2h3L2NmaV9mbGFzaC5jCj4g PiBAQCAtMCwwICsxLDU0NiBAQAo+ID4gKyNpbmNsdWRlIDxzdGRib29sLmg+Cj4gPiArI2luY2x1 ZGUgPHN0ZGxpYi5oPgo+ID4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiA+ICsjaW5jbHVkZSA8bGlu dXgvYml0b3BzLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ID4gKyNpbmNsdWRlIDxs aW51eC9zaXplcy5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ID4gKwo+ID4gKyNp bmNsdWRlICJrdm0va3ZtLmgiCj4gPiArI2luY2x1ZGUgImt2bS9rdm0tYXJjaC5oIgo+ID4gKyNp bmNsdWRlICJrdm0vZGV2aWNlcy5oIgo+ID4gKyNpbmNsdWRlICJrdm0vZmR0LmgiCj4gPiArI2lu Y2x1ZGUgImt2bS9tdXRleC5oIgo+ID4gKyNpbmNsdWRlICJrdm0vdXRpbC5oIgo+ID4gKwo+ID4g Ky8qIFRoZSBFREsyIGRyaXZlciBoYXJkY29kZXMgdHdvIDE2LWJpdCBjaGlwcyBvbiBhIDMyLWJp dCBidXMuICovCj4gPiArI2RlZmluZSBDRklfTlJfRkxBU0hfQ0hJUFMJCQkyCj4gPiArCj4gPiAr LyogV2UgYWx3YXlzIGVtdWxhdGUgYSAzMiBiaXQgYnVzIHdpZHRoLiAqLwo+ID4gKyNkZWZpbmUg Q0ZJX0JVU19XSURUSAkJCQk0Cj4gPiArCj4gPiArLyogVGhlICplZmZlY3RpdmUqIHNpemUgb2Yg YW4gZXJhc2UgYmxvY2sgKG92ZXIgYWxsIGNoaXBzKSAqLwo+ID4gKyNkZWZpbmUgRkxBU0hfQkxP Q0tfU0laRQkJCVNaXzY0Swo+ID4gKwo+ID4gKyNkZWZpbmUgUFJPR1JBTV9CVUZGX1NJWkVfQklU UwkJCTcKPiA+ICsjZGVmaW5lIFBST0dSQU1fQlVGRl9TSVpFCQkJKDFVIDw8IFBST0dSQU1fQlVG Rl9TSVpFX0JJVFMpICAKPiAKPiBKdXN0IG1ha2luZyBzdXJlIHRoaXMgaXMgbm90IGFuIG9mZi1i eS1vbmUgZXJyb3IuIFRoZSBidWZmZXIgc2l6ZSBpcyAyXjcgPSAxMjgKPiB3b3Jkcywgd2hpY2gg bWFrZXMgaXQgNTEyIGJ5dGVzLCByaWdodD8KCkxvb2tzIGxpa2UgaXQgOy0pClRoZSByZWFzb24g dGhpcyBpcyBwcmVzZW50ZWQgaW4gdGhpcyByYXRoZXIgYXdrd2FyZCB3YXkgaGVyZSBpcyB0aGF0 IHdlIG5lZWQgdGhlIG51bWJlciBvZiBiaXRzIHRvIGJlIHByZXNlbnRlZCBpbiB0aGUgQ0ZJIHF1 ZXJ5IHN0cnVjdHVyZSBsYXRlciBvbi4KSSB3aWxsIGFkZCBhIGNvbW1lbnQgcG9pbnRpbmcgb3V0 IHRoaXMgaXMgaW4gdW5pdHMgb2YgIndvcmRzIiAtIGFmdGVyIGRvdWJsZSBjaGVja2luZyB0aGF0 IGl0IHJlYWxseSBpcyA7LSkKIAo+ID4gKwo+ID4gKy8qIENGSSBjb21tYW5kcyAqLwo+ID4gKyNk ZWZpbmUgQ0ZJX0NNRF9MT0NLX0JMT0NLCQkJMHgwMQo+ID4gKyNkZWZpbmUgQ0ZJX0NNRF9BTFRF Uk5BVEVfV09SRF9QUk9HUkFNX1NFVFVQCTB4MTAKPiA+ICsjZGVmaW5lIENGSV9DTURfQkxPQ0tf RVJBU0VfU0VUVVAJCTB4MjAKPiA+ICsjZGVmaW5lIENGSV9DTURfV09SRF9QUk9HUkFNX1NFVFVQ CQkweDQwCj4gPiArI2RlZmluZSBDRklfQ01EX0NMRUFSX1NUQVRVU19SRUdJU1RFUgkJMHg1MAo+ ID4gKyNkZWZpbmUgQ0ZJX0NNRF9MT0NLX0JMT0NLX1NFVFVQCQkweDYwCj4gPiArI2RlZmluZSBD RklfQ01EX1JFQURfU1RBVFVTX1JFR0lTVEVSCQkweDcwCj4gPiArI2RlZmluZSBDRklfQ01EX1JF QURfSkVERUMJCQkweDkwCj4gPiArI2RlZmluZSBDRklfQ01EX1JFQURfQ0ZJX1FVRVJZCQkJMHg5 OAo+ID4gKyNkZWZpbmUgQ0ZJX0NNRF9CVUZGRVJFRF9QUk9HUkFNX0NPTkZJUk0JMHhkMAo+ID4g KyNkZWZpbmUgQ0ZJX0NNRF9CTE9DS19FUkFTRV9DT05GSVJNCQkweGQwCj4gPiArI2RlZmluZSBD RklfQ01EX1VOTE9DS19CTE9DSwkJCTB4ZDAKPiA+ICsjZGVmaW5lIENGSV9DTURfQlVGRkVSRURf UFJPR1JBTV9TRVRVUAkJMHhlOAo+ID4gKyNkZWZpbmUgQ0ZJX0NNRF9SRUFEX0FSUkFZCQkJMHhm Zgo+ID4gKwo+ID4gKy8qCj4gPiArICogQ0ZJIHF1ZXJ5IHRhYmxlIGNvbnRlbnRzLCBhcyBmYXIg YXMgaXQgaXMgY29uc3RhbnQuCj4gPiArICovCj4gPiArI2RlZmluZSBDRklfR0VPTV9PRkZTRVQJ CQkJMHgyNwo+ID4gK3N0YXRpYyB1OCBjZmlfcXVlcnlfdGFibGVbXSA9IHsKPiA+ICsJCS8qIG9m ZnNldCAweDEwOiBDRkkgcXVlcnkgaWRlbnRpZmljYXRpb24gc3RyaW5nICovCj4gPiArCSdRJywg J1InLCAnWScsCQkvKiBJRCBzdHJpbmcgKi8KPiA+ICsJMHgwMSwgMHgwMCwJCS8qIHByaW1hcnkg Y29tbWFuZCBzZXQ6IEludGVsL1NoYXJwIGV4dGVuZGVkICovCj4gPiArCTB4MzEsIDB4MDAsCQkv KiBhZGRyZXNzIG9mIHByaW1hcnkgZXh0ZW5kZWQgcXVlcnkgdGFibGUgKi8KPiA+ICsJMHgwMCwg MHgwMCwJCS8qIGFsdGVybmF0aXZlIGNvbW1hbmQgc2V0OiB1bnVzZWQgKi8KPiA+ICsJMHgwMCwg MHgwMCwJCS8qIGFkZHJlc3Mgb2YgYWx0ZXJuYXRpdmUgZXh0ZW5kZWQgcXVlcnkgdGFibGUqLwo+ ID4gKwkJLyogb2Zmc2V0IDB4MWI6IHN5c3RlbSBpbnRlcmZhY2UgaW5mb3JtYXRpb24gKi8KPiA+ ICsJMHg0NSwJCQkvKiBtaW5pbXVtIFZjYyB2b2x0YWdlOiA0LjVWICovCj4gPiArCTB4NTUsCQkJ LyogbWF4aW11bSBWY2Mgdm9sdGFnZTogNS41ViAqLwo+ID4gKwkweDAwLAkJCS8qIG1pbmltdW0g VnBwIHZvbHRhZ2U6IDAuMFYgKHVudXNlZCkgKi8KPiA+ICsJMHgwMCwJCQkvKiBtYXhpbXVtIFZw cCB2b2x0YWdlOiAwLjBWICoodW51c2VkKSAqLwo+ID4gKwkweDAxLAkJCS8qIHRpbWVvdXQgZm9y IHNpbmdsZSB3b3JkIHByb2dyYW06IDIgdXMgKi8KPiA+ICsJMHgwMSwJCQkvKiB0aW1lb3V0IGZv ciBtdWx0aS1ieXRlIHByb2dyYW06IDIgdXMgKi8KPiA+ICsJMHgwMSwJCQkvKiB0aW1lb3V0IGZv ciBibG9jayBlcmFzZTogMiBtcyAqLwo+ID4gKwkweDAwLAkJCS8qIHRpbWVvdXQgZm9yIGZ1bGwg Y2hpcCBlcmFzZTogbm90IHN1cHBvcnRlZCAqLwo+ID4gKwkweDAwLAkJCS8qIG1heCB0aW1lb3V0 IGZvciBzaW5nbGUgd29yZCBwcm9ncmFtOiAxeCAqLwo+ID4gKwkweDAwLAkJCS8qIG1heCB0aW1l b3V0IGZvciBtdWxpdC1ieXRlIHByb2dyYW06IDF4ICovCj4gPiArCTB4MDAsCQkJLyogbWF4IHRp bWVvdXQgZm9yIGJsb2NrIGVyYXNlOiAxeCAqLwo+ID4gKwkweDAwLAkJCS8qIG1heCB0aW1lb3V0 IGZvciBjaGlwIGVyYXNlOiBub3Qgc3VwcG9ydGVkICovCj4gPiArCQkvKiBvZmZzZXQgMHgyNzog Zmxhc2ggZ2VvbWV0cnkgaW5mb3JtYXRpb24gKi8KPiA+ICsJMHgwMCwJCQkvKiBzaXplIGluIHBv d2VyLW9mLTIgYnl0ZXMsIGZpbGxlZCBsYXRlciAqLwo+ID4gKwkweDA2LCAweDAwLAkJLyogaW50 ZXJmYWNlIGRlc2NyaXB0aW9uOiAzMiBhbmQgMTYgYml0cyAqLwo+ID4gKwlQUk9HUkFNX0JVRkZf U0laRV9CSVRTICsgMSAtIENGSV9OUl9GTEFTSF9DSElQUywgMHgwMCwKPiA+ICsJCQkJLyogbnVt YmVyIG9mIG11bHRpLWJ5dGUgd3JpdGVzICovCj4gPiArCTB4MDEsCQkJLyogb25lIGVyYXNlIGJs b2NrIHJlZ2lvbiAqLwo+ID4gKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiBudW1iZXIgYW5k IHNpemUgb2YgZXJhc2UgYmxvY2tzLCBmaWxsZWQgKi8KPiA+ICsJCS8qIG9mZnNldCAweDMxOiBJ bnRlbCBwcmltYXJ5IGFsZ29yaXRobSBleHRlbmRlZCBxdWVyeSB0YWJsZSAqLwo+ID4gKwknUCcs ICdSJywgJ0knLAo+ID4gKwknMScsICcwJywJCS8qIHZlcnNpb24gMS4wICovCj4gPiArCTB4YTAs IDB4MDAsIDB4MDAsIDB4MDAsIC8qIG9wdGlvbmFsIGZlYXR1cmVzOiBpbnN0YW50IGxvY2sgJiBw bS1yZWFkICovCj4gPiArCTB4MDAsCQkJLyogbm8gZnVuY3Rpb25zIGFmdGVyIHN1c3BlbmQgKi8K PiA+ICsJMHgwMSwgMHgwMCwJCS8qIG9ubHkgbG9jayBiaXQgc3VwcG9ydGVkICovCj4gPiArCTB4 NTAsCQkJLyogYmVzdCBWY2MgdmFsdWU6IDUuMFYgKi8KPiA+ICsJMHgwMCwJCQkvKiBiZXN0IFZw cCB2YWx1ZTogMC4wViAodW51c2VkKSAqLwo+ID4gKwkweDAxLAkJCS8qIG51bWJlciBvZiBwcm90 ZWN0aW9uIHJlZ2lzdGVyIGZpZWxkcyAqLwo+ID4gKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAkv KiBwcm90ZWN0aW9uIGZpZWxkIDEgZGVzY3JpcHRpb24gKi8KPiA+ICt9Owo+ID4gKwo+ID4gKwo+ ID4gKy8qCj4gPiArICogVGhvc2Ugc3RhdGVzIHJlcHJlc2VudCBhIHN1YnNldCBvZiB0aGUgQ0ZJ IGZsYXNoIHN0YXRlIG1hY2hpbmUuCj4gPiArICovCj4gPiArZW51bSBjZmlfZmxhc2hfc3RhdGUg ewo+ID4gKwlSRUFEWSwKPiA+ICsJTE9DS19TRVRVUCwKPiA+ICsJV1BfU0VUVVAsCj4gPiArCUJQ X1NFVFVQLAo+ID4gKwlCUF9MT0FELAo+ID4gKwlFUkFTRV9TRVRVUCwKPiA+ICt9Owo+ID4gKwo+ ID4gKy8qCj4gPiArICogVGhlIGRldmljZSBjYW4gYmUgaW4gc2V2ZXJhbCAqKlJlYWQqKiBtb2Rl cy4KPiA+ICsgKiBXZSBkb24ndCBpbXBsZW1lbnQgdGhlIGFzeW5jaHJvbm91cyBidXJzdCBtb2Rl Lgo+ID4gKyAqLwo+ID4gK2VudW0gY2ZpX3JlYWRfbW9kZSB7Cj4gPiArCVJFQURfQVJSQVksCj4g PiArCVJFQURfU1RBVFVTLAo+ID4gKwlSRUFEX0RFVklDRV9JRCwKPiA+ICsJUkVBRF9RVUVSWSwK PiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBjZmlfZmxhc2hfZGV2aWNlIHsKPiA+ICsJc3RydWN0 IGRldmljZV9oZWFkZXIJZGV2X2hkcjsKPiA+ICsJLyogUHJvdGVjdHMgdGhlIENGSSBzdGF0ZSBt YWNoaW5lIHZhcmlhYmxlcyBpbiB0aGlzIGRhdGEgc3RydWN0dXJlLiAqLwo+ID4gKwlzdHJ1Y3Qg bXV0ZXgJCW11dGV4Owo+ID4gKwl1NjQJCQliYXNlX2FkZHI7Cj4gPiArCXUzMgkJCXNpemU7Cj4g PiArCj4gPiArCXZvaWQJCQkqZmxhc2hfbWVtb3J5Owo+ID4gKwl1OAkJCXByb2dyYW1fYnVmZmVy W1BST0dSQU1fQlVGRl9TSVpFICogNF07ICAKPiAKPiBZb3UncmUgbXVsdGlwbHlpbmcgYnkgNCBi ZWNhdXNlIFBST0dSQU1fQlVGRl9TSVpFIGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgaW4KPiB3 b3JkcywgcmlnaHQ/CgpZZWFoLCBJIGNhbiB1c2UgInNpemVvZih1MzIpIiBpZiB0aGF0IGlzIGJl dHRlci4KCj4gPiArCXVuc2lnbmVkIGxvbmcJCSpsb2NrX2JtOwo+ID4gKwl1NjQJCQlsYXN0X2Fk ZHJlc3M7Cj4gPiArCXVuc2lnbmVkIGludAkJYnVmZl93cml0dGVuOwo+ID4gKwl1bnNpZ25lZCBp bnQJCXByb2dyYW1fbGVuZ3RoOwo+ID4gKwo+ID4gKwllbnVtIGNmaV9mbGFzaF9zdGF0ZQlzdGF0 ZTsKPiA+ICsJZW51bSBjZmlfcmVhZF9tb2RlCXJlYWRfbW9kZTsKPiA+ICsJdTE2CQkJcmNyOwo+ ID4gKwl1OAkJCXNyOwo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludCBucl9lcmFzZV9ibG9j a3Moc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2KQo+ID4gK3sKPiA+ICsJcmV0dXJuIHNm ZGV2LT5zaXplIC8gRkxBU0hfQkxPQ0tfU0laRTsKPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsg KiBDRkkgcXVlcmllcyBhbHdheXMgZGVhbCB3aXRoIG9uZSBieXRlIG9mIGluZm9ybWF0aW9uLCBw b3NzaWJseSBtaXJyb3JlZAo+ID4gKyAqIHRvIG90aGVyIGJ5dGVzIG9uIHRoZSBidXMuIFRoaXMg aXMgZGVhbHQgd2l0aCBpbiB0aGUgY2FsbGVycy4KPiA+ICsgKiBUaGUgYWRkcmVzcyBwcm92aWRl ZCBpcyB0aGUgb25lIGZvciA4LWJpdCBhZGRyZXNzaW5nLCBhbmQgd291bGQgbmVlZCB0bwo+ID4g KyAqIGJlIGFkanVzdGVkIGZvciB3aWRlciBhY2Nlc3Nlcy4KPiA+ICsgKi8KPiA+ICtzdGF0aWMg dTggcmVhZF9jZmkoc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2LCB1NjQgYWRkcikKPiA+ ICt7Cj4gPiArCWlmIChhZGRyIDwgMHgxMCkJCS8qIENGSSBpbmZvcm1hdGlvbiBzdGFydHMgYXQg MHgxMCAqLwo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCWlmIChhZGRyIC0gMHgxMCA+IHNp emVvZihjZmlfcXVlcnlfdGFibGUpKSB7Cj4gPiArCQlwcl9kZWJ1ZygiQ0ZJIHF1ZXJ5IHJlYWQg YWNjZXNzIGJleW9uZCB0aGUgZW5kIG9mIHRhYmxlIik7Cj4gPiArCQlyZXR1cm4gMDsKPiA+ICsJ fQo+ID4gKwo+ID4gKwkvKiBGaXh1cCBkeW5hbWljIGluZm9ybWF0aW9uIGluIHRoZSBnZW9tZXRy eSBwYXJ0IG9mIHRoZSB0YWJsZS4gKi8KPiA+ICsJc3dpdGNoIChhZGRyKSB7Cj4gPiArCWNhc2Ug Q0ZJX0dFT01fT0ZGU0VUOgkJLyogZGV2aWNlIHNpemUgaW4gYnl0ZXMsIHBvd2VyIG9mIHR3byAq Lwo+ID4gKwkJcmV0dXJuIHBvdzJfc2l6ZShzZmRldi0+c2l6ZSAvIENGSV9OUl9GTEFTSF9DSElQ Uyk7Cj4gPiArCWNhc2UgQ0ZJX0dFT01fT0ZGU0VUICsgNjoJLyogbnVtYmVyIG9mIGVyYXNlIGJs b2NrcywgbWludXMgb25lICovCj4gPiArCQlyZXR1cm4gKG5yX2VyYXNlX2Jsb2NrcyhzZmRldikg LSAxKSAmIDB4ZmY7Cj4gPiArCWNhc2UgQ0ZJX0dFT01fT0ZGU0VUICsgNzoKPiA+ICsJCXJldHVy biAobnJfZXJhc2VfYmxvY2tzKHNmZGV2KSAtIDEpID4+IDg7Cj4gPiArCWNhc2UgQ0ZJX0dFT01f T0ZGU0VUICsgODoJLyogZXJhc2UgYmxvY2sgc2l6ZSwgaW4gdW5pdHMgb2YgMjU2ICovCj4gPiAr CQlyZXR1cm4gKChGTEFTSF9CTE9DS19TSVpFIC8gMjU2ICkgLyBDRklfTlJfRkxBU0hfQ0hJUFMp ICYgMHhmZjsKPiA+ICsJY2FzZSBDRklfR0VPTV9PRkZTRVQgKyA5Ogo+ID4gKwkJcmV0dXJuICgo RkxBU0hfQkxPQ0tfU0laRSAvIDI1NiApIC8gQ0ZJX05SX0ZMQVNIX0NISVBTKSA+PiA4Owo+ID4g Kwl9Cj4gPiArCj4gPiArCXJldHVybiBjZmlfcXVlcnlfdGFibGVbYWRkciAtIDB4MTBdOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgYm9vbCBibG9ja19pc19sb2NrZWQoc3RydWN0IGNmaV9mbGFz aF9kZXZpY2UgKnNmZGV2LCB1NjQgYWRkcikKPiA+ICt7Cj4gPiArCWludCBibG9ja19uciA9IGFk ZHIgLyBGTEFTSF9CTE9DS19TSVpFOwo+ID4gKwo+ID4gKwlyZXR1cm4gdGVzdF9iaXQoYmxvY2tf bnIsIHNmZGV2LT5sb2NrX2JtKTsKPiA+ICt9Cj4gPiArCj4gPiArI2RlZmluZSBERVZfSURfTUFT SyAweDdmZgo+ID4gK3N0YXRpYyB1MTYgcmVhZF9kZXZfaWQoc3RydWN0IGNmaV9mbGFzaF9kZXZp Y2UgKnNmZGV2LCB1NjQgYWRkcikKPiA+ICt7Cj4gPiArCXN3aXRjaCAoKGFkZHIgJiBERVZfSURf TUFTSykgLyBDRklfQlVTX1dJRFRIKSB7Cj4gPiArCWNhc2UgMHgwOgkJCQkvKiB2ZW5kb3IgSUQg Ki8KPiA+ICsJCXJldHVybiAweDAwMDA7Cj4gPiArCWNhc2UgMHgxOgkJCQkvKiBkZXZpY2UgSUQg Ki8KPiA+ICsJCXJldHVybiAweGZmZmY7Cj4gPiArCWNhc2UgMHgyOgo+ID4gKwkJcmV0dXJuIGJs b2NrX2lzX2xvY2tlZChzZmRldiwgYWRkciAmIH5ERVZfSURfTUFTSyk7Cj4gPiArCWNhc2UgMHg1 Ogo+ID4gKwkJcmV0dXJuIHNmZGV2LT5yY3I7Cj4gPiArCWRlZmF1bHQ6CQkJLyogSWdub3JlIHRo ZSBvdGhlciBlbnRyaWVzLiAqLwo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCX0KPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHZvaWQgbG9ja19ibG9jayhzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2Zk ZXYsIHU2NCBhZGRyLCBib29sIGxvY2spCj4gPiArewo+ID4gKwlpbnQgYmxvY2tfbnIgPSBhZGRy IC8gRkxBU0hfQkxPQ0tfU0laRTsKPiA+ICsKPiA+ICsJaWYgKGxvY2spCj4gPiArCQlzZXRfYml0 KGJsb2NrX25yLCBzZmRldi0+bG9ja19ibSk7Cj4gPiArCWVsc2UKPiA+ICsJCWNsZWFyX2JpdChi bG9ja19uciwgc2ZkZXYtPmxvY2tfYm0pOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB3 b3JkX3Byb2dyYW0oc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2LAo+ID4gKwkJCSB1NjQg YWRkciwgdm9pZCAqZGF0YSwgaW50IGxlbikKPiA+ICt7Cj4gPiArCWlmIChibG9ja19pc19sb2Nr ZWQoc2ZkZXYsIGFkZHIpKSB7Cj4gPiArCQlzZmRldi0+c3IgfD0gMHgxMjsKPiA+ICsJCXJldHVy bjsKPiA+ICsJfQo+ID4gKwo+ID4gKwltZW1jcHkoc2ZkZXYtPmZsYXNoX21lbW9yeSArIGFkZHIs IGRhdGEsIGxlbik7Cj4gPiArfQo+ID4gKwo+ID4gKy8qIFJlc2V0IHRoZSBwcm9ncmFtIGJ1ZmZl ciBzdGF0ZSB0byBwcmVwYXJlIGZvciBmb2xsb3ctdXAgd3JpdGVzLiAqLwo+ID4gK3N0YXRpYyB2 b2lkIGJ1ZmZlcl9zZXR1cChzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXYpCj4gPiArewo+ ID4gKwltZW1zZXQoc2ZkZXYtPnByb2dyYW1fYnVmZmVyLCAwLCBzaXplb2Yoc2ZkZXYtPnByb2dy YW1fYnVmZmVyKSk7Cj4gPiArCXNmZGV2LT5sYXN0X2FkZHJlc3MgPSB+MFVMTDsKPiA+ICsJc2Zk ZXYtPmJ1ZmZfd3JpdHRlbiA9IDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBib29sIGJ1ZmZl cl9wcm9ncmFtKHN0cnVjdCBjZmlfZmxhc2hfZGV2aWNlICpzZmRldiwKPiA+ICsJCQkgICB1NjQg YWRkciwgdm9pZCAqYnVmZmVyLCBpbnQgbGVuKQo+ID4gK3sKPiA+ICsJdW5zaWduZWQgaW50IGJ1 Zl9hZGRyOwo+ID4gKwo+ID4gKwlpZiAoc2ZkZXYtPmJ1ZmZfd3JpdHRlbiA+PSBzZmRldi0+cHJv Z3JhbV9sZW5ndGgpCj4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAq IFRoZSBmaXJzdCB3b3JkIHdyaXR0ZW4gaW50byB0aGUgYnVmZmVyIGFmdGVyIHRoZSBzZXR1cCBj b21tYW5kCj4gPiArCSAqIGhhcHBlbnMgdG8gYmUgdGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhlIGJ1 ZmZlci4KPiA+ICsJICogQWxsIHN1YnNlcXVlbnQgd3JpdGVzIG5lZWQgdG8gYmUgd2l0aGluIHRo aXMgYWRkcmVzcyBhbmQgdGhpcwo+ID4gKwkgKiBhZGRyZXNzIHBsdXMgdGhlIGJ1ZmZlciBzaXpl LCBzbyBrZWVwIHRoaXMgdmFsdWUgYXJvdW5kLgo+ID4gKwkgKi8KPiA+ICsJaWYgKHNmZGV2LT5s YXN0X2FkZHJlc3MgPT0gfjBVTEwpCj4gPiArCQlzZmRldi0+bGFzdF9hZGRyZXNzID0gYWRkcjsK PiA+ICsKPiA+ICsJaWYgKGFkZHIgPCBzZmRldi0+bGFzdF9hZGRyZXNzKQo+ID4gKwkJcmV0dXJu IGZhbHNlOwo+ID4gKwlidWZfYWRkciA9IGFkZHIgLSBzZmRldi0+bGFzdF9hZGRyZXNzOwo+ID4g KwlpZiAoYnVmX2FkZHIgPj0gUFJPR1JBTV9CVUZGX1NJWkUpCj4gPiArCQlyZXR1cm4gZmFsc2U7 Cj4gPiArCj4gPiArCW1lbWNweShzZmRldi0+cHJvZ3JhbV9idWZmZXIgKyBidWZfYWRkciwgYnVm ZmVyLCBsZW4pOwo+ID4gKwlzZmRldi0+YnVmZl93cml0dGVuKys7Cj4gPiArCj4gPiArCXJldHVy biB0cnVlOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBidWZmZXJfY29uZmlybShzdHJ1 Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXYpCj4gPiArewo+ID4gKwlpZiAoYmxvY2tfaXNfbG9j a2VkKHNmZGV2LCBzZmRldi0+bGFzdF9hZGRyZXNzKSkgewo+ID4gKwkJc2ZkZXYtPnNyIHw9IDB4 MTI7Cj4gPiArCQlyZXR1cm47Cj4gPiArCX0KPiA+ICsJbWVtY3B5KHNmZGV2LT5mbGFzaF9tZW1v cnkgKyBzZmRldi0+bGFzdF9hZGRyZXNzLAo+ID4gKwkgICAgICAgc2ZkZXYtPnByb2dyYW1fYnVm ZmVyLAo+ID4gKwkgICAgICAgc2ZkZXYtPmJ1ZmZfd3JpdHRlbiAqIHNpemVvZih1MzIpKTsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgYmxvY2tfZXJhc2VfY29uZmlybShzdHJ1Y3QgY2Zp X2ZsYXNoX2RldmljZSAqc2ZkZXYsIHU2NCBhZGRyKQo+ID4gK3sKPiA+ICsJaWYgKGJsb2NrX2lz X2xvY2tlZChzZmRldiwgYWRkcikpIHsKPiA+ICsJCXNmZGV2LT5zciB8PSAweDEyOwo+ID4gKwkJ cmV0dXJuOwo+ID4gKwl9Cj4gPiArCj4gPiArCW1lbXNldChzZmRldi0+Zmxhc2hfbWVtb3J5ICsg YWRkciwgMHhGRiwgRkxBU0hfQkxPQ0tfU0laRSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2 b2lkIGNmaV9mbGFzaF9tbWlvKHN0cnVjdCBrdm1fY3B1ICp2Y3B1LAo+ID4gKwkJCSAgIHU2NCBh ZGRyLCB1OCAqZGF0YSwgdTMyIGxlbiwgdTggaXNfd3JpdGUsCj4gPiArCQkJICAgdm9pZCAqY29u dGV4dCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBjZmlfZmxhc2hfZGV2aWNlICpzZmRldiA9IGNvbnRl eHQ7Cj4gPiArCXU2NCBmYWRkciA9IGFkZHIgLSBzZmRldi0+YmFzZV9hZGRyOwo+ID4gKwl1MzIg dmFsdWU7Cj4gPiArCj4gPiArCWlmICghaXNfd3JpdGUpIHsKPiA+ICsJCXUxNiBjZmlfdmFsdWUg PSAwOwo+ID4gKwo+ID4gKwkJbXV0ZXhfbG9jaygmc2ZkZXYtPm11dGV4KTsKPiA+ICsKPiA+ICsJ CXN3aXRjaCAoc2ZkZXYtPnJlYWRfbW9kZSkgewo+ID4gKwkJY2FzZSBSRUFEX0FSUkFZOgo+ID4g KwkJCS8qIGp1c3QgY29weSB0aGUgcmVxdWVzdGVkIGJ5dGVzIGZyb20gdGhlIGFycmF5ICovCj4g PiArCQkJbWVtY3B5KGRhdGEsIHNmZGV2LT5mbGFzaF9tZW1vcnkgKyBmYWRkciwgbGVuKTsKPiA+ ICsJCQlnb3RvIG91dF91bmxvY2s7Cj4gPiArCQljYXNlIFJFQURfU1RBVFVTOgo+ID4gKwkJCWNm aV92YWx1ZSA9IHNmZGV2LT5zcjsKPiA+ICsJCQlicmVhazsKPiA+ICsJCWNhc2UgUkVBRF9ERVZJ Q0VfSUQ6Cj4gPiArCQkJY2ZpX3ZhbHVlID0gcmVhZF9kZXZfaWQoc2ZkZXYsIGZhZGRyKTsKPiA+ ICsJCQlicmVhazsKPiA+ICsJCWNhc2UgUkVBRF9RVUVSWToKPiA+ICsJCQljZmlfdmFsdWUgPSBy ZWFkX2NmaShzZmRldiwgZmFkZHIgLyBDRklfQlVTX1dJRFRIKTsKPiA+ICsJCQlicmVhazsKPiA+ ICsJCX0KPiA+ICsJCXN3aXRjaCAobGVuKSB7Cj4gPiArCQljYXNlIDE6Cj4gPiArCQkJKmRhdGEg PSBjZmlfdmFsdWU7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQljYXNlIDg6IG1lbXNldChkYXRhICsg NCwgMCwgNCk7Cj4gPiArCQkJLyogZmFsbC10aHJvdWdoICovCj4gPiArCQljYXNlIDQ6Cj4gPiAr CQkJaWYgKENGSV9OUl9GTEFTSF9DSElQUyA9PSAyKQo+ID4gKwkJCQltZW1jcHkoZGF0YSArIDIs ICZjZmlfdmFsdWUsIDIpOwo+ID4gKwkJCWVsc2UKPiA+ICsJCQkJbWVtc2V0KGRhdGEgKyAyLCAw LCAyKTsKPiA+ICsJCQkvKiBmYWxsLXRocm91Z2ggKi8KPiA+ICsJCWNhc2UgMjoKPiA+ICsJCQlt ZW1jcHkoZGF0YSwgJmNmaV92YWx1ZSwgMik7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQlkZWZhdWx0 Ogo+ID4gKwkJCXByX2RlYnVnKCJDRkkgZmxhc2g6IGlsbGVnYWwgYWNjZXNzIGxlbmd0aCAlZCBm b3IgcmVhZCBtb2RlICVkIiwKPiA+ICsJCQkJIGxlbiwgc2ZkZXYtPnJlYWRfbW9kZSk7Cj4gPiAr CQkJYnJlYWs7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlnb3RvIG91dF91bmxvY2s7Cj4gPiArCX0K PiA+ICsKPiA+ICsJaWYgKGxlbiA+IDQpIHsKPiA+ICsJCXByX2luZm8oIkNGSSBmbGFzaDogTU1J TyAlZC1iaXQgd3JpdGUgYWNjZXNzIG5vdCBzdXBwb3J0ZWQiLAo+ID4gKwkJCSBsZW4gKiA4KTsK PiA+ICsJCXJldHVybjsKPiA+ICsJfQo+ID4gKwo+ID4gKwltZW1jcHkoJnZhbHVlLCBkYXRhLCBs ZW4pOwo+ID4gKwo+ID4gKwltdXRleF9sb2NrKCZzZmRldi0+bXV0ZXgpOwo+ID4gKwo+ID4gKwlz d2l0Y2ggKHNmZGV2LT5zdGF0ZSkgewo+ID4gKwljYXNlIFJFQURZOgkJCS8qIGhhbmRsZWQgYmVs b3cgKi8KPiA+ICsJCWJyZWFrOwo+ID4gKwo+ID4gKwljYXNlIExPQ0tfU0VUVVA6Cj4gPiArCQlz d2l0Y2ggKHZhbHVlICYgMHhmZikgewo+ID4gKwkJY2FzZSBDRklfQ01EX0xPQ0tfQkxPQ0s6Cj4g PiArCQkJbG9ja19ibG9jayhzZmRldiwgZmFkZHIsIHRydWUpOwo+ID4gKwkJCXNmZGV2LT5yZWFk X21vZGUgPSBSRUFEX1NUQVRVUzsKPiA+ICsJCQlicmVhazsKPiA+ICsJCWNhc2UgQ0ZJX0NNRF9V TkxPQ0tfQkxPQ0s6Cj4gPiArCQkJbG9ja19ibG9jayhzZmRldiwgZmFkZHIsIGZhbHNlKTsKPiA+ ICsJCQlzZmRldi0+cmVhZF9tb2RlID0gUkVBRF9TVEFUVVM7Cj4gPiArCQkJYnJlYWs7Cj4gPiAr CQlkZWZhdWx0Ogo+ID4gKwkJCXNmZGV2LT5zciB8PSAweDMwOwo+ID4gKwkJCWJyZWFrOwo+ID4g KwkJfQo+ID4gKwkJc2ZkZXYtPnN0YXRlID0gUkVBRFk7Cj4gPiArCQlnb3RvIG91dF91bmxvY2s7 Cj4gPiArCj4gPiArCWNhc2UgV1BfU0VUVVA6Cj4gPiArCQl3b3JkX3Byb2dyYW0oc2ZkZXYsIGZh ZGRyLCBkYXRhLCBsZW4pOwo+ID4gKwkJc2ZkZXYtPnJlYWRfbW9kZSA9IFJFQURfU1RBVFVTOwo+ ID4gKwkJc2ZkZXYtPnN0YXRlID0gUkVBRFk7Cj4gPiArCQlnb3RvIG91dF91bmxvY2s7Cj4gPiAr Cj4gPiArCWNhc2UgQlBfTE9BRDoKPiA+ICsJCWlmIChidWZmZXJfcHJvZ3JhbShzZmRldiwgZmFk ZHIsIGRhdGEsIGxlbikpCj4gPiArCQkJZ290byBvdXRfdW5sb2NrOwo+ID4gKwo+ID4gKwkJaWYg KCh2YWx1ZSAmIDB4RkYpID09IENGSV9DTURfQlVGRkVSRURfUFJPR1JBTV9DT05GSVJNKSB7Cj4g PiArCQkJYnVmZmVyX2NvbmZpcm0oc2ZkZXYpOwo+ID4gKwkJCXNmZGV2LT5yZWFkX21vZGUgPSBS RUFEX1NUQVRVUzsKPiA+ICsJCX0gZWxzZSB7Cj4gPiArCQkJcHJfZGVidWcoIkNGSSBmbGFzaDog QlBfTE9BRDogZXhwZWN0ZWQgQ09ORklSTSgweGQwKSwgZ290IDB4JXggQCAweCVsbHgiLAo+ID4g KwkJCQkgdmFsdWUsIGZhZGRyKTsKPiA+ICsJCQlzZmRldi0+c3IgfD0gMHgxMDsKPiA+ICsJCX0K PiA+ICsJCXNmZGV2LT5zdGF0ZSA9IFJFQURZOwo+ID4gKwkJZ290byBvdXRfdW5sb2NrOwo+ID4g Kwo+ID4gKwljYXNlIEJQX1NFVFVQOgo+ID4gKwkJc2ZkZXYtPnByb2dyYW1fbGVuZ3RoID0gKHZh bHVlICYgMHhmZmZmKSArIDE7Cj4gPiArCQlpZiAoc2ZkZXYtPnByb2dyYW1fbGVuZ3RoID4gUFJP R1JBTV9CVUZGX1NJWkUgLyA0KQo+ID4gKwkJCXNmZGV2LT5wcm9ncmFtX2xlbmd0aCA9IFBST0dS QU1fQlVGRl9TSVpFIC8gNDsKPiA+ICsJCXNmZGV2LT5zdGF0ZSA9IEJQX0xPQUQ7Cj4gPiArCQlz ZmRldi0+cmVhZF9tb2RlID0gUkVBRF9TVEFUVVM7Cj4gPiArCQlnb3RvIG91dF91bmxvY2s7Cj4g PiArCj4gPiArCWNhc2UgRVJBU0VfU0VUVVA6Cj4gPiArCQlpZiAoKHZhbHVlICYgMHhmZikgPT0g Q0ZJX0NNRF9CTE9DS19FUkFTRV9DT05GSVJNKQo+ID4gKwkJCWJsb2NrX2VyYXNlX2NvbmZpcm0o c2ZkZXYsIGZhZGRyKTsKPiA+ICsJCWVsc2UKPiA+ICsJCQlzZmRldi0+c3IgfD0gMHgzMDsKPiA+ ICsKPiA+ICsJCXNmZGV2LT5zdGF0ZSA9IFJFQURZOwo+ID4gKwkJc2ZkZXYtPnJlYWRfbW9kZSA9 IFJFQURfU1RBVFVTOwo+ID4gKwkJZ290byBvdXRfdW5sb2NrOwo+ID4gKwl9Cj4gPiArCj4gPiAr CS8qIHdyaXRlIGNvbW1hbmRzIGluIFJFQURZIHN0YXRlICovCj4gPiArCXN3aXRjaCAodmFsdWUg JiAweEZGKSB7Cj4gPiArCWNhc2UgQ0ZJX0NNRF9SRUFEX0pFREVDOgo+ID4gKwkJc2ZkZXYtPnJl YWRfbW9kZSA9IFJFQURfREVWSUNFX0lEOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgQ0ZJX0NN RF9SRUFEX1NUQVRVU19SRUdJU1RFUjoKPiA+ICsJCXNmZGV2LT5yZWFkX21vZGUgPSBSRUFEX1NU QVRVUzsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIENGSV9DTURfUkVBRF9DRklfUVVFUlk6Cj4g PiArCQlzZmRldi0+cmVhZF9tb2RlID0gUkVBRF9RVUVSWTsKPiA+ICsJCWJyZWFrOwo+ID4gKwlj YXNlIENGSV9DTURfQ0xFQVJfU1RBVFVTX1JFR0lTVEVSOgo+ID4gKwkJc2ZkZXYtPnNyID0gMHg4 MDsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIENGSV9DTURfV09SRF9QUk9HUkFNX1NFVFVQOgo+ ID4gKwljYXNlIENGSV9DTURfQUxURVJOQVRFX1dPUkRfUFJPR1JBTV9TRVRVUDoKPiA+ICsJCXNm ZGV2LT5zdGF0ZSA9IFdQX1NFVFVQOwo+ID4gKwkJc2ZkZXYtPnJlYWRfbW9kZSA9IFJFQURfU1RB VFVTOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgQ0ZJX0NNRF9MT0NLX0JMT0NLX1NFVFVQOgo+ ID4gKwkJc2ZkZXYtPnN0YXRlID0gTE9DS19TRVRVUDsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNl IENGSV9DTURfQkxPQ0tfRVJBU0VfU0VUVVA6Cj4gPiArCQlzZmRldi0+c3RhdGUgPSBFUkFTRV9T RVRVUDsKPiA+ICsJCXNmZGV2LT5yZWFkX21vZGUgPSBSRUFEX1NUQVRVUzsKPiA+ICsJCWJyZWFr Owo+ID4gKwljYXNlIENGSV9DTURfQlVGRkVSRURfUFJPR1JBTV9TRVRVUDoKPiA+ICsJCWJ1ZmZl cl9zZXR1cChzZmRldik7Cj4gPiArCQlzZmRldi0+c3RhdGUgPSBCUF9TRVRVUDsKPiA+ICsJCXNm ZGV2LT5yZWFkX21vZGUgPSBSRUFEX1NUQVRVUzsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIENG SV9DTURfQlVGRkVSRURfUFJPR1JBTV9DT05GSVJNOgo+ID4gKwkJcHJfZGVidWcoIkNGSSBmbGFz aDogdW5leHBlY3RlZCBjb25maXJtIGNvbW1hbmQgMHhEMCIpOwo+ID4gKwkJYnJlYWs7Cj4gPiAr CWRlZmF1bHQ6Cj4gPiArCQlwcl9kZWJ1ZygiQ0ZJIGZsYXNoOiB1bmtub3duIGNvbW1hbmQgMHgl eCIsIHZhbHVlKTsKPiA+ICsJCS8qIGZhbGwgdGhyb3VnaCAqLyAgCj4gCj4gQWJvdmUgKGluIHRo ZSByZWFkIGNhc2UpLCB5b3Ugd3JvdGUgaXQgImZhbGwtdGhyb3VnaCIuCgpHQ0MgaGFzIGEgbGlz dCBvZiBhbGxvd2VkIHNwZWxsaW5ncywgYW5kIGJvdGggdmVyc2lvbnMgYXJlIGluIGl0IDstKQpC dXQgc3VyZSB3aWxsIGZpeCB0aGlzIC4uLgogCj4gPiArCWNhc2UgQ0ZJX0NNRF9SRUFEX0FSUkFZ Ogo+ID4gKwkJc2ZkZXYtPnJlYWRfbW9kZSA9IFJFQURfQVJSQVk7Cj4gPiArCQlicmVhazsKPiA+ ICsJfQo+ID4gKwo+ID4gK291dF91bmxvY2s6Cj4gPiArCW11dGV4X3VubG9jaygmc2ZkZXYtPm11 dGV4KTsKPiA+ICt9ICAKPiAKPiBUaGUgZnVuY3Rpb24gaXMgaHVnZSBhbmQgY29tcGxpY2F0ZWQu IEhvdyBhYm91dCBzcGxpdHRpbmcgaXQgaW50byBhIHJlYWQgYW5kIHdyaXRlCj4gZnVuY3Rpb24s IGF0IHRoZSB2ZXJ5IGxlYXN0PwoKR29vZCBwb2ludC4gTG9va3MgbGlrZSAid3JpdGUgY29tbWFu ZCBpbiBSRUFEWSBzdGF0ZSIgc2hvdWxkIGJlIHNlcGFyYXRlIGFzIHdlbGwsIHNpbmNlIGl0J3Mg b25seSBkb2luZyBzdGF0ZSB0cmFuc2l0aW9ucy4KCj4gPiArCj4gPiArI2lmZGVmIENPTkZJR19I QVNfTElCRkRUCj4gPiArc3RhdGljIHZvaWQgZ2VuZXJhdGVfY2ZpX2ZsYXNoX2ZkdF9ub2RlKHZv aWQgKmZkdCwKPiA+ICsJCQkJCXN0cnVjdCBkZXZpY2VfaGVhZGVyICpkZXZfaGRyLAo+ID4gKwkJ CQkJdm9pZCAoKmdlbmVyYXRlX2lycV9wcm9wKSh2b2lkICpmZHQsCj4gPiArCQkJCQkJCQkgIHU4 IGlycSwKPiA+ICsJCQkJCQkJCWVudW0gaXJxX3R5cGUpKQo+ID4gK3sKPiA+ICsJc3RydWN0IGNm aV9mbGFzaF9kZXZpY2UgKnNmZGV2Owo+ID4gKwl1NjQgcmVnX3Byb3BbMl07Cj4gPiArCj4gPiAr CXNmZGV2ID0gY29udGFpbmVyX29mKGRldl9oZHIsIHN0cnVjdCBjZmlfZmxhc2hfZGV2aWNlLCBk ZXZfaGRyKTsKPiA+ICsJcmVnX3Byb3BbMF0gPSBjcHVfdG9fZmR0NjQoc2ZkZXYtPmJhc2VfYWRk cik7Cj4gPiArCXJlZ19wcm9wWzFdID0gY3B1X3RvX2ZkdDY0KHNmZGV2LT5zaXplKTsKPiA+ICsK PiA+ICsJX0ZEVChmZHRfYmVnaW5fbm9kZShmZHQsICJmbGFzaCIpKTsKPiA+ICsJX0ZEVChmZHRf cHJvcGVydHlfY2VsbChmZHQsICJiYW5rLXdpZHRoIiwgQ0ZJX0JVU19XSURUSCkpOwo+ID4gKwlf RkRUKGZkdF9wcm9wZXJ0eV9jZWxsKGZkdCwgIiNhZGRyZXNzLWNlbGxzIiwgMHgxKSk7Cj4gPiAr CV9GRFQoZmR0X3Byb3BlcnR5X2NlbGwoZmR0LCAiI3NpemUtY2VsbHMiLCAweDEpKTsKPiA+ICsJ X0ZEVChmZHRfcHJvcGVydHlfc3RyaW5nKGZkdCwgImNvbXBhdGlibGUiLCAiY2ZpLWZsYXNoIikp Owo+ID4gKwlfRkRUKGZkdF9wcm9wZXJ0eV9zdHJpbmcoZmR0LCAibGFiZWwiLCAiU3lzdGVtLWZp cm13YXJlIikpOwo+ID4gKwlfRkRUKGZkdF9wcm9wZXJ0eShmZHQsICJyZWciLCAmcmVnX3Byb3As IHNpemVvZihyZWdfcHJvcCkpKTsKPiA+ICsJX0ZEVChmZHRfZW5kX25vZGUoZmR0KSk7Cj4gPiAr fQo+ID4gKyNlbHNlCj4gPiArI2RlZmluZSBnZW5lcmF0ZV9jZmlfZmxhc2hfZmR0X25vZGUgTlVM TAo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAq Y3JlYXRlX2ZsYXNoX2RldmljZV9maWxlKHN0cnVjdCBrdm0gKmt2bSwKPiA+ICsJCQkJCQkJIGNv bnN0IGNoYXIgKmZpbGVuYW1lKQo+ID4gK3sKPiA+ICsJc3RydWN0IGNmaV9mbGFzaF9kZXZpY2Ug KnNmZGV2Owo+ID4gKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOyAgCj4gCj4gSGVyZSB5b3UncmUgdXNp bmcgImJ1ZiIgYXMgc2hvcnRoYW5kIGZvciAiYnVmZmVyIiwgYnV0IGF0IHRoZSB0b3Agb2YgdGhl IGZpbGUKPiAoUFJPR1JBTV9CVUZGXyopIHlvdSB1c2UgImJ1ZmYiLgoKSSBndWVzcyBiZWNhdXNl IG9uZSB3YXMgd3JpdHRlbiBieSBtZSwgdGhlIG90aGVyIGJ5IFJhcGhhZWwgOy0pCldpbGwgY29u c29saWRhdGUgdGhpcy4KCj4gCj4gPiArCXVuc2lnbmVkIGludCB2YWx1ZTsKPiA+ICsJaW50IHJl dDsKPiA+ICsJaW50IGZkOwo+ID4gKwo+ID4gKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRXUik7 Cj4gPiArCWlmIChmZCA8IDApCj4gPiArCQlyZXR1cm4gRVJSX1BUUigtZXJybm8pOwo+ID4gKwlp ZiAoZnN0YXQoZmQsICZzdGF0YnVmKSA8IDApIHsKPiA+ICsJCWNsb3NlKGZkKTsKPiA+ICsJCXJl dHVybiBFUlJfUFRSKC1lcnJubyk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJc2ZkZXYgPSBtYWxsb2Mo c2l6ZW9mKHN0cnVjdCBjZmlfZmxhc2hfZGV2aWNlKSk7Cj4gPiArCWlmICghc2ZkZXYpIHsKPiA+ ICsJCWNsb3NlKGZkKTsKPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ID4gKwl9Cj4g PiArCj4gPiArCXNmZGV2LT5zaXplID0gKHN0YXRidWYuc3Rfc2l6ZSArIDQwOTUpICYgfjB4ZmZm VUw7Cj4gPiArCXNmZGV2LT5mbGFzaF9tZW1vcnkgPSBtbWFwKE5VTEwsIHN0YXRidWYuc3Rfc2l6 ZSwKPiA+ICsJCQkJICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKPiA+ICsJ CQkJICAgZmQsIDApOwo+ID4gKwlpZiAoc2ZkZXYtPmZsYXNoX21lbW9yeSA9PSBNQVBfRkFJTEVE KSB7Cj4gPiArCQljbG9zZShmZCk7Cj4gPiArCQlmcmVlKHNmZGV2KTsKPiA+ICsJCXJldHVybiBF UlJfUFRSKC1lcnJubyk7Cj4gPiArCX0KPiA+ICsJc2ZkZXYtPmJhc2VfYWRkciA9IEtWTV9GTEFT SF9NTUlPX0JBU0U7Cj4gPiArCXNmZGV2LT5zdGF0ZSA9IFJFQURZOwo+ID4gKwlzZmRldi0+cmVh ZF9tb2RlID0gUkVBRF9BUlJBWTsKPiA+ICsJc2ZkZXYtPnNyID0gMHg4MDsKPiA+ICsJc2ZkZXYt PnJjciA9IDB4YmZjZjsKPiA+ICsKPiA+ICsJdmFsdWUgPSByb3VuZHVwKG5yX2VyYXNlX2Jsb2Nr cyhzZmRldiksIEJJVFNfUEVSX0xPTkcpIC8gODsKPiA+ICsJc2ZkZXYtPmxvY2tfYm0gPSBtYWxs b2ModmFsdWUpOwo+ID4gKwltZW1zZXQoc2ZkZXYtPmxvY2tfYm0sIDAsIHZhbHVlKTsKPiA+ICsK PiA+ICsJc2ZkZXYtPmRldl9oZHIuYnVzX3R5cGUgPSBERVZJQ0VfQlVTX01NSU87Cj4gPiArCXNm ZGV2LT5kZXZfaGRyLmRhdGEgPSBnZW5lcmF0ZV9jZmlfZmxhc2hfZmR0X25vZGU7Cj4gPiArCW11 dGV4X2luaXQoJnNmZGV2LT5tdXRleCk7Cj4gPiArCXJldCA9IGRldmljZV9fcmVnaXN0ZXIoJnNm ZGV2LT5kZXZfaGRyKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJZnJlZShzZmRldi0+Zmxhc2hf bWVtb3J5KTsgIAo+IAo+IFRoYXQncyBzdHJhbmdlLCBJIHdyb3RlIGEgcXVpY2sgdGVzdCBmb3Ig dGhpcyBhbmQgZnJlZSdpbmcgYSBhIGZpbGUtYmFja2VkIG1tYXAnZWQKPiBtZW1vcnkgcmVzdWx0 ZWQgaW4gYSBzZWdtZW50YXRpb24gZmF1bHQuIERpZCB5b3UgbWVhbiBtdW5tYXA/CgpPdWNoLCBp bmRlZWQuIExvb2tzIGxpa2UgYSBsZWZ0b3ZlciBmcm9tIHRoZSBvcmlnaW5hbCBjb2RlLCB3aGlj aCB3YXMgdXNpbmcgbWFsbG9jKCkuCgo+IEFsc28sIGlmIG1tYXAnaW5nCj4gdGhlIGZsYXNoIGZh aWxzLCB5b3UgY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciwgd2hpY2ggeW91IGRvbid0IGRvIGhl cmUuIFRvIGJlCj4gaG9uZXN0LCBJIHRoaW5rIHRoZSBiZXN0IGFwcHJvYWNoIHdvdWxkIGJlIHRv IGFkZCBhbGwgdGhlIGNsZWFuaW5nIHVwwqAgYWZ0ZXIgdGhlCj4gcmV0dXJuIHN0YXRlbWVudCBh bmQgYSBzZXJpZXMgb2YgbGFiZWxzIHRvIGp1bXAgdG8gZGVwZW5kaW5nIHdoZXJlIHlvdSBnb3Qg YW4KPiBlcnJvciAoc2ltaWxhciB0byB2aXJ0aW9fX3BjaV9pbml0KS4KClllYWgsIGl0IGxvb2tz IG11Y2ggYmV0dGVyIG5vdyB0aGF0IHdheS4KCj4gCj4gPiArCQlmcmVlKHNmZGV2KTsKPiA+ICsJ CXJldHVybiBFUlJfUFRSKHJldCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0ga3ZtX19yZWdp c3Rlcl9tbWlvKGt2bSwKPiA+ICsJCQkJIHNmZGV2LT5iYXNlX2FkZHIsIHNmZGV2LT5zaXplLAo+ ID4gKwkJCQkgZmFsc2UsIGNmaV9mbGFzaF9tbWlvLCBzZmRldik7Cj4gPiArCWlmIChyZXQpIHsK PiA+ICsJCWRldmljZV9fdW5yZWdpc3Rlcigmc2ZkZXYtPmRldl9oZHIpOwo+ID4gKwkJZnJlZShz ZmRldi0+Zmxhc2hfbWVtb3J5KTsKPiA+ICsJCWZyZWUoc2ZkZXYpOwo+ID4gKwkJcmV0dXJuIEVS Ul9QVFIocmV0KTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gc2ZkZXY7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgZmxhc2hfX2luaXQoc3RydWN0IGt2bSAqa3ZtKQo+ID4gK3sKPiA+ ICsJc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2Owo+ID4gKwo+ID4gKwlpZiAoIWt2bS0+ Y2ZnLmZsYXNoX2ZpbGVuYW1lKQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCXNmZGV2ID0g Y3JlYXRlX2ZsYXNoX2RldmljZV9maWxlKGt2bSwga3ZtLT5jZmcuZmxhc2hfZmlsZW5hbWUpOwo+ ID4gKwlpZiAoSVNfRVJSKHNmZGV2KSkKPiA+ICsJCXJldHVybiBQVFJfRVJSKHNmZGV2KTsKPiA+ ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gK2Rldl9pbml0KGZsYXNoX19pbml0KTsKPiA+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9rdm0tY29uZmlnLmggYi9pbmNsdWRlL2t2bS9rdm0t Y29uZmlnLmgKPiA+IGluZGV4IGEwNTJiMGJjLi5mNGE4YjgzMSAxMDA2NDQKPiA+IC0tLSBhL2lu Y2x1ZGUva3ZtL2t2bS1jb25maWcuaAo+ID4gKysrIGIvaW5jbHVkZS9rdm0va3ZtLWNvbmZpZy5o Cj4gPiBAQCAtMzUsNiArMzUsNyBAQCBzdHJ1Y3Qga3ZtX2NvbmZpZyB7Cj4gPiAgCWNvbnN0IGNo YXIgKnZtbGludXhfZmlsZW5hbWU7Cj4gPiAgCWNvbnN0IGNoYXIgKmluaXRyZF9maWxlbmFtZTsK PiA+ICAJY29uc3QgY2hhciAqZmlybXdhcmVfZmlsZW5hbWU7Cj4gPiArCWNvbnN0IGNoYXIgKmZs YXNoX2ZpbGVuYW1lOwo+ID4gIAljb25zdCBjaGFyICpjb25zb2xlOwo+ID4gIAljb25zdCBjaGFy ICpkZXY7Cj4gPiAgCWNvbnN0IGNoYXIgKm5ldHdvcms7Cj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9rdm0vdXRpbC5oIGIvaW5jbHVkZS9rdm0vdXRpbC5oCj4gPiBpbmRleCA0Y2E3YWE5My4uNWMz N2YwYjcgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNsdWRlL2t2bS91dGlsLmgKPiA+ICsrKyBiL2luY2x1 ZGUva3ZtL3V0aWwuaAo+ID4gQEAgLTEwNCw2ICsxMDQsMTEgQEAgc3RhdGljIGlubGluZSB1bnNp Z25lZCBsb25nIHJvdW5kdXBfcG93X29mX3R3byh1bnNpZ25lZCBsb25nIHgpCj4gPiAgCXJldHVy biB4ID8gMVVMIDw8IGZsc19sb25nKHggLSAxKSA6IDA7Cj4gPiAgfQo+ID4gIAo+ID4gK3N0YXRp YyBpbmxpbmUgaW50IHBvdzJfc2l6ZSh1bnNpZ25lZCBsb25nIHgpCj4gPiArewo+ID4gKwlyZXR1 cm4gKHNpemVvZih4KSAqIDgpIC0gX19idWlsdGluX2NsemwoeCAtIDEpOwo+ID4gK30gIAo+IAo+ IEZvciB0aGUgbGlmZSBvZiBtZSBJIGNhbid0IHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9u IGlzIHN1cHBvc2VkIHRvIGRvLiBBbHNvLAo+IGZyb20gdGhlIGdjYyBvbmxpbmUgZG9jczoKClRo ZSBpZGVhIGlzIHRvIGRldGVybWluZSB0aGUgIm51bWJlciBvZiBhZGRyZXNzIGJpdHMgbmVlZGVk IHRvIGNvdmVyIHggYnl0ZXMgb2YgbWVtb3J5Iiwgd2hpY2ggaXMgc29tZXRoaW5nIHRoYXQgaXMg d2VsbCBrbm93biBvbiBhY3R1YWwgaGFyZHdhcmUuIEkgd2lsbCBhZGQgYSBjb21tZW50LgogCj4g IlJldHVybnMgdGhlIG51bWJlciBvZiBsZWFkaW5nIDAtYml0cyBpbiB4LCBzdGFydGluZyBhdCB0 aGUgbW9zdCBzaWduaWZpY2FudCBiaXQKPiBwb3NpdGlvbi4gSWYgeGlzIDAsIHRoZSByZXN1bHQg aXMgdW5kZWZpbmVkLiIKPiAKPiB5b3UgbWlnaHQgd2FudCB0byBhZGQgYSBzcGVjaWFsIGNhc2Ug Zm9yIHggPT0gMS4KCkdvb2QgcG9pbnQsIGFsdGhvdWdoIGluIG91ciBjYXNlIHRoZSBpbnB1dCB2 YWx1ZSBpcyBhbHdheXMgYXQgbGVhc3QgMjA0OC4gQnV0IDAgaXNuJ3QgY292ZXJlZCBhcyB3ZWxs IGFuZCBhbHNvIEkgbW92ZWQgdGhpcyB0byBnZW5lcmljIGNvZGUsIHNvIHdpbGwgZml4IGl0LgoK Q2hlZXJzLApBbmRyZQoKPiAKPiBUaGFua3MsCj4gQWxleAo+ID4gKwo+ID4gIHN0cnVjdCBrdm07 Cj4gPiAgdm9pZCAqbW1hcF9odWdldGxiZnMoc3RydWN0IGt2bSAqa3ZtLCBjb25zdCBjaGFyICpo dGxiZnNfcGF0aCwgdTY0IHNpemUpOwo+ID4gIHZvaWQgKm1tYXBfYW5vbl9vcl9odWdldGxiZnMo c3RydWN0IGt2bSAqa3ZtLCBjb25zdCBjaGFyICpodWdldGxiZnNfcGF0aCwgdTY0IHNpemUpOyAg CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwprdm1hcm0g bWFpbGluZyBsaXN0Cmt2bWFybUBsaXN0cy5jcy5jb2x1bWJpYS5lZHUKaHR0cHM6Ly9saXN0cy5j cy5jb2x1bWJpYS5lZHUvbWFpbG1hbi9saXN0aW5mby9rdm1hcm0K 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=-8.3 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,USER_AGENT_SANE_2 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 779C3C2BA83 for ; Fri, 14 Feb 2020 13:48:17 +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 478DF2168B for ; Fri, 14 Feb 2020 13:48:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="gGs5yybB" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 478DF2168B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com 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:MIME-Version:References:In-Reply-To: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=+S1TfCV3PhGj+CSBJjNJmXZgDuaKCU7E7jL2MEgquHw=; b=gGs5yybB5XqScU 3+F6cBPAvZIuFdP31STkS3eu3z6AGSlkaTx3aGJz8DARCfCFifXYaDFLO1wJ6qe0qkIc1+emcL9R2 KwwyVawHswgpqexViQgQh5IBV1H1L3xbxSFvfrcmYjJj8g/7leqxyPNHjvSolbqRGXTO/yTwaJTOP 6PRqibGKEUqRkXZurfdEetrUFe7VNkrfvo6rhI1lAzIXhsuNOtLJh4WmnuMpU2u9w+jEzt08fS9D4 ZzV46TZD4fCixTuz8Jdi9sZOru0XFyU2GyQVEsGheJQ8UxhZB/qz3Tr2fkfvaKmQvRO2IzKgAIzC4 5Gf7tORBmd6ALpQuDE1A==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j2bKK-0002TA-Ir; Fri, 14 Feb 2020 13:48:16 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j2bKF-0002SY-JT for linux-arm-kernel@lists.infradead.org; Fri, 14 Feb 2020 13:48:14 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8A3251FB; Fri, 14 Feb 2020 05:48:10 -0800 (PST) Received: from donnerap.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6A5CE3F68F; Fri, 14 Feb 2020 05:48:09 -0800 (PST) Date: Fri, 14 Feb 2020 13:47:55 +0000 From: Andre Przywara To: Alexandru Elisei Subject: Re: [PATCH kvmtool v2] Add emulation for CFI compatible flash memory Message-ID: <20200214134755.7ae855e4@donnerap.cambridge.arm.com> In-Reply-To: <1d81bc3f-dc74-b0c4-2410-b5c4c21fe69c@arm.com> References: <20200207121941.259157-1-andre.przywara@arm.com> <1d81bc3f-dc74-b0c4-2410-b5c4c21fe69c@arm.com> Organization: ARM X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; aarch64-unknown-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200214_054811_740908_52AD597C X-CRM114-Status: GOOD ( 42.13 ) 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: Raphael Gault , Julien Thierry , Sami Mujawar , Will Deacon , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org 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 T24gRnJpLCA3IEZlYiAyMDIwIDE3OjM0OjIwICswMDAwCkFsZXhhbmRydSBFbGlzZWkgPGFsZXhh bmRydS5lbGlzZWlAYXJtLmNvbT4gd3JvdGU6CgpIaSBBbGV4LAoKbWFueSB0aGFua3MgZm9yIGhh dmluZyBhIGxvb2shCgo+IEknbSBnb2luZyB0byBkbyBteSBiZXN0IHRvIHJldmlldyB5b3VyIHBh dGNoIDopIEknbGwgZG8gaXQgaW4gY2h1bmtzLCBiZWNhdXNlIGl0J3MKPiBwcmV0dHkgbGFyZ2Us IGFuZCBkZWZpbml0ZWx5IG5vdCB0cml2aWFsLgoKT0ssIHJlcGx5aW5nIGhlcmUsIGFuZCBoYXZp bmcgaXQgbW9zdGx5IGZpeGVkIGFscmVhZHkuCldpbGwgd2FpdCBmb3IgZnVydGhlciByZXBsaWVz IGJlZm9yZSBhIHJlLXBvc3QsIHVubGVzcyB5b3Ugd2FudCB0byBiZW5lZml0IGZyb20gdGhlIHNw bGl0IE1NSU8gZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBtYWtlIHJldmlld2luZyB0aGUgc3RhdGUg bWFjaGluZSBlYXNpZXIuIEp1c3QgbGV0IG1lIGtub3cuCgo+IE9uIDIvNy8yMCAxMjoxOSBQTSwg QW5kcmUgUHJ6eXdhcmEgd3JvdGU6Cj4gPiBGcm9tOiBSYXBoYWVsIEdhdWx0IDxyYXBoYWVsLmdh dWx0QGFybS5jb20+Cj4gPgo+ID4gVGhlIEVESyBJSSBVRUZJIGZpcm13YXJlIGltcGxlbWVudGF0 aW9uIHJlcXVpcmVzIHNvbWUgc3RvcmFnZSBmb3IgdGhlIEVGSQo+ID4gdmFyaWFibGVzLCB3aGlj aCBpcyB0eXBpY2FsbHkgc29tZSBmbGFzaCBzdG9yYWdlLgo+ID4gU2luY2UgdGhpcyBpcyBhbHJl YWR5IHN1cHBvcnRlZCBvbiB0aGUgRURLIElJIHNpZGUsIHdlIGFkZCBhIENGSSBmbGFzaAo+ID4g ZW11bGF0aW9uIHRvIGt2bXRvb2wuCj4gPiBUaGlzIGlzIGJhY2tlZCBieSBhIGZpbGUsIHNwZWNp ZmllZCB2aWEgdGhlIC0tZmxhc2ggb3IgLUYgY29tbWFuZCBsaW5lCj4gPiBvcHRpb24uIEFueSBm bGFzaCB3cml0ZXMgZG9uZSBieSB0aGUgZ3Vlc3Qgd2lsbCBpbW1lZGlhdGVseSBiZSByZWZsZWN0 ZWQKPiA+IGludG8gdGhpcyBmaWxlIChrdm10b29sIG1tYXAncyB0aGUgZmlsZSkuCj4gPgo+ID4g VGhpcyBpbXBsZW1lbnRzIGEgQ0ZJIGZsYXNoIHVzaW5nIHRoZSAiSW50ZWwvU2hhcnAgZXh0ZW5k ZWQgY29tbWFuZAo+ID4gc2V0IiwgYXMgc3BlY2lmaWVkIGluOgo+ID4gLSBKRURFQyBKRVNENjgu MDEKPiA+IC0gSkVERUMgSkVQMTM3Qgo+ID4gLSBJbnRlbCBBcHBsaWNhdGlvbiBOb3RlIDY0Ngo+ ID4gU29tZSBnYXBzIGluIHRob3NlIHNwZWNzIGhhdmUgYmVlbiBmaWxsZWQgYnkgbG9va2luZyBh dCByZWFsIGRldmljZXMgYW5kCj4gPiBvdGhlciBpbXBsZW1lbnRhdGlvbnMgKFFFTVUsIExpbnV4 IGtlcm5lbCBkcml2ZXIpLgo+ID4KPiA+IEF0IHRoZSBtb21lbnQgdGhpcyByZWxpZXMgb24gRFQg dG8gYWR2ZXJ0aXNlIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlCj4gPiBmbGFzaCBtZW1vcnkgKG1h cHBlZCBpbnRvIHRoZSBNTUlPIGFkZHJlc3Mgc3BhY2UpIGFuZCBpcyBvbmx5IGVuYWJsZWQKPiA+ IGZvciBBUk0vQVJNNjQuIFRoZSBlbXVsYXRpb24gaXRzZWxmIGlzIGFyY2hpdGVjdHVyZSBhZ25v c3RpYywgdGhvdWdoLgo+ID4KPiA+IFRoaXMgaXMgb25lIG1pc3NpbmcgcGllY2UgdG93YXJkIGEg d29ya2luZyBVRUZJIGJvb3Qgd2l0aCBrdm10b29sIG9uCj4gPiBBUk0gZ3Vlc3RzLCB0aGUgb3Ro ZXIgaXMgdG8gcHJvdmlkZSB3cml0YWJsZSBQQ0kgQkFScywgd2hpY2ggaXMgV0lQLgo+ID4KPiA+ IFNpZ25lZC1vZmYtYnk6IFJhcGhhZWwgR2F1bHQgPHJhcGhhZWwuZ2F1bHRAYXJtLmNvbT4KPiA+ IFtBbmRyZTogcmV3cml0aW5nIGFuZCBmaXhpbmddCj4gPiBTaWduZWQtb2ZmLWJ5OiBBbmRyZSBQ cnp5d3JhIDxhbmRyZS5wcnp5d2FyYUBhcm0uY29tPgo+ID4gLS0tCj4gPiBIaSwKPiA+Cj4gPiBh biB1cGRhdGUgYWRkcmVzc2luZyBXaWxsJ3MgY29tbWVudHMuIEkgYWRkZWQgY29hcnNlIGdyYWlu ZWQgbG9ja2luZwo+ID4gdG8gdGhlIE1NSU8gaGFuZGxlciwgdG8gcHJldmVudCBjb25jdXJyZW50 IHZDUFUgYWNjZXNzZXMgZnJvbSBtZXNzaW5nIHVwCj4gPiB0aGUgaW50ZXJuYWwgQ0ZJIGZsYXNo IHN0YXRlIG1hY2hpbmUuCj4gPiBJIGFsc28gZm9sZGVkIHRoZSBhY3R1YWwgZmxhc2ggYXJyYXkg cmVhZCBhY2Nlc3MgaW50byB0aGUgTU1JTyBoYW5kbGVyCj4gPiBhbmQgZml4ZWQgdGhlIG90aGVy IHNtYWxsIGlzc3Vlcy4KPiA+Cj4gPiBDaGVlcnMsCj4gPiBBbmRyZQo+ID4KPiA+ICBNYWtlZmls ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwo+ID4gIGFybS9pbmNsdWRlL2FybS1j b21tb24va3ZtLWFyY2guaCB8ICAgMyArCj4gPiAgYnVpbHRpbi1ydW4uYyAgICAgICAgICAgICAg ICAgICAgIHwgICAyICsKPiA+ICBody9jZmlfZmxhc2guYyAgICAgICAgICAgICAgICAgICAgfCA1 NDYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgaW5jbHVkZS9rdm0va3ZtLWNv bmZpZy5oICAgICAgICAgIHwgICAxICsKPiA+ICBpbmNsdWRlL2t2bS91dGlsLmggICAgICAgICAg ICAgICAgfCAgIDUgKwo+ID4gIDYgZmlsZXMgY2hhbmdlZCwgNTYzIGluc2VydGlvbnMoKykKPiA+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgaHcvY2ZpX2ZsYXNoLmMKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEv TWFrZWZpbGUgYi9NYWtlZmlsZQo+ID4gaW5kZXggMzg2MjExMmMuLjdlZDZmYjVlIDEwMDY0NAo+ ID4gLS0tIGEvTWFrZWZpbGUKPiA+ICsrKyBiL01ha2VmaWxlCj4gPiBAQCAtMTcwLDYgKzE3MCw3 IEBAIGlmZXEgKCQoQVJDSCksIGFybSkKPiA+ICAJQ0ZMQUdTCQkrPSAtbWFyY2g9YXJtdjctYQo+ ID4gIAo+ID4gIAlBUkNIX1dBTlRfTElCRkRUIDo9IHkKPiA+ICsJQVJDSF9IQVNfRkxBU0hfTUVN IDo9IHkKPiA+ICBlbmRpZgo+ID4gIAo+ID4gICMgQVJNNjQKPiA+IEBAIC0xODIsNiArMTgzLDcg QEAgaWZlcSAoJChBUkNIKSwgYXJtNjQpCj4gPiAgCUFSQ0hfSU5DTFVERQkrPSAtSWFybS9hYXJj aDY0L2luY2x1ZGUKPiA+ICAKPiA+ICAJQVJDSF9XQU5UX0xJQkZEVCA6PSB5Cj4gPiArCUFSQ0hf SEFTX0ZMQVNIX01FTSA6PSB5Cj4gPiAgZW5kaWYKPiA+ICAKPiA+ICBpZmVxICgkKEFSQ0gpLG1p cHMpCj4gPiBAQCAtMjYxLDYgKzI2MywxMCBAQCBpZmVxICh5LCQoQVJDSF9IQVNfRlJBTUVCVUZG RVIpKQo+ID4gIAllbmRpZgo+ID4gIGVuZGlmCj4gPiAgCj4gPiAraWZlcSAoeSwkKEFSQ0hfSEFT X0ZMQVNIX01FTSkpCj4gPiArCU9CSlMJKz0gaHcvY2ZpX2ZsYXNoLm8KPiA+ICtlbmRpZgo+ID4g Kwo+ID4gIGlmZXEgKCQoY2FsbCB0cnktYnVpbGQsJChTT1VSQ0VfWkxJQiksJChDRkxBR1MpLCQo TERGTEFHUykgLWx6KSx5KQo+ID4gIAlDRkxBR1NfRFlOT1BUCSs9IC1EQ09ORklHX0hBU19aTElC Cj4gPiAgCUxJQlNfRFlOT1BUCSs9IC1sego+ID4gZGlmZiAtLWdpdCBhL2FybS9pbmNsdWRlL2Fy bS1jb21tb24va3ZtLWFyY2guaCBiL2FybS9pbmNsdWRlL2FybS1jb21tb24va3ZtLWFyY2guaAo+ ID4gaW5kZXggYjlkNDg2ZDUuLjJiYjA4NWY0IDEwMDY0NAo+ID4gLS0tIGEvYXJtL2luY2x1ZGUv YXJtLWNvbW1vbi9rdm0tYXJjaC5oCj4gPiArKysgYi9hcm0vaW5jbHVkZS9hcm0tY29tbW9uL2t2 bS1hcmNoLmgKPiA+IEBAIC0yMSw2ICsyMSw5IEBACj4gPiAgI2RlZmluZSBBUk1fR0lDX0RJU1Rf U0laRQkweDEwMDAwCj4gPiAgI2RlZmluZSBBUk1fR0lDX0NQVUlfU0laRQkweDIwMDAwCj4gPiAg Cj4gPiArI2RlZmluZSBBUk1fRkxBU0hfTU1JT19CQVNFCTB4MjAwMDAwMAkJLyogMzIgTUIgKi8K PiA+ICsjZGVmaW5lIEtWTV9GTEFTSF9NTUlPX0JBU0UJQVJNX0ZMQVNIX01NSU9fQkFTRSAgCj4g Cj4gRWFjaCB0aW1lIEkgdHJ5IHRvIHJlYWQgdGhlIG1lbW9yeSBsYXlvdXQgZm9yIEFSTSBJIGdl dCBhIGhlYWRhY2hlLiBBY2NvcmRpbmcgdG8KPiBteSBjYWxjdWxhdGlvbnMsIHRoaXMgZmFsbHMg cmlnaHQgaW5zaWRlIEFSTV9NTUlPX0FSRUEsIHJpZ2h0PyBBbnkgcGFydGljdWxhcgo+IHJlYXNv biBmb3IgY2hvb3NpbmcgdGhpcyBhZGRyZXNzPyBXaHkgbm90IGNhcnZlIGl0cyBvd24gZGVkaWNh dGUgYXJlYSwgc28gd2Ugd29uJ3QKPiBydW4gdGhlIGhpZ2hseSB1bmxpa2VseSByaXNrIHRoYXQg aXQgd2lsbCBiZSBvdmVyd3JpdHRlbiwgc2luY2UgaXQncyBpbiB0aGUgTU1JTwo+IGFsbG9jYXRp b24gYXJlYT8KClRoZSBFREsyIGJ1aWxkIEkgdXNlZCBoYXMgdGhlIGJhc2UgYWRkcmVzcyBmaXhl ZCBhdCAzMk1CLiBTbyBJIGp1c3QgdXNlZCB0aGlzIGFkZHJlc3MgaGVyZS4gU2FtaSBpcyB3b3Jr aW5nIG9uIG1ha2luZyB0aGlzIGZsZXhpYmxlIGFzIHdlIHNwZWFrLCBidXQgaXQncyBub3QgZWFz eSBkdWUgdG8gc29tZSBFREstMiBkZXNpZ24gaXNzdWVzLgpBcyBhbiBpbnRlcmltIG1lYXN1cmUg SSB3b3VsZCB0cnkgdG8gZGVzY3JpYmUgdGhpcyB1c2luZyB0aGUgZXhpc3RpbmcgTU1JTyBsYXlv dXQgbWFjcm9zLCB0byBhdCBsZWFzdCBhdm9pZCBvdmVybGFwcyB3aXRoIHZpcnRpby1tbWlvLgpJ IGFjdHVhbGx5IG1pZ2h0IG1vdmUgdGhhdCBhZGRyZXNzIHRvIHRoZSBiZWdpbm5pbmcgZm9yIG5v dywgYXMgMzJNQiBpcyBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiB0aGUgTU1JTyBhcmVhLgpR RU1VIGhhcyB0aGF0IGhhcmRjb2RlZCAoYm90aCBpbiBRRU1VIGFuZCBFREstMikgYXMgd2VsbCwg YnR3LgogCj4gPiArCj4gPiAgI2RlZmluZSBBUk1fSU9QT1JUX1NJWkUJCShBUk1fTU1JT19BUkVB IC0gQVJNX0lPUE9SVF9BUkVBKQo+ID4gICNkZWZpbmUgQVJNX1ZJUlRJT19NTUlPX1NJWkUJKEFS TV9BWElfQVJFQSAtIChBUk1fTU1JT19BUkVBICsgQVJNX0dJQ19TSVpFKSkgIAo+IAo+IFRoYXQn cyBub3QgY29ycmVjdCBhbnltb3JlLCBiZWNhdXNlIGZsYXNoIG1lbW9yeSBpcyBpbiB0aGUgQVJN X01NSU9fQVJFQS4KClRydWUsIEkgd2lsbCB0cnkgdG8gZmluZCB0aGUgcmlnaHQgcGxhY2UgZm9y IHRoaXMuIFNvbWV3aGF0IHByb2JsZW1hdGljIGlzIHRoZSBkaWZmZXJpbmcgc2l6ZSwgYnV0IHdl IGNvdWxkIGp1c3QgaW1wb3NlIGFuIHVwcGVyIGxpbWl0IG9uIHRoaXMuCgo+ID4gICNkZWZpbmUg QVJNX1BDSV9DRkdfU0laRQkoMVVMTCA8PCAyNCkKPiA+IGRpZmYgLS1naXQgYS9idWlsdGluLXJ1 bi5jIGIvYnVpbHRpbi1ydW4uYwo+ID4gaW5kZXggZjhkYzZjNzIuLmRmOGM2NzQxIDEwMDY0NAo+ ID4gLS0tIGEvYnVpbHRpbi1ydW4uYwo+ID4gKysrIGIvYnVpbHRpbi1ydW4uYwo+ID4gQEAgLTEz OCw2ICsxMzgsOCBAQCB2b2lkIGt2bV9ydW5fc2V0X3dyYXBwZXJfc2FuZGJveCh2b2lkKQo+ID4g IAkJCSJLZXJuZWwgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyIpLAkJXAo+ID4gIAlPUFRfU1RSSU5H KCdmJywgImZpcm13YXJlIiwgJihjZmcpLT5maXJtd2FyZV9maWxlbmFtZSwgImZpcm13YXJlIixc Cj4gPiAgCQkJIkZpcm13YXJlIGltYWdlIHRvIGJvb3QgaW4gdmlydHVhbCBtYWNoaW5lIiksCVwK PiA+ICsJT1BUX1NUUklORygnRicsICJmbGFzaCIsICYoY2ZnKS0+Zmxhc2hfZmlsZW5hbWUsICJm bGFzaCIsXAo+ID4gKwkJCSJGbGFzaCBpbWFnZSB0byBwcmVzZW50IHRvIHZpcnR1YWwgbWFjaGlu ZSIpLAlcCj4gPiAgCQkJCQkJCQkJXAo+ID4gIAlPUFRfR1JPVVAoIk5ldHdvcmtpbmcgb3B0aW9u czoiKSwJCQkJXAo+ID4gIAlPUFRfQ0FMTEJBQ0tfREVGQVVMVCgnbicsICJuZXR3b3JrIiwgTlVM TCwgIm5ldHdvcmsgcGFyYW1zIiwJXAo+ID4gZGlmZiAtLWdpdCBhL2h3L2NmaV9mbGFzaC5jIGIv aHcvY2ZpX2ZsYXNoLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAw MC4uZDdjMGU3ZTgKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2h3L2NmaV9mbGFzaC5jCj4g PiBAQCAtMCwwICsxLDU0NiBAQAo+ID4gKyNpbmNsdWRlIDxzdGRib29sLmg+Cj4gPiArI2luY2x1 ZGUgPHN0ZGxpYi5oPgo+ID4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiA+ICsjaW5jbHVkZSA8bGlu dXgvYml0b3BzLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ID4gKyNpbmNsdWRlIDxs aW51eC9zaXplcy5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ID4gKwo+ID4gKyNp bmNsdWRlICJrdm0va3ZtLmgiCj4gPiArI2luY2x1ZGUgImt2bS9rdm0tYXJjaC5oIgo+ID4gKyNp bmNsdWRlICJrdm0vZGV2aWNlcy5oIgo+ID4gKyNpbmNsdWRlICJrdm0vZmR0LmgiCj4gPiArI2lu Y2x1ZGUgImt2bS9tdXRleC5oIgo+ID4gKyNpbmNsdWRlICJrdm0vdXRpbC5oIgo+ID4gKwo+ID4g Ky8qIFRoZSBFREsyIGRyaXZlciBoYXJkY29kZXMgdHdvIDE2LWJpdCBjaGlwcyBvbiBhIDMyLWJp dCBidXMuICovCj4gPiArI2RlZmluZSBDRklfTlJfRkxBU0hfQ0hJUFMJCQkyCj4gPiArCj4gPiAr LyogV2UgYWx3YXlzIGVtdWxhdGUgYSAzMiBiaXQgYnVzIHdpZHRoLiAqLwo+ID4gKyNkZWZpbmUg Q0ZJX0JVU19XSURUSAkJCQk0Cj4gPiArCj4gPiArLyogVGhlICplZmZlY3RpdmUqIHNpemUgb2Yg YW4gZXJhc2UgYmxvY2sgKG92ZXIgYWxsIGNoaXBzKSAqLwo+ID4gKyNkZWZpbmUgRkxBU0hfQkxP Q0tfU0laRQkJCVNaXzY0Swo+ID4gKwo+ID4gKyNkZWZpbmUgUFJPR1JBTV9CVUZGX1NJWkVfQklU UwkJCTcKPiA+ICsjZGVmaW5lIFBST0dSQU1fQlVGRl9TSVpFCQkJKDFVIDw8IFBST0dSQU1fQlVG Rl9TSVpFX0JJVFMpICAKPiAKPiBKdXN0IG1ha2luZyBzdXJlIHRoaXMgaXMgbm90IGFuIG9mZi1i eS1vbmUgZXJyb3IuIFRoZSBidWZmZXIgc2l6ZSBpcyAyXjcgPSAxMjgKPiB3b3Jkcywgd2hpY2gg bWFrZXMgaXQgNTEyIGJ5dGVzLCByaWdodD8KCkxvb2tzIGxpa2UgaXQgOy0pClRoZSByZWFzb24g dGhpcyBpcyBwcmVzZW50ZWQgaW4gdGhpcyByYXRoZXIgYXdrd2FyZCB3YXkgaGVyZSBpcyB0aGF0 IHdlIG5lZWQgdGhlIG51bWJlciBvZiBiaXRzIHRvIGJlIHByZXNlbnRlZCBpbiB0aGUgQ0ZJIHF1 ZXJ5IHN0cnVjdHVyZSBsYXRlciBvbi4KSSB3aWxsIGFkZCBhIGNvbW1lbnQgcG9pbnRpbmcgb3V0 IHRoaXMgaXMgaW4gdW5pdHMgb2YgIndvcmRzIiAtIGFmdGVyIGRvdWJsZSBjaGVja2luZyB0aGF0 IGl0IHJlYWxseSBpcyA7LSkKIAo+ID4gKwo+ID4gKy8qIENGSSBjb21tYW5kcyAqLwo+ID4gKyNk ZWZpbmUgQ0ZJX0NNRF9MT0NLX0JMT0NLCQkJMHgwMQo+ID4gKyNkZWZpbmUgQ0ZJX0NNRF9BTFRF Uk5BVEVfV09SRF9QUk9HUkFNX1NFVFVQCTB4MTAKPiA+ICsjZGVmaW5lIENGSV9DTURfQkxPQ0tf RVJBU0VfU0VUVVAJCTB4MjAKPiA+ICsjZGVmaW5lIENGSV9DTURfV09SRF9QUk9HUkFNX1NFVFVQ CQkweDQwCj4gPiArI2RlZmluZSBDRklfQ01EX0NMRUFSX1NUQVRVU19SRUdJU1RFUgkJMHg1MAo+ ID4gKyNkZWZpbmUgQ0ZJX0NNRF9MT0NLX0JMT0NLX1NFVFVQCQkweDYwCj4gPiArI2RlZmluZSBD RklfQ01EX1JFQURfU1RBVFVTX1JFR0lTVEVSCQkweDcwCj4gPiArI2RlZmluZSBDRklfQ01EX1JF QURfSkVERUMJCQkweDkwCj4gPiArI2RlZmluZSBDRklfQ01EX1JFQURfQ0ZJX1FVRVJZCQkJMHg5 OAo+ID4gKyNkZWZpbmUgQ0ZJX0NNRF9CVUZGRVJFRF9QUk9HUkFNX0NPTkZJUk0JMHhkMAo+ID4g KyNkZWZpbmUgQ0ZJX0NNRF9CTE9DS19FUkFTRV9DT05GSVJNCQkweGQwCj4gPiArI2RlZmluZSBD RklfQ01EX1VOTE9DS19CTE9DSwkJCTB4ZDAKPiA+ICsjZGVmaW5lIENGSV9DTURfQlVGRkVSRURf UFJPR1JBTV9TRVRVUAkJMHhlOAo+ID4gKyNkZWZpbmUgQ0ZJX0NNRF9SRUFEX0FSUkFZCQkJMHhm Zgo+ID4gKwo+ID4gKy8qCj4gPiArICogQ0ZJIHF1ZXJ5IHRhYmxlIGNvbnRlbnRzLCBhcyBmYXIg YXMgaXQgaXMgY29uc3RhbnQuCj4gPiArICovCj4gPiArI2RlZmluZSBDRklfR0VPTV9PRkZTRVQJ CQkJMHgyNwo+ID4gK3N0YXRpYyB1OCBjZmlfcXVlcnlfdGFibGVbXSA9IHsKPiA+ICsJCS8qIG9m ZnNldCAweDEwOiBDRkkgcXVlcnkgaWRlbnRpZmljYXRpb24gc3RyaW5nICovCj4gPiArCSdRJywg J1InLCAnWScsCQkvKiBJRCBzdHJpbmcgKi8KPiA+ICsJMHgwMSwgMHgwMCwJCS8qIHByaW1hcnkg Y29tbWFuZCBzZXQ6IEludGVsL1NoYXJwIGV4dGVuZGVkICovCj4gPiArCTB4MzEsIDB4MDAsCQkv KiBhZGRyZXNzIG9mIHByaW1hcnkgZXh0ZW5kZWQgcXVlcnkgdGFibGUgKi8KPiA+ICsJMHgwMCwg MHgwMCwJCS8qIGFsdGVybmF0aXZlIGNvbW1hbmQgc2V0OiB1bnVzZWQgKi8KPiA+ICsJMHgwMCwg MHgwMCwJCS8qIGFkZHJlc3Mgb2YgYWx0ZXJuYXRpdmUgZXh0ZW5kZWQgcXVlcnkgdGFibGUqLwo+ ID4gKwkJLyogb2Zmc2V0IDB4MWI6IHN5c3RlbSBpbnRlcmZhY2UgaW5mb3JtYXRpb24gKi8KPiA+ ICsJMHg0NSwJCQkvKiBtaW5pbXVtIFZjYyB2b2x0YWdlOiA0LjVWICovCj4gPiArCTB4NTUsCQkJ LyogbWF4aW11bSBWY2Mgdm9sdGFnZTogNS41ViAqLwo+ID4gKwkweDAwLAkJCS8qIG1pbmltdW0g VnBwIHZvbHRhZ2U6IDAuMFYgKHVudXNlZCkgKi8KPiA+ICsJMHgwMCwJCQkvKiBtYXhpbXVtIFZw cCB2b2x0YWdlOiAwLjBWICoodW51c2VkKSAqLwo+ID4gKwkweDAxLAkJCS8qIHRpbWVvdXQgZm9y IHNpbmdsZSB3b3JkIHByb2dyYW06IDIgdXMgKi8KPiA+ICsJMHgwMSwJCQkvKiB0aW1lb3V0IGZv ciBtdWx0aS1ieXRlIHByb2dyYW06IDIgdXMgKi8KPiA+ICsJMHgwMSwJCQkvKiB0aW1lb3V0IGZv ciBibG9jayBlcmFzZTogMiBtcyAqLwo+ID4gKwkweDAwLAkJCS8qIHRpbWVvdXQgZm9yIGZ1bGwg Y2hpcCBlcmFzZTogbm90IHN1cHBvcnRlZCAqLwo+ID4gKwkweDAwLAkJCS8qIG1heCB0aW1lb3V0 IGZvciBzaW5nbGUgd29yZCBwcm9ncmFtOiAxeCAqLwo+ID4gKwkweDAwLAkJCS8qIG1heCB0aW1l b3V0IGZvciBtdWxpdC1ieXRlIHByb2dyYW06IDF4ICovCj4gPiArCTB4MDAsCQkJLyogbWF4IHRp bWVvdXQgZm9yIGJsb2NrIGVyYXNlOiAxeCAqLwo+ID4gKwkweDAwLAkJCS8qIG1heCB0aW1lb3V0 IGZvciBjaGlwIGVyYXNlOiBub3Qgc3VwcG9ydGVkICovCj4gPiArCQkvKiBvZmZzZXQgMHgyNzog Zmxhc2ggZ2VvbWV0cnkgaW5mb3JtYXRpb24gKi8KPiA+ICsJMHgwMCwJCQkvKiBzaXplIGluIHBv d2VyLW9mLTIgYnl0ZXMsIGZpbGxlZCBsYXRlciAqLwo+ID4gKwkweDA2LCAweDAwLAkJLyogaW50 ZXJmYWNlIGRlc2NyaXB0aW9uOiAzMiBhbmQgMTYgYml0cyAqLwo+ID4gKwlQUk9HUkFNX0JVRkZf U0laRV9CSVRTICsgMSAtIENGSV9OUl9GTEFTSF9DSElQUywgMHgwMCwKPiA+ICsJCQkJLyogbnVt YmVyIG9mIG11bHRpLWJ5dGUgd3JpdGVzICovCj4gPiArCTB4MDEsCQkJLyogb25lIGVyYXNlIGJs b2NrIHJlZ2lvbiAqLwo+ID4gKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiBudW1iZXIgYW5k IHNpemUgb2YgZXJhc2UgYmxvY2tzLCBmaWxsZWQgKi8KPiA+ICsJCS8qIG9mZnNldCAweDMxOiBJ bnRlbCBwcmltYXJ5IGFsZ29yaXRobSBleHRlbmRlZCBxdWVyeSB0YWJsZSAqLwo+ID4gKwknUCcs ICdSJywgJ0knLAo+ID4gKwknMScsICcwJywJCS8qIHZlcnNpb24gMS4wICovCj4gPiArCTB4YTAs IDB4MDAsIDB4MDAsIDB4MDAsIC8qIG9wdGlvbmFsIGZlYXR1cmVzOiBpbnN0YW50IGxvY2sgJiBw bS1yZWFkICovCj4gPiArCTB4MDAsCQkJLyogbm8gZnVuY3Rpb25zIGFmdGVyIHN1c3BlbmQgKi8K PiA+ICsJMHgwMSwgMHgwMCwJCS8qIG9ubHkgbG9jayBiaXQgc3VwcG9ydGVkICovCj4gPiArCTB4 NTAsCQkJLyogYmVzdCBWY2MgdmFsdWU6IDUuMFYgKi8KPiA+ICsJMHgwMCwJCQkvKiBiZXN0IFZw cCB2YWx1ZTogMC4wViAodW51c2VkKSAqLwo+ID4gKwkweDAxLAkJCS8qIG51bWJlciBvZiBwcm90 ZWN0aW9uIHJlZ2lzdGVyIGZpZWxkcyAqLwo+ID4gKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAkv KiBwcm90ZWN0aW9uIGZpZWxkIDEgZGVzY3JpcHRpb24gKi8KPiA+ICt9Owo+ID4gKwo+ID4gKwo+ ID4gKy8qCj4gPiArICogVGhvc2Ugc3RhdGVzIHJlcHJlc2VudCBhIHN1YnNldCBvZiB0aGUgQ0ZJ IGZsYXNoIHN0YXRlIG1hY2hpbmUuCj4gPiArICovCj4gPiArZW51bSBjZmlfZmxhc2hfc3RhdGUg ewo+ID4gKwlSRUFEWSwKPiA+ICsJTE9DS19TRVRVUCwKPiA+ICsJV1BfU0VUVVAsCj4gPiArCUJQ X1NFVFVQLAo+ID4gKwlCUF9MT0FELAo+ID4gKwlFUkFTRV9TRVRVUCwKPiA+ICt9Owo+ID4gKwo+ ID4gKy8qCj4gPiArICogVGhlIGRldmljZSBjYW4gYmUgaW4gc2V2ZXJhbCAqKlJlYWQqKiBtb2Rl cy4KPiA+ICsgKiBXZSBkb24ndCBpbXBsZW1lbnQgdGhlIGFzeW5jaHJvbm91cyBidXJzdCBtb2Rl Lgo+ID4gKyAqLwo+ID4gK2VudW0gY2ZpX3JlYWRfbW9kZSB7Cj4gPiArCVJFQURfQVJSQVksCj4g PiArCVJFQURfU1RBVFVTLAo+ID4gKwlSRUFEX0RFVklDRV9JRCwKPiA+ICsJUkVBRF9RVUVSWSwK PiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBjZmlfZmxhc2hfZGV2aWNlIHsKPiA+ICsJc3RydWN0 IGRldmljZV9oZWFkZXIJZGV2X2hkcjsKPiA+ICsJLyogUHJvdGVjdHMgdGhlIENGSSBzdGF0ZSBt YWNoaW5lIHZhcmlhYmxlcyBpbiB0aGlzIGRhdGEgc3RydWN0dXJlLiAqLwo+ID4gKwlzdHJ1Y3Qg bXV0ZXgJCW11dGV4Owo+ID4gKwl1NjQJCQliYXNlX2FkZHI7Cj4gPiArCXUzMgkJCXNpemU7Cj4g PiArCj4gPiArCXZvaWQJCQkqZmxhc2hfbWVtb3J5Owo+ID4gKwl1OAkJCXByb2dyYW1fYnVmZmVy W1BST0dSQU1fQlVGRl9TSVpFICogNF07ICAKPiAKPiBZb3UncmUgbXVsdGlwbHlpbmcgYnkgNCBi ZWNhdXNlIFBST0dSQU1fQlVGRl9TSVpFIGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgaW4KPiB3 b3JkcywgcmlnaHQ/CgpZZWFoLCBJIGNhbiB1c2UgInNpemVvZih1MzIpIiBpZiB0aGF0IGlzIGJl dHRlci4KCj4gPiArCXVuc2lnbmVkIGxvbmcJCSpsb2NrX2JtOwo+ID4gKwl1NjQJCQlsYXN0X2Fk ZHJlc3M7Cj4gPiArCXVuc2lnbmVkIGludAkJYnVmZl93cml0dGVuOwo+ID4gKwl1bnNpZ25lZCBp bnQJCXByb2dyYW1fbGVuZ3RoOwo+ID4gKwo+ID4gKwllbnVtIGNmaV9mbGFzaF9zdGF0ZQlzdGF0 ZTsKPiA+ICsJZW51bSBjZmlfcmVhZF9tb2RlCXJlYWRfbW9kZTsKPiA+ICsJdTE2CQkJcmNyOwo+ ID4gKwl1OAkJCXNyOwo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludCBucl9lcmFzZV9ibG9j a3Moc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2KQo+ID4gK3sKPiA+ICsJcmV0dXJuIHNm ZGV2LT5zaXplIC8gRkxBU0hfQkxPQ0tfU0laRTsKPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsg KiBDRkkgcXVlcmllcyBhbHdheXMgZGVhbCB3aXRoIG9uZSBieXRlIG9mIGluZm9ybWF0aW9uLCBw b3NzaWJseSBtaXJyb3JlZAo+ID4gKyAqIHRvIG90aGVyIGJ5dGVzIG9uIHRoZSBidXMuIFRoaXMg aXMgZGVhbHQgd2l0aCBpbiB0aGUgY2FsbGVycy4KPiA+ICsgKiBUaGUgYWRkcmVzcyBwcm92aWRl ZCBpcyB0aGUgb25lIGZvciA4LWJpdCBhZGRyZXNzaW5nLCBhbmQgd291bGQgbmVlZCB0bwo+ID4g KyAqIGJlIGFkanVzdGVkIGZvciB3aWRlciBhY2Nlc3Nlcy4KPiA+ICsgKi8KPiA+ICtzdGF0aWMg dTggcmVhZF9jZmkoc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2LCB1NjQgYWRkcikKPiA+ ICt7Cj4gPiArCWlmIChhZGRyIDwgMHgxMCkJCS8qIENGSSBpbmZvcm1hdGlvbiBzdGFydHMgYXQg MHgxMCAqLwo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCWlmIChhZGRyIC0gMHgxMCA+IHNp emVvZihjZmlfcXVlcnlfdGFibGUpKSB7Cj4gPiArCQlwcl9kZWJ1ZygiQ0ZJIHF1ZXJ5IHJlYWQg YWNjZXNzIGJleW9uZCB0aGUgZW5kIG9mIHRhYmxlIik7Cj4gPiArCQlyZXR1cm4gMDsKPiA+ICsJ fQo+ID4gKwo+ID4gKwkvKiBGaXh1cCBkeW5hbWljIGluZm9ybWF0aW9uIGluIHRoZSBnZW9tZXRy eSBwYXJ0IG9mIHRoZSB0YWJsZS4gKi8KPiA+ICsJc3dpdGNoIChhZGRyKSB7Cj4gPiArCWNhc2Ug Q0ZJX0dFT01fT0ZGU0VUOgkJLyogZGV2aWNlIHNpemUgaW4gYnl0ZXMsIHBvd2VyIG9mIHR3byAq Lwo+ID4gKwkJcmV0dXJuIHBvdzJfc2l6ZShzZmRldi0+c2l6ZSAvIENGSV9OUl9GTEFTSF9DSElQ Uyk7Cj4gPiArCWNhc2UgQ0ZJX0dFT01fT0ZGU0VUICsgNjoJLyogbnVtYmVyIG9mIGVyYXNlIGJs b2NrcywgbWludXMgb25lICovCj4gPiArCQlyZXR1cm4gKG5yX2VyYXNlX2Jsb2NrcyhzZmRldikg LSAxKSAmIDB4ZmY7Cj4gPiArCWNhc2UgQ0ZJX0dFT01fT0ZGU0VUICsgNzoKPiA+ICsJCXJldHVy biAobnJfZXJhc2VfYmxvY2tzKHNmZGV2KSAtIDEpID4+IDg7Cj4gPiArCWNhc2UgQ0ZJX0dFT01f T0ZGU0VUICsgODoJLyogZXJhc2UgYmxvY2sgc2l6ZSwgaW4gdW5pdHMgb2YgMjU2ICovCj4gPiAr CQlyZXR1cm4gKChGTEFTSF9CTE9DS19TSVpFIC8gMjU2ICkgLyBDRklfTlJfRkxBU0hfQ0hJUFMp ICYgMHhmZjsKPiA+ICsJY2FzZSBDRklfR0VPTV9PRkZTRVQgKyA5Ogo+ID4gKwkJcmV0dXJuICgo RkxBU0hfQkxPQ0tfU0laRSAvIDI1NiApIC8gQ0ZJX05SX0ZMQVNIX0NISVBTKSA+PiA4Owo+ID4g Kwl9Cj4gPiArCj4gPiArCXJldHVybiBjZmlfcXVlcnlfdGFibGVbYWRkciAtIDB4MTBdOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgYm9vbCBibG9ja19pc19sb2NrZWQoc3RydWN0IGNmaV9mbGFz aF9kZXZpY2UgKnNmZGV2LCB1NjQgYWRkcikKPiA+ICt7Cj4gPiArCWludCBibG9ja19uciA9IGFk ZHIgLyBGTEFTSF9CTE9DS19TSVpFOwo+ID4gKwo+ID4gKwlyZXR1cm4gdGVzdF9iaXQoYmxvY2tf bnIsIHNmZGV2LT5sb2NrX2JtKTsKPiA+ICt9Cj4gPiArCj4gPiArI2RlZmluZSBERVZfSURfTUFT SyAweDdmZgo+ID4gK3N0YXRpYyB1MTYgcmVhZF9kZXZfaWQoc3RydWN0IGNmaV9mbGFzaF9kZXZp Y2UgKnNmZGV2LCB1NjQgYWRkcikKPiA+ICt7Cj4gPiArCXN3aXRjaCAoKGFkZHIgJiBERVZfSURf TUFTSykgLyBDRklfQlVTX1dJRFRIKSB7Cj4gPiArCWNhc2UgMHgwOgkJCQkvKiB2ZW5kb3IgSUQg Ki8KPiA+ICsJCXJldHVybiAweDAwMDA7Cj4gPiArCWNhc2UgMHgxOgkJCQkvKiBkZXZpY2UgSUQg Ki8KPiA+ICsJCXJldHVybiAweGZmZmY7Cj4gPiArCWNhc2UgMHgyOgo+ID4gKwkJcmV0dXJuIGJs b2NrX2lzX2xvY2tlZChzZmRldiwgYWRkciAmIH5ERVZfSURfTUFTSyk7Cj4gPiArCWNhc2UgMHg1 Ogo+ID4gKwkJcmV0dXJuIHNmZGV2LT5yY3I7Cj4gPiArCWRlZmF1bHQ6CQkJLyogSWdub3JlIHRo ZSBvdGhlciBlbnRyaWVzLiAqLwo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCX0KPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHZvaWQgbG9ja19ibG9jayhzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2Zk ZXYsIHU2NCBhZGRyLCBib29sIGxvY2spCj4gPiArewo+ID4gKwlpbnQgYmxvY2tfbnIgPSBhZGRy IC8gRkxBU0hfQkxPQ0tfU0laRTsKPiA+ICsKPiA+ICsJaWYgKGxvY2spCj4gPiArCQlzZXRfYml0 KGJsb2NrX25yLCBzZmRldi0+bG9ja19ibSk7Cj4gPiArCWVsc2UKPiA+ICsJCWNsZWFyX2JpdChi bG9ja19uciwgc2ZkZXYtPmxvY2tfYm0pOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB3 b3JkX3Byb2dyYW0oc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2LAo+ID4gKwkJCSB1NjQg YWRkciwgdm9pZCAqZGF0YSwgaW50IGxlbikKPiA+ICt7Cj4gPiArCWlmIChibG9ja19pc19sb2Nr ZWQoc2ZkZXYsIGFkZHIpKSB7Cj4gPiArCQlzZmRldi0+c3IgfD0gMHgxMjsKPiA+ICsJCXJldHVy bjsKPiA+ICsJfQo+ID4gKwo+ID4gKwltZW1jcHkoc2ZkZXYtPmZsYXNoX21lbW9yeSArIGFkZHIs IGRhdGEsIGxlbik7Cj4gPiArfQo+ID4gKwo+ID4gKy8qIFJlc2V0IHRoZSBwcm9ncmFtIGJ1ZmZl ciBzdGF0ZSB0byBwcmVwYXJlIGZvciBmb2xsb3ctdXAgd3JpdGVzLiAqLwo+ID4gK3N0YXRpYyB2 b2lkIGJ1ZmZlcl9zZXR1cChzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXYpCj4gPiArewo+ ID4gKwltZW1zZXQoc2ZkZXYtPnByb2dyYW1fYnVmZmVyLCAwLCBzaXplb2Yoc2ZkZXYtPnByb2dy YW1fYnVmZmVyKSk7Cj4gPiArCXNmZGV2LT5sYXN0X2FkZHJlc3MgPSB+MFVMTDsKPiA+ICsJc2Zk ZXYtPmJ1ZmZfd3JpdHRlbiA9IDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBib29sIGJ1ZmZl cl9wcm9ncmFtKHN0cnVjdCBjZmlfZmxhc2hfZGV2aWNlICpzZmRldiwKPiA+ICsJCQkgICB1NjQg YWRkciwgdm9pZCAqYnVmZmVyLCBpbnQgbGVuKQo+ID4gK3sKPiA+ICsJdW5zaWduZWQgaW50IGJ1 Zl9hZGRyOwo+ID4gKwo+ID4gKwlpZiAoc2ZkZXYtPmJ1ZmZfd3JpdHRlbiA+PSBzZmRldi0+cHJv Z3JhbV9sZW5ndGgpCj4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAq IFRoZSBmaXJzdCB3b3JkIHdyaXR0ZW4gaW50byB0aGUgYnVmZmVyIGFmdGVyIHRoZSBzZXR1cCBj b21tYW5kCj4gPiArCSAqIGhhcHBlbnMgdG8gYmUgdGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhlIGJ1 ZmZlci4KPiA+ICsJICogQWxsIHN1YnNlcXVlbnQgd3JpdGVzIG5lZWQgdG8gYmUgd2l0aGluIHRo aXMgYWRkcmVzcyBhbmQgdGhpcwo+ID4gKwkgKiBhZGRyZXNzIHBsdXMgdGhlIGJ1ZmZlciBzaXpl LCBzbyBrZWVwIHRoaXMgdmFsdWUgYXJvdW5kLgo+ID4gKwkgKi8KPiA+ICsJaWYgKHNmZGV2LT5s YXN0X2FkZHJlc3MgPT0gfjBVTEwpCj4gPiArCQlzZmRldi0+bGFzdF9hZGRyZXNzID0gYWRkcjsK PiA+ICsKPiA+ICsJaWYgKGFkZHIgPCBzZmRldi0+bGFzdF9hZGRyZXNzKQo+ID4gKwkJcmV0dXJu IGZhbHNlOwo+ID4gKwlidWZfYWRkciA9IGFkZHIgLSBzZmRldi0+bGFzdF9hZGRyZXNzOwo+ID4g KwlpZiAoYnVmX2FkZHIgPj0gUFJPR1JBTV9CVUZGX1NJWkUpCj4gPiArCQlyZXR1cm4gZmFsc2U7 Cj4gPiArCj4gPiArCW1lbWNweShzZmRldi0+cHJvZ3JhbV9idWZmZXIgKyBidWZfYWRkciwgYnVm ZmVyLCBsZW4pOwo+ID4gKwlzZmRldi0+YnVmZl93cml0dGVuKys7Cj4gPiArCj4gPiArCXJldHVy biB0cnVlOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBidWZmZXJfY29uZmlybShzdHJ1 Y3QgY2ZpX2ZsYXNoX2RldmljZSAqc2ZkZXYpCj4gPiArewo+ID4gKwlpZiAoYmxvY2tfaXNfbG9j a2VkKHNmZGV2LCBzZmRldi0+bGFzdF9hZGRyZXNzKSkgewo+ID4gKwkJc2ZkZXYtPnNyIHw9IDB4 MTI7Cj4gPiArCQlyZXR1cm47Cj4gPiArCX0KPiA+ICsJbWVtY3B5KHNmZGV2LT5mbGFzaF9tZW1v cnkgKyBzZmRldi0+bGFzdF9hZGRyZXNzLAo+ID4gKwkgICAgICAgc2ZkZXYtPnByb2dyYW1fYnVm ZmVyLAo+ID4gKwkgICAgICAgc2ZkZXYtPmJ1ZmZfd3JpdHRlbiAqIHNpemVvZih1MzIpKTsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgYmxvY2tfZXJhc2VfY29uZmlybShzdHJ1Y3QgY2Zp X2ZsYXNoX2RldmljZSAqc2ZkZXYsIHU2NCBhZGRyKQo+ID4gK3sKPiA+ICsJaWYgKGJsb2NrX2lz X2xvY2tlZChzZmRldiwgYWRkcikpIHsKPiA+ICsJCXNmZGV2LT5zciB8PSAweDEyOwo+ID4gKwkJ cmV0dXJuOwo+ID4gKwl9Cj4gPiArCj4gPiArCW1lbXNldChzZmRldi0+Zmxhc2hfbWVtb3J5ICsg YWRkciwgMHhGRiwgRkxBU0hfQkxPQ0tfU0laRSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2 b2lkIGNmaV9mbGFzaF9tbWlvKHN0cnVjdCBrdm1fY3B1ICp2Y3B1LAo+ID4gKwkJCSAgIHU2NCBh ZGRyLCB1OCAqZGF0YSwgdTMyIGxlbiwgdTggaXNfd3JpdGUsCj4gPiArCQkJICAgdm9pZCAqY29u dGV4dCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBjZmlfZmxhc2hfZGV2aWNlICpzZmRldiA9IGNvbnRl eHQ7Cj4gPiArCXU2NCBmYWRkciA9IGFkZHIgLSBzZmRldi0+YmFzZV9hZGRyOwo+ID4gKwl1MzIg dmFsdWU7Cj4gPiArCj4gPiArCWlmICghaXNfd3JpdGUpIHsKPiA+ICsJCXUxNiBjZmlfdmFsdWUg PSAwOwo+ID4gKwo+ID4gKwkJbXV0ZXhfbG9jaygmc2ZkZXYtPm11dGV4KTsKPiA+ICsKPiA+ICsJ CXN3aXRjaCAoc2ZkZXYtPnJlYWRfbW9kZSkgewo+ID4gKwkJY2FzZSBSRUFEX0FSUkFZOgo+ID4g KwkJCS8qIGp1c3QgY29weSB0aGUgcmVxdWVzdGVkIGJ5dGVzIGZyb20gdGhlIGFycmF5ICovCj4g PiArCQkJbWVtY3B5KGRhdGEsIHNmZGV2LT5mbGFzaF9tZW1vcnkgKyBmYWRkciwgbGVuKTsKPiA+ ICsJCQlnb3RvIG91dF91bmxvY2s7Cj4gPiArCQljYXNlIFJFQURfU1RBVFVTOgo+ID4gKwkJCWNm aV92YWx1ZSA9IHNmZGV2LT5zcjsKPiA+ICsJCQlicmVhazsKPiA+ICsJCWNhc2UgUkVBRF9ERVZJ Q0VfSUQ6Cj4gPiArCQkJY2ZpX3ZhbHVlID0gcmVhZF9kZXZfaWQoc2ZkZXYsIGZhZGRyKTsKPiA+ ICsJCQlicmVhazsKPiA+ICsJCWNhc2UgUkVBRF9RVUVSWToKPiA+ICsJCQljZmlfdmFsdWUgPSBy ZWFkX2NmaShzZmRldiwgZmFkZHIgLyBDRklfQlVTX1dJRFRIKTsKPiA+ICsJCQlicmVhazsKPiA+ ICsJCX0KPiA+ICsJCXN3aXRjaCAobGVuKSB7Cj4gPiArCQljYXNlIDE6Cj4gPiArCQkJKmRhdGEg PSBjZmlfdmFsdWU7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQljYXNlIDg6IG1lbXNldChkYXRhICsg NCwgMCwgNCk7Cj4gPiArCQkJLyogZmFsbC10aHJvdWdoICovCj4gPiArCQljYXNlIDQ6Cj4gPiAr CQkJaWYgKENGSV9OUl9GTEFTSF9DSElQUyA9PSAyKQo+ID4gKwkJCQltZW1jcHkoZGF0YSArIDIs ICZjZmlfdmFsdWUsIDIpOwo+ID4gKwkJCWVsc2UKPiA+ICsJCQkJbWVtc2V0KGRhdGEgKyAyLCAw LCAyKTsKPiA+ICsJCQkvKiBmYWxsLXRocm91Z2ggKi8KPiA+ICsJCWNhc2UgMjoKPiA+ICsJCQlt ZW1jcHkoZGF0YSwgJmNmaV92YWx1ZSwgMik7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQlkZWZhdWx0 Ogo+ID4gKwkJCXByX2RlYnVnKCJDRkkgZmxhc2g6IGlsbGVnYWwgYWNjZXNzIGxlbmd0aCAlZCBm b3IgcmVhZCBtb2RlICVkIiwKPiA+ICsJCQkJIGxlbiwgc2ZkZXYtPnJlYWRfbW9kZSk7Cj4gPiAr CQkJYnJlYWs7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlnb3RvIG91dF91bmxvY2s7Cj4gPiArCX0K PiA+ICsKPiA+ICsJaWYgKGxlbiA+IDQpIHsKPiA+ICsJCXByX2luZm8oIkNGSSBmbGFzaDogTU1J TyAlZC1iaXQgd3JpdGUgYWNjZXNzIG5vdCBzdXBwb3J0ZWQiLAo+ID4gKwkJCSBsZW4gKiA4KTsK PiA+ICsJCXJldHVybjsKPiA+ICsJfQo+ID4gKwo+ID4gKwltZW1jcHkoJnZhbHVlLCBkYXRhLCBs ZW4pOwo+ID4gKwo+ID4gKwltdXRleF9sb2NrKCZzZmRldi0+bXV0ZXgpOwo+ID4gKwo+ID4gKwlz d2l0Y2ggKHNmZGV2LT5zdGF0ZSkgewo+ID4gKwljYXNlIFJFQURZOgkJCS8qIGhhbmRsZWQgYmVs b3cgKi8KPiA+ICsJCWJyZWFrOwo+ID4gKwo+ID4gKwljYXNlIExPQ0tfU0VUVVA6Cj4gPiArCQlz d2l0Y2ggKHZhbHVlICYgMHhmZikgewo+ID4gKwkJY2FzZSBDRklfQ01EX0xPQ0tfQkxPQ0s6Cj4g PiArCQkJbG9ja19ibG9jayhzZmRldiwgZmFkZHIsIHRydWUpOwo+ID4gKwkJCXNmZGV2LT5yZWFk X21vZGUgPSBSRUFEX1NUQVRVUzsKPiA+ICsJCQlicmVhazsKPiA+ICsJCWNhc2UgQ0ZJX0NNRF9V TkxPQ0tfQkxPQ0s6Cj4gPiArCQkJbG9ja19ibG9jayhzZmRldiwgZmFkZHIsIGZhbHNlKTsKPiA+ ICsJCQlzZmRldi0+cmVhZF9tb2RlID0gUkVBRF9TVEFUVVM7Cj4gPiArCQkJYnJlYWs7Cj4gPiAr CQlkZWZhdWx0Ogo+ID4gKwkJCXNmZGV2LT5zciB8PSAweDMwOwo+ID4gKwkJCWJyZWFrOwo+ID4g KwkJfQo+ID4gKwkJc2ZkZXYtPnN0YXRlID0gUkVBRFk7Cj4gPiArCQlnb3RvIG91dF91bmxvY2s7 Cj4gPiArCj4gPiArCWNhc2UgV1BfU0VUVVA6Cj4gPiArCQl3b3JkX3Byb2dyYW0oc2ZkZXYsIGZh ZGRyLCBkYXRhLCBsZW4pOwo+ID4gKwkJc2ZkZXYtPnJlYWRfbW9kZSA9IFJFQURfU1RBVFVTOwo+ ID4gKwkJc2ZkZXYtPnN0YXRlID0gUkVBRFk7Cj4gPiArCQlnb3RvIG91dF91bmxvY2s7Cj4gPiAr Cj4gPiArCWNhc2UgQlBfTE9BRDoKPiA+ICsJCWlmIChidWZmZXJfcHJvZ3JhbShzZmRldiwgZmFk ZHIsIGRhdGEsIGxlbikpCj4gPiArCQkJZ290byBvdXRfdW5sb2NrOwo+ID4gKwo+ID4gKwkJaWYg KCh2YWx1ZSAmIDB4RkYpID09IENGSV9DTURfQlVGRkVSRURfUFJPR1JBTV9DT05GSVJNKSB7Cj4g PiArCQkJYnVmZmVyX2NvbmZpcm0oc2ZkZXYpOwo+ID4gKwkJCXNmZGV2LT5yZWFkX21vZGUgPSBS RUFEX1NUQVRVUzsKPiA+ICsJCX0gZWxzZSB7Cj4gPiArCQkJcHJfZGVidWcoIkNGSSBmbGFzaDog QlBfTE9BRDogZXhwZWN0ZWQgQ09ORklSTSgweGQwKSwgZ290IDB4JXggQCAweCVsbHgiLAo+ID4g KwkJCQkgdmFsdWUsIGZhZGRyKTsKPiA+ICsJCQlzZmRldi0+c3IgfD0gMHgxMDsKPiA+ICsJCX0K PiA+ICsJCXNmZGV2LT5zdGF0ZSA9IFJFQURZOwo+ID4gKwkJZ290byBvdXRfdW5sb2NrOwo+ID4g Kwo+ID4gKwljYXNlIEJQX1NFVFVQOgo+ID4gKwkJc2ZkZXYtPnByb2dyYW1fbGVuZ3RoID0gKHZh bHVlICYgMHhmZmZmKSArIDE7Cj4gPiArCQlpZiAoc2ZkZXYtPnByb2dyYW1fbGVuZ3RoID4gUFJP R1JBTV9CVUZGX1NJWkUgLyA0KQo+ID4gKwkJCXNmZGV2LT5wcm9ncmFtX2xlbmd0aCA9IFBST0dS QU1fQlVGRl9TSVpFIC8gNDsKPiA+ICsJCXNmZGV2LT5zdGF0ZSA9IEJQX0xPQUQ7Cj4gPiArCQlz ZmRldi0+cmVhZF9tb2RlID0gUkVBRF9TVEFUVVM7Cj4gPiArCQlnb3RvIG91dF91bmxvY2s7Cj4g PiArCj4gPiArCWNhc2UgRVJBU0VfU0VUVVA6Cj4gPiArCQlpZiAoKHZhbHVlICYgMHhmZikgPT0g Q0ZJX0NNRF9CTE9DS19FUkFTRV9DT05GSVJNKQo+ID4gKwkJCWJsb2NrX2VyYXNlX2NvbmZpcm0o c2ZkZXYsIGZhZGRyKTsKPiA+ICsJCWVsc2UKPiA+ICsJCQlzZmRldi0+c3IgfD0gMHgzMDsKPiA+ ICsKPiA+ICsJCXNmZGV2LT5zdGF0ZSA9IFJFQURZOwo+ID4gKwkJc2ZkZXYtPnJlYWRfbW9kZSA9 IFJFQURfU1RBVFVTOwo+ID4gKwkJZ290byBvdXRfdW5sb2NrOwo+ID4gKwl9Cj4gPiArCj4gPiAr CS8qIHdyaXRlIGNvbW1hbmRzIGluIFJFQURZIHN0YXRlICovCj4gPiArCXN3aXRjaCAodmFsdWUg JiAweEZGKSB7Cj4gPiArCWNhc2UgQ0ZJX0NNRF9SRUFEX0pFREVDOgo+ID4gKwkJc2ZkZXYtPnJl YWRfbW9kZSA9IFJFQURfREVWSUNFX0lEOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgQ0ZJX0NN RF9SRUFEX1NUQVRVU19SRUdJU1RFUjoKPiA+ICsJCXNmZGV2LT5yZWFkX21vZGUgPSBSRUFEX1NU QVRVUzsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIENGSV9DTURfUkVBRF9DRklfUVVFUlk6Cj4g PiArCQlzZmRldi0+cmVhZF9tb2RlID0gUkVBRF9RVUVSWTsKPiA+ICsJCWJyZWFrOwo+ID4gKwlj YXNlIENGSV9DTURfQ0xFQVJfU1RBVFVTX1JFR0lTVEVSOgo+ID4gKwkJc2ZkZXYtPnNyID0gMHg4 MDsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIENGSV9DTURfV09SRF9QUk9HUkFNX1NFVFVQOgo+ ID4gKwljYXNlIENGSV9DTURfQUxURVJOQVRFX1dPUkRfUFJPR1JBTV9TRVRVUDoKPiA+ICsJCXNm ZGV2LT5zdGF0ZSA9IFdQX1NFVFVQOwo+ID4gKwkJc2ZkZXYtPnJlYWRfbW9kZSA9IFJFQURfU1RB VFVTOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgQ0ZJX0NNRF9MT0NLX0JMT0NLX1NFVFVQOgo+ ID4gKwkJc2ZkZXYtPnN0YXRlID0gTE9DS19TRVRVUDsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNl IENGSV9DTURfQkxPQ0tfRVJBU0VfU0VUVVA6Cj4gPiArCQlzZmRldi0+c3RhdGUgPSBFUkFTRV9T RVRVUDsKPiA+ICsJCXNmZGV2LT5yZWFkX21vZGUgPSBSRUFEX1NUQVRVUzsKPiA+ICsJCWJyZWFr Owo+ID4gKwljYXNlIENGSV9DTURfQlVGRkVSRURfUFJPR1JBTV9TRVRVUDoKPiA+ICsJCWJ1ZmZl cl9zZXR1cChzZmRldik7Cj4gPiArCQlzZmRldi0+c3RhdGUgPSBCUF9TRVRVUDsKPiA+ICsJCXNm ZGV2LT5yZWFkX21vZGUgPSBSRUFEX1NUQVRVUzsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIENG SV9DTURfQlVGRkVSRURfUFJPR1JBTV9DT05GSVJNOgo+ID4gKwkJcHJfZGVidWcoIkNGSSBmbGFz aDogdW5leHBlY3RlZCBjb25maXJtIGNvbW1hbmQgMHhEMCIpOwo+ID4gKwkJYnJlYWs7Cj4gPiAr CWRlZmF1bHQ6Cj4gPiArCQlwcl9kZWJ1ZygiQ0ZJIGZsYXNoOiB1bmtub3duIGNvbW1hbmQgMHgl eCIsIHZhbHVlKTsKPiA+ICsJCS8qIGZhbGwgdGhyb3VnaCAqLyAgCj4gCj4gQWJvdmUgKGluIHRo ZSByZWFkIGNhc2UpLCB5b3Ugd3JvdGUgaXQgImZhbGwtdGhyb3VnaCIuCgpHQ0MgaGFzIGEgbGlz dCBvZiBhbGxvd2VkIHNwZWxsaW5ncywgYW5kIGJvdGggdmVyc2lvbnMgYXJlIGluIGl0IDstKQpC dXQgc3VyZSB3aWxsIGZpeCB0aGlzIC4uLgogCj4gPiArCWNhc2UgQ0ZJX0NNRF9SRUFEX0FSUkFZ Ogo+ID4gKwkJc2ZkZXYtPnJlYWRfbW9kZSA9IFJFQURfQVJSQVk7Cj4gPiArCQlicmVhazsKPiA+ ICsJfQo+ID4gKwo+ID4gK291dF91bmxvY2s6Cj4gPiArCW11dGV4X3VubG9jaygmc2ZkZXYtPm11 dGV4KTsKPiA+ICt9ICAKPiAKPiBUaGUgZnVuY3Rpb24gaXMgaHVnZSBhbmQgY29tcGxpY2F0ZWQu IEhvdyBhYm91dCBzcGxpdHRpbmcgaXQgaW50byBhIHJlYWQgYW5kIHdyaXRlCj4gZnVuY3Rpb24s IGF0IHRoZSB2ZXJ5IGxlYXN0PwoKR29vZCBwb2ludC4gTG9va3MgbGlrZSAid3JpdGUgY29tbWFu ZCBpbiBSRUFEWSBzdGF0ZSIgc2hvdWxkIGJlIHNlcGFyYXRlIGFzIHdlbGwsIHNpbmNlIGl0J3Mg b25seSBkb2luZyBzdGF0ZSB0cmFuc2l0aW9ucy4KCj4gPiArCj4gPiArI2lmZGVmIENPTkZJR19I QVNfTElCRkRUCj4gPiArc3RhdGljIHZvaWQgZ2VuZXJhdGVfY2ZpX2ZsYXNoX2ZkdF9ub2RlKHZv aWQgKmZkdCwKPiA+ICsJCQkJCXN0cnVjdCBkZXZpY2VfaGVhZGVyICpkZXZfaGRyLAo+ID4gKwkJ CQkJdm9pZCAoKmdlbmVyYXRlX2lycV9wcm9wKSh2b2lkICpmZHQsCj4gPiArCQkJCQkJCQkgIHU4 IGlycSwKPiA+ICsJCQkJCQkJCWVudW0gaXJxX3R5cGUpKQo+ID4gK3sKPiA+ICsJc3RydWN0IGNm aV9mbGFzaF9kZXZpY2UgKnNmZGV2Owo+ID4gKwl1NjQgcmVnX3Byb3BbMl07Cj4gPiArCj4gPiAr CXNmZGV2ID0gY29udGFpbmVyX29mKGRldl9oZHIsIHN0cnVjdCBjZmlfZmxhc2hfZGV2aWNlLCBk ZXZfaGRyKTsKPiA+ICsJcmVnX3Byb3BbMF0gPSBjcHVfdG9fZmR0NjQoc2ZkZXYtPmJhc2VfYWRk cik7Cj4gPiArCXJlZ19wcm9wWzFdID0gY3B1X3RvX2ZkdDY0KHNmZGV2LT5zaXplKTsKPiA+ICsK PiA+ICsJX0ZEVChmZHRfYmVnaW5fbm9kZShmZHQsICJmbGFzaCIpKTsKPiA+ICsJX0ZEVChmZHRf cHJvcGVydHlfY2VsbChmZHQsICJiYW5rLXdpZHRoIiwgQ0ZJX0JVU19XSURUSCkpOwo+ID4gKwlf RkRUKGZkdF9wcm9wZXJ0eV9jZWxsKGZkdCwgIiNhZGRyZXNzLWNlbGxzIiwgMHgxKSk7Cj4gPiAr CV9GRFQoZmR0X3Byb3BlcnR5X2NlbGwoZmR0LCAiI3NpemUtY2VsbHMiLCAweDEpKTsKPiA+ICsJ X0ZEVChmZHRfcHJvcGVydHlfc3RyaW5nKGZkdCwgImNvbXBhdGlibGUiLCAiY2ZpLWZsYXNoIikp Owo+ID4gKwlfRkRUKGZkdF9wcm9wZXJ0eV9zdHJpbmcoZmR0LCAibGFiZWwiLCAiU3lzdGVtLWZp cm13YXJlIikpOwo+ID4gKwlfRkRUKGZkdF9wcm9wZXJ0eShmZHQsICJyZWciLCAmcmVnX3Byb3As IHNpemVvZihyZWdfcHJvcCkpKTsKPiA+ICsJX0ZEVChmZHRfZW5kX25vZGUoZmR0KSk7Cj4gPiAr fQo+ID4gKyNlbHNlCj4gPiArI2RlZmluZSBnZW5lcmF0ZV9jZmlfZmxhc2hfZmR0X25vZGUgTlVM TAo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgY2ZpX2ZsYXNoX2RldmljZSAq Y3JlYXRlX2ZsYXNoX2RldmljZV9maWxlKHN0cnVjdCBrdm0gKmt2bSwKPiA+ICsJCQkJCQkJIGNv bnN0IGNoYXIgKmZpbGVuYW1lKQo+ID4gK3sKPiA+ICsJc3RydWN0IGNmaV9mbGFzaF9kZXZpY2Ug KnNmZGV2Owo+ID4gKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOyAgCj4gCj4gSGVyZSB5b3UncmUgdXNp bmcgImJ1ZiIgYXMgc2hvcnRoYW5kIGZvciAiYnVmZmVyIiwgYnV0IGF0IHRoZSB0b3Agb2YgdGhl IGZpbGUKPiAoUFJPR1JBTV9CVUZGXyopIHlvdSB1c2UgImJ1ZmYiLgoKSSBndWVzcyBiZWNhdXNl IG9uZSB3YXMgd3JpdHRlbiBieSBtZSwgdGhlIG90aGVyIGJ5IFJhcGhhZWwgOy0pCldpbGwgY29u c29saWRhdGUgdGhpcy4KCj4gCj4gPiArCXVuc2lnbmVkIGludCB2YWx1ZTsKPiA+ICsJaW50IHJl dDsKPiA+ICsJaW50IGZkOwo+ID4gKwo+ID4gKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRXUik7 Cj4gPiArCWlmIChmZCA8IDApCj4gPiArCQlyZXR1cm4gRVJSX1BUUigtZXJybm8pOwo+ID4gKwlp ZiAoZnN0YXQoZmQsICZzdGF0YnVmKSA8IDApIHsKPiA+ICsJCWNsb3NlKGZkKTsKPiA+ICsJCXJl dHVybiBFUlJfUFRSKC1lcnJubyk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJc2ZkZXYgPSBtYWxsb2Mo c2l6ZW9mKHN0cnVjdCBjZmlfZmxhc2hfZGV2aWNlKSk7Cj4gPiArCWlmICghc2ZkZXYpIHsKPiA+ ICsJCWNsb3NlKGZkKTsKPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ID4gKwl9Cj4g PiArCj4gPiArCXNmZGV2LT5zaXplID0gKHN0YXRidWYuc3Rfc2l6ZSArIDQwOTUpICYgfjB4ZmZm VUw7Cj4gPiArCXNmZGV2LT5mbGFzaF9tZW1vcnkgPSBtbWFwKE5VTEwsIHN0YXRidWYuc3Rfc2l6 ZSwKPiA+ICsJCQkJICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKPiA+ICsJ CQkJICAgZmQsIDApOwo+ID4gKwlpZiAoc2ZkZXYtPmZsYXNoX21lbW9yeSA9PSBNQVBfRkFJTEVE KSB7Cj4gPiArCQljbG9zZShmZCk7Cj4gPiArCQlmcmVlKHNmZGV2KTsKPiA+ICsJCXJldHVybiBF UlJfUFRSKC1lcnJubyk7Cj4gPiArCX0KPiA+ICsJc2ZkZXYtPmJhc2VfYWRkciA9IEtWTV9GTEFT SF9NTUlPX0JBU0U7Cj4gPiArCXNmZGV2LT5zdGF0ZSA9IFJFQURZOwo+ID4gKwlzZmRldi0+cmVh ZF9tb2RlID0gUkVBRF9BUlJBWTsKPiA+ICsJc2ZkZXYtPnNyID0gMHg4MDsKPiA+ICsJc2ZkZXYt PnJjciA9IDB4YmZjZjsKPiA+ICsKPiA+ICsJdmFsdWUgPSByb3VuZHVwKG5yX2VyYXNlX2Jsb2Nr cyhzZmRldiksIEJJVFNfUEVSX0xPTkcpIC8gODsKPiA+ICsJc2ZkZXYtPmxvY2tfYm0gPSBtYWxs b2ModmFsdWUpOwo+ID4gKwltZW1zZXQoc2ZkZXYtPmxvY2tfYm0sIDAsIHZhbHVlKTsKPiA+ICsK PiA+ICsJc2ZkZXYtPmRldl9oZHIuYnVzX3R5cGUgPSBERVZJQ0VfQlVTX01NSU87Cj4gPiArCXNm ZGV2LT5kZXZfaGRyLmRhdGEgPSBnZW5lcmF0ZV9jZmlfZmxhc2hfZmR0X25vZGU7Cj4gPiArCW11 dGV4X2luaXQoJnNmZGV2LT5tdXRleCk7Cj4gPiArCXJldCA9IGRldmljZV9fcmVnaXN0ZXIoJnNm ZGV2LT5kZXZfaGRyKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJZnJlZShzZmRldi0+Zmxhc2hf bWVtb3J5KTsgIAo+IAo+IFRoYXQncyBzdHJhbmdlLCBJIHdyb3RlIGEgcXVpY2sgdGVzdCBmb3Ig dGhpcyBhbmQgZnJlZSdpbmcgYSBhIGZpbGUtYmFja2VkIG1tYXAnZWQKPiBtZW1vcnkgcmVzdWx0 ZWQgaW4gYSBzZWdtZW50YXRpb24gZmF1bHQuIERpZCB5b3UgbWVhbiBtdW5tYXA/CgpPdWNoLCBp bmRlZWQuIExvb2tzIGxpa2UgYSBsZWZ0b3ZlciBmcm9tIHRoZSBvcmlnaW5hbCBjb2RlLCB3aGlj aCB3YXMgdXNpbmcgbWFsbG9jKCkuCgo+IEFsc28sIGlmIG1tYXAnaW5nCj4gdGhlIGZsYXNoIGZh aWxzLCB5b3UgY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciwgd2hpY2ggeW91IGRvbid0IGRvIGhl cmUuIFRvIGJlCj4gaG9uZXN0LCBJIHRoaW5rIHRoZSBiZXN0IGFwcHJvYWNoIHdvdWxkIGJlIHRv IGFkZCBhbGwgdGhlIGNsZWFuaW5nIHVwwqAgYWZ0ZXIgdGhlCj4gcmV0dXJuIHN0YXRlbWVudCBh bmQgYSBzZXJpZXMgb2YgbGFiZWxzIHRvIGp1bXAgdG8gZGVwZW5kaW5nIHdoZXJlIHlvdSBnb3Qg YW4KPiBlcnJvciAoc2ltaWxhciB0byB2aXJ0aW9fX3BjaV9pbml0KS4KClllYWgsIGl0IGxvb2tz IG11Y2ggYmV0dGVyIG5vdyB0aGF0IHdheS4KCj4gCj4gPiArCQlmcmVlKHNmZGV2KTsKPiA+ICsJ CXJldHVybiBFUlJfUFRSKHJldCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0ga3ZtX19yZWdp c3Rlcl9tbWlvKGt2bSwKPiA+ICsJCQkJIHNmZGV2LT5iYXNlX2FkZHIsIHNmZGV2LT5zaXplLAo+ ID4gKwkJCQkgZmFsc2UsIGNmaV9mbGFzaF9tbWlvLCBzZmRldik7Cj4gPiArCWlmIChyZXQpIHsK PiA+ICsJCWRldmljZV9fdW5yZWdpc3Rlcigmc2ZkZXYtPmRldl9oZHIpOwo+ID4gKwkJZnJlZShz ZmRldi0+Zmxhc2hfbWVtb3J5KTsKPiA+ICsJCWZyZWUoc2ZkZXYpOwo+ID4gKwkJcmV0dXJuIEVS Ul9QVFIocmV0KTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gc2ZkZXY7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgZmxhc2hfX2luaXQoc3RydWN0IGt2bSAqa3ZtKQo+ID4gK3sKPiA+ ICsJc3RydWN0IGNmaV9mbGFzaF9kZXZpY2UgKnNmZGV2Owo+ID4gKwo+ID4gKwlpZiAoIWt2bS0+ Y2ZnLmZsYXNoX2ZpbGVuYW1lKQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCXNmZGV2ID0g Y3JlYXRlX2ZsYXNoX2RldmljZV9maWxlKGt2bSwga3ZtLT5jZmcuZmxhc2hfZmlsZW5hbWUpOwo+ ID4gKwlpZiAoSVNfRVJSKHNmZGV2KSkKPiA+ICsJCXJldHVybiBQVFJfRVJSKHNmZGV2KTsKPiA+ ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gK2Rldl9pbml0KGZsYXNoX19pbml0KTsKPiA+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9rdm0tY29uZmlnLmggYi9pbmNsdWRlL2t2bS9rdm0t Y29uZmlnLmgKPiA+IGluZGV4IGEwNTJiMGJjLi5mNGE4YjgzMSAxMDA2NDQKPiA+IC0tLSBhL2lu Y2x1ZGUva3ZtL2t2bS1jb25maWcuaAo+ID4gKysrIGIvaW5jbHVkZS9rdm0va3ZtLWNvbmZpZy5o Cj4gPiBAQCAtMzUsNiArMzUsNyBAQCBzdHJ1Y3Qga3ZtX2NvbmZpZyB7Cj4gPiAgCWNvbnN0IGNo YXIgKnZtbGludXhfZmlsZW5hbWU7Cj4gPiAgCWNvbnN0IGNoYXIgKmluaXRyZF9maWxlbmFtZTsK PiA+ICAJY29uc3QgY2hhciAqZmlybXdhcmVfZmlsZW5hbWU7Cj4gPiArCWNvbnN0IGNoYXIgKmZs YXNoX2ZpbGVuYW1lOwo+ID4gIAljb25zdCBjaGFyICpjb25zb2xlOwo+ID4gIAljb25zdCBjaGFy ICpkZXY7Cj4gPiAgCWNvbnN0IGNoYXIgKm5ldHdvcms7Cj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9rdm0vdXRpbC5oIGIvaW5jbHVkZS9rdm0vdXRpbC5oCj4gPiBpbmRleCA0Y2E3YWE5My4uNWMz N2YwYjcgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNsdWRlL2t2bS91dGlsLmgKPiA+ICsrKyBiL2luY2x1 ZGUva3ZtL3V0aWwuaAo+ID4gQEAgLTEwNCw2ICsxMDQsMTEgQEAgc3RhdGljIGlubGluZSB1bnNp Z25lZCBsb25nIHJvdW5kdXBfcG93X29mX3R3byh1bnNpZ25lZCBsb25nIHgpCj4gPiAgCXJldHVy biB4ID8gMVVMIDw8IGZsc19sb25nKHggLSAxKSA6IDA7Cj4gPiAgfQo+ID4gIAo+ID4gK3N0YXRp YyBpbmxpbmUgaW50IHBvdzJfc2l6ZSh1bnNpZ25lZCBsb25nIHgpCj4gPiArewo+ID4gKwlyZXR1 cm4gKHNpemVvZih4KSAqIDgpIC0gX19idWlsdGluX2NsemwoeCAtIDEpOwo+ID4gK30gIAo+IAo+ IEZvciB0aGUgbGlmZSBvZiBtZSBJIGNhbid0IHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9u IGlzIHN1cHBvc2VkIHRvIGRvLiBBbHNvLAo+IGZyb20gdGhlIGdjYyBvbmxpbmUgZG9jczoKClRo ZSBpZGVhIGlzIHRvIGRldGVybWluZSB0aGUgIm51bWJlciBvZiBhZGRyZXNzIGJpdHMgbmVlZGVk IHRvIGNvdmVyIHggYnl0ZXMgb2YgbWVtb3J5Iiwgd2hpY2ggaXMgc29tZXRoaW5nIHRoYXQgaXMg d2VsbCBrbm93biBvbiBhY3R1YWwgaGFyZHdhcmUuIEkgd2lsbCBhZGQgYSBjb21tZW50LgogCj4g IlJldHVybnMgdGhlIG51bWJlciBvZiBsZWFkaW5nIDAtYml0cyBpbiB4LCBzdGFydGluZyBhdCB0 aGUgbW9zdCBzaWduaWZpY2FudCBiaXQKPiBwb3NpdGlvbi4gSWYgeGlzIDAsIHRoZSByZXN1bHQg aXMgdW5kZWZpbmVkLiIKPiAKPiB5b3UgbWlnaHQgd2FudCB0byBhZGQgYSBzcGVjaWFsIGNhc2Ug Zm9yIHggPT0gMS4KCkdvb2QgcG9pbnQsIGFsdGhvdWdoIGluIG91ciBjYXNlIHRoZSBpbnB1dCB2 YWx1ZSBpcyBhbHdheXMgYXQgbGVhc3QgMjA0OC4gQnV0IDAgaXNuJ3QgY292ZXJlZCBhcyB3ZWxs IGFuZCBhbHNvIEkgbW92ZWQgdGhpcyB0byBnZW5lcmljIGNvZGUsIHNvIHdpbGwgZml4IGl0LgoK Q2hlZXJzLApBbmRyZQoKPiAKPiBUaGFua3MsCj4gQWxleAo+ID4gKwo+ID4gIHN0cnVjdCBrdm07 Cj4gPiAgdm9pZCAqbW1hcF9odWdldGxiZnMoc3RydWN0IGt2bSAqa3ZtLCBjb25zdCBjaGFyICpo dGxiZnNfcGF0aCwgdTY0IHNpemUpOwo+ID4gIHZvaWQgKm1tYXBfYW5vbl9vcl9odWdldGxiZnMo c3RydWN0IGt2bSAqa3ZtLCBjb25zdCBjaGFyICpodWdldGxiZnNfcGF0aCwgdTY0IHNpemUpOyAg CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgt YXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJt LWtlcm5lbAo=