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 C64BFC4167B for ; Mon, 27 Nov 2023 11:08:31 +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: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=Y3KIcOgqfzJc529egAiSSN1z9XECJCDPAZUQDMr5FfI=; b=yOVnBMsaR6beW4 k3YyrBK3WA8X821VJxVsSuTcGZOW7nMh3BA4R8wFEpKuuDmmFX1338RPUyxQeeAI0JFuwoa7rjhAJ Ja4EV/kr7m1qdoKELlDLCVv7PTnyVQemCznnDJoeHCbItRyZdzNagCgHMj6NhO/d7m8Q81PvjY0In nsd1vf3T9u45QZpun1RZI1IUo7LU4D67+EuOAlCwCsJdeojIo+jWOorKAn25pXcIfrSbGx5fbes06 ObfTNYM++ceoPnZA3aD6mCK8ks5wjHmnlx32Wqh7KtMhfBA5eLQZ4b06T6s+s3eAGlNithx7Z1HHY hR70kGyGlI53wKvEO0rw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r7ZT4-002Ace-2B; Mon, 27 Nov 2023 11:07:58 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r7ZT0-002Abl-1C for linux-arm-kernel@lists.infradead.org; Mon, 27 Nov 2023 11:07:56 +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 A94E42F4; Mon, 27 Nov 2023 03:08:38 -0800 (PST) Received: from [10.57.73.191] (unknown [10.57.73.191]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C69C63F73F; Mon, 27 Nov 2023 03:07:47 -0800 (PST) Message-ID: Date: Mon, 27 Nov 2023 11:07:46 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 01/14] mm: Batch-copy PTE ranges during fork() Content-Language: en-GB To: Barry Song <21cnbao@gmail.com> Cc: david@redhat.com, akpm@linux-foundation.org, andreyknvl@gmail.com, anshuman.khandual@arm.com, ardb@kernel.org, catalin.marinas@arm.com, dvyukov@google.com, glider@google.com, james.morse@arm.com, jhubbard@nvidia.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, mark.rutland@arm.com, maz@kernel.org, oliver.upton@linux.dev, ryabinin.a.a@gmail.com, suzuki.poulose@arm.com, vincenzo.frascino@arm.com, wangkefeng.wang@huawei.com, will@kernel.org, willy@infradead.org, yuzenghui@huawei.com, yuzhao@google.com, ziy@nvidia.com References: <271f1e98-6217-4b40-bae0-0ac9fe5851cb@redhat.com> <20231127084217.13110-1-v-songbaohua@oppo.com> From: Ryan Roberts In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231127_030754_502391_24FA19CA X-CRM114-Status: GOOD ( 45.32 ) 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 T24gMjcvMTEvMjAyMyAxMDoyOCwgQmFycnkgU29uZyB3cm90ZToKPiBPbiBNb24sIE5vdiAyNywg MjAyMyBhdCAxMToxMeKAr1BNIFJ5YW4gUm9iZXJ0cyA8cnlhbi5yb2JlcnRzQGFybS5jb20+IHdy b3RlOgo+Pgo+PiBPbiAyNy8xMS8yMDIzIDA5OjU5LCBCYXJyeSBTb25nIHdyb3RlOgo+Pj4gT24g TW9uLCBOb3YgMjcsIDIwMjMgYXQgMTA6MzXigK9QTSBSeWFuIFJvYmVydHMgPHJ5YW4ucm9iZXJ0 c0Bhcm0uY29tPiB3cm90ZToKPj4+Pgo+Pj4+IE9uIDI3LzExLzIwMjMgMDg6NDIsIEJhcnJ5IFNv bmcgd3JvdGU6Cj4+Pj4+Pj4gKyAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5yOyBpKyssIHBh Z2UrKykgewo+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgaWYgKGFub24pIHsKPj4+Pj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKPj4+Pj4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICogSWYgdGhpcyBwYWdlIG1heSBoYXZlIGJlZW4gcGlubmVkIGJ5IHRoZQo+Pj4+ Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwYXJlbnQgcHJvY2VzcywgY29weSB0 aGUgcGFnZSBpbW1lZGlhdGVseSBmb3IKPj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICogdGhlIGNoaWxkIHNvIHRoYXQgd2UnbGwgYWx3YXlzIGd1YXJhbnRlZSB0aGUKPj4+Pj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcGlubmVkIHBhZ2Ugd29uJ3QgYmUgcmFu ZG9tbHkgcmVwbGFjZWQgaW4gdGhlCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqIGZ1dHVyZS4KPj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCj4+Pj4+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmxpa2VseShwYWdlX3RyeV9kdXBf YW5vbl9ybWFwKAo+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGFnZSwgZmFsc2UsIHNyY192bWEpKSkgewo+Pj4+Pj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDApCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4+Pj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBQYWdlIG1heSBiZSBwaW5uZWQsIHdlIGhhdmUgdG8gY29w eS4gKi8KPj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g Y29weV9wcmVzZW50X3BhZ2UoCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfcHRlLAo+Pj4+Pj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3B0ZSwgYWRkciwgcnNzLCBw cmVhbGxvYywKPj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBhZ2UpOwo+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cj4+Pj4+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzc1tNTV9BTk9OUEFHRVNdKys7Cj4+Pj4+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZNX0JVR19PTihQYWdlQW5vbkV4Y2x1c2l2ZShw YWdlKSk7Cj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewo+Pj4+Pj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICBwYWdlX2R1cF9maWxlX3JtYXAocGFnZSwgZmFsc2UpOwo+ Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICByc3NbbW1fY291bnRlcl9maWxlKHBh Z2UpXSsrOwo+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgfQo+Pj4+Pj4+ICAgICAgICAgICAg IH0KPj4+Pj4+PiAtICAgICAgICAgICByc3NbTU1fQU5PTlBBR0VTXSsrOwo+Pj4+Pj4+IC0gICB9 IGVsc2UgaWYgKHBhZ2UpIHsKPj4+Pj4+PiAtICAgICAgICAgICBmb2xpb19nZXQoZm9saW8pOwo+ Pj4+Pj4+IC0gICAgICAgICAgIHBhZ2VfZHVwX2ZpbGVfcm1hcChwYWdlLCBmYWxzZSk7Cj4+Pj4+ Pj4gLSAgICAgICAgICAgcnNzW21tX2NvdW50ZXJfZmlsZShwYWdlKV0rKzsKPj4+Pj4+PiArCj4+ Pj4+Pj4gKyAgICAgICAgICAgbnIgPSBpOwo+Pj4+Pj4+ICsgICAgICAgICAgIGZvbGlvX3JlZl9h ZGQoZm9saW8sIG5yKTsKPj4+Pj4+Cj4+Pj4+PiBZb3UncmUgY2hhbmdpbmcgdGhlIG9yZGVyIG9m IG1hcGNvdW50IHZzLiByZWZjb3VudCBpbmNyZW1lbnQuIERvbid0Lgo+Pj4+Pj4gTWFrZSBzdXJl IHlvdXIgcmVmY291bnQgPj0gbWFwY291bnQuCj4+Pj4+Pgo+Pj4+Pj4gWW91IGNhbiBkbyB0aGF0 IGVhc2lseSBieSBkb2luZyB0aGUgZm9saW9fcmVmX2FkZChmb2xpbywgbnIpIGZpcnN0IGFuZAo+ Pj4+Pj4gdGhlbiBkZWNyZW1lbnRpbmcgaW4gY2FzZSBvZiBlcnJvciBhY2NvcmRpbmdseS4gRXJy b3JzIGR1ZSB0byBwaW5uZWQKPj4+Pj4+IHBhZ2VzIGFyZSB0aGUgY29ybmVyIGNhc2UuCj4+Pj4+ Pgo+Pj4+Pj4gSSdsbCBub3RlIHRoYXQgaXQgd2lsbCBtYWtlIGEgbG90IG9mIHNlbnNlIHRvIGhh dmUgYmF0Y2ggdmFyaWFudHMgb2YKPj4+Pj4+IHBhZ2VfdHJ5X2R1cF9hbm9uX3JtYXAoKSBhbmQg cGFnZV9kdXBfZmlsZV9ybWFwKCkuCj4+Pj4+Pgo+Pj4+Pgo+Pj4+PiBpIHN0aWxsIGRvbid0IHVu ZGVyc3RhbmQgd2h5IGl0IGlzIG5vdCBhIGVudGlyZSBtYXArMSwgYnV0IGFuIGluY3JlbWVudAo+ Pj4+PiBpbiBlYWNoIGJhc2VwYWdlLgo+Pj4+Cj4+Pj4gQmVjYXVzZSB3ZSBhcmUgUFRFLW1hcHBp bmcgdGhlIGZvbGlvLCB3ZSBoYXZlIHRvIGFjY291bnQgZWFjaCBpbmRpdmlkdWFsIHBhZ2UuCj4+ Pj4gSWYgd2UgYWNjb3VudGVkIHRoZSBlbnRpcmUgZm9saW8sIHdoZXJlIHdvdWxkIHdlIHVuYWNj b3VudCBpdD8gRWFjaCBwYWdlIGNhbiBiZQo+Pj4+IHVubWFwcGVkIGluZGl2aWR1YWxseSAoZS5n LiBtdW5tYXAoKSBwYXJ0IG9mIHRoZSBmb2xpbykgc28gbmVlZCB0byBhY2NvdW50IGVhY2gKPj4+ PiBwYWdlLiBXaGVuIFBNRCBtYXBwaW5nLCB0aGUgd2hvbGUgdGhpbmcgaXMgZWl0aGVyIG1hcHBl ZCBvciB1bm1hcHBlZCwgYW5kIGl0cwo+Pj4+IGF0b21pYywgc28gd2UgY2FuIGFjY291bnQgdGhl IGVudGlyZSB0aGluZy4KPj4+Cj4+PiBIaSBSeWFuLAo+Pj4KPj4+IFRoZXJlIGlzIG5vIHByb2Js ZW0uIGZvciBleGFtcGxlLCBhIGxhcmdlIGZvbGlvIGlzIGVudGlyZWx5IG1hcHBlZCBpbgo+Pj4g cHJvY2VzcyBBIHdpdGggQ09OUFRFLAo+Pj4gYW5kIG9ubHkgcGFnZTIgaXMgbWFwcGVkIGluIHBy b2Nlc3MgQi4KPj4+IHRoZW4gd2Ugd2lsbCBoYXZlCj4+Pgo+Pj4gZW50aXJlX21hcCA9IDAKPj4+ IHBhZ2UwLm1hcCA9IC0xCj4+PiBwYWdlMS5tYXAgPSAtMQo+Pj4gcGFnZTIubWFwID0gMAo+Pj4g cGFnZTMubWFwID0gLTEKPj4+IC4uLi4KPj4+Cj4+Pj4KPj4+Pj4KPj4+Pj4gYXMgbG9uZyBhcyBp dCBpcyBhIENPTlRQVEUgbGFyZ2UgZm9saW8sIHRoZXJlIGlzIG5vIG11Y2ggZGlmZmVyZW5jZSB3 aXRoCj4+Pj4+IFBNRC1tYXBwZWQgbGFyZ2UgZm9saW8uIGl0IGhhcyBhbGwgdGhlIGNoYW5jZSB0 byBiZSBEb3VibGVNYXAgYW5kIG5lZWQKPj4+Pj4gc3BsaXQuCj4+Pj4+Cj4+Pj4+IFdoZW4gQSBh bmQgQiBzaGFyZSBhIENPTlRQVEUgbGFyZ2UgZm9saW8sIHdlIGRvIG1hZHZpc2UoRE9OVE5FRUQp IG9yIGFueQo+Pj4+PiBzaW1pbGFyIHRoaW5ncyBvbiBhIHBhcnQgb2YgdGhlIGxhcmdlIGZvbGlv IGluIHByb2Nlc3MgQSwKPj4+Pj4KPj4+Pj4gdGhpcyBsYXJnZSBmb2xpbyB3aWxsIGhhdmUgcGFy dGlhbGx5IG1hcHBlZCBzdWJwYWdlIGluIEEgKGFsbCBDT05UUEUgYml0cwo+Pj4+PiBpbiBhbGwg c3VicGFnZXMgbmVlZCB0byBiZSByZW1vdmVkIHRob3VnaCB3ZSBvbmx5IHVubWFwIGEgcGFydCBv ZiB0aGUKPj4+Pj4gbGFyZ2UgZm9saW9hcyBIVyByZXF1aXJlcyBjb25zaXN0ZW50IENPTlRQVEVz KTsgYW5kIGl0IGhhcyBlbnRpcmUgbWFwIGluCj4+Pj4+IHByb2Nlc3MgQihhbGwgUFRFcyBhcmUg c3RpbGwgQ09OUFRFUyBpbiBwcm9jZXNzIEIpLgo+Pj4+Pgo+Pj4+PiBpc24ndCBpdCBtb3JlIHNl bnNpYmxlIGZvciB0aGlzIGxhcmdlIGZvbGlvcyB0byBoYXZlIGVudGlyZV9tYXAgPSAwKGZvcgo+ Pj4+PiBwcm9jZXNzIEIpLCBhbmQgc3VicGFnZXMgd2hpY2ggYXJlIHN0aWxsIG1hcHBlZCBpbiBw cm9jZXNzIEEgaGFzIG1hcF9jb3VudAo+Pj4+PiA9MD8gKHN0YXJ0IGZyb20gLTEpLgo+Pj4+Pgo+ Pj4+Pj4gRXNwZWNpYWxseSwgdGhlIGJhdGNoIHZhcmlhbnQgb2YgcGFnZV90cnlfZHVwX2Fub25f cm1hcCgpIHdvdWxkIG9ubHkKPj4+Pj4+IGNoZWNrIG9uY2UgaWYgdGhlIGZvbGlvIG1heWJlIHBp bm5lZCwgYW5kIGluIHRoYXQgY2FzZSwgeW91IGNhbiBzaW1wbHkKPj4+Pj4+IGRyb3AgYWxsIHJl ZmVyZW5jZXMgYWdhaW4uIFNvIHlvdSBlaXRoZXIgaGF2ZSBhbGwgb3Igbm8gcHRlcyB0byBwcm9j ZXNzLAo+Pj4+Pj4gd2hpY2ggbWFrZXMgdGhhdCBjb2RlIGVhc2llci4KPj4+Pgo+Pj4+IEknbSBh ZnJhaWQgdGhpcyBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gbWUuIFBlcmhhcHMgSSd2ZSBtaXN1bmRl cnN0b29kLiBCdXQKPj4+PiBmdW5kYW1lbnRhbGx5IHlvdSBjYW4gb25seSB1c2UgZW50aXJlX21h cGNvdW50IGlmIGl0cyBvbmx5IHBvc3NpYmxlIHRvIG1hcCBhbmQKPj4+PiB1bm1hcCB0aGUgd2hv bGUgZm9saW8gYXRvbWljYWxseS4KPj4+Cj4+Pgo+Pj4KPj4+IE15IHBvaW50IGlzIHRoYXQgQ09O VFBFcyBzaG91bGQgZWl0aGVyIGFsbC1zZXQgaW4gYWxsIDE2IFBURXMgb3IgYWxsIGFyZSBkcm9w cGVkCj4+PiBpbiAxNiBQVEVzLiBpZiBhbGwgUFRFcyBoYXZlIENPTlQsIGl0IGlzIGVudGlyZWx5 IG1hcHBlZDsgb3RoZXJ3aXNlLAo+Pj4gaXQgaXMgcGFydGlhbGx5Cj4+PiBtYXBwZWQuIGlmIGEg bGFyZ2UgZm9saW8gaXMgbWFwcGVkIGluIG9uZSBwcm9jZXNzZXMgd2l0aCBhbGwgQ09OVFBURXMK Pj4+IGFuZCBtZWFud2hpbGUgaW4gYW5vdGhlciBwcm9jZXNzIHdpdGggcGFydGlhbCBtYXBwaW5n KHcvbyBDT05UUFRFKSwgaXQgaXMKPj4+IERvdWJsZU1hcHBlZC4KPj4KPj4gVGhlcmUgYXJlIDIg cHJvYmxlbXMgd2l0aCB5b3VyIHByb3Bvc2FsLCBhcyBJIHNlZSBpdDsKPj4KPj4gMSkgdGhlIGNv cmUtbW0gaXMgbm90IGVubGlnaHRlbmVkIGZvciBDT05UUFRFIG1hcHBpbmdzLiBBcyBmYXIgYXMg aXQgaXMKPj4gY29uY2VybmVkLCBpdHMganVzdCBtYXBwaW5nIGEgYnVuY2ggb2YgUFRFcy4gU28g aXQgaGFzIG5vIGhvb2sgdG8gaW5jL2RlYwo+PiBlbnRpcmVfbWFwY291bnQuIFRoZSBhcmNoIGNv ZGUgaXMgb3Bwb3J0dW5pc3RpY2FsbHkgYW5kICp0cmFuc3BhcmVudGx5KiBtYW5hZ2luZwo+PiB0 aGUgQ09OVF9QVEUgYml0Lgo+Pgo+PiAyKSBUaGVyZSBpcyBub3RoaW5nIHRvIHNheSBhIGZvbGlv IGlzbid0ICpiaWdnZXIqIHRoYW4gdGhlIGNvbnRwdGUgYmxvY2s7IGl0IG1heQo+PiBiZSAxMjhL IGFuZCBiZSBtYXBwZWQgd2l0aCAyIGNvbnRwdGUgYmxvY2tzLiBPciBldmVuIGEgUFRFLW1hcHBl ZCBUSFAgKDJNKSBhbmQKPj4gYmUgbWFwcGVkIHdpdGggMzIgY29udHB0ZSBibG9ja3MuIFNvIHlv dSBjYW4ndCBzYXkgaXQgaXMgZW50aXJlbHkgbWFwcGVkCj4+IHVubGVzcy91bnRpbCBBTEwgb2Yg dGhvc2UgYmxvY2tzIGFyZSBzZXQgdXAuIEFuZCB0aGVuIG9mIGNvdXJzZSBlYWNoIGJsb2NrIGNv dWxkCj4+IGJlIHVubWFwcGVkIHVuYXRvbWljYWxseS4KPj4KPj4gRm9yIHRoZSBQTUQgY2FzZSB0 aGVyZSBhcmUgYWN0dWFsbHkgMiBwcm9wZXJ0aWVzIHRoYXQgYWxsb3cgdXNpbmcgdGhlCj4+IGVu dGlyZV9tYXBjb3VudCBvcHRpbWl6YXRpb247IEl0J3MgYXRvbWljYWxseSBtYXBwZWQvdW5tYXBw ZWQgdGhyb3VnaCB0aGUgUE1ECj4+IGFuZCB3ZSBrbm93IHRoYXQgdGhlIGZvbGlvIGlzIGV4YWN0 bHkgUE1EIHNpemVkIChzaW5jZSBpdCBtdXN0IGJlIGF0IGxlYXN0IFBNRAo+PiBzaXplZCB0byBi ZSBhYmxlIHRvIG1hcCBpdCB3aXRoIHRoZSBQTUQsIGFuZCB3ZSBkb24ndCBhbGxvY2F0ZSBUSFBz IGFueSBiaWdnZXIKPj4gdGhhbiBQTUQgc2l6ZSkuIFNvIG9uZSBQTUQgbWFwIG9yIHVubWFwIG9w ZXJhdGlvbiBjb3JyZXNwb25kcyB0byBleGFjdGx5IG9uZQo+PiAqZW50aXJlKiBtYXAgb3IgdW5t YXAuIFRoYXQgaXMgbm90IHRydWUgd2hlbiB3ZSBhcmUgUFRFIG1hcHBpbmcuCj4gCj4gd2VsbC4g VGhhbmtzIGZvciBjbGFyaWZpY2F0aW9uLiBiYXNlZCBvbiB0aGUgYWJvdmUgZGVzY3JpcHRpb24s IGkgYWdyZWUgdGhlCj4gY3VycmVudCBjb2RlIG1pZ2h0IG1ha2UgbW9yZSBzZW5zZSBieSBhbHdh eXMgdXNpbmcgbWFwY291bnQgaW4gc3VicGFnZS4KPiAKPiBJIGdhdmUgbXkgcHJvcG9zYWxzIGFz ICBJIHRob3VnaHQgd2Ugd2VyZSBhbHdheXMgQ09OVFBURSBzaXplIGZvciBzbWFsbC1USFAKPiB0 aGVuIHdlIGNvdWxkIGRyb3AgdGhlIGxvb3AgdG8gaXRlcmF0ZSAxNiB0aW1lcyBybWFwLiBpZiB3 ZSBkbyBpdAo+IGVudGlyZWx5LCB3ZSBvbmx5Cj4gbmVlZCB0byBkbyBkdXAgcm1hcCBvbmNlIGZv ciBhbGwgMTYgUFRFcyBieSBpbmNyZWFzaW5nIGVudGlyZV9tYXAuCgpXZWxsIGl0cyBhbHdheXMg Z29vZCB0byBoYXZlIHRoZSBkaXNjdXNzaW9uIC0gc28gdGhhbmtzIGZvciB0aGUgaWRlYXMuIEkg dGhpbmsKdGhlcmUgaXMgYSBiaWdnZXIgcXVlc3Rpb24gbHVya2luZyBoZXJlOyBzaG91bGQgd2Ug YmUgZXhwb3NpbmcgdGhlIGNvbmNlcHQgb2YKY29udHB0ZSBtYXBwaW5ncyB0byB0aGUgY29yZS1t bSByYXRoZXIgdGhhbiBidXJ5aW5nIGl0IGluIHRoZSBhcm02NCBhcmNoIGNvZGU/CkknbSBjb25m aWRlbnQgdGhhdCB3b3VsZCBiZSBhIGh1Z2UgYW1vdW50IG9mIGVmZm9ydCBhbmQgdGhlIGVuZCBy ZXN1bHQgd291bGQgYmUKc2ltaWxhciBwZXJmb3JtYWNlIHRvIHdoYXQgdGhpcyBhcHByb2FjaCBn aXZlcy4gT25lIHBvdGVudGlhbCBiZW5lZml0IG9mIGxldHRpbmcKY29yZS1tbSBjb250cm9sIGl0 IGlzIHRoYXQgaXQgd291bGQgYWxzbyBnaXZlIGNvbnRyb2wgdG8gY29yZS1tbSBvdmVyIHRoZQpn cmFudWxhcml0eSBvZiBhY2Nlc3MvZGlydHkgcmVwb3J0aW5nIChteSBhcHByb2FjaCBpbXBsaWNp dGx5IHRpZXMgaXQgdG8gdGhlCmZvbGlvKS4gSGF2aW5nIHN1Yi1mb2xpbyBhY2Nlc3MgdHJhY2tp bmcgX2NvdWxkXyBwb3RlbnRpYWxseSBoZWxwIHdpdGggZnV0dXJlCndvcmsgdG8gbWFrZSBUSFAg c2l6ZSBzZWxlY3Rpb24gYXV0b21hdGljLCBidXQgd2UgYXJlIG5vdCB0aGVyZSB5ZXQsIGFuZCBJ IHRoaW5rCnRoZXJlIGFyZSBvdGhlciAoc2ltcGxlcikgd2F5cyB0byBhY2hpZXZlIHRoZSBzYW1l IHRoaW5nLiBTbyBteSB2aWV3IGlzIHRoYXQKX25vdF8gZXhwb3NpbmcgaXQgdG8gY29yZS1tbSBp cyB0aGUgcmlnaHQgd2F5IGZvciBub3cuCgo+IAo+IEJUVywgSSBoYXZlIGNvbmNlcm5zIHRoYXQg YSB2YXJpYWJsZSBzbWFsbC1USFAgc2l6ZSB3aWxsIHJlYWxseSB3b3JrCj4gYXMgdXNlcnNwYWNl Cj4gaXMgcHJvYmFibHkgZnJpZW5kbHkgdG8gb25seSBvbmUgZml4ZWQgc2l6ZS4gZm9yIGV4YW1w bGUsIHVzZXJzcGFjZQo+IGhlYXAgbWFuYWdlbWVudAo+IG1pZ2h0IGJlIG9wdGltaXplZCB0byBh IHNpemUgZm9yIGZyZWVpbmcgbWVtb3J5IHRvIHRoZSBrZXJuZWwuIGl0IGlzCj4gdmVyeSBkaWZm aWN1bHQKPiBmb3IgdGhlIGhlYXAgdG8gYWRhcHQgdG8gdmFyaW91cyBzaXplcyBhdCB0aGUgc2Ft ZSB0aW1lLiBmcmVxdWVudCB1bm1hcC9mcmVlCj4gc2l6ZSBub3QgZXF1YWwgd2l0aCwgYW5kIHBh cnRpY3VsYXJseSBzbWFsbGVyIHRoYW4gc21hbGwtVEhQIHNpemUgd2lsbAo+IGRlZmVhdCBhbGwK PiBlZmZvcnRzIHRvIHVzZSBzbWFsbC1USFAuCgpJJ2xsIGFkbWl0IHRvIG5vdCBrbm93aW5nIGEg aHVnZSBhbW91bnQgYWJvdXQgdXNlciBzcGFjZSBhbGxvY2F0b3JzLiBCdXQgSSB3aWxsCnNheSB0 aGF0IGFzIGN1cnJlbnRseSBkZWZpbmVkLCB0aGUgc21hbGwtc2l6ZWQgVEhQIGludGVyZmFjZSB0 byB1c2VyIHNwYWNlCmFsbG93cyBhIHN5c2FkbWluIHRvIHNwZWNpZmljYWxseSBlbmFibGUgdGhl IHNldCBvZiBzaXplcyB0aGF0IHRoZXkgd2FudDsgc28gYQpzaW5nbGUgc2l6ZSBjYW4gYmUgZW5h YmxlZC4gSSdtIGRpbGliZXJhdGVseSBwdW50aW5nIHRoYXQgZGVjaXNpb24gYXdheSBmcm9tIHRo ZQprZXJuZWwgZm9yIG5vdy4KCkZXSVcsIE15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgU3BlZWRvbWV0 ZXIvSmF2YVNjcmlwdCB1c2UgY2FzZSBpcyB0aGF0IHBlcmZvcm1hbmNlCmlzIGEgbGl0dGxlIGJp dCBiZXR0ZXIgd2hlbiBlbmFibGluZyA2NCszMisxNksgdnMganVzdCA2NEsgVEhQLgoKRnVuY3Rp b25hbGx5LCBpdCB3aWxsIG5vdCBtYXR0ZXIgaWYgdGhlIGFsbG9jYXRvciBpcyBub3QgZW5saWdo dGVuZWQgZm9yIHRoZSBUSFAKc2l6ZTsgaXQgY2FuIGNvbnRpbnVlIHRvIGZyZWUsIGFuZCBpZiBh IHBhcnRpYWwgZm9saW8gaXMgdW5tYXBwZWQgaXQgaXMgcHV0IG9uCnRoZSBkZWZlcnJlZCBzcGxp dCBsaXN0LCB0aGVuIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBpdCBpcyBzcGxpdCBhbmQgdGhlIHVu dXNlZApwYWdlcyBhcmUgcmVjbGFpbWVkLiBJIGd1ZXNzIHRoaXMgaXMgdGhlIGJpdCB5b3UgYXJl IGNvbmNlcm5lZCBhYm91dCBoYXZpbmcgYQpwZXJmb3JtYW5jZSBpbXBhY3Q/CgpSZWdhcmRsZXNz LCBpdCB3b3VsZCBiZSBnb29kIHRvIG1vdmUgdGhpcyBjb252ZXJzYXRpb24gdG8gdGhlIHNtYWxs LXNpemVkIFRIUApwYXRjaCBzZXJpZXMgc2luY2UgdGhpcyBpcyBhbGwgaW5kZXBlbmRlbnQgb2Yg Y29udHB0ZSBtYXBwaW5ncy4KCj4gCj4+Cj4+Pgo+Pj4gU2luY2Ugd2UgYWx3YXlzIGhvbGQgcHRs IHRvIHNldCBvciBkcm9wIENPTlRQVEUgYml0cywgc2V0L2Ryb3AgaXMKPj4+IHN0aWxsIGF0b21p YyBpbiBhCj4+PiBzcGlubG9jayBhcmVhLgo+Pj4KPj4+Pgo+Pj4+Pj4KPj4+Pj4+IEJ1dCB0aGF0 IGNhbiBiZSBhZGRlZCBvbiB0b3AsIGFuZCBJJ2xsIGhhcHBpbHkgZG8gdGhhdC4KPj4+Pj4+Cj4+ Pj4+PiAtLQo+Pj4+Pj4gQ2hlZXJzLAo+Pj4+Pj4KPj4+Pj4+IERhdmlkIC8gZGhpbGRlbmIKPj4+ Pj4KPj4+Cj4gCj4gVGhhbmtzCj4gQmFycnkKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==