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 CB27DC43334 for ; Mon, 27 Jun 2022 16:51:07 +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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc: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=WSvnpIAMoJ3As0ItiWI8c2V3wA0pZ+hWOM3Lq85KcIM=; b=vrBLB7Z7Mj5KIN N2l+l+RV6l6IktH9BJl51sGMMNAyRFYkOZpcLF+eIv7cj2N7fW4LCLXvaEPiDEnl1d0COAfDs5JpM c3h3CDpnmnArLuCPSxwPtjs8Gt71XAXyrfF0GybVrPQgGVrEARXNr25UxlIlIDCvNp7aLys6q0Re2 enjw2K31Je15NYUluDX6lyQurpvJtsMXhSTxDOi4ndo8y1P39OudfVzQWxmb86qIf5TRUtL5PPAce BrfgMJ3Rg2El9JRqYMC3P96E5k7sOpXwIxQ7TPcmIcZGan2p+k+icjUaeigb1WO9/LSPVLF96E7eg fm6tq2oYrgV0cO+1BUZg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o5rw4-001to6-Bs; Mon, 27 Jun 2022 16:50:04 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o5rvr-001tl0-HG for linux-arm-kernel@lists.infradead.org; Mon, 27 Jun 2022 16:49:54 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 0FE20B818D7; Mon, 27 Jun 2022 16:49:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C386EC3411D; Mon, 27 Jun 2022 16:49:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656348587; bh=aSGSX1ASo5IBDh6L8HBXDPH7ehKPSmx8CallCVsLjBs=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=KDQktQiyglZjmHJ5sxQGK4Cypl4dCxYfraR4jplnTElVbyUtONtjRdhyNxjcJmP+H IyKU6U8zWPpZNMkOEMHUxXGcqStmHArKO/LtboCYFxLTvfrBHHPg63UzYI7+D8Fk7j +uLJ/gCVdS9+Ej5EOzjH6n3nZu4zIgzCEgn71CRtjlaQ5QiuM6gEv2/tf671MAUxm3 EwlQ1/RRS9N3wGbcHtukidvPi6HsOz+YMdo2pE9BmpbHxe2ASs8ikTTHDHhowqmsti WctQuGIUzMAkQnLZpmWn86fVRfWDSkBPojHO4BnJ1oPF/d0JVkVDlS+42NxDZd2Bs4 U88tiYn1syjjQ== Date: Mon, 27 Jun 2022 19:49:30 +0300 From: Mike Rapoport To: "guanghui.fgh" 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 Subject: Re: [PATCH] arm64: mm: fix linear mapping mem access performace degradation Message-ID: References: <1656241815-28494-1-git-send-email-guanghuifeng@linux.alibaba.com> <4d18d303-aeed-0beb-a8a4-32893f2d438d@linux.alibaba.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220627_094951_916161_BDD3E78A X-CRM114-Status: GOOD ( 56.75 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gTW9uLCBKdW4gMjcsIDIwMjIgYXQgMDY6NDY6NTBQTSArMDgwMCwgZ3VhbmdodWkuZmdoIHdy b3RlOgo+IOWcqCAyMDIyLzYvMjcgMTc6NDksIE1pa2UgUmFwb3BvcnQg5YaZ6YGTOgo+ID4gT24g TW9uLCBKdW4gMjcsIDIwMjIgYXQgMDU6MjQ6MTBQTSArMDgwMCwgZ3VhbmdodWkuZmdoIHdyb3Rl Ogo+ID4gPiDlnKggMjAyMi82LzI3IDE0OjM0LCBNaWtlIFJhcG9wb3J0IOWGmemBkzoKPiA+ID4g Cj4gPiA+ICAgICAgT24gU3VuLCBKdW4gMjYsIDIwMjIgYXQgMDc6MTA6MTVQTSArMDgwMCwgR3Vh bmdodWkgRmVuZyB3cm90ZToKPiA+ID4gCj4gPiA+ICAgICAgICAgIFRoZSBhcm02NCBjYW4gYnVp bGQgMk0vMUcgYmxvY2svc2VjdGlpb24gbWFwcGluZy4gV2hlbiB1c2luZyBETUEvRE1BMzIgem9u ZQo+ID4gPiAgICAgICAgICAoZW5hYmxlIGNyYXNoa2VybmVsLCBkaXNhYmxlIHJvZGF0YSBmdWxs LCBkaXNhYmxlIGtmZW5jZSksIHRoZSBtZW1fbWFwIHdpbGwKPiA+ID4gICAgICAgICAgdXNlIG5v biBibG9jay9zZWN0aW9uIG1hcHBpbmcoZm9yIGNyYXNoa2VybmVsIHJlcXVpcmVzIHRvIHNocmlu ayB0aGUgcmVnaW9uCj4gPiA+ICAgICAgICAgIGluIHBhZ2UgZ3JhbnVsYXJpdHkpLiBCdXQgaXQg d2lsbCBkZWdyYWRlIHBlcmZvcm1hbmNlIHdoZW4gZG9pbmcgbGFyZ2luZwo+ID4gPiAgICAgICAg ICBjb250aW51b3VzIG1lbSBhY2Nlc3MgaW4ga2VybmVsKG1lbWNweS9tZW1tb3ZlLCBldGMpLgo+ ID4gPiAKPiA+ID4gICAgICAgICAgVGhlcmUgYXJlIG1hbnkgY2hhbmdlcyBhbmQgZGlzY3Vzc2lv bnM6Cj4gPiA+ICAgICAgICAgIGNvbW1pdCAwMzE0OTU2MzViNDYKPiA+ID4gICAgICAgICAgY29t bWl0IDFhOGUxY2VmNzYwMwo+ID4gPiAgICAgICAgICBjb21taXQgODQyNGVjZGRlN2RmCj4gPiA+ ICAgICAgICAgIGNvbW1pdCAwYTMwYzUzNTczYjAKPiA+ID4gICAgICAgICAgY29tbWl0IDI2ODcy NzVhNTg0Mwo+ID4gPiAKPiA+ID4gICAgICBQbGVhc2UgaW5jbHVkZSBvbmVsaW5lIHN1bW1hcnkg b2YgdGhlIGNvbW1pdC4gKFNlZSBzZWN0aW9uICJEZXNjcmliZSB5b3VyCj4gPiA+ICAgICAgY2hh bmdlcyIgaW4gRG9jdW1lbnRhdGlvbi9wcm9jZXNzL3N1Ym1pdHRpbmctcGF0Y2hlcy5yc3QpCj4g PiA+IAo+ID4gPiBPSywgSSB3aWxsIGFkZCBvbmVsaW5lIHN1bW1hcnkgaW4gdGhlIGdpdCBjb21t aXQgbWVzc2FnZXMuCj4gPiA+IAo+ID4gPiAgICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMgbWVt X21hcCB0byB1c2UgYmxvY2svc2VjdGlvbiBtYXBwaW5nIHdpdGggY3Jhc2hrZXJuZWwuCj4gPiA+ ICAgICAgICAgIEZpcnN0bHksIGRvIGJsb2NrL3NlY3Rpb24gbWFwcGluZyhub3JtYWxseSAyTSBv ciAxRykgZm9yIGFsbCBhdmFpbCBtZW0gYXQKPiA+ID4gICAgICAgICAgbWVtX21hcCwgcmVzZXJ2 ZSBjcmFzaGtlcm5lbCBtZW1vcnkuIEFuZCB0aGVuIHdhbGtpbmcgcGFnZXRhYmxlIHRvIHNwbGl0 Cj4gPiA+ICAgICAgICAgIGJsb2NrL3NlY3Rpb24gbWFwcGluZyB0byBub24gYmxvY2svc2VjdGlv biBtYXBwaW5nKG5vcm1hbGx5IDRLKSBbW1tvbmx5XV1dCj4gPiA+ICAgICAgICAgIGZvciBjcmFz aGtlcm5lbCBtZW0uCj4gPiA+IAo+ID4gPiAgICAgIFRoaXMgYWxyZWFkeSBoYXBwZW5zIHdoZW4g Wk9ORV9ETUEvWk9ORV9ETUEzMiBhcmUgZGlzYWJsZWQuIFBsZWFzZSBleHBsYWluCj4gPiA+ICAg ICAgd2h5IGlzIGl0IE9rIHRvIGNoYW5nZSB0aGUgd2F5IHRoZSBtZW1vcnkgaXMgbWFwcGVkIHdp dGgKPiA+ID4gICAgICBaT05FX0RNQS9aT05FX0RNQTMyIGVuYWJsZWQuCj4gPiA+IAo+ID4gPiBJ biBzaG9ydDoKPiA+ID4gCj4gPiA+IDEuYnVpbGRpbmcgYWxsIGF2YWlsIG1lbSB3aXRoIGJsb2Nr L3NlY3Rpb24gbWFwcGluZ++8iG5vcm1hbGx5IDFHLzJN77yJIHdpdGhvdXQKPiA+ID4gaW5zcGVj dGluZyBjcmFzaGtlcm5lbAo+ID4gPiAyLiBSZXNlcnZlIGNyYXNoa2VybmVsIG1lbSBhcyBzYW1l IGFzIHByZXZpb3VzIGRvaW5nCj4gPiA+IDMuIG9ubHkgY2hhbmdlIHRoZSBjcmFzaGtlcm5sZSBt ZW0gbWFwcGluZyB0byBub3JtYWwgbWFwcGluZyhub3JtYWxseSA0aykuCj4gPiA+IFdpdGggdGhp cyBtZXRob2QsIHRoZXJlIGFyZSBibG9jay9zZWN0aW9uIG1hcHBpbmcgYXMgbW9yZSBhcyBwb3Nz aWJsZS4KPiA+IAo+ID4gVGhpcyBkb2VzIG5vdCBhbnN3ZXIgdGhlIHF1ZXN0aW9uIHdoeSBjaGFu Z2luZyB0aGUgd2F5IHRoZSBtZW1vcnkgaXMgbWFwcGVkCj4gPiB3aGVuIHRoZXJlIGlzIFpPTkVf RE1BL0RNQTMyIGFuZCBjcmFzaGtlcm5lbCB3b24ndCBjYXVzZSBhIHJlZ3Jlc3Npb24uCj4gPiAK PiAxLlF1b3RlZCBtZXNzYWdlcyBmcm9tIGFyY2gvYXJtNjQvbW0vaW5pdC5jCj4gCj4gIk1lbW9y eSByZXNlcnZhdGlvbiBmb3IgY3Jhc2gga2VybmVsIGVpdGhlciBkb25lIGVhcmx5IG9yIGRlZmVy cmVkCj4gZGVwZW5kaW5nIG9uIERNQSBtZW1vcnkgem9uZXMgY29uZmlncyAoWk9ORV9ETUEpIC0t Cj4gCj4gSW4gYWJzZW5jZSBvZiBaT05FX0RNQSBjb25maWdzIGFybTY0X2RtYV9waHlzX2xpbWl0 IGluaXRpYWxpemVkCj4gaGVyZSBpbnN0ZWFkIG9mIG1heF96b25lX3BoeXMoKS4gIFRoaXMgbGV0 cyBlYXJseSByZXNlcnZhdGlvbiBvZgo+IGNyYXNoIGtlcm5lbCBtZW1vcnkgd2hpY2ggaGFzIGEg ZGVwZW5kZW5jeSBvbiBhcm02NF9kbWFfcGh5c19saW1pdC4KPiBSZXNlcnZpbmcgbWVtb3J5IGVh cmx5IGZvciBjcmFzaCBrZXJuZWwgYWxsb3dzIGxpbmVhciBjcmVhdGlvbiBvZiBibG9jawo+IG1h cHBpbmdzIChncmVhdGVyIHRoYW4gcGFnZS1ncmFudWxhcml0eSkgZm9yIGFsbCB0aGUgbWVtb3J5 IGJhbmsgcmFuZ3MuCj4gSW4gdGhpcyBzY2hlbWUgYSBjb21wYXJhdGl2ZWx5IHF1aWNrZXIgYm9v dCBpcyBvYnNlcnZlZC4KPiAKPiBJZiBaT05FX0RNQSBjb25maWdzIGFyZSBkZWZpbmVkLCBjcmFz aCBrZXJuZWwgbWVtb3J5IHJlc2VydmF0aW9uCj4gaXMgZGVsYXllZCB1bnRpbCBETUEgem9uZSBt ZW1vcnkgcmFuZ2Ugc2l6ZSBpbml0aWFsaXphdGlvbiBwZXJmb3JtZWQgaW4KPiB6b25lX3NpemVz X2luaXQoKS4gIFRoZSBkZWZlciBpcyBuZWNlc3NhcnkgdG8gc3RlZXIgY2xlYXIgb2YgRE1BIHpv bmUKPiBtZW1vcnkgcmFuZ2UgdG8gYXZvaWQgb3ZlcmxhcCBhbGxvY2F0aW9uLiAgU28gY3Jhc2gg a2VybmVsIG1lbW9yeSBib3VuZGFyaWVzCj4gYXJlIG5vdCBrbm93biB3aGVuIG1hcHBpbmcgYWxs IGJhbmsgbWVtb3J5IHJhbmdlcywgd2hpY2ggb3RoZXJ3aXNlIG1lYW5zIG5vdAo+IHBvc3NpYmxl IHRvIGV4Y2x1ZGUgY3Jhc2gga2VybmVsIHJhbmdlIGZyb20gY3JlYXRpbmcgYmxvY2sgbWFwcGlu Z3Mgc28KPiBwYWdlLWdyYW51bGFyaXR5IG1hcHBpbmdzIGFyZSBjcmVhdGVkIGZvciB0aGUgZW50 aXJlIG1lbW9yeSByYW5nZS4iCj4gCj4gTmFtZWx5LCB0aGUgaW5pdCBvcmRlcjogbWVtYmxvY2sg aW5pdC0tLT5saW5lYXIgbWVtIG1hcHBpbmcoNGsgbWFwcGluZyBmb3IKPiBjcmFzaGtlcm5lbCwg cmVxdWlyaW5pZyBwYWdlLWdyYW51bGFyaXR5IGNoYW5naW5nKSktLS0+em9uZSBkbWEKPiBsaW1p dC0tLT5yZXNlcnZlIGNyYXNoa2VybmVsLgo+IFNvIHdoZW4gZW5hYmxlIFpPTkUgRE1BIGFuZCB1 c2luZyBjcmFzaGtlcm5lbCwgdGhlIG1lbSBtYXBwaW5nIHVzaW5nIDRrCj4gbWFwcGluZy4KPiAK PiAyLkFzIG1lbnRpb25lZCBhYm92ZSwgd2hlbiBsaW5lYXIgbWVtIHVzZSA0ayBtYXBwaW5nIHNp bXBseSwgdGhlcmUgaXMgaGlnaAo+IGR0bGIgbWlzcyhkZWdyYWRlIHBlcmZvcm1hbmNlKS4KPiBU aGlzIHBhdGNoIHVzZSBibG9jay9zZWN0aW9uIG1hcHBpbmcgYXMgZmFyIGFzIHBvc3NpYmxlIHdp dGggcGVyZm9ybWFuY2UKPiBpbXByb3ZlbWVudC4KPiAKPiAzLlRoaXMgcGF0Y2ggcmVzZXJ2ZSBj cmFzaGtlcm5lbCBhcyBzYW1lIGFzIHRoZSBoaXN0b3J5KFpPTkUgRE1BICYKPiBjcmFzaGtlcm5l bCByZXNlcnZpbmcgb3JkZXIpLCBhbmQgb25seSBjaGFuZ2UgdGhlIGxpbmVhciBtZW0gbWFwcGlu ZyB0bwo+IGJsb2NrL3NlY3Rpb24gbWFwcGluZy4KClRoYW5rIHlvdSBmb3IgdGhlIGV4cGxhbmF0 aW9uLiAKClNvIGlmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIHlvdSBzdWdnZXN0IHRvIHJlc2Vy dmUgdGhlIGNyYXNoIGtlcm5lbAptZW1vcnkgbGF0ZSByZWdhcmRsZXNzIG9mIFpPTkVfRE1BLzMy IGNvbmZpZ3VyYXRpb24gYW5kIHRoZW4gbWFwIHRoYXQgbWVtb3J5IAp1c2luZyBwYWdlIGxldmVs IG1hcHBpbmdzIGFmdGVyIHRoZSBtZW1vcnkgaXMgcmVzZXJ2ZWQuIAoKVGhpcyBtYWtlcyBzZW5z ZSwgYnV0IEkgdGhpbmsgdGhlIHBhdGNoIGhhcyBhIGZldyBzaG9ydGNvbWluZ3MgdGhhbiBuZWVk IHRvCmJlIGFkZHJlc3NlZC4KCj4gU2lnbmVkLW9mZi1ieTogR3VhbmdodWkgRmVuZyA8Z3Vhbmdo dWlmZW5nQGxpbnV4LmFsaWJhYmEuY29tPgo+IC0tLQo+ICBhcmNoL2FybTY0L2luY2x1ZGUvYXNt L21tdS5oIHwgICAxICsKPiAgYXJjaC9hcm02NC9tbS9pbml0LmMgICAgICAgICB8ICAgOCArLQo+ ICBhcmNoL2FybTY0L21tL21tdS5jICAgICAgICAgIHwgMjc0ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tLS0KPiAgMyBmaWxlcyBjaGFuZ2VkLCAyNTMgaW5zZXJ0aW9u cygrKSwgMzAgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVk ZS9hc20vbW11LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oCj4gaW5kZXggNDhmODQ2 Ni4uZGYxMTNjYyAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oCj4g KysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaAo+IEBAIC02Myw2ICs2Myw3IEBAIHN0 YXRpYyBpbmxpbmUgYm9vbCBhcm02NF9rZXJuZWxfdW5tYXBwZWRfYXRfZWwwKHZvaWQpCj4gIGV4 dGVybiB2b2lkIGFybTY0X21lbWJsb2NrX2luaXQodm9pZCk7Cj4gIGV4dGVybiB2b2lkIHBhZ2lu Z19pbml0KHZvaWQpOwo+ICBleHRlcm4gdm9pZCBib290bWVtX2luaXQodm9pZCk7Cj4gK2V4dGVy biB2b2lkIG1hcHBpbmdfY3Jhc2hrZXJuZWwodm9pZCk7CgpJIHRoaW5rIG1hcF9jcmFzaGtlcm5l bCgpIHdvdWxkIGJlIGEgYmV0dGVyIG5hbWUuCgo+ICBleHRlcm4gdm9pZCBfX2lvbWVtICplYXJs eV9pb19tYXAocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyB2aXJ0KTsKPiAgZXh0ZXJu IHZvaWQgaW5pdF9tZW1fcGdwcm90KHZvaWQpOwo+ICBleHRlcm4gdm9pZCBjcmVhdGVfcGdkX21h cHBpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBoeXNfYWRkcl90IHBoeXMsCj4gZGlmZiAtLWdp dCBhL2FyY2gvYXJtNjQvbW0vaW5pdC5jIGIvYXJjaC9hcm02NC9tbS9pbml0LmMKPiBpbmRleCAz MzllZTg0Li4wZTc1NDBiIDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtNjQvbW0vaW5pdC5jCj4gKysr IGIvYXJjaC9hcm02NC9tbS9pbml0LmMKPiBAQCAtMzg4LDEwICszODgsNiBAQCB2b2lkIF9faW5p dCBhcm02NF9tZW1ibG9ja19pbml0KHZvaWQpCj4gIAl9Cj4gIAo+ICAJZWFybHlfaW5pdF9mZHRf c2Nhbl9yZXNlcnZlZF9tZW0oKTsKPiAtCj4gLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1pPTkVf RE1BKSAmJiAhSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEzMikpCj4gLQkJcmVzZXJ2ZV9jcmFz aGtlcm5lbCgpOwo+IC0KPiAgCWhpZ2hfbWVtb3J5ID0gX192YShtZW1ibG9ja19lbmRfb2ZfRFJB TSgpIC0gMSkgKyAxOwo+ICB9Cj4gIAo+IEBAIC00MzgsOCArNDM0LDggQEAgdm9pZCBfX2luaXQg Ym9vdG1lbV9pbml0KHZvaWQpCj4gIAkgKiByZXF1ZXN0X3N0YW5kYXJkX3Jlc291cmNlcygpIGRl cGVuZHMgb24gY3Jhc2hrZXJuZWwncyBtZW1vcnkgYmVpbmcKPiAgCSAqIHJlc2VydmVkLCBzbyBk byBpdCBoZXJlLgo+ICAJICovCj4gLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEpIHx8 IElTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1BMzIpKQo+IC0JCXJlc2VydmVfY3Jhc2hrZXJuZWwo KTsKPiArCXJlc2VydmVfY3Jhc2hrZXJuZWwoKTsKPiArCW1hcHBpbmdfY3Jhc2hrZXJuZWwoKTsK ClRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIHJlc2VydmVfY3Jhc2hrZXJuZWwoKSBkaXJlY3RseS4K IAo+ICAJbWVtYmxvY2tfZHVtcF9hbGwoKTsKPiAgfQo+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0 L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuYwo+IGluZGV4IDYyNmVjMzIuLjA2NzJhZmQg MTAwNjQ0Cj4gLS0tIGEvYXJjaC9hcm02NC9tbS9tbXUuYwo+ICsrKyBiL2FyY2gvYXJtNjQvbW0v bW11LmMKPiBAQCAtNDk4LDYgKzQ5OCwyNTYgQEAgc3RhdGljIGludCBfX2luaXQgZW5hYmxlX2Ny YXNoX21lbV9tYXAoY2hhciAqYXJnKQo+ICB9Cj4gIGVhcmx5X3BhcmFtKCJjcmFzaGtlcm5lbCIs IGVuYWJsZV9jcmFzaF9tZW1fbWFwKTsKPiAgCj4gKyNpZmRlZiBDT05GSUdfS0VYRUNfQ09SRQo+ ICtzdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IGVhcmx5X2NyYXNoa2VybmVsX3BndGFibGVfYWxs b2MoaW50IHNoaWZ0KQo+ICt7Cj4gKwlwaHlzX2FkZHJfdCBwaHlzOwo+ICsJdm9pZCAqcHRyOwo+ ICsKPiArCXBoeXMgPSBtZW1ibG9ja19waHlzX2FsbG9jX3JhbmdlKFBBR0VfU0laRSwgUEFHRV9T SVpFLCAwLAo+ICsJCQkJCSBNRU1CTE9DS19BTExPQ19OT0xFQUtUUkFDRSk7Cj4gKwlpZiAoIXBo eXMpCj4gKwkJcGFuaWMoIkZhaWxlZCB0byBhbGxvY2F0ZSBwYWdlIHRhYmxlIHBhZ2VcbiIpOwo+ ICsKPiArCXB0ciA9ICh2b2lkICopX19waHlzX3RvX3ZpcnQocGh5cyk7Cj4gKwltZW1zZXQocHRy LCAwLCBQQUdFX1NJWkUpOwo+ICsJcmV0dXJuIHBoeXM7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGluaXRfY3Jhc2hrZXJuZWxfcHRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCj4g KwkJCQkgdW5zaWduZWQgbG9uZyBlbmQsCj4gKwkJCQkgcGh5c19hZGRyX3QgcGh5cywgcGdwcm90 X3QgcHJvdCkKPiArewo+ICsJcHRlX3QgKnB0ZXA7Cj4gKwlwdGVwID0gcHRlX29mZnNldF9rZXJu ZWwocG1kcCwgYWRkcik7Cj4gKwlkbyB7Cj4gKwkJc2V0X3B0ZShwdGVwLCBwZm5fcHRlKF9fcGh5 c190b19wZm4ocGh5cyksIHByb3QpKTsKPiArCQlwaHlzICs9IFBBR0VfU0laRTsKPiArCX0gd2hp bGUgKHB0ZXArKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgYWxsb2NfY3Jhc2hrZXJuZWxfY29udF9wdGUocG1kX3QgKnBtZHAsIHVuc2ln bmVkIGxvbmcgYWRkciwKPiArCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgcGh5c19hZGRy X3QgcGh5cywKPiArCQkJCSAgICAgICBwZ3Byb3RfdCBwcm90LAo+ICsJCQkJICAgICAgIHBoeXNf YWRkcl90ICgqcGd0YWJsZV9hbGxvYykoaW50KSwKPiArCQkJCSAgICAgICBpbnQgZmxhZ3MpCj4g K3sKPiArCXVuc2lnbmVkIGxvbmcgbmV4dDsKPiArCXBtZF90IHBtZCA9IFJFQURfT05DRSgqcG1k cCk7Cj4gKwo+ICsJQlVHX09OKHBtZF9zZWN0KHBtZCkpOwo+ICsJaWYgKHBtZF9ub25lKHBtZCkp IHsKPiArCQlwbWR2YWxfdCBwbWR2YWwgPSBQTURfVFlQRV9UQUJMRSB8IFBNRF9UQUJMRV9VWE47 Cj4gKwkJcGh5c19hZGRyX3QgcHRlX3BoeXM7Cj4gKwo+ICsJCWlmIChmbGFncyAmIE5PX0VYRUNf TUFQUElOR1MpCj4gKwkJCXBtZHZhbCB8PSBQTURfVEFCTEVfUFhOOwo+ICsJCUJVR19PTighcGd0 YWJsZV9hbGxvYyk7Cj4gKwkJcHRlX3BoeXMgPSBwZ3RhYmxlX2FsbG9jKFBBR0VfU0hJRlQpOwo+ ICsJCV9fcG1kX3BvcHVsYXRlKHBtZHAsIHB0ZV9waHlzLCBwbWR2YWwpOwo+ICsJCXBtZCA9IFJF QURfT05DRSgqcG1kcCk7Cj4gKwl9Cj4gKwlCVUdfT04ocG1kX2JhZChwbWQpKTsKPiArCj4gKwlk byB7Cj4gKwkJcGdwcm90X3QgX19wcm90ID0gcHJvdDsKPiArCQluZXh0ID0gcHRlX2NvbnRfYWRk cl9lbmQoYWRkciwgZW5kKTsKPiArCQlpbml0X2NyYXNoa2VybmVsX3B0ZShwbWRwLCBhZGRyLCBu ZXh0LCBwaHlzLCBfX3Byb3QpOwo+ICsJCXBoeXMgKz0gbmV4dCAtIGFkZHI7Cj4gKwl9IHdoaWxl IChhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpbml0 X2NyYXNoa2VybmVsX3BtZChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLAo+ICsJCQkJ IHVuc2lnbmVkIGxvbmcgZW5kLCBwaHlzX2FkZHJfdCBwaHlzLAo+ICsJCQkJIHBncHJvdF90IHBy b3QsCj4gKwkJCQkgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShpbnQpLCBpbnQgZmxhZ3Mp Cj4gK3sKPiArCXBoeXNfYWRkcl90IG1hcF9vZmZzZXQ7Cj4gKwl1bnNpZ25lZCBsb25nIG5leHQ7 Cj4gKwlwbWRfdCAqcG1kcDsKPiArCXBtZHZhbF90IHBtZHZhbDsKPiArCj4gKwlwbWRwID0gcG1k X29mZnNldChwdWRwLCBhZGRyKTsKPiArCWRvIHsKPiArCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFk ZHIsIGVuZCk7Cj4gKwkJaWYgKCFwbWRfbm9uZSgqcG1kcCkgJiYgcG1kX3NlY3QoKnBtZHApKSB7 Cj4gKwkJCXBoeXNfYWRkcl90IHB0ZV9waHlzID0gcGd0YWJsZV9hbGxvYyhQQUdFX1NISUZUKTsK PiArCQkJcG1kX2NsZWFyKHBtZHApOwo+ICsJCQlwbWR2YWwgPSBQTURfVFlQRV9UQUJMRSB8IFBN RF9UQUJMRV9VWE47Cj4gKwkJCWlmIChmbGFncyAmIE5PX0VYRUNfTUFQUElOR1MpCj4gKwkJCQlw bWR2YWwgfD0gUE1EX1RBQkxFX1BYTjsKPiArCQkJX19wbWRfcG9wdWxhdGUocG1kcCwgcHRlX3Bo eXMsIHBtZHZhbCk7Cj4gKwkJCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoYWRkciwgYWRkciArIFBB R0VfU0laRSk7Cj4gKwo+ICsJCQltYXBfb2Zmc2V0ID0gYWRkciAtIChhZGRyICYgUE1EX01BU0sp Owo+ICsJCQlpZiAobWFwX29mZnNldCkKPiArCQkJICAgIGFsbG9jX2luaXRfY29udF9wdGUocG1k cCwgYWRkciAmIFBNRF9NQVNLLCBhZGRyLAo+ICsJCQkJCQlwaHlzIC0gbWFwX29mZnNldCwgcHJv dCwKPiArCQkJCQkJcGd0YWJsZV9hbGxvYywgZmxhZ3MpOwo+ICsKPiArCQkJaWYgKG5leHQgPCAo YWRkciAmIFBNRF9NQVNLKSArIFBNRF9TSVpFKQo+ICsJCQkgICAgYWxsb2NfaW5pdF9jb250X3B0 ZShwbWRwLCBuZXh0LCAoYWRkciAmIFBVRF9NQVNLKSArCj4gKwkJCQkJCVBVRF9TSVpFLCBuZXh0 IC0gYWRkciArIHBoeXMsCj4gKwkJCQkJCXByb3QsIHBndGFibGVfYWxsb2MsIGZsYWdzKTsKPiAr CQl9Cj4gKwkJYWxsb2NfY3Jhc2hrZXJuZWxfY29udF9wdGUocG1kcCwgYWRkciwgbmV4dCwgcGh5 cywgcHJvdCwKPiArCQkJCQkgICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7Cj4gKwkJcGh5cyArPSBu ZXh0IC0gYWRkcjsKPiArCX0gd2hpbGUgKHBtZHArKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5k KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYWxsb2NfY3Jhc2hrZXJuZWxfY29udF9wbWQocHVk X3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKPiArCQkJCSAgICAgICB1bnNpZ25lZCBsb25n IGVuZCwgcGh5c19hZGRyX3QgcGh5cywKPiArCQkJCSAgICAgICBwZ3Byb3RfdCBwcm90LAo+ICsJ CQkJICAgICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoaW50KSwKPiArCQkJCSAgICAg ICBpbnQgZmxhZ3MpCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgbmV4dDsKPiArCXB1ZF90IHB1ZCA9 IFJFQURfT05DRSgqcHVkcCk7Cj4gKwo+ICsJLyoKPiArCSAqIENoZWNrIGZvciBpbml0aWFsIHNl Y3Rpb24gbWFwcGluZ3MgaW4gdGhlIHBnZC9wdWQuCj4gKwkgKi8KPiArCUJVR19PTihwdWRfc2Vj dChwdWQpKTsKPiArCWlmIChwdWRfbm9uZShwdWQpKSB7Cj4gKwkJcHVkdmFsX3QgcHVkdmFsID0g UFVEX1RZUEVfVEFCTEUgfCBQVURfVEFCTEVfVVhOOwo+ICsJCXBoeXNfYWRkcl90IHBtZF9waHlz Owo+ICsKPiArCQlpZiAoZmxhZ3MgJiBOT19FWEVDX01BUFBJTkdTKQo+ICsJCQlwdWR2YWwgfD0g UFVEX1RBQkxFX1BYTjsKPiArCQlCVUdfT04oIXBndGFibGVfYWxsb2MpOwo+ICsJCXBtZF9waHlz ID0gcGd0YWJsZV9hbGxvYyhQTURfU0hJRlQpOwo+ICsJCV9fcHVkX3BvcHVsYXRlKHB1ZHAsIHBt ZF9waHlzLCBwdWR2YWwpOwo+ICsJCXB1ZCA9IFJFQURfT05DRSgqcHVkcCk7Cj4gKwl9Cj4gKwlC VUdfT04ocHVkX2JhZChwdWQpKTsKPiArCj4gKwlkbyB7Cj4gKwkJcGdwcm90X3QgX19wcm90ID0g cHJvdDsKPiArCQluZXh0ID0gcG1kX2NvbnRfYWRkcl9lbmQoYWRkciwgZW5kKTsKPiArCQlpbml0 X2NyYXNoa2VybmVsX3BtZChwdWRwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QsCj4gKwkJCQkg ICAgIHBndGFibGVfYWxsb2MsIGZsYWdzKTsKPiArCQlwaHlzICs9IG5leHQgLSBhZGRyOwo+ICsJ fSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgYWxsb2NfY3Jhc2hrZXJuZWxfcHVkKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIs Cj4gKwkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kLCBwaHlzX2FkZHJfdCBwaHlzLAo+ICsJCQkJICBw Z3Byb3RfdCBwcm90LAo+ICsJCQkJICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGludCks Cj4gKwkJCQkgIGludCBmbGFncykKPiArewo+ICsJcGh5c19hZGRyX3QgbWFwX29mZnNldDsKPiAr CXVuc2lnbmVkIGxvbmcgbmV4dDsKPiArCXB1ZF90ICpwdWRwOwo+ICsJcDRkX3QgKnA0ZHAgPSBw NGRfb2Zmc2V0KHBnZHAsIGFkZHIpOwo+ICsJcDRkX3QgcDRkID0gUkVBRF9PTkNFKCpwNGRwKTsK PiArCXB1ZHZhbF90IHB1ZHZhbDsKPiArCj4gKwlpZiAocDRkX25vbmUocDRkKSkgewo+ICsJCXA0 ZHZhbF90IHA0ZHZhbCA9IFA0RF9UWVBFX1RBQkxFIHwgUDREX1RBQkxFX1VYTjsKPiArCQlwaHlz X2FkZHJfdCBwdWRfcGh5czsKPiArCj4gKwkJaWYgKGZsYWdzICYgTk9fRVhFQ19NQVBQSU5HUykK PiArCQkJcDRkdmFsIHw9IFA0RF9UQUJMRV9QWE47Cj4gKwkJQlVHX09OKCFwZ3RhYmxlX2FsbG9j KTsKPiArCQlwdWRfcGh5cyA9IHBndGFibGVfYWxsb2MoUFVEX1NISUZUKTsKPiArCQlfX3A0ZF9w b3B1bGF0ZShwNGRwLCBwdWRfcGh5cywgcDRkdmFsKTsKPiArCQlwNGQgPSBSRUFEX09OQ0UoKnA0 ZHApOwo+ICsJfQo+ICsJQlVHX09OKHA0ZF9iYWQocDRkKSk7Cj4gKwo+ICsJLyoKPiArCSAqIE5v IG5lZWQgZm9yIGxvY2tpbmcgZHVyaW5nIGVhcmx5IGJvb3QuIEFuZCBpdCBkb2Vzbid0IHdvcmsg YXMKPiArCSAqIGV4cGVjdGVkIHdpdGggS0FTTFIgZW5hYmxlZC4KPiArCSAqLwo+ICsJaWYgKHN5 c3RlbV9zdGF0ZSAhPSBTWVNURU1fQk9PVElORykKPiArCQltdXRleF9sb2NrKCZmaXhtYXBfbG9j ayk7Cj4gKwlwdWRwID0gcHVkX29mZnNldChwNGRwLCBhZGRyKTsKPiArCWRvIHsKPiArCQluZXh0 ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Cj4gKwkJaWYgKCFwdWRfbm9uZSgqcHVkcCkgJiYg cHVkX3NlY3QoKnB1ZHApKSB7Cj4gKwkJCXBoeXNfYWRkcl90IHBtZF9waHlzID0gcGd0YWJsZV9h bGxvYyhQTURfU0hJRlQpOwo+ICsJCQlwdWRfY2xlYXIocHVkcCk7Cj4gKwo+ICsJCQlwdWR2YWwg PSBQVURfVFlQRV9UQUJMRSB8IFBVRF9UQUJMRV9VWE47Cj4gKwkJCWlmIChmbGFncyAmIE5PX0VY RUNfTUFQUElOR1MpCj4gKwkJCQlwdWR2YWwgfD0gUFVEX1RBQkxFX1BYTjsKPiArCQkJX19wdWRf cG9wdWxhdGUocHVkcCwgcG1kX3BoeXMsIHB1ZHZhbCk7Cj4gKwkJCWZsdXNoX3RsYl9rZXJuZWxf cmFuZ2UoYWRkciwgYWRkciArIFBBR0VfU0laRSk7Cj4gKwo+ICsJCQltYXBfb2Zmc2V0ID0gYWRk ciAtIChhZGRyICYgUFVEX01BU0spOwo+ICsJCQlpZiAobWFwX29mZnNldCkKPiArCQkJICAgIGFs bG9jX2luaXRfY29udF9wbWQocHVkcCwgYWRkciAmIFBVRF9NQVNLLCBhZGRyLAo+ICsJCQkJCQlw aHlzIC0gbWFwX29mZnNldCwgcHJvdCwKPiArCQkJCQkJcGd0YWJsZV9hbGxvYywgZmxhZ3MpOwo+ ICsKPiArCQkJaWYgKG5leHQgPCAoYWRkciAmIFBVRF9NQVNLKSArIFBVRF9TSVpFKQo+ICsJCQkg ICAgYWxsb2NfaW5pdF9jb250X3BtZChwdWRwLCBuZXh0LCAoYWRkciAmIFBVRF9NQVNLKSArCj4g KwkJCQkJCVBVRF9TSVpFLCBuZXh0IC0gYWRkciArIHBoeXMsCj4gKwkJCQkJCXByb3QsIHBndGFi bGVfYWxsb2MsIGZsYWdzKTsKPiArCQl9Cj4gKwkJYWxsb2NfY3Jhc2hrZXJuZWxfY29udF9wbWQo cHVkcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCwKPiArCQkJCQkgICBwZ3RhYmxlX2FsbG9jLCBm bGFncyk7Cj4gKwkJcGh5cyArPSBuZXh0IC0gYWRkcjsKPiArCX0gd2hpbGUgKHB1ZHArKywgYWRk ciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKPiArCj4gKwlpZiAoc3lzdGVtX3N0YXRlICE9IFNZU1RF TV9CT09USU5HKQo+ICsJCW11dGV4X3VubG9jaygmZml4bWFwX2xvY2spOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBfX2NyZWF0ZV9jcmFzaGtlcm5lbF9tYXBwaW5nKHBnZF90ICpwZ2RpciwgcGh5 c19hZGRyX3QgcGh5cywKPiArCQkJCQkgdW5zaWduZWQgbG9uZyB2aXJ0LCBwaHlzX2FkZHJfdCBz aXplLAo+ICsJCQkJCSBwZ3Byb3RfdCBwcm90LAo+ICsJCQkJCSBwaHlzX2FkZHJfdCAoKnBndGFi bGVfYWxsb2MpKGludCksCj4gKwkJCQkJIGludCBmbGFncykKPiArewo+ICsJdW5zaWduZWQgbG9u ZyBhZGRyLCBlbmQsIG5leHQ7Cj4gKwlwZ2RfdCAqcGdkcCA9IHBnZF9vZmZzZXRfcGdkKHBnZGly LCB2aXJ0KTsKPiArCj4gKwkvKgo+ICsJICogSWYgdGhlIHZpcnR1YWwgYW5kIHBoeXNpY2FsIGFk ZHJlc3MgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBvZmZzZXQKPiArCSAqIHdpdGhpbiBhIHBhZ2UsIHdl IGNhbm5vdCBtYXAgdGhlIHJlZ2lvbiBhcyB0aGUgY2FsbGVyIGV4cGVjdHMuCj4gKwkgKi8KPiAr CWlmIChXQVJOX09OKChwaHlzIF4gdmlydCkgJiB+UEFHRV9NQVNLKSkKPiArCQlyZXR1cm47Cj4g Kwo+ICsJcGh5cyAmPSBQQUdFX01BU0s7Cj4gKwlhZGRyID0gdmlydCAmIFBBR0VfTUFTSzsKPiAr CWVuZCA9IFBBR0VfQUxJR04odmlydCArIHNpemUpOwo+ICsKPiArCWRvIHsKPiArCQluZXh0ID0g cGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Cj4gKwkJYWxsb2NfY3Jhc2hrZXJuZWxfcHVkKHBnZHAs IGFkZHIsIG5leHQsIHBoeXMsIHByb3QsCj4gKwkJCQkgICAgICBwZ3RhYmxlX2FsbG9jLCBmbGFn cyk7Cj4gKwkJcGh5cyArPSBuZXh0IC0gYWRkcjsKPiArCX0gd2hpbGUgKHBnZHArKywgYWRkciA9 IG5leHQsIGFkZHIgIT0gZW5kKTsKPiArfQoKX19jcmVhdGVfY3Jhc2hrZXJuZWxfbWFwcGluZygp IGFuZCB0aGUgaGVscGVycyBpdCB1c2VzIHJlc2VtYmxlIHZlcnkgbXVjaApfX2NyZWF0ZV9wZ2Rf bWFwcGluZygpIGFuZCBpdCdzIGhlbHBlcnMuIEkgdGhpbmsgYSBjbGVhbmVyIHdheSB3b3VsZCBi ZSB0bwpjbGVhciBzZWN0aW9uIG1hcHBpbmdzIGFuZCB0aGFuIGNhbGwgX19jcmVhdGVfcGdkX21h cHBpbmcoKSBmb3IgY3Jhc2gKa2VybmVsIG1lbW9yeSB3aXRoIGJsb2NrL3NlY3Rpb24gbWFwcGlu Z3MgZGlzYWJsZWQuCgo+ICtzdGF0aWMgdm9pZCBfX2luaXQgbWFwX2NyYXNoa2VybmVsKHBnZF90 ICpwZ2RwLCBwaHlzX2FkZHJfdCBzdGFydCwKPiArCQkJCSAgIHBoeXNfYWRkcl90IGVuZCwgcGdw cm90X3QgcHJvdCwgaW50IGZsYWdzKQo+ICt7Cj4gKwlfX2NyZWF0ZV9jcmFzaGtlcm5lbF9tYXBw aW5nKHBnZHAsIHN0YXJ0LCBfX3BoeXNfdG9fdmlydChzdGFydCksCj4gKwkJCQkgICAgIGVuZCAt IHN0YXJ0LCBwcm90LAo+ICsJCQkJICAgICBlYXJseV9jcmFzaGtlcm5lbF9wZ3RhYmxlX2FsbG9j LCBmbGFncyk7Cj4gK30KCk5vIG5lZWQgZm9yIHRoaXMsIHlvdSBjYW4gY2FsbCBfX2NyZWF0ZV9j cmFzaGtlcm5lbF9tYXBwaW5nKCkgZGlyZWN0bHkgZnJvbQptYXBwaW5nX2NyYXNoa2VybmVsKCku Cgo+ICsKPiArdm9pZCBfX2luaXQgbWFwcGluZ19jcmFzaGtlcm5lbCh2b2lkKQo+ICt7Cj4gKwlp ZiAoY2FuX3NldF9kaXJlY3RfbWFwKCkgfHwgSVNfRU5BQkxFRChDT05GSUdfS0ZFTkNFKSkKPiAr CSAgICByZXR1cm47Cj4gKwo+ICsJaWYgKCFjcmFzaF9tZW1fbWFwIHx8ICFjcmFzaGtfcmVzLmVu ZCkKPiArCSAgICByZXR1cm47Cj4gKwo+ICsJbWFwX2NyYXNoa2VybmVsKHN3YXBwZXJfcGdfZGly LCBjcmFzaGtfcmVzLnN0YXJ0LAo+ICsJCQljcmFzaGtfcmVzLmVuZCArIDEsIFBBR0VfS0VSTkVM LAo+ICsJCQlOT19CTE9DS19NQVBQSU5HUyB8IE5PX0NPTlRfTUFQUElOR1MpOwo+ICt9Cj4gKyNl bHNlCj4gK3ZvaWQgX19pbml0IG1hcHBpbmdfY3Jhc2hrZXJuZWwodm9pZCkge30KPiArI2VuZGlm Cj4gKwo+ICBzdGF0aWMgdm9pZCBfX2luaXQgbWFwX21lbShwZ2RfdCAqcGdkcCkKPiAgewo+ICAJ c3RhdGljIGNvbnN0IHU2NCBkaXJlY3RfbWFwX2VuZCA9IF9QQUdFX0VORChWQV9CSVRTX01JTik7 Cj4gQEAgLTUyNywxNyArNzc3LDYgQEAgc3RhdGljIHZvaWQgX19pbml0IG1hcF9tZW0ocGdkX3Qg KnBnZHApCj4gIAkgKi8KPiAgCW1lbWJsb2NrX21hcmtfbm9tYXAoa2VybmVsX3N0YXJ0LCBrZXJu ZWxfZW5kIC0ga2VybmVsX3N0YXJ0KTsKPiAgCj4gLSNpZmRlZiBDT05GSUdfS0VYRUNfQ09SRQo+ IC0JaWYgKGNyYXNoX21lbV9tYXApIHsKPiAtCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfWk9ORV9E TUEpIHx8Cj4gLQkJICAgIElTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1BMzIpKQo+IC0JCQlmbGFn cyB8PSBOT19CTE9DS19NQVBQSU5HUyB8IE5PX0NPTlRfTUFQUElOR1M7Cj4gLQkJZWxzZSBpZiAo Y3Jhc2hrX3Jlcy5lbmQpCj4gLQkJCW1lbWJsb2NrX21hcmtfbm9tYXAoY3Jhc2hrX3Jlcy5zdGFy dCwKPiAtCQkJICAgIHJlc291cmNlX3NpemUoJmNyYXNoa19yZXMpKTsKPiAtCX0KPiAtI2VuZGlm Cj4gLQo+ICAJLyogbWFwIGFsbCB0aGUgbWVtb3J5IGJhbmtzICovCj4gIAlmb3JfZWFjaF9tZW1f cmFuZ2UoaSwgJnN0YXJ0LCAmZW5kKSB7Cj4gIAkJaWYgKHN0YXJ0ID49IGVuZCkKPiBAQCAtNTcw LDE5ICs4MDksNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWFwX21lbShwZ2RfdCAqcGdkcCkKPiAg CSAqIGluIHBhZ2UgZ3JhbnVsYXJpdHkgYW5kIHB1dCBiYWNrIHVudXNlZCBtZW1vcnkgdG8gYnVk ZHkgc3lzdGVtCj4gIAkgKiB0aHJvdWdoIC9zeXMva2VybmVsL2tleGVjX2NyYXNoX3NpemUgaW50 ZXJmYWNlLgo+ICAJICovCj4gLSNpZmRlZiBDT05GSUdfS0VYRUNfQ09SRQo+IC0JaWYgKGNyYXNo X21lbV9tYXAgJiYKPiAtCSAgICAhSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEpICYmICFJU19F TkFCTEVEKENPTkZJR19aT05FX0RNQTMyKSkgewo+IC0JCWlmIChjcmFzaGtfcmVzLmVuZCkgewo+ IC0JCQlfX21hcF9tZW1ibG9jayhwZ2RwLCBjcmFzaGtfcmVzLnN0YXJ0LAo+IC0JCQkJICAgICAg IGNyYXNoa19yZXMuZW5kICsgMSwKPiAtCQkJCSAgICAgICBQQUdFX0tFUk5FTCwKPiAtCQkJCSAg ICAgICBOT19CTE9DS19NQVBQSU5HUyB8IE5PX0NPTlRfTUFQUElOR1MpOwo+IC0JCQltZW1ibG9j a19jbGVhcl9ub21hcChjcmFzaGtfcmVzLnN0YXJ0LAo+IC0JCQkJCSAgICAgcmVzb3VyY2Vfc2l6 ZSgmY3Jhc2hrX3JlcykpOwo+IC0JCX0KPiAtCX0KPiAtI2VuZGlmCj4gIH0KPiAgCj4gIHZvaWQg bWFya19yb2RhdGFfcm8odm9pZCkKPiAtLSAKPiAxLjguMy4xCgoKLS0gClNpbmNlcmVseSB5b3Vy cywKTWlrZS4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwK