From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: New KFD ioctls: taking the skeletons out of the closet Date: Wed, 7 Mar 2018 17:38:46 +0100 Message-ID: <20180307163846.GB8589@phenom.ffwll.local> References: <20e5f2e3-89de-c22b-9c9e-c2b6bee02b1c@amd.com> <9f3c4b76-9d69-f685-439a-951354e6e98b@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <9f3c4b76-9d69-f685-439a-951354e6e98b-5C7GfCeVMHo@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Christian K??nig Cc: Felix Kuehling , Dave Airlie , Maling list - DRI developers , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBNYXIgMDcsIDIwMTggYXQgMDk6Mzg6MDNBTSArMDEwMCwgQ2hyaXN0aWFuIEs/P25p ZyB3cm90ZToKPiBBbSAwNy4wMy4yMDE4IHVtIDAwOjA5IHNjaHJpZWIgRGF2ZSBBaXJsaWU6Cj4g PiBPbiA3IE1hcmNoIDIwMTggYXQgMDg6NDQsIEZlbGl4IEt1ZWhsaW5nIDxmZWxpeC5rdWVobGlu Z0BhbWQuY29tPiB3cm90ZToKPiA+ID4gSGkgYWxsLAo+ID4gPiAKPiA+ID4gQ2hyaXN0aWFuIHJh aXNlZCB0d28gcG90ZW50aWFsIGlzc3VlcyBpbiBhIHJlY2VudCBLRkQgdXBzdHJlYW1pbmcgY29k ZQo+ID4gPiByZXZpZXcgdGhhdCBhcmUgcmVsYXRlZCB0byB0aGUgS0ZEIGlvY3RsIEFQSXM6Cj4g PiA+IAo+ID4gPiAgIDEuIGJlaGF2aW91ciBvZiAtRVJFU1RBUlRTWVMKPiA+ID4gICAyLiB0cmFu c2FjdGlvbmFsIG5hdHVyZSBvZiBLRkQgaW9jdGwgZGVmaW5pdGlvbnMsIG9yIGxhY2sgdGhlcmVv Zgo+ID4gPiAKPiA+ID4gSSBhcHByZWNpYXRlIGNvbnN0cnVjdGl2ZSBmZWVkYmFjaywgYnV0IEkg YWxzbyB3YW50IHRvIGVuY291cmFnZSBhbgo+ID4gPiBvcGVuLW1pbmRlZCByYXRoZXIgdGhhbiBh IGRvZ21hdGljIGFwcHJvYWNoIHRvIEFQSSBkZWZpbml0aW9ucy4gU28gbGV0Cj4gPiA+IG1lIHRh a2UgYWxsIHRoZSBza2VsZXRvbnMgb3V0IG9mIG15IGNsb3NldCBhbmQgZ2V0IHRoZXNlIEFQSXMg cmV2aWV3ZWQKPiA+ID4gaW4gdGhlIGFwcHJvcHJpYXRlIGZvcnVtIGJlZm9yZSB3ZSBjb21taXQg dG8gdGhlbSB1cHN0cmVhbS4gU2VlIHRoZSBlbmQKPiA+ID4gb2YgdGhpcyBlbWFpbCBmb3IgcmVm ZXJlbmNlLgo+ID4gPiAKPiA+ID4gVGhlIGNvbnRyb3ZlcnNpYWwgcGFydCBhdCB0aGlzIHBvaW50 IGlzIGtmZF9pb2N0bF9tYXBfbWVtb3J5X3RvX2dwdS4gSWYKPiA+ID4gYW55IG9mIHRoZSBvdGhl ciBBUElzIHJhaXNlIGNvbmNlcm5zIG9yIHF1ZXN0aW9ucywgcGxlYXNlIGFzay4KPiA+ID4gCj4g PiA+IEJlY2F1c2Ugb2YgdGhlIEhTQSBwcm9ncmFtbWluZyBtb2RlbCwgS0ZEIG1lbW9yeSBtYW5h Z2VtZW50IEFQSXMgYXJlCj4gPiA+IHN5bmNocm9ub3VzLiBUaGVyZSBpcyBubyBwaXBlbGluaW5n LiBDb21tYW5kIHN1Ym1pc3Npb24gdG8gR1BVcyB0aHJvdWdoCj4gPiA+IHVzZXIgbW9kZSBxdWV1 ZXMgZG9lcyBub3QgaW52b2x2ZSBLRkQuIFRoaXMgbWVhbnMgS0ZEIGRvZXNuJ3Qga25vdyB3aGF0 Cj4gPiA+IG1lbW9yeSBpcyB1c2VkIGJ5IHRoZSBHUFVzIGFuZCB3aGVuIGl0J3MgdXNlZC4gVGhh dCBtZWFucywgd2hlbiB0aGUKPiA+ID4gbWFwX21lbW9yeV90b19ncHUgaW9jdGwgcmV0dXJucyB0 byB1c2VyIG1vZGUsIGFsbCBtZW1vcnkgbWFwcGluZwo+ID4gPiBvcGVyYXRpb25zIGFyZSBjb21w bGV0ZSBhbmQgdGhlIG1lbW9yeSBjYW4gYmUgdXNlZCBieSB0aGUgQ1BVcyBvciBHUFVzCj4gPiA+ IGltbWVkaWF0ZWx5Lgo+ID4gSSd2ZSBnb3QgYSBmZXcgb3BpbmlvbnMsIGJ1dCBmaXJzdCB1cCBJ IHN0aWxsIGRpc2xpa2UgdXNlci1tb2RlIHF1ZXVlcwo+ID4gYW5kIGV2ZXJ5dGhpbmcKPiA+IHRo ZXkgZW50YWlsLiBJIHN0aWxsIGZlZWwgdGhleSBhcmUgc29sdmluZyBhIFdpbmRvd3MgcHJvYmxl bSBhbmQgbm90IGEKPiA+IExpbnV4IHByb2JsZW0sCj4gPiBhbmQgaXQgd291bGQgYmUgbmljZSBp ZiB3ZSBoYWQgc29tZSBMaW51eCBudW1iZXJzIG9uIHdoYXQgdGhleSBnYWluIHVzIG92ZXIKPiA+ IGEgZGlzcGF0Y2ggaW9jdGwsIGJlY2F1c2UgdGhleSBzdXJlIGJyaW5nIGEgbG90IG9mIG1lbW9y eSBtYW5hZ2VtZW50IGlzc3Vlcy4KPiAKPiBXZWxsIHVzZXItbW9kZSBxdWV1ZXMgYXJlIGEgcHJv YmxlbSBhcyBsb25nIGFzIHlvdSBkb24ndCBoYXZlIHJlY292ZXJhYmxlCj4gcGFnZSBmYXVsdHMg b24gdGhlIEdQVS4KPiAKPiBBcyBzb29uIGFzIHlvdSBnb3QgcmVjb3ZlcmFibGUgcGFnZSBmYXVs dHMgYW5kIHB1c2ggdGhlIG1lbW9yeSBtYW5hZ2VtZW50Cj4gdG93YXJkcyB0aGluZ3MgbGlrZSBI TU0gSSBkb24ndCBzZWUgYW4gYWR2YW50YWdlIG9mIHVzaW5nIGEgSU9DVEwgYmFzZWQKPiBjb21t YW5kIHN1Ym1pc3Npb24gYW55IG1vcmUuCj4gCj4gU28gSSB3b3VsZCBzYXkgdGhhdCB0aGlzIGlz IGEgcHJvYmxlbSB3aGljaCBpcyBzbG93bHkgZ29pbmcgYXdheSBhcyB0aGUKPiBoYXJkd2FyZSBp bXByb3Zlcy4KClllYWgsIGJ1dCB1cCB0byB0aGUgcG9pbnQgd2hlcmUgdGhlIGh3IGFjdHVhbGx5 IHdvcmtzIChpbnN0ZWFkIG9mIHByb21pc2VzCnRoYXQgbWF5YmUgaXQnbGwgd29yayBuZXh0IGdl bmVyYXRpb24sIHRydXN0IHVzLCBmb3IgbGlrZSBhIGZldwpnZW5lcmF0aW9ucykgaXQncyBtdWNo IGVhc2llciB0byBoYWNrIHVwIGFuIGlvY3RsIHdpdGggd29ya2Fyb3VuZHMgdGhhbgppbnRlcmNl cHRpbmcgYW4gbW1hcCB3cml0ZSBmYXVsdCBhbGwgdGhlIHRpbWUgKHRob3NlIGFyZSBzbG93ZXIg dGhhbgppb2N0bHMpLgoKSSB0aGluayB1c2Vyc3BhY2UgcXVldWVzIGFyZSBmaW5lIG9uY2Ugd2Ug aGF2ZSBrbm93bi13b3JraW5nIGh3LiBCZWZvcmUKdGhhdCBJJ20ga2luZGEgYWdyZWVpbmcgd2l0 aCBEYXZlIGFuZCBub3Qgc2VlaW5nIHRoZSBwb2ludC4gQXQgbGVhc3QgdG8gbXkKa25vd2xlZGdl IHdlIHN0aWxsIGhhdmVuJ3QgYXJyaXZlZCBpbiB0aGUgd29uZGVyZnVsIHByb21pc2VkIGxhbmQg b2YgaHcKcmVjb3ZlcmFibGUgKHdlbGwsIHJlc3RhcnRhYmxlIHJlYWxseSkgcGFnZSBmYXVsdHMg b24gYW55IHZlbmRvcnMgcGxhdGZvcm0KLi4uCgo+ID4gVGhhdCBzYWlkIGFtZGtmZCBpcyBoZXJl Lgo+ID4gCj4gPiBUaGUgZmlyc3QgcXVlc3Rpb24geW91IHNob3VsZCBhc2sgKHdoaWNoIHlvdSBo YXZlbid0IGFza2VkIGhlcmUgYXQgYWxsKSBpcwo+ID4gd2hhdCBzaG91bGQgdXNlcnNwYWNlIGRv IHdpdGggdGhlIGlvY3RsIHJlc3VsdC4KPiA+IAo+ID4gPiBIU0EgYWxzbyB1c2VzIGEgc2hhcmVk IHZpcnR1YWwgbWVtb3J5IG1vZGVsLCBzbyB0eXBpY2FsbHkgbWVtb3J5IGdldHMKPiA+ID4gbWFw cGVkIG9uIG11bHRpcGxlIEdQVXMgYW5kIENQVXMgYXQgdGhlIHNhbWUgdmlydHVhbCBhZGRyZXNz Lgo+ID4gPiAKPiA+ID4gVGhlIHBvaW50IG9mIGNvbnRlbnRpb24gc2VlbXMgdG8gYmUgdGhlIGFi aWxpdHkgdG8gbWFwIG1lbW9yeSB0bwo+ID4gPiBtdWx0aXBsZSBHUFVzIGluIGEgc2luZ2xlIGlv Y3RsIGFuZCB0aGUgYmVoYXZpb3VyIGluIGZhaWx1cmUgY2FzZXMuIEknbGwKPiA+ID4gZGlzY3Vz cyB0d28gbWFpbiBmYWlsdXJlIGNhc2VzOgo+ID4gPiAKPiA+ID4gMTogRmFpbHVyZSBhZnRlciBh bGwgbWFwcGluZ3MgaGF2ZSBiZWVuIGRpc3BhdGNoZWQgdmlhIFNETUEsIGJ1dCBhCj4gPiA+IHNp Z25hbCBpbnRlcnJ1cHRzIHRoZSB3YWl0IGZvciBjb21wbGV0aW9uIGFuZCB3ZSByZXR1cm4gLUVS RVNUQVJUU1lTLgo+ID4gPiBEb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2hhY2tpbmcucnN0 IG9ubHkgc2F5cyAiWy4uLl0geW91IHNob3VsZCBiZQo+ID4gPiBwcmVwYXJlZCB0byBwcm9jZXNz IHRoZSByZXN0YXJ0LCBlLmcuIGlmIHlvdSdyZSBpbiB0aGUgbWlkZGxlIG9mCj4gPiA+IG1hbmlw dWxhdGluZyBzb21lIGRhdGEgc3RydWN0dXJlLiIgSSB0aGluayB3ZSBkbyB0aGF0IGJ5IGVuc3Vy aW5nIHRoYXQKPiA+ID4gbWVtb3J5IHRoYXQncyBhbHJlYWR5IG1hcHBlZCB3b24ndCBiZSBtYXBw ZWQgYWdhaW4uIFNvIHRoZSByZXN0YXJ0IHdpbGwKPiA+ID4gYmVjb21lIGEgbm8tb3AgYW5kIGp1 c3QgZW5kIHVwIHdhaXRpbmcgZm9yIGFsbCB0aGUgcHJldmlvdXMgbWFwcGluZ3MgdG8KPiA+ID4g Y29tcGxldGUuCj4gPiAtRVJFU1RBUlRTWVMgYXQgdGhhdCBsYXRlIHN0YWdlIHBvaW50cyB0byBh IGJhZGx5IHN5bmNocm9ub3VzIEFQSSwKPiA+IEknZCBoYXZlIHNhaWQgeW91IHNob3VsZCBoYXZl IHR3byBpb2N0bHMsIG9uZSB0aGF0IHJldHVybnMgYSBmZW5jZSBhZnRlcgo+ID4gc3RhcnRpbmcg dGhlIHByb2Nlc3NlcywgYW5kIG9uZSB0aGF0IHdhaXRzIGZvciB0aGUgZmVuY2Ugc2VwYXJhdGVs eS4KPiAKPiBUaGF0IGlzIGV4YWN0bHkgd2hhdCBJIHN1Z2dlc3RlZCBhcyB3ZWxsLCBidXQgYWxz byBleGFjdGx5IHdoYXQgRmVsaXggdHJpZXMKPiB0byBhdm9pZCA6KQo+IAo+ID4gVGhlIG92ZXJo ZWFkIG9mIGlvY3RscyBpc24ndCB5b3VyIGVuZW15IHVudGlsIHlvdSd2ZSBtZWFzdXJlZCBpdCBh bmQKPiA+IHByb3ZlbiBpdCdzIGEgcHJvYmxlbS4KPiA+IAo+ID4gPiBDaHJpc3RpYW4gaGFzIGEg c3RyaWN0ZXIgcmVxdWlyZW1lbnQsIGFuZCBJJ2QgbGlrZSB0byBrbm93IHdoZXJlIHRoYXQKPiA+ ID4gY29tZXMgZnJvbTogIkFuIGludGVycnVwdGVkIElPQ1RMIHNob3VsZCBuZXZlciBoYXZlIGEg dmlzaWJsZSBlZmZlY3QuIgo+ID4gQ2hyaXN0aWFuIG1pZ2h0IGJlIHRha2luZyB0aGluZ3MgYSBi aXQgZnVydGhlciBidXQgc3luY2hyb25vdXMgZ3B1IGFjY2Vzcwo+ID4gQVBJcyBhcmUgYmFkLCBi dXQgSSBkb24ndCB0aGluayB1bmRvaW5nIGEgYnVuY2ggb2Ygd29yayBpcyBhIGdvb2QgcGxhbiBl aXRoZXIKPiA+IGp1c3QgYmVjYXVzZSB5b3UgZ290IEVSRVNUQVJUU1lTLiBJZiB5b3UgZ2V0IEVS RVNUQVJUU1lTIGNhbiB5b3UKPiA+IGhhbmRsZSBpdCwgaWYgSSd2ZSBmaXJlZCBvZmYgNSBTRE1B cyBhbmQgd2FpdCBmb3IgdGhlbSB3aWxsIEkgZmlyZSBvZmYgNSBtb3JlPwo+ID4gd2lsbCBJIHdh aXQgZm9yIHRoZSBvcmlnaW5hbCBTRE1BcyBpZiBJIHJlZW50ZXI/Cj4gCj4gV2VsbCBpdCdzIG5v dCBvbmx5IHRoZSB3YWl0aW5nIGZvciB0aGUgU0RNQXMuIElmIEkgdW5kZXJzdG9vZCBpdCBjb3Jy ZWN0bHkKPiB0aGUgSU9DVEwgcHJvcG9zZWQgYnkgRmVsaXggYWxsb3dzIGFkZGluZyBtdWx0aXBs ZSBtYXBwaW5ncyBvZiBidWZmZXIKPiBvYmplY3RzIG9uIG11bHRpcGxlIGRldmljZXMgd2l0aCBq dXN0IG9uZSBJT0NUTC4KPiAKPiBOb3cgdGhlIHByb2JsZW0gaXMgd2l0aG91dCBhIGxvdCBvZiBy ZWRlc2lnbiBvZiB0aGUgZHJpdmVyIHRoaXMgY2FuIGZhaWwgYXQKPiBhbnkgcGxhY2UgaW4gYmV0 d2VlbiB0aG9zZSBvcGVyYXRpb25zLiBFLmcuIHdlIGNvdWxkIHJ1biBvdXQgb2YgbWVtb3J5IG9y Cj4gaGl0IGEgcGVybWlzc2lvbiByZXN0cmljdGlvbiBvciBhbiBpbnZhbGlkIGhhbmRsZSBldGMu LiBldGMuLi4KPiAKPiBXaGF0IHdvdWxkIGhhcHBlbiBpcyB0aGF0IHdlIGVuZCB1cCB3aXRoIGEg aGFsdmUgY29tcGxldGUgSU9DVEwuCj4gCj4gQSBwb3NzaWJsZSBzb2x1dGlvbiBtaWdodCBiZSB0 aGF0IHdlIGNvdWxkIG1heWJlIGFkZCBzb21lIGtpbmQgb2YgZmVlZGJhY2sKPiBub3Rpbmcgd2hp Y2ggb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBjb21wbGV0ZSBhbmQgdGhlbiBvbmx5IHJldHJ5aW5n IHRoZSBvbmUKPiB3aGljaCBmYWlsZWQuCgpBdG9taWMgaW9jdGwgYmVoYXZpb3VyIGlzIGhhcmQu IExpa2UgcmVlZWVlZWFhYWFhYWFhYWFhbGxsbGxsbGx5IGhhcmQuCgpMb29rIGF0IGF0b21pYyBr bXMgaWYgeW91IGRvbid0IGJlbGlldmUsIG9yIHRoZSB2NGwgZXF1aXZhbGVudCwgYW5kIHRoYXQK ZG9lc24ndCBldmVuIHRyeSB0byBkbyBjcm9zcyBkZXZpY2UgYXRvbWljLiBBbHNvLCBpdCBleHBs aWNpdGx5IGlzbid0CmF0b21pYyB3cnQgbWVtb3J5IG1hbmFnZW1lbnQgc3R1ZmYgKGxpa2UgcGlu bmluZyBzY2Fub3V0IGJ1ZmZlcnMgaW50bwp2cmFtKSwgYmVjYXVzZSB0aGF0IHdhcyB0b28gaGFy ZCAtIHdlIHNpbXBseSB0cnkgdG8gcGluIGFuZCB0aGVuIHJvbGwgYmFjawppZiBpdCBoYXBwZW5z IHRvIG5vdCB3b3JrIG91dCBhbmQgYXBvbG9naXplIHRvIHVzZXJzcGFjZSBmb3IgdGhlIG1lc3Mu CgpFeGNlcHQgd2hlbiB5b3VyIGNhcmVlciBwbGFuIGlzIHRvIHNwZW5kIHRoZSBuZXh0IGZldyBk ZWNhZGVzIG9uCnByb3RvdHlwaW5nIHRoaXMgYXMgYW4gUiZEIHByb2plY3QsIEkgcmVjb21tZW5k IHRvIG5vdCB0cnkgOi0pCgo+ID4gPiAyOiBGYWlsdXJlIHRvIG1hcCBvbiBzb21lIGJ1dCBub3Qg YWxsIEdQVXMuIFRoaXMgY29tZXMgZG93biB0byB0aGUKPiA+ID4gcXVlc3Rpb24sIGRvIGFsbCBp b2N0bCBBUElzIG9yIHN5c3RlbSBjYWxscyBpbiBnZW5lcmFsIG5lZWQgdG8gYmUKPiA+ID4gdHJh bnNhY3Rpb25hbD8gQXMgYSBjb3VudGVyIGV4YW1wbGUgSSdkIGdpdmUgaW5jb21wbGV0ZSByZWFk IG9yIHdyaXRlCj4gPiA+IHN5c3RlbSBjYWxscyB0aGF0IHJldHVybiBob3cgbXVjaCB3YXMgYWN0 dWFsbHkgcmVhZCBvciB3cml0dGVuLiBPdXIKPiA+ID4gY3VycmVudCBpbXBsZW1lbnRhdGlvbiBv ZiBtYXBfbWVtb3J5X3RvX2dwdSBkb2Vzbid0IGRvIHRoaXMsIGJ1dCBpdAo+ID4gPiBjb3VsZCBi ZSBtb2RpZmllZCB0byByZXR1cm4gdG8gdXNlciBtb2RlIGhvdyBtYW55IG9mIHRoZSBtYXBwaW5n cywgb3IKPiA+ID4gd2hpY2ggbWFwcGluZ3Mgc3BlY2lmaWNhbGx5IGZhaWxlZCBvciBzdWNjZWVk ZWQuCj4gPiBXaGF0IHNob3VsZCB1c2Vyc3BhY2UgZG8/IGlmIGl0IG9ubHkgZ2V0IG1hcHBpbmdz IG9uIDMgb2YgdGhlIGdwdXMgaW5zdGVhZAo+ID4gb2Ygc2F5IDQ/IElzIHRoZXJlIGEgc2FuZSBy ZXNvbHV0aW9uIG90aGVyIHRoYW4gY2FsbGluZyB0aGUgaW9jdGwgYWdhaW4gd2l0aAo+ID4gdGhl IHNpbmdsZSBHUFU/IFdvdWxkIGl0IGRyb3AgdGhlIEdQVSBmcm9tIHRoZSB3b3JraW5nIHNldCBm cm9tIHRoYXQgcG9pbnQgb24/Cj4gPiAKPiA+IE5lZWQgbW9yZSBpbmZvIHRvIGRvIHdoYXQgY2Fu IGNvbWUgb3V0IG9mIHRoZSBBUEkgZG9pbmcgaW5jb21wbGV0ZQo+ID4gb3BlcmF0aW9ucy4KPiAK PiBGZWxpeCBhcmd1bWVudCB0aGF0IHdoZW4gYSBtYXBwaW5nIG9wZXJhdGlvbnMgZmFpbHMgdGhl IFZNIHJhbmdlcyBpbgo+IHF1ZXN0aW9uIHdvdWxkIGhhdmUgYmVlbiB1bmRlZmluZWQgYmVmb3Jl IGFuZCBhcmUgdW5kZWZpbmVkIGFmdGVyIHRoYXQKPiBvcGVyYXRpb24gZmFpbGVkIGFzIHdlbGwu Cj4gCj4gU28gd2UgY291bGQganVzdCBuZWVkIHRvIHJldHJ5IHRoZSBvcGVyYXRpb24gdW50aWwg YWxsIG9mIGl0IHN1Y2NlZWRzLCBidXQKPiB0aGF0IGZlZWxzIGtpbmQgb2Ygc3RyYW5nZS4KCisx IG9uIG1ha2UgeW91ciBncHUgYXBpcyBhc3luYywgd2UgaGF2ZSBkcm1fc3luY29iai9zeW5jX2Zp bGUvZG1hX2ZlbmNlIGFzCmEgc3RhbmRhcmQgd2F5IGZvciB0aGlzIG5vdy4KCj4gPiA+IFRoZSBh bHRlcm5hdGl2ZSB3b3VsZCBiZSB0byBicmVhayBtdWx0aS1HUFUgbWFwcGluZ3MsIGFuZCB0aGUg ZmluYWwgd2FpdAo+ID4gPiBmb3IgY29tcGxldGlvbiwgaW50byBtdWx0aXBsZSBpb2N0bCBjYWxs cy4gVGhhdCB3b3VsZCByZXN1bHQgaW4KPiA+ID4gYWRkaXRpb25hbCBzeXN0ZW0gY2FsbCBvdmVy aGVhZC4gSSdkIGFyZ3VlIHRoYXQgdGhlIGVuZCByZXN1bHQgaXMgdGhlCj4gPiA+IHNhbWUgZm9y IHVzZXIgbW9kZSwgc28gSSBkb24ndCBzZWUgd2h5IEknZCB1c2UgbXVsdGlwbGUgaW9jdGxzIG92 ZXIgYQo+ID4gPiBzaW5nbGUgb25lLgo+ID4gQWdhaW4gc3RvcCB3b3JyeWluZyBhYm91dCBpb2N0 bCBvdmVyaGVhZCwgdGhpcyBpc24ndCBXaW5kb3dzLiBJZiB5b3UKPiA+IGNhbiBzaG93IHRoZSBv dmVyaGVhZCBhcyBiZWluZyBhIHByb2JsZW0gdGhlbiBhZGRyZXNzIGl0LCBidXQgSQo+ID4gdGhp bmsgaXQncyBwcmVtYXR1cmUgd29ycnlpbmcgYWJvdXQgaXQgYXQgdGhpcyBzdGFnZS4KPiAKPiBX ZWxsIHlvdSBnbyBmcm9tIG9uZSBJT0NUTCBkb2luZyBldmVyeXRoaW5nIHRvd2FyZHMgb25lIElP Q1RMIHBlciBkZXZpY2UgcGVyCj4gbWFwcGluZyB3aGljaCBjYW4gYmUgYSBodWdlIGRpZmZlcmVu Y2UuCj4gCj4gT25lIHRoZSBvdGhlciBoYW5kIHdlIGludGVybmFsbHkgaGFkIGV4YWN0bHkgdGhl IHNhbWUgZGlzY3Vzc2lvbiB3aGVuIHdlCj4gaW1wbGVtZW50ZWQgc3VwcG9ydCBmb3IgcGFydGlh bGx5IHJlc2lkZW50IHRleHR1cmVzLiBUaGUgcmVzdWx0IHdhcyB0aGF0IHdlCj4gZmlyc3QgaW1w bGVtZW50IGl0IHdpdGggaW5kaXZpZHVhbCBJT0NUTHMgYW5kIGltcGxlbWVudCB0aGUgbWFzcyBt YXBwaW5nCj4gSU9DVEwgaWYgd2UgZXZlciBmaW5kIGFuIHVzZSBjYXNlIHdoZXJlIHdlIG5lZWQg aXQuCj4gCj4gU28gZmFyIHdlIGhhdmVuJ3QgZm91bmQgYSB1c2UgY2FzZSBmb3IgdGhpcyBtYXNz IG1hcHBpbmcgSU9DVEwuCgpBbGlnbnMgd2l0aCBteSBleHBlY3RhdGlvbnMvZXhwZXJpZW5jZS9w bGFubmluZyBmb3IgaTkxNS5rbyBzdHVmZiB2ZXJ5Cm11Y2guCi1EYW5pZWwKLS0gCkRhbmllbCBW ZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZm d2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFt ZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=