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=-3.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,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 92A89C48BD7 for ; Thu, 27 Jun 2019 16:16:18 +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 668CE20659 for ; Thu, 27 Jun 2019 16:16:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="e41qb7DZ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 668CE20659 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=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=3gKQGeXJ7bPbrtPrA+jTzxH6QQWXmCGoX9ZzqLlwb6I=; b=e41qb7DZhxh5C/ EGIYZ+zY2cQxuYmZCjDYQOpQUY+tqmmGgch8GtT9T0eO+FXli0C6Xma4AmzQ1k6YsDo6Emww1tV6F OMs+VFB3YrSn+owEW5tuowNE0wLZEKc31RU2KLQZ50ttXu0jXYGQMHZPU/ulcS2wIT75V1nW2041T G8HxE+Y2rHykp55YItzpDL8Ui52jRDtUH3gS47IzqN/1c7/0pTVMoNoG7cN8dAesdbLuYcmJY3VtF mNag6kTIDDudWsnItyv1MCh5BRpOMAR5PPdCqwakcdYgj7mC57An4cnFSp5IRg3S5ml8yssQEbhCx 3sQtEhmZdICCRxLl4w3w==; 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 1hgX4I-0000iM-C1; Thu, 27 Jun 2019 16:16:14 +0000 Received: from relay1-d.mail.gandi.net ([217.70.183.193]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hgX4D-0000h1-Tq for linux-mtd@lists.infradead.org; Thu, 27 Jun 2019 16:16:12 +0000 X-Originating-IP: 91.224.148.103 Received: from xps13 (unknown [91.224.148.103]) (Authenticated sender: miquel.raynal@bootlin.com) by relay1-d.mail.gandi.net (Postfix) with ESMTPSA id D671A240005; Thu, 27 Jun 2019 16:15:45 +0000 (UTC) Date: Thu, 27 Jun 2019 18:15:42 +0200 From: Miquel Raynal To: Piotr Sroka Subject: Re: [PATCH v2 1/2] mtd: nand: Add Cadence NAND controller driver Message-ID: <20190627181542.131aa061@xps13> In-Reply-To: <20190606151948.GA10565@global.cadence.com> References: <20190219161406.4340-1-piotrs@cadence.com> <20190219161823.22466-1-piotrs@cadence.com> <20190305190954.6c38d681@xps13> <20190321093356.GA19577@global.cadence.com> <20190512142426.11453a6c@xps13> <20190606151948.GA10565@global.cadence.com> Organization: Bootlin X-Mailer: Claws Mail 3.17.1 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190627_091610_286698_12081186 X-CRM114-Status: GOOD ( 43.01 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Arnd Bergmann , Boris Brezillon , Marcel Ziswiler , Richard Weinberger , linux-kernel@vger.kernel.org, Stefan Agner , Marek Vasut , Paul Burton , Geert Uytterhoeven , linux-mtd@lists.infradead.org, Dmitry Osipenko , Brian Norris , David Woodhouse Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGkgUGlvdHIsCgpQaW90ciBTcm9rYSA8cGlvdHJzQGNhZGVuY2UuY29tPiB3cm90ZSBvbiBUaHUs IDYgSnVuIDIwMTkgMTY6MTk6NTEKKzAxMDA6Cgo+IEhpIE1pcXVlbAo+IAo+IAo+IFRoZSAwNS8x Mi8yMDE5IDE0OjI0LCBNaXF1ZWwgUmF5bmFsIHdyb3RlOgo+ID5FWFRFUk5BTCBNQUlMCj4gPgo+ ID4KPiA+RVhURVJOQUwgTUFJTAo+ID4KPiA+Cj4gPkhpIFBpb3RyLAo+ID4KPiA+U29ycnkgZm9y IGRlIGRlbGF5Lgo+ID4KPiA+UGlvdHIgU3Jva2EgPHBpb3Ryc0BjYWRlbmNlLmNvbT4gd3JvdGUg b24gVGh1LCAyMSBNYXIgMjAxOSAwOTozMzo1OAo+ID4rMDAwMDoKPiA+ICAKPiA+PiBUaGUgMDMv MDUvMjAxOSAxOTowOSwgTWlxdWVsIFJheW5hbCB3cm90ZTogIAo+ID4+ID5FWFRFUk5BTCBNQUlM Cj4gPj4gPgo+ID4+ID4KPiA+PiA+SGkgUGlvdHIsCj4gPj4gPgo+ID4+ID5QaW90ciBTcm9rYSA8 cGlvdHJzQGNhZGVuY2UuY29tPiB3cm90ZSBvbiBUdWUsIDE5IEZlYiAyMDE5IDE2OjE4OjIzCj4g Pj4gPiswMDAwOgo+ID4+ID4gIAo+ID4+ID4+IFRoaXMgcGF0Y2ggYWRkcyBkcml2ZXIgZm9yIENh ZGVuY2UgSFBORkMgTkFORCBjb250cm9sbGVyLgo+ID4+ID4+Cj4gPj4gPj4gU2lnbmVkLW9mZi1i eTogUGlvdHIgU3Jva2EgPHBpb3Ryc0BjYWRlbmNlLmNvbT4KPiA+PiA+PiAtLS0KPiA+PiA+PiBD aGFuZ2VzIGZvciB2MjoKPiA+PiA+PiAtIGNyZWF0ZSBvbmUgdW5pdmVyc2FsIHdhaXQgZnVuY3Rp b24gZm9yIGFsbCBldmVudHMgaW5zdGVhZCBvZiBvbmUKPiA+PiA+PiAgIGZ1bmN0aW9uIHBlciBl dmVudC4KPiA+PiA+PiAtIHNwbGl0IG9uZSBiaWcgZnVuY3Rpb24gZXhlY3V0aW5nIG5hbmQgb3Bl cmF0aW9ucyB0byBzZXBhcmF0ZQo+ID4+ID4+ICAgZnVuY3Rpb25zIG9uZSBwZXIgZWFjaCB0eXBl IG9mIG9wZXJhdGlvbi4KPiA+PiA+PiAtIGFkZCBlcmFzZSBhdG9taWMgb3BlcmF0aW9uIHRvIG5h bmQgb3BlcmF0aW9uIHBhcnNlcgo+ID4+ID4+IC0gcmVtb3ZlIHVubmVjZXNzYXJ5IGluY2x1ZGVz Lgo+ID4+ID4+IC0gcmVtb3ZlIHVudXNlZCByZWdpc3RlciBkZWZpbmVzCj4gPj4gPj4gLSBhZGQg c3VwcG9ydCBmb3IgbXVsdGlwbGUgbmFuZCBjaGlwcwo+ID4+ID4+IC0gcmVtb3ZlIGFsbCBjb2Rl IHVzaW5nIGxlZ2FjeSBmdW5jdGlvbnMKPiA+PiA+PiAtIHJlbW92ZSBjaGlwIGRlcGVuZGVudHMg cGFyYW1ldGVycyBmcm9tIGR0cyBiaW5kaW5ncywgdGhleSB3ZXJlCj4gPj4gPj4gICBhdHRhY2hl ZCB0byB0aGUgU29DIHNwZWNpZmljIGNvbXBhdGlibGUgYXQgdGhlIGRyaXZlciBsZXZlbAo+ID4+ ID4+IC0gc2ltcGxpZnkgaW50ZXJydXB0IGhhbmRsaW5nCj4gPj4gPj4gLSBzaW1wbGlmeSB0aW1p bmcgY2FsY3VsYXRpb25zCj4gPj4gPj4gLSBmaXggY2FsY3VsYXRpb24gb2YgbWF4aW11bSBzdXBw b3J0ZWQgY3Mgc2lnbmFscwo+ID4+ID4+IC0gc2ltcGxpZnkgZWNjIHNpemUgY2FsY3VsYXRpb24K PiA+PiA+PiAtIHJlbW92ZSBoZWFkZXIgZmlsZSBhbmQgcHV0IHdob2xlIGNvZGUgdG8gb25lIGMg ZmlsZQo+ID4+ID4+IC0tLQo+ID4+ID4+ICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnICAg ICAgICAgICAgICAgICAgIHwgICAgOCArCj4gPj4gPj4gIGRyaXZlcnMvbXRkL25hbmQvcmF3L01h a2VmaWxlICAgICAgICAgICAgICAgICAgfCAgICAxICsKPiA+PiA+PiAgZHJpdmVycy9tdGQvbmFu ZC9yYXcvY2FkZW5jZS1uYW5kLWNvbnRyb2xsZXIuYyB8IDMyODggKysrKysrKysrKysrKysrKysr KysrKysrICAKPiA+PiA+Cj4gPj4gPlRoaXMgZHJpdmVyIGlzIHdheSB0b28gbWFzc2l2ZSwgSSBh bSBwcmV0dHkgc3VyZSBpdCBjYW4gc2hyaW5rIGEKPiA+PiA+bGl0dGxlIGJpdCBtb3JlLgo+ID4+ ID5bLi4uXQo+ID4+ID4gIAo+ID4+IEkgd2lsbCB0cnkgdG8gbWFrZSBpdCBzaG9yZXIgYnV0IGl0 IHdpbGwgYmUgZGlmdWN1bHQgdG8gYWNoaXZlLiBJdCBpcyBiZWNhdXNlIC0gdGhlcmUgYXJlIGEg bG90IG9mIGNhbGN1bGF0aW9uIG5lZWRlZCBmb3IgUEhZICAgICAgLSBFQ0MgYXJlIGludGVybGVh dmVkIHdpdGggZGF0YSAobGlrZSBvbiBtYXJ2ZWxsLW5hbmQgb3IgZ3BtaS1uYW5kKS4KPiA+PiAg ICBUaGVyZWZvcmU6ICAgICsgUkFXIG1vZGUgaXMgY29tcGxpY2F0ZWQgICAgKyBwcm90ZWN0aW5n IEJCTSBpbmNyZWFzZXMgbnVtYmVyIG9mIGxpbmVzIG9mIHNvdXJjZSBjb2RlCj4gPj4gLSBuZWVk IHRvIHN1cHBvcnQgdHdvIERNQSBlbmdpbmVzIGludGVybmFsIGFuZCBleHRlcm5hbCAoc2xhdmUp IFdlIHdpbGwgc2VlIG9uIG5leHQgcGF0Y2ggdmVyc2lvbiB3aGF0IGlzIHRoZSByZXN1bHQuICAg ICAgVGhhdCBwYWdlIGxheW91dCBsb29rczogIAo+ID4KPiA+TWF5YmUgeW91IGRvbid0IG5lZWQg dG8gc3VwcG9ydCBib3RoIGludGVybmFsIGFuZCBleHRlcm5hbCBETUE/Cj4gPgo+ID5JIGFtIHBy ZXR0eSBzdXJlIHRoZXJlIGFyZSByb29tcyBmb3Igc2l6ZSByZWR1Y3Rpb24uICAKPiAKPiBJIGRl c2NyaWJlIGhvdyBpdCB3b3JrcyBpbiBnZW5lcmFsIGFuZCBtYXliZSB5b3UgaGVscCBtZSBjaG9z ZSBiZXR0ZXIgc29sdXRpb24uCj4gCj4gSFcgY29udHJvbGxlciBjYW4gd29yayBpbiAzIG1vZGVz LiBQSU8gLSBjYW4gd29yayBpbiBtYXN0ZXIgb3Igc2xhdmUgRE1BCj4gQ0RNQSAtIG5lZWRzIE1h c3RlciBETUEgZm9yIGFjY2Vzc2luZyBjb21tYW5kIGRlc2NyaXB0b3JzLgo+IEdlbmVyaWMgbW9k ZSAtIGNhbiB1c2Ugb25seSBTbGF2ZSBETUEuCj4gCj4gR2VuZXJpYyBtb2RlIGlzIG5lY2Nlc3Nl cnkgdG8gaW1wbGVtZW50IGZ1bmN0aW9ucyBvdGhlciB0aGFuIHBhZ2UKPiBwcm9ncmFtLCBwYWdl IHJlYWQsIGJsb2NrIGVyYXNlLiBTbyBpdCBpcyBlc3NlbnRpYWwuIEkgY2Fubm90IGF2b2lkCj4g dG8gdXNlIFNsYXZlIERNQS4KClRoaXMgZGVzZXJ2ZXMgYSBuaWNlIGNvbW1lbnQgYXQgdGhlIHRv cC4KCj4gCj4gSSBjaGFuZ2UgQ0RNQSBtb2RlIHRvIFBJTyBtb2RlLiBUaGVuIEkgY2FuIHVzZSBv bmx5IHNsYXZlIERNQS4gQnV0IENETUEgaGFzIGEgZmVhdHVyZSB3aGljaCBpcyBub3QgcHJlc2Vu dCBpbiBQSU8gbW9kZS4gVGhlIGZlYXR1cmUKPiBnaXZlcyBwb3NzaWJpbGl0eSB0byBwb2ludCBE TUEgZW5naW5lIHR3byBidWZmZXJzIHRvIHRyYW5zZmVyLiBJdCBpcwo+IHVzZWQgdG8gcG9pbnQg ZGF0YSBidWZmZXIgYW5kIG9vYiBidWZlci4gSW4gUElPIG1vZGUgSSB3b3VsZCBuZWVkIHRvCj4g Y29weSBkYXRhIGJ1ZmZlciBhbmQgb29iIGJ1ZmZlciB0byB0aGlyZCBidWZmZXIuIE5leHQgdHJh bnNmZXIgZGF0YSBmcm9tCj4gdGhpcmQgYnVmZmVyLgo+IEluIHRoYXQgc29sdXRpb24gd2UgbmVl ZCB0byBjb3B5IGFsbCBkYXRhIGJ5IENQVSBhbmQgdGhlbiB1c2UgRE1BLiAgQ29udHJvbGxlciBu ZWVkcyBhbHdheXMgdHJhbnNmZXIgb29iIGJlY2F1c2Ugb2YgSFcgRUNDIHJlc3RyaWN0aW9ucy4g U3VjaCBjaGFuZ2Ugd2lsbCBkZWNyZWFzZSBwZXJmb3JtY2UgZm9yIGFsbCBkYXRhIHRyYW5zZmVy cy4KPiBJIHRoaW5rIHBlcmZvcm1hbmNlIGlzIG1vcmUgaW1wb3J0YW50IGluIHRoYXQgY2FzZS4g V2hhdCBpcyB5b3VyCj4gb3Bpbmlvbj8gWy4uLl0KCkluZGVlZAoKPiA+PiA+Cj4gPj4gPldoYXQg aXMgdGhpcyBmb3I/ICAKPiA+PiBGdWNudGlvbnMgZW5hYmxlcy9kaXNhYmxlcyBoYXJkd2FyZSBk ZXRlY3Rpb24gb2YgZXJhc2VkIGRhdGEKPiA+PiBwYWdlcy4gPiAgCj4gPgo+ID5PaywgdGhlIG5h bWUgaXMgbm90IHZlcnkgZXhwbGljaXQgLCBtYXliZSB5b3UgY291bGQgdGVsbCB0aGlzIHdpdGgg YQo+ID5jb21tZW50Lgo+ID4gIAo+IE9rLgo+IAo+ID4+ID4+ICsKPiA+PiA+PiArLyogaGFyZHdh cmUgaW5pdGlhbGl6YXRpb24gKi8KPiA+PiA+PiArc3RhdGljIGludCBjYWRlbmNlX25hbmRfaHdf aW5pdChzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNfY3RybCkKPiA+PiA+PiArewo+ID4+ID4+ ICsJaW50IHN0YXR1cyA9IDA7Cj4gPj4gPj4gKwl1MzIgcmVnOwo+ID4+ID4+ICsKPiA+PiA+PiAr CXN0YXR1cyA9IGNhZGVuY2VfbmFuZF93YWl0X2Zvcl92YWx1ZShjZG5zX2N0cmwsIENUUkxfU1RB VFVTLAo+ID4+ID4+ICsJCQkJCSAgICAgMTAwMDAwMCwKPiA+PiA+PiArCQkJCQkgICAgIENUUkxf U1RBVFVTX0lOSVRfQ09NUCwgZmFsc2UpOwo+ID4+ID4+ICsJaWYgKHN0YXR1cykKPiA+PiA+PiAr CQlyZXR1cm4gc3RhdHVzOwo+ID4+ID4+ICsKPiA+PiA+PiArCXJlZyA9IHJlYWRsKGNkbnNfY3Ry bC0+cmVnICsgQ1RSTF9WRVJTSU9OKTsKPiA+PiA+PiArCj4gPj4gPj4gKwlkZXZfaW5mbyhjZG5z X2N0cmwtPmRldiwKPiA+PiA+PiArCQkgIiVzOiBjYWRlbmNlIG5hbmQgY29udHJvbGxlciB2ZXJz aW9uIHJlZyAleFxuIiwKPiA+PiA+PiArCQkgX19mdW5jX18sIHJlZyk7Cj4gPj4gPj4gKwo+ID4+ ID4+ICsJLyogZGlzYWJsZSBjYWNoZSBhbmQgbXVsdGlwbGFuZSAqLwo+ID4+ID4+ICsJd3JpdGVs KDAsIGNkbnNfY3RybC0+cmVnICsgTVVMVElQTEFORV9DRkcpOwo+ID4+ID4+ICsJd3JpdGVsKDAs IGNkbnNfY3RybC0+cmVnICsgQ0FDSEVfQ0ZHKTsKPiA+PiA+PiArCj4gPj4gPj4gKwkvKiBjbGVh ciBhbGwgaW50ZXJydXB0cyAqLwo+ID4+ID4+ICsJd3JpdGVsKDB4RkZGRkZGRkYsIGNkbnNfY3Ry bC0+cmVnICsgSU5UUl9TVEFUVVMpOwo+ID4+ID4+ICsKPiA+PiA+PiArCWNhZGVuY2VfbmFuZF9n ZXRfY2FwcyhjZG5zX2N0cmwpOwo+ID4+ID4+ICsJY2FkZW5jZV9uYW5kX3JlYWRfYmNoX2NmZyhj ZG5zX2N0cmwpOyAgCj4gPj4gPgo+ID4+ID5ObywgeW91IGNhbm5vdCByZWx5IG9uIHRoZSBib290 bG9hZGVyJ3MgY29uZmlndXJhdGlvbi4gQW5kIEkgc3VwcG9zZQo+ID4+ID50aGlzIGlzIHdoYXQg dGhlIGZpcnN0IGNhbGwgdG8gcmVhZF9iY2hfY2ZnIGRvZXM/ICAKPiA+PiBJIGRvIG5vdCByZWFs eSBvbiBib290IGxvYWRlci4gSnVzdCByZWFkIE5BTkQgZmxhc2gKPiA+PiBjb250cm9sbGVyIGNv bmZpZ3VyYXRpb24gZnJvbSByZWFkIG9ubHkgY2FwYWJpbGl0aWVzIHJlZ2lzdGVycy4gIAo+ID4K PiA+T2ssIGlmIHRoZXNlIGFyZSBSTyByZWdpc3RlcnMsIGl0J3MgZmluZS4gQnV0IG1heWJlIGRv bid0IGNhbGwgdGhlCj4gPmZ1bmN0aW9uICJyZWFkIGJjaCBjb25maWciIHdoaWNoIHN1Z2dlc3Qg dGhhdCB0aGlzIGlzIHNvbWV0aGluZyB5b3UgY2FuCj4gPmNoYW5nZS4KPiA+ICAKPiBvay4KPiAK PiA+Pgo+ID4+ICAKPiA+PiA+PiArCj4gPj4gPj4gKyNkZWZpbmUgVFRfT09CX0FSRUEJCTEKPiA+ PiA+PiArI2RlZmluZSBUVF9NQUlOX09PQl9BUkVBUwkyCj4gPj4gPj4gKyNkZWZpbmUgVFRfUkFX X1BBR0UJCTMKPiA+PiA+PiArI2RlZmluZSBUVF9CQk0JCQk0Cj4gPj4gPj4gKyNkZWZpbmUgVFRf TUFJTl9PT0JfQVJFQV9FWFQJNQo+ID4+ID4+ICsKPiA+PiA+PiArLyogcHJlcGFyZSBzaXplIG9m IGRhdGEgdG8gdHJhbnNmZXIgKi8KPiA+PiA+PiArc3RhdGljIGludAo+ID4+ID4+ICtjYWRlbmNl X25hbmRfcHJlcGFyZV9kYXRhX3NpemUoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKPiA+PiA+PiAr CQkJICAgICAgIGludCB0cmFuc2Zlcl90eXBlKQo+ID4+ID4+ICt7Cj4gPj4gPj4gKwlzdHJ1Y3Qg Y2Ruc19uYW5kX2N0cmwgKmNkbnNfY3RybCA9IHRvX2NkbnNfbmFuZF9jdHJsKGNoaXAtPmNvbnRy b2xsZXIpOwo+ID4+ID4+ICsJc3RydWN0IGNkbnNfbmFuZF9jaGlwICpjZG5zX2NoaXAgPSB0b19j ZG5zX25hbmRfY2hpcChjaGlwKTsKPiA+PiA+PiArCXUzMiBzZWNfc2l6ZSA9IDAsIGxhc3Rfc2Vj X3NpemUsIG9mZnNldCA9IDAsIHNlY19jbnQgPSAxOwo+ID4+ID4+ICsJdTMyIGVjY19zaXplID0g Y2hpcC0+ZWNjLmJ5dGVzOwo+ID4+ID4+ICsJdTMyIGRhdGFfY3RybF9zaXplID0gMDsKPiA+PiA+ PiArCXUzMiByZWcgPSAwOwo+ID4+ID4+ICsKPiA+PiA+PiArCWlmIChjZG5zX2N0cmwtPmN1cnJf dHJhbnNfdHlwZSA9PSB0cmFuc2Zlcl90eXBlKQo+ID4+ID4+ICsJCXJldHVybiAwOwo+ID4+ID4+ ICsKPiA+PiA+PiArCXN3aXRjaCAodHJhbnNmZXJfdHlwZSkgeyAgCj4gPj4gPgo+ID4+ID5QbGVh c2UgdHVybiB0aGUgY29udHJvbGxlciBkcml2ZXIgYXMgZHVtYiBhcyBwb3NzaWJsZS4gWW91IHNo b3VsZCBub3QKPiA+PiA+Y2FyZSB3aGljaCBwYXJ0IG9mIHRoZSBPT0IgYXJlYSB5b3UgYXJlIGFj Y2Vzc2luZy4gIAo+ID4+IEl0IGlzIGEgYml0IGNvbmZ1c2luZyBmb3IgbWUgaG93IGFjY2Vzc2lu ZyBPT0Igc2hvdWxkIGJlIGltcGxlbWVudGVkLgo+ID4+IEkga25vdyB0aGF0IHJlYWRfb29iIGZ1 bmN0aW9uIGlzIGNhbGxlZCB0byBjaGVjayBCQk0gdmFsdWUgd2hlbiBCQlQgaXMKPiA+PiBpbml0 aWFsaXplZC4gSXQgaXMgYWxzbyBhIGJpdCBjb25mdXNpbmcgZm9yIG1lIHdoeSB0aGUgcmF3IHZl cnNpb24gaXMKPiA+PiBub3QgdXNlZCBmb3IgdGhhdCBwdXJwb3NlLiAgICBJbiBjdXJyZW50IGlt cGxlbWVudGF0aW9uIGlmIHlvdSB3cml0ZSBvb2IgYnkgd3JpdGVfcGFnZSBmdW5jdGlvbiBuZXh0 Cj4gPj4gcmVhZCBvb2IgYnkgcmVhZF9vb2IgZnVuY3Rpb24gdGhlbiBkYXRhIHdpbGwgYmUgdGhl IHNhbWUuCj4gPj4gSWYgSSBpbXBsZW1lbnQgZHVtcCBmdW5jdGlvbnMgcmVhZF9vb2IgYW5kIHdy aXRlX29vYiB0aGVuCj4gPj4gMS4gRUNDIG11c3QgYmUgZGlzYWJsZWQgZm9yIHRoZXNlIGZ1bmN0 aW9ucwo+ID4+IDIuIG9vYiBkYXRhIGFjY2Vzc2luZyBieSB3cml0ZV9wYWdlL3JlYWRfcGFnZSB3 aWxsIGJlIGRpZmZlcmVudAo+ID4+ICAgIChkaWZmZXJlbnQgb2Zmc2V0cykgdGhhdCB0aGUgZGF0 YSBhY2Nlc3NpbmcgYnkgcmVhZF9vb2Ivd3JpdGVfb29iCj4gPj4gICAgZnVuY3Rpb25zICAKPiA+ Cj4gPk5vLCBJIGZlYXIgdGhpcyBpcyBub3QgYWNjZXB0YWJsZS4KPiA+ICAKPiA+PiBJZiAgYWJv dmUgZGVzY3JpYmVkICJmdW5jdGlvbmFsaXRpZXMiIGFyZSBhY2NlcHRhYmxlIEkgd2lsbCBjaGFu Z2UgaW1wbGVtZW50YXRpb24gb2Ygd3JpdGVfb29iIGFuZCByZWFkX29vYiBmdW5jdGlvbnMuCj4g Pj4gVGhlIHdyaXRlX3BhZ2UgYW5kIHJlYWRfcGFnZSBtdXN0IGJlIGltcGxlbWVudGVkIGluIHRo YXQgd2F5IGFzIGl0IGlzIG5vdy4gICAgTGV0IG1lIGtub3cgd2hpY2ggc29sdXRpb24gaXMgcHJl ZmZlcmVkLiAgCj4gPgo+ID5JZiB0aGlzIGlzIHRvbyBjb21wbGljYXRlZCB0byBqdXN0IHdyaXRl IHRoZSBvb2IsIHdoeSBub3QgZmFsbGJhY2sgb24KPiA+cmVhZC93cml0ZV9wYWdlICh3aXRoIG9v Yl9yZXF1aXJlZCBhbmQgYSBkdW1teSBkYXRhIGJ1ZmZlcik/ICAKPiAKPiBJIGNvbnNpZGVyZWQg aXQuIEFjdHVhbGx5LCBpdCB3b3VsZCBzaW1wbGlmeSB0aGUgY29kZS4gVGhlIGRpc2FkdmFudGFn ZQo+IG9mIHVzaW5nIHRoZSBzYW1lIGZ1bmN0aW9uIGlzIHRoYXQgdGhlIGVhY2ggd3JpdGUvcmVh ZCBvb2Igd2lsbCBjYXVzZSBmdWxsIHBhZ2UKPiByZWFkL3dyaXRlLiBJbiBjdXJyZW50IHZlcnNp b24gb25seSBsYXN0IHNlY3RvciBpcyByZWFkL3dyaXRlIHRvZ2V0aGVyCj4gd2l0aCBvb2IuIFRo aXMgd2lsbCBhZmZlY3QgdGhlIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIG9mIG9vYiB3cml0ZS9y ZWFkIGZ1bmN0aW9uLiBTbyBJIGRvIG5vdCBrbm93IHdoYXQgaXMgbW9yZSBpbXBvcnRhbnQuIDEu IE9PQiBmdW5jdGlvbnMgcGVyZm9ybWFuY2UsCj4gMi4gc2ltcGxpZXIgY29kZS4KCkhvbmVzdGx5 IEkgZG9uJ3QgdGhpbmsgc2xvd2luZyBkb3duIGEgYml0IE9PQiBhY2Nlc3MgaXMgY3JpdGljYWwg YXMsCndpdGggcmVjZW50IHNvZnR3YXJlIGxheWVycyBsaWtlIFVCSS9VQklGUyB3ZSBkbyBub3Qg YWNjZXNzIE9PQiBvbmx5CnRoYXQgbXVjaC4gU28gaGVyZSBJIHdvdWxkIGNob29zZSAyLgoKPj4K PiA+PiA+PiArCWNhc2UgVFRfT09CX0FSRUE6Cj4gPj4gPj4gKwkJb2Zmc2V0ID0gY2Ruc19jaGlw LT5tYWluX3NpemUgLSBjZG5zX2NoaXAtPnNlY3Rvcl9zaXplOwo+ID4+ID4+ICsJCWVjY19zaXpl ID0gZWNjX3NpemUgKiAob2Zmc2V0IC8gY2Ruc19jaGlwLT5zZWN0b3Jfc2l6ZSk7Cj4gPj4gPj4g KwkJb2Zmc2V0ID0gb2Zmc2V0ICsgZWNjX3NpemU7Cj4gPj4gPj4gKwkJc2VjX2NudCA9IDE7Cj4g Pj4gPj4gKwkJbGFzdF9zZWNfc2l6ZSA9IGNkbnNfY2hpcC0+c2VjdG9yX3NpemUKPiA+PiA+PiAr CQkJKyBjZG5zX2NoaXAtPmF2YWlsX29vYl9zaXplOwo+ID4+ID4+ICsJCWJyZWFrOwo+ID4+ID4+ ICsJY2FzZSBUVF9NQUlOX09PQl9BUkVBX0VYVDoKPiA+PiA+PiArCQlzZWNfY250ID0gY2Ruc19j aGlwLT5zZWN0b3JfY291bnQ7Cj4gPj4gPj4gKwkJbGFzdF9zZWNfc2l6ZSA9IGNkbnNfY2hpcC0+ c2VjdG9yX3NpemU7Cj4gPj4gPj4gKwkJc2VjX3NpemUgPSBjZG5zX2NoaXAtPnNlY3Rvcl9zaXpl Owo+ID4+ID4+ICsJCWRhdGFfY3RybF9zaXplID0gY2Ruc19jaGlwLT5hdmFpbF9vb2Jfc2l6ZTsK PiA+PiA+PiArCQlicmVhazsKPiA+PiA+PiArCWNhc2UgVFRfTUFJTl9PT0JfQVJFQVM6Cj4gPj4g Pj4gKwkJc2VjX2NudCA9IGNkbnNfY2hpcC0+c2VjdG9yX2NvdW50Owo+ID4+ID4+ICsJCWxhc3Rf c2VjX3NpemUgPSBjZG5zX2NoaXAtPnNlY3Rvcl9zaXplCj4gPj4gPj4gKwkJCSsgY2Ruc19jaGlw LT5hdmFpbF9vb2Jfc2l6ZTsKPiA+PiA+PiArCQlzZWNfc2l6ZSA9IGNkbnNfY2hpcC0+c2VjdG9y X3NpemU7Cj4gPj4gPj4gKwkJYnJlYWs7Cj4gPj4gPj4gKwljYXNlIFRUX1JBV19QQUdFOgo+ID4+ ID4+ICsJCWxhc3Rfc2VjX3NpemUgPSBjZG5zX2NoaXAtPm1haW5fc2l6ZSArIGNkbnNfY2hpcC0+ b29iX3NpemU7Cj4gPj4gPj4gKwkJYnJlYWs7Cj4gPj4gPj4gKwljYXNlIFRUX0JCTToKPiA+PiA+ PiArCQlvZmZzZXQgPSBjZG5zX2NoaXAtPm1haW5fc2l6ZSArIGNkbnNfY2hpcC0+YmJtX29mZnM7 Cj4gPj4gPj4gKwkJbGFzdF9zZWNfc2l6ZSA9IDg7Cj4gPj4gPj4gKwkJYnJlYWs7Cj4gPj4gPj4g KwlkZWZhdWx0Ogo+ID4+ID4+ICsJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsICJEYXRhIHNpemUg cHJlcGFyYXRpb24gZmFpbGVkXG4iKTsKPiA+PiA+PiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+PiA+ PiArCX0KPiA+PiA+PiArCj4gPj4gPj4gKwlyZWcgPSAwOwo+ID4+ID4+ICsJcmVnIHw9IEZJRUxE X1BSRVAoVFJBTl9DRkdfMF9PRkZTRVQsIG9mZnNldCk7Cj4gPj4gPj4gKwlyZWcgfD0gRklFTERf UFJFUChUUkFOX0NGR18wX1NFQ19DTlQsIHNlY19jbnQpOwo+ID4+ID4+ICsJd3JpdGVsKHJlZywg Y2Ruc19jdHJsLT5yZWcgKyBUUkFOX0NGR18wKTsKPiA+PiA+PiArCj4gPj4gPj4gKwlyZWcgPSAw Owo+ID4+ID4+ICsJcmVnIHw9IEZJRUxEX1BSRVAoVFJBTl9DRkdfMV9MQVNUX1NFQ19TSVpFLCBs YXN0X3NlY19zaXplKTsKPiA+PiA+PiArCXJlZyB8PSBGSUVMRF9QUkVQKFRSQU5fQ0ZHXzFfU0VD VE9SX1NJWkUsIHNlY19zaXplKTsKPiA+PiA+PiArCXdyaXRlbChyZWcsIGNkbnNfY3RybC0+cmVn ICsgVFJBTl9DRkdfMSk7Cj4gPj4gPj4gKwo+ID4+ID4+ICsJcmVnID0gcmVhZGwoY2Ruc19jdHJs LT5yZWcgKyBDT05UUk9MX0RBVEFfQ1RSTCk7Cj4gPj4gPj4gKwlyZWcgJj0gfkNPTlRST0xfREFU QV9DVFJMX1NJWkU7Cj4gPj4gPj4gKwlyZWcgfD0gRklFTERfUFJFUChDT05UUk9MX0RBVEFfQ1RS TF9TSVpFLCBkYXRhX2N0cmxfc2l6ZSk7Cj4gPj4gPj4gKwl3cml0ZWwocmVnLCBjZG5zX2N0cmwt PnJlZyArIENPTlRST0xfREFUQV9DVFJMKTsKPiA+PiA+PiArCj4gPj4gPj4gKwljZG5zX2N0cmwt PmN1cnJfdHJhbnNfdHlwZSA9IHRyYW5zZmVyX3R5cGU7Cj4gPj4gPj4gKwo+ID4+ID4+ICsJcmV0 dXJuIDA7Cj4gPj4gPj4gK30KPiA+PiA+PiArICAKPiBbLi4uXSA+PiA+PiArCj4gPj4gWy4uLl0g Pj4gKwkvKiAgCj4gPj4gPj4gKwkgKiB0aGUgaWRlYSBvZiB0aG9zZSBjYWxjdWxhdGlvbiBpcyB0 byBnZXQgdGhlIG9wdGltdW0gdmFsdWUKPiA+PiA+PiArCSAqIGZvciB0UlAgYW5kIHRSSCB0aW1p bmdzIGlmIGl0IGlzIE5PVCBwb3NzaWJsZSB0byBzYW1wbGUgZGF0YQo+ID4+ID4+ICsJICogd2l0 aCBvcHRpbWFsIHRSUC90Ukggc2V0dGluZ3MgdGhlIHBhcmFtZXRlcnMgd2lsbCBiZSBleHRlbmRl ZAo+ID4+ID4+ICsJICovCj4gPj4gPj4gKwlpZiAoc2RyLT50UkNfbWluIDw9IGNsa19wZXJpb2Qg JiYKPiA+PiA+PiArCSAgICBzZHItPnRSUF9taW4gPD0gKGNsa19wZXJpb2QgLyAyKSAmJgo+ID4+ ID4+ICsJICAgIHNkci0+dFJFSF9taW4gPD0gKGNsa19wZXJpb2QgLyAyKSkgeyAgCj4gPj4gPgo+ ID4+ID5XaWxsIHRoaXMgc2l0dWF0aW9uIHJlYWxseSBoYXBwZW4/ICAKPiA+PiBJIHRoaW5rIHll cyBmb3IgZm9sbHdpbmcgdmFsdWVzIHRyY19taW4gIDIwMDAwIHBzCj4gPj4gdHJwX21pbiAgMTAw MDAgcHMKPiA+PiB0cmVoX21pbiA3MDAwICBwcwo+ID4+IGNsa19wZXJpb2QgMjAwMDAgcHMgIAo+ ID4KPiA+T2ssIHlvdSBtYXkgYWRkIGEgY29tbWVudCBzdGF0aW5nIHRoYXQgdGhpcyBtYXkgYmUg dGhlIGNhc2UgaW4gRURPIG1vZGUKPiA+NS4gIAo+IEkgZGlkIG5vdCBhbndlciBjbGVhcmx5IGxh c3QgdGltZS4gSXQgd2FzIGp1c3QgYW4gZXhhbXBsZS4gVGhlIHJlc3VsdCBvZiB0aGF0ICJpZiIg ZGVwZW5kcyBvbiBOQU5EIGZsYXNoIGRldmljZSB0aW1pbmcgbW9kZSBhbmQgTkFORCBmbGFzaCBj b250cm9sbGVyIGNsb2NrLiBNaW51bXVtIHZhbHVlIG9mIGNsayBpcyAyME1IeiAoNTBucykuIFNv IGl0IG1heSBiZSBhIGNhc2UgZm9yIEFzeW5jaHJvbm91cyBNb2RlIDEgaWYKPiBOQU5EIGZsYXNo IGNvbnRyb2xsZXIgY2xvY2sgaXMgMjBNSHouIEkgd2lsbCBhZGQgdGhpcyBpbmZvIGluIGNvbW1l bnQuCgpJIGFtIG5vdCBzdXJlIHRvIHVuZGVyc3RhbmQgY29ycmVjdGx5IHdoYXQgeW91IG1lYW4u IFBsZWFzZSB0cnkgdG8Kd3JpdGUgYSBuaWNlIGNvbW1lbnQgYW5kIHdlJ2xsIHNlZS4KCj4gPj4g Wy4uLl0gIAo+ID4+ID4+ICsJfQo+ID4+ID4+ICsKPiA+PiA+PiArCWlmIChjZG5zX2N0cmwtPmNh cHMyLmlzX3BoeV90eXBlX2RsbCkgeyAgCj4gPj4gPgo+ID4+ID5JcyB0aGUgZWxzZSBwYXJ0IGFs bG93ZWQ/ICAKPiBSZWdpc3RlciBhY2Nlc3NlZCBpbiB0aGlzIGJsb2NrIGRvZXMgbm90IGV4aXN0 cyBpZiBpc19waHlfdHlwZV9kbGwgaXMgMC4gU28gdGhleSBhcmUgcHJldmV0ZWQgdG8gYmUgYWNj ZXNzZWQuIHRoZSBlbHNlIGlzIG5vdCBuZWVkZWQuCj4gPj4gPiAgCj4gPj4gZm9sbG93aW5nIHJl Z2lzdGVyIGRvZXMgbm90IGV4aXN0IGlmIGNhcHMyLmlzX3BoeV90eXBlX2RsbCBpcyAwID4+ICsJ CXUzMiB0cHJlX2NudCA9IGNhbGNfY3ljbCh0cHJlLCBjbGtfcGVyaW9kKTsgIAo+ID4+ID4+ICsJ CXUzMiB0Y2Rxc3NfY250ID0gY2FsY19jeWNsKHRjZHFzcyArIGlmX3NrZXcsIGNsa19wZXJpb2Qp Owo+ID4+ID4+ICsJCXUzMiB0cHN0aF9jbnQgPSBjYWxjX2N5Y2wodHBzdGggKyBpZl9za2V3LCBj bGtfcGVyaW9kKTsKPiA+PiA+PiArCj4gPj4gPj4gKwkJdTMyIHRycHN0X2NudCA9IGNhbGNfY3lj bCh0cnBzdCArIGlmX3NrZXcsIGNsa19wZXJpb2QpICsgMTsKPiA+PiA+PiArCQl1MzIgdHdwc3Rf Y250ID0gY2FsY19jeWNsKHR3cHN0ICsgaWZfc2tldywgY2xrX3BlcmlvZCkgKyAxOwo+ID4+ID4+ ICsJCXUzMiB0Y3Jlc19jbnQgPSBjYWxjX2N5Y2wodGNyZXMgKyBpZl9za2V3LCBjbGtfcGVyaW9k KSArIDE7Cj4gPj4gPj4gKwkJdTMyIHRjZHFzaF9jbnQgPSBjYWxjX2N5Y2wodGNkcXNoICsgaWZf c2tldywgY2xrX3BlcmlvZCkgKyA1Owo+ID4+ID4+ICsKPiA+PiA+PiArCQl0Y3JfY250ID0gY2Fs Y19jeWNsKHRjciArIGlmX3NrZXcsIGNsa19wZXJpb2QpOwo+ID4+ID4+ICsJCS8qCj4gPj4gPj4g KwkJICogc2tldyBub3QgaW5jbHVkZWQgYmVjYXVzZSB0aGlzIHRpbWluZyBkZWZpbmVzIGR1cmF0 aW9uIG9mCj4gPj4gPj4gKwkJICogUkUgb3IgRFFTIGJlZm9yZSBkYXRhIHRyYW5zZmVyCj4gPj4g Pj4gKwkJICovCj4gPj4gPj4gKwkJdHBzdGhfY250ID0gdHBzdGhfY250ICsgMTsKPiA+PiA+PiAr CQlyZWcgPSBGSUVMRF9QUkVQKFRPR0dMRV9USU1JTkdTMF9UUFNUSCwgdHBzdGhfY250KTsKPiA+ PiA+PiArCQlyZWcgfD0gRklFTERfUFJFUChUT0dHTEVfVElNSU5HUzBfVENEUVNTLCB0Y2Rxc3Nf Y250KTsKPiA+PiA+PiArCQlyZWcgfD0gRklFTERfUFJFUChUT0dHTEVfVElNSU5HUzBfVFBSRSwg dHByZV9jbnQpOwo+ID4+ID4+ICsJCXJlZyB8PSBGSUVMRF9QUkVQKFRPR0dMRV9USU1JTkdTMF9U Q1IsIHRjcl9jbnQpOwo+ID4+ID4+ICsJCXQtPnRvZ2dsZV90aW1pbmdzXzAgPSByZWc7Cj4gPj4g Pj4gKwkJZGV2X2RiZyhjZG5zX2N0cmwtPmRldiwgIlRPR0dMRV9USU1JTkdTXzBfU0RSXHQleFxu IiwgcmVnKTsKPiA+PiA+PiArCj4gPj4gPj4gKwkJLy90b2dnbGVfdGltaW5nc18xIC0gdFJQU1Qs dFdQU1QKPiA+PiA+PiArCQlyZWcgPSBGSUVMRF9QUkVQKFRPR0dMRV9USU1JTkdTMV9UQ0RRU0gs IHRjZHFzaF9jbnQpOwo+ID4+ID4+ICsJCXJlZyB8PSBGSUVMRF9QUkVQKFRPR0dMRV9USU1JTkdT MV9UQ1JFUywgdGNyZXNfY250KTsKPiA+PiA+PiArCQlyZWcgfD0gRklFTERfUFJFUChUT0dHTEVf VElNSU5HUzFfVFJQU1QsIHRycHN0X2NudCk7Cj4gPj4gPj4gKwkJcmVnIHw9IEZJRUxEX1BSRVAo VE9HR0xFX1RJTUlOR1MxX1RXUFNULCB0d3BzdF9jbnQpOwo+ID4+ID4+ICsJCXQtPnRvZ2dsZV90 aW1pbmdzXzEgPSByZWc7Cj4gPj4gPj4gKwkJZGV2X2RiZyhjZG5zX2N0cmwtPmRldiwgIlRPR0dM RV9USU1JTkdTXzFfU0RSXHQleFxuIiwgcmVnKTsKPiA+PiA+PiArCX0gIAo+ID4+IFsuLi5dID4g IAo+ID4+ID5UaGlzIGZ1bmN0aW9uIGlzIHNvIGNvbXBsaWNhdGVkICEhISBIb3cgY2FuIHRoaXMg ZXZlbiB3b3JrPyBSZWFsbHksIGl0Cj4gPj4gPmlzIGhhcmQgdG8gZ2V0IGludG8gdGhlIGNvZGUg YW5kIGZvbGxvdywgSSBhbSBzdXJlIHlvdSBjYW4gZG8KPiA+PiA+c29tZXRoaW5nLiAgCj4gPj4g WWVzIGl0IGlzIGNvbXBsaWNhdGVkIGJ1dCB3b3JrcywgSSB3aWxsIHRyeSB0byBzaW1wbGlmeSBp dC4uLiAgIFsuLi5dICAKPiA+Cj4gPlllcyBwbGVhc2UhCj4gPiAgCj4gPj4gPj4gKwkJCQkiQ1Mg JWQgYWxyZWFkeSBhc3NpZ25lZFxuIiwgY3MpOwo+ID4+ID4+ICsJCQlyZXR1cm4gLUVJTlZBTDsK PiA+PiA+PiArCQl9Cj4gPj4gPj4gKwo+ID4+ID4+ICsJCWNkbnNfY2hpcC0+Y3NbaV0gPSBjczsK PiA+PiA+PiArCX0KPiA+PiA+PiArCj4gPj4gPj4gKwljaGlwID0gJmNkbnNfY2hpcC0+Y2hpcDsK PiA+PiA+PiArCWNoaXAtPmNvbnRyb2xsZXIgPSAmY2Ruc19jdHJsLT5jb250cm9sbGVyOwo+ID4+ ID4+ICsJbmFuZF9zZXRfZmxhc2hfbm9kZShjaGlwLCBucCk7Cj4gPj4gPj4gKwo+ID4+ID4+ICsJ bXRkID0gbmFuZF90b19tdGQoY2hpcCk7Cj4gPj4gPj4gKwltdGQtPmRldi5wYXJlbnQgPSBjZG5z X2N0cmwtPmRldjsKPiA+PiA+PiArCj4gPj4gPj4gKwkvKgo+ID4+ID4+ICsJICogRGVmYXVsdCB0 byBIVyBFQ0MgZW5naW5lIG1vZGUuIElmIHRoZSBuYW5kLWVjYy1tb2RlIHByb3BlcnR5IGlzIGdp dmVuCj4gPj4gPj4gKwkgKiBpbiB0aGUgRFQgbm9kZSwgdGhpcyBlbnRyeSB3aWxsIGJlIG92ZXJ3 cml0dGVuIGluIG5hbmRfc2Nhbl9pZGVudCgpLgo+ID4+ID4+ICsJICovCj4gPj4gPj4gKwljaGlw LT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXOwo+ID4+ID4+ICsKPiA+PiA+PiArCS8qCj4gPj4gPj4g KwkgKiBTYXZlIGEgcmVmZXJlbmNlIHZhbHVlIGZvciB0aW1pbmcgcmVnaXN0ZXJzIGJlZm9yZQo+ ID4+ID4+ICsJICogLT5zZXR1cF9kYXRhX2ludGVyZmFjZSgpIGlzIGNhbGxlZC4KPiA+PiA+PiAr CSAqLwo+ID4+ID4+ICsJY2FkZW5jZV9uYW5kX2dldF90aW1pbmdzKGNkbnNfY3RybCwgJmNkbnNf Y2hpcC0+dGltaW5ncyk7ICAKPiA+PiA+Cj4gPj4gPllvdSBjYW5ub3QgcmVseSBvbiB0aGUgQm9v dGxvYWRlcidzIGNvbmZpZ3VyYXRpb24uIFRoaXMgZHJpdmVyIHNob3VsZAo+ID4+ID5kZXJpdmUg aXQuICAKPiA+PiBJIGRvIG5vdCByZWxheSBvbiB0aGUgQm9vdGxvYWRlcidzIGNvbmZpZ3VyYXRp b24gaW4gYW55IHBhcnQuIEkganVzdAo+ID4+IGluaXQgdGltaW5ncyBzdHJ1Y3R1cmUgYmFzZSBv biBjdXJyZW50IHZhbHVlcyBvZiByZWdpc3RlcnMgdG8gZG8gbm90Cj4gPj4gICBoYXZlIHJ1Ymlz aCBpbiB0aW1pbmcgc3RydWN0dXJlLiBWYWx1ZXMgd2lsbCBiZSBjYWxjdWxhdGVkIGJ5IGRyaXZl ciB3aGVuCj4gPj4gc2V0dXBfZGF0YV9pbnRlcmZhY2UgaXMgY2FsbGVkLiBJbiBjYXNlIHNldF90 aW1pbmdzIGlzIGNhbGxlZCBiZWZvcmUKPiA+PiBzZXR1cF9kYXRhX2ludGVyZmFjZSAgCj4gPgo+ ID5Eb2VzIHRoaXMgcmVhbGx5IGhhcHBlbnM/IEkgYW0gcHJldHR5IHN1cmUgaXQgaXMgdGFrZW4g Y2FyZSBvZiBieSB0aGUKPiA+Y29yZS4gSSBkb24ndCB0aGluayB5b3Ugc2hvdWxkIHJlbHkgb24g d2hhdCdzIGluIHRoZSByZWdpc3RlcnMgYXQgYm9vdAo+ID50aW1lLiAgCj4gT2sgSSB3aWxsIGNo ZWNrIGl0IG9uZSBtb3JlIHRpbWUgYW5kIHJlbW92ZSBpZiBub3QgbmVlZGVkLgo+IAo+ID4KPiA+ ICAKPiA+PiB0aGVuIHdlIHdyaXRlIHRoZSBzYW1lIHZhbHVzIHRvIHRpbWluZyByZWdpc3RlcnMK PiA+PiB3aGljaCBhcmUgcHJlc2V0IGluIHJlZ2lzdHJlcy4gVG8gYmUgc2hvcnRlciB0aW1pbmcg cmVnaXN0ZXJzIHdpbGwgc3RheQo+ID4+IHVuY2hhbmdlZC4gID4+ICsJcmV0ID0gbmFuZF9zY2Fu KGNoaXAsIGNkbnNfY2hpcC0+bnNlbHMpOyAgCj4gPj4gPj4gKwlpZiAocmV0KSB7Cj4gPj4gPj4g KwkJZGV2X2VycihjZG5zX2N0cmwtPmRldiwgImNvdWxkIG5vdCBzY2FuIHRoZSBuYW5kIGNoaXBc biIpOwo+ID4+ID4+ICsJCXJldHVybiByZXQ7Cj4gPj4gPj4gKwl9Cj4gPj4gPj4gKwo+ID4+ID4+ ICsJcmV0ID0gbXRkX2RldmljZV9yZWdpc3RlcihtdGQsIE5VTEwsIDApOwo+ID4+ID4+ICsJaWYg KHJldCkgewo+ID4+ID4+ICsJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsCj4gPj4gPj4gKwkJCSJm YWlsZWQgdG8gcmVnaXN0ZXIgbXRkIGRldmljZTogJWRcbiIsIHJldCk7Cj4gPj4gPj4gKwkJbmFu ZF9yZWxlYXNlKGNoaXApOyAgCj4gPj4gPgo+ID4+ID5JIHRoaW5rIHlvdSBzaG91bGQgY2FsbCBu YW5kX2NsZWFudXAgaW5zdGVhZCBvZiBuYW5kX3JlbGVhc2UgaGVyZSBoYXMKPiA+PiA+dGhlIG10 ZCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWQgeWV0LiAgCj4gb2sKPiAKPiA+PiA+PiArCQlyZXR1 cm4gcmV0Owo+ID4+ID4+ICsJfQo+ID4+ID4+ICsKPiA+PiA+PiArCWxpc3RfYWRkX3RhaWwoJmNk bnNfY2hpcC0+bm9kZSwgJmNkbnNfY3RybC0+Y2hpcHMpOwo+ID4+ID4+ICsKPiA+PiA+PiArCXJl dHVybiAwOwo+ID4+ID4+ICt9Cj4gPj4gPj4gKwo+ID4+ID4+ICtzdGF0aWMgaW50IGNhZGVuY2Vf bmFuZF9jaGlwc19pbml0KHN0cnVjdCBjZG5zX25hbmRfY3RybCAqY2Ruc19jdHJsKQo+ID4+ID4+ ICt7Cj4gPj4gPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gY2Ruc19jdHJsLT5kZXYtPm9m X25vZGU7Cj4gPj4gPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5hbmRfbnA7Cj4gPj4gPj4gKwlp bnQgbWF4X2NzID0gY2Ruc19jdHJsLT5jYXBzMi5tYXhfYmFua3M7Cj4gPj4gPj4gKwlpbnQgbmNo aXBzOwo+ID4+ID4+ICsJaW50IHJldDsKPiA+PiA+PiArCj4gPj4gPj4gKwluY2hpcHMgPSBvZl9n ZXRfY2hpbGRfY291bnQobnApOwo+ID4+ID4+ICsKPiA+PiA+PiArCWlmIChuY2hpcHMgPiBtYXhf Y3MpIHsKPiA+PiA+PiArCQlkZXZfZXJyKGNkbnNfY3RybC0+ZGV2LAo+ID4+ID4+ICsJCQkidG9v IG1hbnkgTkFORCBjaGlwczogJWQgKG1heCA9ICVkIENTKVxuIiwKPiA+PiA+PiArCQkJbmNoaXBz LCBtYXhfY3MpOwo+ID4+ID4+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4+ID4+ICsJfQo+ID4+ID4+ ICsKPiA+PiA+PiArCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIG5hbmRfbnApIHsKPiA+PiA+ PiArCQlyZXQgPSBjYWRlbmNlX25hbmRfY2hpcF9pbml0KGNkbnNfY3RybCwgbmFuZF9ucCk7Cj4g Pj4gPj4gKwkJaWYgKHJldCkgewo+ID4+ID4+ICsJCQlvZl9ub2RlX3B1dChuYW5kX25wKTsKPiA+ PiA+PiArCQkJcmV0dXJuIHJldDsKPiA+PiA+PiArCQl9ICAKPiA+PiA+Cj4gPj4gPklmIG5hbmRf Y2hpcF9pbml0KCkgZmFpbHMgb24gYW5vdGhlciBjaGlwIHRoYW4gdGhlIGZpcnN0IG9uZSwgdGhl cmUgaXMKPiA+PiA+c29tZSBnYXJiYWdlIGNvbGxlY3Rpb24gdG8gZG8uICAKPiBvawo+IAo+ID4+ ID4+ICsJfQo+ID4+ID4+ICsKPiA+PiA+PiArCXJldHVybiAwOwo+ID4+ID4+ICt9Cj4gPj4gPj4g Kwo+ID4+ID4+ICtzdGF0aWMgaW50IGNhZGVuY2VfbmFuZF9pbml0KHN0cnVjdCBjZG5zX25hbmRf Y3RybCAqY2Ruc19jdHJsKQo+ID4+ID4+ICt7Cj4gPj4gPj4gKwlkbWFfY2FwX21hc2tfdCBtYXNr Owo+ID4+ID4+ICsJaW50IHJldCA9IDA7Cj4gPj4gPj4gKwo+ID4+ID4+ICsJY2Ruc19jdHJsLT5j ZG1hX2Rlc2MgPSBkbWFfYWxsb2NfY29oZXJlbnQoY2Ruc19jdHJsLT5kZXYsCj4gPj4gPj4gKwkJ CQkJCSAgc2l6ZW9mKCpjZG5zX2N0cmwtPmNkbWFfZGVzYyksCj4gPj4gPj4gKwkJCQkJCSAgJmNk bnNfY3RybC0+ZG1hX2NkbWFfZGVzYywKPiA+PiA+PiArCQkJCQkJICBHRlBfS0VSTkVMKTsKPiA+ PiA+PiArCWlmICghY2Ruc19jdHJsLT5kbWFfY2RtYV9kZXNjKQo+ID4+ID4+ICsJCXJldHVybiAt RU5PTUVNOwo+ID4+ID4+ICsKPiA+PiA+PiArCWNkbnNfY3RybC0+YnVmX3NpemUgPSAxNiAqIDEw MjQ7ICAKPiA+PiA+Cj4gPj4gPnMvMTAyNC9TWl8xSy8KPiA+PiA+ICAKPiA+PiA+PiArCWNkbnNf Y3RybC0+YnVmID0ga21hbGxvYyhjZG5zX2N0cmwtPmJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsgIAo+ ID4+ID4KPiA+PiA+SWYgeW91IHVzZSBrbWFsbG9jIGhlcmUgdGhlbiB0aGlzIGJ1ZmZlciB3aWxs IGFsd2F5cyBiZSBETUEtYWJsZSwKPiA+PiA+cmlnaHQ/ICAKPiA+PiBSaWdodCBJIGhhdmUgc2Vl biBzdWNoIHNvbHV0aW9uIGluIGFub3RoZXIgZHJpdmVyLgo+ID4+Cj4gPj4KPiA+PiBUaGFua3Mg Zm9yIHJldmlldmluZyB0aGlzIHBhdGNoLiBQbGVhc2UgYW5zd2VyIG9uIG15IHF1ZXN0aW9uIGhv dyB3cml0ZV9vb2IKPiA+PiBhbmQgcmVhZF9vb2IgZnVuY3Rpb25zIHNob3VsZCBiZSBpbXBsZW1l bnRlZC4KPiA+PiAgCj4gPj4gPgo+ID4+ID4KPiA+PiA+VGhhbmtzLAo+ID4+ID5NaXF1w6hsICAK PiA+Pgo+ID4+ICAgVGhhbmtzCj4gPj4gUGlvdHIgU3Jva2EgIAo+ID4KPiA+VGhhbmtzLAo+ID5N aXF1w6hsICAKPiAKPiBUaGFua3MKPiBQaW90cgoKVGhhbmtzLApNaXF1w6hsCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXggTVREIGRp c2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtbXRkLwo=