From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 4/5] drm/amdgpu: Wait for end of last waited-for vblank before programming flip Date: Wed, 15 Jun 2016 11:23:09 +0200 Message-ID: <20160615092309.GD1338@phenom.ffwll.local> References: <20160610144312.GF3363@phenom.ffwll.local> <20160613080618.GR3363@phenom.ffwll.local> <20160613140632.GU3363@phenom.ffwll.local> <20160614055341.GM1338@phenom.ffwll.local> <92c76068-94b6-864b-96b5-7b36b32127e5@daenzer.net> <20160614080604.GO1338@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x22f.google.com (mail-wm0-x22f.google.com [IPv6:2a00:1450:400c:c09::22f]) by gabe.freedesktop.org (Postfix) with ESMTPS id E94846E885 for ; Wed, 15 Jun 2016 09:23:13 +0000 (UTC) Received: by mail-wm0-x22f.google.com with SMTP id v199so154417156wmv.0 for ; Wed, 15 Jun 2016 02:23:13 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Michel =?iso-8859-1?Q?D=E4nzer?= Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBKdW4gMTUsIDIwMTYgYXQgMDU6MDM6NDFQTSArMDkwMCwgTWljaGVsIETDpG56ZXIg d3JvdGU6Cj4gT24gMTQuMDYuMjAxNiAxNzowNiwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+IE9u IFR1ZSwgSnVuIDE0LCAyMDE2IGF0IDA0OjI1OjI4UE0gKzA5MDAsIE1pY2hlbCBEw6RuemVyIHdy b3RlOgo+ID4+IE9uIDE0LjA2LjIwMTYgMTQ6NTMsIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPj4+ IE9uIFR1ZSwgSnVuIDE0LCAyMDE2IGF0IDExOjA5OjEwQU0gKzA5MDAsIE1pY2hlbCBEw6RuemVy IHdyb3RlOgo+ID4+Pj4gT24gMDYvMTMvMTYgMjM6MDYsIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4g Pj4+Pj4gT24gTW9uLCBKdW4gMTMsIDIwMTYgYXQgMDU6NTg6MjlQTSArMDkwMCwgTWljaGVsIETD pG56ZXIgd3JvdGU6Cj4gPj4+Pj4+IE9uIDA2LzEzLzE2IDE3OjA2LCBEYW5pZWwgVmV0dGVyIHdy b3RlOgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IEFmYWl1aSB0aGUgcnVsZXMgYXJlOgo+ID4+Pj4+Pj4g LSBUaGUgdGltZXN0YW1wIGZvciB2YmxhbmsgZXZlbnQgbmVlZHMgdG8gYWdyZWUgd2l0aCB3aGF0 ZXZlciBvbWxfc3luYwo+ID4+Pj4+Pj4gICByZXF1cmllcy4KPiA+Pj4+Pj4+IC0gVGhlIGV2ZW50 IGRlbGl2ZXJ5IGl0c2VsZiBuZWVkcyB0byBiZSBjb25zaXN0ZW50IHdpdGggd2hhdCBwYWdlX2Zs aXAKPiA+Pj4+Pj4+ICAgdGFrZXMsIGkuZS4gaWYgdXNlcnNwYWNlIHNlZXMgYW4gZXZlbnQgYW5k IGltbWVkaWF0ZWx5IGlzc3VlcyBhCj4gPj4+Pj4+PiAgIHBhZ2VfZmxpcCB0aGVuIGl0IHNob3Vs ZCBub3QgYmUgYWJsZSB0byBoaXQgdGhlIHNhbWUgdmJsYW5rIHdpdGggdGhhdAo+ID4+Pj4+Pj4g ICBwYWdlZmxpcC4KPiA+Pj4+Pj4+IFsuLi5dCj4gPj4+Pj4+Cj4gPj4+Pj4+PiBJIGFzc3VtZSB5 b3UncmUgZ29hbCBpcyB0byBub3QgZGVsYXkgcGFnZV9mbGlwcyB1bmVjZXNzYXJpbHksIHdpdGhv dXQKPiA+Pj4+Pj4+IGJyZWFraW5nIHJlcXVpcmVtZW50IDIgaGVyZS4gSW1vIGEgc2ltcGxlciBm aXggd291bGQgYmUgdG8gZGVsYXkgdGhlCj4gPj4+Pj4+PiB2YmxhbmsgaGFuZGxpbmcgdG8gZW5k IG9mIHZibGFuay4gRml4ZXMgZXZlcnl0aGluZyB3aXRob3V0IGhhY2tzLCBbLi4uXQo+ID4+Pj4+ Pgo+ID4+Pj4+PiBFeGNlcHQgaXQgYnJlYWtzIHRoZSBvcmlnaW5hbCBwdXJwb3NlIG9mIHRoZSB3 YWl0IGZvciB2YmxhbmsKPiA+Pj4+Pj4gZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgdG8gd2FpdCBm b3IgdGhlIGJlZ2lubmluZyBvZiBhIHZlcnRpY2FsIGJsYW5rCj4gPj4+Pj4+IHBlcmlvZC4gWzBd IFlvdSdyZSBmb2N1c2luZyB0b28gbXVjaCBvbiBwYWdlIGZsaXBzIGFuZCBzdWdnZXN0aW5nIHRv Cj4gPj4+Pj4+IHRocm93IG91dCB0aGUgdmJsYW5rIGJhYnkgd2l0aCB0aGUgYmF0aHdhdGVyLiBJ IHJlYWxseSBkb24ndCBzZWUgdGhlIGJpZwo+ID4+Pj4+PiBpc3N1ZSB3aGljaCB3b3VsZCBqdXN0 aWZ5IHRoYXQuCj4gPj4+Pj4+Cj4gPj4+Pj4+Cj4gPj4+Pj4+IFswXSBBcyBhbiBhbmFsb2d5LCBo b3cgdXNlZnVsIHdvdWxkIGUuZy4gY2FsZW5kYXIgbm90aWZpY2F0aW9ucyBiZSBpZgo+ID4+Pj4+ PiB0aGV5IGFycml2ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZXZlbnRzIHRoZXkncmUgYWJvdXQ/ICJI ZXksIHRoYXQgbWVldGluZwo+ID4+Pj4+PiB5b3Ugd2VyZSBzdXBwb3NlZCB0byBhdHRlbmQ/IEl0 IGp1c3QgZmluaXNoZWQhIgo+ID4+Pj4+Cj4gPj4+Pj4gT2ssIHdoYXQgZXhhY3RseSBpcyB0aGUg dXNlLWNhc2UgZm9yIHdhaXRpbmcgZm9yIHZibGFua3MgX3dpdGhvdXRfCj4gPj4+Pj4gc2NoZWR1 bGluZyBhIGZsaXAgYWZ0ZXJ3YXJkcz8gQXQgbGVhc3QgaW4gZHJtIHRoZSBydWxlIGlzIHRoYXQg QUJJIGlzIHdoYXQKPiA+Pj4+PiB1c2Vyc3BhY2Ugb2JzZXJ2ZXMgYW5kIGFjdHVhbGx5IGNhcmVz IGFib3V0Lgo+ID4+Pj4KPiA+Pj4+IEUuZy46IEluIGNhc2VzIHdoZXJlIHBhZ2UgZmxpcHBpbmcg Y2Fubm90IGJlIHVzZWQsIFhvcmcgLyB0aGUgRERYIGRyaXZlcgo+ID4+Pj4gd2FpdHMgZm9yIHRo ZSB0YXJnZXQgdmVydGljYWwgYmxhbmsgcGVyaW9kIGJlZm9yZSBlbWl0dGluZyB0aGUgZHJhd2lu Zwo+ID4+Pj4gY29tbWFuZHMgZm9yIGEgYnVmZmVyIHN3YXAgb3BlcmF0aW9uLiBJZiB0aGUgdmJs YW5rIG5vdGlmaWNhdGlvbiBvbmx5Cj4gPj4+PiBhcnJpdmVzIHdoZW4gdGhlIHZlcnRpY2FsIGJs YW5rIHBlcmlvZCBpcyBhbHJlYWR5IG92ZXIsIHRoaXMgaXMgdmVyeQo+ID4+Pj4gbGlrZWx5IHRv IHJlc3VsdCBpbiB0ZWFyaW5nLgo+ID4+Pj4KPiA+Pj4+IFNvbWUgWCBjb21wb3NpdG9ycyBhbmQg QUZBSUsgZXZlbiBhcHBsaWNhdGlvbnMgc3VjaCBhcyBtZWRpYSBwbGF5ZXJzIGNhbgo+ID4+Pj4g dXNlIERSTV9JT0NUTF9XQUlUX1ZCTEFOSyBzaW1pbGFybHkuIE9idmlvdXNseSBpdCdzIG5vdCBp bnRlbmRlZCB0byBiZQo+ID4+Pj4gdXNlZCBkaXJlY3RseSBsaWtlIHRoYXQsIGJ1dCBub25ldGhl bGVzcyBpdCBpcy4KPiA+Pj4KPiA+Pj4gSXMgdGhlcmUgcmVhbGx5IGFueXRoaW5nIHVzaW5nIGl0 IGxpa2UgdGhhdCBvdXRzaWRlIG9mIC1hdGk/Cj4gPj4KPiA+PiBZZXMuIFdpdGggRFJJMy9QcmVz ZW50LCBpdCdzIGRyaXZlciBpbmRlcGVuZGVudCBjb2RlIGluCj4gPj4geHNlcnZlci9wcmVzZW50 Ly4gV2l0aCBEUkkyLCBpdCdzIHRoZW9yZXRpY2FsbHkgdXAgdG8gdGhlIEREWCBkcml2ZXIsCj4g Pj4gYnV0IGFsbCBkcml2ZXJzIHNlZW0gdG8gaGF2ZSBiYXNpY2FsbHkgdGhlIHNhbWUgbG9naWM7 IHRoZSBtb2Rlc2V0dGluZwo+ID4+IGRyaXZlciBjZXJ0YWlubHkgZG9lcy4KPiA+IAo+ID4gSG0s IGRpZG4ndCBrbm93IHRoYXQgZXZlcnlvbmUgZG9lcyB0aGF0LiBTZWVtZWQgdG8gc2lsbHkgYW4g aWRlYSB0byB3YXN0ZQo+ID4gYWxsIHRoYXQgZ3B1IGJhbmR3aWR0aCBieSB3YWl0aW5nIGZvciB2 YmxhbmsgLi4uCj4gCj4gQWN0dWFsbHkgaXQncyBraW5kIG9mIHRoZSBvdGhlciB3YXkgYXJvdW5k OiBPbmUgb2YgdGhlIHJlYXNvbnMgZm9yIHVzaW5nCj4gc3luYy10by12YmxhbmsgaXMgdG8gc2F2 ZSBwb3dlciBmb3IgcmVuZGVyaW5nIHN0dWZmIHdoaWNoIGNhbm5vdCBiZSBzZWVuCj4gYW55d2F5 Lgo+IAo+IEFsc28gbm90ZSB0aGF0IG9ubHkgdGhlIHNwZWNpZmljIGNsaWVudCB1c2luZyBEUkky IG9yIFByZXNlbnQgZm9yCj4gcHJlc2VudGF0aW9uIGlzIGJsb2NrZWQsIG5vdGhpbmcgZWxzZS4K PiAKPiAKPiA+Pj4gSSBkaWRuJ3Qga25vdyB0aGF0IHdlIHBhc3MgdmJsYW5rIHdhaXRzIHRvIFgg Y2xpZW50cy4gRWl0aGVyIHdheSBhbm5veWluZywKPiA+Pj4gc2luY2UgaXQgbWVhbnMgeW91IG5l ZWQgdG8ga2VlcCB0aGluZ3Mgd29ya2luZyBsaWtlIHRoaXMgZm9yIGFtZCBkcml2ZXJzCj4gPj4+ IGZvcmV2ZXIuCj4gPj4KPiA+PiBQbGVhc2UgZG9uJ3QgdHJ5IHRvIHNpbmdsZSBvdXQgb3VyIGRy aXZlcnMsIGl0IHNlZW1zIGxpa2UgcmF0aGVyIHlvdXIKPiA+PiBkcml2ZXIgaXMgdGhlIG9kZCBt YW4gb3V0IGluIHRoaXMgY2FzZS4KPiA+IAo+ID4gSG0sIHdoeS93aGVyZSBpcyBpOTE1IHNwZWNp YWw/Cj4gCj4gQnkgb25seSB0cmlnZ2VyaW5nIHRoZSB2YmxhbmsgaW50ZXJydXB0IGF0IHRoZSBl bmQgb2YgYSB2ZXJ0aWNhbCBibGFuawo+IHBlcmlvZCwgYnJlYWtpbmcgdGhlIG9yaWdpbmFsIERS TV9JT0NUTF9XQUlUX1ZCTEFOSyBmdW5jdGlvbmFsaXR5LgoKT2ssIHR1cm5zIG91dCB3ZSBuZXZl ciBkaWQgdGhhdCwgYnV0IHdlIGRpZCBtb3ZlIHRoZSBkcm0gZXZlbnQgZm9yIHBhZ2UKZmxpcCBj b21wbGV0aW9uIGFyb3VuZC4gU28gaW5kZWVkIHZibGFuayB3YWl0IGRybSBldmVudCBzaG91bGQg ZmlyZSBhdApzdGFydCBvZiB2YmxhbmsgaWYgcG9zc2libGUuIEkgc3RpbGwgbWFpbnRhaW4gdGhh dCAoYnkgZGVmYXVsdCkgeW91CnNob3VsZG4ndCBhbGxvdyBhIHBhZ2UgZmxpcCB0byBvdmVydGFr ZSBhIGRybSBldmVudC4KCj4gPj4+IEhvdyBiYWQgd291bGQgaXQgcmVhbGx5IGJlIHRvIGp1c3Qg YWx3YXlzIGRlbGF5IHRoZSBwYWdlX2ZsaXAgcGFzdCB2Ymxhbms/Cj4gPj4KPiA+PiBJbiB0aGUg dmFyaWFibGUgcmVmcmVzaCByYXRlIGNhc2UgaXQgY291bGQgYmUgcHJldHR5IGJhZCwgYmFzaWNh bGx5Cj4gPj4gZHJvcHBpbmcgdG8gdGhlIG1pbmltdW0gcmVmcmVzaCByYXRlLgo+ID4gCj4gPiBW YXJpYWJsZSByZWZyZXNoIHJhdGUgaXMgZW50aXJlbHkgdW5kZWZpbmVkIHJpZ2h0IG5vdyBpbiBr bXMuCj4gCj4gSSBkb24ndCB0aGluayB0aGF0IHJlYWxseSBtYXR0ZXJzIGZvciB0aGUgaXNzdWUg SSdtIHRoaW5raW5nIG9mLgo+IAo+IE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB2YXJpYWJsZSBy ZWZyZXNoIHJhdGUgYmFzaWNhbGx5IHdvcmtzIGJ5Cj4gdHJhbnNtaXR0aW5nIHRoZSBmcmFtZSBj b250ZW50cyB1c2luZyB0aGUgbWF4aW11bSByZWZyZXNoIHJhdGUgdGltaW5nLAo+IGFuZCB0aGVu IGR5bmFtaWNhbGx5IGV4dGVuZGluZyB0aGUgdmVydGljYWwgYmxhbmsgcGVyaW9kIHVudGlsIGVp dGhlcgo+IHRoZSBuZXh0IGZsaXAgYXJyaXZlcywgb3IgdGhlIHRpbWUgc2luY2UgdGhlIGxhc3Qg ZnJhbWUgd2FzIHRyYW5zbWl0dGVkCj4gY29ycmVzcG9uZHMgdG8gdGhlIG1pbmltdW0gcmVmcmVz aCByYXRlLiBTbyBpZiB3ZSBhbHdheXMgd2FpdCBmb3IgdGhlCj4gZW5kIG9mIHZlcnRpY2FsIGJs YW5rIGJlZm9yZSBwcm9ncmFtbWluZyBhIGZsaXAsIHdlJ2xsIHByb2JhYmx5IGVuZCB1cAo+IGRl Z3JhZGluZyB0byB0aGUgbWluaW11bSByZWZyZXNoIHJhdGUgd2hlbmV2ZXIgd2UncmUgYWxyZWFk eSBpbiB2ZXJ0aWNhbAo+IGJsYW5rIGJ5IHRoZSB0aW1lIHdlJ3JlIHJlYWR5IHRvIHByb2dyYW0g dGhlIGZsaXAuIFdoaWNoIHdpbGwgaGFwcGVuCj4gd2l0aCBhbnkgYXBwIHdoaWNoIGNhbm5vdCBz dXN0YWluIGEgZnJhbWVyYXRlID4gdGhlIG1heGltdW0gcmVmcmVzaAo+IHJhdGUuIFNvIHdlJ2xs IGVuZCB1cCBydW5uaW5nIGF0IGVpdGhlciB0aGUgbWluaW11bSBvciBtYXhpbXVtIHJlZnJlc2gK PiByYXRlIChvciBwb3NzaWJseSBldmVuIHdvcnNlLCBmbGlwLWZsb3BwaW5nIGJldHdlZW4gdGhl IHR3byksIGRlZmVhdGluZwo+IHRoZSBwdXJwb3NlIG9mIHZhcmlhYmxlIHJlZnJlc2ggcmF0ZS4K PiAKPiAKPiBBbHNvLCBhcyBJIGV4cGxhaW5lZCBiZWZvcmUsIGV2ZW4gd2l0aG91dCB2YXJpYWJs ZSByZWZyZXNoIHJhdGUsIGFsd2F5cwo+IGRlbGF5aW5nIGZsaXAgcHJvZ3JhbW1pbmcgcGFzdCB2 YmxhbmsgY2FuIGNhdXNlIGZsaXBzIHRvIGJlCj4gdW5uZWNlc3NhcmlseSBkZWxheWVkIGJ5IG9u ZSBmcmFtZS4KClllcywgYnV0IHJpZ2h0IG5vdyB5b3Ugc2hvdyB0aGVtIHRvbyBlYXJseSwgYnJl YWtpbmcgZXhpc3Rpbmcgc3R1ZmYuIE15CnN0YW5jZSBpcyB0aGF0IHlvdSBuZWVkIGFuIGV4cGxp Y2l0IGZsYWcgdG8gdGVsbCB0aGUga2VybmVsIHdoaWNoIG9uZSB5b3UKd2FudCAodXNlcnNwYWNl IHRlbGxzIHlvdSBhbHJlYWR5IGJ5IGVpdGhlciBhc2tpbmcgZm9yIGEgc3BlY2lmaWMgZnJhbWUs Cm9yIGZvciAiYXMgc29vbiBhcyBwb3NzaWJsZSIpLiBJIGRvbid0IGxpa2Ugc2Vjb25kLWd1ZXNz aW5nIHVzZXJzcGFjZS4KQW5kIHllcyB0aGF0IG1lYW5zIHRoYXQgZm9yIHZhcmlhYmxlIHZyZWZy ZXNoIHlvdSBwcm9iYWJseSBuZWVkIHRvIHJ1biBpdAphdCA2MEh6IGJ5IGRlZmF1bHQsIGV4Y2Vw dCB3aGVuIHVzZXJzcGFjZSBzZXQgYSBzcGVjaWFsIG1vZGUgZmxhZyB3aGljaAphbGxvd3MgdmFy aWFibGUgdnJlZnJlc2gsIHRlbGxpbmcgdGhlIGtlcm5lbCB0aGF0IGl0IGtub3dzIHRoaW5ncyBj YW4gZ2V0CnNsb3cgaWYgaXQgZG9lc24ndCBhc2sgZm9yIGFzYXAuCgo+ID4+PiBJZiB0aGF0J3Mg bm90IGdvb2QgZW5vdWdoIEknZCBzYXkgd2Ugc2hvdWxkIGFkZCBhCj4gPj4+IGZhc3Rlci10aGFu LXZibGFuay1idXQtc3RpbGwtc3luY2VkIHBhZ2VfZmxpcCBmbGFnLiBUaGVuIHVzZXJzcGFjZSBj b3VsZAo+ID4+PiB0ZWxsIHlvdSBleGFjdGx5IHdoZXRoZXIgeW91IHNob3VsZCBhbHdheXMgd2Fp dCAobm8gZmxhZ3MpLCBvciBuZXZlciB3YWl0Cj4gPj4+ICh3aXRoIHRoaXMgbmV3IGZsYWcpLgo+ ID4+Cj4gPj4gVGhhdCB3b3VsZCBiZSBhbiBpbmZlcmlvciBzb2x1dGlvbiBjb21wYXJlZCB0byBt eSBzZXJpZXMsIGUuZy46IElmCj4gPj4gdXNlcnNwYWNlIGNhbGxzIERSTV9JT0NUTF9NT0RFX1BB R0VfRkxJUCBiZWZvcmUgdGhlIHRhcmdldCB2Ymxhbmsgc2Vxbm8KPiA+PiBpcyByZWFjaGVkLCBp dCBjYW5ub3QgdXNlIHRoZSBuZXcgZmxhZywgb3RoZXJ3aXNlIHRoZSBmbGlwIG1pZ2h0IHRha2UK PiA+PiBlZmZlY3QgdG9vIGVhcmx5LiBIb3dldmVyLCBpZiB3ZSBhcmUgdGhlbiBhbHJlYWR5IGlu IHRoZSB0YXJnZXQgdmJsYW5rCj4gPj4gcGVyaW9kIHdoZW4gdGhlIGZlbmNlcyBoYXZlIHNpZ25h bGxlZCBhbmQgd2UgYXJlIHJlYWR5IHRvIHByb2dyYW0gdGhlCj4gPj4gZmxpcCwgd2UgaGF2ZSB0 byB3YWl0IGZvciB0aGUgZW5kIG9mIHZibGFuayBmaXJzdCwgYW5kIHRoZSBmbGlwIHdpbGwgYmUK PiA+PiBkZWxheWVkIGJ5IG9uZSBmcmFtZS4KPiA+Pgo+ID4+IElmIHdlJ3JlIGdvaW5nIHRvIGNo YW5nZSB0aGUgdXNlcnNwYWNlIGludGVyZmFjZSwgaXQgd291bGQgYmUgYmV0dGVyIHRvCj4gPj4g cmUtcHVycG9zZSB0aGUgcmVzZXJ2ZWQgZmllbGQgb2Ygc3RydWN0IGRybV9tb2RlX2NydGNfcGFn ZV9mbGlwIGZvcgo+ID4+IGV4cGxpY2l0bHkgc3BlY2lmeWluZyB0aGUgdGFyZ2V0IHZibGFuayBz ZXFubyAodmlhIGEgbmV3IGNhcCBhbmQgZmxhZykuCj4gPj4gVGhlbiB0aGUga2VybmVsIGFuZCB1 c2Vyc3BhY2Ugd291bGQgbm8gbG9uZ2VyIG5lZWQgdG8gc2Vjb25kLWd1ZXNzIGVhY2gKPiA+PiBv dGhlci4KPiA+Pgo+ID4+IEJ1dCBldmVuIGlmIHdlIHRha2UgdGhhdCByb3V0ZSwgdGhpcyBzZXJp ZXMgd291bGQgYmUgZGVzaXJhYmxlIGZvcgo+ID4+IGdldHRpbmcgdXMgbW9zdCBvZiB0aGUgd2F5 IHRoZXJlIGZvciBleGlzdGluZyB1c2Vyc3BhY2UuCj4gPiAKPiA+IFdlbGwgdGhhdCdzIHdoYXQg SSBtZWFuLiBZb3UnciBwYXRjaGVzIGhlcmUgc2hvZWhvcm4gd2hhdCB5b3Ugd2FudCBpbnRvCj4g PiBleGlzdGluZyBhcGksIHRyeWluZyB0byBzZWNvbmQtZ3Vlc3MgdXNlcnNwYWNlcyBpbnRlbnRp b25zIGluZmVycmVkIGZyb20KPiA+IHdoYXQgaXQgZG9lcy4gSW1lIHRoYXQgdGVuZHMgdG8gZW5k IGluIHRyb3VibGUuIEl0IHdvdWxkIGJlIG11Y2ggYmV0dGVyIHRvCj4gPiBoYXZlIGEgY2xlYXIg dWFiaSBmb3IgdGhpcy4gQW5kIG15IGZsYWcgd2FzIGp1c3QgYSBzdWdnZXN0aW9uLgo+ID4gCj4g PiBJIGp1c3QgaGFkIGEgZGlzY3Vzc2lvbiBvbiBpcmMgd2l0aCBEYXZlIGFib3V0IGFub3RoZXIg dG9waWMgd2VyZSBEYXZlCj4gPiBjb21wbGFpbmVkIGFib3V0IHNvbWUgb2YgdGhlIGluZmVycmVk IGFiaSBydWxlcyBTTkEgdXNlcyAoZW50aXJlbHkKPiA+IGRpZmZlcmVudGx5LCBpbiBwcm9iZSBj b2RlKS4gQW5kIEkgdGhvdWdodCBpdCB3YXMgYSBuaWNlIGlkZWEsIHNpbmNlIGhleQo+ID4gaXQg d29ya3MgYW5kIGl0cyBlYXNpZXIuIEJ1dCByZWFsbHkgaXQncyBub3QsIHNpbmNlIGluIHRoZSBl bmQga21zIGlzCj4gPiBzdXBwb3NlZCB0byBiZSBzb21ld2hhdCBnZW5lcmljLiBBbmQgdXN1YWxs eSB5b3VyIG5pY2UgaWRlYSBmb3IgaW5mZXJyaW5nCj4gPiBiZWhhdmlvdXIgdGhlbiB0ZW5kcyB0 byBicmVhayBkb3duIHNvbWV3aGVyZS4gQXQgbGVhc3QgSSB0aGluayB0aGUgZ2VuZXJpYwo+ID4g a21zIHJ1bGVzIGFyZToKPiA+IAo+ID4gLSB2YmxhbmsgZXZlbnRzIGZpcmUgYXQgbG9ja3N0ZXAg Wy4uLl0uCj4gPiAtIHBhZ2VmbGlwIGltbWVkaWF0ZWx5IGFmdGVyIGEgdmJsYW5rIHdhaXQgbmVl ZHMgdG8gaGl0IHRoZSBuZXh0IHZibGFuay4KPiA+IC0gcGFnZWZsaXAgaW4gYSBsb29wIG5lZWRz IHRvIHJlc3VsdCBpbiBhdCBtb3N0IDEgZmxpcCBwZXIgdmJsYW5rLCBhbmQgaWYKPiA+ICAgeW91 J3JlIHRvbyBmYXN0IHRoZW4gdGhlIGtlcm5lbCBzaG91bGQgcmV0dXJuIC1FQlVTWS4gWy4uLl0K PiAKPiBNeSBzZXJpZXMgZG9lc24ndCBicmVhayBhbnkgb2YgdGhlc2UgcnVsZXMgKG9yIGFueSBv dGhlcnMgSSdtIGF3YXJlIG9mKS4KPiBJdCBhdm9pZHMgdW5uZWNlc3NhcmlseSBkZWxheWluZyBm bGlwcyBpbiBzb21lIGNhc2VzIHdpdGhpbiB0aGUgY29uZmluZXMKPiBvZiB0aGVzZSBydWxlcy4K PiAKPiAKPiA+IEltbyBldmVyeXRoaW5nIGVsc2UgKGluIHRoaXMgY2FzZTogbWFrZSB0aGUgZmxp cCBjb21wbGV0ZSBvbiB0aGUgc2FtZQo+ID4gZnJhbWUgYXMgdGhlIHZibGFuaywgaWYgeW91IGhp dCB0aGUgdmJsYW5rIHdpbmRvdykgbmVlZHMgc3BlY2lhbCBmbGFncywKPiA+IHdpdGggY2xlYXIg bWVhbmluZyBvZiB3aGF0IHRoZXkgZG8uIFRoZSBzcGVjaWZpYyBmbGlwIHRhcmdldCBzb3VuZHMg bGlrZSBhCj4gPiBnb29kIGlkZWEsIGV4Y2VwdCB0aGF0IGN1cnJlbnQgdXNlcnNwYWNlIGNhbid0 IGJlIGZpeGVkLCBzbyB3ZSBuZWVkIHRvCj4gPiBtYWtlIGl0IHdvcmsgd2l0aG91dCBhbnkgZmxh Zy4KPiAKPiBIZXksIHRoYXQgd2FzIG15IHBvaW50IGFib3ZlISBTbyB5b3UgYWdyZWUgdGhhdCAo c29tZXRoaW5nIGxpa2UpIHRoaXMKPiBzZXJpZXMgd2lsbCBiZSBuZWVkZWQgYW55d2F5LCBldmVu IGlmIG5ldyBmbGFncyBhcmUgYWRkZWQgdG8gbWFrZSBpdAo+IG1vcmUgZXhwbGljaXQ/IDopCgpZ ZWFoIEkgdGhpbmsgdGhlcmUncyBhIGJpdCBvZiBjb25mdXNpb24gZ29pbmcgb24gaGVyZSA7LSkg T2YgY291cnNlIEknbQpub3QgYWdhaW5zdCBmaXhpbmcgdGhpcywgYW5kIEkgYWdyZWUgdGhhdCBm aXhpbmcgaXQgYnkgZGVsYXlpbmcgdGhlIHZibGFuawpkcm0gZXZlbnQgKGxpa2UgSSBwcm9wb3Nl ZCBhdCBmaXJzdCkgaXMgbm90IGdvb2QuIFdoYXQgSSB0aGluayB3b3VsZCBiZQpiZXN0IHRvIGZp eCB0aGlzOgoKLSBGb3IgYWxsIGN1cnJlbnQgdXNlcnNwYWNlIChpLmUuIG5vIGZsYWdzIG9yIGFu eXRoaW5nKSBmb3JjZSB2cmVmcmVzaCB0bwogIHRvIGJlIGZpeGVkLCBhbmQgZGVsYXkgcGFnZSBm bGlwcyB3aGljaCBoaXQgdGhlIHZibGFuayB3aW5kb3cgdG8gYmUKICBhZnRlciB0aGF0LiBUaGlz IHdheSBhbWQgZHJpdmVycyBhcmUgY29uc2lzdGVudCB3aXRoIGV2ZXJ5IG90aGVyIGttcwogIGRy aXZlcnMsIGFuZCB3b3JrIGxpa2UgY3VycmVudCB1c2Vyc3BhY2Ugc2VlbXMgdG8gZXhwZWN0OiBX YWl0IGZvcgogIHZibGFuaywgdGhlbiBhc3N1bWUgYW55IGZsaXBzIHdpbGwgb25seSBoaXQgYWZ0 ZXIgdGhlIG5leHQgdmJsYW5rLgoKLSBGb3IgY2xpZW50cyB3aGljaCBkb24ndCBjYXJlIGFib3V0 IHdoaWNoIGZyYW1lIHRvIGJlIGRpc3BsYXllZCBvbiwgYWRkIGEKICBmbGFnIHRvIHBhZ2VfZmxp cCAoYW5kIGF0b21pY19jb21taXQpIHRoYXQgYXNrcyBmb3IgYXNhcCwgYnV0IHN0aWxsCiAgd2l0 aG91dCB0ZWFyaW5nLiBXaXRoIGF0b21pYyB3ZSBldmVuIHdhbnQgdG8gYmUgYWJsZSB0byBvdmVy d3JpdGUgb2xkZXIKICBmbGlwcywgdG8gcmVkdWNlIGxhdGVuY3kgYXMgbXVjaCBhcyBwb3NzaWJs ZSBmb3IgY2xpZW50cyB3aG8gY2FuIHJlbmRlcgogIG1vcmUgZnJhbWVzIHRoYW4gdnJlZnJlc2gu CgotIEZvciB2YXJpYWJsZSB2cmVmcmVzaCBJIHRoaW5rIHdlIG5lZWQgeWV0IGFub3RoZXIgZmxh ZyAoY3J0YyBwcm9wZXJ0eSwKICBvciBtb2RlIGZsYWcpIHNvIHRoYXQgdXNlcnNwYWNlIGNhbiB0 ZWxsIHRoZSBrZXJuZWwgd2hlbiBpdCdzIG9rIHRvIGhhdmUKICB2YmxhbmsgdGltZXMgd2l0aCBt YXNzaXZlIGppdHRlci4gQWdhaW4gZGVmYXVsdCBzaG91bGQgYmUgY3VycmVudCBtb2RlLgogIFVz ZXJzcGFjZSBjYW4gdGhlbiBlbmFibGUgdmFyaWFibGUgdnJlZnJlc2ggd2hlbiBpdCBvbmx5IGhh cyBjbGllbnRzCiAgd2hpY2ggZG9uJ3QgY2FyZSB3aGVuIGV4YWN0bHkgdGhleSBzaG93IHVwLiBB cyBzb29uIGFzIHNvbWV0aGluZyBzaG93cwogIHVwIHdoaWNoIGFza3MgZm9yIHByZWNpc2UgdGlt ZXN0YW1wcyBhbmQgZGlzcGxheWluZyBvZiB0aGUgZmxpcCAodXNpbmcKICBPTUxfc3luY19jb250 cm9sIG9yIFByZXNlbnQpLCB1c2Vyc3BhY2UgY2FuIGRpc2FibGUgdGhlIHZhcmlhYmxlCiAgdnJl ZnJlc2ggbW9kZSBhZ2FpbiB0byBnZXQgYmFjayB0byBhIGxvY2tzdGVwIDYwSHogKG9yIHdoYXRl dmVyIGl0IGlzKS4KCi0gQW55b25lIHVzaW5nIFdBSVRfVkJMQU5LIGJlaGluZCB0aGUgY29tcG9z aXRvcnMgYmFjayBtaWdodCBiZSBpbiBldmVuCiAgbW9yZSB0cm91YmxlLCBidXQgaW1vIHdlIHNo b3VsZG4ndCBnaXZlIHRvbyBtdWNoIGNvbmNlcm4gdG8gdGhhdCBjYXNlLgogIEluc3RlYWQgYXBw bHkgbW9yZSBwcmVzc3VyZSBmb3IgZXZlcnlvbmUgdG8gc3dpdGNoIG92ZXIgdG8gUHJlc2VudCBv cgogIE9NTF9zeW5jX2NvbnRyb2wgKGFuZCB3ZSBuZWVkIHRoYXQgZm9yIEVHTCwgdG9vKS4KClRo YXQgd2F5IHRoZXJlJ3Mgbm8gc2Vjb25kLWd1ZXNzaW5nIG9mIHVzZXJzcGFjZSBpbnRlbnRpb25z IGJ5IHdhdGNoaW5nCnZibGFuayB3YWl0cywgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGV4dGVu ZCBmb3IgdmFyaWFibGUgcmVmcmVzaCBhbmQKYmVuY2htYXJrL2xvdy1sYXRlbmN5IG1vZGUsIGFu ZCB3ZSBkb24ndCBuZWVkIHNwZWNpYWwgZHJpdmVyIGhhY2tzIGluIGNvcmUKY29kZSBlaXRoZXIu IFRob3VnaHRzIG9uIHdoZXRoZXIgdGhpcyBwbGFuIHdvdWxkIGZpdCB5b3UgdG9vPwoKQ2hlZXJz LCBEYW5pZWwKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBv cmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=