From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 1/6] dma-buf: add dynamic DMA-buf handling v13 Date: Wed, 31 Jul 2019 13:19:37 +0200 Message-ID: <094f12e5-2a75-c468-9156-4c37a7843c56@gmail.com> References: <20190626122310.1498-1-christian.koenig@amd.com> <20190731091231.GI7444@phenom.ffwll.local> <25a20ce9-2013-07b6-1e4d-f40698a653ae@gmail.com> Reply-To: christian.koenig-5C7GfCeVMHo@public.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Daniel Vetter , =?UTF-8?Q?Christian_K=c3=b6nig?= Cc: intel-gfx , dri-devel , amd-gfx list QW0gMzEuMDcuMTkgdW0gMTI6Mzkgc2NocmllYiBEYW5pZWwgVmV0dGVyOgo+IE9uIFdlZCwgSnVs IDMxLCAyMDE5IGF0IDExOjQ0IEFNIENocmlzdGlhbiBLw7ZuaWcKPiA8Y2tvZW5pZy5sZWljaHR6 dW1lcmtlbkBnbWFpbC5jb20+IHdyb3RlOgo+PiBBbSAzMS4wNy4xOSB1bSAxMToxMiBzY2hyaWVi IERhbmllbCBWZXR0ZXI6Cj4+PiBbU05JUF0KPj4+IEkgdGhpbmsgSSBicm91Z2h0IHRoaXMgdXAg YmVmb3JlLCBidXQgbmV3IHRvcC1wb3N0IGZvciBhIGNsZWFuIHN0YXJ0Lgo+Pj4KPj4+IFVzZS1j YXNlIEkgaGF2ZSBpbiBtaW5kIGlzIHNvbWV0aGluZyBsaWtlIGFtZGtmZCdzIG1vZGVsLCB3aGVy ZSB5b3UgaGF2ZSBhCj4+PiBsaXN0IG9mIGJ1ZmZlcnMgKHBlciBjb250ZXh0IG9yIHdoYXRldmVy KSB0aGF0IHlvdSBhbHdheXMgbmVlZCB0byBoYXZlCj4+PiBwcmVzZW50LiBJZGVhIGlzIHRvIGFs c28gdXNlIHRoaXMgZm9yIHRyYWRpdGlvbmFsIENTIGZvciB2ay9nbCwgdG8gY3V0Cj4+PiBkb3du IG9uIHRoZSBidWZmZXIgbWFuYWdlbWVudCBvdmVyaGVhZCwgYnV0IHdlJ2Qgc3RpbGwgYWxsb3cg YWRkaXRpb25hbAo+Pj4gYnVmZmVycyB0byBiZSBsaXN0ZWQgcGVyLUNTIG9uIHRvcCBvZiB0aGF0 IGRlZmF1bHQgd29ya2luZyBzZXQuCj4+Pgo+Pj4gVGhpcyBvZiBjb3Vyc2UgbWVhbnMgbm8gaW1w bGljaXQgc3luYyBhbnltb3JlIG9uIHRoZXNlIGRlZmF1bHQgYnVmZmVycwo+Pj4gKHRoZSBwb2lu dCBpcyB0byBhdm9pZCB0b3VjaGluZyBldmVyeSBidWZmZXIgb24gZXZlcnkgQ1MsIHVwZGF0aW5n IGZlbmNlcwo+Pj4gd291bGQgZGVmZWF0IHRoYXQpLiBUaGF0J3Mgd2h5IHRoZSBDUyBjYW4gc3Rp bGwgbGlzdCBhZGRpdGlvbmFsIGJ1ZmZlcnMsCj4+PiB0aGUgb25seSByZWFzb24gZm9yIHRoYXQg aXMgdG8gYWRkIGltcGxpY2l0IHN5bmMgZmVuY2VzLiBUaG9zZSBidWZmZXJzCj4+PiB3b3VsZCBi ZSBtb3N0IGxpa2VseSBpbiB0aGUgZGVmYXVsdCB3b3JraW5nIHNldCBhbHJlYWR5Lgo+Pj4KPj4+ IENvbnNlcXVlbmNlIGlzIHRoYXQgSSB3YW50IHRoZSBhbWRrZmQgbW9kZWwgb2YgImV2aWN0IHdo ZW4gbmVlZGVkLCBidXQKPj4+IGtlZXAgcmVzaWRlbnQgYnkgZGVmYXVsdCIsIGJ1dCBhbHNvIHdv cmtpbmcgaW1wbGljaXQgZmVuY2VzLiBBbmQgaXQgbXVzdAo+Pj4gYmUgZG9hYmxlIHdpdGhvdXQg dG91Y2hpbmcgZXZlcnkgYm8gb24gZXZlcnkgQ1MuIExpc3RpbmcgcG9zc2libGUKPj4+IGltcGxl bWVudGF0aW9uIG9wdGlvbnM6Cj4+Pgo+Pj4gLSB0aGUgYW1ka2ZkIHRyaWNrIGRvZXNuJ3Qgd29y ayBiZWNhdXNlIGl0IHdvdWxkIGJyZWFrIGltcGxpY2l0IGZlbmNpbmcgLQo+Pj4gICAgIGFueSBp bXBsaWNpdCBzeW5jIHdvdWxkIGFsd2F5cyByZXN1bHQgaW4gdGhlIGNvbnRleHQgZ2V0dGluZwo+ Pj4gICAgIHByZWVtcHRlZC9ldmljdGVkLCB3aGljaCBpc24ndCBncmVhdC4KPj4gSSdtIGFjdHVh bGx5IHdvcmtpbmcgb24gcmUtd29ya2luZyBpbXBsaWNpdCBmZW5jaW5nIHRvd2FyZHMgYmV0dGVy Cj4+IHN1cHBvcnRpbmcgdGhpcy4KPj4KPj4gQmFzaWMgaWRlYSBpcyB0aGF0IHlvdSBzcGxpdCB1 cCB0aGUgZmVuY2VzIGluIGEgcmVzZXJ2YXRpb24gb2JqZWN0IGludG8KPj4gdGhyZWUgY2F0ZWdv cmllczoKPj4gMS4gSW1wbGljaXQgc3luYyBvbiB3cml0ZS4KPj4gMi4gSW1wbGljaXQgc3luYyBv biByZWFkLgo+PiAzLiBObyBpbXBsaWNpdCBzeW5jIGF0IGFsbC4KPiBOb3QgcmVhbGx5IHN1cmUg d2hhdCB5b3Ugd2FudCB0byBkbyBoZXJlIC4uLiBpbXBsaWNpdCBzeW5jIGlzIG9wdC1pbgo+IChv ciBvcHQtb3V0IGZsYWcgaWYgeW91IG5lZWQgdG8ga2VlcCBDUyBiYWNrd2FyZHMgY29tcGF0KSBw ZXIgQk8vQ1MuCj4gQXQgbGVhc3Qgd2hlbiB3ZSBkaXNjdXNzZWQgdGhpcyBmb3JldmVyIGF0IHNv bWUgWERDcyBjb25zZW5zdXMgd2FzCj4gdGhhdCBzdG9yaW5nIHRoZSBpbXBsaWNpdCBzeW5jIG1v ZGUgb24gdGhlIEJPIGlzIG5vdCBnb2luZyB0byB3b3JrLgoKV2VsbCB0aGF0J3MgZXhhY3RseSB3 aGF0IHdlIGFyZSBkb2luZyBmb3IgYW1kZ3B1IGFuZCB0aGlzIGlzIHdvcmtpbmcgCnBlcmZlY3Rs eS4gU2VlIGZsYWcgQU1ER1BVX0dFTV9DUkVBVEVfRVhQTElDSVRfU1lOQy4KCj4+IFRoaXMgc2hv dWxkIG5vdCBvbmx5IGhlbHAgdGhlIEtGRCwgYnV0IGFsc28gd2l0aCBhbWRncHUgY29tbWFuZAo+ PiBzdWJtaXNzaW9uIGFuZCB0aGluZ3MgbGlrZSBwYWdlIHRhYmxlcyB1cGRhdGVzLgo+Pgo+PiBF LmcuIHdlIG5lZWQgdG8gZmVuY2VzIGZvciBwYWdlIHRhYmxlcyB1cGRhdGVzIGFyb3VuZCBpbiBy ZXNlcnZhdGlvbgo+PiBvYmplY3RzIGFzIHdlbGwsIGJ1dCB5b3UgcmVhbGx5IHJlYWxseSByZWFs bHkgZG9uJ3Qgd2FudCBhbnkgaW1wbGljaXQKPj4gc3luY2hyb25pemF0aW9uIHdpdGggdGhlbSA6 KQo+IFdoeSBkbyB5b3UgZXZlbiB0cnkgdG8gZG8gaW1wbGljaXQgc3luYyB3aXRoIHlvdXIgcGFn ZXRhYmxlcz8gSG93IGNhbgo+IHlvdXIgcGFnZXRhYmxlcyBldmVuIGdldCBhbnl3aGVyZSBuZWFy IHdoZXJlIGltcGxpY2l0IHN5bmMgbWF0dGVycz8KCldoZW4geW91IHVubWFwIGEgQk8gZnJvbSBh IHBhZ2UgdGFibGUgdGhlIEJPIG5lZWRzIHRvIHN0YXkgaW4gdGhlIHNhbWUgCnBsYWNlIHVudGls IHRoZSB1bm1hcCBvcGVyYXRpb24gaXMgY29tcGxldGVkLgoKT3RoZXJ3aXNlIHlvdSBvcGVuIHVw IGEgc2hvcnQgd2luZG93IHdoZXJlIGEgcHJvY2VzcyBjb3VsZCBhY2Nlc3MgbWVtb3J5IAp3aGlj aCBkb2Vzbid0IGJlbG9uZ3MgdG8gdGhlIHByb2Nlc3MuCgpUaGlzIHVubWFwIG9wZXJhdGlvbiBp cyB1c3VhbGx5IGFuIFNETUEgb3BlcmF0aW9uIGFuZCBub2JvZHkgZXhjZXB0IGZvciAKdGhlIG1l bW9yeSBtYW5hZ2VtZW50IG5lZWRzIHRvIHRha2UgdGhpcyBpbnRvIGFjY291bnQuCgo+Pj4gLSB3 ZSBzaGFyZSB0aGUgcmVzdl9vYmogYmV0d2VlbiBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGRlZmF1 bHQgd29ya2luZyBzZXQKPj4+ICAgICBvZiBhIGNvbnRleHQsIHdpdGggdW5zaGFyaW5nL3Jlc2hh cmluZyB0aGUgcmVzdl9vYmogaWYgdGhleSBlbnRlci9sZWF2ZQo+Pj4gICAgIHRoZSBkZWZhdWx0 IHdvcmtpbmcgc2V0LiBUaGF0IHdheSB0aGVyZSdzIG9ubHkgb25lIHJlc3Zfb2JqIHRvIHVwZGF0 ZSBvbgo+Pj4gICAgIGVhY2ggQ1MsIGFuZCB3ZSBjYW4gYXR0YWNoIGEgbmV3IHNoYXJlZCBmZW5j ZSBmb3IgZXZlcnkgQ1MuIFRyb3VibGUgaXMKPj4+ICAgICB0aGF0IHRoaXMgbWVhbnMgYSBnaXZl biBidWZmZXIgY2FuIG9ubHkgYmUgcGFydCBvZiBvbmUgZGVmYXVsdCB3b3JraW5nCj4+PiAgICAg c2V0LCBzbyBhbGwgc2hhcmVkIGJ1ZmZlcnMgd291bGQgbmVlZCB0byBiZSBsaXN0ZWQgYWdhaW4g c2VwYXJhdGVseS4gTm90Cj4+PiAgICAgc28gZ3JlYXQgaWYgdXNlcnNwYWNlIGhhcyB0byBkZWFs IHdpdGggdGhhdCBmYWlybHkgYXJiaXRyYXJ5IGxpbWl0YXRpb24uCj4+IFllYWgsIHRoYXQgaXMg ZXhhY3RseSB3aGF0IHdlIGRvIHdpdGggdGhlIHBlciBWTSBCT3MgaW4gYW1kZ3B1Lgo+Pgo+PiBU aGUgbGltaXRhdGlvbiB0aGF0IHlvdSBoYXZlIG9ubHkgb25lIHdvcmtpbmcgc2V0IGFjdHVhbGx5 IHR1cm5lZCBvdXQgdG8KPj4gYmUgbm90IGEgbGltaXRhdGlvbiBhdCBhbGwsIGJ1dCByYXRoZXIg c2VlbiBhcyBzb21ldGhpbmcgd2VsY29tZWQgYnkgb3VyCj4+IFZ1bGthbiBndXlzLgo+IFdlIGhh dmUgcGVyLWN0eCB2bXMgaW4gaTkxNSwgYnV0IEkgZ3Vlc3MgZXZlbiBmb3IgdGhvc2Ugc2hhcmlu ZyB3aWxsIGJlIGxpbWl0ZWQuCgpJbiBhbWRncHUgd2UgaGFkIHRoaXMgZnVua3kgc3R1ZmYgd2l0 aCBibyBsaXN0cyB3aGljaCBzaG91bGQgcmVwcmVzZW50IAp0aGUgcmVzb3VyY2VzIHVzZWQgZm9y IGEgY29tbWFuZCBzdWJtaXNzaW9uLgoKQnV0IGFmdGVyIGFjdHVhbGx5IHRhbGtpbmcgdG8gdGhl IFZ1bGthbiBhbmQgb3RoZXIgdXNlcnNwYWNlIGd1eXMgd2UgCmNvbXBsZXRlbHkgZGVwcmVjYXRl ZCB0aGF0LgoKV2Ugc2V0dGxlZCBvbiBoYXZpbmcgcGVyIHByb2Nlc3MgcmVzb3VyY2VzIHdoaWNo IGFyZSBhbHdheXMgdmFsaWQgYW5kIGEgCmR5bmFtaWMgbGlzdCBvZiByZXNvdXJjZXMgeW91IHNl bmQgdG8gdGhlIGtlcm5lbCB3aXRoIGVhY2ggY29tbWFuZCAKc3VibWlzc2lvbi4KCj4+IEkgYWxz byBkb24ndCByZWFsbHkgc2VlIGEgd2F5IHRvIGhhdmUgYW4gaW1wbGVtZW50YXRpb24gd2l0aCBn b29kCj4+IHBlcmZvcm1hbmNlIHdoZXJlIEJPcyBjYW4gYmUgaW4gbXVsdGlwbGUgd29ya2luZyBz ZXRzIGF0IHRoZSBzYW1lIHRpbWUuCj4+Cj4+PiAtIHdlIGFsbG93IHRoZSAtPm1vdmVfbm90aWZ5 IGNhbGxiYWNrIHRvIGFkZCBuZXcgZmVuY2VzLCB3aGljaCB0aGUKPj4+ICAgICBleHBvcnRlciBu ZWVkcyB0byB3YWl0IG9uIGJlZm9yZSBpdCBzY2hlZHVsZXMgdGhlIHBpcGVsaW5lZCBtb3ZlLiBU aGlzCj4+PiAgICAgYWxzbyBhdm9pZHMgdGhlIHBlci1CTyB1cGRhdGUgb24gZXZlcnkgQ1MsIGFu ZCBpdCB3b3VsZCBhbGxvdyBidWZmZXJzIHRvCj4+PiAgICAgYmUgc2hhcmVkIGFuZCB0byBiZSBp biBtdWx0aXBsZSBkZWZhdWx0IHdvcmtpbmcgc2V0cy4gVGhlIGRvd25zaWRlIGlzCj4+PiAgICAg dGhhdCAtPm1vdmVfbm90aWZ5IG5lZWRzIHRvIGJlIGFibGUgdG8gY29wZSB3aXRoIGFkZGVkIGZl bmNlcywgd2hpY2gKPj4+ICAgICBtZWFucyB3ZSBtaWdodCBuZWVkIHRvIGdyb3cgdGhlIHNoYXJl ZCBmZW5jZXMgYXJyYXksIHdoaWNoIG1pZ2h0IGZhaWwKPj4+ICAgICB3aXRoIEVOT01FTS4gTm90 IGdyZWF0LiBXZSBjb3VsZCBmaXggdGhpcyB3aXRoIHNvbWUga2luZCBvZiBwZXJtYW5lbnQKPj4+ ICAgICBzaGFyZWQgZmVuY2Ugc2xvdCByZXNlcnZhdGlvbnMgKGkuZS4gYSByZXNlcnZlZCBzbG90 IHdoaWNoIG91dGxpdmVzCj4+PiAgICAgaG9sZGluZyB0aGUgcmVzZXJ2YXRpb24gbG9jayksIGJ1 dCB0aGF0IG1pZ2h0IHdhc3RlIHF1aXRlIGEgYml0IG9mCj4+PiAgICAgbWVtb3J5LiBQcm9iYWJs eSBub3QgcmVhbCBwcm9ibGVtIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBJIHRoaW5r Cj4+PiAgICAgdGhlIGZlbmNlIGl0c2VsZiBjYW4gYmUgcHJlYWxsb2NhdGVkIHBlciBjb250ZXh0 LCBzbyB0aGF0IGlzbid0IHRoZQo+Pj4gICAgIHByb2JsZW0uCj4+IFdlbGwgdGhlIEVOT01FTSBw cm9ibGVtIGlzIHRoZSBsZWFzdCBvZiB0aGUgcHJvYmxlbXMgd2l0aCB0aGlzIGFwcHJvYWNoLgo+ PiBZb3UgY2FuIHN0aWxsIGJsb2NrIGZvciB0aGUgZmVuY2Ugd2hpY2ggeW91IHdhbnRlZCB0byBh ZGQuCj4+Cj4+IFRoZSByZWFsIHByb2JsZW0gaXMgdGhhdCB5b3UgY2FuJ3QgdGVsbCBpZiBhIEJP IGlzIGJ1c3kgb3Igbm90IGJ5IGp1c3QKPj4gbG9va2luZyBhdCBpdHMgY3VycmVudCBmZW5jZXMu Cj4+Cj4+IEluIG90aGVyIHdvcmRzIHdoZW4geW91IHN0b3AgYWRkaW5nIGZlbmNlcyB5b3UgYWxz byB3YW50IHRvIHN0b3AgbW92aW5nCj4+IHRoZW0gaW5kaXZpZHVhbGx5IG9uIHRoZSBMUlUuCj4g V2VsbCB5ZWFoLCBvdGhlcndpc2UgeW91J3JlIGJhY2sgYSBwZXIgQk8gb3ZlcmhlYWQgb24gQ1Mu IFRoYXQncyBraW5kYQo+IG9idmlvdXMuIEJ1dCBhbHNvIG5vdCBzdXJlIHdoeSB0aGlzIG1hdHRl cnMsIHNpbmNlIGF0bSB3ZSBkb24ndCBoYXZlCj4gYW55IHByb3Bvc2VkIG1lYW5zIHRvIHBhc3Mg TFJVIHVwZGF0ZXMgdGhyb3VnaCBkbWEtYnVmLiBTbyBleHBvcnRlcgo+IChldmVuIHdpdGggZHlu YW1pYyBkbWEtYnVmKSBoYXMgdG8gcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSBhbHJlYWR5IHRoYXQK PiB0aGUgZXhwb3J0ZWQgQk8gaXMgbW9yZSBidXN5IHRoYW4gd2hhdCB0aGUgTFJVIHBvc2l0aW9u IHN1Z2dlc3RzLCBhbmQKPiBldmljdCB0aGVtIGxhdGVyIG9uLiBJZiB3ZSBhbHNvIG5lZWQgdG8g ZnVubmVsIExSVSB1cGRhdGVzIG92ZXIKPiBkbWEtYnVmLCB0aGVuIHRoYXQncyBhbm90aGVyIGJl YXN0IGVudGlyZWx5IChhbmQgcHJvYmFibHkgbm90IHdoYXQgd2UKPiB3YW50IHRvIGRvIGF0IGFs bCkuCgpZZWFoLCB0aGF0J3MgYSByZWFsbHkgZ29vZCBwb2ludCBmb3IgRE1BLWJ1Zi4KCkJ1dCBJ J20gdGhpbmtpbmcgYSBiaXQgd2lkZXIgaGVyZS4gRXNzZW50aWFsbHkgd2UgbmVlZCBzb21lIGlk ZWFzIHdoaWNoIApub3Qgb25seSB3b3JrIGZvciBETUEtYnVmLCBidXQgYWxzbyBpbnNpZGUgdGhl IHNhbWUgZHJpdmVyLgoKPiBBbHNvIGlmIHlvdSBkb24ndCB3YW50IHRvIHN0YWxsLCB0aGVuIGp1 c3QgcmVqZWN0IGFmdGVyIC0+bW92ZV9ub3RpZnkKPiB3aGVyZXRoZXJlIHRoZSBibyBpcyBzdGls bCBpZGxlLCBhbmQgZ2l2ZSB1cCBpZiBzby4gT3Igd2UgY2FuIGFkZCBhCj4gY291bnRlciB0byBp bmRpY2F0ZSBhIGJvIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgYnVzeS4KPgo+PiBXaGVuIHRoZSBt ZW1vcnkgbWFuYWdlbWVudCBldmljdHMgb25lIEJPIHlvdSBlc3NlbnRpYWxseSBraWNrIG91dCBh Cj4+IHdob2xlIHByb2Nlc3Mvd29ya2luZyBzZXQuCj4+Cj4+IFNvIHdoZW4geW91IHdhbnQgdG8g a2ljayBvdXQgdGhlIG5leHQgQk8geW91IGFjdHVhbGx5IHdhbnQgdG8gZG8gdGhpcwo+PiBmb3Ig Qk9zIHdoaWNoIG5vdyBiZWNhbWUgYXZhaWxhYmxlIGFueXdheS4KPj4KPj4gVGhhdCBhcHByb2Fj aCB3b24ndCB3b3JrIHdpdGggdGhlIG1vdmVfbm90aWZ5IGNhbGxiYWNrLgo+IFNvIGVzc2VudGlh bGx5IHdlIGRvbid0IGp1c3Qgd2FudCBtb3ZlX25vdGlmeSwgYnV0IGFsc28gZnVsbCBMUlUgaW5m b3JtYXRpb24/CgpBdCBsZWFzdCBmb3IgRE1BLWJ1ZiBJIHdhcyB0cnlpbmcgdG8gYXZvaWQgdGhh dC4gQnV0IGluIHRoZSBsb25nIHRlcm0gaXQgCm1pZ2h0IGJlIG5lY2Vzc2FyeSwgeWVzLgoKPj4+ IC0gc2FtZSBhcyBhYm92ZSwgYnV0IHRoZSBuZXcgZmVuY2UgZG9lc24ndCBnZXQgYWRkZWQsIGJ1 dCByZXR1cm5lZCB0byB0aGUKPj4+ICAgICBjYWxsZXIsIGFuZCB0aGUgZXhwb3J0ZXIgZGVhbHMg d2l0aCB0aGUgRU5PTUVNIG1lc3MuIE1pZ2h0IG5vdCB3b3JrCj4+PiAgICAgc2luY2UgYW4gaW1w b3J0ZXIgY291bGQgaGF2ZSBhIGxvdCBvZiBjb250ZXh0cyB1c2luZyBhIGdpdmVuIG9iamVjdCwg YW5kCj4+PiAgICAgc28gd291bGQgaGF2ZSBhIGxvdCBvZiBmZW5jZXMgdG8gYWRkLgo+PiBJIGRv bid0IHRoaW5rIHRoYXQgdGhpcyB3aWxsIHdvcmsuCj4+Cj4+IFNlZSB5b3Ugbm90IG9ubHkgbmVl ZCB0byBiZSBhYmxlIHRvIGFkZCB0aGUgZmVuY2UgdG8gdGhlIEJPIGN1cnJlbnRseQo+PiBldmlj dGVkLCBidXQgYWxzbyB0byBhbGwgb3RoZXIgQk8gaW4geW91ciBwcm9jZXNzL3dvcmtpbmcgc2V0 Lgo+Pgo+PiBBZGRpdGlvbmFsIHRvIHRoYXQgbW92aW5nIHRoZSBFTk9NRU0gaGFuZGxpbmcgZnJv bSB0aGUgaW1wb3J0ZXIgdG8gdGhlCj4+IGV4cG9ydGVyIHNvdW5kcyBhcyBoZWxwZnVsIGFzIGFk ZGluZyBhbm90aGVyIGxheWVyIG9mIGFic3RyYWN0aW9uIDopCj4gWW91IGNhbiBnbyBhbmQgcGlj ayBhIGRpZmZlcmVudCB2aWN0aW0gdG8gZXZpY3QsIG9yIGp1c3QgZ2l2ZSB1cAo+ICh0aGVyZSdz IG5vdCBtdWNoIHlvdSBjYW4gZG8gd2l0aCBFTk9NRU0pLiBJbnN0ZWFkIG9mIGRhdGEgY29ycnVw dGlvbgo+IGJlY2F1c2UgeW91J3JlIG5vdCB3YWl0aW5nIGZvciBhIGZlbmNlIHlvdSBzaG91bGQg YmUgd2FpdGluZyBvbi4KCk9rLCBidXQgeW91IGNhbiBhcyB3ZWxsIHJldHVybiAtRU5PTUVNIGZy b20gdGhlIG1vdmVfbm90aWZ5IGNhbGxiYWNrLgoKV2hhdCBJIHdhbnRlZCB0byBzYXkgaXMgdGhh dCBieSByZXR1cm5pbmcgdGhlIGVycm9yIGNvZGUgeW91IGFyZSBzdGlsbCAKbW9yZSBmbGV4aWJs ZSB0aGFuIHJldHVybmluZyB0aGUgZmVuY2UuIE9uIG90aGVyIHdvcmRzIHJldHVybmluZyB0aGUg CmZlbmNlIGRvZXNuJ3Qgc2VlbSB0byBoZWxwLi4uCgpDaHJpc3RpYW4uCgo+IC1EYW5pZWwKPgo+ PiBSZWdhcmRzLAo+PiBDaHJpc3RpYW4uCj4+Cj4+PiAtIHNvbWV0aGluZyBlbnRpcmVseSBkaWZm ZXJlbnQ/Cj4+Pgo+Pj4gVGhvdWdodHM/Cj4+Pgo+Pj4gQ2hlZXJzLCBEYW5pZWwKPj4+CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxp bmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZng=