From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoffer Dall Subject: Re: [RFC] ARM: New (Xen) VGIC design document Date: Thu, 12 Oct 2017 14:05:31 +0200 Message-ID: <20171012120531.GA8927@cbox> References: <20171011143303.27453-1-andre.przywara@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e2cEx-0005qW-Rz for xen-devel@lists.xenproject.org; Thu, 12 Oct 2017 12:05:28 +0000 Received: by mail-wm0-f49.google.com with SMTP id m72so12576417wmc.1 for ; Thu, 12 Oct 2017 05:05:25 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20171011143303.27453-1-andre.przywara@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andre Przywara Cc: Stefano Stabellini , Marc Zyngier , Eric Auger , Julien Grall , xen-devel@lists.xenproject.org, Christoffer Dall List-Id: xen-devel@lists.xenproject.org SGkgQW5kcmUsCgpPbiBXZWQsIE9jdCAxMSwgMjAxNyBhdCAwMzozMzowM1BNICswMTAwLCBBbmRy ZSBQcnp5d2FyYSB3cm90ZToKPiBIaSwKPiAKPiAoQ0M6aW5nIHNvbWUgS1ZNL0FSTSBmb2xrcyBp bnZvbHZlZCBpbiB0aGUgVkdJQykKClZlcnkgbmljZSB3cml0ZXVwIQoKSSBhZGRlZCBhIGJ1bmNo IG9mIGNvbW1lbnRzLCBtb3N0bHkgZm9yIHRoZSB3cml0aW5nIGFuZCBjbGFyaXR5LCBJIGhvcGUK aXQgaGVscHMuCgo+IAo+IHN0YXJ0aW5nIHdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSBJVFMgc3Vw cG9ydCB3ZSB3ZXJlIHNlZWluZyBtb3JlIGFuZAo+IG1vcmUgaXNzdWVzIHdpdGggdGhlIGN1cnJl bnQgaW1wbGVtZW50YXRpb24gb2Ygb3VyIEFSTSBHZW5lcmljIEludGVycnVwdAo+IENvbnRyb2xs ZXIgKEdJQykgZW11bGF0aW9uLCB0aGUgVkdJQy4KPiBBbW9uZyBvdGhlciBhcHByb2FjaGVzIHRv IGZpeCB0aG9zZSBpc3N1ZXMgaXQgd2FzIHByb3Bvc2VkIHRvIGNvcHkgdGhlCj4gVkdJQyBlbXVs YXRpb24gdXNlZCBpbiBLVk0uIFRoaXMgb25lIHdhcyBzdWZmZXJpbmcgZnJvbSB2ZXJ5IHNpbWls YXIKPiBpc3N1ZXMsIGFuZCBhIGNsZWFuIGRlc2lnbiBmcm9tIHNjcmF0Y2ggbGVhZCB0byBhIHZl cnkgcm9idXN0IGFuZAo+IGNhcGFibGUgcmUtaW1wbGVtZW50YXRpb24uIEludGVyZXN0aW5nbHkg dGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBmYWlybHkKPiBzZWxmLWNvbnRhaW5lZCwgc28gaXQgc2Vl bXMgZmVhc2libGUgdG8gY29weSBpdC4gSG9wZWZ1bGx5IHdlIG9ubHkgbmVlZAo+IG1pbm9yIGFk anVzdG1lbnRzLCBwb3NzaWJseSB3ZSBjYW4gZXZlbiBjb3B5IGl0IHZlcmJhdGltIHdpdGggc29t ZQo+IGFkZGl0aW9uYWwgZ2x1ZSBsYXllciBjb2RlLgo+IFN0ZWZhbm8gYXNrZWQgZm9yIGdldHRp bmcgYSBkZXNpZ24gb3ZlcnZpZXcsIHRvIGFzc2VzcyB0aGUgZmVhc2liaWxpdHkKPiBvZiBjb3B5 aW5nIHRoZSBLVk0gY29kZSB3aXRob3V0IHJldmlld2luZyB0b25zIG9mIGNvZGUgaW4gdGhlIGZp cnN0Cj4gcGxhY2UuCj4gU28gdG8gZm9sbG93IFhlbiBydWxlcyBmb3IgbmV3IGZlYXR1cmVzLCB0 aGlzIGRlc2lnbiBkb2N1bWVudCBiZWxvdyBpcwo+IGFuIGF0dGVtcHQgdG8gZGVzY3JpYmUgdGhl IGN1cnJlbnQgS1ZNIFZHSUMgZGVzaWduIC0gaW4gYSBoeXBlcnZpc29yCj4gYWdub3N0aWMgc2Vz c2lvbi4gSXQgaXMgYSBiaXQgb2YgYSByZXRyby1maXQgZGVzaWduIGRlc2NyaXB0aW9uLCBhcyBp dAo+IGlzIG5vdCBzdHJpY3RseSBmb3J3YXJkLWxvb2tpbmcgb25seSwgYnV0IGFjdHVhbGx5IGRl c2NyaWJpbmcgdGhlCj4gZXhpc3RpbmcgaW1wbGVtZW5hdGlvbiBbMV0uCj4gCj4gUGxlYXNlIGhh dmUgYSBsb29rIGFuZCBsZXQgbWUga25vdzoKPiAxKSBpZiB0aGlzIGRvY3VtZW50IGhhcyB0aGUg cmlnaHQgc2NvcGUKPiAyKSBpZiB0aGlzIGRvY3VtZW50IGhhcyB0aGUgcmlnaHQgbGV2ZWwgb2Yg ZGV0YWlsCj4gMykgaWYgdGhlcmUgYXJlIHBvaW50cyBtaXNzaW5nIGZyb20gdGhlIGRvY3VtZW50 Cj4gMykgaWYgdGhlIGRlc2lnbiBpbiBnZW5lcmFsIGlzIGEgZml0Cj4gCj4gQXBwcmVjaWF0ZSBh bnkgZmVlZGJhY2shCj4gCj4gQ2hlZXJzLAo+IEFuZHJlLgo+IAo+IC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IAo+IFZHSUMgZGVzaWduCj4gPT09PT09PT09PT0KPiAK PiBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGVzaWduIG9mIGFuIEFSTSBHZW5lcmljIElu dGVycnVwdCBDb250cm9sbGVyIChHSUMpCj4gZW11bGF0aW9uLiBJdCBpcyBtZWFudCB0byBlbXVs YXRlIGEgR0lDIGZvciBhIGd1ZXN0IGluIGFuIHZpcnR1YWwgbWFjaGluZSwKPiB0aGUgY29tbW9u IG5hbWUgZm9yIHRoYXQgaXMgVkdJQyAoZnJvbSAidmlydHVhbCBHSUMiKS4KPiAKPiBUaGlzIGRl c2lnbiB3YXMgdGhlIHJlc3VsdCBvZiBhIG9uZS13ZWVrLWxvbmcgZGVzaWduIHNlc3Npb24gd2l0 aCBzb21lCj4gZW5naW5lZXJzIGluIGEgcm9vbSwgdHJpZ2dlcmVkIGJ5IGV2ZXItaW5jcmVhc2lu ZyBkaWZmaWN1bHRpZXMgaW4gbWFpbnRhaW5pbmcKPiB0aGUgZXhpc3RpbmcgR0lDIGVtdWxhdGlv biBpbiB0aGUgS1ZNIGh5cGVydmlzb3IuIFRoZSBkZXNpZ24gZXZlbnR1YWxseQo+IG1hdGVyaWFs aXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSBWR0lDIGltcGxlbWVudGF0aW9uIGluIHRoZSBMaW51eCBr ZXJuZWwKPiAobWVyZ2VkIGludG8gTGludXggdjQuNykuIEFzIG9mIExpbnV4IHY0LjggdGhlIHBy ZXZpb3VzIFZHSUMgaW1wbGVtZW50YXRpb24KPiB3YXMgcmVtb3ZlZCwgc28gaXQgaXMgbm93IHRo ZSBjdXJyZW50IGNvZGUgdXNlZCBieSBMaW51eC4KPiBBbHRob3VnaCBiZWluZyB1c2VkIGluIEtW TSwgdGhlIGFjdHVhbCBkZXNpZ24gb2YgdGhpcyBWR0lDIGlzIHJhdGhlciBoeXBlcnZpc29yCj4g YWdub3N0aWMgYW5kIGNhbiBiZSB1c2VkIGJ5IG90aGVyIGh5cGVydmlzb3JzIGFzIHdlbGwsIGlu IHBhcnRpY3VsYXIgZm9yIFhlbi4KPiAKPiBHSUMgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gc3Vw cG9ydAo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gCj4gVGhlIEFSTSBH ZW5lcmljIEludGVycnVwdCBDb250cm9sbGVyIChzaW5jZSB2Mikgc3VwcG9ydHMgdGhlIHZpcnR1 YWxpemF0aW9uCj4gZXh0ZW5zaW9ucywgd2hpY2ggYWxsb3dzIHNvbWUgcGFydHMgb2YgdGhlIGlu dGVycnVwdCBsaWZlIGN5Y2xlIHRvIGJlIGhhbmRsZWQKPiBwdXJlbHkgaW5zaWRlIHRoZSBndWVz dCB3aXRob3V0IGV4aXRpbmcgaW50byB0aGUgaHlwZXJ2aXNvci4KPiBJbiB0aGUgR0lDdjIgYW5k IEdJQ3YzIGFyY2hpdGVjdHVyZSB0aGlzIGNvdmVycyBtb3N0bHkgdGhlICJpbnRlcnJ1cHQKPiBh Y2tub3dsZWRnZW1lbnQiLCAicHJpb3JpdHkgZHJvcCIgYW5kICJpbnRlcnJ1cHQgZGVhY3RpdmF0 ZSIgYWN0aW9ucy4KPiBTbyBhIGd1ZXN0IGNhbiBoYW5kbGUgbW9zdCBvZiB0aGUgaW50ZXJydXB0 IHByb2Nlc3NpbmcgY29kZSB3aXRob3V0Cj4gbGVhdmluZyBFTDEgYW5kIHRyYXBwaW5nIGludG8g dGhlIGh5cGVydmlzb3IuIFRvIGFjY29tcGxpc2gKPiB0aGlzLCB0aGUgR0lDIGhvbGRzIHNvIGNh bGxlZCAibGlzdCByZWdpc3RlcnMiIChMUnMpLCB3aGljaCBzaGFkb3cgdGhlCj4gaW50ZXJydXB0 IHN0YXRlIGZvciBhbnkgdmlydHVhbCBpbnRlcnJ1cHQuIEluamVjdGluZyBhbiBpbnRlcnJ1cHQg dG8gYSBndWVzdAo+IGludm9sdmVzIHNldHRpbmcgdXAgb25lIExSIHdpdGggdGhlIGludGVycnVw dCBudW1iZXIsIGl0cyBwcmlvcml0eSBhbmQgaW5pdGlhbAo+IHN0YXRlIChtb3N0bHkgInBlbmRp bmciKSwgdGhlbiBlbnRlcmluZyB0aGUgZ3Vlc3QuIEFueSBFT0kgcmVsYXRlZCBhY3Rpb24KPiBm cm9tIHdpdGhpbiB0aGUgZ3Vlc3QganVzdCBhY3RzIG9uIHRob3NlIExScywgdGhlIGh5cGVydmlz b3IgY2FuIGxhdGVyIHVwZGF0ZQo+IHRoZSB2aXJ0dWFsIGludGVycnVwdCBzdGF0ZSB3aGVuIHRo ZSBndWVzdCBleGlzdHMgdGhlIG5leHQgdGltZSAoZm9yIHdoYXRldmVyCj4gcmVhc29uKS4KPiBC dXQgZGVzcGl0ZSB0aGUgR0lDIGhhcmR3YXJlIGhlbHBpbmcgb3V0IGhlcmUsIHRoZSB3aG9sZSBp bnRlcnJ1cHQKPiBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgaXMgbm90IHZpcnR1YWxpemVkIGF0 IGFsbCBhbmQgbmVlZHMgdG8gYmUgZW11bGF0ZWQKPiBieSB0aGUgaHlwZXJ2aXNvciAtIG9yIGFu b3RoZXIgcmVsYXRlZCBzb2Z0d2FyZSBjb21wb25lbnQsIGZvciBpbnN0YW5jZSBhCj4gdXNlcmxh bmQgZW11bGF0b3IuIFRoaXMgc28gY2FsbGVkICJkaXN0cmlidXRvciIgcGFydCBvZiB0aGUgR0lD IGNvbnNpc3RzIG9mCj4gbWVtb3J5IG1hcHBlZCByZWdpc3RlcnMsIHdoaWNoIGNhbiBiZSB0cmFw cGVkIGJ5IHRoZSBoeXBlcnZpc29yLCBzbyBhbnkgZ3Vlc3QKPiBhY2Nlc3MgY2FuIGJlIGVtdWxh dGVkIGluIHRoZSB1c3VhbCB3YXkuCj4gCj4gVkdJQyBkZXNpZ24gbW90aXZhdGlvbgo+IC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KPiAKPiBBIEdJQyBlbXVsYXRpb24gdGh1cyBuZWVkcyB0byB0YWtl IGNhcmUgb2YgdGhvc2UgYml0czoKPiAKPiAtIHRyYXAgR0lDIGRpc3RyaWJ1dG9yIE1NSU8gYWNj ZXNzZXMgYW5kIHNoYWRvdyB0aGUgY29uZmlndXJhdGlvbiBzZXR1cAo+ICAgKGVuYWJsZWQvZGlz YWJsZWQsIGxldmVsL2VkZ2UsIHByaW9yaXR5LCBhZmZpbml0eSkgZm9yIHZpcnR1YWwgaW50ZXJy dXB0cwo+IC0gaGFuZGxlIGluY29taW5nIGhhcmR3YXJlIGFuZCB2aXJ0dWFsIGludGVycnVwdCBy ZXF1ZXN0cyBhbmQgaW5qZWN0IHRoZQo+ICAgYXNzb2NpYXRlZCB2aXJ0dWFsIGludGVycnVwdCBi eSBtYW5pcHVsYXRpbmcgb25lIG9mIHRoZSBsaXN0IHJlZ2lzdGVycwo+IC0gdHJhY2sgdGhlIHN0 YXRlIG9mIGEgdmlydHVhbCBpbnRlcnJ1cHQgYnkgaW5zcGVjdGluZyB0aGUgTFJzIGFmdGVyIHRo ZQo+ICAgZ3Vlc3QgaGFzIGV4aXRlZCwgcG9zc2libHkgYWRqdXN0aW5nIHRoZSBzaGFkb3dlZCB2 aXJ0dWFsIGludGVycnVwdCBzdGF0ZQo+IAo+IERlc3BpdGUgdGhlIGRpc3RyaWJ1dG9yIE1NSU8g cmVnaXN0ZXIgZW11bGF0aW9uIGJlaW5nIGEgc2l6ZWFibGUgY2h1bmsgb2YKPiB0aGUgZW11bGF0 aW9uLCBpdCBpcyBhY3R1YWxseSBub3QgZG9taW5hbnQgaWYgbG9va2luZyBhdCB0aGUgZnJlcXVl bmN5IGF0Cj4gd2hpY2ggaXQgaXMgYWNjZXNzZWQuIE5vcm1hbGx5IHRoZSBpbnRlcnJ1cHQgY29u ZmlndXJhdGlvbiBpcyBkb25lIGF0IGJvb3QKPiB0aW1lIG9yIHVwb24gaW5pdGlhbGlzaW5nIHRo ZSBkZXZpY2UgKGRyaXZlciksIGJ1dCByYXJlbHkgZHVyaW5nIHRoZSBhY3R1YWwKPiBydW4gdGlt ZSBvZiBhIHN5c3RlbS4gSW5qZWN0aW5nIGFuZCBFT0ktaW5nIGludGVycnVwdHMgaG93ZXZlciBo YXBwZW5zIG11Y2gKPiBtb3JlIG9mdGVuLiBBIGdvb2QgZW11bGF0aW9uIGFwcHJvYWNoIHNob3Vs ZCB0aHVzIGZvY3VzIG9uIHRyYWNraW5nIHRoZSB2aXJ0dWFsCj4gaW50ZXJydXB0IHN0YXRlIGVm ZmljaWVudGx5LCBhbGxvd2luZyBxdWljayBoYW5kbGluZyBvZiBpbmNvbWluZyBhbmQgRU9JLWVk Cj4gaW50ZXJydXB0cy4KCkkgd291bGQgYWxzbyBzYXkgdGhhdCB0aGUgYXJjaGl0ZWN0dXJlIGZv ciB0aGUgR0lDIGluY2x1ZGVzIGEgcmVsYXRpdmVseQpoaWdoIG51bWJlciBvZiBjb3JuZXIgY2Fz ZXMgYW5kIGludmFyaWFudHMgdGhhdCBtYXkgbm90IGJlIHZpb2xhdGVkLCBhbmQKYmVpbmcgY29t cGxldGVseSBhcmNoaXRlY3R1cmUgY29tcGxpYW50IHdhcyBvdXIgZmlyc3QgcmVxdWlyZW1lbnQs IHRoZQpzZWNvbmQgcmVxdWlyZW1lbnQgd2FzIHRvIHN1cHBvcnQgZWZmaWNpZW50IGludGVycnVw dCBsaWZlIGN5Y2xlCm1hbmFnZW1lbnQgYW5kIHRvIGJlIGFibGUgdG8gcXVpY2tseSB0ZWxsIHdo aWNoIChpZiBhbnkpIGludGVycnVwdHMgbXVzdApiZSBwcmVzZW50ZWQgdG8gYSB2aXJ0dWFsIENQ VS4KCj4gCj4gVGhlIGFjdHVhbCBpbnRlcnJ1cHQgc3RhdGUgdHJhY2tpbmcgY2FuIGJlIHF1aXRl IHRyaWNreSBpbiBwYXJ0cy4gSW50ZXJydXB0Cj4gaW5qZWN0aW9ucyBjYW4gYmUgaW5kZXBlbmRl bnQgZnJvbSB0aGUgZ3Vlc3QgZW50cnkvZXhpdCBwb2ludHMsIGFsc28gTU1JTwo+IGNvbmZpZ3Vy YXRpb24gYWNjZXNzZXMgY291bGQgYmUgdHJpZ2dlcmVkIGJ5IGFueSBWQ1BVIGF0IGFueSBwb2lu dCBpbiB0aW1lLgo+IENoYW5naW5nIGludGVycnVwdCBDUFUgYWZmaW5pdHkgYWRkcyB0byB0aGUg Y29tcGxpY2F0aW9uLgo+IFRoaXMgbGVhZHMgdG8gbWFueSBjb2RlIHBhcnRzIHdoaWNoIGNvdWxk IHJ1biBpbiBwYXJhbGxlbCBhbmQgdGh1cyBjb250YWlucwo+IHNvbWUgcmFjZSBjb25kaXRpb25z LCBzbyBwcm9wZXIgbG9ja2luZyBiZWNvbWVzIGtleSBvZiBhIGdvb2QgZGVzaWduLgo+IEJ1dCBv bmUgaGFzIHRvIGNvbnNpZGVyIHRoYXQgaW50ZXJydXB0cyBpbiBnZW5lcmFsIGNhbiBiZSBjaGFy YWN0ZXJpc2VkCj4gYXMgYSByYXJlIGV2ZW50IC0gb3RoZXJ3aXNlIGEgZ3Vlc3Qgd291bGQgYmUg YnVzeSBoYW5kbGluZyBpbnRlcnJ1cHRzIGFuZCBjb3VsZAoKKGFjcm9zcyBhbGwgdmlydHVhbCBD UFVzKQoKPiBub3QgcHJvY2VzcyBhY3R1YWwgY29tcHV0YXRpb24gdGFza3MuCj4gVGhhdCdzIHdo eSB0aGUgaW50ZXJydXB0IHN0YXRlIHRyYWNraW5nIHNob3VsZCBmb2N1cyBvbiBhIGNsZWFyIGFu ZCByYWNlLWZyZWUKCm5pdDogbm90IHN1cmUgaXQgbWFrZXMgc2Vuc2UgdG8gdGFsayBhYm91dCBh IHJhY2UtZnJlZSBsb2NraW5nIHNjaGVtZS4KWW91IGhhdmUgbG9ja2luZyBpbmhlcmVudGx5IGJl Y2F1c2UgeW91IGhhdmUgcmFjZXM7IGxvY2tpbmcganVzdCBtYWtlcwpzdXJlIHRoYXQgdGhpbmdz IHRoYXQgcmFjZSBhbmQgYWNjZXNzIGRhdGEgY29uY3VycmVudGx5IGRvbid0IGNvcnJ1cHQKc3Rh Y2UgYW5kIHRoYXQgdGhlIHJhY2VzIGJlY29tZSBiZW5pZ24uCgo+IGxvY2tpbmcgc2NoZW1lLCB3 aXRob3V0IG5lZWRsZXNzbHkgb3B0aW1pc2luZyB0b28gbXVjaCBpbiB0aGlzIHJlc3BlY3QuCj4g RXhwZXJpZW5jZSBzaG93cyB0aGF0IHRoaXMgY29tcGxpY2F0ZXMgdGhlIGNvZGUgYW5kIGxlYWRz IHRvIHVuZGV0ZWN0ZWQgYW5kCj4gaGFyZC10by1kZWJ1ZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNo IGFmZmVjdCB0aGUgc3RhYmlsaXR5IG9mIHRoZSBzeXN0ZW0gaW4KPiBwb3NzaWJseSB1bnRlc3Rl ZCBjb3JuZXIgY2FzZXMuCgpJIHRoaW5rIGV4cGVyaWVuY2UgYWxzbyBzaG93cyB0aGF0IHRoZSBl eHBlY3RlZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcwpyZWFsbHkgd2VyZW4ndCB0aGVyZSBhdCBh bGwsIGFuZCBhbnkgb3B0aW1pemF0aW9uIGVmZm9ydHMgc2hvdWxkIGJlCmRyaXZlbiBieSBjbGVh ciBtZWFzdXJlbWVudHMgb2YgdGhlIHBhaW4gcG9pbnRzLCBmYWxsaW5nIGJhY2sgdG8gY2xhcml0 eQpvZiBpbXBsZW1lbnRhdGlvbiBhbmQgZWFzZSBvZiBtYWludGVuYW5jZSBmb3IgYWxsIG90aGVy IHBhcnRzIG9mIHRoZQppbXBsZW1lbnRhdGlvbi4KCj4gCj4gVkdJQyBkZXNpZ24gcHJpbmNpcGxl cwo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAKPiAjIyMgRGF0YSBzdHJ1Y3R1cmUKPiAKPiBU aGlzIFZHSUMgZGVzaWduIGlzIGJhc2VkIG9uIHRoZSBpZGVhIG9mIGhhdmluZyBvbmUgc3RydWN0 dXJlIHBlciB2aXJ0dWFsCj4gaW50ZXJydXB0LCBwcm90ZWN0ZWQgYnkgaXRzIG93biBsb2NrLiAK CkV2ZW4gbW9yZSBoaWdoIGxldmVsOiBUaGlzIFZHSUMgZGVzaWduIHdhcyBiYXNlZCBhcm91bmQg aGF2aW5nIGEgdmVyeQpjbGVhciBkYXRhIHN0cnVjdHVyZSBkZXNpZ24sIG5ldmVyIGR1cGxpY2F0 aW5nIHN0YXRlLCBhbmQgbWFraW5nIGl0CmFidW5kYW50bHkgY2xlYXIgaG93IHRoaW5ncyBhcmUg c3RydWN0dXJlZC4gIE9uZSB3YXkgb2YgYWNoaWV2aW5nIHRoYXQKaXMgdG8gaGF2ZSBhIHN0cnVj dHVyZSBwZXIgaW50ZXJydXB0LCBlYWNoIGhhdmluZyBpdHMgb3duIGxvY2suCgo+IEluIGFkZGl0 aW9uIHRoZXJlIGlzIGEgbGlzdCBwZXIgVkNQVSwKPiB3aGljaCBxdWV1ZXMgdGhlIGludGVycnVw dHMgd2hpY2ggdGhpcyBWQ1BVIHNob3VsZCBjb25zaWRlciBmb3IgaW5qZWN0aW9uLgoKbml0OiBT aG91bGQgeW91IGludHJvZHVjZSB0aGUgQVAgbGlzdCBuYW1lIGhlcmUsIGFuZCBzYXkgdGhhdCBp dCdzIHByb3RlY3RlZApieSB0aGUgVkNQVSBsb2NrPwoKPiBPbmUgaW50ZXJydXB0IGNhbiBvbmx5 IGJlIG9uIG9uZSBWQ1BVIGxpc3QgYXQgYW55IGdpdmVuIHBvaW50IGluIHRpbWUuCgpuaXQsIHdv cmRpbmc6IEFueSBpbnRlcnJ1cHQgY2FuIGJlIG9uIGF0IG1vc3Qgb25lIEFQIGxpc3QgYXQgYW55 IHBvaW50CmluIHRpbWUuCgo+IEZvciBwcml2YXRlIGludGVycnVwdHMgYW5kIFNQSXMgYSBzdGF0 aWMgYWxsb2NhdGlvbiBvZiB0aGlzIGRhdGEgc3RydWN0dXJlCgpuaXQ6IFBQSXMgYW5kIFNQSXMg KG9yIHByaXZhdGUgYW5kIHNoYXJlZCBpbnRlcnJ1cHRzKQoKPiB3b3VsZCBiZSBzdWZmaWNpZW50 LCBob3dldmVyIExQSXMgKHRyaWdnZXJlZCBieSBhICh2aXJ0dWFsKSBJVFMpIGhhdmUgYSB2ZXJ5 Cj4gZHluYW1pYyBhbmQgcG9zc2libHkgdmVyeSBzcGFyc2UgYWxsb2NhdGlvbiBzY2hlbWUsIHNv IHdlIG5lZWQgdG8gZGVhbCB3aXRoCj4gZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBkZS1hbGxvY2F0 aW9uIG9mIHRoaXMgc3RydWN0LiBUbyBhY2NvbW1vZGF0ZSB0aGlzCj4gdGhlcmUgaXMgYW4gYWRk aXRpb25hbCBsaXN0IGhlYWRlciB0byBsaW5rIGFsbCBMUElzLgo+IEFsc28gdGhlIExQSSBtYXBw aW5nIGFuZCB1bm1hcHBpbmcgY2FuIGhhcHBlbiBhc3luY2hyb25vdXNseSwgc28gd2UgbmVlZCB0 bwoKYXN5bmNocm9ub3VzbHkgdG8gd2hhdD8KCj4gcHJvcGVybHkgcmVmLWNvdW50IHRoZSBzdHJ1 Y3R1cmUgKGF0IGxlYXN0IGZvciBMUElzKSwgb3RoZXJ3aXNlIHNvbWUgY29kZSBwYXJ0cwoKbml0 LCB3b3JkaW5nOiByZWZlcmVuY2UgY291bnQuCgo+IHdvdWxkIHBvdGVudGlhbGx5IGVuZCB1cCB3 aXRoIHJlZmVyZW5jaW5nIGFuIGFscmVhZHkgZnJlZWQgcG9pbnRlci4KCkl0J3Mgbm90IG9ubHkg dGhhdCwgaXQncyB0aGF0IHlvdSBuZWVkIHRvIGtub3cgd2hlbiB0byBmcmVlIHRoaW5ncy4KVGhp cyBpcyB0aGUgYmFzaWMgaWRlYSBvZiByZWZlcmVuY2UgY291bnRpbmcgd2hpY2ggSSBkb24ndCB0 aGluayB5b3UKbmVlZCB0byBhcmd1ZSBmb3IgaW4gdGhpcyBkb2N1bWVudC4KCj4gCj4gVGhlIGNl bnRyYWwgZGF0YSBzdHJ1Y3R1cmUgaXMgY2FsbGVkIGBzdHJ1Y3QgdmdpY19pcnFgLCBhbmQsIGJl c2lkZSB0aGUKPiBleHBlY3RlZCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBkYXRhLCBjb250YWlu cyBhdCBsZWFzdCB0aGUgbG9jaywgYSBsaXN0Cj4gaGVhZGVyICh0byBiZSBhYmxlIHRvIGxpbmsg aXQgdG8gYSBWQ1BVKSBhbmQgYSByZWZjb3VudC4gQWxzbyBpdCBjb250YWlucwo+IHRoZSBpbnRl cnJ1cHQgbnVtYmVyICh0byBhY2NvbW1vZGF0ZSBmb3Igbm9uLWNvbnRpZ3VvdXMgaW50ZXJydXB0 IGFsbG9jYXRpb25zLAo+IGZvciBpbnN0YW5jZSBmb3IgTFBJcykuCj4gQmVzaWRlIHRob3NlIGVz c2VudGlhbCBlbGVtZW50cyBpdCBwcm92ZXMgd29ydGggdG8gc3RvcmUgKGEgcmVmZXJlbmNlIHRv KSB0aGUKPiBWQ1BVIHRoaXMgSVJRIGlzIGFzc29jaWF0ZWQgd2l0aC4gVGhpcyBhbGxvd3MgdG8g ZWFzaWx5IGZpbmQgdGhlIHJlc3BlY3RpdmUKPiBWQ1BVIGxpc3QuCj4gCj4gICAgIHN0cnVjdCB2 Z2ljX2lycSB7Cj4gICAgICAgICBzcGlubG9ja190IGlycV9sb2NrOyAgICAgICAgICAgIC8qIFBy b3RlY3RzIHRoZSBjb250ZW50IG9mIHRoZSBzdHJ1Y3QgKi8KPiAgICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgbHBpX2xpc3Q7ICAgICAgLyogVXNlZCB0byBsaW5rIGFsbCBMUElzIHRvZ2V0aGVyICov Cj4gICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGFwX2xpc3Q7Cj4gCj4gICAgICAgICBzdHJ1Y3Qg dmNwdSAqdmNwdTsgICAgICAgICAgICAgIC8qIFNHSXMgYW5kIFBQSXM6IFRoZSBWQ1BVCj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFNQSXMgYW5kIExQSXM6IFRo ZSBWQ1BVIHdob3NlIGFwX2xpc3QKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogdGhpcyBpcyBxdWV1ZWQgb24uCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqLwo+IAo+ICAgICAgICAgc3RydWN0IHZjcHUgKnRhcmdldF92Y3B1OyAg ICAgICAgLyogVGhlIFZDUFUgdGhhdCB0aGlzIGludGVycnVwdCBzaG91bGQKPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJlIHNlbnQgdG8sIGFzIGEgcmVzdWx0 IG9mIHRoZQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGFy Z2V0cyByZWcgKHYyKSBvciB0aGUKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqIGFmZmluaXR5IHJlZyAodjMpLgo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCj4gCj4gICAgICAgICB1MzIgaW50aWQ7ICAgICAgICAgICAgICAg ICAgICAgIC8qIEd1ZXN0IHZpc2libGUgSU5USUQgKi8KPiAgICAgICAgIGJvb2wgbGluZV9sZXZl bDsgICAgICAgICAgICAgICAgLyogTGV2ZWwgb25seSAqLwo+ICAgICAgICAgYm9vbCBwZW5kaW5n X2xhdGNoOyAgICAgICAgICAgICAvKiBUaGUgcGVuZGluZyBsYXRjaCBzdGF0ZSB1c2VkIHRvCj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNhbGN1bGF0ZSB0aGUg cGVuZGluZyBzdGF0ZSBmb3IKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICogYm90aCBsZXZlbCBhbmQgZWRnZSB0cmlnZ2VyZWQgSVJRcy4KPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCj4gCj4gICAgICAgICBib29sIGFjdGl2ZTsg ICAgICAgICAgICAgICAgICAgIC8qIG5vdCB1c2VkIGZvciBMUElzICovCj4gICAgICAgICBib29s IGVuYWJsZWQ7Cj4gICAgICAgICBib29sIGh3OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRp ZWQgdG8gSFcgSVJRICovCj4gICAgICAgICBzdHJ1Y3Qga3JlZiByZWZjb3VudDsgICAgICAgICAg IC8qIFVzZWQgZm9yIExQSXMgKi8KPiAgICAgICAgIHUzMiBod2ludGlkOyAgICAgICAgICAgICAg ICAgICAgLyogSFcgSU5USUQgbnVtYmVyICovCj4gICAgICAgICB1bmlvbiB7Cj4gICAgICAgICAg ICAgdTggdGFyZ2V0czsgICAgICAgICAgICAgICAgICAgICAvKiBHSUN2MiB0YXJnZXQgVkNQVXMg bWFzayAqLwo+ICAgICAgICAgICAgIHUzMiBtcGlkcjsgICAgICAgICAgICAgICAgICAgICAgLyog R0lDdjMgdGFyZ2V0IFZDUFUgKi8KPiAgICAgICAgIH07Cj4gICAgICAgICB1OCBzb3VyY2U7ICAg ICAgICAgICAgICAgICAgICAgIC8qIEdJQ3YyIFNHSXMgb25seSAqLwo+ICAgICAgICAgdTggcHJp b3JpdHk7Cj4gICAgICAgICBlbnVtIHZnaWNfaXJxX2NvbmZpZyBjb25maWc7ICAgIC8qIExldmVs IG9yIGVkZ2UgKi8KPiAgICAgfTsKPiAKPiAjIyMgVkNQVSBsaXN0IGhhbmRsaW5nCj4gCj4gSW5p dGlhbGx5IGEgdmlydHVhbCBpbnRlcnJ1cHQganVzdCBsaXZlcyBvbiBpdHMgb3duLiAKCm5vdCBz dXJlIHdoYXQgdGhpcyBtZWFucywgc2VlIGlmIHlvdSBjYW4gY2xhcmlmeSBieSBiZWluZyBtb3Jl IGNvbmNyZXRlLgoKPiBHdWVzdCBNTUlPIGFjY2Vzc2VzIHRvCj4gdGhlIGRpc3RyaWJ1dG9yIHdp bGwgY2hhbmdlIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZS4KPiBXaGVu IGFuIGludGVycnVwdCBpcyBhY3R1YWxseSBtYWRlIHBlbmRpbmcgKGVpdGhlciBieSBhbiBhc3Nv Y2lhdGVkIGhhcmR3YXJlCj4gSVJRIGZpcmluZyBvciBieSBhIHZpcnR1YWwgSVJRIHRyaWdnZXIp LCB0aGUgYHZnaWNfaXJxYCBzdHJ1Y3R1cmUgd2lsbCBiZQoKSSB0aGluayB0aGUgZGlzdGluY3Rp b24gb2Ygd2hhdCBjYXVzZXMgYW4gaW50ZXJydXB0IHRvIGJlIGZpcmVkIHNob3VsZApiZSByZXdv cmtlZCBpbiB0aGUgZG9jdW1lbnQuICBUaGUgaW1wb3J0YW50IGJpdCBpcyB0aGF0IHRoZSBWR0lD IGhhcyBhIAp2aXJ0dWFsIGludGVycnVwdCBpbnB1dCBsaW5lLCB3aGljaCBjYW4gYmUgcmFpc2Vk IGFuZCBsb3dlcmVkLCB3aGljaCB0aGUKaHlwZXJ2aXNvciBjYW4gdXNlIHRvIHNpZ25hbCB2aXJ0 dWFsIGludGVycnVwdHMuICBUaGVzZSBtYXkgb3IgbWF5IG5vdApiZSB0aWVkIHRvIGEgcGh5c2lj YWwgaW50ZXJydXB0LCBhbmQgdGhleSBtYXkgdGhlcmVmb3JlIGJlIG1hcmtlZCBhcwpodz10cnVl IG9yIGh3PWZhbHNlLCByZXNwZWN0aXZlbHkuCgo+IGxpbmtlZCB0byB0aGUgY3VycmVudCB0YXJn ZXQgVkNQVS4gVGhlIGB2Y3B1YCBtZW1iZXIgaW4gdGhlIHN0cnVjdHVyZSB3aWxsCj4gYmUgc2V0 IHRvIHRoaXMgVkNQVS4gQW55IGFmZmluaXR5IGNoYW5nZSBhZnRlciB0aGlzIHBvaW50IHdpbGwg bm90IGFmZmVjdAo+IHRoZSBjdXJyZW50IHRhcmdldCBWQ1BVIGFueW1vcmUsIGl0IGp1c3QgdXBk YXRlcyB0aGUgYHRhcmdldF92cHVgIGZpZWxkIGluCj4gdGhlIHN0cnVjdHVyZSwgd2hpY2ggd2ls bCBiZSBjb25zaWRlcmVkIG9uIHRoZSBuZXh0IGluamVjdGlvbi4KCkkgdGhpbmsgdGhpcyBkZXNj cmlwdGlvbiBpcyBhIGxpdHRsZSB2YWd1ZS4gIFRoZXJlIGFyZSBjbGVhciBzZW1hbnRpY3MKYXNz b2NpYXRlZCB3aXRoIHRoZXNlIHR3byBmaWVsZHM6CgogICB2Y3B1OiBUaGUgVkNQVSB3aG9zZSBh cF9saXN0IHRoaXMgaW50ZXJydXB0IGlzIHF1ZXVlZCBvbiAod2hpY2gKICAgICAgICAgaGFwcGVu cyB0byBiZSBpbW11dGFibGUgZm9yIFNHSXMgYW5kIFBQSXMpCgogICB0YXJnZXRfdmNwdTogRm9y IFNHSXMgYW5kIExQSXMsIHRoZSBjb25maWd1cmVkIHRhcmdldCBWQ1BVIGZvciBhbgogICAgICAg ICAgICAgICAgaW50ZXJydXB0LgoKT25jZSB0aGlzIGlzIGNsZWFybHkgZGVmaW5lZCwgdGhlcmUg YXJlIHNvbWUgcnVsZXMgaW4gdGVybXMgb2Ygd2hlbiB0aGUKdmNwdSBmaWVsZCBjYW4gYmUgY2hh bmdlZDsgd2hlbiBxdWVpbmcgYSB2aXJ0dWFsIGludGVycnVwdCBmb3IgZGVsaXZlcnkKKGJlY2F1 c2UgaXQncyBwZW5kaW5nIGFuZC9vciBhY3RpdmUpLCB0aGUgdmNwdSBmaWVsZCBmaWVsZCBwb2lu dHMgdG8gdGhlClZDUFUgb24gd2hpY2ggaXQgaXMgcXVldWQuICBUaGUgdGFyZ2V0X3ZjcHUgZmll bGQgc2ltcGx5IHJlY29yZHMgdGhlCmNvbmZpZ3VyYXRpb24sIGFuZCBjYW4gYmUgY2hhbmdlZCBi eSB0aGUgaHlwZXJ2aXNvciBvciB0aGUgVk0gaXRzZWxmIGF0CmFueSB0aW1lLCBidXQgb25seSB0 aGUgVkNQVSBvbiB3aG9zZSBBUCBsaXN0IHRoZSB2aXJ0dWFsIGludGVycnVwdCBpcwphbHJlYWR5 IHF1ZXVlZCwgY2FuIGNoYW5nZSBhIG5vbi1OVUxMIHZjcHUgZmllbGQgdG8gTlVMTCBvciB0byBh CmRpZmZlcmVudCB2YWx1ZSwgaS5lLiBtaWdyYXRlIHRoZSB2aXJ0dWFsIGludGVycnVwdC4KClRo aXMgaXMgYSByZXF1aXJlbWVudCB0byBlbnN1cmUgY29ycmVjdCBmdW5jdGlvbmFsaXR5OyBvbmNl IHlvdSBwcmVzZW50CmFuIGFjdGl2ZSBpbnRlcnJ1cHQgdG8gYSBWQ1BVLCB5b3UgY2Fubm90IHRh a2UgaXQgYXdheSBiZWhpbmQgaXRzIGJhY2ssCmJ1dCB5b3UgaGF2ZSB0byB3YWl0IHVudGlsIHRo ZSBWQ1BVIGRlYWN0aXZhdGVzIHRoZSBpbnRlcnJ1cHQuCgo+IFRoaXMgcGVyLVZDUFUgbGlzdCBp cyBjYWxsZWQgdGhlIGBhcF9saXN0YCwgc2luY2UgaXQgaG9sZHMgaW50ZXJydXB0cyB3aGljaAo+ IGFyZSBpbiBhIHBlbmRpbmcgYW5kL29yIGFjdGl2ZSBzdGF0ZS4KPiAKPiAjIyMgVmlydHVhbCBJ UlEgcmVmZXJlbmNlcwo+IAo+IFRoZXJlIGlzIGEgZnVuY3Rpb24gYHZnaWNfZ2V0X2lycSgpYCB3 aGljaCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIGEgdmlydHVhbCBJUlEKPiBnaXZlbiBpdHMgbnVt YmVyLgo+IEZvciBwcml2YXRlIElSUXMgYW5kIFNQSXMgaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGlz IGp1c3QgaW5kZXhlcyBhIHN0YXRpYyBhcnJheS4KPiBGb3IgTFBJcyAod2hpY2ggYXJlIGR5bmFt aWNhbGx5IGFsbG9jYXRlZCBhdCBydW4gdGltZSkgdGhpcyBpcyBleHBlY3RlZCB0bwo+IGl0ZXJh dGUgYSBkYXRhIHN0cnVjdHVyZSAobGlrZSBhIGxpbmtlZCBsaXN0KSB0byBmaW5kIHRoZSByaWdo dCBzdHJ1Y3R1cmUuCgoob3IgYWxsb2NhdGUgb25lPykKCj4gSW4gYW55IGNhc2UgYSBjYWxsIHRv IGB2Z2ljX2dldF9pcnFgIHdpbGwgaW5jcmVhc2UgYSByZWZjb3VudCwgd2hpY2ggd2lsbAo+IHBy ZXZlbnQgTFBJcyBmcm9tIGJlaW5nIGRlLWFsbG9jYXRlZCB3aGlsZSBhbm90aGVyIHBhcnQgb2Yg dGhlIFZHSUMgaXMgc3RpbGwKPiBob2xkaW5nIGEgcmVmZXJlbmNlLiBUaHVzIGFueSBjYWxsZXIg dG8gYHZnaWNfZ2V0X2lycWAgc2hhbGwgY2FsbAo+IGB2Z2ljX3B1dF9pcnEoKWAgYWZ0ZXIgaXQg aXMgZG9uZSB3aXRoIGhhbmRsaW5nIHRoaXMgaW50ZXJydXB0LgoKSXNuJ3QgdGhpcyByZWZjb3Vu dGluZyAxMDE/ICBJIGFzc3VtZSBpdCdzIGFscmVhZHkgdXNlZCBpbiBYZW4gYW5kIHRoZQpyYXRp b25hbGUgY291bGQgYmUgc2tpcHBlZCBoZXJlIGluIHRoZSBpbnRlcmVzdCBvZiBmb2N1cy4KCj4g QW4gZXhjZXB0aW9uIHdvdWxkIGJlIGlmIHRoZSB2aXJ0dWFsIElSUSBpcyBldmVudHVhbGx5IGlu amVjdGVkIGludG8gYSBWQ1BVLiBJbgo+IHRoaXMgY2FzZSB0aGUgVkNQVSBob2xkcyB0aGF0IHJl ZmVyZW5jZSBhbmQgaXQgaXMga2VwdCBhcyBsb25nIGFzIHRoZSBndWVzdAo+IHNlZXMgdGhpcyB2 aXJ0dWFsIElSUS4gVGhlIHJlZmNvdW50IHdvdWxkIG9ubHkgYmUgZGVjcmVhc2VkIHVwb24gdGhl IElSUSBoYXZpbmcKPiBiZWVuIEVPSWVkIGJ5IHRoZSBndWVzdCBhbmQgaXQgaGF2aW5nIGJlZW4g cmVtb3ZlZCBmcm9tIHRoZSBWQ1BVIGxpc3QuCgpBZ2FpbiwgdGhpcyBzZWVtcyB0byBqdXN0IGV4 cGxhaW4gYW4gZXhhbXBsZSBvZiBvbmUgb2YgdGhlIHJlZmVyZW5jZXMuClJlZmVyZW5jZSBjb3Vu dGluZyB3b3JrcyBieSBjb3VudGluZyByZWZlcmVuY2VzLCBmcmVlaW5nIHRoZSByZXNvdXJjZQp3 aGVuIHRoZSByZWZlY2VuY2UgcmVhY2hlcyB6ZXJvLiAgVGhhdCdzIGFib3V0IGl0LgoKPiAKPiAj IyMgTG9ja2luZwo+IAo+IFRvIGtlZXAgdGhlIGB2Z2ljX2lycWAgc3RydWN0dXJlIGNvbnNpc3Rl bnQgYW5kIHRvIGF2b2lkIHJhY2VzIGJldHdlZW4KPiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIFZH SUMsIGxvY2tpbmcgaXMgZXNzZW50aWFsIHdoZW5ldmVyIGFjY2Vzc2luZyBhIG1lbWJlcgoKbml0 OiBhZ2FpbiBhIHJhY2UgY2Fubm90IGJlIGF2b2lkZWQgY29tcGxldGVseSwgYnV0IHRoZXkgY2Fu IGJlIG1hZGUKYmVuaWduLi4uCgo+IG9mIHRoaXMgc3RydWN0dXJlLiBJdCBpcyBleHBlY3RlZCB0 aGF0IHRoaXMgbG9jayBpcyBhbG1vc3QgbmV2ZXIgY29udGVuZGVkLAo+IGFsc28gaGVsZCBvbmx5 IGZvciBicmllZiBwZXJpb2RzIG9mIHRpbWUsIHNvIHRoaXMgaXMgY29uc2lkZXJlZCBjaGVhcC4K PiBUbyBrZWVwIHRoZSBjb2RlIGNsZWFuIGFuZCBhdm9pZCBuYXN0eSBjb3JuZXIgY2FzZXMsIHRo ZXJlIGFyZSBubyB0cmlja3Mgb24KPiB0cnlpbmcgdG8gYmUgbG9ja2xlc3MgaGVyZS4KPiBJZiBm b3IgYW55IHJlYXNvbiB0aGUgY29kZSBuZWVkcyB0byBob2xkIHRoZSBsb2NrcyBmb3IgdHdvIHZp cnR1YWwgSVJRcywgdGhlCj4gb25lIHdpdGggdGhlIGxvd2VyIElSUSBudW1iZXIgaXMgdG8gYmUg dGFrZW4gZmlyc3QsIHRvIGF2b2lkIGRlYWRsb2Nrcy4KPiAKPiBBbm90aGVyIGxvY2sgdG8gY29u c2lkZXIgaXMgdGhlIFZDUFUgbG9jaywgd2hpY2ggb24gdGhlIGZpcnN0IGdsYW5jZSBwcm90ZWN0 cwo+IHRoZSB2aXJ0dWFsIENQVSdzIGxpc3Qgc3RydWN0dXJlLCBidXQgYWxzbyBzeW5jaHJvbmlz ZXMgYWRkaXRpb25zIGFuZCByZW1vdmFscwo+IG9mIElSUXMgZnJvbSBhIFZDUFUuIFRvIGFkZCBh biBJUlEgdG8gYSBsaXN0LCBib3RoIHRoZSBWQ1BVIGFuZCB0aGUgcGVyLUlSUQo+IGxvY2sgbmVl ZCB0byBiZSBoZWxkLiBUbyBhdm9pZCBkZWFkbG9ja3MsIHRoZXJlIGlzIGEgc3RyaWN0IGxvY2tp bmcgb3JkZXI6Cj4gCj4gPiBUaGUgVkNQVSBsb2NrIG5lZWRzIHRvIGJlIHRha2VuIGZpcnN0LCB0 aGUgcGVyLUlSUSBsb2NrIGFmdGVyIHRoaXMuCj4gCj4gU29tZSBvcGVyYXRpb25zIChsaWtlIG1p Z3JhdGluZyBJUlFzIGJldHdlZW4gdHdvIFZDUFVzKSByZXF1aXJlIHR3byBWQ1BVCj4gbG9ja3Mg dG8gYmUgaGVsZCwgaW4gdGhpcyBjYXNlIHRoZSBsb2NrIGZvciB0aGUgVkNQVSB3aXRoIHRoZSBz bWFsbGVyIFZDUFUgSUQKPiBpcyB0byBiZSB0YWtlbiBmaXJzdC4KPiAKPiBUaGVyZSBhcmUgb2Nj YXNpb25zIHdoZXJlIHRoZSBsb2NraW5nIG9yZGVyIChWQ1BVIGZpcnN0KSBpcyBoYXJkIHRvIG9i c2VydmUsCj4gYmVjYXVzZSB0aGUgcGVyLUlSUSBsb2NrIGlzIGFscmVhZHkgaGVsZCwgYnV0IHRo aXMgSVJRIG5lZWRzIHRvIGdvIG9uIGEgVkNQVQo+IGxpc3QuIEluIHRoaXMgY2FzZSB0aGUgSVJR IGxvY2sgbmVlZHMgdG8gYmUgZHJvcHBlZCwgdGhlIHJlc3BlY3RpdmUgVkNQVQo+IGxvY2sgc2hv dWxkIGJlIHRha2VuLCB0aGVuIHRoZSBwZXItSVJRIGxvY2sgbmVlZHMgdG8gYmUgcmUtdGFrZW4u Cj4gQWZ0ZXIgYm90aCB0aGUgbG9ja3MgYXJlIGhlbGQsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhl IGNvbmRpdGlvbnMgd2hpY2gKPiBvcmlnaW5hbGx5IG1hbmRhdGVkIHRoZSBsaXN0IGFkZGl0aW9u IChvciByZW1vdmFsKSBhcmUgc3RpbGwgdHJ1ZS4gVGhpcyBpcwo+IG5lZWRlZCBiZWNhdXNlIHRo ZSBJUlEgbG9jayBjb3VsZCBoYXZlIGJlZW4gdGFrZW4gYnkgYW5vdGhlciBlbnRpdHkgbWVhbndo aWxlCj4gYW5kIHRoZSBzdGF0ZSBvZiB0aGlzIGludGVycnVwdCBjb3VsZCBoYXZlIGJlZW4gY2hh bmdlZC4gRXhhbXBsZXMgYXJlIGlmIHRoZQo+IGludGVycnVwdCBpcyBubyBsb25nZXIgcGVuZGlu ZywgZ290IGRpc2FibGVkIG9yIGNoYW5nZWQgdGhlIENQVSBhZmZpbml0eS4KPiBTb21lIG9mIHRo b3NlIGNoYW5nZXMgbWlnaHQgcmVuZGVyIHRvIGN1cnJlbnQgYWN0aW9uIG9ic29sZXRlIChubyBs b25nZXIKPiBwZW5kaW5nKSwgb3RoZXIgd2lsbCBsZWFkIHRvIGEgcmV0cnkgb2YgdGhlIHJlLWxv Y2tpbmcgc2NoZW1lIGRlc2NyaWJlZCBhYm92ZS4KPiBUaGlzIHJlLWxvY2tpbmcgc2NoZW1lIHNo YWxsIGJlIGltcGxlbWVudGVkIGluIGEgd2VsbC1kb2N1bWVudGVkIGZ1bmN0aW9uLgoKRG8gd2Ug aGF2ZSB0aGlzIGRvY3VtZW50YXRpb24gb24gdGhlIEtWTSBzaWRlIHRoYXQgeW91IGNvdWxkIGxp bmsgdG8KaGVyZSBmb3IgcGVvcGxlIHRvIGhhdmUgYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgdGhp cyBjYW4gYmUgZXhwbGFpbmVkPwpJdCdzIG5vdCB0aGF0IGJhZCB3aGVuIHlvdSBsb29rIGF0IGl0 IHJlYWxseS4KCj4gCj4gIyMjIExldmVsIGFuZCBlZGdlIHRyaWdnZXJlZCBpbnRlcnJ1cHRzCj4g Cj4gVGhlIEdJQyBrbm93cyBhYm91dCB0d28ga2luZHMgb2Ygc2lnbmFsbGluZyBpbnRlcnJ1cHRz Ogo+IAo+IC0gRWRnZSB0cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgdHJpZ2dlcmVkIGJ5IGEgZGV2 aWNlIG9uY2UsIHRoZWlyIGxpZmUgY3ljbGUKPiBlbmRzIHdoZW4gdGhlIGd1ZXN0IGhhcyBFT0ll ZCB0aGVtLCBhdCB3aGljaCBwb2ludCB3ZSByZW1vdmUgdGhlIHBlbmRpbmcgc3RhdGUsCj4gY2xl YXIgdGhlIExSIGFuZCByZXR1cm4gdGhlIGB2Z2ljX2lycWAgc3RydWN0dXJlIHRvIGEgcXVpZXNj ZW50IHN0YXRlLgoKRm9yIG5vbi1IVyBpbnRlcnJ1cHRzLCB5b3UgaGF2ZSB0aGUgYWRkZWQgcG90 ZW50aWFsIGNvbXBsZXhpdHkgb2YKUEVORElORytBQ1RJVkUuCgo+IAo+IC0gTGV2ZWwgdHJpZ2dl cmVkIGludGVycnVwdHMgYXJlIHRyaWdnZXJlZCB3aGVuIGEgZGV2aWNlIHJhaXNlcyBpdHMgaW50 ZXJydXB0Cj4gbGluZSwgdGhleSBzdGF5IHBlbmRpbmcgYXMgbG9uZyBhcyB0aGlzIGxpbmUgaXMg aGVsZCBoaWdoLiBBdCBzb21lIHBvaW50IHRoZQo+IGRyaXZlciBpbiB0aGUgZ3Vlc3QgaXMgZXhw ZWN0ZWQgdG8gcHJvZ3JhbSB0aGUgZGV2aWNlIHRvIGV4cGxpY2l0bHkgb3IKPiBpbXBsaWNpdGx5 IGxvd2VyIHRoaXMgaW50ZXJydXB0IGxpbmUuIFRoYXQgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvIHN0 b3JlIHRoZQo+IHN0YXRlIG9mIHRoZSB2aXJ0dWFsIGludGVycnVwdCBsaW5lLCB3aGljaCBpcyBv bmx5IGNvbnRyb2xsZWQgYnkgdGhlICh2aXJ0dWFsKQo+IGRldmljZS4gVGhpcyBpcyBkb25lIGlu IHRoZSBgbGluZV9sZXZlbGAgbWVtYmVyIG9mIGBzdHJ1Y3QgdmdpY19pcnFgLgo+IAo+IFRvIGFz c2VydCB0aGUgaW50ZXJydXB0IGNvbmRpdGlvbiwgYSAodmlydHVhbCkgZGV2aWNlIGNhbGxzIGEg ZnVuY3Rpb24gZXhwb3J0ZWQKPiBieSB0aGUgVkdJQywgd2hpY2ggYWxsb3dzIHRvIHJhaXNlIG9y IGxvd2VyIGFuIGludGVycnVwdCBsaW5lLiBMb3dlcmluZyB0aGUKPiBsaW5lIGZvciBhbiBlZGdl IHRyaWdnZXJlZCBJUlEgaXMgaWdub3JlZCAoYW5kIHNvIGlzIG9wdGlvbmFsKS4gUmFpc2luZyB0 aGUKPiBsaW5lIGFzc2VydHMgdGhlIHBlbmRpbmcgc3RhdGUgYW5kIHBvdGVudGlhbGx5IGluamVj dHMgdGhpcyB2aXJ0dWFsIElSUS4gQW55Cj4gc3Vic2VxdWVudCAicmFpc2luZyIgY2FsbCBtaWdo dCBpbmplY3QgYW5vdGhlciBJUlEsIGlmIHRoZSBwcmV2aW91cyBoYXMgYXQKPiBsZWFzdCBiZWVu IGFjdGl2YXRlZCBieSB0aGUgZ3Vlc3QgYWxyZWFkeSwgb3RoZXJ3aXNlIGlzIGlnbm9yZWQuCj4g Cj4gRm9yIGxldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzIHRoaXMgZnVuY3Rpb24gc3RvcmVzIHRo ZSBuZXcgc3RhdGUgaW50byB0aGUKPiBgbGluZV9sZXZlbGAgdmFyaWFibGUsIHBvdGVudGlhbGx5 IGluamVjdGluZyB0aGUgaW50ZXJydXB0IGlmIHRoYXQgbGluZQo+IGNoYW5nZXMgZnJvbSBmYWxz ZSB0byB0cnVlLiBJZiB0aGUgbGluZSBpcyBsb3dlcmVkIGJlZm9yZSB0aGUgZ3Vlc3QgaGFzCj4g c2VlbiBpdCwgdGhpcyBwYXJ0aWN1bGFyIGludGVycnVwdCBpbnN0YW5jZSB3aWxsIGJlIGRpc2Nh cmRlZC4gU3VjY2Vzc2l2ZQo+ICJyYWlzaW5nIiBjYWxscyB3aWxsIG5vdCBsZWFkIHRvIG11bHRp cGxlIGludGVycnVwdHMgaWYgdGhlIGxpbmUgaGFzIG5vdAo+IGJlZW4gbG93ZXJlZCBpbiBiZXR3 ZWVuLgoKVGhpcyBpcyBjb25mdXNpbmc6ICBMb3dlcmluZyBvciByYWlzaW5nIHRoZSBsaW5lIGZv ciBhIGxldmVsIHRyaWdnZXJlZAppbnRlcnJ1cHQgZG9lc24ndCBtYWtlIGFueSBkaWZmZXJlbmNl LiAgVGhlIHBvaW50IGlzIHRoYXQgYXMgbG9uZyBhcyB0aGUKbGluZSBpcyBoaWdoLCBpZiB5b3Ug ZGVhY3RpdmF0ZSB0aGF0IGludGVycnVwdCwgYSBuZXcgaW50ZXJydXB0IHdpbGwgaGl0CmltbWVk aWF0ZWx5IGFnYWluLCB1bmxlc3MgdGhlIGxpbmUgaGFzIGJlZW4gbG93ZXJlZCBpbiB0aGUgbWVh bnRpbWUuCgo+IAo+ICMjIyBTb2Z0d2FyZSB0cmlnZ2VyZWQgaW50ZXJydXB0cwo+IAo+IEJlc2lk ZSB0aGUgbmF0dXJhbGx5IHNvZnR3YXJlIHRyaWdnZXJlZCBpbnRlci1wcm9jZXNzb3ItaW50ZXJy dXB0cwo+IChTR0lzIGluIEdJQyBzcGVhayksIHRoZXJlIGlzIGFub3RoZXIgd2F5IG9mIGxldHRp bmcgc29mdHdhcmUgcmFpc2UgYW4KPiBpbnRlcnJ1cHQgY29uZGl0aW9uLgoKVGhlc2UgdGhyZWUg bGluZXMgYXBwZWFyIHRvIGJlbG9uZyB0byB0aGUgaGVhZGluZy4uLgoKPiBUaGUgR0lDIGRpc3Ry aWJ1dG9yIGFsbG93cyB0byBzZXQgb3IgY2xlYXIgYm90aCB0aGUgcGVuZGluZyBhbmQgYWN0aXZl IHN0YXRlCj4gb2YgYW55IGludGVycnVwdCB2aWEgTU1JTyByZWdpc3RlcnMuIFRoaXMgaXNuJ3Qg d2lkZWx5IHVzZWQgYnkgbWFueSBvcGVyYXRpbmcKPiBzeXN0ZW1zLCBidXQgaXMgdXNlZnVsIHdo ZW4gc2F2aW5nIGFuZCByZXN0b3JpbmcgdGhlIHN0YXRlIG9mIGEgbWFjaGluZS4KPiBTbyBlbXVs YXRpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIHJlcXVpcmVkIGZvciBiZWluZyBhcmNoaXRlY3R1cmUg Y29tcGxpYW50LAo+IGhvd2V2ZXIgdGhlIGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBuZWVkIHRv IGJlIHZlcnkgZWZmaWNpZW50IGdpdmVuIGl0cyByYXJlCj4gdXNhZ2UuIEluIGZhY3Qgc3VwcG9y dGluZyB0aGUgc2V0LXBlbmRpbmcgYW5kIGNsZWFyLXBlbmRpbmcgcmVnaXN0ZXJzIGlzCj4gcmVs YXRpdmVseSBzdHJhaWdodC1mb3J3YXJkLCBhcyBsb25nIGFzIG9uZSBrZWVwcyB0aGlzIHN0YXRl IHNlcGFyYXRlIGZyb20KPiB0aGUgZW11bGF0ZWQgaW50ZXJydXB0IGxpbmUuIGBwZW5kaW5nX2xh dGNoYCBzdG9yZXMgdGhpcyBzdGF0ZSBpbiBgdmdpY19pcnFgLgo+IAo+IFRoZSBzZXQtYWN0aXZl IGFuZCBjbGVhci1hY3RpdmUgcmVnaXN0ZXJzIGFyZSBtdWNoIGhhcmRlciB0byBlbXVsYXRlLCB0 aG91Z2gsCj4gYXMgbm9ybWFsbHkgdGhlIGFjdGl2ZSBzdGF0ZSBpcyBvZiBsaXR0bGUgY29uY2Vy biB0byB0aGUgR0lDIGVtdWxhdGlvbi4gSW4KPiBhIG5vcm1hbCBpbnRlcnJ1cHQgbGlmZSBjeWNs ZSB0aGUgYWN0aXZlIHN0YXRlIGlzbid0IGV2ZW4gdmlzaWJsZSB0byB0aGUKPiBoeXBlcnZpc29y LCBhcyBpdCBtaWdodCBiZSBzZXQgYW5kIGNsZWFyZWQgYWdhaW4gZW50aXJlbHkgd2l0aGluIHRo ZSBndWVzdAo+IGluIHRoZSBsaXN0IHJlZ2lzdGVyLCB3aXRob3V0IGV4aXRpbmcgdG8gdGhlIGh5 cGVydmlzb3IuCj4gU28gbWFuaXB1bGF0aW5nIHRoZSBhY3RpdmUgc3RhdGUgdmlhIHRoZSBNTUlP IHJlZ2lzdGVycyByZXF1aXJlcyBzb21lIGhlYXZ5Cj4gbGlmdGluZzogSWYgdGhpcyBpbnRlcnJ1 cHQgaXMgY3VycmVudGx5IGluamVjdGVkIGludG8gYSBydW5uaW5nIFZDUFUsIHRoaXMKPiBWQ1BV IG11c3QgZXhpdCwgdGhlIGFjdGl2ZSBzdGF0ZSBtdXN0IGJlIHNldCBvciBjbGVhcmVkIGluIHRo ZSBMUiwgdGhlbgo+IGV4ZWN1dGlvbiBjYW4gY29udGludWUuIFdoaWxlIHRoaXMgaXMgZXhwZW5z aXZlLCBhcyBtZW50aW9uZWQgYWJvdmUgdGhpcwo+IHNob3VsZCBub3QgaGFwcGVuIHRvbyBvZnRl biwgYWxzbyBwcm9iYWJseSB0aGUgc3lzdGVtIGlzbid0IHZlcnkgcGVyZm9ybWFuY2UKPiBzZW5z aXRpdmUgd2hlbiB1c2luZyB0aGlzIGZlYXR1cmUgZm9yIHNhdmUgYW5kIHJlc3RvcmUgYW55d2F5 LgoKVGhlc2UgdHdvIHBhcmFncmFwaHMgbm90IHNvIG11Y2gsIHRoZXkgc2VlbSB0byBiZWxvbmcg dG8gTU1JTyBlbXVsYXRpb24sCmFuZCBzaG91bGQgcHJvYmFibHkgZm9sbG93IHRoZSBwYXJhZ3Jh cGggYmVsb3cuCgo+IAo+ICMjIyBNTUlPIGVtdWxhdGlvbgo+IAo+IEFzIG1lbnRpb25lZCBiZWZv cmUsIHRoZSBkaXN0cmlidXRvciBhbmQgcmVkaXN0cmlidXRvciBwYXJ0IG9mIHRoZSBWR0lDIG5l ZWRzCj4gdG8gYmUgZnVsbHkgZW11bGF0ZWQuIFRob3NlIHBhcnRzIGFyZSBjaGFyYWN0ZXJpc2Vk IGJ5IGEgcmFuZ2Ugb2YgTU1JTwo+IHJlZ2lzdGVycy4gVGhlIGltcGxlbWVudGF0aW9uIHNoYWxs IHByb3ZpZGUgYSBkaXNwYXRjaGVyIGZ1bmN0aW9uLCB3aGljaAo+IHRha2VzIHRoZSBmYXVsdGVk IGFkZHJlc3MsIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIE1NSU8gcmFuZ2UsIGFu ZAo+IHdvcmtzIG91dCB3aGljaCBhY3R1YWwgcmVnaXN0ZXIgaXMgYWZmZWN0ZWQuIEl0IHRoZW4g bG9va3MgdXAgdGhlIHRoZQo+IHJlc3BlY3RpdmUgaGFuZGxlciBmdW5jdGlvbiBhbmQgY2FsbHMg aXQuIFRob3NlIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8KPiBiZSBsaXN0ZWQgaW4gYSBzdHJ1 Y3QgaW5pdGlhbGlzZXIsIHdoaWNoIGNvbm5lY3RzIHRoZSBhY3R1YWwgcmVnaXN0ZXIKPiBvZmZz ZXQgYW5kIGl0cyBzaXplIHRvIGEgcGFydGljdWxhciBoYW5kbGVyLiBIYXZpbmcgaGFuZGxlciBm dW5jdGlvbnMgZm9yCj4gYSByZWdpc3RlciByYW5nZSBzZWVtcyBiZW5lZmljaWFsIG92ZXIgaGFu ZGxpbmcgcmVnaXN0ZXJzIGluIGEgc3dpdGNoL2Nhc2UsCj4gYmVjYXVzZSBpdCdzIGVhc2llciB0 byByZWFkIGFuZCBzaW1wbGlmaWVzIGNvZGUgc2hhcmluZywgZm9yIGluc3RhbmNlCj4gYmV0d2Vl biB0aGUgR0lDdjIsIEdJQ3YzIGRpc3RyaWJ1dG9yIGFuZCBHSUN2MyByZWRpc3RyaWJ1dG9yIHJl Z2lzdGVycwo+IHdpdGggdGhlIHNhbWUgc2VtYW50aWNzLgo+IAo+ICMjIyBMaXN0IHJlZ2lzdGVy IG1hbmFnZW1lbnQKPiAKPiBBIGxpc3QgcmVnaXN0ZXIgKExSKSBob2xkcyB0aGUgc3RhdGUgb2Yg YSB2aXJ0dWFsIGludGVycnVwdCwgd2hpY2ggd2lsbAo+IGJlIHVzZWQgYnkgdGhlIEdJQyBoYXJk d2FyZSB0byBzaW11bGF0ZSBhbiBJUlEgbGlmZSBjeWNsZSBmb3IgYSBndWVzdC4KPiBFYWNoIEdJ QyBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiBjYW4gY2hvb3NlIHRvIGltcGxlbWVudCBhIG51bWJl ciBvZiBMUnMsCj4gaGF2aW5nIGZvdXIgb2YgdGhlbSBzZWVtcyB0byBiZSBhIGNvbW1vbiB2YWx1 ZS4gVGhpcyBkZXNpZ24gaGVyZSBkb2VzIG5vdAo+IHRyeSB0byBtYW5hZ2UgdGhlIExScyB2ZXJ5 IGNsZXZlcmx5LCBpbnN0ZWFkIG9uIGV2ZXJ5IGd1ZXN0IGV4aXQgZXZlcnkgTFIKPiBpbiB1c2Ug d2lsbCBiZSBzeW5jZWQgdG8gdGhlIGVtdWxhdGVkIHN0YXRlLCB0aGVuIGNsZWFyZWQuIAoKSW4g ZmFjdCBJIHRoaW5rIHdlIGNhbWUgdXAgd2l0aCBjb3VudGVyLWV4YW1wbGVzIGZvciBldmVyeSBt b2RlbCBvZgpiZWluZyBjbGV2ZXIgd2l0aCBub3QgcmVhZGluZyBiYWNrIHRoZSBMUnMsIGJlY2F1 c2UgeW91IHNpbXBseSBoYXZlIHRvCm9ic2VydmUgYW55IGNoYW5nZSBpbiBzdGF0ZSB0aGF0IGhh cHBlbmVkIGluIGhhcmR3YXJlIHdoaWxlIHRoZSBndWVzdCBpcwpydW5uaW5nLCB0byBiZSBhYmxl IHRvIHByb3Blcmx5IGVtdWxhdGUgY29tcGxpYW50IGZ1bmN0aW9uYWxpdHkgb2YgYmVpbmcKYWJs ZSB0byBpbmplY3QgaW50ZXJydXB0cyBvciBub3QuCgo+IFVwb24gZ3Vlc3QgZW50cnkKPiB0aGUg dG9wIHByaW9yaXR5IHZpcnR1YWwgSVJRcyB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIExScy4g SWYgdGhlcmUgYXJlCj4gbW9yZSBwZW5kaW5nIG9yIGFjdGl2ZSBJUlFzIHRoYW4gbGlzdCByZWdp c3RlcnMsIHRoZSBHSUMgbWFuYWdlbWVudCBJUlEKPiB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gbm90 aWZ5IHRoZSBoeXBlcnZpc29yIG9mIGEgZnJlZSBMUiAob25jZSB0aGUgZ3Vlc3QKPiBoYXMgRU9J ZWQgb25lIElSUSkuIFRoaXMgd2lsbCB0cmlnZ2VyIGEgbm9ybWFsIGV4aXQsIHdoaWNoIHdpbGwg Z28gdGhyb3VnaAo+IHRoZSBub3JtYWwgY2xlYW51cC9yZXBvcHVsYXRlIHNjaGVtZSwgcG9zc2li bHkgbm93IHF1ZXVpbmcgdGhlIGxlZnRvdmVyCj4gaW50ZXJydXB0KHMpLgo+IFRvIGZhY2lsaXRh dGUgcXVpY2sgZ3Vlc3QgZXhpdCBhbmQgZW50cnkgdGltZXMsIHRoZSBWR0lDIG1haW50YWlucyB0 aGUgbGlzdAo+IG9mIHBlbmRpbmcgb3IgYWN0aXZlIGludGVycnVwdHMgKGFwXF9saXN0KSBzb3J0 ZWQgYnkgdGhlaXIgcHJpb3JpdHkuIEFjdGl2ZQo+IGludGVycnVwdHMgYWx3YXlzIGdvIGZpcnN0 IG9uIHRoZSBsaXN0LCBzaW5jZSBhIGd1ZXN0IGFuZCB0aGUgaGFyZHdhcmUgR0lDCj4gZXhwZWN0 IHRob3NlIHRvIHN0YXkgdW50aWwgdGhleSBoYXZlIGJlZW4gZXhwbGljaXRseSBkZWFjdGl2YXRl ZC4gRmFpbHVyZQo+IGluIGtlZXBpbmcgYWN0aXZlIElSUXMgYXJvdW5kIHdpbGwgcmVzdWx0IGlu IGVycm9yIGNvbmRpdGlvbnMgaW4gdGhlIEdJQy4KPiBUaGUgc2Vjb25kIHNvcnQgY3JpdGVyaWEg Zm9yIHRoZSBhcFxfbGlzdCBpcyB0aGVpciBwcmlvcml0eSwgc28gaGlnaGVyCj4gcHJpb3JpdHkg cGVuZGluZyBpbnRlcnJ1cHQgYWx3YXlzIGdvIGZpcnN0IGludG8gdGhlIExScy4KCgpPdGhlcndp c2UsIGFzIEkgc2FpZCwgdGhpcyBpcyBhIHJlYWxseSBuaWNlIHdyaXRldXAuCgpUaGFua3MsCi1D aHJpc3RvZmZlcgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczov L2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==