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=-6.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 EB214C3A59F for ; Thu, 29 Aug 2019 09:24:45 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (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 AC8F8208C2 for ; Thu, 29 Aug 2019 09:24:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=citrix.com header.i=@citrix.com header.b="L/yaOcGK" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AC8F8208C2 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1i3Geq-0006z8-5h; Thu, 29 Aug 2019 09:23:56 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1i3Gep-0006z3-Hb for xen-devel@lists.xenproject.org; Thu, 29 Aug 2019 09:23:55 +0000 X-Inumbo-ID: b8339e36-ca3e-11e9-ae63-12813bfff9fa Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id b8339e36-ca3e-11e9-ae63-12813bfff9fa; Thu, 29 Aug 2019 09:23:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1567070635; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=QF5k/dFCiKW9TRHQcoRZEoApLzSPfuzr9Jskm2he3Jg=; b=L/yaOcGK35KiDXF3HMSj5beaDO+KssEGUlWay9L/lFPi0l7T2rRNtdsL GbVmy1BOL5jjG0/RbrocQAO5i7p4Zbl3iu+BVJlMhlYW9gPuFvhXW6OIt BNaZjH5M+bOsk/LeqWY4tKr2+/isR9zeb6CCfYN830DuM2O4afC9Aerko I=; Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=Paul.Durrant@citrix.com; spf=Pass smtp.mailfrom=Paul.Durrant@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa2.hc3370-68.iphmx.com: no sender authenticity information available from domain of Paul.Durrant@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa2.hc3370-68.iphmx.com; envelope-from="Paul.Durrant@citrix.com"; x-sender="Paul.Durrant@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa2.hc3370-68.iphmx.com: domain of Paul.Durrant@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa2.hc3370-68.iphmx.com; envelope-from="Paul.Durrant@citrix.com"; x-sender="Paul.Durrant@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all" Received-SPF: None (esa2.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa2.hc3370-68.iphmx.com; envelope-from="Paul.Durrant@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: oRlpkkSs/7jWiF9aB19n5u/2bflJS0y3tQSWW36AisYUF7N9ufkaXflvhzXkf43AzA3uhKpTpX 6KhzEnzsabYsnE/tCbWAWW9PNuX/U/l/phZb/FNABbCxvw37ml1nYXKW/0U1ZYdGc+f0R/+AyV 7QuRndr78YB1S4bVItF9BKNad2cP05SLf7A5pDu/p8NuJDKac65QmAbpkAGmJ5Pa9AaGHzVQ9n mfG1R1b+VlxEGCHyZ7QOUjoNUuIVy9v84yATpQ4Qziz/QKTZZ7Tqzs9Aq7Z+V09SAkY2qaQTzv hz8= X-SBRS: 2.7 X-MesageID: 4867066 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.64,442,1559534400"; d="scan'208";a="4867066" From: Paul Durrant To: Roger Pau Monne Thread-Topic: [PATCH v6 08/10] remove late (on-demand) construction of IOMMU page tables Thread-Index: AQHVVFbb5tTQT4/srUC4uLEsnVa+qqcIgyaAgAlqNFA= Date: Thu, 29 Aug 2019 09:23:49 +0000 Message-ID: <175106f956ad45769382d86e15688937@AMSPEX02CL03.citrite.net> References: <20190816172001.3905-1-paul.durrant@citrix.com> <20190816172001.3905-9-paul.durrant@citrix.com> <20190823113409.mpy5hwl6jccfftwc@Air-de-Roger> In-Reply-To: <20190823113409.mpy5hwl6jccfftwc@Air-de-Roger> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted MIME-Version: 1.0 Subject: Re: [Xen-devel] [PATCH v6 08/10] remove late (on-demand) construction of IOMMU page tables X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Petre Pircalabu , Stefano Stabellini , Razvan Cojocaru , Wei Liu , Konrad Rzeszutek Wilk , Andrew Cooper , "Tim \(Xen.org\)" , George Dunlap , Julien Grall , Tamas K Lengyel , Jan Beulich , Ian Jackson , Alexandru Isaila , "xen-devel@lists.xenproject.org" , Volodymyr Babchuk Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IFJvZ2VyIFBhdSBNb25uZSA8cm9n ZXIucGF1QGNpdHJpeC5jb20+Cj4gU2VudDogMjMgQXVndXN0IDIwMTkgMTI6MzQKPiBUbzogUGF1 bCBEdXJyYW50IDxQYXVsLkR1cnJhbnRAY2l0cml4LmNvbT4KPiBDYzogeGVuLWRldmVsQGxpc3Rz LnhlbnByb2plY3Qub3JnOyBBbGV4YW5kcnUgSXNhaWxhIDxhaXNhaWxhQGJpdGRlZmVuZGVyLmNv bT47IFN0ZWZhbm8gU3RhYmVsbGluaQo+IDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPjsgSnVsaWVu IEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT47IFZvbG9keW15ciBCYWJjaHVrCj4gPFZvbG9k eW15cl9CYWJjaHVrQGVwYW0uY29tPjsgQW5kcmV3IENvb3BlciA8QW5kcmV3LkNvb3BlcjNAY2l0 cml4LmNvbT47IEdlb3JnZSBEdW5sYXAKPiA8R2VvcmdlLkR1bmxhcEBjaXRyaXguY29tPjsgSWFu IEphY2tzb24gPElhbi5KYWNrc29uQGNpdHJpeC5jb20+OyBKYW4gQmV1bGljaCA8amJldWxpY2hA c3VzZS5jb20+Owo+IEtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNv bT47IFRpbSAoWGVuLm9yZykgPHRpbUB4ZW4ub3JnPjsgV2VpIExpdSA8d2xAeGVuLm9yZz47Cj4g VGFtYXMgSyBMZW5neWVsIDx0YW1hc0B0a2xlbmd5ZWwuY29tPjsgUmF6dmFuIENvam9jYXJ1IDxy Y29qb2NhcnVAYml0ZGVmZW5kZXIuY29tPjsgUGV0cmUgUGlyY2FsYWJ1Cj4gPHBwaXJjYWxhYnVA Yml0ZGVmZW5kZXIuY29tPgo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjYgMDgvMTBdIHJlbW92ZSBs YXRlIChvbi1kZW1hbmQpIGNvbnN0cnVjdGlvbiBvZiBJT01NVSBwYWdlIHRhYmxlcwo+IAo+IE9u IEZyaSwgQXVnIDE2LCAyMDE5IGF0IDA2OjE5OjU5UE0gKzAxMDAsIFBhdWwgRHVycmFudCB3cm90 ZToKPiA+IE5vdyB0aGF0IHRoZXJlIGlzIGEgcGVyLWRvbWFpbiBJT01NVSBlbmFibGUgZmxhZywg d2hpY2ggc2hvdWxkIGJlIGVuYWJsZWQgaWYKPiA+IGFueSBkZXZpY2UgaXMgZ29pbmcgdG8gYmUg cGFzc2VkIHRocm91Z2gsIHN0b3AgZGVmZXJyaW5nIHBhZ2UgdGFibGUKPiA+IGNvbnN0cnVjdGlv biB1bnRpbCB0aGUgYXNzaWdubWVudCBpcyBkb25lLiBBbHNvIGRvbid0IHRlYXIgZG93biB0aGUg dGFibGVzCj4gPiBhZ2FpbiB3aGVuIHRoZSBsYXN0IGRldmljZSBpcyBkZS1hc3NpZ25lZDsgZGVm ZXIgdGhhdCB0YXNrIHVudGlsIGRvbWFpbgo+ID4gZGVzdHJ1Y3Rpb24uCj4gPgo+ID4gVGhpcyBh bGxvd3MgdGhlIGhhc19pb21tdV9wdCgpIGhlbHBlciBhbmQgaW9tbXVfc3RhdHVzIGVudW1lcmF0 aW9uIHRvIGJlCj4gPiByZW1vdmVkLiBDYWxscyB0byBoYXNfaW9tbXVfcHQoKSBhcmUgc2ltcGx5 IHJlcGxhY2VkIGJ5IGNhbGxzIHRvCj4gPiBpc19pb21tdV9lbmFibGVkKCkuIFJlbWFpbmluZyBv cGVuLWNvZGUgdGVzdHMgb2YgaW9tbXVfaGFwX3B0X3NoYXJlIGNhbiBhbHNvCj4gPiBiZSByZXBs YWNlZCBieSBjYWxscyB0byBpb21tdV91c2VfaGFwX3B0KCkuCj4gPiBUaGUgYXJjaF9pb21tdV9w b3B1bGF0ZV9wYWdlX3RhYmxlKCkgYW5kIGlvbW11X2NvbnN0cnVjdCgpIGZ1bmN0aW9ucyBiZWNv bWUKPiA+IHJlZHVuZGFudCwgYXMgZG9lcyB0aGUgJ3N0cmljdCBtb2RlJyBkb20wIHBhZ2VfbGlz dCBtYXBwaW5nIGNvZGUgaW4KPiA+IGlvbW11X2h3ZG9tX2luaXQoKSwgYW5kIGlvbW11X3RlYXJk b3duKCkgY2FuIGJlIG1hZGUgc3RhdGljIGlzIGl0cyBvbmx5Cj4gPiByZW1haW5pbmcgY2FsbGVy LCBpb21tdV9kb21haW5fZGVzdHJveSgpLCBpcyB3aXRoaW4gdGhlIHNhbWUgc291cmNlCj4gPiBt b2R1bGUuCj4gPgo+ID4gQWxsIGluIGFsbCwgYWJvdXQgMjIwIGxpbmVzIG9mIGNvZGUgYXJlIHJl bW92ZWQuCj4gPgo+ID4gTk9URTogVGhpcyBwYXRjaCB3aWxsIGNhdXNlIGEgc21hbGwgYW1vdW50 IG9mIGV4dHJhIHJlc291cmNlIHRvIGJlIHVzZWQKPiA+ICAgICAgIHRvIGFjY29tbW9kYXRlIElP TU1VIHBhZ2UgdGFibGVzIHRoYXQgbWF5IG5ldmVyIGJlIHVzZWQsIHNpbmNlIHRoZQo+ID4gICAg ICAgcGVyLWRvbWFpbiBJT01NVSBmbGFnIGVuYWJsZSBmbGFnIGlzIGN1cnJlbnRseSBzZXQgdG8g dGhlIHZhbHVlCj4gPiAgICAgICBvZiB0aGUgZ2xvYmFsIGlvbW11X2VuYWJsZSBmbGFnLiBBIHN1 YnNlcXVlbnQgcGF0Y2ggd2lsbCBhZGQgYW4KPiA+ICAgICAgIG9wdGlvbiB0byB0aGUgdG9vbHN0 YWNrIHRvIGFsbG93IGl0IHRvIGJlIHR1cm5lZCBvZmYgaWYgdGhlcmUgaXMKPiA+ICAgICAgIG5v IGludGVudGlvbiB0byBhc3NpZ24gcGFzc3Rocm91Z2ggaGFyZHdhcmUgdG8gdGhlIGRvbWFpbi4K PiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBQYXVsIER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXgu Y29tPgo+ID4gUmV2aWV3ZWQtYnk6IEFsZXhhbmRydSBJc2FpbGEgPGFpc2FpbGFAYml0ZGVmZW5k ZXIuY29tPgo+ID4gLS0tCj4gPiBDYzogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBr ZXJuZWwub3JnPgo+ID4gQ2M6IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+Cj4g PiBDYzogVm9sb2R5bXlyIEJhYmNodWsgPFZvbG9keW15cl9CYWJjaHVrQGVwYW0uY29tPgo+ID4g Q2M6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+Cj4gPiBDYzogR2Vv cmdlIER1bmxhcCA8R2VvcmdlLkR1bmxhcEBldS5jaXRyaXguY29tPgo+ID4gQ2M6IElhbiBKYWNr c29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgo+ID4gQ2M6IEphbiBCZXVsaWNoIDxqYmV1 bGljaEBzdXNlLmNvbT4KPiA+IENjOiBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxr QG9yYWNsZS5jb20+Cj4gPiBDYzogVGltIERlZWdhbiA8dGltQHhlbi5vcmc+Cj4gPiBDYzogV2Vp IExpdSA8d2xAeGVuLm9yZz4KPiA+IENjOiAiUm9nZXIgUGF1IE1vbm7DqSIgPHJvZ2VyLnBhdUBj aXRyaXguY29tPgo+ID4gQ2M6IFRhbWFzIEsgTGVuZ3llbCA8dGFtYXNAdGtsZW5neWVsLmNvbT4K PiA+IENjOiBHZW9yZ2UgRHVubGFwIDxnZW9yZ2UuZHVubGFwQGV1LmNpdHJpeC5jb20+Cj4gPiBD YzogUmF6dmFuIENvam9jYXJ1IDxyY29qb2NhcnVAYml0ZGVmZW5kZXIuY29tPgo+ID4gQ2M6IFBl dHJlIFBpcmNhbGFidSA8cHBpcmNhbGFidUBiaXRkZWZlbmRlci5jb20+Cj4gPgo+ID4gUHJldmlv dXNseSBwYXJ0IG9mIHNlcmllcyBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL2FyY2hpdmVz L2h0bWwveGVuLWRldmVsLzIwMTktMDcvbXNnMDIyNjcuaHRtbAo+ID4KPiA+IHY1Ogo+ID4gIC0g TWlub3Igc3R5bGUgZml4ZXMKPiA+IC0tLQo+ID4gIHhlbi9hcmNoL2FybS9wMm0uYyAgICAgICAg ICAgICAgICAgICAgfCAgIDIgKy0KPiA+ICB4ZW4vYXJjaC94ODYvZG9tMF9idWlsZC5jICAgICAg ICAgICAgIHwgICAyICstCj4gPiAgeGVuL2FyY2gveDg2L2h2bS9tdHJyLmMgICAgICAgICAgICAg ICB8ICAgNSArLQo+ID4gIHhlbi9hcmNoL3g4Ni9tbS9tZW1fc2hhcmluZy5jICAgICAgICAgfCAg IDIgKy0KPiA+ICB4ZW4vYXJjaC94ODYvbW0vcGFnaW5nLmMgICAgICAgICAgICAgIHwgICAyICst Cj4gPiAgeGVuL2FyY2gveDg2L3g4Nl82NC9tbS5jICAgICAgICAgICAgICB8ICAgMiArLQo+ID4g IHhlbi9jb21tb24vbWVtb3J5LmMgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KPiA+ICB4ZW4v Y29tbW9uL3ZtX2V2ZW50LmMgICAgICAgICAgICAgICAgIHwgICAyICstCj4gPiAgeGVuL2RyaXZl cnMvcGFzc3Rocm91Z2gvZGV2aWNlX3RyZWUuYyB8ICAxMSAtLS0KPiA+ICB4ZW4vZHJpdmVycy9w YXNzdGhyb3VnaC9pb21tdS5jICAgICAgIHwgMTM0ICsrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0t Cj4gPiAgeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvcGNpLmMgICAgICAgICB8ICAxMiAtLS0KPiA+ ICB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuYyAgIHwgIDEwICstCj4gPiAgeGVu L2RyaXZlcnMvcGFzc3Rocm91Z2gveDg2L2lvbW11LmMgICB8ICA5NSAtLS0tLS0tLS0tLS0tLS0t LS0KPiA+ICB4ZW4vaW5jbHVkZS9hc20tYXJtL2lvbW11LmggICAgICAgICAgIHwgICAyICstCj4g PiAgeGVuL2luY2x1ZGUvYXNtLXg4Ni9pb21tdS5oICAgICAgICAgICB8ICAgMiArLQo+ID4gIHhl bi9pbmNsdWRlL3hlbi9pb21tdS5oICAgICAgICAgICAgICAgfCAgMTYgLS0tCj4gPiAgeGVuL2lu Y2x1ZGUveGVuL3NjaGVkLmggICAgICAgICAgICAgICB8ICAgMiAtCj4gPiAgMTcgZmlsZXMgY2hh bmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgMjYzIGRlbGV0aW9ucygtKQo+ID4KPiA+IGRpZmYgLS1n aXQgYS94ZW4vYXJjaC9hcm0vcDJtLmMgYi94ZW4vYXJjaC9hcm0vcDJtLmMKPiA+IGluZGV4IDdm MTQ0MjkzMmEuLjY5MjU2NTc1N2UgMTAwNjQ0Cj4gPiAtLS0gYS94ZW4vYXJjaC9hcm0vcDJtLmMK PiA+ICsrKyBiL3hlbi9hcmNoL2FybS9wMm0uYwo+ID4gQEAgLTEwNTYsNyArMTA1Niw3IEBAIHN0 YXRpYyBpbnQgX19wMm1fc2V0X2VudHJ5KHN0cnVjdCBwMm1fZG9tYWluICpwMm0sCj4gPiAgICAg ICAgICAgIW1mbl9lcShscGFlX2dldF9tZm4oKmVudHJ5KSwgbHBhZV9nZXRfbWZuKG9yaWdfcHRl KSkgKQo+ID4gICAgICAgICAgcDJtX2ZyZWVfZW50cnkocDJtLCBvcmlnX3B0ZSwgbGV2ZWwpOwo+ ID4KPiA+IC0gICAgaWYgKCBoYXNfaW9tbXVfcHQocDJtLT5kb21haW4pICYmCj4gPiArICAgIGlm ICggaXNfaW9tbXVfZW5hYmxlZChwMm0tPmRvbWFpbikgJiYKPiA+ICAgICAgICAgICAobHBhZV9p c192YWxpZChvcmlnX3B0ZSkgfHwgbHBhZV9pc192YWxpZCgqZW50cnkpKSApCj4gPiAgICAgIHsK PiA+ICAgICAgICAgIHVuc2lnbmVkIGludCBmbHVzaF9mbGFncyA9IDA7Cj4gPiBkaWZmIC0tZ2l0 IGEveGVuL2FyY2gveDg2L2RvbTBfYnVpbGQuYyBiL3hlbi9hcmNoL3g4Ni9kb20wX2J1aWxkLmMK PiA+IGluZGV4IGQzODE3ODRlZGQuLjdjZmFiMmRjMjUgMTAwNjQ0Cj4gPiAtLS0gYS94ZW4vYXJj aC94ODYvZG9tMF9idWlsZC5jCj4gPiArKysgYi94ZW4vYXJjaC94ODYvZG9tMF9idWlsZC5jCj4g PiBAQCAtMzY1LDcgKzM2NSw3IEBAIHVuc2lnbmVkIGxvbmcgX19pbml0IGRvbTBfY29tcHV0ZV9u cl9wYWdlcygKPiA+ICAgICAgfQo+ID4KPiA+ICAgICAgbmVlZF9wYWdpbmcgPSBpc19odm1fZG9t YWluKGQpICYmCj4gPiAtICAgICAgICAoIWlvbW11X2hhcF9wdF9zaGFyZSB8fCAhcGFnaW5nX21v ZGVfaGFwKGQpKTsKPiA+ICsgICAgICAgICghaW9tbXVfdXNlX2hhcF9wdChkKSB8fCAhcGFnaW5n X21vZGVfaGFwKGQpKTsKPiAKPiBJJ20gbm90IHN1cmUgdGhpcyBpcyBjb3JyZWN0LCBhdCB0aGUg cG9pbnQgd2hlcmUgZG9tMF9jb21wdXRlX25yX3BhZ2VzCj4gZ2V0cyBjYWxsZWQgdGhlIGlvbW11 IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQgKHRoZSBjYWxsIHRvCj4gaW9tbXVfaHdkb21f aW5pdCBpcyBkb25lIGFmdGVyd2FyZHMpLCBzbyB0aGUgaW9tbXUgc3RhdHVzIGZpZWxkIHdoaWNo Cj4gaXMgdXNlZCBieSBpb21tdV91c2VfaGFwX3B0IGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQuCgpO b3RlIHRoYXQgdGhpcyBwYXRjaCByZW1vdmVzIHRoZSBpb21tdSBzdGF0dXMgZmllbGQuCgo+IAo+ ID4gICAgICBmb3IgKCA7IDsgbmVlZF9wYWdpbmcgPSBmYWxzZSApCj4gPiAgICAgIHsKPiA+ICAg ICAgICAgIG5yX3BhZ2VzID0gZ2V0X21lbXNpemUoJmRvbTBfc2l6ZSwgYXZhaWwpOwo+ID4gZGlm ZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vbXRyci5jIGIveGVuL2FyY2gveDg2L2h2bS9tdHJy LmMKPiA+IGluZGV4IDdjY2Q4NWJjZWEuLjVhZDE1ZWFmZTAgMTAwNjQ0Cj4gPiAtLS0gYS94ZW4v YXJjaC94ODYvaHZtL210cnIuYwo+ID4gKysrIGIveGVuL2FyY2gveDg2L2h2bS9tdHJyLmMKPiA+ IEBAIC03ODMsNyArNzgzLDggQEAgSFZNX1JFR0lTVEVSX1NBVkVfUkVTVE9SRShNVFJSLCBodm1f c2F2ZV9tdHJyX21zciwgaHZtX2xvYWRfbXRycl9tc3IsIDEsCj4gPgo+ID4gIHZvaWQgbWVtb3J5 X3R5cGVfY2hhbmdlZChzdHJ1Y3QgZG9tYWluICpkKQo+ID4gIHsKPiA+IC0gICAgaWYgKCAoaGFz X2lvbW11X3B0KGQpIHx8IGNhY2hlX2ZsdXNoX3Blcm1pdHRlZChkKSkgJiYgZC0+dmNwdSAmJiBk LT52Y3B1WzBdICkKPiA+ICsgICAgaWYgKCAoaXNfaW9tbXVfZW5hYmxlZChkKSB8fCBjYWNoZV9m bHVzaF9wZXJtaXR0ZWQoZCkpICYmCj4gPiArICAgICAgICAgZC0+dmNwdSAmJiBkLT52Y3B1WzBd ICkKPiA+ICAgICAgewo+ID4gICAgICAgICAgcDJtX21lbW9yeV90eXBlX2NoYW5nZWQoZCk7Cj4g PiAgICAgICAgICBmbHVzaF9hbGwoRkxVU0hfQ0FDSEUpOwo+ID4gQEAgLTgzMSw3ICs4MzIsNyBA QCBpbnQgZXB0ZV9nZXRfZW50cnlfZW10KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcg Z2ZuLCBtZm5fdCBtZm4sCj4gPiAgICAgICAgICByZXR1cm4gTVRSUl9UWVBFX1VOQ0FDSEFCTEU7 Cj4gPiAgICAgIH0KPiA+Cj4gPiAtICAgIGlmICggIWhhc19pb21tdV9wdChkKSAmJiAhY2FjaGVf Zmx1c2hfcGVybWl0dGVkKGQpICkKPiA+ICsgICAgaWYgKCAhaXNfaW9tbXVfZW5hYmxlZChkKSAm JiAhY2FjaGVfZmx1c2hfcGVybWl0dGVkKGQpICkKPiA+ICAgICAgewo+ID4gICAgICAgICAgKmlw YXQgPSAxOwo+ID4gICAgICAgICAgcmV0dXJuIE1UUlJfVFlQRV9XUkJBQ0s7Cj4gPiBkaWZmIC0t Z2l0IGEveGVuL2FyY2gveDg2L21tL21lbV9zaGFyaW5nLmMgYi94ZW4vYXJjaC94ODYvbW0vbWVt X3NoYXJpbmcuYwo+ID4gaW5kZXggYTVmZTg5ZTMzOS4uZWZiODgyMTc2OCAxMDA2NDQKPiA+IC0t LSBhL3hlbi9hcmNoL3g4Ni9tbS9tZW1fc2hhcmluZy5jCj4gPiArKysgYi94ZW4vYXJjaC94ODYv bW0vbWVtX3NoYXJpbmcuYwo+ID4gQEAgLTE2NjQsNyArMTY2NCw3IEBAIGludCBtZW1fc2hhcmlu Z19kb21jdGwoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHhlbl9kb21jdGxfbWVtX3NoYXJpbmdf b3AKPiAqbWVjKQo+ID4gICAgICAgICAgY2FzZSBYRU5fRE9NQ1RMX01FTV9TSEFSSU5HX0NPTlRS T0w6Cj4gPiAgICAgICAgICB7Cj4gPiAgICAgICAgICAgICAgcmMgPSAwOwo+ID4gLSAgICAgICAg ICAgIGlmICggdW5saWtlbHkoaGFzX2lvbW11X3B0KGQpICYmIG1lYy0+dS5lbmFibGUpICkKPiA+ ICsgICAgICAgICAgICBpZiAoIHVubGlrZWx5KGlzX2lvbW11X2VuYWJsZWQoZCkgJiYgbWVjLT51 LmVuYWJsZSkgKQo+ID4gICAgICAgICAgICAgICAgICByYyA9IC1FWERFVjsKPiA+ICAgICAgICAg ICAgICBlbHNlCj4gPiAgICAgICAgICAgICAgICAgIGQtPmFyY2guaHZtLm1lbV9zaGFyaW5nX2Vu YWJsZWQgPSBtZWMtPnUuZW5hYmxlOwo+ID4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9tbS9w YWdpbmcuYyBiL3hlbi9hcmNoL3g4Ni9tbS9wYWdpbmcuYwo+ID4gaW5kZXggNjlhYTIyOGU0Ni4u ZDlhNTJjNGRiNCAxMDA2NDQKPiA+IC0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9wYWdpbmcuYwo+ID4g KysrIGIveGVuL2FyY2gveDg2L21tL3BhZ2luZy5jCj4gPiBAQCAtMjEzLDcgKzIxMyw3IEBAIGlu dCBwYWdpbmdfbG9nX2RpcnR5X2VuYWJsZShzdHJ1Y3QgZG9tYWluICpkLCBib29sX3QgbG9nX2ds b2JhbCkKPiA+ICB7Cj4gPiAgICAgIGludCByZXQ7Cj4gPgo+ID4gLSAgICBpZiAoIGhhc19pb21t dV9wdChkKSAmJiBsb2dfZ2xvYmFsICkKPiA+ICsgICAgaWYgKCBpc19pb21tdV9lbmFibGVkKGQp ICYmIGxvZ19nbG9iYWwgKQo+ID4gICAgICB7Cj4gPiAgICAgICAgICAvKgo+ID4gICAgICAgICAg ICogUmVmdXNlIHRvIHR1cm4gb24gZ2xvYmFsIGxvZy1kaXJ0eSBtb2RlCj4gPiBkaWZmIC0tZ2l0 IGEveGVuL2FyY2gveDg2L3g4Nl82NC9tbS5jIGIveGVuL2FyY2gveDg2L3g4Nl82NC9tbS5jCj4g PiBpbmRleCAxOTE5Y2FlMThiLi44MjdiM2Y1ZTI3IDEwMDY0NAo+ID4gLS0tIGEveGVuL2FyY2gv eDg2L3g4Nl82NC9tbS5jCj4gPiArKysgYi94ZW4vYXJjaC94ODYveDg2XzY0L21tLmMKPiA+IEBA IC0xNDMzLDcgKzE0MzMsNyBAQCBpbnQgbWVtb3J5X2FkZCh1bnNpZ25lZCBsb25nIHNwZm4sIHVu c2lnbmVkIGxvbmcgZXBmbiwgdW5zaWduZWQgaW50IHB4bSkKPiA+ICAgICAgICogc2hhcmVkIG9y IGJlaW5nIGtlcHQgaW4gc3luYyB0aGVuIG5ld2x5IGFkZGVkIG1lbW9yeSBuZWVkcyB0byBiZQo+ ID4gICAgICAgKiBtYXBwZWQgaGVyZS4KPiA+ICAgICAgICovCj4gPiAtICAgIGlmICggaGFzX2lv bW11X3B0KGhhcmR3YXJlX2RvbWFpbikgJiYKPiA+ICsgICAgaWYgKCBpc19pb21tdV9lbmFibGVk KGhhcmR3YXJlX2RvbWFpbikgJiYKPiA+ICAgICAgICAgICAhaW9tbXVfdXNlX2hhcF9wdChoYXJk d2FyZV9kb21haW4pICYmCj4gPiAgICAgICAgICAgIW5lZWRfaW9tbXVfcHRfc3luYyhoYXJkd2Fy ZV9kb21haW4pICkKPiA+ICAgICAgewo+ID4gZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vbWVtb3J5 LmMgYi94ZW4vY29tbW9uL21lbW9yeS5jCj4gPiBpbmRleCBkOWIzNWE2MDhjLi43MTQ0NWMyZjUz IDEwMDY0NAo+ID4gLS0tIGEveGVuL2NvbW1vbi9tZW1vcnkuYwo+ID4gKysrIGIveGVuL2NvbW1v bi9tZW1vcnkuYwo+ID4gQEAgLTgyMyw3ICs4MjMsNyBAQCBpbnQgeGVubWVtX2FkZF90b19waHlz bWFwKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCB4ZW5fYWRkX3RvX3BoeXNtYXAgKnhhdHAsCj4g PiAgICAgIHhhdHAtPmdwZm4gKz0gc3RhcnQ7Cj4gPiAgICAgIHhhdHAtPnNpemUgLT0gc3RhcnQ7 Cj4gPgo+ID4gLSAgICBpZiAoIGhhc19pb21tdV9wdChkKSApCj4gPiArICAgIGlmICggaXNfaW9t bXVfZW5hYmxlZChkKSApCj4gPiAgICAgICAgIHRoaXNfY3B1KGlvbW11X2RvbnRfZmx1c2hfaW90 bGIpID0gMTsKPiA+Cj4gPiAgICAgIHdoaWxlICggeGF0cC0+c2l6ZSA+IGRvbmUgKQo+ID4gQEAg LTg0NCw3ICs4NDQsNyBAQCBpbnQgeGVubWVtX2FkZF90b19waHlzbWFwKHN0cnVjdCBkb21haW4g KmQsIHN0cnVjdCB4ZW5fYWRkX3RvX3BoeXNtYXAgKnhhdHAsCj4gPiAgICAgICAgICB9Cj4gPiAg ICAgIH0KPiA+Cj4gPiAtICAgIGlmICggaGFzX2lvbW11X3B0KGQpICkKPiA+ICsgICAgaWYgKCBp c19pb21tdV9lbmFibGVkKGQpICkKPiA+ICAgICAgewo+ID4gICAgICAgICAgaW50IHJldDsKPiA+ Cj4gPiBkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi92bV9ldmVudC5jIGIveGVuL2NvbW1vbi92bV9l dmVudC5jCj4gPiBpbmRleCAyYTFjODdlNDRiLi4zYjE4MTk1ZWJmIDEwMDY0NAo+ID4gLS0tIGEv eGVuL2NvbW1vbi92bV9ldmVudC5jCj4gPiArKysgYi94ZW4vY29tbW9uL3ZtX2V2ZW50LmMKPiA+ IEBAIC02MzAsNyArNjMwLDcgQEAgaW50IHZtX2V2ZW50X2RvbWN0bChzdHJ1Y3QgZG9tYWluICpk LCBzdHJ1Y3QgeGVuX2RvbWN0bF92bV9ldmVudF9vcCAqdmVjKQo+ID4KPiA+ICAgICAgICAgICAg ICAvKiBObyBwYWdpbmcgaWYgaW9tbXUgaXMgdXNlZCAqLwo+ID4gICAgICAgICAgICAgIHJjID0g LUVNTElOSzsKPiA+IC0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KGhhc19pb21tdV9wdChkKSkg KQo+ID4gKyAgICAgICAgICAgIGlmICggdW5saWtlbHkoaXNfaW9tbXVfZW5hYmxlZChkKSkgKQo+ ID4gICAgICAgICAgICAgICAgICBicmVhazsKPiA+Cj4gPiAgICAgICAgICAgICAgcmMgPSAtRVhE RVY7Cj4gPiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvZGV2aWNlX3RyZWUu YyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2RldmljZV90cmVlLmMKPiA+IGluZGV4IDEyZjJj NGMzZjIuLmVhOWZkNTRlM2IgMTAwNjQ0Cj4gPiAtLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3Vn aC9kZXZpY2VfdHJlZS5jCj4gPiArKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9kZXZpY2Vf dHJlZS5jCj4gPiBAQCAtNDAsMTcgKzQwLDYgQEAgaW50IGlvbW11X2Fzc2lnbl9kdF9kZXZpY2Uo c3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGR0X2RldmljZV9ub2RlICpkZXYpCj4gPiAgICAgIGlm ICggIWxpc3RfZW1wdHkoJmRldi0+ZG9tYWluX2xpc3QpICkKPiA+ICAgICAgICAgIGdvdG8gZmFp bDsKPiA+Cj4gPiAtICAgIC8qCj4gPiAtICAgICAqIFRoZSBod2RvbSBpcyBmb3JjZWQgdG8gdXNl IElPTU1VIGZvciBwcm90ZWN0aW5nIGFzc2lnbmVkCj4gPiAtICAgICAqIGRldmljZS4gVGhlcmVm b3JlIHRoZSBJT01NVSBkYXRhIGlzIGFscmVhZHkgc2V0IHVwLgo+ID4gLSAgICAgKi8KPiA+IC0g ICAgQVNTRVJUKCFpc19oYXJkd2FyZV9kb21haW4oZCkgfHwKPiA+IC0gICAgICAgICAgIGhkLT5z dGF0dXMgPT0gSU9NTVVfU1RBVFVTX2luaXRpYWxpemVkKTsKPiA+IC0KPiA+IC0gICAgcmMgPSBp b21tdV9jb25zdHJ1Y3QoZCk7Cj4gPiAtICAgIGlmICggcmMgKQo+ID4gLSAgICAgICAgZ290byBm YWlsOwo+ID4gLQo+ID4gICAgICAvKiBUaGUgZmxhZyBmaWVsZCBkb2Vzbid0IG1hdHRlciB0byBE VCBkZXZpY2UuICovCj4gPiAgICAgIHJjID0gaGQtPnBsYXRmb3JtX29wcy0+YXNzaWduX2Rldmlj ZShkLCAwLCBkdF90b19kZXYoZGV2KSwgMCk7Cj4gPgo+ID4gZGlmZiAtLWdpdCBhL3hlbi9kcml2 ZXJzL3Bhc3N0aHJvdWdoL2lvbW11LmMgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9pb21tdS5j Cj4gPiBpbmRleCAyN2M3NWUwNzg2Li5kYzdiNzVmYWI2IDEwMDY0NAo+ID4gLS0tIGEveGVuL2Ry aXZlcnMvcGFzc3Rocm91Z2gvaW9tbXUuYwo+ID4gKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91 Z2gvaW9tbXUuYwo+ID4gQEAgLTE0Niw2ICsxNDYsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFy c2VfZG9tMF9pb21tdV9wYXJhbShjb25zdCBjaGFyICpzKQo+ID4gIH0KPiA+ICBjdXN0b21fcGFy YW0oImRvbTAtaW9tbXUiLCBwYXJzZV9kb20wX2lvbW11X3BhcmFtKTsKPiA+Cj4gPiArc3RhdGlj IHZvaWQgX19od2RvbV9pbml0IGNoZWNrX2h3ZG9tX3JlcXMoc3RydWN0IGRvbWFpbiAqZCkKPiA+ ICt7Cj4gPiArICAgIGlmICggaW9tbXVfaHdkb21fbm9uZSB8fCAhcGFnaW5nX21vZGVfdHJhbnNs YXRlKGQpICkKPiA+ICsgICAgICAgIHJldHVybjsKPiA+ICsKPiA+ICsgICAgYXJjaF9pb21tdV9j aGVja19hdXRvdHJhbnNsYXRlZF9od2RvbShkKTsKPiA+ICsKPiA+ICsgICAgaW9tbXVfaHdkb21f cGFzc3Rocm91Z2ggPSBmYWxzZTsKPiA+ICsgICAgaW9tbXVfaHdkb21fc3RyaWN0ID0gdHJ1ZTsK PiA+ICt9Cj4gPiArCj4gPiAgaW50IGlvbW11X2RvbWFpbl9pbml0KHN0cnVjdCBkb21haW4gKmQp Cj4gPiAgewo+ID4gICAgICBzdHJ1Y3QgZG9tYWluX2lvbW11ICpoZCA9IGRvbV9pb21tdShkKTsK PiA+IEBAIC0xNTksMTI5ICsxNzAsNDQgQEAgaW50IGlvbW11X2RvbWFpbl9pbml0KHN0cnVjdCBk b21haW4gKmQpCj4gPiAgICAgICAgICByZXR1cm4gcmV0Owo+ID4KPiA+ICAgICAgaGQtPnBsYXRm b3JtX29wcyA9IGlvbW11X2dldF9vcHMoKTsKPiA+IC0gICAgcmV0dXJuIGhkLT5wbGF0Zm9ybV9v cHMtPmluaXQoZCk7Cj4gPiAtfQo+ID4gKyAgICByZXQgPSBoZC0+cGxhdGZvcm1fb3BzLT5pbml0 KGQpOwo+ID4gKyAgICBpZiAoIHJldCApCj4gPiArICAgICAgICByZXR1cm4gcmV0Owo+ID4KPiA+ IC1zdGF0aWMgdm9pZCBfX2h3ZG9tX2luaXQgY2hlY2tfaHdkb21fcmVxcyhzdHJ1Y3QgZG9tYWlu ICpkKQo+ID4gLXsKPiA+IC0gICAgaWYgKCBpb21tdV9od2RvbV9ub25lIHx8ICFwYWdpbmdfbW9k ZV90cmFuc2xhdGUoZCkgKQo+ID4gLSAgICAgICAgcmV0dXJuOwo+ID4gKyAgICAvKgo+ID4gKyAg ICAgKiBOQjogJ3JlbGF4ZWQnIGgvdyBkb21haW5zIGRvbid0IG5lZWQgdGhlIElPTU1VIG1hcHBp bmdzIHRvIGJlIGtlcHQKPiA+ICsgICAgICogICAgIGluLXN5bmMgd2l0aCB0aGVpciBhc3NpZ25l ZCBwYWdlcyBiZWNhdXNlIGFsbCBob3N0IFJBTSB3aWxsIGJlCj4gPiArICAgICAqICAgICBtYXBw ZWQgZHVyaW5nIGh3ZG9tX2luaXQoKS4KPiA+ICsgICAgICovCj4gPiArICAgIGlmICggaXNfaGFy ZHdhcmVfZG9tYWluKGQpICkKPiA+ICsgICAgICAgIGNoZWNrX2h3ZG9tX3JlcXMoZCk7IC8qIG1h eSBtb2RpZnkgaW9tbXVfaHdkb21fc3RyaWN0ICovCj4gPgo+ID4gLSAgICBhcmNoX2lvbW11X2No ZWNrX2F1dG90cmFuc2xhdGVkX2h3ZG9tKGQpOwo+ID4gKyAgICBpZiAoICFpc19oYXJkd2FyZV9k b21haW4oZCkgfHwgaW9tbXVfaHdkb21fc3RyaWN0ICkKPiA+ICsgICAgICAgIGhkLT5uZWVkX3N5 bmMgPSAhaW9tbXVfdXNlX2hhcF9wdChkKTsKPiA+Cj4gPiAtICAgIGlvbW11X2h3ZG9tX3Bhc3N0 aHJvdWdoID0gZmFsc2U7Cj4gPiAtICAgIGlvbW11X2h3ZG9tX3N0cmljdCA9IHRydWU7Cj4gPiAr ICAgIHJldHVybiAwOwo+ID4gIH0KPiA+Cj4gPiAgdm9pZCBfX2h3ZG9tX2luaXQgaW9tbXVfaHdk b21faW5pdChzdHJ1Y3QgZG9tYWluICpkKQo+ID4gIHsKPiA+ICAgICAgc3RydWN0IGRvbWFpbl9p b21tdSAqaGQgPSBkb21faW9tbXUoZCk7Cj4gPgo+ID4gLSAgICBjaGVja19od2RvbV9yZXFzKGQp Owo+ID4gLQo+ID4gICAgICBpZiAoICFpc19pb21tdV9lbmFibGVkKGQpICkKPiA+ICAgICAgICAg IHJldHVybjsKPiA+Cj4gPiAgICAgIHJlZ2lzdGVyX2tleWhhbmRsZXIoJ28nLCAmaW9tbXVfZHVt cF9wMm1fdGFibGUsICJkdW1wIGlvbW11IHAybSB0YWJsZSIsIDApOwo+ID4KPiA+IC0gICAgaGQt PnN0YXR1cyA9IElPTU1VX1NUQVRVU19pbml0aWFsaXppbmc7Cj4gPiAtICAgIC8qCj4gPiAtICAg ICAqIE5COiByZWxheGVkIGh3IGRvbWFpbnMgZG9uJ3QgbmVlZCBzeW5jIGJlY2F1c2UgYWxsIHJh bSBpcyBhbHJlYWR5Cj4gPiAtICAgICAqIG1hcHBlZCBpbiB0aGUgaW9tbXUgcGFnZSB0YWJsZXMu Cj4gPiAtICAgICAqLwo+ID4gLSAgICBoZC0+bmVlZF9zeW5jID0gaW9tbXVfaHdkb21fc3RyaWN0 ICYmICFpb21tdV91c2VfaGFwX3B0KGQpOwo+ID4gLSAgICBpZiAoIG5lZWRfaW9tbXVfcHRfc3lu YyhkKSApCj4gPiAtICAgIHsKPiA+IC0gICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Cj4g PiAtICAgICAgICB1bnNpZ25lZCBpbnQgaSA9IDAsIGZsdXNoX2ZsYWdzID0gMDsKPiA+IC0gICAg ICAgIGludCByYyA9IDA7Cj4gPiAtCj4gPiAtICAgICAgICBwYWdlX2xpc3RfZm9yX2VhY2ggKCBw YWdlLCAmZC0+cGFnZV9saXN0ICkKPiA+IC0gICAgICAgIHsKPiA+IC0gICAgICAgICAgICB1bnNp Z25lZCBsb25nIG1mbiA9IG1mbl94KHBhZ2VfdG9fbWZuKHBhZ2UpKTsKPiA+IC0gICAgICAgICAg ICB1bnNpZ25lZCBsb25nIGRmbiA9IG1mbl90b19nbWZuKGQsIG1mbik7Cj4gPiAtICAgICAgICAg ICAgdW5zaWduZWQgaW50IG1hcHBpbmcgPSBJT01NVUZfcmVhZGFibGU7Cj4gPiAtICAgICAgICAg ICAgaW50IHJldDsKPiA+IC0KPiA+IC0gICAgICAgICAgICBpZiAoICgocGFnZS0+dS5pbnVzZS50 eXBlX2luZm8gJiBQR1RfY291bnRfbWFzaykgPT0gMCkgfHwKPiA+IC0gICAgICAgICAgICAgICAg ICgocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKQo+ID4gLSAgICAgICAg ICAgICAgICAgID09IFBHVF93cml0YWJsZV9wYWdlKSApCj4gPiAtICAgICAgICAgICAgICAgIG1h cHBpbmcgfD0gSU9NTVVGX3dyaXRhYmxlOwo+ID4gLQo+ID4gLSAgICAgICAgICAgIHJldCA9IGlv bW11X21hcChkLCBfZGZuKGRmbiksIF9tZm4obWZuKSwgMCwgbWFwcGluZywKPiA+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmZsdXNoX2ZsYWdzKTsKPiA+IC0KPiA+IC0gICAgICAgICAg ICBpZiAoICFyYyApCj4gPiAtICAgICAgICAgICAgICAgIHJjID0gcmV0Owo+ID4gLQo+ID4gLSAg ICAgICAgICAgIGlmICggIShpKysgJiAweGZmZmZmKSApCj4gPiAtICAgICAgICAgICAgICAgIHBy b2Nlc3NfcGVuZGluZ19zb2Z0aXJxcygpOwo+ID4gLSAgICAgICAgfQo+IAo+IERvbid0IHlvdSBu ZWVkIHRvIGFkZCB0aGUgZG9tYWluIHBhZ2VzIHRvIHRoZSBwYWdlLXRhYmxlcz8KPiAKCk5vdCBh bnkgbW9yZS4KCj4gaW9tbXVfaHdkb21faW5pdCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG1lbW9yeSBm b3IgdGhlIGRvbWFpbiBoYXMgYmVlbgo+IGFkZGVkLiBNYXliZSB0aGlzIGlzIGZpbmUgYmVjYXVz ZSB0aGUgaW9tbXUgd291bGQgYmUgZW5hYmxlZCBlYXJsaWVyCj4gYW5kIHRodXMgcGFnZXMgYWRk ZWQgdG8gdGhlIGRvbWFpbiB3b3VsZCBhbHJlYWR5IGJlIGFkZGVkIHRvIHRoZSBpb21tdQo+IHBh Z2UtdGFibGVzIGlmIHJlcXVpcmVkPwoKWWVzLCB0aGF0J3MgcmlnaHQuIEJlY2F1c2Ugd2UgZG9u J3QgaGF2ZSB0aGUgbGF0ZSBpbml0IGFueSBtb3JlLCB0aGUgcGFnZXMgd2lsbCBiZSBhZGRlZCB0 byB0aGUgSU9NTVUgbWFwcGluZ3Mgd2hlbiB0aGV5IGdldCBhZGRlZCB0byB0aGUgZG9tYWluLgoK ICBQYXVsCgo+IAo+IFRoYW5rcywgUm9nZXIuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0 cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz dGluZm8veGVuLWRldmVs