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 X-Spam-Level: X-Spam-Status: No, score=-5.1 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7946AC4332D for ; Thu, 19 Mar 2020 22:56:55 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3C4E42072D for ; Thu, 19 Mar 2020 22:56:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=nvidia.com header.i=@nvidia.com header.b="L3MldKoL" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3C4E42072D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nvidia.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id CE98F6EAA3; Thu, 19 Mar 2020 22:56:54 +0000 (UTC) Received: from hqnvemgate26.nvidia.com (hqnvemgate26.nvidia.com [216.228.121.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0FA876EAA3; Thu, 19 Mar 2020 22:56:54 +0000 (UTC) Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate26.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Thu, 19 Mar 2020 15:56:40 -0700 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Thu, 19 Mar 2020 15:56:53 -0700 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Thu, 19 Mar 2020 15:56:53 -0700 Received: from rcampbell-dev.nvidia.com (10.124.1.5) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Thu, 19 Mar 2020 22:56:52 +0000 Subject: Re: [PATCH 3/4] mm: simplify device private page handling in hmm_range_fault To: Jason Gunthorpe References: <20200316193216.920734-1-hch@lst.de> <20200316193216.920734-4-hch@lst.de> <7256f88d-809e-4aba-3c46-a223bd8cc521@nvidia.com> <20200317121536.GQ20941@ziepe.ca> <20200317122445.GA11662@lst.de> <20200317122813.GA11866@lst.de> <20200317124755.GR20941@ziepe.ca> <20200317125955.GA12847@lst.de> <24fca825-3b0f-188f-bcf2-fadcf3a9f05a@nvidia.com> <20200319181716.GK20941@ziepe.ca> X-Nvconfidentiality: public From: Ralph Campbell Message-ID: <89e33770-a0ab-e1ec-d5e5-535edefd3fd3@nvidia.com> Date: Thu, 19 Mar 2020 15:56:50 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 MIME-Version: 1.0 In-Reply-To: <20200319181716.GK20941@ziepe.ca> X-Originating-IP: [10.124.1.5] X-ClientProxiedBy: HQMAIL101.nvidia.com (172.20.187.10) To HQMAIL107.nvidia.com (172.20.187.13) Content-Language: en-US DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1584658600; bh=jWtYAqOwm8Is3zfNg8T2VUHSQAGEqH4bFJvlP/cbAdI=; h=X-PGP-Universal:Subject:To:CC:References:X-Nvconfidentiality:From: Message-ID:Date:User-Agent:MIME-Version:In-Reply-To: X-Originating-IP:X-ClientProxiedBy:Content-Type:Content-Language: Content-Transfer-Encoding; b=L3MldKoLb909Swj7le7BsPWM7W3wCPpqBfO75tYkz1+3aY+gwrDTpWPV9/BIdjVPP pDEzmgs8Xhr2NknjBndQI6t7WvVH2wR+AmNP64NVlZtuwhk/ZA+02d7YC/MZnlhHVx f4yzL44qRt1nHIOL4x3hlnC+q9xO7FVsICjeb+JZ+4NYnkWoSGUvVojDZogrUMmcqW sOqshFPd2dtO3QVv+8PaoNBXQJGCfgJ1qcA/f46dca/2qWJnEu8KxnHPPXOnbW+lVe JHM+6NPibxOMeicwFjnfrrhrzOFNFdxzl4UbFuxSWOerjmWAIHl4faVbN20E9Ycrhl +ww/Q/4iWkKLQ== X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: amd-gfx@lists.freedesktop.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, kvm-ppc@vger.kernel.org, Christoph Hellwig , linux-mm@kvack.org, Jerome Glisse , Ben Skeggs , linux-kselftest@vger.kernel.org, Dan Williams , Bharata B Rao , =?UTF-8?Q?Christian_K=c3=b6nig?= Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" QWRkaW5nIGxpbnV4LWtzZWxmdGVzdEB2Z2VyLmtlcm5lbC5vcmcgZm9yIHRoZSB0ZXN0IGNvbmZp ZyBxdWVzdGlvbi4KCk9uIDMvMTkvMjAgMTE6MTcgQU0sIEphc29uIEd1bnRob3JwZSB3cm90ZToK PiBPbiBUdWUsIE1hciAxNywgMjAyMCBhdCAwNDoxNDozMVBNIC0wNzAwLCBSYWxwaCBDYW1wYmVs bCB3cm90ZToKPj4KPj4gT24gMy8xNy8yMCA1OjU5IEFNLCBDaHJpc3RvcGggSGVsbHdpZyB3cm90 ZToKPj4+IE9uIFR1ZSwgTWFyIDE3LCAyMDIwIGF0IDA5OjQ3OjU1QU0gLTAzMDAsIEphc29uIEd1 bnRob3JwZSB3cm90ZToKPj4+PiBJJ3ZlIGJlZW4gdXNpbmcgdjcgb2YgUmFscGgncyB0ZXN0ZXIg YW5kIGl0IGlzIHdvcmtpbmcgd2VsbCAtIGl0IGhhcwo+Pj4+IERFVklDRV9QUklWQVRFIHN1cHBv cnQgc28gSSB0aGluayBpdCBjYW4gdGVzdCB0aGlzIGZsb3cgdG9vLiBSYWxwaCBhcmUKPj4+PiB5 b3UgYWJsZT8KPj4+Pgo+Pj4+IFRoaXMgaHVuayBzZWVtcyB0cml2aWFsIGVub3VnaCB0byBtZSwg Y2FuIHdlIGluY2x1ZGUgaXQgbm93Pwo+Pj4KPj4+IEkgY2FuIHNlbmQgYSBzZXBhcmF0ZSBwYXRj aCBmb3IgaXQgb25jZSB0aGUgdGVzdGVyIGNvdmVycyBpdC4gIEkgZG9uJ3QKPj4+IHdhbnQgdG8g YWRkIGl0IHRvIHRoZSBvcmlnaW5hbCBwYXRjaCBhcyBpdCBpcyBhIHNpZ25pZmljYW50IGJlaGF2 aW9yCj4+PiBjaGFuZ2UgY29tcGFyZWQgdG8gdGhlIGV4aXN0aW5nIGNvZGUuCj4+Pgo+Pgo+PiBB dHRhY2hlZCBpcyBhbiB1cGRhdGVkIHZlcnNpb24gb2YgbXkgSE1NIHRlc3RzIGJhc2VkIG9uIGxp bnV4LTUuNi4wLXJjNi4KPj4gSSByYW4gdGhpcyBPSyB3aXRoIEphc29uJ3MgOCsxIEhNTSBwYXRj aGVzLCBDaHJpc3RvcGgncyAxLTUgbWlzYyBITU0gY2xlYW4gdXBzLAo+PiBhbmQgQ2hyaXN0b3Bo J3MgMS00IGRldmljZSBwcml2YXRlIHBhZ2UgY2hhbmdlcyBhcHBsaWVkLgo+IAo+IEknZCBsaWtl IHRvIGdldCB0aGlzIHRvIG1lcmdhYmxlLCBpdCBsb29rcyBwcmV0dHkgZ29vZCBub3csIGJ1dCBJ IGhhdmUKPiBubyBpZGVhIGFib3V0IHNlbGZ0ZXN0cyAtIGFuZCBJJ20gc3RydWdnbGluZyB0byBl dmVuIGNvbXBpbGUgdGhlIHRvb2xzCj4gZGlyCj4gCj4+IGRpZmYgLS1naXQgYS9saWIvS2NvbmZp Zy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCj4+IGluZGV4IDY5ZGVmNGE5ZGYwMC4uNGQyMmNl Nzg3OWE3IDEwMDY0NAo+PiArKysgYi9saWIvS2NvbmZpZy5kZWJ1Zwo+PiBAQCAtMjE2Miw2ICsy MTYyLDE4IEBAIGNvbmZpZyBURVNUX01FTUlOSVQKPj4gICAKPj4gICAJICBJZiB1bnN1cmUsIHNh eSBOLgo+PiAgIAo+PiArY29uZmlnIFRFU1RfSE1NCj4+ICsJdHJpc3RhdGUgIlRlc3QgSE1NIChI ZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KSIKPj4gKwlkZXBlbmRzIG9uIERFVklDRV9Q UklWQVRFCj4+ICsJc2VsZWN0IEhNTV9NSVJST1IKPj4gKyAgICAgICAgc2VsZWN0IE1NVV9OT1RJ RklFUgo+IAo+IGV4dHJhIHNwYWNlcwoKV2lsbCBmaXggaW4gdjguCgo+IEluIGdlbmVyYWwgSSB3 b25kZXIgaWYgaXQgZXZlbiBtYWtlcyBzZW5zZSB0aGF0IERFVklDRV9QUklWQVRFIGlzIHVzZXIK PiBzZWxlY3RhYmxlPwoKU2hvdWxkIHRlc3RzIGVuYWJsZSB0aGUgZmVhdHVyZSBvciB0aGUgZmVh dHVyZSBlbmFibGUgdGhlIHRlc3Q/CklNSE8sIGlmIHRoZSBmZWF0dXJlIGlzIGJlaW5nIGNvbXBp bGVkIGludG8gdGhlIGtlcm5lbCwgdGhhdCBzaG91bGQKZW5hYmxlIHRoZSBtZW51IGl0ZW0gZm9y IHRoZSB0ZXN0LiBJZiB0aGUgZmVhdHVyZSBpc24ndCBzZWxlY3RlZCwKbm8gbmVlZCB0byB0ZXN0 IGl0IDotKQoKPj4gK3N0YXRpYyBpbnQgZG1pcnJvcl9mb3BzX29wZW4oc3RydWN0IGlub2RlICpp bm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCj4+ICt7Cj4+ICsJc3RydWN0IGNkZXYgKmNkZXYgPSBp bm9kZS0+aV9jZGV2Owo+PiArCXN0cnVjdCBkbWlycm9yICpkbWlycm9yOwo+PiArCWludCByZXQ7 Cj4+ICsKPj4gKwkvKiBNaXJyb3IgdGhpcyBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UgKi8KPj4gKwlk bWlycm9yID0ga3phbGxvYyhzaXplb2YoKmRtaXJyb3IpLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAo ZG1pcnJvciA9PSBOVUxMKQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCWRtaXJyb3It Pm1kZXZpY2UgPSBjb250YWluZXJfb2YoY2Rldiwgc3RydWN0IGRtaXJyb3JfZGV2aWNlLCBjZGV2 aWNlKTsKPj4gKwltdXRleF9pbml0KCZkbWlycm9yLT5tdXRleCk7Cj4+ICsJeGFfaW5pdCgmZG1p cnJvci0+cHQpOwo+PiArCj4+ICsJcmV0ID0gbW11X2ludGVydmFsX25vdGlmaWVyX2luc2VydCgm ZG1pcnJvci0+bm90aWZpZXIsIGN1cnJlbnQtPm1tLAo+PiArCQkJCTAsIFVMT05HX01BWCAmIFBB R0VfTUFTSywgJmRtaXJyb3JfbWluX29wcyk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlrZnJlZShk bWlycm9yKTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBQYWlycyB3aXRo IHRoZSBtbWRyb3AoKSBpbiBkbWlycm9yX2ZvcHNfcmVsZWFzZSgpLiAqLwo+PiArCW1tZ3JhYihj dXJyZW50LT5tbSk7Cj4+ICsJZG1pcnJvci0+bW0gPSBjdXJyZW50LT5tbTsKPiAKPiBUaGUgbm90 aWZpZXIgaG9sZHMgYSBtbWdyYWIsIG5vIG5lZWQgZm9yIGFub3RoZXIgb25lCgpPSy4gSSdsbCBy ZXBsYWNlIGRtaXJyb3ItPm1tIHdpdGggZG1pcnJvci0+bm90aWZpZXIubW0uCgo+PiArCS8qIE9u bHkgdGhlIGZpcnN0IG9wZW4gcmVnaXN0ZXJzIHRoZSBhZGRyZXNzIHNwYWNlLiAqLwo+PiArCWZp bHAtPnByaXZhdGVfZGF0YSA9IGRtaXJyb3I7Cj4gCj4gTm90IHN1cmUgd2hhdCB0aGlzIGNvbW1l bnQgbWVhbnMKCkknbGwgY2hhbmdlIHRoZSBjb21tZW50IHRvOgoJLyoKICAgICAgICAgICogVGhl IGZpcnN0IG9wZW4gb2YgdGhlIGRldmljZSBjaGFyYWN0ZXIgZmlsZSByZWdpc3RlcnMgdGhlIGFk ZHJlc3MKICAgICAgICAgICogc3BhY2Ugb2YgdGhlIHByb2Nlc3MgZG9pbmcgdGhlIG9wZW4oKSBz eXN0ZW0gY2FsbCB3aXRoIHRoZSBkZXZpY2UuCiAgICAgICAgICAqIFN1YnNlcXVlbnQgZmlsZSBv cGVucyBieSBvdGhlciBwcm9jZXNzZXMgd2lsbCBoYXZlIGFjY2VzcyB0byB0aGUKICAgICAgICAg ICogZmlyc3QgcHJvY2VzcycgYWRkcmVzcyBzcGFjZS4KICAgICAgICAgICovCgo+PiArc3RhdGlj IGlubGluZSBzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKmRtaXJyb3JfcGFnZV90b19kZXZpY2Uoc3Ry dWN0IHBhZ2UgKnBhZ2UpCj4+ICsKPj4gK3sKPj4gKwlzdHJ1Y3QgZG1pcnJvcl9jaHVuayAqZGV2 bWVtOwo+PiArCj4+ICsJZGV2bWVtID0gY29udGFpbmVyX29mKHBhZ2UtPnBnbWFwLCBzdHJ1Y3Qg ZG1pcnJvcl9jaHVuaywgcGFnZW1hcCk7Cj4+ICsJcmV0dXJuIGRldm1lbS0+bWRldmljZTsKPj4g K30KPiAKPiBleHRyYSBkZXZtZW0gdmFyIGlzIG5vdCByZWFsbHkgbmVlZGVkCgpJJ2xsIGNoYW5n ZSB0aGlzIHRvOgoJcmV0dXJuIGNvbnRhaW5lcl9vZihwYWdlLT5wZ21hcCwgc3RydWN0IGRtaXJy b3JfY2h1bmssCgkJCSAgICBwYWdlbWFwKS0+bWRldmljZTsKCj4+ICsKPj4gK3N0YXRpYyBib29s IGRtaXJyb3JfZGV2aWNlX2lzX21pbmUoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLAo+ PiArCQkJCSAgIHN0cnVjdCBwYWdlICpwYWdlKQo+PiArewo+PiArCWlmICghaXNfem9uZV9kZXZp Y2VfcGFnZShwYWdlKSkKPj4gKwkJcmV0dXJuIGZhbHNlOwo+PiArCXJldHVybiBwYWdlLT5wZ21h cC0+b3BzID09ICZkbWlycm9yX2Rldm1lbV9vcHMgJiYKPj4gKwkJZG1pcnJvcl9wYWdlX3RvX2Rl dmljZShwYWdlKSA9PSBtZGV2aWNlOwo+PiArfQo+IAo+IFVzZSBuZXcgb3duZXIgc3R1ZmYsIHJp Z2h0PyBBY3R1YWxseSB0aGlzIGlzIHJlZHVuYW50IG5vdywgdGhlIGNoZWNrCj4gc2hvdWxkIGJl IGp1c3QgV0FSTl9PTiBwYWdlb3duZXIgIT0gc2VsZiBvd25lcgoKSSdsbCBjbGVhbiB0aGlzIHVw LiBkbWlycm9yX2RldmljZV9pc19taW5lKCkgaXNuJ3QgbmVlZGVkIG5vdy4KCj4+ICtzdGF0aWMg aW50IGRtaXJyb3JfZG9fZmF1bHQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1f cmFuZ2UgKnJhbmdlKQo+PiArewo+PiArCXVpbnQ2NF90ICpwZm5zID0gcmFuZ2UtPnBmbnM7Cj4+ ICsJdW5zaWduZWQgbG9uZyBwZm47Cj4+ICsKPj4gKwlmb3IgKHBmbiA9IChyYW5nZS0+c3RhcnQg Pj4gUEFHRV9TSElGVCk7Cj4+ICsJICAgICBwZm4gPCAocmFuZ2UtPmVuZCA+PiBQQUdFX1NISUZU KTsKPj4gKwkgICAgIHBmbisrLCBwZm5zKyspIHsKPj4gKwkJc3RydWN0IHBhZ2UgKnBhZ2U7Cj4+ ICsJCXZvaWQgKmVudHJ5Owo+PiArCj4+ICsJCS8qCj4+ICsJCSAqIEhNTV9QRk5fRVJST1IgaXMg cmV0dXJuZWQgaWYgaXQgaXMgYWNjZXNzaW5nIGludmFsaWQgbWVtb3J5Cj4+ICsJCSAqIGVpdGhl ciBiZWNhdXNlIG9mIG1lbW9yeSBlcnJvciAoaGFyZHdhcmUgZGV0ZWN0ZWQgbWVtb3J5Cj4+ICsJ CSAqIGNvcnJ1cHRpb24pIG9yIG1vcmUgbGlrZWx5IGJlY2F1c2Ugb2YgdHJ1bmNhdGUgb24gbW1h cAo+PiArCQkgKiBmaWxlLgo+PiArCQkgKi8KPj4gKwkJaWYgKCpwZm5zID09IHJhbmdlLT52YWx1 ZXNbSE1NX1BGTl9FUlJPUl0pCj4+ICsJCQlyZXR1cm4gLUVGQVVMVDsKPiAKPiBVbmxlc3MgdGhh dCBzbmFwc2hvdCBpcyB1c2UgaG1tX3JhbmdlX2ZhdWx0KCkgbmV2ZXIgcmV0dXJucyBzdWNjZXNz Cj4gYW5kIHNldHMgUEZOX0VSUk9SLCBzbyB0aGlzIHNob3VsZCBiZSBhIFdBUk5fT04KPiAKPj4g KwkJaWYgKCEoKnBmbnMgJiByYW5nZS0+ZmxhZ3NbSE1NX1BGTl9WQUxJRF0pKQo+PiArCQkJcmV0 dXJuIC1FRkFVTFQ7Cj4gCj4gU2FtZSB3aXRoIHZhbGlkLgo+IAo+PiArCQlwYWdlID0gaG1tX2Rl dmljZV9lbnRyeV90b19wYWdlKHJhbmdlLCAqcGZucyk7Cj4+ICsJCS8qIFdlIGFza2VkIGZvciBw YWdlcyB0byBiZSBwb3B1bGF0ZWQgYnV0IGNoZWNrIGFueXdheS4gKi8KPj4gKwkJaWYgKCFwYWdl KQo+PiArCQkJcmV0dXJuIC1FRkFVTFQ7Cj4gCj4gV0FSTl9PTgo+IAo+PiArCQlpZiAoaXNfem9u ZV9kZXZpY2VfcGFnZShwYWdlKSkgewo+PiArCQkJLyoKPj4gKwkJCSAqIFRPRE86IG5lZWQgYSB3 YXkgdG8gYXNrIEhNTSB0byBmYXVsdCBmb3JlaWduIHpvbmUKPj4gKwkJCSAqIGRldmljZSBwcml2 YXRlIHBhZ2VzLgo+PiArCQkJICovCj4+ICsJCQlpZiAoIWRtaXJyb3JfZGV2aWNlX2lzX21pbmUo ZG1pcnJvci0+bWRldmljZSwgcGFnZSkpCj4+ICsJCQkJY29udGludWU7Cj4gCj4gQWN0dWFsbHkg cmUKPiAKPj4gK3N0YXRpYyBib29sIGRtaXJyb3JfaW50ZXJ2YWxfaW52YWxpZGF0ZShzdHJ1Y3Qg bW11X2ludGVydmFsX25vdGlmaWVyICptbmksCj4+ICsJCQkJY29uc3Qgc3RydWN0IG1tdV9ub3Rp Zmllcl9yYW5nZSAqcmFuZ2UsCj4+ICsJCQkJdW5zaWduZWQgbG9uZyBjdXJfc2VxKQo+PiArewo+ PiArCXN0cnVjdCBkbWlycm9yICpkbWlycm9yID0gY29udGFpbmVyX29mKG1uaSwgc3RydWN0IGRt aXJyb3IsIG5vdGlmaWVyKTsKPj4gKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGRtaXJyb3ItPm1t Owo+PiArCj4+ICsJLyoKPj4gKwkgKiBJZiB0aGUgcHJvY2VzcyBkb2Vzbid0IGV4aXN0LCB3ZSBk b24ndCBuZWVkIHRvIGludmFsaWRhdGUgdGhlCj4+ICsJICogZGV2aWNlIHBhZ2UgdGFibGUgc2lu Y2UgdGhlIGFkZHJlc3Mgc3BhY2Ugd2lsbCBiZSB0b3JuIGRvd24uCj4+ICsJICovCj4+ICsJaWYg KCFtbWdldF9ub3RfemVybyhtbSkpCj4+ICsJCXJldHVybiB0cnVlOwo+IAo+IFdoeT8gRG9uJ3Qg dGhlIG5vdGlmaWVycyBwcm92aWRlIGZvciB0aGlzIGFscmVhZHkuCj4gCj4gbW1nZXRfbm90X3pl cm8oKSBpcyByZXF1aXJlZCBiZWZvcmUgY2FsbGluZyBobW1fcmFuZ2VfZmF1bHQoKSB0aG91Z2gK ClRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0gSSBkb24ndCBxdWl0ZSB1bmRlcnN0 YW5kLgpJZiB5b3UgY2hhbmdlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZtL2htbS10ZXN0cy5j IGxpbmUgODY4IHRvCglBU1NFUlRfRVEocmV0LCAtMSk7ClRoZW4gdGhlIHRlc3Qgd2lsbCBhYm9y dCwgY29yZSBkdW1wLCBhbmQgY2F1c2UgdHdvIHByb2JsZW1zLAoxKSB0aGUgbWlncmF0ZWQgcGFn ZSB3aWxsIGJlIGZhdWx0ZWQgYmFjayB0byBzeXN0ZW0gbWVtb3J5IGluIG9yZGVyIHRvIHdyaXRl CiAgICBpdCB0byB0aGUgY29yZSBkdW1wLiBUaGlzIHRyaWdnZXJzIGxvY2tkZXBfYXNzZXJ0X2hl bGQoJndhbGsubW0tPm1tYXBfc2VtKQogICAgaW4gd2Fsa19wYWdlX3JhbmdlKCkuCjIpIFRoZW4g YWZ0ZXIgYSBkZWxheSwgSSBnZXQ6ClsgIDEzNy44NTI5ODZdIHJjdTogSU5GTzogcmN1X3NjaGVk IHNlbGYtZGV0ZWN0ZWQgc3RhbGwgb24gQ1BVClsgIDEzNy44NTg1OTRdIHJjdTogCTAtLi4uLjog KDI2MDAwIHRpY2tzIHRoaXMgR1ApIGlkbGU9NjllLzEvMHg0MDAwMDAwMDAwMDAwMDAyIHNvZnRp cnE9MzQ1NTUvMzQ1NTUgZnFzPTY0OTcKWyAgMTM3Ljg2ODQzOV0gCSh0PTI2MDA3IGppZmZpZXMg Zz0xNDY1MyBxPTI3MSkKWyAgMTM3Ljg3MjcxMV0gTk1JIGJhY2t0cmFjZSBmb3IgY3B1IDAKWyAg MTM3Ljg3NjIwNV0gQ1BVOiAwIFBJRDogNjIyOCBDb21tOiBobW0tdGVzdHMgTm90IHRhaW50ZWQg NS42LjAtcmM2KyAjMgpbICAxMzcuODgyNzMwXSBIYXJkd2FyZSBuYW1lOiBTeXN0ZW0gbWFudWZh Y3R1cmVyIFN5c3RlbSBQcm9kdWN0IE5hbWUvU0FCRVJUT09USCBYNzksIEJJT1MgNDMwMiAwOC8y OS8yMDEzClsgIDEzNy44OTIxMTVdIENhbGwgVHJhY2U6ClsgIDEzNy44OTQ1NzBdICA8SVJRPgpb ICAxMzcuODk2NTkzXSAgZHVtcF9zdGFjaysweDk3LzB4ZTAKWyAgMTM3Ljg5OTkyMF0gIG5taV9j cHVfYmFja3RyYWNlLmNvbGQrMHgxNC8weDY4ClsgIDEzNy45MDQyODddICA/IGxhcGljX2Nhbl91 bnBsdWdfY3B1LmNvbGQrMHgzOS8weDM5ClsgIDEzNy45MDkwOTFdICBubWlfdHJpZ2dlcl9jcHVt YXNrX2JhY2t0cmFjZSsweGYxLzB4MTBlClsgIDEzNy45MTQxNTJdICByY3VfZHVtcF9jcHVfc3Rh Y2tzKzB4ZTIvMHgxMjUKWyAgMTM3LjkxODM0OF0gIHJjdV9zY2hlZF9jbG9ja19pcnEuY29sZCsw eDM5My8weDYxMApbICAxMzcuOTIzMDY5XSAgdXBkYXRlX3Byb2Nlc3NfdGltZXMrMHgyNC8weDUw ClsgIDEzNy45MjcyNjNdICB0aWNrX3NjaGVkX2hhbmRsZSsweDY4LzB4OTAKWyAgMTM3LjkzMTE5 Nl0gIHRpY2tfc2NoZWRfdGltZXIrMHgzOC8weGEwClsgIDEzNy45MzUwMzddICBfX2hydGltZXJf cnVuX3F1ZXVlcysweDFmOS8weDZjMApbICAxMzcuOTM5NDAzXSAgPyB0aWNrX3NjaGVkX2RvX3Rp bWVyKzB4OTAvMHg5MApbICAxMzcuOTQzNjgzXSAgPyBlbnF1ZXVlX2hydGltZXIrMHgxYTAvMHgx YTAKWyAgMTM3Ljk0Nzc5MF0gID8gcmVjYWxpYnJhdGVfY3B1X2toeisweDEwLzB4MTAKWyAgMTM3 Ljk1MjA2NF0gID8ga3RpbWVfZ2V0X3VwZGF0ZV9vZmZzZXRzX25vdysweGVkLzB4MWMwClsgIDEz Ny45NTcyMDldICBocnRpbWVyX2ludGVycnVwdCsweDFhNS8weDM0MApbICAxMzcuOTYxMzE1XSAg PyByY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQrMHhhMS8weGQwClsgIDEzNy45NjYwMzhdICBzbXBf YXBpY190aW1lcl9pbnRlcnJ1cHQrMHhiYi8weDMyMApbICAxMzcuOTcwNjY1XSAgYXBpY190aW1l cl9pbnRlcnJ1cHQrMHhmLzB4MjAKWyAgMTM3Ljk3NDc3MV0gIDwvSVJRPgpbICAxMzcuOTc2ODc2 XSBSSVA6IDAwMTA6eGFzX2xvYWQrMHg3LzB4ODAKWyAgMTM3Ljk4MDcxOF0gQ29kZTogODAgMmYg MWEgODMgYzYgMDUgZTkgOGQgN2IgMDEgMDEgZTggM2UgYjEgYjEgZmUgZTkgMDUgZmYgZmYgZmYg NjYgNjYgMmUgMGYgMWYgODQgMDAgMDAgMDAgMDAgMDAgMGYgMWYgMDAgNDEgNTYgNDEgNTUgNDEg NTQgNTUgPDQ4PiA4OSBmZCA1MyA0YyA4ZCA2ZCAxMCBlOCAzYyBmYyBmZiBmZiA0OSA4OSBjNCA0 YyA4OSBlMCA4MyBlMCAwMwpbICAxMzcuOTk5NDYxXSBSU1A6IDAwMTg6ZmZmZmM5MDAwMTVlNzdj OCBFRkxBR1M6IDAwMDAwMjQ2IE9SSUdfUkFYOiBmZmZmZmZmZmZmZmZmZjEzClsgIDEzOC4wMDcw MjhdIFJBWDogZmZmZjg4ODZlNTA4YzQwOCBSQlg6IDAwMDAwMDAwMDAwMDAwMDAgUkNYOiBmZmZm ZmZmZjgyNjI2Yzg5ClsgIDEzOC4wMTQxNTldIFJEWDogZGZmZmZjMDAwMDAwMDAwMCBSU0k6IDAw MDAwMDAwMDAwMDAwMDAgUkRJOiBmZmZmYzkwMDAxNWU3OGEwClsgIDEzOC4wMjEyOTNdIFJCUDog ZmZmZmM5MDAwMTVlNzhhMCBSMDg6IGZmZmZmZmZmODExNDYxYzQgUjA5OiBmZmZmZjUyMDAwMmJj ZjE3ClsgIDEzOC4wMjg0MjZdIFIxMDogZmZmZmY1MjAwMDJiY2YxNiBSMTE6IDAwMDAwMDAwMDAw MDAwMDMgUjEyOiAwMDAwMDAwMDAyNjA2ZDEwClsgIDEzOC4wMzU1NTddIFIxMzogZmZmZjg4ODZl NTA4YzQ0OCBSMTQ6IDAwMDAwMDAwMDAwMDAwMzEgUjE1OiBmZmZmZmZmZmEwNjU0NmEwClsgIDEz OC4wNDI3MDFdICA/IGRvX3Jhd19zcGluX2xvY2srMHgxMDQvMHgxZDAKWyAgMTM4LjA0Njg4OF0g ID8geGFzX3N0b3JlKzB4MTkvMHhhNjAKWyAgMTM4LjA1MDM5MF0gIHhhc19zdG9yZSsweDViMy8w eGE2MApbICAxMzguMDUzODA2XSAgPyByZWdpc3Rlcl9sb2NrX2NsYXNzKzB4ODYwLzB4ODYwClsg IDEzOC4wNTgyNjddICBfX3hhX2VyYXNlKzB4OTYvMHgxMTAKWyAgMTM4LjA2MTY3M10gID8geGFz X3N0b3JlKzB4YTYwLzB4YTYwClsgIDEzOC4wNjUyNjddICB4YV9lcmFzZSsweDE5LzB4MzAKWyAg MTM4LjA2ODQxOF0gIGRtaXJyb3JfaW50ZXJ2YWxfaW52YWxpZGF0ZSsweDdkLzB4YzAgW3Rlc3Rf aG1tXQpbICAxMzguMDc0MTc0XSAgX19tbXVfbm90aWZpZXJfcmVsZWFzZSsweDFhNi8weDM3MApb ICAxMzguMDc4NzE0XSAgPyBtbXVfbm90aWZpZXJfdW5yZWdpc3RlcisweDFlMC8weDFlMApbICAx MzguMDgzNTIwXSAgPyBsb2NrX2Rvd25ncmFkZSsweDM4MC8weDM4MApbICAxMzguMDg3NTM1XSAg PyB1cHJvYmVfY2xlYXJfc3RhdGUrMHgyZS8weDE1MApbICAxMzguMDkxODIzXSAgZXhpdF9tbWFw KzB4MjRkLzB4MmEwClsgIDEzOC4wOTUyMjldICA/IGRvX211bm1hcCsweDEwLzB4MTAKWyAgMTM4 LjA5ODYzNV0gID8gX194NjRfc3lzX2lvX3NldHVwKzB4MjAwLzB4MjAwClsgIDEzOC4xMDI5OTVd ICA/IF9fbXV0ZXhfdW5sb2NrX3Nsb3dwYXRoKzB4YjQvMHgzZjAKWyAgMTM4LjEwNzcwNF0gID8g d2FpdF9mb3JfY29tcGxldGlvbisweDI1MC8weDI1MApbICAxMzguMTEyMTU4XSAgPyBsb2NrX2Rv d25ncmFkZSsweDM4MC8weDM4MApbICAxMzguMTE2MTc2XSAgPyBjaGVja19mbGFncy5wYXJ0LjAr MHg4Mi8weDIxMApbICAxMzguMTIwNDYzXSAgbW1wdXQrMHhiNS8weDIxMApbICAxMzguMTIzNDQ0 XSAgZG9fZXhpdCsweDYwMi8weDE0YzAKWyAgMTM4LjEyNjc3Nl0gID8gbW1fdXBkYXRlX25leHRf b3duZXIrMHg0MDAvMHg0MDAKWyAgMTM4LjEzMTMyOV0gIGRvX2dyb3VwX2V4aXQrMHg4YS8weDE0 MApbICAxMzguMTM1MDA2XSAgZ2V0X3NpZ25hbCsweDI1Yi8weDEwODAKWyAgMTM4LjEzODYwNl0g IGRvX3NpZ25hbCsweDhjLzB4YTkwClsgIDEzOC4xNDE5MjhdICA/IF9yYXdfc3Bpbl91bmxvY2tf aXJxKzB4MjQvMHgzMApbICAxMzguMTQ2MjkyXSAgPyBtYXJrX2hlbGRfbG9ja3MrMHgyNC8weDkw ClsgIDEzOC4xNTAyMTldICA/IF9yYXdfc3Bpbl91bmxvY2tfaXJxKzB4MjQvMHgzMApbICAxMzgu MTU0NTgwXSAgPyBsb2NrZGVwX2hhcmRpcnFzX29uKzB4MTkwLzB4MjgwClsgIDEzOC4xNTkwMjZd ICA/IHNldHVwX3NpZ2NvbnRleHQrMHgyNjAvMHgyNjAKWyAgMTM4LjE2MzIxMF0gID8gc2lncHJv Y21hc2srMHgxMGIvMHgxNTAKWyAgMTM4LjE2Njk2NV0gID8gX194NjRfc3lzX3J0X3NpZ3N1c3Bl bmQrMHhlMC8weGUwClsgIDEzOC4xNzE1OTRdICA/IF9feDY0X3N5c19ydF9zaWdwcm9jbWFzaysw eGZiLzB4MTgwClsgIDEzOC4xNzYzOTRdICA/IF9faWEzMl9jb21wYXRfc3lzX3J0X3NpZ3Byb2Nt YXNrKzB4MTkwLzB4MTkwClsgIDEzOC4xODE5NjVdICA/IGVudHJ5X1NZU0NBTExfNjRfYWZ0ZXJf aHdmcmFtZSsweDNlLzB4YmUKWyAgMTM4LjE4NzE5Ml0gID8gZXhpdF90b191c2VybW9kZV9sb29w KzB4NjAvMHgxMDAKWyAgMTM4LjE5MTcyM10gID8gbWFya19oZWxkX2xvY2tzKzB4MjQvMHg5MApb ICAxMzguMTk1NjU2XSAgZXhpdF90b191c2VybW9kZV9sb29wKzB4ODUvMHgxMDAKWyAgMTM4LjIw MDAyM10gIGRvX3N5c2NhbGxfNjQrMHgyMGIvMHgyOTAKWyAgMTM4LjIwMzc4Ml0gIGVudHJ5X1NZ U0NBTExfNjRfYWZ0ZXJfaHdmcmFtZSsweDQ5LzB4YmUKWyAgMTM4LjIwODgzOV0gUklQOiAwMDMz OjB4N2YyZDM0OWYxNjI1ClsgIDEzOC4yMTI0MjBdIENvZGU6IGMyIGI4IGVhIDAwIDAwIDAwIDBm IDA1IDQ4IDNkIDAwIGYwIGZmIGZmIDc3IDNkIDQxIDg5IGMwIDQxIGJhIDA4IDAwIDAwIDAwIDMx IGQyIDRjIDg5IGNlIGJmIDAyIDAwIDAwIDAwIGI4IDBlIDAwIDAwIDAwIDBmIDA1IDw0OD4gOGIg ODQgMjQgMDggMDEgMDAgMDAgNjQgNDggMzMgMDQgMjUgMjggMDAgMDAgMDAgNzUgMjQgNDQgODkg YzAKWyAgMTM4LjIzMTE2M10gUlNQOiAwMDJiOjAwMDA3ZmZlODQyMjhjNjAgRUZMQUdTOiAwMDAw MDI0NiBPUklHX1JBWDogMDAwMDAwMDAwMDAwMDAwZQpbICAxMzguMjM4NzMxXSBSQVg6IDAwMDAw MDAwMDAwMDAwMDAgUkJYOiAwMDAwN2YyZDM0OWFkMDQwIFJDWDogMDAwMDdmMmQzNDlmMTYyNQpb ICAxMzguMjQ1ODYyXSBSRFg6IDAwMDAwMDAwMDAwMDAwMDAgUlNJOiAwMDAwN2ZmZTg0MjI4YzYw IFJESTogMDAwMDAwMDAwMDAwMDAwMgpbICAxMzguMjUyOTk3XSBSQlA6IDAwMDA3ZmZlODQyMjhl YzAgUjA4OiAwMDAwMDAwMDAwMDAwMDAwIFIwOTogMDAwMDdmZmU4NDIyOGM2MApbICAxMzguMjYw MTI3XSBSMTA6IDAwMDAwMDAwMDAwMDAwMDggUjExOiAwMDAwMDAwMDAwMDAwMjQ2IFIxMjogMDAw MDAwMDAwMDQwMTI0MApbICAxMzguMjY3MjYxXSBSMTM6IDAwMDA3ZmZlODQyMjkxOTAgUjE0OiAw MDAwMDAwMDAwMDAwMDAwIFIxNTogMDAwMDAwMDAwMDAwMDAwMApbICAxMzguMjc0NTU0XSByY3U6 IElORk86IHJjdV9zY2hlZCBkZXRlY3RlZCBleHBlZGl0ZWQgc3RhbGxzIG9uIENQVXMvdGFza3M6 IHsgMC0uLi4gfSAyNjQyOCBqaWZmaWVzIHM6IDI3NyByb290OiAweDEvLgpbICAxMzguMjg1MTY3 XSByY3U6IGJsb2NraW5nIHJjdV9ub2RlIHN0cnVjdHVyZXM6ClsgIDEzOC4yODk2NDFdIFRhc2sg ZHVtcCBmb3IgQ1BVIDA6ClsgIDEzOC4yOTI4OTBdIGhtbS10ZXN0cyAgICAgICBSICBydW5uaW5n IHRhc2sgICAgMjc1NjAgIDYyMjggICA2MjExIDB4ODAwMDQwMGEKWyAgMTM4LjMwMDAwMl0gQ2Fs bCBUcmFjZToKWyAgMTM4LjMwMjQ4Nl0gID8gY2hlY2tfY2hhaW5fa2V5KzB4MWQxLzB4MmMwClsg IDEzOC4zMDY2MjddICA/IF9fbG9ja19hY3F1aXJlKzB4NjFjLzB4MjgyMApbICAxMzguMzEwNzYw XSAgPyBtYXRjaF9oZWxkX2xvY2srMHgxYi8weDIzMApbICAxMzguMzE0ODAwXSAgPyBjaGVja19j aGFpbl9rZXkrMHgxZDEvMHgyYzAKWyAgMTM4LjMxODkzN10gID8gbG9ja19kb3duZ3JhZGUrMHgz ODAvMHgzODAKWyAgMTM4LjMyMzAwOF0gID8gbG9ja19hY3F1aXJlKzB4ZmYvMHgyMjAKWyAgMTM4 LjMyNjc5NV0gID8gc3RhY2tfZGVwb3Rfc2F2ZSsweDEzNy8weDQ1MApbICAxMzguMzMxMDI2XSAg PyBfcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUrMHgzZS8weDUwClsgIDEzOC4zMzYwMjZdICA/ IG1hcmtfaGVsZF9sb2NrcysweDI0LzB4OTAKWyAgMTM4LjM0MDAxMl0gID8gX3Jhd19zcGluX3Vu bG9ja19pcnFyZXN0b3JlKzB4M2UvMHg1MApbICAxMzguMzQ1MDIyXSAgPyBsb2NrZGVwX2hhcmRp cnFzX29uKzB4MTkwLzB4MjgwClsgIDEzOC4zNDk1MDRdICA/IHN0YWNrX2RlcG90X3NhdmUrMHgy NTMvMHg0NTAKWyAgMTM4LjM1MzczMV0gID8gY2hlY2tfY2hhaW5fa2V5KzB4MWQxLzB4MmMwClsg IDEzOC4zNTc4NzFdICA/IF9fbG9ja19hY3F1aXJlKzB4NjFjLzB4MjgyMApbICAxMzguMzYyMDMz XSAgPyBtYXRjaF9oZWxkX2xvY2srMHgxYi8weDIzMApbICAxMzguMzY2MDcwXSAgPyBjaGVja19j aGFpbl9rZXkrMHgxZDEvMHgyYzAKWyAgMTM4LjM3MDIwOV0gID8gbWFya19sb2NrKzB4YWMvMHg5 ZTAKWyAgMTM4LjM3MzczNF0gID8gbWFya19sb2NrKzB4YWMvMHg5ZTAKWyAgMTM4LjM3NzI2MV0g ID8gbWFya19sb2NrKzB4YWMvMHg5ZTAKWyAgMTM4LjM4MDc3Ml0gID8gbWFya19oZWxkX2xvY2tz KzB4NjUvMHg5MApbICAxMzguMzg0NzMwXSAgPyBtYXJrX2xvY2srMHhhYy8weDllMApbICAxMzgu Mzg4MjQ5XSAgPyB0cmFjZV9oYXJkaXJxc19vbl90aHVuaysweDFhLzB4MWMKWyAgMTM4LjM5Mjg5 NV0gID8gdHJhY2VfaGFyZGlycXNfb25fdGh1bmsrMHgxYS8weDFjClsgIDEzOC4zOTc1NDJdICA/ IGxvY2tkZXBfaGFyZGlycXNfb24rMHgxOTAvMHgyODAKWyAgMTM4LjQwMjAyOV0gID8gdHJhY2Vf aGFyZGlycXNfb25fdGh1bmsrMHgxYS8weDFjClsgIDEzOC40MDY2NzZdICA/IG1hcmtfbG9jaysw eGFjLzB4OWUwClsgIDEzOC40MTAyMDldICA/IGxvY2tfaXNfaGVsZF90eXBlKzB4MTEwLzB4MTQw ClsgIDEzOC40MTQ1MDldICA/IG1hcmtfaGVsZF9sb2NrcysweDY1LzB4OTAKWyAgMTM4LjQxODQ2 MV0gID8gbWF0Y2hfaGVsZF9sb2NrKzB4MWIvMHgyMzAKWyAgMTM4LjQyMjUwMF0gID8gbWF0Y2hf aGVsZF9sb2NrKzB4MWIvMHgyMzAKWyAgMTM4LjQyNjU1MV0gID8gX19sb2NrX2FjcXVpcmUrMHgx MWMzLzB4MjgyMApbICAxMzguNDMwNzczXSAgPyB4YXNfbG9hZCsweDY0LzB4ODAKWyAgMTM4LjQz NDEyNl0gID8geGFzX3N0b3JlKzB4YWMvMHhhNjAKWyAgMTM4LjQzNzY1Ml0gID8gcmVnaXN0ZXJf bG9ja19jbGFzcysweDg2MC8weDg2MApbICAxMzguNDQyMTQwXSAgPyBsb2NrX2Rvd25ncmFkZSsw eDM4MC8weDM4MApbICAxMzguNDQ2MTkzXSAgPyBfcmF3X3NwaW5fbG9jaysweDJjLzB4NDAKWyAg MTM4LjQ1MDA1OV0gID8gX3Jhd19zcGluX3VubG9jaysweDE3LzB4MzAKWyAgMTM4LjQ1NDEwMF0g ID8geGFfZXJhc2UrMHhlLzB4MzAKWyAgMTM4LjQ1NzM3MF0gID8gZG1pcnJvcl9pbnRlcnZhbF9p bnZhbGlkYXRlKzB4N2QvMHhjMCBbdGVzdF9obW1dClsgIDEzOC40NjMzMjVdICA/IF9fbW11X25v dGlmaWVyX3JlbGVhc2UrMHgxYTYvMHgzNzAKWyAgMTM4LjQ2ODA2NV0gID8gbW11X25vdGlmaWVy X3VucmVnaXN0ZXIrMHgxZTAvMHgxZTAKWyAgMTM4LjQ3Mjg5Nl0gID8gbG9ja19kb3duZ3JhZGUr MHgzODAvMHgzODAKWyAgMTM4LjQ3NjkzN10gID8gdXByb2JlX2NsZWFyX3N0YXRlKzB4MmUvMHgx NTAKWyAgMTM4LjQ4MTI1Ml0gID8gZXhpdF9tbWFwKzB4MjRkLzB4MmEwClsgIDEzOC40ODQ4NTld ICA/IGRvX211bm1hcCsweDEwLzB4MTAKWyAgMTM4LjQ4ODI5OF0gID8gX194NjRfc3lzX2lvX3Nl dHVwKzB4MjAwLzB4MjAwClsgIDEzOC40OTI2ODNdICA/IF9fbXV0ZXhfdW5sb2NrX3Nsb3dwYXRo KzB4YjQvMHgzZjAKWyAgMTM4LjQ5NzQxOF0gID8gd2FpdF9mb3JfY29tcGxldGlvbisweDI1MC8w eDI1MApbICAxMzguNTAxODk3XSAgPyBsb2NrX2Rvd25ncmFkZSsweDM4MC8weDM4MApbICAxMzgu NTA1OTQ0XSAgPyBjaGVja19mbGFncy5wYXJ0LjArMHg4Mi8weDIxMApbICAxMzguNTEwMjU0XSAg PyBtbXB1dCsweGI1LzB4MjEwClsgIDEzOC41MTM0MzVdICA/IGRvX2V4aXQrMHg2MDIvMHgxNGMw ClsgIDEzOC41MTY5NjddICA/IG1tX3VwZGF0ZV9uZXh0X293bmVyKzB4NDAwLzB4NDAwClsgIDEz OC41MjE1NDVdICA/IGRvX2dyb3VwX2V4aXQrMHg4YS8weDE0MApbICAxMzguNTI1NDIzXSAgPyBn ZXRfc2lnbmFsKzB4MjViLzB4MTA4MApbICAxMzguNTI5MjI1XSAgPyBkb19zaWduYWwrMHg4Yy8w eGE5MApbICAxMzguNTMyNzU1XSAgPyBfcmF3X3NwaW5fdW5sb2NrX2lycSsweDI0LzB4MzAKWyAg MTM4LjUzNzE0M10gID8gbWFya19oZWxkX2xvY2tzKzB4MjQvMHg5MApbICAxMzguNTQxMDk2XSAg PyBfcmF3X3NwaW5fdW5sb2NrX2lycSsweDI0LzB4MzAKWyAgMTM4LjU0NTQ5Ml0gID8gbG9ja2Rl cF9oYXJkaXJxc19vbisweDE5MC8weDI4MApbICAxMzguNTQ5OTcxXSAgPyBzZXR1cF9zaWdjb250 ZXh0KzB4MjYwLzB4MjYwClsgIDEzOC41NTQxOTBdICA/IHNpZ3Byb2NtYXNrKzB4MTBiLzB4MTUw ClsgIDEzOC41NTc5NjldICA/IF9feDY0X3N5c19ydF9zaWdzdXNwZW5kKzB4ZTAvMHhlMApbICAx MzguNTYyNjI3XSAgPyBfX3g2NF9zeXNfcnRfc2lncHJvY21hc2srMHhmYi8weDE4MApbICAxMzgu NTY3NDUyXSAgPyBfX2lhMzJfY29tcGF0X3N5c19ydF9zaWdwcm9jbWFzaysweDE5MC8weDE5MApb ICAxMzguNTczMDU3XSAgPyBlbnRyeV9TWVNDQUxMXzY0X2FmdGVyX2h3ZnJhbWUrMHgzZS8weGJl ClsgIDEzOC41NzgzMTFdICA/IGV4aXRfdG9fdXNlcm1vZGVfbG9vcCsweDYwLzB4MTAwClsgIDEz OC41ODI4NzVdICA/IG1hcmtfaGVsZF9sb2NrcysweDI0LzB4OTAKWyAgMTM4LjU4NjgzN10gID8g ZXhpdF90b191c2VybW9kZV9sb29wKzB4ODUvMHgxMDAKWyAgMTM4LjU5MTQwMF0gID8gZG9fc3lz Y2FsbF82NCsweDIwYi8weDI5MApbICAxMzguNTk1MzYwXSAgPyBlbnRyeV9TWVNDQUxMXzY0X2Fm dGVyX2h3ZnJhbWUrMHg0OS8weGJlCi4vdGVzdF9obW0uc2g6IGxpbmUgNTg6ICA2MjExIEFsYXJt IGNsb2NrICAgICAgICAgICAgIC4vaG1tLXRlc3RzCgoKPj4gK3N0YXRpYyBpbnQgZG1pcnJvcl9m YXVsdChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCwKPj4gKwkJ CSB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgbW1fc3Ry dWN0ICptbSA9IGRtaXJyb3ItPm1tOwo+PiArCXVuc2lnbmVkIGxvbmcgYWRkcjsKPj4gKwl1aW50 NjRfdCBwZm5zWzY0XTsKPj4gKwlzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0gewo+PiArCQkubm90 aWZpZXIgPSAmZG1pcnJvci0+bm90aWZpZXIsCj4+ICsJCS5wZm5zID0gcGZucywKPj4gKwkJLmZs YWdzID0gZG1pcnJvcl9obW1fZmxhZ3MsCj4+ICsJCS52YWx1ZXMgPSBkbWlycm9yX2htbV92YWx1 ZXMsCj4+ICsJCS5wZm5fc2hpZnQgPSBEUFRfU0hJRlQsCj4+ICsJCS5wZm5fZmxhZ3NfbWFzayA9 IH4oZG1pcnJvcl9obW1fZmxhZ3NbSE1NX1BGTl9WQUxJRF0gfAo+PiArCQkJCSAgICBkbWlycm9y X2htbV9mbGFnc1tITU1fUEZOX1dSSVRFXSksCj4+ICsJCS5kZWZhdWx0X2ZsYWdzID0gZG1pcnJv cl9obW1fZmxhZ3NbSE1NX1BGTl9WQUxJRF0gfAo+PiArCQkJCSh3cml0ZSA/IGRtaXJyb3JfaG1t X2ZsYWdzW0hNTV9QRk5fV1JJVEVdIDogMCksCj4+ICsJCS5kZXZfcHJpdmF0ZV9vd25lciA9IGRt aXJyb3ItPm1kZXZpY2UsCj4+ICsJfTsKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwo+PiArCS8qIFNp bmNlIHRoZSBtbSBpcyBmb3IgdGhlIG1pcnJvcmVkIHByb2Nlc3MsIGdldCBhIHJlZmVyZW5jZSBm aXJzdC4gKi8KPj4gKwlpZiAoIW1tZ2V0X25vdF96ZXJvKG1tKSkKPj4gKwkJcmV0dXJuIDA7Cj4g Cj4gUmlnaHQKPiAKPj4gKwlmb3IgKGFkZHIgPSBzdGFydDsgYWRkciA8IGVuZDsgYWRkciA9IHJh bmdlLmVuZCkgewo+PiArCQlyYW5nZS5zdGFydCA9IGFkZHI7Cj4+ICsJCXJhbmdlLmVuZCA9IG1p bihhZGRyICsgKEFSUkFZX1NJWkUocGZucykgPDwgUEFHRV9TSElGVCksIGVuZCk7Cj4+ICsKPj4g KwkJcmV0ID0gZG1pcnJvcl9yYW5nZV9mYXVsdChkbWlycm9yLCAmcmFuZ2UpOwo+PiArCQlpZiAo cmV0KQo+PiArCQkJYnJlYWs7Cj4+ICsJfQo+PiArCj4+ICsJbW1wdXQobW0pOwo+PiArCXJldHVy biByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZG1pcnJvcl9kb19yZWFkKHN0cnVjdCBk bWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAo+PiArCQkJICAgdW5zaWduZWQg bG9uZyBlbmQsIHN0cnVjdCBkbWlycm9yX2JvdW5jZSAqYm91bmNlKQo+PiArewo+PiArCXVuc2ln bmVkIGxvbmcgcGZuOwo+PiArCXZvaWQgKnB0cjsKPj4gKwo+PiArCXB0ciA9IGJvdW5jZS0+cHRy ICsgKChzdGFydCAtIGJvdW5jZS0+YWRkcikgJiBQQUdFX01BU0spOwo+PiArCj4+ICsJZm9yIChw Zm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOyBwZm4gPCAoZW5kID4+IFBBR0VfU0hJRlQpOyBwZm4r Kykgewo+PiArCQl2b2lkICplbnRyeTsKPj4gKwkJc3RydWN0IHBhZ2UgKnBhZ2U7Cj4+ICsJCXZv aWQgKnRtcDsKPj4gKwo+PiArCQllbnRyeSA9IHhhX2xvYWQoJmRtaXJyb3ItPnB0LCBwZm4pOwo+ PiArCQlwYWdlID0geGFfdW50YWdfcG9pbnRlcihlbnRyeSk7Cj4+ICsJCWlmICghcGFnZSkKPj4g KwkJCXJldHVybiAtRU5PRU5UOwo+PiArCj4+ICsJCXRtcCA9IGttYXAocGFnZSk7Cj4+ICsJCW1l bWNweShwdHIsIHRtcCwgUEFHRV9TSVpFKTsKPj4gKwkJa3VubWFwKHBhZ2UpOwo+PiArCj4+ICsJ CXB0ciArPSBQQUdFX1NJWkU7Cj4+ICsJCWJvdW5jZS0+Y3BhZ2VzKys7Cj4+ICsJfQo+PiArCj4+ ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZG1pcnJvcl9yZWFkKHN0cnVj dCBkbWlycm9yICpkbWlycm9yLCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQpCj4+ICt7Cj4+ ICsJc3RydWN0IGRtaXJyb3JfYm91bmNlIGJvdW5jZTsKPj4gKwl1bnNpZ25lZCBsb25nIHN0YXJ0 LCBlbmQ7Cj4+ICsJdW5zaWduZWQgbG9uZyBzaXplID0gY21kLT5ucGFnZXMgPDwgUEFHRV9TSElG VDsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJc3RhcnQgPSBjbWQtPmFkZHI7Cj4+ICsJZW5kID0g c3RhcnQgKyBzaXplOwo+PiArCWlmIChlbmQgPCBzdGFydCkKPj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4+ICsKPj4gKwlyZXQgPSBkbWlycm9yX2JvdW5jZV9pbml0KCZib3VuY2UsIHN0YXJ0LCBzaXpl KTsKPj4gKwlpZiAocmV0KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICthZ2FpbjoKPj4gKwlt dXRleF9sb2NrKCZkbWlycm9yLT5tdXRleCk7Cj4+ICsJcmV0ID0gZG1pcnJvcl9kb19yZWFkKGRt aXJyb3IsIHN0YXJ0LCBlbmQsICZib3VuY2UpOwo+PiArCW11dGV4X3VubG9jaygmZG1pcnJvci0+ bXV0ZXgpOwo+PiArCWlmIChyZXQgPT0gMCkKPj4gKwkJcmV0ID0gY29weV90b191c2VyKCh2b2lk IF9fdXNlciAqKWNtZC0+cHRyLCBib3VuY2UucHRyLAo+PiArCQkJCQlib3VuY2Uuc2l6ZSk7Cj4g Cj4gVXNlIHU2NF90b191c2VyX3B0cigpIGluc3RlYWQgb2YgdGhlIGNhc3QKCldpbGwgZG8uCgo+ PiArc3RhdGljIGludCBkbWlycm9yX3dyaXRlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCBzdHJ1 Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQpCj4+ICt7Cj4+ICsJc3RydWN0IGRtaXJyb3JfYm91bmNl IGJvdW5jZTsKPj4gKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7Cj4+ICsJdW5zaWduZWQgbG9u ZyBzaXplID0gY21kLT5ucGFnZXMgPDwgUEFHRV9TSElGVDsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ ICsJc3RhcnQgPSBjbWQtPmFkZHI7Cj4+ICsJZW5kID0gc3RhcnQgKyBzaXplOwo+PiArCWlmIChl bmQgPCBzdGFydCkKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlyZXQgPSBkbWlycm9y X2JvdW5jZV9pbml0KCZib3VuY2UsIHN0YXJ0LCBzaXplKTsKPj4gKwlpZiAocmV0KQo+PiArCQly ZXR1cm4gcmV0Owo+PiArCXJldCA9IGNvcHlfZnJvbV91c2VyKGJvdW5jZS5wdHIsICh2b2lkIF9f dXNlciAqKWNtZC0+cHRyLAo+PiArCQkJCWJvdW5jZS5zaXplKTsKPiAKPiBkaXR0bwo+IAo+PiAr CWlmIChyZXQpCj4+ICsJCXJldHVybiByZXQ7Cj4+ICsKPj4gK2FnYWluOgo+PiArCW11dGV4X2xv Y2soJmRtaXJyb3ItPm11dGV4KTsKPj4gKwlyZXQgPSBkbWlycm9yX2RvX3dyaXRlKGRtaXJyb3Is IHN0YXJ0LCBlbmQsICZib3VuY2UpOwo+PiArCW11dGV4X3VubG9jaygmZG1pcnJvci0+bXV0ZXgp Owo+PiArCWlmIChyZXQgPT0gLUVOT0VOVCkgewo+PiArCQlzdGFydCA9IGNtZC0+YWRkciArIChi b3VuY2UuY3BhZ2VzIDw8IFBBR0VfU0hJRlQpOwo+PiArCQlyZXQgPSBkbWlycm9yX2ZhdWx0KGRt aXJyb3IsIHN0YXJ0LCBlbmQsIHRydWUpOwo+PiArCQlpZiAocmV0ID09IDApIHsKPj4gKwkJCWNt ZC0+ZmF1bHRzKys7Cj4+ICsJCQlnb3RvIGFnYWluOwo+IAo+IFVzZSBhIGxvb3AgaW5zdGVhZCBv ZiBnb3RvPwoKT0suCgo+IEFsc28gSSBnZXQgdGhpczoKPiAKPiBsaWIvdGVzdF9obW0uYzogSW4g ZnVuY3Rpb24g4oCYZG1pcnJvcl9kZXZtZW1fZmF1bHRfYWxsb2NfYW5kX2NvcHnigJk6Cj4gbGli L3Rlc3RfaG1tLmM6MTA0MToyNTogd2FybmluZzogdW51c2VkIHZhcmlhYmxlIOKAmHZtYeKAmSBb LVd1bnVzZWQtdmFyaWFibGVdCj4gICAxMDQxIHwgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h ID0gYXJncy0+dm1hOwo+IAo+IEJ1dCB0aGlzIGlzIGEga2VybmVsIGJ1ZywgZHVlIHRvIGFsbG9j X3BhZ2Vfdm1hIGJlaW5nIGEgI2RlZmluZSBub3QgYQo+IHN0YXRpYyBpbmxpbmUgYW5kIG1lIGhh dmluZyBDT05GSUdfTlVNQSBvZmYgaW4gdGhpcyAuY29uZmlnCgpGaXhlZC4KSSdsbCByZXBvc3Qg YXMgYSBwcm9wZXIgc2VyaWVzIHNob3J0bHkuCgo+IEphc29uCj4gCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=