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 6CE3FC3DA6E for ; Wed, 20 Dec 2023 09:58:10 +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: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=mo+/aBYKLW7V1CfFVgw5FQvKvlAMAZaoIrQon9LKxnw=; b=Jt5AMhvlOQZhr3 36uB/EzdFw8gW9CbjDP2L66xVf4+pR+t6gSjC4lKg+S3LgXD6KoQxrG5ldRAJHq6m9OwcG/psOonN ryHxb3Yk5belquN7RbvZivTQh86DuZTwdC+iwzLpjkSyN4ms/B9kkqQclwF1APtoGB9BeKJXxReeE 8eMuVze2GxhFSEPgsq2zr7DBtxBj1k4ZuTsrPbmoCskdr9/WF6SG3uE6AKse4Lj+AJ5z7YxwVNCUr hbIkotJ3mh/sDv/+feV9UvvhBb+o1ohRh5dR+BJZYd0QZ0BAX+j0E+5GdSA/Q3+YfH9ACxR9ecMaO 5UBoA+YA+WazepYX4JeA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rFtKf-00GnSR-2q; Wed, 20 Dec 2023 09:57:41 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rFtKc-00GnRl-11 for linux-arm-kernel@lists.infradead.org; Wed, 20 Dec 2023 09:57:40 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E17351FB; Wed, 20 Dec 2023 01:58:21 -0800 (PST) Received: from [10.57.75.247] (unknown [10.57.75.247]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 91AB13F5A1; Wed, 20 Dec 2023 01:57:33 -0800 (PST) Message-ID: <15177acd-8d75-46a8-9460-98ea313a7b2b@arm.com> Date: Wed, 20 Dec 2023 09:57:32 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 02/16] mm: Batch-copy PTE ranges during fork() Content-Language: en-GB From: Ryan Roberts To: David Hildenbrand , Catalin Marinas , Will Deacon , Ard Biesheuvel , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Andrey Ryabinin , Alexander Potapenko , Andrey Konovalov , Dmitry Vyukov , Vincenzo Frascino , Andrew Morton , Anshuman Khandual , Matthew Wilcox , Yu Zhao , Mark Rutland , Kefeng Wang , John Hubbard , Zi Yan , Barry Song <21cnbao@gmail.com>, Alistair Popple , Yang Shi Cc: linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20231218105100.172635-1-ryan.roberts@arm.com> <20231218105100.172635-3-ryan.roberts@arm.com> <0bef5423-6eea-446b-8854-980e9c23a948@redhat.com> <7c0236ad-01f3-437f-8b04-125d69e90dc0@redhat.com> <9a58b1a2-2c13-4fa0-8ffa-2b3d9655f1b6@arm.com> In-Reply-To: <9a58b1a2-2c13-4fa0-8ffa-2b3d9655f1b6@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231220_015738_475088_F69786F3 X-CRM114-Status: GOOD ( 47.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-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 T24gMjAvMTIvMjAyMyAwOTo1MSwgUnlhbiBSb2JlcnRzIHdyb3RlOgo+IE9uIDIwLzEyLzIwMjMg MDk6MTcsIERhdmlkIEhpbGRlbmJyYW5kIHdyb3RlOgo+PiBPbiAxOS4xMi4yMyAxODo0MiwgUnlh biBSb2JlcnRzIHdyb3RlOgo+Pj4gT24gMTkvMTIvMjAyMyAxNzoyMiwgRGF2aWQgSGlsZGVuYnJh bmQgd3JvdGU6Cj4+Pj4gT24gMTkuMTIuMjMgMDk6MzAsIFJ5YW4gUm9iZXJ0cyB3cm90ZToKPj4+ Pj4gT24gMTgvMTIvMjAyMyAxNzo0NywgRGF2aWQgSGlsZGVuYnJhbmQgd3JvdGU6Cj4+Pj4+PiBP biAxOC4xMi4yMyAxMTo1MCwgUnlhbiBSb2JlcnRzIHdyb3RlOgo+Pj4+Pj4+IENvbnZlcnQgY29w eV9wdGVfcmFuZ2UoKSB0byBjb3B5IGEgYmF0Y2ggb2YgcHRlcyBpbiBvbmUgZ28uIEEgZ2l2ZW4K Pj4+Pj4+PiBiYXRjaCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgd2l0aCB0aGUg bmV3IGhlbHBlciwKPj4+Pj4+PiBwdGVfYmF0Y2hfcmVtYWluaW5nKCksIGFuZCBtYXBzIGEgcGh5 c2ljYWxseSBjb250aWd1b3VzIGJsb2NrIG9mIG1lbW9yeSwKPj4+Pj4+PiBhbGwgYmVsb25naW5n IHRvIHRoZSBzYW1lIGZvbGlvLiBBIHB0ZSBiYXRjaCBpcyB0aGVuIHdyaXRlLXByb3RlY3RlZCBp bgo+Pj4+Pj4+IG9uZSBnbyBpbiB0aGUgcGFyZW50IHVzaW5nIHRoZSBuZXcgaGVscGVyLCBwdGVw X3NldF93cnByb3RlY3RzKCkgYW5kIGlzCj4+Pj4+Pj4gc2V0IGluIG9uZSBnbyBpbiB0aGUgY2hp bGQgdXNpbmcgdGhlIG5ldyBoZWxwZXIsIHNldF9wdGVzX2Z1bGwoKS4KPj4+Pj4+Pgo+Pj4+Pj4+ IFRoZSBwcmltYXJ5IG1vdGl2YXRpb24gZm9yIHRoaXMgY2hhbmdlIGlzIHRvIHJlZHVjZSB0aGUg bnVtYmVyIG9mIHRsYgo+Pj4+Pj4+IG1haW50ZW5hbmNlIG9wZXJhdGlvbnMgdGhhdCB0aGUgYXJt NjQgYmFja2VuZCBoYXMgdG8gcGVyZm9ybSBkdXJpbmcKPj4+Pj4+PiBmb3JrLCBhcyBpdCBpcyBh Ym91dCB0byBhZGQgdHJhbnNwYXJlbnQgc3VwcG9ydCBmb3IgdGhlICJjb250aWd1b3VzIGJpdCIK Pj4+Pj4+PiBpbiBpdHMgcHRlcy4gQnkgd3JpdGUtcHJvdGVjdGluZyB0aGUgcGFyZW50IHVzaW5n IHRoZSBuZXcKPj4+Pj4+PiBwdGVwX3NldF93cnByb3RlY3RzKCkgKG5vdGUgdGhlICdzJyBhdCB0 aGUgZW5kKSBmdW5jdGlvbiwgdGhlIGJhY2tlbmQKPj4+Pj4+PiBjYW4gYXZvaWQgaGF2aW5nIHRv IHVuZm9sZCBjb250aWcgcmFuZ2VzIG9mIFBURXMsIHdoaWNoIGlzIGV4cGVuc2l2ZSwKPj4+Pj4+ PiB3aGVuIGFsbCBwdGVzIGluIHRoZSByYW5nZSBhcmUgYmVpbmcgd3JpdGUtcHJvdGVjdGVkLiBT aW1pbGFybHksIGJ5Cj4+Pj4+Pj4gdXNpbmcgc2V0X3B0ZXNfZnVsbCgpIHJhdGhlciB0aGFuIHNl dF9wdGVfYXQoKSB0byBzZXQgdXAgcHRlcyBpbiB0aGUKPj4+Pj4+PiBjaGlsZCwgdGhlIGJhY2tl bmQgZG9lcyBub3QgbmVlZCB0byBmb2xkIGEgY29udGlndW91cyByYW5nZSBvbmNlIHRoZXkKPj4+ Pj4+PiBhcmUgYWxsIHBvcHVsYXRlZCAtIHRoZXkgY2FuIGJlIGluaXRpYWxseSBwb3B1bGF0ZWQg YXMgYSBjb250aWd1b3VzCj4+Pj4+Pj4gcmFuZ2UgaW4gdGhlIGZpcnN0IHBsYWNlLgo+Pj4+Pj4+ Cj4+Pj4+Pj4gVGhpcyBjb2RlIGlzIHZlcnkgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlLCBhbmQgYSBz aWduaWZpY2FudCBhbW91bnQgb2YKPj4+Pj4+PiBlZmZvcnQgaGFzIGJlZW4gcHV0IGludG8gbm90 IHJlZ3Jlc3NpbmcgcGVyZm9ybWFuY2UgZm9yIHRoZSBvcmRlci0wCj4+Pj4+Pj4gZm9saW8gY2Fz ZS4gQnkgZGVmYXVsdCwgcHRlX2JhdGNoX3JlbWFpbmluZygpIGlzIGNvbXBpbGUgY29uc3RhbnQg MSwKPj4+Pj4+PiB3aGljaCBlbmFibGVzIHRoZSBjb21waWxlciB0byBzaW1wbGlmeSB0aGUgZXh0 cmEgbG9vcHMgdGhhdCBhcmUgYWRkZWQKPj4+Pj4+PiBmb3IgYmF0Y2hpbmcgYW5kIHByb2R1Y2Ug Y29kZSB0aGF0IGlzIGVxdWl2YWxlbnQgKGFuZCBlcXVhbGx5Cj4+Pj4+Pj4gcGVyZm9ybWFudCkg YXMgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLgo+Pj4+Pj4+Cj4+Pj4+Pj4gVGhpcyBjaGFu Z2UgYWRkcmVzc2VzIHRoZSBjb3JlLW1tIHJlZmFjdG9yaW5nIG9ubHkgYW5kIGEgc2VwYXJhdGUg Y2hhbmdlCj4+Pj4+Pj4gd2lsbCBpbXBsZW1lbnQgcHRlX2JhdGNoX3JlbWFpbmluZygpLCBwdGVw X3NldF93cnByb3RlY3RzKCkgYW5kCj4+Pj4+Pj4gc2V0X3B0ZXNfZnVsbCgpIGluIHRoZSBhcm02 NCBiYWNrZW5kIHRvIHJlYWxpemUgdGhlIHBlcmZvcm1hbmNlCj4+Pj4+Pj4gaW1wcm92ZW1lbnQg YXMgcGFydCBvZiB0aGUgd29yayB0byBlbmFibGUgY29udHB0ZSBtYXBwaW5ncy4KPj4+Pj4+Pgo+ Pj4+Pj4+IFRvIGVuc3VyZSB0aGUgYXJtNjQgaXMgcGVyZm9ybWFudCBvbmNlIGltcGxlbWVudGVk LCB0aGlzIGNoYW5nZSBpcyB2ZXJ5Cj4+Pj4+Pj4gY2FyZWZ1bCB0byBvbmx5IGNhbGwgcHRlcF9n ZXQoKSBvbmNlIHBlciBwdGUgYmF0Y2guCj4+Pj4+Pj4KPj4+Pj4+PiBUaGUgZm9sbG93aW5nIG1p Y3JvYmVuY2htYXJrIHJlc3VsdHMgZGVtb25zdGF0ZSB0aGF0IHRoZXJlIGlzIG5vCj4+Pj4+Pj4g c2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgY2hhbmdlIGFmdGVyIHRoaXMgcGF0Y2guIEZvcmsgaXMg Y2FsbGVkIGluIGEKPj4+Pj4+PiB0aWdodCBsb29wIGluIGEgcHJvY2VzcyB3aXRoIDFHIG9mIHBv cHVsYXRlZCBtZW1vcnkgYW5kIHRoZSB0aW1lIGZvciB0aGUKPj4+Pj4+PiBmdW5jdGlvbiB0byBl eGVjdXRlIGlzIG1lYXN1cmVkLiAxMDAgaXRlcmF0aW9ucyBwZXIgcnVuLCA4IHJ1bnMKPj4+Pj4+ PiBwZXJmb3JtZWQgb24gYm90aCBBcHBsZSBNMiAoVk0pIGFuZCBBbXBlcmUgQWx0cmEgKGJhcmUg bWV0YWwpLiBUZXN0cwo+Pj4+Pj4+IHBlcmZvcm1lZCBmb3IgY2FzZSB3aGVyZSAxRyBtZW1vcnkg aXMgY29tcHJpc2VkIG9mIG9yZGVyLTAgZm9saW9zIGFuZAo+Pj4+Pj4+IGNhc2Ugd2hlcmUgY29t cHJpc2VkIG9mIHB0ZS1tYXBwZWQgb3JkZXItOSBmb2xpb3MuIE5lZ2F0aXZlIGlzIGZhc3RlciwK Pj4+Pj4+PiBwb3NpdGl2ZSBpcyBzbG93ZXIsIGNvbXBhcmVkIHRvIGJhc2VsaW5lIHVwb24gd2hp Y2ggdGhlIHNlcmllcyBpcyBiYXNlZDoKPj4+Pj4+Pgo+Pj4+Pj4+IHwgQXBwbGUgTTIgVk3CoMKg IHwgb3JkZXItMCAocHRlLW1hcCkgfCBvcmRlci05IChwdGUtbWFwKSB8Cj4+Pj4+Pj4gfCBmb3Jr wqDCoMKgwqDCoMKgwqDCoMKgIHwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0t LS18Cj4+Pj4+Pj4gfCBtaWNyb2JlbmNowqDCoMKgIHzCoMKgwqAgbWVhbiB8wqDCoCBzdGRldiB8 wqDCoMKgIG1lYW4gfMKgwqAgc3RkZXYgfAo+Pj4+Pj4+IHwtLS0tLS0tLS0tLS0tLS18LS0tLS0t LS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfAo+Pj4+Pj4+IHwgYmFzZWxpbmXCoMKg wqDCoMKgIHzCoMKgwqAgMC4wJSB8wqDCoMKgIDEuMSUgfMKgwqDCoCAwLjAlIHzCoMKgwqAgMS4y JSB8Cj4+Pj4+Pj4gfCBhZnRlci1jaGFuZ2XCoCB8wqDCoCAtMS4wJSB8wqDCoMKgIDIuMCUgfMKg wqAgLTAuMSUgfMKgwqDCoCAxLjElIHwKPj4+Pj4+Pgo+Pj4+Pj4+IHwgQW1wZXJlIEFsdHJhwqAg fCBvcmRlci0wIChwdGUtbWFwKSB8IG9yZGVyLTkgKHB0ZS1tYXApIHwKPj4+Pj4+PiB8IGZvcmvC oMKgwqDCoMKgwqDCoMKgwqAgfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0t LXwKPj4+Pj4+PiB8IG1pY3JvYmVuY2jCoMKgwqAgfMKgwqDCoCBtZWFuIHzCoMKgIHN0ZGV2IHzC oMKgwqAgbWVhbiB8wqDCoCBzdGRldiB8Cj4+Pj4+Pj4gfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0t LS18LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18Cj4+Pj4+Pj4gfCBiYXNlbGluZcKgwqDC oMKgwqAgfMKgwqDCoCAwLjAlIHzCoMKgwqAgMS4wJSB8wqDCoMKgIDAuMCUgfMKgwqDCoCAwLjEl IHwKPj4+Pj4+PiB8IGFmdGVyLWNoYW5nZcKgIHzCoMKgIC0wLjElIHzCoMKgwqAgMS4yJSB8wqDC oCAtMC4xJSB8wqDCoMKgIDAuMSUgfAo+Pj4+Pj4+Cj4+Pj4+Pj4gVGVzdGVkLWJ5OiBKb2huIEh1 YmJhcmQgPGpodWJiYXJkQG52aWRpYS5jb20+Cj4+Pj4+Pj4gUmV2aWV3ZWQtYnk6IEFsaXN0YWly IFBvcHBsZSA8YXBvcHBsZUBudmlkaWEuY29tPgo+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IFJ5YW4g Um9iZXJ0cyA8cnlhbi5yb2JlcnRzQGFybS5jb20+Cj4+Pj4+Pj4gLS0tCj4+Pj4+Pj4gwqDCoMKg IGluY2x1ZGUvbGludXgvcGd0YWJsZS5oIHwgODAgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKPj4+Pj4+PiDCoMKgwqAgbW0vbWVtb3J5LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfCA5MiArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQo+Pj4+Pj4+ IMKgwqDCoCAyIGZpbGVzIGNoYW5nZWQsIDEzOSBpbnNlcnRpb25zKCspLCAzMyBkZWxldGlvbnMo LSkKPj4+Pj4+Pgo+Pj4+Pj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBi L2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCj4+Pj4+Pj4gaW5kZXggYWY3NjM5YzNiMGEzLi5kYjkz ZmI4MTQ2NWEgMTAwNjQ0Cj4+Pj4+Pj4gLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKPj4+ Pj4+PiArKysgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAo+Pj4+Pj4+IEBAIC0yMDUsNiArMjA1 LDI3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF95b3VuZyhwbWRfdCBwbWQpCj4+Pj4+Pj4gwqDC oMKgICNkZWZpbmUgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKCnCoMKgwqAgZG8ge30gd2hpbGUg KDApCj4+Pj4+Pj4gwqDCoMKgICNlbmRpZgo+Pj4+Pj4+IMKgwqDCoCArI2lmbmRlZiBwdGVfYmF0 Y2hfcmVtYWluaW5nCj4+Pj4+Pj4gKy8qKgo+Pj4+Pj4+ICsgKiBwdGVfYmF0Y2hfcmVtYWluaW5n IC0gTnVtYmVyIG9mIHBhZ2VzIGZyb20gYWRkciB0byBuZXh0IGJhdGNoIGJvdW5kYXJ5Lgo+Pj4+ Pj4+ICsgKiBAcHRlOiBQYWdlIHRhYmxlIGVudHJ5IGZvciB0aGUgZmlyc3QgcGFnZS4KPj4+Pj4+ PiArICogQGFkZHI6IEFkZHJlc3Mgb2YgdGhlIGZpcnN0IHBhZ2UuCj4+Pj4+Pj4gKyAqIEBlbmQ6 IEJhdGNoIGNlaWxpbmcgKGUuZy4gZW5kIG9mIHZtYSkuCj4+Pj4+Pj4gKyAqCj4+Pj4+Pj4gKyAq IFNvbWUgYXJjaGl0ZWN0dXJlcyAoYXJtNjQpIGNhbiBlZmZpY2llbnRseSBtb2RpZnkgYSBjb250 aWd1b3VzIGJhdGNoIG9mCj4+Pj4+Pj4gcHRlcy4KPj4+Pj4+PiArICogSW4gc3VjaCBjYXNlcywg dGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZW1haW5pbmcgbnVtYmVyIG9mIHBhZ2VzIHRvCj4+ Pj4+Pj4gdGhlIGVuZAo+Pj4+Pj4+ICsgKiBvZiB0aGUgY3VycmVudCBiYXRjaCwgYXMgZGVmaW5l ZCBieSBhZGRyLiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbgo+Pj4+Pj4+IGl0ZXJhdGluZwo+Pj4+ Pj4+ICsgKiBvdmVyIHB0ZXMuCj4+Pj4+Pj4gKyAqCj4+Pj4+Pj4gKyAqIE1heSBiZSBvdmVycmlk ZGVuIGJ5IHRoZSBhcmNoaXRlY3R1cmUsIGVsc2UgYmF0Y2ggc2l6ZSBpcyBhbHdheXMgMS4KPj4+ Pj4+PiArICovCj4+Pj4+Pj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHB0ZV9iYXRjaF9y ZW1haW5pbmcocHRlX3QgcHRlLCB1bnNpZ25lZCBsb25nCj4+Pj4+Pj4gYWRkciwKPj4+Pj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBs b25nIGVuZCkKPj4+Pj4+PiArewo+Pj4+Pj4+ICvCoMKgwqAgcmV0dXJuIDE7Cj4+Pj4+Pj4gK30K Pj4+Pj4+PiArI2VuZGlmCj4+Pj4+Pgo+Pj4+Pj4gSXQncyBhIHNoYW1lIHdlIG5vdyBsb3NlIHRo ZSBvcHRpbWl6YXRpb24gZm9yIGFsbCBvdGhlciBhcmNodGllY3R1cmVzLgo+Pj4+Pj4KPj4+Pj4+ IFdhcyB0aGVyZSBubyB3YXkgdG8gaGF2ZSBzb21lIGJhc2ljIGJhdGNoaW5nIG1lY2hhbmlzbSB0 aGF0IGRvZXNuJ3QgcmVxdWlyZQo+Pj4+Pj4gYXJjaAo+Pj4+Pj4gc3BlY2lmaWNzPwo+Pj4+Pgo+ Pj4+PiBJIHRyaWVkIGEgYnVuY2ggb2YgdGhpbmdzIGJ1dCB1bHRpbWF0ZWx5IHRoZSB3YXkgSSd2 ZSBkb25lIGl0IHdhcyB0aGUgb25seSB3YXkKPj4+Pj4gdG8gcmVkdWNlIHRoZSBvcmRlci0wIGZv cmsgcmVncmVzc2lvbiB0byAwLgo+Pj4+Pgo+Pj4+PiBNeSBvcmlnaW5hbCB2MyBwb3N0aW5nIHdh cyBjb3N0aW5nIDUlIGV4dHJhIGFuZCBldmVuIG15IGZpcnN0IGF0dGVtcHQgYXQgYW4KPj4+Pj4g YXJjaC1zcGVjaWZpYyB2ZXJzaW9uIHRoYXQgZGlkbid0IHJlc29sdmUgdG8gYSBjb21waWxlLXRp bWUgY29uc3RhbnQgMSBzdGlsbAo+Pj4+PiBjb3N0IGFuIGV4dHJhIDMlLgo+Pj4+Pgo+Pj4+Pgo+ Pj4+Pj4KPj4+Pj4+IEknZCBoYXZlIHRob3VnaHQgdGhhdCBzb21ldGhpbmcgdmVyeSBiYXNpYyB3 b3VsZCBoYXZlIHdvcmtlZCBsaWtlOgo+Pj4+Pj4KPj4+Pj4+ICogQ2hlY2sgaWYgUFRFIGlzIHRo ZSBzYW1lIHdoZW4gc2V0dGluZyB0aGUgUEZOIHRvIDAuCj4+Pj4+PiAqIENoZWNrIHRoYXQgUEZO IGlzIGNvbnNlY3V0aXZlCj4+Pj4+PiAqIENoZWNrIHRoYXQgYWxsIFBGTnMgYmVsb25nIHRvIHRo ZSBzYW1lIGZvbGlvCj4+Pj4+Cj4+Pj4+IEkgaGF2ZW4ndCB0cmllZCB0aGlzIGV4YWN0IGFwcHJv YWNoLCBidXQgSSdkIGJlIHN1cnByaXNlZCBpZiBJIGNhbiBnZXQgdGhlCj4+Pj4+IHJlZ3Jlc3Np b24gdW5kZXIgNCUgd2l0aCB0aGlzLiBGdXJ0aGVyIGFsb25nIHRoZSBzZXJpZXMgSSBzcGVudCBh IGxvdCBvZiB0aW1lCj4+Pj4+IGhhdmluZyB0byBmaWRkbGUgd2l0aCB0aGUgYXJtNjQgaW1wbGVt ZW50YXRpb247IGV2ZXJ5IGNvbmRpdGlvbmFsIGFuZCBldmVyeQo+Pj4+PiBtZW1vcnkgcmVhZCAo ZXZlbiB3aGVuIGluIGNhY2hlKSB3YXMgYSBwcm9ibGVtLiBUaGVyZSBpcyBqdXN0IHNvIGxpdHRs ZSBpbiB0aGUKPj4+Pj4gaW5uZXIgbG9vcCB0aGF0IGV2ZXJ5IGluc3RydWN0aW9uIG1hdHRlcnMu IChBdCBsZWFzdCBvbiBBbXBlcmUgQWx0cmEgYW5kIEFwcGxlCj4+Pj4+IE0yKS4KPj4+Pj4KPj4+ Pj4gT2YgY291cnNlIGlmIHlvdSdyZSB3aWxsaW5nIHRvIHBheSB0aGF0IDQtNSUgZm9yIG9yZGVy LTAgdGhlbiB0aGUgYmVuZWZpdCB0bwo+Pj4+PiBvcmRlci05IGlzIGFyb3VuZCAxMCUgaW4gbXkg bWVhc3VyZW1lbnRzLiBQZXJzb25hbGx5IHRob3VnaCwgSSdkIHByZWZlciB0byBwbGF5Cj4+Pj4+ IHNhZmUgYW5kIGVuc3VyZSB0aGUgY29tbW9uIG9yZGVyLTAgY2FzZSBkb2Vzbid0IHJlZ3Jlc3Ms IGFzIHlvdSBwcmV2aW91c2x5Cj4+Pj4+IHN1Z2dlc3RlZC4KPj4+Pj4KPj4+Pgo+Pj4+IEkganVz dCBoYWNrZWQgc29tZXRoaW5nIHVwLCBvbiB0b3Agb2YgbXkgYmVsb3ZlZCBybWFwIGNsZWFudXAv YmF0Y2hpbmcgc2VyaWVzLiBJCj4+Pj4gaW1wbGVtZW50ZWQgdmVyeSBnZW5lcmljIGFuZCBzaW1w bGUgYmF0Y2hpbmcgZm9yIGxhcmdlIGZvbGlvcyAoYWxsIFBURSBiaXRzCj4+Pj4gZXhjZXB0IHRo ZSBQRk4gaGF2ZSB0byBtYXRjaCkuCj4+Pj4KPj4+PiBTb21lIHZlcnkgcXVpY2sgdGVzdGluZyAo ZG9uJ3QgdHJ1c3QgZWFjaCBsYXN0ICUgKSBvbiBJbnRlbChSKSBYZW9uKFIpIFNpbHZlcgo+Pj4+ IDQyMTBSIENQVS4KPj4+Pgo+Pj4+IG9yZGVyLTA6IDAuMDE0MjEwIC0+IDAuMDEzOTY5Cj4+Pj4K Pj4+PiAtPiBBcm91bmQgMS43ICUgZmFzdGVyCj4+Pj4KPj4+PiBvcmRlci05OiAwLjAxNDM3MyAt PiAwLjAwOTE0OQo+Pj4+Cj4+Pj4gLT4gQXJvdW5kIDM2LjMgJSBmYXN0ZXIKPj4+Cj4+PiBXZWxs IEkgZ3Vlc3MgdGhhdCBzaG93cyBtZSA6KQo+Pj4KPj4+IEknbGwgZG8gYSByZXZpZXcgYW5kIHJ1 biB0aGUgdGVzdHMgb24gbXkgSFcgdG8gc2VlIGlmIGl0IGNvbmN1cnMuCj4+Cj4+Cj4+IEkgcHVz aGVkIGEgc2ltcGxlIGNvbXBpbGUgZml4dXAgKHdlIG5lZWQgcHRlX25leHRfcGZuKCkpLgo+IAo+ IEkndmUganVzdCBiZWVuIHRyeWluZyB0byBjb21waWxlIGFuZCBub3RpY2VkIHRoaXMuIFdpbGwg dGFrZSBhIGxvb2sgYXQgeW91ciB1cGRhdGUuCgpUb29rIGEgbG9vazsgdGhlcmUgd2lsbCBzdGls bCBiZSBhcmNoIHdvcmsgbmVlZGVkOyBhcm02NCBkb2Vzbid0IGRlZmluZQpQRk5fUFRFX1NISUZU IGJlY2F1c2UgaXQgZGVmaW5lcyBzZXRfcHRlcygpLiBJJ20gbm90IHN1cmUgaWYgdGhlcmUgYXJl IG90aGVyCmFyY2hlcyB0aGF0IGFsc28gZG9uJ3QgZGVmaW5lIFBGTl9QVEVfU0hJRlQgKG9yIHB0 ZV9uZXh0X3BmbigpKSBpZiB0aGUgbWF0aCBpcwptb3JlIGNvbXBsZXgpIC0gaXQgd2lsbCBuZWVk IGFuIGF1ZGl0LgoKPiAKPiBCdXQgdXBvbiByZXZpZXcsIEkndmUgbm90aWNlZCB0aGUgcGFydCB0 aGF0IEkgdGhpbmsgbWFrZXMgdGhpcyBkaWZmaWN1bHQgZm9yCj4gYXJtNjQgd2l0aCB0aGUgY29u dHB0ZSBvcHRpbWl6YXRpb247IFlvdSBhcmUgY2FsbGluZyBwdGVwX2dldCgpIGZvciBldmVyeSBw dGUgaW4KPiB0aGUgYmF0Y2guIFdoaWxlIHRoaXMgaXMgZnVuY3Rpb25hbGx5IGNvcnJlY3QsIG9u Y2UgYXJtNjQgaGFzIHRoZSBjb250cHRlCj4gY2hhbmdlcywgaXRzIHB0ZXBfZ2V0KCkgaGFzIHRv IHJlYWQgZXZlcnkgcHRlIGluIHRoZSBjb250cHRlIGJsb2NrIGluIG9yZGVyIHRvCj4gZ2F0aGVy IHRoZSBhY2Nlc3MgYW5kIGRpcnR5IGJpdHMuIFNvIGlmIHlvdXIgYmF0Y2hpbmcgZnVuY3Rpb24g ZW5kcyB1cCB3ZWFsa2luZwo+IGEgMTYgZW50cnkgY29udHB0ZSBibG9jaywgdGhhdCB3aWxsIGNh dXNlIDE2IHggMTYgcmVhZHMsIHdoaWNoIGtpbGxzCj4gcGVyZm9ybWFuY2UuIFRoYXQncyB3aHkg SSBhZGRlZCB0aGUgYXJjaC1zcGVjaWZpYyBwdGVfYmF0Y2hfcmVtYWluaW5nKCkKPiBmdW5jdGlv bjsgdGhpcyBhbGxvd3MgdGhlIGNvcmUtbW0gdG8gc2tpcCB0byB0aGUgZW5kIG9mIHRoZSBjb250 cHRlIGJsb2NrIGFuZAo+IGF2b2lkIHB0ZXBfZ2V0KCkgZm9yIHRoZSAxNSB0YWlsIHB0ZXMuIFNv IHdlIGVuZCB1cCB3aXRoIDE2IFJFQURfT05DRSgpcyBpbnN0ZWFkCj4gb2YgMjU2Lgo+IAo+IEkg Y29uc2lkZXJlZCBtYWtpbmcgYSBwdGVwX2dldF9ub3lvdW5nZGlydHkoKSB2YXJpYW50LCB3aGlj aCB3b3VsZCBhdm9pZCB0aGUgYml0Cj4gZ2F0aGVyaW5nLiBCdXQgd2UgaGF2ZSBhIHNpbWlsYXIg cHJvYmxlbSBpbiB6YXBfcHRlX3JhbmdlKCkgYW5kIHRoYXQgZnVuY3Rpb24KPiBuZWVkcyB0aGUg ZGlydHkgYml0IHRvIHVwZGF0ZSB0aGUgZm9saW8uIFNvIGl0IGRvZXNuJ3Qgd29yayB0aGVyZS4g KHNlZSBwYXRjaCAzCj4gaW4gbXkgc2VyaWVzKS4KPiAKPiBJIGd1ZXNzIHlvdSBhcmUgZ29pbmcg dG8gc2F5IHRoYXQgd2Ugc2hvdWxkIGNvbWJpbmUgYm90aCBhcHByb2FjaGVzLCBzbyB0aGF0Cj4g eW91ciBiYXRjaGluZyBsb29wIGNhbiBza2lwIGZvcndhcmQgYW4gYXJjaC1wcm92aWRlZCBudW1i ZXIgb2YgcHRlcz8gVGhhdCB3b3VsZAo+IGNlcnRhaW5seSB3b3JrLCBidXQgZmVlbHMgbGlrZSBh biBvcnRob2dvbmFsIGNoYW5nZSB0byB3aGF0IEknbSB0cnlpbmcgdG8KPiBhY2hpZXZlIDopLiBB bnl3YXksIEknbGwgc3BlbmQgc29tZSB0aW1lIHBsYXlpbmcgd2l0aCBpdCB0b2RheS4KPiAKPiAK Pj4KPj4gTm90ZSB0aGF0IHdlIHNob3VsZCBwcm9iYWJseSBoYW5kbGUgInB0ZXBfc2V0X3dycHJv dGVjdHMiIHJhdGhlciBsaWtlIHNldF9wdGVzOgo+Pgo+PiAjaWZuZGVmIHdycHJvdGVjdF9wdGVz Cj4+IHN0YXRpYyBpbmxpbmUgdm9pZCB3cnByb3RlY3RfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICpt bSwgdW5zaWduZWQgbG9uZyBhZGRyLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB0 ZV90ICpwdGVwLCB1bnNpZ25lZCBpbnQgbnIpCj4+IHsKPj4gwqDCoMKgwqDCoMKgIGZvciAoOzsp IHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdGVwX3NldF93cnByb3RlY3QobW0s IGFkZHIsIHB0ZXApOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgtLW5yID09 IDApCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFr Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB0ZXArKzsKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBhZGRyICs9IFBBR0VfU0laRTsKPj4gwqDCoMKgwqDCoMKgIH0KPj4g fQo+PiAjZW5kaWYKClllcyB0aGF0J3MgYSBtdWNoIGJldHRlciBuYW1lOyBJJ3ZlIGFsc28gaW50 cm9kdWNlZCBjbGVhcl9wdGVzKCkgKGluIHBhdGNoIDMpCmFuZCBzZXRfcHRlc19mdWxsKCksIHdo aWNoIHRha2VzIGEgZmxhZyB0aGF0IGFsbG93cyBhcm02NCB0byBhdm9pZCB0cnlpbmcgdG8KZm9s ZCBhIGNvbnRwdGUgYmxvY2s7IG5lZWRlZCB0byBhdm9pZCByZWdyZXNzaW5nIGZvcmsgb25jZSB0 aGUgY29udHB0ZSBjaGFuZ2VzCmFyZSBwcmVzZW50LgoKPj4KPj4KPiAKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==