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 28DA7C4167B for ; Wed, 29 Nov 2023 12:22:05 +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=KMJb28wlEQu9tKN8XzL/d7Ir6e8HbvQFYrjSObz7VB4=; b=tnrUN64RIvl70X bFt/VQABPxT2FFvKZT1QK0Y6xRVGDFMPqLlu+jTEw9pgve3rOU2d5EB3Ugy4/rV4saFp59OJKJyjH ke3EPccMGYc1LoMPdI/SxQ0QzuHSDt9JFUaOBV5nzUAWF2tzzkagdWQbuU71OGvOkXrKPXJeT3KWR 5d1NoVj5cT4JpvgNy+UTL8oFBkjoYEnk/9q+lrPhsBezkxgWydnDQSEdOQXfQuVUEblIxJvjfYcFw gl6Duru0xebeBIr2uJKGGXFZshtfBhgeA/E/wc4d4fD9957b4d7bNqFfVMPQHHd9KMVN1efER/650 bBRgvEYXEaoAismQ3f1A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r8JZQ-008IEJ-25; Wed, 29 Nov 2023 12:21:36 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r8JZL-008ICR-1o for linux-arm-kernel@lists.infradead.org; Wed, 29 Nov 2023 12:21:34 +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 D68252F4; Wed, 29 Nov 2023 04:22:17 -0800 (PST) Received: from [10.57.70.211] (unknown [10.57.70.211]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 469E03F5A1; Wed, 29 Nov 2023 04:21:27 -0800 (PST) Message-ID: <451c097b-589f-4c95-8265-56a6451333b2@arm.com> Date: Wed, 29 Nov 2023 12:21:25 +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> <7c4c8ab2-8eb2-472d-ad8d-9d6c20b2191c@arm.com> <974feb64-d056-4f3c-9166-9b116bea1318@arm.com> From: Ryan Roberts In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231129_042131_750007_195435DA X-CRM114-Status: GOOD ( 50.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 T24gMjgvMTEvMjAyMyAyMTowNiwgQmFycnkgU29uZyB3cm90ZToKPiBPbiBUdWUsIE5vdiAyOCwg MjAyMyBhdCAxMTo0OeKAr1BNIFJ5YW4gUm9iZXJ0cyA8cnlhbi5yb2JlcnRzQGFybS5jb20+IHdy b3RlOgo+Pgo+PiBPbiAyOC8xMS8yMDIzIDA5OjQ5LCBCYXJyeSBTb25nIHdyb3RlOgo+Pj4gT24g VHVlLCBOb3YgMjgsIDIwMjMgYXQgMTA6MTTigK9QTSBSeWFuIFJvYmVydHMgPHJ5YW4ucm9iZXJ0 c0Bhcm0uY29tPiB3cm90ZToKPj4+Pgo+Pj4+IE9uIDI3LzExLzIwMjMgMjA6MzQsIEJhcnJ5IFNv bmcgd3JvdGU6Cj4+Pj4+IE9uIFR1ZSwgTm92IDI4LCAyMDIzIGF0IDEyOjA34oCvQU0gUnlhbiBS b2JlcnRzIDxyeWFuLnJvYmVydHNAYXJtLmNvbT4gd3JvdGU6Cj4+Pj4+Pgo+Pj4+Pj4gT24gMjcv MTEvMjAyMyAxMDoyOCwgQmFycnkgU29uZyB3cm90ZToKPj4+Pj4+PiBPbiBNb24sIE5vdiAyNywg MjAyMyBhdCAxMToxMeKAr1BNIFJ5YW4gUm9iZXJ0cyA8cnlhbi5yb2JlcnRzQGFybS5jb20+IHdy b3RlOgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBPbiAyNy8xMS8yMDIzIDA5OjU5LCBCYXJyeSBTb25nIHdy b3RlOgo+Pj4+Pj4+Pj4gT24gTW9uLCBOb3YgMjcsIDIwMjMgYXQgMTA6MzXigK9QTSBSeWFuIFJv YmVydHMgPHJ5YW4ucm9iZXJ0c0Bhcm0uY29tPiB3cm90ZToKPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+ IE9uIDI3LzExLzIwMjMgMDg6NDIsIEJhcnJ5IFNvbmcgd3JvdGU6Cj4+Pj4+Pj4+Pj4+Pj4gKyAg ICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5yOyBpKyssIHBhZ2UrKykgewo+Pj4+Pj4+Pj4+Pj4+ ICsgICAgICAgICAgICAgICAgICAgaWYgKGFub24pIHsKPj4+Pj4+Pj4+Pj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyoKPj4+Pj4+Pj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogSWYgdGhpcyBwYWdlIG1heSBoYXZlIGJlZW4gcGlubmVkIGJ5IHRoZQo+Pj4+Pj4+ Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwYXJlbnQgcHJvY2VzcywgY29w eSB0aGUgcGFnZSBpbW1lZGlhdGVseSBmb3IKPj4+Pj4+Pj4+Pj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICogdGhlIGNoaWxkIHNvIHRoYXQgd2UnbGwgYWx3YXlzIGd1YXJhbnRlZSB0 aGUKPj4+Pj4+Pj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcGlubmVkIHBh Z2Ugd29uJ3QgYmUgcmFuZG9tbHkgcmVwbGFjZWQgaW4gdGhlCj4+Pj4+Pj4+Pj4+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqIGZ1dHVyZS4KPj4+Pj4+Pj4+Pj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCj4+Pj4+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICh1bmxpa2VseShwYWdlX3RyeV9kdXBfYW5vbl9ybWFwKAo+Pj4+Pj4+Pj4+Pj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgZmFsc2Us IHNyY192bWEpKSkgewo+Pj4+Pj4+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChpICE9IDApCj4+Pj4+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4+Pj4+Pj4+Pj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBQYWdlIG1heSBiZSBwaW5uZWQsIHdlIGhhdmUgdG8gY29w eS4gKi8KPj4+Pj4+Pj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gY29weV9wcmVzZW50X3BhZ2UoCj4+Pj4+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfcHRlLAo+Pj4+ Pj4+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Jj X3B0ZSwgYWRkciwgcnNzLCBwcmVhbGxvYywKPj4+Pj4+Pj4+Pj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UpOwo+Pj4+Pj4+Pj4+Pj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICB9Cj4+Pj4+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJzc1tNTV9BTk9OUEFHRVNdKys7Cj4+Pj4+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZNX0JVR19PTihQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKSk7Cj4+Pj4+Pj4+ Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewo+Pj4+Pj4+Pj4+Pj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICBwYWdlX2R1cF9maWxlX3JtYXAocGFnZSwgZmFsc2UpOwo+Pj4+ Pj4+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICByc3NbbW1fY291bnRlcl9maWxl KHBhZ2UpXSsrOwo+Pj4+Pj4+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgfQo+Pj4+Pj4+Pj4+ Pj4+ICAgICAgICAgICAgIH0KPj4+Pj4+Pj4+Pj4+PiAtICAgICAgICAgICByc3NbTU1fQU5PTlBB R0VTXSsrOwo+Pj4+Pj4+Pj4+Pj4+IC0gICB9IGVsc2UgaWYgKHBhZ2UpIHsKPj4+Pj4+Pj4+Pj4+ PiAtICAgICAgICAgICBmb2xpb19nZXQoZm9saW8pOwo+Pj4+Pj4+Pj4+Pj4+IC0gICAgICAgICAg IHBhZ2VfZHVwX2ZpbGVfcm1hcChwYWdlLCBmYWxzZSk7Cj4+Pj4+Pj4+Pj4+Pj4gLSAgICAgICAg ICAgcnNzW21tX2NvdW50ZXJfZmlsZShwYWdlKV0rKzsKPj4+Pj4+Pj4+Pj4+PiArCj4+Pj4+Pj4+ Pj4+Pj4gKyAgICAgICAgICAgbnIgPSBpOwo+Pj4+Pj4+Pj4+Pj4+ICsgICAgICAgICAgIGZvbGlv X3JlZl9hZGQoZm9saW8sIG5yKTsKPj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+PiBZb3UncmUgY2hh bmdpbmcgdGhlIG9yZGVyIG9mIG1hcGNvdW50IHZzLiByZWZjb3VudCBpbmNyZW1lbnQuIERvbid0 Lgo+Pj4+Pj4+Pj4+Pj4gTWFrZSBzdXJlIHlvdXIgcmVmY291bnQgPj0gbWFwY291bnQuCj4+Pj4+ Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4gWW91IGNhbiBkbyB0aGF0IGVhc2lseSBieSBkb2luZyB0aGUg Zm9saW9fcmVmX2FkZChmb2xpbywgbnIpIGZpcnN0IGFuZAo+Pj4+Pj4+Pj4+Pj4gdGhlbiBkZWNy ZW1lbnRpbmcgaW4gY2FzZSBvZiBlcnJvciBhY2NvcmRpbmdseS4gRXJyb3JzIGR1ZSB0byBwaW5u ZWQKPj4+Pj4+Pj4+Pj4+IHBhZ2VzIGFyZSB0aGUgY29ybmVyIGNhc2UuCj4+Pj4+Pj4+Pj4+Pgo+ Pj4+Pj4+Pj4+Pj4gSSdsbCBub3RlIHRoYXQgaXQgd2lsbCBtYWtlIGEgbG90IG9mIHNlbnNlIHRv IGhhdmUgYmF0Y2ggdmFyaWFudHMgb2YKPj4+Pj4+Pj4+Pj4+IHBhZ2VfdHJ5X2R1cF9hbm9uX3Jt YXAoKSBhbmQgcGFnZV9kdXBfZmlsZV9ybWFwKCkuCj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pgo+ Pj4+Pj4+Pj4+PiBpIHN0aWxsIGRvbid0IHVuZGVyc3RhbmQgd2h5IGl0IGlzIG5vdCBhIGVudGly ZSBtYXArMSwgYnV0IGFuIGluY3JlbWVudAo+Pj4+Pj4+Pj4+PiBpbiBlYWNoIGJhc2VwYWdlLgo+ Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gQmVjYXVzZSB3ZSBhcmUgUFRFLW1hcHBpbmcgdGhlIGZvbGlv LCB3ZSBoYXZlIHRvIGFjY291bnQgZWFjaCBpbmRpdmlkdWFsIHBhZ2UuCj4+Pj4+Pj4+Pj4gSWYg d2UgYWNjb3VudGVkIHRoZSBlbnRpcmUgZm9saW8sIHdoZXJlIHdvdWxkIHdlIHVuYWNjb3VudCBp dD8gRWFjaCBwYWdlIGNhbiBiZQo+Pj4+Pj4+Pj4+IHVubWFwcGVkIGluZGl2aWR1YWxseSAoZS5n LiBtdW5tYXAoKSBwYXJ0IG9mIHRoZSBmb2xpbykgc28gbmVlZCB0byBhY2NvdW50IGVhY2gKPj4+ Pj4+Pj4+PiBwYWdlLiBXaGVuIFBNRCBtYXBwaW5nLCB0aGUgd2hvbGUgdGhpbmcgaXMgZWl0aGVy IG1hcHBlZCBvciB1bm1hcHBlZCwgYW5kIGl0cwo+Pj4+Pj4+Pj4+IGF0b21pYywgc28gd2UgY2Fu IGFjY291bnQgdGhlIGVudGlyZSB0aGluZy4KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+PiBIaSBSeWFuLAo+ Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IFRoZXJlIGlzIG5vIHByb2JsZW0uIGZvciBleGFtcGxlLCBhIGxh cmdlIGZvbGlvIGlzIGVudGlyZWx5IG1hcHBlZCBpbgo+Pj4+Pj4+Pj4gcHJvY2VzcyBBIHdpdGgg Q09OUFRFLAo+Pj4+Pj4+Pj4gYW5kIG9ubHkgcGFnZTIgaXMgbWFwcGVkIGluIHByb2Nlc3MgQi4K Pj4+Pj4+Pj4+IHRoZW4gd2Ugd2lsbCBoYXZlCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gZW50aXJlX21h cCA9IDAKPj4+Pj4+Pj4+IHBhZ2UwLm1hcCA9IC0xCj4+Pj4+Pj4+PiBwYWdlMS5tYXAgPSAtMQo+ Pj4+Pj4+Pj4gcGFnZTIubWFwID0gMAo+Pj4+Pj4+Pj4gcGFnZTMubWFwID0gLTEKPj4+Pj4+Pj4+ IC4uLi4KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4gYXMgbG9u ZyBhcyBpdCBpcyBhIENPTlRQVEUgbGFyZ2UgZm9saW8sIHRoZXJlIGlzIG5vIG11Y2ggZGlmZmVy ZW5jZSB3aXRoCj4+Pj4+Pj4+Pj4+IFBNRC1tYXBwZWQgbGFyZ2UgZm9saW8uIGl0IGhhcyBhbGwg dGhlIGNoYW5jZSB0byBiZSBEb3VibGVNYXAgYW5kIG5lZWQKPj4+Pj4+Pj4+Pj4gc3BsaXQuCj4+ Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+IFdoZW4gQSBhbmQgQiBzaGFyZSBhIENPTlRQVEUgbGFyZ2Ug Zm9saW8sIHdlIGRvIG1hZHZpc2UoRE9OVE5FRUQpIG9yIGFueQo+Pj4+Pj4+Pj4+PiBzaW1pbGFy IHRoaW5ncyBvbiBhIHBhcnQgb2YgdGhlIGxhcmdlIGZvbGlvIGluIHByb2Nlc3MgQSwKPj4+Pj4+ Pj4+Pj4KPj4+Pj4+Pj4+Pj4gdGhpcyBsYXJnZSBmb2xpbyB3aWxsIGhhdmUgcGFydGlhbGx5IG1h cHBlZCBzdWJwYWdlIGluIEEgKGFsbCBDT05UUEUgYml0cwo+Pj4+Pj4+Pj4+PiBpbiBhbGwgc3Vi cGFnZXMgbmVlZCB0byBiZSByZW1vdmVkIHRob3VnaCB3ZSBvbmx5IHVubWFwIGEgcGFydCBvZiB0 aGUKPj4+Pj4+Pj4+Pj4gbGFyZ2UgZm9saW9hcyBIVyByZXF1aXJlcyBjb25zaXN0ZW50IENPTlRQ VEVzKTsgYW5kIGl0IGhhcyBlbnRpcmUgbWFwIGluCj4+Pj4+Pj4+Pj4+IHByb2Nlc3MgQihhbGwg UFRFcyBhcmUgc3RpbGwgQ09OUFRFUyBpbiBwcm9jZXNzIEIpLgo+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+ Pj4+PiBpc24ndCBpdCBtb3JlIHNlbnNpYmxlIGZvciB0aGlzIGxhcmdlIGZvbGlvcyB0byBoYXZl IGVudGlyZV9tYXAgPSAwKGZvcgo+Pj4+Pj4+Pj4+PiBwcm9jZXNzIEIpLCBhbmQgc3VicGFnZXMg d2hpY2ggYXJlIHN0aWxsIG1hcHBlZCBpbiBwcm9jZXNzIEEgaGFzIG1hcF9jb3VudAo+Pj4+Pj4+ Pj4+PiA9MD8gKHN0YXJ0IGZyb20gLTEpLgo+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4gRXNwZWNp YWxseSwgdGhlIGJhdGNoIHZhcmlhbnQgb2YgcGFnZV90cnlfZHVwX2Fub25fcm1hcCgpIHdvdWxk IG9ubHkKPj4+Pj4+Pj4+Pj4+IGNoZWNrIG9uY2UgaWYgdGhlIGZvbGlvIG1heWJlIHBpbm5lZCwg YW5kIGluIHRoYXQgY2FzZSwgeW91IGNhbiBzaW1wbHkKPj4+Pj4+Pj4+Pj4+IGRyb3AgYWxsIHJl ZmVyZW5jZXMgYWdhaW4uIFNvIHlvdSBlaXRoZXIgaGF2ZSBhbGwgb3Igbm8gcHRlcyB0byBwcm9j ZXNzLAo+Pj4+Pj4+Pj4+Pj4gd2hpY2ggbWFrZXMgdGhhdCBjb2RlIGVhc2llci4KPj4+Pj4+Pj4+ Pgo+Pj4+Pj4+Pj4+IEknbSBhZnJhaWQgdGhpcyBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gbWUuIFBl cmhhcHMgSSd2ZSBtaXN1bmRlcnN0b29kLiBCdXQKPj4+Pj4+Pj4+PiBmdW5kYW1lbnRhbGx5IHlv dSBjYW4gb25seSB1c2UgZW50aXJlX21hcGNvdW50IGlmIGl0cyBvbmx5IHBvc3NpYmxlIHRvIG1h cCBhbmQKPj4+Pj4+Pj4+PiB1bm1hcCB0aGUgd2hvbGUgZm9saW8gYXRvbWljYWxseS4KPj4+Pj4+ Pj4+Cj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IE15IHBvaW50IGlzIHRoYXQgQ09OVFBF cyBzaG91bGQgZWl0aGVyIGFsbC1zZXQgaW4gYWxsIDE2IFBURXMgb3IgYWxsIGFyZSBkcm9wcGVk Cj4+Pj4+Pj4+PiBpbiAxNiBQVEVzLiBpZiBhbGwgUFRFcyBoYXZlIENPTlQsIGl0IGlzIGVudGly ZWx5IG1hcHBlZDsgb3RoZXJ3aXNlLAo+Pj4+Pj4+Pj4gaXQgaXMgcGFydGlhbGx5Cj4+Pj4+Pj4+ PiBtYXBwZWQuIGlmIGEgbGFyZ2UgZm9saW8gaXMgbWFwcGVkIGluIG9uZSBwcm9jZXNzZXMgd2l0 aCBhbGwgQ09OVFBURXMKPj4+Pj4+Pj4+IGFuZCBtZWFud2hpbGUgaW4gYW5vdGhlciBwcm9jZXNz IHdpdGggcGFydGlhbCBtYXBwaW5nKHcvbyBDT05UUFRFKSwgaXQgaXMKPj4+Pj4+Pj4+IERvdWJs ZU1hcHBlZC4KPj4+Pj4+Pj4KPj4+Pj4+Pj4gVGhlcmUgYXJlIDIgcHJvYmxlbXMgd2l0aCB5b3Vy IHByb3Bvc2FsLCBhcyBJIHNlZSBpdDsKPj4+Pj4+Pj4KPj4+Pj4+Pj4gMSkgdGhlIGNvcmUtbW0g aXMgbm90IGVubGlnaHRlbmVkIGZvciBDT05UUFRFIG1hcHBpbmdzLiBBcyBmYXIgYXMgaXQgaXMK Pj4+Pj4+Pj4gY29uY2VybmVkLCBpdHMganVzdCBtYXBwaW5nIGEgYnVuY2ggb2YgUFRFcy4gU28g aXQgaGFzIG5vIGhvb2sgdG8gaW5jL2RlYwo+Pj4+Pj4+PiBlbnRpcmVfbWFwY291bnQuIFRoZSBh cmNoIGNvZGUgaXMgb3Bwb3J0dW5pc3RpY2FsbHkgYW5kICp0cmFuc3BhcmVudGx5KiBtYW5hZ2lu Zwo+Pj4+Pj4+PiB0aGUgQ09OVF9QVEUgYml0Lgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAyKSBUaGVyZSBp cyBub3RoaW5nIHRvIHNheSBhIGZvbGlvIGlzbid0ICpiaWdnZXIqIHRoYW4gdGhlIGNvbnRwdGUg YmxvY2s7IGl0IG1heQo+Pj4+Pj4+PiBiZSAxMjhLIGFuZCBiZSBtYXBwZWQgd2l0aCAyIGNvbnRw dGUgYmxvY2tzLiBPciBldmVuIGEgUFRFLW1hcHBlZCBUSFAgKDJNKSBhbmQKPj4+Pj4+Pj4gYmUg bWFwcGVkIHdpdGggMzIgY29udHB0ZSBibG9ja3MuIFNvIHlvdSBjYW4ndCBzYXkgaXQgaXMgZW50 aXJlbHkgbWFwcGVkCj4+Pj4+Pj4+IHVubGVzcy91bnRpbCBBTEwgb2YgdGhvc2UgYmxvY2tzIGFy ZSBzZXQgdXAuIEFuZCB0aGVuIG9mIGNvdXJzZSBlYWNoIGJsb2NrIGNvdWxkCj4+Pj4+Pj4+IGJl IHVubWFwcGVkIHVuYXRvbWljYWxseS4KPj4+Pj4+Pj4KPj4+Pj4+Pj4gRm9yIHRoZSBQTUQgY2Fz ZSB0aGVyZSBhcmUgYWN0dWFsbHkgMiBwcm9wZXJ0aWVzIHRoYXQgYWxsb3cgdXNpbmcgdGhlCj4+ Pj4+Pj4+IGVudGlyZV9tYXBjb3VudCBvcHRpbWl6YXRpb247IEl0J3MgYXRvbWljYWxseSBtYXBw ZWQvdW5tYXBwZWQgdGhyb3VnaCB0aGUgUE1ECj4+Pj4+Pj4+IGFuZCB3ZSBrbm93IHRoYXQgdGhl IGZvbGlvIGlzIGV4YWN0bHkgUE1EIHNpemVkIChzaW5jZSBpdCBtdXN0IGJlIGF0IGxlYXN0IFBN RAo+Pj4+Pj4+PiBzaXplZCB0byBiZSBhYmxlIHRvIG1hcCBpdCB3aXRoIHRoZSBQTUQsIGFuZCB3 ZSBkb24ndCBhbGxvY2F0ZSBUSFBzIGFueSBiaWdnZXIKPj4+Pj4+Pj4gdGhhbiBQTUQgc2l6ZSku IFNvIG9uZSBQTUQgbWFwIG9yIHVubWFwIG9wZXJhdGlvbiBjb3JyZXNwb25kcyB0byBleGFjdGx5 IG9uZQo+Pj4+Pj4+PiAqZW50aXJlKiBtYXAgb3IgdW5tYXAuIFRoYXQgaXMgbm90IHRydWUgd2hl biB3ZSBhcmUgUFRFIG1hcHBpbmcuCj4+Pj4+Pj4KPj4+Pj4+PiB3ZWxsLiBUaGFua3MgZm9yIGNs YXJpZmljYXRpb24uIGJhc2VkIG9uIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiwgaSBhZ3JlZSB0aGUK Pj4+Pj4+PiBjdXJyZW50IGNvZGUgbWlnaHQgbWFrZSBtb3JlIHNlbnNlIGJ5IGFsd2F5cyB1c2lu ZyBtYXBjb3VudCBpbiBzdWJwYWdlLgo+Pj4+Pj4+Cj4+Pj4+Pj4gSSBnYXZlIG15IHByb3Bvc2Fs cyBhcyAgSSB0aG91Z2h0IHdlIHdlcmUgYWx3YXlzIENPTlRQVEUgc2l6ZSBmb3Igc21hbGwtVEhQ Cj4+Pj4+Pj4gdGhlbiB3ZSBjb3VsZCBkcm9wIHRoZSBsb29wIHRvIGl0ZXJhdGUgMTYgdGltZXMg cm1hcC4gaWYgd2UgZG8gaXQKPj4+Pj4+PiBlbnRpcmVseSwgd2Ugb25seQo+Pj4+Pj4+IG5lZWQg dG8gZG8gZHVwIHJtYXAgb25jZSBmb3IgYWxsIDE2IFBURXMgYnkgaW5jcmVhc2luZyBlbnRpcmVf bWFwLgo+Pj4+Pj4KPj4+Pj4+IFdlbGwgaXRzIGFsd2F5cyBnb29kIHRvIGhhdmUgdGhlIGRpc2N1 c3Npb24gLSBzbyB0aGFua3MgZm9yIHRoZSBpZGVhcy4gSSB0aGluawo+Pj4+Pj4gdGhlcmUgaXMg YSBiaWdnZXIgcXVlc3Rpb24gbHVya2luZyBoZXJlOyBzaG91bGQgd2UgYmUgZXhwb3NpbmcgdGhl IGNvbmNlcHQgb2YKPj4+Pj4+IGNvbnRwdGUgbWFwcGluZ3MgdG8gdGhlIGNvcmUtbW0gcmF0aGVy IHRoYW4gYnVyeWluZyBpdCBpbiB0aGUgYXJtNjQgYXJjaCBjb2RlPwo+Pj4+Pj4gSSdtIGNvbmZp ZGVudCB0aGF0IHdvdWxkIGJlIGEgaHVnZSBhbW91bnQgb2YgZWZmb3J0IGFuZCB0aGUgZW5kIHJl c3VsdCB3b3VsZCBiZQo+Pj4+Pj4gc2ltaWxhciBwZXJmb3JtYWNlIHRvIHdoYXQgdGhpcyBhcHBy b2FjaCBnaXZlcy4gT25lIHBvdGVudGlhbCBiZW5lZml0IG9mIGxldHRpbmcKPj4+Pj4+IGNvcmUt bW0gY29udHJvbCBpdCBpcyB0aGF0IGl0IHdvdWxkIGFsc28gZ2l2ZSBjb250cm9sIHRvIGNvcmUt bW0gb3ZlciB0aGUKPj4+Pj4+IGdyYW51bGFyaXR5IG9mIGFjY2Vzcy9kaXJ0eSByZXBvcnRpbmcg KG15IGFwcHJvYWNoIGltcGxpY2l0bHkgdGllcyBpdCB0byB0aGUKPj4+Pj4+IGZvbGlvKS4gSGF2 aW5nIHN1Yi1mb2xpbyBhY2Nlc3MgdHJhY2tpbmcgX2NvdWxkXyBwb3RlbnRpYWxseSBoZWxwIHdp dGggZnV0dXJlCj4+Pj4+PiB3b3JrIHRvIG1ha2UgVEhQIHNpemUgc2VsZWN0aW9uIGF1dG9tYXRp YywgYnV0IHdlIGFyZSBub3QgdGhlcmUgeWV0LCBhbmQgSSB0aGluawo+Pj4+Pj4gdGhlcmUgYXJl IG90aGVyIChzaW1wbGVyKSB3YXlzIHRvIGFjaGlldmUgdGhlIHNhbWUgdGhpbmcuIFNvIG15IHZp ZXcgaXMgdGhhdAo+Pj4+Pj4gX25vdF8gZXhwb3NpbmcgaXQgdG8gY29yZS1tbSBpcyB0aGUgcmln aHQgd2F5IGZvciBub3cuCj4+Pj4+Cj4+Pj4+IEhpIFJ5YW4sCj4+Pj4+Cj4+Pj4+IFdlKE9QUE8p IHN0YXJ0ZWQgYSBzaW1pbGFyIHByb2plY3QgbGlrZSB5b3UgZXZlbiBiZWZvcmUgZm9saW8gd2Fz IGltcG9ydGVkIHRvCj4+Pj4+IG1haW5saW5lLCB3ZSBoYXZlIGRlcGxveWVkIHRoZSBkeW5hbWlj IGh1Z2VwYWdlKHRoYXQgaXMgaG93IHdlIG5hbWUgaXQpCj4+Pj4+IG9uIG1pbGxpb25zIG9mIG1v YmlsZSBwaG9uZXMgb24gcmVhbCBwcm9kdWN0cyBhbmQga2VybmVscyBiZWZvcmUgNS4xNiwgIG1h a2luZwo+Pj4+PiBhIGh1Z2Ugc3VjY2VzcyBvbiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gZm9y IGV4YW1wbGUsIHlvdSBtYXkKPj4+Pj4gZmluZCB0aGUgb3V0LW9mLXRyZWUgNS4xNSBzb3VyY2Ug Y29kZSBoZXJlCj4+Pj4KPj4+PiBPaCB3b3csIHRoYW5rcyBmb3IgcmVhY2hpbmcgb3V0IGFuZCBl eHBsYWluaW5nIHRoaXMgLSBJIGhhdmUgdG8gYWRtaXQgSSBmZWVsCj4+Pj4gZW1iYXJyYXNzZWQg dGhhdCBJIGNsZWFybHkgZGlkbid0IGRvIGVub3VnaCByZXNlYXJjaCBvbiB0aGUgcHJpb3IgYXJ0 IGJlY2F1c2UgSQo+Pj4+IHdhc24ndCBhd2FyZSBvZiB5b3VyIHdvcmsuIFNvIHNvcnJ5IGFib3V0 IHRoYXQuCj4+Pj4KPj4+PiBJIHNlbnNlZCB0aGF0IHlvdSBoYWQgYSBkaWZmZXJlbnQgbW9kZWwg Zm9yIGhvdyB0aGlzIHNob3VsZCB3b3JrIHZzIHdoYXQgSSd2ZQo+Pj4+IGltcGxlbWVudGVkIGFu ZCBub3cgSSB1bmRlcnN0YW5kIHdoeSA6KS4gSSdsbCByZXZpZXcgeW91ciBzdHVmZiBhbmQgSSdt IHN1cmUKPj4+PiBJJ2xsIGhhdmUgcXVlc3Rpb25zLiBJJ20gc3VyZSBlYWNoIHNvbHV0aW9uIGhh cyBwcm9zIGFuZCBjb25zLgo+Pj4+Cj4+Pj4KPj4+Pj4KPj4+Pj4gaHR0cHM6Ly9naXRodWIuY29t L09uZVBsdXNPU1MvYW5kcm9pZF9rZXJuZWxfb25lcGx1c19zbTg1NTAvdHJlZS9vbmVwbHVzL3Nt ODU1MF91XzE0LjAuMF9vbmVwbHVzMTEKPj4+Pj4KPj4+Pj4gT3VyIG1vZGlmaWNhdGlvbiBtaWdo dCBub3QgYmUgc28gY2xlYW4gYW5kIGhhcyBsb3RzIG9mIHdvcmthcm91bmRzCj4+Pj4+IGp1c3Qg Zm9yIHRoZSBzdGFiaWxpdHkgb2YgcHJvZHVjdHMKPj4+Pj4KPj4+Pj4gV2UgbWFpbmx5IGhhdmUK Pj4+Pj4KPj4+Pj4gMS4gaHR0cHM6Ly9naXRodWIuY29tL09uZVBsdXNPU1MvYW5kcm9pZF9rZXJu ZWxfb25lcGx1c19zbTg1NTAvYmxvYi9vbmVwbHVzL3NtODU1MF91XzE0LjAuMF9vbmVwbHVzMTEv bW0vY29udF9wdGVfaHVnZXBhZ2UuYwo+Pj4+Pgo+Pj4+PiBzb21lIENPTlRQVEUgaGVscGVycwo+ Pj4+Pgo+Pj4+PiAyLmh0dHBzOi8vZ2l0aHViLmNvbS9PbmVQbHVzT1NTL2FuZHJvaWRfa2VybmVs X29uZXBsdXNfc204NTUwL2Jsb2Ivb25lcGx1cy9zbTg1NTBfdV8xNC4wLjBfb25lcGx1czExL2lu Y2x1ZGUvbGludXgvbW0uaAo+Pj4+Pgo+Pj4+PiBzb21lIER5bmFtaWMgSHVnZXBhZ2UgQVBJcwo+ Pj4+Pgo+Pj4+PiAzLiBodHRwczovL2dpdGh1Yi5jb20vT25lUGx1c09TUy9hbmRyb2lkX2tlcm5l bF9vbmVwbHVzX3NtODU1MC9ibG9iL29uZXBsdXMvc204NTUwX3VfMTQuMC4wX29uZXBsdXMxMS9t bS9tZW1vcnkuYwo+Pj4+Pgo+Pj4+PiBtb2RpZmllZCBhbGwgcGFnZSBmYXVsdHMgdG8gc3VwcG9y dAo+Pj4+PiAgICAgICgxKS4gYWxsb2NhdGlvbiBvZiBodWdlcGFnZSBvZiA2NEtCIGluIGRvX2Fu b25fcGFnZQo+Pj4+Cj4+Pj4gTXkgU21hbGwtU2l6ZWQgVEhQIHBhdGNoIHNldCBpcyBoYW5kbGlu ZyB0aGUgZXF1aXZhbGVudCBvZiB0aGlzLgo+Pj4KPj4+IHJpZ2h0LCB0aGUgb25seSBkaWZmZXJl bmNlIGlzIHRoYXQgd2UgZGlkIGEgaHVnZS16ZXJvcGFnZSBmb3IgcmVhZGluZwo+Pj4gaW4gZG9f YW5vbl9wYWdlLgo+Pj4gbWFwcGluZyBhbGwgbGFyZ2UgZm9saW9zIHRvIENPTlRQVEUgdG8gemVy byBwYWdlLgo+Pgo+PiBGV0lXLCBJIHRvb2sgYSBzbGlnaHRseSBkaWZmZXJlbnQgYXBwcm9hY2gg aW4gbXkgb3JpZ2luYWwgUkZDIGZvciB0aGUgemVybyBwYWdlCj4+IC0gYWx0aG91Z2ggSSByaXBw ZWQgaXQgYWxsIG91dCB0byBzaW1wbGlmeSBmb3IgdGhlIGluaXRpYWwgc2VyaWVzLiBJIGZvdW5k IHRoYXQKPj4gaXQgd2FzIHByZXR0eSByYXJlIGZvciB1c2VyIHNwYWNlIHRvIHJlYWQgbXVsdGlw bGUgY29uc2VjdXRpdmUgcGFnZXMgd2l0aG91dAo+PiBldmVyIGludGVybGV2aW5nIGFueSB3cml0 ZXMsIHNvIEkga2VwdCB0aGUgemVybyBwYWdlIGFzIGEgYmFzZSBwYWdlLCBidXQgYXQgQ29XLAo+ PiBJIHdvdWxkIGV4cGFuZCB0aGUgYWxsb2NhdGlvbiB0byBhbiBhcHByb3ByYXRlbHkgc2l6ZWQg VEhQLiBCdXQgZm9yIHRoZSBjb3VwbGUKPj4gb2Ygd29ya2xvYWRzIHRoYXQgSSd2ZSBnb25lIGRl ZXAgd2l0aCwgSSBmb3VuZCB0aGF0IGl0IG1hZGUgYmFyZWx5IGFueSBkZW50IG9uCj4+IHRoZSBh bW91bnQgb2YgbWVtb3J5IHRoYXQgZW5kZWQgdXAgY29udHB0ZS1tYXBwZWQ7IHRoZSB2YXN0IG1h am9yaXR5IHdhcyBmcm9tCj4+IHdyaXRlIGFsbG9jYXRpb24gaW4gZG9fYW5vbnltb3VzX3BhZ2Uo KS4KPiAKPiB0aGUgcHJvYmxlbSBpcyBldmVuIGlmIHRoZXJlIGlzIG9ubHkgb25lIHBhZ2UgcmVh ZCBpbiAxNiBwdGVzLCB5b3UKPiB3aWxsIG1hcCB0aGUgcGFnZSB0bwo+IHplcm8gYmFzZXBhZ2Uu IHRoZW4gd2hpbGUgeW91IHdyaXRlIGFub3RoZXIgcGFnZSBpbiB0aGVzZSAxNiBwdGVzLCB5b3UK PiBsb3NlIHRoZSBjaGFuY2UKPiB0byBiZWNvbWUgbGFyZ2UgZm9saW8gYXMgcHRlX3JhbmdlX25v bmUoKSBiZWNvbWVzIGZhbHNlLgo+IAo+IGlmIHdlIG1hcCB0aGVzZSAxNnB0ZXMgdG8gY29udHB0 ZSB6ZXJvIHBhZ2UsIGluIGRvX3dwX3BhZ2UsIHdlIGhhdmUgYQo+IGdvb2QgY2hhbmNlCj4gdG8g Q29XIGFuZCBnZXQgYSBsYXJnZSBhbm9uIGZvbGlvLgoKWWVzIHVuZGVyc3Rvb2QuIEkgdGhpbmsg d2UgYXJlIGEgYml0IG9mZi10b3BpYyBmb3IgdGhpcyBwYXRjaCBzZXQgdGhvdWdoLgpzbWFsbC1z aXplZCBUSFAgemVybyBwYWdlcyBjYW4gYmUgdGFja2xlZCBhcyBhIHNlcGFyYXRlIHNlcmllcyBv bmNlIHRoZXNlCmluaXRpYWwgc2VyaWVzIGFyZSBpbi4gSSdkIGJlIGhhcHB5IHRvIHJldmlldyBh IHNtYWxsLXNpemVkIFRIUCB6ZXJvIHBhZ2UgcG9zdCA6KQoKPiAKPj4KPj4+Cj4+Pj4KPj4+Pj4g ICAgICAoMikuIENvVyBodWdlcGFnZSBpbiBkb193cF9wYWdlCj4+Pj4KPj4+PiBUaGlzIGlzbid0 IGhhbmRsZWQgeWV0IGluIG15IHBhdGNoIHNldDsgdGhlIG9yaWdpbmFsIFJGQyBpbXBsZW1lbnRl ZCBpdCBidXQgSQo+Pj4+IHJlbW92ZWQgaXQgaW4gb3JkZXIgdG8gc3RyaXAgYmFjayB0byB0aGUg ZXNzZW50aWFsIGNvbXBsZXhpdHkgZm9yIHRoZSBpbml0aWFsCj4+Pj4gc3VibWlzc2lvbi4gRGF2 aWRIIGhhcyBiZWVuIHdvcmtpbmcgb24gYSBwcmVjaXNlIHNoYXJlZCB2cyBleGNsdXNpdmUgbWFw Cj4+Pj4gdHJhY2tpbmcgbWVjaGFuaXNtIC0gaWYgdGhhdCBnb2VzIGluLCBpdCB3aWxsIG1ha2Ug Q29XaW5nIGxhcmdlIGZvbGlvcyBzaW1wbGVyLgo+Pj4+IE91dCBvZiBpbnRlcmVzdCwgd2hhdCB3 b3JrbG9hZHMgYmVuZWZpdCBtb3N0IGZyb20gdGhpcz8KPj4+Cj4+PiBhcyBhIHBob25lLCBBbmRy b2lkIGhhcyBhIGRlc2lnbiBhbG1vc3QgYWxsIHByb2Nlc3NlcyBhcmUgZm9ya2VkIGZyb20genln b3RlLgo+Pj4gdGh1cywgQ29XIGhhcHBlbnMgcXVpdGUgb2Z0ZW4gdG8gYWxsIGFwcHMuCj4+Cj4+ IFN1cmUuIEJ1dCBpbiBteSBhbmFseXNpcyBJIGNvbmNsdWRlZCB0aGF0IG1vc3Qgb2YgdGhlIG1l bW9yeSBtYXBwZWQgaW4genlnb3RlIGlzCj4+IGZpbGUtYmFja2VkIGFuZCBtb3N0bHkgUk8gc28g dGhlcmVmb3JlIGRvaW5nIFRIUCBDb1cgZG9lc24ndCBoZWxwIG11Y2guIFBlcmhhcHMKPj4gdGhl cmUgYXJlIGNhc2VzIHdoZXJlIHRoYXQgY29uY2x1c2lvbiBpcyB3cm9uZy4KPiAKPiBDb1cgaXMg bXVjaCBsZXNzIHRoYW4gZG9fYW5vbl9wYWdlIG9uIG15IHBob25lIHdoaWNoIGlzIHJ1bm5pbmcg ZHluYW1pYwo+IGh1Z2VwYWdlIGZvciBhIGNvdXBsZSBvZiBob3VyczoKPiAKPiBPUDUyRDFMMTov ICMgY2F0IC9wcm9jL2NvbnRfcHRlX2h1Z2VwYWdlL3N0YXQKPiAuLi4KPiB0aHBfY293IDM0NjY5 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLSBDb1cgYSBsYXJnZSBmb2xpbwo+IHRocF9k b19hbm9uX3BhZ2VzIDEwMzIzNjIgICAgIC0tLS0tICBhIGxhcmdlIGZvbGlvIGluIGRvX2Fub25f cGFnZQo+IC4uLgo+IAo+IHNvIGl0IGlzIGFyb3VuZCAzNDY2OS8xMDMyMzYyID0gMy4zNSUuCgp3 ZWxsIGl0cyBhY3R1YWxseSAzNDY2OSAvICgzNDY2OSArIDEwMzIzNjIpID0gMy4yNSUuIEJ1dCwg eWVzLCB0aGUgcG9pbnQgaXMgdGhhdAp2ZXJ5IGZldyBvZiBsYXJnZSBmb2xpb3MgYXJlIGxvc3Qg ZHVlIHRvIENvVyBzbyB0aGVyZSBpcyBsaWtlbHkgdG8gYmUgbGl0dGxlCnBlcmYgaW1wYWN0LiBB Z2FpbiwgSSdkIGhhcHBpbHkgcmV2aWV3IGEgc2VyaWVzIHRoYXQgZW5hYmxlcyB0aGlzIQoKPiAK Pj4KPj4+Cj4+Pj4KPj4+Pj4gICAgICAoMykuIGNvcHkgQ09OUFRFcyBpbiBjb3B5X3B0ZV9yYW5n ZQo+Pj4+Cj4+Pj4gQXMgZGlzY3Vzc2VkIHRoaXMgaXMgZG9uZSBhcyBwYXJ0IG9mIHRoZSBjb250 cHRlIHBhdGNoIHNldCwgYnV0IGl0cyBub3QganVzdCBhCj4+Pj4gc2ltcGxlIGNvcHk7IHRoZSBh cmNoIGNvZGUgd2lsbCBub3RpY2UgYW5kIHNldCB0aGUgQ09OVF9QVEUgYml0IGFzIG5lZWRlZC4K Pj4+Cj4+PiByaWdodCwgaSBoYXZlIHJlYWQgYWxsIHlvdXIgdW5mb2xkIGFuZCBmb2xkIHN0dWZm IHRvZGF5LCBub3cgaSB1bmRlcnN0YW5kIHlvdXIKPj4+IGFwcHJvYWNoIHNlZW1zIHF1aXRlIG5p Y2UhCj4+Cj4+IEdyZWF0IC0gdGhhbmtzIQo+Pgo+Pj4KPj4+Cj4+Pj4KPj4+Pj4gICAgICAoNCku IGFsbG9jYXRlIGFuZCBzd2FwLWluIEh1Z2VwYWdlIGFzIGEgd2hvbGUgaW4gZG9fc3dhcF9wYWdl Cj4+Pj4KPj4+PiBUaGlzIGlzIGdvaW5nIHRvIGJlIGEgcHJvYmxlbSBidXQgSSBoYXZlbid0IGV2 ZW4gbG9va2VkIGF0IHRoaXMgcHJvcGVybHkgeWV0Lgo+Pj4+IFRoZSBhZHZpY2Ugc28gZmFyIGhh cyBiZWVuIHRvIGNvbnRpbnVlIHRvIHN3YXAtaW4gc21hbGwgcGFnZXMgb25seSwgYnV0IGltcHJv dmUKPj4+PiBraHVnZXBhZ2VkIHRvIGNvbGxhcHNlIHRvIHNtYWxsLXNpemVkIFRIUC4gSSdsbCB0 YWtlIGEgbG9vayBhdCB5b3VyIGNvZGUgdG8KPj4+PiB1bmRlcnN0YW5kIGhvdyB5b3UgZGlkIHRo aXMuCj4+Pgo+Pj4gdGhpcyBpcyBhbHNvIGNydWNpYWwgdG8gYW5kcm9pZCBwaG9uZSBhcyBzd2Fw IGlzIGFsd2F5cyBoYXBwZW5pbmcKPj4+IG9uIGFuIGVtYmVkZGVkIGRldmljZS4gaWYgd2UgZG9u J3Qgc3VwcG9ydCBsYXJnZSBmb2xpb3MgaW4gc3dhcGluLAo+Pj4gb3VyIGxhcmdlIGZvbGlvcyB3 aWxsIG5ldmVyIGNvbWUgYmFjayBhZnRlciBpdCBpcyBzd2FwcGVkLW91dC4KPj4+Cj4+PiBhbmQg aSBoYXRlZCB0aGUgY29sbGFwc2Ugc29sdXRpb24gZnJvbSB0aGUgZmlyc3QgYmVnaW5uaW5nIGFz IHRoZXJlIGlzCj4+PiBuZXZlciBhIGd1YXJhbnRlZSB0byBzdWNjZWVkIGFuZCBpdHMgb3Zlcmhl YWQgaXMgdW5hY2NlcHRhYmxlIHRvIHVzZXIgVUksCj4+PiBzbyB3ZSBzdXBwb3J0ZWQgaHVnZXBh Z2UgYWxsb2NhdGlvbiBpbiBkb19zd2FwX3BhZ2UgZnJvbSB0aGUgZmlyc3QgYmVnaW5uaW5nLgo+ Pgo+PiBVbmRlcnN0b29kLiBJIGFncmVlIGl0IHdvdWxkIGJlIG5pY2UgdG8gcHJlc2VydmUgbGFy Z2UgZm9saW9zIGFjcm9zcyBzd2FwLiBJCj4+IHRoaW5rIHRoaXMgY2FuIGJlIGxheWVyZWQgb24g dG9wIG9mIHRoZSBjdXJyZW50IHdvcmsgdGhvdWdoLgo+IAo+IFRoaXMgd2lsbCBiZSBteSBmaXJz dCBwcmlvcml0eSB0byB1c2UgeW91ciBsYXJnZSBmb2xpbyBjb2RlIG9uIHBob25lcy4KPiBXZSBu ZWVkIGEgcGF0Y2hzZXQKPiBvbiB0b3Agb2YgeW91cnMgOi0pCj4gCj4gd2l0aG91dCBpdCwgd2Ug d2lsbCBsaWtlbHkgZmFpbC4gVHlwaWNhbGx5LCBvbmUgcGhvbmUgY2FuIGhhdmUgYSA0fjhHQgo+ IHpSQU0gdG8gY29tcHJlc3MKPiBhIGxvdCBvZiBhbm9uIHBhZ2VzLCBpZiB0aGUgY29tcHJlc3Np b24gcmF0aW8gaXMgMTo0LCB0aGF0IG1lYW5zCj4gdW5jb21wcmVzc2VkIGFub24KPiBwYWdlcyBh cmUgbXVjaCBtdWNoIG1vcmUuIFRodXMsIHdoaWxlIHRoZSBiYWNrZ3JvdW5kIGFwcCBpcyBzd2l0 Y2hlZCBiYWNrCj4gdG8gZm9yZWdyb3VuZCwgd2UgbmVlZCB0aG9zZSBzd2FwcGVkLW91dCBsYXJn ZSBmb2xpb3MgYmFjayByYXRoZXIgdGhhbiBnZXR0aW5nCj4gc21hbGwgYmFzZXBhZ2VzIHJlcGxh Y2VtZW50LiBzd2FwLWluIGJhc2VwYWdlIGlzIGRlZmluaXRlbHkgbm90IGdvaW5nIHRvCj4gd29y ayB3ZWxsIG9uIGEgcGhvbmUsIG5laXRoZXIgZG9lcyBUSFAgY29sbGFwc2UuCgpZZXAgdW5kZXJz dG9vZC4gRnJvbSB0aGUgb3RoZXIgdGhyZWFkLCBpdCBzb3VuZHMgbGlrZSB5b3UgYXJlIHByZXBh cmluZyBhIHNlcmllcwpmb3IgbGFyZ2Ugc3dhcC1pbiAtIGxvb2tpbmcgZm9yd2FyZCB0byBzZWVp bmcgaXQhCgo+IAo+Pgo+Pj4KPj4+Pgo+Pj4+Pgo+Pj4+PiA0LiBodHRwczovL2dpdGh1Yi5jb20v T25lUGx1c09TUy9hbmRyb2lkX2tlcm5lbF9vbmVwbHVzX3NtODU1MC9ibG9iL29uZXBsdXMvc204 NTUwX3VfMTQuMC4wX29uZXBsdXMxMS9tbS92bXNjYW4uYwo+Pj4+PiBodHRwczovL2dpdGh1Yi5j b20vT25lUGx1c09TUy9hbmRyb2lkX2tlcm5lbF9vbmVwbHVzX3NtODU1MC9ibG9iL29uZXBsdXMv c204NTUwX3VfMTQuMC4wX29uZXBsdXMxMS9tbS9ybWFwLmMKPj4+Pj4KPj4+Pj4gcmVjbGFpbSBo dWdlcGFnZSBhcyBhIHdob2xlIGFuZCBMUlUgb3B0aW1pemF0aW9uIGZvciA2NEtCIGR5bmFtaWMg aHVnZXBhZ2UuCj4+Pj4KPj4+PiBJIHRoaW5rIHRoaXMgaXMgYWxsIG5hdHVyYWxseSBoYW5kbGVk IGJ5IHRoZSBmb2xpbyBjb2RlIHRoYXQgZXhpc3RzIGluIG1vZGVybgo+Pj4+IGtlcm5lbHM/Cj4+ Pgo+Pj4gV2UgaGFkIGEgQ09OVFBURSBodWdlcGFnZSBwb29sLCBpZiB0aGUgcG9vbCBpcyB2ZXJ5 IGxpbWl0ZWQsIHdlIGxldCBMUlUKPj4+IHJlY2xhaW0gbGFyZ2UgZm9saW9zIHRvIHRoZSBwb29s LiBhcyBwaG9uZXMgYXJlIHJ1bm5pbmcgbG90cyBvZiBhcHBzCj4+PiBhbmQgZHJpdmVycywgYW5k IHRoZSBtZW1vcnkgaXMgdmVyeSBsaW1pdGVkLCBhZnRlciBhIGNvdXBsZSBvZiBob3VycywKPj4+ IGl0IHdpbGwgYmVjb21lIHZlcnkgaGFyZCB0byBhbGxvY2F0ZSBsYXJnZSBmb2xpb3MgaW4gdGhl IG9yaWdpbmFsIGJ1ZGR5LiB0aHVzLAo+Pj4gbGFyZ2UgZm9saW9zIHRvdGFsbHkgZGlzYXBwZWFy ZWQgYWZ0ZXIgcnVubmluZyB0aGUgcGhvbmUgZm9yIHNvbWUgdGltZQo+Pj4gaWYgd2UgZGlkbid0 IGhhdmUgdGhlIHBvb2wuCj4+Pgo+Pj4+Cj4+Pj4+Cj4+Pj4+IFNvIHdlIGFyZSAxMDAlIGludGVy ZXN0ZWQgaW4geW91ciBwYXRjaHNldCBhbmQgaG9wZSBpdCBjYW4gZmluZCBhIHdheQo+Pj4+PiB0 byBsYW5kIG9uIHRoZQo+Pj4+PiBtYWlubGluZSwgdGh1cyBkZWNyZWFzaW5nIGFsbCB0aGUgY29z dCB3ZSBoYXZlIHRvIG1haW50YWluIG91dC1vZi10cmVlCj4+Pj4+IGNvZGUgZnJvbSBhCj4+Pj4+ IGtlcm5lbCB0byBhbm90aGVyIGtlcm5lbCB2ZXJzaW9uIHdoaWNoIHdlIGhhdmUgZG9uZSBvbiBh IGNvdXBsZSBvZgo+Pj4+PiBrZXJuZWwgdmVyc2lvbnMKPj4+Pj4gYmVmb3JlIDUuMTYuIEZpcm1s eSwgd2UgYXJlIDEwMCUgc3VwcG9ydGl2ZSBvZiBsYXJnZSBhbm9uIGZvbGlvcwo+Pj4+PiB0aGlu Z3MgeW91IGFyZSBsZWFkaW5nLgo+Pj4+Cj4+Pj4gVGhhdCdzIGdyZWF0IHRvIGhlYXIhIE9mIGNv dXJzZSBSZXZpZXdlZC1CeSdzIGFuZCBUZXN0ZWQtQnkncyB3aWxsIGFsbCBoZWxwIG1vdmUKPj4+ PiBpdCBjbG9zZXIgOikuIElmIHlvdSBoYWQgYW55IGFiaWxpdHkgdG8gZG8gYW55IEEvQiBwZXJm b3JtYW5jZSB0ZXN0aW5nLCBpdCB3b3VsZAo+Pj4+IGJlIHZlcnkgaW50ZXJlc3RpbmcgdG8gc2Vl IGhvdyB0aGlzIHN0YWNrcyB1cCBhZ2FpbnN0IHlvdXIgc29sdXRpb24gLSBpZiB0aGVyZQo+Pj4+ IGFyZSBnYXBzIGl0IHdvdWxkIGJlIGdvb2QgdG8ga25vdyB3aGVyZSBhbmQgZGV2ZWxvcCBhIHBs YW4gdG8gcGx1ZyB0aGUgZ2FwLgo+Pj4+Cj4+Pgo+Pj4gc3VyZS4KPj4+Cj4+Pj4+Cj4+Pj4+IEEg YmlnIHBhaW4gd2FzIHdlIGZvdW5kIGxvdHMgb2YgcmFjZXMgZXNwZWNpYWxseSBvbiBDT05UUFRF IHVuZm9sZGluZwo+Pj4+PiBhbmQgZXNwZWNpYWxseSBhIHBhcnQKPj4+Pj4gb2YgYmFzZXBhZ2Vz IHJhbiBhd2F5IGZyb20gdGhlIDE2IENPTlBURXMgZ3JvdXAgc2luY2UgdXNlcnNwYWNlIGlzCj4+ Pj4+IGFsd2F5cyB3b3JraW5nCj4+Pj4+IG9uIGJhc2VwYWdlcywgaGF2aW5nIG5vIGlkZWEgb2Yg c21hbGwtVEhQLiAgV2UgcmFuIG91ciBjb2RlIG9uIG1pbGxpb25zIG9mCj4+Pj4+IHJlYWwgcGhv bmVzLCBhbmQgbm93IHdlIGhhdmUgZ290IHRoZW0gZml4ZWQgKG9yIG1heWJlICJjYW4ndCByZXBy b2R1Y2UiKSwKPj4+Pj4gbm8gb3V0c3RhbmRpbmcgaXNzdWUuCj4+Pj4KPj4+PiBJJ20gZ29pbmcg dG8gYmUgYnJhdmUgYW5kIHNheSB0aGF0IG15IHNvbHV0aW9uIHNob3VsZG4ndCBzdWZmZXIgZnJv bSB0aGVzZQo+Pj4+IHByb2JsZW1zOyBidXQgb2YgY291cnNlIHRoZSBwcm9vZiBpcyBvbmx5IGlu IHRoZSB0ZXN0aW5nLiBJIGRpZCBhIGxvdCBvZiB3b3JrCj4+Pj4gd2l0aCBvdXIgYXJjaGl0ZWN0 dXJlIGdyb3VwIGFuZCBtaWNybyBhcmNoaXRlY3RzIHRvIGRldGVybWluZSBleGFjdGx5IHdoYXQg aXMKPj4+PiBhbmQgaXNuJ3Qgc2FmZTsgV2UgZXZlbiB0aWdodGVuZWQgdGhlIEFybSBBUk0gc3Bl YyB2ZXJ5IHN1YnRsZWx5IHRvIGFsbG93IHRoZQo+Pj4+IG9wdGltaXphdGlvbiBpbiBwYXRjaCAx MyAoc2VlIHRoZSBjb21taXQgbG9nIGZvciBkZXRhaWxzKS4gT2YgY291cnNlIHRoaXMgaGFzCj4+ Pj4gYWxsIGJlZW4gY2hlY2tlZCB3aXRoIHBhcnRuZXJzIGFuZCB3ZSBhcmUgY29uZmlkZW50IHRo YXQgYWxsIGV4aXN0aW5nCj4+Pj4gaW1wbGVtZW50YXRpb25zIGNvbmZvcm0gdG8gdGhlIG1vZGlm aWVkIHdvcmRpbmcuCj4+Pgo+Pj4gY29vbC4gSSBsaWtlIHlvdXIgdHJ5X3VuZm9sZC9mb2xkIGNv ZGUuIGl0IHNlZW1zIHlvdXIgY29kZSBpcyBzZXR0aW5nL2Ryb3BwaW5nCj4+PiBDT05UIGF1dG9t YXRpY2FsbHkgYmFzZWQgb24gQUxJR0hNRU5ULCBQYWdlIG51bWJlciBldGMuIEFsdGVybmF0aXZl bHksCj4+PiBvdXIgY29kZSBpcyBhbHdheXMgc3R1cGlkbHkgY2hlY2tpbmcgc29tZSBjb25kaXRp b25zIGJlZm9yZSBzZXR0aW5nIGFuZCBkcm9wcGluZwo+Pj4gQ09OVCBldmVyeXdoZXJlLgo+Pj4K Pj4+Pgo+Pj4+Pgo+Pj4+PiBQYXJ0aWN1bGFybHkgZm9yIHRoZSBybWFwIGlzc3VlIHdlIGFyZSBk aXNjdXNzaW5nLCBvdXIgb3V0LW9mLXRyZWUgaXMKPj4+Pj4gdXNpbmcgdGhlIGVudGlyZV9tYXAg Zm9yCj4+Pj4+IENPTlRQVEUgaW4gdGhlIHdheSBJIHNlbnQgdG8geW91LiBCdXQgSSBndWVzcyB3 ZSBjYW4gbGVhcm4gZnJvbSB5b3UgdG8gZGVjb3VwbGUKPj4+Pj4gQ09OVFBURSBmcm9tIG1tLWNv cmUuCj4+Pj4+Cj4+Pj4+IFdlIGFyZSBkb2luZyB0aGlzIGluIG1tL21lbW9yeS5jCj4+Pj4+Cj4+ Pj4+IGNvcHlfcHJlc2VudF9jb250X3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEs IHN0cnVjdAo+Pj4+PiB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSwKPj4+Pj4gcHRlX3QgKmRzdF9w dGUsIHB0ZV90ICpzcmNfcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCAqcnNzLAo+Pj4+PiBz dHJ1Y3QgcGFnZSAqKnByZWFsbG9jKQo+Pj4+PiB7Cj4+Pj4+ICAgICAgIHN0cnVjdCBtbV9zdHJ1 Y3QgKnNyY19tbSA9IHNyY192bWEtPnZtX21tOwo+Pj4+PiAgICAgICB1bnNpZ25lZCBsb25nIHZt X2ZsYWdzID0gc3JjX3ZtYS0+dm1fZmxhZ3M7Cj4+Pj4+ICAgICAgIHB0ZV90IHB0ZSA9ICpzcmNf cHRlOwo+Pj4+PiAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZTsKPj4+Pj4KPj4+Pj4gICAgICAgIHBh Z2UgPSB2bV9ub3JtYWxfcGFnZShzcmNfdm1hLCBhZGRyLCBwdGUpOwo+Pj4+PiAgICAgICAuLi4K Pj4+Pj4KPj4+Pj4gICAgICBnZXRfcGFnZShwYWdlKTsKPj4+Pj4gICAgICBwYWdlX2R1cF9ybWFw KHBhZ2UsIHRydWUpOyAgIC8vIGFuIGVudGlyZSBkdXBfcm1hcCBhcyB5b3UgY2FuCj4+Pj4+IHNl ZS4uLi4uLi4uLi4uLi4KPj4+Pj4gICAgICByc3NbbW1fY291bnRlcihwYWdlKV0gKz0gSFBBR0Vf Q09OVF9QVEVfTlI7Cj4+Pj4+IH0KPj4+Pj4KPj4+Pj4gYW5kIHdlIGhhdmUgYSBzcGxpdCBpbiBt bS9jb250X3B0ZV9odWdlcGFnZS5jIHRvIGhhbmRsZSBwYXJ0aWFsbHkgdW5tYXAsCj4+Pj4+Cj4+ Pj4+IHN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9jb250X3B0ZV9sb2NrZWQoc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEsIHB0ZV90ICpwdGUsCj4+Pj4+IHVuc2lnbmVkIGxvbmcgaGFkZHIsIGJv b2wgZnJlZXplKQo+Pj4+PiB7Cj4+Pj4+IC4uLgo+Pj4+PiAgICAgICAgICAgIGlmIChjb21wb3Vu ZF9tYXBjb3VudChoZWFkKSA+IDEgJiYgIVRlc3RTZXRQYWdlRG91YmxlTWFwKGhlYWQpKSB7Cj4+ Pj4+ICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBIUEFHRV9DT05UX1BURV9OUjsg aSsrKQo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWNfaW5jKCZoZWFkW2ld Ll9tYXBjb3VudCk7Cj4+Pj4+ICAgICAgICAgICAgICAgICAgYXRvbWljX2xvbmdfaW5jKCZjb250 X3B0ZV9kb3VibGVfbWFwX2NvdW50KTsKPj4+Pj4gICAgICAgICAgICB9Cj4+Pj4+Cj4+Pj4+Cj4+ Pj4+ICAgICAgICAgICAgIGlmIChhdG9taWNfYWRkX25lZ2F0aXZlKC0xLCBjb21wb3VuZF9tYXBj b3VudF9wdHIoaGVhZCkpKSB7Cj4+Pj4+ICAgICAgICAgICAgICAgLi4uCj4+Pj4+IH0KPj4+Pj4K Pj4+Pj4gSSBhbSBub3Qgc2VsbGluZyBvdXIgc29sdXRpb24gYW55IG1vcmUsIGJ1dCBqdXN0IHNo b3dpbmcgeW91IHNvbWUgZGlmZmVyZW5jZXMgd2UKPj4+Pj4gaGF2ZSA6LSkKPj4+Pgo+Pj4+IE9L LCBJIHVuZGVyc3RhbmQgd2hhdCB5b3Ugd2VyZSBzYXlpbmcgbm93LiBJJ20gY3VycmVudGx5IHN0 cnVnZ2xpbmcgdG8gc2VlIGhvdwo+Pj4+IHRoaXMgY291bGQgZml0IGludG8gbXkgbW9kZWwuIERv IHlvdSBoYXZlIGFueSB3b3JrbG9hZHMgYW5kIG51bWJlcnMgb24gcGVyZgo+Pj4+IGltcHJvdmVt ZW50IG9mIHVzaW5nIGVudGlyZV9tYXBjb3VudD8KPj4+Cj4+PiBUQkgsIEkgZG9uJ3QgaGF2ZSBh bnkgZGF0YSBvbiB0aGlzIGFzIGZyb20gdGhlIGZpcnN0IGJlZ2lubmluZywgd2Ugd2VyZSB1c2lu Zwo+Pj4gZW50aXJlX21hcC4gU28gSSBoYXZlIG5vIGNvbXBhcmlzb24gYXQgYWxsLgo+Pj4KPj4+ Pgo+Pj4+Pgo+Pj4+Pj4KPj4+Pj4+Pgo+Pj4+Pj4+IEJUVywgSSBoYXZlIGNvbmNlcm5zIHRoYXQg YSB2YXJpYWJsZSBzbWFsbC1USFAgc2l6ZSB3aWxsIHJlYWxseSB3b3JrCj4+Pj4+Pj4gYXMgdXNl cnNwYWNlCj4+Pj4+Pj4gaXMgcHJvYmFibHkgZnJpZW5kbHkgdG8gb25seSBvbmUgZml4ZWQgc2l6 ZS4gZm9yIGV4YW1wbGUsIHVzZXJzcGFjZQo+Pj4+Pj4+IGhlYXAgbWFuYWdlbWVudAo+Pj4+Pj4+ IG1pZ2h0IGJlIG9wdGltaXplZCB0byBhIHNpemUgZm9yIGZyZWVpbmcgbWVtb3J5IHRvIHRoZSBr ZXJuZWwuIGl0IGlzCj4+Pj4+Pj4gdmVyeSBkaWZmaWN1bHQKPj4+Pj4+PiBmb3IgdGhlIGhlYXAg dG8gYWRhcHQgdG8gdmFyaW91cyBzaXplcyBhdCB0aGUgc2FtZSB0aW1lLiBmcmVxdWVudCB1bm1h cC9mcmVlCj4+Pj4+Pj4gc2l6ZSBub3QgZXF1YWwgd2l0aCwgYW5kIHBhcnRpY3VsYXJseSBzbWFs bGVyIHRoYW4gc21hbGwtVEhQIHNpemUgd2lsbAo+Pj4+Pj4+IGRlZmVhdCBhbGwKPj4+Pj4+PiBl ZmZvcnRzIHRvIHVzZSBzbWFsbC1USFAuCj4+Pj4+Pgo+Pj4+Pj4gSSdsbCBhZG1pdCB0byBub3Qg a25vd2luZyBhIGh1Z2UgYW1vdW50IGFib3V0IHVzZXIgc3BhY2UgYWxsb2NhdG9ycy4gQnV0IEkg d2lsbAo+Pj4+Pj4gc2F5IHRoYXQgYXMgY3VycmVudGx5IGRlZmluZWQsIHRoZSBzbWFsbC1zaXpl ZCBUSFAgaW50ZXJmYWNlIHRvIHVzZXIgc3BhY2UKPj4+Pj4+IGFsbG93cyBhIHN5c2FkbWluIHRv IHNwZWNpZmljYWxseSBlbmFibGUgdGhlIHNldCBvZiBzaXplcyB0aGF0IHRoZXkgd2FudDsgc28g YQo+Pj4+Pj4gc2luZ2xlIHNpemUgY2FuIGJlIGVuYWJsZWQuIEknbSBkaWxpYmVyYXRlbHkgcHVu dGluZyB0aGF0IGRlY2lzaW9uIGF3YXkgZnJvbSB0aGUKPj4+Pj4+IGtlcm5lbCBmb3Igbm93Lgo+ Pj4+Pgo+Pj4+PiBCYXNpY2FsbHksIHVzZXJzcGFjZSBoZWFwIGxpYnJhcnkgaGFzIGEgUEFHRVNJ WkUgc2V0dGluZyBhbmQgYWxsb3dzIHVzZXJzCj4+Pj4+IHRvIGFsbG9jYXRlL2ZyZWUgYWxsIGtp bmRzIG9mIHNtYWxsIG9iamVjdHMgc3VjaCBhcyAxNiwzMiw2NCwxMjgsMjU2LDUxMiBldGMuCj4+ Pj4+IFRoZSBkZWZhdWx0IHNpemUgaXMgZm9yIHN1cmUgZXF1YWwgdG8gdGhlIGJhc2VwYWdlIFNJ WkUuIG9uY2Ugc29tZSBvYmplY3RzIGFyZQo+Pj4+PiBmcmVlZCBieSBmcmVlKCkgYW5kIGxpYmMg Z2V0IGEgZnJlZSAicGFnZSIsIHVzZXJzcGFjZSBoZWFwIGxpYnJhcmllcyBtaWdodCBmcmVlCj4+ Pj4+IHRoZSBQQUdFU0laRSBwYWdlIHRvIGtlcm5lbCBieSB0aGluZ3MgbGlrZSBNQURWX0RPTlRO RUVELCB0aGVuIHphcF9wdGVfcmFuZ2UoKS4KPj4+Pj4gaXQgaXMgcXVpdGUgc2ltaWxhciB3aXRo IGtlcm5lbCBzbGFiLgo+Pj4+Pgo+Pj4+PiBzbyBpbWFnaW5lIHdlIGhhdmUgc21hbGwtVEhQIG5v dywgYnV0IHVzZXJzcGFjZSBsaWJyYXJpZXMgaGF2ZSAqTk8qCj4+Pj4+IGlkZWEgYXQgYWxsLCAg c28gaXQgY2FuIGZyZXF1ZW50bHkgY2F1c2UgdW5mb2xkaW5nLgo+Pj4+Pgo+Pj4+Pj4KPj4+Pj4+ IEZXSVcsIE15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgU3BlZWRvbWV0ZXIvSmF2YVNjcmlwdCB1c2Ug Y2FzZSBpcyB0aGF0IHBlcmZvcm1hbmNlCj4+Pj4+PiBpcyBhIGxpdHRsZSBiaXQgYmV0dGVyIHdo ZW4gZW5hYmxpbmcgNjQrMzIrMTZLIHZzIGp1c3QgNjRLIFRIUC4KPj4+Pj4+Cj4+Pj4+PiBGdW5j dGlvbmFsbHksIGl0IHdpbGwgbm90IG1hdHRlciBpZiB0aGUgYWxsb2NhdG9yIGlzIG5vdCBlbmxp Z2h0ZW5lZCBmb3IgdGhlIFRIUAo+Pj4+Pj4gc2l6ZTsgaXQgY2FuIGNvbnRpbnVlIHRvIGZyZWUs IGFuZCBpZiBhIHBhcnRpYWwgZm9saW8gaXMgdW5tYXBwZWQgaXQgaXMgcHV0IG9uCj4+Pj4+PiB0 aGUgZGVmZXJyZWQgc3BsaXQgbGlzdCwgdGhlbiB1bmRlciBtZW1vcnkgcHJlc3N1cmUgaXQgaXMg c3BsaXQgYW5kIHRoZSB1bnVzZWQKPj4+Pj4+IHBhZ2VzIGFyZSByZWNsYWltZWQuIEkgZ3Vlc3Mg dGhpcyBpcyB0aGUgYml0IHlvdSBhcmUgY29uY2VybmVkIGFib3V0IGhhdmluZyBhCj4gCj4+Pj4+ PiBwZXJmb3JtYW5jZSBpbXBhY3Q/Cj4+Pj4+Cj4+Pj4+IHJpZ2h0LiBJZiB0aGlzIGlzIGhhcHBl bmluZyBvbiB0aGUgbWFqb3JpdHkgb2Ygc21hbGwtVEhQIGZvbGlvcywgd2UKPj4+Pj4gZG9uJ3Qg aGF2ZSBwZXJmb3JtYW5jZQo+Pj4+PiBpbXByb3ZlbWVudCwgYW5kIHByb2JhYmx5IHJlZ3Jlc3Np b24gaW5zdGVhZC4gVGhpcyBpcyByZWFsbHkgdHJ1ZSBvbgo+Pj4+PiByZWFsIHdvcmtsb2FkcyEh Cj4+Pj4+Cj4+Pj4+IFNvIHRoYXQgaXMgd2h5IHdlIHJlYWxseSBsb3ZlIGEgcGVyLVZNQSBoaW50 IHRvIGVuYWJsZSBzbWFsbC1USFAgYnV0Cj4+Pj4+IG9idmlvdXNseSB5b3UKPj4+Pj4gaGF2ZSBh bHJlYWR5IHN1cHBvcnRlZCBpdCBub3cgYnkKPj4+Pj4gbW06IHRocDogSW50cm9kdWNlIHBlci1z aXplIHRocCBzeXNmcyBpbnRlcmZhY2UKPj4+Pj4gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGlu dXgtbW0vMjAyMzExMjIxNjI5NTAuMzg1NDg5Ny00LXJ5YW4ucm9iZXJ0c0Bhcm0uY29tLwo+Pj4+ Pgo+Pj4+PiB3ZSBjYW4gdXNlIE1BRFZJU0UgcmF0aGVyIHRoYW4gQUxXQVlTIGFuZCBzZXQgZml4 ZWQgc2l6ZSBsaWtlIDY0S0IsIHNvIHVzZXJzcGFjZQo+Pj4+PiBjYW4gc2V0IHRoZSBWTUEgZmxh ZyB3aGVuIGl0IGlzIHF1aXRlIHN1cmUgdGhpcyBWTUEgaXMgd29ya2luZyB3aXRoCj4+Pj4+IHRo ZSBhbGlnbm1lbnQKPj4+Pj4gb2YgNjRLQj8KPj4+Pgo+Pj4+IFllcywgdGhhdCBhbGwgZXhpc3Rz IGluIHRoZSBzZXJpZXMgdG9kYXkuIFdlIGhhdmUgYWxzbyBkaXNjdXNzZWQgdGhlIHBvc3NpYmls aXR5Cj4+Pj4gb2YgYWRkaW5nIGEgbmV3IG1hZHZpc2VfcHJvY2VzcygpIGNhbGwgdGhhdCB3b3Vs ZCB0YWtlIHRoZSBzZXQgb2YgVEhQIHNpemVzIHRoYXQKPj4+PiBzaG91bGQgYmUgY29uc2lkZXJl ZC4gVGhlbiB5b3UgY2FuIHNldCBkaWZmZXJlbnQgVk1BcyB0byB1c2UgZGlmZmVyZW50IHNpemVz Owo+Pj4+IHRoZSBwbGFuIHdhcyB0byBsYXllciB0aGF0IG9uIHRvcCBpZi93aGVuIGEgd29ya2xv YWQgd2FzIGlkZW50aWZpZWQuIFNvdW5kcyBsaWtlCj4+Pj4geW91IG1pZ2h0IGJlIGFibGUgdG8g aGVscCB0aGVyZT8KPj4+Cj4+PiBpJ20gbm90IHF1aXRlIHN1cmUgYXMgb24gcGhvbmVzLCB3ZSBh cmUgdXNpbmcgZml4ZWQtc2l6ZSBDT05UUFRFLiBzbyB3ZSBhc2sKPj4+IGZvciBlaXRoZXIgNjRL QiBvciA0S0IuIElmIHdlIHRoaW5rIG9uZSBWTUEgaXMgYWxsIGdvb2QgdG8gdXNlIENPTlRQVEUs IHdlCj4+PiBzZXQgYSBmbGFnIGluIHRoaXMgVk1BIGFuZCB0cnkgdG8gYWxsb2NhdGUgNjRLQi4K Pj4KPj4gV2hlbiB5b3Ugc2F5ICJ3ZSBzZXQgYSBmbGFnIiBkbyB5b3UgbWVhbiB1c2VyIHNwYWNl PyBPciBpcyB0aGVyZSBzb21lIGhldXJpc3RpYwo+PiBpbiB0aGUga2VybmVsPwo+IAo+IHdlIGFy ZSB1c2luZyBhIGZpZWxkIGV4dGVuZGVkIGJ5IHRoZSBhbmRyb2lkIGtlcm5lbCBpbiB2bWEgc3Ry dWN0IHRvCj4gbWFyayB0aGlzIHZtYQo+IGlzIGFsbCBnb29kIHRvIHVzZSBDT05UUFRFLiBXaXRo IHRoZSB1cHN0cmVhbSBzb2x1dGlvbiB5b3UgYXJlIHByb3ZpZGluZywgd2UgY2FuCj4gcmVtb3Zl IHRoaXMgZGlydHkgY29kZVsxXS4KPiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2NocF9hbm9u eW1vdXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4gewo+ICAgICAgICAgICAgIHJldHVy biB2bWEtPmFuZHJvaWRfa2FiaV9yZXNlcnZlZDIgPT0gVEhQX1NXQVBfUFJJT19NQUdJQzsKPiB9 CgpTb3JyeSBJJ20gbm90IHN1cmUgSSd2ZSB1bmRlcnN0b29kOyBob3cgZG9lcyB0aGF0IGZsYWcg Z2V0IHNldCBpbiB0aGUgZmlyc3QKcGxhY2U/IERvZXMgdXNlciBzcGFjZSB0ZWxsIHRoZSBrZXJu ZWwgKHZpYSBlLmcuIG1hZHZpc2UoKSkgb3IgZG9lcyB0aGUga2VybmVsCnNldCBpdCBiYXNlZCBv biBkZXZpbmVkIGhldXJpc3RpY3M/Cgo+IAo+IFsxXSBodHRwczovL2dpdGh1Yi5jb20vT25lUGx1 c09TUy9hbmRyb2lkX2tlcm5lbF9vbmVwbHVzX3NtODU1MC9ibG9iL29uZXBsdXMvc204NTUwX3Vf MTQuMC4wX29uZXBsdXMxMS9pbmNsdWRlL2xpbnV4L21tLmgjTDQwMzEKPiAKPiBUaGFua3MKPiBC YXJyeQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LWFybS1rZXJuZWwK