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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id CCFFDC43334 for ; Tue, 28 Jun 2022 02:56:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=KcusVCKwQxKtrL3SzsiiQmoSPVnBJl/2RaaezpONVM8=; b=q3bDtCnOWjBi+Z cXdknPJs/IzCGUmix0+ILU8rMVw3tnOsTDubnd8dvT7xCMDcbg6rU4ARID0gUpAhb50mOKbs4hqxl Mv1gtHTp4GjgXFCk0w0HTX2ESpg1CZjBQBd2IzHtdve/MnqEhUmgrhj37FSxt1cJ2MHeB33SG8MUW 1BAnWNbr0xi8HLDrckkvoyjJAfk0dTUK4Cw6hrJtq0nczfYyTnnCRLFKga64GsQHfX7jwKY46afX8 Z+HC8F4E83KOaMTv86KZWtHC8PzXEiQCbQnEmCcUg5jQY0JkBoCpSpjvpFGNJl47me99aKpetZahG 7hXLNwHt9A9LPHpfu0XQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o61O7-003vZq-92; Tue, 28 Jun 2022 02:55:39 +0000 Received: from out30-130.freemail.mail.aliyun.com ([115.124.30.130]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o61O1-003vYH-3Q for linux-arm-kernel@lists.infradead.org; Tue, 28 Jun 2022 02:55:37 +0000 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R141e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046051;MF=guanghuifeng@linux.alibaba.com;NM=1;PH=DS;RN=20;SR=0;TI=SMTPD_---0VHegwHK_1656384926; Received: from 30.225.28.186(mailfrom:guanghuifeng@linux.alibaba.com fp:SMTPD_---0VHegwHK_1656384926) by smtp.aliyun-inc.com; Tue, 28 Jun 2022 10:55:27 +0800 Message-ID: Date: Tue, 28 Jun 2022 10:55:25 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: Re: [PATCH] arm64: mm: fix linear mapping mem access performace degradation To: Mike Rapoport Cc: baolin.wang@linux.alibaba.com, catalin.marinas@arm.com, will@kernel.org, akpm@linux-foundation.org, david@redhat.com, jianyong.wu@arm.com, james.morse@arm.com, quic_qiancai@quicinc.com, christophe.leroy@csgroup.eu, jonathan@marek.ca, mark.rutland@arm.com, thunder.leizhen@huawei.com, anshuman.khandual@arm.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, geert+renesas@glider.be, ardb@kernel.org, linux-mm@kvack.org, Yao Hongbo References: <1656241815-28494-1-git-send-email-guanghuifeng@linux.alibaba.com> <4d18d303-aeed-0beb-a8a4-32893f2d438d@linux.alibaba.com> From: "guanghui.fgh" In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220627_195533_539055_427D44B4 X-CRM114-Status: GOOD ( 37.96 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org VGhhbmtzLgoK5ZyoIDIwMjIvNi8yOCAwOjQ5LCBNaWtlIFJhcG9wb3J0IOWGmemBkzoKPiBPbiBN b24sIEp1biAyNywgMjAyMiBhdCAwNjo0Njo1MFBNICswODAwLCBndWFuZ2h1aS5mZ2ggd3JvdGU6 Cj4+IOWcqCAyMDIyLzYvMjcgMTc6NDksIE1pa2UgUmFwb3BvcnQg5YaZ6YGTOgo+Pj4gT24gTW9u LCBKdW4gMjcsIDIwMjIgYXQgMDU6MjQ6MTBQTSArMDgwMCwgZ3VhbmdodWkuZmdoIHdyb3RlOgo+ Pj4+IOWcqCAyMDIyLzYvMjcgMTQ6MzQsIE1pa2UgUmFwb3BvcnQg5YaZ6YGTOgo+Pj4+Cj4+Pj4g ICAgICAgT24gU3VuLCBKdW4gMjYsIDIwMjIgYXQgMDc6MTA6MTVQTSArMDgwMCwgR3VhbmdodWkg RmVuZyB3cm90ZToKPj4+Pgo+Pj4+ICAgICAgICAgICBUaGUgYXJtNjQgY2FuIGJ1aWxkIDJNLzFH IGJsb2NrL3NlY3RpaW9uIG1hcHBpbmcuIFdoZW4gdXNpbmcgRE1BL0RNQTMyIHpvbmUKPj4+PiAg ICAgICAgICAgKGVuYWJsZSBjcmFzaGtlcm5lbCwgZGlzYWJsZSByb2RhdGEgZnVsbCwgZGlzYWJs ZSBrZmVuY2UpLCB0aGUgbWVtX21hcCB3aWxsCj4+Pj4gICAgICAgICAgIHVzZSBub24gYmxvY2sv c2VjdGlvbiBtYXBwaW5nKGZvciBjcmFzaGtlcm5lbCByZXF1aXJlcyB0byBzaHJpbmsgdGhlIHJl Z2lvbgo+Pj4+ICAgICAgICAgICBpbiBwYWdlIGdyYW51bGFyaXR5KS4gQnV0IGl0IHdpbGwgZGVn cmFkZSBwZXJmb3JtYW5jZSB3aGVuIGRvaW5nIGxhcmdpbmcKPj4+PiAgICAgICAgICAgY29udGlu dW91cyBtZW0gYWNjZXNzIGluIGtlcm5lbChtZW1jcHkvbWVtbW92ZSwgZXRjKS4KPj4+Pgo+Pj4+ ICAgICAgICAgICBUaGVyZSBhcmUgbWFueSBjaGFuZ2VzIGFuZCBkaXNjdXNzaW9uczoKPj4+PiAg ICAgICAgICAgY29tbWl0IDAzMTQ5NTYzNWI0Ngo+Pj4+ICAgICAgICAgICBjb21taXQgMWE4ZTFj ZWY3NjAzCj4+Pj4gICAgICAgICAgIGNvbW1pdCA4NDI0ZWNkZGU3ZGYKPj4+PiAgICAgICAgICAg Y29tbWl0IDBhMzBjNTM1NzNiMAo+Pj4+ICAgICAgICAgICBjb21taXQgMjY4NzI3NWE1ODQzCj4+ Pj4KPj4+PiAgICAgICBQbGVhc2UgaW5jbHVkZSBvbmVsaW5lIHN1bW1hcnkgb2YgdGhlIGNvbW1p dC4gKFNlZSBzZWN0aW9uICJEZXNjcmliZSB5b3VyCj4+Pj4gICAgICAgY2hhbmdlcyIgaW4gRG9j dW1lbnRhdGlvbi9wcm9jZXNzL3N1Ym1pdHRpbmctcGF0Y2hlcy5yc3QpCj4+Pj4KPj4+PiBPSywg SSB3aWxsIGFkZCBvbmVsaW5lIHN1bW1hcnkgaW4gdGhlIGdpdCBjb21taXQgbWVzc2FnZXMuCj4+ Pj4KPj4+PiAgICAgICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIG1lbV9tYXAgdG8gdXNlIGJsb2Nr L3NlY3Rpb24gbWFwcGluZyB3aXRoIGNyYXNoa2VybmVsLgo+Pj4+ICAgICAgICAgICBGaXJzdGx5 LCBkbyBibG9jay9zZWN0aW9uIG1hcHBpbmcobm9ybWFsbHkgMk0gb3IgMUcpIGZvciBhbGwgYXZh aWwgbWVtIGF0Cj4+Pj4gICAgICAgICAgIG1lbV9tYXAsIHJlc2VydmUgY3Jhc2hrZXJuZWwgbWVt b3J5LiBBbmQgdGhlbiB3YWxraW5nIHBhZ2V0YWJsZSB0byBzcGxpdAo+Pj4+ICAgICAgICAgICBi bG9jay9zZWN0aW9uIG1hcHBpbmcgdG8gbm9uIGJsb2NrL3NlY3Rpb24gbWFwcGluZyhub3JtYWxs eSA0SykgW1tbb25seV1dXQo+Pj4+ICAgICAgICAgICBmb3IgY3Jhc2hrZXJuZWwgbWVtLgo+Pj4+ Cj4+Pj4gICAgICAgVGhpcyBhbHJlYWR5IGhhcHBlbnMgd2hlbiBaT05FX0RNQS9aT05FX0RNQTMy IGFyZSBkaXNhYmxlZC4gUGxlYXNlIGV4cGxhaW4KPj4+PiAgICAgICB3aHkgaXMgaXQgT2sgdG8g Y2hhbmdlIHRoZSB3YXkgdGhlIG1lbW9yeSBpcyBtYXBwZWQgd2l0aAo+Pj4+ICAgICAgIFpPTkVf RE1BL1pPTkVfRE1BMzIgZW5hYmxlZC4KPj4+Pgo+Pj4+IEluIHNob3J0Ogo+Pj4+Cj4+Pj4gMS5i dWlsZGluZyBhbGwgYXZhaWwgbWVtIHdpdGggYmxvY2svc2VjdGlvbiBtYXBwaW5n77yIbm9ybWFs bHkgMUcvMk3vvIkgd2l0aG91dAo+Pj4+IGluc3BlY3RpbmcgY3Jhc2hrZXJuZWwKPj4+PiAyLiBS ZXNlcnZlIGNyYXNoa2VybmVsIG1lbSBhcyBzYW1lIGFzIHByZXZpb3VzIGRvaW5nCj4+Pj4gMy4g b25seSBjaGFuZ2UgdGhlIGNyYXNoa2VybmxlIG1lbSBtYXBwaW5nIHRvIG5vcm1hbCBtYXBwaW5n KG5vcm1hbGx5IDRrKS4KPj4+PiBXaXRoIHRoaXMgbWV0aG9kLCB0aGVyZSBhcmUgYmxvY2svc2Vj dGlvbiBtYXBwaW5nIGFzIG1vcmUgYXMgcG9zc2libGUuCj4+Pgo+Pj4gVGhpcyBkb2VzIG5vdCBh bnN3ZXIgdGhlIHF1ZXN0aW9uIHdoeSBjaGFuZ2luZyB0aGUgd2F5IHRoZSBtZW1vcnkgaXMgbWFw cGVkCj4+PiB3aGVuIHRoZXJlIGlzIFpPTkVfRE1BL0RNQTMyIGFuZCBjcmFzaGtlcm5lbCB3b24n dCBjYXVzZSBhIHJlZ3Jlc3Npb24uCj4+Pgo+PiAxLlF1b3RlZCBtZXNzYWdlcyBmcm9tIGFyY2gv YXJtNjQvbW0vaW5pdC5jCj4+Cj4+ICJNZW1vcnkgcmVzZXJ2YXRpb24gZm9yIGNyYXNoIGtlcm5l bCBlaXRoZXIgZG9uZSBlYXJseSBvciBkZWZlcnJlZAo+PiBkZXBlbmRpbmcgb24gRE1BIG1lbW9y eSB6b25lcyBjb25maWdzIChaT05FX0RNQSkgLS0KPj4KPj4gSW4gYWJzZW5jZSBvZiBaT05FX0RN QSBjb25maWdzIGFybTY0X2RtYV9waHlzX2xpbWl0IGluaXRpYWxpemVkCj4+IGhlcmUgaW5zdGVh ZCBvZiBtYXhfem9uZV9waHlzKCkuICBUaGlzIGxldHMgZWFybHkgcmVzZXJ2YXRpb24gb2YKPj4g Y3Jhc2gga2VybmVsIG1lbW9yeSB3aGljaCBoYXMgYSBkZXBlbmRlbmN5IG9uIGFybTY0X2RtYV9w aHlzX2xpbWl0Lgo+PiBSZXNlcnZpbmcgbWVtb3J5IGVhcmx5IGZvciBjcmFzaCBrZXJuZWwgYWxs b3dzIGxpbmVhciBjcmVhdGlvbiBvZiBibG9jawo+PiBtYXBwaW5ncyAoZ3JlYXRlciB0aGFuIHBh Z2UtZ3JhbnVsYXJpdHkpIGZvciBhbGwgdGhlIG1lbW9yeSBiYW5rIHJhbmdzLgo+PiBJbiB0aGlz IHNjaGVtZSBhIGNvbXBhcmF0aXZlbHkgcXVpY2tlciBib290IGlzIG9ic2VydmVkLgo+Pgo+PiBJ ZiBaT05FX0RNQSBjb25maWdzIGFyZSBkZWZpbmVkLCBjcmFzaCBrZXJuZWwgbWVtb3J5IHJlc2Vy dmF0aW9uCj4+IGlzIGRlbGF5ZWQgdW50aWwgRE1BIHpvbmUgbWVtb3J5IHJhbmdlIHNpemUgaW5p dGlhbGl6YXRpb24gcGVyZm9ybWVkIGluCj4+IHpvbmVfc2l6ZXNfaW5pdCgpLiAgVGhlIGRlZmVy IGlzIG5lY2Vzc2FyeSB0byBzdGVlciBjbGVhciBvZiBETUEgem9uZQo+PiBtZW1vcnkgcmFuZ2Ug dG8gYXZvaWQgb3ZlcmxhcCBhbGxvY2F0aW9uLiAgU28gY3Jhc2gga2VybmVsIG1lbW9yeSBib3Vu ZGFyaWVzCj4+IGFyZSBub3Qga25vd24gd2hlbiBtYXBwaW5nIGFsbCBiYW5rIG1lbW9yeSByYW5n ZXMsIHdoaWNoIG90aGVyd2lzZSBtZWFucyBub3QKPj4gcG9zc2libGUgdG8gZXhjbHVkZSBjcmFz aCBrZXJuZWwgcmFuZ2UgZnJvbSBjcmVhdGluZyBibG9jayBtYXBwaW5ncyBzbwo+PiBwYWdlLWdy YW51bGFyaXR5IG1hcHBpbmdzIGFyZSBjcmVhdGVkIGZvciB0aGUgZW50aXJlIG1lbW9yeSByYW5n ZS4iCj4+Cj4+IE5hbWVseSwgdGhlIGluaXQgb3JkZXI6IG1lbWJsb2NrIGluaXQtLS0+bGluZWFy IG1lbSBtYXBwaW5nKDRrIG1hcHBpbmcgZm9yCj4+IGNyYXNoa2VybmVsLCByZXF1aXJpbmlnIHBh Z2UtZ3JhbnVsYXJpdHkgY2hhbmdpbmcpKS0tLT56b25lIGRtYQo+PiBsaW1pdC0tLT5yZXNlcnZl IGNyYXNoa2VybmVsLgo+PiBTbyB3aGVuIGVuYWJsZSBaT05FIERNQSBhbmQgdXNpbmcgY3Jhc2hr ZXJuZWwsIHRoZSBtZW0gbWFwcGluZyB1c2luZyA0awo+PiBtYXBwaW5nLgo+Pgo+PiAyLkFzIG1l bnRpb25lZCBhYm92ZSwgd2hlbiBsaW5lYXIgbWVtIHVzZSA0ayBtYXBwaW5nIHNpbXBseSwgdGhl cmUgaXMgaGlnaAo+PiBkdGxiIG1pc3MoZGVncmFkZSBwZXJmb3JtYW5jZSkuCj4+IFRoaXMgcGF0 Y2ggdXNlIGJsb2NrL3NlY3Rpb24gbWFwcGluZyBhcyBmYXIgYXMgcG9zc2libGUgd2l0aCBwZXJm b3JtYW5jZQo+PiBpbXByb3ZlbWVudC4KPj4KPj4gMy5UaGlzIHBhdGNoIHJlc2VydmUgY3Jhc2hr ZXJuZWwgYXMgc2FtZSBhcyB0aGUgaGlzdG9yeShaT05FIERNQSAmCj4+IGNyYXNoa2VybmVsIHJl c2VydmluZyBvcmRlciksIGFuZCBvbmx5IGNoYW5nZSB0aGUgbGluZWFyIG1lbSBtYXBwaW5nIHRv Cj4+IGJsb2NrL3NlY3Rpb24gbWFwcGluZy4KPiAKPiBUaGFuayB5b3UgZm9yIHRoZSBleHBsYW5h dGlvbi4KPiAKPiBTbyBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCB5b3Ugc3VnZ2VzdCB0byBy ZXNlcnZlIHRoZSBjcmFzaCBrZXJuZWwKPiBtZW1vcnkgbGF0ZSByZWdhcmRsZXNzIG9mIFpPTkVf RE1BLzMyIGNvbmZpZ3VyYXRpb24gYW5kIHRoZW4gbWFwIHRoYXQgbWVtb3J5Cj4gdXNpbmcgcGFn ZSBsZXZlbCBtYXBwaW5ncyBhZnRlciB0aGUgbWVtb3J5IGlzIHJlc2VydmVkLgo+IAo+IFRoaXMg bWFrZXMgc2Vuc2UsIGJ1dCBJIHRoaW5rIHRoZSBwYXRjaCBoYXMgYSBmZXcgc2hvcnRjb21pbmdz IHRoYW4gbmVlZCB0bwo+IGJlIGFkZHJlc3NlZC4KPlllcywgSXQncyB0aGF0Lgo+PiBTaWduZWQt b2ZmLWJ5OiBHdWFuZ2h1aSBGZW5nIDxndWFuZ2h1aWZlbmdAbGludXguYWxpYmFiYS5jb20+Cj4+ IC0tLQo+PiAgIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmggfCAgIDEgKwo+PiAgIGFyY2gv YXJtNjQvbW0vaW5pdC5jICAgICAgICAgfCAgIDggKy0KPj4gICBhcmNoL2FybTY0L21tL21tdS5j ICAgICAgICAgIHwgMjc0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0KPj4gICAzIGZpbGVzIGNoYW5nZWQsIDI1MyBpbnNlcnRpb25zKCspLCAzMCBkZWxldGlvbnMo LSkKPj4KPj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmggYi9hcmNo L2FybTY0L2luY2x1ZGUvYXNtL21tdS5oCj4+IGluZGV4IDQ4Zjg0NjYuLmRmMTEzY2MgMTAwNjQ0 Cj4+IC0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmgKPj4gKysrIGIvYXJjaC9hcm02 NC9pbmNsdWRlL2FzbS9tbXUuaAo+PiBAQCAtNjMsNiArNjMsNyBAQCBzdGF0aWMgaW5saW5lIGJv b2wgYXJtNjRfa2VybmVsX3VubWFwcGVkX2F0X2VsMCh2b2lkKQo+PiAgIGV4dGVybiB2b2lkIGFy bTY0X21lbWJsb2NrX2luaXQodm9pZCk7Cj4+ICAgZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9p ZCk7Cj4+ICAgZXh0ZXJuIHZvaWQgYm9vdG1lbV9pbml0KHZvaWQpOwo+PiArZXh0ZXJuIHZvaWQg bWFwcGluZ19jcmFzaGtlcm5lbCh2b2lkKTsKPiAKPiBJIHRoaW5rIG1hcF9jcmFzaGtlcm5lbCgp IHdvdWxkIGJlIGEgYmV0dGVyIG5hbWUuCk9LLgo+IAo+PiAgIGV4dGVybiB2b2lkIF9faW9tZW0g KmVhcmx5X2lvX21hcChwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIHZpcnQpOwo+PiAg IGV4dGVybiB2b2lkIGluaXRfbWVtX3BncHJvdCh2b2lkKTsKPj4gICBleHRlcm4gdm9pZCBjcmVh dGVfcGdkX21hcHBpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBoeXNfYWRkcl90IHBoeXMsCj4+ IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2luaXQuYyBiL2FyY2gvYXJtNjQvbW0vaW5pdC5j Cj4+IGluZGV4IDMzOWVlODQuLjBlNzU0MGIgMTAwNjQ0Cj4+IC0tLSBhL2FyY2gvYXJtNjQvbW0v aW5pdC5jCj4+ICsrKyBiL2FyY2gvYXJtNjQvbW0vaW5pdC5jCj4+IEBAIC0zODgsMTAgKzM4OCw2 IEBAIHZvaWQgX19pbml0IGFybTY0X21lbWJsb2NrX2luaXQodm9pZCkKPj4gICAJfQo+PiAgIAo+ PiAgIAllYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpOwo+PiAtCj4+IC0JaWYgKCFJ U19FTkFCTEVEKENPTkZJR19aT05FX0RNQSkgJiYgIUlTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1B MzIpKQo+PiAtCQlyZXNlcnZlX2NyYXNoa2VybmVsKCk7Cj4+IC0KPj4gICAJaGlnaF9tZW1vcnkg PSBfX3ZhKG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSAxKSArIDE7Cj4+ICAgfQo+PiAgIAo+PiBA QCAtNDM4LDggKzQzNCw4IEBAIHZvaWQgX19pbml0IGJvb3RtZW1faW5pdCh2b2lkKQo+PiAgIAkg KiByZXF1ZXN0X3N0YW5kYXJkX3Jlc291cmNlcygpIGRlcGVuZHMgb24gY3Jhc2hrZXJuZWwncyBt ZW1vcnkgYmVpbmcKPj4gICAJICogcmVzZXJ2ZWQsIHNvIGRvIGl0IGhlcmUuCj4+ICAgCSAqLwo+ PiAtCWlmIChJU19FTkFCTEVEKENPTkZJR19aT05FX0RNQSkgfHwgSVNfRU5BQkxFRChDT05GSUdf Wk9ORV9ETUEzMikpCj4+IC0JCXJlc2VydmVfY3Jhc2hrZXJuZWwoKTsKPj4gKwlyZXNlcnZlX2Ny YXNoa2VybmVsKCk7Cj4+ICsJbWFwcGluZ19jcmFzaGtlcm5lbCgpOwo+IAo+IFRoaXMgY2FuIGJl IGNhbGxlZCBmcm9tIHJlc2VydmVfY3Jhc2hrZXJuZWwoKSBkaXJlY3RseS4KT0sKPiAgIAo+PiAg IAltZW1ibG9ja19kdW1wX2FsbCgpOwo+PiAgIH0KPj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQv bW0vbW11LmMgYi9hcmNoL2FybTY0L21tL21tdS5jCj4+IGluZGV4IDYyNmVjMzIuLjA2NzJhZmQg MTAwNjQ0Cj4+IC0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmMKPj4gKysrIGIvYXJjaC9hcm02NC9t bS9tbXUuYwo+PiBAQCAtNDk4LDYgKzQ5OCwyNTYgQEAgc3RhdGljIGludCBfX2luaXQgZW5hYmxl X2NyYXNoX21lbV9tYXAoY2hhciAqYXJnKQo+PiAgIH0KPj4gICBlYXJseV9wYXJhbSgiY3Jhc2hr ZXJuZWwiLCBlbmFibGVfY3Jhc2hfbWVtX21hcCk7Cj4+ICAgCj4+ICsjaWZkZWYgQ09ORklHX0tF WEVDX0NPUkUKPj4gK3N0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQgZWFybHlfY3Jhc2hrZXJuZWxf cGd0YWJsZV9hbGxvYyhpbnQgc2hpZnQpCj4+ICt7Cj4+ICsJcGh5c19hZGRyX3QgcGh5czsKPj4g Kwl2b2lkICpwdHI7Cj4+ICsKPj4gKwlwaHlzID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShQ QUdFX1NJWkUsIFBBR0VfU0laRSwgMCwKPj4gKwkJCQkJIE1FTUJMT0NLX0FMTE9DX05PTEVBS1RS QUNFKTsKPj4gKwlpZiAoIXBoeXMpCj4+ICsJCXBhbmljKCJGYWlsZWQgdG8gYWxsb2NhdGUgcGFn ZSB0YWJsZSBwYWdlXG4iKTsKPj4gKwo+PiArCXB0ciA9ICh2b2lkICopX19waHlzX3RvX3ZpcnQo cGh5cyk7Cj4+ICsJbWVtc2V0KHB0ciwgMCwgUEFHRV9TSVpFKTsKPj4gKwlyZXR1cm4gcGh5czsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgaW5pdF9jcmFzaGtlcm5lbF9wdGUocG1kX3QgKnBt ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKPj4gKwkJCQkgdW5zaWduZWQgbG9uZyBlbmQsCj4+ICsJ CQkJIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QpCj4+ICt7Cj4+ICsJcHRlX3QgKnB0 ZXA7Cj4+ICsJcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIGFkZHIpOwo+PiArCWRvIHsK Pj4gKwkJc2V0X3B0ZShwdGVwLCBwZm5fcHRlKF9fcGh5c190b19wZm4ocGh5cyksIHByb3QpKTsK Pj4gKwkJcGh5cyArPSBQQUdFX1NJWkU7Cj4+ICsJfSB3aGlsZSAocHRlcCsrLCBhZGRyICs9IFBB R0VfU0laRSwgYWRkciAhPSBlbmQpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBhbGxvY19j cmFzaGtlcm5lbF9jb250X3B0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLAo+PiAr CQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgcGh5c19hZGRyX3QgcGh5cywKPj4gKwkJCQkg ICAgICAgcGdwcm90X3QgcHJvdCwKPj4gKwkJCQkgICAgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxl X2FsbG9jKShpbnQpLAo+PiArCQkJCSAgICAgICBpbnQgZmxhZ3MpCj4+ICt7Cj4+ICsJdW5zaWdu ZWQgbG9uZyBuZXh0Owo+PiArCXBtZF90IHBtZCA9IFJFQURfT05DRSgqcG1kcCk7Cj4+ICsKPj4g KwlCVUdfT04ocG1kX3NlY3QocG1kKSk7Cj4+ICsJaWYgKHBtZF9ub25lKHBtZCkpIHsKPj4gKwkJ cG1kdmFsX3QgcG1kdmFsID0gUE1EX1RZUEVfVEFCTEUgfCBQTURfVEFCTEVfVVhOOwo+PiArCQlw aHlzX2FkZHJfdCBwdGVfcGh5czsKPj4gKwo+PiArCQlpZiAoZmxhZ3MgJiBOT19FWEVDX01BUFBJ TkdTKQo+PiArCQkJcG1kdmFsIHw9IFBNRF9UQUJMRV9QWE47Cj4+ICsJCUJVR19PTighcGd0YWJs ZV9hbGxvYyk7Cj4+ICsJCXB0ZV9waHlzID0gcGd0YWJsZV9hbGxvYyhQQUdFX1NISUZUKTsKPj4g KwkJX19wbWRfcG9wdWxhdGUocG1kcCwgcHRlX3BoeXMsIHBtZHZhbCk7Cj4+ICsJCXBtZCA9IFJF QURfT05DRSgqcG1kcCk7Cj4+ICsJfQo+PiArCUJVR19PTihwbWRfYmFkKHBtZCkpOwo+PiArCj4+ ICsJZG8gewo+PiArCQlwZ3Byb3RfdCBfX3Byb3QgPSBwcm90Owo+PiArCQluZXh0ID0gcHRlX2Nv bnRfYWRkcl9lbmQoYWRkciwgZW5kKTsKPj4gKwkJaW5pdF9jcmFzaGtlcm5lbF9wdGUocG1kcCwg YWRkciwgbmV4dCwgcGh5cywgX19wcm90KTsKPj4gKwkJcGh5cyArPSBuZXh0IC0gYWRkcjsKPj4g Kwl9IHdoaWxlIChhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdm9pZCBpbml0X2NyYXNoa2VybmVsX3BtZChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBh ZGRyLAo+PiArCQkJCSB1bnNpZ25lZCBsb25nIGVuZCwgcGh5c19hZGRyX3QgcGh5cywKPj4gKwkJ CQkgcGdwcm90X3QgcHJvdCwKPj4gKwkJCQkgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShp bnQpLCBpbnQgZmxhZ3MpCj4+ICt7Cj4+ICsJcGh5c19hZGRyX3QgbWFwX29mZnNldDsKPj4gKwl1 bnNpZ25lZCBsb25nIG5leHQ7Cj4+ICsJcG1kX3QgKnBtZHA7Cj4+ICsJcG1kdmFsX3QgcG1kdmFs Owo+PiArCj4+ICsJcG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7Cj4+ICsJZG8gewo+PiAr CQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7Cj4+ICsJCWlmICghcG1kX25vbmUoKnBt ZHApICYmIHBtZF9zZWN0KCpwbWRwKSkgewo+PiArCQkJcGh5c19hZGRyX3QgcHRlX3BoeXMgPSBw Z3RhYmxlX2FsbG9jKFBBR0VfU0hJRlQpOwo+PiArCQkJcG1kX2NsZWFyKHBtZHApOwo+PiArCQkJ cG1kdmFsID0gUE1EX1RZUEVfVEFCTEUgfCBQTURfVEFCTEVfVVhOOwo+PiArCQkJaWYgKGZsYWdz ICYgTk9fRVhFQ19NQVBQSU5HUykKPj4gKwkJCQlwbWR2YWwgfD0gUE1EX1RBQkxFX1BYTjsKPj4g KwkJCV9fcG1kX3BvcHVsYXRlKHBtZHAsIHB0ZV9waHlzLCBwbWR2YWwpOwo+PiArCQkJZmx1c2hf dGxiX2tlcm5lbF9yYW5nZShhZGRyLCBhZGRyICsgUEFHRV9TSVpFKTsKPj4gKwo+PiArCQkJbWFw X29mZnNldCA9IGFkZHIgLSAoYWRkciAmIFBNRF9NQVNLKTsKPj4gKwkJCWlmIChtYXBfb2Zmc2V0 KQo+PiArCQkJICAgIGFsbG9jX2luaXRfY29udF9wdGUocG1kcCwgYWRkciAmIFBNRF9NQVNLLCBh ZGRyLAo+PiArCQkJCQkJcGh5cyAtIG1hcF9vZmZzZXQsIHByb3QsCj4+ICsJCQkJCQlwZ3RhYmxl X2FsbG9jLCBmbGFncyk7Cj4+ICsKPj4gKwkJCWlmIChuZXh0IDwgKGFkZHIgJiBQTURfTUFTSykg KyBQTURfU0laRSkKPj4gKwkJCSAgICBhbGxvY19pbml0X2NvbnRfcHRlKHBtZHAsIG5leHQsIChh ZGRyICYgUFVEX01BU0spICsKPj4gKwkJCQkJCVBVRF9TSVpFLCBuZXh0IC0gYWRkciArIHBoeXMs Cj4+ICsJCQkJCQlwcm90LCBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7Cj4+ICsJCX0KPj4gKwkJYWxs b2NfY3Jhc2hrZXJuZWxfY29udF9wdGUocG1kcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCwKPj4g KwkJCQkJICAgcGd0YWJsZV9hbGxvYywgZmxhZ3MpOwo+PiArCQlwaHlzICs9IG5leHQgLSBhZGRy Owo+PiArCX0gd2hpbGUgKHBtZHArKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIHZvaWQgYWxsb2NfY3Jhc2hrZXJuZWxfY29udF9wbWQocHVkX3QgKnB1 ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKPj4gKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQs IHBoeXNfYWRkcl90IHBoeXMsCj4+ICsJCQkJICAgICAgIHBncHJvdF90IHByb3QsCj4+ICsJCQkJ ICAgICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoaW50KSwKPj4gKwkJCQkgICAgICAg aW50IGZsYWdzKQo+PiArewo+PiArCXVuc2lnbmVkIGxvbmcgbmV4dDsKPj4gKwlwdWRfdCBwdWQg PSBSRUFEX09OQ0UoKnB1ZHApOwo+PiArCj4+ICsJLyoKPj4gKwkgKiBDaGVjayBmb3IgaW5pdGlh bCBzZWN0aW9uIG1hcHBpbmdzIGluIHRoZSBwZ2QvcHVkLgo+PiArCSAqLwo+PiArCUJVR19PTihw dWRfc2VjdChwdWQpKTsKPj4gKwlpZiAocHVkX25vbmUocHVkKSkgewo+PiArCQlwdWR2YWxfdCBw dWR2YWwgPSBQVURfVFlQRV9UQUJMRSB8IFBVRF9UQUJMRV9VWE47Cj4+ICsJCXBoeXNfYWRkcl90 IHBtZF9waHlzOwo+PiArCj4+ICsJCWlmIChmbGFncyAmIE5PX0VYRUNfTUFQUElOR1MpCj4+ICsJ CQlwdWR2YWwgfD0gUFVEX1RBQkxFX1BYTjsKPj4gKwkJQlVHX09OKCFwZ3RhYmxlX2FsbG9jKTsK Pj4gKwkJcG1kX3BoeXMgPSBwZ3RhYmxlX2FsbG9jKFBNRF9TSElGVCk7Cj4+ICsJCV9fcHVkX3Bv cHVsYXRlKHB1ZHAsIHBtZF9waHlzLCBwdWR2YWwpOwo+PiArCQlwdWQgPSBSRUFEX09OQ0UoKnB1 ZHApOwo+PiArCX0KPj4gKwlCVUdfT04ocHVkX2JhZChwdWQpKTsKPj4gKwo+PiArCWRvIHsKPj4g KwkJcGdwcm90X3QgX19wcm90ID0gcHJvdDsKPj4gKwkJbmV4dCA9IHBtZF9jb250X2FkZHJfZW5k KGFkZHIsIGVuZCk7Cj4+ICsJCWluaXRfY3Jhc2hrZXJuZWxfcG1kKHB1ZHAsIGFkZHIsIG5leHQs IHBoeXMsIF9fcHJvdCwKPj4gKwkJCQkgICAgIHBndGFibGVfYWxsb2MsIGZsYWdzKTsKPj4gKwkJ cGh5cyArPSBuZXh0IC0gYWRkcjsKPj4gKwl9IHdoaWxlIChhZGRyID0gbmV4dCwgYWRkciAhPSBl bmQpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBhbGxvY19jcmFzaGtlcm5lbF9wdWQocGdk X3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKPj4gKwkJCQkgIHVuc2lnbmVkIGxvbmcgZW5k LCBwaHlzX2FkZHJfdCBwaHlzLAo+PiArCQkJCSAgcGdwcm90X3QgcHJvdCwKPj4gKwkJCQkgIHBo eXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoaW50KSwKPj4gKwkJCQkgIGludCBmbGFncykKPj4g K3sKPj4gKwlwaHlzX2FkZHJfdCBtYXBfb2Zmc2V0Owo+PiArCXVuc2lnbmVkIGxvbmcgbmV4dDsK Pj4gKwlwdWRfdCAqcHVkcDsKPj4gKwlwNGRfdCAqcDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRk cik7Cj4+ICsJcDRkX3QgcDRkID0gUkVBRF9PTkNFKCpwNGRwKTsKPj4gKwlwdWR2YWxfdCBwdWR2 YWw7Cj4+ICsKPj4gKwlpZiAocDRkX25vbmUocDRkKSkgewo+PiArCQlwNGR2YWxfdCBwNGR2YWwg PSBQNERfVFlQRV9UQUJMRSB8IFA0RF9UQUJMRV9VWE47Cj4+ICsJCXBoeXNfYWRkcl90IHB1ZF9w aHlzOwo+PiArCj4+ICsJCWlmIChmbGFncyAmIE5PX0VYRUNfTUFQUElOR1MpCj4+ICsJCQlwNGR2 YWwgfD0gUDREX1RBQkxFX1BYTjsKPj4gKwkJQlVHX09OKCFwZ3RhYmxlX2FsbG9jKTsKPj4gKwkJ cHVkX3BoeXMgPSBwZ3RhYmxlX2FsbG9jKFBVRF9TSElGVCk7Cj4+ICsJCV9fcDRkX3BvcHVsYXRl KHA0ZHAsIHB1ZF9waHlzLCBwNGR2YWwpOwo+PiArCQlwNGQgPSBSRUFEX09OQ0UoKnA0ZHApOwo+ PiArCX0KPj4gKwlCVUdfT04ocDRkX2JhZChwNGQpKTsKPj4gKwo+PiArCS8qCj4+ICsJICogTm8g bmVlZCBmb3IgbG9ja2luZyBkdXJpbmcgZWFybHkgYm9vdC4gQW5kIGl0IGRvZXNuJ3Qgd29yayBh cwo+PiArCSAqIGV4cGVjdGVkIHdpdGggS0FTTFIgZW5hYmxlZC4KPj4gKwkgKi8KPj4gKwlpZiAo c3lzdGVtX3N0YXRlICE9IFNZU1RFTV9CT09USU5HKQo+PiArCQltdXRleF9sb2NrKCZmaXhtYXBf bG9jayk7Cj4+ICsJcHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7Cj4+ICsJZG8gewo+PiAr CQluZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Cj4+ICsJCWlmICghcHVkX25vbmUoKnB1 ZHApICYmIHB1ZF9zZWN0KCpwdWRwKSkgewo+PiArCQkJcGh5c19hZGRyX3QgcG1kX3BoeXMgPSBw Z3RhYmxlX2FsbG9jKFBNRF9TSElGVCk7Cj4+ICsJCQlwdWRfY2xlYXIocHVkcCk7Cj4+ICsKPj4g KwkJCXB1ZHZhbCA9IFBVRF9UWVBFX1RBQkxFIHwgUFVEX1RBQkxFX1VYTjsKPj4gKwkJCWlmIChm bGFncyAmIE5PX0VYRUNfTUFQUElOR1MpCj4+ICsJCQkJcHVkdmFsIHw9IFBVRF9UQUJMRV9QWE47 Cj4+ICsJCQlfX3B1ZF9wb3B1bGF0ZShwdWRwLCBwbWRfcGh5cywgcHVkdmFsKTsKPj4gKwkJCWZs dXNoX3RsYl9rZXJuZWxfcmFuZ2UoYWRkciwgYWRkciArIFBBR0VfU0laRSk7Cj4+ICsKPj4gKwkJ CW1hcF9vZmZzZXQgPSBhZGRyIC0gKGFkZHIgJiBQVURfTUFTSyk7Cj4+ICsJCQlpZiAobWFwX29m ZnNldCkKPj4gKwkJCSAgICBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZHAsIGFkZHIgJiBQVURfTUFT SywgYWRkciwKPj4gKwkJCQkJCXBoeXMgLSBtYXBfb2Zmc2V0LCBwcm90LAo+PiArCQkJCQkJcGd0 YWJsZV9hbGxvYywgZmxhZ3MpOwo+PiArCj4+ICsJCQlpZiAobmV4dCA8IChhZGRyICYgUFVEX01B U0spICsgUFVEX1NJWkUpCj4+ICsJCQkgICAgYWxsb2NfaW5pdF9jb250X3BtZChwdWRwLCBuZXh0 LCAoYWRkciAmIFBVRF9NQVNLKSArCj4+ICsJCQkJCQlQVURfU0laRSwgbmV4dCAtIGFkZHIgKyBw aHlzLAo+PiArCQkJCQkJcHJvdCwgcGd0YWJsZV9hbGxvYywgZmxhZ3MpOwo+PiArCQl9Cj4+ICsJ CWFsbG9jX2NyYXNoa2VybmVsX2NvbnRfcG1kKHB1ZHAsIGFkZHIsIG5leHQsIHBoeXMsIHByb3Qs Cj4+ICsJCQkJCSAgIHBndGFibGVfYWxsb2MsIGZsYWdzKTsKPj4gKwkJcGh5cyArPSBuZXh0IC0g YWRkcjsKPj4gKwl9IHdoaWxlIChwdWRwKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7Cj4+ ICsKPj4gKwlpZiAoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9CT09USU5HKQo+PiArCQltdXRleF91 bmxvY2soJmZpeG1hcF9sb2NrKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgX19jcmVhdGVf Y3Jhc2hrZXJuZWxfbWFwcGluZyhwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsCj4+ICsJ CQkJCSB1bnNpZ25lZCBsb25nIHZpcnQsIHBoeXNfYWRkcl90IHNpemUsCj4+ICsJCQkJCSBwZ3By b3RfdCBwcm90LAo+PiArCQkJCQkgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShpbnQpLAo+ PiArCQkJCQkgaW50IGZsYWdzKQo+PiArewo+PiArCXVuc2lnbmVkIGxvbmcgYWRkciwgZW5kLCBu ZXh0Owo+PiArCXBnZF90ICpwZ2RwID0gcGdkX29mZnNldF9wZ2QocGdkaXIsIHZpcnQpOwo+PiAr Cj4+ICsJLyoKPj4gKwkgKiBJZiB0aGUgdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBkb24n dCBoYXZlIHRoZSBzYW1lIG9mZnNldAo+PiArCSAqIHdpdGhpbiBhIHBhZ2UsIHdlIGNhbm5vdCBt YXAgdGhlIHJlZ2lvbiBhcyB0aGUgY2FsbGVyIGV4cGVjdHMuCj4+ICsJICovCj4+ICsJaWYgKFdB Uk5fT04oKHBoeXMgXiB2aXJ0KSAmIH5QQUdFX01BU0spKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4g KwlwaHlzICY9IFBBR0VfTUFTSzsKPj4gKwlhZGRyID0gdmlydCAmIFBBR0VfTUFTSzsKPj4gKwll bmQgPSBQQUdFX0FMSUdOKHZpcnQgKyBzaXplKTsKPj4gKwo+PiArCWRvIHsKPj4gKwkJbmV4dCA9 IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwo+PiArCQlhbGxvY19jcmFzaGtlcm5lbF9wdWQocGdk cCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCwKPj4gKwkJCQkgICAgICBwZ3RhYmxlX2FsbG9jLCBm bGFncyk7Cj4+ICsJCXBoeXMgKz0gbmV4dCAtIGFkZHI7Cj4+ICsJfSB3aGlsZSAocGdkcCsrLCBh ZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwo+PiArfQo+IAo+IF9fY3JlYXRlX2NyYXNoa2VybmVs X21hcHBpbmcoKSBhbmQgdGhlIGhlbHBlcnMgaXQgdXNlcyByZXNlbWJsZSB2ZXJ5IG11Y2gKPiBf X2NyZWF0ZV9wZ2RfbWFwcGluZygpIGFuZCBpdCdzIGhlbHBlcnMuIEkgdGhpbmsgYSBjbGVhbmVy IHdheSB3b3VsZCBiZSB0bwo+IGNsZWFyIHNlY3Rpb24gbWFwcGluZ3MgYW5kIHRoYW4gY2FsbCBf X2NyZWF0ZV9wZ2RfbWFwcGluZygpIGZvciBjcmFzaAo+IGtlcm5lbCBtZW1vcnkgd2l0aCBibG9j ay9zZWN0aW9uIG1hcHBpbmdzIGRpc2FibGVkLgo+IAo+PiArc3RhdGljIHZvaWQgX19pbml0IG1h cF9jcmFzaGtlcm5lbChwZ2RfdCAqcGdkcCwgcGh5c19hZGRyX3Qgc3RhcnQsCj4+ICsJCQkJICAg cGh5c19hZGRyX3QgZW5kLCBwZ3Byb3RfdCBwcm90LCBpbnQgZmxhZ3MpCj4+ICt7Cj4+ICsJX19j cmVhdGVfY3Jhc2hrZXJuZWxfbWFwcGluZyhwZ2RwLCBzdGFydCwgX19waHlzX3RvX3ZpcnQoc3Rh cnQpLAo+PiArCQkJCSAgICAgZW5kIC0gc3RhcnQsIHByb3QsCj4+ICsJCQkJICAgICBlYXJseV9j cmFzaGtlcm5lbF9wZ3RhYmxlX2FsbG9jLCBmbGFncyk7Cj4+ICt9Cj4gCj4gTm8gbmVlZCBmb3Ig dGhpcywgeW91IGNhbiBjYWxsIF9fY3JlYXRlX2NyYXNoa2VybmVsX21hcHBpbmcoKSBkaXJlY3Rs eSBmcm9tCj4gbWFwcGluZ19jcmFzaGtlcm5lbCgpLgo+IAo+PiArCj4+ICt2b2lkIF9faW5pdCBt YXBwaW5nX2NyYXNoa2VybmVsKHZvaWQpCj4+ICt7Cj4+ICsJaWYgKGNhbl9zZXRfZGlyZWN0X21h cCgpIHx8IElTX0VOQUJMRUQoQ09ORklHX0tGRU5DRSkpCj4+ICsJICAgIHJldHVybjsKPj4gKwo+ PiArCWlmICghY3Jhc2hfbWVtX21hcCB8fCAhY3Jhc2hrX3Jlcy5lbmQpCj4+ICsJICAgIHJldHVy bjsKPj4gKwo+PiArCW1hcF9jcmFzaGtlcm5lbChzd2FwcGVyX3BnX2RpciwgY3Jhc2hrX3Jlcy5z dGFydCwKPj4gKwkJCWNyYXNoa19yZXMuZW5kICsgMSwgUEFHRV9LRVJORUwsCj4+ICsJCQlOT19C TE9DS19NQVBQSU5HUyB8IE5PX0NPTlRfTUFQUElOR1MpOwo+PiArfQo+PiArI2Vsc2UKPj4gK3Zv aWQgX19pbml0IG1hcHBpbmdfY3Jhc2hrZXJuZWwodm9pZCkge30KPj4gKyNlbmRpZgo+PiArCj4+ ICAgc3RhdGljIHZvaWQgX19pbml0IG1hcF9tZW0ocGdkX3QgKnBnZHApCj4+ICAgewo+PiAgIAlz dGF0aWMgY29uc3QgdTY0IGRpcmVjdF9tYXBfZW5kID0gX1BBR0VfRU5EKFZBX0JJVFNfTUlOKTsK Pj4gQEAgLTUyNywxNyArNzc3LDYgQEAgc3RhdGljIHZvaWQgX19pbml0IG1hcF9tZW0ocGdkX3Qg KnBnZHApCj4+ICAgCSAqLwo+PiAgIAltZW1ibG9ja19tYXJrX25vbWFwKGtlcm5lbF9zdGFydCwg a2VybmVsX2VuZCAtIGtlcm5lbF9zdGFydCk7Cj4+ICAgCj4+IC0jaWZkZWYgQ09ORklHX0tFWEVD X0NPUkUKPj4gLQlpZiAoY3Jhc2hfbWVtX21hcCkgewo+PiAtCQlpZiAoSVNfRU5BQkxFRChDT05G SUdfWk9ORV9ETUEpIHx8Cj4+IC0JCSAgICBJU19FTkFCTEVEKENPTkZJR19aT05FX0RNQTMyKSkK Pj4gLQkJCWZsYWdzIHw9IE5PX0JMT0NLX01BUFBJTkdTIHwgTk9fQ09OVF9NQVBQSU5HUzsKPj4g LQkJZWxzZSBpZiAoY3Jhc2hrX3Jlcy5lbmQpCj4+IC0JCQltZW1ibG9ja19tYXJrX25vbWFwKGNy YXNoa19yZXMuc3RhcnQsCj4+IC0JCQkgICAgcmVzb3VyY2Vfc2l6ZSgmY3Jhc2hrX3JlcykpOwo+ PiAtCX0KPj4gLSNlbmRpZgo+PiAtCj4+ICAgCS8qIG1hcCBhbGwgdGhlIG1lbW9yeSBiYW5rcyAq Lwo+PiAgIAlmb3JfZWFjaF9tZW1fcmFuZ2UoaSwgJnN0YXJ0LCAmZW5kKSB7Cj4+ICAgCQlpZiAo c3RhcnQgPj0gZW5kKQo+PiBAQCAtNTcwLDE5ICs4MDksNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQg bWFwX21lbShwZ2RfdCAqcGdkcCkKPj4gICAJICogaW4gcGFnZSBncmFudWxhcml0eSBhbmQgcHV0 IGJhY2sgdW51c2VkIG1lbW9yeSB0byBidWRkeSBzeXN0ZW0KPj4gICAJICogdGhyb3VnaCAvc3lz L2tlcm5lbC9rZXhlY19jcmFzaF9zaXplIGludGVyZmFjZS4KPj4gICAJICovCj4+IC0jaWZkZWYg Q09ORklHX0tFWEVDX0NPUkUKPj4gLQlpZiAoY3Jhc2hfbWVtX21hcCAmJgo+PiAtCSAgICAhSVNf RU5BQkxFRChDT05GSUdfWk9ORV9ETUEpICYmICFJU19FTkFCTEVEKENPTkZJR19aT05FX0RNQTMy KSkgewo+PiAtCQlpZiAoY3Jhc2hrX3Jlcy5lbmQpIHsKPj4gLQkJCV9fbWFwX21lbWJsb2NrKHBn ZHAsIGNyYXNoa19yZXMuc3RhcnQsCj4+IC0JCQkJICAgICAgIGNyYXNoa19yZXMuZW5kICsgMSwK Pj4gLQkJCQkgICAgICAgUEFHRV9LRVJORUwsCj4+IC0JCQkJICAgICAgIE5PX0JMT0NLX01BUFBJ TkdTIHwgTk9fQ09OVF9NQVBQSU5HUyk7Cj4+IC0JCQltZW1ibG9ja19jbGVhcl9ub21hcChjcmFz aGtfcmVzLnN0YXJ0LAo+PiAtCQkJCQkgICAgIHJlc291cmNlX3NpemUoJmNyYXNoa19yZXMpKTsK Pj4gLQkJfQo+PiAtCX0KPj4gLSNlbmRpZgo+PiAgIH0KPj4gICAKPj4gICB2b2lkIG1hcmtfcm9k YXRhX3JvKHZvaWQpCj4+IC0tIAo+PiAxLjguMy4xCj4gCj4gCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlz dApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==