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 6E439C43334 for ; Tue, 28 Jun 2022 07:54:11 +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:References:Cc:To:From: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=IZFZEcrBUTuk69yFWKUpsAW0HubAEuo15cMdRYGe5/4=; b=SdPxeQKnpZUMx4 ff8I1TfkWPfNJ5BIPwkCQneUbWHuOkKB3VGqbI9DNIpPmZh8HRFHIYDula+Sn2elkSOZbo/eOSd8B yN6magnsuq6bRSf8xgdjcjOXmtMJQ2xV+IzIJ5DCEtMwzC24gk2HMBqhx7777SS+eDnHSZyUO4Q1v a0AssrZ8WBmlcefEl4JJUpm8kKKQsgQ31tFfDFypM1t+f4MPVn7QbyPxIy5ovxI9fwLl1jcMu9jwx S7l+RmHk/Pd0izxyW7e3MjsGou/J0Z/r1ZVWmJvYa9t1ddg+MpRGhQWAZWpNbzEJVoWqGjkiaREzC aOIy02VZTH1JcjDMdC2A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o6620-0055KO-7X; Tue, 28 Jun 2022 07:53:08 +0000 Received: from out30-131.freemail.mail.aliyun.com ([115.124.30.131]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o661v-0055H4-KD for linux-arm-kernel@lists.infradead.org; Tue, 28 Jun 2022 07:53:06 +0000 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R171e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e04400;MF=guanghuifeng@linux.alibaba.com;NM=1;PH=DS;RN=21;SR=0;TI=SMTPD_---0VHg7YAo_1656402769; Received: from 30.225.28.186(mailfrom:guanghuifeng@linux.alibaba.com fp:SMTPD_---0VHg7YAo_1656402769) by smtp.aliyun-inc.com; Tue, 28 Jun 2022 15:52:51 +0800 Message-ID: <2e76694e-9ead-fc05-c8ad-01646ff02151@linux.alibaba.com> Date: Tue, 28 Jun 2022 15:52:48 +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 From: "guanghui.fgh" To: "Leizhen (ThunderTown)" , 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, 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, bhe@redhat.com, Yao Hongbo References: <1656241815-28494-1-git-send-email-guanghuifeng@linux.alibaba.com> <4d18d303-aeed-0beb-a8a4-32893f2d438d@linux.alibaba.com> <32aefb80-c59c-74b6-c373-dd24edba0752@huawei.com> <075b0a8e-cb7e-70f6-b45a-54cd31886794@linux.alibaba.com> <55873a70-da46-b0f6-db81-841a2b5e886a@huawei.com> <54f13945-fa35-247d-ca33-182931fd05ff@linux.alibaba.com> In-Reply-To: <54f13945-fa35-247d-ca33-182931fd05ff@linux.alibaba.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220628_005303_902559_6FC7BFC1 X-CRM114-Status: GOOD ( 24.29 ) 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 CgrlnKggMjAyMi82LzI4IDExOjA2LCBndWFuZ2h1aS5mZ2gg5YaZ6YGTOgo+IFRoYW5rcy4KPiAK PiDlnKggMjAyMi82LzI4IDk6MzQsIExlaXpoZW4gKFRodW5kZXJUb3duKSDlhpnpgZM6Cj4+Cj4+ Cj4+IE9uIDIwMjIvNi8yNyAyMDoyNSwgZ3VhbmdodWkuZmdoIHdyb3RlOgo+Pj4gVGhhbmtzLgo+ Pj4KPj4+IOWcqCAyMDIyLzYvMjcgMjA6MDYsIExlaXpoZW4gKFRodW5kZXJUb3duKSDlhpnpgZM6 Cj4+Pj4KPj4+Pgo+Pj4+IE9uIDIwMjIvNi8yNyAxODo0NiwgZ3VhbmdodWkuZmdoIHdyb3RlOgo+ Pj4+Pgo+Pj4+Pgo+Pj4+PiDlnKggMjAyMi82LzI3IDE3OjQ5LCBNaWtlIFJhcG9wb3J0IOWGmemB kzoKPj4+Pj4+IFBsZWFzZSBkb24ndCBwb3N0IEhUTUwuCj4+Pj4+Pgo+Pj4+Pj4gT24gTW9uLCBK dW4gMjcsIDIwMjIgYXQgMDU6MjQ6MTBQTSArMDgwMCwgZ3VhbmdodWkuZmdoIHdyb3RlOgo+Pj4+ Pj4+IFRoYW5rcy4KPj4+Pj4+Pgo+Pj4+Pj4+IOWcqCAyMDIyLzYvMjcgMTQ6MzQsIE1pa2UgUmFw b3BvcnQg5YaZ6YGTOgo+Pj4+Pj4+Cj4+Pj4+Pj4gwqDCoMKgwqDCoMKgIE9uIFN1biwgSnVuIDI2 LCAyMDIyIGF0IDA3OjEwOjE1UE0gKzA4MDAsIEd1YW5naHVpIEZlbmcgCj4+Pj4+Pj4gd3JvdGU6 Cj4+Pj4+Pj4KPj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBUaGUgYXJtNjQgY2FuIGJ1aWxk IDJNLzFHIGJsb2NrL3NlY3RpaW9uIG1hcHBpbmcuIFdoZW4gCj4+Pj4+Pj4gdXNpbmcgRE1BL0RN QTMyIHpvbmUKPj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoZW5hYmxlIGNyYXNoa2VybmVs LCBkaXNhYmxlIHJvZGF0YSBmdWxsLCBkaXNhYmxlIAo+Pj4+Pj4+IGtmZW5jZSksIHRoZSBtZW1f bWFwIHdpbGwKPj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1c2Ugbm9uIGJsb2NrL3NlY3Rp b24gbWFwcGluZyhmb3IgY3Jhc2hrZXJuZWwgcmVxdWlyZXMgCj4+Pj4+Pj4gdG8gc2hyaW5rIHRo ZSByZWdpb24KPj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbiBwYWdlIGdyYW51bGFyaXR5 KS4gQnV0IGl0IHdpbGwgZGVncmFkZSBwZXJmb3JtYW5jZSAKPj4+Pj4+PiB3aGVuIGRvaW5nIGxh cmdpbmcKPj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51b3VzIG1lbSBhY2Nlc3Mg aW4ga2VybmVsKG1lbWNweS9tZW1tb3ZlLCBldGMpLgo+Pj4+Pj4+Cj4+Pj4+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgwqAgVGhlcmUgYXJlIG1hbnkgY2hhbmdlcyBhbmQgZGlzY3Vzc2lvbnM6Cj4+Pj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29tbWl0IDAzMTQ5NTYzNWI0Ngo+Pj4+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgIGNvbW1pdCAxYThlMWNlZjc2MDMKPj4+Pj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjb21taXQgODQyNGVjZGRlN2RmCj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y29tbWl0IDBhMzBjNTM1NzNiMAo+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbW1pdCAy Njg3Mjc1YTU4NDMKPj4+Pj4+Pgo+Pj4+Pj4+IMKgwqDCoMKgwqDCoCBQbGVhc2UgaW5jbHVkZSBv bmVsaW5lIHN1bW1hcnkgb2YgdGhlIGNvbW1pdC4gKFNlZSBzZWN0aW9uIAo+Pj4+Pj4+ICJEZXNj cmliZSB5b3VyCj4+Pj4+Pj4gwqDCoMKgwqDCoMKgIGNoYW5nZXMiIGluIERvY3VtZW50YXRpb24v cHJvY2Vzcy9zdWJtaXR0aW5nLXBhdGNoZXMucnN0KQo+Pj4+Pj4+Cj4+Pj4+Pj4gT0ssIEkgd2ls bCBhZGQgb25lbGluZSBzdW1tYXJ5IGluIHRoZSBnaXQgY29tbWl0IG1lc3NhZ2VzLgo+Pj4+Pj4+ Cj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgVGhpcyBwYXRjaCBjaGFuZ2VzIG1lbV9tYXAg dG8gdXNlIGJsb2NrL3NlY3Rpb24gCj4+Pj4+Pj4gbWFwcGluZyB3aXRoIGNyYXNoa2VybmVsLgo+ Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZpcnN0bHksIGRvIGJsb2NrL3NlY3Rpb24gbWFw cGluZyhub3JtYWxseSAyTSBvciAxRykgCj4+Pj4+Pj4gZm9yIGFsbCBhdmFpbCBtZW0gYXQKPj4+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZW1fbWFwLCByZXNlcnZlIGNyYXNoa2VybmVsIG1l bW9yeS4gQW5kIHRoZW4gd2Fsa2luZyAKPj4+Pj4+PiBwYWdldGFibGUgdG8gc3BsaXQKPj4+Pj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBibG9jay9zZWN0aW9uIG1hcHBpbmcgdG8gbm9uIGJsb2Nr L3NlY3Rpb24gCj4+Pj4+Pj4gbWFwcGluZyhub3JtYWxseSA0SykgW1tbb25seV1dXQo+Pj4+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciBjcmFzaGtlcm5lbCBtZW0uCj4+Pj4+Pj4KPj4+Pj4+ PiDCoMKgwqDCoMKgwqAgVGhpcyBhbHJlYWR5IGhhcHBlbnMgd2hlbiBaT05FX0RNQS9aT05FX0RN QTMyIGFyZSAKPj4+Pj4+PiBkaXNhYmxlZC4gUGxlYXNlIGV4cGxhaW4KPj4+Pj4+PiDCoMKgwqDC oMKgwqAgd2h5IGlzIGl0IE9rIHRvIGNoYW5nZSB0aGUgd2F5IHRoZSBtZW1vcnkgaXMgbWFwcGVk IHdpdGgKPj4+Pj4+PiDCoMKgwqDCoMKgwqAgWk9ORV9ETUEvWk9ORV9ETUEzMiBlbmFibGVkLgo+ Pj4+Pj4+Cj4+Pj4+Pj4gSW4gc2hvcnQ6Cj4+Pj4+Pj4KPj4+Pj4+PiAxLmJ1aWxkaW5nIGFsbCBh dmFpbCBtZW0gd2l0aCBibG9jay9zZWN0aW9uIG1hcHBpbmfvvIhub3JtYWxseSAKPj4+Pj4+PiAx Ry8yTe+8iSB3aXRob3V0Cj4+Pj4+Pj4gaW5zcGVjdGluZyBjcmFzaGtlcm5lbAo+Pj4+Pj4+IDIu IFJlc2VydmUgY3Jhc2hrZXJuZWwgbWVtIGFzIHNhbWUgYXMgcHJldmlvdXMgZG9pbmcKPj4+Pj4+ PiAzLiBvbmx5IGNoYW5nZSB0aGUgY3Jhc2hrZXJubGUgbWVtIG1hcHBpbmcgdG8gbm9ybWFsIAo+ Pj4+Pj4+IG1hcHBpbmcobm9ybWFsbHkgNGspLgo+Pj4+Pj4+IFdpdGggdGhpcyBtZXRob2QsIHRo ZXJlIGFyZSBibG9jay9zZWN0aW9uIG1hcHBpbmcgYXMgbW9yZSBhcyAKPj4+Pj4+PiBwb3NzaWJs ZS4KPj4+Pj4+Cj4+Pj4+PiBUaGlzIGRvZXMgbm90IGFuc3dlciB0aGUgcXVlc3Rpb24gd2h5IGNo YW5naW5nIHRoZSB3YXkgdGhlIG1lbW9yeSAKPj4+Pj4+IGlzIG1hcHBlZAo+Pj4+Pj4gd2hlbiB0 aGVyZSBpcyBaT05FX0RNQS9ETUEzMiBhbmQgY3Jhc2hrZXJuZWwgd29uJ3QgY2F1c2UgYSAKPj4+ Pj4+IHJlZ3Jlc3Npb24uCj4+Pj4+Pgo+Pj4+PiAxLlF1b3RlZCBtZXNzYWdlcyBmcm9tIGFyY2gv YXJtNjQvbW0vaW5pdC5jCj4+Pj4+Cj4+Pj4+ICJNZW1vcnkgcmVzZXJ2YXRpb24gZm9yIGNyYXNo IGtlcm5lbCBlaXRoZXIgZG9uZSBlYXJseSBvciBkZWZlcnJlZAo+Pj4+PiBkZXBlbmRpbmcgb24g RE1BIG1lbW9yeSB6b25lcyBjb25maWdzIChaT05FX0RNQSkgLS0KPj4+Pj4KPj4+Pj4gSW4gYWJz ZW5jZSBvZiBaT05FX0RNQSBjb25maWdzIGFybTY0X2RtYV9waHlzX2xpbWl0IGluaXRpYWxpemVk Cj4+Pj4+IGhlcmUgaW5zdGVhZCBvZiBtYXhfem9uZV9waHlzKCkuwqAgVGhpcyBsZXRzIGVhcmx5 IHJlc2VydmF0aW9uIG9mCj4+Pj4+IGNyYXNoIGtlcm5lbCBtZW1vcnkgd2hpY2ggaGFzIGEgZGVw ZW5kZW5jeSBvbiBhcm02NF9kbWFfcGh5c19saW1pdC4KPj4+Pj4gUmVzZXJ2aW5nIG1lbW9yeSBl YXJseSBmb3IgY3Jhc2gga2VybmVsIGFsbG93cyBsaW5lYXIgY3JlYXRpb24gb2YgCj4+Pj4+IGJs b2NrCj4+Pj4+IG1hcHBpbmdzIChncmVhdGVyIHRoYW4gcGFnZS1ncmFudWxhcml0eSkgZm9yIGFs bCB0aGUgbWVtb3J5IGJhbmsgCj4+Pj4+IHJhbmdzLgo+Pj4+PiBJbiB0aGlzIHNjaGVtZSBhIGNv bXBhcmF0aXZlbHkgcXVpY2tlciBib290IGlzIG9ic2VydmVkLgo+Pj4+Pgo+Pj4+PiBJZiBaT05F X0RNQSBjb25maWdzIGFyZSBkZWZpbmVkLCBjcmFzaCBrZXJuZWwgbWVtb3J5IHJlc2VydmF0aW9u Cj4+Pj4+IGlzIGRlbGF5ZWQgdW50aWwgRE1BIHpvbmUgbWVtb3J5IHJhbmdlIHNpemUgaW5pdGlh bGl6YXRpb24gCj4+Pj4+IHBlcmZvcm1lZCBpbgo+Pj4+PiB6b25lX3NpemVzX2luaXQoKS7CoCBU aGUgZGVmZXIgaXMgbmVjZXNzYXJ5IHRvIHN0ZWVyIGNsZWFyIG9mIERNQSB6b25lCj4+Pj4+IG1l bW9yeSByYW5nZSB0byBhdm9pZCBvdmVybGFwIGFsbG9jYXRpb24uwqAgU28gY3Jhc2gga2VybmVs IG1lbW9yeSAKPj4+Pj4gYm91bmRhcmllcyBhcmUgbm90IGtub3duIHdoZW4gbWFwcGluZyBhbGwg YmFuayBtZW1vcnkgcmFuZ2VzLCB3aGljaCAKPj4+Pj4gb3RoZXJ3aXNlIG1lYW5zIG5vdCBwb3Nz aWJsZSB0byBleGNsdWRlIGNyYXNoIGtlcm5lbCByYW5nZSBmcm9tIAo+Pj4+PiBjcmVhdGluZyBi bG9jayBtYXBwaW5ncyBzbyBwYWdlLWdyYW51bGFyaXR5IG1hcHBpbmdzIGFyZSBjcmVhdGVkIAo+ Pj4+PiBmb3IgdGhlIGVudGlyZSBtZW1vcnkgcmFuZ2UuIgo+Pj4+Pgo+Pj4+PiBOYW1lbHksIHRo ZSBpbml0IG9yZGVyOiBtZW1ibG9jayBpbml0LS0tPmxpbmVhciBtZW0gbWFwcGluZyg0ayAKPj4+ Pj4gbWFwcGluZyBmb3IgY3Jhc2hrZXJuZWwsIHJlcXVpcmluaWcgcGFnZS1ncmFudWxhcml0eSAK Pj4+Pj4gY2hhbmdpbmcpKS0tLT56b25lIGRtYSBsaW1pdC0tLT5yZXNlcnZlIGNyYXNoa2VybmVs Lgo+Pj4+PiBTbyB3aGVuIGVuYWJsZSBaT05FIERNQSBhbmQgdXNpbmcgY3Jhc2hrZXJuZWwsIHRo ZSBtZW0gbWFwcGluZyAKPj4+Pj4gdXNpbmcgNGsgbWFwcGluZy4KPj4+Pj4KPj4+Pj4gMi5BcyBt ZW50aW9uZWQgYWJvdmUsIHdoZW4gbGluZWFyIG1lbSB1c2UgNGsgbWFwcGluZyBzaW1wbHksIHRo ZXJlIAo+Pj4+PiBpcyBoaWdoIGR0bGIgbWlzcyhkZWdyYWRlIHBlcmZvcm1hbmNlKS4KPj4+Pj4g VGhpcyBwYXRjaCB1c2UgYmxvY2svc2VjdGlvbiBtYXBwaW5nIGFzIGZhciBhcyBwb3NzaWJsZSB3 aXRoIAo+Pj4+PiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KPj4+Pj4KPj4+Pj4gMy5UaGlzIHBh dGNoIHJlc2VydmUgY3Jhc2hrZXJuZWwgYXMgc2FtZSBhcyB0aGUgaGlzdG9yeShaT05FIERNQSAm IAo+Pj4+PiBjcmFzaGtlcm5lbCByZXNlcnZpbmcgb3JkZXIpLCBhbmQgb25seSBjaGFuZ2UgdGhl IGxpbmVhciBtZW0gCj4+Pj4+IG1hcHBpbmcgdG8gYmxvY2svc2VjdGlvbiBtYXBwaW5nLgo+Pj4+ PiAuCj4+Pj4+Cj4+Pj4KPj4+PiBJIHRoaW5rIE1pa2UgUmFwb3BvcnQncyBwcm9iYWJseSBhc2tp bmcgeW91IHRvIGFuc3dlciB3aGV0aGVyIHlvdSd2ZQo+Pj4+IHRha2VuIGludG8gYWNjb3VudCBz dWNoIGFzIEJCTS4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZToKPj4+PiB3ZSBzaG91 bGQgcHJlcGFyZSB0aGUgbmV4dCBsZXZlbCBwZ3RhYmxlIGZpcnN0LCB0aGVuIGNoYW5nZSAyTSBi bG9jawo+Pj4+IG1hcHBpbmcgdG8gNEsgcGFnZSBtYXBwaW5nLCBhbmQgZmx1c2ggVExCIGF0IHRo ZSBlbmQuCj4+Pj4+ICtzdGF0aWMgdm9pZCBpbml0X2NyYXNoa2VybmVsX3BtZChwdWRfdCAqcHVk cCwgdW5zaWduZWQgbG9uZyBhZGRyLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB1bnNpZ25lZCBsb25nIGVuZCwgcGh5c19hZGRyX3QgcGh5cywKPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGdwcm90X3QgcHJvdCwKPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShpbnQpLCBp bnQgZmxhZ3MpCj4+Pj4gK3sKPj4+PiArwqDCoMKgIHBoeXNfYWRkcl90IG1hcF9vZmZzZXQ7Cj4+ Pj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIG5leHQ7Cj4+Pj4gK8KgwqDCoCBwbWRfdCAqcG1kcDsK Pj4+PiArwqDCoMKgIHBtZHZhbF90IHBtZHZhbDsKPj4+PiArCj4+Pj4gK8KgwqDCoCBwbWRwID0g cG1kX29mZnNldChwdWRwLCBhZGRyKTsKPj4+PiArwqDCoMKgIGRvIHsKPj4+PiArwqDCoMKgwqDC oMKgwqAgbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOwo+Pj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAoIXBtZF9ub25lKCpwbWRwKSAmJiBwbWRfc2VjdCgqcG1kcCkpIHsKPj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwaHlzX2FkZHJfdCBwdGVfcGh5cyA9IHBndGFibGVfYWxsb2MoUEFH RV9TSElGVCk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcG1kX2NsZWFyKHBtZHApOwo+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBtZHZhbCA9IFBNRF9UWVBFX1RBQkxFIHwgUE1E X1RBQkxFX1VYTjsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZmxhZ3MgJiBOT19F WEVDX01BUFBJTkdTKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcG1kdmFs IHw9IFBNRF9UQUJMRV9QWE47Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19wbWRfcG9w dWxhdGUocG1kcCwgcHRlX3BoeXMsIHBtZHZhbCk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShhZGRyLCBhZGRyICsgUEFHRV9TSVpFKTsKPj4+Pgo+ Pj4+IFRoZSBwZ3RhYmxlIGlzIGVtcHR5IG5vdy4gSG93ZXZlciwgbWVtb3J5IG90aGVyIHRoYW4g Y3Jhc2hrZXJuZWwgbWF5IAo+Pj4+IGJlIGJlaW5nIGFjY2Vzc2VkLgo+Pj4gMS5XaGVuIHJlc2Vy dmluZyBjcmFzaGtlcm5lbCBhbmQgcmVtYXBwaW5nIGxpbmVhciBtZW0gbWFwcGluZywgdGhlcmUg Cj4+PiBpcyBvbmx5IG9uZSBib290IGNwdSBydW5uaW5nLiBUaGVyZSBpcyBubyBvdGhlciBjcHUv dGhyZWFkIHJ1bm5pbmcgYXQgCj4+PiB0aGUgc2FtZSB0aW1lLgo+Pgo+PiBTbywgcHV0IHRoaXMg aW4gdGhlIGNvZGUgY29tbWVudD8KPiBPSy4KPj4KPj4gSWYgc2NhbGFiaWxpdHkgaXMgY29uc2lk ZXJlZCBhbmQgdW5wcmVkaWN0YWJsZSBjaGFuZ2VzIG9jY3VyIGluIHRoZSAKPj4gZnV0dXJlLCBm b3IgZXhhbXBsZSwKPj4gb3RoZXIgbW9kdWxlcyBhbHNvIG5lZWQgdGhpcyBtYXBwaW5nIGZ1bmN0 aW9uLiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gCj4+IGRlYWwgd2l0aCB0aGUgQkJNIG5vdywKPj4g YW5kIG1ha2UgdGhpcyBwdWJsaWMuCj4gT0ssIGNvdWxkIHlvdSBnaXZlIG1lIHNvbWUgYWR2aWNl Pwo+Pgo+Pgo+Pj4KPj4+IDIuV2hlbiBjbGVhcmluZyBibG9jay9zZWN0aW9uIG1hcHBpbmcsIEkg aGF2ZSBmbHVzaCB0bGIgYnkgCj4+PiBmbHVzaF90bGJfa2VybmVsX3JhbmdlLiBBZnRlcndhcmRz IHJlYnVpbHQgNGsgbWFwcGluZyhJIHRoaW5rIGl0J3Mgbm8gCj4+PiBuZWVkIGZsdXNoIHRsYiku Cj4+Cj4+Cj4+Pgo+Pj4+Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1hcF9v ZmZzZXQgPSBhZGRyIC0gKGFkZHIgJiBQTURfTUFTSyk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKG1hcF9vZmZzZXQpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBhbGxvY19pbml0X2NvbnRfcHRlKHBtZHAsIGFkZHIgJiBQTURfTUFTSywgYWRkciwKPj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlzIC0gbWFw X29mZnNldCwgcHJvdCwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlmIChuZXh0IDwgKGFkZHIgJiBQTURfTUFTSykgKyBQTURfU0laRSkKPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFsbG9jX2luaXRfY29udF9wdGUocG1k cCwgbmV4dCwgKGFkZHIgJiBQVURfTUFTSykgKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFBVRF9TSVpFLCBuZXh0IC0gYWRkciArIHBoeXMsCj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJvdCwg cGd0YWJsZV9hbGxvYywgZmxhZ3MpOwo+Pgo+PiBIZXJlIGFuZCBhbGxvY19jcmFzaGtlcm5lbF9w dWQoKSBzaG91bGQgdXNlIHRoZSByYXcgZmxhZ3MuIEl0IG1heSBub3QgCj4+IGNvbnRhaW7CoCAo Tk9fQkxPQ0tfTUFQUElOR1MgfCBOT19DT05UX01BUFBJTkdTKQo+IFllcy4gdGhlIG1lbSBvdXQg b2YgY3Jhc2hrZXJuZWwgc2hvdWxkIHVzZSBibG9jay9zZWN0aW9uIG1hcHBpbmcgYXMgZmFyIAo+ IGFzIHBvc3NpYmxlIGluY2x1ZGluZyB0aGUgTGVmdE1hcmdpbiBhbmQgUmlnaHRNYXJnaW4uCj4g QnV0IEkgaGFkIHRlc3QgaXQgb24gSGlTaWxpY29uIEt1bnBlbmcgOTIwLTY0MjYgd2l0aCBpdCBh bmQgZ2V0IAo+IHBlcmZvcm1hY25lIGRlZ3JhZGUod2l0aG91dCBOT19CTE9DS19NQVBQSU5HUy9O T19DT05UX01BUFBJTkdTIGZsYWdzIGZvciAKPiB0aGUgbGVmdC9yaWdodCBtYXJnaW4pCj4gSXQn cyBzdHJhbmdlLCBjb3VsZCB5b3UgZ2l2ZSBzb21lIGFkdmljZT8gTWF5YmUgaXQncyBnb29kIGZv ciBvdGhlciBhcm0gCj4gcGxhdGZvcm0gZXhjZXB0IGZvciBIaVNpbGljb24gS3VucGVuZyA5MjAt NjQyNi4KVGhlcmUgc2hvdWxkIHNwbGl0IG5vbi1jcmFzaGtlcm5lbCBtZW0gW1tbIHdpdGhvdXQg XV1dCk5PX0JMT0NLX01BUFBJTkdTL05PX0NPTlRfTUFQUElOR1MgZmxhZ3MKCkkgaGFkIHRlc3Qg aXQgb24gb3RoZXIgYXJtIHBsYXRmb3JtIFtbWyBub24gSGlTaWxpY29uIGFybSBwbGF0Zm9ybSBd XV0gCmFuZCBhbHNvIGdldCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBncmVhdGx5LgoKQ291bGQg eW91IGhlbHAgbWUgdG8gY2hlY2sgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbnQgSGlTaWxpY29uIEt1 bnBlbmcgCjkyMC02NDI2IGFuZCBvdGhlciBhcm0gcGxhdGZvcm0gZm9yIHRoZSBibG9jay9zZWN0 aW9uIG1hcHBpbmcgVExCIHN1cHBvcnQ/Cgo+Pgo+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4g K8KgwqDCoMKgwqDCoMKgIGFsbG9jX2NyYXNoa2VybmVsX2NvbnRfcHRlKHBtZHAsIGFkZHIsIG5l eHQsIHBoeXMsIHByb3QsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHBndGFibGVfYWxsb2MsIGZsYWdzKTsKPj4+PiArwqDCoMKgwqDCoMKgwqAgcGh5 cyArPSBuZXh0IC0gYWRkcjsKPj4+PiArwqDCoMKgIH0gd2hpbGUgKHBtZHArKywgYWRkciA9IG5l eHQsIGFkZHIgIT0gZW5kKTsKPj4+PiArfQo+Pj4+Cj4+PiAuCj4+Pgo+PgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWls aW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=