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.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, 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 7CEB0C4332B for ; Sun, 22 Mar 2020 17:30:03 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 02D31206F8 for ; Sun, 22 Mar 2020 17:30:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="2KZ0QY/9" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 02D31206F8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvmarm-bounces@lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 783104B0BA; Sun, 22 Mar 2020 13:30:02 -0400 (EDT) X-Virus-Scanned: at lists.cs.columbia.edu Authentication-Results: mm01.cs.columbia.edu (amavisd-new); dkim=softfail (fail, message has been altered) header.i=@kernel.org Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1WnMRzVFev5q; Sun, 22 Mar 2020 13:29:59 -0400 (EDT) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 7A72E4B0B2; Sun, 22 Mar 2020 13:29:59 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 7117E4A500 for ; Sun, 22 Mar 2020 13:29:58 -0400 (EDT) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id tyF19U4vn+ww for ; Sun, 22 Mar 2020 13:29:56 -0400 (EDT) Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 608EF4A4FC for ; Sun, 22 Mar 2020 13:29:56 -0400 (EDT) Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0611C206F8; Sun, 22 Mar 2020 17:29:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1584898195; bh=W+Y2Cc2cpqm0lcj7EFVkwjUIjubssJeptGWj8rg1sfA=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=2KZ0QY/9ZThy7BaAJIBc6N40gv6k2lVjmcSk7UqGZTK0hWgfGbGI37eLd7Foiaqy1 ZjzhsOD8jhNDtwhu139FtluADKfVu+B3JJNoAyN4yhr816k59hAf5S7wzsYlpJ2o9m NjYncHDgeUe7IyxXqDpTPeMO/Ln3/AJ53hQrKQAo= Received: from disco-boy.misterjones.org ([51.254.78.96] helo=www.loen.fr) by disco-boy.misterjones.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1jG4Q5-00EjO4-35; Sun, 22 Mar 2020 17:29:53 +0000 MIME-Version: 1.0 Date: Sun, 22 Mar 2020 17:29:52 +0000 From: Marc Zyngier To: Lev Aronsky Subject: Re: [PATCH] KVM: arm64: Add support for IDSR exits to userspace In-Reply-To: <20200322142010.GA3337@ewr1-t1.small.x86-01> References: <20200322093650.50621-1-aronsky@gmail.com> <61ae80130b47dc23d00d5010eccee0b2@kernel.org> <20200322142010.GA3337@ewr1-t1.small.x86-01> Message-ID: X-Sender: maz@kernel.org User-Agent: Roundcube Webmail/1.3.10 X-SA-Exim-Connect-IP: 51.254.78.96 X-SA-Exim-Rcpt-To: aronsky@gmail.com, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, julien.thierry.kdev@gmail.com, suzuki.poulose@arm.com, catalin.marinas@arm.com, will@kernel.org, pbonzini@redhat.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Cc: Catalin Marinas , Paolo Bonzini , Will Deacon , kvmarm@lists.cs.columbia.edu X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu T24gMjAyMC0wMy0yMiAxNDoyMCwgTGV2IEFyb25za3kgd3JvdGU6Cj4gT24gU3VuLCBNYXIgMjIs IDIwMjAgYXQgMTE6MzQ6MzVBTSArMDAwMCwgTWFyYyBaeW5naWVyIHdyb3RlOgo+PiBIaSBMZXYs Cj4+IAo+PiBUaGFua3MgZm9yIHRoaXMuCj4+IAo+PiBPbiAyMDIwLTAzLTIyIDA5OjM2LCBhcm9u c2t5QGdtYWlsLmNvbSB3cm90ZToKPj4gPiBGcm9tOiBMZXYgQXJvbnNreSA8YXJvbnNreUBnbWFp bC5jb20+Cj4+ID4KPj4gPiBBcyBwZXIgQVJNIERESSAwNDg3RS5hLCBzZWN0aW9uIEQxMi4zLjIs IHRoZXJlIGNhbiBiZSB2YXJpb3VzCj4+ID4gc3lzdGVtIHJlZ2lzdGVycyB0aGF0IGFyZSBJTVBM RU1FTlRBVElPTiBERUZJTkVELgo+PiA+Cj4+ID4gU28gZmFyLCBLVk0gd291bGQgaW5qZWN0IGFu IHVuZGVmaW5lZCBpbnN0cnVjdGlvbiBpbnRvIHRoZSBndWVzdCwKPj4gPiB3aGVuZXZlciBhY2Nl c3MgdG8gYW4gaW1wbGVtZW50YXRpb24gZGVmaW5lZCBzeXN0ZW0gcmVnaXN0ZXIgKGZyb20KPj4g PiBoZXJlIG9uIHJlZmVycmVkIHRvIGFzIElEU1IpIHdhcyB0cmFwcGVkLiBUaGlzIG1ha2VzIHNl bnNlLCBzaW5jZSBhCj4+ID4gZ2VuZXJhbC1wdXJwb3NlIE9TIHByb2JhYmx5IHNob3VsZG4ndCBy ZWx5IG9uIHRoZSBleGlzdGVuY2Ugb2YgSURTUnMuCj4+ID4KPj4gPiBUaGlzIHBhdGNoIGludHJv ZHVjZXMgYW4gb3B0aW9uIHRvIGdpdmUgdXNlcnNwYWNlIGEgY2hhbmNlIHRvIGhhbmRsZQo+PiA+ IHRoZXNlIHRyYXBzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGVtdWxhdGUgc3BlY2lmaWMgYXJjaGl0 ZWN0dXJlcywgYW5kCj4+ID4gdmlydHVhbGl6ZSBvcGVyYXRpbmcgc3lzdGVtcyB0aGF0IHJlbHkg b24gdGhlIGV4aXN0ZW5jZSBvZiBzcGVjaWZpYwo+PiA+IElEU1JzLgo+PiAKPj4gRG8geW91IGhh dmUgYW4gZXhhbXBsZSBvZiBzdWNoIG9wZXJhdGluZyBzeXN0ZW1zPyBBbHNvLCBkbyB5b3UgaGF2 ZQo+PiBhbiBleGFtcGxlIHdoZXJlIHVzZXJzcGFjZSBjb3VsZCBhY3R1YWxseSBkbyBzb21ldGhp bmcgdXNlZnVsIGFib3V0Cj4+IHN1Y2ggYWNjZXNzLCBvdGhlciB0aGFuIG1heWJlIHRyZWF0aW5n IGl0IGFzIFJBWi9XST8KPiAKPiBJIHJhbiBpbnRvIHRoZSBpc3N1ZSB3aGVuIHdvcmtpbmcgb24g b3VyIGNvbXBhbnkncyBwcm9qZWN0LCB3aGljaCBhaW1zCj4gdG8gZW11bGF0ZSBBcHBsZSdzIGlP UyB1bmRlciBRRU1VLiBXaGlsZSBlbXVsYXRpb24gY3VycmVudGx5IHdvcmtzCj4gbmljZWx5LCB3 ZSB3ZXJlIGxvb2tpbmcgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBieSB1c2luZyBoYXJkd2FyZQo+ IHZpcnR1YWxpemF0aW9uLCBhbmQgdGhhdCdzIHdoZW4gd2UgcmFuIGludG8gdGhlIGlzc3VlIG9m Cj4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBzeXN0ZW0gcmVnaXN0ZXJzLCBzaW5jZSBpT1MgdXNl cyB0aG9zZS4gRnJhbmtseSwKPiBpbiBvdXIgY2FzZSwgd2UgZG9uJ3QgcmVhbGx5IGtub3cgdGhl IHB1cnBvc2Ugb2YgdGhvc2UgcmVnaXN0ZXJzLCBhcyAKPiBmYXIKPiBhcyB0aGUgaU9TIGtlcm5l bCBpcyBjb25jZXJuZWQuIFdoZW4gZW11bGF0aW5nIHRoZW0sIHdlIHRyZWF0IHRoZW0gYXMKPiBz aW1wbGUgNjQtYml0IHN0b3JhZ2UgYXJlYXMuIEl0J3MgcG9zc2libGUgdGhhdCB0cmVhdGluZyB0 aGVtIGFzIFJBWi9XSQo+IHdvdWxkIHdvcmssIGFzIHdlbGwuCgpJdCdzIG5vdCByZWFsbHkgcmVh c3N1cmluZywgaXMgaXQ/IDotLwoKPj4gPiBTaW1pbGFybHkgdG8gdGhlIHJlY2VudGx5IGludHJv ZHVjZWQgTklTViBleGl0cywgdGhpcyBpcyBhbiBBQkkgdG8KPj4gPiB1c2Vyc3BhY2UsIGFuZCBj b21lcyB3aXRoIGEgbWF0Y2hpbmcgbmV3IGNhcGFiaWxpdHkgdGhhdCBhbGxvd3MgdGhlCj4+ID4g Y29uZmlndXJhdGlvbiBvZiB0aGUgYmVoYXZpb3IuCj4+IAo+PiBUaGVzZSBhcmUgZGlmZmVyZW50 IGlzc3Vlczogb25lIGlzIGEgc2hvcnRjb21pbmcgb2YgdGhlIGFyY2hpdGVjdHVyZSwKPj4gdGhl IG90aGVyIGEgc2hvcnRjb21pbmcgKG9yIGh5cGVyc3BlY2lhbGl6YXRpb24pIG9mIHRoZSBndWVz dCBPUy4KPiAKPiBZb3UncmUgY29ycmVjdC4gSSBtZW50aW9uZWQgdGhlIE5JU1YgZXhpdHMgYmVj YXVzZSBteSBjb2RlIGlzIG1vZGVsZWQKPiBhZnRlciB0aGVtLCBhbmQgd2FzIGhvcGluZyBpdCB3 b3VsZCBtYWtlIGZvbGxvd2luZyBteSBjaGFuZ2VzIGVhc2llci4KCkl0IGRvZXMuIElUIGlzIGp1 c3QgdGhhdCB3b3UgZGlkIHNlZW0gdG8gY29uZmxhdGUgdGhlIHR3byB0aGluZ3MsIHdoaWNoCnRy aWdnZXJlZCBhbiBhbGxlcmdpYyByZWFjdGlvbi4uLiA7LSkKCj4+ID4gVGhpcyBwYXRjaCBpbnRy b2R1Y2VzIEtWTV9DQVBfQVJNX0lEU1JfVE9fVVNFUiwgd2hpY2ggY2FuIGJlIHVzZWQgdG8KPj4g PiBlbmFibGUgdXNlcnNwYWNlIGV4aXRzIGR1ZSB0byBhY2Nlc3MgdG8gSURTUnMuIEFkZGl0aW9u YWxseSwgaXQKPj4gPiBpbnRyb2R1Y2VzIGEgbWF0Y2hpbmcgbmV3IGV4aXQgcmVhc29uLCBLVk1f RVhJVF9BUk1fSURTUiwgdG8gcmVwb3J0Cj4+ID4gdGhvc2UgZXZlbnRzIHRvIHVzZXJzcGFjZS4g VXNlcnNwYWNlIGNhbiBjaG9vc2UgdG8gZW11bGF0ZSB0aGUgYWNjZXNzCj4+ID4gYmFzZWQgb24g dGhlIGFyY2hpdGVjdHVyZSByZXF1aXJlbWVudHMsIG9yIHJlZnVzZSB0byBlbXVsYXRlIGl0IGFu ZAo+PiAKPj4gcy9hcmNoaXRlY3R1cmUvaW1wbGVtZW50YXRpb24vCj4gCj4gU29ycnkgZm9yIHRo ZSBuZXdiaWUgcXVlc3Rpb24gLSBidXQgaG93IGRvIEkgY2hhbmdlIHRoZSBkZXNjcmlwdGlvbiAK PiBub3c/Cj4gSSB3aWxsIHVwbG9hZCBhbiB1cGRhdGVkIHBhdGNoLCBiYXNlZCBvbiB5b3VyIGZv bGxvd2luZyBjb21tZW50cywgYnV0Cj4gSSdtIG5vdCBzdXJlIGhvdyB0byBjaGFuZ2UgdGhlIG9y aWdpbmFsIGNvbW1pdCBkZXNjcmlwdGlvbiB0aGUgY29ycmVjdAo+IHdheS4KCmdpdCBjb21taXQg LS1hbWVuZAoKPiAKPj4gPiBsZXQgdGhlIGtlcm5lbCBjb250aW51ZSB3aXRoIHRoZSBkZWZhdWx0 IGJlaGF2aW9yIChpbmplY3RpbmcgYW4KPj4gPiB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24gZXhjZXB0 aW9uIGludG8gdGhlIGd1ZXN0KS4KPj4gPgo+PiA+IFNpZ25lZC1vZmYtYnk6IExldiBBcm9uc2t5 IDxhcm9uc2t5QGdtYWlsLmNvbT4KPj4gPiAtLS0KPj4gPiAgYXJjaC9hcm02NC9pbmNsdWRlL2Fz bS9rdm1fY29wcm9jLmggfCAgMSArCj4+ID4gIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hv c3QuaCAgIHwgIDYgKysrCj4+ID4gIGFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgICAgICAgICAg IHwgNjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KPj4gPiAgaW5jbHVkZS91YXBpL2xp bnV4L2t2bS5oICAgICAgICAgICAgfCAxNCArKysrKysKPj4gPiAgdG9vbHMvaW5jbHVkZS91YXBp L2xpbnV4L2t2bS5oICAgICAgfCAxNCArKysrKysKPj4gPiAgdmlydC9rdm0vYXJtL2FybS5jICAg ICAgICAgICAgICAgICAgfCAxMSArKysrKwo+PiA+ICA2IGZpbGVzIGNoYW5nZWQsIDExMSBpbnNl cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4+ID4KPj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02 NC9pbmNsdWRlL2FzbS9rdm1fY29wcm9jLmgKPj4gPiBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20v a3ZtX2NvcHJvYy5oCj4+ID4gaW5kZXggMDE4NWVlOGI4YjVlLi4zNGI0NWVmZmZlNTIgMTAwNjQ0 Cj4+ID4gLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fY29wcm9jLmgKPj4gPiArKysg Yi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9jb3Byb2MuaAo+PiA+IEBAIC0zMyw2ICszMyw3 IEBAIGludCBrdm1faGFuZGxlX2NwMTRfNjQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QK Pj4gPiBrdm1fcnVuICpydW4pOwo+PiA+ICBpbnQga3ZtX2hhbmRsZV9jcDE1XzMyKHN0cnVjdCBr dm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bik7Cj4+ID4gIGludCBrdm1faGFuZGxl X2NwMTVfNjQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuKTsKPj4g PiAgaW50IGt2bV9oYW5kbGVfc3lzX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBr dm1fcnVuICpydW4pOwo+PiA+ICtpbnQga3ZtX2hhbmRsZV9pZHNyX3JldHVybihzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4pOwo+PiA+Cj4+ID4gICNkZWZpbmUga3Zt X2NvcHJvY190YWJsZV9pbml0IGt2bV9zeXNfcmVnX3RhYmxlX2luaXQKPj4gPiAgdm9pZCBrdm1f c3lzX3JlZ190YWJsZV9pbml0KHZvaWQpOwo+PiA+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2lu Y2x1ZGUvYXNtL2t2bV9ob3N0LmgKPj4gPiBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hv c3QuaAo+PiA+IGluZGV4IGQ4N2FhNjA5ZDJiNi4uOTUxYzdlNmZlYzhiIDEwMDY0NAo+PiA+IC0t LSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+PiA+ICsrKyBiL2FyY2gvYXJt NjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+PiA+IEBAIC05MSw2ICs5MSwxMiBAQCBzdHJ1Y3Qg a3ZtX2FyY2ggewo+PiA+ICAJICogc3VwcG9ydGVkLgo+PiA+ICAJICovCj4+ID4gIAlib29sIHJl dHVybl9uaXN2X2lvX2Fib3J0X3RvX3VzZXI7Cj4+ID4gKwo+PiA+ICsJLyoKPj4gPiArCSAqIElm IHdlIGVuY291bnRlciBhbiBhY2Nlc3MgdG8gYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBzeXN0 ZW0KPj4gPiArCSAqIHJlZ2lzdGVyLCByZXBvcnQgdGhpcyB0byB1c2VyIHNwYWNlLgo+PiA+ICsJ ICovCj4+ID4gKwlib29sIHJldHVybl9pZHNyX3RvX3VzZXI7Cj4+IAo+PiBJZiB3ZSBhcmUgZ29p bmcgdG8gYWRkIGZsYWdzIGxpa2UgdGhpcywgbWF5YmUgd2UnZCBiZSBiZXR0ZXIgb2ZmIAo+PiBo YXZpbmcKPj4gYWN0dWFsIGZsYWdzIGFzIGFuIHVuc2lnbmVkIGxvbmcuCj4gCj4gSSBkb24ndCBt aW5kIGVpdGhlciB3YXkgLSBhcyBJIG1lbnRpb25lZCwgSSB0cmllZCB0byBmb2xsb3cgdGhlIE5J U1YKPiBleGl0cyBzdHlsZSwgYW5kIHRoZXJlZm9yZSB1c2VkIGBib29sYC4gU2hvdWxkIEkga2Vl cCBpdCwgY2hhbmdlIGl0IHRvCj4gYHVuc2lnbmVkIGxvbmdgLCBvciBjaGFuZ2UgYm90aCBtaW5l IGFuZCB0aGUgTklTViBmbGFnIHRvIGB1bnNpZ25lZAo+IGxvbmdgPwoKQ2hhbmdlIHJldHVybl9u aXN2X2lvX2Fib3J0X3RvX3VzZXIgdG8gInVuc2lnbmVkIGxvbmcgZmxhZ3MiLCBhZGQgYSBuZXcK UkVUVVJOX05JU1ZfSU9fQUJPUlRfVE9fVVNFUiBmbGFnIGFuZCByZXBhaW50IGFsbCB0aGUgY3Vy cmVudCB1c2VycwppbiBhIHByZWxpbWluYXJ5IHBhdGNoLgoKPiAKPj4gPiAgfTsKPj4gPgo+PiA+ ICAjZGVmaW5lIEtWTV9OUl9NRU1fT0JKUyAgICAgNDAKPj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9h cm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKPj4gPiBpbmRl eCAzZTkwOWIxMTdmMGMuLjBjNDA4NTQ2ZWQ3YyAxMDA2NDQKPj4gPiAtLS0gYS9hcmNoL2FybTY0 L2t2bS9zeXNfcmVncy5jCj4+ID4gKysrIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwo+PiA+ IEBAIC0yMjMzLDYgKzIyMzMsMTYgQEAgaW50IGt2bV9oYW5kbGVfY3AxNF8zMihzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUsCj4+ID4gc3RydWN0IGt2bV9ydW4gKnJ1bikKPj4gPiAgCQkJCU5VTEwsIDAp Owo+PiA+ICB9Cj4+ID4KPj4gPiArc3RhdGljIGludCBoYW5kbGVfaW1wX2RlZl9zeXNfcmVnKHN0 cnVjdCBrdm1fdmNwdSAqdmNwdSwKPj4gPiArCQkJCSAgc3RydWN0IHN5c19yZWdfcGFyYW1zICpw YXJhbXMpCj4+ID4gK3sKPj4gPiArCWlmICh2Y3B1LT5rdm0tPmFyY2gucmV0dXJuX2lkc3JfdG9f dXNlcikKPj4gPiArCQlyZXR1cm4gMDsKPj4gPiArCj4+ID4gKwlrdm1faW5qZWN0X3VuZGVmaW5l ZCh2Y3B1KTsKPj4gPiArCXJldHVybiAxOwo+PiA+ICt9Cj4+ID4gKwo+PiA+ICBzdGF0aWMgYm9v bCBpc19pbXBfZGVmX3N5c19yZWcoc3RydWN0IHN5c19yZWdfcGFyYW1zICpwYXJhbXMpCj4+ID4g IHsKPj4gPiAgCS8vIFNlZSBBUk0gRERJIDA0ODdFLmEsIHNlY3Rpb24gRDEyLjMuMgo+PiA+IEBA IC0yMjU1LDcgKzIyNjUsNyBAQCBzdGF0aWMgaW50IGVtdWxhdGVfc3lzX3JlZyhzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUsCj4+ID4gIAlpZiAobGlrZWx5KHIpKSB7Cj4+ID4gIAkJcGVyZm9ybV9hY2Nl c3ModmNwdSwgcGFyYW1zLCByKTsKPj4gPiAgCX0gZWxzZSBpZiAoaXNfaW1wX2RlZl9zeXNfcmVn KHBhcmFtcykpIHsKPj4gPiAtCQlrdm1faW5qZWN0X3VuZGVmaW5lZCh2Y3B1KTsKPj4gPiArCQly ZXR1cm4gaGFuZGxlX2ltcF9kZWZfc3lzX3JlZyh2Y3B1LCBwYXJhbXMpOwo+PiA+ICAJfSBlbHNl IHsKPj4gPiAgCQlwcmludF9zeXNfcmVnX21zZyhwYXJhbXMsCj4+ID4gIAkJCQkgICJVbnN1cHBv cnRlZCBndWVzdCBzeXNfcmVnIGFjY2VzcyBhdDogJWx4IFslMDhseF1cbiIsCj4+ID4gQEAgLTIz MDksOSArMjMxOSw2MyBAQCBpbnQga3ZtX2hhbmRsZV9zeXNfcmVnKHN0cnVjdCBrdm1fdmNwdSAq dmNwdSwKPj4gPiBzdHJ1Y3Qga3ZtX3J1biAqcnVuKQo+PiA+Cj4+ID4gIAlpZiAoIXBhcmFtcy5p c193cml0ZSkKPj4gPiAgCQl2Y3B1X3NldF9yZWcodmNwdSwgUnQsIHBhcmFtcy5yZWd2YWwpOwo+ PiA+ICsKPj4gPiArCWlmICh1bmxpa2VseSghcmV0KSkgewo+PiA+ICsJCXJ1bi0+YXJtX2lkc3Iu T3AwID0gcGFyYW1zLk9wMDsKPj4gPiArCQlydW4tPmFybV9pZHNyLk9wMSA9IHBhcmFtcy5PcDE7 Cj4+ID4gKwkJcnVuLT5hcm1faWRzci5DUm4gPSBwYXJhbXMuQ1JuOwo+PiA+ICsJCXJ1bi0+YXJt X2lkc3IuQ1JtID0gcGFyYW1zLkNSbTsKPj4gPiArCQlydW4tPmFybV9pZHNyLk9wMiA9IHBhcmFt cy5PcDI7Cj4+ID4gKwkJcnVuLT5hcm1faWRzci5yZWd2YWwgPSBwYXJhbXMucmVndmFsOwo+PiA+ ICsJCXJ1bi0+YXJtX2lkc3IuaXNfd3JpdGUgPSBwYXJhbXMuaXNfd3JpdGU7Cj4+ID4gKwkJcnVu LT5hcm1faWRzci5pc19uZWVkZWQgPSAxOwo+PiA+ICsJCXJ1bi0+YXJtX2lkc3IuaXNfaGFuZGxl ZCA9IDA7Cj4+IAo+PiBUaGlzIHNtZWxscyBvZiBhIHN0YXRlIG1hY2hpbmUuIFBsZWFzZSBkb2N1 bWVudCB0aGUgdmFyaW91cyBzdGF0ZXMuCj4gCj4gVGhpcyBmb2xsb3dzIHRoZSBzdGF0ZXMgZnJv bSBNTUlPLiBIb3dldmVyLCBpbiBNTUlPLCB0aGUgc3RhdGUgaXMgc3BsaXQKPiBiZXR3ZWVuIHRo ZSBrdm1fcnVuIHN0cnVjdHVyZSBhbmQgdGhlIGt2bV92Y3B1IHN0cnVjdHVyZSAobW1pb19uZWVk ZWQKPiBmaWVsZCkuIEJ1dCBNTUlPIGlzIG11Y2ggbW9yZSB3aWRlbHkgdXNlZCwgY29tcGFyZWQg dG8gdGhpcyBuZXcgCj4gZmVhdHVyZS4KPiBJIGRpZG4ndCBmZWVsIGxpa2UgcG9sbHV0aW5nIHRo ZSBrdm1fdmNwdSBzdHJ1Y3R1cmUgd2l0aCBtaW5vciBmbGFncywKPiBhbmQgY2hvc2UgdG8gcHV0 IHRoZSBpc19uZWVkZWQgZmxhZyBpbnNpZGUga3ZtX3J1bi4KPiAKPiBpc19oYW5kbGVkIGlzIG15 IG93biBhZGRpdGlvbi4gV2hlcmUgd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIGRvY3VtZW50Cj4g dGhpcz8gSGVyZSwgb3IgaW4gdGhlIGhlYWRlciBmaWxlPwoKVGhlIGhlYWRlciBmaWxlIHdvdWxk IGJlIHRoZSByaWdodCBwbGFjZSBpbmRlZWQuCgo+IAo+PiA+ICsKPj4gPiArCQlydW4tPmV4aXRf cmVhc29uID0gS1ZNX0VYSVRfQVJNX0lEU1I7Cj4+ID4gKwl9Cj4+ID4gKwo+PiA+ICAJcmV0dXJu IHJldDsKPj4gPiAgfQo+PiA+Cj4+ID4gKy8qKgo+PiA+ICsgKiBrdm1faGFuZGxlX2lkc3JfcmV0 dXJuIC0tIEhhbmRsZSBzeW5jaW5nIHJlZ2lzdGVyIHN0YXRlIGFmdGVyIHVzZXIKPj4gPiArICog ICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHNwYWNlIGVtdWxhdGlvbgo+PiA+ICsgKgo+ PiA+ICsgKiBAdmNwdTogVGhlIFZDUFUgcG9pbnRlcgo+PiA+ICsgKiBAcnVuOiAgVGhlIFZDUFUg cnVuIHN0cnVjdCBjb250YWluaW5nIHRoZSBzeXN0ZW0gcmVnaXN0ZXIgZGF0YQo+PiA+ICsgKi8K Pj4gPiAraW50IGt2bV9oYW5kbGVfaWRzcl9yZXR1cm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBz dHJ1Y3Qga3ZtX3J1biAqcnVuKQo+PiA+ICt7Cj4+ID4gKwlpbnQgUnQgPSBrdm1fdmNwdV9zeXNf Z2V0X3J0KHZjcHUpOwo+PiA+ICsKPj4gPiArCS8qIERldGVjdCBhbiBhbHJlYWR5IGhhbmRsZWQg SURTUiByZXR1cm4gKi8KPj4gPiArCWlmICh1bmxpa2VseSghcnVuLT5hcm1faWRzci5pc19uZWVk ZWQpKQo+PiA+ICsJCXJldHVybiAwOwo+PiA+ICsKPj4gPiArCXJ1bi0+YXJtX2lkc3IuaXNfbmVl ZGVkID0gMDsKPj4gPiArCj4+ID4gKwlpZiAoIXJ1bi0+YXJtX2lkc3IuaXNfaGFuZGxlZCkgewo+ PiA+ICsJCS8qCj4+ID4gKwkJICogVXNlciBzcGFjZSBjb3VsZG4ndCBoYW5kbGUgdGhpcyByZWdp c3RlciAtIHJldmVydCB0bwo+PiA+ICsJCSAqIGRlZmF1bHQgYmVoYXZpb3IsIHdoaWNoIGlzIGlu amVjdGluZyBhbiB1bmRlZmluZWQKPj4gPiArCQkgKiBpbnN0cnVjdGlvbiBleGNlcHRpb24gaW50 byB0aGUgZ3Vlc3QuCj4+ID4gKwkJICovCj4+ID4gKwkJa3ZtX2luamVjdF91bmRlZmluZWQodmNw dSk7Cj4+ID4gKwkJcmV0dXJuIDA7Cj4+ID4gKwl9Cj4+ID4gKwo+PiA+ICsJaWYgKCFydW4tPmFy bV9pZHNyLmlzX3dyaXRlKQo+PiA+ICsJCXZjcHVfc2V0X3JlZyh2Y3B1LCBSdCwgcnVuLT5hcm1f aWRzci5yZWd2YWwpOwo+PiA+ICsKPj4gPiArCS8qCj4+ID4gKwkgKiBUaGUgYWNjZXNzIHRvIHRo ZSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHN5c3RlbSByZWdpc3RlciBpcwo+PiA+IGVtdWxhdGVk Cj4+ID4gKwkgKiBhbmQgc2hvdWxkIG5vdCBiZSByZS1leGVjdXRlZCBpbiB0aGUgZ3Vlc3QuCj4+ ID4gKwkgKi8KPj4gPiArCWt2bV9za2lwX2luc3RyKHZjcHUsIGt2bV92Y3B1X3RyYXBfaWxfaXMz MmJpdCh2Y3B1KSk7Cj4+ID4gKwo+PiA+ICsJcmV0dXJuIDA7Cj4+ID4gK30KPj4gPiArCj4+ID4g LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgo+PiA+ICAgKiBVc2Vyc3BhY2UgQVBJCj4+ID4gKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCj4+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0u aCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAo+PiA+IGluZGV4IDRiOTVmOWEzMWEyZi4uNTIw YWE4YzE3MzFlIDEwMDY0NAo+PiA+IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAo+PiA+ ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAo+PiA+IEBAIC0yMzYsNiArMjM2LDcgQEAg c3RydWN0IGt2bV9oeXBlcnZfZXhpdCB7Cj4+ID4gICNkZWZpbmUgS1ZNX0VYSVRfSU9BUElDX0VP SSAgICAgICAyNgo+PiA+ICAjZGVmaW5lIEtWTV9FWElUX0hZUEVSViAgICAgICAgICAgMjcKPj4g PiAgI2RlZmluZSBLVk1fRVhJVF9BUk1fTklTViAgICAgICAgIDI4Cj4+ID4gKyNkZWZpbmUgS1ZN X0VYSVRfQVJNX0lEU1IgICAgICAgICAyOQo+PiA+Cj4+ID4gIC8qIEZvciBLVk1fRVhJVF9JTlRF Uk5BTF9FUlJPUiAqLwo+PiA+ICAvKiBFbXVsYXRlIGluc3RydWN0aW9uIGZhaWxlZC4gKi8KPj4g PiBAQCAtNDAwLDYgKzQwMSwxOCBAQCBzdHJ1Y3Qga3ZtX3J1biB7Cj4+ID4gIAkJCV9fdTY0IGVz cl9pc3M7Cj4+ID4gIAkJCV9fdTY0IGZhdWx0X2lwYTsKPj4gPiAgCQl9IGFybV9uaXN2Owo+PiA+ ICsJCS8qIEtWTV9FWElUX0FSTV9JRFNSICovCj4+ID4gKwkJc3RydWN0IC8qIGJhc2VkIG9uIHN5 c19yZWdfcGFyYW1zICovIHsKPj4gCj4+IFdlbGwsIG5vdCBxdWl0ZSBzeXNfcmVnX3BhcmFtcy4g WW91IGhhdmUgZGlmZmVyZW50IGZpZWxkcyBoZXJlLgo+IAo+IFRydWUuIFNob3VsZCBJIGRyb3Ag dGhlIG1lbnRpb24gb2Ygc3lzX3JlZ19wYXJhbXMgYWx0b2dldGhlciwgdGhlbj8KClllcywgcGxl YXNlLgoKPiAKPj4gPiArCQkJX191OCBPcDA7Cj4+ID4gKwkJCV9fdTggT3AxOwo+PiA+ICsJCQlf X3U4IENSbjsKPj4gPiArCQkJX191OCBDUm07Cj4+ID4gKwkJCV9fdTggT3AyOwo+PiA+ICsJCQlf X3U2NCByZWd2YWw7Cj4+ID4gKwkJCV9fdTggaXNfd3JpdGU7Cj4+ID4gKwkJCV9fdTggaXNfbmVl ZGVkOyAvKiBTZXQgYnkga3ZtIG9uIGV4aXQgKi8KPj4gPiArCQkJX191OCBpc19oYW5kbGVkOyAv KiBTZXQgYnkgdXNlciBzcGFjZSBvbiBlbnRyeSAqLwo+PiAKPj4gUGxlYXNlIGRvY3VtZW50IHRo ZSB2YWxpZCB2YWx1ZXMuCj4gCj4gV2lsbCBkby4KPiAKPj4gPiArCQl9IGFybV9pZHNyOwo+PiA+ ICAJCS8qIEZpeCB0aGUgc2l6ZSBvZiB0aGUgdW5pb24uICovCj4+ID4gIAkJY2hhciBwYWRkaW5n WzI1Nl07Cj4+ID4gIAl9Owo+PiA+IEBAIC0xMDEwLDYgKzEwMjMsNyBAQCBzdHJ1Y3Qga3ZtX3Bw Y19yZXNpemVfaHB0IHsKPj4gPiAgI2RlZmluZSBLVk1fQ0FQX0FSTV9OSVNWX1RPX1VTRVIgMTc3 Cj4+ID4gICNkZWZpbmUgS1ZNX0NBUF9BUk1fSU5KRUNUX0VYVF9EQUJUIDE3OAo+PiA+ICAjZGVm aW5lIEtWTV9DQVBfUzM5MF9WQ1BVX1JFU0VUUyAxNzkKPj4gPiArI2RlZmluZSBLVk1fQ0FQX0FS TV9JRFNSX1RPX1VTRVIgMTgwCj4+ID4KPj4gPiAgI2lmZGVmIEtWTV9DQVBfSVJRX1JPVVRJTkcK Pj4gPgo+PiA+IGRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKPj4g PiBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAo+PiA+IGluZGV4IGYwYTE2YjRhZGJi ZC4uZDk4MzBjYTkyZTM1IDEwMDY0NAo+PiA+IC0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51 eC9rdm0uaAo+PiA+ICsrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAo+PiAKPj4g SW4gZ2VuZXJhbCwgd2UgbGVhdmUgdGhlIHRvb2xzIG1haW50YWluZXIgdG8gdXBkYXRlIHRoZWly IGNvcHkgb2YgdGhlIAo+PiBVQVBJCj4+IGluZGVwZW5kZW50bHkuCj4gCj4gSSBzZWUuIEkgd2ls bCByZXZlcnQgdGhlIGNoYW5nZXMgdW5kZXIgdWFwaS4KCldlbGwsIHVuZGVyIHRvb2xzL2luY2x1 ZGUvdWFwaS4gWW91IHJlYWxseSB3YW50IHRvIGtlZXAgdGhlIGluY2x1ZGUvdWFwaQpvbmVzLgoK PiAKPj4gPiBAQCAtMjM2LDYgKzIzNiw3IEBAIHN0cnVjdCBrdm1faHlwZXJ2X2V4aXQgewo+PiA+ ICAjZGVmaW5lIEtWTV9FWElUX0lPQVBJQ19FT0kgICAgICAgMjYKPj4gPiAgI2RlZmluZSBLVk1f RVhJVF9IWVBFUlYgICAgICAgICAgIDI3Cj4+ID4gICNkZWZpbmUgS1ZNX0VYSVRfQVJNX05JU1Yg ICAgICAgICAyOAo+PiA+ICsjZGVmaW5lIEtWTV9FWElUX0FSTV9JRFNSICAgICAgICAgMjkKPj4g Pgo+PiA+ICAvKiBGb3IgS1ZNX0VYSVRfSU5URVJOQUxfRVJST1IgKi8KPj4gPiAgLyogRW11bGF0 ZSBpbnN0cnVjdGlvbiBmYWlsZWQuICovCj4+ID4gQEAgLTQwMCw2ICs0MDEsMTggQEAgc3RydWN0 IGt2bV9ydW4gewo+PiA+ICAJCQlfX3U2NCBlc3JfaXNzOwo+PiA+ICAJCQlfX3U2NCBmYXVsdF9p cGE7Cj4+ID4gIAkJfSBhcm1fbmlzdjsKPj4gPiArCQkvKiBLVk1fRVhJVF9BUk1fSURTUiAqLwo+ PiA+ICsJCXN0cnVjdCAvKiBzeXNfcmVnX3BhcmFtcyAqLyB7Cj4+ID4gKwkJCV9fdTggT3AwOwo+ PiA+ICsJCQlfX3U4IE9wMTsKPj4gPiArCQkJX191OCBDUm47Cj4+ID4gKwkJCV9fdTggQ1JtOwo+ PiA+ICsJCQlfX3U4IE9wMjsKPj4gPiArCQkJX191NjQgcmVndmFsOwo+PiA+ICsJCQlfX3U4IGlz X3dyaXRlOwo+PiA+ICsJCQlfX3U4IGlzX2FhcmNoMzI7Cj4+ID4gKwkJCV9fdTggaXNfMzJiaXQ7 CS8qIE9ubHkgdmFsaWQgaWYgaXNfYWFyY2gzMiBpcyB0cnVlICovCj4+ID4gKwkJfSBhcm1faWRz cjsKCkZ1bm5pbHkgZW5vdWdoLCB0aGUgYWJvdmUgZG9lc24ndCBtYXRjaCB0aGUgaW5jbHVkZS91 YXBpIG9uZSEKCj4+ID4gIAkJLyogRml4IHRoZSBzaXplIG9mIHRoZSB1bmlvbi4gKi8KPj4gPiAg CQljaGFyIHBhZGRpbmdbMjU2XTsKPj4gPiAgCX07Cj4+ID4gQEAgLTEwMDksNiArMTAyMiw3IEBA IHN0cnVjdCBrdm1fcHBjX3Jlc2l6ZV9ocHQgewo+PiA+ICAjZGVmaW5lIEtWTV9DQVBfUFBDX0dV RVNUX0RFQlVHX1NTVEVQIDE3Ngo+PiA+ICAjZGVmaW5lIEtWTV9DQVBfQVJNX05JU1ZfVE9fVVNF UiAxNzcKPj4gPiAgI2RlZmluZSBLVk1fQ0FQX0FSTV9JTkpFQ1RfRVhUX0RBQlQgMTc4Cj4+ID4g KyNkZWZpbmUgS1ZNX0NBUF9BUk1fSURTUl9UT19VU0VSIDE4MAo+PiA+Cj4+ID4gICNpZmRlZiBL Vk1fQ0FQX0lSUV9ST1VUSU5HCj4+ID4KPj4gPiBkaWZmIC0tZ2l0IGEvdmlydC9rdm0vYXJtL2Fy bS5jIGIvdmlydC9rdm0vYXJtL2FybS5jCj4+ID4gaW5kZXggZDY1YTBmYWE0NmQ4Li4zZTVlYjBm YWRiMGMgMTAwNjQ0Cj4+ID4gLS0tIGEvdmlydC9rdm0vYXJtL2FybS5jCj4+ID4gKysrIGIvdmly dC9rdm0vYXJtL2FybS5jCj4+ID4gQEAgLTg3LDYgKzg3LDEwIEBAIGludCBrdm1fdm1faW9jdGxf ZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sCj4+ID4gIAkJciA9IDA7Cj4+ID4gIAkJa3ZtLT5h cmNoLnJldHVybl9uaXN2X2lvX2Fib3J0X3RvX3VzZXIgPSB0cnVlOwo+PiA+ICAJCWJyZWFrOwo+ PiA+ICsJY2FzZSBLVk1fQ0FQX0FSTV9JRFNSX1RPX1VTRVI6Cj4+ID4gKwkJciA9IDA7Cj4+ID4g KwkJa3ZtLT5hcmNoLnJldHVybl9pZHNyX3RvX3VzZXIgPSB0cnVlOwo+PiA+ICsJCWJyZWFrOwo+ PiA+ICAJZGVmYXVsdDoKPj4gPiAgCQlyID0gLUVJTlZBTDsKPj4gPiAgCQlicmVhazsKPj4gPiBA QCAtMTk1LDYgKzE5OSw3IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVj dCBrdm0gKmt2bSwKPj4gPiBsb25nIGV4dCkKPj4gPiAgCWNhc2UgS1ZNX0NBUF9BUk1fSVJRX0xJ TkVfTEFZT1VUXzI6Cj4+ID4gIAljYXNlIEtWTV9DQVBfQVJNX05JU1ZfVE9fVVNFUjoKPj4gPiAg CWNhc2UgS1ZNX0NBUF9BUk1fSU5KRUNUX0VYVF9EQUJUOgo+PiA+ICsJY2FzZSBLVk1fQ0FQX0FS TV9JRFNSX1RPX1VTRVI6Cj4+ID4gIAkJciA9IDE7Cj4+ID4gIAkJYnJlYWs7Cj4+ID4gIAljYXNl IEtWTV9DQVBfQVJNX1NFVF9ERVZJQ0VfQUREUjoKPj4gPiBAQCAtNjU2LDYgKzY2MSwxMiBAQCBp bnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1Cj4+ID4gKnZjcHUsIHN0 cnVjdCBrdm1fcnVuICpydW4pCj4+ID4gIAkJCXJldHVybiByZXQ7Cj4+ID4gIAl9Cj4+ID4KPj4g PiArCWlmIChydW4tPmV4aXRfcmVhc29uID09IEtWTV9FWElUX0FSTV9JRFNSKSB7Cj4+ID4gKwkJ cmV0ID0ga3ZtX2hhbmRsZV9pZHNyX3JldHVybih2Y3B1LCB2Y3B1LT5ydW4pOwo+PiA+ICsJCWlm IChyZXQpCj4+ID4gKwkJCXJldHVybiByZXQ7Cj4+ID4gKwl9Cj4+ID4gKwo+PiA+ICAJaWYgKHJ1 bi0+aW1tZWRpYXRlX2V4aXQpCj4+ID4gIAkJcmV0dXJuIC1FSU5UUjsKPj4gCj4+IFdoYXQncyBz ZWVtIHRvIGJlIG1pc3NpbmcgaXMgdGhlIHNpbWlsYXIgaGFuZGxpbmcgb2YgMzJiaXQgQ1AxNSAK Pj4gYWNjZXNzZXMsCj4+IGFzIEhDUl9FTDIuVElEQ1AgYWxzbyB0cmFwcyB0aGVzZSAoZnJvbSBB Uk12OCBBUk0gRV9hKToKPj4gCj4+IDxxdW90ZT4KPj4gSW4gQUFyY2gzMiBzdGF0ZSwgTUNSIGFu ZCBNUkMgYWNjZXNzIHRvIGluc3RydWN0aW9ucyB3aXRoIHRoZSAKPj4gZm9sbG93aW5nCj4+IGVu Y29kaW5ncyBhcmUKPj4gdHJhcHBlZCBhbmQgcmVwb3J0ZWQgdXNpbmcgRUMgc3luZHJvbWUgMHgw MzoKPj4g4oCUIEFsbCBjb3Byb2M9PXAxNSwgQ1JuPT1jOSwgb3BjMSA9PSB7MC03fSwgQ1JtID09 IHtjMC1jMiwgYzUtYzh9LCBvcGMyIAo+PiA9PQo+PiB7MC03fS4KPj4g4oCUIEFsbCBjb3Byb2M9 PXAxNSwgQ1JuPT1jMTAsIG9wYzEgPT17MC03fSwgQ1JtID09IHtjMCwgYzEsIGM0LCBjOH0sIAo+ PiBvcGMyID09Cj4+IHswLTd9Lgo+PiDigJQgQWxsIGNvcHJvYz09cDE1LCBDUm49PWMxMSwgb3Bj MT09ezAtN30sIENSbSA9PSB7YzAtYzgsIGMxNX0sIG9wYzIgPT0KPj4gezAtN30uCj4+IDwvcXVv dGU+Cj4+IAo+PiBUaGVyZSBpcyBhbHNvIHRoZSBjYXNlIG9mIEVMMCBhY2Nlc3NlcywgZm9yIHdo aWNoIHRoZSBBUk0gQVJNIHN0cm9uZ2x5Cj4+IHN1Z2dlc3QgdGhhdAo+PiB0aGVzZSBhcmUgaGFu ZGxlZCBhcyBhbiBVTkRFRiwgYW5kIEkgd2lzaCBLVk0gd291bGQga2VlcCBlbmZvcmNpbmcgCj4+ IHRoaXMuCj4+IAo+PiBGaW5hbGx5LCB0aGVyZSdzIGEgbXVjaCB3aWRlciBkaXNjdXNzaW9uIHRv IGJlIGhhZCBvbiB3aGV0aGVyIHdlIHdhbnQgCj4+IGVuYWJsZQo+PiBub24tYXJjaGl0ZWN0dXJh bCBndWVzdHMuIEkgbXVzdCBzYXkgdGhhdCBJJ20gbm90IG92ZXJseSBrZWVuIG9uIGl0LCAKPj4g YnV0IEknbQo+PiB3aWxsaW5nIHRvIGhlYXIgYWJvdXQgdGhlIHZhcmlvdXMgdXNlIGNhc2VzIHlv dSBjb3VsZCBoYXZlIGluIG1pbmQuIEkgCj4+IGd1ZXNzCj4+IHRoYXQgdGhpcyBpcyBhaW1lZCBh dCB0aGUgZW11bGF0aW9uIG9mIHZlcnRpY2FsbHkgaW50ZWdyYXRlZCBvcGVyYXRpbmcKPj4gc3lz dGVtcywKPj4gYnV0IHRoYXQncyBvbmx5IGEgZ3Vlc3MuLi4KPj4gCj4+IFRoYW5rcywKPj4gCj4+ ICAgICAgICAgTS4KPj4gLS0KPj4gSmF6eiBpcyBub3QgZGVhZC4gSXQganVzdCBzbWVsbHMgZnVu bnkuLi4KPiAKPiBJIG11c3QgYWRtaXQgdGhhdCBJIGhhdmVuJ3QgdGFrZW4gYW4gaW4tZGVwdGgg bG9vayBhdCAzMi1iaXQgYWNjZXNzZXMsCj4gc2luY2UgaXQgd2FzIG91dCBvZiBzY29wZSBvZiBv dXIgcHJvamVjdCAod2hpY2ggY3VycmVudGx5IGZvY3VzZXMgb25seQo+IG9uIG5ld2lzaCB2ZXJz aW9ucyBvZiBpT1MpLiBJTU8sIHRoZSBwYXRjaCBpcyB1c2VmdWwgYXMgaXMsIGV2ZW4gCj4gd2l0 aG91dAo+IHRoZSAzMi1iaXQgc3VwcG9ydCAtIGJ1dCBJIGNhbiBzZWUgaG93IGl0IGxvb2tzIGxp a2UgYSBqb2IgaGFsZi1kb25lLgoKVGhlIDMyYml0IGd1ZXN0IHN1cHBvcnQgZGVmaW5pdGVseSBp c24ndCBvcHRpb25hbC4gSSBhcHByZWNpYXRlIHRoYXQgeW91CmZvY3VzIG9uIDY0Yml0LCBidXQg aGF2aW5nIGRpZmZlcmVudCBiZWhhdmlvdXJzIGJldHdlZW4gdGhlIHR3byBpcyBub3QKcmVhbGx5 IHNvbWV0aGluZyBJIHdhbnQgdG8gZW50ZXJ0YWluLgoKPiBVbmZvcnR1bmF0ZWx5LCB3ZSBkb24n dCBoYXZlIGEgMzItYml0IHNldHVwIHRoYXQgd291bGQgYWxsb3cgdXMgdG8KPiBwcm9wZXJseSB0 ZXN0IHRoZSBjb2RlIGJlZm9yZSBzdWJtaXR0aW5nLiBJIGNvdWxkIGNvcHkgdGhlIGNoYW5nZXMg Cj4gb3ZlciwKPiBidXQgc3VibWl0dGluZyB0aGUgcGF0Y2hlcyB3aXRob3V0IGFjdHVhbGx5IHRl c3RpbmcgdGhlbSBzZWVtcwo+IGlycmVzcG9uc2libGUgdG8gbWUuCgpXZWxsLCB5b3Ugc2VlbSB0 byBhdCBsZWFzdCBoYXZlIFFFTVUuIFRoaXMgc2hvdWxkIGJlIGVub3VnaCB0byB0ZXN0Cipzb21l dGhpbmcqLiBBbHNvLCBpZiB5b3UncmUgdGVzdGluZyB0aGlzIHdpdGggS1ZNLCB3aGF0IGFyZSB5 b3UgcnVubmluZwpLVk0gb24/Cgo+IEludGVyZXN0aW5nbHksIEVMMCBhY2Nlc3MgdG8gaW1wbGVt ZW50YXRpb24tZGVmaW5lZCByZWdpc3RlcnMgY3VycmVudGx5Cj4gcmVzdWx0cyBpbiBhbiBVTkRF RiwgZXZlbiB0aG91Z2ggSSBleHBlY3RlZCBpdCB0byBiZSBwYXNzZWQgb24gdG8gb3VyCj4gaGFu ZGxlciAoSSBzYXcgdGhpcyBiZWhhdmlvciB3aXRoIGEgY3VzdG9tIHN5c3RlbSByZWdpc3RlciB3 ZSBkZWZpbmVkCj4gZm9yIGRpcmVjdCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGh5cGVydmlzb3Ig ZnJvbSBhIHVzZXItbW9kZSBwcm9ncmFtIAo+IHdlCj4gZGV2ZWxvcGVkKS4gSSB0cmllZCBmb2xs b3dpbmcgdGhlIEFSTSBkb2N1bWVudGF0aW9uIHRvIGZpZ3VyZSBvdXQgd2hhdAo+IGNvdWxkIGNh dXNlIHN1Y2ggYSBiZWhhdmlvciwgYnV0IHNvIGZhciBJJ20gYXQgYSBsb3NzLgoKSGVyZSdzIHlv dXIgYW5zd2VyOgoKIldoZW4gdGhlIHZhbHVlIG9mIEhDUl9FTDIuVElEQ1AgaXMgMSwgaXQgaXMg SU1QTEVNRU5UQVRJT04gREVGSU5FRCAKd2hldGhlcgphbnkgb2YgdGhpcyBmdW5jdGlvbmFsaXR5 IGFjY2Vzc2VkIGZyb20gRUwwIGlzIHRyYXBwZWQgdG8gRUwyLiBJZiBpdCBpcyAKbm90LAp0aGVu IGl0IGlzIFVOREVGSU5FRCwgYW5kIGFueSBhdHRlbXB0IHRvIGFjY2VzcyBpdCBmcm9tIEVMMCBn ZW5lcmF0ZXMgYW4KZXhjZXB0aW9uIHRoYXQgaXMgdGFrZW4gdG8gRUwxLiIKCkFsc28sIEkgZG9u J3QgcmVhbGx5IHVuZGVyc3RhbmQgaG93IHlvdSBkZWZpbmUgYSBjdXN0b20gc3lzdGVtIHJlZ2lz dGVyLgpVbmxlc3MgeW91J3JlIHdyaXRpbmcgdGhlIEhXIGFzIHdlbGwsIG9mIGNvdXJzZS4KCj4g QXMgZmFyIGFzIHRoZSB3aG9sZSBpZGVhIG9mIHN1cHBvcnRpbmcgbm9uLWFyY2hpdGVjdHVyYWwg Z3Vlc3RzLi4uIAo+IEZpcnN0Cj4gb2YgYWxsLCB5b3UncmUgYWJzb2x1dGVseSBzcG90LW9uIHJl Z2FyZGluZyB5b3VyIGd1ZXNzIC0gYXMgbWVudGlvbmVkCj4gYWJvdmUsIHdlJ3JlIGF0dGVtcHRp bmcgdG8gdmlydHVhbGl6ZSBpT1MuIEkgYmVsaWV2ZSB0aGF0IGluIHRoZSAKPiBjdXJyZW50Cj4g c3RhdGUgb2YgdGhlIHBhdGNoLCBnaXZlbiBpdHMgb3B0LWluIG5hdHVyZSBhbmQgbGltaXRlZCBz Y29wZQo+IChpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJlZ2lzdGVycyksIGl0cyBiZW5lZml0cyAo dGhlIHBvdGVudGlhbCB0bwo+IHN1Y2Nlc3NmdWxseSBleGVjdXRlIG5vbi1hcmNoaXRldHVyYWwg Z3Vlc3RzKSBvdXR3ZWlnaCB0aGUgbmVnYXRpdmVzCj4gKGV4dHJhIGNvZGUgaW4gdGhlIGtlcm5l bCwgdGhhdCdzIHVubmVjZXNzYXJ5IHRvIG1vc3Qgb2YgdGhlIGd1ZXN0cwo+IHVuZGVyIEFSTS9L Vk0pLiBJIHdvdWxkIGJlIGhhcHB5IHRvIGdpdmUgbW9yZSBleGFtcGxlcyAob3RoZXIgdGhhbiBp T1MpCj4gdGhhdCB1c2UgdGhlc2UgcmVnaXN0ZXJzLCBidXQgdW5mb3J0dW5hdGVseSwgSSdtIG5v dCBhd2FyZSBvZiBhbnkgc3VjaAo+IHN5c3RlbXMgKHRob3VnaCBJIHdvdWxkbid0IGJlIHN1cnBy aXNlZCBpZiBTYW1zdW5nIGhhcyBzb21lCj4gRXh5bm9zLXNwZWNpZmMgY29kZSwgYnV0IHRoYXQn cyBqdXN0IGEgc2hvdCBpbiB0aGUgZGFyaykuCgpPaCwgYWJzb2x1dGVseSAqYWxsKiBpbXBsZW1l bnRhdGlvbnMgaGF2ZSBJTVBERUYgcmVnaXN0ZXJzLiBZb3UganVzdApoYXZlIHRvIGxvb2sgYXQg dGhlIFRSTSBmb3IgYW55IG9mIHRoZSBBUk0gaW1wbGVtZW50YXRpb25zLCB3aGljaApkb2N1bWVu dCBhIG51bWJlciBvZiB0aGVtLgoKQW5kIGFzIGZvciBoYXZpbmcgbm9uLWFyY2hpdGVjdHVyYWwg Y29kZSBpbiB0aGUga2VybmVsLCB0aGF0J3Mgb2YgCmNvdXJzZSwKYXMgeW91J3ZlIGd1ZXNzZWQs IGEgdG90YWwgbm8tbm8tbm8uIFdlIG1hZGUgdGhhdCBtaXN0YWtlIG9uIDMyYml0LCBhbmQKc3Rv cHBlZCBxdWlja2x5IQoKTXkgd29ycnkgaXMgbW9yZSB0aGF0IHlvdSdkIG5lZWQgdG8gc3RhcnQg ZmFraW5nIGEgbG90IG1vcmUgdGhhbiBqdXN0IGEKY291cGxlIG9mIElNUERFUCBzeXNyZWdzLiBB bGwgdGhlIElEIHJlZ2lzdGVycywgZm9yIGEgc3RhcnQuIFRoZW4gZmluZAp3YXlzIHRvIGRlYWwg d2l0aCB0aGUgaG9zdCdzIGVycmF0YSwgdGhhdCB0aGUgZ3Vlc3QgaGFzIHRvIGtub3cgYWJvdXQK KGRlc3BpdGUgdGhlIElEIHJlZ2lzdGVycyBiZWluZyBmYWtlZCkuIEFuZCBtYWtlIHN1cmUgdGhh dCBubyB3b3JrYXJvdW5kCnRoYXQgaGFwcGVuIGluIHRoZSBndWVzdCByZXN1bHQgaW4gYW55dGhp bmcgdW5leHBlY3RlZC4KClNvbWUgb2YgdGhhdCBpcyBwb3NzaWJsZSAodGhlIElEIHJlZ2lzdGVy IGJpdCwgYWx0aG91Z2ggaXQgcmVxdWlyZXMgc29tZQp2ZXJ5IHNlcmlvdXMgd29yayksIGFuZCB5 b3UgY291bGQgY3Jvc3MgeW91ciBmaW5nZXJzIGhvcGluZyB0aGF0IG5vIAplcnJhdHVtCndpbGwg Z2V0IGluIHRoZSB3YXkuIEJ1dCBpdCBzZWVtcyBwcmV0dHkgZnJhZ2lsZS4uLgoKVGhhbmtzLAoK ICAgICAgICAgTS4KLS0gCkphenogaXMgbm90IGRlYWQuIEl0IGp1c3Qgc21lbGxzIGZ1bm55Li4u Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmt2bWFybSBt YWlsaW5nIGxpc3QKa3ZtYXJtQGxpc3RzLmNzLmNvbHVtYmlhLmVkdQpodHRwczovL2xpc3RzLmNz LmNvbHVtYmlhLmVkdS9tYWlsbWFuL2xpc3RpbmZvL2t2bWFybQo=