From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: RFC v1: Xen block protocol overhaul - problem statement (with pictures!) Date: Fri, 18 Jan 2013 13:20:28 -0500 Message-ID: <20130118182028.GB11351@phenom.dumpdata.com> References: <20121218143109.GA24471@phenom.dumpdata.com> <50F9718A.4040202@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <50F9718A.4040202@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Roger Pau =?iso-8859-1?Q?Monn=E9?= Cc: "axboe@kernel.dk" , "xen-devel@lists.xensource.com" , Felipe Franciosi , "martin.petersen@oracle.com" , "matthew@wil.cx" List-Id: xen-devel@lists.xenproject.org T24gRnJpLCBKYW4gMTgsIDIwMTMgYXQgMDU6MDA6MTBQTSArMDEwMCwgUm9nZXIgUGF1IE1vbm7D qSB3cm90ZToKPiBPbiAxOC8xMi8xMiAxNTozMSwgS29ucmFkIFJ6ZXN6dXRlayBXaWxrIHdyb3Rl Ogo+ID4gSGV5LAo+ID4gCj4gPiBJIGFtIGluY2x1ZGluZyBzb21lIGZvbGtzIHRoYXQgYXJlIG5v dCBhbHdheXMgb24gWGVuLWRldmVsIHRvIHNlZSBpZiB0aGV5IGhhdmUKPiA+IHNvbWUgZXh0cmEg aWRlYXMgb3IgY2FuIGNvcnJlY3QgbXkgbWlzdW5kZXJzdGFuZGluZ3MuCj4gPiAKPiA+IFRoaXMg aXMgdmVyeSBtdWNoIFJGQyAtIHNvIHRoZXJlIGlzIGJvdW5kIHRvIGJlIHNvbWUgYnVncy4KPiA+ IFRoZSBvcmlnaW5hbCBpcyBoZXJlCj4gPiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVu dC9kLzFWaDVUOFozVHgzc1VFaFZCMERuTkRLQk5pcUJfWkE4WjVZVnFBc0NJanVJL2VkaXQKPiA+ IGluIGNhc2Ugb25lIHdpc2hlcyB0byBtb2RpZnkvcHJvdmlkZSBjb21tZW50IG9uIHRoYXQgb25l Lgo+IAo+IEhlbGxvIEtvbnJhZCwKPiAKPiBUaGFua3MgZm9yIHRoZSBwcm9ibGVtIGRlc2NyaXB0 aW9uIGFuZCBwb3NzaWJsZSBzb2x1dGlvbnMsIEknbSAKPiBnb2luZyB0byB0YWtlIG9uIHRoaXMg KHByb3ZpZGVkIHRoYXQgeW91IGFyZSBPSyB3aXRoIGl0KS4KClRoZSB3aG9sZSB0aGluZyE/IFlv dSBhcmUgcXVpdGUgYW1iaXRpb3VzIGhlcmUhCgo+IAo+ID4gCj4gPiBUaGVyZSBhcmUgb3V0c3Rh bmRpbmcgaXNzdWVzIHdlIGhhdmUgbm93IHdpdGggdGhlIGJsb2NrIHByb3RvY29sOgo+ID4gTm90 ZTogSSBhbSBhc3N1bWluZyA2NC1iaXQgZ3Vlc3QvaG9zdCAtIGFzIHRoZSBzaXpl4oCZcyBvZiB0 aGUgc3RydWN0dXJlcwo+ID4gY2hhbmdlIG9uIDMyLWJpdC4gSSBhbSBhbHNvIGF0dGFjaGluZyB0 aGUgaGVhZGVyIGZvciB0aGUgYmxraWYgcmluZwo+ID4gYXMgb2YgdG9kYXkuCj4gPiAKPiA+IEEp IFNlZ21lbnQgc2l6ZSBpcyBsaW1pdGVkIHRvIDExIHBhZ2VzLiBJdCBtZWFucyB3ZSBjYW4gYXQg bW9zdCBzcXVlZXplCj4gPiBpbiA0NGtCIHBlciByZXF1ZXN0LiBUaGUgcmluZyBjYW4gaG9sZCAz MiAobmV4dCBwb3dlciBvZiB0d28gYmVsb3cgMzYpCj4gPiByZXF1ZXN0cywgbWVhbmluZyB3ZSBj YW4gZG8gMS40TSBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cy4KPiAKPiBJJ3ZlIGJlZW4gbG9va2lu ZyBhdCB0aGUgZGlmZmVyZW50IG9wdGlvbnMgaGVyZSBhbmQgSSB0aGluayB0aGUgbW9zdAo+IHN1 aXRhYmxlIG9uZSB3b3VsZCBiZSB1c2luZyBhIG1lY2hhbmlzbSBzaW1pbGFyIHRvIFZpcnRJTyAi aW5kaXJlY3QKPiBkZXNjcmlwdG9ycyIsIGl0IGlzIHRoZSBvbmUgdGhhdCBhbGxvd3MgZm9yIG1v cmUgaW4tZmxpZ2h0IHJlcXVlc3RzCj4gd2hpbGUgYmVpbmcgcXVpdGUgc2ltcGxlIHRvIGltcGxl bWVudC4KCjxub2RzPiBJIHRoaW5rIHlvdSBhcmUgcmlnaHQgLSBwbHVzIGl0IGxvb2tzIHRvIGJl IHNpbWlsYXIgdG8gaG93IHRoZSBtb3JlCm1vZGVybiBoYXJkd2FyZSBkb2VzIHJlcXVlc3RzICho ZXJlIEkgYW0gdGhpbmtpbmcgb2YgTlZNZSBhbmQgaXRzIGNvbW1hbmQKZGVzY3JpcHRvciAtIHdo ZXJlIGl0IGNhbiBwb2ludCB0byBhIHBhZ2UgZnVsbCBvZiBETUEgYWRkcmVzc2VzICsgTEJBcyBh bmQgc2F5CiJHbyBSRUFEIikuCgo+IAo+ID4gQikuIFByb2R1Y2VyIGFuZCBjb25zdW1lciBpbmRl eCBpcyBvbiB0aGUgc2FtZSBjYWNoZSBsaW5lLiBJbiBwcmVzZW50IGhhcmR3YXJlCj4gPiB0aGF0 IG1lYW5zIHRoZSByZWFkZXIgYW5kIHdyaXRlciB3aWxsIGNvbXBldGUgZm9yIHRoZSBzYW1lIGNh Y2hlbGluZSBjYXVzaW5nIGEKPiA+IHBpbmctcG9uZyBiZXR3ZWVuIHNvY2tldHMuCj4gPiAKPiA+ IEMpLiBUaGUgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBhcmUgb24gdGhlIHNhbWUgcmluZy4gVGhp cyBhZ2FpbiBjYXVzZXMgdGhlCj4gPiBwaW5nLXBvbmcgYmV0d2VlbiBzb2NrZXRzIGFzIHRoZSBv d25lcnNoaXAgb2YgdGhlIGNhY2hlIGxpbmUgd2lsbCBzaGlmdCBiZXR3ZWVuCj4gPiBzb2NrZXRz Lgo+ID4gCj4gPiBEKS4gQ2FjaGUgYWxpZ25tZW50LiBDdXJyZW50bHkgdGhlIHByb3RvY29sIGlz IDE2LWJpdCBhbGlnbmVkLiBUaGlzIGlzIGF3a3dhcmQKPiA+IGFzIHRoZSByZXF1ZXN0IGFuZCBy ZXNwb25zZXMgc29tZXRpbWVzIGZpdCB3aXRoaW4gYSBjYWNoZWxpbmUgb3Igc29tZXRpbWVzCj4g PiBzdHJhZGRsZSB0aGVtLgo+ID4gCj4gPiBFKS4gSW50ZXJydXB0IG1pdGlnYXRpb24uIFdlIGFy ZSBjdXJyZW50bHkgZG9pbmcgYSBraWNrIHdoZW5ldmVyIHdlIGFyZQo+ID4gZG9uZSDigJxwcm9j ZXNzaW5n4oCdIHRoZSByaW5nLiBUaGVyZSBhcmUgYmV0dGVyIHdheXMgdG8gZG8gdGhpcyAtIGFu ZAo+ID4gd2UgY291bGQgdXNlIGV4aXN0aW5nIG5ldHdvcmsgaW50ZXJydXB0IG1pdGlnYXRpb24g dGVjaG5pcXVlcyB0byBtYWtlIHRoZQo+ID4gY29kZSBwb2xsIHdoZW4gdGhlcmUgaXMgYSBsb3Qg b2YgZGF0YS4KPiA+IAo+ID4gRikuIExhdGVuY3kuIFRoZSBwcm9jZXNzaW5nIG9mIHRoZSByZXF1 ZXN0IGxpbWl0cyB1cyB0byBvbmx5IGRvIDQ0a0IgLSB3aGljaCBtZWFucwo+ID4gdGhhdCBhIDFN QiBjaHVuayBvZiBkYXRhIC0gd2hpY2ggb24gY29udGVtcG9yYXJ5IGRldmljZXMgd291bGQgb25s eSB1c2UgSS9PIHJlcXVlc3QKPiA+IC0gd291bGQgYmUgc3BsaXQgdXAgaW4gbXVsdGlwbGUg4oCY cmVxdWVzdHPigJkgaW5hZHZlcnRlbnRseSBkZWxheWluZyB0aGUgcHJvY2Vzc2luZyBvZgo+ID4g c2FpZCBibG9jay4KPiA+IAo+ID4gRykgRnV0dXJlIGV4dGVuc2lvbnMuIERJRi9ESVggZm9yIGlu dGVncml0eS4gVGhlcmUgbWlnaHQKPiA+IGJlIG90aGVyIGluIHRoZSBmdXR1cmUgYW5kIGl0IHdv dWxkIGJlIGdvb2QgdG8gbGVhdmUgc3BhY2UgZm9yIGV4dHJhCj4gPiBmbGFncyBUQkQuCj4gPiAK PiA+IEgpLiBTZXBhcmF0ZSB0aGUgcmVzcG9uc2UgYW5kIHJlcXVlc3QgcmluZ3MuIFRoZSBjdXJy ZW50Cj4gPiBpbXBsZW1lbnRhdGlvbiBoYXMgb25lIHRocmVhZCBmb3Igb25lIGJsb2NrIHJpbmcu IFRoZXJlIGlzIG5vIHJlYXNvbiB3aHkKPiA+IHRoZXJlIGNvdWxkIG5vdCBiZSB0d28gdGhyZWFk cyAtIG9uZSBmb3IgcmVzcG9uc2VzIGFuZCBvbmUgZm9yIHJlcXVlc3RzIC0KPiA+IGFuZCBlc3Bl Y2lhbGx5IGlmIHRoZXkgYXJlIHNjaGVkdWxlZCBvbiBkaWZmZXJlbnQgQ1BVcy4gRnVydGhlcm1v cmUgdGhpcwo+ID4gY291bGQgYWxzbyBiZSBzcGxpdCBpbiBtdWx0aS1xdWV1ZXMgLSBzbyB0d28g cXVldWVzIChyZXNwb25zZSBhbmQgcmVxdWVzdCkKPiA+IG9uIGVhY2ggdkNQVS4KPiA+IAo+ID4g SSkuIFdlIHdhc3RlIGEgbG90IG9mIHNwYWNlIG9uIHRoZSByaW5nIC0gYXMgd2UgdXNlIHRoZQo+ ID4gcmluZyBmb3IgYm90aCByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzLiBUaGUgcmVzcG9uc2Ugc3Ry dWN0dXJlIG5lZWRzIHRvCj4gPiBvY2N1cHkgdGhlIHNhbWUgYW1vdW50IG9mIHNwYWNlIGFzIHRo ZSByZXF1ZXN0IHN0cnVjdHVyZSAoMTEyIGJ5dGVzKS4gSWYKPiA+IHRoZSByZXF1ZXN0IHN0cnVj dHVyZSBpcyBleHBhbmRlZCB0byBiZSBhYmxlIHRvIGZpdCBtb3JlIHNlZ21lbnRzIChzYXkKPiA+ IHRoZSDigJhzdHJ1Y3QgYmxraWZfc3JpbmdfZW50cnkgaXMgZXhwYW5kZWQgdG8gfjE1MDAgYnl0 ZXMpIHRoYXQgc3RpbGwKPiA+IHJlcXVpcmVzIHVzIHRvIGhhdmUgYSBtYXRjaGluZyBzaXplIHJl c3BvbnNlIHN0cnVjdHVyZS4gV2UgZG8gbm90IG5lZWQKPiA+IHRvIHVzZSB0aGF0IG11Y2ggc3Bh Y2UgZm9yIG9uZSByZXNwb25zZS4gSGF2aW5nIGEgc2VwYXJhdGUgcmVzcG9uc2UgcmluZwo+ID4g d291bGQgc2ltcGxpZnkgdGhlIHN0cnVjdHVyZXMuCj4gPiAKPiA+IEopLiAzMiBiaXQgdnMgNjQg Yml0LiBSaWdodCBub3cgdGhlIHNpemUKPiA+IG9mIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSBpcyAx MTIgYnl0ZXMgdW5kZXIgNjQtYml0IGd1ZXN0IGFuZCAxMDIgYnl0ZXMKPiA+IHVuZGVyIDMyLWJp dCBndWVzdC4gSXQgaXMgY29uZnVzaW5nIGFuZCBmdXJ0aGVybW9yZSByZXF1aXJlcyB0aGUgaG9z dAo+ID4gdG8gZG8gZXh0cmEgYWNjb3VudGluZyBhbmQgcHJvY2Vzc2luZy4KPiA+IAo+ID4gVGhl IGNydWRlIGRyYXdpbmcgZGlzcGxheXMgbWVtb3J5IHRoYXQgdGhlIHJpbmcgb2NjdXBpZXMgaW4g b2Zmc2V0IG9mCj4gPiA2NCBieXRlcyAoY2FjaGUgbGluZSkuIE9mIGNvdXJzZSBmdXR1cmUgQ1BV cyBjb3VsZCBoYXZlIGRpZmZlcmVudCBjYWNoZQo+ID4gbGluZXMgKHNheSAzMiBieXRlcz8pLSB3 aGljaCB3b3VsZCBza2V3IHRoaXMgZHJhd2luZy4gQSAzMi1iaXQgcmluZyBpcwo+ID4gYSBiaXQg ZGlmZmVyZW50IGFzIHRoZSDigJhzdHJ1Y3QgYmxraWZfc3JpbmdfZW50cnnigJkgaXMgb2YgMTAy IGJ5dGVzLgo+ID4gCj4gPiAKPiA+IFRoZSBBKSBoYXMgdHdvIHNvbHV0aW9ucyB0byB0aGlzIChs b29rIGF0Cj4gPiBodHRwOi8vY29tbWVudHMuZ21hbmUub3JnL2dtYW5lLmNvbXAuZW11bGF0b3Jz Lnhlbi5kZXZlbC8xNDA0MDYgZm9yCj4gPiBkZXRhaWxzKS4gT25lIHByb3Bvc2VkIGJ5IEp1c3Rp biBmcm9tIFNwZWN0cmFsb2dpYyBoYXMgdG8gbmVnb3RpYXRlCj4gPiB0aGUgc2VnbWVudCBzaXpl LiBUaGlzIG1lYW5zIHRoYXQgdGhlIOKAmHN0cnVjdCBibGtpZl9zcmluZ19lbnRyeeKAmQo+ID4g aXMgbm93IGEgdmFyaWFibGUgc2l6ZS4gSXQgY2FuIGV4cGFuZCBmcm9tIDExMiBieXRlcyAoY292 ZXIgMTEgcGFnZXMgb2YKPiA+IGRhdGEgLSA0NGtCKSB0byAxNTgwIGJ5dGVzICgyNTYgcGFnZXMg b2YgZGF0YSAtIHNvIDFNQikuIEl0IGlzIGEgc2ltcGxlCj4gPiBleHRlbnNpb24gYnkganVzdCBt YWtpbmcgdGhlIGFycmF5IGluIHRoZSByZXF1ZXN0IGV4cGFuZCBmcm9tIDExIHRvIGEKPiA+IHZh cmlhYmxlIHNpemUgbmVnb3RpYXRlZC4KPiA+IAo+ID4gCj4gPiBUaGUgbWF0aCBpcyBhcyBmb2xs b3cuCj4gPiAKPiA+IAo+ID4gICAgICAgICBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9zZWdtZW50IHsK PiA+ICAgICAgICAgICAgICAgICB1aW50MzIgZ3JhbnQ7ICAgICAgICAgICAgICAgICAgICAgICAg IC8vIDQgYnl0ZXMgdWludDhfdAo+ID4gICAgICAgICAgICAgICAgIGZpcnN0X3NlY3QsIGxhc3Rf c2VjdDsvLyAxLCAxID0gNiBieXRlcwo+ID4gICAgICAgICB9Cj4gPiAoNiBieXRlcyBmb3IgZWFj aCBzZWdtZW50KSAtIHRoZSBhYm92ZSBzdHJ1Y3R1cmUgaXMgaW4gYW4gYXJyYXkgb2Ygc2l6ZQo+ ID4gMTEgaW4gdGhlIHJlcXVlc3QuIFRoZSDigJhzdHJ1Y3QgYmxraWZfc3JpbmdfZW50cnnigJkg aXMgMTEyIGJ5dGVzLiBUaGUKPiA+IGNoYW5nZSBpcyB0byBleHBhbmQgdGhlIGFycmF5IC0gaW4g dGhpcyBleGFtcGxlIHdlIHdvdWxkIHRhY2sgb24gMjQ1IGV4dHJhCj4gPiDigJhzdHJ1Y3QgYmxr aWZfcmVxdWVzdF9zZWdtZW504oCZIC0gMjQ1KjYgKyAxMTIgPSAxNTgyLiBJZiB3ZSB3ZXJlIHRv Cj4gPiB1c2UgMzYgcmVxdWVzdHMgKHNvIDE1ODIqMzYgKyA2NCkgd2Ugd291bGQgdXNlIDU3MDE2 IGJ5dGVzICgxNCBwYWdlcykuCj4gPiAKPiA+IAo+ID4gVGhlIG90aGVyIHNvbHV0aW9uIChmcm9t IEludGVsIC0gUm9uZ2h1aSkgd2FzIHRvIGNyZWF0ZSBvbmUgZXh0cmEKPiA+IHJpbmcgdGhhdCBv bmx5IGhhcyB0aGUg4oCYc3RydWN0IGJsa2lmX3JlcXVlc3Rfc2VnbWVudOKAmSBpbiB0aGVtLiBU aGUKPiA+IOKAmHN0cnVjdCBibGtpZl9yZXF1ZXN04oCZIHdvdWxkIGJlIGNoYW5nZWQgdG8gaGF2 ZSBhbiBpbmRleCBpbiBzYWlkCj4gPiDigJhzZWdtZW50IHJpbmfigJkuIFRoZXJlIGlzIG9ubHkg b25lIHNlZ21lbnQgcmluZy4gVGhpcyBtZWFucyB0aGF0IHRoZQo+ID4gc2l6ZSBvZiB0aGUgaW5p dGlhbCByaW5nIGlzIHN0aWxsIHRoZSBzYW1lLiBUaGUgcmVxdWVzdHMgd291bGQgcG9pbnQKPiA+ IHRvIHRoZSBzZWdtZW50IGFuZCBlbnVtZXJhdGUgb3V0IGhvdyBtYW55IG9mIHRoZSBpbmRleGVz IGl0IHdhbnRzIHRvCj4gPiB1c2UuIFRoZSBsaW1pdCBpcyBvZiBjb3Vyc2UgdGhlIHNpemUgb2Yg dGhlIHNlZ21lbnQuIElmIG9uZSBhc3N1bWVzIGEKPiA+IG9uZS1wYWdlIHNlZ21lbnQgdGhpcyBt ZWFucyB3ZSBjYW4gaW4gb25lIHJlcXVlc3QgY292ZXIgfjRNQi4gVGhlIG1hdGgKPiA+IGlzIGFz IGZvbGxvdzoKPiA+IAo+ID4gCj4gPiBGaXJzdCByZXF1ZXN0IHVzZXMgdGhlIGhhbGYgb2YgdGhl IHNlZ21lbnQgcmluZyAtIHNvIGluZGV4IDAgdXAKPiA+IHRvIDM0MSAob3V0IG9mIDY4MikuIEVh Y2ggZW50cnkgaW4gdGhlIHNlZ21lbnQgcmluZyBpcyBhIOKAmHN0cnVjdAo+ID4gYmxraWZfcmVx dWVzdF9zZWdtZW504oCZIHNvIGl0IG9jY3VwaWVzIDYgYnl0ZXMuIFRoZSBvdGhlciByZXF1ZXN0 cyBvbgo+ID4gdGhlIHJpbmcgKHNvIHRoZXJlIGFyZSAzNSBsZWZ0KSBjYW4gdXNlIGVpdGhlciB0 aGUgcmVtYWluaW5nIDM0MSBpbmRleGVzCj4gPiBvZiB0aGUgc2dlbWVudCByaW5nIG9yIHVzZSB0 aGUgb2xkIHN0eWxlIHJlcXVlc3QuIFRoZSBvbGQgc3R5bGUgcmVxdWVzdAo+ID4gY2FuIGFkZHJl c3MgdXNlIHVwIHRvIDQ0a0IuIEZvciBleGFtcGxlOgo+ID4gCj4gPiAKPiA+ICBzcmluZ1swXS0+ W3VzZXMgMC0+MzQxIGluZGV4ZXMgaW4gdGhlIHNlZ21lbnQgcmluZ10gPSAzNDIqNDA5NiA9IDE0 MDA4MzIKPiA+ICBzcmluZ1sxXS0+W3VzZSBzdGhlIG9sZCBzdHlsZSByZXF1ZXN0XSA9IDExKjQw OTYgPSA0NTA1Ngo+ID4gIHNyaW5nWzJdLT5bdXNlcyAzNDItPjY4MiBpbmRleGVzIGluIHRoZSBz ZWdtZW50IHJpbmddID0gMTM5MjY0MAo+ID4gIHNyaW5nWzMuLjMyXSAtPiBbdXNlcyB0aGUgb2xk IHN0eWxlIHJlcXVlc3RdID0gMjkqNDA5NioxMSA9IDEzMDY2MjQKPiA+IAo+ID4gCj4gPiBUb3Rh bDogNDE0NTE1MiBieXRlcyBOYXR1cmFsbHkgdGhpcyBjb3VsZCBiZSBleHRlbmRlZCB0byBoYXZl IGEgYmlnZ2VyCj4gPiBzZWdtZW50IHJpbmcgdG8gY292ZXIgbW9yZS4KPiA+IAo+ID4gCj4gPiAK PiA+IAo+ID4gCj4gPiBUaGUgcHJvYmxlbSB3aXRoIHRoaXMgZXh0ZW5zaW9uIGlzIHRoYXQgd2Ug dXNlIDYgYnl0ZXMgYW5kIGVuZCB1cAo+ID4gc3RyYWRkbGluZyBhIGNhY2hlIGxpbmUuIFVzaW5n IDggYnl0ZXMgd2lsbCBmaXggdGhlIGNhY2hlIHN0cmFkZGxpbmcuIFRoaXMKPiA+IHdvdWxkIG1l YW4gZml0dGluZyBvbmx5IDUxMiBzZWdtZW50cyBwZXIgcGFnZS4KPiA+IAo+ID4gCj4gPiBUaGVy ZSBpcyB5ZXQgYW5vdGhlciBtZWNoYW5pc20gdGhhdCBjb3VsZCBiZSBlbXBsb3llZCAgLSBhbmQg aXQgYm9ycm93cwo+ID4gZnJvbSBWaXJ0SU8gcHJvdG9jb2wuIEFuZCB0aGF0IGlzIHRoZSDigJhp bmRpcmVjdCBkZXNjcmlwdG9yc+KAmS4gVGhpcwo+ID4gdmVyeSBzaW1pbGFyIHRvIHdoYXQgSW50 ZWwgc3VnZ2VzdHMsIGJ1dCB3aXRoIGEgdHdpc3QuCj4gPiAKPiA+IAo+ID4gV2UgY291bGQgcHJv dmlkZSBhIG5ldyBCTEtJRl9PUCAoc2F5IEJMS0lGX09QX0lORElSRUNUKSwgYW5kIHRoZSDigJhz dHJ1Y3QKPiA+IGJsa2lmX3NyaW5n4oCZIChlYWNoIGVudHJ5IGNhbiBiZSB1cCB0byAxMTIgYnl0 ZXMgaWYgbmVlZGVkIC0gc28gdGhlCj4gPiBvbGQgc3R5bGUgcmVxdWVzdCB3b3VsZCBmaXQpLiBJ dCB3b3VsZCBsb29rIGxpa2U6Cj4gPiAKPiA+IAo+ID4gLyogc28gNjQgYnl0ZXMgdW5kZXIgNjQt Yml0LiBJZiBuZWNlc3NhcnksIHRoZSBhcnJheSAoc2VnKSBjYW4gYmUKPiA+IGV4cGFuZGVkIHRv IGZpdCAxMSBzZWdtZW50cyBhcyB0aGUgb2xkIHN0eWxlIHJlcXVlc3QgZGlkICovIHN0cnVjdAo+ ID4gYmxraWZfcmVxdWVzdF9pbmRpcmVjdCB7Cj4gPiAgICAgICAgIHVpbnQ4X3QgICAgICAgIG9w OyAgICAgICAgICAgLyogQkxLSUZfT1BfKiAodXN1YWxseSBSRUFEIG9yIFdSSVRFICAgICovCj4g PiAvLyAxIGJsa2lmX3ZkZXZfdCAgIGhhbmRsZTsgICAgICAgLyogb25seSBmb3IgcmVhZC93cml0 ZSByZXF1ZXN0cyAgICAgICAgICovIC8vIDIKPiA+ICNpZmRlZiBDT05GSUdfWDg2XzY0Cj4gPiAg ICAgICAgIHVpbnQzMl90ICAgICAgIF9wYWQxOyAgICAgICAgICAgICAvKiBvZmZzZXRvZihibGtp Zl9yZXF1ZXN0LHUucncuaWQpID09IDggKi8gLy8gMgo+ID4gI2VuZGlmCj4gPiAgICAgICAgIHVp bnQ2NF90ICAgICAgIGlkOyAgICAgICAgICAgLyogcHJpdmF0ZSBndWVzdCB2YWx1ZSwgZWNob2Vk IGluIHJlc3AgICovCj4gPiAgICAgICAgIGdyYW50X3JlZl90ICAgIGdyZWY7ICAgICAgICAvKiBy ZWZlcmVuY2UgdG8gaW5kaXJlY3QgYnVmZmVyIGZyYW1lICBpZiB1c2VkKi8KPiA+ICAgICAgICAg ICAgIHN0cnVjdCBibGtpZl9yZXF1ZXN0X3NlZ21lbnRfYWxpZ25lZCBzZWdbNF07IC8vIGVhY2gg aXMgOCBieXRlcwo+ID4KPiA+IH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwo+ID4gCj4g PiAKPiA+IHN0cnVjdCBibGtpZl9yZXF1ZXN0IHsKPiA+ICAgICAgICAgdWludDhfdCAgICAgICAg b3BlcmF0aW9uOyAgICAvKiBCTEtJRl9PUF8/Pz8gICovCj4gPiAgICAgICAgIHVuaW9uIHsKPiA+ ICAgICAgICAgICAgICAgICBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9ydyBydzsKPiA+ICAgICAgICAg ICAgICAgICBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9pbmRpcmVjdAo+ID4gICAgICAgICAgICAgICAg IGluZGlyZWN0OyDigKYgb3RoZXIgLi4KPiA+ICAgICAgICAgfSB1Owo+ID4gfSBfX2F0dHJpYnV0 ZV9fKChfX3BhY2tlZF9fKSk7Cj4gPiAKPiAKPiBEbyB5b3UgdGhpbmsgaXQgd2lsbCBiZSBzdWl0 YWJsZSB0byBjaGFuZ2UgdGhlIHNpemUgb2YgYmxraWZfcmVxdWVzdCwgSSAKPiB3YXMgdGhpbmtp bmcgdGhhdCBpZiB3ZSBpbnRyb2R1Y2UgaW5kaXJlY3QgcmVxdWVzdCB3ZSBjb3VsZCByZWR1Y2Ug dGhlIAo+IG1heGltdW0gbnVtYmVyIG9mIHNlZ21lbnRzIHBlciByZXF1ZXN0IHRvIDIsIHNvIGJs a2lmX3JlcXVlc3QgaXMgCj4gcmVkdWNlZCB0byAzMmJ5dGVzIGFuZCB3ZSBjYW4gZml0IDEyNiBy ZXF1ZXN0cyAoNjQgZHVlIHRvIHJvdW5kaW5nKSAKPiBpbiBhIHNpbmdsZSByaW5nLiAKCkFsdGVy aW5nIGl0IHRvIGJlIDMyLWJ5dGVzIG1lYW5zIHdlIGFyZSBzdGlsbCBjcm9zc2luZyB0d28gY2Fj aGVsaW5lcy4KClRoaXMgaXMgd2hlcmUgSSB0aG91Z2h0IG9mIHB1dHRpbmcgJ3N0cnVjdCBibGtp Zl9yZXF1ZXN0X3J3JyBvbiBhIGRpZXQKYW5kIGp1c3QgbWFraW5nIGl0IGhhdmUgNCBvZiB0aGUg Z3JhbnRzIC0gaW4gY2FzZSB0aGUgcmVxdWVzdCBpcwpqdXN0IDE2Sy4gQW5kIHRoZW4gdGhlIHNp emUgb2YgdGhlIHN0cnVjdHVyZSAoaWYgSSBnb3QgbXkgbWF0aCByaWdodCkKd291bGQgYmUgNjQt Ynl0ZXMuCgpOYXR1cmFsbHkgdGhpcyBtZWFucyB3ZSBuZWVkIHRvIG5lZ290aWF0ZSBhICdmZWF0 dXJlLXJlcXVlc3Qtc2l6ZScKd2hlcmUgdjEgc2F5cyB0aGF0IHRoZSByZXF1ZXN0IGlzIG9mIDY0 LWJ5dGVzIGxlbmd0aC4gdjIgbWlnaHQKYmUgMTI4Ynl0ZXMgb3Igd2hhdGV2ZXIgZWxzZSB3ZSB3 b3VsZCBuZWVkIHRvIGZpdCB3aXRoaW4gYSBjYWNoZWxpbmUKaW4gZnV0dXJlIENQVXMuIFdlIGNv dWxkIHBhZCB0aGUgJ3N0cnVjdCByZXF1ZXN0X3YxJyB3aXRoIDY0LWJ5dGVzCmluIGNhc2UgdGhl IGNhY2hlbGluZSBpcyAxMjhieXRlcyBhbmQgb3VyIHJlcXVlc3QgaXMgNjQtYnl0ZXMuCgoKPiAK PiBFdmVyeXRoaW5nIHRoYXQgbmVlZHMgbW9yZSB0aGFuIHR3byBzZWdtZW50cyB3aWxsIHN3aXRj aCB0byB1c2luZyB0aGUgCj4gbmV3IGluZGlyZWN0IG9wZXJhdGlvbi4gQWxzbywgdG8gbWFrZSB1 c2Ugb2YgdGhlIGV4dHJhIHNwYWNlIGluIAo+IGJsa2lmX3JlcXVlc3RfaW5kaXJlY3QgSSB3b3Vs ZCByZW1vdmUgdGhlIGV4dHJhIHNlZ21lbnRzIGFuZCBpbnN0ZWFkIAo+IHBhc3MgbW9yZSBncmFu dCByZWZlcmVuY2VzIHRvIGZyYW1lcyBjb250YWluaW5nIAo+IGJsa2lmX3JlcXVlc3RfaW5kaXJl Y3RfZW50cnkgZW50cmllcy4KClJpZ2h0LiBUaGUgY29tcGxpY2F0aW9ucyBhcmlzZSB3aGVuIHdl IG5lZWQgdG8gc3VwcG9ydCB0aGlzIG5ldyBmb3JtYXQKYW5kIHRoZSBvbGQgZm9ybWF0IGFuZCBo YXZlIHRvIHN3aXRjaCBvdmVyIHdoZW4gd2UgbWlncmF0ZSB0byBvbGQKYmFja2VuZHMuCgo+IAo+ ICNkZWZpbmUgQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUIDIKPiAjZGVmaW5lIEJMS0lG X01BWF9JTkRJUkVDVF9HUkVGU19QRVJfUkVRVUVTVCA0Cj4gCj4gc3RydWN0IGJsa2lmX3JlcXVl c3Rfc2VnbWVudCB7Cj4gICAgIGdyYW50X3JlZl90IGdyZWY7ICAgICAgICAvKiByZWZlcmVuY2Ug dG8gSS9PIGJ1ZmZlciBmcmFtZSAgICAgICAgKi8KPiAgICAgLyogQGZpcnN0X3NlY3Q6IGZpcnN0 IHNlY3RvciBpbiBmcmFtZSB0byB0cmFuc2ZlciAoaW5jbHVzaXZlKS4gICAqLwo+ICAgICAvKiBA bGFzdF9zZWN0OiBsYXN0IHNlY3RvciBpbiBmcmFtZSB0byB0cmFuc2ZlciAoaW5jbHVzaXZlKS4g ICAgICovCj4gICAgIHVpbnQ4X3QgICAgIGZpcnN0X3NlY3QsIGxhc3Rfc2VjdDsKPiB9IF9fYXR0 cmlidXRlX18oKF9fcGFja2VkX18pKTsKPiAKPiBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9pbmRpcmVj dF9lbnRyeSB7Cj4gICAgIGJsa2lmX3NlY3Rvcl90ICBzZWN0b3JfbnVtYmVyOwo+ICAgICBzdHJ1 Y3QgICAgICAgICAgYmxraWZfcmVxdWVzdF9zZWdtZW50IHNlZzsKPiAgICAgdWludDhfdCAgICAg ICAgIF9wYWRbMl07Cj4gfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cj4gCj4gc3RydWN0 IGJsa2lmX3JlcXVlc3Rfcncgewo+ICAgICB1aW50OF90ICAgICAgICBucl9zZWdtZW50czsgIC8q IG51bWJlciBvZiBzZWdtZW50cyAgICAgICAgICAgICAgICAgICAqLwo+ICAgICBibGtpZl92ZGV2 X3QgICBoYW5kbGU7ICAgICAgIC8qIG9ubHkgZm9yIHJlYWQvd3JpdGUgcmVxdWVzdHMgICAgICAg ICAqLwo+ICAgICB1aW50NjRfdCAgICAgICBpZDsgICAgICAgICAgIC8qIHByaXZhdGUgZ3Vlc3Qg dmFsdWUsIGVjaG9lZCBpbiByZXNwICAqLwo+ICAgICBibGtpZl9zZWN0b3JfdCBzZWN0b3JfbnVt YmVyOy8qIHN0YXJ0IHNlY3RvciBpZHggb24gZGlzayAoci93IG9ubHkpICAqLwo+ICAgICBzdHJ1 Y3QgYmxraWZfcmVxdWVzdF9zZWdtZW50IHNlZ1tCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVF U1RdOwo+IH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwo+IAo+IHN0cnVjdCBibGtpZl9y ZXF1ZXN0X2luZGlyZWN0IHsKPiAgICAgdWludDhfdCAgICAgICAgb3A7ICAgICAgICAgICAvKiBC TEtJRl9PUF8qICh1c3VhbGx5IFJFQUQgb3IgV1JJVEUgICAgKi8KPiAgICAgdWludDE2X3QgICAg ICAgbnJfaW5kaXJlY3Q7ICAvKiBudW1iZXIgb2YgaW5kaXJlY3QgZW50cmllcyBpbiBncmVmIGZy YW1lcyAqLwo+ICAgICBibGtpZl92ZGV2X3QgICBoYW5kbGU7ICAgICAgIC8qIG9ubHkgZm9yIHJl YWQvd3JpdGUgcmVxdWVzdHMgICAgICAgICAqLwo+ICAgICB1aW50NjRfdCAgICAgICBpZDsgICAg ICAgICAgIC8qIHByaXZhdGUgZ3Vlc3QgdmFsdWUsIGVjaG9lZCBpbiByZXNwICAqLwo+ICAgICAv KiByZWZlcmVuY2UgdG8gaW5kaXJlY3QgYnVmZmVyIGZyYW1lICovCj4gICAgIGdyYW50X3JlZl90 ICAgIGdyZWZbQkxLSUZfTUFYX0lORElSRUNUX0dSRUZTX1BFUl9SRVFVRVNUXTsKPiB9IF9fYXR0 cmlidXRlX18oKF9fcGFja2VkX18pKTsKPiAKPiBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9kaXNjYXJk IHsKPiAgICAgdWludDhfdCAgICAgICAgZmxhZzsgICAgICAgICAvKiBCTEtJRl9ESVNDQVJEX1NF Q1VSRSBvciB6ZXJvLiAgICAgICAgKi8KPiAjZGVmaW5lIEJMS0lGX0RJU0NBUkRfU0VDVVJFICgx PDwwKSAgLyogaWdub3JlZCBpZiBkaXNjYXJkLXNlY3VyZT0wICAgICAgICAgICovCj4gICAgIHVp bnQ2NF90ICAgICAgIGlkOyAgICAgICAgICAgLyogcHJpdmF0ZSBndWVzdCB2YWx1ZSwgZWNob2Vk IGluIHJlc3AgICovCj4gICAgIGJsa2lmX3NlY3Rvcl90IHNlY3Rvcl9udW1iZXI7Cj4gICAgIHVp bnQ2NF90ICAgICAgIG5yX3NlY3RvcnM7Cj4gfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7 Cj4gCj4gc3RydWN0IGJsa2lmX3JlcXVlc3Qgewo+ICAgICB1aW50OF90ICAgICAgICBvcGVyYXRp b247ICAgIC8qIEJMS0lGX09QXz8/PyAgICAgICAgICAgICAgICAgICAgICAgICAqLwo+ICAgICB1 bmlvbiB7Cj4gICAgICAgICBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9ydyBydzsKPiAgICAgICAgIHN0 cnVjdCBibGtpZl9yZXF1ZXN0X2luZGlyZWN0IGluZGlyZWN0Owo+ICAgICAgICAgc3RydWN0IGJs a2lmX3JlcXVlc3RfZGlzY2FyZCBkaXNjYXJkOwo+ICAgICB9IHU7Cj4gfSBfX2F0dHJpYnV0ZV9f KChfX3BhY2tlZF9fKSk7Cj4gCj4gSSd2ZSByZW1vdmVkIGFsbCB0aGUgZXh0cmEgcGFkZGluZ3Ms IGJlY2F1c2UgdGhpcyBwcm90b2NvbCBpcyBubyBsb25nZXIgCj4gY29tcGF0aWJsZSB3aXRoIHRo ZSBwcmV2aW91cyBvbmUgKHdlIG1vZGlmeSAKPiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVF U1QpLCBhbmQgcGFja2VkIHRoZSBzdHJ1Y3R1cmVzLiBJJ20gCj4gd29uZGVyaW5nIGlmIHVzaW5n IF9fYXR0cmlidXRlX18gaW4gYSBwdWJsaWMgaGVhZGVyIGlzIGFsbG93ZWQsIHNpbmNlIAo+IHRo aXMgaXMgYSBHTlUgZXh0ZW5zaW9uIChBRkFJSyBzdXBwb3J0ZWQgYnkgZ2NjIGFuZCBjbGFuZyBh dCBsZWFzdCkuCgpJIGRvbid0IGtub3cuIEJ1dCBJIHRoaW5rIHdlIGNhbiBieXBhc3MgdGhlIG5l ZWQgZm9yIGl0IGlmIHdlIGNhbGN1bGF0ZQp0aGUgc2l6ZSBvZiBlYWNoIGVudHJ5IHJpZ2h0IGFu ZCBpbnNlcnQgcGFkZGluZyB3aGVuZXZlciBuZWNjZXNzYXJ5LgoKPiAKPiBUaGUgbWFpbiBtb3Rp dmF0aW9uIGJlaGluZCB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBzaXplIG9mIHRoZSAKPiByZXF1 ZXN0IGlzIGJlY2F1c2UgSSd2ZSByZWFsaXplZCB0aGF0IGluIHlvdXIgcHJvcG9zYWwsIHlvdSB3 aGVyZSAKPiBhZGRpbmcgNCBleHRyYSBzZWdtZW50cyB0byB0aGUgaW5kaXJlY3QgcmVxdWVzdCwg YW5kIEkgd2FzIHdvbmRlcmluZyAKPiBpZiBJIGNvdWxkIHBhY2sgbW9yZSBncmFudCBmcmFtZXMg Y29udGFpbmluZyBpbmRpcmVjdCBlbnRyaWVzIGluIGEgCj4gc2luZ2xlIHJlcXVlc3QuIEJ5IHVz aW5nIHRoZSBvbGQgc2l6ZSBvZiBibGtmX3JlcXVlc3Qgd2Ugd2lsbCBiZSBhYmxlIHRvCj4gc2Vu ZCB1cCB0byA5IGdyYW50IGZyYW1lcyBmaWxsZWQgd2l0aCBpbmRpcmVjdCBlbnRyaWVzLCB3aGlj aCBnaXZlcyB1cwo+IDQwOTYgKiAyNTYgKiA5ID0gOU1CIG9mIG91dHN0YW5kaW5nIElPIGluIGVh Y2ggcmVxdWVzdC4gSSB0aGluayB0aGF0Cj4gdGhpcyBpcyB0b28gaGlnaCwgYW5kIHdpbGwgaW50 cm9kdWNlIGEgbG90IG9mIGxhdGVuY3kgdG8gdGhlIHByb3RvY29sLgo+IFRoYXQncyB0aGUgbWFp biByZWFzb24gSSd2ZSBkZWNpZGVkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiBibGtpZl9yZXF1ZXN0 Cj4gaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBmaXQgbW9yZSBvZiB0aGVtIGluIGEgcmluZywgaW5z dGVhZCBvZiBtYWtpbmcKPiBlYWNoIG9mIHRoZSByZXF1ZXN0cyBiaWdnZXIuCgpPSy4gVGhhdCBp cyBPSyBhcyBsb25nIGFzIHdlIG1ha2Ugc3VyZSB0byBfbm90XyBoYXZlIHR3byByZXF1ZXN0cwpz dHJhZGRsaW5nIHRoZSBjYWNoZS1saW5lLiBPciBtYXliZSB0aGF0IGlzIG5vdCBhIHByb2JsZW0u CgpCdXQgdGhlIG90aGVyIG5pY2UgYmVuZWZpdCBvZiB5b3VyIGlkZWEgLSB3aGVyZSBpdCBpcyBv bmx5IDMyLWJ5dGVzCi0gaXMgdGhhdCB3ZSBoYXZlIG5vdyBleHRyYSAzMi1ieXRlcyB3aGVyZSB3 ZSBjYW4gaW5zZXJ0IHN1Y2gKdGhpbmdzIGFzIERJRi9ESVggb3IgIm90aGVyIiBuZXcgZmVhdHVy ZXMuIEFuZCB0aGF0IHdheSBoYXZlIHRoZQpyZXF1ZXN0IGJlIG9mIHNpemUgNjQgYnl0ZXMuCgo+ IAo+IFVzaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gZWFjaCByZXF1ZXN0IGhhcyBhIHNpemUgb2Yg MzJieXRlcyAodG8gCj4gcHJldmVudCBjYWNoZSBzdHJhZGRsZSksIHNvIHdlIGNvdWxkIGZpdCAx MjYgcmVxdWVzdHMgaW4gYSByaW5nLCBidXQgCj4gZHVlIHRvIHRoZSByb3VuZGluZywgd2UgZW5k IHVwIHdpdGggNjQuIEFsc28gZWFjaCByZXF1ZXN0IGNhbiBjb250YWluIAo+IDQgZ3JhbnQgcGFn ZXMsIGVhY2ggb25lIGZpbGxlZCB3aXRoIDI1NiBibGtpZl9yZXF1ZXN0X2luZGlyZWN0X2VudHJ5 LiAKPiBUaGUgbWF0aCBmb3IgdGhlIG1heGltdW0gZGF0YSBpbiBhIHJlcXVlc3QgaXM6IDQwOTYg KiAyNTYgKiA0ID0gNE1CLCAKPiBhbmQgaW4gdGhlIHdob2xlIHJpbmcgNCAqIDY0ID0gMjU2TUIg d29ydGggb2Ygb3V0c3RhbmRpbmcgSU8uCj4gIAoKV2hpY2ggaGFzIGEgbmljZSBwb3dlciBvZiB0 d28gcmluZyB0byBpdC4gKEFoIHRoZSBwdW5zISkKCkkgbGlrZSB0aGUgaWRlYSBvZiBwdXR0aW5n IHRoZSByZXF1ZXN0IG9uIGEgZGlldCAtIGJ1dCB0b28gbXVjaApjb3VsZCBjYXVzZSB1cyB0byBt aXNzIHRoZSBvcHBvcnR1bml0eSB0byBpbnNlcnQgb3RoZXIgZmxhZ3Mgb24gaXQuCklmIEkgcmVj YWxsIGNvcnJlY3RseSwgdGhlIERJRi9ESVggb25seSBuZWVkIDggYnl0ZXMgb2YgZGF0YS4KSWYg d2UgbWFrZSB0aGUgYXNzdW1wdGlvbiB0aGF0OgoJSS9PIHJlcXVlc3QgPSBvbmUgcmluZyBlbnRy eQoKYW5kIHRoZSAgIm9uZSByaW5nIGVudHJ5IiBjYW4gdXNlIHRoZSB0aGUgJzQnIGdyYW50cyBp ZiB3ZSBqdXN0IGhhdmUgYQoxNktCIEkvTyByZXF1ZXN0LCBidXQgaWYgaXQgaXMgbW9yZSB0aGFu IHRoYXQgLSB3ZSB1c2UgdGhlIGluZGlyZWN0IHBhZ2UKYW5kIGNhbiBzdHVmZiAxTUIgb2YgZGF0 YSBpbiB0aGVyZS4gClRoZSBleHRyYSAzMi1ieXRlcyBvZiBzcGFjZSBmb3Igc3VjaCB0aGluZ3Mg YXMgJ0RJRi9ESVgnLiBUaGlzIGFsc28KbWVhbnMgd2UgY291bGQgdW5pZnkgdGhlICdzdHJ1Y3Qg cmVxdWVzdCcgd2l0aCB0aGUgJ2Rpc2NhcmQnIG9wZXJhdGlvbgphbmQgaXQgY291bGQgdXRpbGl6 ZSB0aGUgMzItYnl0ZXMgb2YgZXh0cmEgdW51c2VkIHBheWxvYWQgZGF0YS4KCj4gPiAKPiA+IAo+ ID4gVGhlIOKAmG9wZXJhdGlvbuKAmSB3b3VsZCBiZSBCTEtJRl9PUF9JTkRJUkVDVC4gVGhlIHJl YWQvd3JpdGUvZGlzY2FyZCwKPiA+IGV0YyBvcGVyYXRpb24gd291bGQgbm93IGJlIGluIGluZGly ZWN0Lm9wLiBUaGUgaW5kaXJlY3QuZ3JlZiBwb2ludHMgdG8KPiA+IGEgcGFnZSB0aGF0IGlzIGZp bGxlZCB3aXRoOgo+ID4gCj4gPiAKPiA+IHN0cnVjdCBibGtpZl9yZXF1ZXN0X2luZGlyZWN0X2Vu dHJ5IHsKPiA+ICAgICAgICAgYmxraWZfc2VjdG9yX3Qgc2VjdG9yX251bWJlcjsKPiA+ICAgICAg ICAgc3RydWN0IGJsa2lmX3JlcXVlc3Rfc2VnbWVudCBzZWc7Cj4gPiB9IF9fYXR0cmlidXRlX18o KF9fcGFja2VkX18pKTsKPiA+IC8vMTYgYnl0ZXMsIHNvIHdlIGNhbiBmaXQgaW4gYSBwYWdlIDI1 NiBvZiB0aGVzZSBzdHJ1Y3R1cmVzLgo+ID4gCj4gPiAKPiA+IFRoaXMgbWVhbnMgdGhhdCB3aXRo IHRoZSBleGlzdGluZyAzNiBzbG90cyBpbiB0aGUgcmluZyAoc2luZ2xlIHBhZ2UpCj4gPiB3ZSBj YW4gY292ZXI6IDMyIHNsb3RzICogZWFjaCBibGtpZl9yZXF1ZXN0X2luZGlyZWN0IGNvdmVyczog MjU2ICogNDA5Ngo+ID4gfj0gMzJNLiBJZiB3ZSBkb27igJl0IHdhbnQgdG8gdXNlIGluZGlyZWN0 IGRlc2NyaXB0b3Igd2UgY2FuIHN0aWxsIHVzZQo+ID4gdXAgdG8gNCBwYWdlcyBvZiB0aGUgcmVx dWVzdCAoYXMgaXQgaGFzIGVub3VnaCBzcGFjZSB0byBjb250YWluIGZvdXIKPiA+IHNlZ21lbnRz IGFuZCB0aGUgc3RydWN0dXJlIHdpbGwgc3RpbGwgYmUgY2FjaGUtYWxpZ25lZCkuCj4gPiAKPiA+ IAo+ID4gCj4gPiAKPiA+IEIpLiBCb3RoIHRoZSBwcm9kdWNlciAocmVxXyogYW5kIHJzcF8qKSB2 YWx1ZXMgYXJlIGluIHRoZSBzYW1lCj4gPiBjYWNoZS1saW5lLiBUaGlzIG1lYW5zIHRoYXQgd2Ug ZW5kIHVwIHdpdGggdGhlIHNhbWUgY2FjaGVsaW5lIGJlaW5nCj4gPiBtb2RpZmllZCBieSB0d28g ZGlmZmVyZW50IGd1ZXN0cy4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgYW5kCj4gPiBw bGFjZW1lbnQgb2YgdGhlIGd1ZXN0IHRoaXMgY291bGQgYmUgYmFkIC0gYXMgZWFjaCBsb2dpY2Fs IENQVSB3b3VsZAo+ID4gdHJ5IHRvIHdyaXRlIGFuZCByZWFkIGZyb20gdGhlIHNhbWUgY2FjaGUt bGluZS4gQSBtZWNoYW5pc20gd2hlcmUKPiA+IHRoZSByZXFfKiBhbmQgcnNwXyB2YWx1ZXMgYXJl IHNlcGFyYXRlZCBhbmQgb24gYSBkaWZmZXJlbnQgY2FjaGUgbGluZQo+ID4gY291bGQgYmUgdXNl ZC4gVGhlIHZhbHVlIG9mIHRoZSBjb3JyZWN0IGNhY2hlLWxpbmUgYW5kIGFsaWdubWVudCBjb3Vs ZAo+ID4gYmUgbmVnb3RpYXRlZCB2aWEgWGVuQnVzIC0gaW4gY2FzZSBmdXR1cmUgdGVjaG5vbG9n aWVzIHN0YXJ0IHVzaW5nIDEyOAo+ID4gYnl0ZXMgZm9yIGNhY2hlIG9yIHN1Y2guIE9yIHRoZSB0 aGUgcHJvZHVjZXIgYW5kIGNvbnN1bWVyIGluZGV4ZXMgYXJlIGluCj4gPiBzZXBhcmF0ZSByaW5n cy4gTWVhbmluZyB3ZSBoYXZlIGEg4oCYcmVxdWVzdCByaW5n4oCZIGFuZCBhIOKAmHJlc3BvbnNl Cj4gPiByaW5n4oCZIC0gYW5kIG9ubHkgdGhlIOKAmHJlcV9wcm9k4oCZLCDigJhyZXFfZXZlbnTi gJkgYXJlIG1vZGlmaWVkIGluCj4gPiB0aGUg4oCYcmVxdWVzdCByaW5n4oCZLiBUaGUgb3Bwb3Np dGUgKHJlc3BfKikgYXJlIG9ubHkgbW9kaWZpZWQgaW4gdGhlCj4gPiDigJhyZXNwb25zZSByaW5n 4oCZLgo+IAo+IFVzaW5nIGRpZmZlcmVudCByaW5ncyBmb3IgcmVxdWVzdHMgYW5kIHJlc3BvbnNl cyBzb3VuZHMgbGlrZSBhIGdvb2QgaWRlYSwKPiB0aGlzIHdpbGwgcmVkdWNlIHRoZSBudW1iZXIg b2YgdmFyaWFibGVzIG9uIHRoZSByaW5nLCBsZWF2aW5nIG9ubHkKPiAicHJvZHVjZWQiIGFuZCAi ZXZlbnQiICh3ZSBubyBsb25nZXIgbmVlZCByc3BfIGFuZCByZXFfKS4KCjxub2RzPgo+IAo+IFNp bmNlIHdlIHdpbGwgbm8gbG9uZ2VyIGhhdmUgdHdvIGRpZmZlcmVudCBkb21haW5zIHdyaXRpbmcg dG8gdGhlIHNhbWUKPiBjYWNoZSBsaW5lIEkgZ3Vlc3MgdGhpcyB3aWxsIGdldCByaWQgb2YgdGhl IGNhY2hlIHBpbmctcG9uZyBwcm9ibGVtLgoKPG5vZHM+IFRoYXQgaXMgbXkgdGhpbmtpbmcuCj4g Cj4gQWxzbyB3aGlsZSB0aGVyZSB3ZSBjb3VsZCB0cnkgdG8gdXNlIGFsbCB0aGUgcGFnZSwgaW5z dGVhZCBvZiByb3VuZGluZwo+IGRvd24gdG8gdGhlIGNsb3NlciBwb3dlciBvZiB0d28sIHRoaXMg d2lsbCBhbGxvdyB1cyB0byBnbyBmcm9tIDY0Cj4gcmVxdWVzdHMgdG8gMTI2IChpZiB1c2luZyB0 aGUgaW5kaXJlY3QgZGVzY3JpcHRvcnMgcHJvcG9zYWwgZXhwbGFpbmVkCj4gYWJvdmUpLgoKUmln aHQuCkxldHMgY2FsbCB0aGlzICdmZWF0dXJlLXNlcGVyYXRlLXJlcS1hbmQtcnNwJyA/Cgo+ICAK PiA+IEMpLiBTaW1pbGFyIHRvIEIpIHByb2JsZW0gYnV0IHdpdGggYSBiaWdnZXIgcGF5bG9hZC4g RWFjaAo+ID4g4oCYYmxraWZfc3JpbmdfZW50cnnigJkgb2NjdXBpZXMgMTEyIGJ5dGVzIHdoaWNo IGRvZXMgbm90IGxlbmQgaXRzZWxmCj4gPiB0byBhIG5pY2UgY2FjaGUgbGluZSBzaXplLiBJZiB0 aGUgaW5kaXJlY3QgZGVzY3JpcHRvcnMgYXJlIHRvIGJlIHVzZWQKPiA+IGZvciBldmVyeXRoaW5n IHdlIGNvdWxkIOKAmHNsaW0tZG93buKAmSB0aGUgYmxraWZfcmVxdWVzdC9yZXNwb25zZSB0bwo+ ID4gYmUgdXAtdG8gNjQgYnl0ZXMuIFRoaXMgbWVhbnMgbW9kaWZ5aW5nIEJMS0lGX01BWF9TRUdN RU5UU19QRVJfUkVRVUVTVAo+ID4gdG8gNSBhcyB0aGF0IHdvdWxkIHNsaW0gdGhlIGxhcmdlc3Qg b2YgdGhlIHN0cnVjdHVyZXMgdG8gNjQtYnl0ZXMuCj4gPiBOYXR1cmFsbHkgdGhpcyBtZWFucyBu ZWdvdGlhdGluZyBhIG5ldyBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgdmlhIFhlbkJ1cy4KCkhlcmUg SSBhbSB1c2luZyA1LCBhbmQgSSB0aGluayB5b3Ugd2VyZSB1c2luZyA0IC0gYW5kIHlvdSBtZW50 aW9uZWQgeW91CmdvdCBpdCBkb3duIHRvIDMyLWJ5dGVzLiBJIHNob3VsZCBkb3VibGUtY2hlY2sg dGhlICdzaXplb2YnIHRoZW4gdG8Kc2VlIHdoYXQgaXQgd291bGQgYmUgbGlrZS4KCj4gPiAKPiA+ IAo+ID4gRCkuIFRoZSBmaXJzdCBwaWN0dXJlIHNob3dzIHRoZSBwcm9ibGVtLiBXZSBub3cgYWxp Z25pbmcgZXZlcnl0aGluZwo+ID4gb24gdGhlIHdyb25nIGNhY2hlbGluZXMuIFdvcnN0IGluIOKF kyBvZiB0aGUgY2FzZXMgd2Ugc3RyYWRkbGUKPiA+IHRocmVlIGNhY2hlLWxpbmVzLiBXZSBjb3Vs ZCBuZWdvdGlhdGUgYSBwcm9wZXIgYWxpZ25tZW50IGZvciBlYWNoCj4gPiByZXF1ZXN0L3Jlc3Bv bnNlIHN0cnVjdHVyZS4KPiA+IAo+ID4gCj4gPiBFKS4gVGhlIG5ldHdvcmsgc3RhY2sgaGFzIHNo b3dlZCB0aGF0IGdvaW5nIGluIGEgcG9sbGluZyBtb2RlIGRvZXMgaW1wcm92ZQo+ID4gcGVyZm9y bWFuY2UuIFRoZSBjdXJyZW50IG1lY2hhbmlzbSBvZiBraWNraW5nIHRoZSBndWVzdCBhbmQgb3Ig YmxvY2sKPiA+IGJhY2tlbmQgaXMgbm90IGFsd2F5cyBjbGVhci4gIFtUT0RPOiBLb25yYWQgdG8g ZXhwbGFpbiBpdCBpbiBkZXRhaWxzXQoKT2gsIEkgbmV2ZXIgZGlkIGV4cGxhaW4gdGhpcyAtIGJ1 dCBJIHRoaW5rIHRoZSBwYXRjaGVzIHRoYXQgRGFuaWVsIGNhbWUKdXAgd2l0aCBhY3R1YWxseSBm aXggYSBwYXJ0IG9mIGl0LiBUaGV5IG1ha2UgdGhlIGtpY2stdGhlLW90aGVyIGd1ZXN0Cm9ubHkg aGFwcGVuIHdoZW4gdGhlIGJhY2tlbmQgaGFzIHByb2Nlc3NlZCBhbGwgb2YgdGhlIHJlcXVlc3Rz IGFuZApjYW5ub3QgZmluZCBhbnl0aGluZyBlbHNlIHRvIGRvLiBQcmV2aW91c2x5IGl0IHdhcyBt b3JlIG9mICdkb25lIG9uZQpyZXF1ZXN0LCBsZXRzIGtpY2sgdGhlIGJhY2tlbmQuJy4KCkJ1dCBn b2luZyBmb3J3YXJkLCB0aGlzICdraWNrLXRoZS1vdGhlci1ndWVzdCcgY291bGQgYmUgZnVydGhl ciBtb2R1bGF0ZWQuCklmIHdlIGhhdmUgYSBmdWxsIHJpbmcgYW5kIHRoZSBmcm9udGVuZCBrZWVw cyBvbiBhZGRpbmcgZW50cmllcyB3ZSAoYmFja2VuZCkKc2hvdWxkIG5ldmVyIGdldCBhbiBpbnRl cnJ1cHQuIEFzIG9mIG1hdHRlciBvZiBmYWN0IHRoZSBmcm9udGVuZCBzaG91bGQgYmUganVzdApw b2xsaW5nIGFsbCB0aGUgdGltZSBhbmQgcHJvY2VzcyB0aGVtIGFzIGZhc3QgYXMgcG9zc2libGUu CgpPciB3ZSBjb3VsZCBhZGQgdHdlYWtzIGluIHRoZSBiYWNrZW5kIHRvIGFkb3B0IGFuICdhZGFw dGl2ZSBpbnRlcnJ1cHQKY29lbGVzY2luZycgbWVjaGFuaXNtLiBUaGlzIHdheSB3ZSBvbmx5IGtp Y2sgdGhlIGZyb250ZW5kIGlmIGEgY2VydGFpbgp0aHJlc2hvbGQgb2YgSS9PcyBoYXZlIGJlZW4g cHJvY2Vzc2VkIG9yIGlmIHdlIGFyZSBzbG93aW5nIGRvd24gb24gdGhlCnRocmVzaG9sZC4gQWdh aW4sIHRoZSBpZGVhIGlzIHRoYXQgLSBpZiB3ZSBoYXZlIHRoZSByaW5ncyBmdWxsIHdlIHNob3Vs ZApub3Qgc2VuZCAna2lja3MnIGF0IGFsbCBhbmQganVzdCBrZWVwIG9uIHByb2Nlc3NpbmcuCgpO b3RlOiBJICpiZWxpZXZlKiB0aGF0IHRoZSBiYWNrZW5kIGRvZXMgdGhpcyAtIGtlZXBzIG9uIHBy b2Nlc3NpbmcgYW5kCndvbid0IGtpY2sgaWYgdGhlIHJpbmcgaXMgZnVsbC4gQnV0IEkgYW0gbm90 IDEwMCUgc3VyZSBvbiB0aGUgZnJvbnRlbmQgc2lkZS4KCj4gPiAKPiA+IAo+ID4gRikuIFRoZSBj dXJyZW50IGJsb2NrIHByb3RvY29sIGZvciBiaWcgSS9PcyB0aGF0IHRoZSBiYWNrZW5kIGRldmlj ZXMgY2FuCj4gPiBoYW5kbGUgZW5kcyB1cCBkb2luZyBleHRyYSB3b3JrIGJ5IHNwbGl0dGluZyB0 aGUgSS9PIGluIHNtYWxsZXIgY2h1bmtzLAo+ID4gYW5kIHRoZW4gcmVhc3NlbWJsaW5nIHRoZW0u IFdpdGggdGhlIHNvbHV0aW9ucyBvdXRsaW5lZCBpbiBBKSB0aGlzIGNhbgo+ID4gYmUgZml4ZWQu IFRoaXMgaXMgZWFzaWx5IHNlZW4gd2l0aCAxTUIgSS9Pcy4gU2luY2UgZWFjaCByZXF1ZXN0IGNh bgo+ID4gb25seSBoYW5kbGUgNDRrQiB0aGF0IG1lYW5zIHdlIGhhdmUgdG8gc3BsaXQgYSAxTUIg SS9PIGluIDI0IHJlcXVlc3RzCj4gPiAoMjMgKiA0MDk2ICogMTEgPSAxMDgxMzQ0KS4gVGhlbiB0 aGUgYmFja2VuZCBlbmRzIHVwIHNlbmRpbmcgdGhlbSBpbgo+ID4gc2VjdG9yLXNpemVzLSB3aGlj aCB3aXRoIGNvbnRlbXBvcmFyeSBkZXZpY2VzIChzdWNoIGFzIFNTRCkgZW5kcyB1cCB3aXRoCj4g PiBtb3JlIHByb2Nlc3NpbmcuIFRoZSBTU0RzIGFyZSBjb21mb3J0YWJsZSBoYW5kbGluZyAxMjhr QiBvciBoaWdoZXIgSS9Pcwo+ID4gaW4gb25lIGdvLgo+ID4gCj4gPiAKPiA+IEcpLiBESUYvRElY LiBUaGlzIGEgcHJvdG9jb2wgdG8gY2FycnkgZXh0cmEg4oCYY2hlY2tzdW3igJkgaW5mb3JtYXRp b24KPiA+IGZvciBlYWNoIEkvTy4gVGhlIEkvTyBjYW4gYmUgYSBzZWN0b3Igc2l6ZSwgcGFnZS1z aXplIG9yIGFuIEkvTyBzaXplCj4gPiAobW9zdCBwb3B1bGFyIGFyZSAxTUIpLiBUaGUgRElGL0RJ WCBuZWVkcyA4IGJ5dGVzIG9mIGluZm9ybWF0aW9uIGZvcgo+ID4gZWFjaCBJL08uIEl0IHdvdWxk IGJlIHdvcnRoIGNvbnNpZGVyaW5nIHB1dHRpbmcvcmVzZXJ2aW5nIHRoYXQgYW1vdW50IG9mCj4g PiBzcGFjZSBpbiBlYWNoIHJlcXVlc3QvcmVzcG9uc2UuIEFsc28gcHV0dGluZyBpbiBleHRyYSBm bGFncyBmb3IgZnV0dXJlCj4gPiBleHRlbnNpb25zIHdvdWxkIGJlIHdvcnRoIGl0IC0gaG93ZXZl ciB0aGUgYXV0aG9yIGlzIG5vdCBhd2FyZSBvZiBhbnkKPiA+IHJpZ2h0IG5vdy4KPiA+IAo+ID4g Cj4gPiBIKS4gU2VwYXJhdGUgcmVzcG9uc2UvcmVxdWVzdC4gUG90ZW50aWFsbHkgZXZlbiBtdWx0 aS1xdWV1ZSBwZXItVkNQVQo+ID4gcXVldWVzLiBBcyB2Mi42LjM3IGRlbW9uc3RyYXRlZCwgdGhl IGlkZWEgb2YgV1JJVEVfQkFSUklFUiB3YXMKPiA+IGZsYXdlZC4gVGhlcmUgaXMgbm8gc2ltaWxh ciBjb25jZXB0IGluIHRoZSBzdG9yYWdlIHdvcmxkIHdlcmUgdGhlCj4gPiBvcGVyYXRpbmcgc3lz dGVtIGNhbiBwdXQgYSBmb29kIGRvd24gYW5kIHNheTog4oCcZXZlcnl0aGluZyBiZWZvcmUgdGhp cwo+ID4gaGFzIHRvIGJlIG9uIHRoZSBkaXNrLuKAnSBUaGVyZSBhcmUgbGlndGhlciB2ZXJzaW9u cyBvZiB0aGlzIC0gY2FsbGVkCj4gPiDigJhGVUHigJkgYW5kIOKAmEZMVVNI4oCZLiBEZXBlbmRp bmcgb24gdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uCj4gPiBvZiB0aGUgc3RvcmFnZSB0aGV5 IGFyZSBlaXRoZXIgaWdub3JlZCBvciBkbyB0aGUgcmlnaHQgdGhpbmcuIFRoZQo+ID4gZmlsZXN5 c3RlbXMgZGV0ZXJtaW5lIHRoZSB2aWFiaWxpdHkgb2YgdGhlc2UgZmxhZ3MgYW5kIGNoYW5nZSB3 cml0aW5nCj4gPiB0YWN0aWNzIGRlcGVuZGluZyBvbiB0aGlzLiBGcm9tIGEgcHJvdG9jb2wgbGV2 ZWwsIHRoaXMgbWVhbnMgdGhhdCB0aGUKPiA+IFdSSVRFL1JFQUQvU1lOQyByZXF1ZXN0cyBjYW4g YmUgaW50ZXJtaXhlZCAtIHRoZSBzdG9yYWdlIGJ5IGl0c2VsZgo+ID4gZGV0ZXJtaW5lcyB0aGUg b3JkZXIgb2YgdGhlIG9wZXJhdGlvbi4gVGhlIGZpbGVzeXN0ZW0gaXMgdGhlIG9uZSB0aGF0Cj4g PiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIFdSSVRFIHNob3VsZCBiZSB3aXRoIGEgRkxVU0ggdG8g cHJlc2VydmUgc29tZSBmb3JtCj4gPiBvZiBhdG9taWNpdHkuIFRoaXMgbWVhbnMgd2UgZG8gbm90 IGhhdmUgdG8gcHJlc2VydmUgYW4gb3JkZXIgb2Ygb3BlcmF0aW9ucwo+ID4gLSBzbyB3ZSBjYW4g aGF2ZSBtdWx0aXBsZSBxdWV1ZXMgZm9yIHJlcXVlc3QgYW5kIHJlc3BvbnNlcy4gVGhpcyBoYXMK PiA+IHNob3cgaW4gdGhlIG5ldHdvcmsgd29ybGQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBjb25z aWRlcmFibHkuCj4gPiAKPiA+IAo+ID4gSSkuIFdhc3RhZ2Ugb2YgcmVzcG9uc2UvcmVxdWVzdCBv biB0aGUgc2FtZSByaW5nLiBDdXJyZW50bHkgZWFjaCByZXNwb25zZQo+ID4gTVVTVCBvY2N1cHkg dGhlIHNhbWUgYW1vdW50IG9mIHNwYWNlIHRoYXQgdGhlIHJlcXVlc3Qgb2NjdXBpZXMgLSBhcyB0 aGUKPiA+IHJpbmcgY2FuIGhhdmUgYm90aCByZXNwb25zZXMgYW5kIHJlcXVlc3RzLiBTZXBhcmF0 aW5nIHRoZSByZXF1ZXN0IGFuZAo+ID4gcmVzcG9uc2UgcmluZyB3b3VsZCByZW1vdmUgdGhlIHdh c3RhZ2UuCj4gPiAKPiA+IAo+ID4gSikuIDMyLWJpdCB2cyA2NC1iaXQgKG9yIDEwMiBieXRlcyB2 cyAxMTIgYnl0ZXMpLiBUaGUgc2l6ZSBvZiB0aGUgcmluZwo+ID4gZW50cmllcyBpcyBkaWZmZXJl bnQgaWYgdGhlIGd1ZXN0IGlzIGluIDMyLWJpdCBvciA2NC1iaXQgbW9kZS4gQ2xlYW5pbmcKPiA+ IHRoaXMgdXAgdG8gYmUgdGhlIHNhbWUgc2l6ZSB3b3VsZCBzYXZlIGNvbnNpZGVyYWJsZSBhY2Nv dW50aW5nIHRoYXQgdGhlCj4gPiBob3N0IGhhcyB0byBkbyAoZXh0cmEgbWVtY3B5IGZvciBlYWNo IHJlc3BvbnNlL3JlcXVlc3QpLgo+IAo+IFNvIGZvcnRoIEkgdGhpbmsgbW9zdCBvZiB0aGUgcHJv YmxlbXMgY291bGQgYmUgc29sdmVkIGJ5IHVzaW5nIGluZGlyZWN0Cj4gZGVzY3JpcHRvcnMsIGFs aWduaW5nIHJlcXVlc3RzIHRvIGEgY2FjaGUgc2Vuc2libGUgdmFsdWUgKHRvIHByZXZlbnQKPiBz dHJhZGRsaW5nKSBhbmQgdXNpbmcgc2VwYXJhdGUgcmluZ3MgZm9yIHJlcXVlc3RzIGFuZCByZXNw b25zZXMuIFRoaXMgCj4gd291bGQgYmUgbXkgcGxhbiBmb3Igc29sdmluZyB0aGlzIGlzc3VlczoK ClRoYXQgd291bGQgdGFrZSBjYXJlIG9mIHRoZSBidWxrIG9mIHRoZSBiaWcgaXNzdWVzLgoKPiAK PiAxLiBJbXBsZW1lbnQgTFJVIG1lY2hhbmlzbSBpbiBibGtiYWNrIGZvciB0aGUgcGVyc2lzdGVu dCBncmFudHMgbGlzdC4gSWYKPiB3ZSBhcmUgZ29pbmcgdG8gaW5jcmVtZW50IHRoZSBudW1iZXIg b2YgaW4tZmxpZ2h0IElPIHdlIG5lZWQgdG8gYmUgYWJsZSB0bwo+IGtlZXAgdGhlIGxpc3Qgb2Yg cGVyc2lzdGVudGx5IG1hcHBlZCBncmFudHMgdG8gc29tZXRoaW5nIHNlbnNpYmxlLCBhbmQKPiB3 ZSBhcmUgbm8gbG9uZ2VyIGFibGUgdG8gcGVyc2lzdGVudGx5IG1hcCBhbGwgdGhlIGdyYW50cyB0 aGF0IGNvdWxkIGJlIAo+IHVzZWQuIEluIG15IHByb3Bvc2FsIHRoYXQgd291bGQgYmUgNjQgKiA0 IGZvciBlYWNoIGdyYW50IGZyYW1lIHRoYXQgCgpDYW4geW91IGV4cGxhaW4gdGhlIGZvdW5kYXRp b25zIGJlaGluZCB0aGUgJzY0JyBhbmQgJzQnPyBJIHRoaW5rIEkga25vdwp0aGUgNCAoQkxLSUZf Li5TRUdNRU5UUykgYnV0IEkgYW0gbm90IHN1cmUgYWJvdXQgJzY0Jy4KCj4gY29udGFpbnMgaW5k aXJlY3QgZW50cmllcywgcGx1cyA2NCAqIDQgKiAyNTYsIGZvciBhbGwgdGhlIHBvc3NpYmxlCj4g ZW50cmllcyBpbiB0aGUgaW5kaXJlY3QgZnJhbWUgNjQgKiA0ICsgNjQgKiA0ICogMjU2ID0gNjU3 OTIuCgpUaGF0IHdvdWxkIGNvdmVyIH4yNTZNQiBvZiBkYXRhIHBlciBndWVzdC4gV293LiAKPiAK PiAyLiBJbXBsZW1lbnQgaW5kaXJlY3QgZGVzY3JpcHRvcnMuCj4gCj4gMy4gSW1wbGVtZW50IG5l dyByaW5nIHByb3RvY29sLCB1c2luZyB0d28gc2VwYXJhdGUgcmluZ3MgZm9yIHJlcXVlc3RzCj4g YW5kIHJlcGxpZXMuCgpEb24ndCB3YW50IHRvIG5lZ290aWF0ZSBlYWNoIG9mIHRoZXNlIHByb3Bv c2FsIGFzIGEgc2VwZXJhdGUgZmVhdHVyZT8gU286CglzZXBlcmF0ZS1yZXEtYW5kLXJzcAoJc2xp bS12ZXJzaW9uLW9mLXJlcQoJaW5kaXJldC1kZXNjcmlwdG9yCgltdWx0aS1wYWdlLXJpbmcKCWFs aWdtZW50LTY0LW9yLW90aGVyLXZhbHVlCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMu eGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK