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.4 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,UNPARSEABLE_RELAY,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 905FFC54E8D for ; Tue, 12 May 2020 05:56:10 +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 464C820733 for ; Tue, 12 May 2020 05:56:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="rA/buJER" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 464C820733 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=allwinnertech.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:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Reply-To:Content-ID:Content-Description :Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=hGNywaXY6NqwTtfePRh68dSAxAAApatcbSTdyUuPick=; b=rA/buJERGKLlay Xoxk3rArETUzcZncbSlB5yIgvgtNE4pI8wB2aqCrU2Aqub6X+idXYSsBbjrIBXT1a80yJsk1eqkk2 Nmt0eZ3MAwLITfPSmZyzlu6xyvLLZBCEgDvxlGGXf/gHr2uL6enk6n4dVzLXOszA+pFxEWKhoUvWu lVYYmKtE2KrNWS1XKhIhF1VMkVLf6jEOqVQ03YY87ryBJx6RwqOwXDI6yDqwjpQkhgoMOXSXJkFpb 9lzHZSs2nVsvv/WGFnCw+J7OU79R4a60Qgsi8KJVJs5k0jMnqVamyDvEyUn2w/J/RJmjdtqdUOtQR IcNduAOB8w6n1GWwyAnw==; 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 1jYNtZ-0007O5-37; Tue, 12 May 2020 05:56:01 +0000 Received: from smtp2207-205.mail.aliyun.com ([121.197.207.205]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jYNtU-0007Mu-HP for linux-mtd@lists.infradead.org; Tue, 12 May 2020 05:55:59 +0000 X-Alimail-AntiSpam: AC=CONTINUE; BC=0.07436282|-1; CH=green; DM=|CONTINUE|false|; DS=CONTINUE|ham_system_inform|0.0239161-0.000437764-0.975646; FP=0|0|0|0|0|-1|-1|-1; HT=e02c03293; MF=liaoweixiong@allwinnertech.com; NM=1; PH=DS; RN=12; RT=12; SR=0; TI=SMTPD_---.HXE-WlO_1589262949; Received: from 172.16.10.102(mailfrom:liaoweixiong@allwinnertech.com fp:SMTPD_---.HXE-WlO_1589262949) by smtp.aliyun-inc.com(10.147.41.199); Tue, 12 May 2020 13:55:50 +0800 Subject: Re: [PATCH v8 10/11] mtd: Support kmsg dumper based on pstore/blk To: Kees Cook References: <20200511233229.27745-1-keescook@chromium.org> <20200511233229.27745-11-keescook@chromium.org> <4c432f43-971a-a61e-645e-ad8bfdf1302e@allwinnertech.com> <202005112211.F67D1EFB42@keescook> From: WeiXiong Liao Message-ID: <5c044b2a-61da-a084-1a63-a9bc0f29ff2a@allwinnertech.com> Date: Tue, 12 May 2020 13:56:00 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <202005112211.F67D1EFB42@keescook> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200511_225557_110230_4CB7195C X-CRM114-Status: GOOD ( 25.72 ) 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: Rob Herring , Tony Luck , Vignesh Raghavendra , Jonathan Corbet , Richard Weinberger , Anton Vorontsov , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Colin Cross , linux-mtd@lists.infradead.org, Miquel Raynal 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 aGkgS2VlcyBDb29rLAoKT24gMjAyMC81LzEyIOS4i+WNiDE6MTIsIEtlZXMgQ29vayB3cm90ZToK PiBbcmVzZW5kIHRvIHByb3BlciBDQyBsaXN0Li4uXQo+IAo+IE9uIFR1ZSwgTWF5IDEyLCAyMDIw IGF0IDExOjEyOjQyQU0gKzA4MDAsIFdlaVhpb25nIExpYW8gd3JvdGU6Cj4+IGhpIEtlZXMgQ29v aywKPj4KPj4gVGhlIG9mZiBwYXJhbWV0ZXIgb24gbXRkcHNvcmVfYmxvY2sqKCkgZG9lcyBub3Qg YWxpZ24gdG8gYmxvY2sgc2l6ZSwKPj4gd2hpY2ggbWFrZXMgc29tZSBidWdzLiBGb3IgZXhhbXBs ZSwgYSBibG9jayBjb250YWlucyA0IGRtZXNnIHpvbmVzCj4+IGFuZCBpdCdzIGV4cGVjdGVkIHRv IGVyYXNlIHRoaXMgYmxvY2sgd2hlbiB1c2VyIHJlbW92ZSBhbGwgZmlsZXMgb24KPj4gdGhlc2Ug em9uZXMuIEhvd2V2ZXIgaXQgd29yayBmYWlsZWQgc2luY2UgaXQgZ2V0IHdyb25nbHkgem9uZW51 bSBmcm9tCj4+IG1pc2FsaWduZWQgb2ZmLgo+IAo+IEFoLCBva2F5LiBJIGhhdmVuJ3QgdG91Y2hl ZCBhbnkgb2YgdGhpcyBsb2dpYy4gRGlkIHNvbWV0aGluZyBjaGFuZ2UgaW4KPiBwc3RvcmUvYmxr IG9yIC96b25lIHRoYXQgSSBicm9rZT8gUmVnYXJkbGVzcywgY2FuIHlvdSBzZW5kIGEgcmVndWxh cgo+IHBhdGNoIGZvciB3aGF0IHlvdSBoYXZlIGJlbG93IGFuZCBJJ2xsIGZvbGQgaXQgaW50byB0 aGUgbXRkcHN0b3JlCj4gY29tbWl0Lgo+IAoKSSB3aWxsIHNlbmQgYSBwYXRjaCBsYXRlci4gTWF5 YmUgaXQgbmVlZHMgdG8gYmUgcmV2aWV3ZWQgYWdhaW4gYnkgTVRECm1haW50YWluZXJzLiBBbmQg ZXZlcnl0aGluZyBpbiBwc3RvcmUvYmxrIGFuZCAvem9uZSBhcmUgT0suCgo+IFRoYW5rcyEKPiAK PiAtS2Vlcwo+IAo+PiBPbiAyMDIwLzUvMTIgQU0gNzozMiwgS2VlcyBDb29rIHdyb3RlOgo+Pj4g RnJvbTogV2VpWGlvbmcgTGlhbyA8bGlhb3dlaXhpb25nQGFsbHdpbm5lcnRlY2guY29tPgo+Pj4K Pj4+IFRoaXMgaW50cm9kdWNlcyBtdGRwc3RvcmUsIHdoaWNoIGlzIHNpbWlsYXIgdG8gbXRkb29w cyBidXQgbW9yZQo+Pj4gcG93ZXJmdWwuIEl0IHVzZXMgcHN0b3JlL2JsaywgYW5kIGFpbXMgdG8g c3RvcmUgcGFuaWMgYW5kIG9vcHMgbG9ncyB0bwo+Pj4gYSBmbGFzaCBwYXJ0aXRpb24sIHdoZXJl IHBzdG9yZSBjYW4gbGF0ZXIgcmVhZCBiYWNrIGFuZCBwcmVzZW50IGFzIGZpbGVzCj4+PiBpbiB0 aGUgbW91bnRlZCBwc3RvcmUgZmlsZXN5c3RlbS4KPj4+Cj4+PiBUbyBtYWtlIG10ZHBzdG9yZSB3 b3JrLCB0aGUgImJsa2RldiIgb2YgcHN0b3JlL2JsayBzaG91bGQgYmUgc2V0Cj4+PiBhcyBNVEQg ZGV2aWNlIG5hbWUgb3IgTVREIGRldmljZSBudW1iZXIuIEZvciBtb3JlIGRldGFpbHMsIHNlZQo+ Pj4gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9wc3RvcmUtYmxrLnJzdAo+Pj4KPj4+IFRoaXMg c29sdmVzIGEgbnVtYmVyIG9mIGlzc3VlczoKPj4+IC0gV29yayBkdXBsaWNhdGlvbjogYm90aCBv ZiBwc3RvcmUgYW5kIG10ZG9vcHMgZG8gdGhlIHNhbWUgam9iIHN0b3JpbmcKPj4+ICAgcGFuaWMv b29wcyBsb2cuIFRoZXkgaGF2ZSB2ZXJ5IHNpbWlsYXIgbG9naWMsIHJlZ2lzdGVyaW5nIHRvIGtt c2cKPj4+ICAgZHVtcGVyIGFuZCBzdG9yaW5nIGxvZ3MgdG8gc2V2ZXJhbCBjaHVua3Mgb25lIGJ5 IG9uZS4KPj4+IC0gTGF5ZXIgdmlvbGF0aW9uczogZHJpdmVycyBzaG91bGQgcHJvdmlkZXMgbWV0 aG9kcyBpbnN0ZWFkIG9mIHBvbGljZXMuCj4+PiAgIE1URCBzaG91bGQgcHJvdmlkZSByZWFkL3dy aXRlL2VyYXNlIG9wZXJhdGlvbnMsIGFuZCBhbGxvdyBhIGhpZ2hlcgo+Pj4gICBsZXZlbCBkcml2 ZXJzIHRvIHByb3ZpZGUgdGhlIGNodW5rIG1hbmFnZW1lbnQsIGttc2cgZHVtcAo+Pj4gICBjb25m aWd1cmF0aW9uLCBldGMuCj4+PiAtIE1pc3NpbmcgZmVhdHVyZXM6IHBzdG9yZSBwcm92aWRlcyBt YW55IGFkZGl0aW9uYWwgZmVhdHVyZXMsIGluY2x1ZGluZwo+Pj4gICBwcmVzZW50aW5nIHRoZSBs b2dzIGFzIGZpbGVzLCBsb2dnaW5nIGR1bXAgdGltZSBhbmQgY291bnQsIGFuZAo+Pj4gICBzdXBw b3J0aW5nIG90aGVyIGZyb250ZW5kcyBsaWtlIHBtc2csIGNvbnNvbGUsIGV0Yy4KPj4+Cj4+PiBT aWduZWQtb2ZmLWJ5OiBXZWlYaW9uZyBMaWFvIDxsaWFvd2VpeGlvbmdAYWxsd2lubmVydGVjaC5j b20+Cj4+PiBMaW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9yLzE1ODUxMjY1MDYtMTg2MzUt MTItZ2l0LXNlbmQtZW1haWwtbGlhb3dlaXhpb25nQGFsbHdpbm5lcnRlY2guY29tCj4+PiBTaWdu ZWQtb2ZmLWJ5OiBLZWVzIENvb2sgPGtlZXNjb29rQGNocm9taXVtLm9yZz4KPj4+IC0tLQo+Pj4g IERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvcHN0b3JlLWJsay5yc3QgfCAgIDkgKy0KPj4+ICBk cml2ZXJzL210ZC9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgIHwgIDEwICsKPj4+ICBkcml2 ZXJzL210ZC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKPj4+ICBkcml2ZXJz L210ZC9tdGRwc3RvcmUuYyAgICAgICAgICAgICAgICAgIHwgNTYzICsrKysrKysrKysrKysrKysr KysrKysrCj4+PiAgNCBmaWxlcyBjaGFuZ2VkLCA1ODEgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlv bnMoLSkKPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tdGQvbXRkcHN0b3JlLmMKPj4+ Cj4+PiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9wc3RvcmUtYmxrLnJz dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvcHN0b3JlLWJsay5yc3QKPj4+IGluZGV4IGQ0 NTM0MWU1NWU4Mi4uMjk2ZDUwMjc3ODdhIDEwMDY0NAo+Pj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9h ZG1pbi1ndWlkZS9wc3RvcmUtYmxrLnJzdAo+Pj4gKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1n dWlkZS9wc3RvcmUtYmxrLnJzdAo+Pj4gQEAgLTQzLDkgKzQzLDkgQEAgYmxrZGV2Cj4+PiAgfn5+ fn5+Cj4+PiAgCj4+PiAgVGhlIGJsb2NrIGRldmljZSB0byB1c2UuIE1vc3Qgb2YgdGhlIHRpbWUs IGl0IGlzIGEgcGFydGl0aW9uIG9mIGJsb2NrIGRldmljZS4KPj4+IC1JdCdzIHJlcXVpcmVkIGZv ciBwc3RvcmUvYmxrLgo+Pj4gK0l0J3MgcmVxdWlyZWQgZm9yIHBzdG9yZS9ibGsuIEl0IGlzIGFs c28gdXNlZCBmb3IgTVREIGRldmljZS4KPj4+ICAKPj4+IC1JdCBhY2NlcHRzIHRoZSBmb2xsb3dp bmcgdmFyaWFudHM6Cj4+PiArSXQgYWNjZXB0cyB0aGUgZm9sbG93aW5nIHZhcmlhbnRzIGZvciBi bG9jayBkZXZpY2U6Cj4+PiAgCj4+PiAgMS4gPGhleF9tYWpvcj48aGV4X21pbm9yPiBkZXZpY2Ug bnVtYmVyIGluIGhleGFkZWNpbWFsIHJlcHJlc2VudHMgaXRzZWxmOyBubwo+Pj4gICAgIGxlYWRp bmcgMHgsIGZvciBleGFtcGxlIGIzMDIuCj4+PiBAQCAtNjQsNiArNjQsMTEgQEAgSXQgYWNjZXB0 cyB0aGUgZm9sbG93aW5nIHZhcmlhbnRzOgo+Pj4gICAgIHBhcnRpdGlvbiB3aXRoIGEga25vd24g dW5pcXVlIGlkLgo+Pj4gICMuIDxtYWpvcj46PG1pbm9yPiBtYWpvciBhbmQgbWlub3IgbnVtYmVy IG9mIHRoZSBkZXZpY2Ugc2VwYXJhdGVkIGJ5IGEgY29sb24uCj4+PiAgCj4+PiArSXQgYWNjZXB0 cyB0aGUgZm9sbG93aW5nIHZhcmlhbnRzIGZvciBNVEQgZGV2aWNlOgo+Pj4gKwo+Pj4gKzEuIDxk ZXZpY2UgbmFtZT4gTVREIGRldmljZSBuYW1lLiAicHN0b3JlIiBpcyByZWNvbW1lbmRlZC4KPj4+ ICsjLiA8ZGV2aWNlIG51bWJlcj4gTVREIGRldmljZSBudW1iZXIuCj4+PiArCj4+PiAga21zZ19z aXplCj4+PiAgfn5+fn5+fn5+Cj4+PiAgCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvS2Nv bmZpZyBiL2RyaXZlcnMvbXRkL0tjb25maWcKPj4+IGluZGV4IDQyZDQwMWVhNjBlZS4uNmRkYWI3 OTYyMTZkIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9tdGQvS2NvbmZpZwo+Pj4gKysrIGIvZHJp dmVycy9tdGQvS2NvbmZpZwo+Pj4gQEAgLTE3MCw2ICsxNzAsMTYgQEAgY29uZmlnIE1URF9PT1BT Cj4+PiAgCSAgYnVmZmVyIGluIGEgZmxhc2ggcGFydGl0aW9uIHdoZXJlIGl0IGNhbiBiZSByZWFk IGJhY2sgYXQgc29tZQo+Pj4gIAkgIGxhdGVyIHBvaW50Lgo+Pj4gIAo+Pj4gK2NvbmZpZyBNVERf UFNUT1JFCj4+PiArCXRyaXN0YXRlICJMb2cgcGFuaWMvb29wcyB0byBhbiBNVEQgYnVmZmVyIGJh c2VkIG9uIHBzdG9yZSIKPj4+ICsJZGVwZW5kcyBvbiBQU1RPUkVfQkxLCj4+PiArCWhlbHAKPj4+ ICsJICBUaGlzIGVuYWJsZXMgcGFuaWMgYW5kIG9vcHMgbWVzc2FnZXMgdG8gYmUgbG9nZ2VkIHRv IGEgY2lyY3VsYXIKPj4+ICsJICBidWZmZXIgaW4gYSBmbGFzaCBwYXJ0aXRpb24gd2hlcmUgaXQg Y2FuIGJlIHJlYWQgYmFjayBhcyBmaWxlcyBhZnRlcgo+Pj4gKwkgIG1vdW50aW5nIHBzdG9yZSBm aWxlc3lzdGVtLgo+Pj4gKwo+Pj4gKwkgIElmIHVuc3VyZSwgc2F5IE4uCj4+PiArCj4+PiAgY29u ZmlnIE1URF9TV0FQCj4+PiAgCXRyaXN0YXRlICJTd2FwIG9uIE1URCBkZXZpY2Ugc3VwcG9ydCIK Pj4+ICAJZGVwZW5kcyBvbiBNVEQgJiYgU1dBUAo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRk L01ha2VmaWxlIGIvZHJpdmVycy9tdGQvTWFrZWZpbGUKPj4+IGluZGV4IDU2Y2M2MGNjYzQ3Ny4u NTkzZDA1OTNhMDM4IDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9tdGQvTWFrZWZpbGUKPj4+ICsr KyBiL2RyaXZlcnMvbXRkL01ha2VmaWxlCj4+PiBAQCAtMjAsNiArMjAsNyBAQCBvYmotJChDT05G SUdfUkZEX0ZUTCkJCSs9IHJmZF9mdGwubwo+Pj4gIG9iai0kKENPTkZJR19TU0ZEQykJCSs9IHNz ZmRjLm8KPj4+ICBvYmotJChDT05GSUdfU01fRlRMKQkJKz0gc21fZnRsLm8KPj4+ICBvYmotJChD T05GSUdfTVREX09PUFMpCQkrPSBtdGRvb3BzLm8KPj4+ICtvYmotJChDT05GSUdfTVREX1BTVE9S RSkJKz0gbXRkcHN0b3JlLm8KPj4+ICBvYmotJChDT05GSUdfTVREX1NXQVApCQkrPSBtdGRzd2Fw Lm8KPj4+ICAKPj4+ICBuZnRsLW9ianMJCTo9IG5mdGxjb3JlLm8gbmZ0bG1vdW50Lm8KPj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRwc3RvcmUuYyBiL2RyaXZlcnMvbXRkL210ZHBzdG9y ZS5jCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wNjA4 NGVmZjEwMDQKPj4+IC0tLSAvZGV2L251bGwKPj4+ICsrKyBiL2RyaXZlcnMvbXRkL210ZHBzdG9y ZS5jCj4+PiBAQCAtMCwwICsxLDU2MyBAQAo+Pj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCj4+PiArCj4+PiArI2RlZmluZSBkZXZfZm10KGZtdCkgIm10ZG9vcHMtcHN0b3Jl OiAiIGZtdAo+Pj4gKwo+Pj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPj4+ICsjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3BzdG9yZV9ibGsuaD4KPj4+ ICsjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMu aD4KPj4+ICsKPj4+ICtzdGF0aWMgc3RydWN0IG10ZHBzdG9yZV9jb250ZXh0IHsKPj4+ICsJaW50 IGluZGV4Owo+Pj4gKwlzdHJ1Y3QgcHN0b3JlX2Jsa19jb25maWcgaW5mbzsKPj4+ICsJc3RydWN0 IHBzdG9yZV9kZXZpY2VfaW5mbyBkZXY7Cj4+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwo+Pj4g Kwl1bnNpZ25lZCBsb25nICpybW1hcDsJCS8qIHJlbW92ZWQgYml0IG1hcCAqLwo+Pj4gKwl1bnNp Z25lZCBsb25nICp1c2VkbWFwOwkJLyogdXNlZCBiaXQgbWFwICovCj4+PiArCS8qCj4+PiArCSAq IHVzZWQgZm9yIHBhbmljIHdyaXRlCj4+PiArCSAqIEFzIHRoZXJlIGFyZSBubyBibG9ja19pc2Jh ZCBmb3IgcGFuaWMgY2FzZSwgd2Ugc2hvdWxkIGtlZXAgdGhpcwo+Pj4gKwkgKiBzdGF0dXMgYmVm b3JlIHBhbmljIHRvIGVuc3VyZSBwYW5pY193cml0ZSBub3QgZmFpbGVkLgo+Pj4gKwkgKi8KPj4+ ICsJdW5zaWduZWQgbG9uZyAqYmFkbWFwOwkJLyogYmFkIGJsb2NrIGJpdCBtYXAgKi8KPj4+ICt9 IG9vcHNfY3h0Owo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgbXRkcHN0b3JlX2Jsb2NrX2lzYmFkKHN0 cnVjdCBtdGRwc3RvcmVfY29udGV4dCAqY3h0LCBsb2ZmX3Qgb2ZmKQo+Pj4gK3sKPj4+ICsJaW50 IHJldDsKPj4+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBjeHQtPm10ZDsKPj4+ICsJdTY0IGJs a251bSA9IGRpdl91NjQob2ZmLCBtdGQtPmVyYXNlc2l6ZSk7Cj4+Cj4+IC0gICAgICAgdTY0IGJs a251bSA9IGRpdl91NjQob2ZmLCBtdGQtPmVyYXNlc2l6ZSk7Cj4+ICsgICAgICAgdTY0IGJsa251 bTsKPj4gKwo+PiArICAgICAgIG9mZiA9IEFMSUdOX0RPV04ob2ZmLCBtdGQtPmVyYXNlc2l6ZSk7 Cj4+ICsgICAgICAgYmxrbnVtID0gZGl2X3U2NChvZmYsIG10ZC0+ZXJhc2VzaXplKTsKPj4KPj4+ ICsKPj4+ICsJaWYgKHRlc3RfYml0KGJsa251bSwgY3h0LT5iYWRtYXApKQo+Pj4gKwkJcmV0dXJu IHRydWU7Cj4+PiArCXJldCA9IG10ZF9ibG9ja19pc2JhZChtdGQsIG9mZik7Cj4+PiArCWlmIChy ZXQgPCAwKSB7Cj4+PiArCQlkZXZfZXJyKCZtdGQtPmRldiwgIm10ZF9ibG9ja19pc2JhZCBmYWls ZWQsIGFib3J0aW5nXG4iKTsKPj4+ICsJCXJldHVybiByZXQ7Cj4+PiArCX0gZWxzZSBpZiAocmV0 ID4gMCkgewo+Pj4gKwkJc2V0X2JpdChibGtudW0sIGN4dC0+YmFkbWFwKTsKPj4+ICsJCXJldHVy biB0cnVlOwo+Pj4gKwl9Cj4+PiArCXJldHVybiBmYWxzZTsKPj4+ICt9Cj4+PiArCj4+PiArc3Rh dGljIGlubGluZSBpbnQgbXRkcHN0b3JlX3BhbmljX2Jsb2NrX2lzYmFkKHN0cnVjdCBtdGRwc3Rv cmVfY29udGV4dCAqY3h0LAo+Pj4gKwkJbG9mZl90IG9mZikKPj4+ICt7Cj4+PiArCXN0cnVjdCBt dGRfaW5mbyAqbXRkID0gY3h0LT5tdGQ7Cj4+PiArCXU2NCBibGtudW0gPSBkaXZfdTY0KG9mZiwg bXRkLT5lcmFzZXNpemUpOwo+Pj4gKwo+Pgo+PiAtICAgICAgIHU2NCBibGtudW0gPSBkaXZfdTY0 KG9mZiwgbXRkLT5lcmFzZXNpemUpOwo+PiArICAgICAgIHU2NCBibGtudW07Cj4+Cj4+ICsgICAg ICAgb2ZmID0gQUxJR05fRE9XTihvZmYsIG10ZC0+ZXJhc2VzaXplKTsKPj4gKyAgICAgICBibGtu dW0gPSBkaXZfdTY0KG9mZiwgbXRkLT5lcmFzZXNpemUpOwo+Pgo+Pj4gKwlyZXR1cm4gdGVzdF9i aXQoYmxrbnVtLCBjeHQtPmJhZG1hcCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbmxpbmUg dm9pZCBtdGRwc3RvcmVfbWFya191c2VkKHN0cnVjdCBtdGRwc3RvcmVfY29udGV4dCAqY3h0LAo+ Pj4gKwkJbG9mZl90IG9mZikKPj4+ICt7Cj4+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gY3h0 LT5tdGQ7Cj4+PiArCXU2NCB6b25lbnVtID0gZGl2X3U2NChvZmYsIGN4dC0+aW5mby5rbXNnX3Np emUpOwo+Pj4gKwo+Pj4gKwlkZXZfZGJnKCZtdGQtPmRldiwgIm1hcmsgem9uZSAlbGx1IHVzZWRc biIsIHpvbmVudW0pOwo+Pj4gKwlzZXRfYml0KHpvbmVudW0sIGN4dC0+dXNlZG1hcCk7Cj4+PiAr fQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGRwc3RvcmVfbWFya191bnVzZWQoc3Ry dWN0IG10ZHBzdG9yZV9jb250ZXh0ICpjeHQsCj4+PiArCQlsb2ZmX3Qgb2ZmKQo+Pj4gK3sKPj4+ ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBjeHQtPm10ZDsKPj4+ICsJdTY0IHpvbmVudW0gPSBk aXZfdTY0KG9mZiwgY3h0LT5pbmZvLmttc2dfc2l6ZSk7Cj4+PiArCj4+PiArCWRldl9kYmcoJm10 ZC0+ZGV2LCAibWFyayB6b25lICVsbHUgdW51c2VkXG4iLCB6b25lbnVtKTsKPj4+ICsJY2xlYXJf Yml0KHpvbmVudW0sIGN4dC0+dXNlZG1hcCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbmxp bmUgdm9pZCBtdGRwc3RvcmVfYmxvY2tfbWFya191bnVzZWQoc3RydWN0IG10ZHBzdG9yZV9jb250 ZXh0ICpjeHQsCj4+PiArCQlsb2ZmX3Qgb2ZmKQo+Pj4gK3sKPj4+ICsJc3RydWN0IG10ZF9pbmZv ICptdGQgPSBjeHQtPm10ZDsKPj4+ICsJdTY0IHpvbmVudW0gPSBkaXZfdTY0KG9mZiwgY3h0LT5p bmZvLmttc2dfc2l6ZSk7Cj4+PiArCXUzMiB6b25lY250ID0gY3h0LT5tdGQtPmVyYXNlc2l6ZSAv IGN4dC0+aW5mby5rbXNnX3NpemU7Cj4+PiArCj4+Cj4+IC0gICAgICAgdTY0IHpvbmVudW0gPSBk aXZfdTY0KG9mZiwgY3h0LT5pbmZvLmttc2dfc2l6ZSk7Cj4+IC0gICAgICAgdTMyIHpvbmVjbnQg PSBjeHQtPm10ZC0+ZXJhc2VzaXplIC8gY3h0LT5pbmZvLmttc2dfc2l6ZTsKPj4gKyAgICAgICB1 MzIgem9uZWNudCA9IG10ZC0+ZXJhc2VzaXplIC8gY3h0LT5pbmZvLmttc2dfc2l6ZTsKPj4gKyAg ICAgICB1NjQgem9uZW51bTsKPj4KPj4gKyAgICAgICBvZmYgPSBBTElHTl9ET1dOKG9mZiwgbXRk LT5lcmFzZXNpemUpOwo+PiArICAgICAgIHpvbmVudW0gPSBkaXZfdTY0KG9mZiwgY3h0LT5pbmZv Lmttc2dfc2l6ZSk7Cj4+Cj4+PiArCXdoaWxlICh6b25lY250ID4gMCkgewo+Pj4gKwkJZGV2X2Ri ZygmbXRkLT5kZXYsICJtYXJrIHpvbmUgJWxsdSB1bnVzZWRcbiIsIHpvbmVudW0pOwo+Pj4gKwkJ Y2xlYXJfYml0KHpvbmVudW0sIGN4dC0+dXNlZG1hcCk7Cj4+PiArCQl6b25lbnVtKys7Cj4+PiAr CQl6b25lY250LS07Cj4+PiArCX0KPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGlubGluZSBpbnQg bXRkcHN0b3JlX2lzX3VzZWQoc3RydWN0IG10ZHBzdG9yZV9jb250ZXh0ICpjeHQsIGxvZmZfdCBv ZmYpCj4+PiArewo+Pj4gKwl1NjQgem9uZW51bSA9IGRpdl91NjQob2ZmLCBjeHQtPmluZm8ua21z Z19zaXplKTsKPj4+ICsJdTY0IGJsa251bSA9IGRpdl91NjQob2ZmLCBjeHQtPm10ZC0+ZXJhc2Vz aXplKTsKPj4+ICsKPj4+ICsJaWYgKHRlc3RfYml0KGJsa251bSwgY3h0LT5iYWRtYXApKQo+Pj4g KwkJcmV0dXJuIHRydWU7Cj4+PiArCXJldHVybiB0ZXN0X2JpdCh6b25lbnVtLCBjeHQtPnVzZWRt YXApOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IG10ZHBzdG9yZV9ibG9ja19pc191c2Vk KHN0cnVjdCBtdGRwc3RvcmVfY29udGV4dCAqY3h0LAo+Pj4gKwkJbG9mZl90IG9mZikKPj4+ICt7 Cj4+PiArCXU2NCB6b25lbnVtID0gZGl2X3U2NChvZmYsIGN4dC0+aW5mby5rbXNnX3NpemUpOwo+ Pj4gKwl1MzIgem9uZWNudCA9IGN4dC0+bXRkLT5lcmFzZXNpemUgLyBjeHQtPmluZm8ua21zZ19z aXplOwo+Pj4gKwo+Pgo+PiAtICAgICAgIHU2NCB6b25lbnVtID0gZGl2X3U2NChvZmYsIGN4dC0+ aW5mby5rbXNnX3NpemUpOwo+PiAtICAgICAgIHUzMiB6b25lY250ID0gY3h0LT5tdGQtPmVyYXNl c2l6ZSAvIGN4dC0+aW5mby5rbXNnX3NpemU7Cj4+ICsgICAgICAgc3RydWN0IG10ZF9pbmZvICpt dGQgPSBjeHQtPm10ZDsKPj4gKyAgICAgICB1MzIgem9uZWNudCA9IG10ZC0+ZXJhc2VzaXplIC8g Y3h0LT5pbmZvLmttc2dfc2l6ZTsKPj4gKyAgICAgICB1NjQgem9uZW51bTsKPj4KPj4gKyAgICAg ICBvZmYgPSBBTElHTl9ET1dOKG9mZiwgbXRkLT5lcmFzZXNpemUpOwo+PiArICAgICAgIHpvbmVu dW0gPSBkaXZfdTY0KG9mZiwgY3h0LT5pbmZvLmttc2dfc2l6ZSk7Cj4+Cj4+PiArCXdoaWxlICh6 b25lY250ID4gMCkgewo+Pj4gKwkJaWYgKHRlc3RfYml0KHpvbmVudW0sIGN4dC0+dXNlZG1hcCkp Cj4+PiArCQkJcmV0dXJuIHRydWU7Cj4+PiArCQl6b25lbnVtKys7Cj4+PiArCQl6b25lY250LS07 Cj4+PiArCX0KPj4+ICsJcmV0dXJuIGZhbHNlOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50 IG10ZHBzdG9yZV9pc19lbXB0eShzdHJ1Y3QgbXRkcHN0b3JlX2NvbnRleHQgKmN4dCwgY2hhciAq YnVmLAo+Pj4gKwkJc2l6ZV90IHNpemUpCj4+PiArewo+Pj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10 ZCA9IGN4dC0+bXRkOwo+Pj4gKwlzaXplX3Qgc3o7Cj4+PiArCWludCBpOwo+Pj4gKwo+Pj4gKwlz eiA9IG1pbl90KHVpbnQzMl90LCBzaXplLCBtdGQtPndyaXRlc2l6ZSAvIDQpOwo+Pj4gKwlmb3Ig KGkgPSAwOyBpIDwgc3o7IGkrKykgewo+Pj4gKwkJaWYgKGJ1ZltpXSAhPSAoY2hhcikweEZGKQo+ Pj4gKwkJCXJldHVybiBmYWxzZTsKPj4+ICsJfQo+Pj4gKwlyZXR1cm4gdHJ1ZTsKPj4+ICt9Cj4+ PiArCj4+PiArc3RhdGljIHZvaWQgbXRkcHN0b3JlX21hcmtfcmVtb3ZlZChzdHJ1Y3QgbXRkcHN0 b3JlX2NvbnRleHQgKmN4dCwgbG9mZl90IG9mZikKPj4+ICt7Cj4+PiArCXN0cnVjdCBtdGRfaW5m byAqbXRkID0gY3h0LT5tdGQ7Cj4+PiArCXU2NCB6b25lbnVtID0gZGl2X3U2NChvZmYsIGN4dC0+ aW5mby5rbXNnX3NpemUpOwo+Pj4gKwo+Pj4gKwlkZXZfZGJnKCZtdGQtPmRldiwgIm1hcmsgem9u ZSAlbGx1IHJlbW92ZWRcbiIsIHpvbmVudW0pOwo+Pj4gKwlzZXRfYml0KHpvbmVudW0sIGN4dC0+ cm1tYXApOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBtdGRwc3RvcmVfYmxvY2tfY2xl YXJfcmVtb3ZlZChzdHJ1Y3QgbXRkcHN0b3JlX2NvbnRleHQgKmN4dCwKPj4+ICsJCWxvZmZfdCBv ZmYpCj4+PiArewo+Pj4gKwl1NjQgem9uZW51bSA9IGRpdl91NjQob2ZmLCBjeHQtPmluZm8ua21z Z19zaXplKTsKPj4+ICsJdTMyIHpvbmVjbnQgPSBjeHQtPm10ZC0+ZXJhc2VzaXplIC8gY3h0LT5p bmZvLmttc2dfc2l6ZTsKPj4+ICsKPj4KPj4gLSAgICAgICB1NjQgem9uZW51bSA9IGRpdl91NjQo b2ZmLCBjeHQtPmluZm8ua21zZ19zaXplKTsKPj4gLSAgICAgICB1MzIgem9uZWNudCA9IGN4dC0+ bXRkLT5lcmFzZXNpemUgLyBjeHQtPmluZm8ua21zZ19zaXplOwo+PiArICAgICAgIHN0cnVjdCBt dGRfaW5mbyAqbXRkID0gY3h0LT5tdGQ7Cj4+ICsgICAgICAgdTMyIHpvbmVjbnQgPSBtdGQtPmVy YXNlc2l6ZSAvIGN4dC0+aW5mby5rbXNnX3NpemU7Cj4+ICsgICAgICAgdTY0IHpvbmVudW07Cj4+ Cj4+ICsgICAgICAgb2ZmID0gQUxJR05fRE9XTihvZmYsIG10ZC0+ZXJhc2VzaXplKTsKPj4gKyAg ICAgICB6b25lbnVtID0gZGl2X3U2NChvZmYsIGN4dC0+aW5mby5rbXNnX3NpemUpOwo+Pgo+Pj4g Kwl3aGlsZSAoem9uZWNudCA+IDApIHsKPj4+ICsJCWNsZWFyX2JpdCh6b25lbnVtLCBjeHQtPnJt bWFwKTsKPj4+ICsJCXpvbmVudW0rKzsKPj4+ICsJCXpvbmVjbnQtLTsKPj4+ICsJfQo+Pj4gK30K Pj4+ICsKPj4+ICtzdGF0aWMgaW50IG10ZHBzdG9yZV9ibG9ja19pc19yZW1vdmVkKHN0cnVjdCBt dGRwc3RvcmVfY29udGV4dCAqY3h0LAo+Pj4gKwkJbG9mZl90IG9mZikKPj4+ICt7Cj4+PiArCXU2 NCB6b25lbnVtID0gZGl2X3U2NChvZmYsIGN4dC0+aW5mby5rbXNnX3NpemUpOwo+Pj4gKwl1MzIg em9uZWNudCA9IGN4dC0+bXRkLT5lcmFzZXNpemUgLyBjeHQtPmluZm8ua21zZ19zaXplOwo+Pj4g Kwo+Pgo+PiAtICAgICAgIHU2NCB6b25lbnVtID0gZGl2X3U2NChvZmYsIGN4dC0+aW5mby5rbXNn X3NpemUpOwo+PiAtICAgICAgIHUzMiB6b25lY250ID0gY3h0LT5tdGQtPmVyYXNlc2l6ZSAvIGN4 dC0+aW5mby5rbXNnX3NpemU7Cj4+ICsgICAgICAgc3RydWN0IG10ZF9pbmZvICptdGQgPSBjeHQt Pm10ZDsKPj4gKyAgICAgICB1MzIgem9uZWNudCA9IG10ZC0+ZXJhc2VzaXplIC8gY3h0LT5pbmZv Lmttc2dfc2l6ZTsKPj4gKyAgICAgICB1NjQgem9uZW51bTsKPj4KPj4gKyAgICAgICBvZmYgPSBB TElHTl9ET1dOKG9mZiwgbXRkLT5lcmFzZXNpemUpOwo+PiArICAgICAgIHpvbmVudW0gPSBkaXZf dTY0KG9mZiwgY3h0LT5pbmZvLmttc2dfc2l6ZSk7Cj4+Cj4+PiArCXdoaWxlICh6b25lY250ID4g MCkgewo+Pj4gKwkJaWYgKHRlc3RfYml0KHpvbmVudW0sIGN4dC0+cm1tYXApKQo+Pj4gKwkJCXJl dHVybiB0cnVlOwo+Pj4gKwkJem9uZW51bSsrOwo+Pj4gKwkJem9uZWNudC0tOwo+Pj4gKwl9Cj4+ PiArCXJldHVybiBmYWxzZTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBtdGRwc3RvcmVf ZXJhc2VfZG8oc3RydWN0IG10ZHBzdG9yZV9jb250ZXh0ICpjeHQsIGxvZmZfdCBvZmYpCj4+PiAr ewo+Pj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGN4dC0+bXRkOwo+Pj4gKwlzdHJ1Y3QgZXJh c2VfaW5mbyBlcmFzZTsKPj4+ICsJaW50IHJldDsKPj4+ICsKPj4KPj4gCSBpbnQgcmV0Owo+Pgo+ PiArICAgICAgIG9mZiA9IEFMSUdOX0RPV04ob2ZmLCBjeHQtPm10ZC0+ZXJhc2VzaXplKTsKPj4g ICAgICAgICBkZXZfZGJnKCZtdGQtPmRldiwgInRyeSB0byBlcmFzZSBvZmYgMHglbGx4XG4iLCBv ZmYpOwo+Pgo+Pj4gKwlkZXZfZGJnKCZtdGQtPmRldiwgInRyeSB0byBlcmFzZSBvZmYgMHglbGx4 XG4iLCBvZmYpOwo+Pj4gKwllcmFzZS5sZW4gPSBjeHQtPm10ZC0+ZXJhc2VzaXplOwo+Pj4gKwll cmFzZS5hZGRyID0gb2ZmOwo+Pj4gKwlyZXQgPSBtdGRfZXJhc2UoY3h0LT5tdGQsICZlcmFzZSk7 Cj4+PiArCWlmICghcmV0KQo+Pj4gKwkJbXRkcHN0b3JlX2Jsb2NrX2NsZWFyX3JlbW92ZWQoY3h0 LCBvZmYpOwo+Pj4gKwllbHNlCj4+PiArCQlkZXZfZXJyKCZtdGQtPmRldiwgImVyYXNlIG9mIHJl Z2lvbiBbMHglbGx4LCAweCVsbHhdIG9uIFwiJXNcIiBmYWlsZWRcbiIsCj4+PiArCQkgICAgICAg KHVuc2lnbmVkIGxvbmcgbG9uZyllcmFzZS5hZGRyLAo+Pj4gKwkJICAgICAgICh1bnNpZ25lZCBs b25nIGxvbmcpZXJhc2UubGVuLCBjeHQtPmluZm8uZGV2aWNlKTsKPj4+ICsJcmV0dXJuIHJldDsK Pj4+ICt9Cj4+PiArCj4+PiArLyoKPj4+ICsgKiBjYWxsZWQgd2hpbGUgcmVtb3ZpbmcgZmlsZQo+ Pj4gKyAqCj4+PiArICogQXZvaWRpbmcgb3ZlciBlcmFzaW5nLCBkbyBlcmFzZSBibG9jayBvbmx5 IHdoZW4gdGhlIHdob2xlIGJsb2NrIGlzIHVudXNlZC4KPj4+ICsgKiBJZiB0aGUgYmxvY2sgY29u dGFpbnMgdmFsaWQgbG9nLCBkbyBlcmFzZSBsYXppbHkgb24gZmx1c2hfcmVtb3ZlZCgpIHdoZW4K Pj4+ICsgKiB1bnJlZ2lzdGVyLgo+Pj4gKyAqLwo+Pj4gK3N0YXRpYyBzc2l6ZV90IG10ZHBzdG9y ZV9lcmFzZShzaXplX3Qgc2l6ZSwgbG9mZl90IG9mZikKPj4+ICt7Cj4+PiArCXN0cnVjdCBtdGRw c3RvcmVfY29udGV4dCAqY3h0ID0gJm9vcHNfY3h0Owo+Pj4gKwo+Pj4gKwlpZiAobXRkcHN0b3Jl X2Jsb2NrX2lzYmFkKGN4dCwgb2ZmKSkKPj4+ICsJCXJldHVybiAtRUlPOwo+Pj4gKwo+Pj4gKwlt dGRwc3RvcmVfbWFya191bnVzZWQoY3h0LCBvZmYpOwo+Pj4gKwo+Pj4gKwkvKiBJZiB0aGUgYmxv Y2sgc3RpbGwgaGFzIHZhbGlkIGRhdGEsIG10ZHBzdG9yZSBkbyBlcmFzZSBsYXppbHkgKi8KPj4+ ICsJaWYgKGxpa2VseShtdGRwc3RvcmVfYmxvY2tfaXNfdXNlZChjeHQsIG9mZikpKSB7Cj4+PiAr CQltdGRwc3RvcmVfbWFya19yZW1vdmVkKGN4dCwgb2ZmKTsKPj4+ICsJCXJldHVybiAwOwo+Pj4g Kwl9Cj4+PiArCj4+PiArCS8qIGFsbCB6b25lcyBhcmUgdW51c2VkLCBlcmFzZSBpdCAqLwo+Pj4g KwlvZmYgPSBBTElHTl9ET1dOKG9mZiwgY3h0LT5tdGQtPmVyYXNlc2l6ZSk7Cj4+Cj4+ICAgICAg ICAgLyogYWxsIHpvbmVzIGFyZSB1bnVzZWQsIGVyYXNlIGl0ICovCj4+IC0gICAgICAgb2ZmID0g QUxJR05fRE9XTihvZmYsIGN4dC0+bXRkLT5lcmFzZXNpemUpOwo+PiAgICAgICAgIHJldHVybiBt dGRwc3RvcmVfZXJhc2VfZG8oY3h0LCBvZmYpOwo+Pgo+Pj4gKwlyZXR1cm4gbXRkcHN0b3JlX2Vy YXNlX2RvKGN4dCwgb2ZmKTsKPj4+ICt9Cj4+PiArCj4+PiArLyoKPj4+ICsgKiBXaGF0IGlzIHNl Y3VyaXR5IGZvciBtdGRwc3RvcmU/Cj4+PiArICogQXMgdGhlcmUgaXMgbm8gZXJhc2UgZm9yIHBh bmljIGNhc2UsIHdlIHNob3VsZCBlbnN1cmUgYXQgbGVhc3Qgb25lIHpvbmUKPj4+ICsgKiBpcyB3 cml0YWJsZS4gT3RoZXJ3aXNlLCBwYW5pYyB3cml0ZSB3aWxsIGZhaWwuCj4+PiArICogSWYgem9u ZSBpcyB1c2VkLCB3cml0ZSBvcGVyYXRpb24gd2lsbCByZXR1cm4gLUVOT01TRywgd2hpY2ggbWVh bnMgdGhhdAo+Pj4gKyAqIHBzdG9yZS9ibGsgd2lsbCB0cnkgb25lIGJ5IG9uZSB1bnRpbCBnZXRz IGFuIGVtcHR5IHpvbmUuIFNvLCBpdCBpcyBub3QKPj4+ICsgKiBuZWVkZWQgdG8gZW5zdXJlIHRo ZSBuZXh0IHpvbmUgaXMgZW1wdHksIGJ1dCBhdCBsZWFzdCBvbmUuCj4+PiArICovCj4+PiArc3Rh dGljIGludCBtdGRwc3RvcmVfc2VjdXJpdHkoc3RydWN0IG10ZHBzdG9yZV9jb250ZXh0ICpjeHQs IGxvZmZfdCBvZmYpCj4+PiArewo+Pj4gKwlpbnQgcmV0ID0gMCwgaTsKPj4+ICsJc3RydWN0IG10 ZF9pbmZvICptdGQgPSBjeHQtPm10ZDsKPj4+ICsJdTMyIHpvbmVudW0gPSAodTMyKWRpdl91NjQo b2ZmLCBjeHQtPmluZm8ua21zZ19zaXplKTsKPj4+ICsJdTMyIHpvbmVjbnQgPSAodTMyKWRpdl91 NjQoY3h0LT5tdGQtPnNpemUsIGN4dC0+aW5mby5rbXNnX3NpemUpOwo+Pj4gKwl1MzIgYmxrY250 ID0gKHUzMilkaXZfdTY0KGN4dC0+bXRkLT5zaXplLCBjeHQtPm10ZC0+ZXJhc2VzaXplKTsKPj4+ ICsJdTMyIGVyYXNlc2l6ZSA9IGN4dC0+bXRkLT5lcmFzZXNpemU7Cj4+PiArCj4+PiArCWZvciAo aSA9IDA7IGkgPCB6b25lY250OyBpKyspIHsKPj4+ICsJCXUzMiBudW0gPSAoem9uZW51bSArIGkp ICUgem9uZWNudDsKPj4+ICsKPj4+ICsJCS8qIGZvdW5kIGVtcHR5IHpvbmUgKi8KPj4+ICsJCWlm ICghdGVzdF9iaXQobnVtLCBjeHQtPnVzZWRtYXApKQo+Pj4gKwkJCXJldHVybiAwOwo+Pj4gKwl9 Cj4+PiArCj4+PiArCS8qIElmIHRoZXJlIGlzIG5vIGFueSBlbXB0eSB6b25lLCB3ZSBoYXZlIG5v IHdheSBidXQgdG8gZG8gZXJhc2UgKi8KPj4+ICsJb2ZmID0gQUxJR05fRE9XTihvZmYsIGVyYXNl c2l6ZSk7Cj4+PiArCXdoaWxlIChibGtjbnQtLSkgewo+Pj4gKwkJZGl2NjRfdTY0X3JlbShvZmYg KyBlcmFzZXNpemUsIGN4dC0+bXRkLT5zaXplLCAodTY0ICopJm9mZik7Cj4+PiArCj4+PiArCQlp ZiAobXRkcHN0b3JlX2Jsb2NrX2lzYmFkKGN4dCwgb2ZmKSkKPj4+ICsJCQljb250aW51ZTsKPj4+ ICsKPj4+ICsJCXJldCA9IG10ZHBzdG9yZV9lcmFzZV9kbyhjeHQsIG9mZik7Cj4+PiArCQlpZiAo IXJldCkgewo+Pj4gKwkJCW10ZHBzdG9yZV9ibG9ja19tYXJrX3VudXNlZChjeHQsIG9mZik7Cj4+ PiArCQkJYnJlYWs7Cj4+PiArCQl9Cj4+PiArCX0KPj4+ICsKPj4+ICsJaWYgKHJldCkKPj4+ICsJ CWRldl9lcnIoJm10ZC0+ZGV2LCAiYWxsIGJsb2NrcyBiYWQhXG4iKTsKPj4+ICsJZGV2X2RiZygm bXRkLT5kZXYsICJlbmQgc2VjdXJpdHlcbiIpOwo+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4gK30KPj4+ ICsKPj4+ICtzdGF0aWMgc3NpemVfdCBtdGRwc3RvcmVfd3JpdGUoY29uc3QgY2hhciAqYnVmLCBz aXplX3Qgc2l6ZSwgbG9mZl90IG9mZikKPj4+ICt7Cj4+PiArCXN0cnVjdCBtdGRwc3RvcmVfY29u dGV4dCAqY3h0ID0gJm9vcHNfY3h0Owo+Pj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGN4dC0+ bXRkOwo+Pj4gKwlzaXplX3QgcmV0bGVuOwo+Pj4gKwlpbnQgcmV0Owo+Pj4gKwo+Pj4gKwlpZiAo bXRkcHN0b3JlX2Jsb2NrX2lzYmFkKGN4dCwgb2ZmKSkKPj4+ICsJCXJldHVybiAtRU5PTVNHOwo+ Pj4gKwo+Pj4gKwkvKiB6b25lIGlzIHVzZWQsIHBsZWFzZSB0cnkgbmV4dCBvbmUgKi8KPj4+ICsJ aWYgKG10ZHBzdG9yZV9pc191c2VkKGN4dCwgb2ZmKSkKPj4+ICsJCXJldHVybiAtRU5PTVNHOwo+ Pj4gKwo+Pj4gKwlkZXZfZGJnKCZtdGQtPmRldiwgInRyeSB0byB3cml0ZSBvZmYgMHglbGx4IHNp emUgJXp1XG4iLCBvZmYsIHNpemUpOwo+Pj4gKwlyZXQgPSBtdGRfd3JpdGUoY3h0LT5tdGQsIG9m Ziwgc2l6ZSwgJnJldGxlbiwgKHVfY2hhciAqKWJ1Zik7Cj4+PiArCWlmIChyZXQgPCAwIHx8IHJl dGxlbiAhPSBzaXplKSB7Cj4+PiArCQlkZXZfZXJyKCZtdGQtPmRldiwgIndyaXRlIGZhaWx1cmUg YXQgJWxsZCAoJXp1IG9mICV6dSB3cml0dGVuKSwgZXJyICVkXG4iLAo+Pj4gKwkJCQlvZmYsIHJl dGxlbiwgc2l6ZSwgcmV0KTsKPj4+ICsJCXJldHVybiAtRUlPOwo+Pj4gKwl9Cj4+PiArCW10ZHBz dG9yZV9tYXJrX3VzZWQoY3h0LCBvZmYpOwo+Pj4gKwo+Pj4gKwltdGRwc3RvcmVfc2VjdXJpdHko Y3h0LCBvZmYpOwo+Pj4gKwlyZXR1cm4gcmV0bGVuOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg aW5saW5lIGJvb2wgbXRkcHN0b3JlX2lzX2lvX2Vycm9yKGludCByZXQpCj4+PiArewo+Pj4gKwly ZXR1cm4gcmV0IDwgMCAmJiAhbXRkX2lzX2JpdGZsaXAocmV0KSAmJiAhbXRkX2lzX2VjY2Vycihy ZXQpOwo+Pj4gK30KPj4+ICsKPj4+ICsvKgo+Pj4gKyAqIEFsbCB6b25lcyB3aWxsIGJlIHJlYWQg YXMgcHN0b3JlL2JsayB3aWxsIHJlYWQgem9uZSBvbmUgYnkgb25lIHdoZW4gZG8KPj4+ICsgKiBy ZWNvdmVyLgo+Pj4gKyAqLwo+Pj4gK3N0YXRpYyBzc2l6ZV90IG10ZHBzdG9yZV9yZWFkKGNoYXIg KmJ1Ziwgc2l6ZV90IHNpemUsIGxvZmZfdCBvZmYpCj4+PiArewo+Pj4gKwlzdHJ1Y3QgbXRkcHN0 b3JlX2NvbnRleHQgKmN4dCA9ICZvb3BzX2N4dDsKPj4+ICsJc3RydWN0IG10ZF9pbmZvICptdGQg PSBjeHQtPm10ZDsKPj4+ICsJc2l6ZV90IHJldGxlbiwgZG9uZTsKPj4+ICsJaW50IHJldDsKPj4+ ICsKPj4+ICsJaWYgKG10ZHBzdG9yZV9ibG9ja19pc2JhZChjeHQsIG9mZikpCj4+PiArCQlyZXR1 cm4gLUVOT01TRzsKPj4+ICsKPj4+ICsJZGV2X2RiZygmbXRkLT5kZXYsICJ0cnkgdG8gcmVhZCBv ZmYgMHglbGx4IHNpemUgJXp1XG4iLCBvZmYsIHNpemUpOwo+Pj4gKwlmb3IgKGRvbmUgPSAwLCBy ZXRsZW4gPSAwOyBkb25lIDwgc2l6ZTsgZG9uZSArPSByZXRsZW4pIHsKPj4+ICsJCXJldGxlbiA9 IDA7Cj4+PiArCj4+PiArCQlyZXQgPSBtdGRfcmVhZChjeHQtPm10ZCwgb2ZmICsgZG9uZSwgc2l6 ZSAtIGRvbmUsICZyZXRsZW4sCj4+PiArCQkJCSh1X2NoYXIgKilidWYgKyBkb25lKTsKPj4+ICsJ CWlmIChtdGRwc3RvcmVfaXNfaW9fZXJyb3IocmV0KSkgewo+Pj4gKwkJCWRldl9lcnIoJm10ZC0+ ZGV2LCAicmVhZCBmYWlsdXJlIGF0ICVsbGQgKCV6dSBvZiAlenUgcmVhZCksIGVyciAlZFxuIiwK Pj4+ICsJCQkJCW9mZiArIGRvbmUsIHJldGxlbiwgc2l6ZSAtIGRvbmUsIHJldCk7Cj4+PiArCQkJ LyogdGhlIHpvbmUgbWF5IGJlIGJyb2tlbiwgdHJ5IG5leHQgb25lICovCj4+PiArCQkJcmV0dXJu IC1FTk9NU0c7Cj4+PiArCQl9Cj4+PiArCj4+PiArCQkvKgo+Pj4gKwkJICogRUNDIGVycm9yLiBU aGUgaW1wYWN0IG9uIGxvZyBkYXRhIGlzIHNvIHNtYWxsLiBNYXliZSB3ZSBjYW4KPj4+ICsJCSAq IHN0aWxsIHJlYWQgaXQgYW5kIHRyeSB0byB1bmRlcnN0YW5kLiBTbyBtdGRwc3RvcmUganVzdCBo YW5kcwo+Pj4gKwkJICogb3ZlciB3aGF0IGl0IGdldHMgYW5kIHVzZXIgY2FuIGp1ZGdlIHdoZXRo ZXIgdGhlIGRhdGEgaXMKPj4+ICsJCSAqIHZhbGlkIG9yIG5vdC4KPj4+ICsJCSAqLwo+Pj4gKwkJ aWYgKG10ZF9pc19lY2NlcnIocmV0KSkgewo+Pj4gKwkJCWRldl9lcnIoJm10ZC0+ZGV2LCAiZWNj IGVycm9yIGF0ICVsbGQgKCV6dSBvZiAlenUgcmVhZCksIGVyciAlZFxuIiwKPj4+ICsJCQkJCW9m ZiArIGRvbmUsIHJldGxlbiwgc2l6ZSAtIGRvbmUsIHJldCk7Cj4+PiArCQkJLyogZHJpdmVyIG1h eSBub3Qgc2V0IHJldGxlbiB3aGVuIGVjYyBlcnJvciAqLwo+Pj4gKwkJCXJldGxlbiA9IHJldGxl biA9PSAwID8gc2l6ZSAtIGRvbmUgOiByZXRsZW47Cj4+PiArCQl9Cj4+PiArCX0KPj4+ICsKPj4+ ICsJaWYgKG10ZHBzdG9yZV9pc19lbXB0eShjeHQsIGJ1Ziwgc2l6ZSkpCj4+PiArCQltdGRwc3Rv cmVfbWFya191bnVzZWQoY3h0LCBvZmYpOwo+Pj4gKwllbHNlCj4+PiArCQltdGRwc3RvcmVfbWFy a191c2VkKGN4dCwgb2ZmKTsKPj4+ICsKPj4+ICsJbXRkcHN0b3JlX3NlY3VyaXR5KGN4dCwgb2Zm KTsKPj4+ICsJcmV0dXJuIHJldGxlbjsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHNzaXplX3Qg bXRkcHN0b3JlX3BhbmljX3dyaXRlKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGxvZmZf dCBvZmYpCj4+PiArewo+Pj4gKwlzdHJ1Y3QgbXRkcHN0b3JlX2NvbnRleHQgKmN4dCA9ICZvb3Bz X2N4dDsKPj4+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBjeHQtPm10ZDsKPj4+ICsJc2l6ZV90 IHJldGxlbjsKPj4+ICsJaW50IHJldDsKPj4+ICsKPj4+ICsJaWYgKG10ZHBzdG9yZV9wYW5pY19i bG9ja19pc2JhZChjeHQsIG9mZikpCj4+PiArCQlyZXR1cm4gLUVOT01TRzsKPj4+ICsKPj4+ICsJ Lyogem9uZSBpcyB1c2VkLCBwbGVhc2UgdHJ5IG5leHQgb25lICovCj4+PiArCWlmIChtdGRwc3Rv cmVfaXNfdXNlZChjeHQsIG9mZikpCj4+PiArCQlyZXR1cm4gLUVOT01TRzsKPj4+ICsKPj4+ICsJ cmV0ID0gbXRkX3BhbmljX3dyaXRlKGN4dC0+bXRkLCBvZmYsIHNpemUsICZyZXRsZW4sICh1X2No YXIgKilidWYpOwo+Pj4gKwlpZiAocmV0IDwgMCB8fCBzaXplICE9IHJldGxlbikgewo+Pj4gKwkJ ZGV2X2VycigmbXRkLT5kZXYsICJwYW5pYyB3cml0ZSBmYWlsdXJlIGF0ICVsbGQgKCV6dSBvZiAl enUgcmVhZCksIGVyciAlZFxuIiwKPj4+ICsJCQkJb2ZmLCByZXRsZW4sIHNpemUsIHJldCk7Cj4+ PiArCQlyZXR1cm4gLUVJTzsKPj4+ICsJfQo+Pj4gKwltdGRwc3RvcmVfbWFya191c2VkKGN4dCwg b2ZmKTsKPj4+ICsKPj4+ICsJcmV0dXJuIHJldGxlbjsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGlj IHZvaWQgbXRkcHN0b3JlX25vdGlmeV9hZGQoc3RydWN0IG10ZF9pbmZvICptdGQpCj4+PiArewo+ Pj4gKwlpbnQgcmV0Owo+Pj4gKwlzdHJ1Y3QgbXRkcHN0b3JlX2NvbnRleHQgKmN4dCA9ICZvb3Bz X2N4dDsKPj4+ICsJc3RydWN0IHBzdG9yZV9ibGtfY29uZmlnICppbmZvID0gJmN4dC0+aW5mbzsK Pj4+ICsJdW5zaWduZWQgbG9uZyBsb25nY250Owo+Pj4gKwo+Pj4gKwlpZiAoIXN0cmNtcChtdGQt Pm5hbWUsIGluZm8tPmRldmljZSkpCj4+PiArCQljeHQtPmluZGV4ID0gbXRkLT5pbmRleDsKPj4+ ICsKPj4+ICsJaWYgKG10ZC0+aW5kZXggIT0gY3h0LT5pbmRleCB8fCBjeHQtPmluZGV4IDwgMCkK Pj4+ICsJCXJldHVybjsKPj4+ICsKPj4+ICsJZGV2X2RiZygmbXRkLT5kZXYsICJmb3VuZCBtYXRj aGluZyBNVEQgZGV2aWNlICVzXG4iLCBtdGQtPm5hbWUpOwo+Pj4gKwo+Pj4gKwlpZiAobXRkLT5z aXplIDwgaW5mby0+a21zZ19zaXplICogMikgewo+Pj4gKwkJZGV2X2VycigmbXRkLT5kZXYsICJN VEQgcGFydGl0aW9uICVkIG5vdCBiaWcgZW5vdWdoXG4iLAo+Pj4gKwkJCQltdGQtPmluZGV4KTsK Pj4+ICsJCXJldHVybjsKPj4+ICsJfQo+Pj4gKwkvKgo+Pj4gKwkgKiBrbXNnX3NpemUgbXVzdCBi ZSBhbGlnbmVkIHRvIDQwOTYgQnl0ZXMsIHdoaWNoIGlzIGxpbWl0ZWQgYnkKPj4+ICsJICogcHNi bGsuIFRoZSBkZWZhdWx0IHZhbHVlIG9mIGttc2dfc2l6ZSBpcyA2NEtCLiBJZiBrbXNnX3NpemUK Pj4+ICsJICogaXMgbGFyZ2VyIHRoYW4gZXJhc2VzaXplLCBzb21lIGVycm9ycyB3aWxsIG9jY3Vy IHNpbmNlIG10ZHBzb3RyZQo+Pj4gKwkgKiBpcyBkZXNpZ25lZCBvbiBpdC4KPj4+ICsJICovCj4+ PiArCWlmIChtdGQtPmVyYXNlc2l6ZSA8IGluZm8tPmttc2dfc2l6ZSkgewo+Pj4gKwkJZGV2X2Vy cigmbXRkLT5kZXYsICJlcmFzZWJsb2NrIHNpemUgb2YgTVREIHBhcnRpdGlvbiAlZCB0b28gc21h bGxcbiIsCj4+PiArCQkJCW10ZC0+aW5kZXgpOwo+Pj4gKwkJcmV0dXJuOwo+Pj4gKwl9Cj4+PiAr CWlmICh1bmxpa2VseShpbmZvLT5rbXNnX3NpemUgJSBtdGQtPndyaXRlc2l6ZSkpIHsKPj4+ICsJ CWRldl9lcnIoJm10ZC0+ZGV2LCAicmVjb3JkIHNpemUgJWx1IEtCIG11c3QgYWxpZ24gdG8gd3Jp dGUgc2l6ZSAlZCBLQlxuIiwKPj4+ICsJCQkJaW5mby0+a21zZ19zaXplIC8gMTAyNCwKPj4+ICsJ CQkJbXRkLT53cml0ZXNpemUgLyAxMDI0KTsKPj4+ICsJCXJldHVybjsKPj4+ICsJfQo+Pj4gKwo+ Pj4gKwlsb25nY250ID0gQklUU19UT19MT05HUyhkaXZfdTY0KG10ZC0+c2l6ZSwgaW5mby0+a21z Z19zaXplKSk7Cj4+PiArCWN4dC0+cm1tYXAgPSBrY2FsbG9jKGxvbmdjbnQsIHNpemVvZihsb25n KSwgR0ZQX0tFUk5FTCk7Cj4+PiArCWN4dC0+dXNlZG1hcCA9IGtjYWxsb2MobG9uZ2NudCwgc2l6 ZW9mKGxvbmcpLCBHRlBfS0VSTkVMKTsKPj4+ICsKPj4+ICsJbG9uZ2NudCA9IEJJVFNfVE9fTE9O R1MoZGl2X3U2NChtdGQtPnNpemUsIG10ZC0+ZXJhc2VzaXplKSk7Cj4+PiArCWN4dC0+YmFkbWFw ID0ga2NhbGxvYyhsb25nY250LCBzaXplb2YobG9uZyksIEdGUF9LRVJORUwpOwo+Pj4gKwo+Pj4g KwljeHQtPmRldi50b3RhbF9zaXplID0gbXRkLT5zaXplOwo+Pj4gKwkvKiBqdXN0IHN1cHBvcnQg ZG1lc2cgcmlnaHQgbm93ICovCj4+PiArCWN4dC0+ZGV2LmZsYWdzID0gUFNUT1JFX0ZMQUdTX0RN RVNHOwo+Pj4gKwljeHQtPmRldi5yZWFkID0gbXRkcHN0b3JlX3JlYWQ7Cj4+PiArCWN4dC0+ZGV2 LndyaXRlID0gbXRkcHN0b3JlX3dyaXRlOwo+Pj4gKwljeHQtPmRldi5lcmFzZSA9IG10ZHBzdG9y ZV9lcmFzZTsKPj4+ICsJY3h0LT5kZXYucGFuaWNfd3JpdGUgPSBtdGRwc3RvcmVfcGFuaWNfd3Jp dGU7Cj4+PiArCj4+PiArCXJldCA9IHJlZ2lzdGVyX3BzdG9yZV9kZXZpY2UoJmN4dC0+ZGV2KTsK Pj4+ICsJaWYgKHJldCkgewo+Pj4gKwkJZGV2X2VycigmbXRkLT5kZXYsICJtdGQlZCByZWdpc3Rl ciB0byBwc2JsayBmYWlsZWRcbiIsCj4+PiArCQkJCW10ZC0+aW5kZXgpOwo+Pj4gKwkJcmV0dXJu Owo+Pj4gKwl9Cj4+PiArCWN4dC0+bXRkID0gbXRkOwo+Pj4gKwlkZXZfaW5mbygmbXRkLT5kZXYs ICJBdHRhY2hlZCB0byBNVEQgZGV2aWNlICVkXG4iLCBtdGQtPmluZGV4KTsKPj4+ICt9Cj4+PiAr Cj4+PiArc3RhdGljIGludCBtdGRwc3RvcmVfZmx1c2hfcmVtb3ZlZF9kbyhzdHJ1Y3QgbXRkcHN0 b3JlX2NvbnRleHQgKmN4dCwKPj4+ICsJCWxvZmZfdCBvZmYsIHNpemVfdCBzaXplKQo+Pj4gK3sK Pj4+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBjeHQtPm10ZDsKPj4+ICsJdV9jaGFyICpidWY7 Cj4+PiArCWludCByZXQ7Cj4+PiArCXNpemVfdCByZXRsZW47Cj4+PiArCXN0cnVjdCBlcmFzZV9p bmZvIGVyYXNlOwo+Pj4gKwo+Pj4gKwlidWYgPSBrbWFsbG9jKG10ZC0+ZXJhc2VzaXplLCBHRlBf S0VSTkVMKTsKPj4+ICsJaWYgKCFidWYpCj4+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4+ICsKPj4+ ICsJLyogMXN0LiByZWFkIHRvIGNhY2hlICovCj4+PiArCXJldCA9IG10ZF9yZWFkKG10ZCwgb2Zm LCBtdGQtPmVyYXNlc2l6ZSwgJnJldGxlbiwgYnVmKTsKPj4+ICsJaWYgKG10ZHBzdG9yZV9pc19p b19lcnJvcihyZXQpKQo+Pj4gKwkJZ290byBmcmVlOwo+Pj4gKwo+Pj4gKwkvKiAybmQuIGVyYXNl IGJsb2NrICovCj4+PiArCWVyYXNlLmxlbiA9IG10ZC0+ZXJhc2VzaXplOwo+Pj4gKwllcmFzZS5h ZGRyID0gb2ZmOwo+Pj4gKwlyZXQgPSBtdGRfZXJhc2UobXRkLCAmZXJhc2UpOwo+Pj4gKwlpZiAo cmV0KQo+Pj4gKwkJZ290byBmcmVlOwo+Pj4gKwo+Pj4gKwkvKiAzcmQuIHdyaXRlIGJhY2sgKi8K Pj4+ICsJd2hpbGUgKHNpemUpIHsKPj4+ICsJCXVuc2lnbmVkIGludCB6b25lc2l6ZSA9IGN4dC0+ aW5mby5rbXNnX3NpemU7Cj4+PiArCj4+PiArCQkvKiB0aGVyZSBpcyB2YWxpZCBkYXRhIG9uIGJs b2NrLCB3cml0ZSBiYWNrICovCj4+PiArCQlpZiAobXRkcHN0b3JlX2lzX3VzZWQoY3h0LCBvZmYp KSB7Cj4+PiArCQkJcmV0ID0gbXRkX3dyaXRlKG10ZCwgb2ZmLCB6b25lc2l6ZSwgJnJldGxlbiwg YnVmKTsKPj4+ICsJCQlpZiAocmV0KQo+Pj4gKwkJCQlkZXZfZXJyKCZtdGQtPmRldiwgIndyaXRl IGZhaWx1cmUgYXQgJWxsZCAoJXp1IG9mICV1IHdyaXR0ZW4pLCBlcnIgJWRcbiIsCj4+PiArCQkJ CQkJb2ZmLCByZXRsZW4sIHpvbmVzaXplLCByZXQpOwo+Pj4gKwkJfQo+Pj4gKwo+Pj4gKwkJb2Zm ICs9IHpvbmVzaXplOwo+Pj4gKwkJc2l6ZSAtPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHpvbmVzaXpl LCBzaXplKTsKPj4+ICsJfQo+Pj4gKwo+Pj4gK2ZyZWU6Cj4+PiArCWtmcmVlKGJ1Zik7Cj4+PiAr CXJldHVybiByZXQ7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qCj4+PiArICogV2hhdCBkb2VzIG10ZHBz dG9yZV9mbHVzaF9yZW1vdmVkKCkgZG8/Cj4+PiArICogV2hlbiB1c2VyIHJlbW92ZSBhbnkgbG9n IGZpbGUgb24gcHN0b3JlIGZpbGVzeXN0ZW0sIG10ZHBzdG9yZSBzaG91bGQgZG8KPj4+ICsgKiBz b21ldGhpbmcgdG8gZW5zdXJlIGxvZyBmaWxlIHJlbW92ZWQuIElmIHRoZSB3aG9sZSBibG9jayBp cyBubyBsb25nZXIgdXNlZCwKPj4+ICsgKiBpdCdzIG5pY2UgdG8gZXJhc2UgdGhlIGJsb2NrLiBI b3dldmVyIGlmIHRoZSBibG9jayBzdGlsbCBjb250YWlucyB2YWxpZCBsb2csCj4+PiArICogd2hh dCBtdGRwc3RvcmUgY2FuIGRvIGlzIHRvIGVyYXNlIGFuZCB3cml0ZSB0aGUgdmFsaWQgbG9nIGJh Y2suCj4+PiArICovCj4+PiArc3RhdGljIGludCBtdGRwc3RvcmVfZmx1c2hfcmVtb3ZlZChzdHJ1 Y3QgbXRkcHN0b3JlX2NvbnRleHQgKmN4dCkKPj4+ICt7Cj4+PiArCXN0cnVjdCBtdGRfaW5mbyAq bXRkID0gY3h0LT5tdGQ7Cj4+PiArCWludCByZXQ7Cj4+PiArCWxvZmZfdCBvZmY7Cj4+PiArCXUz MiBibGtjbnQgPSAodTMyKWRpdl91NjQobXRkLT5zaXplLCBtdGQtPmVyYXNlc2l6ZSk7Cj4+PiAr Cj4+PiArCWZvciAob2ZmID0gMDsgYmxrY250ID4gMDsgYmxrY250LS0sIG9mZiArPSBtdGQtPmVy YXNlc2l6ZSkgewo+Pj4gKwkJcmV0ID0gbXRkcHN0b3JlX2Jsb2NrX2lzYmFkKGN4dCwgb2ZmKTsK Pj4+ICsJCWlmIChyZXQpCj4+PiArCQkJY29udGludWU7Cj4+PiArCj4+PiArCQlyZXQgPSBtdGRw c3RvcmVfYmxvY2tfaXNfcmVtb3ZlZChjeHQsIG9mZik7Cj4+PiArCQlpZiAoIXJldCkKPj4+ICsJ CQljb250aW51ZTsKPj4+ICsKPj4+ICsJCXJldCA9IG10ZHBzdG9yZV9mbHVzaF9yZW1vdmVkX2Rv KGN4dCwgb2ZmLCBtdGQtPmVyYXNlc2l6ZSk7Cj4+PiArCQlpZiAocmV0KQo+Pj4gKwkJCXJldHVy biByZXQ7Cj4+PiArCX0KPj4+ICsJcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2 b2lkIG10ZHBzdG9yZV9ub3RpZnlfcmVtb3ZlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQo+Pj4gK3sK Pj4+ICsJc3RydWN0IG10ZHBzdG9yZV9jb250ZXh0ICpjeHQgPSAmb29wc19jeHQ7Cj4+PiArCj4+ PiArCWlmIChtdGQtPmluZGV4ICE9IGN4dC0+aW5kZXggfHwgY3h0LT5pbmRleCA8IDApCj4+PiAr CQlyZXR1cm47Cj4+PiArCj4+PiArCW10ZHBzdG9yZV9mbHVzaF9yZW1vdmVkKGN4dCk7Cj4+PiAr Cj4+PiArCXVucmVnaXN0ZXJfcHN0b3JlX2RldmljZSgmY3h0LT5kZXYpOwo+Pj4gKwlrZnJlZShj eHQtPmJhZG1hcCk7Cj4+PiArCWtmcmVlKGN4dC0+dXNlZG1hcCk7Cj4+PiArCWtmcmVlKGN4dC0+ cm1tYXApOwo+Pj4gKwljeHQtPm10ZCA9IE5VTEw7Cj4+PiArCWN4dC0+aW5kZXggPSAtMTsKPj4+ ICt9Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBtdGRfbm90aWZpZXIgbXRkcHN0b3JlX25vdGlm aWVyID0gewo+Pj4gKwkuYWRkCT0gbXRkcHN0b3JlX25vdGlmeV9hZGQsCj4+PiArCS5yZW1vdmUJ PSBtdGRwc3RvcmVfbm90aWZ5X3JlbW92ZSwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQg X19pbml0IG10ZHBzdG9yZV9pbml0KHZvaWQpCj4+PiArewo+Pj4gKwlpbnQgcmV0Owo+Pj4gKwlz dHJ1Y3QgbXRkcHN0b3JlX2NvbnRleHQgKmN4dCA9ICZvb3BzX2N4dDsKPj4+ICsJc3RydWN0IHBz dG9yZV9ibGtfY29uZmlnICppbmZvID0gJmN4dC0+aW5mbzsKPj4+ICsKPj4+ICsJcmV0ID0gcHN0 b3JlX2Jsa19nZXRfY29uZmlnKGluZm8pOwo+Pj4gKwlpZiAodW5saWtlbHkocmV0KSkKPj4+ICsJ CXJldHVybiByZXQ7Cj4+PiArCj4+PiArCWlmIChzdHJsZW4oaW5mby0+ZGV2aWNlKSA9PSAwKSB7 Cj4+PiArCQlwcl9lcnIoIm10ZCBkZXZpY2UgbXVzdCBiZSBzdXBwbGllZCAoZGV2aWNlIG5hbWUg aXMgZW1wdHkpXG4iKTsKPj4+ICsJCXJldHVybiAtRUlOVkFMOwo+Pj4gKwl9Cj4+PiArCWlmICgh aW5mby0+a21zZ19zaXplKSB7Cj4+PiArCQlwcl9lcnIoIm5vIGJhY2tlbmQgZW5hYmxlZCAoa21z Z19zaXplIGlzIDApXG4iKTsKPj4+ICsJCXJldHVybiAtRUlOVkFMOwo+Pj4gKwl9Cj4+PiArCj4+ PiArCS8qIFNldHVwIHRoZSBNVEQgZGV2aWNlIHRvIHVzZSAqLwo+Pj4gKwlyZXQgPSBrc3RydG9p bnQoKGNoYXIgKilpbmZvLT5kZXZpY2UsIDAsICZjeHQtPmluZGV4KTsKPj4+ICsJaWYgKHJldCkK Pj4+ICsJCWN4dC0+aW5kZXggPSAtMTsKPj4+ICsKPj4+ICsJcmVnaXN0ZXJfbXRkX3VzZXIoJm10 ZHBzdG9yZV9ub3RpZmllcik7Cj4+PiArCXJldHVybiAwOwo+Pj4gK30KPj4+ICttb2R1bGVfaW5p dChtdGRwc3RvcmVfaW5pdCk7Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgX19leGl0IG10ZHBzdG9y ZV9leGl0KHZvaWQpCj4+PiArewo+Pj4gKwl1bnJlZ2lzdGVyX210ZF91c2VyKCZtdGRwc3RvcmVf bm90aWZpZXIpOwo+Pj4gK30KPj4+ICttb2R1bGVfZXhpdChtdGRwc3RvcmVfZXhpdCk7Cj4+PiAr Cj4+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+Pj4gK01PRFVMRV9BVVRIT1IoIldlaVhpb25n IExpYW8gPGxpYW93ZWl4aW9uZ0BhbGx3aW5uZXJ0ZWNoLmNvbT4iKTsKPj4+ICtNT0RVTEVfREVT Q1JJUFRJT04oIk1URCBiYWNrZW5kIGZvciBwc3RvcmUvYmxrIik7Cj4+Pgo+Pgo+PiAtLSAKPj4g V2VpWGlvbmcgTGlhbwo+IAoKLS0gCldlaVhpb25nIExpYW8KCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBt YWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1tdGQvCg==